@energinet/watt 4.0.19 → 4.0.20
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/dropdown/index.d.ts +1 -1
- package/dropdown/watt-dropdown-option.d.ts +6 -0
- package/dropdown/watt-dropdown.component.d.ts +16 -78
- package/esm2022/dropdown/index.js +1 -1
- package/esm2022/dropdown/watt-dropdown-option.js +1 -1
- package/esm2022/dropdown/watt-dropdown.component.js +88 -107
- package/package.json +2 -2
package/dropdown/index.d.ts
CHANGED
|
@@ -15,5 +15,5 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
export { WattDropdownComponent } from './watt-dropdown.component';
|
|
18
|
-
export { type WattDropdownOption, type WattDropdownOptions } from './watt-dropdown-option';
|
|
18
|
+
export { type WattDropdownOption, type WattDropdownOptions, type WattDropdownGroupedOptions, type WattDropdownOptionGroup, } from './watt-dropdown-option';
|
|
19
19
|
export { type WattDropdownValue } from './watt-dropdown-value';
|
|
@@ -19,4 +19,10 @@ export interface WattDropdownOption {
|
|
|
19
19
|
displayValue: string;
|
|
20
20
|
disabled?: boolean;
|
|
21
21
|
}
|
|
22
|
+
export interface WattDropdownOptionGroup {
|
|
23
|
+
label: string;
|
|
24
|
+
options: WattDropdownOption[];
|
|
25
|
+
disabled?: boolean;
|
|
26
|
+
}
|
|
22
27
|
export type WattDropdownOptions = WattDropdownOption[];
|
|
28
|
+
export type WattDropdownGroupedOptions = WattDropdownOptionGroup[];
|
|
@@ -19,73 +19,36 @@ import { FormControl, UntypedFormControl, ControlValueAccessor } from '@angular/
|
|
|
19
19
|
import { ReplaySubject } from 'rxjs';
|
|
20
20
|
import { MatSelect } from '@angular/material/select';
|
|
21
21
|
import type { WattDropdownValue } from './watt-dropdown-value';
|
|
22
|
-
import type { WattDropdownOptions } from './watt-dropdown-option';
|
|
22
|
+
import type { WattDropdownOptions, WattDropdownGroupedOptions } from './watt-dropdown-option';
|
|
23
23
|
import * as i0 from "@angular/core";
|
|
24
24
|
export declare class WattDropdownComponent implements ControlValueAccessor, OnInit {
|
|
25
25
|
private parentControlDirective;
|
|
26
|
-
/**
|
|
27
|
-
* @ignore
|
|
28
|
-
*/
|
|
29
26
|
private destroyRef;
|
|
30
|
-
/**
|
|
31
|
-
* @ignore
|
|
32
|
-
*/
|
|
33
|
-
parentControl: FormControl | null;
|
|
34
|
-
/**
|
|
35
|
-
* @ignore
|
|
36
|
-
*/
|
|
37
27
|
private validateParent?;
|
|
38
|
-
/**
|
|
39
|
-
* @ignore
|
|
40
|
-
*/
|
|
41
28
|
private validateParentAsync?;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
29
|
+
private _options;
|
|
30
|
+
private _groupedOptions;
|
|
31
|
+
parentControl: FormControl | null;
|
|
45
32
|
matSelectControl: FormControl<string | string[] | null | undefined>;
|
|
46
33
|
/**
|
|
47
34
|
* Control for the MatSelect filter keyword
|
|
48
|
-
*
|
|
49
|
-
* @ignore
|
|
50
35
|
*/
|
|
51
36
|
filterControl: UntypedFormControl;
|
|
52
37
|
/**
|
|
53
38
|
* List of options filtered by search keyword
|
|
54
|
-
*
|
|
55
|
-
* @ignore
|
|
56
39
|
*/
|
|
57
40
|
filteredOptions$: ReplaySubject<WattDropdownOptions>;
|
|
58
41
|
/**
|
|
59
|
-
*
|
|
42
|
+
* List of grouped options filtered by search keyword
|
|
60
43
|
*/
|
|
44
|
+
filteredGroupedOptions$: ReplaySubject<WattDropdownGroupedOptions>;
|
|
45
|
+
mergedFilteredOptions$: import("rxjs").Observable<string[]>;
|
|
61
46
|
emDash: string;
|
|
62
|
-
/**
|
|
63
|
-
* @ignore
|
|
64
|
-
*/
|
|
65
47
|
isToggleAllChecked: boolean;
|
|
66
|
-
/**
|
|
67
|
-
* @ignore
|
|
68
|
-
*/
|
|
69
48
|
isToggleAllIndeterminate: boolean;
|
|
70
|
-
/**
|
|
71
|
-
* @ignore
|
|
72
|
-
*/
|
|
73
|
-
_options: WattDropdownOptions;
|
|
74
|
-
/**
|
|
75
|
-
* @ignore
|
|
76
|
-
*/
|
|
77
49
|
isDisabled: import("@angular/core").WritableSignal<boolean>;
|
|
78
|
-
/**
|
|
79
|
-
* @ignore
|
|
80
|
-
*/
|
|
81
50
|
get showTriggerValue(): boolean;
|
|
82
|
-
/**
|
|
83
|
-
* @ignore
|
|
84
|
-
*/
|
|
85
51
|
get showChipLabel(): boolean;
|
|
86
|
-
/**
|
|
87
|
-
* @ignore
|
|
88
|
-
*/
|
|
89
52
|
matSelect: import("@angular/core").Signal<MatSelect | undefined>;
|
|
90
53
|
hideSearch: import("@angular/core").InputSignal<boolean>;
|
|
91
54
|
panelWidth: import("@angular/core").InputSignal<"auto" | null>;
|
|
@@ -98,8 +61,9 @@ export declare class WattDropdownComponent implements ControlValueAccessor, OnIn
|
|
|
98
61
|
sortDirection: import("@angular/core").InputSignal<"asc" | "desc" | undefined>;
|
|
99
62
|
/**
|
|
100
63
|
* Sets the options for the dropdown.
|
|
64
|
+
* Can be a flat array of options or an array containing both options and option groups.
|
|
101
65
|
*/
|
|
102
|
-
options: import("@angular/core").ModelSignal<WattDropdownOptions>;
|
|
66
|
+
options: import("@angular/core").ModelSignal<WattDropdownOptions | WattDropdownGroupedOptions>;
|
|
103
67
|
/**
|
|
104
68
|
* Sets support for selecting multiple dropdown options.
|
|
105
69
|
*/
|
|
@@ -122,43 +86,20 @@ export declare class WattDropdownComponent implements ControlValueAccessor, OnIn
|
|
|
122
86
|
* Note: The label is visible in "multiple" mode only.
|
|
123
87
|
*/
|
|
124
88
|
noOptionsFoundLabel: import("@angular/core").InputSignal<string>;
|
|
89
|
+
hasGroups: import("@angular/core").Signal<boolean>;
|
|
125
90
|
constructor();
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
91
|
+
private handleFlat;
|
|
92
|
+
private handleGroup;
|
|
93
|
+
private processGroupedOptions;
|
|
129
94
|
ngOnInit(): void;
|
|
130
|
-
/**
|
|
131
|
-
* @ignore
|
|
132
|
-
*/
|
|
133
95
|
writeValue(value: WattDropdownValue): void;
|
|
134
|
-
/**
|
|
135
|
-
* @ignore
|
|
136
|
-
*/
|
|
137
96
|
registerOnChange(onChangeFn: (value: WattDropdownValue) => void): void;
|
|
138
|
-
/**
|
|
139
|
-
* @ignore
|
|
140
|
-
*/
|
|
141
97
|
registerOnTouched(onTouchFn: () => void): void;
|
|
142
|
-
/**
|
|
143
|
-
* @ignore
|
|
144
|
-
*/
|
|
145
98
|
setDisabledState(shouldDisable: boolean): void;
|
|
146
|
-
/**
|
|
147
|
-
* @ignore
|
|
148
|
-
*/
|
|
149
99
|
onToggleAll(toggleAllState: boolean): void;
|
|
150
100
|
sortOptions(options: WattDropdownOptions): WattDropdownOptions;
|
|
151
|
-
/**
|
|
152
|
-
* @ignore
|
|
153
|
-
*/
|
|
154
101
|
private listenForFilterFieldValueChanges;
|
|
155
|
-
/**
|
|
156
|
-
* @ignore
|
|
157
|
-
*/
|
|
158
102
|
private changeParentValue;
|
|
159
|
-
/**
|
|
160
|
-
* @ignore
|
|
161
|
-
*/
|
|
162
103
|
private markParentControlAsTouched;
|
|
163
104
|
/**
|
|
164
105
|
* @ignore
|
|
@@ -182,13 +123,10 @@ export declare class WattDropdownComponent implements ControlValueAccessor, OnIn
|
|
|
182
123
|
* Reflect parent validation errors in our form control.
|
|
183
124
|
*/
|
|
184
125
|
private bindControlToParent;
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
*/
|
|
126
|
+
private handleStatusChange;
|
|
127
|
+
private handleValueChange;
|
|
188
128
|
private filterOptions;
|
|
189
|
-
|
|
190
|
-
* @ignore
|
|
191
|
-
*/
|
|
129
|
+
private filterGroups;
|
|
192
130
|
private determineToggleAllCheckboxState;
|
|
193
131
|
static ɵfac: i0.ɵɵFactoryDeclaration<WattDropdownComponent, never>;
|
|
194
132
|
static ɵcmp: i0.ɵɵComponentDeclaration<WattDropdownComponent, "watt-dropdown", never, { "hideSearch": { "alias": "hideSearch"; "required": false; "isSignal": true; }; "panelWidth": { "alias": "panelWidth"; "required": false; "isSignal": true; }; "getCustomTrigger": { "alias": "getCustomTrigger"; "required": false; "isSignal": true; }; "chipMode": { "alias": "chipMode"; "required": false; "isSignal": true; }; "disableSelectedMode": { "alias": "disableSelectedMode"; "required": false; "isSignal": true; }; "sortDirection": { "alias": "sortDirection"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "showResetOption": { "alias": "showResetOption"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "noOptionsFoundLabel": { "alias": "noOptionsFoundLabel"; "required": false; "isSignal": true; }; }, { "options": "optionsChange"; }, never, ["*", "watt-field-hint", "watt-field-error"], true, never>;
|
|
@@ -17,4 +17,4 @@
|
|
|
17
17
|
*/
|
|
18
18
|
//#endregion
|
|
19
19
|
export { WattDropdownComponent } from './watt-dropdown.component';
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS9kcm9wZG93bi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUFDakI7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsWUFBWTtBQUNaLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIExpY2Vuc2Vcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEVuZXJnaW5ldCBEYXRhSHViIEEvU1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2UyXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vI2VuZHJlZ2lvblxuZXhwb3J0IHsgV2F0dERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi93YXR0LWRyb3Bkb3duLmNvbXBvbmVudCc7XG5leHBvcnQge1xuICB0eXBlIFdhdHREcm9wZG93bk9wdGlvbixcbiAgdHlwZSBXYXR0RHJvcGRvd25PcHRpb25zLFxuICB0eXBlIFdhdHREcm9wZG93bkdyb3VwZWRPcHRpb25zLFxuICB0eXBlIFdhdHREcm9wZG93bk9wdGlvbkdyb3VwLFxufSBmcm9tICcuL3dhdHQtZHJvcGRvd24tb3B0aW9uJztcbmV4cG9ydCB7IHR5cGUgV2F0dERyb3Bkb3duVmFsdWUgfSBmcm9tICcuL3dhdHQtZHJvcGRvd24tdmFsdWUnO1xuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC1kcm9wZG93bi1vcHRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS9kcm9wZG93bi93YXR0LWRyb3Bkb3duLW9wdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIExpY2Vuc2Vcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEVuZXJnaW5ldCBEYXRhSHViIEEvU1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2UyXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vI2VuZHJlZ2lvblxuZXhwb3J0IGludGVyZmFjZSBXYXR0RHJvcGRvd25PcHRpb24ge1xuICB2YWx1ZTogc3RyaW5nO1xuICBkaXNwbGF5VmFsdWU6IHN0cmluZztcbiAgZGlzYWJsZWQ/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC1kcm9wZG93bi1vcHRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS9kcm9wZG93bi93YXR0LWRyb3Bkb3duLW9wdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIExpY2Vuc2Vcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEVuZXJnaW5ldCBEYXRhSHViIEEvU1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2UyXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vI2VuZHJlZ2lvblxuZXhwb3J0IGludGVyZmFjZSBXYXR0RHJvcGRvd25PcHRpb24ge1xuICB2YWx1ZTogc3RyaW5nO1xuICBkaXNwbGF5VmFsdWU6IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdhdHREcm9wZG93bk9wdGlvbkdyb3VwIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgb3B0aW9uczogV2F0dERyb3Bkb3duT3B0aW9uW107XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgV2F0dERyb3Bkb3duT3B0aW9ucyA9IFdhdHREcm9wZG93bk9wdGlvbltdO1xuZXhwb3J0IHR5cGUgV2F0dERyb3Bkb3duR3JvdXBlZE9wdGlvbnMgPSBXYXR0RHJvcGRvd25PcHRpb25Hcm91cFtdO1xuIl19
|
|
@@ -16,14 +16,15 @@
|
|
|
16
16
|
* limitations under the License.
|
|
17
17
|
*/
|
|
18
18
|
//#endregion
|
|
19
|
-
import { input, signal, effect, inject, Component, viewChild, DestroyRef, ViewEncapsulation,
|
|
19
|
+
import { input, model, signal, effect, inject, Component, viewChild, DestroyRef, ViewEncapsulation, computed, } from '@angular/core';
|
|
20
20
|
import { NgControl, FormControl, UntypedFormControl, ReactiveFormsModule, } from '@angular/forms';
|
|
21
21
|
import { NgClass } from '@angular/common';
|
|
22
22
|
import { RxPush } from '@rx-angular/template/push';
|
|
23
23
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
24
|
-
import { of, ReplaySubject, map, take,
|
|
24
|
+
import { of, ReplaySubject, map, take, mergeWith } from 'rxjs';
|
|
25
25
|
import { NgxMatSelectSearchModule } from 'ngx-mat-select-search';
|
|
26
26
|
import { MatSelectModule } from '@angular/material/select';
|
|
27
|
+
import { MatOptionModule } from '@angular/material/core';
|
|
27
28
|
import { WattIconComponent } from '@energinet/watt/icon';
|
|
28
29
|
import { WattFieldComponent } from '@energinet/watt/field';
|
|
29
30
|
import { WattMenuChipComponent } from '@energinet/watt/chip';
|
|
@@ -33,61 +34,37 @@ import * as i2 from "@angular/forms";
|
|
|
33
34
|
import * as i3 from "ngx-mat-select-search";
|
|
34
35
|
export class WattDropdownComponent {
|
|
35
36
|
parentControlDirective = inject(NgControl, { host: true });
|
|
36
|
-
/**
|
|
37
|
-
* @ignore
|
|
38
|
-
*/
|
|
39
37
|
destroyRef = inject(DestroyRef);
|
|
40
|
-
/**
|
|
41
|
-
* @ignore
|
|
42
|
-
*/
|
|
43
|
-
parentControl = null;
|
|
44
|
-
/**
|
|
45
|
-
* @ignore
|
|
46
|
-
*/
|
|
47
38
|
validateParent;
|
|
48
|
-
/**
|
|
49
|
-
* @ignore
|
|
50
|
-
*/
|
|
51
39
|
validateParentAsync;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
40
|
+
_options = [];
|
|
41
|
+
_groupedOptions = [];
|
|
42
|
+
parentControl = null;
|
|
55
43
|
matSelectControl = new FormControl(null);
|
|
56
44
|
/**
|
|
57
45
|
* Control for the MatSelect filter keyword
|
|
58
|
-
*
|
|
59
|
-
* @ignore
|
|
60
46
|
*/
|
|
61
47
|
filterControl = new UntypedFormControl();
|
|
62
48
|
/**
|
|
63
49
|
* List of options filtered by search keyword
|
|
64
|
-
*
|
|
65
|
-
* @ignore
|
|
66
50
|
*/
|
|
67
51
|
filteredOptions$ = new ReplaySubject(1);
|
|
68
52
|
/**
|
|
69
|
-
*
|
|
53
|
+
* List of grouped options filtered by search keyword
|
|
70
54
|
*/
|
|
55
|
+
filteredGroupedOptions$ = new ReplaySubject(1);
|
|
56
|
+
mergedFilteredOptions$ = this.filteredOptions$.pipe(mergeWith(this.filteredGroupedOptions$), take(1), map((options) => {
|
|
57
|
+
if (this.hasGroups()) {
|
|
58
|
+
return options
|
|
59
|
+
.flatMap((group) => ('options' in group ? group.options : []))
|
|
60
|
+
.map((option) => option.value);
|
|
61
|
+
}
|
|
62
|
+
return options.map((option) => option.value);
|
|
63
|
+
}));
|
|
71
64
|
emDash = '—';
|
|
72
|
-
/**
|
|
73
|
-
* @ignore
|
|
74
|
-
*/
|
|
75
65
|
isToggleAllChecked = false;
|
|
76
|
-
/**
|
|
77
|
-
* @ignore
|
|
78
|
-
*/
|
|
79
66
|
isToggleAllIndeterminate = false;
|
|
80
|
-
/**
|
|
81
|
-
* @ignore
|
|
82
|
-
*/
|
|
83
|
-
_options = [];
|
|
84
|
-
/**
|
|
85
|
-
* @ignore
|
|
86
|
-
*/
|
|
87
67
|
isDisabled = signal(false, ...(ngDevMode ? [{ debugName: "isDisabled" }] : []));
|
|
88
|
-
/**
|
|
89
|
-
* @ignore
|
|
90
|
-
*/
|
|
91
68
|
get showTriggerValue() {
|
|
92
69
|
const multiple = this.multiple();
|
|
93
70
|
return (multiple &&
|
|
@@ -97,17 +74,11 @@ export class WattDropdownComponent {
|
|
|
97
74
|
? true
|
|
98
75
|
: false;
|
|
99
76
|
}
|
|
100
|
-
/**
|
|
101
|
-
* @ignore
|
|
102
|
-
*/
|
|
103
77
|
get showChipLabel() {
|
|
104
78
|
return this.multiple() && this.matSelectControl.value && this.matSelectControl.value.length > 1
|
|
105
79
|
? true
|
|
106
80
|
: false;
|
|
107
81
|
}
|
|
108
|
-
/**
|
|
109
|
-
* @ignore
|
|
110
|
-
*/
|
|
111
82
|
matSelect = viewChild('matSelect', ...(ngDevMode ? [{ debugName: "matSelect" }] : []));
|
|
112
83
|
hideSearch = input(false, ...(ngDevMode ? [{ debugName: "hideSearch" }] : []));
|
|
113
84
|
panelWidth = input(null, ...(ngDevMode ? [{ debugName: "panelWidth" }] : []));
|
|
@@ -120,6 +91,7 @@ export class WattDropdownComponent {
|
|
|
120
91
|
sortDirection = input(...(ngDevMode ? [undefined, { debugName: "sortDirection" }] : []));
|
|
121
92
|
/**
|
|
122
93
|
* Sets the options for the dropdown.
|
|
94
|
+
* Can be a flat array of options or an array containing both options and option groups.
|
|
123
95
|
*/
|
|
124
96
|
options = model([], ...(ngDevMode ? [{ debugName: "options" }] : []));
|
|
125
97
|
/**
|
|
@@ -144,50 +116,59 @@ export class WattDropdownComponent {
|
|
|
144
116
|
* Note: The label is visible in "multiple" mode only.
|
|
145
117
|
*/
|
|
146
118
|
noOptionsFoundLabel = input('', ...(ngDevMode ? [{ debugName: "noOptionsFoundLabel" }] : []));
|
|
119
|
+
hasGroups = computed(() => {
|
|
120
|
+
const options = this.options();
|
|
121
|
+
return options.some((option) => 'options' in option && Array.isArray(option.options));
|
|
122
|
+
}, ...(ngDevMode ? [{ debugName: "hasGroups" }] : []));
|
|
147
123
|
constructor() {
|
|
148
124
|
effect(() => {
|
|
149
125
|
const options = this.options();
|
|
150
126
|
if (Array.isArray(options)) {
|
|
151
|
-
|
|
152
|
-
if (this.
|
|
153
|
-
|
|
127
|
+
const optionsCopy = [...options];
|
|
128
|
+
if (this.hasGroups()) {
|
|
129
|
+
this.handleGroup(optionsCopy);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
this.handleFlat(optionsCopy);
|
|
154
133
|
}
|
|
155
|
-
this._options = optionsCopy;
|
|
156
|
-
this.filteredOptions$.next(optionsCopy);
|
|
157
134
|
}
|
|
158
135
|
});
|
|
159
136
|
this.parentControlDirective.valueAccessor = this;
|
|
160
137
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
138
|
+
handleFlat(optionsCopy) {
|
|
139
|
+
if (this.sortDirection()) {
|
|
140
|
+
optionsCopy = this.sortOptions(optionsCopy);
|
|
141
|
+
}
|
|
142
|
+
this._options = optionsCopy;
|
|
143
|
+
this.filteredOptions$.next(this._options);
|
|
144
|
+
}
|
|
145
|
+
handleGroup(optionsCopy) {
|
|
146
|
+
this._groupedOptions = this.processGroupedOptions(optionsCopy);
|
|
147
|
+
this.filteredGroupedOptions$.next(this._groupedOptions);
|
|
148
|
+
}
|
|
149
|
+
processGroupedOptions(options) {
|
|
150
|
+
return options.map((group) => {
|
|
151
|
+
if (this.sortDirection()) {
|
|
152
|
+
group.options = this.sortOptions(group.options);
|
|
153
|
+
}
|
|
154
|
+
return group;
|
|
155
|
+
});
|
|
156
|
+
}
|
|
164
157
|
ngOnInit() {
|
|
165
158
|
this.listenForFilterFieldValueChanges();
|
|
166
159
|
this.initializePropertiesFromParent();
|
|
167
160
|
this.bindParentValidatorsToControl();
|
|
168
161
|
this.bindControlToParent();
|
|
169
162
|
}
|
|
170
|
-
/**
|
|
171
|
-
* @ignore
|
|
172
|
-
*/
|
|
173
163
|
writeValue(value) {
|
|
174
164
|
this.matSelectControl.setValue(value);
|
|
175
165
|
}
|
|
176
|
-
/**
|
|
177
|
-
* @ignore
|
|
178
|
-
*/
|
|
179
166
|
registerOnChange(onChangeFn) {
|
|
180
167
|
this.changeParentValue = onChangeFn;
|
|
181
168
|
}
|
|
182
|
-
/**
|
|
183
|
-
* @ignore
|
|
184
|
-
*/
|
|
185
169
|
registerOnTouched(onTouchFn) {
|
|
186
170
|
this.markParentControlAsTouched = onTouchFn;
|
|
187
171
|
}
|
|
188
|
-
/**
|
|
189
|
-
* @ignore
|
|
190
|
-
*/
|
|
191
172
|
setDisabledState(shouldDisable) {
|
|
192
173
|
this.isDisabled.set(shouldDisable);
|
|
193
174
|
if (shouldDisable) {
|
|
@@ -197,13 +178,8 @@ export class WattDropdownComponent {
|
|
|
197
178
|
this.matSelectControl.enable();
|
|
198
179
|
}
|
|
199
180
|
}
|
|
200
|
-
/**
|
|
201
|
-
* @ignore
|
|
202
|
-
*/
|
|
203
181
|
onToggleAll(toggleAllState) {
|
|
204
|
-
this.filteredOptions
|
|
205
|
-
.pipe(take(1), map((options) => options.map((option) => option.value)))
|
|
206
|
-
.subscribe((filteredOptions) => {
|
|
182
|
+
this.mergedFilteredOptions$.subscribe((filteredOptions) => {
|
|
207
183
|
const optionsToSelect = toggleAllState ? filteredOptions : [];
|
|
208
184
|
this.matSelectControl.patchValue(optionsToSelect);
|
|
209
185
|
});
|
|
@@ -215,9 +191,6 @@ export class WattDropdownComponent {
|
|
|
215
191
|
: b.displayValue.localeCompare(a.displayValue);
|
|
216
192
|
});
|
|
217
193
|
}
|
|
218
|
-
/**
|
|
219
|
-
* @ignore
|
|
220
|
-
*/
|
|
221
194
|
listenForFilterFieldValueChanges() {
|
|
222
195
|
this.filterControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
|
|
223
196
|
this.filterOptions();
|
|
@@ -226,16 +199,10 @@ export class WattDropdownComponent {
|
|
|
226
199
|
}
|
|
227
200
|
});
|
|
228
201
|
}
|
|
229
|
-
/**
|
|
230
|
-
* @ignore
|
|
231
|
-
*/
|
|
232
202
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
233
203
|
changeParentValue = (value) => {
|
|
234
204
|
// Intentionally left empty
|
|
235
205
|
};
|
|
236
|
-
/**
|
|
237
|
-
* @ignore
|
|
238
|
-
*/
|
|
239
206
|
markParentControlAsTouched = () => {
|
|
240
207
|
// Intentionally left empty
|
|
241
208
|
};
|
|
@@ -284,6 +251,19 @@ export class WattDropdownComponent {
|
|
|
284
251
|
* Reflect parent validation errors in our form control.
|
|
285
252
|
*/
|
|
286
253
|
bindControlToParent() {
|
|
254
|
+
this.handleValueChange();
|
|
255
|
+
this.handleStatusChange();
|
|
256
|
+
}
|
|
257
|
+
handleStatusChange() {
|
|
258
|
+
this.parentControl?.statusChanges
|
|
259
|
+
.pipe(map(() => ({
|
|
260
|
+
...this.parentControl?.errors,
|
|
261
|
+
})), map((errors) => (Object.keys(errors).length > 0 ? errors : null)), takeUntilDestroyed(this.destroyRef))
|
|
262
|
+
.subscribe((errors) => {
|
|
263
|
+
this.matSelectControl.setErrors(errors);
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
handleValueChange() {
|
|
287
267
|
this.matSelectControl.valueChanges
|
|
288
268
|
.pipe(map((value) => (value === undefined ? null : value)), map((value) => {
|
|
289
269
|
if (Array.isArray(value) && value.length === 0) {
|
|
@@ -298,39 +278,39 @@ export class WattDropdownComponent {
|
|
|
298
278
|
this.markParentControlAsTouched();
|
|
299
279
|
this.changeParentValue(value);
|
|
300
280
|
});
|
|
301
|
-
this.parentControl?.statusChanges
|
|
302
|
-
.pipe(map(() => ({
|
|
303
|
-
...this.parentControl?.errors,
|
|
304
|
-
})), map((errors) => (Object.keys(errors).length > 0 ? errors : null)), takeUntilDestroyed(this.destroyRef))
|
|
305
|
-
.subscribe((errors) => {
|
|
306
|
-
this.matSelectControl.setErrors(errors);
|
|
307
|
-
});
|
|
308
281
|
}
|
|
309
|
-
/**
|
|
310
|
-
* @ignore
|
|
311
|
-
*/
|
|
312
282
|
filterOptions() {
|
|
313
283
|
if (!this._options) {
|
|
314
284
|
return;
|
|
315
285
|
}
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
286
|
+
const search = this.filterControl.value.trim().toLowerCase();
|
|
287
|
+
if (!search) {
|
|
288
|
+
this.filteredOptions$.next(this._options.slice());
|
|
289
|
+
if (this.hasGroups()) {
|
|
290
|
+
this.filteredGroupedOptions$.next(this._groupedOptions.slice());
|
|
291
|
+
}
|
|
292
|
+
return;
|
|
320
293
|
}
|
|
321
|
-
|
|
322
|
-
|
|
294
|
+
const filteredFlatOptions = this._options.filter((option) => option.displayValue.toLowerCase().indexOf(search) > -1);
|
|
295
|
+
this.filteredOptions$.next(filteredFlatOptions);
|
|
296
|
+
if (this.hasGroups()) {
|
|
297
|
+
this.filterGroups(search);
|
|
323
298
|
}
|
|
324
|
-
// filter the options
|
|
325
|
-
this.filteredOptions$.next(this._options.filter((option) => option.displayValue.toLowerCase().indexOf(search) > -1));
|
|
326
299
|
}
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
300
|
+
filterGroups(search) {
|
|
301
|
+
const filteredGroups = this._groupedOptions
|
|
302
|
+
.map((item) => {
|
|
303
|
+
if (!('options' in item)) {
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
const filteredGroupOptions = item.options.filter((option) => option.displayValue.toLowerCase().indexOf(search) > -1);
|
|
307
|
+
return filteredGroupOptions.length > 0 ? { ...item, options: filteredGroupOptions } : null;
|
|
308
|
+
})
|
|
309
|
+
.filter(Boolean);
|
|
310
|
+
this.filteredGroupedOptions$.next(filteredGroups);
|
|
311
|
+
}
|
|
330
312
|
determineToggleAllCheckboxState() {
|
|
331
|
-
this.filteredOptions
|
|
332
|
-
.pipe(take(1), filter((options) => options != null && options !== undefined), map((options) => options.map((option) => option.value)))
|
|
333
|
-
.subscribe((filteredOptions) => {
|
|
313
|
+
this.mergedFilteredOptions$.subscribe((filteredOptions) => {
|
|
334
314
|
const selectedOptions = this.matSelectControl.value;
|
|
335
315
|
if (Array.isArray(selectedOptions)) {
|
|
336
316
|
const selectedFilteredOptions = filteredOptions.filter((option) => selectedOptions.includes(option));
|
|
@@ -344,7 +324,7 @@ export class WattDropdownComponent {
|
|
|
344
324
|
});
|
|
345
325
|
}
|
|
346
326
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: WattDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
347
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: WattDropdownComponent, isStandalone: true, selector: "watt-dropdown", inputs: { hideSearch: { classPropertyName: "hideSearch", publicName: "hideSearch", isSignal: true, isRequired: false, transformFunction: null }, panelWidth: { classPropertyName: "panelWidth", publicName: "panelWidth", isSignal: true, isRequired: false, transformFunction: null }, getCustomTrigger: { classPropertyName: "getCustomTrigger", publicName: "getCustomTrigger", isSignal: true, isRequired: false, transformFunction: null }, chipMode: { classPropertyName: "chipMode", publicName: "chipMode", isSignal: true, isRequired: false, transformFunction: null }, disableSelectedMode: { classPropertyName: "disableSelectedMode", publicName: "disableSelectedMode", isSignal: true, isRequired: false, transformFunction: null }, sortDirection: { classPropertyName: "sortDirection", publicName: "sortDirection", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, showResetOption: { classPropertyName: "showResetOption", publicName: "showResetOption", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, noOptionsFoundLabel: { classPropertyName: "noOptionsFoundLabel", publicName: "noOptionsFoundLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { options: "optionsChange" }, host: { properties: { "attr.watt-field-disabled": "isDisabled()", "class.watt-chip-mode": "chipMode()" } }, viewQueries: [{ propertyName: "matSelect", first: true, predicate: ["matSelect"], descendants: true, isSignal: true }], ngImport: i0, template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<watt-field\n [control]=\"parentControl\"\n [chipMode]=\"chipMode()\"\n [label]=\"label()\"\n (click)=\"matSelect.open()\"\n>\n @if (chipMode()) {\n <watt-menu-chip\n [opened]=\"matSelect.panelOpen\"\n (toggle)=\"matSelect.open()\"\n [selected]=\"!!matSelect?.triggerValue && !disableSelectedMode()\"\n [disabled]=\"matSelectControl.disabled\"\n >\n {{ placeholder() }}\n @if (showTriggerValue) {\n <span>\n @if (placeholder()) {\n :\n }\n {{ getCustomTrigger()?.(matSelect.value) ?? matSelect?.triggerValue }}\n </span>\n }\n @if (showChipLabel) {\n <span class=\"watt-chip-label\">{{ matSelectControl.value?.length }}</span>\n }\n </watt-menu-chip>\n }\n\n <mat-select\n [attr.aria-label]=\"label()\"\n [formControl]=\"matSelectControl\"\n [placeholder]=\"placeholder()\"\n #matSelect\n [panelWidth]=\"panelWidth()\"\n [multiple]=\"multiple()\"\n [ngClass]=\"{ chip: chipMode() }\"\n [panelClass]=\"{\n 'watt-dropdown-panel': true,\n 'watt-dropdown-panel-chip-mode': chipMode(),\n }\"\n >\n <!-- We use this instead of ngIf, since it will trigger a NG0100: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. -->\n <mat-option [style.display]=\"!hideSearch() ? 'block' : 'none'\">\n <ngx-mat-select-search\n [formControl]=\"filterControl\"\n [placeholderLabel]=\"placeholder()\"\n closeIcon=\"close\"\n [showToggleAllCheckbox]=\"multiple()\"\n (toggleAll)=\"onToggleAll($event)\"\n [toggleAllCheckboxChecked]=\"isToggleAllChecked\"\n [toggleAllCheckboxIndeterminate]=\"isToggleAllIndeterminate\"\n [noEntriesFoundLabel]=\"noOptionsFoundLabel()\"\n >\n <watt-icon ngxMatSelectSearchClear name=\"close\" size=\"s\" />\n </ngx-mat-select-search>\n </mat-option>\n\n @if (!multiple() && showResetOption()) {\n <mat-option>{{ emDash }}</mat-option>\n }\n\n @for (option of filteredOptions$ | push; track option) {\n <mat-option [value]=\"option.value\" [disabled]=\"option.disabled\">\n {{ option.displayValue }}\n </mat-option>\n }\n </mat-select>\n <ng-content />\n <ng-content ngProjectAs=\"watt-field-hint\" select=\"watt-field-hint\" />\n <ng-content ngProjectAs=\"watt-field-error\" select=\"watt-field-error\" />\n</watt-field>\n", styles: ["watt-dropdown:not(.watt-chip-mode){width:100%}watt-dropdown{--watt-input-color: var(--watt-typography-text-color);--watt-input-placeholder-color: var(--watt-on-light-high-emphasis);display:block;width:auto}watt-dropdown watt-field label .watt-field-wrapper{padding:0;position:relative}watt-dropdown.watt-chip-mode.ng-dirty.ng-invalid .watt-field-wrapper watt-chip label{border:1px solid var(--watt-color-state-danger)}watt-dropdown.watt-chip-mode[disabled=true] watt-field label .watt-field-wrapper{background-color:transparent}watt-dropdown .mat-input-element{font-size:.875rem;line-height:1.25rem;font-weight:400;text-transform:none;letter-spacing:0;color:var(--watt-input-color);caret-color:var(--watt-color-neutral-grey-900)!important;padding:0 12px}watt-dropdown .mat-mdc-select-arrow{color:var(--watt-dropdown-arrow-color, rgba(0, 0, 0, .54));border:none;width:auto;height:auto}watt-dropdown .mat-mdc-select-arrow:before{width:.6em;height:.6em;bottom:.2em;position:relative;display:inline-block;border-style:solid;border-width:0 0 .15em .15em;transform:rotate(315deg);border-color:var(--watt-color-primary);content:\"\"}watt-dropdown .mat-mdc-select-arrow svg{display:none}watt-dropdown .mat-mdc-select-trigger{font-size:.875rem;line-height:1.25rem;font-weight:400;text-transform:none;letter-spacing:0;padding:0 var(--watt-space-m)}watt-dropdown .mat-mdc-select-value{color:var(--watt-color-neutral-black);padding-right:var(--watt-space-m)}watt-dropdown .mat-mdc-select.mat-mdc-select-invalid.ng-pristine .mat-mdc-select-arrow{color:currentColor}watt-dropdown .watt-chip-label{float:right;margin-left:var(--watt-space-s);background:var(--watt-color-neutral-white)}watt-dropdown .watt-field--chip .mat-mdc-select{visibility:hidden;position:absolute;width:100%}watt-dropdown .mat-mdc-select-placeholder{color:var(--watt-input-placeholder-color)}watt-dropdown watt-field label .watt-field-wrapper{background-color:transparent}.watt-dropdown-panel{--watt-input-color: var(--watt-typography-text-color);padding:0}.watt-dropdown-panel mat-option:nth-of-type(2){border-top:1px solid var(--watt-color-neutral-grey-300)}.watt-dropdown-panel .mat-select-search-inner-row .mat-select-search-input,.watt-dropdown-panel mat-option.contains-mat-select-search{height:48px}.watt-dropdown-panel:not(.watt-dropdown-panel-chip-mode){min-width:calc(100% + 2px)!important;margin-top:-36px;margin-left:-1px;min-height:48px}.watt-dropdown-panel .mat-mdc-checkbox.mat-select-search-toggle-all-checkbox{padding:0;margin:0 var(--watt-space-m)}.watt-dropdown-panel .mat-datepicker-content .mat-mdc-icon-button{--mat-mdc-button-persistent-ripple-color: transparent;--mat-mdc-button-ripple-color: transparent}.watt-dropdown-panel.watt-dropdown-panel-chip-mode{margin-top:4px}.watt-dropdown-panel.mat-mdc-select-search-panel{transform:scaleY(1)!important}.watt-dropdown-panel .mat-mdc-option.mdc-list-item.contains-mat-select-search.mat-mdc-option-multiple{background-color:transparent}.watt-dropdown-panel ngx-mat-select-search .mat-select-search-inner-multiple .mat-select-search-inner-row{margin-left:5px}.watt-dropdown-panel ngx-mat-select-search .mat-mdc-checkbox.mat-select-search-toggle-all-checkbox{margin:0}.watt-dropdown-panel .mdc-list-item .mat-select-search-input,.watt-dropdown-panel .mat-mdc-option.mdc-list-item,.watt-dropdown-panel .mat-select-search-no-entries-found{font-size:.875rem;line-height:1.25rem;font-weight:400;text-transform:none;letter-spacing:0;color:var(--watt-input-color)}.watt-dropdown-panel .mat-mdc-option.mdc-list-item .mat-select-search-no-entries-found{padding:var(--watt-space-s)}.watt-dropdown-panel .mat-checkbox-frame,.watt-dropdown-panel .mat-mdc-checkbox{border-color:var(--watt-color-primary)}.watt-dropdown-panel :not(.mat-mdc-option-multiple) .mat-pseudo-checkbox{display:none}.watt-dropdown-panel .mat-pseudo-checkbox,.watt-dropdown-panel .mat-mdc-checkbox{color:var(--watt-color-primary)}.watt-dropdown-panel .mat-mdc-option{color:var(--watt-color-neutral-black);min-height:42px}.watt-dropdown-panel .mat-mdc-option[aria-disabled=true].contains-mat-select-search{margin-top:0;top:auto}.watt-dropdown-panel .mat-mdc-option.mdc-list-item.mat-mdc-option-active,.watt-dropdown-panel .mat-mdc-option.mdc-list-item.mdc-list-item--selected.mat-mdc-option-active:not(.mat-mdc-option-multiple),.watt-dropdown-panel .mat-mdc-option:hover:not(.mat-mdc-option-disabled,.contains-mat-select-search),.watt-dropdown-panel .mat-mdc-option:focus:not(.mat-mdc-option-disabled){background-color:var(--watt-color-primary-light)}.watt-dropdown-panel .mat-mdc-option .mat-mdc-select-search-no-entries-found{text-align:center;padding:0}.watt-dropdown-panel .mat-mdc-option.mat-mdc-option-disabled{color:var(--watt-color-neutral-grey-400);cursor:not-allowed}.watt-dropdown-panel .mat-mdc-select-search-input:not(.mat-mdc-select-search-hidden){color:var(--watt-color-neutral-black)}.watt-dropdown-panel .mat-mdc-select-search-clear{background-color:var(--watt-color-neutral-white);color:var(--watt-color-neutral-grey-400)}.watt-dropdown-panel .mat-mdc-select-search-clear mat-icon{line-height:20px!important}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: NgxMatSelectSearchModule }, { kind: "component", type: i3.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti", "recreateValuesArray"], outputs: ["toggleAll"] }, { kind: "directive", type: i3.MatSelectSearchClearDirective, selector: "[ngxMatSelectSearchClear]" }, { kind: "component", type: WattIconComponent, selector: "watt-icon", inputs: ["name", "label", "size", "state"] }, { kind: "component", type: WattFieldComponent, selector: "watt-field", inputs: ["control", "label", "id", "chipMode", "tooltip", "placeholder", "anchorName"] }, { kind: "component", type: WattMenuChipComponent, selector: "watt-menu-chip", inputs: ["opened", "disabled", "name", "value", "selected", "hasPopup"], outputs: ["toggle"] }, { kind: "pipe", type: RxPush, name: "push" }], encapsulation: i0.ViewEncapsulation.None });
|
|
327
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: WattDropdownComponent, isStandalone: true, selector: "watt-dropdown", inputs: { hideSearch: { classPropertyName: "hideSearch", publicName: "hideSearch", isSignal: true, isRequired: false, transformFunction: null }, panelWidth: { classPropertyName: "panelWidth", publicName: "panelWidth", isSignal: true, isRequired: false, transformFunction: null }, getCustomTrigger: { classPropertyName: "getCustomTrigger", publicName: "getCustomTrigger", isSignal: true, isRequired: false, transformFunction: null }, chipMode: { classPropertyName: "chipMode", publicName: "chipMode", isSignal: true, isRequired: false, transformFunction: null }, disableSelectedMode: { classPropertyName: "disableSelectedMode", publicName: "disableSelectedMode", isSignal: true, isRequired: false, transformFunction: null }, sortDirection: { classPropertyName: "sortDirection", publicName: "sortDirection", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, showResetOption: { classPropertyName: "showResetOption", publicName: "showResetOption", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, noOptionsFoundLabel: { classPropertyName: "noOptionsFoundLabel", publicName: "noOptionsFoundLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { options: "optionsChange" }, host: { properties: { "attr.watt-field-disabled": "isDisabled()", "class.watt-chip-mode": "chipMode()" } }, viewQueries: [{ propertyName: "matSelect", first: true, predicate: ["matSelect"], descendants: true, isSignal: true }], ngImport: i0, template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<watt-field\n [control]=\"parentControl\"\n [chipMode]=\"chipMode()\"\n [label]=\"label()\"\n (click)=\"matSelect.open()\"\n>\n @if (chipMode()) {\n <watt-menu-chip\n [opened]=\"matSelect.panelOpen\"\n (toggle)=\"matSelect.open()\"\n [selected]=\"!!matSelect?.triggerValue && !disableSelectedMode()\"\n [disabled]=\"matSelectControl.disabled\"\n >\n {{ placeholder() }}\n @if (showTriggerValue) {\n <span>\n @if (placeholder()) {\n :\n }\n {{ getCustomTrigger()?.(matSelect.value) ?? matSelect?.triggerValue }}\n </span>\n }\n @if (showChipLabel) {\n <span class=\"watt-chip-label\">{{ matSelectControl.value?.length }}</span>\n }\n </watt-menu-chip>\n }\n\n <mat-select\n [attr.aria-label]=\"label()\"\n [formControl]=\"matSelectControl\"\n [placeholder]=\"placeholder()\"\n #matSelect\n [panelWidth]=\"panelWidth()\"\n [multiple]=\"multiple()\"\n [ngClass]=\"{ chip: chipMode(), 'mat-mdc-select-multiple': multiple() }\"\n [panelClass]=\"{\n 'watt-dropdown-panel': true,\n 'watt-dropdown-panel-chip-mode': chipMode(),\n 'mat-mdc-select-panel-multiple': multiple(),\n }\"\n >\n <!-- We use this instead of ngIf, since it will trigger a NG0100: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. -->\n <mat-option [style.display]=\"!hideSearch() ? 'block' : 'none'\">\n <ngx-mat-select-search\n [formControl]=\"filterControl\"\n [placeholderLabel]=\"placeholder()\"\n closeIcon=\"close\"\n [showToggleAllCheckbox]=\"multiple()\"\n (toggleAll)=\"onToggleAll($event)\"\n [toggleAllCheckboxChecked]=\"isToggleAllChecked\"\n [toggleAllCheckboxIndeterminate]=\"isToggleAllIndeterminate\"\n [noEntriesFoundLabel]=\"noOptionsFoundLabel()\"\n >\n <watt-icon ngxMatSelectSearchClear name=\"close\" size=\"s\" />\n </ngx-mat-select-search>\n </mat-option>\n\n @if (!multiple() && showResetOption()) {\n <mat-option>{{ emDash }}</mat-option>\n }\n\n @if (hasGroups()) {\n @for (item of filteredGroupedOptions$ | push; track item) {\n @if (\"options\" in item) {\n <mat-optgroup [label]=\"item.label\" [disabled]=\"item.disabled\">\n @for (option of item.options; track option) {\n <mat-option\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n [class.mat-mdc-option-multiple]=\"multiple()\"\n >\n {{ option.displayValue }}\n </mat-option>\n }\n </mat-optgroup>\n }\n }\n } @else {\n @for (option of filteredOptions$ | push; track option) {\n <mat-option\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n [class.mat-mdc-option-multiple]=\"multiple()\"\n >\n {{ option.displayValue }}\n </mat-option>\n }\n }\n </mat-select>\n <ng-content />\n <ng-content ngProjectAs=\"watt-field-hint\" select=\"watt-field-hint\" />\n <ng-content ngProjectAs=\"watt-field-error\" select=\"watt-field-error\" />\n</watt-field>\n", styles: ["watt-dropdown:not(.watt-chip-mode){width:100%}watt-dropdown{--watt-input-color: var(--watt-typography-text-color);--watt-input-placeholder-color: var(--watt-on-light-high-emphasis);display:block;width:auto}watt-dropdown watt-field label .watt-field-wrapper{padding:0;position:relative}watt-dropdown.watt-chip-mode.ng-dirty.ng-invalid .watt-field-wrapper watt-chip label{border:1px solid var(--watt-color-state-danger)}watt-dropdown.watt-chip-mode[disabled=true] watt-field label .watt-field-wrapper{background-color:transparent}watt-dropdown .mat-input-element{font-size:.875rem;line-height:1.25rem;font-weight:400;text-transform:none;letter-spacing:0;color:var(--watt-input-color);caret-color:var(--watt-color-neutral-grey-900)!important;padding:0 12px}watt-dropdown .mat-mdc-select-arrow{color:var(--watt-dropdown-arrow-color, rgba(0, 0, 0, .54));border:none;width:auto;height:auto}watt-dropdown .mat-mdc-select-arrow:before{width:.6em;height:.6em;bottom:.2em;position:relative;display:inline-block;border-style:solid;border-width:0 0 .15em .15em;transform:rotate(315deg);border-color:var(--watt-color-primary);content:\"\"}watt-dropdown .mat-mdc-select-arrow svg{display:none}watt-dropdown .mat-mdc-select-trigger{font-size:.875rem;line-height:1.25rem;font-weight:400;text-transform:none;letter-spacing:0;padding:0 var(--watt-space-m)}watt-dropdown .mat-mdc-select-value{color:var(--watt-color-neutral-black);padding-right:var(--watt-space-m)}watt-dropdown .mat-mdc-select.mat-mdc-select-invalid.ng-pristine .mat-mdc-select-arrow{color:currentColor}watt-dropdown .watt-chip-label{float:right;margin-left:var(--watt-space-s);background:var(--watt-color-neutral-white)}watt-dropdown .watt-field--chip .mat-mdc-select{visibility:hidden;position:absolute;width:100%}watt-dropdown .mat-mdc-select-placeholder{color:var(--watt-input-placeholder-color)}watt-dropdown watt-field label .watt-field-wrapper{background-color:transparent}.watt-dropdown-panel{--watt-input-color: var(--watt-typography-text-color);padding:0}.watt-dropdown-panel .mat-select-search-inner-row .mat-select-search-input,.watt-dropdown-panel mat-option.contains-mat-select-search{height:48px}.watt-dropdown-panel:not(.watt-dropdown-panel-chip-mode){min-width:calc(100% + 2px)!important;margin-top:-36px;margin-left:-1px;min-height:48px}.watt-dropdown-panel .mat-mdc-checkbox.mat-select-search-toggle-all-checkbox{padding:0;margin:0 var(--watt-space-m)}.watt-dropdown-panel .mat-datepicker-content .mat-mdc-icon-button{--mat-mdc-button-persistent-ripple-color: transparent;--mat-mdc-button-ripple-color: transparent}.watt-dropdown-panel.watt-dropdown-panel-chip-mode{margin-top:4px}.watt-dropdown-panel.mat-mdc-select-search-panel{transform:scaleY(1)!important}.watt-dropdown-panel .mat-mdc-option.mdc-list-item.contains-mat-select-search.mat-mdc-option-multiple{background-color:transparent}.watt-dropdown-panel ngx-mat-select-search .mat-select-search-inner-multiple .mat-select-search-inner-row{margin-left:5px}.watt-dropdown-panel ngx-mat-select-search .mat-mdc-checkbox.mat-select-search-toggle-all-checkbox{margin:0}.watt-dropdown-panel .mdc-list-item .mat-select-search-input,.watt-dropdown-panel .mat-mdc-option.mdc-list-item,.watt-dropdown-panel .mat-select-search-no-entries-found{font-size:.875rem;line-height:1.25rem;font-weight:400;text-transform:none;letter-spacing:0;color:var(--watt-input-color)}.watt-dropdown-panel .mat-mdc-optgroup-label{font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:none;letter-spacing:0;color:var(--watt-input-color)}.watt-dropdown-panel .mat-mdc-option.mdc-list-item .mat-select-search-no-entries-found{padding:var(--watt-space-s)}.watt-dropdown-panel .mat-checkbox-frame,.watt-dropdown-panel .mat-mdc-checkbox{border-color:var(--watt-color-primary)}.watt-dropdown-panel :not(.mat-mdc-option-multiple) .mat-pseudo-checkbox{display:none}.watt-dropdown-panel .mat-mdc-option-multiple .mat-pseudo-checkbox{display:inline-block}.watt-dropdown-panel .mat-pseudo-checkbox,.watt-dropdown-panel .mat-mdc-checkbox{color:var(--watt-color-primary)}.watt-dropdown-panel .mat-mdc-option{color:var(--watt-color-neutral-black);min-height:42px}.watt-dropdown-panel .mat-mdc-option[aria-disabled=true].contains-mat-select-search{margin-top:0;top:auto}.watt-dropdown-panel .mat-mdc-option.mdc-list-item.mat-mdc-option-active,.watt-dropdown-panel .mat-mdc-option.mdc-list-item.mdc-list-item--selected.mat-mdc-option-active:not(.mat-mdc-option-multiple),.watt-dropdown-panel .mat-mdc-option:hover:not(.mat-mdc-option-disabled,.contains-mat-select-search),.watt-dropdown-panel .mat-mdc-option:focus:not(.mat-mdc-option-disabled){background-color:var(--watt-color-primary-light)}.watt-dropdown-panel .mat-mdc-option .mat-mdc-select-search-no-entries-found{text-align:center;padding:0}.watt-dropdown-panel .mat-mdc-option.mat-mdc-option-disabled{color:var(--watt-color-neutral-grey-400);cursor:not-allowed}.watt-dropdown-panel .mat-mdc-select-search-input:not(.mat-mdc-select-search-hidden){color:var(--watt-color-neutral-black)}.watt-dropdown-panel .mat-mdc-select-search-clear{background-color:var(--watt-color-neutral-white);color:var(--watt-color-neutral-grey-400)}.watt-dropdown-panel .mat-mdc-select-search-clear mat-icon{line-height:20px!important}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i1.MatOptgroup, selector: "mat-optgroup", inputs: ["label", "disabled"], exportAs: ["matOptgroup"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: NgxMatSelectSearchModule }, { kind: "component", type: i3.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti", "recreateValuesArray"], outputs: ["toggleAll"] }, { kind: "directive", type: i3.MatSelectSearchClearDirective, selector: "[ngxMatSelectSearchClear]" }, { kind: "component", type: WattIconComponent, selector: "watt-icon", inputs: ["name", "label", "size", "state"] }, { kind: "component", type: WattFieldComponent, selector: "watt-field", inputs: ["control", "label", "id", "chipMode", "tooltip", "placeholder", "anchorName"] }, { kind: "component", type: WattMenuChipComponent, selector: "watt-menu-chip", inputs: ["opened", "disabled", "name", "value", "selected", "hasPopup"], outputs: ["toggle"] }, { kind: "pipe", type: RxPush, name: "push" }], encapsulation: i0.ViewEncapsulation.None });
|
|
348
328
|
}
|
|
349
329
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: WattDropdownComponent, decorators: [{
|
|
350
330
|
type: Component,
|
|
@@ -352,6 +332,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
|
|
|
352
332
|
RxPush,
|
|
353
333
|
NgClass,
|
|
354
334
|
MatSelectModule,
|
|
335
|
+
MatOptionModule,
|
|
355
336
|
ReactiveFormsModule,
|
|
356
337
|
NgxMatSelectSearchModule,
|
|
357
338
|
WattIconComponent,
|
|
@@ -360,6 +341,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
|
|
|
360
341
|
], host: {
|
|
361
342
|
'[attr.watt-field-disabled]': 'isDisabled()',
|
|
362
343
|
'[class.watt-chip-mode]': 'chipMode()',
|
|
363
|
-
}, template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<watt-field\n [control]=\"parentControl\"\n [chipMode]=\"chipMode()\"\n [label]=\"label()\"\n (click)=\"matSelect.open()\"\n>\n @if (chipMode()) {\n <watt-menu-chip\n [opened]=\"matSelect.panelOpen\"\n (toggle)=\"matSelect.open()\"\n [selected]=\"!!matSelect?.triggerValue && !disableSelectedMode()\"\n [disabled]=\"matSelectControl.disabled\"\n >\n {{ placeholder() }}\n @if (showTriggerValue) {\n <span>\n @if (placeholder()) {\n :\n }\n {{ getCustomTrigger()?.(matSelect.value) ?? matSelect?.triggerValue }}\n </span>\n }\n @if (showChipLabel) {\n <span class=\"watt-chip-label\">{{ matSelectControl.value?.length }}</span>\n }\n </watt-menu-chip>\n }\n\n <mat-select\n [attr.aria-label]=\"label()\"\n [formControl]=\"matSelectControl\"\n [placeholder]=\"placeholder()\"\n #matSelect\n [panelWidth]=\"panelWidth()\"\n [multiple]=\"multiple()\"\n [ngClass]=\"{ chip: chipMode() }\"\n [panelClass]=\"{\n 'watt-dropdown-panel': true,\n 'watt-dropdown-panel-chip-mode': chipMode(),\n }\"\n >\n <!-- We use this instead of ngIf, since it will trigger a NG0100: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. -->\n <mat-option [style.display]=\"!hideSearch() ? 'block' : 'none'\">\n <ngx-mat-select-search\n [formControl]=\"filterControl\"\n [placeholderLabel]=\"placeholder()\"\n closeIcon=\"close\"\n [showToggleAllCheckbox]=\"multiple()\"\n (toggleAll)=\"onToggleAll($event)\"\n [toggleAllCheckboxChecked]=\"isToggleAllChecked\"\n [toggleAllCheckboxIndeterminate]=\"isToggleAllIndeterminate\"\n [noEntriesFoundLabel]=\"noOptionsFoundLabel()\"\n >\n <watt-icon ngxMatSelectSearchClear name=\"close\" size=\"s\" />\n </ngx-mat-select-search>\n </mat-option>\n\n @if (!multiple() && showResetOption()) {\n <mat-option>{{ emDash }}</mat-option>\n }\n\n @for (option of filteredOptions$ | push; track option) {\n
|
|
344
|
+
}, template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<watt-field\n [control]=\"parentControl\"\n [chipMode]=\"chipMode()\"\n [label]=\"label()\"\n (click)=\"matSelect.open()\"\n>\n @if (chipMode()) {\n <watt-menu-chip\n [opened]=\"matSelect.panelOpen\"\n (toggle)=\"matSelect.open()\"\n [selected]=\"!!matSelect?.triggerValue && !disableSelectedMode()\"\n [disabled]=\"matSelectControl.disabled\"\n >\n {{ placeholder() }}\n @if (showTriggerValue) {\n <span>\n @if (placeholder()) {\n :\n }\n {{ getCustomTrigger()?.(matSelect.value) ?? matSelect?.triggerValue }}\n </span>\n }\n @if (showChipLabel) {\n <span class=\"watt-chip-label\">{{ matSelectControl.value?.length }}</span>\n }\n </watt-menu-chip>\n }\n\n <mat-select\n [attr.aria-label]=\"label()\"\n [formControl]=\"matSelectControl\"\n [placeholder]=\"placeholder()\"\n #matSelect\n [panelWidth]=\"panelWidth()\"\n [multiple]=\"multiple()\"\n [ngClass]=\"{ chip: chipMode(), 'mat-mdc-select-multiple': multiple() }\"\n [panelClass]=\"{\n 'watt-dropdown-panel': true,\n 'watt-dropdown-panel-chip-mode': chipMode(),\n 'mat-mdc-select-panel-multiple': multiple(),\n }\"\n >\n <!-- We use this instead of ngIf, since it will trigger a NG0100: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. -->\n <mat-option [style.display]=\"!hideSearch() ? 'block' : 'none'\">\n <ngx-mat-select-search\n [formControl]=\"filterControl\"\n [placeholderLabel]=\"placeholder()\"\n closeIcon=\"close\"\n [showToggleAllCheckbox]=\"multiple()\"\n (toggleAll)=\"onToggleAll($event)\"\n [toggleAllCheckboxChecked]=\"isToggleAllChecked\"\n [toggleAllCheckboxIndeterminate]=\"isToggleAllIndeterminate\"\n [noEntriesFoundLabel]=\"noOptionsFoundLabel()\"\n >\n <watt-icon ngxMatSelectSearchClear name=\"close\" size=\"s\" />\n </ngx-mat-select-search>\n </mat-option>\n\n @if (!multiple() && showResetOption()) {\n <mat-option>{{ emDash }}</mat-option>\n }\n\n @if (hasGroups()) {\n @for (item of filteredGroupedOptions$ | push; track item) {\n @if (\"options\" in item) {\n <mat-optgroup [label]=\"item.label\" [disabled]=\"item.disabled\">\n @for (option of item.options; track option) {\n <mat-option\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n [class.mat-mdc-option-multiple]=\"multiple()\"\n >\n {{ option.displayValue }}\n </mat-option>\n }\n </mat-optgroup>\n }\n }\n } @else {\n @for (option of filteredOptions$ | push; track option) {\n <mat-option\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n [class.mat-mdc-option-multiple]=\"multiple()\"\n >\n {{ option.displayValue }}\n </mat-option>\n }\n }\n </mat-select>\n <ng-content />\n <ng-content ngProjectAs=\"watt-field-hint\" select=\"watt-field-hint\" />\n <ng-content ngProjectAs=\"watt-field-error\" select=\"watt-field-error\" />\n</watt-field>\n", styles: ["watt-dropdown:not(.watt-chip-mode){width:100%}watt-dropdown{--watt-input-color: var(--watt-typography-text-color);--watt-input-placeholder-color: var(--watt-on-light-high-emphasis);display:block;width:auto}watt-dropdown watt-field label .watt-field-wrapper{padding:0;position:relative}watt-dropdown.watt-chip-mode.ng-dirty.ng-invalid .watt-field-wrapper watt-chip label{border:1px solid var(--watt-color-state-danger)}watt-dropdown.watt-chip-mode[disabled=true] watt-field label .watt-field-wrapper{background-color:transparent}watt-dropdown .mat-input-element{font-size:.875rem;line-height:1.25rem;font-weight:400;text-transform:none;letter-spacing:0;color:var(--watt-input-color);caret-color:var(--watt-color-neutral-grey-900)!important;padding:0 12px}watt-dropdown .mat-mdc-select-arrow{color:var(--watt-dropdown-arrow-color, rgba(0, 0, 0, .54));border:none;width:auto;height:auto}watt-dropdown .mat-mdc-select-arrow:before{width:.6em;height:.6em;bottom:.2em;position:relative;display:inline-block;border-style:solid;border-width:0 0 .15em .15em;transform:rotate(315deg);border-color:var(--watt-color-primary);content:\"\"}watt-dropdown .mat-mdc-select-arrow svg{display:none}watt-dropdown .mat-mdc-select-trigger{font-size:.875rem;line-height:1.25rem;font-weight:400;text-transform:none;letter-spacing:0;padding:0 var(--watt-space-m)}watt-dropdown .mat-mdc-select-value{color:var(--watt-color-neutral-black);padding-right:var(--watt-space-m)}watt-dropdown .mat-mdc-select.mat-mdc-select-invalid.ng-pristine .mat-mdc-select-arrow{color:currentColor}watt-dropdown .watt-chip-label{float:right;margin-left:var(--watt-space-s);background:var(--watt-color-neutral-white)}watt-dropdown .watt-field--chip .mat-mdc-select{visibility:hidden;position:absolute;width:100%}watt-dropdown .mat-mdc-select-placeholder{color:var(--watt-input-placeholder-color)}watt-dropdown watt-field label .watt-field-wrapper{background-color:transparent}.watt-dropdown-panel{--watt-input-color: var(--watt-typography-text-color);padding:0}.watt-dropdown-panel .mat-select-search-inner-row .mat-select-search-input,.watt-dropdown-panel mat-option.contains-mat-select-search{height:48px}.watt-dropdown-panel:not(.watt-dropdown-panel-chip-mode){min-width:calc(100% + 2px)!important;margin-top:-36px;margin-left:-1px;min-height:48px}.watt-dropdown-panel .mat-mdc-checkbox.mat-select-search-toggle-all-checkbox{padding:0;margin:0 var(--watt-space-m)}.watt-dropdown-panel .mat-datepicker-content .mat-mdc-icon-button{--mat-mdc-button-persistent-ripple-color: transparent;--mat-mdc-button-ripple-color: transparent}.watt-dropdown-panel.watt-dropdown-panel-chip-mode{margin-top:4px}.watt-dropdown-panel.mat-mdc-select-search-panel{transform:scaleY(1)!important}.watt-dropdown-panel .mat-mdc-option.mdc-list-item.contains-mat-select-search.mat-mdc-option-multiple{background-color:transparent}.watt-dropdown-panel ngx-mat-select-search .mat-select-search-inner-multiple .mat-select-search-inner-row{margin-left:5px}.watt-dropdown-panel ngx-mat-select-search .mat-mdc-checkbox.mat-select-search-toggle-all-checkbox{margin:0}.watt-dropdown-panel .mdc-list-item .mat-select-search-input,.watt-dropdown-panel .mat-mdc-option.mdc-list-item,.watt-dropdown-panel .mat-select-search-no-entries-found{font-size:.875rem;line-height:1.25rem;font-weight:400;text-transform:none;letter-spacing:0;color:var(--watt-input-color)}.watt-dropdown-panel .mat-mdc-optgroup-label{font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:none;letter-spacing:0;color:var(--watt-input-color)}.watt-dropdown-panel .mat-mdc-option.mdc-list-item .mat-select-search-no-entries-found{padding:var(--watt-space-s)}.watt-dropdown-panel .mat-checkbox-frame,.watt-dropdown-panel .mat-mdc-checkbox{border-color:var(--watt-color-primary)}.watt-dropdown-panel :not(.mat-mdc-option-multiple) .mat-pseudo-checkbox{display:none}.watt-dropdown-panel .mat-mdc-option-multiple .mat-pseudo-checkbox{display:inline-block}.watt-dropdown-panel .mat-pseudo-checkbox,.watt-dropdown-panel .mat-mdc-checkbox{color:var(--watt-color-primary)}.watt-dropdown-panel .mat-mdc-option{color:var(--watt-color-neutral-black);min-height:42px}.watt-dropdown-panel .mat-mdc-option[aria-disabled=true].contains-mat-select-search{margin-top:0;top:auto}.watt-dropdown-panel .mat-mdc-option.mdc-list-item.mat-mdc-option-active,.watt-dropdown-panel .mat-mdc-option.mdc-list-item.mdc-list-item--selected.mat-mdc-option-active:not(.mat-mdc-option-multiple),.watt-dropdown-panel .mat-mdc-option:hover:not(.mat-mdc-option-disabled,.contains-mat-select-search),.watt-dropdown-panel .mat-mdc-option:focus:not(.mat-mdc-option-disabled){background-color:var(--watt-color-primary-light)}.watt-dropdown-panel .mat-mdc-option .mat-mdc-select-search-no-entries-found{text-align:center;padding:0}.watt-dropdown-panel .mat-mdc-option.mat-mdc-option-disabled{color:var(--watt-color-neutral-grey-400);cursor:not-allowed}.watt-dropdown-panel .mat-mdc-select-search-input:not(.mat-mdc-select-search-hidden){color:var(--watt-color-neutral-black)}.watt-dropdown-panel .mat-mdc-select-search-clear{background-color:var(--watt-color-neutral-white);color:var(--watt-color-neutral-grey-400)}.watt-dropdown-panel .mat-mdc-select-search-clear mat-icon{line-height:20px!important}\n"] }]
|
|
364
345
|
}], ctorParameters: () => [] });
|
|
365
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS9kcm9wZG93bi93YXR0LWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL2Ryb3Bkb3duL3dhdHQtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCO0FBQ2pCOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFlBQVk7QUFDWixPQUFPLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBRU4sTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLGlCQUFpQixFQUNqQixLQUFLLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNMLFNBQVMsRUFFVCxXQUFXLEVBR1gsa0JBQWtCLEVBQ2xCLG1CQUFtQixHQUVwQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBYSxNQUFNLDBCQUEwQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBRSxxQkFBcUIs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QzVDLHdCQUF3QixFQUFFLFlBQVk7cUJBQ3ZDIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIExpY2Vuc2Vcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEVuZXJnaW5ldCBEYXRhSHViIEEvU1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2UyXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vI2VuZHJlZ2lvblxuaW1wb3J0IHtcbiAgaW5wdXQsXG4gIHNpZ25hbCxcbiAgZWZmZWN0LFxuICBPbkluaXQsXG4gIGluamVjdCxcbiAgQ29tcG9uZW50LFxuICB2aWV3Q2hpbGQsXG4gIERlc3Ryb3lSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBtb2RlbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIE5nQ29udHJvbCxcbiAgVmFsaWRhdG9yRm4sXG4gIEZvcm1Db250cm9sLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBBc3luY1ZhbGlkYXRvckZuLFxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBSeFB1c2ggfSBmcm9tICdAcngtYW5ndWxhci90ZW1wbGF0ZS9wdXNoJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuaW1wb3J0IHsgb2YsIFJlcGxheVN1YmplY3QsIG1hcCwgdGFrZSwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOZ3hNYXRTZWxlY3RTZWFyY2hNb2R1bGUgfSBmcm9tICduZ3gtbWF0LXNlbGVjdC1zZWFyY2gnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlLCBNYXRTZWxlY3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuXG5pbXBvcnQgeyBXYXR0SWNvbkNvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9pY29uJztcbmltcG9ydCB7IFdhdHRGaWVsZENvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQvd2F0dC9maWVsZCc7XG5pbXBvcnQgeyBXYXR0TWVudUNoaXBDb21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvY2hpcCc7XG5cbmltcG9ydCB0eXBlIHsgV2F0dERyb3Bkb3duVmFsdWUgfSBmcm9tICcuL3dhdHQtZHJvcGRvd24tdmFsdWUnO1xuaW1wb3J0IHR5cGUgeyBXYXR0RHJvcGRvd25PcHRpb25zIH0gZnJvbSAnLi93YXR0LWRyb3Bkb3duLW9wdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dhdHQtZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJy4vd2F0dC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dhdHQtZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIFJ4UHVzaCxcbiAgICBOZ0NsYXNzLFxuICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE5neE1hdFNlbGVjdFNlYXJjaE1vZHVsZSxcblxuICAgIFdhdHRJY29uQ29tcG9uZW50LFxuICAgIFdhdHRGaWVsZENvbXBvbmVudCxcbiAgICBXYXR0TWVudUNoaXBDb21wb25lbnQsXG4gIF0sXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIud2F0dC1maWVsZC1kaXNhYmxlZF0nOiAnaXNEaXNhYmxlZCgpJyxcbiAgICAnW2NsYXNzLndhdHQtY2hpcC1tb2RlXSc6ICdjaGlwTW9kZSgpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgV2F0dERyb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XG4gIHByaXZhdGUgcGFyZW50Q29udHJvbERpcmVjdGl2ZSA9IGluamVjdChOZ0NvbnRyb2wsIHsgaG9zdDogdHJ1ZSB9KTtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHBhcmVudENvbnRyb2w6IEZvcm1Db250cm9sIHwgbnVsbCA9IG51bGw7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUGFyZW50PzogVmFsaWRhdG9yRm47XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUGFyZW50QXN5bmM/OiBBc3luY1ZhbGlkYXRvckZuO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbWF0U2VsZWN0Q29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCB8IG51bGw+KG51bGwpO1xuICAvKipcbiAgICogQ29udHJvbCBmb3IgdGhlIE1hdFNlbGVjdCBmaWx0ZXIga2V5d29yZFxuICAgKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBmaWx0ZXJDb250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuICAvKipcbiAgICogTGlzdCBvZiBvcHRpb25zIGZpbHRlcmVkIGJ5IHNlYXJjaCBrZXl3b3JkXG4gICAqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGZpbHRlcmVkT3B0aW9ucyQgPSBuZXcgUmVwbGF5U3ViamVjdDxXYXR0RHJvcGRvd25PcHRpb25zPigxKTtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGVtRGFzaCA9ICfigJQnO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgaXNUb2dnbGVBbGxDaGVja2VkID0gZmFsc2U7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBpc1RvZ2dsZUFsbEluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIF9vcHRpb25zOiBXYXR0RHJvcGRvd25PcHRpb25zID0gW107XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBpc0Rpc2FibGVkID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZ2V0IHNob3dUcmlnZ2VyVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbXVsdGlwbGUgPSB0aGlzLm11bHRpcGxlKCk7XG4gICAgcmV0dXJuIChtdWx0aXBsZSAmJlxuICAgICAgdGhpcy5tYXRTZWxlY3RDb250cm9sLnZhbHVlPy5sZW5ndGggPT09IDEgJiZcbiAgICAgIHRoaXMubWF0U2VsZWN0Q29udHJvbC52YWx1ZVswXSAhPT0gJycpIHx8XG4gICAgICAoIW11bHRpcGxlICYmIHRoaXMubWF0U2VsZWN0KCk/LnRyaWdnZXJWYWx1ZSlcbiAgICAgID8gdHJ1ZVxuICAgICAgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBnZXQgc2hvd0NoaXBMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSgpICYmIHRoaXMubWF0U2VsZWN0Q29udHJvbC52YWx1ZSAmJiB0aGlzLm1hdFNlbGVjdENvbnRyb2wudmFsdWUubGVuZ3RoID4gMVxuICAgICAgPyB0cnVlXG4gICAgICA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG1hdFNlbGVjdCA9IHZpZXdDaGlsZDxNYXRTZWxlY3Q+KCdtYXRTZWxlY3QnKTtcblxuICBoaWRlU2VhcmNoID0gaW5wdXQoZmFsc2UpO1xuICBwYW5lbFdpZHRoID0gaW5wdXQ8bnVsbCB8ICdhdXRvJz4obnVsbCk7XG4gIGdldEN1c3RvbVRyaWdnZXIgPSBpbnB1dDwodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSA9PiBzdHJpbmc+KCk7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbW9kZSBvZiB0aGUgZHJvcGRvd24uXG4gICAqL1xuICBjaGlwTW9kZSA9IGlucHV0KGZhbHNlKTtcblxuICBkaXNhYmxlU2VsZWN0ZWRNb2RlID0gaW5wdXQoZmFsc2UpO1xuXG4gIHNvcnREaXJlY3Rpb24gPSBpbnB1dDwnYXNjJyB8ICdkZXNjJz4oKTtcblxuICAvKipcbiAgICogU2V0cyB0aGUgb3B0aW9ucyBmb3IgdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgb3B0aW9ucyA9IG1vZGVsPFdhdHREcm9wZG93bk9wdGlvbnM+KFtdKTtcblxuICAvKipcbiAgICogU2V0cyBzdXBwb3J0IGZvciBzZWxlY3RpbmcgbXVsdGlwbGUgZHJvcGRvd24gb3B0aW9ucy5cbiAgICovXG4gIG11bHRpcGxlID0gaW5wdXQoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBTZXRzIHN1cHBvcnQgZm9yIGhpZGluZyB0aGUgcmVzZXQgb3B0aW9uIGluIFwic2luZ2xlXCIgc2VsZWN0IG1vZGUuXG4gICAqL1xuICBzaG93UmVzZXRPcHRpb24gPSBpbnB1dCh0cnVlKTtcblxuICAvKipcbiAgICogU2V0cyB0aGUgcGxhY2Vob2xkZXIgZm9yIHRoZSBkcm9wZG93bi5cbiAgICovXG4gIHBsYWNlaG9sZGVyID0gaW5wdXQoJycpO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBsYWJlbCBmb3IgdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgbGFiZWwgPSBpbnB1dCgnJyk7XG5cbiAgLyoqXG4gICAqIExhYmVsIHRvIGJlIHNob3duIHdoZW4gbm8gb3B0aW9ucyBhcmUgZm91bmQgYWZ0ZXIgZmlsdGVyaW5nLlxuICAgKlxuICAgKiBOb3RlOiBUaGUgbGFiZWwgaXMgdmlzaWJsZSBpbiBcIm11bHRpcGxlXCIgbW9kZSBvbmx5LlxuICAgKi9cbiAgbm9PcHRpb25zRm91bmRMYWJlbCA9IGlucHV0KCcnKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucygpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgbGV0IG9wdGlvbnNDb3B5ID0gWy4uLm9wdGlvbnNdO1xuXG4gICAgICAgIGlmICh0aGlzLnNvcnREaXJlY3Rpb24oKSkge1xuICAgICAgICAgIG9wdGlvbnNDb3B5ID0gdGhpcy5zb3J0T3B0aW9ucyhvcHRpb25zQ29weSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9uc0NvcHk7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zJC5uZXh0KG9wdGlvbnNDb3B5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnBhcmVudENvbnRyb2xEaXJlY3RpdmUudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ZW5Gb3JGaWx0ZXJGaWVsZFZhbHVlQ2hhbmdlcygpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVByb3BlcnRpZXNGcm9tUGFyZW50KCk7XG4gICAgdGhpcy5iaW5kUGFyZW50VmFsaWRhdG9yc1RvQ29udHJvbCgpO1xuICAgIHRoaXMuYmluZENvbnRyb2xUb1BhcmVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IFdhdHREcm9wZG93blZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5tYXRTZWxlY3RDb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByZWdpc3Rlck9uQ2hhbmdlKG9uQ2hhbmdlRm46ICh2YWx1ZTogV2F0dERyb3Bkb3duVmFsdWUpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZVBhcmVudFZhbHVlID0gb25DaGFuZ2VGbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoRm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLm1hcmtQYXJlbnRDb250cm9sQXNUb3VjaGVkID0gb25Ub3VjaEZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHNldERpc2FibGVkU3RhdGUoc2hvdWxkRGlzYWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNEaXNhYmxlZC5zZXQoc2hvdWxkRGlzYWJsZSk7XG4gICAgaWYgKHNob3VsZERpc2FibGUpIHtcbiAgICAgIHRoaXMubWF0U2VsZWN0Q29udHJvbC5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWF0U2VsZWN0Q29udHJvbC5lbmFibGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Ub2dnbGVBbGwodG9nZ2xlQWxsU3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBtYXAoKG9wdGlvbnMpID0+IG9wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChmaWx0ZXJlZE9wdGlvbnM6IHN0cmluZ1tdKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNUb1NlbGVjdCA9IHRvZ2dsZUFsbFN0YXRlID8gZmlsdGVyZWRPcHRpb25zIDogW107XG4gICAgICAgIHRoaXMubWF0U2VsZWN0Q29udHJvbC5wYXRjaFZhbHVlKG9wdGlvbnNUb1NlbGVjdCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzb3J0T3B0aW9ucyhvcHRpb25zOiBXYXR0RHJvcGRvd25PcHRpb25zKTogV2F0dERyb3Bkb3duT3B0aW9ucyB7XG4gICAgcmV0dXJuIFsuLi5vcHRpb25zXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5zb3J0RGlyZWN0aW9uKCkgPT09ICdhc2MnXG4gICAgICAgID8gYS5kaXNwbGF5VmFsdWUubG9jYWxlQ29tcGFyZShiLmRpc3BsYXlWYWx1ZSlcbiAgICAgICAgOiBiLmRpc3BsYXlWYWx1ZS5sb2NhbGVDb21wYXJlKGEuZGlzcGxheVZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIGxpc3RlbkZvckZpbHRlckZpZWxkVmFsdWVDaGFuZ2VzKCkge1xuICAgIHRoaXMuZmlsdGVyQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucygpO1xuXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSgpKSB7XG4gICAgICAgIHRoaXMuZGV0ZXJtaW5lVG9nZ2xlQWxsQ2hlY2tib3hTdGF0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgcHJpdmF0ZSBjaGFuZ2VQYXJlbnRWYWx1ZSA9ICh2YWx1ZTogV2F0dERyb3Bkb3duVmFsdWUpOiB2b2lkID0+IHtcbiAgICAvLyBJbnRlbnRpb25hbGx5IGxlZnQgZW1wdHlcbiAgfTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBtYXJrUGFyZW50Q29udHJvbEFzVG91Y2hlZCA9ICgpOiB2b2lkID0+IHtcbiAgICAvLyBJbnRlbnRpb25hbGx5IGxlZnQgZW1wdHlcbiAgfTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKlxuICAgKiBTdG9yZSB0aGUgcGFyZW50IGNvbnRyb2wsIGl0cyB2YWxpZGF0b3JzIGFuZCBhc3luYyB2YWxpZGF0b3JzIGluIHByb3BlcnRpZXNcbiAgICogb2YgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVQcm9wZXJ0aWVzRnJvbVBhcmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLnBhcmVudENvbnRyb2wgPSB0aGlzLnBhcmVudENvbnRyb2xEaXJlY3RpdmUuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG5cbiAgICB0aGlzLnZhbGlkYXRlUGFyZW50ID1cbiAgICAgICh0aGlzLnBhcmVudENvbnRyb2wudmFsaWRhdG9yICYmIHRoaXMucGFyZW50Q29udHJvbC52YWxpZGF0b3IuYmluZCh0aGlzLnBhcmVudENvbnRyb2wpKSB8fFxuICAgICAgKCgpID0+IG51bGwpO1xuXG4gICAgdGhpcy52YWxpZGF0ZVBhcmVudEFzeW5jID1cbiAgICAgICh0aGlzLnBhcmVudENvbnRyb2wuYXN5bmNWYWxpZGF0b3IgJiZcbiAgICAgICAgdGhpcy5wYXJlbnRDb250cm9sLmFzeW5jVmFsaWRhdG9yLmJpbmQodGhpcy5wYXJlbnRDb250cm9sKSkgfHxcbiAgICAgICgoKSA9PiBvZihudWxsKSk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKlxuICAgKiBJbmhlcml0IHZhbGlkYXRvcnMgZnJvbSBwYXJlbnQgZm9ybSBjb250cm9sLlxuICAgKi9cbiAgcHJpdmF0ZSBiaW5kUGFyZW50VmFsaWRhdG9yc1RvQ29udHJvbCgpOiB2b2lkIHtcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gIXRoaXMubWF0U2VsZWN0Q29udHJvbC52YWxpZGF0b3JcbiAgICAgID8gW3RoaXMudmFsaWRhdGVQYXJlbnRdXG4gICAgICA6IEFycmF5LmlzQXJyYXkodGhpcy5tYXRTZWxlY3RDb250cm9sLnZhbGlkYXRvcilcbiAgICAgICAgPyBbLi4udGhpcy5tYXRTZWxlY3RDb250cm9sLnZhbGlkYXRvciwgdGhpcy52YWxpZGF0ZVBhcmVudF1cbiAgICAgICAgOiBbdGhpcy5tYXRTZWxlY3RDb250cm9sLnZhbGlkYXRvciwgdGhpcy52YWxpZGF0ZVBhcmVudF07XG4gICAgdGhpcy5tYXRTZWxlY3RDb250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG5cbiAgICBjb25zdCBhc3luY1ZhbGlkYXRvcnMgPSAhdGhpcy5tYXRTZWxlY3RDb250cm9sLmFzeW5jVmFsaWRhdG9yXG4gICAgICA/IFt0aGlzLnZhbGlkYXRlUGFyZW50QXN5bmNdXG4gICAgICA6IEFycmF5LmlzQXJyYXkodGhpcy5tYXRTZWxlY3RDb250cm9sLmFzeW5jVmFsaWRhdG9yKVxuICAgICAgICA/IFsuLi50aGlzLm1hdFNlbGVjdENvbnRyb2wuYXN5bmNWYWxpZGF0b3IsIHRoaXMudmFsaWRhdGVQYXJlbnRBc3luY11cbiAgICAgICAgOiBbdGhpcy5tYXRTZWxlY3RDb250cm9sLmFzeW5jVmFsaWRhdG9yLCB0aGlzLnZhbGlkYXRlUGFyZW50QXN5bmNdO1xuICAgIHRoaXMubWF0U2VsZWN0Q29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JzKTtcblxuICAgIHRoaXMubWF0U2VsZWN0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKlxuICAgKiBFbWl0IHZhbHVlcyB0byB0aGUgcGFyZW50IGZvcm0gY29udHJvbCB3aGVuIG91ciBmb3JtIGNvbnRyb2wncyB2YWx1ZVxuICAgKiBjaGFuZ2VzLlxuICAgKlxuICAgKiBSZWZsZWN0IHBhcmVudCB2YWxpZGF0aW9uIGVycm9ycyBpbiBvdXIgZm9ybSBjb250cm9sLlxuICAgKi9cbiAgcHJpdmF0ZSBiaW5kQ29udHJvbFRvUGFyZW50KCk6IHZvaWQge1xuICAgIHRoaXMubWF0U2VsZWN0Q29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHZhbHVlKSA9PiAodmFsdWUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB2YWx1ZSkpLFxuICAgICAgICBtYXAoKHZhbHVlOiBXYXR0RHJvcGRvd25WYWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogV2F0dERyb3Bkb3duVmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUoKSkge1xuICAgICAgICAgIHRoaXMuZGV0ZXJtaW5lVG9nZ2xlQWxsQ2hlY2tib3hTdGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tYXJrUGFyZW50Q29udHJvbEFzVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmNoYW5nZVBhcmVudFZhbHVlKHZhbHVlKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5wYXJlbnRDb250cm9sPy5zdGF0dXNDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKFxuICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAuLi50aGlzLnBhcmVudENvbnRyb2w/LmVycm9ycyxcbiAgICAgICAgICAgIH0pIGFzIFZhbGlkYXRpb25FcnJvcnNcbiAgICAgICAgKSxcbiAgICAgICAgbWFwKChlcnJvcnMpID0+IChPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA+IDAgPyBlcnJvcnMgOiBudWxsKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChlcnJvcnMpID0+IHtcbiAgICAgICAgdGhpcy5tYXRTZWxlY3RDb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJPcHRpb25zKCkge1xuICAgIGlmICghdGhpcy5fb3B0aW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGdldCB0aGUgc2VhcmNoIGtleXdvcmRcbiAgICBsZXQgc2VhcmNoID0gKHRoaXMuZmlsdGVyQ29udHJvbC52YWx1ZSBhcyBzdHJpbmcpLnRyaW0oKTtcblxuICAgIGlmIChzZWFyY2gpIHtcbiAgICAgIHNlYXJjaCA9IHNlYXJjaC50b0xvd2VyQ2FzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJlZE9wdGlvbnMkLm5leHQodGhpcy5fb3B0aW9ucy5zbGljZSgpKTtcbiAgICB9XG5cbiAgICAvLyBmaWx0ZXIgdGhlIG9wdGlvbnNcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyQubmV4dChcbiAgICAgIHRoaXMuX29wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5kaXNwbGF5VmFsdWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaCkgPiAtMSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgZGV0ZXJtaW5lVG9nZ2xlQWxsQ2hlY2tib3hTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBmaWx0ZXIoKG9wdGlvbnMpID0+IG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zICE9PSB1bmRlZmluZWQpLFxuICAgICAgICBtYXAoKG9wdGlvbnMpID0+IG9wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChmaWx0ZXJlZE9wdGlvbnM6IHN0cmluZ1tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9ucyA9IHRoaXMubWF0U2VsZWN0Q29udHJvbC52YWx1ZTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3RlZE9wdGlvbnMpKSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRGaWx0ZXJlZE9wdGlvbnMgPSBmaWx0ZXJlZE9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+XG4gICAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMuaW5jbHVkZXMob3B0aW9uKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLmlzVG9nZ2xlQWxsSW5kZXRlcm1pbmF0ZSA9XG4gICAgICAgICAgICBzZWxlY3RlZEZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBzZWxlY3RlZEZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPCBmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoO1xuXG4gICAgICAgICAgdGhpcy5pc1RvZ2dsZUFsbENoZWNrZWQgPVxuICAgICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSBmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPCEtLVxuQGxpY2Vuc2VcbkNvcHlyaWdodCAyMDIwIEVuZXJnaW5ldCBEYXRhSHViIEEvU1xuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlMlwiKTtcbnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxubGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLT5cbjx3YXR0LWZpZWxkXG4gIFtjb250cm9sXT1cInBhcmVudENvbnRyb2xcIlxuICBbY2hpcE1vZGVdPVwiY2hpcE1vZGUoKVwiXG4gIFtsYWJlbF09XCJsYWJlbCgpXCJcbiAgKGNsaWNrKT1cIm1hdFNlbGVjdC5vcGVuKClcIlxuPlxuICBAaWYgKGNoaXBNb2RlKCkpIHtcbiAgICA8d2F0dC1tZW51LWNoaXBcbiAgICAgIFtvcGVuZWRdPVwibWF0U2VsZWN0LnBhbmVsT3BlblwiXG4gICAgICAodG9nZ2xlKT1cIm1hdFNlbGVjdC5vcGVuKClcIlxuICAgICAgW3NlbGVjdGVkXT1cIiEhbWF0U2VsZWN0Py50cmlnZ2VyVmFsdWUgJiYgIWRpc2FibGVTZWxlY3RlZE1vZGUoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwibWF0U2VsZWN0Q29udHJvbC5kaXNhYmxlZFwiXG4gICAgPlxuICAgICAge3sgcGxhY2Vob2xkZXIoKSB9fVxuICAgICAgQGlmIChzaG93VHJpZ2dlclZhbHVlKSB7XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgIEBpZiAocGxhY2Vob2xkZXIoKSkge1xuICAgICAgICAgICAgOlxuICAgICAgICAgIH1cbiAgICAgICAgICB7eyBnZXRDdXN0b21UcmlnZ2VyKCk/LihtYXRTZWxlY3QudmFsdWUpID8/IG1hdFNlbGVjdD8udHJpZ2dlclZhbHVlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIH1cbiAgICAgIEBpZiAoc2hvd0NoaXBMYWJlbCkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cIndhdHQtY2hpcC1sYWJlbFwiPnt7IG1hdFNlbGVjdENvbnRyb2wudmFsdWU/Lmxlbmd0aCB9fTwvc3Bhbj5cbiAgICAgIH1cbiAgICA8L3dhdHQtbWVudS1jaGlwPlxuICB9XG5cbiAgPG1hdC1zZWxlY3RcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxhYmVsKClcIlxuICAgIFtmb3JtQ29udHJvbF09XCJtYXRTZWxlY3RDb250cm9sXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIoKVwiXG4gICAgI21hdFNlbGVjdFxuICAgIFtwYW5lbFdpZHRoXT1cInBhbmVsV2lkdGgoKVwiXG4gICAgW211bHRpcGxlXT1cIm11bHRpcGxlKClcIlxuICAgIFtuZ0NsYXNzXT1cInsgY2hpcDogY2hpcE1vZGUoKSB9XCJcbiAgICBbcGFuZWxDbGFzc109XCJ7XG4gICAgICAnd2F0dC1kcm9wZG93bi1wYW5lbCc6IHRydWUsXG4gICAgICAnd2F0dC1kcm9wZG93bi1wYW5lbC1jaGlwLW1vZGUnOiBjaGlwTW9kZSgpLFxuICAgIH1cIlxuICA+XG4gICAgPCEtLSBXZSB1c2UgdGhpcyBpbnN0ZWFkIG9mIG5nSWYsIHNpbmNlIGl0IHdpbGwgdHJpZ2dlciBhIE5HMDEwMDogRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvcjogRXhwcmVzc2lvbiBoYXMgY2hhbmdlZCBhZnRlciBpdCB3YXMgY2hlY2tlZC4gLS0+XG4gICAgPG1hdC1vcHRpb24gW3N0eWxlLmRpc3BsYXldPVwiIWhpZGVTZWFyY2goKSA/ICdibG9jaycgOiAnbm9uZSdcIj5cbiAgICAgIDxuZ3gtbWF0LXNlbGVjdC1zZWFyY2hcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImZpbHRlckNvbnRyb2xcIlxuICAgICAgICBbcGxhY2Vob2xkZXJMYWJlbF09XCJwbGFjZWhvbGRlcigpXCJcbiAgICAgICAgY2xvc2VJY29uPVwiY2xvc2VcIlxuICAgICAgICBbc2hvd1RvZ2dsZUFsbENoZWNrYm94XT1cIm11bHRpcGxlKClcIlxuICAgICAgICAodG9nZ2xlQWxsKT1cIm9uVG9nZ2xlQWxsKCRldmVudClcIlxuICAgICAgICBbdG9nZ2xlQWxsQ2hlY2tib3hDaGVja2VkXT1cImlzVG9nZ2xlQWxsQ2hlY2tlZFwiXG4gICAgICAgIFt0b2dnbGVBbGxDaGVja2JveEluZGV0ZXJtaW5hdGVdPVwiaXNUb2dnbGVBbGxJbmRldGVybWluYXRlXCJcbiAgICAgICAgW25vRW50cmllc0ZvdW5kTGFiZWxdPVwibm9PcHRpb25zRm91bmRMYWJlbCgpXCJcbiAgICAgID5cbiAgICAgICAgPHdhdHQtaWNvbiBuZ3hNYXRTZWxlY3RTZWFyY2hDbGVhciBuYW1lPVwiY2xvc2VcIiBzaXplPVwic1wiIC8+XG4gICAgICA8L25neC1tYXQtc2VsZWN0LXNlYXJjaD5cbiAgICA8L21hdC1vcHRpb24+XG5cbiAgICBAaWYgKCFtdWx0aXBsZSgpICYmIHNob3dSZXNldE9wdGlvbigpKSB7XG4gICAgICA8bWF0LW9wdGlvbj57eyBlbURhc2ggfX08L21hdC1vcHRpb24+XG4gICAgfVxuXG4gICAgQGZvciAob3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9ucyQgfCBwdXNoOyB0cmFjayBvcHRpb24pIHtcbiAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIiBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCI+XG4gICAgICAgIHt7IG9wdGlvbi5kaXNwbGF5VmFsdWUgfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICB9XG4gIDwvbWF0LXNlbGVjdD5cbiAgPG5nLWNvbnRlbnQgLz5cbiAgPG5nLWNvbnRlbnQgbmdQcm9qZWN0QXM9XCJ3YXR0LWZpZWxkLWhpbnRcIiBzZWxlY3Q9XCJ3YXR0LWZpZWxkLWhpbnRcIiAvPlxuICA8bmctY29udGVudCBuZ1Byb2plY3RBcz1cIndhdHQtZmllbGQtZXJyb3JcIiBzZWxlY3Q9XCJ3YXR0LWZpZWxkLWVycm9yXCIgLz5cbjwvd2F0dC1maWVsZD5cbiJdfQ==
|
|
346
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS9kcm9wZG93bi93YXR0LWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL2Ryb3Bkb3duL3dhdHQtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCO0FBQ2pCOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFlBQVk7QUFDWixPQUFPLEVBQ0wsS0FBSyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUVOLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULFVBQVUsRUFDVixpQkFBaUIsRUFDakIsUUFBUSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxTQUFTLEVBRVQsV0FBVyxFQUdYLGtCQUFrQixFQUNsQixtQkFBbUIsR0FFcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQWEsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFF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aWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBFbmVyZ2luZXQgRGF0YUh1YiBBL1NcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlMlwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyNlbmRyZWdpb25cbmltcG9ydCB7XG4gIGlucHV0LFxuICBtb2RlbCxcbiAgc2lnbmFsLFxuICBlZmZlY3QsXG4gIE9uSW5pdCxcbiAgaW5qZWN0LFxuICBDb21wb25lbnQsXG4gIHZpZXdDaGlsZCxcbiAgRGVzdHJveVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNvbXB1dGVkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgTmdDb250cm9sLFxuICBWYWxpZGF0b3JGbixcbiAgRm9ybUNvbnRyb2wsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIEFzeW5jVmFsaWRhdG9yRm4sXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IFJ4UHVzaCB9IGZyb20gJ0ByeC1hbmd1bGFyL3RlbXBsYXRlL3B1c2gnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5pbXBvcnQgeyBvZiwgUmVwbGF5U3ViamVjdCwgbWFwLCB0YWtlLCBtZXJnZVdpdGggfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5neE1hdFNlbGVjdFNlYXJjaE1vZHVsZSB9IGZyb20gJ25neC1tYXQtc2VsZWN0LXNlYXJjaCc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUsIE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBNYXRPcHRpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcblxuaW1wb3J0IHsgV2F0dEljb25Db21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvaWNvbic7XG5pbXBvcnQgeyBXYXR0RmllbGRDb21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvZmllbGQnO1xuaW1wb3J0IHsgV2F0dE1lbnVDaGlwQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2NoaXAnO1xuXG5pbXBvcnQgdHlwZSB7IFdhdHREcm9wZG93blZhbHVlIH0gZnJvbSAnLi93YXR0LWRyb3Bkb3duLXZhbHVlJztcbmltcG9ydCB0eXBlIHtcbiAgV2F0dERyb3Bkb3duT3B0aW9ucyxcbiAgV2F0dERyb3Bkb3duT3B0aW9uR3JvdXAsXG4gIFdhdHREcm9wZG93bkdyb3VwZWRPcHRpb25zLFxufSBmcm9tICcuL3dhdHQtZHJvcGRvd24tb3B0aW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2F0dC1kcm9wZG93bicsXG4gIHRlbXBsYXRlVXJsOiAnLi93YXR0LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vd2F0dC1kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgUnhQdXNoLFxuICAgIE5nQ2xhc3MsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIE1hdE9wdGlvbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE5neE1hdFNlbGVjdFNlYXJjaE1vZHVsZSxcblxuICAgIFdhdHRJY29uQ29tcG9uZW50LFxuICAgIFdhdHRGaWVsZENvbXBvbmVudCxcbiAgICBXYXR0TWVudUNoaXBDb21wb25lbnQsXG4gIF0sXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIud2F0dC1maWVsZC1kaXNhYmxlZF0nOiAnaXNEaXNhYmxlZCgpJyxcbiAgICAnW2NsYXNzLndhdHQtY2hpcC1tb2RlXSc6ICdjaGlwTW9kZSgpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgV2F0dERyb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XG4gIHByaXZhdGUgcGFyZW50Q29udHJvbERpcmVjdGl2ZSA9IGluamVjdChOZ0NvbnRyb2wsIHsgaG9zdDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIHZhbGlkYXRlUGFyZW50PzogVmFsaWRhdG9yRm47XG4gIHByaXZhdGUgdmFsaWRhdGVQYXJlbnRBc3luYz86IEFzeW5jVmFsaWRhdG9yRm47XG4gIHByaXZhdGUgX29wdGlvbnM6IFdhdHREcm9wZG93bk9wdGlvbnMgPSBbXTtcbiAgcHJpdmF0ZSBfZ3JvdXBlZE9wdGlvbnM6IFdhdHREcm9wZG93bkdyb3VwZWRPcHRpb25zID0gW107XG4gIHBhcmVudENvbnRyb2w6IEZvcm1Db250cm9sIHwgbnVsbCA9IG51bGw7XG4gIG1hdFNlbGVjdENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQgfCBudWxsPihudWxsKTtcblxuICAvKipcbiAgICogQ29udHJvbCBmb3IgdGhlIE1hdFNlbGVjdCBmaWx0ZXIga2V5d29yZFxuICAgKi9cbiAgZmlsdGVyQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcblxuICAvKipcbiAgICogTGlzdCBvZiBvcHRpb25zIGZpbHRlcmVkIGJ5IHNlYXJjaCBrZXl3b3JkXG4gICAqL1xuICBmaWx0ZXJlZE9wdGlvbnMkID0gbmV3IFJlcGxheVN1YmplY3Q8V2F0dERyb3Bkb3duT3B0aW9ucz4oMSk7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgZ3JvdXBlZCBvcHRpb25zIGZpbHRlcmVkIGJ5IHNlYXJjaCBrZXl3b3JkXG4gICAqL1xuICBmaWx0ZXJlZEdyb3VwZWRPcHRpb25zJCA9IG5ldyBSZXBsYXlTdWJqZWN0PFdhdHREcm9wZG93bkdyb3VwZWRPcHRpb25zPigxKTtcblxuICBtZXJnZWRGaWx0ZXJlZE9wdGlvbnMkID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMkLnBpcGUoXG4gICAgbWVyZ2VXaXRoKHRoaXMuZmlsdGVyZWRHcm91cGVkT3B0aW9ucyQpLFxuICAgIHRha2UoMSksXG4gICAgbWFwKChvcHRpb25zKSA9PiB7XG4gICAgICBpZiAodGhpcy5oYXNHcm91cHMoKSkge1xuICAgICAgICByZXR1cm4gKG9wdGlvbnMgYXMgV2F0dERyb3Bkb3duR3JvdXBlZE9wdGlvbnMpXG4gICAgICAgICAgLmZsYXRNYXAoKGdyb3VwKSA9PiAoJ29wdGlvbnMnIGluIGdyb3VwID8gZ3JvdXAub3B0aW9ucyA6IFtdKSlcbiAgICAgICAgICAubWFwKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAob3B0aW9ucyBhcyBXYXR0RHJvcGRvd25PcHRpb25zKS5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKTtcbiAgICB9KVxuICApO1xuXG4gIGVtRGFzaCA9ICfigJQnO1xuICBpc1RvZ2dsZUFsbENoZWNrZWQgPSBmYWxzZTtcbiAgaXNUb2dnbGVBbGxJbmRldGVybWluYXRlID0gZmFsc2U7XG4gIGlzRGlzYWJsZWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gIGdldCBzaG93VHJpZ2dlclZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG11bHRpcGxlID0gdGhpcy5tdWx0aXBsZSgpO1xuICAgIHJldHVybiAobXVsdGlwbGUgJiZcbiAgICAgIHRoaXMubWF0U2VsZWN0Q29udHJvbC52YWx1ZT8ubGVuZ3RoID09PSAxICYmXG4gICAgICB0aGlzLm1hdFNlbGVjdENvbnRyb2wudmFsdWVbMF0gIT09ICcnKSB8fFxuICAgICAgKCFtdWx0aXBsZSAmJiB0aGlzLm1hdFNlbGVjdCgpPy50cmlnZ2VyVmFsdWUpXG4gICAgICA/IHRydWVcbiAgICAgIDogZmFsc2U7XG4gIH1cblxuICBnZXQgc2hvd0NoaXBMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSgpICYmIHRoaXMubWF0U2VsZWN0Q29udHJvbC52YWx1ZSAmJiB0aGlzLm1hdFNlbGVjdENvbnRyb2wudmFsdWUubGVuZ3RoID4gMVxuICAgICAgPyB0cnVlXG4gICAgICA6IGZhbHNlO1xuICB9XG5cbiAgbWF0U2VsZWN0ID0gdmlld0NoaWxkPE1hdFNlbGVjdD4oJ21hdFNlbGVjdCcpO1xuICBoaWRlU2VhcmNoID0gaW5wdXQoZmFsc2UpO1xuICBwYW5lbFdpZHRoID0gaW5wdXQ8bnVsbCB8ICdhdXRvJz4obnVsbCk7XG4gIGdldEN1c3RvbVRyaWdnZXIgPSBpbnB1dDwodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSA9PiBzdHJpbmc+KCk7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbW9kZSBvZiB0aGUgZHJvcGRvd24uXG4gICAqL1xuICBjaGlwTW9kZSA9IGlucHV0KGZhbHNlKTtcbiAgZGlzYWJsZVNlbGVjdGVkTW9kZSA9IGlucHV0KGZhbHNlKTtcbiAgc29ydERpcmVjdGlvbiA9IGlucHV0PCdhc2MnIHwgJ2Rlc2MnPigpO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBvcHRpb25zIGZvciB0aGUgZHJvcGRvd24uXG4gICAqIENhbiBiZSBhIGZsYXQgYXJyYXkgb2Ygb3B0aW9ucyBvciBhbiBhcnJheSBjb250YWluaW5nIGJvdGggb3B0aW9ucyBhbmQgb3B0aW9uIGdyb3Vwcy5cbiAgICovXG4gIG9wdGlvbnMgPSBtb2RlbDxXYXR0RHJvcGRvd25PcHRpb25zIHwgV2F0dERyb3Bkb3duR3JvdXBlZE9wdGlvbnM+KFtdKTtcblxuICAvKipcbiAgICogU2V0cyBzdXBwb3J0IGZvciBzZWxlY3RpbmcgbXVsdGlwbGUgZHJvcGRvd24gb3B0aW9ucy5cbiAgICovXG4gIG11bHRpcGxlID0gaW5wdXQoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBTZXRzIHN1cHBvcnQgZm9yIGhpZGluZyB0aGUgcmVzZXQgb3B0aW9uIGluIFwic2luZ2xlXCIgc2VsZWN0IG1vZGUuXG4gICAqL1xuICBzaG93UmVzZXRPcHRpb24gPSBpbnB1dCh0cnVlKTtcblxuICAvKipcbiAgICogU2V0cyB0aGUgcGxhY2Vob2xkZXIgZm9yIHRoZSBkcm9wZG93bi5cbiAgICovXG4gIHBsYWNlaG9sZGVyID0gaW5wdXQoJycpO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBsYWJlbCBmb3IgdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgbGFiZWwgPSBpbnB1dCgnJyk7XG5cbiAgLyoqXG4gICAqIExhYmVsIHRvIGJlIHNob3duIHdoZW4gbm8gb3B0aW9ucyBhcmUgZm91bmQgYWZ0ZXIgZmlsdGVyaW5nLlxuICAgKlxuICAgKiBOb3RlOiBUaGUgbGFiZWwgaXMgdmlzaWJsZSBpbiBcIm11bHRpcGxlXCIgbW9kZSBvbmx5LlxuICAgKi9cbiAgbm9PcHRpb25zRm91bmRMYWJlbCA9IGlucHV0KCcnKTtcblxuICBoYXNHcm91cHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucygpO1xuICAgIHJldHVybiBvcHRpb25zLnNvbWUoXG4gICAgICAob3B0aW9uKSA9PiAnb3B0aW9ucycgaW4gb3B0aW9uICYmIEFycmF5LmlzQXJyYXkoKG9wdGlvbiBhcyBXYXR0RHJvcGRvd25PcHRpb25Hcm91cCkub3B0aW9ucylcbiAgICApO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucygpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uc0NvcHkgPSBbLi4ub3B0aW9uc107XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzR3JvdXBzKCkpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUdyb3VwKG9wdGlvbnNDb3B5IGFzIFdhdHREcm9wZG93bkdyb3VwZWRPcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUZsYXQob3B0aW9uc0NvcHkgYXMgV2F0dERyb3Bkb3duT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnBhcmVudENvbnRyb2xEaXJlY3RpdmUudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZsYXQob3B0aW9uc0NvcHk6IFdhdHREcm9wZG93bk9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5zb3J0RGlyZWN0aW9uKCkpIHtcbiAgICAgIG9wdGlvbnNDb3B5ID0gdGhpcy5zb3J0T3B0aW9ucyhvcHRpb25zQ29weSk7XG4gICAgfVxuXG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnNDb3B5O1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zJC5uZXh0KHRoaXMuX29wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVHcm91cChvcHRpb25zQ29weTogV2F0dERyb3Bkb3duR3JvdXBlZE9wdGlvbnMpIHtcbiAgICB0aGlzLl9ncm91cGVkT3B0aW9ucyA9IHRoaXMucHJvY2Vzc0dyb3VwZWRPcHRpb25zKG9wdGlvbnNDb3B5KTtcbiAgICB0aGlzLmZpbHRlcmVkR3JvdXBlZE9wdGlvbnMkLm5leHQodGhpcy5fZ3JvdXBlZE9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzR3JvdXBlZE9wdGlvbnMob3B0aW9uczogV2F0dERyb3Bkb3duR3JvdXBlZE9wdGlvbnMpOiBXYXR0RHJvcGRvd25Hcm91cGVkT3B0aW9ucyB7XG4gICAgcmV0dXJuIG9wdGlvbnMubWFwKChncm91cCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc29ydERpcmVjdGlvbigpKSB7XG4gICAgICAgIGdyb3VwLm9wdGlvbnMgPSB0aGlzLnNvcnRPcHRpb25zKGdyb3VwLm9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdyb3VwO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5saXN0ZW5Gb3JGaWx0ZXJGaWVsZFZhbHVlQ2hhbmdlcygpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVByb3BlcnRpZXNGcm9tUGFyZW50KCk7XG4gICAgdGhpcy5iaW5kUGFyZW50VmFsaWRhdG9yc1RvQ29udHJvbCgpO1xuICAgIHRoaXMuYmluZENvbnRyb2xUb1BhcmVudCgpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogV2F0dERyb3Bkb3duVmFsdWUpIHtcbiAgICB0aGlzLm1hdFNlbGVjdENvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZUZuOiAodmFsdWU6IFdhdHREcm9wZG93blZhbHVlKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5jaGFuZ2VQYXJlbnRWYWx1ZSA9IG9uQ2hhbmdlRm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoRm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLm1hcmtQYXJlbnRDb250cm9sQXNUb3VjaGVkID0gb25Ub3VjaEZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShzaG91bGREaXNhYmxlOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc0Rpc2FibGVkLnNldChzaG91bGREaXNhYmxlKTtcbiAgICBpZiAoc2hvdWxkRGlzYWJsZSkge1xuICAgICAgdGhpcy5tYXRTZWxlY3RDb250cm9sLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYXRTZWxlY3RDb250cm9sLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uVG9nZ2xlQWxsKHRvZ2dsZUFsbFN0YXRlOiBib29sZWFuKSB7XG4gICAgdGhpcy5tZXJnZWRGaWx0ZXJlZE9wdGlvbnMkLnN1YnNjcmliZSgoZmlsdGVyZWRPcHRpb25zOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9uc1RvU2VsZWN0ID0gdG9nZ2xlQWxsU3RhdGUgPyBmaWx0ZXJlZE9wdGlvbnMgOiBbXTtcbiAgICAgIHRoaXMubWF0U2VsZWN0Q29udHJvbC5wYXRjaFZhbHVlKG9wdGlvbnNUb1NlbGVjdCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc29ydE9wdGlvbnMob3B0aW9uczogV2F0dERyb3Bkb3duT3B0aW9ucyk6IFdhdHREcm9wZG93bk9wdGlvbnMge1xuICAgIHJldHVybiBbLi4ub3B0aW9uc10uc29ydCgoYSwgYikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuc29ydERpcmVjdGlvbigpID09PSAnYXNjJ1xuICAgICAgICA/IGEuZGlzcGxheVZhbHVlLmxvY2FsZUNvbXBhcmUoYi5kaXNwbGF5VmFsdWUpXG4gICAgICAgIDogYi5kaXNwbGF5VmFsdWUubG9jYWxlQ29tcGFyZShhLmRpc3BsYXlWYWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvckZpbHRlckZpZWxkVmFsdWVDaGFuZ2VzKCkge1xuICAgIHRoaXMuZmlsdGVyQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucygpO1xuXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSgpKSB7XG4gICAgICAgIHRoaXMuZGV0ZXJtaW5lVG9nZ2xlQWxsQ2hlY2tib3hTdGF0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBwcml2YXRlIGNoYW5nZVBhcmVudFZhbHVlID0gKHZhbHVlOiBXYXR0RHJvcGRvd25WYWx1ZSkgPT4ge1xuICAgIC8vIEludGVudGlvbmFsbHkgbGVmdCBlbXB0eVxuICB9O1xuXG4gIHByaXZhdGUgbWFya1BhcmVudENvbnRyb2xBc1RvdWNoZWQgPSAoKSA9PiB7XG4gICAgLy8gSW50ZW50aW9uYWxseSBsZWZ0IGVtcHR5XG4gIH07XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICpcbiAgICogU3RvcmUgdGhlIHBhcmVudCBjb250cm9sLCBpdHMgdmFsaWRhdG9ycyBhbmQgYXN5bmMgdmFsaWRhdG9ycyBpbiBwcm9wZXJ0aWVzXG4gICAqIG9mIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplUHJvcGVydGllc0Zyb21QYXJlbnQoKSB7XG4gICAgdGhpcy5wYXJlbnRDb250cm9sID0gdGhpcy5wYXJlbnRDb250cm9sRGlyZWN0aXZlLmNvbnRyb2wgYXMgVW50eXBlZEZvcm1Db250cm9sO1xuXG4gICAgdGhpcy52YWxpZGF0ZVBhcmVudCA9XG4gICAgICAodGhpcy5wYXJlbnRDb250cm9sLnZhbGlkYXRvciAmJiB0aGlzLnBhcmVudENvbnRyb2wudmFsaWRhdG9yLmJpbmQodGhpcy5wYXJlbnRDb250cm9sKSkgfHxcbiAgICAgICgoKSA9PiBudWxsKTtcblxuICAgIHRoaXMudmFsaWRhdGVQYXJlbnRBc3luYyA9XG4gICAgICAodGhpcy5wYXJlbnRDb250cm9sLmFzeW5jVmFsaWRhdG9yICYmXG4gICAgICAgIHRoaXMucGFyZW50Q29udHJvbC5hc3luY1ZhbGlkYXRvci5iaW5kKHRoaXMucGFyZW50Q29udHJvbCkpIHx8XG4gICAgICAoKCkgPT4gb2YobnVsbCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICpcbiAgICogSW5oZXJpdCB2YWxpZGF0b3JzIGZyb20gcGFyZW50IGZvcm0gY29udHJvbC5cbiAgICovXG4gIHByaXZhdGUgYmluZFBhcmVudFZhbGlkYXRvcnNUb0NvbnRyb2woKSB7XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9ICF0aGlzLm1hdFNlbGVjdENvbnRyb2wudmFsaWRhdG9yXG4gICAgICA/IFt0aGlzLnZhbGlkYXRlUGFyZW50XVxuICAgICAgOiBBcnJheS5pc0FycmF5KHRoaXMubWF0U2VsZWN0Q29udHJvbC52YWxpZGF0b3IpXG4gICAgICAgID8gWy4uLnRoaXMubWF0U2VsZWN0Q29udHJvbC52YWxpZGF0b3IsIHRoaXMudmFsaWRhdGVQYXJlbnRdXG4gICAgICAgIDogW3RoaXMubWF0U2VsZWN0Q29udHJvbC52YWxpZGF0b3IsIHRoaXMudmFsaWRhdGVQYXJlbnRdO1xuICAgIHRoaXMubWF0U2VsZWN0Q29udHJvbC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuXG4gICAgY29uc3QgYXN5bmNWYWxpZGF0b3JzID0gIXRoaXMubWF0U2VsZWN0Q29udHJvbC5hc3luY1ZhbGlkYXRvclxuICAgICAgPyBbdGhpcy52YWxpZGF0ZVBhcmVudEFzeW5jXVxuICAgICAgOiBBcnJheS5pc0FycmF5KHRoaXMubWF0U2VsZWN0Q29udHJvbC5hc3luY1ZhbGlkYXRvcilcbiAgICAgICAgPyBbLi4udGhpcy5tYXRTZWxlY3RDb250cm9sLmFzeW5jVmFsaWRhdG9yLCB0aGlzLnZhbGlkYXRlUGFyZW50QXN5bmNdXG4gICAgICAgIDogW3RoaXMubWF0U2VsZWN0Q29udHJvbC5hc3luY1ZhbGlkYXRvciwgdGhpcy52YWxpZGF0ZVBhcmVudEFzeW5jXTtcbiAgICB0aGlzLm1hdFNlbGVjdENvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9ycyk7XG5cbiAgICB0aGlzLm1hdFNlbGVjdENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICpcbiAgICogRW1pdCB2YWx1ZXMgdG8gdGhlIHBhcmVudCBmb3JtIGNvbnRyb2wgd2hlbiBvdXIgZm9ybSBjb250cm9sJ3MgdmFsdWVcbiAgICogY2hhbmdlcy5cbiAgICpcbiAgICogUmVmbGVjdCBwYXJlbnQgdmFsaWRhdGlvbiBlcnJvcnMgaW4gb3VyIGZvcm0gY29udHJvbC5cbiAgICovXG4gIHByaXZhdGUgYmluZENvbnRyb2xUb1BhcmVudCgpIHtcbiAgICB0aGlzLmhhbmRsZVZhbHVlQ2hhbmdlKCk7XG4gICAgdGhpcy5oYW5kbGVTdGF0dXNDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU3RhdHVzQ2hhbmdlKCkge1xuICAgIHRoaXMucGFyZW50Q29udHJvbD8uc3RhdHVzQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChcbiAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgLi4udGhpcy5wYXJlbnRDb250cm9sPy5lcnJvcnMsXG4gICAgICAgICAgICB9KSBhcyBWYWxpZGF0aW9uRXJyb3JzXG4gICAgICAgICksXG4gICAgICAgIG1hcCgoZXJyb3JzKSA9PiAoT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPiAwID8gZXJyb3JzIDogbnVsbCkpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXJyb3JzKSA9PiB7XG4gICAgICAgIHRoaXMubWF0U2VsZWN0Q29udHJvbC5zZXRFcnJvcnMoZXJyb3JzKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWYWx1ZUNoYW5nZSgpIHtcbiAgICB0aGlzLm1hdFNlbGVjdENvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh2YWx1ZSkgPT4gKHZhbHVlID09PSB1bmRlZmluZWQgPyBudWxsIDogdmFsdWUpKSxcbiAgICAgICAgbWFwKCh2YWx1ZTogV2F0dERyb3Bkb3duVmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IFdhdHREcm9wZG93blZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKCkpIHtcbiAgICAgICAgICB0aGlzLmRldGVybWluZVRvZ2dsZUFsbENoZWNrYm94U3RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWFya1BhcmVudENvbnRyb2xBc1RvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VQYXJlbnRWYWx1ZSh2YWx1ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyT3B0aW9ucygpIHtcbiAgICBpZiAoIXRoaXMuX29wdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZWFyY2ggPSAodGhpcy5maWx0ZXJDb250cm9sLnZhbHVlIGFzIHN0cmluZykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoIXNlYXJjaCkge1xuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMkLm5leHQodGhpcy5fb3B0aW9ucy5zbGljZSgpKTtcblxuICAgICAgaWYgKHRoaXMuaGFzR3JvdXBzKCkpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZEdyb3VwZWRPcHRpb25zJC5uZXh0KHRoaXMuX2dyb3VwZWRPcHRpb25zLnNsaWNlKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkRmxhdE9wdGlvbnMgPSB0aGlzLl9vcHRpb25zLmZpbHRlcihcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbi5kaXNwbGF5VmFsdWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaCkgPiAtMVxuICAgICk7XG5cbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyQubmV4dChmaWx0ZXJlZEZsYXRPcHRpb25zKTtcblxuICAgIGlmICh0aGlzLmhhc0dyb3VwcygpKSB7XG4gICAgICB0aGlzLmZpbHRlckdyb3VwcyhzZWFyY2gpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyR3JvdXBzKHNlYXJjaDogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsdGVyZWRHcm91cHMgPSB0aGlzLl9ncm91cGVkT3B0aW9uc1xuICAgICAgLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoISgnb3B0aW9ucycgaW4gaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWx0ZXJlZEdyb3VwT3B0aW9ucyA9IGl0ZW0ub3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmRpc3BsYXlWYWx1ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoKSA+IC0xXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkR3JvdXBPcHRpb25zLmxlbmd0aCA+IDAgPyB7IC4uLml0ZW0sIG9wdGlvbnM6IGZpbHRlcmVkR3JvdXBPcHRpb25zIH0gOiBudWxsO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgV2F0dERyb3Bkb3duR3JvdXBlZE9wdGlvbnM7XG5cbiAgICB0aGlzLmZpbHRlcmVkR3JvdXBlZE9wdGlvbnMkLm5leHQoZmlsdGVyZWRHcm91cHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlcm1pbmVUb2dnbGVBbGxDaGVja2JveFN0YXRlKCkge1xuICAgIHRoaXMubWVyZ2VkRmlsdGVyZWRPcHRpb25zJC5zdWJzY3JpYmUoKGZpbHRlcmVkT3B0aW9uczogc3RyaW5nW10pID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9ucyA9IHRoaXMubWF0U2VsZWN0Q29udHJvbC52YWx1ZTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2VsZWN0ZWRPcHRpb25zKSkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEZpbHRlcmVkT3B0aW9ucyA9IGZpbHRlcmVkT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMuaW5jbHVkZXMob3B0aW9uKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuaXNUb2dnbGVBbGxJbmRldGVybWluYXRlID1cbiAgICAgICAgICBzZWxlY3RlZEZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJlZE9wdGlvbnMubGVuZ3RoIDwgZmlsdGVyZWRPcHRpb25zLmxlbmd0aDtcblxuICAgICAgICB0aGlzLmlzVG9nZ2xlQWxsQ2hlY2tlZCA9XG4gICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIHNlbGVjdGVkRmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gZmlsdGVyZWRPcHRpb25zLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPCEtLVxuQGxpY2Vuc2VcbkNvcHlyaWdodCAyMDIwIEVuZXJnaW5ldCBEYXRhSHViIEEvU1xuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlMlwiKTtcbnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxubGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLT5cbjx3YXR0LWZpZWxkXG4gIFtjb250cm9sXT1cInBhcmVudENvbnRyb2xcIlxuICBbY2hpcE1vZGVdPVwiY2hpcE1vZGUoKVwiXG4gIFtsYWJlbF09XCJsYWJlbCgpXCJcbiAgKGNsaWNrKT1cIm1hdFNlbGVjdC5vcGVuKClcIlxuPlxuICBAaWYgKGNoaXBNb2RlKCkpIHtcbiAgICA8d2F0dC1tZW51LWNoaXBcbiAgICAgIFtvcGVuZWRdPVwibWF0U2VsZWN0LnBhbmVsT3BlblwiXG4gICAgICAodG9nZ2xlKT1cIm1hdFNlbGVjdC5vcGVuKClcIlxuICAgICAgW3NlbGVjdGVkXT1cIiEhbWF0U2VsZWN0Py50cmlnZ2VyVmFsdWUgJiYgIWRpc2FibGVTZWxlY3RlZE1vZGUoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwibWF0U2VsZWN0Q29udHJvbC5kaXNhYmxlZFwiXG4gICAgPlxuICAgICAge3sgcGxhY2Vob2xkZXIoKSB9fVxuICAgICAgQGlmIChzaG93VHJpZ2dlclZhbHVlKSB7XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgIEBpZiAocGxhY2Vob2xkZXIoKSkge1xuICAgICAgICAgICAgOlxuICAgICAgICAgIH1cbiAgICAgICAgICB7eyBnZXRDdXN0b21UcmlnZ2VyKCk/LihtYXRTZWxlY3QudmFsdWUpID8/IG1hdFNlbGVjdD8udHJpZ2dlclZhbHVlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIH1cbiAgICAgIEBpZiAoc2hvd0NoaXBMYWJlbCkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cIndhdHQtY2hpcC1sYWJlbFwiPnt7IG1hdFNlbGVjdENvbnRyb2wudmFsdWU/Lmxlbmd0aCB9fTwvc3Bhbj5cbiAgICAgIH1cbiAgICA8L3dhdHQtbWVudS1jaGlwPlxuICB9XG5cbiAgPG1hdC1zZWxlY3RcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxhYmVsKClcIlxuICAgIFtmb3JtQ29udHJvbF09XCJtYXRTZWxlY3RDb250cm9sXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIoKVwiXG4gICAgI21hdFNlbGVjdFxuICAgIFtwYW5lbFdpZHRoXT1cInBhbmVsV2lkdGgoKVwiXG4gICAgW211bHRpcGxlXT1cIm11bHRpcGxlKClcIlxuICAgIFtuZ0NsYXNzXT1cInsgY2hpcDogY2hpcE1vZGUoKSwgJ21hdC1tZGMtc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGUoKSB9XCJcbiAgICBbcGFuZWxDbGFzc109XCJ7XG4gICAgICAnd2F0dC1kcm9wZG93bi1wYW5lbCc6IHRydWUsXG4gICAgICAnd2F0dC1kcm9wZG93bi1wYW5lbC1jaGlwLW1vZGUnOiBjaGlwTW9kZSgpLFxuICAgICAgJ21hdC1tZGMtc2VsZWN0LXBhbmVsLW11bHRpcGxlJzogbXVsdGlwbGUoKSxcbiAgICB9XCJcbiAgPlxuICAgIDwhLS0gV2UgdXNlIHRoaXMgaW5zdGVhZCBvZiBuZ0lmLCBzaW5jZSBpdCB3aWxsIHRyaWdnZXIgYSBORzAxMDA6IEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3I6IEV4cHJlc3Npb24gaGFzIGNoYW5nZWQgYWZ0ZXIgaXQgd2FzIGNoZWNrZWQuIC0tPlxuICAgIDxtYXQtb3B0aW9uIFtzdHlsZS5kaXNwbGF5XT1cIiFoaWRlU2VhcmNoKCkgPyAnYmxvY2snIDogJ25vbmUnXCI+XG4gICAgICA8bmd4LW1hdC1zZWxlY3Qtc2VhcmNoXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJmaWx0ZXJDb250cm9sXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyTGFiZWxdPVwicGxhY2Vob2xkZXIoKVwiXG4gICAgICAgIGNsb3NlSWNvbj1cImNsb3NlXCJcbiAgICAgICAgW3Nob3dUb2dnbGVBbGxDaGVja2JveF09XCJtdWx0aXBsZSgpXCJcbiAgICAgICAgKHRvZ2dsZUFsbCk9XCJvblRvZ2dsZUFsbCgkZXZlbnQpXCJcbiAgICAgICAgW3RvZ2dsZUFsbENoZWNrYm94Q2hlY2tlZF09XCJpc1RvZ2dsZUFsbENoZWNrZWRcIlxuICAgICAgICBbdG9nZ2xlQWxsQ2hlY2tib3hJbmRldGVybWluYXRlXT1cImlzVG9nZ2xlQWxsSW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgIFtub0VudHJpZXNGb3VuZExhYmVsXT1cIm5vT3B0aW9uc0ZvdW5kTGFiZWwoKVwiXG4gICAgICA+XG4gICAgICAgIDx3YXR0LWljb24gbmd4TWF0U2VsZWN0U2VhcmNoQ2xlYXIgbmFtZT1cImNsb3NlXCIgc2l6ZT1cInNcIiAvPlxuICAgICAgPC9uZ3gtbWF0LXNlbGVjdC1zZWFyY2g+XG4gICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgQGlmICghbXVsdGlwbGUoKSAmJiBzaG93UmVzZXRPcHRpb24oKSkge1xuICAgICAgPG1hdC1vcHRpb24+e3sgZW1EYXNoIH19PC9tYXQtb3B0aW9uPlxuICAgIH1cblxuICAgIEBpZiAoaGFzR3JvdXBzKCkpIHtcbiAgICAgIEBmb3IgKGl0ZW0gb2YgZmlsdGVyZWRHcm91cGVkT3B0aW9ucyQgfCBwdXNoOyB0cmFjayBpdGVtKSB7XG4gICAgICAgIEBpZiAoXCJvcHRpb25zXCIgaW4gaXRlbSkge1xuICAgICAgICAgIDxtYXQtb3B0Z3JvdXAgW2xhYmVsXT1cIml0ZW0ubGFiZWxcIiBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIGl0ZW0ub3B0aW9uczsgdHJhY2sgb3B0aW9uKSB7XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLm1hdC1tZGMtb3B0aW9uLW11bHRpcGxlXT1cIm11bHRpcGxlKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgb3B0aW9uLmRpc3BsYXlWYWx1ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9tYXQtb3B0Z3JvdXA+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgIEBmb3IgKG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMkIHwgcHVzaDsgdHJhY2sgb3B0aW9uKSB7XG4gICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXG4gICAgICAgICAgW2NsYXNzLm1hdC1tZGMtb3B0aW9uLW11bHRpcGxlXT1cIm11bHRpcGxlKClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgb3B0aW9uLmRpc3BsYXlWYWx1ZSB9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICB9XG4gICAgfVxuICA8L21hdC1zZWxlY3Q+XG4gIDxuZy1jb250ZW50IC8+XG4gIDxuZy1jb250ZW50IG5nUHJvamVjdEFzPVwid2F0dC1maWVsZC1oaW50XCIgc2VsZWN0PVwid2F0dC1maWVsZC1oaW50XCIgLz5cbiAgPG5nLWNvbnRlbnQgbmdQcm9qZWN0QXM9XCJ3YXR0LWZpZWxkLWVycm9yXCIgc2VsZWN0PVwid2F0dC1maWVsZC1lcnJvclwiIC8+XG48L3dhdHQtZmllbGQ+XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@energinet/watt",
|
|
4
|
-
"version": "4.0.
|
|
4
|
+
"version": "4.0.20",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": {
|
|
@@ -237,7 +237,7 @@
|
|
|
237
237
|
}
|
|
238
238
|
},
|
|
239
239
|
"peerDependencies": {
|
|
240
|
-
"@analogjs/vite-plugin-angular": "^1.20",
|
|
240
|
+
"@analogjs/vite-plugin-angular": "^1.20.0",
|
|
241
241
|
"@angular/cdk": "^20.1.3",
|
|
242
242
|
"@angular/common": "^20.1.3",
|
|
243
243
|
"@angular/compiler": "^20.1.3",
|