@klippa/ngx-enhancy-forms 18.33.24 → 20.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/fesm2022/klippa-ngx-enhancy-forms.mjs +167 -148
  2. package/fesm2022/klippa-ngx-enhancy-forms.mjs.map +1 -1
  3. package/index.d.ts +707 -3
  4. package/package.json +5 -7
  5. package/esm2022/klippa-ngx-enhancy-forms.mjs +0 -5
  6. package/esm2022/lib/elementIsTruncatedCb.component.mjs +0 -58
  7. package/esm2022/lib/elements/button/button.component.mjs +0 -57
  8. package/esm2022/lib/elements/checkbox/checkbox.component.mjs +0 -23
  9. package/esm2022/lib/elements/date-picker/date-picker.component.mjs +0 -108
  10. package/esm2022/lib/elements/date-time-picker/date-time-picker.component.mjs +0 -436
  11. package/esm2022/lib/elements/email/email-input.component.mjs +0 -21
  12. package/esm2022/lib/elements/file-input/file-input.component.mjs +0 -76
  13. package/esm2022/lib/elements/hour-minute-input/hour-minute-input.component.mjs +0 -90
  14. package/esm2022/lib/elements/loading-indicator/loading-indicator.component.mjs +0 -20
  15. package/esm2022/lib/elements/number-input/number-input.component.mjs +0 -31
  16. package/esm2022/lib/elements/password-field/password-field.component.mjs +0 -21
  17. package/esm2022/lib/elements/radio/radio.component.mjs +0 -34
  18. package/esm2022/lib/elements/select/select-footer/select-footer.component.mjs +0 -15
  19. package/esm2022/lib/elements/select/select.component.mjs +0 -385
  20. package/esm2022/lib/elements/sortable-grouped-items/sortable-grouped-items.component.mjs +0 -54
  21. package/esm2022/lib/elements/sortable-items/sortable-items.component.mjs +0 -189
  22. package/esm2022/lib/elements/text-area/text-area.component.mjs +0 -23
  23. package/esm2022/lib/elements/text-input/text-input.component.mjs +0 -52
  24. package/esm2022/lib/elements/toggle/toggle.component.mjs +0 -21
  25. package/esm2022/lib/elements/value-accessor-base/multiple-value-accessor-base.component.mjs +0 -61
  26. package/esm2022/lib/elements/value-accessor-base/value-accessor-base.component.mjs +0 -167
  27. package/esm2022/lib/form/form-caption/form-caption.component.mjs +0 -31
  28. package/esm2022/lib/form/form-caption-end/form-caption-end.component.mjs +0 -34
  29. package/esm2022/lib/form/form-element/form-element.component.mjs +0 -317
  30. package/esm2022/lib/form/form-error/form-error.component.mjs +0 -40
  31. package/esm2022/lib/form/form-submit-button/form-submit-button.component.mjs +0 -71
  32. package/esm2022/lib/form/form-validation-error/form-validation-error.mjs +0 -22
  33. package/esm2022/lib/form/form.component.mjs +0 -442
  34. package/esm2022/lib/material.module.mjs +0 -22
  35. package/esm2022/lib/ngx-enhancy-forms.module.mjs +0 -191
  36. package/esm2022/lib/onRender.component.mjs +0 -19
  37. package/esm2022/lib/types.mjs +0 -2
  38. package/esm2022/lib/util/angular.mjs +0 -9
  39. package/esm2022/lib/util/arrays.mjs +0 -48
  40. package/esm2022/lib/util/classes.mjs +0 -2
  41. package/esm2022/lib/util/dom.mjs +0 -15
  42. package/esm2022/lib/util/objects.mjs +0 -38
  43. package/esm2022/lib/util/values.mjs +0 -23
  44. package/esm2022/lib/validators/dateValidator.mjs +0 -6
  45. package/esm2022/lib/validators/timeValidator.mjs +0 -6
  46. package/esm2022/lib/warning-icon/warning-icon.component.mjs +0 -17
  47. package/esm2022/lib/withTooltip.component.mjs +0 -185
  48. package/esm2022/public-api.mjs +0 -38
  49. package/lib/elementIsTruncatedCb.component.d.ts +0 -14
  50. package/lib/elements/button/button.component.d.ts +0 -16
  51. package/lib/elements/checkbox/checkbox.component.d.ts +0 -8
  52. package/lib/elements/date-picker/date-picker.component.d.ts +0 -26
  53. package/lib/elements/date-time-picker/date-time-picker.component.d.ts +0 -83
  54. package/lib/elements/email/email-input.component.d.ts +0 -7
  55. package/lib/elements/file-input/file-input.component.d.ts +0 -18
  56. package/lib/elements/hour-minute-input/hour-minute-input.component.d.ts +0 -20
  57. package/lib/elements/loading-indicator/loading-indicator.component.d.ts +0 -7
  58. package/lib/elements/number-input/number-input.component.d.ts +0 -9
  59. package/lib/elements/password-field/password-field.component.d.ts +0 -7
  60. package/lib/elements/radio/radio.component.d.ts +0 -21
  61. package/lib/elements/select/select-footer/select-footer.component.d.ts +0 -7
  62. package/lib/elements/select/select.component.d.ts +0 -91
  63. package/lib/elements/sortable-grouped-items/sortable-grouped-items.component.d.ts +0 -12
  64. package/lib/elements/sortable-items/sortable-items.component.d.ts +0 -29
  65. package/lib/elements/text-area/text-area.component.d.ts +0 -9
  66. package/lib/elements/text-input/text-input.component.d.ts +0 -19
  67. package/lib/elements/toggle/toggle.component.d.ts +0 -7
  68. package/lib/elements/value-accessor-base/multiple-value-accessor-base.component.d.ts +0 -14
  69. package/lib/elements/value-accessor-base/value-accessor-base.component.d.ts +0 -50
  70. package/lib/form/form-caption/form-caption.component.d.ts +0 -11
  71. package/lib/form/form-caption-end/form-caption-end.component.d.ts +0 -12
  72. package/lib/form/form-element/form-element.component.d.ts +0 -81
  73. package/lib/form/form-error/form-error.component.d.ts +0 -15
  74. package/lib/form/form-submit-button/form-submit-button.component.d.ts +0 -21
  75. package/lib/form/form-validation-error/form-validation-error.d.ts +0 -10
  76. package/lib/form/form.component.d.ts +0 -58
  77. package/lib/material.module.d.ts +0 -11
  78. package/lib/ngx-enhancy-forms.module.d.ts +0 -41
  79. package/lib/onRender.component.d.ts +0 -8
  80. package/lib/types.d.ts +0 -16
  81. package/lib/util/angular.d.ts +0 -2
  82. package/lib/util/arrays.d.ts +0 -8
  83. package/lib/util/classes.d.ts +0 -1
  84. package/lib/util/dom.d.ts +0 -2
  85. package/lib/util/objects.d.ts +0 -1
  86. package/lib/util/values.d.ts +0 -6
  87. package/lib/validators/dateValidator.d.ts +0 -3
  88. package/lib/validators/timeValidator.d.ts +0 -3
  89. package/lib/warning-icon/warning-icon.component.d.ts +0 -6
  90. package/lib/withTooltip.component.d.ts +0 -23
  91. package/public-api.d.ts +0 -34
@@ -1,385 +0,0 @@
1
- import { Component, ContentChild, Directive, EventEmitter, Host, Inject, InjectionToken, Input, Optional, Output, TemplateRef, ViewChild } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { ValueAccessorBase } from '../value-accessor-base/value-accessor-base.component';
4
- import { isValueSet, stringIsSetAndFilled } from '../../util/values';
5
- import { awaitableForNextCycle } from "../../util/angular";
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../../form/form-element/form-element.component";
8
- import * as i2 from "@angular/forms";
9
- import * as i3 from "@angular/common";
10
- import * as i4 from "@ng-select/ng-select";
11
- export const SELECT_TRANSLATIONS = new InjectionToken('klp.form.select.translations');
12
- export class KlpSelectOptionTemplateDirective {
13
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: KlpSelectOptionTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
14
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: KlpSelectOptionTemplateDirective, selector: "[klpSelectOptionTpl]", ngImport: i0 }); }
15
- }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: KlpSelectOptionTemplateDirective, decorators: [{
17
- type: Directive,
18
- args: [{ selector: '[klpSelectOptionTpl]' }]
19
- }] });
20
- export class SelectComponent extends ValueAccessorBase {
21
- constructor(parent, controlContainer, translations, elRef, ngZone) {
22
- super(parent, controlContainer);
23
- this.parent = parent;
24
- this.controlContainer = controlContainer;
25
- this.translations = translations;
26
- this.elRef = elRef;
27
- this.ngZone = ngZone;
28
- this.orientation = 'horizontal';
29
- this.multiple = false;
30
- this.multipleDisplayedAsAmount = false;
31
- this.clearable = true;
32
- this.truncateOptions = true;
33
- this.withSeparatingLine = false;
34
- this.searchable = true;
35
- this.hasBorderLeft = true;
36
- this.hasBorderRight = true;
37
- this.dropdownPosition = null;
38
- this.dropdownAlignment = 'left';
39
- this.onSearch = new EventEmitter();
40
- this.onEndReached = new EventEmitter();
41
- this.onOpened = new EventEmitter();
42
- this.onClosed = new EventEmitter();
43
- this.onBlur = new EventEmitter();
44
- this.onClear = new EventEmitter();
45
- this.onEnterKey = new EventEmitter();
46
- this.lastItemIndexReached = -1;
47
- this.dropdownPositionToUse = 'bottom';
48
- this.isOpen = false;
49
- this.dropdownPanelOffsetX = 0;
50
- this.dropdownPanelOffsetY = 0;
51
- this.keyListener = (e) => {
52
- if (e.key === 'Enter') {
53
- this.onEnterKey.emit(e.target.value);
54
- }
55
- };
56
- this.setFixedDropdownPanelPosition = () => {
57
- const dropdownPanel = this.elRef.nativeElement.querySelector('ng-dropdown-panel');
58
- dropdownPanel.style.visibility = 'initial';
59
- if (this.orientation === 'vertical') {
60
- return;
61
- }
62
- const difference = this.anchorAbsolute.getBoundingClientRect().top - this.anchorFixed.getBoundingClientRect().top;
63
- this.dropdownPanelOffsetY = difference;
64
- dropdownPanel.style.position = 'fixed';
65
- this.setPanelOffsets();
66
- };
67
- this.setWidthBasedOnOptionsWidths = async () => {
68
- if (this.truncateOptions === false) {
69
- await awaitableForNextCycle();
70
- if (!isValueSet(this.elRef.nativeElement.querySelector('.scrollable-content'))) {
71
- const panel = this.elRef.nativeElement.querySelector('ng-dropdown-panel');
72
- panel.style.width = `${this.elRef.nativeElement.clientWidth}px`;
73
- return;
74
- }
75
- this.elRef.nativeElement.querySelector('.scrollable-content').classList.add('calculatingWidths');
76
- const paddingForScrollbar = this.getScrollbarWidth();
77
- const maxWidth = this.elRef.nativeElement.querySelector('.scrollable-content').getBoundingClientRect().width + paddingForScrollbar;
78
- this.elRef.nativeElement.querySelector('.scrollable-content').classList.remove('calculatingWidths');
79
- const dropdownPanel = this.elRef.nativeElement.querySelector('ng-dropdown-panel');
80
- if (dropdownPanel) {
81
- dropdownPanel.style.minWidth = `${this.elRef.nativeElement.clientWidth}px`;
82
- dropdownPanel.style.width = `${Math.max(this.elRef.nativeElement.clientWidth, maxWidth, dropdownPanel.getBoundingClientRect().width)}px`;
83
- await awaitableForNextCycle();
84
- const pickerWidth = this.elRef.nativeElement.getBoundingClientRect().width;
85
- const dropdownPanelWidth = dropdownPanel.getBoundingClientRect().width;
86
- const spaceLeftOfElRef = this.elRef.nativeElement.getBoundingClientRect().left;
87
- const spaceRightOfElRef = window.innerWidth - (this.elRef.nativeElement.getBoundingClientRect().width + spaceLeftOfElRef);
88
- const extraNeededSpace = dropdownPanelWidth - pickerWidth;
89
- if (this.dropdownAlignment === 'right') {
90
- if (extraNeededSpace > spaceLeftOfElRef) {
91
- this.dropdownPanelOffsetX = -spaceLeftOfElRef + 10;
92
- }
93
- else {
94
- this.dropdownPanelOffsetX = -extraNeededSpace;
95
- }
96
- }
97
- else if (extraNeededSpace > spaceRightOfElRef) {
98
- this.dropdownPanelOffsetX = -extraNeededSpace + spaceRightOfElRef - 20;
99
- }
100
- this.setPanelOffsets();
101
- }
102
- }
103
- };
104
- this.focus = () => {
105
- this.ngSelect.focus();
106
- };
107
- this.open = () => {
108
- this.ngSelect.open();
109
- };
110
- this.close = () => {
111
- this.ngSelect.close();
112
- };
113
- }
114
- ngAfterViewInit() {
115
- this.addPrefix();
116
- this.addTail();
117
- this.elRef.nativeElement.querySelector('input').addEventListener('keydown', this.keyListener);
118
- }
119
- addTail() {
120
- if (this.tailMockRef) {
121
- const container = this.elRef.nativeElement.querySelector('.ng-select-container');
122
- const arrowWrapper = this.elRef.nativeElement.querySelector('.ng-arrow-wrapper');
123
- container.insertBefore(this.tailMockRef.nativeElement, arrowWrapper);
124
- }
125
- }
126
- addPrefix() {
127
- if (stringIsSetAndFilled(this.prefix)) {
128
- const container = this.elRef.nativeElement.querySelector('.ng-select-container');
129
- const newNode = document.createElement('div');
130
- newNode.className = 'prefix';
131
- newNode.innerText = this.prefix;
132
- container.insertBefore(newNode, container.children[0]);
133
- }
134
- }
135
- async ngOnChanges(changes) {
136
- if (this.isOpen && isValueSet(changes.options)) {
137
- this.lastItemIndexReached = -1;
138
- // waiting for the thing to render until we fire the event
139
- await awaitableForNextCycle();
140
- await this.setWidthBasedOnOptionsWidths();
141
- }
142
- if (changes.dropdownPosition) {
143
- this.dropdownPositionToUse = this.dropdownPosition;
144
- }
145
- if (changes.prefix) {
146
- const container = this.elRef?.nativeElement?.querySelector('.ng-select-container .prefix');
147
- if (isValueSet(container)) {
148
- container.innerText = changes.prefix.currentValue;
149
- }
150
- }
151
- }
152
- getDefaultTranslation(key) {
153
- switch (key) {
154
- case 'placeholder':
155
- return () => 'Pick an option';
156
- case 'amountSelected':
157
- return (amount) => `${amount} selected`;
158
- }
159
- }
160
- getTranslation(key, params = null) {
161
- if (key === 'placeholder' && stringIsSetAndFilled(this.placeholder)) {
162
- return this.placeholder;
163
- }
164
- return this.translations?.[key]?.(params) ?? this.getDefaultTranslation(key)(params);
165
- }
166
- onScroll(lastItemIndex) {
167
- const visibleItems = this.ngSelect?.itemsList?.filteredItems?.length ?? 0;
168
- if (this.lastItemIndexReached < lastItemIndex && lastItemIndex === visibleItems) {
169
- this.onEndReached.emit();
170
- }
171
- this.lastItemIndexReached = Math.max(lastItemIndex, this.lastItemIndexReached);
172
- this.setWidthBasedOnOptionsWidths();
173
- }
174
- searchQueryChanged(searchQuery) {
175
- this.onSearch.emit(searchQuery);
176
- }
177
- async onOpen() {
178
- this.isOpen = true;
179
- if (this.orientation === 'horizontal' && !isValueSet(this.dropdownPosition)) {
180
- this.determineDropdownPosition();
181
- }
182
- if (!this.truncateOptions) {
183
- this.createAnchors();
184
- }
185
- // waiting for the thing to render until we fire the event
186
- await awaitableForNextCycle();
187
- this.onOpened.emit();
188
- await this.setWidthBasedOnOptionsWidths();
189
- if (!this.truncateOptions) {
190
- this.setFixedDropdownPanelPosition();
191
- this.ngZone.runOutsideAngular(() => {
192
- [...this.getAllLimitingContainers(), window].forEach(e => e.addEventListener('scroll', this.setFixedDropdownPanelPosition));
193
- });
194
- }
195
- }
196
- createAnchors() {
197
- this.anchorAbsolute = document.createElement('div');
198
- if (this.dropdownPositionToUse === 'top') {
199
- this.elRef.nativeElement.prepend(this.anchorAbsolute);
200
- }
201
- else {
202
- this.elRef.nativeElement.appendChild(this.anchorAbsolute);
203
- }
204
- this.anchorFixed = document.createElement('div');
205
- this.anchorFixed.style.position = 'fixed';
206
- this.elRef.nativeElement.appendChild(this.anchorFixed);
207
- }
208
- removeAnchors() {
209
- this.elRef.nativeElement.removeChild(this.anchorAbsolute);
210
- this.elRef.nativeElement.removeChild(this.anchorFixed);
211
- }
212
- getAllLimitingContainers() {
213
- const result = [];
214
- let current = this.elRef.nativeElement;
215
- while (current.parentElement) {
216
- if (this.isLimitingContainer(current.parentElement)) {
217
- result.push(current.parentElement);
218
- }
219
- current = current.parentElement;
220
- }
221
- return result;
222
- }
223
- setPanelOffsets() {
224
- const dropdownPanel = this.elRef.nativeElement.querySelector('ng-dropdown-panel');
225
- if (!isValueSet(dropdownPanel)) {
226
- return;
227
- }
228
- const scrollPositionOffset = `translate(${this.dropdownPanelOffsetX}px, ${this.dropdownPanelOffsetY}px)`;
229
- const dropdownPositionOffset = this.dropdownPositionToUse === 'top' ? `translateY(-100%) translateY(-8px)` : 'translateY(8px)';
230
- if (this.orientation === 'vertical') {
231
- dropdownPanel.style.transformOrigin = 'top left';
232
- dropdownPanel.style.transform = `rotate(90deg) translateY(-${this.elRef.nativeElement.getBoundingClientRect().width}px)`;
233
- }
234
- else {
235
- dropdownPanel.style.transform = [scrollPositionOffset, dropdownPositionOffset].join(' ');
236
- }
237
- }
238
- determineDropdownPosition() {
239
- const bottomSpace = window.innerHeight - this.elRef.nativeElement.getBoundingClientRect().top;
240
- if (bottomSpace >= 330) {
241
- this.dropdownPositionToUse = 'bottom';
242
- }
243
- else {
244
- this.dropdownPositionToUse = 'top';
245
- }
246
- }
247
- isLimitingContainer(element) {
248
- const style = getComputedStyle(element);
249
- if (style.overflowY === 'auto') {
250
- return true;
251
- }
252
- if (style.overflow === 'auto') {
253
- return true;
254
- }
255
- if (style.overflowY === 'scroll') {
256
- return true;
257
- }
258
- if (style.overflow === 'scroll') {
259
- return true;
260
- }
261
- return false;
262
- }
263
- onClose() {
264
- [...this.getAllLimitingContainers(), window].forEach(e => e.removeEventListener('scroll', this.setFixedDropdownPanelPosition));
265
- // Give angular a second to render the closed situation before emitting the close event
266
- setTimeout(() => {
267
- this.isOpen = false;
268
- if (!this.truncateOptions) {
269
- this.removeAnchors();
270
- }
271
- this.onClosed.emit();
272
- });
273
- }
274
- onFocus() {
275
- const singleValueInputElement = this.elRef.nativeElement.querySelector('.ng-select-single .ng-input');
276
- const prefixElement = this.elRef.nativeElement.querySelector('.ng-select-single .prefix');
277
- if (isValueSet(singleValueInputElement) && isValueSet(prefixElement)) {
278
- const prefixWidth = prefixElement.getBoundingClientRect().width;
279
- const spacing = '0.4rem';
280
- singleValueInputElement.style.left = `calc(${prefixWidth}px + ${spacing})`;
281
- }
282
- else if (isValueSet(singleValueInputElement)) {
283
- singleValueInputElement.style.left = `0px`;
284
- }
285
- }
286
- getScrollbarWidth() {
287
- // Create a temporary div element
288
- const div = document.createElement('div');
289
- // Set the style to measure the scrollbar
290
- div.style.overflow = 'scroll'; // Enable scrollbar
291
- div.style.width = '100px'; // Set a fixed width
292
- div.style.height = '100px'; // Set a fixed height
293
- div.style.position = 'absolute'; // Prevent the element from taking space in the layout
294
- div.style.top = '-9999px'; // Position it out of the viewport
295
- // Append the element to the body
296
- document.body.appendChild(div);
297
- // Get the width of the scrollbar
298
- const scrollbarWidth = div.offsetWidth - div.clientWidth;
299
- // Remove the temporary element from the DOM
300
- document.body.removeChild(div);
301
- return scrollbarWidth;
302
- }
303
- ngOnDestroy() {
304
- super.ngOnDestroy();
305
- this.elRef.nativeElement?.querySelector('input')?.removeEventListener('keydown', this.keyListener);
306
- }
307
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: SelectComponent, deps: [{ token: i1.FormElementComponent, host: true, optional: true }, { token: i2.ControlContainer, host: true, optional: true }, { token: SELECT_TRANSLATIONS, optional: true }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
308
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: SelectComponent, selector: "klp-form-select", inputs: { placeholder: "placeholder", prefix: "prefix", orientation: "orientation", options: "options", multiple: "multiple", multipleDisplayedAsAmount: "multipleDisplayedAsAmount", clearable: "clearable", truncateOptions: "truncateOptions", withSeparatingLine: "withSeparatingLine", searchable: "searchable", hasBorderLeft: "hasBorderLeft", hasBorderRight: "hasBorderRight", dropdownPosition: "dropdownPosition", dropdownAlignment: "dropdownAlignment", customSearchFn: "customSearchFn", footerElement: "footerElement" }, outputs: { onSearch: "onSearch", onEndReached: "onEndReached", onOpened: "onOpened", onClosed: "onClosed", onBlur: "onBlur", onClear: "onClear", onEnterKey: "onEnterKey" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: SelectComponent, multi: true }], queries: [{ propertyName: "customOptionTpl", first: true, predicate: KlpSelectOptionTemplateDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "ngSelect", first: true, predicate: ["ngSelect"], descendants: true }, { propertyName: "tailRef", first: true, predicate: ["tailRef"], descendants: true }, { propertyName: "tailMockRef", first: true, predicate: ["tailMockRef"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-select\n\t#ngSelect\n\t[placeholder]=\"getTranslation('placeholder')\"\n\tbindLabel=\"name\"\n\tbindValue=\"id\"\n\t[items]=\"options\"\n\t[clearable]=\"clearable\"\n\t[(ngModel)]=\"innerValue\"\n\t[ngClass]=\"{showErrors: isInErrorState(), verticalOrientation: orientation === 'vertical', truncateOptions: truncateOptions, nonTruncatedOptions: !truncateOptions, withSeparatingLine: withSeparatingLine, noBorderLeft: !hasBorderLeft, noBorderRight: !hasBorderRight}\"\n\t(change)=\"setInnerValueAndNotify(innerValue)\"\n\t[multiple]=\"multiple\"\n\t[disabled]=\"disabled\"\n\t(blur)=\"touch(); onBlur.emit()\"\n\t(clear)=\"onClear.emit()\"\n\t(search)=\"searchQueryChanged($event.term)\"\n\t[searchable]=\"searchable\"\n\t[dropdownPosition]=\"dropdownPositionToUse\"\n\t[searchFn]=\"customSearchFn\"\n\t[selectOnTab]=\"true\"\n\t[virtualScroll]=\"true\"\n\t(scroll)=\"onScroll($event.end)\"\n\t(open)=\"onOpen()\"\n\t(close)=\"onClose()\"\n\t(focus)=\"onFocus()\"\n>\n\t<ng-template let-item=\"item\" ng-option-tmp>\n\t\t<ng-container *ngIf=\"customOptionTpl\" [ngTemplateOutlet]=\"customOptionTpl\" [ngTemplateOutletContext]=\"{item: item}\"></ng-container>\n\t\t<div [attr.data-cy]=\"item.id\" *ngIf=\"!customOptionTpl\">\n\t\t\t{{ item.name }}\n\t\t\t<div *ngIf=\"item.description\" class=\"dropdown-item-description\">\n\t\t\t\t{{ item.description }}\n\t\t\t</div>\n\t\t</div>\n\t</ng-template>\n\t<ng-container *ngIf=\"multiple && multipleDisplayedAsAmount && innerValue?.length > 1\">\n\t\t<ng-template ng-multi-label-tmp>\n\t\t\t<div class=\"ng-value\">\n\t\t\t\t<span class=\"ng-value-label\">{{getTranslation('amountSelected', innerValue?.length)}}</span>\n\t\t\t</div>\n\t\t</ng-template>\n\t</ng-container>\n\t<ng-template ng-footer-tmp *ngIf=\"footerElement\">\n\t\t<ng-container [ngTemplateOutlet]=\"footerElement\"></ng-container>\n\t</ng-template>\n</ng-select>\n\n<div class=\"tail\" #tailRef>\n\t<ng-container [ngTemplateOutlet]=\"getTailTpl()\"></ng-container>\n</div>\n<!-- I need this mock to reserve the space. I cant use the normal tail because that opens the dropdown from ng-select -->\n<!-- I have no idea how to avoid that -->\n<div class=\"tailMock\" #tailMockRef>\n\t<ng-container [ngTemplateOutlet]=\"getTailTpl()\"></ng-container>\n</div>\n", styles: [":host{display:block;position:relative}ng-select.ng-select.showErrors::ng-deep .ng-select-container{border-color:#ff8000}:host ::ng-deep ng-select.ng-select .ng-select-container{display:block;border:1px solid #D0D5DD;border-radius:8px;box-shadow:none;height:42px;width:100%;padding:.375rem .625rem;font-size:14px;color:#101828;height:initial;min-height:42px;display:flex}:host ::ng-deep ng-select.ng-select .ng-select-container:hover{border-color:#98a2b3}:host ::ng-deep ng-select.ng-select .ng-select-container::-webkit-input-placeholder{color:#98a2b3}:host ::ng-deep ng-select.ng-select .ng-select-container:-moz-placeholder{color:#98a2b3}:host ::ng-deep ng-select.ng-select .ng-select-container::-moz-placeholder{color:#98a2b3}:host ::ng-deep ng-select.ng-select .ng-select-container:-ms-input-placeholder{color:#98a2b3}:host ::ng-deep ng-select.ng-select .ng-select-container.input-sm{height:30px}:host ::ng-deep ng-select.ng-select .ng-select-container.input-lg{height:50px}:host ::ng-deep ng-select.ng-select .ng-select-container.error{border-color:#dc3545;background-color:#f6cdd1}:host ::ng-deep ng-select.ng-select .ng-select-container.valid{border-color:#37c936;background-color:#ebfaeb;color:#278d26}:host ::ng-deep ng-select.ng-select .ng-select-container:placeholder-shown{text-overflow:ellipsis}:host ::ng-deep ng-select.ng-select .ng-select-container[disabled]{background-color:#f2f4f7;border-color:#f2f4f7}:host ::ng-deep ng-select.ng-select .ng-select-container:focus,:host ::ng-deep ng-select.ng-select .ng-select-container:focus-within{outline:1px solid #00AC42;box-shadow:none;border-color:#00ac42}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container{background:#fff}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container .ng-arrow{position:relative;display:block}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container .ng-arrow:after{position:absolute;content:\"\";display:inline-block;width:20px;height:20px;margin-left:10px;background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"><path d=\"M15 12.5L10 7.5L5 12.5\" stroke=\"%23475467\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>');background-size:contain;background-repeat:no-repeat;transform:translate(-50%,-50%)}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #666}:host ::ng-deep .ng-select.ng-select-disabled>.ng-select-container,:host ::ng-deep .ng-select.ng-select-disabled>.ng-select-container:hover{background-color:#f2f4f7;border-color:#f2f4f7}:host ::ng-deep .ng-select .ng-has-value .ng-placeholder{display:none}:host ::ng-deep .ng-select:not(.ng-select-multiple) .ng-placeholder,:host ::ng-deep .ng-select:not(.ng-select-multiple) .ng-value{width:0px;flex-grow:1;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .ng-select.ng-select-multiple .ng-value{flex-direction:row-reverse}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{white-space:initial}:host ::ng-deep .ng-select .ng-select-container{display:flex;gap:.4rem;flex-direction:row;background-color:#fff;min-height:42px;align-items:center;background-clip:padding-box;border:1px solid #e6ecf5;border-radius:2px;box-shadow:none;box-sizing:border-box;color:#101828;font-size:14px;line-height:1.5;margin:0;outline:none;overflow:visible;padding:.375rem .75rem;width:100%}:host ::ng-deep .ng-select .ng-select-container:hover{box-shadow:0 1px #0000000f}:host ::ng-deep .ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px;overflow:hidden}:host ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#98a2b3;max-width:100%}:host ::ng-deep .ng-select.ng-select-single .ng-select-container{height:42px}:host ::ng-deep .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{left:0;padding-left:10px;padding-right:4.5rem;top:5px}:host ::ng-deep .ng-select.ng-select-multiple>.ng-select-container :has(input:focus) .ng-placeholder{top:initial!important;position:absolute!important}:host ::ng-deep .ng-select.ng-select-multiple>.ng-select-container .ng-value-container{gap:5px}:host ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e3e3e3}:host ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:1em;background-color:#fff;border:1px solid #D0D5DD;border-radius:6px;display:flex;align-items:center;overflow:hidden}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9;border:1px solid #e3e3e3}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{display:inline-block;padding:0 5px;overflow:hidden;text-overflow:ellipsis;line-height:22px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:0 5px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{position:relative;color:transparent;width:20px;height:20px;padding:0 10px 0 0}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left:after{position:absolute;left:0;content:\"\";display:inline-block;width:20px;height:20px;background-image:url('data:image/svg+xml;utf8,<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M13.5 6.5L6.5 13.5M6.5 6.5L13.5 13.5\" stroke=\"%2398A2B3\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>');background-size:contain;background-repeat:no-repeat}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left:hover:after{background-image:url('data:image/svg+xml;utf8,<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"20\" rx=\"3\" fill=\"%23F2F4F7\"/><path d=\"M13.5 6.5L6.5 13.5M6.5 6.5L13.5 13.5\" stroke=\"%23667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>')}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #c2e0ff}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding-bottom:3px;padding-left:3px}:host ::ng-deep ng-select.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{top:5px;padding-left:3px;position:static}:host ::ng-deep .ng-select .ng-clear-wrapper{position:relative;width:24px;height:24px}:host ::ng-deep .ng-select .ng-clear-wrapper .ng-clear{display:block;color:transparent}:host ::ng-deep .ng-select .ng-clear-wrapper .ng-clear:after{position:absolute;left:0;content:\"\";display:inline-block;width:24px;height:24px;background-image:url('data:image/svg+xml;utf8,<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M17 7L7 17M7 7L17 17\" stroke=\"%23667085\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>');background-size:contain;background-repeat:no-repeat}:host ::ng-deep .ng-select .ng-clear-wrapper:hover .ng-clear:after{background-image:url('data:image/svg+xml;utf8,<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"24\" height=\"24\" rx=\"4\" fill=\"%23F2F4F7\"/><path d=\"M17 7L7 17M7 7L17 17\" stroke=\"%23475467\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>')}:host ::ng-deep .ng-select .ng-clear-wrapper .ng-clear:hover{color:#dc3545}:host ::ng-deep .ng-select .ng-spinner-zone{padding-right:5px;padding-top:5px}:host ::ng-deep .ng-select .ng-arrow-wrapper{position:relative;width:20px}:host ::ng-deep .ng-select .ng-arrow-wrapper .ng-arrow{position:relative;display:block}:host ::ng-deep .ng-select .ng-arrow-wrapper .ng-arrow:after{position:absolute;content:\"\";display:inline-block;width:20px;height:20px;margin-left:10px;background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"><path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"%23475467\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>');background-size:contain;background-repeat:no-repeat;transform:translate(-50%,-50%)}:host ::ng-deep .ng-select.ng-select-disabled .ng-arrow-wrapper .ng-arrow:after{background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"><path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"%2398a2b3\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>')}:host ::ng-deep .ng-dropdown-panel{background-color:#fff;border:1px solid #D0D5DD;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808;padding-top:6px;padding-bottom:6px}:host ::ng-deep .ng-dropdown-panel .scrollable-content.calculatingWidths{width:initial}:host ::ng-deep .ng-dropdown-panel.ng-select-bottom{border-radius:8px;border-top-color:#e6e6e6;margin-top:-1px}:host ::ng-deep .ng-dropdown-panel.ng-select-top{border-radius:8px;border-bottom-color:#e6e6e6;margin-bottom:-1px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items{margin-bottom:1px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;user-select:none;padding:8px 10px;font-weight:500;color:#0000008a;cursor:pointer}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#ebf5ff}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected{background-color:#f5faff;font-weight:600}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:#000000de;padding:1px 6px;display:flex;border-radius:6px;box-sizing:content-box}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option div{white-space:nowrap;min-width:100%;cursor:pointer}:host .ng-select.truncateOptions ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{display:block}:host .ng-select.truncateOptions ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option div{overflow:hidden;text-overflow:ellipsis}:host .ng-select.nonTruncatedOptions ::ng-deep .ng-dropdown-panel{visibility:hidden}:host .ng-select.nonTruncatedOptions.verticalOrientation{overflow:initial}:host .ng-select.withSeparatingLine ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{border-bottom:1px solid #e3e3e3}:host .ng-select.noBorderLeft ::ng-deep .ng-select-container{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}:host .ng-select.noBorderRight ::ng-deep .ng-select-container{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{font-weight:500}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked>div{color:#006912;background-color:#c3ebca}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected>div{color:#006912;background-color:#e6f7e9}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label{font-weight:600}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked>div{background-color:#f2f4f7;color:#101828}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#98a2b3;padding:8px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-right:5px;font-size:80%;font-weight:400}:host ::ng-deep ng-select.ng-select .ng-select-container .ng-value-container{padding-left:0}:host ::ng-deep ng-select.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:9px;color:#101828}:host ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-input>input{color:#101828}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option>div{color:#101828;padding:8px 10px;border-radius:6px}:host ::ng-deep .ng-select.ng-select-auto-grow{max-width:inherit}:host ::ng-deep .ng-select.ng-select-auto-grow .ng-dropdown-panel{width:auto}.verticalOrientation{transform:translateY(100%) rotate(-90deg);transform-origin:top left}.verticalOrientation ::ng-deep ng-dropdown-panel.ng-select-bottom{transform:rotate(90deg) translate(100%);transform-origin:top right;border-top-color:#3ed778;border-bottom-right-radius:2px;border-bottom-left-radius:0;border-top-right-radius:2px}.tail{position:absolute;top:10px;right:35px;z-index:2;background:transparent}.tailMock{opacity:0;pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i4.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i4.NgMultiLabelTemplateDirective, selector: "[ng-multi-label-tmp]" }, { kind: "directive", type: i4.NgFooterTemplateDirective, selector: "[ng-footer-tmp]" }] }); }
309
- }
310
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: SelectComponent, decorators: [{
311
- type: Component,
312
- args: [{ selector: 'klp-form-select', providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: SelectComponent, multi: true }], template: "<ng-select\n\t#ngSelect\n\t[placeholder]=\"getTranslation('placeholder')\"\n\tbindLabel=\"name\"\n\tbindValue=\"id\"\n\t[items]=\"options\"\n\t[clearable]=\"clearable\"\n\t[(ngModel)]=\"innerValue\"\n\t[ngClass]=\"{showErrors: isInErrorState(), verticalOrientation: orientation === 'vertical', truncateOptions: truncateOptions, nonTruncatedOptions: !truncateOptions, withSeparatingLine: withSeparatingLine, noBorderLeft: !hasBorderLeft, noBorderRight: !hasBorderRight}\"\n\t(change)=\"setInnerValueAndNotify(innerValue)\"\n\t[multiple]=\"multiple\"\n\t[disabled]=\"disabled\"\n\t(blur)=\"touch(); onBlur.emit()\"\n\t(clear)=\"onClear.emit()\"\n\t(search)=\"searchQueryChanged($event.term)\"\n\t[searchable]=\"searchable\"\n\t[dropdownPosition]=\"dropdownPositionToUse\"\n\t[searchFn]=\"customSearchFn\"\n\t[selectOnTab]=\"true\"\n\t[virtualScroll]=\"true\"\n\t(scroll)=\"onScroll($event.end)\"\n\t(open)=\"onOpen()\"\n\t(close)=\"onClose()\"\n\t(focus)=\"onFocus()\"\n>\n\t<ng-template let-item=\"item\" ng-option-tmp>\n\t\t<ng-container *ngIf=\"customOptionTpl\" [ngTemplateOutlet]=\"customOptionTpl\" [ngTemplateOutletContext]=\"{item: item}\"></ng-container>\n\t\t<div [attr.data-cy]=\"item.id\" *ngIf=\"!customOptionTpl\">\n\t\t\t{{ item.name }}\n\t\t\t<div *ngIf=\"item.description\" class=\"dropdown-item-description\">\n\t\t\t\t{{ item.description }}\n\t\t\t</div>\n\t\t</div>\n\t</ng-template>\n\t<ng-container *ngIf=\"multiple && multipleDisplayedAsAmount && innerValue?.length > 1\">\n\t\t<ng-template ng-multi-label-tmp>\n\t\t\t<div class=\"ng-value\">\n\t\t\t\t<span class=\"ng-value-label\">{{getTranslation('amountSelected', innerValue?.length)}}</span>\n\t\t\t</div>\n\t\t</ng-template>\n\t</ng-container>\n\t<ng-template ng-footer-tmp *ngIf=\"footerElement\">\n\t\t<ng-container [ngTemplateOutlet]=\"footerElement\"></ng-container>\n\t</ng-template>\n</ng-select>\n\n<div class=\"tail\" #tailRef>\n\t<ng-container [ngTemplateOutlet]=\"getTailTpl()\"></ng-container>\n</div>\n<!-- I need this mock to reserve the space. I cant use the normal tail because that opens the dropdown from ng-select -->\n<!-- I have no idea how to avoid that -->\n<div class=\"tailMock\" #tailMockRef>\n\t<ng-container [ngTemplateOutlet]=\"getTailTpl()\"></ng-container>\n</div>\n", styles: [":host{display:block;position:relative}ng-select.ng-select.showErrors::ng-deep .ng-select-container{border-color:#ff8000}:host ::ng-deep ng-select.ng-select .ng-select-container{display:block;border:1px solid #D0D5DD;border-radius:8px;box-shadow:none;height:42px;width:100%;padding:.375rem .625rem;font-size:14px;color:#101828;height:initial;min-height:42px;display:flex}:host ::ng-deep ng-select.ng-select .ng-select-container:hover{border-color:#98a2b3}:host ::ng-deep ng-select.ng-select .ng-select-container::-webkit-input-placeholder{color:#98a2b3}:host ::ng-deep ng-select.ng-select .ng-select-container:-moz-placeholder{color:#98a2b3}:host ::ng-deep ng-select.ng-select .ng-select-container::-moz-placeholder{color:#98a2b3}:host ::ng-deep ng-select.ng-select .ng-select-container:-ms-input-placeholder{color:#98a2b3}:host ::ng-deep ng-select.ng-select .ng-select-container.input-sm{height:30px}:host ::ng-deep ng-select.ng-select .ng-select-container.input-lg{height:50px}:host ::ng-deep ng-select.ng-select .ng-select-container.error{border-color:#dc3545;background-color:#f6cdd1}:host ::ng-deep ng-select.ng-select .ng-select-container.valid{border-color:#37c936;background-color:#ebfaeb;color:#278d26}:host ::ng-deep ng-select.ng-select .ng-select-container:placeholder-shown{text-overflow:ellipsis}:host ::ng-deep ng-select.ng-select .ng-select-container[disabled]{background-color:#f2f4f7;border-color:#f2f4f7}:host ::ng-deep ng-select.ng-select .ng-select-container:focus,:host ::ng-deep ng-select.ng-select .ng-select-container:focus-within{outline:1px solid #00AC42;box-shadow:none;border-color:#00ac42}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container{background:#fff}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container .ng-arrow{position:relative;display:block}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container .ng-arrow:after{position:absolute;content:\"\";display:inline-block;width:20px;height:20px;margin-left:10px;background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"><path d=\"M15 12.5L10 7.5L5 12.5\" stroke=\"%23475467\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>');background-size:contain;background-repeat:no-repeat;transform:translate(-50%,-50%)}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #666}:host ::ng-deep .ng-select.ng-select-disabled>.ng-select-container,:host ::ng-deep .ng-select.ng-select-disabled>.ng-select-container:hover{background-color:#f2f4f7;border-color:#f2f4f7}:host ::ng-deep .ng-select .ng-has-value .ng-placeholder{display:none}:host ::ng-deep .ng-select:not(.ng-select-multiple) .ng-placeholder,:host ::ng-deep .ng-select:not(.ng-select-multiple) .ng-value{width:0px;flex-grow:1;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .ng-select.ng-select-multiple .ng-value{flex-direction:row-reverse}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{white-space:initial}:host ::ng-deep .ng-select .ng-select-container{display:flex;gap:.4rem;flex-direction:row;background-color:#fff;min-height:42px;align-items:center;background-clip:padding-box;border:1px solid #e6ecf5;border-radius:2px;box-shadow:none;box-sizing:border-box;color:#101828;font-size:14px;line-height:1.5;margin:0;outline:none;overflow:visible;padding:.375rem .75rem;width:100%}:host ::ng-deep .ng-select .ng-select-container:hover{box-shadow:0 1px #0000000f}:host ::ng-deep .ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px;overflow:hidden}:host ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#98a2b3;max-width:100%}:host ::ng-deep .ng-select.ng-select-single .ng-select-container{height:42px}:host ::ng-deep .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{left:0;padding-left:10px;padding-right:4.5rem;top:5px}:host ::ng-deep .ng-select.ng-select-multiple>.ng-select-container :has(input:focus) .ng-placeholder{top:initial!important;position:absolute!important}:host ::ng-deep .ng-select.ng-select-multiple>.ng-select-container .ng-value-container{gap:5px}:host ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e3e3e3}:host ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:1em;background-color:#fff;border:1px solid #D0D5DD;border-radius:6px;display:flex;align-items:center;overflow:hidden}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9;border:1px solid #e3e3e3}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{display:inline-block;padding:0 5px;overflow:hidden;text-overflow:ellipsis;line-height:22px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:0 5px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{position:relative;color:transparent;width:20px;height:20px;padding:0 10px 0 0}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left:after{position:absolute;left:0;content:\"\";display:inline-block;width:20px;height:20px;background-image:url('data:image/svg+xml;utf8,<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M13.5 6.5L6.5 13.5M6.5 6.5L13.5 13.5\" stroke=\"%2398A2B3\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>');background-size:contain;background-repeat:no-repeat}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left:hover:after{background-image:url('data:image/svg+xml;utf8,<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"20\" rx=\"3\" fill=\"%23F2F4F7\"/><path d=\"M13.5 6.5L6.5 13.5M6.5 6.5L13.5 13.5\" stroke=\"%23667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>')}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #c2e0ff}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding-bottom:3px;padding-left:3px}:host ::ng-deep ng-select.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{top:5px;padding-left:3px;position:static}:host ::ng-deep .ng-select .ng-clear-wrapper{position:relative;width:24px;height:24px}:host ::ng-deep .ng-select .ng-clear-wrapper .ng-clear{display:block;color:transparent}:host ::ng-deep .ng-select .ng-clear-wrapper .ng-clear:after{position:absolute;left:0;content:\"\";display:inline-block;width:24px;height:24px;background-image:url('data:image/svg+xml;utf8,<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M17 7L7 17M7 7L17 17\" stroke=\"%23667085\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>');background-size:contain;background-repeat:no-repeat}:host ::ng-deep .ng-select .ng-clear-wrapper:hover .ng-clear:after{background-image:url('data:image/svg+xml;utf8,<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"24\" height=\"24\" rx=\"4\" fill=\"%23F2F4F7\"/><path d=\"M17 7L7 17M7 7L17 17\" stroke=\"%23475467\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>')}:host ::ng-deep .ng-select .ng-clear-wrapper .ng-clear:hover{color:#dc3545}:host ::ng-deep .ng-select .ng-spinner-zone{padding-right:5px;padding-top:5px}:host ::ng-deep .ng-select .ng-arrow-wrapper{position:relative;width:20px}:host ::ng-deep .ng-select .ng-arrow-wrapper .ng-arrow{position:relative;display:block}:host ::ng-deep .ng-select .ng-arrow-wrapper .ng-arrow:after{position:absolute;content:\"\";display:inline-block;width:20px;height:20px;margin-left:10px;background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"><path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"%23475467\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>');background-size:contain;background-repeat:no-repeat;transform:translate(-50%,-50%)}:host ::ng-deep .ng-select.ng-select-disabled .ng-arrow-wrapper .ng-arrow:after{background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"><path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"%2398a2b3\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>')}:host ::ng-deep .ng-dropdown-panel{background-color:#fff;border:1px solid #D0D5DD;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808;padding-top:6px;padding-bottom:6px}:host ::ng-deep .ng-dropdown-panel .scrollable-content.calculatingWidths{width:initial}:host ::ng-deep .ng-dropdown-panel.ng-select-bottom{border-radius:8px;border-top-color:#e6e6e6;margin-top:-1px}:host ::ng-deep .ng-dropdown-panel.ng-select-top{border-radius:8px;border-bottom-color:#e6e6e6;margin-bottom:-1px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items{margin-bottom:1px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;user-select:none;padding:8px 10px;font-weight:500;color:#0000008a;cursor:pointer}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#ebf5ff}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected{background-color:#f5faff;font-weight:600}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:#000000de;padding:1px 6px;display:flex;border-radius:6px;box-sizing:content-box}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option div{white-space:nowrap;min-width:100%;cursor:pointer}:host .ng-select.truncateOptions ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{display:block}:host .ng-select.truncateOptions ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option div{overflow:hidden;text-overflow:ellipsis}:host .ng-select.nonTruncatedOptions ::ng-deep .ng-dropdown-panel{visibility:hidden}:host .ng-select.nonTruncatedOptions.verticalOrientation{overflow:initial}:host .ng-select.withSeparatingLine ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{border-bottom:1px solid #e3e3e3}:host .ng-select.noBorderLeft ::ng-deep .ng-select-container{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}:host .ng-select.noBorderRight ::ng-deep .ng-select-container{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{font-weight:500}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked>div{color:#006912;background-color:#c3ebca}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected>div{color:#006912;background-color:#e6f7e9}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label{font-weight:600}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked>div{background-color:#f2f4f7;color:#101828}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#98a2b3;padding:8px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-right:5px;font-size:80%;font-weight:400}:host ::ng-deep ng-select.ng-select .ng-select-container .ng-value-container{padding-left:0}:host ::ng-deep ng-select.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:9px;color:#101828}:host ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-input>input{color:#101828}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option>div{color:#101828;padding:8px 10px;border-radius:6px}:host ::ng-deep .ng-select.ng-select-auto-grow{max-width:inherit}:host ::ng-deep .ng-select.ng-select-auto-grow .ng-dropdown-panel{width:auto}.verticalOrientation{transform:translateY(100%) rotate(-90deg);transform-origin:top left}.verticalOrientation ::ng-deep ng-dropdown-panel.ng-select-bottom{transform:rotate(90deg) translate(100%);transform-origin:top right;border-top-color:#3ed778;border-bottom-right-radius:2px;border-bottom-left-radius:0;border-top-right-radius:2px}.tail{position:absolute;top:10px;right:35px;z-index:2;background:transparent}.tailMock{opacity:0;pointer-events:none}\n"] }]
313
- }], ctorParameters: () => [{ type: i1.FormElementComponent, decorators: [{
314
- type: Optional
315
- }, {
316
- type: Host
317
- }] }, { type: i2.ControlContainer, decorators: [{
318
- type: Optional
319
- }, {
320
- type: Host
321
- }] }, { type: undefined, decorators: [{
322
- type: Inject,
323
- args: [SELECT_TRANSLATIONS]
324
- }, {
325
- type: Optional
326
- }] }, { type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { placeholder: [{
327
- type: Input
328
- }], prefix: [{
329
- type: Input
330
- }], orientation: [{
331
- type: Input
332
- }], options: [{
333
- type: Input
334
- }], multiple: [{
335
- type: Input
336
- }], multipleDisplayedAsAmount: [{
337
- type: Input
338
- }], clearable: [{
339
- type: Input
340
- }], truncateOptions: [{
341
- type: Input
342
- }], withSeparatingLine: [{
343
- type: Input
344
- }], searchable: [{
345
- type: Input
346
- }], hasBorderLeft: [{
347
- type: Input
348
- }], hasBorderRight: [{
349
- type: Input
350
- }], dropdownPosition: [{
351
- type: Input
352
- }], dropdownAlignment: [{
353
- type: Input
354
- }], customSearchFn: [{
355
- type: Input
356
- }], footerElement: [{
357
- type: Input
358
- }], onSearch: [{
359
- type: Output
360
- }], onEndReached: [{
361
- type: Output
362
- }], onOpened: [{
363
- type: Output
364
- }], onClosed: [{
365
- type: Output
366
- }], onBlur: [{
367
- type: Output
368
- }], onClear: [{
369
- type: Output
370
- }], onEnterKey: [{
371
- type: Output
372
- }], ngSelect: [{
373
- type: ViewChild,
374
- args: ['ngSelect']
375
- }], tailRef: [{
376
- type: ViewChild,
377
- args: ['tailRef']
378
- }], tailMockRef: [{
379
- type: ViewChild,
380
- args: ['tailMockRef']
381
- }], customOptionTpl: [{
382
- type: ContentChild,
383
- args: [KlpSelectOptionTemplateDirective, { read: TemplateRef }]
384
- }] } });
385
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tsaXBwYS9uZ3gtZW5oYW5jeS1mb3Jtcy9zcmMvbGliL2VsZW1lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy9saWIvZWxlbWVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRU4sU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBRVQsWUFBWSxFQUNaLElBQUksRUFDSixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBRXZGLE9BQU8sRUFBQyxVQUFVLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7O0FBV3pELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksY0FBYyxDQUFNLDhCQUE4QixDQUFDLENBQUM7QUFHM0YsTUFBTSxPQUFPLGdDQUFnQzs4R0FBaEMsZ0NBQWdDO2tHQUFoQyxnQ0FBZ0M7OzJGQUFoQyxnQ0FBZ0M7a0JBRDVDLFNBQVM7bUJBQUMsRUFBQyxRQUFRLEVBQUUsc0JBQXNCLEVBQUM7O0FBVTdDLE1BQU0sT0FBTyxlQUFnQixTQUFRLGlCQUFvQztJQXFDeEUsWUFDK0IsTUFBNEIsRUFDNUIsZ0JBQWtDLEVBQ2YsWUFBaUIsRUFD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Q1UsVUFBVTtzQkFBMUIsTUFBTTtnQkFDZ0IsUUFBUTtzQkFBOUIsU0FBUzt1QkFBQyxVQUFVO2dCQUNDLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFDTSxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQzZDLGVBQWU7c0JBQW5GLFlBQVk7dUJBQUMsZ0NBQWdDLEVBQUUsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0QWZ0ZXJWaWV3SW5pdCxcblx0Q29tcG9uZW50LFxuXHRDb250ZW50Q2hpbGQsXG5cdERpcmVjdGl2ZSxcblx0RWxlbWVudFJlZixcblx0RXZlbnRFbWl0dGVyLFxuXHRIb3N0LFxuXHRJbmplY3QsXG5cdEluamVjdGlvblRva2VuLFxuXHRJbnB1dCwgTmdab25lLFxuXHRPbkNoYW5nZXMsXG5cdE9uRGVzdHJveSxcblx0T3B0aW9uYWwsXG5cdE91dHB1dCxcblx0U2ltcGxlQ2hhbmdlcyxcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbENvbnRhaW5lciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7VmFsdWVBY2Nlc3NvckJhc2V9IGZyb20gJy4uL3ZhbHVlLWFjY2Vzc29yLWJhc2UvdmFsdWUtYWNjZXNzb3ItYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHtGb3JtRWxlbWVudENvbXBvbmVudH0gZnJvbSAnLi4vLi4vZm9ybS9mb3JtLWVsZW1lbnQvZm9ybS1lbGVtZW50LmNvbXBvbmVudCc7XG5pbXBvcnQge2lzVmFsdWVTZXQsIHN0cmluZ0lzU2V0QW5kRmlsbGVkfSBmcm9tICcuLi8uLi91dGlsL3ZhbHVlcyc7XG5pbXBvcnQge2F3YWl0YWJsZUZvck5leHRDeWNsZX0gZnJvbSBcIi4uLy4uL3V0aWwvYW5ndWxhclwiO1xuXG5leHBvcnQgdHlwZSBBcHBTZWxlY3RPcHRpb25zID0gQXJyYXk8QXBwU2VsZWN0T3B0aW9uPjtcbmV4cG9ydCB0eXBlIEFwcFNlbGVjdE9wdGlvbiA9IHtcblx0aWQ6IGFueTtcblx0bmFtZTogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0YWN0aXZlPzogYm9vbGVhbjtcblx0ZGlzYWJsZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IFNFTEVDVF9UUkFOU0xBVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48YW55Pigna2xwLmZvcm0uc2VsZWN0LnRyYW5zbGF0aW9ucycpO1xuXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ1trbHBTZWxlY3RPcHRpb25UcGxdJ30pXG5leHBvcnQgY2xhc3MgS2xwU2VsZWN0T3B0aW9uVGVtcGxhdGVEaXJlY3RpdmUge1xufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdrbHAtZm9ybS1zZWxlY3QnLFxuXHR0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmxzOiBbJy4vc2VsZWN0LmNvbXBvbmVudC5zY3NzJ10sXG5cdHByb3ZpZGVyczogW3twcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IFNlbGVjdENvbXBvbmVudCwgbXVsdGk6IHRydWV9XSxcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgVmFsdWVBY2Nlc3NvckJhc2U8c3RyaW5nIHwgc3RyaW5nW10+IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXHRASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXHRASW5wdXQoKSBwcmVmaXg6IHN0cmluZztcblx0QElucHV0KCkgb3JpZW50YXRpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgPSAnaG9yaXpvbnRhbCc7XG5cdEBJbnB1dCgpIG9wdGlvbnM6IEFwcFNlbGVjdE9wdGlvbnM7XG5cdEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XG5cdEBJbnB1dCgpIG11bHRpcGxlRGlzcGxheWVkQXNBbW91bnQgPSBmYWxzZTtcblx0QElucHV0KCkgY2xlYXJhYmxlID0gdHJ1ZTtcblx0QElucHV0KCkgdHJ1bmNhdGVPcHRpb25zID0gdHJ1ZTtcblx0QElucHV0KCkgd2l0aFNlcGFyYXRpbmdMaW5lID0gZmFsc2U7XG5cdEBJbnB1dCgpIHNlYXJjaGFibGUgPSB0cnVlO1xuXHRASW5wdXQoKSBoYXNCb3JkZXJMZWZ0ID0gdHJ1ZTtcblx0QElucHV0KCkgaGFzQm9yZGVyUmlnaHQgPSB0cnVlO1xuXHRASW5wdXQoKSBwdWJsaWMgZHJvcGRvd25Qb3NpdGlvbjogJ2F1dG8nIHwgJ2JvdHRvbScgfCAndG9wJyB8ICdsZWZ0JyB8ICdyaWdodCcgPSBudWxsO1xuXHRASW5wdXQoKSBwdWJsaWMgZHJvcGRvd25BbGlnbm1lbnQ6ICdsZWZ0JyB8ICdyaWdodCcgPSAnbGVmdCc7XG5cdEBJbnB1dCgpIHB1YmxpYyBjdXN0b21TZWFyY2hGbjogKHRlcm06IHN0cmluZywgaXRlbTogeyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfSkgPT4gYm9vbGVhbjtcblx0QElucHV0KCkgcHVibGljIGZvb3RlckVsZW1lbnQ6IFRlbXBsYXRlUmVmPGFueT47XG5cdEBPdXRwdXQoKSBwdWJsaWMgb25TZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblx0QE91dHB1dCgpIHB1YmxpYyBvbkVuZFJlYWNoZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cdEBPdXRwdXQoKSBwdWJsaWMgb25PcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cdEBPdXRwdXQoKSBwdWJsaWMgb25DbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cdEBPdXRwdXQoKSBwdWJsaWMgb25CbHVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXHRAT3V0cHV0KCkgcHVibGljIG9uQ2xlYXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cdEBPdXRwdXQoKSBwdWJsaWMgb25FbnRlcktleSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXHRAVmlld0NoaWxkKCduZ1NlbGVjdCcpIG5nU2VsZWN0O1xuXHRAVmlld0NoaWxkKCd0YWlsUmVmJykgdGFpbFJlZjogRWxlbWVudFJlZjtcblx0QFZpZXdDaGlsZCgndGFpbE1vY2tSZWYnKSB0YWlsTW9ja1JlZjogRWxlbWVudFJlZjtcblx0QENvbnRlbnRDaGlsZChLbHBTZWxlY3RPcHRpb25UZW1wbGF0ZURpcmVjdGl2ZSwge3JlYWQ6IFRlbXBsYXRlUmVmfSkgY3VzdG9tT3B0aW9uVHBsOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cdHByaXZhdGUgbGFzdEl0ZW1JbmRleFJlYWNoZWQgPSAtMTtcblx0cHVibGljIGRyb3Bkb3duUG9zaXRpb25Ub1VzZTogJ2F1dG8nIHwgJ2JvdHRvbScgfCAndG9wJyB8ICdsZWZ0JyB8ICdyaWdodCcgPSAnYm90dG9tJztcblx0cHJpdmF0ZSBpc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcblx0cHJpdmF0ZSBkcm9wZG93blBhbmVsT2Zmc2V0WCA9IDA7XG5cdHByaXZhdGUgZHJvcGRvd25QYW5lbE9mZnNldFkgPSAwO1xuXHRwcml2YXRlIGFuY2hvckFic29sdXRlOiBIVE1MRGl2RWxlbWVudDtcblx0cHJpdmF0ZSBhbmNob3JGaXhlZDogSFRNTERpdkVsZW1lbnQ7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0QE9wdGlvbmFsKCkgQEhvc3QoKSBwcm90ZWN0ZWQgcGFyZW50OiBGb3JtRWxlbWVudENvbXBvbmVudCxcblx0XHRAT3B0aW9uYWwoKSBASG9zdCgpIHByb3RlY3RlZCBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuXHRcdEBJbmplY3QoU0VMRUNUX1RSQU5TTEFUSU9OUykgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0cmFuc2xhdGlvbnM6IGFueSxcblx0XHRwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxuXHRcdHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG5cdCkge1xuXHRcdHN1cGVyKHBhcmVudCwgY29udHJvbENvbnRhaW5lcik7XG5cdH1cblxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5hZGRQcmVmaXgoKTtcblx0XHR0aGlzLmFkZFRhaWwoKTtcblx0XHR0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5rZXlMaXN0ZW5lcik7XG5cdH1cblxuXHRwcml2YXRlIGtleUxpc3RlbmVyID0gKGUpID0+IHtcblx0XHRpZiAoZS5rZXkgPT09ICdFbnRlcicpIHtcblx0XHRcdHRoaXMub25FbnRlcktleS5lbWl0KGUudGFyZ2V0LnZhbHVlKTtcblxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYWRkVGFpbCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy50YWlsTW9ja1JlZikge1xuXHRcdFx0Y29uc3QgY29udGFpbmVyID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5uZy1zZWxlY3QtY29udGFpbmVyJyk7XG5cdFx0XHRjb25zdCBhcnJvd1dyYXBwZXIgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm5nLWFycm93LXdyYXBwZXInKTtcblx0XHRcdGNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGhpcy50YWlsTW9ja1JlZi5uYXRpdmVFbGVtZW50LCBhcnJvd1dyYXBwZXIpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYWRkUHJlZml4KCk6IHZvaWQge1xuXHRcdGlmIChzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLnByZWZpeCkpIHtcblx0XHRcdGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubmctc2VsZWN0LWNvbnRhaW5lcicpO1xuXHRcdFx0Y29uc3QgbmV3Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdFx0bmV3Tm9kZS5jbGFzc05hbWUgPSAncHJlZml4Jztcblx0XHRcdG5ld05vZGUuaW5uZXJUZXh0ID0gdGhpcy5wcmVmaXg7XG5cdFx0XHRjb250YWluZXIuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIGNvbnRhaW5lci5jaGlsZHJlblswXSk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmlzT3BlbiAmJiBpc1ZhbHVlU2V0KGNoYW5nZXMub3B0aW9ucykpIHtcblx0XHRcdHRoaXMubGFzdEl0ZW1JbmRleFJlYWNoZWQgPSAtMTtcblx0XHRcdC8vIHdhaXRpbmcgZm9yIHRoZSB0aGluZyB0byByZW5kZXIgdW50aWwgd2UgZmlyZSB0aGUgZXZlbnRcblx0XHRcdGF3YWl0IGF3YWl0YWJsZUZvck5leHRDeWNsZSgpO1xuXHRcdFx0YXdhaXQgdGhpcy5zZXRXaWR0aEJhc2VkT25PcHRpb25zV2lkdGhzKCk7XG5cdFx0fVxuXHRcdGlmIChjaGFuZ2VzLmRyb3Bkb3duUG9zaXRpb24pIHtcblx0XHRcdHRoaXMuZHJvcGRvd25Qb3NpdGlvblRvVXNlID0gdGhpcy5kcm9wZG93blBvc2l0aW9uO1xuXHRcdH1cblx0XHRpZiAoY2hhbmdlcy5wcmVmaXgpIHtcblx0XHRcdGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuZWxSZWY/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJy5uZy1zZWxlY3QtY29udGFpbmVyIC5wcmVmaXgnKTtcblx0XHRcdGlmIChpc1ZhbHVlU2V0KGNvbnRhaW5lcikpIHtcblx0XHRcdFx0Y29udGFpbmVyLmlubmVyVGV4dCA9IGNoYW5nZXMucHJlZml4LmN1cnJlbnRWYWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRnZXREZWZhdWx0VHJhbnNsYXRpb24oa2V5OiBzdHJpbmcpOiAoeDogYW55KSA9PiBzdHJpbmcge1xuXHRcdHN3aXRjaCAoa2V5KSB7XG5cdFx0XHRjYXNlICdwbGFjZWhvbGRlcic6XG5cdFx0XHRcdHJldHVybiAoKSA9PiAnUGljayBhbiBvcHRpb24nO1xuXHRcdFx0Y2FzZSAnYW1vdW50U2VsZWN0ZWQnOlxuXHRcdFx0XHRyZXR1cm4gKGFtb3VudCkgPT4gYCR7YW1vdW50fSBzZWxlY3RlZGA7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VHJhbnNsYXRpb24oa2V5OiBzdHJpbmcsIHBhcmFtczogYW55ID0gbnVsbCk6IHN0cmluZyB7XG5cdFx0aWYgKGtleSA9PT0gJ3BsYWNlaG9sZGVyJyAmJiBzdHJpbmdJc1NldEFuZEZpbGxlZCh0aGlzLnBsYWNlaG9sZGVyKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMucGxhY2Vob2xkZXI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnRyYW5zbGF0aW9ucz8uW2tleV0/LihwYXJhbXMpID8/IHRoaXMuZ2V0RGVmYXVsdFRyYW5zbGF0aW9uKGtleSkocGFyYW1zKTtcblx0fVxuXG5cdG9uU2Nyb2xsKGxhc3RJdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuXHRcdGNvbnN0IHZpc2libGVJdGVtcyA9IHRoaXMubmdTZWxlY3Q/Lml0ZW1zTGlzdD8uZmlsdGVyZWRJdGVtcz8ubGVuZ3RoID8/IDA7XG5cdFx0aWYgKHRoaXMubGFzdEl0ZW1JbmRleFJlYWNoZWQgPCBsYXN0SXRlbUluZGV4ICYmIGxhc3RJdGVtSW5kZXggPT09IHZpc2libGVJdGVtcykge1xuXHRcdFx0dGhpcy5vbkVuZFJlYWNoZWQuZW1pdCgpO1xuXHRcdH1cblx0XHR0aGlzLmxhc3RJdGVtSW5kZXhSZWFjaGVkID0gTWF0aC5tYXgobGFzdEl0ZW1JbmRleCwgdGhpcy5sYXN0SXRlbUluZGV4UmVhY2hlZCk7XG5cdFx0dGhpcy5zZXRXaWR0aEJhc2VkT25PcHRpb25zV2lkdGhzKCk7XG5cdH1cblxuXHRzZWFyY2hRdWVyeUNoYW5nZWQoc2VhcmNoUXVlcnk6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMub25TZWFyY2guZW1pdChzZWFyY2hRdWVyeSk7XG5cdH1cblxuXHRhc3luYyBvbk9wZW4oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5pc09wZW4gPSB0cnVlO1xuXG5cdFx0aWYgKHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyAmJiAhaXNWYWx1ZVNldCh0aGlzLmRyb3Bkb3duUG9zaXRpb24pKSB7XG5cdFx0XHR0aGlzLmRldGVybWluZURyb3Bkb3duUG9zaXRpb24oKTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMudHJ1bmNhdGVPcHRpb25zKSB7XG5cdFx0XHR0aGlzLmNyZWF0ZUFuY2hvcnMoKTtcblx0XHR9XG5cdFx0Ly8gd2FpdGluZyBmb3IgdGhlIHRoaW5nIHRvIHJlbmRlciB1bnRpbCB3ZSBmaXJlIHRoZSBldmVudFxuXHRcdGF3YWl0IGF3YWl0YWJsZUZvck5leHRDeWNsZSgpO1xuXHRcdHRoaXMub25PcGVuZWQuZW1pdCgpO1xuXG5cdFx0YXdhaXQgdGhpcy5zZXRXaWR0aEJhc2VkT25PcHRpb25zV2lkdGhzKCk7XG5cdFx0aWYgKCF0aGlzLnRydW5jYXRlT3B0aW9ucykge1xuXHRcdFx0dGhpcy5zZXRGaXhlZERyb3Bkb3duUGFuZWxQb3NpdGlvbigpO1xuXHRcdFx0dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXHRcdFx0XHRbLi4udGhpcy5nZXRBbGxMaW1pdGluZ0NvbnRhaW5lcnMoKSwgd2luZG93XS5mb3JFYWNoKGUgPT4gZS5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNldEZpeGVkRHJvcGRvd25QYW5lbFBvc2l0aW9uKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZUFuY2hvcnMoKTogdm9pZCB7XG5cdFx0dGhpcy5hbmNob3JBYnNvbHV0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdGlmICh0aGlzLmRyb3Bkb3duUG9zaXRpb25Ub1VzZSA9PT0gJ3RvcCcpIHtcblx0XHRcdHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5wcmVwZW5kKHRoaXMuYW5jaG9yQWJzb2x1dGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5hbmNob3JBYnNvbHV0ZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5hbmNob3JGaXhlZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdHRoaXMuYW5jaG9yRml4ZWQuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuXHRcdHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmFuY2hvckZpeGVkKTtcblx0fVxuXG5cdHByaXZhdGUgcmVtb3ZlQW5jaG9ycygpOiB2b2lkIHtcblx0XHR0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5hbmNob3JBYnNvbHV0ZSk7XG5cdFx0dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuYW5jaG9yRml4ZWQpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRGaXhlZERyb3Bkb3duUGFuZWxQb3NpdGlvbiA9ICgpID0+IHtcblx0XHRjb25zdCBkcm9wZG93blBhbmVsID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ25nLWRyb3Bkb3duLXBhbmVsJyk7XG5cdFx0ZHJvcGRvd25QYW5lbC5zdHlsZS52aXNpYmlsaXR5ID0gJ2luaXRpYWwnO1xuXHRcdGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSB0aGlzLmFuY2hvckFic29sdXRlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHRoaXMuYW5jaG9yRml4ZWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuXHRcdHRoaXMuZHJvcGRvd25QYW5lbE9mZnNldFkgPSBkaWZmZXJlbmNlO1xuXG5cdFx0ZHJvcGRvd25QYW5lbC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG5cdFx0dGhpcy5zZXRQYW5lbE9mZnNldHMoKTtcblx0fTtcblxuXHRwcml2YXRlIHNldFdpZHRoQmFzZWRPbk9wdGlvbnNXaWR0aHMgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0aWYgKHRoaXMudHJ1bmNhdGVPcHRpb25zID09PSBmYWxzZSkge1xuXHRcdFx0YXdhaXQgYXdhaXRhYmxlRm9yTmV4dEN5Y2xlKCk7XG5cdFx0XHRpZiAoIWlzVmFsdWVTZXQodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zY3JvbGxhYmxlLWNvbnRlbnQnKSkpIHtcblx0XHRcdFx0Y29uc3QgcGFuZWwgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignbmctZHJvcGRvd24tcGFuZWwnKTtcblx0XHRcdFx0cGFuZWwuc3R5bGUud2lkdGggPSBgJHt0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGh9cHhgO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnNjcm9sbGFibGUtY29udGVudCcpLmNsYXNzTGlzdC5hZGQoJ2NhbGN1bGF0aW5nV2lkdGhzJyk7XG5cdFx0XHRjb25zdCBwYWRkaW5nRm9yU2Nyb2xsYmFyID0gdGhpcy5nZXRTY3JvbGxiYXJXaWR0aCgpO1xuXHRcdFx0Y29uc3QgbWF4V2lkdGggPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnNjcm9sbGFibGUtY29udGVudCcpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICsgcGFkZGluZ0ZvclNjcm9sbGJhcjtcblx0XHRcdHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc2Nyb2xsYWJsZS1jb250ZW50JykuY2xhc3NMaXN0LnJlbW92ZSgnY2FsY3VsYXRpbmdXaWR0aHMnKTtcblx0XHRcdGNvbnN0IGRyb3Bkb3duUGFuZWwgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignbmctZHJvcGRvd24tcGFuZWwnKTtcblx0XHRcdGlmIChkcm9wZG93blBhbmVsKSB7XG5cdFx0XHRcdGRyb3Bkb3duUGFuZWwuc3R5bGUubWluV2lkdGggPSBgJHt0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGh9cHhgO1xuXHRcdFx0XHRkcm9wZG93blBhbmVsLnN0eWxlLndpZHRoID0gYCR7TWF0aC5tYXgodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLCBtYXhXaWR0aCwgZHJvcGRvd25QYW5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCl9cHhgO1xuXHRcdFx0XHRhd2FpdCBhd2FpdGFibGVGb3JOZXh0Q3ljbGUoKTtcblx0XHRcdFx0Y29uc3QgcGlja2VyV2lkdGggPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cdFx0XHRcdGNvbnN0IGRyb3Bkb3duUGFuZWxXaWR0aCA9IGRyb3Bkb3duUGFuZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cblx0XHRcdFx0Y29uc3Qgc3BhY2VMZWZ0T2ZFbFJlZiA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdFx0XHRjb25zdCBzcGFjZVJpZ2h0T2ZFbFJlZiA9IHdpbmRvdy5pbm5lcldpZHRoIC0gKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCArIHNwYWNlTGVmdE9mRWxSZWYpO1xuXHRcdFx0XHRjb25zdCBleHRyYU5lZWRlZFNwYWNlID0gZHJvcGRvd25QYW5lbFdpZHRoIC0gcGlja2VyV2lkdGg7XG5cdFx0XHRcdGlmICh0aGlzLmRyb3Bkb3duQWxpZ25tZW50ID09PSAncmlnaHQnKSB7XG5cdFx0XHRcdFx0aWYgKGV4dHJhTmVlZGVkU3BhY2UgPiBzcGFjZUxlZnRPZkVsUmVmKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmRyb3Bkb3duUGFuZWxPZmZzZXRYID0gLXNwYWNlTGVmdE9mRWxSZWYgKyAxMDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5kcm9wZG93blBhbmVsT2Zmc2V0WCA9IC1leHRyYU5lZWRlZFNwYWNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChleHRyYU5lZWRlZFNwYWNlID4gc3BhY2VSaWdodE9mRWxSZWYpIHtcblx0XHRcdFx0XHR0aGlzLmRyb3Bkb3duUGFuZWxPZmZzZXRYID0gLWV4dHJhTmVlZGVkU3BhY2UgKyBzcGFjZVJpZ2h0T2ZFbFJlZiAtIDIwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2V0UGFuZWxPZmZzZXRzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHByaXZhdGUgZ2V0QWxsTGltaXRpbmdDb250YWluZXJzKCk6IEFycmF5PEhUTUxFbGVtZW50PiB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cdFx0bGV0IGN1cnJlbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0d2hpbGUgKGN1cnJlbnQucGFyZW50RWxlbWVudCkge1xuXHRcdFx0aWYgKHRoaXMuaXNMaW1pdGluZ0NvbnRhaW5lcihjdXJyZW50LnBhcmVudEVsZW1lbnQpKSB7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKGN1cnJlbnQucGFyZW50RWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50ID0gY3VycmVudC5wYXJlbnRFbGVtZW50O1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRQYW5lbE9mZnNldHMoKTogdm9pZCB7XG5cdFx0Y29uc3QgZHJvcGRvd25QYW5lbCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCduZy1kcm9wZG93bi1wYW5lbCcpO1xuXHRcdGlmICghaXNWYWx1ZVNldChkcm9wZG93blBhbmVsKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzY3JvbGxQb3NpdGlvbk9mZnNldCA9IGB0cmFuc2xhdGUoJHt0aGlzLmRyb3Bkb3duUGFuZWxPZmZzZXRYfXB4LCAke3RoaXMuZHJvcGRvd25QYW5lbE9mZnNldFl9cHgpYDtcblx0XHRjb25zdCBkcm9wZG93blBvc2l0aW9uT2Zmc2V0ID0gdGhpcy5kcm9wZG93blBvc2l0aW9uVG9Vc2UgPT09ICd0b3AnID8gYHRyYW5zbGF0ZVkoLTEwMCUpIHRyYW5zbGF0ZVkoLThweClgIDogJ3RyYW5zbGF0ZVkoOHB4KSc7XG5cdFx0aWYgKHRoaXMub3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRcdGRyb3Bkb3duUGFuZWwuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gJ3RvcCBsZWZ0Jztcblx0XHRcdGRyb3Bkb3duUGFuZWwuc3R5bGUudHJhbnNmb3JtID0gYHJvdGF0ZSg5MGRlZykgdHJhbnNsYXRlWSgtJHt0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGh9cHgpYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZHJvcGRvd25QYW5lbC5zdHlsZS50cmFuc2Zvcm0gPSBbc2Nyb2xsUG9zaXRpb25PZmZzZXQsIGRyb3Bkb3duUG9zaXRpb25PZmZzZXRdLmpvaW4oJyAnKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGRldGVybWluZURyb3Bkb3duUG9zaXRpb24oKTogdm9pZCB7XG5cdFx0Y29uc3QgYm90dG9tU3BhY2UgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuXHRcdGlmIChib3R0b21TcGFjZSA+PSAzMzApIHtcblx0XHRcdHRoaXMuZHJvcGRvd25Qb3NpdGlvblRvVXNlID0gJ2JvdHRvbSc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZHJvcGRvd25Qb3NpdGlvblRvVXNlID0gJ3RvcCc7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBpc0xpbWl0aW5nQ29udGFpbmVyKGVsZW1lbnQ6IEVsZW1lbnQpOiBib29sZWFuIHtcblx0XHRjb25zdCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cdFx0aWYgKHN0eWxlLm92ZXJmbG93WSA9PT0gJ2F1dG8nKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKHN0eWxlLm92ZXJmbG93ID09PSAnYXV0bycpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRpZiAoc3R5bGUub3ZlcmZsb3dZID09PSAnc2Nyb2xsJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmIChzdHlsZS5vdmVyZmxvdyA9PT0gJ3Njcm9sbCcpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRwdWJsaWMgZm9jdXMgPSAoKTogdm9pZCA9PiB7XG5cdFx0dGhpcy5uZ1NlbGVjdC5mb2N1cygpO1xuXHR9XG5cblx0cHVibGljIG9wZW4gPSAoKTogdm9pZCA9PiB7XG5cdFx0dGhpcy5uZ1NlbGVjdC5vcGVuKCk7XG5cdH1cblxuXHRwdWJsaWMgY2xvc2UgPSAoKTogdm9pZCA9PiB7XG5cdFx0dGhpcy5uZ1NlbGVjdC5jbG9zZSgpO1xuXHR9XG5cblx0cHVibGljIG9uQ2xvc2UoKTogdm9pZCB7XG5cdFx0Wy4uLnRoaXMuZ2V0QWxsTGltaXRpbmdDb250YWluZXJzKCksIHdpbmRvd10uZm9yRWFjaChlID0+IGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zZXRGaXhlZERyb3Bkb3duUGFuZWxQb3NpdGlvbikpO1xuXHRcdC8vIEdpdmUgYW5ndWxhciBhIHNlY29uZCB0byByZW5kZXIgdGhlIGNsb3NlZCBzaXR1YXRpb24gYmVmb3JlIGVtaXR0aW5nIHRoZSBjbG9zZSBldmVudFxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5pc09wZW4gPSBmYWxzZTtcblx0XHRcdGlmICghdGhpcy50cnVuY2F0ZU9wdGlvbnMpIHtcblx0XHRcdFx0dGhpcy5yZW1vdmVBbmNob3JzKCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLm9uQ2xvc2VkLmVtaXQoKTtcblx0XHR9KTtcblx0fVxuXG5cdG9uRm9jdXMoKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2luZ2xlVmFsdWVJbnB1dEVsZW1lbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm5nLXNlbGVjdC1zaW5nbGUgLm5nLWlucHV0Jyk7XG5cdFx0Y29uc3QgcHJlZml4RWxlbWVudCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubmctc2VsZWN0LXNpbmdsZSAucHJlZml4Jyk7XG5cdFx0aWYgKGlzVmFsdWVTZXQoc2luZ2xlVmFsdWVJbnB1dEVsZW1lbnQpICYmIGlzVmFsdWVTZXQocHJlZml4RWxlbWVudCkpIHtcblx0XHRcdGNvbnN0IHByZWZpeFdpZHRoID0gcHJlZml4RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblx0XHRcdGNvbnN0IHNwYWNpbmcgPSAnMC40cmVtJztcblx0XHRcdHNpbmdsZVZhbHVlSW5wdXRFbGVtZW50LnN0eWxlLmxlZnQgPSBgY2FsYygke3ByZWZpeFdpZHRofXB4ICsgJHtzcGFjaW5nfSlgO1xuXHRcdH0gZWxzZSBpZiAoaXNWYWx1ZVNldChzaW5nbGVWYWx1ZUlucHV0RWxlbWVudCkpIHtcblx0XHRcdHNpbmdsZVZhbHVlSW5wdXRFbGVtZW50LnN0eWxlLmxlZnQgPSBgMHB4YDtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldFNjcm9sbGJhcldpZHRoKCk6IG51bWJlciB7XG5cdFx0Ly8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGRpdiBlbGVtZW50XG5cdFx0Y29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cblx0XHQvLyBTZXQgdGhlIHN0eWxlIHRvIG1lYXN1cmUgdGhlIHNjcm9sbGJhclxuXHRcdGRpdi5zdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnOyAvLyBFbmFibGUgc2Nyb2xsYmFyXG5cdFx0ZGl2LnN0eWxlLndpZHRoID0gJzEwMHB4JzsgICAgICAvLyBTZXQgYSBmaXhlZCB3aWR0aFxuXHRcdGRpdi5zdHlsZS5oZWlnaHQgPSAnMTAwcHgnOyAgICAgLy8gU2V0IGEgZml4ZWQgaGVpZ2h0XG5cdFx0ZGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsgLy8gUHJldmVudCB0aGUgZWxlbWVudCBmcm9tIHRha2luZyBzcGFjZSBpbiB0aGUgbGF5b3V0XG5cdFx0ZGl2LnN0eWxlLnRvcCA9ICctOTk5OXB4JzsgICAgICAvLyBQb3NpdGlvbiBpdCBvdXQgb2YgdGhlIHZpZXdwb3J0XG5cblx0XHQvLyBBcHBlbmQgdGhlIGVsZW1lbnQgdG8gdGhlIGJvZHlcblx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG5cblx0XHQvLyBHZXQgdGhlIHdpZHRoIG9mIHRoZSBzY3JvbGxiYXJcblx0XHRjb25zdCBzY3JvbGxiYXJXaWR0aCA9IGRpdi5vZmZzZXRXaWR0aCAtIGRpdi5jbGllbnRXaWR0aDtcblxuXHRcdC8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGVsZW1lbnQgZnJvbSB0aGUgRE9NXG5cdFx0ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpO1xuXG5cdFx0cmV0dXJuIHNjcm9sbGJhcldpZHRoO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0c3VwZXIubmdPbkRlc3Ryb3koKTtcblx0XHR0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleUxpc3RlbmVyKTtcblx0fVxufVxuIiwiPG5nLXNlbGVjdFxuXHQjbmdTZWxlY3Rcblx0W3BsYWNlaG9sZGVyXT1cImdldFRyYW5zbGF0aW9uKCdwbGFjZWhvbGRlcicpXCJcblx0YmluZExhYmVsPVwibmFtZVwiXG5cdGJpbmRWYWx1ZT1cImlkXCJcblx0W2l0ZW1zXT1cIm9wdGlvbnNcIlxuXHRbY2xlYXJhYmxlXT1cImNsZWFyYWJsZVwiXG5cdFsobmdNb2RlbCldPVwiaW5uZXJWYWx1ZVwiXG5cdFtuZ0NsYXNzXT1cIntzaG93RXJyb3JzOiBpc0luRXJyb3JTdGF0ZSgpLCB2ZXJ0aWNhbE9yaWVudGF0aW9uOiBvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJywgdHJ1bmNhdGVPcHRpb25zOiB0cnVuY2F0ZU9wdGlvbnMsIG5vblRydW5jYXRlZE9wdGlvbnM6ICF0cnVuY2F0ZU9wdGlvbnMsIHdpdGhTZXBhcmF0aW5nTGluZTogd2l0aFNlcGFyYXRpbmdMaW5lLCBub0JvcmRlckxlZnQ6ICFoYXNCb3JkZXJMZWZ0LCBub0JvcmRlclJpZ2h0OiAhaGFzQm9yZGVyUmlnaHR9XCJcblx0KGNoYW5nZSk9XCJzZXRJbm5lclZhbHVlQW5kTm90aWZ5KGlubmVyVmFsdWUpXCJcblx0W211bHRpcGxlXT1cIm11bHRpcGxlXCJcblx0W2Rpc2FibGVkXT1cImRpc2FibGVkXCJcblx0KGJsdXIpPVwidG91Y2goKTsgb25CbHVyLmVtaXQoKVwiXG5cdChjbGVhcik9XCJvbkNsZWFyLmVtaXQoKVwiXG5cdChzZWFyY2gpPVwic2VhcmNoUXVlcnlDaGFuZ2VkKCRldmVudC50ZXJtKVwiXG5cdFtzZWFyY2hhYmxlXT1cInNlYXJjaGFibGVcIlxuXHRbZHJvcGRvd25Qb3NpdGlvbl09XCJkcm9wZG93blBvc2l0aW9uVG9Vc2VcIlxuXHRbc2VhcmNoRm5dPVwiY3VzdG9tU2VhcmNoRm5cIlxuXHRbc2VsZWN0T25UYWJdPVwidHJ1ZVwiXG5cdFt2aXJ0dWFsU2Nyb2xsXT1cInRydWVcIlxuXHQoc2Nyb2xsKT1cIm9uU2Nyb2xsKCRldmVudC5lbmQpXCJcblx0KG9wZW4pPVwib25PcGVuKClcIlxuXHQoY2xvc2UpPVwib25DbG9zZSgpXCJcblx0KGZvY3VzKT1cIm9uRm9jdXMoKVwiXG4+XG5cdDxuZy10ZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIiBuZy1vcHRpb24tdG1wPlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21PcHRpb25UcGxcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJjdXN0b21PcHRpb25UcGxcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2l0ZW06IGl0ZW19XCI+PC9uZy1jb250YWluZXI+XG5cdFx0PGRpdiBbYXR0ci5kYXRhLWN5XT1cIml0ZW0uaWRcIiAqbmdJZj1cIiFjdXN0b21PcHRpb25UcGxcIj5cblx0XHRcdHt7IGl0ZW0ubmFtZSB9fVxuXHRcdFx0PGRpdiAqbmdJZj1cIml0ZW0uZGVzY3JpcHRpb25cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0tZGVzY3JpcHRpb25cIj5cblx0XHRcdFx0e3sgaXRlbS5kZXNjcmlwdGlvbiB9fVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdDwvbmctdGVtcGxhdGU+XG5cdDxuZy1jb250YWluZXIgKm5nSWY9XCJtdWx0aXBsZSAmJiBtdWx0aXBsZURpc3BsYXllZEFzQW1vdW50ICYmIGlubmVyVmFsdWU/Lmxlbmd0aCA+IDFcIj5cblx0XHQ8bmctdGVtcGxhdGUgbmctbXVsdGktbGFiZWwtdG1wPlxuXHRcdFx0PGRpdiBjbGFzcz1cIm5nLXZhbHVlXCI+XG5cdFx0XHRcdDxzcGFuIGNsYXNzPVwibmctdmFsdWUtbGFiZWxcIj57e2dldFRyYW5zbGF0aW9uKCdhbW91bnRTZWxlY3RlZCcsIGlubmVyVmFsdWU/Lmxlbmd0aCl9fTwvc3Bhbj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvbmctdGVtcGxhdGU+XG5cdDwvbmctY29udGFpbmVyPlxuXHQ8bmctdGVtcGxhdGUgbmctZm9vdGVyLXRtcCAqbmdJZj1cImZvb3RlckVsZW1lbnRcIj5cblx0XHQ8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZvb3RlckVsZW1lbnRcIj48L25nLWNvbnRhaW5lcj5cblx0PC9uZy10ZW1wbGF0ZT5cbjwvbmctc2VsZWN0PlxuXG48ZGl2IGNsYXNzPVwidGFpbFwiICN0YWlsUmVmPlxuXHQ8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdldFRhaWxUcGwoKVwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG48IS0tIEkgbmVlZCB0aGlzIG1vY2sgdG8gcmVzZXJ2ZSB0aGUgc3BhY2UuIEkgY2FudCB1c2UgdGhlIG5vcm1hbCB0YWlsIGJlY2F1c2UgdGhhdCBvcGVucyB0aGUgZHJvcGRvd24gZnJvbSBuZy1zZWxlY3QgLS0+XG48IS0tIEkgaGF2ZSBubyBpZGVhIGhvdyB0byBhdm9pZCB0aGF0IC0tPlxuPGRpdiBjbGFzcz1cInRhaWxNb2NrXCIgI3RhaWxNb2NrUmVmPlxuXHQ8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdldFRhaWxUcGwoKVwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
@@ -1,54 +0,0 @@
1
- import { Component, ContentChild, TemplateRef } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { arrayIsSetAndFilled, splitArrayByCondition } from '../../util/arrays';
4
- import { ValueAccessorBase } from '../value-accessor-base/value-accessor-base.component';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "@angular/forms";
8
- import * as i3 from "../sortable-items/sortable-items.component";
9
- export class SortableGroupedItemsComponent extends ValueAccessorBase {
10
- constructor() {
11
- super(...arguments);
12
- this.reloader = true; // sortable items doesnt correctly update, so we have this boolean that flips to rerender the sortable items comp
13
- }
14
- writeValue(value) {
15
- super.writeValue(value);
16
- this.reloader = false;
17
- setTimeout(() => {
18
- if (arrayIsSetAndFilled(value)) {
19
- this.items = value.flatMap(e => [...e, '']);
20
- }
21
- else {
22
- this.items = [];
23
- }
24
- this.reloader = true;
25
- });
26
- }
27
- onItemsRearranged(value) {
28
- const result = splitArrayByCondition(value, e => e === '').filter(arrayIsSetAndFilled);
29
- this.setInnerValueAndNotify(result);
30
- this.reloader = false;
31
- setTimeout(() => {
32
- this.items = [...this.items, ''].filter((e, i) => {
33
- if (i === 0 && e === '') {
34
- return false;
35
- }
36
- if (e === '' && this.items[i - 1] === '') {
37
- return false;
38
- }
39
- return true;
40
- });
41
- this.reloader = true;
42
- });
43
- }
44
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: SortableGroupedItemsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
45
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: SortableGroupedItemsComponent, selector: "klp-form-sortable-grouped-items", providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: SortableGroupedItemsComponent, multi: true }], queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container>\n\t<klp-form-sortable-items\n\t\t[(ngModel)]=\"items\"\n\t\t(ngModelChange)=\"onItemsRearranged($event)\"\n\t>\n\t\t<ng-template let-item=\"item\">\n\t\t\t<ng-container *ngIf=\"template\" [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item: item }\"></ng-container>\n\t\t\t<div *ngIf=\"!template\">{{item}}</div>\n\t\t</ng-template>\n\t</klp-form-sortable-items>\n</ng-container>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.SortableItemsComponent, selector: "klp-form-sortable-items", inputs: ["sortableItemSize"] }] }); }
46
- }
47
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: SortableGroupedItemsComponent, decorators: [{
48
- type: Component,
49
- args: [{ selector: 'klp-form-sortable-grouped-items', providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: SortableGroupedItemsComponent, multi: true }], template: "<ng-container>\n\t<klp-form-sortable-items\n\t\t[(ngModel)]=\"items\"\n\t\t(ngModelChange)=\"onItemsRearranged($event)\"\n\t>\n\t\t<ng-template let-item=\"item\">\n\t\t\t<ng-container *ngIf=\"template\" [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item: item }\"></ng-container>\n\t\t\t<div *ngIf=\"!template\">{{item}}</div>\n\t\t</ng-template>\n\t</klp-form-sortable-items>\n</ng-container>\n", styles: [":host{display:block}\n"] }]
50
- }], propDecorators: { template: [{
51
- type: ContentChild,
52
- args: [TemplateRef]
53
- }] } });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGFibGUtZ3JvdXBlZC1pdGVtcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9zb3J0YWJsZS1ncm91cGVkLWl0ZW1zL3NvcnRhYmxlLWdyb3VwZWQtaXRlbXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2xpcHBhL25neC1lbmhhbmN5LWZvcm1zL3NyYy9saWIvZWxlbWVudHMvc29ydGFibGUtZ3JvdXBlZC1pdGVtcy9zb3J0YWJsZS1ncm91cGVkLWl0ZW1zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUM3RSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxzREFBc0QsQ0FBQzs7Ozs7QUFRdkYsTUFBTSxPQUFPLDZCQUFpQyxTQUFRLGlCQUFrQztJQU54Rjs7UUFTQyxhQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsaUhBQWlIO0tBZ0NsSTtJQTlCQSxVQUFVLENBQUMsS0FBc0I7UUFDaEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2YsSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNQLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLENBQUM7WUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxLQUF3QjtRQUNoRCxNQUFNLE1BQU0sR0FBb0IscUJBQXFCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBUSxDQUFDO1FBQy9HLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7b0JBQ3pCLE9BQU8sS0FBSyxDQUFDO2dCQUNkLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO29CQUMxQyxPQUFPLEtBQUssQ0FBQztnQkFDZCxDQUFDO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2IsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBbENXLDZCQUE2QjtrR0FBN0IsNkJBQTZCLDBEQUY5QixDQUFDLEVBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSw2QkFBNkIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUMsZ0VBSXBGLFdBQVcsdUVDYjFCLDZaQVdBOzsyRkRBYSw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0MsaUNBQWlDLGFBR2hDLENBQUMsRUFBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVywrQkFBK0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUM7OEJBSXZFLFFBQVE7c0JBQWxDLFlBQVk7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBDb250ZW50Q2hpbGQsIFRlbXBsYXRlUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7YXJyYXlJc1NldEFuZEZpbGxlZCwgc3BsaXRBcnJheUJ5Q29uZGl0aW9ufSBmcm9tICcuLi8uLi91dGlsL2FycmF5cyc7XG5pbXBvcnQge1ZhbHVlQWNjZXNzb3JCYXNlfSBmcm9tICcuLi92YWx1ZS1hY2Nlc3Nvci1iYXNlL3ZhbHVlLWFjY2Vzc29yLWJhc2UuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAna2xwLWZvcm0tc29ydGFibGUtZ3JvdXBlZC1pdGVtcycsXG5cdHRlbXBsYXRlVXJsOiAnLi9zb3J0YWJsZS1ncm91cGVkLWl0ZW1zLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmxzOiBbJy4vc29ydGFibGUtZ3JvdXBlZC1pdGVtcy5jb21wb25lbnQuc2NzcyddLFxuXHRwcm92aWRlcnM6IFt7cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBTb3J0YWJsZUdyb3VwZWRJdGVtc0NvbXBvbmVudCwgbXVsdGk6IHRydWV9XSxcbn0pXG5leHBvcnQgY2xhc3MgU29ydGFibGVHcm91cGVkSXRlbXNDb21wb25lbnQ8VD4gZXh0ZW5kcyBWYWx1ZUFjY2Vzc29yQmFzZTxBcnJheTxBcnJheTxUPj4+IHtcblx0cHVibGljIGl0ZW1zOiBBcnJheTxUIHwgc3RyaW5nPjtcblx0QENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZikgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cdHJlbG9hZGVyID0gdHJ1ZTsgLy8gc29ydGFibGUgaXRlbXMgZG9lc250IGNvcnJlY3RseSB1cGRhdGUsIHNvIHdlIGhhdmUgdGhpcyBib29sZWFuIHRoYXQgZmxpcHMgdG8gcmVyZW5kZXIgdGhlIHNvcnRhYmxlIGl0ZW1zIGNvbXBcblxuXHR3cml0ZVZhbHVlKHZhbHVlOiBBcnJheTxBcnJheTxUPj4pOiB2b2lkIHtcblx0XHRzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcblx0XHR0aGlzLnJlbG9hZGVyID0gZmFsc2U7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAoYXJyYXlJc1NldEFuZEZpbGxlZCh2YWx1ZSkpIHtcblx0XHRcdFx0dGhpcy5pdGVtcyA9IHZhbHVlLmZsYXRNYXAoZSA9PiBbLi4uZSwgJyddKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuaXRlbXMgPSBbXTtcblx0XHRcdH1cblx0XHRcdHRoaXMucmVsb2FkZXIgPSB0cnVlO1xuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIG9uSXRlbXNSZWFycmFuZ2VkKHZhbHVlOiBBcnJheTxUIHwgc3RyaW5nPik6IHZvaWQge1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8QXJyYXk8VD4+ID0gc3BsaXRBcnJheUJ5Q29uZGl0aW9uKHZhbHVlLCBlID0+IGUgPT09ICcnKS5maWx0ZXIoYXJyYXlJc1NldEFuZEZpbGxlZCkgYXMgYW55O1xuXHRcdHRoaXMuc2V0SW5uZXJWYWx1ZUFuZE5vdGlmeShyZXN1bHQpO1xuXHRcdHRoaXMucmVsb2FkZXIgPSBmYWxzZTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMuaXRlbXMgPSBbLi4udGhpcy5pdGVtcywgJyddLmZpbHRlcigoZSwgaSkgPT4ge1xuXHRcdFx0XHRpZiAoaSA9PT0gMCAmJiBlID09PSAnJykge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZSA9PT0gJycgJiYgdGhpcy5pdGVtc1tpIC0gMV0gPT09ICcnKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnJlbG9hZGVyID0gdHJ1ZTtcblx0XHR9KTtcblx0fVxufVxuIiwiPG5nLWNvbnRhaW5lcj5cblx0PGtscC1mb3JtLXNvcnRhYmxlLWl0ZW1zXG5cdFx0WyhuZ01vZGVsKV09XCJpdGVtc1wiXG5cdFx0KG5nTW9kZWxDaGFuZ2UpPVwib25JdGVtc1JlYXJyYW5nZWQoJGV2ZW50KVwiXG5cdD5cblx0XHQ8bmctdGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCI+XG5cdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwidGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW06IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxuXHRcdFx0PGRpdiAqbmdJZj1cIiF0ZW1wbGF0ZVwiPnt7aXRlbX19PC9kaXY+XG5cdFx0PC9uZy10ZW1wbGF0ZT5cblx0PC9rbHAtZm9ybS1zb3J0YWJsZS1pdGVtcz5cbjwvbmctY29udGFpbmVyPlxuIl19