@up_si_vale/sivale-componentes-angular 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/atoms/button/button.component.mjs +55 -0
- package/esm2022/lib/atoms/checkbox/checkbox.component.mjs +174 -0
- package/esm2022/lib/atoms/date-picker/date-picker.component.mjs +835 -0
- package/esm2022/lib/atoms/input/input.component.mjs +218 -0
- package/esm2022/lib/atoms/loader/loader.component.mjs +81 -0
- package/esm2022/lib/atoms/radio/radio.component.mjs +142 -0
- package/esm2022/lib/atoms/textarea/textarea.component.mjs +126 -0
- package/esm2022/lib/directives/asset-source.directive.mjs +68 -0
- package/esm2022/lib/directives/icon-source.directive.mjs +65 -0
- package/esm2022/lib/directives/no-leading-space.directive.mjs +24 -0
- package/esm2022/lib/directives/only-letters.directive.mjs +25 -0
- package/esm2022/lib/directives/only-number.directive.mjs +21 -0
- package/esm2022/lib/directives/rfc.directive.mjs +67 -0
- package/esm2022/lib/directives/tooltip.directive.mjs +199 -0
- package/esm2022/lib/models/snackbar.models.mjs +2 -0
- package/esm2022/lib/molecules/alert/alert.component.mjs +79 -0
- package/esm2022/lib/molecules/copy-input/copy-input.component.mjs +46 -0
- package/esm2022/lib/molecules/multiselect/multiselect.component.mjs +466 -0
- package/esm2022/lib/molecules/option/option.component.mjs +55 -0
- package/esm2022/lib/molecules/phone-input/phone-input.component.mjs +64 -0
- package/esm2022/lib/molecules/select/select.component.mjs +498 -0
- package/esm2022/lib/molecules/snackbar/snackbar.component.mjs +581 -0
- package/esm2022/lib/organisms/sidebar/sidebar-icon.component.mjs +91 -0
- package/esm2022/lib/organisms/sidebar/sidebar.component.mjs +115 -0
- package/esm2022/lib/services/snackbar.service.mjs +96 -0
- package/esm2022/lib/tokens/asset-base-url.token.mjs +10 -0
- package/esm2022/public-api.mjs +37 -0
- package/esm2022/up_si_vale-sivale-componentes-angular.mjs +5 -0
- package/fesm2022/up_si_vale-sivale-componentes-angular.mjs +4116 -0
- package/fesm2022/up_si_vale-sivale-componentes-angular.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/atoms/button/button.component.d.ts +20 -0
- package/lib/atoms/checkbox/checkbox.component.d.ts +31 -0
- package/lib/atoms/date-picker/date-picker.component.d.ts +134 -0
- package/lib/atoms/input/input.component.d.ts +35 -0
- package/lib/atoms/loader/loader.component.d.ts +10 -0
- package/lib/atoms/radio/radio.component.d.ts +25 -0
- package/lib/atoms/textarea/textarea.component.d.ts +27 -0
- package/lib/directives/asset-source.directive.d.ts +19 -0
- package/lib/directives/icon-source.directive.d.ts +18 -0
- package/lib/directives/no-leading-space.directive.d.ts +6 -0
- package/lib/directives/only-letters.directive.d.ts +7 -0
- package/lib/directives/only-number.directive.d.ts +6 -0
- package/lib/directives/rfc.directive.d.ts +12 -0
- package/lib/directives/tooltip.directive.d.ts +27 -0
- package/{src/lib/models/snackbar.models.ts → lib/models/snackbar.models.d.ts} +8 -10
- package/lib/molecules/alert/alert.component.d.ts +29 -0
- package/lib/molecules/copy-input/copy-input.component.d.ts +14 -0
- package/lib/molecules/multiselect/multiselect.component.d.ts +74 -0
- package/lib/molecules/option/option.component.d.ts +19 -0
- package/lib/molecules/phone-input/phone-input.component.d.ts +12 -0
- package/lib/molecules/select/select.component.d.ts +88 -0
- package/lib/molecules/snackbar/snackbar.component.d.ts +17 -0
- package/lib/organisms/sidebar/sidebar-icon.component.d.ts +8 -0
- package/lib/organisms/sidebar/sidebar.component.d.ts +47 -0
- package/lib/services/snackbar.service.d.ts +40 -0
- package/{src/lib/tokens/asset-base-url.token.ts → lib/tokens/asset-base-url.token.d.ts} +1 -5
- package/package.json +39 -28
- package/{src/public-api.ts → public-api.d.ts} +3 -15
- package/ng-package.json +0 -9
- package/src/lib/atoms/button/button.component.html +0 -21
- package/src/lib/atoms/button/button.component.scss +0 -242
- package/src/lib/atoms/button/button.component.ts +0 -43
- package/src/lib/atoms/checkbox/checkbox.component.scss +0 -131
- package/src/lib/atoms/checkbox/checkbox.component.ts +0 -130
- package/src/lib/atoms/date-picker/date-picker.component.html +0 -295
- package/src/lib/atoms/date-picker/date-picker.component.scss +0 -1002
- package/src/lib/atoms/date-picker/date-picker.component.ts +0 -942
- package/src/lib/atoms/input/input.component.ts +0 -239
- package/src/lib/atoms/loader/loader.component.scss +0 -144
- package/src/lib/atoms/loader/loader.component.ts +0 -44
- package/src/lib/atoms/radio/radio.component.scss +0 -115
- package/src/lib/atoms/radio/radio.component.ts +0 -103
- package/src/lib/atoms/textarea/textarea.component.ts +0 -155
- package/src/lib/directives/asset-source.directive.ts +0 -64
- package/src/lib/directives/icon-source.directive.ts +0 -74
- package/src/lib/directives/no-leading-space.directive.ts +0 -18
- package/src/lib/directives/only-letters.directive.ts +0 -21
- package/src/lib/directives/only-number.directive.ts +0 -15
- package/src/lib/directives/rfc.directive.ts +0 -60
- package/src/lib/directives/tooltip.directive.ts +0 -211
- package/src/lib/molecules/copy-input/copy-input.component.html +0 -29
- package/src/lib/molecules/copy-input/copy-input.component.scss +0 -101
- package/src/lib/molecules/copy-input/copy-input.component.ts +0 -41
- package/src/lib/molecules/multiselect/multiselect.component.scss +0 -298
- package/src/lib/molecules/multiselect/multiselect.component.ts +0 -487
- package/src/lib/molecules/option/option.component.ts +0 -45
- package/src/lib/molecules/phone-input/phone-input.component.scss +0 -78
- package/src/lib/molecules/phone-input/phone-input.component.ts +0 -43
- package/src/lib/molecules/select/select.component.ts +0 -482
- package/src/lib/molecules/snackbar/snackbar.component.scss +0 -201
- package/src/lib/molecules/snackbar/snackbar.component.ts +0 -321
- package/src/lib/services/snackbar.service.ts +0 -103
- package/tsconfig.json +0 -31
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { InputComponent } from '../../atoms/input/input.component';
|
|
4
|
+
import { SelectComponent } from '../select/select.component';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
export class PhoneInputComponent {
|
|
8
|
+
label = 'Teléfono';
|
|
9
|
+
hasError = false;
|
|
10
|
+
errorMessage = '';
|
|
11
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PhoneInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PhoneInputComponent, isStandalone: true, selector: "app-phone-input", inputs: { label: "label", hasError: "hasError", errorMessage: "errorMessage" }, ngImport: i0, template: `
|
|
13
|
+
<div class="svu-phone-input" [class.svu-phone-input--error]="hasError">
|
|
14
|
+
<label *ngIf="label" class="svu-phone-input__label">
|
|
15
|
+
{{ label }}
|
|
16
|
+
</label>
|
|
17
|
+
|
|
18
|
+
<div class="svu-phone-input__field">
|
|
19
|
+
<div class="svu-phone-input__country">
|
|
20
|
+
<ng-content select="[countrySelect]"></ng-content>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<div class="svu-phone-input__number">
|
|
24
|
+
<ng-content select="[phoneInput]"></ng-content>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<span *ngIf="hasError && errorMessage" class="svu-phone-input__error">
|
|
29
|
+
{{ errorMessage }}
|
|
30
|
+
</span>
|
|
31
|
+
</div>
|
|
32
|
+
`, isInline: true, styles: [".svu-phone-input{display:flex;flex-direction:column;width:100%;margin-bottom:6px;padding:0 4px}.svu-phone-input__label{display:block;margin-bottom:.5rem;font-family:Quicksand,sans-serif;font-weight:500;font-size:14px;color:#585d61}.svu-phone-input__field{position:relative;display:flex;align-items:stretch;min-height:44px;height:44px;border:1px solid #EAECF5;box-shadow:0 1px 2px #a1afec66;border-radius:8px;transition:all .2s ease;background:#fff}.svu-phone-input__field:hover{border-color:#fbd399}.svu-phone-input__field:focus-within{border-color:#fbd399;box-shadow:0 0 0 4px #ffe8c8,0 1px 2px #0a0d120d}.svu-phone-input__country{flex:0;width:120px;display:flex;align-items:stretch;min-width:64px}.svu-phone-input__number{flex:1;min-width:0;display:flex;align-items:stretch}.svu-phone-input.svu-phone-input--error .svu-phone-input__field{border-color:#dc3545!important}.svu-phone-input.svu-phone-input--error .svu-phone-input__field:focus-within{box-shadow:0 0 0 3px #dc35451a!important}.svu-phone-input__error{color:#f04438;font-size:.875rem;margin-top:.25rem;font-family:Quicksand,sans-serif}@media (max-width: 640px){.svu-phone-input__country{width:100px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
33
|
+
}
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PhoneInputComponent, decorators: [{
|
|
35
|
+
type: Component,
|
|
36
|
+
args: [{ selector: 'app-phone-input', standalone: true, imports: [CommonModule, InputComponent, SelectComponent], template: `
|
|
37
|
+
<div class="svu-phone-input" [class.svu-phone-input--error]="hasError">
|
|
38
|
+
<label *ngIf="label" class="svu-phone-input__label">
|
|
39
|
+
{{ label }}
|
|
40
|
+
</label>
|
|
41
|
+
|
|
42
|
+
<div class="svu-phone-input__field">
|
|
43
|
+
<div class="svu-phone-input__country">
|
|
44
|
+
<ng-content select="[countrySelect]"></ng-content>
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<div class="svu-phone-input__number">
|
|
48
|
+
<ng-content select="[phoneInput]"></ng-content>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<span *ngIf="hasError && errorMessage" class="svu-phone-input__error">
|
|
53
|
+
{{ errorMessage }}
|
|
54
|
+
</span>
|
|
55
|
+
</div>
|
|
56
|
+
`, styles: [".svu-phone-input{display:flex;flex-direction:column;width:100%;margin-bottom:6px;padding:0 4px}.svu-phone-input__label{display:block;margin-bottom:.5rem;font-family:Quicksand,sans-serif;font-weight:500;font-size:14px;color:#585d61}.svu-phone-input__field{position:relative;display:flex;align-items:stretch;min-height:44px;height:44px;border:1px solid #EAECF5;box-shadow:0 1px 2px #a1afec66;border-radius:8px;transition:all .2s ease;background:#fff}.svu-phone-input__field:hover{border-color:#fbd399}.svu-phone-input__field:focus-within{border-color:#fbd399;box-shadow:0 0 0 4px #ffe8c8,0 1px 2px #0a0d120d}.svu-phone-input__country{flex:0;width:120px;display:flex;align-items:stretch;min-width:64px}.svu-phone-input__number{flex:1;min-width:0;display:flex;align-items:stretch}.svu-phone-input.svu-phone-input--error .svu-phone-input__field{border-color:#dc3545!important}.svu-phone-input.svu-phone-input--error .svu-phone-input__field:focus-within{box-shadow:0 0 0 3px #dc35451a!important}.svu-phone-input__error{color:#f04438;font-size:.875rem;margin-top:.25rem;font-family:Quicksand,sans-serif}@media (max-width: 640px){.svu-phone-input__country{width:100px}}\n"] }]
|
|
57
|
+
}], propDecorators: { label: [{
|
|
58
|
+
type: Input
|
|
59
|
+
}], hasError: [{
|
|
60
|
+
type: Input
|
|
61
|
+
}], errorMessage: [{
|
|
62
|
+
type: Input
|
|
63
|
+
}] } });
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2xlY3VsZXMvcGhvbmUtaW5wdXQvcGhvbmUtaW5wdXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBa0MzRSxNQUFNLE9BQU8sbUJBQW1CO0lBQ3JCLEtBQUssR0FBVyxVQUFVLENBQUM7SUFDM0IsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixZQUFZLEdBQVcsRUFBRSxDQUFDO3dHQUh4QixtQkFBbUI7NEZBQW5CLG1CQUFtQiwySkF2QnBCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CVCxvdENBckJTLFlBQVk7OzRGQXdCWCxtQkFBbUI7a0JBM0IvQixTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDLFlBQzlDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CVDs4QkFJUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvaW5wdXQvaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCwgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBob25lVmFsdWUge1xuICBjb3VudHJ5Q29kZTogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXBob25lLWlucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW5wdXRDb21wb25lbnQsIFNlbGVjdENvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInN2dS1waG9uZS1pbnB1dFwiIFtjbGFzcy5zdnUtcGhvbmUtaW5wdXQtLWVycm9yXT1cImhhc0Vycm9yXCI+XG4gICAgICA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIGNsYXNzPVwic3Z1LXBob25lLWlucHV0X19sYWJlbFwiPlxuICAgICAgICB7eyBsYWJlbCB9fVxuICAgICAgPC9sYWJlbD5cblxuICAgICAgPGRpdiBjbGFzcz1cInN2dS1waG9uZS1pbnB1dF9fZmllbGRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN2dS1waG9uZS1pbnB1dF9fY291bnRyeVwiPlxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjb3VudHJ5U2VsZWN0XVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN2dS1waG9uZS1pbnB1dF9fbnVtYmVyXCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Bob25lSW5wdXRdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8c3BhbiAqbmdJZj1cImhhc0Vycm9yICYmIGVycm9yTWVzc2FnZVwiIGNsYXNzPVwic3Z1LXBob25lLWlucHV0X19lcnJvclwiPlxuICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vcGhvbmUtaW5wdXQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQaG9uZUlucHV0Q29tcG9uZW50IHtcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9ICdUZWzDqWZvbm8nO1xuICBASW5wdXQoKSBoYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2U6IHN0cmluZyA9ICcnO1xufVxuXG4iXX0=
|
|
@@ -0,0 +1,498 @@
|
|
|
1
|
+
import { Component, Input, forwardRef, ViewChild, ElementRef, HostListener, ContentChildren, ContentChild, RendererStyleFlags2 } from '@angular/core';
|
|
2
|
+
import { CommonModule, DOCUMENT } from '@angular/common';
|
|
3
|
+
import { NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';
|
|
4
|
+
import { Inject } from '@angular/core';
|
|
5
|
+
import { OptionComponent } from '../option/option.component';
|
|
6
|
+
// Directive markers for prefix/suffix
|
|
7
|
+
import { Directive } from '@angular/core';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/common";
|
|
10
|
+
export class SelectPrefixDirective {
|
|
11
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SelectPrefixDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
12
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: SelectPrefixDirective, isStandalone: true, selector: "[prefix]", ngImport: i0 });
|
|
13
|
+
}
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SelectPrefixDirective, decorators: [{
|
|
15
|
+
type: Directive,
|
|
16
|
+
args: [{
|
|
17
|
+
selector: '[prefix]',
|
|
18
|
+
standalone: true
|
|
19
|
+
}]
|
|
20
|
+
}] });
|
|
21
|
+
export class SelectSuffixDirective {
|
|
22
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SelectSuffixDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
23
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: SelectSuffixDirective, isStandalone: true, selector: "[suffix]", ngImport: i0 });
|
|
24
|
+
}
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SelectSuffixDirective, decorators: [{
|
|
26
|
+
type: Directive,
|
|
27
|
+
args: [{
|
|
28
|
+
selector: '[suffix]',
|
|
29
|
+
standalone: true
|
|
30
|
+
}]
|
|
31
|
+
}] });
|
|
32
|
+
export class SelectComponent {
|
|
33
|
+
renderer;
|
|
34
|
+
document;
|
|
35
|
+
label = '';
|
|
36
|
+
id = '';
|
|
37
|
+
placeholder = '';
|
|
38
|
+
options = [];
|
|
39
|
+
hasError = false;
|
|
40
|
+
errorMessage = '';
|
|
41
|
+
disabled = false;
|
|
42
|
+
unstyled = false;
|
|
43
|
+
displayKey = 'label'; // Property to display as label
|
|
44
|
+
valueKey = 'value'; // Property to use as value
|
|
45
|
+
customClass = ''; // Custom CSS class for styling
|
|
46
|
+
trigger;
|
|
47
|
+
contentOptions;
|
|
48
|
+
prefixDirective;
|
|
49
|
+
suffixDirective;
|
|
50
|
+
get hasPrefix() {
|
|
51
|
+
return !!this.prefixDirective;
|
|
52
|
+
}
|
|
53
|
+
get hasSuffix() {
|
|
54
|
+
return !!this.suffixDirective;
|
|
55
|
+
}
|
|
56
|
+
value = '';
|
|
57
|
+
isOpen = false;
|
|
58
|
+
onChange = () => { };
|
|
59
|
+
onTouched = () => { };
|
|
60
|
+
_usingContentOptions = false;
|
|
61
|
+
dropdownElement = null;
|
|
62
|
+
backdropElement = null;
|
|
63
|
+
scrollHandler = null;
|
|
64
|
+
resizeHandler = null;
|
|
65
|
+
constructor(renderer, document) {
|
|
66
|
+
this.renderer = renderer;
|
|
67
|
+
this.document = document;
|
|
68
|
+
}
|
|
69
|
+
ngAfterContentInit() {
|
|
70
|
+
// Determine if using content projection or input options
|
|
71
|
+
this._usingContentOptions = this.contentOptions && this.contentOptions.length > 0;
|
|
72
|
+
// Subscribe to changes in content options
|
|
73
|
+
if (this.contentOptions) {
|
|
74
|
+
this.contentOptions.changes.subscribe(() => {
|
|
75
|
+
this._usingContentOptions = this.contentOptions.length > 0;
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
ngOnDestroy() {
|
|
80
|
+
this.destroyDropdown();
|
|
81
|
+
}
|
|
82
|
+
onEsc() {
|
|
83
|
+
this.closeDropdown();
|
|
84
|
+
this.onTouched();
|
|
85
|
+
}
|
|
86
|
+
handleBlur() {
|
|
87
|
+
this.onTouched();
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get all options (from content or input)
|
|
91
|
+
*/
|
|
92
|
+
getAllOptions() {
|
|
93
|
+
if (this._usingContentOptions && this.contentOptions) {
|
|
94
|
+
return this.contentOptions.toArray();
|
|
95
|
+
}
|
|
96
|
+
return this.options || [];
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get display label from option
|
|
100
|
+
*/
|
|
101
|
+
getOptionLabel(option) {
|
|
102
|
+
if (option instanceof OptionComponent) {
|
|
103
|
+
return option.viewValue;
|
|
104
|
+
}
|
|
105
|
+
return option?.[this.displayKey] || '';
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get value from option
|
|
109
|
+
*/
|
|
110
|
+
getOptionValue(option) {
|
|
111
|
+
if (option instanceof OptionComponent) {
|
|
112
|
+
return option.value;
|
|
113
|
+
}
|
|
114
|
+
return option?.[this.valueKey];
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Check if option is disabled
|
|
118
|
+
*/
|
|
119
|
+
isOptionDisabled(option) {
|
|
120
|
+
if (option instanceof OptionComponent) {
|
|
121
|
+
return option.disabled;
|
|
122
|
+
}
|
|
123
|
+
return option?.disabled || false;
|
|
124
|
+
}
|
|
125
|
+
onDocumentClick(event) {
|
|
126
|
+
// Close dropdown if click is outside
|
|
127
|
+
if (this.isOpen && this.dropdownElement && !this.dropdownElement.contains(event.target)) {
|
|
128
|
+
const triggerElement = this.trigger?.nativeElement;
|
|
129
|
+
if (triggerElement && !triggerElement.contains(event.target)) {
|
|
130
|
+
this.closeDropdown();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
toggleDropdown(event) {
|
|
135
|
+
event.stopPropagation();
|
|
136
|
+
if (this.disabled)
|
|
137
|
+
return;
|
|
138
|
+
if (this.isOpen) {
|
|
139
|
+
this.closeDropdown();
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
this.openDropdown();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
openDropdown() {
|
|
146
|
+
if (!this.trigger)
|
|
147
|
+
return;
|
|
148
|
+
// Create backdrop
|
|
149
|
+
this.backdropElement = this.renderer.createElement('div');
|
|
150
|
+
this.renderer.addClass(this.backdropElement, 'select-custom-backdrop');
|
|
151
|
+
this.renderer.listen(this.backdropElement, 'click', () => this.closeDropdown());
|
|
152
|
+
this.renderer.appendChild(this.document.body, this.backdropElement);
|
|
153
|
+
// Create dropdown
|
|
154
|
+
this.dropdownElement = this.renderer.createElement('div');
|
|
155
|
+
this.renderer.addClass(this.dropdownElement, 'select-custom-dropdown');
|
|
156
|
+
this.renderer.addClass(this.dropdownElement, 'select-overlay-pane');
|
|
157
|
+
// Calculate position
|
|
158
|
+
const position = this.calculatePosition();
|
|
159
|
+
// Apply positioning styles
|
|
160
|
+
this.renderer.setStyle(this.dropdownElement, 'position', 'fixed');
|
|
161
|
+
this.renderer.setStyle(this.dropdownElement, 'left', position.left);
|
|
162
|
+
this.renderer.setStyle(this.dropdownElement, 'width', position.width);
|
|
163
|
+
this.renderer.setStyle(this.dropdownElement, 'max-height', position.maxHeight);
|
|
164
|
+
this.renderer.setStyle(this.dropdownElement, 'z-index', '100000', RendererStyleFlags2.Important);
|
|
165
|
+
if (position.top) {
|
|
166
|
+
this.renderer.setStyle(this.dropdownElement, 'top', position.top);
|
|
167
|
+
}
|
|
168
|
+
else if (position.bottom) {
|
|
169
|
+
this.renderer.setStyle(this.dropdownElement, 'bottom', position.bottom);
|
|
170
|
+
}
|
|
171
|
+
// Create dropdown content wrapper
|
|
172
|
+
const dropdownContent = this.renderer.createElement('div');
|
|
173
|
+
this.renderer.addClass(dropdownContent, 'select-dropdown');
|
|
174
|
+
// Add options
|
|
175
|
+
const allOptions = this.getAllOptions();
|
|
176
|
+
allOptions.forEach(option => {
|
|
177
|
+
const optionElement = this.createOptionElement(option);
|
|
178
|
+
this.renderer.appendChild(dropdownContent, optionElement);
|
|
179
|
+
});
|
|
180
|
+
this.renderer.appendChild(this.dropdownElement, dropdownContent);
|
|
181
|
+
this.renderer.appendChild(this.document.body, this.dropdownElement);
|
|
182
|
+
this.isOpen = true;
|
|
183
|
+
// Add scroll and resize listeners to reposition dropdown
|
|
184
|
+
this.addRepositionListeners();
|
|
185
|
+
// Trigger animation
|
|
186
|
+
setTimeout(() => {
|
|
187
|
+
if (this.dropdownElement) {
|
|
188
|
+
this.renderer.addClass(this.dropdownElement, 'select-dropdown-open');
|
|
189
|
+
}
|
|
190
|
+
}, 10);
|
|
191
|
+
}
|
|
192
|
+
calculatePosition() {
|
|
193
|
+
const triggerElement = this.trigger.nativeElement;
|
|
194
|
+
const rect = triggerElement.getBoundingClientRect();
|
|
195
|
+
const spaceBelow = window.innerHeight - rect.bottom;
|
|
196
|
+
const spaceAbove = rect.top;
|
|
197
|
+
const dropdownMaxHeight = 300;
|
|
198
|
+
const offsetY = 4;
|
|
199
|
+
const shouldOpenAbove = spaceBelow < 200 && spaceAbove > spaceBelow;
|
|
200
|
+
const position = {
|
|
201
|
+
left: `${rect.left}px`,
|
|
202
|
+
width: `${rect.width}px`,
|
|
203
|
+
maxHeight: `${dropdownMaxHeight}px`
|
|
204
|
+
};
|
|
205
|
+
if (shouldOpenAbove) {
|
|
206
|
+
position.bottom = `${window.innerHeight - rect.top + offsetY}px`;
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
position.top = `${rect.bottom + offsetY}px`;
|
|
210
|
+
}
|
|
211
|
+
return position;
|
|
212
|
+
}
|
|
213
|
+
addRepositionListeners() {
|
|
214
|
+
// Create handlers
|
|
215
|
+
const scrollHandler = () => this.updateDropdownPosition();
|
|
216
|
+
const resizeHandler = () => this.updateDropdownPosition();
|
|
217
|
+
// Add scroll listener to window with capture phase to catch all scroll events
|
|
218
|
+
window.addEventListener('scroll', scrollHandler, true);
|
|
219
|
+
this.scrollHandler = () => window.removeEventListener('scroll', scrollHandler, true);
|
|
220
|
+
// Add resize listener
|
|
221
|
+
window.addEventListener('resize', resizeHandler);
|
|
222
|
+
this.resizeHandler = () => window.removeEventListener('resize', resizeHandler);
|
|
223
|
+
}
|
|
224
|
+
updateDropdownPosition() {
|
|
225
|
+
if (!this.dropdownElement || !this.trigger)
|
|
226
|
+
return;
|
|
227
|
+
const position = this.calculatePosition();
|
|
228
|
+
// Update position styles
|
|
229
|
+
this.renderer.setStyle(this.dropdownElement, 'left', position.left);
|
|
230
|
+
this.renderer.setStyle(this.dropdownElement, 'width', position.width);
|
|
231
|
+
// Remove old top/bottom styles
|
|
232
|
+
this.renderer.removeStyle(this.dropdownElement, 'top');
|
|
233
|
+
this.renderer.removeStyle(this.dropdownElement, 'bottom');
|
|
234
|
+
// Apply new top/bottom position
|
|
235
|
+
if (position.top) {
|
|
236
|
+
this.renderer.setStyle(this.dropdownElement, 'top', position.top);
|
|
237
|
+
}
|
|
238
|
+
else if (position.bottom) {
|
|
239
|
+
this.renderer.setStyle(this.dropdownElement, 'bottom', position.bottom);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
createOptionElement(option) {
|
|
243
|
+
const optionElement = this.renderer.createElement('div');
|
|
244
|
+
this.renderer.addClass(optionElement, 'select-option');
|
|
245
|
+
const optionValue = this.getOptionValue(option);
|
|
246
|
+
const optionLabel = this.getOptionLabel(option);
|
|
247
|
+
const optionDisabled = this.isOptionDisabled(option);
|
|
248
|
+
if (this.isEmptyValue(optionValue)) {
|
|
249
|
+
this.renderer.addClass(optionElement, 'select-option-placeholder');
|
|
250
|
+
}
|
|
251
|
+
if (this.isSelected(optionValue)) {
|
|
252
|
+
this.renderer.addClass(optionElement, 'selected');
|
|
253
|
+
}
|
|
254
|
+
if (optionDisabled) {
|
|
255
|
+
this.renderer.addClass(optionElement, 'disabled');
|
|
256
|
+
}
|
|
257
|
+
// Option text
|
|
258
|
+
const textSpan = this.renderer.createElement('span');
|
|
259
|
+
this.renderer.addClass(textSpan, 'option-text');
|
|
260
|
+
const text = this.renderer.createText(optionLabel);
|
|
261
|
+
this.renderer.appendChild(textSpan, text);
|
|
262
|
+
this.renderer.appendChild(optionElement, textSpan);
|
|
263
|
+
// Check icon for selected option
|
|
264
|
+
if (this.isSelected(optionValue)) {
|
|
265
|
+
const svg = this.createCheckIcon();
|
|
266
|
+
this.renderer.appendChild(optionElement, svg);
|
|
267
|
+
}
|
|
268
|
+
// Click handler
|
|
269
|
+
if (!optionDisabled) {
|
|
270
|
+
this.renderer.listen(optionElement, 'click', (event) => {
|
|
271
|
+
event.stopPropagation();
|
|
272
|
+
this.selectOption(option);
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
return optionElement;
|
|
276
|
+
}
|
|
277
|
+
createCheckIcon() {
|
|
278
|
+
const svg = this.renderer.createElement('svg', 'svg');
|
|
279
|
+
this.renderer.addClass(svg, 'check-icon');
|
|
280
|
+
this.renderer.setAttribute(svg, 'width', '14');
|
|
281
|
+
this.renderer.setAttribute(svg, 'height', '10');
|
|
282
|
+
this.renderer.setAttribute(svg, 'viewBox', '0 0 10 8');
|
|
283
|
+
this.renderer.setAttribute(svg, 'fill', 'none');
|
|
284
|
+
this.renderer.setAttribute(svg, 'xmlns', 'http://www.w3.org/2000/svg');
|
|
285
|
+
const path = this.renderer.createElement('path', 'svg');
|
|
286
|
+
this.renderer.setAttribute(path, 'd', 'M9 1L3.5 6.5L1 4');
|
|
287
|
+
this.renderer.setAttribute(path, 'stroke', '#F59100');
|
|
288
|
+
this.renderer.setAttribute(path, 'stroke-width', '1.6666');
|
|
289
|
+
this.renderer.setAttribute(path, 'stroke-linecap', 'round');
|
|
290
|
+
this.renderer.setAttribute(path, 'stroke-linejoin', 'round');
|
|
291
|
+
this.renderer.appendChild(svg, path);
|
|
292
|
+
return svg;
|
|
293
|
+
}
|
|
294
|
+
closeDropdown() {
|
|
295
|
+
this.destroyDropdown();
|
|
296
|
+
this.isOpen = false;
|
|
297
|
+
}
|
|
298
|
+
destroyDropdown() {
|
|
299
|
+
// Remove listeners
|
|
300
|
+
if (this.scrollHandler) {
|
|
301
|
+
this.scrollHandler();
|
|
302
|
+
this.scrollHandler = null;
|
|
303
|
+
}
|
|
304
|
+
if (this.resizeHandler) {
|
|
305
|
+
this.resizeHandler();
|
|
306
|
+
this.resizeHandler = null;
|
|
307
|
+
}
|
|
308
|
+
if (this.dropdownElement) {
|
|
309
|
+
this.renderer.removeChild(this.document.body, this.dropdownElement);
|
|
310
|
+
this.dropdownElement = null;
|
|
311
|
+
}
|
|
312
|
+
if (this.backdropElement) {
|
|
313
|
+
this.renderer.removeChild(this.document.body, this.backdropElement);
|
|
314
|
+
this.backdropElement = null;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
selectOption(option) {
|
|
318
|
+
if (this.isOptionDisabled(option))
|
|
319
|
+
return;
|
|
320
|
+
this.value = this.getOptionValue(option);
|
|
321
|
+
this.onChange(this.value);
|
|
322
|
+
this.onTouched();
|
|
323
|
+
this.closeDropdown();
|
|
324
|
+
}
|
|
325
|
+
isSelected(value) {
|
|
326
|
+
return this.value === value;
|
|
327
|
+
}
|
|
328
|
+
isEmptyValue(value) {
|
|
329
|
+
return value === '' || value === null || value === undefined;
|
|
330
|
+
}
|
|
331
|
+
getSelectedLabel() {
|
|
332
|
+
const allOptions = this.getAllOptions();
|
|
333
|
+
const selectedOption = allOptions.find(opt => this.getOptionValue(opt) === this.value);
|
|
334
|
+
return selectedOption ? this.getOptionLabel(selectedOption) : '';
|
|
335
|
+
}
|
|
336
|
+
writeValue(value) {
|
|
337
|
+
this.value = value || '';
|
|
338
|
+
}
|
|
339
|
+
registerOnChange(fn) {
|
|
340
|
+
this.onChange = fn;
|
|
341
|
+
}
|
|
342
|
+
registerOnTouched(fn) {
|
|
343
|
+
this.onTouched = fn;
|
|
344
|
+
}
|
|
345
|
+
setDisabledState(isDisabled) {
|
|
346
|
+
this.disabled = isDisabled;
|
|
347
|
+
}
|
|
348
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SelectComponent, deps: [{ token: i0.Renderer2 }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
|
|
349
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SelectComponent, isStandalone: true, selector: "app-select", inputs: { label: "label", id: "id", placeholder: "placeholder", options: "options", hasError: "hasError", errorMessage: "errorMessage", disabled: "disabled", unstyled: "unstyled", displayKey: "displayKey", valueKey: "valueKey", customClass: "customClass" }, host: { listeners: { "keydown.escape": "onEsc()", "document:click": "onDocumentClick($event)" } }, providers: [
|
|
350
|
+
{
|
|
351
|
+
provide: NG_VALUE_ACCESSOR,
|
|
352
|
+
useExisting: forwardRef(() => SelectComponent),
|
|
353
|
+
multi: true
|
|
354
|
+
}
|
|
355
|
+
], queries: [{ propertyName: "prefixDirective", first: true, predicate: SelectPrefixDirective, descendants: true }, { propertyName: "suffixDirective", first: true, predicate: SelectSuffixDirective, descendants: true }, { propertyName: "contentOptions", predicate: OptionComponent }], viewQueries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true, read: ElementRef }], ngImport: i0, template: `
|
|
356
|
+
<div class="select-wrapper" [class.select-wrapper--unstyled]="unstyled" [ngClass]="customClass">
|
|
357
|
+
<label *ngIf="label && !unstyled" [for]="id">{{ label }}</label>
|
|
358
|
+
<div class="select-container" [class.select-container--unstyled]="unstyled">
|
|
359
|
+
<div
|
|
360
|
+
#trigger
|
|
361
|
+
class="select-header"
|
|
362
|
+
[attr.tabindex]="disabled ? -1 : 0"
|
|
363
|
+
[class.error]="hasError && !unstyled"
|
|
364
|
+
[class.disabled]="disabled"
|
|
365
|
+
[class.open]="isOpen"
|
|
366
|
+
[class.select-header--unstyled]="unstyled"
|
|
367
|
+
[class.select-header--has-prefix]="hasPrefix"
|
|
368
|
+
(blur)="handleBlur()"
|
|
369
|
+
(click)="!disabled && toggleDropdown($event)">
|
|
370
|
+
<span class="select-prefix" *ngIf="hasPrefix">
|
|
371
|
+
<ng-content select="[prefix]"></ng-content>
|
|
372
|
+
</span>
|
|
373
|
+
<span class="select-placeholder" *ngIf="!getSelectedLabel()">
|
|
374
|
+
{{ placeholder }}
|
|
375
|
+
</span>
|
|
376
|
+
<span class="select-selected" *ngIf="getSelectedLabel()">
|
|
377
|
+
{{ getSelectedLabel() }}
|
|
378
|
+
</span>
|
|
379
|
+
<span class="select-suffix" *ngIf="hasSuffix">
|
|
380
|
+
<ng-content select="[suffix]"></ng-content>
|
|
381
|
+
</span>
|
|
382
|
+
<svg class="select-arrow" [class.open]="isOpen" width="12" height="8" viewBox="0 0 12 8" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
383
|
+
<path d="M1 1.5L6 6.5L11 1.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
384
|
+
</svg>
|
|
385
|
+
</div>
|
|
386
|
+
</div>
|
|
387
|
+
<div *ngIf="hasError && errorMessage && !unstyled" class="field-error">
|
|
388
|
+
{{ errorMessage }}
|
|
389
|
+
</div>
|
|
390
|
+
|
|
391
|
+
<!-- Hidden container for projected options -->
|
|
392
|
+
<div style="display: none;">
|
|
393
|
+
<ng-content></ng-content>
|
|
394
|
+
</div>
|
|
395
|
+
</div>
|
|
396
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }] });
|
|
397
|
+
}
|
|
398
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SelectComponent, decorators: [{
|
|
399
|
+
type: Component,
|
|
400
|
+
args: [{
|
|
401
|
+
selector: 'app-select',
|
|
402
|
+
standalone: true,
|
|
403
|
+
imports: [CommonModule, ReactiveFormsModule, FormsModule, SelectPrefixDirective, SelectSuffixDirective],
|
|
404
|
+
template: `
|
|
405
|
+
<div class="select-wrapper" [class.select-wrapper--unstyled]="unstyled" [ngClass]="customClass">
|
|
406
|
+
<label *ngIf="label && !unstyled" [for]="id">{{ label }}</label>
|
|
407
|
+
<div class="select-container" [class.select-container--unstyled]="unstyled">
|
|
408
|
+
<div
|
|
409
|
+
#trigger
|
|
410
|
+
class="select-header"
|
|
411
|
+
[attr.tabindex]="disabled ? -1 : 0"
|
|
412
|
+
[class.error]="hasError && !unstyled"
|
|
413
|
+
[class.disabled]="disabled"
|
|
414
|
+
[class.open]="isOpen"
|
|
415
|
+
[class.select-header--unstyled]="unstyled"
|
|
416
|
+
[class.select-header--has-prefix]="hasPrefix"
|
|
417
|
+
(blur)="handleBlur()"
|
|
418
|
+
(click)="!disabled && toggleDropdown($event)">
|
|
419
|
+
<span class="select-prefix" *ngIf="hasPrefix">
|
|
420
|
+
<ng-content select="[prefix]"></ng-content>
|
|
421
|
+
</span>
|
|
422
|
+
<span class="select-placeholder" *ngIf="!getSelectedLabel()">
|
|
423
|
+
{{ placeholder }}
|
|
424
|
+
</span>
|
|
425
|
+
<span class="select-selected" *ngIf="getSelectedLabel()">
|
|
426
|
+
{{ getSelectedLabel() }}
|
|
427
|
+
</span>
|
|
428
|
+
<span class="select-suffix" *ngIf="hasSuffix">
|
|
429
|
+
<ng-content select="[suffix]"></ng-content>
|
|
430
|
+
</span>
|
|
431
|
+
<svg class="select-arrow" [class.open]="isOpen" width="12" height="8" viewBox="0 0 12 8" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
432
|
+
<path d="M1 1.5L6 6.5L11 1.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
433
|
+
</svg>
|
|
434
|
+
</div>
|
|
435
|
+
</div>
|
|
436
|
+
<div *ngIf="hasError && errorMessage && !unstyled" class="field-error">
|
|
437
|
+
{{ errorMessage }}
|
|
438
|
+
</div>
|
|
439
|
+
|
|
440
|
+
<!-- Hidden container for projected options -->
|
|
441
|
+
<div style="display: none;">
|
|
442
|
+
<ng-content></ng-content>
|
|
443
|
+
</div>
|
|
444
|
+
</div>
|
|
445
|
+
`,
|
|
446
|
+
providers: [
|
|
447
|
+
{
|
|
448
|
+
provide: NG_VALUE_ACCESSOR,
|
|
449
|
+
useExisting: forwardRef(() => SelectComponent),
|
|
450
|
+
multi: true
|
|
451
|
+
}
|
|
452
|
+
]
|
|
453
|
+
}]
|
|
454
|
+
}], ctorParameters: () => [{ type: i0.Renderer2 }, { type: Document, decorators: [{
|
|
455
|
+
type: Inject,
|
|
456
|
+
args: [DOCUMENT]
|
|
457
|
+
}] }], propDecorators: { label: [{
|
|
458
|
+
type: Input
|
|
459
|
+
}], id: [{
|
|
460
|
+
type: Input
|
|
461
|
+
}], placeholder: [{
|
|
462
|
+
type: Input
|
|
463
|
+
}], options: [{
|
|
464
|
+
type: Input
|
|
465
|
+
}], hasError: [{
|
|
466
|
+
type: Input
|
|
467
|
+
}], errorMessage: [{
|
|
468
|
+
type: Input
|
|
469
|
+
}], disabled: [{
|
|
470
|
+
type: Input
|
|
471
|
+
}], unstyled: [{
|
|
472
|
+
type: Input
|
|
473
|
+
}], displayKey: [{
|
|
474
|
+
type: Input
|
|
475
|
+
}], valueKey: [{
|
|
476
|
+
type: Input
|
|
477
|
+
}], customClass: [{
|
|
478
|
+
type: Input
|
|
479
|
+
}], trigger: [{
|
|
480
|
+
type: ViewChild,
|
|
481
|
+
args: ['trigger', { read: ElementRef }]
|
|
482
|
+
}], contentOptions: [{
|
|
483
|
+
type: ContentChildren,
|
|
484
|
+
args: [OptionComponent]
|
|
485
|
+
}], prefixDirective: [{
|
|
486
|
+
type: ContentChild,
|
|
487
|
+
args: [SelectPrefixDirective]
|
|
488
|
+
}], suffixDirective: [{
|
|
489
|
+
type: ContentChild,
|
|
490
|
+
args: [SelectSuffixDirective]
|
|
491
|
+
}], onEsc: [{
|
|
492
|
+
type: HostListener,
|
|
493
|
+
args: ['keydown.escape']
|
|
494
|
+
}], onDocumentClick: [{
|
|
495
|
+
type: HostListener,
|
|
496
|
+
args: ['document:click', ['$event']]
|
|
497
|
+
}] } });
|
|
498
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvbW9sZWN1bGVzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixTQUFTLEVBQ1QsVUFBVSxFQUVWLFlBQVksRUFFWixlQUFlLEVBQ2YsWUFBWSxFQUdaLG1CQUFtQixFQUVwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0csT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFN0Qsc0NBQXNDO0FBQ3RDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU0xQyxNQUFNLE9BQU8scUJBQXFCO3dHQUFyQixxQkFBcUI7NEZBQXJCLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFKakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsVUFBVTtvQkFDcEIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOztBQU9ELE1BQU0sT0FBTyxxQkFBcUI7d0dBQXJCLHFCQUFxQjs0RkFBckIscUJBQXFCOzs0RkFBckIscUJBQXFCO2tCQUpqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxVQUFVO29CQUNwQixVQUFVLEVBQUUsSUFBSTtpQkFDakI7O0FBdUVELE1BQU0sT0FBTyxlQUFlO0lBcUNoQjtJQUNrQjtJQXJDbkIsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDUixX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O3NCQUFWLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDc0MsT0FBTztzQkFBbEQsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNSLGNBQWM7c0JBQS9DLGVBQWU7dUJBQUMsZUFBZTtnQkFDSyxlQUFlO3NCQUFuRCxZQUFZO3VCQUFDLHFCQUFxQjtnQkFDRSxlQUFlO3NCQUFuRCxZQUFZO3VCQUFDLHFCQUFxQjtnQkEyQ3JDLEtBQUs7c0JBREYsWUFBWTt1QkFBQyxnQkFBZ0I7Z0JBbUQ5QixlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBmb3J3YXJkUmVmLFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgSG9zdExpc3RlbmVyLFxuICBSZW5kZXJlcjIsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgQ29udGVudENoaWxkLFxuICBRdWVyeUxpc3QsXG4gIEFmdGVyQ29udGVudEluaXQsXG4gIFJlbmRlcmVyU3R5bGVGbGFnczIsXG4gIFRlbXBsYXRlUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi9vcHRpb24vb3B0aW9uLmNvbXBvbmVudCc7XG5cbi8vIERpcmVjdGl2ZSBtYXJrZXJzIGZvciBwcmVmaXgvc3VmZml4XG5pbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3ByZWZpeF0nLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdFByZWZpeERpcmVjdGl2ZSB7fVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbc3VmZml4XScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0U3VmZml4RGlyZWN0aXZlIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uIHtcbiAgdmFsdWU6IGFueTtcbiAgbGFiZWw6IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRHJvcGRvd25Qb3NpdGlvbiB7XG4gIHRvcD86IHN0cmluZztcbiAgYm90dG9tPzogc3RyaW5nO1xuICBsZWZ0OiBzdHJpbmc7XG4gIHdpZHRoOiBzdHJpbmc7XG4gIG1heEhlaWdodDogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtc2VsZWN0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGUsIFNlbGVjdFByZWZpeERpcmVjdGl2ZSwgU2VsZWN0U3VmZml4RGlyZWN0aXZlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LXdyYXBwZXJcIiBbY2xhc3Muc2VsZWN0LXdyYXBwZXItLXVuc3R5bGVkXT1cInVuc3R5bGVkXCIgW25nQ2xhc3NdPVwiY3VzdG9tQ2xhc3NcIj5cbiAgICAgIDxsYWJlbCAqbmdJZj1cImxhYmVsICYmICF1bnN0eWxlZFwiIFtmb3JdPVwiaWRcIj57eyBsYWJlbCB9fTwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LWNvbnRhaW5lclwiIFtjbGFzcy5zZWxlY3QtY29udGFpbmVyLS11bnN0eWxlZF09XCJ1bnN0eWxlZFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgI3RyaWdnZXJcbiAgICAgICAgICBjbGFzcz1cInNlbGVjdC1oZWFkZXJcIlxuICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcbiAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiaGFzRXJyb3IgJiYgIXVuc3R5bGVkXCJcbiAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIFtjbGFzcy5vcGVuXT1cImlzT3BlblwiXG4gICAgICAgICAgW2NsYXNzLnNlbGVjdC1oZWFkZXItLXVuc3R5bGVkXT1cInVuc3R5bGVkXCJcbiAgICAgICAgICBbY2xhc3Muc2VsZWN0LWhlYWRlci0taGFzLXByZWZpeF09XCJoYXNQcmVmaXhcIlxuICAgICAgICAgICAoYmx1cik9XCJoYW5kbGVCbHVyKClcIlxuICAgICAgICAgIChjbGljayk9XCIhZGlzYWJsZWQgJiYgdG9nZ2xlRHJvcGRvd24oJGV2ZW50KVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0LXByZWZpeFwiICpuZ0lmPVwiaGFzUHJlZml4XCI+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcHJlZml4XVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWxlY3QtcGxhY2Vob2xkZXJcIiAqbmdJZj1cIiFnZXRTZWxlY3RlZExhYmVsKClcIj5cbiAgICAgICAgICAgIHt7IHBsYWNlaG9sZGVyIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0LXNlbGVjdGVkXCIgKm5nSWY9XCJnZXRTZWxlY3RlZExhYmVsKClcIj5cbiAgICAgICAgICAgIHt7IGdldFNlbGVjdGVkTGFiZWwoKSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdC1zdWZmaXhcIiAqbmdJZj1cImhhc1N1ZmZpeFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3N1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJzZWxlY3QtYXJyb3dcIiBbY2xhc3Mub3Blbl09XCJpc09wZW5cIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiOFwiIHZpZXdCb3g9XCIwIDAgMTIgOFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xIDEuNUw2IDYuNUwxMSAxLjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaGFzRXJyb3IgJiYgZXJyb3JNZXNzYWdlICYmICF1bnN0eWxlZFwiIGNsYXNzPVwiZmllbGQtZXJyb3JcIj5cbiAgICAgICAge3sgZXJyb3JNZXNzYWdlIH19XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBIaWRkZW4gY29udGFpbmVyIGZvciBwcm9qZWN0ZWQgb3B0aW9ucyAtLT5cbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTZWxlY3RDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XG4gIEBJbnB1dCgpIGlkID0gJyc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XG4gIEBJbnB1dCgpIG9wdGlvbnM6IFNlbGVjdE9wdGlvbltdIHwgYW55W10gPSBbXTtcbiAgQElucHV0KCkgaGFzRXJyb3IgPSBmYWxzZTtcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlID0gJyc7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHVuc3R5bGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc3BsYXlLZXk6IHN0cmluZyA9ICdsYWJlbCc7IC8vIFByb3BlcnR5IHRvIGRpc3BsYXkgYXMgbGFiZWxcbiAgQElucHV0KCkgdmFsdWVLZXk6IHN0cmluZyA9ICd2YWx1ZSc7IC8vIFByb3BlcnR5IHRvIHVzZSBhcyB2YWx1ZVxuICBASW5wdXQoKSBjdXN0b21DbGFzczogc3RyaW5nID0gJyc7IC8vIEN1c3RvbSBDU1MgY2xhc3MgZm9yIHN0eWxpbmdcbiAgQFZpZXdDaGlsZCgndHJpZ2dlcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSB0cmlnZ2VyITogRWxlbWVudFJlZjtcbiAgQENvbnRlbnRDaGlsZHJlbihPcHRpb25Db21wb25lbnQpIGNvbnRlbnRPcHRpb25zITogUXVlcnlMaXN0PE9wdGlvbkNvbXBvbmVudD47XG4gIEBDb250ZW50Q2hpbGQoU2VsZWN0UHJlZml4RGlyZWN0aXZlKSBwcmVmaXhEaXJlY3RpdmUhOiBTZWxlY3RQcmVmaXhEaXJlY3RpdmU7XG4gIEBDb250ZW50Q2hpbGQoU2VsZWN0U3VmZml4RGlyZWN0aXZlKSBzdWZmaXhEaXJlY3RpdmUhOiBTZWxlY3RTdWZmaXhEaXJlY3RpdmU7XG5cbiAgZ2V0IGhhc1ByZWZpeCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnByZWZpeERpcmVjdGl2ZTtcbiAgfVxuXG4gIGdldCBoYXNTdWZmaXgoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5zdWZmaXhEaXJlY3RpdmU7XG4gIH1cblxuICB2YWx1ZTogYW55ID0gJyc7XG4gIGlzT3BlbiA9IGZhbHNlO1xuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG4gIHByaXZhdGUgX3VzaW5nQ29udGVudE9wdGlvbnMgPSBmYWxzZTtcblxuICBwcml2YXRlIGRyb3Bkb3duRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBiYWNrZHJvcEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc2Nyb2xsSGFuZGxlcjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVzaXplSGFuZGxlcjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50XG4gICkge31cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgLy8gRGV0ZXJtaW5lIGlmIHVzaW5nIGNvbnRlbnQgcHJvamVjdGlvbiBvciBpbnB1dCBvcHRpb25zXG4gICAgdGhpcy5fdXNpbmdDb250ZW50T3B0aW9ucyA9IHRoaXMuY29udGVudE9wdGlvbnMgJiYgdGhpcy5jb250ZW50T3B0aW9ucy5sZW5ndGggPiAwO1xuXG4gICAgLy8gU3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gY29udGVudCBvcHRpb25zXG4gICAgaWYgKHRoaXMuY29udGVudE9wdGlvbnMpIHtcbiAgICAgIHRoaXMuY29udGVudE9wdGlvbnMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl91c2luZ0NvbnRlbnRPcHRpb25zID0gdGhpcy5jb250ZW50T3B0aW9ucy5sZW5ndGggPiAwO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95RHJvcGRvd24oKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZXNjYXBlJylcbm9uRXNjKCkge1xuICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgdGhpcy5vblRvdWNoZWQoKTtcbn1cblxuICBoYW5kbGVCbHVyKCkge1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBvcHRpb25zIChmcm9tIGNvbnRlbnQgb3IgaW5wdXQpXG4gICAqL1xuICBwcml2YXRlIGdldEFsbE9wdGlvbnMoKTogYW55W10ge1xuICAgIGlmICh0aGlzLl91c2luZ0NvbnRlbnRPcHRpb25zICYmIHRoaXMuY29udGVudE9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRPcHRpb25zLnRvQXJyYXkoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGlzcGxheSBsYWJlbCBmcm9tIG9wdGlvblxuICAgKi9cbiAgZ2V0T3B0aW9uTGFiZWwob3B0aW9uOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmIChvcHRpb24gaW5zdGFuY2VvZiBPcHRpb25Db21wb25lbnQpIHtcbiAgICAgIHJldHVybiBvcHRpb24udmlld1ZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uPy5bdGhpcy5kaXNwbGF5S2V5XSB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdmFsdWUgZnJvbSBvcHRpb25cbiAgICovXG4gIGdldE9wdGlvblZhbHVlKG9wdGlvbjogYW55KTogYW55IHtcbiAgICBpZiAob3B0aW9uIGluc3RhbmNlb2YgT3B0aW9uQ29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gb3B0aW9uLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uPy5bdGhpcy52YWx1ZUtleV07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgb3B0aW9uIGlzIGRpc2FibGVkXG4gICAqL1xuICBpc09wdGlvbkRpc2FibGVkKG9wdGlvbjogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKG9wdGlvbiBpbnN0YW5jZW9mIE9wdGlvbkNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIG9wdGlvbi5kaXNhYmxlZDtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbj8uZGlzYWJsZWQgfHwgZmFsc2U7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIC8vIENsb3NlIGRyb3Bkb3duIGlmIGNsaWNrIGlzIG91dHNpZGVcbiAgICBpZiAodGhpcy5pc09wZW4gJiYgdGhpcy5kcm9wZG93bkVsZW1lbnQgJiYgIXRoaXMuZHJvcGRvd25FbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkge1xuICAgICAgY29uc3QgdHJpZ2dlckVsZW1lbnQgPSB0aGlzLnRyaWdnZXI/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAodHJpZ2dlckVsZW1lbnQgJiYgIXRyaWdnZXJFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkge1xuICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0b2dnbGVEcm9wZG93bihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuRHJvcGRvd24oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9wZW5Ecm9wZG93bigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudHJpZ2dlcikgcmV0dXJuO1xuXG4gICAgLy8gQ3JlYXRlIGJhY2tkcm9wXG4gICAgdGhpcy5iYWNrZHJvcEVsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5iYWNrZHJvcEVsZW1lbnQsICdzZWxlY3QtY3VzdG9tLWJhY2tkcm9wJyk7XG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5iYWNrZHJvcEVsZW1lbnQsICdjbGljaycsICgpID0+IHRoaXMuY2xvc2VEcm9wZG93bigpKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSwgdGhpcy5iYWNrZHJvcEVsZW1lbnQpO1xuXG4gICAgLy8gQ3JlYXRlIGRyb3Bkb3duXG4gICAgdGhpcy5kcm9wZG93bkVsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5kcm9wZG93bkVsZW1lbnQsICdzZWxlY3QtY3VzdG9tLWRyb3Bkb3duJyk7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmRyb3Bkb3duRWxlbWVudCwgJ3NlbGVjdC1vdmVybGF5LXBhbmUnKTtcblxuICAgIC8vIENhbGN1bGF0ZSBwb3NpdGlvblxuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5jYWxjdWxhdGVQb3NpdGlvbigpO1xuXG4gICAgLy8gQXBwbHkgcG9zaXRpb25pbmcgc3R5bGVzXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRyb3Bkb3duRWxlbWVudCwgJ3Bvc2l0aW9uJywgJ2ZpeGVkJyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRyb3Bkb3duRWxlbWVudCwgJ2xlZnQnLCBwb3NpdGlvbi5sZWZ0KTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZHJvcGRvd25FbGVtZW50LCAnd2lkdGgnLCBwb3NpdGlvbi53aWR0aCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRyb3Bkb3duRWxlbWVudCwgJ21heC1oZWlnaHQnLCBwb3NpdGlvbi5tYXhIZWlnaHQpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kcm9wZG93bkVsZW1lbnQsICd6LWluZGV4JywgJzEwMDAwMCcsIFJlbmRlcmVyU3R5bGVGbGFnczIuSW1wb3J0YW50KTtcblxuICAgIGlmIChwb3NpdGlvbi50b3ApIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kcm9wZG93bkVsZW1lbnQsICd0b3AnLCBwb3NpdGlvbi50b3ApO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24uYm90dG9tKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZHJvcGRvd25FbGVtZW50LCAnYm90dG9tJywgcG9zaXRpb24uYm90dG9tKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgZHJvcGRvd24gY29udGVudCB3cmFwcGVyXG4gICAgY29uc3QgZHJvcGRvd25Db250ZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRyb3Bkb3duQ29udGVudCwgJ3NlbGVjdC1kcm9wZG93bicpO1xuXG4gICAgLy8gQWRkIG9wdGlvbnNcbiAgICBjb25zdCBhbGxPcHRpb25zID0gdGhpcy5nZXRBbGxPcHRpb25zKCk7XG4gICAgYWxsT3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICBjb25zdCBvcHRpb25FbGVtZW50ID0gdGhpcy5jcmVhdGVPcHRpb25FbGVtZW50KG9wdGlvbik7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGRyb3Bkb3duQ29udGVudCwgb3B0aW9uRWxlbWVudCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZHJvcGRvd25FbGVtZW50LCBkcm9wZG93bkNvbnRlbnQpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LCB0aGlzLmRyb3Bkb3duRWxlbWVudCk7XG5cbiAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG5cbiAgICAvLyBBZGQgc2Nyb2xsIGFuZCByZXNpemUgbGlzdGVuZXJzIHRvIHJlcG9zaXRpb24gZHJvcGRvd25cbiAgICB0aGlzLmFkZFJlcG9zaXRpb25MaXN0ZW5lcnMoKTtcblxuICAgIC8vIFRyaWdnZXIgYW5pbWF0aW9uXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5kcm9wZG93bkVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmRyb3Bkb3duRWxlbWVudCwgJ3NlbGVjdC1kcm9wZG93bi1vcGVuJyk7XG4gICAgICB9XG4gICAgfSwgMTApO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVQb3NpdGlvbigpOiBEcm9wZG93blBvc2l0aW9uIHtcbiAgICBjb25zdCB0cmlnZ2VyRWxlbWVudCA9IHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHJlY3QgPSB0cmlnZ2VyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGNvbnN0IHNwYWNlQmVsb3cgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LmJvdHRvbTtcbiAgICBjb25zdCBzcGFjZUFib3ZlID0gcmVjdC50b3A7XG4gICAgY29uc3QgZHJvcGRvd25NYXhIZWlnaHQgPSAzMDA7XG4gICAgY29uc3Qgb2Zmc2V0WSA9IDQ7XG5cbiAgICBjb25zdCBzaG91bGRPcGVuQWJvdmUgPSBzcGFjZUJlbG93IDwgMjAwICYmIHNwYWNlQWJvdmUgPiBzcGFjZUJlbG93O1xuXG4gICAgY29uc3QgcG9zaXRpb246IERyb3Bkb3duUG9zaXRpb24gPSB7XG4gICAgICBsZWZ0OiBgJHtyZWN0LmxlZnR9cHhgLFxuICAgICAgd2lkdGg6IGAke3JlY3Qud2lkdGh9cHhgLFxuICAgICAgbWF4SGVpZ2h0OiBgJHtkcm9wZG93bk1heEhlaWdodH1weGBcbiAgICB9O1xuXG4gICAgaWYgKHNob3VsZE9wZW5BYm92ZSkge1xuICAgICAgcG9zaXRpb24uYm90dG9tID0gYCR7d2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC50b3AgKyBvZmZzZXRZfXB4YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9zaXRpb24udG9wID0gYCR7cmVjdC5ib3R0b20gKyBvZmZzZXRZfXB4YDtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zaXRpb247XG4gIH1cblxuICBwcml2YXRlIGFkZFJlcG9zaXRpb25MaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgLy8gQ3JlYXRlIGhhbmRsZXJzXG4gICAgY29uc3Qgc2Nyb2xsSGFuZGxlciA9ICgpID0+IHRoaXMudXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpO1xuICAgIGNvbnN0IHJlc2l6ZUhhbmRsZXIgPSAoKSA9PiB0aGlzLnVwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTtcblxuICAgIC8vIEFkZCBzY3JvbGwgbGlzdGVuZXIgdG8gd2luZG93IHdpdGggY2FwdHVyZSBwaGFzZSB0byBjYXRjaCBhbGwgc2Nyb2xsIGV2ZW50c1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzY3JvbGxIYW5kbGVyLCB0cnVlKTtcbiAgICB0aGlzLnNjcm9sbEhhbmRsZXIgPSAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2Nyb2xsSGFuZGxlciwgdHJ1ZSk7XG5cbiAgICAvLyBBZGQgcmVzaXplIGxpc3RlbmVyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHJlc2l6ZUhhbmRsZXIpO1xuICAgIHRoaXMucmVzaXplSGFuZGxlciA9ICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCByZXNpemVIYW5kbGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZHJvcGRvd25FbGVtZW50IHx8ICF0aGlzLnRyaWdnZXIpIHJldHVybjtcblxuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5jYWxjdWxhdGVQb3NpdGlvbigpO1xuXG4gICAgLy8gVXBkYXRlIHBvc2l0aW9uIHN0eWxlc1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kcm9wZG93bkVsZW1lbnQsICdsZWZ0JywgcG9zaXRpb24ubGVmdCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRyb3Bkb3duRWxlbWVudCwgJ3dpZHRoJywgcG9zaXRpb24ud2lkdGgpO1xuXG4gICAgLy8gUmVtb3ZlIG9sZCB0b3AvYm90dG9tIHN0eWxlc1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5kcm9wZG93bkVsZW1lbnQsICd0b3AnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZHJvcGRvd25FbGVtZW50LCAnYm90dG9tJyk7XG5cbiAgICAvLyBBcHBseSBuZXcgdG9wL2JvdHRvbSBwb3NpdGlvblxuICAgIGlmIChwb3NpdGlvbi50b3ApIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kcm9wZG93bkVsZW1lbnQsICd0b3AnLCBwb3NpdGlvbi50b3ApO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24uYm90dG9tKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZHJvcGRvd25FbGVtZW50LCAnYm90dG9tJywgcG9zaXRpb24uYm90dG9tKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU9wdGlvbkVsZW1lbnQob3B0aW9uOiBhbnkpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3Qgb3B0aW9uRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhvcHRpb25FbGVtZW50LCAnc2VsZWN0LW9wdGlvbicpO1xuXG4gICAgY29uc3Qgb3B0aW9uVmFsdWUgPSB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbik7XG4gICAgY29uc3Qgb3B0aW9uTGFiZWwgPSB0aGlzLmdldE9wdGlvbkxhYmVsKG9wdGlvbik7XG4gICAgY29uc3Qgb3B0aW9uRGlzYWJsZWQgPSB0aGlzLmlzT3B0aW9uRGlzYWJsZWQob3B0aW9uKTtcblxuICAgIGlmICh0aGlzLmlzRW1wdHlWYWx1ZShvcHRpb25WYWx1ZSkpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3Mob3B0aW9uRWxlbWVudCwgJ3NlbGVjdC1vcHRpb24tcGxhY2Vob2xkZXInKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKG9wdGlvblZhbHVlKSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhvcHRpb25FbGVtZW50LCAnc2VsZWN0ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9uRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3Mob3B0aW9uRWxlbWVudCwgJ2Rpc2FibGVkJyk7XG4gICAgfVxuXG4gICAgLy8gT3B0aW9uIHRleHRcbiAgICBjb25zdCB0ZXh0U3BhbiA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGV4dFNwYW4sICdvcHRpb24tdGV4dCcpO1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRleHQob3B0aW9uTGFiZWwpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGV4dFNwYW4sIHRleHQpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQob3B0aW9uRWxlbWVudCwgdGV4dFNwYW4pO1xuXG4gICAgLy8gQ2hlY2sgaWNvbiBmb3Igc2VsZWN0ZWQgb3B0aW9uXG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZChvcHRpb25WYWx1ZSkpIHtcbiAgICAgIGNvbnN0IHN2ZyA9IHRoaXMuY3JlYXRlQ2hlY2tJY29uKCk7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKG9wdGlvbkVsZW1lbnQsIHN2Zyk7XG4gICAgfVxuXG4gICAgLy8gQ2xpY2sgaGFuZGxlclxuICAgIGlmICghb3B0aW9uRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKG9wdGlvbkVsZW1lbnQsICdjbGljaycsIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0T3B0aW9uKG9wdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2hlY2tJY29uKCk6IFNWR0VsZW1lbnQge1xuICAgIGNvbnN0IHN2ZyA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3ZnJywgJ3N2ZycpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3Moc3ZnLCAnY2hlY2staWNvbicpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHN2ZywgJ3dpZHRoJywgJzE0Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoc3ZnLCAnaGVpZ2h0JywgJzEwJyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoc3ZnLCAndmlld0JveCcsICcwIDAgMTAgOCcpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHN2ZywgJ2ZpbGwnLCAnbm9uZScpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHN2ZywgJ3htbG5zJywgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyk7XG5cbiAgICBjb25zdCBwYXRoID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdwYXRoJywgJ3N2ZycpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHBhdGgsICdkJywgJ005IDFMMy41IDYuNUwxIDQnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShwYXRoLCAnc3Ryb2tlJywgJyNGNTkxMDAnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShwYXRoLCAnc3Ryb2tlLXdpZHRoJywgJzEuNjY2NicpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHBhdGgsICdzdHJva2UtbGluZWNhcCcsICdyb3VuZCcpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHBhdGgsICdzdHJva2UtbGluZWpvaW4nLCAncm91bmQnKTtcblxuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoc3ZnLCBwYXRoKTtcbiAgICByZXR1cm4gc3ZnO1xuICB9XG5cbiAgY2xvc2VEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3lEcm9wZG93bigpO1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3lEcm9wZG93bigpOiB2b2lkIHtcbiAgICAvLyBSZW1vdmUgbGlzdGVuZXJzXG4gICAgaWYgKHRoaXMuc2Nyb2xsSGFuZGxlcikge1xuICAgICAgdGhpcy5zY3JvbGxIYW5kbGVyKCk7XG4gICAgICB0aGlzLnNjcm9sbEhhbmRsZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlc2l6ZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMucmVzaXplSGFuZGxlcigpO1xuICAgICAgdGhpcy5yZXNpemVIYW5kbGVyID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcm9wZG93bkVsZW1lbnQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LCB0aGlzLmRyb3Bkb3duRWxlbWVudCk7XG4gICAgICB0aGlzLmRyb3Bkb3duRWxlbWVudCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYmFja2Ryb3BFbGVtZW50KSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSwgdGhpcy5iYWNrZHJvcEVsZW1lbnQpO1xuICAgICAgdGhpcy5iYWNrZHJvcEVsZW1lbnQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdE9wdGlvbihvcHRpb246IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzT3B0aW9uRGlzYWJsZWQob3B0aW9uKSkgcmV0dXJuO1xuXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gIH1cblxuICBpc1NlbGVjdGVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gdmFsdWU7XG4gIH1cblxuICBpc0VtcHR5VmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFNlbGVjdGVkTGFiZWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBhbGxPcHRpb25zID0gdGhpcy5nZXRBbGxPcHRpb25zKCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBhbGxPcHRpb25zLmZpbmQob3B0ID0+IHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0KSA9PT0gdGhpcy52YWx1ZSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9uID8gdGhpcy5nZXRPcHRpb25MYWJlbChzZWxlY3RlZE9wdGlvbikgOiAnJztcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZSB8fCAnJztcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cbn1cbiJdfQ==
|