pdm-ui-kit 1.2.0 → 1.2.1

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.
@@ -30,10 +30,40 @@ class PdmPaginationComponent {
30
30
  }
31
31
  get visiblePages() {
32
32
  const total = Math.max(1, this.pageCount);
33
- if (total <= Math.max(1, this.maxVisible)) {
33
+ const current = Math.min(Math.max(1, this.page), total);
34
+ const maxNumericPages = Math.max(3, Math.floor(this.maxVisible));
35
+ if (total <= maxNumericPages) {
34
36
  return Array.from({ length: total }, (_, i) => i + 1);
35
37
  }
36
- return [1, 2, 'ellipsis', total];
38
+ const middleSlots = maxNumericPages - 2;
39
+ let start = current - Math.floor((middleSlots - 1) / 2);
40
+ let end = start + middleSlots - 1;
41
+ if (start < 2) {
42
+ start = 2;
43
+ end = start + middleSlots - 1;
44
+ }
45
+ if (end > total - 1) {
46
+ end = total - 1;
47
+ start = end - middleSlots + 1;
48
+ }
49
+ const pages = [1];
50
+ for (let pageNumber = start; pageNumber <= end; pageNumber += 1) {
51
+ pages.push(pageNumber);
52
+ }
53
+ pages.push(total);
54
+ return pages.reduce((result, pageNumber) => {
55
+ const previous = result[result.length - 1];
56
+ if (typeof previous === 'number') {
57
+ if (pageNumber - previous === 2) {
58
+ result.push(previous + 1);
59
+ }
60
+ else if (pageNumber - previous > 2) {
61
+ result.push('ellipsis');
62
+ }
63
+ }
64
+ result.push(pageNumber);
65
+ return result;
66
+ }, []);
37
67
  }
38
68
  setPage(next) {
39
69
  if (next < 1 || next > this.pageCount || next === this.page) {
@@ -1 +1 @@
1
- {"version":3,"file":"pdm-ui-kit-src-pagination.mjs","sources":["../../../src/pagination/pagination.component.ts","../../../src/pagination/pagination.component.html","../../../src/pagination/pagination.module.ts","../../../src/pagination/pdm-ui-kit-src-pagination.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport type { PdmNativeSelectOption } from 'pdm-ui-kit/src/native-select';\n\n@Component({\n selector: 'pdm-pagination',\n templateUrl: './pagination.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PdmPaginationComponent {\n @Input() page = 1;\n @Input() pageCount = 1;\n @Input() maxVisible = 4;\n @Input() className = '';\n @Input() rowsPerPageLabel = 'Rows per page';\n @Input() rowsPerPage = 10;\n @Input() rowsPerPageOptions: number[] = [10, 20, 30, 50];\n\n @Output() pageChange = new EventEmitter<number>();\n @Output() rowsPerPageChange = new EventEmitter<number>();\n\n get rowsPerPageSelectOptions(): PdmNativeSelectOption[] {\n return this.rowsPerPageOptions.map((value) => ({\n label: String(value),\n value: String(value)\n }));\n }\n\n get rowsPerPageValue(): string {\n return String(this.rowsPerPage);\n }\n\n get visiblePages(): Array<number | 'ellipsis'> {\n const total = Math.max(1, this.pageCount);\n if (total <= Math.max(1, this.maxVisible)) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n return [1, 2, 'ellipsis', total];\n }\n\n setPage(next: number): void {\n if (next < 1 || next > this.pageCount || next === this.page) {\n return;\n }\n\n this.pageChange.emit(next);\n }\n\n onRowsPerPageChangeValue(value: string): void {\n const next = Number(value);\n if (!Number.isFinite(next) || next <= 0 || next === this.rowsPerPage) {\n return;\n }\n\n this.rowsPerPageChange.emit(next);\n }\n}\n","<nav\n aria-label=\"Pagination\"\n [ngClass]=\"[\n 'mx-auto flex w-full flex-wrap items-center justify-center gap-4',\n className,\n ]\"\n>\n <div class=\"flex items-center gap-3\" *ngIf=\"rowsPerPageOptions.length > 0\">\n <span class=\"text-sm font-medium text-foreground\">{{\n rowsPerPageLabel\n }}</span>\n <pdm-select\n [value]=\"rowsPerPageValue\"\n [options]=\"rowsPerPageSelectOptions\"\n [placeholder]=\"rowsPerPageValue\"\n className=\"w-[100px] sm:w-[120px]\"\n (valueChange)=\"onRowsPerPageChangeValue($event)\"\n ></pdm-select>\n </div>\n\n <ul class=\"m-0 flex list-none items-center gap-1 p-0\">\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none box-border items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page <= 1\"\n (click)=\"setPage(page - 1)\"\n >\n <pdm-icon name=\"chevron-left\" [size]=\"14\"></pdm-icon>\n Previous\n </button>\n </li>\n <li *ngFor=\"let pageNumber of visiblePages\">\n <ng-container *ngIf=\"pageNumber === 'ellipsis'; else pageButton\">\n <span\n class=\"inline-flex h-9 min-w-9 items-center justify-center px-2 text-sm text-muted-foreground\"\n >...</span\n >\n </ng-container>\n <ng-template #pageButton>\n <button\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 min-w-9 items-center justify-center rounded-md px-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n pageNumber === page\n ? 'appearance-none box-border border border-solid border-border bg-muted text-foreground shadow-sm'\n : 'appearance-none box-border border-0 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground',\n ]\"\n (click)=\"setPage(+pageNumber)\"\n >\n {{ pageNumber }}\n </button>\n </ng-template>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none box-border items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page >= pageCount\"\n (click)=\"setPage(page + 1)\"\n >\n Next\n <pdm-icon name=\"chevron-right\" [size]=\"14\"></pdm-icon>\n </button>\n </li>\n </ul>\n</nav>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { PdmIconModule } from \"pdm-ui-kit/src/icon\";\nimport { PdmSelectModule } from \"pdm-ui-kit/src/select\";\nimport { PdmPaginationComponent } from \"./pagination.component\";\n\nconst COMPONENTS = [PdmPaginationComponent];\n\n@NgModule({\n\timports: [CommonModule, PdmIconModule, PdmSelectModule],\n\tdeclarations: COMPONENTS,\n\texports: COMPONENTS,\n})\nexport class PdmPaginationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;MAQa,sBAAsB,CAAA;AALnC,IAAA,WAAA,GAAA;QAMW,IAAI,CAAA,IAAA,GAAG,CAAC,CAAC;QACT,IAAS,CAAA,SAAA,GAAG,CAAC,CAAC;QACd,IAAU,CAAA,UAAA,GAAG,CAAC,CAAC;QACf,IAAS,CAAA,SAAA,GAAG,EAAE,CAAC;QACf,IAAgB,CAAA,gBAAA,GAAG,eAAe,CAAC;QACnC,IAAW,CAAA,WAAA,GAAG,EAAE,CAAC;QACjB,IAAkB,CAAA,kBAAA,GAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAE/C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAU,CAAC;AACxC,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAU,CAAC;AAsC1D,KAAA;AApCC,IAAA,IAAI,wBAAwB,GAAA;QAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;AAC7C,YAAA,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;AACpB,YAAA,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;AACrB,SAAA,CAAC,CAAC,CAAC;KACL;AAED,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACjC;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1C,QAAA,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;YACzC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACvD,SAAA;QAED,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;KAClC;AAED,IAAA,OAAO,CAAC,IAAY,EAAA;AAClB,QAAA,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;YAC3D,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC5B;AAED,IAAA,wBAAwB,CAAC,KAAa,EAAA;AACpC,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE;YACpE,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACnC;;mHA/CU,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,qVCRnC,wzFAmEA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FD3Da,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;+BACE,gBAAgB,EAAA,eAAA,EAET,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,wzFAAA,EAAA,CAAA;8BAGtC,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAEI,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBACG,iBAAiB,EAAA,CAAA;sBAA1B,MAAM;;;AEZT,MAAM,UAAU,GAAG,CAAC,sBAAsB,CAAC,CAAC;MAO/B,mBAAmB,CAAA;;gHAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;iHAAnB,mBAAmB,EAAA,YAAA,EAAA,CAPZ,sBAAsB,CAG/B,EAAA,OAAA,EAAA,CAAA,YAAY,EAAE,aAAa,EAAE,eAAe,CAAA,EAAA,OAAA,EAAA,CAHnC,sBAAsB,CAAA,EAAA,CAAA,CAAA;AAO7B,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EAJrB,OAAA,EAAA,CAAA,YAAY,EAAE,aAAa,EAAE,eAAe,CAAA,EAAA,CAAA,CAAA;2FAI1C,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,CAAC;AACvD,oBAAA,YAAY,EAAE,UAAU;AACxB,oBAAA,OAAO,EAAE,UAAU;AACnB,iBAAA,CAAA;;;ACZD;;AAEG;;;;"}
1
+ {"version":3,"file":"pdm-ui-kit-src-pagination.mjs","sources":["../../../src/pagination/pagination.component.ts","../../../src/pagination/pagination.component.html","../../../src/pagination/pagination.module.ts","../../../src/pagination/pdm-ui-kit-src-pagination.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport type { PdmNativeSelectOption } from 'pdm-ui-kit/src/native-select';\n\n@Component({\n selector: 'pdm-pagination',\n templateUrl: './pagination.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PdmPaginationComponent {\n @Input() page = 1;\n @Input() pageCount = 1;\n @Input() maxVisible = 4;\n @Input() className = '';\n @Input() rowsPerPageLabel = 'Rows per page';\n @Input() rowsPerPage = 10;\n @Input() rowsPerPageOptions: number[] = [10, 20, 30, 50];\n\n @Output() pageChange = new EventEmitter<number>();\n @Output() rowsPerPageChange = new EventEmitter<number>();\n\n get rowsPerPageSelectOptions(): PdmNativeSelectOption[] {\n return this.rowsPerPageOptions.map((value) => ({\n label: String(value),\n value: String(value)\n }));\n }\n\n get rowsPerPageValue(): string {\n return String(this.rowsPerPage);\n }\n\n get visiblePages(): Array<number | 'ellipsis'> {\n const total = Math.max(1, this.pageCount);\n const current = Math.min(Math.max(1, this.page), total);\n const maxNumericPages = Math.max(3, Math.floor(this.maxVisible));\n\n if (total <= maxNumericPages) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n const middleSlots = maxNumericPages - 2;\n let start = current - Math.floor((middleSlots - 1) / 2);\n let end = start + middleSlots - 1;\n\n if (start < 2) {\n start = 2;\n end = start + middleSlots - 1;\n }\n\n if (end > total - 1) {\n end = total - 1;\n start = end - middleSlots + 1;\n }\n\n const pages = [1];\n for (let pageNumber = start; pageNumber <= end; pageNumber += 1) {\n pages.push(pageNumber);\n }\n pages.push(total);\n\n return pages.reduce<Array<number | 'ellipsis'>>((result, pageNumber) => {\n const previous = result[result.length - 1];\n\n if (typeof previous === 'number') {\n if (pageNumber - previous === 2) {\n result.push(previous + 1);\n } else if (pageNumber - previous > 2) {\n result.push('ellipsis');\n }\n }\n\n result.push(pageNumber);\n return result;\n }, []);\n }\n\n setPage(next: number): void {\n if (next < 1 || next > this.pageCount || next === this.page) {\n return;\n }\n\n this.pageChange.emit(next);\n }\n\n onRowsPerPageChangeValue(value: string): void {\n const next = Number(value);\n if (!Number.isFinite(next) || next <= 0 || next === this.rowsPerPage) {\n return;\n }\n\n this.rowsPerPageChange.emit(next);\n }\n}\n","<nav\n aria-label=\"Pagination\"\n [ngClass]=\"[\n 'mx-auto flex w-full flex-wrap items-center justify-center gap-4',\n className,\n ]\"\n>\n <div class=\"flex items-center gap-3\" *ngIf=\"rowsPerPageOptions.length > 0\">\n <span class=\"text-sm font-medium text-foreground\">{{\n rowsPerPageLabel\n }}</span>\n <pdm-select\n [value]=\"rowsPerPageValue\"\n [options]=\"rowsPerPageSelectOptions\"\n [placeholder]=\"rowsPerPageValue\"\n className=\"w-[100px] sm:w-[120px]\"\n (valueChange)=\"onRowsPerPageChangeValue($event)\"\n ></pdm-select>\n </div>\n\n <ul class=\"m-0 flex list-none items-center gap-1 p-0\">\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none box-border items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page <= 1\"\n (click)=\"setPage(page - 1)\"\n >\n <pdm-icon name=\"chevron-left\" [size]=\"14\"></pdm-icon>\n Previous\n </button>\n </li>\n <li *ngFor=\"let pageNumber of visiblePages\">\n <ng-container *ngIf=\"pageNumber === 'ellipsis'; else pageButton\">\n <span\n class=\"inline-flex h-9 min-w-9 items-center justify-center px-2 text-sm text-muted-foreground\"\n >...</span\n >\n </ng-container>\n <ng-template #pageButton>\n <button\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 min-w-9 items-center justify-center rounded-md px-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n pageNumber === page\n ? 'appearance-none box-border border border-solid border-border bg-muted text-foreground shadow-sm'\n : 'appearance-none box-border border-0 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground',\n ]\"\n (click)=\"setPage(+pageNumber)\"\n >\n {{ pageNumber }}\n </button>\n </ng-template>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none box-border items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page >= pageCount\"\n (click)=\"setPage(page + 1)\"\n >\n Next\n <pdm-icon name=\"chevron-right\" [size]=\"14\"></pdm-icon>\n </button>\n </li>\n </ul>\n</nav>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { PdmIconModule } from \"pdm-ui-kit/src/icon\";\nimport { PdmSelectModule } from \"pdm-ui-kit/src/select\";\nimport { PdmPaginationComponent } from \"./pagination.component\";\n\nconst COMPONENTS = [PdmPaginationComponent];\n\n@NgModule({\n\timports: [CommonModule, PdmIconModule, PdmSelectModule],\n\tdeclarations: COMPONENTS,\n\texports: COMPONENTS,\n})\nexport class PdmPaginationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -5569,10 +5569,40 @@ class PdmPaginationComponent {
5569
5569
  }
5570
5570
  get visiblePages() {
5571
5571
  const total = Math.max(1, this.pageCount);
5572
- if (total <= Math.max(1, this.maxVisible)) {
5572
+ const current = Math.min(Math.max(1, this.page), total);
5573
+ const maxNumericPages = Math.max(3, Math.floor(this.maxVisible));
5574
+ if (total <= maxNumericPages) {
5573
5575
  return Array.from({ length: total }, (_, i) => i + 1);
5574
5576
  }
5575
- return [1, 2, 'ellipsis', total];
5577
+ const middleSlots = maxNumericPages - 2;
5578
+ let start = current - Math.floor((middleSlots - 1) / 2);
5579
+ let end = start + middleSlots - 1;
5580
+ if (start < 2) {
5581
+ start = 2;
5582
+ end = start + middleSlots - 1;
5583
+ }
5584
+ if (end > total - 1) {
5585
+ end = total - 1;
5586
+ start = end - middleSlots + 1;
5587
+ }
5588
+ const pages = [1];
5589
+ for (let pageNumber = start; pageNumber <= end; pageNumber += 1) {
5590
+ pages.push(pageNumber);
5591
+ }
5592
+ pages.push(total);
5593
+ return pages.reduce((result, pageNumber) => {
5594
+ const previous = result[result.length - 1];
5595
+ if (typeof previous === 'number') {
5596
+ if (pageNumber - previous === 2) {
5597
+ result.push(previous + 1);
5598
+ }
5599
+ else if (pageNumber - previous > 2) {
5600
+ result.push('ellipsis');
5601
+ }
5602
+ }
5603
+ result.push(pageNumber);
5604
+ return result;
5605
+ }, []);
5576
5606
  }
5577
5607
  setPage(next) {
5578
5608
  if (next < 1 || next > this.pageCount || next === this.page) {