list-selection-input 15.0.4 → 15.0.5
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/README.md +1069 -13
- package/fesm2022/list-selection-input.mjs +34 -34
- package/fesm2022/list-selection-input.mjs.map +1 -1
- package/list-selection-input-15.0.5.tgz +0 -0
- package/package.json +12 -5
- package/types/list-selection-input.d.ts +215 -0
- package/esm2022/lib/list-selection-demo/list-selection-demo.component.mjs +0 -167
- package/esm2022/lib/list-selection-input/list-selection-input.component.mjs +0 -265
- package/esm2022/lib/list-selection-input.module.mjs +0 -101
- package/esm2022/lib/models/index.mjs +0 -6
- package/esm2022/lib/models/selection-basic.model.mjs +0 -10
- package/esm2022/lib/models/selection-item.model.mjs +0 -12
- package/esm2022/lib/multi-selection-demo/multi-selection-demo.component.mjs +0 -167
- package/esm2022/lib/pipes/remove-underscore.pipe.mjs +0 -17
- package/esm2022/list-selection-input.mjs +0 -5
- package/esm2022/public-api.mjs +0 -10
- package/index.d.ts +0 -5
- package/lib/list-selection-demo/list-selection-demo.component.d.ts +0 -54
- package/lib/list-selection-input/list-selection-input.component.d.ts +0 -53
- package/lib/list-selection-input.module.d.ts +0 -27
- package/lib/models/index.d.ts +0 -2
- package/lib/models/selection-basic.model.d.ts +0 -10
- package/lib/models/selection-item.model.d.ts +0 -14
- package/lib/multi-selection-demo/multi-selection-demo.component.d.ts +0 -54
- package/lib/pipes/remove-underscore.pipe.d.ts +0 -7
- package/list-selection-input-15.0.4.tgz +0 -0
- package/public-api.d.ts +0 -6
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import { Component, inject } from '@angular/core';
|
|
2
|
-
import { FormBuilder, Validators } from '@angular/forms';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/common";
|
|
5
|
-
import * as i2 from "@angular/forms";
|
|
6
|
-
import * as i3 from "@angular/material/button";
|
|
7
|
-
import * as i4 from "@angular/material/form-field";
|
|
8
|
-
import * as i5 from "@angular/material/button-toggle";
|
|
9
|
-
import * as i6 from "@angular/material/divider";
|
|
10
|
-
import * as i7 from "@angular/material/slide-toggle";
|
|
11
|
-
import * as i8 from "../list-selection-input/list-selection-input.component";
|
|
12
|
-
export class ListSelectionInputDemoComponent {
|
|
13
|
-
constructor() {
|
|
14
|
-
this.fb = inject(FormBuilder);
|
|
15
|
-
this.data_1 = [
|
|
16
|
-
{ id: 11, value: 'Telus' },
|
|
17
|
-
{ id: 12, value: 'AT&T', disabled: true },
|
|
18
|
-
{ id: 14, value: 'Bell', selected: true },
|
|
19
|
-
{ id: 63, value: 'Rogers', selected: true }
|
|
20
|
-
];
|
|
21
|
-
this.data_2 = ['Telus', 'AT&T', 'Bell', 'Rogers'];
|
|
22
|
-
// SELECTIONS
|
|
23
|
-
this.selectionControl_1 = this.fb.control(null, Validators.required);
|
|
24
|
-
this.selectionControl_2 = this.fb.control(null, Validators.required);
|
|
25
|
-
this.selectionControl_3 = this.fb.control(null, Validators.required);
|
|
26
|
-
this.selectionControl_4 = this.fb.control(null);
|
|
27
|
-
this.selectionControl_5 = this.fb.control(null);
|
|
28
|
-
this.selectionControl_6 = this.fb.control(null, Validators.required);
|
|
29
|
-
this.selectionControl_7 = this.fb.control(null, Validators.required);
|
|
30
|
-
this.selectionControl_8 = this.fb.control(null, Validators.required);
|
|
31
|
-
//CHANGE DETECTION
|
|
32
|
-
this.changeDetection_1 = this.fb.control(false);
|
|
33
|
-
this.changeDetection_2 = this.fb.control(false);
|
|
34
|
-
this.changeDetection_3 = this.fb.control(false);
|
|
35
|
-
this.changeDetection_4 = this.fb.control(false);
|
|
36
|
-
this.changeDetection_5 = this.fb.control(false);
|
|
37
|
-
this.changeDetection_6 = this.fb.control(false);
|
|
38
|
-
this.changeDetection_7 = this.fb.control(false);
|
|
39
|
-
this.changeDetection_8 = this.fb.control(false);
|
|
40
|
-
this.data = this.data_2;
|
|
41
|
-
}
|
|
42
|
-
ngOnInit() {
|
|
43
|
-
// SELECTIONS
|
|
44
|
-
this.selectionControl_1.valueChanges.subscribe(data => {
|
|
45
|
-
if (this.changeDetection_1.value)
|
|
46
|
-
console.log('CHANGE:', data);
|
|
47
|
-
});
|
|
48
|
-
this.selectionControl_2.valueChanges.subscribe(data => {
|
|
49
|
-
if (this.changeDetection_2.value)
|
|
50
|
-
console.log('CHANGE:', data);
|
|
51
|
-
});
|
|
52
|
-
this.selectionControl_3.valueChanges.subscribe(data => {
|
|
53
|
-
if (this.changeDetection_3.value)
|
|
54
|
-
console.log('CHANGE:', data);
|
|
55
|
-
});
|
|
56
|
-
this.selectionControl_4.valueChanges.subscribe(data => {
|
|
57
|
-
if (this.changeDetection_4.value)
|
|
58
|
-
console.log('CHANGE:', data);
|
|
59
|
-
});
|
|
60
|
-
this.selectionControl_5.valueChanges.subscribe(data => {
|
|
61
|
-
if (this.changeDetection_5.value)
|
|
62
|
-
console.log('CHANGE:', data);
|
|
63
|
-
});
|
|
64
|
-
this.selectionControl_6.valueChanges.subscribe(data => {
|
|
65
|
-
if (this.changeDetection_6.value)
|
|
66
|
-
console.log('CHANGE:', data);
|
|
67
|
-
});
|
|
68
|
-
this.selectionControl_7.valueChanges.subscribe(data => {
|
|
69
|
-
if (this.changeDetection_7.value)
|
|
70
|
-
console.log('CHANGE:', data);
|
|
71
|
-
});
|
|
72
|
-
this.selectionControl_8.valueChanges.subscribe(data => {
|
|
73
|
-
if (this.changeDetection_8.value)
|
|
74
|
-
console.log('CHANGE:', data);
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
onPerformPatch() {
|
|
78
|
-
this.selectionControl_1.patchValue(['Bell']);
|
|
79
|
-
this.selectionControl_2.patchValue(['AT&T']);
|
|
80
|
-
this.selectionControl_3.patchValue(['Telus']);
|
|
81
|
-
this.selectionControl_4.patchValue(['Rogers']);
|
|
82
|
-
this.selectionControl_5.patchValue(['Bell']);
|
|
83
|
-
this.selectionControl_6.patchValue(['AT&T']);
|
|
84
|
-
this.selectionControl_7.patchValue(['Telus']);
|
|
85
|
-
this.selectionControl_8.patchValue(['Rogers']);
|
|
86
|
-
}
|
|
87
|
-
onChangeDataType(type) {
|
|
88
|
-
if (type === 'strings') {
|
|
89
|
-
this.data = this.data_2; //strings
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
this.data = this.data_1; //objects
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
// DISABLE
|
|
96
|
-
onDisabled_1(disable) {
|
|
97
|
-
if (disable) {
|
|
98
|
-
this.selectionControl_1.disable();
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
this.selectionControl_1.enable();
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
onDisabled_2(disable) {
|
|
105
|
-
if (disable) {
|
|
106
|
-
this.selectionControl_2.disable();
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
this.selectionControl_2.enable();
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
onDisabled_3(disable) {
|
|
113
|
-
if (disable) {
|
|
114
|
-
this.selectionControl_3.disable();
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
this.selectionControl_3.enable();
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
onDisabled_4(disable) {
|
|
121
|
-
if (disable) {
|
|
122
|
-
this.selectionControl_4.disable();
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
this.selectionControl_4.enable();
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
onDisabled_5(disable) {
|
|
129
|
-
if (disable) {
|
|
130
|
-
this.selectionControl_5.disable();
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
this.selectionControl_5.enable();
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
onDisabled_6(disable) {
|
|
137
|
-
if (disable) {
|
|
138
|
-
this.selectionControl_6.disable();
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
this.selectionControl_6.enable();
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
onDisabled_7(disable) {
|
|
145
|
-
if (disable) {
|
|
146
|
-
this.selectionControl_7.disable();
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
this.selectionControl_7.enable();
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
onDisabled_8(disable) {
|
|
153
|
-
if (disable) {
|
|
154
|
-
this.selectionControl_8.disable();
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
this.selectionControl_8.enable();
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListSelectionInputDemoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
161
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ListSelectionInputDemoComponent, selector: "app-list-selection-demo", ngImport: i0, template: "<div style=\"display: flex;\">\n <h1>List Selection FormControl</h1>\n <div style=\"flex:1; text-align: right;\">\n <div style=\"display: flex; gap: 2rem; flex-direction: row-reverse;\">\n <mat-button-toggle (click)=\"onPerformPatch()\">Patch</mat-button-toggle>\n\n <mat-button-toggle-group #varTypes=\"matButtonToggleGroup\" (change)=\"onChangeDataType(varTypes.value)\">\n <mat-button-toggle value=\"strings\" checked=\"true\">Strings</mat-button-toggle>\n <mat-button-toggle value=\"objects\" checked=\"false\">Objects</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n</div>\n\n<h3>No Data - Projection of Error</h3>\n<app-list-selection-input error=\"No Data Provided\">\n <h3 style=\"color: red; margin-top: 0; margin-bottom: 0;\">No Data</h3>\n</app-list-selection-input>\n\n<div style=\"margin-top: 2rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n</div>\n\n<div>\n <h3 style=\"margin-bottom: 0;\">Single Selection - {{ varTypes.value | uppercase }}</h3>\n <div>\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_1.reset()\">Reset</button>\n </div>\n <app-list-selection-input\n [data]=\"data\"\n [formControl]=\"selectionControl_1\"\n ></app-list-selection-input>\n <div *ngIf=\"error1.checked\">\n <mat-error *ngIf=\"selectionControl_1.hasError('minRequired')\">You must have a minimun of 1 selected</mat-error>\n <mat-error *ngIf=\"selectionControl_1.hasError('maxExceeded')\">maximum reached</mat-error>\n <mat-error *ngIf=\"selectionControl_1.hasError('required')\">This field is Required</mat-error>\n </div>\n <div style=\"display: flex; gap: 2rem; margin-top: 1rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_1\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #error1>Display Error</mat-slide-toggle>\n <mat-slide-toggle #disable1 (change)=\"onDisabled_1(disable1.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n </div>\n <div style=\"margin-top: 2rem;\">\n No Label or Placeholder<br>\n Required<br>\n Valid {{ selectionControl_1.valid }}<br>\n </div>\n </div>\n\n <div style=\"margin-top: 2rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div>\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_2.reset()\">Reset</button>\n </div>\n <app-list-selection-input\n [data]=\"data\"\n [formControl]=\"selectionControl_2\"\n label=\"Providers\"\n placeholder=\"Select Provider\"\n ></app-list-selection-input>\n <div *ngIf=\"error2.checked\">\n <mat-error *ngIf=\"selectionControl_2.hasError('minRequired')\">You must have a minimum of 1 selected</mat-error>\n <mat-error *ngIf=\"selectionControl_2.hasError('maxExceeded')\">maximum reached</mat-error>\n <mat-error *ngIf=\"selectionControl_2.hasError('required')\">This field is Required</mat-error>\n </div>\n <div style=\"display: flex; gap: 2rem; margin-top: 1rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_2\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #error2>Display Error</mat-slide-toggle>\n <mat-slide-toggle #disable2 (change)=\"onDisabled_2(disable2.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n </div>\n <div style=\"margin-top: 2rem;\">\n Label and Placeholder<br>\n Required<br>\n Valid {{ selectionControl_2.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n </div>\n\n <div>\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_3.reset()\">Reset</button>\n </div>\n <app-list-selection-input\n [data]=\"data\"\n [formControl]=\"selectionControl_3\"\n label=\"Providers\"\n placeholder=\"Select Provider\"\n appearance=\"fill\"\n ></app-list-selection-input>\n <div *ngIf=\"error3.checked\">\n <mat-error *ngIf=\"selectionControl_3.hasError('minRequired')\">You must have a minimum of 1 selected</mat-error>\n <mat-error *ngIf=\"selectionControl_3.hasError('maxExceeded')\">maximum reached</mat-error>\n <mat-error *ngIf=\"selectionControl_3.hasError('required')\">This field is Required</mat-error>\n </div>\n <div style=\"display: flex; gap: 2rem; margin-top: 1rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_3\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #error3>Display Error</mat-slide-toggle>\n <mat-slide-toggle #disable3 (change)=\"onDisabled_3(disable3.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n </div>\n <div style=\"margin-top: 2rem;\">\n Label and Placeholder<br>\n Appearance is Fill<br>\n Required<br>\n Valid {{ selectionControl_3.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n </div>\n\n</div>\n\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i5.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i6.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i7.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i8.ListSelectionInputComponent, selector: "app-list-selection-input", inputs: ["label", "placeholder", "minSelection", "maxSelection", "multiple", "appearance", "data"], outputs: ["selectionChange"] }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }] }); }
|
|
162
|
-
}
|
|
163
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListSelectionInputDemoComponent, decorators: [{
|
|
164
|
-
type: Component,
|
|
165
|
-
args: [{ selector: 'app-list-selection-demo', template: "<div style=\"display: flex;\">\n <h1>List Selection FormControl</h1>\n <div style=\"flex:1; text-align: right;\">\n <div style=\"display: flex; gap: 2rem; flex-direction: row-reverse;\">\n <mat-button-toggle (click)=\"onPerformPatch()\">Patch</mat-button-toggle>\n\n <mat-button-toggle-group #varTypes=\"matButtonToggleGroup\" (change)=\"onChangeDataType(varTypes.value)\">\n <mat-button-toggle value=\"strings\" checked=\"true\">Strings</mat-button-toggle>\n <mat-button-toggle value=\"objects\" checked=\"false\">Objects</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n</div>\n\n<h3>No Data - Projection of Error</h3>\n<app-list-selection-input error=\"No Data Provided\">\n <h3 style=\"color: red; margin-top: 0; margin-bottom: 0;\">No Data</h3>\n</app-list-selection-input>\n\n<div style=\"margin-top: 2rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n</div>\n\n<div>\n <h3 style=\"margin-bottom: 0;\">Single Selection - {{ varTypes.value | uppercase }}</h3>\n <div>\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_1.reset()\">Reset</button>\n </div>\n <app-list-selection-input\n [data]=\"data\"\n [formControl]=\"selectionControl_1\"\n ></app-list-selection-input>\n <div *ngIf=\"error1.checked\">\n <mat-error *ngIf=\"selectionControl_1.hasError('minRequired')\">You must have a minimun of 1 selected</mat-error>\n <mat-error *ngIf=\"selectionControl_1.hasError('maxExceeded')\">maximum reached</mat-error>\n <mat-error *ngIf=\"selectionControl_1.hasError('required')\">This field is Required</mat-error>\n </div>\n <div style=\"display: flex; gap: 2rem; margin-top: 1rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_1\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #error1>Display Error</mat-slide-toggle>\n <mat-slide-toggle #disable1 (change)=\"onDisabled_1(disable1.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n </div>\n <div style=\"margin-top: 2rem;\">\n No Label or Placeholder<br>\n Required<br>\n Valid {{ selectionControl_1.valid }}<br>\n </div>\n </div>\n\n <div style=\"margin-top: 2rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div>\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_2.reset()\">Reset</button>\n </div>\n <app-list-selection-input\n [data]=\"data\"\n [formControl]=\"selectionControl_2\"\n label=\"Providers\"\n placeholder=\"Select Provider\"\n ></app-list-selection-input>\n <div *ngIf=\"error2.checked\">\n <mat-error *ngIf=\"selectionControl_2.hasError('minRequired')\">You must have a minimum of 1 selected</mat-error>\n <mat-error *ngIf=\"selectionControl_2.hasError('maxExceeded')\">maximum reached</mat-error>\n <mat-error *ngIf=\"selectionControl_2.hasError('required')\">This field is Required</mat-error>\n </div>\n <div style=\"display: flex; gap: 2rem; margin-top: 1rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_2\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #error2>Display Error</mat-slide-toggle>\n <mat-slide-toggle #disable2 (change)=\"onDisabled_2(disable2.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n </div>\n <div style=\"margin-top: 2rem;\">\n Label and Placeholder<br>\n Required<br>\n Valid {{ selectionControl_2.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n </div>\n\n <div>\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_3.reset()\">Reset</button>\n </div>\n <app-list-selection-input\n [data]=\"data\"\n [formControl]=\"selectionControl_3\"\n label=\"Providers\"\n placeholder=\"Select Provider\"\n appearance=\"fill\"\n ></app-list-selection-input>\n <div *ngIf=\"error3.checked\">\n <mat-error *ngIf=\"selectionControl_3.hasError('minRequired')\">You must have a minimum of 1 selected</mat-error>\n <mat-error *ngIf=\"selectionControl_3.hasError('maxExceeded')\">maximum reached</mat-error>\n <mat-error *ngIf=\"selectionControl_3.hasError('required')\">This field is Required</mat-error>\n </div>\n <div style=\"display: flex; gap: 2rem; margin-top: 1rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_3\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #error3>Display Error</mat-slide-toggle>\n <mat-slide-toggle #disable3 (change)=\"onDisabled_3(disable3.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n </div>\n <div style=\"margin-top: 2rem;\">\n Label and Placeholder<br>\n Appearance is Fill<br>\n Required<br>\n Valid {{ selectionControl_3.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n </div>\n\n</div>\n\n" }]
|
|
166
|
-
}], ctorParameters: function () { return []; } });
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1zZWxlY3Rpb24tZGVtby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saXN0LXNlbGVjdGlvbi1pbnB1dC9zcmMvbGliL2xpc3Qtc2VsZWN0aW9uLWRlbW8vbGlzdC1zZWxlY3Rpb24tZGVtby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saXN0LXNlbGVjdGlvbi1pbnB1dC9zcmMvbGliL2xpc3Qtc2VsZWN0aW9uLWRlbW8vbGlzdC1zZWxlY3Rpb24tZGVtby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBT3pELE1BQU0sT0FBTywrQkFBK0I7SUFxQzFDO1FBbkNBLE9BQUUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFeEIsV0FBTSxHQUFHO1lBQ1AsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7WUFDMUIsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUN6QyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFDO1lBQ3hDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7U0FDM0MsQ0FBQTtRQUVELFdBQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBRTVDLGNBQWM7UUFDZCx1QkFBa0IsR0FBRyxJQUFJLENBQUMs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RSxDQUFBO1NBQ2pDO0lBRUgsQ0FBQzsrR0EvS1UsK0JBQStCO21HQUEvQiwrQkFBK0IsK0RDUjVDLG9uS0E0SEE7OzRGRHBIYSwrQkFBK0I7a0JBTDNDLFNBQVM7K0JBQ0UseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1saXN0LXNlbGVjdGlvbi1kZW1vJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpc3Qtc2VsZWN0aW9uLWRlbW8uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saXN0LXNlbGVjdGlvbi1kZW1vLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTGlzdFNlbGVjdGlvbklucHV0RGVtb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpXG5cbiAgZGF0YV8xID0gW1xuICAgIHsgaWQ6IDExLCB2YWx1ZTogJ1RlbHVzJyB9LFxuICAgIHsgaWQ6IDEyLCB2YWx1ZTogJ0FUJlQnLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgIHsgaWQ6IDE0LCB2YWx1ZTogJ0JlbGwnLCBzZWxlY3RlZDogdHJ1ZX0sXG4gICAgeyBpZDogNjMsIHZhbHVlOiAnUm9nZXJzJywgc2VsZWN0ZWQ6IHRydWUgfVxuICAgXVxuXG4gICBkYXRhXzIgPSBbJ1RlbHVzJywgJ0FUJlQnLCAnQmVsbCcsICdSb2dlcnMnXVxuXG4gICAvLyAgU0VMRUNUSU9OU1xuICAgc2VsZWN0aW9uQ29udHJvbF8xID0gdGhpcy5mYi5jb250cm9sPHN0cmluZ1tdfG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpXG4gICBzZWxlY3Rpb25Db250cm9sXzIgPSB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nW118bnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgIHNlbGVjdGlvbkNvbnRyb2xfMyA9IHRoaXMuZmIuY29udHJvbDxzdHJpbmdbXXxudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxuXG4gICBzZWxlY3Rpb25Db250cm9sXzQgPSB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nW118bnVsbD4obnVsbClcbiAgIHNlbGVjdGlvbkNvbnRyb2xfNSA9IHRoaXMuZmIuY29udHJvbDxzdHJpbmdbXXxudWxsPihudWxsKVxuXG4gICBzZWxlY3Rpb25Db250cm9sXzYgPSB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nW118bnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgIHNlbGVjdGlvbkNvbnRyb2xfNyA9IHRoaXMuZmIuY29udHJvbDxzdHJpbmdbXXxudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxuICAgc2VsZWN0aW9uQ29udHJvbF84ID0gdGhpcy5mYi5jb250cm9sPHN0cmluZ1tdfG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpXG5cbiAgIC8vQ0hBTkdFIERFVEVDVElPTlxuICAgY2hhbmdlRGV0ZWN0aW9uXzEgPSB0aGlzLmZiLmNvbnRyb2woZmFsc2UpXG4gICBjaGFuZ2VEZXRlY3Rpb25fMiA9IHRoaXMuZmIuY29udHJvbChmYWxzZSlcbiAgIGNoYW5nZURldGVjdGlvbl8zID0gdGhpcy5mYi5jb250cm9sKGZhbHNlKVxuICAgY2hhbmdlRGV0ZWN0aW9uXzQgPSB0aGlzLmZiLmNvbnRyb2woZmFsc2UpXG4gICBjaGFuZ2VEZXRlY3Rpb25fNSA9IHRoaXMuZmIuY29udHJvbChmYWxzZSlcbiAgIGNoYW5nZURldGVjdGlvbl82ID0gdGhpcy5mYi5jb250cm9sKGZhbHNlKVxuICAgY2hhbmdlRGV0ZWN0aW9uXzcgPSB0aGlzLmZiLmNvbnRyb2woZmFsc2UpXG4gICBjaGFuZ2VEZXRlY3Rpb25fOCA9IHRoaXMuZmIuY29udHJvbChmYWxzZSlcblxuICAgZGF0YTogYW55ID0gdGhpcy5kYXRhXzJcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgLy8gU0VMRUNUSU9OU1xuICAgIHRoaXMuc2VsZWN0aW9uQ29udHJvbF8xLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICBpZih0aGlzLmNoYW5nZURldGVjdGlvbl8xLnZhbHVlKSBjb25zb2xlLmxvZygnQ0hBTkdFOicsZGF0YSlcbiAgICB9KVxuXG4gICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzIudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIGlmKHRoaXMuY2hhbmdlRGV0ZWN0aW9uXzIudmFsdWUpIGNvbnNvbGUubG9nKCdDSEFOR0U6JyxkYXRhKVxuICAgIH0pXG5cbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2xfMy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgaWYodGhpcy5jaGFuZ2VEZXRlY3Rpb25fMy52YWx1ZSkgY29uc29sZS5sb2coJ0NIQU5HRTonLGRhdGEpXG4gICAgfSlcblxuICAgIHRoaXMuc2VsZWN0aW9uQ29udHJvbF80LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICBpZih0aGlzLmNoYW5nZURldGVjdGlvbl80LnZhbHVlKSBjb25zb2xlLmxvZygnQ0hBTkdFOicsZGF0YSlcbiAgICB9KVxuXG4gICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzUudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIGlmKHRoaXMuY2hhbmdlRGV0ZWN0aW9uXzUudmFsdWUpIGNvbnNvbGUubG9nKCdDSEFOR0U6JyxkYXRhKVxuICAgIH0pXG5cbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2xfNi52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgaWYodGhpcy5jaGFuZ2VEZXRlY3Rpb25fNi52YWx1ZSkgY29uc29sZS5sb2coJ0NIQU5HRTonLGRhdGEpXG4gICAgfSlcblxuICAgIHRoaXMuc2VsZWN0aW9uQ29udHJvbF83LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICBpZih0aGlzLmNoYW5nZURldGVjdGlvbl83LnZhbHVlKSBjb25zb2xlLmxvZygnQ0hBTkdFOicsZGF0YSlcbiAgICB9KVxuXG4gICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzgudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIGlmKHRoaXMuY2hhbmdlRGV0ZWN0aW9uXzgudmFsdWUpIGNvbnNvbGUubG9nKCdDSEFOR0U6JyxkYXRhKVxuICAgIH0pXG5cbiAgfVxuXG4gIG9uUGVyZm9ybVBhdGNoKCkge1xuICAgIHRoaXMuc2VsZWN0aW9uQ29udHJvbF8xLnBhdGNoVmFsdWUoWydCZWxsJ10pXG4gICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzIucGF0Y2hWYWx1ZShbJ0FUJlQnXSlcbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2xfMy5wYXRjaFZhbHVlKFsnVGVsdXMnXSlcbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2xfNC5wYXRjaFZhbHVlKFsnUm9nZXJzJ10pXG5cbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2xfNS5wYXRjaFZhbHVlKFsnQmVsbCddKVxuICAgIHRoaXMuc2VsZWN0aW9uQ29udHJvbF82LnBhdGNoVmFsdWUoWydBVCZUJ10pXG4gICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzcucGF0Y2hWYWx1ZShbJ1RlbHVzJ10pXG4gICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzgucGF0Y2hWYWx1ZShbJ1JvZ2VycyddKVxuICB9XG5cbiAgb25DaGFuZ2VEYXRhVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICBpZih0eXBlID09PSAnc3RyaW5ncycpIHtcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YV8yIC8vc3RyaW5nc1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGFfMSAvL29iamVjdHNcbiAgICB9XG4gIH1cblxuICAvLyBESVNBQkxFXG4gIG9uRGlzYWJsZWRfMShkaXNhYmxlOiBib29sZWFuKSB7XG5cbiAgICBpZihkaXNhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2xfMS5kaXNhYmxlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzEuZW5hYmxlKClcbiAgICB9XG5cbiAgfVxuXG4gIG9uRGlzYWJsZWRfMihkaXNhYmxlOiBib29sZWFuKSB7XG5cbiAgICBpZihkaXNhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2xfMi5kaXNhYmxlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzIuZW5hYmxlKClcbiAgICB9XG5cbiAgfVxuXG4gIG9uRGlzYWJsZWRfMyhkaXNhYmxlOiBib29sZWFuKSB7XG5cbiAgICBpZihkaXNhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2xfMy5kaXNhYmxlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzMuZW5hYmxlKClcbiAgICB9XG5cbiAgfVxuXG4gIG9uRGlzYWJsZWRfNChkaXNhYmxlOiBib29sZWFuKSB7XG5cbiAgICBpZihkaXNhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2xfNC5kaXNhYmxlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzQuZW5hYmxlKClcbiAgICB9XG5cbiAgfVxuXG4gIG9uRGlzYWJsZWRfNShkaXNhYmxlOiBib29sZWFuKSB7XG5cbiAgICBpZihkaXNhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2xfNS5kaXNhYmxlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzUuZW5hYmxlKClcbiAgICB9XG5cbiAgfVxuXG4gIG9uRGlzYWJsZWRfNihkaXNhYmxlOiBib29sZWFuKSB7XG5cbiAgICBpZihkaXNhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2xfNi5kaXNhYmxlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzYuZW5hYmxlKClcbiAgICB9XG5cbiAgfVxuXG4gIG9uRGlzYWJsZWRfNyhkaXNhYmxlOiBib29sZWFuKSB7XG5cbiAgICBpZihkaXNhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2xfNy5kaXNhYmxlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzcuZW5hYmxlKClcbiAgICB9XG5cbiAgfVxuXG4gIG9uRGlzYWJsZWRfOChkaXNhYmxlOiBib29sZWFuKSB7XG5cbiAgICBpZihkaXNhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2xfOC5kaXNhYmxlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzguZW5hYmxlKClcbiAgICB9XG5cbiAgfVxufVxuIiwiPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCI+XG4gIDxoMT5MaXN0IFNlbGVjdGlvbiBGb3JtQ29udHJvbDwvaDE+XG4gIDxkaXYgc3R5bGU9XCJmbGV4OjE7IHRleHQtYWxpZ246IHJpZ2h0O1wiPlxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBnYXA6IDJyZW07IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcIj5cbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSAoY2xpY2spPVwib25QZXJmb3JtUGF0Y2goKVwiPlBhdGNoPC9tYXQtYnV0dG9uLXRvZ2dsZT5cblxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwICN2YXJUeXBlcz1cIm1hdEJ1dHRvblRvZ2dsZUdyb3VwXCIgKGNoYW5nZSk9XCJvbkNoYW5nZURhdGFUeXBlKHZhclR5cGVzLnZhbHVlKVwiPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJzdHJpbmdzXCIgY2hlY2tlZD1cInRydWVcIj5TdHJpbmdzPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwib2JqZWN0c1wiIGNoZWNrZWQ9XCJmYWxzZVwiPk9iamVjdHM8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGgzPk5vIERhdGEgLSBQcm9qZWN0aW9uIG9mIEVycm9yPC9oMz5cbjxhcHAtbGlzdC1zZWxlY3Rpb24taW5wdXQgZXJyb3I9XCJObyBEYXRhIFByb3ZpZGVkXCI+XG4gIDxoMyBzdHlsZT1cImNvbG9yOiByZWQ7IG1hcmdpbi10b3A6IDA7IG1hcmdpbi1ib3R0b206IDA7XCI+Tm8gRGF0YTwvaDM+XG48L2FwcC1saXN0LXNlbGVjdGlvbi1pbnB1dD5cblxuPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDJyZW07IG1hcmdpbi1ib3R0b206IDFyZW07XCI+XG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuPC9kaXY+XG5cbjxkaXY+XG4gIDxoMyBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDA7XCI+U2luZ2xlIFNlbGVjdGlvbiAtIHt7IHZhclR5cGVzLnZhbHVlIHwgdXBwZXJjYXNlIH19PC9oMz5cbiAgPGRpdj5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cbiAgICAgIDxzcGFuIHN0eWxlPVwiZmxleDoxXCI+PC9zcGFuPlxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJzZWxlY3Rpb25Db250cm9sXzEucmVzZXQoKVwiPlJlc2V0PC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGFwcC1saXN0LXNlbGVjdGlvbi1pbnB1dFxuICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICBbZm9ybUNvbnRyb2xdPVwic2VsZWN0aW9uQ29udHJvbF8xXCJcbiAgICA+PC9hcHAtbGlzdC1zZWxlY3Rpb24taW5wdXQ+XG4gICAgPGRpdiAqbmdJZj1cImVycm9yMS5jaGVja2VkXCI+XG4gICAgICA8bWF0LWVycm9yICpuZ0lmPVwic2VsZWN0aW9uQ29udHJvbF8xLmhhc0Vycm9yKCdtaW5SZXF1aXJlZCcpXCI+WW91IG11c3QgaGF2ZSBhIG1pbmltdW4gb2YgMSBzZWxlY3RlZDwvbWF0LWVycm9yPlxuICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInNlbGVjdGlvbkNvbnRyb2xfMS5oYXNFcnJvcignbWF4RXhjZWVkZWQnKVwiPm1heGltdW0gcmVhY2hlZDwvbWF0LWVycm9yPlxuICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInNlbGVjdGlvbkNvbnRyb2xfMS5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlRoaXMgZmllbGQgaXMgUmVxdWlyZWQ8L21hdC1lcnJvcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAycmVtOyBtYXJnaW4tdG9wOiAxcmVtO1wiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgW2Zvcm1Db250cm9sXT1cImNoYW5nZURldGVjdGlvbl8xXCI+Q2hhbmdlIERldGVjdGlvbjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlICNlcnJvcjE+RGlzcGxheSBFcnJvcjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlICNkaXNhYmxlMSAoY2hhbmdlKT1cIm9uRGlzYWJsZWRfMShkaXNhYmxlMS5jaGVja2VkKVwiPkRpc2FibGU8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8c3BhbiBzdHlsZT1cImZsZXg6MVwiPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogMnJlbTtcIj5cbiAgICAgIE5vIExhYmVsIG9yIFBsYWNlaG9sZGVyPGJyPlxuICAgICAgUmVxdWlyZWQ8YnI+XG4gICAgICBWYWxpZCB7eyBzZWxlY3Rpb25Db250cm9sXzEudmFsaWQgfX08YnI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAycmVtOyBtYXJnaW4tYm90dG9tOiAxcmVtO1wiPlxuICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8L2Rpdj5cblxuICA8ZGl2PlxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxuICAgICAgPHNwYW4gc3R5bGU9XCJmbGV4OjFcIj48L3NwYW4+XG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cInNlbGVjdGlvbkNvbnRyb2xfMi5yZXNldCgpXCI+UmVzZXQ8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8YXBwLWxpc3Qtc2VsZWN0aW9uLWlucHV0XG4gICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgIFtmb3JtQ29udHJvbF09XCJzZWxlY3Rpb25Db250cm9sXzJcIlxuICAgICAgbGFiZWw9XCJQcm92aWRlcnNcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgUHJvdmlkZXJcIlxuICAgID48L2FwcC1saXN0LXNlbGVjdGlvbi1pbnB1dD5cbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3IyLmNoZWNrZWRcIj5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJzZWxlY3Rpb25Db250cm9sXzIuaGFzRXJyb3IoJ21pblJlcXVpcmVkJylcIj5Zb3UgbXVzdCBoYXZlIGEgbWluaW11bSBvZiAxIHNlbGVjdGVkPC9tYXQtZXJyb3I+XG4gICAgICA8bWF0LWVycm9yICpuZ0lmPVwic2VsZWN0aW9uQ29udHJvbF8yLmhhc0Vycm9yKCdtYXhFeGNlZWRlZCcpXCI+bWF4aW11bSByZWFjaGVkPC9tYXQtZXJyb3I+XG4gICAgICA8bWF0LWVycm9yICpuZ0lmPVwic2VsZWN0aW9uQ29udHJvbF8yLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+VGhpcyBmaWVsZCBpcyBSZXF1aXJlZDwvbWF0LWVycm9yPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBnYXA6IDJyZW07IG1hcmdpbi10b3A6IDFyZW07XCI+XG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbZm9ybUNvbnRyb2xdPVwiY2hhbmdlRGV0ZWN0aW9uXzJcIj5DaGFuZ2UgRGV0ZWN0aW9uPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgI2Vycm9yMj5EaXNwbGF5IEVycm9yPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgI2Rpc2FibGUyIChjaGFuZ2UpPVwib25EaXNhYmxlZF8yKGRpc2FibGUyLmNoZWNrZWQpXCI+RGlzYWJsZTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDxzcGFuIHN0eWxlPVwiZmxleDoxXCI+PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAycmVtO1wiPlxuICAgICAgTGFiZWwgYW5kIFBsYWNlaG9sZGVyPGJyPlxuICAgICAgUmVxdWlyZWQ8YnI+XG4gICAgICBWYWxpZCB7eyBzZWxlY3Rpb25Db250cm9sXzIudmFsaWQgfX08YnI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IC41cmVtOyBtYXJnaW4tYm90dG9tOiAxcmVtO1wiPlxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXY+XG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCI+XG4gICAgICA8c3BhbiBzdHlsZT1cImZsZXg6MVwiPjwvc3Bhbj5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwic2VsZWN0aW9uQ29udHJvbF8zLnJlc2V0KClcIj5SZXNldDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxhcHAtbGlzdC1zZWxlY3Rpb24taW5wdXRcbiAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgW2Zvcm1Db250cm9sXT1cInNlbGVjdGlvbkNvbnRyb2xfM1wiXG4gICAgICBsYWJlbD1cIlByb3ZpZGVyc1wiXG4gICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBQcm92aWRlclwiXG4gICAgICBhcHBlYXJhbmNlPVwiZmlsbFwiXG4gICAgPjwvYXBwLWxpc3Qtc2VsZWN0aW9uLWlucHV0PlxuICAgIDxkaXYgKm5nSWY9XCJlcnJvcjMuY2hlY2tlZFwiPlxuICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInNlbGVjdGlvbkNvbnRyb2xfMy5oYXNFcnJvcignbWluUmVxdWlyZWQnKVwiPllvdSBtdXN0IGhhdmUgYSBtaW5pbXVtIG9mIDEgc2VsZWN0ZWQ8L21hdC1lcnJvcj5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJzZWxlY3Rpb25Db250cm9sXzMuaGFzRXJyb3IoJ21heEV4Y2VlZGVkJylcIj5tYXhpbXVtIHJlYWNoZWQ8L21hdC1lcnJvcj5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJzZWxlY3Rpb25Db250cm9sXzMuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5UaGlzIGZpZWxkIGlzIFJlcXVpcmVkPC9tYXQtZXJyb3I+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMnJlbTsgbWFyZ2luLXRvcDogMXJlbTtcIj5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtmb3JtQ29udHJvbF09XCJjaGFuZ2VEZXRlY3Rpb25fM1wiPkNoYW5nZSBEZXRlY3Rpb248L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSAjZXJyb3IzPkRpc3BsYXkgRXJyb3I8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSAjZGlzYWJsZTMgKGNoYW5nZSk9XCJvbkRpc2FibGVkXzMoZGlzYWJsZTMuY2hlY2tlZClcIj5EaXNhYmxlPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPHNwYW4gc3R5bGU9XCJmbGV4OjFcIj48L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDJyZW07XCI+XG4gICAgICBMYWJlbCBhbmQgUGxhY2Vob2xkZXI8YnI+XG4gICAgICBBcHBlYXJhbmNlIGlzIEZpbGw8YnI+XG4gICAgICBSZXF1aXJlZDxicj5cbiAgICAgIFZhbGlkIHt7IHNlbGVjdGlvbkNvbnRyb2xfMy52YWxpZCB9fTxicj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogLjVyZW07IG1hcmdpbi1ib3R0b206IDFyZW07XCI+XG4gICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbjwvZGl2PlxuXG4iXX0=
|
|
@@ -1,265 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, forwardRef, inject } from '@angular/core';
|
|
2
|
-
import { FormBuilder, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
|
|
3
|
-
import { SelectionItem } from '../models/selection-item.model';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/common";
|
|
6
|
-
import * as i2 from "@angular/forms";
|
|
7
|
-
import * as i3 from "@angular/material/form-field";
|
|
8
|
-
import * as i4 from "@angular/material/core";
|
|
9
|
-
import * as i5 from "@angular/material/select";
|
|
10
|
-
export class ListSelectionInputComponent {
|
|
11
|
-
set minSelection(value) {
|
|
12
|
-
this._minSelection = (value) ? value : 0;
|
|
13
|
-
}
|
|
14
|
-
get minSelection() {
|
|
15
|
-
return this._minSelection;
|
|
16
|
-
}
|
|
17
|
-
set maxSelection(value) {
|
|
18
|
-
this._maxSelection = (value) ? value : 0;
|
|
19
|
-
}
|
|
20
|
-
get maxSelection() {
|
|
21
|
-
return this._maxSelection;
|
|
22
|
-
}
|
|
23
|
-
set multiple(value) {
|
|
24
|
-
this._multiple = (value) ? value : false;
|
|
25
|
-
}
|
|
26
|
-
get multiple() {
|
|
27
|
-
return this._multiple;
|
|
28
|
-
}
|
|
29
|
-
get isValid() {
|
|
30
|
-
return this.isValidRange(this.data);
|
|
31
|
-
}
|
|
32
|
-
set data(value) {
|
|
33
|
-
this.isObjects = this.hasObjects(value);
|
|
34
|
-
this._data = (value) ? value.map(item => SelectionItem.adapt(item)) : [];
|
|
35
|
-
const selectedObjects = this.data.filter(item => item.selected).map(item => item.value);
|
|
36
|
-
this.defaultDisabled = (!this.defaultDisabled) ? this.data.map(item => SelectionItem.adapt(item)).filter(item => item.disabled) : this.defaultDisabled;
|
|
37
|
-
if (this.multiple) {
|
|
38
|
-
const selected = (selectedObjects) ? selectedObjects : this.findFirst(selectedObjects);
|
|
39
|
-
this.selectionControl.patchValue(selected, { emitEvent: false });
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
const selected = (selectedObjects.length === 0 && value.length > 0) ? [value[0]] : this.findFirst(selectedObjects);
|
|
43
|
-
this.selectionControl.patchValue(selected, { emitEvent: false });
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
get data() {
|
|
47
|
-
return this._data;
|
|
48
|
-
}
|
|
49
|
-
constructor() {
|
|
50
|
-
this.fb = inject(FormBuilder);
|
|
51
|
-
this.selectionControl = this.fb.control([], Validators.required);
|
|
52
|
-
this._minSelection = 0;
|
|
53
|
-
this._maxSelection = 0;
|
|
54
|
-
this._multiple = false;
|
|
55
|
-
this.defaultDisabled = [];
|
|
56
|
-
this.appearance = 'outline';
|
|
57
|
-
this._data = [];
|
|
58
|
-
this.selectionChange = new EventEmitter();
|
|
59
|
-
this.disabled = false;
|
|
60
|
-
this.formInitialized = false;
|
|
61
|
-
this.isArray = (obj) => Array.isArray(obj);
|
|
62
|
-
this.hasObjects = (obj) => (this.isArray(obj) && obj.length > 0) ? this.isObject(obj[0]) : false;
|
|
63
|
-
this.isObject = (obj) => typeof obj === 'object' && obj !== null && !Array.isArray(obj);
|
|
64
|
-
this.findFirst = (obj) => {
|
|
65
|
-
const found = this.data.find(item => obj.includes(item.value));
|
|
66
|
-
return (found) ? found.value : null;
|
|
67
|
-
};
|
|
68
|
-
this.onChange = () => { };
|
|
69
|
-
this.onTouch = () => { };
|
|
70
|
-
this.isObjects = false;
|
|
71
|
-
this.invalid = false;
|
|
72
|
-
this.updateSelection = (newData) => newData.filter(item => !item.selected).map(item => {
|
|
73
|
-
const dis = this.defaultDisabled.map(item => item.value);
|
|
74
|
-
return (dis.includes(item.value)) ? item.disabled = true : item.disabled = false;
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
ngOnInit() {
|
|
78
|
-
if (this.multiple) {
|
|
79
|
-
this.defaultDisabled = this.data.filter(item => item.disabled);
|
|
80
|
-
if (this.minSelection > 0 && this.minSelection > this.maxSelection) {
|
|
81
|
-
this.minSelection = this.maxSelection !== 0 ? this.maxSelection : this.minSelection;
|
|
82
|
-
}
|
|
83
|
-
else if (this.maxSelection > 0 && this.maxSelection < this.minSelection) {
|
|
84
|
-
this.maxSelection = this.minSelection;
|
|
85
|
-
}
|
|
86
|
-
this.maxSelection = this.maxSelection || this.data.length;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
ngAfterViewInit() {
|
|
90
|
-
this.formInitialized = true;
|
|
91
|
-
}
|
|
92
|
-
writeValue(value) {
|
|
93
|
-
const selected = (this.isArray(value) && value.length > 1) ? this.findFirst(value) : value;
|
|
94
|
-
this.data
|
|
95
|
-
.map(item => {
|
|
96
|
-
item.selected = (value && value.includes(item.value)) ? true : false;
|
|
97
|
-
return item;
|
|
98
|
-
});
|
|
99
|
-
if (selected) {
|
|
100
|
-
if (this.multiple) {
|
|
101
|
-
this.selectionControl.patchValue(value, { emitEvent: false });
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
if (!value || value.length === 0)
|
|
105
|
-
return;
|
|
106
|
-
this.selectionControl.patchValue(this.findFirst(value), { emitEvent: false });
|
|
107
|
-
this.selectionControl.markAsDirty({ onlySelf: true });
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
if (this.formInitialized && !this.selectionControl.pristine) {
|
|
111
|
-
if (value === null)
|
|
112
|
-
this.selectionControl.reset();
|
|
113
|
-
this.selectionControl.markAsDirty({ onlySelf: true });
|
|
114
|
-
this.selectionControl.markAllAsTouched();
|
|
115
|
-
}
|
|
116
|
-
else if (this.formInitialized && this.selectionControl.pristine) {
|
|
117
|
-
if (value === null)
|
|
118
|
-
this.selectionControl.reset();
|
|
119
|
-
}
|
|
120
|
-
this.formInitialized = true;
|
|
121
|
-
}
|
|
122
|
-
validate(control) {
|
|
123
|
-
const isRequired = control.hasValidator(Validators.required) ? true : false;
|
|
124
|
-
let errors = { 'minRequired': false, 'maxExceeded': false };
|
|
125
|
-
if (!isRequired)
|
|
126
|
-
this.selectionControl.clearValidators();
|
|
127
|
-
if (this.minSelection > 0)
|
|
128
|
-
this.selectionControl.addValidators(Validators.minLength(this.minSelection));
|
|
129
|
-
const hasValue = (!this.selectionControl.value || this.selectionControl.value?.length === 0);
|
|
130
|
-
if (this.minSelection > 0) {
|
|
131
|
-
const hasMin = (this.selectionControl.value?.length + 1 <= this.minSelection) ? true : false;
|
|
132
|
-
errors.minRequired = hasMin;
|
|
133
|
-
}
|
|
134
|
-
if (this.maxSelection > 0) {
|
|
135
|
-
const hasMax = (this.selectionControl.value?.length >= this.maxSelection) ? true : false;
|
|
136
|
-
errors.maxExceeded = hasMax;
|
|
137
|
-
}
|
|
138
|
-
const hasErrors = this.selectedValues(errors, true).length > 0;
|
|
139
|
-
const values = this.selectedValues(this.selectionControl.value || [], true).length;
|
|
140
|
-
const hasValues = (this.minSelection > 0 && values > this.minSelection) || (this.maxSelection > 0 && values < this.maxSelection);
|
|
141
|
-
const finalErrors = (isRequired && !hasValues && hasErrors) ? errors : null;
|
|
142
|
-
return finalErrors;
|
|
143
|
-
}
|
|
144
|
-
registerOnChange(fn) {
|
|
145
|
-
this.onChange = fn;
|
|
146
|
-
}
|
|
147
|
-
registerOnTouched(fn) {
|
|
148
|
-
this.onTouch = fn;
|
|
149
|
-
}
|
|
150
|
-
setDisabledState(isDisabled) {
|
|
151
|
-
this.disabled = isDisabled;
|
|
152
|
-
if (this.disabled) {
|
|
153
|
-
this.selectionControl.disable();
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
this.selectionControl.enable();
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
onSelection(selection) {
|
|
160
|
-
this.invalid = false;
|
|
161
|
-
if (this.multiple) {
|
|
162
|
-
const checkboxSelected = selection.value;
|
|
163
|
-
const newData = this.data.map(item => SelectionItem.adapt(item));
|
|
164
|
-
newData.map(item => item.selected = checkboxSelected.includes(item.value) ? true : false);
|
|
165
|
-
if (this.isValidRange(newData))
|
|
166
|
-
this.data = newData;
|
|
167
|
-
const curSelected = this.data.filter(item => item.selected).length;
|
|
168
|
-
const prevSelected = newData.filter(item => item.selected).length;
|
|
169
|
-
if (curSelected > this.maxSelection) {
|
|
170
|
-
this.updateSelection(newData);
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
if (prevSelected < curSelected) {
|
|
174
|
-
this.updateSelection(newData);
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
if (curSelected >= this.maxSelection) {
|
|
178
|
-
const dis = this.defaultDisabled.map(item => item.value);
|
|
179
|
-
newData.filter(item => !item.selected).map(item => {
|
|
180
|
-
return item.disabled = (dis.includes(item.value)) ? item.disabled : !item.disabled;
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
this.updateSelection(newData);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
this.data = newData;
|
|
189
|
-
const sel = this.data.filter(item => item.selected).map(item => item.value);
|
|
190
|
-
this.selectionControl.patchValue(sel, { emitEvent: false });
|
|
191
|
-
}
|
|
192
|
-
selection = (selection?.value) ? selection.value : selection;
|
|
193
|
-
const selected = (this.multiple) ? this.isArray(selection) ? selection : [selection] : [selection];
|
|
194
|
-
const data = this.data.map(({ id, value }) => ({ id, value }));
|
|
195
|
-
const newData = data.filter((item) => selected.includes(item.value));
|
|
196
|
-
const selectedData = (this.isObjects) ? newData : newData.map(({ value }) => value);
|
|
197
|
-
this.selectionControl.markAllAsTouched();
|
|
198
|
-
this.selectionChange.emit(data);
|
|
199
|
-
this.onChange(selectedData);
|
|
200
|
-
}
|
|
201
|
-
findControlDisabled(control) {
|
|
202
|
-
const found = this.data.find(item => item.value === control);
|
|
203
|
-
const disabled = (found?.disabled) ? found.disabled : false;
|
|
204
|
-
return disabled;
|
|
205
|
-
}
|
|
206
|
-
isValidRange(data) {
|
|
207
|
-
const selected = data.filter(item => item.selected).length;
|
|
208
|
-
if (this.multiple) {
|
|
209
|
-
const isMin = (this.minSelection !== 0) ? selected >= this.minSelection : true;
|
|
210
|
-
const isMax = (this.maxSelection !== 0) ? selected <= this.maxSelection : true;
|
|
211
|
-
return isMin && isMax;
|
|
212
|
-
}
|
|
213
|
-
else {
|
|
214
|
-
return selected > 0;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
selectedValues(obj, state = false) {
|
|
218
|
-
return Object.entries(obj).filter(([key, value]) => value === state).map(([key, _]) => key);
|
|
219
|
-
}
|
|
220
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListSelectionInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
221
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ListSelectionInputComponent, selector: "app-list-selection-input", inputs: { label: "label", placeholder: "placeholder", minSelection: "minSelection", maxSelection: "maxSelection", multiple: "multiple", appearance: "appearance", data: "data" }, outputs: { selectionChange: "selectionChange" }, providers: [
|
|
222
|
-
{
|
|
223
|
-
provide: NG_VALUE_ACCESSOR,
|
|
224
|
-
useExisting: forwardRef(() => ListSelectionInputComponent),
|
|
225
|
-
multi: true
|
|
226
|
-
},
|
|
227
|
-
{
|
|
228
|
-
provide: NG_VALIDATORS,
|
|
229
|
-
useExisting: forwardRef(() => ListSelectionInputComponent),
|
|
230
|
-
multi: true
|
|
231
|
-
}
|
|
232
|
-
], ngImport: i0, template: "<div style=\"display: flex; flex-direction: column;\">\n <div style=\"margin-bottom: .5rem; display: flex; flex-direction: column;\">\n <mat-label style=\"font-size: larger;\">\n {{ label }}\n </mat-label>\n </div>\n <ng-container *ngIf=\"data && data.length > 0; else NODATA\">\n <mat-form-field\n style=\"display: flex;\"\n [appearance]=\"appearance\"\n >\n <mat-select\n [formControl]=\"selectionControl\"\n (selectionChange)=\"onSelection($event)\"\n [multiple]=\"multiple\"\n [placeholder]=\"placeholder||''\"\n >\n <mat-option\n *ngFor=\"let option of data\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n >\n {{option.value}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </ng-container>\n <ng-template #NODATA>\n <div class=\"wrapper\">\n <ng-content></ng-content>\n </div>\n </ng-template>\n</div>\n\n", styles: [".wrapper:not(:empty)+.default{display:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "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: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }] }); }
|
|
233
|
-
}
|
|
234
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListSelectionInputComponent, decorators: [{
|
|
235
|
-
type: Component,
|
|
236
|
-
args: [{ selector: 'app-list-selection-input', providers: [
|
|
237
|
-
{
|
|
238
|
-
provide: NG_VALUE_ACCESSOR,
|
|
239
|
-
useExisting: forwardRef(() => ListSelectionInputComponent),
|
|
240
|
-
multi: true
|
|
241
|
-
},
|
|
242
|
-
{
|
|
243
|
-
provide: NG_VALIDATORS,
|
|
244
|
-
useExisting: forwardRef(() => ListSelectionInputComponent),
|
|
245
|
-
multi: true
|
|
246
|
-
}
|
|
247
|
-
], template: "<div style=\"display: flex; flex-direction: column;\">\n <div style=\"margin-bottom: .5rem; display: flex; flex-direction: column;\">\n <mat-label style=\"font-size: larger;\">\n {{ label }}\n </mat-label>\n </div>\n <ng-container *ngIf=\"data && data.length > 0; else NODATA\">\n <mat-form-field\n style=\"display: flex;\"\n [appearance]=\"appearance\"\n >\n <mat-select\n [formControl]=\"selectionControl\"\n (selectionChange)=\"onSelection($event)\"\n [multiple]=\"multiple\"\n [placeholder]=\"placeholder||''\"\n >\n <mat-option\n *ngFor=\"let option of data\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n >\n {{option.value}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </ng-container>\n <ng-template #NODATA>\n <div class=\"wrapper\">\n <ng-content></ng-content>\n </div>\n </ng-template>\n</div>\n\n", styles: [".wrapper:not(:empty)+.default{display:none}\n"] }]
|
|
248
|
-
}], ctorParameters: function () { return []; }, propDecorators: { label: [{
|
|
249
|
-
type: Input
|
|
250
|
-
}], placeholder: [{
|
|
251
|
-
type: Input
|
|
252
|
-
}], minSelection: [{
|
|
253
|
-
type: Input
|
|
254
|
-
}], maxSelection: [{
|
|
255
|
-
type: Input
|
|
256
|
-
}], multiple: [{
|
|
257
|
-
type: Input
|
|
258
|
-
}], appearance: [{
|
|
259
|
-
type: Input
|
|
260
|
-
}], data: [{
|
|
261
|
-
type: Input
|
|
262
|
-
}], selectionChange: [{
|
|
263
|
-
type: Output
|
|
264
|
-
}] } });
|
|
265
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1zZWxlY3Rpb24taW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGlzdC1zZWxlY3Rpb24taW5wdXQvc3JjL2xpYi9saXN0LXNlbGVjdGlvbi1pbnB1dC9saXN0LXNlbGVjdGlvbi1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saXN0LXNlbGVjdGlvbi1pbnB1dC9zcmMvbGliL2xpc3Qtc2VsZWN0aW9uLWlucHV0L2xpc3Qtc2VsZWN0aW9uLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQXlDLFdBQVcsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQW9CLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS3BKLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7OztBQW9CL0QsTUFBTSxPQUFPLDJCQUEyQjtJQVV0QyxJQUFhLFlBQVksQ0FBQyxLQUFhO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDMUMsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQTtJQUMzQixDQUFDO0lBR0QsSUFBYSxZQUFZLENBQUMsS0FBYTtRQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzFDLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUks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WUFFbkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQzNFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7U0FFNUQ7UUFFRCxTQUFTLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUU1RCxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ2xHLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDekUsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxD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QkFjRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdPLElBQUk7c0JBQWhCLEtBQUs7Z0JBdUJJLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBmb3J3YXJkUmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1CdWlsZGVyLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuXG5pbXBvcnQgeyBNYXRTZWxlY3RDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgU2VsZWN0aW9uSXRlbSB9IGZyb20gJy4uL21vZGVscy9zZWxlY3Rpb24taXRlbS5tb2RlbCc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWxpc3Qtc2VsZWN0aW9uLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpc3Qtc2VsZWN0aW9uLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC1zZWxlY3Rpb24taW5wdXQuY29tcG9uZW50LmNzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IExpc3RTZWxlY3Rpb25JbnB1dENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IExpc3RTZWxlY3Rpb25JbnB1dENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaXN0U2VsZWN0aW9uSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICBmYiA9IGluamVjdCggRm9ybUJ1aWxkZXIpXG5cbiAgc2VsZWN0aW9uQ29udHJvbCA9IHRoaXMuZmIuY29udHJvbDxhbnk+KFtdLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxuXG4gIEBJbnB1dCgpIGxhYmVsPzogc3RyaW5nXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyPzogc3RyaW5nXG5cbiAgcHJpdmF0ZSBfbWluU2VsZWN0aW9uID0gMFxuICBASW5wdXQoKSBzZXQgbWluU2VsZWN0aW9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9taW5TZWxlY3Rpb24gPSAodmFsdWUpID8gdmFsdWUgOiAwXG4gIH1cblxuICBnZXQgbWluU2VsZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9taW5TZWxlY3Rpb25cbiAgfVxuXG4gIHByaXZhdGUgX21heFNlbGVjdGlvbiA9IDBcbiAgQElucHV0KCkgc2V0IG1heFNlbGVjdGlvbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4U2VsZWN0aW9uID0gKHZhbHVlKSA/IHZhbHVlIDogMFxuICB9XG5cbiAgZ2V0IG1heFNlbGVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4U2VsZWN0aW9uXG4gIH1cblxuICBwcml2YXRlIF9tdWx0aXBsZSA9IGZhbHNlXG4gIEBJbnB1dCgpIHNldCBtdWx0aXBsZSh2YWx1ZTogYm9vbGVhbnx1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9tdWx0aXBsZSA9ICh2YWx1ZSkgPyB2YWx1ZSA6IGZhbHNlXG4gIH1cblxuICBnZXQgbXVsdGlwbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX211bHRpcGxlXG4gIH1cblxuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkUmFuZ2UodGhpcy5kYXRhKVxuICB9XG5cbiAgZGVmYXVsdERpc2FibGVkOiBTZWxlY3Rpb25JdGVtW10gPSBbXVxuXG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgPSAnb3V0bGluZSdcblxuICBwcml2YXRlIF9kYXRhOiAoYW55fHN0cmluZylbXSA9IFtdXG4gIEBJbnB1dCgpIHNldCBkYXRhKHZhbHVlOiBhbnlbXSkge1xuXG4gICAgdGhpcy5pc09iamVjdHMgPSB0aGlzLmhhc09iamVjdHModmFsdWUpXG4gICAgdGhpcy5fZGF0YSA9ICh2YWx1ZSkgPyB2YWx1ZS5tYXAoaXRlbSA9PiBTZWxlY3Rpb25JdGVtLmFkYXB0KGl0ZW0pKSA6IFtdXG5cbiAgICBjb25zdCBzZWxlY3RlZE9iamVjdHMgPSB0aGlzLmRhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCkubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSlcbiAgICB0aGlzLmRlZmF1bHREaXNhYmxlZCA9ICghdGhpcy5kZWZhdWx0RGlzYWJsZWQpID8gdGhpcy5kYXRhLm1hcChpdGVtID0+IFNlbGVjdGlvbkl0ZW0uYWRhcHQoaXRlbSkpLmZpbHRlcihpdGVtID0+IGl0ZW0uZGlzYWJsZWQpIDogdGhpcy5kZWZhdWx0RGlzYWJsZWRcblxuICAgIGlmKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gKHNlbGVjdGVkT2JqZWN0cykgPyBzZWxlY3RlZE9iamVjdHMgOiB0aGlzLmZpbmRGaXJzdChzZWxlY3RlZE9iamVjdHMpXG4gICAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2wucGF0Y2hWYWx1ZShzZWxlY3RlZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gKHNlbGVjdGVkT2JqZWN0cy5sZW5ndGggPT09IDAgJiYgdmFsdWUubGVuZ3RoID4gMCkgPyBbdmFsdWVbMF1dIDogdGhpcy5maW5kRmlyc3Qoc2VsZWN0ZWRPYmplY3RzKVxuICAgICAgdGhpcy5zZWxlY3Rpb25Db250cm9sLnBhdGNoVmFsdWUoc2VsZWN0ZWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KVxuICAgIH1cblxuICB9XG5cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFcbiAgfVxuXG5cbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuXG4gIGRpc2FibGVkID0gZmFsc2VcblxuICBmb3JtSW5pdGlhbGl6ZWQgPSBmYWxzZVxuXG4gIGlzQXJyYXkgPSAob2JqOiBhbnkpID0+IEFycmF5LmlzQXJyYXkob2JqKVxuICBoYXNPYmplY3RzID0gKG9iajogYW55KSA9PiAodGhpcy5pc0FycmF5KG9iaikgJiYgb2JqLmxlbmd0aCA+IDApID8gdGhpcy5pc09iamVjdChvYmpbMF0pIDogZmFsc2VcbiAgaXNPYmplY3QgPSAob2JqOiBhbnkpID0+IHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShvYmopXG5cbiAgZmluZEZpcnN0ID0gKG9iajogc3RyaW5nW10pID0+IHtcbiAgICBjb25zdCBmb3VuZCA9IHRoaXMuZGF0YS5maW5kKGl0ZW0gPT4gb2JqLmluY2x1ZGVzKGl0ZW0udmFsdWUpKVxuICAgIHJldHVybiAoZm91bmQpID8gZm91bmQudmFsdWUgOiBudWxsXG4gIH1cblxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge31cbiAgb25Ub3VjaDogYW55ID0gKCkgPT4ge31cblxuICBpc09iamVjdHMgPSBmYWxzZVxuXG4gIGludmFsaWQgPSBmYWxzZVxuXG4gIHVwZGF0ZVNlbGVjdGlvbiA9IChuZXdEYXRhOiBhbnlbXSkgPT4gbmV3RGF0YS5maWx0ZXIoaXRlbSA9PiAhaXRlbS5zZWxlY3RlZCkubWFwKGl0ZW0gPT4ge1xuICAgIGNvbnN0IGRpcyA9IHRoaXMuZGVmYXVsdERpc2FibGVkLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpXG4gICAgcmV0dXJuIChkaXMuaW5jbHVkZXMoaXRlbS52YWx1ZSkpID8gaXRlbS5kaXNhYmxlZCA9IHRydWUgOiBpdGVtLmRpc2FibGVkID0gZmFsc2VcbiAgfSlcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgaWYodGhpcy5tdWx0aXBsZSkge1xuXG4gICAgICB0aGlzLmRlZmF1bHREaXNhYmxlZCA9IHRoaXMuZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLmRpc2FibGVkKVxuXG4gICAgICBpZiAodGhpcy5taW5TZWxlY3Rpb24gPiAwICYmIHRoaXMubWluU2VsZWN0aW9uID4gdGhpcy5tYXhTZWxlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5taW5TZWxlY3Rpb24gPSB0aGlzLm1heFNlbGVjdGlvbiAhPT0gMCA/IHRoaXMubWF4U2VsZWN0aW9uIDogdGhpcy5taW5TZWxlY3Rpb247XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubWF4U2VsZWN0aW9uID4gMCAmJiB0aGlzLm1heFNlbGVjdGlvbiA8IHRoaXMubWluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgdGhpcy5tYXhTZWxlY3Rpb24gPSB0aGlzLm1pblNlbGVjdGlvbjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYXhTZWxlY3Rpb24gPSB0aGlzLm1heFNlbGVjdGlvbiB8fCB0aGlzLmRhdGEubGVuZ3RoO1xuXG4gICAgfVxuXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtSW5pdGlhbGl6ZWQgPSB0cnVlXG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmdbXSl7XG5cbiAgICBjb25zdCBzZWxlY3RlZCA9ICh0aGlzLmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDEpID8gdGhpcy5maW5kRmlyc3QodmFsdWUpIDogdmFsdWVcblxuICAgIHRoaXMuZGF0YVxuICAgIC5tYXAoaXRlbSA9PiB7XG4gICAgICBpdGVtLnNlbGVjdGVkID0gKHZhbHVlICYmIHZhbHVlLmluY2x1ZGVzKGl0ZW0udmFsdWUpKSA/IHRydWUgOiBmYWxzZVxuICAgICAgcmV0dXJuIGl0ZW1cbiAgICB9KVxuXG4gICAgaWYoc2VsZWN0ZWQpIHtcblxuICAgICAgaWYodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZighdmFsdWUgfHwgdmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Db250cm9sLnBhdGNoVmFsdWUodGhpcy5maW5kRmlyc3QodmFsdWUpLCB7IGVtaXRFdmVudDogZmFsc2UgfSlcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Db250cm9sLm1hcmtBc0RpcnR5KHsgb25seVNlbGY6IHRydWUgfSlcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGlmKHRoaXMuZm9ybUluaXRpYWxpemVkICYmICF0aGlzLnNlbGVjdGlvbkNvbnRyb2wucHJpc3RpbmUpIHtcbiAgICAgIGlmKHZhbHVlID09PSBudWxsKSB0aGlzLnNlbGVjdGlvbkNvbnRyb2wucmVzZXQoKVxuICAgICAgdGhpcy5zZWxlY3Rpb25Db250cm9sLm1hcmtBc0RpcnR5KHsgb25seVNlbGY6IHRydWUgfSlcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ29udHJvbC5tYXJrQWxsQXNUb3VjaGVkKClcbiAgICB9IGVsc2UgaWYodGhpcy5mb3JtSW5pdGlhbGl6ZWQgJiYgdGhpcy5zZWxlY3Rpb25Db250cm9sLnByaXN0aW5lKSB7XG4gICAgICBpZih2YWx1ZSA9PT0gbnVsbCkgdGhpcy5zZWxlY3Rpb25Db250cm9sLnJlc2V0KClcbiAgICB9XG5cbiAgICB0aGlzLmZvcm1Jbml0aWFsaXplZCA9IHRydWVcblxuICB9XG5cbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuXG4gICAgY29uc3QgaXNSZXF1aXJlZCA9IGNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpID8gdHJ1ZSA6IGZhbHNlXG5cbiAgICBsZXQgZXJyb3JzID0geyAnbWluUmVxdWlyZWQnOiBmYWxzZSwgJ21heEV4Y2VlZGVkJzogZmFsc2UgfVxuXG4gICAgaWYoIWlzUmVxdWlyZWQpIHRoaXMuc2VsZWN0aW9uQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKVxuICAgIGlmKHRoaXMubWluU2VsZWN0aW9uID4gMCkgdGhpcy5zZWxlY3Rpb25Db250cm9sLmFkZFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5taW5TZWxlY3Rpb24pKVxuXG4gICAgY29uc3QgaGFzVmFsdWUgPSAoIXRoaXMuc2VsZWN0aW9uQ29udHJvbC52YWx1ZSB8fCB0aGlzLnNlbGVjdGlvbkNvbnRyb2wudmFsdWU/Lmxlbmd0aCA9PT0gMClcblxuICAgIGlmKHRoaXMubWluU2VsZWN0aW9uID4gMCkge1xuICAgICAgY29uc3QgaGFzTWluID0gKHRoaXMuc2VsZWN0aW9uQ29udHJvbC52YWx1ZT8ubGVuZ3RoKzEgPD0gdGhpcy5taW5TZWxlY3Rpb24pID8gdHJ1ZSA6IGZhbHNlXG4gICAgICBlcnJvcnMubWluUmVxdWlyZWQgPSBoYXNNaW5cbiAgICB9XG5cbiAgICBpZih0aGlzLm1heFNlbGVjdGlvbiA+IDApIHtcbiAgICAgIGNvbnN0IGhhc01heCA9ICh0aGlzLnNlbGVjdGlvbkNvbnRyb2wudmFsdWU/Lmxlbmd0aCA+PSB0aGlzLm1heFNlbGVjdGlvbikgPyB0cnVlIDogZmFsc2VcbiAgICAgIGVycm9ycy5tYXhFeGNlZWRlZCA9IGhhc01heFxuICAgIH1cblxuICAgIGNvbnN0IGhhc0Vycm9ycyA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMoZXJyb3JzLCB0cnVlKS5sZW5ndGggPiAwXG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5zZWxlY3RlZFZhbHVlcyh0aGlzLnNlbGVjdGlvbkNvbnRyb2wudmFsdWUgfHwgW10sIHRydWUpLmxlbmd0aFxuICAgIGNvbnN0IGhhc1ZhbHVlcyA9ICh0aGlzLm1pblNlbGVjdGlvbiA+IDAgJiYgdmFsdWVzID4gdGhpcy5taW5TZWxlY3Rpb24pIHx8ICh0aGlzLm1heFNlbGVjdGlvbiA+IDAgJiYgdmFsdWVzIDwgdGhpcy5tYXhTZWxlY3Rpb24pXG5cbiAgICBjb25zdCBmaW5hbEVycm9ycyA9IChpc1JlcXVpcmVkICYmICFoYXNWYWx1ZXMgJiYgaGFzRXJyb3JzKSA/IGVycm9ycyA6IG51bGxcblxuICAgIHJldHVybiBmaW5hbEVycm9yc1xuXG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpe1xuICAgIHRoaXMub25DaGFuZ2UgPSBmblxuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSl7XG4gICAgdGhpcy5vblRvdWNoID0gZm5cbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcblxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkXG5cbiAgICBpZih0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2wuZGlzYWJsZSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ29udHJvbC5lbmFibGUoKVxuICAgIH1cblxuICB9XG5cbiAgb25TZWxlY3Rpb24oc2VsZWN0aW9uOiBNYXRTZWxlY3RDaGFuZ2V8YW55KSB7XG5cbiAgICB0aGlzLmludmFsaWQgPSBmYWxzZVxuXG4gICAgaWYodGhpcy5tdWx0aXBsZSkge1xuXG4gICAgICBjb25zdCBjaGVja2JveFNlbGVjdGVkID0gc2VsZWN0aW9uLnZhbHVlXG5cbiAgICAgIGNvbnN0IG5ld0RhdGEgPSB0aGlzLmRhdGEubWFwKGl0ZW0gPT4gU2VsZWN0aW9uSXRlbS5hZGFwdChpdGVtKSlcblxuICAgICAgbmV3RGF0YS5tYXAoaXRlbSA9PiBpdGVtLnNlbGVjdGVkID0gY2hlY2tib3hTZWxlY3RlZC5pbmNsdWRlcyhpdGVtLnZhbHVlKSA/IHRydWUgOiBmYWxzZSlcblxuICAgICAgaWYodGhpcy5pc1ZhbGlkUmFuZ2UobmV3RGF0YSkpIHRoaXMuZGF0YSA9IG5ld0RhdGFcblxuICAgICAgY29uc3QgY3VyU2VsZWN0ZWQgPSB0aGlzLmRhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCkubGVuZ3RoXG4gICAgICBjb25zdCBwcmV2U2VsZWN0ZWQgPSBuZXdEYXRhLmZpbHRlcihpdGVtID0+IGl0ZW0uc2VsZWN0ZWQpLmxlbmd0aFxuXG4gICAgICBpZihjdXJTZWxlY3RlZCA+IHRoaXMubWF4U2VsZWN0aW9uKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKG5ld0RhdGEpXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmKHByZXZTZWxlY3RlZCA8IGN1clNlbGVjdGVkKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24obmV3RGF0YSlcbiAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICBpZihjdXJTZWxlY3RlZCA+PSB0aGlzLm1heFNlbGVjdGlvbikge1xuXG4gICAgICAgICAgICBjb25zdCBkaXMgPSB0aGlzLmRlZmF1bHREaXNhYmxlZC5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKVxuXG4gICAgICAgICAgICBuZXdEYXRhLmZpbHRlcihpdGVtID0+ICFpdGVtLnNlbGVjdGVkKS5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpdGVtLmRpc2FibGVkID0gKGRpcy5pbmNsdWRlcyhpdGVtLnZhbHVlKSkgPyBpdGVtLmRpc2FibGVkIDogIWl0ZW0uZGlzYWJsZWRcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24obmV3RGF0YSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGF0YSA9IG5ld0RhdGFcblxuICAgICAgY29uc3Qgc2VsID0gdGhpcy5kYXRhLmZpbHRlcihpdGVtID0+IGl0ZW0uc2VsZWN0ZWQpLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpXG4gICAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2wucGF0Y2hWYWx1ZShzZWwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KVxuXG4gICAgfVxuXG4gICAgc2VsZWN0aW9uID0gKHNlbGVjdGlvbj8udmFsdWUpID8gc2VsZWN0aW9uLnZhbHVlIDogc2VsZWN0aW9uXG5cbiAgICBjb25zdCBzZWxlY3RlZCA9ICh0aGlzLm11bHRpcGxlKSA/IHRoaXMuaXNBcnJheShzZWxlY3Rpb24pID8gc2VsZWN0aW9uIDogW3NlbGVjdGlvbl0gOiBbc2VsZWN0aW9uXVxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGEubWFwKCh7IGlkLCB2YWx1ZSB9KSA9PiAoe2lkLCB2YWx1ZX0pKVxuICAgIGNvbnN0IG5ld0RhdGEgPSBkYXRhLmZpbHRlcigoaXRlbTogYW55KSA9PiBzZWxlY3RlZC5pbmNsdWRlcyhpdGVtLnZhbHVlKSlcbiAgICBjb25zdCBzZWxlY3RlZERhdGEgPSAodGhpcy5pc09iamVjdHMpID8gbmV3RGF0YSA6IG5ld0RhdGEubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKVxuXG4gICAgdGhpcy5zZWxlY3Rpb25Db250cm9sLm1hcmtBbGxBc1RvdWNoZWQoKVxuXG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChkYXRhKVxuICAgIHRoaXMub25DaGFuZ2Uoc2VsZWN0ZWREYXRhKVxuXG4gIH1cblxuICBmaW5kQ29udHJvbERpc2FibGVkKGNvbnRyb2w6IHN0cmluZykge1xuICAgIGNvbnN0IGZvdW5kID0gdGhpcy5kYXRhLmZpbmQoaXRlbSA9PiBpdGVtLnZhbHVlID09PSBjb250cm9sKVxuICAgIGNvbnN0IGRpc2FibGVkID0gKGZvdW5kPy5kaXNhYmxlZCkgPyBmb3VuZC5kaXNhYmxlZCA6IGZhbHNlXG4gICAgcmV0dXJuIGRpc2FibGVkXG4gIH1cblxuICBpc1ZhbGlkUmFuZ2UoZGF0YTogYW55W10pIHtcblxuICAgIGNvbnN0IHNlbGVjdGVkID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKS5sZW5ndGhcblxuICAgIGlmKHRoaXMubXVsdGlwbGUpIHtcblxuICAgICAgY29uc3QgaXNNaW4gPSAodGhpcy5taW5TZWxlY3Rpb24gIT09IDApID8gc2VsZWN0ZWQgPj0gdGhpcy5taW5TZWxlY3Rpb24gOiB0cnVlXG4gICAgICBjb25zdCBpc01heCA9ICh0aGlzLm1heFNlbGVjdGlvbiAhPT0gMCkgPyBzZWxlY3RlZCA8PSB0aGlzLm1heFNlbGVjdGlvbiA6IHRydWVcblxuICAgICAgcmV0dXJuIGlzTWluICYmIGlzTWF4XG5cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNlbGVjdGVkID4gMFxuICAgIH1cblxuICB9XG5cbiAgc2VsZWN0ZWRWYWx1ZXMob2JqOiBhbnksIHN0YXRlID0gZmFsc2UpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMob2JqKS5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4gdmFsdWUgPT09IHN0YXRlKS5tYXAoKFtrZXksIF9dKSA9PiBrZXkpXG4gIH1cblxufVxuIiwiPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XCI+XG4gIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAuNXJlbTsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIj5cbiAgICA8bWF0LWxhYmVsIHN0eWxlPVwiZm9udC1zaXplOiBsYXJnZXI7XCI+XG4gICAgICB7eyBsYWJlbCB9fVxuICAgIDwvbWF0LWxhYmVsPlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGEgJiYgZGF0YS5sZW5ndGggPiAwOyBlbHNlIE5PREFUQVwiPlxuICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiXG4gICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICA+XG4gICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlbGVjdGlvbkNvbnRyb2xcIlxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJ8fCcnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGRhdGFcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIHt7b3B0aW9uLnZhbHVlfX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNOT0RBVEE+XG4gICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG4iXX0=
|