@spartan-ng/brain 0.0.1-alpha.717 → 0.0.1-alpha.718
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.
|
@@ -1,180 +1,9 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { input, Directive, InjectionToken, inject, signal, Injectable, ChangeDetectorRef, Injector, booleanAttribute, model, numberAttribute, computed, contentChild, linkedSignal, afterNextRender, DestroyRef, ElementRef, effect, ViewContainerRef, TemplateRef, untracked } from '@angular/core';
|
|
3
3
|
import { injectDateAdapter } from '@spartan-ng/brain/date-time';
|
|
4
4
|
import { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
5
5
|
import { BrnSelect } from '@spartan-ng/brain/select';
|
|
6
6
|
|
|
7
|
-
const BrnCalendarToken = new InjectionToken('BrnCalendarToken');
|
|
8
|
-
function provideBrnCalendar(instance) {
|
|
9
|
-
return { provide: BrnCalendarToken, useExisting: instance };
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Inject the calendar component.
|
|
13
|
-
*/
|
|
14
|
-
function injectBrnCalendar() {
|
|
15
|
-
return inject(BrnCalendarToken);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
class BrnCalendarCellButton {
|
|
19
|
-
/** Access the date adapter */
|
|
20
|
-
_dateAdapter = injectDateAdapter();
|
|
21
|
-
/** Access the calendar component */
|
|
22
|
-
_calendar = injectBrnCalendar();
|
|
23
|
-
/** Access the element ref */
|
|
24
|
-
_elementRef = inject(ElementRef);
|
|
25
|
-
/** The date this cell represents */
|
|
26
|
-
date = input.required(...(ngDevMode ? [{ debugName: "date" }] : /* istanbul ignore next */ []));
|
|
27
|
-
/** Whether this date is currently selected */
|
|
28
|
-
selected = computed(() => this._calendar.isSelected(this.date()), ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
|
|
29
|
-
start = computed(() => this._calendar.isStartOfRange(this.date()), ...(ngDevMode ? [{ debugName: "start" }] : /* istanbul ignore next */ []));
|
|
30
|
-
end = computed(() => this._calendar.isEndOfRange(this.date()), ...(ngDevMode ? [{ debugName: "end" }] : /* istanbul ignore next */ []));
|
|
31
|
-
betweenRange = computed(() => this._calendar.isBetweenRange(this.date()), ...(ngDevMode ? [{ debugName: "betweenRange" }] : /* istanbul ignore next */ []));
|
|
32
|
-
highlighted = computed(() => this._calendar.highlightDays().some((d) => this._dateAdapter.isSameDay(this.date(), d)), ...(ngDevMode ? [{ debugName: "highlighted" }] : /* istanbul ignore next */ []));
|
|
33
|
-
/** Whether this date is focusable */
|
|
34
|
-
focusable = computed(() => this._dateAdapter.isSameDay(this._calendar.focusedDate(), this.date()), ...(ngDevMode ? [{ debugName: "focusable" }] : /* istanbul ignore next */ []));
|
|
35
|
-
outside = computed(() => {
|
|
36
|
-
const focusedDate = this._calendar.focusedDate();
|
|
37
|
-
return !this._dateAdapter.isSameMonth(this.date(), focusedDate);
|
|
38
|
-
}, ...(ngDevMode ? [{ debugName: "outside" }] : /* istanbul ignore next */ []));
|
|
39
|
-
/** Whether this date is today */
|
|
40
|
-
today = computed(() => this._dateAdapter.isSameDay(this.date(), this._dateAdapter.now()), ...(ngDevMode ? [{ debugName: "today" }] : /* istanbul ignore next */ []));
|
|
41
|
-
/** Whether this date is disabled */
|
|
42
|
-
disabled = computed(() => this._calendar.isDateDisabled(this.date()) || this._calendar.disabled(), ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
43
|
-
/**
|
|
44
|
-
* Focus the previous cell.
|
|
45
|
-
*/
|
|
46
|
-
focusPrevious(event) {
|
|
47
|
-
event.preventDefault();
|
|
48
|
-
event.stopPropagation();
|
|
49
|
-
// in rtl, the arrow keys are reversed.
|
|
50
|
-
const targetDate = this._dateAdapter.add(this._calendar.focusedDate(), {
|
|
51
|
-
days: this.getDirection() === 'rtl' ? 1 : -1,
|
|
52
|
-
});
|
|
53
|
-
this._calendar.setFocusedDate(targetDate);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Focus the next cell.
|
|
57
|
-
*/
|
|
58
|
-
focusNext(event) {
|
|
59
|
-
event.preventDefault();
|
|
60
|
-
event.stopPropagation();
|
|
61
|
-
const targetDate = this._dateAdapter.add(this._calendar.focusedDate(), {
|
|
62
|
-
days: this.getDirection() === 'rtl' ? -1 : 1,
|
|
63
|
-
});
|
|
64
|
-
this._calendar.setFocusedDate(targetDate);
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Focus the above cell.
|
|
68
|
-
*/
|
|
69
|
-
focusAbove(event) {
|
|
70
|
-
event.preventDefault();
|
|
71
|
-
event.stopPropagation();
|
|
72
|
-
this._calendar.setFocusedDate(this._dateAdapter.subtract(this._calendar.focusedDate(), { days: 7 }));
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Focus the below cell.
|
|
76
|
-
*/
|
|
77
|
-
focusBelow(event) {
|
|
78
|
-
event.preventDefault();
|
|
79
|
-
event.stopPropagation();
|
|
80
|
-
this._calendar.setFocusedDate(this._dateAdapter.add(this._calendar.focusedDate(), { days: 7 }));
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Focus the first date of the month.
|
|
84
|
-
*/
|
|
85
|
-
focusFirst(event) {
|
|
86
|
-
event.preventDefault();
|
|
87
|
-
event.stopPropagation();
|
|
88
|
-
this._calendar.setFocusedDate(this._dateAdapter.startOfMonth(this._calendar.focusedDate()));
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Focus the last date of the month.
|
|
92
|
-
*/
|
|
93
|
-
focusLast(event) {
|
|
94
|
-
event.preventDefault();
|
|
95
|
-
event.stopPropagation();
|
|
96
|
-
this._calendar.setFocusedDate(this._dateAdapter.endOfMonth(this._calendar.focusedDate()));
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Focus the same date in the previous month.
|
|
100
|
-
*/
|
|
101
|
-
focusPreviousMonth(event) {
|
|
102
|
-
event.preventDefault();
|
|
103
|
-
event.stopPropagation();
|
|
104
|
-
const date = this._dateAdapter.getDate(this._calendar.focusedDate());
|
|
105
|
-
let previousMonthTarget = this._dateAdapter.startOfMonth(this._calendar.focusedDate());
|
|
106
|
-
previousMonthTarget = this._dateAdapter.subtract(previousMonthTarget, { months: 1 });
|
|
107
|
-
const lastDay = this._dateAdapter.endOfMonth(previousMonthTarget);
|
|
108
|
-
// if we are on a date that does not exist in the previous month, we should focus the last day of the month.
|
|
109
|
-
if (date > this._dateAdapter.getDate(lastDay)) {
|
|
110
|
-
this._calendar.setFocusedDate(lastDay);
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
this._calendar.setFocusedDate(this._dateAdapter.set(previousMonthTarget, { day: date }));
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Focus the same date in the next month.
|
|
118
|
-
*/
|
|
119
|
-
focusNextMonth(event) {
|
|
120
|
-
event.preventDefault();
|
|
121
|
-
event.stopPropagation();
|
|
122
|
-
const date = this._dateAdapter.getDate(this._calendar.focusedDate());
|
|
123
|
-
let nextMonthTarget = this._dateAdapter.startOfMonth(this._calendar.focusedDate());
|
|
124
|
-
nextMonthTarget = this._dateAdapter.add(nextMonthTarget, { months: 1 });
|
|
125
|
-
const lastDay = this._dateAdapter.endOfMonth(nextMonthTarget);
|
|
126
|
-
// if we are on a date that does not exist in the next month, we should focus the last day of the month.
|
|
127
|
-
if (date > this._dateAdapter.getDate(lastDay)) {
|
|
128
|
-
this._calendar.setFocusedDate(lastDay);
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
this._calendar.setFocusedDate(this._dateAdapter.set(nextMonthTarget, { day: date }));
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Get the direction of the element.
|
|
136
|
-
*/
|
|
137
|
-
getDirection() {
|
|
138
|
-
return getComputedStyle(this._elementRef.nativeElement).direction === 'rtl' ? 'rtl' : 'ltr';
|
|
139
|
-
}
|
|
140
|
-
focus() {
|
|
141
|
-
this._elementRef.nativeElement.focus();
|
|
142
|
-
}
|
|
143
|
-
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnCalendarCellButton, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
144
|
-
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: BrnCalendarCellButton, isStandalone: true, selector: "button[brnCalendarCellButton]", inputs: { date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { "role": "gridcell", "type": "button" }, listeners: { "click": "_calendar.selectDate(date())", "keydown.arrowLeft": "focusPrevious($event)", "keydown.arrowRight": "focusNext($event)", "keydown.arrowUp": "focusAbove($event)", "keydown.arrowDown": "focusBelow($event)", "keydown.home": "focusFirst($event)", "keydown.end": "focusLast($event)", "keydown.pageUp": "focusPreviousMonth($event)", "keydown.pageDown": "focusNextMonth($event)" }, properties: { "tabindex": "focusable() ? 0 : -1", "attr.data-outside": "!selected() && outside() && (!end() && !start())? '' : null", "attr.data-today": "today() && !selected() ? '' : null", "attr.data-selected": "selected() ? '' : null", "attr.data-disabled": "disabled() ? '' : null", "attr.aria-selected": "selected() ? 'true' : null", "attr.aria-disabled": "disabled() ? 'true' : null", "attr.data-range-start": "start() ? \"\" : null", "attr.data-range-end": "end() ? \"\" : null", "attr.data-highlighted": "highlighted() ? \"\" : null", "attr.data-range-between": "betweenRange() ? \"\" : null", "disabled": "disabled()" } }, ngImport: i0 });
|
|
145
|
-
}
|
|
146
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnCalendarCellButton, decorators: [{
|
|
147
|
-
type: Directive,
|
|
148
|
-
args: [{
|
|
149
|
-
selector: 'button[brnCalendarCellButton]',
|
|
150
|
-
host: {
|
|
151
|
-
role: 'gridcell',
|
|
152
|
-
'[tabindex]': 'focusable() ? 0 : -1',
|
|
153
|
-
type: 'button',
|
|
154
|
-
'[attr.data-outside]': "!selected() && outside() && (!end() && !start())? '' : null",
|
|
155
|
-
'[attr.data-today]': "today() && !selected() ? '' : null",
|
|
156
|
-
'[attr.data-selected]': "selected() ? '' : null",
|
|
157
|
-
'[attr.data-disabled]': "disabled() ? '' : null",
|
|
158
|
-
'[attr.aria-selected]': "selected() ? 'true' : null",
|
|
159
|
-
'[attr.aria-disabled]': "disabled() ? 'true' : null",
|
|
160
|
-
'[attr.data-range-start]': 'start() ? "" : null',
|
|
161
|
-
'[attr.data-range-end]': 'end() ? "" : null',
|
|
162
|
-
'[attr.data-highlighted]': 'highlighted() ? "" : null',
|
|
163
|
-
'[attr.data-range-between]': 'betweenRange() ? "" : null',
|
|
164
|
-
'[disabled]': 'disabled()',
|
|
165
|
-
'(click)': '_calendar.selectDate(date())',
|
|
166
|
-
'(keydown.arrowLeft)': 'focusPrevious($event)',
|
|
167
|
-
'(keydown.arrowRight)': 'focusNext($event)',
|
|
168
|
-
'(keydown.arrowUp)': 'focusAbove($event)',
|
|
169
|
-
'(keydown.arrowDown)': 'focusBelow($event)',
|
|
170
|
-
'(keydown.home)': 'focusFirst($event)',
|
|
171
|
-
'(keydown.end)': 'focusLast($event)',
|
|
172
|
-
'(keydown.pageUp)': 'focusPreviousMonth($event)',
|
|
173
|
-
'(keydown.pageDown)': 'focusNextMonth($event)',
|
|
174
|
-
},
|
|
175
|
-
}]
|
|
176
|
-
}], propDecorators: { date: [{ type: i0.Input, args: [{ isSignal: true, alias: "date", required: true }] }] } });
|
|
177
|
-
|
|
178
7
|
let uniqueId = 0;
|
|
179
8
|
class BrnCalendarHeader {
|
|
180
9
|
/** The unique id for the header */
|
|
@@ -194,6 +23,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
194
23
|
}]
|
|
195
24
|
}], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }] } });
|
|
196
25
|
|
|
26
|
+
const BrnCalendarToken = new InjectionToken('BrnCalendarToken');
|
|
27
|
+
function provideBrnCalendar(instance) {
|
|
28
|
+
return { provide: BrnCalendarToken, useExisting: instance };
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Inject the calendar component.
|
|
32
|
+
*/
|
|
33
|
+
function injectBrnCalendar() {
|
|
34
|
+
return inject(BrnCalendarToken);
|
|
35
|
+
}
|
|
36
|
+
|
|
197
37
|
const BrnCalendarI18nToken = new InjectionToken('BrnCalendarI18nToken');
|
|
198
38
|
/**
|
|
199
39
|
* Provide the calendar i18n configuration.
|
|
@@ -259,6 +99,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
259
99
|
args: [{ providedIn: 'root' }]
|
|
260
100
|
}] });
|
|
261
101
|
|
|
102
|
+
const compareDays = (a, b, dateAdapter) => {
|
|
103
|
+
if (a === b)
|
|
104
|
+
return true;
|
|
105
|
+
if (!a || !b)
|
|
106
|
+
return false;
|
|
107
|
+
if (a.length !== b.length)
|
|
108
|
+
return false;
|
|
109
|
+
return a.every((day, i) => dateAdapter.isSameDay(day, b[i]));
|
|
110
|
+
};
|
|
111
|
+
|
|
262
112
|
class BrnCalendar {
|
|
263
113
|
_i18n = injectBrnCalendarI18n();
|
|
264
114
|
/** Access the date adapter */
|
|
@@ -286,8 +136,7 @@ class BrnCalendar {
|
|
|
286
136
|
defaultFocusedDate = input(...(ngDevMode ? [undefined, { debugName: "defaultFocusedDate" }] : /* istanbul ignore next */ []));
|
|
287
137
|
/** @internal Access the header */
|
|
288
138
|
header = contentChild(BrnCalendarHeader, ...(ngDevMode ? [{ debugName: "header" }] : /* istanbul ignore next */ []));
|
|
289
|
-
|
|
290
|
-
_cells = contentChildren(BrnCalendarCellButton, { ...(ngDevMode ? { debugName: "_cells" } : /* istanbul ignore next */ {}), descendants: true });
|
|
139
|
+
_cells = [];
|
|
291
140
|
/**
|
|
292
141
|
* The focused date.
|
|
293
142
|
*/
|
|
@@ -318,7 +167,7 @@ class BrnCalendar {
|
|
|
318
167
|
firstDay = this._dateAdapter.add(firstDay, { days: 1 });
|
|
319
168
|
}
|
|
320
169
|
return days;
|
|
321
|
-
}, ...(ngDevMode ?
|
|
170
|
+
}, { ...(ngDevMode ? { debugName: "days" } : /* istanbul ignore next */ {}), equal: (a, b) => compareDays(a, b, this._dateAdapter) });
|
|
322
171
|
/** @internal Constrain a date to the min and max boundaries */
|
|
323
172
|
constrainDate(date) {
|
|
324
173
|
const min = this.min();
|
|
@@ -383,8 +232,7 @@ class BrnCalendar {
|
|
|
383
232
|
// wait until the cells have all updated
|
|
384
233
|
afterNextRender({
|
|
385
234
|
write: () => {
|
|
386
|
-
|
|
387
|
-
const cell = this._cells().find((c) => this._dateAdapter.isSameDay(c.date(), date));
|
|
235
|
+
const cell = this._cells.find((c) => this._dateAdapter.isSameDay(c.date(), date));
|
|
388
236
|
if (cell) {
|
|
389
237
|
cell.focus();
|
|
390
238
|
}
|
|
@@ -422,8 +270,17 @@ class BrnCalendar {
|
|
|
422
270
|
isBetweenRange(_) {
|
|
423
271
|
return false;
|
|
424
272
|
}
|
|
273
|
+
unregisterCalendarCell(cell) {
|
|
274
|
+
const index = this._cells.indexOf(cell);
|
|
275
|
+
if (index !== -1) {
|
|
276
|
+
this._cells.splice(index, 1);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
registerCalendarCell(cell) {
|
|
280
|
+
this._cells.push(cell);
|
|
281
|
+
}
|
|
425
282
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnCalendar, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
426
|
-
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.16", type: BrnCalendar, isStandalone: true, selector: "[brnCalendar]", inputs: { highlightDays: { classPropertyName: "highlightDays", publicName: "highlightDays", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: false, transformFunction: null }, dateDisabled: { classPropertyName: "dateDisabled", publicName: "dateDisabled", isSignal: true, isRequired: false, transformFunction: null }, weekStartsOn: { classPropertyName: "weekStartsOn", publicName: "weekStartsOn", isSignal: true, isRequired: false, transformFunction: null }, defaultFocusedDate: { classPropertyName: "defaultFocusedDate", publicName: "defaultFocusedDate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { date: "dateChange" }, providers: [provideBrnCalendar(BrnCalendar)], queries: [{ propertyName: "header", first: true, predicate: BrnCalendarHeader, descendants: true, isSignal: true }
|
|
283
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.16", type: BrnCalendar, isStandalone: true, selector: "[brnCalendar]", inputs: { highlightDays: { classPropertyName: "highlightDays", publicName: "highlightDays", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: false, transformFunction: null }, dateDisabled: { classPropertyName: "dateDisabled", publicName: "dateDisabled", isSignal: true, isRequired: false, transformFunction: null }, weekStartsOn: { classPropertyName: "weekStartsOn", publicName: "weekStartsOn", isSignal: true, isRequired: false, transformFunction: null }, defaultFocusedDate: { classPropertyName: "defaultFocusedDate", publicName: "defaultFocusedDate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { date: "dateChange" }, providers: [provideBrnCalendar(BrnCalendar)], queries: [{ propertyName: "header", first: true, predicate: BrnCalendarHeader, descendants: true, isSignal: true }], ngImport: i0 });
|
|
427
284
|
}
|
|
428
285
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnCalendar, decorators: [{
|
|
429
286
|
type: Directive,
|
|
@@ -431,9 +288,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
431
288
|
selector: '[brnCalendar]',
|
|
432
289
|
providers: [provideBrnCalendar(BrnCalendar)],
|
|
433
290
|
}]
|
|
434
|
-
}], propDecorators: { highlightDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightDays", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], date: [{ type: i0.Input, args: [{ isSignal: true, alias: "date", required: false }] }, { type: i0.Output, args: ["dateChange"] }], dateDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateDisabled", required: false }] }], weekStartsOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "weekStartsOn", required: false }] }], defaultFocusedDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultFocusedDate", required: false }] }], header: [{ type: i0.ContentChild, args: [i0.forwardRef(() => BrnCalendarHeader), { isSignal: true }] }]
|
|
435
|
-
descendants: true,
|
|
436
|
-
}, isSignal: true }] }] } });
|
|
291
|
+
}], propDecorators: { highlightDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightDays", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], date: [{ type: i0.Input, args: [{ isSignal: true, alias: "date", required: false }] }, { type: i0.Output, args: ["dateChange"] }], dateDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateDisabled", required: false }] }], weekStartsOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "weekStartsOn", required: false }] }], defaultFocusedDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultFocusedDate", required: false }] }], header: [{ type: i0.ContentChild, args: [i0.forwardRef(() => BrnCalendarHeader), { isSignal: true }] }] } });
|
|
437
292
|
|
|
438
293
|
class BrnCalendarCell {
|
|
439
294
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnCalendarCell, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
@@ -449,6 +304,171 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
449
304
|
}]
|
|
450
305
|
}] });
|
|
451
306
|
|
|
307
|
+
class BrnCalendarCellButton {
|
|
308
|
+
/** Access the date adapter */
|
|
309
|
+
_dateAdapter = injectDateAdapter();
|
|
310
|
+
_destroyRef = inject(DestroyRef);
|
|
311
|
+
/** Access the calendar component */
|
|
312
|
+
_calendar = injectBrnCalendar();
|
|
313
|
+
/** Access the element ref */
|
|
314
|
+
_elementRef = inject(ElementRef);
|
|
315
|
+
/** The date this cell represents */
|
|
316
|
+
date = input.required(...(ngDevMode ? [{ debugName: "date" }] : /* istanbul ignore next */ []));
|
|
317
|
+
/** Whether this date is currently selected */
|
|
318
|
+
selected = computed(() => this._calendar.isSelected(this.date()), ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
|
|
319
|
+
start = computed(() => this._calendar.isStartOfRange(this.date()), ...(ngDevMode ? [{ debugName: "start" }] : /* istanbul ignore next */ []));
|
|
320
|
+
end = computed(() => this._calendar.isEndOfRange(this.date()), ...(ngDevMode ? [{ debugName: "end" }] : /* istanbul ignore next */ []));
|
|
321
|
+
betweenRange = computed(() => this._calendar.isBetweenRange(this.date()), ...(ngDevMode ? [{ debugName: "betweenRange" }] : /* istanbul ignore next */ []));
|
|
322
|
+
highlighted = computed(() => this._calendar.highlightDays().some((d) => this._dateAdapter.isSameDay(this.date(), d)), ...(ngDevMode ? [{ debugName: "highlighted" }] : /* istanbul ignore next */ []));
|
|
323
|
+
constructor() {
|
|
324
|
+
this._calendar.registerCalendarCell(this);
|
|
325
|
+
this._destroyRef.onDestroy(() => this._calendar.unregisterCalendarCell(this));
|
|
326
|
+
}
|
|
327
|
+
/** Whether this date is focusable */
|
|
328
|
+
focusable = computed(() => this._dateAdapter.isSameDay(this._calendar.focusedDate(), this.date()), ...(ngDevMode ? [{ debugName: "focusable" }] : /* istanbul ignore next */ []));
|
|
329
|
+
outside = computed(() => {
|
|
330
|
+
const focusedDate = this._calendar.focusedDate();
|
|
331
|
+
return !this._dateAdapter.isSameMonth(this.date(), focusedDate);
|
|
332
|
+
}, ...(ngDevMode ? [{ debugName: "outside" }] : /* istanbul ignore next */ []));
|
|
333
|
+
/** Whether this date is today */
|
|
334
|
+
today = computed(() => this._dateAdapter.isSameDay(this.date(), this._dateAdapter.now()), ...(ngDevMode ? [{ debugName: "today" }] : /* istanbul ignore next */ []));
|
|
335
|
+
/** Whether this date is disabled */
|
|
336
|
+
disabled = computed(() => this._calendar.isDateDisabled(this.date()) || this._calendar.disabled(), ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
337
|
+
/**
|
|
338
|
+
* Focus the previous cell.
|
|
339
|
+
*/
|
|
340
|
+
focusPrevious(event) {
|
|
341
|
+
event.preventDefault();
|
|
342
|
+
event.stopPropagation();
|
|
343
|
+
// in rtl, the arrow keys are reversed.
|
|
344
|
+
const targetDate = this._dateAdapter.add(this._calendar.focusedDate(), {
|
|
345
|
+
days: this.getDirection() === 'rtl' ? 1 : -1,
|
|
346
|
+
});
|
|
347
|
+
this._calendar.setFocusedDate(targetDate);
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Focus the next cell.
|
|
351
|
+
*/
|
|
352
|
+
focusNext(event) {
|
|
353
|
+
event.preventDefault();
|
|
354
|
+
event.stopPropagation();
|
|
355
|
+
const targetDate = this._dateAdapter.add(this._calendar.focusedDate(), {
|
|
356
|
+
days: this.getDirection() === 'rtl' ? -1 : 1,
|
|
357
|
+
});
|
|
358
|
+
this._calendar.setFocusedDate(targetDate);
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Focus the above cell.
|
|
362
|
+
*/
|
|
363
|
+
focusAbove(event) {
|
|
364
|
+
event.preventDefault();
|
|
365
|
+
event.stopPropagation();
|
|
366
|
+
this._calendar.setFocusedDate(this._dateAdapter.subtract(this._calendar.focusedDate(), { days: 7 }));
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Focus the below cell.
|
|
370
|
+
*/
|
|
371
|
+
focusBelow(event) {
|
|
372
|
+
event.preventDefault();
|
|
373
|
+
event.stopPropagation();
|
|
374
|
+
this._calendar.setFocusedDate(this._dateAdapter.add(this._calendar.focusedDate(), { days: 7 }));
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Focus the first date of the month.
|
|
378
|
+
*/
|
|
379
|
+
focusFirst(event) {
|
|
380
|
+
event.preventDefault();
|
|
381
|
+
event.stopPropagation();
|
|
382
|
+
this._calendar.setFocusedDate(this._dateAdapter.startOfMonth(this._calendar.focusedDate()));
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Focus the last date of the month.
|
|
386
|
+
*/
|
|
387
|
+
focusLast(event) {
|
|
388
|
+
event.preventDefault();
|
|
389
|
+
event.stopPropagation();
|
|
390
|
+
this._calendar.setFocusedDate(this._dateAdapter.endOfMonth(this._calendar.focusedDate()));
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Focus the same date in the previous month.
|
|
394
|
+
*/
|
|
395
|
+
focusPreviousMonth(event) {
|
|
396
|
+
event.preventDefault();
|
|
397
|
+
event.stopPropagation();
|
|
398
|
+
const date = this._dateAdapter.getDate(this._calendar.focusedDate());
|
|
399
|
+
let previousMonthTarget = this._dateAdapter.startOfMonth(this._calendar.focusedDate());
|
|
400
|
+
previousMonthTarget = this._dateAdapter.subtract(previousMonthTarget, { months: 1 });
|
|
401
|
+
const lastDay = this._dateAdapter.endOfMonth(previousMonthTarget);
|
|
402
|
+
// if we are on a date that does not exist in the previous month, we should focus the last day of the month.
|
|
403
|
+
if (date > this._dateAdapter.getDate(lastDay)) {
|
|
404
|
+
this._calendar.setFocusedDate(lastDay);
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
this._calendar.setFocusedDate(this._dateAdapter.set(previousMonthTarget, { day: date }));
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Focus the same date in the next month.
|
|
412
|
+
*/
|
|
413
|
+
focusNextMonth(event) {
|
|
414
|
+
event.preventDefault();
|
|
415
|
+
event.stopPropagation();
|
|
416
|
+
const date = this._dateAdapter.getDate(this._calendar.focusedDate());
|
|
417
|
+
let nextMonthTarget = this._dateAdapter.startOfMonth(this._calendar.focusedDate());
|
|
418
|
+
nextMonthTarget = this._dateAdapter.add(nextMonthTarget, { months: 1 });
|
|
419
|
+
const lastDay = this._dateAdapter.endOfMonth(nextMonthTarget);
|
|
420
|
+
// if we are on a date that does not exist in the next month, we should focus the last day of the month.
|
|
421
|
+
if (date > this._dateAdapter.getDate(lastDay)) {
|
|
422
|
+
this._calendar.setFocusedDate(lastDay);
|
|
423
|
+
}
|
|
424
|
+
else {
|
|
425
|
+
this._calendar.setFocusedDate(this._dateAdapter.set(nextMonthTarget, { day: date }));
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Get the direction of the element.
|
|
430
|
+
*/
|
|
431
|
+
getDirection() {
|
|
432
|
+
return getComputedStyle(this._elementRef.nativeElement).direction === 'rtl' ? 'rtl' : 'ltr';
|
|
433
|
+
}
|
|
434
|
+
focus() {
|
|
435
|
+
this._elementRef.nativeElement.focus();
|
|
436
|
+
}
|
|
437
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnCalendarCellButton, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
438
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: BrnCalendarCellButton, isStandalone: true, selector: "button[brnCalendarCellButton]", inputs: { date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { "role": "gridcell", "type": "button" }, listeners: { "click": "_calendar.selectDate(date())", "keydown.arrowLeft": "focusPrevious($event)", "keydown.arrowRight": "focusNext($event)", "keydown.arrowUp": "focusAbove($event)", "keydown.arrowDown": "focusBelow($event)", "keydown.home": "focusFirst($event)", "keydown.end": "focusLast($event)", "keydown.pageUp": "focusPreviousMonth($event)", "keydown.pageDown": "focusNextMonth($event)" }, properties: { "tabindex": "focusable() ? 0 : -1", "attr.data-outside": "!selected() && outside() && (!end() && !start())? true : null", "attr.data-today": "today() && !selected() ? true : null", "attr.data-selected-single": "selected() && !start() && !end() && !betweenRange() ? true : null", "attr.data-disabled": "disabled() ? true : null", "attr.aria-selected": "selected() ? true : null", "attr.aria-disabled": "disabled() ? true : null", "attr.data-range-start": "start() ? true : null", "attr.data-range-end": "end() ? true : null", "attr.data-highlighted": "highlighted() ? true : null", "attr.data-range-middle": "betweenRange() ? true : null", "disabled": "disabled()" } }, ngImport: i0 });
|
|
439
|
+
}
|
|
440
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnCalendarCellButton, decorators: [{
|
|
441
|
+
type: Directive,
|
|
442
|
+
args: [{
|
|
443
|
+
selector: 'button[brnCalendarCellButton]',
|
|
444
|
+
host: {
|
|
445
|
+
role: 'gridcell',
|
|
446
|
+
'[tabindex]': 'focusable() ? 0 : -1',
|
|
447
|
+
type: 'button',
|
|
448
|
+
'[attr.data-outside]': '!selected() && outside() && (!end() && !start())? true : null',
|
|
449
|
+
'[attr.data-today]': 'today() && !selected() ? true : null',
|
|
450
|
+
'[attr.data-selected-single]': 'selected() && !start() && !end() && !betweenRange() ? true : null',
|
|
451
|
+
'[attr.data-disabled]': 'disabled() ? true : null',
|
|
452
|
+
'[attr.aria-selected]': 'selected() ? true : null',
|
|
453
|
+
'[attr.aria-disabled]': 'disabled() ? true : null',
|
|
454
|
+
'[attr.data-range-start]': 'start() ? true : null',
|
|
455
|
+
'[attr.data-range-end]': 'end() ? true : null',
|
|
456
|
+
'[attr.data-highlighted]': 'highlighted() ? true : null',
|
|
457
|
+
'[attr.data-range-middle]': 'betweenRange() ? true : null',
|
|
458
|
+
'[disabled]': 'disabled()',
|
|
459
|
+
'(click)': '_calendar.selectDate(date())',
|
|
460
|
+
'(keydown.arrowLeft)': 'focusPrevious($event)',
|
|
461
|
+
'(keydown.arrowRight)': 'focusNext($event)',
|
|
462
|
+
'(keydown.arrowUp)': 'focusAbove($event)',
|
|
463
|
+
'(keydown.arrowDown)': 'focusBelow($event)',
|
|
464
|
+
'(keydown.home)': 'focusFirst($event)',
|
|
465
|
+
'(keydown.end)': 'focusLast($event)',
|
|
466
|
+
'(keydown.pageUp)': 'focusPreviousMonth($event)',
|
|
467
|
+
'(keydown.pageDown)': 'focusNextMonth($event)',
|
|
468
|
+
},
|
|
469
|
+
}]
|
|
470
|
+
}], ctorParameters: () => [], propDecorators: { date: [{ type: i0.Input, args: [{ isSignal: true, alias: "date", required: true }] }] } });
|
|
471
|
+
|
|
452
472
|
class BrnCalendarGrid {
|
|
453
473
|
/** Access the calendar component */
|
|
454
474
|
_calendar = injectBrnCalendar();
|
|
@@ -772,6 +792,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
772
792
|
|
|
773
793
|
class BrnCalendarMulti {
|
|
774
794
|
_i18n = injectBrnCalendarI18n();
|
|
795
|
+
_cells = [];
|
|
775
796
|
/**
|
|
776
797
|
* Determine if a date is the start of a range. In a date picker, this is always false.
|
|
777
798
|
* @param date The date to check.
|
|
@@ -828,8 +849,6 @@ class BrnCalendarMulti {
|
|
|
828
849
|
defaultFocusedDate = input(...(ngDevMode ? [undefined, { debugName: "defaultFocusedDate" }] : /* istanbul ignore next */ []));
|
|
829
850
|
/** @internal Access the header */
|
|
830
851
|
header = contentChild(BrnCalendarHeader, ...(ngDevMode ? [{ debugName: "header" }] : /* istanbul ignore next */ []));
|
|
831
|
-
/** Store the cells */
|
|
832
|
-
_cells = contentChildren(BrnCalendarCellButton, { ...(ngDevMode ? { debugName: "_cells" } : /* istanbul ignore next */ {}), descendants: true });
|
|
833
852
|
/**
|
|
834
853
|
* The focused date.
|
|
835
854
|
*/
|
|
@@ -860,7 +879,7 @@ class BrnCalendarMulti {
|
|
|
860
879
|
firstDay = this._dateAdapter.add(firstDay, { days: 1 });
|
|
861
880
|
}
|
|
862
881
|
return days;
|
|
863
|
-
}, ...(ngDevMode ?
|
|
882
|
+
}, { ...(ngDevMode ? { debugName: "days" } : /* istanbul ignore next */ {}), equal: (a, b) => compareDays(a, b, this._dateAdapter) });
|
|
864
883
|
isSelected(date) {
|
|
865
884
|
return this.date()?.some((d) => this._dateAdapter.isSameDay(d, date)) ?? false;
|
|
866
885
|
}
|
|
@@ -938,8 +957,7 @@ class BrnCalendarMulti {
|
|
|
938
957
|
// wait until the cells have all updated
|
|
939
958
|
afterNextRender({
|
|
940
959
|
write: () => {
|
|
941
|
-
|
|
942
|
-
const cell = this._cells().find((c) => this._dateAdapter.isSameDay(c.date(), date));
|
|
960
|
+
const cell = this._cells.find((c) => this._dateAdapter.isSameDay(c.date(), date));
|
|
943
961
|
if (cell) {
|
|
944
962
|
cell.focus();
|
|
945
963
|
}
|
|
@@ -950,8 +968,17 @@ class BrnCalendarMulti {
|
|
|
950
968
|
// we must update the view to ensure the focused cell is visible.
|
|
951
969
|
this._changeDetector.detectChanges();
|
|
952
970
|
}
|
|
971
|
+
unregisterCalendarCell(cell) {
|
|
972
|
+
const index = this._cells.indexOf(cell);
|
|
973
|
+
if (index !== -1) {
|
|
974
|
+
this._cells.splice(index, 1);
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
registerCalendarCell(cell) {
|
|
978
|
+
this._cells.push(cell);
|
|
979
|
+
}
|
|
953
980
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnCalendarMulti, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
954
|
-
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.16", type: BrnCalendarMulti, isStandalone: true, selector: "[brnCalendarMulti]", inputs: { highlightDays: { classPropertyName: "highlightDays", publicName: "highlightDays", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, minSelection: { classPropertyName: "minSelection", publicName: "minSelection", isSignal: true, isRequired: false, transformFunction: null }, maxSelection: { classPropertyName: "maxSelection", publicName: "maxSelection", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: false, transformFunction: null }, dateDisabled: { classPropertyName: "dateDisabled", publicName: "dateDisabled", isSignal: true, isRequired: false, transformFunction: null }, weekStartsOn: { classPropertyName: "weekStartsOn", publicName: "weekStartsOn", isSignal: true, isRequired: false, transformFunction: null }, defaultFocusedDate: { classPropertyName: "defaultFocusedDate", publicName: "defaultFocusedDate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { date: "dateChange" }, providers: [provideBrnCalendar(BrnCalendarMulti)], queries: [{ propertyName: "header", first: true, predicate: BrnCalendarHeader, descendants: true, isSignal: true }
|
|
981
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.16", type: BrnCalendarMulti, isStandalone: true, selector: "[brnCalendarMulti]", inputs: { highlightDays: { classPropertyName: "highlightDays", publicName: "highlightDays", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, minSelection: { classPropertyName: "minSelection", publicName: "minSelection", isSignal: true, isRequired: false, transformFunction: null }, maxSelection: { classPropertyName: "maxSelection", publicName: "maxSelection", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: false, transformFunction: null }, dateDisabled: { classPropertyName: "dateDisabled", publicName: "dateDisabled", isSignal: true, isRequired: false, transformFunction: null }, weekStartsOn: { classPropertyName: "weekStartsOn", publicName: "weekStartsOn", isSignal: true, isRequired: false, transformFunction: null }, defaultFocusedDate: { classPropertyName: "defaultFocusedDate", publicName: "defaultFocusedDate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { date: "dateChange" }, providers: [provideBrnCalendar(BrnCalendarMulti)], queries: [{ propertyName: "header", first: true, predicate: BrnCalendarHeader, descendants: true, isSignal: true }], ngImport: i0 });
|
|
955
982
|
}
|
|
956
983
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnCalendarMulti, decorators: [{
|
|
957
984
|
type: Directive,
|
|
@@ -959,11 +986,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
959
986
|
selector: '[brnCalendarMulti]',
|
|
960
987
|
providers: [provideBrnCalendar(BrnCalendarMulti)],
|
|
961
988
|
}]
|
|
962
|
-
}], propDecorators: { highlightDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightDays", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], minSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "minSelection", required: false }] }], maxSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxSelection", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], date: [{ type: i0.Input, args: [{ isSignal: true, alias: "date", required: false }] }, { type: i0.Output, args: ["dateChange"] }], dateDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateDisabled", required: false }] }], weekStartsOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "weekStartsOn", required: false }] }], defaultFocusedDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultFocusedDate", required: false }] }], header: [{ type: i0.ContentChild, args: [i0.forwardRef(() => BrnCalendarHeader), { isSignal: true }] }]
|
|
963
|
-
descendants: true,
|
|
964
|
-
}, isSignal: true }] }] } });
|
|
989
|
+
}], propDecorators: { highlightDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightDays", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], minSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "minSelection", required: false }] }], maxSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxSelection", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], date: [{ type: i0.Input, args: [{ isSignal: true, alias: "date", required: false }] }, { type: i0.Output, args: ["dateChange"] }], dateDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateDisabled", required: false }] }], weekStartsOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "weekStartsOn", required: false }] }], defaultFocusedDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultFocusedDate", required: false }] }], header: [{ type: i0.ContentChild, args: [i0.forwardRef(() => BrnCalendarHeader), { isSignal: true }] }] } });
|
|
965
990
|
|
|
966
991
|
class BrnCalendarRange {
|
|
992
|
+
_cells = [];
|
|
967
993
|
_i18n = injectBrnCalendarI18n();
|
|
968
994
|
// /** Access the date adapter */
|
|
969
995
|
_dateAdapter = injectDateAdapter();
|
|
@@ -988,8 +1014,6 @@ class BrnCalendarRange {
|
|
|
988
1014
|
defaultFocusedDate = input(...(ngDevMode ? [undefined, { debugName: "defaultFocusedDate" }] : /* istanbul ignore next */ []));
|
|
989
1015
|
/** @internal Access the header */
|
|
990
1016
|
header = contentChild(BrnCalendarHeader, ...(ngDevMode ? [{ debugName: "header" }] : /* istanbul ignore next */ []));
|
|
991
|
-
/** Store the cells */
|
|
992
|
-
_cells = contentChildren(BrnCalendarCellButton, { ...(ngDevMode ? { debugName: "_cells" } : /* istanbul ignore next */ {}), descendants: true });
|
|
993
1017
|
/**
|
|
994
1018
|
* The focused date.
|
|
995
1019
|
*/
|
|
@@ -1028,7 +1052,7 @@ class BrnCalendarRange {
|
|
|
1028
1052
|
firstDay = this._dateAdapter.add(firstDay, { days: 1 });
|
|
1029
1053
|
}
|
|
1030
1054
|
return days;
|
|
1031
|
-
}, ...(ngDevMode ?
|
|
1055
|
+
}, { ...(ngDevMode ? { debugName: "days" } : /* istanbul ignore next */ {}), equal: (a, b) => compareDays(a, b, this._dateAdapter) });
|
|
1032
1056
|
isSelected(date) {
|
|
1033
1057
|
const start = this.startDate();
|
|
1034
1058
|
const end = this.endDate();
|
|
@@ -1115,8 +1139,7 @@ class BrnCalendarRange {
|
|
|
1115
1139
|
// wait until the cells have all updated
|
|
1116
1140
|
afterNextRender({
|
|
1117
1141
|
write: () => {
|
|
1118
|
-
|
|
1119
|
-
const cell = this._cells().find((c) => this._dateAdapter.isSameDay(c.date(), date));
|
|
1142
|
+
const cell = this._cells.find((c) => this._dateAdapter.isSameDay(c.date(), date));
|
|
1120
1143
|
if (cell) {
|
|
1121
1144
|
cell.focus();
|
|
1122
1145
|
}
|
|
@@ -1164,8 +1187,17 @@ class BrnCalendarRange {
|
|
|
1164
1187
|
!this._dateAdapter.isSameDay(date, start) &&
|
|
1165
1188
|
!this._dateAdapter.isSameDay(date, end));
|
|
1166
1189
|
}
|
|
1190
|
+
unregisterCalendarCell(cell) {
|
|
1191
|
+
const index = this._cells.indexOf(cell);
|
|
1192
|
+
if (index !== -1) {
|
|
1193
|
+
this._cells.splice(index, 1);
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
registerCalendarCell(cell) {
|
|
1197
|
+
this._cells.push(cell);
|
|
1198
|
+
}
|
|
1167
1199
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnCalendarRange, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1168
|
-
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.16", type: BrnCalendarRange, isStandalone: true, selector: "[brnCalendarRange]", inputs: { highlightDays: { classPropertyName: "highlightDays", publicName: "highlightDays", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, dateDisabled: { classPropertyName: "dateDisabled", publicName: "dateDisabled", isSignal: true, isRequired: false, transformFunction: null }, weekStartsOn: { classPropertyName: "weekStartsOn", publicName: "weekStartsOn", isSignal: true, isRequired: false, transformFunction: null }, defaultFocusedDate: { classPropertyName: "defaultFocusedDate", publicName: "defaultFocusedDate", isSignal: true, isRequired: false, transformFunction: null }, startDate: { classPropertyName: "startDate", publicName: "startDate", isSignal: true, isRequired: false, transformFunction: null }, endDate: { classPropertyName: "endDate", publicName: "endDate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { startDate: "startDateChange", endDate: "endDateChange" }, providers: [provideBrnCalendar(BrnCalendarRange)], queries: [{ propertyName: "header", first: true, predicate: BrnCalendarHeader, descendants: true, isSignal: true }
|
|
1200
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.16", type: BrnCalendarRange, isStandalone: true, selector: "[brnCalendarRange]", inputs: { highlightDays: { classPropertyName: "highlightDays", publicName: "highlightDays", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, dateDisabled: { classPropertyName: "dateDisabled", publicName: "dateDisabled", isSignal: true, isRequired: false, transformFunction: null }, weekStartsOn: { classPropertyName: "weekStartsOn", publicName: "weekStartsOn", isSignal: true, isRequired: false, transformFunction: null }, defaultFocusedDate: { classPropertyName: "defaultFocusedDate", publicName: "defaultFocusedDate", isSignal: true, isRequired: false, transformFunction: null }, startDate: { classPropertyName: "startDate", publicName: "startDate", isSignal: true, isRequired: false, transformFunction: null }, endDate: { classPropertyName: "endDate", publicName: "endDate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { startDate: "startDateChange", endDate: "endDateChange" }, providers: [provideBrnCalendar(BrnCalendarRange)], queries: [{ propertyName: "header", first: true, predicate: BrnCalendarHeader, descendants: true, isSignal: true }], ngImport: i0 });
|
|
1169
1201
|
}
|
|
1170
1202
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnCalendarRange, decorators: [{
|
|
1171
1203
|
type: Directive,
|
|
@@ -1173,9 +1205,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
1173
1205
|
selector: '[brnCalendarRange]',
|
|
1174
1206
|
providers: [provideBrnCalendar(BrnCalendarRange)],
|
|
1175
1207
|
}]
|
|
1176
|
-
}], propDecorators: { highlightDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightDays", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], dateDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateDisabled", required: false }] }], weekStartsOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "weekStartsOn", required: false }] }], defaultFocusedDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultFocusedDate", required: false }] }], header: [{ type: i0.ContentChild, args: [i0.forwardRef(() => BrnCalendarHeader), { isSignal: true }] }],
|
|
1177
|
-
descendants: true,
|
|
1178
|
-
}, isSignal: true }] }], startDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "startDate", required: false }] }, { type: i0.Output, args: ["startDateChange"] }], endDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "endDate", required: false }] }, { type: i0.Output, args: ["endDateChange"] }] } });
|
|
1208
|
+
}], propDecorators: { highlightDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightDays", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], dateDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateDisabled", required: false }] }], weekStartsOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "weekStartsOn", required: false }] }], defaultFocusedDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultFocusedDate", required: false }] }], header: [{ type: i0.ContentChild, args: [i0.forwardRef(() => BrnCalendarHeader), { isSignal: true }] }], startDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "startDate", required: false }] }, { type: i0.Output, args: ["startDateChange"] }], endDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "endDate", required: false }] }, { type: i0.Output, args: ["endDateChange"] }] } });
|
|
1179
1209
|
|
|
1180
1210
|
const BrnCalendarImports = [
|
|
1181
1211
|
BrnCalendarCellButton,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spartan-ng-brain-calendar.mjs","sources":["../../../../libs/brain/calendar/src/lib/brn-calendar.token.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-cell-button.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-header.ts","../../../../libs/brain/calendar/src/lib/i18n/calendar-i18n.ts","../../../../libs/brain/calendar/src/lib/brn-calendar.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-cell.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-grid.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-month-select.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-next-button.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-previous-button.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-week.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-weekday.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-year-select.ts","../../../../libs/brain/calendar/src/lib/mode/brn-calendar-multiple.ts","../../../../libs/brain/calendar/src/lib/mode/brn-calendar-range.ts","../../../../libs/brain/calendar/src/index.ts","../../../../libs/brain/calendar/src/spartan-ng-brain-calendar.ts"],"sourcesContent":["import {\n\ttype ExistingProvider,\n\tinject,\n\tInjectionToken,\n\ttype InputSignal,\n\ttype Signal,\n\ttype Type,\n\ttype WritableSignal,\n} from '@angular/core';\nimport type { BrnCalendarHeader } from './brn-calendar-header';\n\nexport interface BrnCalendarBase<T> {\n\tisSelected: (date: T) => boolean;\n\tselectDate: (date: T) => void;\n\n\tconstrainDate: (date: T) => T;\n\tisDateDisabled: (date: T) => boolean;\n\tsetFocusedDate: (date: T) => void;\n\n\tisStartOfRange: (date: T) => boolean;\n\tisEndOfRange: (date: T) => boolean;\n\tisBetweenRange: (date: T) => boolean;\n\n\tdisabled: Signal<boolean>;\n\tfocusedDate: WritableSignal<T>;\n\theader: Signal<BrnCalendarHeader | undefined>;\n\tdays: Signal<T[]>;\n\thighlightDays: InputSignal<T[]>;\n}\n\nexport const BrnCalendarToken = new InjectionToken<BrnCalendarBase<unknown>>('BrnCalendarToken');\n\nexport function provideBrnCalendar<T>(instance: Type<BrnCalendarBase<T>>): ExistingProvider {\n\treturn { provide: BrnCalendarToken, useExisting: instance };\n}\n\n/**\n * Inject the calendar component.\n */\nexport function injectBrnCalendar<T>(): BrnCalendarBase<T> {\n\treturn inject(BrnCalendarToken) as BrnCalendarBase<T>;\n}\n","import { computed, Directive, ElementRef, inject, input } from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { injectBrnCalendar } from './brn-calendar.token';\n\n@Directive({\n\tselector: 'button[brnCalendarCellButton]',\n\thost: {\n\t\trole: 'gridcell',\n\t\t'[tabindex]': 'focusable() ? 0 : -1',\n\t\ttype: 'button',\n\t\t'[attr.data-outside]': \"!selected() && outside() && (!end() && !start())? '' : null\",\n\t\t'[attr.data-today]': \"today() && !selected() ? '' : null\",\n\t\t'[attr.data-selected]': \"selected() ? '' : null\",\n\t\t'[attr.data-disabled]': \"disabled() ? '' : null\",\n\t\t'[attr.aria-selected]': \"selected() ? 'true' : null\",\n\t\t'[attr.aria-disabled]': \"disabled() ? 'true' : null\",\n\t\t'[attr.data-range-start]': 'start() ? \"\" : null',\n\t\t'[attr.data-range-end]': 'end() ? \"\" : null',\n\t\t'[attr.data-highlighted]': 'highlighted() ? \"\" : null',\n\t\t'[attr.data-range-between]': 'betweenRange() ? \"\" : null',\n\t\t'[disabled]': 'disabled()',\n\t\t'(click)': '_calendar.selectDate(date())',\n\t\t'(keydown.arrowLeft)': 'focusPrevious($event)',\n\t\t'(keydown.arrowRight)': 'focusNext($event)',\n\t\t'(keydown.arrowUp)': 'focusAbove($event)',\n\t\t'(keydown.arrowDown)': 'focusBelow($event)',\n\t\t'(keydown.home)': 'focusFirst($event)',\n\t\t'(keydown.end)': 'focusLast($event)',\n\t\t'(keydown.pageUp)': 'focusPreviousMonth($event)',\n\t\t'(keydown.pageDown)': 'focusNextMonth($event)',\n\t},\n})\nexport class BrnCalendarCellButton<T> {\n\t/** Access the date adapter */\n\tprotected readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the calendar component */\n\tprotected readonly _calendar = injectBrnCalendar<T>();\n\n\t/** Access the element ref */\n\tprivate readonly _elementRef = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n\n\t/** The date this cell represents */\n\tpublic readonly date = input.required<T>();\n\n\t/** Whether this date is currently selected */\n\tpublic readonly selected = computed(() => this._calendar.isSelected(this.date()));\n\tpublic readonly start = computed(() => this._calendar.isStartOfRange(this.date()));\n\tpublic readonly end = computed(() => this._calendar.isEndOfRange(this.date()));\n\tpublic readonly betweenRange = computed(() => this._calendar.isBetweenRange(this.date()));\n\tpublic readonly highlighted = computed(() =>\n\t\tthis._calendar.highlightDays().some((d) => this._dateAdapter.isSameDay(this.date(), d)),\n\t);\n\n\t/** Whether this date is focusable */\n\tpublic readonly focusable = computed(() => this._dateAdapter.isSameDay(this._calendar.focusedDate(), this.date()));\n\n\tpublic readonly outside = computed(() => {\n\t\tconst focusedDate = this._calendar.focusedDate();\n\t\treturn !this._dateAdapter.isSameMonth(this.date(), focusedDate);\n\t});\n\n\t/** Whether this date is today */\n\tpublic readonly today = computed(() => this._dateAdapter.isSameDay(this.date(), this._dateAdapter.now()));\n\n\t/** Whether this date is disabled */\n\tpublic readonly disabled = computed(() => this._calendar.isDateDisabled(this.date()) || this._calendar.disabled());\n\n\t/**\n\t * Focus the previous cell.\n\t */\n\tprotected focusPrevious(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\t// in rtl, the arrow keys are reversed.\n\t\tconst targetDate = this._dateAdapter.add(this._calendar.focusedDate(), {\n\t\t\tdays: this.getDirection() === 'rtl' ? 1 : -1,\n\t\t});\n\n\t\tthis._calendar.setFocusedDate(targetDate);\n\t}\n\n\t/**\n\t * Focus the next cell.\n\t */\n\tprotected focusNext(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tconst targetDate = this._dateAdapter.add(this._calendar.focusedDate(), {\n\t\t\tdays: this.getDirection() === 'rtl' ? -1 : 1,\n\t\t});\n\n\t\tthis._calendar.setFocusedDate(targetDate);\n\t}\n\n\t/**\n\t * Focus the above cell.\n\t */\n\tprotected focusAbove(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis._calendar.setFocusedDate(this._dateAdapter.subtract(this._calendar.focusedDate(), { days: 7 }));\n\t}\n\n\t/**\n\t * Focus the below cell.\n\t */\n\tprotected focusBelow(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis._calendar.setFocusedDate(this._dateAdapter.add(this._calendar.focusedDate(), { days: 7 }));\n\t}\n\n\t/**\n\t * Focus the first date of the month.\n\t */\n\tprotected focusFirst(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis._calendar.setFocusedDate(this._dateAdapter.startOfMonth(this._calendar.focusedDate()));\n\t}\n\n\t/**\n\t * Focus the last date of the month.\n\t */\n\tprotected focusLast(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis._calendar.setFocusedDate(this._dateAdapter.endOfMonth(this._calendar.focusedDate()));\n\t}\n\n\t/**\n\t * Focus the same date in the previous month.\n\t */\n\tprotected focusPreviousMonth(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tconst date = this._dateAdapter.getDate(this._calendar.focusedDate());\n\n\t\tlet previousMonthTarget = this._dateAdapter.startOfMonth(this._calendar.focusedDate());\n\t\tpreviousMonthTarget = this._dateAdapter.subtract(previousMonthTarget, { months: 1 });\n\n\t\tconst lastDay = this._dateAdapter.endOfMonth(previousMonthTarget);\n\n\t\t// if we are on a date that does not exist in the previous month, we should focus the last day of the month.\n\t\tif (date > this._dateAdapter.getDate(lastDay)) {\n\t\t\tthis._calendar.setFocusedDate(lastDay);\n\t\t} else {\n\t\t\tthis._calendar.setFocusedDate(this._dateAdapter.set(previousMonthTarget, { day: date }));\n\t\t}\n\t}\n\n\t/**\n\t * Focus the same date in the next month.\n\t */\n\tprotected focusNextMonth(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tconst date = this._dateAdapter.getDate(this._calendar.focusedDate());\n\n\t\tlet nextMonthTarget = this._dateAdapter.startOfMonth(this._calendar.focusedDate());\n\t\tnextMonthTarget = this._dateAdapter.add(nextMonthTarget, { months: 1 });\n\n\t\tconst lastDay = this._dateAdapter.endOfMonth(nextMonthTarget);\n\n\t\t// if we are on a date that does not exist in the next month, we should focus the last day of the month.\n\t\tif (date > this._dateAdapter.getDate(lastDay)) {\n\t\t\tthis._calendar.setFocusedDate(lastDay);\n\t\t} else {\n\t\t\tthis._calendar.setFocusedDate(this._dateAdapter.set(nextMonthTarget, { day: date }));\n\t\t}\n\t}\n\n\t/**\n\t * Get the direction of the element.\n\t */\n\tprivate getDirection(): 'ltr' | 'rtl' {\n\t\treturn getComputedStyle(this._elementRef.nativeElement).direction === 'rtl' ? 'rtl' : 'ltr';\n\t}\n\n\tfocus(): void {\n\t\tthis._elementRef.nativeElement.focus();\n\t}\n}\n","import { Directive, input } from '@angular/core';\n\nlet uniqueId = 0;\n\n@Directive({\n\tselector: '[brnCalendarHeader]',\n\thost: {\n\t\t'[id]': 'id()',\n\t\t'aria-live': 'polite',\n\t\trole: 'presentation',\n\t},\n})\nexport class BrnCalendarHeader {\n\t/** The unique id for the header */\n\tpublic readonly id = input<string>(`brn-calendar-header-${++uniqueId}`);\n}\n","import { inject, Injectable, InjectionToken, type Provider, signal } from '@angular/core';\n\nexport type Weekday = 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\nexport type MonthLabels = [\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n];\n\nexport interface BrnCalendarI18n {\n\tformatWeekdayName: (index: number) => string;\n\tformatHeader: (month: number, year: number) => string;\n\tformatYear: (year: number) => string;\n\tformatMonth: (month: number) => string;\n\tlabelPrevious: () => string;\n\tlabelNext: () => string;\n\tlabelWeekday: (index: number) => string;\n\tmonths: () => [string, string, string, string, string, string, string, string, string, string, string, string];\n\tyears: (startYear?: number, endYear?: number) => number[];\n\tfirstDayOfWeek: () => Weekday;\n}\n\nexport const BrnCalendarI18nToken = new InjectionToken<BrnCalendarI18nService>('BrnCalendarI18nToken');\n\n/**\n * Provide the calendar i18n configuration.\n */\nexport function provideBrnCalendarI18n(configuration?: BrnCalendarI18n): Provider {\n\treturn {\n\t\tprovide: BrnCalendarI18nToken,\n\t\tuseFactory: () => {\n\t\t\tconst service = new BrnCalendarI18nService();\n\t\t\tservice.use(configuration ?? defaultCalendarI18n);\n\t\t\treturn service;\n\t\t},\n\t};\n}\n\nconst defaultCalendarI18n: BrnCalendarI18n = {\n\tformatWeekdayName: (index: number) => {\n\t\tconst weekdays = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n\t\treturn weekdays[index];\n\t},\n\tmonths: () => ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n\tyears: (startYear = 1925, endYear = new Date().getFullYear() + 1) =>\n\t\tArray.from({ length: endYear - startYear + 1 }, (_, i) => startYear + i),\n\tformatHeader: (month: number, year: number) => {\n\t\treturn new Date(year, month).toLocaleDateString(undefined, {\n\t\t\tmonth: 'long',\n\t\t\tyear: 'numeric',\n\t\t});\n\t},\n\tformatMonth: (month: number) => {\n\t\treturn new Date(2000, month).toLocaleDateString(undefined, {\n\t\t\tmonth: 'short',\n\t\t});\n\t},\n\tformatYear: (year: number): string => {\n\t\treturn new Date(year, 0).toLocaleDateString(undefined, {\n\t\t\tyear: 'numeric',\n\t\t});\n\t},\n\tlabelPrevious: () => 'Go to the previous month',\n\tlabelNext: () => 'Go to the next month',\n\tlabelWeekday: (index: number) => {\n\t\tconst weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n\t\treturn weekdays[index];\n\t},\n\tfirstDayOfWeek: () => 0,\n};\n\n/**\n * Inject the calendar i18n configuration.\n */\nexport function injectBrnCalendarI18n(): BrnCalendarI18nService {\n\treturn inject(BrnCalendarI18nToken, { optional: true }) ?? inject(BrnCalendarI18nService); // fallback\n}\n\n@Injectable({ providedIn: 'root' })\nexport class BrnCalendarI18nService {\n\tprivate readonly _config = signal<BrnCalendarI18n>(defaultCalendarI18n);\n\n\tpublic readonly config = this._config.asReadonly();\n\n\tpublic use(config: Partial<BrnCalendarI18n>) {\n\t\tthis._config.set({ ...this.config(), ...config });\n\t}\n}\n","import type { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tChangeDetectorRef,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tDirective,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n} from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnCalendarCellButton } from './brn-calendar-cell-button';\nimport { BrnCalendarHeader } from './brn-calendar-header';\nimport { type BrnCalendarBase, provideBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n, type Weekday } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: '[brnCalendar]',\n\tproviders: [provideBrnCalendar(BrnCalendar)],\n})\nexport class BrnCalendar<T> implements BrnCalendarBase<T> {\n\tprivate readonly _i18n = injectBrnCalendarI18n();\n\n\t/** Access the date adapter */\n\tprotected readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the injector */\n\tprivate readonly _injector = inject(Injector);\n\n\t/** The days to highlight. */\n\tpublic readonly highlightDays = input<T[]>([]);\n\n\t/** The minimum date that can be selected.*/\n\tpublic readonly min = input<T>();\n\n\t/** The maximum date that can be selected. */\n\tpublic readonly max = input<T>();\n\n\t/** Determine if the date picker is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The selected value. */\n\tpublic readonly date = model<T>();\n\n\t/** Whether a specific date is disabled. */\n\tpublic readonly dateDisabled = input<(date: T) => boolean>(() => false);\n\n\t/** The day the week starts on */\n\tpublic readonly weekStartsOn = input<Weekday, NumberInput | undefined>(undefined, {\n\t\ttransform: (v: unknown) => (v === undefined || v === null ? undefined : (numberAttribute(v) as Weekday)),\n\t});\n\n\tprotected readonly _weekStartsOn = computed(() => this.weekStartsOn() ?? this._i18n.config().firstDayOfWeek());\n\n\t/** The default focused date. */\n\tpublic readonly defaultFocusedDate = input<T>();\n\n\t/** @internal Access the header */\n\tpublic readonly header = contentChild(BrnCalendarHeader);\n\n\t/** Store the cells */\n\tprotected readonly _cells = contentChildren<BrnCalendarCellButton<T>>(BrnCalendarCellButton, {\n\t\tdescendants: true,\n\t});\n\n\t/**\n\t * The focused date.\n\t */\n\tpublic readonly focusedDate = linkedSignal(() =>\n\t\tthis.constrainDate(this.defaultFocusedDate() ?? this.date() ?? this._dateAdapter.now()),\n\t);\n\n\t/**\n\t * Get all the days to display, this is the days of the current month\n\t * and the days of the previous and next month to fill the grid.\n\t */\n\tpublic readonly days = computed(() => {\n\t\tconst weekStartsOn = this._weekStartsOn();\n\t\tconst month = this.focusedDate();\n\t\tconst days: T[] = [];\n\n\t\t// Get the first and last day of the month.\n\t\tlet firstDay = this._dateAdapter.startOfMonth(month);\n\t\tlet lastDay = this._dateAdapter.endOfMonth(month);\n\n\t\t// we need to subtract until we get the to starting day before or on the start of the month.\n\t\twhile (this._dateAdapter.getDay(firstDay) !== weekStartsOn) {\n\t\t\tfirstDay = this._dateAdapter.subtract(firstDay, { days: 1 });\n\t\t}\n\n\t\tconst weekEndsOn = (weekStartsOn + 6) % 7;\n\n\t\t// we need to add until we get to the ending day after or on the end of the month.\n\t\twhile (this._dateAdapter.getDay(lastDay) !== weekEndsOn) {\n\t\t\tlastDay = this._dateAdapter.add(lastDay, { days: 1 });\n\t\t}\n\n\t\t// collect all the days to display.\n\t\twhile (firstDay <= lastDay) {\n\t\t\tdays.push(firstDay);\n\t\t\tfirstDay = this._dateAdapter.add(firstDay, { days: 1 });\n\t\t}\n\n\t\treturn days;\n\t});\n\n\t/** @internal Constrain a date to the min and max boundaries */\n\tconstrainDate(date: T): T {\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\t// If there is no min or max, return the date.\n\t\tif (!min && !max) {\n\t\t\treturn date;\n\t\t}\n\n\t\t// If there is a min and the date is before the min, return the min.\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn min;\n\t\t}\n\n\t\t// If there is a max and the date is after the max, return the max.\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn max;\n\t\t}\n\n\t\t// Return the date.\n\t\treturn date;\n\t}\n\n\t/** @internal Determine if a date is disabled */\n\tisDateDisabled(date: T): boolean {\n\t\t// if the calendar is disabled we can't select this date\n\t\tif (this.disabled()) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if the date is outside the min and max range\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if this specific date is disabled\n\t\tconst disabledFn = this.dateDisabled();\n\n\t\tif (disabledFn(date)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tisSelected(date: T): boolean {\n\t\tconst selected = this.date() as T | undefined;\n\t\treturn selected !== undefined && this._dateAdapter.isSameDay(date, selected);\n\t}\n\n\tselectDate(date: T): void {\n\t\tif (this.isSelected(date)) {\n\t\t\tthis.date.set(undefined);\n\t\t} else {\n\t\t\tthis.date.set(date);\n\t\t}\n\t\tthis.focusedDate.set(date);\n\t}\n\n\t/** @internal Set the focused date */\n\tsetFocusedDate(date: T): void {\n\t\t// check if the date is disabled.\n\t\tif (this.isDateDisabled(date)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.focusedDate.set(date);\n\n\t\t// wait until the cells have all updated\n\t\tafterNextRender(\n\t\t\t{\n\t\t\t\twrite: () => {\n\t\t\t\t\t// focus the cell with the target date.\n\t\t\t\t\tconst cell = this._cells().find((c) => this._dateAdapter.isSameDay(c.date(), date));\n\n\t\t\t\t\tif (cell) {\n\t\t\t\t\t\tcell.focus();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tinjector: this._injector,\n\t\t\t},\n\t\t);\n\n\t\t// we must update the view to ensure the focused cell is visible.\n\t\tthis._changeDetector.detectChanges();\n\t}\n\n\t/**\n\t * Determine if a date is the start of a range. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisStartOfRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determine if a date is the end of a range. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisEndOfRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determine if a date is between the start and end dates. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns True if the date is between the start and end dates, false otherwise.\n\t * @internal\n\t */\n\tisBetweenRange(_: T): boolean {\n\t\treturn false;\n\t}\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n\tselector: '[brnCalendarCell]',\n\thost: {\n\t\trole: 'presentation',\n\t},\n})\nexport class BrnCalendarCell {}\n","import { Directive } from '@angular/core';\nimport { injectBrnCalendar } from './brn-calendar.token';\n\n@Directive({\n\tselector: '[brnCalendarGrid]',\n\thost: {\n\t\trole: 'grid',\n\t\t'[attr.aria-labelledby]': '_calendar.header()?.id()',\n\t},\n})\nexport class BrnCalendarGrid<T> {\n\t/** Access the calendar component */\n\tprotected readonly _calendar = injectBrnCalendar<T>();\n}\n","import { computed, Directive, effect, inject } from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnSelect } from '@spartan-ng/brain/select';\nimport { injectBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: 'brnSelect[brnCalendarMonthSelect],hlm-select[brnCalendarMonthSelect]',\n})\nexport class BrnCalendarMonthSelect {\n\t/** Access the select */\n\tprivate readonly _select = inject(BrnSelect);\n\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar();\n\n\t/** Access the date adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter();\n\n\t/** Access the calendar i18n */\n\tprotected readonly _i18n = injectBrnCalendarI18n();\n\n\tprotected readonly _selectedMonth = computed(() => {\n\t\treturn this._i18n.config().months()[this._dateAdapter.getMonth(this._calendar.focusedDate())];\n\t});\n\n\tconstructor() {\n\t\t// React to user selection through the injected select's typed `value` output rather than a\n\t\t// host-listener `$event` (which Angular types as `Event`). The month select's values are the\n\t\t// month strings, so narrow to `string` before handling.\n\t\toutputToObservable(this._select.value)\n\t\t\t.pipe(takeUntilDestroyed())\n\t\t\t.subscribe((value) => {\n\t\t\t\tif (typeof value === 'string') {\n\t\t\t\t\tthis.monthSelected(value);\n\t\t\t\t}\n\t\t\t});\n\n\t\teffect(() => {\n\t\t\tthis._select.writeValue(this._selectedMonth());\n\t\t});\n\t}\n\n\t/** Focus selected month */\n\tprivate monthSelected(selectedMonth: string): void {\n\t\tconst month = this._i18n\n\t\t\t.config()\n\t\t\t.months()\n\t\t\t.findIndex((month) => month === selectedMonth);\n\t\tconst targetDate = this._dateAdapter.set(this._calendar.focusedDate(), { month });\n\t\tthis._calendar.focusedDate.set(targetDate);\n\t}\n}\n","import { Directive } from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { injectBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: '[brnCalendarNextButton]',\n\thost: {\n\t\ttype: 'button',\n\t\t'data-slot': 'calendar-next-button',\n\t\t'[attr.aria-label]': '_i18n.config().labelNext()',\n\t\t'(click)': 'focusNextMonth()',\n\t},\n})\nexport class BrnCalendarNextButton {\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar();\n\n\t/** Access the date adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter();\n\n\t/** Access the calendar i18n */\n\tprotected readonly _i18n = injectBrnCalendarI18n();\n\n\t/** Focus the next month */\n\tprotected focusNextMonth(): void {\n\t\tconst focusedDate = this._calendar.focusedDate();\n\t\tconst date = this._dateAdapter.getDate(focusedDate);\n\n\t\t// go to start of month first, then add 1 month to avoid day overflow\n\t\tlet nextMonthTarget = this._dateAdapter.startOfMonth(focusedDate);\n\t\tnextMonthTarget = this._dateAdapter.add(nextMonthTarget, { months: 1 });\n\n\t\tconst lastDay = this._dateAdapter.endOfMonth(nextMonthTarget);\n\n\t\t// if we are on a date that does not exist in the next month, clamp to the last day of the month.\n\t\tlet targetDate: typeof focusedDate;\n\t\tif (date > this._dateAdapter.getDate(lastDay)) {\n\t\t\ttargetDate = lastDay;\n\t\t} else {\n\t\t\ttargetDate = this._dateAdapter.set(nextMonthTarget, { day: date });\n\t\t}\n\n\t\t// if the date is disabled, but there are available dates in the month, focus the constrained date.\n\t\tconst possibleDate = this._calendar.constrainDate(targetDate);\n\n\t\tif (this._dateAdapter.isSameMonth(possibleDate, targetDate)) {\n\t\t\t// if this date is within the same month, then focus it\n\t\t\tthis._calendar.focusedDate.set(possibleDate);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._calendar.focusedDate.set(targetDate);\n\t}\n}\n","import { Directive } from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { injectBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: '[brnCalendarPreviousButton]',\n\thost: {\n\t\ttype: 'button',\n\t\t'data-slot': 'calendar-previous-button',\n\t\t'[attr.aria-label]': '_i18n.config().labelPrevious()',\n\t\t'(click)': 'focusPreviousMonth()',\n\t},\n})\nexport class BrnCalendarPreviousButton {\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar();\n\n\t/** Access the date adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter();\n\n\t/** Access the calendar i18n */\n\tprotected readonly _i18n = injectBrnCalendarI18n();\n\n\t/** Focus the previous month */\n\tprotected focusPreviousMonth(): void {\n\t\tconst focusedDate = this._calendar.focusedDate();\n\t\tconst date = this._dateAdapter.getDate(focusedDate);\n\n\t\t// go to start of month first, then subtract 1 month to avoid day overflow\n\t\tlet previousMonthTarget = this._dateAdapter.startOfMonth(focusedDate);\n\t\tpreviousMonthTarget = this._dateAdapter.subtract(previousMonthTarget, { months: 1 });\n\n\t\tconst lastDay = this._dateAdapter.endOfMonth(previousMonthTarget);\n\n\t\t// if we are on a date that does not exist in the previous month, clamp to the last day of the month.\n\t\tlet targetDate: typeof focusedDate;\n\t\tif (date > this._dateAdapter.getDate(lastDay)) {\n\t\t\ttargetDate = lastDay;\n\t\t} else {\n\t\t\ttargetDate = this._dateAdapter.set(previousMonthTarget, { day: date });\n\t\t}\n\n\t\t// if the date is disabled, but there are available dates in the month, focus the constrained date.\n\t\tconst possibleDate = this._calendar.constrainDate(targetDate);\n\n\t\tif (this._dateAdapter.isSameMonth(possibleDate, targetDate)) {\n\t\t\t// if this date is within the same month, then focus it\n\t\t\tthis._calendar.focusedDate.set(possibleDate);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._calendar.focusedDate.set(targetDate);\n\t}\n}\n","import {\n\tChangeDetectorRef,\n\tDirective,\n\ttype EmbeddedViewRef,\n\ttype OnDestroy,\n\tTemplateRef,\n\tViewContainerRef,\n\tcomputed,\n\teffect,\n\tinject,\n\tuntracked,\n} from '@angular/core';\nimport { injectBrnCalendar } from './brn-calendar.token';\n\n@Directive({\n\tselector: '[brnCalendarWeek]',\n})\nexport class BrnCalendarWeek<T> implements OnDestroy {\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar<T>();\n\n\t/** Access the view container ref */\n\tprivate readonly _viewContainerRef = inject(ViewContainerRef);\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the template ref */\n\tprivate readonly _templateRef = inject<TemplateRef<BrnWeekContext<T>>>(TemplateRef);\n\n\t// get the weeks to display.\n\tprotected readonly _weeks = computed(() => {\n\t\tconst days = this._calendar.days();\n\t\tconst weeks = [];\n\n\t\tfor (let i = 0; i < days.length; i += 7) {\n\t\t\tweeks.push(days.slice(i, i + 7));\n\t\t}\n\n\t\treturn weeks;\n\t});\n\n\t/** Store the view refs */\n\tprivate _viewRefs: EmbeddedViewRef<BrnWeekContext<T>>[] = [];\n\n\t// Make sure the template checker knows the type of the context with which the\n\t// template of this directive will be rendered\n\tstatic ngTemplateContextGuard<T>(_: BrnCalendarWeek<T>, ctx: unknown): ctx is BrnWeekContext<T> {\n\t\treturn true;\n\t}\n\n\tconstructor() {\n\t\t// this should use `afterRenderEffect` but it's not available in the current version\n\t\teffect(() => {\n\t\t\tconst weeks = this._weeks();\n\t\t\tuntracked(() => this._renderWeeks(weeks));\n\t\t});\n\t}\n\n\tprivate _renderWeeks(weeks: T[][]): void {\n\t\t// Destroy all the views when the directive is destroyed\n\t\tfor (const viewRef of this._viewRefs) {\n\t\t\tviewRef.destroy();\n\t\t}\n\n\t\tthis._viewRefs = [];\n\n\t\t// Create a new view for each week\n\t\tfor (const week of weeks) {\n\t\t\tconst viewRef = this._viewContainerRef.createEmbeddedView(this._templateRef, {\n\t\t\t\t$implicit: week,\n\t\t\t});\n\t\t\tthis._viewRefs.push(viewRef);\n\t\t}\n\n\t\tthis._changeDetector.detectChanges();\n\t}\n\n\tngOnDestroy(): void {\n\t\t// Destroy all the views when the directive is destroyed\n\t\tfor (const viewRef of this._viewRefs) {\n\t\t\tviewRef.destroy();\n\t\t}\n\t}\n}\n\ninterface BrnWeekContext<T> {\n\t$implicit: T[];\n}\n","import {\n\tChangeDetectorRef,\n\tcomputed,\n\tDirective,\n\teffect,\n\ttype EmbeddedViewRef,\n\tinject,\n\ttype OnDestroy,\n\tTemplateRef,\n\tuntracked,\n\tViewContainerRef,\n} from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { injectBrnCalendar } from './brn-calendar.token';\n\n@Directive({\n\tselector: '[brnCalendarWeekday]',\n})\nexport class BrnCalendarWeekday<T> implements OnDestroy {\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar<T>();\n\n\t/** Access the date time adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the view container ref */\n\tprivate readonly _viewContainerRef = inject(ViewContainerRef);\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the template ref */\n\tprivate readonly _templateRef = inject<TemplateRef<BrnWeekdayContext>>(TemplateRef);\n\n\t/** Get the days of the week to display in the header. */\n\tprotected readonly _weekdays = computed(() => this._calendar.days().slice(0, 7));\n\n\t/** Store the view refs */\n\tprivate _viewRefs: EmbeddedViewRef<BrnWeekdayContext>[] = [];\n\n\t// Make sure the template checker knows the type of the context with which the\n\t// template of this directive will be rendered\n\tstatic ngTemplateContextGuard<T>(_: BrnCalendarWeekday<T>, ctx: unknown): ctx is BrnWeekdayContext {\n\t\treturn true;\n\t}\n\n\tconstructor() {\n\t\t// Create a new view for each day\n\t\teffect(() => {\n\t\t\t// Get the weekdays to display\n\t\t\tconst weekdays = this._weekdays();\n\t\t\t// Render the weekdays\n\t\t\tuntracked(() => this._renderWeekdays(weekdays));\n\t\t});\n\t}\n\n\tprivate _renderWeekdays(weekdays: T[]): void {\n\t\t// Destroy all the views when the directive is destroyed\n\t\tfor (const viewRef of this._viewRefs) {\n\t\t\tviewRef.destroy();\n\t\t}\n\n\t\tthis._viewRefs = [];\n\n\t\t// Create a new view for each day\n\t\tfor (const day of weekdays) {\n\t\t\tconst viewRef = this._viewContainerRef.createEmbeddedView(this._templateRef, {\n\t\t\t\t$implicit: this._dateAdapter.getDay(day),\n\t\t\t});\n\t\t\tthis._viewRefs.push(viewRef);\n\t\t}\n\n\t\tthis._changeDetector.detectChanges();\n\t}\n\n\tngOnDestroy(): void {\n\t\t// Destroy all the views when the directive is destroyed\n\t\tfor (const viewRef of this._viewRefs) {\n\t\t\tviewRef.destroy();\n\t\t}\n\t}\n}\n\ninterface BrnWeekdayContext {\n\t$implicit: number;\n}\n","import { Directive, effect, inject } from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnSelect } from '@spartan-ng/brain/select';\nimport { injectBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: 'brnSelect[brnCalendarYearSelect],hlm-select[brnCalendarYearSelect]',\n})\nexport class BrnCalendarYearSelect {\n\t/** Access the select */\n\tprivate readonly _select = inject(BrnSelect);\n\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar();\n\n\t/** Access the date adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter();\n\n\t/** Access the calendar i18n */\n\tprotected readonly _i18n = injectBrnCalendarI18n();\n\n\tconstructor() {\n\t\t// React to user selection through the injected select's typed `value` output rather than a\n\t\t// host-listener `$event` (which Angular types as `Event`). The year select's values are\n\t\t// numbers, so narrow to `number` before handling.\n\t\toutputToObservable(this._select.value)\n\t\t\t.pipe(takeUntilDestroyed())\n\t\t\t.subscribe((value) => {\n\t\t\t\tif (typeof value === 'number') {\n\t\t\t\t\tthis.yearSelected(value);\n\t\t\t\t}\n\t\t\t});\n\n\t\teffect(() => {\n\t\t\tthis._select.writeValue(this._dateAdapter.getYear(this._calendar.focusedDate()));\n\t\t});\n\t}\n\n\t/** Focus selected year */\n\tprivate yearSelected(year: number): void {\n\t\tconst targetDate = this._dateAdapter.set(this._calendar.focusedDate(), { year });\n\t\tthis._calendar.focusedDate.set(targetDate);\n\t}\n}\n","import type { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tChangeDetectorRef,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tDirective,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n} from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnCalendarCellButton } from '../brn-calendar-cell-button';\nimport { BrnCalendarHeader } from '../brn-calendar-header';\nimport { type BrnCalendarBase, provideBrnCalendar } from '../brn-calendar.token';\nimport { injectBrnCalendarI18n, type Weekday } from '../i18n/calendar-i18n';\n\n@Directive({\n\tselector: '[brnCalendarMulti]',\n\tproviders: [provideBrnCalendar(BrnCalendarMulti)],\n})\nexport class BrnCalendarMulti<T> implements BrnCalendarBase<T> {\n\tprivate readonly _i18n = injectBrnCalendarI18n();\n\n\t/**\n\t * Determine if a date is the start of a range. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisStartOfRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determine if a date is the end of a range. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisEndOfRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determine if a date is between the start and end dates. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns True if the date is between the start and end dates, false otherwise.\n\t * @internal\n\t */\n\tisBetweenRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t// /** Access the date adapter */\n\tprotected readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the injector */\n\tprivate readonly _injector = inject(Injector);\n\n\t/** The days to highlight. */\n\tpublic readonly highlightDays = input<T[]>([]);\n\n\t/** The minimum date that can be selected.*/\n\tpublic readonly min = input<T>();\n\n\t/** The maximum date that can be selected. */\n\tpublic readonly max = input<T>();\n\n\t/** The minimum selectable dates. */\n\tpublic readonly minSelection = input<number, NumberInput>(undefined, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** The maximum selectable dates. */\n\tpublic readonly maxSelection = input<number, NumberInput>(undefined, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Determine if the date picker is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The selected value. */\n\tpublic readonly date = model<T[]>();\n\n\t/** Whether a specific date is disabled. */\n\tpublic readonly dateDisabled = input<(date: T) => boolean>(() => false);\n\n\t/** The day the week starts on */\n\tpublic readonly weekStartsOn = input<Weekday, NumberInput | undefined>(undefined, {\n\t\ttransform: (v: unknown) => (v === undefined || v === null ? undefined : (numberAttribute(v) as Weekday)),\n\t});\n\n\tprotected readonly _weekStartsOn = computed(() => this.weekStartsOn() ?? this._i18n.config().firstDayOfWeek());\n\n\t/** The default focused date. */\n\tpublic readonly defaultFocusedDate = input<T>();\n\n\t/** @internal Access the header */\n\tpublic readonly header = contentChild(BrnCalendarHeader);\n\n\t/** Store the cells */\n\tprotected readonly _cells = contentChildren<BrnCalendarCellButton<T>>(BrnCalendarCellButton, {\n\t\tdescendants: true,\n\t});\n\n\t/**\n\t * The focused date.\n\t */\n\tpublic readonly focusedDate = linkedSignal(() =>\n\t\tthis.constrainDate(this.defaultFocusedDate() ?? this._dateAdapter.now()),\n\t);\n\n\t/**\n\t * Get all the days to display, this is the days of the current month\n\t * and the days of the previous and next month to fill the grid.\n\t */\n\tpublic readonly days = computed(() => {\n\t\tconst weekStartsOn = this._weekStartsOn();\n\t\tconst month = this.focusedDate();\n\t\tconst days: T[] = [];\n\n\t\t// Get the first and last day of the month.\n\t\tlet firstDay = this._dateAdapter.startOfMonth(month);\n\t\tlet lastDay = this._dateAdapter.endOfMonth(month);\n\n\t\t// we need to subtract until we get the to starting day before or on the start of the month.\n\t\twhile (this._dateAdapter.getDay(firstDay) !== weekStartsOn) {\n\t\t\tfirstDay = this._dateAdapter.subtract(firstDay, { days: 1 });\n\t\t}\n\n\t\tconst weekEndsOn = (weekStartsOn + 6) % 7;\n\n\t\t// we need to add until we get to the ending day after or on the end of the month.\n\t\twhile (this._dateAdapter.getDay(lastDay) !== weekEndsOn) {\n\t\t\tlastDay = this._dateAdapter.add(lastDay, { days: 1 });\n\t\t}\n\n\t\t// collect all the days to display.\n\t\twhile (firstDay <= lastDay) {\n\t\t\tdays.push(firstDay);\n\t\t\tfirstDay = this._dateAdapter.add(firstDay, { days: 1 });\n\t\t}\n\n\t\treturn days;\n\t});\n\n\tisSelected(date: T): boolean {\n\t\treturn this.date()?.some((d) => this._dateAdapter.isSameDay(d, date)) ?? false;\n\t}\n\n\tselectDate(date: T): void {\n\t\tconst selected = this.date() as T[] | undefined;\n\t\tif (this.isSelected(date)) {\n\t\t\tconst minSelection = this.minSelection();\n\t\t\tif (selected?.length === minSelection) {\n\t\t\t\t// min selection reached, do not allow to deselect\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.date.set(selected?.filter((d) => !this._dateAdapter.isSameDay(d, date)));\n\t\t} else {\n\t\t\tconst maxSelection = this.maxSelection();\n\t\t\tif (selected?.length === maxSelection) {\n\t\t\t\t// max selection reached, reset the selection to date\n\t\t\t\tthis.date.set([date]);\n\t\t\t} else {\n\t\t\t\t// add the date to the selection\n\t\t\t\tthis.date.set([...(selected ?? []), date]);\n\t\t\t}\n\t\t}\n\t}\n\n\t// same as in brn-calendar.directive.ts\n\t/** @internal Constrain a date to the min and max boundaries */\n\tconstrainDate(date: T): T {\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\t// If there is no min or max, return the date.\n\t\tif (!min && !max) {\n\t\t\treturn date;\n\t\t}\n\n\t\t// If there is a min and the date is before the min, return the min.\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn min;\n\t\t}\n\n\t\t// If there is a max and the date is after the max, return the max.\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn max;\n\t\t}\n\n\t\t// Return the date.\n\t\treturn date;\n\t}\n\n\t/** @internal Determine if a date is disabled */\n\tisDateDisabled(date: T): boolean {\n\t\t// if the calendar is disabled we can't select this date\n\t\tif (this.disabled()) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if the date is outside the min and max range\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if this specific date is disabled\n\t\tconst disabledFn = this.dateDisabled();\n\n\t\tif (disabledFn(date)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/** @internal Set the focused date */\n\tsetFocusedDate(date: T): void {\n\t\t// check if the date is disabled.\n\t\tif (this.isDateDisabled(date)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.focusedDate.set(date);\n\n\t\t// wait until the cells have all updated\n\t\tafterNextRender(\n\t\t\t{\n\t\t\t\twrite: () => {\n\t\t\t\t\t// focus the cell with the target date.\n\t\t\t\t\tconst cell = this._cells().find((c) => this._dateAdapter.isSameDay(c.date(), date));\n\n\t\t\t\t\tif (cell) {\n\t\t\t\t\t\tcell.focus();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tinjector: this._injector,\n\t\t\t},\n\t\t);\n\n\t\t// we must update the view to ensure the focused cell is visible.\n\t\tthis._changeDetector.detectChanges();\n\t}\n}\n","import type { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tChangeDetectorRef,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tDirective,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n} from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnCalendarCellButton } from '../brn-calendar-cell-button';\nimport { BrnCalendarHeader } from '../brn-calendar-header';\nimport { type BrnCalendarBase, provideBrnCalendar } from '../brn-calendar.token';\nimport { injectBrnCalendarI18n, type Weekday } from '../i18n/calendar-i18n';\n\n@Directive({\n\tselector: '[brnCalendarRange]',\n\tproviders: [provideBrnCalendar(BrnCalendarRange)],\n})\nexport class BrnCalendarRange<T> implements BrnCalendarBase<T> {\n\tprivate readonly _i18n = injectBrnCalendarI18n();\n\t// /** Access the date adapter */\n\tprotected readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the injector */\n\tprivate readonly _injector = inject(Injector);\n\n\t/** The days to highlight. */\n\tpublic readonly highlightDays = input<T[]>([]);\n\n\t/** The minimum date that can be selected.*/\n\tpublic readonly min = input<T>();\n\n\t/** The maximum date that can be selected. */\n\tpublic readonly max = input<T>();\n\n\t/** Determine if the date picker is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether a specific date is disabled. */\n\tpublic readonly dateDisabled = input<(date: T) => boolean>(() => false);\n\n\t/** The day the week starts on */\n\tpublic readonly weekStartsOn = input<Weekday, NumberInput | undefined>(undefined, {\n\t\ttransform: (v: unknown) => (v === undefined || v === null ? undefined : (numberAttribute(v) as Weekday)),\n\t});\n\n\tprotected readonly _weekStartsOn = computed(() => this.weekStartsOn() ?? this._i18n.config().firstDayOfWeek());\n\n\t/** The default focused date. */\n\tpublic readonly defaultFocusedDate = input<T>();\n\n\t/** @internal Access the header */\n\tpublic readonly header = contentChild(BrnCalendarHeader);\n\n\t/** Store the cells */\n\tprotected readonly _cells = contentChildren<BrnCalendarCellButton<T>>(BrnCalendarCellButton, {\n\t\tdescendants: true,\n\t});\n\n\t/**\n\t * The focused date.\n\t */\n\tpublic readonly focusedDate = linkedSignal(() =>\n\t\tthis.constrainDate(this.defaultFocusedDate() ?? this.startDate() ?? this._dateAdapter.now()),\n\t);\n\n\t/**\n\t * The selected start date\n\t */\n\tpublic readonly startDate = model<T>();\n\n\t/**\n\t * The selected end date\n\t */\n\tpublic readonly endDate = model<T>();\n\n\t/**\n\t * Get all the days to display, this is the days of the current month\n\t * and the days of the previous and next month to fill the grid.\n\t */\n\tpublic readonly days = computed(() => {\n\t\tconst weekStartsOn = this._weekStartsOn();\n\t\tconst month = this.focusedDate();\n\t\tconst days: T[] = [];\n\n\t\t// Get the first and last day of the month.\n\t\tlet firstDay = this._dateAdapter.startOfMonth(month);\n\t\tlet lastDay = this._dateAdapter.endOfMonth(month);\n\n\t\t// we need to subtract until we get the to starting day before or on the start of the month.\n\t\twhile (this._dateAdapter.getDay(firstDay) !== weekStartsOn) {\n\t\t\tfirstDay = this._dateAdapter.subtract(firstDay, { days: 1 });\n\t\t}\n\n\t\tconst weekEndsOn = (weekStartsOn + 6) % 7;\n\n\t\t// we need to add until we get to the ending day after or on the end of the month.\n\t\twhile (this._dateAdapter.getDay(lastDay) !== weekEndsOn) {\n\t\t\tlastDay = this._dateAdapter.add(lastDay, { days: 1 });\n\t\t}\n\n\t\t// collect all the days to display.\n\t\twhile (firstDay <= lastDay) {\n\t\t\tdays.push(firstDay);\n\t\t\tfirstDay = this._dateAdapter.add(firstDay, { days: 1 });\n\t\t}\n\n\t\treturn days;\n\t});\n\n\tisSelected(date: T): boolean {\n\t\tconst start = this.startDate();\n\t\tconst end = this.endDate();\n\n\t\tif (!start && !end) {\n\t\t\treturn false;\n\t\t}\n\t\tconst isStartSelected = start ? this._dateAdapter.isSameDay(date, start) : false;\n\t\tconst isEndSelected = end ? this._dateAdapter.isSameDay(date, end) : false;\n\n\t\treturn isStartSelected || isEndSelected;\n\t}\n\n\tselectDate(date: T): void {\n\t\tconst start = this.startDate();\n\t\tconst end = this.endDate();\n\n\t\tif (!start && !end) {\n\t\t\tthis.startDate.set(date);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (start && !end) {\n\t\t\tif (this._dateAdapter.isAfter(date, start)) {\n\t\t\t\tthis.endDate.set(date);\n\t\t\t} else if (this._dateAdapter.isBefore(date, start)) {\n\t\t\t\tthis.startDate.set(date);\n\t\t\t\tthis.endDate.set(start);\n\t\t\t} else if (this._dateAdapter.isSameDay(date, start)) {\n\t\t\t\tthis.endDate.set(date);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// If both start and end are selected, reset selection\n\t\tthis.startDate.set(date);\n\n\t\tthis.endDate.set(undefined);\n\t}\n\n\t// same as in brn-calendar.directive.ts\n\t/** @internal Constrain a date to the min and max boundaries */\n\tconstrainDate(date: T): T {\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\t// If there is no min or max, return the date.\n\t\tif (!min && !max) {\n\t\t\treturn date;\n\t\t}\n\n\t\t// If there is a min and the date is before the min, return the min.\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn min;\n\t\t}\n\n\t\t// If there is a max and the date is after the max, return the max.\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn max;\n\t\t}\n\n\t\t// Return the date.\n\t\treturn date;\n\t}\n\n\t/** @internal Determine if a date is disabled */\n\tisDateDisabled(date: T): boolean {\n\t\t// if the calendar is disabled we can't select this date\n\t\tif (this.disabled()) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if the date is outside the min and max range\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if this specific date is disabled\n\t\tconst disabledFn = this.dateDisabled();\n\n\t\tif (disabledFn(date)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/** @internal Set the focused date */\n\tsetFocusedDate(date: T): void {\n\t\t// check if the date is disabled.\n\t\tif (this.isDateDisabled(date)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.focusedDate.set(date);\n\n\t\t// wait until the cells have all updated\n\t\tafterNextRender(\n\t\t\t{\n\t\t\t\twrite: () => {\n\t\t\t\t\t// focus the cell with the target date.\n\t\t\t\t\tconst cell = this._cells().find((c) => this._dateAdapter.isSameDay(c.date(), date));\n\n\t\t\t\t\tif (cell) {\n\t\t\t\t\t\tcell.focus();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tinjector: this._injector,\n\t\t\t},\n\t\t);\n\n\t\t// we must update the view to ensure the focused cell is visible.\n\t\tthis._changeDetector.detectChanges();\n\t}\n\n\t/**\n\t * Determine if a date is the start of a range.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisStartOfRange(date: T): boolean {\n\t\tconst start = this.startDate();\n\t\treturn start ? this._dateAdapter.isSameDay(date, start) : false;\n\t}\n\n\t/**\n\t * Determine if a date is the end of a range.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisEndOfRange(date: T): boolean {\n\t\tconst end = this.endDate();\n\t\treturn end ? this._dateAdapter.isSameDay(date, end) : false;\n\t}\n\n\t/**\n\t * Determine if a date is between the start and end dates.\n\t * @param date The date to check.\n\t * @returns True if the date is between the start and end dates, false otherwise.\n\t * @internal\n\t */\n\tisBetweenRange(date: T): boolean {\n\t\tconst start = this.startDate();\n\t\tconst end = this.endDate();\n\n\t\tif (!start || !end) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn (\n\t\t\tthis._dateAdapter.isAfter(date, start) &&\n\t\t\tthis._dateAdapter.isBefore(date, end) &&\n\t\t\t!this._dateAdapter.isSameDay(date, start) &&\n\t\t\t!this._dateAdapter.isSameDay(date, end)\n\t\t);\n\t}\n}\n","import { BrnCalendar } from './lib/brn-calendar';\nimport { BrnCalendarCell } from './lib/brn-calendar-cell';\nimport { BrnCalendarCellButton } from './lib/brn-calendar-cell-button';\nimport { BrnCalendarGrid } from './lib/brn-calendar-grid';\nimport { BrnCalendarHeader } from './lib/brn-calendar-header';\nimport { BrnCalendarMonthSelect } from './lib/brn-calendar-month-select';\nimport { BrnCalendarNextButton } from './lib/brn-calendar-next-button';\nimport { BrnCalendarPreviousButton } from './lib/brn-calendar-previous-button';\nimport { BrnCalendarWeek } from './lib/brn-calendar-week';\nimport { BrnCalendarWeekday } from './lib/brn-calendar-weekday';\nimport { BrnCalendarYearSelect } from './lib/brn-calendar-year-select';\nimport { BrnCalendarMulti } from './lib/mode/brn-calendar-multiple';\nimport { BrnCalendarRange } from './lib/mode/brn-calendar-range';\n\nexport * from './lib/brn-calendar';\nexport * from './lib/brn-calendar-cell';\nexport * from './lib/brn-calendar-cell-button';\nexport * from './lib/brn-calendar-grid';\nexport * from './lib/brn-calendar-header';\nexport * from './lib/brn-calendar-month-select';\nexport * from './lib/brn-calendar-next-button';\nexport * from './lib/brn-calendar-previous-button';\nexport * from './lib/brn-calendar-week';\nexport * from './lib/brn-calendar-weekday';\nexport * from './lib/brn-calendar-year-select';\nexport * from './lib/brn-calendar.token';\nexport * from './lib/i18n/calendar-i18n';\nexport * from './lib/mode/brn-calendar-multiple';\nexport * from './lib/mode/brn-calendar-range';\n\nexport const BrnCalendarImports = [\n\tBrnCalendarCellButton,\n\tBrnCalendarGrid,\n\tBrnCalendarHeader,\n\tBrnCalendarNextButton,\n\tBrnCalendarPreviousButton,\n\tBrnCalendarWeek,\n\tBrnCalendarWeekday,\n\tBrnCalendar,\n\tBrnCalendarCell,\n\tBrnCalendarMulti,\n\tBrnCalendarRange,\n\tBrnCalendarMonthSelect,\n\tBrnCalendarYearSelect,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;MA8Ba,gBAAgB,GAAG,IAAI,cAAc,CAA2B,kBAAkB;AAEzF,SAAU,kBAAkB,CAAI,QAAkC,EAAA;IACvE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,QAAQ,EAAE;AAC5D;AAEA;;AAEG;SACa,iBAAiB,GAAA;AAChC,IAAA,OAAO,MAAM,CAAC,gBAAgB,CAAuB;AACtD;;MCTa,qBAAqB,CAAA;;IAEd,YAAY,GAAG,iBAAiB,EAAK;;IAGrC,SAAS,GAAG,iBAAiB,EAAK;;AAGpC,IAAA,WAAW,GAAG,MAAM,CAAgC,UAAU,CAAC;;AAGhE,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,0EAAK;;AAG1B,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,+EAAC;AACjE,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,4EAAC;AAClE,IAAA,GAAG,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,0EAAC;AAC9D,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,mFAAC;AACzE,IAAA,WAAW,GAAG,QAAQ,CAAC,MACtC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,kFACvF;;IAGe,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAElG,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;AAChD,QAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC;AAChE,IAAA,CAAC,8EAAC;;IAGc,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;IAGzF,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAElH;;AAEG;AACO,IAAA,aAAa,CAAC,KAAY,EAAA;QACnC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;;AAGvB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE;AACtE,YAAA,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5C,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC;IAC1C;AAEA;;AAEG;AACO,IAAA,SAAS,CAAC,KAAY,EAAA;QAC/B,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE;AACtE,YAAA,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;AAC5C,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC;IAC1C;AAEA;;AAEG;AACO,IAAA,UAAU,CAAC,KAAY,EAAA;QAChC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACrG;AAEA;;AAEG;AACO,IAAA,UAAU,CAAC,KAAY,EAAA;QAChC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAChG;AAEA;;AAEG;AACO,IAAA,UAAU,CAAC,KAAY,EAAA;QAChC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5F;AAEA;;AAEG;AACO,IAAA,SAAS,CAAC,KAAY,EAAA;QAC/B,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1F;AAEA;;AAEG;AACO,IAAA,kBAAkB,CAAC,KAAY,EAAA;QACxC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AAEpE,QAAA,IAAI,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AACtF,QAAA,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAEpF,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,mBAAmB,CAAC;;QAGjE,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC;QACvC;aAAO;YACN,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACzF;IACD;AAEA;;AAEG;AACO,IAAA,cAAc,CAAC,KAAY,EAAA;QACpC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AAEpE,QAAA,IAAI,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AAClF,QAAA,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAEvE,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC;;QAG7D,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC;QACvC;aAAO;YACN,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACrF;IACD;AAEA;;AAEG;IACK,YAAY,GAAA;QACnB,OAAO,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,SAAS,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK;IAC5F;IAEA,KAAK,GAAA;AACJ,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE;IACvC;2HA1JY,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,8BAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,4BAAA,EAAA,kBAAA,EAAA,wBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,6DAAA,EAAA,iBAAA,EAAA,oCAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,4BAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,6BAAA,EAAA,yBAAA,EAAA,8BAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA5BjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,IAAI,EAAE;AACL,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,YAAY,EAAE,sBAAsB;AACpC,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,qBAAqB,EAAE,6DAA6D;AACpF,wBAAA,mBAAmB,EAAE,oCAAoC;AACzD,wBAAA,sBAAsB,EAAE,wBAAwB;AAChD,wBAAA,sBAAsB,EAAE,wBAAwB;AAChD,wBAAA,sBAAsB,EAAE,4BAA4B;AACpD,wBAAA,sBAAsB,EAAE,4BAA4B;AACpD,wBAAA,yBAAyB,EAAE,qBAAqB;AAChD,wBAAA,uBAAuB,EAAE,mBAAmB;AAC5C,wBAAA,yBAAyB,EAAE,2BAA2B;AACtD,wBAAA,2BAA2B,EAAE,4BAA4B;AACzD,wBAAA,YAAY,EAAE,YAAY;AAC1B,wBAAA,SAAS,EAAE,8BAA8B;AACzC,wBAAA,qBAAqB,EAAE,uBAAuB;AAC9C,wBAAA,sBAAsB,EAAE,mBAAmB;AAC3C,wBAAA,mBAAmB,EAAE,oBAAoB;AACzC,wBAAA,qBAAqB,EAAE,oBAAoB;AAC3C,wBAAA,gBAAgB,EAAE,oBAAoB;AACtC,wBAAA,eAAe,EAAE,mBAAmB;AACpC,wBAAA,kBAAkB,EAAE,4BAA4B;AAChD,wBAAA,oBAAoB,EAAE,wBAAwB;AAC9C,qBAAA;AACD,iBAAA;;;AC7BD,IAAI,QAAQ,GAAG,CAAC;MAUH,iBAAiB,CAAA;;IAEb,EAAE,GAAG,KAAK,CAAS,CAAA,oBAAA,EAAuB,EAAE,QAAQ,CAAA,CAAE,yEAAC;2HAF3D,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,QAAA,EAAA,MAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,IAAI,EAAE;AACL,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,WAAW,EAAE,QAAQ;AACrB,wBAAA,IAAI,EAAE,cAAc;AACpB,qBAAA;AACD,iBAAA;;;MCqBY,oBAAoB,GAAG,IAAI,cAAc,CAAyB,sBAAsB;AAErG;;AAEG;AACG,SAAU,sBAAsB,CAAC,aAA+B,EAAA;IACrE,OAAO;AACN,QAAA,OAAO,EAAE,oBAAoB;QAC7B,UAAU,EAAE,MAAK;AAChB,YAAA,MAAM,OAAO,GAAG,IAAI,sBAAsB,EAAE;AAC5C,YAAA,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,mBAAmB,CAAC;AACjD,YAAA,OAAO,OAAO;QACf,CAAC;KACD;AACF;AAEA,MAAM,mBAAmB,GAAoB;AAC5C,IAAA,iBAAiB,EAAE,CAAC,KAAa,KAAI;AACpC,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAC3D,QAAA,OAAO,QAAQ,CAAC,KAAK,CAAC;IACvB,CAAC;AACD,IAAA,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AAClG,IAAA,KAAK,EAAE,CAAC,SAAS,GAAG,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,KAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,GAAG,CAAC,CAAC;AACzE,IAAA,YAAY,EAAE,CAAC,KAAa,EAAE,IAAY,KAAI;QAC7C,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;AAC1D,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,IAAI,EAAE,SAAS;AACf,SAAA,CAAC;IACH,CAAC;AACD,IAAA,WAAW,EAAE,CAAC,KAAa,KAAI;QAC9B,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;AAC1D,YAAA,KAAK,EAAE,OAAO;AACd,SAAA,CAAC;IACH,CAAC;AACD,IAAA,UAAU,EAAE,CAAC,IAAY,KAAY;QACpC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;AACtD,YAAA,IAAI,EAAE,SAAS;AACf,SAAA,CAAC;IACH,CAAC;AACD,IAAA,aAAa,EAAE,MAAM,0BAA0B;AAC/C,IAAA,SAAS,EAAE,MAAM,sBAAsB;AACvC,IAAA,YAAY,EAAE,CAAC,KAAa,KAAI;AAC/B,QAAA,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC;AAC/F,QAAA,OAAO,QAAQ,CAAC,KAAK,CAAC;IACvB,CAAC;AACD,IAAA,cAAc,EAAE,MAAM,CAAC;CACvB;AAED;;AAEG;SACa,qBAAqB,GAAA;AACpC,IAAA,OAAO,MAAM,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAC3F;MAGa,sBAAsB,CAAA;AACjB,IAAA,OAAO,GAAG,MAAM,CAAkB,mBAAmB,8EAAC;AAEvD,IAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAE3C,IAAA,GAAG,CAAC,MAAgC,EAAA;AAC1C,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC;IAClD;2HAPY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAtB,uBAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cADT,MAAM,EAAA,CAAA;;4FACnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MC9DrB,WAAW,CAAA;IACN,KAAK,GAAG,qBAAqB,EAAE;;IAG7B,YAAY,GAAG,iBAAiB,EAAK;;AAGvC,IAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG3C,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;;AAG7B,IAAA,aAAa,GAAG,KAAK,CAAM,EAAE,oFAAC;;IAG9B,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAK;;IAGhB,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAK;;IAGhB,QAAQ,GAAG,KAAK,CAAwB,KAAK,gFAC5D,SAAS,EAAE,gBAAgB,EAAA,CAC1B;;IAGc,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAK;;IAGjB,YAAY,GAAG,KAAK,CAAuB,MAAM,KAAK,mFAAC;;AAGvD,IAAA,YAAY,GAAG,KAAK,CAAmC,SAAS,oFAC/E,SAAS,EAAE,CAAC,CAAU,MAAM,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,GAAG,SAAS,GAAI,eAAe,CAAC,CAAC,CAAa,CAAC,GACvG;IAEiB,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,cAAc,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;IAG9F,kBAAkB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAK;;AAG/B,IAAA,MAAM,GAAG,YAAY,CAAC,iBAAiB,6EAAC;;IAGrC,MAAM,GAAG,eAAe,CAA2B,qBAAqB,8EAC1F,WAAW,EAAE,IAAI,EAAA,CAChB;AAEF;;AAEG;AACa,IAAA,WAAW,GAAG,YAAY,CAAC,MAC1C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACvF;AAED;;;AAGG;AACa,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;QAChC,MAAM,IAAI,GAAQ,EAAE;;QAGpB,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC;QACpD,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC;;QAGjD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,YAAY,EAAE;AAC3D,YAAA,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7D;QAEA,MAAM,UAAU,GAAG,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC;;QAGzC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,EAAE;AACxD,YAAA,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACtD;;AAGA,QAAA,OAAO,QAAQ,IAAI,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnB,YAAA,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD;AAEA,QAAA,OAAO,IAAI;AACZ,IAAA,CAAC,2EAAC;;AAGF,IAAA,aAAa,CAAC,IAAO,EAAA;AACpB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;;AAGtB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;AACjB,YAAA,OAAO,IAAI;QACZ;;QAGA,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;AAC/E,YAAA,OAAO,GAAG;QACX;;QAGA,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AAC5E,YAAA,OAAO,GAAG;QACX;;AAGA,QAAA,OAAO,IAAI;IACZ;;AAGA,IAAA,cAAc,CAAC,IAAO,EAAA;;AAErB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,OAAO,IAAI;QACZ;;AAGA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QAEtB,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;AAC/E,YAAA,OAAO,IAAI;QACZ;QAEA,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AAC5E,YAAA,OAAO,IAAI;QACZ;;AAGA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE;AAEtC,QAAA,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;AACrB,YAAA,OAAO,IAAI;QACZ;AAEA,QAAA,OAAO,KAAK;IACb;AAEA,IAAA,UAAU,CAAC,IAAO,EAAA;AACjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAmB;AAC7C,QAAA,OAAO,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC7E;AAEA,IAAA,UAAU,CAAC,IAAO,EAAA;AACjB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QACzB;aAAO;AACN,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACpB;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;;AAGA,IAAA,cAAc,CAAC,IAAO,EAAA;;AAErB,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YAC9B;QACD;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG1B,QAAA,eAAe,CACd;YACC,KAAK,EAAE,MAAK;;AAEX,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;gBAEnF,IAAI,IAAI,EAAE;oBACT,IAAI,CAAC,KAAK,EAAE;gBACb;YACD,CAAC;SACD,EACD;YACC,QAAQ,EAAE,IAAI,CAAC,SAAS;AACxB,SAAA,CACD;;AAGD,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;IACrC;AAEA;;;;;AAKG;AACH,IAAA,cAAc,CAAC,CAAI,EAAA;AAClB,QAAA,OAAO,KAAK;IACb;AAEA;;;;;AAKG;AACH,IAAA,YAAY,CAAC,CAAI,EAAA;AAChB,QAAA,OAAO,KAAK;IACb;AAEA;;;;;AAKG;AACH,IAAA,cAAc,CAAC,CAAI,EAAA;AAClB,QAAA,OAAO,KAAK;IACb;2HAxNY,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAFZ,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA6CN,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,SAAA,EAGe,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FA9C/E,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,SAAS,EAAE,CAAC,kBAAkB,CAAA,WAAA,CAAa,CAAC;AAC5C,iBAAA;w5BA4CsC,iBAAiB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAGe,qBAAqB,CAAA,EAAA,EAAA,GAAE;AAC5F,4BAAA,WAAW,EAAE,IAAI;AACjB,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MClEW,eAAe,CAAA;2HAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,cAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACL,wBAAA,IAAI,EAAE,cAAc;AACpB,qBAAA;AACD,iBAAA;;;MCGY,eAAe,CAAA;;IAER,SAAS,GAAG,iBAAiB,EAAK;2HAFzC,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACL,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,wBAAwB,EAAE,0BAA0B;AACpD,qBAAA;AACD,iBAAA;;;MCCY,sBAAsB,CAAA;;AAEjB,IAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;;IAG3B,SAAS,GAAG,iBAAiB,EAAE;;IAG/B,YAAY,GAAG,iBAAiB,EAAE;;IAGhC,KAAK,GAAG,qBAAqB,EAAE;AAE/B,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;AAC9F,IAAA,CAAC,qFAAC;AAEF,IAAA,WAAA,GAAA;;;;AAIC,QAAA,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK;aACnC,IAAI,CAAC,kBAAkB,EAAE;AACzB,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACpB,YAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC9B,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAC1B;AACD,QAAA,CAAC,CAAC;QAEH,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AAC/C,QAAA,CAAC,CAAC;IACH;;AAGQ,IAAA,aAAa,CAAC,aAAqB,EAAA;AAC1C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC;AACjB,aAAA,MAAM;AACN,aAAA,MAAM;aACN,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,aAAa,CAAC;AAC/C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QACjF,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAC3C;2HA1CY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,sEAAsE;AAChF,iBAAA;;;MCKY,qBAAqB,CAAA;;IAEhB,SAAS,GAAG,iBAAiB,EAAE;;IAG/B,YAAY,GAAG,iBAAiB,EAAE;;IAGhC,KAAK,GAAG,qBAAqB,EAAE;;IAGxC,cAAc,GAAA;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;;QAGnD,IAAI,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC;AACjE,QAAA,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAEvE,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC;;AAG7D,QAAA,IAAI,UAA8B;QAClC,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC9C,UAAU,GAAG,OAAO;QACrB;aAAO;AACN,YAAA,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACnE;;QAGA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC;QAE7D,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE;;YAE5D,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;YAC5C;QACD;QAEA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAC3C;2HAvCY,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,sBAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBATjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,IAAI,EAAE;AACL,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,WAAW,EAAE,sBAAsB;AACnC,wBAAA,mBAAmB,EAAE,4BAA4B;AACjD,wBAAA,SAAS,EAAE,kBAAkB;AAC7B,qBAAA;AACD,iBAAA;;;MCCY,yBAAyB,CAAA;;IAEpB,SAAS,GAAG,iBAAiB,EAAE;;IAG/B,YAAY,GAAG,iBAAiB,EAAE;;IAGhC,KAAK,GAAG,qBAAqB,EAAE;;IAGxC,kBAAkB,GAAA;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;;QAGnD,IAAI,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC;AACrE,QAAA,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAEpF,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,mBAAmB,CAAC;;AAGjE,QAAA,IAAI,UAA8B;QAClC,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC9C,UAAU,GAAG,OAAO;QACrB;aAAO;AACN,YAAA,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACvE;;QAGA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC;QAE7D,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE;;YAE5D,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;YAC5C;QACD;QAEA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAC3C;2HAvCY,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,0BAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,gCAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBATrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,IAAI,EAAE;AACL,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,WAAW,EAAE,0BAA0B;AACvC,wBAAA,mBAAmB,EAAE,gCAAgC;AACrD,wBAAA,SAAS,EAAE,sBAAsB;AACjC,qBAAA;AACD,iBAAA;;;MCIY,eAAe,CAAA;;IAEV,SAAS,GAAG,iBAAiB,EAAK;;AAGlC,IAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;;AAG5C,IAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG3C,IAAA,YAAY,GAAG,MAAM,CAAiC,WAAW,CAAC;;AAGhE,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QAClC,MAAM,KAAK,GAAG,EAAE;AAEhB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACxC,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC;AAEA,QAAA,OAAO,KAAK;AACb,IAAA,CAAC,6EAAC;;IAGM,SAAS,GAAyC,EAAE;;;AAI5D,IAAA,OAAO,sBAAsB,CAAI,CAAqB,EAAE,GAAY,EAAA;AACnE,QAAA,OAAO,IAAI;IACZ;AAEA,IAAA,WAAA,GAAA;;QAEC,MAAM,CAAC,MAAK;AACX,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;YAC3B,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC1C,QAAA,CAAC,CAAC;IACH;AAEQ,IAAA,YAAY,CAAC,KAAY,EAAA;;AAEhC,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE;YACrC,OAAO,CAAC,OAAO,EAAE;QAClB;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGnB,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE;AAC5E,gBAAA,SAAS,EAAE,IAAI;AACf,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7B;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;IACrC;IAEA,WAAW,GAAA;;AAEV,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE;YACrC,OAAO,CAAC,OAAO,EAAE;QAClB;IACD;2HAlEY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,iBAAA;;;MCEY,kBAAkB,CAAA;;IAEb,SAAS,GAAG,iBAAiB,EAAK;;IAGlC,YAAY,GAAG,iBAAiB,EAAK;;AAGrC,IAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;;AAG5C,IAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG3C,IAAA,YAAY,GAAG,MAAM,CAAiC,WAAW,CAAC;;IAGhE,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,gFAAC;;IAGxE,SAAS,GAAyC,EAAE;;;AAI5D,IAAA,OAAO,sBAAsB,CAAI,CAAwB,EAAE,GAAY,EAAA;AACtE,QAAA,OAAO,IAAI;IACZ;AAEA,IAAA,WAAA,GAAA;;QAEC,MAAM,CAAC,MAAK;;AAEX,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE;;YAEjC,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AAChD,QAAA,CAAC,CAAC;IACH;AAEQ,IAAA,eAAe,CAAC,QAAa,EAAA;;AAEpC,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE;YACrC,OAAO,CAAC,OAAO,EAAE;QAClB;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGnB,QAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE;gBAC5E,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC;AACxC,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7B;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;IACrC;IAEA,WAAW,GAAA;;AAEV,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE;YACrC,OAAO,CAAC,OAAO,EAAE;QAClB;IACD;2HA9DY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,iBAAA;;;MCPY,qBAAqB,CAAA;;AAEhB,IAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;;IAG3B,SAAS,GAAG,iBAAiB,EAAE;;IAG/B,YAAY,GAAG,iBAAiB,EAAE;;IAGhC,KAAK,GAAG,qBAAqB,EAAE;AAElD,IAAA,WAAA,GAAA;;;;AAIC,QAAA,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK;aACnC,IAAI,CAAC,kBAAkB,EAAE;AACzB,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACpB,YAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC9B,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YACzB;AACD,QAAA,CAAC,CAAC;QAEH,MAAM,CAAC,MAAK;AACX,YAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;AACjF,QAAA,CAAC,CAAC;IACH;;AAGQ,IAAA,YAAY,CAAC,IAAY,EAAA;AAChC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QAChF,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAC3C;2HAlCY,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oEAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,oEAAoE;AAC9E,iBAAA;;;MCiBY,gBAAgB,CAAA;IACX,KAAK,GAAG,qBAAqB,EAAE;AAEhD;;;;;AAKG;AACH,IAAA,cAAc,CAAC,CAAI,EAAA;AAClB,QAAA,OAAO,KAAK;IACb;AAEA;;;;;AAKG;AACH,IAAA,YAAY,CAAC,CAAI,EAAA;AAChB,QAAA,OAAO,KAAK;IACb;AAEA;;;;;AAKG;AACH,IAAA,cAAc,CAAC,CAAI,EAAA;AAClB,QAAA,OAAO,KAAK;IACb;;IAGmB,YAAY,GAAG,iBAAiB,EAAK;;AAGvC,IAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG3C,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;;AAG7B,IAAA,aAAa,GAAG,KAAK,CAAM,EAAE,oFAAC;;IAG9B,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAK;;IAGhB,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAK;;IAGhB,YAAY,GAAG,KAAK,CAAsB,SAAS,oFAClE,SAAS,EAAE,eAAe,EAAA,CACzB;;IAGc,YAAY,GAAG,KAAK,CAAsB,SAAS,oFAClE,SAAS,EAAE,eAAe,EAAA,CACzB;;IAGc,QAAQ,GAAG,KAAK,CAAwB,KAAK,gFAC5D,SAAS,EAAE,gBAAgB,EAAA,CAC1B;;IAGc,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAO;;IAGnB,YAAY,GAAG,KAAK,CAAuB,MAAM,KAAK,mFAAC;;AAGvD,IAAA,YAAY,GAAG,KAAK,CAAmC,SAAS,oFAC/E,SAAS,EAAE,CAAC,CAAU,MAAM,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,GAAG,SAAS,GAAI,eAAe,CAAC,CAAC,CAAa,CAAC,GACvG;IAEiB,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,cAAc,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;IAG9F,kBAAkB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAK;;AAG/B,IAAA,MAAM,GAAG,YAAY,CAAC,iBAAiB,6EAAC;;IAGrC,MAAM,GAAG,eAAe,CAA2B,qBAAqB,8EAC1F,WAAW,EAAE,IAAI,EAAA,CAChB;AAEF;;AAEG;IACa,WAAW,GAAG,YAAY,CAAC,MAC1C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACxE;AAED;;;AAGG;AACa,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;QAChC,MAAM,IAAI,GAAQ,EAAE;;QAGpB,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC;QACpD,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC;;QAGjD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,YAAY,EAAE;AAC3D,YAAA,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7D;QAEA,MAAM,UAAU,GAAG,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC;;QAGzC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,EAAE;AACxD,YAAA,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACtD;;AAGA,QAAA,OAAO,QAAQ,IAAI,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnB,YAAA,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD;AAEA,QAAA,OAAO,IAAI;AACZ,IAAA,CAAC,2EAAC;AAEF,IAAA,UAAU,CAAC,IAAO,EAAA;QACjB,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK;IAC/E;AAEA,IAAA,UAAU,CAAC,IAAO,EAAA;AACjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAqB;AAC/C,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAC1B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,YAAA,IAAI,QAAQ,EAAE,MAAM,KAAK,YAAY,EAAE;;gBAEtC;YACD;YAEA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9E;aAAO;AACN,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,YAAA,IAAI,QAAQ,EAAE,MAAM,KAAK,YAAY,EAAE;;gBAEtC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACtB;iBAAO;;AAEN,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC3C;QACD;IACD;;;AAIA,IAAA,aAAa,CAAC,IAAO,EAAA;AACpB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;;AAGtB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;AACjB,YAAA,OAAO,IAAI;QACZ;;QAGA,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;AAC/E,YAAA,OAAO,GAAG;QACX;;QAGA,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AAC5E,YAAA,OAAO,GAAG;QACX;;AAGA,QAAA,OAAO,IAAI;IACZ;;AAGA,IAAA,cAAc,CAAC,IAAO,EAAA;;AAErB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,OAAO,IAAI;QACZ;;AAGA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QAEtB,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;AAC/E,YAAA,OAAO,IAAI;QACZ;QAEA,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AAC5E,YAAA,OAAO,IAAI;QACZ;;AAGA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE;AAEtC,QAAA,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;AACrB,YAAA,OAAO,IAAI;QACZ;AAEA,QAAA,OAAO,KAAK;IACb;;AAGA,IAAA,cAAc,CAAC,IAAO,EAAA;;AAErB,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YAC9B;QACD;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG1B,QAAA,eAAe,CACd;YACC,KAAK,EAAE,MAAK;;AAEX,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;gBAEnF,IAAI,IAAI,EAAE;oBACT,IAAI,CAAC,KAAK,EAAE;gBACb;YACD,CAAC;SACD,EACD;YACC,QAAQ,EAAE,IAAI,CAAC,SAAS;AACxB,SAAA,CACD;;AAGD,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;IACrC;2HA/OY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAFjB,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAqFX,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,SAAA,EAGe,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAtF/E,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,SAAS,EAAE,CAAC,kBAAkB,CAAA,gBAAA,CAAkB,CAAC;AACjD,iBAAA;wmCAoFsC,iBAAiB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAGe,qBAAqB,CAAA,EAAA,EAAA,GAAE;AAC5F,4BAAA,WAAW,EAAE,IAAI;AACjB,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MCxFW,gBAAgB,CAAA;IACX,KAAK,GAAG,qBAAqB,EAAE;;IAE7B,YAAY,GAAG,iBAAiB,EAAK;;AAGvC,IAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG3C,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;;AAG7B,IAAA,aAAa,GAAG,KAAK,CAAM,EAAE,oFAAC;;IAG9B,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAK;;IAGhB,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAK;;IAGhB,QAAQ,GAAG,KAAK,CAAwB,KAAK,gFAC5D,SAAS,EAAE,gBAAgB,EAAA,CAC1B;;IAGc,YAAY,GAAG,KAAK,CAAuB,MAAM,KAAK,mFAAC;;AAGvD,IAAA,YAAY,GAAG,KAAK,CAAmC,SAAS,oFAC/E,SAAS,EAAE,CAAC,CAAU,MAAM,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,GAAG,SAAS,GAAI,eAAe,CAAC,CAAC,CAAa,CAAC,GACvG;IAEiB,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,cAAc,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;IAG9F,kBAAkB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAK;;AAG/B,IAAA,MAAM,GAAG,YAAY,CAAC,iBAAiB,6EAAC;;IAGrC,MAAM,GAAG,eAAe,CAA2B,qBAAqB,8EAC1F,WAAW,EAAE,IAAI,EAAA,CAChB;AAEF;;AAEG;AACa,IAAA,WAAW,GAAG,YAAY,CAAC,MAC1C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAC5F;AAED;;AAEG;IACa,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAK;AAEtC;;AAEG;IACa,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAK;AAEpC;;;AAGG;AACa,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;QAChC,MAAM,IAAI,GAAQ,EAAE;;QAGpB,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC;QACpD,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC;;QAGjD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,YAAY,EAAE;AAC3D,YAAA,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7D;QAEA,MAAM,UAAU,GAAG,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC;;QAGzC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,EAAE;AACxD,YAAA,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACtD;;AAGA,QAAA,OAAO,QAAQ,IAAI,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnB,YAAA,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD;AAEA,QAAA,OAAO,IAAI;AACZ,IAAA,CAAC,2EAAC;AAEF,IAAA,UAAU,CAAC,IAAO,EAAA;AACjB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AAE1B,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;AACnB,YAAA,OAAO,KAAK;QACb;QACA,MAAM,eAAe,GAAG,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,KAAK;QAChF,MAAM,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK;QAE1E,OAAO,eAAe,IAAI,aAAa;IACxC;AAEA,IAAA,UAAU,CAAC,IAAO,EAAA;AACjB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AAE1B,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAExB;QACD;AAEA,QAAA,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;YAClB,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AAC3C,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACvB;iBAAO,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AACnD,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YACxB;iBAAO,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AACpD,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACvB;YACA;QACD;;AAGA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAExB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IAC5B;;;AAIA,IAAA,aAAa,CAAC,IAAO,EAAA;AACpB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;;AAGtB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;AACjB,YAAA,OAAO,IAAI;QACZ;;QAGA,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;AAC/E,YAAA,OAAO,GAAG;QACX;;QAGA,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AAC5E,YAAA,OAAO,GAAG;QACX;;AAGA,QAAA,OAAO,IAAI;IACZ;;AAGA,IAAA,cAAc,CAAC,IAAO,EAAA;;AAErB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,OAAO,IAAI;QACZ;;AAGA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QAEtB,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;AAC/E,YAAA,OAAO,IAAI;QACZ;QAEA,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AAC5E,YAAA,OAAO,IAAI;QACZ;;AAGA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE;AAEtC,QAAA,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;AACrB,YAAA,OAAO,IAAI;QACZ;AAEA,QAAA,OAAO,KAAK;IACb;;AAGA,IAAA,cAAc,CAAC,IAAO,EAAA;;AAErB,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YAC9B;QACD;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG1B,QAAA,eAAe,CACd;YACC,KAAK,EAAE,MAAK;;AAEX,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;gBAEnF,IAAI,IAAI,EAAE;oBACT,IAAI,CAAC,KAAK,EAAE;gBACb;YACD,CAAC;SACD,EACD;YACC,QAAQ,EAAE,IAAI,CAAC,SAAS;AACxB,SAAA,CACD;;AAGD,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;IACrC;AAEA;;;;;AAKG;AACH,IAAA,cAAc,CAAC,IAAO,EAAA;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,OAAO,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,KAAK;IAChE;AAEA;;;;;AAKG;AACH,IAAA,YAAY,CAAC,IAAO,EAAA;AACnB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1B,QAAA,OAAO,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK;IAC5D;AAEA;;;;;AAKG;AACH,IAAA,cAAc,CAAC,IAAO,EAAA;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AAE1B,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;AACnB,YAAA,OAAO,KAAK;QACb;QAEA,QACC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;YACrC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC;YACzC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC;IAEzC;2HAxQY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EAFjB,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAyCX,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,SAAA,EAGe,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FA1C/E,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,SAAS,EAAE,CAAC,kBAAkB,CAAA,gBAAA,CAAkB,CAAC;AACjD,iBAAA;qxBAwCsC,iBAAiB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAGe,qBAAqB,CAAA,EAAA,EAAA,GAAE;AAC5F,4BAAA,WAAW,EAAE,IAAI;AACjB,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACxCK,MAAM,kBAAkB,GAAG;IACjC,qBAAqB;IACrB,eAAe;IACf,iBAAiB;IACjB,qBAAqB;IACrB,yBAAyB;IACzB,eAAe;IACf,kBAAkB;IAClB,WAAW;IACX,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,sBAAsB;IACtB,qBAAqB;;;AC3CtB;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"spartan-ng-brain-calendar.mjs","sources":["../../../../libs/brain/calendar/src/lib/brn-calendar-header.ts","../../../../libs/brain/calendar/src/lib/brn-calendar.token.ts","../../../../libs/brain/calendar/src/lib/i18n/calendar-i18n.ts","../../../../libs/brain/calendar/src/lib/utils/compare-days.ts","../../../../libs/brain/calendar/src/lib/brn-calendar.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-cell.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-cell-button.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-grid.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-month-select.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-next-button.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-previous-button.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-week.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-weekday.ts","../../../../libs/brain/calendar/src/lib/brn-calendar-year-select.ts","../../../../libs/brain/calendar/src/lib/mode/brn-calendar-multiple.ts","../../../../libs/brain/calendar/src/lib/mode/brn-calendar-range.ts","../../../../libs/brain/calendar/src/index.ts","../../../../libs/brain/calendar/src/spartan-ng-brain-calendar.ts"],"sourcesContent":["import { Directive, input } from '@angular/core';\n\nlet uniqueId = 0;\n\n@Directive({\n\tselector: '[brnCalendarHeader]',\n\thost: {\n\t\t'[id]': 'id()',\n\t\t'aria-live': 'polite',\n\t\trole: 'presentation',\n\t},\n})\nexport class BrnCalendarHeader {\n\t/** The unique id for the header */\n\tpublic readonly id = input<string>(`brn-calendar-header-${++uniqueId}`);\n}\n","import {\n\ttype ExistingProvider,\n\tinject,\n\tInjectionToken,\n\ttype InputSignal,\n\ttype Signal,\n\ttype Type,\n\ttype WritableSignal,\n} from '@angular/core';\nimport type { BrnCalendarCellButton } from './brn-calendar-cell-button';\nimport type { BrnCalendarHeader } from './brn-calendar-header';\n\nexport interface BrnCalendarBase<T> {\n\tisSelected: (date: T) => boolean;\n\tselectDate: (date: T) => void;\n\n\tconstrainDate: (date: T) => T;\n\tisDateDisabled: (date: T) => boolean;\n\tsetFocusedDate: (date: T) => void;\n\n\tisStartOfRange: (date: T) => boolean;\n\tisEndOfRange: (date: T) => boolean;\n\tisBetweenRange: (date: T) => boolean;\n\n\tdisabled: Signal<boolean>;\n\tfocusedDate: WritableSignal<T>;\n\theader: Signal<BrnCalendarHeader | undefined>;\n\tdays: Signal<T[]>;\n\thighlightDays: InputSignal<T[]>;\n\n\tunregisterCalendarCell(cell: BrnCalendarCellButton<T>): void;\n\tregisterCalendarCell(cell: BrnCalendarCellButton<T>): void;\n}\n\nexport const BrnCalendarToken = new InjectionToken<BrnCalendarBase<unknown>>('BrnCalendarToken');\n\nexport function provideBrnCalendar<T>(instance: Type<BrnCalendarBase<T>>): ExistingProvider {\n\treturn { provide: BrnCalendarToken, useExisting: instance };\n}\n\n/**\n * Inject the calendar component.\n */\nexport function injectBrnCalendar<T>(): BrnCalendarBase<T> {\n\treturn inject(BrnCalendarToken) as BrnCalendarBase<T>;\n}\n","import { inject, Injectable, InjectionToken, type Provider, signal } from '@angular/core';\n\nexport type Weekday = 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\nexport type MonthLabels = [\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n\tstring,\n];\n\nexport interface BrnCalendarI18n {\n\tformatWeekdayName: (index: number) => string;\n\tformatHeader: (month: number, year: number) => string;\n\tformatYear: (year: number) => string;\n\tformatMonth: (month: number) => string;\n\tlabelPrevious: () => string;\n\tlabelNext: () => string;\n\tlabelWeekday: (index: number) => string;\n\tmonths: () => [string, string, string, string, string, string, string, string, string, string, string, string];\n\tyears: (startYear?: number, endYear?: number) => number[];\n\tfirstDayOfWeek: () => Weekday;\n}\n\nexport const BrnCalendarI18nToken = new InjectionToken<BrnCalendarI18nService>('BrnCalendarI18nToken');\n\n/**\n * Provide the calendar i18n configuration.\n */\nexport function provideBrnCalendarI18n(configuration?: BrnCalendarI18n): Provider {\n\treturn {\n\t\tprovide: BrnCalendarI18nToken,\n\t\tuseFactory: () => {\n\t\t\tconst service = new BrnCalendarI18nService();\n\t\t\tservice.use(configuration ?? defaultCalendarI18n);\n\t\t\treturn service;\n\t\t},\n\t};\n}\n\nconst defaultCalendarI18n: BrnCalendarI18n = {\n\tformatWeekdayName: (index: number) => {\n\t\tconst weekdays = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n\t\treturn weekdays[index];\n\t},\n\tmonths: () => ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n\tyears: (startYear = 1925, endYear = new Date().getFullYear() + 1) =>\n\t\tArray.from({ length: endYear - startYear + 1 }, (_, i) => startYear + i),\n\tformatHeader: (month: number, year: number) => {\n\t\treturn new Date(year, month).toLocaleDateString(undefined, {\n\t\t\tmonth: 'long',\n\t\t\tyear: 'numeric',\n\t\t});\n\t},\n\tformatMonth: (month: number) => {\n\t\treturn new Date(2000, month).toLocaleDateString(undefined, {\n\t\t\tmonth: 'short',\n\t\t});\n\t},\n\tformatYear: (year: number): string => {\n\t\treturn new Date(year, 0).toLocaleDateString(undefined, {\n\t\t\tyear: 'numeric',\n\t\t});\n\t},\n\tlabelPrevious: () => 'Go to the previous month',\n\tlabelNext: () => 'Go to the next month',\n\tlabelWeekday: (index: number) => {\n\t\tconst weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n\t\treturn weekdays[index];\n\t},\n\tfirstDayOfWeek: () => 0,\n};\n\n/**\n * Inject the calendar i18n configuration.\n */\nexport function injectBrnCalendarI18n(): BrnCalendarI18nService {\n\treturn inject(BrnCalendarI18nToken, { optional: true }) ?? inject(BrnCalendarI18nService); // fallback\n}\n\n@Injectable({ providedIn: 'root' })\nexport class BrnCalendarI18nService {\n\tprivate readonly _config = signal<BrnCalendarI18n>(defaultCalendarI18n);\n\n\tpublic readonly config = this._config.asReadonly();\n\n\tpublic use(config: Partial<BrnCalendarI18n>) {\n\t\tthis._config.set({ ...this.config(), ...config });\n\t}\n}\n","import type { BrnDateAdapter } from '@spartan-ng/brain/date-time';\n\nexport const compareDays = <T>(a: T[], b: T[], dateAdapter: BrnDateAdapter<T>): boolean => {\n\tif (a === b) return true;\n\tif (!a || !b) return false;\n\tif (a.length !== b.length) return false;\n\treturn a.every((day, i) => dateAdapter.isSameDay(day, b[i]));\n};\n","import type { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tChangeDetectorRef,\n\tcomputed,\n\tcontentChild,\n\tDirective,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n} from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnCalendarCellButton } from './brn-calendar-cell-button';\nimport { BrnCalendarHeader } from './brn-calendar-header';\nimport { type BrnCalendarBase, provideBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n, type Weekday } from './i18n/calendar-i18n';\nimport { compareDays } from './utils/compare-days';\n\n@Directive({\n\tselector: '[brnCalendar]',\n\tproviders: [provideBrnCalendar(BrnCalendar)],\n})\nexport class BrnCalendar<T> implements BrnCalendarBase<T> {\n\tprivate readonly _i18n = injectBrnCalendarI18n();\n\n\t/** Access the date adapter */\n\tprotected readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the injector */\n\tprivate readonly _injector = inject(Injector);\n\n\t/** The days to highlight. */\n\tpublic readonly highlightDays = input<T[]>([]);\n\n\t/** The minimum date that can be selected.*/\n\tpublic readonly min = input<T>();\n\n\t/** The maximum date that can be selected. */\n\tpublic readonly max = input<T>();\n\n\t/** Determine if the date picker is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The selected value. */\n\tpublic readonly date = model<T>();\n\n\t/** Whether a specific date is disabled. */\n\tpublic readonly dateDisabled = input<(date: T) => boolean>(() => false);\n\n\t/** The day the week starts on */\n\tpublic readonly weekStartsOn = input<Weekday, NumberInput | undefined>(undefined, {\n\t\ttransform: (v: unknown) => (v === undefined || v === null ? undefined : (numberAttribute(v) as Weekday)),\n\t});\n\n\tprotected readonly _weekStartsOn = computed(() => this.weekStartsOn() ?? this._i18n.config().firstDayOfWeek());\n\n\t/** The default focused date. */\n\tpublic readonly defaultFocusedDate = input<T>();\n\n\t/** @internal Access the header */\n\tpublic readonly header = contentChild(BrnCalendarHeader);\n\n\tprivate readonly _cells: BrnCalendarCellButton<T>[] = [];\n\n\t/**\n\t * The focused date.\n\t */\n\tpublic readonly focusedDate = linkedSignal(() =>\n\t\tthis.constrainDate(this.defaultFocusedDate() ?? this.date() ?? this._dateAdapter.now()),\n\t);\n\n\t/**\n\t * Get all the days to display, this is the days of the current month\n\t * and the days of the previous and next month to fill the grid.\n\t */\n\tpublic readonly days = computed(\n\t\t() => {\n\t\t\tconst weekStartsOn = this._weekStartsOn();\n\t\t\tconst month = this.focusedDate();\n\t\t\tconst days: T[] = [];\n\n\t\t\t// Get the first and last day of the month.\n\t\t\tlet firstDay = this._dateAdapter.startOfMonth(month);\n\t\t\tlet lastDay = this._dateAdapter.endOfMonth(month);\n\n\t\t\t// we need to subtract until we get the to starting day before or on the start of the month.\n\t\t\twhile (this._dateAdapter.getDay(firstDay) !== weekStartsOn) {\n\t\t\t\tfirstDay = this._dateAdapter.subtract(firstDay, { days: 1 });\n\t\t\t}\n\n\t\t\tconst weekEndsOn = (weekStartsOn + 6) % 7;\n\n\t\t\t// we need to add until we get to the ending day after or on the end of the month.\n\t\t\twhile (this._dateAdapter.getDay(lastDay) !== weekEndsOn) {\n\t\t\t\tlastDay = this._dateAdapter.add(lastDay, { days: 1 });\n\t\t\t}\n\n\t\t\t// collect all the days to display.\n\t\t\twhile (firstDay <= lastDay) {\n\t\t\t\tdays.push(firstDay);\n\t\t\t\tfirstDay = this._dateAdapter.add(firstDay, { days: 1 });\n\t\t\t}\n\n\t\t\treturn days;\n\t\t},\n\t\t{\n\t\t\tequal: (a, b) => compareDays(a, b, this._dateAdapter),\n\t\t},\n\t);\n\n\t/** @internal Constrain a date to the min and max boundaries */\n\tconstrainDate(date: T): T {\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\t// If there is no min or max, return the date.\n\t\tif (!min && !max) {\n\t\t\treturn date;\n\t\t}\n\n\t\t// If there is a min and the date is before the min, return the min.\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn min;\n\t\t}\n\n\t\t// If there is a max and the date is after the max, return the max.\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn max;\n\t\t}\n\n\t\t// Return the date.\n\t\treturn date;\n\t}\n\n\t/** @internal Determine if a date is disabled */\n\tisDateDisabled(date: T): boolean {\n\t\t// if the calendar is disabled we can't select this date\n\t\tif (this.disabled()) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if the date is outside the min and max range\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if this specific date is disabled\n\t\tconst disabledFn = this.dateDisabled();\n\n\t\tif (disabledFn(date)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tisSelected(date: T): boolean {\n\t\tconst selected = this.date() as T | undefined;\n\t\treturn selected !== undefined && this._dateAdapter.isSameDay(date, selected);\n\t}\n\n\tselectDate(date: T): void {\n\t\tif (this.isSelected(date)) {\n\t\t\tthis.date.set(undefined);\n\t\t} else {\n\t\t\tthis.date.set(date);\n\t\t}\n\t\tthis.focusedDate.set(date);\n\t}\n\n\t/** @internal Set the focused date */\n\tsetFocusedDate(date: T): void {\n\t\t// check if the date is disabled.\n\t\tif (this.isDateDisabled(date)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.focusedDate.set(date);\n\t\t// wait until the cells have all updated\n\n\t\tafterNextRender(\n\t\t\t{\n\t\t\t\twrite: () => {\n\t\t\t\t\tconst cell = this._cells.find((c) => this._dateAdapter.isSameDay(c.date(), date));\n\t\t\t\t\tif (cell) {\n\t\t\t\t\t\tcell.focus();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tinjector: this._injector,\n\t\t\t},\n\t\t);\n\t\t// we must update the view to ensure the focused cell is visible.\n\t\tthis._changeDetector.detectChanges();\n\t}\n\n\t/**\n\t * Determine if a date is the start of a range. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisStartOfRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determine if a date is the end of a range. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisEndOfRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determine if a date is between the start and end dates. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns True if the date is between the start and end dates, false otherwise.\n\t * @internal\n\t */\n\tisBetweenRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\tunregisterCalendarCell(cell: BrnCalendarCellButton<T>): void {\n\t\tconst index = this._cells.indexOf(cell);\n\t\tif (index !== -1) {\n\t\t\tthis._cells.splice(index, 1);\n\t\t}\n\t}\n\tregisterCalendarCell(cell: BrnCalendarCellButton<T>): void {\n\t\tthis._cells.push(cell);\n\t}\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n\tselector: '[brnCalendarCell]',\n\thost: {\n\t\trole: 'presentation',\n\t},\n})\nexport class BrnCalendarCell {}\n","import { computed, DestroyRef, Directive, ElementRef, inject, input } from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { injectBrnCalendar } from './brn-calendar.token';\n\n@Directive({\n\tselector: 'button[brnCalendarCellButton]',\n\thost: {\n\t\trole: 'gridcell',\n\t\t'[tabindex]': 'focusable() ? 0 : -1',\n\t\ttype: 'button',\n\t\t'[attr.data-outside]': '!selected() && outside() && (!end() && !start())? true : null',\n\t\t'[attr.data-today]': 'today() && !selected() ? true : null',\n\t\t'[attr.data-selected-single]': 'selected() && !start() && !end() && !betweenRange() ? true : null',\n\t\t'[attr.data-disabled]': 'disabled() ? true : null',\n\t\t'[attr.aria-selected]': 'selected() ? true : null',\n\t\t'[attr.aria-disabled]': 'disabled() ? true : null',\n\t\t'[attr.data-range-start]': 'start() ? true : null',\n\t\t'[attr.data-range-end]': 'end() ? true : null',\n\t\t'[attr.data-highlighted]': 'highlighted() ? true : null',\n\t\t'[attr.data-range-middle]': 'betweenRange() ? true : null',\n\t\t'[disabled]': 'disabled()',\n\t\t'(click)': '_calendar.selectDate(date())',\n\t\t'(keydown.arrowLeft)': 'focusPrevious($event)',\n\t\t'(keydown.arrowRight)': 'focusNext($event)',\n\t\t'(keydown.arrowUp)': 'focusAbove($event)',\n\t\t'(keydown.arrowDown)': 'focusBelow($event)',\n\t\t'(keydown.home)': 'focusFirst($event)',\n\t\t'(keydown.end)': 'focusLast($event)',\n\t\t'(keydown.pageUp)': 'focusPreviousMonth($event)',\n\t\t'(keydown.pageDown)': 'focusNextMonth($event)',\n\t},\n})\nexport class BrnCalendarCellButton<T> {\n\t/** Access the date adapter */\n\tprotected readonly _dateAdapter = injectDateAdapter<T>();\n\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\n\t/** Access the calendar component */\n\tprotected readonly _calendar = injectBrnCalendar<T>();\n\n\t/** Access the element ref */\n\tprivate readonly _elementRef = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n\n\t/** The date this cell represents */\n\tpublic readonly date = input.required<T>();\n\n\t/** Whether this date is currently selected */\n\tpublic readonly selected = computed(() => this._calendar.isSelected(this.date()));\n\tpublic readonly start = computed(() => this._calendar.isStartOfRange(this.date()));\n\tpublic readonly end = computed(() => this._calendar.isEndOfRange(this.date()));\n\tpublic readonly betweenRange = computed(() => this._calendar.isBetweenRange(this.date()));\n\tpublic readonly highlighted = computed(() =>\n\t\tthis._calendar.highlightDays().some((d) => this._dateAdapter.isSameDay(this.date(), d)),\n\t);\n\n\tconstructor() {\n\t\tthis._calendar.registerCalendarCell(this);\n\n\t\tthis._destroyRef.onDestroy(() => this._calendar.unregisterCalendarCell(this));\n\t}\n\n\t/** Whether this date is focusable */\n\tpublic readonly focusable = computed(() => this._dateAdapter.isSameDay(this._calendar.focusedDate(), this.date()));\n\n\tpublic readonly outside = computed(() => {\n\t\tconst focusedDate = this._calendar.focusedDate();\n\t\treturn !this._dateAdapter.isSameMonth(this.date(), focusedDate);\n\t});\n\n\t/** Whether this date is today */\n\tpublic readonly today = computed(() => this._dateAdapter.isSameDay(this.date(), this._dateAdapter.now()));\n\n\t/** Whether this date is disabled */\n\tpublic readonly disabled = computed(() => this._calendar.isDateDisabled(this.date()) || this._calendar.disabled());\n\n\t/**\n\t * Focus the previous cell.\n\t */\n\tprotected focusPrevious(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\t// in rtl, the arrow keys are reversed.\n\t\tconst targetDate = this._dateAdapter.add(this._calendar.focusedDate(), {\n\t\t\tdays: this.getDirection() === 'rtl' ? 1 : -1,\n\t\t});\n\n\t\tthis._calendar.setFocusedDate(targetDate);\n\t}\n\n\t/**\n\t * Focus the next cell.\n\t */\n\tprotected focusNext(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tconst targetDate = this._dateAdapter.add(this._calendar.focusedDate(), {\n\t\t\tdays: this.getDirection() === 'rtl' ? -1 : 1,\n\t\t});\n\n\t\tthis._calendar.setFocusedDate(targetDate);\n\t}\n\n\t/**\n\t * Focus the above cell.\n\t */\n\tprotected focusAbove(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis._calendar.setFocusedDate(this._dateAdapter.subtract(this._calendar.focusedDate(), { days: 7 }));\n\t}\n\n\t/**\n\t * Focus the below cell.\n\t */\n\tprotected focusBelow(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis._calendar.setFocusedDate(this._dateAdapter.add(this._calendar.focusedDate(), { days: 7 }));\n\t}\n\n\t/**\n\t * Focus the first date of the month.\n\t */\n\tprotected focusFirst(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis._calendar.setFocusedDate(this._dateAdapter.startOfMonth(this._calendar.focusedDate()));\n\t}\n\n\t/**\n\t * Focus the last date of the month.\n\t */\n\tprotected focusLast(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis._calendar.setFocusedDate(this._dateAdapter.endOfMonth(this._calendar.focusedDate()));\n\t}\n\n\t/**\n\t * Focus the same date in the previous month.\n\t */\n\tprotected focusPreviousMonth(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tconst date = this._dateAdapter.getDate(this._calendar.focusedDate());\n\n\t\tlet previousMonthTarget = this._dateAdapter.startOfMonth(this._calendar.focusedDate());\n\t\tpreviousMonthTarget = this._dateAdapter.subtract(previousMonthTarget, { months: 1 });\n\n\t\tconst lastDay = this._dateAdapter.endOfMonth(previousMonthTarget);\n\n\t\t// if we are on a date that does not exist in the previous month, we should focus the last day of the month.\n\t\tif (date > this._dateAdapter.getDate(lastDay)) {\n\t\t\tthis._calendar.setFocusedDate(lastDay);\n\t\t} else {\n\t\t\tthis._calendar.setFocusedDate(this._dateAdapter.set(previousMonthTarget, { day: date }));\n\t\t}\n\t}\n\n\t/**\n\t * Focus the same date in the next month.\n\t */\n\tprotected focusNextMonth(event: Event): void {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tconst date = this._dateAdapter.getDate(this._calendar.focusedDate());\n\n\t\tlet nextMonthTarget = this._dateAdapter.startOfMonth(this._calendar.focusedDate());\n\t\tnextMonthTarget = this._dateAdapter.add(nextMonthTarget, { months: 1 });\n\n\t\tconst lastDay = this._dateAdapter.endOfMonth(nextMonthTarget);\n\n\t\t// if we are on a date that does not exist in the next month, we should focus the last day of the month.\n\t\tif (date > this._dateAdapter.getDate(lastDay)) {\n\t\t\tthis._calendar.setFocusedDate(lastDay);\n\t\t} else {\n\t\t\tthis._calendar.setFocusedDate(this._dateAdapter.set(nextMonthTarget, { day: date }));\n\t\t}\n\t}\n\n\t/**\n\t * Get the direction of the element.\n\t */\n\tprivate getDirection(): 'ltr' | 'rtl' {\n\t\treturn getComputedStyle(this._elementRef.nativeElement).direction === 'rtl' ? 'rtl' : 'ltr';\n\t}\n\n\tfocus(): void {\n\t\tthis._elementRef.nativeElement.focus();\n\t}\n}\n","import { Directive } from '@angular/core';\nimport { injectBrnCalendar } from './brn-calendar.token';\n\n@Directive({\n\tselector: '[brnCalendarGrid]',\n\thost: {\n\t\trole: 'grid',\n\t\t'[attr.aria-labelledby]': '_calendar.header()?.id()',\n\t},\n})\nexport class BrnCalendarGrid<T> {\n\t/** Access the calendar component */\n\tprotected readonly _calendar = injectBrnCalendar<T>();\n}\n","import { computed, Directive, effect, inject } from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnSelect } from '@spartan-ng/brain/select';\nimport { injectBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: 'brnSelect[brnCalendarMonthSelect],hlm-select[brnCalendarMonthSelect]',\n})\nexport class BrnCalendarMonthSelect {\n\t/** Access the select */\n\tprivate readonly _select = inject(BrnSelect);\n\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar();\n\n\t/** Access the date adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter();\n\n\t/** Access the calendar i18n */\n\tprotected readonly _i18n = injectBrnCalendarI18n();\n\n\tprotected readonly _selectedMonth = computed(() => {\n\t\treturn this._i18n.config().months()[this._dateAdapter.getMonth(this._calendar.focusedDate())];\n\t});\n\n\tconstructor() {\n\t\t// React to user selection through the injected select's typed `value` output rather than a\n\t\t// host-listener `$event` (which Angular types as `Event`). The month select's values are the\n\t\t// month strings, so narrow to `string` before handling.\n\t\toutputToObservable(this._select.value)\n\t\t\t.pipe(takeUntilDestroyed())\n\t\t\t.subscribe((value) => {\n\t\t\t\tif (typeof value === 'string') {\n\t\t\t\t\tthis.monthSelected(value);\n\t\t\t\t}\n\t\t\t});\n\n\t\teffect(() => {\n\t\t\tthis._select.writeValue(this._selectedMonth());\n\t\t});\n\t}\n\n\t/** Focus selected month */\n\tprivate monthSelected(selectedMonth: string): void {\n\t\tconst month = this._i18n\n\t\t\t.config()\n\t\t\t.months()\n\t\t\t.findIndex((month) => month === selectedMonth);\n\t\tconst targetDate = this._dateAdapter.set(this._calendar.focusedDate(), { month });\n\t\tthis._calendar.focusedDate.set(targetDate);\n\t}\n}\n","import { Directive } from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { injectBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: '[brnCalendarNextButton]',\n\thost: {\n\t\ttype: 'button',\n\t\t'data-slot': 'calendar-next-button',\n\t\t'[attr.aria-label]': '_i18n.config().labelNext()',\n\t\t'(click)': 'focusNextMonth()',\n\t},\n})\nexport class BrnCalendarNextButton {\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar();\n\n\t/** Access the date adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter();\n\n\t/** Access the calendar i18n */\n\tprotected readonly _i18n = injectBrnCalendarI18n();\n\n\t/** Focus the next month */\n\tprotected focusNextMonth(): void {\n\t\tconst focusedDate = this._calendar.focusedDate();\n\t\tconst date = this._dateAdapter.getDate(focusedDate);\n\n\t\t// go to start of month first, then add 1 month to avoid day overflow\n\t\tlet nextMonthTarget = this._dateAdapter.startOfMonth(focusedDate);\n\t\tnextMonthTarget = this._dateAdapter.add(nextMonthTarget, { months: 1 });\n\n\t\tconst lastDay = this._dateAdapter.endOfMonth(nextMonthTarget);\n\n\t\t// if we are on a date that does not exist in the next month, clamp to the last day of the month.\n\t\tlet targetDate: typeof focusedDate;\n\t\tif (date > this._dateAdapter.getDate(lastDay)) {\n\t\t\ttargetDate = lastDay;\n\t\t} else {\n\t\t\ttargetDate = this._dateAdapter.set(nextMonthTarget, { day: date });\n\t\t}\n\n\t\t// if the date is disabled, but there are available dates in the month, focus the constrained date.\n\t\tconst possibleDate = this._calendar.constrainDate(targetDate);\n\n\t\tif (this._dateAdapter.isSameMonth(possibleDate, targetDate)) {\n\t\t\t// if this date is within the same month, then focus it\n\t\t\tthis._calendar.focusedDate.set(possibleDate);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._calendar.focusedDate.set(targetDate);\n\t}\n}\n","import { Directive } from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { injectBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: '[brnCalendarPreviousButton]',\n\thost: {\n\t\ttype: 'button',\n\t\t'data-slot': 'calendar-previous-button',\n\t\t'[attr.aria-label]': '_i18n.config().labelPrevious()',\n\t\t'(click)': 'focusPreviousMonth()',\n\t},\n})\nexport class BrnCalendarPreviousButton {\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar();\n\n\t/** Access the date adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter();\n\n\t/** Access the calendar i18n */\n\tprotected readonly _i18n = injectBrnCalendarI18n();\n\n\t/** Focus the previous month */\n\tprotected focusPreviousMonth(): void {\n\t\tconst focusedDate = this._calendar.focusedDate();\n\t\tconst date = this._dateAdapter.getDate(focusedDate);\n\n\t\t// go to start of month first, then subtract 1 month to avoid day overflow\n\t\tlet previousMonthTarget = this._dateAdapter.startOfMonth(focusedDate);\n\t\tpreviousMonthTarget = this._dateAdapter.subtract(previousMonthTarget, { months: 1 });\n\n\t\tconst lastDay = this._dateAdapter.endOfMonth(previousMonthTarget);\n\n\t\t// if we are on a date that does not exist in the previous month, clamp to the last day of the month.\n\t\tlet targetDate: typeof focusedDate;\n\t\tif (date > this._dateAdapter.getDate(lastDay)) {\n\t\t\ttargetDate = lastDay;\n\t\t} else {\n\t\t\ttargetDate = this._dateAdapter.set(previousMonthTarget, { day: date });\n\t\t}\n\n\t\t// if the date is disabled, but there are available dates in the month, focus the constrained date.\n\t\tconst possibleDate = this._calendar.constrainDate(targetDate);\n\n\t\tif (this._dateAdapter.isSameMonth(possibleDate, targetDate)) {\n\t\t\t// if this date is within the same month, then focus it\n\t\t\tthis._calendar.focusedDate.set(possibleDate);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._calendar.focusedDate.set(targetDate);\n\t}\n}\n","import {\n\tChangeDetectorRef,\n\tcomputed,\n\tDirective,\n\teffect,\n\ttype EmbeddedViewRef,\n\tinject,\n\ttype OnDestroy,\n\tTemplateRef,\n\tuntracked,\n\tViewContainerRef,\n} from '@angular/core';\nimport { injectBrnCalendar } from './brn-calendar.token';\n\n@Directive({\n\tselector: '[brnCalendarWeek]',\n})\nexport class BrnCalendarWeek<T> implements OnDestroy {\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar<T>();\n\n\t/** Access the view container ref */\n\tprivate readonly _viewContainerRef = inject(ViewContainerRef);\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the template ref */\n\tprivate readonly _templateRef = inject<TemplateRef<BrnWeekContext<T>>>(TemplateRef);\n\n\t// get the weeks to display.\n\tprotected readonly _weeks = computed(() => {\n\t\tconst days = this._calendar.days();\n\t\tconst weeks = [];\n\n\t\tfor (let i = 0; i < days.length; i += 7) {\n\t\t\tweeks.push(days.slice(i, i + 7));\n\t\t}\n\n\t\treturn weeks;\n\t});\n\n\t/** Store the view refs */\n\tprivate _viewRefs: EmbeddedViewRef<BrnWeekContext<T>>[] = [];\n\n\t// Make sure the template checker knows the type of the context with which the\n\t// template of this directive will be rendered\n\tstatic ngTemplateContextGuard<T>(_: BrnCalendarWeek<T>, ctx: unknown): ctx is BrnWeekContext<T> {\n\t\treturn true;\n\t}\n\n\tconstructor() {\n\t\t// this should use `afterRenderEffect` but it's not available in the current version\n\t\teffect(() => {\n\t\t\tconst weeks = this._weeks();\n\t\t\tuntracked(() => this._renderWeeks(weeks));\n\t\t});\n\t}\n\n\tprivate _renderWeeks(weeks: T[][]): void {\n\t\t// Destroy all the views when the directive is destroyed\n\t\tfor (const viewRef of this._viewRefs) {\n\t\t\tviewRef.destroy();\n\t\t}\n\n\t\tthis._viewRefs = [];\n\n\t\t// Create a new view for each week\n\t\tfor (const week of weeks) {\n\t\t\tconst viewRef = this._viewContainerRef.createEmbeddedView(this._templateRef, {\n\t\t\t\t$implicit: week,\n\t\t\t});\n\t\t\tthis._viewRefs.push(viewRef);\n\t\t}\n\n\t\tthis._changeDetector.detectChanges();\n\t}\n\n\tngOnDestroy(): void {\n\t\t// Destroy all the views when the directive is destroyed\n\t\tfor (const viewRef of this._viewRefs) {\n\t\t\tviewRef.destroy();\n\t\t}\n\t}\n}\n\ninterface BrnWeekContext<T> {\n\t$implicit: T[];\n}\n","import {\n\tChangeDetectorRef,\n\tcomputed,\n\tDirective,\n\teffect,\n\ttype EmbeddedViewRef,\n\tinject,\n\ttype OnDestroy,\n\tTemplateRef,\n\tuntracked,\n\tViewContainerRef,\n} from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { injectBrnCalendar } from './brn-calendar.token';\n\n@Directive({\n\tselector: '[brnCalendarWeekday]',\n})\nexport class BrnCalendarWeekday<T> implements OnDestroy {\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar<T>();\n\n\t/** Access the date time adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the view container ref */\n\tprivate readonly _viewContainerRef = inject(ViewContainerRef);\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the template ref */\n\tprivate readonly _templateRef = inject<TemplateRef<BrnWeekdayContext>>(TemplateRef);\n\n\t/** Get the days of the week to display in the header. */\n\tprotected readonly _weekdays = computed(() => this._calendar.days().slice(0, 7));\n\n\t/** Store the view refs */\n\tprivate _viewRefs: EmbeddedViewRef<BrnWeekdayContext>[] = [];\n\n\t// Make sure the template checker knows the type of the context with which the\n\t// template of this directive will be rendered\n\tstatic ngTemplateContextGuard<T>(_: BrnCalendarWeekday<T>, ctx: unknown): ctx is BrnWeekdayContext {\n\t\treturn true;\n\t}\n\n\tconstructor() {\n\t\t// Create a new view for each day\n\t\teffect(() => {\n\t\t\t// Get the weekdays to display\n\t\t\tconst weekdays = this._weekdays();\n\t\t\t// Render the weekdays\n\t\t\tuntracked(() => this._renderWeekdays(weekdays));\n\t\t});\n\t}\n\n\tprivate _renderWeekdays(weekdays: T[]): void {\n\t\t// Destroy all the views when the directive is destroyed\n\t\tfor (const viewRef of this._viewRefs) {\n\t\t\tviewRef.destroy();\n\t\t}\n\n\t\tthis._viewRefs = [];\n\n\t\t// Create a new view for each day\n\t\tfor (const day of weekdays) {\n\t\t\tconst viewRef = this._viewContainerRef.createEmbeddedView(this._templateRef, {\n\t\t\t\t$implicit: this._dateAdapter.getDay(day),\n\t\t\t});\n\t\t\tthis._viewRefs.push(viewRef);\n\t\t}\n\n\t\tthis._changeDetector.detectChanges();\n\t}\n\n\tngOnDestroy(): void {\n\t\t// Destroy all the views when the directive is destroyed\n\t\tfor (const viewRef of this._viewRefs) {\n\t\t\tviewRef.destroy();\n\t\t}\n\t}\n}\n\ninterface BrnWeekdayContext {\n\t$implicit: number;\n}\n","import { Directive, effect, inject } from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnSelect } from '@spartan-ng/brain/select';\nimport { injectBrnCalendar } from './brn-calendar.token';\nimport { injectBrnCalendarI18n } from './i18n/calendar-i18n';\n\n@Directive({\n\tselector: 'brnSelect[brnCalendarYearSelect],hlm-select[brnCalendarYearSelect]',\n})\nexport class BrnCalendarYearSelect {\n\t/** Access the select */\n\tprivate readonly _select = inject(BrnSelect);\n\n\t/** Access the calendar */\n\tprivate readonly _calendar = injectBrnCalendar();\n\n\t/** Access the date adapter */\n\tprivate readonly _dateAdapter = injectDateAdapter();\n\n\t/** Access the calendar i18n */\n\tprotected readonly _i18n = injectBrnCalendarI18n();\n\n\tconstructor() {\n\t\t// React to user selection through the injected select's typed `value` output rather than a\n\t\t// host-listener `$event` (which Angular types as `Event`). The year select's values are\n\t\t// numbers, so narrow to `number` before handling.\n\t\toutputToObservable(this._select.value)\n\t\t\t.pipe(takeUntilDestroyed())\n\t\t\t.subscribe((value) => {\n\t\t\t\tif (typeof value === 'number') {\n\t\t\t\t\tthis.yearSelected(value);\n\t\t\t\t}\n\t\t\t});\n\n\t\teffect(() => {\n\t\t\tthis._select.writeValue(this._dateAdapter.getYear(this._calendar.focusedDate()));\n\t\t});\n\t}\n\n\t/** Focus selected year */\n\tprivate yearSelected(year: number): void {\n\t\tconst targetDate = this._dateAdapter.set(this._calendar.focusedDate(), { year });\n\t\tthis._calendar.focusedDate.set(targetDate);\n\t}\n}\n","import type { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tChangeDetectorRef,\n\tcomputed,\n\tcontentChild,\n\tDirective,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n} from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnCalendarCellButton } from '../brn-calendar-cell-button';\nimport { BrnCalendarHeader } from '../brn-calendar-header';\nimport { type BrnCalendarBase, provideBrnCalendar } from '../brn-calendar.token';\nimport { injectBrnCalendarI18n, type Weekday } from '../i18n/calendar-i18n';\nimport { compareDays } from '../utils/compare-days';\n\n@Directive({\n\tselector: '[brnCalendarMulti]',\n\tproviders: [provideBrnCalendar(BrnCalendarMulti)],\n})\nexport class BrnCalendarMulti<T> implements BrnCalendarBase<T> {\n\tprivate readonly _i18n = injectBrnCalendarI18n();\n\n\tprivate readonly _cells: BrnCalendarCellButton<T>[] = [];\n\n\t/**\n\t * Determine if a date is the start of a range. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisStartOfRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determine if a date is the end of a range. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisEndOfRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determine if a date is between the start and end dates. In a date picker, this is always false.\n\t * @param date The date to check.\n\t * @returns True if the date is between the start and end dates, false otherwise.\n\t * @internal\n\t */\n\tisBetweenRange(_: T): boolean {\n\t\treturn false;\n\t}\n\n\t// /** Access the date adapter */\n\tprotected readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the injector */\n\tprivate readonly _injector = inject(Injector);\n\n\t/** The days to highlight. */\n\tpublic readonly highlightDays = input<T[]>([]);\n\n\t/** The minimum date that can be selected.*/\n\tpublic readonly min = input<T>();\n\n\t/** The maximum date that can be selected. */\n\tpublic readonly max = input<T>();\n\n\t/** The minimum selectable dates. */\n\tpublic readonly minSelection = input<number, NumberInput>(undefined, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** The maximum selectable dates. */\n\tpublic readonly maxSelection = input<number, NumberInput>(undefined, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Determine if the date picker is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The selected value. */\n\tpublic readonly date = model<T[]>();\n\n\t/** Whether a specific date is disabled. */\n\tpublic readonly dateDisabled = input<(date: T) => boolean>(() => false);\n\n\t/** The day the week starts on */\n\tpublic readonly weekStartsOn = input<Weekday, NumberInput | undefined>(undefined, {\n\t\ttransform: (v: unknown) => (v === undefined || v === null ? undefined : (numberAttribute(v) as Weekday)),\n\t});\n\n\tprotected readonly _weekStartsOn = computed(() => this.weekStartsOn() ?? this._i18n.config().firstDayOfWeek());\n\n\t/** The default focused date. */\n\tpublic readonly defaultFocusedDate = input<T>();\n\n\t/** @internal Access the header */\n\tpublic readonly header = contentChild(BrnCalendarHeader);\n\n\t/**\n\t * The focused date.\n\t */\n\tpublic readonly focusedDate = linkedSignal(() =>\n\t\tthis.constrainDate(this.defaultFocusedDate() ?? this._dateAdapter.now()),\n\t);\n\n\t/**\n\t * Get all the days to display, this is the days of the current month\n\t * and the days of the previous and next month to fill the grid.\n\t */\n\tpublic readonly days = computed(\n\t\t() => {\n\t\t\tconst weekStartsOn = this._weekStartsOn();\n\t\t\tconst month = this.focusedDate();\n\t\t\tconst days: T[] = [];\n\n\t\t\t// Get the first and last day of the month.\n\t\t\tlet firstDay = this._dateAdapter.startOfMonth(month);\n\t\t\tlet lastDay = this._dateAdapter.endOfMonth(month);\n\n\t\t\t// we need to subtract until we get the to starting day before or on the start of the month.\n\t\t\twhile (this._dateAdapter.getDay(firstDay) !== weekStartsOn) {\n\t\t\t\tfirstDay = this._dateAdapter.subtract(firstDay, { days: 1 });\n\t\t\t}\n\n\t\t\tconst weekEndsOn = (weekStartsOn + 6) % 7;\n\n\t\t\t// we need to add until we get to the ending day after or on the end of the month.\n\t\t\twhile (this._dateAdapter.getDay(lastDay) !== weekEndsOn) {\n\t\t\t\tlastDay = this._dateAdapter.add(lastDay, { days: 1 });\n\t\t\t}\n\n\t\t\t// collect all the days to display.\n\t\t\twhile (firstDay <= lastDay) {\n\t\t\t\tdays.push(firstDay);\n\t\t\t\tfirstDay = this._dateAdapter.add(firstDay, { days: 1 });\n\t\t\t}\n\n\t\t\treturn days;\n\t\t},\n\t\t{\n\t\t\tequal: (a, b) => compareDays(a, b, this._dateAdapter),\n\t\t},\n\t);\n\n\tisSelected(date: T): boolean {\n\t\treturn this.date()?.some((d) => this._dateAdapter.isSameDay(d, date)) ?? false;\n\t}\n\n\tselectDate(date: T): void {\n\t\tconst selected = this.date() as T[] | undefined;\n\t\tif (this.isSelected(date)) {\n\t\t\tconst minSelection = this.minSelection();\n\t\t\tif (selected?.length === minSelection) {\n\t\t\t\t// min selection reached, do not allow to deselect\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.date.set(selected?.filter((d) => !this._dateAdapter.isSameDay(d, date)));\n\t\t} else {\n\t\t\tconst maxSelection = this.maxSelection();\n\t\t\tif (selected?.length === maxSelection) {\n\t\t\t\t// max selection reached, reset the selection to date\n\t\t\t\tthis.date.set([date]);\n\t\t\t} else {\n\t\t\t\t// add the date to the selection\n\t\t\t\tthis.date.set([...(selected ?? []), date]);\n\t\t\t}\n\t\t}\n\t}\n\n\t// same as in brn-calendar.directive.ts\n\t/** @internal Constrain a date to the min and max boundaries */\n\tconstrainDate(date: T): T {\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\t// If there is no min or max, return the date.\n\t\tif (!min && !max) {\n\t\t\treturn date;\n\t\t}\n\n\t\t// If there is a min and the date is before the min, return the min.\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn min;\n\t\t}\n\n\t\t// If there is a max and the date is after the max, return the max.\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn max;\n\t\t}\n\n\t\t// Return the date.\n\t\treturn date;\n\t}\n\n\t/** @internal Determine if a date is disabled */\n\tisDateDisabled(date: T): boolean {\n\t\t// if the calendar is disabled we can't select this date\n\t\tif (this.disabled()) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if the date is outside the min and max range\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if this specific date is disabled\n\t\tconst disabledFn = this.dateDisabled();\n\n\t\tif (disabledFn(date)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/** @internal Set the focused date */\n\tsetFocusedDate(date: T): void {\n\t\t// check if the date is disabled.\n\t\tif (this.isDateDisabled(date)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.focusedDate.set(date);\n\n\t\t// wait until the cells have all updated\n\t\tafterNextRender(\n\t\t\t{\n\t\t\t\twrite: () => {\n\t\t\t\t\tconst cell = this._cells.find((c) => this._dateAdapter.isSameDay(c.date(), date));\n\t\t\t\t\tif (cell) {\n\t\t\t\t\t\tcell.focus();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tinjector: this._injector,\n\t\t\t},\n\t\t);\n\n\t\t// we must update the view to ensure the focused cell is visible.\n\t\tthis._changeDetector.detectChanges();\n\t}\n\n\tunregisterCalendarCell(cell: BrnCalendarCellButton<T>): void {\n\t\tconst index = this._cells.indexOf(cell);\n\t\tif (index !== -1) {\n\t\t\tthis._cells.splice(index, 1);\n\t\t}\n\t}\n\tregisterCalendarCell(cell: BrnCalendarCellButton<T>): void {\n\t\tthis._cells.push(cell);\n\t}\n}\n","import type { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n\tafterNextRender,\n\tbooleanAttribute,\n\tChangeDetectorRef,\n\tcomputed,\n\tcontentChild,\n\tDirective,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n} from '@angular/core';\nimport { injectDateAdapter } from '@spartan-ng/brain/date-time';\nimport { BrnCalendarCellButton } from '../brn-calendar-cell-button';\nimport { BrnCalendarHeader } from '../brn-calendar-header';\nimport { type BrnCalendarBase, provideBrnCalendar } from '../brn-calendar.token';\nimport { injectBrnCalendarI18n, type Weekday } from '../i18n/calendar-i18n';\nimport { compareDays } from '../utils/compare-days';\n\n@Directive({\n\tselector: '[brnCalendarRange]',\n\tproviders: [provideBrnCalendar(BrnCalendarRange)],\n})\nexport class BrnCalendarRange<T> implements BrnCalendarBase<T> {\n\tprivate readonly _cells: BrnCalendarCellButton<T>[] = [];\n\n\tprivate readonly _i18n = injectBrnCalendarI18n();\n\t// /** Access the date adapter */\n\tprotected readonly _dateAdapter = injectDateAdapter<T>();\n\n\t/** Access the change detector */\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the injector */\n\tprivate readonly _injector = inject(Injector);\n\n\t/** The days to highlight. */\n\tpublic readonly highlightDays = input<T[]>([]);\n\n\t/** The minimum date that can be selected.*/\n\tpublic readonly min = input<T>();\n\n\t/** The maximum date that can be selected. */\n\tpublic readonly max = input<T>();\n\n\t/** Determine if the date picker is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether a specific date is disabled. */\n\tpublic readonly dateDisabled = input<(date: T) => boolean>(() => false);\n\n\t/** The day the week starts on */\n\tpublic readonly weekStartsOn = input<Weekday, NumberInput | undefined>(undefined, {\n\t\ttransform: (v: unknown) => (v === undefined || v === null ? undefined : (numberAttribute(v) as Weekday)),\n\t});\n\n\tprotected readonly _weekStartsOn = computed(() => this.weekStartsOn() ?? this._i18n.config().firstDayOfWeek());\n\n\t/** The default focused date. */\n\tpublic readonly defaultFocusedDate = input<T>();\n\n\t/** @internal Access the header */\n\tpublic readonly header = contentChild(BrnCalendarHeader);\n\n\t/**\n\t * The focused date.\n\t */\n\tpublic readonly focusedDate = linkedSignal(() =>\n\t\tthis.constrainDate(this.defaultFocusedDate() ?? this.startDate() ?? this._dateAdapter.now()),\n\t);\n\n\t/**\n\t * The selected start date\n\t */\n\tpublic readonly startDate = model<T>();\n\n\t/**\n\t * The selected end date\n\t */\n\tpublic readonly endDate = model<T>();\n\n\t/**\n\t * Get all the days to display, this is the days of the current month\n\t * and the days of the previous and next month to fill the grid.\n\t */\n\tpublic readonly days = computed(\n\t\t() => {\n\t\t\tconst weekStartsOn = this._weekStartsOn();\n\t\t\tconst month = this.focusedDate();\n\t\t\tconst days: T[] = [];\n\n\t\t\t// Get the first and last day of the month.\n\t\t\tlet firstDay = this._dateAdapter.startOfMonth(month);\n\t\t\tlet lastDay = this._dateAdapter.endOfMonth(month);\n\n\t\t\t// we need to subtract until we get the to starting day before or on the start of the month.\n\t\t\twhile (this._dateAdapter.getDay(firstDay) !== weekStartsOn) {\n\t\t\t\tfirstDay = this._dateAdapter.subtract(firstDay, { days: 1 });\n\t\t\t}\n\n\t\t\tconst weekEndsOn = (weekStartsOn + 6) % 7;\n\n\t\t\t// we need to add until we get to the ending day after or on the end of the month.\n\t\t\twhile (this._dateAdapter.getDay(lastDay) !== weekEndsOn) {\n\t\t\t\tlastDay = this._dateAdapter.add(lastDay, { days: 1 });\n\t\t\t}\n\n\t\t\t// collect all the days to display.\n\t\t\twhile (firstDay <= lastDay) {\n\t\t\t\tdays.push(firstDay);\n\t\t\t\tfirstDay = this._dateAdapter.add(firstDay, { days: 1 });\n\t\t\t}\n\n\t\t\treturn days;\n\t\t},\n\t\t{\n\t\t\tequal: (a, b) => compareDays(a, b, this._dateAdapter),\n\t\t},\n\t);\n\n\tisSelected(date: T): boolean {\n\t\tconst start = this.startDate();\n\t\tconst end = this.endDate();\n\n\t\tif (!start && !end) {\n\t\t\treturn false;\n\t\t}\n\t\tconst isStartSelected = start ? this._dateAdapter.isSameDay(date, start) : false;\n\t\tconst isEndSelected = end ? this._dateAdapter.isSameDay(date, end) : false;\n\n\t\treturn isStartSelected || isEndSelected;\n\t}\n\n\tselectDate(date: T): void {\n\t\tconst start = this.startDate();\n\t\tconst end = this.endDate();\n\n\t\tif (!start && !end) {\n\t\t\tthis.startDate.set(date);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (start && !end) {\n\t\t\tif (this._dateAdapter.isAfter(date, start)) {\n\t\t\t\tthis.endDate.set(date);\n\t\t\t} else if (this._dateAdapter.isBefore(date, start)) {\n\t\t\t\tthis.startDate.set(date);\n\t\t\t\tthis.endDate.set(start);\n\t\t\t} else if (this._dateAdapter.isSameDay(date, start)) {\n\t\t\t\tthis.endDate.set(date);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// If both start and end are selected, reset selection\n\t\tthis.startDate.set(date);\n\n\t\tthis.endDate.set(undefined);\n\t}\n\n\t// same as in brn-calendar.directive.ts\n\t/** @internal Constrain a date to the min and max boundaries */\n\tconstrainDate(date: T): T {\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\t// If there is no min or max, return the date.\n\t\tif (!min && !max) {\n\t\t\treturn date;\n\t\t}\n\n\t\t// If there is a min and the date is before the min, return the min.\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn min;\n\t\t}\n\n\t\t// If there is a max and the date is after the max, return the max.\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn max;\n\t\t}\n\n\t\t// Return the date.\n\t\treturn date;\n\t}\n\n\t/** @internal Determine if a date is disabled */\n\tisDateDisabled(date: T): boolean {\n\t\t// if the calendar is disabled we can't select this date\n\t\tif (this.disabled()) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if the date is outside the min and max range\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\tif (min && this._dateAdapter.isBefore(date, this._dateAdapter.startOfDay(min))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (max && this._dateAdapter.isAfter(date, this._dateAdapter.endOfDay(max))) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// if this specific date is disabled\n\t\tconst disabledFn = this.dateDisabled();\n\n\t\tif (disabledFn(date)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/** @internal Set the focused date */\n\tsetFocusedDate(date: T): void {\n\t\t// check if the date is disabled.\n\t\tif (this.isDateDisabled(date)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.focusedDate.set(date);\n\n\t\t// wait until the cells have all updated\n\n\t\tafterNextRender(\n\t\t\t{\n\t\t\t\twrite: () => {\n\t\t\t\t\tconst cell = this._cells.find((c) => this._dateAdapter.isSameDay(c.date(), date));\n\t\t\t\t\tif (cell) {\n\t\t\t\t\t\tcell.focus();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tinjector: this._injector,\n\t\t\t},\n\t\t);\n\n\t\t// we must update the view to ensure the focused cell is visible.\n\t\tthis._changeDetector.detectChanges();\n\t}\n\n\t/**\n\t * Determine if a date is the start of a range.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisStartOfRange(date: T): boolean {\n\t\tconst start = this.startDate();\n\t\treturn start ? this._dateAdapter.isSameDay(date, start) : false;\n\t}\n\n\t/**\n\t * Determine if a date is the end of a range.\n\t * @param date The date to check.\n\t * @returns Always false.\n\t * @internal\n\t */\n\tisEndOfRange(date: T): boolean {\n\t\tconst end = this.endDate();\n\t\treturn end ? this._dateAdapter.isSameDay(date, end) : false;\n\t}\n\n\t/**\n\t * Determine if a date is between the start and end dates.\n\t * @param date The date to check.\n\t * @returns True if the date is between the start and end dates, false otherwise.\n\t * @internal\n\t */\n\tisBetweenRange(date: T): boolean {\n\t\tconst start = this.startDate();\n\t\tconst end = this.endDate();\n\n\t\tif (!start || !end) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn (\n\t\t\tthis._dateAdapter.isAfter(date, start) &&\n\t\t\tthis._dateAdapter.isBefore(date, end) &&\n\t\t\t!this._dateAdapter.isSameDay(date, start) &&\n\t\t\t!this._dateAdapter.isSameDay(date, end)\n\t\t);\n\t}\n\n\tunregisterCalendarCell(cell: BrnCalendarCellButton<T>): void {\n\t\tconst index = this._cells.indexOf(cell);\n\t\tif (index !== -1) {\n\t\t\tthis._cells.splice(index, 1);\n\t\t}\n\t}\n\tregisterCalendarCell(cell: BrnCalendarCellButton<T>): void {\n\t\tthis._cells.push(cell);\n\t}\n}\n","import { BrnCalendar } from './lib/brn-calendar';\nimport { BrnCalendarCell } from './lib/brn-calendar-cell';\nimport { BrnCalendarCellButton } from './lib/brn-calendar-cell-button';\nimport { BrnCalendarGrid } from './lib/brn-calendar-grid';\nimport { BrnCalendarHeader } from './lib/brn-calendar-header';\nimport { BrnCalendarMonthSelect } from './lib/brn-calendar-month-select';\nimport { BrnCalendarNextButton } from './lib/brn-calendar-next-button';\nimport { BrnCalendarPreviousButton } from './lib/brn-calendar-previous-button';\nimport { BrnCalendarWeek } from './lib/brn-calendar-week';\nimport { BrnCalendarWeekday } from './lib/brn-calendar-weekday';\nimport { BrnCalendarYearSelect } from './lib/brn-calendar-year-select';\nimport { BrnCalendarMulti } from './lib/mode/brn-calendar-multiple';\nimport { BrnCalendarRange } from './lib/mode/brn-calendar-range';\n\nexport * from './lib/brn-calendar';\nexport * from './lib/brn-calendar-cell';\nexport * from './lib/brn-calendar-cell-button';\nexport * from './lib/brn-calendar-grid';\nexport * from './lib/brn-calendar-header';\nexport * from './lib/brn-calendar-month-select';\nexport * from './lib/brn-calendar-next-button';\nexport * from './lib/brn-calendar-previous-button';\nexport * from './lib/brn-calendar-week';\nexport * from './lib/brn-calendar-weekday';\nexport * from './lib/brn-calendar-year-select';\nexport * from './lib/brn-calendar.token';\nexport * from './lib/i18n/calendar-i18n';\nexport * from './lib/mode/brn-calendar-multiple';\nexport * from './lib/mode/brn-calendar-range';\n\nexport const BrnCalendarImports = [\n\tBrnCalendarCellButton,\n\tBrnCalendarGrid,\n\tBrnCalendarHeader,\n\tBrnCalendarNextButton,\n\tBrnCalendarPreviousButton,\n\tBrnCalendarWeek,\n\tBrnCalendarWeekday,\n\tBrnCalendar,\n\tBrnCalendarCell,\n\tBrnCalendarMulti,\n\tBrnCalendarRange,\n\tBrnCalendarMonthSelect,\n\tBrnCalendarYearSelect,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -7,6 +7,7 @@ import * as _spartan_ng_brain_calendar from '@spartan-ng/brain/calendar';
|
|
|
7
7
|
declare class BrnCalendarCellButton<T> {
|
|
8
8
|
/** Access the date adapter */
|
|
9
9
|
protected readonly _dateAdapter: _spartan_ng_brain_date_time.BrnDateAdapter<T>;
|
|
10
|
+
private readonly _destroyRef;
|
|
10
11
|
/** Access the calendar component */
|
|
11
12
|
protected readonly _calendar: _spartan_ng_brain_calendar.BrnCalendarBase<T>;
|
|
12
13
|
/** Access the element ref */
|
|
@@ -19,6 +20,7 @@ declare class BrnCalendarCellButton<T> {
|
|
|
19
20
|
readonly end: _angular_core.Signal<boolean>;
|
|
20
21
|
readonly betweenRange: _angular_core.Signal<boolean>;
|
|
21
22
|
readonly highlighted: _angular_core.Signal<boolean>;
|
|
23
|
+
constructor();
|
|
22
24
|
/** Whether this date is focusable */
|
|
23
25
|
readonly focusable: _angular_core.Signal<boolean>;
|
|
24
26
|
readonly outside: _angular_core.Signal<boolean>;
|
|
@@ -88,6 +90,8 @@ interface BrnCalendarBase<T> {
|
|
|
88
90
|
header: Signal<BrnCalendarHeader | undefined>;
|
|
89
91
|
days: Signal<T[]>;
|
|
90
92
|
highlightDays: InputSignal<T[]>;
|
|
93
|
+
unregisterCalendarCell(cell: BrnCalendarCellButton<T>): void;
|
|
94
|
+
registerCalendarCell(cell: BrnCalendarCellButton<T>): void;
|
|
91
95
|
}
|
|
92
96
|
declare const BrnCalendarToken: InjectionToken<BrnCalendarBase<unknown>>;
|
|
93
97
|
declare function provideBrnCalendar<T>(instance: Type<BrnCalendarBase<T>>): ExistingProvider;
|
|
@@ -167,8 +171,7 @@ declare class BrnCalendar<T> implements BrnCalendarBase<T> {
|
|
|
167
171
|
readonly defaultFocusedDate: _angular_core.InputSignal<T | undefined>;
|
|
168
172
|
/** @internal Access the header */
|
|
169
173
|
readonly header: _angular_core.Signal<BrnCalendarHeader | undefined>;
|
|
170
|
-
|
|
171
|
-
protected readonly _cells: _angular_core.Signal<readonly BrnCalendarCellButton<T>[]>;
|
|
174
|
+
private readonly _cells;
|
|
172
175
|
/**
|
|
173
176
|
* The focused date.
|
|
174
177
|
*/
|
|
@@ -207,8 +210,10 @@ declare class BrnCalendar<T> implements BrnCalendarBase<T> {
|
|
|
207
210
|
* @internal
|
|
208
211
|
*/
|
|
209
212
|
isBetweenRange(_: T): boolean;
|
|
213
|
+
unregisterCalendarCell(cell: BrnCalendarCellButton<T>): void;
|
|
214
|
+
registerCalendarCell(cell: BrnCalendarCellButton<T>): void;
|
|
210
215
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BrnCalendar<any>, never>;
|
|
211
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BrnCalendar<any>, "[brnCalendar]", never, { "highlightDays": { "alias": "highlightDays"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": false; "isSignal": true; }; "dateDisabled": { "alias": "dateDisabled"; "required": false; "isSignal": true; }; "weekStartsOn": { "alias": "weekStartsOn"; "required": false; "isSignal": true; }; "defaultFocusedDate": { "alias": "defaultFocusedDate"; "required": false; "isSignal": true; }; }, { "date": "dateChange"; }, ["header"
|
|
216
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BrnCalendar<any>, "[brnCalendar]", never, { "highlightDays": { "alias": "highlightDays"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": false; "isSignal": true; }; "dateDisabled": { "alias": "dateDisabled"; "required": false; "isSignal": true; }; "weekStartsOn": { "alias": "weekStartsOn"; "required": false; "isSignal": true; }; "defaultFocusedDate": { "alias": "defaultFocusedDate"; "required": false; "isSignal": true; }; }, { "date": "dateChange"; }, ["header"], never, true, never>;
|
|
212
217
|
}
|
|
213
218
|
|
|
214
219
|
declare class BrnCalendarCell {
|
|
@@ -333,6 +338,7 @@ declare class BrnCalendarYearSelect {
|
|
|
333
338
|
|
|
334
339
|
declare class BrnCalendarMulti<T> implements BrnCalendarBase<T> {
|
|
335
340
|
private readonly _i18n;
|
|
341
|
+
private readonly _cells;
|
|
336
342
|
/**
|
|
337
343
|
* Determine if a date is the start of a range. In a date picker, this is always false.
|
|
338
344
|
* @param date The date to check.
|
|
@@ -382,8 +388,6 @@ declare class BrnCalendarMulti<T> implements BrnCalendarBase<T> {
|
|
|
382
388
|
readonly defaultFocusedDate: _angular_core.InputSignal<T | undefined>;
|
|
383
389
|
/** @internal Access the header */
|
|
384
390
|
readonly header: _angular_core.Signal<BrnCalendarHeader | undefined>;
|
|
385
|
-
/** Store the cells */
|
|
386
|
-
protected readonly _cells: _angular_core.Signal<readonly BrnCalendarCellButton<T>[]>;
|
|
387
391
|
/**
|
|
388
392
|
* The focused date.
|
|
389
393
|
*/
|
|
@@ -401,11 +405,14 @@ declare class BrnCalendarMulti<T> implements BrnCalendarBase<T> {
|
|
|
401
405
|
isDateDisabled(date: T): boolean;
|
|
402
406
|
/** @internal Set the focused date */
|
|
403
407
|
setFocusedDate(date: T): void;
|
|
408
|
+
unregisterCalendarCell(cell: BrnCalendarCellButton<T>): void;
|
|
409
|
+
registerCalendarCell(cell: BrnCalendarCellButton<T>): void;
|
|
404
410
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BrnCalendarMulti<any>, never>;
|
|
405
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BrnCalendarMulti<any>, "[brnCalendarMulti]", never, { "highlightDays": { "alias": "highlightDays"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "minSelection": { "alias": "minSelection"; "required": false; "isSignal": true; }; "maxSelection": { "alias": "maxSelection"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": false; "isSignal": true; }; "dateDisabled": { "alias": "dateDisabled"; "required": false; "isSignal": true; }; "weekStartsOn": { "alias": "weekStartsOn"; "required": false; "isSignal": true; }; "defaultFocusedDate": { "alias": "defaultFocusedDate"; "required": false; "isSignal": true; }; }, { "date": "dateChange"; }, ["header"
|
|
411
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BrnCalendarMulti<any>, "[brnCalendarMulti]", never, { "highlightDays": { "alias": "highlightDays"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "minSelection": { "alias": "minSelection"; "required": false; "isSignal": true; }; "maxSelection": { "alias": "maxSelection"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": false; "isSignal": true; }; "dateDisabled": { "alias": "dateDisabled"; "required": false; "isSignal": true; }; "weekStartsOn": { "alias": "weekStartsOn"; "required": false; "isSignal": true; }; "defaultFocusedDate": { "alias": "defaultFocusedDate"; "required": false; "isSignal": true; }; }, { "date": "dateChange"; }, ["header"], never, true, never>;
|
|
406
412
|
}
|
|
407
413
|
|
|
408
414
|
declare class BrnCalendarRange<T> implements BrnCalendarBase<T> {
|
|
415
|
+
private readonly _cells;
|
|
409
416
|
private readonly _i18n;
|
|
410
417
|
protected readonly _dateAdapter: _spartan_ng_brain_date_time.BrnDateAdapter<T>;
|
|
411
418
|
/** Access the change detector */
|
|
@@ -429,8 +436,6 @@ declare class BrnCalendarRange<T> implements BrnCalendarBase<T> {
|
|
|
429
436
|
readonly defaultFocusedDate: _angular_core.InputSignal<T | undefined>;
|
|
430
437
|
/** @internal Access the header */
|
|
431
438
|
readonly header: _angular_core.Signal<BrnCalendarHeader | undefined>;
|
|
432
|
-
/** Store the cells */
|
|
433
|
-
protected readonly _cells: _angular_core.Signal<readonly BrnCalendarCellButton<T>[]>;
|
|
434
439
|
/**
|
|
435
440
|
* The focused date.
|
|
436
441
|
*/
|
|
@@ -477,8 +482,10 @@ declare class BrnCalendarRange<T> implements BrnCalendarBase<T> {
|
|
|
477
482
|
* @internal
|
|
478
483
|
*/
|
|
479
484
|
isBetweenRange(date: T): boolean;
|
|
485
|
+
unregisterCalendarCell(cell: BrnCalendarCellButton<T>): void;
|
|
486
|
+
registerCalendarCell(cell: BrnCalendarCellButton<T>): void;
|
|
480
487
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BrnCalendarRange<any>, never>;
|
|
481
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BrnCalendarRange<any>, "[brnCalendarRange]", never, { "highlightDays": { "alias": "highlightDays"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "dateDisabled": { "alias": "dateDisabled"; "required": false; "isSignal": true; }; "weekStartsOn": { "alias": "weekStartsOn"; "required": false; "isSignal": true; }; "defaultFocusedDate": { "alias": "defaultFocusedDate"; "required": false; "isSignal": true; }; "startDate": { "alias": "startDate"; "required": false; "isSignal": true; }; "endDate": { "alias": "endDate"; "required": false; "isSignal": true; }; }, { "startDate": "startDateChange"; "endDate": "endDateChange"; }, ["header"
|
|
488
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BrnCalendarRange<any>, "[brnCalendarRange]", never, { "highlightDays": { "alias": "highlightDays"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "dateDisabled": { "alias": "dateDisabled"; "required": false; "isSignal": true; }; "weekStartsOn": { "alias": "weekStartsOn"; "required": false; "isSignal": true; }; "defaultFocusedDate": { "alias": "defaultFocusedDate"; "required": false; "isSignal": true; }; "startDate": { "alias": "startDate"; "required": false; "isSignal": true; }; "endDate": { "alias": "endDate"; "required": false; "isSignal": true; }; }, { "startDate": "startDateChange"; "endDate": "endDateChange"; }, ["header"], never, true, never>;
|
|
482
489
|
}
|
|
483
490
|
|
|
484
491
|
declare const BrnCalendarImports: readonly [typeof BrnCalendarCellButton, typeof BrnCalendarGrid, typeof BrnCalendarHeader, typeof BrnCalendarNextButton, typeof BrnCalendarPreviousButton, typeof BrnCalendarWeek, typeof BrnCalendarWeekday, typeof BrnCalendar, typeof BrnCalendarCell, typeof BrnCalendarMulti, typeof BrnCalendarRange, typeof BrnCalendarMonthSelect, typeof BrnCalendarYearSelect];
|