myrta-ui 1.1.89 → 1.1.90

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 (25) hide show
  1. package/esm2020/lib/components/form/input-date/components/date-calendar/date-calendar.component.mjs +222 -0
  2. package/esm2020/lib/components/form/input-date/helpers/date-helpers.mjs +70 -0
  3. package/esm2020/lib/components/form/input-date/input-date.component.mjs +313 -0
  4. package/esm2020/lib/components/form/input-date/input-date.enum.mjs +7 -0
  5. package/esm2020/lib/components/form/input-date/input-date.module.mjs +54 -0
  6. package/esm2020/lib/components/form/input-date-time/helpers/formatting-moscow-timezone.mjs +15 -3
  7. package/esm2020/lib/components/form/input-date-time/input-date-time.component.mjs +67 -23
  8. package/esm2020/lib/components/form/input-date-time/input-date-time.enum.mjs +7 -7
  9. package/esm2020/lib/enums/overlay/index.mjs +78 -0
  10. package/esm2020/public-api.mjs +3 -1
  11. package/fesm2015/myrta-ui.mjs +834 -61
  12. package/fesm2015/myrta-ui.mjs.map +1 -1
  13. package/fesm2020/myrta-ui.mjs +827 -61
  14. package/fesm2020/myrta-ui.mjs.map +1 -1
  15. package/lib/components/form/input-date/components/date-calendar/date-calendar.component.d.ts +63 -0
  16. package/lib/components/form/input-date/helpers/date-helpers.d.ts +14 -0
  17. package/lib/components/form/input-date/input-date.component.d.ts +65 -0
  18. package/lib/components/form/input-date/input-date.enum.d.ts +11 -0
  19. package/lib/components/form/input-date/input-date.module.d.ts +14 -0
  20. package/lib/components/form/input-date-time/helpers/formatting-moscow-timezone.d.ts +1 -0
  21. package/lib/components/form/input-date-time/input-date-time.component.d.ts +8 -7
  22. package/lib/components/form/input-date-time/input-date-time.enum.d.ts +2 -2
  23. package/lib/enums/overlay/index.d.ts +13 -0
  24. package/package.json +1 -1
  25. package/public-api.d.ts +2 -0
@@ -0,0 +1,222 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { cleanDate } from '../../helpers/date-helpers';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class DateCalendarComponent {
6
+ constructor(_detector) {
7
+ this._detector = _detector;
8
+ this.selectedDate = null;
9
+ this.dateSelected = new EventEmitter();
10
+ this.close = new EventEmitter();
11
+ this.currentMonth = new Date().getMonth();
12
+ this.currentYear = new Date().getFullYear();
13
+ this.view = 'days';
14
+ this.monthNames = [
15
+ 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь',
16
+ 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
17
+ ];
18
+ this.daysOfWeek = ['ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ', 'ВС'];
19
+ this.months = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
20
+ this._minDate = null;
21
+ this._maxDate = null;
22
+ this._minDateStr = null;
23
+ this._maxDateStr = null;
24
+ this.calendarDaysCache = null;
25
+ }
26
+ ngOnInit() {
27
+ if (this.selectedDate) {
28
+ this.currentMonth = this.selectedDate.getMonth();
29
+ this.currentYear = this.selectedDate.getFullYear();
30
+ }
31
+ this.updateDateBounds();
32
+ }
33
+ set minDate(value) {
34
+ if (this._minDateStr !== value) {
35
+ this._minDateStr = value;
36
+ this.updateDateBounds();
37
+ this._detector.markForCheck();
38
+ }
39
+ }
40
+ get minDate() {
41
+ return this._minDateStr;
42
+ }
43
+ set maxDate(value) {
44
+ if (this._maxDateStr !== value) {
45
+ this._maxDateStr = value;
46
+ this.updateDateBounds();
47
+ this._detector.markForCheck();
48
+ }
49
+ }
50
+ get maxDate() {
51
+ return this._maxDateStr;
52
+ }
53
+ updateDateBounds() {
54
+ this._minDate = this._minDateStr ? cleanDate(this._minDateStr) : null;
55
+ this._maxDate = this._maxDateStr ? cleanDate(this._maxDateStr) : null;
56
+ }
57
+ get headerText() {
58
+ switch (this.view) {
59
+ case 'days':
60
+ return `${this.monthNames[this.currentMonth]} ${this.currentYear}`;
61
+ case 'months':
62
+ return `${this.currentYear}`;
63
+ default:
64
+ return 'Выберите год';
65
+ }
66
+ }
67
+ switchView() {
68
+ this.view = this.view === 'days' ? 'months' : this.view === 'months' ? 'years' : 'days';
69
+ this._detector.markForCheck();
70
+ }
71
+ getCalendarDays() {
72
+ if (this.calendarDaysCache?.month === this.currentMonth && this.calendarDaysCache?.year === this.currentYear) {
73
+ return this.calendarDaysCache.days;
74
+ }
75
+ const daysInMonth = new Date(this.currentYear, this.currentMonth + 1, 0).getDate();
76
+ const prevMonthDays = new Date(this.currentYear, this.currentMonth, 0).getDate();
77
+ const days = [];
78
+ const prevDaysCount = 2;
79
+ const prevMonth = this.currentMonth === 0 ? 11 : this.currentMonth - 1;
80
+ const prevYear = this.currentMonth === 0 ? this.currentYear - 1 : this.currentYear;
81
+ const nextMonth = this.currentMonth === 11 ? 0 : this.currentMonth + 1;
82
+ const nextYear = this.currentMonth === 11 ? this.currentYear + 1 : this.currentYear;
83
+ for (let i = 0; i < prevDaysCount; i++) {
84
+ days.push({ day: prevMonthDays - prevDaysCount + 1 + i, month: prevMonth, year: prevYear });
85
+ }
86
+ for (let i = 1; i <= daysInMonth; i++) {
87
+ days.push({ day: i, month: this.currentMonth, year: this.currentYear });
88
+ }
89
+ const remainingDays = 35 - days.length;
90
+ for (let i = 1; i <= remainingDays; i++) {
91
+ days.push({ day: i, month: nextMonth, year: nextYear });
92
+ }
93
+ this.calendarDaysCache = { month: this.currentMonth, year: this.currentYear, days };
94
+ return days;
95
+ }
96
+ getYears() {
97
+ const centerYear = this.selectedDate?.getFullYear() ?? this.currentYear;
98
+ const startYear = centerYear - 5;
99
+ return Array.from({ length: 12 }, (_, i) => startYear + i);
100
+ }
101
+ isSelected(day) {
102
+ if (!this.selectedDate)
103
+ return false;
104
+ return (day.day === this.selectedDate.getDate() &&
105
+ day.month === this.selectedDate.getMonth() &&
106
+ day.year === this.selectedDate.getFullYear());
107
+ }
108
+ isMonthSelected(month) {
109
+ return this.selectedDate?.getMonth() === month && this.selectedDate?.getFullYear() === this.currentYear;
110
+ }
111
+ isYearSelected(year) {
112
+ return this.selectedDate?.getFullYear() === year;
113
+ }
114
+ isDateEnabled(day) {
115
+ const date = new Date(day.year, day.month, day.day);
116
+ return ((!this._minDate || date >= this._minDate) &&
117
+ (!this._maxDate || date <= this._maxDate));
118
+ }
119
+ isMonthDisabled(month) {
120
+ if (!this._minDate && !this._maxDate)
121
+ return false;
122
+ const startOfMonth = new Date(this.currentYear, month, 1);
123
+ const endOfMonth = new Date(this.currentYear, month + 1, 0);
124
+ return ((!!this._minDate && !isNaN(this._minDate.getTime()) && endOfMonth < this._minDate) ||
125
+ (!!this._maxDate && !isNaN(this._maxDate.getTime()) && startOfMonth > this._maxDate));
126
+ }
127
+ isYearDisabled(year) {
128
+ if (!this._minDate && !this._maxDate)
129
+ return false;
130
+ const minYear = this._minDate && !isNaN(this._minDate.getTime()) ? this._minDate.getFullYear() : null;
131
+ const maxYear = this._maxDate && !isNaN(this._maxDate.getTime()) ? this._maxDate.getFullYear() : null;
132
+ return (minYear !== null && year < minYear) || (maxYear !== null && year > maxYear);
133
+ }
134
+ selectDate(day) {
135
+ if (!this.isDateEnabled(day))
136
+ return;
137
+ const date = new Date(day.year, day.month, day.day);
138
+ this.dateSelected.emit(date);
139
+ const needsUpdate = day.month !== this.currentMonth || day.year !== this.currentYear;
140
+ if (needsUpdate) {
141
+ setTimeout(() => {
142
+ this.currentMonth = day.month;
143
+ this.currentYear = day.year;
144
+ this._detector.markForCheck();
145
+ });
146
+ }
147
+ }
148
+ selectMonth(month) {
149
+ if (this.isMonthDisabled(month))
150
+ return;
151
+ setTimeout(() => {
152
+ this.currentMonth = month;
153
+ this.view = 'days';
154
+ this._detector.markForCheck();
155
+ });
156
+ }
157
+ selectYear(year) {
158
+ if (this.isYearDisabled(year))
159
+ return;
160
+ setTimeout(() => {
161
+ this.currentYear = year;
162
+ this.view = 'months';
163
+ this._detector.markForCheck();
164
+ });
165
+ }
166
+ changeMonth(offset) {
167
+ let newMonth = this.currentMonth + offset;
168
+ let newYear = this.currentYear;
169
+ if (newMonth < 0) {
170
+ newMonth = 11;
171
+ newYear--;
172
+ }
173
+ else if (newMonth > 11) {
174
+ newMonth = 0;
175
+ newYear++;
176
+ }
177
+ this.currentMonth = newMonth;
178
+ this.currentYear = newYear;
179
+ this._detector.markForCheck();
180
+ }
181
+ changeYearRange(offset) {
182
+ this.currentYear += offset * 12;
183
+ this._detector.markForCheck();
184
+ }
185
+ isPreviousMonthDisabled() {
186
+ if (!this._minDate)
187
+ return false;
188
+ return new Date(this.currentYear, this.currentMonth, 0) < this._minDate;
189
+ }
190
+ isNextMonthDisabled() {
191
+ if (!this._maxDate)
192
+ return false;
193
+ return new Date(this.currentYear, this.currentMonth + 1, 1) > this._maxDate;
194
+ }
195
+ isPreviousYearRangeDisabled() {
196
+ if (!this._minDate)
197
+ return false;
198
+ return this.getYears()[0] <= this._minDate.getFullYear();
199
+ }
200
+ isNextYearRangeDisabled() {
201
+ if (!this._maxDate)
202
+ return false;
203
+ return this.getYears()[this.getYears().length - 1] >= this._maxDate.getFullYear();
204
+ }
205
+ }
206
+ DateCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DateCalendarComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
207
+ DateCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DateCalendarComponent, selector: "mrx-date-calendar", inputs: { selectedDate: "selectedDate", minDate: "minDate", maxDate: "maxDate" }, outputs: { dateSelected: "dateSelected", close: "close" }, ngImport: i0, template: "<div class=\"mrx-calendar\">\r\n <div class=\"mrx-calendar-header\">\r\n <button *ngIf=\"view === 'days'\" class=\"mrx-calendar-header__chevron\" (click)=\"changeMonth(-1)\" [disabled]=\"isPreviousMonthDisabled()\">\r\n <span class=\"mrx-icon icon-chevron-left icon-font-16\"></span>\r\n </button>\r\n\r\n <button *ngIf=\"view === 'years'\" class=\"mrx-calendar-header__chevron\" (click)=\"changeYearRange(-1)\" [disabled]=\"isPreviousYearRangeDisabled()\">\r\n <span class=\"mrx-icon icon-chevron-left icon-font-16\"></span>\r\n </button>\r\n\r\n <button class=\"mrx-calendar-header__button\" (click)=\"switchView()\">\r\n {{ headerText }}\r\n </button>\r\n\r\n <button *ngIf=\"view === 'days'\" class=\"mrx-calendar-header__chevron\" (click)=\"changeMonth(1)\" [disabled]=\"isNextMonthDisabled()\">\r\n <span class=\"mrx-icon icon-chevron-right icon-font-16\"></span>\r\n </button>\r\n\r\n <button *ngIf=\"view === 'years'\" class=\"mrx-calendar-header__chevron\" (click)=\"changeYearRange(1)\" [disabled]=\"isNextYearRangeDisabled()\">\r\n <span class=\"mrx-icon icon-chevron-right icon-font-16\"></span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"mrx-calendar-body\">\r\n <ng-container [ngSwitch]=\"view\">\r\n <ng-container *ngSwitchCase=\"'years'\">\r\n <div class=\"mrx-calendar-body__grid mrx-calendar-body__grid--years\">\r\n <div\r\n *ngFor=\"let year of getYears()\"\r\n class=\"mrx-calendar-body__grid__item mrx-calendar-body__grid__item--year\"\r\n [class.selected]=\"isYearSelected(year)\"\r\n [class.disabled]=\"isYearDisabled(year)\"\r\n [class.hoverable]=\"!isYearDisabled(year)\"\r\n (click)=\"selectYear(year)\"\r\n >\r\n {{ year }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'months'\">\r\n <div class=\"mrx-calendar-body__grid mrx-calendar-body__grid--months\">\r\n <div\r\n *ngFor=\"let month of months\"\r\n class=\"mrx-calendar-body__grid__item mrx-calendar-body__grid__item--month\"\r\n [class.selected]=\"isMonthSelected(month)\"\r\n [class.disabled]=\"isMonthDisabled(month)\"\r\n [class.hoverable]=\"!isMonthDisabled(month)\"\r\n (click)=\"selectMonth(month)\"\r\n >\r\n {{ monthNames[month] }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n <div class=\"mrx-calendar-body__grid mrx-calendar-body__grid--days\">\r\n <div *ngFor=\"let day of daysOfWeek\" class=\"mrx-calendar-body__grid__label\">{{ day }}</div>\r\n\r\n <div\r\n *ngFor=\"let day of getCalendarDays()\"\r\n class=\"mrx-calendar-body__grid__item mrx-calendar-body__grid__item--day\"\r\n [class.selected]=\"isSelected(day)\"\r\n [class.other-month]=\"day.month !== currentMonth\"\r\n [class.disabled]=\"!isDateEnabled(day)\"\r\n [class.hoverable]=\"isDateEnabled(day)\"\r\n (click)=\"selectDate(day)\"\r\n >\r\n {{ day.day }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n", styles: [".mrx-calendar{width:272px;border-radius:4px;background-color:var(--brand-bg-tertiary-default, #FFF);box-shadow:0 1px 4px #3a3a3a4d}.mrx-calendar-header{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--neutral-bg-divider, #DBDFE5)}.mrx-calendar-header__button{border:none;border-radius:4px;background-color:transparent;padding:6px 12px;text-align:center;flex-grow:1;font-family:var(--body-md-font-family);font-size:var(--body-md-font-size);font-weight:var(--body-md-font-weight);line-height:var(--body-md-line-height);color:var(--neutral-text-primary, #262626);cursor:pointer;transition:background-color .3s}.mrx-calendar-header__button:hover{background-color:var(--brand-bg-tertiary-hover, #EDF5FF)}.mrx-calendar-header__chevron{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border:none;border-radius:4px;background-color:transparent;cursor:pointer;transition:background-color .3s}.mrx-calendar-header__chevron:hover{background-color:var(--brand-bg-tertiary-hover, #EDF5FF)}.mrx-calendar-header__chevron:disabled{cursor:default}.mrx-calendar-header__chevron:disabled:hover{background-color:var(--neutral-bg-island-default, #F8F9FA)}.mrx-calendar-body{padding:8px 12px}.mrx-calendar-body__grid--days{display:grid;grid-template-columns:repeat(7,1fr);grid-gap:4px;gap:4px;text-align:center}.mrx-calendar-body__grid--months{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:8px;gap:8px;text-align:center}.mrx-calendar-body__grid--years{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:8px;gap:8px;text-align:center;max-height:190px;overflow-y:auto}.mrx-calendar-body__grid__label{display:flex;justify-content:center;align-items:center;width:32px;height:32px;font-family:var(--body-sm-font-family);font-size:var(--body-sm-font-size);font-weight:var(--body-sm-font-weight);line-height:var(--body-sm-line-height);color:var(--brand-text-accent, #003780)}.mrx-calendar-body__grid__item{display:flex;justify-content:center;align-items:center;border-radius:4px;font-family:var(--body-md-font-family);font-size:var(--body-md-font-size);font-weight:var(--body-md-font-weight);line-height:var(--body-md-line-height);color:var(--neutral-text-primary, #262626);transition:background-color .3s}.mrx-calendar-body__grid__item--day{width:32px;height:32px}.mrx-calendar-body__grid__item--month,.mrx-calendar-body__grid__item--year{height:32px}.mrx-calendar-body__grid__item.hoverable{cursor:pointer}.mrx-calendar-body__grid__item.hoverable:hover{background-color:var(--brand-bg-tertiary-hover, #EDF5FF)}.mrx-calendar-body__grid__item.selected{background-color:var(--brand-bg-primary-default, #2A6AB8);color:var(--neutral-text-inverse, #FFF)}.mrx-calendar-body__grid__item.selected:hover{background-color:var(--brand-bg-primary-hover, #0F54AA)}.mrx-calendar-body__grid__item.other-month{background-color:transparent;color:var(--neutral-text-tertiary, #71767E)}.mrx-calendar-body__grid__item.other-month.selected{background-color:var(--brand-bg-secondary-default, #EDF5FF);color:var(--neutral-text-tertiary, #71767E)}.mrx-calendar-body__grid__item.other-month.selected:hover{background-color:var(--brand-bg-secondary-hover, #BED6F1)}.mrx-calendar-body__grid__item.other-month:hover{background-color:var(--neutral-bg-island-default, #F8F9FA)}.mrx-calendar-body__grid__item.disabled{background-color:transparent;color:var(--neutral-text-tertiary, #71767E)}.mrx-calendar-body__grid__item.disabled:hover{background-color:var(--neutral-bg-island-default, #F8F9FA)}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
208
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DateCalendarComponent, decorators: [{
209
+ type: Component,
210
+ args: [{ selector: 'mrx-date-calendar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mrx-calendar\">\r\n <div class=\"mrx-calendar-header\">\r\n <button *ngIf=\"view === 'days'\" class=\"mrx-calendar-header__chevron\" (click)=\"changeMonth(-1)\" [disabled]=\"isPreviousMonthDisabled()\">\r\n <span class=\"mrx-icon icon-chevron-left icon-font-16\"></span>\r\n </button>\r\n\r\n <button *ngIf=\"view === 'years'\" class=\"mrx-calendar-header__chevron\" (click)=\"changeYearRange(-1)\" [disabled]=\"isPreviousYearRangeDisabled()\">\r\n <span class=\"mrx-icon icon-chevron-left icon-font-16\"></span>\r\n </button>\r\n\r\n <button class=\"mrx-calendar-header__button\" (click)=\"switchView()\">\r\n {{ headerText }}\r\n </button>\r\n\r\n <button *ngIf=\"view === 'days'\" class=\"mrx-calendar-header__chevron\" (click)=\"changeMonth(1)\" [disabled]=\"isNextMonthDisabled()\">\r\n <span class=\"mrx-icon icon-chevron-right icon-font-16\"></span>\r\n </button>\r\n\r\n <button *ngIf=\"view === 'years'\" class=\"mrx-calendar-header__chevron\" (click)=\"changeYearRange(1)\" [disabled]=\"isNextYearRangeDisabled()\">\r\n <span class=\"mrx-icon icon-chevron-right icon-font-16\"></span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"mrx-calendar-body\">\r\n <ng-container [ngSwitch]=\"view\">\r\n <ng-container *ngSwitchCase=\"'years'\">\r\n <div class=\"mrx-calendar-body__grid mrx-calendar-body__grid--years\">\r\n <div\r\n *ngFor=\"let year of getYears()\"\r\n class=\"mrx-calendar-body__grid__item mrx-calendar-body__grid__item--year\"\r\n [class.selected]=\"isYearSelected(year)\"\r\n [class.disabled]=\"isYearDisabled(year)\"\r\n [class.hoverable]=\"!isYearDisabled(year)\"\r\n (click)=\"selectYear(year)\"\r\n >\r\n {{ year }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'months'\">\r\n <div class=\"mrx-calendar-body__grid mrx-calendar-body__grid--months\">\r\n <div\r\n *ngFor=\"let month of months\"\r\n class=\"mrx-calendar-body__grid__item mrx-calendar-body__grid__item--month\"\r\n [class.selected]=\"isMonthSelected(month)\"\r\n [class.disabled]=\"isMonthDisabled(month)\"\r\n [class.hoverable]=\"!isMonthDisabled(month)\"\r\n (click)=\"selectMonth(month)\"\r\n >\r\n {{ monthNames[month] }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n <div class=\"mrx-calendar-body__grid mrx-calendar-body__grid--days\">\r\n <div *ngFor=\"let day of daysOfWeek\" class=\"mrx-calendar-body__grid__label\">{{ day }}</div>\r\n\r\n <div\r\n *ngFor=\"let day of getCalendarDays()\"\r\n class=\"mrx-calendar-body__grid__item mrx-calendar-body__grid__item--day\"\r\n [class.selected]=\"isSelected(day)\"\r\n [class.other-month]=\"day.month !== currentMonth\"\r\n [class.disabled]=\"!isDateEnabled(day)\"\r\n [class.hoverable]=\"isDateEnabled(day)\"\r\n (click)=\"selectDate(day)\"\r\n >\r\n {{ day.day }}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n", styles: [".mrx-calendar{width:272px;border-radius:4px;background-color:var(--brand-bg-tertiary-default, #FFF);box-shadow:0 1px 4px #3a3a3a4d}.mrx-calendar-header{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--neutral-bg-divider, #DBDFE5)}.mrx-calendar-header__button{border:none;border-radius:4px;background-color:transparent;padding:6px 12px;text-align:center;flex-grow:1;font-family:var(--body-md-font-family);font-size:var(--body-md-font-size);font-weight:var(--body-md-font-weight);line-height:var(--body-md-line-height);color:var(--neutral-text-primary, #262626);cursor:pointer;transition:background-color .3s}.mrx-calendar-header__button:hover{background-color:var(--brand-bg-tertiary-hover, #EDF5FF)}.mrx-calendar-header__chevron{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border:none;border-radius:4px;background-color:transparent;cursor:pointer;transition:background-color .3s}.mrx-calendar-header__chevron:hover{background-color:var(--brand-bg-tertiary-hover, #EDF5FF)}.mrx-calendar-header__chevron:disabled{cursor:default}.mrx-calendar-header__chevron:disabled:hover{background-color:var(--neutral-bg-island-default, #F8F9FA)}.mrx-calendar-body{padding:8px 12px}.mrx-calendar-body__grid--days{display:grid;grid-template-columns:repeat(7,1fr);grid-gap:4px;gap:4px;text-align:center}.mrx-calendar-body__grid--months{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:8px;gap:8px;text-align:center}.mrx-calendar-body__grid--years{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:8px;gap:8px;text-align:center;max-height:190px;overflow-y:auto}.mrx-calendar-body__grid__label{display:flex;justify-content:center;align-items:center;width:32px;height:32px;font-family:var(--body-sm-font-family);font-size:var(--body-sm-font-size);font-weight:var(--body-sm-font-weight);line-height:var(--body-sm-line-height);color:var(--brand-text-accent, #003780)}.mrx-calendar-body__grid__item{display:flex;justify-content:center;align-items:center;border-radius:4px;font-family:var(--body-md-font-family);font-size:var(--body-md-font-size);font-weight:var(--body-md-font-weight);line-height:var(--body-md-line-height);color:var(--neutral-text-primary, #262626);transition:background-color .3s}.mrx-calendar-body__grid__item--day{width:32px;height:32px}.mrx-calendar-body__grid__item--month,.mrx-calendar-body__grid__item--year{height:32px}.mrx-calendar-body__grid__item.hoverable{cursor:pointer}.mrx-calendar-body__grid__item.hoverable:hover{background-color:var(--brand-bg-tertiary-hover, #EDF5FF)}.mrx-calendar-body__grid__item.selected{background-color:var(--brand-bg-primary-default, #2A6AB8);color:var(--neutral-text-inverse, #FFF)}.mrx-calendar-body__grid__item.selected:hover{background-color:var(--brand-bg-primary-hover, #0F54AA)}.mrx-calendar-body__grid__item.other-month{background-color:transparent;color:var(--neutral-text-tertiary, #71767E)}.mrx-calendar-body__grid__item.other-month.selected{background-color:var(--brand-bg-secondary-default, #EDF5FF);color:var(--neutral-text-tertiary, #71767E)}.mrx-calendar-body__grid__item.other-month.selected:hover{background-color:var(--brand-bg-secondary-hover, #BED6F1)}.mrx-calendar-body__grid__item.other-month:hover{background-color:var(--neutral-bg-island-default, #F8F9FA)}.mrx-calendar-body__grid__item.disabled{background-color:transparent;color:var(--neutral-text-tertiary, #71767E)}.mrx-calendar-body__grid__item.disabled:hover{background-color:var(--neutral-bg-island-default, #F8F9FA)}\n"] }]
211
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { selectedDate: [{
212
+ type: Input
213
+ }], dateSelected: [{
214
+ type: Output
215
+ }], close: [{
216
+ type: Output
217
+ }], minDate: [{
218
+ type: Input
219
+ }], maxDate: [{
220
+ type: Input
221
+ }] } });
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1jYWxlbmRhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0YS11aS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9pbnB1dC1kYXRlL2NvbXBvbmVudHMvZGF0ZS1jYWxlbmRhci9kYXRlLWNhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2lucHV0LWRhdGUvY29tcG9uZW50cy9kYXRlLWNhbGVuZGFyL2RhdGUtY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBaUIsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBUXRFLE1BQU0sT0FBTyxxQkFBcUI7SUFxQmhDLFlBQW9CLFNBQTRCO1FBQTVCLGNBQVMsR0FBVCxTQUFTLENBQW1CO1FBcEJ2QyxpQkFBWSxHQUFnQixJQUFJLENBQUM7UUFDaEMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3hDLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRTNDLGlCQUFZLEdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QyxnQkFBVyxHQUFXLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0MsU0FBSSxHQUFnQyxNQUFNLENBQUM7UUFDbEMsZUFBVSxHQUFhO1lBQzlCLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTTtZQUNwRCxNQUFNLEVBQUUsUUFBUSxF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QUNHLEtBQUs7c0JBQWQsTUFBTTtnQkE2QkgsT0FBTztzQkFEVixLQUFLO2dCQWNGLE9BQU87c0JBRFYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNsZWFuRGF0ZSwgaXNEYXRlSW5SYW5nZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvZGF0ZS1oZWxwZXJzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbXJ4LWRhdGUtY2FsZW5kYXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLWNhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRlLWNhbGVuZGFyLmNvbXBvbmVudC5sZXNzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGVDYWxlbmRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWREYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgQE91dHB1dCgpIGRhdGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcclxuICBAT3V0cHV0KCkgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIGN1cnJlbnRNb250aDogbnVtYmVyID0gbmV3IERhdGUoKS5nZXRNb250aCgpO1xyXG4gIGN1cnJlbnRZZWFyOiBudW1iZXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XHJcbiAgdmlldzogJ2RheXMnIHwgJ21vbnRocycgfCAneWVhcnMnID0gJ2RheXMnO1xyXG4gIHJlYWRvbmx5IG1vbnRoTmFtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgJ9Cv0L3QstCw0YDRjCcsICfQpNC10LLRgNCw0LvRjCcsICfQnNCw0YDRgicsICfQkNC/0YDQtdC70YwnLCAn0JzQsNC5JywgJ9CY0Y7QvdGMJyxcclxuICAgICfQmNGO0LvRjCcsICfQkNCy0LPRg9GB0YInLCAn0KHQtdC90YLRj9Cx0YDRjCcsICfQntC60YLRj9Cx0YDRjCcsICfQndC+0Y/QsdGA0YwnLCAn0JTQtdC60LDQsdGA0YwnXHJcbiAgXTtcclxuICByZWFkb25seSBkYXlzT2ZXZWVrOiBzdHJpbmdbXSA9IFsn0J/QnScsICfQktCiJywgJ9Ch0KAnLCAn0KfQoicsICfQn9CiJywgJ9Ch0JEnLCAn0JLQoSddO1xyXG4gIHJlYWRvbmx5IG1vbnRoczogbnVtYmVyW10gPSBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExXTtcclxuXHJcbiAgcHJpdmF0ZSBfbWluRGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX21heERhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9taW5EYXRlU3RyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9tYXhEYXRlU3RyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGNhbGVuZGFyRGF5c0NhY2hlOiB7IG1vbnRoOiBudW1iZXI7IHllYXI6IG51bWJlcjsgZGF5czogeyBkYXk6IG51bWJlciwgbW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyIH1bXSB9IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2RldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZikge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZERhdGUpIHtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRNb250aCgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRZZWFyID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlRGF0ZUJvdW5kcygpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgbWluRGF0ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuX21pbkRhdGVTdHIgIT09IHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX21pbkRhdGVTdHIgPSB2YWx1ZTtcclxuICAgICAgdGhpcy51cGRhdGVEYXRlQm91bmRzKCk7XHJcbiAgICAgIHRoaXMuX2RldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IG1pbkRhdGUoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZVN0cjtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1heERhdGUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl9tYXhEYXRlU3RyICE9PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9tYXhEYXRlU3RyID0gdmFsdWU7XHJcbiAgICAgIHRoaXMudXBkYXRlRGF0ZUJvdW5kcygpO1xyXG4gICAgICB0aGlzLl9kZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBtYXhEYXRlKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX21heERhdGVTdHI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZURhdGVCb3VuZHMoKSB7XHJcbiAgICB0aGlzLl9taW5EYXRlID0gdGhpcy5fbWluRGF0ZVN0ciA/IGNsZWFuRGF0ZSh0aGlzLl9taW5EYXRlU3RyKSA6IG51bGw7XHJcbiAgICB0aGlzLl9tYXhEYXRlID0gdGhpcy5fbWF4RGF0ZVN0ciA/IGNsZWFuRGF0ZSh0aGlzLl9tYXhEYXRlU3RyKSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXQgaGVhZGVyVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0aGlzLnZpZXcpIHtcclxuICAgICAgY2FzZSAnZGF5cyc6XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubW9udGhOYW1lc1t0aGlzLmN1cnJlbnRNb250aF19ICR7dGhpcy5jdXJyZW50WWVhcn1gO1xyXG4gICAgICBjYXNlICdtb250aHMnOlxyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmN1cnJlbnRZZWFyfWA7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICfQktGL0LHQtdGA0LjRgtC1INCz0L7QtCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzd2l0Y2hWaWV3KCkge1xyXG4gICAgdGhpcy52aWV3ID0gdGhpcy52aWV3ID09PSAnZGF5cycgPyAnbW9udGhzJyA6IHRoaXMudmlldyA9PT0gJ21vbnRocycgPyAneWVhcnMnIDogJ2RheXMnO1xyXG4gICAgdGhpcy5fZGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBnZXRDYWxlbmRhckRheXMoKTogeyBkYXk6IG51bWJlciwgbW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyIH1bXSB7XHJcbiAgICBpZiAodGhpcy5jYWxlbmRhckRheXNDYWNoZT8ubW9udGggPT09IHRoaXMuY3VycmVudE1vbnRoICYmIHRoaXMuY2FsZW5kYXJEYXlzQ2FjaGU/LnllYXIgPT09IHRoaXMuY3VycmVudFllYXIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2FsZW5kYXJEYXlzQ2FjaGUuZGF5cztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkYXlzSW5Nb250aCA9IG5ldyBEYXRlKHRoaXMuY3VycmVudFllYXIsIHRoaXMuY3VycmVudE1vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpO1xyXG4gICAgY29uc3QgcHJldk1vbnRoRGF5cyA9IG5ldyBEYXRlKHRoaXMuY3VycmVudFllYXIsIHRoaXMuY3VycmVudE1vbnRoLCAwKS5nZXREYXRlKCk7XHJcblxyXG4gICAgY29uc3QgZGF5czogeyBkYXk6IG51bWJlciwgbW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyIH1bXSA9IFtdO1xyXG4gICAgY29uc3QgcHJldkRheXNDb3VudCA9IDI7XHJcbiAgICBjb25zdCBwcmV2TW9udGggPSB0aGlzLmN1cnJlbnRNb250aCA9PT0gMCA/IDExIDogdGhpcy5jdXJyZW50TW9udGggLSAxO1xyXG4gICAgY29uc3QgcHJldlllYXIgPSB0aGlzLmN1cnJlbnRNb250aCA9PT0gMCA/IHRoaXMuY3VycmVudFllYXIgLSAxIDogdGhpcy5jdXJyZW50WWVhcjtcclxuICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuY3VycmVudE1vbnRoID09PSAxMSA/IDAgOiB0aGlzLmN1cnJlbnRNb250aCArIDE7XHJcbiAgICBjb25zdCBuZXh0WWVhciA9IHRoaXMuY3VycmVudE1vbnRoID09PSAxMSA/IHRoaXMuY3VycmVudFllYXIgKyAxIDogdGhpcy5jdXJyZW50WWVhcjtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZEYXlzQ291bnQ7IGkrKykge1xyXG4gICAgICBkYXlzLnB1c2goeyBkYXk6IHByZXZNb250aERheXMgLSBwcmV2RGF5c0NvdW50ICsgMSArIGksIG1vbnRoOiBwcmV2TW9udGgsIHllYXI6IHByZXZZZWFyIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGRheXNJbk1vbnRoOyBpKyspIHtcclxuICAgICAgZGF5cy5wdXNoKHsgZGF5OiBpLCBtb250aDogdGhpcy5jdXJyZW50TW9udGgsIHllYXI6IHRoaXMuY3VycmVudFllYXIgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVtYWluaW5nRGF5cyA9IDM1IC0gZGF5cy5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gcmVtYWluaW5nRGF5czsgaSsrKSB7XHJcbiAgICAgIGRheXMucHVzaCh7IGRheTogaSwgbW9udGg6IG5leHRNb250aCwgeWVhcjogbmV4dFllYXIgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYWxlbmRhckRheXNDYWNoZSA9IHsgbW9udGg6IHRoaXMuY3VycmVudE1vbnRoLCB5ZWFyOiB0aGlzLmN1cnJlbnRZZWFyLCBkYXlzIH07XHJcbiAgICByZXR1cm4gZGF5cztcclxuICB9XHJcblxyXG4gIGdldFllYXJzKCk6IG51bWJlcltdIHtcclxuICAgIGNvbnN0IGNlbnRlclllYXIgPSB0aGlzLnNlbGVjdGVkRGF0ZT8uZ2V0RnVsbFllYXIoKSA/PyB0aGlzLmN1cnJlbnRZZWFyO1xyXG4gICAgY29uc3Qgc3RhcnRZZWFyID0gY2VudGVyWWVhciAtIDU7XHJcblxyXG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBpKSA9PiBzdGFydFllYXIgKyBpKTtcclxuICB9XHJcblxyXG4gIGlzU2VsZWN0ZWQoZGF5OiB7IGRheTogbnVtYmVyLCBtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXIgfSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRGF0ZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIGRheS5kYXkgPT09IHRoaXMuc2VsZWN0ZWREYXRlLmdldERhdGUoKSAmJlxyXG4gICAgICBkYXkubW9udGggPT09IHRoaXMuc2VsZWN0ZWREYXRlLmdldE1vbnRoKCkgJiZcclxuICAgICAgZGF5LnllYXIgPT09IHRoaXMuc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc01vbnRoU2VsZWN0ZWQobW9udGg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlPy5nZXRNb250aCgpID09PSBtb250aCAmJiB0aGlzLnNlbGVjdGVkRGF0ZT8uZ2V0RnVsbFllYXIoKSA9PT0gdGhpcy5jdXJyZW50WWVhcjtcclxuICB9XHJcblxyXG4gIGlzWWVhclNlbGVjdGVkKHllYXI6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlPy5nZXRGdWxsWWVhcigpID09PSB5ZWFyO1xyXG4gIH1cclxuXHJcbiAgaXNEYXRlRW5hYmxlZChkYXk6IHsgZGF5OiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlciB9KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF5LnllYXIsIGRheS5tb250aCwgZGF5LmRheSk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAoIXRoaXMuX21pbkRhdGUgfHwgZGF0ZSA+PSB0aGlzLl9taW5EYXRlKSAmJlxyXG4gICAgICAoIXRoaXMuX21heERhdGUgfHwgZGF0ZSA8PSB0aGlzLl9tYXhEYXRlKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGlzTW9udGhEaXNhYmxlZChtb250aDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuX21pbkRhdGUgJiYgIXRoaXMuX21heERhdGUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBzdGFydE9mTW9udGggPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnRZZWFyLCBtb250aCwgMSk7XHJcbiAgICBjb25zdCBlbmRPZk1vbnRoID0gbmV3IERhdGUodGhpcy5jdXJyZW50WWVhciwgbW9udGggKyAxLCAwKTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAoISF0aGlzLl9taW5EYXRlICYmICFpc05hTih0aGlzLl9taW5EYXRlLmdldFRpbWUoKSkgJiYgZW5kT2ZNb250aCA8IHRoaXMuX21pbkRhdGUpIHx8XHJcbiAgICAgICghIXRoaXMuX21heERhdGUgJiYgIWlzTmFOKHRoaXMuX21heERhdGUuZ2V0VGltZSgpKSAmJiBzdGFydE9mTW9udGggPiB0aGlzLl9tYXhEYXRlKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGlzWWVhckRpc2FibGVkKHllYXI6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLl9taW5EYXRlICYmICF0aGlzLl9tYXhEYXRlKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgbWluWWVhciA9IHRoaXMuX21pbkRhdGUgJiYgIWlzTmFOKHRoaXMuX21pbkRhdGUuZ2V0VGltZSgpKSA/IHRoaXMuX21pbkRhdGUuZ2V0RnVsbFllYXIoKSA6IG51bGw7XHJcbiAgICBjb25zdCBtYXhZZWFyID0gdGhpcy5fbWF4RGF0ZSAmJiAhaXNOYU4odGhpcy5fbWF4RGF0ZS5nZXRUaW1lKCkpID8gdGhpcy5fbWF4RGF0ZS5nZXRGdWxsWWVhcigpIDogbnVsbDtcclxuXHJcbiAgICByZXR1cm4gKG1pblllYXIgIT09IG51bGwgJiYgeWVhciA8IG1pblllYXIpIHx8IChtYXhZZWFyICE9PSBudWxsICYmIHllYXIgPiBtYXhZZWFyKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdERhdGUoZGF5OiB7IGRheTogbnVtYmVyLCBtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXIgfSkge1xyXG4gICAgaWYgKCF0aGlzLmlzRGF0ZUVuYWJsZWQoZGF5KSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkYXkueWVhciwgZGF5Lm1vbnRoLCBkYXkuZGF5KTtcclxuXHJcbiAgICB0aGlzLmRhdGVTZWxlY3RlZC5lbWl0KGRhdGUpO1xyXG5cclxuICAgIGNvbnN0IG5lZWRzVXBkYXRlID0gZGF5Lm1vbnRoICE9PSB0aGlzLmN1cnJlbnRNb250aCB8fCBkYXkueWVhciAhPT0gdGhpcy5jdXJyZW50WWVhcjtcclxuXHJcbiAgICBpZiAobmVlZHNVcGRhdGUpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBkYXkubW9udGg7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50WWVhciA9IGRheS55ZWFyO1xyXG5cclxuICAgICAgICB0aGlzLl9kZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdE1vbnRoKG1vbnRoOiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmlzTW9udGhEaXNhYmxlZChtb250aCkpIHJldHVybjtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBtb250aDtcclxuICAgICAgdGhpcy52aWV3ID0gJ2RheXMnO1xyXG5cclxuICAgICAgdGhpcy5fZGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0WWVhcih5ZWFyOiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmlzWWVhckRpc2FibGVkKHllYXIpKSByZXR1cm47XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY3VycmVudFllYXIgPSB5ZWFyO1xyXG4gICAgICB0aGlzLnZpZXcgPSAnbW9udGhzJztcclxuXHJcbiAgICAgIHRoaXMuX2RldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNoYW5nZU1vbnRoKG9mZnNldDogbnVtYmVyKSB7XHJcbiAgICBsZXQgbmV3TW9udGggPSB0aGlzLmN1cnJlbnRNb250aCArIG9mZnNldDtcclxuICAgIGxldCBuZXdZZWFyID0gdGhpcy5jdXJyZW50WWVhcjtcclxuXHJcbiAgICBpZiAobmV3TW9udGggPCAwKSB7XHJcbiAgICAgIG5ld01vbnRoID0gMTE7XHJcbiAgICAgIG5ld1llYXItLTtcclxuICAgIH0gZWxzZSBpZiAobmV3TW9udGggPiAxMSkge1xyXG4gICAgICBuZXdNb250aCA9IDA7XHJcbiAgICAgIG5ld1llYXIrKztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmN1cnJlbnRNb250aCA9IG5ld01vbnRoO1xyXG4gICAgdGhpcy5jdXJyZW50WWVhciA9IG5ld1llYXI7XHJcbiAgICB0aGlzLl9kZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVllYXJSYW5nZShvZmZzZXQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5jdXJyZW50WWVhciArPSBvZmZzZXQgKiAxMjtcclxuICAgIHRoaXMuX2RldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgaXNQcmV2aW91c01vbnRoRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuX21pbkRhdGUpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLmN1cnJlbnRZZWFyLCB0aGlzLmN1cnJlbnRNb250aCwgMCkgPCB0aGlzLl9taW5EYXRlO1xyXG4gIH1cclxuXHJcbiAgaXNOZXh0TW9udGhEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5fbWF4RGF0ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuY3VycmVudFllYXIsIHRoaXMuY3VycmVudE1vbnRoICsgMSwgMSkgPiB0aGlzLl9tYXhEYXRlO1xyXG4gIH1cclxuXHJcbiAgaXNQcmV2aW91c1llYXJSYW5nZURpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLl9taW5EYXRlKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRZZWFycygpWzBdIDw9IHRoaXMuX21pbkRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICB9XHJcblxyXG4gIGlzTmV4dFllYXJSYW5nZURpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLl9tYXhEYXRlKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRZZWFycygpW3RoaXMuZ2V0WWVhcnMoKS5sZW5ndGggLSAxXSA+PSB0aGlzLl9tYXhEYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJtcngtY2FsZW5kYXJcIj5cclxuICA8ZGl2IGNsYXNzPVwibXJ4LWNhbGVuZGFyLWhlYWRlclwiPlxyXG4gICAgPGJ1dHRvbiAqbmdJZj1cInZpZXcgPT09ICdkYXlzJ1wiIGNsYXNzPVwibXJ4LWNhbGVuZGFyLWhlYWRlcl9fY2hldnJvblwiIChjbGljayk9XCJjaGFuZ2VNb250aCgtMSlcIiBbZGlzYWJsZWRdPVwiaXNQcmV2aW91c01vbnRoRGlzYWJsZWQoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tY2hldnJvbi1sZWZ0IGljb24tZm9udC0xNlwiPjwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxidXR0b24gKm5nSWY9XCJ2aWV3ID09PSAneWVhcnMnXCIgY2xhc3M9XCJtcngtY2FsZW5kYXItaGVhZGVyX19jaGV2cm9uXCIgKGNsaWNrKT1cImNoYW5nZVllYXJSYW5nZSgtMSlcIiBbZGlzYWJsZWRdPVwiaXNQcmV2aW91c1llYXJSYW5nZURpc2FibGVkKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJtcngtaWNvbiBpY29uLWNoZXZyb24tbGVmdCBpY29uLWZvbnQtMTZcIj48L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uIGNsYXNzPVwibXJ4LWNhbGVuZGFyLWhlYWRlcl9fYnV0dG9uXCIgKGNsaWNrKT1cInN3aXRjaFZpZXcoKVwiPlxyXG4gICAgICB7eyBoZWFkZXJUZXh0IH19XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uICpuZ0lmPVwidmlldyA9PT0gJ2RheXMnXCIgY2xhc3M9XCJtcngtY2FsZW5kYXItaGVhZGVyX19jaGV2cm9uXCIgKGNsaWNrKT1cImNoYW5nZU1vbnRoKDEpXCIgW2Rpc2FibGVkXT1cImlzTmV4dE1vbnRoRGlzYWJsZWQoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tY2hldnJvbi1yaWdodCBpY29uLWZvbnQtMTZcIj48L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uICpuZ0lmPVwidmlldyA9PT0gJ3llYXJzJ1wiIGNsYXNzPVwibXJ4LWNhbGVuZGFyLWhlYWRlcl9fY2hldnJvblwiIChjbGljayk9XCJjaGFuZ2VZZWFyUmFuZ2UoMSlcIiBbZGlzYWJsZWRdPVwiaXNOZXh0WWVhclJhbmdlRGlzYWJsZWQoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tY2hldnJvbi1yaWdodCBpY29uLWZvbnQtMTZcIj48L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cIm1yeC1jYWxlbmRhci1ib2R5XCI+XHJcbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJ2aWV3XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid5ZWFycydcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXJ4LWNhbGVuZGFyLWJvZHlfX2dyaWQgbXJ4LWNhbGVuZGFyLWJvZHlfX2dyaWQtLXllYXJzXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCB5ZWFyIG9mIGdldFllYXJzKClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1yeC1jYWxlbmRhci1ib2R5X19ncmlkX19pdGVtIG1yeC1jYWxlbmRhci1ib2R5X19ncmlkX19pdGVtLS15ZWFyXCJcclxuICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzWWVhclNlbGVjdGVkKHllYXIpXCJcclxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImlzWWVhckRpc2FibGVkKHllYXIpXCJcclxuICAgICAgICAgICAgW2NsYXNzLmhvdmVyYWJsZV09XCIhaXNZZWFyRGlzYWJsZWQoeWVhcilcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0WWVhcih5ZWFyKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IHllYXIgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidtb250aHMnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1yeC1jYWxlbmRhci1ib2R5X19ncmlkIG1yeC1jYWxlbmRhci1ib2R5X19ncmlkLS1tb250aHNcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1vbnRoIG9mIG1vbnRoc1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibXJ4LWNhbGVuZGFyLWJvZHlfX2dyaWRfX2l0ZW0gbXJ4LWNhbGVuZGFyLWJvZHlfX2dyaWRfX2l0ZW0tLW1vbnRoXCJcclxuICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzTW9udGhTZWxlY3RlZChtb250aClcIlxyXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiaXNNb250aERpc2FibGVkKG1vbnRoKVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5ob3ZlcmFibGVdPVwiIWlzTW9udGhEaXNhYmxlZChtb250aClcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TW9udGgobW9udGgpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgbW9udGhOYW1lc1ttb250aF0gfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXJ4LWNhbGVuZGFyLWJvZHlfX2dyaWQgbXJ4LWNhbGVuZGFyLWJvZHlfX2dyaWQtLWRheXNcIj5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRheSBvZiBkYXlzT2ZXZWVrXCIgY2xhc3M9XCJtcngtY2FsZW5kYXItYm9keV9fZ3JpZF9fbGFiZWxcIj57eyBkYXkgfX08L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXkgb2YgZ2V0Q2FsZW5kYXJEYXlzKClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1yeC1jYWxlbmRhci1ib2R5X19ncmlkX19pdGVtIG1yeC1jYWxlbmRhci1ib2R5X19ncmlkX19pdGVtLS1kYXlcIlxyXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChkYXkpXCJcclxuICAgICAgICAgICAgW2NsYXNzLm90aGVyLW1vbnRoXT1cImRheS5tb250aCAhPT0gY3VycmVudE1vbnRoXCJcclxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFpc0RhdGVFbmFibGVkKGRheSlcIlxyXG4gICAgICAgICAgICBbY2xhc3MuaG92ZXJhYmxlXT1cImlzRGF0ZUVuYWJsZWQoZGF5KVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3REYXRlKGRheSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBkYXkuZGF5IH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -0,0 +1,70 @@
1
+ export function formatDate(date, format) {
2
+ const pad = (n) => n.toString().padStart(2, '0');
3
+ const map = {
4
+ 'DD': pad(date.getDate()),
5
+ 'MM': pad(date.getMonth() + 1),
6
+ 'YYYY': date.getFullYear().toString()
7
+ };
8
+ return format.replace(/DD|MM|YYYY/g, match => map[match]);
9
+ }
10
+ export function toOutputFormat(date) {
11
+ const pad = (n) => n.toString().padStart(2, '0');
12
+ return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
13
+ }
14
+ export function isValidDate(date) {
15
+ return date instanceof Date && !isNaN(date.getTime());
16
+ }
17
+ export function getDaysInMonth(year, month) {
18
+ return new Date(year, month + 1, 0).getDate();
19
+ }
20
+ export function isDateInRange(date, minDate, maxDate) {
21
+ const min = minDate ? cleanDate(minDate) : null;
22
+ const max = maxDate ? cleanDate(maxDate) : null;
23
+ return (!min || date >= min) && (!max || date <= max);
24
+ }
25
+ export function clampDate(date, minDate, maxDate) {
26
+ const min = minDate ? cleanDate(minDate) : null;
27
+ const max = maxDate ? cleanDate(maxDate) : null;
28
+ if (min && date < min)
29
+ return new Date(min);
30
+ if (max && date > max)
31
+ return new Date(max);
32
+ return date;
33
+ }
34
+ export function getRangeErrorMessage(date, minDate, maxDate) {
35
+ const min = minDate ? cleanDate(minDate) : null;
36
+ const max = maxDate ? cleanDate(maxDate) : null;
37
+ if (min && date < min)
38
+ return 'Дата меньше минимальной';
39
+ if (max && date > max)
40
+ return 'Дата больше максимальной';
41
+ return '';
42
+ }
43
+ export function parseInputDate(dateStr) {
44
+ if (dateStr) {
45
+ const [year, month, day] = dateStr.split('-').map(Number);
46
+ const date = new Date(year, month - 1, day);
47
+ return isValidDate(date) ? date : null;
48
+ }
49
+ else {
50
+ return null;
51
+ }
52
+ }
53
+ export function adjustInvalidDate(year, month, day) {
54
+ const maxDays = getDaysInMonth(year, month);
55
+ if (day > maxDays) {
56
+ month += 1;
57
+ if (month > 11) {
58
+ month = 0;
59
+ year += 1;
60
+ }
61
+ day = 1;
62
+ }
63
+ year = Math.min(Math.max(year, 1900), 9999);
64
+ month = Math.min(Math.max(month, 0), 11);
65
+ return { year, month, day };
66
+ }
67
+ export const cleanDate = (date) => {
68
+ return new Date(new Date(date).setHours(0, 0, 0, 0));
69
+ };
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vaW5wdXQtZGF0ZS9oZWxwZXJzL2RhdGUtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQVUsRUFBRSxNQUFjO0lBQ25ELE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6RCxNQUFNLEdBQUcsR0FBOEI7UUFDckMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxFQUFFO0tBQ3RDLENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBVTtJQUN2QyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekQsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFB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QUFXO0lBQ3hFLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUMsSUFBSSxHQUFHLEdBQUcsT0FBTyxFQUFFO1FBQ2pCLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDWCxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUU7WUFDZCxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsSUFBSSxJQUFJLENBQUMsQ0FBQztTQUNYO1FBQ0QsR0FBRyxHQUFHLENBQUMsQ0FBQztLQUNUO0lBQ0QsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQVksRUFBUSxFQUFFO0lBQzlDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDdEQsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSwgZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIGNvbnN0IHBhZCA9IChuOiBudW1iZXIpID0+IG4udG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gIGNvbnN0IG1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICAgICdERCc6IHBhZChkYXRlLmdldERhdGUoKSksXHJcbiAgICAnTU0nOiBwYWQoZGF0ZS5nZXRNb250aCgpICsgMSksXHJcbiAgICAnWVlZWSc6IGRhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpXHJcbiAgfTtcclxuICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL0REfE1NfFlZWVkvZywgbWF0Y2ggPT4gbWFwW21hdGNoXSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0b091dHB1dEZvcm1hdChkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICBjb25zdCBwYWQgPSAobjogbnVtYmVyKSA9PiBuLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICByZXR1cm4gYCR7ZGF0ZS5nZXRGdWxsWWVhcigpfS0ke3BhZChkYXRlLmdldE1vbnRoKCkgKyAxKX0tJHtwYWQoZGF0ZS5nZXREYXRlKCkpfWA7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRGF0ZShkYXRlOiBEYXRlKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkYXRlLmdldFRpbWUoKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXlzSW5Nb250aCh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIpOiBudW1iZXIge1xyXG4gIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZUluUmFuZ2UoZGF0ZTogRGF0ZSwgbWluRGF0ZTogc3RyaW5nIHwgbnVsbCwgbWF4RGF0ZTogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IG1pbiA9IG1pbkRhdGUgPyBjbGVhbkRhdGUobWluRGF0ZSkgOiBudWxsO1xyXG4gIGNvbnN0IG1heCA9IG1heERhdGUgPyBjbGVhbkRhdGUobWF4RGF0ZSkgOiBudWxsO1xyXG5cclxuICByZXR1cm4gKCFtaW4gfHwgZGF0ZSA+PSBtaW4pICYmICghbWF4IHx8IGRhdGUgPD0gbWF4KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wRGF0ZShkYXRlOiBEYXRlLCBtaW5EYXRlOiBzdHJpbmcgfCBudWxsLCBtYXhEYXRlOiBzdHJpbmcgfCBudWxsKTogRGF0ZSB7XHJcbiAgY29uc3QgbWluID0gbWluRGF0ZSA/IGNsZWFuRGF0ZShtaW5EYXRlKSA6IG51bGw7XHJcbiAgY29uc3QgbWF4ID0gbWF4RGF0ZSA/IGNsZWFuRGF0ZShtYXhEYXRlKSA6IG51bGw7XHJcblxyXG4gIGlmIChtaW4gJiYgZGF0ZSA8IG1pbikgcmV0dXJuIG5ldyBEYXRlKG1pbik7XHJcbiAgaWYgKG1heCAmJiBkYXRlID4gbWF4KSByZXR1cm4gbmV3IERhdGUobWF4KTtcclxuXHJcbiAgcmV0dXJuIGRhdGU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5nZUVycm9yTWVzc2FnZShkYXRlOiBEYXRlLCBtaW5EYXRlOiBzdHJpbmcgfCBudWxsLCBtYXhEYXRlOiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHtcclxuICBjb25zdCBtaW4gPSBtaW5EYXRlID8gY2xlYW5EYXRlKG1pbkRhdGUpIDogbnVsbDtcclxuICBjb25zdCBtYXggPSBtYXhEYXRlID8gY2xlYW5EYXRlKG1heERhdGUpIDogbnVsbDtcclxuXHJcbiAgaWYgKG1pbiAmJiBkYXRlIDwgbWluKSByZXR1cm4gJ9CU0LDRgtCwINC80LXQvdGM0YjQtSDQvNC40L3QuNC80LDQu9GM0L3QvtC5JztcclxuICBpZiAobWF4ICYmIGRhdGUgPiBtYXgpIHJldHVybiAn0JTQsNGC0LAg0LHQvtC70YzRiNC1INC80LDQutGB0LjQvNCw0LvRjNC90L7QuSc7XHJcblxyXG4gIHJldHVybiAnJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSW5wdXREYXRlKGRhdGVTdHI6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcclxuICBpZiAoZGF0ZVN0cikge1xyXG4gICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXldID0gZGF0ZVN0ci5zcGxpdCgnLScpLm1hcChOdW1iZXIpO1xyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcclxuICAgIHJldHVybiBpc1ZhbGlkRGF0ZShkYXRlKSA/IGRhdGUgOiBudWxsXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWRqdXN0SW52YWxpZERhdGUoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyLCBkYXk6IG51bWJlcik6IHsgeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyLCBkYXk6IG51bWJlciB9IHtcclxuICBjb25zdCBtYXhEYXlzID0gZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpO1xyXG4gIGlmIChkYXkgPiBtYXhEYXlzKSB7XHJcbiAgICBtb250aCArPSAxO1xyXG4gICAgaWYgKG1vbnRoID4gMTEpIHtcclxuICAgICAgbW9udGggPSAwO1xyXG4gICAgICB5ZWFyICs9IDE7XHJcbiAgICB9XHJcbiAgICBkYXkgPSAxO1xyXG4gIH1cclxuICB5ZWFyID0gTWF0aC5taW4oTWF0aC5tYXgoeWVhciwgMTkwMCksIDk5OTkpO1xyXG4gIG1vbnRoID0gTWF0aC5taW4oTWF0aC5tYXgobW9udGgsIDApLCAxMSk7XHJcbiAgcmV0dXJuIHsgeWVhciwgbW9udGgsIGRheSB9O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgY2xlYW5EYXRlID0gKGRhdGU6IHN0cmluZyk6IERhdGUgPT4ge1xyXG4gIHJldHVybiBuZXcgRGF0ZShuZXcgRGF0ZShkYXRlKS5zZXRIb3VycygwLCAwLCAwLCAwKSlcclxufVxyXG4iXX0=