mis-crystal-design-system 18.0.24 → 18.1.0-signal-test
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.
- package/action-list/action-list.component.d.ts +17 -15
- package/async-search-dropdown/async-dropdown.component.d.ts +43 -61
- package/button/button.component.d.ts +35 -13
- package/button/button.directive.d.ts +10 -8
- package/checkbox/checkbox.component.d.ts +15 -12
- package/chip/chip.component.d.ts +9 -11
- package/datepicker_v2/models/dp-config.model.d.ts +1 -0
- package/datepicker_v2/tz-datepicker.directive.d.ts +15 -18
- package/datepicker_v2/tz-dp-container/tz-dp-container.component.d.ts +42 -21
- package/daterangepicker_v2/tz-daterangepicker.directive.d.ts +12 -14
- package/daterangepicker_v2/tz-drp-container/tz-drp-container.component.d.ts +46 -23
- package/drawer/drawer-body/drawer-body.component.d.ts +2 -2
- package/dropdown/calculate-container-height.directive.d.ts +7 -8
- package/dropdown/dropdown.component.d.ts +41 -49
- package/dynamic-form/dynamic-form.component.d.ts +20 -16
- package/esm2022/action-list/action-list.component.mjs +112 -89
- package/esm2022/async-search-dropdown/async-dropdown.component.mjs +256 -326
- package/esm2022/button/button.component.mjs +55 -48
- package/esm2022/button/button.directive.mjs +36 -40
- package/esm2022/checkbox/checkbox.component.mjs +75 -70
- package/esm2022/chip/chip.component.mjs +20 -33
- package/esm2022/datepicker_v2/models/dp-config.model.mjs +1 -1
- package/esm2022/datepicker_v2/tz-datepicker.directive.mjs +42 -71
- package/esm2022/datepicker_v2/tz-dp-container/tz-dp-container.component.mjs +202 -172
- package/esm2022/datepicker_v2/utils/index.mjs +2 -1
- package/esm2022/daterangepicker_v2/tz-daterangepicker.directive.mjs +26 -51
- package/esm2022/daterangepicker_v2/tz-drp-container/tz-drp-container.component.mjs +282 -235
- package/esm2022/drawer/drawer-body/drawer-body.component.mjs +8 -7
- package/esm2022/dropdown/calculate-container-height.directive.mjs +25 -22
- package/esm2022/dropdown/dropdown.component.mjs +162 -186
- package/esm2022/dynamic-form/dynamic-form.component.mjs +118 -72
- package/esm2022/fab/fab.component.mjs +29 -33
- package/esm2022/filter/filter-panel/filter-panel.component.mjs +60 -58
- package/esm2022/input/directives/input/input.directive.mjs +22 -26
- package/esm2022/input/mis-input.component.mjs +41 -45
- package/esm2022/input-stepper/input-stepper/input-stepper.component.mjs +40 -50
- package/esm2022/loader/loader.component.mjs +8 -11
- package/esm2022/mobile-filter/mobile-filter.component.mjs +61 -61
- package/esm2022/modal/module-wrapper/module-wrapper.component.mjs +11 -9
- package/esm2022/multi-select-dropdown/multi-select-dropdown.component.mjs +235 -281
- package/esm2022/nested-multi-select-dropdown/nested-multi-select-dropdown.component.mjs +250 -287
- package/esm2022/phone-input/phone-input.component.mjs +21 -43
- package/esm2022/radio-button/radio-button.component.mjs +15 -27
- package/esm2022/ske-loader/ske-loader.component.mjs +15 -29
- package/esm2022/slider/slider.component.mjs +23 -33
- package/esm2022/slider/slider.module.mjs +4 -11
- package/esm2022/snackbar/snackbar/snackbar.component.mjs +21 -15
- package/esm2022/snackbar/snackbar.service.mjs +3 -2
- package/esm2022/specificdatepicker/tz-sdp-container/tz-sdp-container.component.mjs +230 -343
- package/esm2022/specificdatepicker/tz-specificdatepicker.directive.mjs +77 -105
- package/esm2022/star-rating/star-rating.component.mjs +57 -71
- package/esm2022/switch/switch.component.mjs +34 -36
- package/esm2022/table/actions-cell/actions-cell.component.mjs +55 -54
- package/esm2022/table/custom-table-cell.directive.mjs +22 -18
- package/esm2022/table/filter/filter.component.mjs +60 -42
- package/esm2022/table/sort-icons.directive.mjs +16 -8
- package/esm2022/table/sub-table/sub-table.component.mjs +41 -44
- package/esm2022/table/table.component.mjs +181 -165
- package/esm2022/timepicker/timepicker.component.mjs +244 -159
- package/esm2022/timepicker/timepicker.directive.mjs +3 -2
- package/esm2022/timerangepicker/timerangepicker.component.mjs +200 -159
- package/esm2022/toast/toast.component.mjs +6 -7
- package/esm2022/toast/toast.data.service.mjs +15 -9
- package/esm2022/tooltip/tooltip-container/tooltip.component.mjs +12 -12
- package/esm2022/tooltip/tooltip.directive.mjs +4 -4
- package/esm2022/virtual-scroll/virtual-scroll.component.mjs +57 -59
- package/fab/fab.component.d.ts +12 -8
- package/fesm2022/mis-crystal-design-system-action-list.mjs +111 -88
- package/fesm2022/mis-crystal-design-system-action-list.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-async-search-dropdown.mjs +253 -324
- package/fesm2022/mis-crystal-design-system-async-search-dropdown.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-button.mjs +88 -85
- package/fesm2022/mis-crystal-design-system-button.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-checkbox.mjs +74 -69
- package/fesm2022/mis-crystal-design-system-checkbox.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-chip.mjs +19 -32
- package/fesm2022/mis-crystal-design-system-chip.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs +242 -240
- package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs +305 -283
- package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-drawer.mjs +7 -6
- package/fesm2022/mis-crystal-design-system-drawer.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-dropdown.mjs +183 -204
- package/fesm2022/mis-crystal-design-system-dropdown.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-dynamic-form.mjs +118 -72
- package/fesm2022/mis-crystal-design-system-dynamic-form.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-fab.mjs +28 -32
- package/fesm2022/mis-crystal-design-system-fab.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-filter.mjs +59 -57
- package/fesm2022/mis-crystal-design-system-filter.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-input-stepper.mjs +39 -49
- package/fesm2022/mis-crystal-design-system-input-stepper.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-input.mjs +62 -71
- package/fesm2022/mis-crystal-design-system-input.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-loader.mjs +7 -10
- package/fesm2022/mis-crystal-design-system-loader.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-mobile-filter.mjs +60 -60
- package/fesm2022/mis-crystal-design-system-mobile-filter.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-modal.mjs +10 -8
- package/fesm2022/mis-crystal-design-system-modal.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-multi-select-dropdown.mjs +233 -279
- package/fesm2022/mis-crystal-design-system-multi-select-dropdown.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-nested-multi-select-dropdown.mjs +249 -286
- package/fesm2022/mis-crystal-design-system-nested-multi-select-dropdown.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-phone-input.mjs +20 -42
- package/fesm2022/mis-crystal-design-system-phone-input.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-radio-button.mjs +14 -26
- package/fesm2022/mis-crystal-design-system-radio-button.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-ske-loader.mjs +14 -28
- package/fesm2022/mis-crystal-design-system-ske-loader.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-slider.mjs +25 -42
- package/fesm2022/mis-crystal-design-system-slider.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-snackbar.mjs +22 -15
- package/fesm2022/mis-crystal-design-system-snackbar.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs +304 -445
- package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-star-rating.mjs +56 -70
- package/fesm2022/mis-crystal-design-system-star-rating.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-switch.mjs +33 -35
- package/fesm2022/mis-crystal-design-system-switch.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-table.mjs +365 -321
- package/fesm2022/mis-crystal-design-system-table.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-timepicker.mjs +245 -159
- package/fesm2022/mis-crystal-design-system-timepicker.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-timerangepicker.mjs +199 -158
- package/fesm2022/mis-crystal-design-system-timerangepicker.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-toast.mjs +18 -13
- package/fesm2022/mis-crystal-design-system-toast.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-tooltip.mjs +14 -14
- package/fesm2022/mis-crystal-design-system-tooltip.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-virtual-scroll.mjs +57 -59
- package/fesm2022/mis-crystal-design-system-virtual-scroll.mjs.map +1 -1
- package/filter/filter-panel/filter-panel.component.d.ts +14 -14
- package/input/directives/input/input.directive.d.ts +6 -10
- package/input/mis-input.component.d.ts +12 -13
- package/input-stepper/input-stepper/input-stepper.component.d.ts +8 -7
- package/loader/loader.component.d.ts +3 -6
- package/mobile-filter/mobile-filter.component.d.ts +15 -15
- package/modal/module-wrapper/module-wrapper.component.d.ts +2 -3
- package/multi-select-dropdown/multi-select-dropdown.component.d.ts +89 -51
- package/nested-multi-select-dropdown/nested-multi-select-dropdown.component.d.ts +99 -56
- package/package.json +17 -17
- package/phone-input/phone-input.component.d.ts +16 -18
- package/radio-button/radio-button.component.d.ts +9 -11
- package/ske-loader/ske-loader.component.d.ts +8 -11
- package/slider/slider.component.d.ts +8 -11
- package/slider/slider.module.d.ts +1 -2
- package/snackbar/snackbar/snackbar.component.d.ts +3 -3
- package/specificdatepicker/tz-sdp-container/tz-sdp-container.component.d.ts +35 -35
- package/specificdatepicker/tz-specificdatepicker.directive.d.ts +24 -28
- package/star-rating/star-rating.component.d.ts +18 -18
- package/switch/switch.component.d.ts +8 -10
- package/table/actions-cell/actions-cell.component.d.ts +14 -14
- package/table/custom-table-cell.directive.d.ts +3 -3
- package/table/filter/filter.component.d.ts +9 -9
- package/table/sub-table/sub-table.component.d.ts +5 -5
- package/table/table.component.d.ts +38 -35
- package/timepicker/timepicker.component.d.ts +29 -28
- package/timerangepicker/timerangepicker.component.d.ts +36 -33
- package/toast/toast.data.service.d.ts +1 -1
- package/tooltip/tooltip-container/tooltip.component.d.ts +4 -4
- package/virtual-scroll/virtual-scroll.component.d.ts +8 -9
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
import { Component,
|
|
2
|
-
import { TemplatePortal } from
|
|
3
|
-
import { ConnectionPositionPair, OverlayConfig } from
|
|
1
|
+
import { Component, ElementRef, ViewChild, ViewContainerRef, computed, effect, signal, inject, input, output } from '@angular/core';
|
|
2
|
+
import { TemplatePortal } from '@angular/cdk/portal';
|
|
3
|
+
import { Overlay, ConnectionPositionPair, OverlayConfig, } from '@angular/cdk/overlay';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/
|
|
6
|
-
import * as i2 from "@angular/
|
|
7
|
-
import * as i3 from "
|
|
8
|
-
import * as i4 from "mis-crystal-design-system/
|
|
9
|
-
import * as i5 from "mis-crystal-design-system/button";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "@angular/forms";
|
|
7
|
+
import * as i3 from "mis-crystal-design-system/checkbox";
|
|
8
|
+
import * as i4 from "mis-crystal-design-system/button";
|
|
10
9
|
const _c0 = ["select"];
|
|
11
10
|
const _c1 = ["popupContainer"];
|
|
12
11
|
const _c2 = (a0, a1) => ({ height: a0, width: a1 });
|
|
13
|
-
const _c3 = a0 => ({ background: a0 });
|
|
14
|
-
const _c4 = a0 => ({ transform: a0 });
|
|
12
|
+
const _c3 = a0 => ({ "background": a0 });
|
|
13
|
+
const _c4 = a0 => ({ "transform": a0 });
|
|
15
14
|
const _c5 = (a0, a1) => ({ "height": a0, width: a1 });
|
|
16
15
|
const _c6 = (a0, a1) => ({ "position-left": a0, "position-right": a1 });
|
|
17
16
|
const _c7 = (a0, a1, a2) => ({ paddingLeft: a0, border: a1, paddingRight: a2 });
|
|
@@ -24,7 +23,7 @@ function MultiSelectDropdownComponent_ng_container_4_p_3_Template(rf, ctx) { if
|
|
|
24
23
|
} if (rf & 2) {
|
|
25
24
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
26
25
|
i0.ɵɵadvance();
|
|
27
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.
|
|
26
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.internalSelectedItems().length, " ");
|
|
28
27
|
} }
|
|
29
28
|
function MultiSelectDropdownComponent_ng_container_4_Template(rf, ctx) { if (rf & 1) {
|
|
30
29
|
i0.ɵɵelementContainerStart(0);
|
|
@@ -36,9 +35,9 @@ function MultiSelectDropdownComponent_ng_container_4_Template(rf, ctx) { if (rf
|
|
|
36
35
|
} if (rf & 2) {
|
|
37
36
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
38
37
|
i0.ɵɵadvance(2);
|
|
39
|
-
i0.ɵɵtextInterpolate(ctx_r1.label);
|
|
38
|
+
i0.ɵɵtextInterpolate(ctx_r1.label());
|
|
40
39
|
i0.ɵɵadvance();
|
|
41
|
-
i0.ɵɵproperty("ngIf", ctx_r1.showSelectedCount &&
|
|
40
|
+
i0.ɵɵproperty("ngIf", ctx_r1.showSelectedCount() && ctx_r1.internalSelectedItems().length > 0);
|
|
42
41
|
} }
|
|
43
42
|
function MultiSelectDropdownComponent_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
44
43
|
i0.ɵɵelementContainer(0);
|
|
@@ -50,7 +49,7 @@ function MultiSelectDropdownComponent_ng_container_5_Template(rf, ctx) { if (rf
|
|
|
50
49
|
} if (rf & 2) {
|
|
51
50
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
52
51
|
i0.ɵɵadvance();
|
|
53
|
-
i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.customLabelTemplate);
|
|
52
|
+
i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.customLabelTemplate());
|
|
54
53
|
} }
|
|
55
54
|
function MultiSelectDropdownComponent_ng_template_8_div_1__svg_svg_1_Template(rf, ctx) { if (rf & 1) {
|
|
56
55
|
i0.ɵɵnamespaceSVG();
|
|
@@ -78,11 +77,11 @@ function MultiSelectDropdownComponent_ng_template_8_div_1_Template(rf, ctx) { if
|
|
|
78
77
|
} if (rf & 2) {
|
|
79
78
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
80
79
|
i0.ɵɵadvance();
|
|
81
|
-
i0.ɵɵproperty("ngIf", !ctx_r1.isSearchInputFocused);
|
|
80
|
+
i0.ɵɵproperty("ngIf", !ctx_r1.isSearchInputFocused());
|
|
82
81
|
i0.ɵɵadvance();
|
|
83
|
-
i0.ɵɵproperty("ngModel", ctx_r1.searchInput)("ngStyle", i0.ɵɵpureFunction3(5, _c7, ctx_r1.isSearchInputFocused ? "12px" : "45px", ctx_r1.isSearchInputFocused ? "1px solid #0937B2" : "1px solid #e0e0e0", ctx_r1.isSearchInputFocused ? "45px" : "10px"))("placeholder", ctx_r1.isSearchInputFocused ? "" : ctx_r1.searchInputPlaceholder);
|
|
82
|
+
i0.ɵɵproperty("ngModel", ctx_r1.searchInput())("ngStyle", i0.ɵɵpureFunction3(5, _c7, ctx_r1.isSearchInputFocused() ? "12px" : "45px", ctx_r1.isSearchInputFocused() ? "1px solid #0937B2" : "1px solid #e0e0e0", ctx_r1.isSearchInputFocused() ? "45px" : "10px"))("placeholder", ctx_r1.isSearchInputFocused() ? "" : ctx_r1.searchInputPlaceholder());
|
|
84
83
|
i0.ɵɵadvance();
|
|
85
|
-
i0.ɵɵproperty("ngIf", ctx_r1.isSearchInputFocused);
|
|
84
|
+
i0.ɵɵproperty("ngIf", ctx_r1.isSearchInputFocused());
|
|
86
85
|
} }
|
|
87
86
|
function MultiSelectDropdownComponent_ng_template_8_div_3_div_6_Template(rf, ctx) { if (rf & 1) {
|
|
88
87
|
i0.ɵɵelementStart(0, "div", 31);
|
|
@@ -122,7 +121,7 @@ function MultiSelectDropdownComponent_ng_template_8_div_4_Template(rf, ctx) { if
|
|
|
122
121
|
} if (rf & 2) {
|
|
123
122
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
124
123
|
i0.ɵɵadvance();
|
|
125
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.searchInput === "" ? ctx_r1.noDataMessage : "No results", " ");
|
|
124
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.searchInput() === "" ? ctx_r1.noDataMessage() : "No results", " ");
|
|
126
125
|
} }
|
|
127
126
|
function MultiSelectDropdownComponent_ng_template_8_div_5_Template(rf, ctx) { if (rf & 1) {
|
|
128
127
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
@@ -154,262 +153,251 @@ function MultiSelectDropdownComponent_ng_template_8_Template(rf, ctx) { if (rf &
|
|
|
154
153
|
i0.ɵɵelementEnd();
|
|
155
154
|
} if (rf & 2) {
|
|
156
155
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
157
|
-
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction2(6, _c5, ctx_r1.dropdownListHeight, ctx_r1.dropdownListWidth))("ngClass", i0.ɵɵpureFunction2(9, _c6, ctx_r1.dropdownListPosition === "Left", ctx_r1.dropdownListPosition === "Right"));
|
|
156
|
+
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction2(6, _c5, ctx_r1.dropdownListHeight(), ctx_r1.dropdownListWidth()))("ngClass", i0.ɵɵpureFunction2(9, _c6, ctx_r1.dropdownListPosition() === "Left", ctx_r1.dropdownListPosition() === "Right"));
|
|
158
157
|
i0.ɵɵadvance();
|
|
159
|
-
i0.ɵɵproperty("ngIf", ctx_r1.searchEnabled);
|
|
158
|
+
i0.ɵɵproperty("ngIf", ctx_r1.searchEnabled());
|
|
160
159
|
i0.ɵɵadvance(2);
|
|
161
|
-
i0.ɵɵproperty("ngForOf", ctx_r1.
|
|
160
|
+
i0.ɵɵproperty("ngForOf", ctx_r1.displayData());
|
|
162
161
|
i0.ɵɵadvance();
|
|
163
|
-
i0.ɵɵproperty("ngIf",
|
|
162
|
+
i0.ɵɵproperty("ngIf", ctx_r1.displayData().length === 0);
|
|
164
163
|
i0.ɵɵadvance();
|
|
165
|
-
i0.ɵɵproperty("ngIf", ctx_r1.
|
|
164
|
+
i0.ɵɵproperty("ngIf", ctx_r1.internalData().length !== 0 && !ctx_r1.hideApplyButton());
|
|
166
165
|
} }
|
|
167
166
|
export class MultiSelectDropdownComponent {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
this.
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
this.
|
|
178
|
-
this.
|
|
179
|
-
this.
|
|
180
|
-
this.
|
|
181
|
-
this.
|
|
182
|
-
this.
|
|
183
|
-
this.
|
|
184
|
-
this.
|
|
185
|
-
this.
|
|
186
|
-
this.
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
this.
|
|
190
|
-
this.
|
|
191
|
-
this.
|
|
192
|
-
|
|
193
|
-
this.
|
|
194
|
-
|
|
195
|
-
this.
|
|
196
|
-
this.
|
|
197
|
-
this.
|
|
198
|
-
this.
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
this.
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
167
|
+
constructor() {
|
|
168
|
+
// Dependencies Injection
|
|
169
|
+
this.eRef = inject(ElementRef);
|
|
170
|
+
this.overlay = inject(Overlay);
|
|
171
|
+
this.viewContainerRef = inject(ViewContainerRef);
|
|
172
|
+
// Signal-based Inputs
|
|
173
|
+
this.data = input([]);
|
|
174
|
+
this.selectedItems = input([]);
|
|
175
|
+
this.label = input('Select');
|
|
176
|
+
this.height = input('');
|
|
177
|
+
this.width = input('');
|
|
178
|
+
this.dropdownListHeight = input('');
|
|
179
|
+
this.dropdownListWidth = input('');
|
|
180
|
+
this.dropdownListPosition = input('Left');
|
|
181
|
+
this.enableSelectAll = input(false);
|
|
182
|
+
this.searchEnabled = input(true);
|
|
183
|
+
this.showSelectedCount = input(false);
|
|
184
|
+
this.noDataMessage = input('No Data');
|
|
185
|
+
this.options = input({
|
|
186
|
+
sortLabels: true,
|
|
187
|
+
});
|
|
188
|
+
this.hideApplyButton = input(false);
|
|
189
|
+
this.searchInputPlaceholder = input('Search Keyword');
|
|
190
|
+
this.customLabelTemplate = input();
|
|
191
|
+
// Signal-based Output
|
|
192
|
+
this.onChange = output();
|
|
193
|
+
// Internal Signals for component state
|
|
194
|
+
this.isOpen = signal(false);
|
|
195
|
+
this.searchInput = signal('');
|
|
196
|
+
this.isSearchInputFocused = signal(false);
|
|
197
|
+
this.internalSelectedItems = signal([]);
|
|
198
|
+
this.internalData = signal([]);
|
|
199
|
+
// Constants
|
|
200
|
+
this.SELECT_ALL_ENUM = 'SELECT_ALL_ENABLED';
|
|
201
|
+
/**
|
|
202
|
+
* Computed signal for the data to be displayed in the dropdown list.
|
|
203
|
+
* Filters based on search input and sorts if the option is enabled.
|
|
204
|
+
*/
|
|
205
|
+
this.displayData = computed(() => {
|
|
206
|
+
let dataToDisplay = this.searchEnabled() && this.searchInput() ?
|
|
207
|
+
this.filterByValue(this.internalData(), this.searchInput()) :
|
|
208
|
+
this.internalData();
|
|
209
|
+
if (this.options().sortLabels) {
|
|
210
|
+
dataToDisplay = this.sortData(dataToDisplay);
|
|
211
211
|
}
|
|
212
|
-
|
|
213
|
-
|
|
212
|
+
return dataToDisplay;
|
|
213
|
+
});
|
|
214
|
+
effect(() => {
|
|
215
|
+
this.handleInputChanges();
|
|
216
|
+
}, { allowSignalWrites: true });
|
|
217
|
+
effect(() => {
|
|
218
|
+
if (this.isOpen()) {
|
|
219
|
+
this.openDropdown(this.popupContainer, this.selectElement?.nativeElement);
|
|
214
220
|
}
|
|
215
221
|
else {
|
|
216
|
-
|
|
217
|
-
|
|
222
|
+
this.overlayRef?.detach();
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Effect to manage the component's internal state based on external inputs.
|
|
228
|
+
*/
|
|
229
|
+
handleInputChanges() {
|
|
230
|
+
const values = this.data();
|
|
231
|
+
const selected = this.selectedItems();
|
|
232
|
+
const formattedData = values?.map(item => ({
|
|
233
|
+
...item,
|
|
234
|
+
checked: selected?.some(s => s.value === item.value) ?? false
|
|
235
|
+
})) || [];
|
|
236
|
+
this.internalData.set(formattedData);
|
|
237
|
+
this.internalSelectedItems.set(selected);
|
|
238
|
+
// Apply the 'select all' logic
|
|
239
|
+
this.internalData.update(currentData => {
|
|
240
|
+
const isSelectAll = this.enableSelectAll() && currentData.every(item => item.checked || item.value === this.SELECT_ALL_ENUM);
|
|
241
|
+
const selectAllItem = {
|
|
242
|
+
label: 'Select all',
|
|
243
|
+
value: this.SELECT_ALL_ENUM,
|
|
244
|
+
checked: isSelectAll
|
|
245
|
+
};
|
|
246
|
+
const hasSelectAll = currentData.some(t => t.value === this.SELECT_ALL_ENUM);
|
|
247
|
+
if (this.enableSelectAll()) {
|
|
248
|
+
if (!hasSelectAll) {
|
|
249
|
+
return [selectAllItem, ...currentData];
|
|
218
250
|
}
|
|
219
251
|
else {
|
|
220
|
-
return item;
|
|
252
|
+
return currentData.map(item => item.value === this.SELECT_ALL_ENUM ? selectAllItem : item);
|
|
221
253
|
}
|
|
222
254
|
}
|
|
223
|
-
|
|
224
|
-
|
|
255
|
+
else {
|
|
256
|
+
return currentData.filter(item => item.value !== this.SELECT_ALL_ENUM);
|
|
257
|
+
}
|
|
258
|
+
});
|
|
225
259
|
}
|
|
226
|
-
|
|
227
|
-
|
|
260
|
+
/**
|
|
261
|
+
* Helper function to sort the data.
|
|
262
|
+
*/
|
|
263
|
+
sortData(data) {
|
|
264
|
+
const checkedValues = data.filter(a => a.checked);
|
|
265
|
+
const unCheckedValues = data.filter(a => !a.checked);
|
|
266
|
+
const sortFn = (a, b) => a.label > b.label ? 1 : -1;
|
|
267
|
+
return [
|
|
268
|
+
...checkedValues.sort(sortFn),
|
|
269
|
+
...unCheckedValues.sort(sortFn)
|
|
270
|
+
].filter(t => t.value !== this.SELECT_ALL_ENUM);
|
|
228
271
|
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
272
|
+
/**
|
|
273
|
+
* Helper function to filter the data.
|
|
274
|
+
*/
|
|
275
|
+
filterByValue(array, search) {
|
|
276
|
+
return array.filter(o => o?.label?.toLowerCase().includes(search.toLowerCase())) || [];
|
|
233
277
|
}
|
|
278
|
+
/**
|
|
279
|
+
* Toggles the dropdown's open/close state.
|
|
280
|
+
*/
|
|
234
281
|
toggleDropdown() {
|
|
235
|
-
this.
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
282
|
+
this.isOpen.update(current => !current);
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Toggles the checked state of a specific item.
|
|
286
|
+
* Handles the 'Select All' logic.
|
|
287
|
+
*/
|
|
288
|
+
toggleSelectedItems(event, item) {
|
|
289
|
+
event?.stopPropagation();
|
|
290
|
+
if (this.enableSelectAll() && item.value === this.SELECT_ALL_ENUM) {
|
|
291
|
+
this.internalData.update(items => items.map(t => ({ ...t, checked: !item.checked })));
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
this.internalData.update(items => {
|
|
295
|
+
const updatedItems = items.map(a => a.value === item.value ? { ...a, checked: !a.checked } : a);
|
|
296
|
+
const allChecked = updatedItems
|
|
297
|
+
.filter(r => r.value !== this.SELECT_ALL_ENUM)
|
|
298
|
+
.every(t => t.checked);
|
|
299
|
+
return updatedItems.map(a => a.value === this.SELECT_ALL_ENUM ? { ...a, checked: allChecked } : a);
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
if (this.hideApplyButton()) {
|
|
303
|
+
this.applyFilters();
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Emits the selected items and closes the dropdown.
|
|
308
|
+
*/
|
|
309
|
+
applyFilters() {
|
|
310
|
+
const selected = this.internalData()
|
|
311
|
+
.filter(a => a.checked && a.value !== this.SELECT_ALL_ENUM)
|
|
312
|
+
.map(item => {
|
|
313
|
+
const { checked, ...data } = item;
|
|
314
|
+
return data;
|
|
245
315
|
});
|
|
316
|
+
// Use the signal output's emit method
|
|
317
|
+
this.onChange.emit(selected);
|
|
318
|
+
this.internalSelectedItems.set(selected);
|
|
319
|
+
if (!this.hideApplyButton()) {
|
|
320
|
+
this.isOpen.set(false);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Resets the dropdown to an empty state.
|
|
325
|
+
*/
|
|
326
|
+
onReset() {
|
|
327
|
+
this.internalData.update(items => items.map(item => ({ ...item, checked: false })));
|
|
328
|
+
this.applyFilters();
|
|
329
|
+
this.isOpen.set(false);
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Closes the dropdown and reverts any changes.
|
|
333
|
+
*/
|
|
334
|
+
onCancel() {
|
|
335
|
+
this.isOpen.set(false);
|
|
336
|
+
this.searchInput.set('');
|
|
337
|
+
// Revert internal data to match the last selected items
|
|
338
|
+
this.handleInputChanges();
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Toggles the focus state of the search input.
|
|
342
|
+
*/
|
|
343
|
+
searchInputFocused(isFocused) {
|
|
344
|
+
this.isSearchInputFocused.set(isFocused);
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Clears the search input and unfocuses it.
|
|
348
|
+
*/
|
|
349
|
+
searchInputCanceled(event) {
|
|
350
|
+
event.stopPropagation();
|
|
351
|
+
this.searchInput.set('');
|
|
352
|
+
this.isSearchInputFocused.set(false);
|
|
246
353
|
}
|
|
354
|
+
/**
|
|
355
|
+
* Handles the change event from the search input.
|
|
356
|
+
*/
|
|
357
|
+
searchInputOnChange(newValue) {
|
|
358
|
+
this.searchInput.set(newValue);
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Creates and displays the overlay for the dropdown list.
|
|
362
|
+
*/
|
|
247
363
|
openDropdown(template, origin) {
|
|
364
|
+
if (this.overlayRef && this.overlayRef.hasAttached()) {
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
248
367
|
const positionsBottom = [
|
|
249
|
-
new ConnectionPositionPair({ originX:
|
|
250
|
-
new ConnectionPositionPair({ originX:
|
|
368
|
+
new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }, 0, 4),
|
|
369
|
+
new ConnectionPositionPair({ originX: 'end', originY: 'bottom' }, { overlayX: 'end', overlayY: 'top' }, 0, 4),
|
|
251
370
|
];
|
|
252
371
|
const positionsTop = [
|
|
253
|
-
new ConnectionPositionPair({ originX:
|
|
254
|
-
new ConnectionPositionPair({ originX:
|
|
372
|
+
new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'bottom' }, 0, -4),
|
|
373
|
+
new ConnectionPositionPair({ originX: 'end', originY: 'top' }, { overlayX: 'end', overlayY: 'bottom' }, 0, -4),
|
|
255
374
|
];
|
|
256
375
|
const positionStrategy = this.overlay
|
|
257
376
|
.position()
|
|
258
377
|
.flexibleConnectedTo(origin)
|
|
259
378
|
.withPositions([
|
|
260
|
-
...(this.dropdownListPosition ===
|
|
261
|
-
...(this.dropdownListPosition ===
|
|
379
|
+
...(this.dropdownListPosition() === 'Right' ? positionsBottom.reverse() : positionsBottom),
|
|
380
|
+
...(this.dropdownListPosition() === 'Right' ? positionsTop.reverse() : positionsTop),
|
|
262
381
|
])
|
|
263
382
|
.withPush(true);
|
|
264
383
|
const configs = new OverlayConfig({
|
|
265
384
|
hasBackdrop: true,
|
|
266
|
-
backdropClass:
|
|
385
|
+
backdropClass: 'cdk-overlay-transparent-backdrop',
|
|
267
386
|
scrollStrategy: this.overlay.scrollStrategies.reposition(),
|
|
268
387
|
positionStrategy,
|
|
269
|
-
width: origin?.clientWidth
|
|
388
|
+
width: origin?.clientWidth,
|
|
270
389
|
});
|
|
271
390
|
this.overlayRef = this.overlay.create(configs);
|
|
272
|
-
if (this.dropdownListWidth)
|
|
273
|
-
this.overlayRef
|
|
274
|
-
if (this.dropdownListHeight)
|
|
275
|
-
this.overlayRef?.updateSize({ height: this.dropdownListHeight });
|
|
276
|
-
this.overlayRef?.attach(new TemplatePortal(template, this.viewContainerRef));
|
|
277
|
-
this.overlayRef?.backdropClick()?.subscribe(res => {
|
|
278
|
-
this.onCancel();
|
|
279
|
-
});
|
|
280
|
-
}
|
|
281
|
-
filterByValue(array, string) {
|
|
282
|
-
return array?.filter(o => o?.label?.toLowerCase()?.includes(string?.toLowerCase())) || [];
|
|
283
|
-
}
|
|
284
|
-
searchInputOnChange(newValue) {
|
|
285
|
-
this.searchInput = newValue;
|
|
286
|
-
if (newValue) {
|
|
287
|
-
this.searchData = this.filterByValue(this.localData, newValue);
|
|
288
|
-
}
|
|
289
|
-
else {
|
|
290
|
-
this.searchData = [];
|
|
291
|
-
this.searchInput = "";
|
|
391
|
+
if (this.dropdownListWidth()) {
|
|
392
|
+
this.overlayRef.updateSize({ width: this.dropdownListWidth() });
|
|
292
393
|
}
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
let sortedArray = array || [];
|
|
296
|
-
if (this.options?.sortLabels) {
|
|
297
|
-
const checkedValues = array
|
|
298
|
-
?.filter(a => a?.checked)
|
|
299
|
-
?.sort((a, b) => (a?.label > b?.label ? 1 : b?.label > a?.label ? -1 : 0)) || [];
|
|
300
|
-
const unCheckedValues = array
|
|
301
|
-
?.filter(a => !a?.checked)
|
|
302
|
-
?.sort((a, b) => (a?.label > b?.label ? 1 : b?.label > a?.label ? -1 : 0)) || [];
|
|
303
|
-
sortedArray = [...checkedValues, ...unCheckedValues]?.filter(t => t?.value !== this.SELECT_ALL_ENUM) || [];
|
|
304
|
-
}
|
|
305
|
-
if (!sortedArray?.some(option => option?.value === this.SELECT_ALL_ENUM) && this.enableSelectAll && sortedArray?.length > 0) {
|
|
306
|
-
sortedArray?.unshift({
|
|
307
|
-
label: "Select all",
|
|
308
|
-
value: this.SELECT_ALL_ENUM,
|
|
309
|
-
checked: sortedArray?.every(y => y?.checked)
|
|
310
|
-
});
|
|
311
|
-
}
|
|
312
|
-
return sortedArray;
|
|
313
|
-
}
|
|
314
|
-
toggleSelectedItems(event, item) {
|
|
315
|
-
event?.stopPropagation();
|
|
316
|
-
if (this.enableSelectAll && item?.value === this.SELECT_ALL_ENUM) {
|
|
317
|
-
this.localData = this.localData?.map(t => ({
|
|
318
|
-
...t,
|
|
319
|
-
checked: !item?.checked
|
|
320
|
-
})) || [];
|
|
321
|
-
if (this.hideApplyButton) {
|
|
322
|
-
this.applyFilters();
|
|
323
|
-
}
|
|
324
|
-
return;
|
|
394
|
+
if (this.dropdownListHeight()) {
|
|
395
|
+
this.overlayRef.updateSize({ height: this.dropdownListHeight() });
|
|
325
396
|
}
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
...this.localData?.map(a => {
|
|
329
|
-
if (a?.value === item?.value || a?.value === this.SELECT_ALL_ENUM) {
|
|
330
|
-
return {
|
|
331
|
-
...a,
|
|
332
|
-
checked: false
|
|
333
|
-
};
|
|
334
|
-
}
|
|
335
|
-
return a;
|
|
336
|
-
}) || []
|
|
337
|
-
];
|
|
338
|
-
}
|
|
339
|
-
else {
|
|
340
|
-
this.localData = [
|
|
341
|
-
...this.localData?.map(a => {
|
|
342
|
-
if (a?.value === item?.value) {
|
|
343
|
-
return {
|
|
344
|
-
...a,
|
|
345
|
-
checked: true
|
|
346
|
-
};
|
|
347
|
-
}
|
|
348
|
-
return a;
|
|
349
|
-
}) || []
|
|
350
|
-
];
|
|
351
|
-
if (this.enableSelectAll && this.localData?.filter(r => r?.value !== this.SELECT_ALL_ENUM)?.every(t => t?.checked)) {
|
|
352
|
-
this.localData = [
|
|
353
|
-
...this.localData?.map(a => {
|
|
354
|
-
if (a?.value === this.SELECT_ALL_ENUM) {
|
|
355
|
-
return {
|
|
356
|
-
...a,
|
|
357
|
-
checked: true
|
|
358
|
-
};
|
|
359
|
-
}
|
|
360
|
-
return a;
|
|
361
|
-
}) || []
|
|
362
|
-
];
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
if (this.searchEnabled) {
|
|
366
|
-
this.searchInputOnChange(this.searchInput);
|
|
367
|
-
}
|
|
368
|
-
if (this.hideApplyButton) {
|
|
369
|
-
this.applyFilters();
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
applyFilters() {
|
|
373
|
-
this.onChange?.emit(this.localData
|
|
374
|
-
?.filter(a => {
|
|
375
|
-
return a?.checked && a?.value !== this.SELECT_ALL_ENUM;
|
|
376
|
-
})
|
|
377
|
-
?.map(item => {
|
|
378
|
-
const { checked, ...data } = item || {};
|
|
379
|
-
return data;
|
|
380
|
-
}) || []);
|
|
381
|
-
if (!this.hideApplyButton) {
|
|
382
|
-
this.onCancel();
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
onReset() {
|
|
386
|
-
this.isSearchInputFocused = false;
|
|
387
|
-
this.onChange?.emit([]);
|
|
388
|
-
this.isOpen = false;
|
|
389
|
-
this.searchInput = "";
|
|
390
|
-
}
|
|
391
|
-
onCancel() {
|
|
392
|
-
this.isSearchInputFocused = false;
|
|
393
|
-
this.localData = this.localData?.map(a => {
|
|
394
|
-
if (this.localSelectedItems?.some(b => b?.value === a?.value && String(b?.checked) !== String(a?.checked))) {
|
|
395
|
-
return a;
|
|
396
|
-
}
|
|
397
|
-
else {
|
|
398
|
-
if (a?.value !== this.SELECT_ALL_ENUM && this.hideApplyButton) {
|
|
399
|
-
return {
|
|
400
|
-
...a,
|
|
401
|
-
checked: false
|
|
402
|
-
};
|
|
403
|
-
}
|
|
404
|
-
return a;
|
|
405
|
-
}
|
|
406
|
-
}) || [];
|
|
407
|
-
this.isOpen = false;
|
|
408
|
-
this.searchInput = "";
|
|
409
|
-
this.overlayRef?.detach();
|
|
410
|
-
this.searchInput = "";
|
|
397
|
+
this.overlayRef.attach(new TemplatePortal(template, this.viewContainerRef));
|
|
398
|
+
this.overlayRef.backdropClick().subscribe(() => this.onCancel());
|
|
411
399
|
}
|
|
412
|
-
static { this.ɵfac = function MultiSelectDropdownComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MultiSelectDropdownComponent)(
|
|
400
|
+
static { this.ɵfac = function MultiSelectDropdownComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MultiSelectDropdownComponent)(); }; }
|
|
413
401
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MultiSelectDropdownComponent, selectors: [["mis-multi-select-dropdown"]], viewQuery: function MultiSelectDropdownComponent_Query(rf, ctx) { if (rf & 1) {
|
|
414
402
|
i0.ɵɵviewQuery(_c0, 5);
|
|
415
403
|
i0.ɵɵviewQuery(_c1, 5);
|
|
@@ -417,7 +405,7 @@ export class MultiSelectDropdownComponent {
|
|
|
417
405
|
let _t;
|
|
418
406
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.selectElement = _t.first);
|
|
419
407
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.popupContainer = _t.first);
|
|
420
|
-
} }, inputs: { data: "data", label: "label", height: "height", width: "width", dropdownListHeight: "dropdownListHeight", dropdownListWidth: "dropdownListWidth", dropdownListPosition: "dropdownListPosition", enableSelectAll: "enableSelectAll", searchEnabled: "searchEnabled", showSelectedCount: "showSelectedCount", noDataMessage: "noDataMessage", options: "options",
|
|
408
|
+
} }, inputs: { data: [1, "data"], selectedItems: [1, "selectedItems"], label: [1, "label"], height: [1, "height"], width: [1, "width"], dropdownListHeight: [1, "dropdownListHeight"], dropdownListWidth: [1, "dropdownListWidth"], dropdownListPosition: [1, "dropdownListPosition"], enableSelectAll: [1, "enableSelectAll"], searchEnabled: [1, "searchEnabled"], showSelectedCount: [1, "showSelectedCount"], noDataMessage: [1, "noDataMessage"], options: [1, "options"], hideApplyButton: [1, "hideApplyButton"], searchInputPlaceholder: [1, "searchInputPlaceholder"], customLabelTemplate: [1, "customLabelTemplate"] }, outputs: { onChange: "onChange" }, decls: 10, vars: 12, consts: [["select", ""], ["popupContainer", ""], [1, "container", 3, "ngStyle"], ["tabindex", "0", 1, "dropdown", 3, "keyup.enter", "click", "ngStyle"], [1, "label"], [4, "ngIf"], ["width", "20", "height", "20", "viewBox", "0 0 20 20", "fill", "none", "xmlns", "http://www.w3.org/2000/svg", 1, "handle", 3, "ngStyle"], ["fill-rule", "evenodd", "clip-rule", "evenodd", "d", "M13.825 7.15845L10 10.9751L6.175 7.15845L5 8.33345L10 13.3334L15 8.33345L13.825 7.15845Z", "fill", "#181F33"], [1, "text"], ["class", "count", 4, "ngIf"], [1, "count"], [4, "ngTemplateOutlet"], [1, "popup-container", 3, "ngStyle", "ngClass"], ["class", "search-container", 4, "ngIf"], [1, "items"], ["class", "item", "tabindex", "0", 3, "ngClass", "keyup.enter", "click", 4, "ngFor", "ngForOf"], ["class", "noData", 4, "ngIf"], ["class", "actions-container", 4, "ngIf"], [1, "search-container"], ["class", "search-icon", "width", "24", "height", "24", "viewBox", "0 0 24 24", "fill", "none", "xmlns", "http://www.w3.org/2000/svg", 4, "ngIf"], [1, "search-input", 3, "ngModelChange", "focus", "ngModel", "ngStyle", "placeholder"], ["class", "cancel-icon", "width", "24", "height", "24", "viewBox", "0 0 24 24", "fill", "none", "xmlns", "http://www.w3.org/2000/svg", 3, "click", 4, "ngIf"], ["width", "24", "height", "24", "viewBox", "0 0 24 24", "fill", "none", "xmlns", "http://www.w3.org/2000/svg", 1, "search-icon"], ["fill-rule", "evenodd", "clip-rule", "evenodd", "d", "M4.21508 11.1456C4.21508 7.3179 7.33722 4.21165 11.1926 4.21165C15.048 4.21165 18.1702 7.3179 18.1702 11.1456C18.1702 12.6931 17.6599 14.1226 16.7972 15.2767L15.3685 16.7013C14.2044 17.5668 12.759 18.0796 11.1926 18.0796C7.33722 18.0796 4.21508 14.9734 4.21508 11.1456ZM15.9421 17.7835C14.6021 18.7329 12.9627 19.2913 11.1926 19.2913C6.66977 19.2913 3 15.6461 3 11.1456C3 6.64512 6.66977 3 11.1926 3C15.7155 3 19.3852 6.64512 19.3852 11.1456C19.3852 12.9371 18.8037 14.5931 17.8184 15.9375L19.8361 17.4048C20.6705 17.912 21.7554 18.6543 20.2454 20.215C18.7353 21.7756 18.0099 20.6663 17.4991 19.8364L15.9421 17.7835Z", "fill", "#6A737D"], ["width", "24", "height", "24", "viewBox", "0 0 24 24", "fill", "none", "xmlns", "http://www.w3.org/2000/svg", 1, "cancel-icon", 3, "click"], ["fill-rule", "evenodd", "clip-rule", "evenodd", "d", "M8.87446 7.32144C8.44588 6.89285 7.751 6.89285 7.32242 7.32144C6.89383 7.75002 6.89383 8.4449 7.32242 8.87349L10.4488 11.9999L7.32357 15.1252C6.89498 15.5538 6.89498 16.2486 7.32357 16.6772C7.75215 17.1058 8.44703 17.1058 8.87561 16.6772L12.0009 13.552L15.1261 16.6772C15.5547 17.1058 16.2496 17.1058 16.6781 16.6772C17.1067 16.2486 17.1067 15.5537 16.6781 15.1251L13.5529 11.9999L16.6793 8.87354C17.1079 8.44496 17.1079 7.75008 16.6793 7.3215C16.2507 6.89291 15.5558 6.89291 15.1273 7.3215L12.0009 10.4479L8.87446 7.32144Z", "fill", "#6A737D"], ["tabindex", "0", 1, "item", 3, "keyup.enter", "click", "ngClass"], [1, "checkbox-container-wrapper"], [1, "checkbox-container"], ["tabindex", "-1", 3, "checked"], ["class", "icon-container", 4, "ngIf"], [1, "icon-container"], ["alt", "no img", 1, "icon", 3, "src"], [1, "noData"], [1, "actions-container"], [3, "click", "ngStyle"], [3, "name", "type", "width"]], template: function MultiSelectDropdownComponent_Template(rf, ctx) { if (rf & 1) {
|
|
421
409
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
422
410
|
i0.ɵɵelementStart(0, "div", 2)(1, "div", 3, 0);
|
|
423
411
|
i0.ɵɵlistener("keyup.enter", function MultiSelectDropdownComponent_Template_div_keyup_enter_1_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.toggleDropdown()); })("click", function MultiSelectDropdownComponent_Template_div_click_1_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.toggleDropdown()); });
|
|
@@ -430,60 +418,26 @@ export class MultiSelectDropdownComponent {
|
|
|
430
418
|
i0.ɵɵelementEnd()()();
|
|
431
419
|
i0.ɵɵtemplate(8, MultiSelectDropdownComponent_ng_template_8_Template, 6, 12, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
|
|
432
420
|
} if (rf & 2) {
|
|
433
|
-
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction2(5, _c2, ctx.height.length > 0 ? ctx.height : "", ctx.width.length > 0 ? ctx.width : ""));
|
|
421
|
+
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction2(5, _c2, ctx.height().length > 0 ? ctx.height() : "", ctx.width().length > 0 ? ctx.width() : ""));
|
|
434
422
|
i0.ɵɵadvance();
|
|
435
|
-
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(8, _c3, ctx.isOpen ? "#E6EBF7" : ""));
|
|
423
|
+
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(8, _c3, ctx.isOpen() ? "#E6EBF7" : ""));
|
|
436
424
|
i0.ɵɵadvance(3);
|
|
437
|
-
i0.ɵɵproperty("ngIf", !ctx.customLabelTemplate);
|
|
425
|
+
i0.ɵɵproperty("ngIf", !ctx.customLabelTemplate());
|
|
438
426
|
i0.ɵɵadvance();
|
|
439
|
-
i0.ɵɵproperty("ngIf", ctx.customLabelTemplate);
|
|
427
|
+
i0.ɵɵproperty("ngIf", ctx.customLabelTemplate());
|
|
440
428
|
i0.ɵɵadvance();
|
|
441
|
-
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(10, _c4, ctx.isOpen ? "rotate(180deg)" : "rotate(0deg)"));
|
|
442
|
-
} }, dependencies: [
|
|
429
|
+
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(10, _c4, ctx.isOpen() ? "rotate(180deg)" : "rotate(0deg)"));
|
|
430
|
+
} }, dependencies: [i1.NgClass, i1.NgForOf, i1.NgIf, i1.NgTemplateOutlet, i1.NgStyle, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.CheckboxComponent, i4.ButtonComponent], styles: [".container[_ngcontent-%COMP%]{position:relative;display:flex;justify-content:center;align-items:center;flex-wrap:wrap;height:32px;width:256px;font-family:Lato,sans-serif!important}.container[_ngcontent-%COMP%] .dropdown[_ngcontent-%COMP%]{height:inherit;border:1px solid #e0e0e0;border-radius:6px;background-color:#fff;cursor:pointer;display:flex;justify-content:space-between;align-items:center;width:100%;padding:0 12px;overflow:hidden}.container[_ngcontent-%COMP%] .dropdown[_ngcontent-%COMP%]:hover, .container[_ngcontent-%COMP%] .dropdown[_ngcontent-%COMP%]:focus-visible{background-color:#f5f7fc;outline:none}.container[_ngcontent-%COMP%] .dropdown[_ngcontent-%COMP%] .label[_ngcontent-%COMP%]{display:flex;justify-content:flex-start;align-items:center;width:calc(100% - 32px);font-style:normal;font-weight:400;font-size:14px;line-height:20px;letter-spacing:.2px;color:#181f33}.container[_ngcontent-%COMP%] .dropdown[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] .text[_ngcontent-%COMP%]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-style:normal;font-weight:400;font-size:14px;line-height:20px;letter-spacing:.2px;color:#181f33}.container[_ngcontent-%COMP%] .dropdown[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] .count[_ngcontent-%COMP%]{background-color:#e0e0e0;border-radius:50%;padding:2px 7px;margin:0 0 0 8px;font-style:normal;font-weight:400;font-size:14px;line-height:20px;text-align:center;letter-spacing:.2px;color:#181f33}.container[_ngcontent-%COMP%] .dropdown[_ngcontent-%COMP%] .handle[_ngcontent-%COMP%]{width:24px;height:24px;transition:.3s;position:absolute;right:12px;border-radius:50%;overflow:hidden}.popup-container[_ngcontent-%COMP%]{width:100%;max-height:340px;padding-bottom:0;border:1px solid #e0e0e0;border-radius:8px;background-color:#fff;box-shadow:0 12px 24px #0000001f;display:flex;flex-direction:column;overflow:hidden;justify-content:flex-start}.popup-container[_ngcontent-%COMP%]::-webkit-scrollbar{width:0;height:0}.popup-container[_ngcontent-%COMP%] .search-container[_ngcontent-%COMP%]{position:relative;box-sizing:border-box;padding:8px}.popup-container[_ngcontent-%COMP%] .search-container[_ngcontent-%COMP%] .search-icon[_ngcontent-%COMP%]{position:absolute;width:24px;height:24px;top:50%;transform:translateY(-50%);left:18px;z-index:1}.popup-container[_ngcontent-%COMP%] .search-container[_ngcontent-%COMP%] .search-input[_ngcontent-%COMP%]{height:40px;width:100%;padding:12px;border:1px solid #e0e0e0;box-sizing:border-box;border-radius:8px;outline:none;caret-color:#0937b2;font-style:normal;font-weight:400;font-size:12px;line-height:18px;display:flex;align-items:center;letter-spacing:.2px;color:#181f33}.popup-container[_ngcontent-%COMP%] .search-container[_ngcontent-%COMP%] .cancel-icon[_ngcontent-%COMP%]{position:absolute;cursor:pointer;width:24px;height:24px;top:50%;transform:translateY(-50%);right:18px;z-index:1}.popup-container[_ngcontent-%COMP%] .items[_ngcontent-%COMP%]{padding:8px 0 8px 8px;overflow-y:scroll}.popup-container[_ngcontent-%COMP%] .items[_ngcontent-%COMP%]::-webkit-scrollbar{width:5px;height:0}.popup-container[_ngcontent-%COMP%] .items[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:#9aa7b4;border-radius:10px}.popup-container[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .noData[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;font-style:normal;font-weight:400;font-size:14px;line-height:20px;letter-spacing:.2px;color:#181f33}.popup-container[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .disabled[_ngcontent-%COMP%]{pointer-events:none;opacity:.5}.popup-container[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%]{cursor:pointer;display:flex;justify-content:flex-start;align-items:center;padding:8px 12px;border-radius:6px;height:auto}.popup-container[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%]:hover, .popup-container[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%]:focus-visible{background-color:#f5f7fc;outline:none}.popup-container[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%] .checkbox-container-wrapper[_ngcontent-%COMP%]{display:flex;justify-content:flex-start;align-items:center;width:90%}.popup-container[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%] .checkbox-container-wrapper[_ngcontent-%COMP%] .checkbox-container[_ngcontent-%COMP%]{display:block;position:relative;cursor:pointer;font-size:22px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.popup-container[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%] .checkbox-container-wrapper[_ngcontent-%COMP%] .checkbox-container[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.popup-container[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%] .checkbox-container-wrapper[_ngcontent-%COMP%] .checkbox-container[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:checked ~ .checkmark[_ngcontent-%COMP%]:after{display:block}.popup-container[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%] .checkbox-container-wrapper[_ngcontent-%COMP%] .checkbox-container[_ngcontent-%COMP%] .checkmark[_ngcontent-%COMP%]{position:absolute;top:-8px;left:0;height:15px;width:15px;border-radius:4px;background-color:#0079f1;border:1px solid rgb(106,115,125)}.popup-container[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%] .checkbox-container-wrapper[_ngcontent-%COMP%] .checkbox-container[_ngcontent-%COMP%] .checkmark[_ngcontent-%COMP%]:after{content:\"\";position:absolute;display:none;left:5px;top:2px;width:3px;height:6px;border:solid white;border-width:0 2px 2px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.popup-container[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%] .checkbox-container-wrapper[_ngcontent-%COMP%] .label[_ngcontent-%COMP%]{margin:0 0 0 8px;line-height:20px;font-size:14px;font-style:normal;font-weight:400;letter-spacing:.2;text-overflow:ellipsis;overflow:hidden}.popup-container[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%] .icon-container[_ngcontent-%COMP%]{width:10%;display:flex;justify-content:flex-end}.popup-container[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%] .icon-container[_ngcontent-%COMP%] .icon[_ngcontent-%COMP%]{width:20px;height:20px}.popup-container[_ngcontent-%COMP%] .actions-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;bottom:0;align-items:center;position:sticky;padding:16px;background-color:#fff;border-top:1px solid #e0e0e0;margin-top:auto}.popup-container[_ngcontent-%COMP%] .actions-container[_ngcontent-%COMP%] .cancel[_ngcontent-%COMP%]{cursor:pointer;padding:10px 32px;text-align:center;font-size:16px;line-height:24px;border-radius:8px}.popup-container[_ngcontent-%COMP%] .actions-container[_ngcontent-%COMP%] .cancel[_ngcontent-%COMP%]:hover{background:#0937b20a}.popup-container[_ngcontent-%COMP%] .actions-container[_ngcontent-%COMP%] .apply[_ngcontent-%COMP%]{cursor:pointer;padding:10px 32px;text-align:center;color:#fff;font-size:16px;line-height:24px;background:#0937b2;border-radius:8px}"] }); }
|
|
443
431
|
}
|
|
444
432
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MultiSelectDropdownComponent, [{
|
|
445
433
|
type: Component,
|
|
446
|
-
args: [{ selector: "mis-multi-select-dropdown", template: "<div\n class=\"container\"\n [ngStyle]=\"{\n height: height.length > 0 ? height : '',\n width: width.length > 0 ? width : ''\n }\"\n>\n <div\n class=\"dropdown\"\n #select\n tabindex=\"0\"\n (keyup.enter)=\"toggleDropdown()\"\n (click)=\"toggleDropdown()\"\n [ngStyle]=\"{ background: isOpen ? '#E6EBF7' : '' }\"\n >\n <div class=\"label\">\n <ng-container *ngIf=\"!customLabelTemplate\">\n <p class=\"text\">{{ label }}</p>\n <p *ngIf=\"showSelectedCount && localSelectedItems?.length > 0\" class=\"count\">\n {{ localSelectedItems?.length }}\n </p>\n </ng-container>\n <ng-container *ngIf=\"customLabelTemplate\">\n <ng-container *ngTemplateOutlet=\"customLabelTemplate\">\n </ng-container>\n </ng-container>\n </div>\n <svg\n class=\"handle\"\n [ngStyle]=\"{ transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)' }\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M13.825 7.15845L10 10.9751L6.175 7.15845L5 8.33345L10 13.3334L15 8.33345L13.825 7.15845Z\"\n fill=\"#181F33\"\n />\n </svg>\n </div>\n</div>\n<ng-template #popupContainer>\n <div\n class=\"popup-container\"\n [ngStyle]=\"{\n 'height': dropdownListHeight,\n width: dropdownListWidth\n }\"\n [ngClass]=\"{\n 'position-left': dropdownListPosition === 'Left',\n 'position-right': dropdownListPosition === 'Right'\n }\"\n >\n <div *ngIf=\"searchEnabled\" class=\"search-container\">\n <svg\n *ngIf=\"!isSearchInputFocused\"\n class=\"search-icon\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M4.21508 11.1456C4.21508 7.3179 7.33722 4.21165 11.1926 4.21165C15.048 4.21165 18.1702 7.3179 18.1702 11.1456C18.1702 12.6931 17.6599 14.1226 16.7972 15.2767L15.3685 16.7013C14.2044 17.5668 12.759 18.0796 11.1926 18.0796C7.33722 18.0796 4.21508 14.9734 4.21508 11.1456ZM15.9421 17.7835C14.6021 18.7329 12.9627 19.2913 11.1926 19.2913C6.66977 19.2913 3 15.6461 3 11.1456C3 6.64512 6.66977 3 11.1926 3C15.7155 3 19.3852 6.64512 19.3852 11.1456C19.3852 12.9371 18.8037 14.5931 17.8184 15.9375L19.8361 17.4048C20.6705 17.912 21.7554 18.6543 20.2454 20.215C18.7353 21.7756 18.0099 20.6663 17.4991 19.8364L15.9421 17.7835Z\"\n fill=\"#6A737D\"\n />\n </svg>\n <input\n [ngModel]=\"searchInput\"\n [ngStyle]=\"{\n paddingLeft: isSearchInputFocused ? '12px' : '45px',\n border: isSearchInputFocused ? '1px solid #0937B2' : '1px solid #e0e0e0',\n paddingRight: isSearchInputFocused ? '45px' : '10px'\n }\"\n (ngModelChange)=\"searchInputOnChange($event)\"\n [placeholder]=\"isSearchInputFocused ? '' : searchInputPlaceholder\"\n (focus)=\"searchInputFocused(true)\"\n class=\"search-input\"\n />\n <svg\n *ngIf=\"isSearchInputFocused\"\n class=\"cancel-icon\"\n (click)=\"searchInputCanceled($event)\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M8.87446 7.32144C8.44588 6.89285 7.751 6.89285 7.32242 7.32144C6.89383 7.75002 6.89383 8.4449 7.32242 8.87349L10.4488 11.9999L7.32357 15.1252C6.89498 15.5538 6.89498 16.2486 7.32357 16.6772C7.75215 17.1058 8.44703 17.1058 8.87561 16.6772L12.0009 13.552L15.1261 16.6772C15.5547 17.1058 16.2496 17.1058 16.6781 16.6772C17.1067 16.2486 17.1067 15.5537 16.6781 15.1251L13.5529 11.9999L16.6793 8.87354C17.1079 8.44496 17.1079 7.75008 16.6793 7.3215C16.2507 6.89291 15.5558 6.89291 15.1273 7.3215L12.0009 10.4479L8.87446 7.32144Z\"\n fill=\"#6A737D\"\n />\n </svg>\n </div>\n <div class=\"items\">\n <div\n class=\"item\"\n tabindex=\"0\"\n (keyup.enter)=\"toggleSelectedItems($event, item)\"\n (click)=\"toggleSelectedItems($event, item)\"\n *ngFor=\"let item of searchInput ? searchData : localData\"\n [ngClass]=\"{'disabled':item.disabled}\"\n >\n <div class=\"checkbox-container-wrapper\">\n <div class=\"checkbox-container\">\n <mis-checkbox [checked]=\"item.checked\" tabindex=\"-1\"></mis-checkbox>\n </div>\n <p class=\"label\">\n {{ item.label }}\n </p>\n </div>\n <div class=\"icon-container\" *ngIf=\"item.icon\">\n <img class=\"icon\" [src]=\"item.icon\" alt=\"no img\" />\n </div>\n </div>\n <div class=\"noData\" *ngIf=\"(searchInput ? searchData : localData).length === 0\">\n {{ searchInput === \"\" ? noDataMessage : \"No results\" }}\n </div>\n </div>\n <div *ngIf=\"localData.length !== 0 && !hideApplyButton\" class=\"actions-container\">\n <div [ngStyle]=\"{'width': 'calc(50% - 4px)'}\" (click)=\"onReset()\">\n <mis-button [name]=\"'Reset'\" [type]=\"'Text'\" [width]=\"'100%'\" ></mis-button>\n </div>\n <div [ngStyle]=\"{'width': 'calc(50% - 4px)'}\" (click)=\"applyFilters()\">\n <mis-button [name]=\"'Apply'\" [type]=\"'Solid'\" [width]=\"'100%'\" ></mis-button>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [".container{position:relative;display:flex;justify-content:center;align-items:center;flex-wrap:wrap;height:32px;width:256px;font-family:Lato,sans-serif!important}.container .dropdown{height:inherit;border:1px solid #e0e0e0;border-radius:6px;background-color:#fff;cursor:pointer;display:flex;justify-content:space-between;align-items:center;width:100%;padding:0 12px;overflow:hidden}.container .dropdown:hover,.container .dropdown:focus-visible{background-color:#f5f7fc;outline:none}.container .dropdown .label{display:flex;justify-content:flex-start;align-items:center;width:calc(100% - 32px);font-style:normal;font-weight:400;font-size:14px;line-height:20px;letter-spacing:.2px;color:#181f33}.container .dropdown .label .text{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-style:normal;font-weight:400;font-size:14px;line-height:20px;letter-spacing:.2px;color:#181f33}.container .dropdown .label .count{background-color:#e0e0e0;border-radius:50%;padding:2px 7px;margin:0 0 0 8px;font-style:normal;font-weight:400;font-size:14px;line-height:20px;text-align:center;letter-spacing:.2px;color:#181f33}.container .dropdown .handle{width:24px;height:24px;transition:.3s;position:absolute;right:12px;border-radius:50%;overflow:hidden}.popup-container{width:100%;max-height:340px;padding-bottom:0;border:1px solid #e0e0e0;border-radius:8px;background-color:#fff;box-shadow:0 12px 24px #0000001f;display:flex;flex-direction:column;overflow:hidden;justify-content:flex-start}.popup-container::-webkit-scrollbar{width:0;height:0}.popup-container .search-container{position:relative;box-sizing:border-box;padding:8px}.popup-container .search-container .search-icon{position:absolute;width:24px;height:24px;top:50%;transform:translateY(-50%);left:18px;z-index:1}.popup-container .search-container .search-input{height:40px;width:100%;padding:12px;border:1px solid #e0e0e0;box-sizing:border-box;border-radius:8px;outline:none;caret-color:#0937b2;font-style:normal;font-weight:400;font-size:12px;line-height:18px;display:flex;align-items:center;letter-spacing:.2px;color:#181f33}.popup-container .search-container .cancel-icon{position:absolute;cursor:pointer;width:24px;height:24px;top:50%;transform:translateY(-50%);right:18px;z-index:1}.popup-container .items{padding:8px 0 8px 8px;overflow-y:scroll}.popup-container .items::-webkit-scrollbar{width:5px;height:0}.popup-container .items::-webkit-scrollbar-thumb{background:#9aa7b4;border-radius:10px}.popup-container .items .noData{display:flex;justify-content:center;align-items:center;font-style:normal;font-weight:400;font-size:14px;line-height:20px;letter-spacing:.2px;color:#181f33}.popup-container .items .disabled{pointer-events:none;opacity:.5}.popup-container .items .item{cursor:pointer;display:flex;justify-content:flex-start;align-items:center;padding:8px 12px;border-radius:6px;height:auto}.popup-container .items .item:hover,.popup-container .items .item:focus-visible{background-color:#f5f7fc;outline:none}.popup-container .items .item .checkbox-container-wrapper{display:flex;justify-content:flex-start;align-items:center;width:90%}.popup-container .items .item .checkbox-container-wrapper .checkbox-container{display:block;position:relative;cursor:pointer;font-size:22px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.popup-container .items .item .checkbox-container-wrapper .checkbox-container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.popup-container .items .item .checkbox-container-wrapper .checkbox-container input:checked~.checkmark:after{display:block}.popup-container .items .item .checkbox-container-wrapper .checkbox-container .checkmark{position:absolute;top:-8px;left:0;height:15px;width:15px;border-radius:4px;background-color:#0079f1;border:1px solid rgb(106,115,125)}.popup-container .items .item .checkbox-container-wrapper .checkbox-container .checkmark:after{content:\"\";position:absolute;display:none;left:5px;top:2px;width:3px;height:6px;border:solid white;border-width:0 2px 2px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.popup-container .items .item .checkbox-container-wrapper .label{margin:0 0 0 8px;line-height:20px;font-size:14px;font-style:normal;font-weight:400;letter-spacing:.2;text-overflow:ellipsis;overflow:hidden}.popup-container .items .item .icon-container{width:10%;display:flex;justify-content:flex-end}.popup-container .items .item .icon-container .icon{width:20px;height:20px}.popup-container .actions-container{display:flex;justify-content:space-between;bottom:0;align-items:center;position:sticky;padding:16px;background-color:#fff;border-top:1px solid #e0e0e0;margin-top:auto}.popup-container .actions-container .cancel{cursor:pointer;padding:10px 32px;text-align:center;font-size:16px;line-height:24px;border-radius:8px}.popup-container .actions-container .cancel:hover{background:#0937b20a}.popup-container .actions-container .apply{cursor:pointer;padding:10px 32px;text-align:center;color:#fff;font-size:16px;line-height:24px;background:#0937b2;border-radius:8px}\n"] }]
|
|
447
|
-
}], () => [
|
|
448
|
-
type: Input
|
|
449
|
-
}], label: [{
|
|
450
|
-
type: Input
|
|
451
|
-
}], height: [{
|
|
452
|
-
type: Input
|
|
453
|
-
}], width: [{
|
|
454
|
-
type: Input
|
|
455
|
-
}], dropdownListHeight: [{
|
|
456
|
-
type: Input
|
|
457
|
-
}], dropdownListWidth: [{
|
|
458
|
-
type: Input
|
|
459
|
-
}], dropdownListPosition: [{
|
|
460
|
-
type: Input
|
|
461
|
-
}], enableSelectAll: [{
|
|
462
|
-
type: Input
|
|
463
|
-
}], searchEnabled: [{
|
|
464
|
-
type: Input
|
|
465
|
-
}], showSelectedCount: [{
|
|
466
|
-
type: Input
|
|
467
|
-
}], noDataMessage: [{
|
|
468
|
-
type: Input
|
|
469
|
-
}], options: [{
|
|
470
|
-
type: Input
|
|
471
|
-
}], selectedItems: [{
|
|
472
|
-
type: Input
|
|
473
|
-
}], hideApplyButton: [{
|
|
474
|
-
type: Input
|
|
475
|
-
}], searchInputPlaceholder: [{
|
|
476
|
-
type: Input
|
|
477
|
-
}], customLabelTemplate: [{
|
|
478
|
-
type: Input
|
|
479
|
-
}], onChange: [{
|
|
480
|
-
type: Output
|
|
481
|
-
}], selectElement: [{
|
|
434
|
+
args: [{ selector: 'mis-multi-select-dropdown', template: "<div\n class=\"container\"\n [ngStyle]=\"{\n height: height().length > 0 ? height() : '',\n width: width().length > 0 ? width() : ''\n }\"\n>\n <div\n class=\"dropdown\"\n #select\n tabindex=\"0\"\n (keyup.enter)=\"toggleDropdown()\"\n (click)=\"toggleDropdown()\"\n [ngStyle]=\"{ 'background': isOpen() ? '#E6EBF7' : '' }\"\n >\n <div class=\"label\">\n <ng-container *ngIf=\"!customLabelTemplate()\">\n <p class=\"text\">{{ label() }}</p>\n <p *ngIf=\"showSelectedCount() && internalSelectedItems().length > 0\" class=\"count\">\n {{ internalSelectedItems().length }}\n </p>\n </ng-container>\n <ng-container *ngIf=\"customLabelTemplate()\">\n <ng-container *ngTemplateOutlet=\"customLabelTemplate()\">\n </ng-container>\n </ng-container>\n </div>\n <svg\n class=\"handle\"\n [ngStyle]=\"{ 'transform': isOpen() ? 'rotate(180deg)' : 'rotate(0deg)' }\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M13.825 7.15845L10 10.9751L6.175 7.15845L5 8.33345L10 13.3334L15 8.33345L13.825 7.15845Z\"\n fill=\"#181F33\"\n />\n </svg>\n </div>\n</div>\n<ng-template #popupContainer>\n <div\n class=\"popup-container\"\n [ngStyle]=\"{\n 'height': dropdownListHeight(),\n width: dropdownListWidth()\n }\"\n [ngClass]=\"{\n 'position-left': dropdownListPosition() === 'Left',\n 'position-right': dropdownListPosition() === 'Right'\n }\"\n >\n <div *ngIf=\"searchEnabled()\" class=\"search-container\">\n <svg\n *ngIf=\"!isSearchInputFocused()\"\n class=\"search-icon\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M4.21508 11.1456C4.21508 7.3179 7.33722 4.21165 11.1926 4.21165C15.048 4.21165 18.1702 7.3179 18.1702 11.1456C18.1702 12.6931 17.6599 14.1226 16.7972 15.2767L15.3685 16.7013C14.2044 17.5668 12.759 18.0796 11.1926 18.0796C7.33722 18.0796 4.21508 14.9734 4.21508 11.1456ZM15.9421 17.7835C14.6021 18.7329 12.9627 19.2913 11.1926 19.2913C6.66977 19.2913 3 15.6461 3 11.1456C3 6.64512 6.66977 3 11.1926 3C15.7155 3 19.3852 6.64512 19.3852 11.1456C19.3852 12.9371 18.8037 14.5931 17.8184 15.9375L19.8361 17.4048C20.6705 17.912 21.7554 18.6543 20.2454 20.215C18.7353 21.7756 18.0099 20.6663 17.4991 19.8364L15.9421 17.7835Z\"\n fill=\"#6A737D\"\n />\n </svg>\n <input\n [ngModel]=\"searchInput()\"\n [ngStyle]=\"{\n paddingLeft: isSearchInputFocused() ? '12px' : '45px',\n border: isSearchInputFocused() ? '1px solid #0937B2' : '1px solid #e0e0e0',\n paddingRight: isSearchInputFocused() ? '45px' : '10px'\n }\"\n (ngModelChange)=\"searchInputOnChange($event)\"\n [placeholder]=\"isSearchInputFocused() ? '' : searchInputPlaceholder()\"\n (focus)=\"searchInputFocused(true)\"\n class=\"search-input\"\n />\n <svg\n *ngIf=\"isSearchInputFocused()\"\n class=\"cancel-icon\"\n (click)=\"searchInputCanceled($event)\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M8.87446 7.32144C8.44588 6.89285 7.751 6.89285 7.32242 7.32144C6.89383 7.75002 6.89383 8.4449 7.32242 8.87349L10.4488 11.9999L7.32357 15.1252C6.89498 15.5538 6.89498 16.2486 7.32357 16.6772C7.75215 17.1058 8.44703 17.1058 8.87561 16.6772L12.0009 13.552L15.1261 16.6772C15.5547 17.1058 16.2496 17.1058 16.6781 16.6772C17.1067 16.2486 17.1067 15.5537 16.6781 15.1251L13.5529 11.9999L16.6793 8.87354C17.1079 8.44496 17.1079 7.75008 16.6793 7.3215C16.2507 6.89291 15.5558 6.89291 15.1273 7.3215L12.0009 10.4479L8.87446 7.32144Z\"\n fill=\"#6A737D\"\n />\n </svg>\n </div>\n <div class=\"items\">\n <div\n class=\"item\"\n tabindex=\"0\"\n (keyup.enter)=\"toggleSelectedItems($event, item)\"\n (click)=\"toggleSelectedItems($event, item)\"\n *ngFor=\"let item of displayData()\"\n [ngClass]=\"{'disabled':item.disabled}\"\n >\n <div class=\"checkbox-container-wrapper\">\n <div class=\"checkbox-container\">\n <mis-checkbox [checked]=\"item.checked\" tabindex=\"-1\"></mis-checkbox>\n </div>\n <p class=\"label\">\n {{ item.label }}\n </p>\n </div>\n <div class=\"icon-container\" *ngIf=\"item.icon\">\n <img class=\"icon\" [src]=\"item.icon\" alt=\"no img\" />\n </div>\n </div>\n <div class=\"noData\" *ngIf=\"displayData().length === 0\">\n {{ searchInput() === \"\" ? noDataMessage() : \"No results\" }}\n </div>\n </div>\n <div *ngIf=\"internalData().length !== 0 && !hideApplyButton()\" class=\"actions-container\">\n <div [ngStyle]=\"{'width': 'calc(50% - 4px)'}\" (click)=\"onReset()\">\n <mis-button [name]=\"'Reset'\" [type]=\"'Text'\" [width]=\"'100%'\" ></mis-button>\n </div>\n <div [ngStyle]=\"{'width': 'calc(50% - 4px)'}\" (click)=\"applyFilters()\">\n <mis-button [name]=\"'Apply'\" [type]=\"'Solid'\" [width]=\"'100%'\" ></mis-button>\n </div>\n </div>\n </div>\n</ng-template>\n\n\n", styles: [".container{position:relative;display:flex;justify-content:center;align-items:center;flex-wrap:wrap;height:32px;width:256px;font-family:Lato,sans-serif!important}.container .dropdown{height:inherit;border:1px solid #e0e0e0;border-radius:6px;background-color:#fff;cursor:pointer;display:flex;justify-content:space-between;align-items:center;width:100%;padding:0 12px;overflow:hidden}.container .dropdown:hover,.container .dropdown:focus-visible{background-color:#f5f7fc;outline:none}.container .dropdown .label{display:flex;justify-content:flex-start;align-items:center;width:calc(100% - 32px);font-style:normal;font-weight:400;font-size:14px;line-height:20px;letter-spacing:.2px;color:#181f33}.container .dropdown .label .text{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-style:normal;font-weight:400;font-size:14px;line-height:20px;letter-spacing:.2px;color:#181f33}.container .dropdown .label .count{background-color:#e0e0e0;border-radius:50%;padding:2px 7px;margin:0 0 0 8px;font-style:normal;font-weight:400;font-size:14px;line-height:20px;text-align:center;letter-spacing:.2px;color:#181f33}.container .dropdown .handle{width:24px;height:24px;transition:.3s;position:absolute;right:12px;border-radius:50%;overflow:hidden}.popup-container{width:100%;max-height:340px;padding-bottom:0;border:1px solid #e0e0e0;border-radius:8px;background-color:#fff;box-shadow:0 12px 24px #0000001f;display:flex;flex-direction:column;overflow:hidden;justify-content:flex-start}.popup-container::-webkit-scrollbar{width:0;height:0}.popup-container .search-container{position:relative;box-sizing:border-box;padding:8px}.popup-container .search-container .search-icon{position:absolute;width:24px;height:24px;top:50%;transform:translateY(-50%);left:18px;z-index:1}.popup-container .search-container .search-input{height:40px;width:100%;padding:12px;border:1px solid #e0e0e0;box-sizing:border-box;border-radius:8px;outline:none;caret-color:#0937b2;font-style:normal;font-weight:400;font-size:12px;line-height:18px;display:flex;align-items:center;letter-spacing:.2px;color:#181f33}.popup-container .search-container .cancel-icon{position:absolute;cursor:pointer;width:24px;height:24px;top:50%;transform:translateY(-50%);right:18px;z-index:1}.popup-container .items{padding:8px 0 8px 8px;overflow-y:scroll}.popup-container .items::-webkit-scrollbar{width:5px;height:0}.popup-container .items::-webkit-scrollbar-thumb{background:#9aa7b4;border-radius:10px}.popup-container .items .noData{display:flex;justify-content:center;align-items:center;font-style:normal;font-weight:400;font-size:14px;line-height:20px;letter-spacing:.2px;color:#181f33}.popup-container .items .disabled{pointer-events:none;opacity:.5}.popup-container .items .item{cursor:pointer;display:flex;justify-content:flex-start;align-items:center;padding:8px 12px;border-radius:6px;height:auto}.popup-container .items .item:hover,.popup-container .items .item:focus-visible{background-color:#f5f7fc;outline:none}.popup-container .items .item .checkbox-container-wrapper{display:flex;justify-content:flex-start;align-items:center;width:90%}.popup-container .items .item .checkbox-container-wrapper .checkbox-container{display:block;position:relative;cursor:pointer;font-size:22px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.popup-container .items .item .checkbox-container-wrapper .checkbox-container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.popup-container .items .item .checkbox-container-wrapper .checkbox-container input:checked~.checkmark:after{display:block}.popup-container .items .item .checkbox-container-wrapper .checkbox-container .checkmark{position:absolute;top:-8px;left:0;height:15px;width:15px;border-radius:4px;background-color:#0079f1;border:1px solid rgb(106,115,125)}.popup-container .items .item .checkbox-container-wrapper .checkbox-container .checkmark:after{content:\"\";position:absolute;display:none;left:5px;top:2px;width:3px;height:6px;border:solid white;border-width:0 2px 2px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.popup-container .items .item .checkbox-container-wrapper .label{margin:0 0 0 8px;line-height:20px;font-size:14px;font-style:normal;font-weight:400;letter-spacing:.2;text-overflow:ellipsis;overflow:hidden}.popup-container .items .item .icon-container{width:10%;display:flex;justify-content:flex-end}.popup-container .items .item .icon-container .icon{width:20px;height:20px}.popup-container .actions-container{display:flex;justify-content:space-between;bottom:0;align-items:center;position:sticky;padding:16px;background-color:#fff;border-top:1px solid #e0e0e0;margin-top:auto}.popup-container .actions-container .cancel{cursor:pointer;padding:10px 32px;text-align:center;font-size:16px;line-height:24px;border-radius:8px}.popup-container .actions-container .cancel:hover{background:#0937b20a}.popup-container .actions-container .apply{cursor:pointer;padding:10px 32px;text-align:center;color:#fff;font-size:16px;line-height:24px;background:#0937b2;border-radius:8px}\n"] }]
|
|
435
|
+
}], () => [], { selectElement: [{
|
|
482
436
|
type: ViewChild,
|
|
483
|
-
args: [
|
|
437
|
+
args: ['select', { static: false }]
|
|
484
438
|
}], popupContainer: [{
|
|
485
439
|
type: ViewChild,
|
|
486
|
-
args: [
|
|
440
|
+
args: ['popupContainer', { static: false }]
|
|
487
441
|
}] }); })();
|
|
488
442
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MultiSelectDropdownComponent, { className: "MultiSelectDropdownComponent" }); })();
|
|
489
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL211bHRpLXNlbGVjdC1kcm9wZG93bi9tdWx0aS1zZWxlY3QtZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvbXVsdGktc2VsZWN0LWRyb3Bkb3duL211bHRpLXNlbGVjdC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWtCLE1BQU0sRUFBZSxTQUFTLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBQzdJLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQXVCLHNCQUFzQixFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7SUNnQjVGLDZCQUE2RTtJQUMzRSxZQUNGO0lBQUEsaUJBQUk7OztJQURGLGNBQ0Y7SUFERSw0R0FDRjs7O0lBSkEsNkJBQTJDO0lBQzNDLDRCQUFnQjtJQUFBLFlBQVc7SUFBQSxpQkFBSTtJQUMvQix3RkFBNkU7Ozs7SUFEN0QsZUFBVztJQUFYLGtDQUFXO0lBQ3ZCLGNBQXlEO0lBQXpELG9JQUF5RDs7O0lBSzdELHdCQUNlOzs7SUFGakIsNkJBQTBDO0lBQ3hDLCtHQUFzRDs7OztJQUF2QyxjQUFxQztJQUFyQyw2REFBcUM7Ozs7SUFtQ2xELCtCQVFDO0lBQ0MsMkJBS0U7SUFDSixpQkFBTTs7Ozs7SUFhTiwrQkFTQztJQU5DLHFOQUFTLGtDQUEyQixLQUFDO0lBT3JDLDJCQUtFO0lBQ0osaUJBQU07Ozs7SUE3Q1IsK0JBQW9EO0lBQ2xELHVHQVFDO0lBUUQsaUNBV0U7SUFGQSxBQUZBLDROQUFpQixrQ0FBMkIs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O1lBR0csZUFBZTtrQkFBdkIsS0FBSztZQUNHLHNCQUFzQjtrQkFBOUIsS0FBSztZQUNHLG1CQUFtQjtrQkFBM0IsS0FBSztZQUNJLFFBQVE7a0JBQWpCLE1BQU07WUFFaUMsYUFBYTtrQkFBcEQsU0FBUzttQkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO1lBQ1UsY0FBYztrQkFBN0QsU0FBUzttQkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7O2tGQW5DbkMsNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBOZ1pvbmUsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9wb3J0YWxcIjtcbmltcG9ydCB7IE92ZXJsYXlSZWYsIE92ZXJsYXksIENvbm5lY3Rpb25Qb3NpdGlvblBhaXIsIE92ZXJsYXlDb25maWcgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtbXVsdGktc2VsZWN0LWRyb3Bkb3duXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vbXVsdGktc2VsZWN0LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9tdWx0aS1zZWxlY3QtZHJvcGRvd24uY29tcG9uZW50LnNjc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlTZWxlY3REcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHNlYXJjaElucHV0OiBzdHJpbmcgPSBcIlwiO1xuICBpc09wZW4gPSBmYWxzZTtcbiAgbG9jYWxTZWxlY3RlZEl0ZW1zOiBNdWx0aVNlbGVjdERyb3Bkb3duSXRlbVtdID0gW107XG4gIGxvY2FsRGF0YTogTXVsdGlTZWxlY3REcm9wZG93bkl0ZW1bXSA9IFtdO1xuICBzZWFyY2hEYXRhOiBNdWx0aVNlbGVjdERyb3Bkb3duSXRlbVtdID0gW107XG4gIGlzU2VhcmNoSW5wdXRGb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XG4gIFNFTEVDVF9BTExfRU5VTSA9IFwiU0VMRUNUX0FMTF9FTkFCTEVEXCI7XG4gIEBJbnB1dCgpIHNldCBkYXRhKHZhbHVlczogTXVsdGlTZWxlY3REcm9wZG93bkl0ZW1bXSkge1xuICAgIHRoaXMubG9jYWxEYXRhID0gdmFsdWVzPy5tYXAoaXRlbSA9PiB7XG4gICAgICByZXR1cm4geyAuLi5pdGVtLCBjaGVja2VkOiBmYWxzZSB9O1xuICAgIH0pIHx8IFtdO1xuICB9XG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSBcIlNlbGVjdFwiO1xuICBASW5wdXQoKSBoZWlnaHQ6IHN0cmluZyA9IFwiXCI7XG4gIEBJbnB1dCgpIHdpZHRoOiBzdHJpbmcgPSBcIlwiO1xuICBASW5wdXQoKSBkcm9wZG93bkxpc3RIZWlnaHQ6IHN0cmluZyA9IFwiXCI7XG4gIEBJbnB1dCgpIGRyb3Bkb3duTGlzdFdpZHRoOiBzdHJpbmcgPSBcIlwiO1xuICBASW5wdXQoKSBkcm9wZG93bkxpc3RQb3NpdGlvbjogXCJMZWZ0XCIgfCBcIlJpZ2h0XCIgPSBcIkxlZnRcIjtcbiAgQElucHV0KCkgZW5hYmxlU2VsZWN0QWxsOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNlYXJjaEVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93U2VsZWN0ZWRDb3VudDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBub0RhdGFNZXNzYWdlOiBzdHJpbmcgPSBcIk5vIERhdGFcIjtcbiAgQElucHV0KCkgb3B0aW9uczogT1BUSU9OUyA9IHtcbiAgICBzb3J0TGFiZWxzOiB0cnVlXG4gIH07XG4gIEBJbnB1dCgpIHNldCBzZWxlY3RlZEl0ZW1zKHZhbHVlczogTXVsdGlTZWxlY3REcm9wZG93bkl0ZW1bXSkge1xuICAgIHRoaXMuaGFuZGxlclNldExvY2FsU2VsZWN0ZWRJdGVtcyh2YWx1ZXMpO1xuICB9XG4gIEBJbnB1dCgpIGhpZGVBcHBseUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzZWFyY2hJbnB1dFBsYWNlaG9sZGVyOiBzdHJpbmcgPSBcIlNlYXJjaCBLZXl3b3JkXCI7XG4gIEBJbnB1dCgpIGN1c3RvbUxhYmVsVGVtcGxhdGUgOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAT3V0cHV0KCkgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGQoXCJzZWxlY3RcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHNlbGVjdEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoXCJwb3B1cENvbnRhaW5lclwiLCB7IHN0YXRpYzogZmFsc2UgfSkgcG9wdXBDb250YWluZXI6IFRlbXBsYXRlUmVmPEVsZW1lbnQ+O1xuICBwcml2YXRlIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlUmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkge31cbiAgbmdPbkluaXQoKSB7fVxuXG4gIGhhbmRsZXJTZXRMb2NhbFNlbGVjdGVkSXRlbXModmFsdWVzKSB7XG4gICAgdGhpcy5sb2NhbFNlbGVjdGVkSXRlbXMgPSB2YWx1ZXMgfHwgW107XG4gICAgdGhpcy5sb2NhbERhdGEgPSB0aGlzLmxvY2FsRGF0YT8ubWFwKGl0ZW0gPT4ge1xuICAgICAgaWYgKGl0ZW0/LnZhbHVlID09PSB0aGlzLlNFTEVDVF9BTExfRU5VTSAgJiYgdmFsdWVzPy5sZW5ndGggPT09IHRoaXMubG9jYWxEYXRhPy5sZW5ndGgtMSkge1xuICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBjaGVja2VkOiB0cnVlIH07XG4gICAgICB9XG4gICAgICBpZiAodmFsdWVzPy5zb21lKGJhc2UgPT4gYmFzZT8udmFsdWUgPT09IGl0ZW0/LnZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBjaGVja2VkOiB0cnVlIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZihpdGVtPy52YWx1ZSAhPT0gdGhpcy5TRUxFQ1RfQUxMX0VOVU0gfHwgIXRoaXMuaGlkZUFwcGx5QnV0dG9uKXtcbiAgICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBjaGVja2VkOiBmYWxzZSB9O1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkgfHwgW107XG4gICAgdGhpcy5sb2NhbERhdGEgPSB0aGlzLmZvcm1hdFZhbHVlcyh0aGlzLmxvY2FsRGF0YSk7XG4gIH1cblxuICBzZWFyY2hJbnB1dEZvY3VzZWQoaXNGb2N1c2VkOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc1NlYXJjaElucHV0Rm9jdXNlZCA9IGlzRm9jdXNlZDtcbiAgfVxuXG4gIHNlYXJjaElucHV0Q2FuY2VsZWQoZXZlbnQpIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5zZWFyY2hJbnB1dCA9IFwiXCI7XG4gICAgdGhpcy5pc1NlYXJjaElucHV0Rm9jdXNlZCA9IGZhbHNlO1xuICB9XG5cbiAgdG9nZ2xlRHJvcGRvd24oKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMuaXNPcGVuID0gIXRoaXMuaXNPcGVuO1xuICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlclNldExvY2FsU2VsZWN0ZWRJdGVtcyh0aGlzLmxvY2FsU2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgIHRoaXMubG9jYWxEYXRhID0gdGhpcy5mb3JtYXRWYWx1ZXModGhpcy5sb2NhbERhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNPcGVuKSB0aGlzLm9wZW5Ecm9wZG93bih0aGlzLnBvcHVwQ29udGFpbmVyLCB0aGlzLnNlbGVjdEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgZWxzZSB0aGlzLm9uQ2FuY2VsKCk7XG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkRyb3Bkb3duKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxFbGVtZW50Piwgb3JpZ2luOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHBvc2l0aW9uc0JvdHRvbSA9IFtcbiAgICAgIG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKHsgb3JpZ2luWDogXCJzdGFydFwiLCBvcmlnaW5ZOiBcImJvdHRvbVwiIH0sIHsgb3ZlcmxheVg6IFwic3RhcnRcIiwgb3ZlcmxheVk6IFwidG9wXCIgfSwgMCwgNCksXG4gICAgICBuZXcgQ29ubmVjdGlvblBvc2l0aW9uUGFpcih7IG9yaWdpblg6IFwiZW5kXCIsIG9yaWdpblk6IFwiYm90dG9tXCIgfSwgeyBvdmVybGF5WDogXCJlbmRcIiwgb3ZlcmxheVk6IFwidG9wXCIgfSwgMCwgNClcbiAgICBdO1xuICAgIGNvbnN0IHBvc2l0aW9uc1RvcCA9IFtcbiAgICAgIG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKHsgb3JpZ2luWDogXCJzdGFydFwiLCBvcmlnaW5ZOiBcInRvcFwiIH0sIHsgb3ZlcmxheVg6IFwic3RhcnRcIiwgb3ZlcmxheVk6IFwiYm90dG9tXCIgfSwgMCwgLTQpLFxuICAgICAgbmV3IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIoeyBvcmlnaW5YOiBcImVuZFwiLCBvcmlnaW5ZOiBcInRvcFwiIH0sIHsgb3ZlcmxheVg6IFwiZW5kXCIsIG92ZXJsYXlZOiBcImJvdHRvbVwiIH0sIDAsIC00KVxuICAgIF07XG4gICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMub3ZlcmxheVxuICAgICAgLnBvc2l0aW9uKClcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKG9yaWdpbilcbiAgICAgIC53aXRoUG9zaXRpb25zKFtcbiAgICAgICAgLi4uKHRoaXMuZHJvcGRvd25MaXN0UG9zaXRpb24gPT09IFwiUmlnaHRcIiA/IHBvc2l0aW9uc0JvdHRvbS5yZXZlcnNlKCkgOiBwb3NpdGlvbnNCb3R0b20pLFxuICAgICAgICAuLi4odGhpcy5kcm9wZG93bkxpc3RQb3NpdGlvbiA9PT0gXCJSaWdodFwiID8gcG9zaXRpb25zVG9wLnJldmVyc2UoKSA6IHBvc2l0aW9uc1RvcClcbiAgICAgIF0pXG4gICAgICAud2l0aFB1c2godHJ1ZSk7XG4gICAgY29uc3QgY29uZmlncyA9IG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgYmFja2Ryb3BDbGFzczogXCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFwiLFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKSxcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3ksXG4gICAgICB3aWR0aDogb3JpZ2luPy5jbGllbnRXaWR0aFxuICAgIH0pO1xuICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoY29uZmlncyk7XG4gICAgaWYgKHRoaXMuZHJvcGRvd25MaXN0V2lkdGgpIHRoaXMub3ZlcmxheVJlZj8udXBkYXRlU2l6ZSh7IHdpZHRoOiB0aGlzLmRyb3Bkb3duTGlzdFdpZHRoIH0pO1xuICAgIGlmICh0aGlzLmRyb3Bkb3duTGlzdEhlaWdodCkgdGhpcy5vdmVybGF5UmVmPy51cGRhdGVTaXplKHsgaGVpZ2h0OiB0aGlzLmRyb3Bkb3duTGlzdEhlaWdodCB9KTtcbiAgICB0aGlzLm92ZXJsYXlSZWY/LmF0dGFjaChuZXcgVGVtcGxhdGVQb3J0YWwodGVtcGxhdGUsIHRoaXMudmlld0NvbnRhaW5lclJlZikpO1xuICAgIHRoaXMub3ZlcmxheVJlZj8uYmFja2Ryb3BDbGljaygpPy5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIHRoaXMub25DYW5jZWwoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZpbHRlckJ5VmFsdWUoYXJyYXk6IE11bHRpU2VsZWN0RHJvcGRvd25JdGVtW10sIHN0cmluZzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFycmF5Py5maWx0ZXIobyA9PiBvPy5sYWJlbD8udG9Mb3dlckNhc2UoKT8uaW5jbHVkZXMoc3RyaW5nPy50b0xvd2VyQ2FzZSgpKSkgfHwgW107XG4gIH1cblxuICBzZWFyY2hJbnB1dE9uQ2hhbmdlKG5ld1ZhbHVlKSB7XG4gICAgdGhpcy5zZWFyY2hJbnB1dCA9IG5ld1ZhbHVlO1xuICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgdGhpcy5zZWFyY2hEYXRhID0gdGhpcy5maWx0ZXJCeVZhbHVlKHRoaXMubG9jYWxEYXRhLCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoRGF0YSA9IFtdO1xuICAgICAgdGhpcy5zZWFyY2hJbnB1dCA9IFwiXCI7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0VmFsdWVzKGFycmF5OiBNdWx0aVNlbGVjdERyb3Bkb3duSXRlbVtdKSB7XG4gICAgbGV0IHNvcnRlZEFycmF5ID0gYXJyYXkgfHwgW107XG4gICAgaWYgKHRoaXMub3B0aW9ucz8uc29ydExhYmVscykge1xuICAgICAgY29uc3QgY2hlY2tlZFZhbHVlcyA9IGFycmF5XG4gICAgICAgID8uZmlsdGVyKGEgPT4gYT8uY2hlY2tlZClcbiAgICAgICAgPy5zb3J0KChhOiBNdWx0aVNlbGVjdERyb3Bkb3duSXRlbSwgYjogTXVsdGlTZWxlY3REcm9wZG93bkl0ZW0pID0+IChhPy5sYWJlbCA+IGI/LmxhYmVsID8gMSA6IGI/LmxhYmVsID4gYT8ubGFiZWwgPyAtMSA6IDApKSB8fCBbXTtcbiAgICAgIGNvbnN0IHVuQ2hlY2tlZFZhbHVlcyA9IGFycmF5XG4gICAgICAgID8uZmlsdGVyKGEgPT4gIWE/LmNoZWNrZWQpXG4gICAgICAgID8uc29ydCgoYTogTXVsdGlTZWxlY3REcm9wZG93bkl0ZW0sIGI6IE11bHRpU2VsZWN0RHJvcGRvd25JdGVtKSA9PiAoYT8ubGFiZWwgPiBiPy5sYWJlbCA/IDEgOiBiPy5sYWJlbCA+IGE/LmxhYmVsID8gLTEgOiAwKSkgfHwgW107XG4gICAgICBzb3J0ZWRBcnJheSA9IFsuLi5jaGVja2VkVmFsdWVzLCAuLi51bkNoZWNrZWRWYWx1ZXNdPy5maWx0ZXIodCA9PiB0Py52YWx1ZSAhPT0gdGhpcy5TRUxFQ1RfQUxMX0VOVU0pIHx8IFtdO1xuICAgIH1cbiAgICBpZiAoIXNvcnRlZEFycmF5Py5zb21lKG9wdGlvbiA9PiBvcHRpb24/LnZhbHVlID09PSB0aGlzLlNFTEVDVF9BTExfRU5VTSkgJiYgdGhpcy5lbmFibGVTZWxlY3RBbGwgJiYgc29ydGVkQXJyYXk/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHNvcnRlZEFycmF5Py51bnNoaWZ0KHtcbiAgICAgICAgbGFiZWw6IFwiU2VsZWN0IGFsbFwiLFxuICAgICAgICB2YWx1ZTogdGhpcy5TRUxFQ1RfQUxMX0VOVU0sXG4gICAgICAgIGNoZWNrZWQ6IHNvcnRlZEFycmF5Py5ldmVyeSh5ID0+IHk/LmNoZWNrZWQpXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNvcnRlZEFycmF5O1xuICB9XG5cbiAgdG9nZ2xlU2VsZWN0ZWRJdGVtcyhldmVudCwgaXRlbTogTXVsdGlTZWxlY3REcm9wZG93bkl0ZW0pIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuZW5hYmxlU2VsZWN0QWxsICYmIGl0ZW0/LnZhbHVlID09PSB0aGlzLlNFTEVDVF9BTExfRU5VTSkge1xuICAgICAgdGhpcy5sb2NhbERhdGEgPSB0aGlzLmxvY2FsRGF0YT8ubWFwKHQgPT4gKHtcbiAgICAgICAgLi4udCxcbiAgICAgICAgY2hlY2tlZDogIWl0ZW0/LmNoZWNrZWRcbiAgICAgIH0pKSB8fCBbXTtcbiAgICAgIGlmICh0aGlzLmhpZGVBcHBseUJ1dHRvbikge1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXRlbT8uY2hlY2tlZCkge1xuICAgICAgdGhpcy5sb2NhbERhdGEgPSBbXG4gICAgICAgIC4uLnRoaXMubG9jYWxEYXRhPy5tYXAoYSA9PiB7XG4gICAgICAgICAgaWYgKGE/LnZhbHVlID09PSBpdGVtPy52YWx1ZSB8fCBhPy52YWx1ZSA9PT0gdGhpcy5TRUxFQ1RfQUxMX0VOVU0pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmEsXG4gICAgICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfSkgfHwgW11cbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9jYWxEYXRhID0gW1xuICAgICAgICAuLi50aGlzLmxvY2FsRGF0YT8ubWFwKGEgPT4ge1xuICAgICAgICAgIGlmIChhPy52YWx1ZSA9PT0gaXRlbT8udmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmEsXG4gICAgICAgICAgICAgIGNoZWNrZWQ6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9KSB8fCBbXVxuICAgICAgXTtcbiAgICAgIGlmICh0aGlzLmVuYWJsZVNlbGVjdEFsbCAmJiB0aGlzLmxvY2FsRGF0YT8uZmlsdGVyKHIgPT4gcj8udmFsdWUgIT09IHRoaXMuU0VMRUNUX0FMTF9FTlVNKT8uZXZlcnkodCA9PiB0Py5jaGVja2VkKSkge1xuICAgICAgICB0aGlzLmxvY2FsRGF0YSA9IFtcbiAgICAgICAgICAuLi50aGlzLmxvY2FsRGF0YT8ubWFwKGEgPT4ge1xuICAgICAgICAgICAgaWYgKGE/LnZhbHVlID09PSB0aGlzLlNFTEVDVF9BTExfRU5VTSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmEsXG4gICAgICAgICAgICAgICAgY2hlY2tlZDogdHJ1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgfSkgfHwgW11cbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc2VhcmNoRW5hYmxlZCkge1xuICAgICAgdGhpcy5zZWFyY2hJbnB1dE9uQ2hhbmdlKHRoaXMuc2VhcmNoSW5wdXQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oaWRlQXBwbHlCdXR0b24pIHtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgYXBwbHlGaWx0ZXJzKCkge1xuICAgIHRoaXMub25DaGFuZ2U/LmVtaXQoXG4gICAgICB0aGlzLmxvY2FsRGF0YVxuICAgICAgICA/LmZpbHRlcihhID0+IHtcbiAgICAgICAgICByZXR1cm4gYT8uY2hlY2tlZCAmJiBhPy52YWx1ZSAhPT0gdGhpcy5TRUxFQ1RfQUxMX0VOVU07XG4gICAgICAgIH0pXG4gICAgICAgID8ubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IHsgY2hlY2tlZCwgLi4uZGF0YSB9ID0gaXRlbSB8fCB7fTtcbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSkgfHwgW11cbiAgICApO1xuICAgIGlmICghdGhpcy5oaWRlQXBwbHlCdXR0b24pIHtcbiAgICAgIHRoaXMub25DYW5jZWwoKTtcbiAgICB9XG4gIH1cblxuICBvblJlc2V0KCkge1xuICAgIHRoaXMuaXNTZWFyY2hJbnB1dEZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLm9uQ2hhbmdlPy5lbWl0KFtdKTtcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuc2VhcmNoSW5wdXQgPSBcIlwiO1xuICB9XG5cbiAgb25DYW5jZWwoKSB7XG4gICAgdGhpcy5pc1NlYXJjaElucHV0Rm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMubG9jYWxEYXRhID0gdGhpcy5sb2NhbERhdGE/Lm1hcChhID0+IHtcbiAgICAgIGlmICh0aGlzLmxvY2FsU2VsZWN0ZWRJdGVtcz8uc29tZShiID0+IGI/LnZhbHVlID09PSBhPy52YWx1ZSAmJiBTdHJpbmcoYj8uY2hlY2tlZCkgIT09IFN0cmluZyhhPy5jaGVja2VkKSkpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZihhPy52YWx1ZSAhPT0gdGhpcy5TRUxFQ1RfQUxMX0VOVU0gJiYgdGhpcy5oaWRlQXBwbHlCdXR0b24pe1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5hLFxuICAgICAgICAgICAgY2hlY2tlZDogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfVxuICAgIH0pIHx8IFtdO1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5zZWFyY2hJbnB1dCA9IFwiXCI7XG4gICAgdGhpcy5vdmVybGF5UmVmPy5kZXRhY2goKTtcbiAgICB0aGlzLnNlYXJjaElucHV0ID0gXCJcIjtcbiAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBNdWx0aVNlbGVjdERyb3Bkb3duSXRlbSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBpY29uPzogc3RyaW5nO1xuICBkaXNhYmxlZD86Ym9vbGVhblxufVxuZXhwb3J0IGludGVyZmFjZSBPUFRJT05TIHtcbiAgc29ydExhYmVsczogYm9vbGVhbjtcbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJjb250YWluZXJcIlxuICBbbmdTdHlsZV09XCJ7XG4gICAgaGVpZ2h0OiBoZWlnaHQubGVuZ3RoID4gMCA/IGhlaWdodCA6ICcnLFxuICAgIHdpZHRoOiB3aWR0aC5sZW5ndGggPiAwID8gd2lkdGggOiAnJ1xuICB9XCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZHJvcGRvd25cIlxuICAgICNzZWxlY3RcbiAgICB0YWJpbmRleD1cIjBcIlxuICAgIChrZXl1cC5lbnRlcik9XCJ0b2dnbGVEcm9wZG93bigpXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oKVwiXG4gICAgW25nU3R5bGVdPVwieyBiYWNrZ3JvdW5kOiBpc09wZW4gPyAnI0U2RUJGNycgOiAnJyB9XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjdXN0b21MYWJlbFRlbXBsYXRlXCI+XG4gICAgICA8cCBjbGFzcz1cInRleHRcIj57eyBsYWJlbCB9fTwvcD5cbiAgICAgIDxwICpuZ0lmPVwic2hvd1NlbGVjdGVkQ291bnQgJiYgbG9jYWxTZWxlY3RlZEl0ZW1zPy5sZW5ndGggPiAwXCIgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICB7eyBsb2NhbFNlbGVjdGVkSXRlbXM/Lmxlbmd0aCB9fVxuICAgICAgPC9wPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21MYWJlbFRlbXBsYXRlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tTGFiZWxUZW1wbGF0ZVwiPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPHN2Z1xuICAgICAgY2xhc3M9XCJoYW5kbGVcIlxuICAgICAgW25nU3R5bGVdPVwieyB0cmFuc2Zvcm06IGlzT3BlbiA/ICdyb3RhdGUoMTgwZGVnKScgOiAncm90YXRlKDBkZWcpJyB9XCJcbiAgICAgIHdpZHRoPVwiMjBcIlxuICAgICAgaGVpZ2h0PVwiMjBcIlxuICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgICBmaWxsPVwibm9uZVwiXG4gICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICA+XG4gICAgICA8cGF0aFxuICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgIGQ9XCJNMTMuODI1IDcuMTU4NDVMMTAgMTAuOTc1MUw2LjE3NSA3LjE1ODQ1TDUgOC4zMzM0NUwxMCAxMy4zMzM0TDE1IDguMzMzNDVMMTMuODI1IDcuMTU4NDVaXCJcbiAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgLz5cbiAgICA8L3N2Zz5cbiAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjcG9wdXBDb250YWluZXI+XG4gIDxkaXZcbiAgICBjbGFzcz1cInBvcHVwLWNvbnRhaW5lclwiXG4gICAgW25nU3R5bGVdPVwie1xuICAgICAgJ2hlaWdodCc6IGRyb3Bkb3duTGlzdEhlaWdodCxcbiAgICAgIHdpZHRoOiBkcm9wZG93bkxpc3RXaWR0aFxuICAgIH1cIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdwb3NpdGlvbi1sZWZ0JzogZHJvcGRvd25MaXN0UG9zaXRpb24gPT09ICdMZWZ0JyxcbiAgICAgICdwb3NpdGlvbi1yaWdodCc6IGRyb3Bkb3duTGlzdFBvc2l0aW9uID09PSAnUmlnaHQnXG4gICAgfVwiXG4gID5cbiAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hFbmFibGVkXCIgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyXCI+XG4gICAgICAgIDxzdmdcbiAgICAgICAgICAqbmdJZj1cIiFpc1NlYXJjaElucHV0Rm9jdXNlZFwiXG4gICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaWNvblwiXG4gICAgICAgICAgd2lkdGg9XCIyNFwiXG4gICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgZD1cIk00LjIxNTA4IDExLjE0NTZDNC4yMTUwOCA3LjMxNzkgNy4zMzcyMiA0LjIxMTY1IDExLjE5MjYgNC4yMTE2NUMxNS4wNDggNC4yMTE2NSAxOC4xNzAyIDcuMzE3OSAxOC4xNzAyIDExLjE0NTZDMTguMTcwMiAxMi42OTMxIDE3LjY1OTkgMTQuMTIyNiAxNi43OTcyIDE1LjI3NjdMMTUuMzY4NSAxNi43MDEzQzE0LjIwNDQgMTcuNTY2OCAxMi43NTkgMTguMDc5NiAxMS4xOTI2IDE4LjA3OTZDNy4zMzcyMiAxOC4wNzk2IDQuMjE1MDggMTQuOTczNCA0LjIxNTA4IDExLjE0NTZaTTE1Ljk0MjEgMTcuNzgzNUMxNC42MDIxIDE4LjczMjkgMTIuOTYyNyAxOS4yOTEzIDExLjE5MjYgMTkuMjkxM0M2LjY2OTc3IDE5LjI5MTMgMyAxNS42NDYxIDMgMTEuMTQ1NkMzIDYuNjQ1MTIgNi42Njk3NyAzIDExLjE5MjYgM0MxNS43MTU1IDMgMTkuMzg1MiA2LjY0NTEyIDE5LjM4NTIgMTEuMTQ1NkMxOS4zODUyIDEyLjkzNzEgMTguODAzNyAxNC41OTMxIDE3LjgxODQgMTUuOTM3NUwxOS44MzYxIDE3LjQwNDhDMjAuNjcwNSAxNy45MTIgMjEuNzU1NCAxOC42NTQzIDIwLjI0NTQgMjAuMjE1QzE4LjczNTMgMjEuNzc1NiAxOC4wMDk5IDIwLjY2NjMgMTcuNDk5MSAxOS44MzY0TDE1Ljk0MjEgMTcuNzgzNVpcIlxuICAgICAgICAgICAgZmlsbD1cIiM2QTczN0RcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBbbmdNb2RlbF09XCJzZWFyY2hJbnB1dFwiXG4gICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IGlzU2VhcmNoSW5wdXRGb2N1c2VkID8gJzEycHgnIDogJzQ1cHgnLFxuICAgICAgICAgICAgYm9yZGVyOiBpc1NlYXJjaElucHV0Rm9jdXNlZCA/ICcxcHggc29saWQgIzA5MzdCMicgOiAnMXB4IHNvbGlkICNlMGUwZTAnLFxuICAgICAgICAgICAgcGFkZGluZ1JpZ2h0OiBpc1NlYXJjaElucHV0Rm9jdXNlZCA/ICc0NXB4JyA6ICcxMHB4J1xuICAgICAgICAgIH1cIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaElucHV0T25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImlzU2VhcmNoSW5wdXRGb2N1c2VkID8gJycgOiBzZWFyY2hJbnB1dFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAoZm9jdXMpPVwic2VhcmNoSW5wdXRGb2N1c2VkKHRydWUpXCJcbiAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzdmdcbiAgICAgICAgICAqbmdJZj1cImlzU2VhcmNoSW5wdXRGb2N1c2VkXCJcbiAgICAgICAgICBjbGFzcz1cImNhbmNlbC1pY29uXCJcbiAgICAgICAgICAoY2xpY2spPVwic2VhcmNoSW5wdXRDYW5jZWxlZCgkZXZlbnQpXCJcbiAgICAgICAgICB3aWR0aD1cIjI0XCJcbiAgICAgICAgICBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICA+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICBkPVwiTTguODc0NDYgNy4zMjE0NEM4LjQ0NTg4IDYuODkyODUgNy43NTEgNi44OTI4NSA3LjMyMjQyIDcuMzIxNDRDNi44OTM4MyA3Ljc1MDAyIDYuODkzODMgOC40NDQ5IDcuMzIyNDIgOC44NzM0OUwxMC40NDg4IDExLjk5OTlMNy4zMjM1NyAxNS4xMjUyQzYuODk0OTggMTUuNTUzOCA2Ljg5NDk4IDE2LjI0ODYgNy4zMjM1NyAxNi42NzcyQzcuNzUyMTUgMTcuMTA1OCA4LjQ0NzAzIDE3LjEwNTggOC44NzU2MSAxNi42NzcyTDEyLjAwMDkgMTMuNTUyTDE1LjEyNjEgMTYuNjc3MkMxNS41NTQ3IDE3LjEwNTggMTYuMjQ5NiAxNy4xMDU4IDE2LjY3ODEgMTYuNjc3MkMxNy4xMDY3IDE2LjI0ODYgMTcuMTA2NyAxNS41NTM3IDE2LjY3ODEgMTUuMTI1MUwxMy41NTI5IDExLjk5OTlMMTYuNjc5MyA4Ljg3MzU0QzE3LjEwNzkgOC40NDQ5NiAxNy4xMDc5IDcuNzUwMDggMTYuNjc5MyA3LjMyMTVDMTYuMjUwNyA2Ljg5MjkxIDE1LjU1NTggNi44OTI5MSAxNS4xMjczIDcuMzIxNUwxMi4wMDA5IDEwLjQ0NzlMOC44NzQ0NiA3LjMyMTQ0WlwiXG4gICAgICAgICAgICBmaWxsPVwiIzZBNzM3RFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpdGVtc1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJpdGVtXCJcbiAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJ0b2dnbGVTZWxlY3RlZEl0ZW1zKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWxlY3RlZEl0ZW1zKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlYXJjaElucHV0ID8gc2VhcmNoRGF0YSA6IGxvY2FsRGF0YVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6aXRlbS5kaXNhYmxlZH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94LWNvbnRhaW5lci13cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3gtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgIDxtaXMtY2hlY2tib3ggW2NoZWNrZWRdPVwiaXRlbS5jaGVja2VkXCIgdGFiaW5kZXg9XCItMVwiPjwvbWlzLWNoZWNrYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8cCBjbGFzcz1cImxhYmVsXCI+XG4gICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jb250YWluZXJcIiAqbmdJZj1cIml0ZW0uaWNvblwiPlxuICAgICAgICAgICAgPGltZyBjbGFzcz1cImljb25cIiBbc3JjXT1cIml0ZW0uaWNvblwiIGFsdD1cIm5vIGltZ1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibm9EYXRhXCIgKm5nSWY9XCIoc2VhcmNoSW5wdXQgPyBzZWFyY2hEYXRhIDogbG9jYWxEYXRhKS5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICB7eyBzZWFyY2hJbnB1dCA9PT0gXCJcIiA/IG5vRGF0YU1lc3NhZ2UgOiBcIk5vIHJlc3VsdHNcIiB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJsb2NhbERhdGEubGVuZ3RoICE9PSAwICYmICFoaWRlQXBwbHlCdXR0b25cIiBjbGFzcz1cImFjdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IFtuZ1N0eWxlXT1cInsnd2lkdGgnOiAnY2FsYyg1MCUgLSA0cHgpJ31cIiAoY2xpY2spPVwib25SZXNldCgpXCI+XG4gICAgICAgIDxtaXMtYnV0dG9uIFtuYW1lXT1cIidSZXNldCdcIiBbdHlwZV09XCInVGV4dCdcIiBbd2lkdGhdPVwiJzEwMCUnXCIgPjwvbWlzLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7J3dpZHRoJzogJ2NhbGMoNTAlIC0gNHB4KSd9XCIgKGNsaWNrKT1cImFwcGx5RmlsdGVycygpXCI+XG4gICAgICAgIDxtaXMtYnV0dG9uIFtuYW1lXT1cIidBcHBseSdcIiBbdHlwZV09XCInU29saWQnXCIgW3dpZHRoXT1cIicxMDAlJ1wiID48L21pcy1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
443
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL211bHRpLXNlbGVjdC1kcm9wZG93bi9tdWx0aS1zZWxlY3QtZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvbXVsdGktc2VsZWN0LWRyb3Bkb3duL211bHRpLXNlbGVjdC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFFVixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBRUwsT0FBTyxFQUNQLHNCQUFzQixFQUN0QixhQUFhLEdBQ2QsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7SUNEeEIsNkJBQW1GO0lBQ2pGLFlBQ0Y7SUFBQSxpQkFBSTs7O0lBREYsY0FDRjtJQURFLHNFQUNGOzs7SUFKQSw2QkFBNkM7SUFDN0MsNEJBQWdCO0lBQUEsWUFBYTtJQUFBLGlCQUFJO0lBQ2pDLHdGQUFtRjs7OztJQURuRSxlQUFhO0lBQWIsb0NBQWE7SUFDekIsY0FBK0Q7SUFBL0QsOEZBQStEOzs7SUFLbkUsd0JBQ2U7OztJQUZqQiw2QkFBNEM7SUFDMUMsK0dBQXdEOzs7O0lBQXpDLGNBQXVDO0lBQXZDLCtEQUF1Qzs7OztJQW1DcEQsK0JBUUM7SUFDQywyQkFLRTtJQUNKLGlCQUFNOzs7OztJQWFOLCtCQVNDO0lBTkMscU5BQVMsa0NBQTJCLEtBQUM7SUFPckMsMkJBS0U7SUFDSixpQkFBTTs7OztJ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QUNFLDJCQUEyQjtvQkEyQ0csYUFBYTtrQkFBcEQsU0FBUzttQkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO1lBQ1UsY0FBYztrQkFBN0QsU0FBUzttQkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7O2tGQXhDbkMsNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBzaWduYWwsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1xuICBPdmVybGF5UmVmLFxuICBPdmVybGF5LFxuICBDb25uZWN0aW9uUG9zaXRpb25QYWlyLFxuICBPdmVybGF5Q29uZmlnLFxufSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlTZWxlY3REcm9wZG93bkl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgaWNvbj86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9QVElPTlMge1xuICBzb3J0TGFiZWxzOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtaXMtbXVsdGktc2VsZWN0LWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLXNlbGVjdC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL211bHRpLXNlbGVjdC1kcm9wZG93bi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpU2VsZWN0RHJvcGRvd25Db21wb25lbnQge1xuICAvLyBEZXBlbmRlbmNpZXMgSW5qZWN0aW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgZVJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvdmVybGF5ID0gaW5qZWN0KE92ZXJsYXkpO1xuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG5cbiAgLy8gU2lnbmFsLWJhc2VkIElucHV0c1xuICBwdWJsaWMgZGF0YSA9IGlucHV0PE11bHRpU2VsZWN0RHJvcGRvd25JdGVtW10+KFtdKTtcbiAgcHVibGljIHNlbGVjdGVkSXRlbXMgPSBpbnB1dDxNdWx0aVNlbGVjdERyb3Bkb3duSXRlbVtdPihbXSk7XG4gIHB1YmxpYyBsYWJlbCA9IGlucHV0PHN0cmluZz4oJ1NlbGVjdCcpO1xuICBwdWJsaWMgaGVpZ2h0ID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHB1YmxpYyB3aWR0aCA9IGlucHV0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgZHJvcGRvd25MaXN0SGVpZ2h0ID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHB1YmxpYyBkcm9wZG93bkxpc3RXaWR0aCA9IGlucHV0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgZHJvcGRvd25MaXN0UG9zaXRpb24gPSBpbnB1dDwnTGVmdCcgfCAnUmlnaHQnPignTGVmdCcpO1xuICBwdWJsaWMgZW5hYmxlU2VsZWN0QWxsID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgc2VhcmNoRW5hYmxlZCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICBwdWJsaWMgc2hvd1NlbGVjdGVkQ291bnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBub0RhdGFNZXNzYWdlID0gaW5wdXQ8c3RyaW5nPignTm8gRGF0YScpO1xuICBwdWJsaWMgb3B0aW9ucyA9IGlucHV0PE9QVElPTlM+KHtcbiAgICBzb3J0TGFiZWxzOiB0cnVlLFxuICB9KTtcbiAgcHVibGljIGhpZGVBcHBseUJ1dHRvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHNlYXJjaElucHV0UGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmc+KCdTZWFyY2ggS2V5d29yZCcpO1xuICBwdWJsaWMgY3VzdG9tTGFiZWxUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4+KCk7XG5cbiAgLy8gU2lnbmFsLWJhc2VkIE91dHB1dFxuICBwdWJsaWMgb25DaGFuZ2UgPSBvdXRwdXQ8TXVsdGlTZWxlY3REcm9wZG93bkl0ZW1bXT4oKTtcblxuICAvLyBJbnRlcm5hbCBTaWduYWxzIGZvciBjb21wb25lbnQgc3RhdGVcbiAgcHVibGljIGlzT3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHB1YmxpYyBzZWFyY2hJbnB1dCA9IHNpZ25hbCgnJyk7XG4gIHB1YmxpYyBpc1NlYXJjaElucHV0Rm9jdXNlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHB1YmxpYyBpbnRlcm5hbFNlbGVjdGVkSXRlbXMgPSBzaWduYWw8TXVsdGlTZWxlY3REcm9wZG93bkl0ZW1bXT4oW10pO1xuICBwdWJsaWMgaW50ZXJuYWxEYXRhID0gc2lnbmFsPE11bHRpU2VsZWN0RHJvcGRvd25JdGVtW10+KFtdKTtcblxuICAvLyBDb25zdGFudHNcbiAgcHJpdmF0ZSByZWFkb25seSBTRUxFQ1RfQUxMX0VOVU0gPSAnU0VMRUNUX0FMTF9FTkFCTEVEJztcblxuICBAVmlld0NoaWxkKCdzZWxlY3QnLCB7IHN0YXRpYzogZmFsc2UgfSkgc2VsZWN0RWxlbWVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncG9wdXBDb250YWluZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgcG9wdXBDb250YWluZXI6IFRlbXBsYXRlUmVmPEVsZW1lbnQ+O1xuICBwcml2YXRlIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2VzKCk7XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgICB0aGlzLm9wZW5Ecm9wZG93bih0aGlzLnBvcHVwQ29udGFpbmVyLCB0aGlzLnNlbGVjdEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmPy5kZXRhY2goKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFZmZlY3QgdG8gbWFuYWdlIHRoZSBjb21wb25lbnQncyBpbnRlcm5hbCBzdGF0ZSBiYXNlZCBvbiBleHRlcm5hbCBpbnB1dHMuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUlucHV0Q2hhbmdlcygpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmRhdGEoKTtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtcygpO1xuXG4gICAgY29uc3QgZm9ybWF0dGVkRGF0YSA9IHZhbHVlcz8ubWFwKGl0ZW0gPT4gKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBjaGVja2VkOiBzZWxlY3RlZD8uc29tZShzID0+IHMudmFsdWUgPT09IGl0ZW0udmFsdWUpID8/IGZhbHNlXG4gICAgfSkpIHx8IFtdO1xuICAgIFxuICAgIHRoaXMuaW50ZXJuYWxEYXRhLnNldChmb3JtYXR0ZWREYXRhKTtcbiAgICB0aGlzLmludGVybmFsU2VsZWN0ZWRJdGVtcy5zZXQoc2VsZWN0ZWQpO1xuXG4gICAgLy8gQXBwbHkgdGhlICdzZWxlY3QgYWxsJyBsb2dpY1xuICAgIHRoaXMuaW50ZXJuYWxEYXRhLnVwZGF0ZShjdXJyZW50RGF0YSA9PiB7XG4gICAgICBjb25zdCBpc1NlbGVjdEFsbCA9IHRoaXMuZW5hYmxlU2VsZWN0QWxsKCkgJiYgY3VycmVudERhdGEuZXZlcnkoaXRlbSA9PiBpdGVtLmNoZWNrZWQgfHwgaXRlbS52YWx1ZSA9PT0gdGhpcy5TRUxFQ1RfQUxMX0VOVU0pO1xuICAgICAgY29uc3Qgc2VsZWN0QWxsSXRlbSA9IHtcbiAgICAgICAgbGFiZWw6ICdTZWxlY3QgYWxsJyxcbiAgICAgICAgdmFsdWU6IHRoaXMuU0VMRUNUX0FMTF9FTlVNLFxuICAgICAgICBjaGVja2VkOiBpc1NlbGVjdEFsbFxuICAgICAgfTtcblxuICAgICAgY29uc3QgaGFzU2VsZWN0QWxsID0gY3VycmVudERhdGEuc29tZSh0ID0+IHQudmFsdWUgPT09IHRoaXMuU0VMRUNUX0FMTF9FTlVNKTtcbiAgICAgIGlmICh0aGlzLmVuYWJsZVNlbGVjdEFsbCgpKSB7XG4gICAgICAgIGlmICghaGFzU2VsZWN0QWxsKSB7XG4gICAgICAgICAgcmV0dXJuIFtzZWxlY3RBbGxJdGVtLCAuLi5jdXJyZW50RGF0YV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRhLm1hcChpdGVtID0+IGl0ZW0udmFsdWUgPT09IHRoaXMuU0VMRUNUX0FMTF9FTlVNID8gc2VsZWN0QWxsSXRlbSA6IGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY3VycmVudERhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbS52YWx1ZSAhPT0gdGhpcy5TRUxFQ1RfQUxMX0VOVU0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGVkIHNpZ25hbCBmb3IgdGhlIGRhdGEgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBkcm9wZG93biBsaXN0LlxuICAgKiBGaWx0ZXJzIGJhc2VkIG9uIHNlYXJjaCBpbnB1dCBhbmQgc29ydHMgaWYgdGhlIG9wdGlvbiBpcyBlbmFibGVkLlxuICAgKi9cbiAgcHVibGljIGRpc3BsYXlEYXRhID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGxldCBkYXRhVG9EaXNwbGF5ID0gdGhpcy5zZWFyY2hFbmFibGVkKCkgJiYgdGhpcy5zZWFyY2hJbnB1dCgpID8gXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckJ5VmFsdWUodGhpcy5pbnRlcm5hbERhdGEoKSwgdGhpcy5zZWFyY2hJbnB1dCgpKSA6IFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbERhdGEoKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMoKS5zb3J0TGFiZWxzKSB7XG4gICAgICBkYXRhVG9EaXNwbGF5ID0gdGhpcy5zb3J0RGF0YShkYXRhVG9EaXNwbGF5KTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGRhdGFUb0Rpc3BsYXk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gc29ydCB0aGUgZGF0YS5cbiAgICovXG4gIHByaXZhdGUgc29ydERhdGEoZGF0YTogTXVsdGlTZWxlY3REcm9wZG93bkl0ZW1bXSk6IE11bHRpU2VsZWN0RHJvcGRvd25JdGVtW10ge1xuICAgIGNvbnN0IGNoZWNrZWRWYWx1ZXMgPSBkYXRhLmZpbHRlcihhID0+IGEuY2hlY2tlZCk7XG4gICAgY29uc3QgdW5DaGVja2VkVmFsdWVzID0gZGF0YS5maWx0ZXIoYSA9PiAhYS5jaGVja2VkKTtcblxuICAgIGNvbnN0IHNvcnRGbiA9IChhOiBNdWx0aVNlbGVjdERyb3Bkb3duSXRlbSwgYjogTXVsdGlTZWxlY3REcm9wZG93bkl0ZW0pID0+IGEubGFiZWwgPiBiLmxhYmVsID8gMSA6IC0xO1xuICAgIFxuICAgIHJldHVybiBbXG4gICAgICAuLi5jaGVja2VkVmFsdWVzLnNvcnQoc29ydEZuKSxcbiAgICAgIC4uLnVuQ2hlY2tlZFZhbHVlcy5zb3J0KHNvcnRGbilcbiAgICBdLmZpbHRlcih0ID0+IHQudmFsdWUgIT09IHRoaXMuU0VMRUNUX0FMTF9FTlVNKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZmlsdGVyIHRoZSBkYXRhLlxuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJCeVZhbHVlKGFycmF5OiBNdWx0aVNlbGVjdERyb3Bkb3duSXRlbVtdLCBzZWFyY2g6IHN0cmluZyk6IE11bHRpU2VsZWN0RHJvcGRvd25JdGVtW10ge1xuICAgIHJldHVybiBhcnJheS5maWx0ZXIobyA9PiBvPy5sYWJlbD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSkpIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGRyb3Bkb3duJ3Mgb3Blbi9jbG9zZSBzdGF0ZS5cbiAgICovXG4gIHB1YmxpYyB0b2dnbGVEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLmlzT3Blbi51cGRhdGUoY3VycmVudCA9PiAhY3VycmVudCk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIHNwZWNpZmljIGl0ZW0uXG4gICAqIEhhbmRsZXMgdGhlICdTZWxlY3QgQWxsJyBsb2dpYy5cbiAgICovXG4gIHB1YmxpYyB0b2dnbGVTZWxlY3RlZEl0ZW1zKGV2ZW50OiBFdmVudCwgaXRlbTogTXVsdGlTZWxlY3REcm9wZG93bkl0ZW0pOiB2b2lkIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAodGhpcy5lbmFibGVTZWxlY3RBbGwoKSAmJiBpdGVtLnZhbHVlID09PSB0aGlzLlNFTEVDVF9BTExfRU5VTSkge1xuICAgICAgdGhpcy5pbnRlcm5hbERhdGEudXBkYXRlKGl0ZW1zID0+XG4gICAgICAgIGl0ZW1zLm1hcCh0ID0+ICh7IC4uLnQsIGNoZWNrZWQ6ICFpdGVtLmNoZWNrZWQgfSkpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVybmFsRGF0YS51cGRhdGUoaXRlbXMgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkSXRlbXMgPSBpdGVtcy5tYXAoYSA9PiBcbiAgICAgICAgICBhLnZhbHVlID09PSBpdGVtLnZhbHVlID8geyAuLi5hLCBjaGVja2VkOiAhYS5jaGVja2VkIH0gOiBhXG4gICAgICAgICk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBhbGxDaGVja2VkID0gdXBkYXRlZEl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihyID0+IHIudmFsdWUgIT09IHRoaXMuU0VMRUNUX0FMTF9FTlVNKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5ldmVyeSh0ID0+IHQuY2hlY2tlZCk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdXBkYXRlZEl0ZW1zLm1hcChhID0+IFxuICAgICAgICAgIGEudmFsdWUgPT09IHRoaXMuU0VMRUNUX0FMTF9FTlVNID8geyAuLi5hLCBjaGVja2VkOiBhbGxDaGVja2VkIH0gOiBhXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oaWRlQXBwbHlCdXR0b24oKSkge1xuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgdGhlIHNlbGVjdGVkIGl0ZW1zIGFuZCBjbG9zZXMgdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgcHVibGljIGFwcGx5RmlsdGVycygpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuaW50ZXJuYWxEYXRhKClcbiAgICAgIC5maWx0ZXIoYSA9PiBhLmNoZWNrZWQgJiYgYS52YWx1ZSAhPT0gdGhpcy5TRUxFQ1RfQUxMX0VOVU0pXG4gICAgICAubWFwKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCB7IGNoZWNrZWQsIC4uLmRhdGEgfSA9IGl0ZW07XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfSk7XG4gICAgXG4gICAgLy8gVXNlIHRoZSBzaWduYWwgb3V0cHV0J3MgZW1pdCBtZXRob2RcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoc2VsZWN0ZWQgYXMgTXVsdGlTZWxlY3REcm9wZG93bkl0ZW1bXSk7XG4gICAgdGhpcy5pbnRlcm5hbFNlbGVjdGVkSXRlbXMuc2V0KHNlbGVjdGVkIGFzIE11bHRpU2VsZWN0RHJvcGRvd25JdGVtW10pO1xuICAgIGlmICghdGhpcy5oaWRlQXBwbHlCdXR0b24oKSkge1xuICAgICAgdGhpcy5pc09wZW4uc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBkcm9wZG93biB0byBhbiBlbXB0eSBzdGF0ZS5cbiAgICovXG4gIHB1YmxpYyBvblJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuaW50ZXJuYWxEYXRhLnVwZGF0ZShpdGVtcyA9PiBcbiAgICAgIGl0ZW1zLm1hcChpdGVtID0+ICh7IC4uLml0ZW0sIGNoZWNrZWQ6IGZhbHNlIH0pKVxuICAgICk7XG4gICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICB0aGlzLmlzT3Blbi5zZXQoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgZHJvcGRvd24gYW5kIHJldmVydHMgYW55IGNoYW5nZXMuXG4gICAqL1xuICBwdWJsaWMgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc09wZW4uc2V0KGZhbHNlKTtcbiAgICB0aGlzLnNlYXJjaElucHV0LnNldCgnJyk7XG4gICAgLy8gUmV2ZXJ0IGludGVybmFsIGRhdGEgdG8gbWF0Y2ggdGhlIGxhc3Qgc2VsZWN0ZWQgaXRlbXNcbiAgICB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGZvY3VzIHN0YXRlIG9mIHRoZSBzZWFyY2ggaW5wdXQuXG4gICAqL1xuICBwdWJsaWMgc2VhcmNoSW5wdXRGb2N1c2VkKGlzRm9jdXNlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNTZWFyY2hJbnB1dEZvY3VzZWQuc2V0KGlzRm9jdXNlZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBzZWFyY2ggaW5wdXQgYW5kIHVuZm9jdXNlcyBpdC5cbiAgICovXG4gIHB1YmxpYyBzZWFyY2hJbnB1dENhbmNlbGVkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc2VhcmNoSW5wdXQuc2V0KCcnKTtcbiAgICB0aGlzLmlzU2VhcmNoSW5wdXRGb2N1c2VkLnNldChmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgY2hhbmdlIGV2ZW50IGZyb20gdGhlIHNlYXJjaCBpbnB1dC5cbiAgICovXG4gIHB1YmxpYyBzZWFyY2hJbnB1dE9uQ2hhbmdlKG5ld1ZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaElucHV0LnNldChuZXdWYWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbmQgZGlzcGxheXMgdGhlIG92ZXJsYXkgZm9yIHRoZSBkcm9wZG93biBsaXN0LlxuICAgKi9cbiAgcHJpdmF0ZSBvcGVuRHJvcGRvd24oXG4gICAgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPEVsZW1lbnQ+LFxuICAgIG9yaWdpbjogSFRNTEVsZW1lbnRcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3ZlcmxheVJlZiAmJiB0aGlzLm92ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBwb3NpdGlvbnNCb3R0b20gPSBbXG4gICAgICBuZXcgQ29ubmVjdGlvblBvc2l0aW9uUGFpcih7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICdib3R0b20nIH0sIHsgb3ZlcmxheVg6ICdzdGFydCcsIG92ZXJsYXlZOiAndG9wJyB9LCAwLCA0KSxcbiAgICAgIG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKHsgb3JpZ2luWDogJ2VuZCcsIG9yaWdpblk6ICdib3R0b20nIH0sIHsgb3ZlcmxheVg6ICdlbmQnLCBvdmVybGF5WTogJ3RvcCcgfSwgMCwgNCksXG4gICAgXTtcbiAgICBjb25zdCBwb3NpdGlvbnNUb3AgPSBbXG4gICAgICBuZXcgQ29ubmVjdGlvblBvc2l0aW9uUGFpcih7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICd0b3AnIH0sIHsgb3ZlcmxheVg6ICdzdGFydCcsIG92ZXJsYXlZOiAnYm90dG9tJyB9LCAwLCAtNCksXG4gICAgICBuZXcgQ29ubmVjdGlvblBvc2l0aW9uUGFpcih7IG9yaWdpblg6ICdlbmQnLCBvcmlnaW5ZOiAndG9wJyB9LCB7IG92ZXJsYXlYOiAnZW5kJywgb3ZlcmxheVk6ICdib3R0b20nIH0sIDAsIC00KSxcbiAgICBdO1xuXG4gICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMub3ZlcmxheVxuICAgICAgLnBvc2l0aW9uKClcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKG9yaWdpbilcbiAgICAgIC53aXRoUG9zaXRpb25zKFtcbiAgICAgICAgLi4uKHRoaXMuZHJvcGRvd25MaXN0UG9zaXRpb24oKSA9PT0gJ1JpZ2h0JyA/IHBvc2l0aW9uc0JvdHRvbS5yZXZlcnNlKCkgOiBwb3NpdGlvbnNCb3R0b20pLFxuICAgICAgICAuLi4odGhpcy5kcm9wZG93bkxpc3RQb3NpdGlvbigpID09PSAnUmlnaHQnID8gcG9zaXRpb25zVG9wLnJldmVyc2UoKSA6IHBvc2l0aW9uc1RvcCksXG4gICAgICBdKVxuICAgICAgLndpdGhQdXNoKHRydWUpO1xuXG4gICAgY29uc3QgY29uZmlncyA9IG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgYmFja2Ryb3BDbGFzczogJ2Nkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJyxcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCksXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgd2lkdGg6IG9yaWdpbj8uY2xpZW50V2lkdGgsXG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZShjb25maWdzKTtcbiAgICBcbiAgICBpZiAodGhpcy5kcm9wZG93bkxpc3RXaWR0aCgpKSB7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYudXBkYXRlU2l6ZSh7IHdpZHRoOiB0aGlzLmRyb3Bkb3duTGlzdFdpZHRoKCkgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRyb3Bkb3duTGlzdEhlaWdodCgpKSB7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYudXBkYXRlU2l6ZSh7IGhlaWdodDogdGhpcy5kcm9wZG93bkxpc3RIZWlnaHQoKSB9KTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaChuZXcgVGVtcGxhdGVQb3J0YWwodGVtcGxhdGUsIHRoaXMudmlld0NvbnRhaW5lclJlZikpO1xuICAgIHRoaXMub3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMub25DYW5jZWwoKSk7XG4gIH1cbn1cblxuIiwiPGRpdlxuICBjbGFzcz1cImNvbnRhaW5lclwiXG4gIFtuZ1N0eWxlXT1cIntcbiAgICBoZWlnaHQ6IGhlaWdodCgpLmxlbmd0aCA+IDAgPyBoZWlnaHQoKSA6ICcnLFxuICAgIHdpZHRoOiB3aWR0aCgpLmxlbmd0aCA+IDAgPyB3aWR0aCgpIDogJydcbiAgfVwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImRyb3Bkb3duXCJcbiAgICAjc2VsZWN0XG4gICAgdGFiaW5kZXg9XCIwXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwidG9nZ2xlRHJvcGRvd24oKVwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKClcIlxuICAgIFtuZ1N0eWxlXT1cInsgJ2JhY2tncm91bmQnOiBpc09wZW4oKSA/ICcjRTZFQkY3JyA6ICcnIH1cIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWN1c3RvbUxhYmVsVGVtcGxhdGUoKVwiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0XCI+e3sgbGFiZWwoKSB9fTwvcD5cbiAgICAgIDxwICpuZ0lmPVwic2hvd1NlbGVjdGVkQ291bnQoKSAmJiBpbnRlcm5hbFNlbGVjdGVkSXRlbXMoKS5sZW5ndGggPiAwXCIgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICB7eyBpbnRlcm5hbFNlbGVjdGVkSXRlbXMoKS5sZW5ndGggfX1cbiAgICAgIDwvcD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tTGFiZWxUZW1wbGF0ZSgpXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tTGFiZWxUZW1wbGF0ZSgpXCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8c3ZnXG4gICAgICBjbGFzcz1cImhhbmRsZVwiXG4gICAgICBbbmdTdHlsZV09XCJ7ICd0cmFuc2Zvcm0nOiBpc09wZW4oKSA/ICdyb3RhdGUoMTgwZGVnKScgOiAncm90YXRlKDBkZWcpJyB9XCJcbiAgICAgIHdpZHRoPVwiMjBcIlxuICAgICAgaGVpZ2h0PVwiMjBcIlxuICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgICBmaWxsPVwibm9uZVwiXG4gICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICA+XG4gICAgICA8cGF0aFxuICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgIGQ9XCJNMTMuODI1IDcuMTU4NDVMMTAgMTAuOTc1MUw2LjE3NSA3LjE1ODQ1TDUgOC4zMzM0NUwxMCAxMy4zMzM0TDE1IDguMzMzNDVMMTMuODI1IDcuMTU4NDVaXCJcbiAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgLz5cbiAgICA8L3N2Zz5cbiAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjcG9wdXBDb250YWluZXI+XG4gIDxkaXZcbiAgICBjbGFzcz1cInBvcHVwLWNvbnRhaW5lclwiXG4gICAgW25nU3R5bGVdPVwie1xuICAgICAgJ2hlaWdodCc6IGRyb3Bkb3duTGlzdEhlaWdodCgpLFxuICAgICAgd2lkdGg6IGRyb3Bkb3duTGlzdFdpZHRoKClcbiAgICB9XCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAncG9zaXRpb24tbGVmdCc6IGRyb3Bkb3duTGlzdFBvc2l0aW9uKCkgPT09ICdMZWZ0JyxcbiAgICAgICdwb3NpdGlvbi1yaWdodCc6IGRyb3Bkb3duTGlzdFBvc2l0aW9uKCkgPT09ICdSaWdodCdcbiAgICB9XCJcbiAgPlxuICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaEVuYWJsZWQoKVwiIGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lclwiPlxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCIhaXNTZWFyY2hJbnB1dEZvY3VzZWQoKVwiXG4gICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaWNvblwiXG4gICAgICAgICAgd2lkdGg9XCIyNFwiXG4gICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgZD1cIk00LjIxNTA4IDExLjE0NTZDNC4yMTUwOCA3LjMxNzkgNy4zMzcyMiA0LjIxMTY1IDExLjE5MjYgNC4yMTE2NUMxNS4wNDggNC4yMTE2NSAxOC4xNzAyIDcuMzE3OSAxOC4xNzAyIDExLjE0NTZDMTguMTcwMiAxMi42OTMxIDE3LjY1OTkgMTQuMTIyNiAxNi43OTcyIDE1LjI3NjdMMTUuMzY4NSAxNi43MDEzQzE0LjIwNDQgMTcuNTY2OCAxMi43NTkgMTguMDc5NiAxMS4xOTI2IDE4LjA3OTZDNy4zMzcyMiAxOC4wNzk2IDQuMjE1MDggMTQuOTczNCA0LjIxNTA4IDExLjE0NTZaTTE1Ljk0MjEgMTcuNzgzNUMxNC42MDIxIDE4LjczMjkgMTIuOTYyNyAxOS4yOTEzIDExLjE5MjYgMTkuMjkxM0M2LjY2OTc3IDE5LjI5MTMgMyAxNS42NDYxIDMgMTEuMTQ1NkMzIDYuNjQ1MTIgNi42Njk3NyAzIDExLjE5MjYgM0MxNS43MTU1IDMgMTkuMzg1MiA2LjY0NTEyIDE5LjM4NTIgMTEuMTQ1NkMxOS4zODUyIDEyLjkzNzEgMTguODAzNyAxNC41OTMxIDE3LjgxODQgMTUuOTM3NUwxOS44MzYxIDE3LjQwNDhDMjAuNjcwNSAxNy45MTIgMjEuNzU1NCAxOC42NTQzIDIwLjI0NTQgMjAuMjE1QzE4LjczNTMgMjEuNzc1NiAxOC4wMDk5IDIwLjY2NjMgMTcuNDk5MSAxOS44MzY0TDE1Ljk0MjEgMTcuNzgzNVpcIlxuICAgICAgICAgICAgZmlsbD1cIiM2QTczN0RcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBbbmdNb2RlbF09XCJzZWFyY2hJbnB1dCgpXCJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICBwYWRkaW5nTGVmdDogaXNTZWFyY2hJbnB1dEZvY3VzZWQoKSA/ICcxMnB4JyA6ICc0NXB4JyxcbiAgICAgICAgICAgIGJvcmRlcjogaXNTZWFyY2hJbnB1dEZvY3VzZWQoKSA/ICcxcHggc29saWQgIzA5MzdCMicgOiAnMXB4IHNvbGlkICNlMGUwZTAnLFxuICAgICAgICAgICAgcGFkZGluZ1JpZ2h0OiBpc1NlYXJjaElucHV0Rm9jdXNlZCgpID8gJzQ1cHgnIDogJzEwcHgnXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoSW5wdXRPbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaXNTZWFyY2hJbnB1dEZvY3VzZWQoKSA/ICcnIDogc2VhcmNoSW5wdXRQbGFjZWhvbGRlcigpXCJcbiAgICAgICAgICAoZm9jdXMpPVwic2VhcmNoSW5wdXRGb2N1c2VkKHRydWUpXCJcbiAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzdmdcbiAgICAgICAgICAqbmdJZj1cImlzU2VhcmNoSW5wdXRGb2N1c2VkKClcIlxuICAgICAgICAgIGNsYXNzPVwiY2FuY2VsLWljb25cIlxuICAgICAgICAgIChjbGljayk9XCJzZWFyY2hJbnB1dENhbmNlbGVkKCRldmVudClcIlxuICAgICAgICAgIHdpZHRoPVwiMjRcIlxuICAgICAgICAgIGhlaWdodD1cIjI0XCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgID5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgIGQ9XCJNOC44NzQ0NiA3LjMyMTQ0QzguNDQ1ODggNi44OTI4NSA3Ljc1MSA2Ljg5Mjg1IDcuMzIyNDIgNy4zMjE0NEM2Ljg5MzgzIDcuNzUwMDIgNi44OTM4MyA4LjQ0NDkgNy4zMjI0MiA4Ljg3MzQ5TDEwLjQ0ODggMTEuOTk5OUw3LjMyMzU3IDE1LjEyNTJDNi44OTQ5OCAxNS41NTM4IDYuODk0OTggMTYuMjQ4NiA3LjMyMzU3IDE2LjY3NzJDNy43NTIxNSAxNy4xMDU4IDguNDQ3MDMgMTcuMTA1OCA4Ljg3NTYxIDE2LjY3NzJMMTIuMDAwOSAxMy41NTJMMTUuMTI2MSAxNi42NzcyQzE1LjU1NDcgMTcuMTA1OCAxNi4yNDk2IDE3LjEwNTggMTYuNjc4MSAxNi42NzcyQzE3LjEwNjcgMTYuMjQ4NiAxNy4xMDY3IDE1LjU1MzcgMTYuNjc4MSAxNS4xMjUxTDEzLjU1MjkgMTEuOTk5OUwxNi42NzkzIDguODczNTRDMTcuMTA3OSA4LjQ0NDk2IDE3LjEwNzkgNy43NTAwOCAxNi42NzkzIDcuMzIxNUMxNi4yNTA3IDYuODkyOTEgMTUuNTU1OCA2Ljg5MjkxIDE1LjEyNzMgNy4zMjE1TDEyLjAwMDkgMTAuNDQ3OUw4Ljg3NDQ2IDcuMzIxNDRaXCJcbiAgICAgICAgICAgIGZpbGw9XCIjNkE3MzdEXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIml0ZW1cIlxuICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgKGtleXVwLmVudGVyKT1cInRvZ2dsZVNlbGVjdGVkSXRlbXMoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlbGVjdGVkSXRlbXMoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGlzcGxheURhdGEoKVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6aXRlbS5kaXNhYmxlZH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94LWNvbnRhaW5lci13cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3gtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgIDxtaXMtY2hlY2tib3ggW2NoZWNrZWRdPVwiaXRlbS5jaGVja2VkXCIgdGFiaW5kZXg9XCItMVwiPjwvbWlzLWNoZWNrYm94PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwibGFiZWxcIj5cbiAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNvbnRhaW5lclwiICpuZ0lmPVwiaXRlbS5pY29uXCI+XG4gICAgICAgICAgICA8aW1nIGNsYXNzPVwiaWNvblwiIFtzcmNdPVwiaXRlbS5pY29uXCIgYWx0PVwibm8gaW1nXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJub0RhdGFcIiAqbmdJZj1cImRpc3BsYXlEYXRhKCkubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAge3sgc2VhcmNoSW5wdXQoKSA9PT0gXCJcIiA/IG5vRGF0YU1lc3NhZ2UoKSA6IFwiTm8gcmVzdWx0c1wiIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImludGVybmFsRGF0YSgpLmxlbmd0aCAhPT0gMCAmJiAhaGlkZUFwcGx5QnV0dG9uKClcIiBjbGFzcz1cImFjdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IFtuZ1N0eWxlXT1cInsnd2lkdGgnOiAnY2FsYyg1MCUgLSA0cHgpJ31cIiAoY2xpY2spPVwib25SZXNldCgpXCI+XG4gICAgICAgIDxtaXMtYnV0dG9uIFtuYW1lXT1cIidSZXNldCdcIiBbdHlwZV09XCInVGV4dCdcIiBbd2lkdGhdPVwiJzEwMCUnXCIgPjwvbWlzLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7J3dpZHRoJzogJ2NhbGMoNTAlIC0gNHB4KSd9XCIgKGNsaWNrKT1cImFwcGx5RmlsdGVycygpXCI+XG4gICAgICAgIDxtaXMtYnV0dG9uIFtuYW1lXT1cIidBcHBseSdcIiBbdHlwZV09XCInU29saWQnXCIgW3dpZHRoXT1cIicxMDAlJ1wiID48L21pcy1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG5cbiJdfQ==
|