@cdevhub/ngx-tw 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +264 -49
- package/fesm2022/cdevhub-ngx-tw-accordion.mjs +11 -7
- package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-alert.mjs +43 -29
- package/fesm2022/cdevhub-ngx-tw-alert.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs +103 -0
- package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-avatar.mjs +56 -31
- package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-badge.mjs +61 -35
- package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +154 -93
- package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-button.mjs +24 -15
- package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +3 -3
- package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-calendar.mjs +408 -215
- package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-card.mjs +33 -24
- package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-carousel.mjs +144 -79
- package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +99 -47
- package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-code-block.mjs +34 -20
- package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +46 -29
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs +195 -110
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +140 -73
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-core.mjs +16 -11
- package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +393 -149
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +305 -150
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs +56 -43
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +51 -33
- package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-file-upload.mjs +905 -0
- package/fesm2022/cdevhub-ngx-tw-file-upload.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +49 -26
- package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs +133 -74
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs +2 -2
- package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-icon.mjs +28 -17
- package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-input.mjs +37 -21
- package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-item.mjs +33 -24
- package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-menu.mjs +63 -48
- package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-number-input.mjs +622 -0
- package/fesm2022/cdevhub-ngx-tw-number-input.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs +137 -71
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-popover.mjs +101 -46
- package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +57 -30
- package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-radio.mjs +108 -57
- package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +46 -26
- package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-select.mjs +217 -122
- package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-separator.mjs +21 -12
- package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs +58 -44
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-skeleton.mjs +25 -14
- package/fesm2022/cdevhub-ngx-tw-skeleton.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-slider.mjs +155 -79
- package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-sort.mjs +44 -25
- package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-spinner.mjs +29 -16
- package/fesm2022/cdevhub-ngx-tw-spinner.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-split.mjs +72 -42
- package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-stat.mjs +107 -64
- package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-stepper.mjs +113 -47
- package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-switch.mjs +61 -32
- package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +88 -42
- package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-table.mjs +266 -118
- package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tabs.mjs +101 -51
- package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +798 -0
- package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-textarea.mjs +11 -7
- package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-theme.mjs +22 -14
- package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +243 -95
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-timeline.mjs +149 -82
- package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-toast.mjs +89 -55
- package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +50 -28
- package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-transfer.mjs +1129 -0
- package/fesm2022/cdevhub-ngx-tw-transfer.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-tree.mjs +554 -0
- package/fesm2022/cdevhub-ngx-tw-tree.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw.mjs +7 -0
- package/fesm2022/cdevhub-ngx-tw.mjs.map +1 -1
- package/package.json +45 -20
- package/theme/index.css +10 -2
- package/types/cdevhub-ngx-tw-aspect-ratio.d.ts +40 -0
- package/types/cdevhub-ngx-tw-calendar.d.ts +39 -8
- package/types/cdevhub-ngx-tw-command-palette.d.ts +7 -0
- package/types/cdevhub-ngx-tw-date-picker.d.ts +36 -10
- package/types/cdevhub-ngx-tw-file-upload.d.ts +250 -0
- package/types/cdevhub-ngx-tw-form-field.d.ts +22 -3
- package/types/cdevhub-ngx-tw-icon-lucide.d.ts +21 -3
- package/types/cdevhub-ngx-tw-number-input.d.ts +130 -0
- package/types/cdevhub-ngx-tw-popover.d.ts +8 -0
- package/types/cdevhub-ngx-tw-stepper.d.ts +30 -2
- package/types/cdevhub-ngx-tw-tab-nav.d.ts +8 -0
- package/types/cdevhub-ngx-tw-table.d.ts +30 -1
- package/types/cdevhub-ngx-tw-tabs.d.ts +8 -0
- package/types/cdevhub-ngx-tw-tags-input.d.ts +217 -0
- package/types/cdevhub-ngx-tw-time-picker.d.ts +31 -6
- package/types/cdevhub-ngx-tw-transfer.d.ts +330 -0
- package/types/cdevhub-ngx-tw-tree.d.ts +189 -0
- package/types/cdevhub-ngx-tw.d.ts +7 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdevhub-ngx-tw-paginator.mjs","sources":["../../../projects/ngx-tw/paginator/paginator.ts","../../../projects/ngx-tw/paginator/paginator.html","../../../projects/ngx-tw/paginator/cdevhub-ngx-tw-paginator.ts"],"sourcesContent":["import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n isDevMode,\n model,\n output,\n TemplateRef,\n untracked,\n viewChildren,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { type FocusableOption, FocusKeyManager, LiveAnnouncer } from '@angular/cdk/a11y';\nimport { tv } from 'tailwind-variants';\nimport type { TwColor, TwSize } from '@cdevhub/ngx-tw/core';\n\n// ── Public types ──────────────────────────────────────────────────\n\n/** Rendering type. `'basic'` shows prev/next + page info only. `'numbered'` shows page buttons with ellipsis range. */\nexport type TwPaginatorType = 'basic' | 'numbered';\n\n/** Layout density. `'compact'` stacks regions left-to-right. `'spread'` distributes regions across the full container width. */\nexport type TwPaginatorLayout = 'compact' | 'spread';\n\n/** Responsive mode. `'auto'` collapses numbered pages to basic visuals on narrow containers via CSS container queries. `'off'` disables collapsing. */\nexport type TwPaginatorResponsive = 'auto' | 'off';\n\n/** Named slot accepted by `*twPaginatorLabel`. */\nexport type TwPaginatorLabelSlot =\n | 'pageInfo'\n | 'previous'\n | 'next'\n | 'first'\n | 'last'\n | 'pageSizeLabel';\n\n/** String labels used throughout the paginator. All are optional on the `labels` input — unset keys fall back to the English defaults. */\nexport interface TwPaginatorLabels {\n /** Accessible name for the `<nav>` landmark. */\n ariaLabel: string;\n /** Label on the Previous button. */\n previous: string;\n /** Label on the Next button. */\n next: string;\n /** Label on the First-page button. */\n first: string;\n /** Label on the Last-page button. */\n last: string;\n /** Visible label before the current-page indicator. Used as `\"{pageInfo} {page}{pageInfoSeparator}{totalPages}\"`. */\n pageInfo: string;\n /** Text that joins the current page and total. */\n pageInfoSeparator: string;\n /** Range-style page info template. Variables: `{start}`, `{end}`, `{total}`. */\n pageRange: string;\n /** Visible label next to the page-size selector. */\n pageSizeLabel: string;\n /** `LiveAnnouncer` template used on every page change. Variables: `{page}`, `{totalPages}`, `{start}`, `{end}`, `{total}`. */\n announcement: string;\n /** Accessible label per numbered page button. Variable: `{page}`. */\n pageButtonAriaLabel: string;\n /** Accessible label for the current numbered page button. Variable: `{page}`. */\n currentPageAriaLabel: string;\n /** Accessible label applied to ellipsis items. */\n ellipsis: string;\n /** Rendered when `hideOnEmpty` is `false` and `totalItems === 0`. */\n empty: string;\n}\n\n/** Emitted by `pageChange`. */\nexport interface TwPaginatorPageChangeEvent {\n /** The new 1-based page. */\n page: number;\n /** The new items-per-page. */\n pageSize: number;\n /** The previous 1-based page. */\n previousPage: number;\n /** The previous items-per-page. */\n previousPageSize: number;\n /** Total number of items. */\n totalItems: number;\n /** Total number of pages given the current `totalItems` and `pageSize`. */\n totalPages: number;\n /** 1-based index of the first item on the new page (inclusive). */\n start: number;\n /** 1-based index of the last item on the new page (inclusive). */\n end: number;\n /** What triggered the change. */\n source: 'click' | 'keyboard' | 'pageSizeChange' | 'programmatic';\n}\n\n/** Template context provided to every `*twPaginatorLabel` and `*twPaginatorEmpty` template. */\nexport interface TwPaginatorLabelContext {\n /** 1-based current page. */\n page: number;\n /** Total pages. */\n totalPages: number;\n /** 1-based index of the first item on the current page (inclusive). */\n start: number;\n /** 1-based index of the last item on the current page (inclusive). */\n end: number;\n /** Total number of items. */\n totalItems: number;\n /** Current items per page. */\n pageSize: number;\n /** Whether the paginator is globally disabled. */\n disabled: boolean;\n}\n\n/** Template context provided to `*twPaginatorPageSizeSelector`. */\nexport interface TwPaginatorPageSizeSelectorContext {\n /** Current page size. */\n pageSize: number;\n /** Available page-size options. */\n options: readonly number[];\n /** Updates the page size and re-anchors the current page to keep the same first visible item. */\n setPageSize: (size: number) => void;\n}\n\n// ── Internal types ────────────────────────────────────────────────\n\ntype PaginationRangeItem = number | 'ellipsis-left' | 'ellipsis-right';\n\ntype PageChangeSource = TwPaginatorPageChangeEvent['source'];\n\n// ── Default labels ────────────────────────────────────────────────\n\nconst DEFAULT_LABELS: Readonly<TwPaginatorLabels> = {\n ariaLabel: 'Pagination',\n previous: 'Previous',\n next: 'Next',\n first: 'First page',\n last: 'Last page',\n pageInfo: 'Page',\n pageInfoSeparator: ' of ',\n pageRange: '{start}\\u2013{end} of {total}',\n pageSizeLabel: 'Items per page:',\n announcement: 'Page {page} of {totalPages}',\n pageButtonAriaLabel: 'Go to page {page}',\n currentPageAriaLabel: 'Page {page}, current page',\n ellipsis: 'More pages',\n empty: 'No results',\n};\n\n// ── Static active-page class maps (Tailwind v4 requires statically written class strings) ──\n// Mirrors the checkbox SOLID_BOX / SOLID_ICON split: a per-color background + border map\n// and a per-color on-color text map. `text-on-{color}` keeps the active button readable\n// against any consumer theme without hardcoding `text-white` (would fail for warning's\n// dark-on-amber convention) or `text-black`. The legacy `--color-on-*` alias tokens still\n// resolve to the canonical solid-fg slot per `theme/_semantic.css` lines 284-296.\n\nconst PAGE_BUTTON_ACTIVE_BG: Record<TwColor, string> = {\n primary: 'bg-primary-600 hover:bg-primary-700 border-primary-600 focus-visible:outline-primary-500',\n secondary: 'bg-secondary-600 hover:bg-secondary-700 border-secondary-600 focus-visible:outline-secondary-500',\n accent: 'bg-accent-600 hover:bg-accent-700 border-accent-600 focus-visible:outline-accent-500',\n neutral: 'bg-fg hover:bg-fg border-fg focus-visible:outline-fg',\n info: 'bg-info-600 hover:bg-info-700 border-info-600 focus-visible:outline-info-500',\n success: 'bg-success-600 hover:bg-success-700 border-success-600 focus-visible:outline-success-500',\n // Warning keeps -500 because the amber-500/amber-950 pairing meets contrast — see\n // `theme/_semantic.css` warning role comment (\"yellow signage convention\").\n warning: 'bg-warning-500 hover:bg-warning-600 border-warning-500 focus-visible:outline-warning-500',\n error: 'bg-error-600 hover:bg-error-700 border-error-600 focus-visible:outline-error-500',\n};\n\nconst PAGE_BUTTON_ACTIVE_FG: Record<TwColor, string> = {\n primary: 'text-on-primary',\n secondary: 'text-on-secondary',\n accent: 'text-on-accent',\n neutral: 'text-on-neutral',\n info: 'text-on-info',\n success: 'text-on-success',\n warning: 'text-on-warning',\n error: 'text-on-error',\n};\n\n// ── Pure helpers (exported for unit testing only — not re-exported from index.ts) ──\n\n/**\n * Builds the visible page range for the numbered paginator, inserting ellipsis\n * sentinels where ranges are collapsed. Port of the shadcn/Radix algorithm.\n *\n * @internal exported for unit tests; not part of the public API.\n */\nexport function buildPaginationRange(\n currentPage: number,\n totalPages: number,\n siblingCount: number,\n boundaryCount: number,\n): PaginationRangeItem[] {\n const total = Math.max(0, Math.floor(totalPages));\n if (total <= 0) return [];\n\n const siblings = Math.max(0, Math.floor(siblingCount));\n const boundaries = Math.max(0, Math.floor(boundaryCount));\n const current = Math.min(Math.max(1, Math.floor(currentPage)), total);\n\n // If all pages fit without ellipses, show them all.\n const totalPageButtons = boundaries * 2 + siblings * 2 + 3;\n if (total <= totalPageButtons) {\n return range(1, total);\n }\n\n const leftBoundary = range(1, Math.min(boundaries, total));\n const rightBoundary = range(Math.max(total - boundaries + 1, 1), total);\n\n const leftSibling = Math.max(current - siblings, boundaries + 2);\n const rightSibling = Math.min(current + siblings, total - boundaries - 1);\n\n const showLeftEllipsis = leftSibling > boundaries + 2;\n const showRightEllipsis = rightSibling < total - boundaries - 1;\n\n const middle: PaginationRangeItem[] = [];\n if (showLeftEllipsis) {\n middle.push('ellipsis-left');\n } else {\n // Fill the gap between left boundary and leftSibling with explicit numbers.\n for (let i = boundaries + 1; i < leftSibling; i++) middle.push(i);\n }\n\n for (let i = leftSibling; i <= rightSibling; i++) middle.push(i);\n\n if (showRightEllipsis) {\n middle.push('ellipsis-right');\n } else {\n for (let i = rightSibling + 1; i <= total - boundaries; i++) middle.push(i);\n }\n\n return [...leftBoundary, ...middle, ...rightBoundary];\n}\n\nfunction range(start: number, end: number): number[] {\n if (end < start) return [];\n const out: number[] = new Array(end - start + 1);\n for (let i = 0; i < out.length; i++) out[i] = start + i;\n return out;\n}\n\n/** Replaces `{key}` placeholders in `template` with values from `vars`. */\nfunction formatLabel(\n template: string,\n vars: Readonly<Record<string, string | number>>,\n): string {\n return template.replace(/\\{(\\w+)\\}/g, (match, key: string) =>\n Object.prototype.hasOwnProperty.call(vars, key) ? String(vars[key]) : match,\n );\n}\n\n// ── tv() config ───────────────────────────────────────────────────\n\nconst paginatorVariants = tv(\n {\n slots: {\n root: 'flex w-full',\n inner: 'flex items-center gap-3 flex-wrap w-full min-w-0',\n pageSizeGroup: 'flex items-center gap-2 shrink-0',\n pageSizeLabel: 'text-sm text-fg-muted whitespace-nowrap',\n pageSizeSelect:\n 'rounded-md border border-border bg-surface text-fg cursor-pointer transition-colors duration-normal motion-reduce:transition-none hover:bg-surface-muted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:opacity-50 disabled:pointer-events-none',\n pageInfo: 'text-sm text-fg-muted whitespace-nowrap',\n navGroup: 'flex items-center gap-1',\n pageList: 'flex items-center gap-1',\n navButton:\n 'inline-flex items-center justify-center rounded-md border border-border bg-surface text-fg transition-colors duration-normal motion-reduce:transition-none cursor-pointer hover:bg-surface-muted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:opacity-50 disabled:pointer-events-none disabled:cursor-not-allowed aria-disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:cursor-not-allowed',\n pageButton:\n 'inline-flex items-center justify-center rounded-md border border-transparent text-fg transition-colors duration-normal motion-reduce:transition-none cursor-pointer hover:bg-surface-muted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:opacity-50 disabled:pointer-events-none disabled:cursor-not-allowed aria-disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:cursor-not-allowed',\n ellipsis:\n 'inline-flex items-center justify-center text-fg-subtle select-none pointer-events-none',\n emptyState: 'text-sm text-fg-muted',\n icon: 'size-4 shrink-0',\n },\n variants: {\n size: {\n xs: {\n navButton: 'px-2 py-1 text-xs min-w-7 h-7',\n pageButton: 'px-2 py-1 text-xs min-w-7 h-7',\n pageSizeSelect: 'px-2 py-1 text-xs',\n ellipsis: 'min-w-7 h-7 text-xs',\n // `size-3.5` (14px) half-step: neither size-3 nor size-4 aligns with\n // text-xs glyph metrics inside a 28px nav button.\n icon: 'size-3.5',\n },\n sm: {\n navButton: 'px-2.5 py-1.5 text-sm min-w-8 h-8',\n pageButton: 'px-2.5 py-1.5 text-sm min-w-8 h-8',\n pageSizeSelect: 'px-2.5 py-1.5 text-sm',\n ellipsis: 'min-w-8 h-8 text-sm',\n icon: 'size-4',\n },\n md: {\n navButton: 'px-3 py-2 text-sm min-w-9 h-9',\n pageButton: 'px-3 py-2 text-sm min-w-9 h-9',\n pageSizeSelect: 'px-3 py-2 text-sm',\n ellipsis: 'min-w-9 h-9 text-sm',\n icon: 'size-4',\n },\n lg: {\n navButton: 'px-4 py-2.5 text-base min-w-10 h-10',\n pageButton: 'px-4 py-2.5 text-base min-w-10 h-10',\n pageSizeSelect: 'px-4 py-2.5 text-base',\n ellipsis: 'min-w-10 h-10 text-base',\n icon: 'size-5',\n },\n xl: {\n navButton: 'px-5 py-3 text-base min-w-11 h-11',\n pageButton: 'px-5 py-3 text-base min-w-11 h-11',\n pageSizeSelect: 'px-5 py-3 text-base',\n ellipsis: 'min-w-11 h-11 text-base',\n icon: 'size-5',\n },\n },\n layout: {\n compact: { inner: 'justify-start' },\n spread: { inner: 'justify-between' },\n },\n type: {\n basic: { pageList: 'hidden' },\n numbered: {},\n },\n responsive: {\n auto: { root: '@container' },\n off: {},\n },\n disabled: {\n true: { root: 'opacity-50 pointer-events-none' },\n false: {},\n },\n },\n compoundVariants: [\n // Auto-collapse numbered page list under 30rem container width.\n {\n type: 'numbered',\n responsive: 'auto',\n class: { pageList: 'hidden @[30rem]:flex' },\n },\n ],\n defaultVariants: {\n size: 'md',\n layout: 'compact',\n type: 'numbered',\n responsive: 'auto',\n disabled: false,\n },\n },\n { twMerge: true },\n);\n\n// ── Template directives ───────────────────────────────────────────\n\n/**\n * Structural directive on an `<ng-template>` that replaces a specific label slot.\n * Usage: `<ng-template twPaginatorLabel slot=\"pageInfo\" let-ctx> … </ng-template>`.\n */\n@Directive({ selector: 'ng-template[twPaginatorLabel]' })\nexport class PaginatorLabelDirective {\n /** The label slot this template overrides. */\n readonly slot = input.required<TwPaginatorLabelSlot>();\n\n /** @internal */\n readonly templateRef = inject(TemplateRef<{ $implicit: TwPaginatorLabelContext }>);\n\n /** @internal */\n static ngTemplateContextGuard(\n _dir: PaginatorLabelDirective,\n _ctx: unknown,\n ): _ctx is { $implicit: TwPaginatorLabelContext } {\n return true;\n }\n}\n\n/**\n * Structural directive on an `<ng-template>` that renders when `totalItems === 0`\n * and `hideOnEmpty` is `false`. When absent, `labels.empty` renders as fallback.\n */\n@Directive({ selector: 'ng-template[twPaginatorEmpty]' })\nexport class PaginatorEmptyDirective {\n /** @internal */\n readonly templateRef = inject(TemplateRef<{ $implicit: TwPaginatorLabelContext }>);\n\n /** @internal */\n static ngTemplateContextGuard(\n _dir: PaginatorEmptyDirective,\n _ctx: unknown,\n ): _ctx is { $implicit: TwPaginatorLabelContext } {\n return true;\n }\n}\n\n/**\n * Structural directive on an `<ng-template>` that replaces the default page-size\n * selector UI entirely. Context `$implicit` exposes `{ pageSize, options, setPageSize }`.\n */\n@Directive({ selector: 'ng-template[twPaginatorPageSizeSelector]' })\nexport class PaginatorPageSizeSelectorDirective {\n /** @internal */\n readonly templateRef = inject(\n TemplateRef<{ $implicit: TwPaginatorPageSizeSelectorContext }>,\n );\n\n /** @internal */\n static ngTemplateContextGuard(\n _dir: PaginatorPageSizeSelectorDirective,\n _ctx: unknown,\n ): _ctx is { $implicit: TwPaginatorPageSizeSelectorContext } {\n return true;\n }\n}\n\n// ── PaginatorFocusableDirective ───────────────────────────────────\n\n/**\n * @internal Wraps every nav-group focusable (first/prev/page/next/last) as a CDK\n * `FocusableOption` so `FocusKeyManager` can drive roving focus across the group.\n * Applied via attribute selector on the existing `data-tw-paginator-focusable`\n * marker so the spec's button queries continue to match.\n */\n// Selector deliberately matches the existing `data-tw-paginator-focusable`\n// data-attribute marker emitted in the template; camelCasing would break the\n// spec's button queries. See the JSDoc above this declaration.\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[data-tw-paginator-focusable]',\n})\nexport class PaginatorFocusableDirective implements FocusableOption {\n readonly elementRef = inject(ElementRef<HTMLElement>);\n\n /** When true, the element is skipped by `FocusKeyManager` roving focus. */\n readonly isDisabled = input(false);\n\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n /**\n * `FocusableOption.disabled` resolver. NOTE: returning the signal function\n * itself would always be truthy, so `FocusKeyManager` would skip every\n * element. Call the signal here so the manager sees the actual value.\n */\n get disabled(): boolean {\n return this.isDisabled();\n }\n}\n\n// ── PaginatorComponent ────────────────────────────────────────────\n\nlet nextPaginatorId = 0;\n\n@Component({\n selector: 'tw-paginator',\n exportAs: 'twPaginator',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, PaginatorFocusableDirective],\n templateUrl: './paginator.html',\n host: {\n '[attr.role]': 'shouldRender() ? \"navigation\" : null',\n '[class]': 'rootClasses()',\n '[attr.aria-label]': 'shouldRender() ? resolvedAriaLabel() : null',\n '[style.container-name]': 'containerName()',\n },\n})\nexport class PaginatorComponent {\n // ── Inputs ──\n\n /** Total number of items across all pages. Defaults to `0`. */\n readonly totalItems = input<number>(0);\n\n /** Items per page. Two-way bindable via `[(pageSize)]`. Defaults to `10`. */\n readonly pageSize = model<number>(10);\n\n /** 1-based current page. Two-way bindable via `[(page)]`. Clamped internally. Defaults to `1`. */\n readonly page = model<number>(1);\n\n /** Rendering type. Defaults to `'numbered'`. */\n readonly type = input<TwPaginatorType>('numbered');\n\n /** Layout density. Defaults to `'compact'`. */\n readonly layout = input<TwPaginatorLayout>('compact');\n\n /** Controls padding, font size, and icon size. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** Semantic color used for the active page indicator. Defaults to `'primary'`. */\n readonly color = input<TwColor>('primary');\n\n /** How many sibling pages to show on each side of the current page. Defaults to `1`. */\n readonly siblingCount = input<number>(1);\n\n /** How many pages to always show at the start and end boundaries. Defaults to `1`. */\n readonly boundaryCount = input<number>(1);\n\n /** When true, renders jump-to-first and jump-to-last buttons. Defaults to `true`. */\n // TRUE-default: first/last jumps are the standard pagination affordance for\n // any list large enough to need a paginator; opt-out is for compact paginators.\n readonly showFirstLastButtons = input<boolean>(true);\n\n /** When true, renders the page-size selector region. Defaults to `false`. */\n readonly showPageSizeSelector = input<boolean>(false);\n\n /** Options for the default page-size selector. Ignored when `*twPaginatorPageSizeSelector` is projected. Defaults to `[10, 25, 50, 100]`. */\n readonly pageSizeOptions = input<readonly number[]>([10, 25, 50, 100]);\n\n /** When true, renders the page-info text region. Defaults to `true`. */\n // TRUE-default: showing \"X–Y of Z\" is the expected pagination context; opt-out\n // is for ultra-compact paginators that fit in tight UI.\n readonly showPageInfo = input<boolean>(true);\n\n /** When true, renders nothing when `totalItems === 0`. Defaults to `true`. */\n // TRUE-default: hiding the paginator on empty data is expected UX; opt-out is\n // for layouts that need to reserve the paginator's vertical space.\n readonly hideOnEmpty = input<boolean>(true);\n\n /** When true, renders nothing when `totalPages <= 1`. Defaults to `false`. */\n readonly hideOnSinglePage = input<boolean>(false);\n\n /** Responsive collapse mode. Defaults to `'auto'`. */\n readonly responsive = input<TwPaginatorResponsive>('auto');\n\n /** When true, every button is disabled. Defaults to `false`. */\n readonly disabled = input<boolean>(false);\n\n /** Partial string labels object for i18n. Unset keys fall back to English defaults. Defaults to `{}`. */\n readonly labels = input<Partial<TwPaginatorLabels>>({});\n\n /** When provided, buttons render as anchor links using the returned `href`. Defaults to `undefined` (renders as buttons). */\n readonly linkFactory = input<((page: number) => string) | undefined>(undefined);\n\n /** Overrides `labels.ariaLabel` for the root `<nav>` element. */\n readonly customAriaLabel = input<string | undefined>(undefined, {\n alias: 'aria-label',\n });\n\n // ── Outputs ──\n\n /** Fires when `page` or `pageSize` changes. Payload includes derived helpers (`start`, `end`, `totalPages`, `source`). Use `[(page)]` / `[(pageSize)]` for two-way binding; subscribe to this for the rich event payload. */\n readonly paginated = output<TwPaginatorPageChangeEvent>();\n\n // ── Projected templates ──\n\n /** @internal */\n readonly labelDirectives = contentChildren(PaginatorLabelDirective);\n\n /** @internal */\n readonly emptyDirective = contentChild(PaginatorEmptyDirective);\n\n /** @internal */\n readonly pageSizeSelectorDirective = contentChild(\n PaginatorPageSizeSelectorDirective,\n );\n\n // ── Injected services ──\n\n private readonly _liveAnnouncer = inject(LiveAnnouncer);\n private readonly _elementRef = inject(ElementRef<HTMLElement>);\n\n // ── View children ──\n\n /** @internal All nav-group focusables (first/prev/page/next/last) for `FocusKeyManager`. */\n readonly focusableItems = viewChildren(PaginatorFocusableDirective);\n\n // ── IDs ──\n\n private readonly _componentId = `tw-paginator-${nextPaginatorId++}`;\n\n /** @internal */\n readonly pageSizeSelectId = `${this._componentId}-size`;\n\n // ── Derived state ──\n\n /** @internal Effective page size, coerced to at least 1. */\n readonly effectivePageSize = computed(() => Math.max(1, this.pageSize()));\n\n /** @internal Total number of pages; always ≥ 1 to keep clamping math well-defined. */\n readonly totalPages = computed(() => {\n const total = this.totalItems();\n if (total <= 0) return 1;\n return Math.max(1, Math.ceil(total / this.effectivePageSize()));\n });\n\n /** @internal Current page clamped into `[1, totalPages]`. */\n readonly clampedPage = computed(() =>\n Math.min(Math.max(1, this.page()), this.totalPages()),\n );\n\n /** @internal 1-based start item index on the current page. `0` when empty. */\n readonly startItem = computed(() => {\n if (this.totalItems() <= 0) return 0;\n return (this.clampedPage() - 1) * this.effectivePageSize() + 1;\n });\n\n /** @internal 1-based end item index on the current page. `0` when empty. */\n readonly endItem = computed(() => {\n if (this.totalItems() <= 0) return 0;\n return Math.min(\n this.clampedPage() * this.effectivePageSize(),\n this.totalItems(),\n );\n });\n\n /** @internal Visible page range for the numbered type. */\n readonly range = computed(() =>\n buildPaginationRange(\n this.clampedPage(),\n this.totalPages(),\n this.siblingCount(),\n this.boundaryCount(),\n ),\n );\n\n /** @internal Merged labels. */\n readonly resolvedLabels = computed<TwPaginatorLabels>(() => ({\n ...DEFAULT_LABELS,\n ...this.labels(),\n }));\n\n /** @internal Resolved aria-label for the root. */\n readonly resolvedAriaLabel = computed(\n () => this.customAriaLabel() ?? this.resolvedLabels().ariaLabel,\n );\n\n /** @internal `container-name` for the CSS container query (set only when responsive=\"auto\"). */\n readonly containerName = computed(() =>\n this.responsive() === 'auto' ? 'paginator' : null,\n );\n\n readonly isEmpty = computed(() => this.totalItems() <= 0);\n\n readonly isAtFirstPage = computed(() => this.clampedPage() <= 1);\n\n readonly isAtLastPage = computed(\n () => this.clampedPage() >= this.totalPages(),\n );\n\n /** @internal Target page for the Previous button (clamped to `[1, totalPages]`). */\n readonly previousTarget = computed(() => Math.max(1, this.clampedPage() - 1));\n\n /** @internal Target page for the Next button (clamped to `[1, totalPages]`). */\n readonly nextTarget = computed(() =>\n Math.min(this.totalPages(), this.clampedPage() + 1),\n );\n\n /** @internal Whether the component should render at all. */\n readonly shouldRender = computed(() => {\n if (this.isEmpty() && this.hideOnEmpty()) return false;\n if (this.hideOnSinglePage() && this.totalPages() <= 1 && !this.isEmpty())\n return false;\n return true;\n });\n\n // ── Variant class computation ──\n\n private readonly _variantResult = computed(() =>\n paginatorVariants({\n size: this.size(),\n layout: this.layout(),\n type: this.type(),\n responsive: this.responsive(),\n disabled: this.disabled(),\n }),\n );\n\n readonly rootClasses = computed(() => this._variantResult().root());\n readonly innerClasses = computed(() => this._variantResult().inner());\n readonly pageSizeGroupClasses = computed(() =>\n this._variantResult().pageSizeGroup(),\n );\n readonly pageSizeLabelClasses = computed(() =>\n this._variantResult().pageSizeLabel(),\n );\n readonly pageSizeSelectClasses = computed(() =>\n this._variantResult().pageSizeSelect(),\n );\n readonly pageInfoClasses = computed(() => this._variantResult().pageInfo());\n readonly navGroupClasses = computed(() => this._variantResult().navGroup());\n readonly pageListClasses = computed(() => this._variantResult().pageList());\n readonly navButtonClasses = computed(() => this._variantResult().navButton());\n readonly ellipsisClasses = computed(() => this._variantResult().ellipsis());\n readonly emptyStateClasses = computed(() => this._variantResult().emptyState());\n readonly iconClasses = computed(() => this._variantResult().icon());\n\n /** @internal Applies active-color classes to the current page button. */\n pageButtonClasses(active: boolean): string {\n const base = this._variantResult().pageButton();\n if (!active) return base;\n const color = this.color();\n return `${base} ${PAGE_BUTTON_ACTIVE_BG[color]} ${PAGE_BUTTON_ACTIVE_FG[color]}`;\n }\n\n // ── Projected template lookup ──\n\n /** @internal */\n labelTemplateFor(\n slot: TwPaginatorLabelSlot,\n ): TemplateRef<{ $implicit: TwPaginatorLabelContext }> | null {\n const match = this.labelDirectives().find((d) => d.slot() === slot);\n return match ? match.templateRef : null;\n }\n\n /** @internal Template-context wrapper so projected templates receive `$implicit: TwPaginatorLabelContext`. */\n readonly labelContext = computed<{ $implicit: TwPaginatorLabelContext }>(() => ({\n $implicit: {\n page: this.clampedPage(),\n totalPages: this.totalPages(),\n start: this.startItem(),\n end: this.endItem(),\n totalItems: this.totalItems(),\n pageSize: this.effectivePageSize(),\n disabled: this.disabled(),\n },\n }));\n\n /** @internal */\n readonly pageSizeContext = computed<{\n $implicit: TwPaginatorPageSizeSelectorContext;\n }>(() => ({\n $implicit: {\n pageSize: this.effectivePageSize(),\n options: this.pageSizeOptions(),\n setPageSize: (n: number) => this._setPageSize(n),\n },\n }));\n\n // ── Rendered strings ──\n\n /** @internal Default page-info string (type-aware). */\n readonly formattedPageInfo = computed(() => {\n const labels = this.resolvedLabels();\n if (this.isEmpty()) return labels.empty;\n if (this.type() === 'basic') {\n return formatLabel(labels.pageRange, {\n start: this.startItem(),\n end: this.endItem(),\n total: this.totalItems(),\n });\n }\n return `${labels.pageInfo} ${this.clampedPage()}${labels.pageInfoSeparator}${this.totalPages()}`;\n });\n\n /** @internal ARIA label for a numbered page button. */\n formatPageButtonLabel(page: number): string {\n return formatLabel(this.resolvedLabels().pageButtonAriaLabel, { page });\n }\n\n /** @internal ARIA label for the current page button. */\n formatCurrentPageLabel(page: number): string {\n return formatLabel(this.resolvedLabels().currentPageAriaLabel, { page });\n }\n\n /** @internal Returns the anchor href for a page when `linkFactory` is set and the page is navigable. */\n hrefFor(page: number): string | null {\n const lf = this.linkFactory();\n if (!lf) return null;\n if (this.disabled()) return null;\n return lf(Math.min(Math.max(1, page), this.totalPages()));\n }\n\n // ── State bookkeeping (for emission) ──\n\n private _previousPage = this.page();\n private _previousPageSize = this.pageSize();\n private _pendingSource: PageChangeSource | null = null;\n private _initialized = false;\n\n // ── Keyboard navigation (CDK FocusKeyManager) ──\n\n /** @internal */\n private _keyManager: FocusKeyManager<PaginatorFocusableDirective> | null = null;\n\n constructor() {\n afterNextRender(() => {\n this._initialized = true;\n if (isDevMode()) {\n this._runDevWarnings();\n }\n });\n\n // Emit pageChange whenever page or pageSize changes (after initial render).\n // When an out-of-range page is detected, clamp and emit with source 'programmatic'.\n effect(() => {\n const newPage = this.page();\n const newSize = this.pageSize();\n const tp = this.totalPages();\n\n untracked(() => {\n const oldPage = this._previousPage;\n const oldSize = this._previousPageSize;\n\n // Clamp out-of-bounds page — do this first, then allow a follow-up tick to emit.\n const clamped = Math.min(Math.max(1, newPage), tp);\n if (clamped !== newPage) {\n // Set pending source only if nothing else is pending (preserve originator).\n if (this._pendingSource === null) this._pendingSource = 'programmatic';\n this.page.set(clamped);\n return;\n }\n\n if (newPage === oldPage && newSize === oldSize) {\n // No effective change (first run after init).\n return;\n }\n\n this._previousPage = newPage;\n this._previousPageSize = newSize;\n\n if (!this._initialized) return;\n\n const source = this._pendingSource ?? 'programmatic';\n this._pendingSource = null;\n this._emitChange(newPage, newSize, oldPage, oldSize, source);\n this._announce(newPage);\n });\n });\n\n // Rebuild the FocusKeyManager whenever the focusable set changes (e.g. the\n // numbered page list re-renders when total or current page shifts). No\n // `.withWrap()` — paginators should NOT loop from page 1 ArrowLeft to the\n // last page; that would be disorienting. Mirrors `accordion.ts` and the S12\n // tabs/tab-nav migration. The `disabled` getter on `PaginatorFocusableDirective`\n // resolves the `isDisabled()` signal so the manager skips disabled controls.\n // `onCleanup` fires both on rebuild AND on component destroy, so no separate\n // `_destroyRef.onDestroy` is needed.\n effect((onCleanup) => {\n const items = this.focusableItems();\n if (items.length === 0) {\n this._keyManager = null;\n return;\n }\n const manager = new FocusKeyManager(items)\n .withHorizontalOrientation('ltr')\n .withHomeAndEnd();\n this._keyManager = manager;\n\n onCleanup(() => {\n manager.destroy();\n });\n });\n }\n\n // ── User-facing action methods ──\n\n /** @internal Navigate to a specific page (click/keyboard handler). */\n goTo(target: number, source: Exclude<PageChangeSource, 'pageSizeChange'>): void {\n if (this.disabled()) return;\n const tp = this.totalPages();\n const next = Math.min(Math.max(1, target), tp);\n if (next === this.clampedPage()) return;\n this._pendingSource = source;\n this.page.set(next);\n }\n\n /** @internal Click handler for anchor-link mode. Suppresses navigation for disabled targets. */\n onLinkClick(\n event: MouseEvent,\n target: number,\n disabled: boolean,\n source: Exclude<PageChangeSource, 'pageSizeChange'>,\n ): void {\n if (disabled || this.disabled()) {\n event.preventDefault();\n return;\n }\n // Let the browser follow the anchor; still emit a pageChange.\n this.goTo(target, source);\n }\n\n /** @internal Handler for the default page-size `<select>`. */\n onPageSizeSelectChange(event: Event): void {\n const target = event.target as HTMLSelectElement;\n const parsed = Number(target.value);\n if (Number.isFinite(parsed) && parsed > 0) {\n this._setPageSize(parsed);\n }\n }\n\n private _setPageSize(size: number): void {\n if (this.disabled()) return;\n const newSize = Math.max(1, Math.floor(size));\n const oldPage = this.clampedPage();\n const oldSize = this.effectivePageSize();\n if (newSize === oldSize) return;\n\n const firstItem = (oldPage - 1) * oldSize + 1;\n const total = this.totalItems();\n const newTp = total <= 0 ? 1 : Math.max(1, Math.ceil(total / newSize));\n const newPage = Math.min(Math.max(1, Math.ceil(firstItem / newSize)), newTp);\n\n this._pendingSource = 'pageSizeChange';\n this.pageSize.set(newSize);\n if (newPage !== oldPage) this.page.set(newPage);\n // If only pageSize changed but page value is unchanged, the effect still fires\n // because pageSize is tracked.\n }\n\n /**\n * @internal Keyboard navigation inside the nav group. Delegates ArrowLeft /\n * ArrowRight / Home / End to CDK `FocusKeyManager`. The manager skips\n * disabled controls automatically via the `disabled` getter on\n * `PaginatorFocusableDirective`.\n */\n onKeydown(event: KeyboardEvent): void {\n if (!this._keyManager) return;\n const items = this.focusableItems();\n if (items.length === 0) return;\n\n // Sync the manager's active index to whichever focusable currently owns DOM\n // focus, so arrow keys move from the user's perceived position rather than\n // the stale post-render default of -1.\n const focusedIdx = items.findIndex(\n (item) => item.elementRef.nativeElement === event.target,\n );\n if (focusedIdx >= 0 && focusedIdx !== this._keyManager.activeItemIndex) {\n this._keyManager.setActiveItem(focusedIdx);\n }\n\n this._keyManager.onKeydown(event);\n }\n\n // ── Emission + announcement ──\n\n private _emitChange(\n page: number,\n pageSize: number,\n previousPage: number,\n previousPageSize: number,\n source: PageChangeSource,\n ): void {\n const total = this.totalItems();\n const effSize = Math.max(1, pageSize);\n const tp = total <= 0 ? 1 : Math.max(1, Math.ceil(total / effSize));\n const start = total <= 0 ? 0 : (page - 1) * effSize + 1;\n const end = total <= 0 ? 0 : Math.min(page * effSize, total);\n this.paginated.emit({\n page,\n pageSize: effSize,\n previousPage,\n previousPageSize,\n totalItems: total,\n totalPages: tp,\n start,\n end,\n source,\n });\n }\n\n private _announce(page: number): void {\n const msg = formatLabel(this.resolvedLabels().announcement, {\n page,\n totalPages: this.totalPages(),\n start: this.startItem(),\n end: this.endItem(),\n total: this.totalItems(),\n });\n this._liveAnnouncer.announce(msg, 'polite');\n }\n\n // ── Dev warnings ──\n\n private _runDevWarnings(): void {\n if (this.totalItems() < 0) {\n \n console.warn('[tw-paginator] totalItems is negative — coercing to 0.');\n }\n if (this.pageSize() < 1) {\n \n console.warn('[tw-paginator] pageSize is less than 1 — coercing to 1.');\n }\n if (this.showPageSizeSelector() && this.pageSizeOptions().length === 0) {\n \n console.warn(\n '[tw-paginator] showPageSizeSelector is true but pageSizeOptions is empty — selector will not render.',\n );\n }\n }\n}\n","@if (shouldRender()) {\n <div [class]=\"innerClasses()\">\n @if (isEmpty()) {\n <!-- Empty state -->\n @if (emptyDirective(); as emptyDir) {\n <ng-container\n [ngTemplateOutlet]=\"emptyDir.templateRef\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n <span [class]=\"emptyStateClasses()\">{{ resolvedLabels().empty }}</span>\n }\n } @else {\n <!-- Page-size selector region -->\n @if (showPageSizeSelector() && pageSizeOptions().length > 0) {\n <div [class]=\"pageSizeGroupClasses()\">\n <label\n [attr.for]=\"pageSizeSelectId\"\n [class]=\"pageSizeLabelClasses()\"\n >\n @if (labelTemplateFor('pageSizeLabel'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n {{ resolvedLabels().pageSizeLabel }}\n }\n </label>\n\n @if (pageSizeSelectorDirective(); as dir) {\n <ng-container\n [ngTemplateOutlet]=\"dir.templateRef\"\n [ngTemplateOutletContext]=\"pageSizeContext()\"\n />\n } @else {\n <select\n [id]=\"pageSizeSelectId\"\n [class]=\"pageSizeSelectClasses()\"\n [disabled]=\"disabled()\"\n [value]=\"effectivePageSize()\"\n (change)=\"onPageSizeSelectChange($event)\"\n >\n @for (opt of pageSizeOptions(); track opt) {\n <option [value]=\"opt\">{{ opt }}</option>\n }\n </select>\n }\n </div>\n }\n\n <!-- Page info region -->\n @if (showPageInfo()) {\n <div [class]=\"pageInfoClasses()\">\n @if (labelTemplateFor('pageInfo'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n {{ formattedPageInfo() }}\n }\n </div>\n }\n\n <!-- Nav buttons region. Roving focus is owned by FocusKeyManager on the\n child buttons; this wrapper only relays keydown to the manager, so\n it does not need its own tabindex. -->\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\n <div\n [class]=\"navGroupClasses()\"\n (keydown)=\"onKeydown($event)\"\n >\n <!-- First -->\n @if (showFirstLastButtons()) {\n @let firstDisabled = disabled() || isAtFirstPage();\n @if (linkFactory()) {\n <a\n data-tw-paginator-focusable\n [isDisabled]=\"firstDisabled\"\n data-tw-paginator-nav=\"first\"\n [class]=\"navButtonClasses()\"\n [attr.href]=\"firstDisabled ? null : hrefFor(1)\"\n [attr.aria-disabled]=\"firstDisabled ? 'true' : null\"\n [attr.tabindex]=\"firstDisabled ? -1 : 0\"\n [attr.aria-label]=\"resolvedLabels().first\"\n (click)=\"onLinkClick($event, 1, firstDisabled, 'click')\"\n >\n @if (labelTemplateFor('first'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n <svg\n [class]=\"iconClasses()\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10.78 4.22a.75.75 0 0 1 0 1.06L6.06 10l4.72 4.72a.75.75 0 0 1-1.06 1.06l-5.25-5.25a.75.75 0 0 1 0-1.06l5.25-5.25a.75.75 0 0 1 1.06 0Zm6 0a.75.75 0 0 1 0 1.06L12.06 10l4.72 4.72a.75.75 0 1 1-1.06 1.06l-5.25-5.25a.75.75 0 0 1 0-1.06l5.25-5.25a.75.75 0 0 1 1.06 0Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n </a>\n } @else {\n <button\n type=\"button\"\n data-tw-paginator-focusable\n [isDisabled]=\"firstDisabled\"\n data-tw-paginator-nav=\"first\"\n [class]=\"navButtonClasses()\"\n [disabled]=\"firstDisabled\"\n [attr.aria-label]=\"resolvedLabels().first\"\n (click)=\"goTo(1, 'click')\"\n >\n @if (labelTemplateFor('first'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n <svg\n [class]=\"iconClasses()\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10.78 4.22a.75.75 0 0 1 0 1.06L6.06 10l4.72 4.72a.75.75 0 0 1-1.06 1.06l-5.25-5.25a.75.75 0 0 1 0-1.06l5.25-5.25a.75.75 0 0 1 1.06 0Zm6 0a.75.75 0 0 1 0 1.06L12.06 10l4.72 4.72a.75.75 0 1 1-1.06 1.06l-5.25-5.25a.75.75 0 0 1 0-1.06l5.25-5.25a.75.75 0 0 1 1.06 0Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n </button>\n }\n }\n\n <!-- Previous -->\n @let prevDisabled = disabled() || isAtFirstPage();\n @let prevTarget = previousTarget();\n @if (linkFactory()) {\n <a\n data-tw-paginator-focusable\n [isDisabled]=\"prevDisabled\"\n data-tw-paginator-nav=\"prev\"\n [class]=\"navButtonClasses()\"\n [attr.href]=\"prevDisabled ? null : hrefFor(prevTarget)\"\n [attr.aria-disabled]=\"prevDisabled ? 'true' : null\"\n [attr.tabindex]=\"prevDisabled ? -1 : 0\"\n [attr.aria-label]=\"resolvedLabels().previous\"\n (click)=\"onLinkClick($event, prevTarget, prevDisabled, 'click')\"\n >\n @if (labelTemplateFor('previous'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n <svg\n [class]=\"iconClasses()\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M12.78 5.22a.75.75 0 0 1 0 1.06L9.06 10l3.72 3.72a.75.75 0 1 1-1.06 1.06l-4.25-4.25a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n </a>\n } @else {\n <button\n type=\"button\"\n data-tw-paginator-focusable\n [isDisabled]=\"prevDisabled\"\n data-tw-paginator-nav=\"prev\"\n [class]=\"navButtonClasses()\"\n [disabled]=\"prevDisabled\"\n [attr.aria-label]=\"resolvedLabels().previous\"\n (click)=\"goTo(prevTarget, 'click')\"\n >\n @if (labelTemplateFor('previous'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n <svg\n [class]=\"iconClasses()\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M12.78 5.22a.75.75 0 0 1 0 1.06L9.06 10l3.72 3.72a.75.75 0 1 1-1.06 1.06l-4.25-4.25a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n </button>\n }\n\n <!-- Numbered page list -->\n @if (type() === 'numbered') {\n <div [class]=\"pageListClasses()\">\n @for (item of range(); track $index) {\n @if (item === 'ellipsis-left' || item === 'ellipsis-right') {\n <span\n [class]=\"ellipsisClasses()\"\n [attr.aria-label]=\"resolvedLabels().ellipsis\"\n >\n <span aria-hidden=\"true\">…</span>\n </span>\n } @else {\n @let pageNumber = item;\n @let isActive = pageNumber === clampedPage();\n @let pageDisabled = disabled();\n @if (linkFactory()) {\n <a\n data-tw-paginator-focusable\n [isDisabled]=\"pageDisabled\"\n data-tw-paginator-nav=\"page\"\n [class]=\"pageButtonClasses(isActive)\"\n [attr.href]=\"pageDisabled ? null : hrefFor(pageNumber)\"\n [attr.aria-disabled]=\"pageDisabled ? 'true' : null\"\n [attr.tabindex]=\"pageDisabled ? -1 : 0\"\n [attr.aria-current]=\"isActive ? 'page' : null\"\n [attr.aria-label]=\"\n isActive\n ? formatCurrentPageLabel(pageNumber)\n : formatPageButtonLabel(pageNumber)\n \"\n (click)=\"onLinkClick($event, pageNumber, pageDisabled, 'click')\"\n >{{ pageNumber }}</a>\n } @else {\n <button\n type=\"button\"\n data-tw-paginator-focusable\n [isDisabled]=\"pageDisabled\"\n data-tw-paginator-nav=\"page\"\n [class]=\"pageButtonClasses(isActive)\"\n [disabled]=\"pageDisabled\"\n [attr.aria-current]=\"isActive ? 'page' : null\"\n [attr.aria-label]=\"\n isActive\n ? formatCurrentPageLabel(pageNumber)\n : formatPageButtonLabel(pageNumber)\n \"\n (click)=\"goTo(pageNumber, 'click')\"\n >{{ pageNumber }}</button>\n }\n }\n }\n </div>\n }\n\n <!-- Next -->\n @let nextDisabled = disabled() || isAtLastPage();\n @let nextTargetPage = nextTarget();\n @if (linkFactory()) {\n <a\n data-tw-paginator-focusable\n [isDisabled]=\"nextDisabled\"\n data-tw-paginator-nav=\"next\"\n [class]=\"navButtonClasses()\"\n [attr.href]=\"nextDisabled ? null : hrefFor(nextTargetPage)\"\n [attr.aria-disabled]=\"nextDisabled ? 'true' : null\"\n [attr.tabindex]=\"nextDisabled ? -1 : 0\"\n [attr.aria-label]=\"resolvedLabels().next\"\n (click)=\"onLinkClick($event, nextTargetPage, nextDisabled, 'click')\"\n >\n @if (labelTemplateFor('next'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n <svg\n [class]=\"iconClasses()\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M7.22 14.78a.75.75 0 0 1 0-1.06L10.94 10 7.22 6.28a.75.75 0 0 1 1.06-1.06l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n </a>\n } @else {\n <button\n type=\"button\"\n data-tw-paginator-focusable\n [isDisabled]=\"nextDisabled\"\n data-tw-paginator-nav=\"next\"\n [class]=\"navButtonClasses()\"\n [disabled]=\"nextDisabled\"\n [attr.aria-label]=\"resolvedLabels().next\"\n (click)=\"goTo(nextTargetPage, 'click')\"\n >\n @if (labelTemplateFor('next'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n <svg\n [class]=\"iconClasses()\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M7.22 14.78a.75.75 0 0 1 0-1.06L10.94 10 7.22 6.28a.75.75 0 0 1 1.06-1.06l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n </button>\n }\n\n <!-- Last -->\n @if (showFirstLastButtons()) {\n @let lastDisabled = disabled() || isAtLastPage();\n @if (linkFactory()) {\n <a\n data-tw-paginator-focusable\n [isDisabled]=\"lastDisabled\"\n data-tw-paginator-nav=\"last\"\n [class]=\"navButtonClasses()\"\n [attr.href]=\"lastDisabled ? null : hrefFor(totalPages())\"\n [attr.aria-disabled]=\"lastDisabled ? 'true' : null\"\n [attr.tabindex]=\"lastDisabled ? -1 : 0\"\n [attr.aria-label]=\"resolvedLabels().last\"\n (click)=\"onLinkClick($event, totalPages(), lastDisabled, 'click')\"\n >\n @if (labelTemplateFor('last'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n <svg\n [class]=\"iconClasses()\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M3.22 4.22a.75.75 0 0 1 1.06 0l5.25 5.25a.75.75 0 0 1 0 1.06l-5.25 5.25a.75.75 0 0 1-1.06-1.06L7.94 10 3.22 5.28a.75.75 0 0 1 0-1.06Zm6 0a.75.75 0 0 1 1.06 0l5.25 5.25a.75.75 0 0 1 0 1.06l-5.25 5.25a.75.75 0 1 1-1.06-1.06L13.94 10 9.22 5.28a.75.75 0 0 1 0-1.06Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n </a>\n } @else {\n <button\n type=\"button\"\n data-tw-paginator-focusable\n [isDisabled]=\"lastDisabled\"\n data-tw-paginator-nav=\"last\"\n [class]=\"navButtonClasses()\"\n [disabled]=\"lastDisabled\"\n [attr.aria-label]=\"resolvedLabels().last\"\n (click)=\"goTo(totalPages(), 'click')\"\n >\n @if (labelTemplateFor('last'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n <svg\n [class]=\"iconClasses()\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M3.22 4.22a.75.75 0 0 1 1.06 0l5.25 5.25a.75.75 0 0 1 0 1.06l-5.25 5.25a.75.75 0 0 1-1.06-1.06L7.94 10 3.22 5.28a.75.75 0 0 1 0-1.06Zm6 0a.75.75 0 0 1 1.06 0l5.25 5.25a.75.75 0 0 1 0 1.06l-5.25 5.25a.75.75 0 1 1-1.06-1.06L13.94 10 9.22 5.28a.75.75 0 0 1 0-1.06Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n </button>\n }\n }\n </div>\n }\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cdevhub-ngx-tw-paginator.mjs","sources":["../../../projects/ngx-tw/paginator/paginator.ts","../../../projects/ngx-tw/paginator/paginator.html","../../../projects/ngx-tw/paginator/cdevhub-ngx-tw-paginator.ts"],"sourcesContent":["import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n isDevMode,\n model,\n output,\n TemplateRef,\n untracked,\n viewChildren,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { type FocusableOption, FocusKeyManager, LiveAnnouncer } from '@angular/cdk/a11y';\nimport { tv } from 'tailwind-variants';\nimport type { TwColor, TwSize } from '@cdevhub/ngx-tw/core';\n\n// ── Public types ──────────────────────────────────────────────────\n\n/** Rendering type. `'basic'` shows prev/next + page info only. `'numbered'` shows page buttons with ellipsis range. */\nexport type TwPaginatorType = 'basic' | 'numbered';\n\n/** Layout density. `'compact'` stacks regions left-to-right. `'spread'` distributes regions across the full container width. */\nexport type TwPaginatorLayout = 'compact' | 'spread';\n\n/** Responsive mode. `'auto'` collapses numbered pages to basic visuals on narrow containers via CSS container queries. `'off'` disables collapsing. */\nexport type TwPaginatorResponsive = 'auto' | 'off';\n\n/** Named slot accepted by `*twPaginatorLabel`. */\nexport type TwPaginatorLabelSlot =\n | 'pageInfo'\n | 'previous'\n | 'next'\n | 'first'\n | 'last'\n | 'pageSizeLabel';\n\n/** String labels used throughout the paginator. All are optional on the `labels` input — unset keys fall back to the English defaults. */\nexport interface TwPaginatorLabels {\n /** Accessible name for the `<nav>` landmark. */\n ariaLabel: string;\n /** Label on the Previous button. */\n previous: string;\n /** Label on the Next button. */\n next: string;\n /** Label on the First-page button. */\n first: string;\n /** Label on the Last-page button. */\n last: string;\n /** Visible label before the current-page indicator. Used as `\"{pageInfo} {page}{pageInfoSeparator}{totalPages}\"`. */\n pageInfo: string;\n /** Text that joins the current page and total. */\n pageInfoSeparator: string;\n /** Range-style page info template. Variables: `{start}`, `{end}`, `{total}`. */\n pageRange: string;\n /** Visible label next to the page-size selector. */\n pageSizeLabel: string;\n /** `LiveAnnouncer` template used on every page change. Variables: `{page}`, `{totalPages}`, `{start}`, `{end}`, `{total}`. */\n announcement: string;\n /** Accessible label per numbered page button. Variable: `{page}`. */\n pageButtonAriaLabel: string;\n /** Accessible label for the current numbered page button. Variable: `{page}`. */\n currentPageAriaLabel: string;\n /** Accessible label applied to ellipsis items. */\n ellipsis: string;\n /** Rendered when `hideOnEmpty` is `false` and `totalItems === 0`. */\n empty: string;\n}\n\n/** Emitted by `pageChange`. */\nexport interface TwPaginatorPageChangeEvent {\n /** The new 1-based page. */\n page: number;\n /** The new items-per-page. */\n pageSize: number;\n /** The previous 1-based page. */\n previousPage: number;\n /** The previous items-per-page. */\n previousPageSize: number;\n /** Total number of items. */\n totalItems: number;\n /** Total number of pages given the current `totalItems` and `pageSize`. */\n totalPages: number;\n /** 1-based index of the first item on the new page (inclusive). */\n start: number;\n /** 1-based index of the last item on the new page (inclusive). */\n end: number;\n /** What triggered the change. */\n source: 'click' | 'keyboard' | 'pageSizeChange' | 'programmatic';\n}\n\n/** Template context provided to every `*twPaginatorLabel` and `*twPaginatorEmpty` template. */\nexport interface TwPaginatorLabelContext {\n /** 1-based current page. */\n page: number;\n /** Total pages. */\n totalPages: number;\n /** 1-based index of the first item on the current page (inclusive). */\n start: number;\n /** 1-based index of the last item on the current page (inclusive). */\n end: number;\n /** Total number of items. */\n totalItems: number;\n /** Current items per page. */\n pageSize: number;\n /** Whether the paginator is globally disabled. */\n disabled: boolean;\n}\n\n/** Template context provided to `*twPaginatorPageSizeSelector`. */\nexport interface TwPaginatorPageSizeSelectorContext {\n /** Current page size. */\n pageSize: number;\n /** Available page-size options. */\n options: readonly number[];\n /** Updates the page size and re-anchors the current page to keep the same first visible item. */\n setPageSize: (size: number) => void;\n}\n\n// ── Internal types ────────────────────────────────────────────────\n\ntype PaginationRangeItem = number | 'ellipsis-left' | 'ellipsis-right';\n\ntype PageChangeSource = TwPaginatorPageChangeEvent['source'];\n\n// ── Default labels ────────────────────────────────────────────────\n\nconst DEFAULT_LABELS: Readonly<TwPaginatorLabels> = {\n ariaLabel: 'Pagination',\n previous: 'Previous',\n next: 'Next',\n first: 'First page',\n last: 'Last page',\n pageInfo: 'Page',\n pageInfoSeparator: ' of ',\n pageRange: '{start}\\u2013{end} of {total}',\n pageSizeLabel: 'Items per page:',\n announcement: 'Page {page} of {totalPages}',\n pageButtonAriaLabel: 'Go to page {page}',\n currentPageAriaLabel: 'Page {page}, current page',\n ellipsis: 'More pages',\n empty: 'No results',\n};\n\n// ── Static active-page class maps (Tailwind v4 requires statically written class strings) ──\n// Mirrors the checkbox SOLID_BOX / SOLID_ICON split: a per-color background + border map\n// and a per-color on-color text map. `text-on-{color}` keeps the active button readable\n// against any consumer theme without hardcoding `text-white` (would fail for warning's\n// dark-on-amber convention) or `text-black`. The legacy `--color-on-*` alias tokens still\n// resolve to the canonical solid-fg slot per `theme/_semantic.css` lines 284-296.\n\nconst PAGE_BUTTON_ACTIVE_BG: Record<TwColor, string> = {\n primary: 'bg-primary-600 hover:bg-primary-700 border-primary-600 focus-visible:outline-primary-500',\n secondary: 'bg-secondary-600 hover:bg-secondary-700 border-secondary-600 focus-visible:outline-secondary-500',\n accent: 'bg-accent-600 hover:bg-accent-700 border-accent-600 focus-visible:outline-accent-500',\n neutral: 'bg-fg hover:bg-fg border-fg focus-visible:outline-fg',\n info: 'bg-info-600 hover:bg-info-700 border-info-600 focus-visible:outline-info-500',\n success: 'bg-success-600 hover:bg-success-700 border-success-600 focus-visible:outline-success-500',\n // Warning keeps -500 because the amber-500/amber-950 pairing meets contrast — see\n // `theme/_semantic.css` warning role comment (\"yellow signage convention\").\n warning: 'bg-warning-500 hover:bg-warning-600 border-warning-500 focus-visible:outline-warning-500',\n error: 'bg-error-600 hover:bg-error-700 border-error-600 focus-visible:outline-error-500',\n};\n\nconst PAGE_BUTTON_ACTIVE_FG: Record<TwColor, string> = {\n primary: 'text-on-primary',\n secondary: 'text-on-secondary',\n accent: 'text-on-accent',\n neutral: 'text-on-neutral',\n info: 'text-on-info',\n success: 'text-on-success',\n warning: 'text-on-warning',\n error: 'text-on-error',\n};\n\n// ── Pure helpers (exported for unit testing only — not re-exported from index.ts) ──\n\n/**\n * Builds the visible page range for the numbered paginator, inserting ellipsis\n * sentinels where ranges are collapsed. Port of the shadcn/Radix algorithm.\n *\n * @internal exported for unit tests; not part of the public API.\n */\nexport function buildPaginationRange(\n currentPage: number,\n totalPages: number,\n siblingCount: number,\n boundaryCount: number,\n): PaginationRangeItem[] {\n const total = Math.max(0, Math.floor(totalPages));\n if (total <= 0) return [];\n\n const siblings = Math.max(0, Math.floor(siblingCount));\n const boundaries = Math.max(0, Math.floor(boundaryCount));\n const current = Math.min(Math.max(1, Math.floor(currentPage)), total);\n\n // If all pages fit without ellipses, show them all.\n const totalPageButtons = boundaries * 2 + siblings * 2 + 3;\n if (total <= totalPageButtons) {\n return range(1, total);\n }\n\n const leftBoundary = range(1, Math.min(boundaries, total));\n const rightBoundary = range(Math.max(total - boundaries + 1, 1), total);\n\n const leftSibling = Math.max(current - siblings, boundaries + 2);\n const rightSibling = Math.min(current + siblings, total - boundaries - 1);\n\n const showLeftEllipsis = leftSibling > boundaries + 2;\n const showRightEllipsis = rightSibling < total - boundaries - 1;\n\n const middle: PaginationRangeItem[] = [];\n if (showLeftEllipsis) {\n middle.push('ellipsis-left');\n } else {\n // Fill the gap between left boundary and leftSibling with explicit numbers.\n for (let i = boundaries + 1; i < leftSibling; i++) middle.push(i);\n }\n\n for (let i = leftSibling; i <= rightSibling; i++) middle.push(i);\n\n if (showRightEllipsis) {\n middle.push('ellipsis-right');\n } else {\n for (let i = rightSibling + 1; i <= total - boundaries; i++) middle.push(i);\n }\n\n return [...leftBoundary, ...middle, ...rightBoundary];\n}\n\nfunction range(start: number, end: number): number[] {\n if (end < start) return [];\n const out: number[] = new Array(end - start + 1);\n for (let i = 0; i < out.length; i++) out[i] = start + i;\n return out;\n}\n\n/** Replaces `{key}` placeholders in `template` with values from `vars`. */\nfunction formatLabel(\n template: string,\n vars: Readonly<Record<string, string | number>>,\n): string {\n return template.replace(/\\{(\\w+)\\}/g, (match, key: string) =>\n Object.prototype.hasOwnProperty.call(vars, key) ? String(vars[key]) : match,\n );\n}\n\n// ── tv() config ───────────────────────────────────────────────────\n\nconst paginatorVariants = tv(\n {\n slots: {\n root: 'flex w-full',\n inner: 'flex items-center gap-3 flex-wrap w-full min-w-0',\n pageSizeGroup: 'flex items-center gap-2 shrink-0',\n pageSizeLabel: 'text-sm text-fg-muted whitespace-nowrap',\n pageSizeSelect:\n 'rounded-md border border-border bg-surface text-fg cursor-pointer transition-colors duration-normal motion-reduce:transition-none hover:bg-surface-muted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:opacity-50 disabled:pointer-events-none',\n pageInfo: 'text-sm text-fg-muted whitespace-nowrap',\n navGroup: 'flex items-center gap-1',\n pageList: 'flex items-center gap-1',\n navButton:\n 'inline-flex items-center justify-center rounded-md border border-border bg-surface text-fg transition-colors duration-normal motion-reduce:transition-none cursor-pointer hover:bg-surface-muted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:opacity-50 disabled:pointer-events-none disabled:cursor-not-allowed aria-disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:cursor-not-allowed',\n pageButton:\n 'inline-flex items-center justify-center rounded-md border border-transparent text-fg transition-colors duration-normal motion-reduce:transition-none cursor-pointer hover:bg-surface-muted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:opacity-50 disabled:pointer-events-none disabled:cursor-not-allowed aria-disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:cursor-not-allowed',\n ellipsis:\n 'inline-flex items-center justify-center text-fg-subtle select-none pointer-events-none',\n emptyState: 'text-sm text-fg-muted',\n icon: 'size-4 shrink-0',\n },\n variants: {\n size: {\n xs: {\n navButton: 'px-2 py-1 text-xs min-w-7 h-7',\n pageButton: 'px-2 py-1 text-xs min-w-7 h-7',\n pageSizeSelect: 'px-2 py-1 text-xs',\n ellipsis: 'min-w-7 h-7 text-xs',\n // `size-3.5` (14px) half-step: neither size-3 nor size-4 aligns with\n // text-xs glyph metrics inside a 28px nav button.\n icon: 'size-3.5',\n },\n sm: {\n navButton: 'px-2.5 py-1.5 text-sm min-w-8 h-8',\n pageButton: 'px-2.5 py-1.5 text-sm min-w-8 h-8',\n pageSizeSelect: 'px-2.5 py-1.5 text-sm',\n ellipsis: 'min-w-8 h-8 text-sm',\n icon: 'size-4',\n },\n md: {\n navButton: 'px-3 py-2 text-sm min-w-9 h-9',\n pageButton: 'px-3 py-2 text-sm min-w-9 h-9',\n pageSizeSelect: 'px-3 py-2 text-sm',\n ellipsis: 'min-w-9 h-9 text-sm',\n icon: 'size-4',\n },\n lg: {\n navButton: 'px-4 py-2.5 text-base min-w-10 h-10',\n pageButton: 'px-4 py-2.5 text-base min-w-10 h-10',\n pageSizeSelect: 'px-4 py-2.5 text-base',\n ellipsis: 'min-w-10 h-10 text-base',\n icon: 'size-5',\n },\n xl: {\n navButton: 'px-5 py-3 text-base min-w-11 h-11',\n pageButton: 'px-5 py-3 text-base min-w-11 h-11',\n pageSizeSelect: 'px-5 py-3 text-base',\n ellipsis: 'min-w-11 h-11 text-base',\n icon: 'size-5',\n },\n },\n layout: {\n compact: { inner: 'justify-start' },\n spread: { inner: 'justify-between' },\n },\n type: {\n basic: { pageList: 'hidden' },\n numbered: {},\n },\n responsive: {\n auto: { root: '@container' },\n off: {},\n },\n disabled: {\n true: { root: 'opacity-50 pointer-events-none' },\n false: {},\n },\n },\n compoundVariants: [\n // Auto-collapse numbered page list under 30rem container width.\n {\n type: 'numbered',\n responsive: 'auto',\n class: { pageList: 'hidden @[30rem]:flex' },\n },\n ],\n defaultVariants: {\n size: 'md',\n layout: 'compact',\n type: 'numbered',\n responsive: 'auto',\n disabled: false,\n },\n },\n { twMerge: true },\n);\n\n// ── Template directives ───────────────────────────────────────────\n\n/**\n * Structural directive on an `<ng-template>` that replaces a specific label slot.\n * Usage: `<ng-template twPaginatorLabel slot=\"pageInfo\" let-ctx> … </ng-template>`.\n */\n@Directive({ selector: 'ng-template[twPaginatorLabel]' })\nexport class PaginatorLabelDirective {\n /** The label slot this template overrides. */\n readonly slot = input.required<TwPaginatorLabelSlot>();\n\n /** @internal */\n readonly templateRef = inject(TemplateRef<{ $implicit: TwPaginatorLabelContext }>);\n\n /** @internal */\n static ngTemplateContextGuard(\n _dir: PaginatorLabelDirective,\n _ctx: unknown,\n ): _ctx is { $implicit: TwPaginatorLabelContext } {\n return true;\n }\n}\n\n/**\n * Structural directive on an `<ng-template>` that renders when `totalItems === 0`\n * and `hideOnEmpty` is `false`. When absent, `labels.empty` renders as fallback.\n */\n@Directive({ selector: 'ng-template[twPaginatorEmpty]' })\nexport class PaginatorEmptyDirective {\n /** @internal */\n readonly templateRef = inject(TemplateRef<{ $implicit: TwPaginatorLabelContext }>);\n\n /** @internal */\n static ngTemplateContextGuard(\n _dir: PaginatorEmptyDirective,\n _ctx: unknown,\n ): _ctx is { $implicit: TwPaginatorLabelContext } {\n return true;\n }\n}\n\n/**\n * Structural directive on an `<ng-template>` that replaces the default page-size\n * selector UI entirely. Context `$implicit` exposes `{ pageSize, options, setPageSize }`.\n */\n@Directive({ selector: 'ng-template[twPaginatorPageSizeSelector]' })\nexport class PaginatorPageSizeSelectorDirective {\n /** @internal */\n readonly templateRef = inject(\n TemplateRef<{ $implicit: TwPaginatorPageSizeSelectorContext }>,\n );\n\n /** @internal */\n static ngTemplateContextGuard(\n _dir: PaginatorPageSizeSelectorDirective,\n _ctx: unknown,\n ): _ctx is { $implicit: TwPaginatorPageSizeSelectorContext } {\n return true;\n }\n}\n\n// ── PaginatorFocusableDirective ───────────────────────────────────\n\n/**\n * @internal Wraps every nav-group focusable (first/prev/page/next/last) as a CDK\n * `FocusableOption` so `FocusKeyManager` can drive roving focus across the group.\n * Applied via attribute selector on the existing `data-tw-paginator-focusable`\n * marker so the spec's button queries continue to match.\n */\n// Selector deliberately matches the existing `data-tw-paginator-focusable`\n// data-attribute marker emitted in the template; camelCasing would break the\n// spec's button queries. See the JSDoc above this declaration.\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[data-tw-paginator-focusable]',\n})\nexport class PaginatorFocusableDirective implements FocusableOption {\n readonly elementRef = inject(ElementRef<HTMLElement>);\n\n /** When true, the element is skipped by `FocusKeyManager` roving focus. */\n readonly isDisabled = input(false);\n\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n /**\n * `FocusableOption.disabled` resolver. NOTE: returning the signal function\n * itself would always be truthy, so `FocusKeyManager` would skip every\n * element. Call the signal here so the manager sees the actual value.\n */\n get disabled(): boolean {\n return this.isDisabled();\n }\n}\n\n// ── PaginatorComponent ────────────────────────────────────────────\n\nlet nextPaginatorId = 0;\n\n@Component({\n selector: 'tw-paginator',\n exportAs: 'twPaginator',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, PaginatorFocusableDirective],\n templateUrl: './paginator.html',\n host: {\n '[attr.role]': 'shouldRender() ? \"navigation\" : null',\n '[class]': 'rootClasses()',\n '[attr.aria-label]': 'shouldRender() ? resolvedAriaLabel() : null',\n '[style.container-name]': 'containerName()',\n },\n})\nexport class PaginatorComponent {\n // ── Inputs ──\n\n /** Total number of items across all pages. Defaults to `0`. */\n readonly totalItems = input<number>(0);\n\n /** Items per page. Two-way bindable via `[(pageSize)]`. Defaults to `10`. */\n readonly pageSize = model<number>(10);\n\n /** 1-based current page. Two-way bindable via `[(page)]`. Clamped internally. Defaults to `1`. */\n readonly page = model<number>(1);\n\n /** Rendering type. Defaults to `'numbered'`. */\n readonly type = input<TwPaginatorType>('numbered');\n\n /** Layout density. Defaults to `'compact'`. */\n readonly layout = input<TwPaginatorLayout>('compact');\n\n /** Controls padding, font size, and icon size. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** Semantic color used for the active page indicator. Defaults to `'primary'`. */\n readonly color = input<TwColor>('primary');\n\n /** How many sibling pages to show on each side of the current page. Defaults to `1`. */\n readonly siblingCount = input<number>(1);\n\n /** How many pages to always show at the start and end boundaries. Defaults to `1`. */\n readonly boundaryCount = input<number>(1);\n\n /** When true, renders jump-to-first and jump-to-last buttons. Defaults to `true`. */\n // TRUE-default: first/last jumps are the standard pagination affordance for\n // any list large enough to need a paginator; opt-out is for compact paginators.\n readonly showFirstLastButtons = input<boolean>(true);\n\n /** When true, renders the page-size selector region. Defaults to `false`. */\n readonly showPageSizeSelector = input<boolean>(false);\n\n /** Options for the default page-size selector. Ignored when `*twPaginatorPageSizeSelector` is projected. Defaults to `[10, 25, 50, 100]`. */\n readonly pageSizeOptions = input<readonly number[]>([10, 25, 50, 100]);\n\n /** When true, renders the page-info text region. Defaults to `true`. */\n // TRUE-default: showing \"X–Y of Z\" is the expected pagination context; opt-out\n // is for ultra-compact paginators that fit in tight UI.\n readonly showPageInfo = input<boolean>(true);\n\n /** When true, renders nothing when `totalItems === 0`. Defaults to `true`. */\n // TRUE-default: hiding the paginator on empty data is expected UX; opt-out is\n // for layouts that need to reserve the paginator's vertical space.\n readonly hideOnEmpty = input<boolean>(true);\n\n /** When true, renders nothing when `totalPages <= 1`. Defaults to `false`. */\n readonly hideOnSinglePage = input<boolean>(false);\n\n /** Responsive collapse mode. Defaults to `'auto'`. */\n readonly responsive = input<TwPaginatorResponsive>('auto');\n\n /** When true, every button is disabled. Defaults to `false`. */\n readonly disabled = input<boolean>(false);\n\n /** Partial string labels object for i18n. Unset keys fall back to English defaults. Defaults to `{}`. */\n readonly labels = input<Partial<TwPaginatorLabels>>({});\n\n /** When provided, buttons render as anchor links using the returned `href`. Defaults to `undefined` (renders as buttons). */\n readonly linkFactory = input<((page: number) => string) | undefined>(undefined);\n\n /** Overrides `labels.ariaLabel` for the root `<nav>` element. */\n readonly customAriaLabel = input<string | undefined>(undefined, {\n alias: 'aria-label',\n });\n\n // ── Outputs ──\n\n /** Fires when `page` or `pageSize` changes. Payload includes derived helpers (`start`, `end`, `totalPages`, `source`). Use `[(page)]` / `[(pageSize)]` for two-way binding; subscribe to this for the rich event payload. */\n readonly paginated = output<TwPaginatorPageChangeEvent>();\n\n // ── Projected templates ──\n\n /** @internal */\n readonly labelDirectives = contentChildren(PaginatorLabelDirective);\n\n /** @internal */\n readonly emptyDirective = contentChild(PaginatorEmptyDirective);\n\n /** @internal */\n readonly pageSizeSelectorDirective = contentChild(\n PaginatorPageSizeSelectorDirective,\n );\n\n // ── Injected services ──\n\n private readonly _liveAnnouncer = inject(LiveAnnouncer);\n private readonly _elementRef = inject(ElementRef<HTMLElement>);\n\n // ── View children ──\n\n /** @internal All nav-group focusables (first/prev/page/next/last) for `FocusKeyManager`. */\n readonly focusableItems = viewChildren(PaginatorFocusableDirective);\n\n // ── IDs ──\n\n private readonly _componentId = `tw-paginator-${nextPaginatorId++}`;\n\n /** @internal */\n readonly pageSizeSelectId = `${this._componentId}-size`;\n\n // ── Derived state ──\n\n /** @internal Effective page size, coerced to at least 1. */\n readonly effectivePageSize = computed(() => Math.max(1, this.pageSize()));\n\n /** @internal Total number of pages; always ≥ 1 to keep clamping math well-defined. */\n readonly totalPages = computed(() => {\n const total = this.totalItems();\n if (total <= 0) return 1;\n return Math.max(1, Math.ceil(total / this.effectivePageSize()));\n });\n\n /** @internal Current page clamped into `[1, totalPages]`. */\n readonly clampedPage = computed(() =>\n Math.min(Math.max(1, this.page()), this.totalPages()),\n );\n\n /** @internal 1-based start item index on the current page. `0` when empty. */\n readonly startItem = computed(() => {\n if (this.totalItems() <= 0) return 0;\n return (this.clampedPage() - 1) * this.effectivePageSize() + 1;\n });\n\n /** @internal 1-based end item index on the current page. `0` when empty. */\n readonly endItem = computed(() => {\n if (this.totalItems() <= 0) return 0;\n return Math.min(\n this.clampedPage() * this.effectivePageSize(),\n this.totalItems(),\n );\n });\n\n /** @internal Visible page range for the numbered type. */\n readonly range = computed(() =>\n buildPaginationRange(\n this.clampedPage(),\n this.totalPages(),\n this.siblingCount(),\n this.boundaryCount(),\n ),\n );\n\n /** @internal Merged labels. */\n readonly resolvedLabels = computed<TwPaginatorLabels>(() => ({\n ...DEFAULT_LABELS,\n ...this.labels(),\n }));\n\n /** @internal Resolved aria-label for the root. */\n readonly resolvedAriaLabel = computed(\n () => this.customAriaLabel() ?? this.resolvedLabels().ariaLabel,\n );\n\n /** @internal `container-name` for the CSS container query (set only when responsive=\"auto\"). */\n readonly containerName = computed(() =>\n this.responsive() === 'auto' ? 'paginator' : null,\n );\n\n readonly isEmpty = computed(() => this.totalItems() <= 0);\n\n readonly isAtFirstPage = computed(() => this.clampedPage() <= 1);\n\n readonly isAtLastPage = computed(\n () => this.clampedPage() >= this.totalPages(),\n );\n\n /** @internal Target page for the Previous button (clamped to `[1, totalPages]`). */\n readonly previousTarget = computed(() => Math.max(1, this.clampedPage() - 1));\n\n /** @internal Target page for the Next button (clamped to `[1, totalPages]`). */\n readonly nextTarget = computed(() =>\n Math.min(this.totalPages(), this.clampedPage() + 1),\n );\n\n /** @internal Whether the component should render at all. */\n readonly shouldRender = computed(() => {\n if (this.isEmpty() && this.hideOnEmpty()) return false;\n if (this.hideOnSinglePage() && this.totalPages() <= 1 && !this.isEmpty())\n return false;\n return true;\n });\n\n // ── Variant class computation ──\n\n private readonly _variantResult = computed(() =>\n paginatorVariants({\n size: this.size(),\n layout: this.layout(),\n type: this.type(),\n responsive: this.responsive(),\n disabled: this.disabled(),\n }),\n );\n\n readonly rootClasses = computed(() => this._variantResult().root());\n readonly innerClasses = computed(() => this._variantResult().inner());\n readonly pageSizeGroupClasses = computed(() =>\n this._variantResult().pageSizeGroup(),\n );\n readonly pageSizeLabelClasses = computed(() =>\n this._variantResult().pageSizeLabel(),\n );\n readonly pageSizeSelectClasses = computed(() =>\n this._variantResult().pageSizeSelect(),\n );\n readonly pageInfoClasses = computed(() => this._variantResult().pageInfo());\n readonly navGroupClasses = computed(() => this._variantResult().navGroup());\n readonly pageListClasses = computed(() => this._variantResult().pageList());\n readonly navButtonClasses = computed(() => this._variantResult().navButton());\n readonly ellipsisClasses = computed(() => this._variantResult().ellipsis());\n readonly emptyStateClasses = computed(() => this._variantResult().emptyState());\n readonly iconClasses = computed(() => this._variantResult().icon());\n\n /** @internal Applies active-color classes to the current page button. */\n pageButtonClasses(active: boolean): string {\n const base = this._variantResult().pageButton();\n if (!active) return base;\n const color = this.color();\n return `${base} ${PAGE_BUTTON_ACTIVE_BG[color]} ${PAGE_BUTTON_ACTIVE_FG[color]}`;\n }\n\n // ── Projected template lookup ──\n\n /** @internal */\n labelTemplateFor(\n slot: TwPaginatorLabelSlot,\n ): TemplateRef<{ $implicit: TwPaginatorLabelContext }> | null {\n const match = this.labelDirectives().find((d) => d.slot() === slot);\n return match ? match.templateRef : null;\n }\n\n /** @internal Template-context wrapper so projected templates receive `$implicit: TwPaginatorLabelContext`. */\n readonly labelContext = computed<{ $implicit: TwPaginatorLabelContext }>(() => ({\n $implicit: {\n page: this.clampedPage(),\n totalPages: this.totalPages(),\n start: this.startItem(),\n end: this.endItem(),\n totalItems: this.totalItems(),\n pageSize: this.effectivePageSize(),\n disabled: this.disabled(),\n },\n }));\n\n /** @internal */\n readonly pageSizeContext = computed<{\n $implicit: TwPaginatorPageSizeSelectorContext;\n }>(() => ({\n $implicit: {\n pageSize: this.effectivePageSize(),\n options: this.pageSizeOptions(),\n setPageSize: (n: number) => this._setPageSize(n),\n },\n }));\n\n // ── Rendered strings ──\n\n /** @internal Default page-info string (type-aware). */\n readonly formattedPageInfo = computed(() => {\n const labels = this.resolvedLabels();\n if (this.isEmpty()) return labels.empty;\n if (this.type() === 'basic') {\n return formatLabel(labels.pageRange, {\n start: this.startItem(),\n end: this.endItem(),\n total: this.totalItems(),\n });\n }\n return `${labels.pageInfo} ${this.clampedPage()}${labels.pageInfoSeparator}${this.totalPages()}`;\n });\n\n /** @internal ARIA label for a numbered page button. */\n formatPageButtonLabel(page: number): string {\n return formatLabel(this.resolvedLabels().pageButtonAriaLabel, { page });\n }\n\n /** @internal ARIA label for the current page button. */\n formatCurrentPageLabel(page: number): string {\n return formatLabel(this.resolvedLabels().currentPageAriaLabel, { page });\n }\n\n /** @internal Returns the anchor href for a page when `linkFactory` is set and the page is navigable. */\n hrefFor(page: number): string | null {\n const lf = this.linkFactory();\n if (!lf) return null;\n if (this.disabled()) return null;\n return lf(Math.min(Math.max(1, page), this.totalPages()));\n }\n\n // ── State bookkeeping (for emission) ──\n\n private _previousPage = this.page();\n private _previousPageSize = this.pageSize();\n private _pendingSource: PageChangeSource | null = null;\n private _initialized = false;\n\n // ── Keyboard navigation (CDK FocusKeyManager) ──\n\n /** @internal */\n private _keyManager: FocusKeyManager<PaginatorFocusableDirective> | null = null;\n\n constructor() {\n afterNextRender(() => {\n this._initialized = true;\n if (isDevMode()) {\n this._runDevWarnings();\n }\n });\n\n // Emit pageChange whenever page or pageSize changes (after initial render).\n // When an out-of-range page is detected, clamp and emit with source 'programmatic'.\n //\n // DOCUMENTED no-write-in-effect exception (see CLAUDE.md). This effect reads\n // `page()` *and* writes `page.set(clamped)` — an intrinsic cycle, because the\n // clamp must fire both when `totalPages` shrinks AND when the consumer assigns\n // an out-of-range page (so `page` must stay a tracked dependency). The cycle is\n // bounded by the `clamped !== newPage` guard: the write re-triggers the effect\n // exactly once, the re-run sees an in-range value, and it settles. It never\n // loops/freezes. The `untracked()` wrapper does NOT break this cycle (page is\n // tracked above); its job is to keep the signal reads inside `_emitChange` /\n // `_announce` from registering as effect dependencies.\n effect(() => {\n const newPage = this.page();\n const newSize = this.pageSize();\n const tp = this.totalPages();\n\n untracked(() => {\n const oldPage = this._previousPage;\n const oldSize = this._previousPageSize;\n\n // Clamp out-of-bounds page — do this first, then allow a follow-up tick to emit.\n const clamped = Math.min(Math.max(1, newPage), tp);\n if (clamped !== newPage) {\n // Set pending source only if nothing else is pending (preserve originator).\n if (this._pendingSource === null) this._pendingSource = 'programmatic';\n this.page.set(clamped);\n return;\n }\n\n if (newPage === oldPage && newSize === oldSize) {\n // No effective change (first run after init).\n return;\n }\n\n this._previousPage = newPage;\n this._previousPageSize = newSize;\n\n if (!this._initialized) return;\n\n const source = this._pendingSource ?? 'programmatic';\n this._pendingSource = null;\n this._emitChange(newPage, newSize, oldPage, oldSize, source);\n this._announce(newPage);\n });\n });\n\n // Rebuild the FocusKeyManager whenever the focusable set changes (e.g. the\n // numbered page list re-renders when total or current page shifts). No\n // `.withWrap()` — paginators should NOT loop from page 1 ArrowLeft to the\n // last page; that would be disorienting. Mirrors `accordion.ts` and the S12\n // tabs/tab-nav migration. The `disabled` getter on `PaginatorFocusableDirective`\n // resolves the `isDisabled()` signal so the manager skips disabled controls.\n // `onCleanup` fires both on rebuild AND on component destroy, so no separate\n // `_destroyRef.onDestroy` is needed.\n effect((onCleanup) => {\n const items = this.focusableItems();\n if (items.length === 0) {\n this._keyManager = null;\n return;\n }\n const manager = new FocusKeyManager(items)\n .withHorizontalOrientation('ltr')\n .withHomeAndEnd();\n this._keyManager = manager;\n\n onCleanup(() => {\n manager.destroy();\n });\n });\n }\n\n // ── User-facing action methods ──\n\n /** @internal Navigate to a specific page (click/keyboard handler). */\n goTo(target: number, source: Exclude<PageChangeSource, 'pageSizeChange'>): void {\n if (this.disabled()) return;\n const tp = this.totalPages();\n const next = Math.min(Math.max(1, target), tp);\n if (next === this.clampedPage()) return;\n this._pendingSource = source;\n this.page.set(next);\n }\n\n /** @internal Click handler for anchor-link mode. Suppresses navigation for disabled targets. */\n onLinkClick(\n event: MouseEvent,\n target: number,\n disabled: boolean,\n source: Exclude<PageChangeSource, 'pageSizeChange'>,\n ): void {\n if (disabled || this.disabled()) {\n event.preventDefault();\n return;\n }\n // Let the browser follow the anchor; still emit a pageChange.\n this.goTo(target, source);\n }\n\n /** @internal Handler for the default page-size `<select>`. */\n onPageSizeSelectChange(event: Event): void {\n const target = event.target as HTMLSelectElement;\n const parsed = Number(target.value);\n if (Number.isFinite(parsed) && parsed > 0) {\n this._setPageSize(parsed);\n }\n }\n\n private _setPageSize(size: number): void {\n if (this.disabled()) return;\n const newSize = Math.max(1, Math.floor(size));\n const oldPage = this.clampedPage();\n const oldSize = this.effectivePageSize();\n if (newSize === oldSize) return;\n\n const firstItem = (oldPage - 1) * oldSize + 1;\n const total = this.totalItems();\n const newTp = total <= 0 ? 1 : Math.max(1, Math.ceil(total / newSize));\n const newPage = Math.min(Math.max(1, Math.ceil(firstItem / newSize)), newTp);\n\n this._pendingSource = 'pageSizeChange';\n this.pageSize.set(newSize);\n if (newPage !== oldPage) this.page.set(newPage);\n // If only pageSize changed but page value is unchanged, the effect still fires\n // because pageSize is tracked.\n }\n\n /**\n * @internal Keyboard navigation inside the nav group. Delegates ArrowLeft /\n * ArrowRight / Home / End to CDK `FocusKeyManager`. The manager skips\n * disabled controls automatically via the `disabled` getter on\n * `PaginatorFocusableDirective`.\n */\n onKeydown(event: KeyboardEvent): void {\n if (!this._keyManager) return;\n const items = this.focusableItems();\n if (items.length === 0) return;\n\n // Sync the manager's active index to whichever focusable currently owns DOM\n // focus, so arrow keys move from the user's perceived position rather than\n // the stale post-render default of -1.\n const focusedIdx = items.findIndex(\n (item) => item.elementRef.nativeElement === event.target,\n );\n if (focusedIdx >= 0 && focusedIdx !== this._keyManager.activeItemIndex) {\n this._keyManager.setActiveItem(focusedIdx);\n }\n\n this._keyManager.onKeydown(event);\n }\n\n // ── Emission + announcement ──\n\n private _emitChange(\n page: number,\n pageSize: number,\n previousPage: number,\n previousPageSize: number,\n source: PageChangeSource,\n ): void {\n const total = this.totalItems();\n const effSize = Math.max(1, pageSize);\n const tp = total <= 0 ? 1 : Math.max(1, Math.ceil(total / effSize));\n const start = total <= 0 ? 0 : (page - 1) * effSize + 1;\n const end = total <= 0 ? 0 : Math.min(page * effSize, total);\n this.paginated.emit({\n page,\n pageSize: effSize,\n previousPage,\n previousPageSize,\n totalItems: total,\n totalPages: tp,\n start,\n end,\n source,\n });\n }\n\n private _announce(page: number): void {\n const msg = formatLabel(this.resolvedLabels().announcement, {\n page,\n totalPages: this.totalPages(),\n start: this.startItem(),\n end: this.endItem(),\n total: this.totalItems(),\n });\n this._liveAnnouncer.announce(msg, 'polite');\n }\n\n // ── Dev warnings ──\n\n private _runDevWarnings(): void {\n if (this.totalItems() < 0) {\n \n console.warn('[tw-paginator] totalItems is negative — coercing to 0.');\n }\n if (this.pageSize() < 1) {\n \n console.warn('[tw-paginator] pageSize is less than 1 — coercing to 1.');\n }\n if (this.showPageSizeSelector() && this.pageSizeOptions().length === 0) {\n \n console.warn(\n '[tw-paginator] showPageSizeSelector is true but pageSizeOptions is empty — selector will not render.',\n );\n }\n }\n}\n","@if (shouldRender()) {\n <div [class]=\"innerClasses()\">\n @if (isEmpty()) {\n <!-- Empty state -->\n @if (emptyDirective(); as emptyDir) {\n <ng-container\n [ngTemplateOutlet]=\"emptyDir.templateRef\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n <span [class]=\"emptyStateClasses()\">{{ resolvedLabels().empty }}</span>\n }\n } @else {\n <!-- Page-size selector region -->\n @if (showPageSizeSelector() && pageSizeOptions().length > 0) {\n <div [class]=\"pageSizeGroupClasses()\">\n <label\n [attr.for]=\"pageSizeSelectId\"\n [class]=\"pageSizeLabelClasses()\"\n >\n @if (labelTemplateFor('pageSizeLabel'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n {{ resolvedLabels().pageSizeLabel }}\n }\n </label>\n\n @if (pageSizeSelectorDirective(); as dir) {\n <ng-container\n [ngTemplateOutlet]=\"dir.templateRef\"\n [ngTemplateOutletContext]=\"pageSizeContext()\"\n />\n } @else {\n <select\n [id]=\"pageSizeSelectId\"\n [class]=\"pageSizeSelectClasses()\"\n [disabled]=\"disabled()\"\n [value]=\"effectivePageSize()\"\n (change)=\"onPageSizeSelectChange($event)\"\n >\n @for (opt of pageSizeOptions(); track opt) {\n <option [value]=\"opt\">{{ opt }}</option>\n }\n </select>\n }\n </div>\n }\n\n <!-- Page info region -->\n @if (showPageInfo()) {\n <div [class]=\"pageInfoClasses()\">\n @if (labelTemplateFor('pageInfo'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n {{ formattedPageInfo() }}\n }\n </div>\n }\n\n <!-- Nav buttons region. Roving focus is owned by FocusKeyManager on the\n child buttons; this wrapper only relays keydown to the manager, so\n it does not need its own tabindex. -->\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\n <div\n [class]=\"navGroupClasses()\"\n (keydown)=\"onKeydown($event)\"\n >\n <!-- First -->\n @if (showFirstLastButtons()) {\n @let firstDisabled = disabled() || isAtFirstPage();\n @if (linkFactory()) {\n <a\n data-tw-paginator-focusable\n [isDisabled]=\"firstDisabled\"\n data-tw-paginator-nav=\"first\"\n [class]=\"navButtonClasses()\"\n [attr.href]=\"firstDisabled ? null : hrefFor(1)\"\n [attr.aria-disabled]=\"firstDisabled ? 'true' : null\"\n [attr.tabindex]=\"firstDisabled ? -1 : 0\"\n [attr.aria-label]=\"resolvedLabels().first\"\n (click)=\"onLinkClick($event, 1, firstDisabled, 'click')\"\n >\n @if (labelTemplateFor('first'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n <svg\n [class]=\"iconClasses()\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10.78 4.22a.75.75 0 0 1 0 1.06L6.06 10l4.72 4.72a.75.75 0 0 1-1.06 1.06l-5.25-5.25a.75.75 0 0 1 0-1.06l5.25-5.25a.75.75 0 0 1 1.06 0Zm6 0a.75.75 0 0 1 0 1.06L12.06 10l4.72 4.72a.75.75 0 1 1-1.06 1.06l-5.25-5.25a.75.75 0 0 1 0-1.06l5.25-5.25a.75.75 0 0 1 1.06 0Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n </a>\n } @else {\n <button\n type=\"button\"\n data-tw-paginator-focusable\n [isDisabled]=\"firstDisabled\"\n data-tw-paginator-nav=\"first\"\n [class]=\"navButtonClasses()\"\n [disabled]=\"firstDisabled\"\n [attr.aria-label]=\"resolvedLabels().first\"\n (click)=\"goTo(1, 'click')\"\n >\n @if (labelTemplateFor('first'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n <svg\n [class]=\"iconClasses()\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10.78 4.22a.75.75 0 0 1 0 1.06L6.06 10l4.72 4.72a.75.75 0 0 1-1.06 1.06l-5.25-5.25a.75.75 0 0 1 0-1.06l5.25-5.25a.75.75 0 0 1 1.06 0Zm6 0a.75.75 0 0 1 0 1.06L12.06 10l4.72 4.72a.75.75 0 1 1-1.06 1.06l-5.25-5.25a.75.75 0 0 1 0-1.06l5.25-5.25a.75.75 0 0 1 1.06 0Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n </button>\n }\n }\n\n <!-- Previous -->\n @let prevDisabled = disabled() || isAtFirstPage();\n @let prevTarget = previousTarget();\n @if (linkFactory()) {\n <a\n data-tw-paginator-focusable\n [isDisabled]=\"prevDisabled\"\n data-tw-paginator-nav=\"prev\"\n [class]=\"navButtonClasses()\"\n [attr.href]=\"prevDisabled ? null : hrefFor(prevTarget)\"\n [attr.aria-disabled]=\"prevDisabled ? 'true' : null\"\n [attr.tabindex]=\"prevDisabled ? -1 : 0\"\n [attr.aria-label]=\"resolvedLabels().previous\"\n (click)=\"onLinkClick($event, prevTarget, prevDisabled, 'click')\"\n >\n @if (labelTemplateFor('previous'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n <svg\n [class]=\"iconClasses()\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M12.78 5.22a.75.75 0 0 1 0 1.06L9.06 10l3.72 3.72a.75.75 0 1 1-1.06 1.06l-4.25-4.25a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n </a>\n } @else {\n <button\n type=\"button\"\n data-tw-paginator-focusable\n [isDisabled]=\"prevDisabled\"\n data-tw-paginator-nav=\"prev\"\n [class]=\"navButtonClasses()\"\n [disabled]=\"prevDisabled\"\n [attr.aria-label]=\"resolvedLabels().previous\"\n (click)=\"goTo(prevTarget, 'click')\"\n >\n @if (labelTemplateFor('previous'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n <svg\n [class]=\"iconClasses()\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M12.78 5.22a.75.75 0 0 1 0 1.06L9.06 10l3.72 3.72a.75.75 0 1 1-1.06 1.06l-4.25-4.25a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n </button>\n }\n\n <!-- Numbered page list -->\n @if (type() === 'numbered') {\n <div [class]=\"pageListClasses()\">\n @for (item of range(); track $index) {\n @if (item === 'ellipsis-left' || item === 'ellipsis-right') {\n <span\n [class]=\"ellipsisClasses()\"\n [attr.aria-label]=\"resolvedLabels().ellipsis\"\n >\n <span aria-hidden=\"true\">…</span>\n </span>\n } @else {\n @let pageNumber = item;\n @let isActive = pageNumber === clampedPage();\n @let pageDisabled = disabled();\n @if (linkFactory()) {\n <a\n data-tw-paginator-focusable\n [isDisabled]=\"pageDisabled\"\n data-tw-paginator-nav=\"page\"\n [class]=\"pageButtonClasses(isActive)\"\n [attr.href]=\"pageDisabled ? null : hrefFor(pageNumber)\"\n [attr.aria-disabled]=\"pageDisabled ? 'true' : null\"\n [attr.tabindex]=\"pageDisabled ? -1 : 0\"\n [attr.aria-current]=\"isActive ? 'page' : null\"\n [attr.aria-label]=\"\n isActive\n ? formatCurrentPageLabel(pageNumber)\n : formatPageButtonLabel(pageNumber)\n \"\n (click)=\"onLinkClick($event, pageNumber, pageDisabled, 'click')\"\n >{{ pageNumber }}</a>\n } @else {\n <button\n type=\"button\"\n data-tw-paginator-focusable\n [isDisabled]=\"pageDisabled\"\n data-tw-paginator-nav=\"page\"\n [class]=\"pageButtonClasses(isActive)\"\n [disabled]=\"pageDisabled\"\n [attr.aria-current]=\"isActive ? 'page' : null\"\n [attr.aria-label]=\"\n isActive\n ? formatCurrentPageLabel(pageNumber)\n : formatPageButtonLabel(pageNumber)\n \"\n (click)=\"goTo(pageNumber, 'click')\"\n >{{ pageNumber }}</button>\n }\n }\n }\n </div>\n }\n\n <!-- Next -->\n @let nextDisabled = disabled() || isAtLastPage();\n @let nextTargetPage = nextTarget();\n @if (linkFactory()) {\n <a\n data-tw-paginator-focusable\n [isDisabled]=\"nextDisabled\"\n data-tw-paginator-nav=\"next\"\n [class]=\"navButtonClasses()\"\n [attr.href]=\"nextDisabled ? null : hrefFor(nextTargetPage)\"\n [attr.aria-disabled]=\"nextDisabled ? 'true' : null\"\n [attr.tabindex]=\"nextDisabled ? -1 : 0\"\n [attr.aria-label]=\"resolvedLabels().next\"\n (click)=\"onLinkClick($event, nextTargetPage, nextDisabled, 'click')\"\n >\n @if (labelTemplateFor('next'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n <svg\n [class]=\"iconClasses()\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M7.22 14.78a.75.75 0 0 1 0-1.06L10.94 10 7.22 6.28a.75.75 0 0 1 1.06-1.06l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n </a>\n } @else {\n <button\n type=\"button\"\n data-tw-paginator-focusable\n [isDisabled]=\"nextDisabled\"\n data-tw-paginator-nav=\"next\"\n [class]=\"navButtonClasses()\"\n [disabled]=\"nextDisabled\"\n [attr.aria-label]=\"resolvedLabels().next\"\n (click)=\"goTo(nextTargetPage, 'click')\"\n >\n @if (labelTemplateFor('next'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n <svg\n [class]=\"iconClasses()\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M7.22 14.78a.75.75 0 0 1 0-1.06L10.94 10 7.22 6.28a.75.75 0 0 1 1.06-1.06l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n </button>\n }\n\n <!-- Last -->\n @if (showFirstLastButtons()) {\n @let lastDisabled = disabled() || isAtLastPage();\n @if (linkFactory()) {\n <a\n data-tw-paginator-focusable\n [isDisabled]=\"lastDisabled\"\n data-tw-paginator-nav=\"last\"\n [class]=\"navButtonClasses()\"\n [attr.href]=\"lastDisabled ? null : hrefFor(totalPages())\"\n [attr.aria-disabled]=\"lastDisabled ? 'true' : null\"\n [attr.tabindex]=\"lastDisabled ? -1 : 0\"\n [attr.aria-label]=\"resolvedLabels().last\"\n (click)=\"onLinkClick($event, totalPages(), lastDisabled, 'click')\"\n >\n @if (labelTemplateFor('last'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n <svg\n [class]=\"iconClasses()\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M3.22 4.22a.75.75 0 0 1 1.06 0l5.25 5.25a.75.75 0 0 1 0 1.06l-5.25 5.25a.75.75 0 0 1-1.06-1.06L7.94 10 3.22 5.28a.75.75 0 0 1 0-1.06Zm6 0a.75.75 0 0 1 1.06 0l5.25 5.25a.75.75 0 0 1 0 1.06l-5.25 5.25a.75.75 0 1 1-1.06-1.06L13.94 10 9.22 5.28a.75.75 0 0 1 0-1.06Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n </a>\n } @else {\n <button\n type=\"button\"\n data-tw-paginator-focusable\n [isDisabled]=\"lastDisabled\"\n data-tw-paginator-nav=\"last\"\n [class]=\"navButtonClasses()\"\n [disabled]=\"lastDisabled\"\n [attr.aria-label]=\"resolvedLabels().last\"\n (click)=\"goTo(totalPages(), 'click')\"\n >\n @if (labelTemplateFor('last'); as tmpl) {\n <ng-container\n [ngTemplateOutlet]=\"tmpl\"\n [ngTemplateOutletContext]=\"labelContext()\"\n />\n } @else {\n <svg\n [class]=\"iconClasses()\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M3.22 4.22a.75.75 0 0 1 1.06 0l5.25 5.25a.75.75 0 0 1 0 1.06l-5.25 5.25a.75.75 0 0 1-1.06-1.06L7.94 10 3.22 5.28a.75.75 0 0 1 0-1.06Zm6 0a.75.75 0 0 1 1.06 0l5.25 5.25a.75.75 0 0 1 0 1.06l-5.25 5.25a.75.75 0 1 1-1.06-1.06L13.94 10 9.22 5.28a.75.75 0 0 1 0-1.06Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n }\n </button>\n }\n }\n </div>\n }\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|