@siemens/element-ng 49.13.0 → 51.0.0-rc.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 (229) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/siemens-element-ng-about.mjs +41 -25
  3. package/fesm2022/siemens-element-ng-about.mjs.map +1 -1
  4. package/fesm2022/siemens-element-ng-accordion.mjs +56 -39
  5. package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -1
  6. package/fesm2022/siemens-element-ng-action-modal.mjs +81 -51
  7. package/fesm2022/siemens-element-ng-action-modal.mjs.map +1 -1
  8. package/fesm2022/siemens-element-ng-ag-grid.mjs +15 -12
  9. package/fesm2022/siemens-element-ng-ag-grid.mjs.map +1 -1
  10. package/fesm2022/siemens-element-ng-application-header.mjs +142 -137
  11. package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
  12. package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs +34 -28
  13. package/fesm2022/siemens-element-ng-auto-collapsable-list.mjs.map +1 -1
  14. package/fesm2022/siemens-element-ng-autocomplete.mjs +27 -22
  15. package/fesm2022/siemens-element-ng-autocomplete.mjs.map +1 -1
  16. package/fesm2022/siemens-element-ng-avatar.mjs +31 -21
  17. package/fesm2022/siemens-element-ng-avatar.mjs.map +1 -1
  18. package/fesm2022/siemens-element-ng-badge.mjs +9 -8
  19. package/fesm2022/siemens-element-ng-badge.mjs.map +1 -1
  20. package/fesm2022/siemens-element-ng-breadcrumb-router.mjs +17 -14
  21. package/fesm2022/siemens-element-ng-breadcrumb-router.mjs.map +1 -1
  22. package/fesm2022/siemens-element-ng-breadcrumb.mjs +18 -15
  23. package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
  24. package/fesm2022/siemens-element-ng-card.mjs +71 -46
  25. package/fesm2022/siemens-element-ng-card.mjs.map +1 -1
  26. package/fesm2022/siemens-element-ng-carousel.mjs +55 -32
  27. package/fesm2022/siemens-element-ng-carousel.mjs.map +1 -1
  28. package/fesm2022/siemens-element-ng-chat-messages.mjs +175 -111
  29. package/fesm2022/siemens-element-ng-chat-messages.mjs.map +1 -1
  30. package/fesm2022/siemens-element-ng-circle-status.mjs +37 -24
  31. package/fesm2022/siemens-element-ng-circle-status.mjs.map +1 -1
  32. package/fesm2022/siemens-element-ng-color-picker.mjs +24 -16
  33. package/fesm2022/siemens-element-ng-color-picker.mjs.map +1 -1
  34. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs +52 -33
  35. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs.map +1 -1
  36. package/fesm2022/siemens-element-ng-common.mjs +12 -12
  37. package/fesm2022/siemens-element-ng-connection-strength.mjs +14 -12
  38. package/fesm2022/siemens-element-ng-connection-strength.mjs.map +1 -1
  39. package/fesm2022/siemens-element-ng-content-action-bar.mjs +35 -26
  40. package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -1
  41. package/fesm2022/siemens-element-ng-copyright-notice.mjs +19 -14
  42. package/fesm2022/siemens-element-ng-copyright-notice.mjs.map +1 -1
  43. package/fesm2022/siemens-element-ng-dashboard.mjs +327 -213
  44. package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
  45. package/fesm2022/siemens-element-ng-datatable.mjs +8 -8
  46. package/fesm2022/siemens-element-ng-datatable.mjs.map +1 -1
  47. package/fesm2022/siemens-element-ng-date-range-filter.mjs +119 -72
  48. package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
  49. package/fesm2022/siemens-element-ng-datepicker.mjs +358 -234
  50. package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
  51. package/fesm2022/siemens-element-ng-electron-titlebar.mjs +21 -16
  52. package/fesm2022/siemens-element-ng-electron-titlebar.mjs.map +1 -1
  53. package/fesm2022/siemens-element-ng-empty-state.mjs +15 -12
  54. package/fesm2022/siemens-element-ng-empty-state.mjs.map +1 -1
  55. package/fesm2022/siemens-element-ng-file-uploader.mjs +93 -81
  56. package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
  57. package/fesm2022/siemens-element-ng-filter-bar.mjs +29 -22
  58. package/fesm2022/siemens-element-ng-filter-bar.mjs.map +1 -1
  59. package/fesm2022/siemens-element-ng-filtered-search.mjs +243 -147
  60. package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
  61. package/fesm2022/siemens-element-ng-footer.mjs +12 -10
  62. package/fesm2022/siemens-element-ng-footer.mjs.map +1 -1
  63. package/fesm2022/siemens-element-ng-form.mjs +267 -84
  64. package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
  65. package/fesm2022/siemens-element-ng-formly-legacy.mjs +99 -0
  66. package/fesm2022/siemens-element-ng-formly-legacy.mjs.map +1 -0
  67. package/fesm2022/siemens-element-ng-formly.mjs +220 -315
  68. package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
  69. package/fesm2022/siemens-element-ng-header-dropdown.mjs +38 -29
  70. package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
  71. package/fesm2022/siemens-element-ng-help-button.mjs +5 -5
  72. package/fesm2022/siemens-element-ng-help-button.mjs.map +1 -1
  73. package/fesm2022/siemens-element-ng-icon.mjs +46 -47
  74. package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
  75. package/fesm2022/siemens-element-ng-info-page.mjs +17 -11
  76. package/fesm2022/siemens-element-ng-info-page.mjs.map +1 -1
  77. package/fesm2022/siemens-element-ng-inline-notification.mjs +19 -14
  78. package/fesm2022/siemens-element-ng-inline-notification.mjs.map +1 -1
  79. package/fesm2022/siemens-element-ng-ip-input.mjs +19 -15
  80. package/fesm2022/siemens-element-ng-ip-input.mjs.map +1 -1
  81. package/fesm2022/siemens-element-ng-landing-page.mjs +118 -72
  82. package/fesm2022/siemens-element-ng-landing-page.mjs.map +1 -1
  83. package/fesm2022/siemens-element-ng-language-switcher.mjs +16 -12
  84. package/fesm2022/siemens-element-ng-language-switcher.mjs.map +1 -1
  85. package/fesm2022/siemens-element-ng-link.mjs +31 -21
  86. package/fesm2022/siemens-element-ng-link.mjs.map +1 -1
  87. package/fesm2022/siemens-element-ng-list-details.mjs +73 -54
  88. package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -1
  89. package/fesm2022/siemens-element-ng-loading-spinner.mjs +42 -33
  90. package/fesm2022/siemens-element-ng-loading-spinner.mjs.map +1 -1
  91. package/fesm2022/siemens-element-ng-localization.mjs +14 -12
  92. package/fesm2022/siemens-element-ng-localization.mjs.map +1 -1
  93. package/fesm2022/siemens-element-ng-main-detail-container.mjs +46 -29
  94. package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -1
  95. package/fesm2022/siemens-element-ng-markdown-renderer.mjs +6 -5
  96. package/fesm2022/siemens-element-ng-markdown-renderer.mjs.map +1 -1
  97. package/fesm2022/siemens-element-ng-menu.mjs +56 -48
  98. package/fesm2022/siemens-element-ng-menu.mjs.map +1 -1
  99. package/fesm2022/siemens-element-ng-modal.mjs +12 -10
  100. package/fesm2022/siemens-element-ng-modal.mjs.map +1 -1
  101. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs +133 -94
  102. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs.map +1 -1
  103. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +117 -81
  104. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
  105. package/fesm2022/siemens-element-ng-navbar.mjs +67 -41
  106. package/fesm2022/siemens-element-ng-navbar.mjs.map +1 -1
  107. package/fesm2022/siemens-element-ng-notification-item.mjs +19 -11
  108. package/fesm2022/siemens-element-ng-notification-item.mjs.map +1 -1
  109. package/fesm2022/siemens-element-ng-number-input.mjs +38 -27
  110. package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -1
  111. package/fesm2022/siemens-element-ng-pagination.mjs +31 -20
  112. package/fesm2022/siemens-element-ng-pagination.mjs.map +1 -1
  113. package/fesm2022/siemens-element-ng-password-strength.mjs +31 -22
  114. package/fesm2022/siemens-element-ng-password-strength.mjs.map +1 -1
  115. package/fesm2022/siemens-element-ng-password-toggle.mjs +18 -13
  116. package/fesm2022/siemens-element-ng-password-toggle.mjs.map +1 -1
  117. package/fesm2022/siemens-element-ng-phone-number.mjs +121 -138
  118. package/fesm2022/siemens-element-ng-phone-number.mjs.map +1 -1
  119. package/fesm2022/siemens-element-ng-photo-upload.mjs +76 -45
  120. package/fesm2022/siemens-element-ng-photo-upload.mjs.map +1 -1
  121. package/fesm2022/siemens-element-ng-pills-input.mjs +63 -58
  122. package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -1
  123. package/fesm2022/siemens-element-ng-popover-legacy.mjs +43 -28
  124. package/fesm2022/siemens-element-ng-popover-legacy.mjs.map +1 -1
  125. package/fesm2022/siemens-element-ng-popover.mjs +33 -26
  126. package/fesm2022/siemens-element-ng-popover.mjs.map +1 -1
  127. package/fesm2022/siemens-element-ng-progressbar.mjs +23 -16
  128. package/fesm2022/siemens-element-ng-progressbar.mjs.map +1 -1
  129. package/fesm2022/siemens-element-ng-resize-observer.mjs +32 -43
  130. package/fesm2022/siemens-element-ng-resize-observer.mjs.map +1 -1
  131. package/fesm2022/siemens-element-ng-result-details-list.mjs +12 -10
  132. package/fesm2022/siemens-element-ng-result-details-list.mjs.map +1 -1
  133. package/fesm2022/siemens-element-ng-search-bar.mjs +32 -24
  134. package/fesm2022/siemens-element-ng-search-bar.mjs.map +1 -1
  135. package/fesm2022/siemens-element-ng-select.mjs +212 -154
  136. package/fesm2022/siemens-element-ng-select.mjs.map +1 -1
  137. package/fesm2022/siemens-element-ng-shadow-root.mjs +3 -3
  138. package/fesm2022/siemens-element-ng-side-panel.mjs +119 -75
  139. package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
  140. package/fesm2022/siemens-element-ng-skip-links.mjs +14 -13
  141. package/fesm2022/siemens-element-ng-skip-links.mjs.map +1 -1
  142. package/fesm2022/siemens-element-ng-slider.mjs +42 -28
  143. package/fesm2022/siemens-element-ng-slider.mjs.map +1 -1
  144. package/fesm2022/siemens-element-ng-split.mjs +268 -254
  145. package/fesm2022/siemens-element-ng-split.mjs.map +1 -1
  146. package/fesm2022/siemens-element-ng-status-bar.mjs +57 -47
  147. package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
  148. package/fesm2022/siemens-element-ng-status-counter.mjs +15 -11
  149. package/fesm2022/siemens-element-ng-status-counter.mjs.map +1 -1
  150. package/fesm2022/siemens-element-ng-status-toggle.mjs +22 -14
  151. package/fesm2022/siemens-element-ng-status-toggle.mjs.map +1 -1
  152. package/fesm2022/siemens-element-ng-summary-chip.mjs +25 -16
  153. package/fesm2022/siemens-element-ng-summary-chip.mjs.map +1 -1
  154. package/fesm2022/siemens-element-ng-summary-widget.mjs +27 -17
  155. package/fesm2022/siemens-element-ng-summary-widget.mjs.map +1 -1
  156. package/fesm2022/siemens-element-ng-system-banner.mjs +11 -8
  157. package/fesm2022/siemens-element-ng-system-banner.mjs.map +1 -1
  158. package/fesm2022/siemens-element-ng-tabs-legacy.mjs +16 -15
  159. package/fesm2022/siemens-element-ng-tabs-legacy.mjs.map +1 -1
  160. package/fesm2022/siemens-element-ng-tabs.mjs +59 -45
  161. package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
  162. package/fesm2022/siemens-element-ng-theme.mjs +5 -4
  163. package/fesm2022/siemens-element-ng-theme.mjs.map +1 -1
  164. package/fesm2022/siemens-element-ng-threshold.mjs +59 -40
  165. package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -1
  166. package/fesm2022/siemens-element-ng-toast-notification.mjs +45 -40
  167. package/fesm2022/siemens-element-ng-toast-notification.mjs.map +1 -1
  168. package/fesm2022/siemens-element-ng-tooltip.mjs +52 -54
  169. package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
  170. package/fesm2022/siemens-element-ng-tour.mjs +28 -19
  171. package/fesm2022/siemens-element-ng-tour.mjs.map +1 -1
  172. package/fesm2022/siemens-element-ng-translate.mjs +0 -1
  173. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  174. package/fesm2022/siemens-element-ng-tree-view.mjs +92 -73
  175. package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
  176. package/fesm2022/siemens-element-ng-typeahead.mjs +75 -67
  177. package/fesm2022/siemens-element-ng-typeahead.mjs.map +1 -1
  178. package/fesm2022/siemens-element-ng-wizard.mjs +72 -48
  179. package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -1
  180. package/formly-legacy/package.json +4 -0
  181. package/package.json +20 -22
  182. package/schematics/migration.json +4 -4
  183. package/schematics/migrations/data/class-member-replacement.js +1 -19
  184. package/schematics/migrations/data/component-property-names.js +1 -25
  185. package/schematics/migrations/data/element-class-changes.js +1 -28
  186. package/schematics/migrations/data/element-migration-data.js +2 -0
  187. package/schematics/migrations/data/element-selectors.js +1 -11
  188. package/schematics/migrations/data/index.js +0 -4
  189. package/schematics/migrations/data/migration-test-data.js +9 -6
  190. package/schematics/migrations/data/provider-function-removals.js +7 -0
  191. package/schematics/migrations/data/symbol-removals.js +7 -7
  192. package/schematics/migrations/data/symbol-renaming.js +1 -48
  193. package/schematics/migrations/element-migration/element-migration.js +3 -6
  194. package/schematics/migrations/utilities/import-removal.js +39 -0
  195. package/schematics/migrations/utilities/index.js +2 -0
  196. package/schematics/migrations/utilities/provider-function-removal.migration.js +116 -0
  197. package/schematics/ng-update/index.js +1 -1
  198. package/schematics/ng-update/{migrate-to-v49.js → migrate-to-v51.js} +2 -2
  199. package/template-i18n.json +3 -6
  200. package/types/siemens-element-ng-application-header.d.ts +1 -21
  201. package/types/siemens-element-ng-chat-messages.d.ts +6 -4
  202. package/types/siemens-element-ng-circle-status.d.ts +1 -1
  203. package/types/siemens-element-ng-date-range-filter.d.ts +1 -1
  204. package/types/siemens-element-ng-datepicker.d.ts +1 -12
  205. package/types/siemens-element-ng-file-uploader.d.ts +5 -23
  206. package/types/siemens-element-ng-filtered-search.d.ts +1 -1
  207. package/types/siemens-element-ng-form.d.ts +134 -37
  208. package/types/siemens-element-ng-formly-legacy.d.ts +40 -0
  209. package/types/siemens-element-ng-formly.d.ts +34 -167
  210. package/types/siemens-element-ng-icon.d.ts +2 -19
  211. package/types/siemens-element-ng-navbar-vertical-next.d.ts +6 -1
  212. package/types/siemens-element-ng-notification-item.d.ts +12 -0
  213. package/types/siemens-element-ng-phone-number.d.ts +5 -8
  214. package/types/siemens-element-ng-resize-observer.d.ts +0 -17
  215. package/types/siemens-element-ng-split.d.ts +95 -63
  216. package/types/siemens-element-ng-status-bar.d.ts +5 -13
  217. package/types/siemens-element-ng-status-counter.d.ts +1 -1
  218. package/types/siemens-element-ng-toast-notification.d.ts +0 -1
  219. package/types/siemens-element-ng-translate.d.ts +1 -5
  220. package/fesm2022/siemens-element-ng-icon-status.mjs +0 -46
  221. package/fesm2022/siemens-element-ng-icon-status.mjs.map +0 -1
  222. package/fesm2022/siemens-element-ng-sort-bar.mjs +0 -99
  223. package/fesm2022/siemens-element-ng-sort-bar.mjs.map +0 -1
  224. package/icon-status/package.json +0 -4
  225. package/schematics/vitest-setup.js +0 -5
  226. package/sort-bar/package.json +0 -4
  227. package/types/siemens-element-ng-icon-status.d.ts +0 -25
  228. package/types/siemens-element-ng-sort-bar.d.ts +0 -59
  229. /package/{LICENSE.md → LICENSE} +0 -0
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, computed, ElementRef, signal, Directive, input, booleanAttribute, contentChildren, linkedSignal, DestroyRef, viewChild, ChangeDetectorRef, effect, ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { inject, computed, ElementRef, signal, Directive, input, booleanAttribute, contentChildren, linkedSignal, DestroyRef, viewChild, ChangeDetectorRef, effect, Component } from '@angular/core';
3
3
  import { toSignal, toObservable } from '@angular/core/rxjs-interop';
4
4
  import { elementPause, elementPlay, elementRight2, elementLeft2 } from '@siemens/element-icons';
5
5
  import { addIcons, SiIconComponent } from '@siemens/element-ng/icon';
@@ -18,15 +18,17 @@ class SiCarouselItemDirective {
18
18
  return true;
19
19
  }
20
20
  return false;
21
- }, ...(ngDevMode ? [{ debugName: "isVisible" }] : []));
21
+ }, /* @ts-ignore */
22
+ ...(ngDevMode ? [{ debugName: "isVisible" }] : /* istanbul ignore next */ []));
22
23
  /** @internal */
23
24
  elementRef = inject(ElementRef);
24
25
  /** @internal */
25
- order = signal(0, ...(ngDevMode ? [{ debugName: "order" }] : []));
26
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiCarouselItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
27
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.8", type: SiCarouselItemDirective, isStandalone: true, selector: "[siCarouselItem]", host: { attributes: { "role": "group" }, properties: { "style.order": "order()", "attr.aria-roledescription": "carousel.translatedSlideRoleDescription()", "attr.inert": "isVisible() ? null : \"\"", "attr.aria-hidden": "isVisible() ? null : \"true\"" }, styleAttribute: "flex-shrink: 0; flex-basis: 100%; scroll-snap-align: center;" }, ngImport: i0 });
26
+ order = signal(0, /* @ts-ignore */
27
+ ...(ngDevMode ? [{ debugName: "order" }] : /* istanbul ignore next */ []));
28
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiCarouselItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
29
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: SiCarouselItemDirective, isStandalone: true, selector: "[siCarouselItem]", host: { attributes: { "role": "group" }, properties: { "style.order": "order()", "attr.aria-roledescription": "carousel.translatedSlideRoleDescription()", "attr.inert": "isVisible() ? null : \"\"", "attr.aria-hidden": "isVisible() ? null : \"true\"" }, styleAttribute: "flex-shrink: 0; flex-basis: 100%; scroll-snap-align: center;" }, ngImport: i0 });
28
30
  }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiCarouselItemDirective, decorators: [{
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiCarouselItemDirective, decorators: [{
30
32
  type: Directive,
31
33
  args: [{
32
34
  selector: '[siCarouselItem]',
@@ -104,19 +106,21 @@ class SiCarouselComponent {
104
106
  * When `true`, the carousel shows one slide per page and hides pagination controls.
105
107
  * @defaultValue false
106
108
  * */
107
- hidePageControls = input(false, { ...(ngDevMode ? { debugName: "hidePageControls" } : {}), transform: booleanAttribute });
109
+ hidePageControls = input(false, { ...(ngDevMode ? { debugName: "hidePageControls" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
108
110
  /**
109
111
  * Enables or configures auto-play for the carousel. When set to `true`, the carousel automatically
110
112
  * navigates to the next slide every 5000 milliseconds (5 seconds). Pass a positive number to set a
111
113
  * custom interval in milliseconds. Pass `false` to disable auto-play.
112
114
  * @defaultValue false
113
115
  * */
114
- autoPlay = input(false, ...(ngDevMode ? [{ debugName: "autoPlay" }] : []));
116
+ autoPlay = input(false, /* @ts-ignore */
117
+ ...(ngDevMode ? [{ debugName: "autoPlay" }] : /* istanbul ignore next */ []));
115
118
  /**
116
119
  * Aria role of the carousel element. Can be set to 'region' or 'group' depending on the desired accessibility semantics.
117
120
  * @defaultValue 'region'
118
121
  * */
119
- ariaRole = input('region', ...(ngDevMode ? [{ debugName: "ariaRole" }] : []));
122
+ ariaRole = input('region', /* @ts-ignore */
123
+ ...(ngDevMode ? [{ debugName: "ariaRole" }] : /* istanbul ignore next */ []));
120
124
  /**
121
125
  * Aria label for the previous button, used for accessibility purposes.
122
126
  * @defaultValue
@@ -124,7 +128,8 @@ class SiCarouselComponent {
124
128
  * t(() => $localize`:@@SI_CAROUSEL.PREVIOUS:Previous slide`)
125
129
  * ```
126
130
  */
127
- previousButtonAriaLabel = input(t(() => $localize `:@@SI_CAROUSEL.PREVIOUS:Previous slide`), ...(ngDevMode ? [{ debugName: "previousButtonAriaLabel" }] : []));
131
+ previousButtonAriaLabel = input(t(() => $localize `:@@SI_CAROUSEL.PREVIOUS:Previous slide`), /* @ts-ignore */
132
+ ...(ngDevMode ? [{ debugName: "previousButtonAriaLabel" }] : /* istanbul ignore next */ []));
128
133
  /**
129
134
  * Aria label for the next button, used for accessibility purposes.
130
135
  * @defaultValue
@@ -132,14 +137,16 @@ class SiCarouselComponent {
132
137
  * t(() => $localize`:@@SI_CAROUSEL.NEXT:Next slide`)
133
138
  * ```
134
139
  */
135
- nextButtonAriaLabel = input(t(() => $localize `:@@SI_CAROUSEL.NEXT:Next slide`), ...(ngDevMode ? [{ debugName: "nextButtonAriaLabel" }] : []));
140
+ nextButtonAriaLabel = input(t(() => $localize `:@@SI_CAROUSEL.NEXT:Next slide`), /* @ts-ignore */
141
+ ...(ngDevMode ? [{ debugName: "nextButtonAriaLabel" }] : /* istanbul ignore next */ []));
136
142
  /**
137
143
  * @defaultValue
138
144
  * ```
139
145
  * t(() => $localize`:@@SI_CAROUSEL.SLIDE_PAGE:Slide {{page}} of {{total}}`)
140
146
  * ```
141
147
  */
142
- slidePageAriaLabel = input(t(() => $localize `:@@SI_CAROUSEL.SLIDE_PAGE:Slide {{page}} of {{total}}`), ...(ngDevMode ? [{ debugName: "slidePageAriaLabel" }] : []));
148
+ slidePageAriaLabel = input(t(() => $localize `:@@SI_CAROUSEL.SLIDE_PAGE:Slide {{page}} of {{total}}`), /* @ts-ignore */
149
+ ...(ngDevMode ? [{ debugName: "slidePageAriaLabel" }] : /* istanbul ignore next */ []));
143
150
  /**
144
151
  * Label for the play button when autoplay is paused.
145
152
  * @defaultValue
@@ -147,7 +154,8 @@ class SiCarouselComponent {
147
154
  * t(() => $localize`:@@SI_CAROUSEL.PLAY:Play`)
148
155
  * ```
149
156
  */
150
- playButtonLabel = input(t(() => $localize `:@@SI_CAROUSEL.PLAY:Play`), ...(ngDevMode ? [{ debugName: "playButtonLabel" }] : []));
157
+ playButtonLabel = input(t(() => $localize `:@@SI_CAROUSEL.PLAY:Play`), /* @ts-ignore */
158
+ ...(ngDevMode ? [{ debugName: "playButtonLabel" }] : /* istanbul ignore next */ []));
151
159
  /**
152
160
  * Label for the pause button when autoplay is active.
153
161
  * @defaultValue
@@ -155,7 +163,8 @@ class SiCarouselComponent {
155
163
  * t(() => $localize`:@@SI_CAROUSEL.PAUSE:Pause`)
156
164
  * ```
157
165
  */
158
- pauseButtonLabel = input(t(() => $localize `:@@SI_CAROUSEL.PAUSE:Pause`), ...(ngDevMode ? [{ debugName: "pauseButtonLabel" }] : []));
166
+ pauseButtonLabel = input(t(() => $localize `:@@SI_CAROUSEL.PAUSE:Pause`), /* @ts-ignore */
167
+ ...(ngDevMode ? [{ debugName: "pauseButtonLabel" }] : /* istanbul ignore next */ []));
159
168
  /**
160
169
  * Role description for the carousel container, used for accessibility purposes.
161
170
  * @defaultValue
@@ -163,7 +172,8 @@ class SiCarouselComponent {
163
172
  * t(() => $localize`:@@SI_CAROUSEL.ROLE_DESCRIPTION:carousel`)
164
173
  * ```
165
174
  */
166
- carouselRoleDescription = input(t(() => $localize `:@@SI_CAROUSEL.ROLE_DESCRIPTION:carousel`), ...(ngDevMode ? [{ debugName: "carouselRoleDescription" }] : []));
175
+ carouselRoleDescription = input(t(() => $localize `:@@SI_CAROUSEL.ROLE_DESCRIPTION:carousel`), /* @ts-ignore */
176
+ ...(ngDevMode ? [{ debugName: "carouselRoleDescription" }] : /* istanbul ignore next */ []));
167
177
  /**
168
178
  * Role description for each slide, used for accessibility purposes.
169
179
  * @defaultValue
@@ -171,7 +181,8 @@ class SiCarouselComponent {
171
181
  * t(() => $localize`:@@SI_CAROUSEL.SLIDE_ROLE_DESCRIPTION:Slide`)
172
182
  * ```
173
183
  */
174
- slideRoleDescription = input(t(() => $localize `:@@SI_CAROUSEL.SLIDE_ROLE_DESCRIPTION:Slide`), ...(ngDevMode ? [{ debugName: "slideRoleDescription" }] : []));
184
+ slideRoleDescription = input(t(() => $localize `:@@SI_CAROUSEL.SLIDE_ROLE_DESCRIPTION:Slide`), /* @ts-ignore */
185
+ ...(ngDevMode ? [{ debugName: "slideRoleDescription" }] : /* istanbul ignore next */ []));
175
186
  /** @internal */
176
187
  translatedSlideRoleDescription = toSignal(toObservable(this.slideRoleDescription).pipe(switchMap(key => this.translateService.translateAsync(key))), { initialValue: '' });
177
188
  /** @internal */
@@ -181,16 +192,25 @@ class SiCarouselComponent {
181
192
  return this.items()[currentPage].elementRef;
182
193
  }
183
194
  return null;
184
- }, ...(ngDevMode ? [{ debugName: "currentActiveSlide" }] : []));
195
+ }, /* @ts-ignore */
196
+ ...(ngDevMode ? [{ debugName: "currentActiveSlide" }] : /* istanbul ignore next */ []));
185
197
  translatedCarouselRoleDescription = toSignal(toObservable(this.carouselRoleDescription).pipe(switchMap(key => this.translateService.translateAsync(key))), { initialValue: '' });
186
- items = contentChildren(SiCarouselItemDirective, ...(ngDevMode ? [{ debugName: "items" }] : []));
187
- currentPage = linkedSignal(() => this.items().length ? 0 : null, ...(ngDevMode ? [{ debugName: "currentPage" }] : []));
188
- isPaused = signal(false, ...(ngDevMode ? [{ debugName: "isPaused" }] : []));
189
- totalPages = computed(() => this.items().length, ...(ngDevMode ? [{ debugName: "totalPages" }] : []));
190
- edgeLeftIndex = signal(0, ...(ngDevMode ? [{ debugName: "edgeLeftIndex" }] : []));
191
- edgeRightIndex = signal(MAX_PAGES - 1, ...(ngDevMode ? [{ debugName: "edgeRightIndex" }] : []));
192
- insufficientSpace = signal(false, ...(ngDevMode ? [{ debugName: "insufficientSpace" }] : []));
193
- pageControlContainerMinWidth = signal(0, ...(ngDevMode ? [{ debugName: "pageControlContainerMinWidth" }] : []));
198
+ items = contentChildren(SiCarouselItemDirective, /* @ts-ignore */
199
+ ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
200
+ currentPage = linkedSignal(() => this.items().length ? 0 : null, /* @ts-ignore */
201
+ ...(ngDevMode ? [{ debugName: "currentPage" }] : /* istanbul ignore next */ []));
202
+ isPaused = signal(false, /* @ts-ignore */
203
+ ...(ngDevMode ? [{ debugName: "isPaused" }] : /* istanbul ignore next */ []));
204
+ totalPages = computed(() => this.items().length, /* @ts-ignore */
205
+ ...(ngDevMode ? [{ debugName: "totalPages" }] : /* istanbul ignore next */ []));
206
+ edgeLeftIndex = signal(0, /* @ts-ignore */
207
+ ...(ngDevMode ? [{ debugName: "edgeLeftIndex" }] : /* istanbul ignore next */ []));
208
+ edgeRightIndex = signal(MAX_PAGES - 1, /* @ts-ignore */
209
+ ...(ngDevMode ? [{ debugName: "edgeRightIndex" }] : /* istanbul ignore next */ []));
210
+ insufficientSpace = signal(false, /* @ts-ignore */
211
+ ...(ngDevMode ? [{ debugName: "insufficientSpace" }] : /* istanbul ignore next */ []));
212
+ pageControlContainerMinWidth = signal(0, /* @ts-ignore */
213
+ ...(ngDevMode ? [{ debugName: "pageControlContainerMinWidth" }] : /* istanbul ignore next */ []));
194
214
  icons = addIcons({ elementLeft2, elementRight2, elementPlay, elementPause });
195
215
  autoPlayDuration = computed(() => {
196
216
  const autoPlayValue = this.autoPlay();
@@ -198,7 +218,8 @@ class SiCarouselComponent {
198
218
  return autoPlayValue ? 5000 : 0;
199
219
  }
200
220
  return autoPlayValue > 0 ? autoPlayValue : 0;
201
- }, ...(ngDevMode ? [{ debugName: "autoPlayDuration" }] : []));
221
+ }, /* @ts-ignore */
222
+ ...(ngDevMode ? [{ debugName: "autoPlayDuration" }] : /* istanbul ignore next */ []));
202
223
  intervalId = null;
203
224
  scrollObserver = null;
204
225
  /** requestAnimationFrame id of the running scroll animation, or null when idle. */
@@ -211,8 +232,10 @@ class SiCarouselComponent {
211
232
  ordersModified = false;
212
233
  destroyRef = inject(DestroyRef);
213
234
  viewport = viewChild.required('viewport');
214
- pageControl = viewChild('pageControl', ...(ngDevMode ? [{ debugName: "pageControl" }] : []));
215
- playPauseBtn = viewChild('playPauseBtn', ...(ngDevMode ? [{ debugName: "playPauseBtn" }] : []));
235
+ pageControl = viewChild('pageControl', /* @ts-ignore */
236
+ ...(ngDevMode ? [{ debugName: "pageControl" }] : /* istanbul ignore next */ []));
237
+ playPauseBtn = viewChild('playPauseBtn', /* @ts-ignore */
238
+ ...(ngDevMode ? [{ debugName: "playPauseBtn" }] : /* istanbul ignore next */ []));
216
239
  translateService = injectSiTranslateService();
217
240
  cdRef = inject(ChangeDetectorRef);
218
241
  constructor() {
@@ -516,12 +539,12 @@ class SiCarouselComponent {
516
539
  this.edgeLeftIndex.set(current - MAX_PAGES + 1);
517
540
  }
518
541
  }
519
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiCarouselComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
520
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiCarouselComponent, isStandalone: true, selector: "si-carousel", inputs: { hidePageControls: { classPropertyName: "hidePageControls", publicName: "hidePageControls", isSignal: true, isRequired: false, transformFunction: null }, autoPlay: { classPropertyName: "autoPlay", publicName: "autoPlay", isSignal: true, isRequired: false, transformFunction: null }, ariaRole: { classPropertyName: "ariaRole", publicName: "ariaRole", isSignal: true, isRequired: false, transformFunction: null }, previousButtonAriaLabel: { classPropertyName: "previousButtonAriaLabel", publicName: "previousButtonAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, nextButtonAriaLabel: { classPropertyName: "nextButtonAriaLabel", publicName: "nextButtonAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, slidePageAriaLabel: { classPropertyName: "slidePageAriaLabel", publicName: "slidePageAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, playButtonLabel: { classPropertyName: "playButtonLabel", publicName: "playButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, pauseButtonLabel: { classPropertyName: "pauseButtonLabel", publicName: "pauseButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, carouselRoleDescription: { classPropertyName: "carouselRoleDescription", publicName: "carouselRoleDescription", isSignal: true, isRequired: false, transformFunction: null }, slideRoleDescription: { classPropertyName: "slideRoleDescription", publicName: "slideRoleDescription", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.role": "ariaRole()", "attr.aria-roledescription": "translatedCarouselRoleDescription()", "style.min-width.px": "pageControlContainerMinWidth()" } }, queries: [{ propertyName: "items", predicate: SiCarouselItemDirective, isSignal: true }], viewQueries: [{ propertyName: "viewport", first: true, predicate: ["viewport"], descendants: true, isSignal: true }, { propertyName: "pageControl", first: true, predicate: ["pageControl"], descendants: true, isSignal: true }, { propertyName: "playPauseBtn", first: true, predicate: ["playPauseBtn"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"carousel-body d-flex flex-grow-1 align-items-center gap-2 min-h-0\">\n <div #viewport class=\"carousel-viewport flex-grow-1 align-self-stretch\" tabindex=\"0\">\n <div class=\"carousel-track h-100\">\n <ng-content />\n </div>\n </div>\n</div>\n@if ((!hidePageControls() || autoPlay()) && totalPages() > 1) {\n <div\n class=\"position-relative d-flex justify-content-center align-items-center mt-4\"\n (siResizeObserver)=\"onResize($event)\"\n >\n @if (!hidePageControls()) {\n <div #pageControl class=\"d-flex align-items-center gap-2\">\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0\"\n [aria-label]=\"previousButtonAriaLabel() | translate\"\n (click)=\"previous()\"\n >\n <si-icon [icon]=\"icons.elementLeft2\"\n /></button>\n <div class=\"d-flex align-items-center\">\n <div\n #dotBtn\n class=\"btn btn-tertiary-ghost btn-icon btn-sm pe-none\"\n [class.opacity-0]=\"totalPages() <= 5\"\n [class.position-absolute]=\"totalPages() <= 5\"\n >\n <span class=\"carousel-pager-small-dot d-block rounded-circle\"></span>\n </div>\n <div\n class=\"d-flex overflow-hidden\"\n [style.width.px]=\"dotBtn.clientWidth * (totalPages() > 5 ? 5 : totalPages())\"\n >\n <div\n class=\"d-flex page-buttons\"\n [style.transform]=\"'translateX(-' + edgeLeftIndex() * dotBtn.clientWidth + 'px)'\"\n >\n @for (page of items(); track page) {\n <button\n type=\"button\"\n class=\"btn btn-tertiary-ghost focus-inside btn-icon btn-sm d-flex align-items-center justify-content-center\"\n [aria-label]=\"\n slidePageAriaLabel() | translate: { page: $index + 1, total: totalPages() }\n \"\n [tabIndex]=\"$index >= edgeLeftIndex() && $index <= edgeRightIndex() ? 0 : -1\"\n [aria-current]=\"currentPage() === $index ? 'true' : 'false'\"\n (click)=\"goToSlide($index)\"\n ><span\n class=\"carousel-pager-dot d-block\"\n [class.active]=\"currentPage() === $index\"\n [class.rounded-circle]=\"currentPage() !== $index\"\n ></span\n ></button>\n }\n </div>\n </div>\n <div\n #dotBtn\n class=\"btn btn-tertiary-ghost btn-icon btn-sm pe-none\"\n [class.opacity-0]=\"totalPages() <= 5\"\n [class.position-absolute]=\"totalPages() <= 5\"\n >\n <span class=\"carousel-pager-small-dot d-block rounded-circle\"></span>\n </div>\n </div>\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0\"\n [aria-label]=\"nextButtonAriaLabel() | translate\"\n (click)=\"next()\"\n >\n <si-icon [icon]=\"icons.elementRight2\"\n /></button>\n </div>\n }\n\n @if (autoPlay()) {\n <div\n #playPauseBtn\n class=\"position-absolute top-0 end-0\"\n [class.invisible]=\"insufficientSpace()\"\n >\n <button\n type=\"button\"\n class=\"btn btn-tertiary-ghost ms-2\"\n [aria-label]=\"(isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\"\n (click)=\"toggleAutoPlay()\"\n >\n <si-icon class=\"icon\" [icon]=\"isPaused() ? icons.elementPlay : icons.elementPause\" />\n <span aria-hidden=\"true\">{{\n (isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\n }}</span>\n </button>\n </div>\n @if (insufficientSpace()) {\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0 align-items-center position-absolute top-0 end-0 ms-2\"\n [aria-label]=\"(isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\"\n (click)=\"toggleAutoPlay()\"\n >\n <si-icon [icon]=\"isPaused() ? icons.elementPlay : icons.elementPause\" />\n </button>\n }\n }\n </div>\n}\n", styles: [":host{--si-carousel-gap: 16px;display:flex;flex-direction:column;flex:1 1 0}.carousel-viewport{min-block-size:0;overflow-y:hidden;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none}.page-buttons{transition:transform calc(.5s * var(--element-animations-enabled, 1)) ease}.carousel-track{display:flex;gap:var(--si-carousel-gap)}.carousel-pager-dot{inline-size:.375rem;block-size:.375rem;background-color:var(--element-ui-3);transition:background-color calc(.5s * var(--element-animations-enabled, 1)) ease}.carousel-pager-dot.active{transition:inline-size calc(.5s * var(--element-animations-enabled, 1)) ease,background-color calc(.5s * var(--element-animations-enabled, 1)) ease;inline-size:.75rem;background-color:var(--element-ui-0);border-radius:6.25rem}.carousel-pager-small-dot{background-color:var(--element-ui-3);inline-size:.25rem;block-size:.25rem}\n"], dependencies: [{ kind: "directive", type: SiResizeObserverDirective, selector: "[siResizeObserver]", inputs: ["resizeThrottle", "emitInitial"], outputs: ["siResizeObserver"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
542
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiCarouselComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
543
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: SiCarouselComponent, isStandalone: true, selector: "si-carousel", inputs: { hidePageControls: { classPropertyName: "hidePageControls", publicName: "hidePageControls", isSignal: true, isRequired: false, transformFunction: null }, autoPlay: { classPropertyName: "autoPlay", publicName: "autoPlay", isSignal: true, isRequired: false, transformFunction: null }, ariaRole: { classPropertyName: "ariaRole", publicName: "ariaRole", isSignal: true, isRequired: false, transformFunction: null }, previousButtonAriaLabel: { classPropertyName: "previousButtonAriaLabel", publicName: "previousButtonAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, nextButtonAriaLabel: { classPropertyName: "nextButtonAriaLabel", publicName: "nextButtonAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, slidePageAriaLabel: { classPropertyName: "slidePageAriaLabel", publicName: "slidePageAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, playButtonLabel: { classPropertyName: "playButtonLabel", publicName: "playButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, pauseButtonLabel: { classPropertyName: "pauseButtonLabel", publicName: "pauseButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, carouselRoleDescription: { classPropertyName: "carouselRoleDescription", publicName: "carouselRoleDescription", isSignal: true, isRequired: false, transformFunction: null }, slideRoleDescription: { classPropertyName: "slideRoleDescription", publicName: "slideRoleDescription", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.role": "ariaRole()", "attr.aria-roledescription": "translatedCarouselRoleDescription()", "style.min-width.px": "pageControlContainerMinWidth()" } }, queries: [{ propertyName: "items", predicate: SiCarouselItemDirective, isSignal: true }], viewQueries: [{ propertyName: "viewport", first: true, predicate: ["viewport"], descendants: true, isSignal: true }, { propertyName: "pageControl", first: true, predicate: ["pageControl"], descendants: true, isSignal: true }, { propertyName: "playPauseBtn", first: true, predicate: ["playPauseBtn"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"carousel-body d-flex flex-grow-1 align-items-center gap-2 min-h-0\">\n <div #viewport class=\"carousel-viewport flex-grow-1 align-self-stretch\" tabindex=\"0\">\n <div class=\"carousel-track h-100\">\n <ng-content />\n </div>\n </div>\n</div>\n@if ((!hidePageControls() || autoPlay()) && totalPages() > 1) {\n <div\n class=\"position-relative d-flex justify-content-center align-items-center mt-4\"\n (siResizeObserver)=\"onResize($event)\"\n >\n @if (!hidePageControls()) {\n <div #pageControl class=\"d-flex align-items-center gap-2\">\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0\"\n [aria-label]=\"previousButtonAriaLabel() | translate\"\n (click)=\"previous()\"\n >\n <si-icon [icon]=\"icons.elementLeft2\"\n /></button>\n <div class=\"d-flex align-items-center\">\n <div\n #dotBtn\n class=\"btn btn-tertiary-ghost btn-icon btn-sm pe-none\"\n [class.opacity-0]=\"totalPages() <= 5\"\n [class.position-absolute]=\"totalPages() <= 5\"\n >\n <span class=\"carousel-pager-small-dot d-block rounded-circle\"></span>\n </div>\n <div\n class=\"d-flex overflow-hidden\"\n [style.width.px]=\"dotBtn.clientWidth * (totalPages() > 5 ? 5 : totalPages())\"\n >\n <div\n class=\"d-flex page-buttons\"\n [style.transform]=\"'translateX(-' + edgeLeftIndex() * dotBtn.clientWidth + 'px)'\"\n >\n @for (page of items(); track page) {\n <button\n type=\"button\"\n class=\"btn btn-tertiary-ghost focus-inside btn-icon btn-sm d-flex align-items-center justify-content-center\"\n [aria-label]=\"\n slidePageAriaLabel() | translate: { page: $index + 1, total: totalPages() }\n \"\n [tabIndex]=\"$index >= edgeLeftIndex() && $index <= edgeRightIndex() ? 0 : -1\"\n [aria-current]=\"currentPage() === $index ? 'true' : 'false'\"\n (click)=\"goToSlide($index)\"\n ><span\n class=\"carousel-pager-dot d-block\"\n [class.active]=\"currentPage() === $index\"\n [class.rounded-circle]=\"currentPage() !== $index\"\n ></span\n ></button>\n }\n </div>\n </div>\n <div\n #dotBtn\n class=\"btn btn-tertiary-ghost btn-icon btn-sm pe-none\"\n [class.opacity-0]=\"totalPages() <= 5\"\n [class.position-absolute]=\"totalPages() <= 5\"\n >\n <span class=\"carousel-pager-small-dot d-block rounded-circle\"></span>\n </div>\n </div>\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0\"\n [aria-label]=\"nextButtonAriaLabel() | translate\"\n (click)=\"next()\"\n >\n <si-icon [icon]=\"icons.elementRight2\"\n /></button>\n </div>\n }\n\n @if (autoPlay()) {\n <div\n #playPauseBtn\n class=\"position-absolute top-0 end-0\"\n [class.invisible]=\"insufficientSpace()\"\n >\n <button\n type=\"button\"\n class=\"btn btn-tertiary-ghost ms-2\"\n [aria-label]=\"(isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\"\n (click)=\"toggleAutoPlay()\"\n >\n <si-icon class=\"icon\" [icon]=\"isPaused() ? icons.elementPlay : icons.elementPause\" />\n <span aria-hidden=\"true\">{{\n (isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\n }}</span>\n </button>\n </div>\n @if (insufficientSpace()) {\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0 align-items-center position-absolute top-0 end-0 ms-2\"\n [aria-label]=\"(isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\"\n (click)=\"toggleAutoPlay()\"\n >\n <si-icon [icon]=\"isPaused() ? icons.elementPlay : icons.elementPause\" />\n </button>\n }\n }\n </div>\n}\n", styles: [":host{--si-carousel-gap: 16px;display:flex;flex-direction:column;flex:1 1 0}.carousel-viewport{min-block-size:0;overflow-y:hidden;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none}.page-buttons{transition:transform calc(.5s * var(--element-animations-enabled, 1)) ease}.carousel-track{display:flex;gap:var(--si-carousel-gap)}.carousel-pager-dot{inline-size:.375rem;block-size:.375rem;background-color:var(--element-ui-3);transition:background-color calc(.5s * var(--element-animations-enabled, 1)) ease}.carousel-pager-dot.active{transition:inline-size calc(.5s * var(--element-animations-enabled, 1)) ease,background-color calc(.5s * var(--element-animations-enabled, 1)) ease;inline-size:.75rem;background-color:var(--element-ui-0);border-radius:6.25rem}.carousel-pager-small-dot{background-color:var(--element-ui-3);inline-size:.25rem;block-size:.25rem}\n"], dependencies: [{ kind: "directive", type: SiResizeObserverDirective, selector: "[siResizeObserver]", inputs: ["resizeThrottle", "emitInitial"], outputs: ["siResizeObserver"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
521
544
  }
522
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiCarouselComponent, decorators: [{
545
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SiCarouselComponent, decorators: [{
523
546
  type: Component,
524
- args: [{ selector: 'si-carousel', imports: [SiTranslatePipe, SiResizeObserverDirective, SiIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: {
547
+ args: [{ selector: 'si-carousel', imports: [SiTranslatePipe, SiResizeObserverDirective, SiIconComponent], host: {
525
548
  '[attr.role]': 'ariaRole()',
526
549
  '[attr.aria-roledescription]': 'translatedCarouselRoleDescription()',
527
550
  '[style.min-width.px]': 'pageControlContainerMinWidth()'
@@ -1 +1 @@
1
- {"version":3,"file":"siemens-element-ng-carousel.mjs","sources":["../../../../projects/element-ng/carousel/si-carousel-item.directive.ts","../../../../projects/element-ng/carousel/si-carousel.component.ts","../../../../projects/element-ng/carousel/si-carousel.component.html","../../../../projects/element-ng/carousel/index.ts","../../../../projects/element-ng/carousel/siemens-element-ng-carousel.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { computed, Directive, ElementRef, inject, signal } from '@angular/core';\n\nimport { SiCarouselComponent } from './si-carousel.component';\n\n@Directive({\n selector: '[siCarouselItem]',\n host: {\n style: 'flex-shrink: 0; flex-basis: 100%; scroll-snap-align: center;',\n '[style.order]': 'order()',\n 'role': 'group',\n '[attr.aria-roledescription]': 'carousel.translatedSlideRoleDescription()',\n '[attr.inert]': 'isVisible() ? null : \"\"',\n '[attr.aria-hidden]': 'isVisible() ? null : \"true\"'\n }\n})\nexport class SiCarouselItemDirective {\n protected readonly carousel = inject(SiCarouselComponent);\n protected readonly isVisible = computed(() => {\n if (this.carousel.currentActiveSlide() === this.elementRef) {\n return true;\n }\n return false;\n });\n /** @internal */\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n /** @internal */\n readonly order = signal(0);\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n signal,\n viewChild\n} from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { elementLeft2, elementRight2, elementPause, elementPlay } from '@siemens/element-icons';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiResizeObserverDirective } from '@siemens/element-ng/resize-observer';\nimport {\n injectSiTranslateService,\n SiTranslatePipe,\n t\n} from '@siemens/element-translate-ng/translate';\nimport { switchMap } from 'rxjs';\n\nimport { SiCarouselItemDirective } from './si-carousel-item.directive';\n\n/**\n * Maximum number of pagination dots shown in the pager.\n */\nconst MAX_PAGES = 5;\n\n/**\n * Time constant (in milliseconds) for the exponential-smoothing scroll animation. Smaller values\n * settle faster. The animation is retargetable, so rapid clicks keep adjusting the same animation\n * towards the latest slide instead of starting separate, queued scrolls.\n */\nconst SCROLL_SMOOTHING_TAU = 100;\n\n/**\n * Assumed duration (in milliseconds) of the first animation frame, used before two timestamps are\n * available to measure a real delta. 16ms corresponds to one frame at ~60Hz, a safe default that\n * keeps the first easing step the same size as a normal frame.\n */\nconst FIRST_FRAME_DELTA = 16;\n\n/**\n * Distance (in CSS pixels) below which the viewport is considered to have reached its target. Less\n * than a pixel is imperceptible, so the animation snaps to the target and stops instead of easing\n * across ever-smaller, invisible fractions of a pixel forever.\n */\nconst SCROLL_SETTLE_THRESHOLD = 0.5;\n\n/**\n * Per-frame progress (in CSS pixels) below which the animation is treated as stalled. The browser\n * can cap `scrollLeft` a sub-pixel short of the computed target at the scroll boundary; without\n * this guard the loop would never reach the target and would spin forever. Kept below\n * {@link SCROLL_SETTLE_THRESHOLD} so it only triggers when real movement has effectively stopped.\n */\nconst SCROLL_STALL_THRESHOLD = 0.25;\n\n/**\n * A carousel component for displaying slides with navigation controls and auto-play.\n *\n * Features horizontal scrolling with snap behavior, pagination dots, and ARIA accessibility.\n * Suitable for dashboards, image galleries, and content showcases.\n *\n * @example\n *\n * ```typescript\n * import { SiCarouselComponent, SiCarouselItemDirective } from '@siemens/element-ng/carousel';\n *\n * @Component({\n * imports: [SiCarouselComponent, SiCarouselItemDirective],\n * template: `\n * <si-carousel>\n * <div siCarouselItem><h2>Slide 1</h2></div>\n * <div siCarouselItem><h2>Slide 2</h2></div>\n * <div siCarouselItem><h2>Slide 3</h2></div>\n * </si-carousel>\n * `\n * })\n * export class MyComponent {}\n * ```\n */\n@Component({\n selector: 'si-carousel',\n imports: [SiTranslatePipe, SiResizeObserverDirective, SiIconComponent],\n templateUrl: './si-carousel.component.html',\n styleUrl: './si-carousel.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.role]': 'ariaRole()',\n '[attr.aria-roledescription]': 'translatedCarouselRoleDescription()',\n '[style.min-width.px]': 'pageControlContainerMinWidth()'\n }\n})\nexport class SiCarouselComponent {\n /**\n * Controls whether pagination controls are shown.\n * When `true`, the carousel shows one slide per page and hides pagination controls.\n * @defaultValue false\n * */\n readonly hidePageControls = input(false, { transform: booleanAttribute });\n /**\n * Enables or configures auto-play for the carousel. When set to `true`, the carousel automatically\n * navigates to the next slide every 5000 milliseconds (5 seconds). Pass a positive number to set a\n * custom interval in milliseconds. Pass `false` to disable auto-play.\n * @defaultValue false\n * */\n readonly autoPlay = input<boolean | number>(false);\n /**\n * Aria role of the carousel element. Can be set to 'region' or 'group' depending on the desired accessibility semantics.\n * @defaultValue 'region'\n * */\n readonly ariaRole = input<'region' | 'group'>('region');\n\n /**\n * Aria label for the previous button, used for accessibility purposes.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.PREVIOUS:Previous slide`)\n * ```\n */\n readonly previousButtonAriaLabel = input(\n t(() => $localize`:@@SI_CAROUSEL.PREVIOUS:Previous slide`)\n );\n /**\n * Aria label for the next button, used for accessibility purposes.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.NEXT:Next slide`)\n * ```\n */\n readonly nextButtonAriaLabel = input(t(() => $localize`:@@SI_CAROUSEL.NEXT:Next slide`));\n\n /**\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.SLIDE_PAGE:Slide {{page}} of {{total}}`)\n * ```\n */\n readonly slidePageAriaLabel = input(\n t(() => $localize`:@@SI_CAROUSEL.SLIDE_PAGE:Slide {{page}} of {{total}}`)\n );\n\n /**\n * Label for the play button when autoplay is paused.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.PLAY:Play`)\n * ```\n */\n readonly playButtonLabel = input(t(() => $localize`:@@SI_CAROUSEL.PLAY:Play`));\n\n /**\n * Label for the pause button when autoplay is active.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.PAUSE:Pause`)\n * ```\n */\n readonly pauseButtonLabel = input(t(() => $localize`:@@SI_CAROUSEL.PAUSE:Pause`));\n\n /**\n * Role description for the carousel container, used for accessibility purposes.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.ROLE_DESCRIPTION:carousel`)\n * ```\n */\n readonly carouselRoleDescription = input(\n t(() => $localize`:@@SI_CAROUSEL.ROLE_DESCRIPTION:carousel`)\n );\n /**\n * Role description for each slide, used for accessibility purposes.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.SLIDE_ROLE_DESCRIPTION:Slide`)\n * ```\n */\n readonly slideRoleDescription = input(\n t(() => $localize`:@@SI_CAROUSEL.SLIDE_ROLE_DESCRIPTION:Slide`)\n );\n\n /** @internal */\n readonly translatedSlideRoleDescription = toSignal(\n toObservable(this.slideRoleDescription).pipe(\n switchMap(key => this.translateService.translateAsync(key))\n ),\n { initialValue: '' }\n );\n /** @internal */\n readonly currentActiveSlide = computed(() => {\n const currentPage = this.currentPage();\n if (currentPage !== null && this.items().length) {\n return this.items()[currentPage].elementRef;\n }\n return null;\n });\n\n protected readonly translatedCarouselRoleDescription = toSignal(\n toObservable(this.carouselRoleDescription).pipe(\n switchMap(key => this.translateService.translateAsync(key))\n ),\n { initialValue: '' }\n );\n protected readonly items = contentChildren(SiCarouselItemDirective);\n\n protected readonly currentPage = linkedSignal<number | null>(() =>\n this.items().length ? 0 : null\n );\n protected readonly isPaused = signal(false);\n protected readonly totalPages = computed(() => this.items().length);\n protected readonly edgeLeftIndex = signal(0);\n protected readonly edgeRightIndex = signal(MAX_PAGES - 1);\n protected readonly insufficientSpace = signal(false);\n protected readonly pageControlContainerMinWidth = signal(0);\n protected readonly icons = addIcons({ elementLeft2, elementRight2, elementPlay, elementPause });\n\n private readonly autoPlayDuration = computed(() => {\n const autoPlayValue = this.autoPlay();\n if (typeof autoPlayValue === 'boolean') {\n return autoPlayValue ? 5000 : 0;\n }\n return autoPlayValue > 0 ? autoPlayValue : 0;\n });\n private intervalId: ReturnType<typeof setInterval> | null = null;\n private scrollObserver: IntersectionObserver | null = null;\n /** requestAnimationFrame id of the running scroll animation, or null when idle. */\n private animationFrameId: number | null = null;\n /** Scroll position (`scrollLeft`) the running animation is easing towards. */\n private animationTargetLeft = 0;\n /** Timestamp of the previous animation frame, used to make the easing frame-rate independent. */\n private lastFrameTime = 0;\n /** Whether any slide's CSS order has been changed from its natural (source-index) position. */\n private ordersModified = false;\n private readonly destroyRef = inject(DestroyRef);\n private readonly viewport = viewChild.required<ElementRef<HTMLElement>>('viewport');\n private readonly pageControl = viewChild<ElementRef<HTMLElement>>('pageControl');\n private readonly playPauseBtn = viewChild<ElementRef<HTMLElement>>('playPauseBtn');\n private readonly translateService = injectSiTranslateService();\n private cdRef = inject(ChangeDetectorRef);\n\n constructor() {\n effect(onCleanup => {\n this.scheduleAutoPlay();\n onCleanup(() => clearInterval(this.intervalId!));\n });\n\n effect(() => {\n // Reset to the first page if the current page becomes out of range due to items being added/removed.\n const currentPage = this.currentPage();\n if (currentPage !== null && currentPage >= this.totalPages()) {\n this.cancelAnimation();\n this.items().forEach((_, i) => this.setSlideOrder(i, i));\n this.ordersModified = false;\n this.goToPage(0);\n }\n });\n\n effect(() => {\n this.setupScrollObserver();\n });\n\n effect(() => {\n // Establish the canonical track order (each slide's CSS order equals its source index) so the\n // navigation maths stay consistent. Skipped while an order change is mid-flight, where the\n // orders are intentionally extended and normalized once the animation settles.\n const items = this.items();\n if (this.ordersModified) {\n return;\n }\n items.forEach((_, i) => this.setSlideOrder(i, i));\n });\n\n effect(() => {\n this.updateEdgeIndices();\n });\n\n this.destroyRef.onDestroy(() => {\n if (this.animationFrameId !== null) {\n cancelAnimationFrame(this.animationFrameId);\n }\n this.scrollObserver?.disconnect();\n });\n }\n\n protected goToPage(page: number, forceScroll = true): void {\n this.currentPage.set(page);\n this.scheduleAutoPlay();\n if (forceScroll) {\n this.animateToSlide(page);\n }\n }\n\n protected next(): void {\n this.step(1);\n }\n\n protected previous(): void {\n this.step(-1);\n }\n\n /** Navigates directly to a specific slide, used by the pagination dots. */\n protected goToSlide(index: number): void {\n this.cancelAnimation();\n this.normalizeOrders();\n this.goToPage(index, true);\n }\n\n protected toggleAutoPlay(): void {\n this.isPaused.update(paused => !paused);\n if (this.isPaused()) {\n this.stopAutoPlay();\n } else {\n this.scheduleAutoPlay();\n }\n }\n\n protected onResize(size: { width: number; height: number }): void {\n const pageControl = this.pageControl();\n if (!pageControl) {\n return;\n }\n const pageControlWidth = pageControl.nativeElement.offsetWidth;\n if (this.autoPlay()) {\n const playPauseBtnWidth = this.playPauseBtn()?.nativeElement.offsetWidth ?? 0;\n const minWidth = pageControlWidth + playPauseBtnWidth;\n if (minWidth > size.width - playPauseBtnWidth) {\n this.insufficientSpace.set(true);\n } else {\n this.insufficientSpace.set(false);\n }\n this.pageControlContainerMinWidth.set(minWidth);\n } else {\n this.insufficientSpace.set(false);\n this.pageControlContainerMinWidth.set(pageControlWidth);\n }\n }\n\n /**\n * Navigates a single slide forward (`1`) or backward (`-1`). Rapid clicks are intentionally not\n * queued or throttled: each click advances {@link currentPage} immediately and retargets the\n * running scroll animation (see {@link animateTo}) towards the new slide, so the carousel keeps\n * gliding in the click direction without waiting for the previous scroll to finish.\n *\n * To keep the first/last wrap a continuous one-slide glide instead of a jump across the whole\n * track, the target slide's CSS order is placed exactly one slot away from the current slide in\n * the click direction (so it sits adjacent to it). The viewport scroll is compensated so this\n * reorder is invisible. Orders may extend while the user keeps clicking; they are silently\n * normalized once the animation settles (see {@link normalizeOrders}).\n */\n private step(direction: 1 | -1): void {\n const total = this.totalPages();\n if (total <= 1) {\n return;\n }\n const from = this.currentPage() ?? 0;\n const to = (from + direction + total) % total;\n\n // Ensure the target slide sits one slot away from the current slide in the click direction.\n // For a normal step it already does; for a first/last wrap it does not, so move it there.\n const desiredOrder = this.items()[from].order() + direction;\n if (this.items()[to].order() !== desiredOrder) {\n this.reorderSlide(to, desiredOrder, from);\n }\n\n this.currentPage.set(to);\n this.scheduleAutoPlay();\n this.animateToSlide(to);\n }\n\n /**\n * Changes a slide's CSS order while keeping the picture stable. Reordering shifts slides along\n * the flex track, so the scroll position is adjusted by the exact amount the anchor slide moved,\n * making the relocation invisible and letting any in-flight animation continue seamlessly.\n */\n private reorderSlide(index: number, order: number, anchorIndex: number): void {\n const viewport = this.viewport().nativeElement;\n const anchor = this.items()[anchorIndex].elementRef.nativeElement;\n const before = anchor.getBoundingClientRect().left;\n this.setSlideOrder(index, order);\n // Reading layout after the order change forces a synchronous reflow with the new positions.\n const after = anchor.getBoundingClientRect().left;\n viewport.scrollLeft += after - before;\n this.ordersModified = true;\n }\n\n /**\n * Sets the CSS order of a slide. The value is written to the DOM synchronously in addition to\n * the signal, so a subsequent reflow/scroll uses the new order immediately instead of waiting\n * for the asynchronous, signal-driven change detection update.\n */\n private setSlideOrder(index: number, order: number): void {\n const slide = this.items()[index];\n slide.order.set(order);\n slide.elementRef.nativeElement.style.order = `${order}`;\n }\n\n /**\n * Silently restores the canonical slide order (each slide's CSS order equals its source index).\n * Reordering shifts the track, so it anchors on the current slide and compensates the scroll\n * position to avoid any visible jump. Called once the scroll animation settles.\n */\n private normalizeOrders(): void {\n if (!this.ordersModified) {\n return;\n }\n const items = this.items();\n const viewport = this.viewport().nativeElement;\n const current = this.currentPage();\n const anchor = current !== null ? items[current]?.elementRef.nativeElement : undefined;\n const before = anchor?.getBoundingClientRect().left ?? 0;\n for (let i = 0; i < items.length; i++) {\n if (items[i].order() !== i) {\n this.setSlideOrder(i, i);\n }\n }\n if (anchor) {\n const after = anchor.getBoundingClientRect().left;\n viewport.scrollLeft += after - before;\n }\n this.ordersModified = false;\n }\n\n /** Animates the viewport so the given slide is horizontally centered. */\n private animateToSlide(index: number): void {\n const viewport = this.viewport().nativeElement;\n const slide = this.items()[index].elementRef.nativeElement;\n const viewportRect = viewport.getBoundingClientRect();\n const slideRect = slide.getBoundingClientRect();\n const delta =\n slideRect.left + slideRect.width / 2 - (viewportRect.left + viewportRect.width / 2);\n this.animateTo(viewport.scrollLeft + delta);\n }\n\n /**\n * Eases `scrollLeft` towards `targetLeft` using a frame-rate independent exponential smoothing\n * loop. The target can be updated mid-flight (rapid clicks), so the same animation simply chases\n * the latest slide. Native scroll-snap and smooth scroll-behavior are disabled while animating so\n * they do not fight the manual scrolling, and the scroll observer is paused to avoid feedback.\n */\n private animateTo(targetLeft: number): void {\n this.animationTargetLeft = targetLeft;\n if (this.animationFrameId !== null) {\n return;\n }\n const viewport = this.viewport().nativeElement;\n this.scrollObserver?.disconnect();\n viewport.style.scrollSnapType = 'none';\n viewport.style.scrollBehavior = 'auto';\n this.lastFrameTime = 0;\n this.animationFrameId = requestAnimationFrame(time => this.animationFrame(time));\n }\n\n private animationFrame(now: number): void {\n const viewport = this.viewport().nativeElement;\n const dt = this.lastFrameTime ? now - this.lastFrameTime : FIRST_FRAME_DELTA;\n this.lastFrameTime = now;\n const current = viewport.scrollLeft;\n // Clamp the target to the scrollable range. A wrapped slide can be placed right at the track\n // edge, where the rect-derived target may exceed the maximum by a sub-pixel; without clamping\n // the loop would never reach it and never settle (leaving the order normalization undone).\n const maxScrollLeft = viewport.scrollWidth - viewport.clientWidth;\n const target = Math.max(0, Math.min(this.animationTargetLeft, maxScrollLeft));\n const diff = target - current;\n if (Math.abs(diff) < SCROLL_SETTLE_THRESHOLD) {\n viewport.scrollLeft = target;\n this.animationFrameId = null;\n this.endAnimation();\n return;\n }\n viewport.scrollLeft = current + diff * (1 - Math.exp(-dt / SCROLL_SMOOTHING_TAU));\n // The browser can cap `scrollLeft` a sub-pixel short of the computed target (rounding at the\n // scroll boundary). If a frame makes no real progress, treat the animation as settled instead\n // of spinning forever.\n if (Math.abs(viewport.scrollLeft - current) < SCROLL_STALL_THRESHOLD) {\n this.animationFrameId = null;\n this.endAnimation();\n return;\n }\n this.animationFrameId = requestAnimationFrame(time => this.animationFrame(time));\n }\n\n /** Finalizes the animation: normalizes orders, restores native scrolling and the observer. */\n private endAnimation(): void {\n this.normalizeOrders();\n const viewport = this.viewport().nativeElement;\n viewport.style.scrollSnapType = '';\n viewport.style.scrollBehavior = '';\n this.cdRef.markForCheck();\n this.setupScrollObserver();\n }\n\n /** Stops the running scroll animation and restores native scrolling, without normalizing. */\n private cancelAnimation(): void {\n if (this.animationFrameId !== null) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = null;\n }\n const viewport = this.viewport().nativeElement;\n viewport.style.scrollSnapType = '';\n viewport.style.scrollBehavior = '';\n this.cdRef.markForCheck();\n }\n\n private scheduleAutoPlay(): void {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n }\n if (!this.autoPlayDuration() || this.items().length === 0 || this.isPaused()) {\n return;\n }\n this.intervalId = setInterval(() => this.next(), this.autoPlayDuration());\n }\n\n private stopAutoPlay(): void {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n }\n\n private setupScrollObserver(): void {\n if (this.scrollObserver) {\n this.scrollObserver.disconnect();\n }\n\n const items = this.items();\n if (items.length === 0) {\n return;\n }\n\n const viewport = this.viewport().nativeElement;\n this.scrollObserver = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n const target = entry.target as HTMLElement;\n\n const itemIndex = items.findIndex(item => item.elementRef.nativeElement === target);\n if (itemIndex !== -1) {\n this.goToPage(itemIndex, false);\n }\n }\n });\n },\n { root: viewport, threshold: 0.6, rootMargin: '0px' }\n );\n\n for (const item of items) {\n this.scrollObserver.observe(item.elementRef.nativeElement);\n }\n }\n\n private updateEdgeIndices(): void {\n const total = this.totalPages();\n const current = this.currentPage();\n if (current === null) {\n return;\n }\n if (total <= MAX_PAGES) {\n this.edgeLeftIndex.set(0);\n this.edgeRightIndex.set(total - 1);\n return;\n }\n\n if (current < this.edgeLeftIndex()) {\n this.edgeLeftIndex.set(current);\n this.edgeRightIndex.set(current + MAX_PAGES - 1);\n }\n\n if (current > this.edgeRightIndex()) {\n this.edgeRightIndex.set(current);\n this.edgeLeftIndex.set(current - MAX_PAGES + 1);\n }\n }\n}\n","<div class=\"carousel-body d-flex flex-grow-1 align-items-center gap-2 min-h-0\">\n <div #viewport class=\"carousel-viewport flex-grow-1 align-self-stretch\" tabindex=\"0\">\n <div class=\"carousel-track h-100\">\n <ng-content />\n </div>\n </div>\n</div>\n@if ((!hidePageControls() || autoPlay()) && totalPages() > 1) {\n <div\n class=\"position-relative d-flex justify-content-center align-items-center mt-4\"\n (siResizeObserver)=\"onResize($event)\"\n >\n @if (!hidePageControls()) {\n <div #pageControl class=\"d-flex align-items-center gap-2\">\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0\"\n [aria-label]=\"previousButtonAriaLabel() | translate\"\n (click)=\"previous()\"\n >\n <si-icon [icon]=\"icons.elementLeft2\"\n /></button>\n <div class=\"d-flex align-items-center\">\n <div\n #dotBtn\n class=\"btn btn-tertiary-ghost btn-icon btn-sm pe-none\"\n [class.opacity-0]=\"totalPages() <= 5\"\n [class.position-absolute]=\"totalPages() <= 5\"\n >\n <span class=\"carousel-pager-small-dot d-block rounded-circle\"></span>\n </div>\n <div\n class=\"d-flex overflow-hidden\"\n [style.width.px]=\"dotBtn.clientWidth * (totalPages() > 5 ? 5 : totalPages())\"\n >\n <div\n class=\"d-flex page-buttons\"\n [style.transform]=\"'translateX(-' + edgeLeftIndex() * dotBtn.clientWidth + 'px)'\"\n >\n @for (page of items(); track page) {\n <button\n type=\"button\"\n class=\"btn btn-tertiary-ghost focus-inside btn-icon btn-sm d-flex align-items-center justify-content-center\"\n [aria-label]=\"\n slidePageAriaLabel() | translate: { page: $index + 1, total: totalPages() }\n \"\n [tabIndex]=\"$index >= edgeLeftIndex() && $index <= edgeRightIndex() ? 0 : -1\"\n [aria-current]=\"currentPage() === $index ? 'true' : 'false'\"\n (click)=\"goToSlide($index)\"\n ><span\n class=\"carousel-pager-dot d-block\"\n [class.active]=\"currentPage() === $index\"\n [class.rounded-circle]=\"currentPage() !== $index\"\n ></span\n ></button>\n }\n </div>\n </div>\n <div\n #dotBtn\n class=\"btn btn-tertiary-ghost btn-icon btn-sm pe-none\"\n [class.opacity-0]=\"totalPages() <= 5\"\n [class.position-absolute]=\"totalPages() <= 5\"\n >\n <span class=\"carousel-pager-small-dot d-block rounded-circle\"></span>\n </div>\n </div>\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0\"\n [aria-label]=\"nextButtonAriaLabel() | translate\"\n (click)=\"next()\"\n >\n <si-icon [icon]=\"icons.elementRight2\"\n /></button>\n </div>\n }\n\n @if (autoPlay()) {\n <div\n #playPauseBtn\n class=\"position-absolute top-0 end-0\"\n [class.invisible]=\"insufficientSpace()\"\n >\n <button\n type=\"button\"\n class=\"btn btn-tertiary-ghost ms-2\"\n [aria-label]=\"(isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\"\n (click)=\"toggleAutoPlay()\"\n >\n <si-icon class=\"icon\" [icon]=\"isPaused() ? icons.elementPlay : icons.elementPause\" />\n <span aria-hidden=\"true\">{{\n (isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\n }}</span>\n </button>\n </div>\n @if (insufficientSpace()) {\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0 align-items-center position-absolute top-0 end-0 ms-2\"\n [aria-label]=\"(isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\"\n (click)=\"toggleAutoPlay()\"\n >\n <si-icon [icon]=\"isPaused() ? icons.elementPlay : icons.elementPause\" />\n </button>\n }\n }\n </div>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-carousel.component';\nexport * from './si-carousel-item.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"siemens-element-ng-carousel.mjs","sources":["../../../../projects/element-ng/carousel/si-carousel-item.directive.ts","../../../../projects/element-ng/carousel/si-carousel.component.ts","../../../../projects/element-ng/carousel/si-carousel.component.html","../../../../projects/element-ng/carousel/index.ts","../../../../projects/element-ng/carousel/siemens-element-ng-carousel.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { computed, Directive, ElementRef, inject, signal } from '@angular/core';\n\nimport { SiCarouselComponent } from './si-carousel.component';\n\n@Directive({\n selector: '[siCarouselItem]',\n host: {\n style: 'flex-shrink: 0; flex-basis: 100%; scroll-snap-align: center;',\n '[style.order]': 'order()',\n 'role': 'group',\n '[attr.aria-roledescription]': 'carousel.translatedSlideRoleDescription()',\n '[attr.inert]': 'isVisible() ? null : \"\"',\n '[attr.aria-hidden]': 'isVisible() ? null : \"true\"'\n }\n})\nexport class SiCarouselItemDirective {\n protected readonly carousel = inject(SiCarouselComponent);\n protected readonly isVisible = computed(() => {\n if (this.carousel.currentActiveSlide() === this.elementRef) {\n return true;\n }\n return false;\n });\n /** @internal */\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n /** @internal */\n readonly order = signal(0);\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectorRef,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n signal,\n viewChild\n} from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { elementLeft2, elementRight2, elementPause, elementPlay } from '@siemens/element-icons';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiResizeObserverDirective } from '@siemens/element-ng/resize-observer';\nimport {\n injectSiTranslateService,\n SiTranslatePipe,\n t\n} from '@siemens/element-translate-ng/translate';\nimport { switchMap } from 'rxjs';\n\nimport { SiCarouselItemDirective } from './si-carousel-item.directive';\n\n/**\n * Maximum number of pagination dots shown in the pager.\n */\nconst MAX_PAGES = 5;\n\n/**\n * Time constant (in milliseconds) for the exponential-smoothing scroll animation. Smaller values\n * settle faster. The animation is retargetable, so rapid clicks keep adjusting the same animation\n * towards the latest slide instead of starting separate, queued scrolls.\n */\nconst SCROLL_SMOOTHING_TAU = 100;\n\n/**\n * Assumed duration (in milliseconds) of the first animation frame, used before two timestamps are\n * available to measure a real delta. 16ms corresponds to one frame at ~60Hz, a safe default that\n * keeps the first easing step the same size as a normal frame.\n */\nconst FIRST_FRAME_DELTA = 16;\n\n/**\n * Distance (in CSS pixels) below which the viewport is considered to have reached its target. Less\n * than a pixel is imperceptible, so the animation snaps to the target and stops instead of easing\n * across ever-smaller, invisible fractions of a pixel forever.\n */\nconst SCROLL_SETTLE_THRESHOLD = 0.5;\n\n/**\n * Per-frame progress (in CSS pixels) below which the animation is treated as stalled. The browser\n * can cap `scrollLeft` a sub-pixel short of the computed target at the scroll boundary; without\n * this guard the loop would never reach the target and would spin forever. Kept below\n * {@link SCROLL_SETTLE_THRESHOLD} so it only triggers when real movement has effectively stopped.\n */\nconst SCROLL_STALL_THRESHOLD = 0.25;\n\n/**\n * A carousel component for displaying slides with navigation controls and auto-play.\n *\n * Features horizontal scrolling with snap behavior, pagination dots, and ARIA accessibility.\n * Suitable for dashboards, image galleries, and content showcases.\n *\n * @example\n *\n * ```typescript\n * import { SiCarouselComponent, SiCarouselItemDirective } from '@siemens/element-ng/carousel';\n *\n * @Component({\n * imports: [SiCarouselComponent, SiCarouselItemDirective],\n * template: `\n * <si-carousel>\n * <div siCarouselItem><h2>Slide 1</h2></div>\n * <div siCarouselItem><h2>Slide 2</h2></div>\n * <div siCarouselItem><h2>Slide 3</h2></div>\n * </si-carousel>\n * `\n * })\n * export class MyComponent {}\n * ```\n */\n@Component({\n selector: 'si-carousel',\n imports: [SiTranslatePipe, SiResizeObserverDirective, SiIconComponent],\n templateUrl: './si-carousel.component.html',\n styleUrl: './si-carousel.component.scss',\n host: {\n '[attr.role]': 'ariaRole()',\n '[attr.aria-roledescription]': 'translatedCarouselRoleDescription()',\n '[style.min-width.px]': 'pageControlContainerMinWidth()'\n }\n})\nexport class SiCarouselComponent {\n /**\n * Controls whether pagination controls are shown.\n * When `true`, the carousel shows one slide per page and hides pagination controls.\n * @defaultValue false\n * */\n readonly hidePageControls = input(false, { transform: booleanAttribute });\n /**\n * Enables or configures auto-play for the carousel. When set to `true`, the carousel automatically\n * navigates to the next slide every 5000 milliseconds (5 seconds). Pass a positive number to set a\n * custom interval in milliseconds. Pass `false` to disable auto-play.\n * @defaultValue false\n * */\n readonly autoPlay = input<boolean | number>(false);\n /**\n * Aria role of the carousel element. Can be set to 'region' or 'group' depending on the desired accessibility semantics.\n * @defaultValue 'region'\n * */\n readonly ariaRole = input<'region' | 'group'>('region');\n\n /**\n * Aria label for the previous button, used for accessibility purposes.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.PREVIOUS:Previous slide`)\n * ```\n */\n readonly previousButtonAriaLabel = input(\n t(() => $localize`:@@SI_CAROUSEL.PREVIOUS:Previous slide`)\n );\n /**\n * Aria label for the next button, used for accessibility purposes.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.NEXT:Next slide`)\n * ```\n */\n readonly nextButtonAriaLabel = input(t(() => $localize`:@@SI_CAROUSEL.NEXT:Next slide`));\n\n /**\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.SLIDE_PAGE:Slide {{page}} of {{total}}`)\n * ```\n */\n readonly slidePageAriaLabel = input(\n t(() => $localize`:@@SI_CAROUSEL.SLIDE_PAGE:Slide {{page}} of {{total}}`)\n );\n\n /**\n * Label for the play button when autoplay is paused.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.PLAY:Play`)\n * ```\n */\n readonly playButtonLabel = input(t(() => $localize`:@@SI_CAROUSEL.PLAY:Play`));\n\n /**\n * Label for the pause button when autoplay is active.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.PAUSE:Pause`)\n * ```\n */\n readonly pauseButtonLabel = input(t(() => $localize`:@@SI_CAROUSEL.PAUSE:Pause`));\n\n /**\n * Role description for the carousel container, used for accessibility purposes.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.ROLE_DESCRIPTION:carousel`)\n * ```\n */\n readonly carouselRoleDescription = input(\n t(() => $localize`:@@SI_CAROUSEL.ROLE_DESCRIPTION:carousel`)\n );\n /**\n * Role description for each slide, used for accessibility purposes.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.SLIDE_ROLE_DESCRIPTION:Slide`)\n * ```\n */\n readonly slideRoleDescription = input(\n t(() => $localize`:@@SI_CAROUSEL.SLIDE_ROLE_DESCRIPTION:Slide`)\n );\n\n /** @internal */\n readonly translatedSlideRoleDescription = toSignal(\n toObservable(this.slideRoleDescription).pipe(\n switchMap(key => this.translateService.translateAsync(key))\n ),\n { initialValue: '' }\n );\n /** @internal */\n readonly currentActiveSlide = computed(() => {\n const currentPage = this.currentPage();\n if (currentPage !== null && this.items().length) {\n return this.items()[currentPage].elementRef;\n }\n return null;\n });\n\n protected readonly translatedCarouselRoleDescription = toSignal(\n toObservable(this.carouselRoleDescription).pipe(\n switchMap(key => this.translateService.translateAsync(key))\n ),\n { initialValue: '' }\n );\n protected readonly items = contentChildren(SiCarouselItemDirective);\n\n protected readonly currentPage = linkedSignal<number | null>(() =>\n this.items().length ? 0 : null\n );\n protected readonly isPaused = signal(false);\n protected readonly totalPages = computed(() => this.items().length);\n protected readonly edgeLeftIndex = signal(0);\n protected readonly edgeRightIndex = signal(MAX_PAGES - 1);\n protected readonly insufficientSpace = signal(false);\n protected readonly pageControlContainerMinWidth = signal(0);\n protected readonly icons = addIcons({ elementLeft2, elementRight2, elementPlay, elementPause });\n\n private readonly autoPlayDuration = computed(() => {\n const autoPlayValue = this.autoPlay();\n if (typeof autoPlayValue === 'boolean') {\n return autoPlayValue ? 5000 : 0;\n }\n return autoPlayValue > 0 ? autoPlayValue : 0;\n });\n private intervalId: ReturnType<typeof setInterval> | null = null;\n private scrollObserver: IntersectionObserver | null = null;\n /** requestAnimationFrame id of the running scroll animation, or null when idle. */\n private animationFrameId: number | null = null;\n /** Scroll position (`scrollLeft`) the running animation is easing towards. */\n private animationTargetLeft = 0;\n /** Timestamp of the previous animation frame, used to make the easing frame-rate independent. */\n private lastFrameTime = 0;\n /** Whether any slide's CSS order has been changed from its natural (source-index) position. */\n private ordersModified = false;\n private readonly destroyRef = inject(DestroyRef);\n private readonly viewport = viewChild.required<ElementRef<HTMLElement>>('viewport');\n private readonly pageControl = viewChild<ElementRef<HTMLElement>>('pageControl');\n private readonly playPauseBtn = viewChild<ElementRef<HTMLElement>>('playPauseBtn');\n private readonly translateService = injectSiTranslateService();\n private cdRef = inject(ChangeDetectorRef);\n\n constructor() {\n effect(onCleanup => {\n this.scheduleAutoPlay();\n onCleanup(() => clearInterval(this.intervalId!));\n });\n\n effect(() => {\n // Reset to the first page if the current page becomes out of range due to items being added/removed.\n const currentPage = this.currentPage();\n if (currentPage !== null && currentPage >= this.totalPages()) {\n this.cancelAnimation();\n this.items().forEach((_, i) => this.setSlideOrder(i, i));\n this.ordersModified = false;\n this.goToPage(0);\n }\n });\n\n effect(() => {\n this.setupScrollObserver();\n });\n\n effect(() => {\n // Establish the canonical track order (each slide's CSS order equals its source index) so the\n // navigation maths stay consistent. Skipped while an order change is mid-flight, where the\n // orders are intentionally extended and normalized once the animation settles.\n const items = this.items();\n if (this.ordersModified) {\n return;\n }\n items.forEach((_, i) => this.setSlideOrder(i, i));\n });\n\n effect(() => {\n this.updateEdgeIndices();\n });\n\n this.destroyRef.onDestroy(() => {\n if (this.animationFrameId !== null) {\n cancelAnimationFrame(this.animationFrameId);\n }\n this.scrollObserver?.disconnect();\n });\n }\n\n protected goToPage(page: number, forceScroll = true): void {\n this.currentPage.set(page);\n this.scheduleAutoPlay();\n if (forceScroll) {\n this.animateToSlide(page);\n }\n }\n\n protected next(): void {\n this.step(1);\n }\n\n protected previous(): void {\n this.step(-1);\n }\n\n /** Navigates directly to a specific slide, used by the pagination dots. */\n protected goToSlide(index: number): void {\n this.cancelAnimation();\n this.normalizeOrders();\n this.goToPage(index, true);\n }\n\n protected toggleAutoPlay(): void {\n this.isPaused.update(paused => !paused);\n if (this.isPaused()) {\n this.stopAutoPlay();\n } else {\n this.scheduleAutoPlay();\n }\n }\n\n protected onResize(size: { width: number; height: number }): void {\n const pageControl = this.pageControl();\n if (!pageControl) {\n return;\n }\n const pageControlWidth = pageControl.nativeElement.offsetWidth;\n if (this.autoPlay()) {\n const playPauseBtnWidth = this.playPauseBtn()?.nativeElement.offsetWidth ?? 0;\n const minWidth = pageControlWidth + playPauseBtnWidth;\n if (minWidth > size.width - playPauseBtnWidth) {\n this.insufficientSpace.set(true);\n } else {\n this.insufficientSpace.set(false);\n }\n this.pageControlContainerMinWidth.set(minWidth);\n } else {\n this.insufficientSpace.set(false);\n this.pageControlContainerMinWidth.set(pageControlWidth);\n }\n }\n\n /**\n * Navigates a single slide forward (`1`) or backward (`-1`). Rapid clicks are intentionally not\n * queued or throttled: each click advances {@link currentPage} immediately and retargets the\n * running scroll animation (see {@link animateTo}) towards the new slide, so the carousel keeps\n * gliding in the click direction without waiting for the previous scroll to finish.\n *\n * To keep the first/last wrap a continuous one-slide glide instead of a jump across the whole\n * track, the target slide's CSS order is placed exactly one slot away from the current slide in\n * the click direction (so it sits adjacent to it). The viewport scroll is compensated so this\n * reorder is invisible. Orders may extend while the user keeps clicking; they are silently\n * normalized once the animation settles (see {@link normalizeOrders}).\n */\n private step(direction: 1 | -1): void {\n const total = this.totalPages();\n if (total <= 1) {\n return;\n }\n const from = this.currentPage() ?? 0;\n const to = (from + direction + total) % total;\n\n // Ensure the target slide sits one slot away from the current slide in the click direction.\n // For a normal step it already does; for a first/last wrap it does not, so move it there.\n const desiredOrder = this.items()[from].order() + direction;\n if (this.items()[to].order() !== desiredOrder) {\n this.reorderSlide(to, desiredOrder, from);\n }\n\n this.currentPage.set(to);\n this.scheduleAutoPlay();\n this.animateToSlide(to);\n }\n\n /**\n * Changes a slide's CSS order while keeping the picture stable. Reordering shifts slides along\n * the flex track, so the scroll position is adjusted by the exact amount the anchor slide moved,\n * making the relocation invisible and letting any in-flight animation continue seamlessly.\n */\n private reorderSlide(index: number, order: number, anchorIndex: number): void {\n const viewport = this.viewport().nativeElement;\n const anchor = this.items()[anchorIndex].elementRef.nativeElement;\n const before = anchor.getBoundingClientRect().left;\n this.setSlideOrder(index, order);\n // Reading layout after the order change forces a synchronous reflow with the new positions.\n const after = anchor.getBoundingClientRect().left;\n viewport.scrollLeft += after - before;\n this.ordersModified = true;\n }\n\n /**\n * Sets the CSS order of a slide. The value is written to the DOM synchronously in addition to\n * the signal, so a subsequent reflow/scroll uses the new order immediately instead of waiting\n * for the asynchronous, signal-driven change detection update.\n */\n private setSlideOrder(index: number, order: number): void {\n const slide = this.items()[index];\n slide.order.set(order);\n slide.elementRef.nativeElement.style.order = `${order}`;\n }\n\n /**\n * Silently restores the canonical slide order (each slide's CSS order equals its source index).\n * Reordering shifts the track, so it anchors on the current slide and compensates the scroll\n * position to avoid any visible jump. Called once the scroll animation settles.\n */\n private normalizeOrders(): void {\n if (!this.ordersModified) {\n return;\n }\n const items = this.items();\n const viewport = this.viewport().nativeElement;\n const current = this.currentPage();\n const anchor = current !== null ? items[current]?.elementRef.nativeElement : undefined;\n const before = anchor?.getBoundingClientRect().left ?? 0;\n for (let i = 0; i < items.length; i++) {\n if (items[i].order() !== i) {\n this.setSlideOrder(i, i);\n }\n }\n if (anchor) {\n const after = anchor.getBoundingClientRect().left;\n viewport.scrollLeft += after - before;\n }\n this.ordersModified = false;\n }\n\n /** Animates the viewport so the given slide is horizontally centered. */\n private animateToSlide(index: number): void {\n const viewport = this.viewport().nativeElement;\n const slide = this.items()[index].elementRef.nativeElement;\n const viewportRect = viewport.getBoundingClientRect();\n const slideRect = slide.getBoundingClientRect();\n const delta =\n slideRect.left + slideRect.width / 2 - (viewportRect.left + viewportRect.width / 2);\n this.animateTo(viewport.scrollLeft + delta);\n }\n\n /**\n * Eases `scrollLeft` towards `targetLeft` using a frame-rate independent exponential smoothing\n * loop. The target can be updated mid-flight (rapid clicks), so the same animation simply chases\n * the latest slide. Native scroll-snap and smooth scroll-behavior are disabled while animating so\n * they do not fight the manual scrolling, and the scroll observer is paused to avoid feedback.\n */\n private animateTo(targetLeft: number): void {\n this.animationTargetLeft = targetLeft;\n if (this.animationFrameId !== null) {\n return;\n }\n const viewport = this.viewport().nativeElement;\n this.scrollObserver?.disconnect();\n viewport.style.scrollSnapType = 'none';\n viewport.style.scrollBehavior = 'auto';\n this.lastFrameTime = 0;\n this.animationFrameId = requestAnimationFrame(time => this.animationFrame(time));\n }\n\n private animationFrame(now: number): void {\n const viewport = this.viewport().nativeElement;\n const dt = this.lastFrameTime ? now - this.lastFrameTime : FIRST_FRAME_DELTA;\n this.lastFrameTime = now;\n const current = viewport.scrollLeft;\n // Clamp the target to the scrollable range. A wrapped slide can be placed right at the track\n // edge, where the rect-derived target may exceed the maximum by a sub-pixel; without clamping\n // the loop would never reach it and never settle (leaving the order normalization undone).\n const maxScrollLeft = viewport.scrollWidth - viewport.clientWidth;\n const target = Math.max(0, Math.min(this.animationTargetLeft, maxScrollLeft));\n const diff = target - current;\n if (Math.abs(diff) < SCROLL_SETTLE_THRESHOLD) {\n viewport.scrollLeft = target;\n this.animationFrameId = null;\n this.endAnimation();\n return;\n }\n viewport.scrollLeft = current + diff * (1 - Math.exp(-dt / SCROLL_SMOOTHING_TAU));\n // The browser can cap `scrollLeft` a sub-pixel short of the computed target (rounding at the\n // scroll boundary). If a frame makes no real progress, treat the animation as settled instead\n // of spinning forever.\n if (Math.abs(viewport.scrollLeft - current) < SCROLL_STALL_THRESHOLD) {\n this.animationFrameId = null;\n this.endAnimation();\n return;\n }\n this.animationFrameId = requestAnimationFrame(time => this.animationFrame(time));\n }\n\n /** Finalizes the animation: normalizes orders, restores native scrolling and the observer. */\n private endAnimation(): void {\n this.normalizeOrders();\n const viewport = this.viewport().nativeElement;\n viewport.style.scrollSnapType = '';\n viewport.style.scrollBehavior = '';\n this.cdRef.markForCheck();\n this.setupScrollObserver();\n }\n\n /** Stops the running scroll animation and restores native scrolling, without normalizing. */\n private cancelAnimation(): void {\n if (this.animationFrameId !== null) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = null;\n }\n const viewport = this.viewport().nativeElement;\n viewport.style.scrollSnapType = '';\n viewport.style.scrollBehavior = '';\n this.cdRef.markForCheck();\n }\n\n private scheduleAutoPlay(): void {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n }\n if (!this.autoPlayDuration() || this.items().length === 0 || this.isPaused()) {\n return;\n }\n this.intervalId = setInterval(() => this.next(), this.autoPlayDuration());\n }\n\n private stopAutoPlay(): void {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n }\n\n private setupScrollObserver(): void {\n if (this.scrollObserver) {\n this.scrollObserver.disconnect();\n }\n\n const items = this.items();\n if (items.length === 0) {\n return;\n }\n\n const viewport = this.viewport().nativeElement;\n this.scrollObserver = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n const target = entry.target as HTMLElement;\n\n const itemIndex = items.findIndex(item => item.elementRef.nativeElement === target);\n if (itemIndex !== -1) {\n this.goToPage(itemIndex, false);\n }\n }\n });\n },\n { root: viewport, threshold: 0.6, rootMargin: '0px' }\n );\n\n for (const item of items) {\n this.scrollObserver.observe(item.elementRef.nativeElement);\n }\n }\n\n private updateEdgeIndices(): void {\n const total = this.totalPages();\n const current = this.currentPage();\n if (current === null) {\n return;\n }\n if (total <= MAX_PAGES) {\n this.edgeLeftIndex.set(0);\n this.edgeRightIndex.set(total - 1);\n return;\n }\n\n if (current < this.edgeLeftIndex()) {\n this.edgeLeftIndex.set(current);\n this.edgeRightIndex.set(current + MAX_PAGES - 1);\n }\n\n if (current > this.edgeRightIndex()) {\n this.edgeRightIndex.set(current);\n this.edgeLeftIndex.set(current - MAX_PAGES + 1);\n }\n }\n}\n","<div class=\"carousel-body d-flex flex-grow-1 align-items-center gap-2 min-h-0\">\n <div #viewport class=\"carousel-viewport flex-grow-1 align-self-stretch\" tabindex=\"0\">\n <div class=\"carousel-track h-100\">\n <ng-content />\n </div>\n </div>\n</div>\n@if ((!hidePageControls() || autoPlay()) && totalPages() > 1) {\n <div\n class=\"position-relative d-flex justify-content-center align-items-center mt-4\"\n (siResizeObserver)=\"onResize($event)\"\n >\n @if (!hidePageControls()) {\n <div #pageControl class=\"d-flex align-items-center gap-2\">\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0\"\n [aria-label]=\"previousButtonAriaLabel() | translate\"\n (click)=\"previous()\"\n >\n <si-icon [icon]=\"icons.elementLeft2\"\n /></button>\n <div class=\"d-flex align-items-center\">\n <div\n #dotBtn\n class=\"btn btn-tertiary-ghost btn-icon btn-sm pe-none\"\n [class.opacity-0]=\"totalPages() <= 5\"\n [class.position-absolute]=\"totalPages() <= 5\"\n >\n <span class=\"carousel-pager-small-dot d-block rounded-circle\"></span>\n </div>\n <div\n class=\"d-flex overflow-hidden\"\n [style.width.px]=\"dotBtn.clientWidth * (totalPages() > 5 ? 5 : totalPages())\"\n >\n <div\n class=\"d-flex page-buttons\"\n [style.transform]=\"'translateX(-' + edgeLeftIndex() * dotBtn.clientWidth + 'px)'\"\n >\n @for (page of items(); track page) {\n <button\n type=\"button\"\n class=\"btn btn-tertiary-ghost focus-inside btn-icon btn-sm d-flex align-items-center justify-content-center\"\n [aria-label]=\"\n slidePageAriaLabel() | translate: { page: $index + 1, total: totalPages() }\n \"\n [tabIndex]=\"$index >= edgeLeftIndex() && $index <= edgeRightIndex() ? 0 : -1\"\n [aria-current]=\"currentPage() === $index ? 'true' : 'false'\"\n (click)=\"goToSlide($index)\"\n ><span\n class=\"carousel-pager-dot d-block\"\n [class.active]=\"currentPage() === $index\"\n [class.rounded-circle]=\"currentPage() !== $index\"\n ></span\n ></button>\n }\n </div>\n </div>\n <div\n #dotBtn\n class=\"btn btn-tertiary-ghost btn-icon btn-sm pe-none\"\n [class.opacity-0]=\"totalPages() <= 5\"\n [class.position-absolute]=\"totalPages() <= 5\"\n >\n <span class=\"carousel-pager-small-dot d-block rounded-circle\"></span>\n </div>\n </div>\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0\"\n [aria-label]=\"nextButtonAriaLabel() | translate\"\n (click)=\"next()\"\n >\n <si-icon [icon]=\"icons.elementRight2\"\n /></button>\n </div>\n }\n\n @if (autoPlay()) {\n <div\n #playPauseBtn\n class=\"position-absolute top-0 end-0\"\n [class.invisible]=\"insufficientSpace()\"\n >\n <button\n type=\"button\"\n class=\"btn btn-tertiary-ghost ms-2\"\n [aria-label]=\"(isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\"\n (click)=\"toggleAutoPlay()\"\n >\n <si-icon class=\"icon\" [icon]=\"isPaused() ? icons.elementPlay : icons.elementPause\" />\n <span aria-hidden=\"true\">{{\n (isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\n }}</span>\n </button>\n </div>\n @if (insufficientSpace()) {\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0 align-items-center position-absolute top-0 end-0 ms-2\"\n [aria-label]=\"(isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\"\n (click)=\"toggleAutoPlay()\"\n >\n <si-icon [icon]=\"isPaused() ? icons.elementPlay : icons.elementPause\" />\n </button>\n }\n }\n </div>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-carousel.component';\nexport * from './si-carousel-item.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}