@wlcm/angular 17.7.44 → 17.7.45

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 (180) hide show
  1. package/button/esm2022/index.mjs +3 -0
  2. package/button/esm2022/lib/button.module.mjs +16 -0
  3. package/button/esm2022/lib/components/button/button.component.mjs +37 -0
  4. package/button/esm2022/lib/models/button.models.mjs +2 -0
  5. package/button/esm2022/wlcm-angular-button.mjs +5 -0
  6. package/button/fesm2022/wlcm-angular-button.mjs +7 -7
  7. package/button/fesm2022/wlcm-angular-button.mjs.map +1 -1
  8. package/core/esm2022/index.mjs +17 -0
  9. package/core/esm2022/lib/components/default-loader/default-loader.component.mjs +12 -0
  10. package/core/esm2022/lib/components/icons/calendar-icon/calendar-icon.component.mjs +12 -0
  11. package/core/esm2022/lib/components/icons/chevron-down-icon/chevron-down-icon.component.mjs +12 -0
  12. package/core/esm2022/lib/components/icons/close-icon/close-icon.component.mjs +12 -0
  13. package/core/esm2022/lib/components/icons/search-icon/search-icon.component.mjs +12 -0
  14. package/core/esm2022/lib/components/loader/loader.component.mjs +32 -0
  15. package/core/esm2022/lib/constants/_index.mjs +3 -0
  16. package/core/esm2022/lib/constants/http.constants.mjs +6 -0
  17. package/core/esm2022/lib/constants/icon.contants.mjs +15 -0
  18. package/core/esm2022/lib/constants/loader.constants.mjs +7 -0
  19. package/core/esm2022/lib/directives/_index.mjs +2 -0
  20. package/core/esm2022/lib/directives/icon.directive.mjs +49 -0
  21. package/core/esm2022/lib/models/_index.mjs +3 -0
  22. package/core/esm2022/lib/models/icon.models.mjs +7 -0
  23. package/core/esm2022/lib/models/option.models.mjs +17 -0
  24. package/core/esm2022/lib/services/scroll-detection.api.mjs +34 -0
  25. package/core/esm2022/lib/utils/paginated-data-emulator.utils.mjs +20 -0
  26. package/core/esm2022/lib/utils/stream.utils.mjs +16 -0
  27. package/core/esm2022/wlcm-angular-core.mjs +5 -0
  28. package/core/fesm2022/wlcm-angular-core.mjs +47 -40
  29. package/core/fesm2022/wlcm-angular-core.mjs.map +1 -1
  30. package/core/lib/services/scroll-detection.api.d.ts +4 -1
  31. package/datepicker/esm2022/index.mjs +14 -0
  32. package/datepicker/esm2022/lib/components/calendar-header/calendar-header.component.mjs +63 -0
  33. package/datepicker/esm2022/lib/components/range/date-range-calendar-header/date-range-calendar-header.component.mjs +87 -0
  34. package/datepicker/esm2022/lib/components/range/date-range-picker-bottom-panel/date-range-picker-bottom-panel.component.mjs +19 -0
  35. package/datepicker/esm2022/lib/components/range/date-range-picker-input/date-range-picker-input.component.mjs +126 -0
  36. package/datepicker/esm2022/lib/components/range/double-calendar-range-picker/double-calendar-range-picker.component.mjs +168 -0
  37. package/datepicker/esm2022/lib/components/range/single-calendar-range-picker/single-calendar-range-picker.component.mjs +95 -0
  38. package/datepicker/esm2022/lib/components/single/datepicker-input-container/datepicker-input-container.component.mjs +92 -0
  39. package/datepicker/esm2022/lib/components/single/datepicker-panel/datepicker-panel.component.mjs +33 -0
  40. package/datepicker/esm2022/lib/constants/datepicker.constants.mjs +23 -0
  41. package/datepicker/esm2022/lib/constants/range/date-range-picker.constants.mjs +5 -0
  42. package/datepicker/esm2022/lib/constants/range/date-range-selection-model.constants.mjs +10 -0
  43. package/datepicker/esm2022/lib/constants/range/date-range-trigger-selection-model.constants.mjs +10 -0
  44. package/datepicker/esm2022/lib/datepicker.module.mjs +33 -0
  45. package/datepicker/esm2022/lib/directives/calendar.directive.mjs +15 -0
  46. package/datepicker/esm2022/lib/directives/datepicker-input.base.mjs +103 -0
  47. package/datepicker/esm2022/lib/directives/datepicker-trigger.base.mjs +105 -0
  48. package/datepicker/esm2022/lib/directives/ragne/date-range-picker-input-end.directive.mjs +81 -0
  49. package/datepicker/esm2022/lib/directives/ragne/date-range-picker-input-start.directive.mjs +81 -0
  50. package/datepicker/esm2022/lib/directives/ragne/date-range-picker-input.base.mjs +58 -0
  51. package/datepicker/esm2022/lib/directives/ragne/left-calendar.directive.mjs +51 -0
  52. package/datepicker/esm2022/lib/directives/ragne/right-calendar.directive.mjs +64 -0
  53. package/datepicker/esm2022/lib/directives/single/datepicker-input.directive.mjs +67 -0
  54. package/datepicker/esm2022/lib/models/date-picker.models.mjs +29 -0
  55. package/datepicker/esm2022/lib/models/range/data-range-calendar.models.mjs +61 -0
  56. package/datepicker/esm2022/lib/models/range/date-range-picker.models.mjs +27 -0
  57. package/datepicker/esm2022/lib/models/range/date-range-validation.models.mjs +5 -0
  58. package/datepicker/esm2022/lib/utils/range/date-range-input.validators.mjs +16 -0
  59. package/datepicker/esm2022/lib/utils/range/date-range-picker-errors.mjs +9 -0
  60. package/datepicker/esm2022/wlcm-angular-datepicker.mjs +5 -0
  61. package/datepicker/fesm2022/wlcm-angular-datepicker.mjs +61 -61
  62. package/datepicker/fesm2022/wlcm-angular-datepicker.mjs.map +1 -1
  63. package/datepicker/lib/directives/datepicker-input.base.d.ts +1 -1
  64. package/datepicker/lib/directives/datepicker-trigger.base.d.ts +1 -1
  65. package/datepicker/lib/directives/ragne/date-range-picker-input.base.d.ts +1 -1
  66. package/datepicker/lib/models/range/data-range-calendar.models.d.ts +1 -1
  67. package/filters/esm2022/index.mjs +6 -0
  68. package/filters/esm2022/lib/components/filters-group/filters-group.component.mjs +13 -0
  69. package/filters/esm2022/lib/constants/filter.constants.mjs +3 -0
  70. package/filters/esm2022/lib/constants/index.mjs +2 -0
  71. package/filters/esm2022/lib/directives/filter.directive.mjs +11 -0
  72. package/filters/esm2022/lib/directives/index.mjs +2 -0
  73. package/filters/esm2022/lib/filters.module.mjs +20 -0
  74. package/filters/esm2022/lib/models/array-filter.models.mjs +73 -0
  75. package/filters/esm2022/lib/models/filter.models.mjs +39 -0
  76. package/filters/esm2022/lib/models/filters-group.models.mjs +60 -0
  77. package/filters/esm2022/lib/models/index.mjs +4 -0
  78. package/filters/esm2022/wlcm-angular-filters.mjs +5 -0
  79. package/filters/fesm2022/wlcm-angular-filters.mjs +13 -13
  80. package/filters/fesm2022/wlcm-angular-filters.mjs.map +1 -1
  81. package/filters/lib/models/filters-group.models.d.ts +1 -1
  82. package/forms/esm2022/index.mjs +13 -0
  83. package/forms/esm2022/lib/forms/components/autocomplete/autocomplete.component.mjs +235 -0
  84. package/forms/esm2022/lib/forms/components/checkbox/checkbox.component.mjs +85 -0
  85. package/forms/esm2022/lib/forms/components/checkbox-group/checkbox-group.component.mjs +87 -0
  86. package/forms/esm2022/lib/forms/components/error/error.component.mjs +12 -0
  87. package/forms/esm2022/lib/forms/components/form-field/form-field.component.mjs +137 -0
  88. package/forms/esm2022/lib/forms/components/index.mjs +9 -0
  89. package/forms/esm2022/lib/forms/components/label/label.component.mjs +23 -0
  90. package/forms/esm2022/lib/forms/components/partials/autocomplete-suffix/autocomplete-suffix.component.mjs +19 -0
  91. package/forms/esm2022/lib/forms/components/partials/index.mjs +2 -0
  92. package/forms/esm2022/lib/forms/components/select/select.component.mjs +333 -0
  93. package/forms/esm2022/lib/forms/constants/form-elements.constants.mjs +5 -0
  94. package/forms/esm2022/lib/forms/constants/form-errors.constants.mjs +7 -0
  95. package/forms/esm2022/lib/forms/constants/form-field.constants.mjs +2 -0
  96. package/forms/esm2022/lib/forms/constants/form-state-handlers.constants.mjs +13 -0
  97. package/forms/esm2022/lib/forms/constants/index.mjs +6 -0
  98. package/forms/esm2022/lib/forms/constants/select.constants.mjs +3 -0
  99. package/forms/esm2022/lib/forms/directives/autocomplete.directive.mjs +64 -0
  100. package/forms/esm2022/lib/forms/directives/form-field-custom-container.directive.mjs +17 -0
  101. package/forms/esm2022/lib/forms/directives/form-field-hint.directive.mjs +15 -0
  102. package/forms/esm2022/lib/forms/directives/form-field-prefix.directive.mjs +22 -0
  103. package/forms/esm2022/lib/forms/directives/form-field-suffix.directive.mjs +14 -0
  104. package/forms/esm2022/lib/forms/directives/input.directive.mjs +47 -0
  105. package/forms/esm2022/lib/forms/directives/select-input-binder.directive.mjs +33 -0
  106. package/forms/esm2022/lib/forms/forms.module.mjs +64 -0
  107. package/forms/esm2022/lib/forms/models/_index.mjs +6 -0
  108. package/forms/esm2022/lib/forms/models/autocomplete.models.mjs +10 -0
  109. package/forms/esm2022/lib/forms/models/form-errors.models.mjs +2 -0
  110. package/forms/esm2022/lib/forms/models/form.models.mjs +2 -0
  111. package/forms/esm2022/lib/forms/models/input.models.mjs +2 -0
  112. package/forms/esm2022/lib/forms/models/select.models.mjs +2 -0
  113. package/forms/esm2022/lib/forms/pipes/errors-mapper.pipe.mjs +53 -0
  114. package/forms/esm2022/lib/forms/services/form-state-handler.service.mjs +19 -0
  115. package/forms/esm2022/lib/forms/services/index.mjs +3 -0
  116. package/forms/esm2022/lib/forms/services/places.api.mjs +62 -0
  117. package/forms/esm2022/wlcm-angular-forms.mjs +5 -0
  118. package/forms/fesm2022/wlcm-angular-forms.mjs +66 -66
  119. package/forms/fesm2022/wlcm-angular-forms.mjs.map +1 -1
  120. package/forms/lib/forms/models/autocomplete.models.d.ts +1 -1
  121. package/forms/lib/forms/services/places.api.d.ts +1 -0
  122. package/package.json +1 -1
  123. package/phone-input/esm2022/index.mjs +5 -0
  124. package/phone-input/esm2022/lib/components/country-code-select/country-code-select.component.mjs +32 -0
  125. package/phone-input/esm2022/lib/components/phone-input-container/phone-input-container.component.mjs +107 -0
  126. package/phone-input/esm2022/lib/constants/country-code-options.constants.mjs +20 -0
  127. package/phone-input/esm2022/lib/constants/phone-adapter.constants.mjs +3 -0
  128. package/phone-input/esm2022/lib/directives/phone-input.directive.mjs +155 -0
  129. package/phone-input/esm2022/lib/models/country-code.models.mjs +10 -0
  130. package/phone-input/esm2022/lib/models/phone-adapter.models.mjs +3 -0
  131. package/phone-input/esm2022/lib/models/phone.models.mjs +5 -0
  132. package/phone-input/esm2022/lib/phone-input.module.mjs +20 -0
  133. package/phone-input/esm2022/lib/pipes/phone-code.pipe.mjs +18 -0
  134. package/phone-input/esm2022/wlcm-angular-phone-input.mjs +5 -0
  135. package/phone-input/fesm2022/wlcm-angular-phone-input.mjs +16 -16
  136. package/phone-input/fesm2022/wlcm-angular-phone-input.mjs.map +1 -1
  137. package/search-field/esm2022/index.mjs +3 -0
  138. package/search-field/esm2022/lib/components/search-field/search-field.component.mjs +41 -0
  139. package/search-field/esm2022/lib/search-field.module.mjs +18 -0
  140. package/search-field/esm2022/wlcm-angular-search-field.mjs +5 -0
  141. package/search-field/fesm2022/wlcm-angular-search-field.mjs +7 -7
  142. package/search-field/fesm2022/wlcm-angular-search-field.mjs.map +1 -1
  143. package/stepper/esm2022/index.mjs +11 -0
  144. package/stepper/esm2022/lib/components/step/step.component.mjs +53 -0
  145. package/stepper/esm2022/lib/components/step-header/step-header.component.mjs +81 -0
  146. package/stepper/esm2022/lib/components/stepper/stepper.component.mjs +15 -0
  147. package/stepper/esm2022/lib/components/stepper-header/stepper-header.component.mjs +16 -0
  148. package/stepper/esm2022/lib/constants/step.constants.mjs +9 -0
  149. package/stepper/esm2022/lib/constants/stepper.stepper.mjs +3 -0
  150. package/stepper/esm2022/lib/directives/load-on-active-step.directive.mjs +51 -0
  151. package/stepper/esm2022/lib/models/step.models.mjs +60 -0
  152. package/stepper/esm2022/lib/models/stepper.models.mjs +114 -0
  153. package/stepper/esm2022/lib/stepper.module.mjs +34 -0
  154. package/stepper/esm2022/wlcm-angular-stepper.mjs +5 -0
  155. package/stepper/fesm2022/wlcm-angular-stepper.mjs +25 -25
  156. package/stepper/fesm2022/wlcm-angular-stepper.mjs.map +1 -1
  157. package/stepper/lib/models/step.models.d.ts +1 -1
  158. package/stepper/lib/models/stepper.models.d.ts +1 -1
  159. package/table/esm2022/index.mjs +9 -0
  160. package/table/esm2022/lib/components/table/table.component.mjs +79 -0
  161. package/table/esm2022/lib/components/table-head/table-head.component.mjs +18 -0
  162. package/table/esm2022/lib/components/table-head-actions/table-head-actions.component.mjs +41 -0
  163. package/table/esm2022/lib/components/table-head-data/table-head-data.component.mjs +12 -0
  164. package/table/esm2022/lib/components/table-row/table-row.component.mjs +87 -0
  165. package/table/esm2022/lib/components/table-row-actions/table-row-actions.component.mjs +12 -0
  166. package/table/esm2022/lib/components/table-row-data/table-row-data.component.mjs +12 -0
  167. package/table/esm2022/lib/components/table-row-spacer/table-row-spacer.component.mjs +12 -0
  168. package/table/esm2022/lib/constants/table-row.constants.mjs +3 -0
  169. package/table/esm2022/lib/constants/table.constants.mjs +5 -0
  170. package/table/esm2022/lib/directives/scrollable-table-container.directive.mjs +46 -0
  171. package/table/esm2022/lib/models/table-config-manager.models.mjs +18 -0
  172. package/table/esm2022/lib/models/table-row.models.mjs +2 -0
  173. package/table/esm2022/lib/models/table-selection-model.mjs +48 -0
  174. package/table/esm2022/lib/models/table.models.mjs +2 -0
  175. package/table/esm2022/lib/pipes/table-row-injector.pipe.mjs +24 -0
  176. package/table/esm2022/lib/table.module.mjs +38 -0
  177. package/table/esm2022/lib/utils/table-errors.utils.mjs +6 -0
  178. package/table/esm2022/wlcm-angular-table.mjs +5 -0
  179. package/table/fesm2022/wlcm-angular-table.mjs +34 -34
  180. package/table/fesm2022/wlcm-angular-table.mjs.map +1 -1
@@ -0,0 +1,333 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { CommonModule } from '@angular/common';
3
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, Inject, Injector, Input, NgZone, Optional, ViewChild, computed, forwardRef, inject, input, output, runInInjectionContext, signal, viewChildren, } from '@angular/core';
4
+ import { NG_VALIDATORS, NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms';
5
+ import { MAT_SELECT_CONFIG, MatOption, MatSelect, MatSelectModule } from '@angular/material/select';
6
+ import { DEFAULT_QUERY_PARAMS, ScrollDetectionApi, WlcmIconDirective, WlcmIconName, } from '@wlcm/angular/core';
7
+ import { WLCM_FORM_CONTROL, WLCM_FORM_CONTROL_PROVIDER, WLCM_FORM_FIELD } from '../../constants';
8
+ import { WlcmSelectInputBinderDirective } from '../../directives/select-input-binder.directive';
9
+ import { BehaviorSubject, EMPTY, Observable, Subject, filter, first, merge, of, switchMap, takeUntil, } from 'rxjs';
10
+ import { WLCM_SELECT_CONFIG } from '../../constants/select.constants';
11
+ import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
12
+ import { toObservable } from '@angular/core/rxjs-interop';
13
+ import { CdkOverlayOrigin } from '@angular/cdk/overlay';
14
+ import { cloneDeep, mergeWith } from 'lodash-es';
15
+ import * as i0 from "@angular/core";
16
+ import * as i1 from "@wlcm/angular/core";
17
+ import * as i2 from "../../directives/select-input-binder.directive";
18
+ import * as i3 from "@angular/common";
19
+ import * as i4 from "@angular/material/select";
20
+ import * as i5 from "@angular/material/core";
21
+ const PANEL_CLASS = 'wlcm-select-panel';
22
+ const DEFAULT_CONFIG = { overlayPanelClass: [PANEL_CLASS] };
23
+ const mergeConfig = (config) => {
24
+ const customizer = (_default, _new) => {
25
+ if (Array.isArray(_default))
26
+ return _default.concat(_new);
27
+ };
28
+ return mergeWith({ ...DEFAULT_CONFIG }, config, customizer);
29
+ };
30
+ let WlcmSelectComponent = class WlcmSelectComponent {
31
+ openPanel() {
32
+ this.matSelect.open();
33
+ }
34
+ constructor(zone, injector, changeDetectorRef, scrollDetectionApi, formField, parentFormMember) {
35
+ this.zone = zone;
36
+ this.injector = injector;
37
+ this.changeDetectorRef = changeDetectorRef;
38
+ this.scrollDetectionApi = scrollDetectionApi;
39
+ this.formField = formField;
40
+ this.parentFormMember = parentFormMember;
41
+ this.multiple = false;
42
+ this.placeholder = 'Not selected';
43
+ this.canSelect = (_) => true;
44
+ this.queryParams = cloneDeep(DEFAULT_QUERY_PARAMS);
45
+ this.paginated = input(false);
46
+ this.options = input([]);
47
+ this.paginatedOptions = signal([]);
48
+ this.selectOptionFormat = input('ValueOnly');
49
+ this.optionTemplate = input(null);
50
+ this.triggerTemplate = input();
51
+ this.isOptionDisabled = input(() => false);
52
+ this.selectionChange = output();
53
+ this.opened = output();
54
+ this.closed = output();
55
+ this.value = signal(null);
56
+ this.disabled = signal(false);
57
+ this.WlcmIconName = WlcmIconName;
58
+ this._paginatedData = null;
59
+ this._previousValue = null;
60
+ this._optionsCache = new Set();
61
+ this.computedOptions = computed(() => {
62
+ const options = this.paginated() ? this.paginatedOptions() : this.options();
63
+ if (this.isOptionDisabled() && options.length > 0) {
64
+ this.updateOptionsStatus();
65
+ }
66
+ return options;
67
+ });
68
+ this.prefilledOptions = signal([]);
69
+ this.matOptions = viewChildren(MatOption);
70
+ this._refreshOptions$ = new Subject();
71
+ this._focusStream$ = new BehaviorSubject(EMPTY);
72
+ this._blurStream$ = new BehaviorSubject(EMPTY);
73
+ this.focus$ = this._focusStream$.pipe(switchMap((stream) => stream));
74
+ this.blur$ = this._blurStream$.pipe(switchMap((stream) => stream));
75
+ this.adjustedValue$ = new BehaviorSubject(null);
76
+ this.viewReady$ = new Subject();
77
+ this.selected$ = new Subject();
78
+ this.compareWith = (optionA, optionB) => {
79
+ if (this.areOptionsEqual(optionA, optionB)) {
80
+ if (this.selectOptionFormat() === 'CompleteOption' && typeof optionB !== 'object') {
81
+ this._changed?.(optionA);
82
+ }
83
+ return true;
84
+ }
85
+ return false;
86
+ };
87
+ this.focus = () => this.matSelect.open();
88
+ this.isFocused = () => this.isOpen;
89
+ if (this.parentFormMember) {
90
+ this.handleStateChange();
91
+ }
92
+ this.handleAdjustedValue();
93
+ merge(toObservable(this.paginated).pipe(filter(Boolean)), this._refreshOptions$)
94
+ .pipe(untilDestroyed(this))
95
+ .subscribe(() => this.loadPaginatedOptions());
96
+ }
97
+ ngAfterViewInit() {
98
+ this.viewReady$.next();
99
+ runInInjectionContext(this.injector, () => {
100
+ if (this.formField) {
101
+ this.matSelect._preferredOverlayOrigin = new CdkOverlayOrigin(this.formField.inputContainer);
102
+ }
103
+ });
104
+ this._focusStream$.next(this.matSelect._openedStream);
105
+ this._blurStream$.next(this.matSelect._closedStream);
106
+ }
107
+ select(event) {
108
+ this.selected$.next();
109
+ this.matSelect.value = event.value;
110
+ this.validateSelectedOption(event.value)
111
+ .pipe(takeUntil(this.selected$))
112
+ .subscribe((canSelect) => {
113
+ if (!canSelect)
114
+ return this.revertPreviousValue();
115
+ this.updateValue(event.value);
116
+ this._changed?.(event.value);
117
+ this._validatorChanged?.();
118
+ this.selectionChange.emit(event);
119
+ });
120
+ }
121
+ areOptionsEqual(optionA, optionB) {
122
+ return (optionA?.value || optionA) === (optionB?.value || optionB);
123
+ }
124
+ revertPreviousValue() {
125
+ this.matSelect.value = this._previousValue;
126
+ }
127
+ updateValue(value) {
128
+ this.value.set(value);
129
+ this._previousValue = value;
130
+ }
131
+ validateSelectedOption(value) {
132
+ return new Observable((observer) => {
133
+ const response = this.canSelect(value);
134
+ const source = response instanceof Observable ? response.pipe(first()) : of(response);
135
+ source.subscribe((result) => {
136
+ observer.next(result);
137
+ observer.complete();
138
+ });
139
+ });
140
+ }
141
+ panelOpened() {
142
+ this.opened.emit();
143
+ this.handleScrollDown();
144
+ }
145
+ panelClosed() {
146
+ this.closed.emit();
147
+ this._touched?.();
148
+ }
149
+ updateOptionsStatus() {
150
+ this.matOptions().forEach((matOption) => {
151
+ matOption.disabled = this.isOptionDisabled()(matOption.value);
152
+ });
153
+ }
154
+ writeValue(value) {
155
+ if (this.paginated())
156
+ this.prefillOptions(value);
157
+ const formattedValue = this.prepareValueForPatch(value);
158
+ this.updateValue(formattedValue);
159
+ }
160
+ registerOnChange(callback) {
161
+ this._changed = callback;
162
+ }
163
+ registerOnTouched(callback) {
164
+ this._touched = callback;
165
+ }
166
+ registerOnValidatorChange(callback) {
167
+ this._validatorChanged = callback;
168
+ }
169
+ setDisabledState(isDisabled) {
170
+ this.disabled.set(isDisabled);
171
+ }
172
+ validate() {
173
+ return null;
174
+ }
175
+ refreshOptions() {
176
+ this._refreshOptions$.next();
177
+ }
178
+ get isOpen() {
179
+ return this.matSelect?.panelOpen ?? false;
180
+ }
181
+ prepareValueForPatch(value) {
182
+ const formatedValue = this.formatValue(value);
183
+ if (formatedValue.changed)
184
+ this.adjustedValue$.next(formatedValue.value);
185
+ return formatedValue.value;
186
+ }
187
+ formatValue(value) {
188
+ let changed = false;
189
+ const _formatOption = (value) => {
190
+ const formatedOption = this.formatOption(value);
191
+ if (formatedOption.changed)
192
+ changed = true;
193
+ return formatedOption.value;
194
+ };
195
+ if (value instanceof Array) {
196
+ const options = value.map(_formatOption);
197
+ return { changed, value: options };
198
+ }
199
+ const option = _formatOption(value);
200
+ return { changed, value: option };
201
+ }
202
+ formatOption(value) {
203
+ if (value instanceof Object && this.selectOptionFormat() === 'ValueOnly') {
204
+ return { changed: true, value: value.value };
205
+ }
206
+ return { changed: false, value };
207
+ }
208
+ loadPaginatedOptions() {
209
+ this.queryParams.page = 1;
210
+ this.fetchPaginatedOptions(this.queryParams)
211
+ .pipe(untilDestroyed(this), first())
212
+ .subscribe((paginatedData) => {
213
+ this._optionsCache.clear();
214
+ this.cacheOptions(paginatedData.data);
215
+ this._paginatedData = paginatedData;
216
+ this.paginatedOptions.set(paginatedData.data);
217
+ });
218
+ }
219
+ loadMorePaginatedOptions() {
220
+ if (!this._paginatedData || this._paginatedData.currPage + 1 > this._paginatedData.totalPages)
221
+ return;
222
+ this.queryParams.page++;
223
+ this.fetchPaginatedOptions({ ...this.queryParams })
224
+ .pipe(untilDestroyed(this), first())
225
+ .subscribe((paginatedData) => {
226
+ this.cacheOptions(paginatedData.data);
227
+ this._paginatedData = paginatedData;
228
+ this.paginatedOptions.update((options) => [...options, ...paginatedData.data]);
229
+ });
230
+ }
231
+ cacheOptions(options) {
232
+ options.forEach((option) => this._optionsCache.add(option.value));
233
+ this.syncPrefilledOptions();
234
+ }
235
+ syncPrefilledOptions() {
236
+ if (this.prefilledOptions().length === 0)
237
+ return;
238
+ this.prefilledOptions.update((options) => {
239
+ return options.filter((option) => !this._optionsCache.has(option.value));
240
+ });
241
+ }
242
+ prefillOptions(value) {
243
+ let prefilledOptions = [];
244
+ if (value instanceof Array) {
245
+ prefilledOptions = value.filter((option) => option instanceof Object);
246
+ }
247
+ else if (value instanceof Object) {
248
+ prefilledOptions = [value];
249
+ }
250
+ this.prefilledOptions.set(prefilledOptions);
251
+ }
252
+ handleScrollDown() {
253
+ const element = document.querySelector('.mat-mdc-select-panel');
254
+ this.zone.runOutsideAngular(() => {
255
+ this.scrollDetectionApi.onScrolledDown(element).subscribe(() => {
256
+ this.zone.run(() => this.loadMorePaginatedOptions());
257
+ });
258
+ });
259
+ }
260
+ handleStateChange() {
261
+ this.parentFormMember.stateChanges$.pipe(untilDestroyed(this)).subscribe(() => {
262
+ this._validatorChanged?.();
263
+ this.changeDetectorRef.markForCheck();
264
+ });
265
+ }
266
+ handleAdjustedValue() {
267
+ this.viewReady$
268
+ .pipe(switchMap(() => this.adjustedValue$.pipe(filter(Boolean))))
269
+ .subscribe((value) => this._changed?.(value));
270
+ }
271
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: WlcmSelectComponent, deps: [{ token: i0.NgZone }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i1.ScrollDetectionApi }, { token: WLCM_FORM_FIELD }, { token: WLCM_FORM_CONTROL, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
272
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: WlcmSelectComponent, isStandalone: true, selector: "wlcm-select", inputs: { multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: false, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: false, isRequired: false, transformFunction: null }, fetchPaginatedOptions: { classPropertyName: "fetchPaginatedOptions", publicName: "fetchPaginatedOptions", isSignal: false, isRequired: false, transformFunction: null }, canSelect: { classPropertyName: "canSelect", publicName: "canSelect", isSignal: false, isRequired: false, transformFunction: null }, queryParams: { classPropertyName: "queryParams", publicName: "queryParams", isSignal: false, isRequired: false, transformFunction: (params) => cloneDeep(params) }, paginated: { classPropertyName: "paginated", publicName: "paginated", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, selectOptionFormat: { classPropertyName: "selectOptionFormat", publicName: "selectOptionFormat", isSignal: true, isRequired: false, transformFunction: null }, optionTemplate: { classPropertyName: "optionTemplate", publicName: "optionTemplate", isSignal: true, isRequired: false, transformFunction: null }, triggerTemplate: { classPropertyName: "triggerTemplate", publicName: "triggerTemplate", isSignal: true, isRequired: false, transformFunction: null }, isOptionDisabled: { classPropertyName: "isOptionDisabled", publicName: "isOptionDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectionChange: "selectionChange", opened: "opened", closed: "closed" }, host: { listeners: { "click": "openPanel()" } }, providers: [
273
+ WLCM_FORM_CONTROL_PROVIDER,
274
+ {
275
+ provide: MAT_SELECT_CONFIG,
276
+ useFactory: () => {
277
+ const wlcmConfig = inject(WLCM_SELECT_CONFIG, { optional: true }) ?? {};
278
+ return mergeConfig(wlcmConfig);
279
+ },
280
+ },
281
+ { provide: NG_VALIDATORS, useExisting: forwardRef(() => WlcmSelectComponent), multi: true },
282
+ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => WlcmSelectComponent), multi: true },
283
+ ], viewQueries: [{ propertyName: "matOptions", predicate: MatOption, descendants: true, isSignal: true }, { propertyName: "matSelect", first: true, predicate: MatSelect, descendants: true }], hostDirectives: [{ directive: i2.WlcmSelectInputBinderDirective }], ngImport: i0, template: "<mat-select\n #selectComponent\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n [multiple]=\"multiple\"\n [disableRipple]=\"true\"\n [placeholder]=\"placeholder\"\n [hideSingleSelectionIndicator]=\"true\"\n [ngClass]=\"{ focused: selectComponent.focused }\"\n (selectionChange)=\"select($event)\"\n [compareWith]=\"compareWith\"\n (opened)=\"panelOpened()\"\n (closed)=\"panelClosed()\"\n>\n @if (triggerTemplate()) {\n <mat-select-trigger>\n <ng-container\n *ngTemplateOutlet=\"\n triggerTemplate()!;\n context: $any({ $implicit: selectComponent.selected })\n \"\n ></ng-container>\n </mat-select-trigger>\n }\n\n <mat-option\n *ngFor=\"let option of prefilledOptions()\"\n [value]=\"selectOptionFormat() === 'CompleteOption' ? option : option.value\"\n >\n <ng-container\n [ngTemplateOutlet]=\"wlcmSelectOptionContent\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\"\n ></ng-container>\n </mat-option>\n\n <mat-option\n *ngFor=\"let option of computedOptions()\"\n [value]=\"selectOptionFormat() === 'CompleteOption' ? option : option.value\"\n >\n <ng-container\n [ngTemplateOutlet]=\"wlcmSelectOptionContent\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\"\n ></ng-container>\n </mat-option>\n</mat-select>\n\n<div class=\"wlcm-select-arrow\">\n <ng-container\n [wlcmIcon]=\"WlcmIconName.CHEVRON_DOWN\"\n [wlcmIconStopPropagation]=\"false\"\n ></ng-container>\n</div>\n\n<ng-template #wlcmSelectOptionContent let-option>\n @if (optionTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"optionTemplate(); context: $any({ $implicit: option })\"\n ></ng-container>\n } @else {\n {{ option.viewValue }}\n }\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i4.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: WlcmIconDirective, selector: "[wlcmIcon]", inputs: ["wlcmIcon", "wlcmIconStopPropagation"], outputs: ["wlcmIconClicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
284
+ };
285
+ WlcmSelectComponent = __decorate([
286
+ UntilDestroy(),
287
+ __metadata("design:paramtypes", [NgZone,
288
+ Injector,
289
+ ChangeDetectorRef,
290
+ ScrollDetectionApi, Object, Object])
291
+ ], WlcmSelectComponent);
292
+ export { WlcmSelectComponent };
293
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: WlcmSelectComponent, decorators: [{
294
+ type: Component,
295
+ args: [{ selector: 'wlcm-select', standalone: true, imports: [CommonModule, MatSelectModule, ReactiveFormsModule, WlcmIconDirective, WlcmSelectInputBinderDirective], changeDetection: ChangeDetectionStrategy.OnPush, hostDirectives: [WlcmSelectInputBinderDirective], providers: [
296
+ WLCM_FORM_CONTROL_PROVIDER,
297
+ {
298
+ provide: MAT_SELECT_CONFIG,
299
+ useFactory: () => {
300
+ const wlcmConfig = inject(WLCM_SELECT_CONFIG, { optional: true }) ?? {};
301
+ return mergeConfig(wlcmConfig);
302
+ },
303
+ },
304
+ { provide: NG_VALIDATORS, useExisting: forwardRef(() => WlcmSelectComponent), multi: true },
305
+ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => WlcmSelectComponent), multi: true },
306
+ ], template: "<mat-select\n #selectComponent\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n [multiple]=\"multiple\"\n [disableRipple]=\"true\"\n [placeholder]=\"placeholder\"\n [hideSingleSelectionIndicator]=\"true\"\n [ngClass]=\"{ focused: selectComponent.focused }\"\n (selectionChange)=\"select($event)\"\n [compareWith]=\"compareWith\"\n (opened)=\"panelOpened()\"\n (closed)=\"panelClosed()\"\n>\n @if (triggerTemplate()) {\n <mat-select-trigger>\n <ng-container\n *ngTemplateOutlet=\"\n triggerTemplate()!;\n context: $any({ $implicit: selectComponent.selected })\n \"\n ></ng-container>\n </mat-select-trigger>\n }\n\n <mat-option\n *ngFor=\"let option of prefilledOptions()\"\n [value]=\"selectOptionFormat() === 'CompleteOption' ? option : option.value\"\n >\n <ng-container\n [ngTemplateOutlet]=\"wlcmSelectOptionContent\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\"\n ></ng-container>\n </mat-option>\n\n <mat-option\n *ngFor=\"let option of computedOptions()\"\n [value]=\"selectOptionFormat() === 'CompleteOption' ? option : option.value\"\n >\n <ng-container\n [ngTemplateOutlet]=\"wlcmSelectOptionContent\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\"\n ></ng-container>\n </mat-option>\n</mat-select>\n\n<div class=\"wlcm-select-arrow\">\n <ng-container\n [wlcmIcon]=\"WlcmIconName.CHEVRON_DOWN\"\n [wlcmIconStopPropagation]=\"false\"\n ></ng-container>\n</div>\n\n<ng-template #wlcmSelectOptionContent let-option>\n @if (optionTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"optionTemplate(); context: $any({ $implicit: option })\"\n ></ng-container>\n } @else {\n {{ option.viewValue }}\n }\n</ng-template>\n" }]
307
+ }], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i1.ScrollDetectionApi }, { type: undefined, decorators: [{
308
+ type: Inject,
309
+ args: [WLCM_FORM_FIELD]
310
+ }] }, { type: undefined, decorators: [{
311
+ type: Optional
312
+ }, {
313
+ type: Inject,
314
+ args: [WLCM_FORM_CONTROL]
315
+ }] }], propDecorators: { multiple: [{
316
+ type: Input
317
+ }], placeholder: [{
318
+ type: Input
319
+ }], fetchPaginatedOptions: [{
320
+ type: Input
321
+ }], canSelect: [{
322
+ type: Input
323
+ }], queryParams: [{
324
+ type: Input,
325
+ args: [{ transform: (params) => cloneDeep(params) }]
326
+ }], matSelect: [{
327
+ type: ViewChild,
328
+ args: [MatSelect]
329
+ }], openPanel: [{
330
+ type: HostListener,
331
+ args: ['click']
332
+ }] } });
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvZm9ybXMvc3JjL2xpYi9mb3Jtcy9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9mb3Jtcy9zcmMvbGliL2Zvcm1zL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBRUwsTUFBTSxFQUNOLFFBQVEsRUFJUixTQUFTLEVBRVQsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixxQkFBcUIsRUFDckIsTUFBTSxFQUNOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixtQkFBbUIsR0FHcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBbUIsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckgsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLFlBQVksR0FHYixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSwwQkFBMEIsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUVoRyxPQUFPLEVBQ0wsZUFB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LEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0NBRTFGLE9BQU8sV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUNqQyxDQUFDO3lCQUNGO3dCQUNELEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7d0JBQzNGLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtxQkFDaEc7OzBCQThGRSxNQUFNOzJCQUFDLGVBQWU7OzBCQUN0QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGlCQUFpQjt5Q0E1RjlCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFZ0UsV0FBVztzQkFBaEYsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLE1BQXVCLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFzRDlDLFNBQVM7c0JBQTlCLFNBQVM7dUJBQUMsU0FBUztnQkFFRyxTQUFTO3NCQUEvQixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIElucHV0U2lnbmFsLFxuICBOZ1pvbmUsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXRFbWl0dGVyUmVmLFxuICBTaWduYWwsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFdyaXRhYmxlU2lnbmFsLFxuICBjb21wdXRlZCxcbiAgZm9yd2FyZFJlZixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBydW5JbkluamVjdGlvbkNvbnRleHQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNQVRfU0VMRUNUX0NPTkZJRywgTWF0T3B0aW9uLCBNYXRTZWxlY3QsIE1hdFNlbGVjdENoYW5nZSwgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7XG4gIERFRkFVTFRfUVVFUllfUEFSQU1TLFxuICBTY3JvbGxEZXRlY3Rpb25BcGksXG4gIFdsY21JY29uRGlyZWN0aXZlLFxuICBXbGNtSWNvbk5hbWUsXG4gIFdsY21PcHRpb24sXG4gIFdsY21TZWxlY3RPcHRpb25Gb3JtYXQsXG59IGZyb20gJ0B3bGNtL2FuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXTENNX0ZPUk1fQ09OVFJPTCwgV0xDTV9GT1JNX0NPTlRST0xfUFJPVklERVIsIFdMQ01fRk9STV9GSUVMRCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBXbGNtU2VsZWN0SW5wdXRCaW5kZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3NlbGVjdC1pbnB1dC1iaW5kZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IFdsY21Gb3JtQ29udHJvbCwgV2xjbUZvcm1GaWVsZCwgV2xjbUZvcm1GaWVsZElucHV0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL19pbmRleCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIEVNUFRZLFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBTdWJzY3JpYmVyLFxuICBmaWx0ZXIsXG4gIGZpcnN0LFxuICBtZXJnZSxcbiAgb2YsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZVVudGlsLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElzT3B0aW9uRGlzYWJsZWRGbiwgV2xjbUNhblNlbGVjdEZuLCBXbGNtU2VsZWN0Q29uZmlnLCBXbGNtU2VsZWN0VmFsdWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2VsZWN0Lm1vZGVscyc7XG5pbXBvcnQgeyBXTENNX1NFTEVDVF9DT05GSUcgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvc2VsZWN0LmNvbnN0YW50cyc7XG5pbXBvcnQgeyBVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IFdsY21RdWVyeVBhcmFtcywgV2xjbVBhZ2luYXRlZERhdGEgfSBmcm9tICdAd2xjbS9jb21tb24nO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQ2RrT3ZlcmxheU9yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IGNsb25lRGVlcCwgbWVyZ2VXaXRoIH0gZnJvbSAnbG9kYXNoLWVzJztcblxudHlwZSBPcHRpb25UZW1wbGF0ZUNvbnRleHQgPSBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogV2xjbU9wdGlvbiB9PjtcblxuY29uc3QgUEFORUxfQ0xBU1M6IHN0cmluZyA9ICd3bGNtLXNlbGVjdC1wYW5lbCc7XG5cbmNvbnN0IERFRkFVTFRfQ09ORklHOiBXbGNtU2VsZWN0Q29uZmlnID0geyBvdmVybGF5UGFuZWxDbGFzczogW1BBTkVMX0NMQVNTXSB9O1xuXG5jb25zdCBtZXJnZUNvbmZpZyA9IChjb25maWc6IFdsY21TZWxlY3RDb25maWcpOiBXbGNtU2VsZWN0Q29uZmlnID0+IHtcbiAgY29uc3QgY3VzdG9taXplciA9IChfZGVmYXVsdDogV2xjbVNlbGVjdENvbmZpZywgX25ldzogV2xjbVNlbGVjdENvbmZpZyk6IEFycmF5PHVua25vd24+IHwgdm9pZCA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoX2RlZmF1bHQpKSByZXR1cm4gX2RlZmF1bHQuY29uY2F0KF9uZXcpO1xuICB9O1xuXG4gIHJldHVybiBtZXJnZVdpdGgoeyAuLi5ERUZBVUxUX0NPTkZJRyB9LCBjb25maWcsIGN1c3RvbWl6ZXIpO1xufTtcblxuQFVudGlsRGVzdHJveSgpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3bGNtLXNlbGVjdCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdFNlbGVjdE1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgV2xjbUljb25EaXJlY3RpdmUsIFdsY21TZWxlY3RJbnB1dEJpbmRlckRpcmVjdGl2ZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3REaXJlY3RpdmVzOiBbV2xjbVNlbGVjdElucHV0QmluZGVyRGlyZWN0aXZlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgV0xDTV9GT1JNX0NPTlRST0xfUFJPVklERVIsXG4gICAge1xuICAgICAgcHJvdmlkZTogTUFUX1NFTEVDVF9DT05GSUcsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHdsY21Db25maWc6IFdsY21TZWxlY3RDb25maWcgPSBpbmplY3QoV0xDTV9TRUxFQ1RfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pID8/IHt9O1xuXG4gICAgICAgIHJldHVybiBtZXJnZUNvbmZpZyh3bGNtQ29uZmlnKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7IHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFdsY21TZWxlY3RDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9LFxuICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFdsY21TZWxlY3RDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBXbGNtU2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgV2xjbUZvcm1GaWVsZElucHV0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcbiAgQElucHV0KCkgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ05vdCBzZWxlY3RlZCc7XG5cbiAgQElucHV0KCkgZmV0Y2hQYWdpbmF0ZWRPcHRpb25zPzogKHBhcmFtczogV2xjbVF1ZXJ5UGFyYW1zKSA9PiBPYnNlcnZhYmxlPFdsY21QYWdpbmF0ZWREYXRhPFdsY21PcHRpb24+PjtcblxuICBASW5wdXQoKSBjYW5TZWxlY3Q6IFdsY21DYW5TZWxlY3RGbiA9IChfOiBXbGNtU2VsZWN0VmFsdWUpID0+IHRydWU7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiAocGFyYW1zOiBXbGNtUXVlcnlQYXJhbXMpID0+IGNsb25lRGVlcChwYXJhbXMpIH0pIHF1ZXJ5UGFyYW1zOiBXbGNtUXVlcnlQYXJhbXMgPVxuICAgIGNsb25lRGVlcChERUZBVUxUX1FVRVJZX1BBUkFNUyk7XG5cbiAgcGFnaW5hdGVkOiBJbnB1dFNpZ25hbDxib29sZWFuPiA9IGlucHV0KGZhbHNlKTtcblxuICBvcHRpb25zOiBJbnB1dFNpZ25hbDxXbGNtT3B0aW9uW10+ID0gaW5wdXQ8V2xjbU9wdGlvbltdPihbXSk7XG5cbiAgcGFnaW5hdGVkT3B0aW9uczogV3JpdGFibGVTaWduYWw8V2xjbU9wdGlvbltdPiA9IHNpZ25hbChbXSk7XG5cbiAgc2VsZWN0T3B0aW9uRm9ybWF0OiBJbnB1dFNpZ25hbDxXbGNtU2VsZWN0T3B0aW9uRm9ybWF0PiA9IGlucHV0PFdsY21TZWxlY3RPcHRpb25Gb3JtYXQ+KCdWYWx1ZU9ubHknKTtcblxuICBvcHRpb25UZW1wbGF0ZTogSW5wdXRTaWduYWw8VGVtcGxhdGVSZWY8T3B0aW9uVGVtcGxhdGVDb250ZXh0PiB8IG51bGw+ID1cbiAgICBpbnB1dDxUZW1wbGF0ZVJlZjxPcHRpb25UZW1wbGF0ZUNvbnRleHQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgdHJpZ2dlclRlbXBsYXRlOiBJbnB1dFNpZ25hbDxUZW1wbGF0ZVJlZjxNYXRPcHRpb24gfCBNYXRPcHRpb25bXT4gfCB1bmRlZmluZWQ+ID0gaW5wdXQoKTtcblxuICBpc09wdGlvbkRpc2FibGVkOiBJbnB1dFNpZ25hbDxJc09wdGlvbkRpc2FibGVkRm4+ID0gaW5wdXQ8SXNPcHRpb25EaXNhYmxlZEZuPigoKSA9PiBmYWxzZSk7XG5cbiAgc2VsZWN0aW9uQ2hhbmdlOiBPdXRwdXRFbWl0dGVyUmVmPE1hdFNlbGVjdENoYW5nZT4gPSBvdXRwdXQoKTtcblxuICBvcGVuZWQ6IE91dHB1dEVtaXR0ZXJSZWY8dm9pZD4gPSBvdXRwdXQoKTtcblxuICBjbG9zZWQ6IE91dHB1dEVtaXR0ZXJSZWY8dm9pZD4gPSBvdXRwdXQoKTtcblxuICByZWFkb25seSB2YWx1ZTogV3JpdGFibGVTaWduYWw8V2xjbVNlbGVjdFZhbHVlIHwgbnVsbD4gPSBzaWduYWwobnVsbCk7XG5cbiAgcmVhZG9ubHkgZGlzYWJsZWQ6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gc2lnbmFsKGZhbHNlKTtcblxuICByZWFkb25seSBXbGNtSWNvbk5hbWUgPSBXbGNtSWNvbk5hbWU7XG5cbiAgcHJpdmF0ZSBfY2hhbmdlZD86ICh2YWx1ZTogV2xjbVNlbGVjdFZhbHVlKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgX3RvdWNoZWQ/OiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgX3ZhbGlkYXRvckNoYW5nZWQ/OiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgX3BhZ2luYXRlZERhdGE6IFdsY21QYWdpbmF0ZWREYXRhPFdsY21PcHRpb24+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfcHJldmlvdXNWYWx1ZTogV2xjbVNlbGVjdFZhbHVlIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfb3B0aW9uc0NhY2hlOiBTZXQ8dW5rbm93bj4gPSBuZXcgU2V0KCk7XG5cbiAgY29tcHV0ZWRPcHRpb25zOiBTaWduYWw8V2xjbU9wdGlvbltdPiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvcHRpb25zOiBXbGNtT3B0aW9uW10gPSB0aGlzLnBhZ2luYXRlZCgpID8gdGhpcy5wYWdpbmF0ZWRPcHRpb25zKCkgOiB0aGlzLm9wdGlvbnMoKTtcblxuICAgIGlmICh0aGlzLmlzT3B0aW9uRGlzYWJsZWQoKSAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudXBkYXRlT3B0aW9uc1N0YXR1cygpO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9KTtcblxuICBwcmVmaWxsZWRPcHRpb25zOiBXcml0YWJsZVNpZ25hbDxXbGNtT3B0aW9uW10+ID0gc2lnbmFsKFtdKTtcblxuICBAVmlld0NoaWxkKE1hdFNlbGVjdCkgbWF0U2VsZWN0ITogTWF0U2VsZWN0O1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJykgb3BlblBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMubWF0U2VsZWN0Lm9wZW4oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXRPcHRpb25zOiBTaWduYWw8UmVhZG9ubHlBcnJheTxNYXRPcHRpb24+PiA9IHZpZXdDaGlsZHJlbihNYXRPcHRpb24pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlZnJlc2hPcHRpb25zJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZm9jdXNTdHJlYW0kOiBCZWhhdmlvclN1YmplY3Q8T2JzZXJ2YWJsZTx2b2lkPj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KEVNUFRZIGFzIE9ic2VydmFibGU8dm9pZD4pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2JsdXJTdHJlYW0kOiBCZWhhdmlvclN1YmplY3Q8T2JzZXJ2YWJsZTx2b2lkPj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KEVNUFRZIGFzIE9ic2VydmFibGU8dm9pZD4pO1xuXG4gIGZvY3VzJDogT2JzZXJ2YWJsZTx1bmtub3duPiA9IHRoaXMuX2ZvY3VzU3RyZWFtJC5waXBlKHN3aXRjaE1hcCgoc3RyZWFtOiBPYnNlcnZhYmxlPHVua25vd24+KSA9PiBzdHJlYW0pKTtcblxuICBibHVyJDogT2JzZXJ2YWJsZTx1bmtub3duPiA9IHRoaXMuX2JsdXJTdHJlYW0kLnBpcGUoc3dpdGNoTWFwKChzdHJlYW06IE9ic2VydmFibGU8dW5rbm93bj4pID0+IHN0cmVhbSkpO1xuXG4gIHByaXZhdGUgYWRqdXN0ZWRWYWx1ZSQ6IEJlaGF2aW9yU3ViamVjdDxXbGNtU2VsZWN0VmFsdWUgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8V2xjbVNlbGVjdFZhbHVlIHwgbnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSB2aWV3UmVhZHkkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIHNlbGVjdGVkJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzY3JvbGxEZXRlY3Rpb25BcGk6IFNjcm9sbERldGVjdGlvbkFwaSxcbiAgICBASW5qZWN0KFdMQ01fRk9STV9GSUVMRCkgcHJpdmF0ZSBmb3JtRmllbGQ6IFdsY21Gb3JtRmllbGQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChXTENNX0ZPUk1fQ09OVFJPTCkgcHJpdmF0ZSBwYXJlbnRGb3JtTWVtYmVyOiBXbGNtRm9ybUNvbnRyb2wsXG4gICkge1xuICAgIGlmICh0aGlzLnBhcmVudEZvcm1NZW1iZXIpIHtcbiAgICAgIHRoaXMuaGFuZGxlU3RhdGVDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZUFkanVzdGVkVmFsdWUoKTtcblxuICAgIG1lcmdlKHRvT2JzZXJ2YWJsZSh0aGlzLnBhZ2luYXRlZCkucGlwZShmaWx0ZXIoQm9vbGVhbikpLCB0aGlzLl9yZWZyZXNoT3B0aW9ucyQpXG4gICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5sb2FkUGFnaW5hdGVkT3B0aW9ucygpKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdSZWFkeSQubmV4dCgpO1xuXG4gICAgcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmZvcm1GaWVsZCkge1xuICAgICAgICB0aGlzLm1hdFNlbGVjdC5fcHJlZmVycmVkT3ZlcmxheU9yaWdpbiA9IG5ldyBDZGtPdmVybGF5T3JpZ2luKHRoaXMuZm9ybUZpZWxkLmlucHV0Q29udGFpbmVyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX2ZvY3VzU3RyZWFtJC5uZXh0KHRoaXMubWF0U2VsZWN0Ll9vcGVuZWRTdHJlYW0pO1xuXG4gICAgdGhpcy5fYmx1clN0cmVhbSQubmV4dCh0aGlzLm1hdFNlbGVjdC5fY2xvc2VkU3RyZWFtKTtcbiAgfVxuXG4gIGNvbXBhcmVXaXRoID0gKG9wdGlvbkE6IFdsY21PcHRpb24gfCBzdHJpbmcsIG9wdGlvbkI6IFdsY21PcHRpb24gfCBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICBpZiAodGhpcy5hcmVPcHRpb25zRXF1YWwob3B0aW9uQSwgb3B0aW9uQikpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdE9wdGlvbkZvcm1hdCgpID09PSAnQ29tcGxldGVPcHRpb24nICYmIHR5cGVvZiBvcHRpb25CICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aGlzLl9jaGFuZ2VkPy4ob3B0aW9uQSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBmb2N1cyA9ICgpOiB2b2lkID0+IHRoaXMubWF0U2VsZWN0Lm9wZW4oKTtcblxuICBpc0ZvY3VzZWQgPSAoKTogYm9vbGVhbiA9PiB0aGlzLmlzT3BlbjtcblxuICBzZWxlY3QoZXZlbnQ6IE1hdFNlbGVjdENoYW5nZSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWQkLm5leHQoKTtcblxuICAgIHRoaXMubWF0U2VsZWN0LnZhbHVlID0gZXZlbnQudmFsdWU7XG5cbiAgICB0aGlzLnZhbGlkYXRlU2VsZWN0ZWRPcHRpb24oZXZlbnQudmFsdWUpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5zZWxlY3RlZCQpKVxuICAgICAgLnN1YnNjcmliZSgoY2FuU2VsZWN0OiBib29sZWFuKSA9PiB7XG4gICAgICAgIGlmICghY2FuU2VsZWN0KSByZXR1cm4gdGhpcy5yZXZlcnRQcmV2aW91c1ZhbHVlKCk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShldmVudC52YWx1ZSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbmdlZD8uKGV2ZW50LnZhbHVlKTtcblxuICAgICAgICB0aGlzLl92YWxpZGF0b3JDaGFuZ2VkPy4oKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcmVPcHRpb25zRXF1YWwob3B0aW9uQTogV2xjbU9wdGlvbiB8IHN0cmluZywgb3B0aW9uQjogV2xjbU9wdGlvbiB8IHN0cmluZykge1xuICAgIHJldHVybiAoKG9wdGlvbkEgYXMgV2xjbU9wdGlvbik/LnZhbHVlIHx8IG9wdGlvbkEpID09PSAoKG9wdGlvbkIgYXMgV2xjbU9wdGlvbik/LnZhbHVlIHx8IG9wdGlvbkIpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXZlcnRQcmV2aW91c1ZhbHVlKCk6IHZvaWQge1xuICAgIHRoaXMubWF0U2VsZWN0LnZhbHVlID0gdGhpcy5fcHJldmlvdXNWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmFsdWUodmFsdWU6IFdsY21TZWxlY3RWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUuc2V0KHZhbHVlKTtcblxuICAgIHRoaXMuX3ByZXZpb3VzVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVTZWxlY3RlZE9wdGlvbih2YWx1ZTogV2xjbVNlbGVjdFZhbHVlKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPGJvb2xlYW4+KChvYnNlcnZlcjogU3Vic2NyaWJlcjxib29sZWFuPikgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBib29sZWFuID0gdGhpcy5jYW5TZWxlY3QodmFsdWUpO1xuXG4gICAgICBjb25zdCBzb3VyY2U6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSByZXNwb25zZSBpbnN0YW5jZW9mIE9ic2VydmFibGUgPyByZXNwb25zZS5waXBlKGZpcnN0KCkpIDogb2YocmVzcG9uc2UpO1xuXG4gICAgICBzb3VyY2Uuc3Vic2NyaWJlKChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dChyZXN1bHQpO1xuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFuZWxPcGVuZWQoKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuZWQuZW1pdCgpO1xuXG4gICAgdGhpcy5oYW5kbGVTY3JvbGxEb3duKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFuZWxDbG9zZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuXG4gICAgdGhpcy5fdG91Y2hlZD8uKCk7XG4gIH1cblxuICB1cGRhdGVPcHRpb25zU3RhdHVzKCk6IHZvaWQge1xuICAgIHRoaXMubWF0T3B0aW9ucygpLmZvckVhY2goKG1hdE9wdGlvbjogTWF0T3B0aW9uKSA9PiB7XG4gICAgICBtYXRPcHRpb24uZGlzYWJsZWQgPSB0aGlzLmlzT3B0aW9uRGlzYWJsZWQoKShtYXRPcHRpb24udmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogV2xjbVNlbGVjdFZhbHVlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFnaW5hdGVkKCkpIHRoaXMucHJlZmlsbE9wdGlvbnModmFsdWUpO1xuXG4gICAgY29uc3QgZm9ybWF0dGVkVmFsdWU6IFdsY21TZWxlY3RWYWx1ZSA9IHRoaXMucHJlcGFyZVZhbHVlRm9yUGF0Y2godmFsdWUpO1xuXG4gICAgdGhpcy51cGRhdGVWYWx1ZShmb3JtYXR0ZWRWYWx1ZSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGNhbGxiYWNrOiAodmFsdWU6IFdsY21TZWxlY3RWYWx1ZSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5nZWQgPSBjYWxsYmFjaztcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fdG91Y2hlZCA9IGNhbGxiYWNrO1xuICB9XG5cbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShjYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbGlkYXRvckNoYW5nZWQgPSBjYWxsYmFjaztcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQuc2V0KGlzRGlzYWJsZWQpO1xuICB9XG5cbiAgdmFsaWRhdGUoKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmVmcmVzaE9wdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVmcmVzaE9wdGlvbnMkLm5leHQoKTtcbiAgfVxuXG4gIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubWF0U2VsZWN0Py5wYW5lbE9wZW4gPz8gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVWYWx1ZUZvclBhdGNoKHZhbHVlOiBXbGNtU2VsZWN0VmFsdWUpOiBXbGNtU2VsZWN0VmFsdWUge1xuICAgIGNvbnN0IGZvcm1hdGVkVmFsdWU6IHsgY2hhbmdlZDogYm9vbGVhbjsgdmFsdWU6IFdsY21TZWxlY3RWYWx1ZSB9ID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSk7XG5cbiAgICBpZiAoZm9ybWF0ZWRWYWx1ZS5jaGFuZ2VkKSB0aGlzLmFkanVzdGVkVmFsdWUkLm5leHQoZm9ybWF0ZWRWYWx1ZS52YWx1ZSk7XG5cbiAgICByZXR1cm4gZm9ybWF0ZWRWYWx1ZS52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VmFsdWUodmFsdWU6IFdsY21TZWxlY3RWYWx1ZSk6IHsgY2hhbmdlZDogYm9vbGVhbjsgdmFsdWU6IFdsY21TZWxlY3RWYWx1ZSB9IHtcbiAgICBsZXQgY2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3QgX2Zvcm1hdE9wdGlvbiA9ICh2YWx1ZTogV2xjbU9wdGlvbiB8IHN0cmluZyk6IFdsY21PcHRpb24gfCBzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgZm9ybWF0ZWRPcHRpb246IHsgY2hhbmdlZDogYm9vbGVhbjsgdmFsdWU6IFdsY21PcHRpb24gfCBzdHJpbmcgfSA9IHRoaXMuZm9ybWF0T3B0aW9uKHZhbHVlKTtcblxuICAgICAgaWYgKGZvcm1hdGVkT3B0aW9uLmNoYW5nZWQpIGNoYW5nZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gZm9ybWF0ZWRPcHRpb24udmFsdWU7XG4gICAgfTtcblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICBjb25zdCBvcHRpb25zOiBXbGNtU2VsZWN0VmFsdWUgPSB2YWx1ZS5tYXAoX2Zvcm1hdE9wdGlvbikgYXMgV2xjbVNlbGVjdFZhbHVlO1xuXG4gICAgICByZXR1cm4geyBjaGFuZ2VkLCB2YWx1ZTogb3B0aW9ucyB9O1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbjogV2xjbVNlbGVjdFZhbHVlID0gX2Zvcm1hdE9wdGlvbih2YWx1ZSk7XG5cbiAgICByZXR1cm4geyBjaGFuZ2VkLCB2YWx1ZTogb3B0aW9uIH07XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdE9wdGlvbih2YWx1ZTogV2xjbU9wdGlvbiB8IHN0cmluZyk6IHsgY2hhbmdlZDogYm9vbGVhbjsgdmFsdWU6IFdsY21PcHRpb24gfCBzdHJpbmcgfSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmIHRoaXMuc2VsZWN0T3B0aW9uRm9ybWF0KCkgPT09ICdWYWx1ZU9ubHknKSB7XG4gICAgICByZXR1cm4geyBjaGFuZ2VkOiB0cnVlLCB2YWx1ZTogdmFsdWUudmFsdWUgYXMgc3RyaW5nIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY2hhbmdlZDogZmFsc2UsIHZhbHVlIH07XG4gIH1cblxuICBwcml2YXRlIGxvYWRQYWdpbmF0ZWRPcHRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlQYXJhbXMucGFnZSA9IDE7XG5cbiAgICB0aGlzLmZldGNoUGFnaW5hdGVkT3B0aW9ucyEodGhpcy5xdWVyeVBhcmFtcylcbiAgICAgIC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpLCBmaXJzdCgpKVxuICAgICAgLnN1YnNjcmliZSgocGFnaW5hdGVkRGF0YTogV2xjbVBhZ2luYXRlZERhdGE8V2xjbU9wdGlvbj4pID0+IHtcbiAgICAgICAgdGhpcy5fb3B0aW9uc0NhY2hlLmNsZWFyKCk7XG5cbiAgICAgICAgdGhpcy5jYWNoZU9wdGlvbnMocGFnaW5hdGVkRGF0YS5kYXRhKTtcblxuICAgICAgICB0aGlzLl9wYWdpbmF0ZWREYXRhID0gcGFnaW5hdGVkRGF0YTtcblxuICAgICAgICB0aGlzLnBhZ2luYXRlZE9wdGlvbnMuc2V0KHBhZ2luYXRlZERhdGEuZGF0YSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE1vcmVQYWdpbmF0ZWRPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fcGFnaW5hdGVkRGF0YSB8fCB0aGlzLl9wYWdpbmF0ZWREYXRhLmN1cnJQYWdlICsgMSA+IHRoaXMuX3BhZ2luYXRlZERhdGEudG90YWxQYWdlcykgcmV0dXJuO1xuXG4gICAgdGhpcy5xdWVyeVBhcmFtcy5wYWdlKys7XG5cbiAgICB0aGlzLmZldGNoUGFnaW5hdGVkT3B0aW9ucyEoeyAuLi50aGlzLnF1ZXJ5UGFyYW1zIH0pXG4gICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSwgZmlyc3QoKSlcbiAgICAgIC5zdWJzY3JpYmUoKHBhZ2luYXRlZERhdGE6IFdsY21QYWdpbmF0ZWREYXRhPFdsY21PcHRpb24+KSA9PiB7XG4gICAgICAgIHRoaXMuY2FjaGVPcHRpb25zKHBhZ2luYXRlZERhdGEuZGF0YSk7XG5cbiAgICAgICAgdGhpcy5fcGFnaW5hdGVkRGF0YSA9IHBhZ2luYXRlZERhdGE7XG5cbiAgICAgICAgdGhpcy5wYWdpbmF0ZWRPcHRpb25zLnVwZGF0ZSgob3B0aW9uczogV2xjbU9wdGlvbltdKSA9PiBbLi4ub3B0aW9ucywgLi4ucGFnaW5hdGVkRGF0YS5kYXRhXSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FjaGVPcHRpb25zKG9wdGlvbnM6IFdsY21PcHRpb25bXSk6IHZvaWQge1xuICAgIG9wdGlvbnMuZm9yRWFjaCgob3B0aW9uOiBXbGNtT3B0aW9uKSA9PiB0aGlzLl9vcHRpb25zQ2FjaGUuYWRkKG9wdGlvbi52YWx1ZSkpO1xuXG4gICAgdGhpcy5zeW5jUHJlZmlsbGVkT3B0aW9ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jUHJlZmlsbGVkT3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcmVmaWxsZWRPcHRpb25zKCkubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICB0aGlzLnByZWZpbGxlZE9wdGlvbnMudXBkYXRlKChvcHRpb25zOiBXbGNtT3B0aW9uW10pID0+IHtcbiAgICAgIHJldHVybiBvcHRpb25zLmZpbHRlcigob3B0aW9uOiBXbGNtT3B0aW9uKSA9PiAhdGhpcy5fb3B0aW9uc0NhY2hlLmhhcyhvcHRpb24udmFsdWUpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlZmlsbE9wdGlvbnModmFsdWU6IFdsY21TZWxlY3RWYWx1ZSk6IHZvaWQge1xuICAgIGxldCBwcmVmaWxsZWRPcHRpb25zOiBXbGNtT3B0aW9uW10gPSBbXTtcblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICBwcmVmaWxsZWRPcHRpb25zID0gdmFsdWUuZmlsdGVyKChvcHRpb246IFdsY21PcHRpb24gfCBzdHJpbmcpID0+IG9wdGlvbiBpbnN0YW5jZW9mIE9iamVjdCkgYXMgV2xjbU9wdGlvbltdO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgIHByZWZpbGxlZE9wdGlvbnMgPSBbdmFsdWVdO1xuICAgIH1cblxuICAgIHRoaXMucHJlZmlsbGVkT3B0aW9ucy5zZXQocHJlZmlsbGVkT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNjcm9sbERvd24oKTogdm9pZCB7XG4gICAgY29uc3QgZWxlbWVudDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWF0LW1kYy1zZWxlY3QtcGFuZWwnKSE7XG5cbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5zY3JvbGxEZXRlY3Rpb25BcGkub25TY3JvbGxlZERvd24oZWxlbWVudCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmxvYWRNb3JlUGFnaW5hdGVkT3B0aW9ucygpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTdGF0ZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnBhcmVudEZvcm1NZW1iZXIuc3RhdGVDaGFuZ2VzJC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fdmFsaWRhdG9yQ2hhbmdlZD8uKCk7XG5cbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUFkanVzdGVkVmFsdWUoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3UmVhZHkkXG4gICAgICAucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy5hZGp1c3RlZFZhbHVlJC5waXBlKGZpbHRlcihCb29sZWFuKSkpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IFdsY21TZWxlY3RWYWx1ZSkgPT4gdGhpcy5fY2hhbmdlZD8uKHZhbHVlKSk7XG4gIH1cbn1cbiIsIjxtYXQtc2VsZWN0XG4gICNzZWxlY3RDb21wb25lbnRcbiAgW3ZhbHVlXT1cInZhbHVlKClcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIlxuICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICBbaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcl09XCJ0cnVlXCJcbiAgW25nQ2xhc3NdPVwieyBmb2N1c2VkOiBzZWxlY3RDb21wb25lbnQuZm9jdXNlZCB9XCJcbiAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3QoJGV2ZW50KVwiXG4gIFtjb21wYXJlV2l0aF09XCJjb21wYXJlV2l0aFwiXG4gIChvcGVuZWQpPVwicGFuZWxPcGVuZWQoKVwiXG4gIChjbG9zZWQpPVwicGFuZWxDbG9zZWQoKVwiXG4+XG4gIEBpZiAodHJpZ2dlclRlbXBsYXRlKCkpIHtcbiAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIHRyaWdnZXJUZW1wbGF0ZSgpITtcbiAgICAgICAgICBjb250ZXh0OiAkYW55KHsgJGltcGxpY2l0OiBzZWxlY3RDb21wb25lbnQuc2VsZWN0ZWQgfSlcbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgfVxuXG4gIDxtYXQtb3B0aW9uXG4gICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcmVmaWxsZWRPcHRpb25zKClcIlxuICAgIFt2YWx1ZV09XCJzZWxlY3RPcHRpb25Gb3JtYXQoKSA9PT0gJ0NvbXBsZXRlT3B0aW9uJyA/IG9wdGlvbiA6IG9wdGlvbi52YWx1ZVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ3bGNtU2VsZWN0T3B0aW9uQ29udGVudFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG9wdGlvbiB9XCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LW9wdGlvbj5cblxuICA8bWF0LW9wdGlvblxuICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY29tcHV0ZWRPcHRpb25zKClcIlxuICAgIFt2YWx1ZV09XCJzZWxlY3RPcHRpb25Gb3JtYXQoKSA9PT0gJ0NvbXBsZXRlT3B0aW9uJyA/IG9wdGlvbiA6IG9wdGlvbi52YWx1ZVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ3bGNtU2VsZWN0T3B0aW9uQ29udGVudFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG9wdGlvbiB9XCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LW9wdGlvbj5cbjwvbWF0LXNlbGVjdD5cblxuPGRpdiBjbGFzcz1cIndsY20tc2VsZWN0LWFycm93XCI+XG4gIDxuZy1jb250YWluZXJcbiAgICBbd2xjbUljb25dPVwiV2xjbUljb25OYW1lLkNIRVZST05fRE9XTlwiXG4gICAgW3dsY21JY29uU3RvcFByb3BhZ2F0aW9uXT1cImZhbHNlXCJcbiAgPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjd2xjbVNlbGVjdE9wdGlvbkNvbnRlbnQgbGV0LW9wdGlvbj5cbiAgQGlmIChvcHRpb25UZW1wbGF0ZSgpKSB7XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvcHRpb25UZW1wbGF0ZSgpOyBjb250ZXh0OiAkYW55KHsgJGltcGxpY2l0OiBvcHRpb24gfSlcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgfSBAZWxzZSB7XG4gICAge3sgb3B0aW9uLnZpZXdWYWx1ZSB9fVxuICB9XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,5 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const WLCM_INPUT = new InjectionToken('WLCM_INPUT');
3
+ export const WLCM_INPUT_BINDER = new InjectionToken('WLCM_INPUT_BINDER');
4
+ export const WLCM_FORM_FIELD = new InjectionToken('WLCM_FORM_FIELD');
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lbGVtZW50cy5jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL2Zvcm1zL3NyYy9saWIvZm9ybXMvY29uc3RhbnRzL2Zvcm0tZWxlbWVudHMuY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJL0MsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFvQyxJQUFJLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUU1RixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBb0MsSUFBSSxjQUFjLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUUxRyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWtDLElBQUksY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV2xjbUlucHV0QmluZGVyLCBXbGNtSW5wdXRHZXR0ZXIgfSBmcm9tICcuLi9tb2RlbHMvaW5wdXQubW9kZWxzJztcbmltcG9ydCB7IFdsY21Gb3JtRmllbGQgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS5tb2RlbHMnO1xuXG5leHBvcnQgY29uc3QgV0xDTV9JTlBVVDogSW5qZWN0aW9uVG9rZW48V2xjbUlucHV0R2V0dGVyPiA9IG5ldyBJbmplY3Rpb25Ub2tlbignV0xDTV9JTlBVVCcpO1xuXG5leHBvcnQgY29uc3QgV0xDTV9JTlBVVF9CSU5ERVI6IEluamVjdGlvblRva2VuPFdsY21JbnB1dEJpbmRlcj4gPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ1dMQ01fSU5QVVRfQklOREVSJyk7XG5cbmV4cG9ydCBjb25zdCBXTENNX0ZPUk1fRklFTEQ6IEluamVjdGlvblRva2VuPFdsY21Gb3JtRmllbGQ+ID0gbmV3IEluamVjdGlvblRva2VuKCdXTENNX0ZPUk1fRklFTEQnKTtcbiJdfQ==
@@ -0,0 +1,7 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const WLCM_ERRORS = new InjectionToken('WLCM_ERRORS');
3
+ export const WLCM_PRIORITY_ERRORS = new InjectionToken('WLCM_PRIORITY_ERRORS', {
4
+ providedIn: 'root',
5
+ factory: () => new Set(),
6
+ });
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lcnJvcnMuY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9mb3Jtcy9zcmMvbGliL2Zvcm1zL2NvbnN0YW50cy9mb3JtLWVycm9ycy5jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQW1DLElBQUksY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBRTdGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFnQyxJQUFJLGNBQWMsQ0FBQyxzQkFBc0IsRUFBRTtJQUMxRyxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUU7Q0FDekIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFdsY21Gb3JtRXJyb3JzIH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0tZXJyb3JzLm1vZGVscyc7XG5cbmV4cG9ydCBjb25zdCBXTENNX0VSUk9SUzogSW5qZWN0aW9uVG9rZW48V2xjbUZvcm1FcnJvcnM+ID0gbmV3IEluamVjdGlvblRva2VuKCdXTENNX0VSUk9SUycpO1xuXG5leHBvcnQgY29uc3QgV0xDTV9QUklPUklUWV9FUlJPUlM6IEluamVjdGlvblRva2VuPFNldDxzdHJpbmc+PiA9IG5ldyBJbmplY3Rpb25Ub2tlbignV0xDTV9QUklPUklUWV9FUlJPUlMnLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gbmV3IFNldCgpLFxufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export const WLCM_FORM_FIELD_INPUT_CLASS = 'wlcm-form-field-input';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL2Zvcm1zL3NyYy9saWIvZm9ybXMvY29uc3RhbnRzL2Zvcm0tZmllbGQuY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFXLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFdMQ01fRk9STV9GSUVMRF9JTlBVVF9DTEFTUzogc3RyaW5nID0gJ3dsY20tZm9ybS1maWVsZC1pbnB1dCc7XG4iXX0=
@@ -0,0 +1,13 @@
1
+ import { InjectionToken, inject } from '@angular/core';
2
+ import { FormStateHandlerService } from '../services';
3
+ export const WLCM_FORM = new InjectionToken('WLCM_FORM');
4
+ export const WLCM_FORM_PROVIDER = {
5
+ provide: WLCM_FORM,
6
+ useClass: FormStateHandlerService,
7
+ };
8
+ export const WLCM_FORM_CONTROL = new InjectionToken('WLCM_FORM_CONTROL');
9
+ export const WLCM_FORM_CONTROL_PROVIDER = {
10
+ provide: WLCM_FORM_CONTROL,
11
+ useFactory: () => inject(WLCM_FORM, { optional: true, skipSelf: true }),
12
+ };
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zdGF0ZS1oYW5kbGVycy5jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL2Zvcm1zL3NyYy9saWIvZm9ybXMvY29uc3RhbnRzL2Zvcm0tc3RhdGUtaGFuZGxlcnMuY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQVksTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQTZCLElBQUksY0FBYyxDQUNuRSxXQUFXLENBQ1osQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFhO0lBQzFDLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFFBQVEsRUFBRSx1QkFBdUI7Q0FDbEMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUM1QixJQUFJLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRTFDLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFhO0lBQ2xELE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztDQUN4RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFByb3ZpZGVyLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFdsY21Gb3JtLCBXbGNtRm9ybUNvbnRyb2wgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS5tb2RlbHMnO1xuaW1wb3J0IHsgRm9ybVN0YXRlSGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5cbmV4cG9ydCBjb25zdCBXTENNX0ZPUk06IEluamVjdGlvblRva2VuPFdsY21Gb3JtPiA9IG5ldyBJbmplY3Rpb25Ub2tlbihcbiAgJ1dMQ01fRk9STSdcbik7XG5cbmV4cG9ydCBjb25zdCBXTENNX0ZPUk1fUFJPVklERVI6IFByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBXTENNX0ZPUk0sXG4gIHVzZUNsYXNzOiBGb3JtU3RhdGVIYW5kbGVyU2VydmljZSxcbn07XG5cbmV4cG9ydCBjb25zdCBXTENNX0ZPUk1fQ09OVFJPTDogSW5qZWN0aW9uVG9rZW48V2xjbUZvcm1Db250cm9sPiA9XG4gIG5ldyBJbmplY3Rpb25Ub2tlbignV0xDTV9GT1JNX0NPTlRST0wnKTtcblxuZXhwb3J0IGNvbnN0IFdMQ01fRk9STV9DT05UUk9MX1BST1ZJREVSOiBQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogV0xDTV9GT1JNX0NPTlRST0wsXG4gIHVzZUZhY3Rvcnk6ICgpID0+IGluamVjdChXTENNX0ZPUk0sIHsgb3B0aW9uYWw6IHRydWUsIHNraXBTZWxmOiB0cnVlIH0pLFxufTtcbiJdfQ==
@@ -0,0 +1,6 @@
1
+ export * from './form-errors.constants';
2
+ export * from './form-elements.constants';
3
+ export * from './form-state-handlers.constants';
4
+ export * from './select.constants';
5
+ export const WLCM_MAPS_API_ERROR = `Google Maps JavaScript API not loaded. Please ensure the following script is included in your HTML: <script src="https://maps.googleapis.com/maps/api/js?key=[apiKey]&libraries=places"></script>`;
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL2Zvcm1zL3NyYy9saWIvZm9ybXMvY29uc3RhbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsb0JBQW9CLENBQUM7QUFFbkMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQVcsbU1BQW1NLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Zvcm0tZXJyb3JzLmNvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0tZWxlbWVudHMuY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS1zdGF0ZS1oYW5kbGVycy5jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWxlY3QuY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IFdMQ01fTUFQU19BUElfRVJST1I6IHN0cmluZyA9IGBHb29nbGUgTWFwcyBKYXZhU2NyaXB0IEFQSSBub3QgbG9hZGVkLiBQbGVhc2UgZW5zdXJlIHRoZSBmb2xsb3dpbmcgc2NyaXB0IGlzIGluY2x1ZGVkIGluIHlvdXIgSFRNTDogPHNjcmlwdCBzcmM9XCJodHRwczovL21hcHMuZ29vZ2xlYXBpcy5jb20vbWFwcy9hcGkvanM/a2V5PVthcGlLZXldJmxpYnJhcmllcz1wbGFjZXNcIj48L3NjcmlwdD5gO1xuIl19
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const WLCM_SELECT_CONFIG = new InjectionToken('WLCM_SELECT_CONFIG');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbnN0YW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvZm9ybXMvc3JjL2xpYi9mb3Jtcy9jb25zdGFudHMvc2VsZWN0LmNvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFxQyxJQUFJLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFdsY21TZWxlY3RDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvc2VsZWN0Lm1vZGVscyc7XG5cbmV4cG9ydCBjb25zdCBXTENNX1NFTEVDVF9DT05GSUc6IEluamVjdGlvblRva2VuPFdsY21TZWxlY3RDb25maWc+ID0gbmV3IEluamVjdGlvblRva2VuKCdXTENNX1NFTEVDVF9DT05GSUcnKTtcbiJdfQ==
@@ -0,0 +1,64 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { Directive, EventEmitter, Host, NgZone, Optional, Output } from '@angular/core';
3
+ import { asyncScheduler, fromEvent, observeOn, takeUntil } from 'rxjs';
4
+ import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
5
+ import { MatAutocomplete } from '@angular/material/autocomplete';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/material/autocomplete";
8
+ let AutocompleteDirective = class AutocompleteDirective {
9
+ constructor(zone, autocomplete) {
10
+ this.zone = zone;
11
+ this.autocomplete = autocomplete;
12
+ this.panelScrolled = new EventEmitter();
13
+ this._scrollHeight = 0;
14
+ this._scrollHeightChanged = false;
15
+ this.handleOpenEvent();
16
+ }
17
+ handleOpenEvent() {
18
+ this.autocomplete.opened
19
+ .pipe(untilDestroyed(this))
20
+ .pipe(observeOn(asyncScheduler))
21
+ .subscribe(() => this.zone.runOutsideAngular(() => this.handleScrolling()));
22
+ }
23
+ handleScrolling() {
24
+ const panel = this.autocomplete.panel.nativeElement;
25
+ this.setScrollHscrollHeight(panel.scrollHeight);
26
+ fromEvent(panel, 'scroll')
27
+ .pipe(takeUntil(this.autocomplete.closed))
28
+ .subscribe(() => {
29
+ if (this._scrollHeight !== panel.scrollHeight) {
30
+ this.setScrollHscrollHeight(panel.scrollHeight);
31
+ }
32
+ if (panel.scrollHeight * 0.8 <= panel.scrollTop + panel.clientHeight && this._scrollHeightChanged) {
33
+ this.zone.run(() => this.panelScrolled.emit());
34
+ this._scrollHeightChanged = false;
35
+ }
36
+ });
37
+ }
38
+ setScrollHscrollHeight(height) {
39
+ this._scrollHeight = height;
40
+ this._scrollHeightChanged = true;
41
+ }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: AutocompleteDirective, deps: [{ token: i0.NgZone }, { token: i1.MatAutocomplete, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
43
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: AutocompleteDirective, isStandalone: true, selector: "[wlcmAutocomplete]", outputs: { panelScrolled: "panelScrolled" }, ngImport: i0 }); }
44
+ };
45
+ AutocompleteDirective = __decorate([
46
+ UntilDestroy(),
47
+ __metadata("design:paramtypes", [NgZone,
48
+ MatAutocomplete])
49
+ ], AutocompleteDirective);
50
+ export { AutocompleteDirective };
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: AutocompleteDirective, decorators: [{
52
+ type: Directive,
53
+ args: [{
54
+ selector: '[wlcmAutocomplete]',
55
+ standalone: true,
56
+ }]
57
+ }], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.MatAutocomplete, decorators: [{
58
+ type: Host
59
+ }, {
60
+ type: Optional
61
+ }] }], propDecorators: { panelScrolled: [{
62
+ type: Output
63
+ }] } });
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvZm9ybXMvc3JjL2xpYi9mb3Jtcy9kaXJlY3RpdmVzL2F1dG9jb21wbGV0ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7QUFPMUQsSUFBTSxxQkFBcUIsR0FBM0IsTUFBTSxxQkFBcUI7SUFPaEMsWUFDVSxJQUFZLEVBQ1EsWUFBNkI7UUFEakQsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNRLGlCQUFZLEdBQVosWUFBWSxDQUFpQjtRQVJqRCxrQkFBYSxHQUF1QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXpELGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBRTFCLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQU01QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO2FBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUMvQixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFTyxlQUFlO1FBQ3JCLE1BQU0sS0FBSyxHQUFnQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFFakUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVoRCxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQzthQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDekMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbEQsQ0FBQztZQUVELElBQUksS0FBSyxDQUFDLFlBQVksR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUNsRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBRS9DLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7WUFDcEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE1BQWM7UUFDM0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7UUFFNUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztJQUNuQyxDQUFDOzhHQTdDVSxxQkFBcUI7a0dBQXJCLHFCQUFxQjs7QUFBckIscUJBQXFCO0lBTGpDLFlBQVksRUFBRTtxQ0FhRyxNQUFNO1FBQ3NCLGVBQWU7R0FUaEQscUJBQXFCLENBOENqQzs7MkZBOUNZLHFCQUFxQjtrQkFKakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7OzBCQVVJLElBQUk7OzBCQUFJLFFBQVE7eUNBUlQsYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBIb3N0LCBOZ1pvbmUsIE9wdGlvbmFsLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFzeW5jU2NoZWR1bGVyLCBmcm9tRXZlbnQsIG9ic2VydmVPbiwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5cbkBVbnRpbERlc3Ryb3koKVxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3dsY21BdXRvY29tcGxldGVdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlRGlyZWN0aXZlIHtcbiAgQE91dHB1dCgpIHBhbmVsU2Nyb2xsZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwcml2YXRlIF9zY3JvbGxIZWlnaHQ6IG51bWJlciA9IDA7XG5cbiAgcHJpdmF0ZSBfc2Nyb2xsSGVpZ2h0Q2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgIEBIb3N0KCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBhdXRvY29tcGxldGU6IE1hdEF1dG9jb21wbGV0ZSxcbiAgKSB7XG4gICAgdGhpcy5oYW5kbGVPcGVuRXZlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlT3BlbkV2ZW50KCk6IHZvaWQge1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZFxuICAgICAgLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpXG4gICAgICAucGlwZShvYnNlcnZlT24oYXN5bmNTY2hlZHVsZXIpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5oYW5kbGVTY3JvbGxpbmcoKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTY3JvbGxpbmcoKTogdm9pZCB7XG4gICAgY29uc3QgcGFuZWw6IEhUTUxFbGVtZW50ID0gdGhpcy5hdXRvY29tcGxldGUucGFuZWwubmF0aXZlRWxlbWVudDtcblxuICAgIHRoaXMuc2V0U2Nyb2xsSHNjcm9sbEhlaWdodChwYW5lbC5zY3JvbGxIZWlnaHQpO1xuXG4gICAgZnJvbUV2ZW50KHBhbmVsLCAnc2Nyb2xsJylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmF1dG9jb21wbGV0ZS5jbG9zZWQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9zY3JvbGxIZWlnaHQgIT09IHBhbmVsLnNjcm9sbEhlaWdodCkge1xuICAgICAgICAgIHRoaXMuc2V0U2Nyb2xsSHNjcm9sbEhlaWdodChwYW5lbC5zY3JvbGxIZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhbmVsLnNjcm9sbEhlaWdodCAqIDAuOCA8PSBwYW5lbC5zY3JvbGxUb3AgKyBwYW5lbC5jbGllbnRIZWlnaHQgJiYgdGhpcy5fc2Nyb2xsSGVpZ2h0Q2hhbmdlZCkge1xuICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5wYW5lbFNjcm9sbGVkLmVtaXQoKSk7XG5cbiAgICAgICAgICB0aGlzLl9zY3JvbGxIZWlnaHRDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTY3JvbGxIc2Nyb2xsSGVpZ2h0KGhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fc2Nyb2xsSGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgdGhpcy5fc2Nyb2xsSGVpZ2h0Q2hhbmdlZCA9IHRydWU7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,17 @@
1
+ import { Directive, ElementRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class WlcmFormFieldCustomContainerDirective {
4
+ constructor(elementRef) {
5
+ this.elementRef = elementRef;
6
+ }
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: WlcmFormFieldCustomContainerDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
8
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: WlcmFormFieldCustomContainerDirective, isStandalone: true, selector: "[wlcmFormFieldCustomContainer]", ngImport: i0 }); }
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: WlcmFormFieldCustomContainerDirective, decorators: [{
11
+ type: Directive,
12
+ args: [{
13
+ selector: '[wlcmFormFieldCustomContainer]',
14
+ standalone: true,
15
+ }]
16
+ }], ctorParameters: () => [{ type: i0.ElementRef }] });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC1jdXN0b20tY29udGFpbmVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvZm9ybXMvc3JjL2xpYi9mb3Jtcy9kaXJlY3RpdmVzL2Zvcm0tZmllbGQtY3VzdG9tLWNvbnRhaW5lci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTXRELE1BQU0sT0FBTyxxQ0FBcUM7SUFDaEQsWUFBbUIsVUFBbUM7UUFBbkMsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7SUFBRyxDQUFDOzhHQUQvQyxxQ0FBcUM7a0dBQXJDLHFDQUFxQzs7MkZBQXJDLHFDQUFxQztrQkFKakQsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0NBQWdDO29CQUMxQyxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3dsY21Gb3JtRmllbGRDdXN0b21Db250YWluZXJdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgV2xjbUZvcm1GaWVsZEN1c3RvbUNvbnRhaW5lckRpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge31cbn1cbiJdfQ==
@@ -0,0 +1,15 @@
1
+ import { Directive } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class WlcmFormFieldHintDirective {
4
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: WlcmFormFieldHintDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
5
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: WlcmFormFieldHintDirective, isStandalone: true, selector: "[wlcmFormFieldHint]", host: { classAttribute: "wlcm-hint" }, ngImport: i0 }); }
6
+ }
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: WlcmFormFieldHintDirective, decorators: [{
8
+ type: Directive,
9
+ args: [{
10
+ selector: '[wlcmFormFieldHint]',
11
+ host: { class: 'wlcm-hint' },
12
+ standalone: true,
13
+ }]
14
+ }] });
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC1oaW50LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvZm9ybXMvc3JjL2xpYi9mb3Jtcy9kaXJlY3RpdmVzL2Zvcm0tZmllbGQtaGludC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFPMUMsTUFBTSxPQUFPLDBCQUEwQjs4R0FBMUIsMEJBQTBCO2tHQUExQiwwQkFBMEI7OzJGQUExQiwwQkFBMEI7a0JBTHRDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTtvQkFDNUIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t3bGNtRm9ybUZpZWxkSGludF0nLFxuICBob3N0OiB7IGNsYXNzOiAnd2xjbS1oaW50JyB9LFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBXbGNtRm9ybUZpZWxkSGludERpcmVjdGl2ZSB7fVxuIl19
@@ -0,0 +1,22 @@
1
+ import { Directive, HostListener } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class WlcmFormFieldPrefixDirective {
4
+ constructor() {
5
+ this.handlerClick = (event) => {
6
+ event.stopPropagation();
7
+ };
8
+ }
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: WlcmFormFieldPrefixDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
10
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: WlcmFormFieldPrefixDirective, isStandalone: true, selector: "[wlcmFormFieldPrefix]", host: { listeners: { "click": "handlerClick($event)" } }, ngImport: i0 }); }
11
+ }
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: WlcmFormFieldPrefixDirective, decorators: [{
13
+ type: Directive,
14
+ args: [{
15
+ selector: '[wlcmFormFieldPrefix]',
16
+ standalone: true,
17
+ }]
18
+ }], propDecorators: { handlerClick: [{
19
+ type: HostListener,
20
+ args: ['click', ['$event']]
21
+ }] } });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC1wcmVmaXguZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9mb3Jtcy9zcmMvbGliL2Zvcm1zL2RpcmVjdGl2ZXMvZm9ybS1maWVsZC1wcmVmaXguZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU14RCxNQUFNLE9BQU8sNEJBQTRCO0lBSnpDO1FBS3FDLGlCQUFZLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7WUFDdEUsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQztLQUNIOzhHQUpZLDRCQUE0QjtrR0FBNUIsNEJBQTRCOzsyRkFBNUIsNEJBQTRCO2tCQUp4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs4QkFFb0MsWUFBWTtzQkFBOUMsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbd2xjbUZvcm1GaWVsZFByZWZpeF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBXbGNtRm9ybUZpZWxkUHJlZml4RGlyZWN0aXZlIHtcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKSBoYW5kbGVyQ2xpY2sgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfTtcbn1cbiJdfQ==