@cdevhub/ngx-tw 0.2.1 → 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 +24 -15
- 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 +408 -215
- 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 +144 -79
- 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 +34 -20
- 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 +195 -110
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +140 -73
- 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 +393 -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 +137 -71
- 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 +217 -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 +44 -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 +101 -51
- 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 +11 -7
- 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 +89 -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 -20
- 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-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-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-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,13 +1,13 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, ElementRef, signal, Directive, viewChild, viewChildren, computed, afterRenderEffect, ChangeDetectionStrategy, Component, input, booleanAttribute, model, output, ViewContainerRef, Injector, DestroyRef, linkedSignal, effect, untracked, afterNextRender, isDevMode, forwardRef } from '@angular/core';
|
|
3
|
-
import { NgForm, FormGroupDirective, Validators, NgControl, NG_VALIDATORS } from '@angular/forms';
|
|
3
|
+
import { NgForm, FormGroupDirective, Validators, NgControl, NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
4
|
import { Overlay } from '@angular/cdk/overlay';
|
|
5
5
|
import { FocusMonitor, LiveAnnouncer } from '@angular/cdk/a11y';
|
|
6
6
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
7
7
|
import { merge } from 'rxjs';
|
|
8
8
|
import { tv } from 'tailwind-variants';
|
|
9
9
|
import { PickerOverlayCoordinator, TW_ERROR_STATE_MATCHER, resolveSelectScrollStrategy, buildSelectLikePositions } from '@cdevhub/ngx-tw/core';
|
|
10
|
-
import { FormFieldControl,
|
|
10
|
+
import { FormFieldControl, TW_FORM_FIELD, TW_FORM_FIELD_CONTROL } from '@cdevhub/ngx-tw/form-field';
|
|
11
11
|
import { TwDateRange, CalendarComponent, provideRangeSelectionStrategy, DATE_ADAPTER, calendarValidator } from '@cdevhub/ngx-tw/calendar';
|
|
12
12
|
import { ButtonDirective } from '@cdevhub/ngx-tw/button';
|
|
13
13
|
import { TimePickerComponent } from '@cdevhub/ngx-tw/time-picker';
|
|
@@ -23,15 +23,16 @@ import { TimePickerComponent } from '@cdevhub/ngx-tw/time-picker';
|
|
|
23
23
|
class DateRangePresetOptionDirective {
|
|
24
24
|
elementRef = inject((ElementRef));
|
|
25
25
|
/** @internal Tab-index — `'0'` on the active option, `'-1'` on the rest. */
|
|
26
|
-
tabindex = signal('-1',
|
|
26
|
+
tabindex = signal('-1', /* @ts-ignore */
|
|
27
|
+
...(ngDevMode ? [{ debugName: "tabindex" }] : /* istanbul ignore next */ []));
|
|
27
28
|
/** @internal */
|
|
28
29
|
focus() {
|
|
29
30
|
this.elementRef.nativeElement.focus();
|
|
30
31
|
}
|
|
31
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
32
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
32
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: DateRangePresetOptionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
33
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: DateRangePresetOptionDirective, isStandalone: true, selector: "button[twDateRangePresetOption]", host: { properties: { "attr.tabindex": "tabindex()" } }, ngImport: i0 });
|
|
33
34
|
}
|
|
34
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: DateRangePresetOptionDirective, decorators: [{
|
|
35
36
|
type: Directive,
|
|
36
37
|
args: [{
|
|
37
38
|
selector: 'button[twDateRangePresetOption]',
|
|
@@ -50,123 +51,174 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
50
51
|
*/
|
|
51
52
|
class DateRangePickerOverlayComponent {
|
|
52
53
|
elementRef = inject((ElementRef));
|
|
53
|
-
calendarRef = viewChild('calendar',
|
|
54
|
-
|
|
54
|
+
calendarRef = viewChild('calendar', /* @ts-ignore */
|
|
55
|
+
...(ngDevMode ? [{ debugName: "calendarRef" }] : /* istanbul ignore next */ []));
|
|
56
|
+
presetOptions = viewChildren(DateRangePresetOptionDirective, /* @ts-ignore */
|
|
57
|
+
...(ngDevMode ? [{ debugName: "presetOptions" }] : /* istanbul ignore next */ []));
|
|
55
58
|
// ── Config signals set by the parent ──
|
|
56
59
|
/** @internal */
|
|
57
|
-
size = signal('md',
|
|
60
|
+
size = signal('md', /* @ts-ignore */
|
|
61
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
58
62
|
/** @internal */
|
|
59
|
-
color = signal('primary',
|
|
63
|
+
color = signal('primary', /* @ts-ignore */
|
|
64
|
+
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
60
65
|
/** @internal */
|
|
61
|
-
minDate = signal(null,
|
|
66
|
+
minDate = signal(null, /* @ts-ignore */
|
|
67
|
+
...(ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []));
|
|
62
68
|
/** @internal */
|
|
63
|
-
maxDate = signal(null,
|
|
69
|
+
maxDate = signal(null, /* @ts-ignore */
|
|
70
|
+
...(ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []));
|
|
64
71
|
/** @internal */
|
|
65
|
-
dateFilter = signal(null,
|
|
72
|
+
dateFilter = signal(null, /* @ts-ignore */
|
|
73
|
+
...(ngDevMode ? [{ debugName: "dateFilter" }] : /* istanbul ignore next */ []));
|
|
66
74
|
/** @internal */
|
|
67
|
-
startView = signal('day',
|
|
75
|
+
startView = signal('day', /* @ts-ignore */
|
|
76
|
+
...(ngDevMode ? [{ debugName: "startView" }] : /* istanbul ignore next */ []));
|
|
68
77
|
/** @internal */
|
|
69
|
-
numberOfMonths = signal(2,
|
|
78
|
+
numberOfMonths = signal(2, /* @ts-ignore */
|
|
79
|
+
...(ngDevMode ? [{ debugName: "numberOfMonths" }] : /* istanbul ignore next */ []));
|
|
70
80
|
/** @internal Current pending range shown as selected in the calendar. */
|
|
71
|
-
pendingRange = signal(null,
|
|
81
|
+
pendingRange = signal(null, /* @ts-ignore */
|
|
82
|
+
...(ngDevMode ? [{ debugName: "pendingRange" }] : /* istanbul ignore next */ []));
|
|
72
83
|
/** @internal */
|
|
73
|
-
currentView = signal('day',
|
|
84
|
+
currentView = signal('day', /* @ts-ignore */
|
|
85
|
+
...(ngDevMode ? [{ debugName: "currentView" }] : /* istanbul ignore next */ []));
|
|
74
86
|
/** @internal */
|
|
75
|
-
presets = signal([],
|
|
87
|
+
presets = signal([], /* @ts-ignore */
|
|
88
|
+
...(ngDevMode ? [{ debugName: "presets" }] : /* istanbul ignore next */ []));
|
|
76
89
|
/** @internal */
|
|
77
|
-
activePresetId = signal(undefined,
|
|
90
|
+
activePresetId = signal(undefined, /* @ts-ignore */
|
|
91
|
+
...(ngDevMode ? [{ debugName: "activePresetId" }] : /* istanbul ignore next */ []));
|
|
78
92
|
/** @internal */
|
|
79
|
-
showActions = signal(false,
|
|
93
|
+
showActions = signal(false, /* @ts-ignore */
|
|
94
|
+
...(ngDevMode ? [{ debugName: "showActions" }] : /* istanbul ignore next */ []));
|
|
80
95
|
/** @internal */
|
|
81
|
-
showTime = signal(false,
|
|
96
|
+
showTime = signal(false, /* @ts-ignore */
|
|
97
|
+
...(ngDevMode ? [{ debugName: "showTime" }] : /* istanbul ignore next */ []));
|
|
82
98
|
/** @internal */
|
|
83
|
-
timeFormat = signal('24h',
|
|
99
|
+
timeFormat = signal('24h', /* @ts-ignore */
|
|
100
|
+
...(ngDevMode ? [{ debugName: "timeFormat" }] : /* istanbul ignore next */ []));
|
|
84
101
|
/** @internal */
|
|
85
|
-
showSeconds = signal(false,
|
|
102
|
+
showSeconds = signal(false, /* @ts-ignore */
|
|
103
|
+
...(ngDevMode ? [{ debugName: "showSeconds" }] : /* istanbul ignore next */ []));
|
|
86
104
|
/** @internal */
|
|
87
|
-
hourStep = signal(1,
|
|
105
|
+
hourStep = signal(1, /* @ts-ignore */
|
|
106
|
+
...(ngDevMode ? [{ debugName: "hourStep" }] : /* istanbul ignore next */ []));
|
|
88
107
|
/** @internal */
|
|
89
|
-
minuteStep = signal(1,
|
|
108
|
+
minuteStep = signal(1, /* @ts-ignore */
|
|
109
|
+
...(ngDevMode ? [{ debugName: "minuteStep" }] : /* istanbul ignore next */ []));
|
|
90
110
|
/** @internal */
|
|
91
|
-
secondStep = signal(1,
|
|
111
|
+
secondStep = signal(1, /* @ts-ignore */
|
|
112
|
+
...(ngDevMode ? [{ debugName: "secondStep" }] : /* istanbul ignore next */ []));
|
|
92
113
|
/** @internal */
|
|
93
|
-
todayLabel = signal('Today',
|
|
114
|
+
todayLabel = signal('Today', /* @ts-ignore */
|
|
115
|
+
...(ngDevMode ? [{ debugName: "todayLabel" }] : /* istanbul ignore next */ []));
|
|
94
116
|
/** @internal */
|
|
95
|
-
clearLabel = signal('Clear',
|
|
117
|
+
clearLabel = signal('Clear', /* @ts-ignore */
|
|
118
|
+
...(ngDevMode ? [{ debugName: "clearLabel" }] : /* istanbul ignore next */ []));
|
|
96
119
|
/** @internal */
|
|
97
|
-
cancelLabel = signal('Cancel',
|
|
120
|
+
cancelLabel = signal('Cancel', /* @ts-ignore */
|
|
121
|
+
...(ngDevMode ? [{ debugName: "cancelLabel" }] : /* istanbul ignore next */ []));
|
|
98
122
|
/** @internal */
|
|
99
|
-
applyLabel = signal('Apply',
|
|
123
|
+
applyLabel = signal('Apply', /* @ts-ignore */
|
|
124
|
+
...(ngDevMode ? [{ debugName: "applyLabel" }] : /* istanbul ignore next */ []));
|
|
100
125
|
/** @internal */
|
|
101
|
-
rangeSeparator = signal(' – ',
|
|
126
|
+
rangeSeparator = signal(' – ', /* @ts-ignore */
|
|
127
|
+
...(ngDevMode ? [{ debugName: "rangeSeparator" }] : /* istanbul ignore next */ []));
|
|
102
128
|
/** @internal */
|
|
103
|
-
dialogId = signal('',
|
|
129
|
+
dialogId = signal('', /* @ts-ignore */
|
|
130
|
+
...(ngDevMode ? [{ debugName: "dialogId" }] : /* istanbul ignore next */ []));
|
|
104
131
|
/** @internal */
|
|
105
|
-
dialogAriaLabel = signal('Choose a date range',
|
|
132
|
+
dialogAriaLabel = signal('Choose a date range', /* @ts-ignore */
|
|
133
|
+
...(ngDevMode ? [{ debugName: "dialogAriaLabel" }] : /* istanbul ignore next */ []));
|
|
106
134
|
/** @internal */
|
|
107
|
-
panelClassValue = signal('',
|
|
135
|
+
panelClassValue = signal('', /* @ts-ignore */
|
|
136
|
+
...(ngDevMode ? [{ debugName: "panelClassValue" }] : /* istanbul ignore next */ []));
|
|
108
137
|
/** @internal */
|
|
109
|
-
leaving = signal(false,
|
|
138
|
+
leaving = signal(false, /* @ts-ignore */
|
|
139
|
+
...(ngDevMode ? [{ debugName: "leaving" }] : /* istanbul ignore next */ []));
|
|
110
140
|
// ── Forwarded calendar config ──
|
|
111
141
|
/** @internal */
|
|
112
|
-
minRangeLength = signal(null,
|
|
142
|
+
minRangeLength = signal(null, /* @ts-ignore */
|
|
143
|
+
...(ngDevMode ? [{ debugName: "minRangeLength" }] : /* istanbul ignore next */ []));
|
|
113
144
|
/** @internal */
|
|
114
|
-
maxRangeLength = signal(null,
|
|
145
|
+
maxRangeLength = signal(null, /* @ts-ignore */
|
|
146
|
+
...(ngDevMode ? [{ debugName: "maxRangeLength" }] : /* istanbul ignore next */ []));
|
|
115
147
|
/** @internal */
|
|
116
|
-
rangeBehavior = signal({},
|
|
148
|
+
rangeBehavior = signal({}, /* @ts-ignore */
|
|
149
|
+
...(ngDevMode ? [{ debugName: "rangeBehavior" }] : /* istanbul ignore next */ []));
|
|
117
150
|
/** @internal */
|
|
118
|
-
rangeClickBehavior = signal('restart',
|
|
151
|
+
rangeClickBehavior = signal('restart', /* @ts-ignore */
|
|
152
|
+
...(ngDevMode ? [{ debugName: "rangeClickBehavior" }] : /* istanbul ignore next */ []));
|
|
119
153
|
/** @internal */
|
|
120
|
-
firstDayOfWeek = signal(null,
|
|
154
|
+
firstDayOfWeek = signal(null, /* @ts-ignore */
|
|
155
|
+
...(ngDevMode ? [{ debugName: "firstDayOfWeek" }] : /* istanbul ignore next */ []));
|
|
121
156
|
/** @internal */
|
|
122
|
-
locale = signal(null,
|
|
157
|
+
locale = signal(null, /* @ts-ignore */
|
|
158
|
+
...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
|
|
123
159
|
/** @internal */
|
|
124
|
-
dateClass = signal(null,
|
|
160
|
+
dateClass = signal(null, /* @ts-ignore */
|
|
161
|
+
...(ngDevMode ? [{ debugName: "dateClass" }] : /* istanbul ignore next */ []));
|
|
125
162
|
/** @internal */
|
|
126
|
-
cellTemplate = signal(null,
|
|
163
|
+
cellTemplate = signal(null, /* @ts-ignore */
|
|
164
|
+
...(ngDevMode ? [{ debugName: "cellTemplate" }] : /* istanbul ignore next */ []));
|
|
127
165
|
// ── Callbacks set by the parent ──
|
|
128
166
|
/** @internal */
|
|
129
|
-
onCalendarSelect = signal(() => { },
|
|
167
|
+
onCalendarSelect = signal(() => { }, /* @ts-ignore */
|
|
168
|
+
...(ngDevMode ? [{ debugName: "onCalendarSelect" }] : /* istanbul ignore next */ []));
|
|
130
169
|
/** @internal */
|
|
131
|
-
onPresetSelect = signal(() => { },
|
|
170
|
+
onPresetSelect = signal(() => { }, /* @ts-ignore */
|
|
171
|
+
...(ngDevMode ? [{ debugName: "onPresetSelect" }] : /* istanbul ignore next */ []));
|
|
132
172
|
/** @internal */
|
|
133
|
-
onStartTimeChange = signal(() => { },
|
|
173
|
+
onStartTimeChange = signal(() => { }, /* @ts-ignore */
|
|
174
|
+
...(ngDevMode ? [{ debugName: "onStartTimeChange" }] : /* istanbul ignore next */ []));
|
|
134
175
|
/** @internal */
|
|
135
|
-
onEndTimeChange = signal(() => { },
|
|
176
|
+
onEndTimeChange = signal(() => { }, /* @ts-ignore */
|
|
177
|
+
...(ngDevMode ? [{ debugName: "onEndTimeChange" }] : /* istanbul ignore next */ []));
|
|
136
178
|
/** @internal */
|
|
137
|
-
onViewChange = signal(() => { },
|
|
179
|
+
onViewChange = signal(() => { }, /* @ts-ignore */
|
|
180
|
+
...(ngDevMode ? [{ debugName: "onViewChange" }] : /* istanbul ignore next */ []));
|
|
138
181
|
/** @internal */
|
|
139
|
-
onToday = signal(() => { },
|
|
182
|
+
onToday = signal(() => { }, /* @ts-ignore */
|
|
183
|
+
...(ngDevMode ? [{ debugName: "onToday" }] : /* istanbul ignore next */ []));
|
|
140
184
|
/** @internal */
|
|
141
|
-
onClear = signal(() => { },
|
|
185
|
+
onClear = signal(() => { }, /* @ts-ignore */
|
|
186
|
+
...(ngDevMode ? [{ debugName: "onClear" }] : /* istanbul ignore next */ []));
|
|
142
187
|
/** @internal */
|
|
143
|
-
onCancel = signal(() => { },
|
|
188
|
+
onCancel = signal(() => { }, /* @ts-ignore */
|
|
189
|
+
...(ngDevMode ? [{ debugName: "onCancel" }] : /* istanbul ignore next */ []));
|
|
144
190
|
/** @internal */
|
|
145
|
-
onApply = signal(() => { },
|
|
191
|
+
onApply = signal(() => { }, /* @ts-ignore */
|
|
192
|
+
...(ngDevMode ? [{ debugName: "onApply" }] : /* istanbul ignore next */ []));
|
|
146
193
|
// ── Derived ──
|
|
147
194
|
/** @internal */
|
|
148
195
|
panelClasses = computed(() => {
|
|
149
196
|
const base = 'block bg-surface-overlay border border-border rounded-lg shadow-md overflow-hidden flex max-w-[calc(100vw-16px)]';
|
|
150
197
|
const custom = this.panelClassValue();
|
|
151
198
|
return custom ? `${base} ${custom}` : base;
|
|
152
|
-
},
|
|
199
|
+
}, /* @ts-ignore */
|
|
200
|
+
...(ngDevMode ? [{ debugName: "panelClasses" }] : /* istanbul ignore next */ []));
|
|
153
201
|
/** @internal */
|
|
154
|
-
calendarAriaLabel = computed(() => this.numberOfMonths() === 2 ? 'Date range calendar (two months)' : 'Date range calendar',
|
|
202
|
+
calendarAriaLabel = computed(() => this.numberOfMonths() === 2 ? 'Date range calendar (two months)' : 'Date range calendar', /* @ts-ignore */
|
|
203
|
+
...(ngDevMode ? [{ debugName: "calendarAriaLabel" }] : /* istanbul ignore next */ []));
|
|
155
204
|
/** @internal The time row requires both endpoints to be set — each time-picker needs a concrete date. */
|
|
156
205
|
hasTimeablePending = computed(() => {
|
|
157
206
|
const v = this.pendingRange();
|
|
158
207
|
return v !== null && v.start !== null && v.end !== null;
|
|
159
|
-
},
|
|
208
|
+
}, /* @ts-ignore */
|
|
209
|
+
...(ngDevMode ? [{ debugName: "hasTimeablePending" }] : /* istanbul ignore next */ []));
|
|
160
210
|
/** @internal Adapts `TwDateRange<D> | null` to the `CalendarRangeValue<D>` shape the calendar's `value` input expects. */
|
|
161
211
|
pendingRangeAsRange = computed(() => {
|
|
162
212
|
const v = this.pendingRange();
|
|
163
213
|
return v ? { start: v.start, end: v.end } : { start: null, end: null };
|
|
164
|
-
},
|
|
214
|
+
}, /* @ts-ignore */
|
|
215
|
+
...(ngDevMode ? [{ debugName: "pendingRangeAsRange" }] : /* istanbul ignore next */ []));
|
|
165
216
|
/** @internal Seeds the calendar's active month on first attach so it anchors to the current value rather than today. */
|
|
166
217
|
initialStartAt = computed(() => {
|
|
167
218
|
const v = this.pendingRange();
|
|
168
219
|
return v?.start ?? null;
|
|
169
|
-
},
|
|
220
|
+
}, /* @ts-ignore */
|
|
221
|
+
...(ngDevMode ? [{ debugName: "initialStartAt" }] : /* istanbul ignore next */ []));
|
|
170
222
|
// ── Template handlers ──
|
|
171
223
|
/** @internal */
|
|
172
224
|
presetKey(index, preset) {
|
|
@@ -204,7 +256,8 @@ class DateRangePickerOverlayComponent {
|
|
|
204
256
|
}
|
|
205
257
|
// ── Preset listbox keyboard ──
|
|
206
258
|
/** @internal Roving tabindex pointer — index of the focusable preset option. */
|
|
207
|
-
activeOptionIndex = signal(0,
|
|
259
|
+
activeOptionIndex = signal(0, /* @ts-ignore */
|
|
260
|
+
...(ngDevMode ? [{ debugName: "activeOptionIndex" }] : /* istanbul ignore next */ []));
|
|
208
261
|
constructor() {
|
|
209
262
|
// Drive the directive's `tabindex` signal from `activeOptionIndex`. We
|
|
210
263
|
// use `afterRenderEffect` so the directive instances are already created
|
|
@@ -289,8 +342,8 @@ class DateRangePickerOverlayComponent {
|
|
|
289
342
|
getElement() {
|
|
290
343
|
return this.elementRef.nativeElement;
|
|
291
344
|
}
|
|
292
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
293
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
345
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: DateRangePickerOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
346
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: DateRangePickerOverlayComponent, isStandalone: true, selector: "tw-date-range-picker-overlay", host: { properties: { "class": "panelClasses()", "id": "dialogId()", "attr.role": "\"dialog\"", "attr.aria-modal": "\"true\"", "attr.aria-label": "dialogAriaLabel()", "animate.enter": "\"scale-in\"", "animate.leave": "leaving() ? \"scale-out\" : \"\"" } }, providers: [provideRangeSelectionStrategy()], viewQueries: [{ propertyName: "calendarRef", first: true, predicate: ["calendar"], descendants: true, isSignal: true }, { propertyName: "presetOptions", predicate: DateRangePresetOptionDirective, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
294
347
|
@if (presets().length) {
|
|
295
348
|
<div
|
|
296
349
|
class="flex flex-col gap-1 p-2 border-r border-border bg-surface-muted min-w-40"
|
|
@@ -408,9 +461,9 @@ class DateRangePickerOverlayComponent {
|
|
|
408
461
|
</div>
|
|
409
462
|
}
|
|
410
463
|
</div>
|
|
411
|
-
`, isInline: true, dependencies: [{ kind: "component", type: CalendarComponent, selector: "tw-calendar", inputs: ["mode", "value", "startAt", "minDate", "maxDate", "dateFilter", "disabledDates", "disabledDaysOfWeek", "constraints", "minRangeLength", "maxRangeLength", "maxSelections", "maxSelectionBehavior", "errorAriaDescribedBy", "rangeClickBehavior", "rangeBehavior", "dateClass", "bordered", "startView", "firstDayOfWeek", "monthColumns", "disabled", "readonly", "resetBehavior", "cellTemplate", "locale", "intl"], outputs: ["
|
|
464
|
+
`, isInline: true, dependencies: [{ kind: "component", type: CalendarComponent, selector: "tw-calendar", inputs: ["mode", "value", "startAt", "minDate", "maxDate", "dateFilter", "disabledDates", "disabledDaysOfWeek", "constraints", "minRangeLength", "maxRangeLength", "maxSelections", "maxSelectionBehavior", "errorAriaDescribedBy", "rangeClickBehavior", "rangeBehavior", "dateClass", "bordered", "startView", "firstDayOfWeek", "monthColumns", "disabled", "readonly", "resetBehavior", "cellTemplate", "locale", "intl"], outputs: ["valueChange", "selectionStart", "rangePreview", "selectionComplete", "selectionRestart", "selectionCleared", "selectionLimitReached", "presetChange", "viewChange", "activeDateChange", "monthChange", "yearChange", "cellClick", "cellHover", "modeChange"] }, { kind: "component", type: TimePickerComponent, selector: "tw-time-picker", inputs: ["id", "disabled", "required", "readonly", "size", "color", "variant", "format", "showSeconds", "hourStep", "minuteStep", "secondStep", "minTime", "maxTime", "referenceDate", "placeholder", "showSteppers", "showClear", "clearLabel", "errorStateMatcher", "aria-label", "aria-labelledby", "aria-describedby", "value"], outputs: ["valueChange", "timeInput", "timeChange"] }, { kind: "directive", type: ButtonDirective, selector: "[twButton]", inputs: ["variant", "color", "size", "disabled", "loading"], exportAs: ["twButton"] }, { kind: "directive", type: DateRangePresetOptionDirective, selector: "button[twDateRangePresetOption]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
412
465
|
}
|
|
413
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
466
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: DateRangePickerOverlayComponent, decorators: [{
|
|
414
467
|
type: Component,
|
|
415
468
|
args: [{
|
|
416
469
|
selector: 'tw-date-range-picker-overlay',
|
|
@@ -674,25 +727,35 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
674
727
|
/** Id on the trigger element. Auto-generated when not provided. Used by the form-field's `<label for>` attribute. */
|
|
675
728
|
idInput = input(undefined, { ...(ngDevMode ? { debugName: "idInput" } : /* istanbul ignore next */ {}), alias: 'id' });
|
|
676
729
|
/** Earliest selectable date for either endpoint. Presets and calendar cells earlier than this are rejected or disabled. Defaults to `null`. */
|
|
677
|
-
minDate = input(null,
|
|
730
|
+
minDate = input(null, /* @ts-ignore */
|
|
731
|
+
...(ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []));
|
|
678
732
|
/** Latest selectable date for either endpoint. Presets and calendar cells later than this are rejected or disabled. Defaults to `null`. */
|
|
679
|
-
maxDate = input(null,
|
|
733
|
+
maxDate = input(null, /* @ts-ignore */
|
|
734
|
+
...(ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []));
|
|
680
735
|
/** Per-date predicate — return `false` to disable. Applied in both calendars. Presets that fall on a filtered date are skipped. */
|
|
681
|
-
dateFilter = input(null,
|
|
736
|
+
dateFilter = input(null, /* @ts-ignore */
|
|
737
|
+
...(ngDevMode ? [{ debugName: "dateFilter" }] : /* istanbul ignore next */ []));
|
|
682
738
|
/** Which calendar view opens first — `'day'`, `'month'`, or `'year'`. Defaults to `'day'`. */
|
|
683
|
-
startView = input('day',
|
|
739
|
+
startView = input('day', /* @ts-ignore */
|
|
740
|
+
...(ngDevMode ? [{ debugName: "startView" }] : /* istanbul ignore next */ []));
|
|
684
741
|
/** Date the left calendar focuses on when opened with no value. Falls back to today. Ignored when a value is already set. */
|
|
685
|
-
startAt = input(null,
|
|
742
|
+
startAt = input(null, /* @ts-ignore */
|
|
743
|
+
...(ngDevMode ? [{ debugName: "startAt" }] : /* istanbul ignore next */ []));
|
|
686
744
|
/** Display format for each endpoint, passed to `DateAdapter.format()`. When `showTime` is true and this is left at the default, hour/minute (and optional seconds) are folded in automatically. */
|
|
687
|
-
format = input(DEFAULT_DISPLAY_FORMAT,
|
|
745
|
+
format = input(DEFAULT_DISPLAY_FORMAT, /* @ts-ignore */
|
|
746
|
+
...(ngDevMode ? [{ debugName: "format" }] : /* istanbul ignore next */ []));
|
|
688
747
|
/** Separator rendered between the two formatted endpoints in the trigger. Defaults to `" – "`. */
|
|
689
|
-
rangeSeparator = input(' – ',
|
|
748
|
+
rangeSeparator = input(' – ', /* @ts-ignore */
|
|
749
|
+
...(ngDevMode ? [{ debugName: "rangeSeparator" }] : /* istanbul ignore next */ []));
|
|
690
750
|
/** Placeholder text shown in the trigger for an empty `start` endpoint. */
|
|
691
|
-
emptyStartLabel = input('Start date',
|
|
751
|
+
emptyStartLabel = input('Start date', /* @ts-ignore */
|
|
752
|
+
...(ngDevMode ? [{ debugName: "emptyStartLabel" }] : /* istanbul ignore next */ []));
|
|
692
753
|
/** Placeholder text shown in the trigger for an empty `end` endpoint. */
|
|
693
|
-
emptyEndLabel = input('End date',
|
|
754
|
+
emptyEndLabel = input('End date', /* @ts-ignore */
|
|
755
|
+
...(ngDevMode ? [{ debugName: "emptyEndLabel" }] : /* istanbul ignore next */ []));
|
|
694
756
|
/** When set, overrides the composed `${emptyStartLabel}${rangeSeparator}${emptyEndLabel}` placeholder with a single string. */
|
|
695
|
-
placeholder = input(undefined,
|
|
757
|
+
placeholder = input(undefined, /* @ts-ignore */
|
|
758
|
+
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
696
759
|
/** When true, the trigger cannot open the overlay and `aria-disabled="true"` is set. Defaults to `false`. */
|
|
697
760
|
disabledInput = input(false, { ...(ngDevMode ? { debugName: "disabledInput" } : /* istanbul ignore next */ {}), alias: 'disabled',
|
|
698
761
|
transform: booleanAttribute });
|
|
@@ -700,70 +763,100 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
700
763
|
requiredInput = input(false, { ...(ngDevMode ? { debugName: "requiredInput" } : /* istanbul ignore next */ {}), alias: 'required',
|
|
701
764
|
transform: booleanAttribute });
|
|
702
765
|
/** Trigger padding, font size, and calendar cell density. Uses the shared `TwSize` scale. Defaults to `'md'`. */
|
|
703
|
-
size = input('md',
|
|
766
|
+
size = input('md', /* @ts-ignore */
|
|
767
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
704
768
|
/** Semantic color for focused border, calendar range fill, and preset active state. Defaults to `'primary'`. */
|
|
705
|
-
color = input('primary',
|
|
769
|
+
color = input('primary', /* @ts-ignore */
|
|
770
|
+
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
706
771
|
/** Visual style of the trigger. `'default'` draws its own border; `'naked'` strips chrome so a parent (e.g. `tw-form-field`) owns it. Auto-resolves to `'naked'` when inside a form-field; otherwise `'default'`. */
|
|
707
|
-
variant = input(undefined,
|
|
772
|
+
variant = input(undefined, /* @ts-ignore */
|
|
773
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
708
774
|
/** How many months the overlay shows side-by-side. `2` is the standard range-picker layout; use `1` for compact contexts. Defaults to `2`. */
|
|
709
|
-
numberOfMonths = input(2,
|
|
775
|
+
numberOfMonths = input(2, /* @ts-ignore */
|
|
776
|
+
...(ngDevMode ? [{ debugName: "numberOfMonths" }] : /* istanbul ignore next */ []));
|
|
710
777
|
/** Optional quick-select presets rendered as a vertical list before the calendars. Each preset provides a label and a factory returning a `TwDateRange<D>`. An empty array hides the preset panel. */
|
|
711
|
-
presets = input([],
|
|
778
|
+
presets = input([], /* @ts-ignore */
|
|
779
|
+
...(ngDevMode ? [{ debugName: "presets" }] : /* istanbul ignore next */ []));
|
|
712
780
|
/** Whether to show a clear-button affordance inside the trigger when a value is set. Defaults to `true`. */
|
|
713
781
|
// TRUE-default: a picker without a clear affordance forces consumers to wire one — most form pickers expect the inline clear, matching `<tw-input>`'s clear button.
|
|
714
|
-
showClear = input(true,
|
|
782
|
+
showClear = input(true, /* @ts-ignore */
|
|
783
|
+
...(ngDevMode ? [{ debugName: "showClear" }] : /* istanbul ignore next */ []));
|
|
715
784
|
/** Minimum range length in days, inclusive. Commits shorter than this are rejected and surface `calendarRangeTooShort` on the bound `NgControl`. `null` = no minimum. Defaults to `null`. */
|
|
716
|
-
minRangeLength = input(null,
|
|
785
|
+
minRangeLength = input(null, /* @ts-ignore */
|
|
786
|
+
...(ngDevMode ? [{ debugName: "minRangeLength" }] : /* istanbul ignore next */ []));
|
|
717
787
|
/** Maximum range length in days, inclusive. Commits longer than this are rejected and surface `calendarRangeTooLong` on the bound `NgControl`. `null` = no maximum. Defaults to `null`. */
|
|
718
|
-
maxRangeLength = input(null,
|
|
788
|
+
maxRangeLength = input(null, /* @ts-ignore */
|
|
789
|
+
...(ngDevMode ? [{ debugName: "maxRangeLength" }] : /* istanbul ignore next */ []));
|
|
719
790
|
/**
|
|
720
791
|
* Range-mode behavior knobs forwarded to the embedded calendar. Accepts a
|
|
721
792
|
* partial config — unset fields use the documented defaults on
|
|
722
793
|
* `RangeBehaviorConfig`. Defaults: `{ allowSingleDayRange: true, persistPartialRange: true, allowBackwardRange: false, disableRangesCrossingDisabledDates: false }`.
|
|
723
794
|
*/
|
|
724
|
-
rangeBehavior = input({},
|
|
795
|
+
rangeBehavior = input({}, /* @ts-ignore */
|
|
796
|
+
...(ngDevMode ? [{ debugName: "rangeBehavior" }] : /* istanbul ignore next */ []));
|
|
725
797
|
/** How the embedded calendar reacts to a click after a complete range. `'restart'` (default) starts a fresh draft; `'nearest-edge'` moves the nearer endpoint; `'require-clear'` blocks until cleared. */
|
|
726
|
-
rangeClickBehavior = input('restart',
|
|
798
|
+
rangeClickBehavior = input('restart', /* @ts-ignore */
|
|
799
|
+
...(ngDevMode ? [{ debugName: "rangeClickBehavior" }] : /* istanbul ignore next */ []));
|
|
727
800
|
/** Override first day of week (0=Sun, 1=Mon) on the embedded calendar. Falls back to the adapter's default. */
|
|
728
|
-
firstDayOfWeek = input(null,
|
|
801
|
+
firstDayOfWeek = input(null, /* @ts-ignore */
|
|
802
|
+
...(ngDevMode ? [{ debugName: "firstDayOfWeek" }] : /* istanbul ignore next */ []));
|
|
729
803
|
/** Per-instance locale override. Forwarded to the embedded calendar and the underlying `DateAdapter` so the trigger display tracks the picker's locale. Falls back to Angular `LOCALE_ID` when `null`. */
|
|
730
|
-
locale = input(null,
|
|
804
|
+
locale = input(null, /* @ts-ignore */
|
|
805
|
+
...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
|
|
731
806
|
/** Function producing per-cell CSS classes on the embedded calendar. */
|
|
732
|
-
dateClass = input(null,
|
|
807
|
+
dateClass = input(null, /* @ts-ignore */
|
|
808
|
+
...(ngDevMode ? [{ debugName: "dateClass" }] : /* istanbul ignore next */ []));
|
|
733
809
|
/** Optional cell-content template, forwarded to the embedded calendar. Use to customize cell visuals beyond `dateClass`. */
|
|
734
|
-
cellTemplate = input(null,
|
|
810
|
+
cellTemplate = input(null, /* @ts-ignore */
|
|
811
|
+
...(ngDevMode ? [{ debugName: "cellTemplate" }] : /* istanbul ignore next */ []));
|
|
735
812
|
/** When true, renders a `Today / Clear / Cancel / Apply` action bar at the bottom of the overlay. The calendar commits on the second click by default — turn this on for touch-heavy contexts. Defaults to `false`. */
|
|
736
|
-
showActions = input(false,
|
|
813
|
+
showActions = input(false, /* @ts-ignore */
|
|
814
|
+
...(ngDevMode ? [{ debugName: "showActions" }] : /* istanbul ignore next */ []));
|
|
737
815
|
/** When true, the overlay renders two `<tw-time-picker>` instances so users can pick times for the start and end of the range. Defaults to `false`. */
|
|
738
|
-
showTime = input(false,
|
|
816
|
+
showTime = input(false, /* @ts-ignore */
|
|
817
|
+
...(ngDevMode ? [{ debugName: "showTime" }] : /* istanbul ignore next */ []));
|
|
739
818
|
/** Format of the embedded time-pickers. `'24h'` renders 00–23; `'12h'` adds an AM/PM toggle. Defaults to `'24h'`. */
|
|
740
|
-
timeFormat = input('24h',
|
|
819
|
+
timeFormat = input('24h', /* @ts-ignore */
|
|
820
|
+
...(ngDevMode ? [{ debugName: "timeFormat" }] : /* istanbul ignore next */ []));
|
|
741
821
|
/** Whether the embedded time-pickers expose a seconds field. Defaults to `false`. */
|
|
742
|
-
showSeconds = input(false,
|
|
822
|
+
showSeconds = input(false, /* @ts-ignore */
|
|
823
|
+
...(ngDevMode ? [{ debugName: "showSeconds" }] : /* istanbul ignore next */ []));
|
|
743
824
|
/** Step for the embedded time-pickers' hour fields. Defaults to `1`. */
|
|
744
|
-
hourStep = input(1,
|
|
825
|
+
hourStep = input(1, /* @ts-ignore */
|
|
826
|
+
...(ngDevMode ? [{ debugName: "hourStep" }] : /* istanbul ignore next */ []));
|
|
745
827
|
/** Step for the embedded time-pickers' minute fields. Defaults to `1`. */
|
|
746
|
-
minuteStep = input(1,
|
|
828
|
+
minuteStep = input(1, /* @ts-ignore */
|
|
829
|
+
...(ngDevMode ? [{ debugName: "minuteStep" }] : /* istanbul ignore next */ []));
|
|
747
830
|
/** Step for the embedded time-pickers' second fields. Defaults to `1`. */
|
|
748
|
-
secondStep = input(1,
|
|
831
|
+
secondStep = input(1, /* @ts-ignore */
|
|
832
|
+
...(ngDevMode ? [{ debugName: "secondStep" }] : /* istanbul ignore next */ []));
|
|
749
833
|
/** Label for the `Today` action in the overlay's action bar. */
|
|
750
|
-
todayLabel = input('Today',
|
|
834
|
+
todayLabel = input('Today', /* @ts-ignore */
|
|
835
|
+
...(ngDevMode ? [{ debugName: "todayLabel" }] : /* istanbul ignore next */ []));
|
|
751
836
|
/** Label for the `Clear` action in the overlay's action bar. */
|
|
752
|
-
clearLabel = input('Clear',
|
|
837
|
+
clearLabel = input('Clear', /* @ts-ignore */
|
|
838
|
+
...(ngDevMode ? [{ debugName: "clearLabel" }] : /* istanbul ignore next */ []));
|
|
753
839
|
/** Label for the `Cancel` action in the overlay's action bar. */
|
|
754
|
-
cancelLabel = input('Cancel',
|
|
840
|
+
cancelLabel = input('Cancel', /* @ts-ignore */
|
|
841
|
+
...(ngDevMode ? [{ debugName: "cancelLabel" }] : /* istanbul ignore next */ []));
|
|
755
842
|
/** Label for the `Apply` action in the overlay's action bar. */
|
|
756
|
-
applyLabel = input('Apply',
|
|
843
|
+
applyLabel = input('Apply', /* @ts-ignore */
|
|
844
|
+
...(ngDevMode ? [{ debugName: "applyLabel" }] : /* istanbul ignore next */ []));
|
|
757
845
|
/** Extra class(es) applied to the overlay panel element. `twMerge` resolves conflicts with internal classes. */
|
|
758
|
-
panelClass = input('',
|
|
846
|
+
panelClass = input('', /* @ts-ignore */
|
|
847
|
+
...(ngDevMode ? [{ debugName: "panelClass" }] : /* istanbul ignore next */ []));
|
|
759
848
|
/** CDK scroll strategy for the overlay. Defaults to `'reposition'`. */
|
|
760
|
-
scrollStrategy = input('reposition',
|
|
849
|
+
scrollStrategy = input('reposition', /* @ts-ignore */
|
|
850
|
+
...(ngDevMode ? [{ debugName: "scrollStrategy" }] : /* istanbul ignore next */ []));
|
|
761
851
|
/** Pixel distance between trigger and overlay. Defaults to `4`. */
|
|
762
|
-
offset = input(4,
|
|
852
|
+
offset = input(4, /* @ts-ignore */
|
|
853
|
+
...(ngDevMode ? [{ debugName: "offset" }] : /* istanbul ignore next */ []));
|
|
763
854
|
/** Accessible label for the clear button. Defaults to `'Clear date range'`. */
|
|
764
|
-
clearAriaLabel = input('Clear date range',
|
|
855
|
+
clearAriaLabel = input('Clear date range', /* @ts-ignore */
|
|
856
|
+
...(ngDevMode ? [{ debugName: "clearAriaLabel" }] : /* istanbul ignore next */ []));
|
|
765
857
|
/** Per-instance override of the `ErrorStateMatcher`. When omitted, uses the injected `TW_ERROR_STATE_MATCHER`. */
|
|
766
|
-
errorStateMatcher = input(undefined,
|
|
858
|
+
errorStateMatcher = input(undefined, /* @ts-ignore */
|
|
859
|
+
...(ngDevMode ? [{ debugName: "errorStateMatcher" }] : /* istanbul ignore next */ []));
|
|
767
860
|
/** Accessible name for the trigger. Required when no visible label is supplied via `tw-form-field` or an external `aria-labelledby`. Alias: `aria-label`. */
|
|
768
861
|
ariaLabel = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
|
|
769
862
|
/** ID of an external element that labels the trigger. Alias: `aria-labelledby`. */
|
|
@@ -772,9 +865,11 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
772
865
|
userAriaDescribedByInput = input(undefined, { ...(ngDevMode ? { debugName: "userAriaDescribedByInput" } : /* istanbul ignore next */ {}), alias: 'aria-describedby' });
|
|
773
866
|
// ── Models (two-way) ──
|
|
774
867
|
/** Two-way bound selected range. `null` when no selection. Setting programmatically updates the trigger display and the calendar selection; it does NOT trigger `onChange`. */
|
|
775
|
-
value = model(null,
|
|
868
|
+
value = model(null, /* @ts-ignore */
|
|
869
|
+
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
776
870
|
/** Two-way bound open state of the overlay. Setting to `true` opens; setting to `false` closes. */
|
|
777
|
-
open = model(false,
|
|
871
|
+
open = model(false, /* @ts-ignore */
|
|
872
|
+
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
778
873
|
// ── Outputs ──
|
|
779
874
|
/** Fires after the overlay's enter animation completes. Payload is the trigger element. */
|
|
780
875
|
opened = output();
|
|
@@ -794,7 +889,7 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
794
889
|
viewContainerRef = inject(ViewContainerRef);
|
|
795
890
|
injector = inject(Injector);
|
|
796
891
|
destroyRef = inject(DestroyRef);
|
|
797
|
-
formField = inject(
|
|
892
|
+
formField = inject(TW_FORM_FIELD, { optional: true });
|
|
798
893
|
// Lazy NgControl lookup avoids the construction-time cycle with NG_VALIDATORS
|
|
799
894
|
// (the host registers itself as a validator via `useExisting`, and NgModel's
|
|
800
895
|
// constructor pulls the validator set — eager `inject(NgControl, {self})`
|
|
@@ -804,7 +899,8 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
804
899
|
parentFormGroup = inject(FormGroupDirective, { optional: true });
|
|
805
900
|
defaultMatcher = inject(TW_ERROR_STATE_MATCHER);
|
|
806
901
|
// ── View refs ──
|
|
807
|
-
triggerRef = viewChild.required('trigger'
|
|
902
|
+
triggerRef = viewChild.required('trigger', /* @ts-ignore */
|
|
903
|
+
...(ngDevMode ? [{ debugName: "triggerRef" }] : /* istanbul ignore next */ []));
|
|
808
904
|
// ── Identity ──
|
|
809
905
|
uid = nextDateRangePickerId++;
|
|
810
906
|
/** @internal */
|
|
@@ -813,24 +909,37 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
813
909
|
dialogId = `${this.hostId}-dialog`;
|
|
814
910
|
// ── Internal state ──
|
|
815
911
|
/** @internal Decouples programmatic writes from user commits. */
|
|
816
|
-
internalValue = linkedSignal(() => this.value(),
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
/** @internal */
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
912
|
+
internalValue = linkedSignal(() => this.value(), /* @ts-ignore */
|
|
913
|
+
...(ngDevMode ? [{ debugName: "internalValue" }] : /* istanbul ignore next */ []));
|
|
914
|
+
/** @internal */
|
|
915
|
+
parseError = signal(false, /* @ts-ignore */
|
|
916
|
+
...(ngDevMode ? [{ debugName: "parseError" }] : /* istanbul ignore next */ []));
|
|
917
|
+
/** @internal */
|
|
918
|
+
rangeError = signal(false, /* @ts-ignore */
|
|
919
|
+
...(ngDevMode ? [{ debugName: "rangeError" }] : /* istanbul ignore next */ []));
|
|
920
|
+
/** @internal */
|
|
921
|
+
focusedSignal = signal(false, /* @ts-ignore */
|
|
922
|
+
...(ngDevMode ? [{ debugName: "focusedSignal" }] : /* istanbul ignore next */ []));
|
|
923
|
+
cvaDisabled = signal(false, /* @ts-ignore */
|
|
924
|
+
...(ngDevMode ? [{ debugName: "cvaDisabled" }] : /* istanbul ignore next */ []));
|
|
925
|
+
describedByIdsSignal = signal([], /* @ts-ignore */
|
|
926
|
+
...(ngDevMode ? [{ debugName: "describedByIdsSignal" }] : /* istanbul ignore next */ []));
|
|
927
|
+
closingSignal = signal(false, /* @ts-ignore */
|
|
928
|
+
...(ngDevMode ? [{ debugName: "closingSignal" }] : /* istanbul ignore next */ []));
|
|
929
|
+
lastValueBeforeOpen = signal(null, /* @ts-ignore */
|
|
930
|
+
...(ngDevMode ? [{ debugName: "lastValueBeforeOpen" }] : /* istanbul ignore next */ []));
|
|
931
|
+
pendingRange = signal(null, /* @ts-ignore */
|
|
932
|
+
...(ngDevMode ? [{ debugName: "pendingRange" }] : /* istanbul ignore next */ []));
|
|
933
|
+
currentView = signal('day', /* @ts-ignore */
|
|
934
|
+
...(ngDevMode ? [{ debugName: "currentView" }] : /* istanbul ignore next */ []));
|
|
935
|
+
_ngControlRev = signal(0, /* @ts-ignore */
|
|
936
|
+
...(ngDevMode ? [{ debugName: "_ngControlRev" }] : /* istanbul ignore next */ []));
|
|
937
|
+
_formSubmitRev = signal(0, /* @ts-ignore */
|
|
938
|
+
...(ngDevMode ? [{ debugName: "_formSubmitRev" }] : /* istanbul ignore next */ []));
|
|
831
939
|
onChange = () => { };
|
|
832
940
|
onTouched = () => { };
|
|
833
|
-
overlayInstanceSignal = signal(null,
|
|
941
|
+
overlayInstanceSignal = signal(null, /* @ts-ignore */
|
|
942
|
+
...(ngDevMode ? [{ debugName: "overlayInstanceSignal" }] : /* istanbul ignore next */ []));
|
|
834
943
|
get overlayInstance() {
|
|
835
944
|
return this.overlayInstanceSignal();
|
|
836
945
|
}
|
|
@@ -839,14 +948,17 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
839
948
|
isDisabled = computed(() => {
|
|
840
949
|
this._ngControlRev();
|
|
841
950
|
return this.disabledInput() || this.cvaDisabled() || !!this.ngControl?.disabled;
|
|
842
|
-
},
|
|
951
|
+
}, /* @ts-ignore */
|
|
952
|
+
...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
|
|
843
953
|
/** @internal Effective variant — auto-naked when wrapped in tw-form-field. */
|
|
844
|
-
resolvedVariant = computed(() => this.variant() ?? (this.formField ? 'naked' : 'default'),
|
|
954
|
+
resolvedVariant = computed(() => this.variant() ?? (this.formField ? 'naked' : 'default'), /* @ts-ignore */
|
|
955
|
+
...(ngDevMode ? [{ debugName: "resolvedVariant" }] : /* istanbul ignore next */ []));
|
|
845
956
|
/** @internal */
|
|
846
957
|
isEmpty = computed(() => {
|
|
847
958
|
const v = this.internalValue();
|
|
848
959
|
return v === null || (v.start === null && v.end === null);
|
|
849
|
-
},
|
|
960
|
+
}, /* @ts-ignore */
|
|
961
|
+
...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
|
|
850
962
|
/** @internal Effective display format — folds hour/minute (and optional seconds) into the default when `showTime` is on and the user hasn't overridden `format`. */
|
|
851
963
|
effectiveFormat = computed(() => {
|
|
852
964
|
const fmt = this.format();
|
|
@@ -864,7 +976,8 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
864
976
|
if (this.showSeconds())
|
|
865
977
|
base.second = '2-digit';
|
|
866
978
|
return { dateTimeFormat: base };
|
|
867
|
-
},
|
|
979
|
+
}, /* @ts-ignore */
|
|
980
|
+
...(ngDevMode ? [{ debugName: "effectiveFormat" }] : /* istanbul ignore next */ []));
|
|
868
981
|
/** @internal */
|
|
869
982
|
startDisplay = computed(() => {
|
|
870
983
|
const v = this.internalValue();
|
|
@@ -873,7 +986,8 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
873
986
|
return v.start !== null
|
|
874
987
|
? this.adapter.format(v.start, this.effectiveFormat())
|
|
875
988
|
: this.emptyStartLabel();
|
|
876
|
-
},
|
|
989
|
+
}, /* @ts-ignore */
|
|
990
|
+
...(ngDevMode ? [{ debugName: "startDisplay" }] : /* istanbul ignore next */ []));
|
|
877
991
|
/** @internal */
|
|
878
992
|
endDisplay = computed(() => {
|
|
879
993
|
const v = this.internalValue();
|
|
@@ -882,14 +996,16 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
882
996
|
return v.end !== null
|
|
883
997
|
? this.adapter.format(v.end, this.effectiveFormat())
|
|
884
998
|
: this.emptyEndLabel();
|
|
885
|
-
},
|
|
999
|
+
}, /* @ts-ignore */
|
|
1000
|
+
...(ngDevMode ? [{ debugName: "endDisplay" }] : /* istanbul ignore next */ []));
|
|
886
1001
|
/** @internal */
|
|
887
1002
|
placeholderDisplay = computed(() => {
|
|
888
1003
|
const custom = this.placeholder();
|
|
889
1004
|
if (custom)
|
|
890
1005
|
return custom;
|
|
891
1006
|
return `${this.emptyStartLabel()}${this.rangeSeparator()}${this.emptyEndLabel()}`;
|
|
892
|
-
},
|
|
1007
|
+
}, /* @ts-ignore */
|
|
1008
|
+
...(ngDevMode ? [{ debugName: "placeholderDisplay" }] : /* istanbul ignore next */ []));
|
|
893
1009
|
/** @internal Accessible name composed from explicit aria-label plus the current range. */
|
|
894
1010
|
triggerAccessibleName = computed(() => {
|
|
895
1011
|
const label = this.ariaLabel();
|
|
@@ -904,7 +1020,8 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
904
1020
|
if (label)
|
|
905
1021
|
return label;
|
|
906
1022
|
return undefined;
|
|
907
|
-
},
|
|
1023
|
+
}, /* @ts-ignore */
|
|
1024
|
+
...(ngDevMode ? [{ debugName: "triggerAccessibleName" }] : /* istanbul ignore next */ []));
|
|
908
1025
|
/** @internal */
|
|
909
1026
|
activePresetId = computed(() => {
|
|
910
1027
|
const v = this.internalValue();
|
|
@@ -924,7 +1041,8 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
924
1041
|
return preset.id;
|
|
925
1042
|
}
|
|
926
1043
|
return undefined;
|
|
927
|
-
},
|
|
1044
|
+
}, /* @ts-ignore */
|
|
1045
|
+
...(ngDevMode ? [{ debugName: "activePresetId" }] : /* istanbul ignore next */ []));
|
|
928
1046
|
/** @internal */
|
|
929
1047
|
describedBy = computed(() => {
|
|
930
1048
|
const extra = this.describedByIdsSignal();
|
|
@@ -937,7 +1055,8 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
937
1055
|
}
|
|
938
1056
|
}
|
|
939
1057
|
return merged.length ? merged.join(' ') : '';
|
|
940
|
-
},
|
|
1058
|
+
}, /* @ts-ignore */
|
|
1059
|
+
...(ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []));
|
|
941
1060
|
// ── tv() output ──
|
|
942
1061
|
variantResult = computed(() => dateRangePickerVariants({
|
|
943
1062
|
size: this.size(),
|
|
@@ -947,28 +1066,39 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
947
1066
|
errorState: this.errorState(),
|
|
948
1067
|
focused: this.focusedSignal(),
|
|
949
1068
|
color: this.color(),
|
|
950
|
-
}),
|
|
1069
|
+
}), /* @ts-ignore */
|
|
1070
|
+
...(ngDevMode ? [{ debugName: "variantResult" }] : /* istanbul ignore next */ []));
|
|
951
1071
|
/** @internal */
|
|
952
|
-
rootClasses = computed(() => this.variantResult().root(),
|
|
1072
|
+
rootClasses = computed(() => this.variantResult().root(), /* @ts-ignore */
|
|
1073
|
+
...(ngDevMode ? [{ debugName: "rootClasses" }] : /* istanbul ignore next */ []));
|
|
953
1074
|
/** @internal */
|
|
954
|
-
triggerClasses = computed(() => this.variantResult().trigger(),
|
|
1075
|
+
triggerClasses = computed(() => this.variantResult().trigger(), /* @ts-ignore */
|
|
1076
|
+
...(ngDevMode ? [{ debugName: "triggerClasses" }] : /* istanbul ignore next */ []));
|
|
955
1077
|
/** @internal */
|
|
956
|
-
startTextClasses = computed(() => this.variantResult().startText(),
|
|
1078
|
+
startTextClasses = computed(() => this.variantResult().startText(), /* @ts-ignore */
|
|
1079
|
+
...(ngDevMode ? [{ debugName: "startTextClasses" }] : /* istanbul ignore next */ []));
|
|
957
1080
|
/** @internal */
|
|
958
|
-
separatorClasses = computed(() => this.variantResult().separator(),
|
|
1081
|
+
separatorClasses = computed(() => this.variantResult().separator(), /* @ts-ignore */
|
|
1082
|
+
...(ngDevMode ? [{ debugName: "separatorClasses" }] : /* istanbul ignore next */ []));
|
|
959
1083
|
/** @internal */
|
|
960
|
-
endTextClasses = computed(() => this.variantResult().endText(),
|
|
1084
|
+
endTextClasses = computed(() => this.variantResult().endText(), /* @ts-ignore */
|
|
1085
|
+
...(ngDevMode ? [{ debugName: "endTextClasses" }] : /* istanbul ignore next */ []));
|
|
961
1086
|
/** @internal */
|
|
962
|
-
placeholderClasses = computed(() => this.variantResult().placeholderText(),
|
|
1087
|
+
placeholderClasses = computed(() => this.variantResult().placeholderText(), /* @ts-ignore */
|
|
1088
|
+
...(ngDevMode ? [{ debugName: "placeholderClasses" }] : /* istanbul ignore next */ []));
|
|
963
1089
|
/** @internal */
|
|
964
|
-
triggerIconClasses = computed(() => this.variantResult().triggerIcon(),
|
|
1090
|
+
triggerIconClasses = computed(() => this.variantResult().triggerIcon(), /* @ts-ignore */
|
|
1091
|
+
...(ngDevMode ? [{ debugName: "triggerIconClasses" }] : /* istanbul ignore next */ []));
|
|
965
1092
|
/** @internal */
|
|
966
|
-
triggerIconWrapperClasses = computed(() => this.variantResult().triggerIconWrapper(),
|
|
1093
|
+
triggerIconWrapperClasses = computed(() => this.variantResult().triggerIconWrapper(), /* @ts-ignore */
|
|
1094
|
+
...(ngDevMode ? [{ debugName: "triggerIconWrapperClasses" }] : /* istanbul ignore next */ []));
|
|
967
1095
|
/** @internal */
|
|
968
|
-
clearButtonClasses = computed(() => this.variantResult().clearButton(),
|
|
1096
|
+
clearButtonClasses = computed(() => this.variantResult().clearButton(), /* @ts-ignore */
|
|
1097
|
+
...(ngDevMode ? [{ debugName: "clearButtonClasses" }] : /* istanbul ignore next */ []));
|
|
969
1098
|
// ── FormFieldControl impl ──
|
|
970
1099
|
/** @internal */
|
|
971
|
-
id = computed(() => this.idInput() ?? this.hostId,
|
|
1100
|
+
id = computed(() => this.idInput() ?? this.hostId, /* @ts-ignore */
|
|
1101
|
+
...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
|
|
972
1102
|
/** @internal */
|
|
973
1103
|
focused = this.focusedSignal.asReadonly();
|
|
974
1104
|
/** @internal */
|
|
@@ -981,7 +1111,8 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
981
1111
|
if (this.requiredInput())
|
|
982
1112
|
return true;
|
|
983
1113
|
return !!this.ngControl?.control?.hasValidator(Validators.required);
|
|
984
|
-
},
|
|
1114
|
+
}, /* @ts-ignore */
|
|
1115
|
+
...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
|
|
985
1116
|
/** @internal */
|
|
986
1117
|
errorState = computed(() => {
|
|
987
1118
|
this._ngControlRev();
|
|
@@ -993,11 +1124,13 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
993
1124
|
const form = this.parentFormGroup ??
|
|
994
1125
|
this.parentForm;
|
|
995
1126
|
return matcher.isErrorState(this.ngControl?.control ?? null, form);
|
|
996
|
-
},
|
|
1127
|
+
}, /* @ts-ignore */
|
|
1128
|
+
...(ngDevMode ? [{ debugName: "errorState" }] : /* istanbul ignore next */ []));
|
|
997
1129
|
/** @internal */
|
|
998
1130
|
controlType = 'date-range-picker';
|
|
999
1131
|
/** @internal */
|
|
1000
|
-
userAriaDescribedBy = computed(() => this.userAriaDescribedByInput(),
|
|
1132
|
+
userAriaDescribedBy = computed(() => this.userAriaDescribedByInput(), /* @ts-ignore */
|
|
1133
|
+
...(ngDevMode ? [{ debugName: "userAriaDescribedBy" }] : /* istanbul ignore next */ []));
|
|
1001
1134
|
// ── Constructor ──
|
|
1002
1135
|
constructor() {
|
|
1003
1136
|
super();
|
|
@@ -1117,7 +1250,7 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
1117
1250
|
return;
|
|
1118
1251
|
const hasLabel = !!this.ariaLabel() ||
|
|
1119
1252
|
!!this.ariaLabelledby() ||
|
|
1120
|
-
!!this.formField?.
|
|
1253
|
+
!!this.formField?.hasLabel();
|
|
1121
1254
|
if (!hasLabel) {
|
|
1122
1255
|
console.warn('[tw-date-range-picker] The date-range-picker has no accessible name. Set aria-label, aria-labelledby, or wrap the component in a <tw-form-field> with a <label twLabel>.');
|
|
1123
1256
|
}
|
|
@@ -1649,8 +1782,8 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
1649
1782
|
triggerEl.focus();
|
|
1650
1783
|
}
|
|
1651
1784
|
}
|
|
1652
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1653
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
1785
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: DateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1786
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: DateRangePickerComponent, isStandalone: true, selector: "tw-date-range-picker", inputs: { idInput: { classPropertyName: "idInput", publicName: "id", 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 }, startView: { classPropertyName: "startView", publicName: "startView", isSignal: true, isRequired: false, transformFunction: null }, startAt: { classPropertyName: "startAt", publicName: "startAt", isSignal: true, isRequired: false, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null }, rangeSeparator: { classPropertyName: "rangeSeparator", publicName: "rangeSeparator", isSignal: true, isRequired: false, transformFunction: null }, emptyStartLabel: { classPropertyName: "emptyStartLabel", publicName: "emptyStartLabel", isSignal: true, isRequired: false, transformFunction: null }, emptyEndLabel: { classPropertyName: "emptyEndLabel", publicName: "emptyEndLabel", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, requiredInput: { classPropertyName: "requiredInput", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, numberOfMonths: { classPropertyName: "numberOfMonths", publicName: "numberOfMonths", isSignal: true, isRequired: false, transformFunction: null }, presets: { classPropertyName: "presets", publicName: "presets", isSignal: true, isRequired: false, transformFunction: null }, showClear: { classPropertyName: "showClear", publicName: "showClear", 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 }, rangeBehavior: { classPropertyName: "rangeBehavior", publicName: "rangeBehavior", isSignal: true, isRequired: false, transformFunction: null }, rangeClickBehavior: { classPropertyName: "rangeClickBehavior", publicName: "rangeClickBehavior", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, dateClass: { classPropertyName: "dateClass", publicName: "dateClass", isSignal: true, isRequired: false, transformFunction: null }, cellTemplate: { classPropertyName: "cellTemplate", publicName: "cellTemplate", isSignal: true, isRequired: false, transformFunction: null }, showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: true, isRequired: false, transformFunction: null }, showTime: { classPropertyName: "showTime", publicName: "showTime", isSignal: true, isRequired: false, transformFunction: null }, timeFormat: { classPropertyName: "timeFormat", publicName: "timeFormat", isSignal: true, isRequired: false, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: false, transformFunction: null }, hourStep: { classPropertyName: "hourStep", publicName: "hourStep", isSignal: true, isRequired: false, transformFunction: null }, minuteStep: { classPropertyName: "minuteStep", publicName: "minuteStep", isSignal: true, isRequired: false, transformFunction: null }, secondStep: { classPropertyName: "secondStep", publicName: "secondStep", isSignal: true, isRequired: false, transformFunction: null }, todayLabel: { classPropertyName: "todayLabel", publicName: "todayLabel", isSignal: true, isRequired: false, transformFunction: null }, clearLabel: { classPropertyName: "clearLabel", publicName: "clearLabel", isSignal: true, isRequired: false, transformFunction: null }, cancelLabel: { classPropertyName: "cancelLabel", publicName: "cancelLabel", isSignal: true, isRequired: false, transformFunction: null }, applyLabel: { classPropertyName: "applyLabel", publicName: "applyLabel", isSignal: true, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null }, scrollStrategy: { classPropertyName: "scrollStrategy", publicName: "scrollStrategy", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null }, clearAriaLabel: { classPropertyName: "clearAriaLabel", publicName: "clearAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, errorStateMatcher: { classPropertyName: "errorStateMatcher", publicName: "errorStateMatcher", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, userAriaDescribedByInput: { classPropertyName: "userAriaDescribedByInput", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", open: "openChange", opened: "opened", closed: "closed", rangeChange: "rangeChange", presetSelected: "presetSelected" }, host: { properties: { "class": "rootClasses()" } }, providers: [
|
|
1654
1787
|
{
|
|
1655
1788
|
provide: TW_FORM_FIELD_CONTROL,
|
|
1656
1789
|
useExisting: forwardRef(() => DateRangePickerComponent),
|
|
@@ -1660,6 +1793,17 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
1660
1793
|
useExisting: forwardRef(() => DateRangePickerComponent),
|
|
1661
1794
|
multi: true,
|
|
1662
1795
|
},
|
|
1796
|
+
// Angular v22 routes a CVA component's own NG_VALIDATORS through the
|
|
1797
|
+
// value-accessor channel. The runtime `ngControl.valueAccessor = this`
|
|
1798
|
+
// assignment below happens too late for that wiring, so `validate()` is
|
|
1799
|
+
// never invoked and every calendar error code silently disappears. The
|
|
1800
|
+
// static provider is what registers this component on the channel in time.
|
|
1801
|
+
// Mirrors `calendar.ts`, which has always provided both tokens.
|
|
1802
|
+
{
|
|
1803
|
+
provide: NG_VALUE_ACCESSOR,
|
|
1804
|
+
useExisting: forwardRef(() => DateRangePickerComponent),
|
|
1805
|
+
multi: true,
|
|
1806
|
+
},
|
|
1663
1807
|
PickerOverlayCoordinator,
|
|
1664
1808
|
], viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["trigger"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
|
|
1665
1809
|
<button
|
|
@@ -1732,7 +1876,7 @@ class DateRangePickerComponent extends FormFieldControl {
|
|
|
1732
1876
|
}
|
|
1733
1877
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1734
1878
|
}
|
|
1735
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1879
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: DateRangePickerComponent, decorators: [{
|
|
1736
1880
|
type: Component,
|
|
1737
1881
|
args: [{
|
|
1738
1882
|
selector: 'tw-date-range-picker',
|
|
@@ -1747,6 +1891,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
1747
1891
|
useExisting: forwardRef(() => DateRangePickerComponent),
|
|
1748
1892
|
multi: true,
|
|
1749
1893
|
},
|
|
1894
|
+
// Angular v22 routes a CVA component's own NG_VALIDATORS through the
|
|
1895
|
+
// value-accessor channel. The runtime `ngControl.valueAccessor = this`
|
|
1896
|
+
// assignment below happens too late for that wiring, so `validate()` is
|
|
1897
|
+
// never invoked and every calendar error code silently disappears. The
|
|
1898
|
+
// static provider is what registers this component on the channel in time.
|
|
1899
|
+
// Mirrors `calendar.ts`, which has always provided both tokens.
|
|
1900
|
+
{
|
|
1901
|
+
provide: NG_VALUE_ACCESSOR,
|
|
1902
|
+
useExisting: forwardRef(() => DateRangePickerComponent),
|
|
1903
|
+
multi: true,
|
|
1904
|
+
},
|
|
1750
1905
|
PickerOverlayCoordinator,
|
|
1751
1906
|
],
|
|
1752
1907
|
template: `
|