@eui/ecl 22.0.0-alpha.40 → 22.0.0-alpha.42

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 (215) hide show
  1. package/docs/changelog.html +140 -0
  2. package/docs/components/EclAccordionSummaryComponent.html +1 -1
  3. package/docs/components/EclAddToCalendarComponent.html +1 -1
  4. package/docs/components/EclAnimatedNumbersComponent.html +1 -1
  5. package/docs/components/EclAnimatedNumbersItemComponent.html +1 -1
  6. package/docs/components/EclAppComponent.html +1 -1
  7. package/docs/components/EclBannerComponent.html +1 -1
  8. package/docs/components/EclBlockquoteComponent.html +1 -1
  9. package/docs/components/EclBreadcrumbComponent.html +1 -1
  10. package/docs/components/EclBreadcrumbSegmentComponent.html +1 -14
  11. package/docs/components/EclButtonComponent.html +1 -1
  12. package/docs/components/EclCardBodyComponent.html +1 -1
  13. package/docs/components/EclCardComponent.html +1 -1
  14. package/docs/components/EclCarouselComponent.html +1 -1
  15. package/docs/components/EclCarouselItemComponent.html +59 -64
  16. package/docs/components/EclCategoryFilterComponent.html +1 -1
  17. package/docs/components/EclCategoryFilterItemComponent.html +179 -135
  18. package/docs/components/EclCategoryFilterListComponent.html +9 -2
  19. package/docs/components/EclCheckboxHelpComponent.html +90 -84
  20. package/docs/components/EclCheckboxLabelComponent.html +127 -143
  21. package/docs/components/EclContentBlockComponent.html +1 -1
  22. package/docs/components/EclContentItemComponent.html +1 -1
  23. package/docs/components/EclDateBlockComponent.html +68 -132
  24. package/docs/components/EclDescriptionListDefinitionComponent.html +1 -1
  25. package/docs/components/EclExpandableComponent.html +1 -1
  26. package/docs/components/EclFactFiguresComponent.html +1 -1
  27. package/docs/components/EclFactFiguresItemComponent.html +1 -1
  28. package/docs/components/EclFactFiguresViewAllComponent.html +1 -1
  29. package/docs/components/EclFeaturedComponent.html +24 -142
  30. package/docs/components/EclFeaturedItemComponent.html +5 -86
  31. package/docs/components/EclFeaturedItemDescriptionComponent.html +5 -105
  32. package/docs/components/EclFileComponent.html +1 -1
  33. package/docs/components/EclFileItemComponent.html +1 -1
  34. package/docs/components/EclFileItemsComponent.html +1 -1
  35. package/docs/components/EclFileListsComponent.html +1 -1
  36. package/docs/components/EclFormGroupComponent.html +1 -1
  37. package/docs/components/EclFormLabelComponent.html +1 -1
  38. package/docs/components/EclGalleryComponent.html +1 -1
  39. package/docs/components/EclGalleryFooterComponent.html +1 -1
  40. package/docs/components/EclGalleryItemComponent.html +1 -1
  41. package/docs/components/EclHighlightBoxComponent.html +1 -1
  42. package/docs/components/EclHighlightedSearchComponent.html +1 -1
  43. package/docs/components/EclIconComponent.html +1 -1
  44. package/docs/components/EclIndicatorComponent.html +1 -1
  45. package/docs/components/EclInpageNavigationComponent.html +1 -1
  46. package/docs/components/EclInpageNavigationItemComponent.html +1 -1
  47. package/docs/components/EclLayoutWrapperComponent.html +3 -3
  48. package/docs/components/EclListIllustrationComponent.html +1 -1
  49. package/docs/components/EclListIllustrationItemComponent.html +1 -1
  50. package/docs/components/EclLoadingIndicatorComponent.html +1 -1
  51. package/docs/components/EclMediaContainerComponent.html +1 -1
  52. package/docs/components/EclMegaMenuComponent.html +1 -1
  53. package/docs/components/EclMegaMenuFeaturedComponent.html +1 -1
  54. package/docs/components/EclMegaMenuInfoComponent.html +1 -1
  55. package/docs/components/EclMegaMenuItemComponent.html +1 -1
  56. package/docs/components/EclMegaMenuSubitemComponent.html +1 -1
  57. package/docs/components/EclMenuComponent.html +1 -1
  58. package/docs/components/EclMenuItemComponent.html +1 -1
  59. package/docs/components/EclMenuMegaComponent.html +1 -1
  60. package/docs/components/EclMenuMegaItemComponent.html +1 -1
  61. package/docs/components/EclModalBodyComponent.html +1 -1
  62. package/docs/components/EclModalComponent.html +1 -1
  63. package/docs/components/EclModalFooterComponent.html +1 -1
  64. package/docs/components/EclModalHeaderComponent.html +1 -1
  65. package/docs/components/EclMultiselectComponent.html +1 -1
  66. package/docs/components/EclMultiselectDropdownComponent.html +1 -1
  67. package/docs/components/EclMultiselectInputComponent.html +1 -1
  68. package/docs/components/EclMultiselectOptgroupComponent.html +1 -1
  69. package/docs/components/EclMultiselectOptionComponent.html +1 -1
  70. package/docs/components/EclNavigationListComponent.html +1 -1
  71. package/docs/components/EclNavigationListItemComponent.html +1 -1
  72. package/docs/components/EclNewsTickerComponent.html +1 -1
  73. package/docs/components/EclNewsTickerItemComponent.html +1 -1
  74. package/docs/components/EclNotificationComponent.html +1 -1
  75. package/docs/components/EclPageHeaderComponent.html +1 -1
  76. package/docs/components/EclPageHeaderDescriptionContainerComponent.html +1 -1
  77. package/docs/components/EclPageHeaderExpandableComponent.html +1 -1
  78. package/docs/components/EclPageHeaderSectionComponent.html +1 -1
  79. package/docs/components/EclPageHeaderSectionInfoComponent.html +1 -1
  80. package/docs/components/EclPageSummaryComponent.html +1 -1
  81. package/docs/components/EclPaginationComponent.html +1 -1
  82. package/docs/components/EclPaginationItemComponent.html +1 -1
  83. package/docs/components/EclPopoverComponent.html +1 -1
  84. package/docs/components/EclQuizCardComponent.html +1 -1
  85. package/docs/components/EclQuizComponent.html +1 -1
  86. package/docs/components/EclRadioHelpComponent.html +1 -1
  87. package/docs/components/EclRadioLabelComponent.html +1 -1
  88. package/docs/components/EclRangeBubbleComponent.html +1 -1
  89. package/docs/components/EclRangeValueComponent.html +1 -1
  90. package/docs/components/EclRatingFieldComponent.html +1 -1
  91. package/docs/components/EclSearchFormComponent.html +1 -1
  92. package/docs/components/EclSelectContainerComponent.html +1 -1
  93. package/docs/components/EclSiteFooterComponent.html +1 -1
  94. package/docs/components/EclSiteFooterCoownerComponent.html +1 -1
  95. package/docs/components/EclSiteFooterCoreComponent.html +1 -1
  96. package/docs/components/EclSiteFooterFeedbackComponent.html +1 -1
  97. package/docs/components/EclSiteFooterFixedContentEUComponent.html +1 -1
  98. package/docs/components/EclSiteFooterRowCommonComponent.html +1 -1
  99. package/docs/components/EclSiteHeaderActionComponent.html +1 -1
  100. package/docs/components/EclSiteHeaderBannerTopComponent.html +1 -1
  101. package/docs/components/EclSiteHeaderComponent.html +1 -1
  102. package/docs/components/EclSiteHeaderCustomActionComponent.html +1 -1
  103. package/docs/components/EclSiteHeaderEnvironmentComponent.html +1 -1
  104. package/docs/components/EclSiteHeaderLanguageComponent.html +1 -1
  105. package/docs/components/EclSiteHeaderLanguagePopoverComponent.html +1 -1
  106. package/docs/components/EclSiteHeaderLoginComponent.html +1 -1
  107. package/docs/components/EclSiteHeaderNotificationComponent.html +1 -1
  108. package/docs/components/EclSiteHeaderSearchComponent.html +1 -1
  109. package/docs/components/EclSloganTickerComponent.html +1 -1
  110. package/docs/components/EclSocialMediaFollowComponent.html +1 -1
  111. package/docs/components/EclSocialMediaFollowItemComponent.html +1 -1
  112. package/docs/components/EclSplashPageComponent.html +1 -1
  113. package/docs/components/EclSplashPageLanguageCategoryComponent.html +1 -1
  114. package/docs/components/EclSplashPageLanguageContainerComponent.html +1 -1
  115. package/docs/components/EclSplashPageLanguageLinkComponent.html +1 -1
  116. package/docs/components/EclSpotlightComponent.html +1 -1
  117. package/docs/components/EclSpotlightLinkComponent.html +1 -1
  118. package/docs/components/EclStickyContainerComponent.html +1 -1
  119. package/docs/components/EclStoryCardComponent.html +1 -1
  120. package/docs/components/EclStoryCardGridDetailsComponent.html +1 -1
  121. package/docs/components/EclStoryCardItemComponent.html +1 -1
  122. package/docs/components/EclTabComponent.html +1 -1
  123. package/docs/components/EclTabLabelComponent.html +1 -1
  124. package/docs/components/EclTableSortButtonComponent.html +1 -1
  125. package/docs/components/EclTabsComponent.html +1 -1
  126. package/docs/components/EclTagComponent.html +47 -107
  127. package/docs/components/EclTextMediaComponent.html +45 -30
  128. package/docs/components/EclTimelineComponent.html +2 -221
  129. package/docs/components/EclTimelineItemComponent.html +41 -443
  130. package/docs/components/EclTimelineItemTogglerComponent.html +7 -97
  131. package/docs/directives/ECLBaseDirective.html +0 -4
  132. package/docs/directives/EclCheckboxDirective.html +119 -94
  133. package/docs/directives/EclCheckboxInputDirective.html +33 -90
  134. package/docs/directives/EclFeaturedItemLinkDirective.html +14 -153
  135. package/docs/directives/EclLayoutWrapperViewAllDirective.html +2 -2
  136. package/docs/directives/EclTextAreaDirective.html +53 -100
  137. package/docs/directives/EclTextInputDirective.html +47 -144
  138. package/docs/directives/EclTimelineItemLabelDirective.html +0 -46
  139. package/docs/directives/EclTimelineItemTitleDirective.html +0 -46
  140. package/docs/directives/EclTimelineSetDirective.html +0 -104
  141. package/docs/directives/EclTooltipDirective.html +4 -157
  142. package/docs/interfaces/EclCarouselItem.html +6 -6
  143. package/docs/interfaces/EclCategoryFilterItem.html +6 -6
  144. package/docs/js/search/search_index.js +2 -2
  145. package/docs/json/EclCarouselItemComponent.md +1 -1
  146. package/docs/json/EclCategoryFilterItemComponent.md +2 -2
  147. package/docs/json/EclCheckboxDirective.md +2 -2
  148. package/docs/json/EclCheckboxHelpComponent.md +1 -1
  149. package/docs/json/EclCheckboxLabelComponent.md +0 -2
  150. package/docs/json/EclDateBlockComponent.md +1 -1
  151. package/docs/json/EclFeaturedItemLinkDirective.md +0 -1
  152. package/docs/json/EclLayoutWrapperComponent.md +1 -1
  153. package/docs/json/EclLayoutWrapperViewAllDirective.md +1 -1
  154. package/docs/json/EclTimelineComponent.md +1 -1
  155. package/docs/json/EclTimelineItemComponent.md +4 -4
  156. package/docs/json/EclTimelineItemTogglerComponent.md +2 -2
  157. package/docs/json/documentation.json +2468 -3078
  158. package/docs/llms.txt +60 -52
  159. package/docs/properties.html +1 -1
  160. package/fesm2022/eui-ecl-components-ecl-breadcrumb.mjs +7 -11
  161. package/fesm2022/eui-ecl-components-ecl-breadcrumb.mjs.map +1 -1
  162. package/fesm2022/eui-ecl-components-ecl-carousel.mjs +39 -24
  163. package/fesm2022/eui-ecl-components-ecl-carousel.mjs.map +1 -1
  164. package/fesm2022/eui-ecl-components-ecl-category-filter.mjs +68 -59
  165. package/fesm2022/eui-ecl-components-ecl-category-filter.mjs.map +1 -1
  166. package/fesm2022/eui-ecl-components-ecl-checkbox.mjs +92 -96
  167. package/fesm2022/eui-ecl-components-ecl-checkbox.mjs.map +1 -1
  168. package/fesm2022/eui-ecl-components-ecl-date-block.mjs +18 -26
  169. package/fesm2022/eui-ecl-components-ecl-date-block.mjs.map +1 -1
  170. package/fesm2022/eui-ecl-components-ecl-featured.mjs +42 -59
  171. package/fesm2022/eui-ecl-components-ecl-featured.mjs.map +1 -1
  172. package/fesm2022/eui-ecl-components-ecl-layout-wrapper.mjs +2 -2
  173. package/fesm2022/eui-ecl-components-ecl-layout-wrapper.mjs.map +1 -1
  174. package/fesm2022/eui-ecl-components-ecl-multiselect.mjs +2 -2
  175. package/fesm2022/eui-ecl-components-ecl-multiselect.mjs.map +1 -1
  176. package/fesm2022/eui-ecl-components-ecl-tag.mjs +19 -22
  177. package/fesm2022/eui-ecl-components-ecl-tag.mjs.map +1 -1
  178. package/fesm2022/eui-ecl-components-ecl-text-area.mjs +16 -17
  179. package/fesm2022/eui-ecl-components-ecl-text-area.mjs.map +1 -1
  180. package/fesm2022/eui-ecl-components-ecl-text-input.mjs +14 -17
  181. package/fesm2022/eui-ecl-components-ecl-text-input.mjs.map +1 -1
  182. package/fesm2022/eui-ecl-components-ecl-text-media.mjs +10 -9
  183. package/fesm2022/eui-ecl-components-ecl-text-media.mjs.map +1 -1
  184. package/fesm2022/eui-ecl-components-ecl-timeline.mjs +132 -133
  185. package/fesm2022/eui-ecl-components-ecl-timeline.mjs.map +1 -1
  186. package/fesm2022/eui-ecl-components-ecl-tooltip.mjs +8 -14
  187. package/fesm2022/eui-ecl-components-ecl-tooltip.mjs.map +1 -1
  188. package/fesm2022/eui-ecl-core.mjs +0 -1
  189. package/fesm2022/eui-ecl-core.mjs.map +1 -1
  190. package/package.json +1 -1
  191. package/types/eui-ecl-components-ecl-breadcrumb.d.ts +0 -1
  192. package/types/eui-ecl-components-ecl-breadcrumb.d.ts.map +1 -1
  193. package/types/eui-ecl-components-ecl-carousel.d.ts +16 -11
  194. package/types/eui-ecl-components-ecl-carousel.d.ts.map +1 -1
  195. package/types/eui-ecl-components-ecl-category-filter.d.ts +28 -18
  196. package/types/eui-ecl-components-ecl-category-filter.d.ts.map +1 -1
  197. package/types/eui-ecl-components-ecl-checkbox.d.ts +49 -34
  198. package/types/eui-ecl-components-ecl-checkbox.d.ts.map +1 -1
  199. package/types/eui-ecl-components-ecl-date-block.d.ts +9 -7
  200. package/types/eui-ecl-components-ecl-date-block.d.ts.map +1 -1
  201. package/types/eui-ecl-components-ecl-featured.d.ts +7 -9
  202. package/types/eui-ecl-components-ecl-featured.d.ts.map +1 -1
  203. package/types/eui-ecl-components-ecl-layout-wrapper.d.ts +2 -2
  204. package/types/eui-ecl-components-ecl-tag.d.ts +2 -3
  205. package/types/eui-ecl-components-ecl-tag.d.ts.map +1 -1
  206. package/types/eui-ecl-components-ecl-text-area.d.ts +2 -2
  207. package/types/eui-ecl-components-ecl-text-area.d.ts.map +1 -1
  208. package/types/eui-ecl-components-ecl-text-input.d.ts +3 -3
  209. package/types/eui-ecl-components-ecl-text-input.d.ts.map +1 -1
  210. package/types/eui-ecl-components-ecl-text-media.d.ts +1 -1
  211. package/types/eui-ecl-components-ecl-text-media.d.ts.map +1 -1
  212. package/types/eui-ecl-components-ecl-timeline.d.ts +65 -50
  213. package/types/eui-ecl-components-ecl-timeline.d.ts.map +1 -1
  214. package/types/eui-ecl-components-ecl-tooltip.d.ts.map +1 -1
  215. package/types/eui-ecl-core.d.ts.map +1 -1
@@ -1,5 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, EventEmitter, signal, contentChild, forwardRef, Output, Input, Component, contentChildren, effect, untracked } from '@angular/core';
2
+ import { input, computed, output, signal, contentChild, forwardRef, Component, contentChildren, effect, untracked } from '@angular/core';
3
+ import { outputToObservable } from '@angular/core/rxjs-interop';
3
4
  import { Subject, takeUntil } from 'rxjs';
4
5
  import { EclBaseEvent, ECLBaseDirective } from '@eui/ecl/core';
5
6
  import * as i1 from '@eui/ecl/components/ecl-icon';
@@ -29,39 +30,43 @@ class EclCategoryFilterItemComponent extends ECLBaseDirective {
29
30
  */
30
31
  this.href = input(undefined, /* @ts-ignore */
31
32
  ...(ngDevMode ? [{ debugName: "href" }] : /* istanbul ignore next */ []));
33
+ /**
34
+ * Input for the unique identifier of the item.
35
+ * When omitted, the parent assigns a generated fallback id.
36
+ */
37
+ this.idInput = input(undefined, { ...(ngDevMode ? { debugName: "idInput" } : /* istanbul ignore next */ {}), alias: 'id' });
38
+ /**
39
+ * Unique identifier for the item. Used to manage selection state.
40
+ * Resolves to the `id` input when provided, otherwise the parent-assigned fallback.
41
+ */
42
+ this.id = computed(() => this.idInput() ?? this.fallbackId(), /* @ts-ignore */
43
+ ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
32
44
  /**
33
45
  * Emits when the item is selected by the user (clicked).
34
46
  */
35
- this.itemSelect = new EventEmitter();
36
- this._isExpanded = signal(false, /* @ts-ignore */
37
- ...(ngDevMode ? [{ debugName: "_isExpanded" }] : /* istanbul ignore next */ []));
38
- this._isCurrent = signal(false, /* @ts-ignore */
39
- ...(ngDevMode ? [{ debugName: "_isCurrent" }] : /* istanbul ignore next */ []));
47
+ this.itemSelect = output();
48
+ /**
49
+ * Whether the item is currently expanded (open).
50
+ * Writable so that the parent can toggle it as the tree state changes.
51
+ */
52
+ this.isExpanded = signal(false, /* @ts-ignore */
53
+ ...(ngDevMode ? [{ debugName: "isExpanded" }] : /* istanbul ignore next */ []));
54
+ /**
55
+ * Whether the item is currently selected.
56
+ * Writable so that the parent can update selection as the user navigates.
57
+ */
58
+ this.isCurrent = signal(false, /* @ts-ignore */
59
+ ...(ngDevMode ? [{ debugName: "isCurrent" }] : /* istanbul ignore next */ []));
40
60
  /**
41
61
  * Child list component if the item has nested children.
42
62
  */
43
63
  this.eclCategoryList = contentChild(forwardRef(() => EclCategoryFilterListComponent), /* @ts-ignore */
44
64
  ...(ngDevMode ? [{ debugName: "eclCategoryList" }] : /* istanbul ignore next */ []));
45
- }
46
- /**
47
- * Whether the item is currently expanded (open).
48
- * Backed by a signal so that parent mutations trigger template updates.
49
- */
50
- get isExpanded() {
51
- return this._isExpanded();
52
- }
53
- set isExpanded(value) {
54
- this._isExpanded.set(value);
55
- }
56
- /**
57
- * Whether the item is currently selected.
58
- * Backed by a signal so that parent mutations trigger template updates.
59
- */
60
- get isCurrent() {
61
- return this._isCurrent();
62
- }
63
- set isCurrent(value) {
64
- this._isCurrent.set(value);
65
+ /**
66
+ * Fallback id assigned by the parent when no `id` input was provided.
67
+ */
68
+ this.fallbackId = signal(undefined, /* @ts-ignore */
69
+ ...(ngDevMode ? [{ debugName: "fallbackId" }] : /* istanbul ignore next */ []));
65
70
  }
66
71
  /**
67
72
  * Returns the hierarchical level of the item within the tree.
@@ -117,14 +122,20 @@ class EclCategoryFilterItemComponent extends ECLBaseDirective {
117
122
  * Prevents navigation if no `href` is defined.
118
123
  */
119
124
  onItemClick(evt) {
120
- this.isExpanded = !this.isExpanded;
121
- this.isCurrent = true;
122
- this.itemSelect.next(new EclCategoryFilterItemSelectEvent(this));
125
+ this.isExpanded.set(!this.isExpanded());
126
+ this.isCurrent.set(true);
127
+ this.itemSelect.emit(new EclCategoryFilterItemSelectEvent(this));
123
128
  if (!this.href()) {
124
129
  evt.preventDefault();
125
130
  }
126
131
  evt.stopPropagation();
127
132
  }
133
+ /**
134
+ * Assigns a fallback id. Used by the parent category filter when no `id` input was provided.
135
+ */
136
+ setFallbackId(id) {
137
+ this.fallbackId.set(id);
138
+ }
128
139
  updateChildListLevel(value) {
129
140
  const eclCategoryList = this.eclCategoryList();
130
141
  if (eclCategoryList) {
@@ -132,7 +143,7 @@ class EclCategoryFilterItemComponent extends ECLBaseDirective {
132
143
  }
133
144
  }
134
145
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclCategoryFilterItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
135
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EclCategoryFilterItemComponent, isStandalone: true, selector: "ecl-category-filter-item", inputs: { href: { classPropertyName: "href", publicName: "href", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { itemSelect: "itemSelect" }, host: { attributes: { "role": "listitem" }, properties: { "class.ecl-category-filter__list-item--open": "hasChildren ? isExpanded : null" }, classAttribute: "ecl-category-filter__list-item" }, queries: [{ propertyName: "eclCategoryList", first: true, predicate: i0.forwardRef(() => EclCategoryFilterListComponent), descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (hasChildren) {\n <button\n class=\"ecl-category-filter__item {{ levelClass }}\"\n [class.ecl-category-filter__item--has-children]=\"hasChildren\"\n [class.ecl-category-filter__item--current]=\"isCurrent\"\n [attr.aria-current]=\"isCurrent ? true : null\"\n [attr.aria-expanded]=\"isExpanded\"\n [attr.aria-controls]=\"eclCategoryList()?.id\"\n (click)=\"onItemClick($event)\">\n @if(isChildItemWithChildren) {\n <ecl-icon icon=\"solid-arrow\" size=\"xs\" transform=\"rotate-90\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n }\n @if(isRootItemWithChildren) {\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n <ecl-icon icon=\"corner-arrow\" size=\"xs\" transform=\"rotate-180\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n }\n </button>\n} @else {\n <a\n [href]=\"href()\"\n class=\"ecl-category-filter__item {{ levelClass }}\"\n [class.ecl-category-filter__item--has-children]=\"hasChildren\"\n [class.ecl-category-filter__item--current]=\"isCurrent\"\n [attr.aria-current]=\"isCurrent ? true : null\"\n (click)=\"onItemClick($event)\">\n @if(isChildItemWithChildren) {\n <ecl-icon icon=\"solid-arrow\" size=\"xs\" transform=\"rotate-90\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n }\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n @if(isRootItemWithChildren) {\n <ecl-icon icon=\"corner-arrow\" size=\"xs\" transform=\"rotate-180\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n }\n </a>\n}\n<ng-content select=\"ecl-category-filter-list\"></ng-content>\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1.EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "title", "ariaHidden", "focusable", "isFlipHorizontal"] }] }); }
146
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EclCategoryFilterItemComponent, isStandalone: true, selector: "ecl-category-filter-item", inputs: { href: { classPropertyName: "href", publicName: "href", isSignal: true, isRequired: false, transformFunction: null }, idInput: { classPropertyName: "idInput", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemSelect: "itemSelect" }, host: { attributes: { "role": "listitem" }, properties: { "class.ecl-category-filter__list-item--open": "hasChildren ? isExpanded() : null" }, classAttribute: "ecl-category-filter__list-item" }, queries: [{ propertyName: "eclCategoryList", first: true, predicate: i0.forwardRef(() => EclCategoryFilterListComponent), descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (hasChildren) {\n <button\n class=\"ecl-category-filter__item {{ levelClass }}\"\n [class.ecl-category-filter__item--has-children]=\"hasChildren\"\n [class.ecl-category-filter__item--current]=\"isCurrent()\"\n [attr.aria-current]=\"isCurrent() ? true : null\"\n [attr.aria-expanded]=\"isExpanded()\"\n [attr.aria-controls]=\"eclCategoryList()?.id()\"\n (click)=\"onItemClick($event)\">\n @if(isChildItemWithChildren) {\n <ecl-icon icon=\"solid-arrow\" size=\"xs\" transform=\"rotate-90\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n }\n @if(isRootItemWithChildren) {\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n <ecl-icon icon=\"corner-arrow\" size=\"xs\" transform=\"rotate-180\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n }\n </button>\n} @else {\n <a\n [href]=\"href()\"\n class=\"ecl-category-filter__item {{ levelClass }}\"\n [class.ecl-category-filter__item--has-children]=\"hasChildren\"\n [class.ecl-category-filter__item--current]=\"isCurrent()\"\n [attr.aria-current]=\"isCurrent() ? true : null\"\n (click)=\"onItemClick($event)\">\n @if(isChildItemWithChildren) {\n <ecl-icon icon=\"solid-arrow\" size=\"xs\" transform=\"rotate-90\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n }\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n @if(isRootItemWithChildren) {\n <ecl-icon icon=\"corner-arrow\" size=\"xs\" transform=\"rotate-180\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n }\n </a>\n}\n<ng-content select=\"ecl-category-filter-list\"></ng-content>\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1.EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "title", "ariaHidden", "focusable", "isFlipHorizontal"] }] }); }
136
147
  }
137
148
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclCategoryFilterItemComponent, decorators: [{
138
149
  type: Component,
@@ -142,17 +153,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
142
153
  ], host: {
143
154
  'class': 'ecl-category-filter__list-item',
144
155
  'role': 'listitem',
145
- '[class.ecl-category-filter__list-item--open]': 'hasChildren ? isExpanded : null',
146
- }, template: "@if (hasChildren) {\n <button\n class=\"ecl-category-filter__item {{ levelClass }}\"\n [class.ecl-category-filter__item--has-children]=\"hasChildren\"\n [class.ecl-category-filter__item--current]=\"isCurrent\"\n [attr.aria-current]=\"isCurrent ? true : null\"\n [attr.aria-expanded]=\"isExpanded\"\n [attr.aria-controls]=\"eclCategoryList()?.id\"\n (click)=\"onItemClick($event)\">\n @if(isChildItemWithChildren) {\n <ecl-icon icon=\"solid-arrow\" size=\"xs\" transform=\"rotate-90\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n }\n @if(isRootItemWithChildren) {\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n <ecl-icon icon=\"corner-arrow\" size=\"xs\" transform=\"rotate-180\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n }\n </button>\n} @else {\n <a\n [href]=\"href()\"\n class=\"ecl-category-filter__item {{ levelClass }}\"\n [class.ecl-category-filter__item--has-children]=\"hasChildren\"\n [class.ecl-category-filter__item--current]=\"isCurrent\"\n [attr.aria-current]=\"isCurrent ? true : null\"\n (click)=\"onItemClick($event)\">\n @if(isChildItemWithChildren) {\n <ecl-icon icon=\"solid-arrow\" size=\"xs\" transform=\"rotate-90\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n }\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n @if(isRootItemWithChildren) {\n <ecl-icon icon=\"corner-arrow\" size=\"xs\" transform=\"rotate-180\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n }\n </a>\n}\n<ng-content select=\"ecl-category-filter-list\"></ng-content>\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n" }]
147
- }], propDecorators: { href: [{ type: i0.Input, args: [{ isSignal: true, alias: "href", required: false }] }], id: [{
148
- type: Input
149
- }], itemSelect: [{
150
- type: Output
151
- }], eclCategoryList: [{ type: i0.ContentChild, args: [forwardRef(() => EclCategoryFilterListComponent), { isSignal: true }] }] } });
156
+ '[class.ecl-category-filter__list-item--open]': 'hasChildren ? isExpanded() : null',
157
+ }, template: "@if (hasChildren) {\n <button\n class=\"ecl-category-filter__item {{ levelClass }}\"\n [class.ecl-category-filter__item--has-children]=\"hasChildren\"\n [class.ecl-category-filter__item--current]=\"isCurrent()\"\n [attr.aria-current]=\"isCurrent() ? true : null\"\n [attr.aria-expanded]=\"isExpanded()\"\n [attr.aria-controls]=\"eclCategoryList()?.id()\"\n (click)=\"onItemClick($event)\">\n @if(isChildItemWithChildren) {\n <ecl-icon icon=\"solid-arrow\" size=\"xs\" transform=\"rotate-90\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n }\n @if(isRootItemWithChildren) {\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n <ecl-icon icon=\"corner-arrow\" size=\"xs\" transform=\"rotate-180\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n }\n </button>\n} @else {\n <a\n [href]=\"href()\"\n class=\"ecl-category-filter__item {{ levelClass }}\"\n [class.ecl-category-filter__item--has-children]=\"hasChildren\"\n [class.ecl-category-filter__item--current]=\"isCurrent()\"\n [attr.aria-current]=\"isCurrent() ? true : null\"\n (click)=\"onItemClick($event)\">\n @if(isChildItemWithChildren) {\n <ecl-icon icon=\"solid-arrow\" size=\"xs\" transform=\"rotate-90\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n }\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n @if(isRootItemWithChildren) {\n <ecl-icon icon=\"corner-arrow\" size=\"xs\" transform=\"rotate-180\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n }\n </a>\n}\n<ng-content select=\"ecl-category-filter-list\"></ng-content>\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n" }]
158
+ }], propDecorators: { href: [{ type: i0.Input, args: [{ isSignal: true, alias: "href", required: false }] }], idInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], itemSelect: [{ type: i0.Output, args: ["itemSelect"] }], eclCategoryList: [{ type: i0.ContentChild, args: [forwardRef(() => EclCategoryFilterListComponent), { isSignal: true }] }] } });
152
159
 
153
160
  class EclCategoryFilterListComponent extends ECLBaseDirective {
154
161
  constructor() {
155
162
  super(...arguments);
163
+ /**
164
+ * ID of this list element, referenced by the parent item's aria-controls.
165
+ */
166
+ this.id = signal(undefined, /* @ts-ignore */
167
+ ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
156
168
  /**
157
169
  * List of all category filter items projected inside this list.
158
170
  */
@@ -196,14 +208,14 @@ class EclCategoryFilterListComponent extends ECLBaseDirective {
196
208
  }
197
209
  }
198
210
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclCategoryFilterListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
199
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.2", type: EclCategoryFilterListComponent, isStandalone: true, selector: "ecl-category-filter-list", host: { attributes: { "role": "list" }, properties: { "attr.id": "id" }, classAttribute: "ecl-category-filter__list" }, queries: [{ propertyName: "eclCategoryFilterItems", predicate: i0.forwardRef(() => EclCategoryFilterItemComponent), isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n" }); }
211
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.2", type: EclCategoryFilterListComponent, isStandalone: true, selector: "ecl-category-filter-list", host: { attributes: { "role": "list" }, properties: { "attr.id": "id()" }, classAttribute: "ecl-category-filter__list" }, queries: [{ propertyName: "eclCategoryFilterItems", predicate: i0.forwardRef(() => EclCategoryFilterItemComponent), isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n" }); }
200
212
  }
201
213
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclCategoryFilterListComponent, decorators: [{
202
214
  type: Component,
203
215
  args: [{ selector: 'ecl-category-filter-list', host: {
204
216
  'class': 'ecl-category-filter__list',
205
217
  'role': 'list',
206
- '[attr.id]': 'id',
218
+ '[attr.id]': 'id()',
207
219
  }, template: "<ng-content></ng-content>\n" }]
208
220
  }], propDecorators: { eclCategoryFilterItems: [{ type: i0.ContentChildren, args: [forwardRef(() => EclCategoryFilterItemComponent), { isSignal: true }] }] } });
209
221
 
@@ -219,7 +231,7 @@ class EclCategoryFilterComponent extends ECLBaseDirective {
219
231
  /**
220
232
  * Aria-label for the navigation role. Defaults to "Category filter".
221
233
  */
222
- this.ariaLabel = 'Category filter';
234
+ this.ariaLabel = input('Category filter', { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
223
235
  this.eclCategoryList = contentChild(forwardRef(() => EclCategoryFilterListComponent), /* @ts-ignore */
224
236
  ...(ngDevMode ? [{ debugName: "eclCategoryList" }] : /* istanbul ignore next */ []));
225
237
  /**
@@ -259,17 +271,17 @@ class EclCategoryFilterComponent extends ECLBaseDirective {
259
271
  }
260
272
  setIds(items) {
261
273
  for (const item of items) {
262
- if (!item.id) {
263
- item.id = crypto.randomUUID();
274
+ if (!item.id()) {
275
+ item.setFallbackId(crypto.randomUUID());
264
276
  }
265
277
  const eclCategoryList = item.eclCategoryList();
266
- if (eclCategoryList && !eclCategoryList.id) {
267
- eclCategoryList.id = `${item.id}-list`;
278
+ if (eclCategoryList && !eclCategoryList.id()) {
279
+ eclCategoryList.id.set(`${item.id()}-list`);
268
280
  }
269
281
  }
270
282
  }
271
283
  connectCategoryfilterItemEvents(item) {
272
- item.itemSelect.pipe(takeUntil(this.destroy$)).subscribe((evt) => {
284
+ outputToObservable(item.itemSelect).pipe(takeUntil(this.destroy$)).subscribe((evt) => {
273
285
  this.onItemSelected(evt);
274
286
  });
275
287
  }
@@ -283,11 +295,11 @@ class EclCategoryFilterComponent extends ECLBaseDirective {
283
295
  }
284
296
  setPreselectedCurrentItem() {
285
297
  const items = this.eclCategoryFilterItemsAll();
286
- const currItem = items.find((item) => item.id === this.currentItemId());
298
+ const currItem = items.find((item) => item.id() === this.currentItemId());
287
299
  if (currItem) {
288
- currItem.isCurrent = true;
300
+ currItem.isCurrent.set(true);
289
301
  if (currItem.hasChildren) {
290
- currItem.isExpanded = true;
302
+ currItem.isExpanded.set(true);
291
303
  }
292
304
  this.expandParents(currItem);
293
305
  }
@@ -297,9 +309,9 @@ class EclCategoryFilterComponent extends ECLBaseDirective {
297
309
  return;
298
310
  }
299
311
  const items = this.eclCategoryFilterItemsAll();
300
- const parent = items.find((item) => item.hasChildren && item.children.find((child) => child.id === currItem.id) !== undefined);
312
+ const parent = items.find((item) => item.hasChildren && item.children.find((child) => child.id() === currItem.id()) !== undefined);
301
313
  if (parent) {
302
- parent.isExpanded = true;
314
+ parent.isExpanded.set(true);
303
315
  this.expandParents(parent);
304
316
  }
305
317
  }
@@ -307,8 +319,8 @@ class EclCategoryFilterComponent extends ECLBaseDirective {
307
319
  const items = this.eclCategoryFilterItemsAll();
308
320
  for (const it of items) {
309
321
  if (it !== item) {
310
- it.isExpanded = false;
311
- it.isCurrent = false;
322
+ it.isExpanded.set(false);
323
+ it.isCurrent.set(false);
312
324
  }
313
325
  }
314
326
  }
@@ -316,24 +328,21 @@ class EclCategoryFilterComponent extends ECLBaseDirective {
316
328
  const items = this.eclCategoryFilterItemsAll();
317
329
  for (const it of items) {
318
330
  if (it !== item) {
319
- it.isCurrent = false;
331
+ it.isCurrent.set(false);
320
332
  }
321
333
  }
322
334
  }
323
335
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclCategoryFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
324
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.2", type: EclCategoryFilterComponent, isStandalone: true, selector: "ecl-category-filter", inputs: { currentItemId: { classPropertyName: "currentItemId", publicName: "currentItemId", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: false, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "navigation" }, properties: { "attr.aria-label": "ariaLabel" }, classAttribute: "ecl-category-filter" }, queries: [{ propertyName: "eclCategoryList", first: true, predicate: i0.forwardRef(() => EclCategoryFilterListComponent), descendants: true, isSignal: true }, { propertyName: "eclCategoryFilterItemsAll", predicate: i0.forwardRef(() => EclCategoryFilterItemComponent), descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:block}\n"] }); }
336
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.2", type: EclCategoryFilterComponent, isStandalone: true, selector: "ecl-category-filter", inputs: { currentItemId: { classPropertyName: "currentItemId", publicName: "currentItemId", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "navigation" }, properties: { "attr.aria-label": "ariaLabel()" }, classAttribute: "ecl-category-filter" }, queries: [{ propertyName: "eclCategoryList", first: true, predicate: i0.forwardRef(() => EclCategoryFilterListComponent), descendants: true, isSignal: true }, { propertyName: "eclCategoryFilterItemsAll", predicate: i0.forwardRef(() => EclCategoryFilterItemComponent), descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:block}\n"] }); }
325
337
  }
326
338
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclCategoryFilterComponent, decorators: [{
327
339
  type: Component,
328
340
  args: [{ selector: 'ecl-category-filter', host: {
329
341
  'class': 'ecl-category-filter',
330
342
  'role': 'navigation',
331
- '[attr.aria-label]': 'ariaLabel',
343
+ '[attr.aria-label]': 'ariaLabel()',
332
344
  }, template: "<ng-content></ng-content>\n", styles: [":host{display:block}\n"] }]
333
- }], ctorParameters: () => [], propDecorators: { currentItemId: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentItemId", required: false }] }], ariaLabel: [{
334
- type: Input,
335
- args: ['aria-label']
336
- }], eclCategoryList: [{ type: i0.ContentChild, args: [forwardRef(() => EclCategoryFilterListComponent), { isSignal: true }] }], eclCategoryFilterItemsAll: [{ type: i0.ContentChildren, args: [forwardRef(() => EclCategoryFilterItemComponent), { ...{ descendants: true }, isSignal: true }] }] } });
345
+ }], ctorParameters: () => [], propDecorators: { currentItemId: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentItemId", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], eclCategoryList: [{ type: i0.ContentChild, args: [forwardRef(() => EclCategoryFilterListComponent), { isSignal: true }] }], eclCategoryFilterItemsAll: [{ type: i0.ContentChildren, args: [forwardRef(() => EclCategoryFilterItemComponent), { ...{ descendants: true }, isSignal: true }] }] } });
337
346
 
338
347
  const EUI_ECL_CATEGORY_FILTER = [
339
348
  EclCategoryFilterComponent,
@@ -1 +1 @@
1
- {"version":3,"file":"eui-ecl-components-ecl-category-filter.mjs","sources":["../../components/ecl-category-filter/events/ecl-category-filter-item-select.event.ts","../../components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-item.component.ts","../../components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-item.component.html","../../components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-list.component.ts","../../components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-list.component.html","../../components/ecl-category-filter/ecl-category-filter/ecl-category-filter.component.ts","../../components/ecl-category-filter/ecl-category-filter/ecl-category-filter.component.html","../../components/ecl-category-filter/index.ts","../../components/ecl-category-filter/eui-ecl-components-ecl-category-filter.ts"],"sourcesContent":["import { EclBaseEvent } from '@eui/ecl/core';\nimport { EclCategoryFilterItem } from '../models/ecl-category-filter-item.model';\n\n/**\n * Event emitted when a category filter item is selected.\n */\nexport class EclCategoryFilterItemSelectEvent extends EclBaseEvent {\n /**\n * Creates an instance of EclCategoryFilterItemSelectEvent.\n * @param item The category filter item that triggered the event.\n */\n constructor(public item: EclCategoryFilterItem) {\n super();\n }\n}\n","import { Component, EventEmitter, forwardRef, Input, Output, input, contentChild, signal } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclCategoryFilterItem } from '../models/ecl-category-filter-item.model';\nimport { EclCategoryFilterItemSelectEvent } from '../events/ecl-category-filter-item-select.event';\nimport { EclCategoryFilterListComponent } from './ecl-category-filter-list.component';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\nimport { NgTemplateOutlet } from '@angular/common';\n\n@Component({\n selector: 'ecl-category-filter-item',\n templateUrl: './ecl-category-filter-item.component.html',\n imports: [\n NgTemplateOutlet,\n ...EUI_ECL_ICON,\n ],\n host: {\n 'class': 'ecl-category-filter__list-item',\n 'role': 'listitem',\n '[class.ecl-category-filter__list-item--open]': 'hasChildren ? isExpanded : null',\n },\n})\nexport class EclCategoryFilterItemComponent extends ECLBaseDirective implements EclCategoryFilterItem {\n /**\n * Link URL associated with this category filter item.\n * If not provided, the item acts as a toggle only.\n */\n readonly href = input<string>(undefined);\n\n /**\n * Unique identifier for the item. Used to manage selection state.\n */\n @Input() id: string;\n\n /**\n * Emits when the item is selected by the user (clicked).\n */\n @Output() itemSelect = new EventEmitter<EclCategoryFilterItemSelectEvent>();\n\n /**\n * Whether the item is currently expanded (open).\n * Backed by a signal so that parent mutations trigger template updates.\n */\n get isExpanded(): boolean {\n return this._isExpanded();\n }\n set isExpanded(value: boolean) {\n this._isExpanded.set(value);\n }\n private readonly _isExpanded = signal(false);\n\n /**\n * Whether the item is currently selected.\n * Backed by a signal so that parent mutations trigger template updates.\n */\n get isCurrent(): boolean {\n return this._isCurrent();\n }\n set isCurrent(value: boolean) {\n this._isCurrent.set(value);\n }\n private readonly _isCurrent = signal(false);\n\n /**\n * Child list component if the item has nested children.\n */\n readonly eclCategoryList = contentChild(forwardRef(() => EclCategoryFilterListComponent));\n\n /**\n * Returns the hierarchical level of the item within the tree.\n */\n get level(): number {\n return this._level;\n }\n\n /**\n * Sets the level and updates the level of the child list accordingly.\n */\n set level(value: number) {\n this._level = ++value;\n this.updateChildListLevel(this._level);\n }\n private _level: number;\n\n /**\n * Returns the CSS class for the current level of the item.\n */\n get levelClass(): string {\n return `ecl-category-filter__item--level-${this._level}`;\n }\n\n /**\n * Indicates whether the item has child elements.\n */\n get hasChildren(): boolean {\n return this.eclCategoryList() !== undefined;\n }\n\n /**\n * Returns the child components of this item, if any.\n */\n get children(): readonly EclCategoryFilterItemComponent[] {\n return this.eclCategoryList().children;\n }\n\n /**\n * Returns true if this is a root-level item and has children.\n */\n get isRootItemWithChildren(): boolean {\n return this.hasChildren && this.isRootItem;\n }\n\n /**\n * Returns true if this is a child item and has its own children.\n */\n get isChildItemWithChildren(): boolean {\n return this.hasChildren && !this.isRootItem;\n }\n\n /**\n * Returns true if this is a root-level item (level === 1).\n */\n get isRootItem(): boolean {\n return this.level === 1;\n }\n\n /**\n * Handles user click interaction, updates state and emits selection event.\n * Prevents navigation if no `href` is defined.\n */\n onItemClick(evt: MouseEvent): void {\n this.isExpanded = !this.isExpanded;\n this.isCurrent = true;\n this.itemSelect.next(new EclCategoryFilterItemSelectEvent(this));\n if (!this.href()) {\n evt.preventDefault();\n }\n evt.stopPropagation();\n }\n\n private updateChildListLevel(value: number): void {\n const eclCategoryList = this.eclCategoryList();\n if (eclCategoryList) {\n eclCategoryList.level = value;\n }\n }\n}\n","@if (hasChildren) {\n <button\n class=\"ecl-category-filter__item {{ levelClass }}\"\n [class.ecl-category-filter__item--has-children]=\"hasChildren\"\n [class.ecl-category-filter__item--current]=\"isCurrent\"\n [attr.aria-current]=\"isCurrent ? true : null\"\n [attr.aria-expanded]=\"isExpanded\"\n [attr.aria-controls]=\"eclCategoryList()?.id\"\n (click)=\"onItemClick($event)\">\n @if(isChildItemWithChildren) {\n <ecl-icon icon=\"solid-arrow\" size=\"xs\" transform=\"rotate-90\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n }\n @if(isRootItemWithChildren) {\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n <ecl-icon icon=\"corner-arrow\" size=\"xs\" transform=\"rotate-180\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n }\n </button>\n} @else {\n <a\n [href]=\"href()\"\n class=\"ecl-category-filter__item {{ levelClass }}\"\n [class.ecl-category-filter__item--has-children]=\"hasChildren\"\n [class.ecl-category-filter__item--current]=\"isCurrent\"\n [attr.aria-current]=\"isCurrent ? true : null\"\n (click)=\"onItemClick($event)\">\n @if(isChildItemWithChildren) {\n <ecl-icon icon=\"solid-arrow\" size=\"xs\" transform=\"rotate-90\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n }\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n @if(isRootItemWithChildren) {\n <ecl-icon icon=\"corner-arrow\" size=\"xs\" transform=\"rotate-180\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n }\n </a>\n}\n<ng-content select=\"ecl-category-filter-list\"></ng-content>\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n","import { Component, forwardRef, contentChildren } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclCategoryFilterItemComponent } from './ecl-category-filter-item.component';\n\n@Component({\n selector: 'ecl-category-filter-list',\n templateUrl: './ecl-category-filter-list.component.html',\n host: {\n 'class': 'ecl-category-filter__list',\n 'role': 'list',\n '[attr.id]': 'id',\n },\n})\nexport class EclCategoryFilterListComponent extends ECLBaseDirective {\n /**\n * ID of this list element, referenced by the parent item's aria-controls.\n */\n id: string;\n\n /**\n * List of all category filter items projected inside this list.\n */\n readonly eclCategoryFilterItems = contentChildren<EclCategoryFilterItemComponent>(forwardRef(() => EclCategoryFilterItemComponent));\n\n /**\n * Gets the nesting level of this list in the category tree.\n */\n get level(): number {\n return this._level;\n }\n\n /**\n * Sets the level of the list and applies it to all its children.\n */\n set level(value: number) {\n this._level = value;\n this.updateChildrenItemsLevel(value);\n }\n private _level: number;\n\n /**\n * Returns true if the list contains one or more category filter items.\n */\n get hasChildren(): boolean {\n const eclCategoryFilterItems = this.eclCategoryFilterItems();\n return eclCategoryFilterItems !== undefined && eclCategoryFilterItems.length > 0;\n }\n\n /**\n * Returns the list of child components.\n */\n get children(): readonly EclCategoryFilterItemComponent[] {\n return this.eclCategoryFilterItems();\n }\n\n /**\n * Propagates the current level to all direct children items.\n * @param value Level value to set on each child.\n */\n updateChildrenItemsLevel(value: number): void {\n const eclCategoryFilterItems = this.eclCategoryFilterItems();\n if (eclCategoryFilterItems) {\n eclCategoryFilterItems.forEach((item) =>\n (item.level = value));\n }\n }\n}\n","<ng-content></ng-content>\n","import {\n Component,\n forwardRef,\n Input,\n OnDestroy,\n input,\n contentChild,\n contentChildren,\n effect,\n untracked,\n} from '@angular/core';\nimport { Subject, takeUntil } from 'rxjs';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclCategoryFilterItem } from '../models/ecl-category-filter-item.model';\nimport { EclCategoryFilterItemSelectEvent } from '../events/ecl-category-filter-item-select.event';\nimport { EclCategoryFilterItemComponent } from '../ecl-category-filter-list';\nimport { EclCategoryFilterListComponent } from '../ecl-category-filter-list';\n\n@Component({\n selector: 'ecl-category-filter',\n templateUrl: './ecl-category-filter.component.html',\n host: {\n 'class': 'ecl-category-filter',\n 'role': 'navigation',\n '[attr.aria-label]': 'ariaLabel',\n },\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class EclCategoryFilterComponent extends ECLBaseDirective implements OnDestroy {\n /**\n * ID of the currently selected item. When provided, the item with the matching ID\n * will be marked as current and automatically expanded on initialization.\n */\n readonly currentItemId = input<string>(undefined);\n\n /**\n * Aria-label for the navigation role. Defaults to \"Category filter\".\n */\n @Input('aria-label') ariaLabel: string | null = 'Category filter';\n\n readonly eclCategoryList = contentChild(forwardRef(() => EclCategoryFilterListComponent));\n\n /**\n * Signal-based query for all descendant category filter items.\n */\n readonly eclCategoryFilterItemsAll = contentChildren<EclCategoryFilterItemComponent>(\n forwardRef(() => EclCategoryFilterItemComponent), { descendants: true }\n );\n\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private readonly initializedItems = new WeakSet<EclCategoryFilterItemComponent>();\n\n constructor() {\n super();\n\n // Reacts to item changes and performs all setup:\n // - subscribes to itemSelect events (guarded by WeakSet)\n // - assigns IDs where missing\n // - propagates levels through the tree\n // - handles preselection of currentItemId\n effect(() => {\n const items = this.eclCategoryFilterItemsAll();\n untracked(() => {\n for (const item of items) {\n this.connectCategoryfilterItemEventsOnce(item);\n }\n this.setIds(items);\n this.eclCategoryList().updateChildrenItemsLevel(0);\n\n if (this.currentItemId() !== undefined) {\n this.setPreselectedCurrentItem();\n }\n });\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n private connectCategoryfilterItemEventsOnce(item: EclCategoryFilterItemComponent): void {\n if (this.initializedItems.has(item)) return;\n\n this.initializedItems.add(item);\n this.connectCategoryfilterItemEvents(item);\n }\n\n private setIds(items: readonly EclCategoryFilterItemComponent[]): void {\n for (const item of items) {\n if (!item.id) {\n item.id = crypto.randomUUID();\n }\n const eclCategoryList = item.eclCategoryList();\n if (eclCategoryList && !eclCategoryList.id) {\n eclCategoryList.id = `${item.id}-list`;\n }\n }\n }\n\n private connectCategoryfilterItemEvents(item: EclCategoryFilterItemComponent): void {\n item.itemSelect.pipe(takeUntil(this.destroy$)).subscribe((evt) => {\n this.onItemSelected(evt);\n });\n }\n\n private onItemSelected(evt: EclCategoryFilterItemSelectEvent): void {\n if (evt.item.isRootItem) {\n this.closeAllItemsButOne(evt.item);\n } else {\n this.deselectAllItemsButOne(evt.item);\n }\n }\n\n private setPreselectedCurrentItem(): void {\n const items = this.eclCategoryFilterItemsAll();\n const currItem = items.find((item) => item.id === this.currentItemId());\n if (currItem) {\n currItem.isCurrent = true;\n if (currItem.hasChildren) {\n currItem.isExpanded = true;\n }\n this.expandParents(currItem);\n }\n }\n\n private expandParents(currItem: EclCategoryFilterItem): void {\n if (currItem.isRootItem) {\n return;\n }\n const items = this.eclCategoryFilterItemsAll();\n const parent = items.find(\n (item) => item.hasChildren && item.children.find((child) => child.id === currItem.id) !== undefined,\n );\n if (parent) {\n parent.isExpanded = true;\n this.expandParents(parent);\n }\n }\n\n private closeAllItemsButOne(item: EclCategoryFilterItem): void {\n const items = this.eclCategoryFilterItemsAll();\n for (const it of items) {\n if (it !== item) {\n it.isExpanded = false;\n it.isCurrent = false;\n }\n }\n }\n\n private deselectAllItemsButOne(item: EclCategoryFilterItem): void {\n const items = this.eclCategoryFilterItemsAll();\n for (const it of items) {\n if (it !== item) {\n it.isCurrent = false;\n }\n }\n }\n}\n","<ng-content></ng-content>\n","import { EclCategoryFilterComponent } from './ecl-category-filter/ecl-category-filter.component';\nimport { EclCategoryFilterListComponent } from './ecl-category-filter-list/ecl-category-filter-list.component';\nimport { EclCategoryFilterItemComponent } from './ecl-category-filter-list/ecl-category-filter-item.component';\n\nexport * from './ecl-category-filter/index';\nexport * from './ecl-category-filter-list/index';\nexport * from './models/ecl-category-filter-item.model';\nexport * from './events/ecl-category-filter-item-select.event';\n\nexport const EUI_ECL_CATEGORY_FILTER = [\n EclCategoryFilterComponent,\n EclCategoryFilterListComponent,\n EclCategoryFilterItemComponent,\n] as const;","/**\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-category-filter.mjs","sources":["../../components/ecl-category-filter/events/ecl-category-filter-item-select.event.ts","../../components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-item.component.ts","../../components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-item.component.html","../../components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-list.component.ts","../../components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-list.component.html","../../components/ecl-category-filter/ecl-category-filter/ecl-category-filter.component.ts","../../components/ecl-category-filter/ecl-category-filter/ecl-category-filter.component.html","../../components/ecl-category-filter/index.ts","../../components/ecl-category-filter/eui-ecl-components-ecl-category-filter.ts"],"sourcesContent":["import { EclBaseEvent } from '@eui/ecl/core';\nimport { EclCategoryFilterItem } from '../models/ecl-category-filter-item.model';\n\n/**\n * Event emitted when a category filter item is selected.\n */\nexport class EclCategoryFilterItemSelectEvent extends EclBaseEvent {\n /**\n * Creates an instance of EclCategoryFilterItemSelectEvent.\n * @param item The category filter item that triggered the event.\n */\n constructor(public item: EclCategoryFilterItem) {\n super();\n }\n}\n","import { Component, computed, forwardRef, input, output, contentChild, signal } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclCategoryFilterItem } from '../models/ecl-category-filter-item.model';\nimport { EclCategoryFilterItemSelectEvent } from '../events/ecl-category-filter-item-select.event';\nimport { EclCategoryFilterListComponent } from './ecl-category-filter-list.component';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\nimport { NgTemplateOutlet } from '@angular/common';\n\n@Component({\n selector: 'ecl-category-filter-item',\n templateUrl: './ecl-category-filter-item.component.html',\n imports: [\n NgTemplateOutlet,\n ...EUI_ECL_ICON,\n ],\n host: {\n 'class': 'ecl-category-filter__list-item',\n 'role': 'listitem',\n '[class.ecl-category-filter__list-item--open]': 'hasChildren ? isExpanded() : null',\n },\n})\nexport class EclCategoryFilterItemComponent extends ECLBaseDirective implements EclCategoryFilterItem {\n /**\n * Link URL associated with this category filter item.\n * If not provided, the item acts as a toggle only.\n */\n readonly href = input<string>(undefined);\n\n /**\n * Input for the unique identifier of the item.\n * When omitted, the parent assigns a generated fallback id.\n */\n readonly idInput = input<string>(undefined, { alias: 'id' });\n\n /**\n * Unique identifier for the item. Used to manage selection state.\n * Resolves to the `id` input when provided, otherwise the parent-assigned fallback.\n */\n readonly id = computed(() => this.idInput() ?? this.fallbackId());\n\n /**\n * Emits when the item is selected by the user (clicked).\n */\n readonly itemSelect = output<EclCategoryFilterItemSelectEvent>();\n\n /**\n * Whether the item is currently expanded (open).\n * Writable so that the parent can toggle it as the tree state changes.\n */\n readonly isExpanded = signal(false);\n\n /**\n * Whether the item is currently selected.\n * Writable so that the parent can update selection as the user navigates.\n */\n readonly isCurrent = signal(false);\n\n /**\n * Child list component if the item has nested children.\n */\n readonly eclCategoryList = contentChild(forwardRef(() => EclCategoryFilterListComponent));\n\n /**\n * Returns the hierarchical level of the item within the tree.\n */\n get level(): number {\n return this._level;\n }\n\n /**\n * Sets the level and updates the level of the child list accordingly.\n */\n set level(value: number) {\n this._level = ++value;\n this.updateChildListLevel(this._level);\n }\n private _level: number;\n\n /**\n * Returns the CSS class for the current level of the item.\n */\n get levelClass(): string {\n return `ecl-category-filter__item--level-${this._level}`;\n }\n\n /**\n * Indicates whether the item has child elements.\n */\n get hasChildren(): boolean {\n return this.eclCategoryList() !== undefined;\n }\n\n /**\n * Returns the child components of this item, if any.\n */\n get children(): readonly EclCategoryFilterItemComponent[] {\n return this.eclCategoryList().children;\n }\n\n /**\n * Returns true if this is a root-level item and has children.\n */\n get isRootItemWithChildren(): boolean {\n return this.hasChildren && this.isRootItem;\n }\n\n /**\n * Returns true if this is a child item and has its own children.\n */\n get isChildItemWithChildren(): boolean {\n return this.hasChildren && !this.isRootItem;\n }\n\n /**\n * Returns true if this is a root-level item (level === 1).\n */\n get isRootItem(): boolean {\n return this.level === 1;\n }\n\n /**\n * Handles user click interaction, updates state and emits selection event.\n * Prevents navigation if no `href` is defined.\n */\n onItemClick(evt: MouseEvent): void {\n this.isExpanded.set(!this.isExpanded());\n this.isCurrent.set(true);\n this.itemSelect.emit(new EclCategoryFilterItemSelectEvent(this));\n if (!this.href()) {\n evt.preventDefault();\n }\n evt.stopPropagation();\n }\n\n /**\n * Assigns a fallback id. Used by the parent category filter when no `id` input was provided.\n */\n setFallbackId(id: string): void {\n this.fallbackId.set(id);\n }\n\n /**\n * Fallback id assigned by the parent when no `id` input was provided.\n */\n private readonly fallbackId = signal<string | undefined>(undefined);\n\n private updateChildListLevel(value: number): void {\n const eclCategoryList = this.eclCategoryList();\n if (eclCategoryList) {\n eclCategoryList.level = value;\n }\n }\n}\n","@if (hasChildren) {\n <button\n class=\"ecl-category-filter__item {{ levelClass }}\"\n [class.ecl-category-filter__item--has-children]=\"hasChildren\"\n [class.ecl-category-filter__item--current]=\"isCurrent()\"\n [attr.aria-current]=\"isCurrent() ? true : null\"\n [attr.aria-expanded]=\"isExpanded()\"\n [attr.aria-controls]=\"eclCategoryList()?.id()\"\n (click)=\"onItemClick($event)\">\n @if(isChildItemWithChildren) {\n <ecl-icon icon=\"solid-arrow\" size=\"xs\" transform=\"rotate-90\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n }\n @if(isRootItemWithChildren) {\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n <ecl-icon icon=\"corner-arrow\" size=\"xs\" transform=\"rotate-180\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n }\n </button>\n} @else {\n <a\n [href]=\"href()\"\n class=\"ecl-category-filter__item {{ levelClass }}\"\n [class.ecl-category-filter__item--has-children]=\"hasChildren\"\n [class.ecl-category-filter__item--current]=\"isCurrent()\"\n [attr.aria-current]=\"isCurrent() ? true : null\"\n (click)=\"onItemClick($event)\">\n @if(isChildItemWithChildren) {\n <ecl-icon icon=\"solid-arrow\" size=\"xs\" transform=\"rotate-90\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n }\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n @if(isRootItemWithChildren) {\n <ecl-icon icon=\"corner-arrow\" size=\"xs\" transform=\"rotate-180\" class=\"ecl-category-filter__item-icon\"> </ecl-icon>\n }\n </a>\n}\n<ng-content select=\"ecl-category-filter-list\"></ng-content>\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n","import { Component, forwardRef, contentChildren, signal } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclCategoryFilterItemComponent } from './ecl-category-filter-item.component';\n\n@Component({\n selector: 'ecl-category-filter-list',\n templateUrl: './ecl-category-filter-list.component.html',\n host: {\n 'class': 'ecl-category-filter__list',\n 'role': 'list',\n '[attr.id]': 'id()',\n },\n})\nexport class EclCategoryFilterListComponent extends ECLBaseDirective {\n /**\n * ID of this list element, referenced by the parent item's aria-controls.\n */\n readonly id = signal<string | undefined>(undefined);\n\n /**\n * List of all category filter items projected inside this list.\n */\n readonly eclCategoryFilterItems = contentChildren<EclCategoryFilterItemComponent>(forwardRef(() => EclCategoryFilterItemComponent));\n\n /**\n * Gets the nesting level of this list in the category tree.\n */\n get level(): number {\n return this._level;\n }\n\n /**\n * Sets the level of the list and applies it to all its children.\n */\n set level(value: number) {\n this._level = value;\n this.updateChildrenItemsLevel(value);\n }\n private _level: number;\n\n /**\n * Returns true if the list contains one or more category filter items.\n */\n get hasChildren(): boolean {\n const eclCategoryFilterItems = this.eclCategoryFilterItems();\n return eclCategoryFilterItems !== undefined && eclCategoryFilterItems.length > 0;\n }\n\n /**\n * Returns the list of child components.\n */\n get children(): readonly EclCategoryFilterItemComponent[] {\n return this.eclCategoryFilterItems();\n }\n\n /**\n * Propagates the current level to all direct children items.\n * @param value Level value to set on each child.\n */\n updateChildrenItemsLevel(value: number): void {\n const eclCategoryFilterItems = this.eclCategoryFilterItems();\n if (eclCategoryFilterItems) {\n eclCategoryFilterItems.forEach((item) =>\n (item.level = value));\n }\n }\n}\n","<ng-content></ng-content>\n","import {\n Component,\n forwardRef,\n OnDestroy,\n input,\n contentChild,\n contentChildren,\n effect,\n untracked,\n} from '@angular/core';\nimport { outputToObservable } from '@angular/core/rxjs-interop';\nimport { Subject, takeUntil } from 'rxjs';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclCategoryFilterItem } from '../models/ecl-category-filter-item.model';\nimport { EclCategoryFilterItemSelectEvent } from '../events/ecl-category-filter-item-select.event';\nimport { EclCategoryFilterItemComponent } from '../ecl-category-filter-list';\nimport { EclCategoryFilterListComponent } from '../ecl-category-filter-list';\n\n@Component({\n selector: 'ecl-category-filter',\n templateUrl: './ecl-category-filter.component.html',\n host: {\n 'class': 'ecl-category-filter',\n 'role': 'navigation',\n '[attr.aria-label]': 'ariaLabel()',\n },\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class EclCategoryFilterComponent extends ECLBaseDirective implements OnDestroy {\n /**\n * ID of the currently selected item. When provided, the item with the matching ID\n * will be marked as current and automatically expanded on initialization.\n */\n readonly currentItemId = input<string>(undefined);\n\n /**\n * Aria-label for the navigation role. Defaults to \"Category filter\".\n */\n readonly ariaLabel = input<string | null>('Category filter', { alias: 'aria-label' });\n\n readonly eclCategoryList = contentChild(forwardRef(() => EclCategoryFilterListComponent));\n\n /**\n * Signal-based query for all descendant category filter items.\n */\n readonly eclCategoryFilterItemsAll = contentChildren<EclCategoryFilterItemComponent>(\n forwardRef(() => EclCategoryFilterItemComponent), { descendants: true }\n );\n\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private readonly initializedItems = new WeakSet<EclCategoryFilterItemComponent>();\n\n constructor() {\n super();\n\n // Reacts to item changes and performs all setup:\n // - subscribes to itemSelect events (guarded by WeakSet)\n // - assigns IDs where missing\n // - propagates levels through the tree\n // - handles preselection of currentItemId\n effect(() => {\n const items = this.eclCategoryFilterItemsAll();\n untracked(() => {\n for (const item of items) {\n this.connectCategoryfilterItemEventsOnce(item);\n }\n this.setIds(items);\n this.eclCategoryList().updateChildrenItemsLevel(0);\n\n if (this.currentItemId() !== undefined) {\n this.setPreselectedCurrentItem();\n }\n });\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n private connectCategoryfilterItemEventsOnce(item: EclCategoryFilterItemComponent): void {\n if (this.initializedItems.has(item)) return;\n\n this.initializedItems.add(item);\n this.connectCategoryfilterItemEvents(item);\n }\n\n private setIds(items: readonly EclCategoryFilterItemComponent[]): void {\n for (const item of items) {\n if (!item.id()) {\n item.setFallbackId(crypto.randomUUID());\n }\n const eclCategoryList = item.eclCategoryList();\n if (eclCategoryList && !eclCategoryList.id()) {\n eclCategoryList.id.set(`${item.id()}-list`);\n }\n }\n }\n\n private connectCategoryfilterItemEvents(item: EclCategoryFilterItemComponent): void {\n outputToObservable(item.itemSelect).pipe(takeUntil(this.destroy$)).subscribe((evt) => {\n this.onItemSelected(evt);\n });\n }\n\n private onItemSelected(evt: EclCategoryFilterItemSelectEvent): void {\n if (evt.item.isRootItem) {\n this.closeAllItemsButOne(evt.item);\n } else {\n this.deselectAllItemsButOne(evt.item);\n }\n }\n\n private setPreselectedCurrentItem(): void {\n const items = this.eclCategoryFilterItemsAll();\n const currItem = items.find((item) => item.id() === this.currentItemId());\n if (currItem) {\n currItem.isCurrent.set(true);\n if (currItem.hasChildren) {\n currItem.isExpanded.set(true);\n }\n this.expandParents(currItem);\n }\n }\n\n private expandParents(currItem: EclCategoryFilterItem): void {\n if (currItem.isRootItem) {\n return;\n }\n const items = this.eclCategoryFilterItemsAll();\n const parent = items.find(\n (item) => item.hasChildren && item.children.find((child) => child.id() === currItem.id()) !== undefined,\n );\n if (parent) {\n parent.isExpanded.set(true);\n this.expandParents(parent);\n }\n }\n\n private closeAllItemsButOne(item: EclCategoryFilterItem): void {\n const items = this.eclCategoryFilterItemsAll();\n for (const it of items) {\n if (it !== item) {\n it.isExpanded.set(false);\n it.isCurrent.set(false);\n }\n }\n }\n\n private deselectAllItemsButOne(item: EclCategoryFilterItem): void {\n const items = this.eclCategoryFilterItemsAll();\n for (const it of items) {\n if (it !== item) {\n it.isCurrent.set(false);\n }\n }\n }\n}\n","<ng-content></ng-content>\n","import { EclCategoryFilterComponent } from './ecl-category-filter/ecl-category-filter.component';\nimport { EclCategoryFilterListComponent } from './ecl-category-filter-list/ecl-category-filter-list.component';\nimport { EclCategoryFilterItemComponent } from './ecl-category-filter-list/ecl-category-filter-item.component';\n\nexport * from './ecl-category-filter/index';\nexport * from './ecl-category-filter-list/index';\nexport * from './models/ecl-category-filter-item.model';\nexport * from './events/ecl-category-filter-item-select.event';\n\nexport const EUI_ECL_CATEGORY_FILTER = [\n EclCategoryFilterComponent,\n EclCategoryFilterListComponent,\n EclCategoryFilterItemComponent,\n] as const;","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}