myrta-ui 1.1.91 → 1.1.92
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/form/input-date/components/date-calendar/date-calendar.component.mjs +222 -0
- package/esm2020/lib/components/form/input-date/helpers/date-helpers.mjs +70 -0
- package/esm2020/lib/components/form/input-date/input-date.component.mjs +313 -0
- package/esm2020/lib/components/form/input-date/input-date.enum.mjs +7 -0
- package/esm2020/lib/components/form/input-date/input-date.module.mjs +54 -0
- package/esm2020/lib/enums/overlay/index.mjs +78 -0
- package/esm2020/public-api.mjs +5 -2
- package/fesm2015/myrta-ui.mjs +759 -40
- package/fesm2015/myrta-ui.mjs.map +1 -1
- package/fesm2020/myrta-ui.mjs +752 -40
- package/fesm2020/myrta-ui.mjs.map +1 -1
- package/lib/components/form/input-date/components/date-calendar/date-calendar.component.d.ts +63 -0
- package/lib/components/form/input-date/helpers/date-helpers.d.ts +14 -0
- package/lib/components/form/input-date/input-date.component.d.ts +65 -0
- package/lib/components/form/input-date/input-date.enum.d.ts +11 -0
- package/lib/components/form/input-date/input-date.module.d.ts +14 -0
- package/lib/enums/overlay/index.d.ts +13 -0
- package/package.json +1 -1
- package/public-api.d.ts +4 -1
package/esm2020/lib/components/form/input-date/components/date-calendar/date-calendar.component.mjs
ADDED
|
@@ -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\r\n *ngIf=\"view === 'days'\"\r\n class=\"mrx-calendar-header__chevron\"\r\n [disabled]=\"isPreviousMonthDisabled()\"\r\n (click)=\"changeMonth(-1)\"\r\n >\r\n <span class=\"mrx-icon icon-chevron-left icon-font-16\"></span>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"view === 'years'\"\r\n class=\"mrx-calendar-header__chevron\"\r\n [disabled]=\"isPreviousYearRangeDisabled()\"\r\n (click)=\"changeYearRange(-1)\"\r\n >\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\r\n *ngIf=\"view === 'days'\"\r\n class=\"mrx-calendar-header__chevron\"\r\n [disabled]=\"isNextMonthDisabled()\"\r\n (click)=\"changeMonth(1)\"\r\n >\r\n <span class=\"mrx-icon icon-chevron-right icon-font-16\"></span>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"view === 'years'\"\r\n class=\"mrx-calendar-header__chevron\"\r\n [disabled]=\"isNextYearRangeDisabled()\"\r\n (click)=\"changeYearRange(1)\"\r\n >\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\">\r\n {{ day }}\r\n </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\r\n *ngIf=\"view === 'days'\"\r\n class=\"mrx-calendar-header__chevron\"\r\n [disabled]=\"isPreviousMonthDisabled()\"\r\n (click)=\"changeMonth(-1)\"\r\n >\r\n <span class=\"mrx-icon icon-chevron-left icon-font-16\"></span>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"view === 'years'\"\r\n class=\"mrx-calendar-header__chevron\"\r\n [disabled]=\"isPreviousYearRangeDisabled()\"\r\n (click)=\"changeYearRange(-1)\"\r\n >\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\r\n *ngIf=\"view === 'days'\"\r\n class=\"mrx-calendar-header__chevron\"\r\n [disabled]=\"isNextMonthDisabled()\"\r\n (click)=\"changeMonth(1)\"\r\n >\r\n <span class=\"mrx-icon icon-chevron-right icon-font-16\"></span>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"view === 'years'\"\r\n class=\"mrx-calendar-header__chevron\"\r\n [disabled]=\"isNextYearRangeDisabled()\"\r\n (click)=\"changeYearRange(1)\"\r\n >\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\">\r\n {{ day }}\r\n </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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1jYWxlbmRhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0YS11aS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9pbnB1dC1kYXRlL2NvbXBvbmVudHMvZGF0ZS1jYWxlbmRhci9kYXRlLWNhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2lucHV0LWRhdGUvY29tcG9uZW50cy9kYXRlLWNhbGVuZGFyL2RhdGUtY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFRdkQsTUFBTSxPQUFPLHFCQUFxQjtJQXlCaEMsWUFBb0IsU0FBNEI7UUFBNUIsY0FBUyxHQUFULFNBQVMsQ0FBbUI7UUF4QnZDLGlCQUFZLEdBQWdCLElBQUksQ0FBQztRQUNoQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDeEMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFM0MsaUJBQVksR0FBVyxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdDLGdCQUFXLEdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQyxTQUFJLEdBQWdDLE1BQU0sQ0FBQztRQUNsQyxlQUFVLEdBQWE7WUFDOUIsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNO1lBQ3BELE1BQU0sRUFBRSxRQUFRLEVB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LEtBQUs7c0JBQWQsTUFBTTtnQkFrQ0gsT0FBTztzQkFEVixLQUFLO2dCQWNGLE9BQU87c0JBRFYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNsZWFuRGF0ZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvZGF0ZS1oZWxwZXJzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbXJ4LWRhdGUtY2FsZW5kYXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLWNhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRlLWNhbGVuZGFyLmNvbXBvbmVudC5sZXNzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGVDYWxlbmRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWREYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgQE91dHB1dCgpIGRhdGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcclxuICBAT3V0cHV0KCkgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIGN1cnJlbnRNb250aDogbnVtYmVyID0gbmV3IERhdGUoKS5nZXRNb250aCgpO1xyXG4gIGN1cnJlbnRZZWFyOiBudW1iZXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XHJcbiAgdmlldzogJ2RheXMnIHwgJ21vbnRocycgfCAneWVhcnMnID0gJ2RheXMnO1xyXG4gIHJlYWRvbmx5IG1vbnRoTmFtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgJ9Cv0L3QstCw0YDRjCcsICfQpNC10LLRgNCw0LvRjCcsICfQnNCw0YDRgicsICfQkNC/0YDQtdC70YwnLCAn0JzQsNC5JywgJ9CY0Y7QvdGMJyxcclxuICAgICfQmNGO0LvRjCcsICfQkNCy0LPRg9GB0YInLCAn0KHQtdC90YLRj9Cx0YDRjCcsICfQntC60YLRj9Cx0YDRjCcsICfQndC+0Y/QsdGA0YwnLCAn0JTQtdC60LDQsdGA0YwnXHJcbiAgXTtcclxuICByZWFkb25seSBkYXlzT2ZXZWVrOiBzdHJpbmdbXSA9IFsn0J/QnScsICfQktCiJywgJ9Ch0KAnLCAn0KfQoicsICfQn9CiJywgJ9Ch0JEnLCAn0JLQoSddO1xyXG4gIHJlYWRvbmx5IG1vbnRoczogbnVtYmVyW10gPSBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExXTtcclxuXHJcbiAgcHJpdmF0ZSBfbWluRGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX21heERhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9taW5EYXRlU3RyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9tYXhEYXRlU3RyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGNhbGVuZGFyRGF5c0NhY2hlOiB7XHJcbiAgICBtb250aDogbnVtYmVyO1xyXG4gICAgeWVhcjogbnVtYmVyO1xyXG4gICAgZGF5czogeyBkYXk6IG51bWJlciwgbW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyIH1bXVxyXG4gIH0gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aCA9IHRoaXMuc2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudFllYXIgPSB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVEYXRlQm91bmRzKCk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBtaW5EYXRlKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fbWluRGF0ZVN0ciAhPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5fbWluRGF0ZVN0ciA9IHZhbHVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZURhdGVCb3VuZHMoKTtcclxuICAgICAgdGhpcy5fZGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbWluRGF0ZSgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9taW5EYXRlU3RyO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgbWF4RGF0ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuX21heERhdGVTdHIgIT09IHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX21heERhdGVTdHIgPSB2YWx1ZTtcclxuICAgICAgdGhpcy51cGRhdGVEYXRlQm91bmRzKCk7XHJcbiAgICAgIHRoaXMuX2RldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IG1heERhdGUoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZVN0cjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRGF0ZUJvdW5kcygpIHtcclxuICAgIHRoaXMuX21pbkRhdGUgPSB0aGlzLl9taW5EYXRlU3RyID8gY2xlYW5EYXRlKHRoaXMuX21pbkRhdGVTdHIpIDogbnVsbDtcclxuICAgIHRoaXMuX21heERhdGUgPSB0aGlzLl9tYXhEYXRlU3RyID8gY2xlYW5EYXRlKHRoaXMuX21heERhdGVTdHIpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGdldCBoZWFkZXJUZXh0KCk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHRoaXMudmlldykge1xyXG4gICAgICBjYXNlICdkYXlzJzpcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5tb250aE5hbWVzW3RoaXMuY3VycmVudE1vbnRoXX0gJHt0aGlzLmN1cnJlbnRZZWFyfWA7XHJcbiAgICAgIGNhc2UgJ21vbnRocyc6XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY3VycmVudFllYXJ9YDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJ9CS0YvQsdC10YDQuNGC0LUg0LPQvtC0JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN3aXRjaFZpZXcoKSB7XHJcbiAgICB0aGlzLnZpZXcgPSB0aGlzLnZpZXcgPT09ICdkYXlzJyA/ICdtb250aHMnIDogdGhpcy52aWV3ID09PSAnbW9udGhzJyA/ICd5ZWFycycgOiAnZGF5cyc7XHJcbiAgICB0aGlzLl9kZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGdldENhbGVuZGFyRGF5cygpOiB7IGRheTogbnVtYmVyLCBtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXIgfVtdIHtcclxuICAgIGlmICh0aGlzLmNhbGVuZGFyRGF5c0NhY2hlPy5tb250aCA9PT0gdGhpcy5jdXJyZW50TW9udGggJiYgdGhpcy5jYWxlbmRhckRheXNDYWNoZT8ueWVhciA9PT0gdGhpcy5jdXJyZW50WWVhcikge1xyXG4gICAgICByZXR1cm4gdGhpcy5jYWxlbmRhckRheXNDYWNoZS5kYXlzO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRheXNJbk1vbnRoID0gbmV3IERhdGUodGhpcy5jdXJyZW50WWVhciwgdGhpcy5jdXJyZW50TW9udGggKyAxLCAwKS5nZXREYXRlKCk7XHJcbiAgICBjb25zdCBwcmV2TW9udGhEYXlzID0gbmV3IERhdGUodGhpcy5jdXJyZW50WWVhciwgdGhpcy5jdXJyZW50TW9udGgsIDApLmdldERhdGUoKTtcclxuXHJcbiAgICBjb25zdCBkYXlzOiB7IGRheTogbnVtYmVyLCBtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXIgfVtdID0gW107XHJcbiAgICBjb25zdCBwcmV2RGF5c0NvdW50ID0gMjtcclxuICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMuY3VycmVudE1vbnRoID09PSAwID8gMTEgOiB0aGlzLmN1cnJlbnRNb250aCAtIDE7XHJcbiAgICBjb25zdCBwcmV2WWVhciA9IHRoaXMuY3VycmVudE1vbnRoID09PSAwID8gdGhpcy5jdXJyZW50WWVhciAtIDEgOiB0aGlzLmN1cnJlbnRZZWFyO1xyXG4gICAgY29uc3QgbmV4dE1vbnRoID0gdGhpcy5jdXJyZW50TW9udGggPT09IDExID8gMCA6IHRoaXMuY3VycmVudE1vbnRoICsgMTtcclxuICAgIGNvbnN0IG5leHRZZWFyID0gdGhpcy5jdXJyZW50TW9udGggPT09IDExID8gdGhpcy5jdXJyZW50WWVhciArIDEgOiB0aGlzLmN1cnJlbnRZZWFyO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldkRheXNDb3VudDsgaSsrKSB7XHJcbiAgICAgIGRheXMucHVzaCh7ZGF5OiBwcmV2TW9udGhEYXlzIC0gcHJldkRheXNDb3VudCArIDEgKyBpLCBtb250aDogcHJldk1vbnRoLCB5ZWFyOiBwcmV2WWVhcn0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGRheXNJbk1vbnRoOyBpKyspIHtcclxuICAgICAgZGF5cy5wdXNoKHtkYXk6IGksIG1vbnRoOiB0aGlzLmN1cnJlbnRNb250aCwgeWVhcjogdGhpcy5jdXJyZW50WWVhcn0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlbWFpbmluZ0RheXMgPSAzNSAtIGRheXMubGVuZ3RoO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHJlbWFpbmluZ0RheXM7IGkrKykge1xyXG4gICAgICBkYXlzLnB1c2goe2RheTogaSwgbW9udGg6IG5leHRNb250aCwgeWVhcjogbmV4dFllYXJ9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNhbGVuZGFyRGF5c0NhY2hlID0ge21vbnRoOiB0aGlzLmN1cnJlbnRNb250aCwgeWVhcjogdGhpcy5jdXJyZW50WWVhciwgZGF5c307XHJcbiAgICByZXR1cm4gZGF5cztcclxuICB9XHJcblxyXG4gIGdldFllYXJzKCk6IG51bWJlcltdIHtcclxuICAgIGNvbnN0IGNlbnRlclllYXIgPSB0aGlzLnNlbGVjdGVkRGF0ZT8uZ2V0RnVsbFllYXIoKSA/PyB0aGlzLmN1cnJlbnRZZWFyO1xyXG4gICAgY29uc3Qgc3RhcnRZZWFyID0gY2VudGVyWWVhciAtIDU7XHJcblxyXG4gICAgcmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDogMTJ9LCAoXywgaSkgPT4gc3RhcnRZZWFyICsgaSk7XHJcbiAgfVxyXG5cclxuICBpc1NlbGVjdGVkKGRheTogeyBkYXk6IG51bWJlciwgbW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyIH0pOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5zZWxlY3RlZERhdGUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBkYXkuZGF5ID09PSB0aGlzLnNlbGVjdGVkRGF0ZS5nZXREYXRlKCkgJiZcclxuICAgICAgZGF5Lm1vbnRoID09PSB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRNb250aCgpICYmXHJcbiAgICAgIGRheS55ZWFyID09PSB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaXNNb250aFNlbGVjdGVkKG1vbnRoOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRGF0ZT8uZ2V0TW9udGgoKSA9PT0gbW9udGggJiYgdGhpcy5zZWxlY3RlZERhdGU/LmdldEZ1bGxZZWFyKCkgPT09IHRoaXMuY3VycmVudFllYXI7XHJcbiAgfVxyXG5cclxuICBpc1llYXJTZWxlY3RlZCh5ZWFyOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRGF0ZT8uZ2V0RnVsbFllYXIoKSA9PT0geWVhcjtcclxuICB9XHJcblxyXG4gIGlzRGF0ZUVuYWJsZWQoZGF5OiB7IGRheTogbnVtYmVyLCBtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXIgfSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRheS55ZWFyLCBkYXkubW9udGgsIGRheS5kYXkpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKCF0aGlzLl9taW5EYXRlIHx8IGRhdGUgPj0gdGhpcy5fbWluRGF0ZSkgJiZcclxuICAgICAgKCF0aGlzLl9tYXhEYXRlIHx8IGRhdGUgPD0gdGhpcy5fbWF4RGF0ZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc01vbnRoRGlzYWJsZWQobW9udGg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLl9taW5EYXRlICYmICF0aGlzLl9tYXhEYXRlKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3Qgc3RhcnRPZk1vbnRoID0gbmV3IERhdGUodGhpcy5jdXJyZW50WWVhciwgbW9udGgsIDEpO1xyXG4gICAgY29uc3QgZW5kT2ZNb250aCA9IG5ldyBEYXRlKHRoaXMuY3VycmVudFllYXIsIG1vbnRoICsgMSwgMCk7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgKCEhdGhpcy5fbWluRGF0ZSAmJiAhaXNOYU4odGhpcy5fbWluRGF0ZS5nZXRUaW1lKCkpICYmIGVuZE9mTW9udGggPCB0aGlzLl9taW5EYXRlKSB8fFxyXG4gICAgICAoISF0aGlzLl9tYXhEYXRlICYmICFpc05hTih0aGlzLl9tYXhEYXRlLmdldFRpbWUoKSkgJiYgc3RhcnRPZk1vbnRoID4gdGhpcy5fbWF4RGF0ZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc1llYXJEaXNhYmxlZCh5ZWFyOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5fbWluRGF0ZSAmJiAhdGhpcy5fbWF4RGF0ZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IG1pblllYXIgPSB0aGlzLl9taW5EYXRlICYmICFpc05hTih0aGlzLl9taW5EYXRlLmdldFRpbWUoKSkgPyB0aGlzLl9taW5EYXRlLmdldEZ1bGxZZWFyKCkgOiBudWxsO1xyXG4gICAgY29uc3QgbWF4WWVhciA9IHRoaXMuX21heERhdGUgJiYgIWlzTmFOKHRoaXMuX21heERhdGUuZ2V0VGltZSgpKSA/IHRoaXMuX21heERhdGUuZ2V0RnVsbFllYXIoKSA6IG51bGw7XHJcblxyXG4gICAgcmV0dXJuIChtaW5ZZWFyICE9PSBudWxsICYmIHllYXIgPCBtaW5ZZWFyKSB8fCAobWF4WWVhciAhPT0gbnVsbCAmJiB5ZWFyID4gbWF4WWVhcik7XHJcbiAgfVxyXG5cclxuICBzZWxlY3REYXRlKGRheTogeyBkYXk6IG51bWJlciwgbW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyIH0pIHtcclxuICAgIGlmICghdGhpcy5pc0RhdGVFbmFibGVkKGRheSkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF5LnllYXIsIGRheS5tb250aCwgZGF5LmRheSk7XHJcblxyXG4gICAgdGhpcy5kYXRlU2VsZWN0ZWQuZW1pdChkYXRlKTtcclxuXHJcbiAgICBjb25zdCBuZWVkc1VwZGF0ZSA9IGRheS5tb250aCAhPT0gdGhpcy5jdXJyZW50TW9udGggfHwgZGF5LnllYXIgIT09IHRoaXMuY3VycmVudFllYXI7XHJcblxyXG4gICAgaWYgKG5lZWRzVXBkYXRlKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gZGF5Lm1vbnRoO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFllYXIgPSBkYXkueWVhcjtcclxuXHJcbiAgICAgICAgdGhpcy5fZGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0TW9udGgobW9udGg6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuaXNNb250aERpc2FibGVkKG1vbnRoKSkgcmV0dXJuO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aCA9IG1vbnRoO1xyXG4gICAgICB0aGlzLnZpZXcgPSAnZGF5cyc7XHJcblxyXG4gICAgICB0aGlzLl9kZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0WWVhcih5ZWFyOiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmlzWWVhckRpc2FibGVkKHllYXIpKSByZXR1cm47XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY3VycmVudFllYXIgPSB5ZWFyO1xyXG4gICAgICB0aGlzLnZpZXcgPSAnbW9udGhzJztcclxuXHJcbiAgICAgIHRoaXMuX2RldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VNb250aChvZmZzZXQ6IG51bWJlcikge1xyXG4gICAgbGV0IG5ld01vbnRoID0gdGhpcy5jdXJyZW50TW9udGggKyBvZmZzZXQ7XHJcbiAgICBsZXQgbmV3WWVhciA9IHRoaXMuY3VycmVudFllYXI7XHJcblxyXG4gICAgaWYgKG5ld01vbnRoIDwgMCkge1xyXG4gICAgICBuZXdNb250aCA9IDExO1xyXG4gICAgICBuZXdZZWFyLS07XHJcbiAgICB9IGVsc2UgaWYgKG5ld01vbnRoID4gMTEpIHtcclxuICAgICAgbmV3TW9udGggPSAwO1xyXG4gICAgICBuZXdZZWFyKys7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBuZXdNb250aDtcclxuICAgIHRoaXMuY3VycmVudFllYXIgPSBuZXdZZWFyO1xyXG4gICAgdGhpcy5fZGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VZZWFyUmFuZ2Uob2Zmc2V0OiBudW1iZXIpIHtcclxuICAgIHRoaXMuY3VycmVudFllYXIgKz0gb2Zmc2V0ICogMTI7XHJcbiAgICB0aGlzLl9kZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGlzUHJldmlvdXNNb250aERpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLl9taW5EYXRlKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gbmV3IERhdGUodGhpcy5jdXJyZW50WWVhciwgdGhpcy5jdXJyZW50TW9udGgsIDApIDwgdGhpcy5fbWluRGF0ZTtcclxuICB9XHJcblxyXG4gIGlzTmV4dE1vbnRoRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuX21heERhdGUpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLmN1cnJlbnRZZWFyLCB0aGlzLmN1cnJlbnRNb250aCArIDEsIDEpID4gdGhpcy5fbWF4RGF0ZTtcclxuICB9XHJcblxyXG4gIGlzUHJldmlvdXNZZWFyUmFuZ2VEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5fbWluRGF0ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0WWVhcnMoKVswXSA8PSB0aGlzLl9taW5EYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgfVxyXG5cclxuICBpc05leHRZZWFyUmFuZ2VEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5fbWF4RGF0ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0WWVhcnMoKVt0aGlzLmdldFllYXJzKCkubGVuZ3RoIC0gMV0gPj0gdGhpcy5fbWF4RGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibXJ4LWNhbGVuZGFyXCI+XHJcbiAgPGRpdiBjbGFzcz1cIm1yeC1jYWxlbmRhci1oZWFkZXJcIj5cclxuICAgIDxidXR0b25cclxuICAgICAgKm5nSWY9XCJ2aWV3ID09PSAnZGF5cydcIlxyXG4gICAgICBjbGFzcz1cIm1yeC1jYWxlbmRhci1oZWFkZXJfX2NoZXZyb25cIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNQcmV2aW91c01vbnRoRGlzYWJsZWQoKVwiXHJcbiAgICAgIChjbGljayk9XCJjaGFuZ2VNb250aCgtMSlcIlxyXG4gICAgPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tY2hldnJvbi1sZWZ0IGljb24tZm9udC0xNlwiPjwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxidXR0b25cclxuICAgICAgKm5nSWY9XCJ2aWV3ID09PSAneWVhcnMnXCJcclxuICAgICAgY2xhc3M9XCJtcngtY2FsZW5kYXItaGVhZGVyX19jaGV2cm9uXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzUHJldmlvdXNZZWFyUmFuZ2VEaXNhYmxlZCgpXCJcclxuICAgICAgKGNsaWNrKT1cImNoYW5nZVllYXJSYW5nZSgtMSlcIlxyXG4gICAgPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tY2hldnJvbi1sZWZ0IGljb24tZm9udC0xNlwiPjwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxidXR0b24gY2xhc3M9XCJtcngtY2FsZW5kYXItaGVhZGVyX19idXR0b25cIiAoY2xpY2spPVwic3dpdGNoVmlldygpXCI+XHJcbiAgICAgIHt7IGhlYWRlclRleHQgfX1cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxidXR0b25cclxuICAgICAgKm5nSWY9XCJ2aWV3ID09PSAnZGF5cydcIlxyXG4gICAgICBjbGFzcz1cIm1yeC1jYWxlbmRhci1oZWFkZXJfX2NoZXZyb25cIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNOZXh0TW9udGhEaXNhYmxlZCgpXCJcclxuICAgICAgKGNsaWNrKT1cImNoYW5nZU1vbnRoKDEpXCJcclxuICAgID5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJtcngtaWNvbiBpY29uLWNoZXZyb24tcmlnaHQgaWNvbi1mb250LTE2XCI+PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cInZpZXcgPT09ICd5ZWFycydcIlxyXG4gICAgICBjbGFzcz1cIm1yeC1jYWxlbmRhci1oZWFkZXJfX2NoZXZyb25cIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNOZXh0WWVhclJhbmdlRGlzYWJsZWQoKVwiXHJcbiAgICAgIChjbGljayk9XCJjaGFuZ2VZZWFyUmFuZ2UoMSlcIlxyXG4gICAgPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tY2hldnJvbi1yaWdodCBpY29uLWZvbnQtMTZcIj48L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cIm1yeC1jYWxlbmRhci1ib2R5XCI+XHJcbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJ2aWV3XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid5ZWFycydcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXJ4LWNhbGVuZGFyLWJvZHlfX2dyaWQgbXJ4LWNhbGVuZGFyLWJvZHlfX2dyaWQtLXllYXJzXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCB5ZWFyIG9mIGdldFllYXJzKClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1yeC1jYWxlbmRhci1ib2R5X19ncmlkX19pdGVtIG1yeC1jYWxlbmRhci1ib2R5X19ncmlkX19pdGVtLS15ZWFyXCJcclxuICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzWWVhclNlbGVjdGVkKHllYXIpXCJcclxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImlzWWVhckRpc2FibGVkKHllYXIpXCJcclxuICAgICAgICAgICAgW2NsYXNzLmhvdmVyYWJsZV09XCIhaXNZZWFyRGlzYWJsZWQoeWVhcilcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0WWVhcih5ZWFyKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IHllYXIgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidtb250aHMnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1yeC1jYWxlbmRhci1ib2R5X19ncmlkIG1yeC1jYWxlbmRhci1ib2R5X19ncmlkLS1tb250aHNcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1vbnRoIG9mIG1vbnRoc1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibXJ4LWNhbGVuZGFyLWJvZHlfX2dyaWRfX2l0ZW0gbXJ4LWNhbGVuZGFyLWJvZHlfX2dyaWRfX2l0ZW0tLW1vbnRoXCJcclxuICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzTW9udGhTZWxlY3RlZChtb250aClcIlxyXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiaXNNb250aERpc2FibGVkKG1vbnRoKVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5ob3ZlcmFibGVdPVwiIWlzTW9udGhEaXNhYmxlZChtb250aClcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TW9udGgobW9udGgpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgbW9udGhOYW1lc1ttb250aF0gfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXJ4LWNhbGVuZGFyLWJvZHlfX2dyaWQgbXJ4LWNhbGVuZGFyLWJvZHlfX2dyaWQtLWRheXNcIj5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRheSBvZiBkYXlzT2ZXZWVrXCIgY2xhc3M9XCJtcngtY2FsZW5kYXItYm9keV9fZ3JpZF9fbGFiZWxcIj5cclxuICAgICAgICAgICAge3sgZGF5IH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXkgb2YgZ2V0Q2FsZW5kYXJEYXlzKClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1yeC1jYWxlbmRhci1ib2R5X19ncmlkX19pdGVtIG1yeC1jYWxlbmRhci1ib2R5X19ncmlkX19pdGVtLS1kYXlcIlxyXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChkYXkpXCJcclxuICAgICAgICAgICAgW2NsYXNzLm90aGVyLW1vbnRoXT1cImRheS5tb250aCAhPT0gY3VycmVudE1vbnRoXCJcclxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFpc0RhdGVFbmFibGVkKGRheSlcIlxyXG4gICAgICAgICAgICBbY2xhc3MuaG92ZXJhYmxlXT1cImlzRGF0ZUVuYWJsZWQoZGF5KVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3REYXRlKGRheSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBkYXkuZGF5IH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+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=
|