ecabs-components 1.1.55 → 1.1.57

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 (54) hide show
  1. package/README.md +2 -0
  2. package/esm2022/lib/base/consts/error-messages.consts.mjs +13 -1
  3. package/esm2022/lib/base/element-wrapper/element-wrapper.component.mjs +3 -3
  4. package/esm2022/lib/base/models/phone.models.mjs +1 -1
  5. package/esm2022/lib/base/models/select.models.mjs +1 -1
  6. package/esm2022/lib/base/models/sidebar.models.mjs +1 -1
  7. package/esm2022/lib/base/pipes/phone-number-country-code.pipe.mjs +31 -0
  8. package/esm2022/lib/base/pipes/truncate.pipe.mjs +14 -4
  9. package/esm2022/lib/base/utils/object-utils.mjs +9 -1
  10. package/esm2022/lib/ecabs-button-toggle/ecabs-button-toggle.component.mjs +4 -4
  11. package/esm2022/lib/ecabs-buttons-v2/ecabs-buttons-v2.component.mjs +3 -3
  12. package/esm2022/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.component.mjs +2 -2
  13. package/esm2022/lib/ecabs-chip-autocomplete/ecabs-chip-autocomplete.component.mjs +197 -0
  14. package/esm2022/lib/ecabs-chip-group/ecabs-chip-group.component.mjs +61 -0
  15. package/esm2022/lib/ecabs-chip-group/ecabs-chip-group.module.mjs +20 -0
  16. package/esm2022/lib/ecabs-date-range-picker/ecabs-date-range-picker.component.mjs +2 -2
  17. package/esm2022/lib/ecabs-date-range-picker-v2/components/ecabs-date-range-picker-header/ecabs-date-range-picker-header-v2.component.mjs +21 -0
  18. package/esm2022/lib/ecabs-date-range-picker-v2/ecabs-date-range-picker-v2.component.mjs +259 -0
  19. package/esm2022/lib/ecabs-date-range-picker-v2/ecabs-date-range-picker-v2.module.mjs +76 -0
  20. package/esm2022/lib/ecabs-dialog-message/ecabs-dialog-message.component.mjs +2 -2
  21. package/esm2022/lib/ecabs-increment/ecabs-increment.component.mjs +2 -2
  22. package/esm2022/lib/ecabs-language-selector/ecabs-language-selector.component.mjs +2 -2
  23. package/esm2022/lib/ecabs-menu-items/ecabs-menu-items.component.mjs +3 -3
  24. package/esm2022/lib/ecabs-multiple-dates-picker/ecabs-multiple-dates-picker.component.mjs +2 -2
  25. package/esm2022/lib/ecabs-note/ecabs-note.component.mjs +2 -2
  26. package/esm2022/lib/ecabs-picker-header/ecabs-picker-header.component.mjs +2 -2
  27. package/esm2022/lib/ecabs-table/ecabs-table-filter-wrapper/ecabs-table-filter-wrapper.component.mjs +2 -2
  28. package/esm2022/public-api.mjs +8 -1
  29. package/fesm2022/ecabs-components.mjs +661 -41
  30. package/fesm2022/ecabs-components.mjs.map +1 -1
  31. package/lib/base/models/phone.models.d.ts +1 -0
  32. package/lib/base/models/select.models.d.ts +2 -2
  33. package/lib/base/models/sidebar.models.d.ts +1 -1
  34. package/lib/base/pipes/phone-number-country-code.pipe.d.ts +8 -0
  35. package/lib/base/utils/object-utils.d.ts +1 -0
  36. package/lib/ecabs-button-toggle/ecabs-button-toggle.component.d.ts +9 -10
  37. package/lib/ecabs-chip-autocomplete/ecabs-chip-autocomplete.component.d.ts +50 -0
  38. package/lib/ecabs-chip-group/ecabs-chip-group.component.d.ts +21 -0
  39. package/lib/ecabs-chip-group/ecabs-chip-group.module.d.ts +10 -0
  40. package/lib/ecabs-date-range-picker-v2/components/ecabs-date-range-picker-header/ecabs-date-range-picker-header-v2.component.d.ts +9 -0
  41. package/lib/ecabs-date-range-picker-v2/ecabs-date-range-picker-v2.component.d.ts +71 -0
  42. package/lib/ecabs-date-range-picker-v2/ecabs-date-range-picker-v2.module.d.ts +21 -0
  43. package/package.json +2 -1
  44. package/public-api.d.ts +7 -0
  45. package/src/assets/styles/material/overrides/_autocomplete.scss +19 -0
  46. package/src/assets/styles/material/overrides/_chip.scss +80 -0
  47. package/src/assets/styles/material/overrides/_datepicker.scss +22 -0
  48. package/src/assets/styles/scss/modules/_autocomplete.scss +1 -1
  49. package/src/assets/styles/scss/modules/_chip.scss +7 -1
  50. package/src/assets/styles/scss/modules/_form.scss +78 -5
  51. package/src/assets/styles/scss/utilities/_colors.scss +3 -5
  52. package/src/assets/styles/scss/utilities/_fonts.scss +4 -0
  53. package/src/assets/styles/scss/utilities/_variables.scss +2 -0
  54. package/src/assets/styles/tailwind/index.scss +1 -1
@@ -0,0 +1,259 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR, NgControl, Validators } from '@angular/forms';
3
+ import { format, isEqual, isValid } from 'date-fns';
4
+ import Holidays from 'date-holidays';
5
+ import { isEqual as lodashIsEqual } from 'lodash';
6
+ import { takeUntil } from 'rxjs';
7
+ import EcabsElementBaseComponent from '../base/element-base';
8
+ import { UnsubscribeService } from '../base/services/unsubscribe.service';
9
+ import { EcabsDateRangePickerHeaderComponentV2 } from './components/ecabs-date-range-picker-header/ecabs-date-range-picker-header-v2.component';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "../base/services/ecabs-date-picker-translations.service";
12
+ import * as i2 from "../base/services/unsubscribe.service";
13
+ import * as i3 from "../base/element-wrapper/element-wrapper.component";
14
+ import * as i4 from "@angular/material/datepicker";
15
+ import * as i5 from "@angular/forms";
16
+ export class EcabsDateRangePickerComponentV2 extends EcabsElementBaseComponent {
17
+ injector;
18
+ ecabsDatePickerHeaderService;
19
+ unsubscribeService;
20
+ minDate;
21
+ maxDate;
22
+ touchUi = false;
23
+ cancelLabel;
24
+ applyLabel;
25
+ startDatePlaceholder;
26
+ endDatePlaceholder;
27
+ separatorLabel = 'to';
28
+ excludeHolidays;
29
+ excludeWeekends;
30
+ specificDates;
31
+ holidayOptions;
32
+ onblur = new EventEmitter();
33
+ val;
34
+ pickerTo;
35
+ header = EcabsDateRangePickerHeaderComponentV2;
36
+ _dateFrom;
37
+ _dateTo;
38
+ translationConfig;
39
+ minDateFrom = undefined;
40
+ maxDateFrom = undefined;
41
+ minDateTo = undefined;
42
+ maxDateTo = undefined;
43
+ panelClass = 'ecabs-date-range-picker-v2';
44
+ holidayInstance;
45
+ get value() {
46
+ return this.val;
47
+ }
48
+ get dateFrom() {
49
+ return this._dateFrom;
50
+ }
51
+ get dateTo() {
52
+ return this._dateTo;
53
+ }
54
+ //eslint-disable-next-line
55
+ set value(val) {
56
+ if (this.val !== val) {
57
+ this.val = val;
58
+ this.dateFrom = val.dateFrom;
59
+ this.dateTo = val.dateTo;
60
+ this.onChange(val);
61
+ this.onTouch(val);
62
+ }
63
+ }
64
+ //eslint-disable-next-line
65
+ set dateFrom(val) {
66
+ if (this._dateFrom !== val && isValid(new Date(val))) {
67
+ this._dateFrom = val;
68
+ this.minDateTo = new Date(val);
69
+ if (!this.dateTo) {
70
+ this.pickerTo?.open();
71
+ }
72
+ this.onApply();
73
+ }
74
+ }
75
+ //eslint-disable-next-line
76
+ set dateTo(val) {
77
+ if (this._dateTo !== val && isValid(new Date(val))) {
78
+ this._dateTo = val;
79
+ this.maxDateFrom = new Date(val);
80
+ this.onApply();
81
+ }
82
+ }
83
+ constructor(injector, ecabsDatePickerHeaderService, unsubscribeService) {
84
+ super();
85
+ this.injector = injector;
86
+ this.ecabsDatePickerHeaderService = ecabsDatePickerHeaderService;
87
+ this.unsubscribeService = unsubscribeService;
88
+ }
89
+ ngOnChanges(changes) {
90
+ const { minDate, maxDate } = changes;
91
+ if (minDate?.currentValue) {
92
+ this.minDateFrom = minDate?.currentValue;
93
+ this.minDateTo = minDate?.currentValue;
94
+ }
95
+ if (maxDate?.currentValue) {
96
+ this.maxDateFrom = maxDate?.currentValue;
97
+ this.maxDateTo = maxDate?.currentValue;
98
+ }
99
+ }
100
+ ngOnInit() {
101
+ this.ecabsDatePickerHeaderService
102
+ .getConfig()
103
+ .pipe(takeUntil(this.unsubscribeService.subscription()))
104
+ .subscribe((config) => (this.translationConfig = config));
105
+ if (this.holidayOptions?.countryCode) {
106
+ this.holidayInstance = new Holidays(this.holidayOptions.countryCode.toUpperCase());
107
+ }
108
+ }
109
+ ngAfterViewInit() {
110
+ const ngControl = this.injector.get(NgControl, null);
111
+ if (ngControl) {
112
+ this.control = ngControl.control;
113
+ this.control.valueChanges
114
+ .pipe(takeUntil(this.unsubscribeService.subscription()))
115
+ .subscribe(() => this.dateRangeValidator(this.control));
116
+ setTimeout(() => {
117
+ this.dateFrom = this.value.dateFrom;
118
+ this.dateTo = this.value.dateTo;
119
+ });
120
+ }
121
+ }
122
+ ngOnDestroy() {
123
+ this.unsubscribeService.destroy();
124
+ }
125
+ onChange = () => {
126
+ };
127
+ onTouch = () => {
128
+ };
129
+ writeValue(value) {
130
+ this.value = value;
131
+ }
132
+ registerOnChange(fn) {
133
+ this.onChange = fn;
134
+ }
135
+ registerOnTouched(fn) {
136
+ this.onTouch = fn;
137
+ }
138
+ blurChange(e) {
139
+ this.onblur.emit(e);
140
+ }
141
+ onApply() {
142
+ const newValue = {
143
+ dateFrom: this.dateFrom,
144
+ dateTo: this.dateTo,
145
+ };
146
+ if (!lodashIsEqual(this.value, newValue)) {
147
+ this.val = newValue;
148
+ this.onChange(newValue);
149
+ this.onTouch(newValue);
150
+ }
151
+ this.value = {
152
+ dateFrom: this.dateFrom,
153
+ dateTo: this.dateTo,
154
+ };
155
+ }
156
+ filterDateRange = (date) => {
157
+ let result = true;
158
+ if (isValid(new Date(date))) {
159
+ const day = date?.getDay();
160
+ if (this.excludeWeekends) {
161
+ result = result && day !== 0 && day !== 6;
162
+ }
163
+ if (this.excludeHolidays) {
164
+ result = result && this.isDateNotHoliday(date);
165
+ }
166
+ if (this.specificDates?.length > 0) {
167
+ const specificDates = this.specificDates;
168
+ if (specificDates && specificDates.length > 0) {
169
+ const index = specificDates.findIndex((specificDate) => isEqual(date, specificDate));
170
+ result = result && index === -1;
171
+ }
172
+ }
173
+ }
174
+ return result;
175
+ };
176
+ isDateNotHoliday(date) {
177
+ const { countryCode, timeZoneOffset } = this.holidayOptions ?? {};
178
+ if (countryCode && timeZoneOffset) {
179
+ return !this.holidayInstance?.isHoliday(`${format(date, 'yyyy-MM-dd')}T00:00:00${timeZoneOffset}`);
180
+ }
181
+ return true;
182
+ }
183
+ dateRangeValidator(control) {
184
+ const required = control?.hasValidator(Validators.required);
185
+ if (control.value) {
186
+ const { dateFrom, dateTo } = control.value;
187
+ control.setErrors(null);
188
+ if (required && (!dateFrom || dateFrom?.length === 0) && (!dateTo || dateTo?.length === 0)) {
189
+ control.setErrors({ required: true });
190
+ return;
191
+ }
192
+ if (!dateFrom && dateTo) {
193
+ control.setErrors({ dateFromRangeRequired: true });
194
+ return;
195
+ }
196
+ if (dateFrom && !dateTo) {
197
+ control.setErrors({ dateToRangeRequired: true });
198
+ return;
199
+ }
200
+ if (new Date(dateFrom) > new Date(dateTo)) {
201
+ control.setErrors({ dateFromMoreThanDateTo: true });
202
+ return;
203
+ }
204
+ }
205
+ if (!control.errors) {
206
+ control.setErrors(required ? { required: true } : null);
207
+ }
208
+ }
209
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDateRangePickerComponentV2, deps: [{ token: i0.Injector }, { token: i1.EcabsDatePickerHeaderService }, { token: i2.UnsubscribeService }], target: i0.ɵɵFactoryTarget.Component });
210
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsDateRangePickerComponentV2, selector: "ecabs-date-range-picker-v2", inputs: { minDate: "minDate", maxDate: "maxDate", touchUi: "touchUi", cancelLabel: "cancelLabel", applyLabel: "applyLabel", startDatePlaceholder: "startDatePlaceholder", endDatePlaceholder: "endDatePlaceholder", separatorLabel: "separatorLabel", excludeHolidays: "excludeHolidays", excludeWeekends: "excludeWeekends", specificDates: "specificDates", holidayOptions: "holidayOptions" }, outputs: { onblur: "onblur" }, providers: [
211
+ {
212
+ provide: NG_VALUE_ACCESSOR,
213
+ useExisting: EcabsDateRangePickerComponentV2,
214
+ multi: true,
215
+ },
216
+ UnsubscribeService,
217
+ ], viewQueries: [{ propertyName: "pickerTo", first: true, predicate: ["pickerTo"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__range--wrapper\">\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateFrom' }}\"\r\n [(ngModel)]=\"dateFrom\"\r\n [placeholder]=\"startDatePlaceholder ?? translationConfig?.startDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerFrom\"\r\n [min]=\"minDateFrom\"\r\n [max]=\"maxDateFrom\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerFrom.open()\"\r\n />\r\n <mat-datepicker #pickerFrom\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n\r\n <span class=\"text-gray-400 px-3 text-sm\">{{ separatorLabel }}</span>\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateTo' }}\"\r\n [(ngModel)]=\"dateTo\"\r\n [placeholder]=\"endDatePlaceholder ?? translationConfig?.endDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerTo\"\r\n [min]=\"minDateTo\"\r\n [max]=\"maxDateTo\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerTo.open()\"\r\n />\r\n <mat-datepicker #pickerTo\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n", styles: [""], dependencies: [{ kind: "component", type: i3.EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i4.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i4.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
218
+ }
219
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDateRangePickerComponentV2, decorators: [{
220
+ type: Component,
221
+ args: [{ selector: 'ecabs-date-range-picker-v2', providers: [
222
+ {
223
+ provide: NG_VALUE_ACCESSOR,
224
+ useExisting: EcabsDateRangePickerComponentV2,
225
+ multi: true,
226
+ },
227
+ UnsubscribeService,
228
+ ], template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__range--wrapper\">\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateFrom' }}\"\r\n [(ngModel)]=\"dateFrom\"\r\n [placeholder]=\"startDatePlaceholder ?? translationConfig?.startDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerFrom\"\r\n [min]=\"minDateFrom\"\r\n [max]=\"maxDateFrom\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerFrom.open()\"\r\n />\r\n <mat-datepicker #pickerFrom\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n\r\n <span class=\"text-gray-400 px-3 text-sm\">{{ separatorLabel }}</span>\r\n <div class=\"form-field__range\">\r\n <input\r\n class=\"border-none w-full\"\r\n id=\"{{ name + 'dateTo' }}\"\r\n [(ngModel)]=\"dateTo\"\r\n [placeholder]=\"endDatePlaceholder ?? translationConfig?.endDatePlaceholder\"\r\n [disabled]=\"disabled\"\r\n [matDatepicker]=\"pickerTo\"\r\n [min]=\"minDateTo\"\r\n [max]=\"maxDateTo\"\r\n [matDatepickerFilter]=\"filterDateRange\"\r\n (blur)=\"onTouch()\"\r\n (click)=\"pickerTo.open()\"\r\n />\r\n <mat-datepicker #pickerTo\r\n [panelClass]=\"panelClass\"\r\n [calendarHeaderComponent]=\"header\"\r\n [touchUi]=\"touchUi\">\r\n </mat-datepicker>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n" }]
229
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.EcabsDatePickerHeaderService }, { type: i2.UnsubscribeService }]; }, propDecorators: { minDate: [{
230
+ type: Input
231
+ }], maxDate: [{
232
+ type: Input
233
+ }], touchUi: [{
234
+ type: Input
235
+ }], cancelLabel: [{
236
+ type: Input
237
+ }], applyLabel: [{
238
+ type: Input
239
+ }], startDatePlaceholder: [{
240
+ type: Input
241
+ }], endDatePlaceholder: [{
242
+ type: Input
243
+ }], separatorLabel: [{
244
+ type: Input
245
+ }], excludeHolidays: [{
246
+ type: Input
247
+ }], excludeWeekends: [{
248
+ type: Input
249
+ }], specificDates: [{
250
+ type: Input
251
+ }], holidayOptions: [{
252
+ type: Input
253
+ }], onblur: [{
254
+ type: Output
255
+ }], pickerTo: [{
256
+ type: ViewChild,
257
+ args: ['pickerTo']
258
+ }] } });
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItdjIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLXYyL2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLXYyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1kYXRlLXJhbmdlLXBpY2tlci12Mi9lY2Ficy1kYXRlLXJhbmdlLXBpY2tlci12Mi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFFWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXVCLGlCQUFpQixFQUFFLFNBQVMsRUFBc0IsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEgsT0FBTyxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2xELE9BQU8sUUFBUSxNQUFNLGVBQWUsQ0FBQztBQUNyQyxPQUFPLEVBQUMsT0FBTyxJQUFJLGFBQWEsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUVoRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8seUJBQXlCLE1BQU0sc0JBQXNCLENBQUM7QUFNN0QsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUNMLHFDQUFxQyxFQUN0QyxNQUFNLHlGQUF5RixDQUFDOzs7Ozs7O0FBZWpHLE1BQU0sT0FBTywrQkFDWCxTQUFRLHlCQUF5QjtJQXNGZDtJQUNBO0lBQ0E7SUF0RlYsT0FBTyxDQUFPO0lBQ2QsT0FBTyxDQUFPO0lBQ2Qs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QkFNZ0IsUUFBUTtzQkFBOUIsU0FBUzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5qZWN0b3IsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgTmdDb250cm9sLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtNYXREYXRlUmFuZ2VQaWNrZXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQge2Zvcm1hdCwgaXNFcXVhbCwgaXNWYWxpZH0gZnJvbSAnZGF0ZS1mbnMnO1xyXG5pbXBvcnQgSG9saWRheXMgZnJvbSAnZGF0ZS1ob2xpZGF5cyc7XHJcbmltcG9ydCB7aXNFcXVhbCBhcyBsb2Rhc2hJc0VxdWFsfSBmcm9tICdsb2Rhc2gnO1xyXG5cclxuaW1wb3J0IHt0YWtlVW50aWx9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IEVjYWJzRWxlbWVudEJhc2VDb21wb25lbnQgZnJvbSAnLi4vYmFzZS9lbGVtZW50LWJhc2UnO1xyXG5pbXBvcnQge1xyXG4gIEVjYWJzRGF0ZVBpY2tlckhvbGlkYXlPcHRpb25zLFxyXG4gIEVjYWJzRGF0ZVBpY2tlclRyYW5zbGF0aW9ucyxcclxufSBmcm9tICcuLi9iYXNlL21vZGVscy9lY2Ficy1kYXRlLXBpY2tlci10cmFuc2xhdGlvbnMubW9kZWxzJztcclxuaW1wb3J0IHtFY2Fic0RhdGVQaWNrZXJIZWFkZXJTZXJ2aWNlfSBmcm9tICcuLi9iYXNlL3NlcnZpY2VzL2VjYWJzLWRhdGUtcGlja2VyLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHtVbnN1YnNjcmliZVNlcnZpY2V9IGZyb20gJy4uL2Jhc2Uvc2VydmljZXMvdW5zdWJzY3JpYmUuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgRWNhYnNEYXRlUmFuZ2VQaWNrZXJIZWFkZXJDb21wb25lbnRWMlxyXG59IGZyb20gJy4vY29tcG9uZW50cy9lY2Ficy1kYXRlLXJhbmdlLXBpY2tlci1oZWFkZXIvZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItaGVhZGVyLXYyLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLXYyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItdjIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLXYyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogRWNhYnNEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnRWMixcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gICAgVW5zdWJzY3JpYmVTZXJ2aWNlLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFY2Fic0RhdGVSYW5nZVBpY2tlckNvbXBvbmVudFYyXHJcbiAgZXh0ZW5kcyBFY2Fic0VsZW1lbnRCYXNlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgbWluRGF0ZTogRGF0ZTtcclxuICBASW5wdXQoKSBtYXhEYXRlOiBEYXRlO1xyXG4gIEBJbnB1dCgpIHRvdWNoVWkgPSBmYWxzZTtcclxuICBASW5wdXQoKSBjYW5jZWxMYWJlbDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFwcGx5TGFiZWw6IHN0cmluZztcclxuICBASW5wdXQoKSBzdGFydERhdGVQbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGVuZERhdGVQbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNlcGFyYXRvckxhYmVsID0gJ3RvJztcclxuICBASW5wdXQoKSBleGNsdWRlSG9saWRheXM6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZXhjbHVkZVdlZWtlbmRzOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNwZWNpZmljRGF0ZXM6IERhdGVbXTtcclxuICBASW5wdXQoKSBob2xpZGF5T3B0aW9uczogRWNhYnNEYXRlUGlja2VySG9saWRheU9wdGlvbnM7XHJcblxyXG4gIEBPdXRwdXQoKSBvbmJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICB2YWw6IHtcclxuICAgIGRhdGVGcm9tOiBzdHJpbmc7XHJcbiAgICBkYXRlVG86IHN0cmluZztcclxuICB9O1xyXG5cclxuICBAVmlld0NoaWxkKCdwaWNrZXJUbycpIHBpY2tlclRvOiBNYXREYXRlUmFuZ2VQaWNrZXI8YW55PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgaGVhZGVyID0gRWNhYnNEYXRlUmFuZ2VQaWNrZXJIZWFkZXJDb21wb25lbnRWMjtcclxuICBfZGF0ZUZyb206IHN0cmluZztcclxuICBfZGF0ZVRvOiBzdHJpbmc7XHJcbiAgdHJhbnNsYXRpb25Db25maWc6IEVjYWJzRGF0ZVBpY2tlclRyYW5zbGF0aW9ucztcclxuICBtaW5EYXRlRnJvbT86IERhdGUgPSB1bmRlZmluZWQ7XHJcbiAgbWF4RGF0ZUZyb20/OiBEYXRlID0gdW5kZWZpbmVkO1xyXG4gIG1pbkRhdGVUbz86IERhdGUgPSB1bmRlZmluZWQ7XHJcbiAgbWF4RGF0ZVRvPzogRGF0ZSA9IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBhbmVsQ2xhc3MgPSAnZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItdjInO1xyXG5cclxuICBwcml2YXRlIGhvbGlkYXlJbnN0YW5jZTogSG9saWRheXM7XHJcblxyXG4gIGdldCB2YWx1ZSgpOiB7XHJcbiAgICBkYXRlRnJvbTogc3RyaW5nO1xyXG4gICAgZGF0ZVRvOiBzdHJpbmc7XHJcbiAgfSB7XHJcbiAgICByZXR1cm4gdGhpcy52YWw7XHJcbiAgfVxyXG5cclxuICBnZXQgZGF0ZUZyb20oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRlRnJvbTtcclxuICB9XHJcblxyXG4gIGdldCBkYXRlVG8oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRlVG87XHJcbiAgfVxyXG5cclxuICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZVxyXG4gIHNldCB2YWx1ZSh2YWw6IHsgZGF0ZUZyb206IHN0cmluZzsgZGF0ZVRvOiBzdHJpbmcgfSkge1xyXG4gICAgaWYgKHRoaXMudmFsICE9PSB2YWwpIHtcclxuICAgICAgdGhpcy52YWwgPSB2YWw7XHJcbiAgICAgIHRoaXMuZGF0ZUZyb20gPSB2YWwuZGF0ZUZyb207XHJcbiAgICAgIHRoaXMuZGF0ZVRvID0gdmFsLmRhdGVUbztcclxuICAgICAgdGhpcy5vbkNoYW5nZSh2YWwpO1xyXG4gICAgICB0aGlzLm9uVG91Y2godmFsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXHJcbiAgc2V0IGRhdGVGcm9tKHZhbDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5fZGF0ZUZyb20gIT09IHZhbCAmJiBpc1ZhbGlkKG5ldyBEYXRlKHZhbCkpKSB7XHJcbiAgICAgIHRoaXMuX2RhdGVGcm9tID0gdmFsO1xyXG4gICAgICB0aGlzLm1pbkRhdGVUbyA9IG5ldyBEYXRlKHZhbCk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuZGF0ZVRvKSB7XHJcbiAgICAgICAgdGhpcy5waWNrZXJUbz8ub3BlbigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLm9uQXBwbHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXHJcbiAgc2V0IGRhdGVUbyh2YWw6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuX2RhdGVUbyAhPT0gdmFsICYmIGlzVmFsaWQobmV3IERhdGUodmFsKSkpIHtcclxuICAgICAgdGhpcy5fZGF0ZVRvID0gdmFsO1xyXG4gICAgICB0aGlzLm1heERhdGVGcm9tID0gbmV3IERhdGUodmFsKTtcclxuICAgICAgdGhpcy5vbkFwcGx5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBlY2Fic0RhdGVQaWNrZXJIZWFkZXJTZXJ2aWNlOiBFY2Fic0RhdGVQaWNrZXJIZWFkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB1bnN1YnNjcmliZVNlcnZpY2U6IFVuc3Vic2NyaWJlU2VydmljZSxcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBjb25zdCB7bWluRGF0ZSwgbWF4RGF0ZX0gPSBjaGFuZ2VzO1xyXG5cclxuICAgIGlmIChtaW5EYXRlPy5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgdGhpcy5taW5EYXRlRnJvbSA9IG1pbkRhdGU/LmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy5taW5EYXRlVG8gPSBtaW5EYXRlPy5jdXJyZW50VmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1heERhdGU/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLm1heERhdGVGcm9tID0gbWF4RGF0ZT8uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLm1heERhdGVUbyA9IG1heERhdGU/LmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5lY2Fic0RhdGVQaWNrZXJIZWFkZXJTZXJ2aWNlXHJcbiAgICAgIC5nZXRDb25maWcoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZVNlcnZpY2Uuc3Vic2NyaXB0aW9uKCkpKVxyXG4gICAgICAuc3Vic2NyaWJlKChjb25maWcpID0+ICh0aGlzLnRyYW5zbGF0aW9uQ29uZmlnID0gY29uZmlnKSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaG9saWRheU9wdGlvbnM/LmNvdW50cnlDb2RlKSB7XHJcbiAgICAgIHRoaXMuaG9saWRheUluc3RhbmNlID0gbmV3IEhvbGlkYXlzKHRoaXMuaG9saWRheU9wdGlvbnMuY291bnRyeUNvZGUudG9VcHBlckNhc2UoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBuZ0NvbnRyb2w6IE5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCk7XHJcbiAgICBpZiAobmdDb250cm9sKSB7XHJcbiAgICAgIHRoaXMuY29udHJvbCA9IG5nQ29udHJvbC5jb250cm9sIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcclxuICAgICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlU2VydmljZS5zdWJzY3JpcHRpb24oKSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmRhdGVSYW5nZVZhbGlkYXRvcih0aGlzLmNvbnRyb2wpKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRlRnJvbSA9IHRoaXMudmFsdWUuZGF0ZUZyb207XHJcbiAgICAgICAgdGhpcy5kYXRlVG8gPSB0aGlzLnZhbHVlLmRhdGVUbztcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmVTZXJ2aWNlLmRlc3Ryb3koKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7XHJcbiAgfTtcclxuICBvblRvdWNoOiBhbnkgPSAoKSA9PiB7XHJcbiAgfTtcclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgYmx1ckNoYW5nZShlKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uYmx1ci5lbWl0KGUpO1xyXG4gIH1cclxuXHJcbiAgb25BcHBseSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5ld1ZhbHVlID0ge1xyXG4gICAgICBkYXRlRnJvbTogdGhpcy5kYXRlRnJvbSxcclxuICAgICAgZGF0ZVRvOiB0aGlzLmRhdGVUbyxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKCFsb2Rhc2hJc0VxdWFsKHRoaXMudmFsdWUsIG5ld1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnZhbCA9IG5ld1ZhbHVlO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKG5ld1ZhbHVlKTtcclxuICAgICAgdGhpcy5vblRvdWNoKG5ld1ZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnZhbHVlID0ge1xyXG4gICAgICBkYXRlRnJvbTogdGhpcy5kYXRlRnJvbSxcclxuICAgICAgZGF0ZVRvOiB0aGlzLmRhdGVUbyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJEYXRlUmFuZ2UgPSAoZGF0ZTogRGF0ZSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XHJcblxyXG4gICAgaWYgKGlzVmFsaWQobmV3IERhdGUoZGF0ZSkpKSB7XHJcbiAgICAgIGNvbnN0IGRheSA9IGRhdGU/LmdldERheSgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZXhjbHVkZVdlZWtlbmRzKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIGRheSAhPT0gMCAmJiBkYXkgIT09IDY7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmV4Y2x1ZGVIb2xpZGF5cykge1xyXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiB0aGlzLmlzRGF0ZU5vdEhvbGlkYXkoZGF0ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnNwZWNpZmljRGF0ZXM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBzcGVjaWZpY0RhdGVzID0gdGhpcy5zcGVjaWZpY0RhdGVzO1xyXG4gICAgICAgIGlmIChzcGVjaWZpY0RhdGVzICYmIHNwZWNpZmljRGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBzcGVjaWZpY0RhdGVzLmZpbmRJbmRleCgoc3BlY2lmaWNEYXRlKSA9PiBpc0VxdWFsKGRhdGUsIHNwZWNpZmljRGF0ZSkpO1xyXG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIGluZGV4ID09PSAtMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH07XHJcblxyXG4gIGlzRGF0ZU5vdEhvbGlkYXkoZGF0ZTogRGF0ZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qge2NvdW50cnlDb2RlLCB0aW1lWm9uZU9mZnNldH0gPSB0aGlzLmhvbGlkYXlPcHRpb25zID8/IHt9O1xyXG5cclxuICAgIGlmIChjb3VudHJ5Q29kZSAmJiB0aW1lWm9uZU9mZnNldCkge1xyXG4gICAgICByZXR1cm4gIXRoaXMuaG9saWRheUluc3RhbmNlPy5pc0hvbGlkYXkoYCR7Zm9ybWF0KGRhdGUsICd5eXl5LU1NLWRkJyl9VDAwOjAwOjAwJHt0aW1lWm9uZU9mZnNldH1gKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGRhdGVSYW5nZVZhbGlkYXRvcihjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpIHtcclxuICAgIGNvbnN0IHJlcXVpcmVkID0gY29udHJvbD8uaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cclxuICAgIGlmIChjb250cm9sLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHtkYXRlRnJvbSwgZGF0ZVRvfSA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG5cclxuICAgICAgaWYgKHJlcXVpcmVkICYmICghZGF0ZUZyb20gfHwgZGF0ZUZyb20/Lmxlbmd0aCA9PT0gMCkgJiYgKCFkYXRlVG8gfHwgZGF0ZVRvPy5sZW5ndGggPT09IDApKSB7XHJcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoe3JlcXVpcmVkOiB0cnVlfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWRhdGVGcm9tICYmIGRhdGVUbykge1xyXG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHtkYXRlRnJvbVJhbmdlUmVxdWlyZWQ6IHRydWV9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkYXRlRnJvbSAmJiAhZGF0ZVRvKSB7XHJcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoe2RhdGVUb1JhbmdlUmVxdWlyZWQ6IHRydWV9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChuZXcgRGF0ZShkYXRlRnJvbSkgPiBuZXcgRGF0ZShkYXRlVG8pKSB7XHJcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoe2RhdGVGcm9tTW9yZVRoYW5EYXRlVG86IHRydWV9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghY29udHJvbC5lcnJvcnMpIHtcclxuICAgICAgY29udHJvbC5zZXRFcnJvcnMocmVxdWlyZWQgPyB7cmVxdWlyZWQ6IHRydWV9IDogbnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxlY2Ficy1lbGVtZW50LXdyYXBwZXIgW2RhdGFdPVwiZ2V0RGF0YSgpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRfX3JhbmdlLS13cmFwcGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZF9fcmFuZ2VcIj5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgY2xhc3M9XCJib3JkZXItbm9uZSB3LWZ1bGxcIlxyXG4gICAgICAgIGlkPVwie3sgbmFtZSArICdkYXRlRnJvbScgfX1cIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwiZGF0ZUZyb21cIlxyXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJzdGFydERhdGVQbGFjZWhvbGRlciA/PyB0cmFuc2xhdGlvbkNvbmZpZz8uc3RhcnREYXRlUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgW21hdERhdGVwaWNrZXJdPVwicGlja2VyRnJvbVwiXHJcbiAgICAgICAgW21pbl09XCJtaW5EYXRlRnJvbVwiXHJcbiAgICAgICAgW21heF09XCJtYXhEYXRlRnJvbVwiXHJcbiAgICAgICAgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiZmlsdGVyRGF0ZVJhbmdlXCJcclxuICAgICAgICAoYmx1cik9XCJvblRvdWNoKClcIlxyXG4gICAgICAgIChjbGljayk9XCJwaWNrZXJGcm9tLm9wZW4oKVwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyRnJvbVxyXG4gICAgICAgICAgICAgICAgICAgICAgW3BhbmVsQ2xhc3NdPVwicGFuZWxDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2FsZW5kYXJIZWFkZXJDb21wb25lbnRdPVwiaGVhZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFt0b3VjaFVpXT1cInRvdWNoVWlcIj5cclxuICAgICAgPC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTQwMCBweC0zIHRleHQtc21cIj57eyBzZXBhcmF0b3JMYWJlbCB9fTwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkX19yYW5nZVwiPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBjbGFzcz1cImJvcmRlci1ub25lIHctZnVsbFwiXHJcbiAgICAgICAgaWQ9XCJ7eyBuYW1lICsgJ2RhdGVUbycgfX1cIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwiZGF0ZVRvXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZW5kRGF0ZVBsYWNlaG9sZGVyID8/IHRyYW5zbGF0aW9uQ29uZmlnPy5lbmREYXRlUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgW21hdERhdGVwaWNrZXJdPVwicGlja2VyVG9cIlxyXG4gICAgICAgIFttaW5dPVwibWluRGF0ZVRvXCJcclxuICAgICAgICBbbWF4XT1cIm1heERhdGVUb1wiXHJcbiAgICAgICAgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiZmlsdGVyRGF0ZVJhbmdlXCJcclxuICAgICAgICAoYmx1cik9XCJvblRvdWNoKClcIlxyXG4gICAgICAgIChjbGljayk9XCJwaWNrZXJUby5vcGVuKClcIlxyXG4gICAgICAvPlxyXG4gICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlclRvXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcGFuZWxDbGFzc109XCJwYW5lbENsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjYWxlbmRhckhlYWRlckNvbXBvbmVudF09XCJoZWFkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3RvdWNoVWldPVwidG91Y2hVaVwiPlxyXG4gICAgICA8L21hdC1kYXRlcGlja2VyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZWNhYnMtZWxlbWVudC13cmFwcGVyPlxyXG4iXX0=
@@ -0,0 +1,76 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import { MatDatepickerModule } from '@angular/material/datepicker';
5
+ import { MatIconModule } from '@angular/material/icon';
6
+ import { EcabsMaskDateDirectiveModule } from '../base/directives/date-mask.directive.module';
7
+ import { EcabsDigitsOnlyDirectivesModule } from '../base/directives/digits-only.directive.module';
8
+ import { EcabsNumberBorderDirectiveModule } from '../base/directives/number-border.directive.module';
9
+ import { ElementWrapperModule } from '../base/element-wrapper/element-wrapper.module';
10
+ import { EcabsButtonsModule } from '../ecabs-buttons/ecabs-buttons.module';
11
+ import { EcabsPickerHeaderModule } from '../ecabs-picker-header/ecabs-picker-header.module';
12
+ import { EcabsDateRangePickerHeaderComponentV2 } from './components/ecabs-date-range-picker-header/ecabs-date-range-picker-header-v2.component';
13
+ import { EcabsDateRangePickerComponentV2 } from './ecabs-date-range-picker-v2.component';
14
+ import { EcabsDatePickerActionsModule } from '../ecabs-date-picker-actions/ecabs-date-picker-actions.module';
15
+ import { MatButtonModule } from '@angular/material/button';
16
+ import { MatInputModule } from '@angular/material/input';
17
+ import * as i0 from "@angular/core";
18
+ export class EcabsDateRangeModuleV2 {
19
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDateRangeModuleV2, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
20
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: EcabsDateRangeModuleV2, declarations: [EcabsDateRangePickerComponentV2,
21
+ EcabsDateRangePickerHeaderComponentV2], imports: [CommonModule,
22
+ ElementWrapperModule,
23
+ MatIconModule,
24
+ MatDatepickerModule,
25
+ MatButtonModule,
26
+ FormsModule,
27
+ ReactiveFormsModule,
28
+ EcabsPickerHeaderModule,
29
+ EcabsButtonsModule,
30
+ EcabsDigitsOnlyDirectivesModule,
31
+ EcabsNumberBorderDirectiveModule,
32
+ EcabsMaskDateDirectiveModule,
33
+ MatInputModule,
34
+ EcabsDatePickerActionsModule], exports: [EcabsDateRangePickerComponentV2, EcabsDateRangePickerHeaderComponentV2] });
35
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDateRangeModuleV2, imports: [CommonModule,
36
+ ElementWrapperModule,
37
+ MatIconModule,
38
+ MatDatepickerModule,
39
+ MatButtonModule,
40
+ FormsModule,
41
+ ReactiveFormsModule,
42
+ EcabsPickerHeaderModule,
43
+ EcabsButtonsModule,
44
+ EcabsDigitsOnlyDirectivesModule,
45
+ EcabsNumberBorderDirectiveModule,
46
+ EcabsMaskDateDirectiveModule,
47
+ MatInputModule,
48
+ EcabsDatePickerActionsModule] });
49
+ }
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDateRangeModuleV2, decorators: [{
51
+ type: NgModule,
52
+ args: [{
53
+ declarations: [
54
+ EcabsDateRangePickerComponentV2,
55
+ EcabsDateRangePickerHeaderComponentV2,
56
+ ],
57
+ imports: [
58
+ CommonModule,
59
+ ElementWrapperModule,
60
+ MatIconModule,
61
+ MatDatepickerModule,
62
+ MatButtonModule,
63
+ FormsModule,
64
+ ReactiveFormsModule,
65
+ EcabsPickerHeaderModule,
66
+ EcabsButtonsModule,
67
+ EcabsDigitsOnlyDirectivesModule,
68
+ EcabsNumberBorderDirectiveModule,
69
+ EcabsMaskDateDirectiveModule,
70
+ MatInputModule,
71
+ EcabsDatePickerActionsModule,
72
+ ],
73
+ exports: [EcabsDateRangePickerComponentV2, EcabsDateRangePickerHeaderComponentV2],
74
+ }]
75
+ }] });
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItdjIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLXYyL2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLXYyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzdGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLHlGQUF5RixDQUFDO0FBQ2hKLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQzdHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBeUJ6RCxNQUFNLE9BQU8sc0JBQXNCO3dHQUF0QixzQkFBc0I7eUdBQXRCLHNCQUFzQixpQkFyQi9CLCtCQUErQjtZQUMvQixxQ0FBcUMsYUFHckMsWUFBWTtZQUNaLG9CQUFvQjtZQUNwQixhQUFhO1lBQ2IsbUJBQW1CO1lBQ25CLGVBQWU7WUFDZixXQUFXO1lBQ1gsbUJBQW1CO1lBQ25CLHVCQUF1QjtZQUN2QixrQkFBa0I7WUFDbEIsK0JBQStCO1lBQy9CLGdDQUFnQztZQUNoQyw0QkFBNEI7WUFDNUIsY0FBYztZQUNkLDRCQUE0QixhQUVwQiwrQkFBK0IsRUFBRSxxQ0FBcUM7eUdBRXJFLHNCQUFzQixZQWpCL0IsWUFBWTtZQUNaLG9CQUFvQjtZQUNwQixhQUFhO1lBQ2IsbUJBQW1CO1lBQ25CLGVBQWU7WUFDZixXQUFXO1lBQ1gsbUJBQW1CO1lBQ25CLHVCQUF1QjtZQUN2QixrQkFBa0I7WUFDbEIsK0JBQStCO1lBQy9CLGdDQUFnQztZQUNoQyw0QkFBNEI7WUFDNUIsY0FBYztZQUNkLDRCQUE0Qjs7NEZBSW5CLHNCQUFzQjtrQkF2QmxDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLCtCQUErQjt3QkFDL0IscUNBQXFDO3FCQUN0QztvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixvQkFBb0I7d0JBQ3BCLGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQix1QkFBdUI7d0JBQ3ZCLGtCQUFrQjt3QkFDbEIsK0JBQStCO3dCQUMvQixnQ0FBZ0M7d0JBQ2hDLDRCQUE0Qjt3QkFDNUIsY0FBYzt3QkFDZCw0QkFBNEI7cUJBQzdCO29CQUNELE9BQU8sRUFBRSxDQUFDLCtCQUErQixFQUFFLHFDQUFxQyxDQUFDO2lCQUNsRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgRWNhYnNNYXNrRGF0ZURpcmVjdGl2ZU1vZHVsZSB9IGZyb20gJy4uL2Jhc2UvZGlyZWN0aXZlcy9kYXRlLW1hc2suZGlyZWN0aXZlLm1vZHVsZSc7XHJcbmltcG9ydCB7IEVjYWJzRGlnaXRzT25seURpcmVjdGl2ZXNNb2R1bGUgfSBmcm9tICcuLi9iYXNlL2RpcmVjdGl2ZXMvZGlnaXRzLW9ubHkuZGlyZWN0aXZlLm1vZHVsZSc7XHJcbmltcG9ydCB7IEVjYWJzTnVtYmVyQm9yZGVyRGlyZWN0aXZlTW9kdWxlIH0gZnJvbSAnLi4vYmFzZS9kaXJlY3RpdmVzL251bWJlci1ib3JkZXIuZGlyZWN0aXZlLm1vZHVsZSc7XHJcbmltcG9ydCB7IEVsZW1lbnRXcmFwcGVyTW9kdWxlIH0gZnJvbSAnLi4vYmFzZS9lbGVtZW50LXdyYXBwZXIvZWxlbWVudC13cmFwcGVyLm1vZHVsZSc7XHJcbmltcG9ydCB7IEVjYWJzQnV0dG9uc01vZHVsZSB9IGZyb20gJy4uL2VjYWJzLWJ1dHRvbnMvZWNhYnMtYnV0dG9ucy5tb2R1bGUnO1xyXG5pbXBvcnQgeyBFY2Fic1BpY2tlckhlYWRlck1vZHVsZSB9IGZyb20gJy4uL2VjYWJzLXBpY2tlci1oZWFkZXIvZWNhYnMtcGlja2VyLWhlYWRlci5tb2R1bGUnO1xyXG5pbXBvcnQgeyBFY2Fic0RhdGVSYW5nZVBpY2tlckhlYWRlckNvbXBvbmVudFYyIH0gZnJvbSAnLi9jb21wb25lbnRzL2VjYWJzLWRhdGUtcmFuZ2UtcGlja2VyLWhlYWRlci9lY2Ficy1kYXRlLXJhbmdlLXBpY2tlci1oZWFkZXItdjIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRWNhYnNEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnRWMiB9IGZyb20gJy4vZWNhYnMtZGF0ZS1yYW5nZS1waWNrZXItdjIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRWNhYnNEYXRlUGlja2VyQWN0aW9uc01vZHVsZSB9IGZyb20gJy4uL2VjYWJzLWRhdGUtcGlja2VyLWFjdGlvbnMvZWNhYnMtZGF0ZS1waWNrZXItYWN0aW9ucy5tb2R1bGUnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBFY2Fic0RhdGVSYW5nZVBpY2tlckNvbXBvbmVudFYyLFxyXG4gICAgRWNhYnNEYXRlUmFuZ2VQaWNrZXJIZWFkZXJDb21wb25lbnRWMixcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEVsZW1lbnRXcmFwcGVyTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBFY2Fic1BpY2tlckhlYWRlck1vZHVsZSxcclxuICAgIEVjYWJzQnV0dG9uc01vZHVsZSxcclxuICAgIEVjYWJzRGlnaXRzT25seURpcmVjdGl2ZXNNb2R1bGUsXHJcbiAgICBFY2Fic051bWJlckJvcmRlckRpcmVjdGl2ZU1vZHVsZSxcclxuICAgIEVjYWJzTWFza0RhdGVEaXJlY3RpdmVNb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIEVjYWJzRGF0ZVBpY2tlckFjdGlvbnNNb2R1bGUsXHJcbiAgXSxcclxuICBleHBvcnRzOiBbRWNhYnNEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnRWMiwgRWNhYnNEYXRlUmFuZ2VQaWNrZXJIZWFkZXJDb21wb25lbnRWMl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFY2Fic0RhdGVSYW5nZU1vZHVsZVYyIHt9XHJcbiJdfQ==
@@ -48,11 +48,11 @@ export class EcabsDialogMessageComponent {
48
48
  }
49
49
  }
50
50
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDialogMessageComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
51
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsDialogMessageComponent, selector: "ecabs-dialog-message", ngImport: i0, template: "<div matDialogTitle *ngIf=\"data?.title || !!data?.isPopover\" class=\"flex flex-column\">\r\n <div *ngIf=\"!!data?.isPopover\" class=\"w-full flex justify-end\">\r\n <mat-icon\r\n (click)=\"dialogRef.close(false)\"\r\n class=\"mat-icon material-icons-outlined float-right icon--close mb-2\"\r\n role=\"button\"\r\n >\r\n close\r\n </mat-icon>\r\n </div>\r\n\r\n <div *ngIf=\"data.title\" class=\"font-semibold heading--xs\" [ngClass]=\"classByType\">\r\n {{ data.title }}\r\n </div>\r\n</div>\r\n\r\n<div mat-dialog-content>\r\n {{data?.message}}\r\n</div>\r\n\r\n<div class=\"pb-6\">\r\n <div mat-dialog-actions class=\"btn__group flex justify-end w-full\" *ngIf=\"!data?.isPopover\">\r\n <ecabs-buttons [color]=\"data?.color || color\" [full]=\"data?.isButtonBlock\" [loading]=\"data.loading$ | async\" (click)=\"closeDialog()\">\r\n {{ data?.confirmLabel }}\r\n </ecabs-buttons>\r\n </div>\r\n</div>\r\n", styles: [":root{--color-black: #020618;--color-white: #ffffff;--color-white-opacity-05: rgba(0, 0, 0, .05);--color-gray-50: #F8FAFC;--color-gray-100: #F1F5F9;--color-gray-200: #E2E8F0;--color-gray-300: #CAD5E2;--color-gray-400: #90A1B9;--color-gray-500: #62748E;--color-gray-600: #45556C;--color-gray-700: #314158;--color-gray-800: #1D293D;--color-gray-900: #0F172B;--color-gray-950: #020618;--color-brand-dark: #193273;--color-brand-dark-rgb: 25, 50, 115;--color-brand-light: #325FDA;--color-brand-light2: #e7efff;--color-brand-light-rgb: 50, 95, 218;--color-brand-300: #e7efff;--color-brand-300-rgb: 231, 239, 255;--color-error: #df3838;--color-error-opacity: #fbe4e4;--color-error-rgb: 223, 56, 56;--color-notification: #f4d04f;--color-notification-rgb: 244, 208, 79;--color-warn: #f2994a;--color-warn-rgb: 242, 153, 74;--color-info: #325fda;--color-info-rgb: 50, 95, 218;--color-warning: #f2994a;--color-warning-opacity: #fdf0e4;--color-success: #075145;--color-success--opacity: #affebf;--color-success-rgb: 7, 81, 69;--color-allocation-started: #E8F8E5;--color-allocation-scheduled: #FDF0E4;--color-allocation-ended: #FBE4E4;--color-allocation-sick: #E7EFFF;--color-allocation-no-show: #EAE5FF;--color-allocation-unavailable: #F2F2F2;--cropper-outline-color: rgba(0, 0, 0, .5);--color-slate-100: #f1f5f9;--color-slate-200: #e2e8f0;--color-slate-500: #64748b;--color-slate-900: #0f172a}:host .mat-mdc-dialog-title .mat-icon.icon--close,:host ::ng-deep .mat-mdc-dialog-title .mat-icon.icon--close{width:20px;height:20px;line-height:20px;font-size:20px}:host app-buttons,:host ::ng-deep app-buttons{width:calc(50% - .5rem)}:host button,:host ::ng-deep button{width:100%}.title--accent{color:var(--color-error)}.title--warn{color:var(--color-warn)}.title--success{color:var(--color-success)}.title--default{color:var(--color-info)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i3.ButtonsComponent, selector: "ecabs-buttons", inputs: ["disabled", "loading", "size", "type", "style", "full", "color"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
51
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsDialogMessageComponent, selector: "ecabs-dialog-message", ngImport: i0, template: "<div matDialogTitle *ngIf=\"data?.title || !!data?.isPopover\" class=\"flex flex-column\">\r\n <div *ngIf=\"!!data?.isPopover\" class=\"w-full flex justify-end\">\r\n <mat-icon\r\n (click)=\"dialogRef.close(false)\"\r\n class=\"mat-icon material-icons-outlined float-right icon--close mb-2\"\r\n role=\"button\"\r\n >\r\n close\r\n </mat-icon>\r\n </div>\r\n\r\n <div *ngIf=\"data.title\" class=\"font-semibold heading--xs\" [ngClass]=\"classByType\">\r\n {{ data.title }}\r\n </div>\r\n</div>\r\n\r\n<div mat-dialog-content>\r\n {{data?.message}}\r\n</div>\r\n\r\n<div class=\"pb-6\">\r\n <div mat-dialog-actions class=\"btn__group flex justify-end w-full\" *ngIf=\"!data?.isPopover\">\r\n <ecabs-buttons [color]=\"data?.color || color\" [full]=\"data?.isButtonBlock\" [loading]=\"data.loading$ | async\" (click)=\"closeDialog()\">\r\n {{ data?.confirmLabel }}\r\n </ecabs-buttons>\r\n </div>\r\n</div>\r\n", styles: [":root{--color-black: #020618;--color-white: #ffffff;--color-white-opacity-05: rgba(0, 0, 0, .05);--color-gray-50: #F8FAFC;--color-gray-100: #F1F5F9;--color-gray-200: #E2E8F0;--color-gray-300: #CAD5E2;--color-gray-400: #90A1B9;--color-gray-500: #62748E;--color-gray-600: #45556C;--color-gray-700: #314158;--color-gray-800: #1D293D;--color-gray-900: #0F172B;--color-gray-950: #020618;--color-brand-dark: #193273;--color-brand-dark-rgb: 25, 50, 115;--color-brand-light: #325FDA;--color-brand-light2: #e7efff;--color-brand-light-rgb: 50, 95, 218;--color-brand-300: #e7efff;--color-brand-300-rgb: 231, 239, 255;--color-error: #df3838;--color-error-opacity: #fbe4e4;--color-error-rgb: 223, 56, 56;--color-notification: #f4d04f;--color-notification-rgb: 244, 208, 79;--color-warn: #f2994a;--color-warn-rgb: 242, 153, 74;--color-info: #325fda;--color-info-rgb: 50, 95, 218;--color-warning: #f2994a;--color-warning-opacity: #fdf0e4;--color-success: #075145;--color-success--opacity: #affebf;--color-success-rgb: 7, 81, 69;--color-allocation-started: #E8F8E5;--color-allocation-scheduled: #FDF0E4;--color-allocation-ended: #FBE4E4;--color-allocation-sick: #E7EFFF;--color-allocation-no-show: #EAE5FF;--color-allocation-unavailable: #F2F2F2;--cropper-outline-color: rgba(0, 0, 0, .5);--mat-option-label-text-color: var(--color-gray-900);--mat-option-focus-state-layer-color: var(--color-gray-100);--mat-option-hover-state-layer-color: var(--color-gray-50);--mat-option-label-text-size: 14px}:host .mat-mdc-dialog-title .mat-icon.icon--close,:host ::ng-deep .mat-mdc-dialog-title .mat-icon.icon--close{width:20px;height:20px;line-height:20px;font-size:20px}:host app-buttons,:host ::ng-deep app-buttons{width:calc(50% - .5rem)}:host button,:host ::ng-deep button{width:100%}.title--accent{color:var(--color-error)}.title--warn{color:var(--color-warn)}.title--success{color:var(--color-success)}.title--default{color:var(--color-info)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i3.ButtonsComponent, selector: "ecabs-buttons", inputs: ["disabled", "loading", "size", "type", "style", "full", "color"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
52
52
  }
53
53
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsDialogMessageComponent, decorators: [{
54
54
  type: Component,
55
- args: [{ selector: 'ecabs-dialog-message', template: "<div matDialogTitle *ngIf=\"data?.title || !!data?.isPopover\" class=\"flex flex-column\">\r\n <div *ngIf=\"!!data?.isPopover\" class=\"w-full flex justify-end\">\r\n <mat-icon\r\n (click)=\"dialogRef.close(false)\"\r\n class=\"mat-icon material-icons-outlined float-right icon--close mb-2\"\r\n role=\"button\"\r\n >\r\n close\r\n </mat-icon>\r\n </div>\r\n\r\n <div *ngIf=\"data.title\" class=\"font-semibold heading--xs\" [ngClass]=\"classByType\">\r\n {{ data.title }}\r\n </div>\r\n</div>\r\n\r\n<div mat-dialog-content>\r\n {{data?.message}}\r\n</div>\r\n\r\n<div class=\"pb-6\">\r\n <div mat-dialog-actions class=\"btn__group flex justify-end w-full\" *ngIf=\"!data?.isPopover\">\r\n <ecabs-buttons [color]=\"data?.color || color\" [full]=\"data?.isButtonBlock\" [loading]=\"data.loading$ | async\" (click)=\"closeDialog()\">\r\n {{ data?.confirmLabel }}\r\n </ecabs-buttons>\r\n </div>\r\n</div>\r\n", styles: [":root{--color-black: #020618;--color-white: #ffffff;--color-white-opacity-05: rgba(0, 0, 0, .05);--color-gray-50: #F8FAFC;--color-gray-100: #F1F5F9;--color-gray-200: #E2E8F0;--color-gray-300: #CAD5E2;--color-gray-400: #90A1B9;--color-gray-500: #62748E;--color-gray-600: #45556C;--color-gray-700: #314158;--color-gray-800: #1D293D;--color-gray-900: #0F172B;--color-gray-950: #020618;--color-brand-dark: #193273;--color-brand-dark-rgb: 25, 50, 115;--color-brand-light: #325FDA;--color-brand-light2: #e7efff;--color-brand-light-rgb: 50, 95, 218;--color-brand-300: #e7efff;--color-brand-300-rgb: 231, 239, 255;--color-error: #df3838;--color-error-opacity: #fbe4e4;--color-error-rgb: 223, 56, 56;--color-notification: #f4d04f;--color-notification-rgb: 244, 208, 79;--color-warn: #f2994a;--color-warn-rgb: 242, 153, 74;--color-info: #325fda;--color-info-rgb: 50, 95, 218;--color-warning: #f2994a;--color-warning-opacity: #fdf0e4;--color-success: #075145;--color-success--opacity: #affebf;--color-success-rgb: 7, 81, 69;--color-allocation-started: #E8F8E5;--color-allocation-scheduled: #FDF0E4;--color-allocation-ended: #FBE4E4;--color-allocation-sick: #E7EFFF;--color-allocation-no-show: #EAE5FF;--color-allocation-unavailable: #F2F2F2;--cropper-outline-color: rgba(0, 0, 0, .5);--color-slate-100: #f1f5f9;--color-slate-200: #e2e8f0;--color-slate-500: #64748b;--color-slate-900: #0f172a}:host .mat-mdc-dialog-title .mat-icon.icon--close,:host ::ng-deep .mat-mdc-dialog-title .mat-icon.icon--close{width:20px;height:20px;line-height:20px;font-size:20px}:host app-buttons,:host ::ng-deep app-buttons{width:calc(50% - .5rem)}:host button,:host ::ng-deep button{width:100%}.title--accent{color:var(--color-error)}.title--warn{color:var(--color-warn)}.title--success{color:var(--color-success)}.title--default{color:var(--color-info)}\n"] }]
55
+ args: [{ selector: 'ecabs-dialog-message', template: "<div matDialogTitle *ngIf=\"data?.title || !!data?.isPopover\" class=\"flex flex-column\">\r\n <div *ngIf=\"!!data?.isPopover\" class=\"w-full flex justify-end\">\r\n <mat-icon\r\n (click)=\"dialogRef.close(false)\"\r\n class=\"mat-icon material-icons-outlined float-right icon--close mb-2\"\r\n role=\"button\"\r\n >\r\n close\r\n </mat-icon>\r\n </div>\r\n\r\n <div *ngIf=\"data.title\" class=\"font-semibold heading--xs\" [ngClass]=\"classByType\">\r\n {{ data.title }}\r\n </div>\r\n</div>\r\n\r\n<div mat-dialog-content>\r\n {{data?.message}}\r\n</div>\r\n\r\n<div class=\"pb-6\">\r\n <div mat-dialog-actions class=\"btn__group flex justify-end w-full\" *ngIf=\"!data?.isPopover\">\r\n <ecabs-buttons [color]=\"data?.color || color\" [full]=\"data?.isButtonBlock\" [loading]=\"data.loading$ | async\" (click)=\"closeDialog()\">\r\n {{ data?.confirmLabel }}\r\n </ecabs-buttons>\r\n </div>\r\n</div>\r\n", styles: [":root{--color-black: #020618;--color-white: #ffffff;--color-white-opacity-05: rgba(0, 0, 0, .05);--color-gray-50: #F8FAFC;--color-gray-100: #F1F5F9;--color-gray-200: #E2E8F0;--color-gray-300: #CAD5E2;--color-gray-400: #90A1B9;--color-gray-500: #62748E;--color-gray-600: #45556C;--color-gray-700: #314158;--color-gray-800: #1D293D;--color-gray-900: #0F172B;--color-gray-950: #020618;--color-brand-dark: #193273;--color-brand-dark-rgb: 25, 50, 115;--color-brand-light: #325FDA;--color-brand-light2: #e7efff;--color-brand-light-rgb: 50, 95, 218;--color-brand-300: #e7efff;--color-brand-300-rgb: 231, 239, 255;--color-error: #df3838;--color-error-opacity: #fbe4e4;--color-error-rgb: 223, 56, 56;--color-notification: #f4d04f;--color-notification-rgb: 244, 208, 79;--color-warn: #f2994a;--color-warn-rgb: 242, 153, 74;--color-info: #325fda;--color-info-rgb: 50, 95, 218;--color-warning: #f2994a;--color-warning-opacity: #fdf0e4;--color-success: #075145;--color-success--opacity: #affebf;--color-success-rgb: 7, 81, 69;--color-allocation-started: #E8F8E5;--color-allocation-scheduled: #FDF0E4;--color-allocation-ended: #FBE4E4;--color-allocation-sick: #E7EFFF;--color-allocation-no-show: #EAE5FF;--color-allocation-unavailable: #F2F2F2;--cropper-outline-color: rgba(0, 0, 0, .5);--mat-option-label-text-color: var(--color-gray-900);--mat-option-focus-state-layer-color: var(--color-gray-100);--mat-option-hover-state-layer-color: var(--color-gray-50);--mat-option-label-text-size: 14px}:host .mat-mdc-dialog-title .mat-icon.icon--close,:host ::ng-deep .mat-mdc-dialog-title .mat-icon.icon--close{width:20px;height:20px;line-height:20px;font-size:20px}:host app-buttons,:host ::ng-deep app-buttons{width:calc(50% - .5rem)}:host button,:host ::ng-deep button{width:100%}.title--accent{color:var(--color-error)}.title--warn{color:var(--color-warn)}.title--success{color:var(--color-success)}.title--default{color:var(--color-info)}\n"] }]
56
56
  }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
57
57
  type: Inject,
58
58
  args: [MAT_DIALOG_DATA]
@@ -60,7 +60,7 @@ export class EcabsIncrementComponent extends EcabsElementBaseComponent {
60
60
  useExisting: EcabsIncrementComponent,
61
61
  multi: true,
62
62
  },
63
- ], usesInheritance: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper\">\r\n <input ecabsDigitsOnly [digitsOnly]=\"digitsOnly\" [decimal]=\"allowDecimal\" [allowHyphen]=\"allowHyphen\"\r\n class=\"form-field__input\"\r\n [type]=\"type\"\r\n [id]=\"name\"\r\n [(ngModel)]=\"value\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouch()\"\r\n [disabled]=\"disabled\"\r\n [maxlength]=\"maxLength\"/>\r\n\r\n <div class=\"incrementor\">\r\n <mat-icon (click)=\"increment()\">add</mat-icon>\r\n <mat-icon (click)=\"decrement()\">remove</mat-icon>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n", styles: [":root{--color-black: #020618;--color-white: #ffffff;--color-white-opacity-05: rgba(0, 0, 0, .05);--color-gray-50: #F8FAFC;--color-gray-100: #F1F5F9;--color-gray-200: #E2E8F0;--color-gray-300: #CAD5E2;--color-gray-400: #90A1B9;--color-gray-500: #62748E;--color-gray-600: #45556C;--color-gray-700: #314158;--color-gray-800: #1D293D;--color-gray-900: #0F172B;--color-gray-950: #020618;--color-brand-dark: #193273;--color-brand-dark-rgb: 25, 50, 115;--color-brand-light: #325FDA;--color-brand-light2: #e7efff;--color-brand-light-rgb: 50, 95, 218;--color-brand-300: #e7efff;--color-brand-300-rgb: 231, 239, 255;--color-error: #df3838;--color-error-opacity: #fbe4e4;--color-error-rgb: 223, 56, 56;--color-notification: #f4d04f;--color-notification-rgb: 244, 208, 79;--color-warn: #f2994a;--color-warn-rgb: 242, 153, 74;--color-info: #325fda;--color-info-rgb: 50, 95, 218;--color-warning: #f2994a;--color-warning-opacity: #fdf0e4;--color-success: #075145;--color-success--opacity: #affebf;--color-success-rgb: 7, 81, 69;--color-allocation-started: #E8F8E5;--color-allocation-scheduled: #FDF0E4;--color-allocation-ended: #FBE4E4;--color-allocation-sick: #E7EFFF;--color-allocation-no-show: #EAE5FF;--color-allocation-unavailable: #F2F2F2;--cropper-outline-color: rgba(0, 0, 0, .5);--color-slate-100: #f1f5f9;--color-slate-200: #e2e8f0;--color-slate-500: #64748b;--color-slate-900: #0f172a}:host::ng-deep .incrementor{border-left:1px solid var(--color-gray-300);position:absolute;display:flex;flex-direction:column;top:1px;bottom:1px;right:1px}:host::ng-deep .incrementor .mat-icon{font-size:20px;font-size:1.25rem;margin-right:0;line-height:20px;cursor:pointer;text-align:center;flex:1}:host::ng-deep .incrementor .mat-icon:first-of-type{border-bottom:1px solid var(--color-gray-300)}:host::ng-deep .incrementor .mat-icon:hover{color:var(--color-brand-dark)}:host::ng-deep .form-field>div{line-height:1}\n"], dependencies: [{ kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2.EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.EcabsDigitsOnlyDirective, selector: "[ecabsDigitsOnly]", inputs: ["digitsOnly", "allowHyphen", "decimal", "decimalSeparator", "unit"] }] });
63
+ ], usesInheritance: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper\">\r\n <input ecabsDigitsOnly [digitsOnly]=\"digitsOnly\" [decimal]=\"allowDecimal\" [allowHyphen]=\"allowHyphen\"\r\n class=\"form-field__input\"\r\n [type]=\"type\"\r\n [id]=\"name\"\r\n [(ngModel)]=\"value\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouch()\"\r\n [disabled]=\"disabled\"\r\n [maxlength]=\"maxLength\"/>\r\n\r\n <div class=\"incrementor\">\r\n <mat-icon (click)=\"increment()\">add</mat-icon>\r\n <mat-icon (click)=\"decrement()\">remove</mat-icon>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n", styles: [":root{--color-black: #020618;--color-white: #ffffff;--color-white-opacity-05: rgba(0, 0, 0, .05);--color-gray-50: #F8FAFC;--color-gray-100: #F1F5F9;--color-gray-200: #E2E8F0;--color-gray-300: #CAD5E2;--color-gray-400: #90A1B9;--color-gray-500: #62748E;--color-gray-600: #45556C;--color-gray-700: #314158;--color-gray-800: #1D293D;--color-gray-900: #0F172B;--color-gray-950: #020618;--color-brand-dark: #193273;--color-brand-dark-rgb: 25, 50, 115;--color-brand-light: #325FDA;--color-brand-light2: #e7efff;--color-brand-light-rgb: 50, 95, 218;--color-brand-300: #e7efff;--color-brand-300-rgb: 231, 239, 255;--color-error: #df3838;--color-error-opacity: #fbe4e4;--color-error-rgb: 223, 56, 56;--color-notification: #f4d04f;--color-notification-rgb: 244, 208, 79;--color-warn: #f2994a;--color-warn-rgb: 242, 153, 74;--color-info: #325fda;--color-info-rgb: 50, 95, 218;--color-warning: #f2994a;--color-warning-opacity: #fdf0e4;--color-success: #075145;--color-success--opacity: #affebf;--color-success-rgb: 7, 81, 69;--color-allocation-started: #E8F8E5;--color-allocation-scheduled: #FDF0E4;--color-allocation-ended: #FBE4E4;--color-allocation-sick: #E7EFFF;--color-allocation-no-show: #EAE5FF;--color-allocation-unavailable: #F2F2F2;--cropper-outline-color: rgba(0, 0, 0, .5);--mat-option-label-text-color: var(--color-gray-900);--mat-option-focus-state-layer-color: var(--color-gray-100);--mat-option-hover-state-layer-color: var(--color-gray-50);--mat-option-label-text-size: 14px}:host::ng-deep .incrementor{border-left:1px solid var(--color-gray-300);position:absolute;display:flex;flex-direction:column;top:1px;bottom:1px;right:1px}:host::ng-deep .incrementor .mat-icon{font-size:20px;font-size:1.25rem;margin-right:0;line-height:20px;cursor:pointer;text-align:center;flex:1}:host::ng-deep .incrementor .mat-icon:first-of-type{border-bottom:1px solid var(--color-gray-300)}:host::ng-deep .incrementor .mat-icon:hover{color:var(--color-brand-dark)}:host::ng-deep .form-field>div{line-height:1}\n"], dependencies: [{ kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2.EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.EcabsDigitsOnlyDirective, selector: "[ecabsDigitsOnly]", inputs: ["digitsOnly", "allowHyphen", "decimal", "decimalSeparator", "unit"] }] });
64
64
  }
65
65
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsIncrementComponent, decorators: [{
66
66
  type: Component,
@@ -70,7 +70,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
70
70
  useExisting: EcabsIncrementComponent,
71
71
  multi: true,
72
72
  },
73
- ], template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper\">\r\n <input ecabsDigitsOnly [digitsOnly]=\"digitsOnly\" [decimal]=\"allowDecimal\" [allowHyphen]=\"allowHyphen\"\r\n class=\"form-field__input\"\r\n [type]=\"type\"\r\n [id]=\"name\"\r\n [(ngModel)]=\"value\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouch()\"\r\n [disabled]=\"disabled\"\r\n [maxlength]=\"maxLength\"/>\r\n\r\n <div class=\"incrementor\">\r\n <mat-icon (click)=\"increment()\">add</mat-icon>\r\n <mat-icon (click)=\"decrement()\">remove</mat-icon>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n", styles: [":root{--color-black: #020618;--color-white: #ffffff;--color-white-opacity-05: rgba(0, 0, 0, .05);--color-gray-50: #F8FAFC;--color-gray-100: #F1F5F9;--color-gray-200: #E2E8F0;--color-gray-300: #CAD5E2;--color-gray-400: #90A1B9;--color-gray-500: #62748E;--color-gray-600: #45556C;--color-gray-700: #314158;--color-gray-800: #1D293D;--color-gray-900: #0F172B;--color-gray-950: #020618;--color-brand-dark: #193273;--color-brand-dark-rgb: 25, 50, 115;--color-brand-light: #325FDA;--color-brand-light2: #e7efff;--color-brand-light-rgb: 50, 95, 218;--color-brand-300: #e7efff;--color-brand-300-rgb: 231, 239, 255;--color-error: #df3838;--color-error-opacity: #fbe4e4;--color-error-rgb: 223, 56, 56;--color-notification: #f4d04f;--color-notification-rgb: 244, 208, 79;--color-warn: #f2994a;--color-warn-rgb: 242, 153, 74;--color-info: #325fda;--color-info-rgb: 50, 95, 218;--color-warning: #f2994a;--color-warning-opacity: #fdf0e4;--color-success: #075145;--color-success--opacity: #affebf;--color-success-rgb: 7, 81, 69;--color-allocation-started: #E8F8E5;--color-allocation-scheduled: #FDF0E4;--color-allocation-ended: #FBE4E4;--color-allocation-sick: #E7EFFF;--color-allocation-no-show: #EAE5FF;--color-allocation-unavailable: #F2F2F2;--cropper-outline-color: rgba(0, 0, 0, .5);--color-slate-100: #f1f5f9;--color-slate-200: #e2e8f0;--color-slate-500: #64748b;--color-slate-900: #0f172a}:host::ng-deep .incrementor{border-left:1px solid var(--color-gray-300);position:absolute;display:flex;flex-direction:column;top:1px;bottom:1px;right:1px}:host::ng-deep .incrementor .mat-icon{font-size:20px;font-size:1.25rem;margin-right:0;line-height:20px;cursor:pointer;text-align:center;flex:1}:host::ng-deep .incrementor .mat-icon:first-of-type{border-bottom:1px solid var(--color-gray-300)}:host::ng-deep .incrementor .mat-icon:hover{color:var(--color-brand-dark)}:host::ng-deep .form-field>div{line-height:1}\n"] }]
73
+ ], template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper\">\r\n <input ecabsDigitsOnly [digitsOnly]=\"digitsOnly\" [decimal]=\"allowDecimal\" [allowHyphen]=\"allowHyphen\"\r\n class=\"form-field__input\"\r\n [type]=\"type\"\r\n [id]=\"name\"\r\n [(ngModel)]=\"value\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"onTouch()\"\r\n [disabled]=\"disabled\"\r\n [maxlength]=\"maxLength\"/>\r\n\r\n <div class=\"incrementor\">\r\n <mat-icon (click)=\"increment()\">add</mat-icon>\r\n <mat-icon (click)=\"decrement()\">remove</mat-icon>\r\n </div>\r\n </div>\r\n</ecabs-element-wrapper>\r\n", styles: [":root{--color-black: #020618;--color-white: #ffffff;--color-white-opacity-05: rgba(0, 0, 0, .05);--color-gray-50: #F8FAFC;--color-gray-100: #F1F5F9;--color-gray-200: #E2E8F0;--color-gray-300: #CAD5E2;--color-gray-400: #90A1B9;--color-gray-500: #62748E;--color-gray-600: #45556C;--color-gray-700: #314158;--color-gray-800: #1D293D;--color-gray-900: #0F172B;--color-gray-950: #020618;--color-brand-dark: #193273;--color-brand-dark-rgb: 25, 50, 115;--color-brand-light: #325FDA;--color-brand-light2: #e7efff;--color-brand-light-rgb: 50, 95, 218;--color-brand-300: #e7efff;--color-brand-300-rgb: 231, 239, 255;--color-error: #df3838;--color-error-opacity: #fbe4e4;--color-error-rgb: 223, 56, 56;--color-notification: #f4d04f;--color-notification-rgb: 244, 208, 79;--color-warn: #f2994a;--color-warn-rgb: 242, 153, 74;--color-info: #325fda;--color-info-rgb: 50, 95, 218;--color-warning: #f2994a;--color-warning-opacity: #fdf0e4;--color-success: #075145;--color-success--opacity: #affebf;--color-success-rgb: 7, 81, 69;--color-allocation-started: #E8F8E5;--color-allocation-scheduled: #FDF0E4;--color-allocation-ended: #FBE4E4;--color-allocation-sick: #E7EFFF;--color-allocation-no-show: #EAE5FF;--color-allocation-unavailable: #F2F2F2;--cropper-outline-color: rgba(0, 0, 0, .5);--mat-option-label-text-color: var(--color-gray-900);--mat-option-focus-state-layer-color: var(--color-gray-100);--mat-option-hover-state-layer-color: var(--color-gray-50);--mat-option-label-text-size: 14px}:host::ng-deep .incrementor{border-left:1px solid var(--color-gray-300);position:absolute;display:flex;flex-direction:column;top:1px;bottom:1px;right:1px}:host::ng-deep .incrementor .mat-icon{font-size:20px;font-size:1.25rem;margin-right:0;line-height:20px;cursor:pointer;text-align:center;flex:1}:host::ng-deep .incrementor .mat-icon:first-of-type{border-bottom:1px solid var(--color-gray-300)}:host::ng-deep .incrementor .mat-icon:hover{color:var(--color-brand-dark)}:host::ng-deep .form-field>div{line-height:1}\n"] }]
74
74
  }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { digitsOnly: [{
75
75
  type: Input
76
76
  }], allowDecimal: [{
@@ -43,11 +43,11 @@ export class EcabsLanguageSelectorComponent {
43
43
  return lang.of(code);
44
44
  }
45
45
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsLanguageSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
46
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsLanguageSelectorComponent, selector: "ecabs-language-selector", inputs: { languages: "languages", currentLanguage: "currentLanguage", showLabelTitle: "showLabelTitle", flagOnly: "flagOnly", tooltip: "tooltip" }, outputs: { languageChanged: "languageChanged" }, usesOnChanges: true, ngImport: i0, template: "<mat-form-field appearance=\"outline\"\r\n [ngClass]=\"{'flag-only': flagOnly}\">\r\n <mat-label></mat-label>\r\n <mat-select class=\"capitalize\"\r\n [(ngModel)]=\"selectedLang\"\r\n name=\"language\"\r\n (ngModelChange)=\"toggleLang()\"\r\n panelClass=\"wide-select\">\r\n <mat-select-trigger>\r\n <div class=\"flex items-center\" [matTooltip]=\"tooltip\">\r\n <span [ngClass]=\"flagClass(matchSelected())\"></span>\r\n <div *ngIf=\"!flagOnly\" class=\"ml-2\">{{ standardLang(matchSelected()) }}</div>\r\n </div>\r\n </mat-select-trigger>\r\n <mat-option class=\"capitalize\" *ngFor=\"let lang of languages\" [value]=\"lang\">\r\n <div class=\"flex items-center\">\r\n <span [ngClass]=\"flagClass(lang)\"></span>\r\n <div class=\"ml-2\">{{ standardLang(lang) }}</div>\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n</mat-form-field>\r\n", styles: [":root{--color-black: #020618;--color-white: #ffffff;--color-white-opacity-05: rgba(0, 0, 0, .05);--color-gray-50: #F8FAFC;--color-gray-100: #F1F5F9;--color-gray-200: #E2E8F0;--color-gray-300: #CAD5E2;--color-gray-400: #90A1B9;--color-gray-500: #62748E;--color-gray-600: #45556C;--color-gray-700: #314158;--color-gray-800: #1D293D;--color-gray-900: #0F172B;--color-gray-950: #020618;--color-brand-dark: #193273;--color-brand-dark-rgb: 25, 50, 115;--color-brand-light: #325FDA;--color-brand-light2: #e7efff;--color-brand-light-rgb: 50, 95, 218;--color-brand-300: #e7efff;--color-brand-300-rgb: 231, 239, 255;--color-error: #df3838;--color-error-opacity: #fbe4e4;--color-error-rgb: 223, 56, 56;--color-notification: #f4d04f;--color-notification-rgb: 244, 208, 79;--color-warn: #f2994a;--color-warn-rgb: 242, 153, 74;--color-info: #325fda;--color-info-rgb: 50, 95, 218;--color-warning: #f2994a;--color-warning-opacity: #fdf0e4;--color-success: #075145;--color-success--opacity: #affebf;--color-success-rgb: 7, 81, 69;--color-allocation-started: #E8F8E5;--color-allocation-scheduled: #FDF0E4;--color-allocation-ended: #FBE4E4;--color-allocation-sick: #E7EFFF;--color-allocation-no-show: #EAE5FF;--color-allocation-unavailable: #F2F2F2;--cropper-outline-color: rgba(0, 0, 0, .5);--color-slate-100: #f1f5f9;--color-slate-200: #e2e8f0;--color-slate-500: #64748b;--color-slate-900: #0f172a}:host::ng-deep .mat-mdc-select{padding:0;border:0}:host::ng-deep .mat-mdc-select .mat-mdc-select-arrow-wrapper{display:none}:host::ng-deep .mat-mdc-select,:host::ng-deep .mat-mdc-select .mdc-list-item{font-size:12px;font-size:.75rem}:host::ng-deep .mat-mdc-select-panel .mat-mdc-option.mdc-list-item{font-size:12px;font-size:.75rem}:host::ng-deep .mat-mdc-form-field{width:auto}:host::ng-deep .flag-only .mat-mdc-select .mat-mdc-select-arrow-wrapper{width:0}:host::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mdc-notched-outline__leading,:host::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mdc-notched-outline__notch,:host::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mdc-notched-outline__trailing{border:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i3.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
46
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsLanguageSelectorComponent, selector: "ecabs-language-selector", inputs: { languages: "languages", currentLanguage: "currentLanguage", showLabelTitle: "showLabelTitle", flagOnly: "flagOnly", tooltip: "tooltip" }, outputs: { languageChanged: "languageChanged" }, usesOnChanges: true, ngImport: i0, template: "<mat-form-field appearance=\"outline\"\r\n [ngClass]=\"{'flag-only': flagOnly}\">\r\n <mat-label></mat-label>\r\n <mat-select class=\"capitalize\"\r\n [(ngModel)]=\"selectedLang\"\r\n name=\"language\"\r\n (ngModelChange)=\"toggleLang()\"\r\n panelClass=\"wide-select\">\r\n <mat-select-trigger>\r\n <div class=\"flex items-center\" [matTooltip]=\"tooltip\">\r\n <span [ngClass]=\"flagClass(matchSelected())\"></span>\r\n <div *ngIf=\"!flagOnly\" class=\"ml-2\">{{ standardLang(matchSelected()) }}</div>\r\n </div>\r\n </mat-select-trigger>\r\n <mat-option class=\"capitalize\" *ngFor=\"let lang of languages\" [value]=\"lang\">\r\n <div class=\"flex items-center\">\r\n <span [ngClass]=\"flagClass(lang)\"></span>\r\n <div class=\"ml-2\">{{ standardLang(lang) }}</div>\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n</mat-form-field>\r\n", styles: [":root{--color-black: #020618;--color-white: #ffffff;--color-white-opacity-05: rgba(0, 0, 0, .05);--color-gray-50: #F8FAFC;--color-gray-100: #F1F5F9;--color-gray-200: #E2E8F0;--color-gray-300: #CAD5E2;--color-gray-400: #90A1B9;--color-gray-500: #62748E;--color-gray-600: #45556C;--color-gray-700: #314158;--color-gray-800: #1D293D;--color-gray-900: #0F172B;--color-gray-950: #020618;--color-brand-dark: #193273;--color-brand-dark-rgb: 25, 50, 115;--color-brand-light: #325FDA;--color-brand-light2: #e7efff;--color-brand-light-rgb: 50, 95, 218;--color-brand-300: #e7efff;--color-brand-300-rgb: 231, 239, 255;--color-error: #df3838;--color-error-opacity: #fbe4e4;--color-error-rgb: 223, 56, 56;--color-notification: #f4d04f;--color-notification-rgb: 244, 208, 79;--color-warn: #f2994a;--color-warn-rgb: 242, 153, 74;--color-info: #325fda;--color-info-rgb: 50, 95, 218;--color-warning: #f2994a;--color-warning-opacity: #fdf0e4;--color-success: #075145;--color-success--opacity: #affebf;--color-success-rgb: 7, 81, 69;--color-allocation-started: #E8F8E5;--color-allocation-scheduled: #FDF0E4;--color-allocation-ended: #FBE4E4;--color-allocation-sick: #E7EFFF;--color-allocation-no-show: #EAE5FF;--color-allocation-unavailable: #F2F2F2;--cropper-outline-color: rgba(0, 0, 0, .5);--mat-option-label-text-color: var(--color-gray-900);--mat-option-focus-state-layer-color: var(--color-gray-100);--mat-option-hover-state-layer-color: var(--color-gray-50);--mat-option-label-text-size: 14px}:host::ng-deep .mat-mdc-select{padding:0;border:0}:host::ng-deep .mat-mdc-select .mat-mdc-select-arrow-wrapper{display:none}:host::ng-deep .mat-mdc-select,:host::ng-deep .mat-mdc-select .mdc-list-item{font-size:12px;font-size:.75rem}:host::ng-deep .mat-mdc-select-panel .mat-mdc-option.mdc-list-item{font-size:12px;font-size:.75rem}:host::ng-deep .mat-mdc-form-field{width:auto}:host::ng-deep .flag-only .mat-mdc-select .mat-mdc-select-arrow-wrapper{width:0}:host::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mdc-notched-outline__leading,:host::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mdc-notched-outline__notch,:host::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mdc-notched-outline__trailing{border:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i3.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
47
47
  }
48
48
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsLanguageSelectorComponent, decorators: [{
49
49
  type: Component,
50
- args: [{ selector: 'ecabs-language-selector', template: "<mat-form-field appearance=\"outline\"\r\n [ngClass]=\"{'flag-only': flagOnly}\">\r\n <mat-label></mat-label>\r\n <mat-select class=\"capitalize\"\r\n [(ngModel)]=\"selectedLang\"\r\n name=\"language\"\r\n (ngModelChange)=\"toggleLang()\"\r\n panelClass=\"wide-select\">\r\n <mat-select-trigger>\r\n <div class=\"flex items-center\" [matTooltip]=\"tooltip\">\r\n <span [ngClass]=\"flagClass(matchSelected())\"></span>\r\n <div *ngIf=\"!flagOnly\" class=\"ml-2\">{{ standardLang(matchSelected()) }}</div>\r\n </div>\r\n </mat-select-trigger>\r\n <mat-option class=\"capitalize\" *ngFor=\"let lang of languages\" [value]=\"lang\">\r\n <div class=\"flex items-center\">\r\n <span [ngClass]=\"flagClass(lang)\"></span>\r\n <div class=\"ml-2\">{{ standardLang(lang) }}</div>\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n</mat-form-field>\r\n", styles: [":root{--color-black: #020618;--color-white: #ffffff;--color-white-opacity-05: rgba(0, 0, 0, .05);--color-gray-50: #F8FAFC;--color-gray-100: #F1F5F9;--color-gray-200: #E2E8F0;--color-gray-300: #CAD5E2;--color-gray-400: #90A1B9;--color-gray-500: #62748E;--color-gray-600: #45556C;--color-gray-700: #314158;--color-gray-800: #1D293D;--color-gray-900: #0F172B;--color-gray-950: #020618;--color-brand-dark: #193273;--color-brand-dark-rgb: 25, 50, 115;--color-brand-light: #325FDA;--color-brand-light2: #e7efff;--color-brand-light-rgb: 50, 95, 218;--color-brand-300: #e7efff;--color-brand-300-rgb: 231, 239, 255;--color-error: #df3838;--color-error-opacity: #fbe4e4;--color-error-rgb: 223, 56, 56;--color-notification: #f4d04f;--color-notification-rgb: 244, 208, 79;--color-warn: #f2994a;--color-warn-rgb: 242, 153, 74;--color-info: #325fda;--color-info-rgb: 50, 95, 218;--color-warning: #f2994a;--color-warning-opacity: #fdf0e4;--color-success: #075145;--color-success--opacity: #affebf;--color-success-rgb: 7, 81, 69;--color-allocation-started: #E8F8E5;--color-allocation-scheduled: #FDF0E4;--color-allocation-ended: #FBE4E4;--color-allocation-sick: #E7EFFF;--color-allocation-no-show: #EAE5FF;--color-allocation-unavailable: #F2F2F2;--cropper-outline-color: rgba(0, 0, 0, .5);--color-slate-100: #f1f5f9;--color-slate-200: #e2e8f0;--color-slate-500: #64748b;--color-slate-900: #0f172a}:host::ng-deep .mat-mdc-select{padding:0;border:0}:host::ng-deep .mat-mdc-select .mat-mdc-select-arrow-wrapper{display:none}:host::ng-deep .mat-mdc-select,:host::ng-deep .mat-mdc-select .mdc-list-item{font-size:12px;font-size:.75rem}:host::ng-deep .mat-mdc-select-panel .mat-mdc-option.mdc-list-item{font-size:12px;font-size:.75rem}:host::ng-deep .mat-mdc-form-field{width:auto}:host::ng-deep .flag-only .mat-mdc-select .mat-mdc-select-arrow-wrapper{width:0}:host::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mdc-notched-outline__leading,:host::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mdc-notched-outline__notch,:host::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mdc-notched-outline__trailing{border:0}\n"] }]
50
+ args: [{ selector: 'ecabs-language-selector', template: "<mat-form-field appearance=\"outline\"\r\n [ngClass]=\"{'flag-only': flagOnly}\">\r\n <mat-label></mat-label>\r\n <mat-select class=\"capitalize\"\r\n [(ngModel)]=\"selectedLang\"\r\n name=\"language\"\r\n (ngModelChange)=\"toggleLang()\"\r\n panelClass=\"wide-select\">\r\n <mat-select-trigger>\r\n <div class=\"flex items-center\" [matTooltip]=\"tooltip\">\r\n <span [ngClass]=\"flagClass(matchSelected())\"></span>\r\n <div *ngIf=\"!flagOnly\" class=\"ml-2\">{{ standardLang(matchSelected()) }}</div>\r\n </div>\r\n </mat-select-trigger>\r\n <mat-option class=\"capitalize\" *ngFor=\"let lang of languages\" [value]=\"lang\">\r\n <div class=\"flex items-center\">\r\n <span [ngClass]=\"flagClass(lang)\"></span>\r\n <div class=\"ml-2\">{{ standardLang(lang) }}</div>\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n</mat-form-field>\r\n", styles: [":root{--color-black: #020618;--color-white: #ffffff;--color-white-opacity-05: rgba(0, 0, 0, .05);--color-gray-50: #F8FAFC;--color-gray-100: #F1F5F9;--color-gray-200: #E2E8F0;--color-gray-300: #CAD5E2;--color-gray-400: #90A1B9;--color-gray-500: #62748E;--color-gray-600: #45556C;--color-gray-700: #314158;--color-gray-800: #1D293D;--color-gray-900: #0F172B;--color-gray-950: #020618;--color-brand-dark: #193273;--color-brand-dark-rgb: 25, 50, 115;--color-brand-light: #325FDA;--color-brand-light2: #e7efff;--color-brand-light-rgb: 50, 95, 218;--color-brand-300: #e7efff;--color-brand-300-rgb: 231, 239, 255;--color-error: #df3838;--color-error-opacity: #fbe4e4;--color-error-rgb: 223, 56, 56;--color-notification: #f4d04f;--color-notification-rgb: 244, 208, 79;--color-warn: #f2994a;--color-warn-rgb: 242, 153, 74;--color-info: #325fda;--color-info-rgb: 50, 95, 218;--color-warning: #f2994a;--color-warning-opacity: #fdf0e4;--color-success: #075145;--color-success--opacity: #affebf;--color-success-rgb: 7, 81, 69;--color-allocation-started: #E8F8E5;--color-allocation-scheduled: #FDF0E4;--color-allocation-ended: #FBE4E4;--color-allocation-sick: #E7EFFF;--color-allocation-no-show: #EAE5FF;--color-allocation-unavailable: #F2F2F2;--cropper-outline-color: rgba(0, 0, 0, .5);--mat-option-label-text-color: var(--color-gray-900);--mat-option-focus-state-layer-color: var(--color-gray-100);--mat-option-hover-state-layer-color: var(--color-gray-50);--mat-option-label-text-size: 14px}:host::ng-deep .mat-mdc-select{padding:0;border:0}:host::ng-deep .mat-mdc-select .mat-mdc-select-arrow-wrapper{display:none}:host::ng-deep .mat-mdc-select,:host::ng-deep .mat-mdc-select .mdc-list-item{font-size:12px;font-size:.75rem}:host::ng-deep .mat-mdc-select-panel .mat-mdc-option.mdc-list-item{font-size:12px;font-size:.75rem}:host::ng-deep .mat-mdc-form-field{width:auto}:host::ng-deep .flag-only .mat-mdc-select .mat-mdc-select-arrow-wrapper{width:0}:host::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mdc-notched-outline__leading,:host::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mdc-notched-outline__notch,:host::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline .mdc-notched-outline__trailing{border:0}\n"] }]
51
51
  }], propDecorators: { languages: [{
52
52
  type: Input
53
53
  }], currentLanguage: [{