@eui/ecl 22.0.0-alpha.52 → 22.0.0-alpha.53

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 (189) hide show
  1. package/assets/i18n-ecl/bg.json +6 -2
  2. package/assets/i18n-ecl/cs.json +6 -2
  3. package/assets/i18n-ecl/da.json +6 -2
  4. package/assets/i18n-ecl/de.json +6 -2
  5. package/assets/i18n-ecl/el.json +6 -2
  6. package/assets/i18n-ecl/en.json +6 -2
  7. package/assets/i18n-ecl/es.json +6 -2
  8. package/assets/i18n-ecl/et.json +6 -2
  9. package/assets/i18n-ecl/fi.json +6 -2
  10. package/assets/i18n-ecl/fr.json +6 -2
  11. package/assets/i18n-ecl/ga.json +6 -2
  12. package/assets/i18n-ecl/hr.json +6 -2
  13. package/assets/i18n-ecl/hu.json +6 -2
  14. package/assets/i18n-ecl/it.json +6 -2
  15. package/assets/i18n-ecl/lt.json +6 -2
  16. package/assets/i18n-ecl/lv.json +6 -2
  17. package/assets/i18n-ecl/mt.json +6 -2
  18. package/assets/i18n-ecl/nl.json +6 -2
  19. package/assets/i18n-ecl/pl.json +6 -2
  20. package/assets/i18n-ecl/pt.json +6 -2
  21. package/assets/i18n-ecl/ro.json +6 -2
  22. package/assets/i18n-ecl/sk.json +6 -2
  23. package/assets/i18n-ecl/sl.json +6 -2
  24. package/assets/i18n-ecl/sv.json +6 -2
  25. package/components/ecl-slider/package.json +4 -0
  26. package/docs/changelog.html +14 -0
  27. package/docs/components/EclAccordionSummaryComponent.html +1 -1
  28. package/docs/components/EclAddToCalendarComponent.html +1 -1
  29. package/docs/components/EclAnimatedNumbersComponent.html +1 -1
  30. package/docs/components/EclAnimatedNumbersItemComponent.html +1 -1
  31. package/docs/components/EclAppComponent.html +1 -1
  32. package/docs/components/EclBannerComponent.html +1 -1
  33. package/docs/components/EclBlockquoteComponent.html +1 -1
  34. package/docs/components/EclBreadcrumbComponent.html +1 -1
  35. package/docs/components/EclBreadcrumbSegmentComponent.html +1 -1
  36. package/docs/components/EclButtonComponent.html +1 -1
  37. package/docs/components/EclCardBodyComponent.html +1 -1
  38. package/docs/components/EclCardComponent.html +1 -1
  39. package/docs/components/EclCarouselComponent.html +182 -898
  40. package/docs/components/EclCarouselItemComponent.html +32 -1
  41. package/docs/components/EclCategoryFilterComponent.html +1 -1
  42. package/docs/components/EclCategoryFilterItemComponent.html +1 -1
  43. package/docs/components/EclCategoryFilterListComponent.html +1 -1
  44. package/docs/components/EclCheckboxHelpComponent.html +1 -1
  45. package/docs/components/EclCheckboxLabelComponent.html +1 -1
  46. package/docs/components/EclContentBlockComponent.html +1 -1
  47. package/docs/components/EclContentItemComponent.html +1 -1
  48. package/docs/components/EclDateBlockComponent.html +1 -1
  49. package/docs/components/EclDescriptionListDefinitionComponent.html +1 -1
  50. package/docs/components/EclExpandableComponent.html +1 -1
  51. package/docs/components/EclFactFiguresComponent.html +1 -1
  52. package/docs/components/EclFactFiguresItemComponent.html +1 -1
  53. package/docs/components/EclFactFiguresViewAllComponent.html +1 -1
  54. package/docs/components/EclFeaturedComponent.html +1 -1
  55. package/docs/components/EclFeaturedItemComponent.html +1 -1
  56. package/docs/components/EclFeaturedItemDescriptionComponent.html +1 -1
  57. package/docs/components/EclFileComponent.html +1 -1
  58. package/docs/components/EclFileItemComponent.html +1 -1
  59. package/docs/components/EclFileItemsComponent.html +1 -1
  60. package/docs/components/EclFileListsComponent.html +1 -1
  61. package/docs/components/EclFormGroupComponent.html +1 -1
  62. package/docs/components/EclFormLabelComponent.html +1 -1
  63. package/docs/components/EclGalleryComponent.html +1 -1
  64. package/docs/components/EclGalleryFooterComponent.html +1 -1
  65. package/docs/components/EclGalleryItemComponent.html +1 -1
  66. package/docs/components/EclHighlightBoxComponent.html +1 -1
  67. package/docs/components/EclHighlightedSearchComponent.html +1 -1
  68. package/docs/components/EclIconComponent.html +1 -10
  69. package/docs/components/EclIndicatorComponent.html +1 -1
  70. package/docs/components/EclInpageNavigationComponent.html +1 -1
  71. package/docs/components/EclInpageNavigationItemComponent.html +1 -1
  72. package/docs/components/EclLayoutWrapperComponent.html +1 -1
  73. package/docs/components/EclListIllustrationComponent.html +1 -1
  74. package/docs/components/EclListIllustrationItemComponent.html +1 -1
  75. package/docs/components/EclLoadingIndicatorComponent.html +1 -1
  76. package/docs/components/EclMediaContainerComponent.html +1 -1
  77. package/docs/components/EclMegaMenuComponent.html +1 -1
  78. package/docs/components/EclMegaMenuFeaturedComponent.html +1 -1
  79. package/docs/components/EclMegaMenuInfoComponent.html +1 -1
  80. package/docs/components/EclMegaMenuItemComponent.html +1 -1
  81. package/docs/components/EclMegaMenuSubitemComponent.html +1 -1
  82. package/docs/components/EclMenuComponent.html +1 -1
  83. package/docs/components/EclMenuItemComponent.html +1 -1
  84. package/docs/components/EclMenuMegaComponent.html +1 -1
  85. package/docs/components/EclMenuMegaItemComponent.html +1 -1
  86. package/docs/components/EclModalBodyComponent.html +1 -1
  87. package/docs/components/EclModalComponent.html +1 -1
  88. package/docs/components/EclModalFooterComponent.html +1 -1
  89. package/docs/components/EclModalHeaderComponent.html +1 -1
  90. package/docs/components/EclMultiselectComponent.html +1 -1
  91. package/docs/components/EclMultiselectDropdownComponent.html +1 -1
  92. package/docs/components/EclMultiselectInputComponent.html +1 -1
  93. package/docs/components/EclMultiselectOptgroupComponent.html +1 -1
  94. package/docs/components/EclMultiselectOptionComponent.html +1 -1
  95. package/docs/components/EclNavigationListComponent.html +1 -1
  96. package/docs/components/EclNavigationListItemComponent.html +1 -1
  97. package/docs/components/EclNewsTickerComponent.html +1 -1
  98. package/docs/components/EclNewsTickerItemComponent.html +1 -1
  99. package/docs/components/EclNotificationComponent.html +1 -1
  100. package/docs/components/EclPageHeaderComponent.html +1 -1
  101. package/docs/components/EclPageHeaderDescriptionContainerComponent.html +1 -1
  102. package/docs/components/EclPageHeaderExpandableComponent.html +1 -1
  103. package/docs/components/EclPageHeaderSectionComponent.html +1 -1
  104. package/docs/components/EclPageHeaderSectionInfoComponent.html +1 -1
  105. package/docs/components/EclPageSummaryComponent.html +1 -1
  106. package/docs/components/EclPaginationComponent.html +1 -1
  107. package/docs/components/EclPaginationItemComponent.html +1 -1
  108. package/docs/components/EclPopoverComponent.html +1 -1
  109. package/docs/components/EclQuizCardComponent.html +113 -44
  110. package/docs/components/EclQuizComponent.html +4 -9
  111. package/docs/components/EclRadioLabelComponent.html +1 -1
  112. package/docs/components/EclRangeBubbleComponent.html +1 -1
  113. package/docs/components/EclRangeValueComponent.html +1 -1
  114. package/docs/components/EclRatingFieldComponent.html +1 -1
  115. package/docs/components/EclSearchFormComponent.html +1 -1
  116. package/docs/components/EclSelectContainerComponent.html +1 -1
  117. package/docs/components/EclSiteFooterComponent.html +1 -1
  118. package/docs/components/EclSiteFooterCoownerComponent.html +1 -1
  119. package/docs/components/EclSiteFooterCoreComponent.html +1 -1
  120. package/docs/components/EclSiteFooterFeedbackComponent.html +1 -1
  121. package/docs/components/EclSiteFooterFixedContentEUComponent.html +1 -1
  122. package/docs/components/EclSiteFooterRowCommonComponent.html +1 -1
  123. package/docs/components/EclSiteHeaderActionComponent.html +1 -1
  124. package/docs/components/EclSiteHeaderBannerTopComponent.html +1 -1
  125. package/docs/components/EclSiteHeaderComponent.html +1 -1
  126. package/docs/components/EclSiteHeaderCustomActionComponent.html +1 -1
  127. package/docs/components/EclSiteHeaderEnvironmentComponent.html +1 -1
  128. package/docs/components/EclSiteHeaderLanguageComponent.html +1 -1
  129. package/docs/components/EclSiteHeaderLanguagePopoverComponent.html +1 -1
  130. package/docs/components/EclSiteHeaderLoginComponent.html +1 -1
  131. package/docs/components/EclSiteHeaderNotificationComponent.html +1 -1
  132. package/docs/components/EclSiteHeaderSearchComponent.html +1 -1
  133. package/docs/components/EclSliderPagerComponent.html +1159 -0
  134. package/docs/components/EclSloganTickerComponent.html +1 -1
  135. package/docs/components/EclSocialMediaFollowComponent.html +1 -1
  136. package/docs/components/EclSocialMediaFollowItemComponent.html +1 -1
  137. package/docs/components/EclSplashPageComponent.html +1 -1
  138. package/docs/components/EclSplashPageLanguageCategoryComponent.html +1 -1
  139. package/docs/components/EclSplashPageLanguageContainerComponent.html +1 -1
  140. package/docs/components/EclSplashPageLanguageLinkComponent.html +1 -1
  141. package/docs/components/EclSpotlightComponent.html +1 -1
  142. package/docs/components/EclSpotlightLinkComponent.html +1 -1
  143. package/docs/components/EclStickyContainerComponent.html +1 -1
  144. package/docs/components/EclStoryCardComponent.html +4 -4
  145. package/docs/components/EclStoryCardGridDetailsComponent.html +57 -2
  146. package/docs/components/EclStoryCardItemComponent.html +77 -2
  147. package/docs/components/EclTabComponent.html +1 -1
  148. package/docs/components/EclTabLabelComponent.html +1 -1
  149. package/docs/components/EclTableSortButtonComponent.html +1 -1
  150. package/docs/components/EclTabsComponent.html +1 -1
  151. package/docs/components/EclTagComponent.html +1 -1
  152. package/docs/components/EclTextMediaComponent.html +1 -1
  153. package/docs/components/EclTimelineComponent.html +1 -1
  154. package/docs/components/EclTimelineItemComponent.html +1 -1
  155. package/docs/components/EclTimelineItemTogglerComponent.html +1 -1
  156. package/docs/js/menu-wc.js +3 -0
  157. package/docs/js/search/search_index.js +2 -2
  158. package/docs/json/EclCarouselComponent.md +8 -4
  159. package/docs/json/EclCarouselItemComponent.md +1 -0
  160. package/docs/json/EclQuizCardComponent.md +6 -3
  161. package/docs/json/EclSliderPagerComponent.md +55 -0
  162. package/docs/json/EclStoryCardGridDetailsComponent.md +1 -0
  163. package/docs/json/EclStoryCardItemComponent.md +1 -0
  164. package/docs/json/documentation.json +1889 -565
  165. package/docs/llms.txt +69 -34
  166. package/docs/miscellaneous/variables.html +132 -20
  167. package/docs/overview.html +1 -1
  168. package/docs/properties.html +1 -1
  169. package/fesm2022/eui-ecl-components-ecl-carousel.mjs +405 -407
  170. package/fesm2022/eui-ecl-components-ecl-carousel.mjs.map +1 -1
  171. package/fesm2022/eui-ecl-components-ecl-menu.mjs +15 -15
  172. package/fesm2022/eui-ecl-components-ecl-menu.mjs.map +1 -1
  173. package/fesm2022/eui-ecl-components-ecl-quiz.mjs +93 -55
  174. package/fesm2022/eui-ecl-components-ecl-quiz.mjs.map +1 -1
  175. package/fesm2022/eui-ecl-components-ecl-slider.mjs +187 -0
  176. package/fesm2022/eui-ecl-components-ecl-slider.mjs.map +1 -0
  177. package/fesm2022/eui-ecl-components-ecl-story-card.mjs +96 -18
  178. package/fesm2022/eui-ecl-components-ecl-story-card.mjs.map +1 -1
  179. package/package.json +18 -12
  180. package/types/eui-ecl-components-ecl-carousel.d.ts +234 -202
  181. package/types/eui-ecl-components-ecl-carousel.d.ts.map +1 -1
  182. package/types/eui-ecl-components-ecl-menu.d.ts +0 -2
  183. package/types/eui-ecl-components-ecl-menu.d.ts.map +1 -1
  184. package/types/eui-ecl-components-ecl-quiz.d.ts +94 -57
  185. package/types/eui-ecl-components-ecl-quiz.d.ts.map +1 -1
  186. package/types/eui-ecl-components-ecl-slider.d.ts +118 -0
  187. package/types/eui-ecl-components-ecl-slider.d.ts.map +1 -0
  188. package/types/eui-ecl-components-ecl-story-card.d.ts +78 -48
  189. package/types/eui-ecl-components-ecl-story-card.d.ts.map +1 -1
@@ -1,8 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Directive, input, signal, output, contentChild, ElementRef, computed, ChangeDetectionStrategy, Component, booleanAttribute, inject, contentChildren, viewChild, viewChildren, afterNextRender, effect, untracked } from '@angular/core';
3
- import { EclIconComponent } from '@eui/ecl/components/ecl-icon';
4
- import { ECLBaseDirective, EclRtlService } from '@eui/ecl/core';
5
- import { TranslatePipe } from '@ngx-translate/core';
2
+ import { Directive, input, signal, output, contentChild, ElementRef, viewChild, computed, ChangeDetectionStrategy, Component, effect, booleanAttribute, inject, contentChildren, viewChildren, afterNextRender, untracked } from '@angular/core';
3
+ import * as i1 from '@eui/ecl/components/ecl-slider';
4
+ import { EUI_ECL_SLIDER } from '@eui/ecl/components/ecl-slider';
5
+ import { ECLBaseDirective, EclRtlService, KeyCode } from '@eui/ecl/core';
6
+ import { TranslateService, TranslatePipe } from '@ngx-translate/core';
6
7
  import { EmblaCarouselDirective } from 'embla-carousel-angular';
7
8
  import { Subject, takeUntil } from 'rxjs';
8
9
  import { toSignal, outputToObservable } from '@angular/core/rxjs-interop';
@@ -99,30 +100,44 @@ class EclStoryCardItemComponent extends ECLBaseDirective {
99
100
  this.itemClick = output();
100
101
  /** Emitted when the loading bar CSS animation ends, signalling to advance to the next item. */
101
102
  this.loadingBarAnimationEnd = output();
103
+ /**
104
+ * Emitted when a keydown occurs on the tab button. The parent story card
105
+ * orchestrates keyboard navigation (arrows, Home, End) across all items.
106
+ */
107
+ this.keydownTab = output();
102
108
  /** Reference to the projected `picture[eclStoryCardPicture]` element for cloning into the mobile carousel. */
103
109
  this.pictureRef = contentChild(EclStoryCardPictureDirective, { ...(ngDevMode ? { debugName: "pictureRef" } : /* istanbul ignore next */ {}), read: ElementRef });
110
+ this.buttonRef = viewChild('tabButton', /* @ts-ignore */
111
+ ...(ngDevMode ? [{ debugName: "buttonRef" }] : /* istanbul ignore next */ []));
104
112
  this.cssClasses = computed(() => [
105
113
  super.getCssClasses('ecl-story-card__grid-item'),
106
114
  this.isExpanded() ? 'ecl-story-card__grid-item--expanded' : '',
107
115
  ].join(' ').trim(), /* @ts-ignore */
108
116
  ...(ngDevMode ? [{ debugName: "cssClasses" }] : /* istanbul ignore next */ []));
109
117
  }
118
+ /** Move focus to this item's tab button. Called by the parent during keyboard navigation. */
119
+ focusButton() {
120
+ this.buttonRef()?.nativeElement.focus();
121
+ }
110
122
  onButtonClick() {
111
123
  this.itemClick.emit(this.index());
112
124
  }
113
125
  onAnimationEnd() {
114
126
  this.loadingBarAnimationEnd.emit();
115
127
  }
128
+ onKeydown(event) {
129
+ this.keydownTab.emit(event);
130
+ }
116
131
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclStoryCardItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
117
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EclStoryCardItemComponent, isStandalone: true, selector: "li[eclStoryCardItem]", inputs: { gridTitle: { classPropertyName: "gridTitle", publicName: "gridTitle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", loadingBarAnimationEnd: "loadingBarAnimationEnd" }, host: { attributes: { "role": "presentation" }, properties: { "class": "cssClasses()" } }, queries: [{ propertyName: "pictureRef", first: true, predicate: EclStoryCardPictureDirective, descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<button class=\"ecl-story-card__grid-card\"\n type=\"button\"\n [attr.id]=\"tabId()\"\n role=\"tab\"\n [attr.aria-selected]=\"isExpanded()\"\n [attr.aria-controls]=\"panelId()\"\n (click)=\"onButtonClick()\">\n <div class=\"ecl-story-card__grid-image\">\n <ng-content select=\"picture[eclStoryCardPicture]\"></ng-content>\n <div class=\"ecl-story-card__grid-loading-bar\">\n <div class=\"ecl-story-card__grid-loading-bar-completion\"\n [class.is-paused]=\"!isExpanded() || !isAutoPlaying()\"\n (animationend)=\"onAnimationEnd()\">\n </div>\n </div>\n </div>\n <div class=\"ecl-story-card__grid-title-wrapper\">\n @if (gridTitle()) {\n <div class=\"ecl-story-card__grid-title\">{{ gridTitle() }}</div>\n }\n </div>\n</button>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
132
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EclStoryCardItemComponent, isStandalone: true, selector: "li[eclStoryCardItem]", inputs: { gridTitle: { classPropertyName: "gridTitle", publicName: "gridTitle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", loadingBarAnimationEnd: "loadingBarAnimationEnd", keydownTab: "keydownTab" }, host: { attributes: { "role": "presentation" }, properties: { "class": "cssClasses()" } }, queries: [{ propertyName: "pictureRef", first: true, predicate: EclStoryCardPictureDirective, descendants: true, read: ElementRef, isSignal: true }], viewQueries: [{ propertyName: "buttonRef", first: true, predicate: ["tabButton"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<button class=\"ecl-story-card__grid-card\"\n #tabButton\n type=\"button\"\n [attr.id]=\"tabId()\"\n role=\"tab\"\n [attr.aria-selected]=\"isExpanded()\"\n [attr.aria-controls]=\"panelId()\"\n [attr.tabindex]=\"isExpanded() ? 0 : -1\"\n (click)=\"onButtonClick()\"\n (keydown)=\"onKeydown($event)\">\n <div class=\"ecl-story-card__grid-image\">\n <ng-content select=\"picture[eclStoryCardPicture]\"></ng-content>\n <div class=\"ecl-story-card__grid-loading-bar\">\n <div class=\"ecl-story-card__grid-loading-bar-completion\"\n [class.is-paused]=\"!isExpanded() || !isAutoPlaying()\"\n (animationend)=\"onAnimationEnd()\">\n </div>\n </div>\n </div>\n <div class=\"ecl-story-card__grid-title-wrapper\">\n @if (gridTitle()) {\n <div class=\"ecl-story-card__grid-title\">{{ gridTitle() }}</div>\n }\n </div>\n</button>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
118
133
  }
119
134
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclStoryCardItemComponent, decorators: [{
120
135
  type: Component,
121
136
  args: [{ selector: 'li[eclStoryCardItem]', host: {
122
137
  role: 'presentation',
123
138
  '[class]': 'cssClasses()',
124
- }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<button class=\"ecl-story-card__grid-card\"\n type=\"button\"\n [attr.id]=\"tabId()\"\n role=\"tab\"\n [attr.aria-selected]=\"isExpanded()\"\n [attr.aria-controls]=\"panelId()\"\n (click)=\"onButtonClick()\">\n <div class=\"ecl-story-card__grid-image\">\n <ng-content select=\"picture[eclStoryCardPicture]\"></ng-content>\n <div class=\"ecl-story-card__grid-loading-bar\">\n <div class=\"ecl-story-card__grid-loading-bar-completion\"\n [class.is-paused]=\"!isExpanded() || !isAutoPlaying()\"\n (animationend)=\"onAnimationEnd()\">\n </div>\n </div>\n </div>\n <div class=\"ecl-story-card__grid-title-wrapper\">\n @if (gridTitle()) {\n <div class=\"ecl-story-card__grid-title\">{{ gridTitle() }}</div>\n }\n </div>\n</button>\n" }]
125
- }], propDecorators: { gridTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "gridTitle", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], loadingBarAnimationEnd: [{ type: i0.Output, args: ["loadingBarAnimationEnd"] }], pictureRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => EclStoryCardPictureDirective), { ...{ read: ElementRef }, isSignal: true }] }] } });
139
+ }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<button class=\"ecl-story-card__grid-card\"\n #tabButton\n type=\"button\"\n [attr.id]=\"tabId()\"\n role=\"tab\"\n [attr.aria-selected]=\"isExpanded()\"\n [attr.aria-controls]=\"panelId()\"\n [attr.tabindex]=\"isExpanded() ? 0 : -1\"\n (click)=\"onButtonClick()\"\n (keydown)=\"onKeydown($event)\">\n <div class=\"ecl-story-card__grid-image\">\n <ng-content select=\"picture[eclStoryCardPicture]\"></ng-content>\n <div class=\"ecl-story-card__grid-loading-bar\">\n <div class=\"ecl-story-card__grid-loading-bar-completion\"\n [class.is-paused]=\"!isExpanded() || !isAutoPlaying()\"\n (animationend)=\"onAnimationEnd()\">\n </div>\n </div>\n </div>\n <div class=\"ecl-story-card__grid-title-wrapper\">\n @if (gridTitle()) {\n <div class=\"ecl-story-card__grid-title\">{{ gridTitle() }}</div>\n }\n </div>\n</button>\n" }]
140
+ }], propDecorators: { gridTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "gridTitle", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], loadingBarAnimationEnd: [{ type: i0.Output, args: ["loadingBarAnimationEnd"] }], keydownTab: [{ type: i0.Output, args: ["keydownTab"] }], pictureRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => EclStoryCardPictureDirective), { ...{ read: ElementRef }, isSignal: true }] }], buttonRef: [{ type: i0.ViewChild, args: ['tabButton', { isSignal: true }] }] } });
126
141
 
127
142
  /**
128
143
  * Details panel sub-component (`tabpanel` role) within the ECL Story Card grid accordion.
@@ -137,7 +152,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
137
152
  */
138
153
  class EclStoryCardGridDetailsComponent extends ECLBaseDirective {
139
154
  constructor() {
140
- super(...arguments);
155
+ super();
156
+ /** Optional teaser label shown above the title. Hidden by CSS in the testimonial variant. */
157
+ this.teaserLabel = input('', /* @ts-ignore */
158
+ ...(ngDevMode ? [{ debugName: "teaserLabel" }] : /* istanbul ignore next */ []));
141
159
  /** Title shown in the details panel. */
142
160
  this.eclTitle = input('', /* @ts-ignore */
143
161
  ...(ngDevMode ? [{ debugName: "eclTitle" }] : /* istanbul ignore next */ []));
@@ -170,9 +188,19 @@ class EclStoryCardGridDetailsComponent extends ECLBaseDirective {
170
188
  ...(ngDevMode ? [{ debugName: "tabId" }] : /* istanbul ignore next */ []));
171
189
  /** Reference to the projected `[eclStoryCardLink]` element for cloning into the mobile carousel. */
172
190
  this.linkRef = contentChild(EclStoryCardLinkDirective, { ...(ngDevMode ? { debugName: "linkRef" } : /* istanbul ignore next */ {}), read: ElementRef });
191
+ // Associate the "Read more" link with its corresponding tab so assistive
192
+ // technologies announce the tab label as context for the link.
193
+ // Set before the parent clones the link into the carousel slide.
194
+ effect(() => {
195
+ const link = this.linkRef();
196
+ const tabId = this.tabId();
197
+ if (link && tabId) {
198
+ link.nativeElement.setAttribute('aria-describedby', tabId);
199
+ }
200
+ });
173
201
  }
174
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclStoryCardGridDetailsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
175
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EclStoryCardGridDetailsComponent, isStandalone: true, selector: "[eclStoryCardGridDetails]", inputs: { eclTitle: { classPropertyName: "eclTitle", publicName: "eclTitle", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, author: { classPropertyName: "author", publicName: "author", isSignal: true, isRequired: false, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "getCssClasses(\"ecl-story-card__grid-details\")", "attr.id": "panelId()", "attr.role": "\"tabpanel\"", "attr.aria-labelledby": "tabId()", "hidden": "!isActive()" } }, queries: [{ propertyName: "linkRef", first: true, predicate: EclStoryCardLinkDirective, descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<article class=\"ecl-story-card__grid-details-content\">\n <div class=\"ecl-story-card__content\">\n @if (isTestimonial()) {\n <div class=\"ecl-story-card__content-icon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"45\" viewBox=\"0 0 22 45\" fill=\"none\">\n <path d=\"M0 0H22V23.3143L0 44.5714V0Z\" fill=\"currentColor\"/>\n </svg>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"45\" viewBox=\"0 0 22 45\" fill=\"none\">\n <path d=\"M0 0H22V23.3143L0 44.5714V0Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n }\n @if (eclTitle()) {\n <div class=\"ecl-story-card__card-title\">{{ eclTitle() }}</div>\n }\n @if (author() || role() || source()) {\n <div class=\"ecl-story-card__testimonial\">\n @if (author()) {\n <span class=\"ecl-story-card__author\">{{ author() }}</span>\n }\n @if (role()) {\n <span class=\"ecl-story-card__role\">{{ role() }}</span>\n }\n @if (source()) {\n <cite class=\"ecl-story-card__source\">{{ source() }}</cite>\n }\n </div>\n }\n @if (description()) {\n <div class=\"ecl-story-card__card-description\">{{ description() }}</div>\n }\n <ng-content select=\"[eclStoryCardLink]\"></ng-content>\n </div>\n</article>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
202
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclStoryCardGridDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
203
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EclStoryCardGridDetailsComponent, isStandalone: true, selector: "[eclStoryCardGridDetails]", inputs: { teaserLabel: { classPropertyName: "teaserLabel", publicName: "teaserLabel", isSignal: true, isRequired: false, transformFunction: null }, eclTitle: { classPropertyName: "eclTitle", publicName: "eclTitle", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, author: { classPropertyName: "author", publicName: "author", isSignal: true, isRequired: false, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "getCssClasses(\"ecl-story-card__grid-details\")", "attr.id": "panelId()", "attr.role": "\"tabpanel\"", "attr.aria-labelledby": "tabId()", "attr.tabindex": "isActive() ? 0 : -1", "hidden": "!isActive()" } }, queries: [{ propertyName: "linkRef", first: true, predicate: EclStoryCardLinkDirective, descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<article class=\"ecl-story-card__grid-details-content\">\n <div class=\"ecl-story-card__content\">\n @if (isTestimonial()) {\n <div class=\"ecl-story-card__content-icon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"45\" viewBox=\"0 0 22 45\" fill=\"none\">\n <path d=\"M0 0H22V23.3143L0 44.5714V0Z\" fill=\"currentColor\"/>\n </svg>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"45\" viewBox=\"0 0 22 45\" fill=\"none\">\n <path d=\"M0 0H22V23.3143L0 44.5714V0Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n }\n @if (teaserLabel()) {\n <div class=\"ecl-story-card__teaser-label\">{{ teaserLabel() }}</div>\n }\n @if (eclTitle()) {\n <div class=\"ecl-story-card__card-title\">{{ eclTitle() }}</div>\n }\n @if (author() || role() || source()) {\n <div class=\"ecl-story-card__testimonial\">\n @if (author()) {\n <span class=\"ecl-story-card__author\">{{ author() }}</span>\n }\n @if (role()) {\n <span class=\"ecl-story-card__role\">{{ role() }}</span>\n }\n @if (source()) {\n <cite class=\"ecl-story-card__source\">{{ source() }}</cite>\n }\n </div>\n }\n @if (description()) {\n <div class=\"ecl-story-card__card-description\">{{ description() }}</div>\n }\n <ng-content select=\"[eclStoryCardLink]\"></ng-content>\n </div>\n</article>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
176
204
  }
177
205
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclStoryCardGridDetailsComponent, decorators: [{
178
206
  type: Component,
@@ -181,9 +209,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
181
209
  '[attr.id]': 'panelId()',
182
210
  '[attr.role]': '"tabpanel"',
183
211
  '[attr.aria-labelledby]': 'tabId()',
212
+ '[attr.tabindex]': 'isActive() ? 0 : -1',
184
213
  '[hidden]': '!isActive()',
185
- }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<article class=\"ecl-story-card__grid-details-content\">\n <div class=\"ecl-story-card__content\">\n @if (isTestimonial()) {\n <div class=\"ecl-story-card__content-icon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"45\" viewBox=\"0 0 22 45\" fill=\"none\">\n <path d=\"M0 0H22V23.3143L0 44.5714V0Z\" fill=\"currentColor\"/>\n </svg>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"45\" viewBox=\"0 0 22 45\" fill=\"none\">\n <path d=\"M0 0H22V23.3143L0 44.5714V0Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n }\n @if (eclTitle()) {\n <div class=\"ecl-story-card__card-title\">{{ eclTitle() }}</div>\n }\n @if (author() || role() || source()) {\n <div class=\"ecl-story-card__testimonial\">\n @if (author()) {\n <span class=\"ecl-story-card__author\">{{ author() }}</span>\n }\n @if (role()) {\n <span class=\"ecl-story-card__role\">{{ role() }}</span>\n }\n @if (source()) {\n <cite class=\"ecl-story-card__source\">{{ source() }}</cite>\n }\n </div>\n }\n @if (description()) {\n <div class=\"ecl-story-card__card-description\">{{ description() }}</div>\n }\n <ng-content select=\"[eclStoryCardLink]\"></ng-content>\n </div>\n</article>\n" }]
186
- }], propDecorators: { eclTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "eclTitle", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], author: [{ type: i0.Input, args: [{ isSignal: true, alias: "author", required: false }] }], role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: false }] }], source: [{ type: i0.Input, args: [{ isSignal: true, alias: "source", required: false }] }], linkRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => EclStoryCardLinkDirective), { ...{ read: ElementRef }, isSignal: true }] }] } });
214
+ }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<article class=\"ecl-story-card__grid-details-content\">\n <div class=\"ecl-story-card__content\">\n @if (isTestimonial()) {\n <div class=\"ecl-story-card__content-icon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"45\" viewBox=\"0 0 22 45\" fill=\"none\">\n <path d=\"M0 0H22V23.3143L0 44.5714V0Z\" fill=\"currentColor\"/>\n </svg>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"45\" viewBox=\"0 0 22 45\" fill=\"none\">\n <path d=\"M0 0H22V23.3143L0 44.5714V0Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n }\n @if (teaserLabel()) {\n <div class=\"ecl-story-card__teaser-label\">{{ teaserLabel() }}</div>\n }\n @if (eclTitle()) {\n <div class=\"ecl-story-card__card-title\">{{ eclTitle() }}</div>\n }\n @if (author() || role() || source()) {\n <div class=\"ecl-story-card__testimonial\">\n @if (author()) {\n <span class=\"ecl-story-card__author\">{{ author() }}</span>\n }\n @if (role()) {\n <span class=\"ecl-story-card__role\">{{ role() }}</span>\n }\n @if (source()) {\n <cite class=\"ecl-story-card__source\">{{ source() }}</cite>\n }\n </div>\n }\n @if (description()) {\n <div class=\"ecl-story-card__card-description\">{{ description() }}</div>\n }\n <ng-content select=\"[eclStoryCardLink]\"></ng-content>\n </div>\n</article>\n" }]
215
+ }], ctorParameters: () => [], propDecorators: { teaserLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "teaserLabel", required: false }] }], eclTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "eclTitle", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], author: [{ type: i0.Input, args: [{ isSignal: true, alias: "author", required: false }] }], role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: false }] }], source: [{ type: i0.Input, args: [{ isSignal: true, alias: "source", required: false }] }], linkRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => EclStoryCardLinkDirective), { ...{ read: ElementRef }, isSignal: true }] }] } });
187
216
 
188
217
  /**
189
218
  * ECL Story Card component that presents a collection of stories or testimonials in a
@@ -221,11 +250,10 @@ class EclStoryCardComponent extends ECLBaseDirective {
221
250
  /** Emitted when the active grid item index changes. Payload: `{ index: number }`. */
222
251
  this.selectionChange = output();
223
252
  this.eclRtlService = inject(EclRtlService);
253
+ this.translate = inject(TranslateService);
224
254
  this.generatedId = `story-card-${crypto.randomUUID().slice(0, 8)}`;
225
255
  this.componentId = computed(() => this.eclId() || this.generatedId, /* @ts-ignore */
226
256
  ...(ngDevMode ? [{ debugName: "componentId" }] : /* istanbul ignore next */ []));
227
- this.titleId = computed(() => `${this.componentId()}-title`, /* @ts-ignore */
228
- ...(ngDevMode ? [{ debugName: "titleId" }] : /* istanbul ignore next */ []));
229
257
  /** Current RTL state, derived reactively from the RTL service. */
230
258
  this.isRtl = toSignal(this.eclRtlService.currentRtlState$, { initialValue: false });
231
259
  /** Embla carousel options. Direction tracks the RTL state reactively. */
@@ -271,6 +299,18 @@ class EclStoryCardComponent extends ECLBaseDirective {
271
299
  ...(ngDevMode ? [{ debugName: "cssClasses" }] : /* istanbul ignore next */ []));
272
300
  this.slideDuration = computed(() => `${this.autoplayDelay()}ms`, /* @ts-ignore */
273
301
  ...(ngDevMode ? [{ debugName: "slideDuration" }] : /* istanbul ignore next */ []));
302
+ /**
303
+ * Pre-translated accessible label for each carousel dot, passed to the shared
304
+ * slider pager. Translated here since the pager receives plain strings.
305
+ */
306
+ this.dotAriaLabels = computed(() => {
307
+ const total = this.totalSlides();
308
+ return Array.from({ length: total }, (_unused, dotIndex) => this.translate.instant('ecl.story-card.GO-TO-SLIDE', {
309
+ current: dotIndex + 1,
310
+ total,
311
+ }));
312
+ }, /* @ts-ignore */
313
+ ...(ngDevMode ? [{ debugName: "dotAriaLabels" }] : /* istanbul ignore next */ []));
274
314
  afterNextRender(() => {
275
315
  setTimeout(() => this.clonePicturesToCarousel());
276
316
  });
@@ -302,6 +342,7 @@ class EclStoryCardComponent extends ECLBaseDirective {
302
342
  item.isAutoPlaying.set(this.isAutoPlaying());
303
343
  outputToObservable(item.itemClick).pipe(takeUntil(this.setupTeardown$)).subscribe((index) => this.onGridItemClick(index));
304
344
  outputToObservable(item.loadingBarAnimationEnd).pipe(takeUntil(this.setupTeardown$)).subscribe(() => this.onLoadingBarAnimationEnd());
345
+ outputToObservable(item.keydownTab).pipe(takeUntil(this.setupTeardown$)).subscribe((event) => this.onGridItemKeydown(event, i));
305
346
  });
306
347
  detailsArray.forEach((panel, i) => {
307
348
  panel.index.set(i);
@@ -351,6 +392,44 @@ class EclStoryCardComponent extends ECLBaseDirective {
351
392
  onGridNextClick() {
352
393
  this.setGridItem(this.expandedIndex() + 1);
353
394
  }
395
+ /**
396
+ * Orchestrates keyboard navigation across the grid tablist (WAI-ARIA tabs
397
+ * pattern). Moves focus only; selection still happens on click/Enter.
398
+ *
399
+ * - ArrowRight: focus the next tab, wrapping to the first.
400
+ * - ArrowLeft: focus the previous tab, wrapping to the last.
401
+ * - Home: focus the first tab.
402
+ * - End: focus the last tab.
403
+ *
404
+ * @param event the originating keydown from the focused item's button
405
+ * @param index the index of the item that emitted the event
406
+ */
407
+ onGridItemKeydown(event, index) {
408
+ const itemsArray = this.items();
409
+ const count = itemsArray.length;
410
+ if (count === 0) {
411
+ return;
412
+ }
413
+ let targetIndex = null;
414
+ switch (event.key) {
415
+ case KeyCode.ARROW_RIGHT:
416
+ targetIndex = (index + 1) % count;
417
+ break;
418
+ case KeyCode.ARROW_LEFT:
419
+ targetIndex = (index - 1 + count) % count;
420
+ break;
421
+ case KeyCode.HOME:
422
+ targetIndex = 0;
423
+ break;
424
+ case KeyCode.END:
425
+ targetIndex = count - 1;
426
+ break;
427
+ default:
428
+ return;
429
+ }
430
+ event.preventDefault();
431
+ itemsArray[targetIndex]?.focusButton();
432
+ }
354
433
  /** Handle animation end on the loading bar (advance to next). */
355
434
  onLoadingBarAnimationEnd() {
356
435
  if (this.isAutoPlaying()) {
@@ -432,20 +511,19 @@ class EclStoryCardComponent extends ECLBaseDirective {
432
511
  return Array.from({ length: this.totalSlides() }, (_, i) => i);
433
512
  }
434
513
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclStoryCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
435
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EclStoryCardComponent, isStandalone: true, selector: "section[eclStoryCard]", inputs: { eclTitle: { classPropertyName: "eclTitle", publicName: "eclTitle", isSignal: true, isRequired: false, transformFunction: null }, eclDescription: { classPropertyName: "eclDescription", publicName: "eclDescription", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, isAutoplay: { classPropertyName: "isAutoplay", publicName: "isAutoplay", isSignal: true, isRequired: false, transformFunction: null }, autoplayDelay: { classPropertyName: "autoplayDelay", publicName: "autoplayDelay", isSignal: true, isRequired: false, transformFunction: null }, eclId: { classPropertyName: "eclId", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectionChange: "selectionChange" }, host: { properties: { "id": "componentId()", "class": "cssClasses()", "attr.aria-labelledby": "titleId()", "style.--ecl-story-card-slide-duration": "slideDuration()" } }, queries: [{ propertyName: "items", predicate: EclStoryCardItemComponent, descendants: true, isSignal: true }, { propertyName: "detailsPanels", predicate: EclStoryCardGridDetailsComponent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "emblaRef", first: true, predicate: EmblaCarouselDirective, descendants: true, isSignal: true }, { propertyName: "carouselImageWrappers", predicate: ["carouselImageWrapper"], descendants: true, isSignal: true }, { propertyName: "carouselContentWrappers", predicate: ["carouselContentWrapper"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (eclTitle() || eclDescription()) {\n<div class=\"ecl-story-card__header\">\n @if (eclTitle()) {\n <div class=\"ecl-story-card__title\" [attr.id]=\"titleId()\">{{ eclTitle() }}</div>\n }\n @if (eclDescription()) {\n <div class=\"ecl-story-card__description\">{{ eclDescription() }}</div>\n }\n</div>\n}\n\n<!-- Mobile: Embla Carousel (auto-generated from items + details) -->\n<div class=\"ecl-story-card__carousel\">\n <div class=\"ecl-story-card__carousel-viewport\"\n role=\"region\"\n [attr.aria-label]=\"'ecl.story-card.SLIDER-LABEL' | translate\"\n emblaCarousel\n [options]=\"emblaOptions()\"\n [subscribeToEvents]=\"subscribeToEvents\"\n (emblaChange)=\"onEmblaChange($event)\">\n <ul class=\"ecl-story-card__carousel-container\">\n @for (item of items(); track i; let i = $index) {\n <li class=\"ecl-story-card__carousel-slide\"\n [attr.aria-hidden]=\"i !== activeSlideIndex() ? true : null\">\n <article class=\"ecl-story-card__card\">\n <div class=\"ecl-story-card__image-wrapper\" #carouselImageWrapper>\n </div>\n <div class=\"ecl-story-card__content\" #carouselContentWrapper>\n @if (detailsPanels()[i]; as panel) {\n @if (panel.eclTitle()) {\n <div class=\"ecl-story-card__card-title\">{{ panel.eclTitle() }}</div>\n }\n @if (panel.description()) {\n <div class=\"ecl-story-card__card-description\">{{ panel.description() }}</div>\n }\n }\n </div>\n </article>\n </li>\n }\n </ul>\n </div>\n\n <!-- Carousel Controls -->\n @if (totalSlides() > 1) {\n <div class=\"ecl-story-card__pager\">\n <button class=\"ecl-story-card__prev\"\n [disabled]=\"prevDisabled()\"\n (click)=\"onCarouselPrevClick()\"\n [attr.aria-label]=\"'ecl.story-card.SHOW-PREV-SLIDE' | translate\">\n <ecl-icon icon=\"corner-arrow\" size=\"s\" transform=\"rotate-270\"></ecl-icon>\n <span class=\"ecl-story-card__prev-label\">\n {{ 'ecl.story-card.PREVIOUS' | translate }}\n </span>\n </button>\n\n <div class=\"ecl-story-card__dots\">\n @for (dotIndex of getDotIndices(); track dotIndex) {\n <button\n #dotButton\n class=\"ecl-story-card__dot\"\n [class.ecl-story-card__dot--active]=\"dotIndex === activeSlideIndex()\"\n [class.is-prev]=\"dotIndex === activeSlideIndex() - 1\"\n [attr.aria-label]=\"'ecl.story-card.GO-TO-SLIDE' | translate: { current: dotIndex + 1, total: totalSlides() }\"\n (click)=\"goToSlide(dotIndex)\">\n </button>\n }\n </div>\n\n <button class=\"ecl-story-card__next\"\n [disabled]=\"nextDisabled()\"\n (click)=\"onCarouselNextClick()\"\n [attr.aria-label]=\"'ecl.story-card.SHOW-NEXT-SLIDE' | translate\">\n <span class=\"ecl-story-card__next-label\">\n {{ 'ecl.story-card.NEXT' | translate }}\n </span>\n <ecl-icon icon=\"corner-arrow\" size=\"s\" transform=\"rotate-90\"></ecl-icon>\n </button>\n </div>\n }\n</div>\n\n<!-- Desktop: Grid with Accordion (user-authored content projected here) -->\n<div class=\"ecl-story-card__grid\">\n <ng-content select=\"ul[eclStoryCardList]\"></ng-content>\n <ng-content select=\"[eclStoryCardGridDetails]\"></ng-content>\n\n <!-- Grid Controls -->\n @if (totalSlides() > 1) {\n <div class=\"ecl-story-card__grid-controls\">\n <button class=\"ecl-button ecl-button--tertiary ecl-button--neutral ecl-story-card__grid-prev ecl-button--icon-only\"\n type=\"button\"\n (click)=\"onGridPrevClick()\"\n [attr.aria-label]=\"'ecl.story-card.PREVIOUS' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.story-card.PREVIOUS' | translate }}\n </span>\n <ecl-icon iconSet=\"phosphor\" icon=\"caret-left\" size=\"l\"></ecl-icon>\n </span>\n </button>\n\n <button class=\"ecl-button ecl-button--secondary ecl-button--neutral ecl-story-card__grid-play ecl-button--icon-only\"\n type=\"button\"\n [style.display]=\"isAutoPlaying() ? 'none' : 'flex'\"\n (click)=\"onPlayClick()\"\n [attr.aria-label]=\"'ecl.story-card.PLAY' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.story-card.PLAY' | translate }}\n </span>\n <ecl-icon iconSet=\"phosphor-fill\" icon=\"play\" size=\"l\"></ecl-icon>\n </span>\n </button>\n\n <button class=\"ecl-button ecl-button--secondary ecl-button--neutral ecl-story-card__grid-pause ecl-button--icon-only\"\n type=\"button\"\n [style.display]=\"isAutoPlaying() ? 'flex' : 'none'\"\n (click)=\"onPauseClick()\"\n [attr.aria-label]=\"'ecl.story-card.PAUSE' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.story-card.PAUSE' | translate }}\n </span>\n <ecl-icon iconSet=\"phosphor-fill\" icon=\"pause\" size=\"l\"></ecl-icon>\n </span>\n </button>\n\n <button class=\"ecl-button ecl-button--tertiary ecl-button--neutral ecl-story-card__grid-next ecl-button--icon-only\"\n type=\"button\"\n (click)=\"onGridNextClick()\"\n [attr.aria-label]=\"'ecl.story-card.NEXT' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.story-card.NEXT' | translate }}\n </span>\n <ecl-icon iconSet=\"phosphor\" icon=\"caret-right\" size=\"l\"></ecl-icon>\n </span>\n </button>\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "title", "ariaHidden", "focusable", "isFlipHorizontal"] }, { kind: "directive", type: EmblaCarouselDirective, selector: "[emblaCarousel]", inputs: ["options", "plugins", "subscribeToEvents", "eventsThrottleTime"], outputs: ["emblaChange"], exportAs: ["emblaCarousel"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
514
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EclStoryCardComponent, isStandalone: true, selector: "section[eclStoryCard]", inputs: { eclTitle: { classPropertyName: "eclTitle", publicName: "eclTitle", isSignal: true, isRequired: false, transformFunction: null }, eclDescription: { classPropertyName: "eclDescription", publicName: "eclDescription", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, isAutoplay: { classPropertyName: "isAutoplay", publicName: "isAutoplay", isSignal: true, isRequired: false, transformFunction: null }, autoplayDelay: { classPropertyName: "autoplayDelay", publicName: "autoplayDelay", isSignal: true, isRequired: false, transformFunction: null }, eclId: { classPropertyName: "eclId", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectionChange: "selectionChange" }, host: { properties: { "id": "componentId()", "class": "cssClasses()", "style.--ecl-story-card-slide-duration": "slideDuration()" } }, queries: [{ propertyName: "items", predicate: EclStoryCardItemComponent, descendants: true, isSignal: true }, { propertyName: "detailsPanels", predicate: EclStoryCardGridDetailsComponent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "emblaRef", first: true, predicate: EmblaCarouselDirective, descendants: true, isSignal: true }, { propertyName: "carouselImageWrappers", predicate: ["carouselImageWrapper"], descendants: true, isSignal: true }, { propertyName: "carouselContentWrappers", predicate: ["carouselContentWrapper"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (eclTitle() || eclDescription()) {\n<div class=\"ecl-story-card__header\">\n @if (eclTitle()) {\n <div class=\"ecl-story-card__title\">{{ eclTitle() }}</div>\n }\n @if (eclDescription()) {\n <div class=\"ecl-story-card__description\">{{ eclDescription() }}</div>\n }\n</div>\n}\n\n<!-- Mobile: Embla Carousel (auto-generated from items + details) -->\n<div class=\"ecl-story-card__carousel\">\n <div class=\"ecl-story-card__carousel-viewport\"\n role=\"region\"\n [attr.aria-label]=\"'ecl.story-card.SLIDER-LABEL' | translate\"\n emblaCarousel\n [options]=\"emblaOptions()\"\n [subscribeToEvents]=\"subscribeToEvents\"\n (emblaChange)=\"onEmblaChange($event)\">\n <ul class=\"ecl-story-card__carousel-container\">\n @for (item of items(); track i; let i = $index) {\n <li class=\"ecl-story-card__carousel-slide\"\n [attr.aria-hidden]=\"i !== activeSlideIndex() ? true : null\">\n <article class=\"ecl-story-card__card\">\n <div class=\"ecl-story-card__image-wrapper\" #carouselImageWrapper>\n </div>\n <div class=\"ecl-story-card__content\" #carouselContentWrapper>\n @if (detailsPanels()[i]; as panel) {\n @if (panel.teaserLabel()) {\n <div class=\"ecl-story-card__teaser-label\">{{ panel.teaserLabel() }}</div>\n }\n @if (panel.eclTitle()) {\n <div class=\"ecl-story-card__card-title\">{{ panel.eclTitle() }}</div>\n }\n @if (panel.description()) {\n <div class=\"ecl-story-card__card-description\">{{ panel.description() }}</div>\n }\n }\n </div>\n </article>\n </li>\n }\n </ul>\n </div>\n\n <!-- Carousel Controls -->\n @if (totalSlides() > 1) {\n <ecl-slider-pager\n class=\"ecl-story-card__pager\"\n variant=\"dots\"\n size=\"s\"\n prevExtraClasses=\"ecl-story-card__prev\"\n nextExtraClasses=\"ecl-story-card__next\"\n dotsExtraClasses=\"ecl-story-card__dots\"\n dotExtraClasses=\"ecl-story-card__dot\"\n [activeIndex]=\"activeSlideIndex()\"\n [isPrevDisabled]=\"prevDisabled()\"\n [isNextDisabled]=\"nextDisabled()\"\n [dotIndices]=\"getDotIndices()\"\n [dotAriaLabels]=\"dotAriaLabels()\"\n (prev)=\"onCarouselPrevClick()\"\n (next)=\"onCarouselNextClick()\"\n (goTo)=\"goToSlide($event)\">\n </ecl-slider-pager>\n }\n</div>\n\n<!-- Desktop: Grid with Accordion (user-authored content projected here) -->\n<div class=\"ecl-story-card__grid\">\n <!-- Grid Controls -->\n @if (totalSlides() > 1) {\n <ecl-slider-pager\n class=\"ecl-story-card__grid-controls\"\n variant=\"play-pause\"\n size=\"l\"\n [isPlaying]=\"isAutoPlaying()\"\n prevExtraClasses=\"ecl-story-card__grid-prev\"\n nextExtraClasses=\"ecl-story-card__grid-next\"\n playExtraClasses=\"ecl-story-card__grid-play\"\n pauseExtraClasses=\"ecl-story-card__grid-pause\"\n (prev)=\"onGridPrevClick()\"\n (next)=\"onGridNextClick()\"\n (play)=\"onPlayClick()\"\n (pause)=\"onPauseClick()\">\n </ecl-slider-pager>\n }\n\n <ng-content select=\"ul[eclStoryCardList]\"></ng-content>\n <ng-content select=\"[eclStoryCardGridDetails]\"></ng-content>\n</div>\n", dependencies: [{ kind: "component", type: i1.EclSliderPagerComponent, selector: "ecl-slider-pager", inputs: ["size", "variant", "isPlaying", "isPrevDisabled", "isNextDisabled", "activeIndex", "dotIndices", "dotAriaLabels", "prevExtraClasses", "nextExtraClasses", "dotsExtraClasses", "dotExtraClasses", "playExtraClasses", "pauseExtraClasses"], outputs: ["prev", "next", "goTo", "play", "pause"] }, { kind: "directive", type: EmblaCarouselDirective, selector: "[emblaCarousel]", inputs: ["options", "plugins", "subscribeToEvents", "eventsThrottleTime"], outputs: ["emblaChange"], exportAs: ["emblaCarousel"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
436
515
  }
437
516
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclStoryCardComponent, decorators: [{
438
517
  type: Component,
439
518
  args: [{ selector: 'section[eclStoryCard]', host: {
440
519
  '[id]': 'componentId()',
441
520
  '[class]': 'cssClasses()',
442
- '[attr.aria-labelledby]': 'titleId()',
443
521
  '[style.--ecl-story-card-slide-duration]': 'slideDuration()',
444
522
  }, imports: [
445
523
  TranslatePipe,
446
- EclIconComponent,
524
+ ...EUI_ECL_SLIDER,
447
525
  EmblaCarouselDirective,
448
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (eclTitle() || eclDescription()) {\n<div class=\"ecl-story-card__header\">\n @if (eclTitle()) {\n <div class=\"ecl-story-card__title\" [attr.id]=\"titleId()\">{{ eclTitle() }}</div>\n }\n @if (eclDescription()) {\n <div class=\"ecl-story-card__description\">{{ eclDescription() }}</div>\n }\n</div>\n}\n\n<!-- Mobile: Embla Carousel (auto-generated from items + details) -->\n<div class=\"ecl-story-card__carousel\">\n <div class=\"ecl-story-card__carousel-viewport\"\n role=\"region\"\n [attr.aria-label]=\"'ecl.story-card.SLIDER-LABEL' | translate\"\n emblaCarousel\n [options]=\"emblaOptions()\"\n [subscribeToEvents]=\"subscribeToEvents\"\n (emblaChange)=\"onEmblaChange($event)\">\n <ul class=\"ecl-story-card__carousel-container\">\n @for (item of items(); track i; let i = $index) {\n <li class=\"ecl-story-card__carousel-slide\"\n [attr.aria-hidden]=\"i !== activeSlideIndex() ? true : null\">\n <article class=\"ecl-story-card__card\">\n <div class=\"ecl-story-card__image-wrapper\" #carouselImageWrapper>\n </div>\n <div class=\"ecl-story-card__content\" #carouselContentWrapper>\n @if (detailsPanels()[i]; as panel) {\n @if (panel.eclTitle()) {\n <div class=\"ecl-story-card__card-title\">{{ panel.eclTitle() }}</div>\n }\n @if (panel.description()) {\n <div class=\"ecl-story-card__card-description\">{{ panel.description() }}</div>\n }\n }\n </div>\n </article>\n </li>\n }\n </ul>\n </div>\n\n <!-- Carousel Controls -->\n @if (totalSlides() > 1) {\n <div class=\"ecl-story-card__pager\">\n <button class=\"ecl-story-card__prev\"\n [disabled]=\"prevDisabled()\"\n (click)=\"onCarouselPrevClick()\"\n [attr.aria-label]=\"'ecl.story-card.SHOW-PREV-SLIDE' | translate\">\n <ecl-icon icon=\"corner-arrow\" size=\"s\" transform=\"rotate-270\"></ecl-icon>\n <span class=\"ecl-story-card__prev-label\">\n {{ 'ecl.story-card.PREVIOUS' | translate }}\n </span>\n </button>\n\n <div class=\"ecl-story-card__dots\">\n @for (dotIndex of getDotIndices(); track dotIndex) {\n <button\n #dotButton\n class=\"ecl-story-card__dot\"\n [class.ecl-story-card__dot--active]=\"dotIndex === activeSlideIndex()\"\n [class.is-prev]=\"dotIndex === activeSlideIndex() - 1\"\n [attr.aria-label]=\"'ecl.story-card.GO-TO-SLIDE' | translate: { current: dotIndex + 1, total: totalSlides() }\"\n (click)=\"goToSlide(dotIndex)\">\n </button>\n }\n </div>\n\n <button class=\"ecl-story-card__next\"\n [disabled]=\"nextDisabled()\"\n (click)=\"onCarouselNextClick()\"\n [attr.aria-label]=\"'ecl.story-card.SHOW-NEXT-SLIDE' | translate\">\n <span class=\"ecl-story-card__next-label\">\n {{ 'ecl.story-card.NEXT' | translate }}\n </span>\n <ecl-icon icon=\"corner-arrow\" size=\"s\" transform=\"rotate-90\"></ecl-icon>\n </button>\n </div>\n }\n</div>\n\n<!-- Desktop: Grid with Accordion (user-authored content projected here) -->\n<div class=\"ecl-story-card__grid\">\n <ng-content select=\"ul[eclStoryCardList]\"></ng-content>\n <ng-content select=\"[eclStoryCardGridDetails]\"></ng-content>\n\n <!-- Grid Controls -->\n @if (totalSlides() > 1) {\n <div class=\"ecl-story-card__grid-controls\">\n <button class=\"ecl-button ecl-button--tertiary ecl-button--neutral ecl-story-card__grid-prev ecl-button--icon-only\"\n type=\"button\"\n (click)=\"onGridPrevClick()\"\n [attr.aria-label]=\"'ecl.story-card.PREVIOUS' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.story-card.PREVIOUS' | translate }}\n </span>\n <ecl-icon iconSet=\"phosphor\" icon=\"caret-left\" size=\"l\"></ecl-icon>\n </span>\n </button>\n\n <button class=\"ecl-button ecl-button--secondary ecl-button--neutral ecl-story-card__grid-play ecl-button--icon-only\"\n type=\"button\"\n [style.display]=\"isAutoPlaying() ? 'none' : 'flex'\"\n (click)=\"onPlayClick()\"\n [attr.aria-label]=\"'ecl.story-card.PLAY' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.story-card.PLAY' | translate }}\n </span>\n <ecl-icon iconSet=\"phosphor-fill\" icon=\"play\" size=\"l\"></ecl-icon>\n </span>\n </button>\n\n <button class=\"ecl-button ecl-button--secondary ecl-button--neutral ecl-story-card__grid-pause ecl-button--icon-only\"\n type=\"button\"\n [style.display]=\"isAutoPlaying() ? 'flex' : 'none'\"\n (click)=\"onPauseClick()\"\n [attr.aria-label]=\"'ecl.story-card.PAUSE' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.story-card.PAUSE' | translate }}\n </span>\n <ecl-icon iconSet=\"phosphor-fill\" icon=\"pause\" size=\"l\"></ecl-icon>\n </span>\n </button>\n\n <button class=\"ecl-button ecl-button--tertiary ecl-button--neutral ecl-story-card__grid-next ecl-button--icon-only\"\n type=\"button\"\n (click)=\"onGridNextClick()\"\n [attr.aria-label]=\"'ecl.story-card.NEXT' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.story-card.NEXT' | translate }}\n </span>\n <ecl-icon iconSet=\"phosphor\" icon=\"caret-right\" size=\"l\"></ecl-icon>\n </span>\n </button>\n </div>\n }\n</div>\n" }]
526
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (eclTitle() || eclDescription()) {\n<div class=\"ecl-story-card__header\">\n @if (eclTitle()) {\n <div class=\"ecl-story-card__title\">{{ eclTitle() }}</div>\n }\n @if (eclDescription()) {\n <div class=\"ecl-story-card__description\">{{ eclDescription() }}</div>\n }\n</div>\n}\n\n<!-- Mobile: Embla Carousel (auto-generated from items + details) -->\n<div class=\"ecl-story-card__carousel\">\n <div class=\"ecl-story-card__carousel-viewport\"\n role=\"region\"\n [attr.aria-label]=\"'ecl.story-card.SLIDER-LABEL' | translate\"\n emblaCarousel\n [options]=\"emblaOptions()\"\n [subscribeToEvents]=\"subscribeToEvents\"\n (emblaChange)=\"onEmblaChange($event)\">\n <ul class=\"ecl-story-card__carousel-container\">\n @for (item of items(); track i; let i = $index) {\n <li class=\"ecl-story-card__carousel-slide\"\n [attr.aria-hidden]=\"i !== activeSlideIndex() ? true : null\">\n <article class=\"ecl-story-card__card\">\n <div class=\"ecl-story-card__image-wrapper\" #carouselImageWrapper>\n </div>\n <div class=\"ecl-story-card__content\" #carouselContentWrapper>\n @if (detailsPanels()[i]; as panel) {\n @if (panel.teaserLabel()) {\n <div class=\"ecl-story-card__teaser-label\">{{ panel.teaserLabel() }}</div>\n }\n @if (panel.eclTitle()) {\n <div class=\"ecl-story-card__card-title\">{{ panel.eclTitle() }}</div>\n }\n @if (panel.description()) {\n <div class=\"ecl-story-card__card-description\">{{ panel.description() }}</div>\n }\n }\n </div>\n </article>\n </li>\n }\n </ul>\n </div>\n\n <!-- Carousel Controls -->\n @if (totalSlides() > 1) {\n <ecl-slider-pager\n class=\"ecl-story-card__pager\"\n variant=\"dots\"\n size=\"s\"\n prevExtraClasses=\"ecl-story-card__prev\"\n nextExtraClasses=\"ecl-story-card__next\"\n dotsExtraClasses=\"ecl-story-card__dots\"\n dotExtraClasses=\"ecl-story-card__dot\"\n [activeIndex]=\"activeSlideIndex()\"\n [isPrevDisabled]=\"prevDisabled()\"\n [isNextDisabled]=\"nextDisabled()\"\n [dotIndices]=\"getDotIndices()\"\n [dotAriaLabels]=\"dotAriaLabels()\"\n (prev)=\"onCarouselPrevClick()\"\n (next)=\"onCarouselNextClick()\"\n (goTo)=\"goToSlide($event)\">\n </ecl-slider-pager>\n }\n</div>\n\n<!-- Desktop: Grid with Accordion (user-authored content projected here) -->\n<div class=\"ecl-story-card__grid\">\n <!-- Grid Controls -->\n @if (totalSlides() > 1) {\n <ecl-slider-pager\n class=\"ecl-story-card__grid-controls\"\n variant=\"play-pause\"\n size=\"l\"\n [isPlaying]=\"isAutoPlaying()\"\n prevExtraClasses=\"ecl-story-card__grid-prev\"\n nextExtraClasses=\"ecl-story-card__grid-next\"\n playExtraClasses=\"ecl-story-card__grid-play\"\n pauseExtraClasses=\"ecl-story-card__grid-pause\"\n (prev)=\"onGridPrevClick()\"\n (next)=\"onGridNextClick()\"\n (play)=\"onPlayClick()\"\n (pause)=\"onPauseClick()\">\n </ecl-slider-pager>\n }\n\n <ng-content select=\"ul[eclStoryCardList]\"></ng-content>\n <ng-content select=\"[eclStoryCardGridDetails]\"></ng-content>\n</div>\n" }]
449
527
  }], ctorParameters: () => [], propDecorators: { eclTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "eclTitle", required: false }] }], eclDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "eclDescription", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], isAutoplay: [{ type: i0.Input, args: [{ isSignal: true, alias: "isAutoplay", required: false }] }], autoplayDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoplayDelay", required: false }] }], eclId: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }], items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => EclStoryCardItemComponent), { ...{ descendants: true }, isSignal: true }] }], detailsPanels: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => EclStoryCardGridDetailsComponent), { ...{ descendants: true }, isSignal: true }] }], emblaRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => EmblaCarouselDirective), { isSignal: true }] }], carouselImageWrappers: [{ type: i0.ViewChildren, args: ['carouselImageWrapper', { isSignal: true }] }], carouselContentWrappers: [{ type: i0.ViewChildren, args: ['carouselContentWrapper', { isSignal: true }] }] } });
450
528
 
451
529
  const EUI_ECL_STORY_CARD = [
@@ -1 +1 @@
1
- {"version":3,"file":"eui-ecl-components-ecl-story-card.mjs","sources":["../../components/ecl-story-card/ecl-story-card-directives.ts","../../components/ecl-story-card/ecl-story-card-item/ecl-story-card-item.component.ts","../../components/ecl-story-card/ecl-story-card-item/ecl-story-card-item.component.html","../../components/ecl-story-card/ecl-story-card-grid-details/ecl-story-card-grid-details.component.ts","../../components/ecl-story-card/ecl-story-card-grid-details/ecl-story-card-grid-details.component.html","../../components/ecl-story-card/ecl-story-card.component.ts","../../components/ecl-story-card/ecl-story-card.component.html","../../components/ecl-story-card/index.ts","../../components/ecl-story-card/eui-ecl-components-ecl-story-card.ts"],"sourcesContent":["import { Directive } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive applied to the <ul> element that holds the story card items.\n * Adds the grid container class and tablist role.\n */\n@Directive({\n selector: 'ul[eclStoryCardList]',\n host: {\n role: 'tablist',\n '[class]': 'getCssClasses(\"ecl-story-card__grid-container\")',\n },\n})\nexport class EclStoryCardListDirective extends ECLBaseDirective {}\n\n/**\n * Directive applied to <picture> elements inside a story card item.\n * Adds the ECL picture classes.\n */\n@Directive({\n selector: 'picture[eclStoryCardPicture]',\n host: {\n '[class]': 'getCssClasses(\"ecl-picture ecl-story-card__picture\")',\n },\n})\nexport class EclStoryCardPictureDirective extends ECLBaseDirective {}\n\n/**\n * Directive applied to <a> elements inside story card grid details.\n * Adds the ECL link classes for the \"Read more\" link.\n */\n@Directive({\n selector: '[eclStoryCardLink]',\n host: {\n '[class]': 'getCssClasses(\"ecl-link ecl-link--standalone ecl-link--icon ecl-story-card__link\")',\n },\n})\nexport class EclStoryCardLinkDirective extends ECLBaseDirective {}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n ElementRef,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclStoryCardPictureDirective } from '../ecl-story-card-directives';\n\n/**\n * Individual grid item (tab role) within the ECL Story Card desktop accordion.\n * Applied to `<li>` elements inside `ul[eclStoryCardList]`.\n * Renders the accordion tab button with the loading bar animation.\n * For the mobile carousel, the parent `EclStoryCardComponent` clones the projected\n * `picture[eclStoryCardPicture]` into the carousel slide via `pictureRef`.\n *\n * - Selector: `li[eclStoryCardItem]`.\n * - `gridTitle` is the short label shown in the tab button.\n * - `isExpanded`, `isAutoPlaying`, `index`, `tabId`, and `panelId` are writable signals\n * set by the parent `EclStoryCardComponent` during grid setup.\n * - Emits `itemClick` (with item index) when the tab button is clicked.\n * - Emits `loadingBarAnimationEnd` when the autoplay loading bar animation finishes.\n */\n@Component({\n selector: 'li[eclStoryCardItem]',\n templateUrl: './ecl-story-card-item.component.html',\n host: {\n role: 'presentation',\n '[class]': 'cssClasses()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EclStoryCardItemComponent extends ECLBaseDirective {\n\n /** Short title displayed in the accordion tab button. */\n gridTitle = input<string>('');\n\n /** Whether this item is currently expanded/selected. Set by the parent `EclStoryCardComponent`. */\n isExpanded = signal(false);\n\n /** Whether autoplay is active for this item (controls the loading bar animation). Set by parent. */\n isAutoPlaying = signal(false);\n\n /** Zero-based index of this item in the list. Set by parent. */\n index = signal(0);\n\n /** Generated ID for the tab button element. Set by parent. */\n tabId = signal('');\n\n /** ID of the controlled `tabpanel` (`eclStoryCardGridDetails`). Set by parent. */\n panelId = signal('');\n\n /** Emitted when the tab button is clicked; payload is this item's index. */\n itemClick = output<number>();\n\n /** Emitted when the loading bar CSS animation ends, signalling to advance to the next item. */\n loadingBarAnimationEnd = output<void>();\n\n /** Reference to the projected `picture[eclStoryCardPicture]` element for cloning into the mobile carousel. */\n pictureRef = contentChild(EclStoryCardPictureDirective, { read: ElementRef });\n\n readonly cssClasses = computed(() => [\n super.getCssClasses('ecl-story-card__grid-item'),\n this.isExpanded() ? 'ecl-story-card__grid-item--expanded' : '',\n ].join(' ').trim());\n\n protected onButtonClick(): void {\n this.itemClick.emit(this.index());\n }\n\n protected onAnimationEnd(): void {\n this.loadingBarAnimationEnd.emit();\n }\n}\n","<button class=\"ecl-story-card__grid-card\"\n type=\"button\"\n [attr.id]=\"tabId()\"\n role=\"tab\"\n [attr.aria-selected]=\"isExpanded()\"\n [attr.aria-controls]=\"panelId()\"\n (click)=\"onButtonClick()\">\n <div class=\"ecl-story-card__grid-image\">\n <ng-content select=\"picture[eclStoryCardPicture]\"></ng-content>\n <div class=\"ecl-story-card__grid-loading-bar\">\n <div class=\"ecl-story-card__grid-loading-bar-completion\"\n [class.is-paused]=\"!isExpanded() || !isAutoPlaying()\"\n (animationend)=\"onAnimationEnd()\">\n </div>\n </div>\n </div>\n <div class=\"ecl-story-card__grid-title-wrapper\">\n @if (gridTitle()) {\n <div class=\"ecl-story-card__grid-title\">{{ gridTitle() }}</div>\n }\n </div>\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n contentChild,\n ElementRef,\n input,\n signal,\n} from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclStoryCardLinkDirective } from '../ecl-story-card-directives';\n\n/**\n * Details panel sub-component (`tabpanel` role) within the ECL Story Card grid accordion.\n * Renders the expanded content for a selected story or testimonial item:\n * title, description, and an optional projected read-more link.\n * For the `'testimonial'` variant, additional `author`, `role`, and `source` inputs are shown.\n *\n * - Selector: `[eclStoryCardGridDetails]`.\n * - `isActive`, `isTestimonial`, `index`, `panelId`, and `tabId` are writable signals\n * set by the parent `EclStoryCardComponent` during grid setup.\n * - `linkRef` is a `contentChild` query used by the parent to clone the link into the mobile carousel.\n */\n@Component({\n selector: '[eclStoryCardGridDetails]',\n templateUrl: './ecl-story-card-grid-details.component.html',\n host: {\n '[class]': 'getCssClasses(\"ecl-story-card__grid-details\")',\n '[attr.id]': 'panelId()',\n '[attr.role]': '\"tabpanel\"',\n '[attr.aria-labelledby]': 'tabId()',\n '[hidden]': '!isActive()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EclStoryCardGridDetailsComponent extends ECLBaseDirective {\n\n /** Title shown in the details panel. */\n eclTitle = input<string>('');\n\n /** Description shown in the details panel. */\n description = input<string>('');\n\n /** Author name for the testimonial variant. */\n author = input<string>('');\n\n /** Author role/position for the testimonial variant. */\n role = input<string>('');\n\n /** Publication source for the testimonial variant. */\n source = input<string>('');\n\n /** Whether this panel is currently visible. Set by the parent `EclStoryCardComponent`. */\n isActive = signal(false);\n\n /** Whether the parent story card is in the `'testimonial'` variant. Set by parent. */\n isTestimonial = signal(false);\n\n /** Zero-based index of this panel. Set by parent. */\n index = signal(0);\n\n /** Generated panel `id`. Set by parent. */\n panelId = signal('');\n\n /** `id` of the controlling tab button. Set by parent. */\n tabId = signal('');\n\n /** Reference to the projected `[eclStoryCardLink]` element for cloning into the mobile carousel. */\n linkRef = contentChild(EclStoryCardLinkDirective, { read: ElementRef });\n}\n","<article class=\"ecl-story-card__grid-details-content\">\n <div class=\"ecl-story-card__content\">\n @if (isTestimonial()) {\n <div class=\"ecl-story-card__content-icon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"45\" viewBox=\"0 0 22 45\" fill=\"none\">\n <path d=\"M0 0H22V23.3143L0 44.5714V0Z\" fill=\"currentColor\"/>\n </svg>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"45\" viewBox=\"0 0 22 45\" fill=\"none\">\n <path d=\"M0 0H22V23.3143L0 44.5714V0Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n }\n @if (eclTitle()) {\n <div class=\"ecl-story-card__card-title\">{{ eclTitle() }}</div>\n }\n @if (author() || role() || source()) {\n <div class=\"ecl-story-card__testimonial\">\n @if (author()) {\n <span class=\"ecl-story-card__author\">{{ author() }}</span>\n }\n @if (role()) {\n <span class=\"ecl-story-card__role\">{{ role() }}</span>\n }\n @if (source()) {\n <cite class=\"ecl-story-card__source\">{{ source() }}</cite>\n }\n </div>\n }\n @if (description()) {\n <div class=\"ecl-story-card__card-description\">{{ description() }}</div>\n }\n <ng-content select=\"[eclStoryCardLink]\"></ng-content>\n </div>\n</article>\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n output,\n signal,\n untracked,\n viewChild,\n viewChildren,\n} from '@angular/core';\nimport { EclIconComponent } from '@eui/ecl/components/ecl-icon';\nimport { ECLBaseDirective, EclRtlService } from '@eui/ecl/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { EmblaCarouselDirective } from 'embla-carousel-angular';\nimport { Subject, takeUntil } from 'rxjs';\nimport { outputToObservable, toSignal } from '@angular/core/rxjs-interop';\n\nimport { EclStoryCardItemComponent } from './ecl-story-card-item/ecl-story-card-item.component';\nimport { EclStoryCardGridDetailsComponent } from './ecl-story-card-grid-details/ecl-story-card-grid-details.component';\nimport { EmblaCarouselType, EmblaEventType } from 'embla-carousel';\n\nexport interface EclStoryCardSelectionEvent {\n index: number;\n}\n\n/**\n * ECL Story Card component that presents a collection of stories or testimonials in a\n * desktop grid-accordion with autoplay and a mobile Embla carousel.\n * On desktop, projected `li[eclStoryCardItem]` items form a tab/tabpanel accordion;\n * on mobile the same items are cloned into a carousel automatically.\n *\n * - Selector: `section[eclStoryCard]`.\n * - `variant`: `'story'` (default) or `'testimonial'`.\n * - `isAutoplay` enables auto-advancing through grid items. `autoplayDelay` sets the interval (ms, default 10000).\n * - All internal IDs derive from `eclId` (alias `id`); a UUID is generated when omitted.\n * - Emits `selectionChange` whenever the active grid item changes.\n * - Structural composition: `ul[eclStoryCardList]` > `li[eclStoryCardItem]` + `[eclStoryCardGridDetails]`\n * with `picture[eclStoryCardPicture]` and `[eclStoryCardLink]` projected inside each.\n */\n@Component({\n selector: 'section[eclStoryCard]',\n templateUrl: './ecl-story-card.component.html',\n host: {\n '[id]': 'componentId()',\n '[class]': 'cssClasses()',\n '[attr.aria-labelledby]': 'titleId()',\n '[style.--ecl-story-card-slide-duration]': 'slideDuration()',\n },\n imports: [\n TranslatePipe,\n EclIconComponent,\n EmblaCarouselDirective,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EclStoryCardComponent extends ECLBaseDirective implements OnDestroy {\n\n /** Title displayed in the story card header. */\n eclTitle = input<string>('');\n\n /** Description text displayed below the title. */\n eclDescription = input<string>('');\n\n /** Variant of the story card: `'story'` (default) or `'testimonial'`. */\n variant = input<'story' | 'testimonial'>('story');\n\n /** When `true`, enables autoplay for the desktop grid accordion. */\n isAutoplay = input(false, { transform: booleanAttribute });\n\n /** Autoplay slide duration in milliseconds. Default: `10000`. */\n autoplayDelay = input<number>(10000);\n\n /** HTML `id` for the component; all internal IDs derive from it. Auto-generated when omitted. */\n eclId = input<string>('', { alias: 'id' });\n\n /** Emitted when the active grid item index changes. Payload: `{ index: number }`. */\n selectionChange = output<EclStoryCardSelectionEvent>();\n\n private eclRtlService = inject(EclRtlService);\n\n private generatedId = `story-card-${crypto.randomUUID().slice(0, 8)}`;\n protected componentId = computed(() => this.eclId() || this.generatedId);\n protected titleId = computed(() => `${this.componentId()}-title`);\n\n /** Current RTL state, derived reactively from the RTL service. */\n private isRtl = toSignal(this.eclRtlService.currentRtlState$, { initialValue: false });\n\n /** Embla carousel options. Direction tracks the RTL state reactively. */\n protected emblaOptions = computed<{ loop: boolean; direction: 'ltr' | 'rtl' }>(() => ({\n loop: true,\n direction: this.isRtl() ? 'rtl' : 'ltr',\n }));\n\n /** Subscribed Embla events. */\n protected subscribeToEvents: EmblaEventType[] = ['select', 'init', 'reInit'];\n\n /** Current carousel snap index. */\n protected activeSlideIndex = signal(0);\n\n /** Total number of items. */\n protected totalSlides = computed(() => this.items().length);\n\n /** Previous button disabled state (carousel). */\n protected prevDisabled = signal(false);\n\n /** Next button disabled state (carousel). */\n protected nextDisabled = signal(false);\n\n /** Currently expanded grid item index. */\n protected expandedIndex = signal(0);\n\n /** Whether grid autoplay is currently playing. */\n protected isAutoPlaying = signal(false);\n\n protected items = contentChildren(EclStoryCardItemComponent, { descendants: true });\n\n protected detailsPanels = contentChildren(EclStoryCardGridDetailsComponent, { descendants: true });\n\n private emblaRef = viewChild(EmblaCarouselDirective);\n private carouselImageWrappers = viewChildren<ElementRef>('carouselImageWrapper');\n private carouselContentWrappers = viewChildren<ElementRef>('carouselContentWrapper');\n\n private setupTeardown$ = new Subject<void>();\n private emblaApi: EmblaCarouselType | undefined;\n\n constructor() {\n super();\n afterNextRender(() => {\n setTimeout(() => this.clonePicturesToCarousel());\n });\n\n effect(() => {\n const itemsArray = this.items();\n const detailsArray = this.detailsPanels();\n\n untracked(() => {\n this.setupGrid(itemsArray, detailsArray);\n });\n }, { allowSignalWrites: true });\n }\n\n readonly cssClasses = computed(() => [\n super.getCssClasses('ecl-story-card'),\n this.eclDescription() ? 'ecl-story-card--has-description' : '',\n this.variant() === 'testimonial' ? 'ecl-story-card--testimonial' : '',\n ].join(' ').trim());\n\n readonly slideDuration = computed(() => `${this.autoplayDelay()}ms`);\n\n ngOnDestroy(): void {\n this.setupTeardown$.next();\n this.setupTeardown$.complete();\n }\n\n /**\n * Configures the grid accordion: assigns IDs, indices, and initial state\n * to each item and details panel, subscribes to item interaction events,\n * and starts autoplay if enabled.\n */\n private setupGrid(\n itemsArray: readonly EclStoryCardItemComponent[],\n detailsArray: readonly EclStoryCardGridDetailsComponent[],\n ): void {\n this.setupTeardown$.next();\n const id = this.componentId();\n\n itemsArray.forEach((item, i) => {\n item.index.set(i);\n item.tabId.set(`${id}-tab-${i}`);\n item.panelId.set(`${id}-details-${i}`);\n item.isExpanded.set(i === this.expandedIndex());\n item.isAutoPlaying.set(this.isAutoPlaying());\n\n outputToObservable(item.itemClick).pipe(\n takeUntil(this.setupTeardown$),\n ).subscribe((index: number) => this.onGridItemClick(index));\n\n outputToObservable(item.loadingBarAnimationEnd).pipe(\n takeUntil(this.setupTeardown$),\n ).subscribe(() => this.onLoadingBarAnimationEnd());\n });\n\n detailsArray.forEach((panel, i) => {\n panel.index.set(i);\n panel.panelId.set(`${id}-details-${i}`);\n panel.tabId.set(`${id}-tab-${i}`);\n panel.isActive.set(i === this.expandedIndex());\n panel.isTestimonial.set(this.variant() === 'testimonial');\n });\n\n if (this.isAutoplay()) {\n this.playAutoplay();\n }\n }\n\n /** Set the expanded grid item by index. */\n private setGridItem(index: number): void {\n const itemsArray = this.items();\n const detailsArray = this.detailsPanels();\n if (itemsArray.length === 0) return;\n\n const nextIndex = ((index % itemsArray.length) + itemsArray.length) % itemsArray.length;\n\n itemsArray.forEach((item, i) => {\n item.isExpanded.set(i === nextIndex);\n item.isAutoPlaying.set(this.isAutoPlaying());\n });\n\n detailsArray.forEach((panel, i) => {\n panel.isActive.set(i === nextIndex);\n });\n\n this.expandedIndex.set(nextIndex);\n this.selectionChange.emit({ index: nextIndex });\n }\n\n /** Handle click on a grid item button. */\n private onGridItemClick(index: number): void {\n const itemsArray = this.items();\n const isCurrentlyExpanded = itemsArray[index]?.isExpanded();\n\n if (isCurrentlyExpanded && !this.isAutoPlaying()) {\n this.playAutoplay();\n } else {\n this.pauseAutoplay();\n }\n\n this.setGridItem(index);\n }\n\n /** Go to the previous grid item. */\n protected onGridPrevClick(): void {\n this.setGridItem(this.expandedIndex() - 1);\n }\n\n /** Go to the next grid item. */\n protected onGridNextClick(): void {\n this.setGridItem(this.expandedIndex() + 1);\n }\n\n /** Handle animation end on the loading bar (advance to next). */\n private onLoadingBarAnimationEnd(): void {\n if (this.isAutoPlaying()) {\n this.setGridItem(this.expandedIndex() + 1);\n }\n }\n\n /** Start autoplay. */\n protected playAutoplay(): void {\n if (this.items().length < 2) return;\n this.isAutoPlaying.set(true);\n this.items().forEach(item => item.isAutoPlaying.set(true));\n }\n\n protected pauseAutoplay(): void {\n this.isAutoPlaying.set(false);\n this.items().forEach(item => item.isAutoPlaying.set(false));\n }\n\n /** Play button click. */\n protected onPlayClick(): void {\n this.playAutoplay();\n }\n\n /** Pause button click. */\n protected onPauseClick(): void {\n this.pauseAutoplay();\n }\n\n /** Clone each item's projected picture and link into the corresponding carousel slide. */\n private clonePicturesToCarousel(): void {\n const imageWrappers = this.carouselImageWrappers();\n const contentWrappers = this.carouselContentWrappers();\n const itemsArray = this.items();\n const detailsArray = this.detailsPanels();\n\n itemsArray.forEach((item, i) => {\n const pictureEl = item.pictureRef();\n if (pictureEl && imageWrappers[i]) {\n const clone = pictureEl.nativeElement.cloneNode(true) as HTMLElement;\n imageWrappers[i].nativeElement.appendChild(clone);\n }\n });\n\n detailsArray.forEach((panel, i) => {\n const linkEl = panel.linkRef();\n if (linkEl && contentWrappers[i]) {\n const clone = linkEl.nativeElement.cloneNode(true) as HTMLElement;\n contentWrappers[i].nativeElement.appendChild(clone);\n }\n });\n }\n\n protected onEmblaChange(eventName: string): void {\n if (!this.emblaApi) {\n this.emblaApi = this.emblaRef()?.emblaApi;\n }\n if (!this.emblaApi) return;\n\n if (eventName === 'select' || eventName === 'init' || eventName === 'reInit') {\n this.syncCarouselState();\n }\n }\n\n /** Sync carousel state from Embla API. */\n private syncCarouselState(): void {\n if (!this.emblaApi) return;\n\n this.activeSlideIndex.set(this.emblaApi.selectedScrollSnap());\n this.prevDisabled.set(!this.emblaApi.canScrollPrev());\n this.nextDisabled.set(!this.emblaApi.canScrollNext());\n }\n\n /** Navigate carousel to previous slide. */\n protected onCarouselPrevClick(): void {\n this.emblaRef()?.scrollPrev();\n }\n\n /** Navigate carousel to next slide. */\n protected onCarouselNextClick(): void {\n this.emblaRef()?.scrollNext();\n }\n\n /** Navigate carousel to a specific slide. */\n protected goToSlide(index: number): void {\n this.emblaRef()?.scrollTo(index);\n }\n\n /** Returns dot indices for rendering. */\n protected getDotIndices(): number[] {\n return Array.from({ length: this.totalSlides() }, (_, i) => i);\n }\n}\n","@if (eclTitle() || eclDescription()) {\n<div class=\"ecl-story-card__header\">\n @if (eclTitle()) {\n <div class=\"ecl-story-card__title\" [attr.id]=\"titleId()\">{{ eclTitle() }}</div>\n }\n @if (eclDescription()) {\n <div class=\"ecl-story-card__description\">{{ eclDescription() }}</div>\n }\n</div>\n}\n\n<!-- Mobile: Embla Carousel (auto-generated from items + details) -->\n<div class=\"ecl-story-card__carousel\">\n <div class=\"ecl-story-card__carousel-viewport\"\n role=\"region\"\n [attr.aria-label]=\"'ecl.story-card.SLIDER-LABEL' | translate\"\n emblaCarousel\n [options]=\"emblaOptions()\"\n [subscribeToEvents]=\"subscribeToEvents\"\n (emblaChange)=\"onEmblaChange($event)\">\n <ul class=\"ecl-story-card__carousel-container\">\n @for (item of items(); track i; let i = $index) {\n <li class=\"ecl-story-card__carousel-slide\"\n [attr.aria-hidden]=\"i !== activeSlideIndex() ? true : null\">\n <article class=\"ecl-story-card__card\">\n <div class=\"ecl-story-card__image-wrapper\" #carouselImageWrapper>\n </div>\n <div class=\"ecl-story-card__content\" #carouselContentWrapper>\n @if (detailsPanels()[i]; as panel) {\n @if (panel.eclTitle()) {\n <div class=\"ecl-story-card__card-title\">{{ panel.eclTitle() }}</div>\n }\n @if (panel.description()) {\n <div class=\"ecl-story-card__card-description\">{{ panel.description() }}</div>\n }\n }\n </div>\n </article>\n </li>\n }\n </ul>\n </div>\n\n <!-- Carousel Controls -->\n @if (totalSlides() > 1) {\n <div class=\"ecl-story-card__pager\">\n <button class=\"ecl-story-card__prev\"\n [disabled]=\"prevDisabled()\"\n (click)=\"onCarouselPrevClick()\"\n [attr.aria-label]=\"'ecl.story-card.SHOW-PREV-SLIDE' | translate\">\n <ecl-icon icon=\"corner-arrow\" size=\"s\" transform=\"rotate-270\"></ecl-icon>\n <span class=\"ecl-story-card__prev-label\">\n {{ 'ecl.story-card.PREVIOUS' | translate }}\n </span>\n </button>\n\n <div class=\"ecl-story-card__dots\">\n @for (dotIndex of getDotIndices(); track dotIndex) {\n <button\n #dotButton\n class=\"ecl-story-card__dot\"\n [class.ecl-story-card__dot--active]=\"dotIndex === activeSlideIndex()\"\n [class.is-prev]=\"dotIndex === activeSlideIndex() - 1\"\n [attr.aria-label]=\"'ecl.story-card.GO-TO-SLIDE' | translate: { current: dotIndex + 1, total: totalSlides() }\"\n (click)=\"goToSlide(dotIndex)\">\n </button>\n }\n </div>\n\n <button class=\"ecl-story-card__next\"\n [disabled]=\"nextDisabled()\"\n (click)=\"onCarouselNextClick()\"\n [attr.aria-label]=\"'ecl.story-card.SHOW-NEXT-SLIDE' | translate\">\n <span class=\"ecl-story-card__next-label\">\n {{ 'ecl.story-card.NEXT' | translate }}\n </span>\n <ecl-icon icon=\"corner-arrow\" size=\"s\" transform=\"rotate-90\"></ecl-icon>\n </button>\n </div>\n }\n</div>\n\n<!-- Desktop: Grid with Accordion (user-authored content projected here) -->\n<div class=\"ecl-story-card__grid\">\n <ng-content select=\"ul[eclStoryCardList]\"></ng-content>\n <ng-content select=\"[eclStoryCardGridDetails]\"></ng-content>\n\n <!-- Grid Controls -->\n @if (totalSlides() > 1) {\n <div class=\"ecl-story-card__grid-controls\">\n <button class=\"ecl-button ecl-button--tertiary ecl-button--neutral ecl-story-card__grid-prev ecl-button--icon-only\"\n type=\"button\"\n (click)=\"onGridPrevClick()\"\n [attr.aria-label]=\"'ecl.story-card.PREVIOUS' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.story-card.PREVIOUS' | translate }}\n </span>\n <ecl-icon iconSet=\"phosphor\" icon=\"caret-left\" size=\"l\"></ecl-icon>\n </span>\n </button>\n\n <button class=\"ecl-button ecl-button--secondary ecl-button--neutral ecl-story-card__grid-play ecl-button--icon-only\"\n type=\"button\"\n [style.display]=\"isAutoPlaying() ? 'none' : 'flex'\"\n (click)=\"onPlayClick()\"\n [attr.aria-label]=\"'ecl.story-card.PLAY' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.story-card.PLAY' | translate }}\n </span>\n <ecl-icon iconSet=\"phosphor-fill\" icon=\"play\" size=\"l\"></ecl-icon>\n </span>\n </button>\n\n <button class=\"ecl-button ecl-button--secondary ecl-button--neutral ecl-story-card__grid-pause ecl-button--icon-only\"\n type=\"button\"\n [style.display]=\"isAutoPlaying() ? 'flex' : 'none'\"\n (click)=\"onPauseClick()\"\n [attr.aria-label]=\"'ecl.story-card.PAUSE' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.story-card.PAUSE' | translate }}\n </span>\n <ecl-icon iconSet=\"phosphor-fill\" icon=\"pause\" size=\"l\"></ecl-icon>\n </span>\n </button>\n\n <button class=\"ecl-button ecl-button--tertiary ecl-button--neutral ecl-story-card__grid-next ecl-button--icon-only\"\n type=\"button\"\n (click)=\"onGridNextClick()\"\n [attr.aria-label]=\"'ecl.story-card.NEXT' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.story-card.NEXT' | translate }}\n </span>\n <ecl-icon iconSet=\"phosphor\" icon=\"caret-right\" size=\"l\"></ecl-icon>\n </span>\n </button>\n </div>\n }\n</div>\n","import { EclStoryCardComponent } from './ecl-story-card.component';\nimport { EclStoryCardItemComponent } from './ecl-story-card-item/ecl-story-card-item.component';\nimport { EclStoryCardGridDetailsComponent } from './ecl-story-card-grid-details/ecl-story-card-grid-details.component';\nimport {\n EclStoryCardListDirective,\n EclStoryCardPictureDirective,\n EclStoryCardLinkDirective,\n} from './ecl-story-card-directives';\n\nexport * from './ecl-story-card.component';\nexport * from './ecl-story-card-item/ecl-story-card-item.component';\nexport * from './ecl-story-card-grid-details/ecl-story-card-grid-details.component';\nexport * from './ecl-story-card-directives';\n\nexport const EUI_ECL_STORY_CARD = [\n EclStoryCardComponent,\n EclStoryCardItemComponent,\n EclStoryCardGridDetailsComponent,\n EclStoryCardListDirective,\n EclStoryCardPictureDirective,\n EclStoryCardLinkDirective,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eui-ecl-components-ecl-story-card.mjs","sources":["../../components/ecl-story-card/ecl-story-card-directives.ts","../../components/ecl-story-card/ecl-story-card-item/ecl-story-card-item.component.ts","../../components/ecl-story-card/ecl-story-card-item/ecl-story-card-item.component.html","../../components/ecl-story-card/ecl-story-card-grid-details/ecl-story-card-grid-details.component.ts","../../components/ecl-story-card/ecl-story-card-grid-details/ecl-story-card-grid-details.component.html","../../components/ecl-story-card/ecl-story-card.component.ts","../../components/ecl-story-card/ecl-story-card.component.html","../../components/ecl-story-card/index.ts","../../components/ecl-story-card/eui-ecl-components-ecl-story-card.ts"],"sourcesContent":["import { Directive } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive applied to the <ul> element that holds the story card items.\n * Adds the grid container class and tablist role.\n */\n@Directive({\n selector: 'ul[eclStoryCardList]',\n host: {\n role: 'tablist',\n '[class]': 'getCssClasses(\"ecl-story-card__grid-container\")',\n },\n})\nexport class EclStoryCardListDirective extends ECLBaseDirective {}\n\n/**\n * Directive applied to <picture> elements inside a story card item.\n * Adds the ECL picture classes.\n */\n@Directive({\n selector: 'picture[eclStoryCardPicture]',\n host: {\n '[class]': 'getCssClasses(\"ecl-picture ecl-story-card__picture\")',\n },\n})\nexport class EclStoryCardPictureDirective extends ECLBaseDirective {}\n\n/**\n * Directive applied to <a> elements inside story card grid details.\n * Adds the ECL link classes for the \"Read more\" link.\n */\n@Directive({\n selector: '[eclStoryCardLink]',\n host: {\n '[class]': 'getCssClasses(\"ecl-link ecl-link--standalone ecl-link--icon ecl-story-card__link\")',\n },\n})\nexport class EclStoryCardLinkDirective extends ECLBaseDirective {}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n ElementRef,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclStoryCardPictureDirective } from '../ecl-story-card-directives';\n\n/**\n * Individual grid item (tab role) within the ECL Story Card desktop accordion.\n * Applied to `<li>` elements inside `ul[eclStoryCardList]`.\n * Renders the accordion tab button with the loading bar animation.\n * For the mobile carousel, the parent `EclStoryCardComponent` clones the projected\n * `picture[eclStoryCardPicture]` into the carousel slide via `pictureRef`.\n *\n * - Selector: `li[eclStoryCardItem]`.\n * - `gridTitle` is the short label shown in the tab button.\n * - `isExpanded`, `isAutoPlaying`, `index`, `tabId`, and `panelId` are writable signals\n * set by the parent `EclStoryCardComponent` during grid setup.\n * - Emits `itemClick` (with item index) when the tab button is clicked.\n * - Emits `loadingBarAnimationEnd` when the autoplay loading bar animation finishes.\n */\n@Component({\n selector: 'li[eclStoryCardItem]',\n templateUrl: './ecl-story-card-item.component.html',\n host: {\n role: 'presentation',\n '[class]': 'cssClasses()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EclStoryCardItemComponent extends ECLBaseDirective {\n\n /** Short title displayed in the accordion tab button. */\n readonly gridTitle = input<string>('');\n\n /** Whether this item is currently expanded/selected. Set by the parent `EclStoryCardComponent`. */\n readonly isExpanded = signal(false);\n\n /** Whether autoplay is active for this item (controls the loading bar animation). Set by parent. */\n readonly isAutoPlaying = signal(false);\n\n /** Zero-based index of this item in the list. Set by parent. */\n readonly index = signal(0);\n\n /** Generated ID for the tab button element. Set by parent. */\n readonly tabId = signal('');\n\n /** ID of the controlled `tabpanel` (`eclStoryCardGridDetails`). Set by parent. */\n readonly panelId = signal('');\n\n /** Emitted when the tab button is clicked; payload is this item's index. */\n readonly itemClick = output<number>();\n\n /** Emitted when the loading bar CSS animation ends, signalling to advance to the next item. */\n readonly loadingBarAnimationEnd = output<void>();\n\n /**\n * Emitted when a keydown occurs on the tab button. The parent story card\n * orchestrates keyboard navigation (arrows, Home, End) across all items.\n */\n readonly keydownTab = output<KeyboardEvent>();\n\n /** Reference to the projected `picture[eclStoryCardPicture]` element for cloning into the mobile carousel. */\n readonly pictureRef = contentChild(EclStoryCardPictureDirective, { read: ElementRef });\n\n private readonly buttonRef = viewChild<ElementRef<HTMLButtonElement>>('tabButton');\n\n readonly cssClasses = computed(() => [\n super.getCssClasses('ecl-story-card__grid-item'),\n this.isExpanded() ? 'ecl-story-card__grid-item--expanded' : '',\n ].join(' ').trim());\n\n /** Move focus to this item's tab button. Called by the parent during keyboard navigation. */\n focusButton(): void {\n this.buttonRef()?.nativeElement.focus();\n }\n\n protected onButtonClick(): void {\n this.itemClick.emit(this.index());\n }\n\n protected onAnimationEnd(): void {\n this.loadingBarAnimationEnd.emit();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n this.keydownTab.emit(event);\n }\n}\n","<button class=\"ecl-story-card__grid-card\"\n #tabButton\n type=\"button\"\n [attr.id]=\"tabId()\"\n role=\"tab\"\n [attr.aria-selected]=\"isExpanded()\"\n [attr.aria-controls]=\"panelId()\"\n [attr.tabindex]=\"isExpanded() ? 0 : -1\"\n (click)=\"onButtonClick()\"\n (keydown)=\"onKeydown($event)\">\n <div class=\"ecl-story-card__grid-image\">\n <ng-content select=\"picture[eclStoryCardPicture]\"></ng-content>\n <div class=\"ecl-story-card__grid-loading-bar\">\n <div class=\"ecl-story-card__grid-loading-bar-completion\"\n [class.is-paused]=\"!isExpanded() || !isAutoPlaying()\"\n (animationend)=\"onAnimationEnd()\">\n </div>\n </div>\n </div>\n <div class=\"ecl-story-card__grid-title-wrapper\">\n @if (gridTitle()) {\n <div class=\"ecl-story-card__grid-title\">{{ gridTitle() }}</div>\n }\n </div>\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n contentChild,\n effect,\n ElementRef,\n input,\n signal,\n} from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclStoryCardLinkDirective } from '../ecl-story-card-directives';\n\n/**\n * Details panel sub-component (`tabpanel` role) within the ECL Story Card grid accordion.\n * Renders the expanded content for a selected story or testimonial item:\n * title, description, and an optional projected read-more link.\n * For the `'testimonial'` variant, additional `author`, `role`, and `source` inputs are shown.\n *\n * - Selector: `[eclStoryCardGridDetails]`.\n * - `isActive`, `isTestimonial`, `index`, `panelId`, and `tabId` are writable signals\n * set by the parent `EclStoryCardComponent` during grid setup.\n * - `linkRef` is a `contentChild` query used by the parent to clone the link into the mobile carousel.\n */\n@Component({\n selector: '[eclStoryCardGridDetails]',\n templateUrl: './ecl-story-card-grid-details.component.html',\n host: {\n '[class]': 'getCssClasses(\"ecl-story-card__grid-details\")',\n '[attr.id]': 'panelId()',\n '[attr.role]': '\"tabpanel\"',\n '[attr.aria-labelledby]': 'tabId()',\n '[attr.tabindex]': 'isActive() ? 0 : -1',\n '[hidden]': '!isActive()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EclStoryCardGridDetailsComponent extends ECLBaseDirective {\n\n /** Optional teaser label shown above the title. Hidden by CSS in the testimonial variant. */\n readonly teaserLabel = input<string>('');\n\n /** Title shown in the details panel. */\n readonly eclTitle = input<string>('');\n\n /** Description shown in the details panel. */\n readonly description = input<string>('');\n\n /** Author name for the testimonial variant. */\n readonly author = input<string>('');\n\n /** Author role/position for the testimonial variant. */\n readonly role = input<string>('');\n\n /** Publication source for the testimonial variant. */\n readonly source = input<string>('');\n\n /** Whether this panel is currently visible. Set by the parent `EclStoryCardComponent`. */\n readonly isActive = signal(false);\n\n /** Whether the parent story card is in the `'testimonial'` variant. Set by parent. */\n readonly isTestimonial = signal(false);\n\n /** Zero-based index of this panel. Set by parent. */\n readonly index = signal(0);\n\n /** Generated panel `id`. Set by parent. */\n readonly panelId = signal('');\n\n /** `id` of the controlling tab button. Set by parent. */\n readonly tabId = signal('');\n\n /** Reference to the projected `[eclStoryCardLink]` element for cloning into the mobile carousel. */\n readonly linkRef = contentChild(EclStoryCardLinkDirective, { read: ElementRef });\n\n constructor() {\n super();\n\n // Associate the \"Read more\" link with its corresponding tab so assistive\n // technologies announce the tab label as context for the link.\n // Set before the parent clones the link into the carousel slide.\n effect(() => {\n const link = this.linkRef();\n const tabId = this.tabId();\n if (link && tabId) {\n link.nativeElement.setAttribute('aria-describedby', tabId);\n }\n });\n }\n}\n","<article class=\"ecl-story-card__grid-details-content\">\n <div class=\"ecl-story-card__content\">\n @if (isTestimonial()) {\n <div class=\"ecl-story-card__content-icon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"45\" viewBox=\"0 0 22 45\" fill=\"none\">\n <path d=\"M0 0H22V23.3143L0 44.5714V0Z\" fill=\"currentColor\"/>\n </svg>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"45\" viewBox=\"0 0 22 45\" fill=\"none\">\n <path d=\"M0 0H22V23.3143L0 44.5714V0Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n }\n @if (teaserLabel()) {\n <div class=\"ecl-story-card__teaser-label\">{{ teaserLabel() }}</div>\n }\n @if (eclTitle()) {\n <div class=\"ecl-story-card__card-title\">{{ eclTitle() }}</div>\n }\n @if (author() || role() || source()) {\n <div class=\"ecl-story-card__testimonial\">\n @if (author()) {\n <span class=\"ecl-story-card__author\">{{ author() }}</span>\n }\n @if (role()) {\n <span class=\"ecl-story-card__role\">{{ role() }}</span>\n }\n @if (source()) {\n <cite class=\"ecl-story-card__source\">{{ source() }}</cite>\n }\n </div>\n }\n @if (description()) {\n <div class=\"ecl-story-card__card-description\">{{ description() }}</div>\n }\n <ng-content select=\"[eclStoryCardLink]\"></ng-content>\n </div>\n</article>\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n output,\n signal,\n untracked,\n viewChild,\n viewChildren,\n} from '@angular/core';\nimport { EUI_ECL_SLIDER } from '@eui/ecl/components/ecl-slider';\nimport { ECLBaseDirective, EclRtlService, KeyCode } from '@eui/ecl/core';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { EmblaCarouselDirective } from 'embla-carousel-angular';\nimport { Subject, takeUntil } from 'rxjs';\nimport { outputToObservable, toSignal } from '@angular/core/rxjs-interop';\n\nimport { EclStoryCardItemComponent } from './ecl-story-card-item/ecl-story-card-item.component';\nimport { EclStoryCardGridDetailsComponent } from './ecl-story-card-grid-details/ecl-story-card-grid-details.component';\nimport { EmblaCarouselType, EmblaEventType } from 'embla-carousel';\n\nexport interface EclStoryCardSelectionEvent {\n index: number;\n}\n\n/**\n * ECL Story Card component that presents a collection of stories or testimonials in a\n * desktop grid-accordion with autoplay and a mobile Embla carousel.\n * On desktop, projected `li[eclStoryCardItem]` items form a tab/tabpanel accordion;\n * on mobile the same items are cloned into a carousel automatically.\n *\n * - Selector: `section[eclStoryCard]`.\n * - `variant`: `'story'` (default) or `'testimonial'`.\n * - `isAutoplay` enables auto-advancing through grid items. `autoplayDelay` sets the interval (ms, default 10000).\n * - All internal IDs derive from `eclId` (alias `id`); a UUID is generated when omitted.\n * - Emits `selectionChange` whenever the active grid item changes.\n * - Structural composition: `ul[eclStoryCardList]` > `li[eclStoryCardItem]` + `[eclStoryCardGridDetails]`\n * with `picture[eclStoryCardPicture]` and `[eclStoryCardLink]` projected inside each.\n */\n@Component({\n selector: 'section[eclStoryCard]',\n templateUrl: './ecl-story-card.component.html',\n host: {\n '[id]': 'componentId()',\n '[class]': 'cssClasses()',\n '[style.--ecl-story-card-slide-duration]': 'slideDuration()',\n },\n imports: [\n TranslatePipe,\n ...EUI_ECL_SLIDER,\n EmblaCarouselDirective,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EclStoryCardComponent extends ECLBaseDirective implements OnDestroy {\n\n /** Title displayed in the story card header. */\n readonly eclTitle = input<string>('');\n\n /** Description text displayed below the title. */\n readonly eclDescription = input<string>('');\n\n /** Variant of the story card: `'story'` (default) or `'testimonial'`. */\n readonly variant = input<'story' | 'testimonial'>('story');\n\n /** When `true`, enables autoplay for the desktop grid accordion. */\n readonly isAutoplay = input(false, { transform: booleanAttribute });\n\n /** Autoplay slide duration in milliseconds. Default: `10000`. */\n readonly autoplayDelay = input<number>(10000);\n\n /** HTML `id` for the component; all internal IDs derive from it. Auto-generated when omitted. */\n readonly eclId = input<string>('', { alias: 'id' });\n\n /** Emitted when the active grid item index changes. Payload: `{ index: number }`. */\n readonly selectionChange = output<EclStoryCardSelectionEvent>();\n\n private readonly eclRtlService = inject(EclRtlService);\n private readonly translate = inject(TranslateService);\n\n private readonly generatedId = `story-card-${crypto.randomUUID().slice(0, 8)}`;\n protected readonly componentId = computed(() => this.eclId() || this.generatedId);\n\n /** Current RTL state, derived reactively from the RTL service. */\n private readonly isRtl = toSignal(this.eclRtlService.currentRtlState$, { initialValue: false });\n\n /** Embla carousel options. Direction tracks the RTL state reactively. */\n protected readonly emblaOptions = computed<{ loop: boolean; direction: 'ltr' | 'rtl' }>(() => ({\n loop: true,\n direction: this.isRtl() ? 'rtl' : 'ltr',\n }));\n\n /** Subscribed Embla events. */\n protected readonly subscribeToEvents: EmblaEventType[] = ['select', 'init', 'reInit'];\n\n /** Current carousel snap index. */\n protected readonly activeSlideIndex = signal(0);\n\n /** Total number of items. */\n protected readonly totalSlides = computed(() => this.items().length);\n\n /** Previous button disabled state (carousel). */\n protected readonly prevDisabled = signal(false);\n\n /** Next button disabled state (carousel). */\n protected readonly nextDisabled = signal(false);\n\n /** Currently expanded grid item index. */\n protected readonly expandedIndex = signal(0);\n\n /** Whether grid autoplay is currently playing. */\n protected readonly isAutoPlaying = signal(false);\n\n protected readonly items = contentChildren(EclStoryCardItemComponent, { descendants: true });\n\n protected readonly detailsPanels = contentChildren(EclStoryCardGridDetailsComponent, { descendants: true });\n\n private readonly emblaRef = viewChild(EmblaCarouselDirective);\n private readonly carouselImageWrappers = viewChildren<ElementRef>('carouselImageWrapper');\n private readonly carouselContentWrappers = viewChildren<ElementRef>('carouselContentWrapper');\n\n private readonly setupTeardown$ = new Subject<void>();\n private emblaApi: EmblaCarouselType | undefined;\n\n constructor() {\n super();\n afterNextRender(() => {\n setTimeout(() => this.clonePicturesToCarousel());\n });\n\n effect(() => {\n const itemsArray = this.items();\n const detailsArray = this.detailsPanels();\n\n untracked(() => {\n this.setupGrid(itemsArray, detailsArray);\n });\n }, { allowSignalWrites: true });\n }\n\n readonly cssClasses = computed(() => [\n super.getCssClasses('ecl-story-card'),\n this.eclDescription() ? 'ecl-story-card--has-description' : '',\n this.variant() === 'testimonial' ? 'ecl-story-card--testimonial' : '',\n ].join(' ').trim());\n\n readonly slideDuration = computed(() => `${this.autoplayDelay()}ms`);\n\n ngOnDestroy(): void {\n this.setupTeardown$.next();\n this.setupTeardown$.complete();\n }\n\n /**\n * Configures the grid accordion: assigns IDs, indices, and initial state\n * to each item and details panel, subscribes to item interaction events,\n * and starts autoplay if enabled.\n */\n private setupGrid(\n itemsArray: readonly EclStoryCardItemComponent[],\n detailsArray: readonly EclStoryCardGridDetailsComponent[],\n ): void {\n this.setupTeardown$.next();\n const id = this.componentId();\n\n itemsArray.forEach((item, i) => {\n item.index.set(i);\n item.tabId.set(`${id}-tab-${i}`);\n item.panelId.set(`${id}-details-${i}`);\n item.isExpanded.set(i === this.expandedIndex());\n item.isAutoPlaying.set(this.isAutoPlaying());\n\n outputToObservable(item.itemClick).pipe(\n takeUntil(this.setupTeardown$),\n ).subscribe((index: number) => this.onGridItemClick(index));\n\n outputToObservable(item.loadingBarAnimationEnd).pipe(\n takeUntil(this.setupTeardown$),\n ).subscribe(() => this.onLoadingBarAnimationEnd());\n\n outputToObservable(item.keydownTab).pipe(\n takeUntil(this.setupTeardown$),\n ).subscribe((event: KeyboardEvent) => this.onGridItemKeydown(event, i));\n });\n\n detailsArray.forEach((panel, i) => {\n panel.index.set(i);\n panel.panelId.set(`${id}-details-${i}`);\n panel.tabId.set(`${id}-tab-${i}`);\n panel.isActive.set(i === this.expandedIndex());\n panel.isTestimonial.set(this.variant() === 'testimonial');\n });\n\n if (this.isAutoplay()) {\n this.playAutoplay();\n }\n }\n\n /** Set the expanded grid item by index. */\n private setGridItem(index: number): void {\n const itemsArray = this.items();\n const detailsArray = this.detailsPanels();\n if (itemsArray.length === 0) return;\n\n const nextIndex = ((index % itemsArray.length) + itemsArray.length) % itemsArray.length;\n\n itemsArray.forEach((item, i) => {\n item.isExpanded.set(i === nextIndex);\n item.isAutoPlaying.set(this.isAutoPlaying());\n });\n\n detailsArray.forEach((panel, i) => {\n panel.isActive.set(i === nextIndex);\n });\n\n this.expandedIndex.set(nextIndex);\n this.selectionChange.emit({ index: nextIndex });\n }\n\n /** Handle click on a grid item button. */\n private onGridItemClick(index: number): void {\n const itemsArray = this.items();\n const isCurrentlyExpanded = itemsArray[index]?.isExpanded();\n\n if (isCurrentlyExpanded && !this.isAutoPlaying()) {\n this.playAutoplay();\n } else {\n this.pauseAutoplay();\n }\n\n this.setGridItem(index);\n }\n\n /** Go to the previous grid item. */\n protected onGridPrevClick(): void {\n this.setGridItem(this.expandedIndex() - 1);\n }\n\n /** Go to the next grid item. */\n protected onGridNextClick(): void {\n this.setGridItem(this.expandedIndex() + 1);\n }\n\n /**\n * Orchestrates keyboard navigation across the grid tablist (WAI-ARIA tabs\n * pattern). Moves focus only; selection still happens on click/Enter.\n *\n * - ArrowRight: focus the next tab, wrapping to the first.\n * - ArrowLeft: focus the previous tab, wrapping to the last.\n * - Home: focus the first tab.\n * - End: focus the last tab.\n *\n * @param event the originating keydown from the focused item's button\n * @param index the index of the item that emitted the event\n */\n private onGridItemKeydown(event: KeyboardEvent, index: number): void {\n const itemsArray = this.items();\n const count = itemsArray.length;\n if (count === 0) {\n return;\n }\n\n let targetIndex: number | null = null;\n\n switch (event.key) {\n case KeyCode.ARROW_RIGHT:\n targetIndex = (index + 1) % count;\n break;\n case KeyCode.ARROW_LEFT:\n targetIndex = (index - 1 + count) % count;\n break;\n case KeyCode.HOME:\n targetIndex = 0;\n break;\n case KeyCode.END:\n targetIndex = count - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n itemsArray[targetIndex]?.focusButton();\n }\n\n /** Handle animation end on the loading bar (advance to next). */\n private onLoadingBarAnimationEnd(): void {\n if (this.isAutoPlaying()) {\n this.setGridItem(this.expandedIndex() + 1);\n }\n }\n\n /** Start autoplay. */\n protected playAutoplay(): void {\n if (this.items().length < 2) return;\n this.isAutoPlaying.set(true);\n this.items().forEach(item => item.isAutoPlaying.set(true));\n }\n\n protected pauseAutoplay(): void {\n this.isAutoPlaying.set(false);\n this.items().forEach(item => item.isAutoPlaying.set(false));\n }\n\n /** Play button click. */\n protected onPlayClick(): void {\n this.playAutoplay();\n }\n\n /** Pause button click. */\n protected onPauseClick(): void {\n this.pauseAutoplay();\n }\n\n /** Clone each item's projected picture and link into the corresponding carousel slide. */\n private clonePicturesToCarousel(): void {\n const imageWrappers = this.carouselImageWrappers();\n const contentWrappers = this.carouselContentWrappers();\n const itemsArray = this.items();\n const detailsArray = this.detailsPanels();\n\n itemsArray.forEach((item, i) => {\n const pictureEl = item.pictureRef();\n if (pictureEl && imageWrappers[i]) {\n const clone = pictureEl.nativeElement.cloneNode(true) as HTMLElement;\n imageWrappers[i].nativeElement.appendChild(clone);\n }\n });\n\n detailsArray.forEach((panel, i) => {\n const linkEl = panel.linkRef();\n if (linkEl && contentWrappers[i]) {\n const clone = linkEl.nativeElement.cloneNode(true) as HTMLElement;\n contentWrappers[i].nativeElement.appendChild(clone);\n }\n });\n }\n\n protected onEmblaChange(eventName: string): void {\n if (!this.emblaApi) {\n this.emblaApi = this.emblaRef()?.emblaApi;\n }\n if (!this.emblaApi) return;\n\n if (eventName === 'select' || eventName === 'init' || eventName === 'reInit') {\n this.syncCarouselState();\n }\n }\n\n /** Sync carousel state from Embla API. */\n private syncCarouselState(): void {\n if (!this.emblaApi) return;\n\n this.activeSlideIndex.set(this.emblaApi.selectedScrollSnap());\n this.prevDisabled.set(!this.emblaApi.canScrollPrev());\n this.nextDisabled.set(!this.emblaApi.canScrollNext());\n }\n\n /** Navigate carousel to previous slide. */\n protected onCarouselPrevClick(): void {\n this.emblaRef()?.scrollPrev();\n }\n\n /** Navigate carousel to next slide. */\n protected onCarouselNextClick(): void {\n this.emblaRef()?.scrollNext();\n }\n\n /** Navigate carousel to a specific slide. */\n protected goToSlide(index: number): void {\n this.emblaRef()?.scrollTo(index);\n }\n\n /** Returns dot indices for rendering. */\n protected getDotIndices(): number[] {\n return Array.from({ length: this.totalSlides() }, (_, i) => i);\n }\n\n /**\n * Pre-translated accessible label for each carousel dot, passed to the shared\n * slider pager. Translated here since the pager receives plain strings.\n */\n protected readonly dotAriaLabels = computed<string[]>(() => {\n const total = this.totalSlides();\n return Array.from({ length: total }, (_unused, dotIndex) =>\n this.translate.instant('ecl.story-card.GO-TO-SLIDE', {\n current: dotIndex + 1,\n total,\n }),\n );\n });\n}\n","@if (eclTitle() || eclDescription()) {\n<div class=\"ecl-story-card__header\">\n @if (eclTitle()) {\n <div class=\"ecl-story-card__title\">{{ eclTitle() }}</div>\n }\n @if (eclDescription()) {\n <div class=\"ecl-story-card__description\">{{ eclDescription() }}</div>\n }\n</div>\n}\n\n<!-- Mobile: Embla Carousel (auto-generated from items + details) -->\n<div class=\"ecl-story-card__carousel\">\n <div class=\"ecl-story-card__carousel-viewport\"\n role=\"region\"\n [attr.aria-label]=\"'ecl.story-card.SLIDER-LABEL' | translate\"\n emblaCarousel\n [options]=\"emblaOptions()\"\n [subscribeToEvents]=\"subscribeToEvents\"\n (emblaChange)=\"onEmblaChange($event)\">\n <ul class=\"ecl-story-card__carousel-container\">\n @for (item of items(); track i; let i = $index) {\n <li class=\"ecl-story-card__carousel-slide\"\n [attr.aria-hidden]=\"i !== activeSlideIndex() ? true : null\">\n <article class=\"ecl-story-card__card\">\n <div class=\"ecl-story-card__image-wrapper\" #carouselImageWrapper>\n </div>\n <div class=\"ecl-story-card__content\" #carouselContentWrapper>\n @if (detailsPanels()[i]; as panel) {\n @if (panel.teaserLabel()) {\n <div class=\"ecl-story-card__teaser-label\">{{ panel.teaserLabel() }}</div>\n }\n @if (panel.eclTitle()) {\n <div class=\"ecl-story-card__card-title\">{{ panel.eclTitle() }}</div>\n }\n @if (panel.description()) {\n <div class=\"ecl-story-card__card-description\">{{ panel.description() }}</div>\n }\n }\n </div>\n </article>\n </li>\n }\n </ul>\n </div>\n\n <!-- Carousel Controls -->\n @if (totalSlides() > 1) {\n <ecl-slider-pager\n class=\"ecl-story-card__pager\"\n variant=\"dots\"\n size=\"s\"\n prevExtraClasses=\"ecl-story-card__prev\"\n nextExtraClasses=\"ecl-story-card__next\"\n dotsExtraClasses=\"ecl-story-card__dots\"\n dotExtraClasses=\"ecl-story-card__dot\"\n [activeIndex]=\"activeSlideIndex()\"\n [isPrevDisabled]=\"prevDisabled()\"\n [isNextDisabled]=\"nextDisabled()\"\n [dotIndices]=\"getDotIndices()\"\n [dotAriaLabels]=\"dotAriaLabels()\"\n (prev)=\"onCarouselPrevClick()\"\n (next)=\"onCarouselNextClick()\"\n (goTo)=\"goToSlide($event)\">\n </ecl-slider-pager>\n }\n</div>\n\n<!-- Desktop: Grid with Accordion (user-authored content projected here) -->\n<div class=\"ecl-story-card__grid\">\n <!-- Grid Controls -->\n @if (totalSlides() > 1) {\n <ecl-slider-pager\n class=\"ecl-story-card__grid-controls\"\n variant=\"play-pause\"\n size=\"l\"\n [isPlaying]=\"isAutoPlaying()\"\n prevExtraClasses=\"ecl-story-card__grid-prev\"\n nextExtraClasses=\"ecl-story-card__grid-next\"\n playExtraClasses=\"ecl-story-card__grid-play\"\n pauseExtraClasses=\"ecl-story-card__grid-pause\"\n (prev)=\"onGridPrevClick()\"\n (next)=\"onGridNextClick()\"\n (play)=\"onPlayClick()\"\n (pause)=\"onPauseClick()\">\n </ecl-slider-pager>\n }\n\n <ng-content select=\"ul[eclStoryCardList]\"></ng-content>\n <ng-content select=\"[eclStoryCardGridDetails]\"></ng-content>\n</div>\n","import { EclStoryCardComponent } from './ecl-story-card.component';\nimport { EclStoryCardItemComponent } from './ecl-story-card-item/ecl-story-card-item.component';\nimport { EclStoryCardGridDetailsComponent } from './ecl-story-card-grid-details/ecl-story-card-grid-details.component';\nimport {\n EclStoryCardListDirective,\n EclStoryCardPictureDirective,\n EclStoryCardLinkDirective,\n} from './ecl-story-card-directives';\n\nexport * from './ecl-story-card.component';\nexport * from './ecl-story-card-item/ecl-story-card-item.component';\nexport * from './ecl-story-card-grid-details/ecl-story-card-grid-details.component';\nexport * from './ecl-story-card-directives';\n\nexport const EUI_ECL_STORY_CARD = [\n EclStoryCardComponent,\n EclStoryCardItemComponent,\n EclStoryCardGridDetailsComponent,\n EclStoryCardListDirective,\n EclStoryCardPictureDirective,\n EclStoryCardLinkDirective,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AAGA;;;AAGG;AAQG,MAAO,yBAA0B,SAAQ,gBAAgB,CAAA;8GAAlD,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,mDAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,IAAI,EAAE;AACF,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,SAAS,EAAE,iDAAiD;AAC/D,qBAAA;AACJ,iBAAA;;AAGD;;;AAGG;AAOG,MAAO,4BAA6B,SAAQ,gBAAgB,CAAA;8GAArD,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,wDAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBANxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,8BAA8B;AACxC,oBAAA,IAAI,EAAE;AACF,wBAAA,SAAS,EAAE,sDAAsD;AACpE,qBAAA;AACJ,iBAAA;;AAGD;;;AAGG;AAOG,MAAO,yBAA0B,SAAQ,gBAAgB,CAAA;8GAAlD,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,sFAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,IAAI,EAAE;AACF,wBAAA,SAAS,EAAE,oFAAoF;AAClG,qBAAA;AACJ,iBAAA;;;ACvBD;;;;;;;;;;;;;AAaG;AAUG,MAAO,yBAA0B,SAAQ,gBAAgB,CAAA;AAT/D,IAAA,WAAA,GAAA;;;QAYa,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,EAAE;sFAAC;;QAG7B,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,KAAK;uFAAC;;QAG1B,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,KAAK;0FAAC;;QAG7B,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,CAAC;kFAAC;;QAGjB,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,EAAE;kFAAC;;QAGlB,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,EAAE;oFAAC;;QAGpB,IAAA,CAAA,SAAS,GAAG,MAAM,EAAU;;QAG5B,IAAA,CAAA,sBAAsB,GAAG,MAAM,EAAQ;AAEhD;;;AAGG;QACM,IAAA,CAAA,UAAU,GAAG,MAAM,EAAiB;;QAGpC,IAAA,CAAA,UAAU,GAAG,YAAY,CAAC,4BAA4B,kFAAI,IAAI,EAAE,UAAU,EAAA,CAAG;QAErE,IAAA,CAAA,SAAS,GAAG,SAAS,CAAgC,WAAW;sFAAC;AAEzE,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM;AACjC,YAAA,KAAK,CAAC,aAAa,CAAC,2BAA2B,CAAC;YAChD,IAAI,CAAC,UAAU,EAAE,GAAG,qCAAqC,GAAG,EAAE;AACjE,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;uFAAC;AAkBtB,IAAA;;IAfG,WAAW,GAAA;QACP,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IAC3C;IAEU,aAAa,GAAA;QACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACrC;IAEU,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE;IACtC;AAEU,IAAA,SAAS,CAAC,KAAoB,EAAA;AACpC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;8GAzDS,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,cAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAiCC,4BAA4B,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,UAAU,4LCtEvF,47BAyBA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDYa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBATrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,IAAA,EAE1B;AACF,wBAAA,IAAI,EAAE,cAAc;AACpB,wBAAA,SAAS,EAAE,cAAc;qBAC5B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,47BAAA,EAAA;AAmCZ,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,4BAA4B,QAAE,EAAE,IAAI,EAAE,UAAU,EAAE,iEAEf,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE5DrF;;;;;;;;;;AAUG;AAcG,MAAO,gCAAiC,SAAQ,gBAAgB,CAAA;AAsClE,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;;QApCF,IAAA,CAAA,WAAW,GAAG,KAAK,CAAS,EAAE;wFAAC;;QAG/B,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,EAAE;qFAAC;;QAG5B,IAAA,CAAA,WAAW,GAAG,KAAK,CAAS,EAAE;wFAAC;;QAG/B,IAAA,CAAA,MAAM,GAAG,KAAK,CAAS,EAAE;mFAAC;;QAG1B,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,EAAE;iFAAC;;QAGxB,IAAA,CAAA,MAAM,GAAG,KAAK,CAAS,EAAE;mFAAC;;QAG1B,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK;qFAAC;;QAGxB,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,KAAK;0FAAC;;QAG7B,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,CAAC;kFAAC;;QAGjB,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,EAAE;oFAAC;;QAGpB,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,EAAE;kFAAC;;QAGlB,IAAA,CAAA,OAAO,GAAG,YAAY,CAAC,yBAAyB,+EAAI,IAAI,EAAE,UAAU,EAAA,CAAG;;;;QAQ5E,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,YAAA,IAAI,IAAI,IAAI,KAAK,EAAE;gBACf,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,kBAAkB,EAAE,KAAK,CAAC;YAC9D;AACJ,QAAA,CAAC,CAAC;IACN;8GAnDS,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,iDAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,SAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAoCT,yBAAyB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,UAAU,oECxEjF,wpDAqCA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDDa,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAb5C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAAA,IAAA,EAE/B;AACF,wBAAA,SAAS,EAAE,+CAA+C;AAC1D,wBAAA,WAAW,EAAE,WAAW;AACxB,wBAAA,aAAa,EAAE,YAAY;AAC3B,wBAAA,wBAAwB,EAAE,SAAS;AACnC,wBAAA,iBAAiB,EAAE,qBAAqB;AACxC,wBAAA,UAAU,EAAE,aAAa;qBAC5B,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,wpDAAA,EAAA;AAsCf,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,yBAAyB,CAAA,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEvCnF;;;;;;;;;;;;;AAaG;AAgBG,MAAO,qBAAsB,SAAQ,gBAAgB,CAAA;AAsEvD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;;QApEF,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,EAAE;qFAAC;;QAG5B,IAAA,CAAA,cAAc,GAAG,KAAK,CAAS,EAAE;2FAAC;;QAGlC,IAAA,CAAA,OAAO,GAAG,KAAK,CAA0B,OAAO;oFAAC;;QAGjD,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;QAG1D,IAAA,CAAA,aAAa,GAAG,KAAK,CAAS,KAAK;0FAAC;;QAGpC,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,EAAE,6EAAI,KAAK,EAAE,IAAI,EAAA,CAAG;;QAG1C,IAAA,CAAA,eAAe,GAAG,MAAM,EAA8B;AAE9C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEpC,QAAA,IAAA,CAAA,WAAW,GAAG,CAAA,WAAA,EAAc,MAAM,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AAC3D,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,WAAW;wFAAC;;AAGhE,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;;AAG5E,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAA8C,OAAO;AAC3F,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,KAAK;SAC1C,CAAC;yFAAC;;QAGgB,IAAA,CAAA,iBAAiB,GAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;;QAGlE,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,CAAC;6FAAC;;QAG5B,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM;wFAAC;;QAGjD,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,KAAK;yFAAC;;QAG5B,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,KAAK;yFAAC;;QAG5B,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,CAAC;0FAAC;;QAGzB,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,KAAK;0FAAC;QAE7B,IAAA,CAAA,KAAK,GAAG,eAAe,CAAC,yBAAyB,6EAAI,WAAW,EAAE,IAAI,EAAA,CAAG;QAEzE,IAAA,CAAA,aAAa,GAAG,eAAe,CAAC,gCAAgC,qFAAI,WAAW,EAAE,IAAI,EAAA,CAAG;QAE1F,IAAA,CAAA,QAAQ,GAAG,SAAS,CAAC,sBAAsB;qFAAC;QAC5C,IAAA,CAAA,qBAAqB,GAAG,YAAY,CAAa,sBAAsB;kGAAC;QACxE,IAAA,CAAA,uBAAuB,GAAG,YAAY,CAAa,wBAAwB;oGAAC;AAE5E,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ;AAmB5C,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM;AACjC,YAAA,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC;YACrC,IAAI,CAAC,cAAc,EAAE,GAAG,iCAAiC,GAAG,EAAE;AAC9D,YAAA,IAAI,CAAC,OAAO,EAAE,KAAK,aAAa,GAAG,6BAA6B,GAAG,EAAE;AACxE,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;uFAAC;QAEV,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,aAAa,EAAE,CAAA,EAAA,CAAI;0FAAC;AAwOpE;;;AAGG;AACgB,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAW,MAAK;AACvD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;YAChC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,KACnD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,4BAA4B,EAAE;gBACjD,OAAO,EAAE,QAAQ,GAAG,CAAC;gBACrB,KAAK;AACR,aAAA,CAAC,CACL;QACL,CAAC;0FAAC;QAxQE,eAAe,CAAC,MAAK;YACjB,UAAU,CAAC,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;AACpD,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE;AAC/B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;YAEzC,SAAS,CAAC,MAAK;AACX,gBAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC;AAC5C,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;IACnC;IAUA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;IAClC;AAEA;;;;AAIG;IACK,SAAS,CACb,UAAgD,EAChD,YAAyD,EAAA;AAEzD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;QAE7B,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;AAC3B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,EAAG,EAAE,CAAA,KAAA,EAAQ,CAAC,CAAA,CAAE,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA,EAAG,EAAE,CAAA,SAAA,EAAY,CAAC,CAAA,CAAE,CAAC;AACtC,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAE5C,YAAA,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CACnC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CACjC,CAAC,SAAS,CAAC,CAAC,KAAa,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAE3D,kBAAkB,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAChD,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CACjC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;AAElD,YAAA,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CACpC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CACjC,CAAC,SAAS,CAAC,CAAC,KAAoB,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC3E,QAAA,CAAC,CAAC;QAEF,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,KAAI;AAC9B,YAAA,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAClB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA,EAAG,EAAE,CAAA,SAAA,EAAY,CAAC,CAAA,CAAE,CAAC;YACvC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,EAAG,EAAE,CAAA,KAAA,EAAQ,CAAC,CAAA,CAAE,CAAC;AACjC,YAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;AAC9C,YAAA,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,aAAa,CAAC;AAC7D,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACnB,IAAI,CAAC,YAAY,EAAE;QACvB;IACJ;;AAGQ,IAAA,WAAW,CAAC,KAAa,EAAA;AAC7B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE;AAC/B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AACzC,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE;AAE7B,QAAA,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM;QAEvF,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;YAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC;YACpC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAChD,QAAA,CAAC,CAAC;QAEF,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,KAAI;YAC9B,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC;AACvC,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACnD;;AAGQ,IAAA,eAAe,CAAC,KAAa,EAAA;AACjC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE;QAC/B,MAAM,mBAAmB,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE;QAE3D,IAAI,mBAAmB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YAC9C,IAAI,CAAC,YAAY,EAAE;QACvB;aAAO;YACH,IAAI,CAAC,aAAa,EAAE;QACxB;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IAC3B;;IAGU,eAAe,GAAA;QACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAC9C;;IAGU,eAAe,GAAA;QACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAC9C;AAEA;;;;;;;;;;;AAWG;IACK,iBAAiB,CAAC,KAAoB,EAAE,KAAa,EAAA;AACzD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE;AAC/B,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM;AAC/B,QAAA,IAAI,KAAK,KAAK,CAAC,EAAE;YACb;QACJ;QAEA,IAAI,WAAW,GAAkB,IAAI;AAErC,QAAA,QAAQ,KAAK,CAAC,GAAG;YACb,KAAK,OAAO,CAAC,WAAW;gBACpB,WAAW,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK;gBACjC;YACJ,KAAK,OAAO,CAAC,UAAU;gBACnB,WAAW,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,IAAI,KAAK;gBACzC;YACJ,KAAK,OAAO,CAAC,IAAI;gBACb,WAAW,GAAG,CAAC;gBACf;YACJ,KAAK,OAAO,CAAC,GAAG;AACZ,gBAAA,WAAW,GAAG,KAAK,GAAG,CAAC;gBACvB;AACJ,YAAA;gBACI;;QAGR,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,UAAU,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE;IAC1C;;IAGQ,wBAAwB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YACtB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAC9C;IACJ;;IAGU,YAAY,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC;YAAE;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9D;IAEU,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/D;;IAGU,WAAW,GAAA;QACjB,IAAI,CAAC,YAAY,EAAE;IACvB;;IAGU,YAAY,GAAA;QAClB,IAAI,CAAC,aAAa,EAAE;IACxB;;IAGQ,uBAAuB,GAAA;AAC3B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,EAAE;AAClD,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,uBAAuB,EAAE;AACtD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE;AAC/B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;QAEzC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;AAC3B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE;AACnC,YAAA,IAAI,SAAS,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;gBAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAgB;gBACpE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC;YACrD;AACJ,QAAA,CAAC,CAAC;QAEF,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,KAAI;AAC9B,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE;AAC9B,YAAA,IAAI,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE;gBAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAgB;gBACjE,eAAe,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC;YACvD;AACJ,QAAA,CAAC,CAAC;IACN;AAEU,IAAA,aAAa,CAAC,SAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ;QAC7C;QACA,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAEpB,QAAA,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,QAAQ,EAAE;YAC1E,IAAI,CAAC,iBAAiB,EAAE;QAC5B;IACJ;;IAGQ,iBAAiB,GAAA;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAEpB,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;AAC7D,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;AACrD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IACzD;;IAGU,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE;IACjC;;IAGU,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE;IACjC;;AAGU,IAAA,SAAS,CAAC,KAAa,EAAA;QAC7B,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC;IACpC;;IAGU,aAAa,GAAA;QACnB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAClE;8GAlUS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,eAAA,EAAA,OAAA,EAAA,cAAA,EAAA,uCAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EA2Da,yBAAyB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,SAAA,EAEjB,gCAAgC,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAE7C,sBAAsB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,SAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7HhE,omHA2FA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDjCQ,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAFtB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAMR,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAfjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,IAAA,EAE3B;AACF,wBAAA,MAAM,EAAE,eAAe;AACvB,wBAAA,SAAS,EAAE,cAAc;AACzB,wBAAA,yCAAyC,EAAE,iBAAiB;qBAC/D,EAAA,OAAA,EACQ;wBACL,aAAa;AACb,wBAAA,GAAG,cAAc;wBACjB,sBAAsB;qBACzB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,omHAAA,EAAA;AA6DJ,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,IAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,yBAAyB,QAAE,EAAE,WAAW,EAAE,IAAI,EAAE,+FAExC,gCAAgC,CAAA,EAAA,EAAA,GAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAEpE,sBAAsB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CACM,sBAAsB,oFACpB,wBAAwB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEjHzF,MAAM,kBAAkB,GAAG;IAC9B,qBAAqB;IACrB,yBAAyB;IACzB,gCAAgC;IAChC,yBAAyB;IACzB,4BAA4B;IAC5B,yBAAyB;;;ACpB7B;;AAEG;;"}