@xui/pagination 2.0.0-alpha.17 → 2.0.0-alpha.19

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.
@@ -77,13 +77,18 @@ class XuiPagination {
77
77
  ...(ngDevMode ? [{ debugName: "computedClass" }] : /* istanbul ignore next */ []));
78
78
  selectClass = computed(() => xui('border-border bg-surface text-foreground ms-2 h-(--control-height-md) rounded-md border px-(--control-padding-sm) text-sm'), /* @ts-ignore */
79
79
  ...(ngDevMode ? [{ debugName: "selectClass" }] : /* istanbul ignore next */ []));
80
+ // A disabled button keeps its pointer events so the cursor can say it is unavailable —
81
+ // `pointer-events-none` would leave the arrow unchanged, since the browser takes no cursor from
82
+ // an element that receives no pointer events. The native `disabled` swallows the click, and the
83
+ // handlers guard on top of it; the hover lift is scoped to `enabled:` so the button does not
84
+ // light up on the way past.
80
85
  stepClass() {
81
- return xui('border-border text-foreground hover:bg-surface-inset flex size-(--control-height-md) items-center justify-center rounded-md border disabled:pointer-events-none disabled:opacity-40');
86
+ return xui('border-border text-foreground enabled:hover:bg-surface-inset flex size-(--control-height-md) items-center justify-center rounded-md border disabled:cursor-not-allowed disabled:opacity-40');
82
87
  }
83
88
  pageClass(active) {
84
- return xui('flex h-(--control-height-md) min-w-(--control-height-md) items-center justify-center rounded-md border px-(--control-padding-sm) text-sm tabular-nums disabled:pointer-events-none disabled:opacity-40', active
89
+ return xui('flex h-(--control-height-md) min-w-(--control-height-md) items-center justify-center rounded-md border px-(--control-padding-sm) text-sm tabular-nums disabled:cursor-not-allowed disabled:opacity-40', active
85
90
  ? 'border-primary bg-primary text-primary-foreground font-medium'
86
- : 'border-border text-foreground hover:bg-surface-inset');
91
+ : 'border-border text-foreground enabled:hover:bg-surface-inset');
87
92
  }
88
93
  /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: XuiPagination, deps: [], target: i0.ɵɵFactoryTarget.Component });
89
94
  /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: XuiPagination, isStandalone: true, selector: "xui-pagination", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, total: { classPropertyName: "total", publicName: "total", isSignal: true, isRequired: false, transformFunction: null }, pageIndex: { classPropertyName: "pageIndex", publicName: "pageIndex", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, showSizeChanger: { classPropertyName: "showSizeChanger", publicName: "showSizeChanger", isSignal: true, isRequired: false, transformFunction: null }, showTotal: { classPropertyName: "showTotal", publicName: "showTotal", isSignal: true, isRequired: false, transformFunction: null }, simple: { classPropertyName: "simple", publicName: "simple", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, siblingCount: { classPropertyName: "siblingCount", publicName: "siblingCount", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pageIndex: "pageIndexChange", pageSize: "pageSizeChange" }, host: { attributes: { "role": "navigation", "aria-label": "Pagination" }, properties: { "class": "computedClass()" } }, ngImport: i0, template: `
@@ -1 +1 @@
1
- {"version":3,"file":"xui-pagination.mjs","sources":["../../../../../../libs/ui/pagination/xui/src/lib/pagination.token.ts","../../../../../../libs/ui/pagination/xui/src/lib/pagination.ts","../../../../../../libs/ui/pagination/xui/src/index.ts","../../../../../../libs/ui/pagination/xui/src/xui-pagination.ts"],"sourcesContent":["import { createXConfigToken } from '@xui/core';\n\n/**\n * Application-wide defaults for XuiPagination.\n *\n * Provide it once at the app root to change every pagination bar without\n * touching call sites; individual inputs still override the configured value.\n */\nexport interface XuiPaginationConfig {\n /** Pages shown on each side of the current page. */\n siblingCount: number;\n /** Choices offered by the size changer. */\n pageSizeOptions: number[];\n /** Render the page-size `<select>` by default. */\n showSizeChanger: boolean;\n /** Render the item-count summary by default. */\n showTotal: boolean;\n /** Collapse the numbered pages to a `current / total` readout. */\n simple: boolean;\n}\n\nexport const [injectXuiPaginationConfig, provideXuiPaginationConfig] = createXConfigToken<XuiPaginationConfig>(\n 'XuiPaginationConfig',\n {\n siblingCount: 1,\n pageSizeOptions: [10, 20, 50, 100],\n showSizeChanger: false,\n showTotal: false,\n simple: false\n }\n);\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n numberAttribute,\n ViewEncapsulation\n} from '@angular/core';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { matChevronLeftRound, matChevronRightRound } from '@ng-icons/material-icons/round';\nimport { xui } from '@xui/core';\nimport { XuiIcon } from '@xui/icon';\nimport type { ClassValue } from 'clsx';\nimport { injectXuiPaginationConfig } from './pagination.token';\n\n/**\n * Page navigation for a paged collection. Two-way `pageIndex` (1-based) and\n * `pageSize`; `total` is the item count. Renders prev/next, numbered pages with\n * ellipses, an optional size changer and an item-count summary.\n *\n * ```html\n * <xui-pagination [total]=\"248\" [(pageIndex)]=\"page\" [(pageSize)]=\"size\" showSizeChanger showTotal />\n * ```\n */\n@Component({\n selector: 'xui-pagination',\n template: `\n @if (showTotal()) {\n <span class=\"text-foreground-muted me-1 text-sm\">{{ totalLabel() }}</span>\n }\n\n <button\n type=\"button\"\n [class]=\"stepClass()\"\n [disabled]=\"disabled() || pageIndex() <= 1\"\n (click)=\"go(pageIndex() - 1)\"\n aria-label=\"Previous page\"\n >\n <ng-icon xui size=\"sm\" name=\"matChevronLeftRound\" />\n </button>\n\n @if (simple()) {\n <span class=\"text-foreground px-2 text-sm tabular-nums\">{{ pageIndex() }} / {{ totalPages() }}</span>\n } @else {\n @for (item of pages(); track $index) {\n @if (item === '...') {\n <span class=\"text-foreground-muted px-1 select-none\">…</span>\n } @else {\n <button\n type=\"button\"\n [class]=\"pageClass(item === pageIndex())\"\n [attr.aria-current]=\"item === pageIndex() ? 'page' : null\"\n [disabled]=\"disabled()\"\n (click)=\"go(item)\"\n >\n {{ item }}\n </button>\n }\n }\n }\n\n <button\n type=\"button\"\n [class]=\"stepClass()\"\n [disabled]=\"disabled() || pageIndex() >= totalPages()\"\n (click)=\"go(pageIndex() + 1)\"\n aria-label=\"Next page\"\n >\n <ng-icon xui size=\"sm\" name=\"matChevronRightRound\" />\n </button>\n\n @if (showSizeChanger()) {\n <select\n [class]=\"selectClass()\"\n [disabled]=\"disabled()\"\n (change)=\"changeSize($any($event.target).value)\"\n aria-label=\"Page size\"\n >\n @for (option of pageSizeOptions(); track option) {\n <option [value]=\"option\" [selected]=\"option === pageSize()\">{{ option }} / page</option>\n }\n </select>\n }\n `,\n host: {\n '[class]': 'computedClass()',\n role: 'navigation',\n 'aria-label': 'Pagination'\n },\n imports: [NgIcon, XuiIcon],\n viewProviders: [provideIcons({ matChevronLeftRound, matChevronRightRound })],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class XuiPagination {\n private readonly config = injectXuiPaginationConfig();\n\n readonly class = input<ClassValue>('');\n\n readonly total = input<number, NumberInput>(0, { transform: numberAttribute });\n readonly pageIndex = model<number>(1);\n readonly pageSize = model<number>(10);\n readonly pageSizeOptions = input<number[]>(this.config.pageSizeOptions);\n readonly showSizeChanger = input<boolean, BooleanInput>(this.config.showSizeChanger, {\n transform: booleanAttribute\n });\n readonly showTotal = input<boolean, BooleanInput>(this.config.showTotal, { transform: booleanAttribute });\n readonly simple = input<boolean, BooleanInput>(this.config.simple, { transform: booleanAttribute });\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n /** Pages shown on each side of the current page. */\n readonly siblingCount = input<number, NumberInput>(this.config.siblingCount, { transform: numberAttribute });\n\n protected readonly totalPages = computed(() => Math.max(1, Math.ceil(this.total() / this.pageSize())));\n protected readonly pages = computed(() => paginationRange(this.pageIndex(), this.totalPages(), this.siblingCount()));\n\n protected readonly totalLabel = computed(() => {\n const total = this.total();\n if (total === 0) {\n return '0 items';\n }\n const start = (this.pageIndex() - 1) * this.pageSize() + 1;\n const end = Math.min(this.pageIndex() * this.pageSize(), total);\n return `${start}-${end} of ${total} items`;\n });\n\n protected go(page: number): void {\n if (this.disabled()) {\n return;\n }\n const next = Math.max(1, Math.min(this.totalPages(), page));\n if (next !== this.pageIndex()) {\n this.pageIndex.set(next);\n }\n }\n\n protected changeSize(value: string): void {\n const size = Number(value);\n if (!Number.isFinite(size) || size <= 0) {\n return;\n }\n this.pageSize.set(size);\n // Keep the current page in range after the size changes.\n if (this.pageIndex() > this.totalPages()) {\n this.pageIndex.set(this.totalPages());\n }\n }\n\n protected readonly computedClass = computed(() => xui('inline-flex items-center gap-1', this.class()));\n protected readonly selectClass = computed(() =>\n xui(\n 'border-border bg-surface text-foreground ms-2 h-(--control-height-md) rounded-md border px-(--control-padding-sm) text-sm'\n )\n );\n\n protected stepClass(): string {\n return xui(\n 'border-border text-foreground hover:bg-surface-inset flex size-(--control-height-md) items-center justify-center rounded-md border disabled:pointer-events-none disabled:opacity-40'\n );\n }\n\n protected pageClass(active: boolean): string {\n return xui(\n 'flex h-(--control-height-md) min-w-(--control-height-md) items-center justify-center rounded-md border px-(--control-padding-sm) text-sm tabular-nums disabled:pointer-events-none disabled:opacity-40',\n active\n ? 'border-primary bg-primary text-primary-foreground font-medium'\n : 'border-border text-foreground hover:bg-surface-inset'\n );\n }\n}\n\nconst range = (start: number, end: number): number[] =>\n Array.from({ length: Math.max(0, end - start + 1) }, (_, i) => start + i);\n\n/**\n * The page items to display: page numbers with `'...'` ellipsis markers where\n * the range is collapsed. `siblingCount` is how many pages flank the current one.\n */\nexport function paginationRange(current: number, totalPages: number, siblingCount = 1): (number | '...')[] {\n const totalShown = siblingCount * 2 + 5;\n if (totalPages <= totalShown) {\n return range(1, totalPages);\n }\n\n const leftSibling = Math.max(current - siblingCount, 1);\n const rightSibling = Math.min(current + siblingCount, totalPages);\n const showLeftDots = leftSibling > 2;\n const showRightDots = rightSibling < totalPages - 1;\n const edgeCount = 3 + 2 * siblingCount;\n\n if (!showLeftDots && showRightDots) {\n return [...range(1, edgeCount), '...', totalPages];\n }\n if (showLeftDots && !showRightDots) {\n return [1, '...', ...range(totalPages - edgeCount + 1, totalPages)];\n }\n return [1, '...', ...range(leftSibling, rightSibling), '...', totalPages];\n}\n","import { XuiPagination } from './lib/pagination';\n\nexport * from './lib/pagination';\nexport * from './lib/pagination.token';\n\nexport const XuiPaginationImports = [XuiPagination] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xui-pagination.mjs","sources":["../../../../../../libs/ui/pagination/xui/src/lib/pagination.token.ts","../../../../../../libs/ui/pagination/xui/src/lib/pagination.ts","../../../../../../libs/ui/pagination/xui/src/index.ts","../../../../../../libs/ui/pagination/xui/src/xui-pagination.ts"],"sourcesContent":["import { createXConfigToken } from '@xui/core';\n\n/**\n * Application-wide defaults for XuiPagination.\n *\n * Provide it once at the app root to change every pagination bar without\n * touching call sites; individual inputs still override the configured value.\n */\nexport interface XuiPaginationConfig {\n /** Pages shown on each side of the current page. */\n siblingCount: number;\n /** Choices offered by the size changer. */\n pageSizeOptions: number[];\n /** Render the page-size `<select>` by default. */\n showSizeChanger: boolean;\n /** Render the item-count summary by default. */\n showTotal: boolean;\n /** Collapse the numbered pages to a `current / total` readout. */\n simple: boolean;\n}\n\nexport const [injectXuiPaginationConfig, provideXuiPaginationConfig] = createXConfigToken<XuiPaginationConfig>(\n 'XuiPaginationConfig',\n {\n siblingCount: 1,\n pageSizeOptions: [10, 20, 50, 100],\n showSizeChanger: false,\n showTotal: false,\n simple: false\n }\n);\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n numberAttribute,\n ViewEncapsulation\n} from '@angular/core';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { matChevronLeftRound, matChevronRightRound } from '@ng-icons/material-icons/round';\nimport { xui } from '@xui/core';\nimport { XuiIcon } from '@xui/icon';\nimport type { ClassValue } from 'clsx';\nimport { injectXuiPaginationConfig } from './pagination.token';\n\n/**\n * Page navigation for a paged collection. Two-way `pageIndex` (1-based) and\n * `pageSize`; `total` is the item count. Renders prev/next, numbered pages with\n * ellipses, an optional size changer and an item-count summary.\n *\n * ```html\n * <xui-pagination [total]=\"248\" [(pageIndex)]=\"page\" [(pageSize)]=\"size\" showSizeChanger showTotal />\n * ```\n */\n@Component({\n selector: 'xui-pagination',\n template: `\n @if (showTotal()) {\n <span class=\"text-foreground-muted me-1 text-sm\">{{ totalLabel() }}</span>\n }\n\n <button\n type=\"button\"\n [class]=\"stepClass()\"\n [disabled]=\"disabled() || pageIndex() <= 1\"\n (click)=\"go(pageIndex() - 1)\"\n aria-label=\"Previous page\"\n >\n <ng-icon xui size=\"sm\" name=\"matChevronLeftRound\" />\n </button>\n\n @if (simple()) {\n <span class=\"text-foreground px-2 text-sm tabular-nums\">{{ pageIndex() }} / {{ totalPages() }}</span>\n } @else {\n @for (item of pages(); track $index) {\n @if (item === '...') {\n <span class=\"text-foreground-muted px-1 select-none\">…</span>\n } @else {\n <button\n type=\"button\"\n [class]=\"pageClass(item === pageIndex())\"\n [attr.aria-current]=\"item === pageIndex() ? 'page' : null\"\n [disabled]=\"disabled()\"\n (click)=\"go(item)\"\n >\n {{ item }}\n </button>\n }\n }\n }\n\n <button\n type=\"button\"\n [class]=\"stepClass()\"\n [disabled]=\"disabled() || pageIndex() >= totalPages()\"\n (click)=\"go(pageIndex() + 1)\"\n aria-label=\"Next page\"\n >\n <ng-icon xui size=\"sm\" name=\"matChevronRightRound\" />\n </button>\n\n @if (showSizeChanger()) {\n <select\n [class]=\"selectClass()\"\n [disabled]=\"disabled()\"\n (change)=\"changeSize($any($event.target).value)\"\n aria-label=\"Page size\"\n >\n @for (option of pageSizeOptions(); track option) {\n <option [value]=\"option\" [selected]=\"option === pageSize()\">{{ option }} / page</option>\n }\n </select>\n }\n `,\n host: {\n '[class]': 'computedClass()',\n role: 'navigation',\n 'aria-label': 'Pagination'\n },\n imports: [NgIcon, XuiIcon],\n viewProviders: [provideIcons({ matChevronLeftRound, matChevronRightRound })],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class XuiPagination {\n private readonly config = injectXuiPaginationConfig();\n\n readonly class = input<ClassValue>('');\n\n readonly total = input<number, NumberInput>(0, { transform: numberAttribute });\n readonly pageIndex = model<number>(1);\n readonly pageSize = model<number>(10);\n readonly pageSizeOptions = input<number[]>(this.config.pageSizeOptions);\n readonly showSizeChanger = input<boolean, BooleanInput>(this.config.showSizeChanger, {\n transform: booleanAttribute\n });\n readonly showTotal = input<boolean, BooleanInput>(this.config.showTotal, { transform: booleanAttribute });\n readonly simple = input<boolean, BooleanInput>(this.config.simple, { transform: booleanAttribute });\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n /** Pages shown on each side of the current page. */\n readonly siblingCount = input<number, NumberInput>(this.config.siblingCount, { transform: numberAttribute });\n\n protected readonly totalPages = computed(() => Math.max(1, Math.ceil(this.total() / this.pageSize())));\n protected readonly pages = computed(() => paginationRange(this.pageIndex(), this.totalPages(), this.siblingCount()));\n\n protected readonly totalLabel = computed(() => {\n const total = this.total();\n if (total === 0) {\n return '0 items';\n }\n const start = (this.pageIndex() - 1) * this.pageSize() + 1;\n const end = Math.min(this.pageIndex() * this.pageSize(), total);\n return `${start}-${end} of ${total} items`;\n });\n\n protected go(page: number): void {\n if (this.disabled()) {\n return;\n }\n const next = Math.max(1, Math.min(this.totalPages(), page));\n if (next !== this.pageIndex()) {\n this.pageIndex.set(next);\n }\n }\n\n protected changeSize(value: string): void {\n const size = Number(value);\n if (!Number.isFinite(size) || size <= 0) {\n return;\n }\n this.pageSize.set(size);\n // Keep the current page in range after the size changes.\n if (this.pageIndex() > this.totalPages()) {\n this.pageIndex.set(this.totalPages());\n }\n }\n\n protected readonly computedClass = computed(() => xui('inline-flex items-center gap-1', this.class()));\n protected readonly selectClass = computed(() =>\n xui(\n 'border-border bg-surface text-foreground ms-2 h-(--control-height-md) rounded-md border px-(--control-padding-sm) text-sm'\n )\n );\n\n // A disabled button keeps its pointer events so the cursor can say it is unavailable —\n // `pointer-events-none` would leave the arrow unchanged, since the browser takes no cursor from\n // an element that receives no pointer events. The native `disabled` swallows the click, and the\n // handlers guard on top of it; the hover lift is scoped to `enabled:` so the button does not\n // light up on the way past.\n protected stepClass(): string {\n return xui(\n 'border-border text-foreground enabled:hover:bg-surface-inset flex size-(--control-height-md) items-center justify-center rounded-md border disabled:cursor-not-allowed disabled:opacity-40'\n );\n }\n\n protected pageClass(active: boolean): string {\n return xui(\n 'flex h-(--control-height-md) min-w-(--control-height-md) items-center justify-center rounded-md border px-(--control-padding-sm) text-sm tabular-nums disabled:cursor-not-allowed disabled:opacity-40',\n active\n ? 'border-primary bg-primary text-primary-foreground font-medium'\n : 'border-border text-foreground enabled:hover:bg-surface-inset'\n );\n }\n}\n\nconst range = (start: number, end: number): number[] =>\n Array.from({ length: Math.max(0, end - start + 1) }, (_, i) => start + i);\n\n/**\n * The page items to display: page numbers with `'...'` ellipsis markers where\n * the range is collapsed. `siblingCount` is how many pages flank the current one.\n */\nexport function paginationRange(current: number, totalPages: number, siblingCount = 1): (number | '...')[] {\n const totalShown = siblingCount * 2 + 5;\n if (totalPages <= totalShown) {\n return range(1, totalPages);\n }\n\n const leftSibling = Math.max(current - siblingCount, 1);\n const rightSibling = Math.min(current + siblingCount, totalPages);\n const showLeftDots = leftSibling > 2;\n const showRightDots = rightSibling < totalPages - 1;\n const edgeCount = 3 + 2 * siblingCount;\n\n if (!showLeftDots && showRightDots) {\n return [...range(1, edgeCount), '...', totalPages];\n }\n if (showLeftDots && !showRightDots) {\n return [1, '...', ...range(totalPages - edgeCount + 1, totalPages)];\n }\n return [1, '...', ...range(leftSibling, rightSibling), '...', totalPages];\n}\n","import { XuiPagination } from './lib/pagination';\n\nexport * from './lib/pagination';\nexport * from './lib/pagination.token';\n\nexport const XuiPaginationImports = [XuiPagination] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xui/pagination",
3
- "version": "2.0.0-alpha.17",
3
+ "version": "2.0.0-alpha.19",
4
4
  "description": "Modern Angular 22 UI Library based on TailwindCSS",
5
5
  "keywords": [
6
6
  "angular",
@@ -40,8 +40,8 @@
40
40
  "@angular/core": "22",
41
41
  "@ng-icons/core": "34",
42
42
  "@ng-icons/material-icons": "34",
43
- "@xui/core": "2.0.0-alpha.17",
44
- "@xui/icon": "2.0.0-alpha.17",
43
+ "@xui/core": "2.0.0-alpha.19",
44
+ "@xui/icon": "2.0.0-alpha.19",
45
45
  "clsx": "^2.1.1"
46
46
  },
47
47
  "publishConfig": {