ngx-dropdown-list 1.2.0 → 21.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/{fesm2020 → fesm2022}/ngx-dropdown-list.mjs +783 -721
  2. package/fesm2022/ngx-dropdown-list.mjs.map +1 -0
  3. package/ngx-dropdown-list-21.0.2.tgz +0 -0
  4. package/package.json +10 -18
  5. package/{src/ngx-dropdown-list/dropdown-list.component.d.ts → types/ngx-dropdown-list.d.ts} +109 -106
  6. package/esm2020/ngx-dropdown-list.mjs +0 -5
  7. package/esm2020/public_api.mjs +0 -2
  8. package/esm2020/src/ngx-dropdown-list/anchor/anchor.component.mjs +0 -149
  9. package/esm2020/src/ngx-dropdown-list/dropdown/dropdown.component.mjs +0 -252
  10. package/esm2020/src/ngx-dropdown-list/dropdown-list.component.mjs +0 -233
  11. package/esm2020/src/ngx-dropdown-list/dropdown-list.module.mjs +0 -38
  12. package/esm2020/src/ngx-dropdown-list/filter/input-filter.component.mjs +0 -44
  13. package/esm2020/src/ngx-dropdown-list/group-item/group-item.component.mjs +0 -25
  14. package/esm2020/src/ngx-dropdown-list/index.mjs +0 -3
  15. package/esm2020/src/ngx-dropdown-list/item/item.component.mjs +0 -77
  16. package/esm2020/src/ngx-dropdown-list/types/index.mjs +0 -3
  17. package/esm2020/src/ngx-dropdown-list/types/selection-group-items.types.mjs +0 -2
  18. package/esm2020/src/ngx-dropdown-list/types/selection-item.types.mjs +0 -2
  19. package/esm2020/src/ngx-dropdown-list/utils/util.mjs +0 -59
  20. package/fesm2015/ngx-dropdown-list.mjs +0 -854
  21. package/fesm2015/ngx-dropdown-list.mjs.map +0 -1
  22. package/fesm2020/ngx-dropdown-list.mjs.map +0 -1
  23. package/ngx-dropdown-list.d.ts +0 -5
  24. package/public_api.d.ts +0 -1
  25. package/src/ngx-dropdown-list/anchor/anchor.component.d.ts +0 -85
  26. package/src/ngx-dropdown-list/dropdown/dropdown.component.d.ts +0 -120
  27. package/src/ngx-dropdown-list/dropdown-list.module.d.ts +0 -14
  28. package/src/ngx-dropdown-list/filter/input-filter.component.d.ts +0 -26
  29. package/src/ngx-dropdown-list/group-item/group-item.component.d.ts +0 -14
  30. package/src/ngx-dropdown-list/index.d.ts +0 -2
  31. package/src/ngx-dropdown-list/item/item.component.d.ts +0 -43
  32. package/src/ngx-dropdown-list/types/index.d.ts +0 -2
  33. package/src/ngx-dropdown-list/types/selection-group-items.types.d.ts +0 -8
  34. package/src/ngx-dropdown-list/types/selection-item.types.d.ts +0 -9
  35. package/src/ngx-dropdown-list/utils/util.d.ts +0 -21
@@ -1,252 +0,0 @@
1
- import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
- import { clearAllSelection, getFirstSelectedItem, hasGroup, stopPropagationAndDefault } from '../utils/util';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../filter/input-filter.component";
5
- import * as i2 from "../group-item/group-item.component";
6
- import * as i3 from "../item/item.component";
7
- import * as i4 from "@angular/common";
8
- export class DropdownComponent {
9
- constructor() {
10
- /**
11
- * bind to [checkbox], the flag for multi-select (checkbox) mode.
12
- */
13
- this.checkbox = false;
14
- /**
15
- * bind to [filterBox] for displaying the filter input text box
16
- */
17
- this.filterBox = false;
18
- /**
19
- * bind to [allowClear] for enabling the clearance (clearance is not avaiable when checkbox is enabled)
20
- */
21
- this.allowClear = true;
22
- /**
23
- * bind to [formatNumber] for show formatted number text
24
- */
25
- this.formatNumber = false;
26
- /**
27
- * for 2-way binding of [selectedValue]
28
- */
29
- this.selectedValueChange = new EventEmitter(true);
30
- /**
31
- * [selectionChange] event that will be triggered when changing of the selection
32
- */
33
- this.selectionChange = new EventEmitter(true);
34
- /**
35
- * [dropdownBlur] event that will be triggered with (blur) of dropdown
36
- */
37
- this.dropdownBlur = new EventEmitter();
38
- /**
39
- * [itemClick] event that will be triggered when clicking the option of dropdown
40
- */
41
- this.itemClick = new EventEmitter();
42
- /**
43
- * flag of clicking dropdown. It's to prevent (blur) of dropdown from happening in checkbox mode.
44
- */
45
- this._clickedItems = false;
46
- }
47
- ngOnChanges(changes) {
48
- if (changes.items) {
49
- this._checkSelectionChange(changes.items.previousValue, changes.items.currentValue);
50
- }
51
- }
52
- /**
53
- * triggered when clicking the dropdown
54
- */
55
- onItemsClick(event) {
56
- if (event.offsetX > (event.target.clientWidth + event.target.clientLeft)) {
57
- stopPropagationAndDefault(event);
58
- return;
59
- }
60
- // should ignore clicking on filter
61
- if (this.checkbox && event.target.type !== 'text') {
62
- this._clickedItems = true;
63
- }
64
- }
65
- /**
66
- * triggered when clicking the item
67
- */
68
- onItemClick(currentItem) {
69
- if (!this.checkbox) {
70
- this.selectedValue = this._getItemValue(currentItem); // currentItem.value != null ? currentItem.value : currentItem.text;
71
- clearAllSelection(this.items);
72
- // set the selection of current one
73
- currentItem.selected = true;
74
- this.itemClick.emit(currentItem);
75
- this._onSelectionChange(this.selectedValue);
76
- }
77
- }
78
- /**
79
- * triggers with (blur) event of filter input box
80
- */
81
- onFilterTextBlur(event) {
82
- this.dropdownBlur.emit(event);
83
- }
84
- /**
85
- * triggers with (blur) event of dropdown
86
- */
87
- onItemsBlur(event) {
88
- if (this.checkbox) {
89
- if (this._clickedItems) {
90
- // in checkbox mode, this blur event will be ignored when clicking the dropdown (check the checkbox)
91
- event.target.focus();
92
- this._clickedItems = false;
93
- return;
94
- }
95
- }
96
- this.dropdownBlur.emit(event);
97
- }
98
- /**
99
- * toggle the selection when checking status changed (in checkbox mode)
100
- */
101
- toggleSelection(item) {
102
- item.selected = !item.selected;
103
- this.selectionChange.emit(this._getItemValue(item)); // item.value != null ? item.value : item.text);
104
- }
105
- /**
106
- * items values list after applying the filter
107
- */
108
- get itemsValues() {
109
- let filter;
110
- if (this.filterValue) {
111
- filter = this.filterValue.toUpperCase();
112
- }
113
- if (filter == null) {
114
- return this.items;
115
- }
116
- if (!this.items || this.items.length === 0) {
117
- return [];
118
- }
119
- if (hasGroup(this.items)) {
120
- const items = [];
121
- this.items.forEach(groupItem => {
122
- if (groupItem.group != null && groupItem.group.toString().toUpperCase().includes(filter)) {
123
- // if groupItem contains the filters, the groupItem needs to be displayed as well
124
- items.push(groupItem);
125
- }
126
- else {
127
- const filteredItems = groupItem.items.filter(item => item.text != null && item.text.toString().toUpperCase().includes(filter));
128
- if (filteredItems && filteredItems.length > 0) {
129
- items.push({ group: groupItem.group, items: filteredItems });
130
- }
131
- }
132
- });
133
- return items;
134
- }
135
- else {
136
- return this.items.filter(item => (item.text != null && item.text.toString().toUpperCase().includes(filter)));
137
- }
138
- }
139
- /**
140
- * options CSS class
141
- */
142
- get optionsClass() {
143
- if (this.filterBox && !this.checkbox) {
144
- return 'options with-filter';
145
- }
146
- else {
147
- return 'options no-filter';
148
- }
149
- }
150
- /**
151
- * get item value. Return text if value is not available
152
- */
153
- _getItemValue(item) {
154
- return item ? item.value != null ? item.value : item.text : undefined;
155
- }
156
- /**
157
- * selection changed, emits events: (selectedValueChange) and (selectionChange);
158
- */
159
- _onSelectionChange(value) {
160
- this.selectedValueChange.emit(value);
161
- this.selectionChange.emit(value);
162
- }
163
- /**
164
- * check whether the selection is changed. Emits relative events when if changed.
165
- */
166
- _checkSelectionChange(previousValue, currentValue) {
167
- const curSelectedItem = getFirstSelectedItem(currentValue);
168
- const lastSelectedItem = getFirstSelectedItem(previousValue);
169
- const curSelectedItemId = curSelectedItem ? curSelectedItem.id : undefined;
170
- const lastSelectedItemId = lastSelectedItem ? lastSelectedItem.id : undefined;
171
- if (curSelectedItemId !== lastSelectedItemId && !this.checkbox) {
172
- this._onSelectionChange(this._getItemValue(curSelectedItem));
173
- }
174
- }
175
- }
176
- DropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
177
- DropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: DropdownComponent, selector: "dropdown", inputs: { placeHolder: "placeHolder", items: "items", checkbox: "checkbox", selectedValue: "selectedValue", filterBox: "filterBox", suffixText: "suffixText", disabled: "disabled", allowClear: "allowClear", formatNumber: "formatNumber" }, outputs: { selectedValueChange: "selectedValueChange", selectionChange: "selectionChange", dropdownBlur: "dropdownBlur", itemClick: "itemClick" }, viewQueries: [{ propertyName: "dropdownRef", first: true, predicate: ["dropdown"], descendants: true, read: ElementRef }, { propertyName: "filterInputRef", first: true, predicate: ["filterInput"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: `
178
- <span #dropdown class="dropdown" tabindex="3" (mousedown)="onItemsClick($event)" (blur)="onItemsBlur($event)" *ngIf="!disabled" >
179
- <input-filter #filterInput tabindex="4" *ngIf="filterBox && !checkbox" [(filterValue)]="filterValue" (inputFilterBlur)="onFilterTextBlur($event)"></input-filter>
180
- <span #selectionOptions [ngClass]="optionsClass">
181
- <ng-container *ngFor="let item of itemsValues" >
182
- <ng-container *ngIf="item && item.group">
183
- <group-item [item]="item"></group-item>
184
- <item *ngFor="let subItem of item.items" (itemClick)="onItemClick(subItem)" (checkStatusChange)="toggleSelection(subItem)"
185
- [item]="subItem" [checkbox]="checkbox" [formatNumber]="formatNumber" [suffixText]="suffixText">
186
- </item>
187
- </ng-container>
188
- <ng-container *ngIf="item && !item.group">
189
- <item (itemClick)="onItemClick(item)" (checkStatusChange)="toggleSelection(item)"
190
- [item]="item" [checkbox]="checkbox" [formatNumber]="formatNumber" [suffixText]="suffixText">
191
- </item>
192
- </ng-container>
193
- </ng-container>
194
- </span>
195
- </span>
196
- `, isInline: true, styles: ["*,*:before,*:after{font-size:inherit;font-weight:inherit;font-family:inherit;box-sizing:inherit;background:inherit}.dropdown{width:100%;padding:0;display:none;margin:0;border:1px solid #66afe9;border-top:none;border-bottom:none;border-top-right-radius:0;border-top-left-radius:0;box-sizing:border-box;position:relative;z-index:999}.dropdown:focus{outline:0}.dropdown .options{width:calc(100% + 2px);left:0;box-sizing:border-box;background:white;position:absolute;max-height:228px;overflow-y:auto;overflow-x:hidden;border:1px solid #66afe9;border-top:none;border-bottom-right-radius:4px;border-bottom-left-radius:4px;margin-left:-1px;margin-right:-1px}.dropdown .with-filter{top:32px}.dropdown .no-filter{top:0}\n"], components: [{ type: i1.InputFilterComponent, selector: "input-filter", inputs: ["filterValue"], outputs: ["inputFilterBlur", "filterValueChange"] }, { type: i2.GroupItemComponent, selector: "group-item", inputs: ["item"] }, { type: i3.ItemComponent, selector: "item", inputs: ["checkbox", "item", "formatNumber", "suffixText"], outputs: ["itemClick", "checkStatusChange"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
197
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DropdownComponent, decorators: [{
198
- type: Component,
199
- args: [{ selector: 'dropdown', template: `
200
- <span #dropdown class="dropdown" tabindex="3" (mousedown)="onItemsClick($event)" (blur)="onItemsBlur($event)" *ngIf="!disabled" >
201
- <input-filter #filterInput tabindex="4" *ngIf="filterBox && !checkbox" [(filterValue)]="filterValue" (inputFilterBlur)="onFilterTextBlur($event)"></input-filter>
202
- <span #selectionOptions [ngClass]="optionsClass">
203
- <ng-container *ngFor="let item of itemsValues" >
204
- <ng-container *ngIf="item && item.group">
205
- <group-item [item]="item"></group-item>
206
- <item *ngFor="let subItem of item.items" (itemClick)="onItemClick(subItem)" (checkStatusChange)="toggleSelection(subItem)"
207
- [item]="subItem" [checkbox]="checkbox" [formatNumber]="formatNumber" [suffixText]="suffixText">
208
- </item>
209
- </ng-container>
210
- <ng-container *ngIf="item && !item.group">
211
- <item (itemClick)="onItemClick(item)" (checkStatusChange)="toggleSelection(item)"
212
- [item]="item" [checkbox]="checkbox" [formatNumber]="formatNumber" [suffixText]="suffixText">
213
- </item>
214
- </ng-container>
215
- </ng-container>
216
- </span>
217
- </span>
218
- `, styles: ["*,*:before,*:after{font-size:inherit;font-weight:inherit;font-family:inherit;box-sizing:inherit;background:inherit}.dropdown{width:100%;padding:0;display:none;margin:0;border:1px solid #66afe9;border-top:none;border-bottom:none;border-top-right-radius:0;border-top-left-radius:0;box-sizing:border-box;position:relative;z-index:999}.dropdown:focus{outline:0}.dropdown .options{width:calc(100% + 2px);left:0;box-sizing:border-box;background:white;position:absolute;max-height:228px;overflow-y:auto;overflow-x:hidden;border:1px solid #66afe9;border-top:none;border-bottom-right-radius:4px;border-bottom-left-radius:4px;margin-left:-1px;margin-right:-1px}.dropdown .with-filter{top:32px}.dropdown .no-filter{top:0}\n"] }]
219
- }], propDecorators: { dropdownRef: [{
220
- type: ViewChild,
221
- args: ['dropdown', { read: ElementRef }]
222
- }], filterInputRef: [{
223
- type: ViewChild,
224
- args: ['filterInput', { read: ElementRef }]
225
- }], placeHolder: [{
226
- type: Input
227
- }], items: [{
228
- type: Input
229
- }], checkbox: [{
230
- type: Input
231
- }], selectedValue: [{
232
- type: Input
233
- }], filterBox: [{
234
- type: Input
235
- }], suffixText: [{
236
- type: Input
237
- }], disabled: [{
238
- type: Input
239
- }], allowClear: [{
240
- type: Input
241
- }], formatNumber: [{
242
- type: Input
243
- }], selectedValueChange: [{
244
- type: Output
245
- }], selectionChange: [{
246
- type: Output
247
- }], dropdownBlur: [{
248
- type: Output
249
- }], itemClick: [{
250
- type: Output
251
- }] } });
252
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25neC1kcm9wZG93bi1saXN0L2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBaUIsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUseUJBQXlCLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7OztBQTJCM0csTUFBTSxPQUFPLGlCQUFpQjtJQXpCOUI7UUEwQ0U7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBSzFCOztXQUVHO1FBQ00sY0FBUyxHQUFHLEtBQUssQ0FBQztRQVMzQjs7V0FFRztRQUNNLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDM0I7O1dBRUc7UUFDTSxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUM5Qjs7V0FFRztRQUNPLHdCQUFtQixHQUFHLElBQUksWUFBWSxDQUFTLElBQUksQ0FBQyxDQUFDO1FBQy9EOztXQUVHO1FBQ08sb0JBQWUsR0FBRyxJQUFJLFlBQVksQ0FBTSxJQUFJLENBQUMsQ0FBQztRQUN4RDs7V0FFRztRQUNPLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqRDs7V0FFRztRQUNPLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBSzlDOztXQUVHO1FBQ0ssa0JBQWEsR0FBRyxLQUFLLENBQUM7S0F5SS9CO0lBdklDLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDakIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxLQUFL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RTtnQkFJSyxjQUFjO3NCQUE3RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSXJDLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSUcsS0FBSztzQkFBYixLQUFLO2dCQUlHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsYUFBYTtzQkFBckIsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxVQUFVO3NCQUFsQixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUksbUJBQW1CO3NCQUE1QixNQUFNO2dCQUlHLGVBQWU7c0JBQXhCLE1BQU07Z0JBSUcsWUFBWTtzQkFBckIsTUFBTTtnQkFJRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge2NsZWFyQWxsU2VsZWN0aW9uLCBnZXRGaXJzdFNlbGVjdGVkSXRlbSwgaGFzR3JvdXAsIHN0b3BQcm9wYWdhdGlvbkFuZERlZmF1bHR9IGZyb20gJy4uL3V0aWxzL3V0aWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkcm9wZG93bicsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxzcGFuICNkcm9wZG93biBjbGFzcz1cImRyb3Bkb3duXCIgdGFiaW5kZXg9XCIzXCIgKG1vdXNlZG93bik9XCJvbkl0ZW1zQ2xpY2soJGV2ZW50KVwiIChibHVyKT1cIm9uSXRlbXNCbHVyKCRldmVudClcIiAqbmdJZj1cIiFkaXNhYmxlZFwiID5cclxuICAgICAgPGlucHV0LWZpbHRlciAjZmlsdGVySW5wdXQgdGFiaW5kZXg9XCI0XCIgKm5nSWY9XCJmaWx0ZXJCb3ggJiYgIWNoZWNrYm94XCIgWyhmaWx0ZXJWYWx1ZSldPVwiZmlsdGVyVmFsdWVcIiAoaW5wdXRGaWx0ZXJCbHVyKT1cIm9uRmlsdGVyVGV4dEJsdXIoJGV2ZW50KVwiPjwvaW5wdXQtZmlsdGVyPlxyXG4gICAgICA8c3BhbiAjc2VsZWN0aW9uT3B0aW9ucyBbbmdDbGFzc109XCJvcHRpb25zQ2xhc3NcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zVmFsdWVzXCIgPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0gJiYgaXRlbS5ncm91cFwiPlxyXG4gICAgICAgICAgICA8Z3JvdXAtaXRlbSBbaXRlbV09XCJpdGVtXCI+PC9ncm91cC1pdGVtPlxyXG4gICAgICAgICAgICA8aXRlbSAqbmdGb3I9XCJsZXQgc3ViSXRlbSBvZiBpdGVtLml0ZW1zXCIgKGl0ZW1DbGljayk9XCJvbkl0ZW1DbGljayhzdWJJdGVtKVwiIChjaGVja1N0YXR1c0NoYW5nZSk9XCJ0b2dnbGVTZWxlY3Rpb24oc3ViSXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICBbaXRlbV09XCJzdWJJdGVtXCIgW2NoZWNrYm94XT1cImNoZWNrYm94XCIgW2Zvcm1hdE51bWJlcl09XCJmb3JtYXROdW1iZXJcIiBbc3VmZml4VGV4dF09XCJzdWZmaXhUZXh0XCI+XHJcbiAgICAgICAgICAgIDwvaXRlbT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0gJiYgIWl0ZW0uZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGl0ZW0gKGl0ZW1DbGljayk9XCJvbkl0ZW1DbGljayhpdGVtKVwiIChjaGVja1N0YXR1c0NoYW5nZSk9XCJ0b2dnbGVTZWxlY3Rpb24oaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCIgW2NoZWNrYm94XT1cImNoZWNrYm94XCIgW2Zvcm1hdE51bWJlcl09XCJmb3JtYXROdW1iZXJcIiBbc3VmZml4VGV4dF09XCJzdWZmaXhUZXh0XCI+XHJcbiAgICAgICAgICAgIDwvaXRlbT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgYCxcclxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIC8qKlxyXG4gICAqIENoaWxkIGVsZW1lbnQgcmVmZXJlbmNlIG9mIGRyb3Bkb3duXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZHJvcGRvd25SZWY6IEVsZW1lbnRSZWY7XHJcbiAgLyoqXHJcbiAgICogQ2hpbGQgZWxlbWVudCByZWZlcmVuY2Ugb2YgZmlsdGVyIGlucHV0IHRleHRcclxuICAgKi9cclxuICBAVmlld0NoaWxkKCdmaWx0ZXJJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBmaWx0ZXJJbnB1dFJlZjogRWxlbWVudFJlZjtcclxuICAvKipcclxuICAgKiBiaW5kIHRvIFtwbGFjZUhvbGRlcl0gZm9yIGRpc3BsYXlpbmcgdGhlIHBsYWNlIGhvbGRlciBzdHJpbmcgb2YgdGhlIGFuY2hvci5cclxuICAgKi9cclxuICBASW5wdXQoKSBwbGFjZUhvbGRlcjogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIGJpbmQgdG8gW2l0ZW1zXSBmb3IgdGhlIG9wdGlvbnMvZ3JvdXBzIGluIHRoZSBkcm9wZG93blxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGl0ZW1zOiBhbnlbXTtcclxuICAvKipcclxuICAgKiBiaW5kIHRvIFtjaGVja2JveF0sIHRoZSBmbGFnIGZvciBtdWx0aS1zZWxlY3QgKGNoZWNrYm94KSBtb2RlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGNoZWNrYm94ID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbc2VsZWN0ZWRWYWx1ZV0gZm9yIHRoZSB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9uIGZyb20gZHJvcGRvd25cclxuICAgKi9cclxuICBASW5wdXQoKSBzZWxlY3RlZFZhbHVlOiBhbnk7XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbZmlsdGVyQm94XSBmb3IgZGlzcGxheWluZyB0aGUgZmlsdGVyIGlucHV0IHRleHQgYm94XHJcbiAgICovXHJcbiAgQElucHV0KCkgZmlsdGVyQm94ID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbc3VmZml4VGV4dF0gZm9yIGRpc3BsYXlpbmcgdGhlIHN1ZmZpeCBvZiB0aGUgc2VsZWN0ZWQgdGV4dCBvZiBhbmNob3JcclxuICAgKi9cclxuICBASW5wdXQoKSBzdWZmaXhUZXh0OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbZGlzYWJsZWRdIGZvciBkaXNhYmxpbmcgdGhlIGRyb3Bkb3duXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbYWxsb3dDbGVhcl0gZm9yIGVuYWJsaW5nIHRoZSBjbGVhcmFuY2UgKGNsZWFyYW5jZSBpcyBub3QgYXZhaWFibGUgd2hlbiBjaGVja2JveCBpcyBlbmFibGVkKVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGFsbG93Q2xlYXIgPSB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIGJpbmQgdG8gW2Zvcm1hdE51bWJlcl0gZm9yIHNob3cgZm9ybWF0dGVkIG51bWJlciB0ZXh0XHJcbiAgICovXHJcbiAgQElucHV0KCkgZm9ybWF0TnVtYmVyID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogZm9yIDItd2F5IGJpbmRpbmcgb2YgW3NlbGVjdGVkVmFsdWVdXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4odHJ1ZSk7XHJcbiAgLyoqXHJcbiAgICogW3NlbGVjdGlvbkNoYW5nZV0gZXZlbnQgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIGNoYW5naW5nIG9mIHRoZSBzZWxlY3Rpb25cclxuICAgKi9cclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KHRydWUpO1xyXG4gIC8qKlxyXG4gICAqIFtkcm9wZG93bkJsdXJdIGV2ZW50IHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgd2l0aCAoYmx1cikgb2YgZHJvcGRvd25cclxuICAgKi9cclxuICBAT3V0cHV0KCkgZHJvcGRvd25CbHVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgLyoqXHJcbiAgICogW2l0ZW1DbGlja10gZXZlbnQgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIGNsaWNraW5nIHRoZSBvcHRpb24gb2YgZHJvcGRvd25cclxuICAgKi9cclxuICBAT3V0cHV0KCkgaXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgLyoqXHJcbiAgICogZmlsdGVyIHZhbHVlXHJcbiAgICovXHJcbiAgZmlsdGVyVmFsdWU6IHN0cmluZztcclxuICAvKipcclxuICAgKiBmbGFnIG9mIGNsaWNraW5nIGRyb3Bkb3duLiBJdCdzIHRvIHByZXZlbnQgKGJsdXIpIG9mIGRyb3Bkb3duIGZyb20gaGFwcGVuaW5nIGluIGNoZWNrYm94IG1vZGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfY2xpY2tlZEl0ZW1zID0gZmFsc2U7XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzLml0ZW1zKSB7XHJcbiAgICAgIHRoaXMuX2NoZWNrU2VsZWN0aW9uQ2hhbmdlKGNoYW5nZXMuaXRlbXMucHJldmlvdXNWYWx1ZSwgY2hhbmdlcy5pdGVtcy5jdXJyZW50VmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdHJpZ2dlcmVkIHdoZW4gY2xpY2tpbmcgdGhlIGRyb3Bkb3duXHJcbiAgICovXHJcbiAgb25JdGVtc0NsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChldmVudC5vZmZzZXRYID4gKGV2ZW50LnRhcmdldC5jbGllbnRXaWR0aCArIGV2ZW50LnRhcmdldC5jbGllbnRMZWZ0KSkge1xyXG4gICAgICBzdG9wUHJvcGFnYXRpb25BbmREZWZhdWx0KGV2ZW50KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gc2hvdWxkIGlnbm9yZSBjbGlja2luZyBvbiBmaWx0ZXJcclxuICAgIGlmICh0aGlzLmNoZWNrYm94ICYmIGV2ZW50LnRhcmdldC50eXBlICE9PSAndGV4dCcpIHtcclxuICAgICAgdGhpcy5fY2xpY2tlZEl0ZW1zID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRyaWdnZXJlZCB3aGVuIGNsaWNraW5nIHRoZSBpdGVtXHJcbiAgICovXHJcbiAgb25JdGVtQ2xpY2soY3VycmVudEl0ZW0pOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jaGVja2JveCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLl9nZXRJdGVtVmFsdWUoY3VycmVudEl0ZW0pOyAvLyBjdXJyZW50SXRlbS52YWx1ZSAhPSBudWxsID8gY3VycmVudEl0ZW0udmFsdWUgOiBjdXJyZW50SXRlbS50ZXh0O1xyXG4gICAgICBjbGVhckFsbFNlbGVjdGlvbih0aGlzLml0ZW1zKTtcclxuICAgICAgLy8gc2V0IHRoZSBzZWxlY3Rpb24gb2YgY3VycmVudCBvbmVcclxuICAgICAgY3VycmVudEl0ZW0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLml0ZW1DbGljay5lbWl0KGN1cnJlbnRJdGVtKTtcclxuICAgICAgdGhpcy5fb25TZWxlY3Rpb25DaGFuZ2UodGhpcy5zZWxlY3RlZFZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRyaWdnZXJzIHdpdGggKGJsdXIpIGV2ZW50IG9mIGZpbHRlciBpbnB1dCBib3hcclxuICAgKi9cclxuICBvbkZpbHRlclRleHRCbHVyKGV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmRyb3Bkb3duQmx1ci5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRyaWdnZXJzIHdpdGggKGJsdXIpIGV2ZW50IG9mIGRyb3Bkb3duXHJcbiAgICovXHJcbiAgb25JdGVtc0JsdXIoZXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNoZWNrYm94KSB7XHJcbiAgICAgIGlmICh0aGlzLl9jbGlja2VkSXRlbXMpIHtcclxuICAgICAgICAvLyBpbiBjaGVja2JveCBtb2RlLCB0aGlzIGJsdXIgZXZlbnQgd2lsbCBiZSBpZ25vcmVkIHdoZW4gY2xpY2tpbmcgdGhlIGRyb3Bkb3duIChjaGVjayB0aGUgY2hlY2tib3gpXHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LmZvY3VzKCk7XHJcbiAgICAgICAgdGhpcy5fY2xpY2tlZEl0ZW1zID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmRyb3Bkb3duQmx1ci5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRvZ2dsZSB0aGUgc2VsZWN0aW9uIHdoZW4gY2hlY2tpbmcgc3RhdHVzIGNoYW5nZWQgKGluIGNoZWNrYm94IG1vZGUpXHJcbiAgICovXHJcbiAgdG9nZ2xlU2VsZWN0aW9uKGl0ZW06IHtpZDogc3RyaW5nLCB2YWx1ZT86IGFueSwgdGV4dDogYW55LCBzZWxlY3RlZD86IGJvb2xlYW59KTogdm9pZCB7XHJcbiAgICBpdGVtLnNlbGVjdGVkID0gIWl0ZW0uc2VsZWN0ZWQ7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuX2dldEl0ZW1WYWx1ZShpdGVtKSk7IC8vIGl0ZW0udmFsdWUgIT0gbnVsbCA/IGl0ZW0udmFsdWUgOiBpdGVtLnRleHQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogaXRlbXMgdmFsdWVzIGxpc3QgYWZ0ZXIgYXBwbHlpbmcgdGhlIGZpbHRlclxyXG4gICAqL1xyXG4gIGdldCBpdGVtc1ZhbHVlcygpOiBhbnlbXSB7XHJcbiAgICBsZXQgZmlsdGVyO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyVmFsdWUpIHtcclxuICAgICAgZmlsdGVyID0gdGhpcy5maWx0ZXJWYWx1ZS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaWx0ZXIgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pdGVtcztcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5pdGVtcyB8fCB0aGlzLml0ZW1zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICBpZiAoaGFzR3JvdXAodGhpcy5pdGVtcykpIHtcclxuICAgICAgY29uc3QgaXRlbXMgPSBbXTtcclxuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGdyb3VwSXRlbSA9PiB7XHJcbiAgICAgICAgaWYgKGdyb3VwSXRlbS5ncm91cCAhPSBudWxsICYmIGdyb3VwSXRlbS5ncm91cC50b1N0cmluZygpLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyKSkge1xyXG4gICAgICAgICAgLy8gaWYgZ3JvdXBJdGVtIGNvbnRhaW5zIHRoZSBmaWx0ZXJzLCB0aGUgZ3JvdXBJdGVtIG5lZWRzIHRvIGJlIGRpc3BsYXllZCBhcyB3ZWxsXHJcbiAgICAgICAgICBpdGVtcy5wdXNoKGdyb3VwSXRlbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSBncm91cEl0ZW0uaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50ZXh0ICE9IG51bGwgJiYgaXRlbS50ZXh0LnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIpKTtcclxuICAgICAgICAgIGlmIChmaWx0ZXJlZEl0ZW1zICYmIGZpbHRlcmVkSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtncm91cDogZ3JvdXBJdGVtLmdyb3VwLCBpdGVtczogZmlsdGVyZWRJdGVtc30pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IChpdGVtLnRleHQgIT0gbnVsbCAmJiBpdGVtLnRleHQudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlcikpKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogb3B0aW9ucyBDU1MgY2xhc3NcclxuICAgKi9cclxuICBnZXQgb3B0aW9uc0NsYXNzKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJCb3ggJiYgIXRoaXMuY2hlY2tib3gpIHtcclxuICAgICAgcmV0dXJuICdvcHRpb25zIHdpdGgtZmlsdGVyJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnb3B0aW9ucyBuby1maWx0ZXInO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IGl0ZW0gdmFsdWUuIFJldHVybiB0ZXh0IGlmIHZhbHVlIGlzIG5vdCBhdmFpbGFibGVcclxuICAgKi9cclxuICBwcml2YXRlIF9nZXRJdGVtVmFsdWUoaXRlbSk6IGFueSB7XHJcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0udmFsdWUgIT0gbnVsbCA/IGl0ZW0udmFsdWUgOiBpdGVtLnRleHQgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3Rpb24gY2hhbmdlZCwgZW1pdHMgZXZlbnRzOiAoc2VsZWN0ZWRWYWx1ZUNoYW5nZSkgYW5kIChzZWxlY3Rpb25DaGFuZ2UpO1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX29uU2VsZWN0aW9uQ2hhbmdlKHZhbHVlKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGNoZWNrIHdoZXRoZXIgdGhlIHNlbGVjdGlvbiBpcyBjaGFuZ2VkLiBFbWl0cyByZWxhdGl2ZSBldmVudHMgd2hlbiBpZiBjaGFuZ2VkLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2NoZWNrU2VsZWN0aW9uQ2hhbmdlKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSkge1xyXG4gICAgY29uc3QgY3VyU2VsZWN0ZWRJdGVtID0gZ2V0Rmlyc3RTZWxlY3RlZEl0ZW0oY3VycmVudFZhbHVlKTtcclxuICAgIGNvbnN0IGxhc3RTZWxlY3RlZEl0ZW0gPSBnZXRGaXJzdFNlbGVjdGVkSXRlbShwcmV2aW91c1ZhbHVlKTtcclxuICAgIGNvbnN0IGN1clNlbGVjdGVkSXRlbUlkID0gY3VyU2VsZWN0ZWRJdGVtID8gY3VyU2VsZWN0ZWRJdGVtLmlkIDogdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgbGFzdFNlbGVjdGVkSXRlbUlkID0gbGFzdFNlbGVjdGVkSXRlbSA/IGxhc3RTZWxlY3RlZEl0ZW0uaWQgOiB1bmRlZmluZWQ7XHJcbiAgICBpZiAoY3VyU2VsZWN0ZWRJdGVtSWQgIT09IGxhc3RTZWxlY3RlZEl0ZW1JZCAmJiAhdGhpcy5jaGVja2JveCkge1xyXG4gICAgICB0aGlzLl9vblNlbGVjdGlvbkNoYW5nZSh0aGlzLl9nZXRJdGVtVmFsdWUoY3VyU2VsZWN0ZWRJdGVtKSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,233 +0,0 @@
1
- import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
- import { clearAllSelection, getFirstSelectedItem, stopPropagationAndDefault } from './utils/util';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "./anchor/anchor.component";
5
- import * as i2 from "./dropdown/dropdown.component";
6
- export class DropdownListComponent {
7
- constructor() {
8
- /**
9
- * bind to [multiSelection], the flag for multi-select (checkbox) mode.
10
- */
11
- this.multiSelection = false;
12
- /**
13
- * bind to [filterBox] for displaying the filter input text box
14
- */
15
- this.filterBox = false;
16
- /**
17
- * bind to [allowClear] for enabling the clearance (clearance is not avaiable when checkbox is enabled)
18
- */
19
- this.allowClear = true;
20
- /**
21
- * bind to [formatNumber] for show formatted number text
22
- */
23
- this.formatNumber = false;
24
- /**
25
- * for 2-way binding of [selectedValue], using async event to
26
- * prevent "ExpressionChangedAfterItHasBeenCheckedError".
27
- */
28
- this.selectedValueChange = new EventEmitter(true);
29
- /**
30
- * [selectionChange] event that will be triggered when changing of the selection.
31
- * Using async event to prevent "ExpressionChangedAfterItHasBeenCheckedError".
32
- */
33
- this.selectionChange = new EventEmitter(true);
34
- /**
35
- * visibility flag of drop down
36
- */
37
- this.dropdownVisibility = false;
38
- }
39
- /**
40
- * current selected text
41
- */
42
- get selectedText() {
43
- if (!this.multiSelection) {
44
- const selectedItem = getFirstSelectedItem(this.items);
45
- return selectedItem ? selectedItem.text : undefined;
46
- }
47
- }
48
- /**
49
- * triggered with (selectionChange) event, emits (selectedValueChange) and (selectionChange)
50
- */
51
- onSelectionChange(event) {
52
- this.selectedValueChange.emit(event);
53
- this.selectionChange.emit(event);
54
- }
55
- /**
56
- * triggered with (anchorClick) event, controlling the "open" and "close" of the dropdown
57
- */
58
- onAnchorClick(event) {
59
- if (this.disabled) {
60
- stopPropagationAndDefault(event);
61
- return;
62
- }
63
- if (this._isSelectionOpen()) {
64
- this._hideItemList();
65
- }
66
- else {
67
- this._showItemsList();
68
- }
69
- stopPropagationAndDefault(event);
70
- }
71
- /**
72
- * triggered with (itemClick) event, closes the dropdown in non-checkbox mode
73
- */
74
- onItemClick() {
75
- if (!this.multiSelection) {
76
- this._hideItemList();
77
- }
78
- }
79
- /**
80
- * triggered with (clearanceClick) event, clearing all selections
81
- * and emits (selectedValueChange) and (selectionChange) event for empty value
82
- */
83
- onClearanceClick(event) {
84
- if (!this.multiSelection) {
85
- this.selectedValue = void 0;
86
- this.selectedValueChange.emit(undefined);
87
- this.selectionChange.emit(undefined);
88
- clearAllSelection(this.items);
89
- }
90
- stopPropagationAndDefault(event);
91
- }
92
- /**
93
- * triggered with (dropdownBlur) event, closes the dropdown
94
- */
95
- onItemsBlur() {
96
- if (this._isSelectionOpen()) {
97
- this._hideItemList();
98
- }
99
- }
100
- /**
101
- * close the dropdown
102
- */
103
- _hideItemList() {
104
- // hide the dropdown element (has some problem for using CSS directly, using this as a workaround)
105
- this._dropdownElement.classList.remove('visible');
106
- this._dropdownElement.style.display = 'none';
107
- this.dropdownVisibility = false;
108
- }
109
- /**
110
- * open the dropdown
111
- */
112
- _showItemsList() {
113
- // display the dropdown element (has some problem for using CSS directly, using this as a workaround)
114
- this._dropdownElement.classList.add('visible');
115
- this._dropdownElement.style.display = 'block';
116
- this.dropdownVisibility = true;
117
- // scrolling to the selected item
118
- if (this._selectedElement) {
119
- this._selectedElement.scrollIntoView({ behavior: 'auto', block: 'center' });
120
- }
121
- // setting the focus
122
- if (this.filterBox && !this.multiSelection) {
123
- this._filterInputElement.focus();
124
- }
125
- else {
126
- this._dropdownElement.focus();
127
- }
128
- }
129
- /**
130
- * visibility status of dropdown
131
- */
132
- _isSelectionOpen() {
133
- return this.dropdownVisibility;
134
- }
135
- /**
136
- * get the real dropdown element (for focusing and visibility controlling), the <span> not the <dropdown>
137
- */
138
- get _dropdownElement() {
139
- return this.dropdownRef ? this.dropdownRef.nativeElement ? this.dropdownRef.nativeElement.firstElementChild : null : null;
140
- }
141
- /**
142
- * get the real filter element (for focusing), the <input> not the <input-filter>
143
- */
144
- get _filterInputElement() {
145
- return this._dropdownElement ?
146
- this._dropdownElement.firstElementChild ? this._dropdownElement.firstElementChild.firstElementChild : null : null;
147
- }
148
- /**
149
- * get the HTMLElement of selected item, for doing (scrollIntoView) scrolling to the selected item
150
- */
151
- get _selectedElement() {
152
- const selectedItem = getFirstSelectedItem(this.items);
153
- return selectedItem ? document.getElementById(selectedItem.id) : undefined;
154
- }
155
- }
156
- DropdownListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DropdownListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
157
- DropdownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: DropdownListComponent, selector: "ngx-dropdown-list", inputs: { placeHolder: "placeHolder", items: "items", multiSelection: "multiSelection", selectedValue: "selectedValue", filterBox: "filterBox", suffixText: "suffixText", disabled: "disabled", allowClear: "allowClear", formatNumber: "formatNumber" }, outputs: { selectedValueChange: "selectedValueChange", selectionChange: "selectionChange" }, viewQueries: [{ propertyName: "dropdownRef", first: true, predicate: ["dropdown"], descendants: true, read: ElementRef }], ngImport: i0, template: `
158
- <span class="ngx-select">
159
- <anchor (anchorClick)="onAnchorClick($event)" (clearanceClick)="onClearanceClick($event)"
160
- [checkbox]="multiSelection"
161
- [formatNumber]="formatNumber"
162
- [suffixText]="suffixText"
163
- [placeHolder]="placeHolder"
164
- [allowClear]="allowClear"
165
- [openStatus]="dropdownVisibility"
166
- [selectedText]="selectedText"
167
- [disabled]="disabled">
168
- </anchor>
169
- <dropdown #dropdown (dropdownBlur) = "onItemsBlur()" (selectionChange)="onSelectionChange($event)"
170
- [items]="items"
171
- [checkbox]="multiSelection"
172
- [filterBox]="filterBox"
173
- [formatNumber]="formatNumber"
174
- [suffixText]="suffixText"
175
- [(selectedValue)]="selectedValue"
176
- (itemClick) = "onItemClick()"
177
- [disabled]="disabled">
178
- </dropdown>
179
- </span>
180
- `, isInline: true, styles: [":host *,:host *:before,:host *:after{font-size:inherit;font-weight:inherit;font-family:inherit;box-sizing:inherit;background:inherit}:host .ngx-select{border-radius:4px;font-size:14px;position:relative;display:inline-block;width:100%;height:34px;background:white;-webkit-user-select:none;user-select:none}\n"], components: [{ type: i1.AnchorComponent, selector: "anchor", inputs: ["placeHolder", "checkbox", "suffixText", "allowClear", "formatNumber", "selectedText", "openStatus", "disabled"], outputs: ["anchorClick", "clearanceClick"] }, { type: i2.DropdownComponent, selector: "dropdown", inputs: ["placeHolder", "items", "checkbox", "selectedValue", "filterBox", "suffixText", "disabled", "allowClear", "formatNumber"], outputs: ["selectedValueChange", "selectionChange", "dropdownBlur", "itemClick"] }] });
181
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DropdownListComponent, decorators: [{
182
- type: Component,
183
- args: [{ selector: 'ngx-dropdown-list', template: `
184
- <span class="ngx-select">
185
- <anchor (anchorClick)="onAnchorClick($event)" (clearanceClick)="onClearanceClick($event)"
186
- [checkbox]="multiSelection"
187
- [formatNumber]="formatNumber"
188
- [suffixText]="suffixText"
189
- [placeHolder]="placeHolder"
190
- [allowClear]="allowClear"
191
- [openStatus]="dropdownVisibility"
192
- [selectedText]="selectedText"
193
- [disabled]="disabled">
194
- </anchor>
195
- <dropdown #dropdown (dropdownBlur) = "onItemsBlur()" (selectionChange)="onSelectionChange($event)"
196
- [items]="items"
197
- [checkbox]="multiSelection"
198
- [filterBox]="filterBox"
199
- [formatNumber]="formatNumber"
200
- [suffixText]="suffixText"
201
- [(selectedValue)]="selectedValue"
202
- (itemClick) = "onItemClick()"
203
- [disabled]="disabled">
204
- </dropdown>
205
- </span>
206
- `, styles: [":host *,:host *:before,:host *:after{font-size:inherit;font-weight:inherit;font-family:inherit;box-sizing:inherit;background:inherit}:host .ngx-select{border-radius:4px;font-size:14px;position:relative;display:inline-block;width:100%;height:34px;background:white;-webkit-user-select:none;user-select:none}\n"] }]
207
- }], propDecorators: { dropdownRef: [{
208
- type: ViewChild,
209
- args: ['dropdown', { read: ElementRef }]
210
- }], placeHolder: [{
211
- type: Input
212
- }], items: [{
213
- type: Input
214
- }], multiSelection: [{
215
- type: Input
216
- }], selectedValue: [{
217
- type: Input
218
- }], filterBox: [{
219
- type: Input
220
- }], suffixText: [{
221
- type: Input
222
- }], disabled: [{
223
- type: Input
224
- }], allowClear: [{
225
- type: Input
226
- }], formatNumber: [{
227
- type: Input
228
- }], selectedValueChange: [{
229
- type: Output
230
- }], selectionChange: [{
231
- type: Output
232
- }] } });
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LWRyb3Bkb3duLWxpc3QvZHJvcGRvd24tbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzVGLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSx5QkFBeUIsRUFBQyxNQUFNLGNBQWMsQ0FBQzs7OztBQStCaEcsTUFBTSxPQUFPLHFCQUFxQjtJQTdCbEM7UUF3Q0U7O1dBRUc7UUFDTSxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUtoQzs7V0FFRztRQUNNLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFTM0I7O1dBRUc7UUFDTSxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQzNCOztXQUVHO1FBQ00saUJBQVksR0FBRyxLQUFLLENBQUM7UUFDOUI7OztXQUdHO1FBQ08sd0JBQW1CLEdBQUcsSUFBSSxZQUFZLENBQVMsSUFBSSxDQUFDLENBQUM7UUFDL0Q7OztXQUdHO1FBQ08sb0JBQWUsR0FBRyxJQUFJLFlBQVksQ0FBTSxJQUFJLENBQUMsQ0FBQztRQUV4RDs7V0FFRztRQUNILHVCQUFrQixHQUFHLEtBQUssQ0FBQztLQWtJNUI7SUFoSUM7O09BRUc7SUFDSCxJQUFJLFlBQVk7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN4QixNQUFNLFlBQVksR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUNyRDtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQixD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QUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0ksbUJBQW1CO3NCQUE1QixNQUFNO2dCQUtHLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge2NsZWFyQWxsU2VsZWN0aW9uLCBnZXRGaXJzdFNlbGVjdGVkSXRlbSwgc3RvcFByb3BhZ2F0aW9uQW5kRGVmYXVsdH0gZnJvbSAnLi91dGlscy91dGlsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmd4LWRyb3Bkb3duLWxpc3QnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8c3BhbiBjbGFzcz1cIm5neC1zZWxlY3RcIj5cclxuICAgICAgICA8YW5jaG9yIChhbmNob3JDbGljayk9XCJvbkFuY2hvckNsaWNrKCRldmVudClcIiAoY2xlYXJhbmNlQ2xpY2spPVwib25DbGVhcmFuY2VDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIFtjaGVja2JveF09XCJtdWx0aVNlbGVjdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbZm9ybWF0TnVtYmVyXT1cImZvcm1hdE51bWJlclwiXHJcbiAgICAgICAgICAgICAgICBbc3VmZml4VGV4dF09XCJzdWZmaXhUZXh0XCJcclxuICAgICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCJwbGFjZUhvbGRlclwiXHJcbiAgICAgICAgICAgICAgICBbYWxsb3dDbGVhcl09XCJhbGxvd0NsZWFyXCJcclxuICAgICAgICAgICAgICAgIFtvcGVuU3RhdHVzXT1cImRyb3Bkb3duVmlzaWJpbGl0eVwiXHJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRUZXh0XT1cInNlbGVjdGVkVGV4dFwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cclxuICAgICAgICA8L2FuY2hvcj5cclxuICAgICAgICA8ZHJvcGRvd24gI2Ryb3Bkb3duIChkcm9wZG93bkJsdXIpID0gXCJvbkl0ZW1zQmx1cigpXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJpdGVtc1wiXHJcbiAgICAgICAgICAgICAgICBbY2hlY2tib3hdPVwibXVsdGlTZWxlY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgW2ZpbHRlckJveF09XCJmaWx0ZXJCb3hcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1hdE51bWJlcl09XCJmb3JtYXROdW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgW3N1ZmZpeFRleHRdPVwic3VmZml4VGV4dFwiXHJcbiAgICAgICAgICAgICAgICBbKHNlbGVjdGVkVmFsdWUpXT1cInNlbGVjdGVkVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgKGl0ZW1DbGljaykgPSBcIm9uSXRlbUNsaWNrKClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XHJcbiAgICAgICAgPC9kcm9wZG93bj5cclxuICAgIDwvc3Bhbj5cclxuICBgLFxyXG4gIHN0eWxlVXJsczogWycuL2Ryb3Bkb3duLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkxpc3RDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGRyb3Bkb3duUmVmOiBFbGVtZW50UmVmO1xyXG5cclxuICAvKipcclxuICAgKiBiaW5kIHRvIFtwbGFjZUhvbGRlcl0gZm9yIGRpc3BsYXlpbmcgdGhlIHBsYWNlIGhvbGRlciBzdHJpbmcgb2YgdGhlIGFuY2hvci5cclxuICAgKi9cclxuICBASW5wdXQoKSBwbGFjZUhvbGRlcjogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIGJpbmQgdG8gW2l0ZW1zXSBmb3IgdGhlIG9wdGlvbnMvZ3JvdXBzIGluIHRoZSBkcm9wZG93blxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGl0ZW1zOiBhbnlbXTtcclxuICAvKipcclxuICAgKiBiaW5kIHRvIFttdWx0aVNlbGVjdGlvbl0sIHRoZSBmbGFnIGZvciBtdWx0aS1zZWxlY3QgKGNoZWNrYm94KSBtb2RlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG11bHRpU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbc2VsZWN0ZWRWYWx1ZV0gZm9yIHRoZSB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9uIGZyb20gZHJvcGRvd25cclxuICAgKi9cclxuICBASW5wdXQoKSBzZWxlY3RlZFZhbHVlOiBhbnk7XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbZmlsdGVyQm94XSBmb3IgZGlzcGxheWluZyB0aGUgZmlsdGVyIGlucHV0IHRleHQgYm94XHJcbiAgICovXHJcbiAgQElucHV0KCkgZmlsdGVyQm94ID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbc3VmZml4VGV4dF0gZm9yIGRpc3BsYXlpbmcgdGhlIHN1ZmZpeCBvZiB0aGUgc2VsZWN0ZWQgdGV4dCBvZiBhbmNob3JcclxuICAgKi9cclxuICBASW5wdXQoKSBzdWZmaXhUZXh0OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbZGlzYWJsZWRdIGZvciBkaXNhYmxpbmcgdGhlIGRyb3Bkb3duXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogYmluZCB0byBbYWxsb3dDbGVhcl0gZm9yIGVuYWJsaW5nIHRoZSBjbGVhcmFuY2UgKGNsZWFyYW5jZSBpcyBub3QgYXZhaWFibGUgd2hlbiBjaGVja2JveCBpcyBlbmFibGVkKVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGFsbG93Q2xlYXIgPSB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIGJpbmQgdG8gW2Zvcm1hdE51bWJlcl0gZm9yIHNob3cgZm9ybWF0dGVkIG51bWJlciB0ZXh0XHJcbiAgICovXHJcbiAgQElucHV0KCkgZm9ybWF0TnVtYmVyID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogZm9yIDItd2F5IGJpbmRpbmcgb2YgW3NlbGVjdGVkVmFsdWVdLCB1c2luZyBhc3luYyBldmVudCB0b1xyXG4gICAqIHByZXZlbnQgXCJFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yXCIuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4odHJ1ZSk7XHJcbiAgLyoqXHJcbiAgICogW3NlbGVjdGlvbkNoYW5nZV0gZXZlbnQgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIGNoYW5naW5nIG9mIHRoZSBzZWxlY3Rpb24uXHJcbiAgICogVXNpbmcgYXN5bmMgZXZlbnQgdG8gcHJldmVudCBcIkV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3JcIi5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KHRydWUpO1xyXG5cclxuICAvKipcclxuICAgKiB2aXNpYmlsaXR5IGZsYWcgb2YgZHJvcCBkb3duXHJcbiAgICovXHJcbiAgZHJvcGRvd25WaXNpYmlsaXR5ID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIGN1cnJlbnQgc2VsZWN0ZWQgdGV4dFxyXG4gICAqL1xyXG4gIGdldCBzZWxlY3RlZFRleHQoKTogYW55IHtcclxuICAgIGlmICghdGhpcy5tdWx0aVNlbGVjdGlvbikge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSBnZXRGaXJzdFNlbGVjdGVkSXRlbSh0aGlzLml0ZW1zKTtcclxuICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbSA/IHNlbGVjdGVkSXRlbS50ZXh0IDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdHJpZ2dlcmVkIHdpdGggKHNlbGVjdGlvbkNoYW5nZSkgZXZlbnQsIGVtaXRzIChzZWxlY3RlZFZhbHVlQ2hhbmdlKSBhbmQgKHNlbGVjdGlvbkNoYW5nZSlcclxuICAgKi9cclxuICBvblNlbGVjdGlvbkNoYW5nZShldmVudCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlQ2hhbmdlLmVtaXQoZXZlbnQpO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB0cmlnZ2VyZWQgd2l0aCAoYW5jaG9yQ2xpY2spIGV2ZW50LCBjb250cm9sbGluZyB0aGUgXCJvcGVuXCIgYW5kIFwiY2xvc2VcIiBvZiB0aGUgZHJvcGRvd25cclxuICAgKi9cclxuICBvbkFuY2hvckNsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgc3RvcFByb3BhZ2F0aW9uQW5kRGVmYXVsdChldmVudCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9pc1NlbGVjdGlvbk9wZW4oKSkge1xyXG4gICAgICB0aGlzLl9oaWRlSXRlbUxpc3QoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3Nob3dJdGVtc0xpc3QoKTtcclxuICAgIH1cclxuICAgIHN0b3BQcm9wYWdhdGlvbkFuZERlZmF1bHQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdHJpZ2dlcmVkIHdpdGggKGl0ZW1DbGljaykgZXZlbnQsIGNsb3NlcyB0aGUgZHJvcGRvd24gaW4gbm9uLWNoZWNrYm94IG1vZGVcclxuICAgKi9cclxuICBvbkl0ZW1DbGljaygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5tdWx0aVNlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLl9oaWRlSXRlbUxpc3QoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRyaWdnZXJlZCB3aXRoIChjbGVhcmFuY2VDbGljaykgZXZlbnQsIGNsZWFyaW5nIGFsbCBzZWxlY3Rpb25zXHJcbiAgICogYW5kIGVtaXRzIChzZWxlY3RlZFZhbHVlQ2hhbmdlKSBhbmQgKHNlbGVjdGlvbkNoYW5nZSkgZXZlbnQgZm9yIGVtcHR5IHZhbHVlXHJcbiAgICovXHJcbiAgb25DbGVhcmFuY2VDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5tdWx0aVNlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2b2lkIDA7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUNoYW5nZS5lbWl0KHVuZGVmaW5lZCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodW5kZWZpbmVkKTtcclxuICAgICAgY2xlYXJBbGxTZWxlY3Rpb24odGhpcy5pdGVtcyk7XHJcbiAgICB9XHJcbiAgICBzdG9wUHJvcGFnYXRpb25BbmREZWZhdWx0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRyaWdnZXJlZCB3aXRoIChkcm9wZG93bkJsdXIpIGV2ZW50LCBjbG9zZXMgdGhlIGRyb3Bkb3duXHJcbiAgICovXHJcbiAgb25JdGVtc0JsdXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faXNTZWxlY3Rpb25PcGVuKCkpIHtcclxuICAgICAgdGhpcy5faGlkZUl0ZW1MaXN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBjbG9zZSB0aGUgZHJvcGRvd25cclxuICAgKi9cclxuICBwcml2YXRlIF9oaWRlSXRlbUxpc3QoKTogdm9pZCB7XHJcbiAgICAvLyBoaWRlIHRoZSBkcm9wZG93biBlbGVtZW50IChoYXMgc29tZSBwcm9ibGVtIGZvciB1c2luZyBDU1MgZGlyZWN0bHksIHVzaW5nIHRoaXMgYXMgYSB3b3JrYXJvdW5kKVxyXG4gICAgdGhpcy5fZHJvcGRvd25FbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3Zpc2libGUnKTtcclxuICAgIHRoaXMuX2Ryb3Bkb3duRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgdGhpcy5kcm9wZG93blZpc2liaWxpdHkgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIG9wZW4gdGhlIGRyb3Bkb3duXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfc2hvd0l0ZW1zTGlzdCgpOiB2b2lkIHtcclxuICAgIC8vIGRpc3BsYXkgdGhlIGRyb3Bkb3duIGVsZW1lbnQgKGhhcyBzb21lIHByb2JsZW0gZm9yIHVzaW5nIENTUyBkaXJlY3RseSwgdXNpbmcgdGhpcyBhcyBhIHdvcmthcm91bmQpXHJcbiAgICB0aGlzLl9kcm9wZG93bkVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndmlzaWJsZScpO1xyXG4gICAgdGhpcy5fZHJvcGRvd25FbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgIHRoaXMuZHJvcGRvd25WaXNpYmlsaXR5ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBzY3JvbGxpbmcgdG8gdGhlIHNlbGVjdGVkIGl0ZW1cclxuICAgIGlmICh0aGlzLl9zZWxlY3RlZEVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdhdXRvJywgYmxvY2s6ICdjZW50ZXInIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNldHRpbmcgdGhlIGZvY3VzXHJcbiAgICBpZiAodGhpcy5maWx0ZXJCb3ggJiYgIXRoaXMubXVsdGlTZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5fZmlsdGVySW5wdXRFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9kcm9wZG93bkVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHZpc2liaWxpdHkgc3RhdHVzIG9mIGRyb3Bkb3duXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaXNTZWxlY3Rpb25PcGVuKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZHJvcGRvd25WaXNpYmlsaXR5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSByZWFsIGRyb3Bkb3duIGVsZW1lbnQgKGZvciBmb2N1c2luZyBhbmQgdmlzaWJpbGl0eSBjb250cm9sbGluZyksIHRoZSA8c3Bhbj4gbm90IHRoZSA8ZHJvcGRvd24+XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgX2Ryb3Bkb3duRWxlbWVudCgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuZHJvcGRvd25SZWYgPyB0aGlzLmRyb3Bkb3duUmVmLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLmRyb3Bkb3duUmVmLm5hdGl2ZUVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQgOiBudWxsIDogbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUgcmVhbCBmaWx0ZXIgZWxlbWVudCAoZm9yIGZvY3VzaW5nKSwgdGhlIDxpbnB1dD4gbm90IHRoZSA8aW5wdXQtZmlsdGVyPlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0IF9maWx0ZXJJbnB1dEVsZW1lbnQoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9kcm9wZG93bkVsZW1lbnQgP1xyXG4gICAgICB0aGlzLl9kcm9wZG93bkVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQgPyB0aGlzLl9kcm9wZG93bkVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQuZmlyc3RFbGVtZW50Q2hpbGQgOiBudWxsIDogbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUgSFRNTEVsZW1lbnQgb2Ygc2VsZWN0ZWQgaXRlbSwgZm9yIGRvaW5nIChzY3JvbGxJbnRvVmlldykgc2Nyb2xsaW5nIHRvIHRoZSBzZWxlY3RlZCBpdGVtXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgX3NlbGVjdGVkRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSBnZXRGaXJzdFNlbGVjdGVkSXRlbSh0aGlzLml0ZW1zKTtcclxuICAgIHJldHVybiBzZWxlY3RlZEl0ZW0gPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWxlY3RlZEl0ZW0uaWQpIGFzIEhUTUxFbGVtZW50IDogdW5kZWZpbmVkO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,38 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { FormsModule } from '@angular/forms';
4
- import { ItemComponent } from './item/item.component';
5
- import { GroupItemComponent } from './group-item/group-item.component';
6
- import { InputFilterComponent } from './filter/input-filter.component';
7
- import { AnchorComponent } from './anchor/anchor.component';
8
- import { DropdownComponent } from './dropdown/dropdown.component';
9
- import { DropdownListComponent } from './dropdown-list.component';
10
- import * as i0 from "@angular/core";
11
- export class DropdownListModule {
12
- }
13
- DropdownListModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DropdownListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
- DropdownListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DropdownListModule, declarations: [DropdownListComponent,
15
- ItemComponent,
16
- GroupItemComponent,
17
- InputFilterComponent,
18
- AnchorComponent,
19
- DropdownComponent], imports: [CommonModule, FormsModule], exports: [DropdownListComponent] });
20
- DropdownListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DropdownListModule, providers: [], imports: [[CommonModule, FormsModule]] });
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DropdownListModule, decorators: [{
22
- type: NgModule,
23
- args: [{
24
- declarations: [
25
- DropdownListComponent,
26
- ItemComponent,
27
- GroupItemComponent,
28
- InputFilterComponent,
29
- AnchorComponent,
30
- DropdownComponent
31
- ],
32
- exports: [DropdownListComponent],
33
- imports: [CommonModule, FormsModule],
34
- providers: [],
35
- bootstrap: [],
36
- }]
37
- }] });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbGlzdC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LWRyb3Bkb3duLWxpc3QvZHJvcGRvd24tbGlzdC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBZ0JsRSxNQUFNLE9BQU8sa0JBQWtCOztnSEFBbEIsa0JBQWtCO2lIQUFsQixrQkFBa0IsaUJBWjNCLHFCQUFxQjtRQUNyQixhQUFhO1FBQ2Isa0JBQWtCO1FBQ2xCLG9CQUFvQjtRQUNwQixlQUFlO1FBQ2YsaUJBQWlCLGFBR1IsWUFBWSxFQUFFLFdBQVcsYUFEekIscUJBQXFCO2lIQUtyQixrQkFBa0IsYUFIbEIsRUFBRSxZQURKLENBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBRTs0RkFJM0Isa0JBQWtCO2tCQWQ5QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixxQkFBcUI7d0JBQ3JCLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLGVBQWU7d0JBQ2YsaUJBQWlCO3FCQUNsQjtvQkFDRCxPQUFPLEVBQUUsQ0FBRSxxQkFBcUIsQ0FBQztvQkFDakMsT0FBTyxFQUFFLENBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBRTtvQkFDdEMsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsU0FBUyxFQUFFLEVBQUU7aUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vaXRlbS9pdGVtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEdyb3VwSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vZ3JvdXAtaXRlbS9ncm91cC1pdGVtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElucHV0RmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi9maWx0ZXIvaW5wdXQtZmlsdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFuY2hvckNvbXBvbmVudCB9IGZyb20gJy4vYW5jaG9yL2FuY2hvci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4vZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgRHJvcGRvd25MaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9kcm9wZG93bi1saXN0LmNvbXBvbmVudCc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgRHJvcGRvd25MaXN0Q29tcG9uZW50LFxyXG4gICAgSXRlbUNvbXBvbmVudCxcclxuICAgIEdyb3VwSXRlbUNvbXBvbmVudCxcclxuICAgIElucHV0RmlsdGVyQ29tcG9uZW50LFxyXG4gICAgQW5jaG9yQ29tcG9uZW50LFxyXG4gICAgRHJvcGRvd25Db21wb25lbnRcclxuICBdLFxyXG4gIGV4cG9ydHM6IFsgRHJvcGRvd25MaXN0Q29tcG9uZW50XSxcclxuICBpbXBvcnRzOiBbIENvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUgXSxcclxuICBwcm92aWRlcnM6IFtdLFxyXG4gIGJvb3RzdHJhcDogW10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkxpc3RNb2R1bGUge31cclxuIl19
@@ -1,44 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/forms";
4
- export class InputFilterComponent {
5
- constructor() {
6
- /**
7
- * bind to [inputFilterBlur], emits with (blur) of filter input box
8
- */
9
- this.inputFilterBlur = new EventEmitter();
10
- /**
11
- * bind to [filterValueChange], for 2-way binding of filterValue
12
- */
13
- this.filterValueChange = new EventEmitter();
14
- }
15
- /**
16
- * triggers with (blur) event, emits the (inputFilterBlur) event
17
- */
18
- onFilterTextBlur(event) {
19
- this.inputFilterBlur.emit(event);
20
- }
21
- /**
22
- * triggers with (input) event, emits the (filterValueChange) event for 2-way binding of filterValue
23
- */
24
- onChange() {
25
- this.filterValueChange.emit(this.filterValue);
26
- }
27
- }
28
- InputFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: InputFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
29
- InputFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: InputFilterComponent, selector: "input-filter", inputs: { filterValue: "filterValue" }, outputs: { inputFilterBlur: "inputFilterBlur", filterValueChange: "filterValueChange" }, ngImport: i0, template: `
30
- <input type="text" class="filter-box" [(ngModel)]="filterValue" (input)="onChange()" (blur)="onFilterTextBlur($event)">
31
- `, isInline: true, styles: ["*,*:before,*:after{font-size:inherit;font-weight:inherit;font-family:inherit;box-sizing:inherit;background:inherit}.filter-box{width:calc(100% - 10px);height:28px;border-radius:4px;border:1px solid #ccc;margin:1px 5px 5px;padding-left:5px;font-size:12px;box-sizing:border-box;color:#495057}.filter-box:focus{outline:0;border-color:#ccc}\n"], directives: [{ type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: InputFilterComponent, decorators: [{
33
- type: Component,
34
- args: [{ selector: 'input-filter', template: `
35
- <input type="text" class="filter-box" [(ngModel)]="filterValue" (input)="onChange()" (blur)="onFilterTextBlur($event)">
36
- `, styles: ["*,*:before,*:after{font-size:inherit;font-weight:inherit;font-family:inherit;box-sizing:inherit;background:inherit}.filter-box{width:calc(100% - 10px);height:28px;border-radius:4px;border:1px solid #ccc;margin:1px 5px 5px;padding-left:5px;font-size:12px;box-sizing:border-box;color:#495057}.filter-box:focus{outline:0;border-color:#ccc}\n"] }]
37
- }], propDecorators: { filterValue: [{
38
- type: Input
39
- }], inputFilterBlur: [{
40
- type: Output
41
- }], filterValueChange: [{
42
- type: Output
43
- }] } });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uZ3gtZHJvcGRvd24tbGlzdC9maWx0ZXIvaW5wdXQtZmlsdGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7QUFVckUsTUFBTSxPQUFPLG9CQUFvQjtJQVJqQztRQWFFOztXQUVHO1FBQ08sb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3ZEOztXQUVHO1FBQ08sc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztLQWUxRDtJQWJDOztPQUVHO0lBQ0gsZ0JBQWdCLENBQUMsS0FBSztRQUNwQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEQsQ0FBQzs7a0hBMUJVLG9CQUFvQjtzR0FBcEIsb0JBQW9CLHFMQU5yQjs7R0FFVDs0RkFJVSxvQkFBb0I7a0JBUmhDLFNBQVM7K0JBQ0UsY0FBYyxZQUNkOztHQUVUOzhCQVFRLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSUksZUFBZTtzQkFBeEIsTUFBTTtnQkFJRyxpQkFBaUI7c0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaW5wdXQtZmlsdGVyJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmaWx0ZXItYm94XCIgWyhuZ01vZGVsKV09XCJmaWx0ZXJWYWx1ZVwiIChpbnB1dCk9XCJvbkNoYW5nZSgpXCIgKGJsdXIpPVwib25GaWx0ZXJUZXh0Qmx1cigkZXZlbnQpXCI+XHJcbiAgYCxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC1maWx0ZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIElucHV0RmlsdGVyQ29tcG9uZW50IHtcclxuICAvKipcclxuICAgKiBiaW5kIHRvIFtmaWx0ZXJWYWx1ZV0sIHRoZSB2YWx1ZSBvZiB0aGUgZmlsdGVyXHJcbiAgICovXHJcbiAgQElucHV0KCkgZmlsdGVyVmFsdWU6IHN0cmluZztcclxuICAvKipcclxuICAgKiBiaW5kIHRvIFtpbnB1dEZpbHRlckJsdXJdLCBlbWl0cyB3aXRoIChibHVyKSBvZiBmaWx0ZXIgaW5wdXQgYm94XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGlucHV0RmlsdGVyQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIC8qKlxyXG4gICAqIGJpbmQgdG8gW2ZpbHRlclZhbHVlQ2hhbmdlXSwgZm9yIDItd2F5IGJpbmRpbmcgb2YgZmlsdGVyVmFsdWVcclxuICAgKi9cclxuICBAT3V0cHV0KCkgZmlsdGVyVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogdHJpZ2dlcnMgd2l0aCAoYmx1cikgZXZlbnQsIGVtaXRzIHRoZSAoaW5wdXRGaWx0ZXJCbHVyKSBldmVudFxyXG4gICAqL1xyXG4gIG9uRmlsdGVyVGV4dEJsdXIoZXZlbnQpIHtcclxuICAgIHRoaXMuaW5wdXRGaWx0ZXJCbHVyLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdHJpZ2dlcnMgd2l0aCAoaW5wdXQpIGV2ZW50LCBlbWl0cyB0aGUgKGZpbHRlclZhbHVlQ2hhbmdlKSBldmVudCBmb3IgMi13YXkgYmluZGluZyBvZiBmaWx0ZXJWYWx1ZVxyXG4gICAqL1xyXG4gIG9uQ2hhbmdlKCkge1xyXG4gICAgdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyVmFsdWUpO1xyXG4gIH1cclxufVxyXG4iXX0=