ctt-puro 0.42.28 → 0.43.0

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.
@@ -1,7 +1,6 @@
1
1
  import { CommonModule, isPlatformBrowser, NgOptimizedImage } from '@angular/common';
2
2
  import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, PLATFORM_ID, inject, signal, } from '@angular/core';
3
- import { NavigationEnd, Router } from '@angular/router';
4
- import { filter } from 'rxjs';
3
+ import { Router } from '@angular/router';
5
4
  import { PuroActiveModalDirective, PuroLinkTypeDirective, } from '../../directives';
6
5
  import { PuroNavStickyDirective } from '../../directives/puro-nav-sticky/puro-nav-sticky.directive';
7
6
  import * as i0 from "@angular/core";
@@ -24,18 +23,6 @@ export class PuroHeaderMobileComponent {
24
23
  this.cssBgUrl = `url("${this.hotelBrand.src}")`;
25
24
  }
26
25
  if (isPlatformBrowser(this.platformId)) {
27
- // Añadir clase hotels al body si es necesario
28
- if (this.siteId === this.SITE_HOTELS) {
29
- document.body.classList.add('hotels');
30
- }
31
- // Reforzar clase tras cada navegación
32
- this.routerSub = this.router.events
33
- .pipe(filter((e) => e instanceof NavigationEnd))
34
- .subscribe(() => {
35
- if (this.siteId === this.SITE_HOTELS) {
36
- document.body.classList.add('hotels');
37
- }
38
- });
39
26
  // Inicializar estado sticky
40
27
  this.updateStickyState();
41
28
  // 👁️ Observer para cambios de clase en el body
@@ -58,15 +45,11 @@ export class PuroHeaderMobileComponent {
58
45
  }
59
46
  }
60
47
  ngOnDestroy() {
61
- this.routerSub?.unsubscribe();
62
48
  this.observer?.disconnect();
63
49
  if (this.scrollListener)
64
50
  window.removeEventListener('scroll', this.scrollListener);
65
51
  if (this.rafId)
66
52
  cancelAnimationFrame(this.rafId);
67
- if (isPlatformBrowser(this.platformId)) {
68
- document.body.classList.remove('hotels');
69
- }
70
53
  }
71
54
  updateStickyState() {
72
55
  const current = this.checkStickyClasses();
@@ -93,7 +76,7 @@ export class PuroHeaderMobileComponent {
93
76
  }
94
77
  }
95
78
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PuroHeaderMobileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
96
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: PuroHeaderMobileComponent, isStandalone: true, selector: "lib-puro-header-mobile", inputs: { titleMenu: "titleMenu", titleLang: "titleLang", btnBook: "btnBook", navLinks: "navLinks", bottomLinks: "bottomLinks", isDynamic: "isDynamic", hotelBrand: "hotelBrand", logoHotel: "logoHotel", logoHotelWhite: "logoHotelWhite", siteId: "siteId" }, outputs: { btnClick: "btnClick" }, providers: [PuroActiveModalDirective], ngImport: i0, template: "<header class=\"header\" navSticky [isDynamic]=\"isDynamic\">\n <div class=\"banner__logo\">\n <a\n [href]=\"navLinks?.[0]?.url\"\n [linkType]=\"navLinks?.[0]?.linkType\"\n aria-label=\"Saulo logo\"\n >\n @if (logoHotel && logoHotelWhite) {\n <img\n [ngSrc]=\"hasStickyClasses() ? logoHotel : logoHotelWhite\"\n alt=\"Logo\"\n width=\"177\"\n height=\"68\"\n class=\"banner__logo--img restaurant\"\n priority\n />\n } @else {\n <svg\n aria-hidden=\"true\"\n width=\"177\"\n height=\"68\"\n focusable=\"false\"\n class=\"banner__logo--img\"\n >\n @if (siteId === SITE_HOTELS) {\n <use href=\"#puro-logo\" class=\"purohotels\"></use>\n }\n @if (siteId === SITE_BEACH) {\n <use href=\"#purobeach-logo\" class=\"purobeach\"></use>\n }\n @if (siteId === SITE_GROUP) {\n <use href=\"#purogroup-logo\" class=\"purogroup\"></use>\n }\n </svg>\n }\n </a>\n </div>\n <div class=\"header__leftNav\">\n <div\n class=\"header__menu js-active-modal\"\n activeModal\n data-modal_name=\"navigation\"\n role=\"button\"\n [attr.aria-label]=\"titleMenu ?? 'Menu'\"\n >\n <i class=\"icon-83\"></i>\n @if (titleMenu) {\n <span>{{ titleMenu }}</span>\n }\n </div>\n <div\n class=\"header__language js-active-modal\"\n activeModal\n data-modal_name=\"language\"\n role=\"button\"\n [attr.aria-label]=\"titleLang ?? 'Language Menu'\"\n >\n @if (titleLang) {\n {{ titleLang }}\n }\n </div>\n </div>\n @if (btnBook) {\n <a\n (click)=\"btnClick.emit()\"\n class=\"header__reserver\"\n role=\"button\"\n [attr.aria-label]=\"btnBook\"\n >\n <div class=\"btn btn__primary btn--lg\">\n <span>{{ btnBook }}</span>\n </div>\n </a>\n }\n</header>\n\n<div class=\"modal modal--solidCream modal--navigation\">\n <div class=\"modal__inner\">\n <div class=\"modal__body\" [style.--bg-url]=\"cssBgUrl\">\n <div\n class=\"modal__close js-close\"\n activeModal\n data-modal_name=\"navigation\"\n role=\"button\"\n aria-label=\"Close Button\"\n >\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n class=\"modal__close--icon\"\n >\n <use href=\"#modal-close\"></use>\n </svg>\n </div>\n <div class=\"modal__nav\">\n <ul class=\"modal__nav--items\">\n @if (navLinks) {\n @for (link of navLinks; track $index) {\n <li class=\"modal__nav--link\">\n <a\n [href]=\"link.url\"\n [linkType]=\"link.linkType\"\n [attr.aria-label]=\"link.label\"\n >{{ link.label }}</a\n >\n </li>\n }\n }\n </ul>\n <ul class=\"modal__nav--itemsSmall\">\n @if (bottomLinks) {\n @for (link of bottomLinks; track $index) {\n <li class=\"modal__nav--link\">\n <a\n [linkType]=\"link.linkType\"\n [href]=\"link.url\"\n [attr.aria-label]=\"link.label\"\n >{{ link.label }}</a\n >\n </li>\n }\n }\n </ul>\n </div>\n </div>\n </div>\n</div>\n", styles: [".modal.modal--navigation .modal__body:after{background-image:var(--bg-url)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: PuroLinkTypeDirective, selector: "[linkType]", inputs: ["linkType", "href", "modalClick"], outputs: ["bookClick", "anchorClicked"] }, { kind: "directive", type: PuroActiveModalDirective, selector: "[activeModal]" }, { kind: "directive", type: PuroNavStickyDirective, selector: "[navSticky]", inputs: ["isDynamic"] }, { kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
79
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: PuroHeaderMobileComponent, isStandalone: true, selector: "lib-puro-header-mobile", inputs: { titleMenu: "titleMenu", titleLang: "titleLang", btnBook: "btnBook", navLinks: "navLinks", bottomLinks: "bottomLinks", isDynamic: "isDynamic", hotelBrand: "hotelBrand", logoHotel: "logoHotel", logoHotelWhite: "logoHotelWhite", siteId: "siteId" }, outputs: { btnClick: "btnClick" }, providers: [PuroActiveModalDirective], ngImport: i0, template: "<header class=\"header\" navSticky [isDynamic]=\"isDynamic\">\n <div class=\"banner__logo\">\n <a\n [href]=\"navLinks?.[0]?.url\"\n [linkType]=\"navLinks?.[0]?.linkType\"\n aria-label=\"Saulo logo\"\n >\n @if (logoHotel && logoHotelWhite) {\n <img\n [ngSrc]=\"hasStickyClasses() ? logoHotel : logoHotelWhite\"\n alt=\"Logo\"\n width=\"177\"\n height=\"68\"\n class=\"banner__logo--img restaurant\"\n priority\n />\n } @else {\n <svg\n aria-hidden=\"true\"\n width=\"177\"\n height=\"68\"\n focusable=\"false\"\n class=\"banner__logo--img\"\n >\n @if (siteId === SITE_HOTELS) {\n <use href=\"#puro-logo\" class=\"purohotels\"></use>\n }\n @if (siteId === SITE_BEACH) {\n <use href=\"#purobeach-logo\" class=\"purobeach\"></use>\n }\n @if (siteId === SITE_GROUP) {\n <use href=\"#purogroup-logo\" class=\"purogroup\"></use>\n }\n </svg>\n }\n </a>\n </div>\n <div class=\"header__leftNav\">\n <div\n class=\"header__menu js-active-modal\"\n activeModal\n data-modal_name=\"navigation\"\n role=\"button\"\n [attr.aria-label]=\"titleMenu ?? 'Menu'\"\n >\n <i class=\"icon-83\"></i>\n @if (titleMenu) {\n <span>{{ titleMenu }}</span>\n }\n </div>\n <div\n class=\"header__language js-active-modal\"\n activeModal\n data-modal_name=\"language\"\n role=\"button\"\n [attr.aria-label]=\"titleLang ?? 'Language Menu'\"\n >\n @if (titleLang) {\n {{ titleLang }}\n }\n </div>\n </div>\n @if (btnBook) {\n <a\n (click)=\"btnClick.emit()\"\n class=\"header__reserver\"\n role=\"button\"\n [attr.aria-label]=\"btnBook\"\n >\n <div class=\"btn btn__primary btn--lg\">\n <span>{{ btnBook }}</span>\n </div>\n </a>\n }\n</header>\n\n<div class=\"modal modal--solidCream modal--navigation\">\n <div class=\"modal__inner\">\n <div class=\"modal__body\" [style.--bg-url]=\"cssBgUrl\">\n <div\n class=\"modal__close js-close\"\n activeModal\n data-modal_name=\"navigation\"\n role=\"button\"\n aria-label=\"Close Button\"\n >\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n class=\"modal__close--icon\"\n >\n <use href=\"#modal-close\"></use>\n </svg>\n </div>\n <div class=\"modal__nav\">\n <ul class=\"modal__nav--items\">\n @if (navLinks) {\n @for (link of navLinks; track $index) {\n <li class=\"modal__nav--link\">\n <a\n [href]=\"link.url\"\n [linkType]=\"link.linkType\"\n [attr.aria-label]=\"link.label\"\n >{{ link.label }}</a\n >\n </li>\n }\n }\n </ul>\n <ul class=\"modal__nav--itemsSmall\">\n @if (bottomLinks) {\n @for (link of bottomLinks; track $index) {\n @if(link.url === \"lang\"){\n <li \n class=\"modal__nav--link js-active-modal\"\n activeModal\n data-modal_name=\"language\"\n role=\"button\"\n [attr.aria-label]=\"link.label ?? 'Language Menu'\"\n >\n <a>\n {{link.label}}\n </a>\n </li>\n }\n @else {\n <li class=\"modal__nav--link\">\n <a\n [linkType]=\"link.linkType\"\n [href]=\"link.url\"\n [attr.aria-label]=\"link.label\"\n >{{ link.label }}</a\n >\n </li>\n }\n }\n }\n </ul>\n </div>\n </div>\n </div>\n</div>\n", styles: [".modal.modal--navigation .modal__body:after{background-image:var(--bg-url)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: PuroLinkTypeDirective, selector: "[linkType]", inputs: ["linkType", "href", "modalClick"], outputs: ["bookClick", "anchorClicked"] }, { kind: "directive", type: PuroActiveModalDirective, selector: "[activeModal]" }, { kind: "directive", type: PuroNavStickyDirective, selector: "[navSticky]", inputs: ["isDynamic"] }, { kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
97
80
  }
98
81
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PuroHeaderMobileComponent, decorators: [{
99
82
  type: Component,
@@ -103,7 +86,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
103
86
  PuroActiveModalDirective,
104
87
  PuroNavStickyDirective,
105
88
  NgOptimizedImage,
106
- ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [PuroActiveModalDirective], template: "<header class=\"header\" navSticky [isDynamic]=\"isDynamic\">\n <div class=\"banner__logo\">\n <a\n [href]=\"navLinks?.[0]?.url\"\n [linkType]=\"navLinks?.[0]?.linkType\"\n aria-label=\"Saulo logo\"\n >\n @if (logoHotel && logoHotelWhite) {\n <img\n [ngSrc]=\"hasStickyClasses() ? logoHotel : logoHotelWhite\"\n alt=\"Logo\"\n width=\"177\"\n height=\"68\"\n class=\"banner__logo--img restaurant\"\n priority\n />\n } @else {\n <svg\n aria-hidden=\"true\"\n width=\"177\"\n height=\"68\"\n focusable=\"false\"\n class=\"banner__logo--img\"\n >\n @if (siteId === SITE_HOTELS) {\n <use href=\"#puro-logo\" class=\"purohotels\"></use>\n }\n @if (siteId === SITE_BEACH) {\n <use href=\"#purobeach-logo\" class=\"purobeach\"></use>\n }\n @if (siteId === SITE_GROUP) {\n <use href=\"#purogroup-logo\" class=\"purogroup\"></use>\n }\n </svg>\n }\n </a>\n </div>\n <div class=\"header__leftNav\">\n <div\n class=\"header__menu js-active-modal\"\n activeModal\n data-modal_name=\"navigation\"\n role=\"button\"\n [attr.aria-label]=\"titleMenu ?? 'Menu'\"\n >\n <i class=\"icon-83\"></i>\n @if (titleMenu) {\n <span>{{ titleMenu }}</span>\n }\n </div>\n <div\n class=\"header__language js-active-modal\"\n activeModal\n data-modal_name=\"language\"\n role=\"button\"\n [attr.aria-label]=\"titleLang ?? 'Language Menu'\"\n >\n @if (titleLang) {\n {{ titleLang }}\n }\n </div>\n </div>\n @if (btnBook) {\n <a\n (click)=\"btnClick.emit()\"\n class=\"header__reserver\"\n role=\"button\"\n [attr.aria-label]=\"btnBook\"\n >\n <div class=\"btn btn__primary btn--lg\">\n <span>{{ btnBook }}</span>\n </div>\n </a>\n }\n</header>\n\n<div class=\"modal modal--solidCream modal--navigation\">\n <div class=\"modal__inner\">\n <div class=\"modal__body\" [style.--bg-url]=\"cssBgUrl\">\n <div\n class=\"modal__close js-close\"\n activeModal\n data-modal_name=\"navigation\"\n role=\"button\"\n aria-label=\"Close Button\"\n >\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n class=\"modal__close--icon\"\n >\n <use href=\"#modal-close\"></use>\n </svg>\n </div>\n <div class=\"modal__nav\">\n <ul class=\"modal__nav--items\">\n @if (navLinks) {\n @for (link of navLinks; track $index) {\n <li class=\"modal__nav--link\">\n <a\n [href]=\"link.url\"\n [linkType]=\"link.linkType\"\n [attr.aria-label]=\"link.label\"\n >{{ link.label }}</a\n >\n </li>\n }\n }\n </ul>\n <ul class=\"modal__nav--itemsSmall\">\n @if (bottomLinks) {\n @for (link of bottomLinks; track $index) {\n <li class=\"modal__nav--link\">\n <a\n [linkType]=\"link.linkType\"\n [href]=\"link.url\"\n [attr.aria-label]=\"link.label\"\n >{{ link.label }}</a\n >\n </li>\n }\n }\n </ul>\n </div>\n </div>\n </div>\n</div>\n", styles: [".modal.modal--navigation .modal__body:after{background-image:var(--bg-url)}\n"] }]
89
+ ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [PuroActiveModalDirective], template: "<header class=\"header\" navSticky [isDynamic]=\"isDynamic\">\n <div class=\"banner__logo\">\n <a\n [href]=\"navLinks?.[0]?.url\"\n [linkType]=\"navLinks?.[0]?.linkType\"\n aria-label=\"Saulo logo\"\n >\n @if (logoHotel && logoHotelWhite) {\n <img\n [ngSrc]=\"hasStickyClasses() ? logoHotel : logoHotelWhite\"\n alt=\"Logo\"\n width=\"177\"\n height=\"68\"\n class=\"banner__logo--img restaurant\"\n priority\n />\n } @else {\n <svg\n aria-hidden=\"true\"\n width=\"177\"\n height=\"68\"\n focusable=\"false\"\n class=\"banner__logo--img\"\n >\n @if (siteId === SITE_HOTELS) {\n <use href=\"#puro-logo\" class=\"purohotels\"></use>\n }\n @if (siteId === SITE_BEACH) {\n <use href=\"#purobeach-logo\" class=\"purobeach\"></use>\n }\n @if (siteId === SITE_GROUP) {\n <use href=\"#purogroup-logo\" class=\"purogroup\"></use>\n }\n </svg>\n }\n </a>\n </div>\n <div class=\"header__leftNav\">\n <div\n class=\"header__menu js-active-modal\"\n activeModal\n data-modal_name=\"navigation\"\n role=\"button\"\n [attr.aria-label]=\"titleMenu ?? 'Menu'\"\n >\n <i class=\"icon-83\"></i>\n @if (titleMenu) {\n <span>{{ titleMenu }}</span>\n }\n </div>\n <div\n class=\"header__language js-active-modal\"\n activeModal\n data-modal_name=\"language\"\n role=\"button\"\n [attr.aria-label]=\"titleLang ?? 'Language Menu'\"\n >\n @if (titleLang) {\n {{ titleLang }}\n }\n </div>\n </div>\n @if (btnBook) {\n <a\n (click)=\"btnClick.emit()\"\n class=\"header__reserver\"\n role=\"button\"\n [attr.aria-label]=\"btnBook\"\n >\n <div class=\"btn btn__primary btn--lg\">\n <span>{{ btnBook }}</span>\n </div>\n </a>\n }\n</header>\n\n<div class=\"modal modal--solidCream modal--navigation\">\n <div class=\"modal__inner\">\n <div class=\"modal__body\" [style.--bg-url]=\"cssBgUrl\">\n <div\n class=\"modal__close js-close\"\n activeModal\n data-modal_name=\"navigation\"\n role=\"button\"\n aria-label=\"Close Button\"\n >\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n class=\"modal__close--icon\"\n >\n <use href=\"#modal-close\"></use>\n </svg>\n </div>\n <div class=\"modal__nav\">\n <ul class=\"modal__nav--items\">\n @if (navLinks) {\n @for (link of navLinks; track $index) {\n <li class=\"modal__nav--link\">\n <a\n [href]=\"link.url\"\n [linkType]=\"link.linkType\"\n [attr.aria-label]=\"link.label\"\n >{{ link.label }}</a\n >\n </li>\n }\n }\n </ul>\n <ul class=\"modal__nav--itemsSmall\">\n @if (bottomLinks) {\n @for (link of bottomLinks; track $index) {\n @if(link.url === \"lang\"){\n <li \n class=\"modal__nav--link js-active-modal\"\n activeModal\n data-modal_name=\"language\"\n role=\"button\"\n [attr.aria-label]=\"link.label ?? 'Language Menu'\"\n >\n <a>\n {{link.label}}\n </a>\n </li>\n }\n @else {\n <li class=\"modal__nav--link\">\n <a\n [linkType]=\"link.linkType\"\n [href]=\"link.url\"\n [attr.aria-label]=\"link.label\"\n >{{ link.label }}</a\n >\n </li>\n }\n }\n }\n </ul>\n </div>\n </div>\n </div>\n</div>\n", styles: [".modal.modal--navigation .modal__body:after{background-image:var(--bg-url)}\n"] }]
107
90
  }], propDecorators: { titleMenu: [{
108
91
  type: Input
109
92
  }], titleLang: [{
@@ -127,4 +110,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
127
110
  }], btnClick: [{
128
111
  type: Output
129
112
  }] } });
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyby1oZWFkZXItbW9iaWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3B1cm8vc3JjL2xpYi9jb21wb25lbnRzL3B1cm8taGVhZGVyLW1vYmlsZS9wdXJvLWhlYWRlci1tb2JpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHVyby9zcmMvbGliL2NvbXBvbmVudHMvcHVyby1oZWFkZXItbW9iaWxlL3B1cm8taGVhZGVyLW1vYmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEYsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sV0FBVyxFQUNYLE1BQU0sRUFHTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlCLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIscUJBQXFCLEdBQ3RCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNERBQTRELENBQUM7O0FBa0JwRyxNQUFNLE9BQU8seUJBQXlCO0lBZnRDO1FBZ0JVLG1CQUFjLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDbEQsZUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqQyxXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBT3ZCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFTakIsYUFBUSxHQUFHLElBQUksWUFB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QXdCO3dCQUN4QixzQkFBc0I7d0JBQ3RCLGdCQUFnQjtxQkFDakIsbUJBR2dCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyx3QkFBd0IsQ0FBQzs4QkFPNUIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBS0ksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXIsIE5nT3B0aW1pemVkSW1hZ2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBQTEFURk9STV9JRCxcbiAgaW5qZWN0LFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIFB1cm9BY3RpdmVNb2RhbERpcmVjdGl2ZSxcbiAgUHVyb0xpbmtUeXBlRGlyZWN0aXZlLFxufSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IFB1cm9OYXZTdGlja3lEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3B1cm8tbmF2LXN0aWNreS9wdXJvLW5hdi1zdGlja3kuZGlyZWN0aXZlJztcbmltcG9ydCB7IFB1cm9CdXR0b25JLCBQdXJvSW1hZ2VJIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1wdXJvLWhlYWRlci1tb2JpbGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFB1cm9MaW5rVHlwZURpcmVjdGl2ZSxcbiAgICBQdXJvQWN0aXZlTW9kYWxEaXJlY3RpdmUsXG4gICAgUHVyb05hdlN0aWNreURpcmVjdGl2ZSxcbiAgICBOZ09wdGltaXplZEltYWdlLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vcHVyby1oZWFkZXItbW9iaWxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3B1cm8taGVhZGVyLW1vYmlsZS5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtQdXJvQWN0aXZlTW9kYWxEaXJlY3RpdmVdLFxufSlcbmV4cG9ydCBjbGFzcyBQdXJvSGVhZGVyTW9iaWxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGFjdGl2ZU1vZGFsRHR2ID0gaW5qZWN0KFB1cm9BY3RpdmVNb2RhbERpcmVjdGl2ZSk7XG4gIHByaXZhdGUgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgQElucHV0KCkgdGl0bGVNZW51Pzogc3RyaW5nO1xuICBASW5wdXQoKSB0aXRsZUxhbmc/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJ0bkJvb2s/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG5hdkxpbmtzPzogUHVyb0J1dHRvbklbXTtcbiAgQElucHV0KCkgYm90dG9tTGlua3M/OiBQdXJvQnV0dG9uSVtdO1xuICBASW5wdXQoKSBpc0R5bmFtaWMgPSBmYWxzZTtcbiAgQElucHV0KCkgaG90ZWxCcmFuZD86IFB1cm9JbWFnZUk7XG4gIEBJbnB1dCgpIGxvZ29Ib3RlbD86IHN0cmluZztcbiAgQElucHV0KCkgbG9nb0hvdGVsV2hpdGU/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNpdGVJZD86XG4gICAgfCB0eXBlb2YgdGhpcy5TSVRFX0dST1VQXG4gICAgfCB0eXBlb2YgdGhpcy5TSVRFX0JFQUNIXG4gICAgfCB0eXBlb2YgdGhpcy5TSVRFX0hPVEVMUztcblxuICBAT3V0cHV0KCkgYnRuQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcmVhZG9ubHkgU0lURV9HUk9VUCA9IDE7XG4gIHJlYWRvbmx5IFNJVEVfSE9URUxTID0gMjtcbiAgcmVhZG9ubHkgU0lURV9CRUFDSCA9IDM7XG5cbiAgY3NzQmdVcmwgPSAnJztcblxuICAvLyDwn5GB77iPIFNpZ25hbCByZWFjdGl2byBxdWUgaW5kaWNhIHNpIGVsIGJvZHkgdGllbmUgbGFzIGNsYXNlcyBzdGlja3lcbiAgaGFzU3RpY2t5Q2xhc3NlcyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcHJpdmF0ZSBvYnNlcnZlcj86IE11dGF0aW9uT2JzZXJ2ZXI7XG4gIHByaXZhdGUgc2Nyb2xsTGlzdGVuZXI/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIHJhZklkPzogbnVtYmVyO1xuICBwcml2YXRlIHJvdXRlclN1Yj86IGFueTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ob3RlbEJyYW5kPy5zcmMpIHtcbiAgICAgIHRoaXMuY3NzQmdVcmwgPSBgdXJsKFwiJHt0aGlzLmhvdGVsQnJhbmQuc3JjfVwiKWA7XG4gICAgfVxuXG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIC8vIEHDsWFkaXIgY2xhc2UgaG90ZWxzIGFsIGJvZHkgc2kgZXMgbmVjZXNhcmlvXG4gICAgICBpZiAodGhpcy5zaXRlSWQgPT09IHRoaXMuU0lURV9IT1RFTFMpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdob3RlbHMnKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVmb3J6YXIgY2xhc2UgdHJhcyBjYWRhIG5hdmVnYWNpw7NuXG4gICAgICB0aGlzLnJvdXRlclN1YiA9IHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgICAucGlwZShmaWx0ZXIoKGUpID0+IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2l0ZUlkID09PSB0aGlzLlNJVEVfSE9URUxTKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2hvdGVscycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIEluaWNpYWxpemFyIGVzdGFkbyBzdGlja3lcbiAgICAgIHRoaXMudXBkYXRlU3RpY2t5U3RhdGUoKTtcblxuICAgICAgLy8g8J+Rge+4jyBPYnNlcnZlciBwYXJhIGNhbWJpb3MgZGUgY2xhc2UgZW4gZWwgYm9keVxuICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHRoaXMudXBkYXRlU3RpY2t5U3RhdGUoKSk7XG4gICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge1xuICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsnY2xhc3MnXSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyDwn46vIExpc3RlbmVyIGRlIHNjcm9sbFxuICAgICAgdGhpcy5zY3JvbGxMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5yYWZJZCEpO1xuICAgICAgICB0aGlzLnJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jaGVja1N0aWNreUNsYXNzZXMoKTtcbiAgICAgICAgICBpZiAodGhpcy5oYXNTdGlja3lDbGFzc2VzKCkgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzU3RpY2t5Q2xhc3Nlcy5zZXQoY3VycmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxMaXN0ZW5lciwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucm91dGVyU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICBpZiAodGhpcy5zY3JvbGxMaXN0ZW5lcilcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbExpc3RlbmVyKTtcbiAgICBpZiAodGhpcy5yYWZJZCkgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5yYWZJZCk7XG5cbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdob3RlbHMnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0aWNreVN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmNoZWNrU3RpY2t5Q2xhc3NlcygpO1xuICAgIGlmICh0aGlzLmhhc1N0aWNreUNsYXNzZXMoKSAhPT0gY3VycmVudCkge1xuICAgICAgdGhpcy5oYXNTdGlja3lDbGFzc2VzLnNldChjdXJyZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrU3RpY2t5Q2xhc3NlcygpOiBib29sZWFuIHtcbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keS5jbGFzc0xpc3Q7XG4gICAgcmV0dXJuIGJvZHkuY29udGFpbnMoJ25hdi1zdGlja3knKSAmJiBib2R5LmNvbnRhaW5zKCdtb2JpbGUtc3RpY2t5Jyk7XG4gIH1cblxuICBjbGlja0J0bkJvb2soKTogdm9pZCB7XG4gICAgdGhpcy5idG5DbGljay5lbWl0KCk7XG4gICAgc3dpdGNoICh0aGlzLnNpdGVJZCkge1xuICAgICAgY2FzZSB0aGlzLlNJVEVfR1JPVVA6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLlNJVEVfSE9URUxTOlxuICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsRHR2LmhhbmRsZUNsaWNrKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLlNJVEVfQkVBQ0g6XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG4iLCI8aGVhZGVyIGNsYXNzPVwiaGVhZGVyXCIgbmF2U3RpY2t5IFtpc0R5bmFtaWNdPVwiaXNEeW5hbWljXCI+XG4gICAgPGRpdiBjbGFzcz1cImJhbm5lcl9fbG9nb1wiPlxuICAgICAgICA8YVxuICAgICAgICAgICAgW2hyZWZdPVwibmF2TGlua3M/LlswXT8udXJsXCJcbiAgICAgICAgICAgIFtsaW5rVHlwZV09XCJuYXZMaW5rcz8uWzBdPy5saW5rVHlwZVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2F1bG8gbG9nb1wiXG4gICAgICAgID5cbiAgICAgICAgQGlmIChsb2dvSG90ZWwgJiYgbG9nb0hvdGVsV2hpdGUpIHtcbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgW25nU3JjXT1cImhhc1N0aWNreUNsYXNzZXMoKSA/IGxvZ29Ib3RlbCA6IGxvZ29Ib3RlbFdoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgYWx0PVwiTG9nb1wiXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTc3XCJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNjhcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJhbm5lcl9fbG9nby0taW1nIHJlc3RhdXJhbnRcIlxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxNzdcIlxuICAgICAgICAgICAgICAgIGhlaWdodD1cIjY4XCJcbiAgICAgICAgICAgICAgICBmb2N1c2FibGU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJiYW5uZXJfX2xvZ28tLWltZ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGlmIChzaXRlSWQgPT09IFNJVEVfSE9URUxTKSB7XG4gICAgICAgICAgICAgICAgICAgIDx1c2UgaHJlZj1cIiNwdXJvLWxvZ29cIiBjbGFzcz1cInB1cm9ob3RlbHNcIj48L3VzZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChzaXRlSWQgPT09IFNJVEVfQkVBQ0gpIHtcbiAgICAgICAgICAgICAgICAgICAgPHVzZSBocmVmPVwiI3B1cm9iZWFjaC1sb2dvXCIgY2xhc3M9XCJwdXJvYmVhY2hcIj48L3VzZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChzaXRlSWQgPT09IFNJVEVfR1JPVVApIHtcbiAgICAgICAgICAgICAgICAgICAgPHVzZSBocmVmPVwiI3B1cm9ncm91cC1sb2dvXCIgY2xhc3M9XCJwdXJvZ3JvdXBcIj48L3VzZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgfVxuICAgICAgICA8L2E+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImhlYWRlcl9fbGVmdE5hdlwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImhlYWRlcl9fbWVudSBqcy1hY3RpdmUtbW9kYWxcIlxuICAgICAgICAgICAgYWN0aXZlTW9kYWxcbiAgICAgICAgICAgIGRhdGEtbW9kYWxfbmFtZT1cIm5hdmlnYXRpb25cIlxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRpdGxlTWVudSA/PyAnTWVudSdcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb24tODNcIj48L2k+XG4gICAgICAgICAgICBAaWYgKHRpdGxlTWVudSkge1xuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHRpdGxlTWVudSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyX19sYW5ndWFnZSBqcy1hY3RpdmUtbW9kYWxcIlxuICAgICAgICAgICAgYWN0aXZlTW9kYWxcbiAgICAgICAgICAgIGRhdGEtbW9kYWxfbmFtZT1cImxhbmd1YWdlXCJcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0aXRsZUxhbmcgPz8gJ0xhbmd1YWdlIE1lbnUnXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGlmICh0aXRsZUxhbmcpIHtcbiAgICAgICAgICAgICAgICB7eyB0aXRsZUxhbmcgfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgQGlmIChidG5Cb29rKSB7XG4gICAgICAgIDxhXG4gICAgICAgICAgICAoY2xpY2spPVwiYnRuQ2xpY2suZW1pdCgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyX19yZXNlcnZlclwiXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYnRuQm9va1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4gYnRuX19wcmltYXJ5IGJ0bi0tbGdcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBidG5Cb29rIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYT5cbiAgICB9XG48L2hlYWRlcj5cblxuPGRpdiBjbGFzcz1cIm1vZGFsIG1vZGFsLS1zb2xpZENyZWFtIG1vZGFsLS1uYXZpZ2F0aW9uXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsX19pbm5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWxfX2JvZHlcIiBbc3R5bGUuLS1iZy11cmxdPVwiY3NzQmdVcmxcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1vZGFsX19jbG9zZSBqcy1jbG9zZVwiXG4gICAgICAgICAgICAgICAgYWN0aXZlTW9kYWxcbiAgICAgICAgICAgICAgICBkYXRhLW1vZGFsX25hbWU9XCJuYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2UgQnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtb2RhbF9fY2xvc2UtLWljb25cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHVzZSBocmVmPVwiI21vZGFsLWNsb3NlXCI+PC91c2U+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbF9fbmF2XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibW9kYWxfX25hdi0taXRlbXNcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChuYXZMaW5rcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAobGluayBvZiBuYXZMaW5rczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibW9kYWxfX25hdi0tbGlua1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwibGluay51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmtUeXBlXT1cImxpbmsubGlua1R5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsaW5rLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBsaW5rLmxhYmVsIH19PC9hXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJtb2RhbF9fbmF2LS1pdGVtc1NtYWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoYm90dG9tTGlua3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGxpbmsgb2YgYm90dG9tTGlua3M7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm1vZGFsX19uYXYtLWxpbmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaW5rVHlwZV09XCJsaW5rLmxpbmtUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImxpbmsudXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGluay5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgbGluay5sYWJlbCB9fTwvYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyby1oZWFkZXItbW9iaWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3B1cm8vc3JjL2xpYi9jb21wb25lbnRzL3B1cm8taGVhZGVyLW1vYmlsZS9wdXJvLWhlYWRlci1tb2JpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHVyby9zcmMvbGliL2NvbXBvbmVudHMvcHVyby1oZWFkZXItbW9iaWxlL3B1cm8taGVhZGVyLW1vYmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEYsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sV0FBVyxFQUNYLE1BQU0sRUFHTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFpQixNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RCxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLHFCQUFxQixHQUN0QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDREQUE0RCxDQUFDOztBQWtCcEcsTUFBTSxPQUFPLHlCQUF5QjtJQWZ0QztRQWdCVSxtQkFBYyxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ2xELGVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQU92QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBU2pCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRS9CLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixnQkFBVyxH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TTtZQUNSO2dCQUNFLE1BQU07U0FDVDtJQUNILENBQUM7K0dBbkdVLHlCQUF5QjttR0FBekIseUJBQXlCLHdXQUZ6QixDQUFDLHdCQUF3QixDQUFDLDBCQ25DdkMsc3FLQThJQSxzSURwSEksWUFBWSwrQkFDWixxQkFBcUIsNElBQ3JCLHdCQUF3QiwwREFDeEIsc0JBQXNCLCtFQUN0QixnQkFBZ0I7OzRGQU9QLHlCQUF5QjtrQkFmckMsU0FBUzsrQkFDRSx3QkFBd0IsY0FDdEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1oscUJBQXFCO3dCQUNyQix3QkFBd0I7d0JBQ3hCLHNCQUFzQjt3QkFDdEIsZ0JBQWdCO3FCQUNqQixtQkFHZ0IsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLHdCQUF3QixDQUFDOzhCQU81QixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFLSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBpc1BsYXRmb3JtQnJvd3NlciwgTmdPcHRpbWl6ZWRJbWFnZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxuICBpbmplY3QsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgUHVyb0FjdGl2ZU1vZGFsRGlyZWN0aXZlLFxuICBQdXJvTGlua1R5cGVEaXJlY3RpdmUsXG59IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgUHVyb05hdlN0aWNreURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcHVyby1uYXYtc3RpY2t5L3B1cm8tbmF2LXN0aWNreS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUHVyb0J1dHRvbkksIFB1cm9JbWFnZUkgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXB1cm8taGVhZGVyLW1vYmlsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUHVyb0xpbmtUeXBlRGlyZWN0aXZlLFxuICAgIFB1cm9BY3RpdmVNb2RhbERpcmVjdGl2ZSxcbiAgICBQdXJvTmF2U3RpY2t5RGlyZWN0aXZlLFxuICAgIE5nT3B0aW1pemVkSW1hZ2UsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9wdXJvLWhlYWRlci1tb2JpbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcHVyby1oZWFkZXItbW9iaWxlLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1B1cm9BY3RpdmVNb2RhbERpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIFB1cm9IZWFkZXJNb2JpbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgYWN0aXZlTW9kYWxEdHYgPSBpbmplY3QoUHVyb0FjdGl2ZU1vZGFsRGlyZWN0aXZlKTtcbiAgcHJpdmF0ZSBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcbiAgcHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICBASW5wdXQoKSB0aXRsZU1lbnU/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRpdGxlTGFuZz86IHN0cmluZztcbiAgQElucHV0KCkgYnRuQm9vaz86IHN0cmluZztcbiAgQElucHV0KCkgbmF2TGlua3M/OiBQdXJvQnV0dG9uSVtdO1xuICBASW5wdXQoKSBib3R0b21MaW5rcz86IFB1cm9CdXR0b25JW107XG4gIEBJbnB1dCgpIGlzRHluYW1pYyA9IGZhbHNlO1xuICBASW5wdXQoKSBob3RlbEJyYW5kPzogUHVyb0ltYWdlSTtcbiAgQElucHV0KCkgbG9nb0hvdGVsPzogc3RyaW5nO1xuICBASW5wdXQoKSBsb2dvSG90ZWxXaGl0ZT86IHN0cmluZztcbiAgQElucHV0KCkgc2l0ZUlkPzpcbiAgICB8IHR5cGVvZiB0aGlzLlNJVEVfR1JPVVBcbiAgICB8IHR5cGVvZiB0aGlzLlNJVEVfQkVBQ0hcbiAgICB8IHR5cGVvZiB0aGlzLlNJVEVfSE9URUxTO1xuXG4gIEBPdXRwdXQoKSBidG5DbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICByZWFkb25seSBTSVRFX0dST1VQID0gMTtcbiAgcmVhZG9ubHkgU0lURV9IT1RFTFMgPSAyO1xuICByZWFkb25seSBTSVRFX0JFQUNIID0gMztcblxuICBjc3NCZ1VybCA9ICcnO1xuXG4gIC8vIPCfkYHvuI8gU2lnbmFsIHJlYWN0aXZvIHF1ZSBpbmRpY2Egc2kgZWwgYm9keSB0aWVuZSBsYXMgY2xhc2VzIHN0aWNreVxuICBoYXNTdGlja3lDbGFzc2VzID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcml2YXRlIG9ic2VydmVyPzogTXV0YXRpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBzY3JvbGxMaXN0ZW5lcj86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmFmSWQ/OiBudW1iZXI7XG4gIHByaXZhdGUgcm91dGVyU3ViPzogYW55O1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhvdGVsQnJhbmQ/LnNyYykge1xuICAgICAgdGhpcy5jc3NCZ1VybCA9IGB1cmwoXCIke3RoaXMuaG90ZWxCcmFuZC5zcmN9XCIpYDtcbiAgICB9XG5cbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuXG4gICAgICAvLyBJbmljaWFsaXphciBlc3RhZG8gc3RpY2t5XG4gICAgICB0aGlzLnVwZGF0ZVN0aWNreVN0YXRlKCk7XG5cbiAgICAgIC8vIPCfkYHvuI8gT2JzZXJ2ZXIgcGFyYSBjYW1iaW9zIGRlIGNsYXNlIGVuIGVsIGJvZHlcbiAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB0aGlzLnVwZGF0ZVN0aWNreVN0YXRlKCkpO1xuICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHtcbiAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgYXR0cmlidXRlRmlsdGVyOiBbJ2NsYXNzJ10sXG4gICAgICB9KTtcblxuICAgICAgLy8g8J+OryBMaXN0ZW5lciBkZSBzY3JvbGxcbiAgICAgIHRoaXMuc2Nyb2xsTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMucmFmSWQhKTtcbiAgICAgICAgdGhpcy5yYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY2hlY2tTdGlja3lDbGFzc2VzKCk7XG4gICAgICAgICAgaWYgKHRoaXMuaGFzU3RpY2t5Q2xhc3NlcygpICE9PSBjdXJyZW50KSB7XG4gICAgICAgICAgICB0aGlzLmhhc1N0aWNreUNsYXNzZXMuc2V0KGN1cnJlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsTGlzdGVuZXIsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgaWYgKHRoaXMuc2Nyb2xsTGlzdGVuZXIpXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxMaXN0ZW5lcik7XG4gICAgaWYgKHRoaXMucmFmSWQpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMucmFmSWQpO1xuXG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0aWNreVN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmNoZWNrU3RpY2t5Q2xhc3NlcygpO1xuICAgIGlmICh0aGlzLmhhc1N0aWNreUNsYXNzZXMoKSAhPT0gY3VycmVudCkge1xuICAgICAgdGhpcy5oYXNTdGlja3lDbGFzc2VzLnNldChjdXJyZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrU3RpY2t5Q2xhc3NlcygpOiBib29sZWFuIHtcbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keS5jbGFzc0xpc3Q7XG4gICAgcmV0dXJuIGJvZHkuY29udGFpbnMoJ25hdi1zdGlja3knKSAmJiBib2R5LmNvbnRhaW5zKCdtb2JpbGUtc3RpY2t5Jyk7XG4gIH1cblxuICBjbGlja0J0bkJvb2soKTogdm9pZCB7XG4gICAgdGhpcy5idG5DbGljay5lbWl0KCk7XG4gICAgc3dpdGNoICh0aGlzLnNpdGVJZCkge1xuICAgICAgY2FzZSB0aGlzLlNJVEVfR1JPVVA6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLlNJVEVfSE9URUxTOlxuICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsRHR2LmhhbmRsZUNsaWNrKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLlNJVEVfQkVBQ0g6XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG4iLCI8aGVhZGVyIGNsYXNzPVwiaGVhZGVyXCIgbmF2U3RpY2t5IFtpc0R5bmFtaWNdPVwiaXNEeW5hbWljXCI+XG4gICAgPGRpdiBjbGFzcz1cImJhbm5lcl9fbG9nb1wiPlxuICAgICAgICA8YVxuICAgICAgICAgICAgW2hyZWZdPVwibmF2TGlua3M/LlswXT8udXJsXCJcbiAgICAgICAgICAgIFtsaW5rVHlwZV09XCJuYXZMaW5rcz8uWzBdPy5saW5rVHlwZVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2F1bG8gbG9nb1wiXG4gICAgICAgID5cbiAgICAgICAgQGlmIChsb2dvSG90ZWwgJiYgbG9nb0hvdGVsV2hpdGUpIHtcbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgW25nU3JjXT1cImhhc1N0aWNreUNsYXNzZXMoKSA/IGxvZ29Ib3RlbCA6IGxvZ29Ib3RlbFdoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgYWx0PVwiTG9nb1wiXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTc3XCJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNjhcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJhbm5lcl9fbG9nby0taW1nIHJlc3RhdXJhbnRcIlxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxNzdcIlxuICAgICAgICAgICAgICAgIGhlaWdodD1cIjY4XCJcbiAgICAgICAgICAgICAgICBmb2N1c2FibGU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJiYW5uZXJfX2xvZ28tLWltZ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGlmIChzaXRlSWQgPT09IFNJVEVfSE9URUxTKSB7XG4gICAgICAgICAgICAgICAgICAgIDx1c2UgaHJlZj1cIiNwdXJvLWxvZ29cIiBjbGFzcz1cInB1cm9ob3RlbHNcIj48L3VzZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChzaXRlSWQgPT09IFNJVEVfQkVBQ0gpIHtcbiAgICAgICAgICAgICAgICAgICAgPHVzZSBocmVmPVwiI3B1cm9iZWFjaC1sb2dvXCIgY2xhc3M9XCJwdXJvYmVhY2hcIj48L3VzZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChzaXRlSWQgPT09IFNJVEVfR1JPVVApIHtcbiAgICAgICAgICAgICAgICAgICAgPHVzZSBocmVmPVwiI3B1cm9ncm91cC1sb2dvXCIgY2xhc3M9XCJwdXJvZ3JvdXBcIj48L3VzZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgfVxuICAgICAgICA8L2E+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImhlYWRlcl9fbGVmdE5hdlwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImhlYWRlcl9fbWVudSBqcy1hY3RpdmUtbW9kYWxcIlxuICAgICAgICAgICAgYWN0aXZlTW9kYWxcbiAgICAgICAgICAgIGRhdGEtbW9kYWxfbmFtZT1cIm5hdmlnYXRpb25cIlxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRpdGxlTWVudSA/PyAnTWVudSdcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb24tODNcIj48L2k+XG4gICAgICAgICAgICBAaWYgKHRpdGxlTWVudSkge1xuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHRpdGxlTWVudSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyX19sYW5ndWFnZSBqcy1hY3RpdmUtbW9kYWxcIlxuICAgICAgICAgICAgYWN0aXZlTW9kYWxcbiAgICAgICAgICAgIGRhdGEtbW9kYWxfbmFtZT1cImxhbmd1YWdlXCJcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0aXRsZUxhbmcgPz8gJ0xhbmd1YWdlIE1lbnUnXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGlmICh0aXRsZUxhbmcpIHtcbiAgICAgICAgICAgICAgICB7eyB0aXRsZUxhbmcgfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgQGlmIChidG5Cb29rKSB7XG4gICAgICAgIDxhXG4gICAgICAgICAgICAoY2xpY2spPVwiYnRuQ2xpY2suZW1pdCgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyX19yZXNlcnZlclwiXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYnRuQm9va1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4gYnRuX19wcmltYXJ5IGJ0bi0tbGdcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBidG5Cb29rIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYT5cbiAgICB9XG48L2hlYWRlcj5cblxuPGRpdiBjbGFzcz1cIm1vZGFsIG1vZGFsLS1zb2xpZENyZWFtIG1vZGFsLS1uYXZpZ2F0aW9uXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsX19pbm5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWxfX2JvZHlcIiBbc3R5bGUuLS1iZy11cmxdPVwiY3NzQmdVcmxcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1vZGFsX19jbG9zZSBqcy1jbG9zZVwiXG4gICAgICAgICAgICAgICAgYWN0aXZlTW9kYWxcbiAgICAgICAgICAgICAgICBkYXRhLW1vZGFsX25hbWU9XCJuYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2UgQnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtb2RhbF9fY2xvc2UtLWljb25cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHVzZSBocmVmPVwiI21vZGFsLWNsb3NlXCI+PC91c2U+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbF9fbmF2XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibW9kYWxfX25hdi0taXRlbXNcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChuYXZMaW5rcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAobGluayBvZiBuYXZMaW5rczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibW9kYWxfX25hdi0tbGlua1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwibGluay51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmtUeXBlXT1cImxpbmsubGlua1R5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsaW5rLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBsaW5rLmxhYmVsIH19PC9hXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJtb2RhbF9fbmF2LS1pdGVtc1NtYWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoYm90dG9tTGlua3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGxpbmsgb2YgYm90dG9tTGlua3M7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihsaW5rLnVybCA9PT0gXCJsYW5nXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1vZGFsX19uYXYtLWxpbmsganMtYWN0aXZlLW1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZU1vZGFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vZGFsX25hbWU9XCJsYW5ndWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGluay5sYWJlbCA/PyAnTGFuZ3VhZ2UgTWVudSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xpbmsubGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm1vZGFsX19uYXYtLWxpbmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmtUeXBlXT1cImxpbmsubGlua1R5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImxpbmsudXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxpbmsubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBsaW5rLmxhYmVsIH19PC9hXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -6484,18 +6484,6 @@ class PuroHeaderMobileComponent {
6484
6484
  this.cssBgUrl = `url("${this.hotelBrand.src}")`;
6485
6485
  }
6486
6486
  if (isPlatformBrowser(this.platformId)) {
6487
- // Añadir clase hotels al body si es necesario
6488
- if (this.siteId === this.SITE_HOTELS) {
6489
- document.body.classList.add('hotels');
6490
- }
6491
- // Reforzar clase tras cada navegación
6492
- this.routerSub = this.router.events
6493
- .pipe(filter((e) => e instanceof NavigationEnd))
6494
- .subscribe(() => {
6495
- if (this.siteId === this.SITE_HOTELS) {
6496
- document.body.classList.add('hotels');
6497
- }
6498
- });
6499
6487
  // Inicializar estado sticky
6500
6488
  this.updateStickyState();
6501
6489
  // 👁️ Observer para cambios de clase en el body
@@ -6518,15 +6506,11 @@ class PuroHeaderMobileComponent {
6518
6506
  }
6519
6507
  }
6520
6508
  ngOnDestroy() {
6521
- this.routerSub?.unsubscribe();
6522
6509
  this.observer?.disconnect();
6523
6510
  if (this.scrollListener)
6524
6511
  window.removeEventListener('scroll', this.scrollListener);
6525
6512
  if (this.rafId)
6526
6513
  cancelAnimationFrame(this.rafId);
6527
- if (isPlatformBrowser(this.platformId)) {
6528
- document.body.classList.remove('hotels');
6529
- }
6530
6514
  }
6531
6515
  updateStickyState() {
6532
6516
  const current = this.checkStickyClasses();
@@ -6553,7 +6537,7 @@ class PuroHeaderMobileComponent {
6553
6537
  }
6554
6538
  }
6555
6539
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PuroHeaderMobileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6556
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: PuroHeaderMobileComponent, isStandalone: true, selector: "lib-puro-header-mobile", inputs: { titleMenu: "titleMenu", titleLang: "titleLang", btnBook: "btnBook", navLinks: "navLinks", bottomLinks: "bottomLinks", isDynamic: "isDynamic", hotelBrand: "hotelBrand", logoHotel: "logoHotel", logoHotelWhite: "logoHotelWhite", siteId: "siteId" }, outputs: { btnClick: "btnClick" }, providers: [PuroActiveModalDirective], ngImport: i0, template: "<header class=\"header\" navSticky [isDynamic]=\"isDynamic\">\n <div class=\"banner__logo\">\n <a\n [href]=\"navLinks?.[0]?.url\"\n [linkType]=\"navLinks?.[0]?.linkType\"\n aria-label=\"Saulo logo\"\n >\n @if (logoHotel && logoHotelWhite) {\n <img\n [ngSrc]=\"hasStickyClasses() ? logoHotel : logoHotelWhite\"\n alt=\"Logo\"\n width=\"177\"\n height=\"68\"\n class=\"banner__logo--img restaurant\"\n priority\n />\n } @else {\n <svg\n aria-hidden=\"true\"\n width=\"177\"\n height=\"68\"\n focusable=\"false\"\n class=\"banner__logo--img\"\n >\n @if (siteId === SITE_HOTELS) {\n <use href=\"#puro-logo\" class=\"purohotels\"></use>\n }\n @if (siteId === SITE_BEACH) {\n <use href=\"#purobeach-logo\" class=\"purobeach\"></use>\n }\n @if (siteId === SITE_GROUP) {\n <use href=\"#purogroup-logo\" class=\"purogroup\"></use>\n }\n </svg>\n }\n </a>\n </div>\n <div class=\"header__leftNav\">\n <div\n class=\"header__menu js-active-modal\"\n activeModal\n data-modal_name=\"navigation\"\n role=\"button\"\n [attr.aria-label]=\"titleMenu ?? 'Menu'\"\n >\n <i class=\"icon-83\"></i>\n @if (titleMenu) {\n <span>{{ titleMenu }}</span>\n }\n </div>\n <div\n class=\"header__language js-active-modal\"\n activeModal\n data-modal_name=\"language\"\n role=\"button\"\n [attr.aria-label]=\"titleLang ?? 'Language Menu'\"\n >\n @if (titleLang) {\n {{ titleLang }}\n }\n </div>\n </div>\n @if (btnBook) {\n <a\n (click)=\"btnClick.emit()\"\n class=\"header__reserver\"\n role=\"button\"\n [attr.aria-label]=\"btnBook\"\n >\n <div class=\"btn btn__primary btn--lg\">\n <span>{{ btnBook }}</span>\n </div>\n </a>\n }\n</header>\n\n<div class=\"modal modal--solidCream modal--navigation\">\n <div class=\"modal__inner\">\n <div class=\"modal__body\" [style.--bg-url]=\"cssBgUrl\">\n <div\n class=\"modal__close js-close\"\n activeModal\n data-modal_name=\"navigation\"\n role=\"button\"\n aria-label=\"Close Button\"\n >\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n class=\"modal__close--icon\"\n >\n <use href=\"#modal-close\"></use>\n </svg>\n </div>\n <div class=\"modal__nav\">\n <ul class=\"modal__nav--items\">\n @if (navLinks) {\n @for (link of navLinks; track $index) {\n <li class=\"modal__nav--link\">\n <a\n [href]=\"link.url\"\n [linkType]=\"link.linkType\"\n [attr.aria-label]=\"link.label\"\n >{{ link.label }}</a\n >\n </li>\n }\n }\n </ul>\n <ul class=\"modal__nav--itemsSmall\">\n @if (bottomLinks) {\n @for (link of bottomLinks; track $index) {\n <li class=\"modal__nav--link\">\n <a\n [linkType]=\"link.linkType\"\n [href]=\"link.url\"\n [attr.aria-label]=\"link.label\"\n >{{ link.label }}</a\n >\n </li>\n }\n }\n </ul>\n </div>\n </div>\n </div>\n</div>\n", styles: [".modal.modal--navigation .modal__body:after{background-image:var(--bg-url)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: PuroLinkTypeDirective, selector: "[linkType]", inputs: ["linkType", "href", "modalClick"], outputs: ["bookClick", "anchorClicked"] }, { kind: "directive", type: PuroActiveModalDirective, selector: "[activeModal]" }, { kind: "directive", type: PuroNavStickyDirective, selector: "[navSticky]", inputs: ["isDynamic"] }, { kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6540
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: PuroHeaderMobileComponent, isStandalone: true, selector: "lib-puro-header-mobile", inputs: { titleMenu: "titleMenu", titleLang: "titleLang", btnBook: "btnBook", navLinks: "navLinks", bottomLinks: "bottomLinks", isDynamic: "isDynamic", hotelBrand: "hotelBrand", logoHotel: "logoHotel", logoHotelWhite: "logoHotelWhite", siteId: "siteId" }, outputs: { btnClick: "btnClick" }, providers: [PuroActiveModalDirective], ngImport: i0, template: "<header class=\"header\" navSticky [isDynamic]=\"isDynamic\">\n <div class=\"banner__logo\">\n <a\n [href]=\"navLinks?.[0]?.url\"\n [linkType]=\"navLinks?.[0]?.linkType\"\n aria-label=\"Saulo logo\"\n >\n @if (logoHotel && logoHotelWhite) {\n <img\n [ngSrc]=\"hasStickyClasses() ? logoHotel : logoHotelWhite\"\n alt=\"Logo\"\n width=\"177\"\n height=\"68\"\n class=\"banner__logo--img restaurant\"\n priority\n />\n } @else {\n <svg\n aria-hidden=\"true\"\n width=\"177\"\n height=\"68\"\n focusable=\"false\"\n class=\"banner__logo--img\"\n >\n @if (siteId === SITE_HOTELS) {\n <use href=\"#puro-logo\" class=\"purohotels\"></use>\n }\n @if (siteId === SITE_BEACH) {\n <use href=\"#purobeach-logo\" class=\"purobeach\"></use>\n }\n @if (siteId === SITE_GROUP) {\n <use href=\"#purogroup-logo\" class=\"purogroup\"></use>\n }\n </svg>\n }\n </a>\n </div>\n <div class=\"header__leftNav\">\n <div\n class=\"header__menu js-active-modal\"\n activeModal\n data-modal_name=\"navigation\"\n role=\"button\"\n [attr.aria-label]=\"titleMenu ?? 'Menu'\"\n >\n <i class=\"icon-83\"></i>\n @if (titleMenu) {\n <span>{{ titleMenu }}</span>\n }\n </div>\n <div\n class=\"header__language js-active-modal\"\n activeModal\n data-modal_name=\"language\"\n role=\"button\"\n [attr.aria-label]=\"titleLang ?? 'Language Menu'\"\n >\n @if (titleLang) {\n {{ titleLang }}\n }\n </div>\n </div>\n @if (btnBook) {\n <a\n (click)=\"btnClick.emit()\"\n class=\"header__reserver\"\n role=\"button\"\n [attr.aria-label]=\"btnBook\"\n >\n <div class=\"btn btn__primary btn--lg\">\n <span>{{ btnBook }}</span>\n </div>\n </a>\n }\n</header>\n\n<div class=\"modal modal--solidCream modal--navigation\">\n <div class=\"modal__inner\">\n <div class=\"modal__body\" [style.--bg-url]=\"cssBgUrl\">\n <div\n class=\"modal__close js-close\"\n activeModal\n data-modal_name=\"navigation\"\n role=\"button\"\n aria-label=\"Close Button\"\n >\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n class=\"modal__close--icon\"\n >\n <use href=\"#modal-close\"></use>\n </svg>\n </div>\n <div class=\"modal__nav\">\n <ul class=\"modal__nav--items\">\n @if (navLinks) {\n @for (link of navLinks; track $index) {\n <li class=\"modal__nav--link\">\n <a\n [href]=\"link.url\"\n [linkType]=\"link.linkType\"\n [attr.aria-label]=\"link.label\"\n >{{ link.label }}</a\n >\n </li>\n }\n }\n </ul>\n <ul class=\"modal__nav--itemsSmall\">\n @if (bottomLinks) {\n @for (link of bottomLinks; track $index) {\n @if(link.url === \"lang\"){\n <li \n class=\"modal__nav--link js-active-modal\"\n activeModal\n data-modal_name=\"language\"\n role=\"button\"\n [attr.aria-label]=\"link.label ?? 'Language Menu'\"\n >\n <a>\n {{link.label}}\n </a>\n </li>\n }\n @else {\n <li class=\"modal__nav--link\">\n <a\n [linkType]=\"link.linkType\"\n [href]=\"link.url\"\n [attr.aria-label]=\"link.label\"\n >{{ link.label }}</a\n >\n </li>\n }\n }\n }\n </ul>\n </div>\n </div>\n </div>\n</div>\n", styles: [".modal.modal--navigation .modal__body:after{background-image:var(--bg-url)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: PuroLinkTypeDirective, selector: "[linkType]", inputs: ["linkType", "href", "modalClick"], outputs: ["bookClick", "anchorClicked"] }, { kind: "directive", type: PuroActiveModalDirective, selector: "[activeModal]" }, { kind: "directive", type: PuroNavStickyDirective, selector: "[navSticky]", inputs: ["isDynamic"] }, { kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6557
6541
  }
6558
6542
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PuroHeaderMobileComponent, decorators: [{
6559
6543
  type: Component,
@@ -6563,7 +6547,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
6563
6547
  PuroActiveModalDirective,
6564
6548
  PuroNavStickyDirective,
6565
6549
  NgOptimizedImage,
6566
- ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [PuroActiveModalDirective], template: "<header class=\"header\" navSticky [isDynamic]=\"isDynamic\">\n <div class=\"banner__logo\">\n <a\n [href]=\"navLinks?.[0]?.url\"\n [linkType]=\"navLinks?.[0]?.linkType\"\n aria-label=\"Saulo logo\"\n >\n @if (logoHotel && logoHotelWhite) {\n <img\n [ngSrc]=\"hasStickyClasses() ? logoHotel : logoHotelWhite\"\n alt=\"Logo\"\n width=\"177\"\n height=\"68\"\n class=\"banner__logo--img restaurant\"\n priority\n />\n } @else {\n <svg\n aria-hidden=\"true\"\n width=\"177\"\n height=\"68\"\n focusable=\"false\"\n class=\"banner__logo--img\"\n >\n @if (siteId === SITE_HOTELS) {\n <use href=\"#puro-logo\" class=\"purohotels\"></use>\n }\n @if (siteId === SITE_BEACH) {\n <use href=\"#purobeach-logo\" class=\"purobeach\"></use>\n }\n @if (siteId === SITE_GROUP) {\n <use href=\"#purogroup-logo\" class=\"purogroup\"></use>\n }\n </svg>\n }\n </a>\n </div>\n <div class=\"header__leftNav\">\n <div\n class=\"header__menu js-active-modal\"\n activeModal\n data-modal_name=\"navigation\"\n role=\"button\"\n [attr.aria-label]=\"titleMenu ?? 'Menu'\"\n >\n <i class=\"icon-83\"></i>\n @if (titleMenu) {\n <span>{{ titleMenu }}</span>\n }\n </div>\n <div\n class=\"header__language js-active-modal\"\n activeModal\n data-modal_name=\"language\"\n role=\"button\"\n [attr.aria-label]=\"titleLang ?? 'Language Menu'\"\n >\n @if (titleLang) {\n {{ titleLang }}\n }\n </div>\n </div>\n @if (btnBook) {\n <a\n (click)=\"btnClick.emit()\"\n class=\"header__reserver\"\n role=\"button\"\n [attr.aria-label]=\"btnBook\"\n >\n <div class=\"btn btn__primary btn--lg\">\n <span>{{ btnBook }}</span>\n </div>\n </a>\n }\n</header>\n\n<div class=\"modal modal--solidCream modal--navigation\">\n <div class=\"modal__inner\">\n <div class=\"modal__body\" [style.--bg-url]=\"cssBgUrl\">\n <div\n class=\"modal__close js-close\"\n activeModal\n data-modal_name=\"navigation\"\n role=\"button\"\n aria-label=\"Close Button\"\n >\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n class=\"modal__close--icon\"\n >\n <use href=\"#modal-close\"></use>\n </svg>\n </div>\n <div class=\"modal__nav\">\n <ul class=\"modal__nav--items\">\n @if (navLinks) {\n @for (link of navLinks; track $index) {\n <li class=\"modal__nav--link\">\n <a\n [href]=\"link.url\"\n [linkType]=\"link.linkType\"\n [attr.aria-label]=\"link.label\"\n >{{ link.label }}</a\n >\n </li>\n }\n }\n </ul>\n <ul class=\"modal__nav--itemsSmall\">\n @if (bottomLinks) {\n @for (link of bottomLinks; track $index) {\n <li class=\"modal__nav--link\">\n <a\n [linkType]=\"link.linkType\"\n [href]=\"link.url\"\n [attr.aria-label]=\"link.label\"\n >{{ link.label }}</a\n >\n </li>\n }\n }\n </ul>\n </div>\n </div>\n </div>\n</div>\n", styles: [".modal.modal--navigation .modal__body:after{background-image:var(--bg-url)}\n"] }]
6550
+ ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [PuroActiveModalDirective], template: "<header class=\"header\" navSticky [isDynamic]=\"isDynamic\">\n <div class=\"banner__logo\">\n <a\n [href]=\"navLinks?.[0]?.url\"\n [linkType]=\"navLinks?.[0]?.linkType\"\n aria-label=\"Saulo logo\"\n >\n @if (logoHotel && logoHotelWhite) {\n <img\n [ngSrc]=\"hasStickyClasses() ? logoHotel : logoHotelWhite\"\n alt=\"Logo\"\n width=\"177\"\n height=\"68\"\n class=\"banner__logo--img restaurant\"\n priority\n />\n } @else {\n <svg\n aria-hidden=\"true\"\n width=\"177\"\n height=\"68\"\n focusable=\"false\"\n class=\"banner__logo--img\"\n >\n @if (siteId === SITE_HOTELS) {\n <use href=\"#puro-logo\" class=\"purohotels\"></use>\n }\n @if (siteId === SITE_BEACH) {\n <use href=\"#purobeach-logo\" class=\"purobeach\"></use>\n }\n @if (siteId === SITE_GROUP) {\n <use href=\"#purogroup-logo\" class=\"purogroup\"></use>\n }\n </svg>\n }\n </a>\n </div>\n <div class=\"header__leftNav\">\n <div\n class=\"header__menu js-active-modal\"\n activeModal\n data-modal_name=\"navigation\"\n role=\"button\"\n [attr.aria-label]=\"titleMenu ?? 'Menu'\"\n >\n <i class=\"icon-83\"></i>\n @if (titleMenu) {\n <span>{{ titleMenu }}</span>\n }\n </div>\n <div\n class=\"header__language js-active-modal\"\n activeModal\n data-modal_name=\"language\"\n role=\"button\"\n [attr.aria-label]=\"titleLang ?? 'Language Menu'\"\n >\n @if (titleLang) {\n {{ titleLang }}\n }\n </div>\n </div>\n @if (btnBook) {\n <a\n (click)=\"btnClick.emit()\"\n class=\"header__reserver\"\n role=\"button\"\n [attr.aria-label]=\"btnBook\"\n >\n <div class=\"btn btn__primary btn--lg\">\n <span>{{ btnBook }}</span>\n </div>\n </a>\n }\n</header>\n\n<div class=\"modal modal--solidCream modal--navigation\">\n <div class=\"modal__inner\">\n <div class=\"modal__body\" [style.--bg-url]=\"cssBgUrl\">\n <div\n class=\"modal__close js-close\"\n activeModal\n data-modal_name=\"navigation\"\n role=\"button\"\n aria-label=\"Close Button\"\n >\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n class=\"modal__close--icon\"\n >\n <use href=\"#modal-close\"></use>\n </svg>\n </div>\n <div class=\"modal__nav\">\n <ul class=\"modal__nav--items\">\n @if (navLinks) {\n @for (link of navLinks; track $index) {\n <li class=\"modal__nav--link\">\n <a\n [href]=\"link.url\"\n [linkType]=\"link.linkType\"\n [attr.aria-label]=\"link.label\"\n >{{ link.label }}</a\n >\n </li>\n }\n }\n </ul>\n <ul class=\"modal__nav--itemsSmall\">\n @if (bottomLinks) {\n @for (link of bottomLinks; track $index) {\n @if(link.url === \"lang\"){\n <li \n class=\"modal__nav--link js-active-modal\"\n activeModal\n data-modal_name=\"language\"\n role=\"button\"\n [attr.aria-label]=\"link.label ?? 'Language Menu'\"\n >\n <a>\n {{link.label}}\n </a>\n </li>\n }\n @else {\n <li class=\"modal__nav--link\">\n <a\n [linkType]=\"link.linkType\"\n [href]=\"link.url\"\n [attr.aria-label]=\"link.label\"\n >{{ link.label }}</a\n >\n </li>\n }\n }\n }\n </ul>\n </div>\n </div>\n </div>\n</div>\n", styles: [".modal.modal--navigation .modal__body:after{background-image:var(--bg-url)}\n"] }]
6567
6551
  }], propDecorators: { titleMenu: [{
6568
6552
  type: Input
6569
6553
  }], titleLang: [{