@snabcentr/client-ui 3.25.0 → 3.25.1

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.
@@ -36,6 +36,10 @@ export class ScPreviewSamplesMosquitoComponent {
36
36
  * Событие, которое происходит при нажатии на кнопку "Назад в Конфигуратор".
37
37
  */
38
38
  this.openConfiguratorClick = output();
39
+ /**
40
+ * Ссылка на страницу конфигуратора.
41
+ */
42
+ this.configuratorPageUrl = input();
39
43
  /**
40
44
  * Событие, которое происходит при нажатии на кнопку "Консультация".
41
45
  */
@@ -50,10 +54,10 @@ export class ScPreviewSamplesMosquitoComponent {
50
54
  this.isShowCarouselSwitches = input(!inject(TUI_IS_MOBILE));
51
55
  }
52
56
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScPreviewSamplesMosquitoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
53
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ScPreviewSamplesMosquitoComponent, isStandalone: true, selector: "sc-preview-samples-mosquito", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, autoSlideIntervale: { classPropertyName: "autoSlideIntervale", publicName: "autoSlideIntervale", isSignal: true, isRequired: false, transformFunction: null }, isShowCarouselSwitches: { classPropertyName: "isShowCarouselSwitches", publicName: "isShowCarouselSwitches", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openConfiguratorClick: "openConfiguratorClick", openConsultationClick: "openConsultationClick" }, ngImport: i0, template: "@let descriptions = config().descriptions;\n@let colors = config().color;\n@let netTypes = config().netType;\n\n<!-- \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440 \u0441 \u0441\u0435\u0442\u043A\u043E\u0439. -->\n<div class=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <!-- \u041B\u0435\u0432\u0430\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0430 \u0441 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0435\u0439. -->\n <div class=\"flex flex-col gap-4\">\n <!-- \u041A\u043D\u043E\u043F\u043A\u0438 \u0432\u044B\u0431\u043E\u0440\u0430 \u0442\u0438\u043F\u0430 \u0441\u0435\u0442\u043A\u0438. -->\n <div class=\"flex flex-wrap gap-4\">\n <button\n *ngFor=\"let item of netTypes; let itemIndex = index\"\n tuiCardLarge\n tuiHeader\n tuiSurface=\"floating\"\n type=\"button\"\n (click)=\"netTypeIndex.set(itemIndex)\"\n [class.active]=\"netTypeIndex() === itemIndex\"\n class=\"h-12 !items-center gap-2 !rounded-xl !px-4 !py-0\"\n >\n <img\n [src]=\"config().icons[item]\"\n [alt]=\"descriptions['netType'][item]\"\n class=\"size-8\"\n />\n <div>{{ descriptions['netType'][item] }}</div>\n </button>\n </div>\n\n <!-- \u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0442\u0438\u043F\u0430 \u0441\u0435\u0442\u043A\u0438. -->\n <div class=\"text-body-l-bold\">\u0421\u0435\u0442\u043A\u0430 {{ descriptions['netType'][netTypeIndexSelected()] }}</div>\n {{ config().subtitles[netTypeIndexSelected()] }}\n\n <!-- \u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0435 \u0431\u0435\u0439\u0434\u0436\u0438. -->\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ colors.length }}\n </tui-badge>\n - \u043A\u043E\u043B\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0446\u0432\u0435\u0442\u043E\u0432 \u043F\u0440\u043E\u0444\u0438\u043B\u044F\n </div>\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ netTypes.length }}\n </tui-badge>\n - \u043A\u043E\u043B\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u0438\u043F\u043E\u0432 \u0441\u0435\u0442\u043E\u043A\n </div>\n\n <!-- \u0420\u0430\u0437\u043C\u0435\u0440\u044B \u0441\u0435\u0442\u043E\u043A. -->\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-height-arrow\" />\n \u0412\u044B\u0441\u043E\u0442\u0430 \u0441\u0435\u0442\u043E\u043A \u043E\u0442 {{ config().minHeight }} \u0434\u043E {{ config().maxHeights[netTypeIndexSelected()] }} \u043C\u043C\n </div>\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-width-arrow\" />\n \u0428\u0438\u0440\u0438\u043D\u0430 \u0441\u0435\u0442\u043E\u043A \u043E\u0442 {{ config().minWidth }} \u0434\u043E {{ config().maxWidths[netTypeIndexSelected()] }} \u043C\u043C\n </div>\n\n <!-- \u0422\u0435\u0433\u0438 \u0445\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A. -->\n <div class=\"flex flex-wrap gap-2\">\n <button\n *ngFor=\"let tag of config().tags[netTypeIndexSelected()]\"\n tuiChip\n appearance=\"neutral\"\n >\n {{ tag }}\n </button>\n </div>\n\n <!-- \u0412\u044B\u0431\u043E\u0440 \u0446\u0432\u0435\u0442\u0430 \u043F\u0440\u043E\u0444\u0438\u043B\u044F. -->\n <div class=\"flex gap-4\">\n <img\n *ngFor=\"let image of config().color; let itemIndex = index\"\n [src]=\"config().colorsIcons[image]\"\n [alt]=\"descriptions['color'][itemIndex]\"\n (tuiHoveredChange)=\"colorIndex.set(itemIndex)\"\n [class.active]=\"colorIndex() === itemIndex\"\n class=\"size-11 rounded-xl\"\n />\n </div>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. -->\n <div class=\"flex gap-2\">\n <button\n tuiButton\n (click)=\"openConfiguratorClick.emit()\"\n iconStart=\"@tui.sliders-horizontal\"\n >\n \u0421\u0434\u0435\u043B\u0430\u0442\u044C \u0440\u0430\u0441\u0447\u0435\u0442\n </button>\n\n <button\n tuiButton\n (click)=\"openConsultationClick.emit()\"\n iconStart=\"@tui.messages-square\"\n >\n \u041A\u043E\u043D\u0441\u0443\u043B\u044C\u0442\u0430\u0446\u0438\u044F\n </button>\n </div>\n </div>\n\n <!-- \u041F\u0440\u0430\u0432\u0430\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0430 \u0441 \u043A\u0430\u0440\u0443\u0441\u0435\u043B\u044C\u044E \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439. -->\n <div class=\"relative -order-1 h-[19em] flex-1 overflow-hidden rounded-xl shadow-tui-shadow md:h-96 lg:order-2 lg:h-[28rem]\">\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n (click)=\"carousel.prev()\"\n appearance=\"icon\"\n class=\"!absolute left-0 top-1/2 z-10 ml-2 -translate-y-1/2\"\n ></button>\n\n <tui-carousel\n #carousel\n [duration]=\"autoSlideIntervale()\"\n class=\"h-[19em] w-full md:h-96 lg:h-[28rem]\"\n >\n @for (item of config().imagePreviewsByColor[colorIndexSelected()]; track $index) {\n <div\n *tuiItem\n [style.backgroundImage]=\"'url(' + item + ')'\"\n class=\"h-[19em] w-full bg-cover bg-right md:h-96 lg:h-[28rem]\"\n ></div>\n }\n </tui-carousel>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n (click)=\"carousel.next()\"\n appearance=\"icon\"\n class=\"!absolute right-0 top-1/2 z-10 mr-2 -translate-y-1/2\"\n ></button>\n </div>\n</div>\n", styles: [":host{--tui-carousel-padding: 0}img.active{--tw-ring-color: var(--tui-background-accent-1);--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0, 0, 0, 0))}button[tuicardlarge]{border:solid 2px white}button[tuicardlarge].active{border-color:var(--tui-background-accent-1)}\n"], dependencies: [{ kind: "directive", type: i1.TuiItem, selector: "[tuiItem]" }, { kind: "component", type: i2.TuiCarouselComponent, selector: "tui-carousel", inputs: ["draggable", "itemsCount", "index"], outputs: ["indexChange", "shift"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "directive", type: TuiChip, selector: "tui-chip,[tuiChip]", inputs: ["size"] }, { kind: "directive", type: TuiBadge, selector: "tui-badge,[tuiBadge]", inputs: ["size"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: TuiHovered, selector: "[tuiHoveredChange]", outputs: ["tuiHoveredChange"] }, { kind: "directive", type: TuiCardLarge, selector: "[tuiCardLarge]", inputs: ["tuiCardLarge"] }, { kind: "directive", type: TuiHeader, selector: "[tuiHeader]", inputs: ["tuiHeader"] }, { kind: "directive", type: TuiSurface, selector: "[tuiSurface]", inputs: ["tuiSurface"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
57
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ScPreviewSamplesMosquitoComponent, isStandalone: true, selector: "sc-preview-samples-mosquito", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, configuratorPageUrl: { classPropertyName: "configuratorPageUrl", publicName: "configuratorPageUrl", isSignal: true, isRequired: false, transformFunction: null }, autoSlideIntervale: { classPropertyName: "autoSlideIntervale", publicName: "autoSlideIntervale", isSignal: true, isRequired: false, transformFunction: null }, isShowCarouselSwitches: { classPropertyName: "isShowCarouselSwitches", publicName: "isShowCarouselSwitches", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openConfiguratorClick: "openConfiguratorClick", openConsultationClick: "openConsultationClick" }, ngImport: i0, template: "@let descriptions = config().descriptions;\n@let colors = config().color;\n@let netTypes = config().netType;\n\n<!-- \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440 \u0441 \u0441\u0435\u0442\u043A\u043E\u0439. -->\n<div class=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <!-- \u041B\u0435\u0432\u0430\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0430 \u0441 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0435\u0439. -->\n <div class=\"flex flex-col gap-4\">\n <!-- \u041A\u043D\u043E\u043F\u043A\u0438 \u0432\u044B\u0431\u043E\u0440\u0430 \u0442\u0438\u043F\u0430 \u0441\u0435\u0442\u043A\u0438. -->\n <div class=\"flex flex-wrap gap-4\">\n <button\n *ngFor=\"let item of netTypes; let itemIndex = index\"\n tuiCardLarge\n tuiHeader\n tuiSurface=\"floating\"\n type=\"button\"\n (click)=\"netTypeIndex.set(itemIndex)\"\n [class.active]=\"netTypeIndex() === itemIndex\"\n class=\"h-12 !items-center gap-2 !rounded-xl !px-4 !py-0\"\n >\n <img\n [src]=\"config().icons[item]\"\n [alt]=\"descriptions['netType'][item]\"\n class=\"size-8\"\n />\n <div>{{ descriptions['netType'][item] }}</div>\n </button>\n </div>\n\n <!-- \u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0442\u0438\u043F\u0430 \u0441\u0435\u0442\u043A\u0438. -->\n <div class=\"text-body-l-bold\">\u0421\u0435\u0442\u043A\u0430 {{ descriptions['netType'][netTypeIndexSelected()] }}</div>\n {{ config().subtitles[netTypeIndexSelected()] }}\n\n <!-- \u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0435 \u0431\u0435\u0439\u0434\u0436\u0438. -->\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ colors.length }}\n </tui-badge>\n - \u043A\u043E\u043B\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0446\u0432\u0435\u0442\u043E\u0432 \u043F\u0440\u043E\u0444\u0438\u043B\u044F\n </div>\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ netTypes.length }}\n </tui-badge>\n - \u043A\u043E\u043B\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u0438\u043F\u043E\u0432 \u0441\u0435\u0442\u043E\u043A\n </div>\n\n <!-- \u0420\u0430\u0437\u043C\u0435\u0440\u044B \u0441\u0435\u0442\u043E\u043A. -->\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-height-arrow\" />\n \u0412\u044B\u0441\u043E\u0442\u0430 \u0441\u0435\u0442\u043E\u043A \u043E\u0442 {{ config().minHeight }} \u0434\u043E {{ config().maxHeights[netTypeIndexSelected()] }} \u043C\u043C\n </div>\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-width-arrow\" />\n \u0428\u0438\u0440\u0438\u043D\u0430 \u0441\u0435\u0442\u043E\u043A \u043E\u0442 {{ config().minWidth }} \u0434\u043E {{ config().maxWidths[netTypeIndexSelected()] }} \u043C\u043C\n </div>\n\n <!-- \u0422\u0435\u0433\u0438 \u0445\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A. -->\n <div class=\"flex flex-wrap gap-2\">\n <button\n *ngFor=\"let tag of config().tags[netTypeIndexSelected()]\"\n tuiChip\n appearance=\"neutral\"\n >\n {{ tag }}\n </button>\n </div>\n\n <!-- \u0412\u044B\u0431\u043E\u0440 \u0446\u0432\u0435\u0442\u0430 \u043F\u0440\u043E\u0444\u0438\u043B\u044F. -->\n <div class=\"flex gap-4\">\n <img\n *ngFor=\"let image of config().color; let itemIndex = index\"\n [src]=\"config().colorsIcons[image]\"\n [alt]=\"descriptions['color'][itemIndex]\"\n (tuiHoveredChange)=\"colorIndex.set(itemIndex)\"\n [class.active]=\"colorIndex() === itemIndex\"\n class=\"size-11 rounded-xl\"\n />\n </div>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. -->\n <div class=\"flex gap-2\">\n <a\n tuiButton\n [attr.href]=\"configuratorPageUrl()\"\n (click)=\"$event.preventDefault(); openConfiguratorClick.emit()\"\n iconStart=\"@tui.sliders-horizontal\"\n >\n \u0421\u0434\u0435\u043B\u0430\u0442\u044C \u0440\u0430\u0441\u0447\u0435\u0442\n </a>\n\n <button\n tuiButton\n (click)=\"openConsultationClick.emit()\"\n iconStart=\"@tui.messages-square\"\n >\n \u041A\u043E\u043D\u0441\u0443\u043B\u044C\u0442\u0430\u0446\u0438\u044F\n </button>\n </div>\n </div>\n\n <!-- \u041F\u0440\u0430\u0432\u0430\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0430 \u0441 \u043A\u0430\u0440\u0443\u0441\u0435\u043B\u044C\u044E \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439. -->\n <div class=\"relative -order-1 h-[19em] flex-1 overflow-hidden rounded-xl shadow-tui-shadow md:h-96 lg:order-2 lg:h-[28rem]\">\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n (click)=\"carousel.prev()\"\n appearance=\"icon\"\n class=\"!absolute left-0 top-1/2 z-10 ml-2 -translate-y-1/2\"\n ></button>\n\n <tui-carousel\n #carousel\n [duration]=\"autoSlideIntervale()\"\n class=\"h-[19em] w-full md:h-96 lg:h-[28rem]\"\n >\n @for (item of config().imagePreviewsByColor[colorIndexSelected()]; track $index) {\n <div\n *tuiItem\n [style.backgroundImage]=\"'url(' + item + ')'\"\n class=\"h-[19em] w-full bg-cover bg-right md:h-96 lg:h-[28rem]\"\n ></div>\n }\n </tui-carousel>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n (click)=\"carousel.next()\"\n appearance=\"icon\"\n class=\"!absolute right-0 top-1/2 z-10 mr-2 -translate-y-1/2\"\n ></button>\n </div>\n</div>\n", styles: [":host{--tui-carousel-padding: 0}img.active{--tw-ring-color: var(--tui-background-accent-1);--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0, 0, 0, 0))}button[tuicardlarge]{border:solid 2px white}button[tuicardlarge].active{border-color:var(--tui-background-accent-1)}\n"], dependencies: [{ kind: "directive", type: i1.TuiItem, selector: "[tuiItem]" }, { kind: "component", type: i2.TuiCarouselComponent, selector: "tui-carousel", inputs: ["draggable", "itemsCount", "index"], outputs: ["indexChange", "shift"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "directive", type: TuiChip, selector: "tui-chip,[tuiChip]", inputs: ["size"] }, { kind: "directive", type: TuiBadge, selector: "tui-badge,[tuiBadge]", inputs: ["size"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: TuiHovered, selector: "[tuiHoveredChange]", outputs: ["tuiHoveredChange"] }, { kind: "directive", type: TuiCardLarge, selector: "[tuiCardLarge]", inputs: ["tuiCardLarge"] }, { kind: "directive", type: TuiHeader, selector: "[tuiHeader]", inputs: ["tuiHeader"] }, { kind: "directive", type: TuiSurface, selector: "[tuiSurface]", inputs: ["tuiSurface"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
54
58
  }
55
59
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScPreviewSamplesMosquitoComponent, decorators: [{
56
60
  type: Component,
57
- args: [{ standalone: true, selector: 'sc-preview-samples-mosquito', imports: [TuiCarousel, TuiButton, TuiIcon, TuiChip, TuiBadge, NgFor, TuiAppearance, TuiHovered, TuiCardLarge, TuiHeader, TuiIcon, TuiSurface], changeDetection: ChangeDetectionStrategy.OnPush, template: "@let descriptions = config().descriptions;\n@let colors = config().color;\n@let netTypes = config().netType;\n\n<!-- \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440 \u0441 \u0441\u0435\u0442\u043A\u043E\u0439. -->\n<div class=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <!-- \u041B\u0435\u0432\u0430\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0430 \u0441 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0435\u0439. -->\n <div class=\"flex flex-col gap-4\">\n <!-- \u041A\u043D\u043E\u043F\u043A\u0438 \u0432\u044B\u0431\u043E\u0440\u0430 \u0442\u0438\u043F\u0430 \u0441\u0435\u0442\u043A\u0438. -->\n <div class=\"flex flex-wrap gap-4\">\n <button\n *ngFor=\"let item of netTypes; let itemIndex = index\"\n tuiCardLarge\n tuiHeader\n tuiSurface=\"floating\"\n type=\"button\"\n (click)=\"netTypeIndex.set(itemIndex)\"\n [class.active]=\"netTypeIndex() === itemIndex\"\n class=\"h-12 !items-center gap-2 !rounded-xl !px-4 !py-0\"\n >\n <img\n [src]=\"config().icons[item]\"\n [alt]=\"descriptions['netType'][item]\"\n class=\"size-8\"\n />\n <div>{{ descriptions['netType'][item] }}</div>\n </button>\n </div>\n\n <!-- \u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0442\u0438\u043F\u0430 \u0441\u0435\u0442\u043A\u0438. -->\n <div class=\"text-body-l-bold\">\u0421\u0435\u0442\u043A\u0430 {{ descriptions['netType'][netTypeIndexSelected()] }}</div>\n {{ config().subtitles[netTypeIndexSelected()] }}\n\n <!-- \u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0435 \u0431\u0435\u0439\u0434\u0436\u0438. -->\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ colors.length }}\n </tui-badge>\n - \u043A\u043E\u043B\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0446\u0432\u0435\u0442\u043E\u0432 \u043F\u0440\u043E\u0444\u0438\u043B\u044F\n </div>\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ netTypes.length }}\n </tui-badge>\n - \u043A\u043E\u043B\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u0438\u043F\u043E\u0432 \u0441\u0435\u0442\u043E\u043A\n </div>\n\n <!-- \u0420\u0430\u0437\u043C\u0435\u0440\u044B \u0441\u0435\u0442\u043E\u043A. -->\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-height-arrow\" />\n \u0412\u044B\u0441\u043E\u0442\u0430 \u0441\u0435\u0442\u043E\u043A \u043E\u0442 {{ config().minHeight }} \u0434\u043E {{ config().maxHeights[netTypeIndexSelected()] }} \u043C\u043C\n </div>\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-width-arrow\" />\n \u0428\u0438\u0440\u0438\u043D\u0430 \u0441\u0435\u0442\u043E\u043A \u043E\u0442 {{ config().minWidth }} \u0434\u043E {{ config().maxWidths[netTypeIndexSelected()] }} \u043C\u043C\n </div>\n\n <!-- \u0422\u0435\u0433\u0438 \u0445\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A. -->\n <div class=\"flex flex-wrap gap-2\">\n <button\n *ngFor=\"let tag of config().tags[netTypeIndexSelected()]\"\n tuiChip\n appearance=\"neutral\"\n >\n {{ tag }}\n </button>\n </div>\n\n <!-- \u0412\u044B\u0431\u043E\u0440 \u0446\u0432\u0435\u0442\u0430 \u043F\u0440\u043E\u0444\u0438\u043B\u044F. -->\n <div class=\"flex gap-4\">\n <img\n *ngFor=\"let image of config().color; let itemIndex = index\"\n [src]=\"config().colorsIcons[image]\"\n [alt]=\"descriptions['color'][itemIndex]\"\n (tuiHoveredChange)=\"colorIndex.set(itemIndex)\"\n [class.active]=\"colorIndex() === itemIndex\"\n class=\"size-11 rounded-xl\"\n />\n </div>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. -->\n <div class=\"flex gap-2\">\n <button\n tuiButton\n (click)=\"openConfiguratorClick.emit()\"\n iconStart=\"@tui.sliders-horizontal\"\n >\n \u0421\u0434\u0435\u043B\u0430\u0442\u044C \u0440\u0430\u0441\u0447\u0435\u0442\n </button>\n\n <button\n tuiButton\n (click)=\"openConsultationClick.emit()\"\n iconStart=\"@tui.messages-square\"\n >\n \u041A\u043E\u043D\u0441\u0443\u043B\u044C\u0442\u0430\u0446\u0438\u044F\n </button>\n </div>\n </div>\n\n <!-- \u041F\u0440\u0430\u0432\u0430\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0430 \u0441 \u043A\u0430\u0440\u0443\u0441\u0435\u043B\u044C\u044E \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439. -->\n <div class=\"relative -order-1 h-[19em] flex-1 overflow-hidden rounded-xl shadow-tui-shadow md:h-96 lg:order-2 lg:h-[28rem]\">\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n (click)=\"carousel.prev()\"\n appearance=\"icon\"\n class=\"!absolute left-0 top-1/2 z-10 ml-2 -translate-y-1/2\"\n ></button>\n\n <tui-carousel\n #carousel\n [duration]=\"autoSlideIntervale()\"\n class=\"h-[19em] w-full md:h-96 lg:h-[28rem]\"\n >\n @for (item of config().imagePreviewsByColor[colorIndexSelected()]; track $index) {\n <div\n *tuiItem\n [style.backgroundImage]=\"'url(' + item + ')'\"\n class=\"h-[19em] w-full bg-cover bg-right md:h-96 lg:h-[28rem]\"\n ></div>\n }\n </tui-carousel>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n (click)=\"carousel.next()\"\n appearance=\"icon\"\n class=\"!absolute right-0 top-1/2 z-10 mr-2 -translate-y-1/2\"\n ></button>\n </div>\n</div>\n", styles: [":host{--tui-carousel-padding: 0}img.active{--tw-ring-color: var(--tui-background-accent-1);--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0, 0, 0, 0))}button[tuicardlarge]{border:solid 2px white}button[tuicardlarge].active{border-color:var(--tui-background-accent-1)}\n"] }]
61
+ args: [{ standalone: true, selector: 'sc-preview-samples-mosquito', imports: [TuiCarousel, TuiButton, TuiIcon, TuiChip, TuiBadge, NgFor, TuiAppearance, TuiHovered, TuiCardLarge, TuiHeader, TuiIcon, TuiSurface], changeDetection: ChangeDetectionStrategy.OnPush, template: "@let descriptions = config().descriptions;\n@let colors = config().color;\n@let netTypes = config().netType;\n\n<!-- \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440 \u0441 \u0441\u0435\u0442\u043A\u043E\u0439. -->\n<div class=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <!-- \u041B\u0435\u0432\u0430\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0430 \u0441 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0435\u0439. -->\n <div class=\"flex flex-col gap-4\">\n <!-- \u041A\u043D\u043E\u043F\u043A\u0438 \u0432\u044B\u0431\u043E\u0440\u0430 \u0442\u0438\u043F\u0430 \u0441\u0435\u0442\u043A\u0438. -->\n <div class=\"flex flex-wrap gap-4\">\n <button\n *ngFor=\"let item of netTypes; let itemIndex = index\"\n tuiCardLarge\n tuiHeader\n tuiSurface=\"floating\"\n type=\"button\"\n (click)=\"netTypeIndex.set(itemIndex)\"\n [class.active]=\"netTypeIndex() === itemIndex\"\n class=\"h-12 !items-center gap-2 !rounded-xl !px-4 !py-0\"\n >\n <img\n [src]=\"config().icons[item]\"\n [alt]=\"descriptions['netType'][item]\"\n class=\"size-8\"\n />\n <div>{{ descriptions['netType'][item] }}</div>\n </button>\n </div>\n\n <!-- \u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0442\u0438\u043F\u0430 \u0441\u0435\u0442\u043A\u0438. -->\n <div class=\"text-body-l-bold\">\u0421\u0435\u0442\u043A\u0430 {{ descriptions['netType'][netTypeIndexSelected()] }}</div>\n {{ config().subtitles[netTypeIndexSelected()] }}\n\n <!-- \u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0435 \u0431\u0435\u0439\u0434\u0436\u0438. -->\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ colors.length }}\n </tui-badge>\n - \u043A\u043E\u043B\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0446\u0432\u0435\u0442\u043E\u0432 \u043F\u0440\u043E\u0444\u0438\u043B\u044F\n </div>\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ netTypes.length }}\n </tui-badge>\n - \u043A\u043E\u043B\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u0438\u043F\u043E\u0432 \u0441\u0435\u0442\u043E\u043A\n </div>\n\n <!-- \u0420\u0430\u0437\u043C\u0435\u0440\u044B \u0441\u0435\u0442\u043E\u043A. -->\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-height-arrow\" />\n \u0412\u044B\u0441\u043E\u0442\u0430 \u0441\u0435\u0442\u043E\u043A \u043E\u0442 {{ config().minHeight }} \u0434\u043E {{ config().maxHeights[netTypeIndexSelected()] }} \u043C\u043C\n </div>\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-width-arrow\" />\n \u0428\u0438\u0440\u0438\u043D\u0430 \u0441\u0435\u0442\u043E\u043A \u043E\u0442 {{ config().minWidth }} \u0434\u043E {{ config().maxWidths[netTypeIndexSelected()] }} \u043C\u043C\n </div>\n\n <!-- \u0422\u0435\u0433\u0438 \u0445\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A. -->\n <div class=\"flex flex-wrap gap-2\">\n <button\n *ngFor=\"let tag of config().tags[netTypeIndexSelected()]\"\n tuiChip\n appearance=\"neutral\"\n >\n {{ tag }}\n </button>\n </div>\n\n <!-- \u0412\u044B\u0431\u043E\u0440 \u0446\u0432\u0435\u0442\u0430 \u043F\u0440\u043E\u0444\u0438\u043B\u044F. -->\n <div class=\"flex gap-4\">\n <img\n *ngFor=\"let image of config().color; let itemIndex = index\"\n [src]=\"config().colorsIcons[image]\"\n [alt]=\"descriptions['color'][itemIndex]\"\n (tuiHoveredChange)=\"colorIndex.set(itemIndex)\"\n [class.active]=\"colorIndex() === itemIndex\"\n class=\"size-11 rounded-xl\"\n />\n </div>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. -->\n <div class=\"flex gap-2\">\n <a\n tuiButton\n [attr.href]=\"configuratorPageUrl()\"\n (click)=\"$event.preventDefault(); openConfiguratorClick.emit()\"\n iconStart=\"@tui.sliders-horizontal\"\n >\n \u0421\u0434\u0435\u043B\u0430\u0442\u044C \u0440\u0430\u0441\u0447\u0435\u0442\n </a>\n\n <button\n tuiButton\n (click)=\"openConsultationClick.emit()\"\n iconStart=\"@tui.messages-square\"\n >\n \u041A\u043E\u043D\u0441\u0443\u043B\u044C\u0442\u0430\u0446\u0438\u044F\n </button>\n </div>\n </div>\n\n <!-- \u041F\u0440\u0430\u0432\u0430\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0430 \u0441 \u043A\u0430\u0440\u0443\u0441\u0435\u043B\u044C\u044E \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439. -->\n <div class=\"relative -order-1 h-[19em] flex-1 overflow-hidden rounded-xl shadow-tui-shadow md:h-96 lg:order-2 lg:h-[28rem]\">\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n (click)=\"carousel.prev()\"\n appearance=\"icon\"\n class=\"!absolute left-0 top-1/2 z-10 ml-2 -translate-y-1/2\"\n ></button>\n\n <tui-carousel\n #carousel\n [duration]=\"autoSlideIntervale()\"\n class=\"h-[19em] w-full md:h-96 lg:h-[28rem]\"\n >\n @for (item of config().imagePreviewsByColor[colorIndexSelected()]; track $index) {\n <div\n *tuiItem\n [style.backgroundImage]=\"'url(' + item + ')'\"\n class=\"h-[19em] w-full bg-cover bg-right md:h-96 lg:h-[28rem]\"\n ></div>\n }\n </tui-carousel>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n (click)=\"carousel.next()\"\n appearance=\"icon\"\n class=\"!absolute right-0 top-1/2 z-10 mr-2 -translate-y-1/2\"\n ></button>\n </div>\n</div>\n", styles: [":host{--tui-carousel-padding: 0}img.active{--tw-ring-color: var(--tui-background-accent-1);--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0, 0, 0, 0))}button[tuicardlarge]{border:solid 2px white}button[tuicardlarge].active{border-color:var(--tui-background-accent-1)}\n"] }]
58
62
  }] });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcHJldmlldy1zYW1wbGVzLW1vc3F1aXRvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9zYW1wbGVzL3NjLXByZXZpZXctc2FtcGxlcy1tb3NxdWl0by9zYy1wcmV2aWV3LXNhbXBsZXMtbW9zcXVpdG8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL3NhbXBsZXMvc2MtcHJldmlldy1zYW1wbGVzLW1vc3F1aXRvL3NjLXByZXZpZXctc2FtcGxlcy1tb3NxdWl0by5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBZSxNQUFNLEVBQTRCLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDbkssT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7O0FBSTNEOztHQUVHO0FBU0gsTUFBTSxPQUFPLGlDQUFpQztJQVI5QztRQVNJOztXQUVHO1FBQ2EsZUFBVSxHQUEyQixNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFdkU7O1dBRUc7UUFDYSxpQkFBWSxHQUEyQixNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFekU7O1dBRUc7UUFDYSx5QkFBb0IsR0FBbUIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVsSDs7V0FFRztRQUNhLHVCQUFrQixHQUFtQixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTVHOztXQUVHO1FBQ2EsV0FBTSxHQUF5QyxLQUFLLENBQUMsUUFBUSxFQUEyQixDQUFDO1FBRXpHOztXQUVHO1FBQ2EsMEJBQXFCLEdBQTJCLE1BQU0sRUFBRSxDQUFDO1FBRXpFOztXQUVHO1FBQ2EsMEJBQXFCLEdBQTJCLE1BQU0sRUFBRSxDQUFDO1FBRXpFOztXQUVHO1FBQ2EsdUJBQWtCLEdBQXdCLEtBQUssQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUUzRTs7V0FFRztRQUNnQiwyQkFBc0IsR0FBeUIsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7S0FDbkc7K0dBN0NZLGlDQUFpQzttR0FBakMsaUNBQWlDLG9wQkNwQjlDLG13TkEwSUEsbTBCRHpIMkIsU0FBUyxvSUFBRSxPQUFPLHFGQUFFLE9BQU8saUZBQUUsUUFBUSxtRkFBRSxLQUFLLG1IQUFpQixVQUFVLDhGQUFFLFlBQVkscUZBQUUsU0FBUywrRUFBVyxVQUFVOzs0RkFHbkksaUNBQWlDO2tCQVI3QyxTQUFTO2lDQUNNLElBQUksWUFDTiw2QkFBNkIsV0FHOUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxtQkFDNUgsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0LCBJbnB1dFNpZ25hbCwgb3V0cHV0LCBPdXRwdXRFbWl0dGVyUmVmLCBTaWduYWwsIHNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRVSV9JU19NT0JJTEUsIFR1aUhvdmVyZWQgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IFR1aUFwcGVhcmFuY2UsIFR1aUJ1dHRvbiwgVHVpSWNvbiwgVHVpU3VyZmFjZSB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IFR1aUJhZGdlLCBUdWlDYXJvdXNlbCwgVHVpQ2hpcCB9IGZyb20gJ0B0YWlnYS11aS9raXQnO1xuaW1wb3J0IHsgVHVpQ2FyZExhcmdlLCBUdWlIZWFkZXIgfSBmcm9tICdAdGFpZ2EtdWkvbGF5b3V0JztcblxuaW1wb3J0IHsgU2NQcmV2aWV3TW9zcXVpdG9Db25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0LzQvtGB0LrQuNGC0L3QvtC5INGB0LXRgtC60LguXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdzYy1wcmV2aWV3LXNhbXBsZXMtbW9zcXVpdG8nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1wcmV2aWV3LXNhbXBsZXMtbW9zcXVpdG8uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9zYy1wcmV2aWV3LXNhbXBsZXMtbW9zcXVpdG8uY29tcG9uZW50LnNjc3MnLFxuICAgIGltcG9ydHM6IFtUdWlDYXJvdXNlbCwgVHVpQnV0dG9uLCBUdWlJY29uLCBUdWlDaGlwLCBUdWlCYWRnZSwgTmdGb3IsIFR1aUFwcGVhcmFuY2UsIFR1aUhvdmVyZWQsIFR1aUNhcmRMYXJnZSwgVHVpSGVhZGVyLCBUdWlJY29uLCBUdWlTdXJmYWNlXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NQcmV2aWV3U2FtcGxlc01vc3F1aXRvQ29tcG9uZW50IHtcbiAgICAvKipcbiAgICAgKiDQktGL0LHRgNCw0L3QvdGL0Lkg0LjQvdC00LXQutGBINGG0LLQtdGC0LAg0L/RgNC+0YTQuNC70Y8uXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbG9ySW5kZXg6IFdyaXRhYmxlU2lnbmFsPG51bWJlcj4gPSBzaWduYWw8bnVtYmVyPigwKTtcblxuICAgIC8qKlxuICAgICAqINCS0YvQsdGA0LDQvdC90YvQuSDQuNC90LTQtdC60YEg0YLQuNC/0LAg0YHQtdGC0LrQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbmV0VHlwZUluZGV4OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+ID0gc2lnbmFsPG51bWJlcj4oMCk7XG5cbiAgICAvKipcbiAgICAgKiDQktGL0LHRgNCw0L3QvdGL0Lkg0YLQuNC/INGB0LXRgtC60LguXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG5ldFR5cGVJbmRleFNlbGVjdGVkOiBTaWduYWw8c3RyaW5nPiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkubmV0VHlwZVt0aGlzLm5ldFR5cGVJbmRleCgpXSk7XG5cbiAgICAvKipcbiAgICAgKiDQktGL0LHRgNCw0L3QvdGL0Lkg0YbQstC10YIg0L/RgNC+0YTQuNC70Y8uXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbG9ySW5kZXhTZWxlY3RlZDogU2lnbmFsPHN0cmluZz4gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLmNvbG9yW3RoaXMuY29sb3JJbmRleCgpXSk7XG5cbiAgICAvKipcbiAgICAgKiDQmtC+0L3RhNC40LPRg9GA0LDRhtC40Y8g0LTQu9GPINC+0YLQvtCx0YDQsNC20LXQvdC40Y8g0L7QsdGA0LDQt9GG0LAg0LzQvtGB0LrQuNGC0L3QvtC5INGB0LXRgtC60LguXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbmZpZzogSW5wdXRTaWduYWw8U2NQcmV2aWV3TW9zcXVpdG9Db25maWc+ID0gaW5wdXQucmVxdWlyZWQ8U2NQcmV2aWV3TW9zcXVpdG9Db25maWc+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LHRi9GC0LjQtSwg0LrQvtGC0L7RgNC+0LUg0L/RgNC+0LjRgdGF0L7QtNC40YIg0L/RgNC4INC90LDQttCw0YLQuNC4INC90LAg0LrQvdC+0L/QutGDIFwi0J3QsNC30LDQtCDQsiDQmtC+0L3RhNC40LPRg9GA0LDRgtC+0YBcIi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgb3BlbkNvbmZpZ3VyYXRvckNsaWNrOiBPdXRwdXRFbWl0dGVyUmVmPHZvaWQ+ID0gb3V0cHV0KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LHRi9GC0LjQtSwg0LrQvtGC0L7RgNC+0LUg0L/RgNC+0LjRgdGF0L7QtNC40YIg0L/RgNC4INC90LDQttCw0YLQuNC4INC90LAg0LrQvdC+0L/QutGDIFwi0JrQvtC90YHRg9C70YzRgtCw0YbQuNGPXCIuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG9wZW5Db25zdWx0YXRpb25DbGljazogT3V0cHV0RW1pdHRlclJlZjx2b2lkPiA9IG91dHB1dCgpO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdGC0LXRgNCy0LDQuyDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQvtCz0L4g0L/RgNC+0YfQuNGC0YvQstCw0L3QuNGPINGB0L/QuNGB0LrQsCDRgtC+0LLQsNGA0L7QsiDQsiDQvNC40LvQu9C40YHQtdC60YPQvdC00LDRhS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgYXV0b1NsaWRlSW50ZXJ2YWxlOiBJbnB1dFNpZ25hbDxudW1iZXI+ID0gaW5wdXQ8bnVtYmVyPigwKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0L3QtdC+0LHRhdC+0LTQuNC80L4g0L7RgtC+0LHRgNCw0LbQsNGC0Ywg0L/QtdGA0LXQutC70Y7Rh9Cw0YLQtdC70Lgg0L3QsCDQutCw0YDRg9GB0LXQu9C4LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc1Nob3dDYXJvdXNlbFN3aXRjaGVzOiBJbnB1dFNpZ25hbDxib29sZWFuPiA9IGlucHV0KCFpbmplY3QoVFVJX0lTX01PQklMRSkpO1xufVxuIiwiQGxldCBkZXNjcmlwdGlvbnMgPSBjb25maWcoKS5kZXNjcmlwdGlvbnM7XG5AbGV0IGNvbG9ycyA9IGNvbmZpZygpLmNvbG9yO1xuQGxldCBuZXRUeXBlcyA9IGNvbmZpZygpLm5ldFR5cGU7XG5cbjwhLS0g0J7RgdC90L7QstC90L7QuSDQutC+0L3RgtC10LnQvdC10YAg0YEg0YHQtdGC0LrQvtC5LiAtLT5cbjxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0xIGdhcC00IGxnOmdyaWQtY29scy0yXCI+XG4gICAgPCEtLSDQm9C10LLQsNGPINC60L7Qu9C+0L3QutCwINGBINC40L3RhNC+0YDQvNCw0YbQuNC10LkuIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00XCI+XG4gICAgICAgIDwhLS0g0JrQvdC+0L/QutC4INCy0YvQsdC+0YDQsCDRgtC40L/QsCDRgdC10YLQutC4LiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC00XCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbmV0VHlwZXM7IGxldCBpdGVtSW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgdHVpQ2FyZExhcmdlXG4gICAgICAgICAgICAgICAgdHVpSGVhZGVyXG4gICAgICAgICAgICAgICAgdHVpU3VyZmFjZT1cImZsb2F0aW5nXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibmV0VHlwZUluZGV4LnNldChpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIm5ldFR5cGVJbmRleCgpID09PSBpdGVtSW5kZXhcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaC0xMiAhaXRlbXMtY2VudGVyIGdhcC0yICFyb3VuZGVkLXhsICFweC00ICFweS0wXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiY29uZmlnKCkuaWNvbnNbaXRlbV1cIlxuICAgICAgICAgICAgICAgICAgICBbYWx0XT1cImRlc2NyaXB0aW9uc1snbmV0VHlwZSddW2l0ZW1dXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaXplLThcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGRpdj57eyBkZXNjcmlwdGlvbnNbJ25ldFR5cGUnXVtpdGVtXSB9fTwvZGl2PlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0g0J7Qv9C40YHQsNC90LjQtSDQstGL0LHRgNCw0L3QvdC+0LPQviDRgtC40L/QsCDRgdC10YLQutC4LiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYm9keS1sLWJvbGRcIj7QodC10YLQutCwIHt7IGRlc2NyaXB0aW9uc1snbmV0VHlwZSddW25ldFR5cGVJbmRleFNlbGVjdGVkKCldIH19PC9kaXY+XG4gICAgICAgIHt7IGNvbmZpZygpLnN1YnRpdGxlc1tuZXRUeXBlSW5kZXhTZWxlY3RlZCgpXSB9fVxuXG4gICAgICAgIDwhLS0g0JjQvdGE0L7RgNC80LDRhtC40L7QvdC90YvQtSDQsdC10LnQtNC20LguIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtYm9keS1tXCI+XG4gICAgICAgICAgICA8dHVpLWJhZGdlXG4gICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cImN1c3RvbVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXNvbGlkIGJvcmRlci10dWktdGV4dC1wcmltYXJ5IGJnLXdoaXRlICFwLVswLjRyZW1dIGZvbnQtYm9sZCB0ZXh0LXR1aS10ZXh0LXByaW1hcnlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGNvbG9ycy5sZW5ndGggfX1cbiAgICAgICAgICAgIDwvdHVpLWJhZGdlPlxuICAgICAgICAgICAgLSDQutC+0LvQu9C40YfQtdGB0YLQstC+INGG0LLQtdGC0L7QsiDQv9GA0L7RhNC40LvRj1xuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMSB0ZXh0LWJvZHktbVwiPlxuICAgICAgICAgICAgPHR1aS1iYWRnZVxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJjdXN0b21cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1zb2xpZCBib3JkZXItdHVpLXRleHQtcHJpbWFyeSBiZy13aGl0ZSAhcC1bMC40cmVtXSBmb250LWJvbGQgdGV4dC10dWktdGV4dC1wcmltYXJ5XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBuZXRUeXBlcy5sZW5ndGggfX1cbiAgICAgICAgICAgIDwvdHVpLWJhZGdlPlxuICAgICAgICAgICAgLSDQutC+0LvQu9C40YfQtdGB0YLQstC+INGC0LjQv9C+0LIg0YHQtdGC0L7QulxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tINCg0LDQt9C80LXRgNGLINGB0LXRgtC+0LouIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ib2R5LW1cIj5cbiAgICAgICAgICAgIDx0dWktaWNvbiBpY29uPVwiQHR1aS5zYy5ncmlkLWhlaWdodC1hcnJvd1wiIC8+XG4gICAgICAgICAgICDQktGL0YHQvtGC0LAg0YHQtdGC0L7QuiDQvtGCIHt7IGNvbmZpZygpLm1pbkhlaWdodCB9fSDQtNC+IHt7IGNvbmZpZygpLm1heEhlaWdodHNbbmV0VHlwZUluZGV4U2VsZWN0ZWQoKV0gfX0g0LzQvFxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYm9keS1tXCI+XG4gICAgICAgICAgICA8dHVpLWljb24gaWNvbj1cIkB0dWkuc2MuZ3JpZC13aWR0aC1hcnJvd1wiIC8+XG4gICAgICAgICAgICDQqNC40YDQuNC90LAg0YHQtdGC0L7QuiDQvtGCIHt7IGNvbmZpZygpLm1pbldpZHRoIH19INC00L4ge3sgY29uZmlnKCkubWF4V2lkdGhzW25ldFR5cGVJbmRleFNlbGVjdGVkKCldIH19INC80LxcbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSDQotC10LPQuCDRhdCw0YDQsNC60YLQtdGA0LjRgdGC0LjQui4gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMlwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0YWcgb2YgY29uZmlnKCkudGFnc1tuZXRUeXBlSW5kZXhTZWxlY3RlZCgpXVwiXG4gICAgICAgICAgICAgICAgdHVpQ2hpcFxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJuZXV0cmFsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyB0YWcgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tINCS0YvQsdC+0YAg0YbQstC10YLQsCDQv9GA0L7RhNC40LvRjy4gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC00XCI+XG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGltYWdlIG9mIGNvbmZpZygpLmNvbG9yOyBsZXQgaXRlbUluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiY29uZmlnKCkuY29sb3JzSWNvbnNbaW1hZ2VdXCJcbiAgICAgICAgICAgICAgICBbYWx0XT1cImRlc2NyaXB0aW9uc1snY29sb3InXVtpdGVtSW5kZXhdXCJcbiAgICAgICAgICAgICAgICAodHVpSG92ZXJlZENoYW5nZSk9XCJjb2xvckluZGV4LnNldChpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImNvbG9ySW5kZXgoKSA9PT0gaXRlbUluZGV4XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNpemUtMTEgcm91bmRlZC14bFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tINCa0L3QvtC/0LrQuCDQtNC10LnRgdGC0LLQuNC5LiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbmZpZ3VyYXRvckNsaWNrLmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS5zbGlkZXJzLWhvcml6b250YWxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgINCh0LTQtdC70LDRgtGMINGA0LDRgdGH0LXRglxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbnN1bHRhdGlvbkNsaWNrLmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS5tZXNzYWdlcy1zcXVhcmVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgINCa0L7QvdGB0YPQu9GM0YLQsNGG0LjRj1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSDQn9GA0LDQstCw0Y8g0LrQvtC70L7QvdC60LAg0YEg0LrQsNGA0YPRgdC10LvRjNGOINC40LfQvtCx0YDQsNC20LXQvdC40LkuIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSAtb3JkZXItMSBoLVsxOWVtXSBmbGV4LTEgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQteGwgc2hhZG93LXR1aS1zaGFkb3cgbWQ6aC05NiBsZzpvcmRlci0yIGxnOmgtWzI4cmVtXVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0dWlJY29uQnV0dG9uXG4gICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLmNoZXZyb24tbGVmdFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2Fyb3VzZWwucHJldigpXCJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJpY29uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiIWFic29sdXRlIGxlZnQtMCB0b3AtMS8yIHotMTAgbWwtMiAtdHJhbnNsYXRlLXktMS8yXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuXG4gICAgICAgIDx0dWktY2Fyb3VzZWxcbiAgICAgICAgICAgICNjYXJvdXNlbFxuICAgICAgICAgICAgW2R1cmF0aW9uXT1cImF1dG9TbGlkZUludGVydmFsZSgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaC1bMTllbV0gdy1mdWxsIG1kOmgtOTYgbGc6aC1bMjhyZW1dXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBjb25maWcoKS5pbWFnZVByZXZpZXdzQnlDb2xvcltjb2xvckluZGV4U2VsZWN0ZWQoKV07IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKnR1aUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRJbWFnZV09XCIndXJsKCcgKyBpdGVtICsgJyknXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLVsxOWVtXSB3LWZ1bGwgYmctY292ZXIgYmctcmlnaHQgbWQ6aC05NiBsZzpoLVsyOHJlbV1cIlxuICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC90dWktY2Fyb3VzZWw+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkuY2hldnJvbi1yaWdodFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2Fyb3VzZWwubmV4dCgpXCJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJpY29uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiIWFic29sdXRlIHJpZ2h0LTAgdG9wLTEvMiB6LTEwIG1yLTIgLXRyYW5zbGF0ZS15LTEvMlwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcHJldmlldy1zYW1wbGVzLW1vc3F1aXRvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9zYW1wbGVzL3NjLXByZXZpZXctc2FtcGxlcy1tb3NxdWl0by9zYy1wcmV2aWV3LXNhbXBsZXMtbW9zcXVpdG8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL3NhbXBsZXMvc2MtcHJldmlldy1zYW1wbGVzLW1vc3F1aXRvL3NjLXByZXZpZXctc2FtcGxlcy1tb3NxdWl0by5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBZSxNQUFNLEVBQTRCLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDbkssT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7O0FBSTNEOztHQUVHO0FBU0gsTUFBTSxPQUFPLGlDQUFpQztJQVI5QztRQVNJOztXQUVHO1FBQ2EsZUFBVSxHQUEyQixNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFdkU7O1dBRUc7UUFDYSxpQkFBWSxHQUEyQixNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFekU7O1dBRUc7UUFDYSx5QkFBb0IsR0FBbUIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVsSDs7V0FFRztRQUNhLHVCQUFrQixHQUFtQixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTVHOztXQUVHO1FBQ2EsV0FBTSxHQUF5QyxLQUFLLENBQUMsUUFBUSxFQUEyQixDQUFDO1FBRXpHOztXQUVHO1FBQ2EsMEJBQXFCLEdBQTJCLE1BQU0sRUFBRSxDQUFDO1FBRXpFOztXQUVHO1FBQ2Esd0JBQW1CLEdBQW9DLEtBQUssRUFBc0IsQ0FBQztRQUVuRzs7V0FFRztRQUNhLDBCQUFxQixHQUEyQixNQUFNLEVBQUUsQ0FBQztRQUV6RTs7V0FFRztRQUNhLHVCQUFrQixHQUF3QixLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFM0U7O1dBRUc7UUFDZ0IsMkJBQXNCLEdBQXlCLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0tBQ25HOytHQWxEWSxpQ0FBaUM7bUdBQWpDLGlDQUFpQyxzekJDcEI5Qyx5ME5BMklBLG0wQkQxSDJCLFNBQVMsb0lBQUUsT0FBTyxxRkFBRSxPQUFPLGlGQUFFLFFBQVEsbUZBQUUsS0FBSyxtSEFBaUIsVUFBVSw4RkFBRSxZQUFZLHFGQUFFLFNBQVMsK0VBQVcsVUFBVTs7NEZBR25JLGlDQUFpQztrQkFSN0MsU0FBUztpQ0FDTSxJQUFJLFlBQ04sNkJBQTZCLFdBRzlCLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsbUJBQzVILHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgSW5wdXRTaWduYWwsIG91dHB1dCwgT3V0cHV0RW1pdHRlclJlZiwgU2lnbmFsLCBzaWduYWwsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUVUlfSVNfTU9CSUxFLCBUdWlIb3ZlcmVkIH0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5pbXBvcnQgeyBUdWlBcHBlYXJhbmNlLCBUdWlCdXR0b24sIFR1aUljb24sIFR1aVN1cmZhY2UgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlCYWRnZSwgVHVpQ2Fyb3VzZWwsIFR1aUNoaXAgfSBmcm9tICdAdGFpZ2EtdWkva2l0JztcbmltcG9ydCB7IFR1aUNhcmRMYXJnZSwgVHVpSGVhZGVyIH0gZnJvbSAnQHRhaWdhLXVpL2xheW91dCc7XG5cbmltcG9ydCB7IFNjUHJldmlld01vc3F1aXRvQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGPINC80L7RgdC60LjRgtC90L7QuSDRgdC10YLQutC4LlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnc2MtcHJldmlldy1zYW1wbGVzLW1vc3F1aXRvJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtcHJldmlldy1zYW1wbGVzLW1vc3F1aXRvLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vc2MtcHJldmlldy1zYW1wbGVzLW1vc3F1aXRvLmNvbXBvbmVudC5zY3NzJyxcbiAgICBpbXBvcnRzOiBbVHVpQ2Fyb3VzZWwsIFR1aUJ1dHRvbiwgVHVpSWNvbiwgVHVpQ2hpcCwgVHVpQmFkZ2UsIE5nRm9yLCBUdWlBcHBlYXJhbmNlLCBUdWlIb3ZlcmVkLCBUdWlDYXJkTGFyZ2UsIFR1aUhlYWRlciwgVHVpSWNvbiwgVHVpU3VyZmFjZV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjUHJldmlld1NhbXBsZXNNb3NxdWl0b0NvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0JLRi9Cx0YDQsNC90L3Ri9C5INC40L3QtNC10LrRgSDRhtCy0LXRgtCwINC/0YDQvtGE0LjQu9GPLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBjb2xvckluZGV4OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+ID0gc2lnbmFsPG51bWJlcj4oMCk7XG5cbiAgICAvKipcbiAgICAgKiDQktGL0LHRgNCw0L3QvdGL0Lkg0LjQvdC00LXQutGBINGC0LjQv9CwINGB0LXRgtC60LguXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG5ldFR5cGVJbmRleDogV3JpdGFibGVTaWduYWw8bnVtYmVyPiA9IHNpZ25hbDxudW1iZXI+KDApO1xuXG4gICAgLyoqXG4gICAgICog0JLRi9Cx0YDQsNC90L3Ri9C5INGC0LjQvyDRgdC10YLQutC4LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBuZXRUeXBlSW5kZXhTZWxlY3RlZDogU2lnbmFsPHN0cmluZz4gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLm5ldFR5cGVbdGhpcy5uZXRUeXBlSW5kZXgoKV0pO1xuXG4gICAgLyoqXG4gICAgICog0JLRi9Cx0YDQsNC90L3Ri9C5INGG0LLQtdGCINC/0YDQvtGE0LjQu9GPLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBjb2xvckluZGV4U2VsZWN0ZWQ6IFNpZ25hbDxzdHJpbmc+ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5jb2xvclt0aGlzLmNvbG9ySW5kZXgoKV0pO1xuXG4gICAgLyoqXG4gICAgICog0JrQvtC90YTQuNCz0YPRgNCw0YbQuNGPINC00LvRjyDQvtGC0L7QsdGA0LDQttC10L3QuNGPINC+0LHRgNCw0LfRhtCwINC80L7RgdC60LjRgtC90L7QuSDRgdC10YLQutC4LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBjb25maWc6IElucHV0U2lnbmFsPFNjUHJldmlld01vc3F1aXRvQ29uZmlnPiA9IGlucHV0LnJlcXVpcmVkPFNjUHJldmlld01vc3F1aXRvQ29uZmlnPigpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUsINC60L7RgtC+0YDQvtC1INC/0YDQvtC40YHRhdC+0LTQuNGCINC/0YDQuCDQvdCw0LbQsNGC0LjQuCDQvdCwINC60L3QvtC/0LrRgyBcItCd0LDQt9Cw0LQg0LIg0JrQvtC90YTQuNCz0YPRgNCw0YLQvtGAXCIuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG9wZW5Db25maWd1cmF0b3JDbGljazogT3V0cHV0RW1pdHRlclJlZjx2b2lkPiA9IG91dHB1dCgpO1xuXG4gICAgLyoqXG4gICAgICog0KHRgdGL0LvQutCwINC90LAg0YHRgtGA0LDQvdC40YbRgyDQutC+0L3RhNC40LPRg9GA0LDRgtC+0YDQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgY29uZmlndXJhdG9yUGFnZVVybDogSW5wdXRTaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPiA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1LCDQutC+0YLQvtGA0L7QtSDQv9GA0L7QuNGB0YXQvtC00LjRgiDQv9GA0Lgg0L3QsNC20LDRgtC40Lgg0L3QsCDQutC90L7Qv9C60YMgXCLQmtC+0L3RgdGD0LvRjNGC0LDRhtC40Y9cIi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgb3BlbkNvbnN1bHRhdGlvbkNsaWNrOiBPdXRwdXRFbWl0dGVyUmVmPHZvaWQ+ID0gb3V0cHV0KCk7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90YLQtdGA0LLQsNC7INCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0LPQviDQv9GA0L7Rh9C40YLRi9Cy0LDQvdC40Y8g0YHQv9C40YHQutCwINGC0L7QstCw0YDQvtCyINCyINC80LjQu9C70LjRgdC10LrRg9C90LTQsNGFLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBhdXRvU2xpZGVJbnRlcnZhbGU6IElucHV0U2lnbmFsPG51bWJlcj4gPSBpbnB1dDxudW1iZXI+KDApO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0L7QsdGA0LDQttCw0YLRjCDQv9C10YDQtdC60LvRjtGH0LDRgtC10LvQuCDQvdCwINC60LDRgNGD0YHQtdC70LguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzU2hvd0Nhcm91c2VsU3dpdGNoZXM6IElucHV0U2lnbmFsPGJvb2xlYW4+ID0gaW5wdXQoIWluamVjdChUVUlfSVNfTU9CSUxFKSk7XG59XG4iLCJAbGV0IGRlc2NyaXB0aW9ucyA9IGNvbmZpZygpLmRlc2NyaXB0aW9ucztcbkBsZXQgY29sb3JzID0gY29uZmlnKCkuY29sb3I7XG5AbGV0IG5ldFR5cGVzID0gY29uZmlnKCkubmV0VHlwZTtcblxuPCEtLSDQntGB0L3QvtCy0L3QvtC5INC60L7QvdGC0LXQudC90LXRgCDRgSDRgdC10YLQutC+0LkuIC0tPlxuPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTEgZ2FwLTQgbGc6Z3JpZC1jb2xzLTJcIj5cbiAgICA8IS0tINCb0LXQstCw0Y8g0LrQvtC70L7QvdC60LAg0YEg0LjQvdGE0L7RgNC80LDRhtC40LXQuS4gLS0+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTRcIj5cbiAgICAgICAgPCEtLSDQmtC90L7Qv9C60Lgg0LLRi9Cx0L7RgNCwINGC0LjQv9CwINGB0LXRgtC60LguIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTRcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBuZXRUeXBlczsgbGV0IGl0ZW1JbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICB0dWlDYXJkTGFyZ2VcbiAgICAgICAgICAgICAgICB0dWlIZWFkZXJcbiAgICAgICAgICAgICAgICB0dWlTdXJmYWNlPVwiZmxvYXRpbmdcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXRUeXBlSW5kZXguc2V0KGl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwibmV0VHlwZUluZGV4KCkgPT09IGl0ZW1JbmRleFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoLTEyICFpdGVtcy1jZW50ZXIgZ2FwLTIgIXJvdW5kZWQteGwgIXB4LTQgIXB5LTBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjb25maWcoKS5pY29uc1tpdGVtXVwiXG4gICAgICAgICAgICAgICAgICAgIFthbHRdPVwiZGVzY3JpcHRpb25zWyduZXRUeXBlJ11baXRlbV1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNpemUtOFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8ZGl2Pnt7IGRlc2NyaXB0aW9uc1snbmV0VHlwZSddW2l0ZW1dIH19PC9kaXY+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSDQntC/0LjRgdCw0L3QuNC1INCy0YvQsdGA0LDQvdC90L7Qs9C+INGC0LjQv9CwINGB0LXRgtC60LguIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ib2R5LWwtYm9sZFwiPtCh0LXRgtC60LAge3sgZGVzY3JpcHRpb25zWyduZXRUeXBlJ11bbmV0VHlwZUluZGV4U2VsZWN0ZWQoKV0gfX08L2Rpdj5cbiAgICAgICAge3sgY29uZmlnKCkuc3VidGl0bGVzW25ldFR5cGVJbmRleFNlbGVjdGVkKCldIH19XG5cbiAgICAgICAgPCEtLSDQmNC90YTQvtGA0LzQsNGG0LjQvtC90L3Ri9C1INCx0LXQudC00LbQuC4gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1ib2R5LW1cIj5cbiAgICAgICAgICAgIDx0dWktYmFkZ2VcbiAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwiY3VzdG9tXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItc29saWQgYm9yZGVyLXR1aS10ZXh0LXByaW1hcnkgYmctd2hpdGUgIXAtWzAuNHJlbV0gZm9udC1ib2xkIHRleHQtdHVpLXRleHQtcHJpbWFyeVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgY29sb3JzLmxlbmd0aCB9fVxuICAgICAgICAgICAgPC90dWktYmFkZ2U+XG4gICAgICAgICAgICAtINC60L7Qu9C70LjRh9C10YHRgtCy0L4g0YbQstC10YLQvtCyINC/0YDQvtGE0LjQu9GPXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtYm9keS1tXCI+XG4gICAgICAgICAgICA8dHVpLWJhZGdlXG4gICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cImN1c3RvbVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXNvbGlkIGJvcmRlci10dWktdGV4dC1wcmltYXJ5IGJnLXdoaXRlICFwLVswLjRyZW1dIGZvbnQtYm9sZCB0ZXh0LXR1aS10ZXh0LXByaW1hcnlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IG5ldFR5cGVzLmxlbmd0aCB9fVxuICAgICAgICAgICAgPC90dWktYmFkZ2U+XG4gICAgICAgICAgICAtINC60L7Qu9C70LjRh9C10YHRgtCy0L4g0YLQuNC/0L7QsiDRgdC10YLQvtC6XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0g0KDQsNC30LzQtdGA0Ysg0YHQtdGC0L7Qui4gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJvZHktbVwiPlxuICAgICAgICAgICAgPHR1aS1pY29uIGljb249XCJAdHVpLnNjLmdyaWQtaGVpZ2h0LWFycm93XCIgLz5cbiAgICAgICAgICAgINCS0YvRgdC+0YLQsCDRgdC10YLQvtC6INC+0YIge3sgY29uZmlnKCkubWluSGVpZ2h0IH19INC00L4ge3sgY29uZmlnKCkubWF4SGVpZ2h0c1tuZXRUeXBlSW5kZXhTZWxlY3RlZCgpXSB9fSDQvNC8XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ib2R5LW1cIj5cbiAgICAgICAgICAgIDx0dWktaWNvbiBpY29uPVwiQHR1aS5zYy5ncmlkLXdpZHRoLWFycm93XCIgLz5cbiAgICAgICAgICAgINCo0LjRgNC40L3QsCDRgdC10YLQvtC6INC+0YIge3sgY29uZmlnKCkubWluV2lkdGggfX0g0LTQviB7eyBjb25maWcoKS5tYXhXaWR0aHNbbmV0VHlwZUluZGV4U2VsZWN0ZWQoKV0gfX0g0LzQvFxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tINCi0LXQs9C4INGF0LDRgNCw0LrRgtC10YDQuNGB0YLQuNC6LiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHRhZyBvZiBjb25maWcoKS50YWdzW25ldFR5cGVJbmRleFNlbGVjdGVkKCldXCJcbiAgICAgICAgICAgICAgICB0dWlDaGlwXG4gICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cIm5ldXRyYWxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHRhZyB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0g0JLRi9Cx0L7RgCDRhtCy0LXRgtCwINC/0YDQvtGE0LjQu9GPLiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTRcIj5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaW1hZ2Ugb2YgY29uZmlnKCkuY29sb3I7IGxldCBpdGVtSW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJjb25maWcoKS5jb2xvcnNJY29uc1tpbWFnZV1cIlxuICAgICAgICAgICAgICAgIFthbHRdPVwiZGVzY3JpcHRpb25zWydjb2xvciddW2l0ZW1JbmRleF1cIlxuICAgICAgICAgICAgICAgICh0dWlIb3ZlcmVkQ2hhbmdlKT1cImNvbG9ySW5kZXguc2V0KGl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY29sb3JJbmRleCgpID09PSBpdGVtSW5kZXhcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2l6ZS0xMSByb3VuZGVkLXhsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0g0JrQvdC+0L/QutC4INC00LXQudGB0YLQstC40LkuIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgICAgICBbYXR0ci5ocmVmXT1cImNvbmZpZ3VyYXRvclBhZ2VVcmwoKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBvcGVuQ29uZmlndXJhdG9yQ2xpY2suZW1pdCgpXCJcbiAgICAgICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLnNsaWRlcnMtaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg0KHQtNC10LvQsNGC0Ywg0YDQsNGB0YfQtdGCXG4gICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbnN1bHRhdGlvbkNsaWNrLmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS5tZXNzYWdlcy1zcXVhcmVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgINCa0L7QvdGB0YPQu9GM0YLQsNGG0LjRj1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSDQn9GA0LDQstCw0Y8g0LrQvtC70L7QvdC60LAg0YEg0LrQsNGA0YPRgdC10LvRjNGOINC40LfQvtCx0YDQsNC20LXQvdC40LkuIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSAtb3JkZXItMSBoLVsxOWVtXSBmbGV4LTEgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQteGwgc2hhZG93LXR1aS1zaGFkb3cgbWQ6aC05NiBsZzpvcmRlci0yIGxnOmgtWzI4cmVtXVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0dWlJY29uQnV0dG9uXG4gICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLmNoZXZyb24tbGVmdFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2Fyb3VzZWwucHJldigpXCJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJpY29uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiIWFic29sdXRlIGxlZnQtMCB0b3AtMS8yIHotMTAgbWwtMiAtdHJhbnNsYXRlLXktMS8yXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuXG4gICAgICAgIDx0dWktY2Fyb3VzZWxcbiAgICAgICAgICAgICNjYXJvdXNlbFxuICAgICAgICAgICAgW2R1cmF0aW9uXT1cImF1dG9TbGlkZUludGVydmFsZSgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaC1bMTllbV0gdy1mdWxsIG1kOmgtOTYgbGc6aC1bMjhyZW1dXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBjb25maWcoKS5pbWFnZVByZXZpZXdzQnlDb2xvcltjb2xvckluZGV4U2VsZWN0ZWQoKV07IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKnR1aUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRJbWFnZV09XCIndXJsKCcgKyBpdGVtICsgJyknXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLVsxOWVtXSB3LWZ1bGwgYmctY292ZXIgYmctcmlnaHQgbWQ6aC05NiBsZzpoLVsyOHJlbV1cIlxuICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC90dWktY2Fyb3VzZWw+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkuY2hldnJvbi1yaWdodFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2Fyb3VzZWwubmV4dCgpXCJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJpY29uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiIWFic29sdXRlIHJpZ2h0LTAgdG9wLTEvMiB6LTEwIG1yLTIgLXRyYW5zbGF0ZS15LTEvMlwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -3,7 +3,7 @@ import { inject, Injectable, Directive, ContentChildren, HostListener, NgModule,
3
3
  import * as i1 from '@snabcentr/client-core';
4
4
  import { ScContactsService, ScUserService, ScAuthService, SEARCH_TERM, ScUnitsHelper, ScImageHelper, SC_PATH_IMAGE_NOT_FOUND, IS_RUNNING_ON_TERMINAL, ScPhoneService, ScUserMetrikaService, ScUserMetrikaGoalsEnum, ScVCardService, ScVerificationService, ScISuggestionType, SC_MIN_LENGTH_SEARCH_TERM, ScConvertersService, ScOpfList, ScLocationsService, ScWarehouseService, SEARCH_TERM_PROVIDERS, ScCartService, ScUploadedFile, ScMimeTypes, ScCatalogService, SC_URLS, ScPaginationService, SC_NEXT_PAGE_PAGINATION_CLICK, SC_PRODUCT_PAGINATION_OPTIONS, ScIconTypesEnum, ScDocumentInfoTypesEnum, ScFrequentlyAskedQuestionsService, ScFeedbackService } from '@snabcentr/client-core';
5
5
  import * as i6 from 'rxjs';
6
- import { EMPTY, BehaviorSubject, switchMap, of, shareReplay, Subject, map, filter, tap, catchError, finalize, startWith, share, timer, scan, takeWhile, endWith, distinctUntilChanged, debounceTime, throwError, combineLatest, Observable, noop, first, interval, merge, skip } from 'rxjs';
6
+ import { EMPTY, BehaviorSubject, switchMap, of, shareReplay, Subject, map, filter, tap, catchError, finalize, startWith, share, timer, scan, takeWhile, endWith, distinctUntilChanged, debounceTime, throwError, combineLatest, Observable, noop, first, merge, skip } from 'rxjs';
7
7
  import * as i7 from '@taiga-ui/cdk';
8
8
  import { tuiCreateToken, tuiCreateTokenFromFactory, TUI_IS_MOBILE, TuiValueTransformer, TuiDay, tuiControlValue, tuiIsPresent, tuiMarkControlAsTouchedAndValidate, tuiIsFalsy, TuiLet, TuiRepeatTimes, TuiTime, TuiHovered, TuiAutoFocus, TuiDayRange, TuiMonth, tuiPure, TUI_WINDOW_SIZE, TuiValidationError, TUI_TRUE_HANDLER } from '@taiga-ui/cdk';
9
9
  import { HttpClient, HttpErrorResponse } from '@angular/common/http';
@@ -407,10 +407,13 @@ class AbstractScPriceCard {
407
407
  this.cdr.markForCheck();
408
408
  }
409
409
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AbstractScPriceCard, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
410
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AbstractScPriceCard, inputs: { cartItem: "cartItem", product: "product", showQuantityControl: "showQuantityControl", href: "href" }, outputs: { clickFavoriteEvent: "clickFavoriteEvent", clickAddToCartEvent: "clickAddToCartEvent", clickClearEvent: "clickClearEvent", clickCardEvent: "clickCardEvent", clickPriceHistoryEvent: "clickPriceHistoryEvent", quantityValueChanges: "quantityValueChanges" }, ngImport: i0 }); }
410
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AbstractScPriceCard, inputs: { cartItem: "cartItem", product: "product", showQuantityControl: "showQuantityControl", href: "href" }, outputs: { clickFavoriteEvent: "clickFavoriteEvent", clickAddToCartEvent: "clickAddToCartEvent", clickClearEvent: "clickClearEvent", clickCardEvent: "clickCardEvent", clickPriceHistoryEvent: "clickPriceHistoryEvent", quantityValueChanges: "quantityValueChanges" }, host: { attributes: { "ngSkipHydration": "true" } }, ngImport: i0 }); }
411
411
  }
412
412
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AbstractScPriceCard, decorators: [{
413
- type: Directive
413
+ type: Directive,
414
+ args: [{
415
+ host: { ngSkipHydration: 'true' },
416
+ }]
414
417
  }], propDecorators: { cartItem: [{
415
418
  type: Input
416
419
  }], product: [{
@@ -3562,11 +3565,11 @@ class ScBannerComponent {
3562
3565
  }
3563
3566
  }
3564
3567
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScBannerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ScBannerService }, { token: IntersectionObserverService }, { token: ElementRef }, { token: ScPxConverter }, { token: i1.ScUserMetrikaService }], target: i0.ɵɵFactoryTarget.Component }); }
3565
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ScBannerComponent, selector: "sc-banner", inputs: { navigateButton: "navigateButton", duration: "duration", bannerLocation: "bannerLocation", resizable: "resizable" }, outputs: { loadBannersEvent: "loadBannersEvent", clickBannerEvent: "clickBannerEvent" }, host: { properties: { "style.aspect-ratio": "this.aspectRatio", "class.!hidden": "this.isHidden" } }, providers: [IntersectionObserverService], queries: [{ propertyName: "bannersListRef", predicate: ["banner"] }], ngImport: i0, template: "<ng-container *tuiLet=\"banners$ | async\">\n <tui-carousel\n [duration]=\"duration\"\n #carousel\n [attr.resizable]=\"resizable\"\n class=\"size-full overflow-hidden rounded-xl bg-white\"\n [(index)]=\"currentBannerId\"\n >\n <ng-container *ngFor=\"let banner of banners; let index = index\">\n <ng-container [ngSwitch]=\"banner.mediaType\">\n <ng-container *ngSwitchCase=\"'image'\">\n <a\n *tuiItem\n (click)=\"onClick(banner)\"\n target=\"_blank\"\n [title]=\"banner.title\"\n [style.aspect-ratio]=\"aspectRatio\"\n [attr.href]=\"banner.url ? banner.url : null\"\n [style.background-image]=\"'url(' + banner.mediaFile + ')'\"\n class=\"size-full bg-[length:100%_100%]\"\n >\n </a>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngFor=\"let item of bannersListRef\">\n <div\n *tuiItem\n [style.aspect-ratio]=\"aspectRatio\"\n class=\"size-full overflow-hidden\"\n >\n <ng-container [ngTemplateOutlet]=\"item\"></ng-container>\n </div>\n </ng-container>\n </tui-carousel>\n\n <div\n *ngIf=\"navigateButton && duration && this.banners && this.bannersListRef.length + this.banners.length > 1\"\n tuiTheme=\"light\"\n class=\"flex items-center\"\n >\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"carousel.prev()\"\n class=\"!absolute left-2\"\n ></button>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"carousel.next()\"\n class=\"!absolute right-2\"\n ></button>\n </div>\n</ng-container>\n", styles: [":host{--tui-carousel-padding: 0;display:flex;position:relative}::ng-deep tui-carousel[resizable=true] .t-scroller,::ng-deep tui-carousel[resizable=true] .t-items{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i2$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$1.TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "directive", type: i1$2.TuiItem, selector: "[tuiItem]" }, { kind: "component", type: i2$1.TuiCarouselComponent, selector: "tui-carousel", inputs: ["draggable", "itemsCount", "index"], outputs: ["indexChange", "shift"] }, { kind: "directive", type: i7.TuiLet, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "pipe", type: i2$2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3568
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ScBannerComponent, selector: "sc-banner", inputs: { navigateButton: "navigateButton", duration: "duration", bannerLocation: "bannerLocation", resizable: "resizable" }, outputs: { loadBannersEvent: "loadBannersEvent", clickBannerEvent: "clickBannerEvent" }, host: { attributes: { "ngSkipHydration": "true" }, properties: { "style.aspect-ratio": "this.aspectRatio", "class.!hidden": "this.isHidden" } }, providers: [IntersectionObserverService], queries: [{ propertyName: "bannersListRef", predicate: ["banner"] }], ngImport: i0, template: "<ng-container *tuiLet=\"banners$ | async\">\n <tui-carousel\n [duration]=\"duration\"\n #carousel\n [attr.resizable]=\"resizable\"\n class=\"size-full overflow-hidden rounded-xl bg-white\"\n [(index)]=\"currentBannerId\"\n >\n <ng-container *ngFor=\"let banner of banners; let index = index\">\n <ng-container [ngSwitch]=\"banner.mediaType\">\n <ng-container *ngSwitchCase=\"'image'\">\n <a\n *tuiItem\n (click)=\"onClick(banner)\"\n target=\"_blank\"\n [title]=\"banner.title\"\n [style.aspect-ratio]=\"aspectRatio\"\n [attr.href]=\"banner.url ? banner.url : null\"\n [style.background-image]=\"'url(' + banner.mediaFile + ')'\"\n class=\"size-full bg-[length:100%_100%]\"\n >\n </a>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngFor=\"let item of bannersListRef\">\n <div\n *tuiItem\n [style.aspect-ratio]=\"aspectRatio\"\n class=\"size-full overflow-hidden\"\n >\n <ng-container [ngTemplateOutlet]=\"item\"></ng-container>\n </div>\n </ng-container>\n </tui-carousel>\n\n <div\n *ngIf=\"navigateButton && duration && this.banners && this.bannersListRef.length + this.banners.length > 1\"\n tuiTheme=\"light\"\n class=\"flex items-center\"\n >\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"carousel.prev()\"\n class=\"!absolute left-2\"\n ></button>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"carousel.next()\"\n class=\"!absolute right-2\"\n ></button>\n </div>\n</ng-container>\n", styles: [":host{--tui-carousel-padding: 0;display:flex;position:relative}::ng-deep tui-carousel[resizable=true] .t-scroller,::ng-deep tui-carousel[resizable=true] .t-items{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i2$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$1.TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "directive", type: i1$2.TuiItem, selector: "[tuiItem]" }, { kind: "component", type: i2$1.TuiCarouselComponent, selector: "tui-carousel", inputs: ["draggable", "itemsCount", "index"], outputs: ["indexChange", "shift"] }, { kind: "directive", type: i7.TuiLet, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "pipe", type: i2$2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3566
3569
  }
3567
3570
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScBannerComponent, decorators: [{
3568
3571
  type: Component,
3569
- args: [{ selector: 'sc-banner', changeDetection: ChangeDetectionStrategy.OnPush, providers: [IntersectionObserverService], template: "<ng-container *tuiLet=\"banners$ | async\">\n <tui-carousel\n [duration]=\"duration\"\n #carousel\n [attr.resizable]=\"resizable\"\n class=\"size-full overflow-hidden rounded-xl bg-white\"\n [(index)]=\"currentBannerId\"\n >\n <ng-container *ngFor=\"let banner of banners; let index = index\">\n <ng-container [ngSwitch]=\"banner.mediaType\">\n <ng-container *ngSwitchCase=\"'image'\">\n <a\n *tuiItem\n (click)=\"onClick(banner)\"\n target=\"_blank\"\n [title]=\"banner.title\"\n [style.aspect-ratio]=\"aspectRatio\"\n [attr.href]=\"banner.url ? banner.url : null\"\n [style.background-image]=\"'url(' + banner.mediaFile + ')'\"\n class=\"size-full bg-[length:100%_100%]\"\n >\n </a>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngFor=\"let item of bannersListRef\">\n <div\n *tuiItem\n [style.aspect-ratio]=\"aspectRatio\"\n class=\"size-full overflow-hidden\"\n >\n <ng-container [ngTemplateOutlet]=\"item\"></ng-container>\n </div>\n </ng-container>\n </tui-carousel>\n\n <div\n *ngIf=\"navigateButton && duration && this.banners && this.bannersListRef.length + this.banners.length > 1\"\n tuiTheme=\"light\"\n class=\"flex items-center\"\n >\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"carousel.prev()\"\n class=\"!absolute left-2\"\n ></button>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"carousel.next()\"\n class=\"!absolute right-2\"\n ></button>\n </div>\n</ng-container>\n", styles: [":host{--tui-carousel-padding: 0;display:flex;position:relative}::ng-deep tui-carousel[resizable=true] .t-scroller,::ng-deep tui-carousel[resizable=true] .t-items{width:100%;height:100%}\n"] }]
3572
+ args: [{ selector: 'sc-banner', providers: [IntersectionObserverService], host: { ngSkipHydration: 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *tuiLet=\"banners$ | async\">\n <tui-carousel\n [duration]=\"duration\"\n #carousel\n [attr.resizable]=\"resizable\"\n class=\"size-full overflow-hidden rounded-xl bg-white\"\n [(index)]=\"currentBannerId\"\n >\n <ng-container *ngFor=\"let banner of banners; let index = index\">\n <ng-container [ngSwitch]=\"banner.mediaType\">\n <ng-container *ngSwitchCase=\"'image'\">\n <a\n *tuiItem\n (click)=\"onClick(banner)\"\n target=\"_blank\"\n [title]=\"banner.title\"\n [style.aspect-ratio]=\"aspectRatio\"\n [attr.href]=\"banner.url ? banner.url : null\"\n [style.background-image]=\"'url(' + banner.mediaFile + ')'\"\n class=\"size-full bg-[length:100%_100%]\"\n >\n </a>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngFor=\"let item of bannersListRef\">\n <div\n *tuiItem\n [style.aspect-ratio]=\"aspectRatio\"\n class=\"size-full overflow-hidden\"\n >\n <ng-container [ngTemplateOutlet]=\"item\"></ng-container>\n </div>\n </ng-container>\n </tui-carousel>\n\n <div\n *ngIf=\"navigateButton && duration && this.banners && this.bannersListRef.length + this.banners.length > 1\"\n tuiTheme=\"light\"\n class=\"flex items-center\"\n >\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"carousel.prev()\"\n class=\"!absolute left-2\"\n ></button>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"carousel.next()\"\n class=\"!absolute right-2\"\n ></button>\n </div>\n</ng-container>\n", styles: [":host{--tui-carousel-padding: 0;display:flex;position:relative}::ng-deep tui-carousel[resizable=true] .t-scroller,::ng-deep tui-carousel[resizable=true] .t-items{width:100%;height:100%}\n"] }]
3570
3573
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.ScBannerService }, { type: i3$2.IntersectionObserverService, decorators: [{
3571
3574
  type: Inject,
3572
3575
  args: [IntersectionObserverService]
@@ -5859,9 +5862,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
5859
5862
  class ScNewsCardComponent {
5860
5863
  constructor() {
5861
5864
  /**
5862
- * Событие клика по карточке новости.
5865
+ * Данные о новости.
5863
5866
  */
5864
- this.clickCardEvent = new EventEmitter();
5867
+ this.news = input.required();
5868
+ /**
5869
+ * Ссылка на страницу новости. Используется именно `href`, так как остановить событие клика для `routerLink` не вышло.
5870
+ */
5871
+ this.href = input.required();
5865
5872
  /**
5866
5873
  * Признак того, что этот компонент отображается на мобильном устройстве.
5867
5874
  */
@@ -5872,19 +5879,14 @@ class ScNewsCardComponent {
5872
5879
  this.imageHelper = inject(ScImageHelper);
5873
5880
  }
5874
5881
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScNewsCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5875
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ScNewsCardComponent, selector: "sc-news-card", inputs: { news: "news" }, outputs: { clickCardEvent: "clickCardEvent" }, host: { properties: { "class.is_mobile": "this.isMobile" } }, ngImport: i0, template: "<div\n (click)=\"clickCardEvent.emit(news)\"\n class=\"relative flex h-full cursor-pointer flex-col gap-2 overflow-hidden rounded-xl bg-white px-2 pb-4 pt-2 shadow-sc\"\n>\n <div\n [style.background-image]=\"news.image ? 'url(' + imageHelper.getMediaImageURI(news.image) + ')' : ''\"\n class=\"w-full grow rounded-xl bg-tui-base-02 bg-cover bg-center bg-no-repeat\"\n ></div>\n <div class=\"flex w-full flex-col justify-between gap-2 overflow-hidden bg-white align-baseline\">\n <p class=\"text-sm font-medium text-tui-text-02\">{{ news.createdAt | scFormatDate }}</p>\n\n <div class=\"line-clamp-3 font-extrabold\">{{ news.subject }}</div>\n </div>\n</div>\n", styles: [":host{display:block;height:20.5rem}:host.is_mobile{height:17rem}\n"], dependencies: [{ kind: "pipe", type: ScFormatDatePipe, name: "scFormatDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5882
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: ScNewsCardComponent, selector: "sc-news-card", inputs: { news: { classPropertyName: "news", publicName: "news", isSignal: true, isRequired: true, transformFunction: null }, href: { classPropertyName: "href", publicName: "href", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.is_mobile": "isMobile" } }, ngImport: i0, template: "<a\n [routerLink]=\"href()\"\n class=\"black-link relative flex h-full cursor-pointer flex-col gap-2 overflow-hidden rounded-xl bg-white px-2 pb-4 pt-2 shadow-sc\"\n>\n <div\n [style.background-image]=\"news().image ? 'url(' + imageHelper.getMediaImageURI(news().image!) + ')' : ''\"\n class=\"w-full grow rounded-xl bg-tui-base-02 bg-cover bg-center bg-no-repeat\"\n ></div>\n <div class=\"flex w-full flex-col justify-between gap-2 overflow-hidden bg-white align-baseline\">\n <p class=\"text-sm font-medium text-tui-text-02\">{{ news().createdAt | scFormatDate }}</p>\n\n <div class=\"line-clamp-3 font-extrabold\">{{ news().subject }}</div>\n </div>\n</a>\n", styles: [":host{display:block;height:20.5rem}:host.is_mobile{height:17rem}\n"], dependencies: [{ kind: "directive", type: i2$5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: ScFormatDatePipe, name: "scFormatDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5876
5883
  }
5877
5884
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScNewsCardComponent, decorators: [{
5878
5885
  type: Component,
5879
- args: [{ selector: 'sc-news-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n (click)=\"clickCardEvent.emit(news)\"\n class=\"relative flex h-full cursor-pointer flex-col gap-2 overflow-hidden rounded-xl bg-white px-2 pb-4 pt-2 shadow-sc\"\n>\n <div\n [style.background-image]=\"news.image ? 'url(' + imageHelper.getMediaImageURI(news.image) + ')' : ''\"\n class=\"w-full grow rounded-xl bg-tui-base-02 bg-cover bg-center bg-no-repeat\"\n ></div>\n <div class=\"flex w-full flex-col justify-between gap-2 overflow-hidden bg-white align-baseline\">\n <p class=\"text-sm font-medium text-tui-text-02\">{{ news.createdAt | scFormatDate }}</p>\n\n <div class=\"line-clamp-3 font-extrabold\">{{ news.subject }}</div>\n </div>\n</div>\n", styles: [":host{display:block;height:20.5rem}:host.is_mobile{height:17rem}\n"] }]
5880
- }], propDecorators: { news: [{
5881
- type: Input
5882
- }], clickCardEvent: [{
5883
- type: Output
5884
- }], isMobile: [{
5885
- type: HostBinding,
5886
- args: ['class.is_mobile']
5887
- }] } });
5886
+ args: [{ selector: 'sc-news-card', host: {
5887
+ '[class.is_mobile]': 'isMobile',
5888
+ }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<a\n [routerLink]=\"href()\"\n class=\"black-link relative flex h-full cursor-pointer flex-col gap-2 overflow-hidden rounded-xl bg-white px-2 pb-4 pt-2 shadow-sc\"\n>\n <div\n [style.background-image]=\"news().image ? 'url(' + imageHelper.getMediaImageURI(news().image!) + ')' : ''\"\n class=\"w-full grow rounded-xl bg-tui-base-02 bg-cover bg-center bg-no-repeat\"\n ></div>\n <div class=\"flex w-full flex-col justify-between gap-2 overflow-hidden bg-white align-baseline\">\n <p class=\"text-sm font-medium text-tui-text-02\">{{ news().createdAt | scFormatDate }}</p>\n\n <div class=\"line-clamp-3 font-extrabold\">{{ news().subject }}</div>\n </div>\n</a>\n", styles: [":host{display:block;height:20.5rem}:host.is_mobile{height:17rem}\n"] }]
5889
+ }] });
5888
5890
 
5889
5891
  /**
5890
5892
  * Компонент скелетона карточки новости.
@@ -6277,71 +6279,31 @@ class ScPreviewSampleComponent {
6277
6279
  /**
6278
6280
  * Индекс элемента в галерее.
6279
6281
  */
6280
- this.index = 0;
6282
+ this.index = model(0);
6281
6283
  /**
6282
- * {@link EventEmitter} изменения индекса элемента в галерее.
6284
+ * Длительность переключения карусели.
6283
6285
  */
6284
- this.indexChange = new EventEmitter();
6286
+ this.duration = input(5000);
6285
6287
  /**
6286
- * Признак, что необходимо отображать переключатели на карусели.
6288
+ * Объект данных товара.
6287
6289
  */
6288
- this.isShowCarouselSwitches = !inject(TUI_IS_MOBILE);
6290
+ this.sample = input.required();
6289
6291
  /**
6290
- * Признак, что при горизонтальном отображении компонент должен быть развёрнут.
6292
+ * Признак, что необходимо отображать переключатели на карусели.
6291
6293
  */
6292
- this.isReverse = false;
6294
+ this.isShowCarouselSwitches = input(!inject(TUI_IS_MOBILE));
6293
6295
  /**
6294
- * {@link Observable} изменения индекса элемента в галерее для автоматического переключения по таймеру.
6296
+ * Признак, что при горизонтальном отображении компонент должен быть развёрнут.
6295
6297
  */
6296
- this.indexChangeInterval = this.indexChange.pipe(startWith(0), filter(() => Boolean(this.sample.items && this.sample.items.length > 1)), switchMap(() => interval(5000).pipe()), map(() => this.sample.items?.length), filter(tuiIsPresent), tap((itemsLength) => {
6297
- this.onChangeIndex((this.index + 1) % itemsLength);
6298
- }));
6299
- }
6300
- /**
6301
- * Переключает на предыдущее изображение в галерее.
6302
- */
6303
- onPrevious() {
6304
- if (this.sample.items?.length) {
6305
- // eslint-disable-next-line unicorn/explicit-length-check
6306
- this.onChangeIndex((this.index || this.sample.items.length) - 1);
6307
- }
6308
- }
6309
- /**
6310
- * Переключает на следующее изображение в галерее.
6311
- */
6312
- onNext() {
6313
- if (this.sample.items?.length) {
6314
- this.onChangeIndex((this.index + 1) % this.sample.items.length);
6315
- }
6316
- }
6317
- /**
6318
- * Обработчик изменения индекса элемента в галерее.
6319
- *
6320
- * @param index Индекс элемента в галерее.
6321
- */
6322
- onChangeIndex(index) {
6323
- if (index !== this.index) {
6324
- this.index = index;
6325
- this.indexChange.emit(index);
6326
- }
6298
+ this.isReverse = input(false);
6327
6299
  }
6328
6300
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScPreviewSampleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6329
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ScPreviewSampleComponent, selector: "sc-preview-sample", inputs: { index: "index", sample: "sample", isShowCarouselSwitches: "isShowCarouselSwitches", isReverse: "isReverse" }, outputs: { indexChange: "indexChange" }, ngImport: i0, template: "<div\n *tuiLet=\"sample.items && sample.items.length > 1 as isShownSwitches\"\n class=\"mb-4 flex flex-col-reverse gap-4 md:mb-0 md:flex-row md:gap-8\"\n [class.md:!flex-row-reverse]=\"isReverse\"\n>\n <div class=\"flex max-w-96 flex-1 flex-col justify-center self-center md:max-w-none md:gap-4\">\n <div class=\"flex w-full flex-col gap-3 md:gap-4 md:px-8\">\n <div class=\"text-body-l-bold\">{{ sample.title }}</div>\n <div\n *ngIf=\"isShownSwitches\"\n class=\"flex gap-4\"\n >\n <tui-avatar\n [src]=\"item.buttonImageUrl\"\n [round]=\"false\"\n *ngFor=\"let item of sample.items; let itemIndex = index\"\n (tuiHoveredChange)=\"onChangeIndex(itemIndex)\"\n [class.active]=\"index === itemIndex\"\n ></tui-avatar>\n </div>\n <div\n *ngIf=\"sample.items\"\n class=\"text-body-m-bold\"\n >\n {{ sample.items[index].color }}\n </div>\n <div>{{ sample.description }}</div>\n <img\n *ngIf=\"sample.descriptionImageUrl\"\n [src]=\"sample.descriptionImageUrl\"\n alt=\"\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u044F \u043E\u0431\u0440\u0430\u0437\u0446\u0430 {{ sample.title }}\"\n class=\"w-fit\"\n />\n <div\n *ngIf=\"sample.items && sample.items[index].actions?.length\"\n class=\"flex flex-wrap gap-3 md:gap-4\"\n >\n <button\n *ngFor=\"let action of sample.items[index].actions\"\n tuiButton\n (click)=\"action.handler()\"\n [iconStart]=\"action.icon\"\n appearance=\"secondary\"\n >\n {{ action.label }}\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"relative h-[19em] flex-1 overflow-hidden rounded-xl shadow-tui-shadow md:h-96 lg:h-[28rem]\">\n <button\n *ngIf=\"isShownSwitches && isShowCarouselSwitches\"\n tuiIconButton\n (click)=\"onPrevious()\"\n iconStart=\"@tui.chevron-left\"\n appearance=\"icon\"\n class=\"!absolute left-0 top-1/2 z-10 ml-2 -translate-y-1/2\"\n ></button>\n\n <tui-carousel\n *tuiLet=\"indexChangeInterval | async\"\n [(index)]=\"index\"\n class=\"h-[19em] w-full md:h-96 lg:h-[28rem]\"\n >\n <ng-container *ngFor=\"let item of sample.items\">\n <div\n *tuiItem\n [style.backgroundImage]=\"'url(' + item.carouselItemImage + ')'\"\n class=\"h-[19em] w-full bg-cover bg-right md:h-96 lg:h-[28rem]\"\n ></div>\n </ng-container>\n </tui-carousel>\n <button\n *ngIf=\"isShownSwitches && isShowCarouselSwitches\"\n tuiIconButton\n (click)=\"onNext()\"\n iconStart=\"@tui.chevron-right\"\n appearance=\"icon\"\n class=\"!absolute right-0 top-1/2 z-10 mr-2 -translate-y-1/2\"\n ></button>\n </div>\n</div>\n", styles: [":host{--tui-carousel-padding: 0}tui-avatar.active{--tw-ring-color: var(--tui-background-accent-1);--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0, 0, 0, 0))}\n"], dependencies: [{ kind: "directive", type: i2$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.TuiItem, selector: "[tuiItem]" }, { kind: "component", type: i2$1.TuiCarouselComponent, selector: "tui-carousel", inputs: ["draggable", "itemsCount", "index"], outputs: ["indexChange", "shift"] }, { kind: "component", type: i2$1.TuiAvatar, selector: "tui-avatar,button[tuiAvatar],a[tuiAvatar]", inputs: ["size", "round", "src"] }, { kind: "directive", type: i7.TuiHovered, selector: "[tuiHoveredChange]", outputs: ["tuiHoveredChange"] }, { kind: "directive", type: i7.TuiLet, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "directive", type: i1$1.TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "pipe", type: i2$2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6301
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: ScPreviewSampleComponent, selector: "sc-preview-sample", inputs: { index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: false, transformFunction: null }, duration: { classPropertyName: "duration", publicName: "duration", isSignal: true, isRequired: false, transformFunction: null }, sample: { classPropertyName: "sample", publicName: "sample", isSignal: true, isRequired: true, transformFunction: null }, isShowCarouselSwitches: { classPropertyName: "isShowCarouselSwitches", publicName: "isShowCarouselSwitches", isSignal: true, isRequired: false, transformFunction: null }, isReverse: { classPropertyName: "isReverse", publicName: "isReverse", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { index: "indexChange" }, host: { attributes: { "ngSkipHydration": "true" } }, ngImport: i0, template: "<div\n *ngIf=\"sample() as sample\"\n class=\"mb-4 flex flex-col-reverse gap-4 md:mb-0 md:flex-row md:gap-8\"\n [class.md:!flex-row-reverse]=\"isReverse()\"\n>\n @let isShownSwitches = sample.items && sample.items.length > 1;\n\n <div class=\"flex max-w-96 flex-1 flex-col justify-center self-center md:max-w-none md:gap-4\">\n <div class=\"flex w-full flex-col gap-3 md:gap-4 md:px-8\">\n <div class=\"text-body-l-bold\">{{ sample.title }}</div>\n <div\n *ngIf=\"isShownSwitches\"\n class=\"flex gap-4\"\n >\n <tui-avatar\n [src]=\"item.buttonImageUrl\"\n [round]=\"false\"\n *ngFor=\"let item of sample.items; let itemIndex = index\"\n (tuiHoveredChange)=\"index.set(itemIndex)\"\n [class.active]=\"index() === itemIndex\"\n ></tui-avatar>\n </div>\n <div\n *ngIf=\"sample.items as items\"\n class=\"text-body-m-bold\"\n >\n {{ items[index()].color }}\n </div>\n <div>{{ sample.description }}</div>\n <img\n *ngIf=\"sample.descriptionImageUrl\"\n [src]=\"sample.descriptionImageUrl\"\n alt=\"\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u044F \u043E\u0431\u0440\u0430\u0437\u0446\u0430 {{ sample.title }}\"\n class=\"w-fit\"\n />\n <div\n *ngIf=\"sample.items && sample.items[index()].actions?.length\"\n class=\"flex flex-wrap gap-3 md:gap-4\"\n >\n <a\n *ngFor=\"let action of sample.items[index()].actions\"\n tuiButton\n [attr.href]=\"action.href\"\n (click)=\"action.handler ? $event.preventDefault() : {}; action.handler?.()\"\n [iconStart]=\"action.icon\"\n appearance=\"secondary\"\n >\n {{ action.label }}\n </a>\n </div>\n </div>\n </div>\n\n <div class=\"relative h-[19em] flex-1 overflow-hidden rounded-xl shadow-tui-shadow md:h-96 lg:h-[28rem]\">\n <button\n *ngIf=\"isShownSwitches && isShowCarouselSwitches()\"\n tuiIconButton\n (click)=\"carousel.prev()\"\n iconStart=\"@tui.chevron-left\"\n appearance=\"icon\"\n class=\"!absolute left-0 top-1/2 z-10 ml-2 -translate-y-1/2\"\n ></button>\n\n <tui-carousel\n #carousel\n [(index)]=\"index\"\n [duration]=\"duration()\"\n class=\"h-[19em] w-full md:h-96 lg:h-[28rem]\"\n >\n <ng-container *ngFor=\"let item of sample.items\">\n <div\n *tuiItem\n [style.backgroundImage]=\"'url(' + item.carouselItemImage + ')'\"\n class=\"h-[19em] w-full bg-cover bg-right md:h-96 lg:h-[28rem]\"\n ></div>\n </ng-container>\n </tui-carousel>\n <button\n *ngIf=\"isShownSwitches && isShowCarouselSwitches()\"\n tuiIconButton\n (click)=\"carousel.next()\"\n iconStart=\"@tui.chevron-right\"\n appearance=\"icon\"\n class=\"!absolute right-0 top-1/2 z-10 mr-2 -translate-y-1/2\"\n ></button>\n </div>\n</div>\n", styles: [":host{--tui-carousel-padding: 0}tui-avatar.active{--tw-ring-color: var(--tui-background-accent-1);--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0, 0, 0, 0))}\n"], dependencies: [{ kind: "directive", type: i2$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.TuiItem, selector: "[tuiItem]" }, { kind: "component", type: i2$1.TuiCarouselComponent, selector: "tui-carousel", inputs: ["draggable", "itemsCount", "index"], outputs: ["indexChange", "shift"] }, { kind: "component", type: i2$1.TuiAvatar, selector: "tui-avatar,button[tuiAvatar],a[tuiAvatar]", inputs: ["size", "round", "src"] }, { kind: "directive", type: i7.TuiHovered, selector: "[tuiHoveredChange]", outputs: ["tuiHoveredChange"] }, { kind: "directive", type: i1$1.TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6330
6302
  }
6331
6303
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScPreviewSampleComponent, decorators: [{
6332
6304
  type: Component,
6333
- args: [{ selector: 'sc-preview-sample', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n *tuiLet=\"sample.items && sample.items.length > 1 as isShownSwitches\"\n class=\"mb-4 flex flex-col-reverse gap-4 md:mb-0 md:flex-row md:gap-8\"\n [class.md:!flex-row-reverse]=\"isReverse\"\n>\n <div class=\"flex max-w-96 flex-1 flex-col justify-center self-center md:max-w-none md:gap-4\">\n <div class=\"flex w-full flex-col gap-3 md:gap-4 md:px-8\">\n <div class=\"text-body-l-bold\">{{ sample.title }}</div>\n <div\n *ngIf=\"isShownSwitches\"\n class=\"flex gap-4\"\n >\n <tui-avatar\n [src]=\"item.buttonImageUrl\"\n [round]=\"false\"\n *ngFor=\"let item of sample.items; let itemIndex = index\"\n (tuiHoveredChange)=\"onChangeIndex(itemIndex)\"\n [class.active]=\"index === itemIndex\"\n ></tui-avatar>\n </div>\n <div\n *ngIf=\"sample.items\"\n class=\"text-body-m-bold\"\n >\n {{ sample.items[index].color }}\n </div>\n <div>{{ sample.description }}</div>\n <img\n *ngIf=\"sample.descriptionImageUrl\"\n [src]=\"sample.descriptionImageUrl\"\n alt=\"\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u044F \u043E\u0431\u0440\u0430\u0437\u0446\u0430 {{ sample.title }}\"\n class=\"w-fit\"\n />\n <div\n *ngIf=\"sample.items && sample.items[index].actions?.length\"\n class=\"flex flex-wrap gap-3 md:gap-4\"\n >\n <button\n *ngFor=\"let action of sample.items[index].actions\"\n tuiButton\n (click)=\"action.handler()\"\n [iconStart]=\"action.icon\"\n appearance=\"secondary\"\n >\n {{ action.label }}\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"relative h-[19em] flex-1 overflow-hidden rounded-xl shadow-tui-shadow md:h-96 lg:h-[28rem]\">\n <button\n *ngIf=\"isShownSwitches && isShowCarouselSwitches\"\n tuiIconButton\n (click)=\"onPrevious()\"\n iconStart=\"@tui.chevron-left\"\n appearance=\"icon\"\n class=\"!absolute left-0 top-1/2 z-10 ml-2 -translate-y-1/2\"\n ></button>\n\n <tui-carousel\n *tuiLet=\"indexChangeInterval | async\"\n [(index)]=\"index\"\n class=\"h-[19em] w-full md:h-96 lg:h-[28rem]\"\n >\n <ng-container *ngFor=\"let item of sample.items\">\n <div\n *tuiItem\n [style.backgroundImage]=\"'url(' + item.carouselItemImage + ')'\"\n class=\"h-[19em] w-full bg-cover bg-right md:h-96 lg:h-[28rem]\"\n ></div>\n </ng-container>\n </tui-carousel>\n <button\n *ngIf=\"isShownSwitches && isShowCarouselSwitches\"\n tuiIconButton\n (click)=\"onNext()\"\n iconStart=\"@tui.chevron-right\"\n appearance=\"icon\"\n class=\"!absolute right-0 top-1/2 z-10 mr-2 -translate-y-1/2\"\n ></button>\n </div>\n</div>\n", styles: [":host{--tui-carousel-padding: 0}tui-avatar.active{--tw-ring-color: var(--tui-background-accent-1);--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0, 0, 0, 0))}\n"] }]
6334
- }], propDecorators: { index: [{
6335
- type: Input
6336
- }], indexChange: [{
6337
- type: Output
6338
- }], sample: [{
6339
- type: Input
6340
- }], isShowCarouselSwitches: [{
6341
- type: Input
6342
- }], isReverse: [{
6343
- type: Input
6344
- }] } });
6305
+ args: [{ selector: 'sc-preview-sample', host: { ngSkipHydration: 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n *ngIf=\"sample() as sample\"\n class=\"mb-4 flex flex-col-reverse gap-4 md:mb-0 md:flex-row md:gap-8\"\n [class.md:!flex-row-reverse]=\"isReverse()\"\n>\n @let isShownSwitches = sample.items && sample.items.length > 1;\n\n <div class=\"flex max-w-96 flex-1 flex-col justify-center self-center md:max-w-none md:gap-4\">\n <div class=\"flex w-full flex-col gap-3 md:gap-4 md:px-8\">\n <div class=\"text-body-l-bold\">{{ sample.title }}</div>\n <div\n *ngIf=\"isShownSwitches\"\n class=\"flex gap-4\"\n >\n <tui-avatar\n [src]=\"item.buttonImageUrl\"\n [round]=\"false\"\n *ngFor=\"let item of sample.items; let itemIndex = index\"\n (tuiHoveredChange)=\"index.set(itemIndex)\"\n [class.active]=\"index() === itemIndex\"\n ></tui-avatar>\n </div>\n <div\n *ngIf=\"sample.items as items\"\n class=\"text-body-m-bold\"\n >\n {{ items[index()].color }}\n </div>\n <div>{{ sample.description }}</div>\n <img\n *ngIf=\"sample.descriptionImageUrl\"\n [src]=\"sample.descriptionImageUrl\"\n alt=\"\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u044F \u043E\u0431\u0440\u0430\u0437\u0446\u0430 {{ sample.title }}\"\n class=\"w-fit\"\n />\n <div\n *ngIf=\"sample.items && sample.items[index()].actions?.length\"\n class=\"flex flex-wrap gap-3 md:gap-4\"\n >\n <a\n *ngFor=\"let action of sample.items[index()].actions\"\n tuiButton\n [attr.href]=\"action.href\"\n (click)=\"action.handler ? $event.preventDefault() : {}; action.handler?.()\"\n [iconStart]=\"action.icon\"\n appearance=\"secondary\"\n >\n {{ action.label }}\n </a>\n </div>\n </div>\n </div>\n\n <div class=\"relative h-[19em] flex-1 overflow-hidden rounded-xl shadow-tui-shadow md:h-96 lg:h-[28rem]\">\n <button\n *ngIf=\"isShownSwitches && isShowCarouselSwitches()\"\n tuiIconButton\n (click)=\"carousel.prev()\"\n iconStart=\"@tui.chevron-left\"\n appearance=\"icon\"\n class=\"!absolute left-0 top-1/2 z-10 ml-2 -translate-y-1/2\"\n ></button>\n\n <tui-carousel\n #carousel\n [(index)]=\"index\"\n [duration]=\"duration()\"\n class=\"h-[19em] w-full md:h-96 lg:h-[28rem]\"\n >\n <ng-container *ngFor=\"let item of sample.items\">\n <div\n *tuiItem\n [style.backgroundImage]=\"'url(' + item.carouselItemImage + ')'\"\n class=\"h-[19em] w-full bg-cover bg-right md:h-96 lg:h-[28rem]\"\n ></div>\n </ng-container>\n </tui-carousel>\n <button\n *ngIf=\"isShownSwitches && isShowCarouselSwitches()\"\n tuiIconButton\n (click)=\"carousel.next()\"\n iconStart=\"@tui.chevron-right\"\n appearance=\"icon\"\n class=\"!absolute right-0 top-1/2 z-10 mr-2 -translate-y-1/2\"\n ></button>\n </div>\n</div>\n", styles: [":host{--tui-carousel-padding: 0}tui-avatar.active{--tw-ring-color: var(--tui-background-accent-1);--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0, 0, 0, 0))}\n"] }]
6306
+ }] });
6345
6307
 
6346
6308
  /**
6347
6309
  * Компонент представления москитной сетки.
@@ -6372,6 +6334,10 @@ class ScPreviewSamplesMosquitoComponent {
6372
6334
  * Событие, которое происходит при нажатии на кнопку "Назад в Конфигуратор".
6373
6335
  */
6374
6336
  this.openConfiguratorClick = output();
6337
+ /**
6338
+ * Ссылка на страницу конфигуратора.
6339
+ */
6340
+ this.configuratorPageUrl = input();
6375
6341
  /**
6376
6342
  * Событие, которое происходит при нажатии на кнопку "Консультация".
6377
6343
  */
@@ -6386,11 +6352,11 @@ class ScPreviewSamplesMosquitoComponent {
6386
6352
  this.isShowCarouselSwitches = input(!inject(TUI_IS_MOBILE));
6387
6353
  }
6388
6354
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScPreviewSamplesMosquitoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6389
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ScPreviewSamplesMosquitoComponent, isStandalone: true, selector: "sc-preview-samples-mosquito", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, autoSlideIntervale: { classPropertyName: "autoSlideIntervale", publicName: "autoSlideIntervale", isSignal: true, isRequired: false, transformFunction: null }, isShowCarouselSwitches: { classPropertyName: "isShowCarouselSwitches", publicName: "isShowCarouselSwitches", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openConfiguratorClick: "openConfiguratorClick", openConsultationClick: "openConsultationClick" }, ngImport: i0, template: "@let descriptions = config().descriptions;\n@let colors = config().color;\n@let netTypes = config().netType;\n\n<!-- \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440 \u0441 \u0441\u0435\u0442\u043A\u043E\u0439. -->\n<div class=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <!-- \u041B\u0435\u0432\u0430\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0430 \u0441 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0435\u0439. -->\n <div class=\"flex flex-col gap-4\">\n <!-- \u041A\u043D\u043E\u043F\u043A\u0438 \u0432\u044B\u0431\u043E\u0440\u0430 \u0442\u0438\u043F\u0430 \u0441\u0435\u0442\u043A\u0438. -->\n <div class=\"flex flex-wrap gap-4\">\n <button\n *ngFor=\"let item of netTypes; let itemIndex = index\"\n tuiCardLarge\n tuiHeader\n tuiSurface=\"floating\"\n type=\"button\"\n (click)=\"netTypeIndex.set(itemIndex)\"\n [class.active]=\"netTypeIndex() === itemIndex\"\n class=\"h-12 !items-center gap-2 !rounded-xl !px-4 !py-0\"\n >\n <img\n [src]=\"config().icons[item]\"\n [alt]=\"descriptions['netType'][item]\"\n class=\"size-8\"\n />\n <div>{{ descriptions['netType'][item] }}</div>\n </button>\n </div>\n\n <!-- \u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0442\u0438\u043F\u0430 \u0441\u0435\u0442\u043A\u0438. -->\n <div class=\"text-body-l-bold\">\u0421\u0435\u0442\u043A\u0430 {{ descriptions['netType'][netTypeIndexSelected()] }}</div>\n {{ config().subtitles[netTypeIndexSelected()] }}\n\n <!-- \u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0435 \u0431\u0435\u0439\u0434\u0436\u0438. -->\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ colors.length }}\n </tui-badge>\n - \u043A\u043E\u043B\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0446\u0432\u0435\u0442\u043E\u0432 \u043F\u0440\u043E\u0444\u0438\u043B\u044F\n </div>\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ netTypes.length }}\n </tui-badge>\n - \u043A\u043E\u043B\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u0438\u043F\u043E\u0432 \u0441\u0435\u0442\u043E\u043A\n </div>\n\n <!-- \u0420\u0430\u0437\u043C\u0435\u0440\u044B \u0441\u0435\u0442\u043E\u043A. -->\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-height-arrow\" />\n \u0412\u044B\u0441\u043E\u0442\u0430 \u0441\u0435\u0442\u043E\u043A \u043E\u0442 {{ config().minHeight }} \u0434\u043E {{ config().maxHeights[netTypeIndexSelected()] }} \u043C\u043C\n </div>\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-width-arrow\" />\n \u0428\u0438\u0440\u0438\u043D\u0430 \u0441\u0435\u0442\u043E\u043A \u043E\u0442 {{ config().minWidth }} \u0434\u043E {{ config().maxWidths[netTypeIndexSelected()] }} \u043C\u043C\n </div>\n\n <!-- \u0422\u0435\u0433\u0438 \u0445\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A. -->\n <div class=\"flex flex-wrap gap-2\">\n <button\n *ngFor=\"let tag of config().tags[netTypeIndexSelected()]\"\n tuiChip\n appearance=\"neutral\"\n >\n {{ tag }}\n </button>\n </div>\n\n <!-- \u0412\u044B\u0431\u043E\u0440 \u0446\u0432\u0435\u0442\u0430 \u043F\u0440\u043E\u0444\u0438\u043B\u044F. -->\n <div class=\"flex gap-4\">\n <img\n *ngFor=\"let image of config().color; let itemIndex = index\"\n [src]=\"config().colorsIcons[image]\"\n [alt]=\"descriptions['color'][itemIndex]\"\n (tuiHoveredChange)=\"colorIndex.set(itemIndex)\"\n [class.active]=\"colorIndex() === itemIndex\"\n class=\"size-11 rounded-xl\"\n />\n </div>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. -->\n <div class=\"flex gap-2\">\n <button\n tuiButton\n (click)=\"openConfiguratorClick.emit()\"\n iconStart=\"@tui.sliders-horizontal\"\n >\n \u0421\u0434\u0435\u043B\u0430\u0442\u044C \u0440\u0430\u0441\u0447\u0435\u0442\n </button>\n\n <button\n tuiButton\n (click)=\"openConsultationClick.emit()\"\n iconStart=\"@tui.messages-square\"\n >\n \u041A\u043E\u043D\u0441\u0443\u043B\u044C\u0442\u0430\u0446\u0438\u044F\n </button>\n </div>\n </div>\n\n <!-- \u041F\u0440\u0430\u0432\u0430\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0430 \u0441 \u043A\u0430\u0440\u0443\u0441\u0435\u043B\u044C\u044E \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439. -->\n <div class=\"relative -order-1 h-[19em] flex-1 overflow-hidden rounded-xl shadow-tui-shadow md:h-96 lg:order-2 lg:h-[28rem]\">\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n (click)=\"carousel.prev()\"\n appearance=\"icon\"\n class=\"!absolute left-0 top-1/2 z-10 ml-2 -translate-y-1/2\"\n ></button>\n\n <tui-carousel\n #carousel\n [duration]=\"autoSlideIntervale()\"\n class=\"h-[19em] w-full md:h-96 lg:h-[28rem]\"\n >\n @for (item of config().imagePreviewsByColor[colorIndexSelected()]; track $index) {\n <div\n *tuiItem\n [style.backgroundImage]=\"'url(' + item + ')'\"\n class=\"h-[19em] w-full bg-cover bg-right md:h-96 lg:h-[28rem]\"\n ></div>\n }\n </tui-carousel>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n (click)=\"carousel.next()\"\n appearance=\"icon\"\n class=\"!absolute right-0 top-1/2 z-10 mr-2 -translate-y-1/2\"\n ></button>\n </div>\n</div>\n", styles: [":host{--tui-carousel-padding: 0}img.active{--tw-ring-color: var(--tui-background-accent-1);--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0, 0, 0, 0))}button[tuicardlarge]{border:solid 2px white}button[tuicardlarge].active{border-color:var(--tui-background-accent-1)}\n"], dependencies: [{ kind: "directive", type: i1$2.TuiItem, selector: "[tuiItem]" }, { kind: "component", type: i2$1.TuiCarouselComponent, selector: "tui-carousel", inputs: ["draggable", "itemsCount", "index"], outputs: ["indexChange", "shift"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "directive", type: TuiChip, selector: "tui-chip,[tuiChip]", inputs: ["size"] }, { kind: "directive", type: TuiBadge, selector: "tui-badge,[tuiBadge]", inputs: ["size"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: TuiHovered, selector: "[tuiHoveredChange]", outputs: ["tuiHoveredChange"] }, { kind: "directive", type: TuiCardLarge, selector: "[tuiCardLarge]", inputs: ["tuiCardLarge"] }, { kind: "directive", type: TuiHeader, selector: "[tuiHeader]", inputs: ["tuiHeader"] }, { kind: "directive", type: TuiSurface, selector: "[tuiSurface]", inputs: ["tuiSurface"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6355
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ScPreviewSamplesMosquitoComponent, isStandalone: true, selector: "sc-preview-samples-mosquito", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, configuratorPageUrl: { classPropertyName: "configuratorPageUrl", publicName: "configuratorPageUrl", isSignal: true, isRequired: false, transformFunction: null }, autoSlideIntervale: { classPropertyName: "autoSlideIntervale", publicName: "autoSlideIntervale", isSignal: true, isRequired: false, transformFunction: null }, isShowCarouselSwitches: { classPropertyName: "isShowCarouselSwitches", publicName: "isShowCarouselSwitches", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openConfiguratorClick: "openConfiguratorClick", openConsultationClick: "openConsultationClick" }, ngImport: i0, template: "@let descriptions = config().descriptions;\n@let colors = config().color;\n@let netTypes = config().netType;\n\n<!-- \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440 \u0441 \u0441\u0435\u0442\u043A\u043E\u0439. -->\n<div class=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <!-- \u041B\u0435\u0432\u0430\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0430 \u0441 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0435\u0439. -->\n <div class=\"flex flex-col gap-4\">\n <!-- \u041A\u043D\u043E\u043F\u043A\u0438 \u0432\u044B\u0431\u043E\u0440\u0430 \u0442\u0438\u043F\u0430 \u0441\u0435\u0442\u043A\u0438. -->\n <div class=\"flex flex-wrap gap-4\">\n <button\n *ngFor=\"let item of netTypes; let itemIndex = index\"\n tuiCardLarge\n tuiHeader\n tuiSurface=\"floating\"\n type=\"button\"\n (click)=\"netTypeIndex.set(itemIndex)\"\n [class.active]=\"netTypeIndex() === itemIndex\"\n class=\"h-12 !items-center gap-2 !rounded-xl !px-4 !py-0\"\n >\n <img\n [src]=\"config().icons[item]\"\n [alt]=\"descriptions['netType'][item]\"\n class=\"size-8\"\n />\n <div>{{ descriptions['netType'][item] }}</div>\n </button>\n </div>\n\n <!-- \u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0442\u0438\u043F\u0430 \u0441\u0435\u0442\u043A\u0438. -->\n <div class=\"text-body-l-bold\">\u0421\u0435\u0442\u043A\u0430 {{ descriptions['netType'][netTypeIndexSelected()] }}</div>\n {{ config().subtitles[netTypeIndexSelected()] }}\n\n <!-- \u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0435 \u0431\u0435\u0439\u0434\u0436\u0438. -->\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ colors.length }}\n </tui-badge>\n - \u043A\u043E\u043B\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0446\u0432\u0435\u0442\u043E\u0432 \u043F\u0440\u043E\u0444\u0438\u043B\u044F\n </div>\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ netTypes.length }}\n </tui-badge>\n - \u043A\u043E\u043B\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u0438\u043F\u043E\u0432 \u0441\u0435\u0442\u043E\u043A\n </div>\n\n <!-- \u0420\u0430\u0437\u043C\u0435\u0440\u044B \u0441\u0435\u0442\u043E\u043A. -->\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-height-arrow\" />\n \u0412\u044B\u0441\u043E\u0442\u0430 \u0441\u0435\u0442\u043E\u043A \u043E\u0442 {{ config().minHeight }} \u0434\u043E {{ config().maxHeights[netTypeIndexSelected()] }} \u043C\u043C\n </div>\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-width-arrow\" />\n \u0428\u0438\u0440\u0438\u043D\u0430 \u0441\u0435\u0442\u043E\u043A \u043E\u0442 {{ config().minWidth }} \u0434\u043E {{ config().maxWidths[netTypeIndexSelected()] }} \u043C\u043C\n </div>\n\n <!-- \u0422\u0435\u0433\u0438 \u0445\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A. -->\n <div class=\"flex flex-wrap gap-2\">\n <button\n *ngFor=\"let tag of config().tags[netTypeIndexSelected()]\"\n tuiChip\n appearance=\"neutral\"\n >\n {{ tag }}\n </button>\n </div>\n\n <!-- \u0412\u044B\u0431\u043E\u0440 \u0446\u0432\u0435\u0442\u0430 \u043F\u0440\u043E\u0444\u0438\u043B\u044F. -->\n <div class=\"flex gap-4\">\n <img\n *ngFor=\"let image of config().color; let itemIndex = index\"\n [src]=\"config().colorsIcons[image]\"\n [alt]=\"descriptions['color'][itemIndex]\"\n (tuiHoveredChange)=\"colorIndex.set(itemIndex)\"\n [class.active]=\"colorIndex() === itemIndex\"\n class=\"size-11 rounded-xl\"\n />\n </div>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. -->\n <div class=\"flex gap-2\">\n <a\n tuiButton\n [attr.href]=\"configuratorPageUrl()\"\n (click)=\"$event.preventDefault(); openConfiguratorClick.emit()\"\n iconStart=\"@tui.sliders-horizontal\"\n >\n \u0421\u0434\u0435\u043B\u0430\u0442\u044C \u0440\u0430\u0441\u0447\u0435\u0442\n </a>\n\n <button\n tuiButton\n (click)=\"openConsultationClick.emit()\"\n iconStart=\"@tui.messages-square\"\n >\n \u041A\u043E\u043D\u0441\u0443\u043B\u044C\u0442\u0430\u0446\u0438\u044F\n </button>\n </div>\n </div>\n\n <!-- \u041F\u0440\u0430\u0432\u0430\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0430 \u0441 \u043A\u0430\u0440\u0443\u0441\u0435\u043B\u044C\u044E \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439. -->\n <div class=\"relative -order-1 h-[19em] flex-1 overflow-hidden rounded-xl shadow-tui-shadow md:h-96 lg:order-2 lg:h-[28rem]\">\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n (click)=\"carousel.prev()\"\n appearance=\"icon\"\n class=\"!absolute left-0 top-1/2 z-10 ml-2 -translate-y-1/2\"\n ></button>\n\n <tui-carousel\n #carousel\n [duration]=\"autoSlideIntervale()\"\n class=\"h-[19em] w-full md:h-96 lg:h-[28rem]\"\n >\n @for (item of config().imagePreviewsByColor[colorIndexSelected()]; track $index) {\n <div\n *tuiItem\n [style.backgroundImage]=\"'url(' + item + ')'\"\n class=\"h-[19em] w-full bg-cover bg-right md:h-96 lg:h-[28rem]\"\n ></div>\n }\n </tui-carousel>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n (click)=\"carousel.next()\"\n appearance=\"icon\"\n class=\"!absolute right-0 top-1/2 z-10 mr-2 -translate-y-1/2\"\n ></button>\n </div>\n</div>\n", styles: [":host{--tui-carousel-padding: 0}img.active{--tw-ring-color: var(--tui-background-accent-1);--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0, 0, 0, 0))}button[tuicardlarge]{border:solid 2px white}button[tuicardlarge].active{border-color:var(--tui-background-accent-1)}\n"], dependencies: [{ kind: "directive", type: i1$2.TuiItem, selector: "[tuiItem]" }, { kind: "component", type: i2$1.TuiCarouselComponent, selector: "tui-carousel", inputs: ["draggable", "itemsCount", "index"], outputs: ["indexChange", "shift"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "directive", type: TuiChip, selector: "tui-chip,[tuiChip]", inputs: ["size"] }, { kind: "directive", type: TuiBadge, selector: "tui-badge,[tuiBadge]", inputs: ["size"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: TuiHovered, selector: "[tuiHoveredChange]", outputs: ["tuiHoveredChange"] }, { kind: "directive", type: TuiCardLarge, selector: "[tuiCardLarge]", inputs: ["tuiCardLarge"] }, { kind: "directive", type: TuiHeader, selector: "[tuiHeader]", inputs: ["tuiHeader"] }, { kind: "directive", type: TuiSurface, selector: "[tuiSurface]", inputs: ["tuiSurface"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6390
6356
  }
6391
6357
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScPreviewSamplesMosquitoComponent, decorators: [{
6392
6358
  type: Component,
6393
- args: [{ standalone: true, selector: 'sc-preview-samples-mosquito', imports: [TuiCarousel, TuiButton, TuiIcon, TuiChip, TuiBadge, NgFor, TuiAppearance, TuiHovered, TuiCardLarge, TuiHeader, TuiIcon, TuiSurface], changeDetection: ChangeDetectionStrategy.OnPush, template: "@let descriptions = config().descriptions;\n@let colors = config().color;\n@let netTypes = config().netType;\n\n<!-- \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440 \u0441 \u0441\u0435\u0442\u043A\u043E\u0439. -->\n<div class=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <!-- \u041B\u0435\u0432\u0430\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0430 \u0441 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0435\u0439. -->\n <div class=\"flex flex-col gap-4\">\n <!-- \u041A\u043D\u043E\u043F\u043A\u0438 \u0432\u044B\u0431\u043E\u0440\u0430 \u0442\u0438\u043F\u0430 \u0441\u0435\u0442\u043A\u0438. -->\n <div class=\"flex flex-wrap gap-4\">\n <button\n *ngFor=\"let item of netTypes; let itemIndex = index\"\n tuiCardLarge\n tuiHeader\n tuiSurface=\"floating\"\n type=\"button\"\n (click)=\"netTypeIndex.set(itemIndex)\"\n [class.active]=\"netTypeIndex() === itemIndex\"\n class=\"h-12 !items-center gap-2 !rounded-xl !px-4 !py-0\"\n >\n <img\n [src]=\"config().icons[item]\"\n [alt]=\"descriptions['netType'][item]\"\n class=\"size-8\"\n />\n <div>{{ descriptions['netType'][item] }}</div>\n </button>\n </div>\n\n <!-- \u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0442\u0438\u043F\u0430 \u0441\u0435\u0442\u043A\u0438. -->\n <div class=\"text-body-l-bold\">\u0421\u0435\u0442\u043A\u0430 {{ descriptions['netType'][netTypeIndexSelected()] }}</div>\n {{ config().subtitles[netTypeIndexSelected()] }}\n\n <!-- \u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0435 \u0431\u0435\u0439\u0434\u0436\u0438. -->\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ colors.length }}\n </tui-badge>\n - \u043A\u043E\u043B\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0446\u0432\u0435\u0442\u043E\u0432 \u043F\u0440\u043E\u0444\u0438\u043B\u044F\n </div>\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ netTypes.length }}\n </tui-badge>\n - \u043A\u043E\u043B\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u0438\u043F\u043E\u0432 \u0441\u0435\u0442\u043E\u043A\n </div>\n\n <!-- \u0420\u0430\u0437\u043C\u0435\u0440\u044B \u0441\u0435\u0442\u043E\u043A. -->\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-height-arrow\" />\n \u0412\u044B\u0441\u043E\u0442\u0430 \u0441\u0435\u0442\u043E\u043A \u043E\u0442 {{ config().minHeight }} \u0434\u043E {{ config().maxHeights[netTypeIndexSelected()] }} \u043C\u043C\n </div>\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-width-arrow\" />\n \u0428\u0438\u0440\u0438\u043D\u0430 \u0441\u0435\u0442\u043E\u043A \u043E\u0442 {{ config().minWidth }} \u0434\u043E {{ config().maxWidths[netTypeIndexSelected()] }} \u043C\u043C\n </div>\n\n <!-- \u0422\u0435\u0433\u0438 \u0445\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A. -->\n <div class=\"flex flex-wrap gap-2\">\n <button\n *ngFor=\"let tag of config().tags[netTypeIndexSelected()]\"\n tuiChip\n appearance=\"neutral\"\n >\n {{ tag }}\n </button>\n </div>\n\n <!-- \u0412\u044B\u0431\u043E\u0440 \u0446\u0432\u0435\u0442\u0430 \u043F\u0440\u043E\u0444\u0438\u043B\u044F. -->\n <div class=\"flex gap-4\">\n <img\n *ngFor=\"let image of config().color; let itemIndex = index\"\n [src]=\"config().colorsIcons[image]\"\n [alt]=\"descriptions['color'][itemIndex]\"\n (tuiHoveredChange)=\"colorIndex.set(itemIndex)\"\n [class.active]=\"colorIndex() === itemIndex\"\n class=\"size-11 rounded-xl\"\n />\n </div>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. -->\n <div class=\"flex gap-2\">\n <button\n tuiButton\n (click)=\"openConfiguratorClick.emit()\"\n iconStart=\"@tui.sliders-horizontal\"\n >\n \u0421\u0434\u0435\u043B\u0430\u0442\u044C \u0440\u0430\u0441\u0447\u0435\u0442\n </button>\n\n <button\n tuiButton\n (click)=\"openConsultationClick.emit()\"\n iconStart=\"@tui.messages-square\"\n >\n \u041A\u043E\u043D\u0441\u0443\u043B\u044C\u0442\u0430\u0446\u0438\u044F\n </button>\n </div>\n </div>\n\n <!-- \u041F\u0440\u0430\u0432\u0430\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0430 \u0441 \u043A\u0430\u0440\u0443\u0441\u0435\u043B\u044C\u044E \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439. -->\n <div class=\"relative -order-1 h-[19em] flex-1 overflow-hidden rounded-xl shadow-tui-shadow md:h-96 lg:order-2 lg:h-[28rem]\">\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n (click)=\"carousel.prev()\"\n appearance=\"icon\"\n class=\"!absolute left-0 top-1/2 z-10 ml-2 -translate-y-1/2\"\n ></button>\n\n <tui-carousel\n #carousel\n [duration]=\"autoSlideIntervale()\"\n class=\"h-[19em] w-full md:h-96 lg:h-[28rem]\"\n >\n @for (item of config().imagePreviewsByColor[colorIndexSelected()]; track $index) {\n <div\n *tuiItem\n [style.backgroundImage]=\"'url(' + item + ')'\"\n class=\"h-[19em] w-full bg-cover bg-right md:h-96 lg:h-[28rem]\"\n ></div>\n }\n </tui-carousel>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n (click)=\"carousel.next()\"\n appearance=\"icon\"\n class=\"!absolute right-0 top-1/2 z-10 mr-2 -translate-y-1/2\"\n ></button>\n </div>\n</div>\n", styles: [":host{--tui-carousel-padding: 0}img.active{--tw-ring-color: var(--tui-background-accent-1);--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0, 0, 0, 0))}button[tuicardlarge]{border:solid 2px white}button[tuicardlarge].active{border-color:var(--tui-background-accent-1)}\n"] }]
6359
+ args: [{ standalone: true, selector: 'sc-preview-samples-mosquito', imports: [TuiCarousel, TuiButton, TuiIcon, TuiChip, TuiBadge, NgFor, TuiAppearance, TuiHovered, TuiCardLarge, TuiHeader, TuiIcon, TuiSurface], changeDetection: ChangeDetectionStrategy.OnPush, template: "@let descriptions = config().descriptions;\n@let colors = config().color;\n@let netTypes = config().netType;\n\n<!-- \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440 \u0441 \u0441\u0435\u0442\u043A\u043E\u0439. -->\n<div class=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <!-- \u041B\u0435\u0432\u0430\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0430 \u0441 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0435\u0439. -->\n <div class=\"flex flex-col gap-4\">\n <!-- \u041A\u043D\u043E\u043F\u043A\u0438 \u0432\u044B\u0431\u043E\u0440\u0430 \u0442\u0438\u043F\u0430 \u0441\u0435\u0442\u043A\u0438. -->\n <div class=\"flex flex-wrap gap-4\">\n <button\n *ngFor=\"let item of netTypes; let itemIndex = index\"\n tuiCardLarge\n tuiHeader\n tuiSurface=\"floating\"\n type=\"button\"\n (click)=\"netTypeIndex.set(itemIndex)\"\n [class.active]=\"netTypeIndex() === itemIndex\"\n class=\"h-12 !items-center gap-2 !rounded-xl !px-4 !py-0\"\n >\n <img\n [src]=\"config().icons[item]\"\n [alt]=\"descriptions['netType'][item]\"\n class=\"size-8\"\n />\n <div>{{ descriptions['netType'][item] }}</div>\n </button>\n </div>\n\n <!-- \u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0442\u0438\u043F\u0430 \u0441\u0435\u0442\u043A\u0438. -->\n <div class=\"text-body-l-bold\">\u0421\u0435\u0442\u043A\u0430 {{ descriptions['netType'][netTypeIndexSelected()] }}</div>\n {{ config().subtitles[netTypeIndexSelected()] }}\n\n <!-- \u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0435 \u0431\u0435\u0439\u0434\u0436\u0438. -->\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ colors.length }}\n </tui-badge>\n - \u043A\u043E\u043B\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0446\u0432\u0435\u0442\u043E\u0432 \u043F\u0440\u043E\u0444\u0438\u043B\u044F\n </div>\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ netTypes.length }}\n </tui-badge>\n - \u043A\u043E\u043B\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u0438\u043F\u043E\u0432 \u0441\u0435\u0442\u043E\u043A\n </div>\n\n <!-- \u0420\u0430\u0437\u043C\u0435\u0440\u044B \u0441\u0435\u0442\u043E\u043A. -->\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-height-arrow\" />\n \u0412\u044B\u0441\u043E\u0442\u0430 \u0441\u0435\u0442\u043E\u043A \u043E\u0442 {{ config().minHeight }} \u0434\u043E {{ config().maxHeights[netTypeIndexSelected()] }} \u043C\u043C\n </div>\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-width-arrow\" />\n \u0428\u0438\u0440\u0438\u043D\u0430 \u0441\u0435\u0442\u043E\u043A \u043E\u0442 {{ config().minWidth }} \u0434\u043E {{ config().maxWidths[netTypeIndexSelected()] }} \u043C\u043C\n </div>\n\n <!-- \u0422\u0435\u0433\u0438 \u0445\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A. -->\n <div class=\"flex flex-wrap gap-2\">\n <button\n *ngFor=\"let tag of config().tags[netTypeIndexSelected()]\"\n tuiChip\n appearance=\"neutral\"\n >\n {{ tag }}\n </button>\n </div>\n\n <!-- \u0412\u044B\u0431\u043E\u0440 \u0446\u0432\u0435\u0442\u0430 \u043F\u0440\u043E\u0444\u0438\u043B\u044F. -->\n <div class=\"flex gap-4\">\n <img\n *ngFor=\"let image of config().color; let itemIndex = index\"\n [src]=\"config().colorsIcons[image]\"\n [alt]=\"descriptions['color'][itemIndex]\"\n (tuiHoveredChange)=\"colorIndex.set(itemIndex)\"\n [class.active]=\"colorIndex() === itemIndex\"\n class=\"size-11 rounded-xl\"\n />\n </div>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. -->\n <div class=\"flex gap-2\">\n <a\n tuiButton\n [attr.href]=\"configuratorPageUrl()\"\n (click)=\"$event.preventDefault(); openConfiguratorClick.emit()\"\n iconStart=\"@tui.sliders-horizontal\"\n >\n \u0421\u0434\u0435\u043B\u0430\u0442\u044C \u0440\u0430\u0441\u0447\u0435\u0442\n </a>\n\n <button\n tuiButton\n (click)=\"openConsultationClick.emit()\"\n iconStart=\"@tui.messages-square\"\n >\n \u041A\u043E\u043D\u0441\u0443\u043B\u044C\u0442\u0430\u0446\u0438\u044F\n </button>\n </div>\n </div>\n\n <!-- \u041F\u0440\u0430\u0432\u0430\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0430 \u0441 \u043A\u0430\u0440\u0443\u0441\u0435\u043B\u044C\u044E \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439. -->\n <div class=\"relative -order-1 h-[19em] flex-1 overflow-hidden rounded-xl shadow-tui-shadow md:h-96 lg:order-2 lg:h-[28rem]\">\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n (click)=\"carousel.prev()\"\n appearance=\"icon\"\n class=\"!absolute left-0 top-1/2 z-10 ml-2 -translate-y-1/2\"\n ></button>\n\n <tui-carousel\n #carousel\n [duration]=\"autoSlideIntervale()\"\n class=\"h-[19em] w-full md:h-96 lg:h-[28rem]\"\n >\n @for (item of config().imagePreviewsByColor[colorIndexSelected()]; track $index) {\n <div\n *tuiItem\n [style.backgroundImage]=\"'url(' + item + ')'\"\n class=\"h-[19em] w-full bg-cover bg-right md:h-96 lg:h-[28rem]\"\n ></div>\n }\n </tui-carousel>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n (click)=\"carousel.next()\"\n appearance=\"icon\"\n class=\"!absolute right-0 top-1/2 z-10 mr-2 -translate-y-1/2\"\n ></button>\n </div>\n</div>\n", styles: [":host{--tui-carousel-padding: 0}img.active{--tw-ring-color: var(--tui-background-accent-1);--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0, 0, 0, 0))}button[tuicardlarge]{border:solid 2px white}button[tuicardlarge].active{border-color:var(--tui-background-accent-1)}\n"] }]
6394
6360
  }] });
6395
6361
 
6396
6362
  /**