@tekus/design-system 3.0.0 → 4.0.1
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/components/{tk-form-input-field → forms}/index.d.ts +1 -1
- package/components/forms/public-api.d.ts +3 -0
- package/components/forms/tk-form-autocomplete-field/index.d.ts +5 -0
- package/components/{tk-form-autocomplete-field → forms/tk-form-autocomplete-field}/tk-form-autocomplete-field.component.d.ts +6 -1
- package/components/forms/tk-form-chips-autocomplete-field/index.d.ts +5 -0
- package/components/forms/tk-form-input-field/index.d.ts +5 -0
- package/components/{tk-form-input-field → forms/tk-form-input-field}/tk-form-input-field.component.d.ts +6 -1
- package/esm2022/components/forms/public-api.mjs +4 -0
- package/esm2022/components/forms/tekus-design-system-components-forms.mjs +5 -0
- package/esm2022/components/forms/tk-form-autocomplete-field/models/option.model.mjs +2 -0
- package/esm2022/components/forms/tk-form-autocomplete-field/public-api.mjs +2 -0
- package/esm2022/components/forms/tk-form-autocomplete-field/tekus-design-system-components-forms-tk-form-autocomplete-field.mjs +5 -0
- package/esm2022/components/forms/tk-form-autocomplete-field/tk-form-autocomplete-field.component.mjs +245 -0
- package/esm2022/components/forms/tk-form-chips-autocomplete-field/models/option.model.mjs +2 -0
- package/esm2022/components/forms/tk-form-chips-autocomplete-field/public-api.mjs +2 -0
- package/esm2022/components/forms/tk-form-chips-autocomplete-field/tekus-design-system-components-forms-tk-form-chips-autocomplete-field.mjs +5 -0
- package/esm2022/components/forms/tk-form-chips-autocomplete-field/tk-form-chips-autocomplete-field.component.mjs +167 -0
- package/esm2022/components/forms/tk-form-input-field/models/validator-with-message.model.mjs +2 -0
- package/esm2022/components/forms/tk-form-input-field/public-api.mjs +2 -0
- package/esm2022/components/forms/tk-form-input-field/tekus-design-system-components-forms-tk-form-input-field.mjs +5 -0
- package/esm2022/components/forms/tk-form-input-field/tk-form-input-field.component.mjs +206 -0
- package/fesm2022/{tekus-design-system-components-tk-form-autocomplete-field.mjs → tekus-design-system-components-forms-tk-form-autocomplete-field.mjs} +10 -3
- package/fesm2022/tekus-design-system-components-forms-tk-form-autocomplete-field.mjs.map +1 -0
- package/fesm2022/tekus-design-system-components-forms-tk-form-chips-autocomplete-field.mjs +174 -0
- package/fesm2022/tekus-design-system-components-forms-tk-form-chips-autocomplete-field.mjs.map +1 -0
- package/fesm2022/{tekus-design-system-components-tk-form-input-field.mjs → tekus-design-system-components-forms-tk-form-input-field.mjs} +10 -3
- package/fesm2022/tekus-design-system-components-forms-tk-form-input-field.mjs.map +1 -0
- package/fesm2022/tekus-design-system-components-forms.mjs +604 -0
- package/fesm2022/tekus-design-system-components-forms.mjs.map +1 -0
- package/package.json +31 -22
- package/components/tk-form-autocomplete-field/index.d.ts +0 -5
- package/components/tk-form-chips-autocomplete-field/index.d.ts +0 -5
- package/esm2022/components/tk-form-autocomplete-field/models/option.model.mjs +0 -2
- package/esm2022/components/tk-form-autocomplete-field/public-api.mjs +0 -2
- package/esm2022/components/tk-form-autocomplete-field/tekus-design-system-components-tk-form-autocomplete-field.mjs +0 -5
- package/esm2022/components/tk-form-autocomplete-field/tk-form-autocomplete-field.component.mjs +0 -238
- package/esm2022/components/tk-form-chips-autocomplete-field/models/option.model.mjs +0 -2
- package/esm2022/components/tk-form-chips-autocomplete-field/public-api.mjs +0 -2
- package/esm2022/components/tk-form-chips-autocomplete-field/tekus-design-system-components-tk-form-chips-autocomplete-field.mjs +0 -5
- package/esm2022/components/tk-form-chips-autocomplete-field/tk-form-chips-autocomplete-field.component.mjs +0 -167
- package/esm2022/components/tk-form-input-field/models/validator-with-message.model.mjs +0 -2
- package/esm2022/components/tk-form-input-field/public-api.mjs +0 -2
- package/esm2022/components/tk-form-input-field/tekus-design-system-components-tk-form-input-field.mjs +0 -5
- package/esm2022/components/tk-form-input-field/tk-form-input-field.component.mjs +0 -199
- package/fesm2022/tekus-design-system-components-tk-form-autocomplete-field.mjs.map +0 -1
- package/fesm2022/tekus-design-system-components-tk-form-chips-autocomplete-field.mjs +0 -174
- package/fesm2022/tekus-design-system-components-tk-form-chips-autocomplete-field.mjs.map +0 -1
- package/fesm2022/tekus-design-system-components-tk-form-input-field.mjs.map +0 -1
- /package/components/{tk-form-autocomplete-field → forms/tk-form-autocomplete-field}/models/option.model.d.ts +0 -0
- /package/components/{tk-form-autocomplete-field → forms/tk-form-autocomplete-field}/public-api.d.ts +0 -0
- /package/components/{tk-form-chips-autocomplete-field → forms/tk-form-chips-autocomplete-field}/models/option.model.d.ts +0 -0
- /package/components/{tk-form-chips-autocomplete-field → forms/tk-form-chips-autocomplete-field}/public-api.d.ts +0 -0
- /package/components/{tk-form-chips-autocomplete-field → forms/tk-form-chips-autocomplete-field}/tk-form-chips-autocomplete-field.component.d.ts +0 -0
- /package/components/{tk-form-input-field → forms/tk-form-input-field}/models/validator-with-message.model.d.ts +0 -0
- /package/components/{tk-form-input-field → forms/tk-form-input-field}/public-api.d.ts +0 -0
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import { Input, Output, Component, ViewChild, EventEmitter, ChangeDetectionStrategy, } from '@angular/core';
|
|
2
|
-
import { MatFormFieldModule, } from '@angular/material/form-field';
|
|
3
|
-
import { MatAutocompleteModule, } from '@angular/material/autocomplete';
|
|
4
|
-
import { map, startWith } from 'rxjs';
|
|
5
|
-
import { AsyncPipe, NgStyle } from '@angular/common';
|
|
6
|
-
import { COMMA, ENTER } from '@angular/cdk/keycodes';
|
|
7
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
8
|
-
import { MatChipsModule } from '@angular/material/chips';
|
|
9
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
10
|
-
import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "@angular/forms";
|
|
13
|
-
import * as i2 from "@angular/material/icon";
|
|
14
|
-
import * as i3 from "@angular/material/chips";
|
|
15
|
-
import * as i4 from "@angular/material/form-field";
|
|
16
|
-
import * as i5 from "@angular/material/autocomplete";
|
|
17
|
-
import * as i6 from "@angular/material/core";
|
|
18
|
-
export class TkFormChipsAutocompleteFieldComponent {
|
|
19
|
-
/**
|
|
20
|
-
* @ignore
|
|
21
|
-
* Class constructor
|
|
22
|
-
*/
|
|
23
|
-
constructor() {
|
|
24
|
-
/**
|
|
25
|
-
* Input field label
|
|
26
|
-
*/
|
|
27
|
-
this.fieldLabel = '';
|
|
28
|
-
/**
|
|
29
|
-
* Input field placeholder
|
|
30
|
-
* @default ''
|
|
31
|
-
*/
|
|
32
|
-
this.placeHolder = '';
|
|
33
|
-
/**
|
|
34
|
-
* What color palette to use
|
|
35
|
-
* @default 'accent'
|
|
36
|
-
*/
|
|
37
|
-
this.theme = 'accent';
|
|
38
|
-
/**
|
|
39
|
-
* Form field reserved space for one line by default.
|
|
40
|
-
* @default 'dynamic'
|
|
41
|
-
*/
|
|
42
|
-
this.subscriptSizing = 'dynamic';
|
|
43
|
-
/**
|
|
44
|
-
* Form field appearance
|
|
45
|
-
* @default 'fill'
|
|
46
|
-
*/
|
|
47
|
-
this.appearance = 'fill';
|
|
48
|
-
/**
|
|
49
|
-
* Input field control
|
|
50
|
-
* @ignore
|
|
51
|
-
*/
|
|
52
|
-
this.formControl = new FormControl('');
|
|
53
|
-
/**
|
|
54
|
-
* Selected keywords
|
|
55
|
-
* @ignore
|
|
56
|
-
*/
|
|
57
|
-
this.keywords = [];
|
|
58
|
-
/**
|
|
59
|
-
* Input field changes handler
|
|
60
|
-
*/
|
|
61
|
-
this.inputStatus = new EventEmitter();
|
|
62
|
-
/**
|
|
63
|
-
* Keywords changes handler
|
|
64
|
-
*/
|
|
65
|
-
this.selectedKeywords = new EventEmitter();
|
|
66
|
-
/**
|
|
67
|
-
* Separator constants
|
|
68
|
-
* @ignore
|
|
69
|
-
*/
|
|
70
|
-
this.separatorKeysCodes = [ENTER, COMMA];
|
|
71
|
-
/**
|
|
72
|
-
* Options to be displayed
|
|
73
|
-
* @ignore
|
|
74
|
-
*/
|
|
75
|
-
this.allKeywords = [];
|
|
76
|
-
this.filteredKeywords = this.formControl.valueChanges.pipe(startWith(null), map((keyword) => keyword ? this._filter(String(keyword)) : this.allKeywords.slice()));
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Handles every keyword deletion
|
|
80
|
-
* @ignore
|
|
81
|
-
*/
|
|
82
|
-
remove(keyword) {
|
|
83
|
-
const index = this.keywords.indexOf(keyword);
|
|
84
|
-
if (index >= 0) {
|
|
85
|
-
this.keywords.splice(index, 1);
|
|
86
|
-
this.onKeywordsChanged();
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Emits the formControl variable every time the field value changes
|
|
91
|
-
* @ignore
|
|
92
|
-
*/
|
|
93
|
-
onInputChanged() {
|
|
94
|
-
this.inputStatus.emit(this.formControl);
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Emits the selected keywords every time they changed
|
|
98
|
-
* @ignore
|
|
99
|
-
*/
|
|
100
|
-
onKeywordsChanged() {
|
|
101
|
-
this.selectedKeywords.emit(this.keywords.map(keyword => keyword.Value));
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Handles the autocomplete selection
|
|
105
|
-
* @ignore
|
|
106
|
-
*/
|
|
107
|
-
selected(event) {
|
|
108
|
-
const value = event.option.value;
|
|
109
|
-
const selectedKeyword = this.allKeywords.find(option => option.Value === value);
|
|
110
|
-
if (selectedKeyword &&
|
|
111
|
-
!this.keywords.some(keyword => keyword.Value === selectedKeyword.Value)) {
|
|
112
|
-
this.keywords.push(selectedKeyword);
|
|
113
|
-
this.onKeywordsChanged();
|
|
114
|
-
}
|
|
115
|
-
this.keywordInput.nativeElement.value = '';
|
|
116
|
-
this.formControl.setValue(null);
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Filters the keywords based on the input
|
|
120
|
-
* @ignore
|
|
121
|
-
*/
|
|
122
|
-
_filter(value) {
|
|
123
|
-
this.onInputChanged();
|
|
124
|
-
const filterValue = value.toLowerCase();
|
|
125
|
-
return this.allKeywords.filter(keyword => keyword.ViewValue.toLowerCase().includes(filterValue));
|
|
126
|
-
}
|
|
127
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: TkFormChipsAutocompleteFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
128
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.10", type: TkFormChipsAutocompleteFieldComponent, isStandalone: true, selector: "lib-tk-form-chips-autocomplete-field", inputs: { fieldLabel: "fieldLabel", placeHolder: "placeHolder", fieldTitle: "fieldTitle", theme: "theme", subscriptSizing: "subscriptSizing", fieldWidth: "fieldWidth", appearance: "appearance", allKeywords: "allKeywords" }, outputs: { inputStatus: "inputStatus", selectedKeywords: "selectedKeywords" }, viewQueries: [{ propertyName: "keywordInput", first: true, predicate: ["keywordInput"], descendants: true }], ngImport: i0, template: "<section class=\"section\">\n @if (fieldTitle) {\n <h1 class=\"field__title\">{{ fieldTitle }}</h1>\n }\n <div class=\"field\" [ngStyle]=\"{ width: fieldWidth }\">\n <mat-form-field\n class=\"form__field\"\n [color]=\"theme\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\">\n <mat-label class=\"form__field__label\">{{ fieldLabel }}</mat-label>\n <mat-chip-grid #chipGrid aria-label=\"Keyword selection\">\n @for (keyword of keywords; track keyword.Value) {\n <mat-chip-row (removed)=\"remove(keyword)\">\n {{ keyword.ViewValue }}\n <button\n matChipRemove\n [attr.aria-label]=\"'remove ' + keyword.ViewValue\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input\n #keywordInput\n [matAutocomplete]=\"auto\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeHolder\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\" />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"selected($event)\">\n @for (keyword of filteredKeywords | async; track keyword.Value) {\n <mat-option [value]=\"keyword.Value\">{{\n keyword.ViewValue\n }}</mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n </div>\n</section>\n", styles: [".section{gap:.5rem;display:flex;flex-wrap:wrap;width:fit-content;align-items:flex-start;justify-content:flex-start}.field{flex:1;display:flex;min-width:none;max-width:100%;align-items:flex-start;flex-flow:column nowrap;justify-content:flex-start}.form__field{width:100%;font-size:clamp(.8rem,.657rem + .381vw,1rem)}.form__field__label{font-weight:400;font-style:normal;line-height:.98438em;font-size:clamp(.688rem,.554rem + .357vw,.875rem)}.field__title{margin:0;padding:0;align-self:center;font-size:clamp(1rem,.94rem + .345vw,1.25rem)}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i3.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i3.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i3.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i3.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i5.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i5.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
129
|
-
}
|
|
130
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: TkFormChipsAutocompleteFieldComponent, decorators: [{
|
|
131
|
-
type: Component,
|
|
132
|
-
args: [{ selector: 'lib-tk-form-chips-autocomplete-field', standalone: true, imports: [
|
|
133
|
-
NgStyle,
|
|
134
|
-
AsyncPipe,
|
|
135
|
-
FormsModule,
|
|
136
|
-
MatIconModule,
|
|
137
|
-
MatChipsModule,
|
|
138
|
-
MatButtonModule,
|
|
139
|
-
MatFormFieldModule,
|
|
140
|
-
ReactiveFormsModule,
|
|
141
|
-
MatAutocompleteModule,
|
|
142
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"section\">\n @if (fieldTitle) {\n <h1 class=\"field__title\">{{ fieldTitle }}</h1>\n }\n <div class=\"field\" [ngStyle]=\"{ width: fieldWidth }\">\n <mat-form-field\n class=\"form__field\"\n [color]=\"theme\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\">\n <mat-label class=\"form__field__label\">{{ fieldLabel }}</mat-label>\n <mat-chip-grid #chipGrid aria-label=\"Keyword selection\">\n @for (keyword of keywords; track keyword.Value) {\n <mat-chip-row (removed)=\"remove(keyword)\">\n {{ keyword.ViewValue }}\n <button\n matChipRemove\n [attr.aria-label]=\"'remove ' + keyword.ViewValue\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input\n #keywordInput\n [matAutocomplete]=\"auto\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeHolder\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\" />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"selected($event)\">\n @for (keyword of filteredKeywords | async; track keyword.Value) {\n <mat-option [value]=\"keyword.Value\">{{\n keyword.ViewValue\n }}</mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n </div>\n</section>\n", styles: [".section{gap:.5rem;display:flex;flex-wrap:wrap;width:fit-content;align-items:flex-start;justify-content:flex-start}.field{flex:1;display:flex;min-width:none;max-width:100%;align-items:flex-start;flex-flow:column nowrap;justify-content:flex-start}.form__field{width:100%;font-size:clamp(.8rem,.657rem + .381vw,1rem)}.form__field__label{font-weight:400;font-style:normal;line-height:.98438em;font-size:clamp(.688rem,.554rem + .357vw,.875rem)}.field__title{margin:0;padding:0;align-self:center;font-size:clamp(1rem,.94rem + .345vw,1.25rem)}\n"] }]
|
|
143
|
-
}], ctorParameters: () => [], propDecorators: { fieldLabel: [{
|
|
144
|
-
type: Input
|
|
145
|
-
}], placeHolder: [{
|
|
146
|
-
type: Input
|
|
147
|
-
}], fieldTitle: [{
|
|
148
|
-
type: Input
|
|
149
|
-
}], theme: [{
|
|
150
|
-
type: Input
|
|
151
|
-
}], subscriptSizing: [{
|
|
152
|
-
type: Input
|
|
153
|
-
}], fieldWidth: [{
|
|
154
|
-
type: Input
|
|
155
|
-
}], appearance: [{
|
|
156
|
-
type: Input
|
|
157
|
-
}], inputStatus: [{
|
|
158
|
-
type: Output
|
|
159
|
-
}], selectedKeywords: [{
|
|
160
|
-
type: Output
|
|
161
|
-
}], allKeywords: [{
|
|
162
|
-
type: Input
|
|
163
|
-
}], keywordInput: [{
|
|
164
|
-
type: ViewChild,
|
|
165
|
-
args: ['keywordInput']
|
|
166
|
-
}] } });
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGstZm9ybS1jaGlwcy1hdXRvY29tcGxldGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLXN5c3RlbS9jb21wb25lbnRzL3RrLWZvcm0tY2hpcHMtYXV0b2NvbXBsZXRlLWZpZWxkL3RrLWZvcm0tY2hpcHMtYXV0b2NvbXBsZXRlLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1zeXN0ZW0vY29tcG9uZW50cy90ay1mb3JtLWNoaXBzLWF1dG9jb21wbGV0ZS1maWVsZC90ay1mb3JtLWNoaXBzLWF1dG9jb21wbGV0ZS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUVULFlBQVksRUFDWix1QkFBdUIsR0FDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGtCQUFrQixHQUVuQixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFDTCxxQkFBcUIsR0FFdEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4QyxPQUFPLEVBQUUsR0FBRyxFQUFjLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFvQi9FLE1BQU0sT0FBTyxxQ0FBcUM7SUFpR2hEOzs7T0FHRztJQUNIO1FBcEdBOztXQUVHO1FBRUksZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUV2Qjs7O1dBR0c7UUFFSSxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQVN4Qjs7O1dBR0c7UUFFSSxVQUFLLEdBQWtCLFFBQVEsQ0FBQztRQUV2Qzs7O1dBR0c7UUFFSSxvQkFBZSxHQUFvQixTQUFTLENBQUM7UUFTcEQ7OztXQUdHO1FBRUksZUFBVSxHQUEyQixNQUFNLENBQUM7UUFFbkQ7OztXQUdHO1FBQ0ksZ0JBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6Qzs7O1dBR0c7UUFDSSxhQUFRLEdBQWEsRUFBRSxDQUFDO1FBRS9COztXQUVHO1FBRUksZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO1FBRXJEOztXQUVHO1FBRUkscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFFbEU7OztXQUdHO1FBQ2EsdUJBQWtCLEdBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFOUQ7OztXQUdHO1FBRUksZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFtQmhDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3hELFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFDZixHQUFHLENBQUMsQ0FBQyxPQUFzQixFQUFFLEVBQUUsQ0FDN0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUNuRSxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLE9BQWU7UUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFN0MsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxjQUFjO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksaUJBQWlCO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksUUFBUSxDQUFDLEtBQW1DO1FBQ2pELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2pDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUMzQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUNqQyxDQUFDO1FBRUYsSUFDRSxlQUFlO1lBQ2YsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUN2RSxDQUFDO1lBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNLLE9BQU8sQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFeEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUN2QyxPQUFPLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FDdEQsQ0FBQztJQUNKLENBQUM7K0dBNUtVLHFDQUFxQzttR0FBckMscUNBQXFDLDZmQzlDbEQsKzlDQTBDQSxxbEJEVkksT0FBTyxzRUFDUCxTQUFTLDZDQUNULFdBQVcsc1pBQ1gsYUFBYSxtTEFDYixjQUFjLDR1QkFDZCxlQUFlLDhCQUNmLGtCQUFrQiwwU0FDbEIsbUJBQW1CLGlOQUNuQixxQkFBcUI7OzRGQU1aLHFDQUFxQztrQkFsQmpELFNBQVM7K0JBQ0Usc0NBQXNDLGNBQ3BDLElBQUksV0FDUDt3QkFDUCxPQUFPO3dCQUNQLFNBQVM7d0JBQ1QsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIscUJBQXFCO3FCQUN0QixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTTt3REFTeEMsVUFBVTtzQkFEaEIsS0FBSztnQkFRQyxXQUFXO3NCQURqQixLQUFLO2dCQVFDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBUUMsS0FBSztzQkFEWCxLQUFLO2dCQVFDLGVBQWU7c0JBRHJCLEtBQUs7Z0JBUUMsVUFBVTtzQkFEaEIsS0FBSztnQkFRQyxVQUFVO3NCQURoQixLQUFLO2dCQWtCQyxXQUFXO3NCQURqQixNQUFNO2dCQU9BLGdCQUFnQjtzQkFEdEIsTUFBTTtnQkFjQSxXQUFXO3NCQURqQixLQUFLO2dCQWFxQixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBDb21wb25lbnQsXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTdWJzY3JpcHRTaXppbmcsXG4gIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSxcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQge1xuICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXG4gIE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQsXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuL21vZGVscy9vcHRpb24ubW9kZWwnO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDT01NQSwgRU5URVIgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgVGhlbWVQYWxldHRlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRDaGlwc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi10ay1mb3JtLWNoaXBzLWF1dG9jb21wbGV0ZS1maWVsZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ1N0eWxlLFxuICAgIEFzeW5jUGlwZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdENoaXBzTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZVVybDogJy4vdGstZm9ybS1jaGlwcy1hdXRvY29tcGxldGUtZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdGstZm9ybS1jaGlwcy1hdXRvY29tcGxldGUtZmllbGQuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBUa0Zvcm1DaGlwc0F1dG9jb21wbGV0ZUZpZWxkQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIElucHV0IGZpZWxkIGxhYmVsXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZmllbGRMYWJlbCA9ICcnO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBmaWVsZCBwbGFjZWhvbGRlclxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHBsYWNlSG9sZGVyID0gJyc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGlucHV0IGZpZWxkIHRpdGxlXG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmaWVsZFRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0IGNvbG9yIHBhbGV0dGUgdG8gdXNlXG4gICAqIEBkZWZhdWx0ICdhY2NlbnQnXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgdGhlbWU/OiBUaGVtZVBhbGV0dGUgPSAnYWNjZW50JztcblxuICAvKipcbiAgICogRm9ybSBmaWVsZCByZXNlcnZlZCBzcGFjZSBmb3Igb25lIGxpbmUgYnkgZGVmYXVsdC5cbiAgICogQGRlZmF1bHQgJ2R5bmFtaWMnXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3Vic2NyaXB0U2l6aW5nOiBTdWJzY3JpcHRTaXppbmcgPSAnZHluYW1pYyc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGlucHV0IGZpZWxkIHdpZHRoXG4gICAqIEBkZWZhdWx0IDEwMCVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmaWVsZFdpZHRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGb3JtIGZpZWxkIGFwcGVhcmFuY2VcbiAgICogQGRlZmF1bHQgJ2ZpbGwnXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSA9ICdmaWxsJztcblxuICAvKipcbiAgICogSW5wdXQgZmllbGQgY29udHJvbFxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwdWJsaWMgZm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICAvKipcbiAgICogU2VsZWN0ZWQga2V5d29yZHNcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHVibGljIGtleXdvcmRzOiBPcHRpb25bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBmaWVsZCBjaGFuZ2VzIGhhbmRsZXJcbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgaW5wdXRTdGF0dXMgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1Db250cm9sPigpO1xuXG4gIC8qKlxuICAgKiBLZXl3b3JkcyBjaGFuZ2VzIGhhbmRsZXJcbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0ZWRLZXl3b3JkcyA9IG5ldyBFdmVudEVtaXR0ZXI8KHN0cmluZyB8IG51bWJlcilbXT4oKTtcblxuICAvKipcbiAgICogU2VwYXJhdG9yIGNvbnN0YW50c1xuICAgKiBAaWdub3JlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VwYXJhdG9yS2V5c0NvZGVzOiBudW1iZXJbXSA9IFtFTlRFUiwgQ09NTUFdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIHRvIGJlIGRpc3BsYXllZFxuICAgKiBAaWdub3JlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYWxsS2V5d29yZHM6IE9wdGlvbltdID0gW107XG5cbiAgLyoqXG4gICAqIEZpbHRlcmVkIGtleXdvcmRzIGFmdGVyIHRoZSBpbnB1dCBmaWVsZCBjaGFuZ2VzXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmaWx0ZXJlZEtleXdvcmRzOiBPYnNlcnZhYmxlPE9wdGlvbltdPjtcblxuICAvKipcbiAgICogS2V5d29yZCBJbnB1dCBlbGVtZW50IHJlZmVyZW5jZVxuICAgKiBAaWdub3JlXG4gICAqL1xuICBAVmlld0NoaWxkKCdrZXl3b3JkSW5wdXQnKSBrZXl3b3JkSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqIENsYXNzIGNvbnN0cnVjdG9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmZpbHRlcmVkS2V5d29yZHMgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgbWFwKChrZXl3b3JkOiBzdHJpbmcgfCBudWxsKSA9PlxuICAgICAgICBrZXl3b3JkID8gdGhpcy5fZmlsdGVyKFN0cmluZyhrZXl3b3JkKSkgOiB0aGlzLmFsbEtleXdvcmRzLnNsaWNlKClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgZXZlcnkga2V5d29yZCBkZWxldGlvblxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlKGtleXdvcmQ6IE9wdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5rZXl3b3Jkcy5pbmRleE9mKGtleXdvcmQpO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHRoaXMua2V5d29yZHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMub25LZXl3b3Jkc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgdGhlIGZvcm1Db250cm9sIHZhcmlhYmxlIGV2ZXJ5IHRpbWUgdGhlIGZpZWxkIHZhbHVlIGNoYW5nZXNcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHVibGljIG9uSW5wdXRDaGFuZ2VkKCk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRTdGF0dXMuZW1pdCh0aGlzLmZvcm1Db250cm9sKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgc2VsZWN0ZWQga2V5d29yZHMgZXZlcnkgdGltZSB0aGV5IGNoYW5nZWRcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHVibGljIG9uS2V5d29yZHNDaGFuZ2VkKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRLZXl3b3Jkcy5lbWl0KHRoaXMua2V5d29yZHMubWFwKGtleXdvcmQgPT4ga2V5d29yZC5WYWx1ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGF1dG9jb21wbGV0ZSBzZWxlY3Rpb25cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHVibGljIHNlbGVjdGVkKGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudC5vcHRpb24udmFsdWU7XG4gICAgY29uc3Qgc2VsZWN0ZWRLZXl3b3JkID0gdGhpcy5hbGxLZXl3b3Jkcy5maW5kKFxuICAgICAgb3B0aW9uID0+IG9wdGlvbi5WYWx1ZSA9PT0gdmFsdWVcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgc2VsZWN0ZWRLZXl3b3JkICYmXG4gICAgICAhdGhpcy5rZXl3b3Jkcy5zb21lKGtleXdvcmQgPT4ga2V5d29yZC5WYWx1ZSA9PT0gc2VsZWN0ZWRLZXl3b3JkLlZhbHVlKVxuICAgICkge1xuICAgICAgdGhpcy5rZXl3b3Jkcy5wdXNoKHNlbGVjdGVkS2V5d29yZCk7XG4gICAgICB0aGlzLm9uS2V5d29yZHNDaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5rZXl3b3JkSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyB0aGUga2V5d29yZHMgYmFzZWQgb24gdGhlIGlucHV0XG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgX2ZpbHRlcih2YWx1ZTogc3RyaW5nKTogT3B0aW9uW10ge1xuICAgIHRoaXMub25JbnB1dENoYW5nZWQoKTtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hbGxLZXl3b3Jkcy5maWx0ZXIoa2V5d29yZCA9PlxuICAgICAga2V5d29yZC5WaWV3VmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSlcbiAgICApO1xuICB9XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgQGlmIChmaWVsZFRpdGxlKSB7XG4gICAgPGgxIGNsYXNzPVwiZmllbGRfX3RpdGxlXCI+e3sgZmllbGRUaXRsZSB9fTwvaDE+XG4gIH1cbiAgPGRpdiBjbGFzcz1cImZpZWxkXCIgW25nU3R5bGVdPVwieyB3aWR0aDogZmllbGRXaWR0aCB9XCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICBjbGFzcz1cImZvcm1fX2ZpZWxkXCJcbiAgICAgIFtjb2xvcl09XCJ0aGVtZVwiXG4gICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgIFtzdWJzY3JpcHRTaXppbmddPVwic3Vic2NyaXB0U2l6aW5nXCI+XG4gICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZm9ybV9fZmllbGRfX2xhYmVsXCI+e3sgZmllbGRMYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1jaGlwLWdyaWQgI2NoaXBHcmlkIGFyaWEtbGFiZWw9XCJLZXl3b3JkIHNlbGVjdGlvblwiPlxuICAgICAgICBAZm9yIChrZXl3b3JkIG9mIGtleXdvcmRzOyB0cmFjayBrZXl3b3JkLlZhbHVlKSB7XG4gICAgICAgICAgPG1hdC1jaGlwLXJvdyAocmVtb3ZlZCk9XCJyZW1vdmUoa2V5d29yZClcIj5cbiAgICAgICAgICAgIHt7IGtleXdvcmQuVmlld1ZhbHVlIH19XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdENoaXBSZW1vdmVcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncmVtb3ZlICcgKyBrZXl3b3JkLlZpZXdWYWx1ZVwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbWF0LWNoaXAtcm93PlxuICAgICAgICB9XG4gICAgICA8L21hdC1jaGlwLWdyaWQ+XG4gICAgICA8aW5wdXRcbiAgICAgICAgI2tleXdvcmRJbnB1dFxuICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2VIb2xkZXJcIlxuICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBHcmlkXCJcbiAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cInNlcGFyYXRvcktleXNDb2Rlc1wiIC8+XG4gICAgICA8bWF0LWF1dG9jb21wbGV0ZVxuICAgICAgICAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJzZWxlY3RlZCgkZXZlbnQpXCI+XG4gICAgICAgIEBmb3IgKGtleXdvcmQgb2YgZmlsdGVyZWRLZXl3b3JkcyB8IGFzeW5jOyB0cmFjayBrZXl3b3JkLlZhbHVlKSB7XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImtleXdvcmQuVmFsdWVcIj57e1xuICAgICAgICAgICAga2V5d29yZC5WaWV3VmFsdWVcbiAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgfVxuICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuPC9zZWN0aW9uPlxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLXdpdGgtbWVzc2FnZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1zeXN0ZW0vY29tcG9uZW50cy90ay1mb3JtLWlucHV0LWZpZWxkL21vZGVscy92YWxpZGF0b3Itd2l0aC1tZXNzYWdlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0b3JXaXRoTWVzc2FnZSB7XG4gIHZhbGlkYXRvcjogVmFsaWRhdG9yRm47XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export * from './tk-form-input-field.component';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1zeXN0ZW0vY29tcG9uZW50cy90ay1mb3JtLWlucHV0LWZpZWxkL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQ0FBaUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdGstZm9ybS1pbnB1dC1maWVsZC5jb21wb25lbnQnO1xuIl19
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVrdXMtZGVzaWduLXN5c3RlbS1jb21wb25lbnRzLXRrLWZvcm0taW5wdXQtZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tc3lzdGVtL2NvbXBvbmVudHMvdGstZm9ybS1pbnB1dC1maWVsZC90ZWt1cy1kZXNpZ24tc3lzdGVtLWNvbXBvbmVudHMtdGstZm9ybS1pbnB1dC1maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
import { Input, Output, Component, EventEmitter, } from '@angular/core';
|
|
2
|
-
import { FormControl, FormsModule, ReactiveFormsModule, } from '@angular/forms';
|
|
3
|
-
import { merge } from 'rxjs';
|
|
4
|
-
import { MatFormFieldModule, } from '@angular/material/form-field';
|
|
5
|
-
import { NgStyle } from '@angular/common';
|
|
6
|
-
import { MatInputModule } from '@angular/material/input';
|
|
7
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@angular/forms";
|
|
10
|
-
import * as i2 from "@angular/material/input";
|
|
11
|
-
import * as i3 from "@angular/material/form-field";
|
|
12
|
-
export class TkFormInputFieldComponent {
|
|
13
|
-
/**
|
|
14
|
-
* @ignore
|
|
15
|
-
* Class constructor
|
|
16
|
-
*/
|
|
17
|
-
constructor() {
|
|
18
|
-
/**
|
|
19
|
-
* What color palette to use
|
|
20
|
-
* @default 'accent'
|
|
21
|
-
*/
|
|
22
|
-
this.theme = 'accent';
|
|
23
|
-
/**
|
|
24
|
-
* Whether the field is required
|
|
25
|
-
* @default true
|
|
26
|
-
*/
|
|
27
|
-
this.required = true;
|
|
28
|
-
/**
|
|
29
|
-
* Form field label behavior
|
|
30
|
-
* @default 'auto'
|
|
31
|
-
*/
|
|
32
|
-
this.floatLabel = 'auto';
|
|
33
|
-
/**
|
|
34
|
-
* Form field appearance
|
|
35
|
-
* @default 'fill'
|
|
36
|
-
*/
|
|
37
|
-
this.appearance = 'fill';
|
|
38
|
-
/**
|
|
39
|
-
* Form field reserved space for one line by default.
|
|
40
|
-
* @default 'dynamic'
|
|
41
|
-
*/
|
|
42
|
-
this.subscriptSizing = 'dynamic';
|
|
43
|
-
/**
|
|
44
|
-
* Input field label
|
|
45
|
-
*/
|
|
46
|
-
this.fieldLabel = '';
|
|
47
|
-
/**
|
|
48
|
-
* Input field placeholder
|
|
49
|
-
* @default ''
|
|
50
|
-
*/
|
|
51
|
-
this.placeHolder = '';
|
|
52
|
-
/**
|
|
53
|
-
* Input field control
|
|
54
|
-
* @ignore
|
|
55
|
-
*/
|
|
56
|
-
this.formControl = new FormControl('');
|
|
57
|
-
/**
|
|
58
|
-
* Input field error message
|
|
59
|
-
* @ignore
|
|
60
|
-
*/
|
|
61
|
-
this.errorMessage = '';
|
|
62
|
-
/**
|
|
63
|
-
* Optional validators for the field
|
|
64
|
-
* @default ''
|
|
65
|
-
*/
|
|
66
|
-
this.validatorsWithMessages = {};
|
|
67
|
-
/**
|
|
68
|
-
* Optional async validators for the field
|
|
69
|
-
* @default ''
|
|
70
|
-
*/
|
|
71
|
-
this.asyncValidatorsWithMessages = {};
|
|
72
|
-
/**
|
|
73
|
-
* Input field changes handler
|
|
74
|
-
*/
|
|
75
|
-
this.inputStatus = new EventEmitter();
|
|
76
|
-
merge(this.formControl.statusChanges, this.formControl.valueChanges)
|
|
77
|
-
.pipe(takeUntilDestroyed())
|
|
78
|
-
.subscribe(() => {
|
|
79
|
-
this.updateErrorMessage();
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Component lifecycle method
|
|
84
|
-
* @ignore
|
|
85
|
-
*/
|
|
86
|
-
ngOnInit() {
|
|
87
|
-
this.applyValidators();
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Component lifecycle method
|
|
91
|
-
* @ignore
|
|
92
|
-
*/
|
|
93
|
-
ngOnChanges(changes) {
|
|
94
|
-
if (changes['validatorsWithMessages'] ||
|
|
95
|
-
changes['asyncValidatorsWithMessages']) {
|
|
96
|
-
this.applyValidators();
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* @ignore
|
|
101
|
-
* Component lifecycle method
|
|
102
|
-
*/
|
|
103
|
-
isThereAnyValidator(validatorsWithMessages) {
|
|
104
|
-
return Object.keys(validatorsWithMessages).length > 0;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Applies all the passed validators
|
|
108
|
-
* @ignore
|
|
109
|
-
*/
|
|
110
|
-
applyValidators() {
|
|
111
|
-
const hasSyncValidators = this.isThereAnyValidator(this.validatorsWithMessages);
|
|
112
|
-
const hasAsyncValidators = this.isThereAnyValidator(this.asyncValidatorsWithMessages);
|
|
113
|
-
const activeValidators = hasSyncValidators
|
|
114
|
-
? Object.values(this.validatorsWithMessages).map(validatorWithMessage => validatorWithMessage.validator)
|
|
115
|
-
: [];
|
|
116
|
-
const activeAsyncValidators = hasAsyncValidators
|
|
117
|
-
? Object.values(this.asyncValidatorsWithMessages).map(validatorWithMessage => validatorWithMessage.validator)
|
|
118
|
-
: [];
|
|
119
|
-
if (hasSyncValidators || hasAsyncValidators) {
|
|
120
|
-
this.formControl.setValidators(activeValidators);
|
|
121
|
-
this.formControl.setAsyncValidators(activeAsyncValidators);
|
|
122
|
-
this.formControl.updateValueAndValidity();
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Checks if there is any validation error
|
|
127
|
-
* @ignore
|
|
128
|
-
*/
|
|
129
|
-
checkValidationErrors(errors, validatorsWithMessages) {
|
|
130
|
-
for (const errorKey in errors) {
|
|
131
|
-
if (validatorsWithMessages[errorKey]) {
|
|
132
|
-
this.errorMessage = validatorsWithMessages[errorKey].message;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Emits the formControl variable every time the field value changes
|
|
138
|
-
* @ignore
|
|
139
|
-
*/
|
|
140
|
-
onInputChanged() {
|
|
141
|
-
this.inputStatus.emit(this.formControl);
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Updates the error message every time the input value changes
|
|
145
|
-
* @ignore
|
|
146
|
-
*/
|
|
147
|
-
updateErrorMessage() {
|
|
148
|
-
this.errorMessage = '';
|
|
149
|
-
const errors = this.formControl.errors;
|
|
150
|
-
if (!errors) {
|
|
151
|
-
this.errorMessage = '';
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
this.checkValidationErrors(errors, this.validatorsWithMessages);
|
|
155
|
-
this.checkValidationErrors(errors, this.asyncValidatorsWithMessages);
|
|
156
|
-
this.onInputChanged();
|
|
157
|
-
}
|
|
158
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: TkFormInputFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
159
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.10", type: TkFormInputFieldComponent, isStandalone: true, selector: "lib-tk-form-input-field", inputs: { fieldWidth: "fieldWidth", fieldTitle: "fieldTitle", theme: "theme", required: "required", floatLabel: "floatLabel", appearance: "appearance", subscriptSizing: "subscriptSizing", fieldLabel: "fieldLabel", placeHolder: "placeHolder", inputPrefix: "inputPrefix", inputSuffix: "inputSuffix", validatorsWithMessages: "validatorsWithMessages", asyncValidatorsWithMessages: "asyncValidatorsWithMessages" }, outputs: { inputStatus: "inputStatus" }, usesOnChanges: true, ngImport: i0, template: "<section class=\"section\">\n @if (fieldTitle) {\n <h1 class=\"field__title\">{{ fieldTitle }}</h1>\n }\n <div class=\"field\" [ngStyle]=\"{ width: fieldWidth }\">\n <mat-form-field\n class=\"form__field\"\n [color]=\"theme\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [subscriptSizing]=\"subscriptSizing\">\n <mat-label class=\"form__field__label\">{{ fieldLabel }}</mat-label>\n <input\n matInput\n [required]=\"required\"\n (input)=\"onInputChanged()\"\n [placeholder]=\"placeHolder\"\n [formControl]=\"formControl\"\n (blur)=\"updateErrorMessage()\" />\n @if (inputPrefix) {\n <span class=\"form__field__label\" matTextPrefix\n >{{ inputPrefix }} </span\n >\n }\n @if (inputSuffix) {\n <span class=\"form__field__label\" matTextSuffix>{{ inputSuffix }}</span>\n }\n @if (formControl.invalid) {\n <mat-error class=\"form__field__error\">{{ errorMessage }}</mat-error>\n }\n </mat-form-field>\n </div>\n</section>\n", styles: [".section{gap:.5rem;display:flex;flex-wrap:wrap;width:fit-content;align-items:flex-start;justify-content:flex-start}.field{flex:1;display:flex;min-width:none;max-width:100%;align-items:flex-start;flex-flow:column nowrap;justify-content:flex-start}.form__field{width:100%;font-size:clamp(.8rem,.657rem + .381vw,1rem)}.form__field__label{font-weight:400;font-style:normal;line-height:.98438em;font-size:clamp(.688rem,.554rem + .357vw,.875rem)}.form__field__error{font-weight:400;font-style:normal;font-size:clamp(.688rem,.554rem + .357vw,.875rem)}.field__title{margin:0;padding:0;align-self:center;font-size:clamp(1rem,.94rem + .345vw,1.25rem)}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] }); }
|
|
160
|
-
}
|
|
161
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: TkFormInputFieldComponent, decorators: [{
|
|
162
|
-
type: Component,
|
|
163
|
-
args: [{ selector: 'lib-tk-form-input-field', standalone: true, imports: [
|
|
164
|
-
NgStyle,
|
|
165
|
-
FormsModule,
|
|
166
|
-
MatInputModule,
|
|
167
|
-
MatFormFieldModule,
|
|
168
|
-
ReactiveFormsModule,
|
|
169
|
-
], template: "<section class=\"section\">\n @if (fieldTitle) {\n <h1 class=\"field__title\">{{ fieldTitle }}</h1>\n }\n <div class=\"field\" [ngStyle]=\"{ width: fieldWidth }\">\n <mat-form-field\n class=\"form__field\"\n [color]=\"theme\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [subscriptSizing]=\"subscriptSizing\">\n <mat-label class=\"form__field__label\">{{ fieldLabel }}</mat-label>\n <input\n matInput\n [required]=\"required\"\n (input)=\"onInputChanged()\"\n [placeholder]=\"placeHolder\"\n [formControl]=\"formControl\"\n (blur)=\"updateErrorMessage()\" />\n @if (inputPrefix) {\n <span class=\"form__field__label\" matTextPrefix\n >{{ inputPrefix }} </span\n >\n }\n @if (inputSuffix) {\n <span class=\"form__field__label\" matTextSuffix>{{ inputSuffix }}</span>\n }\n @if (formControl.invalid) {\n <mat-error class=\"form__field__error\">{{ errorMessage }}</mat-error>\n }\n </mat-form-field>\n </div>\n</section>\n", styles: [".section{gap:.5rem;display:flex;flex-wrap:wrap;width:fit-content;align-items:flex-start;justify-content:flex-start}.field{flex:1;display:flex;min-width:none;max-width:100%;align-items:flex-start;flex-flow:column nowrap;justify-content:flex-start}.form__field{width:100%;font-size:clamp(.8rem,.657rem + .381vw,1rem)}.form__field__label{font-weight:400;font-style:normal;line-height:.98438em;font-size:clamp(.688rem,.554rem + .357vw,.875rem)}.form__field__error{font-weight:400;font-style:normal;font-size:clamp(.688rem,.554rem + .357vw,.875rem)}.field__title{margin:0;padding:0;align-self:center;font-size:clamp(1rem,.94rem + .345vw,1.25rem)}\n"] }]
|
|
170
|
-
}], ctorParameters: () => [], propDecorators: { fieldWidth: [{
|
|
171
|
-
type: Input
|
|
172
|
-
}], fieldTitle: [{
|
|
173
|
-
type: Input
|
|
174
|
-
}], theme: [{
|
|
175
|
-
type: Input
|
|
176
|
-
}], required: [{
|
|
177
|
-
type: Input
|
|
178
|
-
}], floatLabel: [{
|
|
179
|
-
type: Input
|
|
180
|
-
}], appearance: [{
|
|
181
|
-
type: Input
|
|
182
|
-
}], subscriptSizing: [{
|
|
183
|
-
type: Input
|
|
184
|
-
}], fieldLabel: [{
|
|
185
|
-
type: Input
|
|
186
|
-
}], placeHolder: [{
|
|
187
|
-
type: Input
|
|
188
|
-
}], inputPrefix: [{
|
|
189
|
-
type: Input
|
|
190
|
-
}], inputSuffix: [{
|
|
191
|
-
type: Input
|
|
192
|
-
}], validatorsWithMessages: [{
|
|
193
|
-
type: Input
|
|
194
|
-
}], asyncValidatorsWithMessages: [{
|
|
195
|
-
type: Input
|
|
196
|
-
}], inputStatus: [{
|
|
197
|
-
type: Output
|
|
198
|
-
}] } });
|
|
199
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGstZm9ybS1pbnB1dC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tc3lzdGVtL2NvbXBvbmVudHMvdGstZm9ybS1pbnB1dC1maWVsZC90ay1mb3JtLWlucHV0LWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1zeXN0ZW0vY29tcG9uZW50cy90ay1mb3JtLWlucHV0LWZpZWxkL3RrLWZvcm0taW5wdXQtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUVULFlBQVksR0FFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsV0FBVyxFQUNYLFdBQVcsRUFJWCxtQkFBbUIsR0FDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFHTCxrQkFBa0IsR0FFbkIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7OztBQWdCaEUsTUFBTSxPQUFPLHlCQUF5QjtJQThHcEM7OztPQUdHO0lBQ0g7UUFuR0E7OztXQUdHO1FBRUksVUFBSyxHQUFrQixRQUFRLENBQUM7UUFFdkM7OztXQUdHO1FBRUksYUFBUSxHQUFHLElBQUksQ0FBQztRQUV2Qjs7O1dBR0c7UUFFSSxlQUFVLEdBQW1CLE1BQU0sQ0FBQztRQUUzQzs7O1dBR0c7UUFFSSxlQUFVLEdBQTJCLE1BQU0sQ0FBQztRQUVuRDs7O1dBR0c7UUFFSSxvQkFBZSxHQUFv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O2dCQVFDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBUUMsV0FBVztzQkFEakIsS0FBSztnQkFvQkMsc0JBQXNCO3NCQUQ1QixLQUFLO2dCQVFDLDJCQUEyQjtzQkFEakMsS0FBSztnQkFRQyxXQUFXO3NCQURqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBDb21wb25lbnQsXG4gIE9uQ2hhbmdlcyxcbiAgRXZlbnRFbWl0dGVyLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEZvcm1Db250cm9sLFxuICBGb3Jtc01vZHVsZSxcbiAgVmFsaWRhdG9yRm4sXG4gIEFzeW5jVmFsaWRhdG9yRm4sXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBGbG9hdExhYmVsVHlwZSxcbiAgU3Vic2NyaXB0U2l6aW5nLFxuICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gIE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UsXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTmdTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUaGVtZVBhbGV0dGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgVmFsaWRhdG9yV2l0aE1lc3NhZ2UgfSBmcm9tICcuL21vZGVscy92YWxpZGF0b3Itd2l0aC1tZXNzYWdlLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXRrLWZvcm0taW5wdXQtZmllbGQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdTdHlsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RrLWZvcm0taW5wdXQtZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdGstZm9ybS1pbnB1dC1maWVsZC5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIFRrRm9ybUlucHV0RmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBpbnB1dCBmaWVsZCB3aWR0aFxuICAgKiBAZGVmYXVsdCAxMDAlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZmllbGRXaWR0aD86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgaW5wdXQgZmllbGQgdGl0bGVcbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGZpZWxkVGl0bGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQgY29sb3IgcGFsZXR0ZSB0byB1c2VcbiAgICogQGRlZmF1bHQgJ2FjY2VudCdcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0aGVtZT86IFRoZW1lUGFsZXR0ZSA9ICdhY2NlbnQnO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmaWVsZCBpcyByZXF1aXJlZFxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgcmVxdWlyZWQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBGb3JtIGZpZWxkIGxhYmVsIGJlaGF2aW9yXG4gICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGZsb2F0TGFiZWw6IEZsb2F0TGFiZWxUeXBlID0gJ2F1dG8nO1xuXG4gIC8qKlxuICAgKiBGb3JtIGZpZWxkIGFwcGVhcmFuY2VcbiAgICogQGRlZmF1bHQgJ2ZpbGwnXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSA9ICdmaWxsJztcblxuICAvKipcbiAgICogRm9ybSBmaWVsZCByZXNlcnZlZCBzcGFjZSBmb3Igb25lIGxpbmUgYnkgZGVmYXVsdC5cbiAgICogQGRlZmF1bHQgJ2R5bmFtaWMnXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3Vic2NyaXB0U2l6aW5nOiBTdWJzY3JpcHRTaXppbmcgPSAnZHluYW1pYyc7XG5cbiAgLyoqXG4gICAqIElucHV0IGZpZWxkIGxhYmVsXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZmllbGRMYWJlbCA9ICcnO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBmaWVsZCBwbGFjZWhvbGRlclxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHBsYWNlSG9sZGVyID0gJyc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIElucHV0IGZpZWxkIHRleHQgcHJlZml4XG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaW5wdXRQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIElucHV0IGZpZWxkIHRleHQgc3VmZml4XG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaW5wdXRTdWZmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElucHV0IGZpZWxkIGNvbnRyb2xcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHVibGljIGZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcblxuICAvKipcbiAgICogSW5wdXQgZmllbGQgZXJyb3IgbWVzc2FnZVxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwdWJsaWMgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogT3B0aW9uYWwgdmFsaWRhdG9ycyBmb3IgdGhlIGZpZWxkXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgdmFsaWRhdG9yc1dpdGhNZXNzYWdlczogeyBba2V5OiBzdHJpbmddOiBWYWxpZGF0b3JXaXRoTWVzc2FnZSB9ID0ge307XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFzeW5jIHZhbGlkYXRvcnMgZm9yIHRoZSBmaWVsZFxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGFzeW5jVmFsaWRhdG9yc1dpdGhNZXNzYWdlczogeyBba2V5OiBzdHJpbmddOiBWYWxpZGF0b3JXaXRoTWVzc2FnZSB9ID1cbiAgICB7fTtcblxuICAvKipcbiAgICogSW5wdXQgZmllbGQgY2hhbmdlcyBoYW5kbGVyXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGlucHV0U3RhdHVzID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtQ29udHJvbD4oKTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKiBDbGFzcyBjb25zdHJ1Y3RvclxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgbWVyZ2UodGhpcy5mb3JtQ29udHJvbC5zdGF0dXNDaGFuZ2VzLCB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcylcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlRXJyb3JNZXNzYWdlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgbGlmZWN5Y2xlIG1ldGhvZFxuICAgKiBAaWdub3JlXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFwcGx5VmFsaWRhdG9ycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBvbmVudCBsaWZlY3ljbGUgbWV0aG9kXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzWyd2YWxpZGF0b3JzV2l0aE1lc3NhZ2VzJ10gfHxcbiAgICAgIGNoYW5nZXNbJ2FzeW5jVmFsaWRhdG9yc1dpdGhNZXNzYWdlcyddXG4gICAgKSB7XG4gICAgICB0aGlzLmFwcGx5VmFsaWRhdG9ycygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqIENvbXBvbmVudCBsaWZlY3ljbGUgbWV0aG9kXG4gICAqL1xuICBwcml2YXRlIGlzVGhlcmVBbnlWYWxpZGF0b3IodmFsaWRhdG9yc1dpdGhNZXNzYWdlczoge1xuICAgIFtrZXk6IHN0cmluZ106IFZhbGlkYXRvcldpdGhNZXNzYWdlO1xuICB9KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbGlkYXRvcnNXaXRoTWVzc2FnZXMpLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBhbGwgdGhlIHBhc3NlZCB2YWxpZGF0b3JzXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgYXBwbHlWYWxpZGF0b3JzKCk6IHZvaWQge1xuICAgIGNvbnN0IGhhc1N5bmNWYWxpZGF0b3JzID0gdGhpcy5pc1RoZXJlQW55VmFsaWRhdG9yKFxuICAgICAgdGhpcy52YWxpZGF0b3JzV2l0aE1lc3NhZ2VzXG4gICAgKTtcblxuICAgIGNvbnN0IGhhc0FzeW5jVmFsaWRhdG9ycyA9IHRoaXMuaXNUaGVyZUFueVZhbGlkYXRvcihcbiAgICAgIHRoaXMuYXN5bmNWYWxpZGF0b3JzV2l0aE1lc3NhZ2VzXG4gICAgKTtcblxuICAgIGNvbnN0IGFjdGl2ZVZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBoYXNTeW5jVmFsaWRhdG9yc1xuICAgICAgPyBPYmplY3QudmFsdWVzKHRoaXMudmFsaWRhdG9yc1dpdGhNZXNzYWdlcykubWFwKFxuICAgICAgICAgIHZhbGlkYXRvcldpdGhNZXNzYWdlID0+IHZhbGlkYXRvcldpdGhNZXNzYWdlLnZhbGlkYXRvclxuICAgICAgICApXG4gICAgICA6IFtdO1xuXG4gICAgY29uc3QgYWN0aXZlQXN5bmNWYWxpZGF0b3JzOiBBc3luY1ZhbGlkYXRvckZuW10gPSBoYXNBc3luY1ZhbGlkYXRvcnNcbiAgICAgID8gT2JqZWN0LnZhbHVlcyh0aGlzLmFzeW5jVmFsaWRhdG9yc1dpdGhNZXNzYWdlcykubWFwKFxuICAgICAgICAgIHZhbGlkYXRvcldpdGhNZXNzYWdlID0+XG4gICAgICAgICAgICB2YWxpZGF0b3JXaXRoTWVzc2FnZS52YWxpZGF0b3IgYXMgQXN5bmNWYWxpZGF0b3JGblxuICAgICAgICApXG4gICAgICA6IFtdO1xuXG4gICAgaWYgKGhhc1N5bmNWYWxpZGF0b3JzIHx8IGhhc0FzeW5jVmFsaWRhdG9ycykge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKGFjdGl2ZVZhbGlkYXRvcnMpO1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoYWN0aXZlQXN5bmNWYWxpZGF0b3JzKTtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlcmUgaXMgYW55IHZhbGlkYXRpb24gZXJyb3JcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1ZhbGlkYXRpb25FcnJvcnMoXG4gICAgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCxcbiAgICB2YWxpZGF0b3JzV2l0aE1lc3NhZ2VzOiB7XG4gICAgICBba2V5OiBzdHJpbmddOiBWYWxpZGF0b3JXaXRoTWVzc2FnZTtcbiAgICB9XG4gICk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZXJyb3JLZXkgaW4gZXJyb3JzKSB7XG4gICAgICBpZiAodmFsaWRhdG9yc1dpdGhNZXNzYWdlc1tlcnJvcktleV0pIHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB2YWxpZGF0b3JzV2l0aE1lc3NhZ2VzW2Vycm9yS2V5XS5tZXNzYWdlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgZm9ybUNvbnRyb2wgdmFyaWFibGUgZXZlcnkgdGltZSB0aGUgZmllbGQgdmFsdWUgY2hhbmdlc1xuICAgKiBAaWdub3JlXG4gICAqL1xuICBwdWJsaWMgb25JbnB1dENoYW5nZWQoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dFN0YXR1cy5lbWl0KHRoaXMuZm9ybUNvbnRyb2wpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGVycm9yIG1lc3NhZ2UgZXZlcnkgdGltZSB0aGUgaW5wdXQgdmFsdWUgY2hhbmdlc1xuICAgKiBAaWdub3JlXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlRXJyb3JNZXNzYWdlKCk6IHZvaWQge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgY29uc3QgZXJyb3JzID0gdGhpcy5mb3JtQ29udHJvbC5lcnJvcnM7XG5cbiAgICBpZiAoIWVycm9ycykge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNoZWNrVmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIHRoaXMudmFsaWRhdG9yc1dpdGhNZXNzYWdlcyk7XG4gICAgdGhpcy5jaGVja1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0aGlzLmFzeW5jVmFsaWRhdG9yc1dpdGhNZXNzYWdlcyk7XG4gICAgdGhpcy5vbklucHV0Q2hhbmdlZCgpO1xuICB9XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgQGlmIChmaWVsZFRpdGxlKSB7XG4gICAgPGgxIGNsYXNzPVwiZmllbGRfX3RpdGxlXCI+e3sgZmllbGRUaXRsZSB9fTwvaDE+XG4gIH1cbiAgPGRpdiBjbGFzcz1cImZpZWxkXCIgW25nU3R5bGVdPVwieyB3aWR0aDogZmllbGRXaWR0aCB9XCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICBjbGFzcz1cImZvcm1fX2ZpZWxkXCJcbiAgICAgIFtjb2xvcl09XCJ0aGVtZVwiXG4gICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICAgICAgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIj5cbiAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmb3JtX19maWVsZF9fbGFiZWxcIj57eyBmaWVsZExhYmVsIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2VkKClcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2VIb2xkZXJcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAoYmx1cik9XCJ1cGRhdGVFcnJvck1lc3NhZ2UoKVwiIC8+XG4gICAgICBAaWYgKGlucHV0UHJlZml4KSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybV9fZmllbGRfX2xhYmVsXCIgbWF0VGV4dFByZWZpeFxuICAgICAgICAgID57eyBpbnB1dFByZWZpeCB9fSZuYnNwOzwvc3BhblxuICAgICAgICA+XG4gICAgICB9XG4gICAgICBAaWYgKGlucHV0U3VmZml4KSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybV9fZmllbGRfX2xhYmVsXCIgbWF0VGV4dFN1ZmZpeD57eyBpbnB1dFN1ZmZpeCB9fTwvc3Bhbj5cbiAgICAgIH1cbiAgICAgIEBpZiAoZm9ybUNvbnRyb2wuaW52YWxpZCkge1xuICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwiZm9ybV9fZmllbGRfX2Vycm9yXCI+e3sgZXJyb3JNZXNzYWdlIH19PC9tYXQtZXJyb3I+XG4gICAgICB9XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG48L3NlY3Rpb24+XG4iXX0=
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tekus-design-system-components-tk-form-autocomplete-field.mjs","sources":["../../../projects/design-system/components/tk-form-autocomplete-field/tk-form-autocomplete-field.component.ts","../../../projects/design-system/components/tk-form-autocomplete-field/tk-form-autocomplete-field.component.html","../../../projects/design-system/components/tk-form-autocomplete-field/tekus-design-system-components-tk-form-autocomplete-field.ts"],"sourcesContent":["import {\n Input,\n Output,\n OnInit,\n Component,\n ViewChild,\n OnDestroy,\n EventEmitter,\n AfterViewInit,\n} from '@angular/core';\nimport {\n SubscriptSizing,\n MatFormFieldModule,\n MatFormFieldAppearance,\n} from '@angular/material/form-field';\nimport {\n MatAutocomplete,\n MatAutocompleteModule,\n} from '@angular/material/autocomplete';\nimport { Option } from './models/option.model';\nimport { AsyncPipe, NgStyle } from '@angular/common';\nimport { ThemePalette } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { map, Observable, startWith, Subscription } from 'rxjs';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'lib-tk-form-autocomplete-field',\n standalone: true,\n imports: [\n NgStyle,\n AsyncPipe,\n FormsModule,\n MatInputModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n MatAutocompleteModule,\n ],\n templateUrl: './tk-form-autocomplete-field.component.html',\n styleUrl: './tk-form-autocomplete-field.component.scss',\n})\nexport class TkFormAutocompleteFieldComponent\n implements OnInit, OnDestroy, AfterViewInit\n{\n /**\n * Input field control\n * @ignore\n */\n public formControl = new FormControl<string | Option>('');\n\n /**\n * Optional input field width\n * @default 100%\n */\n @Input()\n public fieldWidth?: string;\n\n /**\n * What color palette to use\n * @default 'accent'\n */\n @Input()\n public theme?: ThemePalette = 'accent';\n\n /**\n * Form field appearance\n * @default 'fill'\n */\n @Input()\n public appearance: MatFormFieldAppearance = 'fill';\n\n /**\n * Form field reserved space for one line by default.\n * @default 'dynamic'\n */\n @Input()\n public subscriptSizing: SubscriptSizing = 'dynamic';\n\n /**\n * Whether the first option should be highlighted when the autocomplete panel is opened\n * @default true\n */\n @Input()\n public autoActiveFirstOption?: boolean = true;\n\n /**\n * Whether the active option should be selected as the user is navigating.\n * @default true\n */\n @Input()\n public autoSelectActiveOption?: boolean = true;\n\n /**\n * Whether the field is required\n * @default true\n */\n @Input()\n public required = true;\n\n /**\n * Optional input field title\n * @default null\n */\n @Input()\n public fieldTitle?: string;\n\n /**\n * Input field label\n */\n @Input()\n public fieldLabel = '';\n\n /**\n * Input field placeholder\n * @default ''\n */\n @Input()\n public placeHolder = '';\n\n /**\n * Filtered options\n * @ignore\n */\n public filteredOptions!: Observable<Option[]>;\n\n /**\n * Options to be displayed\n * @ignore\n */\n @Input()\n public options: Option[] = [];\n\n /**\n * Option changes handler\n */\n @Output()\n public optionSelected = new EventEmitter<string | number>();\n\n /**\n * Input field changes handler\n */\n @Output()\n public inputStatus = new EventEmitter<FormControl>();\n\n /**\n * Autocomplete bottom reached handler\n */\n @Output()\n public bottomReached = new EventEmitter<void>();\n\n /**\n * Subscriptions property to handle all subscriptions\n * @ignore\n */\n private subscriptions: Subscription = new Subscription();\n\n /**\n * Mat-autocomplete reference\n * @ignore\n */\n @ViewChild('auto') matAutocomplete!: MatAutocomplete;\n\n /**\n * Component lifecycle method\n * @ignore\n */\n ngOnInit(): void {\n this.filteredOptions = this.formControl.valueChanges.pipe(\n startWith(''),\n map(value => {\n const option = typeof value === 'string' ? value : value?.ViewValue;\n return option ? this._filterOptions(option) : this.options.slice();\n })\n );\n }\n\n /**\n * Component lifecycle method\n * @ignore\n */\n ngAfterViewInit(): void {\n this.initAutocompleteListener();\n }\n\n /**\n * Starts the autocomplete subscriptions\n * @ignore\n */\n public initAutocompleteListener(): void {\n const openedSubscription = this.onAutocompleteOpened();\n const closedSubscription = this.onAutocompleteClosed();\n\n this.subscriptions.add(openedSubscription);\n this.subscriptions.add(closedSubscription);\n }\n\n /**\n * Handles the autocomplete opened event\n * @ignore\n */\n private onAutocompleteOpened(): Subscription {\n return this.matAutocomplete.opened.subscribe(() => {\n setTimeout(() => {\n const panel = this.matAutocomplete.panel?.nativeElement;\n if (panel) {\n panel.addEventListener('scroll', this.onScroll.bind(this));\n }\n });\n });\n }\n\n /**\n * Handles the autocomplete closed event\n * @ignore\n */\n private onAutocompleteClosed(): Subscription {\n return this.matAutocomplete.closed.subscribe(() => {\n const panel = this.matAutocomplete.panel?.nativeElement;\n if (panel) {\n panel.removeEventListener('scroll', this.onScroll.bind(this));\n }\n });\n }\n\n /**\n * Handles the scrolling event\n * @ignore\n */\n private onScroll(event: Event) {\n const panel = event.target as HTMLElement;\n const scrollTop = panel.scrollTop;\n const scrollHeight = panel.scrollHeight;\n const offsetHeight = panel.offsetHeight;\n\n if (scrollTop + offsetHeight >= scrollHeight) {\n this.onScrolledToEnd();\n }\n }\n\n /**\n * Emits the bottomReached when the user reaches the end of the autocomplete panel\n * @ignore\n */\n private onScrolledToEnd(): void {\n this.bottomReached.emit();\n }\n\n /**\n * Conditions the options' view to display the view value\n * @ignore\n */\n public displayFn(option: Option | null): string {\n return option?.ViewValue ? option.ViewValue : '';\n }\n\n /**\n * Filters the options according to the input value\n * @ignore\n */\n private _filterOptions(value: string): Option[] {\n const filterValue = value.toLowerCase();\n\n return this.options.filter(option =>\n option.ViewValue.toLowerCase().includes(filterValue)\n );\n }\n\n /**\n * Emits the selected option every time it changes\n * @ignore\n */\n public onSelectionChanged(option: Option): void {\n this.optionSelected.emit(option.Value);\n }\n\n /**\n * Emits the formControl variable every time the input value changes\n * @ignore\n */\n public onInputChanged(): void {\n this.inputStatus.emit(this.formControl);\n }\n\n /**\n * Unsubscribe from all subscriptions when the component is destroyed\n * @ignore\n */\n ngOnDestroy() {\n this.subscriptions?.unsubscribe();\n }\n}\n","<section class=\"section\">\n @if (fieldTitle) {\n <h1 class=\"field__title\">{{ fieldTitle }}</h1>\n }\n <div class=\"field\" [ngStyle]=\"{ width: fieldWidth }\">\n <mat-form-field\n class=\"form__field\"\n [color]=\"theme\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\">\n <mat-label class=\"form__field__label\">{{ fieldLabel }}</mat-label>\n <input\n matInput\n aria-label=\"Option\"\n [required]=\"required\"\n [matAutocomplete]=\"auto\"\n (input)=\"onInputChanged()\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeHolder\" />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [displayWith]=\"displayFn\"\n [autoActiveFirstOption]=\"autoActiveFirstOption\"\n [autoSelectActiveOption]=\"autoSelectActiveOption\"\n (optionSelected)=\"onSelectionChanged($event.option.value)\">\n @for (option of filteredOptions | async; track option.Value) {\n <mat-option [value]=\"option\">\n <span>{{ option.ViewValue }}</span>\n </mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n </div>\n</section>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;MAyCa,gCAAgC,CAAA;AAf7C,IAAA,WAAA,GAAA;AAkBE;;;AAGG;AACI,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,WAAW,CAAkB,EAAE,CAAC,CAAC;AAS1D;;;AAGG;QAEI,IAAK,CAAA,KAAA,GAAkB,QAAQ,CAAC;AAEvC;;;AAGG;QAEI,IAAU,CAAA,UAAA,GAA2B,MAAM,CAAC;AAEnD;;;AAGG;QAEI,IAAe,CAAA,eAAA,GAAoB,SAAS,CAAC;AAEpD;;;AAGG;QAEI,IAAqB,CAAA,qBAAA,GAAa,IAAI,CAAC;AAE9C;;;AAGG;QAEI,IAAsB,CAAA,sBAAA,GAAa,IAAI,CAAC;AAE/C;;;AAGG;QAEI,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC;AASvB;;AAEG;QAEI,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;AAEvB;;;AAGG;QAEI,IAAW,CAAA,WAAA,GAAG,EAAE,CAAC;AAQxB;;;AAGG;QAEI,IAAO,CAAA,OAAA,GAAa,EAAE,CAAC;AAE9B;;AAEG;AAEI,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAmB,CAAC;AAE5D;;AAEG;AAEI,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAe,CAAC;AAErD;;AAEG;AAEI,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;AAEhD;;;AAGG;AACK,QAAA,IAAA,CAAA,aAAa,GAAiB,IAAI,YAAY,EAAE,CAAC;AAwI1D,KAAA;AAhIC;;;AAGG;IACH,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CACvD,SAAS,CAAC,EAAE,CAAC,EACb,GAAG,CAAC,KAAK,IAAG;AACV,YAAA,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,KAAK,EAAE,SAAS,CAAC;AACpE,YAAA,OAAO,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;SACpE,CAAC,CACH,CAAC;KACH;AAED;;;AAGG;IACH,eAAe,GAAA;QACb,IAAI,CAAC,wBAAwB,EAAE,CAAC;KACjC;AAED;;;AAGG;IACI,wBAAwB,GAAA;AAC7B,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACvD,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAEvD,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;KAC5C;AAED;;;AAGG;IACK,oBAAoB,GAAA;QAC1B,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;YAChD,UAAU,CAAC,MAAK;gBACd,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,aAAa,CAAC;gBACxD,IAAI,KAAK,EAAE;AACT,oBAAA,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC5D;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;AAED;;;AAGG;IACK,oBAAoB,GAAA;QAC1B,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;YAChD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,aAAa,CAAC;YACxD,IAAI,KAAK,EAAE;AACT,gBAAA,KAAK,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aAC/D;AACH,SAAC,CAAC,CAAC;KACJ;AAED;;;AAGG;AACK,IAAA,QAAQ,CAAC,KAAY,EAAA;AAC3B,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAqB,CAAC;AAC1C,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AAClC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;AACxC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;AAExC,QAAA,IAAI,SAAS,GAAG,YAAY,IAAI,YAAY,EAAE;YAC5C,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;KACF;AAED;;;AAGG;IACK,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;KAC3B;AAED;;;AAGG;AACI,IAAA,SAAS,CAAC,MAAqB,EAAA;AACpC,QAAA,OAAO,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC;KAClD;AAED;;;AAGG;AACK,IAAA,cAAc,CAAC,KAAa,EAAA;AAClC,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAExC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAC/B,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CACrD,CAAC;KACH;AAED;;;AAGG;AACI,IAAA,kBAAkB,CAAC,MAAc,EAAA;QACtC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACxC;AAED;;;AAGG;IACI,cAAc,GAAA;QACnB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACzC;AAED;;;AAGG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC;KACnC;+GAxPU,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gCAAgC,ECzC7C,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,gsCAkCA,EDJI,MAAA,EAAA,CAAA,6hBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,sEACP,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACT,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,iNACnB,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,OAAA,EAAA,8BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAKZ,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAf5C,SAAS;+BACE,gCAAgC,EAAA,UAAA,EAC9B,IAAI,EACP,OAAA,EAAA;wBACP,OAAO;wBACP,SAAS;wBACT,WAAW;wBACX,cAAc;wBACd,kBAAkB;wBAClB,mBAAmB;wBACnB,qBAAqB;AACtB,qBAAA,EAAA,QAAA,EAAA,gsCAAA,EAAA,MAAA,EAAA,CAAA,6hBAAA,CAAA,EAAA,CAAA;8BAkBM,UAAU,EAAA,CAAA;sBADhB,KAAK;gBAQC,KAAK,EAAA,CAAA;sBADX,KAAK;gBAQC,UAAU,EAAA,CAAA;sBADhB,KAAK;gBAQC,eAAe,EAAA,CAAA;sBADrB,KAAK;gBAQC,qBAAqB,EAAA,CAAA;sBAD3B,KAAK;gBAQC,sBAAsB,EAAA,CAAA;sBAD5B,KAAK;gBAQC,QAAQ,EAAA,CAAA;sBADd,KAAK;gBAQC,UAAU,EAAA,CAAA;sBADhB,KAAK;gBAOC,UAAU,EAAA,CAAA;sBADhB,KAAK;gBAQC,WAAW,EAAA,CAAA;sBADjB,KAAK;gBAcC,OAAO,EAAA,CAAA;sBADb,KAAK;gBAOC,cAAc,EAAA,CAAA;sBADpB,MAAM;gBAOA,WAAW,EAAA,CAAA;sBADjB,MAAM;gBAOA,aAAa,EAAA,CAAA;sBADnB,MAAM;gBAaY,eAAe,EAAA,CAAA;sBAAjC,SAAS;uBAAC,MAAM,CAAA;;;AEhKnB;;AAEG;;;;"}
|