@3kles/kles-material-dynamicforms 17.2.3 → 17.3.0
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/directive/dynamic-component.directive.mjs +3 -3
- package/esm2022/lib/directive/dynamic-field.directive.mjs +3 -3
- package/esm2022/lib/dynamic-form.component.mjs +3 -3
- package/esm2022/lib/fields/array.component.mjs +3 -3
- package/esm2022/lib/fields/badge.component.mjs +3 -3
- package/esm2022/lib/fields/button-fab.component.mjs +3 -3
- package/esm2022/lib/fields/button-form.component.mjs +3 -3
- package/esm2022/lib/fields/button-icon.component.mjs +3 -3
- package/esm2022/lib/fields/button-mini-fab.component.mjs +3 -3
- package/esm2022/lib/fields/button-toogle-group.component.mjs +3 -3
- package/esm2022/lib/fields/buttonchecker-form.component.mjs +3 -3
- package/esm2022/lib/fields/buttonfile-form.component.mjs +3 -3
- package/esm2022/lib/fields/checkbox.component.mjs +3 -3
- package/esm2022/lib/fields/chip.component.mjs +3 -3
- package/esm2022/lib/fields/clear.component.mjs +3 -3
- package/esm2022/lib/fields/color.component.mjs +3 -3
- package/esm2022/lib/fields/date-time.component.mjs +3 -3
- package/esm2022/lib/fields/date.component.mjs +3 -3
- package/esm2022/lib/fields/field.abstract.mjs +3 -3
- package/esm2022/lib/fields/group.component.mjs +3 -3
- package/esm2022/lib/fields/icon.component.mjs +3 -3
- package/esm2022/lib/fields/input.clearable.component.mjs +3 -3
- package/esm2022/lib/fields/input.component.mjs +3 -3
- package/esm2022/lib/fields/label.component.mjs +3 -3
- package/esm2022/lib/fields/line-break.component.mjs +3 -3
- package/esm2022/lib/fields/link.component.mjs +3 -3
- package/esm2022/lib/fields/list-field.component.mjs +3 -3
- package/esm2022/lib/fields/radio.component.mjs +3 -3
- package/esm2022/lib/fields/range.component.mjs +3 -3
- package/esm2022/lib/fields/select.component.mjs +3 -3
- package/esm2022/lib/fields/select.lazy-search.component.mjs +3 -3
- package/esm2022/lib/fields/select.search.component.mjs +3 -3
- package/esm2022/lib/fields/selection-list.component.mjs +109 -33
- package/esm2022/lib/fields/selection-list.search.component.mjs +188 -0
- package/esm2022/lib/fields/slide-toggle.component.mjs +3 -3
- package/esm2022/lib/fields/text.component.mjs +3 -3
- package/esm2022/lib/fields/textarea.component.mjs +3 -3
- package/esm2022/lib/forms/button-control-base.mjs +3 -3
- package/esm2022/lib/forms/button-control.component.mjs +3 -3
- package/esm2022/lib/forms/buttonchecker-control.component.mjs +3 -3
- package/esm2022/lib/forms/buttonfile-control.component.mjs +3 -3
- package/esm2022/lib/forms/fab-control.component.mjs +3 -3
- package/esm2022/lib/forms/icon-button-control.component.mjs +3 -3
- package/esm2022/lib/forms/mini-fab-control.component.mjs +3 -3
- package/esm2022/lib/kles-material-dynamicforms.module.mjs +12 -8
- package/esm2022/lib/matcher/form-error.matcher.mjs +3 -3
- package/esm2022/lib/modules/material.module.mjs +4 -4
- package/esm2022/lib/pipe/array.pipe.mjs +3 -3
- package/esm2022/lib/pipe/transform.pipe.mjs +3 -3
- package/esm2022/lib/selection/selection-model.mjs +232 -0
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/3kles-kles-material-dynamicforms.mjs +654 -178
- package/fesm2022/3kles-kles-material-dynamicforms.mjs.map +1 -1
- package/lib/fields/selection-list.component.d.ts +4 -0
- package/lib/fields/selection-list.search.component.d.ts +18 -0
- package/lib/kles-material-dynamicforms.module.d.ts +13 -12
- package/lib/selection/selection-model.d.ts +102 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -10,14 +10,14 @@ export class KlesFormLinkComponent extends KlesFieldAbstract {
|
|
|
10
10
|
ngOnDestroy() {
|
|
11
11
|
super.ngOnDestroy();
|
|
12
12
|
}
|
|
13
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
14
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.
|
|
13
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: KlesFormLinkComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
14
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: KlesFormLinkComponent, selector: "kles-form-link", usesInheritance: true, ngImport: i0, template: `
|
|
15
15
|
<a [href]="group.controls[field.name].value" matTooltip="{{field.tooltip}}" [attr.id]="field.id" [ngClass]="field.ngClass">
|
|
16
16
|
{{field.label}}
|
|
17
17
|
</a>
|
|
18
18
|
`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
|
|
19
19
|
}
|
|
20
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: KlesFormLinkComponent, decorators: [{
|
|
21
21
|
type: Component,
|
|
22
22
|
args: [{
|
|
23
23
|
selector: 'kles-form-link',
|
|
@@ -58,8 +58,8 @@ let KlesFormListFieldComponent = class KlesFormListFieldComponent extends KlesFi
|
|
|
58
58
|
ngOnDestroy() {
|
|
59
59
|
super.ngOnDestroy();
|
|
60
60
|
}
|
|
61
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
62
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.
|
|
61
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: KlesFormListFieldComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
62
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.7", type: KlesFormListFieldComponent, selector: "kles-form-listfield", usesInheritance: true, ngImport: i0, template: `
|
|
63
63
|
<div [formGroup]="group" class="form-element">
|
|
64
64
|
{{field.label | translate}}
|
|
65
65
|
<button mat-icon-button color="primary" (click)="addField()">
|
|
@@ -100,7 +100,7 @@ KlesFormListFieldComponent = __decorate([
|
|
|
100
100
|
FieldMapper({ type: 'listfield', factory: (field) => (new KlesFormArray(field).create()) })
|
|
101
101
|
], KlesFormListFieldComponent);
|
|
102
102
|
export { KlesFormListFieldComponent };
|
|
103
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
103
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: KlesFormListFieldComponent, decorators: [{
|
|
104
104
|
type: Component,
|
|
105
105
|
args: [{ selector: 'kles-form-listfield', template: `
|
|
106
106
|
<div [formGroup]="group" class="form-element">
|
|
@@ -24,8 +24,8 @@ export class KlesFormRadioComponent extends KlesFieldAbstract {
|
|
|
24
24
|
ngOnDestroy() {
|
|
25
25
|
super.ngOnDestroy();
|
|
26
26
|
}
|
|
27
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
28
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.
|
|
27
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: KlesFormRadioComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
28
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.7", type: KlesFormRadioComponent, selector: "kles-form-radiobutton", usesInheritance: true, ngImport: i0, template: `
|
|
29
29
|
<div [formGroup]="group">
|
|
30
30
|
<label class="radio-label-padding">{{field.label}}</label>
|
|
31
31
|
<mat-radio-group matTooltip="{{field.tooltip}}" [attr.id]="field.id" [ngClass]="field.ngClass" [formControlName]="field.name">
|
|
@@ -50,7 +50,7 @@ export class KlesFormRadioComponent extends KlesFieldAbstract {
|
|
|
50
50
|
</div>
|
|
51
51
|
`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i4.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex", "id", "name", "aria-label", "aria-labelledby", "aria-describedby", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] }); }
|
|
52
52
|
}
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: KlesFormRadioComponent, decorators: [{
|
|
54
54
|
type: Component,
|
|
55
55
|
args: [{ selector: 'kles-form-radiobutton', template: `
|
|
56
56
|
<div [formGroup]="group">
|
|
@@ -20,8 +20,8 @@ let KlesFormRangeComponent = class KlesFormRangeComponent extends KlesFieldAbstr
|
|
|
20
20
|
ngOnDestroy() {
|
|
21
21
|
super.ngOnDestroy();
|
|
22
22
|
}
|
|
23
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
24
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.
|
|
23
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: KlesFormRangeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
24
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.7", type: KlesFormRangeComponent, selector: "kles-form-rangepicker", usesInheritance: true, ngImport: i0, template: `
|
|
25
25
|
<mat-form-field [subscriptSizing]="field.subscriptSizing" [color]="field.color" [formGroup]="group">
|
|
26
26
|
|
|
27
27
|
<mat-label>{{field.label}}</mat-label>
|
|
@@ -63,7 +63,7 @@ KlesFormRangeComponent = __decorate([
|
|
|
63
63
|
FieldMapper({ type: EnumType.range, factory: (field) => (new KlesFormRange(field).create()) })
|
|
64
64
|
], KlesFormRangeComponent);
|
|
65
65
|
export { KlesFormRangeComponent };
|
|
66
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
66
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: KlesFormRangeComponent, decorators: [{
|
|
67
67
|
type: Component,
|
|
68
68
|
args: [{ selector: "kles-form-rangepicker", template: `
|
|
69
69
|
<mat-form-field [subscriptSizing]="field.subscriptSizing" [color]="field.color" [formGroup]="group">
|
|
@@ -115,8 +115,8 @@ let KlesFormSelectComponent = class KlesFormSelectComponent extends KlesFieldAbs
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
119
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.
|
|
118
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: KlesFormSelectComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
119
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.7", type: KlesFormSelectComponent, selector: "kles-form-select", viewQueries: [{ propertyName: "cdkVirtualScrollViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }, { propertyName: "options", predicate: MatOption, descendants: true }], usesInheritance: true, ngImport: i0, template: `
|
|
120
120
|
<mat-form-field [subscriptSizing]="field.subscriptSizing" class="margin-top" [color]="field.color" [formGroup]="group">
|
|
121
121
|
@if (field.label) {
|
|
122
122
|
<mat-label>{{field.label}}</mat-label>
|
|
@@ -245,7 +245,7 @@ KlesFormSelectComponent = __decorate([
|
|
|
245
245
|
FieldMapper({ type: EnumType.select })
|
|
246
246
|
], KlesFormSelectComponent);
|
|
247
247
|
export { KlesFormSelectComponent };
|
|
248
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
248
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: KlesFormSelectComponent, decorators: [{
|
|
249
249
|
type: Component,
|
|
250
250
|
args: [{ selector: 'kles-form-select', template: `
|
|
251
251
|
<mat-form-field [subscriptSizing]="field.subscriptSizing" class="margin-top" [color]="field.color" [formGroup]="group">
|
|
@@ -60,8 +60,8 @@ export class KlesFormSelectLazySearchComponent extends KlesFormSelectSearchCompo
|
|
|
60
60
|
this.ref.markForCheck();
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
64
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.
|
|
63
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: KlesFormSelectLazySearchComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
64
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.7", type: KlesFormSelectLazySearchComponent, selector: "kles-form-select-lazy-search", usesInheritance: true, ngImport: i0, template: `
|
|
65
65
|
<mat-form-field [subscriptSizing]="field.subscriptSizing" class="margin-top" [color]="field.color" [formGroup]="group">
|
|
66
66
|
@if (field.label) {
|
|
67
67
|
<mat-label>{{field.label}}</mat-label>
|
|
@@ -192,7 +192,7 @@ export class KlesFormSelectLazySearchComponent extends KlesFormSelectSearchCompo
|
|
|
192
192
|
</mat-form-field>
|
|
193
193
|
`, isInline: true, styles: [".loadingSelect{display:flex;flex-direction:row;justify-content:space-between;align-items:center}\n", "mat-form-field{width:100%}\n", ".selectAll{padding:0 16px 0 5px;display:flex!important}\n", ".selectAll .mdc-form-field{width:100%}\n", ".selectAll .mdc-form-field .mdc-label{width:100%;min-height:48px;align-items:center;display:flex}\n", ".selectAll .mdc-form-field .mdc-checkbox__ripple{display:none!important}\n", "::ng-deep .hide-checkbox .mat-pseudo-checkbox{display:none!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: 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.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "aria-describedby", "panelClass", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i4.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i9.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i9.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i9.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i10.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti"], outputs: ["toggleAll"] }, { kind: "directive", type: i11.KlesComponentDirective, selector: "[klesComponent]", inputs: ["component", "value", "field"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }, { kind: "pipe", type: i13.KlesTransformPipe, name: "klesTransform" }] }); }
|
|
194
194
|
}
|
|
195
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
195
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: KlesFormSelectLazySearchComponent, decorators: [{
|
|
196
196
|
type: Component,
|
|
197
197
|
args: [{ selector: 'kles-form-select-lazy-search', template: `
|
|
198
198
|
<mat-form-field [subscriptSizing]="field.subscriptSizing" class="margin-top" [color]="field.color" [formGroup]="group">
|
|
@@ -172,8 +172,8 @@ export class KlesFormSelectSearchComponent extends KlesFieldAbstract {
|
|
|
172
172
|
}
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
176
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.
|
|
175
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: KlesFormSelectSearchComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
176
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.7", type: KlesFormSelectSearchComponent, selector: "kles-form-select-search", viewQueries: [{ propertyName: "cdkVirtualScrollViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }, { propertyName: "options", predicate: MatOption, descendants: true }], usesInheritance: true, ngImport: i0, template: `
|
|
177
177
|
<mat-form-field [subscriptSizing]="field.subscriptSizing" class="margin-top" [color]="field.color" [formGroup]="group">
|
|
178
178
|
@if (field.label) {
|
|
179
179
|
<mat-label>{{field.label}}</mat-label>
|
|
@@ -312,7 +312,7 @@ export class KlesFormSelectSearchComponent extends KlesFieldAbstract {
|
|
|
312
312
|
</mat-form-field>
|
|
313
313
|
`, isInline: true, styles: [".loadingSelect{display:flex;flex-direction:row;justify-content:space-between;align-items:center}\n", "mat-form-field{width:100%}\n", "::ng-deep .selectAll{padding:0 16px 0 5px!important;display:flex!important}\n", "::ng-deep .selectAll .mdc-form-field{width:100%}\n", "::ng-deep .selectAll .mdc-form-field .mdc-label{width:100%;min-height:48px;align-items:center;display:flex}\n", "::ng-deep .selectAll .mdc-form-field .mdc-checkbox__ripple{display:none!important}\n", "::ng-deep .hide-checkbox .mat-pseudo-checkbox{display:none!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: 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.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "aria-describedby", "panelClass", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i4.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i9.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i9.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i9.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i10.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti"], outputs: ["toggleAll"] }, { kind: "directive", type: i11.KlesComponentDirective, selector: "[klesComponent]", inputs: ["component", "value", "field"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }, { kind: "pipe", type: i13.KlesTransformPipe, name: "klesTransform" }] }); }
|
|
314
314
|
}
|
|
315
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
315
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: KlesFormSelectSearchComponent, decorators: [{
|
|
316
316
|
type: Component,
|
|
317
317
|
args: [{ selector: 'kles-form-select-search', template: `
|
|
318
318
|
<mat-form-field [subscriptSizing]="field.subscriptSizing" class="margin-top" [color]="field.color" [formGroup]="group">
|
|
@@ -1,15 +1,30 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
2
|
import { Observable, of } from 'rxjs';
|
|
3
3
|
import { KlesFieldAbstract } from './field.abstract';
|
|
4
|
+
import { takeUntil } from 'rxjs/operators';
|
|
5
|
+
import { KlesSelectionModel } from '../selection/selection-model';
|
|
4
6
|
import * as i0 from "@angular/core";
|
|
5
7
|
import * as i1 from "@angular/common";
|
|
6
8
|
import * as i2 from "@angular/forms";
|
|
7
9
|
import * as i3 from "@angular/material/list";
|
|
8
|
-
import * as i4 from "
|
|
9
|
-
import * as i5 from "
|
|
10
|
+
import * as i4 from "@angular/material/progress-spinner";
|
|
11
|
+
import * as i5 from "@angular/cdk/scrolling";
|
|
12
|
+
import * as i6 from "../directive/dynamic-component.directive";
|
|
13
|
+
import * as i7 from "../pipe/transform.pipe";
|
|
10
14
|
export class KlesFormSelectionListComponent extends KlesFieldAbstract {
|
|
11
15
|
ngOnInit() {
|
|
12
16
|
super.ngOnInit();
|
|
17
|
+
this.selection = new KlesSelectionModel(this.field.multiple || false, [], true, ((o1, o2) => {
|
|
18
|
+
if (this.field.property) {
|
|
19
|
+
return o1?.[this.field.property] === o2?.[this.field.property];
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
return o1 === o2;
|
|
23
|
+
}
|
|
24
|
+
}));
|
|
25
|
+
if (this.field.value) {
|
|
26
|
+
this.selection.select(Array.isArray(this.field.value) ? this.field.value : [this.field.value]);
|
|
27
|
+
}
|
|
13
28
|
if (this.field.options instanceof Observable) {
|
|
14
29
|
this.options$ = this.field.options;
|
|
15
30
|
}
|
|
@@ -19,53 +34,114 @@ export class KlesFormSelectionListComponent extends KlesFieldAbstract {
|
|
|
19
34
|
else {
|
|
20
35
|
this.options$ = of(this.field.options);
|
|
21
36
|
}
|
|
37
|
+
this.group.controls[this.field.name].valueChanges
|
|
38
|
+
.pipe(takeUntil(this._onDestroy)).subscribe((value) => {
|
|
39
|
+
this.selection.setSelection(Array.isArray(value) ? value : [value], { emitEvent: false });
|
|
40
|
+
});
|
|
41
|
+
this.selection.changed.pipe(takeUntil(this._onDestroy)).subscribe(change => {
|
|
42
|
+
this.group.controls[this.field.name].patchValue(change.source.selected);
|
|
43
|
+
});
|
|
22
44
|
}
|
|
23
45
|
ngOnDestroy() {
|
|
24
46
|
super.ngOnDestroy();
|
|
25
47
|
}
|
|
26
|
-
|
|
27
|
-
|
|
48
|
+
onSelectionChange(selection) {
|
|
49
|
+
selection.options.forEach(option => {
|
|
50
|
+
option.selected ? this.selection.select([option.value])
|
|
51
|
+
: this.selection.deselect([option.value]);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: KlesFormSelectionListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
55
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.7", type: KlesFormSelectionListComponent, selector: "kles-form-selection-list", usesInheritance: true, ngImport: i0, template: `
|
|
28
56
|
<div class="margin-top" [formGroup]="group">
|
|
29
|
-
<mat-selection-list [
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
57
|
+
<mat-selection-list [attr.id]="field.id" [multiple]="field.multiple" [ngClass]="field.ngClass"
|
|
58
|
+
(selectionChange)="onSelectionChange($event)">
|
|
59
|
+
@if(options$ | async; as options){
|
|
60
|
+
@if(field.virtualScroll){
|
|
61
|
+
<cdk-virtual-scroll-viewport [itemSize]="field.itemSize || 20" style="height:100%">
|
|
62
|
+
@if (!field.autocompleteComponent) {
|
|
63
|
+
<mat-list-option *cdkVirtualFor="let item of options; templateCacheSize: 0"
|
|
64
|
+
[value]="item" [selected]="selection.isSelected(item)">
|
|
65
|
+
{{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}
|
|
66
|
+
</mat-list-option>
|
|
67
|
+
}
|
|
68
|
+
@else{
|
|
69
|
+
<mat-list-option *cdkVirtualFor="let item of options; templateCacheSize: 0"
|
|
70
|
+
[value]="item" [selected]="selection.isSelected(item)">
|
|
71
|
+
<ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
|
|
72
|
+
</mat-list-option>
|
|
73
|
+
}
|
|
74
|
+
</cdk-virtual-scroll-viewport>
|
|
42
75
|
}
|
|
76
|
+
@else{
|
|
77
|
+
@if (!field.autocompleteComponent) {
|
|
78
|
+
@for (item of options; track item) {
|
|
79
|
+
<mat-list-option [value]="item" [selected]="selection.isSelected(item)">
|
|
80
|
+
{{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}
|
|
81
|
+
</mat-list-option>
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
@else {
|
|
85
|
+
@for (item of options; track item) {
|
|
86
|
+
<mat-list-option [value]="item" [selected]="selection.isSelected(item)">
|
|
87
|
+
<ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
|
|
88
|
+
</mat-list-option>
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
}@else{
|
|
94
|
+
<mat-spinner></mat-spinner>
|
|
43
95
|
}
|
|
44
96
|
</mat-selection-list>
|
|
45
97
|
</div>
|
|
46
|
-
`, isInline: true, styles: ["mat-selection-list{width:100%;height:250px;overflow:auto}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.
|
|
98
|
+
`, isInline: true, styles: ["mat-selection-list{width:100%;height:250px;overflow:auto}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i3.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i5.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i5.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i5.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i6.KlesComponentDirective, selector: "[klesComponent]", inputs: ["component", "value", "field"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.KlesTransformPipe, name: "klesTransform" }] }); }
|
|
47
99
|
}
|
|
48
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: KlesFormSelectionListComponent, decorators: [{
|
|
49
101
|
type: Component,
|
|
50
102
|
args: [{ selector: 'kles-form-selection-list', template: `
|
|
51
103
|
<div class="margin-top" [formGroup]="group">
|
|
52
|
-
<mat-selection-list [
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
104
|
+
<mat-selection-list [attr.id]="field.id" [multiple]="field.multiple" [ngClass]="field.ngClass"
|
|
105
|
+
(selectionChange)="onSelectionChange($event)">
|
|
106
|
+
@if(options$ | async; as options){
|
|
107
|
+
@if(field.virtualScroll){
|
|
108
|
+
<cdk-virtual-scroll-viewport [itemSize]="field.itemSize || 20" style="height:100%">
|
|
109
|
+
@if (!field.autocompleteComponent) {
|
|
110
|
+
<mat-list-option *cdkVirtualFor="let item of options; templateCacheSize: 0"
|
|
111
|
+
[value]="item" [selected]="selection.isSelected(item)">
|
|
112
|
+
{{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}
|
|
113
|
+
</mat-list-option>
|
|
114
|
+
}
|
|
115
|
+
@else{
|
|
116
|
+
<mat-list-option *cdkVirtualFor="let item of options; templateCacheSize: 0"
|
|
117
|
+
[value]="item" [selected]="selection.isSelected(item)">
|
|
118
|
+
<ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
|
|
119
|
+
</mat-list-option>
|
|
120
|
+
}
|
|
121
|
+
</cdk-virtual-scroll-viewport>
|
|
65
122
|
}
|
|
123
|
+
@else{
|
|
124
|
+
@if (!field.autocompleteComponent) {
|
|
125
|
+
@for (item of options; track item) {
|
|
126
|
+
<mat-list-option [value]="item" [selected]="selection.isSelected(item)">
|
|
127
|
+
{{(field.property ? item[field.property] : item) | klesTransform:field.pipeTransform}}
|
|
128
|
+
</mat-list-option>
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
@else {
|
|
132
|
+
@for (item of options; track item) {
|
|
133
|
+
<mat-list-option [value]="item" [selected]="selection.isSelected(item)">
|
|
134
|
+
<ng-container klesComponent [component]="field.autocompleteComponent" [value]="item" [field]="field"></ng-container>
|
|
135
|
+
</mat-list-option>
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
}@else{
|
|
141
|
+
<mat-spinner></mat-spinner>
|
|
66
142
|
}
|
|
67
143
|
</mat-selection-list>
|
|
68
144
|
</div>
|
|
69
145
|
`, styles: ["mat-selection-list{width:100%;height:250px;overflow:auto}\n"] }]
|
|
70
146
|
}] });
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xlcy1tYXRlcmlhbC1keW5hbWljZm9ybXMvc3JjL2xpYi9maWVsZHMvc2VsZWN0aW9uLWxpc3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7O0FBbURsRSxNQUFNLE9BQU8sOEJBQStCLFNBQVEsaUJBQWlCO0lBS2pFLFFBQVE7UUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGtCQUFrQixDQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUMvRSxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQU8sRUFBRSxFQUFFO1lBQ2xCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQ3JCLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ2xFO2lCQUFNO2dCQUNILE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUNwQjtRQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFUixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ2xHO1FBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sWUFBWSxVQUFVLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUN0QzthQUNJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLFlBQVksUUFBUSxFQUFFO1lBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN4QzthQUNJO1lBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMxQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWTthQUM1QyxJQUFJLENBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDN0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM5RixDQUFDLENBQUMsQ0FBQztRQUVQLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0QsV0FBVztRQUNQLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBaUM7UUFDL0MsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDL0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25ELENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQ2pELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0FuRFEsOEJBQThCO2tHQUE5Qiw4QkFBOEIsdUZBaEQ3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTJDYjs7MkZBS1ksOEJBQThCO2tCQWxEMUMsU0FBUzsrQkFDSSwwQkFBMEIsWUFDMUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0EyQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRTZWxlY3Rpb25MaXN0Q2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGlzdCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgS2xlc0ZpZWxkQWJzdHJhY3QgfSBmcm9tICcuL2ZpZWxkLmFic3RyYWN0JztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEtsZXNTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJy4uL3NlbGVjdGlvbi9zZWxlY3Rpb24tbW9kZWwnO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdrbGVzLWZvcm0tc2VsZWN0aW9uLWxpc3QnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cIm1hcmdpbi10b3BcIiBbZm9ybUdyb3VwXT1cImdyb3VwXCI+XG4gICAgICAgIDxtYXQtc2VsZWN0aW9uLWxpc3QgW2F0dHIuaWRdPVwiZmllbGQuaWRcIiBbbXVsdGlwbGVdPVwiZmllbGQubXVsdGlwbGVcIiBbbmdDbGFzc109XCJmaWVsZC5uZ0NsYXNzXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICBAaWYob3B0aW9ucyQgfCBhc3luYzsgYXMgb3B0aW9ucyl7XG4gICAgICAgICAgICAgICAgQGlmKGZpZWxkLnZpcnR1YWxTY3JvbGwpe1xuICAgICAgICAgICAgICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IFtpdGVtU2l6ZV09XCJmaWVsZC5pdGVtU2l6ZSB8fCAyMFwiIHN0eWxlPVwiaGVpZ2h0OjEwMCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWZpZWxkLmF1dG9jb21wbGV0ZUNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGlzdC1vcHRpb24gKmNka1ZpcnR1YWxGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25zOyB0ZW1wbGF0ZUNhY2hlU2l6ZTogMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1cIiBbc2VsZWN0ZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3soZmllbGQucHJvcGVydHkgPyBpdGVtW2ZpZWxkLnByb3BlcnR5XSA6IGl0ZW0pIHwga2xlc1RyYW5zZm9ybTpmaWVsZC5waXBlVHJhbnNmb3JtfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1saXN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBlbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGlzdC1vcHRpb24gKmNka1ZpcnR1YWxGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25zOyB0ZW1wbGF0ZUNhY2hlU2l6ZTogMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1cIiBbc2VsZWN0ZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBrbGVzQ29tcG9uZW50IFtjb21wb25lbnRdPVwiZmllbGQuYXV0b2NvbXBsZXRlQ29tcG9uZW50XCIgW3ZhbHVlXT1cIml0ZW1cIiBbZmllbGRdPVwiZmllbGRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1saXN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBlbHNle1xuICAgICAgICAgICAgICAgICAgICBAaWYgKCFmaWVsZC5hdXRvY29tcGxldGVDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygb3B0aW9uczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGlzdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW1cIiBbc2VsZWN0ZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3soZmllbGQucHJvcGVydHkgPyBpdGVtW2ZpZWxkLnByb3BlcnR5XSA6IGl0ZW0pIHwga2xlc1RyYW5zZm9ybTpmaWVsZC5waXBlVHJhbnNmb3JtfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1saXN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIG9wdGlvbnM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxpc3Qtb3B0aW9uIFt2YWx1ZV09XCJpdGVtXCIgW3NlbGVjdGVkXT1cInNlbGVjdGlvbi5pc1NlbGVjdGVkKGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIga2xlc0NvbXBvbmVudCBbY29tcG9uZW50XT1cImZpZWxkLmF1dG9jb21wbGV0ZUNvbXBvbmVudFwiIFt2YWx1ZV09XCJpdGVtXCIgW2ZpZWxkXT1cImZpZWxkXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGlzdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9ICAgXG5cbiAgICAgICAgICAgIH1AZWxzZXtcbiAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9tYXQtc2VsZWN0aW9uLWxpc3Q+XG4gICAgPC9kaXY+XG5gLFxuICAgIHN0eWxlczogW2BcbiAgICAgICAgbWF0LXNlbGVjdGlvbi1saXN0IHt3aWR0aDogMTAwJTtoZWlnaHQ6IDI1MHB4OyBvdmVyZmxvdzphdXRvfWBcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBLbGVzRm9ybVNlbGVjdGlvbkxpc3RDb21wb25lbnQgZXh0ZW5kcyBLbGVzRmllbGRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIHNlbGVjdGlvbjogS2xlc1NlbGVjdGlvbk1vZGVsPGFueT47XG4gICAgb3B0aW9ucyQ6IE9ic2VydmFibGU8YW55W10+O1xuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgS2xlc1NlbGVjdGlvbk1vZGVsPGFueT4odGhpcy5maWVsZC5tdWx0aXBsZSB8fCBmYWxzZSwgW10sIHRydWUsXG4gICAgICAgICAgICAoKG8xOiBhbnksIG8yOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5maWVsZC5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbzE/Llt0aGlzLmZpZWxkLnByb3BlcnR5XSA9PT0gbzI/Llt0aGlzLmZpZWxkLnByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbzEgPT09IG8yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICBpZiAodGhpcy5maWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KEFycmF5LmlzQXJyYXkodGhpcy5maWVsZC52YWx1ZSkgPyB0aGlzLmZpZWxkLnZhbHVlIDogW3RoaXMuZmllbGQudmFsdWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZpZWxkLm9wdGlvbnMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMkID0gdGhpcy5maWVsZC5vcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZmllbGQub3B0aW9ucyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMkID0gdGhpcy5maWVsZC5vcHRpb25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMkID0gb2YodGhpcy5maWVsZC5vcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5uYW1lXS52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpLFxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5jaGFuZ2VkLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSkpLnN1YnNjcmliZShjaGFuZ2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkLm5hbWVdLnBhdGNoVmFsdWUoY2hhbmdlLnNvdXJjZS5zZWxlY3RlZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBvblNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb246IE1hdFNlbGVjdGlvbkxpc3RDaGFuZ2UpIHtcbiAgICAgICAgc2VsZWN0aW9uLm9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID8gdGhpcy5zZWxlY3Rpb24uc2VsZWN0KFtvcHRpb24udmFsdWVdKVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3Rpb24uZGVzZWxlY3QoW29wdGlvbi52YWx1ZV0pXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|