@cdevhub/ngx-tw 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +264 -49
- package/fesm2022/cdevhub-ngx-tw-accordion.mjs +11 -7
- package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-alert.mjs +43 -29
- package/fesm2022/cdevhub-ngx-tw-alert.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs +103 -0
- package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-avatar.mjs +56 -31
- package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-badge.mjs +61 -35
- package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +154 -93
- package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-button.mjs +35 -22
- package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +3 -3
- package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-calendar.mjs +416 -216
- package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-card.mjs +33 -24
- package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-carousel.mjs +152 -81
- package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +99 -47
- package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-code-block.mjs +42 -29
- package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +46 -29
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs +205 -110
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +141 -74
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-core.mjs +16 -11
- package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +395 -149
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +305 -150
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs +56 -43
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +51 -33
- package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-file-upload.mjs +905 -0
- package/fesm2022/cdevhub-ngx-tw-file-upload.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +49 -26
- package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs +133 -74
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs +2 -2
- package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-icon.mjs +28 -17
- package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-input.mjs +37 -21
- package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-item.mjs +33 -24
- package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-menu.mjs +63 -48
- package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-number-input.mjs +622 -0
- package/fesm2022/cdevhub-ngx-tw-number-input.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs +142 -72
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-popover.mjs +101 -46
- package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +57 -30
- package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-radio.mjs +108 -57
- package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +46 -26
- package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-select.mjs +227 -122
- package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-separator.mjs +21 -12
- package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs +58 -44
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-skeleton.mjs +25 -14
- package/fesm2022/cdevhub-ngx-tw-skeleton.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-slider.mjs +155 -79
- package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-sort.mjs +47 -25
- package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-spinner.mjs +29 -16
- package/fesm2022/cdevhub-ngx-tw-spinner.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-split.mjs +72 -42
- package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-stat.mjs +107 -64
- package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-stepper.mjs +113 -47
- package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-switch.mjs +61 -32
- package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +88 -42
- package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-table.mjs +266 -118
- package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tabs.mjs +102 -52
- package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +798 -0
- package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-textarea.mjs +16 -8
- package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-theme.mjs +22 -14
- package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +243 -95
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-timeline.mjs +149 -82
- package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-toast.mjs +100 -55
- package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +50 -28
- package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-transfer.mjs +1129 -0
- package/fesm2022/cdevhub-ngx-tw-transfer.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-tree.mjs +554 -0
- package/fesm2022/cdevhub-ngx-tw-tree.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw.mjs +7 -0
- package/fesm2022/cdevhub-ngx-tw.mjs.map +1 -1
- package/package.json +45 -17
- package/theme/_dark.css +16 -12
- package/theme/_semantic.css +3 -2
- package/theme/index.css +10 -2
- package/types/cdevhub-ngx-tw-aspect-ratio.d.ts +40 -0
- package/types/cdevhub-ngx-tw-calendar.d.ts +39 -8
- package/types/cdevhub-ngx-tw-code-block.d.ts +8 -7
- package/types/cdevhub-ngx-tw-command-palette.d.ts +7 -0
- package/types/cdevhub-ngx-tw-date-picker.d.ts +36 -10
- package/types/cdevhub-ngx-tw-file-upload.d.ts +250 -0
- package/types/cdevhub-ngx-tw-form-field.d.ts +22 -3
- package/types/cdevhub-ngx-tw-icon-lucide.d.ts +21 -3
- package/types/cdevhub-ngx-tw-number-input.d.ts +130 -0
- package/types/cdevhub-ngx-tw-popover.d.ts +8 -0
- package/types/cdevhub-ngx-tw-select.d.ts +1 -1
- package/types/cdevhub-ngx-tw-stepper.d.ts +30 -2
- package/types/cdevhub-ngx-tw-tab-nav.d.ts +8 -0
- package/types/cdevhub-ngx-tw-table.d.ts +30 -1
- package/types/cdevhub-ngx-tw-tabs.d.ts +8 -0
- package/types/cdevhub-ngx-tw-tags-input.d.ts +217 -0
- package/types/cdevhub-ngx-tw-time-picker.d.ts +31 -6
- package/types/cdevhub-ngx-tw-toast.d.ts +1 -1
- package/types/cdevhub-ngx-tw-transfer.d.ts +330 -0
- package/types/cdevhub-ngx-tw-tree.d.ts +189 -0
- package/types/cdevhub-ngx-tw.d.ts +7 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, output, computed, ChangeDetectionStrategy, Component, Injectable, InjectionToken, viewChild, inject, signal, afterEveryRender, Directive, viewChildren, ElementRef, Injector, DestroyRef, LOCALE_ID, runInInjectionContext,
|
|
2
|
+
import { input, output, computed, ChangeDetectionStrategy, Component, Injectable, InjectionToken, viewChild, inject, signal, afterEveryRender, Directive, viewChildren, ElementRef, Injector, DestroyRef, LOCALE_ID, runInInjectionContext, linkedSignal, untracked, effect, isDevMode, forwardRef, model, makeEnvironmentProviders } from '@angular/core';
|
|
3
3
|
import { LiveAnnouncer } from '@angular/cdk/a11y';
|
|
4
4
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
5
5
|
import { Validators, NgControl, FormResetEvent, NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
|
|
@@ -21,22 +21,29 @@ const headerVariants = tv({
|
|
|
21
21
|
*/
|
|
22
22
|
class CalendarHeaderComponent {
|
|
23
23
|
/** Display text for the period button (e.g. "January 2026"). */
|
|
24
|
-
periodLabel = input.required(
|
|
24
|
+
periodLabel = input.required(/* @ts-ignore */
|
|
25
|
+
...(ngDevMode ? [{ debugName: "periodLabel" }] : /* istanbul ignore next */ []));
|
|
25
26
|
/** Accessible label for the period button. */
|
|
26
|
-
periodAriaLabel = input.required(
|
|
27
|
+
periodAriaLabel = input.required(/* @ts-ignore */
|
|
28
|
+
...(ngDevMode ? [{ debugName: "periodAriaLabel" }] : /* istanbul ignore next */ []));
|
|
27
29
|
/** Accessible label for the previous button. */
|
|
28
|
-
prevAriaLabel = input.required(
|
|
30
|
+
prevAriaLabel = input.required(/* @ts-ignore */
|
|
31
|
+
...(ngDevMode ? [{ debugName: "prevAriaLabel" }] : /* istanbul ignore next */ []));
|
|
29
32
|
/** Accessible label for the next button. */
|
|
30
|
-
nextAriaLabel = input.required(
|
|
33
|
+
nextAriaLabel = input.required(/* @ts-ignore */
|
|
34
|
+
...(ngDevMode ? [{ debugName: "nextAriaLabel" }] : /* istanbul ignore next */ []));
|
|
31
35
|
/** Disables the previous button. */
|
|
32
|
-
prevDisabled = input(false,
|
|
36
|
+
prevDisabled = input(false, /* @ts-ignore */
|
|
37
|
+
...(ngDevMode ? [{ debugName: "prevDisabled" }] : /* istanbul ignore next */ []));
|
|
33
38
|
/** Disables the next button. */
|
|
34
|
-
nextDisabled = input(false,
|
|
39
|
+
nextDisabled = input(false, /* @ts-ignore */
|
|
40
|
+
...(ngDevMode ? [{ debugName: "nextDisabled" }] : /* istanbul ignore next */ []));
|
|
35
41
|
/** When false, the period button is disabled (e.g. when already at the top view). */
|
|
36
42
|
// TRUE-default: the period button is the calendar header's primary drill-up
|
|
37
43
|
// affordance; disabling it is reserved for the top view where there's nowhere
|
|
38
44
|
// to drill up to.
|
|
39
|
-
canSwitchView = input(true,
|
|
45
|
+
canSwitchView = input(true, /* @ts-ignore */
|
|
46
|
+
...(ngDevMode ? [{ debugName: "canSwitchView" }] : /* istanbul ignore next */ []));
|
|
40
47
|
/** Fires on previous button click. */
|
|
41
48
|
prevClicked = output();
|
|
42
49
|
/** Fires on next button click. */
|
|
@@ -46,13 +53,14 @@ class CalendarHeaderComponent {
|
|
|
46
53
|
classes = computed(() => {
|
|
47
54
|
const v = headerVariants();
|
|
48
55
|
return { root: v.root(), navButton: v.navButton(), periodButton: v.periodButton() };
|
|
49
|
-
},
|
|
56
|
+
}, /* @ts-ignore */
|
|
57
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
50
58
|
onPeriodClick() {
|
|
51
59
|
if (this.canSwitchView())
|
|
52
60
|
this.periodClicked.emit();
|
|
53
61
|
}
|
|
54
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
55
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "
|
|
62
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
63
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: CalendarHeaderComponent, isStandalone: true, selector: "tw-calendar-header", inputs: { periodLabel: { classPropertyName: "periodLabel", publicName: "periodLabel", isSignal: true, isRequired: true, transformFunction: null }, periodAriaLabel: { classPropertyName: "periodAriaLabel", publicName: "periodAriaLabel", isSignal: true, isRequired: true, transformFunction: null }, prevAriaLabel: { classPropertyName: "prevAriaLabel", publicName: "prevAriaLabel", isSignal: true, isRequired: true, transformFunction: null }, nextAriaLabel: { classPropertyName: "nextAriaLabel", publicName: "nextAriaLabel", isSignal: true, isRequired: true, transformFunction: null }, prevDisabled: { classPropertyName: "prevDisabled", publicName: "prevDisabled", isSignal: true, isRequired: false, transformFunction: null }, nextDisabled: { classPropertyName: "nextDisabled", publicName: "nextDisabled", isSignal: true, isRequired: false, transformFunction: null }, canSwitchView: { classPropertyName: "canSwitchView", publicName: "canSwitchView", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { prevClicked: "prevClicked", nextClicked: "nextClicked", periodClicked: "periodClicked" }, host: { classAttribute: "block" }, ngImport: i0, template: `
|
|
56
64
|
<div [class]="classes().root">
|
|
57
65
|
<button
|
|
58
66
|
type="button"
|
|
@@ -112,7 +120,7 @@ class CalendarHeaderComponent {
|
|
|
112
120
|
</div>
|
|
113
121
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
114
122
|
}
|
|
115
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
123
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarHeaderComponent, decorators: [{
|
|
116
124
|
type: Component,
|
|
117
125
|
args: [{
|
|
118
126
|
selector: 'tw-calendar-header',
|
|
@@ -378,10 +386,10 @@ class CalendarIntl {
|
|
|
378
386
|
'Use Home and End to jump to the start or end of the week.',
|
|
379
387
|
'Press Escape to close the calendar.',
|
|
380
388
|
].join(' ');
|
|
381
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
382
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
389
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarIntl, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
390
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarIntl });
|
|
383
391
|
}
|
|
384
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
392
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarIntl, decorators: [{
|
|
385
393
|
type: Injectable
|
|
386
394
|
}] });
|
|
387
395
|
/**
|
|
@@ -974,17 +982,23 @@ const cellVariants = tv({
|
|
|
974
982
|
* emits events for clicks, keyboard navigation, mouse hover, and focus.
|
|
975
983
|
*/
|
|
976
984
|
class CalendarCellComponent {
|
|
977
|
-
buttonRef = viewChild('cellButton',
|
|
985
|
+
buttonRef = viewChild('cellButton', /* @ts-ignore */
|
|
986
|
+
...(ngDevMode ? [{ debugName: "buttonRef" }] : /* istanbul ignore next */ []));
|
|
978
987
|
/** The cell data object to render. */
|
|
979
|
-
cell = input.required(
|
|
988
|
+
cell = input.required(/* @ts-ignore */
|
|
989
|
+
...(ngDevMode ? [{ debugName: "cell" }] : /* istanbul ignore next */ []));
|
|
980
990
|
/** The active calendar view — drives cell dimensions and radius. */
|
|
981
|
-
view = input('day',
|
|
991
|
+
view = input('day', /* @ts-ignore */
|
|
992
|
+
...(ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []));
|
|
982
993
|
/** `true` when the cell's date is outside the currently displayed month. */
|
|
983
|
-
outside = input(false,
|
|
994
|
+
outside = input(false, /* @ts-ignore */
|
|
995
|
+
...(ngDevMode ? [{ debugName: "outside" }] : /* istanbul ignore next */ []));
|
|
984
996
|
/** Tab index for roving focus (`0` for the active cell, `-1` otherwise). */
|
|
985
|
-
tabindex = input(-1,
|
|
997
|
+
tabindex = input(-1, /* @ts-ignore */
|
|
998
|
+
...(ngDevMode ? [{ debugName: "tabindex" }] : /* istanbul ignore next */ []));
|
|
986
999
|
/** Optional template rendered inside the button — receives `{ $implicit: CalendarCell<D> }`. */
|
|
987
|
-
cellTemplate = input(null,
|
|
1000
|
+
cellTemplate = input(null, /* @ts-ignore */
|
|
1001
|
+
...(ngDevMode ? [{ debugName: "cellTemplate" }] : /* istanbul ignore next */ []));
|
|
988
1002
|
/** Emitted when the user activates the cell (click, Enter, or Space). */
|
|
989
1003
|
selected = output();
|
|
990
1004
|
/** Emitted when the cell gains focus. */
|
|
@@ -1014,7 +1028,8 @@ class CalendarCellComponent {
|
|
|
1014
1028
|
if (c.isToday)
|
|
1015
1029
|
return 'today';
|
|
1016
1030
|
return 'default';
|
|
1017
|
-
},
|
|
1031
|
+
}, /* @ts-ignore */
|
|
1032
|
+
...(ngDevMode ? [{ debugName: "cellState" }] : /* istanbul ignore next */ []));
|
|
1018
1033
|
wrapperRange = computed(() => {
|
|
1019
1034
|
const c = this.cell();
|
|
1020
1035
|
if (c.isRangeStart && c.isRangeEnd)
|
|
@@ -1026,19 +1041,23 @@ class CalendarCellComponent {
|
|
|
1026
1041
|
if (c.isRangeMiddle)
|
|
1027
1042
|
return 'middle';
|
|
1028
1043
|
return 'none';
|
|
1029
|
-
},
|
|
1044
|
+
}, /* @ts-ignore */
|
|
1045
|
+
...(ngDevMode ? [{ debugName: "wrapperRange" }] : /* istanbul ignore next */ []));
|
|
1030
1046
|
variantResult = computed(() => cellVariants({
|
|
1031
1047
|
view: this.view(),
|
|
1032
1048
|
state: this.cellState(),
|
|
1033
1049
|
outside: this.outside(),
|
|
1034
1050
|
range: this.wrapperRange(),
|
|
1035
|
-
}),
|
|
1036
|
-
|
|
1051
|
+
}), /* @ts-ignore */
|
|
1052
|
+
...(ngDevMode ? [{ debugName: "variantResult" }] : /* istanbul ignore next */ []));
|
|
1053
|
+
wrapperClasses = computed(() => this.variantResult().wrapper(), /* @ts-ignore */
|
|
1054
|
+
...(ngDevMode ? [{ debugName: "wrapperClasses" }] : /* istanbul ignore next */ []));
|
|
1037
1055
|
buttonClasses = computed(() => {
|
|
1038
1056
|
const base = this.variantResult().button();
|
|
1039
1057
|
const extra = this.cell().cssClasses;
|
|
1040
1058
|
return extra ? `${base} ${extra}` : base;
|
|
1041
|
-
},
|
|
1059
|
+
}, /* @ts-ignore */
|
|
1060
|
+
...(ngDevMode ? [{ debugName: "buttonClasses" }] : /* istanbul ignore next */ []));
|
|
1042
1061
|
onClick() {
|
|
1043
1062
|
const c = this.cell();
|
|
1044
1063
|
if (c.enabled)
|
|
@@ -1078,8 +1097,8 @@ class CalendarCellComponent {
|
|
|
1078
1097
|
focusButton() {
|
|
1079
1098
|
this.buttonRef()?.nativeElement.focus();
|
|
1080
1099
|
}
|
|
1081
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1082
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1100
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1101
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: CalendarCellComponent, isStandalone: true, selector: "tw-calendar-cell", inputs: { cell: { classPropertyName: "cell", publicName: "cell", isSignal: true, isRequired: true, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: true, isRequired: false, transformFunction: null }, outside: { classPropertyName: "outside", publicName: "outside", isSignal: true, isRequired: false, transformFunction: null }, tabindex: { classPropertyName: "tabindex", publicName: "tabindex", isSignal: true, isRequired: false, transformFunction: null }, cellTemplate: { classPropertyName: "cellTemplate", publicName: "cellTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selected", focused: "focused", previewed: "previewed", keyNav: "keyNav" }, host: { attributes: { "role": "gridcell" }, properties: { "attr.data-state-today": "cell().isToday ? '' : null", "attr.data-state-selected": "cell().isSelected && !cell().isRangeStart && !cell().isRangeEnd && !cell().isRangeMiddle ? '' : null", "attr.data-state-range-start": "cell().isRangeStart ? '' : null", "attr.data-state-range-end": "cell().isRangeEnd ? '' : null", "attr.data-state-in-range": "cell().isRangeMiddle ? '' : null", "attr.data-state-range-preview-start": "cell().isPreviewStart ? '' : null", "attr.data-state-range-preview-end": "cell().isPreviewEnd ? '' : null", "attr.data-state-in-range-preview": "cell().isPreviewMiddle ? '' : null", "attr.data-state-invalid-preview": "cell().isInvalidPreview ? '' : null", "attr.data-state-invalid-flash": "cell().isInvalidFlash ? '' : null", "attr.data-state-disabled": "!cell().enabled ? '' : null", "attr.data-state-out-of-month": "outside() ? '' : null", "attr.data-state-weekend": "cell().isWeekend ? '' : null", "attr.data-state-focused": "tabindex() === 0 ? '' : null" } }, viewQueries: [{ propertyName: "buttonRef", first: true, predicate: ["cellButton"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
1083
1102
|
<div [class]="wrapperClasses()">
|
|
1084
1103
|
<button
|
|
1085
1104
|
#cellButton
|
|
@@ -1108,7 +1127,7 @@ class CalendarCellComponent {
|
|
|
1108
1127
|
</div>
|
|
1109
1128
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1110
1129
|
}
|
|
1111
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1130
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarCellComponent, decorators: [{
|
|
1112
1131
|
type: Component,
|
|
1113
1132
|
args: [{
|
|
1114
1133
|
selector: 'tw-calendar-cell',
|
|
@@ -1174,33 +1193,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
1174
1193
|
class CalendarViewBase {
|
|
1175
1194
|
dateAdapter = inject(DATE_ADAPTER);
|
|
1176
1195
|
/** The date that anchors the grid being rendered. */
|
|
1177
|
-
activeDate = input.required(
|
|
1196
|
+
activeDate = input.required(/* @ts-ignore */
|
|
1197
|
+
...(ngDevMode ? [{ debugName: "activeDate" }] : /* istanbul ignore next */ []));
|
|
1178
1198
|
/** Current selection — scalar, array (multi), or range. */
|
|
1179
|
-
selected = input(null,
|
|
1199
|
+
selected = input(null, /* @ts-ignore */
|
|
1200
|
+
...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
|
|
1180
1201
|
/** Minimum selectable date. */
|
|
1181
|
-
minDate = input(null,
|
|
1202
|
+
minDate = input(null, /* @ts-ignore */
|
|
1203
|
+
...(ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []));
|
|
1182
1204
|
/** Maximum selectable date. */
|
|
1183
|
-
maxDate = input(null,
|
|
1205
|
+
maxDate = input(null, /* @ts-ignore */
|
|
1206
|
+
...(ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []));
|
|
1184
1207
|
/** Per-date predicate — return `false` to disable. */
|
|
1185
|
-
dateFilter = input(null,
|
|
1208
|
+
dateFilter = input(null, /* @ts-ignore */
|
|
1209
|
+
...(ngDevMode ? [{ debugName: "dateFilter" }] : /* istanbul ignore next */ []));
|
|
1186
1210
|
/** Explicitly disabled dates — array (compared via `adapter.sameDate`) or predicate (returns `true` for disabled). */
|
|
1187
|
-
disabledDates = input(null,
|
|
1211
|
+
disabledDates = input(null, /* @ts-ignore */
|
|
1212
|
+
...(ngDevMode ? [{ debugName: "disabledDates" }] : /* istanbul ignore next */ []));
|
|
1188
1213
|
/** Days of the week to disable (0=Sun … 6=Sat). Empty array = no day-of-week disabling. */
|
|
1189
|
-
disabledDaysOfWeek = input([],
|
|
1214
|
+
disabledDaysOfWeek = input([], /* @ts-ignore */
|
|
1215
|
+
...(ngDevMode ? [{ debugName: "disabledDaysOfWeek" }] : /* istanbul ignore next */ []));
|
|
1190
1216
|
/** Per-cell class override. */
|
|
1191
|
-
dateClass = input(null,
|
|
1217
|
+
dateClass = input(null, /* @ts-ignore */
|
|
1218
|
+
...(ngDevMode ? [{ debugName: "dateClass" }] : /* istanbul ignore next */ []));
|
|
1192
1219
|
/** Hover-preview start (set while user is mid-range pick). */
|
|
1193
|
-
previewStart = input(null,
|
|
1220
|
+
previewStart = input(null, /* @ts-ignore */
|
|
1221
|
+
...(ngDevMode ? [{ debugName: "previewStart" }] : /* istanbul ignore next */ []));
|
|
1194
1222
|
/** Hover-preview end. */
|
|
1195
|
-
previewEnd = input(null,
|
|
1223
|
+
previewEnd = input(null, /* @ts-ignore */
|
|
1224
|
+
...(ngDevMode ? [{ debugName: "previewEnd" }] : /* istanbul ignore next */ []));
|
|
1196
1225
|
/** Phase 6 — date that briefly flashes as invalid (rejected commit). Cleared by the orchestrator. */
|
|
1197
|
-
invalidFlashDate = input(null,
|
|
1226
|
+
invalidFlashDate = input(null, /* @ts-ignore */
|
|
1227
|
+
...(ngDevMode ? [{ debugName: "invalidFlashDate" }] : /* istanbul ignore next */ []));
|
|
1198
1228
|
/** `true` when the parent calendar allows more than one cell to be selected at once. Drives `aria-multiselectable` on the grid host. */
|
|
1199
|
-
multiSelectable = input(false,
|
|
1229
|
+
multiSelectable = input(false, /* @ts-ignore */
|
|
1230
|
+
...(ngDevMode ? [{ debugName: "multiSelectable" }] : /* istanbul ignore next */ []));
|
|
1200
1231
|
/** `true` when the parent calendar is in read-only mode. Drives `aria-readonly` on the grid host. */
|
|
1201
|
-
readonlyGrid = input(false,
|
|
1232
|
+
readonlyGrid = input(false, /* @ts-ignore */
|
|
1233
|
+
...(ngDevMode ? [{ debugName: "readonlyGrid" }] : /* istanbul ignore next */ []));
|
|
1202
1234
|
/** Optional cell-content override. */
|
|
1203
|
-
cellTemplate = input(null,
|
|
1235
|
+
cellTemplate = input(null, /* @ts-ignore */
|
|
1236
|
+
...(ngDevMode ? [{ debugName: "cellTemplate" }] : /* istanbul ignore next */ []));
|
|
1204
1237
|
/** Fires when the user activates an enabled cell (click, Enter, or Space). Payload is the activated cell's date. */
|
|
1205
1238
|
selectedChange = output();
|
|
1206
1239
|
/** Fires when keyboard navigation or programmatic focus moves the roving cursor to a new cell. Payload is the new active date. */
|
|
@@ -1208,9 +1241,11 @@ class CalendarViewBase {
|
|
|
1208
1241
|
/** Fires on pointer hover with the hovered date, and again with `null` when the pointer leaves the grid. The parent orchestrator drives any range-preview state from this stream. */
|
|
1209
1242
|
previewChange = output();
|
|
1210
1243
|
/** Cell that should own the roving-tabindex cursor. `null` means "use `activeDate`". */
|
|
1211
|
-
focusedCellValue = signal(null,
|
|
1244
|
+
focusedCellValue = signal(null, /* @ts-ignore */
|
|
1245
|
+
...(ngDevMode ? [{ debugName: "focusedCellValue" }] : /* istanbul ignore next */ []));
|
|
1212
1246
|
/** Pending focus target — drained after the next render. */
|
|
1213
|
-
focusPending = signal(null,
|
|
1247
|
+
focusPending = signal(null, /* @ts-ignore */
|
|
1248
|
+
...(ngDevMode ? [{ debugName: "focusPending" }] : /* istanbul ignore next */ []));
|
|
1214
1249
|
constructor() {
|
|
1215
1250
|
afterEveryRender(() => {
|
|
1216
1251
|
const pending = this.focusPending();
|
|
@@ -1222,7 +1257,8 @@ class CalendarViewBase {
|
|
|
1222
1257
|
});
|
|
1223
1258
|
}
|
|
1224
1259
|
/** Today's date — memoized per view instance. */
|
|
1225
|
-
today = computed(() => this.dateAdapter.today(),
|
|
1260
|
+
today = computed(() => this.dateAdapter.today(), /* @ts-ignore */
|
|
1261
|
+
...(ngDevMode ? [{ debugName: "today" }] : /* istanbul ignore next */ []));
|
|
1226
1262
|
/** True when `date` is part of the committed selection. */
|
|
1227
1263
|
isSelected(date) {
|
|
1228
1264
|
const sel = this.selected();
|
|
@@ -1313,10 +1349,10 @@ class CalendarViewBase {
|
|
|
1313
1349
|
const target = this.focusedCellValue() ?? this.getActiveCompareValue();
|
|
1314
1350
|
this.focusCell(target);
|
|
1315
1351
|
}
|
|
1316
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1317
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
1352
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarViewBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1353
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: CalendarViewBase, isStandalone: true, inputs: { activeDate: { classPropertyName: "activeDate", publicName: "activeDate", isSignal: true, isRequired: true, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, dateFilter: { classPropertyName: "dateFilter", publicName: "dateFilter", isSignal: true, isRequired: false, transformFunction: null }, disabledDates: { classPropertyName: "disabledDates", publicName: "disabledDates", isSignal: true, isRequired: false, transformFunction: null }, disabledDaysOfWeek: { classPropertyName: "disabledDaysOfWeek", publicName: "disabledDaysOfWeek", isSignal: true, isRequired: false, transformFunction: null }, dateClass: { classPropertyName: "dateClass", publicName: "dateClass", isSignal: true, isRequired: false, transformFunction: null }, previewStart: { classPropertyName: "previewStart", publicName: "previewStart", isSignal: true, isRequired: false, transformFunction: null }, previewEnd: { classPropertyName: "previewEnd", publicName: "previewEnd", isSignal: true, isRequired: false, transformFunction: null }, invalidFlashDate: { classPropertyName: "invalidFlashDate", publicName: "invalidFlashDate", isSignal: true, isRequired: false, transformFunction: null }, multiSelectable: { classPropertyName: "multiSelectable", publicName: "multiSelectable", isSignal: true, isRequired: false, transformFunction: null }, readonlyGrid: { classPropertyName: "readonlyGrid", publicName: "readonlyGrid", isSignal: true, isRequired: false, transformFunction: null }, cellTemplate: { classPropertyName: "cellTemplate", publicName: "cellTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedChange: "selectedChange", activeDateChange: "activeDateChange", previewChange: "previewChange" }, ngImport: i0 });
|
|
1318
1354
|
}
|
|
1319
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1355
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarViewBase, decorators: [{
|
|
1320
1356
|
type: Directive
|
|
1321
1357
|
}], ctorParameters: () => [], propDecorators: { activeDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeDate", required: true }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], dateFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateFilter", required: false }] }], disabledDates: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledDates", required: false }] }], disabledDaysOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledDaysOfWeek", required: false }] }], dateClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateClass", required: false }] }], previewStart: [{ type: i0.Input, args: [{ isSignal: true, alias: "previewStart", required: false }] }], previewEnd: [{ type: i0.Input, args: [{ isSignal: true, alias: "previewEnd", required: false }] }], invalidFlashDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalidFlashDate", required: false }] }], multiSelectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiSelectable", required: false }] }], readonlyGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonlyGrid", required: false }] }], cellTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "cellTemplate", required: false }] }], selectedChange: [{ type: i0.Output, args: ["selectedChange"] }], activeDateChange: [{ type: i0.Output, args: ["activeDateChange"] }], previewChange: [{ type: i0.Output, args: ["previewChange"] }] } });
|
|
1322
1358
|
|
|
@@ -1327,14 +1363,20 @@ const TOTAL_CELLS = DAYS_PER_WEEK * WEEKS_PER_MONTH;
|
|
|
1327
1363
|
*/
|
|
1328
1364
|
class MonthViewComponent extends CalendarViewBase {
|
|
1329
1365
|
view = 'day';
|
|
1330
|
-
cellComponents = viewChildren(CalendarCellComponent,
|
|
1366
|
+
cellComponents = viewChildren(CalendarCellComponent, /* @ts-ignore */
|
|
1367
|
+
...(ngDevMode ? [{ debugName: "cellComponents" }] : /* istanbul ignore next */ []));
|
|
1331
1368
|
/** Override first day of week (0=Sun, 1=Mon). */
|
|
1332
|
-
firstDayOfWeek = input(0,
|
|
1369
|
+
firstDayOfWeek = input(0, /* @ts-ignore */
|
|
1370
|
+
...(ngDevMode ? [{ debugName: "firstDayOfWeek" }] : /* istanbul ignore next */ []));
|
|
1333
1371
|
/** Index within a multi-month row (0=left, 1+=right) — used by the orchestrator to disambiguate focus. */
|
|
1334
|
-
gridIndex = input(0,
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1372
|
+
gridIndex = input(0, /* @ts-ignore */
|
|
1373
|
+
...(ngDevMode ? [{ debugName: "gridIndex" }] : /* istanbul ignore next */ []));
|
|
1374
|
+
weekdayHeaders = computed(() => getWeekdayHeaders(this.dateAdapter, 'long', this.firstDayOfWeek()), /* @ts-ignore */
|
|
1375
|
+
...(ngDevMode ? [{ debugName: "weekdayHeaders" }] : /* istanbul ignore next */ []));
|
|
1376
|
+
displayMonth = computed(() => this.dateAdapter.getMonth(this.activeDate()), /* @ts-ignore */
|
|
1377
|
+
...(ngDevMode ? [{ debugName: "displayMonth" }] : /* istanbul ignore next */ []));
|
|
1378
|
+
displayYear = computed(() => this.dateAdapter.getYear(this.activeDate()), /* @ts-ignore */
|
|
1379
|
+
...(ngDevMode ? [{ debugName: "displayYear" }] : /* istanbul ignore next */ []));
|
|
1338
1380
|
cells = computed(() => {
|
|
1339
1381
|
const active = this.activeDate();
|
|
1340
1382
|
const firstOfMonth = getFirstDayOfMonth(active, this.dateAdapter);
|
|
@@ -1380,11 +1422,13 @@ class MonthViewComponent extends CalendarViewBase {
|
|
|
1380
1422
|
days.push(cell);
|
|
1381
1423
|
}
|
|
1382
1424
|
return createGrid(days, DAYS_PER_WEEK);
|
|
1383
|
-
},
|
|
1425
|
+
}, /* @ts-ignore */
|
|
1426
|
+
...(ngDevMode ? [{ debugName: "cells" }] : /* istanbul ignore next */ []));
|
|
1384
1427
|
gridLabel = computed(() => {
|
|
1385
1428
|
const months = this.dateAdapter.getMonthNames('long');
|
|
1386
1429
|
return `${months[this.displayMonth()]} ${this.displayYear()}`;
|
|
1387
|
-
},
|
|
1430
|
+
}, /* @ts-ignore */
|
|
1431
|
+
...(ngDevMode ? [{ debugName: "gridLabel" }] : /* istanbul ignore next */ []));
|
|
1388
1432
|
getActiveCompareValue() {
|
|
1389
1433
|
const d = this.activeDate();
|
|
1390
1434
|
return (this.dateAdapter.getYear(d) * 10000 +
|
|
@@ -1445,8 +1489,8 @@ class MonthViewComponent extends CalendarViewBase {
|
|
|
1445
1489
|
this.activeDateChange.emit(newDate);
|
|
1446
1490
|
}
|
|
1447
1491
|
}
|
|
1448
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1449
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1492
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MonthViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1493
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MonthViewComponent, isStandalone: true, selector: "tw-calendar-month-view", inputs: { firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, gridIndex: { classPropertyName: "gridIndex", publicName: "gridIndex", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, viewQueries: [{ propertyName: "cellComponents", predicate: CalendarCellComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
|
|
1450
1494
|
<div
|
|
1451
1495
|
role="grid"
|
|
1452
1496
|
[attr.aria-label]="gridLabel()"
|
|
@@ -1487,7 +1531,7 @@ class MonthViewComponent extends CalendarViewBase {
|
|
|
1487
1531
|
</div>
|
|
1488
1532
|
`, isInline: true, dependencies: [{ kind: "component", type: CalendarCellComponent, selector: "tw-calendar-cell", inputs: ["cell", "view", "outside", "tabindex", "cellTemplate"], outputs: ["selected", "focused", "previewed", "keyNav"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1489
1533
|
}
|
|
1490
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1534
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MonthViewComponent, decorators: [{
|
|
1491
1535
|
type: Component,
|
|
1492
1536
|
args: [{
|
|
1493
1537
|
selector: 'tw-calendar-month-view',
|
|
@@ -1543,8 +1587,10 @@ const MONTHS_PER_YEAR = 12;
|
|
|
1543
1587
|
*/
|
|
1544
1588
|
class YearViewComponent extends CalendarViewBase {
|
|
1545
1589
|
view = 'month';
|
|
1546
|
-
cellComponents = viewChildren(CalendarCellComponent,
|
|
1547
|
-
|
|
1590
|
+
cellComponents = viewChildren(CalendarCellComponent, /* @ts-ignore */
|
|
1591
|
+
...(ngDevMode ? [{ debugName: "cellComponents" }] : /* istanbul ignore next */ []));
|
|
1592
|
+
displayYear = computed(() => this.dateAdapter.getYear(this.activeDate()), /* @ts-ignore */
|
|
1593
|
+
...(ngDevMode ? [{ debugName: "displayYear" }] : /* istanbul ignore next */ []));
|
|
1548
1594
|
cells = computed(() => {
|
|
1549
1595
|
const year = this.displayYear();
|
|
1550
1596
|
const monthNames = this.dateAdapter.getMonthNames('short');
|
|
@@ -1577,8 +1623,10 @@ class YearViewComponent extends CalendarViewBase {
|
|
|
1577
1623
|
months.push(cell);
|
|
1578
1624
|
}
|
|
1579
1625
|
return createGrid(months, MONTHS_PER_ROW);
|
|
1580
|
-
},
|
|
1581
|
-
|
|
1626
|
+
}, /* @ts-ignore */
|
|
1627
|
+
...(ngDevMode ? [{ debugName: "cells" }] : /* istanbul ignore next */ []));
|
|
1628
|
+
gridLabel = computed(() => `${this.displayYear()}`, /* @ts-ignore */
|
|
1629
|
+
...(ngDevMode ? [{ debugName: "gridLabel" }] : /* istanbul ignore next */ []));
|
|
1582
1630
|
getActiveCompareValue() {
|
|
1583
1631
|
return this.dateAdapter.getMonth(this.activeDate());
|
|
1584
1632
|
}
|
|
@@ -1693,8 +1741,8 @@ class YearViewComponent extends CalendarViewBase {
|
|
|
1693
1741
|
return (this.dateAdapter.compare(monthDate, startMonth) > 0 &&
|
|
1694
1742
|
this.dateAdapter.compare(monthDate, endMonth) < 0);
|
|
1695
1743
|
}
|
|
1696
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1697
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1744
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: YearViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1745
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: YearViewComponent, isStandalone: true, selector: "tw-calendar-year-view", host: { classAttribute: "block" }, viewQueries: [{ propertyName: "cellComponents", predicate: CalendarCellComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
|
|
1698
1746
|
<div
|
|
1699
1747
|
role="grid"
|
|
1700
1748
|
[attr.aria-label]="gridLabel()"
|
|
@@ -1721,7 +1769,7 @@ class YearViewComponent extends CalendarViewBase {
|
|
|
1721
1769
|
</div>
|
|
1722
1770
|
`, isInline: true, dependencies: [{ kind: "component", type: CalendarCellComponent, selector: "tw-calendar-cell", inputs: ["cell", "view", "outside", "tabindex", "cellTemplate"], outputs: ["selected", "focused", "previewed", "keyNav"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1723
1771
|
}
|
|
1724
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1772
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: YearViewComponent, decorators: [{
|
|
1725
1773
|
type: Component,
|
|
1726
1774
|
args: [{
|
|
1727
1775
|
selector: 'tw-calendar-year-view',
|
|
@@ -1766,9 +1814,12 @@ const yearsPerPage = YEARS_PER_PAGE;
|
|
|
1766
1814
|
*/
|
|
1767
1815
|
class YearsViewComponent extends CalendarViewBase {
|
|
1768
1816
|
view = 'year';
|
|
1769
|
-
cellComponents = viewChildren(CalendarCellComponent,
|
|
1770
|
-
|
|
1771
|
-
|
|
1817
|
+
cellComponents = viewChildren(CalendarCellComponent, /* @ts-ignore */
|
|
1818
|
+
...(ngDevMode ? [{ debugName: "cellComponents" }] : /* istanbul ignore next */ []));
|
|
1819
|
+
startYear = computed(() => getMultiYearStartingYear(this.dateAdapter.getYear(this.activeDate()), YEARS_PER_PAGE), /* @ts-ignore */
|
|
1820
|
+
...(ngDevMode ? [{ debugName: "startYear" }] : /* istanbul ignore next */ []));
|
|
1821
|
+
endYear = computed(() => this.startYear() + YEARS_PER_PAGE - 1, /* @ts-ignore */
|
|
1822
|
+
...(ngDevMode ? [{ debugName: "endYear" }] : /* istanbul ignore next */ []));
|
|
1772
1823
|
cells = computed(() => {
|
|
1773
1824
|
const start = this.startYear();
|
|
1774
1825
|
const today = this.today();
|
|
@@ -1800,8 +1851,10 @@ class YearsViewComponent extends CalendarViewBase {
|
|
|
1800
1851
|
years.push(cell);
|
|
1801
1852
|
}
|
|
1802
1853
|
return createGrid(years, YEARS_PER_ROW);
|
|
1803
|
-
},
|
|
1804
|
-
|
|
1854
|
+
}, /* @ts-ignore */
|
|
1855
|
+
...(ngDevMode ? [{ debugName: "cells" }] : /* istanbul ignore next */ []));
|
|
1856
|
+
gridLabel = computed(() => `${this.startYear()} – ${this.endYear()}`, /* @ts-ignore */
|
|
1857
|
+
...(ngDevMode ? [{ debugName: "gridLabel" }] : /* istanbul ignore next */ []));
|
|
1805
1858
|
getActiveCompareValue() {
|
|
1806
1859
|
return this.dateAdapter.getYear(this.activeDate());
|
|
1807
1860
|
}
|
|
@@ -1906,8 +1959,8 @@ class YearsViewComponent extends CalendarViewBase {
|
|
|
1906
1959
|
return false;
|
|
1907
1960
|
return year > this.dateAdapter.getYear(s) && year < this.dateAdapter.getYear(e);
|
|
1908
1961
|
}
|
|
1909
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1910
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1962
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: YearsViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1963
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: YearsViewComponent, isStandalone: true, selector: "tw-calendar-years-view", host: { classAttribute: "block" }, viewQueries: [{ propertyName: "cellComponents", predicate: CalendarCellComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
|
|
1911
1964
|
<div
|
|
1912
1965
|
role="grid"
|
|
1913
1966
|
[attr.aria-label]="gridLabel()"
|
|
@@ -1934,7 +1987,7 @@ class YearsViewComponent extends CalendarViewBase {
|
|
|
1934
1987
|
</div>
|
|
1935
1988
|
`, isInline: true, dependencies: [{ kind: "component", type: CalendarCellComponent, selector: "tw-calendar-cell", inputs: ["cell", "view", "outside", "tabindex", "cellTemplate"], outputs: ["selected", "focused", "previewed", "keyNav"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1936
1989
|
}
|
|
1937
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1990
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: YearsViewComponent, decorators: [{
|
|
1938
1991
|
type: Component,
|
|
1939
1992
|
args: [{
|
|
1940
1993
|
selector: 'tw-calendar-years-view',
|
|
@@ -2009,10 +2062,10 @@ class SingleSelectionStrategy extends CalendarSelectionStrategy {
|
|
|
2009
2062
|
isRangeMiddle(_date, _current) {
|
|
2010
2063
|
return false;
|
|
2011
2064
|
}
|
|
2012
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2013
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
2065
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SingleSelectionStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
2066
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SingleSelectionStrategy });
|
|
2014
2067
|
}
|
|
2015
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2068
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: SingleSelectionStrategy, decorators: [{
|
|
2016
2069
|
type: Injectable
|
|
2017
2070
|
}] });
|
|
2018
2071
|
|
|
@@ -2081,10 +2134,10 @@ class RangeSelectionStrategy extends CalendarSelectionStrategy {
|
|
|
2081
2134
|
!this.isRangeStart(date, current) &&
|
|
2082
2135
|
!this.isRangeEnd(date, current));
|
|
2083
2136
|
}
|
|
2084
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2085
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
2137
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RangeSelectionStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
2138
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RangeSelectionStrategy });
|
|
2086
2139
|
}
|
|
2087
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2140
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RangeSelectionStrategy, decorators: [{
|
|
2088
2141
|
type: Injectable
|
|
2089
2142
|
}] });
|
|
2090
2143
|
|
|
@@ -2120,10 +2173,10 @@ class MultiSelectionStrategy extends CalendarSelectionStrategy {
|
|
|
2120
2173
|
isRangeMiddle(_date, _current) {
|
|
2121
2174
|
return false;
|
|
2122
2175
|
}
|
|
2123
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2124
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
2176
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MultiSelectionStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
2177
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MultiSelectionStrategy });
|
|
2125
2178
|
}
|
|
2126
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2179
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MultiSelectionStrategy, decorators: [{
|
|
2127
2180
|
type: Injectable
|
|
2128
2181
|
}] });
|
|
2129
2182
|
|
|
@@ -2177,10 +2230,10 @@ class WeekSelectionStrategy extends CalendarSelectionStrategy {
|
|
|
2177
2230
|
const end = this.dateAdapter.addDays(start, 6);
|
|
2178
2231
|
return { start, end };
|
|
2179
2232
|
}
|
|
2180
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2181
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
2233
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: WeekSelectionStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
2234
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: WeekSelectionStrategy });
|
|
2182
2235
|
}
|
|
2183
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2236
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: WeekSelectionStrategy, decorators: [{
|
|
2184
2237
|
type: Injectable
|
|
2185
2238
|
}] });
|
|
2186
2239
|
|
|
@@ -2260,7 +2313,8 @@ class CalendarComponent {
|
|
|
2260
2313
|
injectedStrategy = inject(CALENDAR_SELECTION_STRATEGY, {
|
|
2261
2314
|
optional: true,
|
|
2262
2315
|
});
|
|
2263
|
-
monthViews = viewChildren(MonthViewComponent,
|
|
2316
|
+
monthViews = viewChildren(MonthViewComponent, /* @ts-ignore */
|
|
2317
|
+
...(ngDevMode ? [{ debugName: "monthViews" }] : /* istanbul ignore next */ []));
|
|
2264
2318
|
/**
|
|
2265
2319
|
* Built-in strategies instantiated lazily in the host's injection context so
|
|
2266
2320
|
* `inject(DATE_ADAPTER)` calls inside each strategy resolve. Range state will
|
|
@@ -2276,28 +2330,38 @@ class CalendarComponent {
|
|
|
2276
2330
|
// Public inputs (§33.1)
|
|
2277
2331
|
// ---------------------------------------------------------------------------
|
|
2278
2332
|
/** Selection mode (§5). Changing this at runtime clears the value and emits `modeChange`. */
|
|
2279
|
-
|
|
2333
|
+
modeInput = input('single', { ...(ngDevMode ? { debugName: "modeInput" } : /* istanbul ignore next */ {}), alias: 'mode' });
|
|
2334
|
+
mode = linkedSignal(this.modeInput, /* @ts-ignore */
|
|
2335
|
+
...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
2280
2336
|
/**
|
|
2281
2337
|
* Consumer-bound value. Shape narrows by `M`: `D | null` for single,
|
|
2282
2338
|
* `D[]` for multiple, `{ start; end }` for range.
|
|
2283
2339
|
*/
|
|
2284
|
-
|
|
2340
|
+
valueInput = input(null, { ...(ngDevMode ? { debugName: "valueInput" } : /* istanbul ignore next */ {}), alias: 'value' });
|
|
2341
|
+
value = linkedSignal(this.valueInput, /* @ts-ignore */
|
|
2342
|
+
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
2285
2343
|
/** Anchor date for the displayed view. Defaults to today on mount. */
|
|
2286
|
-
startAt = input(null,
|
|
2344
|
+
startAt = input(null, /* @ts-ignore */
|
|
2345
|
+
...(ngDevMode ? [{ debugName: "startAt" }] : /* istanbul ignore next */ []));
|
|
2287
2346
|
/** Minimum selectable date. */
|
|
2288
|
-
minDate = input(null,
|
|
2347
|
+
minDate = input(null, /* @ts-ignore */
|
|
2348
|
+
...(ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []));
|
|
2289
2349
|
/** Maximum selectable date. */
|
|
2290
|
-
maxDate = input(null,
|
|
2350
|
+
maxDate = input(null, /* @ts-ignore */
|
|
2351
|
+
...(ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []));
|
|
2291
2352
|
/** Per-date predicate — return `false` to disable. */
|
|
2292
|
-
dateFilter = input(null,
|
|
2353
|
+
dateFilter = input(null, /* @ts-ignore */
|
|
2354
|
+
...(ngDevMode ? [{ debugName: "dateFilter" }] : /* istanbul ignore next */ []));
|
|
2293
2355
|
/**
|
|
2294
2356
|
* Explicitly disabled dates (§10.1). Either an array (each entry compared via
|
|
2295
2357
|
* `adapter.sameDate`) or a predicate returning `true` for disabled dates.
|
|
2296
2358
|
* OR-combined with `dateFilter`, `disabledDaysOfWeek`, and `[minDate, maxDate]`.
|
|
2297
2359
|
*/
|
|
2298
|
-
disabledDates = input(null,
|
|
2360
|
+
disabledDates = input(null, /* @ts-ignore */
|
|
2361
|
+
...(ngDevMode ? [{ debugName: "disabledDates" }] : /* istanbul ignore next */ []));
|
|
2299
2362
|
/** Days of the week to disable (0=Sun … 6=Sat). Empty array = no day-of-week disabling. */
|
|
2300
|
-
disabledDaysOfWeek = input([],
|
|
2363
|
+
disabledDaysOfWeek = input([], /* @ts-ignore */
|
|
2364
|
+
...(ngDevMode ? [{ debugName: "disabledDaysOfWeek" }] : /* istanbul ignore next */ []));
|
|
2301
2365
|
/**
|
|
2302
2366
|
* Bundle of date constraints (§10.1). Lets a consumer pass `minDate`, `maxDate`,
|
|
2303
2367
|
* `disabledDates`, `disabledDaysOfWeek`, and `dateFilter` as a single object —
|
|
@@ -2306,67 +2370,86 @@ class CalendarComponent {
|
|
|
2306
2370
|
* `disabledDaysOfWeek`, `dateFilter`) take precedence over fields here when both
|
|
2307
2371
|
* are set non-null.
|
|
2308
2372
|
*/
|
|
2309
|
-
constraints = input(null,
|
|
2373
|
+
constraints = input(null, /* @ts-ignore */
|
|
2374
|
+
...(ngDevMode ? [{ debugName: "constraints" }] : /* istanbul ignore next */ []));
|
|
2310
2375
|
/** Minimum range length in days, inclusive (`mode: 'range'` only). `null` = no minimum. */
|
|
2311
|
-
minRangeLength = input(null,
|
|
2376
|
+
minRangeLength = input(null, /* @ts-ignore */
|
|
2377
|
+
...(ngDevMode ? [{ debugName: "minRangeLength" }] : /* istanbul ignore next */ []));
|
|
2312
2378
|
/** Maximum range length in days, inclusive (`mode: 'range'` only). `null` = no maximum. */
|
|
2313
|
-
maxRangeLength = input(null,
|
|
2379
|
+
maxRangeLength = input(null, /* @ts-ignore */
|
|
2380
|
+
...(ngDevMode ? [{ debugName: "maxRangeLength" }] : /* istanbul ignore next */ []));
|
|
2314
2381
|
/** Maximum number of selections in `mode: 'multiple'`. `null` = unlimited. */
|
|
2315
|
-
maxSelections = input(null,
|
|
2382
|
+
maxSelections = input(null, /* @ts-ignore */
|
|
2383
|
+
...(ngDevMode ? [{ debugName: "maxSelections" }] : /* istanbul ignore next */ []));
|
|
2316
2384
|
/**
|
|
2317
2385
|
* What happens when the user tries to select past `maxSelections` (§10.1).
|
|
2318
2386
|
* `'emit-limit-reached'` (default) emits `selectionLimitReached` and ignores
|
|
2319
2387
|
* the click; `'replace-oldest'` drops the first entry; `'ignore'` is silent.
|
|
2320
2388
|
*/
|
|
2321
|
-
maxSelectionBehavior = input('emit-limit-reached',
|
|
2389
|
+
maxSelectionBehavior = input('emit-limit-reached', /* @ts-ignore */
|
|
2390
|
+
...(ngDevMode ? [{ debugName: "maxSelectionBehavior" }] : /* istanbul ignore next */ []));
|
|
2322
2391
|
/**
|
|
2323
2392
|
* IDREF list for the form-error live region (§28.3). When set, the calendar
|
|
2324
2393
|
* root carries `aria-describedby="<value>"` so screen readers read consumer-
|
|
2325
2394
|
* rendered error messages alongside the focused cell announcement.
|
|
2326
2395
|
*/
|
|
2327
|
-
errorAriaDescribedBy = input(null,
|
|
2396
|
+
errorAriaDescribedBy = input(null, /* @ts-ignore */
|
|
2397
|
+
...(ngDevMode ? [{ debugName: "errorAriaDescribedBy" }] : /* istanbul ignore next */ []));
|
|
2328
2398
|
/**
|
|
2329
2399
|
* How `mode: 'range'` reacts to a click after a complete range (§21.2):
|
|
2330
2400
|
* - `'restart'` (default): start a new range with the clicked cell, emit `selectionRestart`.
|
|
2331
2401
|
* - `'nearest-edge'`: move the closer endpoint (start vs end) to the clicked date and re-commit (§21.3); emits `selectionComplete({reason: 'nearest-edge'})`.
|
|
2332
2402
|
* - `'require-clear'`: ignore the click + flash the cell as invalid (`data-state-invalid-flash`); user must call `clear()` first.
|
|
2333
2403
|
*/
|
|
2334
|
-
rangeClickBehavior = input('restart',
|
|
2404
|
+
rangeClickBehavior = input('restart', /* @ts-ignore */
|
|
2405
|
+
...(ngDevMode ? [{ debugName: "rangeClickBehavior" }] : /* istanbul ignore next */ []));
|
|
2335
2406
|
/**
|
|
2336
2407
|
* Range-mode behavior knobs. Accepts a partial object — unset fields use the
|
|
2337
2408
|
* defaults documented on each property of `RangeBehaviorConfig`. Defaults:
|
|
2338
2409
|
* `{ allowSingleDayRange: true, persistPartialRange: true, allowBackwardRange: false, disableRangesCrossingDisabledDates: false }`.
|
|
2339
2410
|
*/
|
|
2340
|
-
rangeBehavior = input({},
|
|
2411
|
+
rangeBehavior = input({}, /* @ts-ignore */
|
|
2412
|
+
...(ngDevMode ? [{ debugName: "rangeBehavior" }] : /* istanbul ignore next */ []));
|
|
2341
2413
|
/** Function producing per-cell CSS classes. */
|
|
2342
|
-
dateClass = input(null,
|
|
2414
|
+
dateClass = input(null, /* @ts-ignore */
|
|
2415
|
+
...(ngDevMode ? [{ debugName: "dateClass" }] : /* istanbul ignore next */ []));
|
|
2343
2416
|
/** When `true`, the calendar renders with a border and a soft shadow. */
|
|
2344
|
-
bordered = input(true,
|
|
2417
|
+
bordered = input(true, /* @ts-ignore */
|
|
2418
|
+
...(ngDevMode ? [{ debugName: "bordered" }] : /* istanbul ignore next */ []));
|
|
2345
2419
|
/** Which view opens first. Defaults to `'day'`. Phase 8 will derive the default from `rangeGranularity`. */
|
|
2346
|
-
startView = input('day',
|
|
2420
|
+
startView = input('day', /* @ts-ignore */
|
|
2421
|
+
...(ngDevMode ? [{ debugName: "startView" }] : /* istanbul ignore next */ []));
|
|
2347
2422
|
/** Override first day of week (0=Sun, 1=Mon). Falls back to the adapter's default. */
|
|
2348
|
-
firstDayOfWeek = input(null,
|
|
2423
|
+
firstDayOfWeek = input(null, /* @ts-ignore */
|
|
2424
|
+
...(ngDevMode ? [{ debugName: "firstDayOfWeek" }] : /* istanbul ignore next */ []));
|
|
2349
2425
|
/**
|
|
2350
2426
|
* Number of months to display side-by-side (1 or 2). Phase 9 replaces this with a
|
|
2351
2427
|
* full `numberOfMonths: 1..12+` surface (§23).
|
|
2352
2428
|
*/
|
|
2353
|
-
monthColumns = input(1,
|
|
2429
|
+
monthColumns = input(1, /* @ts-ignore */
|
|
2430
|
+
...(ngDevMode ? [{ debugName: "monthColumns" }] : /* istanbul ignore next */ []));
|
|
2354
2431
|
/** Disabled state. Merged with any `setDisabledState` call from a bound form control via `effectiveDisabled`. */
|
|
2355
|
-
disabled = input(false,
|
|
2432
|
+
disabled = input(false, /* @ts-ignore */
|
|
2433
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
2356
2434
|
/** Read-only state (§33.1). When `true`, focus and keyboard navigation still work but selections cannot be committed. */
|
|
2357
|
-
readonly = input(false,
|
|
2435
|
+
readonly = input(false, /* @ts-ignore */
|
|
2436
|
+
...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
|
|
2358
2437
|
/** How a form reset restores internal state (§6.5). `'full'` (default) also restores view + active-date; `'value-only'` clears the draft but leaves navigation where the user left it. */
|
|
2359
|
-
resetBehavior = input('full',
|
|
2438
|
+
resetBehavior = input('full', /* @ts-ignore */
|
|
2439
|
+
...(ngDevMode ? [{ debugName: "resetBehavior" }] : /* istanbul ignore next */ []));
|
|
2360
2440
|
/** Optional cell-content template. */
|
|
2361
|
-
cellTemplate = input(null,
|
|
2441
|
+
cellTemplate = input(null, /* @ts-ignore */
|
|
2442
|
+
...(ngDevMode ? [{ debugName: "cellTemplate" }] : /* istanbul ignore next */ []));
|
|
2362
2443
|
/** Per-instance locale override. Falls back to Angular `LOCALE_ID` when `null` (§19.1). */
|
|
2363
|
-
locale = input(null,
|
|
2444
|
+
locale = input(null, /* @ts-ignore */
|
|
2445
|
+
...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
|
|
2364
2446
|
/**
|
|
2365
2447
|
* Per-instance `CalendarIntl` override (§19.4). Per-field merge — unspecified
|
|
2366
2448
|
* fields inherit the DI-provided default. Pass a partial bag (e.g. one of the
|
|
2367
2449
|
* shipped locale packs `de`, `fr`, `es`, `pt`, `ja`) or a full custom instance.
|
|
2368
2450
|
*/
|
|
2369
|
-
intl = input(null,
|
|
2451
|
+
intl = input(null, /* @ts-ignore */
|
|
2452
|
+
...(ngDevMode ? [{ debugName: "intl" }] : /* istanbul ignore next */ []));
|
|
2370
2453
|
// ---------------------------------------------------------------------------
|
|
2371
2454
|
// Public outputs (§33.2). Outputs reachable only in overlay mode (opened/closed)
|
|
2372
2455
|
// or through constraint-aware preview (rangePreview `invalidPreview`) are declared
|
|
@@ -2406,37 +2489,50 @@ class CalendarComponent {
|
|
|
2406
2489
|
// Internal writable state (§8.1)
|
|
2407
2490
|
// ---------------------------------------------------------------------------
|
|
2408
2491
|
/** In-flight draft during range SELECTING. `null` in other states (§8.1). */
|
|
2409
|
-
internalDraftValue = signal(null,
|
|
2492
|
+
internalDraftValue = signal(null, /* @ts-ignore */
|
|
2493
|
+
...(ngDevMode ? [{ debugName: "internalDraftValue" }] : /* istanbul ignore next */ []));
|
|
2410
2494
|
/** Current selection lifecycle state. */
|
|
2411
|
-
_selectionState = signal('EMPTY',
|
|
2495
|
+
_selectionState = signal('EMPTY', /* @ts-ignore */
|
|
2496
|
+
...(ngDevMode ? [{ debugName: "_selectionState" }] : /* istanbul ignore next */ []));
|
|
2412
2497
|
/** Current view (writable for drill). Tracks `startView` until the user drills. */
|
|
2413
|
-
_viewState = linkedSignal(() => this.startView(),
|
|
2498
|
+
_viewState = linkedSignal(() => this.startView(), /* @ts-ignore */
|
|
2499
|
+
...(ngDevMode ? [{ debugName: "_viewState" }] : /* istanbul ignore next */ []));
|
|
2414
2500
|
/**
|
|
2415
2501
|
* Active (focused) date. `linkedSignal` so changes to `startAt` at runtime update
|
|
2416
2502
|
* the anchor, but internal navigation can still write it independently.
|
|
2417
2503
|
*/
|
|
2418
|
-
_activeDate = linkedSignal(() => this.startAt() ?? this.dateAdapter.today(),
|
|
2504
|
+
_activeDate = linkedSignal(() => this.startAt() ?? this.dateAdapter.today(), /* @ts-ignore */
|
|
2505
|
+
...(ngDevMode ? [{ debugName: "_activeDate" }] : /* istanbul ignore next */ []));
|
|
2419
2506
|
/** Pointer-hover date (desktop only). */
|
|
2420
|
-
_hoveredDate = signal(null,
|
|
2507
|
+
_hoveredDate = signal(null, /* @ts-ignore */
|
|
2508
|
+
...(ngDevMode ? [{ debugName: "_hoveredDate" }] : /* istanbul ignore next */ []));
|
|
2421
2509
|
/** Overlay state. Always `'closed'` in inline mode until Phase 10 wires the lifecycle. */
|
|
2422
|
-
_overlayState = signal('closed',
|
|
2510
|
+
_overlayState = signal('closed', /* @ts-ignore */
|
|
2511
|
+
...(ngDevMode ? [{ debugName: "_overlayState" }] : /* istanbul ignore next */ []));
|
|
2423
2512
|
/** Preset selection id. Phase 12 writes this. */
|
|
2424
|
-
_selectedPresetId = signal(null,
|
|
2513
|
+
_selectedPresetId = signal(null, /* @ts-ignore */
|
|
2514
|
+
...(ngDevMode ? [{ debugName: "_selectedPresetId" }] : /* istanbul ignore next */ []));
|
|
2425
2515
|
/** Raw `TOut` retained when `fromForm` throws (§7.6, Phase 14). `null` otherwise. */
|
|
2426
|
-
_lastInvalidFormValue = signal(null,
|
|
2516
|
+
_lastInvalidFormValue = signal(null, /* @ts-ignore */
|
|
2517
|
+
...(ngDevMode ? [{ debugName: "_lastInvalidFormValue" }] : /* istanbul ignore next */ []));
|
|
2427
2518
|
// ---------------------------------------------------------------------------
|
|
2428
2519
|
// Public readonly signals (§33.3)
|
|
2429
2520
|
// ---------------------------------------------------------------------------
|
|
2430
2521
|
/** Overlay lifecycle. `null` until `interaction: 'overlay'` lands in Phase 10; until then the implementation signal is exposed as `'closed'`. */
|
|
2431
|
-
overlayState = computed(() => this._overlayState(),
|
|
2522
|
+
overlayState = computed(() => this._overlayState(), /* @ts-ignore */
|
|
2523
|
+
...(ngDevMode ? [{ debugName: "overlayState" }] : /* istanbul ignore next */ []));
|
|
2432
2524
|
/** Selection lifecycle per §8. */
|
|
2433
|
-
selectionState = computed(() => this._selectionState(),
|
|
2525
|
+
selectionState = computed(() => this._selectionState(), /* @ts-ignore */
|
|
2526
|
+
...(ngDevMode ? [{ debugName: "selectionState" }] : /* istanbul ignore next */ []));
|
|
2434
2527
|
/** Active (focused) cell. `null` when the overlay is closed and no inline focus is established; in inline mode this is always the current anchor. */
|
|
2435
|
-
activeDate = computed(() => this._activeDate(),
|
|
2528
|
+
activeDate = computed(() => this._activeDate(), /* @ts-ignore */
|
|
2529
|
+
...(ngDevMode ? [{ debugName: "activeDate" }] : /* istanbul ignore next */ []));
|
|
2436
2530
|
/** Currently selected preset id. */
|
|
2437
|
-
selectedPresetId = computed(() => this._selectedPresetId(),
|
|
2531
|
+
selectedPresetId = computed(() => this._selectedPresetId(), /* @ts-ignore */
|
|
2532
|
+
...(ngDevMode ? [{ debugName: "selectedPresetId" }] : /* istanbul ignore next */ []));
|
|
2438
2533
|
/** Current view state (day / month / year). */
|
|
2439
|
-
viewState = computed(() => this._viewState(),
|
|
2534
|
+
viewState = computed(() => this._viewState(), /* @ts-ignore */
|
|
2535
|
+
...(ngDevMode ? [{ debugName: "viewState" }] : /* istanbul ignore next */ []));
|
|
2440
2536
|
/** Months currently rendered. Phase 9 extends this to the full responsive count. */
|
|
2441
2537
|
displayedMonths = computed(() => {
|
|
2442
2538
|
const active = this._activeDate();
|
|
@@ -2454,9 +2550,11 @@ class CalendarComponent {
|
|
|
2454
2550
|
month: this.dateAdapter.getMonth(secondary),
|
|
2455
2551
|
},
|
|
2456
2552
|
];
|
|
2457
|
-
},
|
|
2553
|
+
}, /* @ts-ignore */
|
|
2554
|
+
...(ngDevMode ? [{ debugName: "displayedMonths" }] : /* istanbul ignore next */ []));
|
|
2458
2555
|
/** Raw form value rejected by the transformer's `fromForm` (§7.6, §33.3). */
|
|
2459
|
-
lastInvalidFormValue = computed(() => this._lastInvalidFormValue(),
|
|
2556
|
+
lastInvalidFormValue = computed(() => this._lastInvalidFormValue(), /* @ts-ignore */
|
|
2557
|
+
...(ngDevMode ? [{ debugName: "lastInvalidFormValue" }] : /* istanbul ignore next */ []));
|
|
2460
2558
|
// ---------------------------------------------------------------------------
|
|
2461
2559
|
// ControlValueAccessor + Validator (Phase 3)
|
|
2462
2560
|
// ---------------------------------------------------------------------------
|
|
@@ -2468,16 +2566,20 @@ class CalendarComponent {
|
|
|
2468
2566
|
* by the Signal Forms mode directives. OR-merged with the public `disabled`
|
|
2469
2567
|
* input into `effectiveDisabled`.
|
|
2470
2568
|
*/
|
|
2471
|
-
cvaDisabled = signal(false,
|
|
2569
|
+
cvaDisabled = signal(false, /* @ts-ignore */
|
|
2570
|
+
...(ngDevMode ? [{ debugName: "cvaDisabled" }] : /* istanbul ignore next */ []));
|
|
2472
2571
|
/**
|
|
2473
2572
|
* @internal Read-only state set by the Signal Forms mode directives. OR-merged
|
|
2474
2573
|
* with the public `readonly` input into `effectiveReadonly`.
|
|
2475
2574
|
*/
|
|
2476
|
-
cvaReadonly = signal(false,
|
|
2575
|
+
cvaReadonly = signal(false, /* @ts-ignore */
|
|
2576
|
+
...(ngDevMode ? [{ debugName: "cvaReadonly" }] : /* istanbul ignore next */ []));
|
|
2477
2577
|
/** Effective disabled state — public `disabled` input OR any form-bound disabled flip. Drives `aria-disabled`. */
|
|
2478
|
-
effectiveDisabled = computed(() => this.disabled() || this.cvaDisabled(),
|
|
2578
|
+
effectiveDisabled = computed(() => this.disabled() || this.cvaDisabled(), /* @ts-ignore */
|
|
2579
|
+
...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
|
|
2479
2580
|
/** Effective read-only state — public `readonly` input OR any form-bound readonly flip. Drives `aria-readonly`. */
|
|
2480
|
-
effectiveReadonly = computed(() => this.readonly() || this.cvaReadonly(),
|
|
2581
|
+
effectiveReadonly = computed(() => this.readonly() || this.cvaReadonly(), /* @ts-ignore */
|
|
2582
|
+
...(ngDevMode ? [{ debugName: "effectiveReadonly" }] : /* istanbul ignore next */ []));
|
|
2481
2583
|
/**
|
|
2482
2584
|
* @internal Resolved range-behavior config. Merges the consumer-supplied
|
|
2483
2585
|
* `Partial<RangeBehaviorConfig>` over the documented defaults so internal
|
|
@@ -2489,7 +2591,8 @@ class CalendarComponent {
|
|
|
2489
2591
|
persistPartialRange: true,
|
|
2490
2592
|
disableRangesCrossingDisabledDates: false,
|
|
2491
2593
|
...this.rangeBehavior(),
|
|
2492
|
-
}),
|
|
2594
|
+
}), /* @ts-ignore */
|
|
2595
|
+
...(ngDevMode ? [{ debugName: "_resolvedRangeBehavior" }] : /* istanbul ignore next */ []));
|
|
2493
2596
|
/** @internal Dev-mode warning guard so each mismatched write warns only once per instance. */
|
|
2494
2597
|
_warnedShapeMismatch = false;
|
|
2495
2598
|
/** @internal Set by `writeValue`; read by the `FormResetEvent` handler so it can emit `selectionCleared({reason: 'reset'})` only when a non-empty value was on the control before the reset cleared it. */
|
|
@@ -2702,9 +2805,11 @@ class CalendarComponent {
|
|
|
2702
2805
|
const merged = Object.create(Object.getPrototypeOf(this.injectedIntl));
|
|
2703
2806
|
Object.assign(merged, this.injectedIntl, override);
|
|
2704
2807
|
return merged;
|
|
2705
|
-
},
|
|
2808
|
+
}, /* @ts-ignore */
|
|
2809
|
+
...(ngDevMode ? [{ debugName: "effectiveIntl" }] : /* istanbul ignore next */ []));
|
|
2706
2810
|
/** Effective locale — `locale` input wins, otherwise Angular `LOCALE_ID`. */
|
|
2707
|
-
effectiveLocale = computed(() => this.locale() ?? this.platformLocale,
|
|
2811
|
+
effectiveLocale = computed(() => this.locale() ?? this.platformLocale, /* @ts-ignore */
|
|
2812
|
+
...(ngDevMode ? [{ debugName: "effectiveLocale" }] : /* istanbul ignore next */ []));
|
|
2708
2813
|
/**
|
|
2709
2814
|
* Active strategy for single/multiple/range. Injected strategies (custom) win.
|
|
2710
2815
|
* Range state will migrate into this component in Phase 6; for now we reuse
|
|
@@ -2719,28 +2824,33 @@ class CalendarComponent {
|
|
|
2719
2824
|
if (m === 'multiple')
|
|
2720
2825
|
return this.localStrategies.multiple;
|
|
2721
2826
|
return this.localStrategies.single;
|
|
2722
|
-
},
|
|
2827
|
+
}, /* @ts-ignore */
|
|
2828
|
+
...(ngDevMode ? [{ debugName: "selectionStrategy" }] : /* istanbul ignore next */ []));
|
|
2723
2829
|
/** Computed first-day-of-week (input override wins over adapter default). */
|
|
2724
2830
|
computedFirstDayOfWeek = computed(() => {
|
|
2725
2831
|
const override = this.firstDayOfWeek();
|
|
2726
2832
|
if (override !== null && override >= 0 && override <= 6)
|
|
2727
2833
|
return override;
|
|
2728
2834
|
return this.dateAdapter.getFirstDayOfWeek();
|
|
2729
|
-
},
|
|
2835
|
+
}, /* @ts-ignore */
|
|
2836
|
+
...(ngDevMode ? [{ debugName: "computedFirstDayOfWeek" }] : /* istanbul ignore next */ []));
|
|
2730
2837
|
/** Resolves the configured `monthColumns` value. Range-mode consumers pass `2` explicitly. */
|
|
2731
|
-
effectiveMonthColumns = computed(() => this.monthColumns(),
|
|
2838
|
+
effectiveMonthColumns = computed(() => this.monthColumns(), /* @ts-ignore */
|
|
2839
|
+
...(ngDevMode ? [{ debugName: "effectiveMonthColumns" }] : /* istanbul ignore next */ []));
|
|
2732
2840
|
/**
|
|
2733
2841
|
* @internal Drives `aria-multiselectable` on every view grid. `true` when the
|
|
2734
2842
|
* current `mode` allows more than one cell to be selected at a time
|
|
2735
2843
|
* (`'multiple'` or `'range'`); `false` for `'single'`.
|
|
2736
2844
|
*/
|
|
2737
|
-
multiSelectable = computed(() => this.mode() !== 'single',
|
|
2845
|
+
multiSelectable = computed(() => this.mode() !== 'single', /* @ts-ignore */
|
|
2846
|
+
...(ngDevMode ? [{ debugName: "multiSelectable" }] : /* istanbul ignore next */ []));
|
|
2738
2847
|
/** Secondary anchor for the right-hand grid in multi-column mode. */
|
|
2739
2848
|
secondaryActiveDate = computed(() => {
|
|
2740
2849
|
if (this.effectiveMonthColumns() < 2)
|
|
2741
2850
|
return null;
|
|
2742
2851
|
return this.dateAdapter.addMonths(this._activeDate(), 1);
|
|
2743
|
-
},
|
|
2852
|
+
}, /* @ts-ignore */
|
|
2853
|
+
...(ngDevMode ? [{ debugName: "secondaryActiveDate" }] : /* istanbul ignore next */ []));
|
|
2744
2854
|
/**
|
|
2745
2855
|
* Phase 6 — preview cursor. Pointer hover wins; falls back to `activeDate`
|
|
2746
2856
|
* when SELECTING so keyboard arrow-key moves drive the same preview path
|
|
@@ -2754,7 +2864,8 @@ class CalendarComponent {
|
|
|
2754
2864
|
if (this._selectionState() === 'SELECTING')
|
|
2755
2865
|
return this._activeDate();
|
|
2756
2866
|
return null;
|
|
2757
|
-
},
|
|
2867
|
+
}, /* @ts-ignore */
|
|
2868
|
+
...(ngDevMode ? [{ debugName: "previewCursor" }] : /* istanbul ignore next */ []));
|
|
2758
2869
|
/**
|
|
2759
2870
|
* Preview range. Driven by the strategy and the `previewCursor` (hover or
|
|
2760
2871
|
* keyboard active-date during SELECTING).
|
|
@@ -2764,7 +2875,8 @@ class CalendarComponent {
|
|
|
2764
2875
|
const cursor = this.previewCursor();
|
|
2765
2876
|
const source = this.strategySelection();
|
|
2766
2877
|
return strategy.createPreview(cursor, source);
|
|
2767
|
-
},
|
|
2878
|
+
}, /* @ts-ignore */
|
|
2879
|
+
...(ngDevMode ? [{ debugName: "previewRange" }] : /* istanbul ignore next */ []));
|
|
2768
2880
|
/**
|
|
2769
2881
|
* Adapter-compatible view of the current selection.
|
|
2770
2882
|
* For range: a `{ start, end }` view of either the committed value or the in-flight draft.
|
|
@@ -2783,18 +2895,24 @@ class CalendarComponent {
|
|
|
2783
2895
|
return v ?? null;
|
|
2784
2896
|
}
|
|
2785
2897
|
return v;
|
|
2786
|
-
},
|
|
2898
|
+
}, /* @ts-ignore */
|
|
2899
|
+
...(ngDevMode ? [{ debugName: "strategySelection" }] : /* istanbul ignore next */ []));
|
|
2787
2900
|
/** Adapter-compatible view exposed to the view components. */
|
|
2788
|
-
legacySelected = computed(() => this.strategySelection(),
|
|
2901
|
+
legacySelected = computed(() => this.strategySelection(), /* @ts-ignore */
|
|
2902
|
+
...(ngDevMode ? [{ debugName: "legacySelected" }] : /* istanbul ignore next */ []));
|
|
2789
2903
|
variantResult = computed(() => calendarVariants({
|
|
2790
2904
|
bordered: this.bordered(),
|
|
2791
2905
|
columns: (this.effectiveMonthColumns() >= 2 ? 2 : 1),
|
|
2792
|
-
}),
|
|
2906
|
+
}), /* @ts-ignore */
|
|
2907
|
+
...(ngDevMode ? [{ debugName: "variantResult" }] : /* istanbul ignore next */ []));
|
|
2793
2908
|
/** @internal */
|
|
2794
|
-
rootClasses = computed(() => this.variantResult().root(),
|
|
2909
|
+
rootClasses = computed(() => this.variantResult().root(), /* @ts-ignore */
|
|
2910
|
+
...(ngDevMode ? [{ debugName: "rootClasses" }] : /* istanbul ignore next */ []));
|
|
2795
2911
|
/** @internal */
|
|
2796
|
-
monthsClasses = computed(() => this.variantResult().months(),
|
|
2797
|
-
|
|
2912
|
+
monthsClasses = computed(() => this.variantResult().months(), /* @ts-ignore */
|
|
2913
|
+
...(ngDevMode ? [{ debugName: "monthsClasses" }] : /* istanbul ignore next */ []));
|
|
2914
|
+
monthNames = computed(() => this.dateAdapter.getMonthNames('long'), /* @ts-ignore */
|
|
2915
|
+
...(ngDevMode ? [{ debugName: "monthNames" }] : /* istanbul ignore next */ []));
|
|
2798
2916
|
/** @internal */
|
|
2799
2917
|
periodLabel = computed(() => {
|
|
2800
2918
|
const date = this._activeDate();
|
|
@@ -2822,7 +2940,8 @@ class CalendarComponent {
|
|
|
2822
2940
|
return `${startYear} – ${startYear + YEARS_PER_PAGE - 1}`;
|
|
2823
2941
|
}
|
|
2824
2942
|
}
|
|
2825
|
-
},
|
|
2943
|
+
}, /* @ts-ignore */
|
|
2944
|
+
...(ngDevMode ? [{ debugName: "periodLabel" }] : /* istanbul ignore next */ []));
|
|
2826
2945
|
/** @internal */
|
|
2827
2946
|
periodAriaLabel = computed(() => {
|
|
2828
2947
|
const view = this._viewState();
|
|
@@ -2836,7 +2955,8 @@ class CalendarComponent {
|
|
|
2836
2955
|
case 'year':
|
|
2837
2956
|
return label;
|
|
2838
2957
|
}
|
|
2839
|
-
},
|
|
2958
|
+
}, /* @ts-ignore */
|
|
2959
|
+
...(ngDevMode ? [{ debugName: "periodAriaLabel" }] : /* istanbul ignore next */ []));
|
|
2840
2960
|
/** @internal */
|
|
2841
2961
|
prevAriaLabel = computed(() => {
|
|
2842
2962
|
const intl = this.effectiveIntl();
|
|
@@ -2848,7 +2968,8 @@ class CalendarComponent {
|
|
|
2848
2968
|
case 'year':
|
|
2849
2969
|
return intl.previousYearsLabel(YEARS_PER_PAGE);
|
|
2850
2970
|
}
|
|
2851
|
-
},
|
|
2971
|
+
}, /* @ts-ignore */
|
|
2972
|
+
...(ngDevMode ? [{ debugName: "prevAriaLabel" }] : /* istanbul ignore next */ []));
|
|
2852
2973
|
/** @internal */
|
|
2853
2974
|
nextAriaLabel = computed(() => {
|
|
2854
2975
|
const intl = this.effectiveIntl();
|
|
@@ -2860,7 +2981,8 @@ class CalendarComponent {
|
|
|
2860
2981
|
case 'year':
|
|
2861
2982
|
return intl.nextYearsLabel(YEARS_PER_PAGE);
|
|
2862
2983
|
}
|
|
2863
|
-
},
|
|
2984
|
+
}, /* @ts-ignore */
|
|
2985
|
+
...(ngDevMode ? [{ debugName: "nextAriaLabel" }] : /* istanbul ignore next */ []));
|
|
2864
2986
|
/** @internal */
|
|
2865
2987
|
prevDisabled = computed(() => {
|
|
2866
2988
|
const date = this._activeDate();
|
|
@@ -2883,7 +3005,8 @@ class CalendarComponent {
|
|
|
2883
3005
|
return isYearDisabled(startYear - 1, minDate, null, this.dateAdapter);
|
|
2884
3006
|
}
|
|
2885
3007
|
}
|
|
2886
|
-
},
|
|
3008
|
+
}, /* @ts-ignore */
|
|
3009
|
+
...(ngDevMode ? [{ debugName: "prevDisabled" }] : /* istanbul ignore next */ []));
|
|
2887
3010
|
/** @internal */
|
|
2888
3011
|
nextDisabled = computed(() => {
|
|
2889
3012
|
const date = this._activeDate();
|
|
@@ -2906,7 +3029,8 @@ class CalendarComponent {
|
|
|
2906
3029
|
return isYearDisabled(startYear + YEARS_PER_PAGE, null, maxDate, this.dateAdapter);
|
|
2907
3030
|
}
|
|
2908
3031
|
}
|
|
2909
|
-
},
|
|
3032
|
+
}, /* @ts-ignore */
|
|
3033
|
+
...(ngDevMode ? [{ debugName: "nextDisabled" }] : /* istanbul ignore next */ []));
|
|
2910
3034
|
// ---------------------------------------------------------------------------
|
|
2911
3035
|
// Public methods (§33.4)
|
|
2912
3036
|
// ---------------------------------------------------------------------------
|
|
@@ -2965,21 +3089,58 @@ class CalendarComponent {
|
|
|
2965
3089
|
this._viewState.set(this.startView());
|
|
2966
3090
|
this._activeDate.set(this.startAt() ?? this.dateAdapter.today());
|
|
2967
3091
|
}
|
|
2968
|
-
/**
|
|
3092
|
+
/**
|
|
3093
|
+
* Re-runs validation against the current constraints and cell filters.
|
|
3094
|
+
*
|
|
3095
|
+
* Call this after mutating a constraint imperatively (rather than through an
|
|
3096
|
+
* input binding), so the bound control's errors reflect the new rules.
|
|
3097
|
+
*/
|
|
2969
3098
|
revalidate() {
|
|
2970
|
-
//
|
|
3099
|
+
// The comment this replaced claimed the validator did not exist yet. It
|
|
3100
|
+
// does — `validate()` emits the constraint codes — so the method was a
|
|
3101
|
+
// documented no-op sitting next to a working validator.
|
|
3102
|
+
this.validatorOnChange();
|
|
2971
3103
|
}
|
|
2972
|
-
/**
|
|
3104
|
+
/**
|
|
3105
|
+
* Opens the overlay.
|
|
3106
|
+
*
|
|
3107
|
+
* @deprecated Not implemented. `tw-calendar` is inline-only today; the overlay
|
|
3108
|
+
* is part of the phased v1 cutover. Use `tw-date-picker` or
|
|
3109
|
+
* `tw-date-range-picker` for an overlay-mounted calendar. Throws in dev mode.
|
|
3110
|
+
*/
|
|
2973
3111
|
open() {
|
|
2974
|
-
|
|
3112
|
+
this.warnOverlayUnsupported('open');
|
|
2975
3113
|
}
|
|
2976
|
-
/**
|
|
3114
|
+
/**
|
|
3115
|
+
* Closes the overlay.
|
|
3116
|
+
*
|
|
3117
|
+
* @deprecated Not implemented — see {@link open}. Throws in dev mode.
|
|
3118
|
+
*/
|
|
2977
3119
|
close() {
|
|
2978
|
-
|
|
3120
|
+
this.warnOverlayUnsupported('close');
|
|
2979
3121
|
}
|
|
2980
|
-
/**
|
|
3122
|
+
/**
|
|
3123
|
+
* Toggles the overlay.
|
|
3124
|
+
*
|
|
3125
|
+
* @deprecated Not implemented — see {@link open}. Throws in dev mode.
|
|
3126
|
+
*/
|
|
2981
3127
|
toggle() {
|
|
2982
|
-
|
|
3128
|
+
this.warnOverlayUnsupported('toggle');
|
|
3129
|
+
}
|
|
3130
|
+
/**
|
|
3131
|
+
* Fails loudly in development for the unimplemented overlay API.
|
|
3132
|
+
*
|
|
3133
|
+
* These three shipped as silent no-ops with JSDoc that described them as
|
|
3134
|
+
* working ("Closes the overlay."), which Compodoc rendered straight into the
|
|
3135
|
+
* published API table. A consumer calling `calendar.open()` got no overlay, no
|
|
3136
|
+
* error, and no clue. Dev-mode throw turns that into an immediate, explainable
|
|
3137
|
+
* failure while leaving production builds untouched.
|
|
3138
|
+
*/
|
|
3139
|
+
warnOverlayUnsupported(method) {
|
|
3140
|
+
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
3141
|
+
throw new Error(`[ngx-tw] CalendarComponent.${method}() is not implemented — tw-calendar is inline-only. ` +
|
|
3142
|
+
`Use tw-date-picker or tw-date-range-picker for an overlay-mounted calendar.`);
|
|
3143
|
+
}
|
|
2983
3144
|
}
|
|
2984
3145
|
/** Imperatively focuses the currently active cell. */
|
|
2985
3146
|
focusActiveCell() {
|
|
@@ -3138,20 +3299,25 @@ class CalendarComponent {
|
|
|
3138
3299
|
* else `null`. Used by every internal min-date reader so the shorthand input is
|
|
3139
3300
|
* transparent to the rest of the component.
|
|
3140
3301
|
*/
|
|
3141
|
-
resolvedMinDate = computed(() => this.minDate() ?? this.constraints()?.minDate ?? null,
|
|
3302
|
+
resolvedMinDate = computed(() => this.minDate() ?? this.constraints()?.minDate ?? null, /* @ts-ignore */
|
|
3303
|
+
...(ngDevMode ? [{ debugName: "resolvedMinDate" }] : /* istanbul ignore next */ []));
|
|
3142
3304
|
/** Resolved `maxDate` — individual input wins, then `constraints.maxDate`, else `null`. */
|
|
3143
|
-
resolvedMaxDate = computed(() => this.maxDate() ?? this.constraints()?.maxDate ?? null,
|
|
3305
|
+
resolvedMaxDate = computed(() => this.maxDate() ?? this.constraints()?.maxDate ?? null, /* @ts-ignore */
|
|
3306
|
+
...(ngDevMode ? [{ debugName: "resolvedMaxDate" }] : /* istanbul ignore next */ []));
|
|
3144
3307
|
/** Resolved `disabledDates` — individual input wins, then `constraints.disabledDates`, else `null`. */
|
|
3145
|
-
resolvedDisabledDates = computed(() => this.disabledDates() ?? this.constraints()?.disabledDates ?? null,
|
|
3308
|
+
resolvedDisabledDates = computed(() => this.disabledDates() ?? this.constraints()?.disabledDates ?? null, /* @ts-ignore */
|
|
3309
|
+
...(ngDevMode ? [{ debugName: "resolvedDisabledDates" }] : /* istanbul ignore next */ []));
|
|
3146
3310
|
/** Resolved `disabledDaysOfWeek` — individual input wins (when non-empty), then `constraints.disabledDaysOfWeek`, else `[]`. */
|
|
3147
3311
|
resolvedDisabledDaysOfWeek = computed(() => {
|
|
3148
3312
|
const own = this.disabledDaysOfWeek();
|
|
3149
3313
|
if (own.length > 0)
|
|
3150
3314
|
return own;
|
|
3151
3315
|
return this.constraints()?.disabledDaysOfWeek ?? [];
|
|
3152
|
-
},
|
|
3316
|
+
}, /* @ts-ignore */
|
|
3317
|
+
...(ngDevMode ? [{ debugName: "resolvedDisabledDaysOfWeek" }] : /* istanbul ignore next */ []));
|
|
3153
3318
|
/** Resolved `dateFilter` — individual input wins, then `constraints.dateFilter`, else `null`. */
|
|
3154
|
-
resolvedDateFilter = computed(() => this.dateFilter() ?? this.constraints()?.dateFilter ?? null,
|
|
3319
|
+
resolvedDateFilter = computed(() => this.dateFilter() ?? this.constraints()?.dateFilter ?? null, /* @ts-ignore */
|
|
3320
|
+
...(ngDevMode ? [{ debugName: "resolvedDateFilter" }] : /* istanbul ignore next */ []));
|
|
3155
3321
|
/** Aggregated, resolved constraint inputs — passed to the resolver and validator. */
|
|
3156
3322
|
resolvedConstraints = computed(() => ({
|
|
3157
3323
|
minDate: this.resolvedMinDate(),
|
|
@@ -3159,7 +3325,8 @@ class CalendarComponent {
|
|
|
3159
3325
|
disabledDates: this.resolvedDisabledDates(),
|
|
3160
3326
|
disabledDaysOfWeek: this.resolvedDisabledDaysOfWeek(),
|
|
3161
3327
|
dateFilter: this.resolvedDateFilter(),
|
|
3162
|
-
}),
|
|
3328
|
+
}), /* @ts-ignore */
|
|
3329
|
+
...(ngDevMode ? [{ debugName: "resolvedConstraints" }] : /* istanbul ignore next */ []));
|
|
3163
3330
|
/** @internal — month-view cell activation (drill-down to day). */
|
|
3164
3331
|
onMonthSelected(date) {
|
|
3165
3332
|
this._activeDate.set(date);
|
|
@@ -3213,9 +3380,11 @@ class CalendarComponent {
|
|
|
3213
3380
|
// 'require-clear' → no-op + invalid-flash on the clicked cell
|
|
3214
3381
|
// ---------------------------------------------------------------------------
|
|
3215
3382
|
/** @internal Last invalidly-clicked date, cleared after ~200ms — drives `data-state-invalid-flash`. */
|
|
3216
|
-
_invalidFlashDate = signal(null,
|
|
3383
|
+
_invalidFlashDate = signal(null, /* @ts-ignore */
|
|
3384
|
+
...(ngDevMode ? [{ debugName: "_invalidFlashDate" }] : /* istanbul ignore next */ []));
|
|
3217
3385
|
/** Public read of the transient invalid-flash anchor. Views consume this and tag the matching cell. */
|
|
3218
|
-
invalidFlashDate = computed(() => this._invalidFlashDate(),
|
|
3386
|
+
invalidFlashDate = computed(() => this._invalidFlashDate(), /* @ts-ignore */
|
|
3387
|
+
...(ngDevMode ? [{ debugName: "invalidFlashDate" }] : /* istanbul ignore next */ []));
|
|
3219
3388
|
commitRangeClick(date) {
|
|
3220
3389
|
const draft = this.internalDraftValue();
|
|
3221
3390
|
const state = this._selectionState();
|
|
@@ -3500,8 +3669,8 @@ class CalendarComponent {
|
|
|
3500
3669
|
formatDate(date) {
|
|
3501
3670
|
return this.dateAdapter.format(date, { dateTimeFormat: { dateStyle: 'full' } });
|
|
3502
3671
|
}
|
|
3503
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3504
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
3672
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3673
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: CalendarComponent, isStandalone: true, selector: "tw-calendar", inputs: { modeInput: { classPropertyName: "modeInput", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, valueInput: { classPropertyName: "valueInput", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, startAt: { classPropertyName: "startAt", publicName: "startAt", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, dateFilter: { classPropertyName: "dateFilter", publicName: "dateFilter", isSignal: true, isRequired: false, transformFunction: null }, disabledDates: { classPropertyName: "disabledDates", publicName: "disabledDates", isSignal: true, isRequired: false, transformFunction: null }, disabledDaysOfWeek: { classPropertyName: "disabledDaysOfWeek", publicName: "disabledDaysOfWeek", isSignal: true, isRequired: false, transformFunction: null }, constraints: { classPropertyName: "constraints", publicName: "constraints", isSignal: true, isRequired: false, transformFunction: null }, minRangeLength: { classPropertyName: "minRangeLength", publicName: "minRangeLength", isSignal: true, isRequired: false, transformFunction: null }, maxRangeLength: { classPropertyName: "maxRangeLength", publicName: "maxRangeLength", isSignal: true, isRequired: false, transformFunction: null }, maxSelections: { classPropertyName: "maxSelections", publicName: "maxSelections", isSignal: true, isRequired: false, transformFunction: null }, maxSelectionBehavior: { classPropertyName: "maxSelectionBehavior", publicName: "maxSelectionBehavior", isSignal: true, isRequired: false, transformFunction: null }, errorAriaDescribedBy: { classPropertyName: "errorAriaDescribedBy", publicName: "errorAriaDescribedBy", isSignal: true, isRequired: false, transformFunction: null }, rangeClickBehavior: { classPropertyName: "rangeClickBehavior", publicName: "rangeClickBehavior", isSignal: true, isRequired: false, transformFunction: null }, rangeBehavior: { classPropertyName: "rangeBehavior", publicName: "rangeBehavior", isSignal: true, isRequired: false, transformFunction: null }, dateClass: { classPropertyName: "dateClass", publicName: "dateClass", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, startView: { classPropertyName: "startView", publicName: "startView", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, monthColumns: { classPropertyName: "monthColumns", publicName: "monthColumns", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, resetBehavior: { classPropertyName: "resetBehavior", publicName: "resetBehavior", isSignal: true, isRequired: false, transformFunction: null }, cellTemplate: { classPropertyName: "cellTemplate", publicName: "cellTemplate", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, intl: { classPropertyName: "intl", publicName: "intl", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", selectionStart: "selectionStart", rangePreview: "rangePreview", selectionComplete: "selectionComplete", selectionRestart: "selectionRestart", selectionCleared: "selectionCleared", selectionLimitReached: "selectionLimitReached", presetChange: "presetChange", viewChange: "viewChange", activeDateChange: "activeDateChange", monthChange: "monthChange", yearChange: "yearChange", cellClick: "cellClick", cellHover: "cellHover", modeChange: "modeChange" }, host: { listeners: { "focusout": "onBlur($event)" }, properties: { "attr.aria-disabled": "effectiveDisabled() || null", "attr.aria-readonly": "effectiveReadonly() || null", "attr.aria-describedby": "errorAriaDescribedBy() || null" }, classAttribute: "block" }, providers: [
|
|
3505
3674
|
{
|
|
3506
3675
|
provide: NG_VALUE_ACCESSOR,
|
|
3507
3676
|
useExisting: forwardRef(() => CalendarComponent),
|
|
@@ -3620,7 +3789,7 @@ class CalendarComponent {
|
|
|
3620
3789
|
</div>
|
|
3621
3790
|
`, isInline: true, dependencies: [{ kind: "component", type: CalendarHeaderComponent, selector: "tw-calendar-header", inputs: ["periodLabel", "periodAriaLabel", "prevAriaLabel", "nextAriaLabel", "prevDisabled", "nextDisabled", "canSwitchView"], outputs: ["prevClicked", "nextClicked", "periodClicked"] }, { kind: "component", type: MonthViewComponent, selector: "tw-calendar-month-view", inputs: ["firstDayOfWeek", "gridIndex"] }, { kind: "component", type: YearViewComponent, selector: "tw-calendar-year-view" }, { kind: "component", type: YearsViewComponent, selector: "tw-calendar-years-view" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3622
3791
|
}
|
|
3623
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3792
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarComponent, decorators: [{
|
|
3624
3793
|
type: Component,
|
|
3625
3794
|
args: [{
|
|
3626
3795
|
selector: 'tw-calendar',
|
|
@@ -3758,7 +3927,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
3758
3927
|
</div>
|
|
3759
3928
|
`,
|
|
3760
3929
|
}]
|
|
3761
|
-
}], ctorParameters: () => [], propDecorators: { monthViews: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => MonthViewComponent), { isSignal: true }] }],
|
|
3930
|
+
}], ctorParameters: () => [], propDecorators: { monthViews: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => MonthViewComponent), { isSignal: true }] }], modeInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], valueInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], startAt: [{ type: i0.Input, args: [{ isSignal: true, alias: "startAt", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], dateFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateFilter", required: false }] }], disabledDates: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledDates", required: false }] }], disabledDaysOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledDaysOfWeek", required: false }] }], constraints: [{ type: i0.Input, args: [{ isSignal: true, alias: "constraints", required: false }] }], minRangeLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "minRangeLength", required: false }] }], maxRangeLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxRangeLength", required: false }] }], maxSelections: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxSelections", required: false }] }], maxSelectionBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxSelectionBehavior", required: false }] }], errorAriaDescribedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorAriaDescribedBy", required: false }] }], rangeClickBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "rangeClickBehavior", required: false }] }], rangeBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "rangeBehavior", required: false }] }], dateClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateClass", required: false }] }], bordered: [{ type: i0.Input, args: [{ isSignal: true, alias: "bordered", required: false }] }], startView: [{ type: i0.Input, args: [{ isSignal: true, alias: "startView", required: false }] }], firstDayOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstDayOfWeek", required: false }] }], monthColumns: [{ type: i0.Input, args: [{ isSignal: true, alias: "monthColumns", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], resetBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "resetBehavior", required: false }] }], cellTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "cellTemplate", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], intl: [{ type: i0.Input, args: [{ isSignal: true, alias: "intl", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], selectionStart: [{ type: i0.Output, args: ["selectionStart"] }], rangePreview: [{ type: i0.Output, args: ["rangePreview"] }], selectionComplete: [{ type: i0.Output, args: ["selectionComplete"] }], selectionRestart: [{ type: i0.Output, args: ["selectionRestart"] }], selectionCleared: [{ type: i0.Output, args: ["selectionCleared"] }], selectionLimitReached: [{ type: i0.Output, args: ["selectionLimitReached"] }], presetChange: [{ type: i0.Output, args: ["presetChange"] }], viewChange: [{ type: i0.Output, args: ["viewChange"] }], activeDateChange: [{ type: i0.Output, args: ["activeDateChange"] }], monthChange: [{ type: i0.Output, args: ["monthChange"] }], yearChange: [{ type: i0.Output, args: ["yearChange"] }], cellClick: [{ type: i0.Output, args: ["cellClick"] }], cellHover: [{ type: i0.Output, args: ["cellHover"] }], modeChange: [{ type: i0.Output, args: ["modeChange"] }] } });
|
|
3762
3931
|
|
|
3763
3932
|
function wireSignalFormsInputs(host, api) {
|
|
3764
3933
|
// Mirror Signal Forms flags onto the component. Effects run in the
|
|
@@ -3780,35 +3949,47 @@ function wireSignalFormsInputs(host, api) {
|
|
|
3780
3949
|
* template. When the mode attribute is omitted, consumers bind the component
|
|
3781
3950
|
* directly — the CVA path handles reactive / template-driven forms.
|
|
3782
3951
|
*/
|
|
3952
|
+
// Selector matches the existing CalendarComponent input `mode="single"`;
|
|
3953
|
+
// renaming to `twMode` would break the public API. The directive is scoped
|
|
3954
|
+
// to the `tw-calendar` element so the unprefixed attribute is safe.
|
|
3783
3955
|
class CalendarSingleDirective {
|
|
3784
3956
|
host = inject(CalendarComponent, { self: true });
|
|
3785
3957
|
/** Two-way value, forwarded to the hosting `CalendarComponent`. Signal Forms `Field` binds against this. */
|
|
3786
3958
|
value = this.host.value;
|
|
3787
3959
|
/** Mirrors the bound field's disabled flag. */
|
|
3788
|
-
disabled = input(false,
|
|
3960
|
+
disabled = input(false, /* @ts-ignore */
|
|
3961
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
3789
3962
|
/** Mirrors the bound field's readonly flag. */
|
|
3790
|
-
readonly = input(false,
|
|
3963
|
+
readonly = input(false, /* @ts-ignore */
|
|
3964
|
+
...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
|
|
3791
3965
|
/** Mirrors the bound field's required flag. */
|
|
3792
|
-
required = input(false,
|
|
3966
|
+
required = input(false, /* @ts-ignore */
|
|
3967
|
+
...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
|
|
3793
3968
|
/** Mirrors the bound field's invalid flag. */
|
|
3794
|
-
invalid = input(false,
|
|
3969
|
+
invalid = input(false, /* @ts-ignore */
|
|
3970
|
+
...(ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []));
|
|
3795
3971
|
/** Mirrors the bound field's hidden flag. */
|
|
3796
|
-
hidden = input(false,
|
|
3972
|
+
hidden = input(false, /* @ts-ignore */
|
|
3973
|
+
...(ngDevMode ? [{ debugName: "hidden" }] : /* istanbul ignore next */ []));
|
|
3797
3974
|
/** Mirrors the bound field's errors. */
|
|
3798
|
-
errors = input([],
|
|
3975
|
+
errors = input([], /* @ts-ignore */
|
|
3976
|
+
...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
|
|
3799
3977
|
/** Mirrors the bound field's disablement reasons. */
|
|
3800
|
-
disabledReasons = input([],
|
|
3978
|
+
disabledReasons = input([], /* @ts-ignore */
|
|
3979
|
+
...(ngDevMode ? [{ debugName: "disabledReasons" }] : /* istanbul ignore next */ []));
|
|
3801
3980
|
/** Two-way `touched` flag — drives and reflects the field's touched state. */
|
|
3802
|
-
touched = model(false,
|
|
3981
|
+
touched = model(false, /* @ts-ignore */
|
|
3982
|
+
...(ngDevMode ? [{ debugName: "touched" }] : /* istanbul ignore next */ []));
|
|
3803
3983
|
constructor() {
|
|
3804
3984
|
wireSignalFormsInputs(this.host, this);
|
|
3805
3985
|
}
|
|
3806
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3807
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
3986
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarSingleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
3987
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: CalendarSingleDirective, isStandalone: true, selector: "tw-calendar[mode=\"single\"]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, hidden: { classPropertyName: "hidden", publicName: "hidden", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, disabledReasons: { classPropertyName: "disabledReasons", publicName: "disabledReasons", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { touched: "touchedChange" }, exportAs: ["twCalendarSingle"], ngImport: i0 });
|
|
3808
3988
|
}
|
|
3809
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3989
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarSingleDirective, decorators: [{
|
|
3810
3990
|
type: Directive,
|
|
3811
3991
|
args: [{
|
|
3992
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
3812
3993
|
selector: 'tw-calendar[mode="single"]',
|
|
3813
3994
|
exportAs: 'twCalendarSingle',
|
|
3814
3995
|
}]
|
|
@@ -3817,35 +3998,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
3817
3998
|
* Signal Forms strict binding for `CalendarComponent` in `multiple` mode.
|
|
3818
3999
|
* Implements `FormValueControl<D[]>`.
|
|
3819
4000
|
*/
|
|
4001
|
+
// See note above on the single-mode directive — same rationale.
|
|
3820
4002
|
class CalendarMultipleDirective {
|
|
3821
4003
|
host = inject(CalendarComponent, { self: true });
|
|
3822
4004
|
/** Two-way value, forwarded to the hosting `CalendarComponent`. Signal Forms `Field` binds against this. */
|
|
3823
4005
|
value = this.host.value;
|
|
3824
4006
|
/** Mirrors the bound field's disabled flag. */
|
|
3825
|
-
disabled = input(false,
|
|
4007
|
+
disabled = input(false, /* @ts-ignore */
|
|
4008
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
3826
4009
|
/** Mirrors the bound field's readonly flag. */
|
|
3827
|
-
readonly = input(false,
|
|
4010
|
+
readonly = input(false, /* @ts-ignore */
|
|
4011
|
+
...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
|
|
3828
4012
|
/** Mirrors the bound field's required flag. */
|
|
3829
|
-
required = input(false,
|
|
4013
|
+
required = input(false, /* @ts-ignore */
|
|
4014
|
+
...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
|
|
3830
4015
|
/** Mirrors the bound field's invalid flag. */
|
|
3831
|
-
invalid = input(false,
|
|
4016
|
+
invalid = input(false, /* @ts-ignore */
|
|
4017
|
+
...(ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []));
|
|
3832
4018
|
/** Mirrors the bound field's hidden flag. */
|
|
3833
|
-
hidden = input(false,
|
|
4019
|
+
hidden = input(false, /* @ts-ignore */
|
|
4020
|
+
...(ngDevMode ? [{ debugName: "hidden" }] : /* istanbul ignore next */ []));
|
|
3834
4021
|
/** Mirrors the bound field's errors. */
|
|
3835
|
-
errors = input([],
|
|
4022
|
+
errors = input([], /* @ts-ignore */
|
|
4023
|
+
...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
|
|
3836
4024
|
/** Mirrors the bound field's disablement reasons. */
|
|
3837
|
-
disabledReasons = input([],
|
|
4025
|
+
disabledReasons = input([], /* @ts-ignore */
|
|
4026
|
+
...(ngDevMode ? [{ debugName: "disabledReasons" }] : /* istanbul ignore next */ []));
|
|
3838
4027
|
/** Two-way `touched` flag — drives and reflects the field's touched state. */
|
|
3839
|
-
touched = model(false,
|
|
4028
|
+
touched = model(false, /* @ts-ignore */
|
|
4029
|
+
...(ngDevMode ? [{ debugName: "touched" }] : /* istanbul ignore next */ []));
|
|
3840
4030
|
constructor() {
|
|
3841
4031
|
wireSignalFormsInputs(this.host, this);
|
|
3842
4032
|
}
|
|
3843
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3844
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
4033
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarMultipleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
4034
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: CalendarMultipleDirective, isStandalone: true, selector: "tw-calendar[mode=\"multiple\"]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, hidden: { classPropertyName: "hidden", publicName: "hidden", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, disabledReasons: { classPropertyName: "disabledReasons", publicName: "disabledReasons", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { touched: "touchedChange" }, exportAs: ["twCalendarMultiple"], ngImport: i0 });
|
|
3845
4035
|
}
|
|
3846
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4036
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarMultipleDirective, decorators: [{
|
|
3847
4037
|
type: Directive,
|
|
3848
4038
|
args: [{
|
|
4039
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
3849
4040
|
selector: 'tw-calendar[mode="multiple"]',
|
|
3850
4041
|
exportAs: 'twCalendarMultiple',
|
|
3851
4042
|
}]
|
|
@@ -3854,35 +4045,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
3854
4045
|
* Signal Forms strict binding for `CalendarComponent` in `range` mode.
|
|
3855
4046
|
* Implements `FormValueControl<{ start: D | null; end: D | null }>`.
|
|
3856
4047
|
*/
|
|
4048
|
+
// See note above on the single-mode directive — same rationale.
|
|
3857
4049
|
class CalendarRangeDirective {
|
|
3858
4050
|
host = inject(CalendarComponent, { self: true });
|
|
3859
4051
|
/** Two-way value, forwarded to the hosting `CalendarComponent`. Signal Forms `Field` binds against this. */
|
|
3860
4052
|
value = this.host.value;
|
|
3861
4053
|
/** Mirrors the bound field's disabled flag. */
|
|
3862
|
-
disabled = input(false,
|
|
4054
|
+
disabled = input(false, /* @ts-ignore */
|
|
4055
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
3863
4056
|
/** Mirrors the bound field's readonly flag. */
|
|
3864
|
-
readonly = input(false,
|
|
4057
|
+
readonly = input(false, /* @ts-ignore */
|
|
4058
|
+
...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
|
|
3865
4059
|
/** Mirrors the bound field's required flag. */
|
|
3866
|
-
required = input(false,
|
|
4060
|
+
required = input(false, /* @ts-ignore */
|
|
4061
|
+
...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
|
|
3867
4062
|
/** Mirrors the bound field's invalid flag. */
|
|
3868
|
-
invalid = input(false,
|
|
4063
|
+
invalid = input(false, /* @ts-ignore */
|
|
4064
|
+
...(ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []));
|
|
3869
4065
|
/** Mirrors the bound field's hidden flag. */
|
|
3870
|
-
hidden = input(false,
|
|
4066
|
+
hidden = input(false, /* @ts-ignore */
|
|
4067
|
+
...(ngDevMode ? [{ debugName: "hidden" }] : /* istanbul ignore next */ []));
|
|
3871
4068
|
/** Mirrors the bound field's errors. */
|
|
3872
|
-
errors = input([],
|
|
4069
|
+
errors = input([], /* @ts-ignore */
|
|
4070
|
+
...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
|
|
3873
4071
|
/** Mirrors the bound field's disablement reasons. */
|
|
3874
|
-
disabledReasons = input([],
|
|
4072
|
+
disabledReasons = input([], /* @ts-ignore */
|
|
4073
|
+
...(ngDevMode ? [{ debugName: "disabledReasons" }] : /* istanbul ignore next */ []));
|
|
3875
4074
|
/** Two-way `touched` flag — drives and reflects the field's touched state. */
|
|
3876
|
-
touched = model(false,
|
|
4075
|
+
touched = model(false, /* @ts-ignore */
|
|
4076
|
+
...(ngDevMode ? [{ debugName: "touched" }] : /* istanbul ignore next */ []));
|
|
3877
4077
|
constructor() {
|
|
3878
4078
|
wireSignalFormsInputs(this.host, this);
|
|
3879
4079
|
}
|
|
3880
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3881
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
4080
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarRangeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
4081
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: CalendarRangeDirective, isStandalone: true, selector: "tw-calendar[mode=\"range\"]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, hidden: { classPropertyName: "hidden", publicName: "hidden", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, disabledReasons: { classPropertyName: "disabledReasons", publicName: "disabledReasons", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { touched: "touchedChange" }, exportAs: ["twCalendarRange"], ngImport: i0 });
|
|
3882
4082
|
}
|
|
3883
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4083
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarRangeDirective, decorators: [{
|
|
3884
4084
|
type: Directive,
|
|
3885
4085
|
args: [{
|
|
4086
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
3886
4087
|
selector: 'tw-calendar[mode="range"]',
|
|
3887
4088
|
exportAs: 'twCalendarRange',
|
|
3888
4089
|
}]
|
|
@@ -3894,10 +4095,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
3894
4095
|
* with `<ng-content select="[twCalendarPresets]">`.
|
|
3895
4096
|
*/
|
|
3896
4097
|
class CalendarPresetsDirective {
|
|
3897
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3898
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
4098
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarPresetsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
4099
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: CalendarPresetsDirective, isStandalone: true, selector: "[twCalendarPresets]", host: { classAttribute: "flex flex-wrap items-center gap-1.5 px-2 pb-2" }, ngImport: i0 });
|
|
3899
4100
|
}
|
|
3900
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4101
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: CalendarPresetsDirective, decorators: [{
|
|
3901
4102
|
type: Directive,
|
|
3902
4103
|
args: [{
|
|
3903
4104
|
selector: '[twCalendarPresets]',
|
|
@@ -4221,7 +4422,6 @@ function warnUnresolvableLocaleOnce(locale) {
|
|
|
4221
4422
|
if (!isDevMode() || warnedLocales.has(locale))
|
|
4222
4423
|
return;
|
|
4223
4424
|
warnedLocales.add(locale);
|
|
4224
|
-
// eslint-disable-next-line no-console
|
|
4225
4425
|
console.warn(`[ngx-tw/calendar] Locale "${locale}" is unknown to Intl.Locale.getWeekInfo(); falling back to Monday (1) as the first day of week (§19.2).`);
|
|
4226
4426
|
}
|
|
4227
4427
|
/** `Intl`-driven `Date` adapter. Zero runtime dependencies. */
|
|
@@ -4422,10 +4622,10 @@ class NativeDateAdapter extends DateAdapter {
|
|
|
4422
4622
|
String(date.getDate()).padStart(2, '0'),
|
|
4423
4623
|
].join('-');
|
|
4424
4624
|
}
|
|
4425
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
4426
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
4625
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: NativeDateAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
4626
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: NativeDateAdapter });
|
|
4427
4627
|
}
|
|
4428
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
4628
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: NativeDateAdapter, decorators: [{
|
|
4429
4629
|
type: Injectable
|
|
4430
4630
|
}] });
|
|
4431
4631
|
/** Provides the default `Date`-based adapter. */
|