@eui/ecl 16.0.0-next.12 → 16.0.0-next.14

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 (26) hide show
  1. package/docs/components/EclAppComponent.html +33 -0
  2. package/docs/components/EclExpandableComponent.html +1 -1
  3. package/docs/components/EclIconComponent.html +2 -13
  4. package/docs/components/EclSiteHeaderComponent.html +24 -29
  5. package/docs/components/EclSiteHeaderLanguagePopoverComponent.html +14 -2
  6. package/docs/dependencies.html +2 -2
  7. package/docs/js/search/search_index.js +2 -2
  8. package/docs/miscellaneous/variables.html +9 -9
  9. package/esm2022/lib/components/ecl-app/ecl-app.component.mjs +11 -5
  10. package/esm2022/lib/components/ecl-breadcrumb/ecl-breadcrumb.component.mjs +5 -3
  11. package/esm2022/lib/components/ecl-expandable/ecl-expandable.component.mjs +3 -3
  12. package/esm2022/lib/components/ecl-icon/ecl-icon.component.mjs +27 -20
  13. package/esm2022/lib/components/ecl-site-header/ecl-site-header.component.mjs +15 -13
  14. package/esm2022/lib/components/ecl-site-header/language/ecl-site-header-language-popover.component.mjs +5 -4
  15. package/fesm2022/eui-ecl.mjs +641 -623
  16. package/fesm2022/eui-ecl.mjs.map +1 -1
  17. package/lib/components/ecl-app/ecl-app.component.d.ts +3 -2
  18. package/lib/components/ecl-app/ecl-app.component.d.ts.map +1 -1
  19. package/lib/components/ecl-breadcrumb/ecl-breadcrumb.component.d.ts.map +1 -1
  20. package/lib/components/ecl-icon/ecl-icon.component.d.ts +5 -4
  21. package/lib/components/ecl-icon/ecl-icon.component.d.ts.map +1 -1
  22. package/lib/components/ecl-site-header/ecl-site-header.component.d.ts +5 -6
  23. package/lib/components/ecl-site-header/ecl-site-header.component.d.ts.map +1 -1
  24. package/lib/components/ecl-site-header/language/ecl-site-header-language-popover.component.d.ts +1 -1
  25. package/lib/components/ecl-site-header/language/ecl-site-header-language-popover.component.d.ts.map +1 -1
  26. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Directive, Input, HostBinding, Injectable, Optional, Inject, Component, ViewChild, EventEmitter, ChangeDetectionStrategy, Output, NgModule, ContentChildren, forwardRef, Self, HostListener, ElementRef, ContentChild, ViewEncapsulation } from '@angular/core';
2
+ import { Directive, Input, HostBinding, Injectable, Optional, Inject, Component, ViewChild, EventEmitter, ChangeDetectionStrategy, Output, NgModule, HostListener, ContentChildren, forwardRef, ElementRef, Self, ContentChild, ViewEncapsulation } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule, formatDate } from '@angular/common';
5
5
  import * as i2$1 from '@ngx-translate/core';
@@ -376,10 +376,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImpor
376
376
  }] }]; } });
377
377
 
378
378
  class EclIconComponent extends ECLBaseDirective {
379
- constructor(el, cd, eclThemeService) {
379
+ constructor(el, eclThemeService) {
380
380
  super();
381
381
  this.el = el;
382
- this.cd = cd;
383
382
  this.eclThemeService = eclThemeService;
384
383
  this.iconSet = 'default';
385
384
  this.size = 'xs';
@@ -387,21 +386,13 @@ class EclIconComponent extends ECLBaseDirective {
387
386
  this.ariaHidden = true;
388
387
  this.focusable = false;
389
388
  }
389
+ ngOnChanges(changes) {
390
+ if (changes['icon']) {
391
+ this.initiateIconUrl();
392
+ }
393
+ }
390
394
  ngOnInit() {
391
- this.iconUrl$ = this.eclThemeService.theme$.pipe(switchMap(theme => {
392
- switch (this.iconSet) {
393
- case 'default':
394
- return of(`assets/images/ecl/${theme}/icons/sprites/icons.svg#${this.icon}`);
395
- case 'social':
396
- return of(`assets/images/ecl/${theme}/social-icons/sprites/icons-social.svg#${this.icon}`);
397
- case 'social-media':
398
- return of(`assets/images/ecl/${theme}/icons-social-media/sprites/icons-social-media.svg#${this.icon}`);
399
- case 'flag':
400
- return of(`assets/images/ecl/${theme}/icons-flag/sprites/icons-flag.svg#${this.icon}`);
401
- default:
402
- return of(`${this.iconSet}#${this.icon}`);
403
- }
404
- }));
395
+ this.initiateIconUrl();
405
396
  }
406
397
  ngAfterViewInit() {
407
398
  const hostEl = this.getHostElement();
@@ -439,8 +430,24 @@ class EclIconComponent extends ECLBaseDirective {
439
430
  getHostParentElement(hostEl) {
440
431
  return hostEl.parentElement;
441
432
  }
442
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclIconComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: EclThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
443
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclIconComponent, selector: "ecl-icon", inputs: { iconSet: "iconSet", icon: "icon", size: "size", color: "color", transform: "transform", ariaLabelledby: "ariaLabelledby", role: "role", isInverted: "isInverted", ariaHidden: "ariaHidden", focusable: "focusable" }, viewQueries: [{ propertyName: "svgEl", first: true, predicate: ["svg"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<svg #svg\n [ngClass]=\"getClasses()\"\n [attr.aria-hidden]=\"ariaHidden\"\n [attr.aria-labelledby]=\"ariaLabelledby || null\"\n [attr.role]=\"role || null\"\n [attr.focusable]=\"focusable\">\n <use [attr.xlink:href]=\"iconUrl$ | async\"></use>\n <ng-content></ng-content>\n</svg>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
433
+ initiateIconUrl() {
434
+ this.iconUrl$ = this.eclThemeService.theme$.pipe(switchMap(theme => {
435
+ switch (this.iconSet) {
436
+ case 'default':
437
+ return of(`assets/images/ecl/${theme}/icons/sprites/icons.svg#${this.icon}`);
438
+ case 'social':
439
+ return of(`assets/images/ecl/${theme}/social-icons/sprites/icons-social.svg#${this.icon}`);
440
+ case 'social-media':
441
+ return of(`assets/images/ecl/${theme}/icons-social-media/sprites/icons-social-media.svg#${this.icon}`);
442
+ case 'flag':
443
+ return of(`assets/images/ecl/${theme}/icons-flag/sprites/icons-flag.svg#${this.icon}`);
444
+ default:
445
+ return of(`${this.iconSet}#${this.icon}`);
446
+ }
447
+ }));
448
+ }
449
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclIconComponent, deps: [{ token: i0.ElementRef }, { token: EclThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
450
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclIconComponent, selector: "ecl-icon", inputs: { iconSet: "iconSet", icon: "icon", size: "size", color: "color", transform: "transform", ariaLabelledby: "ariaLabelledby", role: "role", isInverted: "isInverted", ariaHidden: "ariaHidden", focusable: "focusable" }, viewQueries: [{ propertyName: "svgEl", first: true, predicate: ["svg"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<svg #svg\n [ngClass]=\"getClasses()\"\n [attr.aria-hidden]=\"ariaHidden\"\n [attr.aria-labelledby]=\"ariaLabelledby || null\"\n [attr.role]=\"role || null\"\n [attr.focusable]=\"focusable\">\n <use [attr.xlink:href]=\"iconUrl$ | async\"></use>\n <ng-content></ng-content>\n</svg>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
444
451
  }
445
452
  __decorate([
446
453
  coerceBoolean
@@ -457,7 +464,7 @@ __decorate([
457
464
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclIconComponent, decorators: [{
458
465
  type: Component,
459
466
  args: [{ selector: 'ecl-icon', template: "<svg #svg\n [ngClass]=\"getClasses()\"\n [attr.aria-hidden]=\"ariaHidden\"\n [attr.aria-labelledby]=\"ariaLabelledby || null\"\n [attr.role]=\"role || null\"\n [attr.focusable]=\"focusable\">\n <use [attr.xlink:href]=\"iconUrl$ | async\"></use>\n <ng-content></ng-content>\n</svg>\n" }]
460
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: EclThemeService }]; }, propDecorators: { iconSet: [{
467
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: EclThemeService }]; }, propDecorators: { iconSet: [{
461
468
  type: Input
462
469
  }], icon: [{
463
470
  type: Input
@@ -600,64 +607,32 @@ class EclDomEvent extends EclBaseEvent {
600
607
  }
601
608
  }
602
609
 
603
- class EclSiteHeaderLoginEvent extends EclBaseEvent {
604
- }
605
- class EclSiteHeaderLoginBoxToggleEvent extends EclBaseEvent {
606
- constructor(isOpen) {
610
+ class ECLClickOutsideDirective extends ECLBaseDirective {
611
+ constructor(elementRef) {
607
612
  super();
608
- this.isOpen = isOpen;
609
- }
610
- }
611
- class EclSiteHeaderLoginComponent extends ECLBaseDirective {
612
- constructor() {
613
- super(...arguments);
614
- this.isLoggedIn = false;
615
- this.class = 'ecl-site-header__login-container';
616
- this.login = new EventEmitter();
617
- this.loginBoxToggle = new EventEmitter();
618
- this.isLoginBoxActive = false;
613
+ this.elementRef = elementRef;
614
+ this.eclClickOutside = new EventEmitter();
619
615
  }
620
- ngOnChanges(changes) {
621
- const isLoggedInChange = changes.isLoggedIn;
622
- if (isLoggedInChange && isLoggedInChange.previousValue == true) {
623
- this.isLoginBoxActive = false;
616
+ onClick(target) {
617
+ const clickedInside = this.elementRef.nativeElement.contains(target);
618
+ if (!clickedInside) {
619
+ this.eclClickOutside.emit();
624
620
  }
625
621
  }
626
- getLoginBoxCssClasses() {
627
- return [
628
- 'ecl-site-header__login-box',
629
- this.isLoginBoxActive ? 'ecl-site-header__login-box--active' : ''
630
- ].join(' ');
631
- }
632
- onLoginClick(evt) {
633
- const event = new EclSiteHeaderLoginEvent();
634
- this.login.next(event);
635
- evt.preventDefault();
636
- }
637
- onLoginBoxToggle(evt) {
638
- this.isLoginBoxActive = !this.isLoginBoxActive;
639
- const event = new EclSiteHeaderLoginBoxToggleEvent(this.isLoginBoxActive);
640
- this.loginBoxToggle.next(event);
641
- evt.preventDefault();
642
- }
643
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSiteHeaderLoginComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
644
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclSiteHeaderLoginComponent, selector: "ecl-site-header-login", inputs: { isLoggedIn: "isLoggedIn" }, outputs: { login: "login", loginBoxToggle: "loginBoxToggle" }, host: { properties: { "class": "this.class" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!isLoggedIn\">\n <a href=\"#\"\n class=\"ecl-button ecl-button--ghost ecl-site-header__login-toggle\"\n [attr.aria-expanded]=\"isLoginBoxActive\"\n (click)=\"onLoginClick($event)\">\n <ecl-icon icon=\"log-in\"\n size=\"s\"\n class=\"ecl-site-header__icon\"></ecl-icon>\n {{ 'ecl.site-header.LOGIN' | translate }}\n </a>\n</ng-container>\n<ng-container *ngIf=\"isLoggedIn\">\n <a href=\"#\"\n class=\"ecl-button ecl-button--ghost ecl-site-header__login-toggle\"\n aria-controls=\"login-box-id\"\n [attr.aria-expanded]=\"isLoginBoxActive\"\n (click)=\"onLoginBoxToggle($event)\">\n <ecl-icon icon=\"logged-in\"\n size=\"s\"\n class=\"ecl-site-header__icon\"></ecl-icon>\n {{ 'ecl.site-header.LOGGED-IN' | translate }}\n <ecl-icon icon=\"corner-arrow\"\n size=\"xs\"\n class=\"ecl-site-header__login-arrow\"></ecl-icon>\n </a>\n <div class=\"{{ getLoginBoxCssClasses() }}\">\n <ng-content></ng-content>\n </div>\n</ng-container>", styles: [".ecl-site-header__login-toggle .ecl-site-header__login-arrow{display:inline-flex}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "isInverted", "ariaHidden", "focusable"] }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
622
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ECLClickOutsideDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
623
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.4", type: ECLClickOutsideDirective, isStandalone: true, selector: "[eclClickOutside]", outputs: { eclClickOutside: "eclClickOutside" }, host: { listeners: { "document:click": "onClick($event.target)" } }, usesInheritance: true, ngImport: i0 }); }
645
624
  }
646
- __decorate([
647
- coerceBoolean
648
- ], EclSiteHeaderLoginComponent.prototype, "isLoggedIn", void 0);
649
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSiteHeaderLoginComponent, decorators: [{
650
- type: Component,
651
- args: [{ selector: 'ecl-site-header-login', template: "<ng-container *ngIf=\"!isLoggedIn\">\n <a href=\"#\"\n class=\"ecl-button ecl-button--ghost ecl-site-header__login-toggle\"\n [attr.aria-expanded]=\"isLoginBoxActive\"\n (click)=\"onLoginClick($event)\">\n <ecl-icon icon=\"log-in\"\n size=\"s\"\n class=\"ecl-site-header__icon\"></ecl-icon>\n {{ 'ecl.site-header.LOGIN' | translate }}\n </a>\n</ng-container>\n<ng-container *ngIf=\"isLoggedIn\">\n <a href=\"#\"\n class=\"ecl-button ecl-button--ghost ecl-site-header__login-toggle\"\n aria-controls=\"login-box-id\"\n [attr.aria-expanded]=\"isLoginBoxActive\"\n (click)=\"onLoginBoxToggle($event)\">\n <ecl-icon icon=\"logged-in\"\n size=\"s\"\n class=\"ecl-site-header__icon\"></ecl-icon>\n {{ 'ecl.site-header.LOGGED-IN' | translate }}\n <ecl-icon icon=\"corner-arrow\"\n size=\"xs\"\n class=\"ecl-site-header__login-arrow\"></ecl-icon>\n </a>\n <div class=\"{{ getLoginBoxCssClasses() }}\">\n <ng-content></ng-content>\n </div>\n</ng-container>", styles: [".ecl-site-header__login-toggle .ecl-site-header__login-arrow{display:inline-flex}\n"] }]
652
- }], propDecorators: { isLoggedIn: [{
653
- type: Input
654
- }], class: [{
655
- type: HostBinding,
656
- args: ['class']
657
- }], login: [{
658
- type: Output
659
- }], loginBoxToggle: [{
625
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ECLClickOutsideDirective, decorators: [{
626
+ type: Directive,
627
+ args: [{
628
+ selector: '[eclClickOutside]',
629
+ standalone: true
630
+ }]
631
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { eclClickOutside: [{
660
632
  type: Output
633
+ }], onClick: [{
634
+ type: HostListener,
635
+ args: ['document:click', ['$event.target']]
661
636
  }] } });
662
637
 
663
638
  const hasNextSiblingWithAttribute = (element, attribute) => {
@@ -689,6 +664,104 @@ const hasPreviousSiblingWithAttribute = (element, attribute) => {
689
664
  }
690
665
  };
691
666
 
667
+ class EclLinkDirective extends ECLBaseDirective {
668
+ get cssClasses() {
669
+ return [
670
+ super.getCssClasses('ecl-link'),
671
+ this.variant ? `ecl-link--${this.variant}` : '',
672
+ ].join(' ').trim();
673
+ }
674
+ get hasRightIcon() {
675
+ return this.isIconOnRightSide(this.eclIconComponents.toArray());
676
+ }
677
+ get hasLeftIcon() {
678
+ return this.isIconOnLeftSide(this.eclIconComponents.toArray());
679
+ }
680
+ get hasIcon() {
681
+ return this.eclIconComponents && this.eclIconComponents.length > 0;
682
+ }
683
+ constructor(el) {
684
+ super();
685
+ this.el = el;
686
+ }
687
+ ngAfterContentInit() {
688
+ if (this.eclIconComponents) {
689
+ setTimeout(() => {
690
+ this.eclIconComponents.forEach(icn => {
691
+ if (this.isIconOnLeftSide(this.eclIconComponents.toArray())) {
692
+ icn.class = 'ecl-link__icon ecl-link__icon--before';
693
+ }
694
+ else if (this.isIconOnRightSide(this.eclIconComponents.toArray())) {
695
+ icn.class = 'ecl-link__icon ecl-link__icon--after';
696
+ }
697
+ else {
698
+ icn.class = 'ecl-link__icon ecl-link__icon--before';
699
+ }
700
+ });
701
+ });
702
+ }
703
+ }
704
+ isIconOnRightSide(icons) {
705
+ return !!icons.find(icn => {
706
+ const iconEl = icn.el.nativeElement;
707
+ if (hasPreviousSiblingWithAttribute(iconEl, 'eclLinkLabel')) {
708
+ return true;
709
+ }
710
+ return false;
711
+ });
712
+ }
713
+ isIconOnLeftSide(icons) {
714
+ return !!icons.find(icn => {
715
+ const iconEl = icn.el.nativeElement;
716
+ if (hasNextSiblingWithAttribute(iconEl, 'eclLinkLabel')) {
717
+ return true;
718
+ }
719
+ return false;
720
+ });
721
+ }
722
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclLinkDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
723
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.4", type: EclLinkDirective, selector: "[eclLink]", inputs: { variant: "variant", isNegative: "isNegative", isNoVisited: "isNoVisited" }, host: { properties: { "class.ecl-link--negative": "this.isNegative", "class.ecl-link--no-visited": "this.isNoVisited", "class": "this.cssClasses", "class.ecl-link--icon-after": "this.hasRightIcon", "class.ecl-link--icon-before": "this.hasLeftIcon", "class.ecl-link--icon": "this.hasIcon" } }, queries: [{ propertyName: "eclIconComponents", predicate: i0.forwardRef(function () { return EclIconComponent; }) }], usesInheritance: true, ngImport: i0 }); }
724
+ }
725
+ __decorate([
726
+ coerceBoolean
727
+ ], EclLinkDirective.prototype, "isNegative", void 0);
728
+ __decorate([
729
+ coerceBoolean
730
+ ], EclLinkDirective.prototype, "isNoVisited", void 0);
731
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclLinkDirective, decorators: [{
732
+ type: Directive,
733
+ args: [{
734
+ selector: '[eclLink]'
735
+ }]
736
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { variant: [{
737
+ type: Input
738
+ }], isNegative: [{
739
+ type: Input
740
+ }, {
741
+ type: HostBinding,
742
+ args: ['class.ecl-link--negative']
743
+ }], isNoVisited: [{
744
+ type: Input
745
+ }, {
746
+ type: HostBinding,
747
+ args: ['class.ecl-link--no-visited']
748
+ }], eclIconComponents: [{
749
+ type: ContentChildren,
750
+ args: [forwardRef(() => EclIconComponent)]
751
+ }], cssClasses: [{
752
+ type: HostBinding,
753
+ args: ['class']
754
+ }], hasRightIcon: [{
755
+ type: HostBinding,
756
+ args: ['class.ecl-link--icon-after']
757
+ }], hasLeftIcon: [{
758
+ type: HostBinding,
759
+ args: ['class.ecl-link--icon-before']
760
+ }], hasIcon: [{
761
+ type: HostBinding,
762
+ args: ['class.ecl-link--icon']
763
+ }] } });
764
+
692
765
  class EclButtonComponent extends ECLBaseDirective {
693
766
  constructor() {
694
767
  super(...arguments);
@@ -736,679 +809,614 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImpor
736
809
  args: ['class']
737
810
  }] } });
738
811
 
739
- class EclButtonLabelDirective extends ECLBaseDirective {
740
- get cssClasses() {
741
- return [
742
- super.getCssClasses('ecl-button__label'),
743
- ].join(' ').trim();
812
+ class EclSiteHeaderLanguageSelectedEvent extends EclBaseEvent {
813
+ constructor(language) {
814
+ super();
815
+ this.language = language;
744
816
  }
745
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclButtonLabelDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
746
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.4", type: EclButtonLabelDirective, selector: "[eclButtonLabel]", host: { properties: { "class": "this.cssClasses" } }, usesInheritance: true, ngImport: i0 }); }
747
817
  }
748
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclButtonLabelDirective, decorators: [{
749
- type: Directive,
750
- args: [{
751
- selector: '[eclButtonLabel]'
752
- }]
753
- }], propDecorators: { cssClasses: [{
754
- type: HostBinding,
755
- args: ['class']
756
- }] } });
757
-
758
- class EclFormGroupComponent extends ECLBaseDirective {
818
+ class EclSiteHeaderLanguageCloseEvent extends EclBaseEvent {
819
+ }
820
+ class EclSiteHeaderLanguagePopoverComponent extends ECLBaseDirective {
821
+ constructor(popoverElementRef) {
822
+ super();
823
+ this.popoverElementRef = popoverElementRef;
824
+ this.euLanguages = [];
825
+ this.nonEuLanguages = [];
826
+ this.isHidden = false;
827
+ this.isPushRight = false;
828
+ this.isStack = false;
829
+ this.isFull = false;
830
+ this.languageClosed = new EventEmitter();
831
+ this.languageSelected = new EventEmitter();
832
+ this.role = 'dialog';
833
+ this.labelledBy = 'ecl-site-header__language-title';
834
+ }
759
835
  get cssClasses() {
760
836
  return [
761
- super.getCssClasses('ecl-form-group'),
837
+ super.getCssClasses('ecl-site-header__language-container'),
838
+ this.isPushRight ? 'ecl-site-header__language-container--push-right' : '',
839
+ this.isFull ? 'ecl-site-header__language-container--full' : '',
762
840
  ].join(' ').trim();
763
841
  }
764
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclFormGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
765
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclFormGroupComponent, selector: "[eclFormGroup], ecl-form-group", host: { properties: { "class": "this.cssClasses" } }, usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>" }); }
766
- }
767
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclFormGroupComponent, decorators: [{
768
- type: Component,
769
- args: [{ selector: '[eclFormGroup], ecl-form-group', template: "<ng-content></ng-content>" }]
770
- }], propDecorators: { cssClasses: [{
771
- type: HostBinding,
772
- args: ['class']
773
- }] } });
774
-
775
- class EclFormLabelComponent extends ECLBaseDirective {
776
- constructor() {
777
- super(...arguments);
778
- this.isOptional = false;
779
- this.isInvalid = false;
780
- this.isDisabled = false;
781
- this.isRequired = false;
842
+ get isModal() {
843
+ return !this.isHidden || undefined;
782
844
  }
783
- get cssClasses() {
784
- return [
785
- super.getCssClasses('ecl-form-label'),
786
- this.isInvalid ? 'ecl-form-label--invalid' : '',
787
- this.isDisabled ? 'ecl-form-label--disabled' : '',
788
- ].join(' ').trim();
845
+ get isDropdownHidden() {
846
+ return this.isHidden || undefined;
789
847
  }
790
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclFormLabelComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
791
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclFormLabelComponent, selector: "[eclFormLabel]", inputs: { isOptional: "isOptional", isInvalid: "isInvalid", isDisabled: "isDisabled", isRequired: "isRequired" }, host: { properties: { "class": "this.cssClasses" } }, usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n<span *ngIf=\"isOptional\" class=\"ecl-form-label__optional\"> ({{ 'ecl.form-label.OPTIONAL' | translate }})</span>\n<span *ngIf=\"isRequired\" class=\"ecl-form-label__required\">*</span>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
848
+ onCloseClick() {
849
+ this.languageClosed.next(new EclSiteHeaderLanguageCloseEvent());
850
+ }
851
+ onLanguageClick(language, evt) {
852
+ this.languageCode = language.code;
853
+ this.languageSelected.next(new EclSiteHeaderLanguageSelectedEvent(language));
854
+ evt.preventDefault();
855
+ }
856
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSiteHeaderLanguagePopoverComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
857
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclSiteHeaderLanguagePopoverComponent, selector: "ecl-site-header-language-popover", inputs: { languageCode: "languageCode", euLanguages: "euLanguages", nonEuLanguages: "nonEuLanguages", euColumnsCount: "euColumnsCount", nonEuColumnsCount: "nonEuColumnsCount", isHidden: "isHidden", isPushRight: "isPushRight", isStack: "isStack", isFull: "isFull", rightPosition: "rightPosition", languageArrowPosition: "languageArrowPosition" }, outputs: { languageClosed: "languageClosed", languageSelected: "languageSelected" }, host: { properties: { "style.right": "this.rightPosition", "style.--ecl-language-arrow-position": "this.languageArrowPosition", "attr.role": "this.role", "attr.aria-labelledby": "this.labelledBy", "class": "this.cssClasses", "attr.aria-modal": "this.isModal", "attr.hidden": "this.isDropdownHidden" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"ecl-site-header__language-header\">\n <div class=\"ecl-site-header__language-title\">\n {{ 'ecl.language-list.SELECT-LANGUAGE' | translate }}\n </div>\n <button eclButton\n variant=\"ghost\"\n class=\"ecl-site-header__language-close\"\n (click)=\"onCloseClick()\">\n <span class=\"ecl-u-sr-only\">\n {{ 'ecl.common.CLOSE' | translate }}\n </span>\n <ecl-icon icon=\"close-filled\"\n size=\"s\">\n </ecl-icon>\n </button>\n</div>\n\n<div class=\"ecl-site-header__language-content\" \n [class.ecl-site-header__language-content--stack]=\"isStack\">\n <div *ngIf=\"euLanguages.length\" \n class=\"ecl-site-header__language-category ecl-site-header__language-category--{{ euColumnsCount }}-col\">\n <div class=\"ecl-site-header__language-category-title\">\n {{ 'ecl.language-list.EU-LANGUAGES' | translate }}\n </div>\n <ul class=\"ecl-site-header__language-list\">\n <li *ngFor=\"let item of euLanguages\"\n class=\"ecl-site-header__language-item\">\n <a eclLink\n href=\"#\"\n variant=\"standalone\"\n class=\"ecl-site-header__language-link\"\n [class.ecl-site-header__language-link--active]=\"item.code === languageCode\"\n (click)=\"onLanguageClick(item, $event)\">\n <span class=\"ecl-site-header__language-link-code\">{{ item.code }}</span>\n <span class=\"ecl-site-header__language-link-label\">{{ item.label }}</span>\n </a>\n </li>\n </ul>\n </div>\n <div *ngIf=\"nonEuLanguages.length\" \n class=\"ecl-site-header__language-category ecl-site-header__language-category--{{ nonEuColumnsCount }}-col\">\n <div class=\"ecl-site-header__language-category-title\">\n {{ 'ecl.language-list.NON-EU-LANGUAGES' | translate }}\n </div>\n <ul class=\"ecl-site-header__language-list\">\n <li *ngFor=\"let item of nonEuLanguages\"\n class=\"ecl-site-header__language-item\">\n <a eclLink\n href=\"#\"\n variant=\"standalone\"\n class=\"ecl-site-header__language-link\"\n [class.ecl-site-header__language-link--active]=\"item.code === languageCode\"\n (click)=\"onLanguageClick(item, $event)\">\n <span class=\"ecl-site-header__language-link-code\">{{ item.code }}</span>\n <span class=\"ecl-site-header__language-link-label\">{{ item.label }}</span>\n </a>\n </li>\n </ul>\n </div>\n</div>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: EclLinkDirective, selector: "[eclLink]", inputs: ["variant", "isNegative", "isNoVisited"] }, { kind: "component", type: EclButtonComponent, selector: "button[eclButton], button[ecl-button], a[eclButton]", inputs: ["variant", "containerStyleClass"] }, { kind: "component", type: EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "isInverted", "ariaHidden", "focusable"] }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
792
858
  }
793
- __decorate([
794
- coerceBoolean
795
- ], EclFormLabelComponent.prototype, "isOptional", void 0);
796
- __decorate([
797
- coerceBoolean
798
- ], EclFormLabelComponent.prototype, "isInvalid", void 0);
799
- __decorate([
800
- coerceBoolean
801
- ], EclFormLabelComponent.prototype, "isDisabled", void 0);
802
- __decorate([
803
- coerceBoolean
804
- ], EclFormLabelComponent.prototype, "isRequired", void 0);
805
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclFormLabelComponent, decorators: [{
859
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSiteHeaderLanguagePopoverComponent, decorators: [{
806
860
  type: Component,
807
- args: [{ selector: '[eclFormLabel]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n<span *ngIf=\"isOptional\" class=\"ecl-form-label__optional\"> ({{ 'ecl.form-label.OPTIONAL' | translate }})</span>\n<span *ngIf=\"isRequired\" class=\"ecl-form-label__required\">*</span>\n" }]
808
- }], propDecorators: { isOptional: [{
861
+ args: [{ selector: 'ecl-site-header-language-popover', template: "<div class=\"ecl-site-header__language-header\">\n <div class=\"ecl-site-header__language-title\">\n {{ 'ecl.language-list.SELECT-LANGUAGE' | translate }}\n </div>\n <button eclButton\n variant=\"ghost\"\n class=\"ecl-site-header__language-close\"\n (click)=\"onCloseClick()\">\n <span class=\"ecl-u-sr-only\">\n {{ 'ecl.common.CLOSE' | translate }}\n </span>\n <ecl-icon icon=\"close-filled\"\n size=\"s\">\n </ecl-icon>\n </button>\n</div>\n\n<div class=\"ecl-site-header__language-content\" \n [class.ecl-site-header__language-content--stack]=\"isStack\">\n <div *ngIf=\"euLanguages.length\" \n class=\"ecl-site-header__language-category ecl-site-header__language-category--{{ euColumnsCount }}-col\">\n <div class=\"ecl-site-header__language-category-title\">\n {{ 'ecl.language-list.EU-LANGUAGES' | translate }}\n </div>\n <ul class=\"ecl-site-header__language-list\">\n <li *ngFor=\"let item of euLanguages\"\n class=\"ecl-site-header__language-item\">\n <a eclLink\n href=\"#\"\n variant=\"standalone\"\n class=\"ecl-site-header__language-link\"\n [class.ecl-site-header__language-link--active]=\"item.code === languageCode\"\n (click)=\"onLanguageClick(item, $event)\">\n <span class=\"ecl-site-header__language-link-code\">{{ item.code }}</span>\n <span class=\"ecl-site-header__language-link-label\">{{ item.label }}</span>\n </a>\n </li>\n </ul>\n </div>\n <div *ngIf=\"nonEuLanguages.length\" \n class=\"ecl-site-header__language-category ecl-site-header__language-category--{{ nonEuColumnsCount }}-col\">\n <div class=\"ecl-site-header__language-category-title\">\n {{ 'ecl.language-list.NON-EU-LANGUAGES' | translate }}\n </div>\n <ul class=\"ecl-site-header__language-list\">\n <li *ngFor=\"let item of nonEuLanguages\"\n class=\"ecl-site-header__language-item\">\n <a eclLink\n href=\"#\"\n variant=\"standalone\"\n class=\"ecl-site-header__language-link\"\n [class.ecl-site-header__language-link--active]=\"item.code === languageCode\"\n (click)=\"onLanguageClick(item, $event)\">\n <span class=\"ecl-site-header__language-link-code\">{{ item.code }}</span>\n <span class=\"ecl-site-header__language-link-label\">{{ item.label }}</span>\n </a>\n </li>\n </ul>\n </div>\n</div>" }]
862
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { languageCode: [{
809
863
  type: Input
810
- }], isInvalid: [{
864
+ }], euLanguages: [{
811
865
  type: Input
812
- }], isDisabled: [{
866
+ }], nonEuLanguages: [{
813
867
  type: Input
814
- }], isRequired: [{
868
+ }], euColumnsCount: [{
869
+ type: Input
870
+ }], nonEuColumnsCount: [{
871
+ type: Input
872
+ }], isHidden: [{
873
+ type: Input
874
+ }], isPushRight: [{
815
875
  type: Input
876
+ }], isStack: [{
877
+ type: Input
878
+ }], isFull: [{
879
+ type: Input
880
+ }], rightPosition: [{
881
+ type: Input
882
+ }, {
883
+ type: HostBinding,
884
+ args: ['style.right']
885
+ }], languageArrowPosition: [{
886
+ type: Input
887
+ }, {
888
+ type: HostBinding,
889
+ args: ['style.--ecl-language-arrow-position']
890
+ }], languageClosed: [{
891
+ type: Output
892
+ }], languageSelected: [{
893
+ type: Output
894
+ }], role: [{
895
+ type: HostBinding,
896
+ args: ['attr.role']
897
+ }], labelledBy: [{
898
+ type: HostBinding,
899
+ args: ['attr.aria-labelledby']
816
900
  }], cssClasses: [{
817
901
  type: HostBinding,
818
902
  args: ['class']
903
+ }], isModal: [{
904
+ type: HostBinding,
905
+ args: ['attr.aria-modal']
906
+ }], isDropdownHidden: [{
907
+ type: HostBinding,
908
+ args: ['attr.hidden']
819
909
  }] } });
820
910
 
821
- class EclTextInputDirective extends ECLBaseDirective {
911
+ class EclSiteHeaderLanguageClickEvent extends EclBaseEvent {
912
+ }
913
+ class EclSiteHeaderLanguageComponent extends ECLBaseDirective {
914
+ get languageCodes() {
915
+ return this._languageCodes;
916
+ }
917
+ set languageCodes(value) {
918
+ this._languageCodes = value;
919
+ this.updateLanguages();
920
+ }
822
921
  get cssClasses() {
823
922
  return [
824
- super.getCssClasses('ecl-text-input'),
825
- this.eclSize ? `ecl-text-input--${this.eclSize}` : '',
923
+ super.getCssClasses('ecl-site-header__language'),
826
924
  ].join(' ').trim();
827
925
  }
828
- constructor(ngControl) {
926
+ constructor(eclLanguageService, eclSiteHeader) {
829
927
  super();
830
- this.ngControl = ngControl;
831
- this.type = 'text';
832
- this.eclSize = 'm';
833
- this.isInvalid = false;
928
+ this.eclLanguageService = eclLanguageService;
929
+ this.eclSiteHeader = eclSiteHeader;
930
+ this.languageCode = 'en';
931
+ this._languageCodes = [];
932
+ this.languageClick = new EventEmitter();
933
+ this.languageSelected = new EventEmitter();
934
+ this.MOBILE_BREAKPOINT = 768;
935
+ this.LANGUAGE_MAX_COLUMNS = 8;
936
+ this.isLanguagesDropdownVisible = false;
937
+ this.euLanguages = [];
938
+ this.nonEuLanguages = [];
939
+ this.euColumnsCount = 1;
940
+ this.nonEuColumnsCount = 1;
834
941
  }
835
- get invalidState() {
836
- if (this.ngControl) {
837
- return this.ngControl.status === 'INVALID' && this.ngControl.touched;
942
+ ngOnInit() {
943
+ this.updateLanguages();
944
+ }
945
+ ngOnChanges(changes) {
946
+ if (changes['languageCodes']) {
947
+ this.updateLanguages();
948
+ }
949
+ }
950
+ getLanguageLabel() {
951
+ return this.eclLanguageService.getLanguageByCode(this.languageCode)?.label;
952
+ }
953
+ onLanguageClick(evt) {
954
+ this.isLanguagesDropdownVisible = !this.isLanguagesDropdownVisible;
955
+ if (this.isLanguagesDropdownVisible) {
956
+ this.calculatePopoverPosition();
838
957
  }
839
958
  else {
840
- return this.isInvalid;
959
+ setTimeout(() => {
960
+ this.isFull = false;
961
+ this.isStack = false;
962
+ this.isPushRight = false;
963
+ this.rightPosition = undefined;
964
+ this.languageArrowPosition = undefined;
965
+ });
841
966
  }
967
+ this.languageClick.next(new EclSiteHeaderLanguageClickEvent());
968
+ evt.preventDefault();
842
969
  }
843
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclTextInputDirective, deps: [{ token: i1$1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
844
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.4", type: EclTextInputDirective, selector: "input[eclTextInput]", inputs: { eclSize: "eclSize", isInvalid: "isInvalid" }, host: { properties: { "attr.type": "this.type", "class": "this.cssClasses", "class.ecl-text-input--invalid": "this.invalidState" } }, usesInheritance: true, ngImport: i0 }); }
970
+ onLanguageClosed(evt) {
971
+ this.isLanguagesDropdownVisible = false;
972
+ }
973
+ onLanguageSelected(evt) {
974
+ this.languageCode = evt.language.code;
975
+ this.isLanguagesDropdownVisible = false;
976
+ this.languageSelected.next(new EclSiteHeaderLanguageSelectedEvent(evt.language));
977
+ }
978
+ onClickOutside() {
979
+ this.isLanguagesDropdownVisible = false;
980
+ }
981
+ onEscapeKeydownHandler() {
982
+ this.isLanguagesDropdownVisible = false;
983
+ }
984
+ hasLanguageCodes() {
985
+ return this.languageCodes && this.languageCodes.length > 0;
986
+ }
987
+ updateLanguages() {
988
+ const languages = this.eclLanguageService.getLanguagesByCodes(this.languageCodes);
989
+ this.euLanguages = languages.filter(item => {
990
+ return this.eclLanguageService.isEuLanguage(item.code);
991
+ });
992
+ this.nonEuLanguages = languages.filter(item => {
993
+ return !this.eclLanguageService.isEuLanguage(item.code);
994
+ });
995
+ this.euColumnsCount = Math.ceil(this.euLanguages.length / this.LANGUAGE_MAX_COLUMNS);
996
+ this.nonEuColumnsCount = Math.ceil(this.nonEuLanguages.length / this.LANGUAGE_MAX_COLUMNS);
997
+ }
998
+ calculatePopoverPosition() {
999
+ setTimeout(() => {
1000
+ if (this.hasLanguageCodes()) {
1001
+ const arrowSize = '0.5rem';
1002
+ const containerElement = this.eclSiteHeader.topContainerElement;
1003
+ const containerRect = containerElement.getBoundingClientRect();
1004
+ const linkRect = this.languageLinkElement.getBoundingClientRect();
1005
+ const popoverRect = this.languagePopoverElement.getBoundingClientRect();
1006
+ const screenWidth = window.innerWidth;
1007
+ const vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);
1008
+ this.isFull = false;
1009
+ this.isStack = false;
1010
+ this.isPushRight = false;
1011
+ this.rightPosition = undefined;
1012
+ this.languageArrowPosition = undefined;
1013
+ if (popoverRect.width > containerRect.width) {
1014
+ this.isStack = true;
1015
+ if (this.nonEuLanguages.length) {
1016
+ this.nonEuColumnsCount = Math.max(this.euColumnsCount, this.nonEuColumnsCount);
1017
+ }
1018
+ }
1019
+ if (popoverRect.right > screenWidth) {
1020
+ const arrowPosition = containerRect.right - linkRect.right + linkRect.width / 2;
1021
+ this.isPushRight = true;
1022
+ this.rightPosition = `-${containerRect.right - linkRect.right}px`;
1023
+ this.languageArrowPosition = `calc(${arrowPosition}px - ${arrowSize})`;
1024
+ }
1025
+ if (vw < this.MOBILE_BREAKPOINT) {
1026
+ const arrowPosition = popoverRect.right - linkRect.right + linkRect.width / 2;
1027
+ this.isFull = true;
1028
+ this.languageArrowPosition = `calc(${arrowPosition}px - ${arrowSize})`;
1029
+ }
1030
+ }
1031
+ });
1032
+ }
1033
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSiteHeaderLanguageComponent, deps: [{ token: EclLanguageService }, { token: EclSiteHeaderComponent }], target: i0.ɵɵFactoryTarget.Component }); }
1034
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclSiteHeaderLanguageComponent, selector: "ecl-site-header-language", inputs: { languageCode: "languageCode", languageCodes: "languageCodes", languageLabel: "languageLabel" }, outputs: { languageClick: "languageClick", languageSelected: "languageSelected" }, host: { listeners: { "eclClickOutside": "onClickOutside()", "document:keydown.escape": "onEscapeKeydownHandler()" }, properties: { "class": "this.cssClasses" } }, viewQueries: [{ propertyName: "languagePopoverElement", first: true, predicate: ["languagePopover"], descendants: true, read: ElementRef }, { propertyName: "languageLinkElement", first: true, predicate: ["languageLink"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, hostDirectives: [{ directive: ECLClickOutsideDirective, outputs: ["eclClickOutside", "eclClickOutside"] }], ngImport: i0, template: "<a href=\"#\"\n #languageLink\n class=\"ecl-button ecl-button--ghost ecl-site-header__language-selector ecl-u-d-block\"\n aria-controls=\"language-list-overlay\"\n [attr.aria-label]=\"'ecl.language-list.SELECT-LANGUAGE' | translate\"\n [attr.aria-expanded]=\"isLanguagesDropdownVisible\"\n (click)=\"onLanguageClick($event)\">\n <span class=\"ecl-site-header__language-icon\">\n <ecl-icon icon=\"language\"\n size=\"s\"\n class=\"ecl-site-header__icon\"></ecl-icon>\n <span class=\"ecl-site-header__language-code\">{{ languageCode }}</span>\n </span>\n {{ getLanguageLabel() }}\n</a>\n\n<ecl-site-header-language-popover \n #languagePopover\n *ngIf=\"hasLanguageCodes()\"\n [languageCode]=\"languageCode\"\n [euLanguages]=\"euLanguages\"\n [nonEuLanguages]=\"nonEuLanguages\"\n [euColumnsCount]=\"euColumnsCount\"\n [nonEuColumnsCount]=\"nonEuColumnsCount\"\n [isHidden]=\"!isLanguagesDropdownVisible\" \n [isStack]=\"isStack\"\n [isPushRight]=\"isPushRight\"\n [isFull]=\"isFull\"\n [rightPosition]=\"rightPosition\"\n [languageArrowPosition]=\"languageArrowPosition\"\n (languageSelected)=\"onLanguageSelected($event)\"\n (languageClosed)=\"onLanguageClosed($event)\">\n</ecl-site-header-language-popover>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "isInverted", "ariaHidden", "focusable"] }, { kind: "component", type: EclSiteHeaderLanguagePopoverComponent, selector: "ecl-site-header-language-popover", inputs: ["languageCode", "euLanguages", "nonEuLanguages", "euColumnsCount", "nonEuColumnsCount", "isHidden", "isPushRight", "isStack", "isFull", "rightPosition", "languageArrowPosition"], outputs: ["languageClosed", "languageSelected"] }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
845
1035
  }
846
1036
  __decorate([
847
- coerceBoolean
848
- ], EclTextInputDirective.prototype, "isInvalid", void 0);
849
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclTextInputDirective, decorators: [{
850
- type: Directive,
851
- args: [{
852
- selector: 'input[eclTextInput]',
853
- }]
854
- }], ctorParameters: function () { return [{ type: i1$1.NgControl, decorators: [{
855
- type: Optional
856
- }, {
857
- type: Self
858
- }] }]; }, propDecorators: { type: [{
859
- type: HostBinding,
860
- args: ['attr.type']
861
- }], eclSize: [{
1037
+ coerceElement
1038
+ ], EclSiteHeaderLanguageComponent.prototype, "languagePopoverElement", void 0);
1039
+ __decorate([
1040
+ coerceElement
1041
+ ], EclSiteHeaderLanguageComponent.prototype, "languageLinkElement", void 0);
1042
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSiteHeaderLanguageComponent, decorators: [{
1043
+ type: Component,
1044
+ args: [{ selector: 'ecl-site-header-language', hostDirectives: [{
1045
+ directive: ECLClickOutsideDirective,
1046
+ outputs: ['eclClickOutside'],
1047
+ }], template: "<a href=\"#\"\n #languageLink\n class=\"ecl-button ecl-button--ghost ecl-site-header__language-selector ecl-u-d-block\"\n aria-controls=\"language-list-overlay\"\n [attr.aria-label]=\"'ecl.language-list.SELECT-LANGUAGE' | translate\"\n [attr.aria-expanded]=\"isLanguagesDropdownVisible\"\n (click)=\"onLanguageClick($event)\">\n <span class=\"ecl-site-header__language-icon\">\n <ecl-icon icon=\"language\"\n size=\"s\"\n class=\"ecl-site-header__icon\"></ecl-icon>\n <span class=\"ecl-site-header__language-code\">{{ languageCode }}</span>\n </span>\n {{ getLanguageLabel() }}\n</a>\n\n<ecl-site-header-language-popover \n #languagePopover\n *ngIf=\"hasLanguageCodes()\"\n [languageCode]=\"languageCode\"\n [euLanguages]=\"euLanguages\"\n [nonEuLanguages]=\"nonEuLanguages\"\n [euColumnsCount]=\"euColumnsCount\"\n [nonEuColumnsCount]=\"nonEuColumnsCount\"\n [isHidden]=\"!isLanguagesDropdownVisible\" \n [isStack]=\"isStack\"\n [isPushRight]=\"isPushRight\"\n [isFull]=\"isFull\"\n [rightPosition]=\"rightPosition\"\n [languageArrowPosition]=\"languageArrowPosition\"\n (languageSelected)=\"onLanguageSelected($event)\"\n (languageClosed)=\"onLanguageClosed($event)\">\n</ecl-site-header-language-popover>\n" }]
1048
+ }], ctorParameters: function () { return [{ type: EclLanguageService }, { type: EclSiteHeaderComponent }]; }, propDecorators: { languageCode: [{
862
1049
  type: Input
863
- }], isInvalid: [{
1050
+ }], languageCodes: [{
1051
+ type: Input
1052
+ }], languageLabel: [{
864
1053
  type: Input
1054
+ }], languagePopoverElement: [{
1055
+ type: ViewChild,
1056
+ args: ['languagePopover', { read: ElementRef }]
1057
+ }], languageLinkElement: [{
1058
+ type: ViewChild,
1059
+ args: ['languageLink', { read: ElementRef }]
1060
+ }], languageClick: [{
1061
+ type: Output
1062
+ }], languageSelected: [{
1063
+ type: Output
865
1064
  }], cssClasses: [{
866
1065
  type: HostBinding,
867
1066
  args: ['class']
868
- }], invalidState: [{
869
- type: HostBinding,
870
- args: ['class.ecl-text-input--invalid']
1067
+ }], onClickOutside: [{
1068
+ type: HostListener,
1069
+ args: ['eclClickOutside']
1070
+ }], onEscapeKeydownHandler: [{
1071
+ type: HostListener,
1072
+ args: ['document:keydown.escape']
871
1073
  }] } });
872
1074
 
873
- class EclSearchFormEvent extends EclBaseEvent {
874
- constructor(keyword) {
1075
+ class EclSiteHeaderLoginEvent extends EclBaseEvent {
1076
+ }
1077
+ class EclSiteHeaderLoginBoxToggleEvent extends EclBaseEvent {
1078
+ constructor(isOpen) {
875
1079
  super();
876
- this.keyword = keyword;
1080
+ this.isOpen = isOpen;
877
1081
  }
878
1082
  }
879
- const ECL_SEARCH_FORM_VALUE_ACCESSOR = {
880
- provide: NG_VALUE_ACCESSOR,
881
- useExisting: forwardRef(() => EclSearchFormComponent),
882
- multi: true,
883
- };
884
- const noop$3 = () => { };
885
- class EclSearchFormComponent extends ECLBaseDirective {
1083
+ class EclSiteHeaderLoginComponent extends ECLBaseDirective {
886
1084
  constructor() {
887
1085
  super(...arguments);
888
- this.searchButtonIcon = 'search';
889
- this.role = 'search';
890
- this.search = new EventEmitter();
891
- this.onChange = noop$3;
892
- this.onTouched = noop$3;
1086
+ this.isLoggedIn = false;
1087
+ this.class = 'ecl-site-header__login-container';
1088
+ this.login = new EventEmitter();
1089
+ this.loginBoxToggle = new EventEmitter();
1090
+ this.isLoginBoxActive = false;
893
1091
  }
894
- get cssClasses() {
1092
+ ngOnChanges(changes) {
1093
+ const isLoggedInChange = changes.isLoggedIn;
1094
+ if (isLoggedInChange && isLoggedInChange.previousValue == true) {
1095
+ this.isLoginBoxActive = false;
1096
+ }
1097
+ }
1098
+ getLoginBoxCssClasses() {
895
1099
  return [
896
- super.getCssClasses('ecl-search-form'),
897
- ].join(' ').trim();
1100
+ 'ecl-site-header__login-box',
1101
+ this.isLoginBoxActive ? 'ecl-site-header__login-box--active' : ''
1102
+ ].join(' ');
898
1103
  }
899
- onSearchClick(evt) {
900
- this.search.next(new EclSearchFormEvent(this.searchInputText));
1104
+ onLoginClick(evt) {
1105
+ const event = new EclSiteHeaderLoginEvent();
1106
+ this.login.next(event);
901
1107
  evt.preventDefault();
902
1108
  }
903
- onEnterKeyDown(evt) {
904
- this.search.next(new EclSearchFormEvent(this.searchInputText));
1109
+ onLoginBoxToggle(evt) {
1110
+ this.isLoginBoxActive = !this.isLoginBoxActive;
1111
+ const event = new EclSiteHeaderLoginBoxToggleEvent(this.isLoginBoxActive);
1112
+ this.loginBoxToggle.next(event);
905
1113
  evt.preventDefault();
906
1114
  }
907
- onModelChange(newValue) {
908
- this.searchInputText = newValue;
909
- this.onChange(newValue);
910
- }
911
- writeValue(value) {
912
- this.searchInputText = value;
913
- }
914
- registerOnChange(fn) {
915
- this.onChange = fn;
916
- }
917
- registerOnTouched(fn) {
918
- this.onTouched = fn;
919
- }
920
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSearchFormComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
921
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclSearchFormComponent, selector: "ecl-search-form", inputs: { searchInputText: "searchInputText", placeholder: "placeholder", searchButtonLabel: "searchButtonLabel", searchButtonIcon: "searchButtonIcon" }, outputs: { search: "search" }, host: { listeners: { "keydown.enter": "onEnterKeyDown($event)" }, properties: { "class": "this.cssClasses", "attr.role": "this.role" } }, providers: [ECL_SEARCH_FORM_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0, template: "<ecl-form-group>\n <label \n eclFormLabel \n for=\"search-input\"\n class=\"ecl-search-form__label\">\n {{ 'ecl.common.SEARCH' | translate }}\n </label>\n <input eclTextInput\n [(ngModel)]=\"searchInputText\"\n (ngModelChange)=\"onModelChange($event)\"\n type=\"search\"\n name=\"search-input\"\n placeholder=\"{{ placeholder || 'ecl.common.SEARCH' | translate }}\"\n class=\"ecl-search-form__text-input\"/>\n</ecl-form-group>\n<button eclButton\n aria-label=\"Search\"\n variant=\"search\"\n (click)=\"onSearchClick($event)\"\n class=\"ecl-search-form__button\">\n <span eclButtonLabel>\n {{ searchButtonLabel || 'ecl.common.SEARCH' | translate }}\n </span>\n <ecl-icon [icon]=\"searchButtonIcon\" size=\"xs\"></ecl-icon>\n</button>\n", dependencies: [{ kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: EclButtonComponent, selector: "button[eclButton], button[ecl-button], a[eclButton]", inputs: ["variant", "containerStyleClass"] }, { kind: "directive", type: EclButtonLabelDirective, selector: "[eclButtonLabel]" }, { kind: "component", type: EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "isInverted", "ariaHidden", "focusable"] }, { kind: "component", type: EclFormGroupComponent, selector: "[eclFormGroup], ecl-form-group" }, { kind: "component", type: EclFormLabelComponent, selector: "[eclFormLabel]", inputs: ["isOptional", "isInvalid", "isDisabled", "isRequired"] }, { kind: "directive", type: EclTextInputDirective, selector: "input[eclTextInput]", inputs: ["eclSize", "isInvalid"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
1115
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSiteHeaderLoginComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1116
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclSiteHeaderLoginComponent, selector: "ecl-site-header-login", inputs: { isLoggedIn: "isLoggedIn" }, outputs: { login: "login", loginBoxToggle: "loginBoxToggle" }, host: { properties: { "class": "this.class" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!isLoggedIn\">\n <a href=\"#\"\n class=\"ecl-button ecl-button--ghost ecl-site-header__login-toggle\"\n [attr.aria-expanded]=\"isLoginBoxActive\"\n (click)=\"onLoginClick($event)\">\n <ecl-icon icon=\"log-in\"\n size=\"s\"\n class=\"ecl-site-header__icon\"></ecl-icon>\n {{ 'ecl.site-header.LOGIN' | translate }}\n </a>\n</ng-container>\n<ng-container *ngIf=\"isLoggedIn\">\n <a href=\"#\"\n class=\"ecl-button ecl-button--ghost ecl-site-header__login-toggle\"\n aria-controls=\"login-box-id\"\n [attr.aria-expanded]=\"isLoginBoxActive\"\n (click)=\"onLoginBoxToggle($event)\">\n <ecl-icon icon=\"logged-in\"\n size=\"s\"\n class=\"ecl-site-header__icon\"></ecl-icon>\n {{ 'ecl.site-header.LOGGED-IN' | translate }}\n <ecl-icon icon=\"corner-arrow\"\n size=\"xs\"\n class=\"ecl-site-header__login-arrow\"></ecl-icon>\n </a>\n <div class=\"{{ getLoginBoxCssClasses() }}\">\n <ng-content></ng-content>\n </div>\n</ng-container>", styles: [".ecl-site-header__login-toggle .ecl-site-header__login-arrow{display:inline-flex}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "isInverted", "ariaHidden", "focusable"] }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
922
1117
  }
923
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSearchFormComponent, decorators: [{
1118
+ __decorate([
1119
+ coerceBoolean
1120
+ ], EclSiteHeaderLoginComponent.prototype, "isLoggedIn", void 0);
1121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSiteHeaderLoginComponent, decorators: [{
924
1122
  type: Component,
925
- args: [{ selector: 'ecl-search-form', providers: [ECL_SEARCH_FORM_VALUE_ACCESSOR], template: "<ecl-form-group>\n <label \n eclFormLabel \n for=\"search-input\"\n class=\"ecl-search-form__label\">\n {{ 'ecl.common.SEARCH' | translate }}\n </label>\n <input eclTextInput\n [(ngModel)]=\"searchInputText\"\n (ngModelChange)=\"onModelChange($event)\"\n type=\"search\"\n name=\"search-input\"\n placeholder=\"{{ placeholder || 'ecl.common.SEARCH' | translate }}\"\n class=\"ecl-search-form__text-input\"/>\n</ecl-form-group>\n<button eclButton\n aria-label=\"Search\"\n variant=\"search\"\n (click)=\"onSearchClick($event)\"\n class=\"ecl-search-form__button\">\n <span eclButtonLabel>\n {{ searchButtonLabel || 'ecl.common.SEARCH' | translate }}\n </span>\n <ecl-icon [icon]=\"searchButtonIcon\" size=\"xs\"></ecl-icon>\n</button>\n" }]
926
- }], propDecorators: { searchInputText: [{
927
- type: Input
928
- }], placeholder: [{
929
- type: Input
930
- }], searchButtonLabel: [{
931
- type: Input
932
- }], searchButtonIcon: [{
1123
+ args: [{ selector: 'ecl-site-header-login', template: "<ng-container *ngIf=\"!isLoggedIn\">\n <a href=\"#\"\n class=\"ecl-button ecl-button--ghost ecl-site-header__login-toggle\"\n [attr.aria-expanded]=\"isLoginBoxActive\"\n (click)=\"onLoginClick($event)\">\n <ecl-icon icon=\"log-in\"\n size=\"s\"\n class=\"ecl-site-header__icon\"></ecl-icon>\n {{ 'ecl.site-header.LOGIN' | translate }}\n </a>\n</ng-container>\n<ng-container *ngIf=\"isLoggedIn\">\n <a href=\"#\"\n class=\"ecl-button ecl-button--ghost ecl-site-header__login-toggle\"\n aria-controls=\"login-box-id\"\n [attr.aria-expanded]=\"isLoginBoxActive\"\n (click)=\"onLoginBoxToggle($event)\">\n <ecl-icon icon=\"logged-in\"\n size=\"s\"\n class=\"ecl-site-header__icon\"></ecl-icon>\n {{ 'ecl.site-header.LOGGED-IN' | translate }}\n <ecl-icon icon=\"corner-arrow\"\n size=\"xs\"\n class=\"ecl-site-header__login-arrow\"></ecl-icon>\n </a>\n <div class=\"{{ getLoginBoxCssClasses() }}\">\n <ng-content></ng-content>\n </div>\n</ng-container>", styles: [".ecl-site-header__login-toggle .ecl-site-header__login-arrow{display:inline-flex}\n"] }]
1124
+ }], propDecorators: { isLoggedIn: [{
933
1125
  type: Input
934
- }], cssClasses: [{
1126
+ }], class: [{
935
1127
  type: HostBinding,
936
1128
  args: ['class']
937
- }], role: [{
938
- type: HostBinding,
939
- args: ['attr.role']
940
- }], search: [{
1129
+ }], login: [{
1130
+ type: Output
1131
+ }], loginBoxToggle: [{
941
1132
  type: Output
942
- }], onEnterKeyDown: [{
943
- type: HostListener,
944
- args: ['keydown.enter', ['$event']]
945
1133
  }] } });
946
1134
 
947
- class EclSiteHeaderSearchEvent extends EclBaseEvent {
948
- constructor(keyword) {
949
- super();
950
- this.keyword = keyword;
1135
+ class EclButtonLabelDirective extends ECLBaseDirective {
1136
+ get cssClasses() {
1137
+ return [
1138
+ super.getCssClasses('ecl-button__label'),
1139
+ ].join(' ').trim();
951
1140
  }
1141
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclButtonLabelDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
1142
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.4", type: EclButtonLabelDirective, selector: "[eclButtonLabel]", host: { properties: { "class": "this.cssClasses" } }, usesInheritance: true, ngImport: i0 }); }
952
1143
  }
953
- class EclSiteHeaderSearchToggleEvent extends EclBaseEvent {
954
- constructor(isOpen) {
955
- super();
956
- this.isOpen = isOpen;
1144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclButtonLabelDirective, decorators: [{
1145
+ type: Directive,
1146
+ args: [{
1147
+ selector: '[eclButtonLabel]'
1148
+ }]
1149
+ }], propDecorators: { cssClasses: [{
1150
+ type: HostBinding,
1151
+ args: ['class']
1152
+ }] } });
1153
+
1154
+ class EclFormGroupComponent extends ECLBaseDirective {
1155
+ get cssClasses() {
1156
+ return [
1157
+ super.getCssClasses('ecl-form-group'),
1158
+ ].join(' ').trim();
957
1159
  }
1160
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclFormGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1161
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclFormGroupComponent, selector: "[eclFormGroup], ecl-form-group", host: { properties: { "class": "this.cssClasses" } }, usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>" }); }
958
1162
  }
959
- const ECL_SITE_HEADER_SEARCH_VALUE_ACCESSOR = {
960
- provide: NG_VALUE_ACCESSOR,
961
- useExisting: forwardRef(() => EclSiteHeaderSearchComponent),
962
- multi: true,
963
- };
964
- const noop$2 = () => { };
965
- class EclSiteHeaderSearchComponent extends ECLBaseDirective {
1163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclFormGroupComponent, decorators: [{
1164
+ type: Component,
1165
+ args: [{ selector: '[eclFormGroup], ecl-form-group', template: "<ng-content></ng-content>" }]
1166
+ }], propDecorators: { cssClasses: [{
1167
+ type: HostBinding,
1168
+ args: ['class']
1169
+ }] } });
1170
+
1171
+ class EclFormLabelComponent extends ECLBaseDirective {
966
1172
  constructor() {
967
1173
  super(...arguments);
968
- this.class = 'ecl-site-header__search-container';
969
- this.search = new EventEmitter();
970
- this.searchToggle = new EventEmitter();
971
- this.isSearchBoxActive = false;
972
- this.onChange = noop$2;
973
- this.onTouched = noop$2;
974
- }
975
- onSearch(evt) {
976
- this.search.next(new EclSiteHeaderSearchEvent(evt.keyword));
977
- this.onChange(evt.keyword);
978
- return false;
979
- }
980
- onSearchBoxToggle(evt) {
981
- this.isSearchBoxActive = !this.isSearchBoxActive;
982
- const event = new EclSiteHeaderSearchToggleEvent(this.isSearchBoxActive);
983
- this.searchToggle.next(event);
984
- evt.preventDefault();
1174
+ this.isOptional = false;
1175
+ this.isInvalid = false;
1176
+ this.isDisabled = false;
1177
+ this.isRequired = false;
985
1178
  }
986
- getSearchBoxCssClasses() {
1179
+ get cssClasses() {
987
1180
  return [
988
- 'ecl-site-header__search',
989
- this.isSearchBoxActive ? 'ecl-site-header__search--active' : ''
990
- ].join(' ');
991
- }
992
- onModelChange(newValue) {
993
- this.searchInputText = newValue;
994
- this.onChange(newValue);
995
- }
996
- writeValue(value) {
997
- this.searchInputText = value;
998
- }
999
- registerOnChange(fn) {
1000
- this.onChange = fn;
1001
- }
1002
- registerOnTouched(fn) {
1003
- this.onTouched = fn;
1181
+ super.getCssClasses('ecl-form-label'),
1182
+ this.isInvalid ? 'ecl-form-label--invalid' : '',
1183
+ this.isDisabled ? 'ecl-form-label--disabled' : '',
1184
+ ].join(' ').trim();
1004
1185
  }
1005
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSiteHeaderSearchComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1006
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclSiteHeaderSearchComponent, selector: "ecl-site-header-search", inputs: { searchInputText: "searchInputText", searchInputPlaceholder: "searchInputPlaceholder", searchButtonLabel: "searchButtonLabel" }, outputs: { search: "search", searchToggle: "searchToggle" }, host: { properties: { "class": "this.class" } }, providers: [ECL_SITE_HEADER_SEARCH_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0, template: "<a href=\"#\"\n class=\"ecl-button ecl-button--ghost ecl-site-header__search-toggle\"\n data-ecl-search-toggle=\"true\"\n aria-controls=\"search-form-id\"\n [attr.aria-expanded]=\"isSearchBoxActive\"\n (click)=\"onSearchBoxToggle($event)\">\n <ecl-icon icon=\"search\"\n size=\"s\"\n class=\"ecl-site-header__icon\"></ecl-icon>\n {{ 'ecl.common.SEARCH' | translate }}\n</a>\n\n<ecl-search-form (search)=\"onSearch($event)\"\n [placeholder]=\"searchInputPlaceholder\"\n (ngModelChange)=\"onModelChange($event)\"\n [(ngModel)]=\"searchInputText\"\n [searchButtonLabel]=\"searchButtonLabel\"\n [class]=\"getSearchBoxCssClasses()\">\n</ecl-search-form>", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "isInverted", "ariaHidden", "focusable"] }, { kind: "component", type: EclSearchFormComponent, selector: "ecl-search-form", inputs: ["searchInputText", "placeholder", "searchButtonLabel", "searchButtonIcon"], outputs: ["search"] }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
1186
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclFormLabelComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1187
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclFormLabelComponent, selector: "[eclFormLabel]", inputs: { isOptional: "isOptional", isInvalid: "isInvalid", isDisabled: "isDisabled", isRequired: "isRequired" }, host: { properties: { "class": "this.cssClasses" } }, usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n<span *ngIf=\"isOptional\" class=\"ecl-form-label__optional\"> ({{ 'ecl.form-label.OPTIONAL' | translate }})</span>\n<span *ngIf=\"isRequired\" class=\"ecl-form-label__required\">*</span>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1007
1188
  }
1008
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSiteHeaderSearchComponent, decorators: [{
1189
+ __decorate([
1190
+ coerceBoolean
1191
+ ], EclFormLabelComponent.prototype, "isOptional", void 0);
1192
+ __decorate([
1193
+ coerceBoolean
1194
+ ], EclFormLabelComponent.prototype, "isInvalid", void 0);
1195
+ __decorate([
1196
+ coerceBoolean
1197
+ ], EclFormLabelComponent.prototype, "isDisabled", void 0);
1198
+ __decorate([
1199
+ coerceBoolean
1200
+ ], EclFormLabelComponent.prototype, "isRequired", void 0);
1201
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclFormLabelComponent, decorators: [{
1009
1202
  type: Component,
1010
- args: [{ selector: 'ecl-site-header-search', providers: [ECL_SITE_HEADER_SEARCH_VALUE_ACCESSOR], template: "<a href=\"#\"\n class=\"ecl-button ecl-button--ghost ecl-site-header__search-toggle\"\n data-ecl-search-toggle=\"true\"\n aria-controls=\"search-form-id\"\n [attr.aria-expanded]=\"isSearchBoxActive\"\n (click)=\"onSearchBoxToggle($event)\">\n <ecl-icon icon=\"search\"\n size=\"s\"\n class=\"ecl-site-header__icon\"></ecl-icon>\n {{ 'ecl.common.SEARCH' | translate }}\n</a>\n\n<ecl-search-form (search)=\"onSearch($event)\"\n [placeholder]=\"searchInputPlaceholder\"\n (ngModelChange)=\"onModelChange($event)\"\n [(ngModel)]=\"searchInputText\"\n [searchButtonLabel]=\"searchButtonLabel\"\n [class]=\"getSearchBoxCssClasses()\">\n</ecl-search-form>", styles: [":host{display:block}\n"] }]
1011
- }], propDecorators: { class: [{
1012
- type: HostBinding,
1013
- args: ['class']
1014
- }], searchInputText: [{
1203
+ args: [{ selector: '[eclFormLabel]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n<span *ngIf=\"isOptional\" class=\"ecl-form-label__optional\"> ({{ 'ecl.form-label.OPTIONAL' | translate }})</span>\n<span *ngIf=\"isRequired\" class=\"ecl-form-label__required\">*</span>\n" }]
1204
+ }], propDecorators: { isOptional: [{
1015
1205
  type: Input
1016
- }], searchInputPlaceholder: [{
1206
+ }], isInvalid: [{
1017
1207
  type: Input
1018
- }], searchButtonLabel: [{
1208
+ }], isDisabled: [{
1019
1209
  type: Input
1020
- }], search: [{
1021
- type: Output
1022
- }], searchToggle: [{
1023
- type: Output
1024
- }] } });
1025
-
1026
- class ECLClickOutsideDirective extends ECLBaseDirective {
1027
- constructor(elementRef) {
1028
- super();
1029
- this.elementRef = elementRef;
1030
- this.eclClickOutside = new EventEmitter();
1031
- }
1032
- onClick(target) {
1033
- const clickedInside = this.elementRef.nativeElement.contains(target);
1034
- if (!clickedInside) {
1035
- this.eclClickOutside.emit();
1036
- }
1037
- }
1038
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ECLClickOutsideDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
1039
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.4", type: ECLClickOutsideDirective, isStandalone: true, selector: "[eclClickOutside]", outputs: { eclClickOutside: "eclClickOutside" }, host: { listeners: { "document:click": "onClick($event.target)" } }, usesInheritance: true, ngImport: i0 }); }
1040
- }
1041
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: ECLClickOutsideDirective, decorators: [{
1042
- type: Directive,
1043
- args: [{
1044
- selector: '[eclClickOutside]',
1045
- standalone: true
1046
- }]
1047
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { eclClickOutside: [{
1048
- type: Output
1049
- }], onClick: [{
1050
- type: HostListener,
1051
- args: ['document:click', ['$event.target']]
1210
+ }], isRequired: [{
1211
+ type: Input
1212
+ }], cssClasses: [{
1213
+ type: HostBinding,
1214
+ args: ['class']
1052
1215
  }] } });
1053
1216
 
1054
- class EclLinkDirective extends ECLBaseDirective {
1217
+ class EclTextInputDirective extends ECLBaseDirective {
1055
1218
  get cssClasses() {
1056
1219
  return [
1057
- super.getCssClasses('ecl-link'),
1058
- this.variant ? `ecl-link--${this.variant}` : '',
1220
+ super.getCssClasses('ecl-text-input'),
1221
+ this.eclSize ? `ecl-text-input--${this.eclSize}` : '',
1059
1222
  ].join(' ').trim();
1060
1223
  }
1061
- get hasRightIcon() {
1062
- return this.isIconOnRightSide(this.eclIconComponents.toArray());
1063
- }
1064
- get hasLeftIcon() {
1065
- return this.isIconOnLeftSide(this.eclIconComponents.toArray());
1066
- }
1067
- get hasIcon() {
1068
- return this.eclIconComponents && this.eclIconComponents.length > 0;
1069
- }
1070
- constructor(el) {
1224
+ constructor(ngControl) {
1071
1225
  super();
1072
- this.el = el;
1226
+ this.ngControl = ngControl;
1227
+ this.type = 'text';
1228
+ this.eclSize = 'm';
1229
+ this.isInvalid = false;
1073
1230
  }
1074
- ngAfterContentInit() {
1075
- if (this.eclIconComponents) {
1076
- setTimeout(() => {
1077
- this.eclIconComponents.forEach(icn => {
1078
- if (this.isIconOnLeftSide(this.eclIconComponents.toArray())) {
1079
- icn.class = 'ecl-link__icon ecl-link__icon--before';
1080
- }
1081
- else if (this.isIconOnRightSide(this.eclIconComponents.toArray())) {
1082
- icn.class = 'ecl-link__icon ecl-link__icon--after';
1083
- }
1084
- else {
1085
- icn.class = 'ecl-link__icon ecl-link__icon--before';
1086
- }
1087
- });
1088
- });
1231
+ get invalidState() {
1232
+ if (this.ngControl) {
1233
+ return this.ngControl.status === 'INVALID' && this.ngControl.touched;
1234
+ }
1235
+ else {
1236
+ return this.isInvalid;
1089
1237
  }
1090
1238
  }
1091
- isIconOnRightSide(icons) {
1092
- return !!icons.find(icn => {
1093
- const iconEl = icn.el.nativeElement;
1094
- if (hasPreviousSiblingWithAttribute(iconEl, 'eclLinkLabel')) {
1095
- return true;
1096
- }
1097
- return false;
1098
- });
1099
- }
1100
- isIconOnLeftSide(icons) {
1101
- return !!icons.find(icn => {
1102
- const iconEl = icn.el.nativeElement;
1103
- if (hasNextSiblingWithAttribute(iconEl, 'eclLinkLabel')) {
1104
- return true;
1105
- }
1106
- return false;
1107
- });
1108
- }
1109
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclLinkDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
1110
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.4", type: EclLinkDirective, selector: "[eclLink]", inputs: { variant: "variant", isNegative: "isNegative", isNoVisited: "isNoVisited" }, host: { properties: { "class.ecl-link--negative": "this.isNegative", "class.ecl-link--no-visited": "this.isNoVisited", "class": "this.cssClasses", "class.ecl-link--icon-after": "this.hasRightIcon", "class.ecl-link--icon-before": "this.hasLeftIcon", "class.ecl-link--icon": "this.hasIcon" } }, queries: [{ propertyName: "eclIconComponents", predicate: i0.forwardRef(function () { return EclIconComponent; }) }], usesInheritance: true, ngImport: i0 }); }
1239
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclTextInputDirective, deps: [{ token: i1$1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
1240
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.4", type: EclTextInputDirective, selector: "input[eclTextInput]", inputs: { eclSize: "eclSize", isInvalid: "isInvalid" }, host: { properties: { "attr.type": "this.type", "class": "this.cssClasses", "class.ecl-text-input--invalid": "this.invalidState" } }, usesInheritance: true, ngImport: i0 }); }
1111
1241
  }
1112
1242
  __decorate([
1113
1243
  coerceBoolean
1114
- ], EclLinkDirective.prototype, "isNegative", void 0);
1115
- __decorate([
1116
- coerceBoolean
1117
- ], EclLinkDirective.prototype, "isNoVisited", void 0);
1118
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclLinkDirective, decorators: [{
1244
+ ], EclTextInputDirective.prototype, "isInvalid", void 0);
1245
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclTextInputDirective, decorators: [{
1119
1246
  type: Directive,
1120
1247
  args: [{
1121
- selector: '[eclLink]'
1248
+ selector: 'input[eclTextInput]',
1122
1249
  }]
1123
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { variant: [{
1124
- type: Input
1125
- }], isNegative: [{
1126
- type: Input
1127
- }, {
1250
+ }], ctorParameters: function () { return [{ type: i1$1.NgControl, decorators: [{
1251
+ type: Optional
1252
+ }, {
1253
+ type: Self
1254
+ }] }]; }, propDecorators: { type: [{
1128
1255
  type: HostBinding,
1129
- args: ['class.ecl-link--negative']
1130
- }], isNoVisited: [{
1256
+ args: ['attr.type']
1257
+ }], eclSize: [{
1258
+ type: Input
1259
+ }], isInvalid: [{
1131
1260
  type: Input
1132
- }, {
1133
- type: HostBinding,
1134
- args: ['class.ecl-link--no-visited']
1135
- }], eclIconComponents: [{
1136
- type: ContentChildren,
1137
- args: [forwardRef(() => EclIconComponent)]
1138
1261
  }], cssClasses: [{
1139
1262
  type: HostBinding,
1140
1263
  args: ['class']
1141
- }], hasRightIcon: [{
1142
- type: HostBinding,
1143
- args: ['class.ecl-link--icon-after']
1144
- }], hasLeftIcon: [{
1145
- type: HostBinding,
1146
- args: ['class.ecl-link--icon-before']
1147
- }], hasIcon: [{
1264
+ }], invalidState: [{
1148
1265
  type: HostBinding,
1149
- args: ['class.ecl-link--icon']
1266
+ args: ['class.ecl-text-input--invalid']
1150
1267
  }] } });
1151
1268
 
1152
- class EclSiteHeaderLanguageSelectedEvent extends EclBaseEvent {
1153
- constructor(language) {
1269
+ class EclSearchFormEvent extends EclBaseEvent {
1270
+ constructor(keyword) {
1154
1271
  super();
1155
- this.language = language;
1272
+ this.keyword = keyword;
1156
1273
  }
1157
1274
  }
1158
- class EclSiteHeaderLanguageCloseEvent extends EclBaseEvent {
1159
- }
1160
- class EclSiteHeaderLanguagePopoverComponent extends ECLBaseDirective {
1161
- constructor(popoverElementRef) {
1162
- super();
1163
- this.popoverElementRef = popoverElementRef;
1164
- this.euLanguages = [];
1165
- this.nonEuLanguages = [];
1166
- this.isHidden = false;
1167
- this.isPushRight = false;
1168
- this.isStack = false;
1169
- this.isFull = false;
1170
- this.languageClosed = new EventEmitter();
1171
- this.languageSelected = new EventEmitter();
1172
- this.role = 'dialog';
1173
- this.labelledBy = 'ecl-site-header__language-title';
1275
+ const ECL_SEARCH_FORM_VALUE_ACCESSOR = {
1276
+ provide: NG_VALUE_ACCESSOR,
1277
+ useExisting: forwardRef(() => EclSearchFormComponent),
1278
+ multi: true,
1279
+ };
1280
+ const noop$3 = () => { };
1281
+ class EclSearchFormComponent extends ECLBaseDirective {
1282
+ constructor() {
1283
+ super(...arguments);
1284
+ this.searchButtonIcon = 'search';
1285
+ this.role = 'search';
1286
+ this.search = new EventEmitter();
1287
+ this.onChange = noop$3;
1288
+ this.onTouched = noop$3;
1174
1289
  }
1175
1290
  get cssClasses() {
1176
1291
  return [
1177
- super.getCssClasses('ecl-site-header__language-container'),
1178
- this.isPushRight ? 'ecl-site-header__language-container--push-right' : '',
1179
- this.isFull ? 'ecl-site-header__language-container--full' : '',
1292
+ super.getCssClasses('ecl-search-form'),
1180
1293
  ].join(' ').trim();
1181
1294
  }
1182
- get isModal() {
1183
- return !this.isHidden || undefined;
1295
+ onSearchClick(evt) {
1296
+ this.search.next(new EclSearchFormEvent(this.searchInputText));
1297
+ evt.preventDefault();
1184
1298
  }
1185
- get isDropdownHidden() {
1186
- return this.isHidden || undefined;
1299
+ onEnterKeyDown(evt) {
1300
+ this.search.next(new EclSearchFormEvent(this.searchInputText));
1301
+ evt.preventDefault();
1187
1302
  }
1188
- onCloseClick() {
1189
- this.languageClosed.next(new EclSiteHeaderLanguageCloseEvent());
1303
+ onModelChange(newValue) {
1304
+ this.searchInputText = newValue;
1305
+ this.onChange(newValue);
1190
1306
  }
1191
- onLanguageClick(language) {
1192
- this.languageCode = language.code;
1193
- this.languageSelected.next(new EclSiteHeaderLanguageSelectedEvent(language));
1307
+ writeValue(value) {
1308
+ this.searchInputText = value;
1194
1309
  }
1195
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSiteHeaderLanguagePopoverComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
1196
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclSiteHeaderLanguagePopoverComponent, selector: "ecl-site-header-language-popover", inputs: { languageCode: "languageCode", euLanguages: "euLanguages", nonEuLanguages: "nonEuLanguages", euColumnsCount: "euColumnsCount", nonEuColumnsCount: "nonEuColumnsCount", isHidden: "isHidden", isPushRight: "isPushRight", isStack: "isStack", isFull: "isFull", rightPosition: "rightPosition", languageArrowPosition: "languageArrowPosition" }, outputs: { languageClosed: "languageClosed", languageSelected: "languageSelected" }, host: { properties: { "style.right": "this.rightPosition", "style.--ecl-language-arrow-position": "this.languageArrowPosition", "attr.role": "this.role", "attr.aria-labelledby": "this.labelledBy", "class": "this.cssClasses", "attr.aria-modal": "this.isModal", "attr.hidden": "this.isDropdownHidden" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"ecl-site-header__language-header\">\n <div class=\"ecl-site-header__language-title\">\n {{ 'ecl.language-list.SELECT-LANGUAGE' | translate }}\n </div>\n <button eclButton\n variant=\"ghost\"\n class=\"ecl-site-header__language-close\"\n (click)=\"onCloseClick()\">\n <span class=\"ecl-u-sr-only\">\n {{ 'ecl.common.CLOSE' | translate }}\n </span>\n <ecl-icon icon=\"close-filled\"\n size=\"s\">\n </ecl-icon>\n </button>\n</div>\n\n<div class=\"ecl-site-header__language-content\" \n [class.ecl-site-header__language-content--stack]=\"isStack\">\n <div *ngIf=\"euLanguages.length\" \n class=\"ecl-site-header__language-category ecl-site-header__language-category--{{ euColumnsCount }}-col\">\n <div class=\"ecl-site-header__language-category-title\">\n {{ 'ecl.language-list.EU-LANGUAGES' | translate }}\n </div>\n <ul class=\"ecl-site-header__language-list\">\n <li *ngFor=\"let item of euLanguages\"\n class=\"ecl-site-header__language-item\">\n <a eclLink\n variant=\"standalone\"\n class=\"ecl-site-header__language-link\"\n [class.ecl-site-header__language-link--active]=\"item.code === languageCode\"\n (click)=\"onLanguageClick(item)\">\n <span class=\"ecl-site-header__language-link-code\">{{ item.code }}</span>\n <span class=\"ecl-site-header__language-link-label\">{{ item.label }}</span>\n </a>\n </li>\n </ul>\n </div>\n <div *ngIf=\"nonEuLanguages.length\" \n class=\"ecl-site-header__language-category ecl-site-header__language-category--{{ nonEuColumnsCount }}-col\">\n <div class=\"ecl-site-header__language-category-title\">\n {{ 'ecl.language-list.NON-EU-LANGUAGES' | translate }}\n </div>\n <ul class=\"ecl-site-header__language-list\">\n <li *ngFor=\"let item of nonEuLanguages\"\n class=\"ecl-site-header__language-item\">\n <a eclLink\n variant=\"standalone\"\n class=\"ecl-site-header__language-link\"\n [class.ecl-site-header__language-link--active]=\"item.code === languageCode\"\n (click)=\"onLanguageClick(item)\">\n <span class=\"ecl-site-header__language-link-code\">{{ item.code }}</span>\n <span class=\"ecl-site-header__language-link-label\">{{ item.label }}</span>\n </a>\n </li>\n </ul>\n </div>\n</div>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: EclLinkDirective, selector: "[eclLink]", inputs: ["variant", "isNegative", "isNoVisited"] }, { kind: "component", type: EclButtonComponent, selector: "button[eclButton], button[ecl-button], a[eclButton]", inputs: ["variant", "containerStyleClass"] }, { kind: "component", type: EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "isInverted", "ariaHidden", "focusable"] }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
1310
+ registerOnChange(fn) {
1311
+ this.onChange = fn;
1312
+ }
1313
+ registerOnTouched(fn) {
1314
+ this.onTouched = fn;
1315
+ }
1316
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSearchFormComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1317
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclSearchFormComponent, selector: "ecl-search-form", inputs: { searchInputText: "searchInputText", placeholder: "placeholder", searchButtonLabel: "searchButtonLabel", searchButtonIcon: "searchButtonIcon" }, outputs: { search: "search" }, host: { listeners: { "keydown.enter": "onEnterKeyDown($event)" }, properties: { "class": "this.cssClasses", "attr.role": "this.role" } }, providers: [ECL_SEARCH_FORM_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0, template: "<ecl-form-group>\n <label \n eclFormLabel \n for=\"search-input\"\n class=\"ecl-search-form__label\">\n {{ 'ecl.common.SEARCH' | translate }}\n </label>\n <input eclTextInput\n [(ngModel)]=\"searchInputText\"\n (ngModelChange)=\"onModelChange($event)\"\n type=\"search\"\n name=\"search-input\"\n placeholder=\"{{ placeholder || 'ecl.common.SEARCH' | translate }}\"\n class=\"ecl-search-form__text-input\"/>\n</ecl-form-group>\n<button eclButton\n aria-label=\"Search\"\n variant=\"search\"\n (click)=\"onSearchClick($event)\"\n class=\"ecl-search-form__button\">\n <span eclButtonLabel>\n {{ searchButtonLabel || 'ecl.common.SEARCH' | translate }}\n </span>\n <ecl-icon [icon]=\"searchButtonIcon\" size=\"xs\"></ecl-icon>\n</button>\n", dependencies: [{ kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: EclButtonComponent, selector: "button[eclButton], button[ecl-button], a[eclButton]", inputs: ["variant", "containerStyleClass"] }, { kind: "directive", type: EclButtonLabelDirective, selector: "[eclButtonLabel]" }, { kind: "component", type: EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "isInverted", "ariaHidden", "focusable"] }, { kind: "component", type: EclFormGroupComponent, selector: "[eclFormGroup], ecl-form-group" }, { kind: "component", type: EclFormLabelComponent, selector: "[eclFormLabel]", inputs: ["isOptional", "isInvalid", "isDisabled", "isRequired"] }, { kind: "directive", type: EclTextInputDirective, selector: "input[eclTextInput]", inputs: ["eclSize", "isInvalid"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
1197
1318
  }
1198
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSiteHeaderLanguagePopoverComponent, decorators: [{
1319
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSearchFormComponent, decorators: [{
1199
1320
  type: Component,
1200
- args: [{ selector: 'ecl-site-header-language-popover', template: "<div class=\"ecl-site-header__language-header\">\n <div class=\"ecl-site-header__language-title\">\n {{ 'ecl.language-list.SELECT-LANGUAGE' | translate }}\n </div>\n <button eclButton\n variant=\"ghost\"\n class=\"ecl-site-header__language-close\"\n (click)=\"onCloseClick()\">\n <span class=\"ecl-u-sr-only\">\n {{ 'ecl.common.CLOSE' | translate }}\n </span>\n <ecl-icon icon=\"close-filled\"\n size=\"s\">\n </ecl-icon>\n </button>\n</div>\n\n<div class=\"ecl-site-header__language-content\" \n [class.ecl-site-header__language-content--stack]=\"isStack\">\n <div *ngIf=\"euLanguages.length\" \n class=\"ecl-site-header__language-category ecl-site-header__language-category--{{ euColumnsCount }}-col\">\n <div class=\"ecl-site-header__language-category-title\">\n {{ 'ecl.language-list.EU-LANGUAGES' | translate }}\n </div>\n <ul class=\"ecl-site-header__language-list\">\n <li *ngFor=\"let item of euLanguages\"\n class=\"ecl-site-header__language-item\">\n <a eclLink\n variant=\"standalone\"\n class=\"ecl-site-header__language-link\"\n [class.ecl-site-header__language-link--active]=\"item.code === languageCode\"\n (click)=\"onLanguageClick(item)\">\n <span class=\"ecl-site-header__language-link-code\">{{ item.code }}</span>\n <span class=\"ecl-site-header__language-link-label\">{{ item.label }}</span>\n </a>\n </li>\n </ul>\n </div>\n <div *ngIf=\"nonEuLanguages.length\" \n class=\"ecl-site-header__language-category ecl-site-header__language-category--{{ nonEuColumnsCount }}-col\">\n <div class=\"ecl-site-header__language-category-title\">\n {{ 'ecl.language-list.NON-EU-LANGUAGES' | translate }}\n </div>\n <ul class=\"ecl-site-header__language-list\">\n <li *ngFor=\"let item of nonEuLanguages\"\n class=\"ecl-site-header__language-item\">\n <a eclLink\n variant=\"standalone\"\n class=\"ecl-site-header__language-link\"\n [class.ecl-site-header__language-link--active]=\"item.code === languageCode\"\n (click)=\"onLanguageClick(item)\">\n <span class=\"ecl-site-header__language-link-code\">{{ item.code }}</span>\n <span class=\"ecl-site-header__language-link-label\">{{ item.label }}</span>\n </a>\n </li>\n </ul>\n </div>\n</div>" }]
1201
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { languageCode: [{
1202
- type: Input
1203
- }], euLanguages: [{
1204
- type: Input
1205
- }], nonEuLanguages: [{
1206
- type: Input
1207
- }], euColumnsCount: [{
1208
- type: Input
1209
- }], nonEuColumnsCount: [{
1210
- type: Input
1211
- }], isHidden: [{
1212
- type: Input
1213
- }], isPushRight: [{
1214
- type: Input
1215
- }], isStack: [{
1321
+ args: [{ selector: 'ecl-search-form', providers: [ECL_SEARCH_FORM_VALUE_ACCESSOR], template: "<ecl-form-group>\n <label \n eclFormLabel \n for=\"search-input\"\n class=\"ecl-search-form__label\">\n {{ 'ecl.common.SEARCH' | translate }}\n </label>\n <input eclTextInput\n [(ngModel)]=\"searchInputText\"\n (ngModelChange)=\"onModelChange($event)\"\n type=\"search\"\n name=\"search-input\"\n placeholder=\"{{ placeholder || 'ecl.common.SEARCH' | translate }}\"\n class=\"ecl-search-form__text-input\"/>\n</ecl-form-group>\n<button eclButton\n aria-label=\"Search\"\n variant=\"search\"\n (click)=\"onSearchClick($event)\"\n class=\"ecl-search-form__button\">\n <span eclButtonLabel>\n {{ searchButtonLabel || 'ecl.common.SEARCH' | translate }}\n </span>\n <ecl-icon [icon]=\"searchButtonIcon\" size=\"xs\"></ecl-icon>\n</button>\n" }]
1322
+ }], propDecorators: { searchInputText: [{
1216
1323
  type: Input
1217
- }], isFull: [{
1324
+ }], placeholder: [{
1218
1325
  type: Input
1219
- }], rightPosition: [{
1326
+ }], searchButtonLabel: [{
1220
1327
  type: Input
1221
- }, {
1222
- type: HostBinding,
1223
- args: ['style.right']
1224
- }], languageArrowPosition: [{
1328
+ }], searchButtonIcon: [{
1225
1329
  type: Input
1226
- }, {
1227
- type: HostBinding,
1228
- args: ['style.--ecl-language-arrow-position']
1229
- }], languageClosed: [{
1230
- type: Output
1231
- }], languageSelected: [{
1232
- type: Output
1233
- }], role: [{
1234
- type: HostBinding,
1235
- args: ['attr.role']
1236
- }], labelledBy: [{
1237
- type: HostBinding,
1238
- args: ['attr.aria-labelledby']
1239
1330
  }], cssClasses: [{
1240
1331
  type: HostBinding,
1241
1332
  args: ['class']
1242
- }], isModal: [{
1243
- type: HostBinding,
1244
- args: ['attr.aria-modal']
1245
- }], isDropdownHidden: [{
1333
+ }], role: [{
1246
1334
  type: HostBinding,
1247
- args: ['attr.hidden']
1335
+ args: ['attr.role']
1336
+ }], search: [{
1337
+ type: Output
1338
+ }], onEnterKeyDown: [{
1339
+ type: HostListener,
1340
+ args: ['keydown.enter', ['$event']]
1248
1341
  }] } });
1249
1342
 
1250
- class EclSiteHeaderLanguageClickEvent extends EclBaseEvent {
1251
- }
1252
- class EclSiteHeaderLanguageComponent extends ECLBaseDirective {
1253
- get languageCodes() {
1254
- return this._languageCodes;
1255
- }
1256
- set languageCodes(value) {
1257
- this._languageCodes = value;
1258
- this.updateLanguages();
1259
- }
1260
- get cssClasses() {
1261
- return [
1262
- super.getCssClasses('ecl-site-header__language'),
1263
- ].join(' ').trim();
1264
- }
1265
- constructor(eclLanguageService, eclSiteHeader) {
1343
+ class EclSiteHeaderSearchEvent extends EclBaseEvent {
1344
+ constructor(keyword) {
1266
1345
  super();
1267
- this.eclLanguageService = eclLanguageService;
1268
- this.eclSiteHeader = eclSiteHeader;
1269
- this.languageCode = 'en';
1270
- this._languageCodes = [];
1271
- this.languageClick = new EventEmitter();
1272
- this.languageSelected = new EventEmitter();
1273
- this.MOBILE_BREAKPOINT = 768;
1274
- this.LANGUAGE_MAX_COLUMNS = 8;
1275
- this.isLanguagesDropdownVisible = false;
1276
- this.euLanguages = [];
1277
- this.nonEuLanguages = [];
1278
- this.euColumnsCount = 1;
1279
- this.nonEuColumnsCount = 1;
1346
+ this.keyword = keyword;
1280
1347
  }
1281
- ngOnInit() {
1282
- this.updateLanguages();
1348
+ }
1349
+ class EclSiteHeaderSearchToggleEvent extends EclBaseEvent {
1350
+ constructor(isOpen) {
1351
+ super();
1352
+ this.isOpen = isOpen;
1283
1353
  }
1284
- ngOnChanges(changes) {
1285
- if (changes['languageCodes']) {
1286
- this.updateLanguages();
1287
- }
1354
+ }
1355
+ const ECL_SITE_HEADER_SEARCH_VALUE_ACCESSOR = {
1356
+ provide: NG_VALUE_ACCESSOR,
1357
+ useExisting: forwardRef(() => EclSiteHeaderSearchComponent),
1358
+ multi: true,
1359
+ };
1360
+ const noop$2 = () => { };
1361
+ class EclSiteHeaderSearchComponent extends ECLBaseDirective {
1362
+ constructor() {
1363
+ super(...arguments);
1364
+ this.class = 'ecl-site-header__search-container';
1365
+ this.search = new EventEmitter();
1366
+ this.searchToggle = new EventEmitter();
1367
+ this.isSearchBoxActive = false;
1368
+ this.onChange = noop$2;
1369
+ this.onTouched = noop$2;
1288
1370
  }
1289
- getLanguageLabel() {
1290
- return this.eclLanguageService.getLanguageByCode(this.languageCode)?.label;
1371
+ onSearch(evt) {
1372
+ this.search.next(new EclSiteHeaderSearchEvent(evt.keyword));
1373
+ this.onChange(evt.keyword);
1374
+ return false;
1291
1375
  }
1292
- onLanguageClick(evt) {
1293
- this.isLanguagesDropdownVisible = !this.isLanguagesDropdownVisible;
1294
- if (this.isLanguagesDropdownVisible) {
1295
- this.calculatePopoverPosition();
1296
- }
1297
- else {
1298
- setTimeout(() => {
1299
- this.isFull = false;
1300
- this.isStack = false;
1301
- this.isPushRight = false;
1302
- this.rightPosition = undefined;
1303
- this.languageArrowPosition = undefined;
1304
- });
1305
- }
1306
- this.languageClick.next(new EclSiteHeaderLanguageClickEvent());
1376
+ onSearchBoxToggle(evt) {
1377
+ this.isSearchBoxActive = !this.isSearchBoxActive;
1378
+ const event = new EclSiteHeaderSearchToggleEvent(this.isSearchBoxActive);
1379
+ this.searchToggle.next(event);
1307
1380
  evt.preventDefault();
1308
1381
  }
1309
- onLanguageClosed(evt) {
1310
- this.isLanguagesDropdownVisible = false;
1311
- }
1312
- onLanguageSelected(evt) {
1313
- this.languageCode = evt.language.code;
1314
- this.isLanguagesDropdownVisible = false;
1315
- this.languageSelected.next(new EclSiteHeaderLanguageSelectedEvent(evt.language));
1316
- }
1317
- onClickOutside() {
1318
- this.isLanguagesDropdownVisible = false;
1382
+ getSearchBoxCssClasses() {
1383
+ return [
1384
+ 'ecl-site-header__search',
1385
+ this.isSearchBoxActive ? 'ecl-site-header__search--active' : ''
1386
+ ].join(' ');
1319
1387
  }
1320
- onEscapeKeydownHandler() {
1321
- this.isLanguagesDropdownVisible = false;
1388
+ onModelChange(newValue) {
1389
+ this.searchInputText = newValue;
1390
+ this.onChange(newValue);
1322
1391
  }
1323
- hasLanguageCodes() {
1324
- return this.languageCodes && this.languageCodes.length > 0;
1392
+ writeValue(value) {
1393
+ this.searchInputText = value;
1325
1394
  }
1326
- updateLanguages() {
1327
- const languages = this.eclLanguageService.getLanguagesByCodes(this.languageCodes);
1328
- this.euLanguages = languages.filter(item => {
1329
- return this.eclLanguageService.isEuLanguage(item.code);
1330
- });
1331
- this.nonEuLanguages = languages.filter(item => {
1332
- return !this.eclLanguageService.isEuLanguage(item.code);
1333
- });
1334
- this.euColumnsCount = Math.ceil(this.euLanguages.length / this.LANGUAGE_MAX_COLUMNS);
1335
- this.nonEuColumnsCount = Math.ceil(this.nonEuLanguages.length / this.LANGUAGE_MAX_COLUMNS);
1395
+ registerOnChange(fn) {
1396
+ this.onChange = fn;
1336
1397
  }
1337
- calculatePopoverPosition() {
1338
- setTimeout(() => {
1339
- if (this.hasLanguageCodes()) {
1340
- const arrowSize = '0.5rem';
1341
- const containerElement = this.eclSiteHeader.topContainerElement;
1342
- const containerRect = containerElement.getBoundingClientRect();
1343
- const linkRect = this.languageLinkElement.getBoundingClientRect();
1344
- const popoverRect = this.languagePopoverElement.getBoundingClientRect();
1345
- const screenWidth = window.innerWidth;
1346
- const vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);
1347
- this.isFull = false;
1348
- this.isStack = false;
1349
- this.isPushRight = false;
1350
- this.rightPosition = undefined;
1351
- this.languageArrowPosition = undefined;
1352
- if (popoverRect.width > containerRect.width) {
1353
- this.isStack = true;
1354
- if (this.nonEuLanguages.length) {
1355
- this.nonEuColumnsCount = Math.max(this.euColumnsCount, this.nonEuColumnsCount);
1356
- }
1357
- }
1358
- if (popoverRect.right > screenWidth) {
1359
- const arrowPosition = containerRect.right - linkRect.right + linkRect.width / 2;
1360
- this.isPushRight = true;
1361
- this.rightPosition = `-${containerRect.right - linkRect.right}px`;
1362
- this.languageArrowPosition = `calc(${arrowPosition}px - ${arrowSize})`;
1363
- }
1364
- if (vw < this.MOBILE_BREAKPOINT) {
1365
- const arrowPosition = popoverRect.right - linkRect.right + linkRect.width / 2;
1366
- this.isFull = true;
1367
- this.languageArrowPosition = `calc(${arrowPosition}px - ${arrowSize})`;
1368
- }
1369
- }
1370
- });
1398
+ registerOnTouched(fn) {
1399
+ this.onTouched = fn;
1371
1400
  }
1372
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSiteHeaderLanguageComponent, deps: [{ token: EclLanguageService }, { token: EclSiteHeaderComponent }], target: i0.ɵɵFactoryTarget.Component }); }
1373
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclSiteHeaderLanguageComponent, selector: "ecl-site-header-language", inputs: { languageCode: "languageCode", languageCodes: "languageCodes", languageLabel: "languageLabel" }, outputs: { languageClick: "languageClick", languageSelected: "languageSelected" }, host: { listeners: { "eclClickOutside": "onClickOutside()", "document:keydown.escape": "onEscapeKeydownHandler()" }, properties: { "class": "this.cssClasses" } }, viewQueries: [{ propertyName: "languagePopoverElement", first: true, predicate: ["languagePopover"], descendants: true, read: ElementRef }, { propertyName: "languageLinkElement", first: true, predicate: ["languageLink"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, hostDirectives: [{ directive: ECLClickOutsideDirective, outputs: ["eclClickOutside", "eclClickOutside"] }], ngImport: i0, template: "<a href=\"#\"\n #languageLink\n class=\"ecl-button ecl-button--ghost ecl-site-header__language-selector ecl-u-d-block\"\n aria-controls=\"language-list-overlay\"\n [attr.aria-label]=\"'ecl.language-list.SELECT-LANGUAGE' | translate\"\n [attr.aria-expanded]=\"isLanguagesDropdownVisible\"\n (click)=\"onLanguageClick($event)\">\n <span class=\"ecl-site-header__language-icon\">\n <ecl-icon icon=\"language\"\n size=\"s\"\n class=\"ecl-site-header__icon\"></ecl-icon>\n <span class=\"ecl-site-header__language-code\">{{ languageCode }}</span>\n </span>\n {{ getLanguageLabel() }}\n</a>\n\n<ecl-site-header-language-popover \n #languagePopover\n *ngIf=\"hasLanguageCodes()\"\n [languageCode]=\"languageCode\"\n [euLanguages]=\"euLanguages\"\n [nonEuLanguages]=\"nonEuLanguages\"\n [euColumnsCount]=\"euColumnsCount\"\n [nonEuColumnsCount]=\"nonEuColumnsCount\"\n [isHidden]=\"!isLanguagesDropdownVisible\" \n [isStack]=\"isStack\"\n [isPushRight]=\"isPushRight\"\n [isFull]=\"isFull\"\n [rightPosition]=\"rightPosition\"\n [languageArrowPosition]=\"languageArrowPosition\"\n (languageSelected)=\"onLanguageSelected($event)\"\n (languageClosed)=\"onLanguageClosed($event)\">\n</ecl-site-header-language-popover>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "isInverted", "ariaHidden", "focusable"] }, { kind: "component", type: EclSiteHeaderLanguagePopoverComponent, selector: "ecl-site-header-language-popover", inputs: ["languageCode", "euLanguages", "nonEuLanguages", "euColumnsCount", "nonEuColumnsCount", "isHidden", "isPushRight", "isStack", "isFull", "rightPosition", "languageArrowPosition"], outputs: ["languageClosed", "languageSelected"] }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
1401
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSiteHeaderSearchComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1402
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclSiteHeaderSearchComponent, selector: "ecl-site-header-search", inputs: { searchInputText: "searchInputText", searchInputPlaceholder: "searchInputPlaceholder", searchButtonLabel: "searchButtonLabel" }, outputs: { search: "search", searchToggle: "searchToggle" }, host: { properties: { "class": "this.class" } }, providers: [ECL_SITE_HEADER_SEARCH_VALUE_ACCESSOR], usesInheritance: true, ngImport: i0, template: "<a href=\"#\"\n class=\"ecl-button ecl-button--ghost ecl-site-header__search-toggle\"\n data-ecl-search-toggle=\"true\"\n aria-controls=\"search-form-id\"\n [attr.aria-expanded]=\"isSearchBoxActive\"\n (click)=\"onSearchBoxToggle($event)\">\n <ecl-icon icon=\"search\"\n size=\"s\"\n class=\"ecl-site-header__icon\"></ecl-icon>\n {{ 'ecl.common.SEARCH' | translate }}\n</a>\n\n<ecl-search-form (search)=\"onSearch($event)\"\n [placeholder]=\"searchInputPlaceholder\"\n (ngModelChange)=\"onModelChange($event)\"\n [(ngModel)]=\"searchInputText\"\n [searchButtonLabel]=\"searchButtonLabel\"\n [class]=\"getSearchBoxCssClasses()\">\n</ecl-search-form>", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "isInverted", "ariaHidden", "focusable"] }, { kind: "component", type: EclSearchFormComponent, selector: "ecl-search-form", inputs: ["searchInputText", "placeholder", "searchButtonLabel", "searchButtonIcon"], outputs: ["search"] }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
1374
1403
  }
1375
- __decorate([
1376
- coerceElement
1377
- ], EclSiteHeaderLanguageComponent.prototype, "languagePopoverElement", void 0);
1378
- __decorate([
1379
- coerceElement
1380
- ], EclSiteHeaderLanguageComponent.prototype, "languageLinkElement", void 0);
1381
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSiteHeaderLanguageComponent, decorators: [{
1404
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSiteHeaderSearchComponent, decorators: [{
1382
1405
  type: Component,
1383
- args: [{ selector: 'ecl-site-header-language', hostDirectives: [{
1384
- directive: ECLClickOutsideDirective,
1385
- outputs: ['eclClickOutside'],
1386
- }], template: "<a href=\"#\"\n #languageLink\n class=\"ecl-button ecl-button--ghost ecl-site-header__language-selector ecl-u-d-block\"\n aria-controls=\"language-list-overlay\"\n [attr.aria-label]=\"'ecl.language-list.SELECT-LANGUAGE' | translate\"\n [attr.aria-expanded]=\"isLanguagesDropdownVisible\"\n (click)=\"onLanguageClick($event)\">\n <span class=\"ecl-site-header__language-icon\">\n <ecl-icon icon=\"language\"\n size=\"s\"\n class=\"ecl-site-header__icon\"></ecl-icon>\n <span class=\"ecl-site-header__language-code\">{{ languageCode }}</span>\n </span>\n {{ getLanguageLabel() }}\n</a>\n\n<ecl-site-header-language-popover \n #languagePopover\n *ngIf=\"hasLanguageCodes()\"\n [languageCode]=\"languageCode\"\n [euLanguages]=\"euLanguages\"\n [nonEuLanguages]=\"nonEuLanguages\"\n [euColumnsCount]=\"euColumnsCount\"\n [nonEuColumnsCount]=\"nonEuColumnsCount\"\n [isHidden]=\"!isLanguagesDropdownVisible\" \n [isStack]=\"isStack\"\n [isPushRight]=\"isPushRight\"\n [isFull]=\"isFull\"\n [rightPosition]=\"rightPosition\"\n [languageArrowPosition]=\"languageArrowPosition\"\n (languageSelected)=\"onLanguageSelected($event)\"\n (languageClosed)=\"onLanguageClosed($event)\">\n</ecl-site-header-language-popover>\n" }]
1387
- }], ctorParameters: function () { return [{ type: EclLanguageService }, { type: EclSiteHeaderComponent }]; }, propDecorators: { languageCode: [{
1406
+ args: [{ selector: 'ecl-site-header-search', providers: [ECL_SITE_HEADER_SEARCH_VALUE_ACCESSOR], template: "<a href=\"#\"\n class=\"ecl-button ecl-button--ghost ecl-site-header__search-toggle\"\n data-ecl-search-toggle=\"true\"\n aria-controls=\"search-form-id\"\n [attr.aria-expanded]=\"isSearchBoxActive\"\n (click)=\"onSearchBoxToggle($event)\">\n <ecl-icon icon=\"search\"\n size=\"s\"\n class=\"ecl-site-header__icon\"></ecl-icon>\n {{ 'ecl.common.SEARCH' | translate }}\n</a>\n\n<ecl-search-form (search)=\"onSearch($event)\"\n [placeholder]=\"searchInputPlaceholder\"\n (ngModelChange)=\"onModelChange($event)\"\n [(ngModel)]=\"searchInputText\"\n [searchButtonLabel]=\"searchButtonLabel\"\n [class]=\"getSearchBoxCssClasses()\">\n</ecl-search-form>", styles: [":host{display:block}\n"] }]
1407
+ }], propDecorators: { class: [{
1408
+ type: HostBinding,
1409
+ args: ['class']
1410
+ }], searchInputText: [{
1388
1411
  type: Input
1389
- }], languageCodes: [{
1412
+ }], searchInputPlaceholder: [{
1390
1413
  type: Input
1391
- }], languageLabel: [{
1414
+ }], searchButtonLabel: [{
1392
1415
  type: Input
1393
- }], languagePopoverElement: [{
1394
- type: ViewChild,
1395
- args: ['languagePopover', { read: ElementRef }]
1396
- }], languageLinkElement: [{
1397
- type: ViewChild,
1398
- args: ['languageLink', { read: ElementRef }]
1399
- }], languageClick: [{
1416
+ }], search: [{
1400
1417
  type: Output
1401
- }], languageSelected: [{
1418
+ }], searchToggle: [{
1402
1419
  type: Output
1403
- }], cssClasses: [{
1404
- type: HostBinding,
1405
- args: ['class']
1406
- }], onClickOutside: [{
1407
- type: HostListener,
1408
- args: ['eclClickOutside']
1409
- }], onEscapeKeydownHandler: [{
1410
- type: HostListener,
1411
- args: ['document:keydown.escape']
1412
1420
  }] } });
1413
1421
 
1414
1422
  class EclSiteHeaderLogoClickEvent extends EclBaseEvent {
@@ -1429,7 +1437,6 @@ class EclSiteHeaderComponent extends ECLBaseDirective {
1429
1437
  this.languageClick = new EventEmitter();
1430
1438
  this.languageCode = 'en';
1431
1439
  this.destroy$ = new Subject();
1432
- this.handlei18nEvents();
1433
1440
  }
1434
1441
  ngAfterContentInit() {
1435
1442
  if (this.eclLoginComponent && this.eclSearchComponent) {
@@ -1453,6 +1460,15 @@ class EclSiteHeaderComponent extends ECLBaseDirective {
1453
1460
  .subscribe(evt => {
1454
1461
  this.languageClick.next(new EclSiteHeaderLanguageClickEvent());
1455
1462
  });
1463
+ this.eclLanguageComponent
1464
+ .languageSelected
1465
+ .pipe(takeUntil(this.destroy$))
1466
+ .subscribe(evt => {
1467
+ this.languageCode = this.getEULanguageCode(evt.language?.code);
1468
+ });
1469
+ }
1470
+ if (this.eclLanguageComponent) {
1471
+ this.languageCode = this.getEULanguageCode(this.eclLanguageComponent?.languageCode);
1456
1472
  }
1457
1473
  }
1458
1474
  ngOnDestroy() {
@@ -1466,14 +1482,6 @@ class EclSiteHeaderComponent extends ECLBaseDirective {
1466
1482
  evt.preventDefault();
1467
1483
  }
1468
1484
  }
1469
- handlei18nEvents() {
1470
- this.languageCode = this.getEULanguageCode(this.translateService.currentLang);
1471
- this.translateService.onLangChange
1472
- .pipe(takeUntil(this.destroy$))
1473
- .subscribe((langChangeEvent) => {
1474
- this.languageCode = this.getEULanguageCode(langChangeEvent.lang);
1475
- });
1476
- }
1477
1485
  getEULanguageCode(languageCode) {
1478
1486
  if (!this.eclLanguageService.isEuLanguage(languageCode)) {
1479
1487
  return 'en';
@@ -1481,7 +1489,7 @@ class EclSiteHeaderComponent extends ECLBaseDirective {
1481
1489
  return languageCode;
1482
1490
  }
1483
1491
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclSiteHeaderComponent, deps: [{ token: EclLanguageService }, { token: i2$1.TranslateService }, { token: EclThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
1484
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclSiteHeaderComponent, selector: "ecl-site-header", inputs: { logoUrl: "logoUrl", siteName: "siteName" }, outputs: { logoClick: "logoClick", languageClick: "languageClick" }, host: { properties: { "class": "this.cssClasses", "attr.role": "this.role" } }, queries: [{ propertyName: "eclLoginComponent", first: true, predicate: EclSiteHeaderLoginComponent, descendants: true }, { propertyName: "eclSearchComponent", first: true, predicate: EclSiteHeaderSearchComponent, descendants: true }, { propertyName: "eclLanguageComponent", first: true, predicate: EclSiteHeaderLanguageComponent, descendants: true }], viewQueries: [{ propertyName: "topContainerElement", first: true, predicate: ["topContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ecl-site-header__header\">\n <div class=\"ecl-site-header__container ecl-container\">\n <div #topContainer class=\"ecl-site-header__top\">\n <a eclLink \n variant=\"standalone\" \n class=\"ecl-site-header__logo-link\"\n href=\"https://ec.europa.eu/info/index_{{ languageCode }}\"\n (click)=\"onECLogoClick($event)\" \n [attr.aria-label]=\"'ecl.footer.EUROPEAN-COMMISSION' | translate\">\n\n <ng-content select=\"[eclSiteHeaderEnvironment]\"></ng-content>\n\n <ng-container *ngIf=\"eclThemeService.isEC$ | async\">\n <img alt=\"European Commission logo\" \n [attr.title]=\"'ecl.footer.EUROPEAN-COMMISSION' | translate\" \n class=\"ecl-site-header__logo-image ecl-site-header__logo-image-desktop\" \n src=\"./assets/images/ecl/ec/logo/logo-ec--{{ languageCode }}.svg\"/>\n </ng-container>\n\n <ng-container *ngIf=\"eclThemeService.isEU$ | async\">\n <img alt=\"European Union flag\" \n [attr.title]=\"'ecl.footer.EUROPEAN-UNION' | translate\" \n class=\"ecl-site-header__logo-image ecl-site-header__logo-image-mobile\" \n src=\"./assets/images/ecl/eu/logo/condensed-version/positive/logo-eu--{{ languageCode}}.svg\"/>\n <img alt=\"European Union flag\" \n [attr.title]=\"'ecl.footer.EUROPEAN-UNION' | translate\" \n class=\"ecl-site-header__logo-image ecl-site-header__logo-image-desktop\" \n src=\"./assets/images/ecl/eu/logo/standard-version/positive/logo-eu--{{ languageCode}}.svg\"/>\n </ng-container>\n </a>\n <ng-content select=\"ecl-site-header-action\"></ng-content>\n </div>\n </div>\n</div>\n\n<ng-content select=\"ecl-site-header-message\"></ng-content>\n<ng-content select=\"ecl-site-header-banner-top\"></ng-content>\n\n<div *ngIf=\"siteName\" class=\"ecl-site-header__banner\">\n <div class=\"ecl-container\">\n <div class=\"ecl-site-header__site-name\">{{ siteName }}</div>\n <ng-content select=\"[eclSiteHeaderCta]\"></ng-content>\n </div>\n</div>\n\n<ng-content select=\"ecl-menu\"></ng-content>\n\n<!-- @deprecated language list is replaced with site header language -->\n<ng-content select=\"ecl-language-list\"></ng-content>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: EclLinkDirective, selector: "[eclLink]", inputs: ["variant", "isNegative", "isNoVisited"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
1492
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclSiteHeaderComponent, selector: "ecl-site-header", inputs: { logoUrl: "logoUrl", siteName: "siteName", languageCode: "languageCode" }, outputs: { logoClick: "logoClick", languageClick: "languageClick" }, host: { properties: { "class": "this.cssClasses", "attr.role": "this.role" } }, queries: [{ propertyName: "eclLoginComponent", first: true, predicate: EclSiteHeaderLoginComponent, descendants: true }, { propertyName: "eclSearchComponent", first: true, predicate: EclSiteHeaderSearchComponent, descendants: true }, { propertyName: "eclLanguageComponent", first: true, predicate: EclSiteHeaderLanguageComponent, descendants: true }], viewQueries: [{ propertyName: "topContainerElement", first: true, predicate: ["topContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ecl-site-header__header\">\n <div class=\"ecl-site-header__container ecl-container\">\n <div #topContainer class=\"ecl-site-header__top\">\n <a eclLink \n variant=\"standalone\" \n class=\"ecl-site-header__logo-link\"\n href=\"https://ec.europa.eu/info/index_{{ languageCode }}\"\n (click)=\"onECLogoClick($event)\" \n [attr.aria-label]=\"'ecl.footer.EUROPEAN-COMMISSION' | translate\">\n\n <ng-content select=\"[eclSiteHeaderEnvironment]\"></ng-content>\n\n <ng-container *ngIf=\"eclThemeService.isEC$ | async\">\n <img alt=\"European Commission logo\" \n [attr.title]=\"'ecl.footer.EUROPEAN-COMMISSION' | translate\" \n class=\"ecl-site-header__logo-image ecl-site-header__logo-image-desktop\" \n src=\"./assets/images/ecl/ec/logo/logo-ec--{{ languageCode }}.svg\"/>\n </ng-container>\n\n <ng-container *ngIf=\"eclThemeService.isEU$ | async\">\n <img alt=\"European Union flag\" \n [attr.title]=\"'ecl.footer.EUROPEAN-UNION' | translate\" \n class=\"ecl-site-header__logo-image ecl-site-header__logo-image-mobile\" \n src=\"./assets/images/ecl/eu/logo/condensed-version/positive/logo-eu--{{ languageCode}}.svg\"/>\n <img alt=\"European Union flag\" \n [attr.title]=\"'ecl.footer.EUROPEAN-UNION' | translate\" \n class=\"ecl-site-header__logo-image ecl-site-header__logo-image-desktop\" \n src=\"./assets/images/ecl/eu/logo/standard-version/positive/logo-eu--{{ languageCode}}.svg\"/>\n </ng-container>\n </a>\n <ng-content select=\"ecl-site-header-action\"></ng-content>\n </div>\n </div>\n</div>\n\n<ng-content select=\"ecl-site-header-message\"></ng-content>\n<ng-content select=\"ecl-site-header-banner-top\"></ng-content>\n\n<div *ngIf=\"siteName\" class=\"ecl-site-header__banner\">\n <div class=\"ecl-container\">\n <div class=\"ecl-site-header__site-name\">{{ siteName }}</div>\n <ng-content select=\"[eclSiteHeaderCta]\"></ng-content>\n </div>\n</div>\n\n<ng-content select=\"ecl-menu\"></ng-content>\n\n<!-- @deprecated language list is replaced with site header language -->\n<ng-content select=\"ecl-language-list\"></ng-content>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: EclLinkDirective, selector: "[eclLink]", inputs: ["variant", "isNegative", "isNoVisited"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
1485
1493
  }
1486
1494
  __decorate([
1487
1495
  coerceElement
@@ -1515,6 +1523,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImpor
1515
1523
  }], eclLanguageComponent: [{
1516
1524
  type: ContentChild,
1517
1525
  args: [EclSiteHeaderLanguageComponent]
1526
+ }], languageCode: [{
1527
+ type: Input
1518
1528
  }] } });
1519
1529
 
1520
1530
  /**
@@ -2841,8 +2851,11 @@ class EclAppComponent extends ECLBaseDirective {
2841
2851
  }
2842
2852
  handleLanguageChangeState() {
2843
2853
  this.eclLanguageService.currentLanguage$.pipe(takeUntil$1(this.destroy$)).subscribe(lang => {
2844
- this.textDirection = lang.isRtl ? 'rtl' : 'ltr';
2845
- this.eclSiteHeaderLanguage.languageCode = lang.code;
2854
+ setTimeout(() => {
2855
+ this.textDirection = lang.isRtl ? 'rtl' : 'ltr';
2856
+ this.eclSiteHeaderLanguage.languageCode = lang.code;
2857
+ this.eclSiteHeader.languageCode = lang.code;
2858
+ });
2846
2859
  });
2847
2860
  }
2848
2861
  handleUIEvents() {
@@ -2852,7 +2865,7 @@ class EclAppComponent extends ECLBaseDirective {
2852
2865
  });
2853
2866
  }
2854
2867
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclAppComponent, deps: [{ token: EclLanguageService }], target: i0.ɵɵFactoryTarget.Component }); }
2855
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclAppComponent, selector: "ecl-app", outputs: { languageDismiss: "languageDismiss" }, host: { properties: { "attr.dir": "this.textDirection" } }, queries: [{ propertyName: "eclSiteHeaderLanguage", first: true, predicate: EclSiteHeaderLanguageComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>" }); }
2868
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclAppComponent, selector: "ecl-app", outputs: { languageDismiss: "languageDismiss" }, host: { properties: { "attr.dir": "this.textDirection" } }, queries: [{ propertyName: "eclSiteHeaderLanguage", first: true, predicate: EclSiteHeaderLanguageComponent, descendants: true }, { propertyName: "eclSiteHeader", first: true, predicate: EclSiteHeaderComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>" }); }
2856
2869
  }
2857
2870
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclAppComponent, decorators: [{
2858
2871
  type: Component,
@@ -2863,6 +2876,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImpor
2863
2876
  }], eclSiteHeaderLanguage: [{
2864
2877
  type: ContentChild,
2865
2878
  args: [EclSiteHeaderLanguageComponent]
2879
+ }], eclSiteHeader: [{
2880
+ type: ContentChild,
2881
+ args: [EclSiteHeaderComponent]
2866
2882
  }], languageDismiss: [{
2867
2883
  type: Output
2868
2884
  }] } });
@@ -4602,8 +4618,10 @@ class EclBreadcrumbComponent extends ECLBaseDirective {
4602
4618
  this.eclEllipsisSegment.isHidden = true;
4603
4619
  }
4604
4620
  truncateBreadcrumb() {
4605
- this.insertEllipsisSegmentIntoPosition();
4606
- this.handleOverflownSegments();
4621
+ setTimeout(() => {
4622
+ this.insertEllipsisSegmentIntoPosition();
4623
+ this.handleOverflownSegments();
4624
+ });
4607
4625
  }
4608
4626
  insertEllipsisSegmentIntoPosition() {
4609
4627
  if (this.hasEnoughSegments()) {
@@ -6481,14 +6499,14 @@ class EclExpandableComponent extends ECLBaseDirective {
6481
6499
  }
6482
6500
  }
6483
6501
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclExpandableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
6484
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclExpandableComponent, selector: "ecl-expandable", inputs: { isExpanded: "isExpanded", collapsedLabel: "collapsedLabel", expandedLabel: "expandedLabel" }, outputs: { toggle: "toggle" }, host: { properties: { "class": "this.cssClasses" } }, usesInheritance: true, ngImport: i0, template: "<button eclButton\n variant=\"secondary\"\n class=\"ecl-expandable__toggle\"\n [attr.aria-expanded]=\"isExpanded\"\n (click)=\"onButtonClick()\">\n <span eclButtonLabel>\n <ng-container *ngIf=\"!isExpanded\">\n {{ collapsedLabel || 'ecl.common.EXPAND' | translate }}\n </ng-container>\n <ng-container *ngIf=\"isExpanded\">\n {{ expandedLabel || 'ecl.common.COLLAPSE' | translate }}\n </ng-container>\n </span>\n <ecl-icon icon=\"corner-arrow\" size=\"fluid\" transform=\"rotate-180\"></ecl-icon>\n</button>\n<div class=\"ecl-expandable__content\" [hidden]=\"!isExpanded\">\n <ng-content></ng-content>\n</div>", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EclButtonComponent, selector: "button[eclButton], button[ecl-button], a[eclButton]", inputs: ["variant", "containerStyleClass"] }, { kind: "directive", type: EclButtonLabelDirective, selector: "[eclButtonLabel]" }, { kind: "component", type: EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "isInverted", "ariaHidden", "focusable"] }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
6502
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.4", type: EclExpandableComponent, selector: "ecl-expandable", inputs: { isExpanded: "isExpanded", collapsedLabel: "collapsedLabel", expandedLabel: "expandedLabel" }, outputs: { toggle: "toggle" }, host: { properties: { "class": "this.cssClasses" } }, usesInheritance: true, ngImport: i0, template: "<button eclButton\n variant=\"secondary\"\n type=\"button\"\n class=\"ecl-expandable__toggle\"\n [attr.aria-expanded]=\"isExpanded\"\n (click)=\"onButtonClick()\">\n <span eclButtonLabel>\n <ng-container *ngIf=\"!isExpanded\">\n {{ collapsedLabel || 'ecl.common.EXPAND' | translate }}\n </ng-container>\n <ng-container *ngIf=\"isExpanded\">\n {{ expandedLabel || 'ecl.common.COLLAPSE' | translate }}\n </ng-container>\n </span>\n <ecl-icon icon=\"corner-arrow\" size=\"fluid\" transform=\"rotate-180\"></ecl-icon>\n</button>\n<div class=\"ecl-expandable__content\" [hidden]=\"!isExpanded\">\n <ng-content></ng-content>\n</div>", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EclButtonComponent, selector: "button[eclButton], button[ecl-button], a[eclButton]", inputs: ["variant", "containerStyleClass"] }, { kind: "directive", type: EclButtonLabelDirective, selector: "[eclButtonLabel]" }, { kind: "component", type: EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "isInverted", "ariaHidden", "focusable"] }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
6485
6503
  }
6486
6504
  __decorate([
6487
6505
  coerceBoolean
6488
6506
  ], EclExpandableComponent.prototype, "isExpanded", void 0);
6489
6507
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.4", ngImport: i0, type: EclExpandableComponent, decorators: [{
6490
6508
  type: Component,
6491
- args: [{ selector: 'ecl-expandable', template: "<button eclButton\n variant=\"secondary\"\n class=\"ecl-expandable__toggle\"\n [attr.aria-expanded]=\"isExpanded\"\n (click)=\"onButtonClick()\">\n <span eclButtonLabel>\n <ng-container *ngIf=\"!isExpanded\">\n {{ collapsedLabel || 'ecl.common.EXPAND' | translate }}\n </ng-container>\n <ng-container *ngIf=\"isExpanded\">\n {{ expandedLabel || 'ecl.common.COLLAPSE' | translate }}\n </ng-container>\n </span>\n <ecl-icon icon=\"corner-arrow\" size=\"fluid\" transform=\"rotate-180\"></ecl-icon>\n</button>\n<div class=\"ecl-expandable__content\" [hidden]=\"!isExpanded\">\n <ng-content></ng-content>\n</div>", styles: [":host{display:block}\n"] }]
6509
+ args: [{ selector: 'ecl-expandable', template: "<button eclButton\n variant=\"secondary\"\n type=\"button\"\n class=\"ecl-expandable__toggle\"\n [attr.aria-expanded]=\"isExpanded\"\n (click)=\"onButtonClick()\">\n <span eclButtonLabel>\n <ng-container *ngIf=\"!isExpanded\">\n {{ collapsedLabel || 'ecl.common.EXPAND' | translate }}\n </ng-container>\n <ng-container *ngIf=\"isExpanded\">\n {{ expandedLabel || 'ecl.common.COLLAPSE' | translate }}\n </ng-container>\n </span>\n <ecl-icon icon=\"corner-arrow\" size=\"fluid\" transform=\"rotate-180\"></ecl-icon>\n</button>\n<div class=\"ecl-expandable__content\" [hidden]=\"!isExpanded\">\n <ng-content></ng-content>\n</div>", styles: [":host{display:block}\n"] }]
6492
6510
  }], propDecorators: { isExpanded: [{
6493
6511
  type: Input
6494
6512
  }], collapsedLabel: [{