@cdevhub/ngx-tw 0.4.0 → 0.6.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 +78 -15
- package/fesm2022/cdevhub-ngx-tw-accordion.mjs +16 -5
- package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-avatar.mjs +26 -15
- package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-badge.mjs +17 -5
- package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +27 -6
- package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-button.mjs +23 -11
- package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +5 -5
- package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-calendar-testing.mjs +3 -3
- package/fesm2022/cdevhub-ngx-tw-calendar-testing.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-calendar.mjs +427 -122
- package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-card.mjs +21 -11
- package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-carousel.mjs +215 -96
- package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +108 -64
- package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-code-block.mjs +18 -6
- package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +55 -30
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-combobox-testing.mjs +218 -0
- package/fesm2022/cdevhub-ngx-tw-combobox-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs +236 -211
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-command-palette-testing.mjs +200 -0
- package/fesm2022/cdevhub-ngx-tw-command-palette-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +34 -7
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-core.mjs +135 -15
- package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-date-picker-testing.mjs +203 -0
- package/fesm2022/cdevhub-ngx-tw-date-picker-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +160 -102
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-date-range-picker-testing.mjs +209 -0
- package/fesm2022/cdevhub-ngx-tw-date-range-picker-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +182 -107
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-dialog-dialog-renderer-DoIhoV3d.mjs +198 -0
- package/fesm2022/cdevhub-ngx-tw-dialog-dialog-renderer-DoIhoV3d.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-dialog-testing.mjs +122 -0
- package/fesm2022/cdevhub-ngx-tw-dialog-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs +199 -220
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +1 -1
- package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-file-upload-testing.mjs +149 -0
- package/fesm2022/cdevhub-ngx-tw-file-upload-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-file-upload.mjs +57 -67
- package/fesm2022/cdevhub-ngx-tw-file-upload.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +42 -24
- package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs +114 -21
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-icon.mjs +16 -6
- package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-input.mjs +52 -61
- package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-item.mjs +18 -3
- package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-menu-testing.mjs +168 -0
- package/fesm2022/cdevhub-ngx-tw-menu-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-menu.mjs +58 -21
- package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-number-input.mjs +34 -1
- package/fesm2022/cdevhub-ngx-tw-number-input.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs +95 -45
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-popover.mjs +81 -32
- package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +1 -1
- package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-radio.mjs +131 -98
- package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +207 -42
- package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-select-testing.mjs +165 -0
- package/fesm2022/cdevhub-ngx-tw-select-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-select.mjs +386 -210
- package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-sheet-sheet-renderer-CqVJwgmp.mjs +256 -0
- package/fesm2022/cdevhub-ngx-tw-sheet-sheet-renderer-CqVJwgmp.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-sheet-testing.mjs +129 -0
- package/fesm2022/cdevhub-ngx-tw-sheet-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs +197 -278
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-slider.mjs +89 -54
- package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-sort.mjs +122 -17
- package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-split.mjs +72 -19
- package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-stat.mjs +63 -25
- package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-stepper.mjs +35 -8
- package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-switch.mjs +54 -48
- package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +12 -15
- package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-table.mjs +74 -13
- package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tabs.mjs +84 -30
- package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tags-input-testing.mjs +172 -0
- package/fesm2022/cdevhub-ngx-tw-tags-input-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +107 -71
- package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-textarea.mjs +41 -9
- package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-theme.mjs +257 -45
- package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-time-picker-testing.mjs +201 -0
- package/fesm2022/cdevhub-ngx-tw-time-picker-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +184 -77
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-timeline.mjs +110 -27
- package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-toast-toast-renderer-BlDxemsU.mjs +616 -0
- package/fesm2022/cdevhub-ngx-tw-toast-toast-renderer-BlDxemsU.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-toast.mjs +556 -945
- package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +102 -15
- package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-transfer-testing.mjs +219 -0
- package/fesm2022/cdevhub-ngx-tw-transfer-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-transfer.mjs +88 -69
- package/fesm2022/cdevhub-ngx-tw-transfer.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tree.mjs +68 -19
- package/fesm2022/cdevhub-ngx-tw-tree.mjs.map +1 -1
- package/index.json +1 -1
- package/package.json +63 -2
- package/theme/_base.css +13 -0
- package/theme/_dark.css +110 -36
- package/theme/_high-contrast-dark.css +367 -0
- package/theme/_high-contrast.css +13 -2
- package/theme/_light.css +276 -0
- package/theme/_semantic.css +47 -12
- package/theme/_typography.css +17 -0
- package/theme/index.css +86 -7
- package/types/cdevhub-ngx-tw-accordion.d.ts +12 -4
- package/types/cdevhub-ngx-tw-avatar.d.ts +10 -3
- package/types/cdevhub-ngx-tw-button.d.ts +1 -0
- package/types/cdevhub-ngx-tw-calendar-luxon.d.ts +2 -2
- package/types/cdevhub-ngx-tw-calendar-testing.d.ts +1 -1
- package/types/cdevhub-ngx-tw-calendar.d.ts +179 -73
- package/types/cdevhub-ngx-tw-card.d.ts +11 -3
- package/types/cdevhub-ngx-tw-carousel.d.ts +89 -20
- package/types/cdevhub-ngx-tw-checkbox.d.ts +40 -12
- package/types/cdevhub-ngx-tw-code-block.d.ts +11 -2
- package/types/cdevhub-ngx-tw-collapsible.d.ts +32 -5
- package/types/cdevhub-ngx-tw-combobox-testing.d.ts +157 -0
- package/types/cdevhub-ngx-tw-combobox.d.ts +94 -53
- package/types/cdevhub-ngx-tw-command-palette-testing.d.ts +136 -0
- package/types/cdevhub-ngx-tw-command-palette.d.ts +33 -5
- package/types/cdevhub-ngx-tw-core.d.ts +152 -21
- package/types/cdevhub-ngx-tw-date-picker-testing.d.ts +141 -0
- package/types/cdevhub-ngx-tw-date-picker.d.ts +37 -29
- package/types/cdevhub-ngx-tw-date-range-picker-testing.d.ts +148 -0
- package/types/cdevhub-ngx-tw-date-range-picker.d.ts +36 -29
- package/types/cdevhub-ngx-tw-dialog-testing.d.ts +98 -0
- package/types/cdevhub-ngx-tw-dialog.d.ts +89 -19
- package/types/cdevhub-ngx-tw-file-upload-testing.d.ts +120 -0
- package/types/cdevhub-ngx-tw-file-upload.d.ts +8 -10
- package/types/cdevhub-ngx-tw-flip-card.d.ts +18 -11
- package/types/cdevhub-ngx-tw-form-field.d.ts +19 -2
- package/types/cdevhub-ngx-tw-icon.d.ts +3 -3
- package/types/cdevhub-ngx-tw-input.d.ts +5 -8
- package/types/cdevhub-ngx-tw-item.d.ts +2 -0
- package/types/cdevhub-ngx-tw-menu-testing.d.ts +131 -0
- package/types/cdevhub-ngx-tw-menu.d.ts +2 -2
- package/types/cdevhub-ngx-tw-number-input.d.ts +20 -0
- package/types/cdevhub-ngx-tw-paginator.d.ts +58 -24
- package/types/cdevhub-ngx-tw-popover.d.ts +41 -10
- package/types/cdevhub-ngx-tw-progress-bar.d.ts +1 -1
- package/types/cdevhub-ngx-tw-radio.d.ts +68 -25
- package/types/cdevhub-ngx-tw-segmented-control.d.ts +79 -16
- package/types/cdevhub-ngx-tw-select-testing.d.ts +114 -0
- package/types/cdevhub-ngx-tw-select.d.ts +104 -33
- package/types/cdevhub-ngx-tw-sheet-testing.d.ts +104 -0
- package/types/cdevhub-ngx-tw-sheet.d.ts +96 -21
- package/types/cdevhub-ngx-tw-slider.d.ts +79 -25
- package/types/cdevhub-ngx-tw-sort.d.ts +45 -4
- package/types/cdevhub-ngx-tw-split.d.ts +32 -2
- package/types/cdevhub-ngx-tw-stat.d.ts +14 -4
- package/types/cdevhub-ngx-tw-stepper.d.ts +16 -2
- package/types/cdevhub-ngx-tw-switch.d.ts +35 -13
- package/types/cdevhub-ngx-tw-tab-nav.d.ts +7 -6
- package/types/cdevhub-ngx-tw-table.d.ts +53 -10
- package/types/cdevhub-ngx-tw-tabs.d.ts +41 -10
- package/types/cdevhub-ngx-tw-tags-input-testing.d.ts +135 -0
- package/types/cdevhub-ngx-tw-tags-input.d.ts +26 -11
- package/types/cdevhub-ngx-tw-textarea.d.ts +3 -2
- package/types/cdevhub-ngx-tw-theme.d.ts +245 -39
- package/types/cdevhub-ngx-tw-time-picker-testing.d.ts +129 -0
- package/types/cdevhub-ngx-tw-time-picker.d.ts +76 -19
- package/types/cdevhub-ngx-tw-timeline.d.ts +36 -12
- package/types/cdevhub-ngx-tw-toast.d.ts +61 -12
- package/types/cdevhub-ngx-tw-tooltip.d.ts +28 -6
- package/types/cdevhub-ngx-tw-transfer-testing.d.ts +152 -0
- package/types/cdevhub-ngx-tw-transfer.d.ts +21 -8
- package/types/cdevhub-ngx-tw-tree.d.ts +6 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdevhub-ngx-tw-date-range-picker.mjs","sources":["../../../projects/ngx-tw/date-range-picker/date-range-picker-overlay.ts","../../../projects/ngx-tw/date-range-picker/date-range-picker.ts","../../../projects/ngx-tw/date-range-picker/cdevhub-ngx-tw-date-range-picker.ts"],"sourcesContent":["import {\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n ElementRef,\n inject,\n signal,\n type TemplateRef,\n viewChild,\n viewChildren,\n} from '@angular/core';\nimport type {\n RangeBehaviorConfig,\n TimePickerFormat,\n TwColor,\n TwSize,\n} from '@cdevhub/ngx-tw/core';\nimport {\n CalendarComponent,\n provideRangeSelectionStrategy,\n type CalendarCell,\n type CalendarViewState,\n type DateClassFn,\n type DateRange,\n type DateFilterFn,\n type RangeClickBehavior,\n TwDateRange,\n type ViewChangeEvent,\n} from '@cdevhub/ngx-tw/calendar';\nimport { ButtonDirective } from '@cdevhub/ngx-tw/button';\nimport {\n TimePickerComponent,\n type TimePickerChangeEvent,\n} from '@cdevhub/ngx-tw/time-picker';\nimport type { DateRangePickerMonths, DateRangePreset } from './date-range-picker';\n\n/**\n * Internal directive that adopts a preset `<button>` into the picker's\n * roving-tabindex listbox model. The directive's own host binding wins over\n * `twButton`'s default `tabindex=null`, ensuring the active option carries\n * `tabindex=\"0\"` on the very first paint.\n *\n * @internal\n */\n@Directive({\n selector: 'button[twDateRangePresetOption]',\n host: {\n '[attr.tabindex]': 'tabindex()',\n },\n})\nexport class DateRangePresetOptionDirective {\n private readonly elementRef = inject(ElementRef<HTMLButtonElement>);\n\n /** @internal Tab-index — `'0'` on the active option, `'-1'` on the rest. */\n readonly tabindex = signal<string>('-1');\n\n /** @internal */\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n}\n\n/**\n * Internal overlay panel for `tw-date-range-picker`. Hosts the optional preset\n * list, a single `tw-calendar` in `selectionMode=\"range\"` configured with\n * `numberOfMonths` (1 or 2 months under one header), an optional time row, and\n * an optional action bar. Receives configuration and interaction callbacks via\n * signal-backed fields set from the outer component. Not exported from the\n * public API.\n */\n@Component({\n selector: 'tw-date-range-picker-overlay',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CalendarComponent,\n TimePickerComponent,\n ButtonDirective,\n DateRangePresetOptionDirective,\n ],\n providers: [provideRangeSelectionStrategy()],\n host: {\n '[class]': 'panelClasses()',\n '[id]': 'dialogId()',\n '[attr.role]': '\"dialog\"',\n '[attr.aria-modal]': '\"true\"',\n '[attr.aria-label]': 'dialogAriaLabel()',\n '[animate.enter]': '\"scale-in\"',\n '[animate.leave]': 'leaving() ? \"scale-out\" : \"\"',\n },\n template: `\n @if (presets().length) {\n <div\n class=\"flex flex-col gap-1 p-2 border-r border-border bg-surface-muted min-w-40\"\n role=\"listbox\"\n tabindex=\"-1\"\n aria-label=\"Preset ranges\"\n (keydown)=\"onPresetListKeydown($event)\"\n >\n @for (preset of presets(); track presetKey($index, preset); let i = $index) {\n <button\n twButton\n twDateRangePresetOption\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n role=\"option\"\n class=\"w-full justify-start\"\n [attr.aria-selected]=\"isActivePreset(preset) ? 'true' : 'false'\"\n (click)=\"handlePreset(preset, i)\"\n >\n {{ preset.label }}\n </button>\n }\n </div>\n }\n\n <div class=\"flex flex-col flex-1\">\n <tw-calendar\n #calendar\n mode=\"range\"\n class=\"!rounded-none !border-0 !bg-transparent !p-2\"\n [bordered]=\"false\"\n [value]=\"$any(pendingRangeAsRange())\"\n [startAt]=\"$any(initialStartAt())\"\n [startView]=\"startView()\"\n [monthColumns]=\"numberOfMonths()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [dateFilter]=\"dateFilter()\"\n [dateClass]=\"dateClass()\"\n [cellTemplate]=\"cellTemplate()\"\n [locale]=\"locale()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [minRangeLength]=\"minRangeLength()\"\n [maxRangeLength]=\"maxRangeLength()\"\n [rangeBehavior]=\"rangeBehavior()\"\n [rangeClickBehavior]=\"rangeClickBehavior()\"\n [attr.aria-label]=\"calendarAriaLabel()\"\n (valueChange)=\"onCalendarRangeSelected($event)\"\n (viewChange)=\"onViewChanged($event)\"\n />\n\n @if (showTime() && hasTimeablePending()) {\n <div class=\"border-t border-border flex items-center justify-between gap-3 px-3 py-2\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-xs font-medium text-fg-muted\">Start</span>\n <tw-time-picker\n variant=\"naked\"\n [value]=\"pendingRange()!.start\"\n [size]=\"size()\"\n [color]=\"color()\"\n [format]=\"timeFormat()\"\n [showSeconds]=\"showSeconds()\"\n [hourStep]=\"hourStep()\"\n [minuteStep]=\"minuteStep()\"\n [secondStep]=\"secondStep()\"\n [showClear]=\"false\"\n [referenceDate]=\"pendingRange()!.start\"\n aria-label=\"Start time\"\n (timeChange)=\"onStartTime($event)\"\n />\n </div>\n <span class=\"text-fg-subtle shrink-0\">{{ rangeSeparator() }}</span>\n <div class=\"flex items-center gap-2\">\n <span class=\"text-xs font-medium text-fg-muted\">End</span>\n <tw-time-picker\n variant=\"naked\"\n [value]=\"pendingRange()!.end\"\n [size]=\"size()\"\n [color]=\"color()\"\n [format]=\"timeFormat()\"\n [showSeconds]=\"showSeconds()\"\n [hourStep]=\"hourStep()\"\n [minuteStep]=\"minuteStep()\"\n [secondStep]=\"secondStep()\"\n [showClear]=\"false\"\n [referenceDate]=\"pendingRange()!.end\"\n aria-label=\"End time\"\n (timeChange)=\"onEndTime($event)\"\n />\n </div>\n </div>\n }\n\n @if (showActions()) {\n <div class=\"border-t border-border flex items-center justify-between gap-2 px-3 py-2\">\n <div class=\"flex items-center gap-2\">\n <button twButton variant=\"ghost\" size=\"sm\" type=\"button\" (click)=\"handleToday()\">\n {{ todayLabel() }}\n </button>\n @if (pendingRange() !== null) {\n <button twButton variant=\"ghost\" size=\"sm\" type=\"button\" (click)=\"handleClear()\">\n {{ clearLabel() }}\n </button>\n }\n </div>\n <div class=\"flex items-center gap-2\">\n <button twButton variant=\"ghost\" size=\"sm\" type=\"button\" (click)=\"handleCancel()\">\n {{ cancelLabel() }}\n </button>\n <button twButton variant=\"solid\" size=\"sm\" type=\"button\" (click)=\"handleApply()\">\n {{ applyLabel() }}\n </button>\n </div>\n </div>\n }\n </div>\n `,\n})\nexport class DateRangePickerOverlayComponent<D = unknown> {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly calendarRef = viewChild<CalendarComponent<'range', D>>('calendar');\n private readonly presetOptions = viewChildren(DateRangePresetOptionDirective);\n\n // ── Config signals set by the parent ──\n\n /** @internal */\n readonly size = signal<TwSize>('md');\n /** @internal */\n readonly color = signal<TwColor>('primary');\n /** @internal */\n readonly minDate = signal<D | null>(null);\n /** @internal */\n readonly maxDate = signal<D | null>(null);\n /** @internal */\n readonly dateFilter = signal<DateFilterFn<D> | null>(null);\n /** @internal */\n readonly startView = signal<CalendarViewState>('day');\n /** @internal */\n readonly numberOfMonths = signal<DateRangePickerMonths>(2);\n /** @internal Current pending range shown as selected in the calendar. */\n readonly pendingRange = signal<TwDateRange<D> | null>(null);\n /** @internal */\n readonly currentView = signal<CalendarViewState>('day');\n /** @internal */\n readonly presets = signal<readonly DateRangePreset<D>[]>([]);\n /** @internal */\n readonly activePresetId = signal<string | undefined>(undefined);\n /** @internal */\n readonly showActions = signal(false);\n /** @internal */\n readonly showTime = signal(false);\n /** @internal */\n readonly timeFormat = signal<TimePickerFormat>('24h');\n /** @internal */\n readonly showSeconds = signal(false);\n /** @internal */\n readonly hourStep = signal(1);\n /** @internal */\n readonly minuteStep = signal(1);\n /** @internal */\n readonly secondStep = signal(1);\n /** @internal */\n readonly todayLabel = signal('Today');\n /** @internal */\n readonly clearLabel = signal('Clear');\n /** @internal */\n readonly cancelLabel = signal('Cancel');\n /** @internal */\n readonly applyLabel = signal('Apply');\n /** @internal */\n readonly rangeSeparator = signal(' – ');\n /** @internal */\n readonly dialogId = signal<string>('');\n /** @internal */\n readonly dialogAriaLabel = signal<string>('Choose a date range');\n /** @internal */\n readonly panelClassValue = signal<string>('');\n /** @internal */\n readonly leaving = signal(false);\n\n // ── Forwarded calendar config ──\n\n /** @internal */\n readonly minRangeLength = signal<number | null>(null);\n /** @internal */\n readonly maxRangeLength = signal<number | null>(null);\n /** @internal */\n readonly rangeBehavior = signal<Partial<RangeBehaviorConfig>>({});\n /** @internal */\n readonly rangeClickBehavior = signal<RangeClickBehavior>('restart');\n /** @internal */\n readonly firstDayOfWeek = signal<number | null>(null);\n /** @internal */\n readonly locale = signal<string | null>(null);\n /** @internal */\n readonly dateClass = signal<DateClassFn<D> | null>(null);\n /** @internal */\n readonly cellTemplate = signal<TemplateRef<{ $implicit: CalendarCell<D> }> | null>(null);\n\n // ── Callbacks set by the parent ──\n\n /** @internal */\n readonly onCalendarSelect = signal<(range: TwDateRange<D>) => void>(() => {});\n /** @internal */\n readonly onPresetSelect = signal<(preset: DateRangePreset<D>) => void>(() => {});\n /** @internal */\n readonly onStartTimeChange = signal<(date: D | null) => void>(() => {});\n /** @internal */\n readonly onEndTimeChange = signal<(date: D | null) => void>(() => {});\n /** @internal */\n readonly onViewChange = signal<(view: CalendarViewState) => void>(() => {});\n /** @internal */\n readonly onToday = signal<() => void>(() => {});\n /** @internal */\n readonly onClear = signal<() => void>(() => {});\n /** @internal */\n readonly onCancel = signal<() => void>(() => {});\n /** @internal */\n readonly onApply = signal<() => void>(() => {});\n\n // ── Derived ──\n\n /** @internal */\n readonly panelClasses = computed(() => {\n const base =\n 'block bg-surface-overlay border border-border rounded-lg shadow-md overflow-hidden flex max-w-[calc(100vw-16px)]';\n const custom = this.panelClassValue();\n return custom ? `${base} ${custom}` : base;\n });\n\n /** @internal */\n readonly calendarAriaLabel = computed(() =>\n this.numberOfMonths() === 2 ? 'Date range calendar (two months)' : 'Date range calendar',\n );\n\n /** @internal The time row requires both endpoints to be set — each time-picker needs a concrete date. */\n readonly hasTimeablePending = computed(() => {\n const v = this.pendingRange();\n return v !== null && v.start !== null && v.end !== null;\n });\n\n /** @internal Adapts `TwDateRange<D> | null` to the `CalendarRangeValue<D>` shape the calendar's `value` input expects. */\n readonly pendingRangeAsRange = computed<{ start: D | null; end: D | null }>(() => {\n const v = this.pendingRange();\n return v ? { start: v.start, end: v.end } : { start: null, end: null };\n });\n\n /** @internal Seeds the calendar's active month on first attach so it anchors to the current value rather than today. */\n readonly initialStartAt = computed<D | null>(() => {\n const v = this.pendingRange();\n return v?.start ?? null;\n });\n\n // ── Template handlers ──\n\n /** @internal */\n presetKey(index: number, preset: DateRangePreset<D>): string | number {\n return preset.id ?? preset.label ?? index;\n }\n\n /** @internal */\n isActivePreset(preset: DateRangePreset<D>): boolean {\n return !!preset.id && this.activePresetId() === preset.id;\n }\n\n /** @internal */\n onCalendarRangeSelected(value: unknown): void {\n // `selectedChange` from the calendar emits the range strategy's completed selection\n // (a `DateRange<D>`). Wrap it into a `TwDateRange` for downstream consumers.\n if (value && typeof value === 'object' && 'start' in value && 'end' in value) {\n const r = value as DateRange<D>;\n this.onCalendarSelect()(new TwDateRange<D>(r.start, r.end));\n }\n }\n\n /** @internal */\n onViewChanged(event: ViewChangeEvent): void {\n this.currentView.set(event.to);\n this.onViewChange()(event.to);\n }\n\n /** @internal */\n onStartTime(event: TimePickerChangeEvent<D>): void {\n if (event.source === 'programmatic') return;\n this.onStartTimeChange()(event.value);\n }\n\n /** @internal */\n onEndTime(event: TimePickerChangeEvent<D>): void {\n if (event.source === 'programmatic') return;\n this.onEndTimeChange()(event.value);\n }\n\n // ── Preset listbox keyboard ──\n\n /** @internal Roving tabindex pointer — index of the focusable preset option. */\n readonly activeOptionIndex = signal<number>(0);\n\n constructor() {\n // Drive the directive's `tabindex` signal from `activeOptionIndex`. We\n // use `afterRenderEffect` so the directive instances are already created\n // when we read them (regular `effect` may run before the view init).\n afterRenderEffect(() => {\n const options = this.presetOptions();\n const active = this.activeOptionIndex();\n for (let i = 0; i < options.length; i++) {\n options[i].tabindex.set(i === active ? '0' : '-1');\n }\n });\n }\n\n /** @internal */\n onPresetListKeydown(event: KeyboardEvent): void {\n const options = this.presetOptions();\n const count = options.length;\n if (count === 0) return;\n const current = this.activeOptionIndex();\n const move = (next: number): void => {\n const idx = ((next % count) + count) % count;\n this.activeOptionIndex.set(idx);\n options[idx]?.focus();\n };\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n move(current + 1);\n return;\n case 'ArrowUp':\n event.preventDefault();\n move(current - 1);\n return;\n case 'Home':\n event.preventDefault();\n move(0);\n return;\n case 'End':\n event.preventDefault();\n move(count - 1);\n return;\n case 'Enter':\n case ' ': {\n const preset = this.presets()[current];\n if (preset) {\n event.preventDefault();\n this.handlePreset(preset, current);\n }\n return;\n }\n default:\n return;\n }\n }\n\n /** @internal */\n handlePreset(preset: DateRangePreset<D>, index?: number): void {\n if (typeof index === 'number') this.activeOptionIndex.set(index);\n this.onPresetSelect()(preset);\n }\n\n /** @internal */\n handleToday(): void {\n this.onToday()();\n }\n\n /** @internal */\n handleClear(): void {\n this.onClear()();\n }\n\n /** @internal */\n handleCancel(): void {\n this.onCancel()();\n }\n\n /** @internal */\n handleApply(): void {\n this.onApply()();\n }\n\n /** @internal Moves focus to the active cell of the calendar. Called by the parent after open. */\n focusCalendar(): void {\n this.calendarRef()?.focusActiveCell();\n }\n\n /** @internal Exposes the root overlay element for tests. */\n getElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n}\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n isDevMode,\n linkedSignal,\n model,\n type OnInit,\n output,\n signal,\n type Signal,\n type TemplateRef,\n untracked,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n type AbstractControl,\n type ControlValueAccessor,\n FormGroupDirective,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n NgForm,\n type ValidationErrors,\n type Validator,\n Validators,\n} from '@angular/forms';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { FocusMonitor, LiveAnnouncer } from '@angular/cdk/a11y';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { merge } from 'rxjs';\nimport { tv } from 'tailwind-variants';\nimport {\n buildSelectLikePositions,\n type ErrorStateMatcher,\n PickerOverlayCoordinator,\n type RangeBehaviorConfig,\n resolveSelectScrollStrategy,\n type TimePickerFormat,\n TW_ERROR_STATE_MATCHER,\n type TwColor,\n type TwFormSubmitted,\n type TwSize,\n} from '@cdevhub/ngx-tw/core';\nimport {\n FormFieldControl,\n TW_FORM_FIELD,\n TW_FORM_FIELD_CONTROL,\n} from '@cdevhub/ngx-tw/form-field';\nimport {\n calendarValidator,\n type CalendarCell,\n type CalendarValidationErrors,\n type DateClassFn,\n DATE_ADAPTER,\n type DateAdapter,\n type CalendarViewState,\n type DateFilterFn,\n type RangeClickBehavior,\n type TwDateRangeInput,\n TwDateRange,\n} from '@cdevhub/ngx-tw/calendar';\nimport { DateRangePickerOverlayComponent } from './date-range-picker-overlay';\n\n// ── Public types ──────────────────────────────────────────────────\n\n/** Visual style of the date-range-picker trigger. */\nexport type DateRangePickerVariant = 'default' | 'naked';\n\n/** How many months the overlay displays side-by-side. */\nexport type DateRangePickerMonths = 1 | 2;\n\n/** Origin of a value change, used to distinguish user input from programmatic writes. */\nexport type DateRangePickerChangeSource =\n | 'calendar'\n | 'preset'\n | 'time'\n | 'apply'\n | 'clear'\n | 'programmatic';\n\n/** Reason the overlay closed. */\nexport type DateRangePickerCloseReason =\n | 'select'\n | 'apply'\n | 'cancel'\n | 'escape'\n | 'backdrop'\n | 'programmatic';\n\n/** Emitted by `rangeChange` after a committed value update. */\nexport interface DateRangePickerChangeEvent<D> {\n /** The committed range (`null` when cleared). */\n readonly value: TwDateRange<D> | null;\n /** The range before this change. */\n readonly previousValue: TwDateRange<D> | null;\n /** What triggered the change. */\n readonly source: DateRangePickerChangeSource;\n}\n\n/** Emitted by `opened`. */\nexport interface DateRangePickerOpenedEvent {\n /** The trigger element. */\n readonly trigger: HTMLElement;\n}\n\n/** A quick-select preset rendered in the overlay's preset list. */\nexport interface DateRangePreset<D = Date> {\n /** Label shown on the preset button. */\n readonly label: string;\n /** Factory returning the range to apply when this preset is chosen. Called fresh each click so \"today\"-relative presets stay current. */\n readonly range: () => TwDateRange<D>;\n /** Optional identifier — surfaced in `presetSelected` and used to detect the active preset for visual state. */\n readonly id?: string;\n}\n\n// ── Constants ─────────────────────────────────────────────────────\n\nconst DEFAULT_DISPLAY_FORMAT = {\n dateTimeFormat: { year: 'numeric', month: 'short', day: 'numeric' } as Intl.DateTimeFormatOptions,\n};\n\n// ── Helpers ───────────────────────────────────────────────────────\n\nfunction rangesEqual<D>(\n a: TwDateRange<D> | null,\n b: TwDateRange<D> | null,\n adapter: DateAdapter<D>,\n): boolean {\n if (a === null && b === null) return true;\n if (a === null || b === null) return false;\n const startEq =\n (a.start === null && b.start === null) ||\n (a.start !== null && b.start !== null && adapter.sameDate(a.start, b.start));\n const endEq =\n (a.end === null && b.end === null) ||\n (a.end !== null && b.end !== null && adapter.sameDate(a.end, b.end));\n return startEq && endEq;\n}\n\n// ── tv() config ───────────────────────────────────────────────────\n\nconst dateRangePickerVariants = tv(\n {\n slots: {\n root: 'relative inline-flex items-center w-full text-fg transition-[color,border-color,box-shadow] duration-normal motion-reduce:transition-none',\n trigger:\n 'flex-1 inline-flex items-center gap-2 min-w-0 bg-transparent text-left text-fg outline-none border-0 p-0 m-0 cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:cursor-not-allowed',\n startText: 'truncate',\n separator: 'shrink-0 text-fg-subtle',\n endText: 'truncate',\n placeholderText: 'text-fg-subtle truncate flex-1',\n triggerIconWrapper: 'inline-flex items-center justify-center shrink-0 text-fg-muted',\n triggerIcon:\n 'shrink-0 text-fg-muted transition-colors duration-normal motion-reduce:transition-none',\n // size-6 (24×24 CSS px) is the WCAG AA minimum interactive target — bumping past size-5 keeps the affordance hittable without growing the inline row.\n clearButton:\n 'inline-flex items-center justify-center shrink-0 rounded-md text-fg-muted hover:text-fg hover:bg-surface-muted transition-colors duration-normal motion-reduce:transition-none size-6 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n },\n variants: {\n size: {\n xs: {\n root: 'gap-1 text-xs',\n // size-3.5 (14px) is a permitted half-step decorative chevron for xs\n // density where neither size-3 nor size-4 lines up with adjacent text.\n triggerIcon: 'size-3.5',\n },\n sm: {\n root: 'gap-1.5 text-sm',\n triggerIcon: 'size-4',\n },\n md: {\n root: 'gap-2 text-sm',\n triggerIcon: 'size-4',\n },\n lg: {\n root: 'gap-2 text-base',\n triggerIcon: 'size-5',\n },\n xl: {\n root: 'gap-2 text-base',\n triggerIcon: 'size-5',\n },\n },\n variant: {\n default: {\n root: 'rounded-md border border-border bg-surface px-3 py-2 hover:border-border-strong',\n },\n naked: {\n root: 'bg-transparent border-0 rounded-none p-0 focus-within:outline-none',\n },\n },\n open: { true: { triggerIcon: 'text-fg' }, false: {} },\n disabled: {\n true: { root: 'opacity-50 pointer-events-none cursor-not-allowed' },\n false: {},\n },\n focused: { true: {}, false: {} },\n errorState: { true: {}, false: {} },\n color: {\n primary: {},\n secondary: {},\n accent: {},\n neutral: {},\n info: {},\n success: {},\n warning: {},\n error: {},\n },\n },\n compoundVariants: [\n { variant: 'default', focused: true, color: 'primary', class: { root: 'border-primary-500' } },\n { variant: 'default', focused: true, color: 'secondary', class: { root: 'border-secondary-500' } },\n { variant: 'default', focused: true, color: 'accent', class: { root: 'border-accent-500' } },\n { variant: 'default', focused: true, color: 'neutral', class: { root: 'border-border-strong' } },\n { variant: 'default', focused: true, color: 'info', class: { root: 'border-info-500' } },\n { variant: 'default', focused: true, color: 'success', class: { root: 'border-success-500' } },\n { variant: 'default', focused: true, color: 'warning', class: { root: 'border-warning-500' } },\n { variant: 'default', focused: true, color: 'error', class: { root: 'border-error-500' } },\n { variant: 'default', errorState: true, class: { root: 'border-error-500' } },\n ],\n defaultVariants: {\n size: 'md',\n variant: 'default',\n open: false,\n disabled: false,\n errorState: false,\n focused: false,\n color: 'primary',\n },\n },\n { twMerge: true },\n);\n\n// ── ID generator ──────────────────────────────────────────────────\n\nlet nextDateRangePickerId = 0;\n\n/**\n * ARIA date-picker dialog for two-endpoint date ranges. Composes `tw-calendar`\n * in `selectionMode=\"range\"` inside a CDK overlay. Supports optional time\n * selection via embedded `tw-time-picker`s and optional quick-select presets.\n *\n * All three Angular forms strategies (reactive, template-driven, signal-forms)\n * are supported via `ControlValueAccessor`, and the component integrates with\n * `<tw-form-field>` by implementing `FormFieldControl`.\n *\n * All date operations go through the injected `DateAdapter<D>`; call\n * `provideNativeDateAdapter()` in your app providers to bootstrap the default.\n */\n@Component({\n selector: 'tw-date-range-picker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: TW_FORM_FIELD_CONTROL,\n useExisting: forwardRef(() => DateRangePickerComponent),\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DateRangePickerComponent),\n multi: true,\n },\n // Angular v22 routes a CVA component's own NG_VALIDATORS through the\n // value-accessor channel. The runtime `ngControl.valueAccessor = this`\n // assignment below happens too late for that wiring, so `validate()` is\n // never invoked and every calendar error code silently disappears. The\n // static provider is what registers this component on the channel in time.\n // Mirrors `calendar.ts`, which has always provided both tokens.\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateRangePickerComponent),\n multi: true,\n },\n PickerOverlayCoordinator,\n ],\n template: `\n <button\n #trigger\n type=\"button\"\n [id]=\"hostId\"\n [class]=\"triggerClasses()\"\n [attr.role]=\"'combobox'\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-expanded]=\"open() ? 'true' : 'false'\"\n [attr.aria-controls]=\"dialogId\"\n [attr.aria-label]=\"triggerAccessibleName() || null\"\n [attr.aria-labelledby]=\"ariaLabelledby() || null\"\n [attr.aria-describedby]=\"describedBy() || null\"\n [attr.aria-required]=\"requiredInput() || null\"\n [attr.aria-invalid]=\"errorState() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.data-variant]=\"resolvedVariant()\"\n [disabled]=\"isDisabled()\"\n (click)=\"onTriggerClick()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n <span class=\"flex-1 inline-flex items-center gap-2 min-w-0\">\n @if (internalValue() !== null) {\n <span [class]=\"startTextClasses()\">{{ startDisplay() }}</span>\n <span [class]=\"separatorClasses()\">{{ rangeSeparator() }}</span>\n <span [class]=\"endTextClasses()\">{{ endDisplay() }}</span>\n } @else {\n <span [class]=\"placeholderClasses()\">{{ placeholderDisplay() }}</span>\n }\n </span>\n\n <span [class]=\"triggerIconWrapperClasses()\">\n <ng-content select=\"[slot=trigger-icon]\">\n <svg\n [class]=\"triggerIconClasses()\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n </ng-content>\n </span>\n </button>\n\n @if (showClear() && !isEmpty() && !isDisabled()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n [class]=\"clearButtonClasses()\"\n [attr.aria-label]=\"clearAriaLabel()\"\n (click)=\"onClearClick($event)\"\n >\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" class=\"size-3\">\n <path\n fill-rule=\"evenodd\"\n d=\"M10 8.586 4.707 3.293a1 1 0 0 0-1.414 1.414L8.586 10l-5.293 5.293a1 1 0 1 0 1.414 1.414L10 11.414l5.293 5.293a1 1 0 0 0 1.414-1.414L11.414 10l5.293-5.293a1 1 0 0 0-1.414-1.414L10 8.586Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n }\n `,\n host: {\n '[class]': 'rootClasses()',\n },\n})\nexport class DateRangePickerComponent<D = Date>\n extends FormFieldControl<TwDateRange<D>>\n implements ControlValueAccessor, Validator, OnInit\n{\n // ── Inputs ──\n\n /** Id on the trigger element. Auto-generated when not provided. Used by the form-field's `<label for>` attribute. */\n readonly idInput = input<string | undefined>(undefined, { alias: 'id' });\n\n /** Earliest selectable date for either endpoint. Presets and calendar cells earlier than this are rejected or disabled. Defaults to `null`. */\n readonly minDate = input<D | null>(null);\n\n /** Latest selectable date for either endpoint. Presets and calendar cells later than this are rejected or disabled. Defaults to `null`. */\n readonly maxDate = input<D | null>(null);\n\n /** Per-date predicate — return `false` to disable. Applied in both calendars. Presets that fall on a filtered date are skipped. */\n readonly dateFilter = input<DateFilterFn<D> | null>(null);\n\n /** Which calendar view opens first — `'day'`, `'month'`, or `'year'`. Defaults to `'day'`. */\n readonly startView = input<CalendarViewState>('day');\n\n /** Date the left calendar focuses on when opened with no value. Falls back to today. Ignored when a value is already set. */\n readonly startAt = input<D | null>(null);\n\n /** 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. */\n readonly format = input<unknown>(DEFAULT_DISPLAY_FORMAT);\n\n /** Separator rendered between the two formatted endpoints in the trigger. Defaults to `\" – \"`. */\n readonly rangeSeparator = input<string>(' – ');\n\n /** Placeholder text shown in the trigger for an empty `start` endpoint. */\n readonly emptyStartLabel = input<string>('Start date');\n\n /** Placeholder text shown in the trigger for an empty `end` endpoint. */\n readonly emptyEndLabel = input<string>('End date');\n\n /** When set, overrides the composed `${emptyStartLabel}${rangeSeparator}${emptyEndLabel}` placeholder with a single string. */\n readonly placeholder = input<string | undefined>(undefined);\n\n /** When true, the trigger cannot open the overlay and `aria-disabled=\"true\"` is set. Defaults to `false`. */\n readonly disabledInput = input<boolean, unknown>(false, {\n alias: 'disabled',\n transform: booleanAttribute,\n });\n\n /** When true, exposes `aria-required=\"true\"`. `Validators.required` on a bound `NgControl` is also honoured. Defaults to `false`. */\n readonly requiredInput = input<boolean, unknown>(false, {\n alias: 'required',\n transform: booleanAttribute,\n });\n\n /** Trigger padding, font size, and calendar cell density. Uses the shared `TwSize` scale. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** Semantic color for focused border, calendar range fill, and preset active state. Defaults to `'primary'`. */\n readonly color = input<TwColor>('primary');\n\n /** 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'`. */\n readonly variant = input<DateRangePickerVariant | undefined>(undefined);\n\n /** How many months the overlay shows side-by-side. `2` is the standard range-picker layout; use `1` for compact contexts. Defaults to `2`. */\n readonly numberOfMonths = input<DateRangePickerMonths>(2);\n\n /** 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. */\n readonly presets = input<readonly DateRangePreset<D>[]>([]);\n\n /** Whether to show a clear-button affordance inside the trigger when a value is set. Defaults to `true`. */\n // 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.\n readonly showClear = input<boolean>(true);\n\n /** 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`. */\n readonly minRangeLength = input<number | null>(null);\n\n /** 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`. */\n readonly maxRangeLength = input<number | null>(null);\n\n /**\n * Range-mode behavior knobs forwarded to the embedded calendar. Accepts a\n * partial config — unset fields use the documented defaults on\n * `RangeBehaviorConfig`. Defaults: `{ allowSingleDayRange: true, persistPartialRange: true, allowBackwardRange: false, disableRangesCrossingDisabledDates: false }`.\n */\n readonly rangeBehavior = input<Partial<RangeBehaviorConfig>>({});\n\n /** 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. */\n readonly rangeClickBehavior = input<RangeClickBehavior>('restart');\n\n /** Override first day of week (0=Sun, 1=Mon) on the embedded calendar. Falls back to the adapter's default. */\n readonly firstDayOfWeek = input<number | null>(null);\n\n /** 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`. */\n readonly locale = input<string | null>(null);\n\n /** Function producing per-cell CSS classes on the embedded calendar. */\n readonly dateClass = input<DateClassFn<D> | null>(null);\n\n /** Optional cell-content template, forwarded to the embedded calendar. Use to customize cell visuals beyond `dateClass`. */\n readonly cellTemplate = input<TemplateRef<{ $implicit: CalendarCell<D> }> | null>(null);\n\n /** 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`. */\n readonly showActions = input<boolean>(false);\n\n /** 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`. */\n readonly showTime = input<boolean>(false);\n\n /** Format of the embedded time-pickers. `'24h'` renders 00–23; `'12h'` adds an AM/PM toggle. Defaults to `'24h'`. */\n readonly timeFormat = input<TimePickerFormat>('24h');\n\n /** Whether the embedded time-pickers expose a seconds field. Defaults to `false`. */\n readonly showSeconds = input<boolean>(false);\n\n /** Step for the embedded time-pickers' hour fields. Defaults to `1`. */\n readonly hourStep = input<number>(1);\n\n /** Step for the embedded time-pickers' minute fields. Defaults to `1`. */\n readonly minuteStep = input<number>(1);\n\n /** Step for the embedded time-pickers' second fields. Defaults to `1`. */\n readonly secondStep = input<number>(1);\n\n /** Label for the `Today` action in the overlay's action bar. */\n readonly todayLabel = input<string>('Today');\n\n /** Label for the `Clear` action in the overlay's action bar. */\n readonly clearLabel = input<string>('Clear');\n\n /** Label for the `Cancel` action in the overlay's action bar. */\n readonly cancelLabel = input<string>('Cancel');\n\n /** Label for the `Apply` action in the overlay's action bar. */\n readonly applyLabel = input<string>('Apply');\n\n /** Extra class(es) applied to the overlay panel element. `twMerge` resolves conflicts with internal classes. */\n readonly panelClass = input<string | readonly string[]>('');\n\n /** CDK scroll strategy for the overlay. Defaults to `'reposition'`. */\n readonly scrollStrategy = input<'reposition' | 'close' | 'block'>('reposition');\n\n /** Pixel distance between trigger and overlay. Defaults to `4`. */\n readonly offset = input<number>(4);\n\n /** Accessible label for the clear button. Defaults to `'Clear date range'`. */\n readonly clearAriaLabel = input<string>('Clear date range');\n\n /** Per-instance override of the `ErrorStateMatcher`. When omitted, uses the injected `TW_ERROR_STATE_MATCHER`. */\n readonly errorStateMatcher = input<ErrorStateMatcher | undefined>(undefined);\n\n /** Accessible name for the trigger. Required when no visible label is supplied via `tw-form-field` or an external `aria-labelledby`. Alias: `aria-label`. */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n /** ID of an external element that labels the trigger. Alias: `aria-labelledby`. */\n readonly ariaLabelledby = input<string | undefined>(undefined, { alias: 'aria-labelledby' });\n\n /** Consumer-supplied `aria-describedby` ids. The form-field preserves these when merging hint/error ids. Alias: `aria-describedby`. */\n readonly userAriaDescribedByInput = input<string | undefined>(undefined, {\n alias: 'aria-describedby',\n });\n\n // ── Models (two-way) ──\n\n /** Two-way bound selected range. `null` when no selection. Setting programmatically updates the trigger display and the calendar selection; it does NOT trigger `onChange`. */\n readonly value = model<TwDateRange<D> | null>(null);\n\n /** Two-way bound open state of the overlay. Setting to `true` opens; setting to `false` closes. */\n readonly open = model(false);\n\n // ── Outputs ──\n\n /** Fires after the overlay's enter animation completes. Payload is the trigger element. */\n readonly opened = output<DateRangePickerOpenedEvent>();\n\n /** Fires after the overlay's leave animation completes. Payload is the reason it closed. */\n readonly closed = output<DateRangePickerCloseReason>();\n\n /** Fires after a commit — either from completing a range in the calendar, picking a preset, or applying via the action bar. */\n readonly rangeChange = output<DateRangePickerChangeEvent<D>>();\n\n /** Fires when the user picks a preset from the list. Payload is the preset descriptor. Fires in addition to `rangeChange`. */\n readonly presetSelected = output<DateRangePreset<D>>();\n\n // ── Injected deps ──\n\n private readonly adapter = inject<DateAdapter<D>>(DATE_ADAPTER);\n private readonly overlayService = inject(Overlay);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n private readonly coordinator = inject(PickerOverlayCoordinator);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly formField = inject(TW_FORM_FIELD, { optional: true });\n // Lazy NgControl lookup avoids the construction-time cycle with NG_VALIDATORS\n // (the host registers itself as a validator via `useExisting`, and NgModel's\n // constructor pulls the validator set — eager `inject(NgControl, {self})`\n // would resolve to this component while it is still being created).\n private ngControl: NgControl | null = null;\n private readonly parentForm = inject(NgForm, { optional: true });\n private readonly parentFormGroup = inject(FormGroupDirective, { optional: true });\n private readonly defaultMatcher = inject(TW_ERROR_STATE_MATCHER);\n\n // ── View refs ──\n\n private readonly triggerRef = viewChild.required<ElementRef<HTMLButtonElement>>('trigger');\n\n // ── Identity ──\n\n private readonly uid = nextDateRangePickerId++;\n /** @internal */\n readonly hostId = `tw-date-range-picker-${this.uid}`;\n /** @internal */\n readonly dialogId = `${this.hostId}-dialog`;\n\n // ── Internal state ──\n\n /** @internal Decouples programmatic writes from user commits. */\n readonly internalValue = linkedSignal<TwDateRange<D> | null>(() => this.value());\n /** @internal */\n readonly parseError = signal(false);\n /** @internal */\n readonly rangeError = signal(false);\n /** @internal */\n readonly focusedSignal = signal(false);\n\n private readonly cvaDisabled = signal(false);\n private readonly describedByIdsSignal = signal<readonly string[]>([]);\n private readonly closingSignal = signal(false);\n private readonly lastValueBeforeOpen = signal<TwDateRange<D> | null>(null);\n private readonly pendingRange = signal<TwDateRange<D> | null>(null);\n private readonly currentView = signal<CalendarViewState>('day');\n private readonly _ngControlRev = signal(0);\n private readonly _formSubmitRev = signal(0);\n\n private onChange: (value: TwDateRange<D> | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n private readonly overlayInstanceSignal =\n signal<DateRangePickerOverlayComponent<D> | null>(null);\n\n private get overlayInstance(): DateRangePickerOverlayComponent<D> | null {\n return this.overlayInstanceSignal();\n }\n\n // ── Derived state ──\n\n /** @internal */\n readonly isDisabled = computed(() => {\n this._ngControlRev();\n return this.disabledInput() || this.cvaDisabled() || !!this.ngControl?.disabled;\n });\n\n /** @internal Effective variant — auto-naked when wrapped in tw-form-field. */\n readonly resolvedVariant = computed<DateRangePickerVariant>(\n () => this.variant() ?? (this.formField ? 'naked' : 'default'),\n );\n\n /** @internal */\n readonly isEmpty = computed(() => {\n const v = this.internalValue();\n return v === null || (v.start === null && v.end === null);\n });\n\n /** @internal Effective display format — folds hour/minute (and optional seconds) into the default when `showTime` is on and the user hasn't overridden `format`. */\n readonly effectiveFormat = computed<unknown>(() => {\n const fmt = this.format();\n if (!this.showTime() || fmt !== DEFAULT_DISPLAY_FORMAT) return fmt;\n const hour12 = this.timeFormat() === '12h';\n const base: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n hour12,\n };\n if (this.showSeconds()) base.second = '2-digit';\n return { dateTimeFormat: base };\n });\n\n /** @internal */\n readonly startDisplay = computed(() => {\n const v = this.internalValue();\n if (v === null) return '';\n return v.start !== null\n ? this.adapter.format(v.start, this.effectiveFormat())\n : this.emptyStartLabel();\n });\n\n /** @internal */\n readonly endDisplay = computed(() => {\n const v = this.internalValue();\n if (v === null) return '';\n return v.end !== null\n ? this.adapter.format(v.end, this.effectiveFormat())\n : this.emptyEndLabel();\n });\n\n /** @internal */\n readonly placeholderDisplay = computed(() => {\n const custom = this.placeholder();\n if (custom) return custom;\n return `${this.emptyStartLabel()}${this.rangeSeparator()}${this.emptyEndLabel()}`;\n });\n\n /** @internal Accessible name composed from explicit aria-label plus the current range. */\n readonly triggerAccessibleName = computed<string | undefined>(() => {\n const label = this.ariaLabel();\n if (this.ariaLabelledby()) return undefined;\n const v = this.internalValue();\n if (label && v !== null && v.start !== null && v.end !== null) {\n const start = this.adapter.format(v.start, this.effectiveFormat());\n const end = this.adapter.format(v.end, this.effectiveFormat());\n return `${label}. Current range: ${start} to ${end}.`;\n }\n if (label) return label;\n return undefined;\n });\n\n /** @internal */\n readonly activePresetId = computed<string | undefined>(() => {\n const v = this.internalValue();\n if (v === null) return undefined;\n for (const preset of this.presets()) {\n if (!preset.id) continue;\n let candidate: TwDateRange<D>;\n try {\n candidate = preset.range();\n } catch {\n continue;\n }\n if (rangesEqual(candidate, v, this.adapter)) return preset.id;\n }\n return undefined;\n });\n\n /** @internal */\n readonly describedBy = computed(() => {\n const extra = this.describedByIdsSignal();\n const user = this.userAriaDescribedByInput();\n const merged = [...extra];\n if (user) {\n for (const id of user.split(/\\s+/)) {\n if (id) merged.push(id);\n }\n }\n return merged.length ? merged.join(' ') : '';\n });\n\n // ── tv() output ──\n\n private readonly variantResult = computed(() =>\n dateRangePickerVariants({\n size: this.size(),\n variant: this.resolvedVariant(),\n open: this.open(),\n disabled: this.isDisabled(),\n errorState: this.errorState(),\n focused: this.focusedSignal(),\n color: this.color(),\n }),\n );\n\n /** @internal */\n readonly rootClasses = computed(() => this.variantResult().root());\n /** @internal */\n readonly triggerClasses = computed(() => this.variantResult().trigger());\n /** @internal */\n readonly startTextClasses = computed(() => this.variantResult().startText());\n /** @internal */\n readonly separatorClasses = computed(() => this.variantResult().separator());\n /** @internal */\n readonly endTextClasses = computed(() => this.variantResult().endText());\n /** @internal */\n readonly placeholderClasses = computed(() => this.variantResult().placeholderText());\n /** @internal */\n readonly triggerIconClasses = computed(() => this.variantResult().triggerIcon());\n /** @internal */\n readonly triggerIconWrapperClasses = computed(() => this.variantResult().triggerIconWrapper());\n /** @internal */\n readonly clearButtonClasses = computed(() => this.variantResult().clearButton());\n\n // ── FormFieldControl impl ──\n\n /** @internal */\n readonly id: Signal<string> = computed(() => this.idInput() ?? this.hostId);\n /** @internal */\n readonly focused: Signal<boolean> = this.focusedSignal.asReadonly();\n /** @internal */\n readonly empty: Signal<boolean> = this.isEmpty;\n /** @internal */\n readonly disabled: Signal<boolean> = this.isDisabled;\n /** @internal */\n readonly required: Signal<boolean> = computed(() => {\n this._ngControlRev();\n if (this.requiredInput()) return true;\n return !!this.ngControl?.control?.hasValidator(Validators.required);\n });\n\n /** @internal */\n readonly errorState: Signal<boolean> = computed(() => {\n this._ngControlRev();\n this._formSubmitRev();\n this.focusedSignal();\n if (this.parseError() || this.rangeError()) return true;\n const matcher = this.errorStateMatcher() ?? this.defaultMatcher;\n const form: TwFormSubmitted | null =\n (this.parentFormGroup as TwFormSubmitted | null) ??\n (this.parentForm as TwFormSubmitted | null);\n return matcher.isErrorState(this.ngControl?.control ?? null, form);\n });\n\n /** @internal */\n readonly controlType = 'date-range-picker';\n /** @internal */\n readonly userAriaDescribedBy: Signal<string | undefined> = computed(() =>\n this.userAriaDescribedByInput(),\n );\n\n // ── Constructor ──\n\n constructor() {\n super();\n\n // Mirror the `open` model into the overlay lifecycle.\n effect(() => {\n const shouldOpen = this.open();\n const disabled = this.isDisabled();\n if (disabled && this.overlayInstance) {\n this.closeOverlay('programmatic');\n return;\n }\n if (shouldOpen && !this.overlayInstance && !disabled && !this.closingSignal()) {\n this.openOverlay();\n } else if (!shouldOpen && this.overlayInstance && !this.closingSignal()) {\n this.closeOverlay('programmatic');\n }\n });\n\n // Push config into the overlay whenever anything relevant changes.\n // Reads happen in the tracked phase; writes to the overlay instance are\n // wrapped in `untracked()` so they never feed back into this effect.\n effect(() => {\n const instance = this.overlayInstance;\n if (!instance) return;\n const size = this.size();\n const color = this.color();\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const dateFilter = this.dateFilter();\n const startView = this.startView();\n const numberOfMonths = this.numberOfMonths();\n const pendingRange = this.pendingRange();\n const currentView = this.currentView();\n const presets = this.presets();\n const activePresetId = this.activePresetId();\n const showActions = this.showActions();\n const showTime = this.showTime();\n const timeFormat = this.timeFormat();\n const showSeconds = this.showSeconds();\n const hourStep = this.hourStep();\n const minuteStep = this.minuteStep();\n const secondStep = this.secondStep();\n const todayLabel = this.todayLabel();\n const clearLabel = this.clearLabel();\n const cancelLabel = this.cancelLabel();\n const applyLabel = this.applyLabel();\n const rangeSeparator = this.rangeSeparator();\n const dialogAriaLabel = this.resolveDialogAriaLabel();\n const panelClassValue = this.resolvePanelClass();\n const minRangeLength = this.minRangeLength();\n const maxRangeLength = this.maxRangeLength();\n const rangeBehavior = this.rangeBehavior();\n const rangeClickBehavior = this.rangeClickBehavior();\n const firstDayOfWeek = this.firstDayOfWeek();\n const locale = this.locale();\n const dateClass = this.dateClass();\n const cellTemplate = this.cellTemplate();\n untracked(() => {\n instance.size.set(size);\n instance.color.set(color);\n instance.minDate.set(minDate);\n instance.maxDate.set(maxDate);\n instance.dateFilter.set(dateFilter);\n instance.startView.set(startView);\n instance.numberOfMonths.set(numberOfMonths);\n instance.pendingRange.set(pendingRange);\n instance.currentView.set(currentView);\n instance.presets.set(presets);\n instance.activePresetId.set(activePresetId);\n instance.showActions.set(showActions);\n instance.showTime.set(showTime);\n instance.timeFormat.set(timeFormat);\n instance.showSeconds.set(showSeconds);\n instance.hourStep.set(hourStep);\n instance.minuteStep.set(minuteStep);\n instance.secondStep.set(secondStep);\n instance.todayLabel.set(todayLabel);\n instance.clearLabel.set(clearLabel);\n instance.cancelLabel.set(cancelLabel);\n instance.applyLabel.set(applyLabel);\n instance.rangeSeparator.set(rangeSeparator);\n instance.dialogId.set(this.dialogId);\n instance.dialogAriaLabel.set(dialogAriaLabel);\n instance.panelClassValue.set(panelClassValue);\n instance.minRangeLength.set(minRangeLength);\n instance.maxRangeLength.set(maxRangeLength);\n instance.rangeBehavior.set(rangeBehavior);\n instance.rangeClickBehavior.set(rangeClickBehavior);\n instance.firstDayOfWeek.set(firstDayOfWeek);\n instance.locale.set(locale);\n instance.dateClass.set(dateClass);\n instance.cellTemplate.set(cellTemplate);\n });\n });\n\n // Push locale into the adapter so the trigger display tracks the picker's\n // locale; the calendar runs its own setLocale internally for its grid.\n effect(() => {\n const locale = this.locale();\n if (locale === null) return;\n untracked(() => this.adapter.setLocale(locale));\n });\n\n // Re-run validation whenever a constraint input changes so consumer\n // statusChanges fires (mirrors the calendar's pattern).\n effect(() => {\n this.minDate();\n this.maxDate();\n this.dateFilter();\n this.minRangeLength();\n this.maxRangeLength();\n untracked(() => this.validatorOnChange());\n });\n\n // Dev-mode accessible-name warning.\n afterNextRender(() => {\n if (!isDevMode()) return;\n const hasLabel =\n !!this.ariaLabel() ||\n !!this.ariaLabelledby() ||\n !!this.formField?.hasLabel();\n if (!hasLabel) {\n console.warn(\n '[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>.',\n );\n }\n });\n\n // Monitor focus on the host (descendants-aware so the overlay counts while open).\n const monitorSub = this.focusMonitor\n .monitor(this.elementRef, true)\n .subscribe((origin) => {\n const wasFocused = this.focusedSignal();\n this.focusedSignal.set(!!origin);\n if (wasFocused && !origin) {\n this.onTouched();\n this._ngControlRev.update((n) => n + 1);\n }\n });\n\n this.destroyRef.onDestroy(() => {\n monitorSub.unsubscribe();\n this.focusMonitor.stopMonitoring(this.elementRef);\n // The coordinator's own DestroyRef.onDestroy disposes the overlay and\n // clears its timers; we only need to drop the local instance signal.\n this.overlayInstanceSignal.set(null);\n });\n }\n\n ngOnInit(): void {\n // Resolve the bound NgControl lazily (see field declaration). By the time\n // ngOnInit runs the host's FormControlName / NgModel is fully constructed.\n this.ngControl = this.injector.get(NgControl, null, {\n self: true,\n optional: true,\n });\n // Wire this component as the NgControl's value accessor. NG_VALUE_ACCESSOR\n // is not registered as a provider to keep `inject(NgControl, { self })`\n // possible — we assign it here instead.\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n const ctrl = this.ngControl?.control;\n if (ctrl) {\n const streams = [ctrl.statusChanges, ctrl.valueChanges].filter(\n (s): s is NonNullable<typeof s> => !!s,\n );\n if (streams.length) {\n merge(...streams)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this._ngControlRev.update((n) => n + 1));\n }\n }\n\n const submit = this.parentFormGroup?.ngSubmit ?? this.parentForm?.ngSubmit;\n if (submit) {\n submit\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this._formSubmitRev.update((n) => n + 1));\n }\n }\n\n // ── Public imperative API ──\n\n /** Opens the overlay. No-op when disabled or already open. */\n openPicker(): void {\n if (this.isDisabled() || this.open()) return;\n this.open.set(true);\n }\n\n /** Closes the overlay. No-op when already closed. */\n closePicker(): void {\n if (!this.open()) return;\n this.open.set(false);\n }\n\n /** Toggles the overlay's open state. */\n toggle(): void {\n if (this.open()) this.closePicker();\n else this.openPicker();\n }\n\n /** Clears the current range and emits `rangeChange` with `source: 'clear'`. */\n clear(): void {\n this.commit(null, 'clear');\n }\n\n // ── Trigger interactions ──\n\n /** @internal */\n onTriggerClick(): void {\n if (this.isDisabled()) return;\n this.toggle();\n }\n\n /** @internal */\n onTriggerKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n if (event.altKey && event.key === 'ArrowDown') {\n event.preventDefault();\n this.openPicker();\n return;\n }\n if (event.altKey && event.key === 'ArrowUp') {\n if (this.open()) {\n event.preventDefault();\n this.closeOverlay('cancel', /* restore */ true);\n }\n return;\n }\n if (event.key === 'Escape' && this.open()) {\n event.preventDefault();\n this.closeOverlay('escape', /* restore */ true);\n }\n }\n\n /** @internal */\n onClearClick(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.clear();\n }\n\n // ── Commit ──\n\n private commit(next: TwDateRange<D> | null, source: DateRangePickerChangeSource): void {\n const normalised = this.normalizeRange(next);\n const previous = this.internalValue();\n if (rangesEqual(normalised, previous, this.adapter) && source !== 'programmatic') {\n // No change from a user action — still mark as touched for CVA parity,\n // but skip onChange and the rangeChange emission.\n this.onTouched();\n return;\n }\n this.internalValue.set(normalised);\n this.value.set(normalised);\n this.parseError.set(false);\n this.rangeError.set(false);\n\n if (source !== 'programmatic') {\n this.onChange(normalised);\n this.onTouched();\n this.announce(normalised);\n }\n this.rangeChange.emit({ value: normalised, previousValue: previous, source });\n }\n\n private announce(value: TwDateRange<D> | null): void {\n if (value === null) {\n this.liveAnnouncer.announce('Date range cleared', 'polite');\n return;\n }\n const fmt = this.effectiveFormat();\n if (value.start !== null && value.end !== null) {\n const start = this.adapter.format(value.start, fmt);\n const end = this.adapter.format(value.end, fmt);\n this.liveAnnouncer.announce(`${start} to ${end} selected`, 'polite');\n } else if (value.start !== null) {\n const start = this.adapter.format(value.start, fmt);\n this.liveAnnouncer.announce(`${start} selected. Pick end date.`, 'polite');\n }\n }\n\n private normalizeRange(v: TwDateRange<D> | null): TwDateRange<D> | null {\n if (v === null) return null;\n if (v.start === null && v.end === null) return null;\n return v;\n }\n\n private clampRange(range: TwDateRange<D>): TwDateRange<D> {\n const min = this.minDate();\n const max = this.maxDate();\n const start = range.start !== null ? this.adapter.clampDate(range.start, min, max) : null;\n const end = range.end !== null ? this.adapter.clampDate(range.end, min, max) : null;\n return new TwDateRange<D>(start, end);\n }\n\n private isRangeValid(range: TwDateRange<D>): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n const filter = this.dateFilter();\n const endpoints = [range.start, range.end].filter((d): d is D => d !== null);\n for (const d of endpoints) {\n if (!this.adapter.isValid(d)) return false;\n if (min && this.adapter.compare(d, min) < 0) return false;\n if (max && this.adapter.compare(d, max) > 0) return false;\n if (filter && !filter(d)) return false;\n }\n // Same-day ranges with time mode: end time must not be earlier than start time.\n if (\n this.showTime() &&\n range.start !== null &&\n range.end !== null &&\n this.adapter.sameDate(range.start, range.end) &&\n this.adapter.compare(range.start, range.end) > 0\n ) {\n return false;\n }\n // Range-length constraints (Phase 4 codes).\n if (range.start !== null && range.end !== null) {\n const minLen = this.minRangeLength();\n const maxLen = this.maxRangeLength();\n if (minLen !== null || maxLen !== null) {\n const length = this.rangeLengthInDays(range.start, range.end);\n if (minLen !== null && length < minLen) return false;\n if (maxLen !== null && length > maxLen) return false;\n }\n }\n return true;\n }\n\n private rangeLengthInDays(start: D, end: D): number {\n // Inclusive day count (start + 1 day = length 2). Mirrors\n // `rangeLengthDays` in calendar.utils so picker-level validation matches\n // the calendar's commit-time validation.\n const [lo, hi] =\n this.adapter.compare(start, end) <= 0 ? [start, end] : [end, start];\n const a = this.adapter.startOfDay(lo);\n const b = this.adapter.startOfDay(hi);\n let count = 1;\n let cursor = a;\n while (this.adapter.compare(cursor, b) < 0) {\n cursor = this.adapter.addDays(cursor, 1);\n count++;\n }\n return count;\n }\n\n // ── Overlay lifecycle ──\n\n private openOverlay(): void {\n const current = this.internalValue();\n this.lastValueBeforeOpen.set(current);\n this.pendingRange.set(current);\n this.currentView.set(this.startView());\n\n const result = this.coordinator.open<DateRangePickerOverlayComponent<D>>({\n origin: this.elementRef,\n portalComponent: DateRangePickerOverlayComponent as unknown as new (\n ...args: unknown[]\n ) => DateRangePickerOverlayComponent<D>,\n viewContainerRef: this.viewContainerRef,\n injector: this.injector,\n positions: buildSelectLikePositions(this.offset()),\n scrollStrategy: resolveSelectScrollStrategy(this.scrollStrategy(), this.overlayService),\n panelClass: 'tw-date-range-picker-panel',\n });\n if (!result) return;\n\n const instance = result.instance;\n instance.onCalendarSelect.set((range) => this.onCalendarSelection(range));\n instance.onPresetSelect.set((preset) => this.onPresetClick(preset));\n instance.onStartTimeChange.set((date) => this.onStartTimeChange(date));\n instance.onEndTimeChange.set((date) => this.onEndTimeChange(date));\n instance.onViewChange.set((view) => this.onViewChanged(view));\n instance.onToday.set(() => this.onTodayClicked());\n instance.onClear.set(() => this.onClearAction());\n instance.onCancel.set(() => this.onCancelAction());\n instance.onApply.set(() => this.onApplyAction());\n // Push the initial config synchronously so the first render reflects the\n // current inputs; the effect in the constructor keeps things in sync afterwards.\n instance.size.set(this.size());\n instance.color.set(this.color());\n instance.minDate.set(this.minDate());\n instance.maxDate.set(this.maxDate());\n instance.dateFilter.set(this.dateFilter());\n instance.startView.set(this.startView());\n instance.numberOfMonths.set(this.numberOfMonths());\n instance.pendingRange.set(this.pendingRange());\n instance.currentView.set(this.currentView());\n instance.presets.set(this.presets());\n instance.activePresetId.set(this.activePresetId());\n instance.showActions.set(this.showActions());\n instance.showTime.set(this.showTime());\n instance.timeFormat.set(this.timeFormat());\n instance.showSeconds.set(this.showSeconds());\n instance.hourStep.set(this.hourStep());\n instance.minuteStep.set(this.minuteStep());\n instance.secondStep.set(this.secondStep());\n instance.todayLabel.set(this.todayLabel());\n instance.clearLabel.set(this.clearLabel());\n instance.cancelLabel.set(this.cancelLabel());\n instance.applyLabel.set(this.applyLabel());\n instance.rangeSeparator.set(this.rangeSeparator());\n instance.minRangeLength.set(this.minRangeLength());\n instance.maxRangeLength.set(this.maxRangeLength());\n instance.rangeBehavior.set(this.rangeBehavior());\n instance.rangeClickBehavior.set(this.rangeClickBehavior());\n instance.firstDayOfWeek.set(this.firstDayOfWeek());\n instance.locale.set(this.locale());\n instance.dateClass.set(this.dateClass());\n instance.cellTemplate.set(this.cellTemplate());\n this.overlayInstanceSignal.set(instance);\n // Flush the initial config into the overlay's first render so view children\n // (calendar, time pickers, action bar) observe the picker's current inputs.\n result.componentRef.changeDetectorRef.detectChanges();\n\n // Per-open streams from the coordinator complete on close, so no\n // takeUntilDestroyed is needed.\n this.coordinator.backdropClick$().subscribe(() => {\n // When an action bar is present, backdrop click acts as cancel.\n if (this.showActions()) {\n this.closeOverlay('backdrop', /* restore */ true);\n } else {\n this.closeOverlay('backdrop');\n }\n });\n\n this.coordinator.escape$().subscribe((event) => {\n event.preventDefault();\n this.closeOverlay('escape', /* restore */ true);\n });\n\n // Defer `opened` emission until after the enter animation completes — was\n // previously fired synchronously on open() (mirrors the date-picker fix).\n this.coordinator\n .opened$()\n .subscribe(() => this.opened.emit({ trigger: this.elementRef.nativeElement }));\n\n queueMicrotask(() => {\n this.overlayInstance?.focusCalendar();\n });\n }\n\n private closeOverlay(reason: DateRangePickerCloseReason, restore = false): void {\n if (this.closingSignal() || !this.overlayInstance) return;\n this.closingSignal.set(true);\n this.overlayInstance.leaving.set(true);\n\n if (restore) {\n const previous = this.lastValueBeforeOpen();\n if (!rangesEqual(previous, this.internalValue(), this.adapter)) {\n // Silent restore — no emit of rangeChange.\n this.internalValue.set(previous);\n this.value.set(previous);\n this.parseError.set(false);\n this.rangeError.set(false);\n }\n }\n\n this.triggerRef().nativeElement.focus();\n\n this.coordinator.close(() => {\n this.overlayInstanceSignal.set(null);\n this.pendingRange.set(null);\n untracked(() => this.open.set(false));\n this.closingSignal.set(false);\n this.closed.emit(reason);\n });\n }\n\n // ── Overlay callbacks ──\n\n /** @internal */\n private onCalendarSelection(range: TwDateRange<D>): void {\n this.pendingRange.set(range);\n if (!range.complete) return;\n if (this.showActions() || this.showTime()) return;\n if (!this.isRangeValid(range)) {\n this.rangeError.set(true);\n return;\n }\n this.commit(range, 'calendar');\n this.closeOverlay('select');\n }\n\n private onPresetClick(preset: DateRangePreset<D>): void {\n let raw: TwDateRange<D>;\n try {\n raw = preset.range();\n } catch {\n this.liveAnnouncer.announce(`${preset.label} could not be applied.`, 'polite');\n return;\n }\n const clamped = this.clampRange(raw);\n if (!this.isRangeValid(clamped) || !clamped.complete) {\n this.liveAnnouncer.announce(\n `${preset.label} is not available in the current filter.`,\n 'polite',\n );\n return;\n }\n this.pendingRange.set(clamped);\n this.presetSelected.emit(preset);\n if (this.showActions() || this.showTime()) return;\n this.commit(clamped, 'preset');\n this.closeOverlay('select');\n }\n\n private onStartTimeChange(date: D | null): void {\n const pending = this.pendingRange();\n if (pending === null || pending.start === null || date === null) return;\n const updatedStart = this.adapter.withTime(\n pending.start,\n this.adapter.getHours(date),\n this.adapter.getMinutes(date),\n this.adapter.getSeconds(date),\n );\n const next = new TwDateRange<D>(updatedStart, pending.end);\n this.pendingRange.set(next);\n if (!this.showActions() && next.complete) {\n if (!this.isRangeValid(next)) {\n this.rangeError.set(true);\n return;\n }\n this.commit(next, 'time');\n }\n }\n\n private onEndTimeChange(date: D | null): void {\n const pending = this.pendingRange();\n if (pending === null || pending.end === null || date === null) return;\n const updatedEnd = this.adapter.withTime(\n pending.end,\n this.adapter.getHours(date),\n this.adapter.getMinutes(date),\n this.adapter.getSeconds(date),\n );\n const next = new TwDateRange<D>(pending.start, updatedEnd);\n this.pendingRange.set(next);\n if (!this.showActions() && next.complete) {\n if (!this.isRangeValid(next)) {\n this.rangeError.set(true);\n return;\n }\n this.commit(next, 'time');\n }\n }\n\n private onViewChanged(view: CalendarViewState): void {\n this.currentView.set(view);\n }\n\n private onTodayClicked(): void {\n const today = this.adapter.today();\n const range = new TwDateRange<D>(today, today);\n if (!this.isRangeValid(range)) return;\n this.pendingRange.set(range);\n // When the action bar is off, Today behaves like a direct commit shortcut —\n // mirrors the date-picker's parallel behaviour.\n if (!this.showActions()) {\n this.commit(range, 'preset');\n this.closeOverlay('select');\n }\n }\n\n private onClearAction(): void {\n // Stage-only: clearing in the action bar just drops the pending range.\n // The user must press Apply to commit, consistent with Today.\n this.pendingRange.set(null);\n }\n\n private onCancelAction(): void {\n this.closeOverlay('cancel', /* restore */ true);\n }\n\n private onApplyAction(): void {\n const pending = this.pendingRange();\n const normalised = this.normalizeRange(pending);\n if (normalised !== null && !this.isRangeValid(normalised)) {\n this.rangeError.set(true);\n this.closeOverlay('cancel', /* restore */ true);\n return;\n }\n this.commit(normalised, 'apply');\n this.closeOverlay('apply');\n }\n\n // ── Helpers ──\n\n private resolveDialogAriaLabel(): string {\n return this.ariaLabel() || 'Choose a date range';\n }\n\n private resolvePanelClass(): string {\n const raw = this.panelClass();\n return Array.isArray(raw) ? raw.join(' ') : (raw as string);\n }\n\n // ── ControlValueAccessor ──\n\n writeValue(value: unknown): void {\n const previous = this.internalValue();\n if (value === null || value === undefined || value === '') {\n this.internalValue.set(null);\n this.value.set(null);\n this.parseError.set(false);\n this.rangeError.set(false);\n this.rangeChange.emit({\n value: null,\n previousValue: previous,\n source: 'programmatic',\n });\n return;\n }\n const coerced = this.coerceRange(value as TwDateRangeInput<D>);\n const normalised = this.normalizeRange(coerced);\n this.internalValue.set(normalised);\n this.value.set(normalised);\n this.parseError.set(false);\n this.rangeError.set(normalised !== null && !this.isRangeValid(normalised));\n this.rangeChange.emit({\n value: normalised,\n previousValue: previous,\n source: 'programmatic',\n });\n }\n\n private coerceRange(value: TwDateRangeInput<D>): TwDateRange<D> | null {\n if (value === null || value === undefined) return null;\n if (value instanceof TwDateRange) {\n const start = this.coerceEndpoint(value.start);\n const end = this.coerceEndpoint(value.end);\n return new TwDateRange<D>(start, end);\n }\n const obj = value as { start: D | null; end: D | null };\n return new TwDateRange<D>(\n this.coerceEndpoint(obj.start ?? null),\n this.coerceEndpoint(obj.end ?? null),\n );\n }\n\n private coerceEndpoint(raw: D | null): D | null {\n if (raw === null) return null;\n const d = this.adapter.deserialize(raw) as D | null;\n if (d === null) return null;\n return this.adapter.isValid(d) ? d : null;\n }\n\n registerOnChange(fn: (value: TwDateRange<D> | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // ── Validator ──\n\n private validatorOnChange: () => void = () => {};\n\n /** @internal */\n validate(control: AbstractControl): ValidationErrors | null {\n // Delegate to the calendar validator so consumers see the same\n // CalendarErrorCode set on a date-range-picker as on a bound `tw-calendar`.\n const validator = calendarValidator<'range', D>({\n mode: 'range',\n lastInvalidFormValue: null,\n constraints: {\n minDate: this.minDate(),\n maxDate: this.maxDate(),\n dateFilter: this.dateFilter(),\n },\n adapter: this.adapter,\n minRangeLength: this.minRangeLength(),\n maxRangeLength: this.maxRangeLength(),\n });\n const errors = validator(control) as CalendarValidationErrors | null;\n return errors;\n }\n\n /** @internal */\n registerOnValidatorChange(fn: () => void): void {\n this.validatorOnChange = fn;\n }\n\n // ── FormFieldControl methods ──\n\n /** @internal */\n setDescribedByIds(ids: string[]): void {\n this.describedByIdsSignal.set([...ids]);\n }\n\n /** @internal */\n onContainerClick(event: MouseEvent): void {\n if (this.isDisabled()) return;\n const target = event.target as HTMLElement | null;\n const triggerEl = this.triggerRef()?.nativeElement;\n if (triggerEl && target && triggerEl.contains(target)) return;\n if (triggerEl && document.activeElement !== triggerEl) {\n triggerEl.focus();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cdevhub-ngx-tw-date-range-picker.mjs","sources":["../../../projects/ngx-tw/date-range-picker/date-range-picker-overlay.ts","../../../projects/ngx-tw/date-range-picker/date-range-picker.ts","../../../projects/ngx-tw/date-range-picker/cdevhub-ngx-tw-date-range-picker.ts"],"sourcesContent":["import {\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n ElementRef,\n inject,\n signal,\n type TemplateRef,\n viewChild,\n viewChildren,\n} from '@angular/core';\nimport type {\n RangeBehaviorConfig,\n TimePickerFormat,\n TwColor,\n TwSize,\n} from '@cdevhub/ngx-tw/core';\nimport {\n CalendarComponent,\n provideRangeSelectionStrategy,\n type CalendarCell,\n type CalendarViewState,\n type DateClassFn,\n type DateRange,\n type DateFilterFn,\n type RangeClickBehavior,\n TwDateRange,\n type ViewChangeEvent,\n} from '@cdevhub/ngx-tw/calendar';\nimport { ButtonDirective } from '@cdevhub/ngx-tw/button';\nimport {\n TimePickerComponent,\n type TimePickerChangeEvent,\n} from '@cdevhub/ngx-tw/time-picker';\nimport type { DateRangePickerMonths, DateRangePreset } from './date-range-picker';\n\n/**\n * Internal directive that adopts a preset `<button>` into the picker's\n * roving-tabindex listbox model. The directive's own host binding wins over\n * `twButton`'s default `tabindex=null`, ensuring the active option carries\n * `tabindex=\"0\"` on the very first paint.\n *\n * @internal\n */\n@Directive({\n selector: 'button[twDateRangePresetOption]',\n host: {\n '[attr.tabindex]': 'tabindex()',\n },\n})\nexport class DateRangePresetOptionDirective {\n private readonly elementRef = inject(ElementRef<HTMLButtonElement>);\n\n /** @internal Tab-index — `'0'` on the active option, `'-1'` on the rest. */\n readonly tabindex = signal<string>('-1');\n\n /** @internal */\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n}\n\n/**\n * Internal overlay panel for `tw-date-range-picker`. Hosts the optional preset\n * list, a single `tw-calendar` in `selectionMode=\"range\"` configured with\n * `numberOfMonths` (1 or 2 months under one header), an optional time row, and\n * an optional action bar. Receives configuration and interaction callbacks via\n * signal-backed fields set from the outer component. Not exported from the\n * public API.\n */\n@Component({\n selector: 'tw-date-range-picker-overlay',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CalendarComponent,\n TimePickerComponent,\n ButtonDirective,\n DateRangePresetOptionDirective,\n ],\n providers: [provideRangeSelectionStrategy()],\n host: {\n '[class]': 'panelClasses()',\n '[id]': 'dialogId()',\n '[attr.role]': '\"dialog\"',\n '[attr.aria-modal]': '\"true\"',\n '[attr.aria-label]': 'dialogAriaLabel()',\n '[animate.enter]': '\"scale-in\"',\n '[animate.leave]': 'leaving() ? \"scale-out\" : \"\"',\n },\n template: `\n @if (presets().length) {\n <div\n class=\"flex flex-col gap-1 p-2 border-r border-border bg-surface-muted min-w-40\"\n role=\"listbox\"\n tabindex=\"-1\"\n aria-label=\"Preset ranges\"\n (keydown)=\"onPresetListKeydown($event)\"\n >\n @for (preset of presets(); track presetKey($index, preset); let i = $index) {\n <button\n twButton\n twDateRangePresetOption\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n role=\"option\"\n class=\"w-full justify-start\"\n [attr.aria-selected]=\"isActivePreset(preset) ? 'true' : 'false'\"\n (click)=\"handlePreset(preset, i)\"\n >\n {{ preset.label }}\n </button>\n }\n </div>\n }\n\n <div class=\"flex flex-col flex-1\">\n <tw-calendar\n #calendar\n mode=\"range\"\n class=\"!rounded-none !border-0 !bg-transparent !p-2\"\n [bordered]=\"false\"\n [value]=\"$any(pendingRangeAsRange())\"\n [startAt]=\"$any(initialStartAt())\"\n [startView]=\"startView()\"\n [monthColumns]=\"numberOfMonths()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [dateFilter]=\"dateFilter()\"\n [dateClass]=\"dateClass()\"\n [cellTemplate]=\"cellTemplate()\"\n [locale]=\"locale()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [minRangeLength]=\"minRangeLength()\"\n [maxRangeLength]=\"maxRangeLength()\"\n [rangeBehavior]=\"rangeBehavior()\"\n [rangeClickBehavior]=\"rangeClickBehavior()\"\n [attr.aria-label]=\"calendarAriaLabel()\"\n (valueChange)=\"onCalendarRangeSelected($event)\"\n (viewChange)=\"onViewChanged($event)\"\n />\n\n @if (showTime() && hasTimeablePending()) {\n <div class=\"border-t border-border flex items-center justify-between gap-3 px-3 py-2\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-xs font-medium text-fg-muted\">Start</span>\n <tw-time-picker\n variant=\"naked\"\n [value]=\"pendingRange()!.start\"\n [size]=\"size()\"\n [color]=\"color()\"\n [format]=\"timeFormat()\"\n [showSeconds]=\"showSeconds()\"\n [hourStep]=\"hourStep()\"\n [minuteStep]=\"minuteStep()\"\n [secondStep]=\"secondStep()\"\n [showClear]=\"false\"\n [referenceDate]=\"pendingRange()!.start\"\n aria-label=\"Start time\"\n (timeChange)=\"onStartTime($event)\"\n />\n </div>\n <span class=\"text-fg-subtle shrink-0\">{{ rangeSeparator() }}</span>\n <div class=\"flex items-center gap-2\">\n <span class=\"text-xs font-medium text-fg-muted\">End</span>\n <tw-time-picker\n variant=\"naked\"\n [value]=\"pendingRange()!.end\"\n [size]=\"size()\"\n [color]=\"color()\"\n [format]=\"timeFormat()\"\n [showSeconds]=\"showSeconds()\"\n [hourStep]=\"hourStep()\"\n [minuteStep]=\"minuteStep()\"\n [secondStep]=\"secondStep()\"\n [showClear]=\"false\"\n [referenceDate]=\"pendingRange()!.end\"\n aria-label=\"End time\"\n (timeChange)=\"onEndTime($event)\"\n />\n </div>\n </div>\n }\n\n @if (showActions()) {\n <div class=\"border-t border-border flex items-center justify-between gap-2 px-3 py-2\">\n <div class=\"flex items-center gap-2\">\n <button twButton variant=\"ghost\" size=\"sm\" type=\"button\" (click)=\"handleToday()\">\n {{ todayLabel() }}\n </button>\n @if (pendingRange() !== null) {\n <button twButton variant=\"ghost\" size=\"sm\" type=\"button\" (click)=\"handleClear()\">\n {{ clearLabel() }}\n </button>\n }\n </div>\n <div class=\"flex items-center gap-2\">\n <button twButton variant=\"ghost\" size=\"sm\" type=\"button\" (click)=\"handleCancel()\">\n {{ cancelLabel() }}\n </button>\n <button twButton variant=\"solid\" size=\"sm\" type=\"button\" (click)=\"handleApply()\">\n {{ applyLabel() }}\n </button>\n </div>\n </div>\n }\n </div>\n `,\n})\nexport class DateRangePickerOverlayComponent<D = unknown> {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly calendarRef = viewChild<CalendarComponent<'range', D>>('calendar');\n private readonly presetOptions = viewChildren(DateRangePresetOptionDirective);\n\n // ── Config signals set by the parent ──\n\n /** @internal */\n readonly size = signal<TwSize>('md');\n /** @internal */\n readonly color = signal<TwColor>('primary');\n /** @internal */\n readonly minDate = signal<D | null>(null);\n /** @internal */\n readonly maxDate = signal<D | null>(null);\n /** @internal */\n readonly dateFilter = signal<DateFilterFn<D> | null>(null);\n /** @internal */\n readonly startView = signal<CalendarViewState>('day');\n\n /** @internal Mirrors the host's `startAt`. Anchors the calendar when no range is pending. */\n readonly startAt = signal<D | null>(null);\n /** @internal */\n readonly numberOfMonths = signal<DateRangePickerMonths>(2);\n /** @internal Current pending range shown as selected in the calendar. */\n readonly pendingRange = signal<TwDateRange<D> | null>(null);\n /** @internal */\n readonly currentView = signal<CalendarViewState>('day');\n /** @internal */\n readonly presets = signal<readonly DateRangePreset<D>[]>([]);\n /** @internal */\n readonly activePresetId = signal<string | undefined>(undefined);\n /** @internal */\n readonly showActions = signal(false);\n /** @internal */\n readonly showTime = signal(false);\n /** @internal */\n readonly timeFormat = signal<TimePickerFormat>('24h');\n /** @internal */\n readonly showSeconds = signal(false);\n /** @internal */\n readonly hourStep = signal(1);\n /** @internal */\n readonly minuteStep = signal(1);\n /** @internal */\n readonly secondStep = signal(1);\n /** @internal */\n readonly todayLabel = signal('Today');\n /** @internal */\n readonly clearLabel = signal('Clear');\n /** @internal */\n readonly cancelLabel = signal('Cancel');\n /** @internal */\n readonly applyLabel = signal('Apply');\n /** @internal */\n readonly rangeSeparator = signal(' – ');\n /** @internal */\n readonly dialogId = signal<string>('');\n /** @internal */\n readonly dialogAriaLabel = signal<string>('Choose a date range');\n /** @internal */\n readonly panelClassValue = signal<string>('');\n /** @internal */\n readonly leaving = signal(false);\n\n // ── Forwarded calendar config ──\n\n /** @internal */\n readonly minRangeLength = signal<number | null>(null);\n /** @internal */\n readonly maxRangeLength = signal<number | null>(null);\n /** @internal */\n readonly rangeBehavior = signal<Partial<RangeBehaviorConfig>>({});\n /** @internal */\n readonly rangeClickBehavior = signal<RangeClickBehavior>('restart');\n /** @internal */\n readonly firstDayOfWeek = signal<number | null>(null);\n /** @internal */\n readonly locale = signal<string | null>(null);\n /** @internal */\n readonly dateClass = signal<DateClassFn<D> | null>(null);\n /** @internal */\n readonly cellTemplate = signal<TemplateRef<{ $implicit: CalendarCell<D> }> | null>(null);\n\n // ── Callbacks set by the parent ──\n\n /** @internal */\n readonly onCalendarSelect = signal<(range: TwDateRange<D>) => void>(() => {});\n /** @internal */\n readonly onPresetSelect = signal<(preset: DateRangePreset<D>) => void>(() => {});\n /** @internal */\n readonly onStartTimeChange = signal<(date: D | null) => void>(() => {});\n /** @internal */\n readonly onEndTimeChange = signal<(date: D | null) => void>(() => {});\n /** @internal */\n readonly onViewChange = signal<(view: CalendarViewState) => void>(() => {});\n /** @internal */\n readonly onToday = signal<() => void>(() => {});\n /** @internal */\n readonly onClear = signal<() => void>(() => {});\n /** @internal */\n readonly onCancel = signal<() => void>(() => {});\n /** @internal */\n readonly onApply = signal<() => void>(() => {});\n\n // ── Derived ──\n\n /** @internal */\n readonly panelClasses = computed(() => {\n const base =\n 'block bg-surface-overlay border border-border rounded-lg shadow-md overflow-hidden flex max-w-[calc(100vw-16px)]';\n const custom = this.panelClassValue();\n return custom ? `${base} ${custom}` : base;\n });\n\n /** @internal */\n readonly calendarAriaLabel = computed(() =>\n this.numberOfMonths() === 2 ? 'Date range calendar (two months)' : 'Date range calendar',\n );\n\n /** @internal The time row requires both endpoints to be set — each time-picker needs a concrete date. */\n readonly hasTimeablePending = computed(() => {\n const v = this.pendingRange();\n return v !== null && v.start !== null && v.end !== null;\n });\n\n /** @internal Adapts `TwDateRange<D> | null` to the `CalendarRangeValue<D>` shape the calendar's `value` input expects. */\n readonly pendingRangeAsRange = computed<{ start: D | null; end: D | null }>(() => {\n const v = this.pendingRange();\n return v ? { start: v.start, end: v.end } : { start: null, end: null };\n });\n\n /**\n * @internal Seeds the calendar's active month on first attach so it anchors to\n * the current value rather than today.\n *\n * A pending range wins: once the user has a selection, the calendar should\n * follow it. `startAt` is the fallback for an empty picker, which is the case\n * the host input exists for — it was declared but never forwarded here, so a\n * consumer setting it got silence and the calendar always opened on today.\n */\n readonly initialStartAt = computed<D | null>(() => {\n const v = this.pendingRange();\n return v?.start ?? this.startAt();\n });\n\n // ── Template handlers ──\n\n /** @internal */\n presetKey(index: number, preset: DateRangePreset<D>): string | number {\n return preset.id ?? preset.label ?? index;\n }\n\n /** @internal */\n isActivePreset(preset: DateRangePreset<D>): boolean {\n return !!preset.id && this.activePresetId() === preset.id;\n }\n\n /** @internal */\n onCalendarRangeSelected(value: unknown): void {\n // `selectedChange` from the calendar emits the range strategy's completed selection\n // (a `DateRange<D>`). Wrap it into a `TwDateRange` for downstream consumers.\n if (value && typeof value === 'object' && 'start' in value && 'end' in value) {\n const r = value as DateRange<D>;\n this.onCalendarSelect()(new TwDateRange<D>(r.start, r.end));\n }\n }\n\n /** @internal */\n onViewChanged(event: ViewChangeEvent): void {\n this.currentView.set(event.to);\n this.onViewChange()(event.to);\n }\n\n /** @internal */\n onStartTime(event: TimePickerChangeEvent<D>): void {\n if (event.source === 'programmatic') return;\n this.onStartTimeChange()(event.value);\n }\n\n /** @internal */\n onEndTime(event: TimePickerChangeEvent<D>): void {\n if (event.source === 'programmatic') return;\n this.onEndTimeChange()(event.value);\n }\n\n // ── Preset listbox keyboard ──\n\n /** @internal Roving tabindex pointer — index of the focusable preset option. */\n readonly activeOptionIndex = signal<number>(0);\n\n constructor() {\n // Drive the directive's `tabindex` signal from `activeOptionIndex`. We\n // use `afterRenderEffect` so the directive instances are already created\n // when we read them (regular `effect` may run before the view init).\n afterRenderEffect(() => {\n const options = this.presetOptions();\n const active = this.activeOptionIndex();\n for (let i = 0; i < options.length; i++) {\n options[i].tabindex.set(i === active ? '0' : '-1');\n }\n });\n }\n\n /** @internal */\n onPresetListKeydown(event: KeyboardEvent): void {\n const options = this.presetOptions();\n const count = options.length;\n if (count === 0) return;\n const current = this.activeOptionIndex();\n const move = (next: number): void => {\n const idx = ((next % count) + count) % count;\n this.activeOptionIndex.set(idx);\n options[idx]?.focus();\n };\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n move(current + 1);\n return;\n case 'ArrowUp':\n event.preventDefault();\n move(current - 1);\n return;\n case 'Home':\n event.preventDefault();\n move(0);\n return;\n case 'End':\n event.preventDefault();\n move(count - 1);\n return;\n case 'Enter':\n case ' ': {\n const preset = this.presets()[current];\n if (preset) {\n event.preventDefault();\n this.handlePreset(preset, current);\n }\n return;\n }\n default:\n return;\n }\n }\n\n /** @internal */\n handlePreset(preset: DateRangePreset<D>, index?: number): void {\n if (typeof index === 'number') this.activeOptionIndex.set(index);\n this.onPresetSelect()(preset);\n }\n\n /** @internal */\n handleToday(): void {\n this.onToday()();\n }\n\n /** @internal */\n handleClear(): void {\n this.onClear()();\n }\n\n /** @internal */\n handleCancel(): void {\n this.onCancel()();\n }\n\n /** @internal */\n handleApply(): void {\n this.onApply()();\n }\n\n /** @internal Moves focus to the active cell of the calendar. Called by the parent after open. */\n focusCalendar(): void {\n this.calendarRef()?.focusActiveCell();\n }\n\n /** @internal Exposes the root overlay element for tests. */\n getElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n}\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n isDevMode,\n linkedSignal,\n model,\n type OnInit,\n output,\n signal,\n type Signal,\n type TemplateRef,\n untracked,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n type AbstractControl,\n type ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { FocusMonitor, LiveAnnouncer } from '@angular/cdk/a11y';\nimport { tv } from 'tailwind-variants';\nimport {\n buildSelectLikePositions,\n type ErrorStateMatcher,\n PickerOverlayCoordinator,\n type RangeBehaviorConfig,\n resolveSelectScrollStrategy,\n type TimePickerFormat,\n type TwColor,\n type TwSize,\n wireErrorState,\n} from '@cdevhub/ngx-tw/core';\nimport {\n FormFieldControl,\n TW_FORM_FIELD,\n TW_FORM_FIELD_CONTROL,\n} from '@cdevhub/ngx-tw/form-field';\nimport {\n calendarValidator,\n type CalendarCell,\n type CalendarValidationErrors,\n type DateClassFn,\n DATE_ADAPTER,\n type DateAdapter,\n type CalendarViewState,\n type DateFilterFn,\n type RangeClickBehavior,\n type TwDateRangeInput,\n TwDateRange,\n} from '@cdevhub/ngx-tw/calendar';\nimport { DateRangePickerOverlayComponent } from './date-range-picker-overlay';\n\n// ── Public types ──────────────────────────────────────────────────\n\n/** Visual style of the date-range-picker trigger. */\nexport type DateRangePickerVariant = 'default' | 'naked';\n\n/** How many months the overlay displays side-by-side. */\nexport type DateRangePickerMonths = 1 | 2;\n\n/** Origin of a value change, used to distinguish user input from programmatic writes. */\nexport type DateRangePickerChangeSource =\n | 'calendar'\n | 'preset'\n | 'time'\n | 'apply'\n | 'clear'\n | 'programmatic';\n\n/** Reason the overlay closed. */\nexport type DateRangePickerCloseReason =\n | 'select'\n | 'apply'\n | 'cancel'\n | 'escape'\n | 'backdrop'\n | 'programmatic';\n\n/** Emitted by `rangeChange` after a committed value update. */\nexport interface DateRangePickerChangeEvent<D> {\n /** The committed range (`null` when cleared). */\n readonly value: TwDateRange<D> | null;\n /** The range before this change. */\n readonly previousValue: TwDateRange<D> | null;\n /** What triggered the change. */\n readonly source: DateRangePickerChangeSource;\n}\n\n/** Emitted by `opened`. */\nexport interface DateRangePickerOpenedEvent {\n /** The trigger element. */\n readonly trigger: HTMLElement;\n}\n\n/** A quick-select preset rendered in the overlay's preset list. */\nexport interface DateRangePreset<D = Date> {\n /** Label shown on the preset button. */\n readonly label: string;\n /** Factory returning the range to apply when this preset is chosen. Called fresh each click so \"today\"-relative presets stay current. */\n readonly range: () => TwDateRange<D>;\n /** Optional identifier — surfaced in `presetSelected` and used to detect the active preset for visual state. */\n readonly id?: string;\n}\n\n// ── Constants ─────────────────────────────────────────────────────\n\nconst DEFAULT_DISPLAY_FORMAT = {\n dateTimeFormat: { year: 'numeric', month: 'short', day: 'numeric' } as Intl.DateTimeFormatOptions,\n};\n\n// ── Helpers ───────────────────────────────────────────────────────\n\nfunction rangesEqual<D>(\n a: TwDateRange<D> | null,\n b: TwDateRange<D> | null,\n adapter: DateAdapter<D>,\n): boolean {\n if (a === null && b === null) return true;\n if (a === null || b === null) return false;\n const startEq =\n (a.start === null && b.start === null) ||\n (a.start !== null && b.start !== null && adapter.sameDate(a.start, b.start));\n const endEq =\n (a.end === null && b.end === null) ||\n (a.end !== null && b.end !== null && adapter.sameDate(a.end, b.end));\n return startEq && endEq;\n}\n\n// ── tv() config ───────────────────────────────────────────────────\n\nconst dateRangePickerVariants = tv(\n {\n slots: {\n root: 'relative inline-flex items-center w-full text-fg transition-[color,border-color,box-shadow] duration-normal motion-reduce:transition-none',\n // `self-stretch` so the trigger — the component's only interactive surface —\n // fills the pinned control height. Without it the button is exactly its line\n // box tall and everything above/below it inside the shell is dead click area\n // (up to 22px at xl).\n trigger:\n 'flex-1 inline-flex items-center gap-2 min-w-0 self-stretch bg-transparent text-left text-fg outline-none border-0 p-0 m-0 cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:cursor-not-allowed',\n startText: 'truncate',\n separator: 'shrink-0 text-fg-subtle',\n endText: 'truncate',\n placeholderText: 'text-fg-subtle truncate flex-1',\n triggerIconWrapper: 'inline-flex items-center justify-center shrink-0 text-fg-muted',\n triggerIcon:\n 'shrink-0 text-fg-muted transition-colors duration-normal motion-reduce:transition-none',\n // size-6 (24×24 CSS px) is the WCAG AA minimum interactive target — bumping past size-5 keeps the affordance hittable without growing the inline row.\n // Held flat across every size. It fits the 30/34/42/46px content boxes at sm..xl. At xs the\n // pinned root is h-6 (24px border-box) so its content box is only 22px: the button is kept at\n // 24×24 anyway — docs/vertical-rhythm.md calls 24px a hard floor — and therefore coincides with\n // the root's *border*-box, overlapping the 1px border row top and bottom. The root's height is\n // unaffected (h-6 is a definite height); only the hover fill meets the border at that density.\n clearButton:\n 'inline-flex items-center justify-center shrink-0 rounded-md text-fg-muted hover:text-fg hover:bg-surface-muted transition-colors duration-normal motion-reduce:transition-none size-6 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n },\n variants: {\n size: {\n xs: {\n root: 'gap-1 text-xs',\n // size-3.5 (14px) is a permitted half-step decorative chevron for xs\n // density where neither size-3 nor size-4 lines up with adjacent text.\n triggerIcon: 'size-3.5',\n },\n sm: {\n root: 'gap-1.5 text-sm',\n triggerIcon: 'size-4',\n },\n md: {\n root: 'gap-2 text-sm',\n triggerIcon: 'size-4',\n },\n lg: {\n root: 'gap-2 text-base',\n triggerIcon: 'size-5',\n },\n xl: {\n root: 'gap-2 text-base',\n triggerIcon: 'size-5',\n },\n },\n variant: {\n default: {\n // No `py-*`: the height is pinned per size in compoundVariants below.\n // See docs/vertical-rhythm.md §3 — padding and a pinned height fight,\n // and under border-box the taller one silently wins.\n root: 'rounded-md border border-border bg-surface px-3 hover:border-border-strong',\n },\n naked: {\n root: 'bg-transparent border-0 rounded-none p-0 focus-within:outline-none',\n },\n },\n open: { true: { triggerIcon: 'text-fg' }, false: {} },\n disabled: {\n true: { root: 'opacity-50 pointer-events-none cursor-not-allowed' },\n false: {},\n },\n focused: { true: {}, false: {} },\n errorState: { true: {}, false: {} },\n color: {\n primary: {},\n secondary: {},\n accent: {},\n neutral: {},\n info: {},\n success: {},\n warning: {},\n error: {},\n },\n },\n compoundVariants: [\n // ── Pinned control height (docs/vertical-rhythm.md §1) ──\n // Only the `default` variant carries a height. `naked` means somebody else\n // owns the box — `<tw-form-field>` auto-nakeds this picker and supplies its\n // own bordered, padded controlWrapper, so pinning naked would stack 36px on\n // top of the form-field's `py-2` and inflate a wrapped picker at every size.\n { variant: 'default', size: 'xs', class: { root: 'h-6' } },\n { variant: 'default', size: 'sm', class: { root: 'h-8' } },\n { variant: 'default', size: 'md', class: { root: 'h-9' } },\n { variant: 'default', size: 'lg', class: { root: 'h-11' } },\n { variant: 'default', size: 'xl', class: { root: 'h-12' } },\n\n { variant: 'default', focused: true, color: 'primary', class: { root: 'border-primary-500' } },\n { variant: 'default', focused: true, color: 'secondary', class: { root: 'border-secondary-500' } },\n { variant: 'default', focused: true, color: 'accent', class: { root: 'border-accent-500' } },\n { variant: 'default', focused: true, color: 'neutral', class: { root: 'border-border-strong' } },\n { variant: 'default', focused: true, color: 'info', class: { root: 'border-info-500' } },\n { variant: 'default', focused: true, color: 'success', class: { root: 'border-success-500' } },\n { variant: 'default', focused: true, color: 'warning', class: { root: 'border-warning-500' } },\n { variant: 'default', focused: true, color: 'error', class: { root: 'border-error-500' } },\n { variant: 'default', errorState: true, class: { root: 'border-error-500' } },\n ],\n defaultVariants: {\n size: 'md',\n variant: 'default',\n open: false,\n disabled: false,\n errorState: false,\n focused: false,\n color: 'primary',\n },\n },\n { twMerge: true },\n);\n\n// ── ID generator ──────────────────────────────────────────────────\n\nlet nextDateRangePickerId = 0;\n\n/**\n * ARIA date-picker dialog for two-endpoint date ranges. Composes `tw-calendar`\n * in `selectionMode=\"range\"` inside a CDK overlay. Supports optional time\n * selection via embedded `tw-time-picker`s and optional quick-select presets.\n *\n * All three Angular forms strategies (reactive, template-driven, signal-forms)\n * are supported via `ControlValueAccessor`, and the component integrates with\n * `<tw-form-field>` by implementing `FormFieldControl`.\n *\n * All date operations go through the injected `DateAdapter<D>`; call\n * `provideNativeDateAdapter()` in your app providers to bootstrap the default.\n */\n@Component({\n selector: 'tw-date-range-picker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: TW_FORM_FIELD_CONTROL,\n useExisting: forwardRef(() => DateRangePickerComponent),\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DateRangePickerComponent),\n multi: true,\n },\n // Angular v22 routes a CVA component's own NG_VALIDATORS through the\n // value-accessor channel. The runtime `ngControl.valueAccessor = this`\n // assignment below happens too late for that wiring, so `validate()` is\n // never invoked and every calendar error code silently disappears. The\n // static provider is what registers this component on the channel in time.\n // Mirrors `calendar.ts`, which has always provided both tokens.\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateRangePickerComponent),\n multi: true,\n },\n PickerOverlayCoordinator,\n ],\n template: `\n <button\n #trigger\n type=\"button\"\n [id]=\"hostId\"\n [class]=\"triggerClasses()\"\n [attr.role]=\"'combobox'\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-expanded]=\"open() ? 'true' : 'false'\"\n [attr.aria-controls]=\"dialogId\"\n [attr.aria-label]=\"triggerAccessibleName() || null\"\n [attr.aria-labelledby]=\"ariaLabelledby() || null\"\n [attr.aria-describedby]=\"describedBy() || null\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"errorState() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n [attr.data-variant]=\"resolvedVariant()\"\n [disabled]=\"isDisabled()\"\n (click)=\"onTriggerClick()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n <span class=\"flex-1 inline-flex items-center gap-2 min-w-0\">\n @if (internalValue() !== null) {\n <span [class]=\"startTextClasses()\">{{ startDisplay() }}</span>\n <span [class]=\"separatorClasses()\">{{ rangeSeparator() }}</span>\n <span [class]=\"endTextClasses()\">{{ endDisplay() }}</span>\n } @else {\n <span [class]=\"placeholderClasses()\">{{ placeholderDisplay() }}</span>\n }\n </span>\n\n <span [class]=\"triggerIconWrapperClasses()\">\n <ng-content select=\"[slot=trigger-icon]\">\n <svg\n [class]=\"triggerIconClasses()\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n </ng-content>\n </span>\n </button>\n\n @if (showClear() && !isEmpty() && !isDisabled()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n [class]=\"clearButtonClasses()\"\n [attr.aria-label]=\"clearAriaLabel()\"\n (click)=\"onClearClick($event)\"\n >\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" class=\"size-3\">\n <path\n fill-rule=\"evenodd\"\n d=\"M10 8.586 4.707 3.293a1 1 0 0 0-1.414 1.414L8.586 10l-5.293 5.293a1 1 0 1 0 1.414 1.414L10 11.414l5.293 5.293a1 1 0 0 0 1.414-1.414L11.414 10l5.293-5.293a1 1 0 0 0-1.414-1.414L10 8.586Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n }\n `,\n host: {\n '[class]': 'rootClasses()',\n },\n})\nexport class DateRangePickerComponent<D = Date>\n extends FormFieldControl<TwDateRange<D>>\n implements ControlValueAccessor, Validator, OnInit\n{\n // ── Inputs ──\n\n /** Id on the trigger element. Auto-generated when not provided. Used by the form-field's `<label for>` attribute. */\n readonly idInput = input<string | undefined>(undefined, { alias: 'id' });\n\n /** Earliest selectable date for either endpoint. Presets and calendar cells earlier than this are rejected or disabled. Defaults to `null`. */\n readonly minDate = input<D | null>(null);\n\n /** Latest selectable date for either endpoint. Presets and calendar cells later than this are rejected or disabled. Defaults to `null`. */\n readonly maxDate = input<D | null>(null);\n\n /** Per-date predicate — return `false` to disable. Applied in both calendars. Presets that fall on a filtered date are skipped. Defaults to `null`. */\n readonly dateFilter = input<DateFilterFn<D> | null>(null);\n\n /** Which calendar view opens first — `'day'`, `'month'`, or `'year'`. Defaults to `'day'`. */\n readonly startView = input<CalendarViewState>('day');\n\n /** Date the left calendar focuses on when opened with no value. Falls back to today. Ignored when a value is already set. Defaults to `null`. */\n readonly startAt = input<D | null>(null);\n\n /** 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. */\n readonly format = input<unknown>(DEFAULT_DISPLAY_FORMAT);\n\n /** Separator rendered between the two formatted endpoints in the trigger. Defaults to `\" – \"`. */\n readonly rangeSeparator = input<string>(' – ');\n\n /** Placeholder text shown in the trigger for an empty `start` endpoint. Defaults to `'Start date'`. */\n readonly emptyStartLabel = input<string>('Start date');\n\n /** Placeholder text shown in the trigger for an empty `end` endpoint. Defaults to `'End date'`. */\n readonly emptyEndLabel = input<string>('End date');\n\n /** When set, overrides the composed `${emptyStartLabel}${rangeSeparator}${emptyEndLabel}` placeholder with a single string. Defaults to `undefined`. */\n readonly placeholder = input<string | undefined>(undefined);\n\n /** When true, the trigger cannot open the overlay and `aria-disabled=\"true\"` is set. Defaults to `false`. */\n readonly disabledInput = input<boolean, unknown>(false, {\n alias: 'disabled',\n transform: booleanAttribute,\n });\n\n /** When true, exposes `aria-required=\"true\"`. `Validators.required` on a bound `NgControl` is also honoured. Defaults to `false`. */\n readonly requiredInput = input<boolean, unknown>(false, {\n alias: 'required',\n transform: booleanAttribute,\n });\n\n /** Trigger padding, font size, and calendar cell density. Uses the shared `TwSize` scale. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** Semantic color for focused border, calendar range fill, and preset active state. Defaults to `'primary'`. */\n readonly color = input<TwColor>('primary');\n\n /** 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'`. */\n readonly variant = input<DateRangePickerVariant | undefined>(undefined);\n\n /** How many months the overlay shows side-by-side. `2` is the standard range-picker layout; use `1` for compact contexts. Defaults to `2`. */\n readonly numberOfMonths = input<DateRangePickerMonths>(2);\n\n /** 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. Defaults to an empty array. */\n readonly presets = input<readonly DateRangePreset<D>[]>([]);\n\n /** Whether to show a clear-button affordance inside the trigger when a value is set. Defaults to `true` — most form pickers expect the inline clear, matching `<tw-input>`'s clear button; without it consumers must wire one themselves. */\n readonly showClear = input<boolean>(true);\n\n /** 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`. */\n readonly minRangeLength = input<number | null>(null);\n\n /** 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`. */\n readonly maxRangeLength = input<number | null>(null);\n\n /**\n * Range-mode behavior knobs forwarded to the embedded calendar. Accepts a\n * partial config — unset fields use the documented defaults on\n * `RangeBehaviorConfig`. Defaults: `{ allowSingleDayRange: true, persistPartialRange: true, allowBackwardRange: false, disableRangesCrossingDisabledDates: false }`.\n */\n readonly rangeBehavior = input<Partial<RangeBehaviorConfig>>({});\n\n /** 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. */\n readonly rangeClickBehavior = input<RangeClickBehavior>('restart');\n\n /** Override first day of week (0=Sun, 1=Mon) on the embedded calendar. Falls back to the adapter's default. */\n readonly firstDayOfWeek = input<number | null>(null);\n\n /** 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`. Defaults to `null`. */\n readonly locale = input<string | null>(null);\n\n /** Function producing per-cell CSS classes on the embedded calendar. Defaults to `null`. */\n readonly dateClass = input<DateClassFn<D> | null>(null);\n\n /** Optional cell-content template, forwarded to the embedded calendar. Use to customize cell visuals beyond `dateClass`. Defaults to `null`. */\n readonly cellTemplate = input<TemplateRef<{ $implicit: CalendarCell<D> }> | null>(null);\n\n /** 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`. */\n readonly showActions = input<boolean>(false);\n\n /** 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`. */\n readonly showTime = input<boolean>(false);\n\n /** Format of the embedded time-pickers. `'24h'` renders 00–23; `'12h'` adds an AM/PM toggle. Defaults to `'24h'`. */\n readonly timeFormat = input<TimePickerFormat>('24h');\n\n /** Whether the embedded time-pickers expose a seconds field. Defaults to `false`. */\n readonly showSeconds = input<boolean>(false);\n\n /** Step for the embedded time-pickers' hour fields. Defaults to `1`. */\n readonly hourStep = input<number>(1);\n\n /** Step for the embedded time-pickers' minute fields. Defaults to `1`. */\n readonly minuteStep = input<number>(1);\n\n /** Step for the embedded time-pickers' second fields. Defaults to `1`. */\n readonly secondStep = input<number>(1);\n\n /** Label for the `Today` action in the overlay's action bar. Defaults to `'Today'`. */\n readonly todayLabel = input<string>('Today');\n\n /** Label for the `Clear` action in the overlay's action bar. Defaults to `'Clear'`. */\n readonly clearLabel = input<string>('Clear');\n\n /** Label for the `Cancel` action in the overlay's action bar. Defaults to `'Cancel'`. */\n readonly cancelLabel = input<string>('Cancel');\n\n /** Label for the `Apply` action in the overlay's action bar. Defaults to `'Apply'`. */\n readonly applyLabel = input<string>('Apply');\n\n /** Extra class(es) applied to the overlay panel element. `twMerge` resolves conflicts with internal classes. Defaults to an empty string. */\n readonly panelClass = input<string | readonly string[]>('');\n\n /** CDK scroll strategy for the overlay. Defaults to `'reposition'`. */\n readonly scrollStrategy = input<'reposition' | 'close' | 'block'>('reposition');\n\n /** Pixel distance between trigger and overlay. Defaults to `4`. */\n readonly offset = input<number>(4);\n\n /** Accessible label for the clear button. Defaults to `'Clear date range'`. */\n readonly clearAriaLabel = input<string>('Clear date range');\n\n /** Per-instance override of the `ErrorStateMatcher`. When omitted, uses the injected `TW_ERROR_STATE_MATCHER`. Defaults to `undefined`. */\n readonly errorStateMatcher = input<ErrorStateMatcher | undefined>(undefined);\n\n /** Accessible name for the trigger. Required when no visible label is supplied via `tw-form-field` or an external `aria-labelledby`. Alias: `aria-label`. Defaults to `undefined`. */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n /** ID of an external element that labels the trigger. Alias: `aria-labelledby`. Defaults to `undefined`. */\n readonly ariaLabelledby = input<string | undefined>(undefined, { alias: 'aria-labelledby' });\n\n /** Consumer-supplied `aria-describedby` ids. The form-field preserves these when merging hint/error ids. Alias: `aria-describedby`. Defaults to `undefined`. */\n readonly userAriaDescribedByInput = input<string | undefined>(undefined, {\n alias: 'aria-describedby',\n });\n\n // ── Models (two-way) ──\n\n /** Two-way bound selected range. `null` when no selection. Setting programmatically updates the trigger display and the calendar selection; it does NOT trigger `onChange`. Defaults to `null`. */\n readonly value = model<TwDateRange<D> | null>(null);\n\n /** Two-way bound open state of the overlay. Setting to `true` opens; setting to `false` closes. Defaults to `false`. */\n readonly open = model(false);\n\n // ── Outputs ──\n\n /** Fires after the overlay's enter animation completes. Payload is the trigger element. */\n readonly opened = output<DateRangePickerOpenedEvent>();\n\n /** Fires after the overlay's leave animation completes. Payload is the reason it closed. */\n readonly closed = output<DateRangePickerCloseReason>();\n\n /** Fires after a commit — either from completing a range in the calendar, picking a preset, or applying via the action bar. */\n readonly rangeChange = output<DateRangePickerChangeEvent<D>>();\n\n /** Fires when the user picks a preset from the list. Payload is the preset descriptor. Fires in addition to `rangeChange`. */\n readonly presetSelected = output<DateRangePreset<D>>();\n\n // ── Injected deps ──\n\n private readonly adapter = inject<DateAdapter<D>>(DATE_ADAPTER);\n private readonly overlayService = inject(Overlay);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n private readonly coordinator = inject(PickerOverlayCoordinator);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly formField = inject(TW_FORM_FIELD, { optional: true });\n // Lazy NgControl lookup avoids the construction-time cycle with NG_VALIDATORS\n // (the host registers itself as a validator via `useExisting`, and NgModel's\n // constructor pulls the validator set — eager `inject(NgControl, {self})`\n // would resolve to this component while it is still being created).\n private ngControl: NgControl | null = null;\n\n // ── View refs ──\n\n private readonly triggerRef = viewChild.required<ElementRef<HTMLButtonElement>>('trigger');\n\n // ── Identity ──\n\n private readonly uid = nextDateRangePickerId++;\n /** @internal */\n readonly hostId = `tw-date-range-picker-${this.uid}`;\n /** @internal */\n readonly dialogId = `${this.hostId}-dialog`;\n\n // ── Internal state ──\n\n /** @internal Decouples programmatic writes from user commits. */\n readonly internalValue = linkedSignal<TwDateRange<D> | null>(() => this.value());\n /** @internal */\n readonly parseError = signal(false);\n /** @internal */\n readonly rangeError = signal(false);\n /** @internal */\n readonly focusedSignal = signal(false);\n\n private readonly cvaDisabled = signal(false);\n private readonly describedByIdsSignal = signal<readonly string[]>([]);\n private readonly lastValueBeforeOpen = signal<TwDateRange<D> | null>(null);\n private readonly pendingRange = signal<TwDateRange<D> | null>(null);\n private readonly currentView = signal<CalendarViewState>('day');\n\n /** @internal Shared `errorState` / `required` / `errors` derivation — see `wireErrorState`. */\n private readonly errorWiring = wireErrorState({\n ngControl: () => this.ngControl,\n matcher: () => this.errorStateMatcher(),\n required: () => this.requiredInput(),\n track: [() => this.focusedSignal()],\n // An unparseable entry or an out-of-range date is an error regardless of validator status.\n errorStateOverride: () => (this.parseError() || this.rangeError() ? true : undefined),\n });\n\n private onChange: (value: TwDateRange<D> | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n // Overlay lifecycle bookkeeping. Both are PLAIN FIELDS, not signals, and that\n // is load-bearing: the lifecycle effect in the constructor both reads and\n // writes them, so as signals they would form a read → write → re-trigger\n // cycle of exactly the shape CLAUDE.md forbids. Demoting them is the fix\n // `popover.ts` and `command-palette.ts` already use — see the comment on that\n // effect. Do not promote either back to `signal()`.\n private overlayInstance: DateRangePickerOverlayComponent<D> | null = null;\n private closing = false;\n\n // The one piece of overlay state that must stay a signal: it is the *only*\n // dependency that re-runs the overlay state-push effect when the panel\n // attaches. Written in openOverlay / closeOverlay, never read by the\n // lifecycle effect, so it cannot cycle. Mirrors `command-palette.ts`.\n private readonly isAttached = signal(false);\n\n // ── Derived state ──\n\n /** @internal */\n readonly isDisabled = computed(() => {\n this.errorWiring.rev();\n return this.disabledInput() || this.cvaDisabled() || !!this.ngControl?.disabled;\n });\n\n /** @internal Effective variant — auto-naked when wrapped in tw-form-field. */\n readonly resolvedVariant = computed<DateRangePickerVariant>(\n () => this.variant() ?? (this.formField ? 'naked' : 'default'),\n );\n\n /** @internal */\n readonly isEmpty = computed(() => {\n const v = this.internalValue();\n return v === null || (v.start === null && v.end === null);\n });\n\n /** @internal Effective display format — folds hour/minute (and optional seconds) into the default when `showTime` is on and the user hasn't overridden `format`. */\n readonly effectiveFormat = computed<unknown>(() => {\n const fmt = this.format();\n if (!this.showTime() || fmt !== DEFAULT_DISPLAY_FORMAT) return fmt;\n const hour12 = this.timeFormat() === '12h';\n const base: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n hour12,\n };\n if (this.showSeconds()) base.second = '2-digit';\n return { dateTimeFormat: base };\n });\n\n /** @internal */\n readonly startDisplay = computed(() => {\n const v = this.internalValue();\n if (v === null) return '';\n return v.start !== null\n ? this.adapter.format(v.start, this.effectiveFormat())\n : this.emptyStartLabel();\n });\n\n /** @internal */\n readonly endDisplay = computed(() => {\n const v = this.internalValue();\n if (v === null) return '';\n return v.end !== null\n ? this.adapter.format(v.end, this.effectiveFormat())\n : this.emptyEndLabel();\n });\n\n /** @internal */\n readonly placeholderDisplay = computed(() => {\n const custom = this.placeholder();\n if (custom) return custom;\n return `${this.emptyStartLabel()}${this.rangeSeparator()}${this.emptyEndLabel()}`;\n });\n\n /** @internal Accessible name composed from explicit aria-label plus the current range. */\n readonly triggerAccessibleName = computed<string | undefined>(() => {\n const label = this.ariaLabel();\n if (this.ariaLabelledby()) return undefined;\n const v = this.internalValue();\n if (label && v !== null && v.start !== null && v.end !== null) {\n const start = this.adapter.format(v.start, this.effectiveFormat());\n const end = this.adapter.format(v.end, this.effectiveFormat());\n return `${label}. Current range: ${start} to ${end}.`;\n }\n if (label) return label;\n return undefined;\n });\n\n /** @internal */\n readonly activePresetId = computed<string | undefined>(() => {\n const v = this.internalValue();\n if (v === null) return undefined;\n for (const preset of this.presets()) {\n if (!preset.id) continue;\n let candidate: TwDateRange<D>;\n try {\n candidate = preset.range();\n } catch {\n continue;\n }\n if (rangesEqual(candidate, v, this.adapter)) return preset.id;\n }\n return undefined;\n });\n\n /** @internal */\n readonly describedBy = computed(() => {\n const extra = this.describedByIdsSignal();\n const user = this.userAriaDescribedByInput();\n const merged = [...extra];\n if (user) {\n for (const id of user.split(/\\s+/)) {\n if (id) merged.push(id);\n }\n }\n return merged.length ? merged.join(' ') : '';\n });\n\n // ── tv() output ──\n\n private readonly variantResult = computed(() =>\n dateRangePickerVariants({\n size: this.size(),\n variant: this.resolvedVariant(),\n open: this.open(),\n disabled: this.isDisabled(),\n errorState: this.errorState(),\n focused: this.focusedSignal(),\n color: this.color(),\n }),\n );\n\n /** @internal */\n readonly rootClasses = computed(() => this.variantResult().root());\n /** @internal */\n readonly triggerClasses = computed(() => this.variantResult().trigger());\n /** @internal */\n readonly startTextClasses = computed(() => this.variantResult().startText());\n /** @internal */\n readonly separatorClasses = computed(() => this.variantResult().separator());\n /** @internal */\n readonly endTextClasses = computed(() => this.variantResult().endText());\n /** @internal */\n readonly placeholderClasses = computed(() => this.variantResult().placeholderText());\n /** @internal */\n readonly triggerIconClasses = computed(() => this.variantResult().triggerIcon());\n /** @internal */\n readonly triggerIconWrapperClasses = computed(() => this.variantResult().triggerIconWrapper());\n /** @internal */\n readonly clearButtonClasses = computed(() => this.variantResult().clearButton());\n\n // ── FormFieldControl impl ──\n\n /** @internal */\n readonly id: Signal<string> = computed(() => this.idInput() ?? this.hostId);\n /** @internal */\n readonly focused: Signal<boolean> = this.focusedSignal.asReadonly();\n /** @internal */\n readonly empty: Signal<boolean> = this.isEmpty;\n /** @internal */\n readonly disabled: Signal<boolean> = this.isDisabled;\n /** @internal */\n readonly required: Signal<boolean> = this.errorWiring.required;\n\n /** @internal */\n readonly errorState: Signal<boolean> = this.errorWiring.errorState;\n\n /**\n * @internal Active validation errors map from the bound `NgControl` (or `null` when the\n * control reports none / is unbound). This is what `[twError match=\"…\"]` filters on inside a\n * `<tw-form-field>`; without it every `match`-targeted message — including the\n * `calendarMinDate` / `calendarMaxDate` / `calendarInvalidRange` / `calendarRangeTooShort` /\n * `calendarRangeTooLong` codes this component's `NG_VALIDATORS` apparatus exists to produce —\n * stays permanently hidden. (Authoritative key list: `CalendarValidationErrors` in\n * `calendar.types.ts`.)\n */\n override readonly errors: Signal<Record<string, unknown> | null> = this.errorWiring.errors;\n\n /** @internal */\n readonly controlType = 'date-range-picker';\n /** @internal */\n readonly userAriaDescribedBy: Signal<string | undefined> = computed(() =>\n this.userAriaDescribedByInput(),\n );\n\n // ── Constructor ──\n\n constructor() {\n super();\n\n // Mirror the `open` model into the overlay lifecycle.\n //\n // The only tracked reads here are `open()` and `isDisabled()`. Everything\n // this effect *writes* — `overlayInstance`, `closing` — is a plain field,\n // never a signal, so opening or closing cannot re-trigger the effect that\n // ordered it. That is the whole reason those two are declared as fields\n // (see their declaration); promoting either back to `signal()` recreates\n // the read → write → re-trigger cycle CLAUDE.md forbids.\n //\n // `openOverlay()` / `closeOverlay()` do write `isAttached`, but this effect\n // never reads it, so that write is a one-way hand-off to the state-push\n // effect below and terminates there.\n //\n // The body is wrapped in `untracked()` because demoting the two fields is\n // NOT sufficient on its own. `openOverlay()` reads roughly twenty-five\n // inputs while pushing them into the freshly attached panel, and it writes\n // two signals it then reads straight back. Called from the tracked phase,\n // every one of those reads becomes a dependency of THIS effect, which both\n // recreates the forbidden write-then-read-back shape and re-runs the whole\n // lifecycle on any of those twenty-five inputs changing. Tracked reads are\n // now exactly `open()` and `isDisabled()`, which is what the paragraph\n // above claims — and only now true.\n effect(() => {\n const shouldOpen = this.open();\n const disabled = this.isDisabled();\n untracked(() => {\n if (disabled && this.overlayInstance) {\n this.closeOverlay('programmatic');\n return;\n }\n if (shouldOpen && !this.overlayInstance && !disabled && !this.closing) {\n this.openOverlay();\n } else if (!shouldOpen && this.overlayInstance && !this.closing) {\n this.closeOverlay('programmatic');\n }\n });\n });\n\n // Push config into the overlay whenever anything relevant changes.\n // Reads happen in the tracked phase; writes to the overlay instance are\n // wrapped in `untracked()` so they never feed back into this effect.\n //\n // `isAttached()` MUST be read first and unconditionally: it is this\n // effect's only dependency on the overlay's existence, so it is what makes\n // the initial push happen when the panel attaches (`overlayInstance` is a\n // plain field and is invisible to the signal graph). Do not reorder it\n // behind the null check — the effect would then never re-run on open.\n effect(() => {\n this.isAttached();\n const instance = this.overlayInstance;\n if (!instance) return;\n const size = this.size();\n const color = this.color();\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const dateFilter = this.dateFilter();\n const startView = this.startView();\n const startAt = this.startAt();\n const numberOfMonths = this.numberOfMonths();\n const pendingRange = this.pendingRange();\n const currentView = this.currentView();\n const presets = this.presets();\n const activePresetId = this.activePresetId();\n const showActions = this.showActions();\n const showTime = this.showTime();\n const timeFormat = this.timeFormat();\n const showSeconds = this.showSeconds();\n const hourStep = this.hourStep();\n const minuteStep = this.minuteStep();\n const secondStep = this.secondStep();\n const todayLabel = this.todayLabel();\n const clearLabel = this.clearLabel();\n const cancelLabel = this.cancelLabel();\n const applyLabel = this.applyLabel();\n const rangeSeparator = this.rangeSeparator();\n const dialogAriaLabel = this.resolveDialogAriaLabel();\n const panelClassValue = this.resolvePanelClass();\n const minRangeLength = this.minRangeLength();\n const maxRangeLength = this.maxRangeLength();\n const rangeBehavior = this.rangeBehavior();\n const rangeClickBehavior = this.rangeClickBehavior();\n const firstDayOfWeek = this.firstDayOfWeek();\n const locale = this.locale();\n const dateClass = this.dateClass();\n const cellTemplate = this.cellTemplate();\n untracked(() => {\n instance.size.set(size);\n instance.color.set(color);\n instance.minDate.set(minDate);\n instance.maxDate.set(maxDate);\n instance.dateFilter.set(dateFilter);\n instance.startView.set(startView);\n instance.startAt.set(startAt);\n instance.numberOfMonths.set(numberOfMonths);\n instance.pendingRange.set(pendingRange);\n instance.currentView.set(currentView);\n instance.presets.set(presets);\n instance.activePresetId.set(activePresetId);\n instance.showActions.set(showActions);\n instance.showTime.set(showTime);\n instance.timeFormat.set(timeFormat);\n instance.showSeconds.set(showSeconds);\n instance.hourStep.set(hourStep);\n instance.minuteStep.set(minuteStep);\n instance.secondStep.set(secondStep);\n instance.todayLabel.set(todayLabel);\n instance.clearLabel.set(clearLabel);\n instance.cancelLabel.set(cancelLabel);\n instance.applyLabel.set(applyLabel);\n instance.rangeSeparator.set(rangeSeparator);\n instance.dialogId.set(this.dialogId);\n instance.dialogAriaLabel.set(dialogAriaLabel);\n instance.panelClassValue.set(panelClassValue);\n instance.minRangeLength.set(minRangeLength);\n instance.maxRangeLength.set(maxRangeLength);\n instance.rangeBehavior.set(rangeBehavior);\n instance.rangeClickBehavior.set(rangeClickBehavior);\n instance.firstDayOfWeek.set(firstDayOfWeek);\n instance.locale.set(locale);\n instance.dateClass.set(dateClass);\n instance.cellTemplate.set(cellTemplate);\n });\n });\n\n // Push locale into the adapter so the trigger display tracks the picker's\n // locale; the calendar runs its own setLocale internally for its grid.\n effect(() => {\n const locale = this.locale();\n if (locale === null) return;\n untracked(() => this.adapter.setLocale(locale));\n });\n\n // Re-run validation whenever a constraint input changes so consumer\n // statusChanges fires (mirrors the calendar's pattern).\n effect(() => {\n this.minDate();\n this.maxDate();\n this.dateFilter();\n this.minRangeLength();\n this.maxRangeLength();\n untracked(() => this.validatorOnChange());\n });\n\n // Dev-mode accessible-name warning.\n afterNextRender(() => {\n if (!isDevMode()) return;\n const hasLabel =\n !!this.ariaLabel() ||\n !!this.ariaLabelledby() ||\n !!this.formField?.hasLabel();\n if (!hasLabel) {\n console.warn(\n '[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>.',\n );\n }\n });\n\n // Monitor focus on the host (descendants-aware so the overlay counts while open).\n const monitorSub = this.focusMonitor\n .monitor(this.elementRef, true)\n .subscribe((origin) => {\n const wasFocused = this.focusedSignal();\n this.focusedSignal.set(!!origin);\n if (wasFocused && !origin) {\n this.onTouched();\n this.errorWiring.bump();\n }\n });\n\n this.destroyRef.onDestroy(() => {\n monitorSub.unsubscribe();\n this.focusMonitor.stopMonitoring(this.elementRef);\n // The coordinator's own DestroyRef.onDestroy disposes the overlay and\n // clears its timers; we only need to drop the local instance reference.\n this.overlayInstance = null;\n this.isAttached.set(false);\n });\n }\n\n ngOnInit(): void {\n // Resolve the bound NgControl lazily (see field declaration). By the time\n // ngOnInit runs the host's FormControlName / NgModel is fully constructed.\n this.ngControl = this.injector.get(NgControl, null, {\n self: true,\n optional: true,\n });\n // There is deliberately NO `ngControl.valueAccessor = this` here, and none is needed:\n // registration happens through the static NG_VALUE_ACCESSOR provider on this component,\n // which `FormControlName` / `NgModel` resolve while constructing on the same element —\n // long before ngOnInit. An assignment at this point would be a pure no-op on both the\n // classic and the signal-forms path.\n //\n // Do NOT read the absence of a runtime assignment as evidence the static provider is\n // optional. It is the only registration this component has: delete it and `validate()`\n // is never invoked, so every calendar error code silently disappears with no test failure\n // outside the guard spec. See the provider's own comment above.\n //\n // Bump the revision so any control-derived signal that was already read while\n // `ngControl` was still `null` recomputes. `date-picker` and `time-picker` have\n // always done this; this component's omission was an asymmetry preserved\n // verbatim through the `wireErrorState` extraction.\n //\n // Honest scope, measured rather than assumed: **no test distinguishes this\n // line.** Removing it leaves the whole suite green, including the\n // `aria-required from the bound control` guard below. `required` and its\n // siblings are `computed()`, and a `computed()` is lazy — nothing reads them\n // before `ngOnInit` runs, so in every path exercised today there is no stale\n // cache to invalidate and the bump is a no-op. It is kept for symmetry with\n // the two sibling pickers, and as a guard against a future eager read (a\n // parent querying `required` during its own first pass would cache the\n // `null`-era answer permanently). Do not cite it as a bug fix.\n this.errorWiring.bump();\n\n this.errorWiring.connect();\n }\n\n // ── Public imperative API ──\n\n /** Opens the overlay. No-op when disabled or already open. */\n openPicker(): void {\n if (this.isDisabled() || this.open()) return;\n this.open.set(true);\n }\n\n /** Closes the overlay. No-op when already closed. */\n closePicker(): void {\n if (!this.open()) return;\n this.open.set(false);\n }\n\n /** Toggles the overlay's open state. */\n toggle(): void {\n if (this.open()) this.closePicker();\n else this.openPicker();\n }\n\n /** Clears the current range and emits `rangeChange` with `source: 'clear'`. */\n clear(): void {\n this.commit(null, 'clear');\n }\n\n // ── Trigger interactions ──\n\n /** @internal */\n onTriggerClick(): void {\n if (this.isDisabled()) return;\n this.toggle();\n }\n\n /** @internal */\n onTriggerKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n if (event.altKey && event.key === 'ArrowDown') {\n event.preventDefault();\n this.openPicker();\n return;\n }\n if (event.altKey && event.key === 'ArrowUp') {\n if (this.open()) {\n event.preventDefault();\n this.closeOverlay('cancel', /* restore */ true);\n }\n return;\n }\n if (event.key === 'Escape' && this.open()) {\n event.preventDefault();\n this.closeOverlay('escape', /* restore */ true);\n }\n }\n\n /** @internal */\n onClearClick(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.clear();\n }\n\n // ── Commit ──\n\n private commit(next: TwDateRange<D> | null, source: DateRangePickerChangeSource): void {\n const normalised = this.normalizeRange(next);\n const previous = this.internalValue();\n if (rangesEqual(normalised, previous, this.adapter) && source !== 'programmatic') {\n // No change from a user action — still mark as touched for CVA parity,\n // but skip onChange and the rangeChange emission.\n this.onTouched();\n return;\n }\n this.internalValue.set(normalised);\n this.value.set(normalised);\n this.parseError.set(false);\n this.rangeError.set(false);\n\n if (source !== 'programmatic') {\n this.onChange(normalised);\n this.onTouched();\n this.announce(normalised);\n }\n this.rangeChange.emit({ value: normalised, previousValue: previous, source });\n }\n\n private announce(value: TwDateRange<D> | null): void {\n if (value === null) {\n this.liveAnnouncer.announce('Date range cleared', 'polite');\n return;\n }\n const fmt = this.effectiveFormat();\n if (value.start !== null && value.end !== null) {\n const start = this.adapter.format(value.start, fmt);\n const end = this.adapter.format(value.end, fmt);\n this.liveAnnouncer.announce(`${start} to ${end} selected`, 'polite');\n } else if (value.start !== null) {\n const start = this.adapter.format(value.start, fmt);\n this.liveAnnouncer.announce(`${start} selected. Pick end date.`, 'polite');\n }\n }\n\n private normalizeRange(v: TwDateRange<D> | null): TwDateRange<D> | null {\n if (v === null) return null;\n if (v.start === null && v.end === null) return null;\n return v;\n }\n\n private clampRange(range: TwDateRange<D>): TwDateRange<D> {\n const min = this.minDate();\n const max = this.maxDate();\n const start = range.start !== null ? this.adapter.clampDate(range.start, min, max) : null;\n const end = range.end !== null ? this.adapter.clampDate(range.end, min, max) : null;\n return new TwDateRange<D>(start, end);\n }\n\n private isRangeValid(range: TwDateRange<D>): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n const filter = this.dateFilter();\n const endpoints = [range.start, range.end].filter((d): d is D => d !== null);\n for (const d of endpoints) {\n if (!this.adapter.isValid(d)) return false;\n if (min && this.adapter.compare(d, min) < 0) return false;\n if (max && this.adapter.compare(d, max) > 0) return false;\n if (filter && !filter(d)) return false;\n }\n // Same-day ranges with time mode: end time must not be earlier than start time.\n if (\n this.showTime() &&\n range.start !== null &&\n range.end !== null &&\n this.adapter.sameDate(range.start, range.end) &&\n this.adapter.compare(range.start, range.end) > 0\n ) {\n return false;\n }\n // Range-length constraints (Phase 4 codes).\n if (range.start !== null && range.end !== null) {\n const minLen = this.minRangeLength();\n const maxLen = this.maxRangeLength();\n if (minLen !== null || maxLen !== null) {\n const length = this.rangeLengthInDays(range.start, range.end);\n if (minLen !== null && length < minLen) return false;\n if (maxLen !== null && length > maxLen) return false;\n }\n }\n return true;\n }\n\n private rangeLengthInDays(start: D, end: D): number {\n // Inclusive day count (start + 1 day = length 2). Mirrors\n // `rangeLengthDays` in calendar.utils so picker-level validation matches\n // the calendar's commit-time validation.\n const [lo, hi] =\n this.adapter.compare(start, end) <= 0 ? [start, end] : [end, start];\n const a = this.adapter.startOfDay(lo);\n const b = this.adapter.startOfDay(hi);\n let count = 1;\n let cursor = a;\n while (this.adapter.compare(cursor, b) < 0) {\n cursor = this.adapter.addDays(cursor, 1);\n count++;\n }\n return count;\n }\n\n // ── Overlay lifecycle ──\n\n private openOverlay(): void {\n const current = this.internalValue();\n this.lastValueBeforeOpen.set(current);\n this.pendingRange.set(current);\n this.currentView.set(this.startView());\n\n const result = this.coordinator.open<DateRangePickerOverlayComponent<D>>({\n origin: this.elementRef,\n portalComponent: DateRangePickerOverlayComponent as unknown as new (\n ...args: unknown[]\n ) => DateRangePickerOverlayComponent<D>,\n viewContainerRef: this.viewContainerRef,\n injector: this.injector,\n positions: buildSelectLikePositions(this.offset()),\n scrollStrategy: resolveSelectScrollStrategy(this.scrollStrategy(), this.overlayService),\n panelClass: 'tw-date-range-picker-panel',\n });\n if (!result) return;\n\n const instance = result.instance;\n instance.onCalendarSelect.set((range) => this.onCalendarSelection(range));\n instance.onPresetSelect.set((preset) => this.onPresetClick(preset));\n instance.onStartTimeChange.set((date) => this.onStartTimeChange(date));\n instance.onEndTimeChange.set((date) => this.onEndTimeChange(date));\n instance.onViewChange.set((view) => this.onViewChanged(view));\n instance.onToday.set(() => this.onTodayClicked());\n instance.onClear.set(() => this.onClearAction());\n instance.onCancel.set(() => this.onCancelAction());\n instance.onApply.set(() => this.onApplyAction());\n // Push the initial config synchronously so the first render reflects the\n // current inputs; the effect in the constructor keeps things in sync afterwards.\n instance.size.set(this.size());\n instance.color.set(this.color());\n instance.minDate.set(this.minDate());\n instance.maxDate.set(this.maxDate());\n instance.dateFilter.set(this.dateFilter());\n instance.startView.set(this.startView());\n instance.numberOfMonths.set(this.numberOfMonths());\n instance.pendingRange.set(this.pendingRange());\n instance.currentView.set(this.currentView());\n instance.presets.set(this.presets());\n instance.activePresetId.set(this.activePresetId());\n instance.showActions.set(this.showActions());\n instance.showTime.set(this.showTime());\n instance.timeFormat.set(this.timeFormat());\n instance.showSeconds.set(this.showSeconds());\n instance.hourStep.set(this.hourStep());\n instance.minuteStep.set(this.minuteStep());\n instance.secondStep.set(this.secondStep());\n instance.todayLabel.set(this.todayLabel());\n instance.clearLabel.set(this.clearLabel());\n instance.cancelLabel.set(this.cancelLabel());\n instance.applyLabel.set(this.applyLabel());\n instance.rangeSeparator.set(this.rangeSeparator());\n instance.minRangeLength.set(this.minRangeLength());\n instance.maxRangeLength.set(this.maxRangeLength());\n instance.rangeBehavior.set(this.rangeBehavior());\n instance.rangeClickBehavior.set(this.rangeClickBehavior());\n instance.firstDayOfWeek.set(this.firstDayOfWeek());\n instance.locale.set(this.locale());\n instance.dateClass.set(this.dateClass());\n instance.cellTemplate.set(this.cellTemplate());\n this.overlayInstance = instance;\n // Must follow the assignment above: this is what wakes the state-push\n // effect, and it reads `overlayInstance` as a plain field.\n this.isAttached.set(true);\n // Flush the initial config into the overlay's first render so view children\n // (calendar, time pickers, action bar) observe the picker's current inputs.\n result.componentRef.changeDetectorRef.detectChanges();\n\n // Per-open streams from the coordinator complete on close, so no\n // takeUntilDestroyed is needed.\n this.coordinator.backdropClick$().subscribe(() => {\n // When an action bar is present, backdrop click acts as cancel.\n if (this.showActions()) {\n this.closeOverlay('backdrop', /* restore */ true);\n } else {\n this.closeOverlay('backdrop');\n }\n });\n\n this.coordinator.escape$().subscribe((event) => {\n event.preventDefault();\n this.closeOverlay('escape', /* restore */ true);\n });\n\n // Defer `opened` emission until after the enter animation completes — was\n // previously fired synchronously on open() (mirrors the date-picker fix).\n this.coordinator\n .opened$()\n .subscribe(() => this.opened.emit({ trigger: this.elementRef.nativeElement }));\n\n queueMicrotask(() => {\n this.overlayInstance?.focusCalendar();\n });\n }\n\n private closeOverlay(reason: DateRangePickerCloseReason, restore = false): void {\n if (this.closing || !this.overlayInstance) return;\n this.closing = true;\n this.overlayInstance.leaving.set(true);\n\n if (restore) {\n const previous = this.lastValueBeforeOpen();\n if (!rangesEqual(previous, this.internalValue(), this.adapter)) {\n // Silent restore — no emit of rangeChange.\n this.internalValue.set(previous);\n this.value.set(previous);\n this.parseError.set(false);\n this.rangeError.set(false);\n }\n }\n\n this.triggerRef().nativeElement.focus();\n\n this.coordinator.close(() => {\n this.overlayInstance = null;\n this.isAttached.set(false);\n this.pendingRange.set(null);\n untracked(() => this.open.set(false));\n this.closing = false;\n this.closed.emit(reason);\n });\n }\n\n // ── Overlay callbacks ──\n\n /** @internal */\n private onCalendarSelection(range: TwDateRange<D>): void {\n this.pendingRange.set(range);\n if (!range.complete) return;\n if (this.showActions() || this.showTime()) return;\n if (!this.isRangeValid(range)) {\n this.rangeError.set(true);\n return;\n }\n this.commit(range, 'calendar');\n this.closeOverlay('select');\n }\n\n private onPresetClick(preset: DateRangePreset<D>): void {\n let raw: TwDateRange<D>;\n try {\n raw = preset.range();\n } catch {\n this.liveAnnouncer.announce(`${preset.label} could not be applied.`, 'polite');\n return;\n }\n const clamped = this.clampRange(raw);\n if (!this.isRangeValid(clamped) || !clamped.complete) {\n this.liveAnnouncer.announce(\n `${preset.label} is not available in the current filter.`,\n 'polite',\n );\n return;\n }\n this.pendingRange.set(clamped);\n this.presetSelected.emit(preset);\n if (this.showActions() || this.showTime()) return;\n this.commit(clamped, 'preset');\n this.closeOverlay('select');\n }\n\n private onStartTimeChange(date: D | null): void {\n const pending = this.pendingRange();\n if (pending === null || pending.start === null || date === null) return;\n const updatedStart = this.adapter.withTime(\n pending.start,\n this.adapter.getHours(date),\n this.adapter.getMinutes(date),\n this.adapter.getSeconds(date),\n );\n const next = new TwDateRange<D>(updatedStart, pending.end);\n this.pendingRange.set(next);\n if (!this.showActions() && next.complete) {\n if (!this.isRangeValid(next)) {\n this.rangeError.set(true);\n return;\n }\n this.commit(next, 'time');\n }\n }\n\n private onEndTimeChange(date: D | null): void {\n const pending = this.pendingRange();\n if (pending === null || pending.end === null || date === null) return;\n const updatedEnd = this.adapter.withTime(\n pending.end,\n this.adapter.getHours(date),\n this.adapter.getMinutes(date),\n this.adapter.getSeconds(date),\n );\n const next = new TwDateRange<D>(pending.start, updatedEnd);\n this.pendingRange.set(next);\n if (!this.showActions() && next.complete) {\n if (!this.isRangeValid(next)) {\n this.rangeError.set(true);\n return;\n }\n this.commit(next, 'time');\n }\n }\n\n private onViewChanged(view: CalendarViewState): void {\n this.currentView.set(view);\n }\n\n private onTodayClicked(): void {\n const today = this.adapter.today();\n const range = new TwDateRange<D>(today, today);\n if (!this.isRangeValid(range)) return;\n this.pendingRange.set(range);\n // When the action bar is off, Today behaves like a direct commit shortcut —\n // mirrors the date-picker's parallel behaviour.\n if (!this.showActions()) {\n this.commit(range, 'preset');\n this.closeOverlay('select');\n }\n }\n\n private onClearAction(): void {\n // Stage-only: clearing in the action bar just drops the pending range.\n // The user must press Apply to commit, consistent with Today.\n this.pendingRange.set(null);\n }\n\n private onCancelAction(): void {\n this.closeOverlay('cancel', /* restore */ true);\n }\n\n private onApplyAction(): void {\n const pending = this.pendingRange();\n const normalised = this.normalizeRange(pending);\n if (normalised !== null && !this.isRangeValid(normalised)) {\n this.rangeError.set(true);\n this.closeOverlay('cancel', /* restore */ true);\n return;\n }\n this.commit(normalised, 'apply');\n this.closeOverlay('apply');\n }\n\n // ── Helpers ──\n\n private resolveDialogAriaLabel(): string {\n return this.ariaLabel() || 'Choose a date range';\n }\n\n private resolvePanelClass(): string {\n const raw = this.panelClass();\n return Array.isArray(raw) ? raw.join(' ') : (raw as string);\n }\n\n // ── ControlValueAccessor ──\n\n writeValue(value: unknown): void {\n const previous = this.internalValue();\n if (value === null || value === undefined || value === '') {\n this.internalValue.set(null);\n this.value.set(null);\n this.parseError.set(false);\n this.rangeError.set(false);\n this.rangeChange.emit({\n value: null,\n previousValue: previous,\n source: 'programmatic',\n });\n return;\n }\n const coerced = this.coerceRange(value as TwDateRangeInput<D>);\n const normalised = this.normalizeRange(coerced);\n this.internalValue.set(normalised);\n this.value.set(normalised);\n this.parseError.set(false);\n this.rangeError.set(normalised !== null && !this.isRangeValid(normalised));\n this.rangeChange.emit({\n value: normalised,\n previousValue: previous,\n source: 'programmatic',\n });\n }\n\n private coerceRange(value: TwDateRangeInput<D>): TwDateRange<D> | null {\n if (value === null || value === undefined) return null;\n if (value instanceof TwDateRange) {\n const start = this.coerceEndpoint(value.start);\n const end = this.coerceEndpoint(value.end);\n return new TwDateRange<D>(start, end);\n }\n const obj = value as { start: D | null; end: D | null };\n return new TwDateRange<D>(\n this.coerceEndpoint(obj.start ?? null),\n this.coerceEndpoint(obj.end ?? null),\n );\n }\n\n private coerceEndpoint(raw: D | null): D | null {\n if (raw === null) return null;\n const d = this.adapter.deserialize(raw) as D | null;\n if (d === null) return null;\n return this.adapter.isValid(d) ? d : null;\n }\n\n registerOnChange(fn: (value: TwDateRange<D> | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // ── Validator ──\n\n private validatorOnChange: () => void = () => {};\n\n /** @internal */\n validate(control: AbstractControl): ValidationErrors | null {\n // Delegate to the calendar validator so consumers see the same\n // CalendarErrorCode set on a date-range-picker as on a bound `tw-calendar`.\n const validator = calendarValidator<'range', D>({\n mode: 'range',\n lastInvalidFormValue: null,\n constraints: {\n minDate: this.minDate(),\n maxDate: this.maxDate(),\n dateFilter: this.dateFilter(),\n },\n adapter: this.adapter,\n minRangeLength: this.minRangeLength(),\n maxRangeLength: this.maxRangeLength(),\n });\n const errors = validator(control) as CalendarValidationErrors | null;\n return errors;\n }\n\n /** @internal */\n registerOnValidatorChange(fn: () => void): void {\n this.validatorOnChange = fn;\n }\n\n // ── FormFieldControl methods ──\n\n /** @internal */\n setDescribedByIds(ids: string[]): void {\n this.describedByIdsSignal.set([...ids]);\n }\n\n /** @internal */\n onContainerClick(event: MouseEvent): void {\n if (this.isDisabled()) return;\n const target = event.target as HTMLElement | null;\n const triggerEl = this.triggerRef()?.nativeElement;\n if (triggerEl && target && triggerEl.contains(target)) return;\n if (triggerEl && document.activeElement !== triggerEl) {\n triggerEl.focus();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|