@rededor/site-front-end-lib 1.3.14 → 1.3.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { Component, CUSTOM_ELEMENTS_SCHEMA, HostListener, Inject, Input, PLATFORM_ID, ViewChild } from '@angular/core';
1
+ import { Component, CUSTOM_ELEMENTS_SCHEMA, Inject, Input, PLATFORM_ID, ViewChild, } from '@angular/core';
2
2
  import { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';
3
3
  import { RdsiteLinkDirective } from '../../directives';
4
4
  import { LIB_CONFIG } from '../../tokens/LibConfig';
@@ -10,41 +10,62 @@ import * as i2 from "@angular/common";
10
10
  export class BreadcrumbsComponent {
11
11
  set breadcrumbs(value) {
12
12
  this._breadcrumbs = value || [];
13
- if (value.length) {
13
+ if (value?.length) {
14
14
  this.setBreadcrumbsJson(value);
15
15
  }
16
16
  }
17
17
  get breadcrumbs() {
18
18
  return this._breadcrumbs;
19
19
  }
20
- onWindowResize() {
21
- this.setIsDesktop();
22
- }
23
- constructor(curaService, libConfig, document, platformId) {
20
+ constructor(curaService, cdr, libConfig, document, platformId) {
24
21
  this.curaService = curaService;
22
+ this.cdr = cdr;
25
23
  this.libConfig = libConfig;
26
24
  this.document = document;
27
25
  this.platformId = platformId;
28
26
  this.labelIconColor = 'neutral-purewhite';
27
+ this.isDesktop = null;
29
28
  this._breadcrumbs = [];
30
29
  this.breadcrumbsJsonTagId = 'breadcrumbsJSON';
31
30
  }
32
31
  ngAfterViewInit() {
33
32
  this.getColors(this.labelIconColor);
34
- this.setIsDesktop();
33
+ this.initViewportDetection();
34
+ }
35
+ ngOnDestroy() {
36
+ this.resizeObserver?.disconnect();
37
+ }
38
+ initViewportDetection() {
39
+ if (!isPlatformBrowser(this.platformId)) {
40
+ this.isDesktop = true;
41
+ return;
42
+ }
43
+ this.checkViewportSize();
44
+ this.setupResizeObserver();
35
45
  }
36
- setIsDesktop() {
37
- if (isPlatformBrowser(this.platformId)) {
38
- this.isDesktop = window.innerWidth > MediaQueries.smallBreakpoint;
46
+ setupResizeObserver() {
47
+ this.resizeObserver = new ResizeObserver(() => {
48
+ this.checkViewportSize();
49
+ });
50
+ this.resizeObserver.observe(document.body);
51
+ }
52
+ checkViewportSize() {
53
+ if (!isPlatformBrowser(this.platformId))
54
+ return;
55
+ const newValue = window.innerWidth > MediaQueries.smallBreakpoint;
56
+ if (this.isDesktop !== newValue) {
57
+ this.isDesktop = newValue;
58
+ this.cdr.detectChanges();
39
59
  }
40
60
  }
41
61
  getColors(color) {
42
- if (isPlatformBrowser(this.platformId)) {
43
- this.breadCrumbsElement.nativeElement.style.setProperty('--font-family', this.curaService.getFontFamily(''));
44
- this.breadCrumbsElement.nativeElement.style.setProperty('--label-icon-color', this.curaService.getColor(color));
45
- this.breadCrumbsElement.nativeElement.style.setProperty('--divider-color', this.curaService.getColor('neutral-light'));
62
+ if (isPlatformBrowser(this.platformId) && this.breadCrumbsElement?.nativeElement) {
63
+ const element = this.breadCrumbsElement.nativeElement;
64
+ element.style.setProperty('--font-family', this.curaService.getFontFamily(''));
65
+ element.style.setProperty('--label-icon-color', this.curaService.getColor(color));
66
+ element.style.setProperty('--divider-color', this.curaService.getColor('neutral-light'));
46
67
  const disabledColor = color?.includes('neutral') ? 'primary-lighter' : 'neutral-dark';
47
- this.breadCrumbsElement.nativeElement.style.setProperty('--disabled-color', this.curaService.getColor(disabledColor));
68
+ element.style.setProperty('--disabled-color', this.curaService.getColor(disabledColor));
48
69
  }
49
70
  }
50
71
  getUrl(urls = []) {
@@ -58,47 +79,35 @@ export class BreadcrumbsComponent {
58
79
  itemListElement: this.getJsonBreadcrumbItems(items),
59
80
  };
60
81
  this.breadcrumbsJsonTag.innerHTML = JSON.stringify(json);
61
- return this;
62
82
  }
63
83
  getBreadcrumbsJSONTag() {
64
- const elements = this.document.head.children;
65
- let i;
66
- for (i = 0; i < elements.length; i++) {
67
- const elem = elements[i];
68
- if (elem && elem.id === this.breadcrumbsJsonTagId) {
69
- return elem;
70
- }
71
- }
72
- return this.createBreadcrumbsJSONTag();
84
+ const existingTag = this.document.getElementById(this.breadcrumbsJsonTagId);
85
+ return existingTag || this.createBreadcrumbsJSONTag();
73
86
  }
74
87
  createBreadcrumbsJSONTag() {
75
88
  const tag = this.document.createElement('script');
76
89
  tag.id = this.breadcrumbsJsonTagId;
77
90
  tag.type = 'application/ld+json';
78
91
  this.document.head.appendChild(tag);
79
- this.breadcrumbsJsonTag = tag;
80
92
  return tag;
81
93
  }
82
94
  getJsonBreadcrumbItems(items) {
83
- return items.map((item, i) => {
84
- const jsonItem = {
85
- '@type': 'ListItem',
86
- position: i + 1,
87
- item: {
88
- '@id': `${this.libConfig.siteUrl.replace(/\/$/, '')}${this.getUrl(item.url)}`,
89
- name: he.encode(item.label),
90
- },
91
- };
92
- return jsonItem;
93
- });
95
+ return items.map((item, i) => ({
96
+ '@type': 'ListItem',
97
+ position: i + 1,
98
+ item: {
99
+ '@id': `${this.libConfig.siteUrl.replace(/\/$/, '')}${this.getUrl(item.url)}`,
100
+ name: he.encode(item.label),
101
+ },
102
+ }));
94
103
  }
95
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BreadcrumbsComponent, deps: [{ token: i1.CuraService }, { token: LIB_CONFIG }, { token: DOCUMENT }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component }); }
96
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BreadcrumbsComponent, isStandalone: true, selector: "rdsite-breadcrumbs", inputs: { labelIconColor: "labelIconColor", breadcrumbs: "breadcrumbs" }, host: { listeners: { "window:resize": "onWindowResize()" } }, viewQueries: [{ propertyName: "breadCrumbsElement", first: true, predicate: ["breadCrumbsElement"], descendants: true }], ngImport: i0, template: "@if (breadcrumbs.length) {\r\n <nav class=\"breadcrumb\" #breadCrumbsElement>\r\n <ol>\r\n @if (isDesktop || breadcrumbs.length < 3) {\r\n <ng-container *ngTemplateOutlet=\"Desktop\"></ng-container>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"Mobile\"></ng-container>\r\n }\r\n </ol>\r\n </nav>\r\n}\r\n\r\n<ng-template #Desktop>\r\n @for (breadcrumb of breadcrumbs; track breadcrumb.label; let first = $first; let last = $last; let index = $index) {\r\n <li>\r\n @if (!last) {\r\n <a rdsitelink [href]=\"getUrl(breadcrumb.url)\">\r\n @if (first) {\r\n <cura-icon name=\"home\" [attr.color]=\"labelIconColor\" size=\"16\"> </cura-icon>\r\n }\r\n <span>\r\n {{ breadcrumb.label }}\r\n </span>\r\n </a>\r\n <span class=\"divider\">/</span>\r\n } @else {\r\n <span [class.last-item]=\"last && !first\">\r\n {{ breadcrumb.label }}\r\n </span>\r\n }\r\n </li>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #Mobile>\r\n @for (breadcrumb of breadcrumbs; track breadcrumb.label; let first = $first; let last = $last; let index = $index) {\r\n <li>\r\n @if (first) {\r\n <a rdsitelink [href]=\"getUrl(breadcrumb.url)\">\r\n <cura-icon name=\"home\" [attr.color]=\"labelIconColor\" size=\"16\"> </cura-icon>\r\n <span>\r\n {{ breadcrumb.label }}\r\n </span>\r\n </a>\r\n <span class=\"divider\">/</span>\r\n } @else if (index === breadcrumbs.length - 2) {\r\n <span class=\"back\"><</span>\r\n <a rdsitelink [href]=\"getUrl(breadcrumb.url)\">\r\n <span>\r\n {{ breadcrumb.label }}\r\n </span>\r\n </a>\r\n }\r\n </li>\r\n }\r\n</ng-template>\r\n", styles: [".breadcrumb *{font-family:var(--font-family)}.breadcrumb ol{display:flex}.breadcrumb ol li{display:flex;gap:8px}.breadcrumb ol li a{color:var(--label-icon-color);display:flex;gap:4px;text-decoration:none}.breadcrumb ol li a span{text-decoration:underline;font-size:12px;font-weight:500;line-height:16px;letter-spacing:.72px}.breadcrumb ol li span.last-item{color:var(--disabled-color);text-decoration:none;pointer-events:none;font-size:12px;font-weight:500;line-height:16px;letter-spacing:.72px}.breadcrumb ol li span.divider,.breadcrumb ol li span.back{color:var(--divider-color);padding-right:8px;font-size:12px;font-weight:500;line-height:16px;letter-spacing:.72px}.breadcrumb ol li span.back{padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RdsiteLinkDirective, selector: "[rdsitelink]", inputs: ["anchorAdjustment", "anchorExtraAdjustment", "phonemodal"] }] }); }
104
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BreadcrumbsComponent, deps: [{ token: i1.CuraService }, { token: i0.ChangeDetectorRef }, { token: LIB_CONFIG }, { token: DOCUMENT }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component }); }
105
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BreadcrumbsComponent, isStandalone: true, selector: "rdsite-breadcrumbs", inputs: { labelIconColor: "labelIconColor", breadcrumbs: "breadcrumbs" }, viewQueries: [{ propertyName: "breadCrumbsElement", first: true, predicate: ["breadCrumbsElement"], descendants: true }], ngImport: i0, template: "@if (breadcrumbs.length) {\r\n <nav class=\"breadcrumb\" #breadCrumbsElement>\r\n <ol>\r\n @if (isDesktop !== null && (isDesktop || breadcrumbs.length < 3)) {\r\n <ng-container *ngTemplateOutlet=\"Desktop\"></ng-container>\r\n } @else if (isDesktop !== null) {\r\n <ng-container *ngTemplateOutlet=\"Mobile\"></ng-container>\r\n }\r\n </ol>\r\n </nav>\r\n}\r\n\r\n<ng-template #Desktop>\r\n @for (breadcrumb of breadcrumbs; track breadcrumb.label; let first = $first; let last = $last; let index = $index) {\r\n <li>\r\n @if (!last) {\r\n <a rdsitelink [href]=\"getUrl(breadcrumb.url)\">\r\n @if (first) {\r\n <cura-icon name=\"home\" [attr.color]=\"labelIconColor\" size=\"16\"> </cura-icon>\r\n }\r\n <span>\r\n {{ breadcrumb.label }}\r\n </span>\r\n </a>\r\n <span class=\"divider\">/</span>\r\n } @else {\r\n <span [class.last-item]=\"last && !first\">\r\n {{ breadcrumb.label }}\r\n </span>\r\n }\r\n </li>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #Mobile>\r\n @for (breadcrumb of breadcrumbs; track breadcrumb.label; let first = $first; let last = $last; let index = $index) {\r\n <li>\r\n @if (first) {\r\n <a rdsitelink [href]=\"getUrl(breadcrumb.url)\">\r\n <cura-icon name=\"home\" [attr.color]=\"labelIconColor\" size=\"16\"> </cura-icon>\r\n <span>\r\n {{ breadcrumb.label }}\r\n </span>\r\n </a>\r\n <span class=\"divider\">/</span>\r\n } @else if (index === breadcrumbs.length - 2) {\r\n <span class=\"back\"><</span>\r\n <a rdsitelink [href]=\"getUrl(breadcrumb.url)\">\r\n <span>\r\n {{ breadcrumb.label }}\r\n </span>\r\n </a>\r\n }\r\n </li>\r\n }\r\n</ng-template>\r\n", styles: [".breadcrumb *{font-family:var(--font-family)}.breadcrumb ol{display:flex}.breadcrumb ol li{display:flex;gap:8px}.breadcrumb ol li a{color:var(--label-icon-color);display:flex;gap:4px;text-decoration:none}.breadcrumb ol li a span{text-decoration:underline;font-size:12px;font-weight:500;line-height:16px;letter-spacing:.72px}.breadcrumb ol li span.last-item{color:var(--disabled-color);text-decoration:none;pointer-events:none;font-size:12px;font-weight:500;line-height:16px;letter-spacing:.72px}.breadcrumb ol li span.divider,.breadcrumb ol li span.back{color:var(--divider-color);padding-right:8px;font-size:12px;font-weight:500;line-height:16px;letter-spacing:.72px}.breadcrumb ol li span.back{padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RdsiteLinkDirective, selector: "[rdsitelink]", inputs: ["anchorAdjustment", "anchorExtraAdjustment", "phonemodal"] }] }); }
97
106
  }
98
107
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BreadcrumbsComponent, decorators: [{
99
108
  type: Component,
100
- args: [{ selector: 'rdsite-breadcrumbs', standalone: true, imports: [CommonModule, RdsiteLinkDirective], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "@if (breadcrumbs.length) {\r\n <nav class=\"breadcrumb\" #breadCrumbsElement>\r\n <ol>\r\n @if (isDesktop || breadcrumbs.length < 3) {\r\n <ng-container *ngTemplateOutlet=\"Desktop\"></ng-container>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"Mobile\"></ng-container>\r\n }\r\n </ol>\r\n </nav>\r\n}\r\n\r\n<ng-template #Desktop>\r\n @for (breadcrumb of breadcrumbs; track breadcrumb.label; let first = $first; let last = $last; let index = $index) {\r\n <li>\r\n @if (!last) {\r\n <a rdsitelink [href]=\"getUrl(breadcrumb.url)\">\r\n @if (first) {\r\n <cura-icon name=\"home\" [attr.color]=\"labelIconColor\" size=\"16\"> </cura-icon>\r\n }\r\n <span>\r\n {{ breadcrumb.label }}\r\n </span>\r\n </a>\r\n <span class=\"divider\">/</span>\r\n } @else {\r\n <span [class.last-item]=\"last && !first\">\r\n {{ breadcrumb.label }}\r\n </span>\r\n }\r\n </li>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #Mobile>\r\n @for (breadcrumb of breadcrumbs; track breadcrumb.label; let first = $first; let last = $last; let index = $index) {\r\n <li>\r\n @if (first) {\r\n <a rdsitelink [href]=\"getUrl(breadcrumb.url)\">\r\n <cura-icon name=\"home\" [attr.color]=\"labelIconColor\" size=\"16\"> </cura-icon>\r\n <span>\r\n {{ breadcrumb.label }}\r\n </span>\r\n </a>\r\n <span class=\"divider\">/</span>\r\n } @else if (index === breadcrumbs.length - 2) {\r\n <span class=\"back\"><</span>\r\n <a rdsitelink [href]=\"getUrl(breadcrumb.url)\">\r\n <span>\r\n {{ breadcrumb.label }}\r\n </span>\r\n </a>\r\n }\r\n </li>\r\n }\r\n</ng-template>\r\n", styles: [".breadcrumb *{font-family:var(--font-family)}.breadcrumb ol{display:flex}.breadcrumb ol li{display:flex;gap:8px}.breadcrumb ol li a{color:var(--label-icon-color);display:flex;gap:4px;text-decoration:none}.breadcrumb ol li a span{text-decoration:underline;font-size:12px;font-weight:500;line-height:16px;letter-spacing:.72px}.breadcrumb ol li span.last-item{color:var(--disabled-color);text-decoration:none;pointer-events:none;font-size:12px;font-weight:500;line-height:16px;letter-spacing:.72px}.breadcrumb ol li span.divider,.breadcrumb ol li span.back{color:var(--divider-color);padding-right:8px;font-size:12px;font-weight:500;line-height:16px;letter-spacing:.72px}.breadcrumb ol li span.back{padding:0}\n"] }]
101
- }], ctorParameters: () => [{ type: i1.CuraService }, { type: undefined, decorators: [{
109
+ args: [{ selector: 'rdsite-breadcrumbs', standalone: true, imports: [CommonModule, RdsiteLinkDirective], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "@if (breadcrumbs.length) {\r\n <nav class=\"breadcrumb\" #breadCrumbsElement>\r\n <ol>\r\n @if (isDesktop !== null && (isDesktop || breadcrumbs.length < 3)) {\r\n <ng-container *ngTemplateOutlet=\"Desktop\"></ng-container>\r\n } @else if (isDesktop !== null) {\r\n <ng-container *ngTemplateOutlet=\"Mobile\"></ng-container>\r\n }\r\n </ol>\r\n </nav>\r\n}\r\n\r\n<ng-template #Desktop>\r\n @for (breadcrumb of breadcrumbs; track breadcrumb.label; let first = $first; let last = $last; let index = $index) {\r\n <li>\r\n @if (!last) {\r\n <a rdsitelink [href]=\"getUrl(breadcrumb.url)\">\r\n @if (first) {\r\n <cura-icon name=\"home\" [attr.color]=\"labelIconColor\" size=\"16\"> </cura-icon>\r\n }\r\n <span>\r\n {{ breadcrumb.label }}\r\n </span>\r\n </a>\r\n <span class=\"divider\">/</span>\r\n } @else {\r\n <span [class.last-item]=\"last && !first\">\r\n {{ breadcrumb.label }}\r\n </span>\r\n }\r\n </li>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #Mobile>\r\n @for (breadcrumb of breadcrumbs; track breadcrumb.label; let first = $first; let last = $last; let index = $index) {\r\n <li>\r\n @if (first) {\r\n <a rdsitelink [href]=\"getUrl(breadcrumb.url)\">\r\n <cura-icon name=\"home\" [attr.color]=\"labelIconColor\" size=\"16\"> </cura-icon>\r\n <span>\r\n {{ breadcrumb.label }}\r\n </span>\r\n </a>\r\n <span class=\"divider\">/</span>\r\n } @else if (index === breadcrumbs.length - 2) {\r\n <span class=\"back\"><</span>\r\n <a rdsitelink [href]=\"getUrl(breadcrumb.url)\">\r\n <span>\r\n {{ breadcrumb.label }}\r\n </span>\r\n </a>\r\n }\r\n </li>\r\n }\r\n</ng-template>\r\n", styles: [".breadcrumb *{font-family:var(--font-family)}.breadcrumb ol{display:flex}.breadcrumb ol li{display:flex;gap:8px}.breadcrumb ol li a{color:var(--label-icon-color);display:flex;gap:4px;text-decoration:none}.breadcrumb ol li a span{text-decoration:underline;font-size:12px;font-weight:500;line-height:16px;letter-spacing:.72px}.breadcrumb ol li span.last-item{color:var(--disabled-color);text-decoration:none;pointer-events:none;font-size:12px;font-weight:500;line-height:16px;letter-spacing:.72px}.breadcrumb ol li span.divider,.breadcrumb ol li span.back{color:var(--divider-color);padding-right:8px;font-size:12px;font-weight:500;line-height:16px;letter-spacing:.72px}.breadcrumb ol li span.back{padding:0}\n"] }]
110
+ }], ctorParameters: () => [{ type: i1.CuraService }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
102
111
  type: Inject,
103
112
  args: [LIB_CONFIG]
104
113
  }] }, { type: Document, decorators: [{
@@ -114,8 +123,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
114
123
  }], breadCrumbsElement: [{
115
124
  type: ViewChild,
116
125
  args: ['breadCrumbsElement']
117
- }], onWindowResize: [{
118
- type: HostListener,
119
- args: ['window:resize']
120
126
  }] } });
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2l0ZS1mcm9udC1lbmQtbGliL3NyYy9saWIvY29tcG9uZW50cy9icmVhZGNydW1icy9icmVhZGNydW1icy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaXRlLWZyb250LWVuZC1saWIvc3JjL2xpYi9jb21wb25lbnRzL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLHNCQUFzQixFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEosT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUc1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0FBVTFELE1BQU0sT0FBTyxvQkFBb0I7SUFLL0IsSUFDSSxXQUFXLENBQUMsS0FBeUI7UUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2hDLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lB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QyxDQUFDO0lBQ0wsQ0FBQzsrR0F0R1Usb0JBQW9CLDZDQTRCckIsVUFBVSxhQUNWLFFBQVEsYUFDUixXQUFXO21HQTlCVixvQkFBb0IsZ1ZDbEJqQyw2eURBd0RBLDZ2QkQzQ1ksWUFBWSxzTUFBRSxtQkFBbUI7OzRGQUtoQyxvQkFBb0I7a0JBUmhDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxXQUNuQyxDQUFDLHNCQUFzQixDQUFDOzswQkFnQzlCLE1BQU07MkJBQUMsVUFBVTs7MEJBQ2pCLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsTUFBTTsyQkFBQyxXQUFXO3lDQTdCWixjQUFjO3NCQUF0QixLQUFLO2dCQUtGLFdBQVc7c0JBRGQsS0FBSztnQkFjMkIsa0JBQWtCO3NCQUFsRCxTQUFTO3VCQUFDLG9CQUFvQjtnQkFHL0IsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgUExBVEZPUk1fSUQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIERPQ1VNRU5ULCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEJyZWFkY3J1bWJzSXRlbXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvYnJlYWRjcnVtYnMvYnJlYWRjcnVtYnMtaXRlbXMubW9kZWwnO1xyXG5pbXBvcnQgeyBDdXJhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2N1cmEvY3VyYS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmRzaXRlTGlua0RpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xyXG5pbXBvcnQgeyBCcmVhZGNydW1ic0pzb25JdGVtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLWpzb24taXRlbS5tb2RlbCc7XHJcbmltcG9ydCB7IExJQl9DT05GSUcsIExpYkNvbmZpZyB9IGZyb20gJy4uLy4uL3Rva2Vucy9MaWJDb25maWcnO1xyXG5pbXBvcnQgKiBhcyBoZSBmcm9tICdoZSc7XHJcbmltcG9ydCB7IE1lZGlhUXVlcmllcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvbWVkaWFRdWVyaWVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmRzaXRlLWJyZWFkY3J1bWJzJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJkc2l0ZUxpbmtEaXJlY3RpdmVdLFxyXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vYnJlYWRjcnVtYnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9icmVhZGNydW1icy5jb21wb25lbnQuc2NzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCcmVhZGNydW1ic0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIGxhYmVsSWNvbkNvbG9yOiBzdHJpbmcgPSAnbmV1dHJhbC1wdXJld2hpdGUnO1xyXG4gIGlzRGVza3RvcCE6IGJvb2xlYW47XHJcblxyXG4gIHByaXZhdGUgX2JyZWFkY3J1bWJzOiBCcmVhZGNydW1ic0l0ZW1zW10gPSBbXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBicmVhZGNydW1icyh2YWx1ZTogQnJlYWRjcnVtYnNJdGVtc1tdKSB7XHJcbiAgICB0aGlzLl9icmVhZGNydW1icyA9IHZhbHVlIHx8IFtdO1xyXG4gICAgaWYgKHZhbHVlLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNldEJyZWFkY3J1bWJzSnNvbih2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBicmVhZGNydW1icygpIHtcclxuICAgIHJldHVybiB0aGlzLl9icmVhZGNydW1icztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnJlYWRjcnVtYnNKc29uVGFnITogSFRNTFNjcmlwdEVsZW1lbnQ7XHJcbiAgcHJpdmF0ZSBicmVhZGNydW1ic0pzb25UYWdJZCA9ICdicmVhZGNydW1ic0pTT04nO1xyXG5cclxuICBAVmlld0NoaWxkKCdicmVhZENydW1ic0VsZW1lbnQnKSBicmVhZENydW1ic0VsZW1lbnQhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXHJcbiAgb25XaW5kb3dSZXNpemUoKSB7XHJcbiAgICB0aGlzLnNldElzRGVza3RvcCgpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGN1cmFTZXJ2aWNlOiBDdXJhU2VydmljZSxcclxuICAgIEBJbmplY3QoTElCX0NPTkZJRykgcHJpdmF0ZSBsaWJDb25maWc6IExpYkNvbmZpZyxcclxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxyXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybUlkOiBvYmplY3QsXHJcbiAgKSB7fVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldENvbG9ycyh0aGlzLmxhYmVsSWNvbkNvbG9yKTtcclxuICAgIHRoaXMuc2V0SXNEZXNrdG9wKCk7XHJcbiAgfVxyXG5cclxuICBzZXRJc0Rlc2t0b3AoKSB7XHJcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICB0aGlzLmlzRGVza3RvcCA9IHdpbmRvdy5pbm5lcldpZHRoID4gTWVkaWFRdWVyaWVzLnNtYWxsQnJlYWtwb2ludDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbG9ycyhjb2xvcjogc3RyaW5nKSB7XHJcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICB0aGlzLmJyZWFkQ3J1bWJzRWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWZvbnQtZmFtaWx5JywgdGhpcy5jdXJhU2VydmljZS5nZXRGb250RmFtaWx5KCcnKSk7XHJcbiAgICAgIHRoaXMuYnJlYWRDcnVtYnNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tbGFiZWwtaWNvbi1jb2xvcicsIHRoaXMuY3VyYVNlcnZpY2UuZ2V0Q29sb3IoY29sb3IpKTtcclxuICAgICAgdGhpcy5icmVhZENydW1ic0VsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kaXZpZGVyLWNvbG9yJywgdGhpcy5jdXJhU2VydmljZS5nZXRDb2xvcignbmV1dHJhbC1saWdodCcpKTtcclxuICAgICAgY29uc3QgZGlzYWJsZWRDb2xvciA9IGNvbG9yPy5pbmNsdWRlcygnbmV1dHJhbCcpID8gJ3ByaW1hcnktbGlnaHRlcicgOiAnbmV1dHJhbC1kYXJrJztcclxuICAgICAgdGhpcy5icmVhZENydW1ic0VsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kaXNhYmxlZC1jb2xvcicsIHRoaXMuY3VyYVNlcnZpY2UuZ2V0Q29sb3IoZGlzYWJsZWRDb2xvcikpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VXJsKHVybHM6IHN0cmluZ1tdID0gW10pIHtcclxuICAgIHJldHVybiB1cmxzLmpvaW4oJycpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRCcmVhZGNydW1ic0pzb24oaXRlbXM6IEJyZWFkY3J1bWJzSXRlbXNbXSkge1xyXG4gICAgdGhpcy5icmVhZGNydW1ic0pzb25UYWcgPSB0aGlzLmdldEJyZWFkY3J1bWJzSlNPTlRhZygpO1xyXG4gICAgY29uc3QganNvbiA9IHtcclxuICAgICAgJ0Bjb250ZXh0JzogJ2h0dHA6Ly9zY2hlbWEub3JnJyxcclxuICAgICAgJ0B0eXBlJzogJ0JyZWFkY3J1bWJMaXN0JyxcclxuICAgICAgaXRlbUxpc3RFbGVtZW50OiB0aGlzLmdldEpzb25CcmVhZGNydW1iSXRlbXMoaXRlbXMpLFxyXG4gICAgfTtcclxuICAgIHRoaXMuYnJlYWRjcnVtYnNKc29uVGFnLmlubmVySFRNTCA9IEpTT04uc3RyaW5naWZ5KGpzb24pO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJyZWFkY3J1bWJzSlNPTlRhZygpOiBIVE1MU2NyaXB0RWxlbWVudCB7XHJcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuZG9jdW1lbnQuaGVhZC5jaGlsZHJlbjtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZWxlbSA9IGVsZW1lbnRzW2ldIGFzIEhUTUxTY3JpcHRFbGVtZW50O1xyXG4gICAgICBpZiAoZWxlbSAmJiBlbGVtLmlkID09PSB0aGlzLmJyZWFkY3J1bWJzSnNvblRhZ0lkKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUJyZWFkY3J1bWJzSlNPTlRhZygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVCcmVhZGNydW1ic0pTT05UYWcoKTogSFRNTFNjcmlwdEVsZW1lbnQge1xyXG4gICAgY29uc3QgdGFnOiBIVE1MU2NyaXB0RWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcbiAgICB0YWcuaWQgPSB0aGlzLmJyZWFkY3J1bWJzSnNvblRhZ0lkO1xyXG4gICAgdGFnLnR5cGUgPSAnYXBwbGljYXRpb24vbGQranNvbic7XHJcbiAgICB0aGlzLmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodGFnKTtcclxuICAgIHRoaXMuYnJlYWRjcnVtYnNKc29uVGFnID0gdGFnO1xyXG4gICAgcmV0dXJuIHRhZztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SnNvbkJyZWFkY3J1bWJJdGVtcyhpdGVtczogQnJlYWRjcnVtYnNJdGVtc1tdKTogQnJlYWRjcnVtYnNKc29uSXRlbVtdIHtcclxuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGkpID0+IHtcclxuICAgICAgY29uc3QganNvbkl0ZW06IEJyZWFkY3J1bWJzSnNvbkl0ZW0gPSB7XHJcbiAgICAgICAgJ0B0eXBlJzogJ0xpc3RJdGVtJyxcclxuICAgICAgICBwb3NpdGlvbjogaSArIDEsXHJcbiAgICAgICAgaXRlbToge1xyXG4gICAgICAgICAgJ0BpZCc6IGAke3RoaXMubGliQ29uZmlnLnNpdGVVcmwucmVwbGFjZSgvXFwvJC8sICcnKX0ke3RoaXMuZ2V0VXJsKGl0ZW0udXJsKX1gLFxyXG4gICAgICAgICAgbmFtZTogaGUuZW5jb2RlKGl0ZW0ubGFiZWwpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiBqc29uSXRlbTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKGJyZWFkY3J1bWJzLmxlbmd0aCkge1xyXG4gIDxuYXYgY2xhc3M9XCJicmVhZGNydW1iXCIgI2JyZWFkQ3J1bWJzRWxlbWVudD5cclxuICAgIDxvbD5cclxuICAgICAgQGlmIChpc0Rlc2t0b3AgfHwgYnJlYWRjcnVtYnMubGVuZ3RoIDwgMykge1xyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJEZXNrdG9wXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJNb2JpbGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgfVxyXG4gICAgPC9vbD5cclxuICA8L25hdj5cclxufVxyXG5cclxuPG5nLXRlbXBsYXRlICNEZXNrdG9wPlxyXG4gIEBmb3IgKGJyZWFkY3J1bWIgb2YgYnJlYWRjcnVtYnM7IHRyYWNrIGJyZWFkY3J1bWIubGFiZWw7IGxldCBmaXJzdCA9ICRmaXJzdDsgbGV0IGxhc3QgPSAkbGFzdDsgbGV0IGluZGV4ID0gJGluZGV4KSB7XHJcbiAgICA8bGk+XHJcbiAgICAgIEBpZiAoIWxhc3QpIHtcclxuICAgICAgICA8YSByZHNpdGVsaW5rIFtocmVmXT1cImdldFVybChicmVhZGNydW1iLnVybClcIj5cclxuICAgICAgICAgIEBpZiAoZmlyc3QpIHtcclxuICAgICAgICAgICAgPGN1cmEtaWNvbiBuYW1lPVwiaG9tZVwiIFthdHRyLmNvbG9yXT1cImxhYmVsSWNvbkNvbG9yXCIgc2l6ZT1cIjE2XCI+IDwvY3VyYS1pY29uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgIHt7IGJyZWFkY3J1bWIubGFiZWwgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2E+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+Lzwvc3Bhbj5cclxuICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgPHNwYW4gW2NsYXNzLmxhc3QtaXRlbV09XCJsYXN0ICYmICFmaXJzdFwiPlxyXG4gICAgICAgICAge3sgYnJlYWRjcnVtYi5sYWJlbCB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgPC9saT5cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI01vYmlsZT5cclxuICBAZm9yIChicmVhZGNydW1iIG9mIGJyZWFkY3J1bWJzOyB0cmFjayBicmVhZGNydW1iLmxhYmVsOyBsZXQgZmlyc3QgPSAkZmlyc3Q7IGxldCBsYXN0ID0gJGxhc3Q7IGxldCBpbmRleCA9ICRpbmRleCkge1xyXG4gICAgPGxpPlxyXG4gICAgICBAaWYgKGZpcnN0KSB7XHJcbiAgICAgICAgPGEgcmRzaXRlbGluayBbaHJlZl09XCJnZXRVcmwoYnJlYWRjcnVtYi51cmwpXCI+XHJcbiAgICAgICAgICA8Y3VyYS1pY29uIG5hbWU9XCJob21lXCIgW2F0dHIuY29sb3JdPVwibGFiZWxJY29uQ29sb3JcIiBzaXplPVwiMTZcIj4gPC9jdXJhLWljb24+XHJcbiAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAge3sgYnJlYWRjcnVtYi5sYWJlbCB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvYT5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj4vPC9zcGFuPlxyXG4gICAgICB9IEBlbHNlIGlmIChpbmRleCA9PT0gYnJlYWRjcnVtYnMubGVuZ3RoIC0gMikge1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYmFja1wiPjw8L3NwYW4+XHJcbiAgICAgICAgPGEgcmRzaXRlbGluayBbaHJlZl09XCJnZXRVcmwoYnJlYWRjcnVtYi51cmwpXCI+XHJcbiAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAge3sgYnJlYWRjcnVtYi5sYWJlbCB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvYT5cclxuICAgICAgfVxyXG4gICAgPC9saT5cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2l0ZS1mcm9udC1lbmQtbGliL3NyYy9saWIvY29tcG9uZW50cy9icmVhZGNydW1icy9icmVhZGNydW1icy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaXRlLWZyb250LWVuZC1saWIvc3JjL2xpYi9jb21wb25lbnRzL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1Qsc0JBQXNCLEVBRXRCLE1BQU0sRUFDTixLQUFLLEVBRUwsV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXZELE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFVMUQsTUFBTSxPQUFPLG9CQUFvQjtJQUsvQixJQUNJLFdBQVcsQ0FBQyxLQUF5QjtRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDaEMsSUFBSSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFRRCxZQUNVLFdB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UUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQ2YsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzdFLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDNUI7U0FDRixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7K0dBbkhVLG9CQUFvQiw4RUF5QnJCLFVBQVUsYUFDVixRQUFRLGFBQ1IsV0FBVzttR0EzQlYsb0JBQW9CLGtSQzdCakMsNjFEQXdEQSw2dkJEaENZLFlBQVksc01BQUUsbUJBQW1COzs0RkFLaEMsb0JBQW9CO2tCQVJoQyxTQUFTOytCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUMsV0FDbkMsQ0FBQyxzQkFBc0IsQ0FBQzs7MEJBNkI5QixNQUFNOzJCQUFDLFVBQVU7OzBCQUNqQixNQUFNOzJCQUFDLFFBQVE7OzBCQUNmLE1BQU07MkJBQUMsV0FBVzt5Q0ExQlosY0FBYztzQkFBdEIsS0FBSztnQkFLRixXQUFXO3NCQURkLEtBQUs7Z0JBZTJCLGtCQUFrQjtzQkFBbEQsU0FBUzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIFBMQVRGT1JNX0lELFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBET0NVTUVOVCwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBCcmVhZGNydW1ic0l0ZW1zIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLWl0ZW1zLm1vZGVsJztcclxuaW1wb3J0IHsgQ3VyYVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jdXJhL2N1cmEuc2VydmljZSc7XHJcbmltcG9ydCB7IFJkc2l0ZUxpbmtEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcclxuaW1wb3J0IHsgQnJlYWRjcnVtYnNKc29uSXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9icmVhZGNydW1icy9icmVhZGNydW1icy1qc29uLWl0ZW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBMSUJfQ09ORklHLCBMaWJDb25maWcgfSBmcm9tICcuLi8uLi90b2tlbnMvTGliQ29uZmlnJztcclxuaW1wb3J0ICogYXMgaGUgZnJvbSAnaGUnO1xyXG5pbXBvcnQgeyBNZWRpYVF1ZXJpZXMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL21lZGlhUXVlcmllcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Jkc2l0ZS1icmVhZGNydW1icycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZHNpdGVMaW5rRGlyZWN0aXZlXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2JyZWFkY3J1bWJzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYnJlYWRjcnVtYnMuY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQnJlYWRjcnVtYnNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIGxhYmVsSWNvbkNvbG9yOiBzdHJpbmcgPSAnbmV1dHJhbC1wdXJld2hpdGUnO1xyXG4gIGlzRGVza3RvcDogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9icmVhZGNydW1iczogQnJlYWRjcnVtYnNJdGVtc1tdID0gW107XHJcbiAgQElucHV0KClcclxuICBzZXQgYnJlYWRjcnVtYnModmFsdWU6IEJyZWFkY3J1bWJzSXRlbXNbXSkge1xyXG4gICAgdGhpcy5fYnJlYWRjcnVtYnMgPSB2YWx1ZSB8fCBbXTtcclxuICAgIGlmICh2YWx1ZT8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2V0QnJlYWRjcnVtYnNKc29uKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGJyZWFkY3J1bWJzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JyZWFkY3J1bWJzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBicmVhZGNydW1ic0pzb25UYWchOiBIVE1MU2NyaXB0RWxlbWVudDtcclxuICBwcml2YXRlIHJlYWRvbmx5IGJyZWFkY3J1bWJzSnNvblRhZ0lkID0gJ2JyZWFkY3J1bWJzSlNPTic7XHJcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlciE6IFJlc2l6ZU9ic2VydmVyO1xyXG5cclxuICBAVmlld0NoaWxkKCdicmVhZENydW1ic0VsZW1lbnQnKSBicmVhZENydW1ic0VsZW1lbnQhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGN1cmFTZXJ2aWNlOiBDdXJhU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIEBJbmplY3QoTElCX0NPTkZJRykgcHJpdmF0ZSBsaWJDb25maWc6IExpYkNvbmZpZyxcclxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxyXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybUlkOiBvYmplY3QsXHJcbiAgKSB7fVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldENvbG9ycyh0aGlzLmxhYmVsSWNvbkNvbG9yKTtcclxuICAgIHRoaXMuaW5pdFZpZXdwb3J0RGV0ZWN0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFZpZXdwb3J0RGV0ZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIHRoaXMuaXNEZXNrdG9wID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemUoKTtcclxuICAgIHRoaXMuc2V0dXBSZXNpemVPYnNlcnZlcigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cFJlc2l6ZU9ic2VydmVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemUoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tWaWV3cG9ydFNpemUoKTogdm9pZCB7XHJcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHdpbmRvdy5pbm5lcldpZHRoID4gTWVkaWFRdWVyaWVzLnNtYWxsQnJlYWtwb2ludDtcclxuICAgIGlmICh0aGlzLmlzRGVza3RvcCAhPT0gbmV3VmFsdWUpIHtcclxuICAgICAgdGhpcy5pc0Rlc2t0b3AgPSBuZXdWYWx1ZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29sb3JzKGNvbG9yOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpICYmIHRoaXMuYnJlYWRDcnVtYnNFbGVtZW50Py5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmJyZWFkQ3J1bWJzRWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWZvbnQtZmFtaWx5JywgdGhpcy5jdXJhU2VydmljZS5nZXRGb250RmFtaWx5KCcnKSk7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tbGFiZWwtaWNvbi1jb2xvcicsIHRoaXMuY3VyYVNlcnZpY2UuZ2V0Q29sb3IoY29sb3IpKTtcclxuICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kaXZpZGVyLWNvbG9yJywgdGhpcy5jdXJhU2VydmljZS5nZXRDb2xvcignbmV1dHJhbC1saWdodCcpKTtcclxuXHJcbiAgICAgIGNvbnN0IGRpc2FibGVkQ29sb3IgPSBjb2xvcj8uaW5jbHVkZXMoJ25ldXRyYWwnKSA/ICdwcmltYXJ5LWxpZ2h0ZXInIDogJ25ldXRyYWwtZGFyayc7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tZGlzYWJsZWQtY29sb3InLCB0aGlzLmN1cmFTZXJ2aWNlLmdldENvbG9yKGRpc2FibGVkQ29sb3IpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFVybCh1cmxzOiBzdHJpbmdbXSA9IFtdKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB1cmxzLmpvaW4oJycpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRCcmVhZGNydW1ic0pzb24oaXRlbXM6IEJyZWFkY3J1bWJzSXRlbXNbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5icmVhZGNydW1ic0pzb25UYWcgPSB0aGlzLmdldEJyZWFkY3J1bWJzSlNPTlRhZygpO1xyXG4gICAgY29uc3QganNvbiA9IHtcclxuICAgICAgJ0Bjb250ZXh0JzogJ2h0dHA6Ly9zY2hlbWEub3JnJyxcclxuICAgICAgJ0B0eXBlJzogJ0JyZWFkY3J1bWJMaXN0JyxcclxuICAgICAgaXRlbUxpc3RFbGVtZW50OiB0aGlzLmdldEpzb25CcmVhZGNydW1iSXRlbXMoaXRlbXMpLFxyXG4gICAgfTtcclxuICAgIHRoaXMuYnJlYWRjcnVtYnNKc29uVGFnLmlubmVySFRNTCA9IEpTT04uc3RyaW5naWZ5KGpzb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCcmVhZGNydW1ic0pTT05UYWcoKTogSFRNTFNjcmlwdEVsZW1lbnQge1xyXG4gICAgY29uc3QgZXhpc3RpbmdUYWcgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYnJlYWRjcnVtYnNKc29uVGFnSWQpIGFzIEhUTUxTY3JpcHRFbGVtZW50O1xyXG4gICAgcmV0dXJuIGV4aXN0aW5nVGFnIHx8IHRoaXMuY3JlYXRlQnJlYWRjcnVtYnNKU09OVGFnKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUJyZWFkY3J1bWJzSlNPTlRhZygpOiBIVE1MU2NyaXB0RWxlbWVudCB7XHJcbiAgICBjb25zdCB0YWcgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAgdGFnLmlkID0gdGhpcy5icmVhZGNydW1ic0pzb25UYWdJZDtcclxuICAgIHRhZy50eXBlID0gJ2FwcGxpY2F0aW9uL2xkK2pzb24nO1xyXG4gICAgdGhpcy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRhZyk7XHJcbiAgICByZXR1cm4gdGFnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRKc29uQnJlYWRjcnVtYkl0ZW1zKGl0ZW1zOiBCcmVhZGNydW1ic0l0ZW1zW10pOiBCcmVhZGNydW1ic0pzb25JdGVtW10ge1xyXG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSwgaSkgPT4gKHtcclxuICAgICAgJ0B0eXBlJzogJ0xpc3RJdGVtJyxcclxuICAgICAgcG9zaXRpb246IGkgKyAxLFxyXG4gICAgICBpdGVtOiB7XHJcbiAgICAgICAgJ0BpZCc6IGAke3RoaXMubGliQ29uZmlnLnNpdGVVcmwucmVwbGFjZSgvXFwvJC8sICcnKX0ke3RoaXMuZ2V0VXJsKGl0ZW0udXJsKX1gLFxyXG4gICAgICAgIG5hbWU6IGhlLmVuY29kZShpdGVtLmxhYmVsKSxcclxuICAgICAgfSxcclxuICAgIH0pKTtcclxuICB9XHJcbn1cclxuIiwiQGlmIChicmVhZGNydW1icy5sZW5ndGgpIHtcclxuICA8bmF2IGNsYXNzPVwiYnJlYWRjcnVtYlwiICNicmVhZENydW1ic0VsZW1lbnQ+XHJcbiAgICA8b2w+XHJcbiAgICAgIEBpZiAoaXNEZXNrdG9wICE9PSBudWxsICYmIChpc0Rlc2t0b3AgfHwgYnJlYWRjcnVtYnMubGVuZ3RoIDwgMykpIHtcclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiRGVza3RvcFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICB9IEBlbHNlIGlmIChpc0Rlc2t0b3AgIT09IG51bGwpIHtcclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiTW9iaWxlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIH1cclxuICAgIDwvb2w+XHJcbiAgPC9uYXY+XHJcbn1cclxuXHJcbjxuZy10ZW1wbGF0ZSAjRGVza3RvcD5cclxuICBAZm9yIChicmVhZGNydW1iIG9mIGJyZWFkY3J1bWJzOyB0cmFjayBicmVhZGNydW1iLmxhYmVsOyBsZXQgZmlyc3QgPSAkZmlyc3Q7IGxldCBsYXN0ID0gJGxhc3Q7IGxldCBpbmRleCA9ICRpbmRleCkge1xyXG4gICAgPGxpPlxyXG4gICAgICBAaWYgKCFsYXN0KSB7XHJcbiAgICAgICAgPGEgcmRzaXRlbGluayBbaHJlZl09XCJnZXRVcmwoYnJlYWRjcnVtYi51cmwpXCI+XHJcbiAgICAgICAgICBAaWYgKGZpcnN0KSB7XHJcbiAgICAgICAgICAgIDxjdXJhLWljb24gbmFtZT1cImhvbWVcIiBbYXR0ci5jb2xvcl09XCJsYWJlbEljb25Db2xvclwiIHNpemU9XCIxNlwiPiA8L2N1cmEtaWNvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICB7eyBicmVhZGNydW1iLmxhYmVsIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9hPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPi88L3NwYW4+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxzcGFuIFtjbGFzcy5sYXN0LWl0ZW1dPVwibGFzdCAmJiAhZmlyc3RcIj5cclxuICAgICAgICAgIHt7IGJyZWFkY3J1bWIubGFiZWwgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIH1cclxuICAgIDwvbGk+XHJcbiAgfVxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNNb2JpbGU+XHJcbiAgQGZvciAoYnJlYWRjcnVtYiBvZiBicmVhZGNydW1iczsgdHJhY2sgYnJlYWRjcnVtYi5sYWJlbDsgbGV0IGZpcnN0ID0gJGZpcnN0OyBsZXQgbGFzdCA9ICRsYXN0OyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcclxuICAgIDxsaT5cclxuICAgICAgQGlmIChmaXJzdCkge1xyXG4gICAgICAgIDxhIHJkc2l0ZWxpbmsgW2hyZWZdPVwiZ2V0VXJsKGJyZWFkY3J1bWIudXJsKVwiPlxyXG4gICAgICAgICAgPGN1cmEtaWNvbiBuYW1lPVwiaG9tZVwiIFthdHRyLmNvbG9yXT1cImxhYmVsSWNvbkNvbG9yXCIgc2l6ZT1cIjE2XCI+IDwvY3VyYS1pY29uPlxyXG4gICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgIHt7IGJyZWFkY3J1bWIubGFiZWwgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2E+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+Lzwvc3Bhbj5cclxuICAgICAgfSBAZWxzZSBpZiAoaW5kZXggPT09IGJyZWFkY3J1bWJzLmxlbmd0aCAtIDIpIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cImJhY2tcIj48PC9zcGFuPlxyXG4gICAgICAgIDxhIHJkc2l0ZWxpbmsgW2hyZWZdPVwiZ2V0VXJsKGJyZWFkY3J1bWIudXJsKVwiPlxyXG4gICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgIHt7IGJyZWFkY3J1bWIubGFiZWwgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2E+XHJcbiAgICAgIH1cclxuICAgIDwvbGk+XHJcbiAgfVxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
@@ -173,11 +173,11 @@ export class FilterGenericComponent {
173
173
  return Object.values(filterData).every((val) => val === null || val === '' || (Array.isArray(val) && val.length === 0));
174
174
  }
175
175
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FilterGenericComponent, deps: [{ token: i1.CuraService }, { token: i0.ChangeDetectorRef }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component }); }
176
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FilterGenericComponent, isStandalone: true, selector: "rdsite-filter-generic", inputs: { withContainerStyle: "withContainerStyle", showClearButton: "showClearButton", showApplyButton: "showApplyButton", showCloseButton: "showCloseButton", disableButtonsWithoutSelection: "disableButtonsWithoutSelection", showBadge: "showBadge", showToggleIcon: "showToggleIcon", isFilterOpen: "isFilterOpen", mobileBehavior: "mobileBehavior", forceCollapsed: "forceCollapsed", emitOnReset: "emitOnReset", textTitle: "textTitle", sections: "sections" }, outputs: { filterChange: "filterChange", closeModal: "closeModal", openMobileFilter: "openMobileFilter" }, host: { properties: { "style": "this.styleBinding" } }, ngImport: i0, template: "<div class=\"filter-generic\" [ngClass]=\"{ 'container-style': withContainerStyle }\" aria-label=\"Filtros\">\r\n <div class=\"filter-header-container\" [ngClass]=\"{ 'no-padding': !isFilterOpen, hidden: !isFilterOpen }\">\r\n <div class=\"filter-title-wrapper\">\r\n <cura-heading size=\"small\" level=\"4\" color=\"neutral-black\" weight=\"bold\" margin-block=\"0\" line-height=\"16px\">\r\n {{ textTitle }}\r\n </cura-heading>\r\n\r\n @if (showBadge) {\r\n <cura-badge-counter\r\n [type]=\"'solid'\"\r\n [color]=\"hasSelection() ? 'primary' : 'neutral'\"\r\n [number]=\"selectedFiltersCount\"\r\n class=\"filter-badge\"\r\n ></cura-badge-counter>\r\n }\r\n </div>\r\n\r\n @if (showToggleIcon) {\r\n <cura-button-transparent size=\"small\" font-color=\"dark\" color=\"primary\" text-align=\"center\" (click)=\"toggleFilter()\" [attr.aria-expanded]=\"isFilterOpen\">\r\n <cura-icon [name]=\"isFilterOpen ? 'up' : 'down'\" size=\"16\" class=\"filter-icon\" color=\"primary-dark\"></cura-icon>\r\n </cura-button-transparent>\r\n }\r\n </div>\r\n\r\n <div class=\"filter-content\" [class.hidden]=\"!isFilterOpen || (forceCollapsed && isMobile())\">\r\n @for (section of sections; track section.type) {\r\n @if (section.visible !== false) {\r\n <div class=\"filter-section\">\r\n @switch (section.type) {\r\n @case ('input') {\r\n <cura-input-text\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [name]=\"section.config.name || ''\"\r\n [iconName]=\"section.config.iconName || ''\"\r\n [attr.value]=\"section.config.control.value\"\r\n (valueChange)=\"handleInputChange($event, section.config.control)\"\r\n ></cura-input-text>\r\n }\r\n @case ('select') {\r\n <cura-select\r\n [label]=\"section.config.label || ''\"\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [attr.value]=\"section.config.control.value\"\r\n (selected)=\"handleSelectChange($event, section.config.control)\"\r\n >\r\n @if (section.config.includeDefaultOption) {\r\n <cura-select-option [attr.value]=\"''\">{{ section.config.defaultOptionText || 'Fa\u00E7a a sua Sele\u00E7\u00E3o' }}</cura-select-option>\r\n }\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-select-option [attr.value]=\"option?.value\">{{ option?.label }}</cura-select-option>\r\n }\r\n </cura-select>\r\n }\r\n @case ('checkbox-group') {\r\n <div class=\"filter-header\">\r\n <cura-icon name=\"filter\" size=\"20\" color=\"info-dark\"></cura-icon>\r\n <cura-heading size=\"xsmall\" level=\"5\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\">\r\n {{ section.config.title || 'Filtre por' }}\r\n </cura-heading>\r\n </div>\r\n\r\n @if (section.config.subtitle) {\r\n <div class=\"filter-subtitle\">\r\n <cura-heading size=\"xsmall\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\">\r\n {{ section.config.subtitle }}\r\n </cura-heading>\r\n </div>\r\n }\r\n\r\n @if (section.config.description) {\r\n <div class=\"filter-description\">\r\n <cura-paragraph size=\"xsmall\" color=\"neutral-dark\" margin-block=\"0\">\r\n {{ section.config.description }}\r\n </cura-paragraph>\r\n </div>\r\n }\r\n\r\n <div class=\"filter-checkboxes\">\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-checkbox\r\n color=\"primary\"\r\n size=\"small\"\r\n icon-color=\"light\"\r\n [attr.name]=\"option?.label\"\r\n [attr.label]=\"option?.label\"\r\n [attr.value]=\"option?.value\"\r\n [attr.checked]=\"option?.checked\"\r\n (onchange)=\"handleCheckboxChange($event, section.config.options)\"\r\n ></cura-checkbox>\r\n }\r\n </div>\r\n }\r\n @case ('radio-group') {\r\n <div class=\"filter-radios\">\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-radio\r\n [name]=\"section.config.name || 'radio-group'\"\r\n [label]=\"option.label\"\r\n [value]=\"option.value\"\r\n [checked]=\"getRadioGroupValue(section.config.control) === option.value\"\r\n (onchange)=\"handleRadioChange($event, section.config.control)\"\r\n ></cura-radio>\r\n }\r\n </div>\r\n }\r\n @case ('custom') {\r\n <ng-container *ngTemplateOutlet=\"section.config.template\"></ng-container>\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"filter-actions\" [class.hidden]=\"!isFilterOpen || (forceCollapsed && isMobile())\">\r\n <div class=\"main-actions\">\r\n @if (showClearButton) {\r\n <cura-button-transparent\r\n size=\"small\"\r\n font-color=\"dark\"\r\n color=\"primary\"\r\n text-align=\"center\"\r\n [disabled]=\"disableButtonsWithoutSelection && !hasSelection()\"\r\n (click)=\"reset()\"\r\n >\r\n <span>Limpar todos os filtros</span>\r\n </cura-button-transparent>\r\n }\r\n\r\n @if (showApplyButton) {\r\n <cura-button\r\n size=\"medium\"\r\n font-color=\"light\"\r\n color=\"primary\"\r\n text-align=\"center\"\r\n (click)=\"filter()\"\r\n [disabled]=\"disableButtonsWithoutSelection && !hasSelection()\"\r\n class=\"filter-button\"\r\n >\r\n Filtrar\r\n </cura-button>\r\n }\r\n </div>\r\n\r\n @if (showCloseButton) {\r\n <div class=\"divider-strong\"></div>\r\n <div class=\"close-action-wrapper\">\r\n <div class=\"close-action\" (click)=\"close()\">\r\n <cura-icon name=\"close\" color=\"error-dark\" size=\"small\"></cura-icon>\r\n <cura-button-transparent size=\"\" type=\"button\" color=\"error\" target=\"_self\"> Fechar </cura-button-transparent>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host *{font-family:Gotham,Roboto,sans-serif}.filter-generic{display:flex;flex-direction:column;gap:18px}.filter-generic.container-style{width:100%;padding:20px;border-radius:12px;border:2px solid var(--neutral-lighter);background-color:var(--neutral-purewhite)}.filter-generic cura-loader-circle{display:flex;justify-content:center;align-items:center;width:100%;min-height:100px}.filter-header-container{display:flex;padding-bottom:12px;align-items:center}.filter-header-container.no-padding{padding-bottom:0}.filter-header-container .filter-title-wrapper{display:flex;align-items:center;justify-content:space-between;flex:1 0 0}.filter-header-container .filter-badge{display:flex;height:20px;min-width:20px;justify-content:center;align-items:center;gap:4px}.filter-header-container .filter-icon{display:block}.filter-content,.filter-actions{transition:all .3s ease}.filter-content.hidden,.filter-actions.hidden{display:none;height:0;overflow:hidden;opacity:0;margin:0;padding:0}.filter-section{display:flex;flex-direction:column;gap:24px}.filter-section .filter-header{display:flex;align-items:center;gap:14px}.filter-section .filter-subtitle{font-weight:500}.filter-section .filter-description{display:flex;flex-direction:column;gap:8px}.filter-section .filter-description:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:12px;grid-column:1/-1}.filter-section .filter-checkboxes{display:grid;grid-template-columns:repeat(2,1fr);gap:11px 0px}.filter-section .filter-checkboxes:after{content:\"\";display:block;width:100%;height:1px;margin-top:12px;background-color:var(--neutral-light);grid-column:1/-1}.filter-section .filter-radios{display:flex;flex-direction:column;gap:12px}.filter-section .filter-radios:after{content:\"\";display:block;width:100%;height:1px;background:linear-gradient(90deg,var(--neutral-light) 75%,transparent 15%);background-size:10px 1px;background-repeat:repeat-x;margin-top:6px;grid-column:1/-1}.filter-actions{display:flex;flex-direction:column;gap:0}.filter-actions .main-actions{display:flex;justify-content:space-between;gap:16px;align-items:center}.filter-actions .divider-strong{height:1px;width:100%;margin-top:20px;margin-bottom:16px;background:linear-gradient(90deg,#e2e2e2 70%,transparent 70%);background-size:4px 1px;background-repeat:repeat-x}.filter-actions .close-action-wrapper{display:flex;justify-content:center;width:100%}.filter-actions .close-action{display:inline-flex;align-items:center;gap:8px}.filter-actions .close-action cura-button-transparent{padding:0;margin:0;background:transparent;border:none;color:inherit}.filter-actions cura-button,.filter-actions cura-button-transparent{flex:1}@media screen and (max-width: 1024px){.filter-checkboxes:after{background-color:transparent}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
176
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FilterGenericComponent, isStandalone: true, selector: "rdsite-filter-generic", inputs: { withContainerStyle: "withContainerStyle", showClearButton: "showClearButton", showApplyButton: "showApplyButton", showCloseButton: "showCloseButton", disableButtonsWithoutSelection: "disableButtonsWithoutSelection", showBadge: "showBadge", showToggleIcon: "showToggleIcon", isFilterOpen: "isFilterOpen", mobileBehavior: "mobileBehavior", forceCollapsed: "forceCollapsed", emitOnReset: "emitOnReset", textTitle: "textTitle", sections: "sections" }, outputs: { filterChange: "filterChange", closeModal: "closeModal", openMobileFilter: "openMobileFilter" }, host: { properties: { "style": "this.styleBinding" } }, ngImport: i0, template: "<div class=\"filter-generic\" [ngClass]=\"{ 'container-style': withContainerStyle }\" aria-label=\"Filtros\">\r\n <div class=\"filter-header-container\" [ngClass]=\"{ 'no-padding': !isFilterOpen, hidden: !isFilterOpen }\">\r\n <div class=\"filter-title-wrapper\">\r\n <cura-heading size=\"small\" level=\"4\" color=\"neutral-black\" weight=\"bold\" margin-block=\"0\" line-height=\"16px\">\r\n {{ textTitle }}\r\n </cura-heading>\r\n\r\n @if (showBadge) {\r\n <cura-badge-counter\r\n [type]=\"'solid'\"\r\n [color]=\"hasSelection() ? 'primary' : 'neutral'\"\r\n [number]=\"selectedFiltersCount\"\r\n class=\"filter-badge\"\r\n ></cura-badge-counter>\r\n }\r\n </div>\r\n\r\n @if (showToggleIcon) {\r\n <cura-button-transparent size=\"small\" font-color=\"dark\" color=\"primary\" text-align=\"center\" (click)=\"toggleFilter()\" [attr.aria-expanded]=\"isFilterOpen\">\r\n <cura-icon [name]=\"isFilterOpen ? 'up' : 'down'\" size=\"16\" class=\"filter-icon\" color=\"primary-dark\"></cura-icon>\r\n </cura-button-transparent>\r\n }\r\n </div>\r\n\r\n <div class=\"filter-content\" [class.hidden]=\"!isFilterOpen || (forceCollapsed && isMobile())\">\r\n @for (section of sections; track section.type) {\r\n @if (section.visible !== false) {\r\n <div class=\"filter-section\">\r\n @switch (section.type) {\r\n @case ('input') {\r\n <cura-input-text\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [name]=\"section.config.name || ''\"\r\n [iconName]=\"section.config.iconName || ''\"\r\n [attr.value]=\"section.config.control.value\"\r\n (valueChange)=\"handleInputChange($event, section.config.control)\"\r\n ></cura-input-text>\r\n }\r\n @case ('select') {\r\n <cura-select\r\n [label]=\"section.config.label || ''\"\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [attr.value]=\"section.config.control.value\"\r\n (selected)=\"handleSelectChange($event, section.config.control)\"\r\n >\r\n @if (section.config.includeDefaultOption) {\r\n <cura-select-option [attr.value]=\"''\">{{ section.config.defaultOptionText || 'Fa\u00E7a a sua Sele\u00E7\u00E3o' }}</cura-select-option>\r\n }\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-select-option [attr.value]=\"option?.value\">{{ option?.label }}</cura-select-option>\r\n }\r\n </cura-select>\r\n }\r\n @case ('checkbox-group') {\r\n <div class=\"filter-header\">\r\n <cura-icon name=\"filter\" size=\"20\" color=\"info-dark\"></cura-icon>\r\n <cura-heading size=\"xsmall\" level=\"5\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\">\r\n {{ section.config.title || 'Filtre por' }}\r\n </cura-heading>\r\n </div>\r\n\r\n @if (section.config.subtitle) {\r\n <div class=\"filter-subtitle\">\r\n <cura-heading size=\"xsmall\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\">\r\n {{ section.config.subtitle }}\r\n </cura-heading>\r\n </div>\r\n }\r\n\r\n @if (section.config.description) {\r\n <div class=\"filter-description\">\r\n <cura-paragraph size=\"xsmall\" color=\"neutral-dark\" margin-block=\"0\">\r\n {{ section.config.description }}\r\n </cura-paragraph>\r\n </div>\r\n }\r\n\r\n <div class=\"filter-checkboxes\">\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-checkbox\r\n color=\"primary\"\r\n size=\"small\"\r\n icon-color=\"light\"\r\n [attr.name]=\"option?.label\"\r\n [attr.label]=\"option?.label\"\r\n [attr.value]=\"option?.value\"\r\n [attr.checked]=\"option?.checked\"\r\n (onchange)=\"handleCheckboxChange($event, section.config.options)\"\r\n ></cura-checkbox>\r\n }\r\n </div>\r\n }\r\n @case ('radio-group') {\r\n <div class=\"filter-radios\">\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-radio\r\n [name]=\"section.config.name || 'radio-group'\"\r\n [label]=\"option.label\"\r\n [value]=\"option.value\"\r\n [checked]=\"getRadioGroupValue(section.config.control) === option.value\"\r\n (onchange)=\"handleRadioChange($event, section.config.control)\"\r\n ></cura-radio>\r\n }\r\n </div>\r\n }\r\n @case ('custom') {\r\n <ng-container *ngTemplateOutlet=\"section.config.template\"></ng-container>\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"filter-actions\" [class.hidden]=\"!isFilterOpen || (forceCollapsed && isMobile())\">\r\n <div class=\"main-actions\">\r\n @if (showClearButton) {\r\n <cura-button-transparent\r\n size=\"small\"\r\n font-color=\"dark\"\r\n color=\"primary\"\r\n text-align=\"center\"\r\n [disabled]=\"disableButtonsWithoutSelection && !hasSelection()\"\r\n (click)=\"reset()\"\r\n >\r\n <span>Limpar todos os filtros</span>\r\n </cura-button-transparent>\r\n }\r\n\r\n @if (showApplyButton) {\r\n <cura-button\r\n size=\"medium\"\r\n font-color=\"light\"\r\n color=\"primary\"\r\n text-align=\"center\"\r\n (click)=\"filter()\"\r\n [disabled]=\"disableButtonsWithoutSelection && !hasSelection()\"\r\n class=\"filter-button\"\r\n >\r\n Filtrar\r\n </cura-button>\r\n }\r\n </div>\r\n\r\n @if (showCloseButton) {\r\n <div class=\"divider-strong\"></div>\r\n <div class=\"close-action-wrapper\">\r\n <div class=\"close-action\" (click)=\"close()\">\r\n <cura-icon name=\"close\" color=\"error-dark\" size=\"small\"></cura-icon>\r\n <cura-button-transparent size=\"\" type=\"button\" color=\"error\" target=\"_self\"> Fechar </cura-button-transparent>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host *{font-family:Gotham,Roboto,sans-serif}.filter-generic{display:flex;flex-direction:column;gap:18px}.filter-generic.container-style{width:100%;padding:20px;border-radius:12px;border:2px solid var(--neutral-lighter);background-color:var(--neutral-purewhite)}.filter-generic cura-loader-circle{display:flex;justify-content:center;align-items:center;width:100%;min-height:100px}.filter-header-container{display:flex;padding-bottom:12px;align-items:center}.filter-header-container.no-padding{padding-bottom:0}.filter-header-container .filter-title-wrapper{display:flex;align-items:center;justify-content:space-between;flex:1 0 0}.filter-header-container .filter-badge{display:flex;height:20px;min-width:20px;justify-content:center;align-items:center;gap:4px}.filter-header-container .filter-icon{display:block}.filter-content,.filter-actions{transition:all .3s ease}.filter-content.hidden,.filter-actions.hidden{display:none;height:0;overflow:hidden;opacity:0;margin:0;padding:0}.filter-section{display:flex;flex-direction:column;gap:24px}.filter-section .filter-header{display:flex;align-items:center;gap:14px}.filter-section .filter-subtitle{font-weight:500}.filter-section .filter-description{display:flex;flex-direction:column;gap:8px}.filter-section .filter-description:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:12px;grid-column:1/-1}.filter-section .filter-checkboxes{display:grid;grid-template-columns:repeat(2,1fr);gap:11px 0px}.filter-section .filter-checkboxes:after{content:\"\";display:block;width:100%;height:1px;margin-top:12px;background-color:var(--neutral-light);grid-column:1/-1}.filter-section .filter-radios{display:flex;flex-direction:column;gap:12px}.filter-section .filter-radios:after{content:\"\";display:block;width:100%;height:1px;background:linear-gradient(90deg,var(--neutral-light) 75%,transparent 15%);background-size:10px 1px;background-repeat:repeat-x;margin-top:6px;grid-column:1/-1}.filter-actions{display:flex;flex-direction:column;gap:0}.filter-actions .main-actions{display:flex;justify-content:space-between;gap:24px;align-items:center}.filter-actions .divider-strong{height:1px;width:100%;margin-top:20px;margin-bottom:16px;background:linear-gradient(90deg,#e2e2e2 70%,transparent 70%);background-size:4px 1px;background-repeat:repeat-x}.filter-actions .close-action-wrapper{display:flex;justify-content:center;width:100%}.filter-actions .close-action{display:inline-flex;align-items:center;gap:8px}.filter-actions .close-action cura-button-transparent{padding:0;margin:0;background:transparent;border:none;color:inherit}.filter-actions cura-button,.filter-actions cura-button-transparent{flex:1}@media screen and (max-width: 1024px){.filter-checkboxes:after{background-color:transparent}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
177
177
  }
178
178
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FilterGenericComponent, decorators: [{
179
179
  type: Component,
180
- args: [{ selector: 'rdsite-filter-generic', standalone: true, imports: [CommonModule, ReactiveFormsModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<div class=\"filter-generic\" [ngClass]=\"{ 'container-style': withContainerStyle }\" aria-label=\"Filtros\">\r\n <div class=\"filter-header-container\" [ngClass]=\"{ 'no-padding': !isFilterOpen, hidden: !isFilterOpen }\">\r\n <div class=\"filter-title-wrapper\">\r\n <cura-heading size=\"small\" level=\"4\" color=\"neutral-black\" weight=\"bold\" margin-block=\"0\" line-height=\"16px\">\r\n {{ textTitle }}\r\n </cura-heading>\r\n\r\n @if (showBadge) {\r\n <cura-badge-counter\r\n [type]=\"'solid'\"\r\n [color]=\"hasSelection() ? 'primary' : 'neutral'\"\r\n [number]=\"selectedFiltersCount\"\r\n class=\"filter-badge\"\r\n ></cura-badge-counter>\r\n }\r\n </div>\r\n\r\n @if (showToggleIcon) {\r\n <cura-button-transparent size=\"small\" font-color=\"dark\" color=\"primary\" text-align=\"center\" (click)=\"toggleFilter()\" [attr.aria-expanded]=\"isFilterOpen\">\r\n <cura-icon [name]=\"isFilterOpen ? 'up' : 'down'\" size=\"16\" class=\"filter-icon\" color=\"primary-dark\"></cura-icon>\r\n </cura-button-transparent>\r\n }\r\n </div>\r\n\r\n <div class=\"filter-content\" [class.hidden]=\"!isFilterOpen || (forceCollapsed && isMobile())\">\r\n @for (section of sections; track section.type) {\r\n @if (section.visible !== false) {\r\n <div class=\"filter-section\">\r\n @switch (section.type) {\r\n @case ('input') {\r\n <cura-input-text\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [name]=\"section.config.name || ''\"\r\n [iconName]=\"section.config.iconName || ''\"\r\n [attr.value]=\"section.config.control.value\"\r\n (valueChange)=\"handleInputChange($event, section.config.control)\"\r\n ></cura-input-text>\r\n }\r\n @case ('select') {\r\n <cura-select\r\n [label]=\"section.config.label || ''\"\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [attr.value]=\"section.config.control.value\"\r\n (selected)=\"handleSelectChange($event, section.config.control)\"\r\n >\r\n @if (section.config.includeDefaultOption) {\r\n <cura-select-option [attr.value]=\"''\">{{ section.config.defaultOptionText || 'Fa\u00E7a a sua Sele\u00E7\u00E3o' }}</cura-select-option>\r\n }\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-select-option [attr.value]=\"option?.value\">{{ option?.label }}</cura-select-option>\r\n }\r\n </cura-select>\r\n }\r\n @case ('checkbox-group') {\r\n <div class=\"filter-header\">\r\n <cura-icon name=\"filter\" size=\"20\" color=\"info-dark\"></cura-icon>\r\n <cura-heading size=\"xsmall\" level=\"5\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\">\r\n {{ section.config.title || 'Filtre por' }}\r\n </cura-heading>\r\n </div>\r\n\r\n @if (section.config.subtitle) {\r\n <div class=\"filter-subtitle\">\r\n <cura-heading size=\"xsmall\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\">\r\n {{ section.config.subtitle }}\r\n </cura-heading>\r\n </div>\r\n }\r\n\r\n @if (section.config.description) {\r\n <div class=\"filter-description\">\r\n <cura-paragraph size=\"xsmall\" color=\"neutral-dark\" margin-block=\"0\">\r\n {{ section.config.description }}\r\n </cura-paragraph>\r\n </div>\r\n }\r\n\r\n <div class=\"filter-checkboxes\">\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-checkbox\r\n color=\"primary\"\r\n size=\"small\"\r\n icon-color=\"light\"\r\n [attr.name]=\"option?.label\"\r\n [attr.label]=\"option?.label\"\r\n [attr.value]=\"option?.value\"\r\n [attr.checked]=\"option?.checked\"\r\n (onchange)=\"handleCheckboxChange($event, section.config.options)\"\r\n ></cura-checkbox>\r\n }\r\n </div>\r\n }\r\n @case ('radio-group') {\r\n <div class=\"filter-radios\">\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-radio\r\n [name]=\"section.config.name || 'radio-group'\"\r\n [label]=\"option.label\"\r\n [value]=\"option.value\"\r\n [checked]=\"getRadioGroupValue(section.config.control) === option.value\"\r\n (onchange)=\"handleRadioChange($event, section.config.control)\"\r\n ></cura-radio>\r\n }\r\n </div>\r\n }\r\n @case ('custom') {\r\n <ng-container *ngTemplateOutlet=\"section.config.template\"></ng-container>\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"filter-actions\" [class.hidden]=\"!isFilterOpen || (forceCollapsed && isMobile())\">\r\n <div class=\"main-actions\">\r\n @if (showClearButton) {\r\n <cura-button-transparent\r\n size=\"small\"\r\n font-color=\"dark\"\r\n color=\"primary\"\r\n text-align=\"center\"\r\n [disabled]=\"disableButtonsWithoutSelection && !hasSelection()\"\r\n (click)=\"reset()\"\r\n >\r\n <span>Limpar todos os filtros</span>\r\n </cura-button-transparent>\r\n }\r\n\r\n @if (showApplyButton) {\r\n <cura-button\r\n size=\"medium\"\r\n font-color=\"light\"\r\n color=\"primary\"\r\n text-align=\"center\"\r\n (click)=\"filter()\"\r\n [disabled]=\"disableButtonsWithoutSelection && !hasSelection()\"\r\n class=\"filter-button\"\r\n >\r\n Filtrar\r\n </cura-button>\r\n }\r\n </div>\r\n\r\n @if (showCloseButton) {\r\n <div class=\"divider-strong\"></div>\r\n <div class=\"close-action-wrapper\">\r\n <div class=\"close-action\" (click)=\"close()\">\r\n <cura-icon name=\"close\" color=\"error-dark\" size=\"small\"></cura-icon>\r\n <cura-button-transparent size=\"\" type=\"button\" color=\"error\" target=\"_self\"> Fechar </cura-button-transparent>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host *{font-family:Gotham,Roboto,sans-serif}.filter-generic{display:flex;flex-direction:column;gap:18px}.filter-generic.container-style{width:100%;padding:20px;border-radius:12px;border:2px solid var(--neutral-lighter);background-color:var(--neutral-purewhite)}.filter-generic cura-loader-circle{display:flex;justify-content:center;align-items:center;width:100%;min-height:100px}.filter-header-container{display:flex;padding-bottom:12px;align-items:center}.filter-header-container.no-padding{padding-bottom:0}.filter-header-container .filter-title-wrapper{display:flex;align-items:center;justify-content:space-between;flex:1 0 0}.filter-header-container .filter-badge{display:flex;height:20px;min-width:20px;justify-content:center;align-items:center;gap:4px}.filter-header-container .filter-icon{display:block}.filter-content,.filter-actions{transition:all .3s ease}.filter-content.hidden,.filter-actions.hidden{display:none;height:0;overflow:hidden;opacity:0;margin:0;padding:0}.filter-section{display:flex;flex-direction:column;gap:24px}.filter-section .filter-header{display:flex;align-items:center;gap:14px}.filter-section .filter-subtitle{font-weight:500}.filter-section .filter-description{display:flex;flex-direction:column;gap:8px}.filter-section .filter-description:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:12px;grid-column:1/-1}.filter-section .filter-checkboxes{display:grid;grid-template-columns:repeat(2,1fr);gap:11px 0px}.filter-section .filter-checkboxes:after{content:\"\";display:block;width:100%;height:1px;margin-top:12px;background-color:var(--neutral-light);grid-column:1/-1}.filter-section .filter-radios{display:flex;flex-direction:column;gap:12px}.filter-section .filter-radios:after{content:\"\";display:block;width:100%;height:1px;background:linear-gradient(90deg,var(--neutral-light) 75%,transparent 15%);background-size:10px 1px;background-repeat:repeat-x;margin-top:6px;grid-column:1/-1}.filter-actions{display:flex;flex-direction:column;gap:0}.filter-actions .main-actions{display:flex;justify-content:space-between;gap:16px;align-items:center}.filter-actions .divider-strong{height:1px;width:100%;margin-top:20px;margin-bottom:16px;background:linear-gradient(90deg,#e2e2e2 70%,transparent 70%);background-size:4px 1px;background-repeat:repeat-x}.filter-actions .close-action-wrapper{display:flex;justify-content:center;width:100%}.filter-actions .close-action{display:inline-flex;align-items:center;gap:8px}.filter-actions .close-action cura-button-transparent{padding:0;margin:0;background:transparent;border:none;color:inherit}.filter-actions cura-button,.filter-actions cura-button-transparent{flex:1}@media screen and (max-width: 1024px){.filter-checkboxes:after{background-color:transparent}}\n"] }]
180
+ args: [{ selector: 'rdsite-filter-generic', standalone: true, imports: [CommonModule, ReactiveFormsModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<div class=\"filter-generic\" [ngClass]=\"{ 'container-style': withContainerStyle }\" aria-label=\"Filtros\">\r\n <div class=\"filter-header-container\" [ngClass]=\"{ 'no-padding': !isFilterOpen, hidden: !isFilterOpen }\">\r\n <div class=\"filter-title-wrapper\">\r\n <cura-heading size=\"small\" level=\"4\" color=\"neutral-black\" weight=\"bold\" margin-block=\"0\" line-height=\"16px\">\r\n {{ textTitle }}\r\n </cura-heading>\r\n\r\n @if (showBadge) {\r\n <cura-badge-counter\r\n [type]=\"'solid'\"\r\n [color]=\"hasSelection() ? 'primary' : 'neutral'\"\r\n [number]=\"selectedFiltersCount\"\r\n class=\"filter-badge\"\r\n ></cura-badge-counter>\r\n }\r\n </div>\r\n\r\n @if (showToggleIcon) {\r\n <cura-button-transparent size=\"small\" font-color=\"dark\" color=\"primary\" text-align=\"center\" (click)=\"toggleFilter()\" [attr.aria-expanded]=\"isFilterOpen\">\r\n <cura-icon [name]=\"isFilterOpen ? 'up' : 'down'\" size=\"16\" class=\"filter-icon\" color=\"primary-dark\"></cura-icon>\r\n </cura-button-transparent>\r\n }\r\n </div>\r\n\r\n <div class=\"filter-content\" [class.hidden]=\"!isFilterOpen || (forceCollapsed && isMobile())\">\r\n @for (section of sections; track section.type) {\r\n @if (section.visible !== false) {\r\n <div class=\"filter-section\">\r\n @switch (section.type) {\r\n @case ('input') {\r\n <cura-input-text\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [name]=\"section.config.name || ''\"\r\n [iconName]=\"section.config.iconName || ''\"\r\n [attr.value]=\"section.config.control.value\"\r\n (valueChange)=\"handleInputChange($event, section.config.control)\"\r\n ></cura-input-text>\r\n }\r\n @case ('select') {\r\n <cura-select\r\n [label]=\"section.config.label || ''\"\r\n [placeholder]=\"section.config.placeholder || ''\"\r\n [attr.value]=\"section.config.control.value\"\r\n (selected)=\"handleSelectChange($event, section.config.control)\"\r\n >\r\n @if (section.config.includeDefaultOption) {\r\n <cura-select-option [attr.value]=\"''\">{{ section.config.defaultOptionText || 'Fa\u00E7a a sua Sele\u00E7\u00E3o' }}</cura-select-option>\r\n }\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-select-option [attr.value]=\"option?.value\">{{ option?.label }}</cura-select-option>\r\n }\r\n </cura-select>\r\n }\r\n @case ('checkbox-group') {\r\n <div class=\"filter-header\">\r\n <cura-icon name=\"filter\" size=\"20\" color=\"info-dark\"></cura-icon>\r\n <cura-heading size=\"xsmall\" level=\"5\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\">\r\n {{ section.config.title || 'Filtre por' }}\r\n </cura-heading>\r\n </div>\r\n\r\n @if (section.config.subtitle) {\r\n <div class=\"filter-subtitle\">\r\n <cura-heading size=\"xsmall\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\">\r\n {{ section.config.subtitle }}\r\n </cura-heading>\r\n </div>\r\n }\r\n\r\n @if (section.config.description) {\r\n <div class=\"filter-description\">\r\n <cura-paragraph size=\"xsmall\" color=\"neutral-dark\" margin-block=\"0\">\r\n {{ section.config.description }}\r\n </cura-paragraph>\r\n </div>\r\n }\r\n\r\n <div class=\"filter-checkboxes\">\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-checkbox\r\n color=\"primary\"\r\n size=\"small\"\r\n icon-color=\"light\"\r\n [attr.name]=\"option?.label\"\r\n [attr.label]=\"option?.label\"\r\n [attr.value]=\"option?.value\"\r\n [attr.checked]=\"option?.checked\"\r\n (onchange)=\"handleCheckboxChange($event, section.config.options)\"\r\n ></cura-checkbox>\r\n }\r\n </div>\r\n }\r\n @case ('radio-group') {\r\n <div class=\"filter-radios\">\r\n @for (option of section.config.options || []; track option?.value) {\r\n <cura-radio\r\n [name]=\"section.config.name || 'radio-group'\"\r\n [label]=\"option.label\"\r\n [value]=\"option.value\"\r\n [checked]=\"getRadioGroupValue(section.config.control) === option.value\"\r\n (onchange)=\"handleRadioChange($event, section.config.control)\"\r\n ></cura-radio>\r\n }\r\n </div>\r\n }\r\n @case ('custom') {\r\n <ng-container *ngTemplateOutlet=\"section.config.template\"></ng-container>\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"filter-actions\" [class.hidden]=\"!isFilterOpen || (forceCollapsed && isMobile())\">\r\n <div class=\"main-actions\">\r\n @if (showClearButton) {\r\n <cura-button-transparent\r\n size=\"small\"\r\n font-color=\"dark\"\r\n color=\"primary\"\r\n text-align=\"center\"\r\n [disabled]=\"disableButtonsWithoutSelection && !hasSelection()\"\r\n (click)=\"reset()\"\r\n >\r\n <span>Limpar todos os filtros</span>\r\n </cura-button-transparent>\r\n }\r\n\r\n @if (showApplyButton) {\r\n <cura-button\r\n size=\"medium\"\r\n font-color=\"light\"\r\n color=\"primary\"\r\n text-align=\"center\"\r\n (click)=\"filter()\"\r\n [disabled]=\"disableButtonsWithoutSelection && !hasSelection()\"\r\n class=\"filter-button\"\r\n >\r\n Filtrar\r\n </cura-button>\r\n }\r\n </div>\r\n\r\n @if (showCloseButton) {\r\n <div class=\"divider-strong\"></div>\r\n <div class=\"close-action-wrapper\">\r\n <div class=\"close-action\" (click)=\"close()\">\r\n <cura-icon name=\"close\" color=\"error-dark\" size=\"small\"></cura-icon>\r\n <cura-button-transparent size=\"\" type=\"button\" color=\"error\" target=\"_self\"> Fechar </cura-button-transparent>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host *{font-family:Gotham,Roboto,sans-serif}.filter-generic{display:flex;flex-direction:column;gap:18px}.filter-generic.container-style{width:100%;padding:20px;border-radius:12px;border:2px solid var(--neutral-lighter);background-color:var(--neutral-purewhite)}.filter-generic cura-loader-circle{display:flex;justify-content:center;align-items:center;width:100%;min-height:100px}.filter-header-container{display:flex;padding-bottom:12px;align-items:center}.filter-header-container.no-padding{padding-bottom:0}.filter-header-container .filter-title-wrapper{display:flex;align-items:center;justify-content:space-between;flex:1 0 0}.filter-header-container .filter-badge{display:flex;height:20px;min-width:20px;justify-content:center;align-items:center;gap:4px}.filter-header-container .filter-icon{display:block}.filter-content,.filter-actions{transition:all .3s ease}.filter-content.hidden,.filter-actions.hidden{display:none;height:0;overflow:hidden;opacity:0;margin:0;padding:0}.filter-section{display:flex;flex-direction:column;gap:24px}.filter-section .filter-header{display:flex;align-items:center;gap:14px}.filter-section .filter-subtitle{font-weight:500}.filter-section .filter-description{display:flex;flex-direction:column;gap:8px}.filter-section .filter-description:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:12px;grid-column:1/-1}.filter-section .filter-checkboxes{display:grid;grid-template-columns:repeat(2,1fr);gap:11px 0px}.filter-section .filter-checkboxes:after{content:\"\";display:block;width:100%;height:1px;margin-top:12px;background-color:var(--neutral-light);grid-column:1/-1}.filter-section .filter-radios{display:flex;flex-direction:column;gap:12px}.filter-section .filter-radios:after{content:\"\";display:block;width:100%;height:1px;background:linear-gradient(90deg,var(--neutral-light) 75%,transparent 15%);background-size:10px 1px;background-repeat:repeat-x;margin-top:6px;grid-column:1/-1}.filter-actions{display:flex;flex-direction:column;gap:0}.filter-actions .main-actions{display:flex;justify-content:space-between;gap:24px;align-items:center}.filter-actions .divider-strong{height:1px;width:100%;margin-top:20px;margin-bottom:16px;background:linear-gradient(90deg,#e2e2e2 70%,transparent 70%);background-size:4px 1px;background-repeat:repeat-x}.filter-actions .close-action-wrapper{display:flex;justify-content:center;width:100%}.filter-actions .close-action{display:inline-flex;align-items:center;gap:8px}.filter-actions .close-action cura-button-transparent{padding:0;margin:0;background:transparent;border:none;color:inherit}.filter-actions cura-button,.filter-actions cura-button-transparent{flex:1}@media screen and (max-width: 1024px){.filter-checkboxes:after{background-color:transparent}}\n"] }]
181
181
  }], ctorParameters: () => [{ type: i1.CuraService }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
182
182
  type: Inject,
183
183
  args: [PLATFORM_ID]
@@ -95,11 +95,11 @@ export class FilterPlanosConveniosComponent {
95
95
  this.coberturaControl.reset(this.coberturas);
96
96
  }
97
97
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FilterPlanosConveniosComponent, deps: [{ token: i1.CuraService }], target: i0.ɵɵFactoryTarget.Component }); }
98
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FilterPlanosConveniosComponent, isStandalone: true, selector: "rdsite-filter-planos-convenios", inputs: { withContainerStyle: "withContainerStyle", isLoading: "isLoading", emitOnChange: "emitOnChange", initialEstado: "initialEstado", estados: "estados", coberturas: "coberturas", unidadeControl: "unidadeControl", estadoControl: "estadoControl" }, outputs: { filterChange: "filterChange", closeModal: "closeModal" }, host: { properties: { "style": "this.styleBinding" } }, ngImport: i0, template: "<div class=\"filter-planos-convenios\" [ngClass]=\"{ 'container-style': withContainerStyle }\">\r\n @if (!isLoading) {\r\n <cura-heading size=\"small\" level=\"4\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\"> Refine sua busca </cura-heading>\r\n\r\n <div class=\"filter-planos-convenios-unidade\">\r\n <cura-input-text\r\n placeholder=\"Nome da unidade\"\r\n name=\"unidade-input\"\r\n icon-name=\"search\"\r\n autocomplete=\"off\"\r\n [attr.value]=\"unidadeControl.value\"\r\n (valueChange)=\"inputTextChange($event)\"\r\n ></cura-input-text>\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-estado\">\r\n @if (estados) {\r\n <cura-select\r\n label=\"Selecione o estado\"\r\n placeholder=\"Fa\u00E7a a sua Sele\u00E7\u00E3o\"\r\n mode=\"default\"\r\n size=\"medium\"\r\n status=\"default\"\r\n [attr.value]=\"estadoControl.value\"\r\n (selected)=\"selectChange($event)\"\r\n >\r\n <cura-select-option [attr.value]=\"''\">Fa\u00E7a a sua Sele\u00E7\u00E3o</cura-select-option>\r\n\r\n @for (estado of estados || []; track estado?.value) {\r\n <cura-select-option [attr.value]=\"estado?.value\">{{ estado?.label }}</cura-select-option>\r\n }\r\n </cura-select>\r\n }\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-cobertura\">\r\n <cura-icon name=\"filter\" size=\"20\" color=\"info-dark\"></cura-icon>\r\n <cura-heading size=\"xsmall\" level=\"5\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\">\r\n Filtre pela cobertura do seu plano\r\n </cura-heading>\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-content\">\r\n <cura-heading size=\"xsmall\" level=\"5\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\"> Tipos de cobertura </cura-heading>\r\n <cura-paragraph size=\"xsmall\" color=\"neutral-dark\" margin-block=\"0\">\r\n Voc\u00EA pode selecionar uma ou mais portas de entrada, de acordo com a cobertura do seu plano.\r\n </cura-paragraph>\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-checkboxes\">\r\n @for (option of coberturas || []; track option?.value) {\r\n <cura-checkbox\r\n color=\"primary\"\r\n size=\"small\"\r\n icon-color=\"light\"\r\n [attr.name]=\"option?.label\"\r\n [attr.label]=\"option?.label\"\r\n [attr.value]=\"option?.value\"\r\n [attr.checked]=\"option?.checked\"\r\n (onchange)=\"checkboxChange($event)\"\r\n >\r\n </cura-checkbox>\r\n }\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-buttons\">\r\n <cura-button-transparent size=\"small\" color=\"primary\" font-color=\"dark\" text-align=\"center\" (click)=\"reset()\">\r\n <span> Limpar todos os filtros </span>\r\n </cura-button-transparent>\r\n\r\n <cura-button size=\"medium\" color=\"primary\" font-color=\"light\" background=\"light\" text-align=\"center\" (click)=\"filter()\"> Filtrar </cura-button>\r\n </div>\r\n } @else {\r\n <cura-loader-circle color=\"primary\" size=\"small\"> </cura-loader-circle>\r\n }\r\n</div>\r\n", styles: [".filter-planos-convenios{display:flex;flex-direction:column;gap:23px}.filter-planos-convenios.container-style{width:100%;padding:20px;border-radius:4px;border:1px solid var(--neutral-lighter, #e2e2e2);background-color:var(--neutral-purewhite, #ffffff)}.filter-planos-convenios-cobertura{color:var(--neutral-darker);display:flex;align-items:center;gap:14px}.filter-planos-convenios-content{display:flex;flex-direction:column;gap:10px}.filter-planos-convenios-content:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:13px}.filter-planos-convenios-checkboxes{display:grid;grid-template-columns:repeat(2,1fr);gap:11px 0px}.filter-planos-convenios-checkboxes:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:12px;grid-column:1/-1}.filter-planos-convenios-buttons{display:flex;gap:10px;justify-content:space-between}.filter-planos-convenios-buttons cura-button-transparent{display:flex;flex:1 0 0;max-width:170px}.filter-planos-convenios-buttons cura-button-transparent span{line-height:13px;letter-spacing:.72px;text-align:left}.filter-planos-convenios-buttons cura-button{display:flex;flex:0 0 100px}cura-loader-circle{display:flex;justify-content:center;align-items:center;width:100%;min-height:100px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
98
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FilterPlanosConveniosComponent, isStandalone: true, selector: "rdsite-filter-planos-convenios", inputs: { withContainerStyle: "withContainerStyle", isLoading: "isLoading", emitOnChange: "emitOnChange", initialEstado: "initialEstado", estados: "estados", coberturas: "coberturas", unidadeControl: "unidadeControl", estadoControl: "estadoControl" }, outputs: { filterChange: "filterChange", closeModal: "closeModal" }, host: { properties: { "style": "this.styleBinding" } }, ngImport: i0, template: "<div class=\"filter-planos-convenios\" [ngClass]=\"{ 'container-style': withContainerStyle }\">\n @if (!isLoading) {\n <cura-heading size=\"small\" level=\"4\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\"> Refine sua busca </cura-heading>\n\n <div class=\"filter-planos-convenios-unidade\">\n <cura-input-text\n placeholder=\"Nome da unidade\"\n name=\"unidade-input\"\n icon-name=\"search\"\n autocomplete=\"off\"\n [attr.value]=\"unidadeControl.value\"\n (valueChange)=\"inputTextChange($event)\"\n ></cura-input-text>\n </div>\n\n <div class=\"filter-planos-convenios-estado\">\n @if (estados) {\n <cura-select\n label=\"Selecione o estado\"\n placeholder=\"Fa\u00E7a a sua Sele\u00E7\u00E3o\"\n mode=\"default\"\n size=\"medium\"\n status=\"default\"\n [attr.value]=\"estadoControl.value\"\n (selected)=\"selectChange($event)\"\n >\n <cura-select-option [attr.value]=\"''\">Fa\u00E7a a sua Sele\u00E7\u00E3o</cura-select-option>\n\n @for (estado of estados || []; track estado?.value) {\n <cura-select-option [attr.value]=\"estado?.value\">{{ estado?.label }}</cura-select-option>\n }\n </cura-select>\n }\n </div>\n\n <div class=\"filter-planos-convenios-cobertura\">\n <cura-icon name=\"filter\" size=\"20\" color=\"info-dark\"></cura-icon>\n <cura-heading size=\"xsmall\" level=\"5\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\">\n Filtre pela cobertura do seu plano\n </cura-heading>\n </div>\n\n <div class=\"filter-planos-convenios-content\">\n <cura-heading size=\"xsmall\" level=\"5\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\"> Tipos de cobertura </cura-heading>\n <cura-paragraph size=\"xsmall\" color=\"neutral-dark\" margin-block=\"0\">\n Voc\u00EA pode selecionar uma ou mais portas de entrada, de acordo com a cobertura do seu plano.\n </cura-paragraph>\n </div>\n\n <div class=\"filter-planos-convenios-checkboxes\">\n @for (option of coberturas || []; track option?.value) {\n <cura-checkbox\n color=\"primary\"\n size=\"small\"\n icon-color=\"light\"\n [attr.name]=\"option?.label\"\n [attr.label]=\"option?.label\"\n [attr.value]=\"option?.value\"\n [attr.checked]=\"option?.checked\"\n (onchange)=\"checkboxChange($event)\"\n >\n </cura-checkbox>\n }\n </div>\n\n <div class=\"filter-planos-convenios-buttons\">\n <cura-button-transparent size=\"small\" color=\"primary\" font-color=\"dark\" text-align=\"center\" (click)=\"reset()\">\n <span> Limpar todos os filtros </span>\n </cura-button-transparent>\n\n <cura-button size=\"medium\" color=\"primary\" font-color=\"light\" background=\"light\" text-align=\"center\" (click)=\"filter()\"> Filtrar </cura-button>\n </div>\n } @else {\n <cura-loader-circle color=\"primary\" size=\"small\"> </cura-loader-circle>\n }\n</div>\n", styles: [".filter-planos-convenios{display:flex;flex-direction:column;gap:23px}.filter-planos-convenios.container-style{width:100%;padding:20px;border-radius:4px;border:1px solid var(--neutral-lighter, #e2e2e2);background-color:var(--neutral-purewhite, #ffffff)}.filter-planos-convenios-cobertura{color:var(--neutral-darker);display:flex;align-items:center;gap:14px}.filter-planos-convenios-content{display:flex;flex-direction:column;gap:10px}.filter-planos-convenios-content:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:13px}.filter-planos-convenios-checkboxes{display:grid;grid-template-columns:repeat(2,1fr);gap:11px 0px}.filter-planos-convenios-checkboxes:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:12px;grid-column:1/-1}.filter-planos-convenios-buttons{display:flex;gap:10px;justify-content:space-between}.filter-planos-convenios-buttons cura-button-transparent{display:flex;flex:1 0 0;max-width:170px}.filter-planos-convenios-buttons cura-button-transparent span{line-height:13px;letter-spacing:.72px;text-align:left}.filter-planos-convenios-buttons cura-button{display:flex;flex:0 0 100px}cura-loader-circle{display:flex;justify-content:center;align-items:center;width:100%;min-height:100px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
99
99
  }
100
100
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FilterPlanosConveniosComponent, decorators: [{
101
101
  type: Component,
102
- args: [{ selector: 'rdsite-filter-planos-convenios', standalone: true, imports: [CommonModule, ReactiveFormsModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<div class=\"filter-planos-convenios\" [ngClass]=\"{ 'container-style': withContainerStyle }\">\r\n @if (!isLoading) {\r\n <cura-heading size=\"small\" level=\"4\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\"> Refine sua busca </cura-heading>\r\n\r\n <div class=\"filter-planos-convenios-unidade\">\r\n <cura-input-text\r\n placeholder=\"Nome da unidade\"\r\n name=\"unidade-input\"\r\n icon-name=\"search\"\r\n autocomplete=\"off\"\r\n [attr.value]=\"unidadeControl.value\"\r\n (valueChange)=\"inputTextChange($event)\"\r\n ></cura-input-text>\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-estado\">\r\n @if (estados) {\r\n <cura-select\r\n label=\"Selecione o estado\"\r\n placeholder=\"Fa\u00E7a a sua Sele\u00E7\u00E3o\"\r\n mode=\"default\"\r\n size=\"medium\"\r\n status=\"default\"\r\n [attr.value]=\"estadoControl.value\"\r\n (selected)=\"selectChange($event)\"\r\n >\r\n <cura-select-option [attr.value]=\"''\">Fa\u00E7a a sua Sele\u00E7\u00E3o</cura-select-option>\r\n\r\n @for (estado of estados || []; track estado?.value) {\r\n <cura-select-option [attr.value]=\"estado?.value\">{{ estado?.label }}</cura-select-option>\r\n }\r\n </cura-select>\r\n }\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-cobertura\">\r\n <cura-icon name=\"filter\" size=\"20\" color=\"info-dark\"></cura-icon>\r\n <cura-heading size=\"xsmall\" level=\"5\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\">\r\n Filtre pela cobertura do seu plano\r\n </cura-heading>\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-content\">\r\n <cura-heading size=\"xsmall\" level=\"5\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\"> Tipos de cobertura </cura-heading>\r\n <cura-paragraph size=\"xsmall\" color=\"neutral-dark\" margin-block=\"0\">\r\n Voc\u00EA pode selecionar uma ou mais portas de entrada, de acordo com a cobertura do seu plano.\r\n </cura-paragraph>\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-checkboxes\">\r\n @for (option of coberturas || []; track option?.value) {\r\n <cura-checkbox\r\n color=\"primary\"\r\n size=\"small\"\r\n icon-color=\"light\"\r\n [attr.name]=\"option?.label\"\r\n [attr.label]=\"option?.label\"\r\n [attr.value]=\"option?.value\"\r\n [attr.checked]=\"option?.checked\"\r\n (onchange)=\"checkboxChange($event)\"\r\n >\r\n </cura-checkbox>\r\n }\r\n </div>\r\n\r\n <div class=\"filter-planos-convenios-buttons\">\r\n <cura-button-transparent size=\"small\" color=\"primary\" font-color=\"dark\" text-align=\"center\" (click)=\"reset()\">\r\n <span> Limpar todos os filtros </span>\r\n </cura-button-transparent>\r\n\r\n <cura-button size=\"medium\" color=\"primary\" font-color=\"light\" background=\"light\" text-align=\"center\" (click)=\"filter()\"> Filtrar </cura-button>\r\n </div>\r\n } @else {\r\n <cura-loader-circle color=\"primary\" size=\"small\"> </cura-loader-circle>\r\n }\r\n</div>\r\n", styles: [".filter-planos-convenios{display:flex;flex-direction:column;gap:23px}.filter-planos-convenios.container-style{width:100%;padding:20px;border-radius:4px;border:1px solid var(--neutral-lighter, #e2e2e2);background-color:var(--neutral-purewhite, #ffffff)}.filter-planos-convenios-cobertura{color:var(--neutral-darker);display:flex;align-items:center;gap:14px}.filter-planos-convenios-content{display:flex;flex-direction:column;gap:10px}.filter-planos-convenios-content:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:13px}.filter-planos-convenios-checkboxes{display:grid;grid-template-columns:repeat(2,1fr);gap:11px 0px}.filter-planos-convenios-checkboxes:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:12px;grid-column:1/-1}.filter-planos-convenios-buttons{display:flex;gap:10px;justify-content:space-between}.filter-planos-convenios-buttons cura-button-transparent{display:flex;flex:1 0 0;max-width:170px}.filter-planos-convenios-buttons cura-button-transparent span{line-height:13px;letter-spacing:.72px;text-align:left}.filter-planos-convenios-buttons cura-button{display:flex;flex:0 0 100px}cura-loader-circle{display:flex;justify-content:center;align-items:center;width:100%;min-height:100px}\n"] }]
102
+ args: [{ selector: 'rdsite-filter-planos-convenios', standalone: true, imports: [CommonModule, ReactiveFormsModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<div class=\"filter-planos-convenios\" [ngClass]=\"{ 'container-style': withContainerStyle }\">\n @if (!isLoading) {\n <cura-heading size=\"small\" level=\"4\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\"> Refine sua busca </cura-heading>\n\n <div class=\"filter-planos-convenios-unidade\">\n <cura-input-text\n placeholder=\"Nome da unidade\"\n name=\"unidade-input\"\n icon-name=\"search\"\n autocomplete=\"off\"\n [attr.value]=\"unidadeControl.value\"\n (valueChange)=\"inputTextChange($event)\"\n ></cura-input-text>\n </div>\n\n <div class=\"filter-planos-convenios-estado\">\n @if (estados) {\n <cura-select\n label=\"Selecione o estado\"\n placeholder=\"Fa\u00E7a a sua Sele\u00E7\u00E3o\"\n mode=\"default\"\n size=\"medium\"\n status=\"default\"\n [attr.value]=\"estadoControl.value\"\n (selected)=\"selectChange($event)\"\n >\n <cura-select-option [attr.value]=\"''\">Fa\u00E7a a sua Sele\u00E7\u00E3o</cura-select-option>\n\n @for (estado of estados || []; track estado?.value) {\n <cura-select-option [attr.value]=\"estado?.value\">{{ estado?.label }}</cura-select-option>\n }\n </cura-select>\n }\n </div>\n\n <div class=\"filter-planos-convenios-cobertura\">\n <cura-icon name=\"filter\" size=\"20\" color=\"info-dark\"></cura-icon>\n <cura-heading size=\"xsmall\" level=\"5\" weight=\"bold\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\">\n Filtre pela cobertura do seu plano\n </cura-heading>\n </div>\n\n <div class=\"filter-planos-convenios-content\">\n <cura-heading size=\"xsmall\" level=\"5\" color=\"neutral-black\" margin-block=\"0\" line-height=\"16px\"> Tipos de cobertura </cura-heading>\n <cura-paragraph size=\"xsmall\" color=\"neutral-dark\" margin-block=\"0\">\n Voc\u00EA pode selecionar uma ou mais portas de entrada, de acordo com a cobertura do seu plano.\n </cura-paragraph>\n </div>\n\n <div class=\"filter-planos-convenios-checkboxes\">\n @for (option of coberturas || []; track option?.value) {\n <cura-checkbox\n color=\"primary\"\n size=\"small\"\n icon-color=\"light\"\n [attr.name]=\"option?.label\"\n [attr.label]=\"option?.label\"\n [attr.value]=\"option?.value\"\n [attr.checked]=\"option?.checked\"\n (onchange)=\"checkboxChange($event)\"\n >\n </cura-checkbox>\n }\n </div>\n\n <div class=\"filter-planos-convenios-buttons\">\n <cura-button-transparent size=\"small\" color=\"primary\" font-color=\"dark\" text-align=\"center\" (click)=\"reset()\">\n <span> Limpar todos os filtros </span>\n </cura-button-transparent>\n\n <cura-button size=\"medium\" color=\"primary\" font-color=\"light\" background=\"light\" text-align=\"center\" (click)=\"filter()\"> Filtrar </cura-button>\n </div>\n } @else {\n <cura-loader-circle color=\"primary\" size=\"small\"> </cura-loader-circle>\n }\n</div>\n", styles: [".filter-planos-convenios{display:flex;flex-direction:column;gap:23px}.filter-planos-convenios.container-style{width:100%;padding:20px;border-radius:4px;border:1px solid var(--neutral-lighter, #e2e2e2);background-color:var(--neutral-purewhite, #ffffff)}.filter-planos-convenios-cobertura{color:var(--neutral-darker);display:flex;align-items:center;gap:14px}.filter-planos-convenios-content{display:flex;flex-direction:column;gap:10px}.filter-planos-convenios-content:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:13px}.filter-planos-convenios-checkboxes{display:grid;grid-template-columns:repeat(2,1fr);gap:11px 0px}.filter-planos-convenios-checkboxes:after{content:\"\";display:block;width:100%;height:1px;background-color:var(--neutral-light);margin-top:12px;grid-column:1/-1}.filter-planos-convenios-buttons{display:flex;gap:10px;justify-content:space-between}.filter-planos-convenios-buttons cura-button-transparent{display:flex;flex:1 0 0;max-width:170px}.filter-planos-convenios-buttons cura-button-transparent span{line-height:13px;letter-spacing:.72px;text-align:left}.filter-planos-convenios-buttons cura-button{display:flex;flex:0 0 100px}cura-loader-circle{display:flex;justify-content:center;align-items:center;width:100%;min-height:100px}\n"] }]
103
103
  }], ctorParameters: () => [{ type: i1.CuraService }], propDecorators: { filterChange: [{
104
104
  type: Output
105
105
  }], closeModal: [{
@@ -124,4 +124,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
124
124
  type: HostBinding,
125
125
  args: ['style']
126
126
  }] } });
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2l0ZS1mcm9udC1lbmQtbGliL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXJzL2ZpbHRlci1wbGFub3MtY29udmVuaW9zL2ZpbHRlci1wbGFub3MtY29udmVuaW9zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpdGUtZnJvbnQtZW5kLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVycy9maWx0ZXItcGxhbm9zLWNvbnZlbmlvcy9maWx0ZXItcGxhbm9zLWNvbnZlbmlvcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFvQnpDLE1BQU0sT0FBTyw4QkFBOEI7SUFpQ3pDLFlBQTZCLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBaEMzQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUErQixDQUFDO1FBQy9ELGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTFDLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUNwQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRTlCLGtCQUFhLEdBQXFDLElBQUksQ0FBQztRQUV2RCxZQUFPLEdBQTRCLE1B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T0FBTztzQkFBZixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBT0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdnQixZQUFZO3NCQUFqQyxXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEVzdGFkb3MgfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IEZpbHRlclBsYW5vc0NvbnZlbmlvcywgRmlsdGVyUGxhbm9zQ29udmVuaW9zQ2hhbmdlLCBGaWx0ZXJQbGFub3NDb252ZW5pb3NDb2JlcnR1cmEgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZmlsdGVycy9maWx0ZXItcGxhbm9zLWNvbnZlbmlvcy5tb2RlbCc7XHJcbmltcG9ydCB7IEN1cmFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbmltcG9ydCB0eXBlICogYXMgXyBmcm9tICdAcmVkZWRvci9jdXJhL2Rpc3QvdHlwZXMvY29tcG9uZW50cy5qcyc7XHJcblxyXG5pbnRlcmZhY2UgQ3VyYUNoZWNrYm94T3B0aW9uPFQgPSBhbnk+IHtcclxuICB2YWx1ZTogVDtcclxuICBjaGVja2VkOiBib29sZWFuO1xyXG4gIGluZGV0ZXJtaW5hdGU/OiBib29sZWFuO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Jkc2l0ZS1maWx0ZXItcGxhbm9zLWNvbnZlbmlvcycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci1wbGFub3MtY29udmVuaW9zLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXItcGxhbm9zLWNvbnZlbmlvcy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyUGxhbm9zQ29udmVuaW9zQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQE91dHB1dCgpIGZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyUGxhbm9zQ29udmVuaW9zQ2hhbmdlPigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZU1vZGFsID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBASW5wdXQoKSB3aXRoQ29udGFpbmVyU3R5bGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBlbWl0T25DaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgaW5pdGlhbEVzdGFkbzogRXN0YWRvcyB8IHN0cmluZyB8IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSBlc3RhZG9zOiBGaWx0ZXJQbGFub3NDb252ZW5pb3NbXSA9IE9iamVjdC5lbnRyaWVzKEVzdGFkb3MpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoe1xyXG4gICAgbGFiZWw6IHZhbHVlLFxyXG4gICAgdmFsdWU6IGtleSxcclxuICB9KSk7XHJcblxyXG4gIEBJbnB1dCgpIGNvYmVydHVyYXM6IEZpbHRlclBsYW5vc0NvbnZlbmlvc0NvYmVydHVyYVtdID0gW1xyXG4gICAgeyBsYWJlbDogJ0NvbnN1bHRhcycsIHZhbHVlOiAnRkxBR19BQ0VJVEFfQU1CVUxBVE9SSU8nLCBjaGVja2VkOiBmYWxzZSB9LFxyXG4gICAgeyBsYWJlbDogJ0VtZXJnw6puY2lhJywgdmFsdWU6ICdGTEFHX0FDRUlUQV9QUycsIGNoZWNrZWQ6IGZhbHNlIH0sXHJcbiAgICB7IGxhYmVsOiAnRXhhbWVzJywgdmFsdWU6ICdGTEFHX0FDRUlUQV9FWEFNRScsIGNoZWNrZWQ6IGZhbHNlIH0sXHJcbiAgICB7IGxhYmVsOiAnSW50ZXJuYcOnw6NvJywgdmFsdWU6ICdGTEFHX0FDRUlUQV9JTlRFUk5BQ0FPJywgY2hlY2tlZDogZmFsc2UgfSxcclxuICBdO1xyXG5cclxuICBASW5wdXQoKSB1bmlkYWRlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudW1iZXIgfCBudWxsPignJyk7XHJcbiAgQElucHV0KCkgZXN0YWRvQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxFc3RhZG9zIHwgc3RyaW5nIHwgbnVtYmVyIHwgbnVsbD4oJycpO1xyXG4gIGNvYmVydHVyYUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8RmlsdGVyUGxhbm9zQ29udmVuaW9zQ29iZXJ0dXJhW10+KHRoaXMuY29iZXJ0dXJhcyB8fCBbXSk7XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUnKSBzdHlsZUJpbmRpbmcgPSB7XHJcbiAgICAnLS1uZXV0cmFsLWRhcmtlcic6IHRoaXMuY3VyYVNlcnZpY2UuZ2V0Q29sb3IoJ25ldXRyYWwtZGFya2VyJyksXHJcbiAgICAnLS1uZXV0cmFsLWxpZ2h0JzogdGhpcy5jdXJhU2VydmljZS5nZXRDb2xvcignbmV1dHJhbC1saWdodCcpLFxyXG4gICAgJy0tbmV1dHJhbC1saWdodGVyJzogdGhpcy5jdXJhU2VydmljZS5nZXRDb2xvcignbmV1dHJhbC1saWdodGVyJyksXHJcbiAgICAnLS1uZXV0cmFsLXB1cmV3aGl0ZSc6IHRoaXMuY3VyYVNlcnZpY2UuZ2V0Q29sb3IoJ25ldXRyYWwtcHVyZXdoaXRlJyksXHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjdXJhU2VydmljZTogQ3VyYVNlcnZpY2UpIHt9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmluaXRpYWxFc3RhZG8gJiYgQXJyYXkuaXNBcnJheSh0aGlzLmVzdGFkb3MpICYmIHRoaXMuZXN0YWRvcy5maW5kKChlc3RhZG8pID0+IGVzdGFkby52YWx1ZSA9PT0gdGhpcy5pbml0aWFsRXN0YWRvKSkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmVzdGFkb0NvbnRyb2wuc2V0VmFsdWUodGhpcy5pbml0aWFsRXN0YWRvKTtcclxuICAgICAgICB0aGlzLmZpbHRlcigpO1xyXG4gICAgICB9LCA1MCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnB1dFRleHRDaGFuZ2UoeyBkZXRhaWwgfTogQ3VzdG9tRXZlbnQ8bnVtYmVyIHwgc3RyaW5nPikge1xyXG4gICAgdGhpcy51bmlkYWRlQ29udHJvbC5zZXRWYWx1ZShkZXRhaWwpO1xyXG4gICAgaWYgKHRoaXMuZW1pdE9uQ2hhbmdlKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQoe1xyXG4gICAgICAgIHVuaWRhZGU6IGRldGFpbCxcclxuICAgICAgICBlc3RhZG86IHRoaXMuZXN0YWRvQ29udHJvbC52YWx1ZSxcclxuICAgICAgICBjb2JlcnR1cmE6IHRoaXMuY29iZXJ0dXJhQ29udHJvbC52YWx1ZSB8fCBbXSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDaGFuZ2UoeyBkZXRhaWwgfTogQ3VzdG9tRXZlbnQ8bnVtYmVyIHwgc3RyaW5nPikge1xyXG4gICAgdGhpcy5lc3RhZG9Db250cm9sLnNldFZhbHVlKGRldGFpbCk7XHJcbiAgICBpZiAodGhpcy5lbWl0T25DaGFuZ2UpIHtcclxuICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgdW5pZGFkZTogdGhpcy51bmlkYWRlQ29udHJvbC52YWx1ZSxcclxuICAgICAgICBlc3RhZG86IGRldGFpbCxcclxuICAgICAgICBjb2JlcnR1cmE6IHRoaXMuY29iZXJ0dXJhQ29udHJvbC52YWx1ZSB8fCBbXSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja2JveENoYW5nZSh7IGRldGFpbCB9OiBDdXN0b21FdmVudDxDdXJhQ2hlY2tib3hPcHRpb248c3RyaW5nPj4pIHtcclxuICAgIGlmICghdGhpcy5jb2JlcnR1cmFzKSByZXR1cm47XHJcbiAgICBjb25zdCBjdXJyT3B0aW9uOiBGaWx0ZXJQbGFub3NDb252ZW5pb3NDb2JlcnR1cmEgfCB1bmRlZmluZWQgPSB0aGlzLmNvYmVydHVyYXMuZmluZChcclxuICAgICAgKG9wdGlvbjogRmlsdGVyUGxhbm9zQ29udmVuaW9zQ29iZXJ0dXJhKSA9PiBvcHRpb24udmFsdWUgPT0gZGV0YWlsLnZhbHVlLFxyXG4gICAgKTtcclxuICAgIGlmIChjdXJyT3B0aW9uKSB7XHJcbiAgICAgIGN1cnJPcHRpb24uY2hlY2tlZCA9IGRldGFpbC5jaGVja2VkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb2JlcnR1cmFDb250cm9sLnNldFZhbHVlKHRoaXMuY29iZXJ0dXJhcyk7XHJcbiAgICBpZiAodGhpcy5lbWl0T25DaGFuZ2UpIHtcclxuICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgdW5pZGFkZTogdGhpcy51bmlkYWRlQ29udHJvbC52YWx1ZSxcclxuICAgICAgICBlc3RhZG86IHRoaXMuZXN0YWRvQ29udHJvbC52YWx1ZSxcclxuICAgICAgICBjb2JlcnR1cmE6IHRoaXMuY29iZXJ0dXJhQ29udHJvbC52YWx1ZSB8fCBbXSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaWx0ZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHtcclxuICAgICAgdW5pZGFkZTogdGhpcy51bmlkYWRlQ29udHJvbC52YWx1ZSxcclxuICAgICAgZXN0YWRvOiB0aGlzLmVzdGFkb0NvbnRyb2wudmFsdWUsXHJcbiAgICAgIGNvYmVydHVyYTogdGhpcy5jb2JlcnR1cmFDb250cm9sLnZhbHVlIHx8IFtdLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXNldCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGhhc0NvdmVyYWdlID0gdGhpcy5jb2JlcnR1cmFDb250cm9sLnZhbHVlIS5zb21lKChjb2IpID0+IGNvYi5jaGVja2VkKTtcclxuICAgIGNvbnN0IGhhc0ZpbHRlciA9IEJvb2xlYW4odGhpcy51bmlkYWRlQ29udHJvbC52YWx1ZSkgfHwgQm9vbGVhbih0aGlzLmVzdGFkb0NvbnRyb2wudmFsdWUpIHx8IEJvb2xlYW4oaGFzQ292ZXJhZ2UpO1xyXG4gICAgdGhpcy5jbG9zZU1vZGFsLmVtaXQoIWhhc0ZpbHRlcik7XHJcbiAgICB0aGlzLnVuaWRhZGVDb250cm9sLnJlc2V0KCcnKTtcclxuICAgIHRoaXMuZXN0YWRvQ29udHJvbC5yZXNldCgnJyk7XHJcbiAgICB0aGlzLmNvYmVydHVyYXMuZm9yRWFjaCgoY29iZXJ0dXJhKSA9PiAoY29iZXJ0dXJhLmNoZWNrZWQgPSBmYWxzZSkpO1xyXG4gICAgdGhpcy5jb2JlcnR1cmFDb250cm9sLnJlc2V0KHRoaXMuY29iZXJ0dXJhcyk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmaWx0ZXItcGxhbm9zLWNvbnZlbmlvc1wiIFtuZ0NsYXNzXT1cInsgJ2NvbnRhaW5lci1zdHlsZSc6IHdpdGhDb250YWluZXJTdHlsZSB9XCI+XHJcbiAgQGlmICghaXNMb2FkaW5nKSB7XHJcbiAgICA8Y3VyYS1oZWFkaW5nIHNpemU9XCJzbWFsbFwiIGxldmVsPVwiNFwiIHdlaWdodD1cImJvbGRcIiBjb2xvcj1cIm5ldXRyYWwtYmxhY2tcIiBtYXJnaW4tYmxvY2s9XCIwXCIgbGluZS1oZWlnaHQ9XCIxNnB4XCI+IFJlZmluZSBzdWEgYnVzY2EgPC9jdXJhLWhlYWRpbmc+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImZpbHRlci1wbGFub3MtY29udmVuaW9zLXVuaWRhZGVcIj5cclxuICAgICAgPGN1cmEtaW5wdXQtdGV4dFxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiTm9tZSBkYSB1bmlkYWRlXCJcclxuICAgICAgICBuYW1lPVwidW5pZGFkZS1pbnB1dFwiXHJcbiAgICAgICAgaWNvbi1uYW1lPVwic2VhcmNoXCJcclxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgIFthdHRyLnZhbHVlXT1cInVuaWRhZGVDb250cm9sLnZhbHVlXCJcclxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwiaW5wdXRUZXh0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICA+PC9jdXJhLWlucHV0LXRleHQ+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MtZXN0YWRvXCI+XHJcbiAgICAgIEBpZiAoZXN0YWRvcykge1xyXG4gICAgICAgIDxjdXJhLXNlbGVjdFxyXG4gICAgICAgICAgbGFiZWw9XCJTZWxlY2lvbmUgbyBlc3RhZG9cIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJGYcOnYSBhIHN1YSBTZWxlw6fDo29cIlxyXG4gICAgICAgICAgbW9kZT1cImRlZmF1bHRcIlxyXG4gICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXHJcbiAgICAgICAgICBzdGF0dXM9XCJkZWZhdWx0XCJcclxuICAgICAgICAgIFthdHRyLnZhbHVlXT1cImVzdGFkb0NvbnRyb2wudmFsdWVcIlxyXG4gICAgICAgICAgKHNlbGVjdGVkKT1cInNlbGVjdENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8Y3VyYS1zZWxlY3Qtb3B0aW9uIFthdHRyLnZhbHVlXT1cIicnXCI+RmHDp2EgYSBzdWEgU2VsZcOnw6NvPC9jdXJhLXNlbGVjdC1vcHRpb24+XHJcblxyXG4gICAgICAgICAgQGZvciAoZXN0YWRvIG9mIGVzdGFkb3MgfHwgW107IHRyYWNrIGVzdGFkbz8udmFsdWUpIHtcclxuICAgICAgICAgICAgPGN1cmEtc2VsZWN0LW9wdGlvbiBbYXR0ci52YWx1ZV09XCJlc3RhZG8/LnZhbHVlXCI+e3sgZXN0YWRvPy5sYWJlbCB9fTwvY3VyYS1zZWxlY3Qtb3B0aW9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvY3VyYS1zZWxlY3Q+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItcGxhbm9zLWNvbnZlbmlvcy1jb2JlcnR1cmFcIj5cclxuICAgICAgPGN1cmEtaWNvbiBuYW1lPVwiZmlsdGVyXCIgc2l6ZT1cIjIwXCIgY29sb3I9XCJpbmZvLWRhcmtcIj48L2N1cmEtaWNvbj5cclxuICAgICAgPGN1cmEtaGVhZGluZyBzaXplPVwieHNtYWxsXCIgbGV2ZWw9XCI1XCIgd2VpZ2h0PVwiYm9sZFwiIGNvbG9yPVwibmV1dHJhbC1ibGFja1wiIG1hcmdpbi1ibG9jaz1cIjBcIiBsaW5lLWhlaWdodD1cIjE2cHhcIj5cclxuICAgICAgICBGaWx0cmUgcGVsYSBjb2JlcnR1cmEgZG8gc2V1IHBsYW5vXHJcbiAgICAgIDwvY3VyYS1oZWFkaW5nPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImZpbHRlci1wbGFub3MtY29udmVuaW9zLWNvbnRlbnRcIj5cclxuICAgICAgPGN1cmEtaGVhZGluZyBzaXplPVwieHNtYWxsXCIgbGV2ZWw9XCI1XCIgY29sb3I9XCJuZXV0cmFsLWJsYWNrXCIgbWFyZ2luLWJsb2NrPVwiMFwiIGxpbmUtaGVpZ2h0PVwiMTZweFwiPiBUaXBvcyBkZSBjb2JlcnR1cmEgPC9jdXJhLWhlYWRpbmc+XHJcbiAgICAgIDxjdXJhLXBhcmFncmFwaCBzaXplPVwieHNtYWxsXCIgY29sb3I9XCJuZXV0cmFsLWRhcmtcIiBtYXJnaW4tYmxvY2s9XCIwXCI+XHJcbiAgICAgICAgVm9jw6ogcG9kZSBzZWxlY2lvbmFyIHVtYSBvdSBtYWlzIHBvcnRhcyBkZSBlbnRyYWRhLCBkZSBhY29yZG8gY29tIGEgY29iZXJ0dXJhIGRvIHNldSBwbGFuby5cclxuICAgICAgPC9jdXJhLXBhcmFncmFwaD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItcGxhbm9zLWNvbnZlbmlvcy1jaGVja2JveGVzXCI+XHJcbiAgICAgIEBmb3IgKG9wdGlvbiBvZiBjb2JlcnR1cmFzIHx8IFtdOyB0cmFjayBvcHRpb24/LnZhbHVlKSB7XHJcbiAgICAgICAgPGN1cmEtY2hlY2tib3hcclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgaWNvbi1jb2xvcj1cImxpZ2h0XCJcclxuICAgICAgICAgIFthdHRyLm5hbWVdPVwib3B0aW9uPy5sYWJlbFwiXHJcbiAgICAgICAgICBbYXR0ci5sYWJlbF09XCJvcHRpb24/LmxhYmVsXCJcclxuICAgICAgICAgIFthdHRyLnZhbHVlXT1cIm9wdGlvbj8udmFsdWVcIlxyXG4gICAgICAgICAgW2F0dHIuY2hlY2tlZF09XCJvcHRpb24/LmNoZWNrZWRcIlxyXG4gICAgICAgICAgKG9uY2hhbmdlKT1cImNoZWNrYm94Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2N1cmEtY2hlY2tib3g+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItcGxhbm9zLWNvbnZlbmlvcy1idXR0b25zXCI+XHJcbiAgICAgIDxjdXJhLWJ1dHRvbi10cmFuc3BhcmVudCBzaXplPVwic21hbGxcIiBjb2xvcj1cInByaW1hcnlcIiBmb250LWNvbG9yPVwiZGFya1wiIHRleHQtYWxpZ249XCJjZW50ZXJcIiAoY2xpY2spPVwicmVzZXQoKVwiPlxyXG4gICAgICAgIDxzcGFuPiBMaW1wYXIgdG9kb3Mgb3MgZmlsdHJvcyA8L3NwYW4+XHJcbiAgICAgIDwvY3VyYS1idXR0b24tdHJhbnNwYXJlbnQ+XHJcblxyXG4gICAgICA8Y3VyYS1idXR0b24gc2l6ZT1cIm1lZGl1bVwiIGNvbG9yPVwicHJpbWFyeVwiIGZvbnQtY29sb3I9XCJsaWdodFwiIGJhY2tncm91bmQ9XCJsaWdodFwiIHRleHQtYWxpZ249XCJjZW50ZXJcIiAoY2xpY2spPVwiZmlsdGVyKClcIj4gRmlsdHJhciA8L2N1cmEtYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgfSBAZWxzZSB7XHJcbiAgICA8Y3VyYS1sb2FkZXItY2lyY2xlIGNvbG9yPVwicHJpbWFyeVwiIHNpemU9XCJzbWFsbFwiPiA8L2N1cmEtbG9hZGVyLWNpcmNsZT5cclxuICB9XHJcbjwvZGl2PlxyXG4iXX0=
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2l0ZS1mcm9udC1lbmQtbGliL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXJzL2ZpbHRlci1wbGFub3MtY29udmVuaW9zL2ZpbHRlci1wbGFub3MtY29udmVuaW9zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpdGUtZnJvbnQtZW5kLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVycy9maWx0ZXItcGxhbm9zLWNvbnZlbmlvcy9maWx0ZXItcGxhbm9zLWNvbnZlbmlvcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFvQnpDLE1BQU0sT0FBTyw4QkFBOEI7SUFpQ3pDLFlBQTZCLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBaEMzQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUErQixDQUFDO1FBQy9ELGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTFDLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUNwQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRTlCLGtCQUFhLEdBQXFDLElBQUksQ0FBQztRQUV2RCxZQUFPLEdBQTRCLE1B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T0FBTztzQkFBZixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBT0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdnQixZQUFZO3NCQUFqQyxXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEVzdGFkb3MgfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBGaWx0ZXJQbGFub3NDb252ZW5pb3MsIEZpbHRlclBsYW5vc0NvbnZlbmlvc0NoYW5nZSwgRmlsdGVyUGxhbm9zQ29udmVuaW9zQ29iZXJ0dXJhIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ZpbHRlcnMvZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MubW9kZWwnO1xuaW1wb3J0IHsgQ3VyYVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5pbXBvcnQgdHlwZSAqIGFzIF8gZnJvbSAnQHJlZGVkb3IvY3VyYS9kaXN0L3R5cGVzL2NvbXBvbmVudHMuanMnO1xuXG5pbnRlcmZhY2UgQ3VyYUNoZWNrYm94T3B0aW9uPFQgPSBhbnk+IHtcbiAgdmFsdWU6IFQ7XG4gIGNoZWNrZWQ6IGJvb2xlYW47XG4gIGluZGV0ZXJtaW5hdGU/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyZHNpdGUtZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXItcGxhbm9zLWNvbnZlbmlvcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJQbGFub3NDb252ZW5pb3NDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQE91dHB1dCgpIGZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyUGxhbm9zQ29udmVuaW9zQ2hhbmdlPigpO1xuICBAT3V0cHV0KCkgY2xvc2VNb2RhbCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBASW5wdXQoKSB3aXRoQ29udGFpbmVyU3R5bGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVtaXRPbkNoYW5nZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGluaXRpYWxFc3RhZG86IEVzdGFkb3MgfCBzdHJpbmcgfCBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBASW5wdXQoKSBlc3RhZG9zOiBGaWx0ZXJQbGFub3NDb252ZW5pb3NbXSA9IE9iamVjdC5lbnRyaWVzKEVzdGFkb3MpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgIGxhYmVsOiB2YWx1ZSxcbiAgICB2YWx1ZToga2V5LFxuICB9KSk7XG5cbiAgQElucHV0KCkgY29iZXJ0dXJhczogRmlsdGVyUGxhbm9zQ29udmVuaW9zQ29iZXJ0dXJhW10gPSBbXG4gICAgeyBsYWJlbDogJ0NvbnN1bHRhcycsIHZhbHVlOiAnRkxBR19BQ0VJVEFfQU1CVUxBVE9SSU8nLCBjaGVja2VkOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6ICdFbWVyZ8OqbmNpYScsIHZhbHVlOiAnRkxBR19BQ0VJVEFfUFMnLCBjaGVja2VkOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6ICdFeGFtZXMnLCB2YWx1ZTogJ0ZMQUdfQUNFSVRBX0VYQU1FJywgY2hlY2tlZDogZmFsc2UgfSxcbiAgICB7IGxhYmVsOiAnSW50ZXJuYcOnw6NvJywgdmFsdWU6ICdGTEFHX0FDRUlUQV9JTlRFUk5BQ0FPJywgY2hlY2tlZDogZmFsc2UgfSxcbiAgXTtcblxuICBASW5wdXQoKSB1bmlkYWRlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudW1iZXIgfCBudWxsPignJyk7XG4gIEBJbnB1dCgpIGVzdGFkb0NvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8RXN0YWRvcyB8IHN0cmluZyB8IG51bWJlciB8IG51bGw+KCcnKTtcbiAgY29iZXJ0dXJhQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxGaWx0ZXJQbGFub3NDb252ZW5pb3NDb2JlcnR1cmFbXT4odGhpcy5jb2JlcnR1cmFzIHx8IFtdKTtcblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlJykgc3R5bGVCaW5kaW5nID0ge1xuICAgICctLW5ldXRyYWwtZGFya2VyJzogdGhpcy5jdXJhU2VydmljZS5nZXRDb2xvcignbmV1dHJhbC1kYXJrZXInKSxcbiAgICAnLS1uZXV0cmFsLWxpZ2h0JzogdGhpcy5jdXJhU2VydmljZS5nZXRDb2xvcignbmV1dHJhbC1saWdodCcpLFxuICAgICctLW5ldXRyYWwtbGlnaHRlcic6IHRoaXMuY3VyYVNlcnZpY2UuZ2V0Q29sb3IoJ25ldXRyYWwtbGlnaHRlcicpLFxuICAgICctLW5ldXRyYWwtcHVyZXdoaXRlJzogdGhpcy5jdXJhU2VydmljZS5nZXRDb2xvcignbmV1dHJhbC1wdXJld2hpdGUnKSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGN1cmFTZXJ2aWNlOiBDdXJhU2VydmljZSkge31cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbEVzdGFkbyAmJiBBcnJheS5pc0FycmF5KHRoaXMuZXN0YWRvcykgJiYgdGhpcy5lc3RhZG9zLmZpbmQoKGVzdGFkbykgPT4gZXN0YWRvLnZhbHVlID09PSB0aGlzLmluaXRpYWxFc3RhZG8pKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5lc3RhZG9Db250cm9sLnNldFZhbHVlKHRoaXMuaW5pdGlhbEVzdGFkbyk7XG4gICAgICAgIHRoaXMuZmlsdGVyKCk7XG4gICAgICB9LCA1MCk7XG4gICAgfVxuICB9XG5cbiAgaW5wdXRUZXh0Q2hhbmdlKHsgZGV0YWlsIH06IEN1c3RvbUV2ZW50PG51bWJlciB8IHN0cmluZz4pIHtcbiAgICB0aGlzLnVuaWRhZGVDb250cm9sLnNldFZhbHVlKGRldGFpbCk7XG4gICAgaWYgKHRoaXMuZW1pdE9uQ2hhbmdlKSB7XG4gICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHtcbiAgICAgICAgdW5pZGFkZTogZGV0YWlsLFxuICAgICAgICBlc3RhZG86IHRoaXMuZXN0YWRvQ29udHJvbC52YWx1ZSxcbiAgICAgICAgY29iZXJ0dXJhOiB0aGlzLmNvYmVydHVyYUNvbnRyb2wudmFsdWUgfHwgW10sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RDaGFuZ2UoeyBkZXRhaWwgfTogQ3VzdG9tRXZlbnQ8bnVtYmVyIHwgc3RyaW5nPikge1xuICAgIHRoaXMuZXN0YWRvQ29udHJvbC5zZXRWYWx1ZShkZXRhaWwpO1xuICAgIGlmICh0aGlzLmVtaXRPbkNoYW5nZSkge1xuICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh7XG4gICAgICAgIHVuaWRhZGU6IHRoaXMudW5pZGFkZUNvbnRyb2wudmFsdWUsXG4gICAgICAgIGVzdGFkbzogZGV0YWlsLFxuICAgICAgICBjb2JlcnR1cmE6IHRoaXMuY29iZXJ0dXJhQ29udHJvbC52YWx1ZSB8fCBbXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrYm94Q2hhbmdlKHsgZGV0YWlsIH06IEN1c3RvbUV2ZW50PEN1cmFDaGVja2JveE9wdGlvbjxzdHJpbmc+Pikge1xuICAgIGlmICghdGhpcy5jb2JlcnR1cmFzKSByZXR1cm47XG4gICAgY29uc3QgY3Vyck9wdGlvbjogRmlsdGVyUGxhbm9zQ29udmVuaW9zQ29iZXJ0dXJhIHwgdW5kZWZpbmVkID0gdGhpcy5jb2JlcnR1cmFzLmZpbmQoXG4gICAgICAob3B0aW9uOiBGaWx0ZXJQbGFub3NDb252ZW5pb3NDb2JlcnR1cmEpID0+IG9wdGlvbi52YWx1ZSA9PSBkZXRhaWwudmFsdWUsXG4gICAgKTtcbiAgICBpZiAoY3Vyck9wdGlvbikge1xuICAgICAgY3Vyck9wdGlvbi5jaGVja2VkID0gZGV0YWlsLmNoZWNrZWQ7XG4gICAgfVxuICAgIHRoaXMuY29iZXJ0dXJhQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmNvYmVydHVyYXMpO1xuICAgIGlmICh0aGlzLmVtaXRPbkNoYW5nZSkge1xuICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh7XG4gICAgICAgIHVuaWRhZGU6IHRoaXMudW5pZGFkZUNvbnRyb2wudmFsdWUsXG4gICAgICAgIGVzdGFkbzogdGhpcy5lc3RhZG9Db250cm9sLnZhbHVlLFxuICAgICAgICBjb2JlcnR1cmE6IHRoaXMuY29iZXJ0dXJhQ29udHJvbC52YWx1ZSB8fCBbXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHtcbiAgICAgIHVuaWRhZGU6IHRoaXMudW5pZGFkZUNvbnRyb2wudmFsdWUsXG4gICAgICBlc3RhZG86IHRoaXMuZXN0YWRvQ29udHJvbC52YWx1ZSxcbiAgICAgIGNvYmVydHVyYTogdGhpcy5jb2JlcnR1cmFDb250cm9sLnZhbHVlIHx8IFtdLFxuICAgIH0pO1xuICB9XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgY29uc3QgaGFzQ292ZXJhZ2UgPSB0aGlzLmNvYmVydHVyYUNvbnRyb2wudmFsdWUhLnNvbWUoKGNvYikgPT4gY29iLmNoZWNrZWQpO1xuICAgIGNvbnN0IGhhc0ZpbHRlciA9IEJvb2xlYW4odGhpcy51bmlkYWRlQ29udHJvbC52YWx1ZSkgfHwgQm9vbGVhbih0aGlzLmVzdGFkb0NvbnRyb2wudmFsdWUpIHx8IEJvb2xlYW4oaGFzQ292ZXJhZ2UpO1xuICAgIHRoaXMuY2xvc2VNb2RhbC5lbWl0KCFoYXNGaWx0ZXIpO1xuICAgIHRoaXMudW5pZGFkZUNvbnRyb2wucmVzZXQoJycpO1xuICAgIHRoaXMuZXN0YWRvQ29udHJvbC5yZXNldCgnJyk7XG4gICAgdGhpcy5jb2JlcnR1cmFzLmZvckVhY2goKGNvYmVydHVyYSkgPT4gKGNvYmVydHVyYS5jaGVja2VkID0gZmFsc2UpKTtcbiAgICB0aGlzLmNvYmVydHVyYUNvbnRyb2wucmVzZXQodGhpcy5jb2JlcnR1cmFzKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZpbHRlci1wbGFub3MtY29udmVuaW9zXCIgW25nQ2xhc3NdPVwieyAnY29udGFpbmVyLXN0eWxlJzogd2l0aENvbnRhaW5lclN0eWxlIH1cIj5cbiAgQGlmICghaXNMb2FkaW5nKSB7XG4gICAgPGN1cmEtaGVhZGluZyBzaXplPVwic21hbGxcIiBsZXZlbD1cIjRcIiB3ZWlnaHQ9XCJib2xkXCIgY29sb3I9XCJuZXV0cmFsLWJsYWNrXCIgbWFyZ2luLWJsb2NrPVwiMFwiIGxpbmUtaGVpZ2h0PVwiMTZweFwiPiBSZWZpbmUgc3VhIGJ1c2NhIDwvY3VyYS1oZWFkaW5nPlxuXG4gICAgPGRpdiBjbGFzcz1cImZpbHRlci1wbGFub3MtY29udmVuaW9zLXVuaWRhZGVcIj5cbiAgICAgIDxjdXJhLWlucHV0LXRleHRcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJOb21lIGRhIHVuaWRhZGVcIlxuICAgICAgICBuYW1lPVwidW5pZGFkZS1pbnB1dFwiXG4gICAgICAgIGljb24tbmFtZT1cInNlYXJjaFwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIFthdHRyLnZhbHVlXT1cInVuaWRhZGVDb250cm9sLnZhbHVlXCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImlucHV0VGV4dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgID48L2N1cmEtaW5wdXQtdGV4dD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItcGxhbm9zLWNvbnZlbmlvcy1lc3RhZG9cIj5cbiAgICAgIEBpZiAoZXN0YWRvcykge1xuICAgICAgICA8Y3VyYS1zZWxlY3RcbiAgICAgICAgICBsYWJlbD1cIlNlbGVjaW9uZSBvIGVzdGFkb1wiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJGYcOnYSBhIHN1YSBTZWxlw6fDo29cIlxuICAgICAgICAgIG1vZGU9XCJkZWZhdWx0XCJcbiAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICBzdGF0dXM9XCJkZWZhdWx0XCJcbiAgICAgICAgICBbYXR0ci52YWx1ZV09XCJlc3RhZG9Db250cm9sLnZhbHVlXCJcbiAgICAgICAgICAoc2VsZWN0ZWQpPVwic2VsZWN0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGN1cmEtc2VsZWN0LW9wdGlvbiBbYXR0ci52YWx1ZV09XCInJ1wiPkZhw6dhIGEgc3VhIFNlbGXDp8OjbzwvY3VyYS1zZWxlY3Qtb3B0aW9uPlxuXG4gICAgICAgICAgQGZvciAoZXN0YWRvIG9mIGVzdGFkb3MgfHwgW107IHRyYWNrIGVzdGFkbz8udmFsdWUpIHtcbiAgICAgICAgICAgIDxjdXJhLXNlbGVjdC1vcHRpb24gW2F0dHIudmFsdWVdPVwiZXN0YWRvPy52YWx1ZVwiPnt7IGVzdGFkbz8ubGFiZWwgfX08L2N1cmEtc2VsZWN0LW9wdGlvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvY3VyYS1zZWxlY3Q+XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MtY29iZXJ0dXJhXCI+XG4gICAgICA8Y3VyYS1pY29uIG5hbWU9XCJmaWx0ZXJcIiBzaXplPVwiMjBcIiBjb2xvcj1cImluZm8tZGFya1wiPjwvY3VyYS1pY29uPlxuICAgICAgPGN1cmEtaGVhZGluZyBzaXplPVwieHNtYWxsXCIgbGV2ZWw9XCI1XCIgd2VpZ2h0PVwiYm9sZFwiIGNvbG9yPVwibmV1dHJhbC1ibGFja1wiIG1hcmdpbi1ibG9jaz1cIjBcIiBsaW5lLWhlaWdodD1cIjE2cHhcIj5cbiAgICAgICAgRmlsdHJlIHBlbGEgY29iZXJ0dXJhIGRvIHNldSBwbGFub1xuICAgICAgPC9jdXJhLWhlYWRpbmc+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MtY29udGVudFwiPlxuICAgICAgPGN1cmEtaGVhZGluZyBzaXplPVwieHNtYWxsXCIgbGV2ZWw9XCI1XCIgY29sb3I9XCJuZXV0cmFsLWJsYWNrXCIgbWFyZ2luLWJsb2NrPVwiMFwiIGxpbmUtaGVpZ2h0PVwiMTZweFwiPiBUaXBvcyBkZSBjb2JlcnR1cmEgPC9jdXJhLWhlYWRpbmc+XG4gICAgICA8Y3VyYS1wYXJhZ3JhcGggc2l6ZT1cInhzbWFsbFwiIGNvbG9yPVwibmV1dHJhbC1kYXJrXCIgbWFyZ2luLWJsb2NrPVwiMFwiPlxuICAgICAgICBWb2PDqiBwb2RlIHNlbGVjaW9uYXIgdW1hIG91IG1haXMgcG9ydGFzIGRlIGVudHJhZGEsIGRlIGFjb3JkbyBjb20gYSBjb2JlcnR1cmEgZG8gc2V1IHBsYW5vLlxuICAgICAgPC9jdXJhLXBhcmFncmFwaD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItcGxhbm9zLWNvbnZlbmlvcy1jaGVja2JveGVzXCI+XG4gICAgICBAZm9yIChvcHRpb24gb2YgY29iZXJ0dXJhcyB8fCBbXTsgdHJhY2sgb3B0aW9uPy52YWx1ZSkge1xuICAgICAgICA8Y3VyYS1jaGVja2JveFxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBpY29uLWNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgIFthdHRyLm5hbWVdPVwib3B0aW9uPy5sYWJlbFwiXG4gICAgICAgICAgW2F0dHIubGFiZWxdPVwib3B0aW9uPy5sYWJlbFwiXG4gICAgICAgICAgW2F0dHIudmFsdWVdPVwib3B0aW9uPy52YWx1ZVwiXG4gICAgICAgICAgW2F0dHIuY2hlY2tlZF09XCJvcHRpb24/LmNoZWNrZWRcIlxuICAgICAgICAgIChvbmNoYW5nZSk9XCJjaGVja2JveENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2N1cmEtY2hlY2tib3g+XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXBsYW5vcy1jb252ZW5pb3MtYnV0dG9uc1wiPlxuICAgICAgPGN1cmEtYnV0dG9uLXRyYW5zcGFyZW50IHNpemU9XCJzbWFsbFwiIGNvbG9yPVwicHJpbWFyeVwiIGZvbnQtY29sb3I9XCJkYXJrXCIgdGV4dC1hbGlnbj1cImNlbnRlclwiIChjbGljayk9XCJyZXNldCgpXCI+XG4gICAgICAgIDxzcGFuPiBMaW1wYXIgdG9kb3Mgb3MgZmlsdHJvcyA8L3NwYW4+XG4gICAgICA8L2N1cmEtYnV0dG9uLXRyYW5zcGFyZW50PlxuXG4gICAgICA8Y3VyYS1idXR0b24gc2l6ZT1cIm1lZGl1bVwiIGNvbG9yPVwicHJpbWFyeVwiIGZvbnQtY29sb3I9XCJsaWdodFwiIGJhY2tncm91bmQ9XCJsaWdodFwiIHRleHQtYWxpZ249XCJjZW50ZXJcIiAoY2xpY2spPVwiZmlsdGVyKClcIj4gRmlsdHJhciA8L2N1cmEtYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9IEBlbHNlIHtcbiAgICA8Y3VyYS1sb2FkZXItY2lyY2xlIGNvbG9yPVwicHJpbWFyeVwiIHNpemU9XCJzbWFsbFwiPiA8L2N1cmEtbG9hZGVyLWNpcmNsZT5cbiAgfVxuPC9kaXY+XG4iXX0=