@cdevhub/ngx-tw 0.5.0 → 0.6.1
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-testing.mjs +122 -0
- package/fesm2022/cdevhub-ngx-tw-dialog-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs +11 -2
- 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 +28 -4
- 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-ByyNluUd.mjs → cdevhub-ngx-tw-sheet-sheet-renderer-CqVJwgmp.mjs} +3 -3
- 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 +23 -7
- 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-DSu4YoTy.mjs → cdevhub-ngx-tw-toast-toast-renderer-BlDxemsU.mjs} +107 -19
- package/fesm2022/cdevhub-ngx-tw-toast-toast-renderer-BlDxemsU.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-toast.mjs +21 -13
- 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 +111 -36
- package/theme/_high-contrast-dark.css +367 -0
- package/theme/_high-contrast.css +13 -2
- package/theme/_light.css +332 -0
- package/theme/_semantic.css +60 -26
- 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 +12 -3
- 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 +19 -3
- 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 +20 -6
- 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
- package/fesm2022/cdevhub-ngx-tw-sheet-sheet-renderer-ByyNluUd.mjs.map +0 -1
- package/fesm2022/cdevhub-ngx-tw-toast-toast-renderer-DSu4YoTy.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdevhub-ngx-tw-calendar.mjs","sources":["../../../projects/ngx-tw/calendar/calendar-header.ts","../../../projects/ngx-tw/calendar/calendar-intl.ts","../../../projects/ngx-tw/calendar/calendar.types.ts","../../../projects/ngx-tw/calendar/calendar-cva-utils.ts","../../../projects/ngx-tw/calendar/calendar.utils.ts","../../../projects/ngx-tw/calendar/calendar-validators.ts","../../../projects/ngx-tw/calendar/date-adapter.ts","../../../projects/ngx-tw/calendar/calendar-cell.ts","../../../projects/ngx-tw/calendar/calendar-view-base.ts","../../../projects/ngx-tw/calendar/month-view.ts","../../../projects/ngx-tw/calendar/year-view.ts","../../../projects/ngx-tw/calendar/multi-year-view.ts","../../../projects/ngx-tw/calendar/selection/selection-strategy.ts","../../../projects/ngx-tw/calendar/selection/single-selection-strategy.ts","../../../projects/ngx-tw/calendar/selection/range-selection-strategy.ts","../../../projects/ngx-tw/calendar/selection/multi-selection-strategy.ts","../../../projects/ngx-tw/calendar/selection/week-selection-strategy.ts","../../../projects/ngx-tw/calendar/selection/providers.ts","../../../projects/ngx-tw/calendar/calendar.ts","../../../projects/ngx-tw/calendar/calendar-form-directives.ts","../../../projects/ngx-tw/calendar/calendar-presets.ts","../../../projects/ngx-tw/calendar/calendar-intl-de.ts","../../../projects/ngx-tw/calendar/calendar-intl-fr.ts","../../../projects/ngx-tw/calendar/calendar-intl-es.ts","../../../projects/ngx-tw/calendar/calendar-intl-pt.ts","../../../projects/ngx-tw/calendar/calendar-intl-ja.ts","../../../projects/ngx-tw/calendar/serialize-calendar-value.ts","../../../projects/ngx-tw/calendar/native-date-adapter.ts","../../../projects/ngx-tw/calendar/date-range.ts","../../../projects/ngx-tw/calendar/cdevhub-ngx-tw-calendar.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n type InputSignal,\n type OutputEmitterRef,\n type Signal,\n} from '@angular/core';\nimport { tv } from 'tailwind-variants';\n\nconst headerVariants = tv(\n {\n slots: {\n root: 'flex items-center justify-between px-2 py-1 mb-2',\n navButton:\n 'inline-flex items-center justify-center select-none h-9 w-9 rounded-full text-fg hover:bg-surface-muted transition-colors duration-normal motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:cursor-not-allowed disabled:text-fg-subtle disabled:hover:bg-transparent',\n periodButton:\n 'inline-flex items-center justify-center select-none px-3 py-1.5 text-sm font-semibold rounded-md text-fg hover:bg-surface-muted transition-colors duration-normal motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:cursor-not-allowed disabled:text-fg-subtle disabled:hover:bg-transparent',\n },\n variants: {},\n defaultVariants: {},\n },\n { twMerge: true },\n);\n\n/**\n * Calendar navigation header — previous / period / next button row.\n * The period label button toggles between views (month → year → multi-year).\n */\n@Component({\n selector: 'tw-calendar-header',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `\n <div [class]=\"classes().root\">\n <button\n type=\"button\"\n [class]=\"classes().navButton\"\n [disabled]=\"prevDisabled()\"\n [attr.aria-label]=\"prevAriaLabel()\"\n (click)=\"prevClicked.emit()\"\n >\n <svg\n class=\"size-5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M15 18l-6-6 6-6\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <button\n type=\"button\"\n [class]=\"classes().periodButton\"\n [attr.aria-label]=\"periodAriaLabel()\"\n [disabled]=\"!canSwitchView()\"\n (click)=\"onPeriodClick()\"\n >\n {{ periodLabel() }}\n </button>\n\n <button\n type=\"button\"\n [class]=\"classes().navButton\"\n [disabled]=\"nextDisabled()\"\n [attr.aria-label]=\"nextAriaLabel()\"\n (click)=\"nextClicked.emit()\"\n >\n <svg\n class=\"size-5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M9 18l6-6-6-6\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n `,\n})\nexport class CalendarHeaderComponent {\n /** Display text for the period button (e.g. \"January 2026\"). */\n readonly periodLabel: InputSignal<string> = input.required<string>();\n\n /** Accessible label for the period button. */\n readonly periodAriaLabel: InputSignal<string> = input.required<string>();\n\n /** Accessible label for the previous button. */\n readonly prevAriaLabel: InputSignal<string> = input.required<string>();\n\n /** Accessible label for the next button. */\n readonly nextAriaLabel: InputSignal<string> = input.required<string>();\n\n /** Disables the previous button. */\n readonly prevDisabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Disables the next button. */\n readonly nextDisabled: InputSignal<boolean> = input<boolean>(false);\n\n /** When false, the period button is disabled (e.g. when already at the top view). */\n // TRUE-default: the period button is the calendar header's primary drill-up\n // affordance; disabling it is reserved for the top view where there's nowhere\n // to drill up to.\n readonly canSwitchView: InputSignal<boolean> = input<boolean>(true);\n\n /** Fires on previous button click. */\n readonly prevClicked: OutputEmitterRef<void> = output<void>();\n\n /** Fires on next button click. */\n readonly nextClicked: OutputEmitterRef<void> = output<void>();\n\n /** Fires on period button click (switch to the next higher view). */\n readonly periodClicked: OutputEmitterRef<void> = output<void>();\n\n protected readonly classes: Signal<{\n root: string;\n navButton: string;\n periodButton: string;\n }> = computed(() => {\n const v = headerVariants();\n return { root: v.root(), navButton: v.navButton(), periodButton: v.periodButton() };\n });\n\n protected onPeriodClick(): void {\n if (this.canSwitchView()) this.periodClicked.emit();\n }\n}\n","import { Injectable, type Provider } from '@angular/core';\n\n/**\n * Context payload passed to `cellAccessibleName` so consumers can produce a\n * locale-appropriate accessible name for any cell in any view (§15.6, §19.4).\n */\nexport interface CalendarCellAccessibleNameContext {\n /** The date the cell represents. */\n readonly date: Date;\n /** Which view the cell lives in. */\n readonly mode: 'day' | 'month' | 'year';\n /** True when the cell is part of the committed selection. */\n readonly selected?: boolean;\n /** True when the cell is today. */\n readonly today?: boolean;\n /** True when the cell is non-interactive (constraint or filter). */\n readonly disabled?: boolean;\n /** Optional pre-formatted display string the consumer may incorporate. */\n readonly display?: string;\n}\n\n/**\n * Localized strings + ARIA announcements consumed by the calendar (§19.4).\n *\n * Override per-field via Angular DI — provide a custom instance, or pass a\n * `Partial<CalendarIntl>` into the calendar component's `intl` input. Unset\n * fields fall through to the English defaults shipped here.\n *\n * All members take primitives so consumers can write straight string\n * literals or template helpers without depending on internal types.\n */\n@Injectable()\nexport class CalendarIntl {\n /**\n * Plural rules used for the four plural-marked keys in §19.4: range length,\n * \"X dates selected\", \"Skipped {N} periods\", and the year-range button label.\n * Resolved lazily so SSR / non-`Intl` environments don't crash at construction.\n */\n private _plural: Intl.PluralRules | null = null;\n private getPlural(): Intl.PluralRules {\n if (this._plural !== null) return this._plural;\n this._plural =\n typeof Intl !== 'undefined' && typeof Intl.PluralRules === 'function'\n ? new Intl.PluralRules('en')\n : ({ select: (n: number) => (n === 1 ? 'one' : 'other') } as unknown as Intl.PluralRules);\n return this._plural;\n }\n\n // ---------------------------------------------------------------------------\n // Button labels (§19.4)\n // ---------------------------------------------------------------------------\n\n /** Aria label for the \"previous month\" navigation button (day view). */\n previousMonthLabel = 'Previous month';\n\n /** Aria label for the \"next month\" navigation button (day view). */\n nextMonthLabel = 'Next month';\n\n /** Aria label for the \"previous year\" navigation button (month view). */\n previousYearLabel = 'Previous year';\n\n /** Aria label for the \"next year\" navigation button (month view). */\n nextYearLabel = 'Next year';\n\n /** Aria label for the \"previous N years\" navigation button (year view). */\n previousYearsLabel(yearsPerPage: number): string {\n const cat = this.getPlural().select(yearsPerPage);\n return cat === 'one' ? `Previous ${yearsPerPage} year` : `Previous ${yearsPerPage} years`;\n }\n\n /** Aria label for the \"next N years\" navigation button (year view). */\n nextYearsLabel(yearsPerPage: number): string {\n const cat = this.getPlural().select(yearsPerPage);\n return cat === 'one' ? `Next ${yearsPerPage} year` : `Next ${yearsPerPage} years`;\n }\n\n /** Aria label for the \"today\" shortcut button (footer). */\n todayLabel = 'Today';\n\n /** Aria label for the \"clear\" button (footer). */\n clearLabel = 'Clear';\n\n /** Aria label for the \"apply\" button (footer). */\n applyLabel = 'Apply';\n\n /** Aria label for the trigger/open-calendar button. */\n openCalendarLabel = 'Open calendar';\n\n /** Aria label for the \"choose date\" trigger. */\n chooseDateLabel = 'Choose date';\n\n // ---------------------------------------------------------------------------\n // View labels (§19.4)\n // ---------------------------------------------------------------------------\n\n /** Aria label applied to the calendar root element. */\n calendarLabel = 'Calendar';\n\n /** Aria label appended to the period button while in the day view. */\n monthViewLabel = 'month view';\n\n /** Aria label appended to the period button while in the month view. */\n yearViewLabel = 'year view';\n\n /** Aria label for the year (decade) view. */\n decadeViewLabel = 'decade view';\n\n /** Tooltip / aria text for the \"switch to month view\" affordance. */\n switchToMonthViewLabel(period: string): string {\n return `${period}, click to switch to month view`;\n }\n\n /** Tooltip / aria text for the \"switch to year view\" affordance. */\n switchToYearViewLabel(period: string): string {\n return `${period}, click to switch to year view`;\n }\n\n // ---------------------------------------------------------------------------\n // Cell accessible names (§15.6, §19.4)\n // ---------------------------------------------------------------------------\n\n /**\n * Returns the accessible name a screen reader announces for any cell.\n * Default implementation appends \"today\" / \"selected\" / \"disabled\" suffixes\n * to the supplied `display` string.\n */\n cellAccessibleName(ctx: CalendarCellAccessibleNameContext): string {\n const base = ctx.display ?? '';\n const tags: string[] = [];\n if (ctx.today) tags.push('today');\n if (ctx.selected) tags.push('selected');\n if (ctx.disabled) tags.push('disabled');\n return tags.length === 0 ? base : `${base}, ${tags.join(', ')}`;\n }\n\n // ---------------------------------------------------------------------------\n // ARIA announcements (§15.7, §19.4)\n // ---------------------------------------------------------------------------\n\n /** Live-region message after navigating the displayed period. */\n navigatedTo(direction: 'previous' | 'next', period: string): string {\n return `Navigated to ${direction} ${period}`;\n }\n\n /** Live-region message after a single-mode selection commits. */\n selectedAnnouncement(value: string): string {\n return `Selected ${value}`;\n }\n\n /** Live-region message after the start of a range is picked. */\n rangeStartAnnouncement(start: string): string {\n return `Start date selected: ${start}. Now select end date.`;\n }\n\n /** Live-region message after a range commits. Plural-marked on `lengthDays`. */\n rangeUpdateAnnouncement(start: string, end: string, lengthDays: number): string {\n const cat = this.getPlural().select(lengthDays);\n const noun = cat === 'one' ? 'day' : 'days';\n return `Range selected: ${start} to ${end}, ${lengthDays} ${noun}`;\n }\n\n /** Live-region message after a `mode: 'multiple'` selection commits. Plural-marked. */\n multipleSelectionAnnouncement(count: number): string {\n const cat = this.getPlural().select(count);\n const noun = cat === 'one' ? 'date' : 'dates';\n return `${count} ${noun} selected`;\n }\n\n /** Live-region message after the active view changes. */\n viewSwitched(view: 'day' | 'month' | 'year', period: string): string {\n const label =\n view === 'day' ? this.monthViewLabel.replace(/ view$/, '') : view === 'month' ? this.yearViewLabel.replace(/ view$/, '') : this.decadeViewLabel.replace(/ view$/, '');\n return `${label} view, ${period}`;\n }\n\n /** Live-region template used while a range pick is in progress. */\n inProgressTemplate(state: string): string {\n return `Selecting: ${state}, now select end date`;\n }\n\n /** Live-region message announcing how many empty periods auto-skip jumped over. Plural-marked. */\n skippedPeriods(count: number, destination: string): string {\n const cat = this.getPlural().select(count);\n const noun = cat === 'one' ? 'period' : 'periods';\n return `Skipped ${count} ${noun} to ${destination}`;\n }\n\n /** Live-region message announced when a click is rejected and the cell flashes (e.g. `'require-clear'` rejection, disabled-cross range commit). */\n selectionRejectedAnnouncement = 'Selection rejected';\n\n /**\n * When `true`, the calendar suppresses live-region announcements for the\n * affected user actions. Override in tests or low-noise environments.\n */\n skipAnnouncement = false;\n\n // ---------------------------------------------------------------------------\n // Error messages (§10.2, §19.4)\n // ---------------------------------------------------------------------------\n\n /** Message for the `calendarRequired` validation error. */\n requiredError = 'Please select a date';\n\n /** Message for the `calendarMinDate` validation error. */\n minDateError(date: string): string {\n return `Date must be on or after ${date}`;\n }\n\n /** Message for the `calendarMaxDate` validation error. */\n maxDateError(date: string): string {\n return `Date must be on or before ${date}`;\n }\n\n /** Message for the `calendarInvalidValue` validation error. */\n invalidValueError = 'Invalid date value';\n\n /** Message for the `calendarRangeTooShort` validation error. Plural-marked on `min`. */\n rangeTooShortError(min: number): string {\n const cat = this.getPlural().select(min);\n const noun = cat === 'one' ? 'day' : 'days';\n return `Range must be at least ${min} ${noun}`;\n }\n\n /** Message for the `calendarRangeTooLong` validation error. Plural-marked on `max`. */\n rangeTooLongError(max: number): string {\n const cat = this.getPlural().select(max);\n const noun = cat === 'one' ? 'day' : 'days';\n return `Range must be at most ${max} ${noun}`;\n }\n\n /** Message for the `calendarInvalidRange` validation error. */\n invalidRangeError = 'Invalid date range';\n\n /** Message for the `calendarDisabledDate` validation error. */\n dateFilterError = 'This date is not available';\n\n /** Message for the `calendarMaxSelections` validation error. */\n maxSelectionsError(limit: number): string {\n const cat = this.getPlural().select(limit);\n const noun = cat === 'one' ? 'date' : 'dates';\n return `You may select at most ${limit} ${noun}`;\n }\n\n // ---------------------------------------------------------------------------\n // Parse-error label (§10.2, §19.4)\n // ---------------------------------------------------------------------------\n\n /** Label announced when a typed date fails to parse. */\n parseErrorLabel = 'Invalid date format';\n\n // ---------------------------------------------------------------------------\n // Keyboard help (§16.4, §19.4)\n // ---------------------------------------------------------------------------\n\n /** Multi-line description of the keyboard contract for screen readers / help dialogs. */\n keyboardHelpText = [\n 'Use arrow keys to move between dates.',\n 'Press Enter or Space to select the focused date.',\n 'Use Page Up and Page Down to move between months.',\n 'Use Shift + Page Up and Shift + Page Down to move between years.',\n 'Use Home and End to jump to the start or end of the week.',\n 'Press Escape to close the calendar.',\n ].join(' ');\n}\n\n/**\n * Provides a custom `CalendarIntl` instance. Place at any injector level —\n * the calendar resolves the closest one and merges any per-instance `intl`\n * input on top of it (§19.4 per-field merge semantics).\n */\nexport function provideCalendarIntl(custom: Partial<CalendarIntl>): Provider {\n return {\n provide: CalendarIntl,\n useFactory: () => Object.assign(new CalendarIntl(), custom),\n };\n}\n","/**\n * Calendar shared types. Aligned with `docs/requirements/calendar-component-requirements.md` v2.6\n * (§7.1, §7.4, §8, §10.2, §22.5, §33).\n */\n\n// -----------------------------------------------------------------------------\n// Value shape (§7.1, §7.4)\n// -----------------------------------------------------------------------------\n\n/** Selection mode exposed via the `mode` input. `'week'` is `[WONT] v1` — week-as-unit selection remains available via the DI-only `WeekSelectionStrategy`. */\nexport type CalendarMode = 'single' | 'multiple' | 'range';\n\n/** Value shape for `mode: 'single'`. */\nexport type CalendarSingleValue<D> = D | null;\n\n/** Value shape for `mode: 'multiple'`. */\nexport type CalendarMultipleValue<D> = D[];\n\n/** Value shape for `mode: 'range'`. Endpoints are independent — either can be `null`. */\nexport interface CalendarRangeValue<D> {\n readonly start: D | null;\n readonly end: D | null;\n}\n\n/** Mode-parameterized value. `mode: 'single' → D | null`, `'multiple' → D[]`, `'range' → { start; end }`. */\nexport type CalendarValue<M extends CalendarMode, D> = M extends 'single'\n ? CalendarSingleValue<D>\n : M extends 'multiple'\n ? CalendarMultipleValue<D>\n : M extends 'range'\n ? CalendarRangeValue<D>\n : never;\n\n/** Mode-agnostic empty value — `null` for single, `[]` for multiple, `{ start: null, end: null }` for range. */\nexport function emptyCalendarValue<M extends CalendarMode, D>(mode: M): CalendarValue<M, D> {\n if (mode === 'single') return null as CalendarValue<M, D>;\n if (mode === 'multiple') return [] as unknown as CalendarValue<M, D>;\n return { start: null, end: null } as unknown as CalendarValue<M, D>;\n}\n\n// -----------------------------------------------------------------------------\n// UI state (§7.4, §8.1)\n// -----------------------------------------------------------------------------\n\n/** Selection lifecycle. */\nexport type CalendarSelectionState = 'EMPTY' | 'SELECTING' | 'COMPLETE';\n\n/** Which grid the user is looking at. `'day'` = 7×6 day grid, `'month'` = 4×3 months in a year, `'year'` = a page of years. */\nexport type CalendarViewState = 'day' | 'month' | 'year';\n\n/** Overlay presentation lifecycle (Phase 10 wires the transitions). In inline mode this signal resolves to `null`. */\nexport type CalendarOverlayState = 'closed' | 'opening' | 'open' | 'closing';\n\n// -----------------------------------------------------------------------------\n// Behavior enums (§33.1)\n// -----------------------------------------------------------------------------\n\n/** How `mode: 'range'` handles the third click after a complete range. */\nexport type RangeClickBehavior = 'restart' | 'nearest-edge' | 'require-clear';\n\n/** Granularity at which `mode: 'range'` commits (day-of-month, month-of-year, year). */\nexport type RangeGranularity = 'day' | 'month' | 'year';\n\n/** What happens when the user tries to select past `maxSelections` in `mode: 'multiple'`. */\nexport type MaxSelectionBehavior = 'emit-limit-reached' | 'replace-oldest' | 'ignore';\n\n/** How a form reset restores the calendar's internal state. `'full'` also resets view / active-date; `'value-only'` leaves navigation in place. */\nexport type ResetBehavior = 'full' | 'value-only';\n\n/** Presentation on small viewports. `'auto'` = native overlay on ≥ 600 px, fullscreen otherwise. */\nexport type MobileMode = 'overlay' | 'fullscreen' | 'bottom-sheet' | 'auto';\n\n// -----------------------------------------------------------------------------\n// Validation (§10.2)\n// -----------------------------------------------------------------------------\n\n/** Union of validation error keys emitted by the built-in validator. Stable across versions. */\nexport type CalendarErrorCode =\n | 'calendarRequired'\n | 'calendarMinDate'\n | 'calendarMaxDate'\n | 'calendarDisabledDate'\n | 'calendarRangeTooShort'\n | 'calendarRangeTooLong'\n | 'calendarMaxSelections'\n | 'calendarInvalidRange'\n | 'calendarParseError'\n | 'calendarInvalidValue';\n\n/** Shape returned by the built-in validator. Each code carries the context payload described in §10.2. */\nexport type CalendarValidationErrors = Partial<{\n calendarRequired: true;\n calendarMinDate: { min: unknown; actual: unknown };\n calendarMaxDate: { max: unknown; actual: unknown };\n calendarDisabledDate: { actual: unknown };\n calendarRangeTooShort: { length: number; min: number };\n calendarRangeTooLong: { length: number; max: number };\n calendarMaxSelections: { limit: number; actual: number };\n calendarInvalidRange: { start: unknown; end: unknown };\n calendarParseError: { raw: string };\n calendarInvalidValue: {\n expected: 'single' | 'multiple' | 'range';\n actual: unknown;\n reason: 'shape' | 'transformer';\n };\n}>;\n\n// -----------------------------------------------------------------------------\n// Output payloads (§33.2)\n// -----------------------------------------------------------------------------\n\n/** Payload of `selectionComplete`. `reason` flags the commit path. */\nexport interface SelectionCompleteEvent<M extends CalendarMode, D> {\n readonly value: CalendarValue<M, D>;\n readonly reason: 'commit' | 'auto-swap' | 'nearest-edge' | 'preset';\n}\n\n/** Payload of `selectionCleared`. `reason` disambiguates user action from programmatic / mode-change / reset / disabled. */\nexport interface SelectionClearedEvent {\n readonly reason: 'user' | 'programmatic' | 'mode-change' | 'reset' | 'disabled';\n}\n\n/** Payload of `rangePreview`. `invalidPreview` is set when the hover crosses a disabled date and `disableRangesCrossingDisabledDates` is true, or the range length violates `min`/`maxRangeLength` (Phase 4 / 6 set this). */\nexport interface RangePreviewEvent<D> {\n readonly tentativeRange: { readonly start: D; readonly end: D };\n readonly invalidPreview: boolean;\n}\n\n/** Payload of `viewChange`. Distinguishes drill-down (day→month→year) from drill-up and from programmatic changes. */\nexport interface ViewChangeEvent {\n readonly from: CalendarViewState;\n readonly to: CalendarViewState;\n readonly reason: 'user' | 'programmatic' | 'drill-down' | 'drill-up';\n}\n\n/** Payload of `modeChange`. */\nexport interface ModeChangeEvent {\n readonly from: CalendarMode;\n readonly to: CalendarMode;\n}\n\n// -----------------------------------------------------------------------------\n// Legacy types kept stable for Phase 1 (migrated in later phases)\n// -----------------------------------------------------------------------------\n\n/**\n * A date range with optional endpoints.\n * Kept as a structural type for backward-compat with the existing view implementation;\n * `CalendarRangeValue<D>` is the spec-canonical alias.\n */\nexport interface DateRange<D> {\n readonly start: D | null;\n readonly end: D | null;\n}\n\n/** Factory for a plain `DateRange<D>`. */\nexport function createDateRange<D>(start: D | null, end: D | null): DateRange<D> {\n return { start, end };\n}\n\n/**\n * Visual state of a single cell in any view.\n * Phase 4 replaces this with the `data-state-*` attribute surface (§34.5).\n */\nexport type CalendarCellState =\n | 'default'\n | 'today'\n | 'selected'\n | 'range-start'\n | 'range-middle'\n | 'range-end'\n | 'disabled'\n | 'preview-start'\n | 'preview-middle'\n | 'preview-end';\n\n/**\n * Data describing one renderable cell.\n * Phase 13 replaces this with `DayCellContext<D, T>` (§24.1) — kept in place through\n * Phases 1–12 so the existing month/year/years views compile without a wholesale view rewrite.\n */\nexport interface CalendarCell<D> {\n /** The date value this cell represents. */\n value: D;\n /** Display text inside the cell (day number, short month name, year). */\n displayValue: string;\n /** Accessible label announced to screen readers. */\n ariaLabel: string;\n /** Whether the cell is interactive. Disabled cells still render. */\n enabled: boolean;\n /** Consumer-provided CSS classes (via `dateClass`). */\n cssClasses: string;\n /** True when this cell is today's date. */\n isToday: boolean;\n /** True when this cell is the committed selection (or part of a range). */\n isSelected: boolean;\n /** True when this cell starts a committed range. */\n isRangeStart: boolean;\n /** True when this cell is strictly inside a committed range. */\n isRangeMiddle: boolean;\n /** True when this cell ends a committed range. */\n isRangeEnd: boolean;\n /** True when this cell starts the hover-preview range. */\n isPreviewStart: boolean;\n /** True when this cell is inside the hover-preview range. */\n isPreviewMiddle: boolean;\n /** True when this cell ends the hover-preview range. */\n isPreviewEnd: boolean;\n /** True when this cell falls outside the currently displayed month (day view only). */\n isOutOfMonth: boolean;\n /** True when this cell is a weekend day (Sat/Sun by default; locale-aware override planned). */\n isWeekend: boolean;\n /** True when this cell is part of a tentative range that violates a constraint (e.g., crosses a disabled date or exceeds `maxRangeLength`). */\n isInvalidPreview: boolean;\n /** True when the cell briefly flashes to indicate a rejected click (e.g., disabled commit, `rangeClickBehavior: 'require-clear'`). Auto-cleared by the orchestrator. */\n isInvalidFlash: boolean;\n /** Numeric comparison key used for focus tracking. */\n compareValue: number;\n}\n\n/** Configuration accepted by `createCalendarCell`. */\nexport interface CalendarCellConfig<D> {\n value: D;\n displayValue: string;\n ariaLabel: string;\n enabled?: boolean;\n cssClasses?: string;\n compareValue: number;\n}\n\n/** Factory for a `CalendarCell` with boolean state fields zeroed out. */\nexport function createCalendarCell<D>(config: CalendarCellConfig<D>): CalendarCell<D> {\n return {\n value: config.value,\n displayValue: config.displayValue,\n ariaLabel: config.ariaLabel,\n enabled: config.enabled ?? true,\n cssClasses: config.cssClasses ?? '',\n compareValue: config.compareValue,\n isToday: false,\n isSelected: false,\n isRangeStart: false,\n isRangeMiddle: false,\n isRangeEnd: false,\n isPreviewStart: false,\n isPreviewMiddle: false,\n isPreviewEnd: false,\n isOutOfMonth: false,\n isWeekend: false,\n isInvalidPreview: false,\n isInvalidFlash: false,\n };\n}\n\n/** Style for month and weekday names. */\nexport type NameStyle = 'long' | 'short' | 'narrow';\n\n/** Days in a week. */\nexport const DAYS_PER_WEEK = 7;\n/** Rows in a month grid. */\nexport const WEEKS_PER_MONTH = 6;\n/** Default years shown per page in the year view. Phase 7 replaces this constant with the `yearsPerPage` input (default 20 per §33.1). */\nexport const YEARS_PER_PAGE = 24;\n/** Years per row in the year view. */\nexport const YEARS_PER_ROW = 4;\n/** Months per row in the month (of year) view. */\nexport const MONTHS_PER_ROW = 4;\n\n/** Predicate for per-date disabling — return `false` to disable. */\nexport type DateFilterFn<D> = (date: D) => boolean;\n\n/**\n * Source for `disabledDates` (§10.1) — accepts either an explicit array of disabled dates\n * (compared via `adapter.sameDate`) or a predicate returning `true` for disabled dates.\n *\n * Note: this is the inverse of `dateFilter` (which returns `true` for ENABLED dates).\n * Both inputs are honored — a date is disabled if either source flags it.\n */\nexport type DisabledDates<D> = readonly D[] | ((date: D) => boolean);\n\n/**\n * Aggregated constraint inputs (§10.1). Doubles as the shorthand object accepted by\n * `CalendarComponent`'s `constraints` input — every field is optional so consumers can\n * supply only what they need (e.g. `{ minDate, maxDate }` or `{ dateFilter }`). The\n * orchestrator's resolver normalizes missing fields to neutral values (`null` /\n * empty array) before evaluating cell state.\n *\n * Resolution rule on the `constraints` input: the individual `minDate` / `maxDate` /\n * `disabledDates` / `disabledDaysOfWeek` / `dateFilter` inputs win when both are set\n * non-null. This lets a consumer pass `[constraints]=\"defaults\"` for a base set and\n * still override one field via the dedicated input.\n */\nexport interface CalendarConstraints<D> {\n readonly minDate?: D | null;\n readonly maxDate?: D | null;\n readonly disabledDates?: DisabledDates<D> | null;\n readonly disabledDaysOfWeek?: readonly number[] | null;\n readonly dateFilter?: DateFilterFn<D> | null;\n}\n\n/** Function producing extra per-cell CSS classes. */\nexport type DateClassFn<D> = (date: D, view: CalendarViewState) => string;\n","/** Pure helpers for CalendarComponent's ControlValueAccessor implementation. Extracted to keep `calendar.ts` focused on the class wiring; behavior is unchanged. */\n\nimport type { CalendarMode, CalendarSelectionState, CalendarValue } from './calendar.types';\n\n/**\n * `true` when the incoming value's shape matches the shape required by `mode`.\n * `null` / `undefined` is handled upstream by callers and is NOT considered here.\n *\n * - `single`: anything that is not an array and not a `{ start, end }` object.\n * - `multiple`: any array.\n * - `range`: a non-array object with both `start` and `end` keys.\n */\nexport function matchesModeShape(mode: CalendarMode, value: unknown): boolean {\n if (mode === 'single') {\n if (Array.isArray(value)) return false;\n if (typeof value === 'object' && value !== null) {\n const r = value as Record<string, unknown>;\n if ('start' in r && 'end' in r) return false;\n }\n return true;\n }\n if (mode === 'multiple') {\n return Array.isArray(value);\n }\n // range\n if (typeof value !== 'object' || value === null) return false;\n if (Array.isArray(value)) return false;\n const range = value as Record<string, unknown>;\n return 'start' in range && 'end' in range;\n}\n\n/**\n * `true` when the incoming value is a partial range (`{ start: D, end: null }`).\n * Per §7.2, only EMPTY or COMPLETE shapes are valid form values for `mode: 'range'`,\n * so partial ranges arriving via `writeValue` are rejected.\n *\n * Caller must already have confirmed `mode === 'range'` and `matchesModeShape` passed.\n */\nexport function isPartialRangeValue(value: unknown): boolean {\n if (typeof value !== 'object' || value === null) return false;\n const r = value as { start: unknown; end: unknown };\n return r.start != null && r.end == null;\n}\n\n/** `true` when `value` is the mode-agnostic empty value (null, `[]`, or `{ start: null, end: null }`). */\nexport function isEmptyCalendarValue(value: unknown): boolean {\n if (value == null) return true;\n if (Array.isArray(value)) return value.length === 0;\n if (typeof value === 'object' && 'start' in (value as object) && 'end' in (value as object)) {\n const r = value as { start: unknown; end: unknown };\n return r.start == null && r.end == null;\n }\n return false;\n}\n\n/** Derives selection state from a value shape. Used by `writeValue` to reconcile post-write state. */\nexport function deriveSelectionStateFromValue<M extends CalendarMode, D>(\n value: CalendarValue<M, D>,\n): CalendarSelectionState {\n return isEmptyCalendarValue(value) ? 'EMPTY' : 'COMPLETE';\n}\n","import type { DateAdapter } from './date-adapter';\nimport type {\n CalendarConstraints,\n DateFilterFn,\n DisabledDates,\n NameStyle,\n} from './calendar.types';\n\n/** Arranges a flat array of items into a 2D grid with `columns` items per row. */\nexport function createGrid<T>(items: readonly T[], columns: number): T[][] {\n const grid: T[][] = [];\n for (let i = 0; i < items.length; i += columns) {\n grid.push(items.slice(i, i + columns));\n }\n return grid;\n}\n\n/** Returns the new flat index after an arrow-key navigation step, or `null` on out of bounds. */\nexport function navigateGrid(\n currentIndex: number,\n direction: 'left' | 'right' | 'up' | 'down',\n totalItems: number,\n columns: number,\n): number | null {\n let next: number;\n switch (direction) {\n case 'left':\n next = currentIndex - 1;\n break;\n case 'right':\n next = currentIndex + 1;\n break;\n case 'up':\n next = currentIndex - columns;\n break;\n case 'down':\n next = currentIndex + columns;\n break;\n }\n if (next < 0 || next >= totalItems) return null;\n return next;\n}\n\n/** Label pair for a weekday header cell. */\nexport interface WeekdayHeader {\n readonly label: string;\n readonly narrow: string;\n}\n\n/** Builds seven weekday headers rotated to start at `firstDayOfWeek` (or adapter default). */\nexport function getWeekdayHeaders<D>(\n adapter: DateAdapter<D>,\n style: NameStyle = 'long',\n firstDayOfWeek?: number,\n): WeekdayHeader[] {\n const start = firstDayOfWeek ?? adapter.getFirstDayOfWeek();\n const longNames = adapter.getDayOfWeekNames(style);\n const narrowNames = adapter.getDayOfWeekNames('narrow');\n const out: WeekdayHeader[] = [];\n for (let i = 0; i < 7; i++) {\n const idx = (start + i) % 7;\n out.push({ label: longNames[idx] ?? '', narrow: narrowNames[idx] ?? '' });\n }\n return out;\n}\n\n/**\n * True when `date` falls outside `[minDate, maxDate]` or fails the filter.\n *\n * Phase 4 superset: also OR-checks `disabledDates` (array OR predicate) and\n * `disabledDaysOfWeek`. Legacy callers passing only the first four arguments\n * keep working — the new sources default to neutral values.\n */\nexport function isDateDisabled<D>(\n date: D,\n minDate: D | null,\n maxDate: D | null,\n dateFilter: DateFilterFn<D> | null,\n adapter: DateAdapter<D>,\n disabledDates: DisabledDates<D> | null = null,\n disabledDaysOfWeek: readonly number[] = [],\n): boolean {\n if (minDate && adapter.compare(date, minDate) < 0) return true;\n if (maxDate && adapter.compare(date, maxDate) > 0) return true;\n if (dateFilter && !dateFilter(date)) return true;\n if (disabledDaysOfWeek.length > 0) {\n if (disabledDaysOfWeek.includes(adapter.getDayOfWeek(date))) return true;\n }\n if (disabledDates) {\n if (typeof disabledDates === 'function') {\n if (disabledDates(date)) return true;\n } else {\n for (const d of disabledDates) {\n if (adapter.sameDate(date, d)) return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Phase 4 single-call constraint resolver — `true` when ANY source disables `date`.\n * Equivalent to `isDateDisabled(date, c.minDate, c.maxDate, c.dateFilter, adapter, c.disabledDates, c.disabledDaysOfWeek)`\n * but accepts the spec-shaped `CalendarConstraints<D>` aggregate.\n */\nexport function resolveDateDisabled<D>(\n date: D,\n constraints: CalendarConstraints<D>,\n adapter: DateAdapter<D>,\n): boolean {\n return isDateDisabled(\n date,\n constraints.minDate ?? null,\n constraints.maxDate ?? null,\n constraints.dateFilter ?? null,\n adapter,\n constraints.disabledDates ?? null,\n constraints.disabledDaysOfWeek ?? [],\n );\n}\n\n/**\n * True when `date` is a weekend day (Saturday or Sunday by default — `adapter.getDayOfWeek`\n * returns `0` for Sunday and `6` for Saturday in the Gregorian contract). The optional\n * `weekendDays` parameter lets a consumer override per locale (e.g. `[5, 6]` for ar-SA).\n */\nexport function isWeekend<D>(\n date: D,\n adapter: DateAdapter<D>,\n weekendDays: readonly number[] = [0, 6],\n): boolean {\n return weekendDays.includes(adapter.getDayOfWeek(date));\n}\n\n/**\n * Inclusive day-count between `start` and `end` — used for `minRangeLength` /\n * `maxRangeLength` validation and the `rangeUpdateAnnouncement` length argument.\n * Assumes `start <= end` (call-sites normalize first).\n */\nexport function rangeLengthDays<D>(start: D, end: D, adapter: DateAdapter<D>): number {\n let n = 1;\n let cursor = start;\n // Walk day-by-day to keep the math adapter-agnostic and DST-safe.\n // For ranges over a few months this is still microseconds.\n while (adapter.compare(cursor, end) < 0) {\n cursor = adapter.addDays(cursor, 1);\n n++;\n }\n return n;\n}\n\n/**\n * `true` when ANY date strictly between `start` and `end` (exclusive of the\n * endpoints when `includeEndpoints` is `false`) is disabled by `constraints`.\n * Used by `disableRangesCrossingDisabledDates` and the `invalidPreview` flag.\n */\nexport function rangeCrossesDisabled<D>(\n start: D,\n end: D,\n constraints: CalendarConstraints<D>,\n adapter: DateAdapter<D>,\n includeEndpoints = true,\n): boolean {\n let cursor = includeEndpoints ? start : adapter.addDays(start, 1);\n const limit = includeEndpoints ? end : adapter.addDays(end, -1);\n while (adapter.compare(cursor, limit) <= 0) {\n if (resolveDateDisabled(cursor, constraints, adapter)) return true;\n cursor = adapter.addDays(cursor, 1);\n }\n return false;\n}\n\n/** True when the whole month falls outside `[minDate, maxDate]`. `month` is 0-based (matches `adapter.getMonth`). */\nexport function isMonthDisabled<D>(\n year: number,\n month: number,\n minDate: D | null,\n maxDate: D | null,\n adapter: DateAdapter<D>,\n): boolean {\n const firstOfMonth = adapter.create(year, month + 1, 1);\n const lastOfMonth = adapter.create(year, month + 1, adapter.getNumDaysInMonth(firstOfMonth));\n if (minDate && adapter.compare(lastOfMonth, minDate) < 0) return true;\n if (maxDate && adapter.compare(firstOfMonth, maxDate) > 0) return true;\n return false;\n}\n\n/** True when the whole year falls outside `[minDate, maxDate]`. */\nexport function isYearDisabled<D>(\n year: number,\n minDate: D | null,\n maxDate: D | null,\n adapter: DateAdapter<D>,\n): boolean {\n const firstOfYear = adapter.create(year, 1, 1);\n const lastOfYear = adapter.create(year, 12, 31);\n if (minDate && adapter.compare(lastOfYear, minDate) < 0) return true;\n if (maxDate && adapter.compare(firstOfYear, maxDate) > 0) return true;\n return false;\n}\n\n/** Aligns `activeYear` to the start of its `yearsPerPage`-block. */\nexport function getMultiYearStartingYear(activeYear: number, yearsPerPage = 24): number {\n return Math.floor(activeYear / yearsPerPage) * yearsPerPage;\n}\n\n/** True when `date` sits inside `[start, end]` (inclusive). */\nexport function isDateInRange<D>(\n date: D,\n start: D | null,\n end: D | null,\n adapter: DateAdapter<D>,\n): boolean {\n if (!start || !end) return false;\n return adapter.compare(date, start) >= 0 && adapter.compare(date, end) <= 0;\n}\n\n/** Returns the first day of the month for `date`. */\nexport function getFirstDayOfMonth<D>(date: D, adapter: DateAdapter<D>): D {\n return adapter.create(adapter.getYear(date), adapter.getMonth(date) + 1, 1);\n}\n","import { type AbstractControl, type ValidatorFn, Validators } from '@angular/forms';\nimport type {\n CalendarConstraints,\n CalendarMode,\n CalendarValidationErrors,\n CalendarValue,\n} from './calendar.types';\nimport type { DateAdapter } from './date-adapter';\nimport { rangeCrossesDisabled, rangeLengthDays, resolveDateDisabled } from './calendar.utils';\n\n/**\n * Shape of the read-only context the calendar validator needs from the\n * hosting component. Kept as a structural type so tests and custom consumers\n * can synthesize one without subclassing `CalendarComponent`.\n */\nexport interface CalendarValidatorContext<M extends CalendarMode = CalendarMode, D = unknown> {\n /** Current mode — used to decide which shape counts as \"empty\". */\n readonly mode: M;\n /** The raw form value whose last write was rejected as wrong-shape (§7.2). `null` when no rejected write is outstanding. */\n readonly lastInvalidFormValue: unknown;\n /** Aggregated constraint inputs (§10.1). Optional — when omitted, only `calendarRequired` / `calendarInvalidValue` codes are produced. */\n readonly constraints?: CalendarConstraints<D>;\n /** Adapter used to evaluate constraint codes. Required when `constraints` is set. */\n readonly adapter?: DateAdapter<D>;\n /** Minimum range length, days. `mode: 'range'` only. */\n readonly minRangeLength?: number | null;\n /** Maximum range length, days. `mode: 'range'` only. */\n readonly maxRangeLength?: number | null;\n /** Maximum number of selections. `mode: 'multiple'` only. */\n readonly maxSelections?: number | null;\n}\n\n/** `true` when `value` matches the mode-specific empty state (§7.1, §6.4). */\nexport function isCalendarValueEmpty<M extends CalendarMode, D>(\n mode: M,\n value: CalendarValue<M, D> | null | undefined,\n): boolean {\n if (mode === 'single') return value == null;\n if (mode === 'multiple') return !Array.isArray(value) || value.length === 0;\n // range\n if (value == null) return true;\n const range = value as unknown as { start: unknown; end: unknown };\n return range.start == null && range.end == null;\n}\n\n/**\n * Built-in synchronous validator (§6.1, §10.2). Emits the full v1 error code set:\n *\n * Phase 3 codes:\n * - `calendarRequired` when the hosting control carries `Validators.required`\n * and the calendar value is mode-specific empty.\n * - `calendarInvalidValue` when the most recent `writeValue` was rejected as\n * wrong-shape (§7.2) — the raw value is held on the component's\n * `lastInvalidFormValue` until a valid write clears it.\n *\n * Phase 4 codes (active when `ctx.constraints` + `ctx.adapter` are supplied):\n * - `calendarMinDate` / `calendarMaxDate` — value (or any range endpoint /\n * array entry) falls outside `[minDate, maxDate]`.\n * - `calendarDisabledDate` — value matches `dateFilter` / `disabledDates` /\n * `disabledDaysOfWeek` (constraint resolver).\n * - `calendarRangeTooShort` / `calendarRangeTooLong` — `mode: 'range'` length\n * violates `minRangeLength` / `maxRangeLength`.\n * - `calendarMaxSelections` — `mode: 'multiple'` array exceeds `maxSelections`.\n * - `calendarInvalidRange` — committed range has `start > end` (the orchestrator\n * normalizes via auto-swap; this only triggers on programmatic writeValue).\n *\n * Each code's payload mirrors §10.2 — `{ min, actual }`, `{ max, actual }`,\n * `{ length, min }`, etc.\n */\nexport function calendarValidator<M extends CalendarMode, D>(\n ctx: CalendarValidatorContext<M, D>,\n): ValidatorFn {\n return (control: AbstractControl): CalendarValidationErrors | null => {\n const errors: CalendarValidationErrors = {};\n\n if (ctx.lastInvalidFormValue !== null && ctx.lastInvalidFormValue !== undefined) {\n errors.calendarInvalidValue = {\n expected: ctx.mode as 'single' | 'multiple' | 'range',\n actual: ctx.lastInvalidFormValue,\n reason: 'shape',\n };\n }\n\n if (control.hasValidator(Validators.required)) {\n const value = control.value as CalendarValue<M, D> | null | undefined;\n if (isCalendarValueEmpty(ctx.mode, value)) {\n errors.calendarRequired = true;\n }\n }\n\n // Phase 4 — constraint codes (only when the host wires constraints + adapter).\n if (ctx.constraints && ctx.adapter) {\n const value = control.value as CalendarValue<M, D> | null | undefined;\n if (\n value !== null &&\n value !== undefined &&\n !isCalendarValueEmpty<M, D>(ctx.mode, value)\n ) {\n applyConstraintCodes<M, D>(ctx, value, errors);\n }\n }\n\n return Object.keys(errors).length > 0 ? errors : null;\n };\n}\n\n/**\n * Mode-aware constraint validator. Mutates `errors` in place — the caller\n * decides whether the resulting object is `null` (no codes) or non-null.\n *\n * @internal\n */\nfunction applyConstraintCodes<M extends CalendarMode, D>(\n ctx: CalendarValidatorContext<M, D>,\n value: CalendarValue<M, D>,\n errors: CalendarValidationErrors,\n): void {\n const adapter = ctx.adapter!;\n const constraints = ctx.constraints!;\n const min = constraints.minDate;\n const max = constraints.maxDate;\n\n const checkSingle = (date: D): void => {\n if (min && adapter.compare(date, min) < 0) {\n errors.calendarMinDate = { min, actual: date };\n }\n if (max && adapter.compare(date, max) > 0) {\n errors.calendarMaxDate = { max, actual: date };\n }\n if (resolveDateDisabled(date, constraints, adapter)) {\n // Suppress when min/max already flagged the same date — `calendarDisabledDate`\n // is the catch-all for the non-range constraint sources.\n if (!errors.calendarMinDate && !errors.calendarMaxDate) {\n errors.calendarDisabledDate = { actual: date };\n }\n }\n };\n\n if (ctx.mode === 'single') {\n checkSingle(value as unknown as D);\n return;\n }\n\n if (ctx.mode === 'multiple') {\n const arr = value as unknown as D[];\n for (const d of arr) {\n checkSingle(d);\n if (errors.calendarMinDate || errors.calendarMaxDate || errors.calendarDisabledDate) break;\n }\n const limit = ctx.maxSelections;\n if (limit !== null && limit !== undefined && arr.length > limit) {\n errors.calendarMaxSelections = { limit, actual: arr.length };\n }\n return;\n }\n\n // range\n const range = value as unknown as { start: D | null; end: D | null };\n if (range.start) checkSingle(range.start);\n if (range.end) checkSingle(range.end);\n if (range.start && range.end) {\n if (adapter.compare(range.start, range.end) > 0) {\n errors.calendarInvalidRange = { start: range.start, end: range.end };\n return;\n }\n if (rangeCrossesDisabled(range.start, range.end, constraints, adapter, false)) {\n errors.calendarDisabledDate = { actual: range };\n }\n const length = rangeLengthDays(range.start, range.end, adapter);\n const minLen = ctx.minRangeLength;\n const maxLen = ctx.maxRangeLength;\n if (minLen !== null && minLen !== undefined && length < minLen) {\n errors.calendarRangeTooShort = { length, min: minLen };\n }\n if (maxLen !== null && maxLen !== undefined && length > maxLen) {\n errors.calendarRangeTooLong = { length, max: maxLen };\n }\n }\n}\n\n/**\n * Standalone required-validator helper for consumers who want to compose\n * calendar-required on a control that is **not** bound directly to a\n * `CalendarComponent`. The rule is identical: mode-specific empty ⇒ error.\n */\nexport function calendarRequiredValidator<M extends CalendarMode, D>(mode: M): ValidatorFn {\n return (control: AbstractControl): CalendarValidationErrors | null => {\n const value = control.value as CalendarValue<M, D> | null | undefined;\n return isCalendarValueEmpty(mode, value) ? { calendarRequired: true } : null;\n };\n}\n","import { InjectionToken } from '@angular/core';\n\n/** Names of month / day-of-week labels, in three densities. */\nexport type TwDateNameStyle = 'long' | 'short' | 'narrow';\n\n/**\n * Injection token for a per-instance timezone override (§7.4, §4.3).\n * When set, TZ-aware adapters resolve `today()` and date-range math against\n * the supplied IANA timezone. Floating (naive) adapters ignore the token.\n */\nexport const TZ_OVERRIDE = new InjectionToken<string>('tw-calendar/TZ_OVERRIDE');\n\n/**\n * Injection token for the default value transformer (§7.4, §7.6). Phase 14 wires\n * the component-level `valueTransformer` input to override this DI default.\n * Shipped as a token shell now so later phases can bind against it without a\n * breaking change.\n */\nexport const DATE_SERIALIZATION = new InjectionToken<unknown>('tw-calendar/DATE_SERIALIZATION');\n\n/**\n * Format definitions consumed by the calendar header, views, and text-input\n * directive. Each field accepts an adapter-specific format token — the default\n * {@link NativeDateAdapter} interprets them as `Intl.DateTimeFormatOptions`\n * bags wrapped in a {@link NativeDateFormat}.\n *\n * Phases 2+ only require the `input`, `display`, `monthLabel`, and `yearLabel`\n * members; the rest ship as slots now so later phases (5 — CalendarIntl, 9 —\n * multi-month, 11 — text input) can populate them without an API break.\n */\nexport interface DateFormats {\n /** Format used when parsing user-typed input. */\n readonly input?: unknown;\n /** Format used when rendering a date into a text input's display value. */\n readonly display?: unknown;\n /** Format used for the header's month label (e.g., `\"January 2026\"`). */\n readonly monthLabel?: unknown;\n /** Format used for the header's year label in month view (e.g., `\"2026\"`). */\n readonly yearLabel?: unknown;\n /** Format used for the years-view header (e.g., `\"2020 – 2039\"`). */\n readonly decadeLabel?: unknown;\n /** Format used for a day-cell's accessible label. */\n readonly a11yLabel?: unknown;\n /** Format used for a month-cell's accessible label. */\n readonly monthA11yLabel?: unknown;\n /** Format used for a day-of-week column header's accessible label. */\n readonly dayA11yLabel?: unknown;\n /** Format used for a month name inside the year view's accessible label. */\n readonly yearViewMonthA11yLabel?: unknown;\n}\n\n/** DI token carrying the default `DateFormats`. The calendar's `dateFormats` input overrides. */\nexport const DATE_FORMATS = new InjectionToken<DateFormats>('tw-calendar/DateFormats');\n\n/**\n * Abstract date adapter. Ship a subclass to swap the underlying date library\n * (Luxon, date-fns, Temporal). The calendar consumes only the methods defined\n * here — nothing else.\n *\n * `D` is the native date type understood by the underlying library.\n *\n * Method contract aligned with spec §20.1 / §20.2: `addYears`/`addMonths`/\n * `addDays`, `compare`, 1-based-month `create`, `toIso`/`fromIso`, and\n * optional TZ virtuals.\n */\nexport abstract class DateAdapter<D> {\n /** Returns today at midnight, local time (or in the adapter's configured TZ). */\n abstract today(): D;\n\n /**\n * Constructs a date.\n *\n * **`month` is 1-based** — pass `1` for January, `12` for December.\n * Callers migrating from the pre-v1 `createDate(year, zeroBasedMonth, day)`\n * must bump the month argument by one.\n *\n * `day` is 1-based.\n */\n abstract create(year: number, month: number, day: number): D;\n\n /** Returns a defensive copy. */\n abstract clone(date: D): D;\n\n /** Locale for label formatting. Subclasses may honour this or ignore. */\n abstract setLocale(locale: string): void;\n abstract getLocale(): string;\n\n /** Field getters. `month` is zero-based. */\n abstract getYear(date: D): number;\n abstract getMonth(date: D): number;\n abstract getDate(date: D): number;\n /** 0 = Sunday, 6 = Saturday. */\n abstract getDayOfWeek(date: D): number;\n\n abstract getNumDaysInMonth(date: D): number;\n\n /** Time getters — hours are 0–23, minutes and seconds are 0–59. */\n abstract getHours(date: D): number;\n abstract getMinutes(date: D): number;\n abstract getSeconds(date: D): number;\n\n /**\n * Returns a new date with the same year/month/day as `date` but the supplied\n * time-of-day. Adapters must not mutate `date`. `hours` is 0–23.\n *\n * **Not part of the calendar's v1 spec surface** — the calendar does not\n * consume time-of-day. Retained for the companion time-picker component.\n */\n abstract withTime(date: D, hours: number, minutes: number, seconds: number): D;\n\n /** 0 = Sunday, 1 = Monday, etc. */\n abstract getFirstDayOfWeek(): number;\n\n /** Days per week. Override only for non-Gregorian adapters (WONT v1). */\n getDaysInWeek(): number {\n return 7;\n }\n\n /** Returns month names for the current locale. */\n abstract getMonthNames(style: TwDateNameStyle): string[];\n /** Returns day-of-week names for the current locale, starting at Sunday. */\n abstract getDayOfWeekNames(style: TwDateNameStyle): string[];\n /** Returns 1-based day-of-month names (`[\"1\", \"2\", ..., \"31\"]`) for locales that localize numerals. Default implementation returns Latin digits. */\n getDateNames(_style: TwDateNameStyle = 'short'): string[] {\n return Array.from({ length: 31 }, (_, i) => String(i + 1));\n }\n /** Returns the localised year label (e.g. `\"2026\"`). */\n abstract getYearName(date: D): string;\n\n /** Formats a date for display. Subclasses pick their own format tokens. */\n abstract format(date: D, displayFormat: unknown): string;\n\n /** Date arithmetic — preserve original in immutable adapters. */\n abstract addYears(date: D, years: number): D;\n abstract addMonths(date: D, months: number): D;\n abstract addDays(date: D, days: number): D;\n\n /** Time arithmetic. Default implementation derives hours/minutes from day arithmetic via `addDays` — adapters with better precision should override. */\n addHours(date: D, hours: number): D {\n const minutes = hours * 60;\n return this.addMinutes(date, minutes);\n }\n abstract addMinutes(date: D, minutes: number): D;\n\n /** Returns negative when `first` is earlier, 0 when equal, positive when later. */\n abstract compare(first: D, second: D): number;\n abstract sameDate(first: D | null | undefined, second: D | null | undefined): boolean;\n\n /** Whether a raw value can be turned into a valid date. */\n abstract isValid(date: D): boolean;\n /** Returns an invalid sentinel of type `D` (NaN-date for native). */\n abstract invalid(): D;\n\n /** Attempt to parse an ISO or free-form string. Return `null` on failure. */\n abstract parse(value: unknown, parseFormat?: unknown): D | null;\n\n /** Coerce an incoming value from form writes. */\n abstract deserialize(value: unknown): D | null;\n\n /** ISO 8601 (`YYYY-MM-DD`) serialization. Phases using serialized forms call this. */\n abstract toIso(date: D): string;\n\n /** ISO 8601 (`YYYY-MM-DD`) deserialization counterpart to `toIso`. */\n fromIso(iso: string): D | null {\n return this.parse(iso);\n }\n\n // ---------------------------------------------------------------------------\n // Spec §20.2 extension methods (concrete with sensible defaults; adapters may\n // override for precision or DST correctness).\n // ---------------------------------------------------------------------------\n\n /**\n * Start-of-day normalization. Default implementation rebuilds the date at\n * `00:00:00.000` local time; DST-skipped hours (e.g., 02:00 on DST start) are\n * resolved to the wall-clock midnight the adapter considers valid.\n *\n * TZ-aware adapters MUST override to normalize in the adapter's TZ.\n */\n abstract startOfDay(date: D): D;\n\n /** First day of the week containing `date`. `firstDayOfWeek` defaults to `getFirstDayOfWeek()`. */\n startOfWeek(date: D, firstDayOfWeek?: number): D {\n const first = firstDayOfWeek ?? this.getFirstDayOfWeek();\n const dow = this.getDayOfWeek(date);\n const diff = (dow - first + this.getDaysInWeek()) % this.getDaysInWeek();\n return this.addDays(date, -diff);\n }\n\n /** Last day of the week containing `date`. */\n endOfWeek(date: D, firstDayOfWeek?: number): D {\n return this.addDays(this.startOfWeek(date, firstDayOfWeek), this.getDaysInWeek() - 1);\n }\n\n /** Equality on year + month. */\n sameMonth(first: D, second: D): boolean {\n return (\n this.getYear(first) === this.getYear(second) &&\n this.getMonth(first) === this.getMonth(second)\n );\n }\n\n /** Equality on year only. */\n sameYear(first: D, second: D): boolean {\n return this.getYear(first) === this.getYear(second);\n }\n\n /** Clamp a date into the [min, max] window. */\n clampDate(date: D, min?: D | null, max?: D | null): D {\n if (min && this.compare(date, min) < 0) return min;\n if (max && this.compare(date, max) > 0) return max;\n return date;\n }\n\n // ---------------------------------------------------------------------------\n // Optional TZ-aware virtuals (§4.2). Floating adapters implement as\n // pass-through; TZ-aware adapters (Luxon, Temporal) override.\n // ---------------------------------------------------------------------------\n\n /** Returns the adapter's configured timezone, or `null` for floating adapters. */\n getTimezone(): string | null {\n return null;\n }\n\n /** Returns a copy of `date` reinterpreted in `tz`. Floating adapters pass through. */\n withTimezone(date: D, _tz: string): D {\n return date;\n }\n\n /** Returns `true` when `date` sits inside a DST-transition. Floating adapters return `false`. */\n isDST(_date: D): boolean {\n return false;\n }\n\n /** Resolves an ambiguous wall-clock time (DST fall-back) to one of the two candidates. Floating adapters pass through. */\n resolveAmbiguous(date: D, _prefer: 'earlier' | 'later'): D {\n return date;\n }\n}\n\n/**\n * Injection token for the calendar's `DateAdapter`. Prefer `provideNativeDateAdapter()`\n * or `provideTwCalendar({ adapter })` over binding this token directly.\n */\nexport const DATE_ADAPTER = new InjectionToken<DateAdapter<unknown>>('tw-calendar/DateAdapter');\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n type ElementRef,\n input,\n output,\n viewChild,\n type InputSignal,\n type OutputEmitterRef,\n type Signal,\n type TemplateRef,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { tv } from 'tailwind-variants';\nimport type { CalendarCell, CalendarCellState, CalendarViewState } from './calendar.types';\n\n/** Emitted on keyboard navigation keys (arrows, Home/End, PageUp/PageDown). */\nexport interface CalendarCellKeyNavEvent<D> {\n readonly direction: 'left' | 'right' | 'up' | 'down' | 'home' | 'end' | 'pageUp' | 'pageDown';\n /** True when the originating KeyboardEvent had Shift held — drives year-jump variants of Page navigation. */\n readonly shiftKey: boolean;\n readonly cell: CalendarCell<D>;\n}\n\nconst cellVariants = tv(\n {\n slots: {\n wrapper: 'relative flex items-center justify-center',\n button:\n 'relative flex items-center justify-center cursor-pointer select-none transition-colors duration-normal motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:cursor-not-allowed',\n },\n variants: {\n view: {\n day: { button: 'h-9 w-9 text-sm rounded-full' },\n month: { button: 'h-10 w-16 text-sm rounded-md' },\n year: { button: 'h-10 w-14 text-sm rounded-md' },\n },\n // Slot tokens own light/dark contrast — no `dark:`, no shade picks.\n // The range wash uses `primary-soft-hover` (one step deeper than `-soft`)\n // so the in-range band reads slightly stronger than the popover surface\n // without competing with the selected endpoints.\n state: {\n default: { button: 'text-fg hover:bg-surface-muted' },\n today: {\n button:\n 'text-primary-fg font-semibold ring-1 ring-primary-border-strong hover:bg-primary-soft',\n },\n selected: {\n button: 'bg-primary-solid text-primary-solid-fg font-semibold hover:bg-primary-solid-hover',\n },\n 'range-start': {\n button:\n 'bg-primary-solid text-primary-solid-fg font-semibold rounded-l-full rounded-r-none hover:bg-primary-solid-hover',\n },\n 'range-middle': {\n button:\n 'bg-primary-soft-hover text-primary-soft-fg rounded-none hover:bg-primary-soft',\n },\n 'range-end': {\n button:\n 'bg-primary-solid text-primary-solid-fg font-semibold rounded-r-full rounded-l-none hover:bg-primary-solid-hover',\n },\n 'preview-start': {\n button:\n 'bg-primary-soft-hover text-primary-soft-fg rounded-l-full rounded-r-none ring-1 ring-primary-border-strong opacity-70',\n },\n 'preview-middle': {\n button:\n 'bg-primary-soft-hover text-primary-soft-fg rounded-none opacity-70',\n },\n 'preview-end': {\n button:\n 'bg-primary-soft-hover text-primary-soft-fg rounded-r-full rounded-l-none ring-1 ring-primary-border-strong opacity-70',\n },\n disabled: { button: 'text-fg-subtle cursor-not-allowed hover:bg-transparent' },\n },\n outside: {\n true: { button: 'text-fg-muted' },\n false: {},\n },\n range: {\n none: {},\n start: { wrapper: 'bg-primary-soft-hover rounded-l-full' },\n middle: { wrapper: 'bg-primary-soft-hover' },\n end: { wrapper: 'bg-primary-soft-hover rounded-r-full' },\n single: {},\n },\n },\n compoundVariants: [\n { state: 'disabled', outside: true, class: { button: 'text-fg-subtle' } },\n { state: 'selected', class: { button: 'ring-0' } },\n ],\n defaultVariants: { view: 'day', state: 'default', outside: false, range: 'none' },\n },\n { twMerge: true },\n);\n\n/**\n * Renders a single cell in any calendar view.\n *\n * The cell is a stateless presentation component — selection / preview /\n * today state is all derived from the `CalendarCell<D>` data object. It\n * emits events for clicks, keyboard navigation, mouse hover, and focus.\n */\n@Component({\n selector: 'tw-calendar-cell',\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'gridcell',\n // Phase 4 — `data-state-*` styling contract (§34.5). Each attribute is `''`\n // when its boolean state is true and absent (`null`) otherwise so consumers\n // can target via `tw-calendar-cell[data-state-today]` selectors.\n '[attr.data-state-today]': \"cell().isToday ? '' : null\",\n '[attr.data-state-selected]': \"cell().isSelected && !cell().isRangeStart && !cell().isRangeEnd && !cell().isRangeMiddle ? '' : null\",\n '[attr.data-state-range-start]': \"cell().isRangeStart ? '' : null\",\n '[attr.data-state-range-end]': \"cell().isRangeEnd ? '' : null\",\n '[attr.data-state-in-range]': \"cell().isRangeMiddle ? '' : null\",\n '[attr.data-state-range-preview-start]': \"cell().isPreviewStart ? '' : null\",\n '[attr.data-state-range-preview-end]': \"cell().isPreviewEnd ? '' : null\",\n '[attr.data-state-in-range-preview]': \"cell().isPreviewMiddle ? '' : null\",\n '[attr.data-state-invalid-preview]': \"cell().isInvalidPreview ? '' : null\",\n '[attr.data-state-invalid-flash]': \"cell().isInvalidFlash ? '' : null\",\n '[attr.data-state-disabled]': \"!cell().enabled ? '' : null\",\n '[attr.data-state-out-of-month]': \"outside() ? '' : null\",\n '[attr.data-state-weekend]': \"cell().isWeekend ? '' : null\",\n '[attr.data-state-focused]': \"tabindex() === 0 ? '' : null\",\n },\n template: `\n <div [class]=\"wrapperClasses()\">\n <button\n #cellButton\n type=\"button\"\n [class]=\"buttonClasses()\"\n [attr.aria-label]=\"cell().ariaLabel\"\n [attr.aria-selected]=\"cell().isSelected || null\"\n [attr.aria-disabled]=\"!cell().enabled || null\"\n [attr.aria-current]=\"cell().isToday ? 'date' : null\"\n [attr.tabindex]=\"tabindex()\"\n [disabled]=\"!cell().enabled\"\n (click)=\"onClick()\"\n (keydown)=\"onKeydown($event)\"\n (mouseenter)=\"onMouseEnter()\"\n (focus)=\"onFocus()\"\n >\n @if (cellTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"cellTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: cell() }\"\n />\n } @else {\n {{ cell().displayValue }}\n }\n </button>\n </div>\n `,\n})\nexport class CalendarCellComponent<D> {\n private readonly buttonRef: Signal<ElementRef<HTMLButtonElement> | undefined> =\n viewChild<ElementRef<HTMLButtonElement>>('cellButton');\n\n /** The cell data object to render. */\n readonly cell: InputSignal<CalendarCell<D>> = input.required<CalendarCell<D>>();\n\n /** The active calendar view — drives cell dimensions and radius. */\n readonly view: InputSignal<CalendarViewState> = input<CalendarViewState>('day');\n\n /** `true` when the cell's date is outside the currently displayed month. */\n readonly outside: InputSignal<boolean> = input<boolean>(false);\n\n /** Tab index for roving focus (`0` for the active cell, `-1` otherwise). */\n readonly tabindex: InputSignal<number> = input<number>(-1);\n\n /** Optional template rendered inside the button — receives `{ $implicit: CalendarCell<D> }`. */\n readonly cellTemplate: InputSignal<TemplateRef<{ $implicit: CalendarCell<D> }> | null> =\n input<TemplateRef<{ $implicit: CalendarCell<D> }> | null>(null);\n\n /** Emitted when the user activates the cell (click, Enter, or Space). */\n readonly selected: OutputEmitterRef<CalendarCell<D>> = output<CalendarCell<D>>();\n\n /** Emitted when the cell gains focus. */\n readonly focused: OutputEmitterRef<CalendarCell<D>> = output<CalendarCell<D>>();\n\n /** Emitted on pointer hover — parent uses this to drive range preview. */\n readonly previewed: OutputEmitterRef<CalendarCell<D>> = output<CalendarCell<D>>();\n\n /** Emitted on navigation keys (arrows, Home/End, PageUp/PageDown). */\n readonly keyNav: OutputEmitterRef<CalendarCellKeyNavEvent<D>> = output<CalendarCellKeyNavEvent<D>>();\n\n protected readonly cellState: Signal<CalendarCellState> = computed(() => {\n const c = this.cell();\n if (!c.enabled) return 'disabled';\n if (c.isRangeStart) return 'range-start';\n if (c.isRangeEnd) return 'range-end';\n if (c.isRangeMiddle) return 'range-middle';\n if (c.isPreviewStart) return 'preview-start';\n if (c.isPreviewEnd) return 'preview-end';\n if (c.isPreviewMiddle) return 'preview-middle';\n if (c.isSelected) return 'selected';\n if (c.isToday) return 'today';\n return 'default';\n });\n\n protected readonly wrapperRange: Signal<'none' | 'start' | 'middle' | 'end' | 'single'> = computed(() => {\n const c = this.cell();\n if (c.isRangeStart && c.isRangeEnd) return 'single';\n if (c.isRangeStart) return 'start';\n if (c.isRangeEnd) return 'end';\n if (c.isRangeMiddle) return 'middle';\n return 'none';\n });\n\n private readonly variantResult = computed(() =>\n cellVariants({\n view: this.view(),\n state: this.cellState(),\n outside: this.outside(),\n range: this.wrapperRange(),\n }),\n );\n\n protected readonly wrapperClasses: Signal<string> = computed(() => this.variantResult().wrapper());\n\n protected readonly buttonClasses: Signal<string> = computed(() => {\n const base = this.variantResult().button();\n const extra = this.cell().cssClasses;\n return extra ? `${base} ${extra}` : base;\n });\n\n protected onClick(): void {\n const c = this.cell();\n if (c.enabled) this.selected.emit(c);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const navKeys: Record<string, CalendarCellKeyNavEvent<D>['direction']> = {\n ArrowLeft: 'left',\n ArrowRight: 'right',\n ArrowUp: 'up',\n ArrowDown: 'down',\n Home: 'home',\n End: 'end',\n PageUp: 'pageUp',\n PageDown: 'pageDown',\n };\n const direction = navKeys[event.key];\n if (direction) {\n event.preventDefault();\n this.keyNav.emit({ direction, shiftKey: event.shiftKey, cell: this.cell() });\n return;\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n const c = this.cell();\n if (c.enabled) this.selected.emit(c);\n }\n }\n\n protected onMouseEnter(): void {\n this.previewed.emit(this.cell());\n }\n\n protected onFocus(): void {\n this.focused.emit(this.cell());\n }\n\n /** Imperatively focuses this cell's button. */\n focusButton(): void {\n this.buttonRef()?.nativeElement.focus();\n }\n}\n","import {\n Directive,\n afterEveryRender,\n computed,\n inject,\n input,\n output,\n signal,\n type InputSignal,\n type OutputEmitterRef,\n type Signal,\n type TemplateRef,\n type WritableSignal,\n} from '@angular/core';\nimport type { CalendarCellComponent } from './calendar-cell';\nimport type {\n CalendarCell,\n CalendarViewState,\n DateClassFn,\n DateFilterFn,\n DateRange,\n DisabledDates,\n} from './calendar.types';\nimport { type DateAdapter, DATE_ADAPTER } from './date-adapter';\nimport { isDateInRange } from './calendar.utils';\n\n/**\n * Abstract base for the three calendar views. Holds shared inputs/outputs\n * (selection, preview, min/max, filters), cell-hit helpers, and roving-focus\n * machinery. Subclasses implement `cells`, `gridLabel`, `onKeyNav`, and\n * `getActiveCompareValue`.\n */\n@Directive()\nexport abstract class CalendarViewBase<D> {\n protected readonly dateAdapter: DateAdapter<D> = inject<DateAdapter<D>>(DATE_ADAPTER);\n\n /** The date that anchors the grid being rendered. */\n readonly activeDate: InputSignal<D> = input.required<D>();\n\n /** Current selection — scalar, array (multi), or range. */\n readonly selected: InputSignal<D | D[] | DateRange<D> | null> =\n input<D | D[] | DateRange<D> | null>(null);\n\n /** Minimum selectable date. */\n readonly minDate: InputSignal<D | null> = input<D | null>(null);\n /** Maximum selectable date. */\n readonly maxDate: InputSignal<D | null> = input<D | null>(null);\n\n /** Per-date predicate — return `false` to disable. */\n readonly dateFilter: InputSignal<DateFilterFn<D> | null> = input<DateFilterFn<D> | null>(null);\n\n /** Explicitly disabled dates — array (compared via `adapter.sameDate`) or predicate (returns `true` for disabled). */\n readonly disabledDates: InputSignal<DisabledDates<D> | null> =\n input<DisabledDates<D> | null>(null);\n\n /** Days of the week to disable (0=Sun … 6=Sat). Empty array = no day-of-week disabling. */\n readonly disabledDaysOfWeek: InputSignal<readonly number[]> = input<readonly number[]>([]);\n\n /** Per-cell class override. */\n readonly dateClass: InputSignal<DateClassFn<D> | null> = input<DateClassFn<D> | null>(null);\n\n /** Hover-preview start (set while user is mid-range pick). */\n readonly previewStart: InputSignal<D | null> = input<D | null>(null);\n /** Hover-preview end. */\n readonly previewEnd: InputSignal<D | null> = input<D | null>(null);\n\n /** Phase 6 — date that briefly flashes as invalid (rejected commit). Cleared by the orchestrator. */\n readonly invalidFlashDate: InputSignal<D | null> = input<D | null>(null);\n\n /** `true` when the parent calendar allows more than one cell to be selected at once. Drives `aria-multiselectable` on the grid host. */\n readonly multiSelectable: InputSignal<boolean> = input<boolean>(false);\n\n /** `true` when the parent calendar is in read-only mode. Drives `aria-readonly` on the grid host. */\n readonly readonlyGrid: InputSignal<boolean> = input<boolean>(false);\n\n /** Optional cell-content override. */\n readonly cellTemplate: InputSignal<TemplateRef<{ $implicit: CalendarCell<D> }> | null> =\n input<TemplateRef<{ $implicit: CalendarCell<D> }> | null>(null);\n\n /** Fires when the user activates an enabled cell (click, Enter, or Space). Payload is the activated cell's date. */\n readonly selectedChange: OutputEmitterRef<D> = output<D>();\n\n /** Fires when keyboard navigation or programmatic focus moves the roving cursor to a new cell. Payload is the new active date. */\n readonly activeDateChange: OutputEmitterRef<D> = output<D>();\n\n /** Fires on pointer hover with the hovered date, and again with `null` when the pointer leaves the grid. The parent orchestrator drives any range-preview state from this stream. */\n readonly previewChange: OutputEmitterRef<D | null> = output<D | null>();\n\n /** Subclass declares which view it represents. */\n protected abstract readonly view: CalendarViewState;\n\n /** Subclass exposes its cell components for focus management. */\n protected abstract readonly cellComponents: Signal<readonly CalendarCellComponent<D>[]>;\n\n /** Cell that should own the roving-tabindex cursor. `null` means \"use `activeDate`\". */\n protected readonly focusedCellValue: WritableSignal<number | null> = signal<number | null>(null);\n\n /** Pending focus target — drained after the next render. */\n protected readonly focusPending: WritableSignal<number | null> = signal<number | null>(null);\n\n constructor() {\n afterEveryRender(() => {\n const pending = this.focusPending();\n if (pending !== null) {\n const target = this.cellComponents().find((c) => c.cell().compareValue === pending);\n target?.focusButton();\n this.focusPending.set(null);\n }\n });\n }\n\n /** 2D grid of cells rendered by the subclass. */\n abstract readonly cells: Signal<CalendarCell<D>[][]>;\n\n /** Accessible label for the grid (e.g. \"January 2026\"). */\n abstract readonly gridLabel: Signal<string>;\n\n /** Today's date — memoized per view instance. */\n protected readonly today: Signal<D> = computed(() => this.dateAdapter.today());\n\n /** True when `date` is part of the committed selection. */\n protected isSelected(date: D): boolean {\n const sel = this.selected();\n if (!sel) return false;\n if (Array.isArray(sel)) {\n return sel.some((d) => this.dateAdapter.sameDate(date, d));\n }\n if (this.isDateRange(sel)) {\n const r = sel;\n if (r.start && this.dateAdapter.sameDate(date, r.start)) return true;\n if (r.end && this.dateAdapter.sameDate(date, r.end)) return true;\n return false;\n }\n return this.dateAdapter.sameDate(date, sel);\n }\n\n protected isRangeStart(date: D): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel)) return false;\n return sel.start !== null && this.dateAdapter.sameDate(date, sel.start);\n }\n\n protected isRangeEnd(date: D): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel)) return false;\n return sel.end !== null && this.dateAdapter.sameDate(date, sel.end);\n }\n\n protected isRangeMiddle(date: D): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel)) return false;\n if (!sel.start || !sel.end) return false;\n return (\n isDateInRange(date, sel.start, sel.end, this.dateAdapter) &&\n !this.isRangeStart(date) &&\n !this.isRangeEnd(date)\n );\n }\n\n protected isPreviewStart(date: D): boolean {\n const s = this.previewStart();\n return s !== null && this.dateAdapter.sameDate(date, s);\n }\n\n protected isPreviewEnd(date: D): boolean {\n const e = this.previewEnd();\n return e !== null && this.dateAdapter.sameDate(date, e);\n }\n\n protected isPreviewMiddle(date: D): boolean {\n const s = this.previewStart();\n const e = this.previewEnd();\n if (!s || !e) return false;\n return (\n isDateInRange(date, s, e, this.dateAdapter) &&\n !this.isPreviewStart(date) &&\n !this.isPreviewEnd(date)\n );\n }\n\n protected isDateRange(value: D | D[] | DateRange<D>): value is DateRange<D> {\n return value !== null && typeof value === 'object' && 'start' in value && 'end' in value;\n }\n\n /** Routes a cell activation up to the parent. */\n onCellSelected(cell: CalendarCell<D>): void {\n if (cell.enabled) this.selectedChange.emit(cell.value);\n }\n\n /** Routes hover events up to the parent (parent drives preview state). */\n onCellPreviewed(cell: CalendarCell<D>): void {\n this.previewChange.emit(cell.value);\n }\n\n /** Clears the preview when the pointer leaves the grid. */\n onGridMouseLeave(): void {\n this.previewChange.emit(null);\n }\n\n /** Subclass implements view-specific keyboard navigation. */\n abstract onKeyNav(event: { direction: string; cell: CalendarCell<D> }): void;\n\n /** Returns `true` when the cell owns the roving cursor. */\n isActiveCell(cell: CalendarCell<D>): boolean {\n const focused = this.focusedCellValue();\n if (focused !== null) return cell.compareValue === focused;\n return this.getActiveCompareValue() === cell.compareValue;\n }\n\n /** Compare value of the currently active date (subclass-specific). */\n protected abstract getActiveCompareValue(): number;\n\n /** Imperatively focuses the cell matching `compareValue` after the next render. */\n focusCell(compareValue: number): void {\n this.focusedCellValue.set(compareValue);\n this.focusPending.set(compareValue);\n }\n\n /** Focuses the cell that currently owns the roving cursor. */\n focusActiveCell(): void {\n const target = this.focusedCellValue() ?? this.getActiveCompareValue();\n this.focusCell(target);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n viewChildren,\n type InputSignal,\n type Signal,\n} from '@angular/core';\nimport { CalendarCellComponent, type CalendarCellKeyNavEvent } from './calendar-cell';\nimport type { CalendarCell, CalendarViewState } from './calendar.types';\nimport { DAYS_PER_WEEK, WEEKS_PER_MONTH, createCalendarCell } from './calendar.types';\nimport {\n createGrid,\n getFirstDayOfMonth,\n getWeekdayHeaders,\n isDateDisabled,\n isWeekend,\n type WeekdayHeader,\n} from './calendar.utils';\nimport { CalendarViewBase } from './calendar-view-base';\n\nconst TOTAL_CELLS = DAYS_PER_WEEK * WEEKS_PER_MONTH;\n\n/**\n * Month view — renders a 7×6 grid of day cells, with leading/trailing days\n * from adjacent months marked as \"outside\".\n */\n@Component({\n selector: 'tw-calendar-month-view',\n imports: [CalendarCellComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `\n <div\n role=\"grid\"\n [attr.aria-label]=\"gridLabel()\"\n [attr.aria-multiselectable]=\"multiSelectable() || null\"\n [attr.aria-readonly]=\"readonlyGrid() || null\"\n (mouseleave)=\"onGridMouseLeave()\"\n >\n <!-- gap-0: weekday headers align column-by-column with the day grid below, which itself must be gap-0 for contiguous range backgrounds. -->\n <div role=\"row\" class=\"grid grid-cols-7 gap-0\">\n @for (header of weekdayHeaders(); track $index) {\n <div\n role=\"columnheader\"\n class=\"flex items-center justify-center h-9 text-2xs font-medium text-fg-muted\"\n [attr.aria-label]=\"header.label\"\n >\n {{ header.narrow }}\n </div>\n }\n </div>\n @for (row of cells(); track $index) {\n <!-- gap-0: cells must touch so range-selection wrapper backgrounds (bg-primary-100 + rounded-l/r-full) form a continuous bar across adjacent days. -->\n <div role=\"row\" class=\"grid grid-cols-7 gap-0\">\n @for (cell of row; track cell.compareValue) {\n <tw-calendar-cell\n [cell]=\"cell\"\n [view]=\"view\"\n [outside]=\"isOutsideMonth(cell)\"\n [tabindex]=\"isActiveCell(cell) ? 0 : -1\"\n [cellTemplate]=\"cellTemplate()\"\n [attr.data-compare-value]=\"cell.compareValue\"\n (selected)=\"onCellSelected($event)\"\n (previewed)=\"onCellPreviewed($event)\"\n (keyNav)=\"onKeyNav($event)\"\n />\n }\n </div>\n }\n </div>\n `,\n})\nexport class MonthViewComponent<D> extends CalendarViewBase<D> {\n protected readonly view: CalendarViewState = 'day';\n\n protected readonly cellComponents: Signal<readonly CalendarCellComponent<D>[]> =\n viewChildren<CalendarCellComponent<D>>(CalendarCellComponent);\n\n /** Override first day of week (0=Sun, 1=Mon). */\n readonly firstDayOfWeek: InputSignal<number> = input<number>(0);\n\n /** Index within a multi-month row (0=left, 1+=right) — used by the orchestrator to disambiguate focus. */\n readonly gridIndex: InputSignal<number> = input<number>(0);\n\n readonly weekdayHeaders: Signal<WeekdayHeader[]> = computed(() =>\n getWeekdayHeaders(this.dateAdapter, 'long', this.firstDayOfWeek()),\n );\n\n readonly displayMonth: Signal<number> = computed(() =>\n this.dateAdapter.getMonth(this.activeDate()),\n );\n\n readonly displayYear: Signal<number> = computed(() =>\n this.dateAdapter.getYear(this.activeDate()),\n );\n\n readonly cells: Signal<CalendarCell<D>[][]> = computed(() => {\n const active = this.activeDate();\n const firstOfMonth = getFirstDayOfMonth(active, this.dateAdapter);\n const firstDayOfWeek = this.firstDayOfWeek();\n const firstDayOfMonthWeekday = this.dateAdapter.getDayOfWeek(firstOfMonth);\n const offset = (firstDayOfMonthWeekday - firstDayOfWeek + DAYS_PER_WEEK) % DAYS_PER_WEEK;\n const startDate = this.dateAdapter.addDays(firstOfMonth, -offset);\n\n const today = this.today();\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const dateFilter = this.dateFilter();\n const disabledDates = this.disabledDates();\n const disabledDaysOfWeek = this.disabledDaysOfWeek();\n const dateClass = this.dateClass();\n const displayedMonth = this.displayMonth();\n\n const days: CalendarCell<D>[] = [];\n for (let i = 0; i < TOTAL_CELLS; i++) {\n const date = this.dateAdapter.addDays(startDate, i);\n const dayOfMonth = this.dateAdapter.getDate(date);\n const cellMonth = this.dateAdapter.getMonth(date);\n const cellYear = this.dateAdapter.getYear(date);\n const compareValue = cellYear * 10000 + cellMonth * 100 + dayOfMonth;\n const cell = createCalendarCell<D>({\n value: date,\n displayValue: String(dayOfMonth),\n ariaLabel: this.dateAdapter.format(date, { dateTimeFormat: { dateStyle: 'full' } }),\n enabled: !isDateDisabled(\n date,\n minDate,\n maxDate,\n dateFilter,\n this.dateAdapter,\n disabledDates,\n disabledDaysOfWeek,\n ),\n cssClasses: dateClass ? dateClass(date, this.view) : '',\n compareValue,\n });\n cell.isToday = this.dateAdapter.sameDate(date, today);\n cell.isSelected = this.isSelected(date);\n cell.isRangeStart = this.isRangeStart(date);\n cell.isRangeEnd = this.isRangeEnd(date);\n cell.isRangeMiddle = this.isRangeMiddle(date);\n cell.isPreviewStart = this.isPreviewStart(date);\n cell.isPreviewEnd = this.isPreviewEnd(date);\n cell.isPreviewMiddle = this.isPreviewMiddle(date);\n cell.isOutOfMonth = cellMonth !== displayedMonth;\n cell.isWeekend = isWeekend(date, this.dateAdapter);\n const flashDate = this.invalidFlashDate();\n cell.isInvalidFlash = flashDate !== null && this.dateAdapter.sameDate(date, flashDate);\n days.push(cell);\n }\n return createGrid(days, DAYS_PER_WEEK);\n });\n\n readonly gridLabel: Signal<string> = computed(() => {\n const months = this.dateAdapter.getMonthNames('long');\n return `${months[this.displayMonth()]} ${this.displayYear()}`;\n });\n\n protected getActiveCompareValue(): number {\n const d = this.activeDate();\n return (\n this.dateAdapter.getYear(d) * 10000 +\n this.dateAdapter.getMonth(d) * 100 +\n this.dateAdapter.getDate(d)\n );\n }\n\n /** True when the cell's date sits in a neighbouring month (leading/trailing). */\n isOutsideMonth(cell: CalendarCell<D>): boolean {\n return this.dateAdapter.getMonth(cell.value) !== this.displayMonth();\n }\n\n onKeyNav(event: CalendarCellKeyNavEvent<D>): void {\n const currentDate = event.cell.value;\n let newDate: D | null = null;\n\n switch (event.direction) {\n case 'left':\n newDate = this.dateAdapter.addDays(currentDate, -1);\n break;\n case 'right':\n newDate = this.dateAdapter.addDays(currentDate, 1);\n break;\n case 'up':\n newDate = this.dateAdapter.addDays(currentDate, -DAYS_PER_WEEK);\n break;\n case 'down':\n newDate = this.dateAdapter.addDays(currentDate, DAYS_PER_WEEK);\n break;\n case 'home': {\n const dow = this.dateAdapter.getDayOfWeek(currentDate);\n const first = this.firstDayOfWeek();\n const diff = (dow - first + DAYS_PER_WEEK) % DAYS_PER_WEEK;\n newDate = this.dateAdapter.addDays(currentDate, -diff);\n break;\n }\n case 'end': {\n const dow = this.dateAdapter.getDayOfWeek(currentDate);\n const first = this.firstDayOfWeek();\n const daysUntilEnd = (6 - dow + first + DAYS_PER_WEEK) % DAYS_PER_WEEK;\n newDate = this.dateAdapter.addDays(currentDate, daysUntilEnd);\n break;\n }\n case 'pageUp':\n newDate = event.shiftKey\n ? this.dateAdapter.addYears(currentDate, -1)\n : this.dateAdapter.addMonths(currentDate, -1);\n break;\n case 'pageDown':\n newDate = event.shiftKey\n ? this.dateAdapter.addYears(currentDate, 1)\n : this.dateAdapter.addMonths(currentDate, 1);\n break;\n }\n\n if (newDate) {\n const year = this.dateAdapter.getYear(newDate);\n const month = this.dateAdapter.getMonth(newDate);\n const day = this.dateAdapter.getDate(newDate);\n const compareValue = year * 10000 + month * 100 + day;\n this.focusCell(compareValue);\n this.activeDateChange.emit(newDate);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n viewChildren,\n type Signal,\n} from '@angular/core';\nimport { CalendarCellComponent, type CalendarCellKeyNavEvent } from './calendar-cell';\nimport type { CalendarCell, CalendarViewState } from './calendar.types';\nimport { MONTHS_PER_ROW, createCalendarCell } from './calendar.types';\nimport { createGrid, isMonthDisabled } from './calendar.utils';\nimport { CalendarViewBase } from './calendar-view-base';\n\nconst MONTHS_PER_YEAR = 12;\n\n/**\n * Year view — 4×3 grid of month cells inside the active year.\n */\n@Component({\n selector: 'tw-calendar-year-view',\n imports: [CalendarCellComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `\n <div\n role=\"grid\"\n [attr.aria-label]=\"gridLabel()\"\n [attr.aria-multiselectable]=\"multiSelectable() || null\"\n [attr.aria-readonly]=\"readonlyGrid() || null\"\n (mouseleave)=\"onGridMouseLeave()\"\n >\n @for (row of cells(); track $index) {\n <div role=\"row\" class=\"grid grid-cols-4 gap-1\">\n @for (cell of row; track cell.compareValue) {\n <tw-calendar-cell\n [cell]=\"cell\"\n [view]=\"view\"\n [tabindex]=\"isActiveCell(cell) ? 0 : -1\"\n [cellTemplate]=\"cellTemplate()\"\n [attr.data-compare-value]=\"cell.compareValue\"\n (selected)=\"onCellSelected($event)\"\n (previewed)=\"onCellPreviewed($event)\"\n (keyNav)=\"onKeyNav($event)\"\n />\n }\n </div>\n }\n </div>\n `,\n})\nexport class YearViewComponent<D> extends CalendarViewBase<D> {\n protected readonly view: CalendarViewState = 'month';\n\n protected readonly cellComponents: Signal<readonly CalendarCellComponent<D>[]> =\n viewChildren<CalendarCellComponent<D>>(CalendarCellComponent);\n\n readonly displayYear: Signal<number> = computed(() =>\n this.dateAdapter.getYear(this.activeDate()),\n );\n\n readonly cells: Signal<CalendarCell<D>[][]> = computed(() => {\n const year = this.displayYear();\n const monthNames = this.dateAdapter.getMonthNames('short');\n const today = this.today();\n const todayYear = this.dateAdapter.getYear(today);\n const todayMonth = this.dateAdapter.getMonth(today);\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const dateClass = this.dateClass();\n\n const months: CalendarCell<D>[] = [];\n for (let m = 0; m < MONTHS_PER_YEAR; m++) {\n const date = this.dateAdapter.create(year, m + 1, 1);\n const name = monthNames[m] ?? '';\n const cell = createCalendarCell<D>({\n value: date,\n displayValue: name,\n ariaLabel: `${name} ${year}`,\n enabled: !isMonthDisabled(year, m, minDate, maxDate, this.dateAdapter),\n cssClasses: dateClass ? dateClass(date, this.view) : '',\n compareValue: m,\n });\n cell.isToday = year === todayYear && m === todayMonth;\n cell.isSelected = this.isMonthSelected(year, m);\n cell.isRangeStart = this.isMonthRangeStart(year, m);\n cell.isRangeEnd = this.isMonthRangeEnd(year, m);\n cell.isRangeMiddle = this.isMonthRangeMiddle(year, m);\n cell.isPreviewStart = this.isMonthPreviewStart(year, m);\n cell.isPreviewEnd = this.isMonthPreviewEnd(year, m);\n cell.isPreviewMiddle = this.isMonthPreviewMiddle(year, m);\n months.push(cell);\n }\n return createGrid(months, MONTHS_PER_ROW);\n });\n\n readonly gridLabel: Signal<string> = computed(() => `${this.displayYear()}`);\n\n protected getActiveCompareValue(): number {\n return this.dateAdapter.getMonth(this.activeDate());\n }\n\n onKeyNav(event: CalendarCellKeyNavEvent<D>): void {\n const currentMonth = this.dateAdapter.getMonth(event.cell.value);\n const year = this.displayYear();\n let newDate: D | null = null;\n\n switch (event.direction) {\n case 'left':\n if (currentMonth > 0) {\n newDate = this.dateAdapter.addMonths(event.cell.value, -1);\n this.focusCell(currentMonth - 1);\n }\n break;\n case 'right':\n if (currentMonth < 11) {\n newDate = this.dateAdapter.addMonths(event.cell.value, 1);\n this.focusCell(currentMonth + 1);\n }\n break;\n case 'up':\n if (currentMonth >= MONTHS_PER_ROW) {\n newDate = this.dateAdapter.addMonths(event.cell.value, -MONTHS_PER_ROW);\n this.focusCell(currentMonth - MONTHS_PER_ROW);\n }\n break;\n case 'down':\n if (currentMonth < MONTHS_PER_YEAR - MONTHS_PER_ROW) {\n newDate = this.dateAdapter.addMonths(event.cell.value, MONTHS_PER_ROW);\n this.focusCell(currentMonth + MONTHS_PER_ROW);\n }\n break;\n case 'home':\n newDate = this.dateAdapter.create(year, 1, 1);\n this.focusCell(0);\n break;\n case 'end':\n newDate = this.dateAdapter.create(year, 12, 1);\n this.focusCell(11);\n break;\n case 'pageUp':\n newDate = this.dateAdapter.addYears(event.cell.value, event.shiftKey ? -10 : -1);\n break;\n case 'pageDown':\n newDate = this.dateAdapter.addYears(event.cell.value, event.shiftKey ? 10 : 1);\n break;\n }\n if (newDate) this.activeDateChange.emit(newDate);\n }\n\n private isMonthSelected(year: number, month: number): boolean {\n const sel = this.selected();\n if (!sel) return false;\n if (Array.isArray(sel)) {\n return sel.some(\n (d) => this.dateAdapter.getYear(d) === year && this.dateAdapter.getMonth(d) === month,\n );\n }\n if (!this.isDateRange(sel)) {\n return this.dateAdapter.getYear(sel) === year && this.dateAdapter.getMonth(sel) === month;\n }\n const r = sel;\n if (r.start && this.dateAdapter.getYear(r.start) === year && this.dateAdapter.getMonth(r.start) === month) {\n return true;\n }\n if (r.end && this.dateAdapter.getYear(r.end) === year && this.dateAdapter.getMonth(r.end) === month) {\n return true;\n }\n return false;\n }\n\n private isMonthRangeStart(year: number, month: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.start) return false;\n return this.dateAdapter.getYear(sel.start) === year && this.dateAdapter.getMonth(sel.start) === month;\n }\n\n private isMonthRangeEnd(year: number, month: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.end) return false;\n return this.dateAdapter.getYear(sel.end) === year && this.dateAdapter.getMonth(sel.end) === month;\n }\n\n private isMonthRangeMiddle(year: number, month: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.start || !sel.end) return false;\n const monthDate = this.dateAdapter.create(year, month + 1, 1);\n const startMonth = this.dateAdapter.create(\n this.dateAdapter.getYear(sel.start),\n this.dateAdapter.getMonth(sel.start) + 1,\n 1,\n );\n const endMonth = this.dateAdapter.create(\n this.dateAdapter.getYear(sel.end),\n this.dateAdapter.getMonth(sel.end) + 1,\n 1,\n );\n return (\n this.dateAdapter.compare(monthDate, startMonth) > 0 &&\n this.dateAdapter.compare(monthDate, endMonth) < 0\n );\n }\n\n private isMonthPreviewStart(year: number, month: number): boolean {\n const s = this.previewStart();\n if (!s) return false;\n return this.dateAdapter.getYear(s) === year && this.dateAdapter.getMonth(s) === month;\n }\n\n private isMonthPreviewEnd(year: number, month: number): boolean {\n const e = this.previewEnd();\n if (!e) return false;\n return this.dateAdapter.getYear(e) === year && this.dateAdapter.getMonth(e) === month;\n }\n\n private isMonthPreviewMiddle(year: number, month: number): boolean {\n const s = this.previewStart();\n const e = this.previewEnd();\n if (!s || !e) return false;\n const monthDate = this.dateAdapter.create(year, month + 1, 1);\n const startMonth = this.dateAdapter.create(\n this.dateAdapter.getYear(s),\n this.dateAdapter.getMonth(s) + 1,\n 1,\n );\n const endMonth = this.dateAdapter.create(\n this.dateAdapter.getYear(e),\n this.dateAdapter.getMonth(e) + 1,\n 1,\n );\n return (\n this.dateAdapter.compare(monthDate, startMonth) > 0 &&\n this.dateAdapter.compare(monthDate, endMonth) < 0\n );\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n viewChildren,\n type Signal,\n} from '@angular/core';\nimport { CalendarCellComponent, type CalendarCellKeyNavEvent } from './calendar-cell';\nimport type { CalendarCell, CalendarViewState } from './calendar.types';\nimport { YEARS_PER_PAGE, YEARS_PER_ROW, createCalendarCell } from './calendar.types';\nimport { createGrid, getMultiYearStartingYear, isYearDisabled } from './calendar.utils';\nimport { CalendarViewBase } from './calendar-view-base';\n\n/** Default years per page — kept until Phase 7 introduces the `yearsPerPage` input. */\nexport const yearsPerPage = YEARS_PER_PAGE;\n\n/**\n * Year view — 4×6 grid (24 years by default). A user clicks a year to drill\n * down to the month-of-year view. In the spec vocabulary this is the\n * `'year'` view state (§7.4, §22).\n */\n@Component({\n selector: 'tw-calendar-years-view',\n imports: [CalendarCellComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `\n <div\n role=\"grid\"\n [attr.aria-label]=\"gridLabel()\"\n [attr.aria-multiselectable]=\"multiSelectable() || null\"\n [attr.aria-readonly]=\"readonlyGrid() || null\"\n (mouseleave)=\"onGridMouseLeave()\"\n >\n @for (row of cells(); track $index) {\n <div role=\"row\" class=\"grid grid-cols-4 gap-1\">\n @for (cell of row; track cell.compareValue) {\n <tw-calendar-cell\n [cell]=\"cell\"\n [view]=\"view\"\n [tabindex]=\"isActiveCell(cell) ? 0 : -1\"\n [cellTemplate]=\"cellTemplate()\"\n [attr.data-compare-value]=\"cell.compareValue\"\n (selected)=\"onCellSelected($event)\"\n (previewed)=\"onCellPreviewed($event)\"\n (keyNav)=\"onKeyNav($event)\"\n />\n }\n </div>\n }\n </div>\n `,\n})\nexport class YearsViewComponent<D> extends CalendarViewBase<D> {\n protected readonly view: CalendarViewState = 'year';\n\n protected readonly cellComponents: Signal<readonly CalendarCellComponent<D>[]> =\n viewChildren<CalendarCellComponent<D>>(CalendarCellComponent);\n\n readonly startYear: Signal<number> = computed(() =>\n getMultiYearStartingYear(this.dateAdapter.getYear(this.activeDate()), YEARS_PER_PAGE),\n );\n\n readonly endYear: Signal<number> = computed(() => this.startYear() + YEARS_PER_PAGE - 1);\n\n readonly cells: Signal<CalendarCell<D>[][]> = computed(() => {\n const start = this.startYear();\n const today = this.today();\n const todayYear = this.dateAdapter.getYear(today);\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const dateClass = this.dateClass();\n\n const years: CalendarCell<D>[] = [];\n for (let i = 0; i < YEARS_PER_PAGE; i++) {\n const year = start + i;\n const date = this.dateAdapter.create(year, 1, 1);\n const label = this.dateAdapter.getYearName(date);\n const cell = createCalendarCell<D>({\n value: date,\n displayValue: label,\n ariaLabel: label,\n enabled: !isYearDisabled(year, minDate, maxDate, this.dateAdapter),\n cssClasses: dateClass ? dateClass(date, this.view) : '',\n compareValue: year,\n });\n cell.isToday = year === todayYear;\n cell.isSelected = this.isYearSelected(year);\n cell.isRangeStart = this.isYearRangeStart(year);\n cell.isRangeEnd = this.isYearRangeEnd(year);\n cell.isRangeMiddle = this.isYearRangeMiddle(year);\n cell.isPreviewStart = this.isYearPreviewStart(year);\n cell.isPreviewEnd = this.isYearPreviewEnd(year);\n cell.isPreviewMiddle = this.isYearPreviewMiddle(year);\n years.push(cell);\n }\n return createGrid(years, YEARS_PER_ROW);\n });\n\n readonly gridLabel: Signal<string> = computed(() => `${this.startYear()} – ${this.endYear()}`);\n\n protected getActiveCompareValue(): number {\n return this.dateAdapter.getYear(this.activeDate());\n }\n\n onKeyNav(event: CalendarCellKeyNavEvent<D>): void {\n const currentYear = this.dateAdapter.getYear(event.cell.value);\n const start = this.startYear();\n const end = this.endYear();\n const indexInPage = currentYear - start;\n let newDate: D | null = null;\n\n switch (event.direction) {\n case 'left':\n if (currentYear > start) {\n newDate = this.dateAdapter.addYears(event.cell.value, -1);\n this.focusCell(currentYear - 1);\n }\n break;\n case 'right':\n if (currentYear < end) {\n newDate = this.dateAdapter.addYears(event.cell.value, 1);\n this.focusCell(currentYear + 1);\n }\n break;\n case 'up':\n if (indexInPage >= YEARS_PER_ROW) {\n newDate = this.dateAdapter.addYears(event.cell.value, -YEARS_PER_ROW);\n this.focusCell(currentYear - YEARS_PER_ROW);\n }\n break;\n case 'down':\n if (indexInPage < YEARS_PER_PAGE - YEARS_PER_ROW) {\n newDate = this.dateAdapter.addYears(event.cell.value, YEARS_PER_ROW);\n this.focusCell(currentYear + YEARS_PER_ROW);\n }\n break;\n case 'home':\n newDate = this.dateAdapter.create(start, 1, 1);\n this.focusCell(start);\n break;\n case 'end':\n newDate = this.dateAdapter.create(end, 1, 1);\n this.focusCell(end);\n break;\n case 'pageUp':\n newDate = this.dateAdapter.addYears(\n event.cell.value,\n event.shiftKey ? -YEARS_PER_PAGE * 10 : -YEARS_PER_PAGE,\n );\n break;\n case 'pageDown':\n newDate = this.dateAdapter.addYears(\n event.cell.value,\n event.shiftKey ? YEARS_PER_PAGE * 10 : YEARS_PER_PAGE,\n );\n break;\n }\n if (newDate) this.activeDateChange.emit(newDate);\n }\n\n private isYearSelected(year: number): boolean {\n const sel = this.selected();\n if (!sel) return false;\n if (Array.isArray(sel)) {\n return sel.some((d) => this.dateAdapter.getYear(d) === year);\n }\n if (!this.isDateRange(sel)) {\n return this.dateAdapter.getYear(sel) === year;\n }\n const r = sel;\n if (r.start && this.dateAdapter.getYear(r.start) === year) return true;\n if (r.end && this.dateAdapter.getYear(r.end) === year) return true;\n return false;\n }\n\n private isYearRangeStart(year: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.start) return false;\n return this.dateAdapter.getYear(sel.start) === year;\n }\n\n private isYearRangeEnd(year: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.end) return false;\n return this.dateAdapter.getYear(sel.end) === year;\n }\n\n private isYearRangeMiddle(year: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.start || !sel.end) return false;\n const startYear = this.dateAdapter.getYear(sel.start);\n const endYear = this.dateAdapter.getYear(sel.end);\n return year > startYear && year < endYear;\n }\n\n private isYearPreviewStart(year: number): boolean {\n const s = this.previewStart();\n return s !== null && this.dateAdapter.getYear(s) === year;\n }\n\n private isYearPreviewEnd(year: number): boolean {\n const e = this.previewEnd();\n return e !== null && this.dateAdapter.getYear(e) === year;\n }\n\n private isYearPreviewMiddle(year: number): boolean {\n const s = this.previewStart();\n const e = this.previewEnd();\n if (!s || !e) return false;\n return year > this.dateAdapter.getYear(s) && year < this.dateAdapter.getYear(e);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\n\n/** Outcome returned by a selection strategy's `select` call. */\nexport interface SelectionResult<D, S> {\n /** The new selection value after applying the click. */\n readonly selection: S;\n /** Whether the selection is committed. */\n readonly isComplete: boolean;\n /** Optional range used by the preview layer while the selection is in progress. */\n readonly preview?: DateRange<D> | null;\n}\n\n/**\n * Pluggable selection behaviour. Provide via `CALENDAR_SELECTION_STRATEGY` to\n * customise how clicks mutate the calendar's `selected` value.\n *\n * `D` is the date type understood by the active `DateAdapter`.\n * `S` is the shape of the `selected` value — `D | null` for single,\n * `DateRange<D> | null` for range / week, `readonly D[]` for multi.\n */\nexport abstract class CalendarSelectionStrategy<D, S = unknown> {\n /** Produces the new selection after a click on `date`. */\n abstract select(date: D, current: S): SelectionResult<D, S>;\n\n /** Returns the range to highlight while the pointer hovers `active`. */\n abstract createPreview(active: D | null, current: S): DateRange<D> | null;\n\n /** Whether `date` should render as selected. */\n abstract isSelected(date: D, current: S): boolean;\n\n /** Whether `date` is the start of a committed range. */\n abstract isRangeStart(date: D, current: S): boolean;\n\n /** Whether `date` is the end of a committed range. */\n abstract isRangeEnd(date: D, current: S): boolean;\n\n /** Whether `date` sits strictly between the endpoints of a committed range. */\n abstract isRangeMiddle(date: D, current: S): boolean;\n}\n\n/** Injection token for the active selection strategy. */\nexport const CALENDAR_SELECTION_STRATEGY = new InjectionToken<\n CalendarSelectionStrategy<unknown, unknown>\n>('tw-calendar/SelectionStrategy');\n","import { inject, Injectable } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\nimport { type DateAdapter, DATE_ADAPTER } from '../date-adapter';\nimport { CalendarSelectionStrategy, type SelectionResult } from './selection-strategy';\n\n/**\n * Single-date selection. Every click commits a new selection immediately.\n * No preview range. `selected` has shape `D | null`.\n */\n@Injectable()\nexport class SingleSelectionStrategy<D> extends CalendarSelectionStrategy<D, D | null> {\n private readonly dateAdapter: DateAdapter<D> = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n select(date: D, _current: D | null): SelectionResult<D, D | null> {\n return { selection: date, isComplete: true };\n }\n\n createPreview(_active: D | null, _current: D | null): DateRange<D> | null {\n return null;\n }\n\n isSelected(date: D, current: D | null): boolean {\n if (!current) return false;\n return this.dateAdapter.sameDate(date, current);\n }\n\n isRangeStart(_date: D, _current: D | null): boolean {\n return false;\n }\n\n isRangeEnd(_date: D, _current: D | null): boolean {\n return false;\n }\n\n isRangeMiddle(_date: D, _current: D | null): boolean {\n return false;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\nimport { type DateAdapter, DATE_ADAPTER } from '../date-adapter';\nimport { isDateInRange } from '../calendar.utils';\nimport { CalendarSelectionStrategy, type SelectionResult } from './selection-strategy';\n\n/**\n * Date-range selection.\n *\n * - First click sets the start (selection incomplete).\n * - Second click sets the end (selection complete).\n * - If the second date is before the first, endpoints are swapped.\n * - Hovering after the first click produces a preview range.\n *\n * `selected` has shape `DateRange<D> | null`.\n */\n@Injectable()\nexport class RangeSelectionStrategy<D> extends CalendarSelectionStrategy<D, DateRange<D> | null> {\n private readonly dateAdapter: DateAdapter<D> = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n select(date: D, current: DateRange<D> | null): SelectionResult<D, DateRange<D> | null> {\n // No start yet, or the previous range is already complete — start over.\n if (!current || (current.start && current.end)) {\n return { selection: { start: date, end: null }, isComplete: false };\n }\n const start = current.start!;\n let rangeStart: D;\n let rangeEnd: D;\n if (this.dateAdapter.compare(date, start) < 0) {\n rangeStart = date;\n rangeEnd = start;\n } else {\n rangeStart = start;\n rangeEnd = date;\n }\n return { selection: { start: rangeStart, end: rangeEnd }, isComplete: true };\n }\n\n createPreview(active: D | null, current: DateRange<D> | null): DateRange<D> | null {\n if (!active || !current?.start || current.end) return null;\n const s = current.start;\n if (this.dateAdapter.compare(active, s) < 0) {\n return { start: active, end: s };\n }\n return { start: s, end: active };\n }\n\n isSelected(date: D, current: DateRange<D> | null): boolean {\n if (!current) return false;\n if (current.start && this.dateAdapter.sameDate(date, current.start)) return true;\n if (current.end && this.dateAdapter.sameDate(date, current.end)) return true;\n return false;\n }\n\n isRangeStart(date: D, current: DateRange<D> | null): boolean {\n if (!current?.start) return false;\n return this.dateAdapter.sameDate(date, current.start);\n }\n\n isRangeEnd(date: D, current: DateRange<D> | null): boolean {\n if (!current?.end) return false;\n return this.dateAdapter.sameDate(date, current.end);\n }\n\n isRangeMiddle(date: D, current: DateRange<D> | null): boolean {\n if (!current?.start || !current?.end) return false;\n return (\n isDateInRange(date, current.start, current.end, this.dateAdapter) &&\n !this.isRangeStart(date, current) &&\n !this.isRangeEnd(date, current)\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\nimport { type DateAdapter, DATE_ADAPTER } from '../date-adapter';\nimport { CalendarSelectionStrategy, type SelectionResult } from './selection-strategy';\n\n/**\n * Multi-date selection.\n *\n * - Each click toggles the date in/out of the selection array.\n * - Each click commits immediately (no intermediate preview).\n * - `selected` has shape `D[]`.\n */\n@Injectable()\nexport class MultiSelectionStrategy<D> extends CalendarSelectionStrategy<D, D[]> {\n private readonly dateAdapter: DateAdapter<D> = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n select(date: D, current: D[]): SelectionResult<D, D[]> {\n const existing = current ?? [];\n const index = existing.findIndex((d) => this.dateAdapter.sameDate(d, date));\n const next =\n index >= 0\n ? [...existing.slice(0, index), ...existing.slice(index + 1)]\n : [...existing, date];\n return { selection: next, isComplete: true };\n }\n\n createPreview(_active: D | null, _current: D[]): DateRange<D> | null {\n return null;\n }\n\n isSelected(date: D, current: D[]): boolean {\n return (current ?? []).some((d) => this.dateAdapter.sameDate(d, date));\n }\n\n isRangeStart(_date: D, _current: D[]): boolean {\n return false;\n }\n\n isRangeEnd(_date: D, _current: D[]): boolean {\n return false;\n }\n\n isRangeMiddle(_date: D, _current: D[]): boolean {\n return false;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\nimport { type DateAdapter, DATE_ADAPTER } from '../date-adapter';\nimport { isDateInRange } from '../calendar.utils';\nimport { CalendarSelectionStrategy, type SelectionResult } from './selection-strategy';\n\n/**\n * Week selection.\n *\n * - Any click selects the entire week containing that day.\n * - Week bounds use `DateAdapter.getFirstDayOfWeek()`.\n * - Each click commits immediately.\n * - Hovering previews the week the cursor is in.\n *\n * `selected` has shape `DateRange<D> | null`.\n */\n@Injectable()\nexport class WeekSelectionStrategy<D> extends CalendarSelectionStrategy<D, DateRange<D> | null> {\n private readonly dateAdapter: DateAdapter<D> = inject(DATE_ADAPTER) as DateAdapter<D>;\n\n select(date: D, _current: DateRange<D> | null): SelectionResult<D, DateRange<D> | null> {\n return { selection: this.weekRange(date), isComplete: true };\n }\n\n createPreview(active: D | null, _current: DateRange<D> | null): DateRange<D> | null {\n if (!active) return null;\n return this.weekRange(active);\n }\n\n isSelected(date: D, current: DateRange<D> | null): boolean {\n if (!current?.start || !current?.end) return false;\n return isDateInRange(date, current.start, current.end, this.dateAdapter);\n }\n\n isRangeStart(date: D, current: DateRange<D> | null): boolean {\n if (!current?.start) return false;\n return this.dateAdapter.sameDate(date, current.start);\n }\n\n isRangeEnd(date: D, current: DateRange<D> | null): boolean {\n if (!current?.end) return false;\n return this.dateAdapter.sameDate(date, current.end);\n }\n\n isRangeMiddle(date: D, current: DateRange<D> | null): boolean {\n if (!current?.start || !current?.end) return false;\n return (\n this.isSelected(date, current) &&\n !this.isRangeStart(date, current) &&\n !this.isRangeEnd(date, current)\n );\n }\n\n private weekRange(date: D): DateRange<D> {\n const dow = this.dateAdapter.getDayOfWeek(date);\n const first = this.dateAdapter.getFirstDayOfWeek();\n const daysToSubtract = (dow - first + 7) % 7;\n const start = this.dateAdapter.addDays(date, -daysToSubtract);\n const end = this.dateAdapter.addDays(start, 6);\n return { start, end };\n }\n}\n","import { type Provider, type Type } from '@angular/core';\nimport {\n type CalendarSelectionStrategy,\n CALENDAR_SELECTION_STRATEGY,\n} from './selection-strategy';\nimport { SingleSelectionStrategy } from './single-selection-strategy';\nimport { RangeSelectionStrategy } from './range-selection-strategy';\nimport { MultiSelectionStrategy } from './multi-selection-strategy';\nimport { WeekSelectionStrategy } from './week-selection-strategy';\n\n/** Provides single-date selection (default behaviour). */\nexport function provideSingleSelectionStrategy(): Provider {\n return { provide: CALENDAR_SELECTION_STRATEGY, useClass: SingleSelectionStrategy };\n}\n\n/** Provides two-click date-range selection. */\nexport function provideRangeSelectionStrategy(): Provider {\n return { provide: CALENDAR_SELECTION_STRATEGY, useClass: RangeSelectionStrategy };\n}\n\n/** Provides toggle-based multi-date selection. */\nexport function provideMultiSelectionStrategy(): Provider {\n return { provide: CALENDAR_SELECTION_STRATEGY, useClass: MultiSelectionStrategy };\n}\n\n/** Provides week-at-a-time selection. */\nexport function provideWeekSelectionStrategy(): Provider {\n return { provide: CALENDAR_SELECTION_STRATEGY, useClass: WeekSelectionStrategy };\n}\n\n/** Provides an arbitrary custom selection strategy. */\nexport function provideCalendarSelectionStrategy<D, S>(\n strategy: Type<CalendarSelectionStrategy<D, S>>,\n): Provider {\n return { provide: CALENDAR_SELECTION_STRATEGY, useClass: strategy };\n}\n","import {\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 LOCALE_ID,\n type OnInit,\n output,\n runInInjectionContext,\n signal,\n untracked,\n viewChildren,\n type InputSignal,\n type OutputEmitterRef,\n type Signal,\n type TemplateRef,\n type WritableSignal,\n} from '@angular/core';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n type AbstractControl,\n type ControlValueAccessor,\n FormResetEvent,\n NgControl,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport { tv } from 'tailwind-variants';\nimport { CalendarHeaderComponent } from './calendar-header';\nimport { CalendarIntl } from './calendar-intl';\nimport type {\n CalendarCell,\n CalendarConstraints,\n CalendarMode,\n CalendarOverlayState,\n CalendarSelectionState,\n CalendarValue,\n CalendarViewState,\n DateClassFn,\n DateFilterFn,\n DateRange,\n DisabledDates,\n MaxSelectionBehavior,\n ModeChangeEvent,\n RangeClickBehavior,\n RangePreviewEvent,\n ResetBehavior,\n SelectionClearedEvent,\n SelectionCompleteEvent,\n ViewChangeEvent,\n} from './calendar.types';\nimport { emptyCalendarValue, YEARS_PER_PAGE } from './calendar.types';\nimport type { RangeBehaviorConfig } from '@cdevhub/ngx-tw/core';\nimport {\n deriveSelectionStateFromValue,\n isEmptyCalendarValue,\n isPartialRangeValue,\n matchesModeShape,\n} from './calendar-cva-utils';\nimport { calendarValidator } from './calendar-validators';\nimport { type DateAdapter, DATE_ADAPTER } from './date-adapter';\nimport { MonthViewComponent } from './month-view';\nimport { YearViewComponent } from './year-view';\nimport { YearsViewComponent } from './multi-year-view';\nimport {\n getMultiYearStartingYear,\n isMonthDisabled,\n isYearDisabled,\n rangeCrossesDisabled,\n rangeLengthDays,\n} from './calendar.utils';\nimport {\n type CalendarSelectionStrategy,\n CALENDAR_SELECTION_STRATEGY,\n MultiSelectionStrategy,\n RangeSelectionStrategy,\n SingleSelectionStrategy,\n} from './selection';\n\nconst calendarVariants = tv(\n {\n slots: {\n root: 'inline-block p-2 bg-surface text-fg',\n months: '',\n },\n variants: {\n bordered: {\n true: { root: 'rounded-lg shadow-sm border border-border' },\n false: {},\n },\n columns: {\n 1: { months: '' },\n 2: { months: 'flex gap-3' },\n },\n },\n defaultVariants: { bordered: true, columns: 1 },\n },\n { twMerge: true },\n);\n\n/**\n * Main calendar orchestrator. Composes the header and view components\n * (day, month, year) with view switching, navigation, focus management,\n * and the §8 internal state model. Every date operation is delegated to\n * an injected `DateAdapter` — call `provideNativeDateAdapter()` in your\n * app to bootstrap the default one.\n *\n * Generic parameters (§7.3):\n * - `M` — selection mode. Narrows `value` to the mode-specific shape.\n * - `D` — adapter date type.\n * - `TOut` — post-transformer form value type (Phase 14 wires it; until then\n * it defaults to `CalendarValue<M, D>` so forms see raw adapter values).\n */\n@Component({\n selector: 'tw-calendar',\n imports: [\n CalendarHeaderComponent,\n MonthViewComponent,\n YearViewComponent,\n YearsViewComponent,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CalendarComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CalendarComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'block',\n '[attr.aria-disabled]': 'effectiveDisabled() || null',\n '[attr.aria-readonly]': 'effectiveReadonly() || null',\n '[attr.aria-describedby]': 'errorAriaDescribedBy() || null',\n '(focusout)': 'onBlur($event)',\n },\n template: `\n <div\n [class]=\"rootClasses()\"\n role=\"group\"\n [attr.aria-label]=\"effectiveIntl().calendarLabel\"\n >\n <tw-calendar-header\n [periodLabel]=\"periodLabel()\"\n [periodAriaLabel]=\"periodAriaLabel()\"\n [prevAriaLabel]=\"prevAriaLabel()\"\n [nextAriaLabel]=\"nextAriaLabel()\"\n [prevDisabled]=\"prevDisabled()\"\n [nextDisabled]=\"nextDisabled()\"\n [canSwitchView]=\"viewState() !== 'year'\"\n (prevClicked)=\"onPrevClicked()\"\n (nextClicked)=\"onNextClicked()\"\n (periodClicked)=\"onPeriodClicked()\"\n />\n\n <ng-content select=\"[twCalendarPresets]\" />\n\n @switch (viewState()) {\n @case ('day') {\n <div [class]=\"monthsClasses()\">\n <tw-calendar-month-view\n [activeDate]=\"activeDate()!\"\n [selected]=\"legacySelected()\"\n [minDate]=\"resolvedMinDate()\"\n [maxDate]=\"resolvedMaxDate()\"\n [dateFilter]=\"resolvedDateFilter()\"\n [disabledDates]=\"resolvedDisabledDates()\"\n [disabledDaysOfWeek]=\"resolvedDisabledDaysOfWeek()\"\n [dateClass]=\"dateClass()\"\n [cellTemplate]=\"cellTemplate()\"\n [firstDayOfWeek]=\"computedFirstDayOfWeek()\"\n [previewStart]=\"previewRange()?.start ?? null\"\n [previewEnd]=\"previewRange()?.end ?? null\"\n [invalidFlashDate]=\"invalidFlashDate()\"\n [gridIndex]=\"0\"\n [multiSelectable]=\"multiSelectable()\"\n [readonlyGrid]=\"effectiveReadonly()\"\n (selectedChange)=\"onDateSelected($event)\"\n (activeDateChange)=\"onActiveDateChange($event, 0)\"\n (previewChange)=\"onPreviewChange($event)\"\n />\n @if (effectiveMonthColumns() >= 2 && secondaryActiveDate()) {\n <tw-calendar-month-view\n [activeDate]=\"secondaryActiveDate()!\"\n [selected]=\"legacySelected()\"\n [minDate]=\"resolvedMinDate()\"\n [maxDate]=\"resolvedMaxDate()\"\n [dateFilter]=\"resolvedDateFilter()\"\n [disabledDates]=\"resolvedDisabledDates()\"\n [disabledDaysOfWeek]=\"resolvedDisabledDaysOfWeek()\"\n [dateClass]=\"dateClass()\"\n [cellTemplate]=\"cellTemplate()\"\n [firstDayOfWeek]=\"computedFirstDayOfWeek()\"\n [previewStart]=\"previewRange()?.start ?? null\"\n [previewEnd]=\"previewRange()?.end ?? null\"\n [invalidFlashDate]=\"invalidFlashDate()\"\n [gridIndex]=\"1\"\n [multiSelectable]=\"multiSelectable()\"\n [readonlyGrid]=\"effectiveReadonly()\"\n (selectedChange)=\"onDateSelected($event)\"\n (activeDateChange)=\"onActiveDateChange($event, 1)\"\n (previewChange)=\"onPreviewChange($event)\"\n />\n }\n </div>\n }\n @case ('month') {\n <tw-calendar-year-view\n [activeDate]=\"activeDate()!\"\n [selected]=\"legacySelected()\"\n [minDate]=\"resolvedMinDate()\"\n [maxDate]=\"resolvedMaxDate()\"\n [dateClass]=\"dateClass()\"\n [cellTemplate]=\"cellTemplate()\"\n [previewStart]=\"previewRange()?.start ?? null\"\n [previewEnd]=\"previewRange()?.end ?? null\"\n [multiSelectable]=\"multiSelectable()\"\n [readonlyGrid]=\"effectiveReadonly()\"\n (selectedChange)=\"onMonthSelected($event)\"\n (activeDateChange)=\"onActiveDateChange($event)\"\n (previewChange)=\"onPreviewChange($event)\"\n />\n }\n @case ('year') {\n <tw-calendar-years-view\n [activeDate]=\"activeDate()!\"\n [selected]=\"legacySelected()\"\n [minDate]=\"resolvedMinDate()\"\n [maxDate]=\"resolvedMaxDate()\"\n [dateClass]=\"dateClass()\"\n [cellTemplate]=\"cellTemplate()\"\n [previewStart]=\"previewRange()?.start ?? null\"\n [previewEnd]=\"previewRange()?.end ?? null\"\n [multiSelectable]=\"multiSelectable()\"\n [readonlyGrid]=\"effectiveReadonly()\"\n (selectedChange)=\"onYearSelected($event)\"\n (activeDateChange)=\"onActiveDateChange($event)\"\n (previewChange)=\"onPreviewChange($event)\"\n />\n }\n }\n </div>\n `,\n})\nexport class CalendarComponent<\n M extends CalendarMode = 'single',\n D = Date,\n // `TOut` is the post-transformer form value type (§7.6). Phase 14 wires a\n // `valueTransformer` input against it; until then the transformer is the\n // identity and `TOut` defaults to `CalendarValue<M, D>`.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n TOut = CalendarValue<M, D>,\n> implements ControlValueAccessor, Validator, OnInit {\n private readonly dateAdapter: DateAdapter<D> = inject(DATE_ADAPTER) as DateAdapter<D>;\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n /**\n * Resolved lazily in `ngOnInit` — eager construction-time injection creates a\n * circular dependency (NG0200): the component registers itself as both\n * `NG_VALUE_ACCESSOR` and `NG_VALIDATORS`, and `FormControlName` resolves\n * those eagerly while constructing on the same element. Looking up\n * `NgControl` after construction breaks the cycle.\n */\n private ngControl: NgControl | null = null;\n\n /** Angular's `LOCALE_ID` — used as the fallback when no `locale` input is supplied (§19.1). */\n private readonly platformLocale: string = inject(LOCALE_ID);\n\n /**\n * DI-provided default `CalendarIntl`. New'd up locally when the consumer hasn't\n * supplied one — DI defaults are merged with the per-instance `intl` input\n * via `effectiveIntl()` (§19.4 per-field merge).\n */\n private readonly injectedIntl: CalendarIntl =\n inject(CalendarIntl, { optional: true }) ?? new CalendarIntl();\n\n private readonly injectedStrategy = inject(CALENDAR_SELECTION_STRATEGY, {\n optional: true,\n }) as CalendarSelectionStrategy<D, unknown> | null;\n\n private readonly monthViews = viewChildren<MonthViewComponent<D>>(MonthViewComponent);\n\n /**\n * Built-in strategies instantiated lazily in the host's injection context so\n * `inject(DATE_ADAPTER)` calls inside each strategy resolve. Range state will\n * migrate into the orchestrator in Phase 6; single / multiple stay here as\n * internals (not exported) via the spec's mode union.\n */\n private readonly localStrategies: Readonly<{\n single: SingleSelectionStrategy<D>;\n range: RangeSelectionStrategy<D>;\n multiple: MultiSelectionStrategy<D>;\n }> = runInInjectionContext(this.injector, () => ({\n single: new SingleSelectionStrategy<D>(),\n range: new RangeSelectionStrategy<D>(),\n multiple: new MultiSelectionStrategy<D>(),\n }));\n\n // ---------------------------------------------------------------------------\n // Public inputs (§33.1)\n // ---------------------------------------------------------------------------\n\n /** Selection mode (§5). Changing this at runtime clears the value and emits `modeChange`. */\n readonly modeInput = input<CalendarMode>('single', { alias: 'mode' });\n readonly mode: WritableSignal<CalendarMode> = linkedSignal(this.modeInput);\n\n /**\n * Consumer-bound value. Shape narrows by `M`: `D | null` for single,\n * `D[]` for multiple, `{ start; end }` for range.\n */\n readonly valueInput = input<CalendarValue<M, D>>(null as CalendarValue<M, D>, {\n alias: 'value',\n });\n readonly value: WritableSignal<CalendarValue<M, D>> = linkedSignal(this.valueInput);\n\n /** Anchor date for the displayed view. Defaults to today on mount. */\n readonly startAt: InputSignal<D | null> = input<D | null>(null);\n\n /** Minimum selectable date. */\n readonly minDate: InputSignal<D | null> = input<D | null>(null);\n\n /** Maximum selectable date. */\n readonly maxDate: InputSignal<D | null> = input<D | null>(null);\n\n /** Per-date predicate — return `false` to disable. */\n readonly dateFilter: InputSignal<DateFilterFn<D> | null> = input<DateFilterFn<D> | null>(null);\n\n /**\n * Explicitly disabled dates (§10.1). Either an array (each entry compared via\n * `adapter.sameDate`) or a predicate returning `true` for disabled dates.\n * OR-combined with `dateFilter`, `disabledDaysOfWeek`, and `[minDate, maxDate]`.\n */\n readonly disabledDates: InputSignal<DisabledDates<D> | null> =\n input<DisabledDates<D> | null>(null);\n\n /** Days of the week to disable (0=Sun … 6=Sat). Empty array = no day-of-week disabling. */\n readonly disabledDaysOfWeek: InputSignal<readonly number[]> = input<readonly number[]>([]);\n\n /**\n * Bundle of date constraints (§10.1). Lets a consumer pass `minDate`, `maxDate`,\n * `disabledDates`, `disabledDaysOfWeek`, and `dateFilter` as a single object —\n * useful for sharing a constraint preset across multiple calendars. Each field is\n * optional. Individual inputs (`minDate`, `maxDate`, `disabledDates`,\n * `disabledDaysOfWeek`, `dateFilter`) take precedence over fields here when both\n * are set non-null.\n */\n readonly constraints: InputSignal<CalendarConstraints<D> | null> =\n input<CalendarConstraints<D> | null>(null);\n\n /** Minimum range length in days, inclusive (`mode: 'range'` only). `null` = no minimum. */\n readonly minRangeLength: InputSignal<number | null> = input<number | null>(null);\n\n /** Maximum range length in days, inclusive (`mode: 'range'` only). `null` = no maximum. */\n readonly maxRangeLength: InputSignal<number | null> = input<number | null>(null);\n\n /** Maximum number of selections in `mode: 'multiple'`. `null` = unlimited. */\n readonly maxSelections: InputSignal<number | null> = input<number | null>(null);\n\n /**\n * What happens when the user tries to select past `maxSelections` (§10.1).\n * `'emit-limit-reached'` (default) emits `selectionLimitReached` and ignores\n * the click; `'replace-oldest'` drops the first entry; `'ignore'` is silent.\n */\n readonly maxSelectionBehavior: InputSignal<MaxSelectionBehavior> =\n input<MaxSelectionBehavior>('emit-limit-reached');\n\n /**\n * IDREF list for the form-error live region (§28.3). When set, the calendar\n * root carries `aria-describedby=\"<value>\"` so screen readers read consumer-\n * rendered error messages alongside the focused cell announcement.\n */\n readonly errorAriaDescribedBy: InputSignal<string | null> = input<string | null>(null);\n\n /**\n * How `mode: 'range'` reacts to a click after a complete range (§21.2):\n * - `'restart'` (default): start a new range with the clicked cell, emit `selectionRestart`.\n * - `'nearest-edge'`: move the closer endpoint (start vs end) to the clicked date and re-commit (§21.3); emits `selectionComplete({reason: 'nearest-edge'})`.\n * - `'require-clear'`: ignore the click + flash the cell as invalid (`data-state-invalid-flash`); user must call `clear()` first.\n */\n readonly rangeClickBehavior: InputSignal<RangeClickBehavior> =\n input<RangeClickBehavior>('restart');\n\n /**\n * Range-mode behavior knobs. Accepts a partial object — unset fields use the\n * defaults documented on each property of `RangeBehaviorConfig`. Defaults:\n * `{ allowSingleDayRange: true, persistPartialRange: true, allowBackwardRange: false, disableRangesCrossingDisabledDates: false }`.\n */\n readonly rangeBehavior: InputSignal<Partial<RangeBehaviorConfig>> =\n input<Partial<RangeBehaviorConfig>>({});\n\n /** Function producing per-cell CSS classes. */\n readonly dateClass: InputSignal<DateClassFn<D> | null> = input<DateClassFn<D> | null>(null);\n\n /** When `true`, the calendar renders with a border and a soft shadow. */\n readonly bordered: InputSignal<boolean> = input<boolean>(true);\n\n /** Which view opens first. Defaults to `'day'`. Phase 8 will derive the default from `rangeGranularity`. */\n readonly startView: InputSignal<CalendarViewState> = input<CalendarViewState>('day');\n\n /** Override first day of week (0=Sun, 1=Mon). Falls back to the adapter's default. */\n readonly firstDayOfWeek: InputSignal<number | null> = input<number | null>(null);\n\n /**\n * Number of months to display side-by-side (1 or 2). Phase 9 replaces this with a\n * full `numberOfMonths: 1..12+` surface (§23).\n */\n readonly monthColumns: InputSignal<number> = input<number>(1);\n\n /** Disabled state. Merged with any `setDisabledState` call from a bound form control via `effectiveDisabled`. */\n readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Read-only state (§33.1). When `true`, focus and keyboard navigation still work but selections cannot be committed. */\n readonly readonly: InputSignal<boolean> = input<boolean>(false);\n\n /** How a form reset restores internal state (§6.5). `'full'` (default) also restores view + active-date; `'value-only'` clears the draft but leaves navigation where the user left it. */\n readonly resetBehavior: InputSignal<ResetBehavior> = input<ResetBehavior>('full');\n\n /** Optional cell-content template. */\n readonly cellTemplate: InputSignal<TemplateRef<{ $implicit: CalendarCell<D> }> | null> =\n input<TemplateRef<{ $implicit: CalendarCell<D> }> | null>(null);\n\n /** Per-instance locale override. Falls back to Angular `LOCALE_ID` when `null` (§19.1). */\n readonly locale: InputSignal<string | null> = input<string | null>(null);\n\n /**\n * Per-instance `CalendarIntl` override (§19.4). Per-field merge — unspecified\n * fields inherit the DI-provided default. Pass a partial bag (e.g. one of the\n * shipped locale packs `de`, `fr`, `es`, `pt`, `ja`) or a full custom instance.\n */\n readonly intl: InputSignal<Partial<CalendarIntl> | null> =\n input<Partial<CalendarIntl> | null>(null);\n\n // ---------------------------------------------------------------------------\n // Public outputs (§33.2). Outputs reachable only in overlay mode (opened/closed)\n // or through constraint-aware preview (rangePreview `invalidPreview`) are declared\n // here but wired in later phases per the plan.\n // ---------------------------------------------------------------------------\n\n /** Fires whenever the committed value changes (cell click, keyboard select, preset, mode change, programmatic clear). Payload is the untransformed mode-shaped `CalendarValue<M, D>` — `D | null` for single, `D[]` for multiple, `{ start, end }` for range (§7.6). */\n readonly valueChange: OutputEmitterRef<CalendarValue<M, D>> =\n output<CalendarValue<M, D>>();\n\n /** Fires on the first click of a range selection (transitions selection state to SELECTING). Payload carries the chosen `start` date. */\n readonly selectionStart: OutputEmitterRef<{ start: D }> = output<{ start: D }>();\n\n /** Fires as the hover / keyboard cursor moves during range SELECTING. Payload carries the `tentativeRange` and an `invalidPreview` flag set when the range crosses a disabled date or violates `min`/`maxRangeLength`. */\n readonly rangePreview: OutputEmitterRef<RangePreviewEvent<D>> =\n output<RangePreviewEvent<D>>();\n\n /** Fires after `valueChange` once the selection commits. Payload carries the committed `value` and a `reason` flagging the commit path (`'commit' | 'auto-swap' | 'nearest-edge' | 'preset'`). */\n readonly selectionComplete: OutputEmitterRef<SelectionCompleteEvent<M, D>> =\n output<SelectionCompleteEvent<M, D>>();\n\n /** Fires when a range selection restarts after a complete range (e.g. third click with `rangeClickBehavior='restart'`). Payload carries the new draft `start` date. */\n readonly selectionRestart: OutputEmitterRef<{ start: D }> = output<{ start: D }>();\n\n /** Fires whenever the value clears. Payload carries a `reason` distinguishing user clear, programmatic, mode change, form reset, or a disabled flip. */\n readonly selectionCleared: OutputEmitterRef<SelectionClearedEvent> =\n output<SelectionClearedEvent>();\n\n /** Fires in `mode: 'multiple'` when the user attempts to select past `maxSelections` (only with `maxSelectionBehavior: 'emit-limit-reached'`). Payload carries the configured `limit` and the rejected `attempted` date. */\n readonly selectionLimitReached: OutputEmitterRef<{ limit: number; attempted: D }> =\n output<{ limit: number; attempted: D }>();\n\n /** Fires when the selected preset changes (user click on a preset chip, or programmatic clear). Payload is the new preset id, or `null` when no preset is active. Phase 12 wires it. */\n readonly presetChange: OutputEmitterRef<string | null> = output<string | null>();\n\n /** Fires on every view transition (day ↔ month ↔ year). Payload carries `from`, `to`, and a `reason` distinguishing drill-down, drill-up, user header click, and programmatic changes. */\n readonly viewChange: OutputEmitterRef<ViewChangeEvent> = output<ViewChangeEvent>();\n\n /** Fires when keyboard navigation, mouse hover, or programmatic action moves the focused (active) cell. Payload is the new active date. */\n readonly activeDateChange: OutputEmitterRef<D> = output<D>();\n\n /** Fires when the displayed primary month changes (page-nav, drill-up, or programmatic). Payload carries the new `year` and zero-based `month`. */\n readonly monthChange: OutputEmitterRef<{ year: number; month: number }> =\n output<{ year: number; month: number }>();\n\n /** Fires when the displayed year changes (month/year-view nav or year-page scroll). Payload carries the new `year`. */\n readonly yearChange: OutputEmitterRef<{ year: number }> = output<{ year: number }>();\n\n /** Fires on every pointer click of any cell, including disabled ones — analytics only. Payload carries the clicked `date` and the underlying `PointerEvent`. Does NOT indicate a selection; subscribe to `valueChange` for that. */\n readonly cellClick: OutputEmitterRef<{ date: D; event: PointerEvent }> =\n output<{ date: D; event: PointerEvent }>();\n\n /** Fires on every pointer hover of any cell — analytics only. Payload carries the hovered `date`. Does NOT indicate a preview; subscribe to `rangePreview` for range-mode hover state. */\n readonly cellHover: OutputEmitterRef<{ date: D }> = output<{ date: D }>();\n\n /** Fires when `mode` changes at runtime, in canonical order `selectionCleared` → `modeChange` → `valueChange` (§11.2). Payload carries `{ from, to }` modes. */\n readonly modeChange: OutputEmitterRef<ModeChangeEvent> = output<ModeChangeEvent>();\n\n // ---------------------------------------------------------------------------\n // Internal writable state (§8.1)\n // ---------------------------------------------------------------------------\n\n /** In-flight draft during range SELECTING. `null` in other states (§8.1). */\n private readonly internalDraftValue: WritableSignal<{ start: D } | null> = signal(null);\n\n /** Current selection lifecycle state. */\n private readonly _selectionState: WritableSignal<CalendarSelectionState> = signal('EMPTY');\n\n /** Current view (writable for drill). Tracks `startView` until the user drills. */\n private readonly _viewState: WritableSignal<CalendarViewState> = linkedSignal(() =>\n this.startView(),\n );\n\n /**\n * Active (focused) date. `linkedSignal` so changes to `startAt` at runtime update\n * the anchor, but internal navigation can still write it independently.\n */\n private readonly _activeDate: WritableSignal<D> = linkedSignal<D>(\n () => this.startAt() ?? this.dateAdapter.today(),\n );\n\n /** Pointer-hover date (desktop only). */\n private readonly _hoveredDate: WritableSignal<D | null> = signal<D | null>(null);\n\n /** Overlay state. Always `'closed'` in inline mode until Phase 10 wires the lifecycle. */\n private readonly _overlayState: WritableSignal<CalendarOverlayState> = signal('closed');\n\n /** Preset selection id. Phase 12 writes this. */\n private readonly _selectedPresetId: WritableSignal<string | null> = signal(null);\n\n /** Raw `TOut` retained when `fromForm` throws (§7.6, Phase 14). `null` otherwise. */\n private readonly _lastInvalidFormValue: WritableSignal<unknown> = signal(null);\n\n // ---------------------------------------------------------------------------\n // Public readonly signals (§33.3)\n // ---------------------------------------------------------------------------\n\n /** Overlay lifecycle. `null` until `interaction: 'overlay'` lands in Phase 10; until then the implementation signal is exposed as `'closed'`. */\n readonly overlayState: Signal<CalendarOverlayState | null> = computed(() =>\n this._overlayState(),\n );\n\n /** Selection lifecycle per §8. */\n readonly selectionState: Signal<CalendarSelectionState> = computed(() =>\n this._selectionState(),\n );\n\n /** Active (focused) cell. `null` when the overlay is closed and no inline focus is established; in inline mode this is always the current anchor. */\n readonly activeDate: Signal<D | null> = computed(() => this._activeDate());\n\n /** Currently selected preset id. */\n readonly selectedPresetId: Signal<string | null> = computed(() => this._selectedPresetId());\n\n /** Current view state (day / month / year). */\n readonly viewState: Signal<CalendarViewState> = computed(() => this._viewState());\n\n /** Months currently rendered. Phase 9 extends this to the full responsive count. */\n readonly displayedMonths: Signal<{ year: number; month: number }[]> = computed(() => {\n const active = this._activeDate();\n const primary = {\n year: this.dateAdapter.getYear(active),\n month: this.dateAdapter.getMonth(active),\n };\n if (this.effectiveMonthColumns() < 2) return [primary];\n const secondary = this.dateAdapter.addMonths(active, 1);\n return [\n primary,\n {\n year: this.dateAdapter.getYear(secondary),\n month: this.dateAdapter.getMonth(secondary),\n },\n ];\n });\n\n /** Raw form value rejected by the transformer's `fromForm` (§7.6, §33.3). */\n readonly lastInvalidFormValue: Signal<unknown> = computed(() => this._lastInvalidFormValue());\n\n // ---------------------------------------------------------------------------\n // ControlValueAccessor + Validator (Phase 3)\n // ---------------------------------------------------------------------------\n\n private cvaOnChange: (value: unknown) => void = () => {};\n private cvaOnTouched: () => void = () => {};\n private validatorOnChange: () => void = () => {};\n\n /**\n * @internal Disabled state set by `ControlValueAccessor.setDisabledState` and\n * by the Signal Forms mode directives. OR-merged with the public `disabled`\n * input into `effectiveDisabled`.\n */\n readonly cvaDisabled: WritableSignal<boolean> = signal(false);\n\n /**\n * @internal Read-only state set by the Signal Forms mode directives. OR-merged\n * with the public `readonly` input into `effectiveReadonly`.\n */\n readonly cvaReadonly: WritableSignal<boolean> = signal(false);\n\n /** Effective disabled state — public `disabled` input OR any form-bound disabled flip. Drives `aria-disabled`. */\n readonly effectiveDisabled: Signal<boolean> = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n\n /** Effective read-only state — public `readonly` input OR any form-bound readonly flip. Drives `aria-readonly`. */\n readonly effectiveReadonly: Signal<boolean> = computed(\n () => this.readonly() || this.cvaReadonly(),\n );\n\n /**\n * @internal Resolved range-behavior config. Merges the consumer-supplied\n * `Partial<RangeBehaviorConfig>` over the documented defaults so internal\n * call sites read each field directly without re-applying fallbacks.\n */\n private readonly _resolvedRangeBehavior: Signal<RangeBehaviorConfig> = computed(\n () => ({\n allowBackwardRange: false,\n allowSingleDayRange: true,\n persistPartialRange: true,\n disableRangesCrossingDisabledDates: false,\n ...this.rangeBehavior(),\n }),\n );\n\n /** @internal Dev-mode warning guard so each mismatched write warns only once per instance. */\n private _warnedShapeMismatch = false;\n\n /** @internal Set by `writeValue`; read by the `FormResetEvent` handler so it can emit `selectionCleared({reason: 'reset'})` only when a non-empty value was on the control before the reset cleared it. */\n private _hadValueBeforeLastWrite = false;\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n if (this._invalidFlashTimer !== null) {\n clearTimeout(this._invalidFlashTimer);\n this._invalidFlashTimer = null;\n }\n });\n // Runtime `mode` changes clear state and emit the canonical event order\n // per §11.2: selectionCleared({reason: 'mode-change'}) → modeChange → valueChange.\n // We read `mode()` via `linkedSignal` in a tracked effect so the prior value\n // can be observed via the captured closure.\n let previousMode: CalendarMode = untracked(() => this.mode());\n effect(() => {\n const current = this.mode();\n if (current === previousMode) return;\n const from = previousMode;\n previousMode = current;\n untracked(() => this.onModeChanged(from, current));\n });\n\n // Re-run validation whenever mode, constraints, or the rejected-write\n // marker changes so the §10.2 codes stay in sync. Constraint change\n // revalidation per §11.4.\n effect(() => {\n this.mode();\n this._lastInvalidFormValue();\n // `resolvedConstraints` transitively tracks `minDate`, `maxDate`, `dateFilter`,\n // `disabledDates`, `disabledDaysOfWeek`, and the shorthand `constraints` input.\n this.resolvedConstraints();\n this.minRangeLength();\n this.maxRangeLength();\n this.maxSelections();\n untracked(() => this.validatorOnChange());\n });\n\n // Push the resolved locale into the date adapter so `Intl.DateTimeFormat`\n // calls (month/weekday names, format()) align with `LOCALE_ID` or the\n // per-instance `locale` override (§19.1).\n effect(() => {\n const locale = this.effectiveLocale();\n untracked(() => this.dateAdapter.setLocale(locale));\n });\n\n // Phase 6 — keyboard-driven `rangePreview` emission. While SELECTING, any\n // change to `previewRange` (which now reacts to `activeDate` via\n // `previewCursor`) emits the same `rangePreview` payload as a hover (§21.1).\n // The hover path keeps emitting from `onPreviewChange` directly; this\n // effect covers arrow-key + Home/End/PageUp/PageDown navigation.\n let lastEmittedPreviewKey: string | null = null;\n effect(() => {\n // Skip when no draft is in-flight (only meaningful during SELECTING).\n if (this._selectionState() !== 'SELECTING') {\n lastEmittedPreviewKey = null;\n return;\n }\n const pr = this.previewRange();\n if (!pr?.start || !pr?.end) return;\n // Pointer-hover already emits via `onPreviewChange`; only fire here for\n // keyboard navigation (no hover anchor present).\n if (this._hoveredDate()) return;\n const key =\n this.dateAdapter.toIso(pr.start) + '|' + this.dateAdapter.toIso(pr.end);\n if (key === lastEmittedPreviewKey) return;\n lastEmittedPreviewKey = key;\n const start = pr.start as D;\n const end = pr.end as D;\n untracked(() =>\n this.rangePreview.emit({\n tentativeRange: { start, end },\n invalidPreview: this.isPreviewInvalid(start, end),\n }),\n );\n });\n }\n\n ngOnInit(): void {\n // Lazy NgControl lookup avoids the construction-time cycle (see field\n // declaration). By `ngOnInit` the host's `FormControlName`/`NgModel` is\n // fully constructed, so resolving it here is safe.\n this.ngControl = this.injector.get(NgControl, null, {\n self: true,\n optional: true,\n });\n\n // Reset detection per §6.5 — `FormControl.reset()` emits a dedicated\n // `FormResetEvent` on its events stream (and parent `FormGroup.reset()`\n // cascades via each child's `reset()`). Only Reactive / Template-driven\n // forms expose an `AbstractControl.events` Observable; Signal Forms'\n // `FormField` provides an `InteropNgControl` shim whose `.control`\n // re-points to itself and has no `events` stream, so we feature-detect\n // before subscribing. Signal Forms reset is handled via the field's\n // value-signal flow, not this event.\n const ctrl = this.ngControl?.control as AbstractControl | undefined;\n if (ctrl?.events) {\n ctrl.events.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n if (event instanceof FormResetEvent) {\n this.handleFormReset();\n }\n });\n }\n }\n\n /** @internal `ControlValueAccessor` — writes a value from a reactive / template-driven form. Wrong-shape writes preserve the prior value per §7.2. Programmatic writes during SELECTING discard the draft per §11.1. */\n writeValue(incoming: unknown): void {\n this._hadValueBeforeLastWrite = !isEmptyCalendarValue(this.value());\n const mode = this.mode() as M;\n\n // Phase 6 — programmatic write during SELECTING discards the in-flight draft.\n // Detect BEFORE we touch state so we can fire `selectionCleared` exactly once\n // when the draft existed, regardless of which branch below handles the write.\n const wasSelecting =\n this._selectionState() === 'SELECTING' && this.internalDraftValue() !== null;\n\n if (incoming === null || incoming === undefined) {\n const empty = emptyCalendarValue<M, D>(mode);\n this.value.set(empty);\n this._selectionState.set('EMPTY');\n this.internalDraftValue.set(null);\n if (wasSelecting) this.selectionCleared.emit({ reason: 'programmatic' });\n if (this._lastInvalidFormValue() !== null) {\n this._lastInvalidFormValue.set(null);\n this.validatorOnChange();\n }\n return;\n }\n\n if (!matchesModeShape(mode, incoming)) {\n if (isDevMode() && !this._warnedShapeMismatch) {\n this._warnedShapeMismatch = true;\n console.warn(\n `[tw-calendar] writeValue received a value whose shape does not match mode=\"${mode}\". ` +\n `Preserving the prior value; the form control will report calendarInvalidValue. ` +\n `Received:`,\n incoming,\n );\n }\n this._lastInvalidFormValue.set(incoming);\n this.validatorOnChange();\n return;\n }\n\n // Phase 6 — reject SELECTING-shaped programmatic writes (`{ start: D, end: null }`)\n // for `mode: 'range'`; only EMPTY or COMPLETE shapes are valid form values.\n if (mode === 'range' && isPartialRangeValue(incoming)) {\n if (isDevMode() && !this._warnedShapeMismatch) {\n this._warnedShapeMismatch = true;\n console.warn(\n '[tw-calendar] writeValue received a partial range `{start, end: null}` — only fully committed ranges are valid form values. Preserving the prior value; the form control will report calendarInvalidValue.',\n incoming,\n );\n }\n this._lastInvalidFormValue.set(incoming);\n this.validatorOnChange();\n return;\n }\n\n const normalized = incoming as CalendarValue<M, D>;\n this.value.set(normalized);\n this._selectionState.set(deriveSelectionStateFromValue<M, D>(normalized));\n this.internalDraftValue.set(null);\n if (wasSelecting) this.selectionCleared.emit({ reason: 'programmatic' });\n if (this._lastInvalidFormValue() !== null) {\n this._lastInvalidFormValue.set(null);\n this.validatorOnChange();\n }\n }\n\n /** @internal `ControlValueAccessor` — registers the on-change callback. */\n registerOnChange(fn: (value: unknown) => void): void {\n this.cvaOnChange = fn;\n }\n\n /** @internal `ControlValueAccessor` — registers the touched callback. */\n registerOnTouched(fn: () => void): void {\n this.cvaOnTouched = fn;\n }\n\n /** @internal `ControlValueAccessor` — reflects the form control's disabled state through `effectiveDisabled` / `aria-disabled`. */\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n /** @internal `Validator` — runs the §10.2 validator. Phase 3 codes (`calendarRequired`, `calendarInvalidValue`) plus Phase 4 constraint codes (`calendarMinDate`, `calendarMaxDate`, `calendarDisabledDate`, `calendarRangeTooShort`, `calendarRangeTooLong`, `calendarMaxSelections`, `calendarInvalidRange`). */\n validate(control: AbstractControl): ValidationErrors | null {\n const ctx = {\n mode: this.mode() as M,\n lastInvalidFormValue: this._lastInvalidFormValue(),\n constraints: this.resolvedConstraints(),\n adapter: this.dateAdapter,\n minRangeLength: this.minRangeLength(),\n maxRangeLength: this.maxRangeLength(),\n maxSelections: this.maxSelections(),\n };\n return calendarValidator<M, D>(ctx)(control);\n }\n\n /** @internal `Validator` — registers the change callback so the form re-runs validation when internal state changes. */\n registerOnValidatorChange(fn: () => void): void {\n this.validatorOnChange = fn;\n }\n\n /** @internal Host `(focusout)` handler — fires `onTouched` when focus leaves the component (§13.6 inline path). Overlay-mode wiring is Phase 10. */\n onBlur(event: FocusEvent): void {\n const host = this.elementRef.nativeElement;\n const related = event.relatedTarget as Node | null;\n // Only fire when focus actually leaves the component tree. Focus moves\n // between cells (roving tabindex) stay inside the host and must not mark\n // the control touched.\n if (related && host.contains(related)) return;\n this.cvaOnTouched();\n }\n\n // ---------------------------------------------------------------------------\n // Derived state (kept from the prior implementation; some refined per Phase 1)\n // ---------------------------------------------------------------------------\n\n /**\n * Effective `CalendarIntl` resolved per-field over the DI default (§19.4).\n * The injected default is the base; the `intl` input overrides individual\n * fields. Unspecified fields fall through to English defaults.\n */\n readonly effectiveIntl: Signal<CalendarIntl> = computed(() => {\n const override = this.intl();\n if (!override) return this.injectedIntl;\n // Prototype copy preserves bound methods; shallow per-field overlay matches\n // the spec's per-field merge semantics.\n const merged = Object.create(\n Object.getPrototypeOf(this.injectedIntl) as object,\n ) as CalendarIntl;\n Object.assign(merged, this.injectedIntl, override);\n return merged;\n });\n\n /** Effective locale — `locale` input wins, otherwise Angular `LOCALE_ID`. */\n readonly effectiveLocale: Signal<string> = computed(\n () => this.locale() ?? this.platformLocale,\n );\n\n /**\n * Active strategy for single/multiple/range. Injected strategies (custom) win.\n * Range state will migrate into this component in Phase 6; for now we reuse\n * the strategy for its `select` / `createPreview` / `isSelected` helpers.\n */\n readonly selectionStrategy: Signal<CalendarSelectionStrategy<D, unknown>> = computed(() => {\n if (this.injectedStrategy) return this.injectedStrategy;\n const m = this.mode();\n if (m === 'range') return this.localStrategies.range as CalendarSelectionStrategy<D, unknown>;\n if (m === 'multiple')\n return this.localStrategies.multiple as CalendarSelectionStrategy<D, unknown>;\n return this.localStrategies.single as CalendarSelectionStrategy<D, unknown>;\n });\n\n /** Computed first-day-of-week (input override wins over adapter default). */\n readonly computedFirstDayOfWeek: Signal<number> = computed(() => {\n const override = this.firstDayOfWeek();\n if (override !== null && override >= 0 && override <= 6) return override;\n return this.dateAdapter.getFirstDayOfWeek();\n });\n\n /** Resolves the configured `monthColumns` value. Range-mode consumers pass `2` explicitly. */\n readonly effectiveMonthColumns: Signal<number> = computed(() => this.monthColumns());\n\n /**\n * @internal Drives `aria-multiselectable` on every view grid. `true` when the\n * current `mode` allows more than one cell to be selected at a time\n * (`'multiple'` or `'range'`); `false` for `'single'`.\n */\n readonly multiSelectable: Signal<boolean> = computed(() => this.mode() !== 'single');\n\n /** Secondary anchor for the right-hand grid in multi-column mode. */\n readonly secondaryActiveDate: Signal<D | null> = computed(() => {\n if (this.effectiveMonthColumns() < 2) return null;\n return this.dateAdapter.addMonths(this._activeDate(), 1);\n });\n\n /**\n * Phase 6 — preview cursor. Pointer hover wins; falls back to `activeDate`\n * when SELECTING so keyboard arrow-key moves drive the same preview path\n * (§21.1, §16.1). `null` when no SELECTING draft is in-flight and pointer\n * is off-grid.\n */\n private readonly previewCursor: Signal<D | null> = computed(() => {\n const hovered = this._hoveredDate();\n if (hovered) return hovered;\n if (this._selectionState() === 'SELECTING') return this._activeDate();\n return null;\n });\n\n /**\n * Preview range. Driven by the strategy and the `previewCursor` (hover or\n * keyboard active-date during SELECTING).\n */\n readonly previewRange: Signal<DateRange<D> | null> = computed(() => {\n const strategy = this.selectionStrategy();\n const cursor = this.previewCursor();\n const source = this.strategySelection();\n return strategy.createPreview(cursor, source);\n });\n\n /**\n * Adapter-compatible view of the current selection.\n * For range: a `{ start, end }` view of either the committed value or the in-flight draft.\n * For single: the raw `D | null`.\n * For multiple: the raw `D[]`.\n *\n * Used internally to feed the legacy strategy surface while Phase 6 migrates range state.\n */\n private readonly strategySelection: Signal<unknown> = computed(() => {\n const m = this.mode();\n const v = this.value();\n if (m === 'range') {\n const draft = this.internalDraftValue();\n if (draft) return { start: draft.start, end: null };\n return v ?? null;\n }\n return v;\n });\n\n /** Adapter-compatible view exposed to the view components. */\n readonly legacySelected: Signal<D | D[] | DateRange<D> | null> = computed(\n () => this.strategySelection() as D | D[] | DateRange<D> | null,\n );\n\n private readonly variantResult = computed(() =>\n calendarVariants({\n bordered: this.bordered(),\n columns: (this.effectiveMonthColumns() >= 2 ? 2 : 1) as 1 | 2,\n }),\n );\n\n /** @internal */\n readonly rootClasses: Signal<string> = computed(() => this.variantResult().root());\n\n /** @internal */\n readonly monthsClasses: Signal<string> = computed(() => this.variantResult().months());\n\n private readonly monthNames: Signal<string[]> = computed(() =>\n this.dateAdapter.getMonthNames('long'),\n );\n\n /** @internal */\n readonly periodLabel: Signal<string> = computed(() => {\n const date = this._activeDate();\n const view = this._viewState();\n const year = this.dateAdapter.getYear(date);\n const month = this.dateAdapter.getMonth(date);\n\n switch (view) {\n case 'day': {\n const name = this.monthNames()[month];\n if (this.effectiveMonthColumns() >= 2) {\n const secondDate = this.secondaryActiveDate()!;\n const secondMonth = this.dateAdapter.getMonth(secondDate);\n const secondYear = this.dateAdapter.getYear(secondDate);\n const secondName = this.monthNames()[secondMonth];\n if (year === secondYear) return `${name} – ${secondName} ${year}`;\n return `${name} ${year} – ${secondName} ${secondYear}`;\n }\n return `${name} ${year}`;\n }\n case 'month':\n return `${year}`;\n case 'year': {\n const startYear = getMultiYearStartingYear(year, YEARS_PER_PAGE);\n return `${startYear} – ${startYear + YEARS_PER_PAGE - 1}`;\n }\n }\n });\n\n /** @internal */\n readonly periodAriaLabel: Signal<string> = computed(() => {\n const view = this._viewState();\n const label = this.periodLabel();\n const intl = this.effectiveIntl();\n switch (view) {\n case 'day':\n return intl.switchToMonthViewLabel(label);\n case 'month':\n return intl.switchToYearViewLabel(label);\n case 'year':\n return label;\n }\n });\n\n /** @internal */\n readonly prevAriaLabel: Signal<string> = computed(() => {\n const intl = this.effectiveIntl();\n switch (this._viewState()) {\n case 'day':\n return intl.previousMonthLabel;\n case 'month':\n return intl.previousYearLabel;\n case 'year':\n return intl.previousYearsLabel(YEARS_PER_PAGE);\n }\n });\n\n /** @internal */\n readonly nextAriaLabel: Signal<string> = computed(() => {\n const intl = this.effectiveIntl();\n switch (this._viewState()) {\n case 'day':\n return intl.nextMonthLabel;\n case 'month':\n return intl.nextYearLabel;\n case 'year':\n return intl.nextYearsLabel(YEARS_PER_PAGE);\n }\n });\n\n /** @internal */\n readonly prevDisabled: Signal<boolean> = computed(() => {\n const date = this._activeDate();\n const minDate = this.resolvedMinDate();\n if (!minDate) return false;\n const view = this._viewState();\n const year = this.dateAdapter.getYear(date);\n const month = this.dateAdapter.getMonth(date);\n switch (view) {\n case 'day': {\n const prevMonth = month === 0 ? 11 : month - 1;\n const prevYear = month === 0 ? year - 1 : year;\n return isMonthDisabled(prevYear, prevMonth, minDate, null, this.dateAdapter);\n }\n case 'month':\n return isYearDisabled(year - 1, minDate, null, this.dateAdapter);\n case 'year': {\n const startYear = getMultiYearStartingYear(year, YEARS_PER_PAGE);\n return isYearDisabled(startYear - 1, minDate, null, this.dateAdapter);\n }\n }\n });\n\n /** @internal */\n readonly nextDisabled: Signal<boolean> = computed(() => {\n const date = this._activeDate();\n const maxDate = this.resolvedMaxDate();\n if (!maxDate) return false;\n const view = this._viewState();\n const year = this.dateAdapter.getYear(date);\n const month = this.dateAdapter.getMonth(date);\n switch (view) {\n case 'day': {\n const nextMonth = month === 11 ? 0 : month + 1;\n const nextYear = month === 11 ? year + 1 : year;\n return isMonthDisabled(nextYear, nextMonth, null, maxDate, this.dateAdapter);\n }\n case 'month':\n return isYearDisabled(year + 1, null, maxDate, this.dateAdapter);\n case 'year': {\n const startYear = getMultiYearStartingYear(year, YEARS_PER_PAGE);\n return isYearDisabled(startYear + YEARS_PER_PAGE, null, maxDate, this.dateAdapter);\n }\n }\n });\n\n // ---------------------------------------------------------------------------\n // Public methods (§33.4)\n // ---------------------------------------------------------------------------\n\n /** Focuses `date` and optionally navigates the view to render it. */\n focusDate(date: D, opts?: { navigate?: boolean }): void {\n const clamped = this.dateAdapter.clampDate(date, this.resolvedMinDate(), this.resolvedMaxDate());\n if (opts?.navigate) this._activeDate.set(clamped);\n this.activeDateChange.emit(clamped);\n this.focusActiveCell();\n }\n\n /** Sets the current view state and emits a `viewChange` event. */\n setView(view: CalendarViewState): void {\n const from = this._viewState();\n if (from === view) return;\n this._viewState.set(view);\n this.viewChange.emit({ from, to: view, reason: 'programmatic' });\n }\n\n /** Navigates to a specific date (anchor). Does not emit a selection event. */\n goToDate(date: D): void {\n const clamped = this.dateAdapter.clampDate(date, this.resolvedMinDate(), this.resolvedMaxDate());\n this._activeDate.set(clamped);\n this.activeDateChange.emit(clamped);\n }\n\n /** Navigates to today. */\n goToToday(): void {\n this.goToDate(this.dateAdapter.today());\n }\n\n /** Clears the current selection. Alias: `clearSelection`. */\n clear(): void {\n if (this.effectiveReadonly()) return;\n const had = !isEmptyCalendarValue(this.value());\n const empty = emptyCalendarValue<M, D>(this.mode() as M);\n const hadPreset = this._selectedPresetId() !== null;\n this.value.set(empty);\n this.internalDraftValue.set(null);\n this._selectionState.set('EMPTY');\n if (had) this.selectionCleared.emit({ reason: 'user' });\n this.cvaOnChange(empty);\n this.valueChange.emit(empty);\n if (hadPreset) {\n this._selectedPresetId.set(null);\n this.presetChange.emit(null);\n }\n }\n\n /** Alias of `clear()` exported per §33.4 for discoverability. */\n clearSelection(): void {\n this.clear();\n }\n\n /** Resets to initial state — value + view + active date per `resetBehavior`. Phase 3 extends this with form-reset integration. */\n reset(): void {\n this.clear();\n this._viewState.set(this.startView());\n this._activeDate.set(this.startAt() ?? this.dateAdapter.today());\n }\n\n /**\n * Re-runs validation against the current constraints and cell filters.\n *\n * Call this after mutating a constraint imperatively (rather than through an\n * input binding), so the bound control's errors reflect the new rules.\n */\n revalidate(): void {\n // The comment this replaced claimed the validator did not exist yet. It\n // does — `validate()` emits the constraint codes — so the method was a\n // documented no-op sitting next to a working validator.\n this.validatorOnChange();\n }\n\n /**\n * Opens the overlay.\n *\n * @deprecated Not implemented. `tw-calendar` is inline-only today; the overlay\n * is part of the phased v1 cutover. Use `tw-date-picker` or\n * `tw-date-range-picker` for an overlay-mounted calendar. Throws in dev mode.\n */\n open(): void {\n this.warnOverlayUnsupported('open');\n }\n\n /**\n * Closes the overlay.\n *\n * @deprecated Not implemented — see {@link open}. Throws in dev mode.\n */\n close(): void {\n this.warnOverlayUnsupported('close');\n }\n\n /**\n * Toggles the overlay.\n *\n * @deprecated Not implemented — see {@link open}. Throws in dev mode.\n */\n toggle(): void {\n this.warnOverlayUnsupported('toggle');\n }\n\n /**\n * Fails loudly in development for the unimplemented overlay API.\n *\n * These three shipped as silent no-ops with JSDoc that described them as\n * working (\"Closes the overlay.\"), which Compodoc rendered straight into the\n * published API table. A consumer calling `calendar.open()` got no overlay, no\n * error, and no clue. Dev-mode throw turns that into an immediate, explainable\n * failure while leaving production builds untouched.\n */\n private warnOverlayUnsupported(method: 'open' | 'close' | 'toggle'): void {\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n throw new Error(\n `[ngx-tw] CalendarComponent.${method}() is not implemented — tw-calendar is inline-only. ` +\n `Use tw-date-picker or tw-date-range-picker for an overlay-mounted calendar.`,\n );\n }\n }\n\n /** Imperatively focuses the currently active cell. */\n focusActiveCell(): void {\n const views = this.monthViews();\n if (views.length > 0) {\n views[0].focusActiveCell();\n return;\n }\n const host = this.elementRef.nativeElement;\n (host.querySelector('button[tabindex=\"0\"]') as HTMLButtonElement | null)?.focus();\n }\n\n // ---------------------------------------------------------------------------\n // Event handlers (day grid)\n // ---------------------------------------------------------------------------\n\n /** @internal */\n onPrevClicked(): void {\n const view = this._viewState();\n const date = this._activeDate();\n const previousYear = this.dateAdapter.getYear(date);\n const previousMonth = this.dateAdapter.getMonth(date);\n let next: D;\n switch (view) {\n case 'day':\n next = this.dateAdapter.addMonths(date, -1);\n break;\n case 'month':\n next = this.dateAdapter.addYears(date, -1);\n break;\n case 'year':\n next = this.dateAdapter.addYears(date, -YEARS_PER_PAGE);\n break;\n }\n this._activeDate.set(next);\n this.activeDateChange.emit(next);\n this.emitPeriodChange(previousYear, previousMonth, view);\n this.announceNavigation('previous');\n }\n\n /** @internal */\n onNextClicked(): void {\n const view = this._viewState();\n const date = this._activeDate();\n const previousYear = this.dateAdapter.getYear(date);\n const previousMonth = this.dateAdapter.getMonth(date);\n let next: D;\n switch (view) {\n case 'day':\n next = this.dateAdapter.addMonths(date, 1);\n break;\n case 'month':\n next = this.dateAdapter.addYears(date, 1);\n break;\n case 'year':\n next = this.dateAdapter.addYears(date, YEARS_PER_PAGE);\n break;\n }\n this._activeDate.set(next);\n this.activeDateChange.emit(next);\n this.emitPeriodChange(previousYear, previousMonth, view);\n this.announceNavigation('next');\n }\n\n /** @internal — period-button click: drill up (day → month → year). */\n onPeriodClicked(): void {\n const current = this._viewState();\n if (current === 'day') {\n this._viewState.set('month');\n this.viewChange.emit({ from: current, to: 'month', reason: 'drill-up' });\n } else if (current === 'month') {\n this._viewState.set('year');\n this.viewChange.emit({ from: current, to: 'year', reason: 'drill-up' });\n }\n this.announceViewChange();\n }\n\n /** @internal — day-grid cell activation. */\n onDateSelected(date: D): void {\n if (this.effectiveDisabled()) return;\n // Read-only: keep focus + navigation but skip every commit path.\n if (this.effectiveReadonly()) {\n this._activeDate.set(date);\n this.activeDateChange.emit(date);\n return;\n }\n this._activeDate.set(date);\n this.activeDateChange.emit(date);\n\n const mode = this.mode();\n if (mode === 'range') {\n this.commitRangeClick(date);\n return;\n }\n\n if (mode === 'multiple') {\n // Phase 4 — enforce maxSelections per maxSelectionBehavior (§10.1, §33.1).\n const limit = this.maxSelections();\n const currentArr = (this.value() as unknown as D[]) ?? [];\n const isAlreadySelected = currentArr.some((d) => this.dateAdapter.sameDate(d, date));\n if (limit !== null && !isAlreadySelected && currentArr.length >= limit) {\n const behavior = this.maxSelectionBehavior();\n if (behavior === 'emit-limit-reached') {\n this.selectionLimitReached.emit({ limit, attempted: date });\n return;\n }\n if (behavior === 'replace-oldest') {\n const next = [...currentArr.slice(1), date];\n this.commitValue(next as unknown as CalendarValue<M, D>, 'commit');\n return;\n }\n // 'ignore' — silently drop the click.\n return;\n }\n }\n\n const strategy = this.selectionStrategy();\n const current = mode === 'multiple' ? ((this.value() as unknown as D[]) ?? []) : this.value();\n const result = strategy.select(date, current);\n if (result.isComplete) {\n this.commitValue(result.selection as CalendarValue<M, D>, 'commit');\n }\n }\n\n /** @internal — preview sync from pointer hover. */\n onPreviewChange(date: D | null): void {\n this._hoveredDate.set(date);\n if (date) this.cellHover.emit({ date });\n const draft = this.internalDraftValue();\n const pr = this.previewRange();\n if (draft && pr?.start && pr.end) {\n this.rangePreview.emit({\n tentativeRange: { start: pr.start, end: pr.end },\n invalidPreview: this.isPreviewInvalid(pr.start, pr.end),\n });\n }\n }\n\n /**\n * Phase 4 — `true` when a tentative range hover would commit an invalid value.\n * Reasons: crosses a disabled date, or length violates `min`/`maxRangeLength`.\n * The flag is informational — does NOT block the commit on its own (§4 default\n * is permissive). Subscribe to `rangePreview.invalidPreview` together with the\n * `calendarRangeTooShort` / `calendarRangeTooLong` validator codes to react.\n */\n private isPreviewInvalid(start: D, end: D): boolean {\n const constraints = this.resolvedConstraints();\n // Endpoints already pass `enabled` check (you can't hover a disabled cell\n // and produce a preview), so we only need to look at the interior.\n if (rangeCrossesDisabled(start, end, constraints, this.dateAdapter, false)) return true;\n const length = rangeLengthDays(start, end, this.dateAdapter);\n const min = this.minRangeLength();\n if (min !== null && length < min) return true;\n const max = this.maxRangeLength();\n if (max !== null && length > max) return true;\n return false;\n }\n\n /**\n * Resolved `minDate` — individual `minDate` input wins, then `constraints.minDate`,\n * else `null`. Used by every internal min-date reader so the shorthand input is\n * transparent to the rest of the component.\n */\n readonly resolvedMinDate: Signal<D | null> = computed(\n () => this.minDate() ?? this.constraints()?.minDate ?? null,\n );\n\n /** Resolved `maxDate` — individual input wins, then `constraints.maxDate`, else `null`. */\n readonly resolvedMaxDate: Signal<D | null> = computed(\n () => this.maxDate() ?? this.constraints()?.maxDate ?? null,\n );\n\n /** Resolved `disabledDates` — individual input wins, then `constraints.disabledDates`, else `null`. */\n readonly resolvedDisabledDates: Signal<DisabledDates<D> | null> = computed(\n () => this.disabledDates() ?? this.constraints()?.disabledDates ?? null,\n );\n\n /** Resolved `disabledDaysOfWeek` — individual input wins (when non-empty), then `constraints.disabledDaysOfWeek`, else `[]`. */\n readonly resolvedDisabledDaysOfWeek: Signal<readonly number[]> = computed(() => {\n const own = this.disabledDaysOfWeek();\n if (own.length > 0) return own;\n return this.constraints()?.disabledDaysOfWeek ?? [];\n });\n\n /** Resolved `dateFilter` — individual input wins, then `constraints.dateFilter`, else `null`. */\n readonly resolvedDateFilter: Signal<DateFilterFn<D> | null> = computed(\n () => this.dateFilter() ?? this.constraints()?.dateFilter ?? null,\n );\n\n /** Aggregated, resolved constraint inputs — passed to the resolver and validator. */\n private readonly resolvedConstraints: Signal<CalendarConstraints<D>> = computed(() => ({\n minDate: this.resolvedMinDate(),\n maxDate: this.resolvedMaxDate(),\n disabledDates: this.resolvedDisabledDates(),\n disabledDaysOfWeek: this.resolvedDisabledDaysOfWeek(),\n dateFilter: this.resolvedDateFilter(),\n }));\n\n /** @internal — month-view cell activation (drill-down to day). */\n onMonthSelected(date: D): void {\n this._activeDate.set(date);\n const from = this._viewState();\n this._viewState.set('day');\n this.activeDateChange.emit(date);\n this.viewChange.emit({ from, to: 'day', reason: 'drill-down' });\n this.announceViewChange();\n }\n\n /** @internal — years-view cell activation (drill-down to month). */\n onYearSelected(date: D): void {\n this._activeDate.set(date);\n const from = this._viewState();\n this._viewState.set('month');\n this.activeDateChange.emit(date);\n this.viewChange.emit({ from, to: 'month', reason: 'drill-down' });\n this.announceViewChange();\n }\n\n /** @internal — keyboard / programmatic active-date change from a view. */\n onActiveDateChange(date: D, gridIndex?: number): void {\n const views = this.monthViews();\n\n if (this.effectiveMonthColumns() >= 2 && views.length === 2 && gridIndex !== undefined) {\n const primaryMonth = this.dateAdapter.getMonth(this._activeDate());\n const secondaryMonth = this.dateAdapter.getMonth(this.secondaryActiveDate()!);\n const targetMonth = this.dateAdapter.getMonth(date);\n if (gridIndex === 0 && targetMonth === secondaryMonth) {\n const rightView = views[1];\n if (rightView) {\n rightView.focusCell(this.computeCompareValue(date));\n return;\n }\n }\n if (gridIndex === 1 && targetMonth === primaryMonth) {\n const leftView = views[0];\n if (leftView) {\n leftView.focusCell(this.computeCompareValue(date));\n return;\n }\n }\n }\n\n this._activeDate.set(date);\n this.activeDateChange.emit(date);\n }\n\n // ---------------------------------------------------------------------------\n // Range state machine (§21) — orchestrator-owned. Click matrix:\n // EMPTY + click → SELECTING (selectionStart)\n // SELECTING+ click → COMPLETE (selectionComplete; auto-swap unless allowBackwardRange)\n // COMPLETE + click → branches on rangeClickBehavior:\n // 'restart' → SELECTING (selectionRestart)\n // 'nearest-edge' → COMPLETE (selectionComplete reason='nearest-edge')\n // 'require-clear' → no-op + invalid-flash on the clicked cell\n // ---------------------------------------------------------------------------\n\n /** @internal Last invalidly-clicked date, cleared after ~200ms — drives `data-state-invalid-flash`. */\n private readonly _invalidFlashDate: WritableSignal<D | null> = signal<D | null>(null);\n\n /** Public read of the transient invalid-flash anchor. Views consume this and tag the matching cell. */\n readonly invalidFlashDate: Signal<D | null> = computed(() => this._invalidFlashDate());\n\n private commitRangeClick(date: D): void {\n const draft = this.internalDraftValue();\n const state = this._selectionState();\n\n // ─── COMPLETE state branch — third click after a committed range. ────────\n if (state === 'COMPLETE') {\n const behavior = this.rangeClickBehavior();\n if (behavior === 'require-clear') {\n this.flashInvalid(date);\n return;\n }\n if (behavior === 'nearest-edge') {\n this.commitNearestEdge(date);\n return;\n }\n // 'restart' (default) → fall through to SELECTING entry.\n this.enterSelecting(date, /* fromComplete */ true);\n return;\n }\n\n // ─── EMPTY → SELECTING ──────────────────────────────────────────────────\n if (state !== 'SELECTING' || !draft) {\n this.enterSelecting(date, /* fromComplete */ false);\n return;\n }\n\n // ─── SELECTING → COMPLETE: commit the range. ────────────────────────────\n const start = draft.start;\n const cmp = this.dateAdapter.compare(date, start);\n const behavior = this._resolvedRangeBehavior();\n\n // `allowSingleDayRange = false` rejects clicking the same cell twice.\n if (cmp === 0 && !behavior.allowSingleDayRange) {\n this.flashInvalid(date);\n return;\n }\n\n let rangeStart: D;\n let rangeEnd: D;\n let reason: SelectionCompleteEvent<M, D>['reason'] = 'commit';\n if (cmp < 0) {\n if (behavior.allowBackwardRange) {\n // Preserve user-clicked order; do not normalize.\n rangeStart = start;\n rangeEnd = date;\n } else {\n // §21.5 silent auto-swap — DO NOT emit selectionRestart.\n rangeStart = date;\n rangeEnd = start;\n reason = 'auto-swap';\n }\n } else {\n rangeStart = start;\n rangeEnd = date;\n }\n\n // §21.4 disable-crossing guard: if any interior date is disabled, reject.\n if (\n behavior.disableRangesCrossingDisabledDates &&\n rangeCrossesDisabled(\n rangeStart,\n rangeEnd,\n this.resolvedConstraints(),\n this.dateAdapter,\n /* includeEndpoints */ false,\n )\n ) {\n this.flashInvalid(date);\n return;\n }\n\n const committed = { start: rangeStart, end: rangeEnd } as unknown as CalendarValue<M, D>;\n this.internalDraftValue.set(null);\n this.commitValue(committed, reason);\n }\n\n /** Enters SELECTING with `date` as draft.start. Emits selectionStart or selectionRestart. */\n private enterSelecting(date: D, fromComplete: boolean): void {\n this.internalDraftValue.set({ start: date });\n this._selectionState.set('SELECTING');\n if (fromComplete) {\n this.selectionRestart.emit({ start: date });\n } else {\n this.selectionStart.emit({ start: date });\n }\n this.announceRangeStart(date);\n }\n\n /**\n * `'nearest-edge'` move (§21.3) — drag the closer endpoint of the committed\n * range to `date`. Emits `selectionComplete({reason: 'nearest-edge'})`.\n */\n private commitNearestEdge(date: D): void {\n const current = this.value() as unknown as { start: D | null; end: D | null } | null;\n if (!current?.start || !current?.end) {\n // Defensive — shouldn't reach here in COMPLETE without both endpoints.\n this.enterSelecting(date, true);\n return;\n }\n const distStart = Math.abs(this.dateAdapter.compare(date, current.start));\n const distEnd = Math.abs(this.dateAdapter.compare(date, current.end));\n let nextStart: D;\n let nextEnd: D;\n if (distStart <= distEnd) {\n // Move start; if it crosses the existing end, swap.\n if (this.dateAdapter.compare(date, current.end) > 0) {\n nextStart = current.end;\n nextEnd = date;\n } else {\n nextStart = date;\n nextEnd = current.end;\n }\n } else {\n // Move end; if it crosses the existing start, swap.\n if (this.dateAdapter.compare(date, current.start) < 0) {\n nextStart = date;\n nextEnd = current.start;\n } else {\n nextStart = current.start;\n nextEnd = date;\n }\n }\n if (\n this._resolvedRangeBehavior().disableRangesCrossingDisabledDates &&\n rangeCrossesDisabled(\n nextStart,\n nextEnd,\n this.resolvedConstraints(),\n this.dateAdapter,\n /* includeEndpoints */ false,\n )\n ) {\n this.flashInvalid(date);\n return;\n }\n const committed = { start: nextStart, end: nextEnd } as unknown as CalendarValue<M, D>;\n this.commitValue(committed, 'nearest-edge');\n }\n\n /** Pending invalid-flash clear timer; tracked so we can cancel on destroy. */\n private _invalidFlashTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** Sets the invalid-flash anchor and schedules a clear after 200ms. */\n private flashInvalid(date: D): void {\n this._invalidFlashDate.set(date);\n this.announceRejection();\n if (this._invalidFlashTimer !== null) clearTimeout(this._invalidFlashTimer);\n this._invalidFlashTimer = setTimeout(() => {\n this._invalidFlashTimer = null;\n // Only clear if we're still flashing this exact date (a new flash may have superseded).\n if (this._invalidFlashDate() === date) {\n this._invalidFlashDate.set(null);\n }\n }, 200);\n }\n\n /** Commits a value into the form + outputs with spec-ordered event emission. */\n private commitValue(\n newValue: CalendarValue<M, D>,\n reason: SelectionCompleteEvent<M, D>['reason'],\n ): void {\n this.value.set(newValue);\n this._selectionState.set('COMPLETE');\n // §8.5: at most one `valueChange` + one `selectionComplete` per user action.\n this.cvaOnChange(newValue);\n this.cvaOnTouched();\n this.valueChange.emit(newValue);\n this.selectionComplete.emit({ value: newValue, reason });\n this.announceSelectionComplete(newValue);\n }\n\n // ---------------------------------------------------------------------------\n // Form reset handling (§6.5)\n // ---------------------------------------------------------------------------\n\n /**\n * Handles a form-owned reset. Triggered when the bound `NgControl` flips\n * `pristine` back to `true` (via `FormControl.reset()` / `FormGroup.reset()`).\n * Per §6.5 the form owns the value write, so this path does NOT emit\n * `valueChange` and does NOT call `onTouched`. It emits `selectionCleared`\n * when a value was previously committed and restores UI state per\n * `resetBehavior`.\n */\n private handleFormReset(): void {\n // `writeValue` fires before `FormResetEvent`, so by the time we reach this\n // handler `this.value()` is already the reset value (typically empty).\n // `_hadValueBeforeLastWrite` is the snapshot captured at the start of\n // the preceding `writeValue` and is the correct signal for \"was there\n // anything to clear?\" per §6.5.\n const hadValue = this._hadValueBeforeLastWrite;\n this._hadValueBeforeLastWrite = false;\n const hadPreset = this._selectedPresetId() !== null;\n\n // Always clear draft / hovered / preset regardless of resetBehavior.\n this.internalDraftValue.set(null);\n this._hoveredDate.set(null);\n\n if (isEmptyCalendarValue(this.value())) {\n this._selectionState.set('EMPTY');\n }\n\n if (this.resetBehavior() === 'full') {\n this._viewState.set(this.startView());\n this._activeDate.set(this.startAt() ?? this.dateAdapter.today());\n }\n\n if (hadPreset) {\n this._selectedPresetId.set(null);\n this.presetChange.emit(null);\n }\n\n if (hadValue) {\n this.selectionCleared.emit({ reason: 'reset' });\n }\n }\n\n // ---------------------------------------------------------------------------\n // Mode change handling (§11.2)\n // ---------------------------------------------------------------------------\n\n private onModeChanged(from: CalendarMode, to: CalendarMode): void {\n const hadValue = !isEmptyCalendarValue(this.value());\n const hadPreset = this._selectedPresetId() !== null;\n\n // Canonical emit order per §11.2:\n // 1. selectionCleared({reason: 'mode-change'}) — only if a value was previously held\n // 2. presetChange(null) — only if a preset id was set\n // 3. modeChange\n // 4. valueChange (empty for new mode)\n this.internalDraftValue.set(null);\n this._selectionState.set('EMPTY');\n const empty = emptyCalendarValue<CalendarMode, D>(to) as unknown as CalendarValue<M, D>;\n this.value.set(empty);\n\n if (hadValue) {\n this.selectionCleared.emit({ reason: 'mode-change' });\n }\n if (hadPreset) {\n this._selectedPresetId.set(null);\n this.presetChange.emit(null);\n }\n this.modeChange.emit({ from, to });\n this.cvaOnChange(empty);\n this.valueChange.emit(empty);\n }\n\n // ---------------------------------------------------------------------------\n // Utility helpers\n // ---------------------------------------------------------------------------\n\n private computeCompareValue(date: D): number {\n return (\n this.dateAdapter.getYear(date) * 10000 +\n this.dateAdapter.getMonth(date) * 100 +\n this.dateAdapter.getDate(date)\n );\n }\n\n private emitPeriodChange(previousYear: number, previousMonth: number, view: CalendarViewState): void {\n const now = this._activeDate();\n const year = this.dateAdapter.getYear(now);\n const month = this.dateAdapter.getMonth(now);\n if (view === 'day' && (year !== previousYear || month !== previousMonth)) {\n this.monthChange.emit({ year, month });\n }\n if (year !== previousYear) this.yearChange.emit({ year });\n }\n\n private announceViewChange(): void {\n const intl = this.effectiveIntl();\n if (intl.skipAnnouncement) return;\n this.liveAnnouncer.announce(intl.viewSwitched(this._viewState(), this.periodLabel()), 'polite');\n }\n\n private announceNavigation(direction: 'previous' | 'next'): void {\n const intl = this.effectiveIntl();\n if (intl.skipAnnouncement) return;\n this.liveAnnouncer.announce(intl.navigatedTo(direction, this.periodLabel()), 'polite');\n }\n\n /** Announces a committed selection for AT users. Branches on mode so the message matches the §19.4 intl strings. */\n private announceSelectionComplete(value: CalendarValue<M, D>): void {\n const intl = this.effectiveIntl();\n if (intl.skipAnnouncement) return;\n const mode = this.mode();\n if (mode === 'single') {\n const single = value as D | null;\n if (!single) return;\n this.liveAnnouncer.announce(intl.selectedAnnouncement(this.formatDate(single)), 'polite');\n return;\n }\n if (mode === 'multiple') {\n const arr = (value as unknown as D[] | null) ?? [];\n this.liveAnnouncer.announce(intl.multipleSelectionAnnouncement(arr.length), 'polite');\n return;\n }\n const range = value as unknown as { start: D | null; end: D | null } | null;\n if (!range?.start || !range?.end) return;\n const length = rangeLengthDays(range.start, range.end, this.dateAdapter);\n this.liveAnnouncer.announce(\n intl.rangeUpdateAnnouncement(this.formatDate(range.start), this.formatDate(range.end), length),\n 'polite',\n );\n }\n\n /** Announces the start of a range pick for AT users. */\n private announceRangeStart(date: D): void {\n const intl = this.effectiveIntl();\n if (intl.skipAnnouncement) return;\n this.liveAnnouncer.announce(intl.rangeStartAnnouncement(this.formatDate(date)), 'polite');\n }\n\n /** Announces that a click was rejected (require-clear, disable-cross commit, single-day disallowed). */\n private announceRejection(): void {\n const intl = this.effectiveIntl();\n if (intl.skipAnnouncement) return;\n this.liveAnnouncer.announce(intl.selectionRejectedAnnouncement, 'polite');\n }\n\n /** Locale-aware long-form date format used in announcements (e.g. \"Wednesday, April 15, 2026\"). */\n private formatDate(date: D): string {\n return this.dateAdapter.format(date, { dateTimeFormat: { dateStyle: 'full' } });\n }\n\n}\n","import {\n Directive,\n effect,\n inject,\n input,\n model,\n type InputSignal,\n type ModelSignal,\n} from '@angular/core';\nimport type {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { CalendarComponent } from './calendar';\nimport type { CalendarRangeValue } from './calendar.types';\n\n/**\n * Common signal-input surface declared by the three mode-specific directives\n * per spec §6.3 / §7.3. Each directive maps the Signal Forms contract onto\n * the hosting `CalendarComponent`, so `[field]=\"form.someDate\"` drives the\n * calendar without any extra wiring.\n */\ninterface CalendarFormControlCommon {\n /** Disabled flag forwarded from the bound field. OR-merged with `disabled` on the component. */\n readonly disabled: InputSignal<boolean>;\n /** Read-only flag forwarded from the bound field. OR-merged with `readonly` on the component. */\n readonly readonly: InputSignal<boolean>;\n /** Required flag forwarded from the bound field. Surfaces `calendarRequired` when empty (§10.2). */\n readonly required: InputSignal<boolean>;\n /** Mirrors the bound field's `invalid` flag. Reserved for visual treatment (Phase 4 wires styling). */\n readonly invalid: InputSignal<boolean>;\n /** Mirrors the bound field's `hidden` flag. Consumers should guard the component with `@if` when true. */\n readonly hidden: InputSignal<boolean>;\n /** Field errors forwarded from Signal Forms for consumer-side styling. */\n readonly errors: InputSignal<readonly ValidationError.WithOptionalFieldTree[]>;\n /** Forwarded disablement reasons; surfaced for consumer-side UX (tooltips, etc.). */\n readonly disabledReasons: InputSignal<readonly WithOptionalFieldTree<DisabledReason>[]>;\n /** Two-way `touched` flag — the directive writes `true` on blur; the `Field` directive reads/writes it. */\n readonly touched: ModelSignal<boolean>;\n}\n\nfunction wireSignalFormsInputs(\n host: CalendarComponent<'single' | 'multiple' | 'range', unknown, unknown>,\n api: CalendarFormControlCommon,\n): void {\n // Mirror Signal Forms flags onto the component. Effects run in the\n // directive's injection context (constructor-created), so cleanup is\n // automatic on destroy.\n effect(() => {\n host.cvaDisabled.set(api.disabled());\n });\n effect(() => {\n host.cvaReadonly.set(api.readonly());\n });\n}\n\n/**\n * Signal Forms strict binding for `CalendarComponent` in `single` mode.\n * Implements `FormValueControl<D | null>` so `[field]=\"form.someDate\"`\n * infers `FieldTree<D | null>` with no casts.\n *\n * Applies automatically when `<tw-calendar mode=\"single\">` appears in the\n * template. When the mode attribute is omitted, consumers bind the component\n * directly — the CVA path handles reactive / template-driven forms.\n */\n// Selector matches the existing CalendarComponent input `mode=\"single\"`;\n// renaming to `twMode` would break the public API. The directive is scoped\n// to the `tw-calendar` element so the unprefixed attribute is safe.\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'tw-calendar[mode=\"single\"]',\n exportAs: 'twCalendarSingle',\n})\nexport class CalendarSingleDirective<D = Date, TOut = D | null>\n implements FormValueControl<TOut>, CalendarFormControlCommon\n{\n private readonly host = inject(CalendarComponent, { self: true }) as unknown as CalendarComponent<\n 'single',\n D,\n TOut\n >;\n\n /** Two-way value, forwarded to the hosting `CalendarComponent`. Signal Forms `Field` binds against this. */\n readonly value = this.host.value as unknown as ModelSignal<TOut>;\n\n /** Mirrors the bound field's disabled flag. */\n readonly disabled = input<boolean>(false);\n /** Mirrors the bound field's readonly flag. */\n readonly readonly = input<boolean>(false);\n /** Mirrors the bound field's required flag. */\n readonly required = input<boolean>(false);\n /** Mirrors the bound field's invalid flag. */\n readonly invalid = input<boolean>(false);\n /** Mirrors the bound field's hidden flag. */\n readonly hidden = input<boolean>(false);\n /** Mirrors the bound field's errors. */\n readonly errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n /** Mirrors the bound field's disablement reasons. */\n readonly disabledReasons = input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n /** Two-way `touched` flag — drives and reflects the field's touched state. */\n readonly touched = model<boolean>(false);\n\n constructor() {\n wireSignalFormsInputs(\n this.host as unknown as CalendarComponent<\n 'single' | 'multiple' | 'range',\n unknown,\n unknown\n >,\n this,\n );\n }\n}\n\n/**\n * Signal Forms strict binding for `CalendarComponent` in `multiple` mode.\n * Implements `FormValueControl<D[]>`.\n */\n// See note above on the single-mode directive — same rationale.\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'tw-calendar[mode=\"multiple\"]',\n exportAs: 'twCalendarMultiple',\n})\nexport class CalendarMultipleDirective<D = Date, TOut = D[]>\n implements FormValueControl<TOut>, CalendarFormControlCommon\n{\n private readonly host = inject(CalendarComponent, { self: true }) as unknown as CalendarComponent<\n 'multiple',\n D,\n TOut\n >;\n\n /** Two-way value, forwarded to the hosting `CalendarComponent`. Signal Forms `Field` binds against this. */\n readonly value = this.host.value as unknown as ModelSignal<TOut>;\n\n /** Mirrors the bound field's disabled flag. */\n readonly disabled = input<boolean>(false);\n /** Mirrors the bound field's readonly flag. */\n readonly readonly = input<boolean>(false);\n /** Mirrors the bound field's required flag. */\n readonly required = input<boolean>(false);\n /** Mirrors the bound field's invalid flag. */\n readonly invalid = input<boolean>(false);\n /** Mirrors the bound field's hidden flag. */\n readonly hidden = input<boolean>(false);\n /** Mirrors the bound field's errors. */\n readonly errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n /** Mirrors the bound field's disablement reasons. */\n readonly disabledReasons = input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n /** Two-way `touched` flag — drives and reflects the field's touched state. */\n readonly touched = model<boolean>(false);\n\n constructor() {\n wireSignalFormsInputs(\n this.host as unknown as CalendarComponent<\n 'single' | 'multiple' | 'range',\n unknown,\n unknown\n >,\n this,\n );\n }\n}\n\n/**\n * Signal Forms strict binding for `CalendarComponent` in `range` mode.\n * Implements `FormValueControl<{ start: D | null; end: D | null }>`.\n */\n// See note above on the single-mode directive — same rationale.\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'tw-calendar[mode=\"range\"]',\n exportAs: 'twCalendarRange',\n})\nexport class CalendarRangeDirective<D = Date, TOut = CalendarRangeValue<D>>\n implements FormValueControl<TOut>, CalendarFormControlCommon\n{\n private readonly host = inject(CalendarComponent, { self: true }) as unknown as CalendarComponent<\n 'range',\n D,\n TOut\n >;\n\n /** Two-way value, forwarded to the hosting `CalendarComponent`. Signal Forms `Field` binds against this. */\n readonly value = this.host.value as unknown as ModelSignal<TOut>;\n\n /** Mirrors the bound field's disabled flag. */\n readonly disabled = input<boolean>(false);\n /** Mirrors the bound field's readonly flag. */\n readonly readonly = input<boolean>(false);\n /** Mirrors the bound field's required flag. */\n readonly required = input<boolean>(false);\n /** Mirrors the bound field's invalid flag. */\n readonly invalid = input<boolean>(false);\n /** Mirrors the bound field's hidden flag. */\n readonly hidden = input<boolean>(false);\n /** Mirrors the bound field's errors. */\n readonly errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n /** Mirrors the bound field's disablement reasons. */\n readonly disabledReasons = input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n /** Two-way `touched` flag — drives and reflects the field's touched state. */\n readonly touched = model<boolean>(false);\n\n constructor() {\n wireSignalFormsInputs(\n this.host as unknown as CalendarComponent<\n 'single' | 'multiple' | 'range',\n unknown,\n unknown\n >,\n this,\n );\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Marker directive for a slot positioned above the calendar grid. Used to\n * style an external preset rail; the calendar renders projected content\n * with `<ng-content select=\"[twCalendarPresets]\">`.\n */\n@Directive({\n selector: '[twCalendarPresets]',\n host: {\n class: 'flex flex-wrap items-center gap-1.5 px-2 pb-2',\n },\n})\nexport class CalendarPresetsDirective {}\n","import type { CalendarIntl } from './calendar-intl';\n\n/**\n * German (de) locale pack for the calendar's user-visible strings.\n * Pass into the `intl` input or via {@link provideCalendarIntl}. Per-field\n * merge semantics (§19.4) — unspecified fields fall back to English defaults.\n */\nexport const de: Partial<CalendarIntl> = {\n previousMonthLabel: 'Vorheriger Monat',\n nextMonthLabel: 'Naechster Monat',\n previousYearLabel: 'Vorheriges Jahr',\n nextYearLabel: 'Naechstes Jahr',\n previousYearsLabel(yearsPerPage: number): string {\n return yearsPerPage === 1 ? 'Vorheriges Jahr' : `Vorherige ${yearsPerPage} Jahre`;\n },\n nextYearsLabel(yearsPerPage: number): string {\n return yearsPerPage === 1 ? 'Naechstes Jahr' : `Naechste ${yearsPerPage} Jahre`;\n },\n todayLabel: 'Heute',\n clearLabel: 'Loeschen',\n applyLabel: 'Uebernehmen',\n openCalendarLabel: 'Kalender oeffnen',\n chooseDateLabel: 'Datum auswaehlen',\n calendarLabel: 'Kalender',\n monthViewLabel: 'Monatsansicht',\n yearViewLabel: 'Jahresansicht',\n decadeViewLabel: 'Jahrzehntansicht',\n switchToMonthViewLabel(period: string): string {\n return `${period}, klicken um zur Monatsansicht zu wechseln`;\n },\n switchToYearViewLabel(period: string): string {\n return `${period}, klicken um zur Jahresansicht zu wechseln`;\n },\n navigatedTo(direction: 'previous' | 'next', period: string): string {\n const word = direction === 'previous' ? 'vorigen' : 'naechsten';\n return `Zu ${word} ${period} navigiert`;\n },\n selectedAnnouncement(value: string): string {\n return `Ausgewaehlt: ${value}`;\n },\n rangeStartAnnouncement(start: string): string {\n return `Startdatum ausgewaehlt: ${start}. Bitte Enddatum auswaehlen.`;\n },\n rangeUpdateAnnouncement(start: string, end: string, lengthDays: number): string {\n const noun = lengthDays === 1 ? 'Tag' : 'Tage';\n return `Zeitraum ausgewaehlt: ${start} bis ${end}, ${lengthDays} ${noun}`;\n },\n requiredError: 'Bitte ein Datum auswaehlen',\n minDateError(date: string): string {\n return `Datum muss am oder nach dem ${date} liegen`;\n },\n maxDateError(date: string): string {\n return `Datum muss am oder vor dem ${date} liegen`;\n },\n invalidValueError: 'Ungueltiger Datumswert',\n invalidRangeError: 'Ungueltiger Zeitraum',\n dateFilterError: 'Dieses Datum ist nicht verfuegbar',\n parseErrorLabel: 'Ungueltiges Datumsformat',\n};\n","import type { CalendarIntl } from './calendar-intl';\n\n/**\n * French (fr) locale pack for the calendar's user-visible strings.\n * Pass into the `intl` input or via {@link provideCalendarIntl}. Per-field\n * merge semantics (§19.4) — unspecified fields fall back to English defaults.\n */\nexport const fr: Partial<CalendarIntl> = {\n previousMonthLabel: 'Mois precedent',\n nextMonthLabel: 'Mois suivant',\n previousYearLabel: 'Annee precedente',\n nextYearLabel: 'Annee suivante',\n previousYearsLabel(yearsPerPage: number): string {\n return yearsPerPage === 1 ? 'Annee precedente' : `${yearsPerPage} annees precedentes`;\n },\n nextYearsLabel(yearsPerPage: number): string {\n return yearsPerPage === 1 ? 'Annee suivante' : `${yearsPerPage} annees suivantes`;\n },\n todayLabel: \"Aujourd'hui\",\n clearLabel: 'Effacer',\n applyLabel: 'Appliquer',\n openCalendarLabel: 'Ouvrir le calendrier',\n chooseDateLabel: 'Choisir une date',\n calendarLabel: 'Calendrier',\n monthViewLabel: 'vue mensuelle',\n yearViewLabel: 'vue annuelle',\n decadeViewLabel: 'vue par decennie',\n switchToMonthViewLabel(period: string): string {\n return `${period}, cliquer pour passer a la vue mensuelle`;\n },\n switchToYearViewLabel(period: string): string {\n return `${period}, cliquer pour passer a la vue annuelle`;\n },\n navigatedTo(direction: 'previous' | 'next', period: string): string {\n const word = direction === 'previous' ? 'precedent' : 'suivant';\n return `Navigation vers ${period} ${word}`;\n },\n selectedAnnouncement(value: string): string {\n return `Selectionne : ${value}`;\n },\n rangeStartAnnouncement(start: string): string {\n return `Date de debut selectionnee : ${start}. Selectionnez la date de fin.`;\n },\n rangeUpdateAnnouncement(start: string, end: string, lengthDays: number): string {\n const noun = lengthDays === 1 ? 'jour' : 'jours';\n return `Plage selectionnee : ${start} au ${end}, ${lengthDays} ${noun}`;\n },\n requiredError: 'Veuillez selectionner une date',\n minDateError(date: string): string {\n return `La date doit etre le ${date} ou apres`;\n },\n maxDateError(date: string): string {\n return `La date doit etre le ${date} ou avant`;\n },\n invalidValueError: 'Valeur de date invalide',\n invalidRangeError: 'Plage de dates invalide',\n dateFilterError: 'Cette date n\\'est pas disponible',\n parseErrorLabel: 'Format de date invalide',\n};\n","import type { CalendarIntl } from './calendar-intl';\n\n/**\n * Spanish (es) locale pack for the calendar's user-visible strings.\n * Pass into the `intl` input or via {@link provideCalendarIntl}. Per-field\n * merge semantics (§19.4) — unspecified fields fall back to English defaults.\n */\nexport const es: Partial<CalendarIntl> = {\n previousMonthLabel: 'Mes anterior',\n nextMonthLabel: 'Mes siguiente',\n previousYearLabel: 'Ano anterior',\n nextYearLabel: 'Ano siguiente',\n previousYearsLabel(yearsPerPage: number): string {\n return yearsPerPage === 1 ? 'Ano anterior' : `${yearsPerPage} anos anteriores`;\n },\n nextYearsLabel(yearsPerPage: number): string {\n return yearsPerPage === 1 ? 'Ano siguiente' : `${yearsPerPage} anos siguientes`;\n },\n todayLabel: 'Hoy',\n clearLabel: 'Borrar',\n applyLabel: 'Aplicar',\n openCalendarLabel: 'Abrir calendario',\n chooseDateLabel: 'Elegir fecha',\n calendarLabel: 'Calendario',\n monthViewLabel: 'vista de mes',\n yearViewLabel: 'vista de ano',\n decadeViewLabel: 'vista de decada',\n switchToMonthViewLabel(period: string): string {\n return `${period}, haga clic para cambiar a la vista de mes`;\n },\n switchToYearViewLabel(period: string): string {\n return `${period}, haga clic para cambiar a la vista de ano`;\n },\n navigatedTo(direction: 'previous' | 'next', period: string): string {\n const word = direction === 'previous' ? 'anterior' : 'siguiente';\n return `Navegado al ${period} ${word}`;\n },\n selectedAnnouncement(value: string): string {\n return `Seleccionado: ${value}`;\n },\n rangeStartAnnouncement(start: string): string {\n return `Fecha de inicio seleccionada: ${start}. Ahora seleccione la fecha de fin.`;\n },\n rangeUpdateAnnouncement(start: string, end: string, lengthDays: number): string {\n const noun = lengthDays === 1 ? 'dia' : 'dias';\n return `Rango seleccionado: ${start} al ${end}, ${lengthDays} ${noun}`;\n },\n requiredError: 'Por favor seleccione una fecha',\n minDateError(date: string): string {\n return `La fecha debe ser el ${date} o posterior`;\n },\n maxDateError(date: string): string {\n return `La fecha debe ser el ${date} o anterior`;\n },\n invalidValueError: 'Valor de fecha invalido',\n invalidRangeError: 'Rango de fechas invalido',\n dateFilterError: 'Esta fecha no esta disponible',\n parseErrorLabel: 'Formato de fecha invalido',\n};\n","import type { CalendarIntl } from './calendar-intl';\n\n/**\n * Portuguese (pt) locale pack for the calendar's user-visible strings.\n * Pass into the `intl` input or via {@link provideCalendarIntl}. Per-field\n * merge semantics (§19.4) — unspecified fields fall back to English defaults.\n */\nexport const pt: Partial<CalendarIntl> = {\n previousMonthLabel: 'Mes anterior',\n nextMonthLabel: 'Proximo mes',\n previousYearLabel: 'Ano anterior',\n nextYearLabel: 'Proximo ano',\n previousYearsLabel(yearsPerPage: number): string {\n return yearsPerPage === 1 ? 'Ano anterior' : `${yearsPerPage} anos anteriores`;\n },\n nextYearsLabel(yearsPerPage: number): string {\n return yearsPerPage === 1 ? 'Proximo ano' : `Proximos ${yearsPerPage} anos`;\n },\n todayLabel: 'Hoje',\n clearLabel: 'Limpar',\n applyLabel: 'Aplicar',\n openCalendarLabel: 'Abrir calendario',\n chooseDateLabel: 'Escolher data',\n calendarLabel: 'Calendario',\n monthViewLabel: 'visao de mes',\n yearViewLabel: 'visao de ano',\n decadeViewLabel: 'visao de decada',\n switchToMonthViewLabel(period: string): string {\n return `${period}, clique para alternar para a visao de mes`;\n },\n switchToYearViewLabel(period: string): string {\n return `${period}, clique para alternar para a visao de ano`;\n },\n navigatedTo(direction: 'previous' | 'next', period: string): string {\n const word = direction === 'previous' ? 'anterior' : 'proximo';\n return `Navegou para ${period} ${word}`;\n },\n selectedAnnouncement(value: string): string {\n return `Selecionado: ${value}`;\n },\n rangeStartAnnouncement(start: string): string {\n return `Data inicial selecionada: ${start}. Selecione a data final.`;\n },\n rangeUpdateAnnouncement(start: string, end: string, lengthDays: number): string {\n const noun = lengthDays === 1 ? 'dia' : 'dias';\n return `Intervalo selecionado: ${start} a ${end}, ${lengthDays} ${noun}`;\n },\n requiredError: 'Por favor selecione uma data',\n minDateError(date: string): string {\n return `A data deve ser ${date} ou posterior`;\n },\n maxDateError(date: string): string {\n return `A data deve ser ${date} ou anterior`;\n },\n invalidValueError: 'Valor de data invalido',\n invalidRangeError: 'Intervalo de datas invalido',\n dateFilterError: 'Esta data nao esta disponivel',\n parseErrorLabel: 'Formato de data invalido',\n};\n","import type { CalendarIntl } from './calendar-intl';\n\n/**\n * Japanese (ja) locale pack for the calendar's user-visible strings.\n * Pass into the `intl` input or via {@link provideCalendarIntl}. Per-field\n * merge semantics (§19.4) — unspecified fields fall back to English defaults.\n *\n * Note: Japanese has no grammatical plural form, so plural-marked methods\n * collapse to a single form.\n */\nexport const ja: Partial<CalendarIntl> = {\n previousMonthLabel: '前月',\n nextMonthLabel: '翌月',\n previousYearLabel: '前年',\n nextYearLabel: '翌年',\n previousYearsLabel(yearsPerPage: number): string {\n return `前の${yearsPerPage}年`;\n },\n nextYearsLabel(yearsPerPage: number): string {\n return `次の${yearsPerPage}年`;\n },\n todayLabel: '今日',\n clearLabel: 'クリア',\n applyLabel: '適用',\n openCalendarLabel: 'カレンダーを開く',\n chooseDateLabel: '日付を選択',\n calendarLabel: 'カレンダー',\n monthViewLabel: '月表示',\n yearViewLabel: '年表示',\n decadeViewLabel: '10年表示',\n switchToMonthViewLabel(period: string): string {\n return `${period}、クリックして月表示に切り替え`;\n },\n switchToYearViewLabel(period: string): string {\n return `${period}、クリックして年表示に切り替え`;\n },\n navigatedTo(direction: 'previous' | 'next', period: string): string {\n const word = direction === 'previous' ? '前の' : '次の';\n return `${word}${period}に移動しました`;\n },\n selectedAnnouncement(value: string): string {\n return `選択済み: ${value}`;\n },\n rangeStartAnnouncement(start: string): string {\n return `開始日が選択されました: ${start}。終了日を選択してください。`;\n },\n rangeUpdateAnnouncement(start: string, end: string, lengthDays: number): string {\n return `期間が選択されました: ${start} から ${end}、${lengthDays}日間`;\n },\n requiredError: '日付を選択してください',\n minDateError(date: string): string {\n return `日付は${date}以降である必要があります`;\n },\n maxDateError(date: string): string {\n return `日付は${date}以前である必要があります`;\n },\n invalidValueError: '無効な日付値',\n invalidRangeError: '無効な日付範囲',\n dateFilterError: 'この日付は利用できません',\n parseErrorLabel: '無効な日付形式',\n};\n","import type { DateAdapter } from './date-adapter';\nimport type { CalendarMode, CalendarValue } from './calendar.types';\n\n/**\n * Serializes a `CalendarValue<M, D>` to a JSON-friendly shape (spec §7.5, §33.4).\n * The output mirrors the mode: a scalar ISO string for single, an array for\n * multiple, and an endpoint-preserving object for range. `null` endpoints\n * round-trip unchanged.\n *\n * This is a consumer-facing helper — the component itself does NOT auto-\n * serialize. Apps emitting ISO strings at the form-submit boundary call\n * `serializeCalendarValue(control.value, adapter)` and assign the result to\n * their backend payload.\n *\n * Typing: TypeScript cannot narrow the return type by the mode-generic without\n * the caller passing `M` explicitly; the helper is declared with overloads that\n * cover all three modes plus a broad union fallback.\n */\nexport function serializeCalendarValue<D>(\n value: CalendarValue<'single', D>,\n adapter: DateAdapter<D>,\n): string | null;\nexport function serializeCalendarValue<D>(\n value: CalendarValue<'multiple', D>,\n adapter: DateAdapter<D>,\n): string[];\nexport function serializeCalendarValue<D>(\n value: CalendarValue<'range', D>,\n adapter: DateAdapter<D>,\n): { start: string | null; end: string | null };\nexport function serializeCalendarValue<M extends CalendarMode, D>(\n value: CalendarValue<M, D>,\n adapter: DateAdapter<D>,\n): string | null | string[] | { start: string | null; end: string | null };\nexport function serializeCalendarValue<D>(\n value: unknown,\n adapter: DateAdapter<D>,\n): string | null | string[] | { start: string | null; end: string | null } {\n if (value === null || value === undefined) return null;\n if (Array.isArray(value)) {\n return value.map((d) => adapter.toIso(adapter.startOfDay(d as D)));\n }\n if (typeof value === 'object' && value !== null && 'start' in value && 'end' in value) {\n const r = value as { start: D | null; end: D | null };\n return {\n start: r.start ? adapter.toIso(adapter.startOfDay(r.start)) : null,\n end: r.end ? adapter.toIso(adapter.startOfDay(r.end)) : null,\n };\n }\n return adapter.toIso(adapter.startOfDay(value as D));\n}\n","import {\n Injectable,\n isDevMode,\n type EnvironmentProviders,\n type Provider,\n makeEnvironmentProviders,\n} from '@angular/core';\nimport { DateAdapter, DATE_ADAPTER, type TwDateNameStyle } from './date-adapter';\n\n/** Display-format descriptor used by `NativeDateAdapter.format()`. */\nexport interface TwNativeDateFormat {\n /** Any option bag accepted by `Intl.DateTimeFormat`. */\n readonly dateTimeFormat?: Intl.DateTimeFormatOptions;\n}\n\nconst MS_PER_MINUTE = 60_000;\n\nconst warnedLocales = new Set<string>();\nfunction warnUnresolvableLocaleOnce(locale: string): void {\n if (!isDevMode() || warnedLocales.has(locale)) return;\n warnedLocales.add(locale);\n \n console.warn(\n `[ngx-tw/calendar] Locale \"${locale}\" is unknown to Intl.Locale.getWeekInfo(); falling back to Monday (1) as the first day of week (§19.2).`,\n );\n}\n\n/** `Intl`-driven `Date` adapter. Zero runtime dependencies. */\n@Injectable()\nexport class NativeDateAdapter extends DateAdapter<Date> {\n /**\n * Locale is resolved lazily on first read so the constructor stays\n * SSR-safe (no `navigator` access at class-construction time — §31.1).\n */\n private _locale: string | null = null;\n\n private get locale(): string {\n if (this._locale !== null) return this._locale;\n this._locale =\n typeof navigator !== 'undefined' && typeof navigator.language === 'string'\n ? navigator.language\n : 'en-US';\n return this._locale;\n }\n\n today(): Date {\n const now = new Date();\n return new Date(now.getFullYear(), now.getMonth(), now.getDate());\n }\n\n /**\n * Constructs a `Date`. **`month` is 1-based** — `create(2026, 1, 1)` yields\n * January 1, 2026.\n */\n create(year: number, month: number, day: number): Date {\n const d = new Date(year, month - 1, day);\n // `new Date(year, ...)` on two-digit years maps to 19xx by convention;\n // re-anchor explicitly so consumers can construct years < 100.\n if (year >= 0 && year < 100) {\n d.setFullYear(year);\n }\n return d;\n }\n\n clone(date: Date): Date {\n return new Date(date.getTime());\n }\n\n setLocale(locale: string): void {\n this._locale = locale;\n }\n\n getLocale(): string {\n return this.locale;\n }\n\n getYear(date: Date): number {\n return date.getFullYear();\n }\n\n getMonth(date: Date): number {\n return date.getMonth();\n }\n\n getDate(date: Date): number {\n return date.getDate();\n }\n\n getDayOfWeek(date: Date): number {\n return date.getDay();\n }\n\n getNumDaysInMonth(date: Date): number {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n }\n\n getHours(date: Date): number {\n return date.getHours();\n }\n\n getMinutes(date: Date): number {\n return date.getMinutes();\n }\n\n getSeconds(date: Date): number {\n return date.getSeconds();\n }\n\n withTime(date: Date, hours: number, minutes: number, seconds: number): Date {\n const d = new Date(date.getTime());\n d.setHours(hours, minutes, seconds, 0);\n return d;\n }\n\n getFirstDayOfWeek(): number {\n // §19.2: derive from `Intl.Locale.getWeekInfo()` when available; fallback to\n // Monday (1) and emit a single dev-mode warning when the locale is unknown\n // to `Intl.Locale`. ICU/CLDR returns 1=Monday … 7=Sunday — we normalize to\n // the project's 0=Sunday … 6=Saturday convention.\n if (typeof Intl !== 'undefined' && typeof Intl.Locale === 'function') {\n try {\n const l = new Intl.Locale(this.locale) as Intl.Locale & {\n getWeekInfo?: () => { firstDay: number };\n weekInfo?: { firstDay: number };\n };\n const info = (l.getWeekInfo?.() ?? l.weekInfo) as { firstDay: number } | undefined;\n if (info && typeof info.firstDay === 'number') {\n return info.firstDay === 7 ? 0 : info.firstDay;\n }\n } catch {\n warnUnresolvableLocaleOnce(this.locale);\n return 1;\n }\n }\n warnUnresolvableLocaleOnce(this.locale);\n return 1;\n }\n\n getMonthNames(style: TwDateNameStyle): string[] {\n const fmt = new Intl.DateTimeFormat(this.locale, { month: style, timeZone: 'UTC' });\n return Array.from({ length: 12 }, (_, i) => fmt.format(new Date(Date.UTC(2017, i, 1))));\n }\n\n getDayOfWeekNames(style: TwDateNameStyle): string[] {\n const fmt = new Intl.DateTimeFormat(this.locale, { weekday: style, timeZone: 'UTC' });\n return Array.from({ length: 7 }, (_, i) => fmt.format(new Date(Date.UTC(2017, 0, i + 1))));\n }\n\n override getDateNames(style: TwDateNameStyle = 'short'): string[] {\n const fmt = new Intl.DateTimeFormat(this.locale, { day: style === 'narrow' ? 'numeric' : 'numeric', timeZone: 'UTC' });\n return Array.from({ length: 31 }, (_, i) => fmt.format(new Date(Date.UTC(2017, 0, i + 1))));\n }\n\n getYearName(date: Date): string {\n return new Intl.DateTimeFormat(this.locale, { year: 'numeric', timeZone: 'UTC' }).format(\n new Date(Date.UTC(date.getFullYear(), 0, 1)),\n );\n }\n\n format(date: Date, displayFormat: unknown): string {\n if (!this.isValid(date)) return '';\n const fmt = (displayFormat as TwNativeDateFormat | undefined)?.dateTimeFormat ?? {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n };\n return new Intl.DateTimeFormat(this.locale, fmt).format(date);\n }\n\n addYears(date: Date, years: number): Date {\n return this.addMonths(date, years * 12);\n }\n\n addMonths(date: Date, months: number): Date {\n const d = new Date(date.getFullYear(), date.getMonth() + months, 1);\n const targetDay = Math.min(\n date.getDate(),\n new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate(),\n );\n return new Date(d.getFullYear(), d.getMonth(), targetDay);\n }\n\n addDays(date: Date, days: number): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);\n }\n\n override addMinutes(date: Date, minutes: number): Date {\n return new Date(date.getTime() + minutes * MS_PER_MINUTE);\n }\n\n override addHours(date: Date, hours: number): Date {\n return new Date(date.getTime() + hours * 60 * MS_PER_MINUTE);\n }\n\n compare(first: Date, second: Date): number {\n return (\n this.getYear(first) - this.getYear(second) ||\n this.getMonth(first) - this.getMonth(second) ||\n this.getDate(first) - this.getDate(second)\n );\n }\n\n sameDate(first: Date | null | undefined, second: Date | null | undefined): boolean {\n if (first && second) {\n const f = this.isValid(first);\n const s = this.isValid(second);\n if (f && s) return this.compare(first, second) === 0;\n return f === s;\n }\n return first === second;\n }\n\n /**\n * Start-of-day normalization. Rebuilds the date at `00:00:00.000` local time.\n * On DST spring-forward days where midnight is valid, this is a no-op beyond\n * zeroing h/m/s/ms. On DST fall-back days the repeated-01:00 hour does not\n * affect `00:00`, so this is also safe.\n *\n * The edge case of an entire DST-skipped midnight (rare — exists in some\n * historical zones) is resolved by `new Date(year, month, day)` selecting the\n * next valid instant forward.\n */\n startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n }\n\n isValid(date: Date): boolean {\n return date instanceof Date && !isNaN(date.getTime());\n }\n\n invalid(): Date {\n return new Date(NaN);\n }\n\n parse(value: unknown): Date | null {\n if (typeof value === 'number') return new Date(value);\n if (value instanceof Date) return this.clone(value);\n if (typeof value === 'string') {\n if (!value.trim()) return null;\n const parsed = new Date(value);\n return this.isValid(parsed) ? parsed : null;\n }\n return null;\n }\n\n deserialize(value: unknown): Date | null {\n if (value == null || value === '') return null;\n if (value instanceof Date) return this.isValid(value) ? this.clone(value) : this.invalid();\n const parsed = this.parse(value);\n if (parsed && this.isValid(parsed)) return parsed;\n return this.invalid();\n }\n\n toIso(date: Date): string {\n return [\n String(date.getFullYear()).padStart(4, '0'),\n String(date.getMonth() + 1).padStart(2, '0'),\n String(date.getDate()).padStart(2, '0'),\n ].join('-');\n }\n}\n\n/** Provides the default `Date`-based adapter. */\nexport function provideNativeDateAdapter(): EnvironmentProviders {\n return makeEnvironmentProviders([\n NativeDateAdapter,\n { provide: DATE_ADAPTER, useExisting: NativeDateAdapter },\n ]);\n}\n\n/** Provides a custom `DateAdapter` implementation. */\nexport function provideTwCalendar<D>(config: {\n adapter: new (...args: never[]) => DateAdapter<D>;\n extraProviders?: Provider[];\n}): EnvironmentProviders {\n return makeEnvironmentProviders([\n config.adapter as unknown as Provider,\n { provide: DATE_ADAPTER, useExisting: config.adapter },\n ...(config.extraProviders ?? []),\n ]);\n}\n","import type { DateRange } from './calendar.types';\n\n/**\n * Convenience class that satisfies the `DateRange<D>` interface and carries\n * `complete` / `empty` getters. Interchangeable with a plain\n * `{ start, end }` object anywhere a `DateRange<D>` is expected.\n */\nexport class TwDateRange<D> implements DateRange<D> {\n constructor(\n public readonly start: D | null,\n public readonly end: D | null,\n ) {}\n\n /** True when both endpoints are set. */\n get complete(): boolean {\n return this.start !== null && this.end !== null;\n }\n\n /** True when neither endpoint is set. */\n get empty(): boolean {\n return this.start === null && this.end === null;\n }\n}\n\n/** Shape accepted when writing a range value — either a `TwDateRange` or a plain object. */\nexport type TwDateRangeInput<D> =\n | TwDateRange<D>\n | { readonly start: D | null; readonly end: D | null }\n | null;\n\n/** @internal Normalises any range-shaped value into a `TwDateRange` instance. */\nexport function toTwDateRange<D>(value: TwDateRangeInput<D>): TwDateRange<D> | null {\n if (value === null || value === undefined) return null;\n if (value instanceof TwDateRange) return value;\n return new TwDateRange<D>(value.start ?? null, value.end ?? null);\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-calendar.mjs","sources":["../../../projects/ngx-tw/calendar/calendar-header.ts","../../../projects/ngx-tw/calendar/calendar-intl.ts","../../../projects/ngx-tw/calendar/calendar.types.ts","../../../projects/ngx-tw/calendar/calendar-cva-utils.ts","../../../projects/ngx-tw/calendar/calendar.utils.ts","../../../projects/ngx-tw/calendar/calendar-validators.ts","../../../projects/ngx-tw/calendar/date-adapter.ts","../../../projects/ngx-tw/calendar/calendar-cell.ts","../../../projects/ngx-tw/calendar/calendar-view-base.ts","../../../projects/ngx-tw/calendar/month-view.ts","../../../projects/ngx-tw/calendar/year-view.ts","../../../projects/ngx-tw/calendar/multi-year-view.ts","../../../projects/ngx-tw/calendar/selection/selection-strategy.ts","../../../projects/ngx-tw/calendar/selection/single-selection-strategy.ts","../../../projects/ngx-tw/calendar/selection/range-selection-strategy.ts","../../../projects/ngx-tw/calendar/selection/multi-selection-strategy.ts","../../../projects/ngx-tw/calendar/selection/week-selection-strategy.ts","../../../projects/ngx-tw/calendar/selection/providers.ts","../../../projects/ngx-tw/calendar/calendar.ts","../../../projects/ngx-tw/calendar/calendar-form-directives.ts","../../../projects/ngx-tw/calendar/calendar-presets.ts","../../../projects/ngx-tw/calendar/calendar-intl-de.ts","../../../projects/ngx-tw/calendar/calendar-intl-fr.ts","../../../projects/ngx-tw/calendar/calendar-intl-es.ts","../../../projects/ngx-tw/calendar/calendar-intl-pt.ts","../../../projects/ngx-tw/calendar/calendar-intl-ja.ts","../../../projects/ngx-tw/calendar/serialize-calendar-value.ts","../../../projects/ngx-tw/calendar/native-date-adapter.ts","../../../projects/ngx-tw/calendar/date-range.ts","../../../projects/ngx-tw/calendar/cdevhub-ngx-tw-calendar.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n type InputSignal,\n type OutputEmitterRef,\n type Signal,\n} from '@angular/core';\nimport { tv } from 'tailwind-variants';\n\nconst headerVariants = tv(\n {\n slots: {\n root: 'flex items-center justify-between px-2 py-1 mb-2',\n navButton:\n 'inline-flex items-center justify-center select-none h-9 w-9 rounded-full text-fg hover:bg-surface-muted transition-colors duration-normal motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:cursor-not-allowed disabled:text-fg-subtle disabled:hover:bg-transparent',\n periodButton:\n 'inline-flex items-center justify-center select-none px-3 py-1.5 text-sm font-semibold rounded-md text-fg hover:bg-surface-muted transition-colors duration-normal motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:cursor-not-allowed disabled:text-fg-subtle disabled:hover:bg-transparent',\n },\n variants: {},\n defaultVariants: {},\n },\n { twMerge: true },\n);\n\n/**\n * Calendar navigation header — previous / period / next button row.\n * The period label button toggles between views (month → year → multi-year).\n */\n@Component({\n selector: 'tw-calendar-header',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `\n <div [class]=\"classes().root\">\n <button\n type=\"button\"\n [class]=\"classes().navButton\"\n [disabled]=\"prevDisabled()\"\n [attr.aria-label]=\"prevAriaLabel()\"\n (click)=\"prevClicked.emit()\"\n >\n <svg\n class=\"size-5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M15 18l-6-6 6-6\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <button\n type=\"button\"\n [class]=\"classes().periodButton\"\n [attr.aria-label]=\"periodAriaLabel()\"\n [disabled]=\"!canSwitchView()\"\n (click)=\"onPeriodClick()\"\n >\n {{ periodLabel() }}\n </button>\n\n <button\n type=\"button\"\n [class]=\"classes().navButton\"\n [disabled]=\"nextDisabled()\"\n [attr.aria-label]=\"nextAriaLabel()\"\n (click)=\"nextClicked.emit()\"\n >\n <svg\n class=\"size-5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M9 18l6-6-6-6\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n `,\n})\nexport class CalendarHeaderComponent {\n /** Display text for the period button (e.g. \"January 2026\"). */\n readonly periodLabel: InputSignal<string> = input.required<string>();\n\n /** Accessible label for the period button. */\n readonly periodAriaLabel: InputSignal<string> = input.required<string>();\n\n /** Accessible label for the previous button. */\n readonly prevAriaLabel: InputSignal<string> = input.required<string>();\n\n /** Accessible label for the next button. */\n readonly nextAriaLabel: InputSignal<string> = input.required<string>();\n\n /** Disables the previous button — set by the orchestrator when `minDate` blocks backward navigation. Defaults to `false`. */\n readonly prevDisabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Disables the next button — set by the orchestrator when `maxDate` blocks forward navigation. Defaults to `false`. */\n readonly nextDisabled: InputSignal<boolean> = input<boolean>(false);\n\n /** When false, the period button is disabled (e.g. when already at the top view). Defaults to `true` — the period button is the header's primary drill-up affordance; the special case is the top view, where there is nowhere to drill up to. */\n readonly canSwitchView: InputSignal<boolean> = input<boolean>(true);\n\n /** Fires on previous button click. */\n readonly prevClicked: OutputEmitterRef<void> = output<void>();\n\n /** Fires on next button click. */\n readonly nextClicked: OutputEmitterRef<void> = output<void>();\n\n /** Fires on period button click (switch to the next higher view). */\n readonly periodClicked: OutputEmitterRef<void> = output<void>();\n\n protected readonly classes: Signal<{\n root: string;\n navButton: string;\n periodButton: string;\n }> = computed(() => {\n const v = headerVariants();\n return { root: v.root(), navButton: v.navButton(), periodButton: v.periodButton() };\n });\n\n protected onPeriodClick(): void {\n if (this.canSwitchView()) this.periodClicked.emit();\n }\n}\n","import { Injectable, type Provider } from '@angular/core';\n\n/**\n * Context payload passed to `cellAccessibleName` so consumers can produce a\n * locale-appropriate accessible name for any cell in any view (§15.6, §19.4).\n */\nexport interface CalendarCellAccessibleNameContext {\n /** The date the cell represents. */\n readonly date: Date;\n /** Which view the cell lives in. */\n readonly mode: 'day' | 'month' | 'year';\n /** True when the cell is part of the committed selection. */\n readonly selected?: boolean;\n /** True when the cell is today. */\n readonly today?: boolean;\n /** True when the cell is non-interactive (constraint or filter). */\n readonly disabled?: boolean;\n /** Optional pre-formatted display string the consumer may incorporate. */\n readonly display?: string;\n}\n\n/**\n * Localized strings + ARIA announcements consumed by the calendar (§19.4).\n *\n * Override per-field via Angular DI — provide a custom instance, or pass a\n * `Partial<CalendarIntl>` into the calendar component's `intl` input. Unset\n * fields fall through to the English defaults shipped here.\n *\n * All members take primitives so consumers can write straight string\n * literals or template helpers without depending on internal types.\n */\n@Injectable()\nexport class CalendarIntl {\n /**\n * Plural rules used for the four plural-marked keys in §19.4: range length,\n * \"X dates selected\", \"Skipped {N} periods\", and the year-range button label.\n * Resolved lazily so SSR / non-`Intl` environments don't crash at construction.\n */\n private _plural: Intl.PluralRules | null = null;\n private getPlural(): Intl.PluralRules {\n if (this._plural !== null) return this._plural;\n this._plural =\n typeof Intl !== 'undefined' && typeof Intl.PluralRules === 'function'\n ? new Intl.PluralRules('en')\n : ({ select: (n: number) => (n === 1 ? 'one' : 'other') } as unknown as Intl.PluralRules);\n return this._plural;\n }\n\n // ---------------------------------------------------------------------------\n // Button labels (§19.4)\n // ---------------------------------------------------------------------------\n\n /** Aria label for the \"previous month\" navigation button (day view). */\n previousMonthLabel = 'Previous month';\n\n /** Aria label for the \"next month\" navigation button (day view). */\n nextMonthLabel = 'Next month';\n\n /** Aria label for the \"previous year\" navigation button (month view). */\n previousYearLabel = 'Previous year';\n\n /** Aria label for the \"next year\" navigation button (month view). */\n nextYearLabel = 'Next year';\n\n /** Aria label for the \"previous N years\" navigation button (year view). */\n previousYearsLabel(yearsPerPage: number): string {\n const cat = this.getPlural().select(yearsPerPage);\n return cat === 'one' ? `Previous ${yearsPerPage} year` : `Previous ${yearsPerPage} years`;\n }\n\n /** Aria label for the \"next N years\" navigation button (year view). */\n nextYearsLabel(yearsPerPage: number): string {\n const cat = this.getPlural().select(yearsPerPage);\n return cat === 'one' ? `Next ${yearsPerPage} year` : `Next ${yearsPerPage} years`;\n }\n\n /** Aria label for the \"today\" shortcut button (footer). */\n todayLabel = 'Today';\n\n /** Aria label for the \"clear\" button (footer). */\n clearLabel = 'Clear';\n\n /** Aria label for the \"apply\" button (footer). */\n applyLabel = 'Apply';\n\n /** Aria label for the trigger/open-calendar button. */\n openCalendarLabel = 'Open calendar';\n\n /** Aria label for the \"choose date\" trigger. */\n chooseDateLabel = 'Choose date';\n\n // ---------------------------------------------------------------------------\n // View labels (§19.4)\n // ---------------------------------------------------------------------------\n\n /** Aria label applied to the calendar root element. */\n calendarLabel = 'Calendar';\n\n /** Aria label appended to the period button while in the day view. */\n monthViewLabel = 'month view';\n\n /** Aria label appended to the period button while in the month view. */\n yearViewLabel = 'year view';\n\n /** Aria label for the year (decade) view. */\n decadeViewLabel = 'decade view';\n\n /** Tooltip / aria text for the \"switch to month view\" affordance. */\n switchToMonthViewLabel(period: string): string {\n return `${period}, click to switch to month view`;\n }\n\n /** Tooltip / aria text for the \"switch to year view\" affordance. */\n switchToYearViewLabel(period: string): string {\n return `${period}, click to switch to year view`;\n }\n\n // ---------------------------------------------------------------------------\n // Cell accessible names (§15.6, §19.4)\n // ---------------------------------------------------------------------------\n\n /**\n * Returns the accessible name a screen reader announces for any cell.\n * Default implementation appends \"today\" / \"selected\" / \"disabled\" suffixes\n * to the supplied `display` string.\n */\n cellAccessibleName(ctx: CalendarCellAccessibleNameContext): string {\n const base = ctx.display ?? '';\n const tags: string[] = [];\n if (ctx.today) tags.push('today');\n if (ctx.selected) tags.push('selected');\n if (ctx.disabled) tags.push('disabled');\n return tags.length === 0 ? base : `${base}, ${tags.join(', ')}`;\n }\n\n // ---------------------------------------------------------------------------\n // ARIA announcements (§15.7, §19.4)\n // ---------------------------------------------------------------------------\n\n /** Live-region message after navigating the displayed period. */\n navigatedTo(direction: 'previous' | 'next', period: string): string {\n return `Navigated to ${direction} ${period}`;\n }\n\n /** Live-region message after a single-mode selection commits. */\n selectedAnnouncement(value: string): string {\n return `Selected ${value}`;\n }\n\n /** Live-region message after the start of a range is picked. */\n rangeStartAnnouncement(start: string): string {\n return `Start date selected: ${start}. Now select end date.`;\n }\n\n /** Live-region message after a range commits. Plural-marked on `lengthDays`. */\n rangeUpdateAnnouncement(start: string, end: string, lengthDays: number): string {\n const cat = this.getPlural().select(lengthDays);\n const noun = cat === 'one' ? 'day' : 'days';\n return `Range selected: ${start} to ${end}, ${lengthDays} ${noun}`;\n }\n\n /** Live-region message after a `mode: 'multiple'` selection commits. Plural-marked. */\n multipleSelectionAnnouncement(count: number): string {\n const cat = this.getPlural().select(count);\n const noun = cat === 'one' ? 'date' : 'dates';\n return `${count} ${noun} selected`;\n }\n\n /** Live-region message after the active view changes. */\n viewSwitched(view: 'day' | 'month' | 'year', period: string): string {\n const label =\n view === 'day' ? this.monthViewLabel.replace(/ view$/, '') : view === 'month' ? this.yearViewLabel.replace(/ view$/, '') : this.decadeViewLabel.replace(/ view$/, '');\n return `${label} view, ${period}`;\n }\n\n /** Live-region template used while a range pick is in progress. */\n inProgressTemplate(state: string): string {\n return `Selecting: ${state}, now select end date`;\n }\n\n /** Live-region message announcing how many empty periods auto-skip jumped over. Plural-marked. */\n skippedPeriods(count: number, destination: string): string {\n const cat = this.getPlural().select(count);\n const noun = cat === 'one' ? 'period' : 'periods';\n return `Skipped ${count} ${noun} to ${destination}`;\n }\n\n /** Live-region message announced when a click is rejected and the cell flashes (e.g. `'require-clear'` rejection, disabled-cross range commit). */\n selectionRejectedAnnouncement = 'Selection rejected';\n\n /**\n * When `true`, the calendar suppresses live-region announcements for the\n * affected user actions. Override in tests or low-noise environments.\n */\n skipAnnouncement = false;\n\n // ---------------------------------------------------------------------------\n // Error messages (§10.2, §19.4)\n // ---------------------------------------------------------------------------\n\n /** Message for the `calendarRequired` validation error. */\n requiredError = 'Please select a date';\n\n /** Message for the `calendarMinDate` validation error. */\n minDateError(date: string): string {\n return `Date must be on or after ${date}`;\n }\n\n /** Message for the `calendarMaxDate` validation error. */\n maxDateError(date: string): string {\n return `Date must be on or before ${date}`;\n }\n\n /** Message for the `calendarInvalidValue` validation error. */\n invalidValueError = 'Invalid date value';\n\n /** Message for the `calendarRangeTooShort` validation error. Plural-marked on `min`. */\n rangeTooShortError(min: number): string {\n const cat = this.getPlural().select(min);\n const noun = cat === 'one' ? 'day' : 'days';\n return `Range must be at least ${min} ${noun}`;\n }\n\n /** Message for the `calendarRangeTooLong` validation error. Plural-marked on `max`. */\n rangeTooLongError(max: number): string {\n const cat = this.getPlural().select(max);\n const noun = cat === 'one' ? 'day' : 'days';\n return `Range must be at most ${max} ${noun}`;\n }\n\n /** Message for the `calendarInvalidRange` validation error. */\n invalidRangeError = 'Invalid date range';\n\n /** Message for the `calendarDisabledDate` validation error. */\n dateFilterError = 'This date is not available';\n\n /** Message for the `calendarMaxSelections` validation error. */\n maxSelectionsError(limit: number): string {\n const cat = this.getPlural().select(limit);\n const noun = cat === 'one' ? 'date' : 'dates';\n return `You may select at most ${limit} ${noun}`;\n }\n\n // ---------------------------------------------------------------------------\n // Parse-error label (§10.2, §19.4)\n // ---------------------------------------------------------------------------\n\n /** Label announced when a typed date fails to parse. */\n parseErrorLabel = 'Invalid date format';\n\n // ---------------------------------------------------------------------------\n // Keyboard help (§16.4, §19.4)\n // ---------------------------------------------------------------------------\n\n /** Multi-line description of the keyboard contract for screen readers / help dialogs. */\n keyboardHelpText = [\n 'Use arrow keys to move between dates.',\n 'Press Enter or Space to select the focused date.',\n 'Use Page Up and Page Down to move between months.',\n 'Use Shift + Page Up and Shift + Page Down to move between years.',\n 'Use Home and End to jump to the start or end of the week.',\n 'Press Escape to close the calendar.',\n ].join(' ');\n}\n\n/**\n * Provides a custom `CalendarIntl` instance. Place at any injector level —\n * the calendar resolves the closest one and merges any per-instance `intl`\n * input on top of it (§19.4 per-field merge semantics).\n *\n * Keys explicitly set to `undefined` are dropped before merging. Root\n * `tsconfig.json` does not set `exactOptionalPropertyTypes`, so\n * `provideCalendarIntl({ monthViewLabel: bundle['calendar.monthView'] })`\n * type-checks even when the lookup misses — and a plain `Object.assign` would\n * then copy that `undefined` over a field `CalendarIntl` types as `string`.\n * Because this is a bootstrap-level provider, one missing key in an i18n\n * bundle broke *every* calendar in the app, and the failure surfaced far from\n * the call site: `viewSwitched()` calls `.replace()` on the label directly, so\n * the first drill-up threw `Cannot read properties of undefined (reading\n * 'replace')`. Filtering here makes a missing key fall back to the English\n * default instead.\n */\nexport function provideCalendarIntl(custom: Partial<CalendarIntl>): Provider {\n return {\n provide: CalendarIntl,\n useFactory: () => {\n const overrides = Object.fromEntries(\n Object.entries(custom ?? {}).filter(([, value]) => value !== undefined),\n );\n return Object.assign(new CalendarIntl(), overrides);\n },\n };\n}\n","/**\n * Calendar shared types. Aligned with `docs/requirements/calendar-component-requirements.md` v2.6\n * (§7.1, §7.4, §8, §10.2, §22.5, §33).\n */\n\n// -----------------------------------------------------------------------------\n// Value shape (§7.1, §7.4)\n// -----------------------------------------------------------------------------\n\n/** Selection mode exposed via the `mode` input. `'week'` is `[WONT] v1` — week-as-unit selection remains available via the DI-only `WeekSelectionStrategy`. */\nexport type CalendarMode = 'single' | 'multiple' | 'range';\n\n/** Value shape for `mode: 'single'`. */\nexport type CalendarSingleValue<D> = D | null;\n\n/** Value shape for `mode: 'multiple'`. */\nexport type CalendarMultipleValue<D> = D[];\n\n/** Value shape for `mode: 'range'`. Endpoints are independent — either can be `null`. */\nexport interface CalendarRangeValue<D> {\n readonly start: D | null;\n readonly end: D | null;\n}\n\n/** Mode-parameterized value. `mode: 'single' → D | null`, `'multiple' → D[]`, `'range' → { start; end }`. */\nexport type CalendarValue<M extends CalendarMode, D> = M extends 'single'\n ? CalendarSingleValue<D>\n : M extends 'multiple'\n ? CalendarMultipleValue<D>\n : M extends 'range'\n ? CalendarRangeValue<D>\n : never;\n\n/** Mode-agnostic empty value — `null` for single, `[]` for multiple, `{ start: null, end: null }` for range. */\nexport function emptyCalendarValue<M extends CalendarMode, D>(mode: M): CalendarValue<M, D> {\n if (mode === 'single') return null as CalendarValue<M, D>;\n if (mode === 'multiple') return [] as unknown as CalendarValue<M, D>;\n return { start: null, end: null } as unknown as CalendarValue<M, D>;\n}\n\n// -----------------------------------------------------------------------------\n// UI state (§7.4, §8.1)\n// -----------------------------------------------------------------------------\n\n/** Selection lifecycle. */\nexport type CalendarSelectionState = 'EMPTY' | 'SELECTING' | 'COMPLETE';\n\n/** Which grid the user is looking at. `'day'` = 7×6 day grid, `'month'` = 4×3 months in a year, `'year'` = a page of years. */\nexport type CalendarViewState = 'day' | 'month' | 'year';\n\n/** Overlay presentation lifecycle (Phase 10 wires the transitions). In inline mode this signal resolves to `null`. */\nexport type CalendarOverlayState = 'closed' | 'opening' | 'open' | 'closing';\n\n// -----------------------------------------------------------------------------\n// Behavior enums (§33.1)\n// -----------------------------------------------------------------------------\n\n/** How `mode: 'range'` handles the third click after a complete range. */\nexport type RangeClickBehavior = 'restart' | 'nearest-edge' | 'require-clear';\n\n/** Granularity at which `mode: 'range'` commits (day-of-month, month-of-year, year). */\nexport type RangeGranularity = 'day' | 'month' | 'year';\n\n/** What happens when the user tries to select past `maxSelections` in `mode: 'multiple'`. */\nexport type MaxSelectionBehavior = 'emit-limit-reached' | 'replace-oldest' | 'ignore';\n\n/** How a form reset restores the calendar's internal state. `'full'` also resets view / active-date; `'value-only'` leaves navigation in place. */\nexport type ResetBehavior = 'full' | 'value-only';\n\n/** Presentation on small viewports. `'auto'` = native overlay on ≥ 600 px, fullscreen otherwise. */\nexport type MobileMode = 'overlay' | 'fullscreen' | 'bottom-sheet' | 'auto';\n\n// -----------------------------------------------------------------------------\n// Validation (§10.2)\n// -----------------------------------------------------------------------------\n\n/** Union of validation error keys emitted by the built-in validator. Stable across versions. */\nexport type CalendarErrorCode =\n | 'calendarRequired'\n | 'calendarMinDate'\n | 'calendarMaxDate'\n | 'calendarDisabledDate'\n | 'calendarRangeTooShort'\n | 'calendarRangeTooLong'\n | 'calendarMaxSelections'\n | 'calendarInvalidRange'\n | 'calendarParseError'\n | 'calendarInvalidValue';\n\n/** Shape returned by the built-in validator. Each code carries the context payload described in §10.2. */\nexport type CalendarValidationErrors = Partial<{\n calendarRequired: true;\n calendarMinDate: { min: unknown; actual: unknown };\n calendarMaxDate: { max: unknown; actual: unknown };\n calendarDisabledDate: { actual: unknown };\n calendarRangeTooShort: { length: number; min: number };\n calendarRangeTooLong: { length: number; max: number };\n calendarMaxSelections: { limit: number; actual: number };\n calendarInvalidRange: { start: unknown; end: unknown };\n calendarParseError: { raw: string };\n calendarInvalidValue: {\n expected: 'single' | 'multiple' | 'range';\n actual: unknown;\n reason: 'shape' | 'transformer';\n };\n}>;\n\n// -----------------------------------------------------------------------------\n// Output payloads (§33.2)\n// -----------------------------------------------------------------------------\n\n/** Payload of `selectionComplete`. `reason` flags the commit path. */\nexport interface SelectionCompleteEvent<M extends CalendarMode, D> {\n readonly value: CalendarValue<M, D>;\n readonly reason: 'commit' | 'auto-swap' | 'nearest-edge' | 'preset';\n}\n\n/** Payload of `selectionCleared`. `reason` disambiguates user action from programmatic / mode-change / reset / disabled. */\nexport interface SelectionClearedEvent {\n readonly reason: 'user' | 'programmatic' | 'mode-change' | 'reset' | 'disabled';\n}\n\n/** Payload of `rangePreview`. `invalidPreview` is set when the hover crosses a disabled date and `disableRangesCrossingDisabledDates` is true, or the range length violates `min`/`maxRangeLength` (Phase 4 / 6 set this). */\nexport interface RangePreviewEvent<D> {\n readonly tentativeRange: { readonly start: D; readonly end: D };\n readonly invalidPreview: boolean;\n}\n\n/** Payload of `viewChange`. Distinguishes drill-down (day→month→year) from drill-up and from programmatic changes. */\nexport interface ViewChangeEvent {\n readonly from: CalendarViewState;\n readonly to: CalendarViewState;\n readonly reason: 'user' | 'programmatic' | 'drill-down' | 'drill-up';\n}\n\n/** Payload of `modeChange`. */\nexport interface ModeChangeEvent {\n readonly from: CalendarMode;\n readonly to: CalendarMode;\n}\n\n// -----------------------------------------------------------------------------\n// Legacy types kept stable for Phase 1 (migrated in later phases)\n// -----------------------------------------------------------------------------\n\n/**\n * A date range with optional endpoints.\n * Kept as a structural type for backward-compat with the existing view implementation;\n * `CalendarRangeValue<D>` is the spec-canonical alias.\n */\nexport interface DateRange<D> {\n readonly start: D | null;\n readonly end: D | null;\n}\n\n/** Factory for a plain `DateRange<D>`. */\nexport function createDateRange<D>(start: D | null, end: D | null): DateRange<D> {\n return { start, end };\n}\n\n/**\n * Visual state of a single cell in any view.\n * Phase 4 replaces this with the `data-state-*` attribute surface (§34.5).\n */\nexport type CalendarCellState =\n | 'default'\n | 'today'\n | 'selected'\n | 'range-start'\n | 'range-middle'\n | 'range-end'\n | 'disabled'\n | 'preview-start'\n | 'preview-middle'\n | 'preview-end';\n\n/**\n * Data describing one renderable cell.\n * Phase 13 replaces this with `DayCellContext<D, T>` (§24.1) — kept in place through\n * Phases 1–12 so the existing month/year/years views compile without a wholesale view rewrite.\n */\nexport interface CalendarCell<D> {\n /** The date value this cell represents. */\n value: D;\n /** Display text inside the cell (day number, short month name, year). */\n displayValue: string;\n /** Accessible label announced to screen readers. */\n ariaLabel: string;\n /** Whether the cell is interactive. Disabled cells still render. */\n enabled: boolean;\n /** Consumer-provided CSS classes (via `dateClass`). */\n cssClasses: string;\n /** True when this cell is today's date. */\n isToday: boolean;\n /** True when this cell is the committed selection (or part of a range). */\n isSelected: boolean;\n /** True when this cell starts a committed range. */\n isRangeStart: boolean;\n /** True when this cell is strictly inside a committed range. */\n isRangeMiddle: boolean;\n /** True when this cell ends a committed range. */\n isRangeEnd: boolean;\n /** True when this cell starts the hover-preview range. */\n isPreviewStart: boolean;\n /** True when this cell is inside the hover-preview range. */\n isPreviewMiddle: boolean;\n /** True when this cell ends the hover-preview range. */\n isPreviewEnd: boolean;\n /** True when this cell falls outside the currently displayed month (day view only). */\n isOutOfMonth: boolean;\n /** True when this cell is a weekend day (Sat/Sun by default; locale-aware override planned). */\n isWeekend: boolean;\n /** True when this cell is part of a tentative range that violates a constraint (e.g., crosses a disabled date or exceeds `maxRangeLength`). */\n isInvalidPreview: boolean;\n /** True when the cell briefly flashes to indicate a rejected click (e.g., disabled commit, `rangeClickBehavior: 'require-clear'`). Auto-cleared by the orchestrator. */\n isInvalidFlash: boolean;\n /** Numeric comparison key used for focus tracking. */\n compareValue: number;\n}\n\n/** Configuration accepted by `createCalendarCell`. */\nexport interface CalendarCellConfig<D> {\n value: D;\n displayValue: string;\n ariaLabel: string;\n enabled?: boolean;\n cssClasses?: string;\n compareValue: number;\n}\n\n/** Factory for a `CalendarCell` with boolean state fields zeroed out. */\nexport function createCalendarCell<D>(config: CalendarCellConfig<D>): CalendarCell<D> {\n return {\n value: config.value,\n displayValue: config.displayValue,\n ariaLabel: config.ariaLabel,\n enabled: config.enabled ?? true,\n cssClasses: config.cssClasses ?? '',\n compareValue: config.compareValue,\n isToday: false,\n isSelected: false,\n isRangeStart: false,\n isRangeMiddle: false,\n isRangeEnd: false,\n isPreviewStart: false,\n isPreviewMiddle: false,\n isPreviewEnd: false,\n isOutOfMonth: false,\n isWeekend: false,\n isInvalidPreview: false,\n isInvalidFlash: false,\n };\n}\n\n/** Style for month and weekday names. */\nexport type NameStyle = 'long' | 'short' | 'narrow';\n\n/** Days in a week. */\nexport const DAYS_PER_WEEK = 7;\n/** Rows in a month grid. */\nexport const WEEKS_PER_MONTH = 6;\n/** Default years shown per page in the year view. Phase 7 replaces this constant with the `yearsPerPage` input (default 20 per §33.1). */\nexport const YEARS_PER_PAGE = 24;\n/** Years per row in the year view. */\nexport const YEARS_PER_ROW = 4;\n/** Months per row in the month (of year) view. */\nexport const MONTHS_PER_ROW = 4;\n\n/** Predicate for per-date disabling — return `false` to disable. */\nexport type DateFilterFn<D> = (date: D) => boolean;\n\n/**\n * Source for `disabledDates` (§10.1) — accepts either an explicit array of disabled dates\n * (compared via `adapter.sameDate`) or a predicate returning `true` for disabled dates.\n *\n * Note: this is the inverse of `dateFilter` (which returns `true` for ENABLED dates).\n * Both inputs are honored — a date is disabled if either source flags it.\n */\nexport type DisabledDates<D> = readonly D[] | ((date: D) => boolean);\n\n/**\n * Aggregated constraint inputs (§10.1). Doubles as the shorthand object accepted by\n * `CalendarComponent`'s `constraints` input — every field is optional so consumers can\n * supply only what they need (e.g. `{ minDate, maxDate }` or `{ dateFilter }`). The\n * orchestrator's resolver normalizes missing fields to neutral values (`null` /\n * empty array) before evaluating cell state.\n *\n * Resolution rule on the `constraints` input: the individual `minDate` / `maxDate` /\n * `disabledDates` / `disabledDaysOfWeek` / `dateFilter` inputs win when both are set\n * non-null. This lets a consumer pass `[constraints]=\"defaults\"` for a base set and\n * still override one field via the dedicated input.\n */\nexport interface CalendarConstraints<D> {\n readonly minDate?: D | null;\n readonly maxDate?: D | null;\n readonly disabledDates?: DisabledDates<D> | null;\n readonly disabledDaysOfWeek?: readonly number[] | null;\n readonly dateFilter?: DateFilterFn<D> | null;\n}\n\n/** Function producing extra per-cell CSS classes. */\nexport type DateClassFn<D> = (date: D, view: CalendarViewState) => string;\n","/** Pure helpers for CalendarComponent's ControlValueAccessor implementation. Extracted to keep `calendar.ts` focused on the class wiring; behavior is unchanged. */\n\nimport type { CalendarMode, CalendarSelectionState, CalendarValue } from './calendar.types';\n\n/**\n * `true` when the incoming value's shape matches the shape required by `mode`.\n * `null` / `undefined` is handled upstream by callers and is NOT considered here.\n *\n * - `single`: anything that is not an array and not a `{ start, end }` object.\n * - `multiple`: any array.\n * - `range`: a non-array object with both `start` and `end` keys.\n */\nexport function matchesModeShape(mode: CalendarMode, value: unknown): boolean {\n if (mode === 'single') {\n if (Array.isArray(value)) return false;\n if (typeof value === 'object' && value !== null) {\n const r = value as Record<string, unknown>;\n if ('start' in r && 'end' in r) return false;\n }\n return true;\n }\n if (mode === 'multiple') {\n return Array.isArray(value);\n }\n // range\n if (typeof value !== 'object' || value === null) return false;\n if (Array.isArray(value)) return false;\n const range = value as Record<string, unknown>;\n return 'start' in range && 'end' in range;\n}\n\n/**\n * `true` when the incoming value is a partial range (`{ start: D, end: null }`).\n * Per §7.2, only EMPTY or COMPLETE shapes are valid form values for `mode: 'range'`,\n * so partial ranges arriving via `writeValue` are rejected.\n *\n * Caller must already have confirmed `mode === 'range'` and `matchesModeShape` passed.\n */\nexport function isPartialRangeValue(value: unknown): boolean {\n if (typeof value !== 'object' || value === null) return false;\n const r = value as { start: unknown; end: unknown };\n return r.start != null && r.end == null;\n}\n\n/** `true` when `value` is the mode-agnostic empty value (null, `[]`, or `{ start: null, end: null }`). */\nexport function isEmptyCalendarValue(value: unknown): boolean {\n if (value == null) return true;\n if (Array.isArray(value)) return value.length === 0;\n if (typeof value === 'object' && 'start' in (value as object) && 'end' in (value as object)) {\n const r = value as { start: unknown; end: unknown };\n return r.start == null && r.end == null;\n }\n return false;\n}\n\n/** Derives selection state from a value shape. Used by `writeValue` to reconcile post-write state. */\nexport function deriveSelectionStateFromValue<M extends CalendarMode, D>(\n value: CalendarValue<M, D>,\n): CalendarSelectionState {\n return isEmptyCalendarValue(value) ? 'EMPTY' : 'COMPLETE';\n}\n","import type { DateAdapter } from './date-adapter';\nimport type {\n CalendarConstraints,\n DateFilterFn,\n DisabledDates,\n NameStyle,\n} from './calendar.types';\n\n/** Arranges a flat array of items into a 2D grid with `columns` items per row. */\nexport function createGrid<T>(items: readonly T[], columns: number): T[][] {\n const grid: T[][] = [];\n for (let i = 0; i < items.length; i += columns) {\n grid.push(items.slice(i, i + columns));\n }\n return grid;\n}\n\n/** Returns the new flat index after an arrow-key navigation step, or `null` on out of bounds. */\nexport function navigateGrid(\n currentIndex: number,\n direction: 'left' | 'right' | 'up' | 'down',\n totalItems: number,\n columns: number,\n): number | null {\n let next: number;\n switch (direction) {\n case 'left':\n next = currentIndex - 1;\n break;\n case 'right':\n next = currentIndex + 1;\n break;\n case 'up':\n next = currentIndex - columns;\n break;\n case 'down':\n next = currentIndex + columns;\n break;\n }\n if (next < 0 || next >= totalItems) return null;\n return next;\n}\n\n/** Label pair for a weekday header cell. */\nexport interface WeekdayHeader {\n readonly label: string;\n readonly narrow: string;\n}\n\n/** Builds seven weekday headers rotated to start at `firstDayOfWeek` (or adapter default). */\nexport function getWeekdayHeaders<D>(\n adapter: DateAdapter<D>,\n style: NameStyle = 'long',\n firstDayOfWeek?: number,\n): WeekdayHeader[] {\n const start = firstDayOfWeek ?? adapter.getFirstDayOfWeek();\n const longNames = adapter.getDayOfWeekNames(style);\n const narrowNames = adapter.getDayOfWeekNames('narrow');\n const out: WeekdayHeader[] = [];\n for (let i = 0; i < 7; i++) {\n const idx = (start + i) % 7;\n out.push({ label: longNames[idx] ?? '', narrow: narrowNames[idx] ?? '' });\n }\n return out;\n}\n\n/**\n * True when `date` falls outside `[minDate, maxDate]` or fails the filter.\n *\n * Phase 4 superset: also OR-checks `disabledDates` (array OR predicate) and\n * `disabledDaysOfWeek`. Legacy callers passing only the first four arguments\n * keep working — the new sources default to neutral values.\n */\nexport function isDateDisabled<D>(\n date: D,\n minDate: D | null,\n maxDate: D | null,\n dateFilter: DateFilterFn<D> | null,\n adapter: DateAdapter<D>,\n disabledDates: DisabledDates<D> | null = null,\n disabledDaysOfWeek: readonly number[] = [],\n): boolean {\n if (minDate && adapter.compare(date, minDate) < 0) return true;\n if (maxDate && adapter.compare(date, maxDate) > 0) return true;\n if (dateFilter && !dateFilter(date)) return true;\n if (disabledDaysOfWeek.length > 0) {\n if (disabledDaysOfWeek.includes(adapter.getDayOfWeek(date))) return true;\n }\n if (disabledDates) {\n if (typeof disabledDates === 'function') {\n if (disabledDates(date)) return true;\n } else {\n for (const d of disabledDates) {\n if (adapter.sameDate(date, d)) return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Phase 4 single-call constraint resolver — `true` when ANY source disables `date`.\n * Equivalent to `isDateDisabled(date, c.minDate, c.maxDate, c.dateFilter, adapter, c.disabledDates, c.disabledDaysOfWeek)`\n * but accepts the spec-shaped `CalendarConstraints<D>` aggregate.\n */\nexport function resolveDateDisabled<D>(\n date: D,\n constraints: CalendarConstraints<D>,\n adapter: DateAdapter<D>,\n): boolean {\n return isDateDisabled(\n date,\n constraints.minDate ?? null,\n constraints.maxDate ?? null,\n constraints.dateFilter ?? null,\n adapter,\n constraints.disabledDates ?? null,\n constraints.disabledDaysOfWeek ?? [],\n );\n}\n\n/**\n * True when `date` is a weekend day (Saturday or Sunday by default — `adapter.getDayOfWeek`\n * returns `0` for Sunday and `6` for Saturday in the Gregorian contract). The optional\n * `weekendDays` parameter lets a consumer override per locale (e.g. `[5, 6]` for ar-SA).\n */\nexport function isWeekend<D>(\n date: D,\n adapter: DateAdapter<D>,\n weekendDays: readonly number[] = [0, 6],\n): boolean {\n return weekendDays.includes(adapter.getDayOfWeek(date));\n}\n\n/**\n * Inclusive day-count between `start` and `end` — used for `minRangeLength` /\n * `maxRangeLength` validation and the `rangeUpdateAnnouncement` length argument.\n * Assumes `start <= end` (call-sites normalize first).\n */\nexport function rangeLengthDays<D>(start: D, end: D, adapter: DateAdapter<D>): number {\n let n = 1;\n let cursor = start;\n // Walk day-by-day to keep the math adapter-agnostic and DST-safe.\n // For ranges over a few months this is still microseconds.\n while (adapter.compare(cursor, end) < 0) {\n cursor = adapter.addDays(cursor, 1);\n n++;\n }\n return n;\n}\n\n/**\n * `true` when ANY date strictly between `start` and `end` (exclusive of the\n * endpoints when `includeEndpoints` is `false`) is disabled by `constraints`.\n * Used by `disableRangesCrossingDisabledDates` and the `invalidPreview` flag.\n */\nexport function rangeCrossesDisabled<D>(\n start: D,\n end: D,\n constraints: CalendarConstraints<D>,\n adapter: DateAdapter<D>,\n includeEndpoints = true,\n): boolean {\n let cursor = includeEndpoints ? start : adapter.addDays(start, 1);\n const limit = includeEndpoints ? end : adapter.addDays(end, -1);\n while (adapter.compare(cursor, limit) <= 0) {\n if (resolveDateDisabled(cursor, constraints, adapter)) return true;\n cursor = adapter.addDays(cursor, 1);\n }\n return false;\n}\n\n/** True when the whole month falls outside `[minDate, maxDate]`. `month` is 0-based (matches `adapter.getMonth`). */\nexport function isMonthDisabled<D>(\n year: number,\n month: number,\n minDate: D | null,\n maxDate: D | null,\n adapter: DateAdapter<D>,\n): boolean {\n const firstOfMonth = adapter.create(year, month + 1, 1);\n const lastOfMonth = adapter.create(year, month + 1, adapter.getNumDaysInMonth(firstOfMonth));\n if (minDate && adapter.compare(lastOfMonth, minDate) < 0) return true;\n if (maxDate && adapter.compare(firstOfMonth, maxDate) > 0) return true;\n return false;\n}\n\n/** True when the whole year falls outside `[minDate, maxDate]`. */\nexport function isYearDisabled<D>(\n year: number,\n minDate: D | null,\n maxDate: D | null,\n adapter: DateAdapter<D>,\n): boolean {\n const firstOfYear = adapter.create(year, 1, 1);\n const lastOfYear = adapter.create(year, 12, 31);\n if (minDate && adapter.compare(lastOfYear, minDate) < 0) return true;\n if (maxDate && adapter.compare(firstOfYear, maxDate) > 0) return true;\n return false;\n}\n\n/** Aligns `activeYear` to the start of its `yearsPerPage`-block. */\nexport function getMultiYearStartingYear(activeYear: number, yearsPerPage = 24): number {\n return Math.floor(activeYear / yearsPerPage) * yearsPerPage;\n}\n\n/** True when `date` sits inside `[start, end]` (inclusive). */\nexport function isDateInRange<D>(\n date: D,\n start: D | null,\n end: D | null,\n adapter: DateAdapter<D>,\n): boolean {\n if (!start || !end) return false;\n return adapter.compare(date, start) >= 0 && adapter.compare(date, end) <= 0;\n}\n\n/** Returns the first day of the month for `date`. */\nexport function getFirstDayOfMonth<D>(date: D, adapter: DateAdapter<D>): D {\n return adapter.create(adapter.getYear(date), adapter.getMonth(date) + 1, 1);\n}\n","import { type AbstractControl, type ValidatorFn, Validators } from '@angular/forms';\nimport type {\n CalendarConstraints,\n CalendarMode,\n CalendarValidationErrors,\n CalendarValue,\n} from './calendar.types';\nimport type { DateAdapter } from './date-adapter';\nimport { rangeCrossesDisabled, rangeLengthDays, resolveDateDisabled } from './calendar.utils';\n\n/**\n * Shape of the read-only context the calendar validator needs from the\n * hosting component. Kept as a structural type so tests and custom consumers\n * can synthesize one without subclassing `CalendarComponent`.\n */\nexport interface CalendarValidatorContext<M extends CalendarMode = CalendarMode, D = unknown> {\n /** Current mode — used to decide which shape counts as \"empty\". */\n readonly mode: M;\n /** The raw form value whose last write was rejected as wrong-shape (§7.2). `null` when no rejected write is outstanding. */\n readonly lastInvalidFormValue: unknown;\n /** Aggregated constraint inputs (§10.1). Optional — when omitted, only `calendarRequired` / `calendarInvalidValue` codes are produced. */\n readonly constraints?: CalendarConstraints<D>;\n /** Adapter used to evaluate constraint codes. Required when `constraints` is set. */\n readonly adapter?: DateAdapter<D>;\n /** Minimum range length, days. `mode: 'range'` only. */\n readonly minRangeLength?: number | null;\n /** Maximum range length, days. `mode: 'range'` only. */\n readonly maxRangeLength?: number | null;\n /** Maximum number of selections. `mode: 'multiple'` only. */\n readonly maxSelections?: number | null;\n}\n\n/** `true` when `value` matches the mode-specific empty state (§7.1, §6.4). */\nexport function isCalendarValueEmpty<M extends CalendarMode, D>(\n mode: M,\n value: CalendarValue<M, D> | null | undefined,\n): boolean {\n if (mode === 'single') return value == null;\n if (mode === 'multiple') return !Array.isArray(value) || value.length === 0;\n // range\n if (value == null) return true;\n const range = value as unknown as { start: unknown; end: unknown };\n return range.start == null && range.end == null;\n}\n\n/**\n * Built-in synchronous validator (§6.1, §10.2). Emits the full v1 error code set:\n *\n * Phase 3 codes:\n * - `calendarRequired` when the hosting control carries `Validators.required`\n * and the calendar value is mode-specific empty.\n * - `calendarInvalidValue` when the most recent `writeValue` was rejected as\n * wrong-shape (§7.2) — the raw value is held on the component's\n * `lastInvalidFormValue` until a valid write clears it.\n *\n * Phase 4 codes (active when `ctx.constraints` + `ctx.adapter` are supplied):\n * - `calendarMinDate` / `calendarMaxDate` — value (or any range endpoint /\n * array entry) falls outside `[minDate, maxDate]`.\n * - `calendarDisabledDate` — value matches `dateFilter` / `disabledDates` /\n * `disabledDaysOfWeek` (constraint resolver).\n * - `calendarRangeTooShort` / `calendarRangeTooLong` — `mode: 'range'` length\n * violates `minRangeLength` / `maxRangeLength`.\n * - `calendarMaxSelections` — `mode: 'multiple'` array exceeds `maxSelections`.\n * - `calendarInvalidRange` — committed range has `start > end` (the orchestrator\n * normalizes via auto-swap; this only triggers on programmatic writeValue).\n *\n * Each code's payload mirrors §10.2 — `{ min, actual }`, `{ max, actual }`,\n * `{ length, min }`, etc.\n */\nexport function calendarValidator<M extends CalendarMode, D>(\n ctx: CalendarValidatorContext<M, D>,\n): ValidatorFn {\n return (control: AbstractControl): CalendarValidationErrors | null => {\n const errors: CalendarValidationErrors = {};\n\n if (ctx.lastInvalidFormValue !== null && ctx.lastInvalidFormValue !== undefined) {\n errors.calendarInvalidValue = {\n expected: ctx.mode as 'single' | 'multiple' | 'range',\n actual: ctx.lastInvalidFormValue,\n reason: 'shape',\n };\n }\n\n if (control.hasValidator(Validators.required)) {\n const value = control.value as CalendarValue<M, D> | null | undefined;\n if (isCalendarValueEmpty(ctx.mode, value)) {\n errors.calendarRequired = true;\n }\n }\n\n // Phase 4 — constraint codes (only when the host wires constraints + adapter).\n if (ctx.constraints && ctx.adapter) {\n const value = control.value as CalendarValue<M, D> | null | undefined;\n if (\n value !== null &&\n value !== undefined &&\n !isCalendarValueEmpty<M, D>(ctx.mode, value)\n ) {\n applyConstraintCodes<M, D>(ctx, value, errors);\n }\n }\n\n return Object.keys(errors).length > 0 ? errors : null;\n };\n}\n\n/**\n * Mode-aware constraint validator. Mutates `errors` in place — the caller\n * decides whether the resulting object is `null` (no codes) or non-null.\n *\n * @internal\n */\nfunction applyConstraintCodes<M extends CalendarMode, D>(\n ctx: CalendarValidatorContext<M, D>,\n value: CalendarValue<M, D>,\n errors: CalendarValidationErrors,\n): void {\n const adapter = ctx.adapter!;\n const constraints = ctx.constraints!;\n const min = constraints.minDate;\n const max = constraints.maxDate;\n\n const checkSingle = (date: D): void => {\n if (min && adapter.compare(date, min) < 0) {\n errors.calendarMinDate = { min, actual: date };\n }\n if (max && adapter.compare(date, max) > 0) {\n errors.calendarMaxDate = { max, actual: date };\n }\n if (resolveDateDisabled(date, constraints, adapter)) {\n // Suppress when min/max already flagged the same date — `calendarDisabledDate`\n // is the catch-all for the non-range constraint sources.\n if (!errors.calendarMinDate && !errors.calendarMaxDate) {\n errors.calendarDisabledDate = { actual: date };\n }\n }\n };\n\n if (ctx.mode === 'single') {\n checkSingle(value as unknown as D);\n return;\n }\n\n if (ctx.mode === 'multiple') {\n const arr = value as unknown as D[];\n for (const d of arr) {\n checkSingle(d);\n if (errors.calendarMinDate || errors.calendarMaxDate || errors.calendarDisabledDate) break;\n }\n const limit = ctx.maxSelections;\n if (limit !== null && limit !== undefined && arr.length > limit) {\n errors.calendarMaxSelections = { limit, actual: arr.length };\n }\n return;\n }\n\n // range\n const range = value as unknown as { start: D | null; end: D | null };\n if (range.start) checkSingle(range.start);\n if (range.end) checkSingle(range.end);\n if (range.start && range.end) {\n if (adapter.compare(range.start, range.end) > 0) {\n errors.calendarInvalidRange = { start: range.start, end: range.end };\n return;\n }\n if (rangeCrossesDisabled(range.start, range.end, constraints, adapter, false)) {\n errors.calendarDisabledDate = { actual: range };\n }\n const length = rangeLengthDays(range.start, range.end, adapter);\n const minLen = ctx.minRangeLength;\n const maxLen = ctx.maxRangeLength;\n if (minLen !== null && minLen !== undefined && length < minLen) {\n errors.calendarRangeTooShort = { length, min: minLen };\n }\n if (maxLen !== null && maxLen !== undefined && length > maxLen) {\n errors.calendarRangeTooLong = { length, max: maxLen };\n }\n }\n}\n\n/**\n * Standalone required-validator helper for consumers who want to compose\n * calendar-required on a control that is **not** bound directly to a\n * `CalendarComponent`. The rule is identical: mode-specific empty ⇒ error.\n */\nexport function calendarRequiredValidator<M extends CalendarMode, D>(mode: M): ValidatorFn {\n return (control: AbstractControl): CalendarValidationErrors | null => {\n const value = control.value as CalendarValue<M, D> | null | undefined;\n return isCalendarValueEmpty(mode, value) ? { calendarRequired: true } : null;\n };\n}\n","import { InjectionToken } from '@angular/core';\n\n/** Names of month / day-of-week labels, in three densities. */\nexport type TwDateNameStyle = 'long' | 'short' | 'narrow';\n\n/**\n * Injection token for a per-instance timezone override (§7.4, §4.3).\n * When set, TZ-aware adapters resolve `today()` and date-range math against\n * the supplied IANA timezone. Floating (naive) adapters ignore the token.\n */\nexport const TW_TZ_OVERRIDE = new InjectionToken<string>('tw-calendar/TZ_OVERRIDE');\n\n/**\n * @deprecated Renamed to {@link TW_TZ_OVERRIDE} for consistency with every other\n * ngx-tw injection token. This is the *same token instance*, not a copy —\n * providing under either name and injecting under the other resolves — so the\n * rename is safe to adopt incrementally. Removed in the next major.\n */\nexport const TZ_OVERRIDE = TW_TZ_OVERRIDE;\n\n/**\n * Injection token for the default value transformer (§7.4, §7.6). Phase 14 wires\n * the component-level `valueTransformer` input to override this DI default.\n * Shipped as a token shell now so later phases can bind against it without a\n * breaking change.\n */\nexport const TW_DATE_SERIALIZATION = new InjectionToken<unknown>(\n 'tw-calendar/DATE_SERIALIZATION',\n);\n\n/**\n * @deprecated Renamed to {@link TW_DATE_SERIALIZATION} for consistency with\n * every other ngx-tw injection token. This is the *same token instance*, not a\n * copy — providing under either name and injecting under the other resolves —\n * so the rename is safe to adopt incrementally. Removed in the next major.\n */\nexport const DATE_SERIALIZATION = TW_DATE_SERIALIZATION;\n\n/**\n * Format definitions consumed by the calendar header, views, and text-input\n * directive. Each field accepts an adapter-specific format token — the default\n * {@link NativeDateAdapter} interprets them as `Intl.DateTimeFormatOptions`\n * bags wrapped in a {@link NativeDateFormat}.\n *\n * Phases 2+ only require the `input`, `display`, `monthLabel`, and `yearLabel`\n * members; the rest ship as slots now so later phases (5 — CalendarIntl, 9 —\n * multi-month, 11 — text input) can populate them without an API break.\n */\nexport interface DateFormats {\n /** Format used when parsing user-typed input. */\n readonly input?: unknown;\n /** Format used when rendering a date into a text input's display value. */\n readonly display?: unknown;\n /** Format used for the header's month label (e.g., `\"January 2026\"`). */\n readonly monthLabel?: unknown;\n /** Format used for the header's year label in month view (e.g., `\"2026\"`). */\n readonly yearLabel?: unknown;\n /** Format used for the years-view header (e.g., `\"2020 – 2039\"`). */\n readonly decadeLabel?: unknown;\n /** Format used for a day-cell's accessible label. */\n readonly a11yLabel?: unknown;\n /** Format used for a month-cell's accessible label. */\n readonly monthA11yLabel?: unknown;\n /** Format used for a day-of-week column header's accessible label. */\n readonly dayA11yLabel?: unknown;\n /** Format used for a month name inside the year view's accessible label. */\n readonly yearViewMonthA11yLabel?: unknown;\n}\n\n/** DI token carrying the default `DateFormats`. The calendar's `dateFormats` input overrides. */\nexport const TW_DATE_FORMATS = new InjectionToken<DateFormats>('tw-calendar/DateFormats');\n\n/**\n * @deprecated Renamed to {@link TW_DATE_FORMATS} for consistency with every\n * other ngx-tw injection token. This is the *same token instance*, not a copy —\n * providing under either name and injecting under the other resolves — so the\n * rename is safe to adopt incrementally. Removed in the next major.\n */\nexport const DATE_FORMATS = TW_DATE_FORMATS;\n\n/**\n * Abstract date adapter. Ship a subclass to swap the underlying date library\n * (Luxon, date-fns, Temporal). The calendar consumes only the methods defined\n * here — nothing else.\n *\n * `D` is the native date type understood by the underlying library.\n *\n * Method contract aligned with spec §20.1 / §20.2: `addYears`/`addMonths`/\n * `addDays`, `compare`, 1-based-month `create`, `toIso`/`fromIso`, and\n * optional TZ virtuals.\n */\nexport abstract class DateAdapter<D> {\n /** Returns today at midnight, local time (or in the adapter's configured TZ). */\n abstract today(): D;\n\n /**\n * Constructs a date.\n *\n * **`month` is 1-based** — pass `1` for January, `12` for December.\n * Callers migrating from the pre-v1 `createDate(year, zeroBasedMonth, day)`\n * must bump the month argument by one.\n *\n * `day` is 1-based.\n */\n abstract create(year: number, month: number, day: number): D;\n\n /** Returns a defensive copy. */\n abstract clone(date: D): D;\n\n /** Locale for label formatting. Subclasses may honour this or ignore. */\n abstract setLocale(locale: string): void;\n abstract getLocale(): string;\n\n /** Field getters. `month` is zero-based. */\n abstract getYear(date: D): number;\n abstract getMonth(date: D): number;\n abstract getDate(date: D): number;\n /** 0 = Sunday, 6 = Saturday. */\n abstract getDayOfWeek(date: D): number;\n\n abstract getNumDaysInMonth(date: D): number;\n\n /** Time getters — hours are 0–23, minutes and seconds are 0–59. */\n abstract getHours(date: D): number;\n abstract getMinutes(date: D): number;\n abstract getSeconds(date: D): number;\n\n /**\n * Returns a new date with the same year/month/day as `date` but the supplied\n * time-of-day. Adapters must not mutate `date`. `hours` is 0–23.\n *\n * **Not part of the calendar's v1 spec surface** — the calendar does not\n * consume time-of-day. Retained for the companion time-picker component.\n */\n abstract withTime(date: D, hours: number, minutes: number, seconds: number): D;\n\n /** 0 = Sunday, 1 = Monday, etc. */\n abstract getFirstDayOfWeek(): number;\n\n /** Days per week. Override only for non-Gregorian adapters (WONT v1). */\n getDaysInWeek(): number {\n return 7;\n }\n\n /** Returns month names for the current locale. */\n abstract getMonthNames(style: TwDateNameStyle): string[];\n /** Returns day-of-week names for the current locale, starting at Sunday. */\n abstract getDayOfWeekNames(style: TwDateNameStyle): string[];\n /** Returns 1-based day-of-month names (`[\"1\", \"2\", ..., \"31\"]`) for locales that localize numerals. Default implementation returns Latin digits. */\n getDateNames(_style: TwDateNameStyle = 'short'): string[] {\n return Array.from({ length: 31 }, (_, i) => String(i + 1));\n }\n /** Returns the localised year label (e.g. `\"2026\"`). */\n abstract getYearName(date: D): string;\n\n /** Formats a date for display. Subclasses pick their own format tokens. */\n abstract format(date: D, displayFormat: unknown): string;\n\n /** Date arithmetic — preserve original in immutable adapters. */\n abstract addYears(date: D, years: number): D;\n abstract addMonths(date: D, months: number): D;\n abstract addDays(date: D, days: number): D;\n\n /** Time arithmetic. Default implementation derives hours/minutes from day arithmetic via `addDays` — adapters with better precision should override. */\n addHours(date: D, hours: number): D {\n const minutes = hours * 60;\n return this.addMinutes(date, minutes);\n }\n abstract addMinutes(date: D, minutes: number): D;\n\n /** Returns negative when `first` is earlier, 0 when equal, positive when later. */\n abstract compare(first: D, second: D): number;\n abstract sameDate(first: D | null | undefined, second: D | null | undefined): boolean;\n\n /** Whether a raw value can be turned into a valid date. */\n abstract isValid(date: D): boolean;\n /** Returns an invalid sentinel of type `D` (NaN-date for native). */\n abstract invalid(): D;\n\n /** Attempt to parse an ISO or free-form string. Return `null` on failure. */\n abstract parse(value: unknown, parseFormat?: unknown): D | null;\n\n /** Coerce an incoming value from form writes. */\n abstract deserialize(value: unknown): D | null;\n\n /** ISO 8601 (`YYYY-MM-DD`) serialization. Phases using serialized forms call this. */\n abstract toIso(date: D): string;\n\n /** ISO 8601 (`YYYY-MM-DD`) deserialization counterpart to `toIso`. */\n fromIso(iso: string): D | null {\n return this.parse(iso);\n }\n\n // ---------------------------------------------------------------------------\n // Spec §20.2 extension methods (concrete with sensible defaults; adapters may\n // override for precision or DST correctness).\n // ---------------------------------------------------------------------------\n\n /**\n * Start-of-day normalization. Default implementation rebuilds the date at\n * `00:00:00.000` local time; DST-skipped hours (e.g., 02:00 on DST start) are\n * resolved to the wall-clock midnight the adapter considers valid.\n *\n * TZ-aware adapters MUST override to normalize in the adapter's TZ.\n */\n abstract startOfDay(date: D): D;\n\n /** First day of the week containing `date`. `firstDayOfWeek` defaults to `getFirstDayOfWeek()`. */\n startOfWeek(date: D, firstDayOfWeek?: number): D {\n const first = firstDayOfWeek ?? this.getFirstDayOfWeek();\n const dow = this.getDayOfWeek(date);\n const diff = (dow - first + this.getDaysInWeek()) % this.getDaysInWeek();\n return this.addDays(date, -diff);\n }\n\n /** Last day of the week containing `date`. */\n endOfWeek(date: D, firstDayOfWeek?: number): D {\n return this.addDays(this.startOfWeek(date, firstDayOfWeek), this.getDaysInWeek() - 1);\n }\n\n /** Equality on year + month. */\n sameMonth(first: D, second: D): boolean {\n return (\n this.getYear(first) === this.getYear(second) &&\n this.getMonth(first) === this.getMonth(second)\n );\n }\n\n /** Equality on year only. */\n sameYear(first: D, second: D): boolean {\n return this.getYear(first) === this.getYear(second);\n }\n\n /** Clamp a date into the [min, max] window. */\n clampDate(date: D, min?: D | null, max?: D | null): D {\n if (min && this.compare(date, min) < 0) return min;\n if (max && this.compare(date, max) > 0) return max;\n return date;\n }\n\n // ---------------------------------------------------------------------------\n // Optional TZ-aware virtuals (§4.2). Floating adapters implement as\n // pass-through; TZ-aware adapters (Luxon, Temporal) override.\n // ---------------------------------------------------------------------------\n\n /** Returns the adapter's configured timezone, or `null` for floating adapters. */\n getTimezone(): string | null {\n return null;\n }\n\n /** Returns a copy of `date` reinterpreted in `tz`. Floating adapters pass through. */\n withTimezone(date: D, _tz: string): D {\n return date;\n }\n\n /** Returns `true` when `date` sits inside a DST-transition. Floating adapters return `false`. */\n isDST(_date: D): boolean {\n return false;\n }\n\n /** Resolves an ambiguous wall-clock time (DST fall-back) to one of the two candidates. Floating adapters pass through. */\n resolveAmbiguous(date: D, _prefer: 'earlier' | 'later'): D {\n return date;\n }\n}\n\n/**\n * Injection token for the calendar's `DateAdapter`. Prefer `provideNativeDateAdapter()`\n * or `provideTwCalendar({ adapter })` over binding this token directly.\n */\nexport const TW_DATE_ADAPTER = new InjectionToken<DateAdapter<unknown>>(\n 'tw-calendar/DateAdapter',\n);\n\n/**\n * @deprecated Renamed to {@link TW_DATE_ADAPTER} for consistency with every\n * other ngx-tw injection token. This is the *same token instance*, not a copy —\n * providing under either name and injecting under the other resolves, so an app\n * that provides `DATE_ADAPTER` keeps working against a library that injects\n * `TW_DATE_ADAPTER`. Removed in the next major.\n */\nexport const DATE_ADAPTER = TW_DATE_ADAPTER;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n type ElementRef,\n input,\n output,\n viewChild,\n type InputSignal,\n type OutputEmitterRef,\n type Signal,\n type TemplateRef,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { tv } from 'tailwind-variants';\nimport type { CalendarCell, CalendarCellState, CalendarViewState } from './calendar.types';\n\n/** Emitted on keyboard navigation keys (arrows, Home/End, PageUp/PageDown). */\nexport interface CalendarCellKeyNavEvent<D> {\n readonly direction: 'left' | 'right' | 'up' | 'down' | 'home' | 'end' | 'pageUp' | 'pageDown';\n /** True when the originating KeyboardEvent had Shift held — drives year-jump variants of Page navigation. */\n readonly shiftKey: boolean;\n readonly cell: CalendarCell<D>;\n}\n\nconst cellVariants = tv(\n {\n slots: {\n wrapper: 'relative flex items-center justify-center',\n // `aria-disabled:` rather than `disabled:` — the button never carries the\n // native `disabled` attribute (see the host template), so the `disabled:`\n // variant would never match.\n button:\n 'relative flex items-center justify-center cursor-pointer select-none transition-colors duration-normal motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 aria-disabled:cursor-not-allowed',\n },\n variants: {\n // Every view's cell is `h-9` — the 36px `md` control height from\n // docs/vertical-rhythm.md. Month and year cells were `h-10`, which made a\n // month-picker row 4px taller than a day row for no reason and put the\n // value off the height scale. Only the width differs per view (a day is\n // one or two digits in a circle; a month/year is a 3–4 char label in a\n // rounded rect). The panel's height is pinned separately — see the\n // view-region wrapper in `calendar.ts`.\n //\n // Widths are chosen so all three grids compute to the SAME 252px intrinsic\n // width, which is what stops the panel shifting horizontally on a view\n // switch. The day grid is `grid-cols-7 gap-0`: 7 x 36 = 252. The month and\n // year grids are `grid-cols-4 gap-1`: 4 x 60 + 3 x 4 = 252. Month cells were\n // `w-16` (4 x 64 + 12 = 268) and year cells `w-14` (4 x 56 + 12 = 236), which\n // is where the 270 / 286 / 254 panel spread came from.\n //\n // The day cell is deliberately untouched: its `w-9` button has to coincide\n // exactly with its grid column so the range wrapper's `rounded-l-full` /\n // `rounded-r-full` cap lands on the selected endpoint pill instead of ~1px\n // past it. Equalising via the month and year cells keeps that coincidence\n // intact by construction, where a `min-w` on the shared view region would\n // have broken it — see the note in `calendar.ts`.\n view: {\n day: { button: 'h-9 w-9 text-sm rounded-full' },\n month: { button: 'h-9 w-15 text-sm rounded-md' },\n year: { button: 'h-9 w-15 text-sm rounded-md' },\n },\n // Slot tokens own light/dark contrast — no `dark:`, no shade picks.\n // The range wash uses `primary-soft-hover` (one step deeper than `-soft`)\n // so the in-range band reads slightly stronger than the popover surface\n // without competing with the selected endpoints.\n state: {\n default: { button: 'text-fg hover:bg-surface-muted' },\n today: {\n button:\n 'text-primary-fg font-semibold ring-1 ring-primary-border-strong hover:bg-primary-soft',\n },\n selected: {\n button: 'bg-primary-solid text-primary-solid-fg font-semibold hover:bg-primary-solid-hover',\n },\n 'range-start': {\n button:\n 'bg-primary-solid text-primary-solid-fg font-semibold rounded-l-full rounded-r-none hover:bg-primary-solid-hover',\n },\n 'range-middle': {\n button:\n 'bg-primary-soft-hover text-primary-soft-fg rounded-none hover:bg-primary-soft',\n },\n 'range-end': {\n button:\n 'bg-primary-solid text-primary-solid-fg font-semibold rounded-r-full rounded-l-none hover:bg-primary-solid-hover',\n },\n 'preview-start': {\n button:\n 'bg-primary-soft-hover text-primary-soft-fg rounded-l-full rounded-r-none ring-1 ring-primary-border-strong opacity-70',\n },\n 'preview-middle': {\n button:\n 'bg-primary-soft-hover text-primary-soft-fg rounded-none opacity-70',\n },\n 'preview-end': {\n button:\n 'bg-primary-soft-hover text-primary-soft-fg rounded-r-full rounded-l-none ring-1 ring-primary-border-strong opacity-70',\n },\n disabled: { button: 'text-fg-subtle cursor-not-allowed hover:bg-transparent' },\n },\n outside: {\n true: { button: 'text-fg-muted' },\n false: {},\n },\n range: {\n none: {},\n start: { wrapper: 'bg-primary-soft-hover rounded-l-full' },\n middle: { wrapper: 'bg-primary-soft-hover' },\n end: { wrapper: 'bg-primary-soft-hover rounded-r-full' },\n single: {},\n },\n },\n compoundVariants: [\n { state: 'disabled', outside: true, class: { button: 'text-fg-subtle' } },\n { state: 'selected', class: { button: 'ring-0' } },\n ],\n defaultVariants: { view: 'day', state: 'default', outside: false, range: 'none' },\n },\n { twMerge: true },\n);\n\n/**\n * Renders a single cell in any calendar view.\n *\n * The cell is a stateless presentation component — selection / preview /\n * today state is all derived from the `CalendarCell<D>` data object. It\n * emits events for clicks, keyboard navigation, mouse hover, and focus.\n */\n@Component({\n selector: 'tw-calendar-cell',\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'gridcell',\n // `aria-selected` belongs HERE, not on the inner <button>. A button's\n // implicit role does not support `aria-selected`, so the previous binding\n // exposed nothing: the selected day's state was invisible to assistive tech\n // (SC 4.1.2). `gridcell` is the role that carries selection state, and it is\n // the element the grid/row structure actually addresses.\n '[attr.aria-selected]': \"cell().isSelected || null\",\n // Phase 4 — `data-state-*` styling contract (§34.5). Each attribute is `''`\n // when its boolean state is true and absent (`null`) otherwise so consumers\n // can target via `tw-calendar-cell[data-state-today]` selectors.\n '[attr.data-state-today]': \"cell().isToday ? '' : null\",\n '[attr.data-state-selected]': \"cell().isSelected && !cell().isRangeStart && !cell().isRangeEnd && !cell().isRangeMiddle ? '' : null\",\n '[attr.data-state-range-start]': \"cell().isRangeStart ? '' : null\",\n '[attr.data-state-range-end]': \"cell().isRangeEnd ? '' : null\",\n '[attr.data-state-in-range]': \"cell().isRangeMiddle ? '' : null\",\n '[attr.data-state-range-preview-start]': \"cell().isPreviewStart ? '' : null\",\n '[attr.data-state-range-preview-end]': \"cell().isPreviewEnd ? '' : null\",\n '[attr.data-state-in-range-preview]': \"cell().isPreviewMiddle ? '' : null\",\n '[attr.data-state-invalid-preview]': \"cell().isInvalidPreview ? '' : null\",\n '[attr.data-state-invalid-flash]': \"cell().isInvalidFlash ? '' : null\",\n '[attr.data-state-disabled]': \"!cell().enabled ? '' : null\",\n '[attr.data-state-out-of-month]': \"outside() ? '' : null\",\n '[attr.data-state-weekend]': \"cell().isWeekend ? '' : null\",\n '[attr.data-state-focused]': \"tabindex() === 0 ? '' : null\",\n },\n template: `\n <div [class]=\"wrapperClasses()\">\n <!--\n No native disabled attribute. A disabled button cannot take DOM focus,\n so focusButton was a silent no-op on any out-of-range cell and the\n roving tabindex drifted out of sync with the real activeElement -\n pressing Tab into a grid whose cursor sat on a bounded date focused\n nothing at all. APG uses aria-disabled for grid cells for exactly this\n reason: the cell stays focusable and announceable, while activation is\n refused in onClick and onKeydown.\n -->\n <button\n #cellButton\n type=\"button\"\n [class]=\"buttonClasses()\"\n [attr.aria-label]=\"cell().ariaLabel\"\n [attr.aria-disabled]=\"!cell().enabled || null\"\n [attr.aria-current]=\"cell().isToday ? 'date' : null\"\n [attr.tabindex]=\"tabindex()\"\n (click)=\"onClick()\"\n (keydown)=\"onKeydown($event)\"\n (mouseenter)=\"onMouseEnter()\"\n (focus)=\"onFocus()\"\n >\n @if (cellTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"cellTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: cell() }\"\n />\n } @else {\n {{ cell().displayValue }}\n }\n </button>\n </div>\n `,\n})\nexport class CalendarCellComponent<D> {\n private readonly buttonRef: Signal<ElementRef<HTMLButtonElement> | undefined> =\n viewChild<ElementRef<HTMLButtonElement>>('cellButton');\n\n /** The cell data object to render. */\n readonly cell: InputSignal<CalendarCell<D>> = input.required<CalendarCell<D>>();\n\n /** The active calendar view — drives cell width and radius. Defaults to `'day'`. */\n readonly view: InputSignal<CalendarViewState> = input<CalendarViewState>('day');\n\n /** `true` when the cell's date is outside the currently displayed month, which mutes its text. Defaults to `false`. */\n readonly outside: InputSignal<boolean> = input<boolean>(false);\n\n /** Tab index for roving focus (`0` for the active cell, `-1` otherwise). Defaults to `-1`. */\n readonly tabindex: InputSignal<number> = input<number>(-1);\n\n /** Optional template rendered inside the button — receives `{ $implicit: CalendarCell<D> }`. Defaults to `null` (the cell renders its own display value). */\n readonly cellTemplate: InputSignal<TemplateRef<{ $implicit: CalendarCell<D> }> | null> =\n input<TemplateRef<{ $implicit: CalendarCell<D> }> | null>(null);\n\n /** Emitted when the user activates the cell (click, Enter, or Space). */\n readonly selected: OutputEmitterRef<CalendarCell<D>> = output<CalendarCell<D>>();\n\n /** Emitted when the cell gains focus. */\n readonly focused: OutputEmitterRef<CalendarCell<D>> = output<CalendarCell<D>>();\n\n /** Emitted on pointer hover — parent uses this to drive range preview. */\n readonly previewed: OutputEmitterRef<CalendarCell<D>> = output<CalendarCell<D>>();\n\n /** Emitted on navigation keys (arrows, Home/End, PageUp/PageDown). */\n readonly keyNav: OutputEmitterRef<CalendarCellKeyNavEvent<D>> = output<CalendarCellKeyNavEvent<D>>();\n\n protected readonly cellState: Signal<CalendarCellState> = computed(() => {\n const c = this.cell();\n if (!c.enabled) return 'disabled';\n if (c.isRangeStart) return 'range-start';\n if (c.isRangeEnd) return 'range-end';\n if (c.isRangeMiddle) return 'range-middle';\n if (c.isPreviewStart) return 'preview-start';\n if (c.isPreviewEnd) return 'preview-end';\n if (c.isPreviewMiddle) return 'preview-middle';\n if (c.isSelected) return 'selected';\n if (c.isToday) return 'today';\n return 'default';\n });\n\n protected readonly wrapperRange: Signal<'none' | 'start' | 'middle' | 'end' | 'single'> = computed(() => {\n const c = this.cell();\n if (c.isRangeStart && c.isRangeEnd) return 'single';\n if (c.isRangeStart) return 'start';\n if (c.isRangeEnd) return 'end';\n if (c.isRangeMiddle) return 'middle';\n return 'none';\n });\n\n private readonly variantResult = computed(() =>\n cellVariants({\n view: this.view(),\n state: this.cellState(),\n outside: this.outside(),\n range: this.wrapperRange(),\n }),\n );\n\n protected readonly wrapperClasses: Signal<string> = computed(() => this.variantResult().wrapper());\n\n protected readonly buttonClasses: Signal<string> = computed(() => {\n const base = this.variantResult().button();\n const extra = this.cell().cssClasses;\n return extra ? `${base} ${extra}` : base;\n });\n\n protected onClick(): void {\n const c = this.cell();\n if (c.enabled) this.selected.emit(c);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const navKeys: Record<string, CalendarCellKeyNavEvent<D>['direction']> = {\n ArrowLeft: 'left',\n ArrowRight: 'right',\n ArrowUp: 'up',\n ArrowDown: 'down',\n Home: 'home',\n End: 'end',\n PageUp: 'pageUp',\n PageDown: 'pageDown',\n };\n const direction = navKeys[event.key];\n if (direction) {\n event.preventDefault();\n this.keyNav.emit({ direction, shiftKey: event.shiftKey, cell: this.cell() });\n return;\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n const c = this.cell();\n if (c.enabled) this.selected.emit(c);\n }\n }\n\n protected onMouseEnter(): void {\n // Browsers do not dispatch mouse events on a natively disabled button, so\n // before the switch to `aria-disabled` a disabled cell never previewed.\n // Guard explicitly to keep range preview from extending over dates the user\n // cannot pick.\n if (!this.cell().enabled) return;\n this.previewed.emit(this.cell());\n }\n\n protected onFocus(): void {\n this.focused.emit(this.cell());\n }\n\n /** Imperatively focuses this cell's button. */\n focusButton(): void {\n this.buttonRef()?.nativeElement.focus();\n }\n}\n","import {\n Directive,\n afterEveryRender,\n computed,\n inject,\n input,\n output,\n signal,\n type InputSignal,\n type OutputEmitterRef,\n type Signal,\n type TemplateRef,\n type WritableSignal,\n} from '@angular/core';\nimport type { CalendarCellComponent } from './calendar-cell';\nimport type {\n CalendarCell,\n CalendarViewState,\n DateClassFn,\n DateFilterFn,\n DateRange,\n DisabledDates,\n} from './calendar.types';\nimport { type DateAdapter, TW_DATE_ADAPTER } from './date-adapter';\nimport { isDateInRange } from './calendar.utils';\n\n/**\n * Abstract base for the three calendar views. Holds shared inputs/outputs\n * (selection, preview, min/max, filters), cell-hit helpers, and roving-focus\n * machinery. Subclasses implement `cells`, `gridLabel`, `onKeyNav`, and\n * `getActiveCompareValue`.\n */\n@Directive()\nexport abstract class CalendarViewBase<D> {\n protected readonly dateAdapter: DateAdapter<D> = inject<DateAdapter<D>>(TW_DATE_ADAPTER);\n\n /** The date that anchors the grid being rendered. */\n readonly activeDate: InputSignal<D> = input.required<D>();\n\n /** Current selection — scalar, array (multi), or range. Defaults to `null` (nothing selected). */\n readonly selected: InputSignal<D | D[] | DateRange<D> | null> =\n input<D | D[] | DateRange<D> | null>(null);\n\n /** Minimum selectable date. Defaults to `null` (no lower bound). */\n readonly minDate: InputSignal<D | null> = input<D | null>(null);\n /** Maximum selectable date. Defaults to `null` (no upper bound). */\n readonly maxDate: InputSignal<D | null> = input<D | null>(null);\n\n /** Per-date predicate — return `false` to disable. Defaults to `null` (every date passes). */\n readonly dateFilter: InputSignal<DateFilterFn<D> | null> = input<DateFilterFn<D> | null>(null);\n\n /** Explicitly disabled dates — array (compared via `adapter.sameDate`) or predicate (returns `true` for disabled). Defaults to `null` (none). */\n readonly disabledDates: InputSignal<DisabledDates<D> | null> =\n input<DisabledDates<D> | null>(null);\n\n /** Days of the week to disable (0=Sun … 6=Sat). Defaults to `[]` — no day-of-week disabling. */\n readonly disabledDaysOfWeek: InputSignal<readonly number[]> = input<readonly number[]>([]);\n\n /** Per-cell class override — returns extra classes appended to the cell button. Defaults to `null` (no extra classes). */\n readonly dateClass: InputSignal<DateClassFn<D> | null> = input<DateClassFn<D> | null>(null);\n\n /** Hover-preview start (set while user is mid-range pick). Defaults to `null` (no preview). */\n readonly previewStart: InputSignal<D | null> = input<D | null>(null);\n /** Hover-preview end. Defaults to `null` (no preview). */\n readonly previewEnd: InputSignal<D | null> = input<D | null>(null);\n\n /** Phase 6 — date that briefly flashes as invalid (rejected commit). Cleared by the orchestrator. Defaults to `null` (no flash). */\n readonly invalidFlashDate: InputSignal<D | null> = input<D | null>(null);\n\n /** `true` when the parent calendar allows more than one cell to be selected at once. Drives `aria-multiselectable` on the grid host. Defaults to `false`. */\n readonly multiSelectable: InputSignal<boolean> = input<boolean>(false);\n\n /** `true` when the parent calendar is in read-only mode. Drives `aria-readonly` on the grid host. Defaults to `false`. */\n readonly readonlyGrid: InputSignal<boolean> = input<boolean>(false);\n\n /**\n * `true` when the parent calendar is disabled (the `disabled` input, or a\n * bound form control's `setDisabledState`). Every cell then reports\n * `aria-disabled` and refuses activation. Defaults to `false`.\n *\n * Distinct from `readonlyGrid`: read-only keeps cells *selectable-looking*\n * and only blocks the commit in the orchestrator, whereas disabled removes\n * the affordance itself. Both leave the grid focusable and arrow-navigable —\n * per WAI-ARIA APG, a focusable disabled element stays \"operable to the\n * extent of allowing the user to read its state\", and `rovingCellValue`\n * guarantees exactly one tabbable cell so the grid never drops out of the\n * tab order.\n */\n readonly disabledGrid: InputSignal<boolean> = input<boolean>(false);\n\n /** Optional cell-content override, rendered inside each cell button with `{ $implicit: CalendarCell<D> }`. Defaults to `null` (the cell renders its own display value). */\n readonly cellTemplate: InputSignal<TemplateRef<{ $implicit: CalendarCell<D> }> | null> =\n input<TemplateRef<{ $implicit: CalendarCell<D> }> | null>(null);\n\n /** Fires when the user activates an enabled cell (click, Enter, or Space). Payload is the activated cell's date. */\n readonly selectedChange: OutputEmitterRef<D> = output<D>();\n\n /** Fires when keyboard navigation or programmatic focus moves the roving cursor to a new cell. Payload is the new active date. */\n readonly activeDateChange: OutputEmitterRef<D> = output<D>();\n\n /** Fires on pointer hover with the hovered date, and again with `null` when the pointer leaves the grid. The parent orchestrator drives any range-preview state from this stream. */\n readonly previewChange: OutputEmitterRef<D | null> = output<D | null>();\n\n /** Subclass declares which view it represents. */\n protected abstract readonly view: CalendarViewState;\n\n /** Subclass exposes its cell components for focus management. */\n protected abstract readonly cellComponents: Signal<readonly CalendarCellComponent<D>[]>;\n\n /** Cell that should own the roving-tabindex cursor. `null` means \"use `activeDate`\". */\n protected readonly focusedCellValue: WritableSignal<number | null> = signal<number | null>(null);\n\n /** Pending focus target — drained after the next render. */\n protected readonly focusPending: WritableSignal<number | null> = signal<number | null>(null);\n\n constructor() {\n afterEveryRender(() => {\n const pending = this.focusPending();\n if (pending !== null) {\n const target = this.cellComponents().find((c) => c.cell().compareValue === pending);\n target?.focusButton();\n this.focusPending.set(null);\n }\n });\n }\n\n /** 2D grid of cells rendered by the subclass. */\n abstract readonly cells: Signal<CalendarCell<D>[][]>;\n\n /** Accessible label for the grid (e.g. \"January 2026\"). */\n abstract readonly gridLabel: Signal<string>;\n\n /** Today's date — memoized per view instance. */\n protected readonly today: Signal<D> = computed(() => this.dateAdapter.today());\n\n /** True when `date` is part of the committed selection. */\n protected isSelected(date: D): boolean {\n const sel = this.selected();\n if (!sel) return false;\n if (Array.isArray(sel)) {\n return sel.some((d) => this.dateAdapter.sameDate(date, d));\n }\n if (this.isDateRange(sel)) {\n const r = sel;\n if (r.start && this.dateAdapter.sameDate(date, r.start)) return true;\n if (r.end && this.dateAdapter.sameDate(date, r.end)) return true;\n return false;\n }\n return this.dateAdapter.sameDate(date, sel);\n }\n\n protected isRangeStart(date: D): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel)) return false;\n return sel.start !== null && this.dateAdapter.sameDate(date, sel.start);\n }\n\n protected isRangeEnd(date: D): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel)) return false;\n return sel.end !== null && this.dateAdapter.sameDate(date, sel.end);\n }\n\n protected isRangeMiddle(date: D): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel)) return false;\n if (!sel.start || !sel.end) return false;\n return (\n isDateInRange(date, sel.start, sel.end, this.dateAdapter) &&\n !this.isRangeStart(date) &&\n !this.isRangeEnd(date)\n );\n }\n\n protected isPreviewStart(date: D): boolean {\n const s = this.previewStart();\n return s !== null && this.dateAdapter.sameDate(date, s);\n }\n\n protected isPreviewEnd(date: D): boolean {\n const e = this.previewEnd();\n return e !== null && this.dateAdapter.sameDate(date, e);\n }\n\n protected isPreviewMiddle(date: D): boolean {\n const s = this.previewStart();\n const e = this.previewEnd();\n if (!s || !e) return false;\n return (\n isDateInRange(date, s, e, this.dateAdapter) &&\n !this.isPreviewStart(date) &&\n !this.isPreviewEnd(date)\n );\n }\n\n protected isDateRange(value: D | D[] | DateRange<D>): value is DateRange<D> {\n return value !== null && typeof value === 'object' && 'start' in value && 'end' in value;\n }\n\n /** Routes a cell activation up to the parent. */\n onCellSelected(cell: CalendarCell<D>): void {\n if (cell.enabled) this.selectedChange.emit(cell.value);\n }\n\n /** Routes hover events up to the parent (parent drives preview state). */\n onCellPreviewed(cell: CalendarCell<D>): void {\n this.previewChange.emit(cell.value);\n }\n\n /** Clears the preview when the pointer leaves the grid. */\n onGridMouseLeave(): void {\n this.previewChange.emit(null);\n }\n\n /** Subclass implements view-specific keyboard navigation. */\n abstract onKeyNav(event: { direction: string; cell: CalendarCell<D> }): void;\n\n /**\n * `compareValue` of the cell that owns the roving tabindex, resolved against\n * the cells actually rendered right now.\n *\n * `focusedCellValue` is written only by `focusCell()` and nothing ever resets\n * it, so it goes stale the moment the displayed period changes by any route\n * that does not itself call `focusCell()` — the header's prev/next buttons,\n * a programmatic `activeDate` assignment, a view switch. A stale value\n * matches no rendered cell, `isActiveCell` then answered `false` for every\n * one of them, and the grid left the tab order entirely: zero cells with\n * `tabindex=\"0\"`, nothing to Tab into, keyboard users locked out (SC 2.1.1).\n *\n * Resolving here rather than resetting the signal keeps this a pure read —\n * no effect, no write, no cycle — and the three fallbacks guarantee the\n * invariant the defect broke: a non-empty grid always has exactly one\n * tabbable cell.\n */\n protected readonly rovingCellValue: Signal<number | null> = computed(() => {\n const grid = this.cells();\n const focused = this.focusedCellValue();\n if (focused !== null && this.gridHasValue(grid, focused)) return focused;\n const active = this.getActiveCompareValue();\n if (this.gridHasValue(grid, active)) return active;\n // Neither anchor is on screen. Rather than strand the grid, hand the cursor\n // to the first selectable cell — or, if every cell is disabled, the first\n // cell, which is still focusable now that cells use `aria-disabled`.\n for (const row of grid) {\n const enabled = row.find((c) => c.enabled);\n if (enabled) return enabled.compareValue;\n }\n for (const row of grid) {\n if (row.length > 0) return row[0].compareValue;\n }\n return null;\n });\n\n private gridHasValue(grid: CalendarCell<D>[][], value: number): boolean {\n return grid.some((row) => row.some((c) => c.compareValue === value));\n }\n\n /** Returns `true` when the cell owns the roving cursor. */\n isActiveCell(cell: CalendarCell<D>): boolean {\n return cell.compareValue === this.rovingCellValue();\n }\n\n /** Compare value of the currently active date (subclass-specific). */\n protected abstract getActiveCompareValue(): number;\n\n /** Imperatively focuses the cell matching `compareValue` after the next render. */\n focusCell(compareValue: number): void {\n this.focusedCellValue.set(compareValue);\n this.focusPending.set(compareValue);\n }\n\n /** Focuses the cell that currently owns the roving cursor. */\n focusActiveCell(): void {\n // Read through `rovingCellValue` so a stale `focusedCellValue` cannot aim\n // focus at a cell that is no longer rendered — the same staleness that used\n // to empty the tab order also made this a silent no-op.\n const target = this.rovingCellValue();\n if (target === null) return;\n this.focusCell(target);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n viewChildren,\n type InputSignal,\n type Signal,\n} from '@angular/core';\nimport { CalendarCellComponent, type CalendarCellKeyNavEvent } from './calendar-cell';\nimport type { CalendarCell, CalendarViewState } from './calendar.types';\nimport { DAYS_PER_WEEK, WEEKS_PER_MONTH, createCalendarCell } from './calendar.types';\nimport {\n createGrid,\n getFirstDayOfMonth,\n getWeekdayHeaders,\n isDateDisabled,\n isWeekend,\n type WeekdayHeader,\n} from './calendar.utils';\nimport { CalendarViewBase } from './calendar-view-base';\n\nconst TOTAL_CELLS = DAYS_PER_WEEK * WEEKS_PER_MONTH;\n\n/**\n * Month view — renders a 7×6 grid of day cells, with leading/trailing days\n * from adjacent months marked as \"outside\".\n */\n@Component({\n selector: 'tw-calendar-month-view',\n imports: [CalendarCellComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `\n <div\n role=\"grid\"\n [attr.aria-label]=\"gridLabel()\"\n [attr.aria-multiselectable]=\"multiSelectable() || null\"\n [attr.aria-readonly]=\"readonlyGrid() || null\"\n (mouseleave)=\"onGridMouseLeave()\"\n >\n <!-- gap-0: weekday headers align column-by-column with the day grid below, which itself must be gap-0 for contiguous range backgrounds. -->\n <div role=\"row\" class=\"grid grid-cols-7 gap-0\">\n @for (header of weekdayHeaders(); track $index) {\n <div\n role=\"columnheader\"\n class=\"flex items-center justify-center h-9 text-2xs font-medium text-fg-muted\"\n [attr.aria-label]=\"header.label\"\n >\n {{ header.narrow }}\n </div>\n }\n </div>\n @for (row of cells(); track $index) {\n <!-- gap-0: cells must touch so range-selection wrapper backgrounds (bg-primary-100 + rounded-l/r-full) form a continuous bar across adjacent days. -->\n <div role=\"row\" class=\"grid grid-cols-7 gap-0\">\n @for (cell of row; track cell.compareValue) {\n <tw-calendar-cell\n [cell]=\"cell\"\n [view]=\"view\"\n [outside]=\"isOutsideMonth(cell)\"\n [tabindex]=\"isActiveCell(cell) ? 0 : -1\"\n [cellTemplate]=\"cellTemplate()\"\n [attr.data-compare-value]=\"cell.compareValue\"\n (selected)=\"onCellSelected($event)\"\n (previewed)=\"onCellPreviewed($event)\"\n (keyNav)=\"onKeyNav($event)\"\n />\n }\n </div>\n }\n </div>\n `,\n})\nexport class MonthViewComponent<D> extends CalendarViewBase<D> {\n protected readonly view: CalendarViewState = 'day';\n\n protected readonly cellComponents: Signal<readonly CalendarCellComponent<D>[]> =\n viewChildren<CalendarCellComponent<D>>(CalendarCellComponent);\n\n /** Override first day of week (0=Sun, 1=Mon). Defaults to `0` (Sunday). */\n readonly firstDayOfWeek: InputSignal<number> = input<number>(0);\n\n /** Index within a multi-month row (0=left, 1+=right) — used by the orchestrator to disambiguate focus. Defaults to `0`. */\n readonly gridIndex: InputSignal<number> = input<number>(0);\n\n readonly weekdayHeaders: Signal<WeekdayHeader[]> = computed(() =>\n getWeekdayHeaders(this.dateAdapter, 'long', this.firstDayOfWeek()),\n );\n\n readonly displayMonth: Signal<number> = computed(() =>\n this.dateAdapter.getMonth(this.activeDate()),\n );\n\n readonly displayYear: Signal<number> = computed(() =>\n this.dateAdapter.getYear(this.activeDate()),\n );\n\n readonly cells: Signal<CalendarCell<D>[][]> = computed(() => {\n const active = this.activeDate();\n const firstOfMonth = getFirstDayOfMonth(active, this.dateAdapter);\n const firstDayOfWeek = this.firstDayOfWeek();\n const firstDayOfMonthWeekday = this.dateAdapter.getDayOfWeek(firstOfMonth);\n const offset = (firstDayOfMonthWeekday - firstDayOfWeek + DAYS_PER_WEEK) % DAYS_PER_WEEK;\n const startDate = this.dateAdapter.addDays(firstOfMonth, -offset);\n\n const today = this.today();\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const dateFilter = this.dateFilter();\n const disabledDates = this.disabledDates();\n const disabledDaysOfWeek = this.disabledDaysOfWeek();\n const dateClass = this.dateClass();\n const displayedMonth = this.displayMonth();\n const gridDisabled = this.disabledGrid();\n\n const days: CalendarCell<D>[] = [];\n for (let i = 0; i < TOTAL_CELLS; i++) {\n const date = this.dateAdapter.addDays(startDate, i);\n const dayOfMonth = this.dateAdapter.getDate(date);\n const cellMonth = this.dateAdapter.getMonth(date);\n const cellYear = this.dateAdapter.getYear(date);\n const compareValue = cellYear * 10000 + cellMonth * 100 + dayOfMonth;\n const cell = createCalendarCell<D>({\n value: date,\n displayValue: String(dayOfMonth),\n ariaLabel: this.dateAdapter.format(date, { dateTimeFormat: { dateStyle: 'full' } }),\n enabled:\n !gridDisabled &&\n !isDateDisabled(\n date,\n minDate,\n maxDate,\n dateFilter,\n this.dateAdapter,\n disabledDates,\n disabledDaysOfWeek,\n ),\n cssClasses: dateClass ? dateClass(date, this.view) : '',\n compareValue,\n });\n cell.isToday = this.dateAdapter.sameDate(date, today);\n cell.isSelected = this.isSelected(date);\n cell.isRangeStart = this.isRangeStart(date);\n cell.isRangeEnd = this.isRangeEnd(date);\n cell.isRangeMiddle = this.isRangeMiddle(date);\n cell.isPreviewStart = this.isPreviewStart(date);\n cell.isPreviewEnd = this.isPreviewEnd(date);\n cell.isPreviewMiddle = this.isPreviewMiddle(date);\n cell.isOutOfMonth = cellMonth !== displayedMonth;\n cell.isWeekend = isWeekend(date, this.dateAdapter);\n const flashDate = this.invalidFlashDate();\n cell.isInvalidFlash = flashDate !== null && this.dateAdapter.sameDate(date, flashDate);\n days.push(cell);\n }\n return createGrid(days, DAYS_PER_WEEK);\n });\n\n readonly gridLabel: Signal<string> = computed(() => {\n const months = this.dateAdapter.getMonthNames('long');\n return `${months[this.displayMonth()]} ${this.displayYear()}`;\n });\n\n protected getActiveCompareValue(): number {\n const d = this.activeDate();\n return (\n this.dateAdapter.getYear(d) * 10000 +\n this.dateAdapter.getMonth(d) * 100 +\n this.dateAdapter.getDate(d)\n );\n }\n\n /** True when the cell's date sits in a neighbouring month (leading/trailing). */\n isOutsideMonth(cell: CalendarCell<D>): boolean {\n return this.dateAdapter.getMonth(cell.value) !== this.displayMonth();\n }\n\n onKeyNav(event: CalendarCellKeyNavEvent<D>): void {\n const currentDate = event.cell.value;\n let newDate: D | null = null;\n\n switch (event.direction) {\n case 'left':\n newDate = this.dateAdapter.addDays(currentDate, -1);\n break;\n case 'right':\n newDate = this.dateAdapter.addDays(currentDate, 1);\n break;\n case 'up':\n newDate = this.dateAdapter.addDays(currentDate, -DAYS_PER_WEEK);\n break;\n case 'down':\n newDate = this.dateAdapter.addDays(currentDate, DAYS_PER_WEEK);\n break;\n case 'home': {\n const dow = this.dateAdapter.getDayOfWeek(currentDate);\n const first = this.firstDayOfWeek();\n const diff = (dow - first + DAYS_PER_WEEK) % DAYS_PER_WEEK;\n newDate = this.dateAdapter.addDays(currentDate, -diff);\n break;\n }\n case 'end': {\n const dow = this.dateAdapter.getDayOfWeek(currentDate);\n const first = this.firstDayOfWeek();\n const daysUntilEnd = (6 - dow + first + DAYS_PER_WEEK) % DAYS_PER_WEEK;\n newDate = this.dateAdapter.addDays(currentDate, daysUntilEnd);\n break;\n }\n case 'pageUp':\n newDate = event.shiftKey\n ? this.dateAdapter.addYears(currentDate, -1)\n : this.dateAdapter.addMonths(currentDate, -1);\n break;\n case 'pageDown':\n newDate = event.shiftKey\n ? this.dateAdapter.addYears(currentDate, 1)\n : this.dateAdapter.addMonths(currentDate, 1);\n break;\n }\n\n if (newDate) {\n const year = this.dateAdapter.getYear(newDate);\n const month = this.dateAdapter.getMonth(newDate);\n const day = this.dateAdapter.getDate(newDate);\n const compareValue = year * 10000 + month * 100 + day;\n this.focusCell(compareValue);\n this.activeDateChange.emit(newDate);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n viewChildren,\n type Signal,\n} from '@angular/core';\nimport { CalendarCellComponent, type CalendarCellKeyNavEvent } from './calendar-cell';\nimport type { CalendarCell, CalendarViewState } from './calendar.types';\nimport { MONTHS_PER_ROW, createCalendarCell } from './calendar.types';\nimport { createGrid, isMonthDisabled } from './calendar.utils';\nimport { CalendarViewBase } from './calendar-view-base';\n\nconst MONTHS_PER_YEAR = 12;\n\n/**\n * Year view — 4×3 grid of month cells inside the active year.\n */\n@Component({\n selector: 'tw-calendar-year-view',\n imports: [CalendarCellComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `\n <div\n role=\"grid\"\n [attr.aria-label]=\"gridLabel()\"\n [attr.aria-multiselectable]=\"multiSelectable() || null\"\n [attr.aria-readonly]=\"readonlyGrid() || null\"\n (mouseleave)=\"onGridMouseLeave()\"\n >\n @for (row of cells(); track $index) {\n <div role=\"row\" class=\"grid grid-cols-4 gap-1\">\n @for (cell of row; track cell.compareValue) {\n <tw-calendar-cell\n [cell]=\"cell\"\n [view]=\"view\"\n [tabindex]=\"isActiveCell(cell) ? 0 : -1\"\n [cellTemplate]=\"cellTemplate()\"\n [attr.data-compare-value]=\"cell.compareValue\"\n (selected)=\"onCellSelected($event)\"\n (previewed)=\"onCellPreviewed($event)\"\n (keyNav)=\"onKeyNav($event)\"\n />\n }\n </div>\n }\n </div>\n `,\n})\nexport class YearViewComponent<D> extends CalendarViewBase<D> {\n protected readonly view: CalendarViewState = 'month';\n\n protected readonly cellComponents: Signal<readonly CalendarCellComponent<D>[]> =\n viewChildren<CalendarCellComponent<D>>(CalendarCellComponent);\n\n readonly displayYear: Signal<number> = computed(() =>\n this.dateAdapter.getYear(this.activeDate()),\n );\n\n readonly cells: Signal<CalendarCell<D>[][]> = computed(() => {\n const year = this.displayYear();\n const monthNames = this.dateAdapter.getMonthNames('short');\n const today = this.today();\n const todayYear = this.dateAdapter.getYear(today);\n const todayMonth = this.dateAdapter.getMonth(today);\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const dateClass = this.dateClass();\n const gridDisabled = this.disabledGrid();\n\n const months: CalendarCell<D>[] = [];\n for (let m = 0; m < MONTHS_PER_YEAR; m++) {\n const date = this.dateAdapter.create(year, m + 1, 1);\n const name = monthNames[m] ?? '';\n const cell = createCalendarCell<D>({\n value: date,\n displayValue: name,\n ariaLabel: `${name} ${year}`,\n enabled: !gridDisabled && !isMonthDisabled(year, m, minDate, maxDate, this.dateAdapter),\n cssClasses: dateClass ? dateClass(date, this.view) : '',\n compareValue: m,\n });\n cell.isToday = year === todayYear && m === todayMonth;\n cell.isSelected = this.isMonthSelected(year, m);\n cell.isRangeStart = this.isMonthRangeStart(year, m);\n cell.isRangeEnd = this.isMonthRangeEnd(year, m);\n cell.isRangeMiddle = this.isMonthRangeMiddle(year, m);\n cell.isPreviewStart = this.isMonthPreviewStart(year, m);\n cell.isPreviewEnd = this.isMonthPreviewEnd(year, m);\n cell.isPreviewMiddle = this.isMonthPreviewMiddle(year, m);\n months.push(cell);\n }\n return createGrid(months, MONTHS_PER_ROW);\n });\n\n readonly gridLabel: Signal<string> = computed(() => `${this.displayYear()}`);\n\n protected getActiveCompareValue(): number {\n return this.dateAdapter.getMonth(this.activeDate());\n }\n\n onKeyNav(event: CalendarCellKeyNavEvent<D>): void {\n const currentMonth = this.dateAdapter.getMonth(event.cell.value);\n const year = this.displayYear();\n let newDate: D | null = null;\n\n switch (event.direction) {\n case 'left':\n if (currentMonth > 0) {\n newDate = this.dateAdapter.addMonths(event.cell.value, -1);\n this.focusCell(currentMonth - 1);\n }\n break;\n case 'right':\n if (currentMonth < 11) {\n newDate = this.dateAdapter.addMonths(event.cell.value, 1);\n this.focusCell(currentMonth + 1);\n }\n break;\n case 'up':\n if (currentMonth >= MONTHS_PER_ROW) {\n newDate = this.dateAdapter.addMonths(event.cell.value, -MONTHS_PER_ROW);\n this.focusCell(currentMonth - MONTHS_PER_ROW);\n }\n break;\n case 'down':\n if (currentMonth < MONTHS_PER_YEAR - MONTHS_PER_ROW) {\n newDate = this.dateAdapter.addMonths(event.cell.value, MONTHS_PER_ROW);\n this.focusCell(currentMonth + MONTHS_PER_ROW);\n }\n break;\n case 'home':\n newDate = this.dateAdapter.create(year, 1, 1);\n this.focusCell(0);\n break;\n case 'end':\n newDate = this.dateAdapter.create(year, 12, 1);\n this.focusCell(11);\n break;\n case 'pageUp':\n newDate = this.dateAdapter.addYears(event.cell.value, event.shiftKey ? -10 : -1);\n break;\n case 'pageDown':\n newDate = this.dateAdapter.addYears(event.cell.value, event.shiftKey ? 10 : 1);\n break;\n }\n if (newDate) this.activeDateChange.emit(newDate);\n }\n\n private isMonthSelected(year: number, month: number): boolean {\n const sel = this.selected();\n if (!sel) return false;\n if (Array.isArray(sel)) {\n return sel.some(\n (d) => this.dateAdapter.getYear(d) === year && this.dateAdapter.getMonth(d) === month,\n );\n }\n if (!this.isDateRange(sel)) {\n return this.dateAdapter.getYear(sel) === year && this.dateAdapter.getMonth(sel) === month;\n }\n const r = sel;\n if (r.start && this.dateAdapter.getYear(r.start) === year && this.dateAdapter.getMonth(r.start) === month) {\n return true;\n }\n if (r.end && this.dateAdapter.getYear(r.end) === year && this.dateAdapter.getMonth(r.end) === month) {\n return true;\n }\n return false;\n }\n\n private isMonthRangeStart(year: number, month: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.start) return false;\n return this.dateAdapter.getYear(sel.start) === year && this.dateAdapter.getMonth(sel.start) === month;\n }\n\n private isMonthRangeEnd(year: number, month: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.end) return false;\n return this.dateAdapter.getYear(sel.end) === year && this.dateAdapter.getMonth(sel.end) === month;\n }\n\n private isMonthRangeMiddle(year: number, month: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.start || !sel.end) return false;\n const monthDate = this.dateAdapter.create(year, month + 1, 1);\n const startMonth = this.dateAdapter.create(\n this.dateAdapter.getYear(sel.start),\n this.dateAdapter.getMonth(sel.start) + 1,\n 1,\n );\n const endMonth = this.dateAdapter.create(\n this.dateAdapter.getYear(sel.end),\n this.dateAdapter.getMonth(sel.end) + 1,\n 1,\n );\n return (\n this.dateAdapter.compare(monthDate, startMonth) > 0 &&\n this.dateAdapter.compare(monthDate, endMonth) < 0\n );\n }\n\n private isMonthPreviewStart(year: number, month: number): boolean {\n const s = this.previewStart();\n if (!s) return false;\n return this.dateAdapter.getYear(s) === year && this.dateAdapter.getMonth(s) === month;\n }\n\n private isMonthPreviewEnd(year: number, month: number): boolean {\n const e = this.previewEnd();\n if (!e) return false;\n return this.dateAdapter.getYear(e) === year && this.dateAdapter.getMonth(e) === month;\n }\n\n private isMonthPreviewMiddle(year: number, month: number): boolean {\n const s = this.previewStart();\n const e = this.previewEnd();\n if (!s || !e) return false;\n const monthDate = this.dateAdapter.create(year, month + 1, 1);\n const startMonth = this.dateAdapter.create(\n this.dateAdapter.getYear(s),\n this.dateAdapter.getMonth(s) + 1,\n 1,\n );\n const endMonth = this.dateAdapter.create(\n this.dateAdapter.getYear(e),\n this.dateAdapter.getMonth(e) + 1,\n 1,\n );\n return (\n this.dateAdapter.compare(monthDate, startMonth) > 0 &&\n this.dateAdapter.compare(monthDate, endMonth) < 0\n );\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n viewChildren,\n type Signal,\n} from '@angular/core';\nimport { CalendarCellComponent, type CalendarCellKeyNavEvent } from './calendar-cell';\nimport type { CalendarCell, CalendarViewState } from './calendar.types';\nimport { YEARS_PER_PAGE, YEARS_PER_ROW, createCalendarCell } from './calendar.types';\nimport { createGrid, getMultiYearStartingYear, isYearDisabled } from './calendar.utils';\nimport { CalendarViewBase } from './calendar-view-base';\n\n/** Default years per page — kept until Phase 7 introduces the `yearsPerPage` input. */\nexport const yearsPerPage = YEARS_PER_PAGE;\n\n/**\n * Year view — 4×6 grid (24 years by default). A user clicks a year to drill\n * down to the month-of-year view. In the spec vocabulary this is the\n * `'year'` view state (§7.4, §22).\n */\n@Component({\n selector: 'tw-calendar-years-view',\n imports: [CalendarCellComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'block' },\n template: `\n <div\n role=\"grid\"\n [attr.aria-label]=\"gridLabel()\"\n [attr.aria-multiselectable]=\"multiSelectable() || null\"\n [attr.aria-readonly]=\"readonlyGrid() || null\"\n (mouseleave)=\"onGridMouseLeave()\"\n >\n @for (row of cells(); track $index) {\n <div role=\"row\" class=\"grid grid-cols-4 gap-1\">\n @for (cell of row; track cell.compareValue) {\n <tw-calendar-cell\n [cell]=\"cell\"\n [view]=\"view\"\n [tabindex]=\"isActiveCell(cell) ? 0 : -1\"\n [cellTemplate]=\"cellTemplate()\"\n [attr.data-compare-value]=\"cell.compareValue\"\n (selected)=\"onCellSelected($event)\"\n (previewed)=\"onCellPreviewed($event)\"\n (keyNav)=\"onKeyNav($event)\"\n />\n }\n </div>\n }\n </div>\n `,\n})\nexport class YearsViewComponent<D> extends CalendarViewBase<D> {\n protected readonly view: CalendarViewState = 'year';\n\n protected readonly cellComponents: Signal<readonly CalendarCellComponent<D>[]> =\n viewChildren<CalendarCellComponent<D>>(CalendarCellComponent);\n\n readonly startYear: Signal<number> = computed(() =>\n getMultiYearStartingYear(this.dateAdapter.getYear(this.activeDate()), YEARS_PER_PAGE),\n );\n\n readonly endYear: Signal<number> = computed(() => this.startYear() + YEARS_PER_PAGE - 1);\n\n readonly cells: Signal<CalendarCell<D>[][]> = computed(() => {\n const start = this.startYear();\n const today = this.today();\n const todayYear = this.dateAdapter.getYear(today);\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const dateClass = this.dateClass();\n const gridDisabled = this.disabledGrid();\n\n const years: CalendarCell<D>[] = [];\n for (let i = 0; i < YEARS_PER_PAGE; i++) {\n const year = start + i;\n const date = this.dateAdapter.create(year, 1, 1);\n const label = this.dateAdapter.getYearName(date);\n const cell = createCalendarCell<D>({\n value: date,\n displayValue: label,\n ariaLabel: label,\n enabled: !gridDisabled && !isYearDisabled(year, minDate, maxDate, this.dateAdapter),\n cssClasses: dateClass ? dateClass(date, this.view) : '',\n compareValue: year,\n });\n cell.isToday = year === todayYear;\n cell.isSelected = this.isYearSelected(year);\n cell.isRangeStart = this.isYearRangeStart(year);\n cell.isRangeEnd = this.isYearRangeEnd(year);\n cell.isRangeMiddle = this.isYearRangeMiddle(year);\n cell.isPreviewStart = this.isYearPreviewStart(year);\n cell.isPreviewEnd = this.isYearPreviewEnd(year);\n cell.isPreviewMiddle = this.isYearPreviewMiddle(year);\n years.push(cell);\n }\n return createGrid(years, YEARS_PER_ROW);\n });\n\n readonly gridLabel: Signal<string> = computed(() => `${this.startYear()} – ${this.endYear()}`);\n\n protected getActiveCompareValue(): number {\n return this.dateAdapter.getYear(this.activeDate());\n }\n\n onKeyNav(event: CalendarCellKeyNavEvent<D>): void {\n const currentYear = this.dateAdapter.getYear(event.cell.value);\n const start = this.startYear();\n const end = this.endYear();\n const indexInPage = currentYear - start;\n let newDate: D | null = null;\n\n switch (event.direction) {\n case 'left':\n if (currentYear > start) {\n newDate = this.dateAdapter.addYears(event.cell.value, -1);\n this.focusCell(currentYear - 1);\n }\n break;\n case 'right':\n if (currentYear < end) {\n newDate = this.dateAdapter.addYears(event.cell.value, 1);\n this.focusCell(currentYear + 1);\n }\n break;\n case 'up':\n if (indexInPage >= YEARS_PER_ROW) {\n newDate = this.dateAdapter.addYears(event.cell.value, -YEARS_PER_ROW);\n this.focusCell(currentYear - YEARS_PER_ROW);\n }\n break;\n case 'down':\n if (indexInPage < YEARS_PER_PAGE - YEARS_PER_ROW) {\n newDate = this.dateAdapter.addYears(event.cell.value, YEARS_PER_ROW);\n this.focusCell(currentYear + YEARS_PER_ROW);\n }\n break;\n case 'home':\n newDate = this.dateAdapter.create(start, 1, 1);\n this.focusCell(start);\n break;\n case 'end':\n newDate = this.dateAdapter.create(end, 1, 1);\n this.focusCell(end);\n break;\n case 'pageUp':\n newDate = this.dateAdapter.addYears(\n event.cell.value,\n event.shiftKey ? -YEARS_PER_PAGE * 10 : -YEARS_PER_PAGE,\n );\n break;\n case 'pageDown':\n newDate = this.dateAdapter.addYears(\n event.cell.value,\n event.shiftKey ? YEARS_PER_PAGE * 10 : YEARS_PER_PAGE,\n );\n break;\n }\n if (newDate) this.activeDateChange.emit(newDate);\n }\n\n private isYearSelected(year: number): boolean {\n const sel = this.selected();\n if (!sel) return false;\n if (Array.isArray(sel)) {\n return sel.some((d) => this.dateAdapter.getYear(d) === year);\n }\n if (!this.isDateRange(sel)) {\n return this.dateAdapter.getYear(sel) === year;\n }\n const r = sel;\n if (r.start && this.dateAdapter.getYear(r.start) === year) return true;\n if (r.end && this.dateAdapter.getYear(r.end) === year) return true;\n return false;\n }\n\n private isYearRangeStart(year: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.start) return false;\n return this.dateAdapter.getYear(sel.start) === year;\n }\n\n private isYearRangeEnd(year: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.end) return false;\n return this.dateAdapter.getYear(sel.end) === year;\n }\n\n private isYearRangeMiddle(year: number): boolean {\n const sel = this.selected();\n if (!sel || !this.isDateRange(sel) || !sel.start || !sel.end) return false;\n const startYear = this.dateAdapter.getYear(sel.start);\n const endYear = this.dateAdapter.getYear(sel.end);\n return year > startYear && year < endYear;\n }\n\n private isYearPreviewStart(year: number): boolean {\n const s = this.previewStart();\n return s !== null && this.dateAdapter.getYear(s) === year;\n }\n\n private isYearPreviewEnd(year: number): boolean {\n const e = this.previewEnd();\n return e !== null && this.dateAdapter.getYear(e) === year;\n }\n\n private isYearPreviewMiddle(year: number): boolean {\n const s = this.previewStart();\n const e = this.previewEnd();\n if (!s || !e) return false;\n return year > this.dateAdapter.getYear(s) && year < this.dateAdapter.getYear(e);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\n\n/** Outcome returned by a selection strategy's `select` call. */\nexport interface SelectionResult<D, S> {\n /** The new selection value after applying the click. */\n readonly selection: S;\n /** Whether the selection is committed. */\n readonly isComplete: boolean;\n /** Optional range used by the preview layer while the selection is in progress. */\n readonly preview?: DateRange<D> | null;\n}\n\n/**\n * Pluggable selection behaviour. Provide via `TW_CALENDAR_SELECTION_STRATEGY` to\n * customise how clicks mutate the calendar's `selected` value.\n *\n * `D` is the date type understood by the active `DateAdapter`.\n * `S` is the shape of the `selected` value — `D | null` for single,\n * `DateRange<D> | null` for range / week, `readonly D[]` for multi.\n */\nexport abstract class CalendarSelectionStrategy<D, S = unknown> {\n /** Produces the new selection after a click on `date`. */\n abstract select(date: D, current: S): SelectionResult<D, S>;\n\n /** Returns the range to highlight while the pointer hovers `active`. */\n abstract createPreview(active: D | null, current: S): DateRange<D> | null;\n\n /** Whether `date` should render as selected. */\n abstract isSelected(date: D, current: S): boolean;\n\n /** Whether `date` is the start of a committed range. */\n abstract isRangeStart(date: D, current: S): boolean;\n\n /** Whether `date` is the end of a committed range. */\n abstract isRangeEnd(date: D, current: S): boolean;\n\n /** Whether `date` sits strictly between the endpoints of a committed range. */\n abstract isRangeMiddle(date: D, current: S): boolean;\n}\n\n/** Injection token for the active selection strategy. */\nexport const TW_CALENDAR_SELECTION_STRATEGY = new InjectionToken<\n CalendarSelectionStrategy<unknown, unknown>\n>('tw-calendar/SelectionStrategy');\n\n/**\n * @deprecated Renamed to {@link TW_CALENDAR_SELECTION_STRATEGY} for consistency\n * with every other ngx-tw injection token. This is the *same token instance*,\n * not a copy — providing under either name and injecting under the other\n * resolves — so the rename is safe to adopt incrementally. Removed in the next\n * major.\n */\nexport const CALENDAR_SELECTION_STRATEGY = TW_CALENDAR_SELECTION_STRATEGY;\n","import { inject, Injectable } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\nimport { type DateAdapter, TW_DATE_ADAPTER } from '../date-adapter';\nimport { CalendarSelectionStrategy, type SelectionResult } from './selection-strategy';\n\n/**\n * Single-date selection. Every click commits a new selection immediately.\n * No preview range. `selected` has shape `D | null`.\n */\n@Injectable()\nexport class SingleSelectionStrategy<D> extends CalendarSelectionStrategy<D, D | null> {\n private readonly dateAdapter: DateAdapter<D> = inject(TW_DATE_ADAPTER) as DateAdapter<D>;\n\n select(date: D, _current: D | null): SelectionResult<D, D | null> {\n return { selection: date, isComplete: true };\n }\n\n createPreview(_active: D | null, _current: D | null): DateRange<D> | null {\n return null;\n }\n\n isSelected(date: D, current: D | null): boolean {\n if (!current) return false;\n return this.dateAdapter.sameDate(date, current);\n }\n\n isRangeStart(_date: D, _current: D | null): boolean {\n return false;\n }\n\n isRangeEnd(_date: D, _current: D | null): boolean {\n return false;\n }\n\n isRangeMiddle(_date: D, _current: D | null): boolean {\n return false;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\nimport { type DateAdapter, TW_DATE_ADAPTER } from '../date-adapter';\nimport { isDateInRange } from '../calendar.utils';\nimport { CalendarSelectionStrategy, type SelectionResult } from './selection-strategy';\n\n/**\n * Date-range selection.\n *\n * - First click sets the start (selection incomplete).\n * - Second click sets the end (selection complete).\n * - If the second date is before the first, endpoints are swapped.\n * - Hovering after the first click produces a preview range.\n *\n * `selected` has shape `DateRange<D> | null`.\n */\n@Injectable()\nexport class RangeSelectionStrategy<D> extends CalendarSelectionStrategy<D, DateRange<D> | null> {\n private readonly dateAdapter: DateAdapter<D> = inject(TW_DATE_ADAPTER) as DateAdapter<D>;\n\n select(date: D, current: DateRange<D> | null): SelectionResult<D, DateRange<D> | null> {\n // No start yet, or the previous range is already complete — start over.\n if (!current || (current.start && current.end)) {\n return { selection: { start: date, end: null }, isComplete: false };\n }\n const start = current.start!;\n let rangeStart: D;\n let rangeEnd: D;\n if (this.dateAdapter.compare(date, start) < 0) {\n rangeStart = date;\n rangeEnd = start;\n } else {\n rangeStart = start;\n rangeEnd = date;\n }\n return { selection: { start: rangeStart, end: rangeEnd }, isComplete: true };\n }\n\n createPreview(active: D | null, current: DateRange<D> | null): DateRange<D> | null {\n if (!active || !current?.start || current.end) return null;\n const s = current.start;\n if (this.dateAdapter.compare(active, s) < 0) {\n return { start: active, end: s };\n }\n return { start: s, end: active };\n }\n\n isSelected(date: D, current: DateRange<D> | null): boolean {\n if (!current) return false;\n if (current.start && this.dateAdapter.sameDate(date, current.start)) return true;\n if (current.end && this.dateAdapter.sameDate(date, current.end)) return true;\n return false;\n }\n\n isRangeStart(date: D, current: DateRange<D> | null): boolean {\n if (!current?.start) return false;\n return this.dateAdapter.sameDate(date, current.start);\n }\n\n isRangeEnd(date: D, current: DateRange<D> | null): boolean {\n if (!current?.end) return false;\n return this.dateAdapter.sameDate(date, current.end);\n }\n\n isRangeMiddle(date: D, current: DateRange<D> | null): boolean {\n if (!current?.start || !current?.end) return false;\n return (\n isDateInRange(date, current.start, current.end, this.dateAdapter) &&\n !this.isRangeStart(date, current) &&\n !this.isRangeEnd(date, current)\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\nimport { type DateAdapter, TW_DATE_ADAPTER } from '../date-adapter';\nimport { CalendarSelectionStrategy, type SelectionResult } from './selection-strategy';\n\n/**\n * Multi-date selection.\n *\n * - Each click toggles the date in/out of the selection array.\n * - Each click commits immediately (no intermediate preview).\n * - `selected` has shape `D[]`.\n */\n@Injectable()\nexport class MultiSelectionStrategy<D> extends CalendarSelectionStrategy<D, D[]> {\n private readonly dateAdapter: DateAdapter<D> = inject(TW_DATE_ADAPTER) as DateAdapter<D>;\n\n select(date: D, current: D[]): SelectionResult<D, D[]> {\n const existing = current ?? [];\n const index = existing.findIndex((d) => this.dateAdapter.sameDate(d, date));\n const next =\n index >= 0\n ? [...existing.slice(0, index), ...existing.slice(index + 1)]\n : [...existing, date];\n return { selection: next, isComplete: true };\n }\n\n createPreview(_active: D | null, _current: D[]): DateRange<D> | null {\n return null;\n }\n\n isSelected(date: D, current: D[]): boolean {\n return (current ?? []).some((d) => this.dateAdapter.sameDate(d, date));\n }\n\n isRangeStart(_date: D, _current: D[]): boolean {\n return false;\n }\n\n isRangeEnd(_date: D, _current: D[]): boolean {\n return false;\n }\n\n isRangeMiddle(_date: D, _current: D[]): boolean {\n return false;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport type { DateRange } from '../calendar.types';\nimport { type DateAdapter, TW_DATE_ADAPTER } from '../date-adapter';\nimport { isDateInRange } from '../calendar.utils';\nimport { CalendarSelectionStrategy, type SelectionResult } from './selection-strategy';\n\n/**\n * Week selection.\n *\n * - Any click selects the entire week containing that day.\n * - Week bounds use `DateAdapter.getFirstDayOfWeek()`.\n * - Each click commits immediately.\n * - Hovering previews the week the cursor is in.\n *\n * `selected` has shape `DateRange<D> | null`.\n */\n@Injectable()\nexport class WeekSelectionStrategy<D> extends CalendarSelectionStrategy<D, DateRange<D> | null> {\n private readonly dateAdapter: DateAdapter<D> = inject(TW_DATE_ADAPTER) as DateAdapter<D>;\n\n select(date: D, _current: DateRange<D> | null): SelectionResult<D, DateRange<D> | null> {\n return { selection: this.weekRange(date), isComplete: true };\n }\n\n createPreview(active: D | null, _current: DateRange<D> | null): DateRange<D> | null {\n if (!active) return null;\n return this.weekRange(active);\n }\n\n isSelected(date: D, current: DateRange<D> | null): boolean {\n if (!current?.start || !current?.end) return false;\n return isDateInRange(date, current.start, current.end, this.dateAdapter);\n }\n\n isRangeStart(date: D, current: DateRange<D> | null): boolean {\n if (!current?.start) return false;\n return this.dateAdapter.sameDate(date, current.start);\n }\n\n isRangeEnd(date: D, current: DateRange<D> | null): boolean {\n if (!current?.end) return false;\n return this.dateAdapter.sameDate(date, current.end);\n }\n\n isRangeMiddle(date: D, current: DateRange<D> | null): boolean {\n if (!current?.start || !current?.end) return false;\n return (\n this.isSelected(date, current) &&\n !this.isRangeStart(date, current) &&\n !this.isRangeEnd(date, current)\n );\n }\n\n private weekRange(date: D): DateRange<D> {\n const dow = this.dateAdapter.getDayOfWeek(date);\n const first = this.dateAdapter.getFirstDayOfWeek();\n const daysToSubtract = (dow - first + 7) % 7;\n const start = this.dateAdapter.addDays(date, -daysToSubtract);\n const end = this.dateAdapter.addDays(start, 6);\n return { start, end };\n }\n}\n","import { type Provider, type Type } from '@angular/core';\nimport {\n type CalendarSelectionStrategy,\n TW_CALENDAR_SELECTION_STRATEGY,\n} from './selection-strategy';\nimport { SingleSelectionStrategy } from './single-selection-strategy';\nimport { RangeSelectionStrategy } from './range-selection-strategy';\nimport { MultiSelectionStrategy } from './multi-selection-strategy';\nimport { WeekSelectionStrategy } from './week-selection-strategy';\n\n/** Provides single-date selection (default behaviour). */\nexport function provideSingleSelectionStrategy(): Provider {\n return { provide: TW_CALENDAR_SELECTION_STRATEGY, useClass: SingleSelectionStrategy };\n}\n\n/** Provides two-click date-range selection. */\nexport function provideRangeSelectionStrategy(): Provider {\n return { provide: TW_CALENDAR_SELECTION_STRATEGY, useClass: RangeSelectionStrategy };\n}\n\n/** Provides toggle-based multi-date selection. */\nexport function provideMultiSelectionStrategy(): Provider {\n return { provide: TW_CALENDAR_SELECTION_STRATEGY, useClass: MultiSelectionStrategy };\n}\n\n/** Provides week-at-a-time selection. */\nexport function provideWeekSelectionStrategy(): Provider {\n return { provide: TW_CALENDAR_SELECTION_STRATEGY, useClass: WeekSelectionStrategy };\n}\n\n/** Provides an arbitrary custom selection strategy. */\nexport function provideCalendarSelectionStrategy<D, S>(\n strategy: Type<CalendarSelectionStrategy<D, S>>,\n): Provider {\n return { provide: TW_CALENDAR_SELECTION_STRATEGY, useClass: strategy };\n}\n","import {\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 LOCALE_ID,\n type OnInit,\n output,\n runInInjectionContext,\n signal,\n untracked,\n viewChildren,\n type InputSignal,\n type OutputEmitterRef,\n type Signal,\n type TemplateRef,\n type WritableSignal,\n} from '@angular/core';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n type AbstractControl,\n type ControlValueAccessor,\n FormResetEvent,\n NgControl,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport { tv } from 'tailwind-variants';\nimport { CalendarHeaderComponent } from './calendar-header';\nimport { CalendarIntl } from './calendar-intl';\nimport type {\n CalendarCell,\n CalendarConstraints,\n CalendarMode,\n CalendarOverlayState,\n CalendarSelectionState,\n CalendarValue,\n CalendarViewState,\n DateClassFn,\n DateFilterFn,\n DateRange,\n DisabledDates,\n MaxSelectionBehavior,\n ModeChangeEvent,\n RangeClickBehavior,\n RangePreviewEvent,\n ResetBehavior,\n SelectionClearedEvent,\n SelectionCompleteEvent,\n ViewChangeEvent,\n} from './calendar.types';\nimport { emptyCalendarValue, YEARS_PER_PAGE } from './calendar.types';\nimport type { RangeBehaviorConfig } from '@cdevhub/ngx-tw/core';\nimport {\n deriveSelectionStateFromValue,\n isEmptyCalendarValue,\n isPartialRangeValue,\n matchesModeShape,\n} from './calendar-cva-utils';\nimport { calendarValidator } from './calendar-validators';\nimport { type DateAdapter, TW_DATE_ADAPTER } from './date-adapter';\nimport { MonthViewComponent } from './month-view';\nimport { YearViewComponent } from './year-view';\nimport { YearsViewComponent } from './multi-year-view';\nimport {\n getMultiYearStartingYear,\n isMonthDisabled,\n isYearDisabled,\n rangeCrossesDisabled,\n rangeLengthDays,\n} from './calendar.utils';\nimport {\n type CalendarSelectionStrategy,\n TW_CALENDAR_SELECTION_STRATEGY,\n MultiSelectionStrategy,\n RangeSelectionStrategy,\n SingleSelectionStrategy,\n} from './selection';\n\nconst calendarVariants = tv(\n {\n slots: {\n root: 'inline-block p-2 bg-surface text-fg',\n months: '',\n },\n variants: {\n bordered: {\n true: { root: 'rounded-lg shadow-sm border border-border' },\n false: {},\n },\n columns: {\n 1: { months: '' },\n 2: { months: 'flex gap-3' },\n },\n // Deliberately `opacity-50` WITHOUT `pointer-events-none`, which is the\n // pairing CLAUDE.md's disabled table otherwise prefers. Cells must keep\n // receiving mouse events: `calendar-cell.ts` dropped the native\n // `disabled` attribute precisely because browsers do not dispatch mouse\n // events on a natively-disabled button, which silently killed range\n // preview and made `focusButton()` a no-op. `pointer-events-none` here\n // reintroduces exactly that class of bug one level up. Activation is\n // already refused at three layers (the cell's `enabled` flag, the view\n // base's `onCellSelected`, and `onDateSelected`'s early return), so the\n // container needs no pointer suppression.\n disabled: {\n true: { root: 'opacity-50' },\n false: {},\n },\n },\n defaultVariants: { bordered: true, columns: 1, disabled: false },\n },\n { twMerge: true },\n);\n\n/**\n * Main calendar orchestrator. Composes the header and view components\n * (day, month, year) with view switching, navigation, focus management,\n * and the §8 internal state model. Every date operation is delegated to\n * an injected `DateAdapter` — call `provideNativeDateAdapter()` in your\n * app to bootstrap the default one.\n *\n * Generic parameters (§7.3):\n * - `M` — selection mode. Narrows `value` to the mode-specific shape.\n * - `D` — adapter date type.\n * - `TOut` — post-transformer form value type (Phase 14 wires it; until then\n * it defaults to `CalendarValue<M, D>` so forms see raw adapter values).\n */\n@Component({\n selector: 'tw-calendar',\n imports: [\n CalendarHeaderComponent,\n MonthViewComponent,\n YearViewComponent,\n YearsViewComponent,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CalendarComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CalendarComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'block',\n '[attr.aria-disabled]': 'effectiveDisabled() || null',\n '[attr.aria-readonly]': 'effectiveReadonly() || null',\n '[attr.aria-describedby]': 'effectiveAriaDescribedby() || null',\n '(focusout)': 'onBlur($event)',\n },\n template: `\n <div\n [class]=\"rootClasses()\"\n role=\"group\"\n [attr.aria-label]=\"effectiveIntl().calendarLabel\"\n >\n <tw-calendar-header\n [periodLabel]=\"periodLabel()\"\n [periodAriaLabel]=\"periodAriaLabel()\"\n [prevAriaLabel]=\"prevAriaLabel()\"\n [nextAriaLabel]=\"nextAriaLabel()\"\n [prevDisabled]=\"prevDisabled() || effectiveDisabled()\"\n [nextDisabled]=\"nextDisabled() || effectiveDisabled()\"\n [canSwitchView]=\"viewState() !== 'year' && !effectiveDisabled()\"\n (prevClicked)=\"onPrevClicked()\"\n (nextClicked)=\"onNextClicked()\"\n (periodClicked)=\"onPeriodClicked()\"\n />\n\n <ng-content select=\"[twCalendarPresets]\" />\n\n <!--\n View region — height-pinned so day → month → year switching never\n resizes the panel vertically. The root is inline-block, so without this\n the three views rendered 252 / 108 / 216 tall and the popup jumped on\n every view switch.\n\n min-h-63 = 252px = the day grid, the tallest view, which always renders\n a fixed 6 weeks: one h-9 weekday header row + 6 h-9 week rows. It is a\n min-*, never h-*, so a taller consumer cell template can still grow.\n The number is derived from the cell geometry in calendar-cell.ts —\n change a cell's h-* and this has to be recomputed, or the tallest view\n starts overflowing it.\n\n Stock spacing utility on purpose: a --width-calendar-* theme token was\n tried and deleted, because tailwind-merge cannot collapse custom-token\n classes and consumer overrides silently stop winning\n (docs/vertical-rhythm.md section 1).\n\n Width is NOT pinned either, and no longer needs to be. All three views\n compute to the same 252px intrinsic width, so the panel holds one width\n across view switches on its own: the day grid is grid-cols-7 gap-0 at\n 7 x 36, and the month and year grids are grid-cols-4 gap-1 at 4 x 60\n plus 3 x 4. The cell widths that produce this live in the view variant\n in calendar-cell.ts. They used to measure 252 / 268 / 236.\n\n A min-w on this wrapper was the rejected alternative: it redistributes\n the day grid's grid-cols-7 into fractional columns (268/7 = 38.28px)\n while the day button stays 36px, which pushes the range wrapper's\n rounded-l-full / rounded-r-full cap ~1px past the selected endpoint pill\n at every range boundary. Equalizing through the month and year cell\n widths instead leaves the day view untouched, so the pill and its\n wrapper still coincide exactly.\n\n Still unequal in 2-column mode: the day case renders two month grids\n side by side, 2 x 252 plus a gap-3, while the month and year views\n render a single grid. Cell widths cannot express that.\n -->\n <div class=\"min-h-63\">\n @switch (viewState()) {\n @case ('day') {\n <div [class]=\"monthsClasses()\">\n <tw-calendar-month-view\n [activeDate]=\"activeDate()!\"\n [selected]=\"legacySelected()\"\n [minDate]=\"resolvedMinDate()\"\n [maxDate]=\"resolvedMaxDate()\"\n [dateFilter]=\"resolvedDateFilter()\"\n [disabledDates]=\"resolvedDisabledDates()\"\n [disabledDaysOfWeek]=\"resolvedDisabledDaysOfWeek()\"\n [dateClass]=\"dateClass()\"\n [cellTemplate]=\"cellTemplate()\"\n [firstDayOfWeek]=\"computedFirstDayOfWeek()\"\n [previewStart]=\"previewRange()?.start ?? null\"\n [previewEnd]=\"previewRange()?.end ?? null\"\n [invalidFlashDate]=\"invalidFlashDate()\"\n [gridIndex]=\"0\"\n [multiSelectable]=\"multiSelectable()\"\n [readonlyGrid]=\"effectiveReadonly()\"\n [disabledGrid]=\"effectiveDisabled()\"\n (selectedChange)=\"onDateSelected($event)\"\n (activeDateChange)=\"onActiveDateChange($event, 0)\"\n (previewChange)=\"onPreviewChange($event)\"\n />\n @if (effectiveMonthColumns() >= 2 && secondaryActiveDate()) {\n <tw-calendar-month-view\n [activeDate]=\"secondaryActiveDate()!\"\n [selected]=\"legacySelected()\"\n [minDate]=\"resolvedMinDate()\"\n [maxDate]=\"resolvedMaxDate()\"\n [dateFilter]=\"resolvedDateFilter()\"\n [disabledDates]=\"resolvedDisabledDates()\"\n [disabledDaysOfWeek]=\"resolvedDisabledDaysOfWeek()\"\n [dateClass]=\"dateClass()\"\n [cellTemplate]=\"cellTemplate()\"\n [firstDayOfWeek]=\"computedFirstDayOfWeek()\"\n [previewStart]=\"previewRange()?.start ?? null\"\n [previewEnd]=\"previewRange()?.end ?? null\"\n [invalidFlashDate]=\"invalidFlashDate()\"\n [gridIndex]=\"1\"\n [multiSelectable]=\"multiSelectable()\"\n [readonlyGrid]=\"effectiveReadonly()\"\n [disabledGrid]=\"effectiveDisabled()\"\n (selectedChange)=\"onDateSelected($event)\"\n (activeDateChange)=\"onActiveDateChange($event, 1)\"\n (previewChange)=\"onPreviewChange($event)\"\n />\n }\n </div>\n }\n @case ('month') {\n <tw-calendar-year-view\n [activeDate]=\"activeDate()!\"\n [selected]=\"legacySelected()\"\n [minDate]=\"resolvedMinDate()\"\n [maxDate]=\"resolvedMaxDate()\"\n [dateClass]=\"dateClass()\"\n [cellTemplate]=\"cellTemplate()\"\n [previewStart]=\"previewRange()?.start ?? null\"\n [previewEnd]=\"previewRange()?.end ?? null\"\n [multiSelectable]=\"multiSelectable()\"\n [readonlyGrid]=\"effectiveReadonly()\"\n [disabledGrid]=\"effectiveDisabled()\"\n (selectedChange)=\"onMonthSelected($event)\"\n (activeDateChange)=\"onActiveDateChange($event)\"\n (previewChange)=\"onPreviewChange($event)\"\n />\n }\n @case ('year') {\n <tw-calendar-years-view\n [activeDate]=\"activeDate()!\"\n [selected]=\"legacySelected()\"\n [minDate]=\"resolvedMinDate()\"\n [maxDate]=\"resolvedMaxDate()\"\n [dateClass]=\"dateClass()\"\n [cellTemplate]=\"cellTemplate()\"\n [previewStart]=\"previewRange()?.start ?? null\"\n [previewEnd]=\"previewRange()?.end ?? null\"\n [multiSelectable]=\"multiSelectable()\"\n [readonlyGrid]=\"effectiveReadonly()\"\n [disabledGrid]=\"effectiveDisabled()\"\n (selectedChange)=\"onYearSelected($event)\"\n (activeDateChange)=\"onActiveDateChange($event)\"\n (previewChange)=\"onPreviewChange($event)\"\n />\n }\n }\n </div>\n </div>\n `,\n})\nexport class CalendarComponent<\n M extends CalendarMode = 'single',\n D = Date,\n // `TOut` is the post-transformer form value type (§7.6). Phase 14 wires a\n // `valueTransformer` input against it; until then the transformer is the\n // identity and `TOut` defaults to `CalendarValue<M, D>`.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n TOut = CalendarValue<M, D>,\n> implements ControlValueAccessor, Validator, OnInit {\n private readonly dateAdapter: DateAdapter<D> = inject(TW_DATE_ADAPTER) as DateAdapter<D>;\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n /**\n * Resolved lazily in `ngOnInit` — eager construction-time injection creates a\n * circular dependency (NG0200): the component registers itself as both\n * `NG_VALUE_ACCESSOR` and `NG_VALIDATORS`, and `FormControlName` resolves\n * those eagerly while constructing on the same element. Looking up\n * `NgControl` after construction breaks the cycle.\n */\n private ngControl: NgControl | null = null;\n\n /** Angular's `LOCALE_ID` — used as the fallback when no `locale` input is supplied (§19.1). */\n private readonly platformLocale: string = inject(LOCALE_ID);\n\n /**\n * DI-provided default `CalendarIntl`. New'd up locally when the consumer hasn't\n * supplied one — DI defaults are merged with the per-instance `intl` input\n * via `effectiveIntl()` (§19.4 per-field merge).\n */\n private readonly injectedIntl: CalendarIntl =\n inject(CalendarIntl, { optional: true }) ?? new CalendarIntl();\n\n private readonly injectedStrategy = inject(TW_CALENDAR_SELECTION_STRATEGY, {\n optional: true,\n }) as CalendarSelectionStrategy<D, unknown> | null;\n\n private readonly monthViews = viewChildren<MonthViewComponent<D>>(MonthViewComponent);\n\n /**\n * Built-in strategies instantiated lazily in the host's injection context so\n * `inject(TW_DATE_ADAPTER)` calls inside each strategy resolve. Range state will\n * migrate into the orchestrator in Phase 6; single / multiple stay here as\n * internals (not exported) via the spec's mode union.\n */\n private readonly localStrategies: Readonly<{\n single: SingleSelectionStrategy<D>;\n range: RangeSelectionStrategy<D>;\n multiple: MultiSelectionStrategy<D>;\n }> = runInInjectionContext(this.injector, () => ({\n single: new SingleSelectionStrategy<D>(),\n range: new RangeSelectionStrategy<D>(),\n multiple: new MultiSelectionStrategy<D>(),\n }));\n\n // ---------------------------------------------------------------------------\n // Public inputs (§33.1)\n // ---------------------------------------------------------------------------\n\n /** Selection mode (§5), bound as `mode`. Changing this at runtime clears the value and emits `modeChange`. Defaults to `'single'`. */\n readonly modeInput = input<CalendarMode>('single', { alias: 'mode' });\n readonly mode: WritableSignal<CalendarMode> = linkedSignal(this.modeInput);\n\n /**\n * Consumer-bound value, bound as `value`. Shape narrows by `M`: `D | null` for\n * single, `D[]` for multiple, `{ start; end }` for range. Defaults to `null`,\n * which reads as the empty selection in every mode.\n */\n readonly valueInput = input<CalendarValue<M, D>>(null as CalendarValue<M, D>, {\n alias: 'value',\n });\n readonly value: WritableSignal<CalendarValue<M, D>> = linkedSignal(this.valueInput);\n\n /** Anchor date for the displayed view. Defaults to today on mount. */\n readonly startAt: InputSignal<D | null> = input<D | null>(null);\n\n /** Minimum selectable date. Defaults to `null` (no lower bound). */\n readonly minDate: InputSignal<D | null> = input<D | null>(null);\n\n /** Maximum selectable date. Defaults to `null` (no upper bound). */\n readonly maxDate: InputSignal<D | null> = input<D | null>(null);\n\n /** Per-date predicate — return `false` to disable. Defaults to `null` (every date passes). */\n readonly dateFilter: InputSignal<DateFilterFn<D> | null> = input<DateFilterFn<D> | null>(null);\n\n /**\n * Explicitly disabled dates (§10.1). Either an array (each entry compared via\n * `adapter.sameDate`) or a predicate returning `true` for disabled dates.\n * OR-combined with `dateFilter`, `disabledDaysOfWeek`, and `[minDate, maxDate]`.\n * Defaults to `null` (no explicitly disabled dates).\n */\n readonly disabledDates: InputSignal<DisabledDates<D> | null> =\n input<DisabledDates<D> | null>(null);\n\n /** Days of the week to disable (0=Sun … 6=Sat). Defaults to `[]` — no day-of-week disabling. */\n readonly disabledDaysOfWeek: InputSignal<readonly number[]> = input<readonly number[]>([]);\n\n /**\n * Bundle of date constraints (§10.1). Lets a consumer pass `minDate`, `maxDate`,\n * `disabledDates`, `disabledDaysOfWeek`, and `dateFilter` as a single object —\n * useful for sharing a constraint preset across multiple calendars. Each field is\n * optional. Individual inputs (`minDate`, `maxDate`, `disabledDates`,\n * `disabledDaysOfWeek`, `dateFilter`) take precedence over fields here when both\n * are set non-null. Defaults to `null` (no bundle; use the individual inputs).\n */\n readonly constraints: InputSignal<CalendarConstraints<D> | null> =\n input<CalendarConstraints<D> | null>(null);\n\n /** Minimum range length in days, inclusive (`mode: 'range'` only). Defaults to `null` — no minimum. */\n readonly minRangeLength: InputSignal<number | null> = input<number | null>(null);\n\n /** Maximum range length in days, inclusive (`mode: 'range'` only). Defaults to `null` — no maximum. */\n readonly maxRangeLength: InputSignal<number | null> = input<number | null>(null);\n\n /** Maximum number of selections in `mode: 'multiple'`. Defaults to `null` — unlimited. */\n readonly maxSelections: InputSignal<number | null> = input<number | null>(null);\n\n /**\n * What happens when the user tries to select past `maxSelections` (§10.1).\n * `'emit-limit-reached'` (default) emits `selectionLimitReached` and ignores\n * the click; `'replace-oldest'` drops the first entry; `'ignore'` is silent.\n */\n readonly maxSelectionBehavior: InputSignal<MaxSelectionBehavior> =\n input<MaxSelectionBehavior>('emit-limit-reached');\n\n /**\n * IDREF list for the form-error live region (§28.3). When set, the calendar\n * root carries `aria-describedby=\"<value>\"` so screen readers read consumer-\n * rendered error messages alongside the focused cell announcement. Defaults to\n * `null` (no error ids are contributed).\n *\n * @deprecated Superseded by the plain `aria-describedby` attribute, which now\n * feeds {@link ariaDescribedby}. Both are merged — error ids first — so an\n * existing `[errorAriaDescribedBy]` binding keeps working; it will be removed\n * in a future major.\n */\n readonly errorAriaDescribedBy: InputSignal<string | null> = input<string | null>(null);\n\n /**\n * ID of an external element that describes the calendar, supplied as the plain\n * `aria-describedby` attribute. Merged with {@link errorAriaDescribedBy} —\n * error ids are listed first so assistive tech announces them before the\n * general description. Defaults to `null`.\n */\n readonly ariaDescribedby: InputSignal<string | null> = input<string | null>(null, {\n alias: 'aria-describedby',\n });\n\n /**\n * Merged `aria-describedby` IDREF list: error ids from\n * {@link errorAriaDescribedBy} first, then the consumer's `aria-describedby`.\n * Mirrors `checkbox`'s `effectiveAriaDescribedby()`.\n *\n * @internal\n */\n readonly effectiveAriaDescribedby: Signal<string | undefined> = computed(() => {\n const merged: string[] = [];\n for (const source of [this.errorAriaDescribedBy(), this.ariaDescribedby()]) {\n if (!source) continue;\n for (const id of source.split(/\\s+/).filter(Boolean)) merged.push(id);\n }\n return merged.length ? merged.join(' ') : undefined;\n });\n\n /**\n * How `mode: 'range'` reacts to a click after a complete range (§21.2):\n * - `'restart'` (default): start a new range with the clicked cell, emit `selectionRestart`.\n * - `'nearest-edge'`: move the closer endpoint (start vs end) to the clicked date and re-commit (§21.3); emits `selectionComplete({reason: 'nearest-edge'})`.\n * - `'require-clear'`: ignore the click + flash the cell as invalid (`data-state-invalid-flash`); user must call `clear()` first.\n */\n readonly rangeClickBehavior: InputSignal<RangeClickBehavior> =\n input<RangeClickBehavior>('restart');\n\n /**\n * Range-mode behavior knobs. Accepts a partial object — unset fields use the\n * defaults documented on each property of `RangeBehaviorConfig`. Defaults:\n * `{ allowSingleDayRange: true, persistPartialRange: true, allowBackwardRange: false, disableRangesCrossingDisabledDates: false }`.\n */\n readonly rangeBehavior: InputSignal<Partial<RangeBehaviorConfig>> =\n input<Partial<RangeBehaviorConfig>>({});\n\n /** Function producing per-cell CSS classes, appended to the cell button. Defaults to `null` (no extra classes). */\n readonly dateClass: InputSignal<DateClassFn<D> | null> = input<DateClassFn<D> | null>(null);\n\n /** When `true`, the calendar renders with a border and a soft shadow. Defaults to `true` — an embedded calendar reads as a bordered panel; the special case is the borderless variant. */\n readonly bordered: InputSignal<boolean> = input<boolean>(true);\n\n /** Which view opens first. Defaults to `'day'`. Phase 8 will derive the default from `rangeGranularity`. */\n readonly startView: InputSignal<CalendarViewState> = input<CalendarViewState>('day');\n\n /** Override first day of week (0=Sun, 1=Mon). Defaults to `null` — falls back to the adapter's locale default. */\n readonly firstDayOfWeek: InputSignal<number | null> = input<number | null>(null);\n\n /**\n * Number of months to display side-by-side (1 or 2). Phase 9 replaces this with a\n * full `numberOfMonths: 1..12+` surface (§23). Defaults to `1`.\n */\n readonly monthColumns: InputSignal<number> = input<number>(1);\n\n /** Disabled state. Merged with any `setDisabledState` call from a bound form control via `effectiveDisabled`. Defaults to `false`. */\n readonly disabled: InputSignal<boolean> = input<boolean>(false);\n\n /** Read-only state (§33.1). When `true`, focus and keyboard navigation still work but selections cannot be committed. Defaults to `false`. */\n readonly readonly: InputSignal<boolean> = input<boolean>(false);\n\n /** How a form reset restores internal state (§6.5). `'full'` (default) also restores view + active-date; `'value-only'` clears the draft but leaves navigation where the user left it. */\n readonly resetBehavior: InputSignal<ResetBehavior> = input<ResetBehavior>('full');\n\n /** Optional cell-content template, rendered inside each cell button with `{ $implicit: CalendarCell<D> }`. Defaults to `null` (cells render their own display value). */\n readonly cellTemplate: InputSignal<TemplateRef<{ $implicit: CalendarCell<D> }> | null> =\n input<TemplateRef<{ $implicit: CalendarCell<D> }> | null>(null);\n\n /** Per-instance locale override. Defaults to `null` — falls back to Angular's `LOCALE_ID` (§19.1). */\n readonly locale: InputSignal<string | null> = input<string | null>(null);\n\n /**\n * Per-instance `CalendarIntl` override (§19.4). Per-field merge — unspecified\n * fields inherit the DI-provided default. Pass a partial bag (e.g. one of the\n * shipped locale packs `de`, `fr`, `es`, `pt`, `ja`) or a full custom instance.\n */\n readonly intl: InputSignal<Partial<CalendarIntl> | null> =\n input<Partial<CalendarIntl> | null>(null);\n\n // ---------------------------------------------------------------------------\n // Public outputs (§33.2). Outputs reachable only in overlay mode (opened/closed)\n // or through constraint-aware preview (rangePreview `invalidPreview`) are declared\n // here but wired in later phases per the plan.\n // ---------------------------------------------------------------------------\n\n /** Fires whenever the committed value changes (cell click, keyboard select, preset, mode change, programmatic clear). Payload is the untransformed mode-shaped `CalendarValue<M, D>` — `D | null` for single, `D[]` for multiple, `{ start, end }` for range (§7.6). */\n readonly valueChange: OutputEmitterRef<CalendarValue<M, D>> =\n output<CalendarValue<M, D>>();\n\n /** Fires on the first click of a range selection (transitions selection state to SELECTING). Payload carries the chosen `start` date. */\n readonly selectionStart: OutputEmitterRef<{ start: D }> = output<{ start: D }>();\n\n /** Fires as the hover / keyboard cursor moves during range SELECTING. Payload carries the `tentativeRange` and an `invalidPreview` flag set when the range crosses a disabled date or violates `min`/`maxRangeLength`. */\n readonly rangePreview: OutputEmitterRef<RangePreviewEvent<D>> =\n output<RangePreviewEvent<D>>();\n\n /** Fires after `valueChange` once the selection commits. Payload carries the committed `value` and a `reason` flagging the commit path (`'commit' | 'auto-swap' | 'nearest-edge' | 'preset'`). */\n readonly selectionComplete: OutputEmitterRef<SelectionCompleteEvent<M, D>> =\n output<SelectionCompleteEvent<M, D>>();\n\n /** Fires when a range selection restarts after a complete range (e.g. third click with `rangeClickBehavior='restart'`). Payload carries the new draft `start` date. */\n readonly selectionRestart: OutputEmitterRef<{ start: D }> = output<{ start: D }>();\n\n /** Fires whenever the value clears. Payload carries a `reason` distinguishing user clear, programmatic, mode change, form reset, or a disabled flip. */\n readonly selectionCleared: OutputEmitterRef<SelectionClearedEvent> =\n output<SelectionClearedEvent>();\n\n /** Fires in `mode: 'multiple'` when the user attempts to select past `maxSelections` (only with `maxSelectionBehavior: 'emit-limit-reached'`). Payload carries the configured `limit` and the rejected `attempted` date. */\n readonly selectionLimitReached: OutputEmitterRef<{ limit: number; attempted: D }> =\n output<{ limit: number; attempted: D }>();\n\n /** Fires when the selected preset changes (user click on a preset chip, or programmatic clear). Payload is the new preset id, or `null` when no preset is active. Phase 12 wires it. */\n readonly presetChange: OutputEmitterRef<string | null> = output<string | null>();\n\n /** Fires on every view transition (day ↔ month ↔ year). Payload carries `from`, `to`, and a `reason` distinguishing drill-down, drill-up, user header click, and programmatic changes. */\n readonly viewChange: OutputEmitterRef<ViewChangeEvent> = output<ViewChangeEvent>();\n\n /** Fires when keyboard navigation, mouse hover, or programmatic action moves the focused (active) cell. Payload is the new active date. */\n readonly activeDateChange: OutputEmitterRef<D> = output<D>();\n\n /** Fires when the displayed primary month changes (page-nav, drill-up, or programmatic). Payload carries the new `year` and zero-based `month`. */\n readonly monthChange: OutputEmitterRef<{ year: number; month: number }> =\n output<{ year: number; month: number }>();\n\n /** Fires when the displayed year changes (month/year-view nav or year-page scroll). Payload carries the new `year`. */\n readonly yearChange: OutputEmitterRef<{ year: number }> = output<{ year: number }>();\n\n /** Fires on every pointer click of any cell, including disabled ones — analytics only. Payload carries the clicked `date` and the underlying `PointerEvent`. Does NOT indicate a selection; subscribe to `valueChange` for that. */\n readonly cellClick: OutputEmitterRef<{ date: D; event: PointerEvent }> =\n output<{ date: D; event: PointerEvent }>();\n\n /** Fires on every pointer hover of any cell — analytics only. Payload carries the hovered `date`. Does NOT indicate a preview; subscribe to `rangePreview` for range-mode hover state. */\n readonly cellHover: OutputEmitterRef<{ date: D }> = output<{ date: D }>();\n\n /** Fires when `mode` changes at runtime, in canonical order `selectionCleared` → `modeChange` → `valueChange` (§11.2). Payload carries `{ from, to }` modes. */\n readonly modeChange: OutputEmitterRef<ModeChangeEvent> = output<ModeChangeEvent>();\n\n // ---------------------------------------------------------------------------\n // Internal writable state (§8.1)\n // ---------------------------------------------------------------------------\n\n /** In-flight draft during range SELECTING. `null` in other states (§8.1). */\n private readonly internalDraftValue: WritableSignal<{ start: D } | null> = signal(null);\n\n /** Current selection lifecycle state. */\n private readonly _selectionState: WritableSignal<CalendarSelectionState> = signal('EMPTY');\n\n /** Current view (writable for drill). Tracks `startView` until the user drills. */\n private readonly _viewState: WritableSignal<CalendarViewState> = linkedSignal(() =>\n this.startView(),\n );\n\n /**\n * Active (focused) date. `linkedSignal` so changes to `startAt` at runtime update\n * the anchor, but internal navigation can still write it independently.\n */\n private readonly _activeDate: WritableSignal<D> = linkedSignal<D>(\n () => this.startAt() ?? this.dateAdapter.today(),\n );\n\n /** Pointer-hover date (desktop only). */\n private readonly _hoveredDate: WritableSignal<D | null> = signal<D | null>(null);\n\n /** Overlay state. Always `'closed'` in inline mode until Phase 10 wires the lifecycle. */\n private readonly _overlayState: WritableSignal<CalendarOverlayState> = signal('closed');\n\n /** Preset selection id. Phase 12 writes this. */\n private readonly _selectedPresetId: WritableSignal<string | null> = signal(null);\n\n /** Raw `TOut` retained when `fromForm` throws (§7.6, Phase 14). `null` otherwise. */\n private readonly _lastInvalidFormValue: WritableSignal<unknown> = signal(null);\n\n // ---------------------------------------------------------------------------\n // Public readonly signals (§33.3)\n // ---------------------------------------------------------------------------\n\n /** Overlay lifecycle. `null` until `interaction: 'overlay'` lands in Phase 10; until then the implementation signal is exposed as `'closed'`. */\n readonly overlayState: Signal<CalendarOverlayState | null> = computed(() =>\n this._overlayState(),\n );\n\n /** Selection lifecycle per §8. */\n readonly selectionState: Signal<CalendarSelectionState> = computed(() =>\n this._selectionState(),\n );\n\n /** Active (focused) cell. `null` when the overlay is closed and no inline focus is established; in inline mode this is always the current anchor. */\n readonly activeDate: Signal<D | null> = computed(() => this._activeDate());\n\n /** Currently selected preset id. */\n readonly selectedPresetId: Signal<string | null> = computed(() => this._selectedPresetId());\n\n /** Current view state (day / month / year). */\n readonly viewState: Signal<CalendarViewState> = computed(() => this._viewState());\n\n /** Months currently rendered. Phase 9 extends this to the full responsive count. */\n readonly displayedMonths: Signal<{ year: number; month: number }[]> = computed(() => {\n const active = this._activeDate();\n const primary = {\n year: this.dateAdapter.getYear(active),\n month: this.dateAdapter.getMonth(active),\n };\n if (this.effectiveMonthColumns() < 2) return [primary];\n const secondary = this.dateAdapter.addMonths(active, 1);\n return [\n primary,\n {\n year: this.dateAdapter.getYear(secondary),\n month: this.dateAdapter.getMonth(secondary),\n },\n ];\n });\n\n /** Raw form value rejected by the transformer's `fromForm` (§7.6, §33.3). */\n readonly lastInvalidFormValue: Signal<unknown> = computed(() => this._lastInvalidFormValue());\n\n // ---------------------------------------------------------------------------\n // ControlValueAccessor + Validator (Phase 3)\n // ---------------------------------------------------------------------------\n\n private cvaOnChange: (value: unknown) => void = () => {};\n private cvaOnTouched: () => void = () => {};\n private validatorOnChange: () => void = () => {};\n\n /**\n * @internal Disabled state set by `ControlValueAccessor.setDisabledState` and\n * by the Signal Forms mode directives. OR-merged with the public `disabled`\n * input into `effectiveDisabled`.\n */\n readonly cvaDisabled: WritableSignal<boolean> = signal(false);\n\n /**\n * @internal Read-only state set by the Signal Forms mode directives. OR-merged\n * with the public `readonly` input into `effectiveReadonly`.\n */\n readonly cvaReadonly: WritableSignal<boolean> = signal(false);\n\n /** Effective disabled state — public `disabled` input OR any form-bound disabled flip. Drives `aria-disabled`. */\n readonly effectiveDisabled: Signal<boolean> = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n\n /** Effective read-only state — public `readonly` input OR any form-bound readonly flip. Drives `aria-readonly`. */\n readonly effectiveReadonly: Signal<boolean> = computed(\n () => this.readonly() || this.cvaReadonly(),\n );\n\n /**\n * @internal Resolved range-behavior config. Merges the consumer-supplied\n * `Partial<RangeBehaviorConfig>` over the documented defaults so internal\n * call sites read each field directly without re-applying fallbacks.\n */\n private readonly _resolvedRangeBehavior: Signal<RangeBehaviorConfig> = computed(\n () => ({\n allowBackwardRange: false,\n allowSingleDayRange: true,\n persistPartialRange: true,\n disableRangesCrossingDisabledDates: false,\n ...this.rangeBehavior(),\n }),\n );\n\n /** @internal Dev-mode warning guard so each mismatched write warns only once per instance. */\n private _warnedShapeMismatch = false;\n\n /** @internal Set by `writeValue`; read by the `FormResetEvent` handler so it can emit `selectionCleared({reason: 'reset'})` only when a non-empty value was on the control before the reset cleared it. */\n private _hadValueBeforeLastWrite = false;\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n if (this._invalidFlashTimer !== null) {\n clearTimeout(this._invalidFlashTimer);\n this._invalidFlashTimer = null;\n }\n });\n // Runtime `mode` changes clear state and emit the canonical event order\n // per §11.2: selectionCleared({reason: 'mode-change'}) → modeChange → valueChange.\n // We read `mode()` via `linkedSignal` in a tracked effect so the prior value\n // can be observed via the captured closure.\n let previousMode: CalendarMode = untracked(() => this.mode());\n effect(() => {\n const current = this.mode();\n if (current === previousMode) return;\n const from = previousMode;\n previousMode = current;\n untracked(() => this.onModeChanged(from, current));\n });\n\n // Re-run validation whenever mode, constraints, or the rejected-write\n // marker changes so the §10.2 codes stay in sync. Constraint change\n // revalidation per §11.4.\n effect(() => {\n this.mode();\n this._lastInvalidFormValue();\n // `resolvedConstraints` transitively tracks `minDate`, `maxDate`, `dateFilter`,\n // `disabledDates`, `disabledDaysOfWeek`, and the shorthand `constraints` input.\n this.resolvedConstraints();\n this.minRangeLength();\n this.maxRangeLength();\n this.maxSelections();\n untracked(() => this.validatorOnChange());\n });\n\n // Push the resolved locale into the date adapter so `Intl.DateTimeFormat`\n // calls (month/weekday names, format()) align with `LOCALE_ID` or the\n // per-instance `locale` override (§19.1).\n effect(() => {\n const locale = this.effectiveLocale();\n untracked(() => this.dateAdapter.setLocale(locale));\n });\n\n // Phase 6 — keyboard-driven `rangePreview` emission. While SELECTING, any\n // change to `previewRange` (which now reacts to `activeDate` via\n // `previewCursor`) emits the same `rangePreview` payload as a hover (§21.1).\n // The hover path keeps emitting from `onPreviewChange` directly; this\n // effect covers arrow-key + Home/End/PageUp/PageDown navigation.\n let lastEmittedPreviewKey: string | null = null;\n effect(() => {\n // Skip when no draft is in-flight (only meaningful during SELECTING).\n if (this._selectionState() !== 'SELECTING') {\n lastEmittedPreviewKey = null;\n return;\n }\n const pr = this.previewRange();\n if (!pr?.start || !pr?.end) return;\n // Pointer-hover already emits via `onPreviewChange`; only fire here for\n // keyboard navigation (no hover anchor present).\n if (this._hoveredDate()) return;\n const key =\n this.dateAdapter.toIso(pr.start) + '|' + this.dateAdapter.toIso(pr.end);\n if (key === lastEmittedPreviewKey) return;\n lastEmittedPreviewKey = key;\n const start = pr.start as D;\n const end = pr.end as D;\n untracked(() =>\n this.rangePreview.emit({\n tentativeRange: { start, end },\n invalidPreview: this.isPreviewInvalid(start, end),\n }),\n );\n });\n }\n\n ngOnInit(): void {\n // Lazy NgControl lookup avoids the construction-time cycle (see field\n // declaration). By `ngOnInit` the host's `FormControlName`/`NgModel` is\n // fully constructed, so resolving it here is safe.\n this.ngControl = this.injector.get(NgControl, null, {\n self: true,\n optional: true,\n });\n\n // Reset detection per §6.5 — `FormControl.reset()` emits a dedicated\n // `FormResetEvent` on its events stream (and parent `FormGroup.reset()`\n // cascades via each child's `reset()`). Only Reactive / Template-driven\n // forms expose an `AbstractControl.events` Observable; Signal Forms'\n // `FormField` provides an `InteropNgControl` shim whose `.control`\n // re-points to itself and has no `events` stream, so we feature-detect\n // before subscribing. Signal Forms reset is handled via the field's\n // value-signal flow, not this event.\n const ctrl = this.ngControl?.control as AbstractControl | undefined;\n if (ctrl?.events) {\n ctrl.events.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n if (event instanceof FormResetEvent) {\n this.handleFormReset();\n }\n });\n }\n }\n\n /** @internal `ControlValueAccessor` — writes a value from a reactive / template-driven form. Wrong-shape writes preserve the prior value per §7.2. Programmatic writes during SELECTING discard the draft per §11.1. */\n writeValue(incoming: unknown): void {\n this._hadValueBeforeLastWrite = !isEmptyCalendarValue(this.value());\n const mode = this.mode() as M;\n\n // Phase 6 — programmatic write during SELECTING discards the in-flight draft.\n // Detect BEFORE we touch state so we can fire `selectionCleared` exactly once\n // when the draft existed, regardless of which branch below handles the write.\n const wasSelecting =\n this._selectionState() === 'SELECTING' && this.internalDraftValue() !== null;\n\n if (incoming === null || incoming === undefined) {\n const empty = emptyCalendarValue<M, D>(mode);\n this.value.set(empty);\n this._selectionState.set('EMPTY');\n this.internalDraftValue.set(null);\n if (wasSelecting) this.selectionCleared.emit({ reason: 'programmatic' });\n if (this._lastInvalidFormValue() !== null) {\n this._lastInvalidFormValue.set(null);\n this.validatorOnChange();\n }\n return;\n }\n\n if (!matchesModeShape(mode, incoming)) {\n if (isDevMode() && !this._warnedShapeMismatch) {\n this._warnedShapeMismatch = true;\n console.warn(\n `[tw-calendar] writeValue received a value whose shape does not match mode=\"${mode}\". ` +\n `Preserving the prior value; the form control will report calendarInvalidValue. ` +\n `Received:`,\n incoming,\n );\n }\n this._lastInvalidFormValue.set(incoming);\n this.validatorOnChange();\n return;\n }\n\n // Phase 6 — reject SELECTING-shaped programmatic writes (`{ start: D, end: null }`)\n // for `mode: 'range'`; only EMPTY or COMPLETE shapes are valid form values.\n if (mode === 'range' && isPartialRangeValue(incoming)) {\n if (isDevMode() && !this._warnedShapeMismatch) {\n this._warnedShapeMismatch = true;\n console.warn(\n '[tw-calendar] writeValue received a partial range `{start, end: null}` — only fully committed ranges are valid form values. Preserving the prior value; the form control will report calendarInvalidValue.',\n incoming,\n );\n }\n this._lastInvalidFormValue.set(incoming);\n this.validatorOnChange();\n return;\n }\n\n const normalized = incoming as CalendarValue<M, D>;\n this.value.set(normalized);\n this._selectionState.set(deriveSelectionStateFromValue<M, D>(normalized));\n this.internalDraftValue.set(null);\n if (wasSelecting) this.selectionCleared.emit({ reason: 'programmatic' });\n if (this._lastInvalidFormValue() !== null) {\n this._lastInvalidFormValue.set(null);\n this.validatorOnChange();\n }\n }\n\n /** @internal `ControlValueAccessor` — registers the on-change callback. */\n registerOnChange(fn: (value: unknown) => void): void {\n this.cvaOnChange = fn;\n }\n\n /** @internal `ControlValueAccessor` — registers the touched callback. */\n registerOnTouched(fn: () => void): void {\n this.cvaOnTouched = fn;\n }\n\n /** @internal `ControlValueAccessor` — reflects the form control's disabled state through `effectiveDisabled` / `aria-disabled`. */\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n /** @internal `Validator` — runs the §10.2 validator. Phase 3 codes (`calendarRequired`, `calendarInvalidValue`) plus Phase 4 constraint codes (`calendarMinDate`, `calendarMaxDate`, `calendarDisabledDate`, `calendarRangeTooShort`, `calendarRangeTooLong`, `calendarMaxSelections`, `calendarInvalidRange`). */\n validate(control: AbstractControl): ValidationErrors | null {\n const ctx = {\n mode: this.mode() as M,\n lastInvalidFormValue: this._lastInvalidFormValue(),\n constraints: this.resolvedConstraints(),\n adapter: this.dateAdapter,\n minRangeLength: this.minRangeLength(),\n maxRangeLength: this.maxRangeLength(),\n maxSelections: this.maxSelections(),\n };\n return calendarValidator<M, D>(ctx)(control);\n }\n\n /** @internal `Validator` — registers the change callback so the form re-runs validation when internal state changes. */\n registerOnValidatorChange(fn: () => void): void {\n this.validatorOnChange = fn;\n }\n\n /** @internal Host `(focusout)` handler — fires `onTouched` when focus leaves the component (§13.6 inline path). Overlay-mode wiring is Phase 10. */\n onBlur(event: FocusEvent): void {\n const host = this.elementRef.nativeElement;\n const related = event.relatedTarget as Node | null;\n // Only fire when focus actually leaves the component tree. Focus moves\n // between cells (roving tabindex) stay inside the host and must not mark\n // the control touched.\n if (related && host.contains(related)) return;\n this.cvaOnTouched();\n }\n\n // ---------------------------------------------------------------------------\n // Derived state (kept from the prior implementation; some refined per Phase 1)\n // ---------------------------------------------------------------------------\n\n /**\n * Effective `CalendarIntl` resolved per-field over the DI default (§19.4).\n * The injected default is the base; the `intl` input overrides individual\n * fields. Unspecified fields fall through to English defaults — and so do\n * fields the consumer set explicitly to `undefined`.\n */\n readonly effectiveIntl: Signal<CalendarIntl> = computed(() => {\n const override = this.intl();\n if (!override) return this.injectedIntl;\n // Prototype copy preserves bound methods; shallow per-field overlay matches\n // the spec's per-field merge semantics.\n const merged = Object.create(\n Object.getPrototypeOf(this.injectedIntl) as object,\n ) as CalendarIntl;\n // Drop explicitly-`undefined` keys first. `Object.assign` copies own\n // enumerable properties *including* ones whose value is `undefined`, so\n // `[intl]=\"{ monthViewLabel: bundle['x'] }\"` with a missing key would blank\n // the default rather than fall through to it — and `viewSwitched()` calls\n // `.replace()` on that field directly, throwing on the next view switch.\n // Same guard as `provideCalendarIntl`.\n const overrides = Object.fromEntries(\n Object.entries(override).filter(([, value]) => value !== undefined),\n );\n Object.assign(merged, this.injectedIntl, overrides);\n return merged;\n });\n\n /** Effective locale — `locale` input wins, otherwise Angular `LOCALE_ID`. */\n readonly effectiveLocale: Signal<string> = computed(\n () => this.locale() ?? this.platformLocale,\n );\n\n /**\n * Active strategy for single/multiple/range. Injected strategies (custom) win.\n * Range state will migrate into this component in Phase 6; for now we reuse\n * the strategy for its `select` / `createPreview` / `isSelected` helpers.\n */\n readonly selectionStrategy: Signal<CalendarSelectionStrategy<D, unknown>> = computed(() => {\n if (this.injectedStrategy) return this.injectedStrategy;\n const m = this.mode();\n if (m === 'range') return this.localStrategies.range as CalendarSelectionStrategy<D, unknown>;\n if (m === 'multiple')\n return this.localStrategies.multiple as CalendarSelectionStrategy<D, unknown>;\n return this.localStrategies.single as CalendarSelectionStrategy<D, unknown>;\n });\n\n /** Computed first-day-of-week (input override wins over adapter default). */\n readonly computedFirstDayOfWeek: Signal<number> = computed(() => {\n const override = this.firstDayOfWeek();\n if (override !== null && override >= 0 && override <= 6) return override;\n return this.dateAdapter.getFirstDayOfWeek();\n });\n\n /** Resolves the configured `monthColumns` value. Range-mode consumers pass `2` explicitly. */\n readonly effectiveMonthColumns: Signal<number> = computed(() => this.monthColumns());\n\n /**\n * @internal Drives `aria-multiselectable` on every view grid. `true` when the\n * current `mode` allows more than one cell to be selected at a time\n * (`'multiple'` or `'range'`); `false` for `'single'`.\n */\n readonly multiSelectable: Signal<boolean> = computed(() => this.mode() !== 'single');\n\n /** Secondary anchor for the right-hand grid in multi-column mode. */\n readonly secondaryActiveDate: Signal<D | null> = computed(() => {\n if (this.effectiveMonthColumns() < 2) return null;\n return this.dateAdapter.addMonths(this._activeDate(), 1);\n });\n\n /**\n * Phase 6 — preview cursor. Pointer hover wins; falls back to `activeDate`\n * when SELECTING so keyboard arrow-key moves drive the same preview path\n * (§21.1, §16.1). `null` when no SELECTING draft is in-flight and pointer\n * is off-grid.\n */\n private readonly previewCursor: Signal<D | null> = computed(() => {\n const hovered = this._hoveredDate();\n if (hovered) return hovered;\n if (this._selectionState() === 'SELECTING') return this._activeDate();\n return null;\n });\n\n /**\n * Preview range. Driven by the strategy and the `previewCursor` (hover or\n * keyboard active-date during SELECTING).\n */\n readonly previewRange: Signal<DateRange<D> | null> = computed(() => {\n const strategy = this.selectionStrategy();\n const cursor = this.previewCursor();\n const source = this.strategySelection();\n return strategy.createPreview(cursor, source);\n });\n\n /**\n * Adapter-compatible view of the current selection.\n * For range: a `{ start, end }` view of either the committed value or the in-flight draft.\n * For single: the raw `D | null`.\n * For multiple: the raw `D[]`.\n *\n * Used internally to feed the legacy strategy surface while Phase 6 migrates range state.\n */\n private readonly strategySelection: Signal<unknown> = computed(() => {\n const m = this.mode();\n const v = this.value();\n if (m === 'range') {\n const draft = this.internalDraftValue();\n if (draft) return { start: draft.start, end: null };\n return v ?? null;\n }\n return v;\n });\n\n /** Adapter-compatible view exposed to the view components. */\n readonly legacySelected: Signal<D | D[] | DateRange<D> | null> = computed(\n () => this.strategySelection() as D | D[] | DateRange<D> | null,\n );\n\n private readonly variantResult = computed(() =>\n calendarVariants({\n bordered: this.bordered(),\n columns: (this.effectiveMonthColumns() >= 2 ? 2 : 1) as 1 | 2,\n disabled: this.effectiveDisabled(),\n }),\n );\n\n /** @internal */\n readonly rootClasses: Signal<string> = computed(() => this.variantResult().root());\n\n /** @internal */\n readonly monthsClasses: Signal<string> = computed(() => this.variantResult().months());\n\n private readonly monthNames: Signal<string[]> = computed(() =>\n this.dateAdapter.getMonthNames('long'),\n );\n\n /** @internal */\n readonly periodLabel: Signal<string> = computed(() => {\n const date = this._activeDate();\n const view = this._viewState();\n const year = this.dateAdapter.getYear(date);\n const month = this.dateAdapter.getMonth(date);\n\n switch (view) {\n case 'day': {\n const name = this.monthNames()[month];\n if (this.effectiveMonthColumns() >= 2) {\n const secondDate = this.secondaryActiveDate()!;\n const secondMonth = this.dateAdapter.getMonth(secondDate);\n const secondYear = this.dateAdapter.getYear(secondDate);\n const secondName = this.monthNames()[secondMonth];\n if (year === secondYear) return `${name} – ${secondName} ${year}`;\n return `${name} ${year} – ${secondName} ${secondYear}`;\n }\n return `${name} ${year}`;\n }\n case 'month':\n return `${year}`;\n case 'year': {\n const startYear = getMultiYearStartingYear(year, YEARS_PER_PAGE);\n return `${startYear} – ${startYear + YEARS_PER_PAGE - 1}`;\n }\n }\n });\n\n /** @internal */\n readonly periodAriaLabel: Signal<string> = computed(() => {\n const view = this._viewState();\n const label = this.periodLabel();\n const intl = this.effectiveIntl();\n switch (view) {\n case 'day':\n return intl.switchToMonthViewLabel(label);\n case 'month':\n return intl.switchToYearViewLabel(label);\n case 'year':\n return label;\n }\n });\n\n /** @internal */\n readonly prevAriaLabel: Signal<string> = computed(() => {\n const intl = this.effectiveIntl();\n switch (this._viewState()) {\n case 'day':\n return intl.previousMonthLabel;\n case 'month':\n return intl.previousYearLabel;\n case 'year':\n return intl.previousYearsLabel(YEARS_PER_PAGE);\n }\n });\n\n /** @internal */\n readonly nextAriaLabel: Signal<string> = computed(() => {\n const intl = this.effectiveIntl();\n switch (this._viewState()) {\n case 'day':\n return intl.nextMonthLabel;\n case 'month':\n return intl.nextYearLabel;\n case 'year':\n return intl.nextYearsLabel(YEARS_PER_PAGE);\n }\n });\n\n /** @internal */\n readonly prevDisabled: Signal<boolean> = computed(() => {\n const date = this._activeDate();\n const minDate = this.resolvedMinDate();\n if (!minDate) return false;\n const view = this._viewState();\n const year = this.dateAdapter.getYear(date);\n const month = this.dateAdapter.getMonth(date);\n switch (view) {\n case 'day': {\n const prevMonth = month === 0 ? 11 : month - 1;\n const prevYear = month === 0 ? year - 1 : year;\n return isMonthDisabled(prevYear, prevMonth, minDate, null, this.dateAdapter);\n }\n case 'month':\n return isYearDisabled(year - 1, minDate, null, this.dateAdapter);\n case 'year': {\n const startYear = getMultiYearStartingYear(year, YEARS_PER_PAGE);\n return isYearDisabled(startYear - 1, minDate, null, this.dateAdapter);\n }\n }\n });\n\n /** @internal */\n readonly nextDisabled: Signal<boolean> = computed(() => {\n const date = this._activeDate();\n const maxDate = this.resolvedMaxDate();\n if (!maxDate) return false;\n const view = this._viewState();\n const year = this.dateAdapter.getYear(date);\n const month = this.dateAdapter.getMonth(date);\n switch (view) {\n case 'day': {\n const nextMonth = month === 11 ? 0 : month + 1;\n const nextYear = month === 11 ? year + 1 : year;\n return isMonthDisabled(nextYear, nextMonth, null, maxDate, this.dateAdapter);\n }\n case 'month':\n return isYearDisabled(year + 1, null, maxDate, this.dateAdapter);\n case 'year': {\n const startYear = getMultiYearStartingYear(year, YEARS_PER_PAGE);\n return isYearDisabled(startYear + YEARS_PER_PAGE, null, maxDate, this.dateAdapter);\n }\n }\n });\n\n // ---------------------------------------------------------------------------\n // Public methods (§33.4)\n // ---------------------------------------------------------------------------\n\n /** Focuses `date` and optionally navigates the view to render it. */\n focusDate(date: D, opts?: { navigate?: boolean }): void {\n const clamped = this.dateAdapter.clampDate(date, this.resolvedMinDate(), this.resolvedMaxDate());\n if (opts?.navigate) this._activeDate.set(clamped);\n this.activeDateChange.emit(clamped);\n this.focusActiveCell();\n }\n\n /** Sets the current view state and emits a `viewChange` event. */\n setView(view: CalendarViewState): void {\n const from = this._viewState();\n if (from === view) return;\n this._viewState.set(view);\n this.viewChange.emit({ from, to: view, reason: 'programmatic' });\n }\n\n /** Navigates to a specific date (anchor). Does not emit a selection event. */\n goToDate(date: D): void {\n const clamped = this.dateAdapter.clampDate(date, this.resolvedMinDate(), this.resolvedMaxDate());\n this._activeDate.set(clamped);\n this.activeDateChange.emit(clamped);\n }\n\n /** Navigates to today. */\n goToToday(): void {\n this.goToDate(this.dateAdapter.today());\n }\n\n /** Clears the current selection. Alias: `clearSelection`. */\n clear(): void {\n if (this.effectiveReadonly()) return;\n const had = !isEmptyCalendarValue(this.value());\n const empty = emptyCalendarValue<M, D>(this.mode() as M);\n const hadPreset = this._selectedPresetId() !== null;\n this.value.set(empty);\n this.internalDraftValue.set(null);\n this._selectionState.set('EMPTY');\n if (had) this.selectionCleared.emit({ reason: 'user' });\n this.cvaOnChange(empty);\n this.valueChange.emit(empty);\n if (hadPreset) {\n this._selectedPresetId.set(null);\n this.presetChange.emit(null);\n }\n }\n\n /** Alias of `clear()` exported per §33.4 for discoverability. */\n clearSelection(): void {\n this.clear();\n }\n\n /** Resets to initial state — value + view + active date per `resetBehavior`. Phase 3 extends this with form-reset integration. */\n reset(): void {\n this.clear();\n this._viewState.set(this.startView());\n this._activeDate.set(this.startAt() ?? this.dateAdapter.today());\n }\n\n /**\n * Re-runs validation against the current constraints and cell filters.\n *\n * Call this after mutating a constraint imperatively (rather than through an\n * input binding), so the bound control's errors reflect the new rules.\n */\n revalidate(): void {\n // The comment this replaced claimed the validator did not exist yet. It\n // does — `validate()` emits the constraint codes — so the method was a\n // documented no-op sitting next to a working validator.\n this.validatorOnChange();\n }\n\n /**\n * Opens the overlay.\n *\n * @deprecated Not implemented. `tw-calendar` is inline-only today; the overlay\n * is part of the phased v1 cutover. Use `tw-date-picker` or\n * `tw-date-range-picker` for an overlay-mounted calendar. Throws in dev mode.\n */\n open(): void {\n this.warnOverlayUnsupported('open');\n }\n\n /**\n * Closes the overlay.\n *\n * @deprecated Not implemented — see {@link open}. Throws in dev mode.\n */\n close(): void {\n this.warnOverlayUnsupported('close');\n }\n\n /**\n * Toggles the overlay.\n *\n * @deprecated Not implemented — see {@link open}. Throws in dev mode.\n */\n toggle(): void {\n this.warnOverlayUnsupported('toggle');\n }\n\n /**\n * Fails loudly in development for the unimplemented overlay API.\n *\n * These three shipped as silent no-ops with JSDoc that described them as\n * working (\"Closes the overlay.\"), which Compodoc rendered straight into the\n * published API table. A consumer calling `calendar.open()` got no overlay, no\n * error, and no clue. Dev-mode throw turns that into an immediate, explainable\n * failure while leaving production builds untouched.\n */\n private warnOverlayUnsupported(method: 'open' | 'close' | 'toggle'): void {\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n throw new Error(\n `[ngx-tw] CalendarComponent.${method}() is not implemented — tw-calendar is inline-only. ` +\n `Use tw-date-picker or tw-date-range-picker for an overlay-mounted calendar.`,\n );\n }\n }\n\n /** Imperatively focuses the currently active cell. */\n focusActiveCell(): void {\n const views = this.monthViews();\n if (views.length > 0) {\n views[0].focusActiveCell();\n return;\n }\n const host = this.elementRef.nativeElement;\n (host.querySelector('button[tabindex=\"0\"]') as HTMLButtonElement | null)?.focus();\n }\n\n // ---------------------------------------------------------------------------\n // Event handlers (day grid)\n // ---------------------------------------------------------------------------\n\n /** @internal */\n onPrevClicked(): void {\n const view = this._viewState();\n const date = this._activeDate();\n const previousYear = this.dateAdapter.getYear(date);\n const previousMonth = this.dateAdapter.getMonth(date);\n let next: D;\n switch (view) {\n case 'day':\n next = this.dateAdapter.addMonths(date, -1);\n break;\n case 'month':\n next = this.dateAdapter.addYears(date, -1);\n break;\n case 'year':\n next = this.dateAdapter.addYears(date, -YEARS_PER_PAGE);\n break;\n }\n this._activeDate.set(next);\n this.activeDateChange.emit(next);\n this.emitPeriodChange(previousYear, previousMonth, view);\n this.announceNavigation('previous');\n }\n\n /** @internal */\n onNextClicked(): void {\n const view = this._viewState();\n const date = this._activeDate();\n const previousYear = this.dateAdapter.getYear(date);\n const previousMonth = this.dateAdapter.getMonth(date);\n let next: D;\n switch (view) {\n case 'day':\n next = this.dateAdapter.addMonths(date, 1);\n break;\n case 'month':\n next = this.dateAdapter.addYears(date, 1);\n break;\n case 'year':\n next = this.dateAdapter.addYears(date, YEARS_PER_PAGE);\n break;\n }\n this._activeDate.set(next);\n this.activeDateChange.emit(next);\n this.emitPeriodChange(previousYear, previousMonth, view);\n this.announceNavigation('next');\n }\n\n /** @internal — period-button click: drill up (day → month → year). */\n onPeriodClicked(): void {\n const current = this._viewState();\n if (current === 'day') {\n this._viewState.set('month');\n this.viewChange.emit({ from: current, to: 'month', reason: 'drill-up' });\n } else if (current === 'month') {\n this._viewState.set('year');\n this.viewChange.emit({ from: current, to: 'year', reason: 'drill-up' });\n }\n this.announceViewChange();\n }\n\n /** @internal — day-grid cell activation. */\n onDateSelected(date: D): void {\n if (this.effectiveDisabled()) return;\n // Read-only: keep focus + navigation but skip every commit path.\n if (this.effectiveReadonly()) {\n this._activeDate.set(date);\n this.activeDateChange.emit(date);\n return;\n }\n this._activeDate.set(date);\n this.activeDateChange.emit(date);\n\n const mode = this.mode();\n if (mode === 'range') {\n this.commitRangeClick(date);\n return;\n }\n\n if (mode === 'multiple') {\n // Phase 4 — enforce maxSelections per maxSelectionBehavior (§10.1, §33.1).\n const limit = this.maxSelections();\n const currentArr = (this.value() as unknown as D[]) ?? [];\n const isAlreadySelected = currentArr.some((d) => this.dateAdapter.sameDate(d, date));\n if (limit !== null && !isAlreadySelected && currentArr.length >= limit) {\n const behavior = this.maxSelectionBehavior();\n if (behavior === 'emit-limit-reached') {\n this.selectionLimitReached.emit({ limit, attempted: date });\n return;\n }\n if (behavior === 'replace-oldest') {\n const next = [...currentArr.slice(1), date];\n this.commitValue(next as unknown as CalendarValue<M, D>, 'commit');\n return;\n }\n // 'ignore' — silently drop the click.\n return;\n }\n }\n\n const strategy = this.selectionStrategy();\n const current = mode === 'multiple' ? ((this.value() as unknown as D[]) ?? []) : this.value();\n const result = strategy.select(date, current);\n if (result.isComplete) {\n this.commitValue(result.selection as CalendarValue<M, D>, 'commit');\n }\n }\n\n /** @internal — preview sync from pointer hover. */\n onPreviewChange(date: D | null): void {\n this._hoveredDate.set(date);\n if (date) this.cellHover.emit({ date });\n const draft = this.internalDraftValue();\n const pr = this.previewRange();\n if (draft && pr?.start && pr.end) {\n this.rangePreview.emit({\n tentativeRange: { start: pr.start, end: pr.end },\n invalidPreview: this.isPreviewInvalid(pr.start, pr.end),\n });\n }\n }\n\n /**\n * Phase 4 — `true` when a tentative range hover would commit an invalid value.\n * Reasons: crosses a disabled date, or length violates `min`/`maxRangeLength`.\n * The flag is informational — does NOT block the commit on its own (§4 default\n * is permissive). Subscribe to `rangePreview.invalidPreview` together with the\n * `calendarRangeTooShort` / `calendarRangeTooLong` validator codes to react.\n */\n private isPreviewInvalid(start: D, end: D): boolean {\n const constraints = this.resolvedConstraints();\n // Endpoints already pass `enabled` check (you can't hover a disabled cell\n // and produce a preview), so we only need to look at the interior.\n if (rangeCrossesDisabled(start, end, constraints, this.dateAdapter, false)) return true;\n const length = rangeLengthDays(start, end, this.dateAdapter);\n const min = this.minRangeLength();\n if (min !== null && length < min) return true;\n const max = this.maxRangeLength();\n if (max !== null && length > max) return true;\n return false;\n }\n\n /**\n * Resolved `minDate` — individual `minDate` input wins, then `constraints.minDate`,\n * else `null`. Used by every internal min-date reader so the shorthand input is\n * transparent to the rest of the component.\n */\n readonly resolvedMinDate: Signal<D | null> = computed(\n () => this.minDate() ?? this.constraints()?.minDate ?? null,\n );\n\n /** Resolved `maxDate` — individual input wins, then `constraints.maxDate`, else `null`. */\n readonly resolvedMaxDate: Signal<D | null> = computed(\n () => this.maxDate() ?? this.constraints()?.maxDate ?? null,\n );\n\n /** Resolved `disabledDates` — individual input wins, then `constraints.disabledDates`, else `null`. */\n readonly resolvedDisabledDates: Signal<DisabledDates<D> | null> = computed(\n () => this.disabledDates() ?? this.constraints()?.disabledDates ?? null,\n );\n\n /** Resolved `disabledDaysOfWeek` — individual input wins (when non-empty), then `constraints.disabledDaysOfWeek`, else `[]`. */\n readonly resolvedDisabledDaysOfWeek: Signal<readonly number[]> = computed(() => {\n const own = this.disabledDaysOfWeek();\n if (own.length > 0) return own;\n return this.constraints()?.disabledDaysOfWeek ?? [];\n });\n\n /** Resolved `dateFilter` — individual input wins, then `constraints.dateFilter`, else `null`. */\n readonly resolvedDateFilter: Signal<DateFilterFn<D> | null> = computed(\n () => this.dateFilter() ?? this.constraints()?.dateFilter ?? null,\n );\n\n /** Aggregated, resolved constraint inputs — passed to the resolver and validator. */\n private readonly resolvedConstraints: Signal<CalendarConstraints<D>> = computed(() => ({\n minDate: this.resolvedMinDate(),\n maxDate: this.resolvedMaxDate(),\n disabledDates: this.resolvedDisabledDates(),\n disabledDaysOfWeek: this.resolvedDisabledDaysOfWeek(),\n dateFilter: this.resolvedDateFilter(),\n }));\n\n /** @internal — month-view cell activation (drill-down to day). */\n onMonthSelected(date: D): void {\n this._activeDate.set(date);\n const from = this._viewState();\n this._viewState.set('day');\n this.activeDateChange.emit(date);\n this.viewChange.emit({ from, to: 'day', reason: 'drill-down' });\n this.announceViewChange();\n }\n\n /** @internal — years-view cell activation (drill-down to month). */\n onYearSelected(date: D): void {\n this._activeDate.set(date);\n const from = this._viewState();\n this._viewState.set('month');\n this.activeDateChange.emit(date);\n this.viewChange.emit({ from, to: 'month', reason: 'drill-down' });\n this.announceViewChange();\n }\n\n /** @internal — keyboard / programmatic active-date change from a view. */\n onActiveDateChange(date: D, gridIndex?: number): void {\n const views = this.monthViews();\n\n if (this.effectiveMonthColumns() >= 2 && views.length === 2 && gridIndex !== undefined) {\n const primaryMonth = this.dateAdapter.getMonth(this._activeDate());\n const secondaryMonth = this.dateAdapter.getMonth(this.secondaryActiveDate()!);\n const targetMonth = this.dateAdapter.getMonth(date);\n if (gridIndex === 0 && targetMonth === secondaryMonth) {\n const rightView = views[1];\n if (rightView) {\n rightView.focusCell(this.computeCompareValue(date));\n return;\n }\n }\n if (gridIndex === 1 && targetMonth === primaryMonth) {\n const leftView = views[0];\n if (leftView) {\n leftView.focusCell(this.computeCompareValue(date));\n return;\n }\n }\n }\n\n this._activeDate.set(date);\n this.activeDateChange.emit(date);\n }\n\n // ---------------------------------------------------------------------------\n // Range state machine (§21) — orchestrator-owned. Click matrix:\n // EMPTY + click → SELECTING (selectionStart)\n // SELECTING+ click → COMPLETE (selectionComplete; auto-swap unless allowBackwardRange)\n // COMPLETE + click → branches on rangeClickBehavior:\n // 'restart' → SELECTING (selectionRestart)\n // 'nearest-edge' → COMPLETE (selectionComplete reason='nearest-edge')\n // 'require-clear' → no-op + invalid-flash on the clicked cell\n // ---------------------------------------------------------------------------\n\n /** @internal Last invalidly-clicked date, cleared after ~200ms — drives `data-state-invalid-flash`. */\n private readonly _invalidFlashDate: WritableSignal<D | null> = signal<D | null>(null);\n\n /** Public read of the transient invalid-flash anchor. Views consume this and tag the matching cell. */\n readonly invalidFlashDate: Signal<D | null> = computed(() => this._invalidFlashDate());\n\n private commitRangeClick(date: D): void {\n const draft = this.internalDraftValue();\n const state = this._selectionState();\n\n // ─── COMPLETE state branch — third click after a committed range. ────────\n if (state === 'COMPLETE') {\n const behavior = this.rangeClickBehavior();\n if (behavior === 'require-clear') {\n this.flashInvalid(date);\n return;\n }\n if (behavior === 'nearest-edge') {\n this.commitNearestEdge(date);\n return;\n }\n // 'restart' (default) → fall through to SELECTING entry.\n this.enterSelecting(date, /* fromComplete */ true);\n return;\n }\n\n // ─── EMPTY → SELECTING ──────────────────────────────────────────────────\n if (state !== 'SELECTING' || !draft) {\n this.enterSelecting(date, /* fromComplete */ false);\n return;\n }\n\n // ─── SELECTING → COMPLETE: commit the range. ────────────────────────────\n const start = draft.start;\n const cmp = this.dateAdapter.compare(date, start);\n const behavior = this._resolvedRangeBehavior();\n\n // `allowSingleDayRange = false` rejects clicking the same cell twice.\n if (cmp === 0 && !behavior.allowSingleDayRange) {\n this.flashInvalid(date);\n return;\n }\n\n let rangeStart: D;\n let rangeEnd: D;\n let reason: SelectionCompleteEvent<M, D>['reason'] = 'commit';\n if (cmp < 0) {\n if (behavior.allowBackwardRange) {\n // Preserve user-clicked order; do not normalize.\n rangeStart = start;\n rangeEnd = date;\n } else {\n // §21.5 silent auto-swap — DO NOT emit selectionRestart.\n rangeStart = date;\n rangeEnd = start;\n reason = 'auto-swap';\n }\n } else {\n rangeStart = start;\n rangeEnd = date;\n }\n\n // §21.4 disable-crossing guard: if any interior date is disabled, reject.\n if (\n behavior.disableRangesCrossingDisabledDates &&\n rangeCrossesDisabled(\n rangeStart,\n rangeEnd,\n this.resolvedConstraints(),\n this.dateAdapter,\n /* includeEndpoints */ false,\n )\n ) {\n this.flashInvalid(date);\n return;\n }\n\n const committed = { start: rangeStart, end: rangeEnd } as unknown as CalendarValue<M, D>;\n this.internalDraftValue.set(null);\n this.commitValue(committed, reason);\n }\n\n /** Enters SELECTING with `date` as draft.start. Emits selectionStart or selectionRestart. */\n private enterSelecting(date: D, fromComplete: boolean): void {\n this.internalDraftValue.set({ start: date });\n this._selectionState.set('SELECTING');\n if (fromComplete) {\n this.selectionRestart.emit({ start: date });\n } else {\n this.selectionStart.emit({ start: date });\n }\n this.announceRangeStart(date);\n }\n\n /**\n * `'nearest-edge'` move (§21.3) — drag the closer endpoint of the committed\n * range to `date`. Emits `selectionComplete({reason: 'nearest-edge'})`.\n */\n private commitNearestEdge(date: D): void {\n const current = this.value() as unknown as { start: D | null; end: D | null } | null;\n if (!current?.start || !current?.end) {\n // Defensive — shouldn't reach here in COMPLETE without both endpoints.\n this.enterSelecting(date, true);\n return;\n }\n const distStart = Math.abs(this.dateAdapter.compare(date, current.start));\n const distEnd = Math.abs(this.dateAdapter.compare(date, current.end));\n let nextStart: D;\n let nextEnd: D;\n if (distStart <= distEnd) {\n // Move start; if it crosses the existing end, swap.\n if (this.dateAdapter.compare(date, current.end) > 0) {\n nextStart = current.end;\n nextEnd = date;\n } else {\n nextStart = date;\n nextEnd = current.end;\n }\n } else {\n // Move end; if it crosses the existing start, swap.\n if (this.dateAdapter.compare(date, current.start) < 0) {\n nextStart = date;\n nextEnd = current.start;\n } else {\n nextStart = current.start;\n nextEnd = date;\n }\n }\n if (\n this._resolvedRangeBehavior().disableRangesCrossingDisabledDates &&\n rangeCrossesDisabled(\n nextStart,\n nextEnd,\n this.resolvedConstraints(),\n this.dateAdapter,\n /* includeEndpoints */ false,\n )\n ) {\n this.flashInvalid(date);\n return;\n }\n const committed = { start: nextStart, end: nextEnd } as unknown as CalendarValue<M, D>;\n this.commitValue(committed, 'nearest-edge');\n }\n\n /** Pending invalid-flash clear timer; tracked so we can cancel on destroy. */\n private _invalidFlashTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** Sets the invalid-flash anchor and schedules a clear after 200ms. */\n private flashInvalid(date: D): void {\n this._invalidFlashDate.set(date);\n this.announceRejection();\n if (this._invalidFlashTimer !== null) clearTimeout(this._invalidFlashTimer);\n this._invalidFlashTimer = setTimeout(() => {\n this._invalidFlashTimer = null;\n // Only clear if we're still flashing this exact date (a new flash may have superseded).\n if (this._invalidFlashDate() === date) {\n this._invalidFlashDate.set(null);\n }\n }, 200);\n }\n\n /** Commits a value into the form + outputs with spec-ordered event emission. */\n private commitValue(\n newValue: CalendarValue<M, D>,\n reason: SelectionCompleteEvent<M, D>['reason'],\n ): void {\n this.value.set(newValue);\n this._selectionState.set('COMPLETE');\n // §8.5: at most one `valueChange` + one `selectionComplete` per user action.\n this.cvaOnChange(newValue);\n this.cvaOnTouched();\n this.valueChange.emit(newValue);\n this.selectionComplete.emit({ value: newValue, reason });\n this.announceSelectionComplete(newValue);\n }\n\n // ---------------------------------------------------------------------------\n // Form reset handling (§6.5)\n // ---------------------------------------------------------------------------\n\n /**\n * Handles a form-owned reset. Triggered when the bound `NgControl` flips\n * `pristine` back to `true` (via `FormControl.reset()` / `FormGroup.reset()`).\n * Per §6.5 the form owns the value write, so this path does NOT emit\n * `valueChange` and does NOT call `onTouched`. It emits `selectionCleared`\n * when a value was previously committed and restores UI state per\n * `resetBehavior`.\n */\n private handleFormReset(): void {\n // `writeValue` fires before `FormResetEvent`, so by the time we reach this\n // handler `this.value()` is already the reset value (typically empty).\n // `_hadValueBeforeLastWrite` is the snapshot captured at the start of\n // the preceding `writeValue` and is the correct signal for \"was there\n // anything to clear?\" per §6.5.\n const hadValue = this._hadValueBeforeLastWrite;\n this._hadValueBeforeLastWrite = false;\n const hadPreset = this._selectedPresetId() !== null;\n\n // Always clear draft / hovered / preset regardless of resetBehavior.\n this.internalDraftValue.set(null);\n this._hoveredDate.set(null);\n\n if (isEmptyCalendarValue(this.value())) {\n this._selectionState.set('EMPTY');\n }\n\n if (this.resetBehavior() === 'full') {\n this._viewState.set(this.startView());\n this._activeDate.set(this.startAt() ?? this.dateAdapter.today());\n }\n\n if (hadPreset) {\n this._selectedPresetId.set(null);\n this.presetChange.emit(null);\n }\n\n if (hadValue) {\n this.selectionCleared.emit({ reason: 'reset' });\n }\n }\n\n // ---------------------------------------------------------------------------\n // Mode change handling (§11.2)\n // ---------------------------------------------------------------------------\n\n private onModeChanged(from: CalendarMode, to: CalendarMode): void {\n const hadValue = !isEmptyCalendarValue(this.value());\n const hadPreset = this._selectedPresetId() !== null;\n\n // Canonical emit order per §11.2:\n // 1. selectionCleared({reason: 'mode-change'}) — only if a value was previously held\n // 2. presetChange(null) — only if a preset id was set\n // 3. modeChange\n // 4. valueChange (empty for new mode)\n this.internalDraftValue.set(null);\n this._selectionState.set('EMPTY');\n const empty = emptyCalendarValue<CalendarMode, D>(to) as unknown as CalendarValue<M, D>;\n this.value.set(empty);\n\n if (hadValue) {\n this.selectionCleared.emit({ reason: 'mode-change' });\n }\n if (hadPreset) {\n this._selectedPresetId.set(null);\n this.presetChange.emit(null);\n }\n this.modeChange.emit({ from, to });\n this.cvaOnChange(empty);\n this.valueChange.emit(empty);\n }\n\n // ---------------------------------------------------------------------------\n // Utility helpers\n // ---------------------------------------------------------------------------\n\n private computeCompareValue(date: D): number {\n return (\n this.dateAdapter.getYear(date) * 10000 +\n this.dateAdapter.getMonth(date) * 100 +\n this.dateAdapter.getDate(date)\n );\n }\n\n private emitPeriodChange(previousYear: number, previousMonth: number, view: CalendarViewState): void {\n const now = this._activeDate();\n const year = this.dateAdapter.getYear(now);\n const month = this.dateAdapter.getMonth(now);\n if (view === 'day' && (year !== previousYear || month !== previousMonth)) {\n this.monthChange.emit({ year, month });\n }\n if (year !== previousYear) this.yearChange.emit({ year });\n }\n\n private announceViewChange(): void {\n const intl = this.effectiveIntl();\n if (intl.skipAnnouncement) return;\n this.liveAnnouncer.announce(intl.viewSwitched(this._viewState(), this.periodLabel()), 'polite');\n }\n\n private announceNavigation(direction: 'previous' | 'next'): void {\n const intl = this.effectiveIntl();\n if (intl.skipAnnouncement) return;\n this.liveAnnouncer.announce(intl.navigatedTo(direction, this.periodLabel()), 'polite');\n }\n\n /** Announces a committed selection for AT users. Branches on mode so the message matches the §19.4 intl strings. */\n private announceSelectionComplete(value: CalendarValue<M, D>): void {\n const intl = this.effectiveIntl();\n if (intl.skipAnnouncement) return;\n const mode = this.mode();\n if (mode === 'single') {\n const single = value as D | null;\n if (!single) return;\n this.liveAnnouncer.announce(intl.selectedAnnouncement(this.formatDate(single)), 'polite');\n return;\n }\n if (mode === 'multiple') {\n const arr = (value as unknown as D[] | null) ?? [];\n this.liveAnnouncer.announce(intl.multipleSelectionAnnouncement(arr.length), 'polite');\n return;\n }\n const range = value as unknown as { start: D | null; end: D | null } | null;\n if (!range?.start || !range?.end) return;\n const length = rangeLengthDays(range.start, range.end, this.dateAdapter);\n this.liveAnnouncer.announce(\n intl.rangeUpdateAnnouncement(this.formatDate(range.start), this.formatDate(range.end), length),\n 'polite',\n );\n }\n\n /** Announces the start of a range pick for AT users. */\n private announceRangeStart(date: D): void {\n const intl = this.effectiveIntl();\n if (intl.skipAnnouncement) return;\n this.liveAnnouncer.announce(intl.rangeStartAnnouncement(this.formatDate(date)), 'polite');\n }\n\n /** Announces that a click was rejected (require-clear, disable-cross commit, single-day disallowed). */\n private announceRejection(): void {\n const intl = this.effectiveIntl();\n if (intl.skipAnnouncement) return;\n this.liveAnnouncer.announce(intl.selectionRejectedAnnouncement, 'polite');\n }\n\n /** Locale-aware long-form date format used in announcements (e.g. \"Wednesday, April 15, 2026\"). */\n private formatDate(date: D): string {\n return this.dateAdapter.format(date, { dateTimeFormat: { dateStyle: 'full' } });\n }\n\n}\n","import {\n Directive,\n effect,\n inject,\n input,\n model,\n type InputSignal,\n type ModelSignal,\n} from '@angular/core';\nimport type {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { CalendarComponent } from './calendar';\nimport type { CalendarRangeValue } from './calendar.types';\n\n/**\n * Common signal-input surface declared by the three mode-specific directives\n * per spec §6.3 / §7.3. Each directive maps the Signal Forms contract onto\n * the hosting `CalendarComponent`, so `[field]=\"form.someDate\"` drives the\n * calendar without any extra wiring.\n */\ninterface CalendarFormControlCommon {\n /** Disabled flag forwarded from the bound field. OR-merged with `disabled` on the component. */\n readonly disabled: InputSignal<boolean>;\n /** Read-only flag forwarded from the bound field. OR-merged with `readonly` on the component. */\n readonly readonly: InputSignal<boolean>;\n /** Required flag forwarded from the bound field. Surfaces `calendarRequired` when empty (§10.2). */\n readonly required: InputSignal<boolean>;\n /** Mirrors the bound field's `invalid` flag. Reserved for visual treatment (Phase 4 wires styling). */\n readonly invalid: InputSignal<boolean>;\n /** Mirrors the bound field's `hidden` flag. Consumers should guard the component with `@if` when true. */\n readonly hidden: InputSignal<boolean>;\n /** Field errors forwarded from Signal Forms for consumer-side styling. */\n readonly errors: InputSignal<readonly ValidationError.WithOptionalFieldTree[]>;\n /** Forwarded disablement reasons; surfaced for consumer-side UX (tooltips, etc.). */\n readonly disabledReasons: InputSignal<readonly WithOptionalFieldTree<DisabledReason>[]>;\n /** Two-way `touched` flag — the directive writes `true` on blur; the `Field` directive reads/writes it. */\n readonly touched: ModelSignal<boolean>;\n}\n\nfunction wireSignalFormsInputs(\n host: CalendarComponent<'single' | 'multiple' | 'range', unknown, unknown>,\n api: CalendarFormControlCommon,\n): void {\n // Mirror Signal Forms flags onto the component. Effects run in the\n // directive's injection context (constructor-created), so cleanup is\n // automatic on destroy.\n effect(() => {\n host.cvaDisabled.set(api.disabled());\n });\n effect(() => {\n host.cvaReadonly.set(api.readonly());\n });\n}\n\n/**\n * Signal Forms strict binding for `CalendarComponent` in `single` mode.\n * Implements `FormValueControl<D | null>` so `[field]=\"form.someDate\"`\n * infers `FieldTree<D | null>` with no casts.\n *\n * Applies automatically when `<tw-calendar mode=\"single\">` appears in the\n * template. When the mode attribute is omitted, consumers bind the component\n * directly — the CVA path handles reactive / template-driven forms.\n */\n// Selector matches the existing CalendarComponent input `mode=\"single\"`;\n// renaming to `twMode` would break the public API. The directive is scoped\n// to the `tw-calendar` element so the unprefixed attribute is safe.\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'tw-calendar[mode=\"single\"]',\n exportAs: 'twCalendarSingle',\n})\nexport class CalendarSingleDirective<D = Date, TOut = D | null>\n implements FormValueControl<TOut>, CalendarFormControlCommon\n{\n private readonly host = inject(CalendarComponent, { self: true }) as unknown as CalendarComponent<\n 'single',\n D,\n TOut\n >;\n\n /** Two-way value, forwarded to the hosting `CalendarComponent`. Signal Forms `Field` binds against this. */\n readonly value = this.host.value as unknown as ModelSignal<TOut>;\n\n /** Mirrors the bound field's disabled flag; Signal Forms writes it, and the host calendar disables itself when it is `true`. Defaults to `false`. */\n readonly disabled = input<boolean>(false);\n /** Mirrors the bound field's readonly flag; the host calendar renders its grids read-only when it is `true`. Defaults to `false`. */\n readonly readonly = input<boolean>(false);\n /** Mirrors the bound field's required flag. Defaults to `false`. */\n readonly required = input<boolean>(false);\n /** Mirrors the bound field's invalid flag. Defaults to `false`. */\n readonly invalid = input<boolean>(false);\n /** Mirrors the bound field's hidden flag. Defaults to `false`. */\n readonly hidden = input<boolean>(false);\n /** Mirrors the bound field's errors. Defaults to `[]` (no errors). */\n readonly errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n /** Mirrors the bound field's disablement reasons. Defaults to `[]` (none). */\n readonly disabledReasons = input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n /** Two-way `touched` flag — drives and reflects the field's touched state, flipping to `true` when the calendar loses focus after an interaction. Defaults to `false`. */\n readonly touched = model<boolean>(false);\n\n constructor() {\n wireSignalFormsInputs(\n this.host as unknown as CalendarComponent<\n 'single' | 'multiple' | 'range',\n unknown,\n unknown\n >,\n this,\n );\n }\n}\n\n/**\n * Signal Forms strict binding for `CalendarComponent` in `multiple` mode.\n * Implements `FormValueControl<D[]>`.\n */\n// See note above on the single-mode directive — same rationale.\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'tw-calendar[mode=\"multiple\"]',\n exportAs: 'twCalendarMultiple',\n})\nexport class CalendarMultipleDirective<D = Date, TOut = D[]>\n implements FormValueControl<TOut>, CalendarFormControlCommon\n{\n private readonly host = inject(CalendarComponent, { self: true }) as unknown as CalendarComponent<\n 'multiple',\n D,\n TOut\n >;\n\n /** Two-way value, forwarded to the hosting `CalendarComponent`. Signal Forms `Field` binds against this. */\n readonly value = this.host.value as unknown as ModelSignal<TOut>;\n\n /** Mirrors the bound field's disabled flag; Signal Forms writes it, and the host calendar disables itself when it is `true`. Defaults to `false`. */\n readonly disabled = input<boolean>(false);\n /** Mirrors the bound field's readonly flag; the host calendar renders its grids read-only when it is `true`. Defaults to `false`. */\n readonly readonly = input<boolean>(false);\n /** Mirrors the bound field's required flag. Defaults to `false`. */\n readonly required = input<boolean>(false);\n /** Mirrors the bound field's invalid flag. Defaults to `false`. */\n readonly invalid = input<boolean>(false);\n /** Mirrors the bound field's hidden flag. Defaults to `false`. */\n readonly hidden = input<boolean>(false);\n /** Mirrors the bound field's errors. Defaults to `[]` (no errors). */\n readonly errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n /** Mirrors the bound field's disablement reasons. Defaults to `[]` (none). */\n readonly disabledReasons = input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n /** Two-way `touched` flag — drives and reflects the field's touched state, flipping to `true` when the calendar loses focus after an interaction. Defaults to `false`. */\n readonly touched = model<boolean>(false);\n\n constructor() {\n wireSignalFormsInputs(\n this.host as unknown as CalendarComponent<\n 'single' | 'multiple' | 'range',\n unknown,\n unknown\n >,\n this,\n );\n }\n}\n\n/**\n * Signal Forms strict binding for `CalendarComponent` in `range` mode.\n * Implements `FormValueControl<{ start: D | null; end: D | null }>`.\n */\n// See note above on the single-mode directive — same rationale.\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'tw-calendar[mode=\"range\"]',\n exportAs: 'twCalendarRange',\n})\nexport class CalendarRangeDirective<D = Date, TOut = CalendarRangeValue<D>>\n implements FormValueControl<TOut>, CalendarFormControlCommon\n{\n private readonly host = inject(CalendarComponent, { self: true }) as unknown as CalendarComponent<\n 'range',\n D,\n TOut\n >;\n\n /** Two-way value, forwarded to the hosting `CalendarComponent`. Signal Forms `Field` binds against this. */\n readonly value = this.host.value as unknown as ModelSignal<TOut>;\n\n /** Mirrors the bound field's disabled flag; Signal Forms writes it, and the host calendar disables itself when it is `true`. Defaults to `false`. */\n readonly disabled = input<boolean>(false);\n /** Mirrors the bound field's readonly flag; the host calendar renders its grids read-only when it is `true`. Defaults to `false`. */\n readonly readonly = input<boolean>(false);\n /** Mirrors the bound field's required flag. Defaults to `false`. */\n readonly required = input<boolean>(false);\n /** Mirrors the bound field's invalid flag. Defaults to `false`. */\n readonly invalid = input<boolean>(false);\n /** Mirrors the bound field's hidden flag. Defaults to `false`. */\n readonly hidden = input<boolean>(false);\n /** Mirrors the bound field's errors. Defaults to `[]` (no errors). */\n readonly errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n /** Mirrors the bound field's disablement reasons. Defaults to `[]` (none). */\n readonly disabledReasons = input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n /** Two-way `touched` flag — drives and reflects the field's touched state, flipping to `true` when the calendar loses focus after an interaction. Defaults to `false`. */\n readonly touched = model<boolean>(false);\n\n constructor() {\n wireSignalFormsInputs(\n this.host as unknown as CalendarComponent<\n 'single' | 'multiple' | 'range',\n unknown,\n unknown\n >,\n this,\n );\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Marker directive for a slot positioned above the calendar grid. Used to\n * style an external preset rail; the calendar renders projected content\n * with `<ng-content select=\"[twCalendarPresets]\">`.\n */\n@Directive({\n selector: '[twCalendarPresets]',\n host: {\n class: 'flex flex-wrap items-center gap-1.5 px-2 pb-2',\n },\n})\nexport class CalendarPresetsDirective {}\n","import type { CalendarIntl } from './calendar-intl';\n\n/**\n * German (de) locale pack for the calendar's user-visible strings.\n * Pass into the `intl` input or via {@link provideCalendarIntl}. Per-field\n * merge semantics (§19.4) — unspecified fields fall back to English defaults.\n */\nexport const de: Partial<CalendarIntl> = {\n previousMonthLabel: 'Vorheriger Monat',\n nextMonthLabel: 'Naechster Monat',\n previousYearLabel: 'Vorheriges Jahr',\n nextYearLabel: 'Naechstes Jahr',\n previousYearsLabel(yearsPerPage: number): string {\n return yearsPerPage === 1 ? 'Vorheriges Jahr' : `Vorherige ${yearsPerPage} Jahre`;\n },\n nextYearsLabel(yearsPerPage: number): string {\n return yearsPerPage === 1 ? 'Naechstes Jahr' : `Naechste ${yearsPerPage} Jahre`;\n },\n todayLabel: 'Heute',\n clearLabel: 'Loeschen',\n applyLabel: 'Uebernehmen',\n openCalendarLabel: 'Kalender oeffnen',\n chooseDateLabel: 'Datum auswaehlen',\n calendarLabel: 'Kalender',\n monthViewLabel: 'Monatsansicht',\n yearViewLabel: 'Jahresansicht',\n decadeViewLabel: 'Jahrzehntansicht',\n switchToMonthViewLabel(period: string): string {\n return `${period}, klicken um zur Monatsansicht zu wechseln`;\n },\n switchToYearViewLabel(period: string): string {\n return `${period}, klicken um zur Jahresansicht zu wechseln`;\n },\n navigatedTo(direction: 'previous' | 'next', period: string): string {\n const word = direction === 'previous' ? 'vorigen' : 'naechsten';\n return `Zu ${word} ${period} navigiert`;\n },\n selectedAnnouncement(value: string): string {\n return `Ausgewaehlt: ${value}`;\n },\n rangeStartAnnouncement(start: string): string {\n return `Startdatum ausgewaehlt: ${start}. Bitte Enddatum auswaehlen.`;\n },\n rangeUpdateAnnouncement(start: string, end: string, lengthDays: number): string {\n const noun = lengthDays === 1 ? 'Tag' : 'Tage';\n return `Zeitraum ausgewaehlt: ${start} bis ${end}, ${lengthDays} ${noun}`;\n },\n requiredError: 'Bitte ein Datum auswaehlen',\n minDateError(date: string): string {\n return `Datum muss am oder nach dem ${date} liegen`;\n },\n maxDateError(date: string): string {\n return `Datum muss am oder vor dem ${date} liegen`;\n },\n invalidValueError: 'Ungueltiger Datumswert',\n invalidRangeError: 'Ungueltiger Zeitraum',\n dateFilterError: 'Dieses Datum ist nicht verfuegbar',\n parseErrorLabel: 'Ungueltiges Datumsformat',\n};\n","import type { CalendarIntl } from './calendar-intl';\n\n/**\n * French (fr) locale pack for the calendar's user-visible strings.\n * Pass into the `intl` input or via {@link provideCalendarIntl}. Per-field\n * merge semantics (§19.4) — unspecified fields fall back to English defaults.\n */\nexport const fr: Partial<CalendarIntl> = {\n previousMonthLabel: 'Mois precedent',\n nextMonthLabel: 'Mois suivant',\n previousYearLabel: 'Annee precedente',\n nextYearLabel: 'Annee suivante',\n previousYearsLabel(yearsPerPage: number): string {\n return yearsPerPage === 1 ? 'Annee precedente' : `${yearsPerPage} annees precedentes`;\n },\n nextYearsLabel(yearsPerPage: number): string {\n return yearsPerPage === 1 ? 'Annee suivante' : `${yearsPerPage} annees suivantes`;\n },\n todayLabel: \"Aujourd'hui\",\n clearLabel: 'Effacer',\n applyLabel: 'Appliquer',\n openCalendarLabel: 'Ouvrir le calendrier',\n chooseDateLabel: 'Choisir une date',\n calendarLabel: 'Calendrier',\n monthViewLabel: 'vue mensuelle',\n yearViewLabel: 'vue annuelle',\n decadeViewLabel: 'vue par decennie',\n switchToMonthViewLabel(period: string): string {\n return `${period}, cliquer pour passer a la vue mensuelle`;\n },\n switchToYearViewLabel(period: string): string {\n return `${period}, cliquer pour passer a la vue annuelle`;\n },\n navigatedTo(direction: 'previous' | 'next', period: string): string {\n const word = direction === 'previous' ? 'precedent' : 'suivant';\n return `Navigation vers ${period} ${word}`;\n },\n selectedAnnouncement(value: string): string {\n return `Selectionne : ${value}`;\n },\n rangeStartAnnouncement(start: string): string {\n return `Date de debut selectionnee : ${start}. Selectionnez la date de fin.`;\n },\n rangeUpdateAnnouncement(start: string, end: string, lengthDays: number): string {\n const noun = lengthDays === 1 ? 'jour' : 'jours';\n return `Plage selectionnee : ${start} au ${end}, ${lengthDays} ${noun}`;\n },\n requiredError: 'Veuillez selectionner une date',\n minDateError(date: string): string {\n return `La date doit etre le ${date} ou apres`;\n },\n maxDateError(date: string): string {\n return `La date doit etre le ${date} ou avant`;\n },\n invalidValueError: 'Valeur de date invalide',\n invalidRangeError: 'Plage de dates invalide',\n dateFilterError: 'Cette date n\\'est pas disponible',\n parseErrorLabel: 'Format de date invalide',\n};\n","import type { CalendarIntl } from './calendar-intl';\n\n/**\n * Spanish (es) locale pack for the calendar's user-visible strings.\n * Pass into the `intl` input or via {@link provideCalendarIntl}. Per-field\n * merge semantics (§19.4) — unspecified fields fall back to English defaults.\n */\nexport const es: Partial<CalendarIntl> = {\n previousMonthLabel: 'Mes anterior',\n nextMonthLabel: 'Mes siguiente',\n previousYearLabel: 'Ano anterior',\n nextYearLabel: 'Ano siguiente',\n previousYearsLabel(yearsPerPage: number): string {\n return yearsPerPage === 1 ? 'Ano anterior' : `${yearsPerPage} anos anteriores`;\n },\n nextYearsLabel(yearsPerPage: number): string {\n return yearsPerPage === 1 ? 'Ano siguiente' : `${yearsPerPage} anos siguientes`;\n },\n todayLabel: 'Hoy',\n clearLabel: 'Borrar',\n applyLabel: 'Aplicar',\n openCalendarLabel: 'Abrir calendario',\n chooseDateLabel: 'Elegir fecha',\n calendarLabel: 'Calendario',\n monthViewLabel: 'vista de mes',\n yearViewLabel: 'vista de ano',\n decadeViewLabel: 'vista de decada',\n switchToMonthViewLabel(period: string): string {\n return `${period}, haga clic para cambiar a la vista de mes`;\n },\n switchToYearViewLabel(period: string): string {\n return `${period}, haga clic para cambiar a la vista de ano`;\n },\n navigatedTo(direction: 'previous' | 'next', period: string): string {\n const word = direction === 'previous' ? 'anterior' : 'siguiente';\n return `Navegado al ${period} ${word}`;\n },\n selectedAnnouncement(value: string): string {\n return `Seleccionado: ${value}`;\n },\n rangeStartAnnouncement(start: string): string {\n return `Fecha de inicio seleccionada: ${start}. Ahora seleccione la fecha de fin.`;\n },\n rangeUpdateAnnouncement(start: string, end: string, lengthDays: number): string {\n const noun = lengthDays === 1 ? 'dia' : 'dias';\n return `Rango seleccionado: ${start} al ${end}, ${lengthDays} ${noun}`;\n },\n requiredError: 'Por favor seleccione una fecha',\n minDateError(date: string): string {\n return `La fecha debe ser el ${date} o posterior`;\n },\n maxDateError(date: string): string {\n return `La fecha debe ser el ${date} o anterior`;\n },\n invalidValueError: 'Valor de fecha invalido',\n invalidRangeError: 'Rango de fechas invalido',\n dateFilterError: 'Esta fecha no esta disponible',\n parseErrorLabel: 'Formato de fecha invalido',\n};\n","import type { CalendarIntl } from './calendar-intl';\n\n/**\n * Portuguese (pt) locale pack for the calendar's user-visible strings.\n * Pass into the `intl` input or via {@link provideCalendarIntl}. Per-field\n * merge semantics (§19.4) — unspecified fields fall back to English defaults.\n */\nexport const pt: Partial<CalendarIntl> = {\n previousMonthLabel: 'Mes anterior',\n nextMonthLabel: 'Proximo mes',\n previousYearLabel: 'Ano anterior',\n nextYearLabel: 'Proximo ano',\n previousYearsLabel(yearsPerPage: number): string {\n return yearsPerPage === 1 ? 'Ano anterior' : `${yearsPerPage} anos anteriores`;\n },\n nextYearsLabel(yearsPerPage: number): string {\n return yearsPerPage === 1 ? 'Proximo ano' : `Proximos ${yearsPerPage} anos`;\n },\n todayLabel: 'Hoje',\n clearLabel: 'Limpar',\n applyLabel: 'Aplicar',\n openCalendarLabel: 'Abrir calendario',\n chooseDateLabel: 'Escolher data',\n calendarLabel: 'Calendario',\n monthViewLabel: 'visao de mes',\n yearViewLabel: 'visao de ano',\n decadeViewLabel: 'visao de decada',\n switchToMonthViewLabel(period: string): string {\n return `${period}, clique para alternar para a visao de mes`;\n },\n switchToYearViewLabel(period: string): string {\n return `${period}, clique para alternar para a visao de ano`;\n },\n navigatedTo(direction: 'previous' | 'next', period: string): string {\n const word = direction === 'previous' ? 'anterior' : 'proximo';\n return `Navegou para ${period} ${word}`;\n },\n selectedAnnouncement(value: string): string {\n return `Selecionado: ${value}`;\n },\n rangeStartAnnouncement(start: string): string {\n return `Data inicial selecionada: ${start}. Selecione a data final.`;\n },\n rangeUpdateAnnouncement(start: string, end: string, lengthDays: number): string {\n const noun = lengthDays === 1 ? 'dia' : 'dias';\n return `Intervalo selecionado: ${start} a ${end}, ${lengthDays} ${noun}`;\n },\n requiredError: 'Por favor selecione uma data',\n minDateError(date: string): string {\n return `A data deve ser ${date} ou posterior`;\n },\n maxDateError(date: string): string {\n return `A data deve ser ${date} ou anterior`;\n },\n invalidValueError: 'Valor de data invalido',\n invalidRangeError: 'Intervalo de datas invalido',\n dateFilterError: 'Esta data nao esta disponivel',\n parseErrorLabel: 'Formato de data invalido',\n};\n","import type { CalendarIntl } from './calendar-intl';\n\n/**\n * Japanese (ja) locale pack for the calendar's user-visible strings.\n * Pass into the `intl` input or via {@link provideCalendarIntl}. Per-field\n * merge semantics (§19.4) — unspecified fields fall back to English defaults.\n *\n * Note: Japanese has no grammatical plural form, so plural-marked methods\n * collapse to a single form.\n */\nexport const ja: Partial<CalendarIntl> = {\n previousMonthLabel: '前月',\n nextMonthLabel: '翌月',\n previousYearLabel: '前年',\n nextYearLabel: '翌年',\n previousYearsLabel(yearsPerPage: number): string {\n return `前の${yearsPerPage}年`;\n },\n nextYearsLabel(yearsPerPage: number): string {\n return `次の${yearsPerPage}年`;\n },\n todayLabel: '今日',\n clearLabel: 'クリア',\n applyLabel: '適用',\n openCalendarLabel: 'カレンダーを開く',\n chooseDateLabel: '日付を選択',\n calendarLabel: 'カレンダー',\n monthViewLabel: '月表示',\n yearViewLabel: '年表示',\n decadeViewLabel: '10年表示',\n switchToMonthViewLabel(period: string): string {\n return `${period}、クリックして月表示に切り替え`;\n },\n switchToYearViewLabel(period: string): string {\n return `${period}、クリックして年表示に切り替え`;\n },\n navigatedTo(direction: 'previous' | 'next', period: string): string {\n const word = direction === 'previous' ? '前の' : '次の';\n return `${word}${period}に移動しました`;\n },\n selectedAnnouncement(value: string): string {\n return `選択済み: ${value}`;\n },\n rangeStartAnnouncement(start: string): string {\n return `開始日が選択されました: ${start}。終了日を選択してください。`;\n },\n rangeUpdateAnnouncement(start: string, end: string, lengthDays: number): string {\n return `期間が選択されました: ${start} から ${end}、${lengthDays}日間`;\n },\n requiredError: '日付を選択してください',\n minDateError(date: string): string {\n return `日付は${date}以降である必要があります`;\n },\n maxDateError(date: string): string {\n return `日付は${date}以前である必要があります`;\n },\n invalidValueError: '無効な日付値',\n invalidRangeError: '無効な日付範囲',\n dateFilterError: 'この日付は利用できません',\n parseErrorLabel: '無効な日付形式',\n};\n","import type { DateAdapter } from './date-adapter';\nimport type { CalendarMode, CalendarValue } from './calendar.types';\n\n/**\n * Serializes a `CalendarValue<M, D>` to a JSON-friendly shape (spec §7.5, §33.4).\n * The output mirrors the mode: a scalar ISO string for single, an array for\n * multiple, and an endpoint-preserving object for range. `null` endpoints\n * round-trip unchanged.\n *\n * This is a consumer-facing helper — the component itself does NOT auto-\n * serialize. Apps emitting ISO strings at the form-submit boundary call\n * `serializeCalendarValue(control.value, adapter)` and assign the result to\n * their backend payload.\n *\n * Typing: TypeScript cannot narrow the return type by the mode-generic without\n * the caller passing `M` explicitly; the helper is declared with overloads that\n * cover all three modes plus a broad union fallback.\n */\nexport function serializeCalendarValue<D>(\n value: CalendarValue<'single', D>,\n adapter: DateAdapter<D>,\n): string | null;\nexport function serializeCalendarValue<D>(\n value: CalendarValue<'multiple', D>,\n adapter: DateAdapter<D>,\n): string[];\nexport function serializeCalendarValue<D>(\n value: CalendarValue<'range', D>,\n adapter: DateAdapter<D>,\n): { start: string | null; end: string | null };\nexport function serializeCalendarValue<M extends CalendarMode, D>(\n value: CalendarValue<M, D>,\n adapter: DateAdapter<D>,\n): string | null | string[] | { start: string | null; end: string | null };\nexport function serializeCalendarValue<D>(\n value: unknown,\n adapter: DateAdapter<D>,\n): string | null | string[] | { start: string | null; end: string | null } {\n if (value === null || value === undefined) return null;\n if (Array.isArray(value)) {\n return value.map((d) => adapter.toIso(adapter.startOfDay(d as D)));\n }\n if (typeof value === 'object' && value !== null && 'start' in value && 'end' in value) {\n const r = value as { start: D | null; end: D | null };\n return {\n start: r.start ? adapter.toIso(adapter.startOfDay(r.start)) : null,\n end: r.end ? adapter.toIso(adapter.startOfDay(r.end)) : null,\n };\n }\n return adapter.toIso(adapter.startOfDay(value as D));\n}\n","import {\n Injectable,\n isDevMode,\n type EnvironmentProviders,\n type Provider,\n makeEnvironmentProviders,\n} from '@angular/core';\nimport { DateAdapter, TW_DATE_ADAPTER, type TwDateNameStyle } from './date-adapter';\n\n/** Display-format descriptor used by `NativeDateAdapter.format()`. */\nexport interface TwNativeDateFormat {\n /** Any option bag accepted by `Intl.DateTimeFormat`. */\n readonly dateTimeFormat?: Intl.DateTimeFormatOptions;\n}\n\nconst MS_PER_MINUTE = 60_000;\n\nconst warnedLocales = new Set<string>();\nfunction warnUnresolvableLocaleOnce(locale: string): void {\n if (!isDevMode() || warnedLocales.has(locale)) return;\n warnedLocales.add(locale);\n \n console.warn(\n `[ngx-tw/calendar] Locale \"${locale}\" is unknown to Intl.Locale.getWeekInfo(); falling back to Monday (1) as the first day of week (§19.2).`,\n );\n}\n\n/** `Intl`-driven `Date` adapter. Zero runtime dependencies. */\n@Injectable()\nexport class NativeDateAdapter extends DateAdapter<Date> {\n /**\n * Locale is resolved lazily on first read so the constructor stays\n * SSR-safe (no `navigator` access at class-construction time — §31.1).\n */\n private _locale: string | null = null;\n\n private get locale(): string {\n if (this._locale !== null) return this._locale;\n this._locale =\n typeof navigator !== 'undefined' && typeof navigator.language === 'string'\n ? navigator.language\n : 'en-US';\n return this._locale;\n }\n\n today(): Date {\n const now = new Date();\n return new Date(now.getFullYear(), now.getMonth(), now.getDate());\n }\n\n /**\n * Constructs a `Date`. **`month` is 1-based** — `create(2026, 1, 1)` yields\n * January 1, 2026.\n */\n create(year: number, month: number, day: number): Date {\n const d = new Date(year, month - 1, day);\n // `new Date(year, ...)` on two-digit years maps to 19xx by convention;\n // re-anchor explicitly so consumers can construct years < 100.\n if (year >= 0 && year < 100) {\n d.setFullYear(year);\n }\n return d;\n }\n\n clone(date: Date): Date {\n return new Date(date.getTime());\n }\n\n setLocale(locale: string): void {\n this._locale = locale;\n }\n\n getLocale(): string {\n return this.locale;\n }\n\n getYear(date: Date): number {\n return date.getFullYear();\n }\n\n getMonth(date: Date): number {\n return date.getMonth();\n }\n\n getDate(date: Date): number {\n return date.getDate();\n }\n\n getDayOfWeek(date: Date): number {\n return date.getDay();\n }\n\n getNumDaysInMonth(date: Date): number {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n }\n\n getHours(date: Date): number {\n return date.getHours();\n }\n\n getMinutes(date: Date): number {\n return date.getMinutes();\n }\n\n getSeconds(date: Date): number {\n return date.getSeconds();\n }\n\n withTime(date: Date, hours: number, minutes: number, seconds: number): Date {\n const d = new Date(date.getTime());\n d.setHours(hours, minutes, seconds, 0);\n return d;\n }\n\n getFirstDayOfWeek(): number {\n // §19.2: derive from `Intl.Locale.getWeekInfo()` when available; fallback to\n // Monday (1) and emit a single dev-mode warning when the locale is unknown\n // to `Intl.Locale`. ICU/CLDR returns 1=Monday … 7=Sunday — we normalize to\n // the project's 0=Sunday … 6=Saturday convention.\n if (typeof Intl !== 'undefined' && typeof Intl.Locale === 'function') {\n try {\n const l = new Intl.Locale(this.locale) as Intl.Locale & {\n getWeekInfo?: () => { firstDay: number };\n weekInfo?: { firstDay: number };\n };\n const info = (l.getWeekInfo?.() ?? l.weekInfo) as { firstDay: number } | undefined;\n if (info && typeof info.firstDay === 'number') {\n return info.firstDay === 7 ? 0 : info.firstDay;\n }\n } catch {\n warnUnresolvableLocaleOnce(this.locale);\n return 1;\n }\n }\n warnUnresolvableLocaleOnce(this.locale);\n return 1;\n }\n\n getMonthNames(style: TwDateNameStyle): string[] {\n const fmt = new Intl.DateTimeFormat(this.locale, { month: style, timeZone: 'UTC' });\n return Array.from({ length: 12 }, (_, i) => fmt.format(new Date(Date.UTC(2017, i, 1))));\n }\n\n getDayOfWeekNames(style: TwDateNameStyle): string[] {\n const fmt = new Intl.DateTimeFormat(this.locale, { weekday: style, timeZone: 'UTC' });\n return Array.from({ length: 7 }, (_, i) => fmt.format(new Date(Date.UTC(2017, 0, i + 1))));\n }\n\n override getDateNames(style: TwDateNameStyle = 'short'): string[] {\n const fmt = new Intl.DateTimeFormat(this.locale, { day: style === 'narrow' ? 'numeric' : 'numeric', timeZone: 'UTC' });\n return Array.from({ length: 31 }, (_, i) => fmt.format(new Date(Date.UTC(2017, 0, i + 1))));\n }\n\n getYearName(date: Date): string {\n return new Intl.DateTimeFormat(this.locale, { year: 'numeric', timeZone: 'UTC' }).format(\n new Date(Date.UTC(date.getFullYear(), 0, 1)),\n );\n }\n\n format(date: Date, displayFormat: unknown): string {\n if (!this.isValid(date)) return '';\n const fmt = (displayFormat as TwNativeDateFormat | undefined)?.dateTimeFormat ?? {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n };\n return new Intl.DateTimeFormat(this.locale, fmt).format(date);\n }\n\n addYears(date: Date, years: number): Date {\n return this.addMonths(date, years * 12);\n }\n\n addMonths(date: Date, months: number): Date {\n const d = new Date(date.getFullYear(), date.getMonth() + months, 1);\n const targetDay = Math.min(\n date.getDate(),\n new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate(),\n );\n return new Date(d.getFullYear(), d.getMonth(), targetDay);\n }\n\n addDays(date: Date, days: number): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);\n }\n\n override addMinutes(date: Date, minutes: number): Date {\n return new Date(date.getTime() + minutes * MS_PER_MINUTE);\n }\n\n override addHours(date: Date, hours: number): Date {\n return new Date(date.getTime() + hours * 60 * MS_PER_MINUTE);\n }\n\n compare(first: Date, second: Date): number {\n return (\n this.getYear(first) - this.getYear(second) ||\n this.getMonth(first) - this.getMonth(second) ||\n this.getDate(first) - this.getDate(second)\n );\n }\n\n sameDate(first: Date | null | undefined, second: Date | null | undefined): boolean {\n if (first && second) {\n const f = this.isValid(first);\n const s = this.isValid(second);\n if (f && s) return this.compare(first, second) === 0;\n return f === s;\n }\n return first === second;\n }\n\n /**\n * Start-of-day normalization. Rebuilds the date at `00:00:00.000` local time.\n * On DST spring-forward days where midnight is valid, this is a no-op beyond\n * zeroing h/m/s/ms. On DST fall-back days the repeated-01:00 hour does not\n * affect `00:00`, so this is also safe.\n *\n * The edge case of an entire DST-skipped midnight (rare — exists in some\n * historical zones) is resolved by `new Date(year, month, day)` selecting the\n * next valid instant forward.\n */\n startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n }\n\n isValid(date: Date): boolean {\n return date instanceof Date && !isNaN(date.getTime());\n }\n\n invalid(): Date {\n return new Date(NaN);\n }\n\n parse(value: unknown): Date | null {\n if (typeof value === 'number') return new Date(value);\n if (value instanceof Date) return this.clone(value);\n if (typeof value === 'string') {\n if (!value.trim()) return null;\n const parsed = new Date(value);\n return this.isValid(parsed) ? parsed : null;\n }\n return null;\n }\n\n deserialize(value: unknown): Date | null {\n if (value == null || value === '') return null;\n if (value instanceof Date) return this.isValid(value) ? this.clone(value) : this.invalid();\n const parsed = this.parse(value);\n if (parsed && this.isValid(parsed)) return parsed;\n return this.invalid();\n }\n\n toIso(date: Date): string {\n return [\n String(date.getFullYear()).padStart(4, '0'),\n String(date.getMonth() + 1).padStart(2, '0'),\n String(date.getDate()).padStart(2, '0'),\n ].join('-');\n }\n}\n\n/** Provides the default `Date`-based adapter. */\nexport function provideNativeDateAdapter(): EnvironmentProviders {\n return makeEnvironmentProviders([\n NativeDateAdapter,\n { provide: TW_DATE_ADAPTER, useExisting: NativeDateAdapter },\n ]);\n}\n\n/** Provides a custom `DateAdapter` implementation. */\nexport function provideTwCalendar<D>(config: {\n adapter: new (...args: never[]) => DateAdapter<D>;\n extraProviders?: Provider[];\n}): EnvironmentProviders {\n return makeEnvironmentProviders([\n config.adapter as unknown as Provider,\n { provide: TW_DATE_ADAPTER, useExisting: config.adapter },\n ...(config.extraProviders ?? []),\n ]);\n}\n","import type { DateRange } from './calendar.types';\n\n/**\n * Convenience class that satisfies the `DateRange<D>` interface and carries\n * `complete` / `empty` getters. Interchangeable with a plain\n * `{ start, end }` object anywhere a `DateRange<D>` is expected.\n */\nexport class TwDateRange<D> implements DateRange<D> {\n constructor(\n public readonly start: D | null,\n public readonly end: D | null,\n ) {}\n\n /** True when both endpoints are set. */\n get complete(): boolean {\n return this.start !== null && this.end !== null;\n }\n\n /** True when neither endpoint is set. */\n get empty(): boolean {\n return this.start === null && this.end === null;\n }\n}\n\n/** Shape accepted when writing a range value — either a `TwDateRange` or a plain object. */\nexport type TwDateRangeInput<D> =\n | TwDateRange<D>\n | { readonly start: D | null; readonly end: D | null }\n | null;\n\n/** @internal Normalises any range-shaped value into a `TwDateRange` instance. */\nexport function toTwDateRange<D>(value: TwDateRangeInput<D>): TwDateRange<D> | null {\n if (value === null || value === undefined) return null;\n if (value instanceof TwDateRange) return value;\n return new TwDateRange<D>(value.start ?? null, value.end ?? null);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|