@colijnit/corecomponents_v12 257.1.17 → 257.1.19

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.
@@ -4,6 +4,11 @@ import { OverlayService } from '../../service/overlay.service';
4
4
  import { BaseInputDatePickerDirective } from "../base-input-date-picker/base-input-date-picker.directive";
5
5
  import { DoubleCalendarComponent } from "../double-calendar/double-calendar.component";
6
6
  export class InputDateRangePickerComponent extends BaseInputDatePickerDirective {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.EARLIEST_DATE = new Date(1900, 0, 1); // 1900-01-01
10
+ this.LATEST_DATE = new Date(2100, 11, 31); // 2100-12-31
11
+ }
7
12
  showClass() {
8
13
  return true;
9
14
  }
@@ -44,43 +49,75 @@ export class InputDateRangePickerComponent extends BaseInputDatePickerDirective
44
49
  }
45
50
  }
46
51
  handleFirstDateChanged(value) {
47
- if (value) {
48
- if (!this.model) {
49
- this.setModel([]);
52
+ setTimeout(() => {
53
+ var _a, _b;
54
+ if (this.isValidDateString(value)) {
55
+ const [year, month, day] = value.split('-').map(Number);
56
+ const date = new Date(year, month - 1, day);
57
+ if (!this.model)
58
+ this.setModel([]);
59
+ this.setModel([date, (_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : null]);
50
60
  }
51
- this.setModel([new Date(value), this.model[1] ? this.model[1] : null]);
52
- }
61
+ });
53
62
  }
54
63
  handleSecondDateChanged(value) {
55
- if (value) {
56
- if (!this.model) {
57
- this.setModel([]);
64
+ setTimeout(() => {
65
+ var _a, _b;
66
+ if (this.isValidDateString(value)) {
67
+ const [year, month, day] = value.split('-').map(Number);
68
+ const date = new Date(year, month - 1, day);
69
+ if (!this.model)
70
+ this.setModel([]);
71
+ this.setModel([(_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null, date]);
58
72
  }
59
- this.setModel([this.model[0] ? this.model[0] : null, new Date(value)]);
73
+ });
74
+ }
75
+ finalizeDates() {
76
+ let startDate = this.EARLIEST_DATE;
77
+ let endDate = this.LATEST_DATE;
78
+ if (this.isValidDateString(this.firstDateAsString)) {
79
+ const [y, m, d] = this.firstDateAsString.split('-').map(Number);
80
+ startDate = new Date(y, m - 1, d);
81
+ }
82
+ if (this.isValidDateString(this.secondDateAsString)) {
83
+ const [y, m, d] = this.secondDateAsString.split('-').map(Number);
84
+ endDate = new Date(y, m - 1, d);
60
85
  }
86
+ this.setModel([startDate, endDate]);
87
+ }
88
+ finalize() {
89
+ var _a;
90
+ (_a = this.finalizeDates) === null || _a === void 0 ? void 0 : _a.call(this);
91
+ }
92
+ isValidDateString(value) {
93
+ const regex = /^\d{4}-\d{2}-\d{2}$/;
94
+ if (!regex.test(value))
95
+ return false;
96
+ const [yearStr, monthStr, dayStr] = value.split('-');
97
+ const [year, month, day] = [Number(yearStr), Number(monthStr), Number(dayStr)];
98
+ // Prevent ancient years or too-far future
99
+ if (year < 1900 || year > 2100)
100
+ return false;
101
+ const date = new Date(year, month - 1, day);
102
+ return (date.getFullYear() === year &&
103
+ date.getMonth() === month - 1 &&
104
+ date.getDate() === day);
61
105
  }
62
106
  modelSet() {
63
107
  this.setModelAsString();
64
108
  }
65
109
  setModelAsString() {
66
- if (this.model[0]) {
67
- const year = this.model[0].toLocaleString("default", { year: "numeric" });
68
- const month = this.model[0].toLocaleString("default", { month: "2-digit" });
69
- const day = this.model[0].toLocaleString("default", { day: "2-digit" });
70
- this.firstDateAsString = `${year}-${month}-${day}`;
71
- }
72
- else {
73
- this.firstDateAsString = ``;
74
- }
75
- if (this.model[1]) {
76
- const year = this.model[1].toLocaleString("default", { year: "numeric" });
77
- const month = this.model[1].toLocaleString("default", { month: "2-digit" });
78
- const day = this.model[1].toLocaleString("default", { day: "2-digit" });
79
- this.secondDateAsString = `${year}-${month}-${day}`;
80
- }
81
- else {
82
- this.secondDateAsString = ``;
83
- }
110
+ var _a, _b;
111
+ const isStartDefault = ((_a = this.model[0]) === null || _a === void 0 ? void 0 : _a.getTime()) === this.EARLIEST_DATE.getTime();
112
+ const isEndDefault = ((_b = this.model[1]) === null || _b === void 0 ? void 0 : _b.getTime()) === this.LATEST_DATE.getTime();
113
+ this.firstDateAsString = (!this.model[0] || isStartDefault) ? '' : this.formatDate(this.model[0]);
114
+ this.secondDateAsString = (!this.model[1] || isEndDefault) ? '' : this.formatDate(this.model[1]);
115
+ }
116
+ formatDate(date) {
117
+ const year = date.toLocaleString("default", { year: "numeric" });
118
+ const month = date.toLocaleString("default", { month: "2-digit" });
119
+ const day = date.toLocaleString("default", { day: "2-digit" });
120
+ return `${year}-${month}-${day}`;
84
121
  }
85
122
  }
86
123
  InputDateRangePickerComponent.decorators = [
@@ -96,10 +133,11 @@ InputDateRangePickerComponent.decorators = [
96
133
  [leftIcon]="leftIcon"
97
134
  [leftIconData]="leftIconData"
98
135
  [placeholder]="placeholder"
99
- (blur)="handleFirstDateChanged(firstDateAsString)"
136
+ (modelChange)="handleFirstDateChanged(firstDateAsString)"
100
137
  (clearIconClick)="clearDate(0)"
101
138
  (click)="handleFirstInputClick($event)"
102
139
  [emptyPlace]="true"
140
+ (keyup.enter)="finalizeDates()"
103
141
  ></co-input-text>
104
142
  <co-input-text #secondInput class="no-focus-line custom-height"
105
143
  [(model)]= "secondDateAsString"
@@ -108,10 +146,11 @@ InputDateRangePickerComponent.decorators = [
108
146
  [type]="'date'"
109
147
  [rightIcon]="rightIcon"
110
148
  (rightIconClick)="toggleCalendar()"
111
- (blur)="handleSecondDateChanged(secondDateAsString)"
149
+ (modelChange)="handleSecondDateChanged(secondDateAsString)"
112
150
  (clearIconClick)="clearDate(1)"
113
151
  (click)="handleSecondInputClick($event)"
114
152
  [emptyPlace]="true"
153
+ (keyup.enter)="finalizeDates()"
115
154
  ></co-input-text>
116
155
  </div>
117
156
  `,
@@ -133,4 +172,4 @@ InputDateRangePickerComponent.propDecorators = {
133
172
  secondInput: [{ type: ViewChild, args: ['secondInput',] }],
134
173
  showClass: [{ type: HostBinding, args: ['class.co-input-date-range',] }]
135
174
  };
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0LWRhdGUtcmFuZ2UtcGlja2VyL2lucHV0LWRhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULFVBQVUsRUFDVixXQUFXLEVBR1gsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsOENBQThDLEVBQ2pELE1BQU0saUVBQWlFLENBQUM7QUFDekUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLDREQUE0RCxDQUFDO0FBQ3hHLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBNENyRixNQUFNLE9BQU8sNkJBQThCLFNBQVEsNEJBQTRCO0lBVXBFLFNBQVM7UUFDWixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0gscUJBQXFCLENBQUMsS0FBWTtRQUNoQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQVk7UUFDakMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDTSxtQkFBbUIsQ0FBQyxLQUFhO1FBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVNLHdCQUF3QjtRQUM3QixJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUNoQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkI7SUFDSCxDQUFDO0lBRU0sU0FBUyxDQUFDLEtBQWE7UUFDMUIsSUFBSSxD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QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudFJlZiwgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBIb3N0QmluZGluZyxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QmFzZUlucHV0Q29tcG9uZW50fSBmcm9tICcuLi9iYXNlL2Jhc2UtaW5wdXQuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICAgIFNDUkVFTl9DT05GSUdfQURBUFRFUl9DT01QT05FTlRfSU5URVJGQUNFX05BTUVcclxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NjcmVlbi1jb25maWctYWRhcHRlci1jb21wb25lbnQtaW50ZXJmYWNlLW5hbWUnO1xyXG5pbXBvcnQge092ZXJsYXlTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlL292ZXJsYXkuc2VydmljZSc7XHJcbmltcG9ydCB7QmFzZUlucHV0RGF0ZVBpY2tlckRpcmVjdGl2ZX0gZnJvbSBcIi4uL2Jhc2UtaW5wdXQtZGF0ZS1waWNrZXIvYmFzZS1pbnB1dC1kYXRlLXBpY2tlci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtEb3VibGVDYWxlbmRhckNvbXBvbmVudH0gZnJvbSBcIi4uL2RvdWJsZS1jYWxlbmRhci9kb3VibGUtY2FsZW5kYXIuY29tcG9uZW50XCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY28taW5wdXQtZGF0ZS1yYW5nZScsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXRzLXdyYXBwZXJcIiBvdmVybGF5UGFyZW50ICNwYXJlbnRGb3JPdmVybGF5PVwib3ZlcmxheVBhcmVudFwiPlxyXG4gICAgICAgIDxjby1pbnB1dC10ZXh0ICNmaXJzdElucHV0IGNsYXNzPVwibm8tZm9jdXMtbGluZSBjdXN0b20taGVpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJmaXJzdERhdGVBc1N0cmluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW25vQ2xpY2tGb2N1c109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbcGF0dGVybl09XCIneXl5eS1NTS1kZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIidkYXRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2xlZnRJY29uXT1cImxlZnRJY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbbGVmdEljb25EYXRhXT1cImxlZnRJY29uRGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJoYW5kbGVGaXJzdERhdGVDaGFuZ2VkKGZpcnN0RGF0ZUFzU3RyaW5nKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKGNsZWFySWNvbkNsaWNrKT1cImNsZWFyRGF0ZSgwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUZpcnN0SW5wdXRDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbZW1wdHlQbGFjZV09XCJ0cnVlXCJcclxuICAgICAgICA+PC9jby1pbnB1dC10ZXh0PlxyXG4gICAgICAgIDxjby1pbnB1dC10ZXh0ICNzZWNvbmRJbnB1dCBjbGFzcz1cIm5vLWZvY3VzLWxpbmUgY3VzdG9tLWhlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgWyhtb2RlbCldPSBcInNlY29uZERhdGVBc1N0cmluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW25vQ2xpY2tGb2N1c109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbcGF0dGVybl09XCIneXl5eS1NTS1kZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIidkYXRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW3JpZ2h0SWNvbl09XCJyaWdodEljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChyaWdodEljb25DbGljayk9XCJ0b2dnbGVDYWxlbmRhcigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJoYW5kbGVTZWNvbmREYXRlQ2hhbmdlZChzZWNvbmREYXRlQXNTdHJpbmcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoY2xlYXJJY29uQ2xpY2spPVwiY2xlYXJEYXRlKDEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2Vjb25kSW5wdXRDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbZW1wdHlQbGFjZV09XCJ0cnVlXCJcclxuICAgICAgICA+PC9jby1pbnB1dC10ZXh0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIGAsXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICBPdmVybGF5U2VydmljZSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IFNDUkVFTl9DT05GSUdfQURBUFRFUl9DT01QT05FTlRfSU5URVJGQUNFX05BTUUsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0RGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50KVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogQmFzZUlucHV0RGF0ZVBpY2tlckRpcmVjdGl2ZSxcclxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IElucHV0RGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50XHJcbiAgICAgICAgfV0sXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIEJhc2VJbnB1dERhdGVQaWNrZXJEaXJlY3RpdmUge1xyXG5cclxuICBwdWJsaWMgZmlyc3REYXRlQXNTdHJpbmc7XHJcbiAgcHVibGljIHNlY29uZERhdGVBc1N0cmluZztcclxuXHJcbiAgcHJpdmF0ZSBfZG91YmxlQ2FsZW5kYXJDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxEb3VibGVDYWxlbmRhckNvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2ZpcnN0SW5wdXQnKSBmaXJzdElucHV0OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3NlY29uZElucHV0Jykgc2Vjb25kSW5wdXQ6IEVsZW1lbnRSZWY7XHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvLWlucHV0LWRhdGUtcmFuZ2UnKVxyXG4gICAgcHVibGljIHNob3dDbGFzcygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICBoYW5kbGVGaXJzdElucHV0Q2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNlY29uZElucHV0Q2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcbiAgcHVibGljIGhhbmRsZURhdGVzU2VsZWN0ZWQoZGF0ZXM6IERhdGVbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRNb2RlbChkYXRlcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlU2Vjb25kRGF0ZVNlbGVjdGVkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2xvc2VBZnRlckRhdGVTZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy50b2dnbGVDYWxlbmRhcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyRGF0ZShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgIHRoaXMubW9kZWxbaW5kZXhdID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvZ2dsZUNhbGVuZGFyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2hvd0NhbGVuZGFyID0gIXRoaXMuc2hvd0NhbGVuZGFyO1xyXG5cclxuICAgIGlmICh0aGlzLnNob3dDYWxlbmRhcikge1xyXG4gICAgICB0aGlzLl9kb3VibGVDYWxlbmRhckNvbXBvbmVudFJlZiA9IHRoaXMub3ZlcmxheVNlcnZpY2UuY3JlYXRlQ29tcG9uZW50KERvdWJsZUNhbGVuZGFyQ29tcG9uZW50LCB7XHJcbiAgICAgICAgcGFyZW50Rm9yT3ZlcmxheTogdGhpcy5wYXJlbnRGb3JPdmVybGF5LFxyXG4gICAgICAgIHNlbGVjdGVkRGF0ZXM6IHRoaXMubW9kZWxcclxuICAgICAgfSwge1xyXG4gICAgICAgIGRhdGVzU2VsZWN0ZWQ6IChldmVudCkgPT4gdGhpcy5oYW5kbGVEYXRlc1NlbGVjdGVkKGV2ZW50KSxcclxuICAgICAgICBzZWNvbmREYXRlU2VsZWN0ZWQ6ICgpID0+IHRoaXMuaGFuZGxlU2Vjb25kRGF0ZVNlbGVjdGVkKCksXHJcbiAgICAgICAgY2xpY2tlZE91dHNpZGU6ICgpID0+IHRoaXMudG9nZ2xlQ2FsZW5kYXIoKVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UucmVtb3ZlQ29tcG9uZW50KHRoaXMuX2RvdWJsZUNhbGVuZGFyQ29tcG9uZW50UmVmKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVGaXJzdERhdGVDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBpZiAoIXRoaXMubW9kZWwpIHtcclxuICAgICAgICB0aGlzLnNldE1vZGVsKFtdKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldE1vZGVsKFtuZXcgRGF0ZSh2YWx1ZSksIHRoaXMubW9kZWxbMV0gPyB0aGlzLm1vZGVsWzFdIDogbnVsbF0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZVNlY29uZERhdGVDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBpZiAoIXRoaXMubW9kZWwpIHtcclxuICAgICAgICB0aGlzLnNldE1vZGVsKFtdKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldE1vZGVsKFt0aGlzLm1vZGVsWzBdID8gdGhpcy5tb2RlbFswXSA6IG51bGwsIG5ldyBEYXRlKHZhbHVlKV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG1vZGVsU2V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRNb2RlbEFzU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE1vZGVsQXNTdHJpbmcoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5tb2RlbFswXSkge1xyXG4gICAgICBjb25zdCB5ZWFyID0gdGhpcy5tb2RlbFswXS50b0xvY2FsZVN0cmluZyhcImRlZmF1bHRcIiwgeyB5ZWFyOiBcIm51bWVyaWNcIiB9KTtcclxuICAgICAgY29uc3QgbW9udGggPSB0aGlzLm1vZGVsWzBdLnRvTG9jYWxlU3RyaW5nKFwiZGVmYXVsdFwiLCB7IG1vbnRoOiBcIjItZGlnaXRcIiB9KTtcclxuICAgICAgY29uc3QgZGF5ID0gdGhpcy5tb2RlbFswXS50b0xvY2FsZVN0cmluZyhcImRlZmF1bHRcIiwgeyBkYXk6IFwiMi1kaWdpdFwiIH0pO1xyXG4gICAgICB0aGlzLmZpcnN0RGF0ZUFzU3RyaW5nID0gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlyc3REYXRlQXNTdHJpbmcgPSBgYDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vZGVsWzFdKSB7XHJcbiAgICAgIGNvbnN0IHllYXIgPSB0aGlzLm1vZGVsWzFdLnRvTG9jYWxlU3RyaW5nKFwiZGVmYXVsdFwiLCB7IHllYXI6IFwibnVtZXJpY1wiIH0pO1xyXG4gICAgICBjb25zdCBtb250aCA9IHRoaXMubW9kZWxbMV0udG9Mb2NhbGVTdHJpbmcoXCJkZWZhdWx0XCIsIHsgbW9udGg6IFwiMi1kaWdpdFwiIH0pO1xyXG4gICAgICBjb25zdCBkYXkgPSB0aGlzLm1vZGVsWzFdLnRvTG9jYWxlU3RyaW5nKFwiZGVmYXVsdFwiLCB7IGRheTogXCIyLWRpZ2l0XCIgfSk7XHJcbiAgICAgIHRoaXMuc2Vjb25kRGF0ZUFzU3RyaW5nID0gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2Vjb25kRGF0ZUFzU3RyaW5nID0gYGA7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0LWRhdGUtcmFuZ2UtcGlja2VyL2lucHV0LWRhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULFVBQVUsRUFDVixXQUFXLEVBR1gsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsOENBQThDLEVBQ2pELE1BQU0saUVBQWlFLENBQUM7QUFDekUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLDREQUE0RCxDQUFDO0FBQ3hHLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBOENyRixNQUFNLE9BQU8sNkJBQThCLFNBQVEsNEJBQTRCO0lBNUMvRTs7UUFpRG1CLGtCQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLGFBQWE7UUFDcEQsZ0JBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUUsYUFBYTtJQXFJdkUsQ0FBQztJQTlIVSxTQUFTO1FBQ1osT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNILHFCQUFxQixDQUFDLEtBQVk7UUFDaEMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxLQUFZO1FBQ2pDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ00sbUJBQW1CLENBQUMsS0FBYTtRQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFTSx3QkFBd0I7UUFDN0IsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZCO0lBQ0gsQ0FBQztJQUVNLFNBQVMsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUV2QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLHVCQUF1QixFQUFFO2dCQUM5RixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2dCQUN2QyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUs7YUFDMUIsRUFBRTtnQkFDRCxhQUFhLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7Z0JBQ3pELGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtnQkFDekQsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7YUFDNUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0gsQ0FBQztJQUVNLHNCQUFzQixDQUFDLEtBQWE7UUFDekMsVUFBVSxDQUFDLEdBQUcsRUFBRTs7WUFDZCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDakMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3hELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUU1QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7b0JBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFBLE1BQUEsSUFBSSxDQUFDLEtBQUssMENBQUcsQ0FBQyxDQUFDLG1DQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDaEQ7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSx1QkFBdUIsQ0FBQyxLQUFhO1FBQzFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7O1lBQ2QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFFNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO29CQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFBLE1BQUEsSUFBSSxDQUFDLEtBQUssMENBQUcsQ0FBQyxDQUFDLG1DQUFJLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ2hEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sYUFBYTtRQUNsQixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ25DLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFL0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDbEQsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEUsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ25DO1FBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDbkQsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakUsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTSxRQUFROztRQUNiLE1BQUEsSUFBSSxDQUFDLGFBQWEsK0NBQWxCLElBQUksQ0FBa0IsQ0FBQztJQUN6QixDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBYTtRQUNyQyxNQUFNLEtBQUssR0FBRyxxQkFBcUIsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUVyQyxNQUFNLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUUvRSwwQ0FBMEM7UUFDMUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFN0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDNUMsT0FBTyxDQUNMLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJO1lBQzNCLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxLQUFLLEdBQUcsQ0FBQztZQUM3QixJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssR0FBRyxDQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVTLFFBQVE7UUFDaEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLGdCQUFnQjs7UUFDdEIsTUFBTSxjQUFjLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLDBDQUFFLE9BQU8sRUFBRSxNQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakYsTUFBTSxZQUFZLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLDBDQUFFLE9BQU8sRUFBRSxNQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFN0UsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRU8sVUFBVSxDQUFDLElBQVU7UUFDM0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNqRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDL0QsT0FBTyxHQUFHLElBQUksSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7O1lBdExGLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUscUJBQXFCO2dCQUMvQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQThCVDtnQkFDRCxTQUFTLEVBQUU7b0JBQ1AsY0FBYztvQkFDZDt3QkFDSSxPQUFPLEVBQUUsOENBQThDO3dCQUN2RCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDZCQUE2QixDQUFDO3FCQUMvRCxFQUFFO3dCQUNDLE9BQU8sRUFBRSw0QkFBNEI7d0JBQ3JDLFdBQVcsRUFBRSw2QkFBNkI7cUJBQzdDO2lCQUFDO2dCQUNOLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3hDOzs7eUJBV0UsU0FBUyxTQUFDLFlBQVk7MEJBQ3RCLFNBQVMsU0FBQyxhQUFhO3dCQUNyQixXQUFXLFNBQUMsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBmb3J3YXJkUmVmLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtCYXNlSW5wdXRDb21wb25lbnR9IGZyb20gJy4uL2Jhc2UvYmFzZS1pbnB1dC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gICAgU0NSRUVOX0NPTkZJR19BREFQVEVSX0NPTVBPTkVOVF9JTlRFUkZBQ0VfTkFNRVxyXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NyZWVuLWNvbmZpZy1hZGFwdGVyLWNvbXBvbmVudC1pbnRlcmZhY2UtbmFtZSc7XHJcbmltcG9ydCB7T3ZlcmxheVNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2Uvb3ZlcmxheS5zZXJ2aWNlJztcclxuaW1wb3J0IHtCYXNlSW5wdXREYXRlUGlja2VyRGlyZWN0aXZlfSBmcm9tIFwiLi4vYmFzZS1pbnB1dC1kYXRlLXBpY2tlci9iYXNlLWlucHV0LWRhdGUtcGlja2VyLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge0RvdWJsZUNhbGVuZGFyQ29tcG9uZW50fSBmcm9tIFwiLi4vZG91YmxlLWNhbGVuZGFyL2RvdWJsZS1jYWxlbmRhci5jb21wb25lbnRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjby1pbnB1dC1kYXRlLXJhbmdlJyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dHMtd3JhcHBlclwiIG92ZXJsYXlQYXJlbnQgI3BhcmVudEZvck92ZXJsYXk9XCJvdmVybGF5UGFyZW50XCI+XHJcbiAgICAgICAgPGNvLWlucHV0LXRleHQgI2ZpcnN0SW5wdXQgY2xhc3M9XCJuby1mb2N1cy1saW5lIGN1c3RvbS1oZWlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cImZpcnN0RGF0ZUFzU3RyaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbbm9DbGlja0ZvY3VzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtwYXR0ZXJuXT1cIid5eXl5LU1NLWRkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiJ2RhdGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbbGVmdEljb25dPVwibGVmdEljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtsZWZ0SWNvbkRhdGFdPVwibGVmdEljb25EYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJoYW5kbGVGaXJzdERhdGVDaGFuZ2VkKGZpcnN0RGF0ZUFzU3RyaW5nKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKGNsZWFySWNvbkNsaWNrKT1cImNsZWFyRGF0ZSgwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUZpcnN0SW5wdXRDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbZW1wdHlQbGFjZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiZmluYWxpemVEYXRlcygpXCJcclxuICAgICAgICA+PC9jby1pbnB1dC10ZXh0PlxyXG4gICAgICAgIDxjby1pbnB1dC10ZXh0ICNzZWNvbmRJbnB1dCBjbGFzcz1cIm5vLWZvY3VzLWxpbmUgY3VzdG9tLWhlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgWyhtb2RlbCldPSBcInNlY29uZERhdGVBc1N0cmluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW25vQ2xpY2tGb2N1c109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbcGF0dGVybl09XCIneXl5eS1NTS1kZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIidkYXRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW3JpZ2h0SWNvbl09XCJyaWdodEljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChyaWdodEljb25DbGljayk9XCJ0b2dnbGVDYWxlbmRhcigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiaGFuZGxlU2Vjb25kRGF0ZUNoYW5nZWQoc2Vjb25kRGF0ZUFzU3RyaW5nKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKGNsZWFySWNvbkNsaWNrKT1cImNsZWFyRGF0ZSgxKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVNlY29uZElucHV0Q2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2VtcHR5UGxhY2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImZpbmFsaXplRGF0ZXMoKVwiXHJcbiAgICAgICAgPjwvY28taW5wdXQtdGV4dD5cclxuICAgICAgPC9kaXY+XHJcbiAgICBgLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgT3ZlcmxheVNlcnZpY2UsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBTQ1JFRU5fQ09ORklHX0FEQVBURVJfQ09NUE9ORU5UX0lOVEVSRkFDRV9OQU1FLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnB1dERhdGVSYW5nZVBpY2tlckNvbXBvbmVudClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IEJhc2VJbnB1dERhdGVQaWNrZXJEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJbnB1dERhdGVSYW5nZVBpY2tlckNvbXBvbmVudFxyXG4gICAgICAgIH1dLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXREYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlSW5wdXREYXRlUGlja2VyRGlyZWN0aXZlIHtcclxuXHJcbiAgcHVibGljIGZpcnN0RGF0ZUFzU3RyaW5nO1xyXG4gIHB1YmxpYyBzZWNvbmREYXRlQXNTdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgRUFSTElFU1RfREFURSA9IG5ldyBEYXRlKDE5MDAsIDAsIDEpOyAgLy8gMTkwMC0wMS0wMVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgTEFURVNUX0RBVEUgPSBuZXcgRGF0ZSgyMTAwLCAxMSwgMzEpOyAgLy8gMjEwMC0xMi0zMVxyXG5cclxuICBwcml2YXRlIF9kb3VibGVDYWxlbmRhckNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPERvdWJsZUNhbGVuZGFyQ29tcG9uZW50PjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZmlyc3RJbnB1dCcpIGZpcnN0SW5wdXQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnc2Vjb25kSW5wdXQnKSBzZWNvbmRJbnB1dDogRWxlbWVudFJlZjtcclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuY28taW5wdXQtZGF0ZS1yYW5nZScpXHJcbiAgICBwdWJsaWMgc2hvd0NsYXNzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIGhhbmRsZUZpcnN0SW5wdXRDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU2Vjb25kSW5wdXRDbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuICBwdWJsaWMgaGFuZGxlRGF0ZXNTZWxlY3RlZChkYXRlczogRGF0ZVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldE1vZGVsKGRhdGVzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVTZWNvbmREYXRlU2VsZWN0ZWQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jbG9zZUFmdGVyRGF0ZVNlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLnRvZ2dsZUNhbGVuZGFyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJEYXRlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgdGhpcy5tb2RlbFtpbmRleF0gPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9nZ2xlQ2FsZW5kYXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zaG93Q2FsZW5kYXIgPSAhdGhpcy5zaG93Q2FsZW5kYXI7XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0NhbGVuZGFyKSB7XHJcbiAgICAgIHRoaXMuX2RvdWJsZUNhbGVuZGFyQ29tcG9uZW50UmVmID0gdGhpcy5vdmVybGF5U2VydmljZS5jcmVhdGVDb21wb25lbnQoRG91YmxlQ2FsZW5kYXJDb21wb25lbnQsIHtcclxuICAgICAgICBwYXJlbnRGb3JPdmVybGF5OiB0aGlzLnBhcmVudEZvck92ZXJsYXksXHJcbiAgICAgICAgc2VsZWN0ZWREYXRlczogdGhpcy5tb2RlbFxyXG4gICAgICB9LCB7XHJcbiAgICAgICAgZGF0ZXNTZWxlY3RlZDogKGV2ZW50KSA9PiB0aGlzLmhhbmRsZURhdGVzU2VsZWN0ZWQoZXZlbnQpLFxyXG4gICAgICAgIHNlY29uZERhdGVTZWxlY3RlZDogKCkgPT4gdGhpcy5oYW5kbGVTZWNvbmREYXRlU2VsZWN0ZWQoKSxcclxuICAgICAgICBjbGlja2VkT3V0c2lkZTogKCkgPT4gdGhpcy50b2dnbGVDYWxlbmRhcigpXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5yZW1vdmVDb21wb25lbnQodGhpcy5fZG91YmxlQ2FsZW5kYXJDb21wb25lbnRSZWYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUZpcnN0RGF0ZUNoYW5nZWQodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmlzVmFsaWREYXRlU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IHZhbHVlLnNwbGl0KCctJykubWFwKE51bWJlcik7XHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsKSB0aGlzLnNldE1vZGVsKFtdKTtcclxuICAgICAgICB0aGlzLnNldE1vZGVsKFtkYXRlLCB0aGlzLm1vZGVsPy5bMV0gPz8gbnVsbF0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVTZWNvbmREYXRlQ2hhbmdlZCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuaXNWYWxpZERhdGVTdHJpbmcodmFsdWUpKSB7XHJcbiAgICAgICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXldID0gdmFsdWUuc3BsaXQoJy0nKS5tYXAoTnVtYmVyKTtcclxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMubW9kZWwpIHRoaXMuc2V0TW9kZWwoW10pO1xyXG4gICAgICAgIHRoaXMuc2V0TW9kZWwoW3RoaXMubW9kZWw/LlswXSA/PyBudWxsLCBkYXRlXSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbmFsaXplRGF0ZXMoKTogdm9pZCB7XHJcbiAgICBsZXQgc3RhcnREYXRlID0gdGhpcy5FQVJMSUVTVF9EQVRFO1xyXG4gICAgbGV0IGVuZERhdGUgPSB0aGlzLkxBVEVTVF9EQVRFO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVmFsaWREYXRlU3RyaW5nKHRoaXMuZmlyc3REYXRlQXNTdHJpbmcpKSB7XHJcbiAgICAgIGNvbnN0IFt5LCBtLCBkXSA9IHRoaXMuZmlyc3REYXRlQXNTdHJpbmcuc3BsaXQoJy0nKS5tYXAoTnVtYmVyKTtcclxuICAgICAgc3RhcnREYXRlID0gbmV3IERhdGUoeSwgbSAtIDEsIGQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzVmFsaWREYXRlU3RyaW5nKHRoaXMuc2Vjb25kRGF0ZUFzU3RyaW5nKSkge1xyXG4gICAgICBjb25zdCBbeSwgbSwgZF0gPSB0aGlzLnNlY29uZERhdGVBc1N0cmluZy5zcGxpdCgnLScpLm1hcChOdW1iZXIpO1xyXG4gICAgICBlbmREYXRlID0gbmV3IERhdGUoeSwgbSAtIDEsIGQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0TW9kZWwoW3N0YXJ0RGF0ZSwgZW5kRGF0ZV0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbmFsaXplKCk6IHZvaWQge1xyXG4gICAgdGhpcy5maW5hbGl6ZURhdGVzPy4oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNWYWxpZERhdGVTdHJpbmcodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcmVnZXggPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC87XHJcbiAgICBpZiAoIXJlZ2V4LnRlc3QodmFsdWUpKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgW3llYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHJdID0gdmFsdWUuc3BsaXQoJy0nKTtcclxuICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IFtOdW1iZXIoeWVhclN0ciksIE51bWJlcihtb250aFN0ciksIE51bWJlcihkYXlTdHIpXTtcclxuXHJcbiAgICAvLyBQcmV2ZW50IGFuY2llbnQgeWVhcnMgb3IgdG9vLWZhciBmdXR1cmVcclxuICAgIGlmICh5ZWFyIDwgMTkwMCB8fCB5ZWFyID4gMjEwMCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHllYXIgJiZcclxuICAgICAgZGF0ZS5nZXRNb250aCgpID09PSBtb250aCAtIDEgJiZcclxuICAgICAgZGF0ZS5nZXREYXRlKCkgPT09IGRheVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtb2RlbFNldCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0TW9kZWxBc1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRNb2RlbEFzU3RyaW5nKCk6IHZvaWQge1xyXG4gICAgY29uc3QgaXNTdGFydERlZmF1bHQgPSB0aGlzLm1vZGVsWzBdPy5nZXRUaW1lKCkgPT09IHRoaXMuRUFSTElFU1RfREFURS5nZXRUaW1lKCk7XHJcbiAgICBjb25zdCBpc0VuZERlZmF1bHQgPSB0aGlzLm1vZGVsWzFdPy5nZXRUaW1lKCkgPT09IHRoaXMuTEFURVNUX0RBVEUuZ2V0VGltZSgpO1xyXG5cclxuICAgIHRoaXMuZmlyc3REYXRlQXNTdHJpbmcgPSAoIXRoaXMubW9kZWxbMF0gfHwgaXNTdGFydERlZmF1bHQpID8gJycgOiB0aGlzLmZvcm1hdERhdGUodGhpcy5tb2RlbFswXSk7XHJcbiAgICB0aGlzLnNlY29uZERhdGVBc1N0cmluZyA9ICghdGhpcy5tb2RlbFsxXSB8fCBpc0VuZERlZmF1bHQpID8gJycgOiB0aGlzLmZvcm1hdERhdGUodGhpcy5tb2RlbFsxXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB5ZWFyID0gZGF0ZS50b0xvY2FsZVN0cmluZyhcImRlZmF1bHRcIiwgeyB5ZWFyOiBcIm51bWVyaWNcIiB9KTtcclxuICAgIGNvbnN0IG1vbnRoID0gZGF0ZS50b0xvY2FsZVN0cmluZyhcImRlZmF1bHRcIiwgeyBtb250aDogXCIyLWRpZ2l0XCIgfSk7XHJcbiAgICBjb25zdCBkYXkgPSBkYXRlLnRvTG9jYWxlU3RyaW5nKFwiZGVmYXVsdFwiLCB7IGRheTogXCIyLWRpZ2l0XCIgfSk7XHJcbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcclxuICB9XHJcbn1cclxuIl19
@@ -5446,6 +5446,27 @@ class InputDatePickerComponent extends BaseInputDatePickerDirective {
5446
5446
  this.overlayService.removeComponent(this._calendarComponentRef);
5447
5447
  }
5448
5448
  }
5449
+ finalizeDate() {
5450
+ if (this.isValidDateString(this.modelAsString)) {
5451
+ const [year, month, day] = this.modelAsString.split('-').map(Number);
5452
+ const date = new Date(year, month - 1, day);
5453
+ this.setModel(date);
5454
+ }
5455
+ }
5456
+ finalize() {
5457
+ var _a;
5458
+ (_a = this.finalizeDate) === null || _a === void 0 ? void 0 : _a.call(this); // re-use the same logic from (keyup.enter)
5459
+ }
5460
+ isValidDateString(value) {
5461
+ const regex = /^\d{4}-\d{2}-\d{2}$/;
5462
+ if (!regex.test(value))
5463
+ return false;
5464
+ const [year, month, day] = value.split('-').map(Number);
5465
+ const date = new Date(year, month - 1, day);
5466
+ return (date.getFullYear() === year &&
5467
+ date.getMonth() === month - 1 &&
5468
+ date.getDate() === day);
5469
+ }
5449
5470
  handleDateChange(value) {
5450
5471
  if (value) {
5451
5472
  this.setModel(new Date(value));
@@ -5485,9 +5506,10 @@ InputDatePickerComponent.decorators = [
5485
5506
  [placeholder]="placeholder"
5486
5507
  (leftIconClick)="leftIconClick.emit($event)"
5487
5508
  (rightIconClick)="toggleCalendar(true)"
5488
- (blur)="handleDateChange(modelAsString)"
5509
+ (modelChange)="modelAsString = $event"
5489
5510
  (clearIconClick)="handleClearIconClicked()"
5490
5511
  [emptyPlace]="true"
5512
+ (keyup.enter)="finalizeDate()"
5491
5513
  ></co-input-text>
5492
5514
  `,
5493
5515
  providers: [
@@ -6919,6 +6941,11 @@ DoubleCalendarModule.decorators = [
6919
6941
  ];
6920
6942
 
6921
6943
  class InputDateRangePickerComponent extends BaseInputDatePickerDirective {
6944
+ constructor() {
6945
+ super(...arguments);
6946
+ this.EARLIEST_DATE = new Date(1900, 0, 1); // 1900-01-01
6947
+ this.LATEST_DATE = new Date(2100, 11, 31); // 2100-12-31
6948
+ }
6922
6949
  showClass() {
6923
6950
  return true;
6924
6951
  }
@@ -6959,43 +6986,75 @@ class InputDateRangePickerComponent extends BaseInputDatePickerDirective {
6959
6986
  }
6960
6987
  }
6961
6988
  handleFirstDateChanged(value) {
6962
- if (value) {
6963
- if (!this.model) {
6964
- this.setModel([]);
6989
+ setTimeout(() => {
6990
+ var _a, _b;
6991
+ if (this.isValidDateString(value)) {
6992
+ const [year, month, day] = value.split('-').map(Number);
6993
+ const date = new Date(year, month - 1, day);
6994
+ if (!this.model)
6995
+ this.setModel([]);
6996
+ this.setModel([date, (_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : null]);
6965
6997
  }
6966
- this.setModel([new Date(value), this.model[1] ? this.model[1] : null]);
6967
- }
6998
+ });
6968
6999
  }
6969
7000
  handleSecondDateChanged(value) {
6970
- if (value) {
6971
- if (!this.model) {
6972
- this.setModel([]);
7001
+ setTimeout(() => {
7002
+ var _a, _b;
7003
+ if (this.isValidDateString(value)) {
7004
+ const [year, month, day] = value.split('-').map(Number);
7005
+ const date = new Date(year, month - 1, day);
7006
+ if (!this.model)
7007
+ this.setModel([]);
7008
+ this.setModel([(_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null, date]);
6973
7009
  }
6974
- this.setModel([this.model[0] ? this.model[0] : null, new Date(value)]);
7010
+ });
7011
+ }
7012
+ finalizeDates() {
7013
+ let startDate = this.EARLIEST_DATE;
7014
+ let endDate = this.LATEST_DATE;
7015
+ if (this.isValidDateString(this.firstDateAsString)) {
7016
+ const [y, m, d] = this.firstDateAsString.split('-').map(Number);
7017
+ startDate = new Date(y, m - 1, d);
6975
7018
  }
7019
+ if (this.isValidDateString(this.secondDateAsString)) {
7020
+ const [y, m, d] = this.secondDateAsString.split('-').map(Number);
7021
+ endDate = new Date(y, m - 1, d);
7022
+ }
7023
+ this.setModel([startDate, endDate]);
7024
+ }
7025
+ finalize() {
7026
+ var _a;
7027
+ (_a = this.finalizeDates) === null || _a === void 0 ? void 0 : _a.call(this);
7028
+ }
7029
+ isValidDateString(value) {
7030
+ const regex = /^\d{4}-\d{2}-\d{2}$/;
7031
+ if (!regex.test(value))
7032
+ return false;
7033
+ const [yearStr, monthStr, dayStr] = value.split('-');
7034
+ const [year, month, day] = [Number(yearStr), Number(monthStr), Number(dayStr)];
7035
+ // Prevent ancient years or too-far future
7036
+ if (year < 1900 || year > 2100)
7037
+ return false;
7038
+ const date = new Date(year, month - 1, day);
7039
+ return (date.getFullYear() === year &&
7040
+ date.getMonth() === month - 1 &&
7041
+ date.getDate() === day);
6976
7042
  }
6977
7043
  modelSet() {
6978
7044
  this.setModelAsString();
6979
7045
  }
6980
7046
  setModelAsString() {
6981
- if (this.model[0]) {
6982
- const year = this.model[0].toLocaleString("default", { year: "numeric" });
6983
- const month = this.model[0].toLocaleString("default", { month: "2-digit" });
6984
- const day = this.model[0].toLocaleString("default", { day: "2-digit" });
6985
- this.firstDateAsString = `${year}-${month}-${day}`;
6986
- }
6987
- else {
6988
- this.firstDateAsString = ``;
6989
- }
6990
- if (this.model[1]) {
6991
- const year = this.model[1].toLocaleString("default", { year: "numeric" });
6992
- const month = this.model[1].toLocaleString("default", { month: "2-digit" });
6993
- const day = this.model[1].toLocaleString("default", { day: "2-digit" });
6994
- this.secondDateAsString = `${year}-${month}-${day}`;
6995
- }
6996
- else {
6997
- this.secondDateAsString = ``;
6998
- }
7047
+ var _a, _b;
7048
+ const isStartDefault = ((_a = this.model[0]) === null || _a === void 0 ? void 0 : _a.getTime()) === this.EARLIEST_DATE.getTime();
7049
+ const isEndDefault = ((_b = this.model[1]) === null || _b === void 0 ? void 0 : _b.getTime()) === this.LATEST_DATE.getTime();
7050
+ this.firstDateAsString = (!this.model[0] || isStartDefault) ? '' : this.formatDate(this.model[0]);
7051
+ this.secondDateAsString = (!this.model[1] || isEndDefault) ? '' : this.formatDate(this.model[1]);
7052
+ }
7053
+ formatDate(date) {
7054
+ const year = date.toLocaleString("default", { year: "numeric" });
7055
+ const month = date.toLocaleString("default", { month: "2-digit" });
7056
+ const day = date.toLocaleString("default", { day: "2-digit" });
7057
+ return `${year}-${month}-${day}`;
6999
7058
  }
7000
7059
  }
7001
7060
  InputDateRangePickerComponent.decorators = [
@@ -7011,10 +7070,11 @@ InputDateRangePickerComponent.decorators = [
7011
7070
  [leftIcon]="leftIcon"
7012
7071
  [leftIconData]="leftIconData"
7013
7072
  [placeholder]="placeholder"
7014
- (blur)="handleFirstDateChanged(firstDateAsString)"
7073
+ (modelChange)="handleFirstDateChanged(firstDateAsString)"
7015
7074
  (clearIconClick)="clearDate(0)"
7016
7075
  (click)="handleFirstInputClick($event)"
7017
7076
  [emptyPlace]="true"
7077
+ (keyup.enter)="finalizeDates()"
7018
7078
  ></co-input-text>
7019
7079
  <co-input-text #secondInput class="no-focus-line custom-height"
7020
7080
  [(model)]= "secondDateAsString"
@@ -7023,10 +7083,11 @@ InputDateRangePickerComponent.decorators = [
7023
7083
  [type]="'date'"
7024
7084
  [rightIcon]="rightIcon"
7025
7085
  (rightIconClick)="toggleCalendar()"
7026
- (blur)="handleSecondDateChanged(secondDateAsString)"
7086
+ (modelChange)="handleSecondDateChanged(secondDateAsString)"
7027
7087
  (clearIconClick)="clearDate(1)"
7028
7088
  (click)="handleSecondInputClick($event)"
7029
7089
  [emptyPlace]="true"
7090
+ (keyup.enter)="finalizeDates()"
7030
7091
  ></co-input-text>
7031
7092
  </div>
7032
7093
  `,
@@ -12139,6 +12200,13 @@ class FilterItemComponent {
12139
12200
  });
12140
12201
  }
12141
12202
  onButtonClicked() {
12203
+ var _a, _b;
12204
+ if ((_a = this.dateInput) === null || _a === void 0 ? void 0 : _a.finalize) {
12205
+ this.dateInput.finalize();
12206
+ }
12207
+ if ((_b = this.dateRangeInput) === null || _b === void 0 ? void 0 : _b.finalize) {
12208
+ this.dateRangeInput.finalize();
12209
+ }
12142
12210
  this.filterButtonClicked.emit();
12143
12211
  }
12144
12212
  uncheckForSingleSelect(model) {
@@ -12566,15 +12634,17 @@ FilterItemComponent.decorators = [
12566
12634
  </div>
12567
12635
  <div class="co-filter-item-dateField-content" *ngIf="mode === modes.DateField">
12568
12636
  <co-input-date
12637
+ #dateInput
12569
12638
  [(model)]="model" [readonly]="readonly"
12570
12639
  (modelChange)="handleModelChange($event)"
12571
12640
  ></co-input-date>
12572
12641
  </div>
12573
12642
  <div class="co-filter-item-dateField-content" *ngIf="mode === modes.DateRangeField">
12574
12643
  <co-input-date-range [readonly]="readonly"
12644
+ #dateRangeInput
12575
12645
  [model]="[dateRangeStart, dateRangeEnd]"
12576
12646
  (modelChange)="handleModelChange($event)"
12577
- [placeholder]="'SELECT_DATE' | coreLocalize">
12647
+ [placeholder]="'Kies datum' | coreLocalize">
12578
12648
  </co-input-date-range>
12579
12649
  </div>
12580
12650
  </ng-template>
@@ -12618,6 +12688,8 @@ FilterItemComponent.propDecorators = {
12618
12688
  collectionChange: [{ type: Output }],
12619
12689
  filterButtonClicked: [{ type: Output }],
12620
12690
  hasClass: [{ type: HostBinding, args: ["class.co-filter-item",] }],
12691
+ dateInput: [{ type: ViewChild, args: ['dateInput',] }],
12692
+ dateRangeInput: [{ type: ViewChild, args: ['dateRangeInput',] }],
12621
12693
  hidden: [{ type: HostBinding, args: ['class.co-hidden',] }]
12622
12694
  };
12623
12695