@wlcm/angular 18.2.25 → 18.2.26
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.
- package/button/esm2022/index.mjs +3 -0
- package/button/esm2022/lib/button.module.mjs +16 -0
- package/button/esm2022/lib/components/button/button.component.mjs +37 -0
- package/button/esm2022/lib/models/button.models.mjs +2 -0
- package/button/esm2022/wlcm-angular-button.mjs +5 -0
- package/button/fesm2022/wlcm-angular-button.mjs +7 -7
- package/button/fesm2022/wlcm-angular-button.mjs.map +1 -1
- package/core/esm2022/index.mjs +17 -0
- package/core/esm2022/lib/components/default-loader/default-loader.component.mjs +12 -0
- package/core/esm2022/lib/components/icons/calendar-icon/calendar-icon.component.mjs +12 -0
- package/core/esm2022/lib/components/icons/chevron-down-icon/chevron-down-icon.component.mjs +12 -0
- package/core/esm2022/lib/components/icons/close-icon/close-icon.component.mjs +12 -0
- package/core/esm2022/lib/components/icons/search-icon/search-icon.component.mjs +12 -0
- package/core/esm2022/lib/components/loader/loader.component.mjs +32 -0
- package/core/esm2022/lib/constants/_index.mjs +3 -0
- package/core/esm2022/lib/constants/http.constants.mjs +6 -0
- package/core/esm2022/lib/constants/icon.contants.mjs +15 -0
- package/core/esm2022/lib/constants/loader.constants.mjs +7 -0
- package/core/esm2022/lib/directives/_index.mjs +2 -0
- package/core/esm2022/lib/directives/icon.directive.mjs +49 -0
- package/core/esm2022/lib/models/_index.mjs +3 -0
- package/core/esm2022/lib/models/icon.models.mjs +7 -0
- package/core/esm2022/lib/models/option.models.mjs +17 -0
- package/core/esm2022/lib/services/scroll-detection.api.mjs +27 -0
- package/core/esm2022/lib/utils/paginated-data-emulator.utils.mjs +20 -0
- package/core/esm2022/lib/utils/stream.utils.mjs +16 -0
- package/core/esm2022/wlcm-angular-core.mjs +5 -0
- package/core/fesm2022/wlcm-angular-core.mjs +24 -24
- package/core/fesm2022/wlcm-angular-core.mjs.map +1 -1
- package/datepicker/esm2022/index.mjs +11 -0
- package/datepicker/esm2022/lib/components/calendar-header/calendar-header.component.mjs +63 -0
- package/datepicker/esm2022/lib/components/range/date-range-calendar-header/date-range-calendar-header.component.mjs +87 -0
- package/datepicker/esm2022/lib/components/range/date-range-picker/date-range-picker.component.mjs +174 -0
- package/datepicker/esm2022/lib/components/range/date-range-picker-bottom-panel/date-range-picker-bottom-panel.component.mjs +19 -0
- package/datepicker/esm2022/lib/components/range/date-range-picker-input/date-range-picker-input.component.mjs +124 -0
- package/datepicker/esm2022/lib/components/single/datepicker-input-container/datepicker-input-container.component.mjs +92 -0
- package/datepicker/esm2022/lib/components/single/datepicker-panel/datepicker-panel.component.mjs +33 -0
- package/datepicker/esm2022/lib/constants/datepicker.constants.mjs +23 -0
- package/datepicker/esm2022/lib/constants/range/date-range-picker.constants.mjs +3 -0
- package/datepicker/esm2022/lib/constants/range/date-range-selection-model.constants.mjs +10 -0
- package/datepicker/esm2022/lib/constants/range/date-range-trigger-selection-model.constants.mjs +10 -0
- package/datepicker/esm2022/lib/datepicker.module.mjs +33 -0
- package/datepicker/esm2022/lib/directives/calendar.directive.mjs +15 -0
- package/datepicker/esm2022/lib/directives/datepicker-input.base.mjs +103 -0
- package/datepicker/esm2022/lib/directives/datepicker-trigger.base.mjs +109 -0
- package/datepicker/esm2022/lib/directives/ragne/date-range-picker-input-end.directive.mjs +81 -0
- package/datepicker/esm2022/lib/directives/ragne/date-range-picker-input-start.directive.mjs +81 -0
- package/datepicker/esm2022/lib/directives/ragne/date-range-picker-input.base.mjs +56 -0
- package/datepicker/esm2022/lib/directives/ragne/left-calendar.directive.mjs +51 -0
- package/datepicker/esm2022/lib/directives/ragne/right-calendar.directive.mjs +64 -0
- package/datepicker/esm2022/lib/directives/single/datepicker-input.directive.mjs +67 -0
- package/datepicker/esm2022/lib/models/date-picker.models.mjs +29 -0
- package/datepicker/esm2022/lib/models/range/data-range-calendar.models.mjs +61 -0
- package/datepicker/esm2022/lib/models/range/date-range-picker.models.mjs +2 -0
- package/datepicker/esm2022/lib/models/range/date-range-validation.models.mjs +5 -0
- package/datepicker/esm2022/lib/utils/range/date-range-input.validators.mjs +16 -0
- package/datepicker/esm2022/lib/utils/range/date-range-picker-errors.mjs +9 -0
- package/datepicker/esm2022/wlcm-angular-datepicker.mjs +5 -0
- package/datepicker/fesm2022/wlcm-angular-datepicker.mjs +728 -824
- package/datepicker/fesm2022/wlcm-angular-datepicker.mjs.map +1 -1
- package/datepicker/index.d.ts +1 -4
- package/datepicker/lib/components/range/{double-calendar-range-picker/double-calendar-range-picker.component.d.ts → date-range-picker/date-range-picker.component.d.ts} +16 -12
- package/datepicker/lib/components/range/date-range-picker-bottom-panel/date-range-picker-bottom-panel.component.d.ts +3 -3
- package/datepicker/lib/components/range/date-range-picker-input/date-range-picker-input.component.d.ts +5 -5
- package/datepicker/lib/constants/datepicker.constants.d.ts +1 -1
- package/datepicker/lib/constants/range/date-range-picker.constants.d.ts +1 -2
- package/datepicker/lib/directives/datepicker-input.base.d.ts +1 -1
- package/datepicker/lib/directives/datepicker-trigger.base.d.ts +4 -3
- package/datepicker/lib/directives/ragne/date-range-picker-input.base.d.ts +1 -1
- package/datepicker/lib/models/range/data-range-calendar.models.d.ts +1 -1
- package/datepicker/lib/models/range/date-range-picker.models.d.ts +1 -15
- package/filters/esm2022/index.mjs +6 -0
- package/filters/esm2022/lib/components/filters-group/filters-group.component.mjs +13 -0
- package/filters/esm2022/lib/constants/filter.constants.mjs +3 -0
- package/filters/esm2022/lib/constants/index.mjs +2 -0
- package/filters/esm2022/lib/directives/filter.directive.mjs +11 -0
- package/filters/esm2022/lib/directives/index.mjs +2 -0
- package/filters/esm2022/lib/filters.module.mjs +20 -0
- package/filters/esm2022/lib/models/array-filter.models.mjs +73 -0
- package/filters/esm2022/lib/models/filter.models.mjs +39 -0
- package/filters/esm2022/lib/models/filters-group.models.mjs +60 -0
- package/filters/esm2022/lib/models/index.mjs +4 -0
- package/filters/esm2022/wlcm-angular-filters.mjs +5 -0
- package/filters/fesm2022/wlcm-angular-filters.mjs +13 -13
- package/filters/fesm2022/wlcm-angular-filters.mjs.map +1 -1
- package/filters/lib/models/filters-group.models.d.ts +1 -1
- package/forms/esm2022/index.mjs +13 -0
- package/forms/esm2022/lib/forms/components/autocomplete/autocomplete.component.mjs +242 -0
- package/forms/esm2022/lib/forms/components/checkbox/checkbox.component.mjs +85 -0
- package/forms/esm2022/lib/forms/components/checkbox-group/checkbox-group.component.mjs +87 -0
- package/forms/esm2022/lib/forms/components/error/error.component.mjs +12 -0
- package/forms/esm2022/lib/forms/components/form-field/form-field.component.mjs +137 -0
- package/forms/esm2022/lib/forms/components/index.mjs +9 -0
- package/forms/esm2022/lib/forms/components/label/label.component.mjs +23 -0
- package/forms/esm2022/lib/forms/components/partials/autocomplete-suffix/autocomplete-suffix.component.mjs +19 -0
- package/forms/esm2022/lib/forms/components/partials/index.mjs +2 -0
- package/forms/esm2022/lib/forms/components/select/select.component.mjs +317 -0
- package/forms/esm2022/lib/forms/constants/form-elements.constants.mjs +5 -0
- package/forms/esm2022/lib/forms/constants/form-errors.constants.mjs +7 -0
- package/forms/esm2022/lib/forms/constants/form-field.constants.mjs +2 -0
- package/forms/esm2022/lib/forms/constants/form-state-handlers.constants.mjs +13 -0
- package/forms/esm2022/lib/forms/constants/index.mjs +6 -0
- package/forms/esm2022/lib/forms/constants/select.constants.mjs +3 -0
- package/forms/esm2022/lib/forms/directives/autocomplete.directive.mjs +64 -0
- package/forms/esm2022/lib/forms/directives/form-field-custom-container.directive.mjs +17 -0
- package/forms/esm2022/lib/forms/directives/form-field-hint.directive.mjs +15 -0
- package/forms/esm2022/lib/forms/directives/form-field-prefix.directive.mjs +22 -0
- package/forms/esm2022/lib/forms/directives/form-field-suffix.directive.mjs +14 -0
- package/forms/esm2022/lib/forms/directives/input.directive.mjs +47 -0
- package/forms/esm2022/lib/forms/directives/select-input-binder.directive.mjs +33 -0
- package/forms/esm2022/lib/forms/forms.module.mjs +64 -0
- package/forms/esm2022/lib/forms/models/_index.mjs +6 -0
- package/forms/esm2022/lib/forms/models/autocomplete.models.mjs +10 -0
- package/forms/esm2022/lib/forms/models/form-errors.models.mjs +2 -0
- package/forms/esm2022/lib/forms/models/form.models.mjs +2 -0
- package/forms/esm2022/lib/forms/models/input.models.mjs +2 -0
- package/forms/esm2022/lib/forms/models/select.models.mjs +2 -0
- package/forms/esm2022/lib/forms/pipes/errors-mapper.pipe.mjs +53 -0
- package/forms/esm2022/lib/forms/services/form-state-handler.service.mjs +19 -0
- package/forms/esm2022/lib/forms/services/index.mjs +3 -0
- package/forms/esm2022/lib/forms/services/places.api.mjs +62 -0
- package/forms/esm2022/wlcm-angular-forms.mjs +5 -0
- package/forms/fesm2022/wlcm-angular-forms.mjs +67 -76
- package/forms/fesm2022/wlcm-angular-forms.mjs.map +1 -1
- package/forms/lib/forms/components/select/select.component.d.ts +0 -1
- package/forms/lib/forms/models/autocomplete.models.d.ts +1 -1
- package/package.json +1 -1
- package/phone-input/esm2022/index.mjs +5 -0
- package/phone-input/esm2022/lib/components/country-code-select/country-code-select.component.mjs +32 -0
- package/phone-input/esm2022/lib/components/phone-input-container/phone-input-container.component.mjs +107 -0
- package/phone-input/esm2022/lib/constants/country-code-options.constants.mjs +20 -0
- package/phone-input/esm2022/lib/constants/phone-adapter.constants.mjs +3 -0
- package/phone-input/esm2022/lib/directives/phone-input.directive.mjs +155 -0
- package/phone-input/esm2022/lib/models/country-code.models.mjs +10 -0
- package/phone-input/esm2022/lib/models/phone-adapter.models.mjs +3 -0
- package/phone-input/esm2022/lib/models/phone.models.mjs +5 -0
- package/phone-input/esm2022/lib/phone-input.module.mjs +20 -0
- package/phone-input/esm2022/lib/pipes/phone-code.pipe.mjs +18 -0
- package/phone-input/esm2022/wlcm-angular-phone-input.mjs +5 -0
- package/phone-input/fesm2022/wlcm-angular-phone-input.mjs +16 -16
- package/phone-input/fesm2022/wlcm-angular-phone-input.mjs.map +1 -1
- package/search-field/esm2022/index.mjs +3 -0
- package/search-field/esm2022/lib/components/search-field/search-field.component.mjs +39 -0
- package/search-field/esm2022/lib/search-field.module.mjs +18 -0
- package/search-field/esm2022/wlcm-angular-search-field.mjs +5 -0
- package/search-field/fesm2022/wlcm-angular-search-field.mjs +7 -7
- package/search-field/fesm2022/wlcm-angular-search-field.mjs.map +1 -1
- package/stepper/esm2022/index.mjs +11 -0
- package/stepper/esm2022/lib/components/step/step.component.mjs +53 -0
- package/stepper/esm2022/lib/components/step-header/step-header.component.mjs +81 -0
- package/stepper/esm2022/lib/components/stepper/stepper.component.mjs +15 -0
- package/stepper/esm2022/lib/components/stepper-header/stepper-header.component.mjs +16 -0
- package/stepper/esm2022/lib/constants/step.constants.mjs +9 -0
- package/stepper/esm2022/lib/constants/stepper.stepper.mjs +3 -0
- package/stepper/esm2022/lib/directives/load-on-active-step.directive.mjs +51 -0
- package/stepper/esm2022/lib/models/step.models.mjs +60 -0
- package/stepper/esm2022/lib/models/stepper.models.mjs +114 -0
- package/stepper/esm2022/lib/stepper.module.mjs +34 -0
- package/stepper/esm2022/wlcm-angular-stepper.mjs +5 -0
- package/stepper/fesm2022/wlcm-angular-stepper.mjs +25 -25
- package/stepper/fesm2022/wlcm-angular-stepper.mjs.map +1 -1
- package/stepper/lib/models/step.models.d.ts +1 -1
- package/stepper/lib/models/stepper.models.d.ts +1 -1
- package/styles/components/datepicker/date-range-picker/_date-range-picker-body.scss +1 -1
- package/styles/components/datepicker/date-range-picker/_date-range-picker-input.scss +0 -1
- package/table/esm2022/index.mjs +9 -0
- package/table/esm2022/lib/components/table/table.component.mjs +79 -0
- package/table/esm2022/lib/components/table-head/table-head.component.mjs +18 -0
- package/table/esm2022/lib/components/table-head-actions/table-head-actions.component.mjs +41 -0
- package/table/esm2022/lib/components/table-head-data/table-head-data.component.mjs +12 -0
- package/table/esm2022/lib/components/table-row/table-row.component.mjs +87 -0
- package/table/esm2022/lib/components/table-row-actions/table-row-actions.component.mjs +12 -0
- package/table/esm2022/lib/components/table-row-data/table-row-data.component.mjs +12 -0
- package/table/esm2022/lib/components/table-row-spacer/table-row-spacer.component.mjs +12 -0
- package/table/esm2022/lib/constants/table-row.constants.mjs +3 -0
- package/table/esm2022/lib/constants/table.constants.mjs +5 -0
- package/table/esm2022/lib/directives/scrollable-table-container.directive.mjs +46 -0
- package/table/esm2022/lib/models/table-config-manager.models.mjs +18 -0
- package/table/esm2022/lib/models/table-row.models.mjs +2 -0
- package/table/esm2022/lib/models/table-selection-model.mjs +48 -0
- package/table/esm2022/lib/models/table.models.mjs +2 -0
- package/table/esm2022/lib/pipes/table-row-injector.pipe.mjs +24 -0
- package/table/esm2022/lib/table.module.mjs +38 -0
- package/table/esm2022/lib/utils/table-errors.utils.mjs +6 -0
- package/table/esm2022/wlcm-angular-table.mjs +5 -0
- package/table/fesm2022/wlcm-angular-table.mjs +34 -34
- package/table/fesm2022/wlcm-angular-table.mjs.map +1 -1
- package/datepicker/lib/components/range/single-calendar-range-picker/single-calendar-range-picker.component.d.ts +0 -27
@@ -0,0 +1,317 @@
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
2
|
+
import { CommonModule } from '@angular/common';
|
3
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, Inject, Input, NgZone, Optional, ViewChild, computed, forwardRef, inject, input, output, 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, 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 { mergeWith } from 'lodash-es';
|
14
|
+
import * as i0 from "@angular/core";
|
15
|
+
import * as i1 from "@wlcm/angular/core";
|
16
|
+
import * as i2 from "../../directives/select-input-binder.directive";
|
17
|
+
import * as i3 from "@angular/common";
|
18
|
+
import * as i4 from "@angular/material/select";
|
19
|
+
import * as i5 from "@angular/material/core";
|
20
|
+
const PANEL_CLASS = 'wlcm-select-panel';
|
21
|
+
const DEFAULT_CONFIG = { overlayPanelClass: [PANEL_CLASS] };
|
22
|
+
const mergeConfig = (config) => {
|
23
|
+
const customizer = (_default, _new) => {
|
24
|
+
if (Array.isArray(_default))
|
25
|
+
return _default.concat(_new);
|
26
|
+
};
|
27
|
+
return mergeWith({ ...DEFAULT_CONFIG }, config, customizer);
|
28
|
+
};
|
29
|
+
let WlcmSelectComponent = class WlcmSelectComponent {
|
30
|
+
openPanel() {
|
31
|
+
this.matSelect.open();
|
32
|
+
}
|
33
|
+
constructor(zone, changeDetectorRef, scrollDetectionApi, formField, parentFormMember) {
|
34
|
+
this.zone = zone;
|
35
|
+
this.changeDetectorRef = changeDetectorRef;
|
36
|
+
this.scrollDetectionApi = scrollDetectionApi;
|
37
|
+
this.formField = formField;
|
38
|
+
this.parentFormMember = parentFormMember;
|
39
|
+
this.multiple = false;
|
40
|
+
this.placeholder = 'Not selected';
|
41
|
+
this.canSelect = (_) => true;
|
42
|
+
this.queryParams = { ...DEFAULT_QUERY_PARAMS };
|
43
|
+
this.paginated = input(false);
|
44
|
+
this.options = input([]);
|
45
|
+
this.paginatedOptions = signal([]);
|
46
|
+
this.selectOptionFormat = input('ValueOnly');
|
47
|
+
this.optionTemplate = input(null);
|
48
|
+
this.triggerTemplate = input();
|
49
|
+
this.isOptionDisabled = input(() => false);
|
50
|
+
this.selectionChange = output();
|
51
|
+
this.opened = output();
|
52
|
+
this.closed = output();
|
53
|
+
this.value = signal(null);
|
54
|
+
this.disabled = signal(false);
|
55
|
+
this.WlcmIconName = WlcmIconName;
|
56
|
+
this._paginatedData = null;
|
57
|
+
this._previousValue = null;
|
58
|
+
this._optionsCache = new Set();
|
59
|
+
this.computedOptions = computed(() => {
|
60
|
+
const options = this.paginated() ? this.paginatedOptions() : this.options();
|
61
|
+
if (this.isOptionDisabled() && options.length > 0) {
|
62
|
+
this.updateOptionsStatus();
|
63
|
+
}
|
64
|
+
return options;
|
65
|
+
});
|
66
|
+
this.prefilledOptions = signal([]);
|
67
|
+
this.matOptions = viewChildren(MatOption);
|
68
|
+
this._focusStream$ = new BehaviorSubject(EMPTY);
|
69
|
+
this._blurStream$ = new BehaviorSubject(EMPTY);
|
70
|
+
this.focus$ = this._focusStream$.pipe(switchMap((stream) => stream));
|
71
|
+
this.blur$ = this._blurStream$.pipe(switchMap((stream) => stream));
|
72
|
+
this.adjustedValue$ = new BehaviorSubject(null);
|
73
|
+
this.viewReady$ = new Subject();
|
74
|
+
this.selected$ = new Subject();
|
75
|
+
this.compareWith = (optionA, optionB) => {
|
76
|
+
return (optionA?.value || optionA) === (optionB?.value || optionB);
|
77
|
+
};
|
78
|
+
this.focus = () => this.matSelect.open();
|
79
|
+
this.isFocused = () => this.isOpen;
|
80
|
+
if (this.parentFormMember) {
|
81
|
+
this.handleStateChange();
|
82
|
+
}
|
83
|
+
this.handleAdjustedValue();
|
84
|
+
toObservable(this.paginated)
|
85
|
+
.pipe(untilDestroyed(this))
|
86
|
+
.subscribe((paginated) => {
|
87
|
+
if (paginated)
|
88
|
+
this.loadPaginatedOptions();
|
89
|
+
});
|
90
|
+
}
|
91
|
+
ngAfterViewInit() {
|
92
|
+
this.viewReady$.next();
|
93
|
+
if (this.formField) {
|
94
|
+
this.matSelect._preferredOverlayOrigin = this.formField.inputContainer;
|
95
|
+
}
|
96
|
+
this._focusStream$.next(this.matSelect._openedStream);
|
97
|
+
this._blurStream$.next(this.matSelect._closedStream);
|
98
|
+
}
|
99
|
+
select(event) {
|
100
|
+
this.selected$.next();
|
101
|
+
this.matSelect.value = event.value;
|
102
|
+
this.validateSelectedOption(event.value)
|
103
|
+
.pipe(takeUntil(this.selected$))
|
104
|
+
.subscribe((canSelect) => {
|
105
|
+
if (!canSelect)
|
106
|
+
return this.revertPreviousValue();
|
107
|
+
this.updateValue(event.value);
|
108
|
+
this._changed?.(event.value);
|
109
|
+
this._validatorChanged?.();
|
110
|
+
this.selectionChange.emit(event);
|
111
|
+
});
|
112
|
+
}
|
113
|
+
revertPreviousValue() {
|
114
|
+
this.matSelect.value = this._previousValue;
|
115
|
+
}
|
116
|
+
updateValue(value) {
|
117
|
+
this.value.set(value);
|
118
|
+
this._previousValue = value;
|
119
|
+
}
|
120
|
+
validateSelectedOption(value) {
|
121
|
+
return new Observable((observer) => {
|
122
|
+
const response = this.canSelect(value);
|
123
|
+
const source = response instanceof Observable ? response.pipe(first()) : of(response);
|
124
|
+
source.subscribe((result) => {
|
125
|
+
observer.next(result);
|
126
|
+
observer.complete();
|
127
|
+
});
|
128
|
+
});
|
129
|
+
}
|
130
|
+
panelOpened() {
|
131
|
+
this.opened.emit();
|
132
|
+
this.handleScrollDown();
|
133
|
+
}
|
134
|
+
panelClosed() {
|
135
|
+
this.closed.emit();
|
136
|
+
this._touched?.();
|
137
|
+
}
|
138
|
+
updateOptionsStatus() {
|
139
|
+
this.matOptions().forEach((matOption) => {
|
140
|
+
matOption.disabled = this.isOptionDisabled()(matOption.value);
|
141
|
+
});
|
142
|
+
}
|
143
|
+
writeValue(value) {
|
144
|
+
if (this.paginated())
|
145
|
+
this.prefillOptions(value);
|
146
|
+
const formattedValue = this.prepareValueForPatch(value);
|
147
|
+
this.updateValue(formattedValue);
|
148
|
+
}
|
149
|
+
registerOnChange(callback) {
|
150
|
+
this._changed = callback;
|
151
|
+
}
|
152
|
+
registerOnTouched(callback) {
|
153
|
+
this._touched = callback;
|
154
|
+
}
|
155
|
+
registerOnValidatorChange(callback) {
|
156
|
+
this._validatorChanged = callback;
|
157
|
+
}
|
158
|
+
setDisabledState(isDisabled) {
|
159
|
+
this.disabled.set(isDisabled);
|
160
|
+
}
|
161
|
+
validate() {
|
162
|
+
return null;
|
163
|
+
}
|
164
|
+
get isOpen() {
|
165
|
+
return this.matSelect?.panelOpen ?? false;
|
166
|
+
}
|
167
|
+
prepareValueForPatch(value) {
|
168
|
+
const formatedValue = this.formatValue(value);
|
169
|
+
if (formatedValue.changed)
|
170
|
+
this.adjustedValue$.next(formatedValue.value);
|
171
|
+
return formatedValue.value;
|
172
|
+
}
|
173
|
+
formatValue(value) {
|
174
|
+
let changed = false;
|
175
|
+
const _formatOption = (value) => {
|
176
|
+
const formatedOption = this.formatOption(value);
|
177
|
+
if (formatedOption.changed)
|
178
|
+
changed = true;
|
179
|
+
return formatedOption.value;
|
180
|
+
};
|
181
|
+
if (value instanceof Array) {
|
182
|
+
const options = value.map(_formatOption);
|
183
|
+
return { changed, value: options };
|
184
|
+
}
|
185
|
+
const option = _formatOption(value);
|
186
|
+
return { changed, value: option };
|
187
|
+
}
|
188
|
+
formatOption(value) {
|
189
|
+
if (value instanceof Object && this.selectOptionFormat() === 'ValueOnly') {
|
190
|
+
return { changed: true, value: value.value };
|
191
|
+
}
|
192
|
+
return { changed: false, value };
|
193
|
+
}
|
194
|
+
loadPaginatedOptions() {
|
195
|
+
this.queryParams.page = 1;
|
196
|
+
this.fetchPaginatedOptions(this.queryParams)
|
197
|
+
.pipe(untilDestroyed(this), first())
|
198
|
+
.subscribe((paginatedData) => {
|
199
|
+
this._optionsCache.clear();
|
200
|
+
this.cacheOptions(paginatedData.data);
|
201
|
+
this._paginatedData = paginatedData;
|
202
|
+
this.paginatedOptions.set(paginatedData.data);
|
203
|
+
});
|
204
|
+
}
|
205
|
+
loadMorePaginatedOptions() {
|
206
|
+
if (!this._paginatedData || this._paginatedData.currPage + 1 > this._paginatedData.totalPages)
|
207
|
+
return;
|
208
|
+
this.queryParams.page++;
|
209
|
+
this.fetchPaginatedOptions({ ...this.queryParams })
|
210
|
+
.pipe(untilDestroyed(this), first())
|
211
|
+
.subscribe((paginatedData) => {
|
212
|
+
this.cacheOptions(paginatedData.data);
|
213
|
+
this._paginatedData = paginatedData;
|
214
|
+
this.paginatedOptions.update((options) => [...options, ...paginatedData.data]);
|
215
|
+
});
|
216
|
+
}
|
217
|
+
cacheOptions(options) {
|
218
|
+
options.forEach((option) => this._optionsCache.add(option.value));
|
219
|
+
this.syncPrefilledOptions();
|
220
|
+
}
|
221
|
+
syncPrefilledOptions() {
|
222
|
+
if (this.prefilledOptions().length === 0)
|
223
|
+
return;
|
224
|
+
this.prefilledOptions.update((options) => {
|
225
|
+
return options.filter((option) => !this._optionsCache.has(option.value));
|
226
|
+
});
|
227
|
+
}
|
228
|
+
prefillOptions(value) {
|
229
|
+
let prefilledOptions = [];
|
230
|
+
if (value instanceof Array) {
|
231
|
+
prefilledOptions = value.filter((option) => option instanceof Object);
|
232
|
+
}
|
233
|
+
else if (value instanceof Object) {
|
234
|
+
prefilledOptions = [value];
|
235
|
+
}
|
236
|
+
this.prefilledOptions.set(prefilledOptions);
|
237
|
+
}
|
238
|
+
handleScrollDown() {
|
239
|
+
const element = document.querySelector('.mat-mdc-select-panel');
|
240
|
+
this.zone.runOutsideAngular(() => {
|
241
|
+
this.scrollDetectionApi.onScrolledDown(element).subscribe(() => {
|
242
|
+
this.zone.run(() => this.loadMorePaginatedOptions());
|
243
|
+
});
|
244
|
+
});
|
245
|
+
}
|
246
|
+
handleStateChange() {
|
247
|
+
this.parentFormMember.stateChanges$.pipe(untilDestroyed(this)).subscribe(() => {
|
248
|
+
this._validatorChanged?.();
|
249
|
+
this.changeDetectorRef.markForCheck();
|
250
|
+
});
|
251
|
+
}
|
252
|
+
handleAdjustedValue() {
|
253
|
+
this.viewReady$
|
254
|
+
.pipe(switchMap(() => this.adjustedValue$.pipe(filter(Boolean))))
|
255
|
+
.subscribe((value) => this._changed?.(value));
|
256
|
+
}
|
257
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: WlcmSelectComponent, deps: [{ token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1.ScrollDetectionApi }, { token: WLCM_FORM_FIELD }, { token: WLCM_FORM_CONTROL, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
258
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", 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: null }, 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: [
|
259
|
+
WLCM_FORM_CONTROL_PROVIDER,
|
260
|
+
{
|
261
|
+
provide: MAT_SELECT_CONFIG,
|
262
|
+
useFactory: () => {
|
263
|
+
const wlcmConfig = inject(WLCM_SELECT_CONFIG, { optional: true }) ?? {};
|
264
|
+
return mergeConfig(wlcmConfig);
|
265
|
+
},
|
266
|
+
},
|
267
|
+
{ provide: NG_VALIDATORS, useExisting: forwardRef(() => WlcmSelectComponent), multi: true },
|
268
|
+
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => WlcmSelectComponent), multi: true },
|
269
|
+
], 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 }); }
|
270
|
+
};
|
271
|
+
WlcmSelectComponent = __decorate([
|
272
|
+
UntilDestroy(),
|
273
|
+
__metadata("design:paramtypes", [NgZone,
|
274
|
+
ChangeDetectorRef,
|
275
|
+
ScrollDetectionApi, Object, Object])
|
276
|
+
], WlcmSelectComponent);
|
277
|
+
export { WlcmSelectComponent };
|
278
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: WlcmSelectComponent, decorators: [{
|
279
|
+
type: Component,
|
280
|
+
args: [{ selector: 'wlcm-select', standalone: true, imports: [CommonModule, MatSelectModule, ReactiveFormsModule, WlcmIconDirective, WlcmSelectInputBinderDirective], changeDetection: ChangeDetectionStrategy.OnPush, hostDirectives: [WlcmSelectInputBinderDirective], providers: [
|
281
|
+
WLCM_FORM_CONTROL_PROVIDER,
|
282
|
+
{
|
283
|
+
provide: MAT_SELECT_CONFIG,
|
284
|
+
useFactory: () => {
|
285
|
+
const wlcmConfig = inject(WLCM_SELECT_CONFIG, { optional: true }) ?? {};
|
286
|
+
return mergeConfig(wlcmConfig);
|
287
|
+
},
|
288
|
+
},
|
289
|
+
{ provide: NG_VALIDATORS, useExisting: forwardRef(() => WlcmSelectComponent), multi: true },
|
290
|
+
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => WlcmSelectComponent), multi: true },
|
291
|
+
], 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" }]
|
292
|
+
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1.ScrollDetectionApi }, { type: undefined, decorators: [{
|
293
|
+
type: Inject,
|
294
|
+
args: [WLCM_FORM_FIELD]
|
295
|
+
}] }, { type: undefined, decorators: [{
|
296
|
+
type: Optional
|
297
|
+
}, {
|
298
|
+
type: Inject,
|
299
|
+
args: [WLCM_FORM_CONTROL]
|
300
|
+
}] }], propDecorators: { multiple: [{
|
301
|
+
type: Input
|
302
|
+
}], placeholder: [{
|
303
|
+
type: Input
|
304
|
+
}], fetchPaginatedOptions: [{
|
305
|
+
type: Input
|
306
|
+
}], canSelect: [{
|
307
|
+
type: Input
|
308
|
+
}], queryParams: [{
|
309
|
+
type: Input
|
310
|
+
}], matSelect: [{
|
311
|
+
type: ViewChild,
|
312
|
+
args: [MatSelect]
|
313
|
+
}], openPanel: [{
|
314
|
+
type: HostListener,
|
315
|
+
args: ['click']
|
316
|
+
}] } });
|
317
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvZm9ybXMvc3JjL2xpYi9mb3Jtcy9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9mb3Jtcy9zcmMvbGliL2Zvcm1zL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04sUUFBUSxFQUlSLFNBQVMsRUFFVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsbUJBQW1CLEdBR3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQW1CLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JILE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixZQUFZLEdBR2IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsMEJBQTBCLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFaEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsVUFBVSxF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OEJBQThCLENBQUMsbUJBRy9GLHVCQUF1QixDQUFDLE1BQU0sa0JBQy9CLENBQUMsOEJBQThCLENBQUMsYUFDckM7d0JBQ1QsMEJBQTBCO3dCQUMxQjs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixVQUFVLEVBQUUsR0FBRyxFQUFFO2dDQUNmLE1BQU0sVUFBVSxHQUFxQixNQUFNLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0NBRTFGLE9BQU8sV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUNqQyxDQUFDO3lCQUNGO3dCQUNELEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7d0JBQzNGLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtxQkFDaEc7OzBCQTRGRSxNQUFNOzJCQUFDLGVBQWU7OzBCQUN0QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGlCQUFpQjt5Q0ExRjlCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQXFEZ0IsU0FBUztzQkFBOUIsU0FBUzt1QkFBQyxTQUFTO2dCQUVHLFNBQVM7c0JBQS9CLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBJbnB1dFNpZ25hbCxcbiAgTmdab25lLFxuICBPcHRpb25hbCxcbiAgT3V0cHV0RW1pdHRlclJlZixcbiAgU2lnbmFsLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBXcml0YWJsZVNpZ25hbCxcbiAgY29tcHV0ZWQsXG4gIGZvcndhcmRSZWYsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICB2aWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1BVF9TRUxFQ1RfQ09ORklHLCBNYXRPcHRpb24sIE1hdFNlbGVjdCwgTWF0U2VsZWN0Q2hhbmdlLCBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9RVUVSWV9QQVJBTVMsXG4gIFNjcm9sbERldGVjdGlvbkFwaSxcbiAgV2xjbUljb25EaXJlY3RpdmUsXG4gIFdsY21JY29uTmFtZSxcbiAgV2xjbU9wdGlvbixcbiAgV2xjbVNlbGVjdE9wdGlvbkZvcm1hdCxcbn0gZnJvbSAnQHdsY20vYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFdMQ01fRk9STV9DT05UUk9MLCBXTENNX0ZPUk1fQ09OVFJPTF9QUk9WSURFUiwgV0xDTV9GT1JNX0ZJRUxEIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFdsY21TZWxlY3RJbnB1dEJpbmRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc2VsZWN0LWlucHV0LWJpbmRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgV2xjbUZvcm1Db250cm9sLCBXbGNtRm9ybUZpZWxkLCBXbGNtRm9ybUZpZWxkSW5wdXQgfSBmcm9tICcuLi8uLi9tb2RlbHMvX2luZGV4JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgRU1QVFksIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmliZXIsIGZpbHRlciwgZmlyc3QsIG9mLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSXNPcHRpb25EaXNhYmxlZEZuLCBXbGNtQ2FuU2VsZWN0Rm4sIFdsY21TZWxlY3RDb25maWcsIFdsY21TZWxlY3RWYWx1ZSB9IGZyb20gJy4uLy4uL21vZGVscy9zZWxlY3QubW9kZWxzJztcbmltcG9ydCB7IFdMQ01fU0VMRUNUX0NPTkZJRyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9zZWxlY3QuY29uc3RhbnRzJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgV2xjbVF1ZXJ5UGFyYW1zLCBXbGNtUGFnaW5hdGVkRGF0YSB9IGZyb20gJ0B3bGNtL2NvbW1vbic7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDZGtPdmVybGF5T3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgbWVyZ2VXaXRoIH0gZnJvbSAnbG9kYXNoLWVzJztcblxudHlwZSBPcHRpb25UZW1wbGF0ZUNvbnRleHQgPSBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogV2xjbU9wdGlvbiB9PjtcblxuY29uc3QgUEFORUxfQ0xBU1M6IHN0cmluZyA9ICd3bGNtLXNlbGVjdC1wYW5lbCc7XG5cbmNvbnN0IERFRkFVTFRfQ09ORklHOiBXbGNtU2VsZWN0Q29uZmlnID0geyBvdmVybGF5UGFuZWxDbGFzczogW1BBTkVMX0NMQVNTXSB9O1xuXG5jb25zdCBtZXJnZUNvbmZpZyA9IChjb25maWc6IFdsY21TZWxlY3RDb25maWcpOiBXbGNtU2VsZWN0Q29uZmlnID0+IHtcbiAgY29uc3QgY3VzdG9taXplciA9IChfZGVmYXVsdDogV2xjbVNlbGVjdENvbmZpZywgX25ldzogV2xjbVNlbGVjdENvbmZpZyk6IEFycmF5PHVua25vd24+IHwgdm9pZCA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoX2RlZmF1bHQpKSByZXR1cm4gX2RlZmF1bHQuY29uY2F0KF9uZXcpO1xuICB9O1xuXG4gIHJldHVybiBtZXJnZVdpdGgoeyAuLi5ERUZBVUxUX0NPTkZJRyB9LCBjb25maWcsIGN1c3RvbWl6ZXIpO1xufTtcblxuQFVudGlsRGVzdHJveSgpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3bGNtLXNlbGVjdCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdFNlbGVjdE1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgV2xjbUljb25EaXJlY3RpdmUsIFdsY21TZWxlY3RJbnB1dEJpbmRlckRpcmVjdGl2ZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3REaXJlY3RpdmVzOiBbV2xjbVNlbGVjdElucHV0QmluZGVyRGlyZWN0aXZlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgV0xDTV9GT1JNX0NPTlRST0xfUFJPVklERVIsXG4gICAge1xuICAgICAgcHJvdmlkZTogTUFUX1NFTEVDVF9DT05GSUcsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHdsY21Db25maWc6IFdsY21TZWxlY3RDb25maWcgPSBpbmplY3QoV0xDTV9TRUxFQ1RfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pID8/IHt9O1xuXG4gICAgICAgIHJldHVybiBtZXJnZUNvbmZpZyh3bGNtQ29uZmlnKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7IHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFdsY21TZWxlY3RDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9LFxuICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFdsY21TZWxlY3RDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBXbGNtU2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgV2xjbUZvcm1GaWVsZElucHV0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcbiAgQElucHV0KCkgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ05vdCBzZWxlY3RlZCc7XG5cbiAgQElucHV0KCkgZmV0Y2hQYWdpbmF0ZWRPcHRpb25zPzogKHBhcmFtczogV2xjbVF1ZXJ5UGFyYW1zKSA9PiBPYnNlcnZhYmxlPFdsY21QYWdpbmF0ZWREYXRhPFdsY21PcHRpb24+PjtcblxuICBASW5wdXQoKSBjYW5TZWxlY3Q6IFdsY21DYW5TZWxlY3RGbiA9IChfOiBXbGNtU2VsZWN0VmFsdWUpID0+IHRydWU7XG5cbiAgQElucHV0KCkgcXVlcnlQYXJhbXM6IFdsY21RdWVyeVBhcmFtcyA9IHsgLi4uREVGQVVMVF9RVUVSWV9QQVJBTVMgfTtcblxuICBwYWdpbmF0ZWQ6IElucHV0U2lnbmFsPGJvb2xlYW4+ID0gaW5wdXQoZmFsc2UpO1xuXG4gIG9wdGlvbnM6IElucHV0U2lnbmFsPFdsY21PcHRpb25bXT4gPSBpbnB1dDxXbGNtT3B0aW9uW10+KFtdKTtcblxuICBwYWdpbmF0ZWRPcHRpb25zOiBXcml0YWJsZVNpZ25hbDxXbGNtT3B0aW9uW10+ID0gc2lnbmFsKFtdKTtcblxuICBzZWxlY3RPcHRpb25Gb3JtYXQ6IElucHV0U2lnbmFsPFdsY21TZWxlY3RPcHRpb25Gb3JtYXQ+ID0gaW5wdXQ8V2xjbVNlbGVjdE9wdGlvbkZvcm1hdD4oJ1ZhbHVlT25seScpO1xuXG4gIG9wdGlvblRlbXBsYXRlOiBJbnB1dFNpZ25hbDxUZW1wbGF0ZVJlZjxPcHRpb25UZW1wbGF0ZUNvbnRleHQ+IHwgbnVsbD4gPVxuICAgIGlucHV0PFRlbXBsYXRlUmVmPE9wdGlvblRlbXBsYXRlQ29udGV4dD4gfCBudWxsPihudWxsKTtcblxuICB0cmlnZ2VyVGVtcGxhdGU6IElucHV0U2lnbmFsPFRlbXBsYXRlUmVmPE1hdE9wdGlvbiB8IE1hdE9wdGlvbltdPiB8IHVuZGVmaW5lZD4gPSBpbnB1dCgpO1xuXG4gIGlzT3B0aW9uRGlzYWJsZWQ6IElucHV0U2lnbmFsPElzT3B0aW9uRGlzYWJsZWRGbj4gPSBpbnB1dDxJc09wdGlvbkRpc2FibGVkRm4+KCgpID0+IGZhbHNlKTtcblxuICBzZWxlY3Rpb25DaGFuZ2U6IE91dHB1dEVtaXR0ZXJSZWY8TWF0U2VsZWN0Q2hhbmdlPiA9IG91dHB1dCgpO1xuXG4gIG9wZW5lZDogT3V0cHV0RW1pdHRlclJlZjx2b2lkPiA9IG91dHB1dCgpO1xuXG4gIGNsb3NlZDogT3V0cHV0RW1pdHRlclJlZjx2b2lkPiA9IG91dHB1dCgpO1xuXG4gIHJlYWRvbmx5IHZhbHVlOiBXcml0YWJsZVNpZ25hbDxXbGNtU2VsZWN0VmFsdWUgfCBudWxsPiA9IHNpZ25hbChudWxsKTtcblxuICByZWFkb25seSBkaXNhYmxlZDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWwoZmFsc2UpO1xuXG4gIHJlYWRvbmx5IFdsY21JY29uTmFtZSA9IFdsY21JY29uTmFtZTtcblxuICBwcml2YXRlIF9jaGFuZ2VkPzogKHZhbHVlOiBXbGNtU2VsZWN0VmFsdWUpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBfdG91Y2hlZD86ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBfdmFsaWRhdG9yQ2hhbmdlZD86ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBfcGFnaW5hdGVkRGF0YTogV2xjbVBhZ2luYXRlZERhdGE8V2xjbU9wdGlvbj4gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9wcmV2aW91c1ZhbHVlOiBXbGNtU2VsZWN0VmFsdWUgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9vcHRpb25zQ2FjaGU6IFNldDx1bmtub3duPiA9IG5ldyBTZXQoKTtcblxuICBjb21wdXRlZE9wdGlvbnM6IFNpZ25hbDxXbGNtT3B0aW9uW10+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IFdsY21PcHRpb25bXSA9IHRoaXMucGFnaW5hdGVkKCkgPyB0aGlzLnBhZ2luYXRlZE9wdGlvbnMoKSA6IHRoaXMub3B0aW9ucygpO1xuXG4gICAgaWYgKHRoaXMuaXNPcHRpb25EaXNhYmxlZCgpICYmIG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy51cGRhdGVPcHRpb25zU3RhdHVzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH0pO1xuXG4gIHByZWZpbGxlZE9wdGlvbnM6IFdyaXRhYmxlU2lnbmFsPFdsY21PcHRpb25bXT4gPSBzaWduYWwoW10pO1xuXG4gIEBWaWV3Q2hpbGQoTWF0U2VsZWN0KSBtYXRTZWxlY3QhOiBNYXRTZWxlY3Q7XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKSBvcGVuUGFuZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tYXRTZWxlY3Qub3BlbigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hdE9wdGlvbnM6IFNpZ25hbDxSZWFkb25seUFycmF5PE1hdE9wdGlvbj4+ID0gdmlld0NoaWxkcmVuKE1hdE9wdGlvbik7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZm9jdXNTdHJlYW0kOiBCZWhhdmlvclN1YmplY3Q8T2JzZXJ2YWJsZTx2b2lkPj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KEVNUFRZIGFzIE9ic2VydmFibGU8dm9pZD4pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2JsdXJTdHJlYW0kOiBCZWhhdmlvclN1YmplY3Q8T2JzZXJ2YWJsZTx2b2lkPj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KEVNUFRZIGFzIE9ic2VydmFibGU8dm9pZD4pO1xuXG4gIGZvY3VzJDogT2JzZXJ2YWJsZTx1bmtub3duPiA9IHRoaXMuX2ZvY3VzU3RyZWFtJC5waXBlKHN3aXRjaE1hcCgoc3RyZWFtOiBPYnNlcnZhYmxlPHVua25vd24+KSA9PiBzdHJlYW0pKTtcblxuICBibHVyJDogT2JzZXJ2YWJsZTx1bmtub3duPiA9IHRoaXMuX2JsdXJTdHJlYW0kLnBpcGUoc3dpdGNoTWFwKChzdHJlYW06IE9ic2VydmFibGU8dW5rbm93bj4pID0+IHN0cmVhbSkpO1xuXG4gIHByaXZhdGUgYWRqdXN0ZWRWYWx1ZSQ6IEJlaGF2aW9yU3ViamVjdDxXbGNtU2VsZWN0VmFsdWUgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8V2xjbVNlbGVjdFZhbHVlIHwgbnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSB2aWV3UmVhZHkkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIHNlbGVjdGVkJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHJpdmF0ZSBfcHJlZmVycmVkT3ZlcmxheU9yaWdpbiE6IENka092ZXJsYXlPcmlnaW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzY3JvbGxEZXRlY3Rpb25BcGk6IFNjcm9sbERldGVjdGlvbkFwaSxcbiAgICBASW5qZWN0KFdMQ01fRk9STV9GSUVMRCkgcHJpdmF0ZSBmb3JtRmllbGQ6IFdsY21Gb3JtRmllbGQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChXTENNX0ZPUk1fQ09OVFJPTCkgcHJpdmF0ZSBwYXJlbnRGb3JtTWVtYmVyOiBXbGNtRm9ybUNvbnRyb2wsXG4gICkge1xuICAgIGlmICh0aGlzLnBhcmVudEZvcm1NZW1iZXIpIHtcbiAgICAgIHRoaXMuaGFuZGxlU3RhdGVDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZUFkanVzdGVkVmFsdWUoKTtcblxuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLnBhZ2luYXRlZClcbiAgICAgIC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKVxuICAgICAgLnN1YnNjcmliZSgocGFnaW5hdGVkOiBib29sZWFuKSA9PiB7XG4gICAgICAgIGlmIChwYWdpbmF0ZWQpIHRoaXMubG9hZFBhZ2luYXRlZE9wdGlvbnMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMudmlld1JlYWR5JC5uZXh0KCk7XG5cbiAgICBpZiAodGhpcy5mb3JtRmllbGQpIHtcbiAgICAgIHRoaXMubWF0U2VsZWN0Ll9wcmVmZXJyZWRPdmVybGF5T3JpZ2luID0gdGhpcy5mb3JtRmllbGQuaW5wdXRDb250YWluZXI7XG4gICAgfVxuXG4gICAgdGhpcy5fZm9jdXNTdHJlYW0kLm5leHQodGhpcy5tYXRTZWxlY3QuX29wZW5lZFN0cmVhbSk7XG5cbiAgICB0aGlzLl9ibHVyU3RyZWFtJC5uZXh0KHRoaXMubWF0U2VsZWN0Ll9jbG9zZWRTdHJlYW0pO1xuICB9XG5cbiAgY29tcGFyZVdpdGggPSAob3B0aW9uQTogV2xjbU9wdGlvbiB8IHN0cmluZywgb3B0aW9uQjogV2xjbU9wdGlvbiB8IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiAoKG9wdGlvbkEgYXMgV2xjbU9wdGlvbik/LnZhbHVlIHx8IG9wdGlvbkEpID09PSAoKG9wdGlvbkIgYXMgV2xjbU9wdGlvbik/LnZhbHVlIHx8IG9wdGlvbkIpO1xuICB9O1xuXG4gIGZvY3VzID0gKCk6IHZvaWQgPT4gdGhpcy5tYXRTZWxlY3Qub3BlbigpO1xuXG4gIGlzRm9jdXNlZCA9ICgpOiBib29sZWFuID0+IHRoaXMuaXNPcGVuO1xuXG4gIHNlbGVjdChldmVudDogTWF0U2VsZWN0Q2hhbmdlKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZCQubmV4dCgpO1xuXG4gICAgdGhpcy5tYXRTZWxlY3QudmFsdWUgPSBldmVudC52YWx1ZTtcblxuICAgIHRoaXMudmFsaWRhdGVTZWxlY3RlZE9wdGlvbihldmVudC52YWx1ZSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnNlbGVjdGVkJCkpXG4gICAgICAuc3Vic2NyaWJlKChjYW5TZWxlY3Q6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKCFjYW5TZWxlY3QpIHJldHVybiB0aGlzLnJldmVydFByZXZpb3VzVmFsdWUoKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKGV2ZW50LnZhbHVlKTtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VkPy4oZXZlbnQudmFsdWUpO1xuXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRvckNoYW5nZWQ/LigpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJldmVydFByZXZpb3VzVmFsdWUoKTogdm9pZCB7XG4gICAgdGhpcy5tYXRTZWxlY3QudmFsdWUgPSB0aGlzLl9wcmV2aW91c1ZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZSh2YWx1ZTogV2xjbVNlbGVjdFZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZS5zZXQodmFsdWUpO1xuXG4gICAgdGhpcy5fcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNlbGVjdGVkT3B0aW9uKHZhbHVlOiBXbGNtU2VsZWN0VmFsdWUpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8Ym9vbGVhbj4oKG9ic2VydmVyOiBTdWJzY3JpYmVyPGJvb2xlYW4+KSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZTogT2JzZXJ2YWJsZTxib29sZWFuPiB8IGJvb2xlYW4gPSB0aGlzLmNhblNlbGVjdCh2YWx1ZSk7XG5cbiAgICAgIGNvbnN0IHNvdXJjZTogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHJlc3BvbnNlIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSA/IHJlc3BvbnNlLnBpcGUoZmlyc3QoKSkgOiBvZihyZXNwb25zZSk7XG5cbiAgICAgIHNvdXJjZS5zdWJzY3JpYmUoKHJlc3VsdDogYm9vbGVhbikgPT4ge1xuICAgICAgICBvYnNlcnZlci5uZXh0KHJlc3VsdCk7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYW5lbE9wZW5lZCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5lZC5lbWl0KCk7XG5cbiAgICB0aGlzLmhhbmRsZVNjcm9sbERvd24oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYW5lbENsb3NlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG5cbiAgICB0aGlzLl90b3VjaGVkPy4oKTtcbiAgfVxuXG4gIHVwZGF0ZU9wdGlvbnNTdGF0dXMoKTogdm9pZCB7XG4gICAgdGhpcy5tYXRPcHRpb25zKCkuZm9yRWFjaCgobWF0T3B0aW9uOiBNYXRPcHRpb24pID0+IHtcbiAgICAgIG1hdE9wdGlvbi5kaXNhYmxlZCA9IHRoaXMuaXNPcHRpb25EaXNhYmxlZCgpKG1hdE9wdGlvbi52YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBXbGNtU2VsZWN0VmFsdWUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYWdpbmF0ZWQoKSkgdGhpcy5wcmVmaWxsT3B0aW9ucyh2YWx1ZSk7XG5cbiAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZTogV2xjbVNlbGVjdFZhbHVlID0gdGhpcy5wcmVwYXJlVmFsdWVGb3JQYXRjaCh2YWx1ZSk7XG5cbiAgICB0aGlzLnVwZGF0ZVZhbHVlKGZvcm1hdHRlZFZhbHVlKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoY2FsbGJhY2s6ICh2YWx1ZTogV2xjbVNlbGVjdFZhbHVlKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbmdlZCA9IGNhbGxiYWNrO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl90b3VjaGVkID0gY2FsbGJhY2s7XG4gIH1cblxuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fdmFsaWRhdG9yQ2hhbmdlZCA9IGNhbGxiYWNrO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZC5zZXQoaXNEaXNhYmxlZCk7XG4gIH1cblxuICB2YWxpZGF0ZSgpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1hdFNlbGVjdD8ucGFuZWxPcGVuID8/IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlVmFsdWVGb3JQYXRjaCh2YWx1ZTogV2xjbVNlbGVjdFZhbHVlKTogV2xjbVNlbGVjdFZhbHVlIHtcbiAgICBjb25zdCBmb3JtYXRlZFZhbHVlOiB7IGNoYW5nZWQ6IGJvb2xlYW47IHZhbHVlOiBXbGNtU2VsZWN0VmFsdWUgfSA9IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUpO1xuXG4gICAgaWYgKGZvcm1hdGVkVmFsdWUuY2hhbmdlZCkgdGhpcy5hZGp1c3RlZFZhbHVlJC5uZXh0KGZvcm1hdGVkVmFsdWUudmFsdWUpO1xuXG4gICAgcmV0dXJuIGZvcm1hdGVkVmFsdWUudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFZhbHVlKHZhbHVlOiBXbGNtU2VsZWN0VmFsdWUpOiB7IGNoYW5nZWQ6IGJvb2xlYW47IHZhbHVlOiBXbGNtU2VsZWN0VmFsdWUgfSB7XG4gICAgbGV0IGNoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0IF9mb3JtYXRPcHRpb24gPSAodmFsdWU6IFdsY21PcHRpb24gfCBzdHJpbmcpOiBXbGNtT3B0aW9uIHwgc3RyaW5nID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdGVkT3B0aW9uOiB7IGNoYW5nZWQ6IGJvb2xlYW47IHZhbHVlOiBXbGNtT3B0aW9uIHwgc3RyaW5nIH0gPSB0aGlzLmZvcm1hdE9wdGlvbih2YWx1ZSk7XG5cbiAgICAgIGlmIChmb3JtYXRlZE9wdGlvbi5jaGFuZ2VkKSBjaGFuZ2VkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIGZvcm1hdGVkT3B0aW9uLnZhbHVlO1xuICAgIH07XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgY29uc3Qgb3B0aW9uczogV2xjbVNlbGVjdFZhbHVlID0gdmFsdWUubWFwKF9mb3JtYXRPcHRpb24pIGFzIFdsY21TZWxlY3RWYWx1ZTtcblxuICAgICAgcmV0dXJuIHsgY2hhbmdlZCwgdmFsdWU6IG9wdGlvbnMgfTtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb246IFdsY21TZWxlY3RWYWx1ZSA9IF9mb3JtYXRPcHRpb24odmFsdWUpO1xuXG4gICAgcmV0dXJuIHsgY2hhbmdlZCwgdmFsdWU6IG9wdGlvbiB9O1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRPcHRpb24odmFsdWU6IFdsY21PcHRpb24gfCBzdHJpbmcpOiB7IGNoYW5nZWQ6IGJvb2xlYW47IHZhbHVlOiBXbGNtT3B0aW9uIHwgc3RyaW5nIH0ge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiB0aGlzLnNlbGVjdE9wdGlvbkZvcm1hdCgpID09PSAnVmFsdWVPbmx5Jykge1xuICAgICAgcmV0dXJuIHsgY2hhbmdlZDogdHJ1ZSwgdmFsdWU6IHZhbHVlLnZhbHVlIGFzIHN0cmluZyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IGNoYW5nZWQ6IGZhbHNlLCB2YWx1ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGFnaW5hdGVkT3B0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5UGFyYW1zLnBhZ2UgPSAxO1xuXG4gICAgdGhpcy5mZXRjaFBhZ2luYXRlZE9wdGlvbnMhKHRoaXMucXVlcnlQYXJhbXMpXG4gICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSwgZmlyc3QoKSlcbiAgICAgIC5zdWJzY3JpYmUoKHBhZ2luYXRlZERhdGE6IFdsY21QYWdpbmF0ZWREYXRhPFdsY21PcHRpb24+KSA9PiB7XG4gICAgICAgIHRoaXMuX29wdGlvbnNDYWNoZS5jbGVhcigpO1xuXG4gICAgICAgIHRoaXMuY2FjaGVPcHRpb25zKHBhZ2luYXRlZERhdGEuZGF0YSk7XG5cbiAgICAgICAgdGhpcy5fcGFnaW5hdGVkRGF0YSA9IHBhZ2luYXRlZERhdGE7XG5cbiAgICAgICAgdGhpcy5wYWdpbmF0ZWRPcHRpb25zLnNldChwYWdpbmF0ZWREYXRhLmRhdGEpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRNb3JlUGFnaW5hdGVkT3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3BhZ2luYXRlZERhdGEgfHwgdGhpcy5fcGFnaW5hdGVkRGF0YS5jdXJyUGFnZSArIDEgPiB0aGlzLl9wYWdpbmF0ZWREYXRhLnRvdGFsUGFnZXMpIHJldHVybjtcblxuICAgIHRoaXMucXVlcnlQYXJhbXMucGFnZSsrO1xuXG4gICAgdGhpcy5mZXRjaFBhZ2luYXRlZE9wdGlvbnMhKHsgLi4udGhpcy5xdWVyeVBhcmFtcyB9KVxuICAgICAgLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcyksIGZpcnN0KCkpXG4gICAgICAuc3Vic2NyaWJlKChwYWdpbmF0ZWREYXRhOiBXbGNtUGFnaW5hdGVkRGF0YTxXbGNtT3B0aW9uPikgPT4ge1xuICAgICAgICB0aGlzLmNhY2hlT3B0aW9ucyhwYWdpbmF0ZWREYXRhLmRhdGEpO1xuXG4gICAgICAgIHRoaXMuX3BhZ2luYXRlZERhdGEgPSBwYWdpbmF0ZWREYXRhO1xuXG4gICAgICAgIHRoaXMucGFnaW5hdGVkT3B0aW9ucy51cGRhdGUoKG9wdGlvbnM6IFdsY21PcHRpb25bXSkgPT4gWy4uLm9wdGlvbnMsIC4uLnBhZ2luYXRlZERhdGEuZGF0YV0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNhY2hlT3B0aW9ucyhvcHRpb25zOiBXbGNtT3B0aW9uW10pOiB2b2lkIHtcbiAgICBvcHRpb25zLmZvckVhY2goKG9wdGlvbjogV2xjbU9wdGlvbikgPT4gdGhpcy5fb3B0aW9uc0NhY2hlLmFkZChvcHRpb24udmFsdWUpKTtcblxuICAgIHRoaXMuc3luY1ByZWZpbGxlZE9wdGlvbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY1ByZWZpbGxlZE9wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJlZmlsbGVkT3B0aW9ucygpLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgdGhpcy5wcmVmaWxsZWRPcHRpb25zLnVwZGF0ZSgob3B0aW9uczogV2xjbU9wdGlvbltdKSA9PiB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbjogV2xjbU9wdGlvbikgPT4gIXRoaXMuX29wdGlvbnNDYWNoZS5oYXMob3B0aW9uLnZhbHVlKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByZWZpbGxPcHRpb25zKHZhbHVlOiBXbGNtU2VsZWN0VmFsdWUpOiB2b2lkIHtcbiAgICBsZXQgcHJlZmlsbGVkT3B0aW9uczogV2xjbU9wdGlvbltdID0gW107XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgcHJlZmlsbGVkT3B0aW9ucyA9IHZhbHVlLmZpbHRlcigob3B0aW9uOiBXbGNtT3B0aW9uIHwgc3RyaW5nKSA9PiBvcHRpb24gaW5zdGFuY2VvZiBPYmplY3QpIGFzIFdsY21PcHRpb25bXTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICBwcmVmaWxsZWRPcHRpb25zID0gW3ZhbHVlXTtcbiAgICB9XG5cbiAgICB0aGlzLnByZWZpbGxlZE9wdGlvbnMuc2V0KHByZWZpbGxlZE9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTY3JvbGxEb3duKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1hdC1tZGMtc2VsZWN0LXBhbmVsJykhO1xuXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsRGV0ZWN0aW9uQXBpLm9uU2Nyb2xsZWREb3duKGVsZW1lbnQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5sb2FkTW9yZVBhZ2luYXRlZE9wdGlvbnMoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU3RhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5wYXJlbnRGb3JtTWVtYmVyLnN0YXRlQ2hhbmdlcyQucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRvckNoYW5nZWQ/LigpO1xuXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVBZGp1c3RlZFZhbHVlKCk6IHZvaWQge1xuICAgIHRoaXMudmlld1JlYWR5JFxuICAgICAgLnBpcGUoc3dpdGNoTWFwKCgpID0+IHRoaXMuYWRqdXN0ZWRWYWx1ZSQucGlwZShmaWx0ZXIoQm9vbGVhbikpKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBXbGNtU2VsZWN0VmFsdWUpID0+IHRoaXMuX2NoYW5nZWQ/Lih2YWx1ZSkpO1xuICB9XG59XG4iLCI8bWF0LXNlbGVjdFxuICAjc2VsZWN0Q29tcG9uZW50XG4gIFt2YWx1ZV09XCJ2YWx1ZSgpXCJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxuICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcbiAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgW2hpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3JdPVwidHJ1ZVwiXG4gIFtuZ0NsYXNzXT1cInsgZm9jdXNlZDogc2VsZWN0Q29tcG9uZW50LmZvY3VzZWQgfVwiXG4gIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0KCRldmVudClcIlxuICBbY29tcGFyZVdpdGhdPVwiY29tcGFyZVdpdGhcIlxuICAob3BlbmVkKT1cInBhbmVsT3BlbmVkKClcIlxuICAoY2xvc2VkKT1cInBhbmVsQ2xvc2VkKClcIlxuPlxuICBAaWYgKHRyaWdnZXJUZW1wbGF0ZSgpKSB7XG4gICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICB0cmlnZ2VyVGVtcGxhdGUoKSE7XG4gICAgICAgICAgY29udGV4dDogJGFueSh7ICRpbXBsaWNpdDogc2VsZWN0Q29tcG9uZW50LnNlbGVjdGVkIH0pXG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gIH1cblxuICA8bWF0LW9wdGlvblxuICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcHJlZmlsbGVkT3B0aW9ucygpXCJcbiAgICBbdmFsdWVdPVwic2VsZWN0T3B0aW9uRm9ybWF0KCkgPT09ICdDb21wbGV0ZU9wdGlvbicgPyBvcHRpb24gOiBvcHRpb24udmFsdWVcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwid2xjbVNlbGVjdE9wdGlvbkNvbnRlbnRcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBvcHRpb24gfVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L21hdC1vcHRpb24+XG5cbiAgPG1hdC1vcHRpb25cbiAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNvbXB1dGVkT3B0aW9ucygpXCJcbiAgICBbdmFsdWVdPVwic2VsZWN0T3B0aW9uRm9ybWF0KCkgPT09ICdDb21wbGV0ZU9wdGlvbicgPyBvcHRpb24gOiBvcHRpb24udmFsdWVcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwid2xjbVNlbGVjdE9wdGlvbkNvbnRlbnRcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBvcHRpb24gfVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L21hdC1vcHRpb24+XG48L21hdC1zZWxlY3Q+XG5cbjxkaXYgY2xhc3M9XCJ3bGNtLXNlbGVjdC1hcnJvd1wiPlxuICA8bmctY29udGFpbmVyXG4gICAgW3dsY21JY29uXT1cIldsY21JY29uTmFtZS5DSEVWUk9OX0RPV05cIlxuICAgIFt3bGNtSWNvblN0b3BQcm9wYWdhdGlvbl09XCJmYWxzZVwiXG4gID48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3dsY21TZWxlY3RPcHRpb25Db250ZW50IGxldC1vcHRpb24+XG4gIEBpZiAob3B0aW9uVGVtcGxhdGUoKSkge1xuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwib3B0aW9uVGVtcGxhdGUoKTsgY29udGV4dDogJGFueSh7ICRpbXBsaWNpdDogb3B0aW9uIH0pXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIH0gQGVsc2Uge1xuICAgIHt7IG9wdGlvbi52aWV3VmFsdWUgfX1cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
@@ -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: "18.2.6", 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: "18.2.6", 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: "18.2.6", 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: "18.2.6", ngImport: i0, type: WlcmFormFieldCustomContainerDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
8
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: WlcmFormFieldCustomContainerDirective, isStandalone: true, selector: "[wlcmFormFieldCustomContainer]", ngImport: i0 }); }
|
9
|
+
}
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", 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: "18.2.6", ngImport: i0, type: WlcmFormFieldHintDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
5
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: WlcmFormFieldHintDirective, isStandalone: true, selector: "[wlcmFormFieldHint]", host: { classAttribute: "wlcm-hint" }, ngImport: i0 }); }
|
6
|
+
}
|
7
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", 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: "18.2.6", ngImport: i0, type: WlcmFormFieldPrefixDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
10
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: WlcmFormFieldPrefixDirective, isStandalone: true, selector: "[wlcmFormFieldPrefix]", host: { listeners: { "click": "handlerClick($event)" } }, ngImport: i0 }); }
|
11
|
+
}
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", 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==
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { Directive } from '@angular/core';
|
2
|
+
import * as i0 from "@angular/core";
|
3
|
+
export class WlcmFormFieldSuffixDirective {
|
4
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: WlcmFormFieldSuffixDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
5
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: WlcmFormFieldSuffixDirective, isStandalone: true, selector: "[wlcmFormFieldSuffix]", ngImport: i0 }); }
|
6
|
+
}
|
7
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: WlcmFormFieldSuffixDirective, decorators: [{
|
8
|
+
type: Directive,
|
9
|
+
args: [{
|
10
|
+
selector: '[wlcmFormFieldSuffix]',
|
11
|
+
standalone: true,
|
12
|
+
}]
|
13
|
+
}] });
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC1zdWZmaXguZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9mb3Jtcy9zcmMvbGliL2Zvcm1zL2RpcmVjdGl2ZXMvZm9ybS1maWVsZC1zdWZmaXguZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTTFDLE1BQU0sT0FBTyw0QkFBNEI7OEdBQTVCLDRCQUE0QjtrR0FBNUIsNEJBQTRCOzsyRkFBNUIsNEJBQTRCO2tCQUp4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbd2xjbUZvcm1GaWVsZFN1ZmZpeF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBXbGNtRm9ybUZpZWxkU3VmZml4RGlyZWN0aXZlIHt9XG4iXX0=
|