@i-cell/ids-angular 0.0.0-watch

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.
Files changed (133) hide show
  1. package/README.md +24 -0
  2. package/accordion/index.d.ts +81 -0
  3. package/accordion/package.json +3 -0
  4. package/avatar/index.d.ts +66 -0
  5. package/avatar/package.json +3 -0
  6. package/badge/index.d.ts +61 -0
  7. package/badge/package.json +3 -0
  8. package/breadcrumb/index.d.ts +67 -0
  9. package/breadcrumb/package.json +3 -0
  10. package/button/index.d.ts +81 -0
  11. package/button/package.json +3 -0
  12. package/card/index.d.ts +91 -0
  13. package/card/package.json +3 -0
  14. package/checkbox/index.d.ts +137 -0
  15. package/checkbox/package.json +3 -0
  16. package/chip/index.d.ts +82 -0
  17. package/chip/package.json +3 -0
  18. package/core/index.d.ts +168 -0
  19. package/core/package.json +3 -0
  20. package/datepicker/index.d.ts +112 -0
  21. package/datepicker/package.json +3 -0
  22. package/dialog/index.d.ts +72 -0
  23. package/dialog/package.json +3 -0
  24. package/divider/index.d.ts +45 -0
  25. package/divider/package.json +3 -0
  26. package/fesm2022/i-cell-ids-angular-accordion.mjs +223 -0
  27. package/fesm2022/i-cell-ids-angular-accordion.mjs.map +1 -0
  28. package/fesm2022/i-cell-ids-angular-avatar.mjs +125 -0
  29. package/fesm2022/i-cell-ids-angular-avatar.mjs.map +1 -0
  30. package/fesm2022/i-cell-ids-angular-badge.mjs +172 -0
  31. package/fesm2022/i-cell-ids-angular-badge.mjs.map +1 -0
  32. package/fesm2022/i-cell-ids-angular-breadcrumb.mjs +313 -0
  33. package/fesm2022/i-cell-ids-angular-breadcrumb.mjs.map +1 -0
  34. package/fesm2022/i-cell-ids-angular-button.mjs +149 -0
  35. package/fesm2022/i-cell-ids-angular-button.mjs.map +1 -0
  36. package/fesm2022/i-cell-ids-angular-card.mjs +222 -0
  37. package/fesm2022/i-cell-ids-angular-card.mjs.map +1 -0
  38. package/fesm2022/i-cell-ids-angular-checkbox.mjs +350 -0
  39. package/fesm2022/i-cell-ids-angular-checkbox.mjs.map +1 -0
  40. package/fesm2022/i-cell-ids-angular-chip.mjs +166 -0
  41. package/fesm2022/i-cell-ids-angular-chip.mjs.map +1 -0
  42. package/fesm2022/i-cell-ids-angular-core.mjs +409 -0
  43. package/fesm2022/i-cell-ids-angular-core.mjs.map +1 -0
  44. package/fesm2022/i-cell-ids-angular-datepicker.mjs +860 -0
  45. package/fesm2022/i-cell-ids-angular-datepicker.mjs.map +1 -0
  46. package/fesm2022/i-cell-ids-angular-dialog.mjs +183 -0
  47. package/fesm2022/i-cell-ids-angular-dialog.mjs.map +1 -0
  48. package/fesm2022/i-cell-ids-angular-divider.mjs +76 -0
  49. package/fesm2022/i-cell-ids-angular-divider.mjs.map +1 -0
  50. package/fesm2022/i-cell-ids-angular-forms.mjs +972 -0
  51. package/fesm2022/i-cell-ids-angular-forms.mjs.map +1 -0
  52. package/fesm2022/i-cell-ids-angular-icon-button.mjs +120 -0
  53. package/fesm2022/i-cell-ids-angular-icon-button.mjs.map +1 -0
  54. package/fesm2022/i-cell-ids-angular-icon.mjs +158 -0
  55. package/fesm2022/i-cell-ids-angular-icon.mjs.map +1 -0
  56. package/fesm2022/i-cell-ids-angular-menu.mjs +154 -0
  57. package/fesm2022/i-cell-ids-angular-menu.mjs.map +1 -0
  58. package/fesm2022/i-cell-ids-angular-notification.mjs +167 -0
  59. package/fesm2022/i-cell-ids-angular-notification.mjs.map +1 -0
  60. package/fesm2022/i-cell-ids-angular-overlay-panel.mjs +72 -0
  61. package/fesm2022/i-cell-ids-angular-overlay-panel.mjs.map +1 -0
  62. package/fesm2022/i-cell-ids-angular-paginator.mjs +319 -0
  63. package/fesm2022/i-cell-ids-angular-paginator.mjs.map +1 -0
  64. package/fesm2022/i-cell-ids-angular-radio.mjs +312 -0
  65. package/fesm2022/i-cell-ids-angular-radio.mjs.map +1 -0
  66. package/fesm2022/i-cell-ids-angular-segmented-control-toggle.mjs +264 -0
  67. package/fesm2022/i-cell-ids-angular-segmented-control-toggle.mjs.map +1 -0
  68. package/fesm2022/i-cell-ids-angular-segmented-control.mjs +283 -0
  69. package/fesm2022/i-cell-ids-angular-segmented-control.mjs.map +1 -0
  70. package/fesm2022/i-cell-ids-angular-select.mjs +549 -0
  71. package/fesm2022/i-cell-ids-angular-select.mjs.map +1 -0
  72. package/fesm2022/i-cell-ids-angular-side-nav.mjs +375 -0
  73. package/fesm2022/i-cell-ids-angular-side-nav.mjs.map +1 -0
  74. package/fesm2022/i-cell-ids-angular-side-sheet.mjs +179 -0
  75. package/fesm2022/i-cell-ids-angular-side-sheet.mjs.map +1 -0
  76. package/fesm2022/i-cell-ids-angular-snackbar.mjs +440 -0
  77. package/fesm2022/i-cell-ids-angular-snackbar.mjs.map +1 -0
  78. package/fesm2022/i-cell-ids-angular-spinner.mjs +67 -0
  79. package/fesm2022/i-cell-ids-angular-spinner.mjs.map +1 -0
  80. package/fesm2022/i-cell-ids-angular-switch.mjs +181 -0
  81. package/fesm2022/i-cell-ids-angular-switch.mjs.map +1 -0
  82. package/fesm2022/i-cell-ids-angular-tab.mjs +142 -0
  83. package/fesm2022/i-cell-ids-angular-tab.mjs.map +1 -0
  84. package/fesm2022/i-cell-ids-angular-table.mjs +663 -0
  85. package/fesm2022/i-cell-ids-angular-table.mjs.map +1 -0
  86. package/fesm2022/i-cell-ids-angular-tag.mjs +116 -0
  87. package/fesm2022/i-cell-ids-angular-tag.mjs.map +1 -0
  88. package/fesm2022/i-cell-ids-angular-tooltip.mjs +586 -0
  89. package/fesm2022/i-cell-ids-angular-tooltip.mjs.map +1 -0
  90. package/fesm2022/i-cell-ids-angular.mjs +9 -0
  91. package/fesm2022/i-cell-ids-angular.mjs.map +1 -0
  92. package/forms/index.d.ts +470 -0
  93. package/forms/package.json +3 -0
  94. package/icon/index.d.ts +69 -0
  95. package/icon/package.json +3 -0
  96. package/icon-button/index.d.ts +68 -0
  97. package/icon-button/package.json +3 -0
  98. package/index.d.ts +2 -0
  99. package/menu/index.d.ts +68 -0
  100. package/menu/package.json +3 -0
  101. package/notification/index.d.ts +68 -0
  102. package/notification/package.json +3 -0
  103. package/overlay-panel/index.d.ts +41 -0
  104. package/overlay-panel/package.json +3 -0
  105. package/package.json +180 -0
  106. package/paginator/index.d.ts +122 -0
  107. package/paginator/package.json +3 -0
  108. package/radio/index.d.ts +95 -0
  109. package/radio/package.json +3 -0
  110. package/segmented-control/index.d.ts +98 -0
  111. package/segmented-control/package.json +3 -0
  112. package/segmented-control-toggle/index.d.ts +103 -0
  113. package/segmented-control-toggle/package.json +3 -0
  114. package/select/index.d.ts +103 -0
  115. package/select/package.json +3 -0
  116. package/side-nav/index.d.ts +107 -0
  117. package/side-nav/package.json +3 -0
  118. package/side-sheet/index.d.ts +84 -0
  119. package/side-sheet/package.json +3 -0
  120. package/snackbar/index.d.ts +149 -0
  121. package/snackbar/package.json +3 -0
  122. package/spinner/index.d.ts +41 -0
  123. package/spinner/package.json +3 -0
  124. package/switch/index.d.ts +89 -0
  125. package/switch/package.json +3 -0
  126. package/tab/index.d.ts +78 -0
  127. package/tab/package.json +3 -0
  128. package/table/index.d.ts +393 -0
  129. package/table/package.json +3 -0
  130. package/tag/index.d.ts +70 -0
  131. package/tag/package.json +3 -0
  132. package/tooltip/index.d.ts +96 -0
  133. package/tooltip/package.json +3 -0
@@ -0,0 +1,319 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, Injectable, Optional, SkipSelf, inject, ChangeDetectorRef, ElementRef, input, computed, model, effect, output, isDevMode, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
3
+ import { IdsSize, ComponentBaseWithDefaults, coerceNumberAttribute, createClassList, isNumberEven } from '@i-cell/ids-angular/core';
4
+ import { Subject, debounceTime } from 'rxjs';
5
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
+ import { IdsIconComponent } from '@i-cell/ids-angular/icon';
7
+
8
+ const IdsPaginatorPageButtonAppearance = {
9
+ PLAIN: 'plain',
10
+ };
11
+
12
+ class IdsPaginatorPageChangeEvent {
13
+ }
14
+
15
+ const IdsPaginatorVariant = {
16
+ PRIMARY: 'primary',
17
+ SECONDARY: 'secondary',
18
+ SURFACE: 'surface',
19
+ LIGHT: 'light',
20
+ };
21
+
22
+ /* eslint-disable no-magic-numbers */
23
+ const DEFAULT_PAGE_SIZE = 10;
24
+ const MAX_DISPLAYED_ITEM_COUNT = 7;
25
+ const IDS_PAGINATOR_DEFAULT_CONFIG = new InjectionToken('IDS_PAGINATOR_DEFAULT_CONFIG', {
26
+ providedIn: 'root',
27
+ factory: IDS_PAGINATOR_DEFAULT_CONFIG_FACTORY,
28
+ });
29
+ function IDS_PAGINATOR_DEFAULT_CONFIG_FACTORY() {
30
+ return {
31
+ pageSize: DEFAULT_PAGE_SIZE,
32
+ pageSizeOptions: [
33
+ 10,
34
+ 20,
35
+ 50,
36
+ 100,
37
+ ],
38
+ showFirstLastButton: true,
39
+ showPrevNextLabel: false,
40
+ showPageInfo: true,
41
+ showPageButtons: true,
42
+ showAllPages: false,
43
+ maxDisplayedItemCount: MAX_DISPLAYED_ITEM_COUNT,
44
+ size: IdsSize.COMPACT,
45
+ variant: IdsPaginatorVariant.SURFACE,
46
+ pageButtonAppearance: IdsPaginatorPageButtonAppearance.PLAIN,
47
+ debounceTime: 300,
48
+ };
49
+ }
50
+
51
+ class IdsPaginatorIntl {
52
+ constructor() {
53
+ this.changes = new Subject();
54
+ this.nextPageLabel = 'Next';
55
+ this.previousPageLabel = 'Previous';
56
+ this.nextPageAriaLabel = 'Go to next page';
57
+ this.previousPageAriaLabel = 'Go to previous page';
58
+ this.firstPageAriaLabel = 'Go to first page';
59
+ this.lastPageAriaLabel = 'Go to last page';
60
+ this.getPageAriaLabel = (page) => `Go to page ${page}`;
61
+ this.getRangeLabel = (page, pageSize, length) => {
62
+ if (length === 0 || pageSize === 0) {
63
+ return 'Page 0 of 0';
64
+ }
65
+ const maxPageCount = Math.ceil(length / pageSize);
66
+ return `Page ${page + 1} of ${maxPageCount}`;
67
+ };
68
+ }
69
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: IdsPaginatorIntl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
70
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: IdsPaginatorIntl, providedIn: 'root' }); }
71
+ }
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: IdsPaginatorIntl, decorators: [{
73
+ type: Injectable,
74
+ args: [{ providedIn: 'root' }]
75
+ }] });
76
+ /** @docs-private */
77
+ function IDS_PAGINATOR_INTL_PROVIDER_FACTORY(parentIntl) {
78
+ return parentIntl || new IdsPaginatorIntl();
79
+ }
80
+ /** @docs-private */
81
+ const IDS_PAGINATOR_INTL_PROVIDER = {
82
+ // If there is already an IdsPaginatorIntl available, use that. Otherwise, provide a new one.
83
+ provide: IdsPaginatorIntl,
84
+ deps: [
85
+ [
86
+ new Optional(),
87
+ new SkipSelf(),
88
+ IdsPaginatorIntl,
89
+ ],
90
+ ],
91
+ useFactory: IDS_PAGINATOR_INTL_PROVIDER_FACTORY,
92
+ };
93
+
94
+ const defaultConfig = IDS_PAGINATOR_DEFAULT_CONFIG_FACTORY();
95
+ class IdsPaginatorComponent extends ComponentBaseWithDefaults {
96
+ get _hostName() {
97
+ return 'paginator';
98
+ }
99
+ _handleKeyDown(event) {
100
+ event.stopPropagation();
101
+ // eslint-disable-next-line @stylistic/js/array-bracket-newline, @stylistic/js/array-element-newline
102
+ const navigationKeys = ['ArrowLeft', 'ArrowRight', 'PageDown', 'PageUp', 'Home', 'End'];
103
+ switch (event.key) {
104
+ case 'ArrowLeft':
105
+ case 'PageDown':
106
+ event.preventDefault();
107
+ this.stepPreviousPage();
108
+ break;
109
+ case 'ArrowRight':
110
+ case 'PageUp':
111
+ event.preventDefault();
112
+ this.stepNextPage();
113
+ break;
114
+ case 'Home':
115
+ event.preventDefault();
116
+ this.stepFirstPage();
117
+ break;
118
+ case 'End':
119
+ event.preventDefault();
120
+ this.stepLastPage();
121
+ break;
122
+ default:
123
+ break;
124
+ }
125
+ if (event.key !== 'Tab' && navigationKeys.includes(event.key)) {
126
+ const pageButtonId = `${this._pageButtonIdPrefix()}${this._pageIndex() + 1}`; // after navigation pageIndex is new value now
127
+ const button = this._hostElementRef.nativeElement.querySelector(`button#${pageButtonId}`);
128
+ button?.focus();
129
+ }
130
+ }
131
+ constructor() {
132
+ super();
133
+ this._changeDetectorRef = inject(ChangeDetectorRef);
134
+ this._hostElementRef = inject(ElementRef);
135
+ this._defaultConfig = this._getDefaultConfig(defaultConfig, IDS_PAGINATOR_DEFAULT_CONFIG);
136
+ this._pageEventDebouncer = new Subject();
137
+ this._intl = inject(IdsPaginatorIntl);
138
+ this.pageSize = input(this._defaultConfig.pageSize, ...(ngDevMode ? [{ debugName: "pageSize", transform: coerceNumberAttribute }] : [{ transform: coerceNumberAttribute }]));
139
+ this.pageSizeOptions = input(this._defaultConfig.pageSizeOptions, ...(ngDevMode ? [{ debugName: "pageSizeOptions" }] : []));
140
+ this.showFirstLastButton = input(this._defaultConfig.showFirstLastButton, ...(ngDevMode ? [{ debugName: "showFirstLastButton" }] : []));
141
+ this.showPrevNextLabel = input(this._defaultConfig.showPrevNextLabel, ...(ngDevMode ? [{ debugName: "showPrevNextLabel" }] : []));
142
+ this.showPageInfo = input(this._defaultConfig.showPageInfo, ...(ngDevMode ? [{ debugName: "showPageInfo" }] : []));
143
+ this.showPageButtons = input(this._defaultConfig.showPageButtons, ...(ngDevMode ? [{ debugName: "showPageButtons" }] : []));
144
+ this.showAllPages = input(this._defaultConfig.showAllPages, ...(ngDevMode ? [{ debugName: "showAllPages" }] : []));
145
+ this.maxDisplayedItemCount = input(this._defaultConfig.maxDisplayedItemCount, ...(ngDevMode ? [{ debugName: "maxDisplayedItemCount" }] : []));
146
+ this.size = input(this._defaultConfig.size, ...(ngDevMode ? [{ debugName: "size" }] : []));
147
+ this.variant = input(this._defaultConfig.variant, ...(ngDevMode ? [{ debugName: "variant" }] : []));
148
+ this.pageButtonAppearance = input(this._defaultConfig.pageButtonAppearance, ...(ngDevMode ? [{ debugName: "pageButtonAppearance" }] : []));
149
+ /** The total number of items that are being paginated. */
150
+ this.length = input.required(...(ngDevMode ? [{ debugName: "length", transform: coerceNumberAttribute }] : [{ transform: coerceNumberAttribute }]));
151
+ this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
152
+ this.compactLayout = input(false, ...(ngDevMode ? [{ debugName: "compactLayout" }] : []));
153
+ this._hostClasses = computed(() => this._getHostClasses([
154
+ this.size(),
155
+ this.variant(),
156
+ this.compactLayout() ? 'compact-layout' : null,
157
+ ]), ...(ngDevMode ? [{ debugName: "_hostClasses" }] : []));
158
+ this._pageButtonClasses = computed(() => createClassList('ids-paginator__page-button', [this.pageButtonAppearance()]), ...(ngDevMode ? [{ debugName: "_pageButtonClasses" }] : []));
159
+ this._safePageSizeData = computed(() => this._getSafePageSizeData(this.pageSizeOptions(), this.pageSize()), ...(ngDevMode ? [{ debugName: "_safePageSizeData" }] : []));
160
+ this._pageButtonIdPrefix = computed(() => `${this.id()}__page-button-`, ...(ngDevMode ? [{ debugName: "_pageButtonIdPrefix" }] : []));
161
+ /**
162
+ * The index (0 based!) of the currently selected page.
163
+ *
164
+ * Usage note (!):
165
+ * In case paging initiates an async process to update the data and an error occurs the pageIndex needs to be reset to the previous value from the outside.
166
+ * If `pageIndex` is only 1-way bound (input) the model signal's value won't be updated, it needs 2-way binding!
167
+ * Possible cause: https://github.com/angular/angular/issues/57124
168
+ */
169
+ this.pageIndex = model(0, ...(ngDevMode ? [{ debugName: "pageIndex" }] : []));
170
+ this._pageIndexValidation = effect(() => {
171
+ const pageIndex = this._pageIndex();
172
+ const numberOfPages = this._numberOfPages();
173
+ if (pageIndex > 0 && numberOfPages < (pageIndex + 1)) {
174
+ this.stepPage(0);
175
+ }
176
+ }, ...(ngDevMode ? [{ debugName: "_pageIndexValidation" }] : []));
177
+ this._pageIndex = computed(() => Math.max(coerceNumberAttribute(this.pageIndex()) || 0, 0), ...(ngDevMode ? [{ debugName: "_pageIndex" }] : []));
178
+ this._numberOfPages = computed(() => {
179
+ if (!this.pageSize()) {
180
+ return 0;
181
+ }
182
+ return Math.ceil(this.length() / this.pageSize());
183
+ }, ...(ngDevMode ? [{ debugName: "_numberOfPages" }] : []));
184
+ this._hasPreviousPage = computed(() => this._pageIndex() >= 1 && this.pageSize() !== 0, ...(ngDevMode ? [{ debugName: "_hasPreviousPage" }] : []));
185
+ this._hasNextPage = computed(() => {
186
+ const maxPageIndex = this._numberOfPages() - 1;
187
+ return this._pageIndex() < maxPageIndex && this.pageSize() !== 0;
188
+ }, ...(ngDevMode ? [{ debugName: "_hasNextPage" }] : []));
189
+ this._isPreviousButtonDisabled = computed(() => this.disabled() || !this._hasPreviousPage(), ...(ngDevMode ? [{ debugName: "_isPreviousButtonDisabled" }] : []));
190
+ this._isNextButtonDisabled = computed(() => this.disabled() || !this._hasNextPage(), ...(ngDevMode ? [{ debugName: "_isNextButtonDisabled" }] : []));
191
+ // eslint-disable-next-line arrow-body-style
192
+ this._pageButtonLabels = computed(() => {
193
+ return this.compactLayout()
194
+ ? []
195
+ : this._getPageButtonLabels(this._pageIndex(), this._numberOfPages(), this.showAllPages(), this.maxDisplayedItemCount(), this.showPageButtons());
196
+ }, ...(ngDevMode ? [{ debugName: "_pageButtonLabels" }] : []));
197
+ this.pageChanged = output();
198
+ this._intl.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => this._changeDetectorRef.markForCheck());
199
+ this._pageEventDebouncer.pipe(debounceTime(this._defaultConfig.debounceTime), takeUntilDestroyed(this._destroyRef)).subscribe((pageEvent) => {
200
+ this.pageChanged.emit(pageEvent);
201
+ });
202
+ }
203
+ _getSafePageSizeData(pageSizeOptions, pageSize) {
204
+ if (isDevMode() && (!pageSize || pageSize < 0)) {
205
+ throw this._createHostError('invalid pageSize value. Must be a number and greater than 0');
206
+ }
207
+ const safePageSizeOptions = pageSizeOptions.slice();
208
+ if (isDevMode() && !safePageSizeOptions.includes(pageSize)) {
209
+ throw this._createHostError('invalid pageSize. pageSizeOptions not includes pageSize. Use an item from pageSizeOptions.');
210
+ }
211
+ safePageSizeOptions.sort((a, b) => a - b);
212
+ const safePageSize = safePageSizeOptions.length !== 0 ? safePageSizeOptions[0] : DEFAULT_PAGE_SIZE;
213
+ return {
214
+ safePageSize,
215
+ safePageSizeOptions,
216
+ };
217
+ }
218
+ _getPageButtonLabels(pageIndex, numberOfPages, showAllPages, maxDisplayedItemCount, enabled) {
219
+ const allPages = [...Array(numberOfPages).keys()].map((item) => (item + 1).toString());
220
+ if (!enabled) {
221
+ return [];
222
+ }
223
+ if (showAllPages || numberOfPages <= maxDisplayedItemCount) {
224
+ return allPages;
225
+ }
226
+ return this._getTruncatedPageLabels(allPages, pageIndex, maxDisplayedItemCount);
227
+ }
228
+ _getTruncatedPageLabels(allPages, pageIndex, maxDisplayedItemCount) {
229
+ if (isDevMode() && isNumberEven(maxDisplayedItemCount)) {
230
+ throw this._createHostError('maxDisplayedItemCount should be an odd number');
231
+ }
232
+ const center = Math.ceil(maxDisplayedItemCount / 2);
233
+ const actualPage = pageIndex + 1;
234
+ const lastPage = +(allPages.at(-1));
235
+ const isTruncatedRight = actualPage <= center;
236
+ const isTruncatedBoth = actualPage > center && actualPage <= lastPage - center;
237
+ const isTruncatedLeft = actualPage > lastPage - center;
238
+ if (isTruncatedRight) {
239
+ const x = maxDisplayedItemCount - 2; // 2 = 1 last page, 1 truncation
240
+ return [
241
+ ...allPages.slice(0, x),
242
+ 'tr',
243
+ lastPage.toString(),
244
+ ];
245
+ }
246
+ if (isTruncatedBoth) {
247
+ // eslint-disable-next-line no-magic-numbers
248
+ const x = (maxDisplayedItemCount - 5) / 2; // 5 = 1 fist page + 1 last page + 2 truncation + 1 actual page
249
+ return [
250
+ '1',
251
+ 'tl',
252
+ ...allPages.slice(pageIndex - x, pageIndex + x + 1),
253
+ 'tr',
254
+ lastPage.toString(),
255
+ ];
256
+ }
257
+ if (isTruncatedLeft) {
258
+ const x = maxDisplayedItemCount - 2; // 2 = 1 last page, 1 truncation
259
+ return [
260
+ '1',
261
+ 'tl',
262
+ ...allPages.slice(lastPage - x),
263
+ ];
264
+ }
265
+ return [];
266
+ }
267
+ stepNextPage() {
268
+ if (!this._hasNextPage()) {
269
+ return;
270
+ }
271
+ this.stepPage(this._pageIndex() + 1);
272
+ }
273
+ stepPreviousPage() {
274
+ if (!this._hasPreviousPage()) {
275
+ return;
276
+ }
277
+ this.stepPage(this._pageIndex() - 1);
278
+ }
279
+ stepFirstPage() {
280
+ if (!this._hasPreviousPage()) {
281
+ return;
282
+ }
283
+ this.stepPage(0);
284
+ }
285
+ stepLastPage() {
286
+ if (!this._hasNextPage()) {
287
+ return;
288
+ }
289
+ this.stepPage(this._numberOfPages() - 1);
290
+ }
291
+ stepPage(pageIndex) {
292
+ const previousPageIndex = this._pageIndex();
293
+ this.pageIndex.set(pageIndex);
294
+ this._debouncePageEvent(previousPageIndex, pageIndex);
295
+ }
296
+ _debouncePageEvent(previousPageIndex, pageIndex) {
297
+ this._pageEventDebouncer.next({
298
+ previousPageIndex,
299
+ pageIndex,
300
+ pageSize: this.pageSize(),
301
+ length: this.length(),
302
+ });
303
+ }
304
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: IdsPaginatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
305
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: IdsPaginatorComponent, isStandalone: true, selector: "ids-paginator", inputs: { pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, showFirstLastButton: { classPropertyName: "showFirstLastButton", publicName: "showFirstLastButton", isSignal: true, isRequired: false, transformFunction: null }, showPrevNextLabel: { classPropertyName: "showPrevNextLabel", publicName: "showPrevNextLabel", isSignal: true, isRequired: false, transformFunction: null }, showPageInfo: { classPropertyName: "showPageInfo", publicName: "showPageInfo", isSignal: true, isRequired: false, transformFunction: null }, showPageButtons: { classPropertyName: "showPageButtons", publicName: "showPageButtons", isSignal: true, isRequired: false, transformFunction: null }, showAllPages: { classPropertyName: "showAllPages", publicName: "showAllPages", isSignal: true, isRequired: false, transformFunction: null }, maxDisplayedItemCount: { classPropertyName: "maxDisplayedItemCount", publicName: "maxDisplayedItemCount", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, pageButtonAppearance: { classPropertyName: "pageButtonAppearance", publicName: "pageButtonAppearance", isSignal: true, isRequired: false, transformFunction: null }, length: { classPropertyName: "length", publicName: "length", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, compactLayout: { classPropertyName: "compactLayout", publicName: "compactLayout", isSignal: true, isRequired: false, transformFunction: null }, pageIndex: { classPropertyName: "pageIndex", publicName: "pageIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pageIndex: "pageIndexChange", pageChanged: "pageChanged" }, host: { listeners: { "keydown": "_handleKeyDown($event)" } }, usesInheritance: true, ngImport: i0, template: "<nav class=\"ids-paginator__navigation-container\">\n @if (showFirstLastButton()) {\n <button\n type=\"button\"\n class=\"ids-paginator__page-button-arrow first\"\n [class]=\"_pageButtonClasses()\"\n [disabled]=\"_isPreviousButtonDisabled()\"\n [attr.aria-label]=\"_intl.firstPageAriaLabel\"\n (click)=\"stepFirstPage()\"\n >\n <ids-icon fontIcon=\"chevron-double-left\" [size]=\"size()\" />\n </button>\n }\n\n <button\n type=\"button\"\n class=\"ids-paginator__page-button-arrow previous\"\n [class]=\"_pageButtonClasses()\"\n [disabled]=\"_isPreviousButtonDisabled()\"\n [attr.aria-label]=\"_intl.previousPageAriaLabel\"\n (click)=\"stepPreviousPage()\"\n >\n <ids-icon fontIcon=\"chevron-left\" [size]=\"size()\" />\n @if (showPrevNextLabel() && compactLayout()) {\n <span class=\"ids-paginator__page-button-arrow__label\">{{ _intl.previousPageLabel }}</span>\n }\n </button>\n\n @if (showPageButtons() && !compactLayout()) {\n <ul class=\"ids-paginator__page-button-container\">\n @for (pageButtonLabel of _pageButtonLabels(); track pageButtonLabel) {\n <li>\n @if (pageButtonLabel === \"tl\" || pageButtonLabel === \"tr\") {\n <button type=\"button\" disabled class=\"ids-paginator__page-button-truncation\" [class]=\"_pageButtonClasses()\">\n <ids-icon fontIcon=\"more-horizontal\" [size]=\"size()\" />\n </button>\n } @else {\n <button\n #pageButtonElement\n type=\"button\"\n class=\"ids-paginator__page-button\"\n [id]=\"_pageButtonIdPrefix() + pageButtonLabel\"\n [disabled]=\"disabled()\"\n [class]=\"_pageButtonClasses()\"\n [class.active]=\"+pageButtonLabel === _pageIndex() + 1\"\n [attr.aria-label]=\"_intl.getPageAriaLabel(pageButtonLabel)\"\n [attr.aria-current]=\"+pageButtonLabel === _pageIndex() + 1 ? 'page' : null\"\n (click)=\"stepPage(+pageButtonLabel - 1)\"\n >\n <span>{{ pageButtonLabel }}</span>\n </button>\n }\n </li>\n }\n </ul>\n }\n\n <button\n type=\"button\"\n class=\"ids-paginator__page-button-arrow next\"\n [class]=\"_pageButtonClasses()\"\n [disabled]=\"_isNextButtonDisabled()\"\n [attr.aria-label]=\"_intl.nextPageAriaLabel\"\n (click)=\"stepNextPage()\"\n >\n @if (showPrevNextLabel() && compactLayout()) {\n <span class=\"ids-paginator__page-button-arrow__label\">{{ _intl.nextPageLabel }}</span>\n }\n <ids-icon fontIcon=\"chevron-right\" [size]=\"size()\" />\n </button>\n\n @if (showFirstLastButton()) {\n <button\n type=\"button\"\n class=\"ids-paginator__page-button-arrow last\"\n [class]=\"_pageButtonClasses()\"\n [disabled]=\"_isNextButtonDisabled()\"\n [attr.aria-label]=\"_intl.lastPageAriaLabel\"\n (click)=\"stepLastPage()\"\n >\n <ids-icon fontIcon=\"chevron-double-right\" [size]=\"size()\" />\n </button>\n }\n\n <span class=\"ids-paginator__help-text\" [class.sr-only]=\"!showPageInfo()\">{{\n _intl.getRangeLabel(_pageIndex(), _safePageSizeData().safePageSize, length())\n }}</span>\n</nav>\n", dependencies: [{ kind: "component", type: IdsIconComponent, selector: "ids-icon", inputs: ["size", "sizeCollection", "variant", "fontIcon", "svgIcon", "aria-hidden"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
306
+ }
307
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: IdsPaginatorComponent, decorators: [{
308
+ type: Component,
309
+ args: [{ selector: 'ids-paginator', imports: [IdsIconComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
310
+ '(keydown)': '_handleKeyDown($event)',
311
+ }, template: "<nav class=\"ids-paginator__navigation-container\">\n @if (showFirstLastButton()) {\n <button\n type=\"button\"\n class=\"ids-paginator__page-button-arrow first\"\n [class]=\"_pageButtonClasses()\"\n [disabled]=\"_isPreviousButtonDisabled()\"\n [attr.aria-label]=\"_intl.firstPageAriaLabel\"\n (click)=\"stepFirstPage()\"\n >\n <ids-icon fontIcon=\"chevron-double-left\" [size]=\"size()\" />\n </button>\n }\n\n <button\n type=\"button\"\n class=\"ids-paginator__page-button-arrow previous\"\n [class]=\"_pageButtonClasses()\"\n [disabled]=\"_isPreviousButtonDisabled()\"\n [attr.aria-label]=\"_intl.previousPageAriaLabel\"\n (click)=\"stepPreviousPage()\"\n >\n <ids-icon fontIcon=\"chevron-left\" [size]=\"size()\" />\n @if (showPrevNextLabel() && compactLayout()) {\n <span class=\"ids-paginator__page-button-arrow__label\">{{ _intl.previousPageLabel }}</span>\n }\n </button>\n\n @if (showPageButtons() && !compactLayout()) {\n <ul class=\"ids-paginator__page-button-container\">\n @for (pageButtonLabel of _pageButtonLabels(); track pageButtonLabel) {\n <li>\n @if (pageButtonLabel === \"tl\" || pageButtonLabel === \"tr\") {\n <button type=\"button\" disabled class=\"ids-paginator__page-button-truncation\" [class]=\"_pageButtonClasses()\">\n <ids-icon fontIcon=\"more-horizontal\" [size]=\"size()\" />\n </button>\n } @else {\n <button\n #pageButtonElement\n type=\"button\"\n class=\"ids-paginator__page-button\"\n [id]=\"_pageButtonIdPrefix() + pageButtonLabel\"\n [disabled]=\"disabled()\"\n [class]=\"_pageButtonClasses()\"\n [class.active]=\"+pageButtonLabel === _pageIndex() + 1\"\n [attr.aria-label]=\"_intl.getPageAriaLabel(pageButtonLabel)\"\n [attr.aria-current]=\"+pageButtonLabel === _pageIndex() + 1 ? 'page' : null\"\n (click)=\"stepPage(+pageButtonLabel - 1)\"\n >\n <span>{{ pageButtonLabel }}</span>\n </button>\n }\n </li>\n }\n </ul>\n }\n\n <button\n type=\"button\"\n class=\"ids-paginator__page-button-arrow next\"\n [class]=\"_pageButtonClasses()\"\n [disabled]=\"_isNextButtonDisabled()\"\n [attr.aria-label]=\"_intl.nextPageAriaLabel\"\n (click)=\"stepNextPage()\"\n >\n @if (showPrevNextLabel() && compactLayout()) {\n <span class=\"ids-paginator__page-button-arrow__label\">{{ _intl.nextPageLabel }}</span>\n }\n <ids-icon fontIcon=\"chevron-right\" [size]=\"size()\" />\n </button>\n\n @if (showFirstLastButton()) {\n <button\n type=\"button\"\n class=\"ids-paginator__page-button-arrow last\"\n [class]=\"_pageButtonClasses()\"\n [disabled]=\"_isNextButtonDisabled()\"\n [attr.aria-label]=\"_intl.lastPageAriaLabel\"\n (click)=\"stepLastPage()\"\n >\n <ids-icon fontIcon=\"chevron-double-right\" [size]=\"size()\" />\n </button>\n }\n\n <span class=\"ids-paginator__help-text\" [class.sr-only]=\"!showPageInfo()\">{{\n _intl.getRangeLabel(_pageIndex(), _safePageSizeData().safePageSize, length())\n }}</span>\n</nav>\n" }]
312
+ }], ctorParameters: () => [] });
313
+
314
+ /**
315
+ * Generated bundle index. Do not edit.
316
+ */
317
+
318
+ export { DEFAULT_PAGE_SIZE, IDS_PAGINATOR_DEFAULT_CONFIG, IDS_PAGINATOR_DEFAULT_CONFIG_FACTORY, IdsPaginatorComponent, IdsPaginatorPageButtonAppearance, IdsPaginatorPageChangeEvent, IdsPaginatorVariant, MAX_DISPLAYED_ITEM_COUNT };
319
+ //# sourceMappingURL=i-cell-ids-angular-paginator.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i-cell-ids-angular-paginator.mjs","sources":["../../../projects/widgets/paginator/types/paginator-appearance.type.ts","../../../projects/widgets/paginator/types/paginator-events.class.ts","../../../projects/widgets/paginator/types/paginator-variant.type.ts","../../../projects/widgets/paginator/paginator-defaults.ts","../../../projects/widgets/paginator/paginator-intl.ts","../../../projects/widgets/paginator/paginator.component.ts","../../../projects/widgets/paginator/paginator.component.html","../../../projects/widgets/paginator/i-cell-ids-angular-paginator.ts"],"sourcesContent":["export const IdsPaginatorPageButtonAppearance = {\n PLAIN: 'plain',\n} as const;\n\nexport type IdsPaginatorPageButtonAppearanceType = (typeof IdsPaginatorPageButtonAppearance)[keyof typeof IdsPaginatorPageButtonAppearance];\n","export class IdsPaginatorPageChangeEvent {\n public pageIndex!: number;\n public previousPageIndex?: number;\n public pageSize!: number;\n public length!: number;\n}\n","export const IdsPaginatorVariant = {\n PRIMARY: 'primary',\n SECONDARY: 'secondary',\n SURFACE: 'surface',\n LIGHT: 'light',\n} as const;\n\nexport type IdsPaginatorVariantType = (typeof IdsPaginatorVariant)[keyof typeof IdsPaginatorVariant];\n","/* eslint-disable no-magic-numbers */\nimport { IdsPaginatorPageButtonAppearance, IdsPaginatorPageButtonAppearanceType } from './types/paginator-appearance.type';\nimport { IdsPaginatorVariant, IdsPaginatorVariantType } from './types/paginator-variant.type';\n\nimport { InjectionToken } from '@angular/core';\nimport { IdsSizeType, IdsSize } from '@i-cell/ids-angular/core';\n\nexport const DEFAULT_PAGE_SIZE = 10;\nexport const MAX_DISPLAYED_ITEM_COUNT = 7;\n\nexport interface IdsPaginatorDefaultConfig {\n pageSize?: number\n pageSizeOptions?: number[]\n showFirstLastButton?: boolean\n showPrevNextLabel?: boolean\n showPageInfo?: boolean\n showPageButtons?: boolean\n showAllPages?: boolean\n maxDisplayedItemCount?: number\n size?: IdsSizeType\n variant?: IdsPaginatorVariantType\n pageButtonAppearance?: IdsPaginatorPageButtonAppearanceType\n debounceTime: number\n}\n\nexport const IDS_PAGINATOR_DEFAULT_CONFIG = new InjectionToken<IdsPaginatorDefaultConfig>(\n 'IDS_PAGINATOR_DEFAULT_CONFIG',\n {\n providedIn: 'root',\n factory: IDS_PAGINATOR_DEFAULT_CONFIG_FACTORY,\n },\n);\n\nexport function IDS_PAGINATOR_DEFAULT_CONFIG_FACTORY(): Required<IdsPaginatorDefaultConfig> {\n return {\n pageSize: DEFAULT_PAGE_SIZE,\n pageSizeOptions: [\n 10,\n 20,\n 50,\n 100,\n ],\n showFirstLastButton: true,\n showPrevNextLabel: false,\n showPageInfo: true,\n showPageButtons: true,\n showAllPages: false,\n maxDisplayedItemCount: MAX_DISPLAYED_ITEM_COUNT,\n size: IdsSize.COMPACT,\n variant: IdsPaginatorVariant.SURFACE,\n pageButtonAppearance: IdsPaginatorPageButtonAppearance.PLAIN,\n debounceTime: 300,\n };\n}\n","import { Injectable, Optional, SkipSelf } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class IdsPaginatorIntl {\n public readonly changes: Subject<void> = new Subject<void>();\n\n public nextPageLabel = 'Next';\n public previousPageLabel = 'Previous';\n public nextPageAriaLabel = 'Go to next page';\n public previousPageAriaLabel = 'Go to previous page';\n public firstPageAriaLabel = 'Go to first page';\n public lastPageAriaLabel = 'Go to last page';\n\n public getPageAriaLabel = (page: string): string => `Go to page ${page}`;\n\n public getRangeLabel = (page: number, pageSize: number, length: number): string => {\n if (length === 0 || pageSize === 0) {\n return 'Page 0 of 0';\n }\n\n const maxPageCount = Math.ceil(length / pageSize);\n\n return `Page ${page + 1} of ${maxPageCount}`;\n };\n}\n\n/** @docs-private */\nexport function IDS_PAGINATOR_INTL_PROVIDER_FACTORY(parentIntl?: IdsPaginatorIntl): IdsPaginatorIntl {\n return parentIntl || new IdsPaginatorIntl();\n}\n\n/** @docs-private */\nexport const IDS_PAGINATOR_INTL_PROVIDER = {\n // If there is already an IdsPaginatorIntl available, use that. Otherwise, provide a new one.\n provide: IdsPaginatorIntl,\n deps: [\n [\n new Optional(),\n new SkipSelf(),\n IdsPaginatorIntl,\n ],\n ],\n useFactory: IDS_PAGINATOR_INTL_PROVIDER_FACTORY,\n};\n","import { DEFAULT_PAGE_SIZE, IDS_PAGINATOR_DEFAULT_CONFIG, IDS_PAGINATOR_DEFAULT_CONFIG_FACTORY, IdsPaginatorDefaultConfig } from './paginator-defaults';\nimport { IdsPaginatorIntl } from './paginator-intl';\nimport { IdsPaginatorPageButtonAppearanceType } from './types/paginator-appearance.type';\nimport { IdsPaginatorPageChangeEvent } from './types/paginator-events.class';\nimport { IdsPaginatorVariantType } from './types/paginator-variant.type';\n\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, effect, ElementRef, inject, input, isDevMode, model, output, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { createClassList, isNumberEven, IdsSizeType, coerceNumberAttribute, ComponentBaseWithDefaults } from '@i-cell/ids-angular/core';\nimport { IdsIconComponent } from '@i-cell/ids-angular/icon';\nimport { debounceTime, Subject } from 'rxjs';\n\nconst defaultConfig = IDS_PAGINATOR_DEFAULT_CONFIG_FACTORY();\n\n@Component({\n selector: 'ids-paginator',\n imports: [IdsIconComponent],\n templateUrl: './paginator.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(keydown)': '_handleKeyDown($event)',\n },\n})\nexport class IdsPaginatorComponent extends ComponentBaseWithDefaults<IdsPaginatorDefaultConfig> {\n protected override get _hostName(): string {\n return 'paginator';\n }\n\n private readonly _changeDetectorRef = inject(ChangeDetectorRef);\n private readonly _hostElementRef = inject(ElementRef);\n protected readonly _defaultConfig = this._getDefaultConfig(defaultConfig, IDS_PAGINATOR_DEFAULT_CONFIG);\n\n private _pageEventDebouncer = new Subject<IdsPaginatorPageChangeEvent>();\n\n protected readonly _intl = inject(IdsPaginatorIntl);\n\n public pageSize = input<number, unknown>(this._defaultConfig.pageSize, { transform: coerceNumberAttribute });\n public pageSizeOptions = input<number[]>(this._defaultConfig.pageSizeOptions);\n public showFirstLastButton = input<boolean>(this._defaultConfig.showFirstLastButton);\n public showPrevNextLabel = input<boolean>(this._defaultConfig.showPrevNextLabel);\n public showPageInfo = input<boolean>(this._defaultConfig.showPageInfo);\n public showPageButtons = input<boolean>(this._defaultConfig.showPageButtons);\n public showAllPages = input<boolean>(this._defaultConfig.showAllPages);\n public maxDisplayedItemCount = input<number>(this._defaultConfig.maxDisplayedItemCount);\n public size = input<IdsSizeType>(this._defaultConfig.size);\n public variant = input<IdsPaginatorVariantType>(this._defaultConfig.variant);\n public pageButtonAppearance = input<IdsPaginatorPageButtonAppearanceType>(this._defaultConfig.pageButtonAppearance);\n /** The total number of items that are being paginated. */\n public length = input.required<number, number>({ transform: coerceNumberAttribute });\n public disabled = input<boolean>(false);\n public compactLayout = input<boolean>(false);\n\n protected _hostClasses = computed(() => this._getHostClasses([\n this.size(),\n this.variant(),\n this.compactLayout() ? 'compact-layout' : null,\n ]));\n\n protected _pageButtonClasses = computed(() => createClassList('ids-paginator__page-button', [this.pageButtonAppearance()]));\n\n protected _safePageSizeData = computed(() => this._getSafePageSizeData(this.pageSizeOptions(), this.pageSize()));\n protected _pageButtonIdPrefix = computed(() => `${this.id()}__page-button-`);\n\n /**\n * The index (0 based!) of the currently selected page.\n *\n * Usage note (!):\n * In case paging initiates an async process to update the data and an error occurs the pageIndex needs to be reset to the previous value from the outside.\n * If `pageIndex` is only 1-way bound (input) the model signal's value won't be updated, it needs 2-way binding!\n * Possible cause: https://github.com/angular/angular/issues/57124\n */\n public pageIndex = model(0);\n\n private _pageIndexValidation = effect(() => {\n const pageIndex = this._pageIndex();\n const numberOfPages = this._numberOfPages();\n if (pageIndex > 0 && numberOfPages < (pageIndex + 1)) {\n this.stepPage(0);\n }\n });\n\n protected _pageIndex = computed(() => Math.max(coerceNumberAttribute(this.pageIndex()) || 0, 0));\n\n private _numberOfPages = computed(() => {\n if (!this.pageSize()) {\n return 0;\n }\n return Math.ceil(this.length() / this.pageSize());\n });\n\n private _hasPreviousPage = computed(() =>\n this._pageIndex() >= 1 && this.pageSize() !== 0,\n );\n\n private _hasNextPage = computed(() => {\n const maxPageIndex = this._numberOfPages() - 1;\n return this._pageIndex() < maxPageIndex && this.pageSize() !== 0;\n });\n\n protected _isPreviousButtonDisabled = computed(() => this.disabled() || !this._hasPreviousPage());\n protected _isNextButtonDisabled = computed(() => this.disabled() || !this._hasNextPage());\n\n // eslint-disable-next-line arrow-body-style\n protected _pageButtonLabels = computed<string[]>(() => {\n return this.compactLayout()\n ? []\n : this._getPageButtonLabels(\n this._pageIndex(), this._numberOfPages(), this.showAllPages(), this.maxDisplayedItemCount(), this.showPageButtons(),\n );\n });\n\n public pageChanged = output<IdsPaginatorPageChangeEvent>();\n\n private _handleKeyDown(event: KeyboardEvent): void {\n event.stopPropagation();\n // eslint-disable-next-line @stylistic/js/array-bracket-newline, @stylistic/js/array-element-newline\n const navigationKeys = ['ArrowLeft', 'ArrowRight', 'PageDown', 'PageUp', 'Home', 'End'];\n\n switch (event.key) {\n case 'ArrowLeft':\n case 'PageDown':\n event.preventDefault();\n this.stepPreviousPage();\n break;\n case 'ArrowRight':\n case 'PageUp':\n event.preventDefault();\n this.stepNextPage();\n break;\n case 'Home':\n event.preventDefault();\n this.stepFirstPage();\n break;\n case 'End':\n event.preventDefault();\n this.stepLastPage();\n break;\n default:\n break;\n }\n\n if (event.key !== 'Tab' && navigationKeys.includes(event.key)) {\n const pageButtonId = `${this._pageButtonIdPrefix()}${this._pageIndex() + 1}`; // after navigation pageIndex is new value now\n const button = this._hostElementRef.nativeElement.querySelector(`button#${pageButtonId}`);\n button?.focus();\n }\n }\n\n constructor() {\n super();\n\n this._intl.changes.pipe(\n takeUntilDestroyed(this._destroyRef),\n ).subscribe(() => this._changeDetectorRef.markForCheck());\n\n this._pageEventDebouncer.pipe(\n debounceTime(this._defaultConfig.debounceTime),\n takeUntilDestroyed(this._destroyRef),\n ).subscribe((pageEvent) => {\n this.pageChanged.emit(pageEvent);\n });\n }\n\n private _getSafePageSizeData(\n pageSizeOptions: number[],\n pageSize: number,\n ): { safePageSizeOptions: number[], safePageSize: number } {\n if (isDevMode() && (!pageSize || pageSize < 0)) {\n throw this._createHostError('invalid pageSize value. Must be a number and greater than 0');\n }\n\n const safePageSizeOptions = pageSizeOptions.slice();\n if (isDevMode() && !safePageSizeOptions.includes(pageSize)) {\n throw this._createHostError('invalid pageSize. pageSizeOptions not includes pageSize. Use an item from pageSizeOptions.');\n }\n safePageSizeOptions.sort((a, b) => a - b);\n const safePageSize: number = safePageSizeOptions.length !== 0 ? safePageSizeOptions[0] : DEFAULT_PAGE_SIZE;\n\n return {\n safePageSize,\n safePageSizeOptions,\n };\n }\n\n private _getPageButtonLabels(\n pageIndex: number, numberOfPages: number, showAllPages: boolean, maxDisplayedItemCount: number, enabled: boolean,\n ): string[] {\n const allPages = [...Array(numberOfPages).keys()].map((item) => (item + 1).toString());\n if (!enabled) {\n return [];\n }\n if (showAllPages || numberOfPages <= maxDisplayedItemCount) {\n return allPages;\n }\n\n return this._getTruncatedPageLabels(allPages, pageIndex, maxDisplayedItemCount);\n }\n\n private _getTruncatedPageLabels(\n allPages: string[],\n pageIndex: number,\n maxDisplayedItemCount: number,\n ): string[] {\n if (isDevMode() && isNumberEven(maxDisplayedItemCount)) {\n throw this._createHostError('maxDisplayedItemCount should be an odd number');\n }\n const center = Math.ceil(maxDisplayedItemCount / 2);\n const actualPage = pageIndex + 1;\n const lastPage = +(allPages.at(-1)!);\n const isTruncatedRight = actualPage <= center;\n const isTruncatedBoth = actualPage > center && actualPage <= lastPage - center;\n const isTruncatedLeft = actualPage > lastPage - center;\n\n if (isTruncatedRight) {\n const x = maxDisplayedItemCount - 2; // 2 = 1 last page, 1 truncation\n return [\n ...allPages.slice(0, x),\n 'tr',\n lastPage.toString(),\n ];\n }\n\n if (isTruncatedBoth) {\n // eslint-disable-next-line no-magic-numbers\n const x = (maxDisplayedItemCount - 5) / 2; // 5 = 1 fist page + 1 last page + 2 truncation + 1 actual page\n return [\n '1',\n 'tl',\n ...allPages.slice(pageIndex - x, pageIndex + x + 1),\n 'tr',\n lastPage.toString(),\n ];\n }\n\n if (isTruncatedLeft) {\n const x = maxDisplayedItemCount - 2; // 2 = 1 last page, 1 truncation\n return [\n '1',\n 'tl',\n ...allPages.slice(lastPage - x),\n ];\n }\n\n return [];\n }\n\n public stepNextPage(): void {\n if (!this._hasNextPage()) {\n return;\n }\n this.stepPage(this._pageIndex() + 1);\n }\n\n public stepPreviousPage(): void {\n if (!this._hasPreviousPage()) {\n return;\n }\n this.stepPage(this._pageIndex() - 1);\n }\n\n public stepFirstPage(): void {\n if (!this._hasPreviousPage()) {\n return;\n }\n this.stepPage(0);\n }\n\n public stepLastPage(): void {\n if (!this._hasNextPage()) {\n return;\n }\n this.stepPage(this._numberOfPages() - 1);\n }\n\n public stepPage(pageIndex: number): void {\n const previousPageIndex = this._pageIndex();\n this.pageIndex.set(pageIndex);\n this._debouncePageEvent(previousPageIndex, pageIndex);\n }\n\n private _debouncePageEvent(previousPageIndex: number, pageIndex: number): void {\n this._pageEventDebouncer.next({\n previousPageIndex,\n pageIndex,\n pageSize: this.pageSize(),\n length: this.length(),\n });\n }\n}\n","<nav class=\"ids-paginator__navigation-container\">\n @if (showFirstLastButton()) {\n <button\n type=\"button\"\n class=\"ids-paginator__page-button-arrow first\"\n [class]=\"_pageButtonClasses()\"\n [disabled]=\"_isPreviousButtonDisabled()\"\n [attr.aria-label]=\"_intl.firstPageAriaLabel\"\n (click)=\"stepFirstPage()\"\n >\n <ids-icon fontIcon=\"chevron-double-left\" [size]=\"size()\" />\n </button>\n }\n\n <button\n type=\"button\"\n class=\"ids-paginator__page-button-arrow previous\"\n [class]=\"_pageButtonClasses()\"\n [disabled]=\"_isPreviousButtonDisabled()\"\n [attr.aria-label]=\"_intl.previousPageAriaLabel\"\n (click)=\"stepPreviousPage()\"\n >\n <ids-icon fontIcon=\"chevron-left\" [size]=\"size()\" />\n @if (showPrevNextLabel() && compactLayout()) {\n <span class=\"ids-paginator__page-button-arrow__label\">{{ _intl.previousPageLabel }}</span>\n }\n </button>\n\n @if (showPageButtons() && !compactLayout()) {\n <ul class=\"ids-paginator__page-button-container\">\n @for (pageButtonLabel of _pageButtonLabels(); track pageButtonLabel) {\n <li>\n @if (pageButtonLabel === \"tl\" || pageButtonLabel === \"tr\") {\n <button type=\"button\" disabled class=\"ids-paginator__page-button-truncation\" [class]=\"_pageButtonClasses()\">\n <ids-icon fontIcon=\"more-horizontal\" [size]=\"size()\" />\n </button>\n } @else {\n <button\n #pageButtonElement\n type=\"button\"\n class=\"ids-paginator__page-button\"\n [id]=\"_pageButtonIdPrefix() + pageButtonLabel\"\n [disabled]=\"disabled()\"\n [class]=\"_pageButtonClasses()\"\n [class.active]=\"+pageButtonLabel === _pageIndex() + 1\"\n [attr.aria-label]=\"_intl.getPageAriaLabel(pageButtonLabel)\"\n [attr.aria-current]=\"+pageButtonLabel === _pageIndex() + 1 ? 'page' : null\"\n (click)=\"stepPage(+pageButtonLabel - 1)\"\n >\n <span>{{ pageButtonLabel }}</span>\n </button>\n }\n </li>\n }\n </ul>\n }\n\n <button\n type=\"button\"\n class=\"ids-paginator__page-button-arrow next\"\n [class]=\"_pageButtonClasses()\"\n [disabled]=\"_isNextButtonDisabled()\"\n [attr.aria-label]=\"_intl.nextPageAriaLabel\"\n (click)=\"stepNextPage()\"\n >\n @if (showPrevNextLabel() && compactLayout()) {\n <span class=\"ids-paginator__page-button-arrow__label\">{{ _intl.nextPageLabel }}</span>\n }\n <ids-icon fontIcon=\"chevron-right\" [size]=\"size()\" />\n </button>\n\n @if (showFirstLastButton()) {\n <button\n type=\"button\"\n class=\"ids-paginator__page-button-arrow last\"\n [class]=\"_pageButtonClasses()\"\n [disabled]=\"_isNextButtonDisabled()\"\n [attr.aria-label]=\"_intl.lastPageAriaLabel\"\n (click)=\"stepLastPage()\"\n >\n <ids-icon fontIcon=\"chevron-double-right\" [size]=\"size()\" />\n </button>\n }\n\n <span class=\"ids-paginator__help-text\" [class.sr-only]=\"!showPageInfo()\">{{\n _intl.getRangeLabel(_pageIndex(), _safePageSizeData().safePageSize, length())\n }}</span>\n</nav>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}