filter-selection-input 15.0.4

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.
@@ -0,0 +1,394 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Pipe, inject, EventEmitter, forwardRef, Component, ViewEncapsulation, ViewChild, Output, Input, NgModule } from '@angular/core';
3
+ import * as i2 from '@angular/forms';
4
+ import { FormBuilder, Validators, NG_VALUE_ACCESSOR, NG_VALIDATORS, FormsModule, ReactiveFormsModule } from '@angular/forms';
5
+ import * as i1 from '@angular/common';
6
+ import { CommonModule } from '@angular/common';
7
+ import * as i3$1 from '@angular/material/button';
8
+ import { MatButtonModule } from '@angular/material/button';
9
+ import * as i4 from '@angular/material/form-field';
10
+ import { MatFormFieldModule } from '@angular/material/form-field';
11
+ import * as i5$1 from '@angular/material/button-toggle';
12
+ import { MatButtonToggleModule } from '@angular/material/button-toggle';
13
+ import * as i6$1 from '@angular/material/divider';
14
+ import { MatDividerModule } from '@angular/material/divider';
15
+ import * as i7$1 from '@angular/material/slide-toggle';
16
+ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
17
+ import { of, startWith, map } from 'rxjs';
18
+ import * as i6 from '@angular/material/autocomplete';
19
+ import { MatAutocompleteTrigger, MatAutocompleteModule } from '@angular/material/autocomplete';
20
+ import * as i3 from '@angular/material/icon';
21
+ import { MatIconModule } from '@angular/material/icon';
22
+ import * as i5 from '@angular/material/input';
23
+ import { MatInputModule } from '@angular/material/input';
24
+ import * as i7 from '@angular/material/core';
25
+ import { MatOptionModule } from '@angular/material/core';
26
+ import { MatSliderModule } from '@angular/material/slider';
27
+ import { MatMenuModule } from '@angular/material/menu';
28
+ import { MatRadioModule } from '@angular/material/radio';
29
+ import { MatCheckboxModule } from '@angular/material/checkbox';
30
+ import { MatToolbarModule } from '@angular/material/toolbar';
31
+ import { MatSelectModule } from '@angular/material/select';
32
+
33
+ class SelectionBasic {
34
+ constructor(id = 0, value = '') {
35
+ this.id = id;
36
+ this.value = value;
37
+ }
38
+ static adapt(item) {
39
+ return new SelectionBasic(item?.id, (item?.value) ? item.value : item);
40
+ }
41
+ }
42
+
43
+ class SelectionItem {
44
+ constructor(id = crypto.randomUUID(), value = '', disabled, selected) {
45
+ this.id = id;
46
+ this.value = value;
47
+ this.disabled = disabled;
48
+ this.selected = selected;
49
+ }
50
+ static adapt(item) {
51
+ return new SelectionItem(item?.id, (item?.value) ? item.value : item, (item?.disabled) ? true : false, (item?.selected) ? true : false);
52
+ }
53
+ }
54
+
55
+ /*
56
+ * Public API Surface of selections
57
+ */
58
+
59
+ class RemoveUnderscorePipe {
60
+ transform(value) {
61
+ return value ? value.replace(/_/g, " ") : value;
62
+ }
63
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RemoveUnderscorePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
64
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: RemoveUnderscorePipe, isStandalone: true, name: "removeUnderscore" }); }
65
+ }
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RemoveUnderscorePipe, decorators: [{
67
+ type: Pipe,
68
+ args: [{
69
+ name: 'removeUnderscore',
70
+ standalone: true
71
+ }]
72
+ }] });
73
+
74
+ class FilterSelectionInputComponent {
75
+ set data(value) {
76
+ value = (value) ? value : [];
77
+ this.isObjects = this.hasObjects(value);
78
+ this._data = (value) ? value.map(item => SelectionItem.adapt(item)) : [];
79
+ const selectedObjects = value.filter(item => item.selected).map(item => item.value);
80
+ this.defaultDisabled = (!this.defaultDisabled) ? value.map(item => SelectionItem.adapt(item)).filter(item => item.disabled) : this.defaultDisabled;
81
+ const selected = this.findFirst(selectedObjects);
82
+ this.selectionControl.patchValue(selected, { emitEvent: false });
83
+ }
84
+ get data() {
85
+ return this._data;
86
+ }
87
+ constructor() {
88
+ this.fb = inject(FormBuilder);
89
+ this.selected = new EventEmitter();
90
+ this.isObjects = false;
91
+ this.defaultDisabled = [];
92
+ this.formInitialized = false;
93
+ this.panelOpened = false;
94
+ this.disabled = false;
95
+ this._data = [];
96
+ this.isArray = (obj) => Array.isArray(obj);
97
+ this.hasObjects = (obj) => (this.isArray(obj) && obj.length > 0) ? this.isObject(obj[0]) : false;
98
+ this.isObject = (obj) => typeof obj === 'object' && obj !== null && !Array.isArray(obj);
99
+ this.isEmpty = (obj) => (!obj) ? false : (Object.keys(obj).length === 0);
100
+ this.findFirst = (obj) => {
101
+ const found = this.data.find(item => obj.includes(item.value));
102
+ return (found) ? found.value : null;
103
+ };
104
+ this.firstElement = (arr) => (arr.length > 0) ? arr[0] : '';
105
+ this.isSelected = (value) => {
106
+ const compareTo = this.selectedOption instanceof (SelectionItem) ? this.selectedOption.value : this.selectedOption;
107
+ return value === compareTo;
108
+ };
109
+ this.selectionControl = this.fb.control(null, Validators.required);
110
+ this.appearance = 'outline';
111
+ this.label = '';
112
+ this.placeholder = '';
113
+ this.forceSelection = true; // TODO
114
+ this.filteredOptions = of([]);
115
+ this.isDisabled = (selection) => {
116
+ const foundDisabled = this.findSelection(selection);
117
+ return (foundDisabled?.disabled) ? true : false;
118
+ };
119
+ this.onChange = () => { };
120
+ this.onTouch = () => { };
121
+ }
122
+ ngOnInit() {
123
+ this.filteredOptions = this.selectionControl.valueChanges
124
+ .pipe(startWith(''), map(value => this._filter(value || '')));
125
+ }
126
+ ngAfterViewInit() {
127
+ this.formInitialized = true;
128
+ }
129
+ writeValue(value) {
130
+ const option = (this.isArray(value)) ? this.firstElement(value) : value;
131
+ this.selectedOption = option instanceof (SelectionItem) ? option.value : option;
132
+ this.selectionControl.patchValue(this.selectedOption);
133
+ this.formInitialized = true;
134
+ }
135
+ validate(control) {
136
+ const isRequired = control.hasValidator(Validators.required) ? true : false;
137
+ if (!isRequired)
138
+ this.selectionControl.clearValidators();
139
+ return (isRequired) ? (this.selectionControl.valid) ? null : { 'required': true } : null;
140
+ }
141
+ registerOnChange(fn) {
142
+ this.onChange = fn;
143
+ }
144
+ registerOnTouched(fn) {
145
+ this.onTouch = fn;
146
+ }
147
+ setDisabledState(isDisabled) {
148
+ this.disabled = isDisabled;
149
+ if (this.disabled) {
150
+ this.selectionControl.disable();
151
+ }
152
+ else {
153
+ this.selectionControl.enable();
154
+ }
155
+ }
156
+ onOpened() {
157
+ if (this.panelOpened)
158
+ this.selectionControl.patchValue(null);
159
+ this.panelOpened = true;
160
+ this.selectionControl.patchValue(null);
161
+ }
162
+ onClosed() {
163
+ this.panelOpened = false;
164
+ const selectedValue = this.selectedOption instanceof (SelectionItem) ? this.selectedOption.value : this.selectedOption;
165
+ this.selectionControl.patchValue(selectedValue);
166
+ }
167
+ onSelected(value) {
168
+ this.onEnteredValue(value.option.value);
169
+ }
170
+ onEnteredValue(value) {
171
+ const foundIndex = this.data.findIndex(item => item.value.toLowerCase().includes(value.toLowerCase()));
172
+ const found = (foundIndex >= 0) ? this.data[foundIndex] : value;
173
+ const selected = (foundIndex >= 0 && this.forceSelection) ? found : { id: 0, value: found };
174
+ this.selectedOption = selected instanceof (SelectionItem) ? selected.value : selected;
175
+ if (this.forceSelection && foundIndex === -1) {
176
+ this.selectionControl.patchValue(null);
177
+ }
178
+ else {
179
+ this.selectionControl.patchValue(selected.value);
180
+ }
181
+ const dataValue = this.findSelection(this.selectedOption);
182
+ const selectedValue = (this.isObjects) ? dataValue : dataValue.value;
183
+ this.onChange(selectedValue);
184
+ this.selected.next(selectedValue);
185
+ if (this.panelOpened)
186
+ this.autoCompleteInput?.closePanel();
187
+ this.panelOpened = false;
188
+ }
189
+ findSelection(selection) {
190
+ return this.data.find(item => item.value === selection);
191
+ }
192
+ _filter(value) {
193
+ const filterValue = value.toLowerCase();
194
+ return (this.data) ? this.data.filter(option => option.value.toLowerCase().includes(filterValue)).map(item => item.value) : [];
195
+ }
196
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterSelectionInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
197
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FilterSelectionInputComponent, selector: "app-filter-selection-input", inputs: { data: "data", appearance: "appearance", label: "label", placeholder: "placeholder", forceSelection: "forceSelection" }, outputs: { selected: "selected" }, providers: [
198
+ {
199
+ provide: NG_VALUE_ACCESSOR,
200
+ useExisting: forwardRef(() => FilterSelectionInputComponent),
201
+ multi: true
202
+ },
203
+ {
204
+ provide: NG_VALIDATORS,
205
+ useExisting: forwardRef(() => FilterSelectionInputComponent),
206
+ multi: true
207
+ }
208
+ ], viewQueries: [{ propertyName: "autoCompleteInput", first: true, predicate: ["autoCompleteInput"], descendants: true, read: MatAutocompleteTrigger }], ngImport: i0, template: "<div *ngIf=\"data\" style=\"display: flex;\">\n <mat-form-field style=\"flex:1\" [appearance]=\"appearance\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input\n matInput\n #autoCompleteInput\n type=\"text\"\n [placeholder]=\"(panelOpened) ? selectedOption : placeholder\"\n [formControl]=\"selectionControl\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"onEnteredValue(autoCompleteInput.value)\"\n >\n <mat-autocomplete #auto=\"matAutocomplete\" (opened)=\"onOpened()\" (closed)=\"onClosed()\" (optionSelected)=\"onSelected($event)\">\n <mat-option\n *ngFor=\"let option of filteredOptions | async\"\n [value]=\"option\"\n [disabled]=\"isDisabled(option)\"\n >\n <div style=\"display: flex;\" *ngIf=\"isSelected(option); else NOT_SELECTED\">\n <span style=\"flex:1; font-weight: 400; color: #673ab7;\">{{option}}</span>\n <mat-icon color=\"primary\">check</mat-icon>\n </div>\n <ng-template #NOT_SELECTED>\n {{option}}\n </ng-template>\n\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n</div>\n\n\n\n", styles: [".mdc-list-item__primary-text{margin:0;flex:1}\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.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: 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.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], encapsulation: i0.ViewEncapsulation.None }); }
209
+ }
210
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterSelectionInputComponent, decorators: [{
211
+ type: Component,
212
+ args: [{ selector: 'app-filter-selection-input', providers: [
213
+ {
214
+ provide: NG_VALUE_ACCESSOR,
215
+ useExisting: forwardRef(() => FilterSelectionInputComponent),
216
+ multi: true
217
+ },
218
+ {
219
+ provide: NG_VALIDATORS,
220
+ useExisting: forwardRef(() => FilterSelectionInputComponent),
221
+ multi: true
222
+ }
223
+ ], encapsulation: ViewEncapsulation.None, template: "<div *ngIf=\"data\" style=\"display: flex;\">\n <mat-form-field style=\"flex:1\" [appearance]=\"appearance\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input\n matInput\n #autoCompleteInput\n type=\"text\"\n [placeholder]=\"(panelOpened) ? selectedOption : placeholder\"\n [formControl]=\"selectionControl\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"onEnteredValue(autoCompleteInput.value)\"\n >\n <mat-autocomplete #auto=\"matAutocomplete\" (opened)=\"onOpened()\" (closed)=\"onClosed()\" (optionSelected)=\"onSelected($event)\">\n <mat-option\n *ngFor=\"let option of filteredOptions | async\"\n [value]=\"option\"\n [disabled]=\"isDisabled(option)\"\n >\n <div style=\"display: flex;\" *ngIf=\"isSelected(option); else NOT_SELECTED\">\n <span style=\"flex:1; font-weight: 400; color: #673ab7;\">{{option}}</span>\n <mat-icon color=\"primary\">check</mat-icon>\n </div>\n <ng-template #NOT_SELECTED>\n {{option}}\n </ng-template>\n\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n</div>\n\n\n\n", styles: [".mdc-list-item__primary-text{margin:0;flex:1}\n"] }]
224
+ }], ctorParameters: function () { return []; }, propDecorators: { autoCompleteInput: [{
225
+ type: ViewChild,
226
+ args: ['autoCompleteInput', { read: MatAutocompleteTrigger, static: false }]
227
+ }], selected: [{
228
+ type: Output,
229
+ args: ['selected']
230
+ }], data: [{
231
+ type: Input
232
+ }], appearance: [{
233
+ type: Input
234
+ }], label: [{
235
+ type: Input
236
+ }], placeholder: [{
237
+ type: Input
238
+ }], forceSelection: [{
239
+ type: Input
240
+ }] } });
241
+
242
+ class FilterSelectionDemoComponent {
243
+ constructor() {
244
+ this.fb = inject(FormBuilder);
245
+ this.data_1 = [
246
+ { id: 11, value: 'Telus' },
247
+ { id: 12, value: 'AT&T', disabled: true },
248
+ { id: 14, value: 'Bell', selected: true },
249
+ { id: 63, value: 'Rogers', selected: true }
250
+ ];
251
+ this.data_2 = ['Telus', 'AT&T', 'Bell', 'Rogers'];
252
+ // SELECTIONS
253
+ this.selectionControl_1 = this.fb.control(null);
254
+ this.selectionControl_2 = this.fb.control(null, Validators.required);
255
+ //CHANGE DETECTION
256
+ this.changeDetection_1 = this.fb.control(false);
257
+ this.changeDetection_2 = this.fb.control(false);
258
+ this.data = this.data_2;
259
+ }
260
+ ngOnInit() {
261
+ // SELECTIONS
262
+ this.selectionControl_1.valueChanges.subscribe(data => {
263
+ if (this.changeDetection_1.value)
264
+ console.log('CHANGE:', data);
265
+ });
266
+ this.selectionControl_2.valueChanges.subscribe(data => {
267
+ if (this.changeDetection_2.value)
268
+ console.log('CHANGE:', data);
269
+ });
270
+ }
271
+ onPerformPatch() {
272
+ this.selectionControl_1.patchValue(['Bell']);
273
+ this.selectionControl_2.patchValue(['AT&T']);
274
+ }
275
+ onChangeDataType(type) {
276
+ if (type === 'strings') {
277
+ this.data = this.data_2; //strings
278
+ }
279
+ else {
280
+ this.data = this.data_1; //objects
281
+ }
282
+ }
283
+ // DISABLE
284
+ onDisabled_1(disable) {
285
+ if (disable) {
286
+ this.selectionControl_1.disable();
287
+ }
288
+ else {
289
+ this.selectionControl_1.enable();
290
+ }
291
+ }
292
+ onDisabled_2(disable) {
293
+ if (disable) {
294
+ this.selectionControl_2.disable();
295
+ }
296
+ else {
297
+ this.selectionControl_2.enable();
298
+ }
299
+ }
300
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterSelectionDemoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
301
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FilterSelectionDemoComponent, selector: "app-filter-selection-demo", ngImport: i0, template: "<div style=\"display: flex;\">\n <h1>Filter Selection (Autocomplete) 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-filter-selection-input error=\"No Data Provided\">\n <h3 style=\"color: red; margin-top: 0; margin-bottom: 0;\">No Data</h3>\n</app-filter-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;\">Autocomplete - {{ 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-filter-selection-input\n style=\"flex:1\"\n appearance=\"outline\"\n placeholder=\"Select an Option\"\n label=\"Choices\"\n [data]=\"data\"\n [formControl]=\"selectionControl_1\"\n ></app-filter-selection-input>\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 Label and Placeholder<br>\n Not 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-filter-selection-input\n style=\"flex:1\"\n appearance=\"outline\"\n [data]=\"data\"\n [formControl]=\"selectionControl_2\"\n ></app-filter-selection-input>\n <div *ngIf=\"error2.checked\">\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_1(disable2.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_2.valid }}<br>\n </div>\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$1.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$1.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i5$1.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$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i7$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: FilterSelectionInputComponent, selector: "app-filter-selection-input", inputs: ["data", "appearance", "label", "placeholder", "forceSelection"], outputs: ["selected"] }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }] }); }
302
+ }
303
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterSelectionDemoComponent, decorators: [{
304
+ type: Component,
305
+ args: [{ selector: 'app-filter-selection-demo', template: "<div style=\"display: flex;\">\n <h1>Filter Selection (Autocomplete) 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-filter-selection-input error=\"No Data Provided\">\n <h3 style=\"color: red; margin-top: 0; margin-bottom: 0;\">No Data</h3>\n</app-filter-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;\">Autocomplete - {{ 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-filter-selection-input\n style=\"flex:1\"\n appearance=\"outline\"\n placeholder=\"Select an Option\"\n label=\"Choices\"\n [data]=\"data\"\n [formControl]=\"selectionControl_1\"\n ></app-filter-selection-input>\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 Label and Placeholder<br>\n Not 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-filter-selection-input\n style=\"flex:1\"\n appearance=\"outline\"\n [data]=\"data\"\n [formControl]=\"selectionControl_2\"\n ></app-filter-selection-input>\n <div *ngIf=\"error2.checked\">\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_1(disable2.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_2.valid }}<br>\n </div>\n </div>\n\n" }]
306
+ }], ctorParameters: function () { return []; } });
307
+
308
+ class FilterSelectionInputModule {
309
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterSelectionInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
310
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: FilterSelectionInputModule, declarations: [FilterSelectionDemoComponent,
311
+ FilterSelectionInputComponent], imports: [CommonModule,
312
+ FormsModule,
313
+ ReactiveFormsModule,
314
+ MatSliderModule,
315
+ MatButtonModule,
316
+ MatIconModule,
317
+ MatFormFieldModule,
318
+ MatToolbarModule,
319
+ MatCheckboxModule,
320
+ MatMenuModule,
321
+ MatButtonToggleModule,
322
+ MatDividerModule,
323
+ MatRadioModule,
324
+ MatInputModule,
325
+ MatAutocompleteModule,
326
+ RemoveUnderscorePipe,
327
+ MatSelectModule,
328
+ MatOptionModule,
329
+ MatSlideToggleModule], exports: [FilterSelectionDemoComponent,
330
+ FilterSelectionInputComponent] }); }
331
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterSelectionInputModule, imports: [CommonModule,
332
+ FormsModule,
333
+ ReactiveFormsModule,
334
+ MatSliderModule,
335
+ MatButtonModule,
336
+ MatIconModule,
337
+ MatFormFieldModule,
338
+ MatToolbarModule,
339
+ MatCheckboxModule,
340
+ MatMenuModule,
341
+ MatButtonToggleModule,
342
+ MatDividerModule,
343
+ MatRadioModule,
344
+ MatInputModule,
345
+ MatAutocompleteModule,
346
+ MatSelectModule,
347
+ MatOptionModule,
348
+ MatSlideToggleModule] }); }
349
+ }
350
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterSelectionInputModule, decorators: [{
351
+ type: NgModule,
352
+ args: [{
353
+ imports: [
354
+ CommonModule,
355
+ FormsModule,
356
+ ReactiveFormsModule,
357
+ MatSliderModule,
358
+ MatButtonModule,
359
+ MatIconModule,
360
+ MatFormFieldModule,
361
+ MatToolbarModule,
362
+ MatCheckboxModule,
363
+ MatMenuModule,
364
+ MatButtonToggleModule,
365
+ MatDividerModule,
366
+ MatRadioModule,
367
+ MatInputModule,
368
+ MatAutocompleteModule,
369
+ RemoveUnderscorePipe,
370
+ MatSelectModule,
371
+ MatOptionModule,
372
+ MatSlideToggleModule,
373
+ ],
374
+ declarations: [
375
+ FilterSelectionDemoComponent,
376
+ FilterSelectionInputComponent,
377
+ ],
378
+ exports: [
379
+ FilterSelectionDemoComponent,
380
+ FilterSelectionInputComponent,
381
+ ]
382
+ }]
383
+ }] });
384
+
385
+ /*
386
+ * Public API Surface of checkbox-selection-input
387
+ */
388
+
389
+ /**
390
+ * Generated bundle index. Do not edit.
391
+ */
392
+
393
+ export { FilterSelectionDemoComponent, FilterSelectionInputComponent, FilterSelectionInputModule, RemoveUnderscorePipe, SelectionBasic, SelectionItem };
394
+ //# sourceMappingURL=filter-selection-input.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-selection-input.mjs","sources":["../../../projects/filter-selection-input/src/lib/models/selection-basic.model.ts","../../../projects/filter-selection-input/src/lib/models/selection-item.model.ts","../../../projects/filter-selection-input/src/lib/models/index.ts","../../../projects/filter-selection-input/src/lib/pipes/remove-underscore.pipe.ts","../../../projects/filter-selection-input/src/lib/filter-selection-input/filter-selection-input.component.ts","../../../projects/filter-selection-input/src/lib/filter-selection-input/filter-selection-input.component.html","../../../projects/filter-selection-input/src/lib/filter-demo/filter-demo.component.ts","../../../projects/filter-selection-input/src/lib/filter-demo/filter-demo.component.html","../../../projects/filter-selection-input/src/lib/filter-selection-input.module.ts","../../../projects/filter-selection-input/src/public-api.ts","../../../projects/filter-selection-input/src/filter-selection-input.ts"],"sourcesContent":["export interface SelectionBasicInterface {\n id: number|string;\n value: string;\n}\n\nexport class SelectionBasic implements SelectionBasicInterface {\n\n constructor(\n public id = 0,\n public value = '',\n ) {}\n\n static adapt(item?: any) {\n\n return new SelectionBasic(\n item?.id,\n (item?.value) ? item.value : item,\n );\n }\n\n}\n","export interface SelectionItemInterface {\n id: number|string;\n value: string;\n disabled?: boolean;\n selected?: boolean;\n}\n\nexport class SelectionItem implements SelectionItemInterface {\n\n constructor(\n public id = crypto.randomUUID(),\n public value = '',\n public disabled?: boolean,\n public selected?: boolean,\n ) {}\n\n static adapt(item?: any) {\n\n return new SelectionItem(\n item?.id,\n (item?.value) ? item.value : item,\n (item?.disabled) ? true : false,\n (item?.selected) ? true : false,\n );\n }\n\n}\n","/*\n * Public API Surface of selections\n */\n\nexport * from './selection-basic.model';\nexport * from './selection-item.model';\n\n\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'removeUnderscore',\n standalone: true\n})\nexport class RemoveUnderscorePipe implements PipeTransform {\n transform(value: string): string {\n return value? value.replace(/_/g, \" \") : value;\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild, ViewEncapsulation, forwardRef, inject } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, FormBuilder, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validators } from '@angular/forms';\nimport { Observable, startWith, map, of } from 'rxjs';\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\nimport { MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete';\n\nimport { SelectionItem } from '../models/selection-item.model';\n\n@Component({\n selector: 'app-filter-selection-input',\n templateUrl: './filter-selection-input.component.html',\n styleUrls: ['./filter-selection-input.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FilterSelectionInputComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => FilterSelectionInputComponent),\n multi: true\n }\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class FilterSelectionInputComponent implements OnInit, ControlValueAccessor {\n\n @ViewChild('autoCompleteInput', { read: MatAutocompleteTrigger, static: false }) autoCompleteInput?: MatAutocompleteTrigger;\n\n fb = inject(FormBuilder)\n\n @Output('selected') selected = new EventEmitter<SelectionItem|any>()\n\n isObjects = false\n defaultDisabled: SelectionItem[] = []\n formInitialized = false\n\n panelOpened = false\n\n disabled = false\n\n private _data: (any|string)[] = []\n @Input() set data(value: any[]|undefined|null) {\n\n value = (value) ? value : []\n\n this.isObjects = this.hasObjects(value)\n this._data = (value) ? value.map(item => SelectionItem.adapt(item)) : []\n\n const selectedObjects = value.filter(item => item.selected).map(item => item.value)\n this.defaultDisabled = (!this.defaultDisabled) ? value.map(item => SelectionItem.adapt(item)).filter(item => item.disabled) : this.defaultDisabled\n\n const selected = this.findFirst(selectedObjects)\n this.selectionControl.patchValue(selected, { emitEvent: false })\n\n }\n\n get data(): any[] {\n return this._data\n }\n\n isArray = (obj: any) => Array.isArray(obj)\n hasObjects = (obj: any) => (this.isArray(obj) && obj.length > 0) ? this.isObject(obj[0]) : false\n isObject = (obj: any) => typeof obj === 'object' && obj !== null && !Array.isArray(obj)\n isEmpty = (obj: any) => (!obj) ? false : (Object.keys(obj).length === 0)\n\n findFirst = (obj: string[]) => {\n const found = this.data.find(item => obj.includes(item.value))\n return (found) ? found.value : null\n }\n\n firstElement = (arr: string[]) => (arr.length > 0) ? arr[0] : ''\n\n isSelected = (value: any) => {\n const compareTo = this.selectedOption instanceof(SelectionItem) ? this.selectedOption.value : this.selectedOption\n return value === compareTo\n }\n\n selectionControl = this.fb.control<string|undefined|null>(null, Validators.required)\n\n @Input() appearance: MatFormFieldAppearance = 'outline'\n\n @Input() label?: string|null|undefined = ''\n @Input() placeholder: string = ''\n\n @Input() forceSelection = true // TODO\n\n filteredOptions: Observable<string[]|any> = of([])\n\n selectedOption?: string|any\n\n isDisabled = (selection: string) => {\n const foundDisabled = this.findSelection(selection)\n return(foundDisabled?.disabled) ? true : false\n }\n\n onChange: any = () => {}\n onTouch: any = () => {}\n\n constructor() { }\n\n ngOnInit() {\n\n this.filteredOptions = this.selectionControl.valueChanges\n .pipe(\n startWith(''),\n map(value => this._filter(value || '')),\n )\n\n }\n\n ngAfterViewInit(): void {\n this.formInitialized = true\n }\n\n writeValue(value: any){\n\n const option = (this.isArray(value)) ? this.firstElement(value) : value\n this.selectedOption = option instanceof(SelectionItem) ? option.value : option\n\n this.selectionControl.patchValue(this.selectedOption)\n\n this.formInitialized = true\n\n }\n\n validate(control: AbstractControl): ValidationErrors | null {\n\n const isRequired = control.hasValidator(Validators.required) ? true : false\n\n if(!isRequired) this.selectionControl.clearValidators()\n return (isRequired) ? (this.selectionControl.valid) ? null : { 'required': true } : null\n\n }\n\n registerOnChange(fn: any){\n this.onChange = fn\n }\n\n registerOnTouched(fn: any){\n this.onTouch = fn\n }\n\n setDisabledState?(isDisabled: boolean) {\n\n this.disabled = isDisabled\n\n if(this.disabled) {\n this.selectionControl.disable()\n } else {\n this.selectionControl.enable()\n }\n\n }\n\n onOpened() {\n if(this.panelOpened) this.selectionControl.patchValue(null)\n this.panelOpened = true\n this.selectionControl.patchValue(null)\n }\n\n onClosed() {\n this.panelOpened = false\n const selectedValue = this.selectedOption instanceof(SelectionItem) ? this.selectedOption.value : this.selectedOption\n this.selectionControl.patchValue(selectedValue)\n }\n\n onSelected(value: MatAutocompleteSelectedEvent) {\n this.onEnteredValue(value.option.value)\n }\n\n onEnteredValue(value: string) {\n\n const foundIndex = this.data.findIndex(item => item.value.toLowerCase().includes(value.toLowerCase()))\n const found = (foundIndex >= 0) ? this.data[foundIndex] : value\n\n const selected = (foundIndex >= 0 && this.forceSelection) ? found : { id: 0, value: found }\n\n this.selectedOption = selected instanceof(SelectionItem) ? selected.value : selected\n\n if(this.forceSelection && foundIndex === -1) {\n this.selectionControl.patchValue(null)\n } else {\n this.selectionControl.patchValue(selected.value)\n }\n\n const dataValue = this.findSelection(this.selectedOption)\n const selectedValue = (this.isObjects) ? dataValue : dataValue.value\n\n this.onChange(selectedValue)\n this.selected.next(selectedValue)\n\n if(this.panelOpened) this.autoCompleteInput?.closePanel()\n this.panelOpened = false\n\n }\n\n findSelection(selection: string) {\n return this.data.find(item => item.value === selection)\n }\n\n private _filter(value: string) {\n const filterValue = value.toLowerCase();\n return (this.data) ? this.data.filter(option => option.value.toLowerCase().includes(filterValue)).map(item => item.value) : []\n }\n\n}\n","<div *ngIf=\"data\" style=\"display: flex;\">\n <mat-form-field style=\"flex:1\" [appearance]=\"appearance\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input\n matInput\n #autoCompleteInput\n type=\"text\"\n [placeholder]=\"(panelOpened) ? selectedOption : placeholder\"\n [formControl]=\"selectionControl\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"onEnteredValue(autoCompleteInput.value)\"\n >\n <mat-autocomplete #auto=\"matAutocomplete\" (opened)=\"onOpened()\" (closed)=\"onClosed()\" (optionSelected)=\"onSelected($event)\">\n <mat-option\n *ngFor=\"let option of filteredOptions | async\"\n [value]=\"option\"\n [disabled]=\"isDisabled(option)\"\n >\n <div style=\"display: flex;\" *ngIf=\"isSelected(option); else NOT_SELECTED\">\n <span style=\"flex:1; font-weight: 400; color: #673ab7;\">{{option}}</span>\n <mat-icon color=\"primary\">check</mat-icon>\n </div>\n <ng-template #NOT_SELECTED>\n {{option}}\n </ng-template>\n\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n</div>\n\n\n\n","import { Component, OnInit, inject } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\n\n@Component({\n selector: 'app-filter-selection-demo',\n templateUrl: './filter-demo.component.html',\n styleUrls: ['./filter-demo.component.scss']\n})\nexport class FilterSelectionDemoComponent implements OnInit {\n\n fb = inject(FormBuilder)\n\n data_1 = [\n { id: 11, value: 'Telus' },\n { id: 12, value: 'AT&T', disabled: true },\n { id: 14, value: 'Bell', selected: true},\n { id: 63, value: 'Rogers', selected: true }\n ]\n\n data_2 = ['Telus', 'AT&T', 'Bell', 'Rogers']\n\n // SELECTIONS\n selectionControl_1 = this.fb.control<string[]|null>(null)\n selectionControl_2 = this.fb.control<string[]|null>(null, Validators.required)\n\n //CHANGE DETECTION\n changeDetection_1 = this.fb.control(false)\n changeDetection_2 = this.fb.control(false)\n\n\n data: any = this.data_2\n\n constructor() { }\n\n ngOnInit() {\n\n // SELECTIONS\n this.selectionControl_1.valueChanges.subscribe(data => {\n if(this.changeDetection_1.value) console.log('CHANGE:',data)\n })\n\n this.selectionControl_2.valueChanges.subscribe(data => {\n if(this.changeDetection_2.value) console.log('CHANGE:',data)\n })\n\n }\n\n onPerformPatch() {\n this.selectionControl_1.patchValue(['Bell'])\n this.selectionControl_2.patchValue(['AT&T'])\n }\n\n onChangeDataType(type: string) {\n if(type === 'strings') {\n this.data = this.data_2 //strings\n } else {\n this.data = this.data_1 //objects\n }\n }\n\n // DISABLE\n onDisabled_1(disable: boolean) {\n\n if(disable) {\n this.selectionControl_1.disable()\n } else {\n this.selectionControl_1.enable()\n }\n\n }\n\n onDisabled_2(disable: boolean) {\n\n if(disable) {\n this.selectionControl_2.disable()\n } else {\n this.selectionControl_2.enable()\n }\n\n }\n\n}\n","<div style=\"display: flex;\">\n <h1>Filter Selection (Autocomplete) 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-filter-selection-input error=\"No Data Provided\">\n <h3 style=\"color: red; margin-top: 0; margin-bottom: 0;\">No Data</h3>\n</app-filter-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;\">Autocomplete - {{ 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-filter-selection-input\n style=\"flex:1\"\n appearance=\"outline\"\n placeholder=\"Select an Option\"\n label=\"Choices\"\n [data]=\"data\"\n [formControl]=\"selectionControl_1\"\n ></app-filter-selection-input>\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 Label and Placeholder<br>\n Not 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-filter-selection-input\n style=\"flex:1\"\n appearance=\"outline\"\n [data]=\"data\"\n [formControl]=\"selectionControl_2\"\n ></app-filter-selection-input>\n <div *ngIf=\"error2.checked\">\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_1(disable2.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_2.valid }}<br>\n </div>\n </div>\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\n\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { FilterSelectionDemoComponent, FilterSelectionInputComponent, RemoveUnderscorePipe } from '../public-api';\n\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatSliderModule,\n MatButtonModule,\n MatIconModule,\n MatFormFieldModule,\n MatToolbarModule,\n MatCheckboxModule,\n MatMenuModule,\n MatButtonToggleModule,\n MatDividerModule,\n MatRadioModule,\n MatInputModule,\n MatAutocompleteModule,\n RemoveUnderscorePipe,\n MatSelectModule,\n MatOptionModule,\n MatSlideToggleModule,\n ],\n declarations: [\n FilterSelectionDemoComponent,\n FilterSelectionInputComponent,\n ],\n exports: [\n FilterSelectionDemoComponent,\n FilterSelectionInputComponent,\n ]\n})\nexport class FilterSelectionInputModule { }\n","/*\n * Public API Surface of checkbox-selection-input\n */\n\nexport * from './lib/models/index';\n\nexport * from './lib/pipes/remove-underscore.pipe';\n\nexport * from './lib/filter-demo/filter-demo.component';\n\nexport * from './lib/filter-selection-input/filter-selection-input.component';\n\nexport * from './lib/filter-selection-input.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i5","i6","i7","i8.FilterSelectionInputComponent"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="filter-selection-input" />
5
+ export * from './public-api';
@@ -0,0 +1,36 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { FormBuilder } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ export declare class FilterSelectionDemoComponent implements OnInit {
5
+ fb: FormBuilder;
6
+ data_1: ({
7
+ id: number;
8
+ value: string;
9
+ disabled?: undefined;
10
+ selected?: undefined;
11
+ } | {
12
+ id: number;
13
+ value: string;
14
+ disabled: boolean;
15
+ selected?: undefined;
16
+ } | {
17
+ id: number;
18
+ value: string;
19
+ selected: boolean;
20
+ disabled?: undefined;
21
+ })[];
22
+ data_2: string[];
23
+ selectionControl_1: import("@angular/forms").FormControl<string[] | null>;
24
+ selectionControl_2: import("@angular/forms").FormControl<string[] | null>;
25
+ changeDetection_1: import("@angular/forms").FormControl<boolean | null>;
26
+ changeDetection_2: import("@angular/forms").FormControl<boolean | null>;
27
+ data: any;
28
+ constructor();
29
+ ngOnInit(): void;
30
+ onPerformPatch(): void;
31
+ onChangeDataType(type: string): void;
32
+ onDisabled_1(disable: boolean): void;
33
+ onDisabled_2(disable: boolean): void;
34
+ static ɵfac: i0.ɵɵFactoryDeclaration<FilterSelectionDemoComponent, never>;
35
+ static ɵcmp: i0.ɵɵComponentDeclaration<FilterSelectionDemoComponent, "app-filter-selection-demo", never, {}, {}, never, never, false, never>;
36
+ }
@@ -0,0 +1,53 @@
1
+ import { EventEmitter, OnInit } from '@angular/core';
2
+ import { AbstractControl, ControlValueAccessor, FormBuilder, ValidationErrors } from '@angular/forms';
3
+ import { Observable } from 'rxjs';
4
+ import { MatFormFieldAppearance } from '@angular/material/form-field';
5
+ import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete';
6
+ import { SelectionItem } from '../models/selection-item.model';
7
+ import * as i0 from "@angular/core";
8
+ export declare class FilterSelectionInputComponent implements OnInit, ControlValueAccessor {
9
+ autoCompleteInput?: MatAutocompleteTrigger;
10
+ fb: FormBuilder;
11
+ selected: EventEmitter<any>;
12
+ isObjects: boolean;
13
+ defaultDisabled: SelectionItem[];
14
+ formInitialized: boolean;
15
+ panelOpened: boolean;
16
+ disabled: boolean;
17
+ private _data;
18
+ set data(value: any[] | undefined | null);
19
+ get data(): any[];
20
+ isArray: (obj: any) => boolean;
21
+ hasObjects: (obj: any) => boolean;
22
+ isObject: (obj: any) => boolean;
23
+ isEmpty: (obj: any) => boolean;
24
+ findFirst: (obj: string[]) => any;
25
+ firstElement: (arr: string[]) => string;
26
+ isSelected: (value: any) => boolean;
27
+ selectionControl: import("@angular/forms").FormControl<string | null | undefined>;
28
+ appearance: MatFormFieldAppearance;
29
+ label?: string | null | undefined;
30
+ placeholder: string;
31
+ forceSelection: boolean;
32
+ filteredOptions: Observable<string[] | any>;
33
+ selectedOption?: string | any;
34
+ isDisabled: (selection: string) => boolean;
35
+ onChange: any;
36
+ onTouch: any;
37
+ constructor();
38
+ ngOnInit(): void;
39
+ ngAfterViewInit(): void;
40
+ writeValue(value: any): void;
41
+ validate(control: AbstractControl): ValidationErrors | null;
42
+ registerOnChange(fn: any): void;
43
+ registerOnTouched(fn: any): void;
44
+ setDisabledState?(isDisabled: boolean): void;
45
+ onOpened(): void;
46
+ onClosed(): void;
47
+ onSelected(value: MatAutocompleteSelectedEvent): void;
48
+ onEnteredValue(value: string): void;
49
+ findSelection(selection: string): any;
50
+ private _filter;
51
+ static ɵfac: i0.ɵɵFactoryDeclaration<FilterSelectionInputComponent, never>;
52
+ static ɵcmp: i0.ɵɵComponentDeclaration<FilterSelectionInputComponent, "app-filter-selection-input", never, { "data": { "alias": "data"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "forceSelection": { "alias": "forceSelection"; "required": false; }; }, { "selected": "selected"; }, never, never, false, never>;
53
+ }
@@ -0,0 +1,26 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./filter-demo/filter-demo.component";
3
+ import * as i2 from "./filter-selection-input/filter-selection-input.component";
4
+ import * as i3 from "@angular/common";
5
+ import * as i4 from "@angular/forms";
6
+ import * as i5 from "@angular/material/slider";
7
+ import * as i6 from "@angular/material/button";
8
+ import * as i7 from "@angular/material/icon";
9
+ import * as i8 from "@angular/material/form-field";
10
+ import * as i9 from "@angular/material/toolbar";
11
+ import * as i10 from "@angular/material/checkbox";
12
+ import * as i11 from "@angular/material/menu";
13
+ import * as i12 from "@angular/material/button-toggle";
14
+ import * as i13 from "@angular/material/divider";
15
+ import * as i14 from "@angular/material/radio";
16
+ import * as i15 from "@angular/material/input";
17
+ import * as i16 from "@angular/material/autocomplete";
18
+ import * as i17 from "./pipes/remove-underscore.pipe";
19
+ import * as i18 from "@angular/material/select";
20
+ import * as i19 from "@angular/material/core";
21
+ import * as i20 from "@angular/material/slide-toggle";
22
+ export declare class FilterSelectionInputModule {
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<FilterSelectionInputModule, never>;
24
+ static ɵmod: i0.ɵɵNgModuleDeclaration<FilterSelectionInputModule, [typeof i1.FilterSelectionDemoComponent, typeof i2.FilterSelectionInputComponent], [typeof i3.CommonModule, typeof i4.FormsModule, typeof i4.ReactiveFormsModule, typeof i5.MatSliderModule, typeof i6.MatButtonModule, typeof i7.MatIconModule, typeof i8.MatFormFieldModule, typeof i9.MatToolbarModule, typeof i10.MatCheckboxModule, typeof i11.MatMenuModule, typeof i12.MatButtonToggleModule, typeof i13.MatDividerModule, typeof i14.MatRadioModule, typeof i15.MatInputModule, typeof i16.MatAutocompleteModule, typeof i17.RemoveUnderscorePipe, typeof i18.MatSelectModule, typeof i19.MatOptionModule, typeof i20.MatSlideToggleModule], [typeof i1.FilterSelectionDemoComponent, typeof i2.FilterSelectionInputComponent]>;
25
+ static ɵinj: i0.ɵɵInjectorDeclaration<FilterSelectionInputModule>;
26
+ }
@@ -0,0 +1,2 @@
1
+ export * from './selection-basic.model';
2
+ export * from './selection-item.model';