@eui/ecl 22.0.0-alpha.2 → 22.0.0-alpha.21

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 (124) hide show
  1. package/docs/changelog.html +618 -0
  2. package/docs/components/EclDateBlockComponent.html +0 -9
  3. package/docs/components/EclDescriptionListDefinitionComponent.html +6 -44
  4. package/docs/components/EclIconComponent.html +1 -1
  5. package/docs/components/EclListIllustrationComponent.html +0 -171
  6. package/docs/components/EclListIllustrationItemComponent.html +77 -83
  7. package/docs/components/EclLoadingIndicatorComponent.html +4 -91
  8. package/docs/components/EclMegaMenuComponent.html +5 -203
  9. package/docs/components/EclMegaMenuFeaturedComponent.html +10 -126
  10. package/docs/components/EclMegaMenuInfoComponent.html +0 -91
  11. package/docs/components/EclMegaMenuItemComponent.html +38 -115
  12. package/docs/components/EclMegaMenuSubitemComponent.html +4 -68
  13. package/docs/components/EclMenuItemComponent.html +46 -0
  14. package/docs/components/EclModalBodyComponent.html +4 -45
  15. package/docs/components/EclModalComponent.html +5 -178
  16. package/docs/components/EclModalFooterComponent.html +4 -45
  17. package/docs/components/EclModalHeaderComponent.html +9 -76
  18. package/docs/components/EclSiteFooterRowCommonComponent.html +1 -1
  19. package/docs/components/EclSiteHeaderLanguageComponent.html +5 -627
  20. package/docs/components/EclSiteHeaderLanguagePopoverComponent.html +99 -440
  21. package/docs/components/EclSiteHeaderLoginComponent.html +9 -453
  22. package/docs/components/EclSiteHeaderSearchComponent.html +18 -470
  23. package/docs/components/EclSocialMediaFollowComponent.html +28 -39
  24. package/docs/components/EclSocialMediaFollowItemComponent.html +26 -129
  25. package/docs/components/EclStoryCardComponent.html +1 -1
  26. package/docs/directives/ECLClickOutsideDirective.html +3 -0
  27. package/docs/directives/EclDescriptionListDefinitionItemDirective.html +6 -47
  28. package/docs/directives/EclDescriptionListDefinitionListDirective.html +0 -116
  29. package/docs/directives/EclDividerDirective.html +0 -116
  30. package/docs/directives/EclFileUploadDirective.html +2 -390
  31. package/docs/directives/EclLabelDirective.html +0 -46
  32. package/docs/directives/EclLinkDirective.html +0 -39
  33. package/docs/directives/EclLoadingIndicatorLabelDirective.html +0 -61
  34. package/docs/directives/EclLoadingIndicatorOverlayDirective.html +0 -45
  35. package/docs/directives/EclMediaContainerCaptionDirective.html +0 -39
  36. package/docs/directives/EclMediaContainerCreditDirective.html +0 -39
  37. package/docs/directives/EclMediaContainerIframeDirective.html +13 -19
  38. package/docs/directives/EclMediaContainerItemAudioDescriptionDirective.html +0 -39
  39. package/docs/directives/EclMediaContainerItemDirective.html +0 -39
  40. package/docs/directives/EclMediaContainerPictureDirective.html +0 -39
  41. package/docs/directives/EclMegaMenuContainerDirective.html +0 -104
  42. package/docs/directives/EclMegaMenuFeaturedImageDirective.html +0 -104
  43. package/docs/directives/EclMegaMenuFeaturedListDirective.html +0 -104
  44. package/docs/directives/EclMegaMenuFeaturedListItemDescriptionDirective.html +0 -104
  45. package/docs/directives/EclMegaMenuFeaturedListItemDirective.html +0 -104
  46. package/docs/directives/EclMegaMenuFeaturedPictureDirective.html +0 -39
  47. package/docs/directives/EclMegaMenuListDirective.html +0 -104
  48. package/docs/directives/EclMegaMenuSpacerDirective.html +0 -104
  49. package/docs/directives/EclMegaMenuSublistDirective.html +0 -165
  50. package/docs/directives/EclModalBodyFixedContentDirective.html +0 -61
  51. package/docs/directives/EclModalCloseDirective.html +1 -90
  52. package/docs/directives/EclModalTriggerDirective.html +1 -90
  53. package/docs/js/search/search_index.js +2 -2
  54. package/docs/json/EclIconComponent.md +1 -1
  55. package/docs/json/EclMediaContainerIframeDirective.md +0 -1
  56. package/docs/json/EclSiteHeaderLanguagePopoverComponent.md +6 -6
  57. package/docs/json/EclSiteHeaderSearchComponent.md +1 -0
  58. package/docs/json/EclSocialMediaFollowComponent.md +1 -0
  59. package/docs/json/documentation.json +1261 -2880
  60. package/docs/llms.txt +31 -84
  61. package/docs/miscellaneous/variables.html +222 -41
  62. package/docs/properties.html +1 -1
  63. package/fesm2022/eui-ecl-components-ecl-date-block.mjs +2 -2
  64. package/fesm2022/eui-ecl-components-ecl-date-block.mjs.map +1 -1
  65. package/fesm2022/eui-ecl-components-ecl-divider.mjs +6 -13
  66. package/fesm2022/eui-ecl-components-ecl-divider.mjs.map +1 -1
  67. package/fesm2022/eui-ecl-components-ecl-file-upload.mjs +13 -27
  68. package/fesm2022/eui-ecl-components-ecl-file-upload.mjs.map +1 -1
  69. package/fesm2022/eui-ecl-components-ecl-icon.mjs.map +1 -1
  70. package/fesm2022/eui-ecl-components-ecl-inpage-navigation.mjs +55 -9
  71. package/fesm2022/eui-ecl-components-ecl-inpage-navigation.mjs.map +1 -1
  72. package/fesm2022/eui-ecl-components-ecl-label.mjs +6 -6
  73. package/fesm2022/eui-ecl-components-ecl-label.mjs.map +1 -1
  74. package/fesm2022/eui-ecl-components-ecl-link.mjs +10 -13
  75. package/fesm2022/eui-ecl-components-ecl-link.mjs.map +1 -1
  76. package/fesm2022/eui-ecl-components-ecl-list-illustration.mjs +19 -30
  77. package/fesm2022/eui-ecl-components-ecl-list-illustration.mjs.map +1 -1
  78. package/fesm2022/eui-ecl-components-ecl-list.mjs +44 -41
  79. package/fesm2022/eui-ecl-components-ecl-list.mjs.map +1 -1
  80. package/fesm2022/eui-ecl-components-ecl-loading-indicator.mjs +17 -20
  81. package/fesm2022/eui-ecl-components-ecl-loading-indicator.mjs.map +1 -1
  82. package/fesm2022/eui-ecl-components-ecl-media-container.mjs +36 -33
  83. package/fesm2022/eui-ecl-components-ecl-media-container.mjs.map +1 -1
  84. package/fesm2022/eui-ecl-components-ecl-mega-menu.mjs +100 -159
  85. package/fesm2022/eui-ecl-components-ecl-mega-menu.mjs.map +1 -1
  86. package/fesm2022/eui-ecl-components-ecl-menu.mjs +16 -3
  87. package/fesm2022/eui-ecl-components-ecl-menu.mjs.map +1 -1
  88. package/fesm2022/eui-ecl-components-ecl-modal.mjs +94 -88
  89. package/fesm2022/eui-ecl-components-ecl-modal.mjs.map +1 -1
  90. package/fesm2022/eui-ecl-components-ecl-site-footer.mjs +2 -2
  91. package/fesm2022/eui-ecl-components-ecl-site-footer.mjs.map +1 -1
  92. package/fesm2022/eui-ecl-components-ecl-site-header.mjs +326 -261
  93. package/fesm2022/eui-ecl-components-ecl-site-header.mjs.map +1 -1
  94. package/fesm2022/eui-ecl-components-ecl-social-media-follow.mjs +17 -17
  95. package/fesm2022/eui-ecl-components-ecl-social-media-follow.mjs.map +1 -1
  96. package/fesm2022/eui-ecl-components-ecl-story-card.mjs +2 -2
  97. package/fesm2022/eui-ecl-components-ecl-story-card.mjs.map +1 -1
  98. package/package.json +1 -1
  99. package/types/eui-ecl-components-ecl-date-block.d.ts.map +1 -1
  100. package/types/eui-ecl-components-ecl-divider.d.ts +0 -4
  101. package/types/eui-ecl-components-ecl-divider.d.ts.map +1 -1
  102. package/types/eui-ecl-components-ecl-file-upload.d.ts.map +1 -1
  103. package/types/eui-ecl-components-ecl-inpage-navigation.d.ts +25 -0
  104. package/types/eui-ecl-components-ecl-inpage-navigation.d.ts.map +1 -1
  105. package/types/eui-ecl-components-ecl-label.d.ts.map +1 -1
  106. package/types/eui-ecl-components-ecl-link.d.ts +2 -4
  107. package/types/eui-ecl-components-ecl-link.d.ts.map +1 -1
  108. package/types/eui-ecl-components-ecl-list-illustration.d.ts +3 -3
  109. package/types/eui-ecl-components-ecl-list-illustration.d.ts.map +1 -1
  110. package/types/eui-ecl-components-ecl-list.d.ts +9 -12
  111. package/types/eui-ecl-components-ecl-list.d.ts.map +1 -1
  112. package/types/eui-ecl-components-ecl-loading-indicator.d.ts.map +1 -1
  113. package/types/eui-ecl-components-ecl-media-container.d.ts +7 -2
  114. package/types/eui-ecl-components-ecl-media-container.d.ts.map +1 -1
  115. package/types/eui-ecl-components-ecl-mega-menu.d.ts +12 -22
  116. package/types/eui-ecl-components-ecl-mega-menu.d.ts.map +1 -1
  117. package/types/eui-ecl-components-ecl-menu.d.ts +12 -1
  118. package/types/eui-ecl-components-ecl-menu.d.ts.map +1 -1
  119. package/types/eui-ecl-components-ecl-modal.d.ts +20 -10
  120. package/types/eui-ecl-components-ecl-modal.d.ts.map +1 -1
  121. package/types/eui-ecl-components-ecl-site-header.d.ts +240 -216
  122. package/types/eui-ecl-components-ecl-site-header.d.ts.map +1 -1
  123. package/types/eui-ecl-components-ecl-social-media-follow.d.ts +5 -3
  124. package/types/eui-ecl-components-ecl-social-media-follow.d.ts.map +1 -1
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, output, HostListener, Directive, inject, signal, viewChild, HostBinding, Component, contentChild, forwardRef, contentChildren, DOCUMENT, PLATFORM_ID, effect } from '@angular/core';
3
- import { ECLBaseDirective, EclBaseEvent, EclThemeService } from '@eui/ecl/core';
2
+ import { input, output, Directive, inject, forwardRef, computed, viewChild, Component, signal, contentChild, contentChildren, DOCUMENT, PLATFORM_ID } from '@angular/core';
3
+ import { ECLBaseDirective, EclBaseEvent } from '@eui/ecl/core';
4
4
  import { TranslatePipe } from '@ngx-translate/core';
5
5
  import * as i2 from '@eui/ecl/components/ecl-button';
6
6
  import { EUI_ECL_BUTTON, EclButtonComponent } from '@eui/ecl/components/ecl-button';
@@ -36,21 +36,21 @@ class EclModalCloseDirective extends ECLBaseDirective {
36
36
  /**
37
37
  * Handles click events and emits the `modalClose` event.
38
38
  */
39
- onClick(evt) {
39
+ onClick() {
40
40
  this.modalClose.emit(null);
41
41
  }
42
42
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclModalCloseDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
43
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.2", type: EclModalCloseDirective, isStandalone: true, selector: "[eclModalClose]", inputs: { eclModalResult: { classPropertyName: "eclModalResult", publicName: "eclModalClose", isSignal: true, isRequired: false, transformFunction: null }, eclModalRole: { classPropertyName: "eclModalRole", publicName: "eclModalRole", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { modalClose: "modalClose" }, host: { listeners: { "click": "onClick($event)" } }, usesInheritance: true, ngImport: i0 }); }
43
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.2", type: EclModalCloseDirective, isStandalone: true, selector: "[eclModalClose]", inputs: { eclModalResult: { classPropertyName: "eclModalResult", publicName: "eclModalClose", isSignal: true, isRequired: false, transformFunction: null }, eclModalRole: { classPropertyName: "eclModalRole", publicName: "eclModalRole", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { modalClose: "modalClose" }, host: { listeners: { "click": "onClick()" } }, usesInheritance: true, ngImport: i0 }); }
44
44
  }
45
45
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclModalCloseDirective, decorators: [{
46
46
  type: Directive,
47
47
  args: [{
48
48
  selector: '[eclModalClose]',
49
+ host: {
50
+ '(click)': 'onClick()',
51
+ },
49
52
  }]
50
- }], propDecorators: { eclModalResult: [{ type: i0.Input, args: [{ isSignal: true, alias: "eclModalClose", required: false }] }], eclModalRole: [{ type: i0.Input, args: [{ isSignal: true, alias: "eclModalRole", required: false }] }], modalClose: [{ type: i0.Output, args: ["modalClose"] }], onClick: [{
51
- type: HostListener,
52
- args: ['click', ['$event']]
53
- }] } });
53
+ }], propDecorators: { eclModalResult: [{ type: i0.Input, args: [{ isSignal: true, alias: "eclModalClose", required: false }] }], eclModalRole: [{ type: i0.Input, args: [{ isSignal: true, alias: "eclModalRole", required: false }] }], modalClose: [{ type: i0.Output, args: ["modalClose"] }] } });
54
54
 
55
55
  class EclModalOpenEvent extends EclBaseEvent {
56
56
  }
@@ -73,13 +73,22 @@ class EclModalCloseEvent extends EclBaseEvent {
73
73
  class EclModalHeaderComponent extends ECLBaseDirective {
74
74
  constructor() {
75
75
  super(...arguments);
76
- this.eclThemeService = inject(EclThemeService);
76
+ /**
77
+ * Reference to the parent modal the header is projected into.
78
+ * Injected with `forwardRef` to avoid a circular module-import issue.
79
+ * A header is only valid inside an `EclModalComponent`, so this is a
80
+ * required injection: using the header outside a modal throws at
81
+ * construction, surfacing the misuse immediately.
82
+ */
83
+ this.modal = inject(forwardRef(() => EclModalComponent));
77
84
  /**
78
85
  * Defines the visual variant of the modal.
79
86
  * Determines which icon is shown in the header.
87
+ * Derived reactively from the parent modal's `variant` input, so the header
88
+ * icon updates automatically when the parent variant changes at runtime.
80
89
  * Possible values: 'information', 'success', 'warning', 'error', or any custom string.
81
90
  */
82
- this.variant = signal(undefined, /* @ts-ignore */
91
+ this.variant = computed(() => this.modal.variant(), /* @ts-ignore */
83
92
  ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
84
93
  /**
85
94
  * Event emitted when the close button is clicked.
@@ -128,7 +137,7 @@ class EclModalHeaderComponent extends ECLBaseDirective {
128
137
  }
129
138
  }
130
139
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclModalHeaderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
131
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EclModalHeaderComponent, isStandalone: true, selector: "[eclModalHeader]", outputs: { modalClose: "modalClose" }, host: { properties: { "class": "this.cssClasses" } }, viewQueries: [{ propertyName: "closeButton", first: true, predicate: ["closeButton"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ecl-modal__header-content\">\n @if(getIcon()) {\n @if(variant() === 'warning') {\n <span class=\"ecl-modal__icon-background\"></span>\n }\n <ecl-icon [icon]=\"getIcon()\" size=\"l\" class=\"ecl-modal__icon\" [title]=\"variant()\"></ecl-icon>\n }\n <ng-content></ng-content>\n</div>\n<button #closeButton eclButton variant=\"tertiary\" size=\"m\" eclStyle=\"neutral\" isIconOnly class=\"ecl-modal__close\" type=\"button\"\n (click)=\"onCloseClick()\">\n <span eclButtonLabel>{{ 'ecl.common.CLOSE' | translate }}</span>\n <ecl-icon icon=\"close\" size=\"m\"></ecl-icon>\n</button>", dependencies: [{ kind: "component", type: i1.EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "title", "ariaHidden", "focusable", "isFlipHorizontal"] }, { kind: "component", type: i2.EclButtonComponent, selector: "button[eclButton], button[ecl-button], a[eclButton]", inputs: ["isIconOnly", "variant", "eclStyle", "size", "containerStyleClass"] }, { kind: "directive", type: i2.EclButtonLabelDirective, selector: "[eclButtonLabel]" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
140
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EclModalHeaderComponent, isStandalone: true, selector: "[eclModalHeader]", outputs: { modalClose: "modalClose" }, host: { properties: { "class": "cssClasses" } }, viewQueries: [{ propertyName: "closeButton", first: true, predicate: ["closeButton"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ecl-modal__header-content\">\n @if(getIcon()) {\n @if(variant() === 'warning') {\n <span class=\"ecl-modal__icon-background\"></span>\n }\n <ecl-icon [icon]=\"getIcon()\" size=\"l\" class=\"ecl-modal__icon\" [title]=\"variant()\"></ecl-icon>\n }\n <ng-content></ng-content>\n</div>\n<button #closeButton eclButton variant=\"tertiary\" size=\"m\" eclStyle=\"neutral\" isIconOnly class=\"ecl-modal__close\" type=\"button\"\n (click)=\"onCloseClick()\">\n <span eclButtonLabel>{{ 'ecl.common.CLOSE' | translate }}</span>\n <ecl-icon icon=\"close\" size=\"m\"></ecl-icon>\n</button>", dependencies: [{ kind: "component", type: i1.EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "title", "ariaHidden", "focusable", "isFlipHorizontal"] }, { kind: "component", type: i2.EclButtonComponent, selector: "button[eclButton], button[ecl-button], a[eclButton]", inputs: ["isIconOnly", "variant", "eclStyle", "size", "containerStyleClass"] }, { kind: "directive", type: i2.EclButtonLabelDirective, selector: "[eclButtonLabel]" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
132
141
  }
133
142
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclModalHeaderComponent, decorators: [{
134
143
  type: Component,
@@ -136,11 +145,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
136
145
  ...EUI_ECL_ICON,
137
146
  TranslatePipe,
138
147
  ...EUI_ECL_BUTTON,
139
- ], template: "<div class=\"ecl-modal__header-content\">\n @if(getIcon()) {\n @if(variant() === 'warning') {\n <span class=\"ecl-modal__icon-background\"></span>\n }\n <ecl-icon [icon]=\"getIcon()\" size=\"l\" class=\"ecl-modal__icon\" [title]=\"variant()\"></ecl-icon>\n }\n <ng-content></ng-content>\n</div>\n<button #closeButton eclButton variant=\"tertiary\" size=\"m\" eclStyle=\"neutral\" isIconOnly class=\"ecl-modal__close\" type=\"button\"\n (click)=\"onCloseClick()\">\n <span eclButtonLabel>{{ 'ecl.common.CLOSE' | translate }}</span>\n <ecl-icon icon=\"close\" size=\"m\"></ecl-icon>\n</button>" }]
140
- }], propDecorators: { modalClose: [{ type: i0.Output, args: ["modalClose"] }], closeButton: [{ type: i0.ViewChild, args: ['closeButton', { isSignal: true }] }], cssClasses: [{
141
- type: HostBinding,
142
- args: ['class']
143
- }] } });
148
+ ], host: {
149
+ '[class]': 'cssClasses',
150
+ }, template: "<div class=\"ecl-modal__header-content\">\n @if(getIcon()) {\n @if(variant() === 'warning') {\n <span class=\"ecl-modal__icon-background\"></span>\n }\n <ecl-icon [icon]=\"getIcon()\" size=\"l\" class=\"ecl-modal__icon\" [title]=\"variant()\"></ecl-icon>\n }\n <ng-content></ng-content>\n</div>\n<button #closeButton eclButton variant=\"tertiary\" size=\"m\" eclStyle=\"neutral\" isIconOnly class=\"ecl-modal__close\" type=\"button\"\n (click)=\"onCloseClick()\">\n <span eclButtonLabel>{{ 'ecl.common.CLOSE' | translate }}</span>\n <ecl-icon icon=\"close\" size=\"m\"></ecl-icon>\n</button>" }]
151
+ }], propDecorators: { modalClose: [{ type: i0.Output, args: ["modalClose"] }], closeButton: [{ type: i0.ViewChild, args: ['closeButton', { isSignal: true }] }] } });
144
152
 
145
153
  /**
146
154
  * Body component used inside the ECL Modal.
@@ -167,20 +175,19 @@ class EclModalBodyComponent extends ECLBaseDirective {
167
175
  ].join(' ').trim();
168
176
  }
169
177
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclModalBodyComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
170
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.2", type: EclModalBodyComponent, isStandalone: true, selector: "[eclModalBody]", host: { properties: { "class": "this.cssClasses" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"ecl-modal__body-scroll\" [id]=\"eclModalBodyId()\">\n <ng-content></ng-content>\n</div>\n<div class=\"ecl-modal__body-overflow\" aria-hidden=\"true\"></div>\n<ng-content select=\"[eclModalBodyFixedContent]\"></ng-content>" }); }
178
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.2", type: EclModalBodyComponent, isStandalone: true, selector: "[eclModalBody]", host: { properties: { "class": "cssClasses" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"ecl-modal__body-scroll\" [id]=\"eclModalBodyId()\">\n <ng-content></ng-content>\n</div>\n<div class=\"ecl-modal__body-overflow\" aria-hidden=\"true\"></div>\n<ng-content select=\"[eclModalBodyFixedContent]\"></ng-content>" }); }
171
179
  }
172
180
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclModalBodyComponent, decorators: [{
173
181
  type: Component,
174
- args: [{ selector: '[eclModalBody]', template: "<div class=\"ecl-modal__body-scroll\" [id]=\"eclModalBodyId()\">\n <ng-content></ng-content>\n</div>\n<div class=\"ecl-modal__body-overflow\" aria-hidden=\"true\"></div>\n<ng-content select=\"[eclModalBodyFixedContent]\"></ng-content>" }]
175
- }], propDecorators: { cssClasses: [{
176
- type: HostBinding,
177
- args: ['class']
178
- }] } });
182
+ args: [{ selector: '[eclModalBody]', host: {
183
+ '[class]': 'cssClasses',
184
+ }, template: "<div class=\"ecl-modal__body-scroll\" [id]=\"eclModalBodyId()\">\n <ng-content></ng-content>\n</div>\n<div class=\"ecl-modal__body-overflow\" aria-hidden=\"true\"></div>\n<ng-content select=\"[eclModalBodyFixedContent]\"></ng-content>" }]
185
+ }] });
179
186
 
180
187
  /* eslint-disable @typescript-eslint/no-explicit-any */
181
188
  class EclModalComponent extends ECLBaseDirective {
182
189
  constructor() {
183
- super();
190
+ super(...arguments);
184
191
  /**
185
192
  * Defines the visual variant of the modal.
186
193
  * Possible values: 'information', 'success', 'warning', 'error', or a custom string.
@@ -227,15 +234,37 @@ class EclModalComponent extends ECLBaseDirective {
227
234
  */
228
235
  this.eclModalBody = contentChild(EclModalBodyComponent, /* @ts-ignore */
229
236
  ...(ngDevMode ? [{ debugName: "eclModalBody" }] : /* istanbul ignore next */ []));
230
- this.previousOverflow = null;
237
+ this.previousOverflow = '';
231
238
  this.document = inject(DOCUMENT);
232
239
  this.platformId = inject(PLATFORM_ID);
233
- effect(() => {
234
- const header = this.eclModalHeader();
235
- if (header) {
236
- header.variant.set(this.variant());
237
- }
240
+ }
241
+ /**
242
+ * Wires the projected header and close directives, and passes the body id to
243
+ * the projected body, once content is initialized. The projected content is
244
+ * static for the modal's lifetime, so a one-time setup is sufficient.
245
+ */
246
+ ngAfterContentInit() {
247
+ // The header derives its own `variant` reactively from this modal, so no
248
+ // manual sync is needed here. We only wire the close event.
249
+ const header = this.eclModalHeader();
250
+ if (header) {
251
+ header.modalClose.subscribe(() => {
252
+ this.closeModal({ eclModalRole: 'cancel' });
253
+ });
254
+ }
255
+ // Wire every projected close directive to close the modal with its
256
+ // configured role and result. `modalClose` is an `output()`, so its
257
+ // subscription is cleaned up automatically when this component is destroyed.
258
+ this.eclModalCloseComponents().forEach((closeCmp) => {
259
+ closeCmp.modalClose.subscribe(() => {
260
+ this.closeModal({
261
+ eclModalData: closeCmp.eclModalResult(),
262
+ eclModalRole: closeCmp.eclModalRole(),
263
+ });
264
+ });
238
265
  });
266
+ // Pass the modal body id to the projected body for aria-describedby wiring.
267
+ this.eclModalBody()?.eclModalBodyId.set(this.eclModalBodyId);
239
268
  }
240
269
  /**
241
270
  * Binds the `open` attribute to the modal element.
@@ -266,45 +295,30 @@ class EclModalComponent extends ECLBaseDirective {
266
295
  onEscapeKeydownHandler() {
267
296
  this.closeModal({ eclModalRole: 'cancel' });
268
297
  }
269
- /**
270
- * Subscribes to close events from header and close directives after content is initialized.
271
- */
272
- ngAfterContentInit() {
273
- const header = this.eclModalHeader();
274
- if (header) {
275
- header.variant.set(this.variant());
276
- header.modalClose.subscribe(() => {
277
- this.closeModal({ eclModalRole: 'cancel' });
278
- });
279
- }
280
- this.eclModalCloseComponents()?.forEach((eclModalCloseCmp) => {
281
- eclModalCloseCmp.modalClose.subscribe(() => {
282
- this.closeModal({
283
- eclModalData: eclModalCloseCmp.eclModalResult(),
284
- eclModalRole: eclModalCloseCmp.eclModalRole(),
285
- });
286
- });
287
- });
288
- this.eclModalBody().eclModalBodyId.set(this.eclModalBodyId);
289
- }
290
298
  /**
291
299
  * Opens the modal and emits a `modalOpen` event.
292
300
  * If the event is not prevented, the modal will be displayed.
293
301
  */
294
302
  openModal() {
303
+ // Ignore repeated open calls so the saved overflow value is not overwritten
304
+ // with the already-hidden value while the modal is open.
305
+ if (this.isOpen()) {
306
+ return;
307
+ }
295
308
  const event = new EclModalOpenEvent();
296
309
  this.modalOpen.emit(event);
297
- if (!event.defaultPrevented) {
298
- this.isOpen.set(true);
310
+ if (event.defaultPrevented) {
311
+ return;
299
312
  }
313
+ this.isOpen.set(true);
300
314
  const header = this.eclModalHeader();
301
315
  if (header) {
302
316
  setTimeout(() => header.closeButton().el.nativeElement.focus(), 100);
303
317
  }
304
318
  // To prevent scrolling in main document
305
319
  if (isPlatformBrowser(this.platformId)) {
306
- this.previousOverflow = document.body.style.overflow;
307
- document.body.style.overflow = 'hidden';
320
+ this.previousOverflow = this.document.body.style.overflow;
321
+ this.document.body.style.overflow = 'hidden';
308
322
  }
309
323
  }
310
324
  /**
@@ -322,29 +336,22 @@ class EclModalComponent extends ECLBaseDirective {
322
336
  this.isOpen.set(false);
323
337
  }
324
338
  if (isPlatformBrowser(this.platformId)) {
325
- document.body.style.overflow = this.previousOverflow;
339
+ this.document.body.style.overflow = this.previousOverflow;
326
340
  }
327
341
  }
328
342
  }
329
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
330
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.2", type: EclModalComponent, isStandalone: true, selector: "dialog[eclModal]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { modalClose: "modalClose", modalOpen: "modalOpen" }, host: { listeners: { "document:keydown.escape": "onEscapeKeydownHandler()" }, properties: { "attr.open": "this.isModalOpened", "attr.aria-describedby": "this.hostAriaDescribedBy", "class": "this.cssClasses" } }, queries: [{ propertyName: "eclModalHeader", first: true, predicate: i0.forwardRef(() => EclModalHeaderComponent), descendants: true, isSignal: true }, { propertyName: "eclModalCloseComponents", predicate: i0.forwardRef(() => EclModalCloseDirective), descendants: true, isSignal: true }, { propertyName: "eclModalBody", first: true, predicate: EclModalBodyComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ecl-modal__container\">\n <div class=\"ecl-modal__content ecl-container\" cdkTrapFocus cdkTrapFocusAutoCapture>\n <ng-content></ng-content>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }] }); }
343
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclModalComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
344
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.2", type: EclModalComponent, isStandalone: true, selector: "dialog[eclModal]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { modalClose: "modalClose", modalOpen: "modalOpen" }, host: { listeners: { "document:keydown.escape": "onEscapeKeydownHandler()" }, properties: { "attr.open": "isModalOpened", "attr.aria-describedby": "hostAriaDescribedBy", "class": "cssClasses" } }, queries: [{ propertyName: "eclModalHeader", first: true, predicate: i0.forwardRef(() => EclModalHeaderComponent), descendants: true, isSignal: true }, { propertyName: "eclModalCloseComponents", predicate: i0.forwardRef(() => EclModalCloseDirective), descendants: true, isSignal: true }, { propertyName: "eclModalBody", first: true, predicate: EclModalBodyComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ecl-modal__container\">\n <div class=\"ecl-modal__content ecl-container\" cdkTrapFocus cdkTrapFocusAutoCapture>\n <ng-content></ng-content>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }] }); }
331
345
  }
332
346
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclModalComponent, decorators: [{
333
347
  type: Component,
334
- args: [{ selector: 'dialog[eclModal]', imports: [A11yModule], template: "<div class=\"ecl-modal__container\">\n <div class=\"ecl-modal__content ecl-container\" cdkTrapFocus cdkTrapFocusAutoCapture>\n <ng-content></ng-content>\n </div>\n</div>\n" }]
335
- }], ctorParameters: () => [], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], modalClose: [{ type: i0.Output, args: ["modalClose"] }], modalOpen: [{ type: i0.Output, args: ["modalOpen"] }], eclModalHeader: [{ type: i0.ContentChild, args: [forwardRef(() => EclModalHeaderComponent), { isSignal: true }] }], eclModalCloseComponents: [{ type: i0.ContentChildren, args: [forwardRef(() => EclModalCloseDirective), { ...{ descendants: true }, isSignal: true }] }], eclModalBody: [{ type: i0.ContentChild, args: [i0.forwardRef(() => EclModalBodyComponent), { isSignal: true }] }], isModalOpened: [{
336
- type: HostBinding,
337
- args: ['attr.open']
338
- }], hostAriaDescribedBy: [{
339
- type: HostBinding,
340
- args: ['attr.aria-describedby']
341
- }], cssClasses: [{
342
- type: HostBinding,
343
- args: ['class']
344
- }], onEscapeKeydownHandler: [{
345
- type: HostListener,
346
- args: ['document:keydown.escape']
347
- }] } });
348
+ args: [{ selector: 'dialog[eclModal]', imports: [A11yModule], host: {
349
+ '[attr.open]': 'isModalOpened',
350
+ '[attr.aria-describedby]': 'hostAriaDescribedBy',
351
+ '[class]': 'cssClasses',
352
+ '(document:keydown.escape)': 'onEscapeKeydownHandler()',
353
+ }, template: "<div class=\"ecl-modal__container\">\n <div class=\"ecl-modal__content ecl-container\" cdkTrapFocus cdkTrapFocusAutoCapture>\n <ng-content></ng-content>\n </div>\n</div>\n" }]
354
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], modalClose: [{ type: i0.Output, args: ["modalClose"] }], modalOpen: [{ type: i0.Output, args: ["modalOpen"] }], eclModalHeader: [{ type: i0.ContentChild, args: [forwardRef(() => EclModalHeaderComponent), { isSignal: true }] }], eclModalCloseComponents: [{ type: i0.ContentChildren, args: [forwardRef(() => EclModalCloseDirective), { ...{ descendants: true }, isSignal: true }] }], eclModalBody: [{ type: i0.ContentChild, args: [i0.forwardRef(() => EclModalBodyComponent), { isSignal: true }] }] } });
348
355
 
349
356
  /**
350
357
  * Footer component used within the ECL Modal.
@@ -380,15 +387,14 @@ class EclModalFooterComponent extends ECLBaseDirective {
380
387
  }
381
388
  }
382
389
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclModalFooterComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
383
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.2", type: EclModalFooterComponent, isStandalone: true, selector: "[eclModalFooter]", host: { properties: { "class": "this.cssClasses" } }, queries: [{ propertyName: "buttonComponents", predicate: i0.forwardRef(() => EclButtonComponent), descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ecl-modal__footer-content\">\n <ng-content></ng-content>\n</div>\n" }); }
390
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.2", type: EclModalFooterComponent, isStandalone: true, selector: "[eclModalFooter]", host: { properties: { "class": "cssClasses" } }, queries: [{ propertyName: "buttonComponents", predicate: i0.forwardRef(() => EclButtonComponent), descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ecl-modal__footer-content\">\n <ng-content></ng-content>\n</div>\n" }); }
384
391
  }
385
392
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclModalFooterComponent, decorators: [{
386
393
  type: Component,
387
- args: [{ selector: '[eclModalFooter]', template: "<div class=\"ecl-modal__footer-content\">\n <ng-content></ng-content>\n</div>\n" }]
388
- }], propDecorators: { buttonComponents: [{ type: i0.ContentChildren, args: [forwardRef(() => EclButtonComponent), { ...{ descendants: true }, isSignal: true }] }], cssClasses: [{
389
- type: HostBinding,
390
- args: ['class']
391
- }] } });
394
+ args: [{ selector: '[eclModalFooter]', host: {
395
+ '[class]': 'cssClasses',
396
+ }, template: "<div class=\"ecl-modal__footer-content\">\n <ng-content></ng-content>\n</div>\n" }]
397
+ }], propDecorators: { buttonComponents: [{ type: i0.ContentChildren, args: [forwardRef(() => EclButtonComponent), { ...{ descendants: true }, isSignal: true }] }] } });
392
398
 
393
399
  /**
394
400
  * Directive for styling fixed content inside the modal body.
@@ -404,17 +410,17 @@ class EclModalBodyFixedContentDirective extends ECLBaseDirective {
404
410
  this.className = true;
405
411
  }
406
412
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclModalBodyFixedContentDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
407
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.2", type: EclModalBodyFixedContentDirective, isStandalone: true, selector: "[eclModalBodyFixedContent]", host: { properties: { "class.ecl-modal__body-fixed": "this.className" } }, usesInheritance: true, ngImport: i0 }); }
413
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.2", type: EclModalBodyFixedContentDirective, isStandalone: true, selector: "[eclModalBodyFixedContent]", host: { properties: { "class.ecl-modal__body-fixed": "className" } }, usesInheritance: true, ngImport: i0 }); }
408
414
  }
409
415
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclModalBodyFixedContentDirective, decorators: [{
410
416
  type: Directive,
411
417
  args: [{
412
418
  selector: '[eclModalBodyFixedContent]',
419
+ host: {
420
+ '[class.ecl-modal__body-fixed]': 'className',
421
+ },
413
422
  }]
414
- }], propDecorators: { className: [{
415
- type: HostBinding,
416
- args: ['class.ecl-modal__body-fixed']
417
- }] } });
423
+ }] });
418
424
 
419
425
  /**
420
426
  * Directive used to trigger opening of a target ECL modal on click.
@@ -432,21 +438,21 @@ class EclModalTriggerDirective extends ECLBaseDirective {
432
438
  /**
433
439
  * Handles click event and opens the target modal.
434
440
  */
435
- onClick(evt) {
441
+ onClick() {
436
442
  this.eclModalTriggerFor()?.openModal();
437
443
  }
438
444
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclModalTriggerDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
439
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.2", type: EclModalTriggerDirective, isStandalone: true, selector: "[eclModalTriggerFor]", inputs: { eclModalTriggerFor: { classPropertyName: "eclModalTriggerFor", publicName: "eclModalTriggerFor", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick($event)" } }, usesInheritance: true, ngImport: i0 }); }
445
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.2", type: EclModalTriggerDirective, isStandalone: true, selector: "[eclModalTriggerFor]", inputs: { eclModalTriggerFor: { classPropertyName: "eclModalTriggerFor", publicName: "eclModalTriggerFor", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick()" } }, usesInheritance: true, ngImport: i0 }); }
440
446
  }
441
447
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclModalTriggerDirective, decorators: [{
442
448
  type: Directive,
443
449
  args: [{
444
450
  selector: '[eclModalTriggerFor]',
451
+ host: {
452
+ '(click)': 'onClick()',
453
+ },
445
454
  }]
446
- }], propDecorators: { eclModalTriggerFor: [{ type: i0.Input, args: [{ isSignal: true, alias: "eclModalTriggerFor", required: false }] }], onClick: [{
447
- type: HostListener,
448
- args: ['click', ['$event']]
449
- }] } });
455
+ }], propDecorators: { eclModalTriggerFor: [{ type: i0.Input, args: [{ isSignal: true, alias: "eclModalTriggerFor", required: false }] }] } });
450
456
 
451
457
  const EUI_ECL_MODAL = [
452
458
  EclModalComponent,
@@ -1 +1 @@
1
- {"version":3,"file":"eui-ecl-components-ecl-modal.mjs","sources":["../../components/ecl-modal/ecl-modal-close.directive.ts","../../components/ecl-modal/events/ecl-modal-open.event.ts","../../components/ecl-modal/events/ecl-modal-close.event.ts","../../components/ecl-modal/ecl-modal-header.component.ts","../../components/ecl-modal/ecl-modal-header.component.html","../../components/ecl-modal/ecl-modal-body.component.ts","../../components/ecl-modal/ecl-modal-body.component.html","../../components/ecl-modal/ecl-modal.component.ts","../../components/ecl-modal/ecl-modal.component.html","../../components/ecl-modal/ecl-modal-footer.component.ts","../../components/ecl-modal/ecl-modal-footer.component.html","../../components/ecl-modal/ecl-modal-body-fixed.directive.ts","../../components/ecl-modal/ecl-modal-trigger.directive.ts","../../components/ecl-modal/index.ts","../../components/ecl-modal/eui-ecl-components-ecl-modal.ts"],"sourcesContent":["import { Directive, HostListener, input, output } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive that allows an element to close the modal on click.\n *\n * Can emit a result and indicate the role (e.g., confirm, cancel).\n */\n@Directive({\n selector: '[eclModalClose]',\n})\nexport class EclModalCloseDirective<T> extends ECLBaseDirective {\n /**\n * Optional result value to emit when modal is closed.\n */\n eclModalResult = input<T>(undefined, { alias: 'eclModalClose' });\n \n /**\n * Optional role associated with the modal close action (e.g., confirm, cancel).\n */\n eclModalRole = input<'confirm' | 'cancel' | string>();\n \n /**\n * Event emitted when the element is clicked and the modal should be closed.\n */\n modalClose = output();\n\n /**\n * Handles click events and emits the `modalClose` event.\n */\n @HostListener('click', ['$event'])\n onClick(evt: MouseEvent): void {\n this.modalClose.emit(null);\n }\n}\n","import { EclBaseEvent } from '@eui/ecl/core';\nexport class EclModalOpenEvent extends EclBaseEvent {}","import { EclBaseEvent } from '@eui/ecl/core';\nimport { EclModalResult } from '../models/ecl-modal-result.model';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class EclModalCloseEvent<T = any> extends EclBaseEvent {\n constructor(public eclModalResult?: EclModalResult<T>) {\n super();\n }\n}","import { Component, HostBinding, output, viewChild, inject, signal } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclThemeService } from '@eui/ecl/core';\nimport { EclModalCloseEvent } from './events';\nimport { EclButtonComponent } from '@eui/ecl/components/ecl-button';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { EUI_ECL_BUTTON } from '@eui/ecl/components/ecl-button';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\n\n/**\n * Header component used within the ECL Modal.\n *\n * Displays an icon depending on the modal variant, user-defined content,\n * and a close button that emits a close event.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[eclModalHeader]',\n templateUrl: './ecl-modal-header.component.html',\n imports: [\n ...EUI_ECL_ICON,\n TranslatePipe,\n ...EUI_ECL_BUTTON,\n ],\n})\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class EclModalHeaderComponent<T = any> extends ECLBaseDirective {\n eclThemeService = inject(EclThemeService);\n \n /**\n * Defines the visual variant of the modal.\n * Determines which icon is shown in the header.\n * Possible values: 'information', 'success', 'warning', 'error', or any custom string.\n */\n variant = signal<'information' | 'success' | 'warning' | 'error' | string>(undefined);\n \n /**\n * Event emitted when the close button is clicked.\n * Emits an `EclModalCloseEvent` object.\n */\n modalClose = output<EclModalCloseEvent<T>>();\n \n /**\n * Reference to the close button component.\n */\n closeButton = viewChild.required<EclButtonComponent>('closeButton');\n \n /**\n * Applies the ECL CSS class for modal header container.\n */\n @HostBinding('class')\n get cssClasses(): string {\n return [super.getCssClasses('ecl-modal__header')].join(' ').trim();\n }\n\n /**\n * Handles the click event on the close button.\n * Emits a `modalClose` event with no payload.\n */\n onCloseClick(): void {\n this.modalClose.emit(new EclModalCloseEvent());\n }\n\n /**\n * Returns the name of the icon associated with the current variant.\n * @returns The icon name, or `null` if no matching variant exists.\n */\n getIcon(): 'information' | 'check-filled' | 'warning' | 'error' | null {\n const v = this.variant();\n if (v === 'information') {\n return 'information';\n } else if (v === 'success') {\n return 'check-filled';\n } else if (v === 'warning') {\n return 'warning';\n } else if (v === 'error') {\n return 'error';\n } else {\n return null;\n }\n }\n}\n","<div class=\"ecl-modal__header-content\">\n @if(getIcon()) {\n @if(variant() === 'warning') {\n <span class=\"ecl-modal__icon-background\"></span>\n }\n <ecl-icon [icon]=\"getIcon()\" size=\"l\" class=\"ecl-modal__icon\" [title]=\"variant()\"></ecl-icon>\n }\n <ng-content></ng-content>\n</div>\n<button #closeButton eclButton variant=\"tertiary\" size=\"m\" eclStyle=\"neutral\" isIconOnly class=\"ecl-modal__close\" type=\"button\"\n (click)=\"onCloseClick()\">\n <span eclButtonLabel>{{ 'ecl.common.CLOSE' | translate }}</span>\n <ecl-icon icon=\"close\" size=\"m\"></ecl-icon>\n</button>","import { Component, HostBinding, signal } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\n/**\n * Body component used inside the ECL Modal.\n *\n * Optionally allows scrollable content inside the modal body.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[eclModalBody]',\n templateUrl: './ecl-modal-body.component.html',\n})\nexport class EclModalBodyComponent extends ECLBaseDirective {\n /**\n * Unique ID for the modal body, used for accessibility (`aria-describedby`).\n * This ID is passed from the parent `EclModalComponent`.\n */\n eclModalBodyId = signal<string>('');\n\n /**\n * Applies CSS classes for the modal body and scrollable modifier if enabled.\n */\n @HostBinding('class')\n get cssClasses(): string {\n return [\n super.getCssClasses('ecl-modal__body'),\n 'ecl-modal__body--has-scroll',\n ].join(' ').trim();\n }\n}\n","<div class=\"ecl-modal__body-scroll\" [id]=\"eclModalBodyId()\">\n <ng-content></ng-content>\n</div>\n<div class=\"ecl-modal__body-overflow\" aria-hidden=\"true\"></div>\n<ng-content select=\"[eclModalBodyFixedContent]\"></ng-content>","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n AfterContentInit,\n Component,\n contentChild,\n contentChildren,\n forwardRef,\n HostBinding,\n HostListener,\n input,\n output,\n signal,\n effect,\n inject,\n DOCUMENT,\n PLATFORM_ID,\n} from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclModalCloseDirective } from './ecl-modal-close.directive';\nimport { EclModalHeaderComponent } from './ecl-modal-header.component';\nimport { EclModalResult } from './models/ecl-modal-result.model';\nimport { EclModalCloseEvent } from './events';\nimport { EclModalOpenEvent } from './events';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { uniqueId } from '@eui/core';\nimport { EclModalBodyComponent } from './ecl-modal-body.component';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'dialog[eclModal]',\n templateUrl: './ecl-modal.component.html',\n imports: [A11yModule],\n})\n \nexport class EclModalComponent<T = any> extends ECLBaseDirective implements AfterContentInit {\n /**\n * Defines the visual variant of the modal.\n * Possible values: 'information', 'success', 'warning', 'error', or a custom string.\n */\n variant = input<'information' | 'success' | 'warning' | 'error' | string>();\n \n /**\n * Defines the size of the modal.\n * Possible values: 's', 'm', 'l' (default), 'full'.\n */\n size = input<'s' | 'm' | 'l' | 'full' | string>('l');\n \n /**\n * Unique ID for the modal body.\n * Used for accessibility (`aria-describedby` on the modal container).\n */\n eclModalBodyId = `ecl-modal-body-${uniqueId()}`;\n \n /**\n * Controls whether the modal is open.\n */\n isOpen = signal(false);\n \n /**\n * Emits when the modal is closed.\n * Carries an instance of `EclModalCloseEvent`.\n */\n modalClose = output<EclModalCloseEvent<T>>();\n \n /**\n * Emits when the modal is opened.\n * Carries an instance of `EclModalOpenEvent`.\n */\n modalOpen = output<EclModalOpenEvent>();\n \n /**\n * Header component projected into the modal.\n */\n eclModalHeader = contentChild(forwardRef(() => EclModalHeaderComponent));\n \n /**\n * All close directives projected inside the modal.\n */\n eclModalCloseComponents = contentChildren(forwardRef(() => EclModalCloseDirective), { descendants: true });\n \n /**\n * Body component projected into the modal.\n */\n eclModalBody = contentChild(EclModalBodyComponent);\n\n private previousOverflow = null;\n private readonly document = inject<Document>(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n\n constructor() {\n super();\n effect(() => {\n const header = this.eclModalHeader();\n if (header) {\n header.variant.set(this.variant());\n }\n });\n }\n\n /**\n * Binds the `open` attribute to the modal element.\n * Used by the native `<dialog>` element.\n */\n @HostBinding('attr.open')\n get isModalOpened(): boolean | null {\n return this.isOpen() || null;\n }\n\n /**\n * Binds the `aria-describedby` attribute to the modal element.\n * Connects the dialog with the modal body via its unique ID for accessibility.\n */\n @HostBinding('attr.aria-describedby')\n get hostAriaDescribedBy(): string {\n return this.eclModalBodyId;\n }\n\n /**\n * Applies base and variant CSS classes to the modal element.\n */\n @HostBinding('class')\n get cssClasses(): string {\n return [super.getCssClasses('ecl-modal'),\n this.variant() ? `ecl-modal--${this.variant()}` : '',\n `ecl-modal--${this.size()}`,\n ].join(' ').trim();\n }\n\n /**\n * Handles ESC key press to close the modal with `cancel` role.\n */\n @HostListener('document:keydown.escape')\n onEscapeKeydownHandler(): void {\n this.closeModal({ eclModalRole: 'cancel' });\n }\n\n /**\n * Subscribes to close events from header and close directives after content is initialized.\n */\n ngAfterContentInit(): void {\n const header = this.eclModalHeader();\n if (header) {\n header.variant.set(this.variant());\n header.modalClose.subscribe(() => {\n this.closeModal({ eclModalRole: 'cancel' });\n });\n }\n\n this.eclModalCloseComponents()?.forEach((eclModalCloseCmp) => {\n eclModalCloseCmp.modalClose.subscribe(() => {\n this.closeModal({\n eclModalData: eclModalCloseCmp.eclModalResult(),\n eclModalRole: eclModalCloseCmp.eclModalRole(),\n });\n });\n });\n this.eclModalBody().eclModalBodyId.set(this.eclModalBodyId);\n }\n\n /**\n * Opens the modal and emits a `modalOpen` event.\n * If the event is not prevented, the modal will be displayed.\n */\n openModal(): void {\n const event = new EclModalOpenEvent();\n this.modalOpen.emit(event);\n\n if (!event.defaultPrevented) {\n this.isOpen.set(true);\n }\n const header = this.eclModalHeader();\n if (header) {\n setTimeout(() => header.closeButton().el.nativeElement.focus(), 100);\n }\n // To prevent scrolling in main document\n if (isPlatformBrowser(this.platformId)) {\n this.previousOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n }\n\n /**\n * Closes the modal and emits a `modalClose` event with optional result data.\n * If the event is not prevented, the modal will be hidden.\n */\n closeModal(result?: EclModalResult<T>): void {\n if (this.isOpen()) {\n const event = new EclModalCloseEvent({\n eclModalData: result?.eclModalData,\n eclModalRole: result?.eclModalRole,\n });\n this.modalClose.emit(event);\n\n if (!event.defaultPrevented) {\n this.isOpen.set(false);\n }\n\n if (isPlatformBrowser(this.platformId)) {\n document.body.style.overflow = this.previousOverflow;\n }\n }\n }\n}\n","<div class=\"ecl-modal__container\">\n <div class=\"ecl-modal__content ecl-container\" cdkTrapFocus cdkTrapFocusAutoCapture>\n <ng-content></ng-content>\n </div>\n</div>\n","import { AfterContentInit, Component, contentChildren, forwardRef, HostBinding } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclButtonComponent } from '@eui/ecl/components/ecl-button';\n\n/**\n * Footer component used within the ECL Modal.\n *\n * Automatically applies styling to buttons projected into the footer.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[eclModalFooter]',\n templateUrl: './ecl-modal-footer.component.html',\n})\nexport class EclModalFooterComponent extends ECLBaseDirective implements AfterContentInit {\n /**\n * Queries all button components projected into the footer.\n */\n buttonComponents = contentChildren(forwardRef(() => EclButtonComponent), { descendants: true });\n\n /**\n * Applies the ECL CSS class for modal footer container.\n */\n @HostBinding('class')\n get cssClasses(): string {\n return [super.getCssClasses('ecl-modal__footer')].join(' ').trim();\n }\n\n /**\n * Lifecycle hook that runs after content projection.\n * Applies `ecl-modal__button` class to each projected button component.\n */\n ngAfterContentInit(): void {\n const buttons = this.buttonComponents();\n if (buttons) {\n setTimeout(() => {\n buttons.forEach((btn) => {\n btn.class = 'ecl-modal__button';\n });\n });\n }\n }\n}\n","<div class=\"ecl-modal__footer-content\">\n <ng-content></ng-content>\n</div>\n","import { Directive, HostBinding } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive for styling fixed content inside the modal body.\n *\n * Applies the appropriate CSS class to mark the element as fixed inside the modal body.\n */\n@Directive({\n selector: '[eclModalBodyFixedContent]',\n})\nexport class EclModalBodyFixedContentDirective extends ECLBaseDirective {\n /**\n * Applies the `ecl-modal__body-fixed` class to the host element.\n */\n @HostBinding('class.ecl-modal__body-fixed') className = true;\n}\n","import { Directive, HostListener, input } from '@angular/core';\nimport { EclModalComponent } from './ecl-modal.component';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive used to trigger opening of a target ECL modal on click.\n */\n@Directive({\n selector: '[eclModalTriggerFor]',\n})\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class EclModalTriggerDirective<T = any> extends ECLBaseDirective {\n /**\n * Reference to the modal component that should be opened on click.\n */\n eclModalTriggerFor = input<EclModalComponent<T>>();\n\n /**\n * Handles click event and opens the target modal.\n */\n @HostListener('click', ['$event'])\n onClick(evt: MouseEvent): void {\n this.eclModalTriggerFor()?.openModal();\n }\n}\n","import { EclModalComponent } from './ecl-modal.component';\nimport { EclModalHeaderComponent } from './ecl-modal-header.component';\nimport { EclModalFooterComponent } from './ecl-modal-footer.component';\nimport { EclModalBodyComponent } from './ecl-modal-body.component';\nimport { EclModalBodyFixedContentDirective } from './ecl-modal-body-fixed.directive';\nimport { EclModalTriggerDirective } from './ecl-modal-trigger.directive';\nimport { EclModalCloseDirective } from './ecl-modal-close.directive';\n\nexport * from './ecl-modal.component';\nexport * from './ecl-modal-header.component';\nexport * from './ecl-modal-footer.component';\nexport * from './ecl-modal-body.component';\nexport * from './ecl-modal-body-fixed.directive';\nexport * from './ecl-modal-trigger.directive';\nexport * from './ecl-modal-close.directive';\nexport * from './events/index';\nexport * from './models/ecl-modal-result.model';\n\nexport const EUI_ECL_MODAL = [\n EclModalComponent,\n EclModalHeaderComponent,\n EclModalFooterComponent,\n EclModalBodyComponent,\n EclModalBodyFixedContentDirective,\n EclModalTriggerDirective,\n EclModalCloseDirective,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"eui-ecl-components-ecl-modal.mjs","sources":["../../components/ecl-modal/ecl-modal-close.directive.ts","../../components/ecl-modal/events/ecl-modal-open.event.ts","../../components/ecl-modal/events/ecl-modal-close.event.ts","../../components/ecl-modal/ecl-modal-header.component.ts","../../components/ecl-modal/ecl-modal-header.component.html","../../components/ecl-modal/ecl-modal-body.component.ts","../../components/ecl-modal/ecl-modal-body.component.html","../../components/ecl-modal/ecl-modal.component.ts","../../components/ecl-modal/ecl-modal.component.html","../../components/ecl-modal/ecl-modal-footer.component.ts","../../components/ecl-modal/ecl-modal-footer.component.html","../../components/ecl-modal/ecl-modal-body-fixed.directive.ts","../../components/ecl-modal/ecl-modal-trigger.directive.ts","../../components/ecl-modal/index.ts","../../components/ecl-modal/eui-ecl-components-ecl-modal.ts"],"sourcesContent":["import { Directive, input, output } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive that allows an element to close the modal on click.\n *\n * Can emit a result and indicate the role (e.g., confirm, cancel).\n */\n@Directive({\n selector: '[eclModalClose]',\n host: {\n '(click)': 'onClick()',\n },\n})\nexport class EclModalCloseDirective<T> extends ECLBaseDirective {\n /**\n * Optional result value to emit when modal is closed.\n */\n eclModalResult = input<T>(undefined, { alias: 'eclModalClose' });\n \n /**\n * Optional role associated with the modal close action (e.g., confirm, cancel).\n */\n eclModalRole = input<'confirm' | 'cancel' | string>();\n \n /**\n * Event emitted when the element is clicked and the modal should be closed.\n */\n modalClose = output();\n\n /**\n * Handles click events and emits the `modalClose` event.\n */\n onClick(): void {\n this.modalClose.emit(null);\n }\n}\n","import { EclBaseEvent } from '@eui/ecl/core';\nexport class EclModalOpenEvent extends EclBaseEvent {}","import { EclBaseEvent } from '@eui/ecl/core';\nimport { EclModalResult } from '../models/ecl-modal-result.model';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class EclModalCloseEvent<T = any> extends EclBaseEvent {\n constructor(public eclModalResult?: EclModalResult<T>) {\n super();\n }\n}","import { Component, output, viewChild, computed, inject, forwardRef } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclModalCloseEvent } from './events';\nimport { EclButtonComponent } from '@eui/ecl/components/ecl-button';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { EUI_ECL_BUTTON } from '@eui/ecl/components/ecl-button';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\nimport { EclModalComponent } from './ecl-modal.component';\n\n/**\n * Header component used within the ECL Modal.\n *\n * Displays an icon depending on the modal variant, user-defined content,\n * and a close button that emits a close event.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[eclModalHeader]',\n templateUrl: './ecl-modal-header.component.html',\n imports: [\n ...EUI_ECL_ICON,\n TranslatePipe,\n ...EUI_ECL_BUTTON,\n ],\n host: {\n '[class]': 'cssClasses',\n },\n})\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class EclModalHeaderComponent<T = any> extends ECLBaseDirective {\n /**\n * Reference to the parent modal the header is projected into.\n * Injected with `forwardRef` to avoid a circular module-import issue.\n * A header is only valid inside an `EclModalComponent`, so this is a\n * required injection: using the header outside a modal throws at\n * construction, surfacing the misuse immediately.\n */\n private readonly modal = inject(forwardRef(() => EclModalComponent));\n\n /**\n * Defines the visual variant of the modal.\n * Determines which icon is shown in the header.\n * Derived reactively from the parent modal's `variant` input, so the header\n * icon updates automatically when the parent variant changes at runtime.\n * Possible values: 'information', 'success', 'warning', 'error', or any custom string.\n */\n variant = computed<'information' | 'success' | 'warning' | 'error' | string | undefined>(\n () => this.modal.variant(),\n );\n \n /**\n * Event emitted when the close button is clicked.\n * Emits an `EclModalCloseEvent` object.\n */\n modalClose = output<EclModalCloseEvent<T>>();\n \n /**\n * Reference to the close button component.\n */\n closeButton = viewChild.required<EclButtonComponent>('closeButton');\n \n /**\n * Applies the ECL CSS class for modal header container.\n */\n get cssClasses(): string {\n return [super.getCssClasses('ecl-modal__header')].join(' ').trim();\n }\n\n /**\n * Handles the click event on the close button.\n * Emits a `modalClose` event with no payload.\n */\n onCloseClick(): void {\n this.modalClose.emit(new EclModalCloseEvent());\n }\n\n /**\n * Returns the name of the icon associated with the current variant.\n * @returns The icon name, or `null` if no matching variant exists.\n */\n getIcon(): 'information' | 'check-filled' | 'warning' | 'error' | null {\n const v = this.variant();\n if (v === 'information') {\n return 'information';\n } else if (v === 'success') {\n return 'check-filled';\n } else if (v === 'warning') {\n return 'warning';\n } else if (v === 'error') {\n return 'error';\n } else {\n return null;\n }\n }\n}\n","<div class=\"ecl-modal__header-content\">\n @if(getIcon()) {\n @if(variant() === 'warning') {\n <span class=\"ecl-modal__icon-background\"></span>\n }\n <ecl-icon [icon]=\"getIcon()\" size=\"l\" class=\"ecl-modal__icon\" [title]=\"variant()\"></ecl-icon>\n }\n <ng-content></ng-content>\n</div>\n<button #closeButton eclButton variant=\"tertiary\" size=\"m\" eclStyle=\"neutral\" isIconOnly class=\"ecl-modal__close\" type=\"button\"\n (click)=\"onCloseClick()\">\n <span eclButtonLabel>{{ 'ecl.common.CLOSE' | translate }}</span>\n <ecl-icon icon=\"close\" size=\"m\"></ecl-icon>\n</button>","import { Component, signal } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Body component used inside the ECL Modal.\n *\n * Optionally allows scrollable content inside the modal body.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[eclModalBody]',\n templateUrl: './ecl-modal-body.component.html',\n host: {\n '[class]': 'cssClasses',\n },\n})\nexport class EclModalBodyComponent extends ECLBaseDirective {\n /**\n * Unique ID for the modal body, used for accessibility (`aria-describedby`).\n * This ID is passed from the parent `EclModalComponent`.\n */\n eclModalBodyId = signal<string>('');\n\n /**\n * Applies CSS classes for the modal body and scrollable modifier if enabled.\n */\n get cssClasses(): string {\n return [\n super.getCssClasses('ecl-modal__body'),\n 'ecl-modal__body--has-scroll',\n ].join(' ').trim();\n }\n}\n","<div class=\"ecl-modal__body-scroll\" [id]=\"eclModalBodyId()\">\n <ng-content></ng-content>\n</div>\n<div class=\"ecl-modal__body-overflow\" aria-hidden=\"true\"></div>\n<ng-content select=\"[eclModalBodyFixedContent]\"></ng-content>","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n AfterContentInit,\n Component,\n contentChild,\n contentChildren,\n forwardRef,\n input,\n output,\n signal,\n inject,\n DOCUMENT,\n PLATFORM_ID,\n} from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclModalCloseDirective } from './ecl-modal-close.directive';\nimport { EclModalHeaderComponent } from './ecl-modal-header.component';\nimport { EclModalResult } from './models/ecl-modal-result.model';\nimport { EclModalCloseEvent } from './events';\nimport { EclModalOpenEvent } from './events';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { uniqueId } from '@eui/core';\nimport { EclModalBodyComponent } from './ecl-modal-body.component';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'dialog[eclModal]',\n templateUrl: './ecl-modal.component.html',\n imports: [A11yModule],\n host: {\n '[attr.open]': 'isModalOpened',\n '[attr.aria-describedby]': 'hostAriaDescribedBy',\n '[class]': 'cssClasses',\n '(document:keydown.escape)': 'onEscapeKeydownHandler()',\n },\n})\n \nexport class EclModalComponent<T = any> extends ECLBaseDirective implements AfterContentInit {\n /**\n * Defines the visual variant of the modal.\n * Possible values: 'information', 'success', 'warning', 'error', or a custom string.\n */\n variant = input<'information' | 'success' | 'warning' | 'error' | string>();\n \n /**\n * Defines the size of the modal.\n * Possible values: 's', 'm', 'l' (default), 'full'.\n */\n size = input<'s' | 'm' | 'l' | 'full' | string>('l');\n \n /**\n * Unique ID for the modal body.\n * Used for accessibility (`aria-describedby` on the modal container).\n */\n eclModalBodyId = `ecl-modal-body-${uniqueId()}`;\n \n /**\n * Controls whether the modal is open.\n */\n isOpen = signal(false);\n \n /**\n * Emits when the modal is closed.\n * Carries an instance of `EclModalCloseEvent`.\n */\n modalClose = output<EclModalCloseEvent<T>>();\n \n /**\n * Emits when the modal is opened.\n * Carries an instance of `EclModalOpenEvent`.\n */\n modalOpen = output<EclModalOpenEvent>();\n \n /**\n * Header component projected into the modal.\n */\n eclModalHeader = contentChild(forwardRef(() => EclModalHeaderComponent));\n \n /**\n * All close directives projected inside the modal.\n */\n eclModalCloseComponents = contentChildren(forwardRef(() => EclModalCloseDirective), { descendants: true });\n \n /**\n * Body component projected into the modal.\n */\n eclModalBody = contentChild(EclModalBodyComponent);\n\n private previousOverflow = '';\n private readonly document = inject<Document>(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n\n /**\n * Wires the projected header and close directives, and passes the body id to\n * the projected body, once content is initialized. The projected content is\n * static for the modal's lifetime, so a one-time setup is sufficient.\n */\n ngAfterContentInit(): void {\n // The header derives its own `variant` reactively from this modal, so no\n // manual sync is needed here. We only wire the close event.\n const header = this.eclModalHeader();\n if (header) {\n header.modalClose.subscribe(() => {\n this.closeModal({ eclModalRole: 'cancel' });\n });\n }\n\n // Wire every projected close directive to close the modal with its\n // configured role and result. `modalClose` is an `output()`, so its\n // subscription is cleaned up automatically when this component is destroyed.\n this.eclModalCloseComponents().forEach((closeCmp) => {\n closeCmp.modalClose.subscribe(() => {\n this.closeModal({\n eclModalData: closeCmp.eclModalResult(),\n eclModalRole: closeCmp.eclModalRole(),\n });\n });\n });\n\n // Pass the modal body id to the projected body for aria-describedby wiring.\n this.eclModalBody()?.eclModalBodyId.set(this.eclModalBodyId);\n }\n\n /**\n * Binds the `open` attribute to the modal element.\n * Used by the native `<dialog>` element.\n */\n get isModalOpened(): boolean | null {\n return this.isOpen() || null;\n }\n\n /**\n * Binds the `aria-describedby` attribute to the modal element.\n * Connects the dialog with the modal body via its unique ID for accessibility.\n */\n get hostAriaDescribedBy(): string {\n return this.eclModalBodyId;\n }\n\n /**\n * Applies base and variant CSS classes to the modal element.\n */\n get cssClasses(): string {\n return [super.getCssClasses('ecl-modal'),\n this.variant() ? `ecl-modal--${this.variant()}` : '',\n `ecl-modal--${this.size()}`,\n ].join(' ').trim();\n }\n\n /**\n * Handles ESC key press to close the modal with `cancel` role.\n */\n onEscapeKeydownHandler(): void {\n this.closeModal({ eclModalRole: 'cancel' });\n }\n\n /**\n * Opens the modal and emits a `modalOpen` event.\n * If the event is not prevented, the modal will be displayed.\n */\n openModal(): void {\n // Ignore repeated open calls so the saved overflow value is not overwritten\n // with the already-hidden value while the modal is open.\n if (this.isOpen()) {\n return;\n }\n\n const event = new EclModalOpenEvent();\n this.modalOpen.emit(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n this.isOpen.set(true);\n\n const header = this.eclModalHeader();\n if (header) {\n setTimeout(() => header.closeButton().el.nativeElement.focus(), 100);\n }\n // To prevent scrolling in main document\n if (isPlatformBrowser(this.platformId)) {\n this.previousOverflow = this.document.body.style.overflow;\n this.document.body.style.overflow = 'hidden';\n }\n }\n\n /**\n * Closes the modal and emits a `modalClose` event with optional result data.\n * If the event is not prevented, the modal will be hidden.\n */\n closeModal(result?: EclModalResult<T>): void {\n if (this.isOpen()) {\n const event = new EclModalCloseEvent({\n eclModalData: result?.eclModalData,\n eclModalRole: result?.eclModalRole,\n });\n this.modalClose.emit(event);\n\n if (!event.defaultPrevented) {\n this.isOpen.set(false);\n }\n\n if (isPlatformBrowser(this.platformId)) {\n this.document.body.style.overflow = this.previousOverflow;\n }\n }\n }\n}\n","<div class=\"ecl-modal__container\">\n <div class=\"ecl-modal__content ecl-container\" cdkTrapFocus cdkTrapFocusAutoCapture>\n <ng-content></ng-content>\n </div>\n</div>\n","import { AfterContentInit, Component, contentChildren, forwardRef } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclButtonComponent } from '@eui/ecl/components/ecl-button';\n\n/**\n * Footer component used within the ECL Modal.\n *\n * Automatically applies styling to buttons projected into the footer.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[eclModalFooter]',\n templateUrl: './ecl-modal-footer.component.html',\n host: {\n '[class]': 'cssClasses',\n },\n})\nexport class EclModalFooterComponent extends ECLBaseDirective implements AfterContentInit {\n /**\n * Queries all button components projected into the footer.\n */\n buttonComponents = contentChildren(forwardRef(() => EclButtonComponent), { descendants: true });\n\n /**\n * Applies the ECL CSS class for modal footer container.\n */\n get cssClasses(): string {\n return [super.getCssClasses('ecl-modal__footer')].join(' ').trim();\n }\n\n /**\n * Lifecycle hook that runs after content projection.\n * Applies `ecl-modal__button` class to each projected button component.\n */\n ngAfterContentInit(): void {\n const buttons = this.buttonComponents();\n if (buttons) {\n setTimeout(() => {\n buttons.forEach((btn) => {\n btn.class = 'ecl-modal__button';\n });\n });\n }\n }\n}\n","<div class=\"ecl-modal__footer-content\">\n <ng-content></ng-content>\n</div>\n","import { Directive } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive for styling fixed content inside the modal body.\n *\n * Applies the appropriate CSS class to mark the element as fixed inside the modal body.\n */\n@Directive({\n selector: '[eclModalBodyFixedContent]',\n host: {\n '[class.ecl-modal__body-fixed]': 'className',\n },\n})\nexport class EclModalBodyFixedContentDirective extends ECLBaseDirective {\n /**\n * Applies the `ecl-modal__body-fixed` class to the host element.\n */\n className = true;\n}\n","import { Directive, input } from '@angular/core';\nimport { EclModalComponent } from './ecl-modal.component';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive used to trigger opening of a target ECL modal on click.\n */\n@Directive({\n selector: '[eclModalTriggerFor]',\n host: {\n '(click)': 'onClick()',\n },\n})\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class EclModalTriggerDirective<T = any> extends ECLBaseDirective {\n /**\n * Reference to the modal component that should be opened on click.\n */\n eclModalTriggerFor = input<EclModalComponent<T>>();\n\n /**\n * Handles click event and opens the target modal.\n */\n onClick(): void {\n this.eclModalTriggerFor()?.openModal();\n }\n}\n","import { EclModalComponent } from './ecl-modal.component';\nimport { EclModalHeaderComponent } from './ecl-modal-header.component';\nimport { EclModalFooterComponent } from './ecl-modal-footer.component';\nimport { EclModalBodyComponent } from './ecl-modal-body.component';\nimport { EclModalBodyFixedContentDirective } from './ecl-modal-body-fixed.directive';\nimport { EclModalTriggerDirective } from './ecl-modal-trigger.directive';\nimport { EclModalCloseDirective } from './ecl-modal-close.directive';\n\nexport * from './ecl-modal.component';\nexport * from './ecl-modal-header.component';\nexport * from './ecl-modal-footer.component';\nexport * from './ecl-modal-body.component';\nexport * from './ecl-modal-body-fixed.directive';\nexport * from './ecl-modal-trigger.directive';\nexport * from './ecl-modal-close.directive';\nexport * from './events/index';\nexport * from './models/ecl-modal-result.model';\n\nexport const EUI_ECL_MODAL = [\n EclModalComponent,\n EclModalHeaderComponent,\n EclModalFooterComponent,\n EclModalBodyComponent,\n EclModalBodyFixedContentDirective,\n EclModalTriggerDirective,\n EclModalCloseDirective,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
@@ -156,12 +156,12 @@ class EclSiteFooterRowCommonComponent extends ECLBaseDirective {
156
156
  return logoLanguageCode(this.languageCode());
157
157
  }
158
158
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclSiteFooterRowCommonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
159
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EclSiteFooterRowCommonComponent, isStandalone: true, selector: "div[eclSiteFooterRowCommon]", inputs: { languageCode: { classPropertyName: "languageCode", publicName: "languageCode", isSignal: true, isRequired: false, transformFunction: null }, a11yStatementRef: { classPropertyName: "a11yStatementRef", publicName: "a11yStatementRef", isSignal: true, isRequired: false, transformFunction: null }, isCore: { classPropertyName: "isCore", publicName: "isCore", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "this.cssClasses" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"ecl-site-footer__section ecl-site-footer__section--common\">\n @if (!isCore()) {\n <a href=\"https://commission.europa.eu/index_{{languageCode()}}\"\n class=\"ecl-link ecl-link--standalone ecl-link--inverted ecl-site-footer__logo-link\">\n <picture class=\"ecl-picture ecl-site-footer__picture\"><img class=\"ecl-site-footer__logo-image\"\n src=\"assets/images/ecl/logo/ec/negative/logo-ec--{{logoLanguageCode}}.svg\" alt=\"European Commission\">\n </picture>\n </a>\n <div class=\"ecl-site-footer__extra-links-container\">\n <ecl-social-media-follow description=\"{{'ecl.footer.FOLLOW-EUROPEAN-COMMISSION' | translate}}\"\n class=\"ecl-social-media-follow--description_inline ecl-site-footer__social-media\">\n <ecl-social-media-follow-item icon=\"mastodon\" href=\"https://ec.social-network.europa.eu/@EUCommission\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"linkedin\" href=\"https://www.linkedin.com/company/european-commission\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"bluesky\" href=\"https://bsky.app/profile/ec.europa.eu\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"facebook\" href=\"https://www.facebook.com/EuropeanCommission\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"youtube\" href=\"https://www.youtube.com/user/eutube\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"chain\"\n href=\"https://european-union.europa.eu/contact-eu/social-media-channels_{{languageCode()}}\"\n isInverted></ecl-social-media-follow-item>\n </ecl-social-media-follow>\n <ul eclSiteFooterList isInline>\n <li eclSiteFooterListItem><a\n href=\"https://commission.europa.eu/about-european-commission/contact_{{languageCode()}}\"\n class=\"ecl-link ecl-link--standalone ecl-link--inverted ecl-site-footer__link\">{{ 'ecl.footer.CONTACT' | translate }}</a></li>\n </ul>\n </div>\n } @else {\n <ecl-social-media-follow description=\"{{'ecl.footer.FOLLOW-US' | translate}}\"\n class=\"ecl-social-media-follow--description_inline ecl-site-footer__social-media\">\n <ecl-social-media-follow-item icon=\"mastodon\" href=\"https://ec.social-network.europa.eu/@EUCommission\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"linkedin\" href=\"https://www.linkedin.com/company/european-commission\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"bluesky\" href=\"https://bsky.app/profile/ec.europa.eu\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"facebook\" href=\"https://www.facebook.com/EuropeanCommission\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"youtube\" href=\"https://www.youtube.com/user/eutube\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"chain\"\n href=\"https://european-union.europa.eu/contact-eu/social-media-channels_{{languageCode()}}\"\n isInverted></ecl-social-media-follow-item>\n </ecl-social-media-follow>\n }\n <ul eclSiteFooterList isInline>\n <li eclSiteFooterListItem><a\n href=\"https://commission.europa.eu/legal-notice/vulnerability-disclosure-policy_{{languageCode()}}\"\n eclLink isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.REPORT-IT-VULNERABILITY' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/languages-our-websites_{{languageCode()}}\" eclLink\n isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.LANGUAGES' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/cookies_{{languageCode()}}\" eclLink isInverted\n variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.COOKIES' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/privacy-policy_{{languageCode()}}\" eclLink\n isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.PRIVACY-POLICY' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/legal-notice_{{languageCode()}}\" eclLink\n isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.LEGAL-NOTICE' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"{{ a11yStatementRef() }}\"\n eclLink isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.ACCESSIBILITY' | translate }}</a></li>\n </ul>\n</div>", styles: [".ecl-link--inverted svg.ecl-social-media-follow__icon{fill:#000;color:#000;filter:invert(1)}\n"], dependencies: [{ kind: "directive", type: i1.EclLinkDirective, selector: "[eclLink]", inputs: ["extraAttributes", "isInverted", "isIconOnly", "isHighlight", "isNoVisited", "isBranded", "variant"] }, { kind: "component", type: i2.EclSocialMediaFollowComponent, selector: "ecl-social-media-follow", inputs: ["description", "isVertical", "horizontalAlignment"] }, { kind: "component", type: i2.EclSocialMediaFollowItemComponent, selector: "ecl-social-media-follow-item", inputs: ["isInverted", "icon", "iconSet", "href", "routerLink", "target", "size", "extraAttributes"], outputs: ["itemClick"] }, { kind: "directive", type: EclSiteFooterListItemDirective, selector: "[eclSiteFooterListItem]" }, { kind: "directive", type: EclSiteFooterLinkDirective, selector: "[eclSiteFooterLink]" }, { kind: "directive", type: EclSiteFooterListDirective, selector: "[eclSiteFooterList]", inputs: ["isInline"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
159
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EclSiteFooterRowCommonComponent, isStandalone: true, selector: "div[eclSiteFooterRowCommon]", inputs: { languageCode: { classPropertyName: "languageCode", publicName: "languageCode", isSignal: true, isRequired: false, transformFunction: null }, a11yStatementRef: { classPropertyName: "a11yStatementRef", publicName: "a11yStatementRef", isSignal: true, isRequired: false, transformFunction: null }, isCore: { classPropertyName: "isCore", publicName: "isCore", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "this.cssClasses" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"ecl-site-footer__section ecl-site-footer__section--common\">\n @if (!isCore()) {\n <a href=\"https://commission.europa.eu/index_{{languageCode()}}\"\n class=\"ecl-link ecl-link--standalone ecl-link--inverted ecl-site-footer__logo-link\">\n <picture class=\"ecl-picture ecl-site-footer__picture\"><img class=\"ecl-site-footer__logo-image\"\n src=\"assets/images/ecl/logo/ec/negative/logo-ec--{{logoLanguageCode}}.svg\" alt=\"European Commission\">\n </picture>\n </a>\n <div class=\"ecl-site-footer__extra-links-container\">\n <ecl-social-media-follow isIconOnly description=\"{{'ecl.footer.FOLLOW-EUROPEAN-COMMISSION' | translate}}\"\n class=\"ecl-social-media-follow--description_inline ecl-site-footer__social-media\">\n <ecl-social-media-follow-item icon=\"mastodon\" href=\"https://ec.social-network.europa.eu/@EUCommission\"\n isInverted>Mastodon</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"linkedin\" href=\"https://www.linkedin.com/company/european-commission\"\n isInverted>LinkedIn</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"bluesky\" href=\"https://bsky.app/profile/ec.europa.eu\"\n isInverted>Bluesky</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"facebook\" href=\"https://www.facebook.com/EuropeanCommission\"\n isInverted>Facebook</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"youtube\" href=\"https://www.youtube.com/user/eutube\"\n isInverted>YouTube</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"chain\"\n href=\"https://european-union.europa.eu/contact-eu/social-media-channels_{{languageCode()}}\"\n isInverted>Other</ecl-social-media-follow-item>\n </ecl-social-media-follow>\n <ul eclSiteFooterList isInline>\n <li eclSiteFooterListItem><a\n href=\"https://commission.europa.eu/about-european-commission/contact_{{languageCode()}}\"\n class=\"ecl-link ecl-link--standalone ecl-link--inverted ecl-site-footer__link\">{{ 'ecl.footer.CONTACT' | translate }}</a></li>\n </ul>\n </div>\n } @else {\n <ecl-social-media-follow isIconOnly description=\"{{'ecl.footer.FOLLOW-US' | translate}}\"\n class=\"ecl-social-media-follow--description_inline ecl-site-footer__social-media\">\n <ecl-social-media-follow-item icon=\"mastodon\" href=\"https://ec.social-network.europa.eu/@EUCommission\"\n isInverted>Mastodon</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"linkedin\" href=\"https://www.linkedin.com/company/european-commission\"\n isInverted>LinkedIn</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"bluesky\" href=\"https://bsky.app/profile/ec.europa.eu\"\n isInverted>Bluesky</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"facebook\" href=\"https://www.facebook.com/EuropeanCommission\"\n isInverted>Facebook</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"youtube\" href=\"https://www.youtube.com/user/eutube\"\n isInverted>YouTube</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"chain\"\n href=\"https://european-union.europa.eu/contact-eu/social-media-channels_{{languageCode()}}\"\n isInverted>Other</ecl-social-media-follow-item>\n </ecl-social-media-follow>\n }\n <ul eclSiteFooterList isInline>\n <li eclSiteFooterListItem><a\n href=\"https://commission.europa.eu/legal-notice/vulnerability-disclosure-policy_{{languageCode()}}\"\n eclLink isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.REPORT-IT-VULNERABILITY' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/languages-our-websites_{{languageCode()}}\" eclLink\n isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.LANGUAGES' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/cookies_{{languageCode()}}\" eclLink isInverted\n variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.COOKIES' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/privacy-policy_{{languageCode()}}\" eclLink\n isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.PRIVACY-POLICY' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/legal-notice_{{languageCode()}}\" eclLink\n isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.LEGAL-NOTICE' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"{{ a11yStatementRef() }}\"\n eclLink isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.ACCESSIBILITY' | translate }}</a></li>\n </ul>\n</div>\n", styles: [".ecl-link--inverted svg.ecl-social-media-follow__icon{fill:#000;color:#000;filter:invert(1)}\n"], dependencies: [{ kind: "directive", type: i1.EclLinkDirective, selector: "[eclLink]", inputs: ["extraAttributes", "isInverted", "isIconOnly", "isHighlight", "isNoVisited", "isBranded", "variant"] }, { kind: "component", type: i2.EclSocialMediaFollowComponent, selector: "ecl-social-media-follow", inputs: ["description", "isIconOnly", "isVertical", "horizontalAlignment"] }, { kind: "component", type: i2.EclSocialMediaFollowItemComponent, selector: "ecl-social-media-follow-item", inputs: ["isInverted", "icon", "iconSet", "href", "routerLink", "target", "size", "extraAttributes"], outputs: ["itemClick"] }, { kind: "directive", type: EclSiteFooterListItemDirective, selector: "[eclSiteFooterListItem]" }, { kind: "directive", type: EclSiteFooterLinkDirective, selector: "[eclSiteFooterLink]" }, { kind: "directive", type: EclSiteFooterListDirective, selector: "[eclSiteFooterList]", inputs: ["isInline"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
160
160
  }
161
161
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclSiteFooterRowCommonComponent, decorators: [{
162
162
  type: Component,
163
163
  args: [{ selector: 'div[eclSiteFooterRowCommon]', encapsulation: ViewEncapsulation.None, imports: [TranslatePipe, ...EUI_ECL_LINK, ...EUI_ECL_SOCIAL_MEDIA_FOLLOW, EclSiteFooterListItemDirective,
164
- EclSiteFooterLinkDirective, EclSiteFooterListDirective], template: "<div class=\"ecl-site-footer__section ecl-site-footer__section--common\">\n @if (!isCore()) {\n <a href=\"https://commission.europa.eu/index_{{languageCode()}}\"\n class=\"ecl-link ecl-link--standalone ecl-link--inverted ecl-site-footer__logo-link\">\n <picture class=\"ecl-picture ecl-site-footer__picture\"><img class=\"ecl-site-footer__logo-image\"\n src=\"assets/images/ecl/logo/ec/negative/logo-ec--{{logoLanguageCode}}.svg\" alt=\"European Commission\">\n </picture>\n </a>\n <div class=\"ecl-site-footer__extra-links-container\">\n <ecl-social-media-follow description=\"{{'ecl.footer.FOLLOW-EUROPEAN-COMMISSION' | translate}}\"\n class=\"ecl-social-media-follow--description_inline ecl-site-footer__social-media\">\n <ecl-social-media-follow-item icon=\"mastodon\" href=\"https://ec.social-network.europa.eu/@EUCommission\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"linkedin\" href=\"https://www.linkedin.com/company/european-commission\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"bluesky\" href=\"https://bsky.app/profile/ec.europa.eu\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"facebook\" href=\"https://www.facebook.com/EuropeanCommission\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"youtube\" href=\"https://www.youtube.com/user/eutube\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"chain\"\n href=\"https://european-union.europa.eu/contact-eu/social-media-channels_{{languageCode()}}\"\n isInverted></ecl-social-media-follow-item>\n </ecl-social-media-follow>\n <ul eclSiteFooterList isInline>\n <li eclSiteFooterListItem><a\n href=\"https://commission.europa.eu/about-european-commission/contact_{{languageCode()}}\"\n class=\"ecl-link ecl-link--standalone ecl-link--inverted ecl-site-footer__link\">{{ 'ecl.footer.CONTACT' | translate }}</a></li>\n </ul>\n </div>\n } @else {\n <ecl-social-media-follow description=\"{{'ecl.footer.FOLLOW-US' | translate}}\"\n class=\"ecl-social-media-follow--description_inline ecl-site-footer__social-media\">\n <ecl-social-media-follow-item icon=\"mastodon\" href=\"https://ec.social-network.europa.eu/@EUCommission\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"linkedin\" href=\"https://www.linkedin.com/company/european-commission\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"bluesky\" href=\"https://bsky.app/profile/ec.europa.eu\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"facebook\" href=\"https://www.facebook.com/EuropeanCommission\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"youtube\" href=\"https://www.youtube.com/user/eutube\"\n isInverted></ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"chain\"\n href=\"https://european-union.europa.eu/contact-eu/social-media-channels_{{languageCode()}}\"\n isInverted></ecl-social-media-follow-item>\n </ecl-social-media-follow>\n }\n <ul eclSiteFooterList isInline>\n <li eclSiteFooterListItem><a\n href=\"https://commission.europa.eu/legal-notice/vulnerability-disclosure-policy_{{languageCode()}}\"\n eclLink isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.REPORT-IT-VULNERABILITY' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/languages-our-websites_{{languageCode()}}\" eclLink\n isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.LANGUAGES' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/cookies_{{languageCode()}}\" eclLink isInverted\n variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.COOKIES' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/privacy-policy_{{languageCode()}}\" eclLink\n isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.PRIVACY-POLICY' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/legal-notice_{{languageCode()}}\" eclLink\n isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.LEGAL-NOTICE' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"{{ a11yStatementRef() }}\"\n eclLink isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.ACCESSIBILITY' | translate }}</a></li>\n </ul>\n</div>", styles: [".ecl-link--inverted svg.ecl-social-media-follow__icon{fill:#000;color:#000;filter:invert(1)}\n"] }]
164
+ EclSiteFooterLinkDirective, EclSiteFooterListDirective], template: "<div class=\"ecl-site-footer__section ecl-site-footer__section--common\">\n @if (!isCore()) {\n <a href=\"https://commission.europa.eu/index_{{languageCode()}}\"\n class=\"ecl-link ecl-link--standalone ecl-link--inverted ecl-site-footer__logo-link\">\n <picture class=\"ecl-picture ecl-site-footer__picture\"><img class=\"ecl-site-footer__logo-image\"\n src=\"assets/images/ecl/logo/ec/negative/logo-ec--{{logoLanguageCode}}.svg\" alt=\"European Commission\">\n </picture>\n </a>\n <div class=\"ecl-site-footer__extra-links-container\">\n <ecl-social-media-follow isIconOnly description=\"{{'ecl.footer.FOLLOW-EUROPEAN-COMMISSION' | translate}}\"\n class=\"ecl-social-media-follow--description_inline ecl-site-footer__social-media\">\n <ecl-social-media-follow-item icon=\"mastodon\" href=\"https://ec.social-network.europa.eu/@EUCommission\"\n isInverted>Mastodon</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"linkedin\" href=\"https://www.linkedin.com/company/european-commission\"\n isInverted>LinkedIn</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"bluesky\" href=\"https://bsky.app/profile/ec.europa.eu\"\n isInverted>Bluesky</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"facebook\" href=\"https://www.facebook.com/EuropeanCommission\"\n isInverted>Facebook</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"youtube\" href=\"https://www.youtube.com/user/eutube\"\n isInverted>YouTube</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"chain\"\n href=\"https://european-union.europa.eu/contact-eu/social-media-channels_{{languageCode()}}\"\n isInverted>Other</ecl-social-media-follow-item>\n </ecl-social-media-follow>\n <ul eclSiteFooterList isInline>\n <li eclSiteFooterListItem><a\n href=\"https://commission.europa.eu/about-european-commission/contact_{{languageCode()}}\"\n class=\"ecl-link ecl-link--standalone ecl-link--inverted ecl-site-footer__link\">{{ 'ecl.footer.CONTACT' | translate }}</a></li>\n </ul>\n </div>\n } @else {\n <ecl-social-media-follow isIconOnly description=\"{{'ecl.footer.FOLLOW-US' | translate}}\"\n class=\"ecl-social-media-follow--description_inline ecl-site-footer__social-media\">\n <ecl-social-media-follow-item icon=\"mastodon\" href=\"https://ec.social-network.europa.eu/@EUCommission\"\n isInverted>Mastodon</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"linkedin\" href=\"https://www.linkedin.com/company/european-commission\"\n isInverted>LinkedIn</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"bluesky\" href=\"https://bsky.app/profile/ec.europa.eu\"\n isInverted>Bluesky</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"facebook\" href=\"https://www.facebook.com/EuropeanCommission\"\n isInverted>Facebook</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"youtube\" href=\"https://www.youtube.com/user/eutube\"\n isInverted>YouTube</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"chain\"\n href=\"https://european-union.europa.eu/contact-eu/social-media-channels_{{languageCode()}}\"\n isInverted>Other</ecl-social-media-follow-item>\n </ecl-social-media-follow>\n }\n <ul eclSiteFooterList isInline>\n <li eclSiteFooterListItem><a\n href=\"https://commission.europa.eu/legal-notice/vulnerability-disclosure-policy_{{languageCode()}}\"\n eclLink isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.REPORT-IT-VULNERABILITY' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/languages-our-websites_{{languageCode()}}\" eclLink\n isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.LANGUAGES' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/cookies_{{languageCode()}}\" eclLink isInverted\n variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.COOKIES' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/privacy-policy_{{languageCode()}}\" eclLink\n isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.PRIVACY-POLICY' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/legal-notice_{{languageCode()}}\" eclLink\n isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.LEGAL-NOTICE' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"{{ a11yStatementRef() }}\"\n eclLink isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.ACCESSIBILITY' | translate }}</a></li>\n </ul>\n</div>\n", styles: [".ecl-link--inverted svg.ecl-social-media-follow__icon{fill:#000;color:#000;filter:invert(1)}\n"] }]
165
165
  }], propDecorators: { languageCode: [{ type: i0.Input, args: [{ isSignal: true, alias: "languageCode", required: false }] }], a11yStatementRef: [{ type: i0.Input, args: [{ isSignal: true, alias: "a11yStatementRef", required: false }] }], isCore: [{ type: i0.Input, args: [{ isSignal: true, alias: "isCore", required: false }] }], cssClasses: [{
166
166
  type: HostBinding,
167
167
  args: ['class']