@unipin/angular-applet 18.6.19 → 18.6.21
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/esm2022/lib/components/filter/filter.component.mjs +26 -13
- package/esm2022/lib/components/filter/interfaces/filter-field.interface.mjs +1 -1
- package/fesm2022/unipin-angular-applet.mjs +25 -12
- package/fesm2022/unipin-angular-applet.mjs.map +1 -1
- package/lib/components/filter/filter.component.d.ts +1 -0
- package/lib/components/filter/interfaces/filter-field.interface.d.ts +4 -0
- package/package.json +1 -1
|
@@ -17,18 +17,24 @@ export class FilterComponent {
|
|
|
17
17
|
this.initialItems = new Map();
|
|
18
18
|
}
|
|
19
19
|
ngOnInit() {
|
|
20
|
-
this.config.fields.forEach(({ key, initialValue }) => {
|
|
21
|
-
if (typeof key
|
|
22
|
-
this.createFormControl(key, initialValue);
|
|
23
|
-
else {
|
|
20
|
+
this.config.fields.forEach(({ key, initialValue, initialItems }) => {
|
|
21
|
+
if (typeof key !== 'string') {
|
|
24
22
|
key.forEach((k, i) => this.createFormControl(k, initialValue?.at(i)));
|
|
25
23
|
}
|
|
24
|
+
else {
|
|
25
|
+
if (initialItems) {
|
|
26
|
+
this.initialItems.set(key, initialItems);
|
|
27
|
+
}
|
|
28
|
+
this.createFormControl(key, initialValue);
|
|
29
|
+
}
|
|
26
30
|
});
|
|
27
31
|
const savedState = localStorage.getItem(`${this.id}`);
|
|
28
32
|
if (savedState) {
|
|
29
33
|
const state = JSON.parse(savedState);
|
|
30
34
|
this.activeFilter = state.activeFilter;
|
|
31
|
-
|
|
35
|
+
if (state.initialItems) {
|
|
36
|
+
this.initialItems = new Map(Object.entries(state.initialItems));
|
|
37
|
+
}
|
|
32
38
|
this.form.patchValue(state.formValues);
|
|
33
39
|
this.emitValue();
|
|
34
40
|
}
|
|
@@ -65,10 +71,13 @@ export class FilterComponent {
|
|
|
65
71
|
this.close();
|
|
66
72
|
}
|
|
67
73
|
processFilter(key, value) {
|
|
74
|
+
if (Array.isArray(value)) {
|
|
75
|
+
value = value[0];
|
|
76
|
+
}
|
|
68
77
|
const initialItem = this.initialItems.get(key)?.find(item => item.value === value);
|
|
69
78
|
const label = initialItem
|
|
70
79
|
? `${key}: ${initialItem.label}`
|
|
71
|
-
: `${key}: ${key.includes('date') ? formatDate(value, 'dd MMM yyyy', 'en-US') : value}`;
|
|
80
|
+
: `${key}: ${key.toLowerCase().includes('date') ? formatDate(value, 'dd MMM yyyy', 'en-US') : value}`;
|
|
72
81
|
this.activeFilter.push({ key, value, label });
|
|
73
82
|
}
|
|
74
83
|
add() {
|
|
@@ -118,19 +127,23 @@ export class FilterComponent {
|
|
|
118
127
|
extraAction?.(k, f[k]);
|
|
119
128
|
});
|
|
120
129
|
this.onSearch.emit({ mode: this.config.mode, data: flag ? data : null });
|
|
121
|
-
|
|
122
|
-
activeFilter: this.activeFilter,
|
|
123
|
-
initialItems: Object.fromEntries(this.initialItems),
|
|
124
|
-
formValues: this.form.getRawValue()
|
|
125
|
-
}));
|
|
130
|
+
this.saveState();
|
|
126
131
|
}
|
|
127
132
|
createFormControl(key, val) {
|
|
128
133
|
this.form.addControl(key, new FormControl(''));
|
|
129
134
|
if (val) {
|
|
130
135
|
this.form.controls[key].setValue(val);
|
|
131
|
-
this.
|
|
136
|
+
this.processFilter(key, val);
|
|
137
|
+
this.saveState();
|
|
132
138
|
}
|
|
133
139
|
}
|
|
140
|
+
saveState() {
|
|
141
|
+
localStorage.setItem(`${this.id}`, JSON.stringify({
|
|
142
|
+
activeFilter: this.activeFilter,
|
|
143
|
+
initialItems: Object.fromEntries(this.initialItems),
|
|
144
|
+
formValues: this.form.getRawValue()
|
|
145
|
+
}));
|
|
146
|
+
}
|
|
134
147
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilterComponent, deps: [{ token: 'placeholder', attribute: true }, { token: i0.ChangeDetectorRef }, { token: i1.PopoverController }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
135
148
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FilterComponent, isStandalone: true, selector: "up-filter", inputs: { id: "id", config: "config" }, outputs: { onSearch: "onSearch" }, host: { classAttribute: "d-block position-relative" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], ngImport: i0, template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter overflow-auto\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n }\n\n @case ('select') { \n <up-select \n class=\"my-4\"\n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [items]=\"c.options!\"\n [multiple]=\"c.multiple || false\"\n /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select \n class=\"my-4\" \n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [queryFunc]=\"c.getOptions!\" \n [initialItems]=\"c.options! || initialItems.get(c.key.toString())!\"\n [multiple]=\"c.multiple || false\"\n (onChange)=\"applyInitialItems($event, c.key.toString())\"\n /> \n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "component", type: FormDateComponent, selector: "up-date", inputs: ["label", "required", "disabled", "presentation", "minDate", "maxDate"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled"], outputs: ["onInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormSelectComponent, selector: "up-select", inputs: ["items", "clearable", "label", "multiple", "required", "addTag", "disabled", "searchable", "bindLabel", "bindValue", "appendTo"] }, { kind: "component", type: FormSearchableSelectComponent, selector: "up-searchable-select", inputs: ["queryFunc", "clearable", "label", "initialItems", "required", "addTag", "disabled", "multiple", "bindLabel", "bindValue", "appendTo"], outputs: ["onChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
136
149
|
}
|
|
@@ -161,4 +174,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
161
174
|
type: ViewChild,
|
|
162
175
|
args: ['searchBox']
|
|
163
176
|
}] } });
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0osT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUloRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7QUFvQnJILE1BQU0sT0FBTyxlQUFlO0lBK0MxQixZQUNtQyxXQUFtQixFQUNqQyxFQUFxQixFQUNyQixXQUE4QjtRQUZoQixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUNqQyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUE3QnpCLGFBQVEsR0FBb0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVl6RSxTQUFJLEdBQW1CLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBTWxELGlCQUFZLEdBQW9ELEVBQUUsQ0FBQztRQU1uRSxpQkFBWSxHQUFvRCxJQUFJLEdBQUcs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NEJBQ1gsaUJBQWlCLHFJQUNqQixrQkFBa0IsOEhBQ2xCLG1CQUFtQiw2ckJBQ25CLG1CQUFtQixpTUFDbkIsNkJBQTZCOzs0RkFHcEIsZUFBZTtrQkFsQjNCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLFdBQVcsbUJBR0osdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSixLQUFLLEVBQUUsMkJBQTJCO3FCQUNuQyxXQUNRO3dCQUNQLFdBQVc7d0JBQ1gsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQiw2QkFBNkI7cUJBQzlCOzswQkFrREUsU0FBUzsyQkFBQyxhQUFhO3lHQXpDUSxFQUFFO3NCQUFuQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFPUyxNQUFNO3NCQUF2QyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFPQyxRQUFRO3NCQUFqQyxNQUFNO2dCQU1vQyxTQUFTO3NCQUFuRCxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdHRyaWJ1dGUsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJb25pY01vZHVsZSwgUG9wb3ZlckNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvZmlsdGVyLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmlsdGVyRmllbGQgfSBmcm9tICcuL2ludGVyZmFjZXMvZmlsdGVyLWZpZWxkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBGaWx0ZXJTZWFyY2hFdmVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9maWx0ZXItc2VhcmNoLWV2ZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBGb3JtSW5wdXRDb21wb25lbnQsIEZvcm1TZWxlY3RDb21wb25lbnQsIEZvcm1EYXRlQ29tcG9uZW50LCBGb3JtU2VhcmNoYWJsZVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAndXAtZmlsdGVyJyxcbiAgc3R5bGVVcmw6ICAnLi9maWx0ZXIuY29tcG9uZW50LnNjc3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHsgXG4gICAgY2xhc3M6ICdkLWJsb2NrIHBvc2l0aW9uLXJlbGF0aXZlJyBcbiAgfSxcbiAgaW1wb3J0czogWyAgXG4gICAgSW9uaWNNb2R1bGUsXG4gICAgRm9ybURhdGVDb21wb25lbnQsXG4gICAgRm9ybUlucHV0Q29tcG9uZW50LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybVNlbGVjdENvbXBvbmVudCxcbiAgICBGb3JtU2VhcmNoYWJsZVNlbGVjdENvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLyoqXG4gICAqIElucHV0IHZhcmlhYmxlIGZvciB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGZpbHRlci5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQHJlcXVpcmVkXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgaWQhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElucHV0IHZhcmlhYmxlIGZvciB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Qgc3BlY2lmeWluZyBmaWx0ZXIgZmllbGRzIGFuZCBtb2RlLlxuICAgKiBAdHlwZSB7RmlsdGVyQ29uZmlnfVxuICAgKiBAcmVxdWlyZWRcbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBjb25maWchOiBGaWx0ZXJDb25maWc7XG5cbiAgLyoqXG4gICAqIE91dHB1dCBldmVudCBlbWl0dGVyIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIHBlcmZvcm1zIGEgc2VhcmNoLlxuICAgKiBFbWl0cyBhIGBGaWx0ZXJTZWFyY2hFdmVudGAgb2JqZWN0IHdpdGggc2VhcmNoIG1vZGUgYW5kIGNyaXRlcmlhIGRhdGEuXG4gICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8RmlsdGVyU2VhcmNoRXZlbnQ+fVxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBvblNlYXJjaDogRXZlbnRFbWl0dGVyPEZpbHRlclNlYXJjaEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogVmlld0NoaWxkIGRlY29yYXRvciB0byByZWZlcmVuY2UgdGhlIHNlYXJjaEJveCBlbGVtZW50IGluIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHR5cGUge0VsZW1lbnRSZWZ9XG4gICAqL1xuICBAVmlld0NoaWxkKCdzZWFyY2hCb3gnKSBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VhcmNoQm94ITogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogRm9ybSBncm91cCBmb3IgbWFuYWdpbmcgZm9ybSBjb250cm9scy5cbiAgICogQHR5cGUge0Zvcm1Hcm91cDxhbnk+fVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZvcm06IEZvcm1Hcm91cDxhbnk+ID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgLyoqXG4gICAqIEFycmF5IHRvIHN0b3JlIGFjdGl2ZSBmaWx0ZXIgY3JpdGVyaWEuXG4gICAqIEB0eXBlIHt7IGxhYmVsOiBzdHJpbmcsIGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXX1cbiAgICovXG4gIHB1YmxpYyBhY3RpdmVGaWx0ZXI6IHsgbGFiZWw6IHN0cmluZywga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG5cbiAgLyoqXG4gICAqIE1hcCB0byBzdG9yZSBpbml0aWFsIGl0ZW1zIGZvciBlYWNoIGZpbHRlciBrZXkuXG4gICAqIEB0eXBlIHtNYXA8c3RyaW5nLCB7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfVtdPn1cbiAgICovXG4gIHB1YmxpYyBpbml0aWFsSXRlbXM6IE1hcDxzdHJpbmcsIHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9W10+ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJykgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcG9wb3ZlckN0cmw6IFBvcG92ZXJDb250cm9sbGVyXG4gICkgeyB9IFxuXG4gIC8qKlxuICAgKiBMaWZlY3ljbGUgaG9vayB0byBpbml0aWFsaXplIHRoZSBjb21wb25lbnQuXG4gICAqIENyZWF0ZXMgZm9ybSBjb250cm9scyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbiBhbmQgcmVzdG9yZXMgc2F2ZWQgZmlsdGVyIHN0YXRlLlxuICAgKi9cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWR7XG4gICAgdGhpcy5jb25maWcuZmllbGRzLmZvckVhY2goKHsga2V5LCBpbml0aWFsVmFsdWUgfTogRmlsdGVyRmllbGQpID0+IHtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChrZXksIGluaXRpYWxWYWx1ZSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAga2V5LmZvckVhY2goKGs6IHN0cmluZywgaTogbnVtYmVyKSA9PiB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKGssIGluaXRpYWxWYWx1ZT8uYXQoaSkpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNhdmVkU3RhdGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHsgdGhpcy5pZCB9YCk7XG4gICAgaWYgKHNhdmVkU3RhdGUpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gSlNPTi5wYXJzZShzYXZlZFN0YXRlKTtcblxuICAgICAgdGhpcy5hY3RpdmVGaWx0ZXIgPSBzdGF0ZS5hY3RpdmVGaWx0ZXI7XG4gICAgICB0aGlzLmluaXRpYWxJdGVtcyA9IG5ldyBNYXAoT2JqZWN0LmVudHJpZXMoc3RhdGUuaW5pdGlhbEl0ZW1zKSk7XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShzdGF0ZS5mb3JtVmFsdWVzKTtcbiAgICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgZmlsdGVyIHBvcG92ZXIuXG4gICAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZHsgXG4gICAgdGhpcy5wb3BvdmVyQ3RybC5kaXNtaXNzKCk7IFxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgZmlsdGVyIGNyaXRlcmlhLCBsb2NhbFN0b3JhZ2UsIGFuZCB0cmlnZ2VycyBhIHNlYXJjaCBldmVudCB3aXRoIG51bGwgZGF0YS5cbiAgICovXG4gIHB1YmxpYyBjbGVhcigpOiB2b2lke1xuICAgIHRoaXMucmVzZXRWYWx1ZSgpO1xuICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7IHRoaXMuaWQgfWApO1xuICAgIHRoaXMuaW5pdGlhbEl0ZW1zLmNsZWFyKCk7XG4gICAgdGhpcy5vblNlYXJjaC5lbWl0KHsgbW9kZTogdGhpcy5jb25maWcubW9kZSwgZGF0YTogbnVsbCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgc3BlY2lmaWMgZmlsdGVyIGNyaXRlcmlhIGJhc2VkIG9uIGl0cyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGkgLSBJbmRleCBvZiB0aGUgZmlsdGVyIGNyaXRlcmlhIHRvIGJlIHJlbW92ZWQuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlRmlsdGVyKGk6IG51bWJlcik6IHZvaWR7XG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMuYWN0aXZlRmlsdGVyW2ldLmtleV0uc2V0VmFsdWUoJycpO1xuICAgIHRoaXMuYWN0aXZlRmlsdGVyLnNwbGljZShpLCAxKTtcbiAgICB0aGlzLmVtaXRWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYXRlcyBhIHNlYXJjaCBiYXNlZCBvbiB0aGUgYWN0aXZlIGZpbHRlciBjcml0ZXJpYSBhbmQgY2xlYXJzIHRoZSBzYXZlZCBmaWx0ZXIgc3RhdGUgaWYgdGhlcmUgYXJlIG5vIGFjdGl2ZSBmaWx0ZXJzLlxuICAgKi9cbiAgcHVibGljIHNlYXJjaCgpOiB2b2lke1xuICAgIHRoaXMucmVzZXRWYWx1ZSgpO1xuICAgIHRoaXMuZW1pdFZhbHVlKChrOiBzdHJpbmcsIHY6IGFueSkgPT4ge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHtcbiAgICAgICAgdi5mb3JFYWNoKCh2YWx1ZTogYW55KSA9PiB0aGlzLnByb2Nlc3NGaWx0ZXIoaywgdmFsdWUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0ZpbHRlcihrLCB2KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgXG4gICAgaWYgKHRoaXMuYWN0aXZlRmlsdGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5pbml0aWFsSXRlbXMuY2xlYXIoKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke3RoaXMuaWR9YCk7XG4gICAgfVxuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuICBcbiAgcHJvdGVjdGVkIHByb2Nlc3NGaWx0ZXIoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lke1xuICAgIGNvbnN0IGluaXRpYWxJdGVtID0gdGhpcy5pbml0aWFsSXRlbXMuZ2V0KGtleSk/LmZpbmQoaXRlbSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZSk7XG4gICAgY29uc3QgbGFiZWwgPSBpbml0aWFsSXRlbVxuICAgICAgPyBgJHsga2V5IH06ICR7IGluaXRpYWxJdGVtLmxhYmVsIH1gXG4gICAgICA6IGAkeyBrZXkgfTogJHsga2V5LmluY2x1ZGVzKCdkYXRlJyk/IGZvcm1hdERhdGUodmFsdWUsICdkZCBNTU0geXl5eScsICdlbi1VUycpIDogdmFsdWUgfWA7XG4gIFxuICAgIHRoaXMuYWN0aXZlRmlsdGVyLnB1c2goeyBrZXksIHZhbHVlLCBsYWJlbCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGZpbHRlciBjcml0ZXJpYSBiYXNlZCBvbiB0aGUgdXNlciBpbnB1dC5cbiAgICovXG4gIHB1YmxpYyBhZGQoKTogdm9pZHtcbiAgICBjb25zdCB7IGtleSwgdmFsdWUgfSA9IHRoaXMuZ2V0VmFsdWUodGhpcy5zZWFyY2hCb3gubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gICAgaWYgKHRoaXMuY29uZmlnLmZpZWxkcy5maW5kSW5kZXgoKHsga2V5OiBrIH0pID0+IGsgPT09IGtleSkgPT09IC0xKSB7XG4gICAgICB0aGlzLnNlYXJjaEJveC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaSA9IHRoaXMuYWN0aXZlRmlsdGVyLmZpbmRJbmRleCgoeyBrZXk6IGsgfSkgPT4gayA9PT0ga2V5KTtcbiAgICBpZiAoaSA9PT0gLTEpIHRoaXMuYWN0aXZlRmlsdGVyLnB1c2goeyBsYWJlbDogYCR7IGtleSB9OiR7IHZhbHVlIH1gLCBrZXksIHZhbHVlIH0pO1xuICAgIGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVGaWx0ZXJbaV0ua2V5ID0ga2V5O1xuICAgICAgdGhpcy5hY3RpdmVGaWx0ZXJbaV0udmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVyW2ldLmxhYmVsID0gYCR7IGtleSB9OiR7IHZhbHVlIH1gO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgW2tleV06IHZhbHVlIH0pO1xuICAgIHRoaXMuc2VhcmNoQm94Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB0aGlzLmVtaXRWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY2VpdmUgdGhlIGluaXRpYWxJdGVtcyBmb3JtIHNlYXJjaGFibGUgb3Igc2VsZWN0IGNvbXBvbmVudCBhbmQgYXBwbHkgdGhlbSB0byB0aGUgaW5pdGlhbEl0ZW1zIG1hcCB0byBiZSB1c2VkIGFnYWluIGJ5IHNlYXJjaGFibGUgb3Igc2VsZWN0IGNvbXBvbmVudFxuICAgKiB3aGVuIGl0IGluaXRpYWxpemVkIGFnYWluLlxuICAgKiBAcGFyYW0ge2FueX0gaXRlbSAtIFRoZSBpbml0aWFsIGl0ZW1zIHJlY2VpdmVkIGZyb20gdGhlIHNlYXJjYWJsZSBvciBzZWxlY3QgY29tcG9uZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIGluaXRpYWwgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgYXBwbHlJbml0aWFsSXRlbXMoaXRlbTogYW55LCBrZXk6IHN0cmluZyk6IHZvaWR7IFxuICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtKSkge1xuICAgICAgdGhpcy5pbml0aWFsSXRlbXMgPSB0aGlzLmluaXRpYWxJdGVtcy5zZXQoa2V5LCBbIGl0ZW0gXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pbml0aWFsSXRlbXMgPSB0aGlzLmluaXRpYWxJdGVtcy5zZXQoa2V5LCBpdGVtKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgYWN0aXZlIGZpbHRlciBhbmQgY2xlYXJzIHRoZSBzZWFyY2ggYm94LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc2V0VmFsdWUoKTogdm9pZHtcbiAgICB0aGlzLmFjdGl2ZUZpbHRlci5sZW5ndGggPSAwO1xuICAgIHRoaXMuc2VhcmNoQm94Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIGlucHV0IHZhbHVlIGFuZCByZXR1cm5zIGEga2V5LXZhbHVlIHBhaXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIElucHV0IHZhbHVlIHRvIGJlIHBhcnNlZC5cbiAgICogQHJldHVybnMge3sga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfX0gLSBLZXktdmFsdWUgcGFpciBleHRyYWN0ZWQgZnJvbSB0aGUgaW5wdXQgdmFsdWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0VmFsdWUodmFsdWU6IHN0cmluZyk6IHsga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfXtcbiAgICBjb25zdCB2YWx1ZXM6IHN0cmluZ1tdID0gdmFsdWUuc3BsaXQoJzonKTtcblxuICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxKSByZXR1cm4geyBrZXk6IDxzdHJpbmc+IHRoaXMuY29uZmlnLmZpZWxkc1swXS5rZXksIHZhbHVlOiB2YWx1ZXNbMF0gfTtcbiAgICByZXR1cm4geyBrZXk6IHZhbHVlc1swXSwgdmFsdWU6IHZhbHVlc1sxXSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBzZWFyY2ggZXZlbnQgYmFzZWQgb24gdGhlIGZvcm0gdmFsdWVzLlxuICAgKiBJbnZva2VzIGFuIGV4dHJhIGFjdGlvbiBpZiBwcm92aWRlZCBhbmQgc2F2ZXMgdGhlIHN0YXRlIHRvIGxvY2FsU3RvcmFnZS5cbiAgICogQHBhcmFtIHsoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHZvaWR9IFtleHRyYUFjdGlvbl0gLSBPcHRpb25hbCBleHRyYSBhY3Rpb24gdG8gYmUgaW52b2tlZC5cbiAgICovXG4gIHByb3RlY3RlZCBlbWl0VmFsdWUoZXh0cmFBY3Rpb24/OiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lke1xuICAgIGxldCBmbGFnOiBib29sZWFuID0gZmFsc2U7XG4gICAgY29uc3QgZiA9IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpO1xuICAgIGNvbnN0IGRhdGE6IHsgW2s6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgXG4gICAgT2JqZWN0LmtleXMoZikuZm9yRWFjaCgoazogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIWZba10pIHJldHVybjtcbiAgICAgIFxuICAgICAgZmxhZyA9IHRydWU7XG4gICAgICBkYXRhW2tdID0gZltrXTtcbiAgICAgIGV4dHJhQWN0aW9uPy4oaywgZltrXSk7XG4gICAgfSk7XG4gICAgdGhpcy5vblNlYXJjaC5lbWl0KHsgbW9kZTogdGhpcy5jb25maWcubW9kZSwgZGF0YTogZmxhZz8gZGF0YSA6IG51bGwgfSk7XG4gICAgXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICBgJHsgdGhpcy5pZCB9YCwgXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGFjdGl2ZUZpbHRlcjogdGhpcy5hY3RpdmVGaWx0ZXIsXG4gICAgICAgIGluaXRpYWxJdGVtczogT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuaW5pdGlhbEl0ZW1zKSxcbiAgICAgICAgZm9ybVZhbHVlczogdGhpcy5mb3JtLmdldFJhd1ZhbHVlKClcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZm9ybSBjb250cm9sIGZvciBhIGdpdmVuIGtleSBhbmQgc2V0cyBpdHMgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIEtleSBmb3IgdGhlIGZvcm0gY29udHJvbC5cbiAgICogQHBhcmFtIHsqfSBbdmFsXSAtIEluaXRpYWwgdmFsdWUgZm9yIHRoZSBmb3JtIGNvbnRyb2wuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlRm9ybUNvbnRyb2woa2V5OiBzdHJpbmcsIHZhbD86IGFueSk6IHZvaWR7XG4gICAgdGhpcy5mb3JtLmFkZENvbnRyb2woa2V5LCBuZXcgRm9ybUNvbnRyb2woJycpKTtcblxuICAgIGlmICh2YWwpIHtcbiAgICAgIHRoaXMuZm9ybS5jb250cm9sc1trZXldLnNldFZhbHVlKHZhbCk7XG4gICAgICB0aGlzLmFjdGl2ZUZpbHRlci5wdXNoKHsgbGFiZWw6IGAkeyBrZXkgfTokeyB2YWwgfWAsIGtleSwgdmFsdWU6IHZhbCB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxpb24taWNvbiBuYW1lPVwic2VhcmNoXCIgY2xhc3M9XCJmcy00IHBvc2l0aW9uLWFic29sdXRlXCIgLz5cblxuPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZm9ybS1jb250cm9sIHBzLTUgcHktMCBwZS0wIGdhcC0zXCI+XG4gICAgQGlmIChhY3RpdmVGaWx0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtZ3Jvdy0xIGZsZXgtc2hyaW5rLTAgdGFnLWNvbnRhaW5lciBnYXAtMiB0ZXh0LW5vd3JhcCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIGFjdGl2ZUZpbHRlcjsgdHJhY2sgaXRlbS5rZXk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhZy1pdGVtIHAtMSByb3VuZGVkIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdXNlci1zZWxlY3Qtbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlXCIgY2xhc3M9XCJwZS0xIG1lLTEgY3Vyc29yLXBvaW50ZXIgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInJlbW92ZUZpbHRlcihpKTtcIiAvPlxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDxpbnB1dCAjc2VhcmNoQm94IHR5cGU9XCJzZWFyY2hcIiBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIH19XCIgY2xhc3M9XCJmbGV4LXNocmluay0xIGJvcmRlci0wIGZvcm0tY29udHJvbCBwcy0wIHB5LTJcIiBbY2xhc3MuYWR2XT1cImNvbmZpZy5tb2RlID09PSAnYWR2YW5jZWQnXCIgKGtleXVwLmVudGVyKT1cImFkZCgpO1wiIC8+XG48L2Rpdj5cblxuQGlmIChjb25maWcubW9kZSA9PT0gJ2FkdmFuY2VkJykge1xuICAgIDxpb24taWNvbiBuYW1lPVwiZmlsdGVyXCIgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBmcy00IGN1cnNvci1wb2ludGVyXCIgaWQ9XCJmaWx0ZXIte3sgaWQgfX1cIiAvPlxuICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2VcIiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGZzLTQgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xlYXIoKTtcIiAvPlxuICAgIFxuICAgIDxpb24tcG9wb3ZlciB0cmlnZ2VyPVwiZmlsdGVyLXt7IGlkIH19XCIgdHJpZ2dlckFjdGlvbj1cImNsaWNrXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZmlsdGVyIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zaHJpbmstMCBib3JkZXItYm90dG9tIHAtMSBwZS00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1idXR0b25zPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1idXR0b24gc2l6ZT1cInNtYWxsXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJjbG9zZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNSBmdy1tZWRpdW1cIj5BZHZhbmNlZCBGaWx0ZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgXG4gICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJmbGV4LWdyb3ctMSBvdmVyZmxvdy1hdXRvIHB4LTRcIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoYyBvZiBjb25maWcuZmllbGRzOyB0cmFjayBjLmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQHN3aXRjaCAoYy50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKCdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cC1pbnB1dCB0eXBlPVwibnVtYmVyXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJteS00XCIgbGFiZWw9XCJ7eyBjLmxhYmVsIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXkgfX1cIiAvPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1jaGVja2JveCBsYWJlbFBsYWNlbWVudD1cImVuZFwiIGZvcm1Db250cm9sTmFtZT1cInt7IGMua2V5IH19XCI+e3sgYy5sYWJlbCB9fTwvaW9uLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2RhdGUtcmFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMgbXktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVwLWRhdGUgY2xhc3M9XCJmbGV4LWdyb3ctMVwiIG5hbWU9XCJmaWx0ZXItZnJvbVwiIGxhYmVsPVwie3sgYy5sYWJlbFswXSB9fVwiIGZvcm1Db250cm9sTmFtZT1cInt7IGMua2V5WzBdIH19XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cC1kYXRlIGNsYXNzPVwiZmxleC1ncm93LTFcIiBuYW1lPVwiZmlsdGVyLXRvXCIgbGFiZWw9XCJ7eyBjLmxhYmVsWzFdIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXlbMV0gfX1cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ3NlbGVjdCcpIHsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cC1zZWxlY3QgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm15LTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cInt7IGMubGFiZWwgfX1cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7IGMua2V5IH19XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiYy5vcHRpb25zIVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiYy5tdWx0aXBsZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlICgnc2VhcmNoYWJsZS1zZWxlY3QnKSB7IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXAtc2VhcmNoYWJsZS1zZWxlY3QgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm15LTRcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJ7eyBjLmxhYmVsIH19XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ7eyBjLmtleSB9fVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXJ5RnVuY109XCJjLmdldE9wdGlvbnMhXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5pdGlhbEl0ZW1zXT1cImMub3B0aW9ucyEgfHwgaW5pdGlhbEl0ZW1zLmdldChjLmtleS50b1N0cmluZygpKSFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImMubXVsdGlwbGUgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cImFwcGx5SW5pdGlhbEl0ZW1zKCRldmVudCwgYy5rZXkudG9TdHJpbmcoKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgeyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVwLWlucHV0IHR5cGU9XCJ0ZXh0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJteS00XCIgbGFiZWw9XCJ7eyBjLmxhYmVsIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXkgfX1cIiAvPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNocmluay0wIHB5LTMgcHgtNCBib3JkZXItdG9wIGQtZmxleCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCIgY29sb3I9XCJzZWNvbmRhcnlcIiAoY2xpY2spPVwiZm9ybS5yZXNldCgpO1wiPlJlc2V0PC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNlYXJjaCgpO1wiPlNlYXJjaDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICA8L2lvbi1wb3BvdmVyPiAgICBcbn1cbiJdfQ==
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0osT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUloRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7QUFvQnJILE1BQU0sT0FBTyxlQUFlO0lBK0MxQixZQUNtQyxXQUFtQixFQUNqQyxFQUFxQixFQUNyQixXQUE4QjtRQUZoQixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUNqQyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUE3QnpCLGFBQVEsR0FBb0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVl6RSxTQUFJLEdBQW1CLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBTWxELGlCQUFZLEdBQW9ELEVBQUUsQ0FBQztRQU1uRSxpQkFBWSxHQUFvRCxJQUFJLEdBQUcs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UztRQUNqQixZQUFZLENBQUMsT0FBTyxDQUNsQixHQUFJLElBQUksQ0FBQyxFQUFHLEVBQUUsRUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2IsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLFlBQVksRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDbkQsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1NBQ3BDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzsrR0ExUFUsZUFBZSxrQkFnRGIsYUFBYTttR0FoRGYsZUFBZSwrU0MzQjVCLGc5SkE2RkEsOHBCRDFFSSxXQUFXLDg0QkFDWCxpQkFBaUIscUlBQ2pCLGtCQUFrQiw4SEFDbEIsbUJBQW1CLDZyQkFDbkIsbUJBQW1CLGlNQUNuQiw2QkFBNkI7OzRGQUdwQixlQUFlO2tCQWxCM0IsU0FBUztpQ0FDSSxJQUFJLFlBQ04sV0FBVyxtQkFHSix1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNKLEtBQUssRUFBRSwyQkFBMkI7cUJBQ25DLFdBQ1E7d0JBQ1AsV0FBVzt3QkFDWCxpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3dCQUNuQixtQkFBbUI7d0JBQ25CLDZCQUE2QjtxQkFDOUI7OzBCQWtERSxTQUFTOzJCQUFDLGFBQWE7eUdBekNRLEVBQUU7c0JBQW5DLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQU9TLE1BQU07c0JBQXZDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQU9DLFFBQVE7c0JBQWpDLE1BQU07Z0JBTW9DLFNBQVM7c0JBQW5ELFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0dHJpYnV0ZSwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElvbmljTW9kdWxlLCBQb3BvdmVyQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEZpbHRlckNvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcy9maWx0ZXItY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBGaWx0ZXJGaWVsZCB9IGZyb20gJy4vaW50ZXJmYWNlcy9maWx0ZXItZmllbGQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZpbHRlclNlYXJjaEV2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ZpbHRlci1zZWFyY2gtZXZlbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZvcm1JbnB1dENvbXBvbmVudCwgRm9ybVNlbGVjdENvbXBvbmVudCwgRm9ybURhdGVDb21wb25lbnQsIEZvcm1TZWFyY2hhYmxlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICd1cC1maWx0ZXInLFxuICBzdHlsZVVybDogICcuL2ZpbHRlci5jb21wb25lbnQuc2NzcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDogeyBcbiAgICBjbGFzczogJ2QtYmxvY2sgcG9zaXRpb24tcmVsYXRpdmUnIFxuICB9LFxuICBpbXBvcnRzOiBbICBcbiAgICBJb25pY01vZHVsZSxcbiAgICBGb3JtRGF0ZUNvbXBvbmVudCxcbiAgICBGb3JtSW5wdXRDb21wb25lbnQsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3JtU2VsZWN0Q29tcG9uZW50LFxuICAgIEZvcm1TZWFyY2hhYmxlU2VsZWN0Q29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAvKipcbiAgICogSW5wdXQgdmFyaWFibGUgZm9yIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgZmlsdGVyLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAcmVxdWlyZWRcbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBpZCE6IHN0cmluZztcblxuICAvKipcbiAgICogSW5wdXQgdmFyaWFibGUgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBzcGVjaWZ5aW5nIGZpbHRlciBmaWVsZHMgYW5kIG1vZGUuXG4gICAqIEB0eXBlIHtGaWx0ZXJDb25maWd9XG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIGNvbmZpZyE6IEZpbHRlckNvbmZpZztcblxuICAvKipcbiAgICogT3V0cHV0IGV2ZW50IGVtaXR0ZXIgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgcGVyZm9ybXMgYSBzZWFyY2guXG4gICAqIEVtaXRzIGEgYEZpbHRlclNlYXJjaEV2ZW50YCBvYmplY3Qgd2l0aCBzZWFyY2ggbW9kZSBhbmQgY3JpdGVyaWEgZGF0YS5cbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxGaWx0ZXJTZWFyY2hFdmVudD59XG4gICAqL1xuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IG9uU2VhcmNoOiBFdmVudEVtaXR0ZXI8RmlsdGVyU2VhcmNoRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBWaWV3Q2hpbGQgZGVjb3JhdG9yIHRvIHJlZmVyZW5jZSB0aGUgc2VhcmNoQm94IGVsZW1lbnQgaW4gdGhlIHRlbXBsYXRlLlxuICAgKiBAdHlwZSB7RWxlbWVudFJlZn1cbiAgICovXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaEJveCcpIHByb3RlY3RlZCByZWFkb25seSBzZWFyY2hCb3ghOiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBGb3JtIGdyb3VwIGZvciBtYW5hZ2luZyBmb3JtIGNvbnRyb2xzLlxuICAgKiBAdHlwZSB7Rm9ybUdyb3VwPGFueT59XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybTogRm9ybUdyb3VwPGFueT4gPSBuZXcgRm9ybUdyb3VwKHt9KTtcblxuICAvKipcbiAgICogQXJyYXkgdG8gc3RvcmUgYWN0aXZlIGZpbHRlciBjcml0ZXJpYS5cbiAgICogQHR5cGUge3sgbGFiZWw6IHN0cmluZywga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfVtdfVxuICAgKi9cbiAgcHVibGljIGFjdGl2ZUZpbHRlcjogeyBsYWJlbDogc3RyaW5nLCBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9W10gPSBbXTtcblxuICAvKipcbiAgICogTWFwIHRvIHN0b3JlIGluaXRpYWwgaXRlbXMgZm9yIGVhY2ggZmlsdGVyIGtleS5cbiAgICogQHR5cGUge01hcDxzdHJpbmcsIHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9W10+fVxuICAgKi9cbiAgcHVibGljIGluaXRpYWxJdGVtczogTWFwPHN0cmluZywgeyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXT4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInKSBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2g6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBwb3BvdmVyQ3RybDogUG9wb3ZlckNvbnRyb2xsZXJcbiAgKSB7IH0gXG5cbiAgLyoqXG4gICAqIExpZmVjeWNsZSBob29rIHRvIGluaXRpYWxpemUgdGhlIGNvbXBvbmVudC5cbiAgICogQ3JlYXRlcyBmb3JtIGNvbnRyb2xzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uIGFuZCByZXN0b3JlcyBzYXZlZCBmaWx0ZXIgc3RhdGUuXG4gICAqL1xuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZHtcbiAgICB0aGlzLmNvbmZpZy5maWVsZHMuZm9yRWFjaCgoeyBrZXksIGluaXRpYWxWYWx1ZSwgaW5pdGlhbEl0ZW1zIH06IEZpbHRlckZpZWxkKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAga2V5LmZvckVhY2goKGs6IHN0cmluZywgaTogbnVtYmVyKSA9PiB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKGssIGluaXRpYWxWYWx1ZT8uYXQoaSkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbml0aWFsSXRlbXMpIHtcbiAgICAgICAgICB0aGlzLmluaXRpYWxJdGVtcy5zZXQoa2V5LCBpbml0aWFsSXRlbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChrZXksIGluaXRpYWxWYWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzYXZlZFN0YXRlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7IHRoaXMuaWQgfWApO1xuICAgIGlmIChzYXZlZFN0YXRlKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IEpTT04ucGFyc2Uoc2F2ZWRTdGF0ZSk7XG5cbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVyID0gc3RhdGUuYWN0aXZlRmlsdGVyO1xuICAgICAgaWYgKHN0YXRlLmluaXRpYWxJdGVtcykge1xuICAgICAgICB0aGlzLmluaXRpYWxJdGVtcyA9IG5ldyBNYXAoT2JqZWN0LmVudHJpZXMoc3RhdGUuaW5pdGlhbEl0ZW1zKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShzdGF0ZS5mb3JtVmFsdWVzKTtcbiAgICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgZmlsdGVyIHBvcG92ZXIuXG4gICAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZHsgXG4gICAgdGhpcy5wb3BvdmVyQ3RybC5kaXNtaXNzKCk7IFxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgZmlsdGVyIGNyaXRlcmlhLCBsb2NhbFN0b3JhZ2UsIGFuZCB0cmlnZ2VycyBhIHNlYXJjaCBldmVudCB3aXRoIG51bGwgZGF0YS5cbiAgICovXG4gIHB1YmxpYyBjbGVhcigpOiB2b2lke1xuICAgIHRoaXMucmVzZXRWYWx1ZSgpO1xuICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7IHRoaXMuaWQgfWApO1xuICAgIHRoaXMuaW5pdGlhbEl0ZW1zLmNsZWFyKCk7XG4gICAgdGhpcy5vblNlYXJjaC5lbWl0KHsgbW9kZTogdGhpcy5jb25maWcubW9kZSwgZGF0YTogbnVsbCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgc3BlY2lmaWMgZmlsdGVyIGNyaXRlcmlhIGJhc2VkIG9uIGl0cyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGkgLSBJbmRleCBvZiB0aGUgZmlsdGVyIGNyaXRlcmlhIHRvIGJlIHJlbW92ZWQuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlRmlsdGVyKGk6IG51bWJlcik6IHZvaWR7XG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMuYWN0aXZlRmlsdGVyW2ldLmtleV0uc2V0VmFsdWUoJycpO1xuICAgIHRoaXMuYWN0aXZlRmlsdGVyLnNwbGljZShpLCAxKTtcbiAgICB0aGlzLmVtaXRWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYXRlcyBhIHNlYXJjaCBiYXNlZCBvbiB0aGUgYWN0aXZlIGZpbHRlciBjcml0ZXJpYSBhbmQgY2xlYXJzIHRoZSBzYXZlZCBmaWx0ZXIgc3RhdGUgaWYgdGhlcmUgYXJlIG5vIGFjdGl2ZSBmaWx0ZXJzLlxuICAgKi9cbiAgcHVibGljIHNlYXJjaCgpOiB2b2lke1xuICAgIHRoaXMucmVzZXRWYWx1ZSgpO1xuICAgIHRoaXMuZW1pdFZhbHVlKChrOiBzdHJpbmcsIHY6IGFueSkgPT4ge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHtcbiAgICAgICAgdi5mb3JFYWNoKCh2YWx1ZTogYW55KSA9PiB0aGlzLnByb2Nlc3NGaWx0ZXIoaywgdmFsdWUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0ZpbHRlcihrLCB2KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgXG4gICAgaWYgKHRoaXMuYWN0aXZlRmlsdGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5pbml0aWFsSXRlbXMuY2xlYXIoKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke3RoaXMuaWR9YCk7XG4gICAgfVxuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuICBcbiAgcHJvdGVjdGVkIHByb2Nlc3NGaWx0ZXIoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lke1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZVswXTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgaW5pdGlhbEl0ZW0gPSB0aGlzLmluaXRpYWxJdGVtcy5nZXQoa2V5KT8uZmluZChpdGVtID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlKTtcbiAgICBjb25zdCBsYWJlbCA9IGluaXRpYWxJdGVtXG4gICAgICA/IGAkeyBrZXkgfTogJHsgaW5pdGlhbEl0ZW0ubGFiZWwgfWBcbiAgICAgIDogYCR7IGtleSB9OiAkeyBrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZGF0ZScpPyBmb3JtYXREYXRlKHZhbHVlLCAnZGQgTU1NIHl5eXknLCAnZW4tVVMnKSA6IHZhbHVlIH1gO1xuICBcbiAgICB0aGlzLmFjdGl2ZUZpbHRlci5wdXNoKHsga2V5LCB2YWx1ZSwgbGFiZWwgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBmaWx0ZXIgY3JpdGVyaWEgYmFzZWQgb24gdGhlIHVzZXIgaW5wdXQuXG4gICAqL1xuICBwdWJsaWMgYWRkKCk6IHZvaWR7XG4gICAgY29uc3QgeyBrZXksIHZhbHVlIH0gPSB0aGlzLmdldFZhbHVlKHRoaXMuc2VhcmNoQm94Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5maWVsZHMuZmluZEluZGV4KCh7IGtleTogayB9KSA9PiBrID09PSBrZXkpID09PSAtMSkge1xuICAgICAgdGhpcy5zZWFyY2hCb3gubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGkgPSB0aGlzLmFjdGl2ZUZpbHRlci5maW5kSW5kZXgoKHsga2V5OiBrIH0pID0+IGsgPT09IGtleSk7XG4gICAgaWYgKGkgPT09IC0xKSB0aGlzLmFjdGl2ZUZpbHRlci5wdXNoKHsgbGFiZWw6IGAkeyBrZXkgfTokeyB2YWx1ZSB9YCwga2V5LCB2YWx1ZSB9KTtcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVyW2ldLmtleSA9IGtleTtcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVyW2ldLnZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLmFjdGl2ZUZpbHRlcltpXS5sYWJlbCA9IGAkeyBrZXkgfTokeyB2YWx1ZSB9YDtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IFtrZXldOiB2YWx1ZSB9KTtcbiAgICB0aGlzLnNlYXJjaEJveC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgdGhpcy5lbWl0VmFsdWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNlaXZlIHRoZSBpbml0aWFsSXRlbXMgZm9ybSBzZWFyY2hhYmxlIG9yIHNlbGVjdCBjb21wb25lbnQgYW5kIGFwcGx5IHRoZW0gdG8gdGhlIGluaXRpYWxJdGVtcyBtYXAgdG8gYmUgdXNlZCBhZ2FpbiBieSBzZWFyY2hhYmxlIG9yIHNlbGVjdCBjb21wb25lbnRcbiAgICogd2hlbiBpdCBpbml0aWFsaXplZCBhZ2Fpbi5cbiAgICogQHBhcmFtIHthbnl9IGl0ZW0gLSBUaGUgaW5pdGlhbCBpdGVtcyByZWNlaXZlZCBmcm9tIHRoZSBzZWFyY2FibGUgb3Igc2VsZWN0IGNvbXBvbmVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbml0aWFsIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIGFwcGx5SW5pdGlhbEl0ZW1zKGl0ZW06IGFueSwga2V5OiBzdHJpbmcpOiB2b2lkeyBcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgIHRoaXMuaW5pdGlhbEl0ZW1zID0gdGhpcy5pbml0aWFsSXRlbXMuc2V0KGtleSwgWyBpdGVtIF0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbEl0ZW1zID0gdGhpcy5pbml0aWFsSXRlbXMuc2V0KGtleSwgaXRlbSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGFjdGl2ZSBmaWx0ZXIgYW5kIGNsZWFycyB0aGUgc2VhcmNoIGJveC5cbiAgICovXG4gIHByb3RlY3RlZCByZXNldFZhbHVlKCk6IHZvaWR7XG4gICAgdGhpcy5hY3RpdmVGaWx0ZXIubGVuZ3RoID0gMDtcbiAgICB0aGlzLnNlYXJjaEJveC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIHRoZSBpbnB1dCB2YWx1ZSBhbmQgcmV0dXJucyBhIGtleS12YWx1ZSBwYWlyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBJbnB1dCB2YWx1ZSB0byBiZSBwYXJzZWQuXG4gICAqIEByZXR1cm5zIHt7IGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH19IC0gS2V5LXZhbHVlIHBhaXIgZXh0cmFjdGVkIGZyb20gdGhlIGlucHV0IHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB7IGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH17XG4gICAgY29uc3QgdmFsdWVzOiBzdHJpbmdbXSA9IHZhbHVlLnNwbGl0KCc6Jyk7XG5cbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHsga2V5OiA8c3RyaW5nPiB0aGlzLmNvbmZpZy5maWVsZHNbMF0ua2V5LCB2YWx1ZTogdmFsdWVzWzBdIH07XG4gICAgcmV0dXJuIHsga2V5OiB2YWx1ZXNbMF0sIHZhbHVlOiB2YWx1ZXNbMV0gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgc2VhcmNoIGV2ZW50IGJhc2VkIG9uIHRoZSBmb3JtIHZhbHVlcy5cbiAgICogSW52b2tlcyBhbiBleHRyYSBhY3Rpb24gaWYgcHJvdmlkZWQgYW5kIHNhdmVzIHRoZSBzdGF0ZSB0byBsb2NhbFN0b3JhZ2UuXG4gICAqIEBwYXJhbSB7KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB2b2lkfSBbZXh0cmFBY3Rpb25dIC0gT3B0aW9uYWwgZXh0cmEgYWN0aW9uIHRvIGJlIGludm9rZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZW1pdFZhbHVlKGV4dHJhQWN0aW9uPzogKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZHtcbiAgICBsZXQgZmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0IGYgPSB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBkYXRhOiB7IFtrOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIFxuICAgIE9iamVjdC5rZXlzKGYpLmZvckVhY2goKGs6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFmW2tdKSByZXR1cm47XG4gICAgICBcbiAgICAgIGZsYWcgPSB0cnVlO1xuICAgICAgZGF0YVtrXSA9IGZba107XG4gICAgICBleHRyYUFjdGlvbj8uKGssIGZba10pO1xuICAgIH0pO1xuICAgIHRoaXMub25TZWFyY2guZW1pdCh7IG1vZGU6IHRoaXMuY29uZmlnLm1vZGUsIGRhdGE6IGZsYWc/IGRhdGEgOiBudWxsIH0pO1xuICAgIFxuICAgIHRoaXMuc2F2ZVN0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGZvcm0gY29udHJvbCBmb3IgYSBnaXZlbiBrZXkgYW5kIHNldHMgaXRzIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBLZXkgZm9yIHRoZSBmb3JtIGNvbnRyb2wuXG4gICAqIEBwYXJhbSB7Kn0gW3ZhbF0gLSBJbml0aWFsIHZhbHVlIGZvciB0aGUgZm9ybSBjb250cm9sLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUZvcm1Db250cm9sKGtleTogc3RyaW5nLCB2YWw/OiBhbnkpOiB2b2lke1xuICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGtleSwgbmV3IEZvcm1Db250cm9sKCcnKSk7XG5cbiAgICBpZiAodmFsKSB7XG4gICAgICB0aGlzLmZvcm0uY29udHJvbHNba2V5XS5zZXRWYWx1ZSh2YWwpO1xuICAgICAgdGhpcy5wcm9jZXNzRmlsdGVyKGtleSwgdmFsKTtcbiAgICAgIHRoaXMuc2F2ZVN0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNhdmVTdGF0ZSgpOiB2b2lke1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgYCR7IHRoaXMuaWQgfWAsIFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBhY3RpdmVGaWx0ZXI6IHRoaXMuYWN0aXZlRmlsdGVyLFxuICAgICAgICBpbml0aWFsSXRlbXM6IE9iamVjdC5mcm9tRW50cmllcyh0aGlzLmluaXRpYWxJdGVtcyksXG4gICAgICAgIGZvcm1WYWx1ZXM6IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpXG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiIsIjxpb24taWNvbiBuYW1lPVwic2VhcmNoXCIgY2xhc3M9XCJmcy00IHBvc2l0aW9uLWFic29sdXRlXCIgLz5cblxuPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZm9ybS1jb250cm9sIHBzLTUgcHktMCBwZS0wIGdhcC0zXCI+XG4gICAgQGlmIChhY3RpdmVGaWx0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtZ3Jvdy0xIGZsZXgtc2hyaW5rLTAgdGFnLWNvbnRhaW5lciBnYXAtMiB0ZXh0LW5vd3JhcCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIGFjdGl2ZUZpbHRlcjsgdHJhY2sgaXRlbS5rZXk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhZy1pdGVtIHAtMSByb3VuZGVkIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdXNlci1zZWxlY3Qtbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlXCIgY2xhc3M9XCJwZS0xIG1lLTEgY3Vyc29yLXBvaW50ZXIgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInJlbW92ZUZpbHRlcihpKTtcIiAvPlxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDxpbnB1dCAjc2VhcmNoQm94IHR5cGU9XCJzZWFyY2hcIiBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIH19XCIgY2xhc3M9XCJmbGV4LXNocmluay0xIGJvcmRlci0wIGZvcm0tY29udHJvbCBwcy0wIHB5LTJcIiBbY2xhc3MuYWR2XT1cImNvbmZpZy5tb2RlID09PSAnYWR2YW5jZWQnXCIgKGtleXVwLmVudGVyKT1cImFkZCgpO1wiIC8+XG48L2Rpdj5cblxuQGlmIChjb25maWcubW9kZSA9PT0gJ2FkdmFuY2VkJykge1xuICAgIDxpb24taWNvbiBuYW1lPVwiZmlsdGVyXCIgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBmcy00IGN1cnNvci1wb2ludGVyXCIgaWQ9XCJmaWx0ZXIte3sgaWQgfX1cIiAvPlxuICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2VcIiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGZzLTQgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xlYXIoKTtcIiAvPlxuICAgIFxuICAgIDxpb24tcG9wb3ZlciB0cmlnZ2VyPVwiZmlsdGVyLXt7IGlkIH19XCIgdHJpZ2dlckFjdGlvbj1cImNsaWNrXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZmlsdGVyIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zaHJpbmstMCBib3JkZXItYm90dG9tIHAtMSBwZS00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1idXR0b25zPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1idXR0b24gc2l6ZT1cInNtYWxsXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJjbG9zZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNSBmdy1tZWRpdW1cIj5BZHZhbmNlZCBGaWx0ZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgXG4gICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJmbGV4LWdyb3ctMSBvdmVyZmxvdy1hdXRvIHB4LTRcIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoYyBvZiBjb25maWcuZmllbGRzOyB0cmFjayBjLmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQHN3aXRjaCAoYy50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKCdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cC1pbnB1dCB0eXBlPVwibnVtYmVyXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJteS00XCIgbGFiZWw9XCJ7eyBjLmxhYmVsIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXkgfX1cIiAvPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1jaGVja2JveCBsYWJlbFBsYWNlbWVudD1cImVuZFwiIGZvcm1Db250cm9sTmFtZT1cInt7IGMua2V5IH19XCI+e3sgYy5sYWJlbCB9fTwvaW9uLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2RhdGUtcmFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMgbXktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVwLWRhdGUgY2xhc3M9XCJmbGV4LWdyb3ctMVwiIG5hbWU9XCJmaWx0ZXItZnJvbVwiIGxhYmVsPVwie3sgYy5sYWJlbFswXSB9fVwiIGZvcm1Db250cm9sTmFtZT1cInt7IGMua2V5WzBdIH19XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cC1kYXRlIGNsYXNzPVwiZmxleC1ncm93LTFcIiBuYW1lPVwiZmlsdGVyLXRvXCIgbGFiZWw9XCJ7eyBjLmxhYmVsWzFdIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXlbMV0gfX1cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ3NlbGVjdCcpIHsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cC1zZWxlY3QgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm15LTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cInt7IGMubGFiZWwgfX1cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7IGMua2V5IH19XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiYy5vcHRpb25zIVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiYy5tdWx0aXBsZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlICgnc2VhcmNoYWJsZS1zZWxlY3QnKSB7IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXAtc2VhcmNoYWJsZS1zZWxlY3QgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm15LTRcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJ7eyBjLmxhYmVsIH19XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ7eyBjLmtleSB9fVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXJ5RnVuY109XCJjLmdldE9wdGlvbnMhXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5pdGlhbEl0ZW1zXT1cImMub3B0aW9ucyEgfHwgaW5pdGlhbEl0ZW1zLmdldChjLmtleS50b1N0cmluZygpKSFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImMubXVsdGlwbGUgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cImFwcGx5SW5pdGlhbEl0ZW1zKCRldmVudCwgYy5rZXkudG9TdHJpbmcoKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgeyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVwLWlucHV0IHR5cGU9XCJ0ZXh0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJteS00XCIgbGFiZWw9XCJ7eyBjLmxhYmVsIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXkgfX1cIiAvPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNocmluay0wIHB5LTMgcHgtNCBib3JkZXItdG9wIGQtZmxleCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCIgY29sb3I9XCJzZWNvbmRhcnlcIiAoY2xpY2spPVwiZm9ybS5yZXNldCgpO1wiPlJlc2V0PC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNlYXJjaCgpO1wiPlNlYXJjaDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICA8L2lvbi1wb3BvdmVyPiAgICBcbn1cbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWZpZWxkLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvaW50ZXJmYWNlcy9maWx0ZXItZmllbGQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyRmllbGQge1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byByZXRyaWV2ZSBvcHRpb25zIGFzeW5jaHJvbm91c2x5IGJhc2VkIG9uIGEga2V5d29yZC5cbiAgICogSXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIG9mIGFuIGFycmF5IG9mIHsgbGFiZWwsIHZhbHVlIH0gb2JqZWN0cy5cbiAgICogQHR5cGUgeyhrZXl3b3JkOiBzdHJpbmcpID0+
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWZpZWxkLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvaW50ZXJmYWNlcy9maWx0ZXItZmllbGQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyRmllbGQge1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byByZXRyaWV2ZSBvcHRpb25zIGFzeW5jaHJvbm91c2x5IGJhc2VkIG9uIGEga2V5d29yZC5cbiAgICogSXQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIG9mIGFuIGFycmF5IG9mIHsgbGFiZWwsIHZhbHVlIH0gb2JqZWN0cy5cbiAgICogQHR5cGUgeyhrZXl3b3JkOiBzdHJpbmcpID0+IE9ic2VydmFibGU8eyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXT59XG4gICAqL1xuICBnZXRPcHRpb25zPzogKGtleXdvcmQ6IHN0cmluZykgPT4gT2JzZXJ2YWJsZTx7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfVtdPjtcblxuICAvKipcbiAgICogSW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZpbHRlciBmaWVsZC4gSXQgY2FuIGJlIGEgc2luZ2xlIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICAgKiBAdHlwZSB7KHN0cmluZyB8IHN0cmluZ1tdKX1cbiAgICovXG4gIGluaXRpYWxWYWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsIHZhbHVlIGZvciB0aGUgZmlsdGVyIGZpZWxkLiBVc2VkIGFzIGludGlhbCBpdGVtcyBmb3Igc2VsZWN0IGZvcm0gZmlsdGVyLlxuICAgKiBAdHlwZSB7eyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXX1cbiAgICovXG4gIGluaXRpYWxJdGVtcz86IHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9W107XG5cbiAgLyoqXG4gICAqIEtleSBvciBhcnJheSBvZiBrZXlzIHJlcHJlc2VudGluZyB0aGUgZmllbGQgaW4gdGhlIGRhdGEgbW9kZWwuXG4gICAqIEB0eXBlIHsoc3RyaW5nIHwgc3RyaW5nW10pfVxuICAgKi9cbiAga2V5OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTGFiZWwgb3IgYXJyYXkgb2YgbGFiZWxzIGZvciBkaXNwbGF5aW5nIHRoZSBmaWVsZCBpbiB0aGUgVUkuXG4gICAqIEB0eXBlIHsoc3RyaW5nIHwgc3RyaW5nW10pfVxuICAgKi9cbiAgbGFiZWw6IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBzZWxlY3QtbGlrZSBmaWVsZHMgKHNlbGVjdCwgc2VhcmNoYWJsZS1zZWxlY3QsIGNoZWNrYm94KS5cbiAgICogQW4gYXJyYXkgb2YgeyBsYWJlbCwgdmFsdWUgfSBvYmplY3RzLlxuICAgKiBAdHlwZSB7eyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXX1cbiAgICovXG4gIG9wdGlvbnM/OiB7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfVtdO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBmaWx0ZXIgZmllbGQuIEl0IGNhbiBiZSAndGV4dCcsICdudW1iZXInLCAnZGF0ZS1yYW5nZScsICdzZWxlY3QnLCAnc2VhcmNoYWJsZS1zZWxlY3QnLCBvciAnY2hlY2tib3gnLlxuICAgKiBAdHlwZSB7KCd0ZXh0JyB8ICdudW1iZXInIHwgJ2RhdGUtcmFuZ2UnIHwgJ3NlbGVjdCcgfCAnc2VhcmNoYWJsZS1zZWxlY3QnIHwgJ2NoZWNrYm94Jyl9XG4gICAqL1xuICB0eXBlOiAndGV4dCcgfCAnbnVtYmVyJyB8ICdkYXRlLXJhbmdlJyB8ICdzZWxlY3QnIHwgJ3NlYXJjaGFibGUtc2VsZWN0JyB8ICdjaGVja2JveCc7XG5cbiAgLyoqXG4gICAqIFRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBzZWxlY3QgdHlwZWQgZmllbGQgY2FuIGhhcyBtdWx0aXBsZSB2YWx1ZXMgb3Igbm90LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqL1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG59XG4iXX0=
|
|
@@ -2563,18 +2563,24 @@ class FilterComponent {
|
|
|
2563
2563
|
this.initialItems = new Map();
|
|
2564
2564
|
}
|
|
2565
2565
|
ngOnInit() {
|
|
2566
|
-
this.config.fields.forEach(({ key, initialValue }) => {
|
|
2567
|
-
if (typeof key
|
|
2568
|
-
this.createFormControl(key, initialValue);
|
|
2569
|
-
else {
|
|
2566
|
+
this.config.fields.forEach(({ key, initialValue, initialItems }) => {
|
|
2567
|
+
if (typeof key !== 'string') {
|
|
2570
2568
|
key.forEach((k, i) => this.createFormControl(k, initialValue?.at(i)));
|
|
2571
2569
|
}
|
|
2570
|
+
else {
|
|
2571
|
+
if (initialItems) {
|
|
2572
|
+
this.initialItems.set(key, initialItems);
|
|
2573
|
+
}
|
|
2574
|
+
this.createFormControl(key, initialValue);
|
|
2575
|
+
}
|
|
2572
2576
|
});
|
|
2573
2577
|
const savedState = localStorage.getItem(`${this.id}`);
|
|
2574
2578
|
if (savedState) {
|
|
2575
2579
|
const state = JSON.parse(savedState);
|
|
2576
2580
|
this.activeFilter = state.activeFilter;
|
|
2577
|
-
|
|
2581
|
+
if (state.initialItems) {
|
|
2582
|
+
this.initialItems = new Map(Object.entries(state.initialItems));
|
|
2583
|
+
}
|
|
2578
2584
|
this.form.patchValue(state.formValues);
|
|
2579
2585
|
this.emitValue();
|
|
2580
2586
|
}
|
|
@@ -2611,10 +2617,13 @@ class FilterComponent {
|
|
|
2611
2617
|
this.close();
|
|
2612
2618
|
}
|
|
2613
2619
|
processFilter(key, value) {
|
|
2620
|
+
if (Array.isArray(value)) {
|
|
2621
|
+
value = value[0];
|
|
2622
|
+
}
|
|
2614
2623
|
const initialItem = this.initialItems.get(key)?.find(item => item.value === value);
|
|
2615
2624
|
const label = initialItem
|
|
2616
2625
|
? `${key}: ${initialItem.label}`
|
|
2617
|
-
: `${key}: ${key.includes('date') ? formatDate(value, 'dd MMM yyyy', 'en-US') : value}`;
|
|
2626
|
+
: `${key}: ${key.toLowerCase().includes('date') ? formatDate(value, 'dd MMM yyyy', 'en-US') : value}`;
|
|
2618
2627
|
this.activeFilter.push({ key, value, label });
|
|
2619
2628
|
}
|
|
2620
2629
|
add() {
|
|
@@ -2664,19 +2673,23 @@ class FilterComponent {
|
|
|
2664
2673
|
extraAction?.(k, f[k]);
|
|
2665
2674
|
});
|
|
2666
2675
|
this.onSearch.emit({ mode: this.config.mode, data: flag ? data : null });
|
|
2667
|
-
|
|
2668
|
-
activeFilter: this.activeFilter,
|
|
2669
|
-
initialItems: Object.fromEntries(this.initialItems),
|
|
2670
|
-
formValues: this.form.getRawValue()
|
|
2671
|
-
}));
|
|
2676
|
+
this.saveState();
|
|
2672
2677
|
}
|
|
2673
2678
|
createFormControl(key, val) {
|
|
2674
2679
|
this.form.addControl(key, new FormControl(''));
|
|
2675
2680
|
if (val) {
|
|
2676
2681
|
this.form.controls[key].setValue(val);
|
|
2677
|
-
this.
|
|
2682
|
+
this.processFilter(key, val);
|
|
2683
|
+
this.saveState();
|
|
2678
2684
|
}
|
|
2679
2685
|
}
|
|
2686
|
+
saveState() {
|
|
2687
|
+
localStorage.setItem(`${this.id}`, JSON.stringify({
|
|
2688
|
+
activeFilter: this.activeFilter,
|
|
2689
|
+
initialItems: Object.fromEntries(this.initialItems),
|
|
2690
|
+
formValues: this.form.getRawValue()
|
|
2691
|
+
}));
|
|
2692
|
+
}
|
|
2680
2693
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilterComponent, deps: [{ token: 'placeholder', attribute: true }, { token: i0.ChangeDetectorRef }, { token: i1.PopoverController }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2681
2694
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FilterComponent, isStandalone: true, selector: "up-filter", inputs: { id: "id", config: "config" }, outputs: { onSearch: "onSearch" }, host: { classAttribute: "d-block position-relative" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], ngImport: i0, template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter overflow-auto\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n }\n\n @case ('select') { \n <up-select \n class=\"my-4\"\n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [items]=\"c.options!\"\n [multiple]=\"c.multiple || false\"\n /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select \n class=\"my-4\" \n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [queryFunc]=\"c.getOptions!\" \n [initialItems]=\"c.options! || initialItems.get(c.key.toString())!\"\n [multiple]=\"c.multiple || false\"\n (onChange)=\"applyInitialItems($event, c.key.toString())\"\n /> \n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "component", type: FormDateComponent, selector: "up-date", inputs: ["label", "required", "disabled", "presentation", "minDate", "maxDate"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled"], outputs: ["onInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormSelectComponent, selector: "up-select", inputs: ["items", "clearable", "label", "multiple", "required", "addTag", "disabled", "searchable", "bindLabel", "bindValue", "appendTo"] }, { kind: "component", type: FormSearchableSelectComponent, selector: "up-searchable-select", inputs: ["queryFunc", "clearable", "label", "initialItems", "required", "addTag", "disabled", "multiple", "bindLabel", "bindValue", "appendTo"], outputs: ["onChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2682
2695
|
}
|