Pagination
OrganismSayfa gezinme kontrolü. Sayfa penceresi + ellipsis hesabı, first/last butonları ve boyut varyantları.
<%
var _page = locals.page || 1;
var _totalPages = locals.totalPages || 1;
var _size = locals.size || 'md';
var _showFirstLast = !!locals.showFirstLast;
var _className = locals.className || '';
var sizeMap = {
sm: { page: 'w-7 h-7 text-xs', nav: 'px-2 py-1 text-xs' },
md: { page: 'w-9 h-9 text-sm', nav: 'px-3 py-1.5 text-sm' },
lg: { page: 'w-10 h-10 text-base', nav: 'px-4 py-2 text-base' },
};
var s = sizeMap[_size] || sizeMap.md;
var allPages = [];
for (var i = 1; i <= _totalPages; i++) allPages.push(i);
var visible = allPages.filter(function (p) {
return p === 1 || p === _totalPages || Math.abs(p - _page) <= 1;
});
var withEllipsis = [];
var prevP = null;
for (var j = 0; j < visible.length; j++) {
var vp = visible[j];
if (prevP !== null && vp - prevP > 1) withEllipsis.push('ellipsis');
withEllipsis.push(vp);
prevP = vp;
}
var navBtnBase = 'rounded-md font-medium border transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus ' + s.nav;
var navEnabled = 'border-border text-text-secondary hover:bg-surface-overlay hover:text-text-primary';
var navDisabled = 'border-border text-text-disabled cursor-not-allowed opacity-50';
%>