ecabs-components 1.0.64 → 1.0.66

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 (23) hide show
  1. package/esm2022/lib/base/element-base.mjs +6 -2
  2. package/esm2022/lib/base/element-wrapper/element-wrapper.component.mjs +3 -3
  3. package/esm2022/lib/base/models/ecabs-date-picker-translations.models.mjs +1 -1
  4. package/esm2022/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.component.mjs +2 -2
  5. package/esm2022/lib/ecabs-date-picker/ecabs-date-picker.component.mjs +46 -5
  6. package/esm2022/lib/ecabs-date-picker/ecabs-date-picker.module.mjs +1 -1
  7. package/esm2022/lib/ecabs-increment/ecabs-increment.component.mjs +2 -2
  8. package/esm2022/lib/ecabs-multiple-dates-picker/ecabs-multiple-dates-picker.component.mjs +179 -0
  9. package/esm2022/lib/ecabs-multiple-dates-picker/ecabs-multiple-dates-picker.module.mjs +59 -0
  10. package/esm2022/lib/ecabs-picker-header/ecabs-picker-header.component.mjs +2 -2
  11. package/esm2022/lib/ecabs-place-autocomplete/ecabs-place-autocomplete.component.mjs +3 -3
  12. package/esm2022/public-api.mjs +3 -1
  13. package/fesm2022/ecabs-components.mjs +272 -21
  14. package/fesm2022/ecabs-components.mjs.map +1 -1
  15. package/lib/base/element-base.d.ts +2 -1
  16. package/lib/base/models/ecabs-date-picker-translations.models.d.ts +4 -0
  17. package/lib/ecabs-date-picker/ecabs-date-picker.component.d.ts +8 -2
  18. package/lib/ecabs-multiple-dates-picker/ecabs-multiple-dates-picker.component.d.ts +49 -0
  19. package/lib/ecabs-multiple-dates-picker/ecabs-multiple-dates-picker.module.d.ts +17 -0
  20. package/package.json +2 -1
  21. package/public-api.d.ts +2 -0
  22. package/src/assets/styles/scss/modules/_map.scss +28 -0
  23. package/src/assets/styles/tailwind/index.scss +1 -1
@@ -0,0 +1,179 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';
3
+ import { takeUntil } from 'rxjs';
4
+ import { format, isValid } from 'date-fns';
5
+ import Holidays from 'date-holidays';
6
+ import ElementBaseComponent from '../base/element-base';
7
+ import { UnsubscribeService } from '../base/services/unsubscribe.service';
8
+ import { EcabsDatePickerHeaderComponent } from '../../public-api';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "../base/services/ecabs-date-picker-translations.service";
11
+ import * as i2 from "../base/services/unsubscribe.service";
12
+ import * as i3 from "@angular/common";
13
+ import * as i4 from "../base/element-wrapper/element-wrapper.component";
14
+ import * as i5 from "@angular/material/icon";
15
+ import * as i6 from "@angular/material/datepicker";
16
+ import * as i7 from "@angular/material/legacy-chips";
17
+ import * as i8 from "@angular/material/legacy-form-field";
18
+ import * as i9 from "@angular/forms";
19
+ import * as i10 from "../ecabs-date-picker-actions/ecabs-date-picker-actions.component";
20
+ export class EcabsMultipleDatesPickerComponent extends ElementBaseComponent {
21
+ injector;
22
+ ecabsDatePickerHeaderService;
23
+ unsubscribeService;
24
+ _picker;
25
+ minDate;
26
+ maxDate;
27
+ touchUi = false;
28
+ cancelLabel;
29
+ applyLabel;
30
+ excludeHolidays;
31
+ excludeWeekends;
32
+ holidayOptions;
33
+ modelChange = new EventEmitter();
34
+ val;
35
+ header = EcabsDatePickerHeaderComponent;
36
+ translationConfig;
37
+ CLOSE_ON_SELECTED = false;
38
+ init = new Date();
39
+ resetModel = new Date();
40
+ model = [];
41
+ get value() {
42
+ return this.val;
43
+ }
44
+ set value(val) {
45
+ if (val && this.val !== val) {
46
+ this.val = val;
47
+ this.onChange(val);
48
+ this.onTouch(val);
49
+ }
50
+ }
51
+ constructor(injector, ecabsDatePickerHeaderService, unsubscribeService) {
52
+ super();
53
+ this.injector = injector;
54
+ this.ecabsDatePickerHeaderService = ecabsDatePickerHeaderService;
55
+ this.unsubscribeService = unsubscribeService;
56
+ }
57
+ ngOnInit() {
58
+ this.ecabsDatePickerHeaderService.getConfig()
59
+ .pipe(takeUntil(this.unsubscribeService.subscription()))
60
+ .subscribe(config => this.translationConfig = config);
61
+ }
62
+ ngAfterViewInit() {
63
+ const ngControl = this.injector.get(NgControl, null);
64
+ if (ngControl) {
65
+ this.control = ngControl.control;
66
+ }
67
+ }
68
+ dateClass = (date) => {
69
+ if (this._findDate(date) !== -1) {
70
+ return ['selected'];
71
+ }
72
+ return [];
73
+ };
74
+ dateChanged(event) {
75
+ if (event.value) {
76
+ const date = event.value;
77
+ const index = this._findDate(date);
78
+ if (index === -1) {
79
+ this.model.push(date);
80
+ this.modelChange.emit(this.model);
81
+ }
82
+ else {
83
+ this.model.splice(index, 1);
84
+ this.modelChange.emit(this.model);
85
+ }
86
+ this.resetModel = new Date();
87
+ if (!this.CLOSE_ON_SELECTED) {
88
+ const closeFn = this._picker.close;
89
+ this._picker.close = () => { };
90
+ this._picker['_popupComponentRef']?.instance._calendar.monthView._createWeekCells();
91
+ setTimeout(() => {
92
+ this._picker.close = closeFn;
93
+ });
94
+ }
95
+ }
96
+ }
97
+ remove(date) {
98
+ const index = this._findDate(date);
99
+ this.model.splice(index, 1);
100
+ this.modelChange.emit(this.model);
101
+ }
102
+ onChange = () => { };
103
+ onTouch = () => { };
104
+ writeValue(value) {
105
+ this.value = value;
106
+ }
107
+ registerOnChange(fn) {
108
+ this.onChange = fn;
109
+ }
110
+ registerOnTouched(fn) {
111
+ this.onTouch = fn;
112
+ }
113
+ isDateNotHoliday(date) {
114
+ const { countryCode, timeZoneOffset } = this.holidayOptions ?? {};
115
+ if (countryCode && timeZoneOffset) {
116
+ const holiday = new Holidays(countryCode.toUpperCase());
117
+ return !holiday.isHoliday(`${format(date, 'yyyy-MM-dd')}T00:00:00${timeZoneOffset}`);
118
+ }
119
+ return true;
120
+ }
121
+ filterDateRange = (date) => {
122
+ let result = true;
123
+ if (isValid(new Date(date))) {
124
+ const day = date?.getDay();
125
+ if (this.excludeWeekends) {
126
+ result = result && day !== 0 && day !== 6;
127
+ }
128
+ if (this.excludeHolidays) {
129
+ result = result && this.isDateNotHoliday(date);
130
+ }
131
+ }
132
+ return result;
133
+ };
134
+ _findDate(date) {
135
+ return this.model.map((m) => +m).indexOf(+date);
136
+ }
137
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsMultipleDatesPickerComponent, deps: [{ token: i0.Injector }, { token: i1.EcabsDatePickerHeaderService }, { token: i2.UnsubscribeService }], target: i0.ɵɵFactoryTarget.Component });
138
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsMultipleDatesPickerComponent, selector: "ecabs-multiple-dates-picker", inputs: { minDate: "minDate", maxDate: "maxDate", touchUi: "touchUi", cancelLabel: "cancelLabel", applyLabel: "applyLabel", excludeHolidays: "excludeHolidays", excludeWeekends: "excludeWeekends", holidayOptions: "holidayOptions" }, outputs: { modelChange: "modelChange" }, providers: [
139
+ {
140
+ provide: NG_VALUE_ACCESSOR,
141
+ useExisting: EcabsMultipleDatesPickerComponent,
142
+ multi: true,
143
+ },
144
+ UnsubscribeService
145
+ ], viewQueries: [{ propertyName: "_picker", first: true, predicate: ["picker"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<app-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper w-full\">\r\n <mat-chip-list \r\n #chipList aria-label=\"Choose a date\" \r\n (click)=\"picker.open()\"\r\n class=\"w-full\"\r\n >\r\n <mat-chip \r\n class=\"form-field__input\" \r\n *ngFor=\"let value of model\" \r\n [selectable]=\"false\" [removable]=\"true\"\r\n (removed)=\"remove(value)\"\r\n >\r\n {{ value | date: 'dd/MM/yyyy' }}\r\n <mat-icon matChipRemove *ngIf=\"true\">cancel</mat-icon>\r\n </mat-chip>\r\n <input \r\n class=\"form-field__input fake-input\" \r\n [value]=\"resetModel\"\r\n [(ngModel)]=\"value\" \r\n [matDatepicker]=\"picker\" \r\n placeholder=\"Select dates\" \r\n (dateChange)=\"dateChanged($event)\"\r\n [matChipInputFor]=\"chipList\" \r\n [min]=\"minDate\" \r\n [max]=\"maxDate\" \r\n [matDatepickerFilter]=\"filterDateRange\"\r\n />\r\n </mat-chip-list>\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\">\r\n <mat-icon matDatepickerToggleIcon>calendar_today</mat-icon>\r\n </mat-datepicker-toggle>\r\n <mat-datepicker\r\n #picker \r\n [calendarHeaderComponent]=\"header\" \r\n [touchUi]=\"touchUi\" \r\n [dateClass]=\"dateClass\"\r\n >\r\n <mat-datepicker-actions>\r\n <ecabs-date-picker-actions \r\n [applyLabel]=\"applyLabel ?? translationConfig?.applyLabel\"\r\n [cancelLabel]=\"cancelLabel ?? translationConfig?.cancelLabel\"\r\n >\r\n </ecabs-date-picker-actions>\r\n </mat-datepicker-actions>\r\n </mat-datepicker>\r\n </div>\r\n</app-element-wrapper>", styles: [":root{--color-black: #07080d;--color-white: #ffffff;--color-white-opacity-05: rgba(0, 0, 0, .05);--color-gray-100: #f5f6f9;--color-gray-200: #f8f9f9;--color-gray-300: #d9d9d9;--color-gray-400: #a6a6a6;--color-gray-500: #6b6d73;--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: #25bd3d;--color-success--opacity: #e8f8e5;--color-success-rgb: 37, 189, 61;--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)}:host ::ng-deep .mat-chip-list-wrapper{padding:5px}:host ::ng-deep .mat-chip-list-wrapper .mat-standard-chip{margin:0 5px 0 0}:host ::ng-deep .fake-input{visibility:hidden;width:0;padding:0;margin:0}:host ::ng-deep .form-field__input--wrapper{border:1px solid var(--color-gray-500);padding:5px;align-items:center;background:#fff;border-radius:.25rem}::ng-deep .mat-calendar-body-cell.selected>.mat-calendar-body-cell-content,::ng-deep .mat-calendar-body-cell.selected:hover>.mat-calendar-body-cell-content,::ng-deep .mat-calendar-body-cell.selected>.mat-calendar-body-cell-content:hover{background-color:#673ab7!important;color:#fff!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.ElementWrapperComponent, selector: "app-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i6.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i6.MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "component", type: i6.MatDatepickerActions, selector: "mat-datepicker-actions, mat-date-range-picker-actions" }, { kind: "component", type: i7.MatLegacyChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i7.MatLegacyChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "directive", type: i7.MatLegacyChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i7.MatLegacyChipRemove, selector: "[matChipRemove]" }, { kind: "directive", type: i8.MatLegacySuffix, selector: "[matSuffix]" }, { kind: "directive", type: i9.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: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i10.EcabsDatePickerActionsComponent, selector: "ecabs-date-picker-actions", inputs: ["cancelLabel", "applyLabel"], outputs: ["apply"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }] });
146
+ }
147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsMultipleDatesPickerComponent, decorators: [{
148
+ type: Component,
149
+ args: [{ selector: 'ecabs-multiple-dates-picker', providers: [
150
+ {
151
+ provide: NG_VALUE_ACCESSOR,
152
+ useExisting: EcabsMultipleDatesPickerComponent,
153
+ multi: true,
154
+ },
155
+ UnsubscribeService
156
+ ], template: "<app-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper w-full\">\r\n <mat-chip-list \r\n #chipList aria-label=\"Choose a date\" \r\n (click)=\"picker.open()\"\r\n class=\"w-full\"\r\n >\r\n <mat-chip \r\n class=\"form-field__input\" \r\n *ngFor=\"let value of model\" \r\n [selectable]=\"false\" [removable]=\"true\"\r\n (removed)=\"remove(value)\"\r\n >\r\n {{ value | date: 'dd/MM/yyyy' }}\r\n <mat-icon matChipRemove *ngIf=\"true\">cancel</mat-icon>\r\n </mat-chip>\r\n <input \r\n class=\"form-field__input fake-input\" \r\n [value]=\"resetModel\"\r\n [(ngModel)]=\"value\" \r\n [matDatepicker]=\"picker\" \r\n placeholder=\"Select dates\" \r\n (dateChange)=\"dateChanged($event)\"\r\n [matChipInputFor]=\"chipList\" \r\n [min]=\"minDate\" \r\n [max]=\"maxDate\" \r\n [matDatepickerFilter]=\"filterDateRange\"\r\n />\r\n </mat-chip-list>\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\">\r\n <mat-icon matDatepickerToggleIcon>calendar_today</mat-icon>\r\n </mat-datepicker-toggle>\r\n <mat-datepicker\r\n #picker \r\n [calendarHeaderComponent]=\"header\" \r\n [touchUi]=\"touchUi\" \r\n [dateClass]=\"dateClass\"\r\n >\r\n <mat-datepicker-actions>\r\n <ecabs-date-picker-actions \r\n [applyLabel]=\"applyLabel ?? translationConfig?.applyLabel\"\r\n [cancelLabel]=\"cancelLabel ?? translationConfig?.cancelLabel\"\r\n >\r\n </ecabs-date-picker-actions>\r\n </mat-datepicker-actions>\r\n </mat-datepicker>\r\n </div>\r\n</app-element-wrapper>", styles: [":root{--color-black: #07080d;--color-white: #ffffff;--color-white-opacity-05: rgba(0, 0, 0, .05);--color-gray-100: #f5f6f9;--color-gray-200: #f8f9f9;--color-gray-300: #d9d9d9;--color-gray-400: #a6a6a6;--color-gray-500: #6b6d73;--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: #25bd3d;--color-success--opacity: #e8f8e5;--color-success-rgb: 37, 189, 61;--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)}:host ::ng-deep .mat-chip-list-wrapper{padding:5px}:host ::ng-deep .mat-chip-list-wrapper .mat-standard-chip{margin:0 5px 0 0}:host ::ng-deep .fake-input{visibility:hidden;width:0;padding:0;margin:0}:host ::ng-deep .form-field__input--wrapper{border:1px solid var(--color-gray-500);padding:5px;align-items:center;background:#fff;border-radius:.25rem}::ng-deep .mat-calendar-body-cell.selected>.mat-calendar-body-cell-content,::ng-deep .mat-calendar-body-cell.selected:hover>.mat-calendar-body-cell-content,::ng-deep .mat-calendar-body-cell.selected>.mat-calendar-body-cell-content:hover{background-color:#673ab7!important;color:#fff!important}\n"] }]
157
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.EcabsDatePickerHeaderService }, { type: i2.UnsubscribeService }]; }, propDecorators: { _picker: [{
158
+ type: ViewChild,
159
+ args: ['picker', { static: true }]
160
+ }], minDate: [{
161
+ type: Input
162
+ }], maxDate: [{
163
+ type: Input
164
+ }], touchUi: [{
165
+ type: Input
166
+ }], cancelLabel: [{
167
+ type: Input
168
+ }], applyLabel: [{
169
+ type: Input
170
+ }], excludeHolidays: [{
171
+ type: Input
172
+ }], excludeWeekends: [{
173
+ type: Input
174
+ }], holidayOptions: [{
175
+ type: Input
176
+ }], modelChange: [{
177
+ type: Output
178
+ }] } });
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtbXVsdGlwbGUtZGF0ZXMtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1tdWx0aXBsZS1kYXRlcy1waWNrZXIvZWNhYnMtbXVsdGlwbGUtZGF0ZXMtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1tdWx0aXBsZS1kYXRlcy1waWNrZXIvZWNhYnMtbXVsdGlwbGUtZGF0ZXMtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFlBQVksRUFBWSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFNBQVMsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpDLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sUUFBUSxNQUFNLGVBQWUsQ0FBQztBQUlyQyxPQUFPLG9CQUFvQixNQUFNLHNCQUFzQixDQUFDO0FBSXhELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7Ozs7QUFlbEUsTUFBTSxPQUFPLGlDQUFrQyxTQUFRLG9CQUFvQjtJQXFDdEQ7SUFDQTtJQUNBO0lBckNvQixPQUFPLENBQXNCO0lBRTNELE9BQU8sQ0FBTztJQUNkLE9BQU8sQ0FBTztJQUNkLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsV0FBVyxDQUFTO0lBQ3BC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Q25CLGtLQzdCSCx3c0RBK0NzQjs7NEZEaEJULGlDQUFpQztrQkFiN0MsU0FBUzsrQkFDRSw2QkFBNkIsYUFHNUI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxtQ0FBbUM7NEJBQzlDLEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNELGtCQUFrQjtxQkFDbkI7MktBSXNDLE9BQU87c0JBQTdDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFNUIsT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgTmdDb250cm9sLCBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IGZvcm1hdCwgaXNWYWxpZCB9IGZyb20gJ2RhdGUtZm5zJztcclxuaW1wb3J0IEhvbGlkYXlzIGZyb20gJ2RhdGUtaG9saWRheXMnO1xyXG5cclxuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlciwgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcclxuXHJcbmltcG9ydCBFbGVtZW50QmFzZUNvbXBvbmVudCBmcm9tICcuLi9iYXNlL2VsZW1lbnQtYmFzZSc7XHJcbmltcG9ydCB7IEVjYWJzRGF0ZVBpY2tlckhvbGlkYXlPcHRpb25zLCBFY2Fic0RhdGVQaWNrZXJUcmFuc2xhdGlvbnMgfSBmcm9tICcuLi9iYXNlL21vZGVscy9lY2Ficy1kYXRlLXBpY2tlci10cmFuc2xhdGlvbnMubW9kZWxzJztcclxuXHJcbmltcG9ydCB7IEVjYWJzRGF0ZVBpY2tlckhlYWRlclNlcnZpY2UgfSBmcm9tICcuLi9iYXNlL3NlcnZpY2VzL2VjYWJzLWRhdGUtcGlja2VyLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVW5zdWJzY3JpYmVTZXJ2aWNlIH0gZnJvbSAnLi4vYmFzZS9zZXJ2aWNlcy91bnN1YnNjcmliZS5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IEVjYWJzRGF0ZVBpY2tlckhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3B1YmxpYy1hcGknO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlY2Ficy1tdWx0aXBsZS1kYXRlcy1waWNrZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lY2Ficy1tdWx0aXBsZS1kYXRlcy1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VjYWJzLW11bHRpcGxlLWRhdGVzLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IEVjYWJzTXVsdGlwbGVEYXRlc1BpY2tlckNvbXBvbmVudCxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gICAgVW5zdWJzY3JpYmVTZXJ2aWNlXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVjYWJzTXVsdGlwbGVEYXRlc1BpY2tlckNvbXBvbmVudCBleHRlbmRzIEVsZW1lbnRCYXNlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCdwaWNrZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBfcGlja2VyOiBNYXREYXRlcGlja2VyPERhdGU+O1xyXG5cclxuICBASW5wdXQoKSBtaW5EYXRlOiBEYXRlO1xyXG4gIEBJbnB1dCgpIG1heERhdGU6IERhdGU7XHJcbiAgQElucHV0KCkgdG91Y2hVaSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNhbmNlbExhYmVsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYXBwbHlMYWJlbDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGV4Y2x1ZGVIb2xpZGF5czogYm9vbGVhbjtcclxuICBASW5wdXQoKSBleGNsdWRlV2Vla2VuZHM6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaG9saWRheU9wdGlvbnM6IEVjYWJzRGF0ZVBpY2tlckhvbGlkYXlPcHRpb25zO1xyXG5cclxuICBAT3V0cHV0KCkgbW9kZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVbXT4oKTtcclxuXHJcbiAgdmFsOiBzdHJpbmcgfCBudW1iZXI7XHJcbiAgaGVhZGVyID0gRWNhYnNEYXRlUGlja2VySGVhZGVyQ29tcG9uZW50O1xyXG4gIHRyYW5zbGF0aW9uQ29uZmlnOiBFY2Fic0RhdGVQaWNrZXJUcmFuc2xhdGlvbnM7XHJcblxyXG4gIHB1YmxpYyBDTE9TRV9PTl9TRUxFQ1RFRCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbml0ID0gbmV3IERhdGUoKTtcclxuICBwdWJsaWMgcmVzZXRNb2RlbCA9IG5ldyBEYXRlKCk7XHJcbiAgcHVibGljIG1vZGVsID0gW107XHJcblxyXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmcgfCBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudmFsO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZhbHVlKHZhbDogc3RyaW5nIHwgbnVtYmVyKSB7XHJcbiAgICBpZiAodmFsICYmIHRoaXMudmFsICE9PSB2YWwpIHtcclxuICAgICAgdGhpcy52YWwgPSB2YWw7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UodmFsKTtcclxuICAgICAgdGhpcy5vblRvdWNoKHZhbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBlY2Fic0RhdGVQaWNrZXJIZWFkZXJTZXJ2aWNlOiBFY2Fic0RhdGVQaWNrZXJIZWFkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB1bnN1YnNjcmliZVNlcnZpY2U6IFVuc3Vic2NyaWJlU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5lY2Fic0RhdGVQaWNrZXJIZWFkZXJTZXJ2aWNlLmdldENvbmZpZygpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlU2VydmljZS5zdWJzY3JpcHRpb24oKSksKVxyXG4gICAgICAuc3Vic2NyaWJlKGNvbmZpZyA9PiB0aGlzLnRyYW5zbGF0aW9uQ29uZmlnID0gY29uZmlnKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5nQ29udHJvbDogTmdDb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsKTtcclxuICAgIGlmIChuZ0NvbnRyb2wpIHtcclxuICAgICAgdGhpcy5jb250cm9sID0gbmdDb250cm9sLmNvbnRyb2wgYXMgVW50eXBlZEZvcm1Db250cm9sO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRhdGVDbGFzcyA9IChkYXRlOiBEYXRlKTogc3RyaW5nW10gPT4ge1xyXG4gICAgaWYgKHRoaXMuX2ZpbmREYXRlKGRhdGUpICE9PSAtMSkge1xyXG4gICAgICByZXR1cm4gWydzZWxlY3RlZCddO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBbXTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgZGF0ZUNoYW5nZWQoZXZlbnQ6IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PERhdGU+KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQudmFsdWUpIHtcclxuICAgICAgY29uc3QgZGF0ZSA9IGV2ZW50LnZhbHVlO1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2ZpbmREYXRlKGRhdGUpO1xyXG4gICAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5wdXNoKGRhdGUpO1xyXG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLm1vZGVsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm1vZGVsLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVzZXRNb2RlbCA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGlmICghdGhpcy5DTE9TRV9PTl9TRUxFQ1RFRCkge1xyXG4gICAgICAgIGNvbnN0IGNsb3NlRm4gPSB0aGlzLl9waWNrZXIuY2xvc2U7XHJcbiAgICAgICAgdGhpcy5fcGlja2VyLmNsb3NlID0gKCk6IGFueSA9PiB7IH07XHJcbiAgICAgICAgdGhpcy5fcGlja2VyWydfcG9wdXBDb21wb25lbnRSZWYnXT8uaW5zdGFuY2UuX2NhbGVuZGFyLm1vbnRoVmlldy5fY3JlYXRlV2Vla0NlbGxzKCk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9waWNrZXIuY2xvc2UgPSBjbG9zZUZuO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlKGRhdGU6IERhdGUpOiB2b2lkIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZmluZERhdGUoZGF0ZSk7XHJcbiAgICB0aGlzLm1vZGVsLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xyXG4gIG9uVG91Y2g6IGFueSA9ICgpID0+IHsgfTtcclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgaXNEYXRlTm90SG9saWRheShkYXRlOiBEYXRlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB7IGNvdW50cnlDb2RlLCB0aW1lWm9uZU9mZnNldCB9ID0gdGhpcy5ob2xpZGF5T3B0aW9ucyA/PyB7fTtcclxuXHJcbiAgICBpZiAoY291bnRyeUNvZGUgJiYgdGltZVpvbmVPZmZzZXQpIHtcclxuICAgICAgY29uc3QgaG9saWRheSA9IG5ldyBIb2xpZGF5cyhjb3VudHJ5Q29kZS50b1VwcGVyQ2FzZSgpKTtcclxuXHJcbiAgICAgIHJldHVybiAhaG9saWRheS5pc0hvbGlkYXkoYCR7Zm9ybWF0KGRhdGUsICd5eXl5LU1NLWRkJyl9VDAwOjAwOjAwJHt0aW1lWm9uZU9mZnNldH1gKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGZpbHRlckRhdGVSYW5nZSA9IChkYXRlOiBEYXRlKTogYm9vbGVhbiA9PiB7XHJcbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoaXNWYWxpZChuZXcgRGF0ZShkYXRlKSkpIHtcclxuICAgICAgY29uc3QgZGF5ID0gZGF0ZT8uZ2V0RGF5KCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5leGNsdWRlV2Vla2VuZHMpIHtcclxuICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgZGF5ICE9PSAwICYmIGRheSAhPT0gNjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZXhjbHVkZUhvbGlkYXlzKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHRoaXMuaXNEYXRlTm90SG9saWRheShkYXRlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfZmluZERhdGUoZGF0ZTogRGF0ZSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5tYXAoKG0pID0+ICttKS5pbmRleE9mKCtkYXRlKTtcclxuICB9XHJcbn1cclxuIiwiPGFwcC1lbGVtZW50LXdyYXBwZXIgW2RhdGFdPVwiZ2V0RGF0YSgpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRfX2lucHV0LS13cmFwcGVyIHctZnVsbFwiPlxyXG4gICAgPG1hdC1jaGlwLWxpc3QgXHJcbiAgICAgICNjaGlwTGlzdCBhcmlhLWxhYmVsPVwiQ2hvb3NlIGEgZGF0ZVwiIFxyXG4gICAgICAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiXHJcbiAgICAgIGNsYXNzPVwidy1mdWxsXCJcclxuICAgID5cclxuICAgICAgPG1hdC1jaGlwIFxyXG4gICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZF9faW5wdXRcIiBcclxuICAgICAgICAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgbW9kZWxcIiBcclxuICAgICAgICBbc2VsZWN0YWJsZV09XCJmYWxzZVwiIFtyZW1vdmFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgKHJlbW92ZWQpPVwicmVtb3ZlKHZhbHVlKVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyB2YWx1ZSB8IGRhdGU6ICdkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlICpuZ0lmPVwidHJ1ZVwiPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICAgIDwvbWF0LWNoaXA+XHJcbiAgICAgIDxpbnB1dCBcclxuICAgICAgICBjbGFzcz1cImZvcm0tZmllbGRfX2lucHV0IGZha2UtaW5wdXRcIiAgXHJcbiAgICAgICAgW3ZhbHVlXT1cInJlc2V0TW9kZWxcIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVcIiBcclxuICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBkYXRlc1wiIFxyXG4gICAgICAgIChkYXRlQ2hhbmdlKT1cImRhdGVDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcExpc3RcIiBcclxuICAgICAgICBbbWluXT1cIm1pbkRhdGVcIiBcclxuICAgICAgICBbbWF4XT1cIm1heERhdGVcIiBcclxuICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJmaWx0ZXJEYXRlUmFuZ2VcIlxyXG4gICAgICAvPlxyXG4gICAgPC9tYXQtY2hpcC1saXN0PlxyXG4gICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj5cclxuICAgICAgPG1hdC1pY29uIG1hdERhdGVwaWNrZXJUb2dnbGVJY29uPmNhbGVuZGFyX3RvZGF5PC9tYXQtaWNvbj5cclxuICAgIDwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgPG1hdC1kYXRlcGlja2VyXHJcbiAgICAgICNwaWNrZXIgXHJcbiAgICAgIFtjYWxlbmRhckhlYWRlckNvbXBvbmVudF09XCJoZWFkZXJcIiBcclxuICAgICAgW3RvdWNoVWldPVwidG91Y2hVaVwiIFxyXG4gICAgICBbZGF0ZUNsYXNzXT1cImRhdGVDbGFzc1wiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtZGF0ZXBpY2tlci1hY3Rpb25zPlxyXG4gICAgICAgIDxlY2Ficy1kYXRlLXBpY2tlci1hY3Rpb25zIFxyXG4gICAgICAgICAgW2FwcGx5TGFiZWxdPVwiYXBwbHlMYWJlbCA/PyB0cmFuc2xhdGlvbkNvbmZpZz8uYXBwbHlMYWJlbFwiXHJcbiAgICAgICAgICBbY2FuY2VsTGFiZWxdPVwiY2FuY2VsTGFiZWwgPz8gdHJhbnNsYXRpb25Db25maWc/LmNhbmNlbExhYmVsXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9lY2Ficy1kYXRlLXBpY2tlci1hY3Rpb25zPlxyXG4gICAgICA8L21hdC1kYXRlcGlja2VyLWFjdGlvbnM+XHJcbiAgICA8L21hdC1kYXRlcGlja2VyPlxyXG4gIDwvZGl2PlxyXG48L2FwcC1lbGVtZW50LXdyYXBwZXI+Il19
@@ -0,0 +1,59 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import { MatDatepickerModule } from '@angular/material/datepicker';
5
+ import { MatIconModule } from '@angular/material/icon';
6
+ import { MatLegacyButtonModule as MatButtonModule } from '@angular/material/legacy-button';
7
+ import { MatLegacyInputModule } from "@angular/material/legacy-input";
8
+ import { MatLegacyChipsModule as MatChipModule } from '@angular/material/legacy-chips';
9
+ import { ElementWrapperModule } from '../base/element-wrapper/element-wrapper.module';
10
+ import { EcabsPickerHeaderModule } from '../ecabs-picker-header/ecabs-picker-header.module';
11
+ import { EcabsDatePickerActionsModule } from "../ecabs-date-picker-actions/ecabs-date-picker-actions.module";
12
+ import { EcabsMultipleDatesPickerComponent } from './ecabs-multiple-dates-picker.component';
13
+ import * as i0 from "@angular/core";
14
+ export class EcabsMultipleDatesPickerModule {
15
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsMultipleDatesPickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
16
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: EcabsMultipleDatesPickerModule, declarations: [EcabsMultipleDatesPickerComponent], imports: [CommonModule,
17
+ ElementWrapperModule,
18
+ MatIconModule,
19
+ MatDatepickerModule,
20
+ MatChipModule,
21
+ MatButtonModule,
22
+ MatLegacyInputModule,
23
+ FormsModule,
24
+ ReactiveFormsModule,
25
+ EcabsPickerHeaderModule,
26
+ EcabsDatePickerActionsModule], exports: [EcabsMultipleDatesPickerComponent] });
27
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsMultipleDatesPickerModule, imports: [CommonModule,
28
+ ElementWrapperModule,
29
+ MatIconModule,
30
+ MatDatepickerModule,
31
+ MatChipModule,
32
+ MatButtonModule,
33
+ MatLegacyInputModule,
34
+ FormsModule,
35
+ ReactiveFormsModule,
36
+ EcabsPickerHeaderModule,
37
+ EcabsDatePickerActionsModule] });
38
+ }
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsMultipleDatesPickerModule, decorators: [{
40
+ type: NgModule,
41
+ args: [{
42
+ declarations: [EcabsMultipleDatesPickerComponent,],
43
+ imports: [
44
+ CommonModule,
45
+ ElementWrapperModule,
46
+ MatIconModule,
47
+ MatDatepickerModule,
48
+ MatChipModule,
49
+ MatButtonModule,
50
+ MatLegacyInputModule,
51
+ FormsModule,
52
+ ReactiveFormsModule,
53
+ EcabsPickerHeaderModule,
54
+ EcabsDatePickerActionsModule
55
+ ],
56
+ exports: [EcabsMultipleDatesPickerComponent,],
57
+ }]
58
+ }] });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtbXVsdGlwbGUtZGF0ZXMtcGlja2VyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1tdWx0aXBsZS1kYXRlcy1waWNrZXIvZWNhYnMtbXVsdGlwbGUtZGF0ZXMtcGlja2VyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxxQkFBcUIsSUFBSSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLElBQUksYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDNUYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFN0csT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7O0FBbUI1RixNQUFNLE9BQU8sOEJBQThCO3dHQUE5Qiw4QkFBOEI7eUdBQTlCLDhCQUE4QixpQkFoQjFCLGlDQUFpQyxhQUU5QyxZQUFZO1lBQ1osb0JBQW9CO1lBQ3BCLGFBQWE7WUFDYixtQkFBbUI7WUFDbkIsYUFBYTtZQUNiLGVBQWU7WUFDZixvQkFBb0I7WUFDcEIsV0FBVztZQUNYLG1CQUFtQjtZQUNuQix1QkFBdUI7WUFDdkIsNEJBQTRCLGFBRXBCLGlDQUFpQzt5R0FFaEMsOEJBQThCLFlBZHZDLFlBQVk7WUFDWixvQkFBb0I7WUFDcEIsYUFBYTtZQUNiLG1CQUFtQjtZQUNuQixhQUFhO1lBQ2IsZUFBZTtZQUNmLG9CQUFvQjtZQUNwQixXQUFXO1lBQ1gsbUJBQW1CO1lBQ25CLHVCQUF1QjtZQUN2Qiw0QkFBNEI7OzRGQUluQiw4QkFBOEI7a0JBakIxQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLGlDQUFpQyxFQUFFO29CQUNsRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixvQkFBb0I7d0JBQ3BCLGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQixhQUFhO3dCQUNiLGVBQWU7d0JBQ2Ysb0JBQW9CO3dCQUNwQixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsdUJBQXVCO3dCQUN2Qiw0QkFBNEI7cUJBQzdCO29CQUNELE9BQU8sRUFBRSxDQUFDLGlDQUFpQyxFQUFFO2lCQUM5QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0TGVnYWN5QnV0dG9uTW9kdWxlIGFzIE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRMZWdhY3lJbnB1dE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktaW5wdXRcIjtcclxuaW1wb3J0IHsgTWF0TGVnYWN5Q2hpcHNNb2R1bGUgYXMgTWF0Q2hpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1jaGlwcyc7XHJcblxyXG5pbXBvcnQgeyBFbGVtZW50V3JhcHBlck1vZHVsZSB9IGZyb20gJy4uL2Jhc2UvZWxlbWVudC13cmFwcGVyL2VsZW1lbnQtd3JhcHBlci5tb2R1bGUnO1xyXG5pbXBvcnQgeyBFY2Fic1BpY2tlckhlYWRlck1vZHVsZSB9IGZyb20gJy4uL2VjYWJzLXBpY2tlci1oZWFkZXIvZWNhYnMtcGlja2VyLWhlYWRlci5tb2R1bGUnO1xyXG5pbXBvcnQgeyBFY2Fic0RhdGVQaWNrZXJBY3Rpb25zTW9kdWxlIH0gZnJvbSBcIi4uL2VjYWJzLWRhdGUtcGlja2VyLWFjdGlvbnMvZWNhYnMtZGF0ZS1waWNrZXItYWN0aW9ucy5tb2R1bGVcIjtcclxuXHJcbmltcG9ydCB7IEVjYWJzTXVsdGlwbGVEYXRlc1BpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZWNhYnMtbXVsdGlwbGUtZGF0ZXMtcGlja2VyLmNvbXBvbmVudCc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW0VjYWJzTXVsdGlwbGVEYXRlc1BpY2tlckNvbXBvbmVudCxdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEVsZW1lbnRXcmFwcGVyTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXHJcbiAgICBNYXRDaGlwTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0TGVnYWN5SW5wdXRNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBFY2Fic1BpY2tlckhlYWRlck1vZHVsZSxcclxuICAgIEVjYWJzRGF0ZVBpY2tlckFjdGlvbnNNb2R1bGVcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtFY2Fic011bHRpcGxlRGF0ZXNQaWNrZXJDb21wb25lbnQsXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVjYWJzTXVsdGlwbGVEYXRlc1BpY2tlck1vZHVsZSB7IH1cclxuIl19