@datarailsshared/datarailsshared 1.6.99 → 1.6.103

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,421 @@
1
+ import { booleanAttribute, ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, TemplateRef, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { DrInputsModule } from '../dr-inputs/dr-inputs.module';
5
+ import { DrDropdownModule } from '../dr-dropdown/dr-dropdown.module';
6
+ import { DrPopoverModule } from '../dr-popover/dr-popover.module';
7
+ import { DrButtonComponent, LetDirective } from '../../public-api';
8
+ import { AutofocusDirective } from '../directives/autofocus/autofocus.directive';
9
+ import { SearchPipe } from '../pipes/search/search.pipe';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/common";
12
+ import * as i2 from "../dr-popover/dr-popover.directive";
13
+ import * as i3 from "../dr-dropdown/dr-dropdown.component";
14
+ import * as i4 from "../dr-dropdown/dr-dropdown-item/dr-dropdown-item.component";
15
+ import * as i5 from "../dr-inputs/checkbox/checkbox.component";
16
+ import * as i6 from "../dr-inputs/dr-input/dr-input.component";
17
+ import * as i7 from "../dr-inputs/button/button.component";
18
+ import * as i8 from "@angular/forms";
19
+ const _c0 = ["dropdownItemTemplate"];
20
+ const _c1 = ["labelItemTemplate"];
21
+ function FilterDropdownComponent_ng_container_3_ng_container_1_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
22
+ i0.ɵɵelementContainerStart(0);
23
+ i0.ɵɵtext(1, ",");
24
+ i0.ɵɵelementContainerEnd();
25
+ } }
26
+ const _c2 = function (a0) { return { $implicit: a0 }; };
27
+ function FilterDropdownComponent_ng_container_3_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
28
+ i0.ɵɵelementContainerStart(0);
29
+ i0.ɵɵtemplate(1, FilterDropdownComponent_ng_container_3_ng_container_1_ng_container_1_ng_container_1_Template, 2, 0, "ng-container", 8);
30
+ i0.ɵɵelementContainer(2, 9);
31
+ i0.ɵɵelementContainerEnd();
32
+ } if (rf & 2) {
33
+ const item_r12 = ctx.$implicit;
34
+ const i_r13 = ctx.index;
35
+ const ctx_r10 = i0.ɵɵnextContext(3);
36
+ const _r5 = i0.ɵɵreference(9);
37
+ i0.ɵɵadvance(1);
38
+ i0.ɵɵproperty("ngIf", i_r13);
39
+ i0.ɵɵadvance(1);
40
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r10.labelItemTemplate || _r5)("ngTemplateOutletContext", i0.ɵɵpureFunction1(3, _c2, item_r12));
41
+ } }
42
+ function FilterDropdownComponent_ng_container_3_ng_container_1_ng_container_3_Template(rf, ctx) { if (rf & 1) {
43
+ i0.ɵɵelementContainerStart(0);
44
+ i0.ɵɵtext(1);
45
+ i0.ɵɵelementContainerEnd();
46
+ } if (rf & 2) {
47
+ const ctx_r11 = i0.ɵɵnextContext(3);
48
+ i0.ɵɵadvance(1);
49
+ i0.ɵɵtextInterpolate1(" + ", ctx_r11.selectedArr.length - ctx_r11.showInLabelLimit, "");
50
+ } }
51
+ function FilterDropdownComponent_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
52
+ i0.ɵɵelementContainerStart(0);
53
+ i0.ɵɵtemplate(1, FilterDropdownComponent_ng_container_3_ng_container_1_ng_container_1_Template, 3, 5, "ng-container", 7);
54
+ i0.ɵɵpipe(2, "slice");
55
+ i0.ɵɵtemplate(3, FilterDropdownComponent_ng_container_3_ng_container_1_ng_container_3_Template, 2, 1, "ng-container", 8);
56
+ i0.ɵɵelementContainerEnd();
57
+ } if (rf & 2) {
58
+ const ctx_r9 = i0.ɵɵnextContext(2);
59
+ i0.ɵɵadvance(1);
60
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind3(2, 2, ctx_r9.selectedArr, 0, ctx_r9.showInLabelLimit));
61
+ i0.ɵɵadvance(2);
62
+ i0.ɵɵproperty("ngIf", ctx_r9.selectedArr.length > ctx_r9.showInLabelLimit);
63
+ } }
64
+ function FilterDropdownComponent_ng_container_3_Template(rf, ctx) { if (rf & 1) {
65
+ i0.ɵɵelementContainerStart(0);
66
+ i0.ɵɵtemplate(1, FilterDropdownComponent_ng_container_3_ng_container_1_Template, 4, 6, "ng-container", 2);
67
+ i0.ɵɵelementContainerEnd();
68
+ } if (rf & 2) {
69
+ const ctx_r0 = i0.ɵɵnextContext();
70
+ const _r1 = i0.ɵɵreference(5);
71
+ i0.ɵɵadvance(1);
72
+ i0.ɵɵproperty("ngIf", ctx_r0.selectedArr.length <= ctx_r0.showManyLimit)("ngIfElse", _r1);
73
+ } }
74
+ function FilterDropdownComponent_ng_template_4_Template(rf, ctx) { if (rf & 1) {
75
+ i0.ɵɵtext(0, "Many");
76
+ } }
77
+ function FilterDropdownComponent_ng_template_6_Template(rf, ctx) { if (rf & 1) {
78
+ i0.ɵɵelementStart(0, "span", 10);
79
+ i0.ɵɵtext(1, "All");
80
+ i0.ɵɵelementEnd();
81
+ } }
82
+ function FilterDropdownComponent_ng_template_8_Template(rf, ctx) { if (rf & 1) {
83
+ i0.ɵɵtext(0);
84
+ } if (rf & 2) {
85
+ const item_r15 = ctx.$implicit;
86
+ const ctx_r6 = i0.ɵɵnextContext();
87
+ i0.ɵɵtextInterpolate(ctx_r6._item(item_r15));
88
+ } }
89
+ function FilterDropdownComponent_ng_template_10_div_0_div_1_Template(rf, ctx) { if (rf & 1) {
90
+ const _r27 = i0.ɵɵgetCurrentView();
91
+ i0.ɵɵelementStart(0, "div", 20)(1, "dr-input", 21, 22);
92
+ i0.ɵɵlistener("ngModelChange", function FilterDropdownComponent_ng_template_10_div_0_div_1_Template_dr_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r26 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r26.search = $event); });
93
+ i0.ɵɵelementEnd()();
94
+ } if (rf & 2) {
95
+ const ctx_r19 = i0.ɵɵnextContext(3);
96
+ i0.ɵɵadvance(1);
97
+ i0.ɵɵclassProp("with-value", ctx_r19.search);
98
+ i0.ɵɵproperty("clearable", true)("ngModel", ctx_r19.search);
99
+ } }
100
+ function FilterDropdownComponent_ng_template_10_div_0_a_5_Template(rf, ctx) { if (rf & 1) {
101
+ const _r29 = i0.ɵɵgetCurrentView();
102
+ i0.ɵɵelementStart(0, "a", 23);
103
+ i0.ɵɵlistener("click", function FilterDropdownComponent_ng_template_10_div_0_a_5_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r29); const ctx_r28 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r28.onSelectAll()); });
104
+ i0.ɵɵtext(1);
105
+ i0.ɵɵelementEnd();
106
+ } if (rf & 2) {
107
+ const ctx_r20 = i0.ɵɵnextContext(3);
108
+ i0.ɵɵadvance(1);
109
+ i0.ɵɵtextInterpolate(ctx_r20.isSelectedAll ? "Select none" : "Select all");
110
+ } }
111
+ function FilterDropdownComponent_ng_template_10_div_0_dr_dropdown_6_dr_dropdown_item_1_dr_checkbox_3_Template(rf, ctx) { if (rf & 1) {
112
+ i0.ɵɵelement(0, "dr-checkbox", 31);
113
+ } if (rf & 2) {
114
+ const item_r31 = i0.ɵɵnextContext().$implicit;
115
+ const _r32 = i0.ɵɵreference(1);
116
+ i0.ɵɵproperty("checkedStatus", _r32.selected)("disabled", item_r31.disabled);
117
+ } }
118
+ function FilterDropdownComponent_ng_template_10_div_0_dr_dropdown_6_dr_dropdown_item_1_ng_template_6_Template(rf, ctx) { if (rf & 1) {
119
+ i0.ɵɵelementStart(0, "span", 32);
120
+ i0.ɵɵtext(1);
121
+ i0.ɵɵelementEnd();
122
+ } if (rf & 2) {
123
+ const item_r31 = i0.ɵɵnextContext().$implicit;
124
+ const ctx_r35 = i0.ɵɵnextContext(4);
125
+ i0.ɵɵadvance(1);
126
+ i0.ɵɵtextInterpolate1(" ", ctx_r35._item(item_r31), " ");
127
+ } }
128
+ function FilterDropdownComponent_ng_template_10_div_0_dr_dropdown_6_dr_dropdown_item_1_Template(rf, ctx) { if (rf & 1) {
129
+ const _r39 = i0.ɵɵgetCurrentView();
130
+ i0.ɵɵelementStart(0, "dr-dropdown-item", 26, 27);
131
+ i0.ɵɵlistener("keyup.enter", function FilterDropdownComponent_ng_template_10_div_0_dr_dropdown_6_dr_dropdown_item_1_Template_dr_dropdown_item_keyup_enter_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r39); const item_r31 = restoredCtx.$implicit; const _r32 = i0.ɵɵreference(1); const ctx_r38 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(!_r32.selected && ctx_r38.selectedChange.emit(item_r31)); })("click", function FilterDropdownComponent_ng_template_10_div_0_dr_dropdown_6_dr_dropdown_item_1_Template_dr_dropdown_item_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r39); const item_r31 = restoredCtx.$implicit; const _r32 = i0.ɵɵreference(1); const close_r16 = i0.ɵɵnextContext(3).closePopover; const ctx_r40 = i0.ɵɵnextContext(); return i0.ɵɵresetView(!_r32.disabled && ctx_r40.onSelectedItemChanged(item_r31, _r32.selected, close_r16)); });
132
+ i0.ɵɵelementContainerStart(2, 28);
133
+ i0.ɵɵtemplate(3, FilterDropdownComponent_ng_template_10_div_0_dr_dropdown_6_dr_dropdown_item_1_dr_checkbox_3_Template, 1, 2, "dr-checkbox", 29);
134
+ i0.ɵɵelementContainerStart(4, 28);
135
+ i0.ɵɵelementContainer(5, 9);
136
+ i0.ɵɵelementContainerEnd();
137
+ i0.ɵɵtemplate(6, FilterDropdownComponent_ng_template_10_div_0_dr_dropdown_6_dr_dropdown_item_1_ng_template_6_Template, 2, 1, "ng-template", null, 30, i0.ɵɵtemplateRefExtractor);
138
+ i0.ɵɵelementContainerEnd();
139
+ i0.ɵɵelementEnd();
140
+ } if (rf & 2) {
141
+ const item_r31 = ctx.$implicit;
142
+ const _r34 = i0.ɵɵreference(7);
143
+ const ctx_r30 = i0.ɵɵnextContext(4);
144
+ i0.ɵɵproperty("selected", ctx_r30.isSelected(item_r31))("disabled", item_r31.disabled);
145
+ i0.ɵɵadvance(3);
146
+ i0.ɵɵproperty("ngIf", ctx_r30.multiple);
147
+ i0.ɵɵadvance(2);
148
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r30.dropdownItemTemplate || _r34)("ngTemplateOutletContext", i0.ɵɵpureFunction1(5, _c2, item_r31));
149
+ } }
150
+ function FilterDropdownComponent_ng_template_10_div_0_dr_dropdown_6_Template(rf, ctx) { if (rf & 1) {
151
+ i0.ɵɵelementStart(0, "dr-dropdown", 24);
152
+ i0.ɵɵtemplate(1, FilterDropdownComponent_ng_template_10_div_0_dr_dropdown_6_dr_dropdown_item_1_Template, 8, 7, "dr-dropdown-item", 25);
153
+ i0.ɵɵelementEnd();
154
+ } if (rf & 2) {
155
+ const filteredItems_r18 = i0.ɵɵnextContext().ngLet;
156
+ const ctx_r21 = i0.ɵɵnextContext(2);
157
+ i0.ɵɵadvance(1);
158
+ i0.ɵɵproperty("ngForOf", filteredItems_r18)("ngForTrackBy", ctx_r21.trackByFn);
159
+ } }
160
+ function FilterDropdownComponent_ng_template_10_div_0_ng_template_7_div_0_Template(rf, ctx) { if (rf & 1) {
161
+ i0.ɵɵelementStart(0, "div", 34);
162
+ i0.ɵɵtext(1);
163
+ i0.ɵɵelementEnd();
164
+ } if (rf & 2) {
165
+ const ctx_r43 = i0.ɵɵnextContext(4);
166
+ i0.ɵɵadvance(1);
167
+ i0.ɵɵtextInterpolate1(" ", ctx_r43.noItemsPlaceholder, " ");
168
+ } }
169
+ function FilterDropdownComponent_ng_template_10_div_0_ng_template_7_Template(rf, ctx) { if (rf & 1) {
170
+ i0.ɵɵtemplate(0, FilterDropdownComponent_ng_template_10_div_0_ng_template_7_div_0_Template, 2, 1, "div", 33);
171
+ } if (rf & 2) {
172
+ const ctx_r23 = i0.ɵɵnextContext(3);
173
+ i0.ɵɵproperty("ngIf", ctx_r23.noItemsPlaceholder);
174
+ } }
175
+ function FilterDropdownComponent_ng_template_10_div_0_div_9_dr_button_1_Template(rf, ctx) { if (rf & 1) {
176
+ const _r47 = i0.ɵɵgetCurrentView();
177
+ i0.ɵɵelementStart(0, "dr-button", 38);
178
+ i0.ɵɵlistener("click", function FilterDropdownComponent_ng_template_10_div_0_div_9_dr_button_1_Template_dr_button_click_0_listener() { i0.ɵɵrestoreView(_r47); const close_r16 = i0.ɵɵnextContext(3).closePopover; const ctx_r45 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r45.onClear(close_r16)); });
179
+ i0.ɵɵtext(1, " Clear ");
180
+ i0.ɵɵelementEnd();
181
+ } }
182
+ function FilterDropdownComponent_ng_template_10_div_0_div_9_Template(rf, ctx) { if (rf & 1) {
183
+ const _r50 = i0.ɵɵgetCurrentView();
184
+ i0.ɵɵelementStart(0, "div", 35);
185
+ i0.ɵɵtemplate(1, FilterDropdownComponent_ng_template_10_div_0_div_9_dr_button_1_Template, 2, 0, "dr-button", 36);
186
+ i0.ɵɵelementStart(2, "dr-button", 37);
187
+ i0.ɵɵlistener("click", function FilterDropdownComponent_ng_template_10_div_0_div_9_Template_dr_button_click_2_listener() { i0.ɵɵrestoreView(_r50); const close_r16 = i0.ɵɵnextContext(2).closePopover; const ctx_r48 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r48.onApply(close_r16)); });
188
+ i0.ɵɵtext(3, "Apply");
189
+ i0.ɵɵelementEnd()();
190
+ } if (rf & 2) {
191
+ const ctx_r24 = i0.ɵɵnextContext(3);
192
+ i0.ɵɵadvance(1);
193
+ i0.ɵɵproperty("ngIf", ctx_r24.clearable && ctx_r24.hasSelection);
194
+ } }
195
+ function FilterDropdownComponent_ng_template_10_div_0_Template(rf, ctx) { if (rf & 1) {
196
+ i0.ɵɵelementStart(0, "div", 12);
197
+ i0.ɵɵtemplate(1, FilterDropdownComponent_ng_template_10_div_0_div_1_Template, 3, 4, "div", 13);
198
+ i0.ɵɵelementStart(2, "div", 14)(3, "div", 15);
199
+ i0.ɵɵtext(4);
200
+ i0.ɵɵelementEnd();
201
+ i0.ɵɵtemplate(5, FilterDropdownComponent_ng_template_10_div_0_a_5_Template, 2, 1, "a", 16);
202
+ i0.ɵɵelementEnd();
203
+ i0.ɵɵtemplate(6, FilterDropdownComponent_ng_template_10_div_0_dr_dropdown_6_Template, 2, 2, "dr-dropdown", 17);
204
+ i0.ɵɵtemplate(7, FilterDropdownComponent_ng_template_10_div_0_ng_template_7_Template, 1, 1, "ng-template", null, 18, i0.ɵɵtemplateRefExtractor);
205
+ i0.ɵɵtemplate(9, FilterDropdownComponent_ng_template_10_div_0_div_9_Template, 4, 1, "div", 19);
206
+ i0.ɵɵelementEnd();
207
+ } if (rf & 2) {
208
+ const filteredItems_r18 = ctx.ngLet;
209
+ const _r22 = i0.ɵɵreference(8);
210
+ const ctx_r17 = i0.ɵɵnextContext(2);
211
+ i0.ɵɵproperty("ngClass", ctx_r17.dropdownClass);
212
+ i0.ɵɵadvance(1);
213
+ i0.ɵɵproperty("ngIf", ctx_r17.showSearch);
214
+ i0.ɵɵadvance(3);
215
+ i0.ɵɵtextInterpolate1("Filter by ", ctx_r17.label, "");
216
+ i0.ɵɵadvance(1);
217
+ i0.ɵɵproperty("ngIf", ctx_r17.showSelectAll);
218
+ i0.ɵɵadvance(1);
219
+ i0.ɵɵproperty("ngIf", filteredItems_r18.length)("ngIfElse", _r22);
220
+ i0.ɵɵadvance(3);
221
+ i0.ɵɵproperty("ngIf", ctx_r17.multiple);
222
+ } }
223
+ function FilterDropdownComponent_ng_template_10_Template(rf, ctx) { if (rf & 1) {
224
+ i0.ɵɵtemplate(0, FilterDropdownComponent_ng_template_10_div_0_Template, 10, 7, "div", 11);
225
+ i0.ɵɵpipe(1, "search");
226
+ } if (rf & 2) {
227
+ const ctx_r8 = i0.ɵɵnextContext();
228
+ i0.ɵɵproperty("ngLet", i0.ɵɵpipeBind3(1, 1, ctx_r8.items, ctx_r8.search, ctx_r8.searchBy));
229
+ } }
230
+ export class FilterDropdownComponent {
231
+ constructor() {
232
+ this.selectedChange = new EventEmitter();
233
+ this.disabled = false;
234
+ this.items = [];
235
+ this.selectedUser = null;
236
+ this.users = [];
237
+ this.noItemsPlaceholder = 'No items found';
238
+ this.dropdownClass = '';
239
+ this.dropdownPosition = 'bottom-right';
240
+ this.searchBy = [];
241
+ this.multiple = false;
242
+ this.clearable = false;
243
+ this.trackBy = null;
244
+ this.showSearchLimit = 10;
245
+ this.showManyLimit = 12;
246
+ this.showInLabelLimit = 3;
247
+ this._selected = null;
248
+ this._selectedOriginal = null;
249
+ this.search = '';
250
+ }
251
+ set selected(value) {
252
+ this._selectedOriginal = value;
253
+ this._selected = value;
254
+ }
255
+ get selected() {
256
+ return this._selected;
257
+ }
258
+ get showSearch() {
259
+ return this.items.length > this.showSearchLimit;
260
+ }
261
+ get showSelectAll() {
262
+ return this.multiple && this.items.length > this.showSearchLimit;
263
+ }
264
+ get isSelectedAll() {
265
+ return this.multiple && this.selected && this.selected.length === this.items.length;
266
+ }
267
+ get selectedArr() {
268
+ if (!this.selected)
269
+ return [];
270
+ return Array.isArray(this.selected) ? this.selected : [this.selected];
271
+ }
272
+ get hasSelection() {
273
+ return this.selectedArr.length > 0 && this.selectedArr.length < this.items.length;
274
+ }
275
+ sliceArray(selected) {
276
+ return selected.slice(0, 3);
277
+ }
278
+ trackByFn(index, item) {
279
+ return this.trackBy ? item[this.trackBy] : index;
280
+ }
281
+ _item(item) {
282
+ return item?.[this.bindValue] || item;
283
+ }
284
+ onSelectedItemChanged(item, isSelected, closePopover) {
285
+ if (this.multiple) {
286
+ this._selected = isSelected
287
+ ? [...this.selected.filter((el) => this._item(el) !== this._item(item))]
288
+ : [...this.selected, item];
289
+ return;
290
+ }
291
+ this._selected = item;
292
+ this.selectedChange.emit(item);
293
+ closePopover();
294
+ }
295
+ onSelectAll() {
296
+ if (this.isSelectedAll) {
297
+ this._selected = [];
298
+ }
299
+ else {
300
+ this._selected = [...this.items];
301
+ }
302
+ }
303
+ isSelected(item) {
304
+ return this.multiple
305
+ ? this.selected?.some((el) => el === item || this._item(el) === this._item(item))
306
+ : this.selected === item || this._item(this.selected) === this._item(item);
307
+ }
308
+ onApply(closePopover) {
309
+ this.selectedChange.emit(this._selected);
310
+ closePopover();
311
+ }
312
+ onClear(close) {
313
+ this._selected = null;
314
+ this._selectedOriginal = null;
315
+ if (this.multiple) {
316
+ this._selected = [];
317
+ this._selectedOriginal = [];
318
+ }
319
+ this.selectedChange.emit(this._selected);
320
+ close();
321
+ }
322
+ onPopoverClose() {
323
+ this._selected = this._selectedOriginal;
324
+ }
325
+ /** @nocollapse */ static { this.ɵfac = function FilterDropdownComponent_Factory(t) { return new (t || FilterDropdownComponent)(); }; }
326
+ /** @nocollapse */ static { this.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: FilterDropdownComponent, selectors: [["dr-filter-dropdown"]], contentQueries: function FilterDropdownComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
327
+ i0.ɵɵcontentQuery(dirIndex, _c0, 5, TemplateRef);
328
+ i0.ɵɵcontentQuery(dirIndex, _c1, 5, TemplateRef);
329
+ } if (rf & 2) {
330
+ let _t;
331
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dropdownItemTemplate = _t.first);
332
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.labelItemTemplate = _t.first);
333
+ } }, inputs: { disabled: ["disabled", "disabled", booleanAttribute], items: "items", label: "label", selectedUser: "selectedUser", users: "users", noItemsPlaceholder: "noItemsPlaceholder", dropdownClass: "dropdownClass", dropdownPosition: "dropdownPosition", bindValue: "bindValue", displayValue: "displayValue", searchBy: "searchBy", multiple: ["multiple", "multiple", booleanAttribute], clearable: ["clearable", "clearable", booleanAttribute], trackBy: "trackBy", showSearchLimit: "showSearchLimit", showManyLimit: "showManyLimit", showInLabelLimit: "showInLabelLimit", selected: "selected" }, outputs: { selectedChange: "selectedChange" }, standalone: true, features: [i0.ɵɵInputTransformsFeature, i0.ɵɵStandaloneFeature], decls: 12, vars: 7, consts: [["theme", "dropdown", "iconAfter", "dr-icon-arrow-down", "iconAfterSize", "18", 3, "drPopover", "isActive", "disabled", "drPopoverPosition", "drPopoverClose", "click"], [1, "filter-value"], [4, "ngIf", "ngIfElse"], ["manyTemplate", ""], ["allTemplate", ""], ["defaultLabelTemplate", ""], ["popover", ""], [4, "ngFor", "ngForOf"], [4, "ngIf"], [3, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "filter-value-all"], ["class", "dropdown__wrapper", "tabindex", "0", 3, "ngClass", 4, "ngLet"], ["tabindex", "0", 1, "dropdown__wrapper", 3, "ngClass"], ["class", "dropdown__search", 4, "ngIf"], [1, "dropdown__header"], [1, "dropdown__header-title"], ["href", "javascript: void(0)", "class", "dropdown__header-select-all", 3, "click", 4, "ngIf"], ["class", "dr-filter-list", "tabindex", "0", 4, "ngIf", "ngIfElse"], ["noDataPlaceholder", ""], ["class", "dropdown__actions", 4, "ngIf"], [1, "dropdown__search"], ["data-analytics", "filter-dropdown_input-0", "drAutofocus", "", "type", "search", "tabindex", "0", "placeholder", "Search", 3, "clearable", "ngModel", "ngModelChange"], ["searchRef", ""], ["href", "javascript: void(0)", 1, "dropdown__header-select-all", 3, "click"], ["tabindex", "0", 1, "dr-filter-list"], ["class", "dr-filter-list__item", "tabindex", "0", 3, "selected", "disabled", "keyup.enter", "click", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["tabindex", "0", 1, "dr-filter-list__item", 3, "selected", "disabled", "keyup.enter", "click"], ["itemRef", ""], ["dropdownItemContent", ""], ["data-analytics", "filter-dropdown_checkbox-0", "class", "dr-filter-list__item-checkbox", 3, "checkedStatus", "disabled", 4, "ngIf"], ["defaultDropdownItemTemplate", ""], ["data-analytics", "filter-dropdown_checkbox-0", 1, "dr-filter-list__item-checkbox", 3, "checkedStatus", "disabled"], [1, "text-ellipsis"], ["class", "dropdown__no-result", 4, "ngIf"], [1, "dropdown__no-result"], [1, "dropdown__actions"], ["theme", "secondary", "data-analytics", "filter-dropdown_button-1", "class", "dropdown__clear", 3, "click", 4, "ngIf"], ["data-analytics", "filter-dropdown_button-0", 3, "click"], ["theme", "secondary", "data-analytics", "filter-dropdown_button-1", 1, "dropdown__clear", 3, "click"]], template: function FilterDropdownComponent_Template(rf, ctx) { if (rf & 1) {
334
+ i0.ɵɵelementStart(0, "dr-button", 0);
335
+ i0.ɵɵlistener("drPopoverClose", function FilterDropdownComponent_Template_dr_button_drPopoverClose_0_listener() { return ctx.onPopoverClose(); })("click", function FilterDropdownComponent_Template_dr_button_click_0_listener($event) { return $event.stopPropagation(); });
336
+ i0.ɵɵtext(1);
337
+ i0.ɵɵelementStart(2, "span", 1);
338
+ i0.ɵɵtemplate(3, FilterDropdownComponent_ng_container_3_Template, 2, 2, "ng-container", 2);
339
+ i0.ɵɵelementEnd();
340
+ i0.ɵɵtemplate(4, FilterDropdownComponent_ng_template_4_Template, 1, 0, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
341
+ i0.ɵɵtemplate(6, FilterDropdownComponent_ng_template_6_Template, 2, 0, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor);
342
+ i0.ɵɵtemplate(8, FilterDropdownComponent_ng_template_8_Template, 1, 1, "ng-template", null, 5, i0.ɵɵtemplateRefExtractor);
343
+ i0.ɵɵelementEnd();
344
+ i0.ɵɵtemplate(10, FilterDropdownComponent_ng_template_10_Template, 2, 5, "ng-template", null, 6, i0.ɵɵtemplateRefExtractor);
345
+ } if (rf & 2) {
346
+ const _r3 = i0.ɵɵreference(7);
347
+ const _r7 = i0.ɵɵreference(11);
348
+ i0.ɵɵproperty("drPopover", _r7)("isActive", ctx.hasSelection)("disabled", ctx.disabled)("drPopoverPosition", ctx.dropdownPosition);
349
+ i0.ɵɵadvance(1);
350
+ i0.ɵɵtextInterpolate1(" ", ctx.label, ": ");
351
+ i0.ɵɵadvance(2);
352
+ i0.ɵɵproperty("ngIf", ctx.hasSelection)("ngIfElse", _r3);
353
+ } }, dependencies: [CommonModule, i1.NgClass, i1.NgForOf, i1.NgIf, i1.NgTemplateOutlet, i1.SlicePipe, DrPopoverModule, i2.DrPopoverDirective, DrDropdownModule, i3.DrDropdownComponent, i4.DrDropdownItemComponent, DrInputsModule, i5.CheckboxComponent, i6.DrInputComponent, i7.DrButtonComponent, SearchPipe,
354
+ FormsModule, i8.NgControlStatus, i8.NgModel, LetDirective,
355
+ AutofocusDirective], styles: [".filter-value[_ngcontent-%COMP%]{font-weight:600}.filter-value-all[_ngcontent-%COMP%]{font-weight:400}.dropdown__wrapper[_ngcontent-%COMP%]{min-width:250px;padding:8px 0 0}.dropdown__wrapper[_ngcontent-%COMP%] .dr-dropdown__container{padding:0;max-height:none;overflow:visible}.dropdown__wrapper[_ngcontent-%COMP%] .dr-dropdown-item.item-disabled{cursor:not-allowed}.dropdown__wrapper[_ngcontent-%COMP%] .dr-filter-list[_ngcontent-%COMP%]{overflow:auto;display:block;max-height:180px}.dropdown__wrapper[_ngcontent-%COMP%] .dr-filter-list__item[_ngcontent-%COMP%]{margin-bottom:4px}.dropdown__wrapper[_ngcontent-%COMP%] .dr-filter-list__item[_ngcontent-%COMP%] .dr-dropdown-item{padding:4px 16px;height:auto}.dropdown__wrapper[_ngcontent-%COMP%] .dr-filter-list__item[_ngcontent-%COMP%] .dr-dropdown-item .text-ellipsis{text-overflow:ellipsis;overflow:hidden}.dropdown__wrapper[_ngcontent-%COMP%] .dr-filter-list__item-checkbox[_ngcontent-%COMP%]{margin-right:4px;pointer-events:none}.dropdown__wrapper[_ngcontent-%COMP%] .dr-filter-list__item-checkbox[_ngcontent-%COMP%] label input+span{margin:0}.dropdown__wrapper[_ngcontent-%COMP%] .dr-filter-list__item-checkbox[_ngcontent-%COMP%] label input+span:before{margin:3px}.dropdown__search[_ngcontent-%COMP%]{padding:4px 8px}.dropdown__header[_ngcontent-%COMP%]{display:flex;align-items:center;margin:2px 0;padding:4px 16px;font-size:12px;line-height:20px;white-space:nowrap}.dropdown__header-title[_ngcontent-%COMP%]{flex-grow:1;overflow:hidden;text-overflow:ellipsis;color:#6d6e6f;text-transform:uppercase}.dropdown__header-select-all[_ngcontent-%COMP%]{color:#4646ce;margin-left:8px}.dropdown__actions[_ngcontent-%COMP%]{gap:8px;padding:8px 16px;display:flex;justify-content:flex-end;border-top:1px solid #dbdee3}.dropdown__no-result[_ngcontent-%COMP%]{padding:4px 16px 16px}"], changeDetection: 0 }); }
356
+ }
357
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FilterDropdownComponent, [{
358
+ type: Component,
359
+ args: [{ selector: 'dr-filter-dropdown', standalone: true, imports: [
360
+ CommonModule,
361
+ DrPopoverModule,
362
+ DrDropdownModule,
363
+ DrInputsModule,
364
+ SearchPipe,
365
+ FormsModule,
366
+ LetDirective,
367
+ AutofocusDirective,
368
+ DrButtonComponent,
369
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<dr-button\n theme=\"dropdown\"\n iconAfter=\"dr-icon-arrow-down\"\n iconAfterSize=\"18\"\n [drPopover]=\"popover\"\n (drPopoverClose)=\"onPopoverClose()\"\n (click)=\"$event.stopPropagation()\"\n [isActive]=\"hasSelection\"\n [disabled]=\"disabled\"\n [drPopoverPosition]=\"dropdownPosition\">\n {{ label }}:\n\n <span class=\"filter-value\">\n <ng-container *ngIf=\"hasSelection; else allTemplate\">\n <ng-container *ngIf=\"selectedArr.length <= showManyLimit; else manyTemplate\">\n <ng-container *ngFor=\"let item of selectedArr | slice: 0 : showInLabelLimit; let i = index\">\n <ng-container *ngIf=\"i\">,</ng-container>\n <ng-container\n [ngTemplateOutlet]=\"labelItemTemplate || defaultLabelTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"selectedArr.length > showInLabelLimit\">\n + {{ selectedArr.length - showInLabelLimit }}</ng-container\n >\n </ng-container>\n </ng-container>\n </span>\n <ng-template #manyTemplate>Many</ng-template>\n <ng-template #allTemplate><span class=\"filter-value-all\">All</span></ng-template>\n <ng-template #defaultLabelTemplate let-item>{{ _item(item) }}</ng-template>\n</dr-button>\n\n<ng-template #popover let-close=\"closePopover\">\n <div\n class=\"dropdown__wrapper\"\n [ngClass]=\"dropdownClass\"\n tabindex=\"0\"\n *ngLet=\"items | search: search : searchBy as filteredItems\">\n <div class=\"dropdown__search\" *ngIf=\"showSearch\">\n <dr-input\n data-analytics=\"filter-dropdown_input-0\"\n drAutofocus\n #searchRef\n [class.with-value]=\"search\"\n type=\"search\"\n tabindex=\"0\"\n placeholder=\"Search\"\n [clearable]=\"true\"\n [(ngModel)]=\"search\" />\n </div>\n\n <div class=\"dropdown__header\">\n <div class=\"dropdown__header-title\">Filter by {{ label }}</div>\n <a *ngIf=\"showSelectAll\" href=\"javascript: void(0)\" (click)=\"onSelectAll()\" class=\"dropdown__header-select-all\">{{\n isSelectedAll ? 'Select none' : 'Select all'\n }}</a>\n </div>\n\n <dr-dropdown class=\"dr-filter-list\" *ngIf=\"filteredItems.length; else noDataPlaceholder\" tabindex=\"0\">\n <dr-dropdown-item\n *ngFor=\"let item of filteredItems; trackBy: trackByFn\"\n class=\"dr-filter-list__item\"\n [selected]=\"isSelected(item)\"\n [disabled]=\"item.disabled\"\n tabindex=\"0\"\n #itemRef\n (keyup.enter)=\"!itemRef.selected && selectedChange.emit(item)\"\n (click)=\"!itemRef.disabled && onSelectedItemChanged(item, itemRef.selected, close)\">\n <ng-container dropdownItemContent>\n <dr-checkbox\n data-analytics=\"filter-dropdown_checkbox-0\"\n *ngIf=\"multiple\"\n class=\"dr-filter-list__item-checkbox\"\n [checkedStatus]=\"itemRef.selected\"\n [disabled]=\"item.disabled\" />\n <ng-container dropdownItemContent>\n <ng-container\n [ngTemplateOutlet]=\"dropdownItemTemplate || defaultDropdownItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-container>\n\n <ng-template #defaultDropdownItemTemplate>\n <span class=\"text-ellipsis\">\n {{ _item(item) }}\n </span>\n </ng-template>\n </ng-container>\n </dr-dropdown-item>\n </dr-dropdown>\n\n <ng-template #noDataPlaceholder>\n <div class=\"dropdown__no-result\" *ngIf=\"noItemsPlaceholder\">\n {{ noItemsPlaceholder }}\n </div>\n </ng-template>\n\n <div *ngIf=\"multiple\" class=\"dropdown__actions\">\n <dr-button\n *ngIf=\"clearable && hasSelection\"\n theme=\"secondary\"\n data-analytics=\"filter-dropdown_button-1\"\n class=\"dropdown__clear\"\n (click)=\"onClear(close)\">\n Clear\n </dr-button>\n <dr-button data-analytics=\"filter-dropdown_button-0\" (click)=\"onApply(close)\">Apply</dr-button>\n </div>\n </div>\n</ng-template>\n", styles: [".filter-value{font-weight:600}.filter-value-all{font-weight:400}.dropdown__wrapper{min-width:250px;padding:8px 0 0}.dropdown__wrapper::ng-deep .dr-dropdown__container{padding:0;max-height:none;overflow:visible}.dropdown__wrapper::ng-deep .dr-dropdown-item.item-disabled{cursor:not-allowed}.dropdown__wrapper .dr-filter-list{overflow:auto;display:block;max-height:180px}.dropdown__wrapper .dr-filter-list__item{margin-bottom:4px}.dropdown__wrapper .dr-filter-list__item::ng-deep .dr-dropdown-item{padding:4px 16px;height:auto}.dropdown__wrapper .dr-filter-list__item::ng-deep .dr-dropdown-item .text-ellipsis{text-overflow:ellipsis;overflow:hidden}.dropdown__wrapper .dr-filter-list__item-checkbox{margin-right:4px;pointer-events:none}.dropdown__wrapper .dr-filter-list__item-checkbox::ng-deep label input+span{margin:0}.dropdown__wrapper .dr-filter-list__item-checkbox::ng-deep label input+span:before{margin:3px}.dropdown__search{padding:4px 8px}.dropdown__header{display:flex;align-items:center;margin:2px 0;padding:4px 16px;font-size:12px;line-height:20px;white-space:nowrap}.dropdown__header-title{flex-grow:1;overflow:hidden;text-overflow:ellipsis;color:#6d6e6f;text-transform:uppercase}.dropdown__header-select-all{color:#4646ce;margin-left:8px}.dropdown__actions{gap:8px;padding:8px 16px;display:flex;justify-content:flex-end;border-top:1px solid #dbdee3}.dropdown__no-result{padding:4px 16px 16px}\n"] }]
370
+ }], null, { dropdownItemTemplate: [{
371
+ type: ContentChild,
372
+ args: ['dropdownItemTemplate', { read: TemplateRef }]
373
+ }], labelItemTemplate: [{
374
+ type: ContentChild,
375
+ args: ['labelItemTemplate', { read: TemplateRef }]
376
+ }], selectedChange: [{
377
+ type: Output
378
+ }], disabled: [{
379
+ type: Input,
380
+ args: [{ transform: booleanAttribute }]
381
+ }], items: [{
382
+ type: Input,
383
+ args: [{ required: true }]
384
+ }], label: [{
385
+ type: Input,
386
+ args: [{ required: true }]
387
+ }], selectedUser: [{
388
+ type: Input
389
+ }], users: [{
390
+ type: Input
391
+ }], noItemsPlaceholder: [{
392
+ type: Input
393
+ }], dropdownClass: [{
394
+ type: Input
395
+ }], dropdownPosition: [{
396
+ type: Input
397
+ }], bindValue: [{
398
+ type: Input
399
+ }], displayValue: [{
400
+ type: Input
401
+ }], searchBy: [{
402
+ type: Input
403
+ }], multiple: [{
404
+ type: Input,
405
+ args: [{ transform: booleanAttribute }]
406
+ }], clearable: [{
407
+ type: Input,
408
+ args: [{ transform: booleanAttribute }]
409
+ }], trackBy: [{
410
+ type: Input
411
+ }], showSearchLimit: [{
412
+ type: Input
413
+ }], showManyLimit: [{
414
+ type: Input
415
+ }], showInLabelLimit: [{
416
+ type: Input
417
+ }], selected: [{
418
+ type: Input,
419
+ args: [{ required: true }]
420
+ }] }); })();
421
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGFyYWlsc3NoYXJlZC9zcmMvbGliL2ZpbHRlci1kcm9wZG93bi9maWx0ZXItZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZmlsdGVyLWRyb3Bkb3duL2ZpbHRlci1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFdBQVcsR0FDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFjLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7Ozs7OztJQ0RyQyw2QkFBd0I7SUFBQSxpQkFBQztJQUFBLDBCQUFlOzs7O0lBRDVDLDZCQUE0RjtJQUN4Rix1SUFBd0M7SUFDeEMsMkJBR2U7SUFDbkIsMEJBQWU7Ozs7OztJQUxJLGVBQU87SUFBUCw0QkFBTztJQUVs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V0FBVyxFQUFFO1lBSTNELGlCQUFpQjtrQkFEaEIsWUFBWTttQkFBQyxtQkFBbUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7WUFJL0MsY0FBYztrQkFEdEIsTUFBTTtZQUlQLFFBQVE7a0JBRFAsS0FBSzttQkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtZQUl0QyxLQUFLO2tCQURKLEtBQUs7bUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBSXpCLEtBQUs7a0JBREosS0FBSzttQkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7WUFHaEIsWUFBWTtrQkFBcEIsS0FBSztZQUNHLEtBQUs7a0JBQWIsS0FBSztZQUdOLGtCQUFrQjtrQkFEakIsS0FBSztZQUlOLGFBQWE7a0JBRFosS0FBSztZQUlOLGdCQUFnQjtrQkFEZixLQUFLO1lBSU4sU0FBUztrQkFEUixLQUFLO1lBSU4sWUFBWTtrQkFEWCxLQUFLO1lBSU4sUUFBUTtrQkFEUCxLQUFLO1lBSU4sUUFBUTtrQkFEUCxLQUFLO21CQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO1lBSXRDLFNBQVM7a0JBRFIsS0FBSzttQkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtZQUl0QyxPQUFPO2tCQUROLEtBQUs7WUFHRyxlQUFlO2tCQUF2QixLQUFLO1lBRUcsYUFBYTtrQkFBckIsS0FBSztZQUVHLGdCQUFnQjtrQkFBeEIsS0FBSztZQUdGLFFBQVE7a0JBRFgsS0FBSzttQkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERySW5wdXRzTW9kdWxlIH0gZnJvbSAnLi4vZHItaW5wdXRzL2RyLWlucHV0cy5tb2R1bGUnO1xuaW1wb3J0IHsgRHJEcm9wZG93bk1vZHVsZSB9IGZyb20gJy4uL2RyLWRyb3Bkb3duL2RyLWRyb3Bkb3duLm1vZHVsZSc7XG5pbXBvcnQgeyBEclBvcG92ZXJNb2R1bGUgfSBmcm9tICcuLi9kci1wb3BvdmVyL2RyLXBvcG92ZXIubW9kdWxlJztcbmltcG9ydCB7IERyQnV0dG9uQ29tcG9uZW50LCBFbFBvc2l0aW9uLCBMZXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9wdWJsaWMtYXBpJztcbmltcG9ydCB7IEF1dG9mb2N1c0RpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYXV0b2ZvY3VzL2F1dG9mb2N1cy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2VhcmNoUGlwZSB9IGZyb20gJy4uL3BpcGVzL3NlYXJjaC9zZWFyY2gucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZHItZmlsdGVyLWRyb3Bkb3duJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBEclBvcG92ZXJNb2R1bGUsXG4gICAgICAgIERyRHJvcGRvd25Nb2R1bGUsXG4gICAgICAgIERySW5wdXRzTW9kdWxlLFxuICAgICAgICBTZWFyY2hQaXBlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTGV0RGlyZWN0aXZlLFxuICAgICAgICBBdXRvZm9jdXNEaXJlY3RpdmUsXG4gICAgICAgIERyQnV0dG9uQ29tcG9uZW50LFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLWRyb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlckRyb3Bkb3duQ29tcG9uZW50PFQgPSBhbnk+IHtcbiAgICBAQ29udGVudENoaWxkKCdkcm9wZG93bkl0ZW1UZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBkcm9wZG93bkl0ZW1UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBUW10gfT47XG5cbiAgICBAQ29udGVudENoaWxkKCdsYWJlbEl0ZW1UZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBsYWJlbEl0ZW1UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBUIH0+O1xuXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFQgfCBUW10gfCBudWxsPigpO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgaXRlbXM6IFRbXSA9IFtdO1xuXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBsYWJlbCE6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIHNlbGVjdGVkVXNlcjogVFtdIHwgbnVsbCA9IG51bGw7XG4gICAgQElucHV0KCkgdXNlcnM6IFRbXSA9IFtdO1xuXG4gICAgQElucHV0KClcbiAgICBub0l0ZW1zUGxhY2Vob2xkZXIgPSAnTm8gaXRlbXMgZm91bmQnO1xuXG4gICAgQElucHV0KClcbiAgICBkcm9wZG93bkNsYXNzID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIGRyb3Bkb3duUG9zaXRpb246IEVsUG9zaXRpb24gPSAnYm90dG9tLXJpZ2h0JztcblxuICAgIEBJbnB1dCgpXG4gICAgYmluZFZhbHVlIToga2V5b2YgVDtcblxuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheVZhbHVlIToga2V5b2YgVDtcblxuICAgIEBJbnB1dCgpXG4gICAgc2VhcmNoQnk6IChrZXlvZiBUKVtdID0gW107XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBtdWx0aXBsZSA9IGZhbHNlO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgY2xlYXJhYmxlID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHRyYWNrQnk6IGtleW9mIFQgfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpIHNob3dTZWFyY2hMaW1pdCA9IDEwO1xuXG4gICAgQElucHV0KCkgc2hvd01hbnlMaW1pdCA9IDEyO1xuXG4gICAgQElucHV0KCkgc2hvd0luTGFiZWxMaW1pdCA9IDM7XG5cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIHNldCBzZWxlY3RlZCh2YWx1ZTogVCB8IFRbXSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRPcmlnaW5hbCA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZCgpOiBUIHwgVFtdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZWxlY3RlZDogVCB8IFRbXSB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRPcmlnaW5hbDogVCB8IFRbXSB8IG51bGwgPSBudWxsO1xuXG4gICAgc2VhcmNoID0gJyc7XG5cbiAgICBnZXQgc2hvd1NlYXJjaCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMubGVuZ3RoID4gdGhpcy5zaG93U2VhcmNoTGltaXQ7XG4gICAgfVxuXG4gICAgZ2V0IHNob3dTZWxlY3RBbGwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gdGhpcy5zaG93U2VhcmNoTGltaXQ7XG4gICAgfVxuXG4gICAgZ2V0IGlzU2VsZWN0ZWRBbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlICYmIHRoaXMuc2VsZWN0ZWQgJiYgKHRoaXMuc2VsZWN0ZWQgYXMgVFtdKS5sZW5ndGggPT09IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZEFycigpOiBUW10ge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWQpIHJldHVybiBbXTtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RlZCkgPyB0aGlzLnNlbGVjdGVkIDogW3RoaXMuc2VsZWN0ZWRdO1xuICAgIH1cblxuICAgIGdldCBoYXNTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQXJyLmxlbmd0aCA+IDAgJiYgdGhpcy5zZWxlY3RlZEFyci5sZW5ndGggPCB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICB9XG5cbiAgICBzbGljZUFycmF5KHNlbGVjdGVkOiBUW10pIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkLnNsaWNlKDAsIDMpO1xuICAgIH1cblxuICAgIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBUKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWNrQnkgPyBpdGVtW3RoaXMudHJhY2tCeV0gOiBpbmRleDtcbiAgICB9XG5cbiAgICBfaXRlbShpdGVtOiBUIHwgbnVsbCkge1xuICAgICAgICByZXR1cm4gaXRlbT8uW3RoaXMuYmluZFZhbHVlXSB8fCBpdGVtO1xuICAgIH1cblxuICAgIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlZChpdGVtOiBULCBpc1NlbGVjdGVkOiBib29sZWFuLCBjbG9zZVBvcG92ZXI6ICgpID0+IHZvaWQpIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkID0gaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgID8gWy4uLih0aGlzLnNlbGVjdGVkIGFzIFRbXSkuZmlsdGVyKChlbCkgPT4gdGhpcy5faXRlbShlbCkgIT09IHRoaXMuX2l0ZW0oaXRlbSkpXVxuICAgICAgICAgICAgICAgIDogWy4uLih0aGlzLnNlbGVjdGVkIGFzIFRbXSksIGl0ZW1dO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkID0gaXRlbTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KGl0ZW0pO1xuICAgICAgICBjbG9zZVBvcG92ZXIoKTtcbiAgICB9XG5cbiAgICBvblNlbGVjdEFsbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZEFsbCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkID0gWy4uLnRoaXMuaXRlbXNdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNTZWxlY3RlZChpdGVtOiBUIHwgbnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgICAgPyAodGhpcy5zZWxlY3RlZCBhcyBUW10pPy5zb21lKChlbCkgPT4gZWwgPT09IGl0ZW0gfHwgdGhpcy5faXRlbShlbCkgPT09IHRoaXMuX2l0ZW0oaXRlbSkpXG4gICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWQgPT09IGl0ZW0gfHwgdGhpcy5faXRlbSh0aGlzLnNlbGVjdGVkIGFzIFQpID09PSB0aGlzLl9pdGVtKGl0ZW0pO1xuICAgIH1cblxuICAgIG9uQXBwbHkoY2xvc2VQb3BvdmVyOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZCk7XG4gICAgICAgIGNsb3NlUG9wb3ZlcigpO1xuICAgIH1cblxuICAgIG9uQ2xlYXIoY2xvc2U6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBudWxsO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZE9yaWdpbmFsID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkID0gW107XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZE9yaWdpbmFsID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkKTtcbiAgICAgICAgY2xvc2UoKTtcbiAgICB9XG5cbiAgICBvblBvcG92ZXJDbG9zZSgpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZE9yaWdpbmFsO1xuICAgIH1cbn1cbiIsIjxkci1idXR0b25cbiAgICB0aGVtZT1cImRyb3Bkb3duXCJcbiAgICBpY29uQWZ0ZXI9XCJkci1pY29uLWFycm93LWRvd25cIlxuICAgIGljb25BZnRlclNpemU9XCIxOFwiXG4gICAgW2RyUG9wb3Zlcl09XCJwb3BvdmVyXCJcbiAgICAoZHJQb3BvdmVyQ2xvc2UpPVwib25Qb3BvdmVyQ2xvc2UoKVwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgW2lzQWN0aXZlXT1cImhhc1NlbGVjdGlvblwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbZHJQb3BvdmVyUG9zaXRpb25dPVwiZHJvcGRvd25Qb3NpdGlvblwiPlxuICAgIHt7IGxhYmVsIH19OlxuXG4gICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItdmFsdWVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc1NlbGVjdGlvbjsgZWxzZSBhbGxUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQXJyLmxlbmd0aCA8PSBzaG93TWFueUxpbWl0OyBlbHNlIG1hbnlUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWRBcnIgfCBzbGljZTogMCA6IHNob3dJbkxhYmVsTGltaXQ7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlcIj4sPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsSXRlbVRlbXBsYXRlIHx8IGRlZmF1bHRMYWJlbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZEFyci5sZW5ndGggPiBzaG93SW5MYWJlbExpbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICsge3sgc2VsZWN0ZWRBcnIubGVuZ3RoIC0gc2hvd0luTGFiZWxMaW1pdCB9fTwvbmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvc3Bhbj5cbiAgICA8bmctdGVtcGxhdGUgI21hbnlUZW1wbGF0ZT5NYW55PC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2FsbFRlbXBsYXRlPjxzcGFuIGNsYXNzPVwiZmlsdGVyLXZhbHVlLWFsbFwiPkFsbDwvc3Bhbj48L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdExhYmVsVGVtcGxhdGUgbGV0LWl0ZW0+e3sgX2l0ZW0oaXRlbSkgfX08L25nLXRlbXBsYXRlPlxuPC9kci1idXR0b24+XG5cbjxuZy10ZW1wbGF0ZSAjcG9wb3ZlciBsZXQtY2xvc2U9XCJjbG9zZVBvcG92ZXJcIj5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZHJvcGRvd25fX3dyYXBwZXJcIlxuICAgICAgICBbbmdDbGFzc109XCJkcm9wZG93bkNsYXNzXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgKm5nTGV0PVwiaXRlbXMgfCBzZWFyY2g6IHNlYXJjaCA6IHNlYXJjaEJ5IGFzIGZpbHRlcmVkSXRlbXNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duX19zZWFyY2hcIiAqbmdJZj1cInNob3dTZWFyY2hcIj5cbiAgICAgICAgICAgIDxkci1pbnB1dFxuICAgICAgICAgICAgICAgIGRhdGEtYW5hbHl0aWNzPVwiZmlsdGVyLWRyb3Bkb3duX2lucHV0LTBcIlxuICAgICAgICAgICAgICAgIGRyQXV0b2ZvY3VzXG4gICAgICAgICAgICAgICAgI3NlYXJjaFJlZlxuICAgICAgICAgICAgICAgIFtjbGFzcy53aXRoLXZhbHVlXT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXG4gICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFwiIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bl9faGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25fX2hlYWRlci10aXRsZVwiPkZpbHRlciBieSB7eyBsYWJlbCB9fTwvZGl2PlxuICAgICAgICAgICAgPGEgKm5nSWY9XCJzaG93U2VsZWN0QWxsXCIgaHJlZj1cImphdmFzY3JpcHQ6IHZvaWQoMClcIiAoY2xpY2spPVwib25TZWxlY3RBbGwoKVwiIGNsYXNzPVwiZHJvcGRvd25fX2hlYWRlci1zZWxlY3QtYWxsXCI+e3tcbiAgICAgICAgICAgICAgICBpc1NlbGVjdGVkQWxsID8gJ1NlbGVjdCBub25lJyA6ICdTZWxlY3QgYWxsJ1xuICAgICAgICAgICAgfX08L2E+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkci1kcm9wZG93biBjbGFzcz1cImRyLWZpbHRlci1saXN0XCIgKm5nSWY9XCJmaWx0ZXJlZEl0ZW1zLmxlbmd0aDsgZWxzZSBub0RhdGFQbGFjZWhvbGRlclwiIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgPGRyLWRyb3Bkb3duLWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZEl0ZW1zOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHItZmlsdGVyLWxpc3RfX2l0ZW1cIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJpc1NlbGVjdGVkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAjaXRlbVJlZlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCIhaXRlbVJlZi5zZWxlY3RlZCAmJiBzZWxlY3RlZENoYW5nZS5lbWl0KGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiIWl0ZW1SZWYuZGlzYWJsZWQgJiYgb25TZWxlY3RlZEl0ZW1DaGFuZ2VkKGl0ZW0sIGl0ZW1SZWYuc2VsZWN0ZWQsIGNsb3NlKVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgZHJvcGRvd25JdGVtQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPGRyLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWFuYWx5dGljcz1cImZpbHRlci1kcm9wZG93bl9jaGVja2JveC0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkci1maWx0ZXItbGlzdF9faXRlbS1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZFN0YXR1c109XCJpdGVtUmVmLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBkcm9wZG93bkl0ZW1Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRyb3Bkb3duSXRlbVRlbXBsYXRlIHx8IGRlZmF1bHREcm9wZG93bkl0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0RHJvcGRvd25JdGVtVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBfaXRlbShpdGVtKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kci1kcm9wZG93bi1pdGVtPlxuICAgICAgICA8L2RyLWRyb3Bkb3duPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9EYXRhUGxhY2Vob2xkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25fX25vLXJlc3VsdFwiICpuZ0lmPVwibm9JdGVtc1BsYWNlaG9sZGVyXCI+XG4gICAgICAgICAgICAgICAge3sgbm9JdGVtc1BsYWNlaG9sZGVyIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwibXVsdGlwbGVcIiBjbGFzcz1cImRyb3Bkb3duX19hY3Rpb25zXCI+XG4gICAgICAgICAgICA8ZHItYnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjbGVhcmFibGUgJiYgaGFzU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICB0aGVtZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgZGF0YS1hbmFseXRpY3M9XCJmaWx0ZXItZHJvcGRvd25fYnV0dG9uLTFcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd25fX2NsZWFyXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGVhcihjbG9zZSlcIj5cbiAgICAgICAgICAgICAgICBDbGVhclxuICAgICAgICAgICAgPC9kci1idXR0b24+XG4gICAgICAgICAgICA8ZHItYnV0dG9uIGRhdGEtYW5hbHl0aWNzPVwiZmlsdGVyLWRyb3Bkb3duX2J1dHRvbi0wXCIgKGNsaWNrKT1cIm9uQXBwbHkoY2xvc2UpXCI+QXBwbHk8L2RyLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,36 @@
1
+ import { Pipe } from '@angular/core';
2
+ import { filter, includes, isObject, isString, keys as _keys, some } from 'lodash';
3
+ import * as i0 from "@angular/core";
4
+ export class SearchPipe {
5
+ transform(list, value, fields) {
6
+ return SearchPipe.search(list, value, fields);
7
+ }
8
+ static search(list, value, fields) {
9
+ if (!isString(value) || !list?.length)
10
+ return list;
11
+ if (isObject(list[0]) && !fields?.length)
12
+ return list;
13
+ const searchValue = value.toLocaleLowerCase();
14
+ if (isString(list[0])) {
15
+ return filter(list, (item) => item && includes(item.toLowerCase(), searchValue));
16
+ }
17
+ if (isObject(list[0]) && fields.length) {
18
+ return filter(list, (item) => {
19
+ const keys = _keys(item);
20
+ return (some(keys, (key) => includes(fields, key) &&
21
+ (item[key] || item[key] !== 'boolean') &&
22
+ includes(String(item[key]).toLowerCase(), value.toLocaleLowerCase())) || item.system === 1);
23
+ });
24
+ }
25
+ }
26
+ /** @nocollapse */ static { this.ɵfac = function SearchPipe_Factory(t) { return new (t || SearchPipe)(); }; }
27
+ /** @nocollapse */ static { this.ɵpipe = /** @pureOrBreakMyCode */ i0.ɵɵdefinePipe({ name: "search", type: SearchPipe, pure: true, standalone: true }); }
28
+ }
29
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SearchPipe, [{
30
+ type: Pipe,
31
+ args: [{
32
+ name: 'search',
33
+ standalone: true,
34
+ }]
35
+ }], null, null); })();
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9waXBlcy9zZWFyY2gvc2VhcmNoLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQzs7QUFNbkYsTUFBTSxPQUFPLFVBQVU7SUFDbkIsU0FBUyxDQUFDLElBQVMsRUFBRSxLQUFjLEVBQUUsTUFBaUI7UUFDbEQsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUksSUFBUyxFQUFFLEtBQWMsRUFBRSxNQUFpQjtRQUN6RCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUNuRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFdEQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFOUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbkIsT0FBTyxNQUFNLENBQUMsSUFBZ0IsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQVEsQ0FBQztTQUN2RztRQUVELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDcEMsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3pCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDekIsT0FBTyxDQUNILElBQUksQ0FDQSxJQUFJLEVBQ0osQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNULFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO29CQUNyQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxDQUFDO29CQUN0QyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQzNFLElBQUssSUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQ2xDLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQzs4RkE3QlEsVUFBVTsrR0FBVixVQUFVOzt1RkFBVixVQUFVO2NBSnRCLElBQUk7ZUFBQztnQkFDRixJQUFJLEVBQUUsUUFBUTtnQkFDZCxVQUFVLEVBQUUsSUFBSTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpbHRlciwgaW5jbHVkZXMsIGlzT2JqZWN0LCBpc1N0cmluZywga2V5cyBhcyBfa2V5cywgc29tZSB9IGZyb20gJ2xvZGFzaCc7XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnc2VhcmNoJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hQaXBlPFQ+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKGxpc3Q6IFRbXSwgdmFsdWU/OiBzdHJpbmcsIGZpZWxkcz86IHN0cmluZ1tdKTogVFtdIHtcbiAgICAgICAgcmV0dXJuIFNlYXJjaFBpcGUuc2VhcmNoKGxpc3QsIHZhbHVlLCBmaWVsZHMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBzZWFyY2g8VD4obGlzdDogVFtdLCB2YWx1ZT86IHN0cmluZywgZmllbGRzPzogc3RyaW5nW10pOiBUW10ge1xuICAgICAgICBpZiAoIWlzU3RyaW5nKHZhbHVlKSB8fCAhbGlzdD8ubGVuZ3RoKSByZXR1cm4gbGlzdDtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxpc3RbMF0pICYmICFmaWVsZHM/Lmxlbmd0aCkgcmV0dXJuIGxpc3Q7XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoVmFsdWUgPSB2YWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmIChpc1N0cmluZyhsaXN0WzBdKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcihsaXN0IGFzIHN0cmluZ1tdLCAoaXRlbSkgPT4gaXRlbSAmJiBpbmNsdWRlcyhpdGVtLnRvTG93ZXJDYXNlKCksIHNlYXJjaFZhbHVlKSkgYXMgVFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzT2JqZWN0KGxpc3RbMF0pICYmIGZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXIobGlzdCwgKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gX2tleXMoaXRlbSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgc29tZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMoZmllbGRzLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW1ba2V5XSB8fCBpdGVtW2tleV0gIT09ICdib29sZWFuJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcyhTdHJpbmcoaXRlbVtrZXldKS50b0xvd2VyQ2FzZSgpLCB2YWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpKSxcbiAgICAgICAgICAgICAgICAgICAgKSB8fCAoaXRlbSBhcyBhbnkpLnN5c3RlbSA9PT0gMVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==