@fundamental-ngx/core 0.61.2-rc.9 → 0.61.3

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 (120) hide show
  1. package/fesm2022/fundamental-ngx-core-action-sheet.mjs +2 -3
  2. package/fesm2022/fundamental-ngx-core-action-sheet.mjs.map +1 -1
  3. package/fesm2022/fundamental-ngx-core-avatar-group.mjs +4 -6
  4. package/fesm2022/fundamental-ngx-core-avatar-group.mjs.map +1 -1
  5. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs +13 -11
  6. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  7. package/fesm2022/fundamental-ngx-core-busy-indicator.mjs +7 -5
  8. package/fesm2022/fundamental-ngx-core-busy-indicator.mjs.map +1 -1
  9. package/fesm2022/fundamental-ngx-core-calendar.mjs +31 -35
  10. package/fesm2022/fundamental-ngx-core-calendar.mjs.map +1 -1
  11. package/fesm2022/fundamental-ngx-core-carousel.mjs +2 -2
  12. package/fesm2022/fundamental-ngx-core-carousel.mjs.map +1 -1
  13. package/fesm2022/fundamental-ngx-core-combobox.mjs +3 -5
  14. package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
  15. package/fesm2022/fundamental-ngx-core-date-picker.mjs +2 -2
  16. package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
  17. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +2 -2
  18. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  19. package/fesm2022/fundamental-ngx-core-datetime.mjs +13 -7
  20. package/fesm2022/fundamental-ngx-core-datetime.mjs.map +1 -1
  21. package/fesm2022/fundamental-ngx-core-dialog.mjs +16 -11
  22. package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
  23. package/fesm2022/fundamental-ngx-core-dynamic-page.mjs +13 -13
  24. package/fesm2022/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  25. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +2 -2
  26. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  27. package/fesm2022/fundamental-ngx-core-form.mjs +1 -1
  28. package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
  29. package/fesm2022/fundamental-ngx-core-grid-list.mjs +4 -4
  30. package/fesm2022/fundamental-ngx-core-grid-list.mjs.map +1 -1
  31. package/fesm2022/fundamental-ngx-core-info-label.mjs +2 -2
  32. package/fesm2022/fundamental-ngx-core-info-label.mjs.map +1 -1
  33. package/fesm2022/fundamental-ngx-core-inline-help.mjs +65 -59
  34. package/fesm2022/fundamental-ngx-core-inline-help.mjs.map +1 -1
  35. package/fesm2022/fundamental-ngx-core-link.mjs +2 -2
  36. package/fesm2022/fundamental-ngx-core-link.mjs.map +1 -1
  37. package/fesm2022/fundamental-ngx-core-menu.mjs +5 -5
  38. package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
  39. package/fesm2022/fundamental-ngx-core-message-box.mjs +7 -7
  40. package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
  41. package/fesm2022/fundamental-ngx-core-message-strip.mjs +49 -44
  42. package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
  43. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +20 -25
  44. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  45. package/fesm2022/fundamental-ngx-core-multi-input.mjs +8 -6
  46. package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
  47. package/fesm2022/fundamental-ngx-core-nested-list.mjs +21 -22
  48. package/fesm2022/fundamental-ngx-core-nested-list.mjs.map +1 -1
  49. package/fesm2022/fundamental-ngx-core-notification.mjs +16 -13
  50. package/fesm2022/fundamental-ngx-core-notification.mjs.map +1 -1
  51. package/fesm2022/fundamental-ngx-core-object-identifier.mjs +2 -2
  52. package/fesm2022/fundamental-ngx-core-object-identifier.mjs.map +1 -1
  53. package/fesm2022/fundamental-ngx-core-object-number.mjs +2 -2
  54. package/fesm2022/fundamental-ngx-core-object-number.mjs.map +1 -1
  55. package/fesm2022/fundamental-ngx-core-object-status.mjs +2 -2
  56. package/fesm2022/fundamental-ngx-core-object-status.mjs.map +1 -1
  57. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs +2 -2
  58. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  59. package/fesm2022/fundamental-ngx-core-pagination.mjs +14 -11
  60. package/fesm2022/fundamental-ngx-core-pagination.mjs.map +1 -1
  61. package/fesm2022/fundamental-ngx-core-popover.mjs +9 -3
  62. package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
  63. package/fesm2022/fundamental-ngx-core-product-switch.mjs +2 -2
  64. package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
  65. package/fesm2022/fundamental-ngx-core-rating-indicator.mjs +7 -4
  66. package/fesm2022/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
  67. package/fesm2022/fundamental-ngx-core-segmented-button.mjs +11 -10
  68. package/fesm2022/fundamental-ngx-core-segmented-button.mjs.map +1 -1
  69. package/fesm2022/fundamental-ngx-core-select.mjs +6 -7
  70. package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
  71. package/fesm2022/fundamental-ngx-core-shellbar.mjs +6 -6
  72. package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
  73. package/fesm2022/fundamental-ngx-core-slider.mjs +6 -6
  74. package/fesm2022/fundamental-ngx-core-slider.mjs.map +1 -1
  75. package/fesm2022/fundamental-ngx-core-split-button.mjs +2 -2
  76. package/fesm2022/fundamental-ngx-core-split-button.mjs.map +1 -1
  77. package/fesm2022/fundamental-ngx-core-step-input.mjs +2 -2
  78. package/fesm2022/fundamental-ngx-core-step-input.mjs.map +1 -1
  79. package/fesm2022/fundamental-ngx-core-switch.mjs +2 -2
  80. package/fesm2022/fundamental-ngx-core-switch.mjs.map +1 -1
  81. package/fesm2022/fundamental-ngx-core-tabs.mjs +2 -2
  82. package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
  83. package/fesm2022/fundamental-ngx-core-text.mjs +2 -2
  84. package/fesm2022/fundamental-ngx-core-text.mjs.map +1 -1
  85. package/fesm2022/fundamental-ngx-core-time-picker.mjs +29 -4
  86. package/fesm2022/fundamental-ngx-core-time-picker.mjs.map +1 -1
  87. package/fesm2022/fundamental-ngx-core-time.mjs +4 -4
  88. package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
  89. package/fesm2022/fundamental-ngx-core-token.mjs +15 -12
  90. package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
  91. package/fesm2022/fundamental-ngx-core-toolbar.mjs +3 -5
  92. package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
  93. package/fesm2022/fundamental-ngx-core-tree.mjs +4 -4
  94. package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
  95. package/fesm2022/fundamental-ngx-core-upload-collection.mjs +4 -4
  96. package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  97. package/fesm2022/fundamental-ngx-core-user-menu.mjs +3 -5
  98. package/fesm2022/fundamental-ngx-core-user-menu.mjs.map +1 -1
  99. package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs +2 -2
  100. package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs.map +1 -1
  101. package/package.json +3 -3
  102. package/types/fundamental-ngx-core-breadcrumb.d.ts +5 -5
  103. package/types/fundamental-ngx-core-busy-indicator.d.ts +3 -3
  104. package/types/fundamental-ngx-core-combobox.d.ts +2 -4
  105. package/types/fundamental-ngx-core-datetime.d.ts +5 -1
  106. package/types/fundamental-ngx-core-dialog.d.ts +1 -1
  107. package/types/fundamental-ngx-core-dynamic-page.d.ts +2 -1
  108. package/types/fundamental-ngx-core-inline-help.d.ts +45 -24
  109. package/types/fundamental-ngx-core-menu.d.ts +0 -2
  110. package/types/fundamental-ngx-core-message-box.d.ts +1 -1
  111. package/types/fundamental-ngx-core-message-strip.d.ts +12 -3
  112. package/types/fundamental-ngx-core-multi-combobox.d.ts +1 -1
  113. package/types/fundamental-ngx-core-nested-list.d.ts +10 -10
  114. package/types/fundamental-ngx-core-notification.d.ts +7 -5
  115. package/types/fundamental-ngx-core-pagination.d.ts +4 -3
  116. package/types/fundamental-ngx-core-rating-indicator.d.ts +2 -3
  117. package/types/fundamental-ngx-core-segmented-button.d.ts +5 -3
  118. package/types/fundamental-ngx-core-slider.d.ts +1 -1
  119. package/types/fundamental-ngx-core-time-picker.d.ts +17 -1
  120. package/types/fundamental-ngx-core-token.d.ts +4 -4
@@ -1,10 +1,11 @@
1
1
  import * as i2 from '@angular/cdk/a11y';
2
2
  import { coerceNumberProperty, coerceArray } from '@angular/cdk/coercion';
3
3
  import * as i0 from '@angular/core';
4
- import { isDevMode, Injectable, EventEmitter, inject, effect, ElementRef, booleanAttribute, Output, Input, ViewChild, ViewChildren, ChangeDetectionStrategy, ViewEncapsulation, Component, NgModule } from '@angular/core';
4
+ import { isDevMode, Injectable, EventEmitter, inject, effect, ElementRef, booleanAttribute, Output, Input, ViewChild, ViewChildren, Inject, ChangeDetectionStrategy, ViewEncapsulation, Component, NgModule } from '@angular/core';
5
5
  import * as i4 from '@angular/forms';
6
6
  import { FormsModule } from '@angular/forms';
7
- import { Subscription } from 'rxjs';
7
+ import * as i5 from 'rxjs';
8
+ import { Subscription, firstValueFrom } from 'rxjs';
8
9
  import { range, RtlService, FocusKeyManagerListDirective, FocusKeyManagerItemDirective, OnlyDigitsDirective } from '@fundamental-ngx/cdk/utils';
9
10
  import { NgTemplateOutlet } from '@angular/common';
10
11
  import { ButtonComponent } from '@fundamental-ngx/core/button';
@@ -12,7 +13,7 @@ import * as i3 from '@fundamental-ngx/core/content-density';
12
13
  import { contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';
13
14
  import { FormLabelComponent, FormControlComponent } from '@fundamental-ngx/core/form';
14
15
  import { SelectComponent, OptionComponent } from '@fundamental-ngx/core/select';
15
- import { TranslationResolver, FD_LANGUAGE_SIGNAL, FdTranslatePipe } from '@fundamental-ngx/i18n';
16
+ import { TranslationResolver, FD_LANGUAGE, FdTranslatePipe } from '@fundamental-ngx/i18n';
16
17
 
17
18
  /** Constant representing the number of pages which appear before and after current page. */
18
19
  const CORNER_DISPLAY_PAGES = 1;
@@ -176,10 +177,11 @@ class PaginationComponent {
176
177
  return this.paginationService.moreElementValue;
177
178
  }
178
179
  /** @hidden */
179
- constructor(paginationService, _cdr, _liveAnnouncer, _contentDensityObserver) {
180
+ constructor(paginationService, _cdr, _liveAnnouncer, _language, _contentDensityObserver) {
180
181
  this.paginationService = paginationService;
181
182
  this._cdr = _cdr;
182
183
  this._liveAnnouncer = _liveAnnouncer;
184
+ this._language = _language;
183
185
  this._contentDensityObserver = _contentDensityObserver;
184
186
  /** Id for the pagination component. If omitted, a unique one is generated. */
185
187
  this.id = 'fd-pagination-' + paginationUniqueId++;
@@ -214,8 +216,6 @@ class PaginationComponent {
214
216
  /** @hidden */
215
217
  this._rtlService = inject(RtlService, { optional: true });
216
218
  /** @hidden */
217
- this._languageSignal = inject(FD_LANGUAGE_SIGNAL);
218
- /** @hidden */
219
219
  this._onChangePerPage = (event) => {
220
220
  this.itemsPerPage = event;
221
221
  this.itemsPerPageChange.emit(this.itemsPerPage);
@@ -346,13 +346,13 @@ class PaginationComponent {
346
346
  }
347
347
  /** @hidden */
348
348
  async _announcePage(page) {
349
- await this._liveAnnouncer.announce(this._translationResolver.resolve(this._languageSignal(), 'corePagination.currentPageAriaLabel', {
349
+ await this._liveAnnouncer.announce(this._translationResolver.resolve(await firstValueFrom(this._language), 'corePagination.currentPageAriaLabel', {
350
350
  pageNumber: page,
351
351
  totalCount: this.totalItems
352
352
  }));
353
353
  }
354
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PaginationComponent, deps: [{ token: PaginationService }, { token: i0.ChangeDetectorRef }, { token: i2.LiveAnnouncer }, { token: i3.ContentDensityObserver }], target: i0.ɵɵFactoryTarget.Component }); }
355
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: PaginationComponent, isStandalone: true, selector: "fd-pagination", inputs: { id: "id", mobile: ["mobile", "mobile", booleanAttribute], totalItems: "totalItems", currentPage: "currentPage", itemsPerPage: "itemsPerPage", itemsPerPageTemplate: "itemsPerPageTemplate", itemsPerPageOptions: "itemsPerPageOptions", displayTotalItems: "displayTotalItems", displayTextTemplate: "displayTextTemplate" }, outputs: { pageChangeStart: "pageChangeStart", itemsPerPageChange: "itemsPerPageChange" }, host: { properties: { "class.fd-pagination--mobile": "mobile", "class.fd-pagination--short": "_lastPage <= 9" }, classAttribute: "fd-pagination" }, providers: [PaginationService, contentDensityObserverProviders()], viewQueries: [{ propertyName: "_focusKeyManagerList", first: true, predicate: FocusKeyManagerListDirective, descendants: true }, { propertyName: "_pageInputElement", first: true, predicate: ["pageInputElement"], descendants: true, read: ElementRef }, { propertyName: "_currentPageElement", first: true, predicate: ["currentPageElement"], descendants: true, read: ElementRef }, { propertyName: "_focusKeyManagerItems", predicate: FocusKeyManagerItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (totalItems) {\n @if (itemsPerPageTemplate || itemsPerPageOptions.length) {\n <div class=\"fd-pagination__per-page\">\n <!-- note, that we're checking for the length of \"itemsPerPageOptions\", but using \"_displayedPageSizeOptions\" as \"pageOptions\" -->\n <!-- these 2 can be different, as \"_displayedPageSizeOptions\" may also include \"itemsPerPage\" if it's not included in options -->\n <ng-template\n [ngTemplateOutlet]=\"itemsPerPageTemplate || perPage\"\n [ngTemplateOutletContext]=\"{ onSelect: _onChangePerPage, pageOptions: _displayedPageSizeOptions }\"\n ></ng-template>\n </div>\n }\n @if (totalItems >= itemsPerPage) {\n <nav\n fdkFocusKeyManagerList\n orientation=\"horizontal\"\n [skipPredicate]=\"skipItemPredicate\"\n class=\"fd-pagination__nav\"\n [attr.aria-label]=\"('corePagination.ariaLabel' | fdTranslate)()\"\n [attr.aria-labelledby]=\"displayTotalItems ? _totalPagesElementId : null\"\n >\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-rewind\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"('corePagination.firstLabel' | fdTranslate)()\"\n [title]=\"('corePagination.firstLabel' | fdTranslate)()\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"goToFirstPage()\"\n (keyup.enter)=\"goToFirstPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToFirstPage()\"\n ></button>\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"('corePagination.previousLabel' | fdTranslate)()\"\n [title]=\"('corePagination.previousLabel' | fdTranslate)()\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"previousPage()\"\n (keyup.enter)=\"previousPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"previousPage()\"\n ></button>\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n @for (page of _pagesBeforeCurrent; track page) {\n @if (page !== _moreElementValue) {\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"('corePagination.pageLabel' | fdTranslate: { pageNumber: page })()\"\n [title]=\"('corePagination.pageLabel' | fdTranslate: { pageNumber: page })()\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n } @else {\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n }\n }\n <button\n #currentPageElement\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"('corePagination.pageLabel' | fdTranslate: { pageNumber: currentPage })()\"\n class=\"fd-pagination__link is-active\"\n [attr.aria-current]=\"true\"\n >\n {{ currentPage }}\n </button>\n <label fd-form-label class=\"fd-pagination__label\">\n {{ ('corePagination.labelBeforeInputMobile' | fdTranslate)() }}\n </label>\n <input\n #pageInputElement\n fdkFocusKeyManagerItem\n fd-form-control\n fdkOnlyDigits\n required\n size=\"1\"\n min=\"1\"\n type=\"number\"\n [max]=\"_lastPage\"\n [state]=\"currentPageModel.invalid ? 'error' : null\"\n class=\"fd-pagination__input\"\n #currentPageModel=\"ngModel\"\n [ngModel]=\"currentPage\"\n [ariaLabel]=\"\n (\n 'corePagination.inputAriaLabel'\n | fdTranslate: { pageNumber: currentPage, totalCount: _totalPages }\n )()\n \"\n (keydown.enter)=\"goToPage(currentPageModel.value)\"\n (keydown.space)=\"goToPage(currentPageModel.value)\"\n (blur)=\"_restoreInputValue(currentPageModel)\"\n />\n <label fd-form-label class=\"fd-pagination__label\">\n {{\n (\n 'corePagination.labelAfterInputMobile'\n | fdTranslate: { pageNumber: currentPage, totalCount: _totalPages }\n )()\n }}\n </label>\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n @for (page of _pagesAfterCurrent; track page) {\n @if (page !== _moreElementValue) {\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"('corePagination.pageLabel' | fdTranslate: { pageNumber: page })()\"\n [title]=\"('corePagination.pageLabel' | fdTranslate: { pageNumber: page })()\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n } @else {\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n }\n }\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-right-arrow\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"('corePagination.nextLabel' | fdTranslate)()\"\n [title]=\"('corePagination.nextLabel' | fdTranslate)()\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"nextPage()\"\n (keyup.enter)=\"nextPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"nextPage()\"\n ></button>\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-forward\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"('corePagination.lastLabel' | fdTranslate)()\"\n [title]=\"('corePagination.lastLabel' | fdTranslate)()\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"goToLastPage()\"\n (keyup.enter)=\"goToLastPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToLastPage()\"\n ></button>\n </nav>\n }\n @if (displayTotalItems) {\n <span class=\"fd-pagination__total\" [attr.id]=\"_totalPagesElementId\">\n <ng-template\n [ngTemplateOutlet]=\"displayTextTemplate || total\"\n [ngTemplateOutletContext]=\"{ showing: _currentShowing }\"\n ></ng-template>\n </span>\n }\n}\n<ng-template #more>\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n</ng-template>\n<ng-template #total let-showing=\"showing\">\n <span fd-form-label class=\"fd-pagination__total-label\">\n {{ ('corePagination.totalResultsLabel' | fdTranslate: _currentShowing)() }}\n </span>\n</ng-template>\n<ng-template #perPage let-pageOptions=\"pageOptions\">\n <label fd-form-label class=\"fd-pagination__per-page-label\">\n {{ ('corePagination.itemsPerPageLabel' | fdTranslate)() }}\n </label>\n <fd-select class=\"fd-pagination__per-page-select\" [value]=\"itemsPerPage\" (valueChange)=\"_onChangePerPage($event)\">\n @for (option of pageOptions; track option) {\n <li fd-option [value]=\"option\">{{ option }}</li>\n }\n </fd-select>\n</ng-template>\n", styles: [".fd-pagination{--fdPaginationMoreWidth:var(--fdPagination_Placeholder_Dots_Width);border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;height:2.75rem;justify-content:space-between;padding-block:0;padding-inline:1rem;width:100%}.fd-pagination:after,.fd-pagination:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-pagination__per-page{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.fd-pagination__per-page:after,.fd-pagination__per-page:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-pagination__nav{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:var(--fdPagination_Elements_Spacing);margin-inline:auto}.fd-pagination__nav:after,.fd-pagination__nav:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-pagination__more{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-pagination__more:after,.fd-pagination__more:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-pagination__more:before{content:\"...\";display:block;text-align:center;width:var(--fdPaginationMoreWidth)}.fd-pagination__more[class*=-compact],.fd-pagination__more[class*=-condensed],[class*=-compact] .fd-pagination__more:not([class*=-cozy]),[class*=-condensed] .fd-pagination__more:not([class*=-cozy]){--fdPaginationMoreWidth:var(--fdPagination_Placeholder_Dots_Width_Compact)}.fd-pagination .fd-pagination__input{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;min-width:2.5rem;text-align:center;width:auto}.fd-pagination .fd-pagination__input::-webkit-inner-spin-button,.fd-pagination .fd-pagination__input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin-block:0;margin-inline:0}.fd-pagination .fd-pagination__label,.fd-pagination .fd-pagination__per-page-label{-ms-flex-negative:0;flex-shrink:0;-ms-flex-item-align:center;align-self:center}.fd-pagination .fd-pagination__label{display:none}.fd-pagination .fd-pagination__total-label{margin-block:0;margin-inline:0}.fd-pagination .fd-pagination__link.is-focus,.fd-pagination .fd-pagination__link:focus{outline:none;z-index:5}.fd-pagination .fd-pagination__link.is-focus:after,.fd-pagination .fd-pagination__link:focus:after{border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);border-radius:var(--fdButton_Focus_Border_Radius);content:\"\";display:block;inset:var(--fdButton_Outline_Offset) var(--fdButton_Outline_Offset) var(--fdButton_Outline_Offset) var(--fdButton_Outline_Offset);position:absolute}.fd-pagination .fd-pagination__link.is-focus.fd-button--toggled:after,.fd-pagination .fd-pagination__link.is-focus.is-selected:after,.fd-pagination .fd-pagination__link:focus.fd-button--toggled:after,.fd-pagination .fd-pagination__link:focus.is-selected:after{border-color:var(--fdButton_Outline_Contrast)}.fd-pagination .fd-pagination__link.is-active{display:none}.fd-pagination .fd-pagination__button [class*=sap-icon][dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__button [class*=sap-icon]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fd-pagination .fd-pagination__button--mobile{display:none}.fd-pagination .fd-pagination__button.is-disabled,.fd-pagination .fd-pagination__button:disabled,.fd-pagination .fd-pagination__button[aria-disabled=true]{pointer-events:none}.fd-pagination--short .fd-pagination__link.is-active,.fd-pagination--short .fd-pagination__link:active{display:-webkit-box;display:-ms-flexbox;display:flex}.fd-pagination--short .fd-pagination__input{display:none}.fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav{margin-inline:auto 0}.fd-pagination--mobile .fd-pagination__link,.fd-pagination--mobile .fd-pagination__more,.fd-pagination--mobile .fd-pagination__per-page-label,.fd-pagination--mobile .fd-pagination__total{display:none}.fd-pagination--mobile .fd-pagination__button--mobile,.fd-pagination--mobile .fd-pagination__input,.fd-pagination--mobile .fd-pagination__label{display:-webkit-box;display:-ms-flexbox;display:flex}.fd-pagination--mobile .fd-pagination__link.is-active,.fd-pagination--mobile .fd-pagination__link:active{display:none}@media(width<=599px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-inline:auto 0}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:-webkit-box;display:-ms-flexbox;display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}@media(width>=600px)and (width<=1023px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-inline:auto 0}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:-webkit-box;display:-ms-flexbox;display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.fd-pagination__label .fd-form-label,.fd-pagination__total-label .fd-form-label{margin:0}\n/*! Bundled license information:\n\nfundamental-styles/dist/pagination.css:\n (*!\n * Fundamental Library Styles v0.40.1\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FocusKeyManagerListDirective, selector: "[fdkFocusKeyManagerList]", inputs: ["orientation", "skipPredicate"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["id"], exportAs: ["fd-button"] }, { kind: "directive", type: FocusKeyManagerItemDirective, selector: "[fdkFocusKeyManagerItem]", inputs: ["initialFocus", "_tabindex"] }, { kind: "component", type: FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "allowWrap", "inlineHelpLabel", "id"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i4.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FormControlComponent, selector: "input[fd-form-control], textarea[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: OnlyDigitsDirective, selector: "[fdkOnlyDigits]", inputs: ["decimal", "decimalSeparator"] }, { kind: "component", type: SelectComponent, selector: "fd-select", inputs: ["extendedBodyTemplate", "scrollStrategy", "textOverflow", "controlId", "state", "mobile", "stateMessage", "disabled", "required", "readonly", "placeholder", "value", "maxHeight", "glyph", "glyphFont", "closeOnOutsideClick", "fillControlMode", "controlTemplate", "appendTo", "unselectMissingOption", "typeaheadDebounceInterval", "ariaLabelledBy", "ariaLabel", "mobileConfig", "inline", "selectControlClass", "selectDropdownButtonClass", "advancedStateMessage", "tabOutStrategy", "compareWith"], outputs: ["isOpenChange", "valueChange"] }, { kind: "component", type: OptionComponent, selector: "[fd-option], fd-option", inputs: ["id", "value", "disabled"], outputs: ["selectionChange"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None, preserveWhitespaces: true }); }
354
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PaginationComponent, deps: [{ token: PaginationService }, { token: i0.ChangeDetectorRef }, { token: i2.LiveAnnouncer }, { token: FD_LANGUAGE }, { token: i3.ContentDensityObserver }], target: i0.ɵɵFactoryTarget.Component }); }
355
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: PaginationComponent, isStandalone: true, selector: "fd-pagination", inputs: { id: "id", mobile: ["mobile", "mobile", booleanAttribute], totalItems: "totalItems", currentPage: "currentPage", itemsPerPage: "itemsPerPage", itemsPerPageTemplate: "itemsPerPageTemplate", itemsPerPageOptions: "itemsPerPageOptions", displayTotalItems: "displayTotalItems", displayTextTemplate: "displayTextTemplate" }, outputs: { pageChangeStart: "pageChangeStart", itemsPerPageChange: "itemsPerPageChange" }, host: { properties: { "class.fd-pagination--mobile": "mobile", "class.fd-pagination--short": "_lastPage <= 9" }, classAttribute: "fd-pagination" }, providers: [PaginationService, contentDensityObserverProviders()], viewQueries: [{ propertyName: "_focusKeyManagerList", first: true, predicate: FocusKeyManagerListDirective, descendants: true }, { propertyName: "_pageInputElement", first: true, predicate: ["pageInputElement"], descendants: true, read: ElementRef }, { propertyName: "_currentPageElement", first: true, predicate: ["currentPageElement"], descendants: true, read: ElementRef }, { propertyName: "_focusKeyManagerItems", predicate: FocusKeyManagerItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (totalItems) {\n @if (itemsPerPageTemplate || itemsPerPageOptions.length) {\n <div class=\"fd-pagination__per-page\">\n <!-- note, that we're checking for the length of \"itemsPerPageOptions\", but using \"_displayedPageSizeOptions\" as \"pageOptions\" -->\n <!-- these 2 can be different, as \"_displayedPageSizeOptions\" may also include \"itemsPerPage\" if it's not included in options -->\n <ng-template\n [ngTemplateOutlet]=\"itemsPerPageTemplate || perPage\"\n [ngTemplateOutletContext]=\"{ onSelect: _onChangePerPage, pageOptions: _displayedPageSizeOptions }\"\n ></ng-template>\n </div>\n }\n @if (totalItems >= itemsPerPage) {\n <nav\n fdkFocusKeyManagerList\n orientation=\"horizontal\"\n [skipPredicate]=\"skipItemPredicate\"\n class=\"fd-pagination__nav\"\n [attr.aria-label]=\"'corePagination.ariaLabel' | fdTranslate\"\n [attr.aria-labelledby]=\"displayTotalItems ? _totalPagesElementId : null\"\n >\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-rewind\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"'corePagination.firstLabel' | fdTranslate\"\n [title]=\"'corePagination.firstLabel' | fdTranslate\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"goToFirstPage()\"\n (keyup.enter)=\"goToFirstPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToFirstPage()\"\n ></button>\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"'corePagination.previousLabel' | fdTranslate\"\n [title]=\"'corePagination.previousLabel' | fdTranslate\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"previousPage()\"\n (keyup.enter)=\"previousPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"previousPage()\"\n ></button>\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n @for (page of _pagesBeforeCurrent; track page) {\n @if (page !== _moreElementValue) {\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"'corePagination.pageLabel' | fdTranslate: { pageNumber: page }\"\n [title]=\"'corePagination.pageLabel' | fdTranslate: { pageNumber: page }\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n } @else {\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n }\n }\n <button\n #currentPageElement\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"'corePagination.pageLabel' | fdTranslate: { pageNumber: currentPage }\"\n class=\"fd-pagination__link is-active\"\n [attr.aria-current]=\"true\"\n >\n {{ currentPage }}\n </button>\n <label fd-form-label class=\"fd-pagination__label\">\n {{ 'corePagination.labelBeforeInputMobile' | fdTranslate }}\n </label>\n <input\n #pageInputElement\n fdkFocusKeyManagerItem\n fd-form-control\n fdkOnlyDigits\n required\n size=\"1\"\n min=\"1\"\n type=\"number\"\n [max]=\"_lastPage\"\n [state]=\"currentPageModel.invalid ? 'error' : null\"\n class=\"fd-pagination__input\"\n #currentPageModel=\"ngModel\"\n [ngModel]=\"currentPage\"\n [ariaLabel]=\"\n 'corePagination.inputAriaLabel' | fdTranslate: { pageNumber: currentPage, totalCount: _totalPages }\n \"\n (keydown.enter)=\"goToPage(currentPageModel.value)\"\n (keydown.space)=\"goToPage(currentPageModel.value)\"\n (blur)=\"_restoreInputValue(currentPageModel)\"\n />\n <label fd-form-label class=\"fd-pagination__label\">\n {{\n 'corePagination.labelAfterInputMobile'\n | fdTranslate: { pageNumber: currentPage, totalCount: _totalPages }\n }}\n </label>\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n @for (page of _pagesAfterCurrent; track page) {\n @if (page !== _moreElementValue) {\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"'corePagination.pageLabel' | fdTranslate: { pageNumber: page }\"\n [title]=\"'corePagination.pageLabel' | fdTranslate: { pageNumber: page }\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n } @else {\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n }\n }\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-right-arrow\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"'corePagination.nextLabel' | fdTranslate\"\n [title]=\"'corePagination.nextLabel' | fdTranslate\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"nextPage()\"\n (keyup.enter)=\"nextPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"nextPage()\"\n ></button>\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-forward\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"'corePagination.lastLabel' | fdTranslate\"\n [title]=\"'corePagination.lastLabel' | fdTranslate\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"goToLastPage()\"\n (keyup.enter)=\"goToLastPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToLastPage()\"\n ></button>\n </nav>\n }\n @if (displayTotalItems) {\n <span class=\"fd-pagination__total\" [attr.id]=\"_totalPagesElementId\">\n <ng-template\n [ngTemplateOutlet]=\"displayTextTemplate || total\"\n [ngTemplateOutletContext]=\"{ showing: _currentShowing }\"\n ></ng-template>\n </span>\n }\n}\n<ng-template #more>\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n</ng-template>\n<ng-template #total let-showing=\"showing\">\n <span fd-form-label class=\"fd-pagination__total-label\">\n {{ 'corePagination.totalResultsLabel' | fdTranslate: _currentShowing }}\n </span>\n</ng-template>\n<ng-template #perPage let-pageOptions=\"pageOptions\">\n <label fd-form-label class=\"fd-pagination__per-page-label\">\n {{ 'corePagination.itemsPerPageLabel' | fdTranslate }}\n </label>\n <fd-select class=\"fd-pagination__per-page-select\" [value]=\"itemsPerPage\" (valueChange)=\"_onChangePerPage($event)\">\n @for (option of pageOptions; track option) {\n <li fd-option [value]=\"option\">{{ option }}</li>\n }\n </fd-select>\n</ng-template>\n", styles: [".fd-pagination{--fdPaginationMoreWidth:var(--fdPagination_Placeholder_Dots_Width);border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;height:2.75rem;justify-content:space-between;padding-block:0;padding-inline:1rem;width:100%}.fd-pagination:after,.fd-pagination:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-pagination__per-page{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.fd-pagination__per-page:after,.fd-pagination__per-page:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-pagination__nav{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:var(--fdPagination_Elements_Spacing);margin-inline:auto}.fd-pagination__nav:after,.fd-pagination__nav:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-pagination__more{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-pagination__more:after,.fd-pagination__more:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-pagination__more:before{content:\"...\";display:block;text-align:center;width:var(--fdPaginationMoreWidth)}.fd-pagination__more[class*=-compact],.fd-pagination__more[class*=-condensed],[class*=-compact] .fd-pagination__more:not([class*=-cozy]),[class*=-condensed] .fd-pagination__more:not([class*=-cozy]){--fdPaginationMoreWidth:var(--fdPagination_Placeholder_Dots_Width_Compact)}.fd-pagination .fd-pagination__input{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;min-width:2.5rem;text-align:center;width:auto}.fd-pagination .fd-pagination__input::-webkit-inner-spin-button,.fd-pagination .fd-pagination__input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin-block:0;margin-inline:0}.fd-pagination .fd-pagination__label,.fd-pagination .fd-pagination__per-page-label{-ms-flex-negative:0;flex-shrink:0;-ms-flex-item-align:center;align-self:center}.fd-pagination .fd-pagination__label{display:none}.fd-pagination .fd-pagination__total-label{margin-block:0;margin-inline:0}.fd-pagination .fd-pagination__link.is-focus,.fd-pagination .fd-pagination__link:focus{outline:none;z-index:5}.fd-pagination .fd-pagination__link.is-focus:after,.fd-pagination .fd-pagination__link:focus:after{border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);border-radius:var(--fdButton_Focus_Border_Radius);content:\"\";display:block;inset:var(--fdButton_Outline_Offset) var(--fdButton_Outline_Offset) var(--fdButton_Outline_Offset) var(--fdButton_Outline_Offset);position:absolute}.fd-pagination .fd-pagination__link.is-focus.fd-button--toggled:after,.fd-pagination .fd-pagination__link.is-focus.is-selected:after,.fd-pagination .fd-pagination__link:focus.fd-button--toggled:after,.fd-pagination .fd-pagination__link:focus.is-selected:after{border-color:var(--fdButton_Outline_Contrast)}.fd-pagination .fd-pagination__link.is-active{display:none}.fd-pagination .fd-pagination__button [class*=sap-icon][dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__button [class*=sap-icon]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fd-pagination .fd-pagination__button--mobile{display:none}.fd-pagination .fd-pagination__button.is-disabled,.fd-pagination .fd-pagination__button:disabled,.fd-pagination .fd-pagination__button[aria-disabled=true]{pointer-events:none}.fd-pagination--short .fd-pagination__link.is-active,.fd-pagination--short .fd-pagination__link:active{display:-webkit-box;display:-ms-flexbox;display:flex}.fd-pagination--short .fd-pagination__input{display:none}.fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav{margin-inline:auto 0}.fd-pagination--mobile .fd-pagination__link,.fd-pagination--mobile .fd-pagination__more,.fd-pagination--mobile .fd-pagination__per-page-label,.fd-pagination--mobile .fd-pagination__total{display:none}.fd-pagination--mobile .fd-pagination__button--mobile,.fd-pagination--mobile .fd-pagination__input,.fd-pagination--mobile .fd-pagination__label{display:-webkit-box;display:-ms-flexbox;display:flex}.fd-pagination--mobile .fd-pagination__link.is-active,.fd-pagination--mobile .fd-pagination__link:active{display:none}@media(width<=599px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-inline:auto 0}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:-webkit-box;display:-ms-flexbox;display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}@media(width>=600px)and (width<=1023px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-inline:auto 0}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:-webkit-box;display:-ms-flexbox;display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.fd-pagination__label .fd-form-label,.fd-pagination__total-label .fd-form-label{margin:0}\n/*! Bundled license information:\n\nfundamental-styles/dist/pagination.css:\n (*!\n * Fundamental Library Styles v0.40.1\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FocusKeyManagerListDirective, selector: "[fdkFocusKeyManagerList]", inputs: ["orientation", "skipPredicate"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["id"], exportAs: ["fd-button"] }, { kind: "directive", type: FocusKeyManagerItemDirective, selector: "[fdkFocusKeyManagerItem]", inputs: ["initialFocus", "_tabindex"] }, { kind: "component", type: FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "allowWrap", "inlineHelpLabel", "id"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i4.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FormControlComponent, selector: "input[fd-form-control], textarea[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: OnlyDigitsDirective, selector: "[fdkOnlyDigits]", inputs: ["decimal", "decimalSeparator"] }, { kind: "component", type: SelectComponent, selector: "fd-select", inputs: ["extendedBodyTemplate", "scrollStrategy", "textOverflow", "controlId", "state", "mobile", "stateMessage", "disabled", "required", "readonly", "placeholder", "value", "maxHeight", "glyph", "glyphFont", "closeOnOutsideClick", "fillControlMode", "controlTemplate", "appendTo", "unselectMissingOption", "typeaheadDebounceInterval", "ariaLabelledBy", "ariaLabel", "mobileConfig", "inline", "selectControlClass", "selectDropdownButtonClass", "advancedStateMessage", "tabOutStrategy", "compareWith"], outputs: ["isOpenChange", "valueChange"] }, { kind: "component", type: OptionComponent, selector: "[fd-option], fd-option", inputs: ["id", "value", "disabled"], outputs: ["selectionChange"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None, preserveWhitespaces: true }); }
356
356
  }
357
357
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PaginationComponent, decorators: [{
358
358
  type: Component,
@@ -372,8 +372,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImpor
372
372
  SelectComponent,
373
373
  OptionComponent,
374
374
  FdTranslatePipe
375
- ], template: "@if (totalItems) {\n @if (itemsPerPageTemplate || itemsPerPageOptions.length) {\n <div class=\"fd-pagination__per-page\">\n <!-- note, that we're checking for the length of \"itemsPerPageOptions\", but using \"_displayedPageSizeOptions\" as \"pageOptions\" -->\n <!-- these 2 can be different, as \"_displayedPageSizeOptions\" may also include \"itemsPerPage\" if it's not included in options -->\n <ng-template\n [ngTemplateOutlet]=\"itemsPerPageTemplate || perPage\"\n [ngTemplateOutletContext]=\"{ onSelect: _onChangePerPage, pageOptions: _displayedPageSizeOptions }\"\n ></ng-template>\n </div>\n }\n @if (totalItems >= itemsPerPage) {\n <nav\n fdkFocusKeyManagerList\n orientation=\"horizontal\"\n [skipPredicate]=\"skipItemPredicate\"\n class=\"fd-pagination__nav\"\n [attr.aria-label]=\"('corePagination.ariaLabel' | fdTranslate)()\"\n [attr.aria-labelledby]=\"displayTotalItems ? _totalPagesElementId : null\"\n >\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-rewind\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"('corePagination.firstLabel' | fdTranslate)()\"\n [title]=\"('corePagination.firstLabel' | fdTranslate)()\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"goToFirstPage()\"\n (keyup.enter)=\"goToFirstPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToFirstPage()\"\n ></button>\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"('corePagination.previousLabel' | fdTranslate)()\"\n [title]=\"('corePagination.previousLabel' | fdTranslate)()\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"previousPage()\"\n (keyup.enter)=\"previousPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"previousPage()\"\n ></button>\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n @for (page of _pagesBeforeCurrent; track page) {\n @if (page !== _moreElementValue) {\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"('corePagination.pageLabel' | fdTranslate: { pageNumber: page })()\"\n [title]=\"('corePagination.pageLabel' | fdTranslate: { pageNumber: page })()\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n } @else {\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n }\n }\n <button\n #currentPageElement\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"('corePagination.pageLabel' | fdTranslate: { pageNumber: currentPage })()\"\n class=\"fd-pagination__link is-active\"\n [attr.aria-current]=\"true\"\n >\n {{ currentPage }}\n </button>\n <label fd-form-label class=\"fd-pagination__label\">\n {{ ('corePagination.labelBeforeInputMobile' | fdTranslate)() }}\n </label>\n <input\n #pageInputElement\n fdkFocusKeyManagerItem\n fd-form-control\n fdkOnlyDigits\n required\n size=\"1\"\n min=\"1\"\n type=\"number\"\n [max]=\"_lastPage\"\n [state]=\"currentPageModel.invalid ? 'error' : null\"\n class=\"fd-pagination__input\"\n #currentPageModel=\"ngModel\"\n [ngModel]=\"currentPage\"\n [ariaLabel]=\"\n (\n 'corePagination.inputAriaLabel'\n | fdTranslate: { pageNumber: currentPage, totalCount: _totalPages }\n )()\n \"\n (keydown.enter)=\"goToPage(currentPageModel.value)\"\n (keydown.space)=\"goToPage(currentPageModel.value)\"\n (blur)=\"_restoreInputValue(currentPageModel)\"\n />\n <label fd-form-label class=\"fd-pagination__label\">\n {{\n (\n 'corePagination.labelAfterInputMobile'\n | fdTranslate: { pageNumber: currentPage, totalCount: _totalPages }\n )()\n }}\n </label>\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n @for (page of _pagesAfterCurrent; track page) {\n @if (page !== _moreElementValue) {\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"('corePagination.pageLabel' | fdTranslate: { pageNumber: page })()\"\n [title]=\"('corePagination.pageLabel' | fdTranslate: { pageNumber: page })()\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n } @else {\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n }\n }\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-right-arrow\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"('corePagination.nextLabel' | fdTranslate)()\"\n [title]=\"('corePagination.nextLabel' | fdTranslate)()\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"nextPage()\"\n (keyup.enter)=\"nextPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"nextPage()\"\n ></button>\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-forward\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"('corePagination.lastLabel' | fdTranslate)()\"\n [title]=\"('corePagination.lastLabel' | fdTranslate)()\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"goToLastPage()\"\n (keyup.enter)=\"goToLastPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToLastPage()\"\n ></button>\n </nav>\n }\n @if (displayTotalItems) {\n <span class=\"fd-pagination__total\" [attr.id]=\"_totalPagesElementId\">\n <ng-template\n [ngTemplateOutlet]=\"displayTextTemplate || total\"\n [ngTemplateOutletContext]=\"{ showing: _currentShowing }\"\n ></ng-template>\n </span>\n }\n}\n<ng-template #more>\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n</ng-template>\n<ng-template #total let-showing=\"showing\">\n <span fd-form-label class=\"fd-pagination__total-label\">\n {{ ('corePagination.totalResultsLabel' | fdTranslate: _currentShowing)() }}\n </span>\n</ng-template>\n<ng-template #perPage let-pageOptions=\"pageOptions\">\n <label fd-form-label class=\"fd-pagination__per-page-label\">\n {{ ('corePagination.itemsPerPageLabel' | fdTranslate)() }}\n </label>\n <fd-select class=\"fd-pagination__per-page-select\" [value]=\"itemsPerPage\" (valueChange)=\"_onChangePerPage($event)\">\n @for (option of pageOptions; track option) {\n <li fd-option [value]=\"option\">{{ option }}</li>\n }\n </fd-select>\n</ng-template>\n", styles: [".fd-pagination{--fdPaginationMoreWidth:var(--fdPagination_Placeholder_Dots_Width);border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;height:2.75rem;justify-content:space-between;padding-block:0;padding-inline:1rem;width:100%}.fd-pagination:after,.fd-pagination:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-pagination__per-page{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.fd-pagination__per-page:after,.fd-pagination__per-page:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-pagination__nav{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:var(--fdPagination_Elements_Spacing);margin-inline:auto}.fd-pagination__nav:after,.fd-pagination__nav:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-pagination__more{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-pagination__more:after,.fd-pagination__more:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-pagination__more:before{content:\"...\";display:block;text-align:center;width:var(--fdPaginationMoreWidth)}.fd-pagination__more[class*=-compact],.fd-pagination__more[class*=-condensed],[class*=-compact] .fd-pagination__more:not([class*=-cozy]),[class*=-condensed] .fd-pagination__more:not([class*=-cozy]){--fdPaginationMoreWidth:var(--fdPagination_Placeholder_Dots_Width_Compact)}.fd-pagination .fd-pagination__input{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;min-width:2.5rem;text-align:center;width:auto}.fd-pagination .fd-pagination__input::-webkit-inner-spin-button,.fd-pagination .fd-pagination__input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin-block:0;margin-inline:0}.fd-pagination .fd-pagination__label,.fd-pagination .fd-pagination__per-page-label{-ms-flex-negative:0;flex-shrink:0;-ms-flex-item-align:center;align-self:center}.fd-pagination .fd-pagination__label{display:none}.fd-pagination .fd-pagination__total-label{margin-block:0;margin-inline:0}.fd-pagination .fd-pagination__link.is-focus,.fd-pagination .fd-pagination__link:focus{outline:none;z-index:5}.fd-pagination .fd-pagination__link.is-focus:after,.fd-pagination .fd-pagination__link:focus:after{border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);border-radius:var(--fdButton_Focus_Border_Radius);content:\"\";display:block;inset:var(--fdButton_Outline_Offset) var(--fdButton_Outline_Offset) var(--fdButton_Outline_Offset) var(--fdButton_Outline_Offset);position:absolute}.fd-pagination .fd-pagination__link.is-focus.fd-button--toggled:after,.fd-pagination .fd-pagination__link.is-focus.is-selected:after,.fd-pagination .fd-pagination__link:focus.fd-button--toggled:after,.fd-pagination .fd-pagination__link:focus.is-selected:after{border-color:var(--fdButton_Outline_Contrast)}.fd-pagination .fd-pagination__link.is-active{display:none}.fd-pagination .fd-pagination__button [class*=sap-icon][dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__button [class*=sap-icon]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fd-pagination .fd-pagination__button--mobile{display:none}.fd-pagination .fd-pagination__button.is-disabled,.fd-pagination .fd-pagination__button:disabled,.fd-pagination .fd-pagination__button[aria-disabled=true]{pointer-events:none}.fd-pagination--short .fd-pagination__link.is-active,.fd-pagination--short .fd-pagination__link:active{display:-webkit-box;display:-ms-flexbox;display:flex}.fd-pagination--short .fd-pagination__input{display:none}.fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav{margin-inline:auto 0}.fd-pagination--mobile .fd-pagination__link,.fd-pagination--mobile .fd-pagination__more,.fd-pagination--mobile .fd-pagination__per-page-label,.fd-pagination--mobile .fd-pagination__total{display:none}.fd-pagination--mobile .fd-pagination__button--mobile,.fd-pagination--mobile .fd-pagination__input,.fd-pagination--mobile .fd-pagination__label{display:-webkit-box;display:-ms-flexbox;display:flex}.fd-pagination--mobile .fd-pagination__link.is-active,.fd-pagination--mobile .fd-pagination__link:active{display:none}@media(width<=599px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-inline:auto 0}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:-webkit-box;display:-ms-flexbox;display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}@media(width>=600px)and (width<=1023px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-inline:auto 0}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:-webkit-box;display:-ms-flexbox;display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.fd-pagination__label .fd-form-label,.fd-pagination__total-label .fd-form-label{margin:0}\n/*! Bundled license information:\n\nfundamental-styles/dist/pagination.css:\n (*!\n * Fundamental Library Styles v0.40.1\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"] }]
376
- }], ctorParameters: () => [{ type: PaginationService }, { type: i0.ChangeDetectorRef }, { type: i2.LiveAnnouncer }, { type: i3.ContentDensityObserver }], propDecorators: { _focusKeyManagerList: [{
375
+ ], template: "@if (totalItems) {\n @if (itemsPerPageTemplate || itemsPerPageOptions.length) {\n <div class=\"fd-pagination__per-page\">\n <!-- note, that we're checking for the length of \"itemsPerPageOptions\", but using \"_displayedPageSizeOptions\" as \"pageOptions\" -->\n <!-- these 2 can be different, as \"_displayedPageSizeOptions\" may also include \"itemsPerPage\" if it's not included in options -->\n <ng-template\n [ngTemplateOutlet]=\"itemsPerPageTemplate || perPage\"\n [ngTemplateOutletContext]=\"{ onSelect: _onChangePerPage, pageOptions: _displayedPageSizeOptions }\"\n ></ng-template>\n </div>\n }\n @if (totalItems >= itemsPerPage) {\n <nav\n fdkFocusKeyManagerList\n orientation=\"horizontal\"\n [skipPredicate]=\"skipItemPredicate\"\n class=\"fd-pagination__nav\"\n [attr.aria-label]=\"'corePagination.ariaLabel' | fdTranslate\"\n [attr.aria-labelledby]=\"displayTotalItems ? _totalPagesElementId : null\"\n >\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-rewind\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"'corePagination.firstLabel' | fdTranslate\"\n [title]=\"'corePagination.firstLabel' | fdTranslate\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"goToFirstPage()\"\n (keyup.enter)=\"goToFirstPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToFirstPage()\"\n ></button>\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"'corePagination.previousLabel' | fdTranslate\"\n [title]=\"'corePagination.previousLabel' | fdTranslate\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"previousPage()\"\n (keyup.enter)=\"previousPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"previousPage()\"\n ></button>\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n @for (page of _pagesBeforeCurrent; track page) {\n @if (page !== _moreElementValue) {\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"'corePagination.pageLabel' | fdTranslate: { pageNumber: page }\"\n [title]=\"'corePagination.pageLabel' | fdTranslate: { pageNumber: page }\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n } @else {\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n }\n }\n <button\n #currentPageElement\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"'corePagination.pageLabel' | fdTranslate: { pageNumber: currentPage }\"\n class=\"fd-pagination__link is-active\"\n [attr.aria-current]=\"true\"\n >\n {{ currentPage }}\n </button>\n <label fd-form-label class=\"fd-pagination__label\">\n {{ 'corePagination.labelBeforeInputMobile' | fdTranslate }}\n </label>\n <input\n #pageInputElement\n fdkFocusKeyManagerItem\n fd-form-control\n fdkOnlyDigits\n required\n size=\"1\"\n min=\"1\"\n type=\"number\"\n [max]=\"_lastPage\"\n [state]=\"currentPageModel.invalid ? 'error' : null\"\n class=\"fd-pagination__input\"\n #currentPageModel=\"ngModel\"\n [ngModel]=\"currentPage\"\n [ariaLabel]=\"\n 'corePagination.inputAriaLabel' | fdTranslate: { pageNumber: currentPage, totalCount: _totalPages }\n \"\n (keydown.enter)=\"goToPage(currentPageModel.value)\"\n (keydown.space)=\"goToPage(currentPageModel.value)\"\n (blur)=\"_restoreInputValue(currentPageModel)\"\n />\n <label fd-form-label class=\"fd-pagination__label\">\n {{\n 'corePagination.labelAfterInputMobile'\n | fdTranslate: { pageNumber: currentPage, totalCount: _totalPages }\n }}\n </label>\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n @for (page of _pagesAfterCurrent; track page) {\n @if (page !== _moreElementValue) {\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"'corePagination.pageLabel' | fdTranslate: { pageNumber: page }\"\n [title]=\"'corePagination.pageLabel' | fdTranslate: { pageNumber: page }\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n } @else {\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n }\n }\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-right-arrow\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"'corePagination.nextLabel' | fdTranslate\"\n [title]=\"'corePagination.nextLabel' | fdTranslate\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"nextPage()\"\n (keyup.enter)=\"nextPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"nextPage()\"\n ></button>\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-forward\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"'corePagination.lastLabel' | fdTranslate\"\n [title]=\"'corePagination.lastLabel' | fdTranslate\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"goToLastPage()\"\n (keyup.enter)=\"goToLastPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToLastPage()\"\n ></button>\n </nav>\n }\n @if (displayTotalItems) {\n <span class=\"fd-pagination__total\" [attr.id]=\"_totalPagesElementId\">\n <ng-template\n [ngTemplateOutlet]=\"displayTextTemplate || total\"\n [ngTemplateOutletContext]=\"{ showing: _currentShowing }\"\n ></ng-template>\n </span>\n }\n}\n<ng-template #more>\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n</ng-template>\n<ng-template #total let-showing=\"showing\">\n <span fd-form-label class=\"fd-pagination__total-label\">\n {{ 'corePagination.totalResultsLabel' | fdTranslate: _currentShowing }}\n </span>\n</ng-template>\n<ng-template #perPage let-pageOptions=\"pageOptions\">\n <label fd-form-label class=\"fd-pagination__per-page-label\">\n {{ 'corePagination.itemsPerPageLabel' | fdTranslate }}\n </label>\n <fd-select class=\"fd-pagination__per-page-select\" [value]=\"itemsPerPage\" (valueChange)=\"_onChangePerPage($event)\">\n @for (option of pageOptions; track option) {\n <li fd-option [value]=\"option\">{{ option }}</li>\n }\n </fd-select>\n</ng-template>\n", styles: [".fd-pagination{--fdPaginationMoreWidth:var(--fdPagination_Placeholder_Dots_Width);border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-inline:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;height:2.75rem;justify-content:space-between;padding-block:0;padding-inline:1rem;width:100%}.fd-pagination:after,.fd-pagination:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-pagination__per-page{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.fd-pagination__per-page:after,.fd-pagination__per-page:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-pagination__nav{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:var(--fdPagination_Elements_Spacing);margin-inline:auto}.fd-pagination__nav:after,.fd-pagination__nav:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-pagination__more{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-pagination__more:after,.fd-pagination__more:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-pagination__more:before{content:\"...\";display:block;text-align:center;width:var(--fdPaginationMoreWidth)}.fd-pagination__more[class*=-compact],.fd-pagination__more[class*=-condensed],[class*=-compact] .fd-pagination__more:not([class*=-cozy]),[class*=-condensed] .fd-pagination__more:not([class*=-cozy]){--fdPaginationMoreWidth:var(--fdPagination_Placeholder_Dots_Width_Compact)}.fd-pagination .fd-pagination__input{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;min-width:2.5rem;text-align:center;width:auto}.fd-pagination .fd-pagination__input::-webkit-inner-spin-button,.fd-pagination .fd-pagination__input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin-block:0;margin-inline:0}.fd-pagination .fd-pagination__label,.fd-pagination .fd-pagination__per-page-label{-ms-flex-negative:0;flex-shrink:0;-ms-flex-item-align:center;align-self:center}.fd-pagination .fd-pagination__label{display:none}.fd-pagination .fd-pagination__total-label{margin-block:0;margin-inline:0}.fd-pagination .fd-pagination__link.is-focus,.fd-pagination .fd-pagination__link:focus{outline:none;z-index:5}.fd-pagination .fd-pagination__link.is-focus:after,.fd-pagination .fd-pagination__link:focus:after{border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);border-radius:var(--fdButton_Focus_Border_Radius);content:\"\";display:block;inset:var(--fdButton_Outline_Offset) var(--fdButton_Outline_Offset) var(--fdButton_Outline_Offset) var(--fdButton_Outline_Offset);position:absolute}.fd-pagination .fd-pagination__link.is-focus.fd-button--toggled:after,.fd-pagination .fd-pagination__link.is-focus.is-selected:after,.fd-pagination .fd-pagination__link:focus.fd-button--toggled:after,.fd-pagination .fd-pagination__link:focus.is-selected:after{border-color:var(--fdButton_Outline_Contrast)}.fd-pagination .fd-pagination__link.is-active{display:none}.fd-pagination .fd-pagination__button [class*=sap-icon][dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__button [class*=sap-icon]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fd-pagination .fd-pagination__button--mobile{display:none}.fd-pagination .fd-pagination__button.is-disabled,.fd-pagination .fd-pagination__button:disabled,.fd-pagination .fd-pagination__button[aria-disabled=true]{pointer-events:none}.fd-pagination--short .fd-pagination__link.is-active,.fd-pagination--short .fd-pagination__link:active{display:-webkit-box;display:-ms-flexbox;display:flex}.fd-pagination--short .fd-pagination__input{display:none}.fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav{margin-inline:auto 0}.fd-pagination--mobile .fd-pagination__link,.fd-pagination--mobile .fd-pagination__more,.fd-pagination--mobile .fd-pagination__per-page-label,.fd-pagination--mobile .fd-pagination__total{display:none}.fd-pagination--mobile .fd-pagination__button--mobile,.fd-pagination--mobile .fd-pagination__input,.fd-pagination--mobile .fd-pagination__label{display:-webkit-box;display:-ms-flexbox;display:flex}.fd-pagination--mobile .fd-pagination__link.is-active,.fd-pagination--mobile .fd-pagination__link:active{display:none}@media(width<=599px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-inline:auto 0}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:-webkit-box;display:-ms-flexbox;display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}@media(width>=600px)and (width<=1023px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-inline:auto 0}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:-webkit-box;display:-ms-flexbox;display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.fd-pagination__label .fd-form-label,.fd-pagination__total-label .fd-form-label{margin:0}\n/*! Bundled license information:\n\nfundamental-styles/dist/pagination.css:\n (*!\n * Fundamental Library Styles v0.40.1\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"] }]
376
+ }], ctorParameters: () => [{ type: PaginationService }, { type: i0.ChangeDetectorRef }, { type: i2.LiveAnnouncer }, { type: i5.Observable, decorators: [{
377
+ type: Inject,
378
+ args: [FD_LANGUAGE]
379
+ }] }, { type: i3.ContentDensityObserver }], propDecorators: { _focusKeyManagerList: [{
377
380
  type: ViewChild,
378
381
  args: [FocusKeyManagerListDirective]
379
382
  }], _focusKeyManagerItems: [{
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-pagination.mjs","sources":["../../../../libs/core/pagination/pagination.service.ts","../../../../libs/core/pagination/pagination.component.ts","../../../../libs/core/pagination/pagination.component.html","../../../../libs/core/pagination/pagination.module.ts","../../../../libs/core/pagination/fundamental-ngx-core-pagination.ts"],"sourcesContent":["import { Injectable, isDevMode } from '@angular/core';\n\nimport { range } from '@fundamental-ngx/cdk/utils';\nimport { Pagination } from './pagination.model';\n\n/** Constant representing the number of pages which appear before and after current page. */\nconst CORNER_DISPLAY_PAGES = 1;\nconst SIDE_CURRENT_DISPLAY_PAGES = 2;\n\n/**\n * Service that is used to retrieve all the pages, the number of pages, and to validate the pagination object.\n */\n@Injectable()\nexport class PaginationService {\n /** @hidden */\n public readonly moreElementValue = -1;\n\n /**\n * Returns a number array representing the pages of the pagination object.\n * Array length always the same and configured by CORNER_DISPLAY_PAGES & SIDE_CURRENT_DISPLAY_PAGES.\n * @param pagination An object of type *Pagination*.\n */\n getPages(pagination: Pagination): number[] {\n if (!pagination.currentPage) {\n pagination.currentPage = 1;\n }\n\n this.validate(pagination);\n\n const totalPages = this.getTotalPages(pagination);\n const pages = range(totalPages, (i) => i + 1);\n\n // +1 for current page, +2 for \"more\" elements - after start & before end pages\n const pagesToDisplay = CORNER_DISPLAY_PAGES * 2 + SIDE_CURRENT_DISPLAY_PAGES * 2 + 1 + 2;\n\n if (pages.length <= pagesToDisplay) {\n return pages;\n }\n\n const pagesBefore = pagination.currentPage - 1;\n const pagesAfter = totalPages - pagination.currentPage;\n const minimalPagesGap = Math.round(pagesToDisplay / 2);\n\n if (pagesBefore < minimalPagesGap) {\n return [\n ...pages.slice(0, pagesToDisplay - 2),\n this.moreElementValue,\n ...pages.slice(totalPages - CORNER_DISPLAY_PAGES)\n ];\n }\n\n if (pagesAfter < minimalPagesGap) {\n return [\n ...pages.slice(0, CORNER_DISPLAY_PAGES),\n this.moreElementValue,\n ...pages.slice(totalPages - pagesToDisplay + 2)\n ];\n }\n\n return [\n ...pages.slice(0, CORNER_DISPLAY_PAGES),\n this.moreElementValue,\n ...pages.slice(\n pagination.currentPage - SIDE_CURRENT_DISPLAY_PAGES - 1,\n pagination.currentPage + SIDE_CURRENT_DISPLAY_PAGES\n ),\n this.moreElementValue,\n ...pages.slice(totalPages - CORNER_DISPLAY_PAGES)\n ];\n }\n\n /**\n * Retrieves the total number of pages.\n * @param pagination An object of type *Pagination*.\n */\n getTotalPages(pagination: Pagination): number {\n if (!pagination.itemsPerPage) {\n return 0;\n }\n\n return Math.ceil(pagination.totalItems / pagination.itemsPerPage);\n }\n\n /**\n * Provides validation for the pagination object.\n * @param pagination An object of type *Pagination*.\n */\n validate(pagination: Pagination): void {\n if (isDevMode()) {\n if (isNaN(pagination.totalItems) || pagination.totalItems <= 0) {\n console.warn(\n `\"totalItems\" must be a number greater than zero but got \"${pagination.totalItems}\". This warning only appears in development mode.`\n );\n }\n\n if (isNaN(pagination.itemsPerPage!) || pagination.itemsPerPage! <= 0) {\n console.warn(\n `\"itemsPerPage\" must be a number greater than zero but got \"${pagination.itemsPerPage}\". This warning only appears in development mode.`\n );\n }\n }\n }\n}\n","import { FocusableOption, LiveAnnouncer } from '@angular/cdk/a11y';\nimport { coerceArray, coerceNumberProperty } from '@angular/cdk/coercion';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n booleanAttribute,\n effect,\n inject\n} from '@angular/core';\nimport { FormsModule, NgModel } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport { FocusKeyManagerItemDirective, FocusKeyManagerListDirective, RtlService } from '@fundamental-ngx/cdk/utils';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { OnlyDigitsDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FormControlComponent, FormLabelComponent } from '@fundamental-ngx/core/form';\nimport { OptionComponent, SelectComponent } from '@fundamental-ngx/core/select';\nimport { FD_LANGUAGE_SIGNAL, FdTranslatePipe, TranslationResolver } from '@fundamental-ngx/i18n';\nimport { Pagination } from './pagination.model';\nimport { PaginationService } from './pagination.service';\n\n/** Constant representing the default number of items per page. */\nconst DEFAULT_ITEMS_PER_PAGE = 10;\n\ninterface CurrentShowing {\n from: number;\n to: number;\n totalCount: number;\n}\n\nlet paginationUniqueId = 0;\n\n/**\n * The component that is used to provide navigation between paged information.\n * ```html\n * <fd-pagination\n * [totalItems]=\"50\"\n * [itemsPerPage]=\"10\"\n * [currentPage]=\"3\">\n * </fd-pagination>\n * ```\n */\n@Component({\n selector: 'fd-pagination',\n templateUrl: './pagination.component.html',\n providers: [PaginationService, contentDensityObserverProviders()],\n host: {\n class: 'fd-pagination',\n '[class.fd-pagination--mobile]': 'mobile',\n '[class.fd-pagination--short]': '_lastPage <= 9'\n },\n encapsulation: ViewEncapsulation.None,\n styleUrl: './pagination.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: true,\n imports: [\n NgTemplateOutlet,\n FocusKeyManagerListDirective,\n ButtonComponent,\n FocusKeyManagerItemDirective,\n FormLabelComponent,\n FormsModule,\n FormControlComponent,\n OnlyDigitsDirective,\n SelectComponent,\n OptionComponent,\n FdTranslatePipe\n ]\n})\nexport class PaginationComponent implements OnChanges, AfterViewInit, OnDestroy {\n /** @hidden */\n @ViewChild(FocusKeyManagerListDirective)\n readonly _focusKeyManagerList: FocusKeyManagerListDirective;\n\n /** @hidden */\n @ViewChildren(FocusKeyManagerItemDirective)\n readonly _focusKeyManagerItems: QueryList<FocusKeyManagerItemDirective>;\n\n /** @hidden */\n @ViewChild('pageInputElement', { read: ElementRef })\n readonly _pageInputElement: ElementRef;\n\n /** @hidden */\n @ViewChild('currentPageElement', { read: ElementRef })\n readonly _currentPageElement: ElementRef;\n\n /** Id for the pagination component. If omitted, a unique one is generated. */\n @Input()\n id: string = 'fd-pagination-' + paginationUniqueId++;\n\n /** Whether component should be shown in the mobile mode. */\n @Input({ transform: booleanAttribute })\n mobile = false;\n\n /** Represents the total number of items. */\n @Input()\n totalItems: number;\n\n /** Represents the current page number. */\n @Input()\n set currentPage(value: number) {\n this._currentPage = Math.floor(coerceNumberProperty(value, 1));\n }\n get currentPage(): number {\n return this._currentPage;\n }\n\n /** Represents the number of items per page. */\n @Input()\n set itemsPerPage(value: number) {\n value = Math.floor(coerceNumberProperty(value, DEFAULT_ITEMS_PER_PAGE));\n\n this._itemsPerPage = Math.max(value, 1);\n\n this._updateDisplayedPageSizeOptions();\n }\n get itemsPerPage(): number {\n return this._itemsPerPage;\n }\n\n /**\n * The custom template show range of item by current page of items.\n * It has higher priority than `itemsPerPageOptions` property.\n */\n @Input()\n itemsPerPageTemplate: TemplateRef<any>;\n\n /** Represents the options for items per page. */\n @Input()\n set itemsPerPageOptions(value: number[]) {\n this._itemsPerPageOptions = coerceArray<number>(value)\n .map((v) => coerceNumberProperty(v, 0))\n .map((v) => Math.floor(v))\n .filter((v) => v > 0)\n .sort((a, b) => a - b);\n\n this._updateDisplayedPageSizeOptions();\n }\n get itemsPerPageOptions(): number[] {\n return this._itemsPerPageOptions;\n }\n\n /** Whether to display the total number of items. */\n @Input()\n displayTotalItems = true;\n\n /**\n * The template show range of item by current page of items.\n * Default view: Showing {{ from }}-{{ to }} of {{ of }}\n */\n @Input()\n displayTextTemplate: TemplateRef<any>;\n\n /** Event emitted when the page is changed. */\n @Output()\n pageChangeStart = new EventEmitter<number>();\n\n /** Event emitted when items per page option is changed.*/\n @Output()\n itemsPerPageChange = new EventEmitter<number>();\n\n /** @hidden */\n _pages: number[] = [];\n\n /** @hidden */\n _pagesBeforeCurrent: number[];\n\n /** @hidden */\n _pagesAfterCurrent: number[];\n\n /**\n * Retrieves an object that represents\n * the total number of items, the current page, and the number of items per page.\n */\n get paginationObject(): Pagination {\n return {\n totalItems: this.totalItems,\n currentPage: this.currentPage,\n itemsPerPage: this.itemsPerPage\n };\n }\n\n /** @hidden */\n get _lastPage(): number {\n return this.paginationService.getTotalPages(this.paginationObject);\n }\n\n /** @hidden */\n get isFirstPage(): boolean {\n return this.currentPage === 1;\n }\n\n /** @hidden */\n get isLastPage(): boolean {\n return this.currentPage === this.paginationService.getTotalPages(this.paginationObject);\n }\n\n /** @hidden */\n get _totalPages(): number {\n return this.paginationService.getTotalPages(this.paginationObject);\n }\n\n /** @hidden */\n get _totalPagesElementId(): string {\n return this.id + '__total';\n }\n\n /** @hidden */\n get _moreElementValue(): number {\n return this.paginationService.moreElementValue;\n }\n\n /** @hidden */\n _currentShowing: CurrentShowing = {\n from: 0,\n to: 0,\n totalCount: 0\n };\n\n /** @hidden */\n _displayedPageSizeOptions: number[] = [];\n\n /** @hidden */\n private _itemsPerPage: number = DEFAULT_ITEMS_PER_PAGE;\n\n /** @hidden */\n private _itemsPerPageOptions: number[] = [];\n\n /** @hidden */\n private _currentPage = 1;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _translationResolver = new TranslationResolver();\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n private readonly _languageSignal = inject(FD_LANGUAGE_SIGNAL);\n\n /** @hidden */\n constructor(\n private readonly paginationService: PaginationService,\n private readonly _cdr: ChangeDetectorRef,\n private readonly _liveAnnouncer: LiveAnnouncer,\n readonly _contentDensityObserver: ContentDensityObserver\n ) {\n // React to RTL changes\n effect(() => {\n this._rtlService?.rtl();\n this._refreshPages();\n });\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes?.currentPage) {\n this.currentPage = changes.currentPage.currentValue;\n }\n if (!this.currentPage || this.currentPage < 1) {\n this.currentPage = 1;\n } else {\n const totalPages = this.paginationService.getTotalPages(this.paginationObject);\n if (this.currentPage > totalPages) {\n this.currentPage = totalPages;\n }\n }\n this._refreshPages();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._focusKeyManagerList?.focusKeyManager?.withVerticalOrientation(false);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n skipItemPredicate(item: ElementRef & FocusableOption): boolean {\n return (\n getComputedStyle(item.nativeElement).display === 'none' ||\n item.nativeElement.getAttribute('disabled') === 'true'\n );\n }\n\n /**\n * Navigates to a specific page.\n * @param page The page to navigate to.\n * @param event The mouse event (optional).\n */\n goToPage(page: number, event?: Event): void {\n if (page > this._lastPage || page < 1) {\n return;\n }\n\n this._refreshPages();\n\n if (event) {\n this._focusCurrentPage();\n }\n\n this.pageChangeStart.emit(page);\n\n this._announcePage(page);\n }\n\n /** Navigates to the first page */\n goToFirstPage(): void {\n this.goToPage(1);\n }\n\n /**\n * Navigates to a previous page.\n */\n previousPage(): void {\n this.goToPage(this.currentPage - 1);\n }\n\n /**\n * Navigates to the next page.\n */\n nextPage(): void {\n this.goToPage(this.currentPage + 1);\n }\n\n /** Navigates to the last page */\n goToLastPage(): void {\n this.goToPage(this._lastPage);\n }\n\n /** @hidden */\n _onChangePerPage = (event: number): void => {\n this.itemsPerPage = event;\n this.itemsPerPageChange.emit(this.itemsPerPage);\n\n this._refreshPages();\n\n const maxPage = this._pages[this._pages.length - 1];\n if (this.currentPage > maxPage) {\n this.pageChangeStart.emit(maxPage);\n }\n };\n\n /** @hidden */\n _restoreInputValue(model: NgModel): void {\n model.reset(this.currentPage);\n this._cdr.markForCheck();\n }\n\n /** @hidden */\n private _refreshPages(): void {\n const pagination = this.paginationObject;\n\n this._pages = this.paginationService.getPages(pagination);\n\n const currentPageIndex = this._pages.findIndex((page) => page === this.currentPage);\n\n this._pagesBeforeCurrent = this._pages.slice(0, currentPageIndex);\n this._pagesAfterCurrent = this._pages.slice(currentPageIndex + 1);\n\n const itemsPerPage = pagination.itemsPerPage ?? DEFAULT_ITEMS_PER_PAGE;\n\n this._currentShowing = {\n from: this.currentPage - 1 === 0 ? 1 : (this.currentPage - 1) * itemsPerPage + 1,\n to: Math.min((this.currentPage - 1) * itemsPerPage + itemsPerPage, this.totalItems),\n totalCount: this.totalItems\n };\n\n this._cdr.markForCheck();\n }\n\n /** Focus current page link/input using FocusKeyManager\n * @hidden\n */\n private _focusCurrentPage(): void {\n const currentPageNativeElement =\n getComputedStyle(this._currentPageElement.nativeElement).display === 'none'\n ? this._pageInputElement.nativeElement\n : this._currentPageElement.nativeElement;\n\n const index = this._focusKeyManagerItems\n .toArray()\n .findIndex((elem) => elem.nativeElement === currentPageNativeElement);\n\n this._focusKeyManagerList.focusItem(index);\n }\n\n /**\n * Updates the list of page size options to display to the user. Includes making sure that\n * the page size is an option and that the list is sorted.\n */\n private _updateDisplayedPageSizeOptions(): void {\n // If no page size is provided, use the first page size option or the default page size.\n if (!this.itemsPerPage) {\n this._itemsPerPage = this.itemsPerPageOptions.length ? this.itemsPerPageOptions[0] : DEFAULT_ITEMS_PER_PAGE;\n }\n\n this._displayedPageSizeOptions = this.itemsPerPageOptions?.slice() ?? [];\n\n if (!this._displayedPageSizeOptions.includes(this.itemsPerPage)) {\n this._displayedPageSizeOptions.push(this.itemsPerPage);\n }\n\n this._displayedPageSizeOptions.sort((a, b) => a - b);\n this._cdr.markForCheck();\n }\n\n /** @hidden */\n private async _announcePage(page: number): Promise<void> {\n await this._liveAnnouncer.announce(\n this._translationResolver.resolve(this._languageSignal(), 'corePagination.currentPageAriaLabel', {\n pageNumber: page,\n totalCount: this.totalItems\n })\n );\n }\n}\n","@if (totalItems) {\n @if (itemsPerPageTemplate || itemsPerPageOptions.length) {\n <div class=\"fd-pagination__per-page\">\n <!-- note, that we're checking for the length of \"itemsPerPageOptions\", but using \"_displayedPageSizeOptions\" as \"pageOptions\" -->\n <!-- these 2 can be different, as \"_displayedPageSizeOptions\" may also include \"itemsPerPage\" if it's not included in options -->\n <ng-template\n [ngTemplateOutlet]=\"itemsPerPageTemplate || perPage\"\n [ngTemplateOutletContext]=\"{ onSelect: _onChangePerPage, pageOptions: _displayedPageSizeOptions }\"\n ></ng-template>\n </div>\n }\n @if (totalItems >= itemsPerPage) {\n <nav\n fdkFocusKeyManagerList\n orientation=\"horizontal\"\n [skipPredicate]=\"skipItemPredicate\"\n class=\"fd-pagination__nav\"\n [attr.aria-label]=\"('corePagination.ariaLabel' | fdTranslate)()\"\n [attr.aria-labelledby]=\"displayTotalItems ? _totalPagesElementId : null\"\n >\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-rewind\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"('corePagination.firstLabel' | fdTranslate)()\"\n [title]=\"('corePagination.firstLabel' | fdTranslate)()\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"goToFirstPage()\"\n (keyup.enter)=\"goToFirstPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToFirstPage()\"\n ></button>\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"('corePagination.previousLabel' | fdTranslate)()\"\n [title]=\"('corePagination.previousLabel' | fdTranslate)()\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"previousPage()\"\n (keyup.enter)=\"previousPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"previousPage()\"\n ></button>\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n @for (page of _pagesBeforeCurrent; track page) {\n @if (page !== _moreElementValue) {\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"('corePagination.pageLabel' | fdTranslate: { pageNumber: page })()\"\n [title]=\"('corePagination.pageLabel' | fdTranslate: { pageNumber: page })()\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n } @else {\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n }\n }\n <button\n #currentPageElement\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"('corePagination.pageLabel' | fdTranslate: { pageNumber: currentPage })()\"\n class=\"fd-pagination__link is-active\"\n [attr.aria-current]=\"true\"\n >\n {{ currentPage }}\n </button>\n <label fd-form-label class=\"fd-pagination__label\">\n {{ ('corePagination.labelBeforeInputMobile' | fdTranslate)() }}\n </label>\n <input\n #pageInputElement\n fdkFocusKeyManagerItem\n fd-form-control\n fdkOnlyDigits\n required\n size=\"1\"\n min=\"1\"\n type=\"number\"\n [max]=\"_lastPage\"\n [state]=\"currentPageModel.invalid ? 'error' : null\"\n class=\"fd-pagination__input\"\n #currentPageModel=\"ngModel\"\n [ngModel]=\"currentPage\"\n [ariaLabel]=\"\n (\n 'corePagination.inputAriaLabel'\n | fdTranslate: { pageNumber: currentPage, totalCount: _totalPages }\n )()\n \"\n (keydown.enter)=\"goToPage(currentPageModel.value)\"\n (keydown.space)=\"goToPage(currentPageModel.value)\"\n (blur)=\"_restoreInputValue(currentPageModel)\"\n />\n <label fd-form-label class=\"fd-pagination__label\">\n {{\n (\n 'corePagination.labelAfterInputMobile'\n | fdTranslate: { pageNumber: currentPage, totalCount: _totalPages }\n )()\n }}\n </label>\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n @for (page of _pagesAfterCurrent; track page) {\n @if (page !== _moreElementValue) {\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"('corePagination.pageLabel' | fdTranslate: { pageNumber: page })()\"\n [title]=\"('corePagination.pageLabel' | fdTranslate: { pageNumber: page })()\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n } @else {\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n }\n }\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-right-arrow\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"('corePagination.nextLabel' | fdTranslate)()\"\n [title]=\"('corePagination.nextLabel' | fdTranslate)()\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"nextPage()\"\n (keyup.enter)=\"nextPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"nextPage()\"\n ></button>\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-forward\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"('corePagination.lastLabel' | fdTranslate)()\"\n [title]=\"('corePagination.lastLabel' | fdTranslate)()\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"goToLastPage()\"\n (keyup.enter)=\"goToLastPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToLastPage()\"\n ></button>\n </nav>\n }\n @if (displayTotalItems) {\n <span class=\"fd-pagination__total\" [attr.id]=\"_totalPagesElementId\">\n <ng-template\n [ngTemplateOutlet]=\"displayTextTemplate || total\"\n [ngTemplateOutletContext]=\"{ showing: _currentShowing }\"\n ></ng-template>\n </span>\n }\n}\n<ng-template #more>\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n</ng-template>\n<ng-template #total let-showing=\"showing\">\n <span fd-form-label class=\"fd-pagination__total-label\">\n {{ ('corePagination.totalResultsLabel' | fdTranslate: _currentShowing)() }}\n </span>\n</ng-template>\n<ng-template #perPage let-pageOptions=\"pageOptions\">\n <label fd-form-label class=\"fd-pagination__per-page-label\">\n {{ ('corePagination.itemsPerPageLabel' | fdTranslate)() }}\n </label>\n <fd-select class=\"fd-pagination__per-page-select\" [value]=\"itemsPerPage\" (valueChange)=\"_onChangePerPage($event)\">\n @for (option of pageOptions; track option) {\n <li fd-option [value]=\"option\">{{ option }}</li>\n }\n </fd-select>\n</ng-template>\n","import { NgModule } from '@angular/core';\n\nimport { PaginationComponent } from './pagination.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [PaginationComponent],\n exports: [PaginationComponent]\n})\nexport class PaginationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.PaginationService"],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-pagination.mjs","sources":["../../../../libs/core/pagination/pagination.service.ts","../../../../libs/core/pagination/pagination.component.ts","../../../../libs/core/pagination/pagination.component.html","../../../../libs/core/pagination/pagination.module.ts","../../../../libs/core/pagination/fundamental-ngx-core-pagination.ts"],"sourcesContent":["import { Injectable, isDevMode } from '@angular/core';\n\nimport { range } from '@fundamental-ngx/cdk/utils';\nimport { Pagination } from './pagination.model';\n\n/** Constant representing the number of pages which appear before and after current page. */\nconst CORNER_DISPLAY_PAGES = 1;\nconst SIDE_CURRENT_DISPLAY_PAGES = 2;\n\n/**\n * Service that is used to retrieve all the pages, the number of pages, and to validate the pagination object.\n */\n@Injectable()\nexport class PaginationService {\n /** @hidden */\n public readonly moreElementValue = -1;\n\n /**\n * Returns a number array representing the pages of the pagination object.\n * Array length always the same and configured by CORNER_DISPLAY_PAGES & SIDE_CURRENT_DISPLAY_PAGES.\n * @param pagination An object of type *Pagination*.\n */\n getPages(pagination: Pagination): number[] {\n if (!pagination.currentPage) {\n pagination.currentPage = 1;\n }\n\n this.validate(pagination);\n\n const totalPages = this.getTotalPages(pagination);\n const pages = range(totalPages, (i) => i + 1);\n\n // +1 for current page, +2 for \"more\" elements - after start & before end pages\n const pagesToDisplay = CORNER_DISPLAY_PAGES * 2 + SIDE_CURRENT_DISPLAY_PAGES * 2 + 1 + 2;\n\n if (pages.length <= pagesToDisplay) {\n return pages;\n }\n\n const pagesBefore = pagination.currentPage - 1;\n const pagesAfter = totalPages - pagination.currentPage;\n const minimalPagesGap = Math.round(pagesToDisplay / 2);\n\n if (pagesBefore < minimalPagesGap) {\n return [\n ...pages.slice(0, pagesToDisplay - 2),\n this.moreElementValue,\n ...pages.slice(totalPages - CORNER_DISPLAY_PAGES)\n ];\n }\n\n if (pagesAfter < minimalPagesGap) {\n return [\n ...pages.slice(0, CORNER_DISPLAY_PAGES),\n this.moreElementValue,\n ...pages.slice(totalPages - pagesToDisplay + 2)\n ];\n }\n\n return [\n ...pages.slice(0, CORNER_DISPLAY_PAGES),\n this.moreElementValue,\n ...pages.slice(\n pagination.currentPage - SIDE_CURRENT_DISPLAY_PAGES - 1,\n pagination.currentPage + SIDE_CURRENT_DISPLAY_PAGES\n ),\n this.moreElementValue,\n ...pages.slice(totalPages - CORNER_DISPLAY_PAGES)\n ];\n }\n\n /**\n * Retrieves the total number of pages.\n * @param pagination An object of type *Pagination*.\n */\n getTotalPages(pagination: Pagination): number {\n if (!pagination.itemsPerPage) {\n return 0;\n }\n\n return Math.ceil(pagination.totalItems / pagination.itemsPerPage);\n }\n\n /**\n * Provides validation for the pagination object.\n * @param pagination An object of type *Pagination*.\n */\n validate(pagination: Pagination): void {\n if (isDevMode()) {\n if (isNaN(pagination.totalItems) || pagination.totalItems <= 0) {\n console.warn(\n `\"totalItems\" must be a number greater than zero but got \"${pagination.totalItems}\". This warning only appears in development mode.`\n );\n }\n\n if (isNaN(pagination.itemsPerPage!) || pagination.itemsPerPage! <= 0) {\n console.warn(\n `\"itemsPerPage\" must be a number greater than zero but got \"${pagination.itemsPerPage}\". This warning only appears in development mode.`\n );\n }\n }\n }\n}\n","import { FocusableOption, LiveAnnouncer } from '@angular/cdk/a11y';\nimport { coerceArray, coerceNumberProperty } from '@angular/cdk/coercion';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n booleanAttribute,\n effect,\n inject\n} from '@angular/core';\nimport { FormsModule, NgModel } from '@angular/forms';\nimport { Observable, Subscription, firstValueFrom } from 'rxjs';\n\nimport { FocusKeyManagerItemDirective, FocusKeyManagerListDirective, RtlService } from '@fundamental-ngx/cdk/utils';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { OnlyDigitsDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FormControlComponent, FormLabelComponent } from '@fundamental-ngx/core/form';\nimport { OptionComponent, SelectComponent } from '@fundamental-ngx/core/select';\nimport { FD_LANGUAGE, FdLanguage, FdTranslatePipe, TranslationResolver } from '@fundamental-ngx/i18n';\nimport { Pagination } from './pagination.model';\nimport { PaginationService } from './pagination.service';\n\n/** Constant representing the default number of items per page. */\nconst DEFAULT_ITEMS_PER_PAGE = 10;\n\ninterface CurrentShowing {\n from: number;\n to: number;\n totalCount: number;\n}\n\nlet paginationUniqueId = 0;\n\n/**\n * The component that is used to provide navigation between paged information.\n * ```html\n * <fd-pagination\n * [totalItems]=\"50\"\n * [itemsPerPage]=\"10\"\n * [currentPage]=\"3\">\n * </fd-pagination>\n * ```\n */\n@Component({\n selector: 'fd-pagination',\n templateUrl: './pagination.component.html',\n providers: [PaginationService, contentDensityObserverProviders()],\n host: {\n class: 'fd-pagination',\n '[class.fd-pagination--mobile]': 'mobile',\n '[class.fd-pagination--short]': '_lastPage <= 9'\n },\n encapsulation: ViewEncapsulation.None,\n styleUrl: './pagination.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: true,\n imports: [\n NgTemplateOutlet,\n FocusKeyManagerListDirective,\n ButtonComponent,\n FocusKeyManagerItemDirective,\n FormLabelComponent,\n FormsModule,\n FormControlComponent,\n OnlyDigitsDirective,\n SelectComponent,\n OptionComponent,\n FdTranslatePipe\n ]\n})\nexport class PaginationComponent implements OnChanges, AfterViewInit, OnDestroy {\n /** @hidden */\n @ViewChild(FocusKeyManagerListDirective)\n readonly _focusKeyManagerList: FocusKeyManagerListDirective;\n\n /** @hidden */\n @ViewChildren(FocusKeyManagerItemDirective)\n readonly _focusKeyManagerItems: QueryList<FocusKeyManagerItemDirective>;\n\n /** @hidden */\n @ViewChild('pageInputElement', { read: ElementRef })\n readonly _pageInputElement: ElementRef;\n\n /** @hidden */\n @ViewChild('currentPageElement', { read: ElementRef })\n readonly _currentPageElement: ElementRef;\n\n /** Id for the pagination component. If omitted, a unique one is generated. */\n @Input()\n id: string = 'fd-pagination-' + paginationUniqueId++;\n\n /** Whether component should be shown in the mobile mode. */\n @Input({ transform: booleanAttribute })\n mobile = false;\n\n /** Represents the total number of items. */\n @Input()\n totalItems: number;\n\n /** Represents the current page number. */\n @Input()\n set currentPage(value: number) {\n this._currentPage = Math.floor(coerceNumberProperty(value, 1));\n }\n get currentPage(): number {\n return this._currentPage;\n }\n\n /** Represents the number of items per page. */\n @Input()\n set itemsPerPage(value: number) {\n value = Math.floor(coerceNumberProperty(value, DEFAULT_ITEMS_PER_PAGE));\n\n this._itemsPerPage = Math.max(value, 1);\n\n this._updateDisplayedPageSizeOptions();\n }\n get itemsPerPage(): number {\n return this._itemsPerPage;\n }\n\n /**\n * The custom template show range of item by current page of items.\n * It has higher priority than `itemsPerPageOptions` property.\n */\n @Input()\n itemsPerPageTemplate: TemplateRef<any>;\n\n /** Represents the options for items per page. */\n @Input()\n set itemsPerPageOptions(value: number[]) {\n this._itemsPerPageOptions = coerceArray<number>(value)\n .map((v) => coerceNumberProperty(v, 0))\n .map((v) => Math.floor(v))\n .filter((v) => v > 0)\n .sort((a, b) => a - b);\n\n this._updateDisplayedPageSizeOptions();\n }\n get itemsPerPageOptions(): number[] {\n return this._itemsPerPageOptions;\n }\n\n /** Whether to display the total number of items. */\n @Input()\n displayTotalItems = true;\n\n /**\n * The template show range of item by current page of items.\n * Default view: Showing {{ from }}-{{ to }} of {{ of }}\n */\n @Input()\n displayTextTemplate: TemplateRef<any>;\n\n /** Event emitted when the page is changed. */\n @Output()\n pageChangeStart = new EventEmitter<number>();\n\n /** Event emitted when items per page option is changed.*/\n @Output()\n itemsPerPageChange = new EventEmitter<number>();\n\n /** @hidden */\n _pages: number[] = [];\n\n /** @hidden */\n _pagesBeforeCurrent: number[];\n\n /** @hidden */\n _pagesAfterCurrent: number[];\n\n /**\n * Retrieves an object that represents\n * the total number of items, the current page, and the number of items per page.\n */\n get paginationObject(): Pagination {\n return {\n totalItems: this.totalItems,\n currentPage: this.currentPage,\n itemsPerPage: this.itemsPerPage\n };\n }\n\n /** @hidden */\n get _lastPage(): number {\n return this.paginationService.getTotalPages(this.paginationObject);\n }\n\n /** @hidden */\n get isFirstPage(): boolean {\n return this.currentPage === 1;\n }\n\n /** @hidden */\n get isLastPage(): boolean {\n return this.currentPage === this.paginationService.getTotalPages(this.paginationObject);\n }\n\n /** @hidden */\n get _totalPages(): number {\n return this.paginationService.getTotalPages(this.paginationObject);\n }\n\n /** @hidden */\n get _totalPagesElementId(): string {\n return this.id + '__total';\n }\n\n /** @hidden */\n get _moreElementValue(): number {\n return this.paginationService.moreElementValue;\n }\n\n /** @hidden */\n _currentShowing: CurrentShowing = {\n from: 0,\n to: 0,\n totalCount: 0\n };\n\n /** @hidden */\n _displayedPageSizeOptions: number[] = [];\n\n /** @hidden */\n private _itemsPerPage: number = DEFAULT_ITEMS_PER_PAGE;\n\n /** @hidden */\n private _itemsPerPageOptions: number[] = [];\n\n /** @hidden */\n private _currentPage = 1;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _translationResolver = new TranslationResolver();\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n constructor(\n private readonly paginationService: PaginationService,\n private readonly _cdr: ChangeDetectorRef,\n private readonly _liveAnnouncer: LiveAnnouncer,\n @Inject(FD_LANGUAGE) private readonly _language: Observable<FdLanguage>,\n readonly _contentDensityObserver: ContentDensityObserver\n ) {\n // React to RTL changes\n effect(() => {\n this._rtlService?.rtl();\n this._refreshPages();\n });\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes?.currentPage) {\n this.currentPage = changes.currentPage.currentValue;\n }\n if (!this.currentPage || this.currentPage < 1) {\n this.currentPage = 1;\n } else {\n const totalPages = this.paginationService.getTotalPages(this.paginationObject);\n if (this.currentPage > totalPages) {\n this.currentPage = totalPages;\n }\n }\n this._refreshPages();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._focusKeyManagerList?.focusKeyManager?.withVerticalOrientation(false);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n skipItemPredicate(item: ElementRef & FocusableOption): boolean {\n return (\n getComputedStyle(item.nativeElement).display === 'none' ||\n item.nativeElement.getAttribute('disabled') === 'true'\n );\n }\n\n /**\n * Navigates to a specific page.\n * @param page The page to navigate to.\n * @param event The mouse event (optional).\n */\n goToPage(page: number, event?: Event): void {\n if (page > this._lastPage || page < 1) {\n return;\n }\n\n this._refreshPages();\n\n if (event) {\n this._focusCurrentPage();\n }\n\n this.pageChangeStart.emit(page);\n\n this._announcePage(page);\n }\n\n /** Navigates to the first page */\n goToFirstPage(): void {\n this.goToPage(1);\n }\n\n /**\n * Navigates to a previous page.\n */\n previousPage(): void {\n this.goToPage(this.currentPage - 1);\n }\n\n /**\n * Navigates to the next page.\n */\n nextPage(): void {\n this.goToPage(this.currentPage + 1);\n }\n\n /** Navigates to the last page */\n goToLastPage(): void {\n this.goToPage(this._lastPage);\n }\n\n /** @hidden */\n _onChangePerPage = (event: number): void => {\n this.itemsPerPage = event;\n this.itemsPerPageChange.emit(this.itemsPerPage);\n\n this._refreshPages();\n\n const maxPage = this._pages[this._pages.length - 1];\n if (this.currentPage > maxPage) {\n this.pageChangeStart.emit(maxPage);\n }\n };\n\n /** @hidden */\n _restoreInputValue(model: NgModel): void {\n model.reset(this.currentPage);\n this._cdr.markForCheck();\n }\n\n /** @hidden */\n private _refreshPages(): void {\n const pagination = this.paginationObject;\n\n this._pages = this.paginationService.getPages(pagination);\n\n const currentPageIndex = this._pages.findIndex((page) => page === this.currentPage);\n\n this._pagesBeforeCurrent = this._pages.slice(0, currentPageIndex);\n this._pagesAfterCurrent = this._pages.slice(currentPageIndex + 1);\n\n const itemsPerPage = pagination.itemsPerPage ?? DEFAULT_ITEMS_PER_PAGE;\n\n this._currentShowing = {\n from: this.currentPage - 1 === 0 ? 1 : (this.currentPage - 1) * itemsPerPage + 1,\n to: Math.min((this.currentPage - 1) * itemsPerPage + itemsPerPage, this.totalItems),\n totalCount: this.totalItems\n };\n\n this._cdr.markForCheck();\n }\n\n /** Focus current page link/input using FocusKeyManager\n * @hidden\n */\n private _focusCurrentPage(): void {\n const currentPageNativeElement =\n getComputedStyle(this._currentPageElement.nativeElement).display === 'none'\n ? this._pageInputElement.nativeElement\n : this._currentPageElement.nativeElement;\n\n const index = this._focusKeyManagerItems\n .toArray()\n .findIndex((elem) => elem.nativeElement === currentPageNativeElement);\n\n this._focusKeyManagerList.focusItem(index);\n }\n\n /**\n * Updates the list of page size options to display to the user. Includes making sure that\n * the page size is an option and that the list is sorted.\n */\n private _updateDisplayedPageSizeOptions(): void {\n // If no page size is provided, use the first page size option or the default page size.\n if (!this.itemsPerPage) {\n this._itemsPerPage = this.itemsPerPageOptions.length ? this.itemsPerPageOptions[0] : DEFAULT_ITEMS_PER_PAGE;\n }\n\n this._displayedPageSizeOptions = this.itemsPerPageOptions?.slice() ?? [];\n\n if (!this._displayedPageSizeOptions.includes(this.itemsPerPage)) {\n this._displayedPageSizeOptions.push(this.itemsPerPage);\n }\n\n this._displayedPageSizeOptions.sort((a, b) => a - b);\n this._cdr.markForCheck();\n }\n\n /** @hidden */\n private async _announcePage(page: number): Promise<void> {\n await this._liveAnnouncer.announce(\n this._translationResolver.resolve(\n await firstValueFrom(this._language),\n 'corePagination.currentPageAriaLabel',\n {\n pageNumber: page,\n totalCount: this.totalItems\n }\n )\n );\n }\n}\n","@if (totalItems) {\n @if (itemsPerPageTemplate || itemsPerPageOptions.length) {\n <div class=\"fd-pagination__per-page\">\n <!-- note, that we're checking for the length of \"itemsPerPageOptions\", but using \"_displayedPageSizeOptions\" as \"pageOptions\" -->\n <!-- these 2 can be different, as \"_displayedPageSizeOptions\" may also include \"itemsPerPage\" if it's not included in options -->\n <ng-template\n [ngTemplateOutlet]=\"itemsPerPageTemplate || perPage\"\n [ngTemplateOutletContext]=\"{ onSelect: _onChangePerPage, pageOptions: _displayedPageSizeOptions }\"\n ></ng-template>\n </div>\n }\n @if (totalItems >= itemsPerPage) {\n <nav\n fdkFocusKeyManagerList\n orientation=\"horizontal\"\n [skipPredicate]=\"skipItemPredicate\"\n class=\"fd-pagination__nav\"\n [attr.aria-label]=\"'corePagination.ariaLabel' | fdTranslate\"\n [attr.aria-labelledby]=\"displayTotalItems ? _totalPagesElementId : null\"\n >\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-rewind\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"'corePagination.firstLabel' | fdTranslate\"\n [title]=\"'corePagination.firstLabel' | fdTranslate\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"goToFirstPage()\"\n (keyup.enter)=\"goToFirstPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToFirstPage()\"\n ></button>\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"'corePagination.previousLabel' | fdTranslate\"\n [title]=\"'corePagination.previousLabel' | fdTranslate\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"previousPage()\"\n (keyup.enter)=\"previousPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"previousPage()\"\n ></button>\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n @for (page of _pagesBeforeCurrent; track page) {\n @if (page !== _moreElementValue) {\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"'corePagination.pageLabel' | fdTranslate: { pageNumber: page }\"\n [title]=\"'corePagination.pageLabel' | fdTranslate: { pageNumber: page }\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n } @else {\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n }\n }\n <button\n #currentPageElement\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"'corePagination.pageLabel' | fdTranslate: { pageNumber: currentPage }\"\n class=\"fd-pagination__link is-active\"\n [attr.aria-current]=\"true\"\n >\n {{ currentPage }}\n </button>\n <label fd-form-label class=\"fd-pagination__label\">\n {{ 'corePagination.labelBeforeInputMobile' | fdTranslate }}\n </label>\n <input\n #pageInputElement\n fdkFocusKeyManagerItem\n fd-form-control\n fdkOnlyDigits\n required\n size=\"1\"\n min=\"1\"\n type=\"number\"\n [max]=\"_lastPage\"\n [state]=\"currentPageModel.invalid ? 'error' : null\"\n class=\"fd-pagination__input\"\n #currentPageModel=\"ngModel\"\n [ngModel]=\"currentPage\"\n [ariaLabel]=\"\n 'corePagination.inputAriaLabel' | fdTranslate: { pageNumber: currentPage, totalCount: _totalPages }\n \"\n (keydown.enter)=\"goToPage(currentPageModel.value)\"\n (keydown.space)=\"goToPage(currentPageModel.value)\"\n (blur)=\"_restoreInputValue(currentPageModel)\"\n />\n <label fd-form-label class=\"fd-pagination__label\">\n {{\n 'corePagination.labelAfterInputMobile'\n | fdTranslate: { pageNumber: currentPage, totalCount: _totalPages }\n }}\n </label>\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n @for (page of _pagesAfterCurrent; track page) {\n @if (page !== _moreElementValue) {\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"'corePagination.pageLabel' | fdTranslate: { pageNumber: page }\"\n [title]=\"'corePagination.pageLabel' | fdTranslate: { pageNumber: page }\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n } @else {\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n }\n }\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-right-arrow\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"'corePagination.nextLabel' | fdTranslate\"\n [title]=\"'corePagination.nextLabel' | fdTranslate\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"nextPage()\"\n (keyup.enter)=\"nextPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"nextPage()\"\n ></button>\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-forward\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"'corePagination.lastLabel' | fdTranslate\"\n [title]=\"'corePagination.lastLabel' | fdTranslate\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"goToLastPage()\"\n (keyup.enter)=\"goToLastPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToLastPage()\"\n ></button>\n </nav>\n }\n @if (displayTotalItems) {\n <span class=\"fd-pagination__total\" [attr.id]=\"_totalPagesElementId\">\n <ng-template\n [ngTemplateOutlet]=\"displayTextTemplate || total\"\n [ngTemplateOutletContext]=\"{ showing: _currentShowing }\"\n ></ng-template>\n </span>\n }\n}\n<ng-template #more>\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n</ng-template>\n<ng-template #total let-showing=\"showing\">\n <span fd-form-label class=\"fd-pagination__total-label\">\n {{ 'corePagination.totalResultsLabel' | fdTranslate: _currentShowing }}\n </span>\n</ng-template>\n<ng-template #perPage let-pageOptions=\"pageOptions\">\n <label fd-form-label class=\"fd-pagination__per-page-label\">\n {{ 'corePagination.itemsPerPageLabel' | fdTranslate }}\n </label>\n <fd-select class=\"fd-pagination__per-page-select\" [value]=\"itemsPerPage\" (valueChange)=\"_onChangePerPage($event)\">\n @for (option of pageOptions; track option) {\n <li fd-option [value]=\"option\">{{ option }}</li>\n }\n </fd-select>\n</ng-template>\n","import { NgModule } from '@angular/core';\n\nimport { PaginationComponent } from './pagination.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [PaginationComponent],\n exports: [PaginationComponent]\n})\nexport class PaginationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { CdkTrapFocus, A11yModule } from '@angular/cdk/a11y';
5
5
  import { ESCAPE, DOWN_ARROW } from '@angular/cdk/keycodes';
6
6
  import { CdkScrollable, Overlay, ViewportRuler, OverlayConfig, CdkOverlayOrigin } from '@angular/cdk/overlay';
7
7
  import { NgTemplateOutlet } from '@angular/common';
8
- import { KeyUtil, ResizeHandleDirective, ResizeDirective, resizeObservable, TemplateDirective, DynamicComponentService, RtlService, destroyObservable, isOdd } from '@fundamental-ngx/cdk/utils';
8
+ import { KeyUtil, ResizeHandleDirective, ResizeDirective, resizeObservable, TemplateModule, DynamicComponentService, RtlService, destroyObservable, isOdd } from '@fundamental-ngx/cdk/utils';
9
9
  import { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';
10
10
  import { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';
11
11
  import { takeUntilDestroyed, outputToObservable, toObservable } from '@angular/core/rxjs-interop';
@@ -497,12 +497,12 @@ class PopoverMobileComponent extends MobileModeBase {
497
497
  });
498
498
  }
499
499
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PopoverMobileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
500
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: PopoverMobileComponent, isStandalone: true, selector: "fd-popover-mobile", viewQueries: [{ propertyName: "_dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\" data-mobile-popover>\n <fd-dialog-header>\n <h1 fd-title [id]=\"titleId\">{{ title }}</h1>\n @if (this.mobileConfig.hasCloseButton) {\n <button fd-dialog-close-button [mobile]=\"true\" (click)=\"close()\"></button>\n }\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"viewBody\"></ng-template>\n </fd-dialog-body>\n @if (viewFooter) {\n <fd-dialog-footer>\n <ng-template [ngTemplateOutlet]=\"viewFooter\"></ng-template>\n </fd-dialog-footer>\n }\n </fd-dialog>\n</ng-template>\n", dependencies: [{ kind: "component", type: TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: DialogBodyComponent, selector: "fd-dialog-body", inputs: ["disablePaddings"] }, { kind: "component", type: DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
500
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: PopoverMobileComponent, isStandalone: true, selector: "fd-popover-mobile", viewQueries: [{ propertyName: "_dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\" data-mobile-popover>\n <fd-dialog-header>\n <h1 fd-title [id]=\"titleId\">{{ title }}</h1>\n @if (this.mobileConfig.hasCloseButton) {\n <button fd-dialog-close-button [mobile]=\"true\" (click)=\"close()\"></button>\n }\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"viewBody\"></ng-template>\n </fd-dialog-body>\n @if (viewFooter) {\n <fd-dialog-footer>\n <ng-template [ngTemplateOutlet]=\"viewFooter\"></ng-template>\n </fd-dialog-footer>\n }\n </fd-dialog>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: TemplateModule }, { kind: "component", type: TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: DialogBodyComponent, selector: "fd-dialog-body", inputs: ["disablePaddings"] }, { kind: "component", type: DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
501
501
  }
502
502
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: PopoverMobileComponent, decorators: [{
503
503
  type: Component,
504
504
  args: [{ selector: 'fd-popover-mobile', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
505
- TemplateDirective,
505
+ TemplateModule,
506
506
  TitleComponent,
507
507
  NgTemplateOutlet,
508
508
  DialogComponent,
@@ -884,6 +884,12 @@ class PopoverService {
884
884
  if (config.resizable !== undefined) {
885
885
  this.resizable.set(unwrap(config.resizable));
886
886
  }
887
+ if (config.bodyRole !== undefined) {
888
+ this._bodyRole = unwrap(config.bodyRole);
889
+ }
890
+ if (config.bodyId !== undefined) {
891
+ this._bodyId.set(unwrap(config.bodyId));
892
+ }
887
893
  if (config.isOpen !== undefined) {
888
894
  const isOpenValue = unwrap(config.isOpen);
889
895
  if (isOpenValue) {