@eui/ecl 21.0.0-alpha.17 → 21.0.0-alpha.19

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.
@@ -121,7 +121,7 @@
121
121
  </ol>
122
122
  <ul class="properties-list">
123
123
  <li>
124
- <b>Version</b> : 21.0.0-alpha.17</li>
124
+ <b>Version</b> : 21.0.0-alpha.19</li>
125
125
  </ul>
126
126
 
127
127
 
@@ -1,6 +1,6 @@
1
1
  import { BreakpointObserver } from '@angular/cdk/layout';
2
2
  import * as i0 from '@angular/core';
3
- import { HostBinding, Directive, inject, ElementRef, Renderer2, afterNextRender, booleanAttribute, ViewChild, ContentChild, forwardRef, ContentChildren, Input, Component, NgModule } from '@angular/core';
3
+ import { HostBinding, Directive, inject, ElementRef, Renderer2, afterNextRender, booleanAttribute, HostListener, ViewChild, ContentChild, forwardRef, ContentChildren, Input, Component, NgModule } from '@angular/core';
4
4
  import { Subject, takeUntil, delay } from 'rxjs';
5
5
  import { ECLBaseDirective } from '@eui/ecl/core';
6
6
  import { EclLinkDirective } from '@eui/ecl/components/ecl-link';
@@ -212,6 +212,9 @@ class EclBannerComponent extends ECLBaseDirective {
212
212
  this.onVideoPlay();
213
213
  setTimeout(() => this.pauseBtn.onFocus());
214
214
  }
215
+ onWindowResize() {
216
+ this.observeElementSizeChanges();
217
+ }
215
218
  /**
216
219
  * Handles keyboard activation (Enter key) to pause video.
217
220
  * Moves focus to play button after pausing.
@@ -237,11 +240,11 @@ class EclBannerComponent extends ECLBaseDirective {
237
240
  videoEl.pause();
238
241
  }
239
242
  observeElementSizeChanges() {
240
- new ResizeObserver(() => {
241
- setTimeout(() => {
242
- this.checkViewport();
243
- }, this.TIMEOUT_INTERVAL);
244
- }).observe(this.bannerContainer.nativeElement);
243
+ // new ResizeObserver(() => { // Removing this for now , because it is causing problems (infinite loop). Observing window:resize.
244
+ setTimeout(() => {
245
+ this.checkViewport();
246
+ }, this.TIMEOUT_INTERVAL);
247
+ // }).observe(this.bannerContainer.nativeElement);
245
248
  }
246
249
  checkViewport() {
247
250
  if (window.innerWidth > this.breakpoint) {
@@ -287,7 +290,8 @@ class EclBannerComponent extends ECLBaseDirective {
287
290
  // Add margin to the banner container when there is a footer
288
291
  // This is needed to keep the vertical alignment
289
292
  if (this.bannerFooter) {
290
- this.renderer.setStyle(this.el.nativeElement, '--banner-footer-height', `${this.bannerFooter.nativeElement.offsetHeight}px`);
293
+ this.bannerFooterHeight = this.bannerFooter.nativeElement.offsetHeight;
294
+ // this.renderer.setStyle(this.el.nativeElement, '--banner-footer-height', `${this.bannerFooter.nativeElement.offsetHeight}px`);
291
295
  }
292
296
  }
293
297
  resetBannerHeight() {
@@ -297,8 +301,9 @@ class EclBannerComponent extends ECLBaseDirective {
297
301
  this.renderer.setStyle(this.el.nativeElement, 'height', 'auto');
298
302
  // update footer height if bannerFooter exists
299
303
  if (this.bannerFooter) {
300
- const footerHeight = `${this.bannerFooter.nativeElement.offsetHeight}px`;
301
- this.renderer.setStyle(this.el.nativeElement, '--banner-footer-height', footerHeight);
304
+ // const footerHeight = `${this.bannerFooter.nativeElement.offsetHeight}px`;
305
+ this.bannerFooterHeight = this.bannerFooter.nativeElement.offsetHeight;
306
+ // this.renderer.setStyle(this.el.nativeElement, '--banner-footer-height', footerHeight);
302
307
  }
303
308
  }
304
309
  getDefaultRatio() {
@@ -331,7 +336,7 @@ class EclBannerComponent extends ECLBaseDirective {
331
336
  });
332
337
  }
333
338
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0-next.3", ngImport: i0, type: EclBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
334
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0-next.3", type: EclBannerComponent, isStandalone: true, selector: "ecl-banner", inputs: { eclSize: "eclSize", fontColor: "fontColor", fontSize: "fontSize", boxBackground: "boxBackground", horizontalAlignment: "horizontalAlignment", verticalAlignment: "verticalAlignment", copyright: "copyright", isFullWidth: ["isFullWidth", "isFullWidth", booleanAttribute] }, host: { properties: { "style.--banner-footer-height.px": "this.bannerFooterHeight", "class": "this.cssClasses" } }, queries: [{ propertyName: "eclBannerImage", first: true, predicate: EclBannerImageDirective, descendants: true }, { propertyName: "eclBannerVideo", first: true, predicate: EclBannerVideoDirective, descendants: true }, { propertyName: "eclLinkComponents", predicate: i0.forwardRef(() => EclLinkDirective) }], viewQueries: [{ propertyName: "bannerFooter", first: true, predicate: ["bannerFooter"], descendants: true }, { propertyName: "bannerContainer", first: true, predicate: ["bannerContainer"], descendants: true }, { propertyName: "playBtn", first: true, predicate: ["playBtn"], descendants: true }, { propertyName: "pauseBtn", first: true, predicate: ["pauseBtn"], descendants: true }], usesInheritance: true, ngImport: i0, template: "@if(hasImage) {\n<figure class=\"ecl-banner__picture-container\">\n <ng-content select=\"[eclBannerPicture]\"></ng-content>\n @if(copyright) {\n <ng-container *ngTemplateOutlet=\"bannerFooterTemplate\"></ng-container>\n }\n</figure>\n}\n\n@if(hasVideo) {\n<div class=\"ecl-banner__video-container\">\n <ng-content select=\"[eclBannerVideo]\"></ng-content>\n @if(copyright) {\n <ng-container *ngTemplateOutlet=\"bannerFooterTemplate\"></ng-container>\n }\n <button #playBtn eclButton variant=\"tertiary\" isIconOnly class=\"ecl-banner__play\" (click)=\"onVideoPlay()\"\n [style.display]=\"isPlaying ? 'none' : 'block'\" (keydown.enter)=\"onKeydownEnterPlay()\">\n <span eclButtonLabel>Play video</span>\n <ecl-icon icon=\"play-outline\" size=\"m\"></ecl-icon>\n </button>\n <button #pauseBtn eclButton variant=\"tertiary\" isIconOnly class=\"ecl-banner__pause\" (click)=\"onVideoPause()\"\n [style.display]=\"isPlaying ? 'block' : 'none'\" (keydown.enter)=\"onKeydownEnterPause()\">\n <span eclButtonLabel>Pause video</span>\n <ecl-icon icon=\"pause-outline\" size=\"m\"></ecl-icon>\n </button>\n</div>\n}\n<div class=\"ecl-container ecl-banner__info\">\n <div #bannerContainer class=\"ecl-banner__container \">\n <div class=\"ecl-banner__content\">\n <ng-content select=\"[eclBannerTitle]\"></ng-content>\n <ng-content select=\"[eclBannerDescription]\"></ng-content>\n @if (hasCtaLink) {\n <div class=\"ecl-banner__cta\">\n <ng-content select=\"[eclLink]\"></ng-content>\n </div>\n }\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n\n<ng-template #bannerFooterTemplate>\n <div #bannerFooter class=\"ecl-banner__credit\"><div class=\"ecl-container\">\u00A9 {{copyright}}</div></div>\n</ng-template>", 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", "containerStyleClass"] }, { kind: "directive", type: i2.EclButtonLabelDirective, selector: "[eclButtonLabel]" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
339
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0-next.3", type: EclBannerComponent, isStandalone: true, selector: "ecl-banner", inputs: { eclSize: "eclSize", fontColor: "fontColor", fontSize: "fontSize", boxBackground: "boxBackground", horizontalAlignment: "horizontalAlignment", verticalAlignment: "verticalAlignment", copyright: "copyright", isFullWidth: ["isFullWidth", "isFullWidth", booleanAttribute] }, host: { listeners: { "window:resize": "onWindowResize()" }, properties: { "style.--banner-footer-height.px": "this.bannerFooterHeight", "class": "this.cssClasses" } }, queries: [{ propertyName: "eclBannerImage", first: true, predicate: EclBannerImageDirective, descendants: true }, { propertyName: "eclBannerVideo", first: true, predicate: EclBannerVideoDirective, descendants: true }, { propertyName: "eclLinkComponents", predicate: i0.forwardRef(() => EclLinkDirective) }], viewQueries: [{ propertyName: "bannerFooter", first: true, predicate: ["bannerFooter"], descendants: true }, { propertyName: "bannerContainer", first: true, predicate: ["bannerContainer"], descendants: true }, { propertyName: "playBtn", first: true, predicate: ["playBtn"], descendants: true }, { propertyName: "pauseBtn", first: true, predicate: ["pauseBtn"], descendants: true }], usesInheritance: true, ngImport: i0, template: "@if(hasImage) {\n<figure class=\"ecl-banner__picture-container\">\n <ng-content select=\"[eclBannerPicture]\"></ng-content>\n @if(copyright) {\n <ng-container *ngTemplateOutlet=\"bannerFooterTemplate\"></ng-container>\n }\n</figure>\n}\n\n@if(hasVideo) {\n<div class=\"ecl-banner__video-container\">\n <ng-content select=\"[eclBannerVideo]\"></ng-content>\n @if(copyright) {\n <ng-container *ngTemplateOutlet=\"bannerFooterTemplate\"></ng-container>\n }\n <button #playBtn eclButton variant=\"tertiary\" isIconOnly class=\"ecl-banner__play\" (click)=\"onVideoPlay()\"\n [style.display]=\"isPlaying ? 'none' : 'block'\" (keydown.enter)=\"onKeydownEnterPlay()\">\n <span eclButtonLabel>Play video</span>\n <ecl-icon icon=\"play-outline\" size=\"m\"></ecl-icon>\n </button>\n <button #pauseBtn eclButton variant=\"tertiary\" isIconOnly class=\"ecl-banner__pause\" (click)=\"onVideoPause()\"\n [style.display]=\"isPlaying ? 'block' : 'none'\" (keydown.enter)=\"onKeydownEnterPause()\">\n <span eclButtonLabel>Pause video</span>\n <ecl-icon icon=\"pause-outline\" size=\"m\"></ecl-icon>\n </button>\n</div>\n}\n<div class=\"ecl-container ecl-banner__info\">\n <div #bannerContainer class=\"ecl-banner__container \">\n <div class=\"ecl-banner__content\">\n <ng-content select=\"[eclBannerTitle]\"></ng-content>\n <ng-content select=\"[eclBannerDescription]\"></ng-content>\n @if (hasCtaLink) {\n <div class=\"ecl-banner__cta\">\n <ng-content select=\"[eclLink]\"></ng-content>\n </div>\n }\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n\n<ng-template #bannerFooterTemplate>\n <footer #bannerFooter class=\"ecl-banner__credit\"><div class=\"ecl-container\">\u00A9 {{copyright}}</div></footer>\n</ng-template>", 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", "containerStyleClass"] }, { kind: "directive", type: i2.EclButtonLabelDirective, selector: "[eclButtonLabel]" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
335
340
  }
336
341
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0-next.3", ngImport: i0, type: EclBannerComponent, decorators: [{
337
342
  type: Component,
@@ -339,7 +344,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0-next.3",
339
344
  ...EUI_ECL_ICON,
340
345
  ...EUI_ECL_BUTTON,
341
346
  NgTemplateOutlet,
342
- ], template: "@if(hasImage) {\n<figure class=\"ecl-banner__picture-container\">\n <ng-content select=\"[eclBannerPicture]\"></ng-content>\n @if(copyright) {\n <ng-container *ngTemplateOutlet=\"bannerFooterTemplate\"></ng-container>\n }\n</figure>\n}\n\n@if(hasVideo) {\n<div class=\"ecl-banner__video-container\">\n <ng-content select=\"[eclBannerVideo]\"></ng-content>\n @if(copyright) {\n <ng-container *ngTemplateOutlet=\"bannerFooterTemplate\"></ng-container>\n }\n <button #playBtn eclButton variant=\"tertiary\" isIconOnly class=\"ecl-banner__play\" (click)=\"onVideoPlay()\"\n [style.display]=\"isPlaying ? 'none' : 'block'\" (keydown.enter)=\"onKeydownEnterPlay()\">\n <span eclButtonLabel>Play video</span>\n <ecl-icon icon=\"play-outline\" size=\"m\"></ecl-icon>\n </button>\n <button #pauseBtn eclButton variant=\"tertiary\" isIconOnly class=\"ecl-banner__pause\" (click)=\"onVideoPause()\"\n [style.display]=\"isPlaying ? 'block' : 'none'\" (keydown.enter)=\"onKeydownEnterPause()\">\n <span eclButtonLabel>Pause video</span>\n <ecl-icon icon=\"pause-outline\" size=\"m\"></ecl-icon>\n </button>\n</div>\n}\n<div class=\"ecl-container ecl-banner__info\">\n <div #bannerContainer class=\"ecl-banner__container \">\n <div class=\"ecl-banner__content\">\n <ng-content select=\"[eclBannerTitle]\"></ng-content>\n <ng-content select=\"[eclBannerDescription]\"></ng-content>\n @if (hasCtaLink) {\n <div class=\"ecl-banner__cta\">\n <ng-content select=\"[eclLink]\"></ng-content>\n </div>\n }\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n\n<ng-template #bannerFooterTemplate>\n <div #bannerFooter class=\"ecl-banner__credit\"><div class=\"ecl-container\">\u00A9 {{copyright}}</div></div>\n</ng-template>" }]
347
+ ], template: "@if(hasImage) {\n<figure class=\"ecl-banner__picture-container\">\n <ng-content select=\"[eclBannerPicture]\"></ng-content>\n @if(copyright) {\n <ng-container *ngTemplateOutlet=\"bannerFooterTemplate\"></ng-container>\n }\n</figure>\n}\n\n@if(hasVideo) {\n<div class=\"ecl-banner__video-container\">\n <ng-content select=\"[eclBannerVideo]\"></ng-content>\n @if(copyright) {\n <ng-container *ngTemplateOutlet=\"bannerFooterTemplate\"></ng-container>\n }\n <button #playBtn eclButton variant=\"tertiary\" isIconOnly class=\"ecl-banner__play\" (click)=\"onVideoPlay()\"\n [style.display]=\"isPlaying ? 'none' : 'block'\" (keydown.enter)=\"onKeydownEnterPlay()\">\n <span eclButtonLabel>Play video</span>\n <ecl-icon icon=\"play-outline\" size=\"m\"></ecl-icon>\n </button>\n <button #pauseBtn eclButton variant=\"tertiary\" isIconOnly class=\"ecl-banner__pause\" (click)=\"onVideoPause()\"\n [style.display]=\"isPlaying ? 'block' : 'none'\" (keydown.enter)=\"onKeydownEnterPause()\">\n <span eclButtonLabel>Pause video</span>\n <ecl-icon icon=\"pause-outline\" size=\"m\"></ecl-icon>\n </button>\n</div>\n}\n<div class=\"ecl-container ecl-banner__info\">\n <div #bannerContainer class=\"ecl-banner__container \">\n <div class=\"ecl-banner__content\">\n <ng-content select=\"[eclBannerTitle]\"></ng-content>\n <ng-content select=\"[eclBannerDescription]\"></ng-content>\n @if (hasCtaLink) {\n <div class=\"ecl-banner__cta\">\n <ng-content select=\"[eclLink]\"></ng-content>\n </div>\n }\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n\n<ng-template #bannerFooterTemplate>\n <footer #bannerFooter class=\"ecl-banner__credit\"><div class=\"ecl-container\">\u00A9 {{copyright}}</div></footer>\n</ng-template>" }]
343
348
  }], ctorParameters: () => [], propDecorators: { eclSize: [{
344
349
  type: Input
345
350
  }], fontColor: [{
@@ -384,6 +389,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0-next.3",
384
389
  }], cssClasses: [{
385
390
  type: HostBinding,
386
391
  args: ['class']
392
+ }], onWindowResize: [{
393
+ type: HostListener,
394
+ args: ['window:resize']
387
395
  }] } });
388
396
 
389
397
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"eui-ecl-components-ecl-banner.mjs","sources":["../../components/ecl-banner/ecl-banner-picture.directive.ts","../../components/ecl-banner/ecl-banner-video.directive.ts","../../components/ecl-banner/ecl-banner.component.ts","../../components/ecl-banner/ecl-banner.component.html","../../components/ecl-banner/ecl-banner-title.directive.ts","../../components/ecl-banner/ecl-banner-description.directive.ts","../../components/ecl-banner/ecl-banner.module.ts","../../components/ecl-banner/index.ts","../../components/ecl-banner/eui-ecl-components-ecl-banner.ts"],"sourcesContent":["import { Directive, HostBinding, ElementRef, inject } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive applied to the <picture> element within the banner.\n * Adds the appropriate classes for styling the banner picture.\n */\n@Directive({\n selector: 'picture[eclBannerPicture]',\n})\nexport class EclBannerPictureDirective extends ECLBaseDirective {\n @HostBinding('class')\n get cssClasses(): string {\n return [super.getCssClasses('ecl-picture ecl-banner__picture')].join(' ').trim();\n }\n}\n\n/**\n * Directive applied to the <img> element inside the banner.\n * Enables class binding and exposes the element reference.\n */\n@Directive({\n selector: 'img[eclBannerImage]',\n})\nexport class EclBannerImageDirective extends ECLBaseDirective {\n el = inject(ElementRef);\n\n @HostBinding('class.ecl-banner__image') className = true;\n}\n","import { Directive, HostBinding, ElementRef, inject } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive applied to the video element used in the banner.\n * Adds appropriate styling classes to the host element.\n */\n@Directive({\n selector: 'video[eclBannerVideo]',\n})\nexport class EclBannerVideoDirective extends ECLBaseDirective {\n el = inject(ElementRef);\n\n /**\n * CSS classes applied to the host video element.\n */\n @HostBinding('class') videoClasses = 'ecl-video ecl-banner__video';\n}\n","import { BreakpointObserver } from '@angular/cdk/layout';\nimport {\n AfterContentInit,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n HostBinding,\n Input,\n OnDestroy,\n QueryList,\n Renderer2,\n ViewChild,\n afterNextRender,\n booleanAttribute,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { Subject, delay, takeUntil } from 'rxjs';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclLinkDirective } from '@eui/ecl/components/ecl-link';\nimport { EclBannerImageDirective } from './ecl-banner-picture.directive';\nimport { EclBannerVideoDirective } from './ecl-banner-video.directive';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { EclButtonComponent, EUI_ECL_BUTTON } from '@eui/ecl/components/ecl-button';\n\nconst enum DefaultRatio {\n XS = '6/1',\n S = '5/1',\n M = '4/1',\n L = '3/1',\n}\n\n/**\n * Component representing a banner, which can contain image, video and call-to-action (CTA) links.\n * Allows customization of layout, alignment, and appearance through inputs.\n */\n@Component({\n selector: 'ecl-banner',\n templateUrl: './ecl-banner.component.html',\n imports: [\n ...EUI_ECL_ICON,\n ...EUI_ECL_BUTTON,\n NgTemplateOutlet,\n ],\n})\nexport class EclBannerComponent extends ECLBaseDirective implements AfterContentInit, OnDestroy {\n el = inject(ElementRef);\n /**\n * Defines the size of the banner. Affects its height-to-width aspect ratio.\n * Allowed values: 'xs' | 's' | 'm' | 'l'.\n * Default: 'm'.\n */\n @Input() eclSize: 'xs'| 's' | 'm' | 'l' | string = 'm';\n\n /**\n * Defines the color of the font inside the banner content box.\n * Allowed values: 'light' | 'dark'.\n * Default: 'dark'.\n */\n @Input() fontColor: 'light' | 'dark' | string = 'dark';\n\n /**\n * Defines the font size inside the banner content box.\n * Allowed values: 'm' | 'l'.\n * Default: 'm'.\n */\n @Input() fontSize: 's' | 'm' | 'l' | string = 'm';\n\n /**\n * Defines the background color of the banner content box.\n * Allowed values: 'none' | 'light' | 'dark'.\n * Default: 'light'.\n */\n @Input() boxBackground: 'none' | 'light' | 'dark' | string = 'light';\n\n /**\n * Sets the horizontal alignment of the content inside the banner.\n * Allowed values: 'left' | 'center' | 'right'.\n * Default: 'left'.\n */\n @Input() horizontalAlignment: 'right' | 'left' | 'center' | string = 'left';\n\n /**\n * Sets the vertical alignment of the content inside the banner.\n * Allowed values: 'top' | 'center' | 'bottom'.\n * Default: 'center'.\n */\n @Input() verticalAlignment: 'top' | 'center' | 'bottom' | string = 'center';\n\n /**\n * Sets the copyright text displayed in the banner.\n */\n @Input() copyright = '';\n\n /**\n * When true, the banner stretches to full width of its container.\n * Default: false.\n */\n @Input({ transform: booleanAttribute }) isFullWidth = false;\n\n @ContentChildren(forwardRef(() => EclLinkDirective)) eclLinkComponents: QueryList<EclLinkDirective>;\n @ContentChild(EclBannerImageDirective) eclBannerImage: EclBannerImageDirective;\n @ContentChild(EclBannerVideoDirective) eclBannerVideo: EclBannerVideoDirective;\n\n @ViewChild('bannerFooter') bannerFooter: ElementRef;\n @ViewChild('bannerContainer') bannerContainer: ElementRef;\n @ViewChild('playBtn') playBtn: EclButtonComponent;\n @ViewChild('pauseBtn') pauseBtn: EclButtonComponent;\n\n @HostBinding('style.--banner-footer-height.px') bannerFooterHeight = null;\n @HostBinding('class')\n get cssClasses(): string {\n return [\n super.getCssClasses('ecl-banner'),\n `ecl-banner--${this.eclSize}`,\n `ecl-banner--font-${this.fontSize}`,\n `ecl-banner--box-bg-${this.boxBackground}`,\n `ecl-banner--h-${this.horizontalAlignment}`,\n `ecl-banner--v-${this.verticalAlignment}`,\n `ecl-banner--color-${this.fontColor}`,\n this.isFullWidth ? 'ecl-banner--full-width' : '',\n ]\n .join(' ')\n .trim();\n }\n\n isPlaying = false;\n private readonly BANNER_PADDING = 16;\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private breakpoint = 996;\n private bannerVPadding = 8;\n private isTabletBreakpoint = true;\n private readonly TIMEOUT_INTERVAL = 200;\n private renderer = inject(Renderer2);\n private cdkBreakpointObserver = inject(BreakpointObserver);\n private maxIterations = 10;\n\n constructor() {\n super();\n afterNextRender(() => {\n this.observeBreakpointChanges();\n this.observeElementSizeChanges();\n });\n }\n\n ngAfterContentInit(): void {\n if (this.eclLinkComponents) {\n this.eclLinkComponents.forEach((link) => {\n link.class = 'ecl-banner__link-cta';\n });\n }\n\n if (this.hasVideo) {\n const videoEl : HTMLVideoElement = this.eclBannerVideo.el.nativeElement;\n videoEl.addEventListener('play', () => {\n this.isPlaying = true;\n });\n videoEl.addEventListener('pause', () => {\n this.isPlaying = false;\n });\n this.renderer.setProperty(videoEl, 'muted', true);\n this.renderer.setProperty(videoEl, 'loop', true);\n this.renderer.setProperty(videoEl, 'autoplay', true);\n this.renderer.removeAttribute(videoEl, 'controls');\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n /**\n * Indicates whether the banner contains at least one call-to-action link.\n */\n get hasCtaLink(): boolean {\n return this.eclLinkComponents.length > 0;\n }\n\n /**\n * Indicates whether the banner contains an image.\n */\n get hasImage(): boolean {\n return !!this.eclBannerImage;\n }\n\n /**\n * Indicates whether the banner contains a video.\n */\n get hasVideo(): boolean {\n return !!this.eclBannerVideo;\n }\n\n /**\n * Handles keyboard activation (Enter key) to play video.\n * Moves focus to pause button after playing starts.\n */\n onKeydownEnterPlay(): void {\n this.onVideoPlay();\n setTimeout(() => this.pauseBtn.onFocus());\n }\n\n /**\n * Handles keyboard activation (Enter key) to pause video.\n * Moves focus to play button after pausing.\n */\n onKeydownEnterPause(): void {\n this.onVideoPause();\n setTimeout(() => this.playBtn.onFocus());\n }\n\n /**\n * Plays the embedded banner video.\n * Triggered via interaction (e.g., button).\n */\n onVideoPlay(): void {\n const videoEl : HTMLVideoElement = this.eclBannerVideo.el.nativeElement;\n videoEl.play();\n }\n\n /**\n * Pauses the embedded banner video.\n * Triggered via interaction (e.g., button).\n */\n onVideoPause(): void {\n const videoEl : HTMLVideoElement = this.eclBannerVideo.el.nativeElement;\n videoEl.pause();\n }\n\n private observeElementSizeChanges(): void {\n new ResizeObserver(() => {\n setTimeout(() => {\n this.checkViewport();\n }, this.TIMEOUT_INTERVAL);\n }).observe(this.bannerContainer.nativeElement);\n }\n\n private checkViewport() {\n if (window.innerWidth > this.breakpoint) {\n this.setBannerHeight();\n } else {\n this.resetBannerHeight();\n }\n }\n\n private waitForAspectRatioToBeDefined(attemptCounter: number) {\n attemptCounter = attemptCounter + 1;\n const aspectRatio = window.getComputedStyle(this.el.nativeElement).getPropertyValue('--css-aspect-ratio');\n\n if (\n (typeof aspectRatio === 'undefined' || aspectRatio === '') &&\n this.maxIterations > attemptCounter\n ) {\n setTimeout(() => this.waitForAspectRatioToBeDefined(attemptCounter), 100);\n } else {\n this.setHeight(aspectRatio);\n }\n }\n\n private setBannerHeight(): void {\n if (this.eclBannerImage || this.eclBannerVideo) {\n this.waitForAspectRatioToBeDefined(0);\n } else {\n this.setHeight(this.getDefaultRatio());\n }\n }\n\n private setHeight(ratio) {\n if (this.bannerContainer) {\n const bannerHeight = this.bannerContainer.nativeElement.offsetHeight + 2*this.bannerVPadding;\n const bannerWidth = parseInt(window.getComputedStyle(this.el.nativeElement).getPropertyValue('width'), 10);\n const [denominator, numerator] = ratio.split('/').map(Number);\n const currentHeight = (bannerWidth * numerator) / denominator;\n if (bannerHeight > currentHeight) {\n this.renderer.setStyle(this.el.nativeElement, 'aspect-ratio', 'auto');\n this.renderer.setStyle(this.el.nativeElement, 'height', `${bannerHeight}px`);\n } else {\n this.resetBannerHeight();\n }\n }\n\n // Add margin to the banner container when there is a footer\n // This is needed to keep the vertical alignment\n if (this.bannerFooter) {\n this.renderer.setStyle(this.el.nativeElement, '--banner-footer-height', `${this.bannerFooter.nativeElement.offsetHeight}px`);\n }\n }\n\n private resetBannerHeight(): void {\n // remove aspect-ratio\n this.renderer.removeStyle(this.el.nativeElement, 'aspect-ratio');\n\n // set height to auto\n this.renderer.setStyle(this.el.nativeElement, 'height', 'auto');\n\n // update footer height if bannerFooter exists\n if (this.bannerFooter) {\n const footerHeight = `${this.bannerFooter.nativeElement.offsetHeight}px`;\n this.renderer.setStyle(this.el.nativeElement, '--banner-footer-height', footerHeight);\n }\n }\n\n private getDefaultRatio(): string {\n switch(this.eclSize) {\n case 'xs': {\n return DefaultRatio.XS;\n }\n case 's': {\n return DefaultRatio.S;\n }\n case 'l': {\n return DefaultRatio.L;\n }\n default: {\n return DefaultRatio.M;\n }\n }\n }\n\n private observeBreakpointChanges(): void {\n this.cdkBreakpointObserver\n .observe([\n '(min-width: 997px)',\n ])\n .pipe(takeUntil(this.destroy$), delay(this.TIMEOUT_INTERVAL))\n .subscribe((result) => {\n this.isTabletBreakpoint = result.breakpoints['(min-width: 997px)'];\n if ( !this.isTabletBreakpoint) {\n this.setBannerHeight();\n }\n });\n }\n\n}\n","@if(hasImage) {\n<figure class=\"ecl-banner__picture-container\">\n <ng-content select=\"[eclBannerPicture]\"></ng-content>\n @if(copyright) {\n <ng-container *ngTemplateOutlet=\"bannerFooterTemplate\"></ng-container>\n }\n</figure>\n}\n\n@if(hasVideo) {\n<div class=\"ecl-banner__video-container\">\n <ng-content select=\"[eclBannerVideo]\"></ng-content>\n @if(copyright) {\n <ng-container *ngTemplateOutlet=\"bannerFooterTemplate\"></ng-container>\n }\n <button #playBtn eclButton variant=\"tertiary\" isIconOnly class=\"ecl-banner__play\" (click)=\"onVideoPlay()\"\n [style.display]=\"isPlaying ? 'none' : 'block'\" (keydown.enter)=\"onKeydownEnterPlay()\">\n <span eclButtonLabel>Play video</span>\n <ecl-icon icon=\"play-outline\" size=\"m\"></ecl-icon>\n </button>\n <button #pauseBtn eclButton variant=\"tertiary\" isIconOnly class=\"ecl-banner__pause\" (click)=\"onVideoPause()\"\n [style.display]=\"isPlaying ? 'block' : 'none'\" (keydown.enter)=\"onKeydownEnterPause()\">\n <span eclButtonLabel>Pause video</span>\n <ecl-icon icon=\"pause-outline\" size=\"m\"></ecl-icon>\n </button>\n</div>\n}\n<div class=\"ecl-container ecl-banner__info\">\n <div #bannerContainer class=\"ecl-banner__container \">\n <div class=\"ecl-banner__content\">\n <ng-content select=\"[eclBannerTitle]\"></ng-content>\n <ng-content select=\"[eclBannerDescription]\"></ng-content>\n @if (hasCtaLink) {\n <div class=\"ecl-banner__cta\">\n <ng-content select=\"[eclLink]\"></ng-content>\n </div>\n }\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n\n<ng-template #bannerFooterTemplate>\n <div #bannerFooter class=\"ecl-banner__credit\"><div class=\"ecl-container\">© {{copyright}}</div></div>\n</ng-template>","import { Directive, HostBinding } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive applied to the banner title container element.\n * Adds appropriate styling class to the host element.\n */\n@Directive({\n selector: '[eclBannerTitle]',\n})\nexport class EclBannerTitleDirective extends ECLBaseDirective {\n @HostBinding('class') className = 'ecl-banner__title';\n}\n\n/**\n * Directive applied to the text element within the banner title.\n * Adds appropriate styling class to the host element.\n */\n@Directive({\n selector: '[eclBannerTitleText]',\n})\nexport class EclBannerTitleTextDirective extends ECLBaseDirective {\n @HostBinding('class') className = 'ecl-banner__title-text';\n}\n\n/**\n * Directive applied to the link element within the banner title.\n * Adds appropriate link styling classes to the host element.\n */\n@Directive({\n selector: '[eclBannerTitleLink]',\n})\nexport class EclBannerTitleLinkDirective extends ECLBaseDirective {\n @HostBinding('class') className = 'ecl-link ecl-banner__title-link';\n}\n","import { Directive, HostBinding } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive for the main banner description container.\n */\n@Directive({\n selector: '[eclBannerDescription]',\n})\nexport class EclBannerDescriptionDirective extends ECLBaseDirective {\n @HostBinding('class') className = 'ecl-banner__description';\n}\n\n/**\n * Directive for the textual content inside the banner description.\n */\n@Directive({\n selector: '[eclBannerDescriptionText]',\n})\nexport class EclBannerDescriptionTextDirective extends ECLBaseDirective {\n @HostBinding('class') className = 'ecl-banner__description-text';\n}\n\n/**\n * Directive for a link inside the banner description.\n */\n@Directive({\n selector: '[eclBannerDescriptionLink]',\n})\nexport class EclBannerDescriptionLinkDirective extends ECLBaseDirective {\n @HostBinding('class') className = 'ecl-link ecl-banner__description-link';\n}\n","import { NgModule } from '@angular/core';\nimport { EclBannerTitleDirective, EclBannerTitleLinkDirective, EclBannerTitleTextDirective } from './ecl-banner-title.directive';\nimport { EclBannerDescriptionDirective, EclBannerDescriptionLinkDirective, EclBannerDescriptionTextDirective } from './ecl-banner-description.directive';\nimport { EclBannerComponent } from './ecl-banner.component';\nimport { EclBannerImageDirective, EclBannerPictureDirective } from './ecl-banner-picture.directive';\nimport { EclBannerVideoDirective } from './ecl-banner-video.directive';\n\nconst COMPONENTS = [\n EclBannerComponent,\n EclBannerTitleDirective,\n EclBannerTitleTextDirective,\n EclBannerDescriptionDirective,\n EclBannerDescriptionTextDirective,\n EclBannerPictureDirective,\n EclBannerImageDirective,\n EclBannerTitleLinkDirective,\n EclBannerVideoDirective,\n EclBannerDescriptionLinkDirective,\n];\n\n/**\n * @description\n * Module that provides the EclBanner component and its dependencies.\n *\n * @deprecated Use {@link EUI_ECL_BANNER} instead.\n */\n@NgModule({\n imports: [...COMPONENTS],\n exports: [...COMPONENTS],\n})\nexport class EclBannerModule {}\n","import { EclBannerComponent } from './ecl-banner.component';\nimport { EclBannerTitleDirective, EclBannerTitleTextDirective, EclBannerTitleLinkDirective } from './ecl-banner-title.directive';\nimport { EclBannerDescriptionDirective, EclBannerDescriptionTextDirective, EclBannerDescriptionLinkDirective } from './ecl-banner-description.directive';\nimport { EclBannerImageDirective, EclBannerPictureDirective } from './ecl-banner-picture.directive';\nimport { EclBannerVideoDirective } from './ecl-banner-video.directive';\n\nexport * from './ecl-banner.module';\nexport * from './ecl-banner.component';\nexport * from './ecl-banner-title.directive';\nexport * from './ecl-banner-description.directive';\nexport * from './ecl-banner-picture.directive';\nexport * from './ecl-banner-video.directive';\n\nexport const EUI_ECL_BANNER = [\n EclBannerComponent,\n EclBannerTitleDirective,\n EclBannerTitleTextDirective,\n EclBannerTitleLinkDirective,\n EclBannerDescriptionDirective,\n EclBannerDescriptionTextDirective,\n EclBannerDescriptionLinkDirective,\n EclBannerPictureDirective,\n EclBannerImageDirective,\n EclBannerVideoDirective,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eui-ecl-components-ecl-banner.mjs","sources":["../../components/ecl-banner/ecl-banner-picture.directive.ts","../../components/ecl-banner/ecl-banner-video.directive.ts","../../components/ecl-banner/ecl-banner.component.ts","../../components/ecl-banner/ecl-banner.component.html","../../components/ecl-banner/ecl-banner-title.directive.ts","../../components/ecl-banner/ecl-banner-description.directive.ts","../../components/ecl-banner/ecl-banner.module.ts","../../components/ecl-banner/index.ts","../../components/ecl-banner/eui-ecl-components-ecl-banner.ts"],"sourcesContent":["import { Directive, HostBinding, ElementRef, inject } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive applied to the <picture> element within the banner.\n * Adds the appropriate classes for styling the banner picture.\n */\n@Directive({\n selector: 'picture[eclBannerPicture]',\n})\nexport class EclBannerPictureDirective extends ECLBaseDirective {\n @HostBinding('class')\n get cssClasses(): string {\n return [super.getCssClasses('ecl-picture ecl-banner__picture')].join(' ').trim();\n }\n}\n\n/**\n * Directive applied to the <img> element inside the banner.\n * Enables class binding and exposes the element reference.\n */\n@Directive({\n selector: 'img[eclBannerImage]',\n})\nexport class EclBannerImageDirective extends ECLBaseDirective {\n el = inject(ElementRef);\n\n @HostBinding('class.ecl-banner__image') className = true;\n}\n","import { Directive, HostBinding, ElementRef, inject } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive applied to the video element used in the banner.\n * Adds appropriate styling classes to the host element.\n */\n@Directive({\n selector: 'video[eclBannerVideo]',\n})\nexport class EclBannerVideoDirective extends ECLBaseDirective {\n el = inject(ElementRef);\n\n /**\n * CSS classes applied to the host video element.\n */\n @HostBinding('class') videoClasses = 'ecl-video ecl-banner__video';\n}\n","import { BreakpointObserver } from '@angular/cdk/layout';\nimport {\n AfterContentInit,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n QueryList,\n Renderer2,\n ViewChild,\n afterNextRender,\n booleanAttribute,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { Subject, delay, takeUntil } from 'rxjs';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclLinkDirective } from '@eui/ecl/components/ecl-link';\nimport { EclBannerImageDirective } from './ecl-banner-picture.directive';\nimport { EclBannerVideoDirective } from './ecl-banner-video.directive';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { EclButtonComponent, EUI_ECL_BUTTON } from '@eui/ecl/components/ecl-button';\n\nconst enum DefaultRatio {\n XS = '6/1',\n S = '5/1',\n M = '4/1',\n L = '3/1',\n}\n\n/**\n * Component representing a banner, which can contain image, video and call-to-action (CTA) links.\n * Allows customization of layout, alignment, and appearance through inputs.\n */\n@Component({\n selector: 'ecl-banner',\n templateUrl: './ecl-banner.component.html',\n imports: [\n ...EUI_ECL_ICON,\n ...EUI_ECL_BUTTON,\n NgTemplateOutlet,\n ],\n})\nexport class EclBannerComponent extends ECLBaseDirective implements AfterContentInit, OnDestroy {\n el = inject(ElementRef);\n /**\n * Defines the size of the banner. Affects its height-to-width aspect ratio.\n * Allowed values: 'xs' | 's' | 'm' | 'l'.\n * Default: 'm'.\n */\n @Input() eclSize: 'xs'| 's' | 'm' | 'l' | string = 'm';\n\n /**\n * Defines the color of the font inside the banner content box.\n * Allowed values: 'light' | 'dark'.\n * Default: 'dark'.\n */\n @Input() fontColor: 'light' | 'dark' | string = 'dark';\n\n /**\n * Defines the font size inside the banner content box.\n * Allowed values: 'm' | 'l'.\n * Default: 'm'.\n */\n @Input() fontSize: 's' | 'm' | 'l' | string = 'm';\n\n /**\n * Defines the background color of the banner content box.\n * Allowed values: 'none' | 'light' | 'dark'.\n * Default: 'light'.\n */\n @Input() boxBackground: 'none' | 'light' | 'dark' | string = 'light';\n\n /**\n * Sets the horizontal alignment of the content inside the banner.\n * Allowed values: 'left' | 'center' | 'right'.\n * Default: 'left'.\n */\n @Input() horizontalAlignment: 'right' | 'left' | 'center' | string = 'left';\n\n /**\n * Sets the vertical alignment of the content inside the banner.\n * Allowed values: 'top' | 'center' | 'bottom'.\n * Default: 'center'.\n */\n @Input() verticalAlignment: 'top' | 'center' | 'bottom' | string = 'center';\n\n /**\n * Sets the copyright text displayed in the banner.\n */\n @Input() copyright = '';\n\n /**\n * When true, the banner stretches to full width of its container.\n * Default: false.\n */\n @Input({ transform: booleanAttribute }) isFullWidth = false;\n\n @ContentChildren(forwardRef(() => EclLinkDirective)) eclLinkComponents: QueryList<EclLinkDirective>;\n @ContentChild(EclBannerImageDirective) eclBannerImage: EclBannerImageDirective;\n @ContentChild(EclBannerVideoDirective) eclBannerVideo: EclBannerVideoDirective;\n\n @ViewChild('bannerFooter') bannerFooter: ElementRef;\n @ViewChild('bannerContainer') bannerContainer: ElementRef;\n @ViewChild('playBtn') playBtn: EclButtonComponent;\n @ViewChild('pauseBtn') pauseBtn: EclButtonComponent;\n\n @HostBinding('style.--banner-footer-height.px') bannerFooterHeight = null;\n @HostBinding('class')\n get cssClasses(): string {\n return [\n super.getCssClasses('ecl-banner'),\n `ecl-banner--${this.eclSize}`,\n `ecl-banner--font-${this.fontSize}`,\n `ecl-banner--box-bg-${this.boxBackground}`,\n `ecl-banner--h-${this.horizontalAlignment}`,\n `ecl-banner--v-${this.verticalAlignment}`,\n `ecl-banner--color-${this.fontColor}`,\n this.isFullWidth ? 'ecl-banner--full-width' : '',\n ]\n .join(' ')\n .trim();\n }\n\n isPlaying = false;\n private readonly BANNER_PADDING = 16;\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private breakpoint = 996;\n private bannerVPadding = 8;\n private isTabletBreakpoint = true;\n private readonly TIMEOUT_INTERVAL = 200;\n private renderer = inject(Renderer2);\n private cdkBreakpointObserver = inject(BreakpointObserver);\n private maxIterations = 10;\n\n constructor() {\n super();\n afterNextRender(() => {\n this.observeBreakpointChanges();\n this.observeElementSizeChanges();\n });\n }\n\n ngAfterContentInit(): void {\n if (this.eclLinkComponents) {\n this.eclLinkComponents.forEach((link) => {\n link.class = 'ecl-banner__link-cta';\n });\n }\n\n if (this.hasVideo) {\n const videoEl : HTMLVideoElement = this.eclBannerVideo.el.nativeElement;\n videoEl.addEventListener('play', () => {\n this.isPlaying = true;\n });\n videoEl.addEventListener('pause', () => {\n this.isPlaying = false;\n });\n this.renderer.setProperty(videoEl, 'muted', true);\n this.renderer.setProperty(videoEl, 'loop', true);\n this.renderer.setProperty(videoEl, 'autoplay', true);\n this.renderer.removeAttribute(videoEl, 'controls');\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n /**\n * Indicates whether the banner contains at least one call-to-action link.\n */\n get hasCtaLink(): boolean {\n return this.eclLinkComponents.length > 0;\n }\n\n /**\n * Indicates whether the banner contains an image.\n */\n get hasImage(): boolean {\n return !!this.eclBannerImage;\n }\n\n /**\n * Indicates whether the banner contains a video.\n */\n get hasVideo(): boolean {\n return !!this.eclBannerVideo;\n }\n\n /**\n * Handles keyboard activation (Enter key) to play video.\n * Moves focus to pause button after playing starts.\n */\n onKeydownEnterPlay(): void {\n this.onVideoPlay();\n setTimeout(() => this.pauseBtn.onFocus());\n }\n\n @HostListener('window:resize')\n onWindowResize(): void {\n this.observeElementSizeChanges();\n }\n\n /**\n * Handles keyboard activation (Enter key) to pause video.\n * Moves focus to play button after pausing.\n */\n onKeydownEnterPause(): void {\n this.onVideoPause();\n setTimeout(() => this.playBtn.onFocus());\n }\n\n /**\n * Plays the embedded banner video.\n * Triggered via interaction (e.g., button).\n */\n onVideoPlay(): void {\n const videoEl : HTMLVideoElement = this.eclBannerVideo.el.nativeElement;\n videoEl.play();\n }\n\n /**\n * Pauses the embedded banner video.\n * Triggered via interaction (e.g., button).\n */\n onVideoPause(): void {\n const videoEl : HTMLVideoElement = this.eclBannerVideo.el.nativeElement;\n videoEl.pause();\n }\n\n private observeElementSizeChanges(): void {\n // new ResizeObserver(() => { // Removing this for now , because it is causing problems (infinite loop). Observing window:resize.\n setTimeout(() => {\n this.checkViewport();\n }, this.TIMEOUT_INTERVAL);\n // }).observe(this.bannerContainer.nativeElement);\n }\n\n private checkViewport() {\n if (window.innerWidth > this.breakpoint) {\n this.setBannerHeight();\n } else {\n this.resetBannerHeight();\n }\n }\n\n private waitForAspectRatioToBeDefined(attemptCounter: number) {\n attemptCounter = attemptCounter + 1;\n const aspectRatio = window.getComputedStyle(this.el.nativeElement).getPropertyValue('--css-aspect-ratio');\n\n if (\n (typeof aspectRatio === 'undefined' || aspectRatio === '') &&\n this.maxIterations > attemptCounter\n ) {\n setTimeout(() => this.waitForAspectRatioToBeDefined(attemptCounter), 100);\n } else {\n this.setHeight(aspectRatio);\n }\n }\n\n private setBannerHeight(): void {\n if (this.eclBannerImage || this.eclBannerVideo) {\n this.waitForAspectRatioToBeDefined(0);\n } else {\n this.setHeight(this.getDefaultRatio());\n }\n }\n\n private setHeight(ratio) {\n if (this.bannerContainer) {\n const bannerHeight = this.bannerContainer.nativeElement.offsetHeight + 2*this.bannerVPadding;\n const bannerWidth = parseInt(window.getComputedStyle(this.el.nativeElement).getPropertyValue('width'), 10);\n const [denominator, numerator] = ratio.split('/').map(Number);\n const currentHeight = (bannerWidth * numerator) / denominator;\n if (bannerHeight > currentHeight) {\n this.renderer.setStyle(this.el.nativeElement, 'aspect-ratio', 'auto');\n this.renderer.setStyle(this.el.nativeElement, 'height', `${bannerHeight}px`);\n } else {\n this.resetBannerHeight();\n }\n }\n\n // Add margin to the banner container when there is a footer\n // This is needed to keep the vertical alignment\n if (this.bannerFooter) {\n this.bannerFooterHeight = this.bannerFooter.nativeElement.offsetHeight;\n // this.renderer.setStyle(this.el.nativeElement, '--banner-footer-height', `${this.bannerFooter.nativeElement.offsetHeight}px`);\n }\n }\n\n private resetBannerHeight(): void {\n // remove aspect-ratio\n this.renderer.removeStyle(this.el.nativeElement, 'aspect-ratio');\n\n // set height to auto\n this.renderer.setStyle(this.el.nativeElement, 'height', 'auto');\n\n // update footer height if bannerFooter exists\n if (this.bannerFooter) {\n // const footerHeight = `${this.bannerFooter.nativeElement.offsetHeight}px`;\n this.bannerFooterHeight = this.bannerFooter.nativeElement.offsetHeight;\n // this.renderer.setStyle(this.el.nativeElement, '--banner-footer-height', footerHeight);\n }\n }\n\n private getDefaultRatio(): string {\n switch(this.eclSize) {\n case 'xs': {\n return DefaultRatio.XS;\n }\n case 's': {\n return DefaultRatio.S;\n }\n case 'l': {\n return DefaultRatio.L;\n }\n default: {\n return DefaultRatio.M;\n }\n }\n }\n\n private observeBreakpointChanges(): void {\n this.cdkBreakpointObserver\n .observe([\n '(min-width: 997px)',\n ])\n .pipe(takeUntil(this.destroy$), delay(this.TIMEOUT_INTERVAL))\n .subscribe((result) => {\n this.isTabletBreakpoint = result.breakpoints['(min-width: 997px)'];\n if ( !this.isTabletBreakpoint) {\n this.setBannerHeight();\n }\n });\n }\n\n}\n","@if(hasImage) {\n<figure class=\"ecl-banner__picture-container\">\n <ng-content select=\"[eclBannerPicture]\"></ng-content>\n @if(copyright) {\n <ng-container *ngTemplateOutlet=\"bannerFooterTemplate\"></ng-container>\n }\n</figure>\n}\n\n@if(hasVideo) {\n<div class=\"ecl-banner__video-container\">\n <ng-content select=\"[eclBannerVideo]\"></ng-content>\n @if(copyright) {\n <ng-container *ngTemplateOutlet=\"bannerFooterTemplate\"></ng-container>\n }\n <button #playBtn eclButton variant=\"tertiary\" isIconOnly class=\"ecl-banner__play\" (click)=\"onVideoPlay()\"\n [style.display]=\"isPlaying ? 'none' : 'block'\" (keydown.enter)=\"onKeydownEnterPlay()\">\n <span eclButtonLabel>Play video</span>\n <ecl-icon icon=\"play-outline\" size=\"m\"></ecl-icon>\n </button>\n <button #pauseBtn eclButton variant=\"tertiary\" isIconOnly class=\"ecl-banner__pause\" (click)=\"onVideoPause()\"\n [style.display]=\"isPlaying ? 'block' : 'none'\" (keydown.enter)=\"onKeydownEnterPause()\">\n <span eclButtonLabel>Pause video</span>\n <ecl-icon icon=\"pause-outline\" size=\"m\"></ecl-icon>\n </button>\n</div>\n}\n<div class=\"ecl-container ecl-banner__info\">\n <div #bannerContainer class=\"ecl-banner__container \">\n <div class=\"ecl-banner__content\">\n <ng-content select=\"[eclBannerTitle]\"></ng-content>\n <ng-content select=\"[eclBannerDescription]\"></ng-content>\n @if (hasCtaLink) {\n <div class=\"ecl-banner__cta\">\n <ng-content select=\"[eclLink]\"></ng-content>\n </div>\n }\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n\n<ng-template #bannerFooterTemplate>\n <footer #bannerFooter class=\"ecl-banner__credit\"><div class=\"ecl-container\">© {{copyright}}</div></footer>\n</ng-template>","import { Directive, HostBinding } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive applied to the banner title container element.\n * Adds appropriate styling class to the host element.\n */\n@Directive({\n selector: '[eclBannerTitle]',\n})\nexport class EclBannerTitleDirective extends ECLBaseDirective {\n @HostBinding('class') className = 'ecl-banner__title';\n}\n\n/**\n * Directive applied to the text element within the banner title.\n * Adds appropriate styling class to the host element.\n */\n@Directive({\n selector: '[eclBannerTitleText]',\n})\nexport class EclBannerTitleTextDirective extends ECLBaseDirective {\n @HostBinding('class') className = 'ecl-banner__title-text';\n}\n\n/**\n * Directive applied to the link element within the banner title.\n * Adds appropriate link styling classes to the host element.\n */\n@Directive({\n selector: '[eclBannerTitleLink]',\n})\nexport class EclBannerTitleLinkDirective extends ECLBaseDirective {\n @HostBinding('class') className = 'ecl-link ecl-banner__title-link';\n}\n","import { Directive, HostBinding } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive for the main banner description container.\n */\n@Directive({\n selector: '[eclBannerDescription]',\n})\nexport class EclBannerDescriptionDirective extends ECLBaseDirective {\n @HostBinding('class') className = 'ecl-banner__description';\n}\n\n/**\n * Directive for the textual content inside the banner description.\n */\n@Directive({\n selector: '[eclBannerDescriptionText]',\n})\nexport class EclBannerDescriptionTextDirective extends ECLBaseDirective {\n @HostBinding('class') className = 'ecl-banner__description-text';\n}\n\n/**\n * Directive for a link inside the banner description.\n */\n@Directive({\n selector: '[eclBannerDescriptionLink]',\n})\nexport class EclBannerDescriptionLinkDirective extends ECLBaseDirective {\n @HostBinding('class') className = 'ecl-link ecl-banner__description-link';\n}\n","import { NgModule } from '@angular/core';\nimport { EclBannerTitleDirective, EclBannerTitleLinkDirective, EclBannerTitleTextDirective } from './ecl-banner-title.directive';\nimport { EclBannerDescriptionDirective, EclBannerDescriptionLinkDirective, EclBannerDescriptionTextDirective } from './ecl-banner-description.directive';\nimport { EclBannerComponent } from './ecl-banner.component';\nimport { EclBannerImageDirective, EclBannerPictureDirective } from './ecl-banner-picture.directive';\nimport { EclBannerVideoDirective } from './ecl-banner-video.directive';\n\nconst COMPONENTS = [\n EclBannerComponent,\n EclBannerTitleDirective,\n EclBannerTitleTextDirective,\n EclBannerDescriptionDirective,\n EclBannerDescriptionTextDirective,\n EclBannerPictureDirective,\n EclBannerImageDirective,\n EclBannerTitleLinkDirective,\n EclBannerVideoDirective,\n EclBannerDescriptionLinkDirective,\n];\n\n/**\n * @description\n * Module that provides the EclBanner component and its dependencies.\n *\n * @deprecated Use {@link EUI_ECL_BANNER} instead.\n */\n@NgModule({\n imports: [...COMPONENTS],\n exports: [...COMPONENTS],\n})\nexport class EclBannerModule {}\n","import { EclBannerComponent } from './ecl-banner.component';\nimport { EclBannerTitleDirective, EclBannerTitleTextDirective, EclBannerTitleLinkDirective } from './ecl-banner-title.directive';\nimport { EclBannerDescriptionDirective, EclBannerDescriptionTextDirective, EclBannerDescriptionLinkDirective } from './ecl-banner-description.directive';\nimport { EclBannerImageDirective, EclBannerPictureDirective } from './ecl-banner-picture.directive';\nimport { EclBannerVideoDirective } from './ecl-banner-video.directive';\n\nexport * from './ecl-banner.module';\nexport * from './ecl-banner.component';\nexport * from './ecl-banner-title.directive';\nexport * from './ecl-banner-description.directive';\nexport * from './ecl-banner-picture.directive';\nexport * from './ecl-banner-video.directive';\n\nexport const EUI_ECL_BANNER = [\n EclBannerComponent,\n EclBannerTitleDirective,\n EclBannerTitleTextDirective,\n EclBannerTitleLinkDirective,\n EclBannerDescriptionDirective,\n EclBannerDescriptionTextDirective,\n EclBannerDescriptionLinkDirective,\n EclBannerPictureDirective,\n EclBannerImageDirective,\n EclBannerVideoDirective,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -165,6 +165,9 @@ class EclCarouselComponent extends ECLBaseDirective {
165
165
  get cssClasses() {
166
166
  return [super.getCssClasses('ecl-carousel')].join(' ').trim();
167
167
  }
168
+ onWindowResize() {
169
+ this.observeElementSizeChanges();
170
+ }
168
171
  /**
169
172
  * Angular lifecycle hook: initializes autoplay and RTL detection.
170
173
  */
@@ -652,43 +655,59 @@ class EclCarouselComponent extends ECLBaseDirective {
652
655
  * Observes changes to the carousel's container element size using ResizeObserver.
653
656
  */
654
657
  observeElementSizeChanges() {
655
- new ResizeObserver(() => {
656
- setTimeout(() => {
657
- if (this.isSmallTabletBreakpoint) {
658
- this.resetHeight();
659
- }
660
- else if (!this.isSmallTabletBreakpoint) {
661
- this.checkBannerHeights();
662
- }
663
- this.cd.detectChanges();
664
- }, this.TIMEOUT_INTERVAL);
665
- }).observe(this.carouselContainerElement.nativeElement);
658
+ // new ResizeObserver(() => { // Removing this for now , because it is causing problems (infinite loop). Observing window:resize.
659
+ setTimeout(() => {
660
+ if (this.isSmallTabletBreakpoint) {
661
+ this.resetHeight();
662
+ }
663
+ else if (!this.isSmallTabletBreakpoint) {
664
+ this.checkBannerHeights();
665
+ }
666
+ }, this.TIMEOUT_INTERVAL);
667
+ // }).observe(this.carouselContainerElement.nativeElement);
666
668
  }
667
669
  /**
668
670
  * Normalizes the height of all banners to match the tallest banner.
669
671
  */
670
672
  checkBannerHeights() {
671
673
  const heightValues = this.slides.map((slide) => {
672
- const height = slide.banner?.el.nativeElement.offsetHeight;
674
+ const el = slide.banner?.el.nativeElement;
675
+ if (!el)
676
+ return undefined;
677
+ const height = el.offsetHeight;
678
+ const computedStyle = getComputedStyle(el);
679
+ const footerHeight = parseInt(computedStyle.getPropertyValue('--banner-footer-height'), 10) || 0;
673
680
  if (height === 'auto') {
674
681
  return 0;
675
682
  }
676
683
  if (Number.isNaN(height) || height === 100) {
677
- return 1;
684
+ return 0;
678
685
  }
679
- return height;
686
+ return height + footerHeight;
680
687
  });
681
- const elementHeights = heightValues.filter((height) => height !== undefined);
688
+ const elementHeights = heightValues.filter((h) => h !== undefined);
682
689
  const tallestElementHeight = Math.max(...elementHeights);
683
690
  if (tallestElementHeight > 0) {
684
691
  this.slides.forEach((slide) => {
685
692
  const banner = slide.banner;
686
- if (banner) {
687
- const bannerImage = banner.eclBannerImage;
688
- this.renderer2.setStyle(banner.el.nativeElement, 'height', `${tallestElementHeight}px`);
689
- if (bannerImage) {
690
- this.renderer2.setStyle(bannerImage.el.nativeElement, 'aspectRatio', 'auto');
691
- }
693
+ if (!banner)
694
+ return;
695
+ const el = banner.el.nativeElement;
696
+ const bannerImage = banner.eclBannerImage;
697
+ const bannerVideo = banner.eclBannerVideo;
698
+ const computedStyle = getComputedStyle(el);
699
+ const footerHeight = parseInt(computedStyle.getPropertyValue('--banner-footer-height'), 10) || 0;
700
+ const desiredHeight = tallestElementHeight; // - footerHeight;
701
+ const currentHeight = el.offsetHeight;
702
+ // ✅ only apply style if height actually changed
703
+ if (currentHeight !== desiredHeight) {
704
+ this.renderer2.setStyle(el, 'height', `${desiredHeight}px`);
705
+ }
706
+ if (bannerImage) {
707
+ this.renderer2.removeStyle(bannerImage.el.nativeElement, 'aspectRatio');
708
+ }
709
+ if (bannerVideo) {
710
+ this.renderer2.removeStyle(bannerVideo.el.nativeElement, 'aspectRatio');
692
711
  }
693
712
  });
694
713
  this.resetHiddenItems();
@@ -724,7 +743,7 @@ class EclCarouselComponent extends ECLBaseDirective {
724
743
  }
725
744
  }
726
745
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0-next.3", ngImport: i0, type: EclCarouselComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
727
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0-next.3", type: EclCarouselComponent, isStandalone: true, selector: "ecl-carousel", inputs: { ariaLabel: ["aria-label", "ariaLabel"], isAutoplay: ["isAutoplay", "isAutoplay", booleanAttribute], playInterval: ["playInterval", "playInterval", numberAttribute] }, outputs: { slide: "slide" }, host: { properties: { "attr.aria-label": "this.ariaLabel", "attr.aria-roledescription": "this.ariaRoleDescription", "class": "this.cssClasses" } }, queries: [{ propertyName: "slides", predicate: i0.forwardRef(() => EclCarouselItemComponent) }], viewQueries: [{ propertyName: "carouselContainerElement", first: true, predicate: ["carouselContainer"], descendants: true }, { propertyName: "playButton", first: true, predicate: ["playButton"], descendants: true }, { propertyName: "pauseButton", first: true, predicate: ["pauseButton"], descendants: true }, { propertyName: "firstHiddenItem", first: true, predicate: ["firstHiddenItem"], descendants: true }, { propertyName: "lastHiddenItem", first: true, predicate: ["lastHiddenItem"], descendants: true }, { propertyName: "slidesContainer", first: true, predicate: ["slidesContainer"], descendants: true }, { propertyName: "navigationButtons", predicate: ["currButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "@if(hasControls()){\n<div class=\"ecl-carousel__controls\">\n <div class=\"ecl-container\">\n <div class=\"ecl-carousel__autoplay\">\n <button #playButton class=\"ecl-button ecl-button--tertiary ecl-carousel__play ecl-button--icon-only\"\n type=\"button\" [style.display]=\"isPlaying ? 'none' : 'flex'\" (keydown)=\"onPlayKeyboardPress($event)\"\n (click)=\"onPlayClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.PLAY' | translate }}\n </span>\n <ecl-icon icon=\"play-outline\" size=\"m\" class=\"ecl-button__icon ecl-carousel__icon-default\">\n </ecl-icon>\n </span>\n </button>\n\n <button #pauseButton class=\"ecl-button ecl-button--tertiary ecl-carousel__pause ecl-button--icon-only\"\n type=\"button\" [style.display]=\"isPlaying ? 'flex' : 'none'\" (keydown)=\"onPlayKeyboardPress($event)\"\n (click)=\"onPauseClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.PAUSE' | translate }}\n </span>\n <ecl-icon icon=\"pause-outline\" size=\"m\" class=\"ecl-button__icon ecl-carousel__icon-default\"> </ecl-icon>\n </span>\n\n </button>\n </div>\n\n <div class=\"ecl-carousel__navigation\" role=\"tablist\" >\n @for (slide of slides; let i = $index; track slide) {\n <button #currButton [attr.aria-current]=\"i === getCurrentSlideIndex()\" [attr.tabindex]=\"i === getCurrentSlideIndex() ? null: -1\"\n class=\"ecl-button ecl-button--tertiary ecl-carousel__navigation-item\" role=\"tab\" (click)=\"onSlideControlClick(slide)\"\n (keydown)=\"onNavBtnKeyboardPress($event, i)\">\n {{ i + 1 }}\n </button>\n }\n </div>\n </div>\n</div>\n}\n<div #carouselContainer class=\"ecl-carousel__container\" [class.ecl-carousel-container--padded]=\"isPadded()\">\n <div #slidesContainer (keyup)=\"onFirstCarouselElementPress($event)\" class=\"ecl-carousel__slides\"\n [style.width.px]=\"getCarouselSlidesWidth()\" [style.left.px]=\"!isRtl ? getCarouselSlidesOffsetLeft() : null\"\n [style.right.px]=\"isRtl ? getCarouselSlidesOffsetRight() : null\"\n [style.transition-duration.s]=\"transitionDuration\" (mouseover)=\"onSlideHover()\" (mouseout)=\"onSlideHoverout()\">\n\n @if(hasControls()){\n <ecl-carousel-item #firstHiddenItem [style.width.%]=\"slideWidth\"></ecl-carousel-item>\n }\n <ng-content></ng-content>\n\n @if(hasControls()){\n <ecl-carousel-item #lastHiddenItem [style.width.%]=\"slideWidth\"></ecl-carousel-item>\n }\n </div>\n</div>", styles: [".ecl-carousel__slides{transition-duration:.4s}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "component", type: EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "title", "ariaHidden", "focusable", "isFlipHorizontal"] }, { kind: "component", type: EclCarouselItemComponent, selector: "ecl-carousel-item", inputs: ["id", "isCurrent"], outputs: ["slideClick"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
746
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0-next.3", type: EclCarouselComponent, isStandalone: true, selector: "ecl-carousel", inputs: { ariaLabel: ["aria-label", "ariaLabel"], isAutoplay: ["isAutoplay", "isAutoplay", booleanAttribute], playInterval: ["playInterval", "playInterval", numberAttribute] }, outputs: { slide: "slide" }, host: { listeners: { "window:resize": "onWindowResize()" }, properties: { "attr.aria-label": "this.ariaLabel", "attr.aria-roledescription": "this.ariaRoleDescription", "class": "this.cssClasses" } }, queries: [{ propertyName: "slides", predicate: i0.forwardRef(() => EclCarouselItemComponent) }], viewQueries: [{ propertyName: "carouselContainerElement", first: true, predicate: ["carouselContainer"], descendants: true }, { propertyName: "playButton", first: true, predicate: ["playButton"], descendants: true }, { propertyName: "pauseButton", first: true, predicate: ["pauseButton"], descendants: true }, { propertyName: "firstHiddenItem", first: true, predicate: ["firstHiddenItem"], descendants: true }, { propertyName: "lastHiddenItem", first: true, predicate: ["lastHiddenItem"], descendants: true }, { propertyName: "slidesContainer", first: true, predicate: ["slidesContainer"], descendants: true }, { propertyName: "navigationButtons", predicate: ["currButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "@if(hasControls()){\n<div class=\"ecl-carousel__controls\">\n <div class=\"ecl-container\">\n <div class=\"ecl-carousel__autoplay\">\n <button #playButton class=\"ecl-button ecl-button--tertiary ecl-carousel__play ecl-button--icon-only\"\n type=\"button\" [style.display]=\"isPlaying ? 'none' : 'flex'\" (keydown)=\"onPlayKeyboardPress($event)\"\n (click)=\"onPlayClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.PLAY' | translate }}\n </span>\n <ecl-icon icon=\"play-outline\" size=\"m\" class=\"ecl-button__icon ecl-carousel__icon-default\">\n </ecl-icon>\n </span>\n </button>\n\n <button #pauseButton class=\"ecl-button ecl-button--tertiary ecl-carousel__pause ecl-button--icon-only\"\n type=\"button\" [style.display]=\"isPlaying ? 'flex' : 'none'\" (keydown)=\"onPlayKeyboardPress($event)\"\n (click)=\"onPauseClick()\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.carousel.PAUSE' | translate }}\n </span>\n <ecl-icon icon=\"pause-outline\" size=\"m\" class=\"ecl-button__icon ecl-carousel__icon-default\"> </ecl-icon>\n </span>\n\n </button>\n </div>\n\n <div class=\"ecl-carousel__navigation\" role=\"tablist\" >\n @for (slide of slides; let i = $index; track slide) {\n <button #currButton [attr.aria-current]=\"i === getCurrentSlideIndex()\" [attr.tabindex]=\"i === getCurrentSlideIndex() ? null: -1\"\n class=\"ecl-button ecl-button--tertiary ecl-carousel__navigation-item\" role=\"tab\" (click)=\"onSlideControlClick(slide)\"\n (keydown)=\"onNavBtnKeyboardPress($event, i)\">\n {{ i + 1 }}\n </button>\n }\n </div>\n </div>\n</div>\n}\n<div #carouselContainer class=\"ecl-carousel__container\" [class.ecl-carousel-container--padded]=\"isPadded()\">\n <div #slidesContainer (keyup)=\"onFirstCarouselElementPress($event)\" class=\"ecl-carousel__slides\"\n [style.width.px]=\"getCarouselSlidesWidth()\" [style.left.px]=\"!isRtl ? getCarouselSlidesOffsetLeft() : null\"\n [style.right.px]=\"isRtl ? getCarouselSlidesOffsetRight() : null\"\n [style.transition-duration.s]=\"transitionDuration\" (mouseover)=\"onSlideHover()\" (mouseout)=\"onSlideHoverout()\">\n\n @if(hasControls()){\n <ecl-carousel-item #firstHiddenItem [style.width.%]=\"slideWidth\"></ecl-carousel-item>\n }\n <ng-content></ng-content>\n\n @if(hasControls()){\n <ecl-carousel-item #lastHiddenItem [style.width.%]=\"slideWidth\"></ecl-carousel-item>\n }\n </div>\n</div>", styles: [".ecl-carousel__slides{transition-duration:.4s}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "component", type: EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "title", "ariaHidden", "focusable", "isFlipHorizontal"] }, { kind: "component", type: EclCarouselItemComponent, selector: "ecl-carousel-item", inputs: ["id", "isCurrent"], outputs: ["slideClick"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
728
747
  }
729
748
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0-next.3", ngImport: i0, type: EclCarouselComponent, decorators: [{
730
749
  type: Component,
@@ -777,6 +796,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0-next.3",
777
796
  }], cssClasses: [{
778
797
  type: HostBinding,
779
798
  args: ['class']
799
+ }], onWindowResize: [{
800
+ type: HostListener,
801
+ args: ['window:resize']
780
802
  }] } });
781
803
 
782
804
  /**