@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-time-picker.mjs","sources":["../../../projects/ngx-tw/time-picker/time-picker-intl.ts","../../../projects/ngx-tw/time-picker/time-picker.ts","../../../projects/ngx-tw/time-picker/cdevhub-ngx-tw-time-picker.ts"],"sourcesContent":["import { Injectable, type Provider } from '@angular/core';\n\n/**\n * Localized strings + ARIA announcements consumed by the time-picker.\n *\n * Override per-field via Angular DI — provide a custom instance, or supply a\n * `Partial<TimePickerIntl>` through `provideTimePickerIntl`. Unset fields\n * 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 TimePickerIntl {\n // ---------------------------------------------------------------------------\n // Group + field labels\n // ---------------------------------------------------------------------------\n\n /** Accessible name for the fields group (the wrapper around hours/minutes/seconds). */\n groupLabel = 'Time';\n\n /** Accessible name for the hours field. */\n hoursLabel = 'Hours';\n\n /** Accessible name for the minutes field. */\n minutesLabel = 'Minutes';\n\n /** Accessible name for the seconds field. */\n secondsLabel = 'Seconds';\n\n /** Accessible name for the meridiem (AM/PM) radio group. */\n meridiemGroupLabel = 'AM or PM';\n\n /** Display + accessible name for the AM option. */\n amLabel = 'AM';\n\n /** Display + accessible name for the PM option. */\n pmLabel = 'PM';\n\n // ---------------------------------------------------------------------------\n // Stepper + clear button labels\n // ---------------------------------------------------------------------------\n\n /** Aria label template for the up stepper. Receives the active field name (`'hours'`, `'minutes'`, `'seconds'`). */\n increaseLabel(field: string): string {\n return `Increase ${field}`;\n }\n\n /** Aria label template for the down stepper. Receives the active field name (`'hours'`, `'minutes'`, `'seconds'`). */\n decreaseLabel(field: string): string {\n return `Decrease ${field}`;\n }\n\n /** Aria label for the clear button. */\n clearLabel = 'Clear time';\n\n // ---------------------------------------------------------------------------\n // Live announcements\n // ---------------------------------------------------------------------------\n\n /** Live-region message announced after the value is cleared. */\n clearedAnnouncement = 'Time cleared';\n\n /** Live-region message after a commit. Receives the pre-formatted time string (e.g. `'02:30 PM'`). */\n selectedAnnouncement(formattedTime: string): string {\n return `${formattedTime} selected`;\n }\n\n /** Spoken text for an empty hour/minute/second field — used as `aria-valuetext` when the field is blank. */\n emptyValueText = 'Empty';\n}\n\n/**\n * Provides a custom `TimePickerIntl` instance. Place at any injector level —\n * the time-picker resolves the closest one.\n *\n * @example\n * ```ts\n * providers: [\n * provideTimePickerIntl({\n * hoursLabel: 'Heures',\n * minutesLabel: 'Minutes',\n * meridiemGroupLabel: 'AM ou PM',\n * }),\n * ]\n * ```\n */\nexport function provideTimePickerIntl(custom: Partial<TimePickerIntl>): Provider {\n return {\n provide: TimePickerIntl,\n useFactory: () => Object.assign(new TimePickerIntl(), custom),\n };\n}\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n isDevMode,\n linkedSignal,\n model,\n type OnInit,\n output,\n signal,\n type Signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport {\n type AbstractControl,\n type ControlValueAccessor,\n FormGroupDirective,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n NgForm,\n type ValidationErrors,\n type Validator,\n Validators,\n} from '@angular/forms';\nimport { FocusMonitor, LiveAnnouncer } from '@angular/cdk/a11y';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { merge } from 'rxjs';\nimport { tv } from 'tailwind-variants';\nimport {\n appendDigit,\n clamp,\n type ErrorStateMatcher,\n fieldMax,\n fieldMin,\n from12h,\n isTerminalDigit,\n padTwo,\n parseField,\n stepWithWrap,\n timeOfDaySeconds,\n to12h,\n type TimePickerFormat,\n type TimePickerMeridiem,\n TW_ERROR_STATE_MATCHER,\n type TwColor,\n type TwFormSubmitted,\n type TwSize,\n} from '@cdevhub/ngx-tw/core';\nimport {\n FormFieldControl,\n TW_FORM_FIELD,\n TW_FORM_FIELD_CONTROL,\n} from '@cdevhub/ngx-tw/form-field';\nimport { DATE_ADAPTER, type DateAdapter } from '@cdevhub/ngx-tw/calendar';\nimport { TimePickerIntl } from './time-picker-intl';\n\n// ── Public types ──────────────────────────────────────────────────\n\n/** Visual style of the time-picker chrome. */\nexport type TimePickerVariant = 'default' | 'naked';\n\n/** Logical field inside the time-picker. */\nexport type TimePickerField = 'hour' | 'minute' | 'second' | 'meridiem';\n\n/** Origin of a value change — useful when consumers need to distinguish user input from programmatic writes. */\nexport type TimePickerChangeSource =\n | 'input'\n | 'stepper'\n | 'meridiem'\n | 'clear'\n | 'programmatic';\n\n/** Emitted by `timeChange` after a committed value update. */\nexport interface TimePickerChangeEvent<D> {\n /** The committed value (`null` when cleared). */\n readonly value: D | null;\n /** The value before this change. */\n readonly previousValue: D | null;\n /** What triggered the change. */\n readonly source: TimePickerChangeSource;\n}\n\n/** Emitted by `timeInput` before a commit, on every keystroke or stepper press. */\nexport interface TimePickerInputEvent<D> {\n /** Which field was edited. */\n readonly field: TimePickerField;\n /** The raw text currently in that field (pre-commit). */\n readonly rawText: string;\n /** The parsed value if fields form a valid time, else `null`. */\n readonly parsed: D | null;\n}\n\n// Re-export the shared format / meridiem aliases so consumers can import\n// them from `ngx-tw/time-picker` without reaching into core.\nexport type { TimePickerFormat, TimePickerMeridiem } from '@cdevhub/ngx-tw/core';\n\n// ── tv() config ───────────────────────────────────────────────────\n\nconst timePickerVariants = tv(\n {\n slots: {\n root: 'inline-flex items-center text-fg transition-[color,border-color,box-shadow] duration-normal motion-reduce:transition-none',\n fieldGroup: 'inline-flex items-center tabular-nums font-medium',\n field:\n 'bg-transparent text-center outline-none border-0 p-0 m-0 text-fg placeholder:text-fg-subtle rounded-md caret-transparent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n separator: 'text-fg-subtle select-none px-0.5',\n // Column stretches to the field height; the two buttons split it via\n // `flex-1`. Codified departure from CLAUDE.md \"Square interactive targets\"\n // (size-6/7/8): stacking two square buttons made the column 2× a button\n // tall — far taller than the digit row — which bloated the field height.\n // So the buttons carry a fixed WIDTH only (per-size below); the chevron\n // glyph's min-content (size-3 = 12px) is the natural floor.\n //\n // WCAG 2.5.8 (target-size, 24px — which slider.ts / badge.ts codify):\n // two stacked buttons cannot each be ≥24px tall inside a compact field\n // without re-bloating it, so each spinner ends up < 24px tall. Accepted\n // as the equivalent-control exception applies — the time is fully editable\n // by typing into the spinbutton fields (and via ↑/↓), so the spinner is a\n // pointer enhancement, never the only path.\n stepperGroup: 'flex flex-col self-stretch ml-0.5',\n stepper:\n 'flex-1 inline-flex items-center justify-center text-fg-muted hover:text-fg hover:bg-surface-muted rounded-md transition-colors duration-normal motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:opacity-40 disabled:pointer-events-none',\n stepperIcon: '',\n meridiem:\n 'inline-flex items-center rounded-md border border-border overflow-hidden ml-2 shrink-0',\n meridiemButton:\n 'font-medium text-fg-muted hover:bg-surface-muted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 transition-colors duration-normal motion-reduce:transition-none disabled:opacity-40 disabled:pointer-events-none',\n clearButton:\n 'inline-flex items-center justify-center shrink-0 rounded-md text-fg-muted hover:text-fg hover:bg-surface-muted transition-colors duration-normal motion-reduce:transition-none size-6 ml-1 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n },\n variants: {\n size: {\n xs: {\n root: 'gap-1 text-xs',\n // Numeric field width is sized to fit a 2-digit value at the current font scale. Off\n // the standard width scale because the field is content-driven, not a layout primitive\n // — see CLAUDE.md spacing scale rationale.\n field: 'w-5 text-xs',\n stepper: 'w-6',\n stepperIcon: 'size-3',\n meridiemButton: 'px-1.5 py-1 text-2xs',\n },\n sm: {\n root: 'gap-1 text-sm',\n // sm-density numeric field — sized to fit a 2-digit value at text-sm; see CLAUDE.md spacing scale rationale.\n field: 'w-6 text-sm',\n stepper: 'w-7',\n stepperIcon: 'size-3',\n meridiemButton: 'px-2 py-1 text-xs',\n },\n md: {\n root: 'gap-1.5 text-sm',\n // md-density numeric field — sized to fit a 2-digit value at text-sm; see CLAUDE.md spacing scale rationale.\n field: 'w-7 text-sm',\n stepper: 'w-7',\n stepperIcon: 'size-3',\n meridiemButton: 'px-2 py-1 text-xs',\n },\n lg: {\n root: 'gap-1.5 text-base',\n // lg-density numeric field — sized to fit a 2-digit value at text-base; see CLAUDE.md spacing scale rationale.\n field: 'w-8 text-base',\n stepper: 'w-8',\n stepperIcon: 'size-4',\n meridiemButton: 'px-2.5 py-1.5 text-sm',\n },\n xl: {\n root: 'gap-2 text-base',\n // xl-density numeric field — sized to fit a 2-digit value at text-base; see CLAUDE.md spacing scale rationale.\n field: 'w-9 text-base',\n stepper: 'w-8',\n stepperIcon: 'size-4',\n meridiemButton: 'px-3 py-1.5 text-sm',\n },\n },\n variant: {\n default: {\n root: 'rounded-md border border-border bg-surface px-3 py-2 hover:border-border-strong',\n },\n naked: {\n root: 'bg-transparent border-0 rounded-none p-0 focus-within:outline-none',\n },\n },\n disabled: {\n true: { root: 'opacity-50 pointer-events-none cursor-not-allowed' },\n false: {},\n },\n focused: { true: {}, false: {} },\n errorState: { true: {}, false: {} },\n color: {\n primary: {},\n secondary: {},\n accent: {},\n neutral: {},\n info: {},\n success: {},\n warning: {},\n error: {},\n },\n },\n compoundVariants: [\n { variant: 'default', focused: true, color: 'primary', class: { root: 'border-primary-500' } },\n { variant: 'default', focused: true, color: 'secondary', class: { root: 'border-secondary-500' } },\n { variant: 'default', focused: true, color: 'accent', class: { root: 'border-accent-500' } },\n { variant: 'default', focused: true, color: 'neutral', class: { root: 'border-border-strong' } },\n { variant: 'default', focused: true, color: 'info', class: { root: 'border-info-500' } },\n { variant: 'default', focused: true, color: 'success', class: { root: 'border-success-500' } },\n { variant: 'default', focused: true, color: 'warning', class: { root: 'border-warning-500' } },\n { variant: 'default', focused: true, color: 'error', class: { root: 'border-error-500' } },\n { variant: 'default', errorState: true, class: { root: 'border-error-500' } },\n ],\n defaultVariants: {\n size: 'md',\n variant: 'default',\n disabled: false,\n errorState: false,\n focused: false,\n color: 'primary',\n },\n },\n { twMerge: true },\n);\n\n// ── Static active-state color lookup for the AM/PM meridiem button ─────────────\n// Each entry is written out so Tailwind v4's static scanner picks the classes up.\n// Mirrors the lookup-table pattern used by `checkbox.ts` and `radio.ts`.\nconst MERIDIEM_ACTIVE_COLOR: Record<TwColor, string> = {\n primary: 'bg-primary-500 text-on-primary hover:bg-primary-600',\n secondary: 'bg-secondary-500 text-on-secondary hover:bg-secondary-600',\n accent: 'bg-accent-500 text-on-accent hover:bg-accent-600',\n neutral: 'bg-fg text-on-neutral hover:bg-fg/90',\n info: 'bg-info-500 text-on-info hover:bg-info-600',\n success: 'bg-success-500 text-on-success hover:bg-success-600',\n warning: 'bg-warning-500 text-on-warning hover:bg-warning-600',\n error: 'bg-error-500 text-on-error hover:bg-error-600',\n};\n\nlet nextTimePickerId = 0;\n\n/**\n * Segmented time editor. Renders `HH : MM` (with an optional `: SS` and/or\n * `AM/PM` toggle) and integrates with all three Angular form strategies via\n * `ControlValueAccessor`. Also participates in `<tw-form-field>` through\n * `FormFieldControl` — wrapping is optional.\n *\n * Value type is `D | null`. Every time operation flows through the injected\n * `DateAdapter<D>`, so the component works with the default native adapter\n * (`provideNativeDateAdapter()`) or any custom adapter a consumer ships.\n */\n/**\n * Validation errors a `tw-time-picker` can place on its bound control.\n *\n * Mirrors the shape of `CalendarValidationErrors` so the two pickers report\n * constraint violations the same way: a code keyed by what was violated, with\n * the offending value and the bound it broke.\n */\nexport type TimePickerValidationErrors = Partial<{\n timePickerMin: { min: unknown; actual: unknown };\n timePickerMax: { max: unknown; actual: unknown };\n}>;\n\n@Component({\n selector: 'tw-time-picker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: TW_FORM_FIELD_CONTROL,\n useExisting: forwardRef(() => TimePickerComponent),\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => TimePickerComponent),\n multi: true,\n },\n // Required, not optional. Angular v22 compiles any component exposing a\n // `value` model() as a signal-forms custom control; `FormControlDirective`\n // only takes the classic CVA path — the one that runs `setUpValidators` and\n // composes the NG_VALIDATORS above — when a value accessor is already\n // visible at directive-creation time. Assigning `ngControl.valueAccessor`\n // in a lifecycle hook is too late, and the failure is silent: value and\n // disabled still round-trip, so only a spec asserting an error code on a\n // bound FormControl catches it. See CLAUDE.md's ControlValueAccessor\n // section.\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TimePickerComponent),\n multi: true,\n },\n ],\n template: `\n <div [class]=\"fieldGroupClasses()\" role=\"group\" [attr.aria-label]=\"groupAriaLabel()\">\n <input\n #hourInput\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n maxlength=\"2\"\n [class]=\"fieldClasses()\"\n [value]=\"hourDisplay()\"\n [placeholder]=\"placeholder() ?? '--'\"\n [disabled]=\"isDisabled()\"\n [attr.readonly]=\"readonlyInput() ? 'true' : null\"\n [attr.aria-label]=\"intl.hoursLabel\"\n [attr.role]=\"'spinbutton'\"\n [attr.aria-valuemin]=\"hourMin()\"\n [attr.aria-valuemax]=\"hourMax()\"\n [attr.aria-valuenow]=\"hourValueNow()\"\n [attr.aria-valuetext]=\"hourValueText()\"\n [attr.aria-invalid]=\"errorState() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (keydown)=\"onFieldKeydown($event, 'hour')\"\n (beforeinput)=\"onBeforeInput($event, 'hour')\"\n (input)=\"onInputEvent($event, 'hour')\"\n (focus)=\"onFieldFocus('hour')\"\n (blur)=\"onFieldBlur('hour')\"\n />\n\n <span [class]=\"separatorClasses()\" aria-hidden=\"true\">:</span>\n\n <input\n #minuteInput\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n maxlength=\"2\"\n [class]=\"fieldClasses()\"\n [value]=\"minuteText()\"\n [placeholder]=\"placeholder() ?? '--'\"\n [disabled]=\"isDisabled()\"\n [attr.readonly]=\"readonlyInput() ? 'true' : null\"\n [attr.aria-label]=\"intl.minutesLabel\"\n [attr.role]=\"'spinbutton'\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"59\"\n [attr.aria-valuenow]=\"minuteValueNow()\"\n [attr.aria-valuetext]=\"minuteValueText()\"\n [attr.aria-invalid]=\"errorState() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (keydown)=\"onFieldKeydown($event, 'minute')\"\n (beforeinput)=\"onBeforeInput($event, 'minute')\"\n (input)=\"onInputEvent($event, 'minute')\"\n (focus)=\"onFieldFocus('minute')\"\n (blur)=\"onFieldBlur('minute')\"\n />\n\n @if (showSeconds()) {\n <span [class]=\"separatorClasses()\" aria-hidden=\"true\">:</span>\n\n <input\n #secondInput\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n maxlength=\"2\"\n [class]=\"fieldClasses()\"\n [value]=\"secondText()\"\n [placeholder]=\"placeholder() ?? '--'\"\n [disabled]=\"isDisabled()\"\n [attr.readonly]=\"readonlyInput() ? 'true' : null\"\n [attr.aria-label]=\"intl.secondsLabel\"\n [attr.role]=\"'spinbutton'\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"59\"\n [attr.aria-valuenow]=\"secondValueNow()\"\n [attr.aria-valuetext]=\"secondValueText()\"\n [attr.aria-invalid]=\"errorState() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (keydown)=\"onFieldKeydown($event, 'second')\"\n (beforeinput)=\"onBeforeInput($event, 'second')\"\n (input)=\"onInputEvent($event, 'second')\"\n (focus)=\"onFieldFocus('second')\"\n (blur)=\"onFieldBlur('second')\"\n />\n }\n </div>\n\n @if (showSteppers()) {\n <div [class]=\"stepperGroupClasses()\">\n <button\n type=\"button\"\n tabindex=\"-1\"\n [class]=\"stepperClasses()\"\n [attr.aria-label]=\"intl.increaseLabel(focusedFieldLabel())\"\n [disabled]=\"isDisabled() || readonlyInput()\"\n (mousedown)=\"onStepperMouseDown($event)\"\n (click)=\"onStepperClick(1)\"\n >\n <ng-content select=\"[slot=stepper-up]\">\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" [class]=\"stepperIconClasses()\">\n <path fill-rule=\"evenodd\" d=\"M14.77 12.79a.75.75 0 0 1-1.06-.02L10 8.94l-3.71 3.83a.75.75 0 1 1-1.08-1.04l4.25-4.39a.75.75 0 0 1 1.08 0l4.25 4.39a.75.75 0 0 1-.02 1.06Z\" clip-rule=\"evenodd\" />\n </svg>\n </ng-content>\n </button>\n <button\n type=\"button\"\n tabindex=\"-1\"\n [class]=\"stepperClasses()\"\n [attr.aria-label]=\"intl.decreaseLabel(focusedFieldLabel())\"\n [disabled]=\"isDisabled() || readonlyInput()\"\n (mousedown)=\"onStepperMouseDown($event)\"\n (click)=\"onStepperClick(-1)\"\n >\n <ng-content select=\"[slot=stepper-down]\">\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" [class]=\"stepperIconClasses()\">\n <path fill-rule=\"evenodd\" d=\"M5.23 7.21a.75.75 0 0 1 1.06.02L10 11.06l3.71-3.83a.75.75 0 1 1 1.08 1.04l-4.25 4.39a.75.75 0 0 1-1.08 0L5.21 8.27a.75.75 0 0 1 .02-1.06Z\" clip-rule=\"evenodd\" />\n </svg>\n </ng-content>\n </button>\n </div>\n }\n\n @if (format() === '12h') {\n <div [class]=\"meridiemClasses()\" role=\"radiogroup\" [attr.aria-label]=\"intl.meridiemGroupLabel\">\n <button\n type=\"button\"\n role=\"radio\"\n [class]=\"meridiemButtonClasses('AM')\"\n [attr.aria-checked]=\"meridiem() === 'AM'\"\n [attr.aria-label]=\"intl.amLabel\"\n [disabled]=\"isDisabled() || readonlyInput()\"\n (click)=\"setMeridiem('AM')\"\n (keydown)=\"onMeridiemKeydown($event, 'AM')\"\n >{{ intl.amLabel }}</button>\n <button\n type=\"button\"\n role=\"radio\"\n [class]=\"meridiemButtonClasses('PM')\"\n [attr.aria-checked]=\"meridiem() === 'PM'\"\n [attr.aria-label]=\"intl.pmLabel\"\n [disabled]=\"isDisabled() || readonlyInput()\"\n (click)=\"setMeridiem('PM')\"\n (keydown)=\"onMeridiemKeydown($event, 'PM')\"\n >{{ intl.pmLabel }}</button>\n </div>\n }\n\n @if (showClear() && !isEmpty() && !isDisabled() && !readonlyInput()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n [class]=\"clearButtonClasses()\"\n [attr.aria-label]=\"clearLabel()\"\n (click)=\"onClearClick($event)\"\n >\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" class=\"size-3\">\n <path\n fill-rule=\"evenodd\"\n d=\"M10 8.586 4.707 3.293a1 1 0 0 0-1.414 1.414L8.586 10l-5.293 5.293a1 1 0 1 0 1.414 1.414L10 11.414l5.293 5.293a1 1 0 0 0 1.414-1.414L11.414 10l5.293-5.293a1 1 0 0 0-1.414-1.414L10 8.586Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n }\n `,\n host: {\n '[class]': 'rootClasses()',\n '[id]': 'hostId',\n '[attr.aria-disabled]': 'isDisabled() || null',\n '[attr.aria-invalid]': 'errorState() || null',\n '[attr.data-variant]': 'resolvedVariant()',\n },\n})\nexport class TimePickerComponent<D = Date>\n extends FormFieldControl<D>\n implements ControlValueAccessor, Validator, OnInit\n{\n // ── Inputs ──\n\n /** Id on the time-picker's host element. Auto-generated when not provided. Used by the form-field's `<label for>` attribute. */\n readonly idInput = input<string | undefined>(undefined, { alias: 'id' });\n\n /** When true, the whole component is disabled and every field sets `aria-disabled=\"true\"`. Defaults to `false`. */\n readonly disabledInput = input<boolean, unknown>(false, {\n alias: 'disabled',\n transform: booleanAttribute,\n });\n\n /** When true, exposes `aria-required=\"true\"`. Validators.required on a bound NgControl is also honoured. Defaults to `false`. */\n readonly requiredInput = input<boolean, unknown>(false, {\n alias: 'required',\n transform: booleanAttribute,\n });\n\n /** When true, blocks typing, stepping, and the AM/PM toggle — the value is still read-only visible. Defaults to `false`. */\n readonly readonlyInput = input<boolean, unknown>(false, {\n alias: 'readonly',\n transform: booleanAttribute,\n });\n\n /** Controls field height, font size, and stepper density. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** Semantic color used for the focused border and focus ring. Defaults to `'primary'`. */\n readonly color = input<TwColor>('primary');\n\n /** Visual style of the chrome. `'default'` draws its own border; `'naked'` strips chrome. Auto-resolves to `'naked'` inside `<tw-form-field>`. */\n readonly variant = input<TimePickerVariant | undefined>(undefined);\n\n /** `'12h'` renders 1–12 hours with an AM/PM toggle; `'24h'` renders 00–23. Defaults to `'24h'`. */\n readonly format = input<TimePickerFormat>('24h');\n\n /** When true, renders a seconds field after minutes. Defaults to `false`. */\n readonly showSeconds = input<boolean>(false);\n\n /** Amount to add/subtract when stepping hours. Defaults to `1`. */\n readonly hourStep = input<number>(1);\n\n /** Amount to add/subtract when stepping minutes. Defaults to `1`. */\n readonly minuteStep = input<number>(1);\n\n /** Amount to add/subtract when stepping seconds. Defaults to `1`. */\n readonly secondStep = input<number>(1);\n\n /** Earliest accepted time-of-day. Values earlier than this set `errorState` and mark the bound control invalid with `timePickerMin`. Defaults to `null`. Note: when `showSeconds` is `false`, the seconds component of any value still participates in the range comparison — supply `minTime` with zeroed seconds to match the 2-field display. */\n readonly minTime = input<D | null>(null);\n\n /** Latest accepted time-of-day. Values later than this set `errorState` and mark the bound control invalid with `timePickerMax`. Defaults to `null`. Note: when `showSeconds` is `false`, the seconds component of any value still participates in the range comparison — supply `maxTime` with zeroed seconds to match the 2-field display. */\n readonly maxTime = input<D | null>(null);\n\n /** Date portion used when the user types a time while `value` is `null`. Defaults to today. */\n readonly referenceDate = input<D | null>(null);\n\n /** Placeholder shown in each field when empty. Defaults to `'--'`. */\n readonly placeholder = input<string | undefined>(undefined);\n\n /** Whether to render the up/down stepper column. Defaults to `true`. */\n // TRUE-default: pointer users expect inline up/down chevrons next to a numeric editor — without them the picker reads as a static display, and consumers must rebuild stepping for every instance.\n readonly showSteppers = input<boolean>(true);\n\n /** Whether to render the clear affordance when a value is set. Defaults to `true`. */\n // TRUE-default: matches `<tw-date-picker>` and `<tw-input>` clear behaviour; without the inline clear, every form has to wire its own reset surface for an obvious affordance.\n readonly showClear = input<boolean>(true);\n\n /** Accessible label for the clear button. Defaults to `'Clear time'`. */\n readonly clearLabel = input<string>('Clear time');\n\n /** Per-instance override of the `ErrorStateMatcher`. */\n readonly errorStateMatcher = input<ErrorStateMatcher | undefined>(undefined);\n\n /** Accessible name for the fields group. Required when no visible label is supplied. Alias: `aria-label`. */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n /** ID of an external element that labels the group. Alias: `aria-labelledby`. */\n readonly ariaLabelledby = input<string | undefined>(undefined, { alias: 'aria-labelledby' });\n\n /** Consumer-supplied `aria-describedby` ids. The form-field preserves these when merging hint/error ids. Alias: `aria-describedby`. */\n readonly userAriaDescribedByInput = input<string | undefined>(undefined, {\n alias: 'aria-describedby',\n });\n\n // ── Models ──\n\n /** Two-way bound current time. `null` when empty. Setting programmatically updates the fields without firing `onChange`. */\n readonly value = model<D | null>(null);\n\n // ── Outputs ──\n\n /** Fires on every keystroke, stepper press, or AM/PM toggle — before the new value is committed. */\n readonly timeInput = output<TimePickerInputEvent<D>>();\n\n /** Fires after a committed change — digit + auto-advance, stepper, meridiem toggle, clear, or programmatic write. */\n readonly timeChange = output<TimePickerChangeEvent<D>>();\n\n // ── Injected deps ──\n\n private readonly adapter = inject<DateAdapter<D>>(DATE_ADAPTER);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n private readonly formField = inject(TW_FORM_FIELD, { optional: true });\n // Resolved lazily in `ngOnInit`: this component self-provides NG_VALIDATORS\n // via `useExisting`, so an eager `inject(NgControl, { self })` would deadlock\n // against its own validator during construction. Mirrors `date-picker.ts`,\n // `date-range-picker.ts` and `calendar.ts`.\n private ngControl: NgControl | null = null;\n private readonly parentForm = inject(NgForm, { optional: true });\n private readonly parentFormGroup = inject(FormGroupDirective, { optional: true });\n private readonly defaultMatcher = inject(TW_ERROR_STATE_MATCHER);\n\n /** @internal — exposed for the template; consumers configure via `provideTimePickerIntl()`. */\n protected readonly intl = inject(TimePickerIntl, { optional: true }) ?? new TimePickerIntl();\n\n // ── View refs ──\n\n private readonly hourInputRef = viewChild.required<ElementRef<HTMLInputElement>>('hourInput');\n private readonly minuteInputRef =\n viewChild.required<ElementRef<HTMLInputElement>>('minuteInput');\n private readonly secondInputRef =\n viewChild<ElementRef<HTMLInputElement>>('secondInput');\n\n // ── Identity ──\n\n private readonly uid = nextTimePickerId++;\n /** @internal */\n readonly hostId = `tw-time-picker-${this.uid}`;\n\n // ── Internal state ──\n\n /** @internal raw display text per field — always the numerals the user sees. */\n readonly hourText = signal<string>('');\n /** @internal */\n readonly minuteText = signal<string>('');\n /** @internal */\n readonly secondText = signal<string>('');\n /** @internal */\n readonly meridiem = signal<TimePickerMeridiem>('AM');\n /** @internal */\n readonly focusedField = signal<TimePickerField | null>(null);\n /** @internal */\n readonly internalValue = linkedSignal<D | null>(() => this.value());\n\n private readonly cvaDisabled = signal(false);\n private readonly describedByIdsSignal = signal<readonly string[]>([]);\n private readonly focusedSignal = signal(false);\n private readonly _ngControlRev = signal(0);\n private readonly _formSubmitRev = signal(0);\n /** When true, an effect should not rewrite field text from the external value. */\n private editing = false;\n\n private onChange: (value: D | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n // ── Derived state ──\n\n /** @internal */\n readonly isDisabled = computed(() => {\n this._ngControlRev();\n return this.disabledInput() || this.cvaDisabled() || !!this.ngControl?.disabled;\n });\n\n /** @internal */\n readonly isEmpty = computed(() => this.internalValue() === null);\n\n /** @internal Effective variant — auto-naked when wrapped in tw-form-field. */\n readonly resolvedVariant = computed<TimePickerVariant>(\n () => this.variant() ?? (this.formField ? 'naked' : 'default'),\n );\n\n /** @internal */\n readonly hourMin = computed(() => fieldMin('hour', this.format()));\n /** @internal */\n readonly hourMax = computed(() => fieldMax('hour', this.format()));\n\n /** @internal */\n readonly hourDisplay = computed(() => this.hourText());\n\n /** @internal */\n readonly hourValueNow = computed(() => {\n const n = parseField(this.hourText());\n return n === null ? null : n;\n });\n\n /** @internal */\n readonly hourValueText = computed(() => {\n const n = this.hourValueNow();\n if (n === null) return this.intl.emptyValueText;\n const meridiemLabel = this.meridiem() === 'AM' ? this.intl.amLabel : this.intl.pmLabel;\n const suffix = this.format() === '12h' ? ` ${meridiemLabel}` : '';\n return `${padTwo(n)}${suffix}`;\n });\n\n /** @internal */\n readonly minuteValueNow = computed(() => parseField(this.minuteText()));\n /** @internal */\n readonly minuteValueText = computed(() => {\n const n = this.minuteValueNow();\n return n === null ? this.intl.emptyValueText : padTwo(n);\n });\n\n /** @internal */\n readonly secondValueNow = computed(() => parseField(this.secondText()));\n /** @internal */\n readonly secondValueText = computed(() => {\n const n = this.secondValueNow();\n return n === null ? this.intl.emptyValueText : padTwo(n);\n });\n\n /** @internal */\n readonly groupAriaLabel = computed(() => this.ariaLabel() ?? this.intl.groupLabel);\n\n /** @internal Label of the currently focused field, used by stepper aria-labels. */\n readonly focusedFieldLabel = computed(() => {\n const f = this.focusedField();\n if (f === 'minute') return this.intl.minutesLabel.toLowerCase();\n if (f === 'second') return this.intl.secondsLabel.toLowerCase();\n return this.intl.hoursLabel.toLowerCase();\n });\n\n /** @internal */\n readonly describedBy = computed(() => {\n const extra = this.describedByIdsSignal();\n const user = this.userAriaDescribedByInput();\n const merged = [...extra];\n if (user) {\n for (const id of user.split(/\\s+/)) if (id) merged.push(id);\n }\n return merged.length ? merged.join(' ') : '';\n });\n\n // ── Range / error state ──\n\n private readonly rangeError = signal(false);\n\n // ── tv() output ──\n\n private readonly variantResult = computed(() =>\n timePickerVariants({\n size: this.size(),\n variant: this.resolvedVariant(),\n disabled: this.isDisabled(),\n errorState: this.errorState(),\n focused: this.focusedSignal(),\n color: this.color(),\n }),\n );\n\n /** @internal */ readonly rootClasses = computed(() => this.variantResult().root());\n /** @internal */ readonly fieldGroupClasses = computed(() => this.variantResult().fieldGroup());\n /** @internal */ readonly fieldClasses = computed(() => this.variantResult().field());\n /** @internal */ readonly separatorClasses = computed(() => this.variantResult().separator());\n /** @internal */ readonly stepperGroupClasses = computed(() => this.variantResult().stepperGroup());\n /** @internal */ readonly stepperClasses = computed(() => this.variantResult().stepper());\n /** @internal */ readonly stepperIconClasses = computed(() => this.variantResult().stepperIcon());\n /** @internal */ readonly meridiemClasses = computed(() => this.variantResult().meridiem());\n /** @internal */ readonly clearButtonClasses = computed(() => this.variantResult().clearButton());\n\n /** @internal */\n meridiemButtonClasses(which: TimePickerMeridiem): string {\n const base = this.variantResult().meridiemButton();\n const active = this.meridiem() === which;\n return active ? `${base} ${MERIDIEM_ACTIVE_COLOR[this.color()]}` : base;\n }\n\n // ── FormFieldControl impl ──\n\n /** @internal */ readonly id: Signal<string> = computed(() => this.idInput() ?? this.hostId);\n /** @internal */ readonly focused: Signal<boolean> = this.focusedSignal.asReadonly();\n /** @internal */ readonly empty: Signal<boolean> = this.isEmpty;\n /** @internal */ readonly disabled: Signal<boolean> = this.isDisabled;\n /** @internal */ readonly required: Signal<boolean> = computed(() => {\n this._ngControlRev();\n if (this.requiredInput()) return true;\n return !!this.ngControl?.control?.hasValidator(Validators.required);\n });\n /** @internal */\n readonly errorState: Signal<boolean> = computed(() => {\n this._ngControlRev();\n this._formSubmitRev();\n this.focusedSignal();\n if (this.rangeError()) return true;\n const matcher = this.errorStateMatcher() ?? this.defaultMatcher;\n const form: TwFormSubmitted | null =\n (this.parentFormGroup as TwFormSubmitted | null) ??\n (this.parentForm as TwFormSubmitted | null);\n return matcher.isErrorState(this.ngControl?.control ?? null, form);\n });\n /** @internal */ readonly controlType = 'time-picker';\n /** @internal */\n readonly userAriaDescribedBy: Signal<string | undefined> = computed(() =>\n this.userAriaDescribedByInput(),\n );\n\n // ── Constructor ──\n\n constructor() {\n super();\n\n // Re-run validation when a constraint moves, so `control.errors` reflects\n // the new bound instead of the verdict from when the value was committed.\n // `validatorOnChange` is a plain callback into Angular's validator\n // plumbing, not a signal write, so this cannot cycle.\n effect(() => {\n this.minTime();\n this.maxTime();\n untracked(() => this.validatorOnChange());\n });\n\n // Sync the field text whenever the underlying value changes (programmatic).\n effect(() => {\n const v = this.internalValue();\n const fmt = this.format();\n const showS = this.showSeconds();\n untracked(() => {\n if (this.editing) return;\n if (v === null || !this.adapter.isValid(v)) {\n this.hourText.set('');\n this.minuteText.set('');\n this.secondText.set('');\n this.rangeError.set(false);\n return;\n }\n const h24 = this.adapter.getHours(v);\n const m = this.adapter.getMinutes(v);\n const s = this.adapter.getSeconds(v);\n if (fmt === '12h') {\n this.hourText.set(padTwo(to12h(h24)));\n this.meridiem.set(h24 >= 12 ? 'PM' : 'AM');\n } else {\n this.hourText.set(padTwo(h24));\n }\n this.minuteText.set(padTwo(m));\n this.secondText.set(showS ? padTwo(s) : '');\n this.rangeError.set(!this.isInRange(v));\n });\n });\n\n // Re-render the hour text when switching format (e.g., 24h → 12h) or showSeconds.\n effect(() => {\n this.format();\n this.showSeconds();\n untracked(() => {\n const v = this.internalValue();\n if (v === null || !this.adapter.isValid(v)) return;\n const h24 = this.adapter.getHours(v);\n if (this.format() === '12h') {\n this.hourText.set(padTwo(to12h(h24)));\n this.meridiem.set(h24 >= 12 ? 'PM' : 'AM');\n } else {\n this.hourText.set(padTwo(h24));\n }\n if (this.showSeconds() && !this.secondText()) {\n this.secondText.set(padTwo(this.adapter.getSeconds(v)));\n }\n });\n });\n\n // Dev-mode warning for missing accessible name.\n afterNextRender(() => {\n if (!isDevMode()) return;\n const hasLabel =\n !!this.ariaLabel() ||\n !!this.ariaLabelledby() ||\n !!this.formField?.hasLabel();\n if (!hasLabel) {\n console.warn(\n '[tw-time-picker] The time-picker has no accessible name. Set aria-label, aria-labelledby, or wrap the component in a <tw-form-field> with a <label twLabel>.',\n );\n }\n });\n\n // Dev-mode warning for bogus steps.\n afterNextRender(() => {\n if (!isDevMode()) return;\n for (const [name, step] of [\n ['hourStep', this.hourStep()],\n ['minuteStep', this.minuteStep()],\n ['secondStep', this.secondStep()],\n ] as const) {\n if (step < 1 || !Number.isFinite(step)) {\n console.warn(\n `[tw-time-picker] ${name}=${step} is invalid. Using 1 instead.`,\n );\n }\n }\n });\n\n // Host focus tracking.\n const monitorSub = this.focusMonitor\n .monitor(this.elementRef, true)\n .subscribe((origin) => {\n const wasFocused = this.focusedSignal();\n this.focusedSignal.set(!!origin);\n if (wasFocused && !origin) {\n this.focusedField.set(null);\n this.editing = false;\n this.normalizeEmptyFields();\n this.onTouched();\n this._ngControlRev.update((n) => n + 1);\n }\n });\n\n this.destroyRef.onDestroy(() => {\n monitorSub.unsubscribe();\n this.focusMonitor.stopMonitoring(this.elementRef);\n });\n }\n\n ngOnInit(): void {\n // Deferred NgControl resolution (see the field declaration). The value\n // accessor itself is registered statically via NG_VALUE_ACCESSOR.\n this.ngControl = this.injector.get(NgControl, null, { self: true, optional: true });\n // `isDisabled` / `required` / `errorState` read `ngControl` and saw `null`\n // until now; bump the revision so they recompute.\n this._ngControlRev.update((n) => n + 1);\n\n const ctrl = this.ngControl?.control;\n if (ctrl) {\n const streams = [ctrl.statusChanges, ctrl.valueChanges].filter(\n (s): s is NonNullable<typeof s> => !!s,\n );\n if (streams.length) {\n merge(...streams)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this._ngControlRev.update((n) => n + 1));\n }\n }\n const submit = this.parentFormGroup?.ngSubmit ?? this.parentForm?.ngSubmit;\n if (submit) {\n submit\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this._formSubmitRev.update((n) => n + 1));\n }\n }\n\n // ── Public imperative API ──\n\n /** Moves focus to the hours field. */\n focus(): void {\n this.hourInputRef().nativeElement.focus();\n }\n\n /** Clears the value and emits `timeChange` with `source: 'clear'`. */\n clear(): void {\n this.commit(null, 'clear');\n }\n\n // ── Field interactions ──\n\n /** @internal */\n onFieldFocus(field: TimePickerField): void {\n this.focusedField.set(field);\n this.editing = true;\n const el = this.getFieldEl(field);\n if (el) el.select();\n }\n\n /** @internal */\n onFieldBlur(_field: TimePickerField): void {\n this.editing = false;\n this.normalizeEmptyFields();\n }\n\n /** @internal */\n onBeforeInput(event: Event, field: TimePickerField): void {\n const evt = event as InputEvent;\n const data = evt.data ?? '';\n // Let browsers drive Backspace / Delete natively.\n if (evt.inputType === 'deleteContentBackward' || evt.inputType === 'deleteContentForward') {\n return;\n }\n // Replace default text insertion with our buffered digit logic.\n if (evt.inputType === 'insertText' && /^\\d$/.test(data)) {\n evt.preventDefault();\n this.typeDigit(field, data);\n } else if (evt.inputType === 'insertText') {\n // Reject non-digit insertions.\n evt.preventDefault();\n }\n }\n\n /** @internal Handle native delete events (Backspace/Delete). */\n onInputEvent(event: Event, field: TimePickerField): void {\n const evt = event as InputEvent;\n const el = event.target as HTMLInputElement;\n if (evt.inputType === 'deleteContentBackward' || evt.inputType === 'deleteContentForward') {\n this.editing = true;\n const currentLen = this.getFieldText(field).length;\n const nativeText = el.value.replace(/\\D/g, '').slice(0, 2);\n if (nativeText.length < currentLen || nativeText.length === 0) {\n this.setFieldText(field, nativeText);\n this.commitFromFields('input', field);\n }\n }\n }\n\n /** @internal */\n onFieldKeydown(event: KeyboardEvent, field: TimePickerField): void {\n if (this.isDisabled() || this.readonlyInput()) return;\n const key = event.key;\n\n switch (key) {\n case 'ArrowUp':\n event.preventDefault();\n this.stepField(field, 1, event.shiftKey);\n return;\n case 'ArrowDown':\n event.preventDefault();\n this.stepField(field, -1, event.shiftKey);\n return;\n case 'ArrowLeft':\n if (this.isFieldCaretAtStart(field)) {\n event.preventDefault();\n this.moveFocus(field, -1);\n }\n return;\n case 'ArrowRight':\n if (this.isFieldCaretAtEnd(field)) {\n event.preventDefault();\n this.moveFocus(field, 1);\n }\n return;\n case 'Home':\n event.preventDefault();\n this.setFieldText(field, padTwo(this.fieldMinFor(field)));\n this.commitFromFields('input', field);\n return;\n case 'End':\n event.preventDefault();\n this.setFieldText(field, padTwo(this.fieldMaxFor(field)));\n this.commitFromFields('input', field);\n return;\n case 'Delete':\n case 'Backspace':\n // Let native input drive these; `onInputEvent` syncs state.\n return;\n default:\n if (key.length === 1 && !/\\d/.test(key)) {\n event.preventDefault();\n }\n return;\n }\n }\n\n /** @internal */\n setMeridiem(m: TimePickerMeridiem): void {\n if (this.isDisabled() || this.readonlyInput()) return;\n if (this.meridiem() === m) return;\n this.meridiem.set(m);\n this.commitFromFields('meridiem', 'meridiem');\n }\n\n /** @internal */\n onMeridiemKeydown(event: KeyboardEvent, m: TimePickerMeridiem): void {\n if (this.isDisabled() || this.readonlyInput()) return;\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown' || event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.setMeridiem(m === 'AM' ? 'PM' : 'AM');\n }\n }\n\n /** @internal */\n onStepperMouseDown(event: MouseEvent): void {\n // Keep focus on the current field when clicking the stepper.\n event.preventDefault();\n }\n\n /** @internal */\n onStepperClick(direction: 1 | -1): void {\n const field = this.focusedField() ?? 'hour';\n if (field === 'meridiem') {\n this.setMeridiem(this.meridiem() === 'AM' ? 'PM' : 'AM');\n return;\n }\n this.stepField(field, direction, false);\n // Restore focus to the field we stepped.\n const el = this.getFieldEl(field);\n el?.focus();\n }\n\n /** @internal */\n onClearClick(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.clear();\n }\n\n // ── Helpers ──\n\n private typeDigit(field: TimePickerField, digit: string): void {\n if (field === 'meridiem') return;\n const max = this.fieldMaxFor(field);\n const current = this.getFieldText(field);\n const next = appendDigit(current, digit, max);\n const advance = isTerminalDigit(current, digit, max) || next.length === 2;\n this.setFieldText(field, next);\n this.commitFromFields('input', field);\n if (advance) this.moveFocus(field, 1);\n }\n\n private stepField(field: TimePickerField, direction: 1 | -1, shift: boolean): void {\n if (field === 'meridiem') {\n this.setMeridiem(this.meridiem() === 'AM' ? 'PM' : 'AM');\n return;\n }\n const step = this.stepFor(field) * (shift ? 2 : 1);\n const min = this.fieldMinFor(field);\n const max = this.fieldMaxFor(field);\n const current = parseField(this.getFieldText(field)) ?? min;\n const next = stepWithWrap(current, step, direction, min, max);\n this.setFieldText(field, padTwo(next));\n this.commitFromFields('stepper', field);\n }\n\n private commitFromFields(source: TimePickerChangeSource, field: TimePickerField): void {\n const hourRaw = parseField(this.hourText());\n const minuteRaw = parseField(this.minuteText());\n const secondRaw = this.showSeconds() ? parseField(this.secondText()) : 0;\n\n this.timeInput.emit({\n field,\n rawText: field === 'meridiem' ? this.meridiem() : this.getFieldText(field),\n parsed: this.buildValueIfComplete(hourRaw, minuteRaw, secondRaw),\n });\n\n if (hourRaw === null || minuteRaw === null || (this.showSeconds() && secondRaw === null)) {\n return;\n }\n\n const h24 = this.toCanonicalHour(hourRaw);\n if (h24 === null) return;\n const base = this.resolveBaseDate();\n const next = this.adapter.withTime(base, h24, minuteRaw, this.showSeconds() ? (secondRaw ?? 0) : 0);\n if (!this.adapter.isValid(next)) return;\n\n this.commit(next, source);\n }\n\n private buildValueIfComplete(h: number | null, m: number | null, s: number | null): D | null {\n if (h === null || m === null) return null;\n if (this.showSeconds() && s === null) return null;\n const h24 = this.toCanonicalHour(h);\n if (h24 === null) return null;\n const base = this.resolveBaseDate();\n const built = this.adapter.withTime(base, h24, m, this.showSeconds() ? (s ?? 0) : 0);\n return this.adapter.isValid(built) ? built : null;\n }\n\n private toCanonicalHour(display: number): number | null {\n if (this.format() === '12h') {\n if (display < 1 || display > 12) return null;\n return from12h(display, this.meridiem());\n }\n if (display < 0 || display > 23) return null;\n return display;\n }\n\n private resolveBaseDate(): D {\n const current = this.internalValue();\n if (current !== null && this.adapter.isValid(current)) return current;\n const reference = this.referenceDate();\n if (reference !== null && this.adapter.isValid(reference)) return reference;\n return this.adapter.today();\n }\n\n private commit(next: D | null, source: TimePickerChangeSource): void {\n const previous = this.internalValue();\n this.internalValue.set(next);\n this.value.set(next);\n this.rangeError.set(next !== null ? !this.isInRange(next) : false);\n\n if (source !== 'programmatic') {\n this.onChange(next);\n this.onTouched();\n if (next === null) {\n this.liveAnnouncer.announce(this.intl.clearedAnnouncement, 'polite');\n } else {\n this.liveAnnouncer.announce(\n this.intl.selectedAnnouncement(this.formatAnnouncement(next)),\n 'polite',\n );\n }\n }\n\n this.timeChange.emit({ value: next, previousValue: previous, source });\n }\n\n private formatAnnouncement(v: D): string {\n const h24 = this.adapter.getHours(v);\n const m = this.adapter.getMinutes(v);\n const s = this.adapter.getSeconds(v);\n const secPart = this.showSeconds() ? `:${padTwo(s)}` : '';\n if (this.format() === '12h') {\n const meridiemLabel = h24 >= 12 ? this.intl.pmLabel : this.intl.amLabel;\n return `${padTwo(to12h(h24))}:${padTwo(m)}${secPart} ${meridiemLabel}`;\n }\n return `${padTwo(h24)}:${padTwo(m)}${secPart}`;\n }\n\n private isInRange(v: D): boolean {\n const min = this.minTime();\n const max = this.maxTime();\n if (!min && !max) return true;\n const vSecs = timeOfDaySeconds(\n this.adapter.getHours(v),\n this.adapter.getMinutes(v),\n this.adapter.getSeconds(v),\n );\n if (min && this.adapter.isValid(min)) {\n const minSecs = timeOfDaySeconds(\n this.adapter.getHours(min),\n this.adapter.getMinutes(min),\n this.adapter.getSeconds(min),\n );\n if (vSecs < minSecs) return false;\n }\n if (max && this.adapter.isValid(max)) {\n const maxSecs = timeOfDaySeconds(\n this.adapter.getHours(max),\n this.adapter.getMinutes(max),\n this.adapter.getSeconds(max),\n );\n if (vSecs > maxSecs) return false;\n }\n return true;\n }\n\n private normalizeEmptyFields(): void {\n // Zero-pad single-digit entries once the user leaves the component so the\n // display always settles to \"HH : MM\".\n for (const field of ['hour', 'minute', 'second'] as const) {\n if (field === 'second' && !this.showSeconds()) continue;\n const raw = this.getFieldText(field);\n if (raw.length === 1) {\n this.setFieldText(field, padTwo(Number(raw)));\n }\n }\n }\n\n private moveFocus(field: TimePickerField, direction: 1 | -1): void {\n const order: TimePickerField[] = this.showSeconds()\n ? ['hour', 'minute', 'second']\n : ['hour', 'minute'];\n const idx = order.indexOf(field);\n if (idx === -1) return;\n const nextIdx = clamp(idx + direction, 0, order.length - 1);\n if (nextIdx === idx) return;\n const el = this.getFieldEl(order[nextIdx]);\n el?.focus();\n }\n\n private isFieldCaretAtStart(field: TimePickerField): boolean {\n const el = this.getFieldEl(field);\n if (!el) return true;\n return (el.selectionStart ?? 0) === 0;\n }\n\n private isFieldCaretAtEnd(field: TimePickerField): boolean {\n const el = this.getFieldEl(field);\n if (!el) return true;\n const end = el.selectionEnd ?? 0;\n return end === el.value.length;\n }\n\n private getFieldEl(field: TimePickerField): HTMLInputElement | null {\n switch (field) {\n case 'hour':\n return this.hourInputRef().nativeElement;\n case 'minute':\n return this.minuteInputRef().nativeElement;\n case 'second':\n return this.secondInputRef()?.nativeElement ?? null;\n default:\n return null;\n }\n }\n\n private getFieldText(field: TimePickerField): string {\n switch (field) {\n case 'hour':\n return this.hourText();\n case 'minute':\n return this.minuteText();\n case 'second':\n return this.secondText();\n default:\n return '';\n }\n }\n\n private setFieldText(field: TimePickerField, next: string): void {\n this.editing = true;\n switch (field) {\n case 'hour':\n this.hourText.set(next);\n return;\n case 'minute':\n this.minuteText.set(next);\n return;\n case 'second':\n this.secondText.set(next);\n return;\n default:\n return;\n }\n }\n\n private stepFor(field: TimePickerField): number {\n switch (field) {\n case 'hour':\n return Math.max(1, Math.floor(this.hourStep()));\n case 'minute':\n return Math.max(1, Math.floor(this.minuteStep()));\n case 'second':\n return Math.max(1, Math.floor(this.secondStep()));\n default:\n return 1;\n }\n }\n\n private fieldMinFor(field: TimePickerField): number {\n if (field === 'hour') return fieldMin('hour', this.format());\n return 0;\n }\n\n private fieldMaxFor(field: TimePickerField): number {\n if (field === 'hour') return fieldMax('hour', this.format());\n return 59;\n }\n\n // ── Validator ──\n\n private validatorOnChange: () => void = () => {};\n\n /** @internal */\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value as D | null | undefined;\n if (value === null || value === undefined) return null;\n if (!this.adapter.isValid(value as D)) return null;\n\n const errors: TimePickerValidationErrors = {};\n const actualSecs = this.secondsOf(value as D);\n\n const min = this.minTime();\n if (min && this.adapter.isValid(min) && actualSecs < this.secondsOf(min)) {\n errors.timePickerMin = { min, actual: value };\n }\n const max = this.maxTime();\n if (max && this.adapter.isValid(max) && actualSecs > this.secondsOf(max)) {\n errors.timePickerMax = { max, actual: value };\n }\n\n return Object.keys(errors).length ? errors : null;\n }\n\n /** @internal */\n registerOnValidatorChange(fn: () => void): void {\n this.validatorOnChange = fn;\n }\n\n /** Time-of-day in seconds, ignoring the date part — the same basis `isInRange` uses. */\n private secondsOf(v: D): number {\n return timeOfDaySeconds(\n this.adapter.getHours(v),\n this.adapter.getMinutes(v),\n this.adapter.getSeconds(v),\n );\n }\n\n // ── ControlValueAccessor ──\n\n writeValue(value: unknown): void {\n if (value === null || value === undefined || value === '') {\n const previous = this.internalValue();\n this.internalValue.set(null);\n this.value.set(null);\n this.rangeError.set(false);\n this.hourText.set('');\n this.minuteText.set('');\n this.secondText.set('');\n this.timeChange.emit({ value: null, previousValue: previous, source: 'programmatic' });\n return;\n }\n const coerced = this.adapter.deserialize(value);\n if (coerced === null || !this.adapter.isValid(coerced)) {\n this.internalValue.set(null);\n this.value.set(null);\n this.hourText.set('');\n this.minuteText.set('');\n this.secondText.set('');\n this.rangeError.set(true);\n return;\n }\n const previous = this.internalValue();\n this.internalValue.set(coerced);\n this.value.set(coerced);\n this.rangeError.set(!this.isInRange(coerced));\n this.timeChange.emit({ value: coerced, previousValue: previous, source: 'programmatic' });\n }\n\n registerOnChange(fn: (value: D | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // ── FormFieldControl methods ──\n\n /** @internal */\n setDescribedByIds(ids: string[]): void {\n this.describedByIdsSignal.set([...ids]);\n }\n\n /** @internal */\n onContainerClick(event: MouseEvent): void {\n if (this.isDisabled()) return;\n const target = event.target as HTMLElement | null;\n // Clicks that land on an actual field or button should settle focus naturally.\n if (target && (target.tagName === 'INPUT' || target.tagName === 'BUTTON')) return;\n this.hourInputRef().nativeElement.focus();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cdevhub-ngx-tw-time-picker.mjs","sources":["../../../projects/ngx-tw/time-picker/time-picker-intl.ts","../../../projects/ngx-tw/time-picker/time-picker.ts","../../../projects/ngx-tw/time-picker/cdevhub-ngx-tw-time-picker.ts"],"sourcesContent":["import { Injectable, type Provider } from '@angular/core';\n\n/**\n * Localized strings + ARIA announcements consumed by the time-picker.\n *\n * Override per-field via Angular DI — provide a custom instance, or supply a\n * `Partial<TimePickerIntl>` through `provideTimePickerIntl`. Unset fields\n * 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 TimePickerIntl {\n // ---------------------------------------------------------------------------\n // Group + field labels\n // ---------------------------------------------------------------------------\n\n /** Accessible name for the fields group (the wrapper around hours/minutes/seconds). */\n groupLabel = 'Time';\n\n /** Accessible name for the hours field. */\n hoursLabel = 'Hours';\n\n /** Accessible name for the minutes field. */\n minutesLabel = 'Minutes';\n\n /** Accessible name for the seconds field. */\n secondsLabel = 'Seconds';\n\n /** Accessible name for the meridiem (AM/PM) radio group. */\n meridiemGroupLabel = 'AM or PM';\n\n /** Display + accessible name for the AM option. */\n amLabel = 'AM';\n\n /** Display + accessible name for the PM option. */\n pmLabel = 'PM';\n\n // ---------------------------------------------------------------------------\n // Stepper + clear button labels\n // ---------------------------------------------------------------------------\n\n /** Aria label template for the up stepper. Receives the active field name (`'hours'`, `'minutes'`, `'seconds'`). */\n increaseLabel(field: string): string {\n return `Increase ${field}`;\n }\n\n /** Aria label template for the down stepper. Receives the active field name (`'hours'`, `'minutes'`, `'seconds'`). */\n decreaseLabel(field: string): string {\n return `Decrease ${field}`;\n }\n\n /** Aria label for the clear button. */\n clearLabel = 'Clear time';\n\n // ---------------------------------------------------------------------------\n // Live announcements\n // ---------------------------------------------------------------------------\n\n /** Live-region message announced after the value is cleared. */\n clearedAnnouncement = 'Time cleared';\n\n /** Live-region message after a commit. Receives the pre-formatted time string (e.g. `'02:30 PM'`). */\n selectedAnnouncement(formattedTime: string): string {\n return `${formattedTime} selected`;\n }\n\n /** Spoken text for an empty hour/minute/second field — used as `aria-valuetext` when the field is blank. */\n emptyValueText = 'Empty';\n}\n\n/**\n * Provides a custom `TimePickerIntl` instance. Place at any injector level —\n * the time-picker resolves the closest one.\n *\n * @example\n * ```ts\n * providers: [\n * provideTimePickerIntl({\n * hoursLabel: 'Heures',\n * minutesLabel: 'Minutes',\n * meridiemGroupLabel: 'AM ou PM',\n * }),\n * ]\n * ```\n *\n * Keys explicitly set to `undefined` are dropped before merging. Root\n * `tsconfig.json` does not set `exactOptionalPropertyTypes`, so\n * `provideTimePickerIntl({ hoursLabel: bundle['time.hours'] })` type-checks\n * even when the lookup misses — and a plain `Object.assign` would then copy\n * that `undefined` over a field `TimePickerIntl` types as `string`. Because\n * this is a bootstrap-level provider, one missing key broke *every*\n * time-picker in the app: `focusedFieldLabel()` calls `.toLowerCase()` on the\n * field labels to build the stepper aria-labels, so the picker threw on first\n * render. Filtering here makes a missing key fall back to the English default.\n */\nexport function provideTimePickerIntl(custom: Partial<TimePickerIntl>): Provider {\n return {\n provide: TimePickerIntl,\n useFactory: () => {\n const overrides = Object.fromEntries(\n Object.entries(custom ?? {}).filter(([, value]) => value !== undefined),\n );\n return Object.assign(new TimePickerIntl(), overrides);\n },\n };\n}\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n isDevMode,\n linkedSignal,\n model,\n type OnInit,\n output,\n signal,\n type Signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport {\n type AbstractControl,\n type ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport { FocusMonitor, LiveAnnouncer } from '@angular/cdk/a11y';\nimport { tv } from 'tailwind-variants';\nimport {\n appendDigit,\n clamp,\n type ErrorStateMatcher,\n fieldMax,\n fieldMin,\n from12h,\n isTerminalDigit,\n padTwo,\n parseField,\n stepWithWrap,\n timeOfDaySeconds,\n to12h,\n type TimePickerFormat,\n type TimePickerMeridiem,\n type TwColor,\n type TwSize,\n wireErrorState,\n} from '@cdevhub/ngx-tw/core';\nimport {\n FormFieldControl,\n TW_FORM_FIELD,\n TW_FORM_FIELD_CONTROL,\n} from '@cdevhub/ngx-tw/form-field';\nimport { DATE_ADAPTER, type DateAdapter } from '@cdevhub/ngx-tw/calendar';\nimport { TimePickerIntl } from './time-picker-intl';\n\n// ── Public types ──────────────────────────────────────────────────\n\n/** Visual style of the time-picker chrome. */\nexport type TimePickerVariant = 'default' | 'naked';\n\n/** Logical field inside the time-picker. */\nexport type TimePickerField = 'hour' | 'minute' | 'second' | 'meridiem';\n\n/** Origin of a value change — useful when consumers need to distinguish user input from programmatic writes. */\nexport type TimePickerChangeSource =\n | 'input'\n | 'stepper'\n | 'meridiem'\n | 'clear'\n | 'programmatic';\n\n/** Emitted by `timeChange` after a committed value update. */\nexport interface TimePickerChangeEvent<D> {\n /** The committed value (`null` when cleared). */\n readonly value: D | null;\n /** The value before this change. */\n readonly previousValue: D | null;\n /** What triggered the change. */\n readonly source: TimePickerChangeSource;\n}\n\n/** Emitted by `timeInput` before a commit, on every keystroke or stepper press. */\nexport interface TimePickerInputEvent<D> {\n /** Which field was edited. */\n readonly field: TimePickerField;\n /** The raw text currently in that field (pre-commit). */\n readonly rawText: string;\n /** The parsed value if fields form a valid time, else `null`. */\n readonly parsed: D | null;\n}\n\n// Re-export the shared format / meridiem aliases so consumers can import\n// them from `ngx-tw/time-picker` without reaching into core.\nexport type { TimePickerFormat, TimePickerMeridiem } from '@cdevhub/ngx-tw/core';\n\n// ── tv() config ───────────────────────────────────────────────────\n\nconst timePickerVariants = tv(\n {\n slots: {\n root: 'inline-flex items-center text-fg transition-[color,border-color,box-shadow] duration-normal motion-reduce:transition-none',\n fieldGroup: 'inline-flex items-center tabular-nums font-medium',\n field:\n 'bg-transparent text-center outline-none border-0 p-0 m-0 text-fg placeholder:text-fg-subtle rounded-md caret-transparent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n separator: 'text-fg-subtle select-none px-0.5',\n // Column stretches to the field height; the two buttons split it via\n // `flex-1`. Codified departure from CLAUDE.md \"Square interactive targets\"\n // (size-6/7/8): stacking two square buttons made the column 2× a button\n // tall — far taller than the digit row — which bloated the field height.\n // So the buttons carry a fixed WIDTH only (per-size below); the chevron\n // glyph's min-content (size-3 = 12px) is the natural floor.\n //\n // WCAG 2.5.8 (target-size, 24px — which slider.ts / badge.ts codify):\n // two stacked buttons cannot each be ≥24px tall inside a compact field\n // without re-bloating it, so each spinner ends up < 24px tall. Accepted\n // as the equivalent-control exception applies — the time is fully editable\n // by typing into the spinbutton fields (and via ↑/↓), so the spinner is a\n // pointer enhancement, never the only path.\n //\n // That min-content floor is also why the column is suppressed at\n // `size=\"xs\"` + `variant=\"default\"`: a pinned h-6 root leaves a 22px content\n // box, below the stacked pair's 24px floor. See `steppersVisible` below.\n stepperGroup: 'flex flex-col self-stretch ml-0.5',\n stepper:\n 'flex-1 inline-flex items-center justify-center text-fg-muted hover:text-fg hover:bg-surface-muted rounded-md transition-colors duration-normal motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 disabled:opacity-40 disabled:pointer-events-none',\n stepperIcon: '',\n meridiem:\n 'inline-flex items-center rounded-md border border-border overflow-hidden ml-2 shrink-0',\n meridiemButton:\n 'font-medium text-fg-muted hover:bg-surface-muted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 transition-colors duration-normal motion-reduce:transition-none disabled:opacity-40 disabled:pointer-events-none',\n // size-6 (24×24 CSS px) is the WCAG 2.2 SC 2.5.8 minimum interactive target, held flat across\n // every size. It fits the 30/34/42/46px content boxes at sm..xl. At xs the pinned root is h-6\n // (24px border-box) so its content box is only 22px: the button stays 24×24 anyway —\n // docs/vertical-rhythm.md calls 24px a hard floor — and therefore coincides with the root's\n // *border*-box, overlapping the 1px border row top and bottom. The root's height is unaffected\n // (h-6 is a definite height); only the hover fill meets the border at that density.\n clearButton:\n 'inline-flex items-center justify-center shrink-0 rounded-md text-fg-muted hover:text-fg hover:bg-surface-muted transition-colors duration-normal motion-reduce:transition-none size-6 ml-1 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n },\n variants: {\n size: {\n xs: {\n root: 'gap-1 text-xs',\n // Numeric field width is sized to fit a 2-digit value at the current font scale. Off\n // the standard width scale because the field is content-driven, not a layout primitive\n // — see CLAUDE.md spacing scale rationale.\n field: 'w-5 text-xs',\n stepper: 'w-6',\n stepperIcon: 'size-3',\n // `border-0` on the AM/PM shell only at xs. With its 1px border the pair\n // measures 26px, which cannot sit inside the 22px content box of a pinned\n // h-6 root. Dropping the shell border lets each radio keep the full 24px\n // WCAG 2.2 SC 2.5.8 target height and makes the pair coincide with the\n // root's border-box. The pair stays legible without the shell because the\n // selected half always carries a solid `bg-{color}-500` fill.\n meridiem: 'border-0',\n meridiemButton: 'px-1.5 py-1 text-2xs',\n },\n sm: {\n root: 'gap-1 text-sm',\n // sm-density numeric field — sized to fit a 2-digit value at text-sm; see CLAUDE.md spacing scale rationale.\n field: 'w-6 text-sm',\n stepper: 'w-7',\n stepperIcon: 'size-3',\n meridiemButton: 'px-2 py-1 text-xs',\n },\n md: {\n root: 'gap-1.5 text-sm',\n // md-density numeric field — sized to fit a 2-digit value at text-sm; see CLAUDE.md spacing scale rationale.\n field: 'w-7 text-sm',\n stepper: 'w-7',\n stepperIcon: 'size-3',\n meridiemButton: 'px-2 py-1 text-xs',\n },\n lg: {\n root: 'gap-1.5 text-base',\n // lg-density numeric field — sized to fit a 2-digit value at text-base; see CLAUDE.md spacing scale rationale.\n field: 'w-8 text-base',\n stepper: 'w-8',\n stepperIcon: 'size-4',\n meridiemButton: 'px-2.5 py-1.5 text-sm',\n },\n xl: {\n root: 'gap-2 text-base',\n // xl-density numeric field — sized to fit a 2-digit value at text-base; see CLAUDE.md spacing scale rationale.\n field: 'w-9 text-base',\n stepper: 'w-8',\n stepperIcon: 'size-4',\n meridiemButton: 'px-3 py-1.5 text-sm',\n },\n },\n variant: {\n default: {\n // No `py-*`: the height is pinned per size in compoundVariants below.\n // See docs/vertical-rhythm.md §3 — padding and a pinned height fight,\n // and under border-box the taller one silently wins.\n root: 'rounded-md border border-border bg-surface px-3 hover:border-border-strong',\n },\n naked: {\n root: 'bg-transparent border-0 rounded-none p-0 focus-within:outline-none',\n },\n },\n disabled: {\n true: { root: 'opacity-50 pointer-events-none cursor-not-allowed' },\n false: {},\n },\n focused: { true: {}, false: {} },\n errorState: { true: {}, false: {} },\n color: {\n primary: {},\n secondary: {},\n accent: {},\n neutral: {},\n info: {},\n success: {},\n warning: {},\n error: {},\n },\n },\n compoundVariants: [\n // ── Pinned control height (docs/vertical-rhythm.md §1) ──\n // Only the `default` variant carries a height. `naked` means somebody else\n // owns the box — `<tw-form-field>` auto-nakeds this picker and supplies its\n // own bordered, padded controlWrapper, and both `<tw-date-picker>` and\n // `<tw-date-range-picker>` embed a naked time-picker in their overlay footer.\n // Pinning naked would stack 36px on top of those hosts' own padding.\n { variant: 'default', size: 'xs', class: { root: 'h-6' } },\n { variant: 'default', size: 'sm', class: { root: 'h-8' } },\n { variant: 'default', size: 'md', class: { root: 'h-9' } },\n { variant: 'default', size: 'lg', class: { root: 'h-11' } },\n { variant: 'default', size: 'xl', class: { root: 'h-12' } },\n\n { variant: 'default', focused: true, color: 'primary', class: { root: 'border-primary-500' } },\n { variant: 'default', focused: true, color: 'secondary', class: { root: 'border-secondary-500' } },\n { variant: 'default', focused: true, color: 'accent', class: { root: 'border-accent-500' } },\n { variant: 'default', focused: true, color: 'neutral', class: { root: 'border-border-strong' } },\n { variant: 'default', focused: true, color: 'info', class: { root: 'border-info-500' } },\n { variant: 'default', focused: true, color: 'success', class: { root: 'border-success-500' } },\n { variant: 'default', focused: true, color: 'warning', class: { root: 'border-warning-500' } },\n { variant: 'default', focused: true, color: 'error', class: { root: 'border-error-500' } },\n { variant: 'default', errorState: true, class: { root: 'border-error-500' } },\n ],\n defaultVariants: {\n size: 'md',\n variant: 'default',\n disabled: false,\n errorState: false,\n focused: false,\n color: 'primary',\n },\n },\n { twMerge: true },\n);\n\n// ── Static active-state color lookup for the AM/PM meridiem button ─────────────\n// Each entry is written out so Tailwind v4's static scanner picks the classes up.\n// Mirrors the lookup-table pattern used by `checkbox.ts` and `radio.ts`.\n//\n// Every entry uses the `{role}-solid` / `-solid-fg` / `-solid-hover` slot trio,\n// which the theme layer picks specifically so the label reaches AA on the fill\n// (see the light-mode contrast table in `theme/_semantic.css`). The previous\n// `bg-{role}-500 text-on-{role}` pairing was off that contract: `primary-500`\n// is blue-500, and white on blue-500 measures 3.76:1 in light / 3.92:1 in dark\n// against a 4.5:1 bar for this 12px label. `primary-solid` is blue-600 in light\n// (≈6:1 on white) and blue-400 in dark (≈5.6:1 on blue-950). `--color-on-{role}`\n// is additionally a legacy alias the theme marks for removal — new code takes\n// the slot token directly.\nconst MERIDIEM_ACTIVE_COLOR: Record<TwColor, string> = {\n primary: 'bg-primary-solid text-primary-solid-fg hover:bg-primary-solid-hover',\n secondary: 'bg-secondary-solid text-secondary-solid-fg hover:bg-secondary-solid-hover',\n accent: 'bg-accent-solid text-accent-solid-fg hover:bg-accent-solid-hover',\n neutral: 'bg-neutral-solid text-neutral-solid-fg hover:bg-neutral-solid-hover',\n info: 'bg-info-solid text-info-solid-fg hover:bg-info-solid-hover',\n success: 'bg-success-solid text-success-solid-fg hover:bg-success-solid-hover',\n warning: 'bg-warning-solid text-warning-solid-fg hover:bg-warning-solid-hover',\n error: 'bg-error-solid text-error-solid-fg hover:bg-error-solid-hover',\n};\n\nlet nextTimePickerId = 0;\n\n/**\n * Segmented time editor. Renders `HH : MM` (with an optional `: SS` and/or\n * `AM/PM` toggle) and integrates with all three Angular form strategies via\n * `ControlValueAccessor`. Also participates in `<tw-form-field>` through\n * `FormFieldControl` — wrapping is optional.\n *\n * Value type is `D | null`. Every time operation flows through the injected\n * `DateAdapter<D>`, so the component works with the default native adapter\n * (`provideNativeDateAdapter()`) or any custom adapter a consumer ships.\n */\n/**\n * Validation errors a `tw-time-picker` can place on its bound control.\n *\n * Mirrors the shape of `CalendarValidationErrors` so the two pickers report\n * constraint violations the same way: a code keyed by what was violated, with\n * the offending value and the bound it broke.\n */\nexport type TimePickerValidationErrors = Partial<{\n timePickerMin: { min: unknown; actual: unknown };\n timePickerMax: { max: unknown; actual: unknown };\n}>;\n\n@Component({\n selector: 'tw-time-picker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: TW_FORM_FIELD_CONTROL,\n useExisting: forwardRef(() => TimePickerComponent),\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => TimePickerComponent),\n multi: true,\n },\n // Required, not optional. Angular v22 compiles any component exposing a\n // `value` model() as a signal-forms custom control; `FormControlDirective`\n // only takes the classic CVA path — the one that runs `setUpValidators` and\n // composes the NG_VALIDATORS above — when a value accessor is already\n // visible at directive-creation time. Assigning `ngControl.valueAccessor`\n // in a lifecycle hook is too late, and the failure is silent: value and\n // disabled still round-trip, so only a spec asserting an error code on a\n // bound FormControl catches it. See CLAUDE.md's ControlValueAccessor\n // section.\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TimePickerComponent),\n multi: true,\n },\n ],\n template: `\n <div\n [class]=\"fieldGroupClasses()\"\n role=\"group\"\n [attr.aria-label]=\"groupAriaLabel()\"\n [attr.aria-labelledby]=\"groupLabelledBy()\"\n >\n <input\n #hourInput\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n maxlength=\"2\"\n [class]=\"fieldClasses()\"\n [value]=\"hourDisplay()\"\n [placeholder]=\"placeholder() ?? '--'\"\n [disabled]=\"isDisabled()\"\n [attr.readonly]=\"readonlyInput() ? 'true' : null\"\n [attr.aria-label]=\"intl.hoursLabel\"\n [attr.role]=\"'spinbutton'\"\n [attr.aria-valuemin]=\"hourMin()\"\n [attr.aria-valuemax]=\"hourMax()\"\n [attr.aria-valuenow]=\"hourValueNow()\"\n [attr.aria-valuetext]=\"hourValueText()\"\n [attr.aria-invalid]=\"errorState() || null\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (keydown)=\"onFieldKeydown($event, 'hour')\"\n (beforeinput)=\"onBeforeInput($event, 'hour')\"\n (input)=\"onInputEvent($event, 'hour')\"\n (focus)=\"onFieldFocus('hour')\"\n (blur)=\"onFieldBlur('hour')\"\n />\n\n <span [class]=\"separatorClasses()\" aria-hidden=\"true\">:</span>\n\n <input\n #minuteInput\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n maxlength=\"2\"\n [class]=\"fieldClasses()\"\n [value]=\"minuteText()\"\n [placeholder]=\"placeholder() ?? '--'\"\n [disabled]=\"isDisabled()\"\n [attr.readonly]=\"readonlyInput() ? 'true' : null\"\n [attr.aria-label]=\"intl.minutesLabel\"\n [attr.role]=\"'spinbutton'\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"59\"\n [attr.aria-valuenow]=\"minuteValueNow()\"\n [attr.aria-valuetext]=\"minuteValueText()\"\n [attr.aria-invalid]=\"errorState() || null\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (keydown)=\"onFieldKeydown($event, 'minute')\"\n (beforeinput)=\"onBeforeInput($event, 'minute')\"\n (input)=\"onInputEvent($event, 'minute')\"\n (focus)=\"onFieldFocus('minute')\"\n (blur)=\"onFieldBlur('minute')\"\n />\n\n @if (showSeconds()) {\n <span [class]=\"separatorClasses()\" aria-hidden=\"true\">:</span>\n\n <input\n #secondInput\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n maxlength=\"2\"\n [class]=\"fieldClasses()\"\n [value]=\"secondText()\"\n [placeholder]=\"placeholder() ?? '--'\"\n [disabled]=\"isDisabled()\"\n [attr.readonly]=\"readonlyInput() ? 'true' : null\"\n [attr.aria-label]=\"intl.secondsLabel\"\n [attr.role]=\"'spinbutton'\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"59\"\n [attr.aria-valuenow]=\"secondValueNow()\"\n [attr.aria-valuetext]=\"secondValueText()\"\n [attr.aria-invalid]=\"errorState() || null\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (keydown)=\"onFieldKeydown($event, 'second')\"\n (beforeinput)=\"onBeforeInput($event, 'second')\"\n (input)=\"onInputEvent($event, 'second')\"\n (focus)=\"onFieldFocus('second')\"\n (blur)=\"onFieldBlur('second')\"\n />\n }\n </div>\n\n @if (steppersVisible()) {\n <div [class]=\"stepperGroupClasses()\">\n <button\n type=\"button\"\n tabindex=\"-1\"\n [class]=\"stepperClasses()\"\n [attr.aria-label]=\"intl.increaseLabel(focusedFieldLabel())\"\n [disabled]=\"isDisabled() || readonlyInput()\"\n (mousedown)=\"onStepperMouseDown($event)\"\n (click)=\"onStepperClick(1)\"\n >\n <ng-content select=\"[slot=stepper-up]\">\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" [class]=\"stepperIconClasses()\">\n <path fill-rule=\"evenodd\" d=\"M14.77 12.79a.75.75 0 0 1-1.06-.02L10 8.94l-3.71 3.83a.75.75 0 1 1-1.08-1.04l4.25-4.39a.75.75 0 0 1 1.08 0l4.25 4.39a.75.75 0 0 1-.02 1.06Z\" clip-rule=\"evenodd\" />\n </svg>\n </ng-content>\n </button>\n <button\n type=\"button\"\n tabindex=\"-1\"\n [class]=\"stepperClasses()\"\n [attr.aria-label]=\"intl.decreaseLabel(focusedFieldLabel())\"\n [disabled]=\"isDisabled() || readonlyInput()\"\n (mousedown)=\"onStepperMouseDown($event)\"\n (click)=\"onStepperClick(-1)\"\n >\n <ng-content select=\"[slot=stepper-down]\">\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" [class]=\"stepperIconClasses()\">\n <path fill-rule=\"evenodd\" d=\"M5.23 7.21a.75.75 0 0 1 1.06.02L10 11.06l3.71-3.83a.75.75 0 1 1 1.08 1.04l-4.25 4.39a.75.75 0 0 1-1.08 0L5.21 8.27a.75.75 0 0 1 .02-1.06Z\" clip-rule=\"evenodd\" />\n </svg>\n </ng-content>\n </button>\n </div>\n }\n\n @if (format() === '12h') {\n <div [class]=\"meridiemClasses()\" role=\"radiogroup\" [attr.aria-label]=\"intl.meridiemGroupLabel\">\n <button\n type=\"button\"\n role=\"radio\"\n [class]=\"meridiemButtonClasses('AM')\"\n [attr.aria-checked]=\"meridiem() === 'AM'\"\n [attr.aria-label]=\"intl.amLabel\"\n [disabled]=\"isDisabled() || readonlyInput()\"\n (click)=\"setMeridiem('AM')\"\n (keydown)=\"onMeridiemKeydown($event, 'AM')\"\n >{{ intl.amLabel }}</button>\n <button\n type=\"button\"\n role=\"radio\"\n [class]=\"meridiemButtonClasses('PM')\"\n [attr.aria-checked]=\"meridiem() === 'PM'\"\n [attr.aria-label]=\"intl.pmLabel\"\n [disabled]=\"isDisabled() || readonlyInput()\"\n (click)=\"setMeridiem('PM')\"\n (keydown)=\"onMeridiemKeydown($event, 'PM')\"\n >{{ intl.pmLabel }}</button>\n </div>\n }\n\n @if (showClear() && !isEmpty() && !isDisabled() && !readonlyInput()) {\n <button\n type=\"button\"\n tabindex=\"-1\"\n [class]=\"clearButtonClasses()\"\n [attr.aria-label]=\"clearLabel()\"\n (click)=\"onClearClick($event)\"\n >\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" class=\"size-3\">\n <path\n fill-rule=\"evenodd\"\n d=\"M10 8.586 4.707 3.293a1 1 0 0 0-1.414 1.414L8.586 10l-5.293 5.293a1 1 0 1 0 1.414 1.414L10 11.414l5.293 5.293a1 1 0 0 0 1.414-1.414L11.414 10l5.293-5.293a1 1 0 0 0-1.414-1.414L10 8.586Z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n </button>\n }\n `,\n host: {\n '[class]': 'rootClasses()',\n '[id]': 'hostId',\n '[attr.aria-disabled]': 'isDisabled() || null',\n '[attr.aria-invalid]': 'errorState() || null',\n '[attr.data-variant]': 'resolvedVariant()',\n },\n})\nexport class TimePickerComponent<D = Date>\n extends FormFieldControl<D>\n implements ControlValueAccessor, Validator, OnInit\n{\n // ── Inputs ──\n\n /** Id on the time-picker's host element. Auto-generated when not provided. The accessible name inside a `<tw-form-field>` comes from `aria-labelledby` on the inner `role=\"group\"` wrapper, not from the field's `<label for>` — the host is a custom element, which `for` cannot target. */\n readonly idInput = input<string | undefined>(undefined, { alias: 'id' });\n\n /** When true, the whole component is disabled and every field sets `aria-disabled=\"true\"`. Defaults to `false`. */\n readonly disabledInput = input<boolean, unknown>(false, {\n alias: 'disabled',\n transform: booleanAttribute,\n });\n\n /** When true, exposes `aria-required=\"true\"`. Validators.required on a bound NgControl is also honoured. Defaults to `false`. */\n readonly requiredInput = input<boolean, unknown>(false, {\n alias: 'required',\n transform: booleanAttribute,\n });\n\n /** When true, blocks typing, stepping, and the AM/PM toggle — the value is still read-only visible. Defaults to `false`. Alias: `readonly`. */\n readonly readonlyInput = input<boolean, unknown>(false, {\n alias: 'readonly',\n transform: booleanAttribute,\n });\n\n /** Controls field height, font size, and stepper density. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** Semantic color used for the focused border and focus ring. Defaults to `'primary'`. */\n readonly color = input<TwColor>('primary');\n\n /** Visual style of the chrome. `'default'` draws its own border; `'naked'` strips chrome. Auto-resolves to `'naked'` inside `<tw-form-field>`. */\n readonly variant = input<TimePickerVariant | undefined>(undefined);\n\n /** `'12h'` renders 1–12 hours with an AM/PM toggle; `'24h'` renders 00–23. The same axis is spelled `timeFormat` on `tw-date-range-picker` and lives under `timeConfig.format` on `tw-date-picker`, where `format` instead means the display-format descriptor. Defaults to `'24h'`. */\n readonly format = input<TimePickerFormat>('24h');\n\n /** When true, renders a seconds field after minutes. Defaults to `false`. */\n readonly showSeconds = input<boolean>(false);\n\n /** Amount to add/subtract when stepping hours. Defaults to `1`. */\n readonly hourStep = input<number>(1);\n\n /** Amount to add/subtract when stepping minutes. Defaults to `1`. */\n readonly minuteStep = input<number>(1);\n\n /** Amount to add/subtract when stepping seconds. Defaults to `1`. */\n readonly secondStep = input<number>(1);\n\n /** Earliest accepted time-of-day. Values earlier than this set `errorState` and mark the bound control invalid with `timePickerMin`. Defaults to `null`. Note: when `showSeconds` is `false`, the seconds component of any value still participates in the range comparison — supply `minTime` with zeroed seconds to match the 2-field display. */\n readonly minTime = input<D | null>(null);\n\n /** Latest accepted time-of-day. Values later than this set `errorState` and mark the bound control invalid with `timePickerMax`. Defaults to `null`. Note: when `showSeconds` is `false`, the seconds component of any value still participates in the range comparison — supply `maxTime` with zeroed seconds to match the 2-field display. */\n readonly maxTime = input<D | null>(null);\n\n /** Date portion used when the user types a time while `value` is `null`. Defaults to today. */\n readonly referenceDate = input<D | null>(null);\n\n /** Placeholder shown in each field when empty. Defaults to `'--'`. */\n readonly placeholder = input<string | undefined>(undefined);\n\n /** Whether to render the up/down stepper column. Defaults to `true`. Pointer users expect inline up/down chevrons next to a numeric editor; without them the picker reads as a static display and consumers must rebuild stepping for every instance. Ignored at `size=\"xs\"` on the bordered `default` variant, where the 24px control leaves no room for a stacked pair — use ↑/↓ on a field instead. */\n readonly showSteppers = input<boolean>(true);\n\n /** Whether to render the clear affordance when a value is set. Defaults to `true` — it matches `<tw-date-picker>` and `<tw-input>` clear behaviour; without the inline clear every form has to wire its own reset surface for an obvious affordance. */\n readonly showClear = input<boolean>(true);\n\n /** Accessible label for the clear button. Note the name differs in meaning from the date pickers, which spell this `clearAriaLabel` and reserve `clearLabel` for the overlay action bar's visible button text. Defaults to `'Clear time'`. */\n readonly clearLabel = input<string>('Clear time');\n\n /** Per-instance override of the `ErrorStateMatcher`. Defaults to `undefined`. */\n readonly errorStateMatcher = input<ErrorStateMatcher | undefined>(undefined);\n\n /** Accessible name for the fields group. Required when no visible label is supplied. Alias: `aria-label`. Defaults to `undefined`. */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n /** ID of an external element that labels the group. Alias: `aria-labelledby`. Defaults to `undefined`. */\n readonly ariaLabelledby = input<string | undefined>(undefined, { alias: 'aria-labelledby' });\n\n /** Consumer-supplied `aria-describedby` ids. The form-field preserves these when merging hint/error ids. Alias: `aria-describedby`. Defaults to `undefined`. */\n readonly userAriaDescribedByInput = input<string | undefined>(undefined, {\n alias: 'aria-describedby',\n });\n\n // ── Models ──\n\n /** Two-way bound current time. `null` when empty. Setting programmatically updates the fields without firing `onChange`. Defaults to `null`. */\n readonly value = model<D | null>(null);\n\n // ── Outputs ──\n\n /** Fires on every keystroke, stepper press, or AM/PM toggle — before the new value is committed. */\n readonly timeInput = output<TimePickerInputEvent<D>>();\n\n /** Fires after a committed change — digit + auto-advance, stepper, meridiem toggle, clear, or programmatic write. */\n readonly timeChange = output<TimePickerChangeEvent<D>>();\n\n // ── Injected deps ──\n\n private readonly adapter = inject<DateAdapter<D>>(DATE_ADAPTER);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n private readonly formField = inject(TW_FORM_FIELD, { optional: true });\n // Resolved lazily in `ngOnInit`: this component self-provides NG_VALIDATORS\n // via `useExisting`, so an eager `inject(NgControl, { self })` would deadlock\n // against its own validator during construction. Mirrors `date-picker.ts`,\n // `date-range-picker.ts` and `calendar.ts`.\n private ngControl: NgControl | null = null;\n\n /** @internal — exposed for the template; consumers configure via `provideTimePickerIntl()`. */\n protected readonly intl = inject(TimePickerIntl, { optional: true }) ?? new TimePickerIntl();\n\n // ── View refs ──\n\n private readonly hourInputRef = viewChild.required<ElementRef<HTMLInputElement>>('hourInput');\n private readonly minuteInputRef =\n viewChild.required<ElementRef<HTMLInputElement>>('minuteInput');\n private readonly secondInputRef =\n viewChild<ElementRef<HTMLInputElement>>('secondInput');\n\n // ── Identity ──\n\n private readonly uid = nextTimePickerId++;\n /** @internal */\n readonly hostId = `tw-time-picker-${this.uid}`;\n\n // ── Internal state ──\n\n /** @internal raw display text per field — always the numerals the user sees. */\n readonly hourText = signal<string>('');\n /** @internal */\n readonly minuteText = signal<string>('');\n /** @internal */\n readonly secondText = signal<string>('');\n /** @internal */\n readonly meridiem = signal<TimePickerMeridiem>('AM');\n /** @internal */\n readonly focusedField = signal<TimePickerField | null>(null);\n /** @internal */\n readonly internalValue = linkedSignal<D | null>(() => this.value());\n\n private readonly cvaDisabled = signal(false);\n private readonly describedByIdsSignal = signal<readonly string[]>([]);\n private readonly labelledByIdsSignal = signal<readonly string[]>([]);\n private readonly focusedSignal = signal(false);\n\n /** @internal Shared `errorState` / `required` / `errors` derivation — see `wireErrorState`. */\n private readonly errorWiring = wireErrorState({\n ngControl: () => this.ngControl,\n matcher: () => this.errorStateMatcher(),\n required: () => this.requiredInput(),\n track: [() => this.focusedSignal()],\n // An out-of-range time is an error regardless of validator status.\n errorStateOverride: () => (this.rangeError() ? true : undefined),\n });\n /** When true, an effect should not rewrite field text from the external value. */\n private editing = false;\n\n private onChange: (value: D | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n // ── Derived state ──\n\n /** @internal */\n readonly isDisabled = computed(() => {\n this.errorWiring.rev();\n return this.disabledInput() || this.cvaDisabled() || !!this.ngControl?.disabled;\n });\n\n /** @internal */\n readonly isEmpty = computed(() => this.internalValue() === null);\n\n /** @internal Effective variant — auto-naked when wrapped in tw-form-field. */\n readonly resolvedVariant = computed<TimePickerVariant>(\n () => this.variant() ?? (this.formField ? 'naked' : 'default'),\n );\n\n /**\n * @internal Whether the stepper column actually renders.\n *\n * `showSteppers` stays the consumer's switch, but the column is geometrically\n * impossible at `size=\"xs\"` on the bordered `default` variant: the pinned h-6\n * root is 24px border-box, leaving a 22px content box, while a stacked pair of\n * chevron buttons has a 24px min-content height (2 × size-3). Rendering it\n * anyway would either overflow the shell or squeeze each button to 11px — far\n * under any usable pointer target. The `naked` variant keeps its steppers: it\n * draws no border, so in the date-picker / date-range-picker overlay footers a\n * 24px row leaves a full 24px content box and the pair fits exactly. (Inside\n * `<tw-form-field>` the row is governed by the field's own padding and its\n * `min-h-*` floor, which is a minimum — the row grows rather than clipping.)\n * Stepping stays available everywhere via ↑/↓ on a focused field, so nothing\n * becomes unreachable.\n */\n readonly steppersVisible = computed(() => {\n if (!this.showSteppers()) return false;\n return !(this.size() === 'xs' && this.resolvedVariant() === 'default');\n });\n\n /** @internal */\n readonly hourMin = computed(() => fieldMin('hour', this.format()));\n /** @internal */\n readonly hourMax = computed(() => fieldMax('hour', this.format()));\n\n /** @internal */\n readonly hourDisplay = computed(() => this.hourText());\n\n /** @internal */\n readonly hourValueNow = computed(() => {\n const n = parseField(this.hourText());\n return n === null ? null : n;\n });\n\n /** @internal */\n readonly hourValueText = computed(() => {\n const n = this.hourValueNow();\n if (n === null) return this.intl.emptyValueText;\n const meridiemLabel = this.meridiem() === 'AM' ? this.intl.amLabel : this.intl.pmLabel;\n const suffix = this.format() === '12h' ? ` ${meridiemLabel}` : '';\n return `${padTwo(n)}${suffix}`;\n });\n\n /** @internal */\n readonly minuteValueNow = computed(() => parseField(this.minuteText()));\n /** @internal */\n readonly minuteValueText = computed(() => {\n const n = this.minuteValueNow();\n return n === null ? this.intl.emptyValueText : padTwo(n);\n });\n\n /** @internal */\n readonly secondValueNow = computed(() => parseField(this.secondText()));\n /** @internal */\n readonly secondValueText = computed(() => {\n const n = this.secondValueNow();\n return n === null ? this.intl.emptyValueText : padTwo(n);\n });\n\n /**\n * @internal Merged `aria-labelledby` for the `role=\"group\"` wrapper: the ids a\n * wrapping `<tw-form-field>` pushes down (its projected `<label twLabel>` plus\n * anything the consumer supplied) or, standalone, the consumer's own\n * `aria-labelledby`. The host is `<tw-time-picker>`, a custom element the\n * field's `<label for>` cannot target, so this attribute is the only route\n * from the visible label to the composite. Returns `null` when nothing labels\n * the group by reference.\n */\n readonly groupLabelledBy = computed<string | null>(() => {\n const pushed = this.labelledByIdsSignal();\n if (pushed.length) return pushed.join(' ');\n return this.ariaLabelledby() ?? null;\n });\n\n /**\n * @internal `aria-label` for the group. An explicit `aria-label` always wins;\n * otherwise the generic intl fallback is suppressed whenever `groupLabelledBy`\n * already names the group, so a real label is not shadowed by \"Time\" in the\n * accessibility tree inspector.\n */\n readonly groupAriaLabel = computed(() => {\n const explicit = this.ariaLabel();\n if (explicit) return explicit;\n return this.groupLabelledBy() ? null : this.intl.groupLabel;\n });\n\n /** @internal Label of the currently focused field, used by stepper aria-labels. */\n readonly focusedFieldLabel = computed(() => {\n const f = this.focusedField();\n if (f === 'minute') return this.intl.minutesLabel.toLowerCase();\n if (f === 'second') return this.intl.secondsLabel.toLowerCase();\n return this.intl.hoursLabel.toLowerCase();\n });\n\n /** @internal */\n readonly describedBy = computed(() => {\n const extra = this.describedByIdsSignal();\n const user = this.userAriaDescribedByInput();\n const merged = [...extra];\n if (user) {\n for (const id of user.split(/\\s+/)) if (id) merged.push(id);\n }\n return merged.length ? merged.join(' ') : '';\n });\n\n // ── Range / error state ──\n\n private readonly rangeError = signal(false);\n\n // ── tv() output ──\n\n private readonly variantResult = computed(() =>\n timePickerVariants({\n size: this.size(),\n variant: this.resolvedVariant(),\n disabled: this.isDisabled(),\n errorState: this.errorState(),\n focused: this.focusedSignal(),\n color: this.color(),\n }),\n );\n\n /** @internal */ readonly rootClasses = computed(() => this.variantResult().root());\n /** @internal */ readonly fieldGroupClasses = computed(() => this.variantResult().fieldGroup());\n /** @internal */ readonly fieldClasses = computed(() => this.variantResult().field());\n /** @internal */ readonly separatorClasses = computed(() => this.variantResult().separator());\n /** @internal */ readonly stepperGroupClasses = computed(() => this.variantResult().stepperGroup());\n /** @internal */ readonly stepperClasses = computed(() => this.variantResult().stepper());\n /** @internal */ readonly stepperIconClasses = computed(() => this.variantResult().stepperIcon());\n /** @internal */ readonly meridiemClasses = computed(() => this.variantResult().meridiem());\n /** @internal */ readonly clearButtonClasses = computed(() => this.variantResult().clearButton());\n\n /** @internal */\n meridiemButtonClasses(which: TimePickerMeridiem): string {\n const base = this.variantResult().meridiemButton();\n const active = this.meridiem() === which;\n return active ? `${base} ${MERIDIEM_ACTIVE_COLOR[this.color()]}` : base;\n }\n\n // ── FormFieldControl impl ──\n\n /** @internal */ readonly id: Signal<string> = computed(() => this.idInput() ?? this.hostId);\n /** @internal */ readonly focused: Signal<boolean> = this.focusedSignal.asReadonly();\n /** @internal */ readonly empty: Signal<boolean> = this.isEmpty;\n /** @internal */ readonly disabled: Signal<boolean> = this.isDisabled;\n /**\n * Whether the control is required — the `required` input OR `Validators.required`\n * on a bound `NgControl`. Bound to `aria-required` on each spinbutton field, not on\n * the `role=\"group\"` wrapper, which does not permit the attribute.\n */\n readonly required: Signal<boolean> = this.errorWiring.required;\n /** @internal */\n readonly errorState: Signal<boolean> = this.errorWiring.errorState;\n /**\n * @internal Active validation errors map from the bound `NgControl` (or `null` when the\n * control reports none / is unbound). This is what `[twError match=\"…\"]` filters on inside a\n * `<tw-form-field>`; without it every `match`-targeted message — including the\n * `timePickerMin` / `timePickerMax` codes this component's `NG_VALIDATORS` apparatus exists\n * to produce — stays permanently hidden.\n */\n override readonly errors: Signal<Record<string, unknown> | null> = this.errorWiring.errors;\n\n /** @internal */ readonly controlType = 'time-picker';\n /** @internal */\n readonly userAriaDescribedBy: Signal<string | undefined> = computed(() =>\n this.userAriaDescribedByInput(),\n );\n\n /** @internal Consumer-supplied `aria-labelledby`, surfaced so the wrapping form-field merges it into the ids it pushes back rather than replacing it. */\n override readonly userAriaLabelledby: Signal<string | undefined> = computed(() =>\n this.ariaLabelledby(),\n );\n\n // ── Constructor ──\n\n constructor() {\n super();\n\n // Re-run validation when a constraint moves, so `control.errors` reflects\n // the new bound instead of the verdict from when the value was committed.\n // `validatorOnChange` is a plain callback into Angular's validator\n // plumbing, not a signal write, so this cannot cycle.\n effect(() => {\n this.minTime();\n this.maxTime();\n untracked(() => this.validatorOnChange());\n });\n\n // Sync the field text whenever the underlying value changes (programmatic).\n effect(() => {\n const v = this.internalValue();\n const fmt = this.format();\n const showS = this.showSeconds();\n untracked(() => {\n if (this.editing) return;\n if (v === null || !this.adapter.isValid(v)) {\n this.hourText.set('');\n this.minuteText.set('');\n this.secondText.set('');\n this.rangeError.set(false);\n return;\n }\n const h24 = this.adapter.getHours(v);\n const m = this.adapter.getMinutes(v);\n const s = this.adapter.getSeconds(v);\n if (fmt === '12h') {\n this.hourText.set(padTwo(to12h(h24)));\n this.meridiem.set(h24 >= 12 ? 'PM' : 'AM');\n } else {\n this.hourText.set(padTwo(h24));\n }\n this.minuteText.set(padTwo(m));\n this.secondText.set(showS ? padTwo(s) : '');\n this.rangeError.set(!this.isInRange(v));\n });\n });\n\n // Re-render the hour text when switching format (e.g., 24h → 12h) or showSeconds.\n effect(() => {\n this.format();\n this.showSeconds();\n untracked(() => {\n const v = this.internalValue();\n if (v === null || !this.adapter.isValid(v)) return;\n const h24 = this.adapter.getHours(v);\n if (this.format() === '12h') {\n this.hourText.set(padTwo(to12h(h24)));\n this.meridiem.set(h24 >= 12 ? 'PM' : 'AM');\n } else {\n this.hourText.set(padTwo(h24));\n }\n if (this.showSeconds() && !this.secondText()) {\n this.secondText.set(padTwo(this.adapter.getSeconds(v)));\n }\n });\n });\n\n // Dev-mode warning for missing accessible name.\n afterNextRender(() => {\n if (!isDevMode()) return;\n const hasLabel =\n !!this.ariaLabel() ||\n !!this.ariaLabelledby() ||\n !!this.formField?.hasLabel();\n if (!hasLabel) {\n console.warn(\n '[tw-time-picker] The time-picker has no accessible name. Set aria-label, aria-labelledby, or wrap the component in a <tw-form-field> with a <label twLabel>.',\n );\n }\n });\n\n // Dev-mode warning for bogus steps.\n afterNextRender(() => {\n if (!isDevMode()) return;\n for (const [name, step] of [\n ['hourStep', this.hourStep()],\n ['minuteStep', this.minuteStep()],\n ['secondStep', this.secondStep()],\n ] as const) {\n if (step < 1 || !Number.isFinite(step)) {\n console.warn(\n `[tw-time-picker] ${name}=${step} is invalid. Using 1 instead.`,\n );\n }\n }\n });\n\n // Host focus tracking.\n const monitorSub = this.focusMonitor\n .monitor(this.elementRef, true)\n .subscribe((origin) => {\n const wasFocused = this.focusedSignal();\n this.focusedSignal.set(!!origin);\n if (wasFocused && !origin) {\n this.focusedField.set(null);\n this.editing = false;\n this.normalizeEmptyFields();\n this.onTouched();\n this.errorWiring.bump();\n }\n });\n\n this.destroyRef.onDestroy(() => {\n monitorSub.unsubscribe();\n this.focusMonitor.stopMonitoring(this.elementRef);\n });\n }\n\n ngOnInit(): void {\n // Deferred NgControl resolution (see the field declaration). The value\n // accessor itself is registered statically via NG_VALUE_ACCESSOR.\n this.ngControl = this.injector.get(NgControl, null, { self: true, optional: true });\n // `isDisabled` / `required` / `errorState` read `ngControl` and saw `null`\n // until now; bump the revision so they recompute.\n this.errorWiring.bump();\n\n this.errorWiring.connect();\n }\n\n // ── Public imperative API ──\n\n /** Moves focus to the hours field. */\n focus(): void {\n this.hourInputRef().nativeElement.focus();\n }\n\n /** Clears the value and emits `timeChange` with `source: 'clear'`. */\n clear(): void {\n this.commit(null, 'clear');\n }\n\n // ── Field interactions ──\n\n /** @internal */\n onFieldFocus(field: TimePickerField): void {\n this.focusedField.set(field);\n this.editing = true;\n const el = this.getFieldEl(field);\n if (el) el.select();\n }\n\n /** @internal */\n onFieldBlur(_field: TimePickerField): void {\n this.editing = false;\n this.normalizeEmptyFields();\n }\n\n /** @internal */\n onBeforeInput(event: Event, field: TimePickerField): void {\n const evt = event as InputEvent;\n const data = evt.data ?? '';\n // Let browsers drive Backspace / Delete natively.\n if (evt.inputType === 'deleteContentBackward' || evt.inputType === 'deleteContentForward') {\n return;\n }\n // Replace default text insertion with our buffered digit logic.\n if (evt.inputType === 'insertText' && /^\\d$/.test(data)) {\n evt.preventDefault();\n this.typeDigit(field, data);\n } else if (evt.inputType === 'insertText') {\n // Reject non-digit insertions.\n evt.preventDefault();\n }\n }\n\n /** @internal Handle native delete events (Backspace/Delete). */\n onInputEvent(event: Event, field: TimePickerField): void {\n const evt = event as InputEvent;\n const el = event.target as HTMLInputElement;\n if (evt.inputType === 'deleteContentBackward' || evt.inputType === 'deleteContentForward') {\n this.editing = true;\n const currentLen = this.getFieldText(field).length;\n const nativeText = el.value.replace(/\\D/g, '').slice(0, 2);\n if (nativeText.length < currentLen || nativeText.length === 0) {\n this.setFieldText(field, nativeText);\n this.commitFromFields('input', field);\n }\n }\n }\n\n /** @internal */\n onFieldKeydown(event: KeyboardEvent, field: TimePickerField): void {\n if (this.isDisabled() || this.readonlyInput()) return;\n const key = event.key;\n\n switch (key) {\n case 'ArrowUp':\n event.preventDefault();\n this.stepField(field, 1, event.shiftKey);\n return;\n case 'ArrowDown':\n event.preventDefault();\n this.stepField(field, -1, event.shiftKey);\n return;\n case 'ArrowLeft':\n if (this.isFieldCaretAtStart(field)) {\n event.preventDefault();\n this.moveFocus(field, -1);\n }\n return;\n case 'ArrowRight':\n if (this.isFieldCaretAtEnd(field)) {\n event.preventDefault();\n this.moveFocus(field, 1);\n }\n return;\n case 'Home':\n event.preventDefault();\n this.setFieldText(field, padTwo(this.fieldMinFor(field)));\n this.commitFromFields('input', field);\n return;\n case 'End':\n event.preventDefault();\n this.setFieldText(field, padTwo(this.fieldMaxFor(field)));\n this.commitFromFields('input', field);\n return;\n case 'Delete':\n case 'Backspace':\n // Let native input drive these; `onInputEvent` syncs state.\n return;\n default:\n if (key.length === 1 && !/\\d/.test(key)) {\n event.preventDefault();\n }\n return;\n }\n }\n\n /** @internal */\n setMeridiem(m: TimePickerMeridiem): void {\n if (this.isDisabled() || this.readonlyInput()) return;\n if (this.meridiem() === m) return;\n this.meridiem.set(m);\n this.commitFromFields('meridiem', 'meridiem');\n }\n\n /** @internal */\n onMeridiemKeydown(event: KeyboardEvent, m: TimePickerMeridiem): void {\n if (this.isDisabled() || this.readonlyInput()) return;\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown' || event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.setMeridiem(m === 'AM' ? 'PM' : 'AM');\n }\n }\n\n /** @internal */\n onStepperMouseDown(event: MouseEvent): void {\n // Keep focus on the current field when clicking the stepper.\n event.preventDefault();\n }\n\n /** @internal */\n onStepperClick(direction: 1 | -1): void {\n const field = this.focusedField() ?? 'hour';\n if (field === 'meridiem') {\n this.setMeridiem(this.meridiem() === 'AM' ? 'PM' : 'AM');\n return;\n }\n this.stepField(field, direction, false);\n // Restore focus to the field we stepped.\n const el = this.getFieldEl(field);\n el?.focus();\n }\n\n /** @internal */\n onClearClick(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.clear();\n }\n\n // ── Helpers ──\n\n private typeDigit(field: TimePickerField, digit: string): void {\n if (field === 'meridiem') return;\n const max = this.fieldMaxFor(field);\n const current = this.getFieldText(field);\n const next = appendDigit(current, digit, max);\n const advance = isTerminalDigit(current, digit, max) || next.length === 2;\n this.setFieldText(field, next);\n this.commitFromFields('input', field);\n if (advance) this.moveFocus(field, 1);\n }\n\n private stepField(field: TimePickerField, direction: 1 | -1, shift: boolean): void {\n if (field === 'meridiem') {\n this.setMeridiem(this.meridiem() === 'AM' ? 'PM' : 'AM');\n return;\n }\n const step = this.stepFor(field) * (shift ? 2 : 1);\n const min = this.fieldMinFor(field);\n const max = this.fieldMaxFor(field);\n const current = parseField(this.getFieldText(field)) ?? min;\n const next = stepWithWrap(current, step, direction, min, max);\n this.setFieldText(field, padTwo(next));\n this.commitFromFields('stepper', field);\n }\n\n private commitFromFields(source: TimePickerChangeSource, field: TimePickerField): void {\n const hourRaw = parseField(this.hourText());\n const minuteRaw = parseField(this.minuteText());\n const secondRaw = this.showSeconds() ? parseField(this.secondText()) : 0;\n\n this.timeInput.emit({\n field,\n rawText: field === 'meridiem' ? this.meridiem() : this.getFieldText(field),\n parsed: this.buildValueIfComplete(hourRaw, minuteRaw, secondRaw),\n });\n\n if (hourRaw === null || minuteRaw === null || (this.showSeconds() && secondRaw === null)) {\n return;\n }\n\n const h24 = this.toCanonicalHour(hourRaw);\n if (h24 === null) return;\n const base = this.resolveBaseDate();\n const next = this.adapter.withTime(base, h24, minuteRaw, this.showSeconds() ? (secondRaw ?? 0) : 0);\n if (!this.adapter.isValid(next)) return;\n\n this.commit(next, source);\n }\n\n private buildValueIfComplete(h: number | null, m: number | null, s: number | null): D | null {\n if (h === null || m === null) return null;\n if (this.showSeconds() && s === null) return null;\n const h24 = this.toCanonicalHour(h);\n if (h24 === null) return null;\n const base = this.resolveBaseDate();\n const built = this.adapter.withTime(base, h24, m, this.showSeconds() ? (s ?? 0) : 0);\n return this.adapter.isValid(built) ? built : null;\n }\n\n private toCanonicalHour(display: number): number | null {\n if (this.format() === '12h') {\n if (display < 1 || display > 12) return null;\n return from12h(display, this.meridiem());\n }\n if (display < 0 || display > 23) return null;\n return display;\n }\n\n private resolveBaseDate(): D {\n const current = this.internalValue();\n if (current !== null && this.adapter.isValid(current)) return current;\n const reference = this.referenceDate();\n if (reference !== null && this.adapter.isValid(reference)) return reference;\n return this.adapter.today();\n }\n\n private commit(next: D | null, source: TimePickerChangeSource): void {\n const previous = this.internalValue();\n this.internalValue.set(next);\n this.value.set(next);\n this.rangeError.set(next !== null ? !this.isInRange(next) : false);\n\n if (source !== 'programmatic') {\n this.onChange(next);\n this.onTouched();\n if (next === null) {\n this.liveAnnouncer.announce(this.intl.clearedAnnouncement, 'polite');\n } else {\n this.liveAnnouncer.announce(\n this.intl.selectedAnnouncement(this.formatAnnouncement(next)),\n 'polite',\n );\n }\n }\n\n this.timeChange.emit({ value: next, previousValue: previous, source });\n }\n\n private formatAnnouncement(v: D): string {\n const h24 = this.adapter.getHours(v);\n const m = this.adapter.getMinutes(v);\n const s = this.adapter.getSeconds(v);\n const secPart = this.showSeconds() ? `:${padTwo(s)}` : '';\n if (this.format() === '12h') {\n const meridiemLabel = h24 >= 12 ? this.intl.pmLabel : this.intl.amLabel;\n return `${padTwo(to12h(h24))}:${padTwo(m)}${secPart} ${meridiemLabel}`;\n }\n return `${padTwo(h24)}:${padTwo(m)}${secPart}`;\n }\n\n private isInRange(v: D): boolean {\n const min = this.minTime();\n const max = this.maxTime();\n if (!min && !max) return true;\n const vSecs = timeOfDaySeconds(\n this.adapter.getHours(v),\n this.adapter.getMinutes(v),\n this.adapter.getSeconds(v),\n );\n if (min && this.adapter.isValid(min)) {\n const minSecs = timeOfDaySeconds(\n this.adapter.getHours(min),\n this.adapter.getMinutes(min),\n this.adapter.getSeconds(min),\n );\n if (vSecs < minSecs) return false;\n }\n if (max && this.adapter.isValid(max)) {\n const maxSecs = timeOfDaySeconds(\n this.adapter.getHours(max),\n this.adapter.getMinutes(max),\n this.adapter.getSeconds(max),\n );\n if (vSecs > maxSecs) return false;\n }\n return true;\n }\n\n private normalizeEmptyFields(): void {\n // Zero-pad single-digit entries once the user leaves the component so the\n // display always settles to \"HH : MM\".\n for (const field of ['hour', 'minute', 'second'] as const) {\n if (field === 'second' && !this.showSeconds()) continue;\n const raw = this.getFieldText(field);\n if (raw.length === 1) {\n this.setFieldText(field, padTwo(Number(raw)));\n }\n }\n }\n\n private moveFocus(field: TimePickerField, direction: 1 | -1): void {\n const order: TimePickerField[] = this.showSeconds()\n ? ['hour', 'minute', 'second']\n : ['hour', 'minute'];\n const idx = order.indexOf(field);\n if (idx === -1) return;\n const nextIdx = clamp(idx + direction, 0, order.length - 1);\n if (nextIdx === idx) return;\n const el = this.getFieldEl(order[nextIdx]);\n el?.focus();\n }\n\n private isFieldCaretAtStart(field: TimePickerField): boolean {\n const el = this.getFieldEl(field);\n if (!el) return true;\n return (el.selectionStart ?? 0) === 0;\n }\n\n private isFieldCaretAtEnd(field: TimePickerField): boolean {\n const el = this.getFieldEl(field);\n if (!el) return true;\n const end = el.selectionEnd ?? 0;\n return end === el.value.length;\n }\n\n private getFieldEl(field: TimePickerField): HTMLInputElement | null {\n switch (field) {\n case 'hour':\n return this.hourInputRef().nativeElement;\n case 'minute':\n return this.minuteInputRef().nativeElement;\n case 'second':\n return this.secondInputRef()?.nativeElement ?? null;\n default:\n return null;\n }\n }\n\n private getFieldText(field: TimePickerField): string {\n switch (field) {\n case 'hour':\n return this.hourText();\n case 'minute':\n return this.minuteText();\n case 'second':\n return this.secondText();\n default:\n return '';\n }\n }\n\n private setFieldText(field: TimePickerField, next: string): void {\n this.editing = true;\n switch (field) {\n case 'hour':\n this.hourText.set(next);\n return;\n case 'minute':\n this.minuteText.set(next);\n return;\n case 'second':\n this.secondText.set(next);\n return;\n default:\n return;\n }\n }\n\n private stepFor(field: TimePickerField): number {\n switch (field) {\n case 'hour':\n return Math.max(1, Math.floor(this.hourStep()));\n case 'minute':\n return Math.max(1, Math.floor(this.minuteStep()));\n case 'second':\n return Math.max(1, Math.floor(this.secondStep()));\n default:\n return 1;\n }\n }\n\n private fieldMinFor(field: TimePickerField): number {\n if (field === 'hour') return fieldMin('hour', this.format());\n return 0;\n }\n\n private fieldMaxFor(field: TimePickerField): number {\n if (field === 'hour') return fieldMax('hour', this.format());\n return 59;\n }\n\n // ── Validator ──\n\n private validatorOnChange: () => void = () => {};\n\n /** @internal */\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value as D | null | undefined;\n if (value === null || value === undefined) return null;\n if (!this.adapter.isValid(value as D)) return null;\n\n const errors: TimePickerValidationErrors = {};\n const actualSecs = this.secondsOf(value as D);\n\n const min = this.minTime();\n if (min && this.adapter.isValid(min) && actualSecs < this.secondsOf(min)) {\n errors.timePickerMin = { min, actual: value };\n }\n const max = this.maxTime();\n if (max && this.adapter.isValid(max) && actualSecs > this.secondsOf(max)) {\n errors.timePickerMax = { max, actual: value };\n }\n\n return Object.keys(errors).length ? errors : null;\n }\n\n /** @internal */\n registerOnValidatorChange(fn: () => void): void {\n this.validatorOnChange = fn;\n }\n\n /** Time-of-day in seconds, ignoring the date part — the same basis `isInRange` uses. */\n private secondsOf(v: D): number {\n return timeOfDaySeconds(\n this.adapter.getHours(v),\n this.adapter.getMinutes(v),\n this.adapter.getSeconds(v),\n );\n }\n\n // ── ControlValueAccessor ──\n\n writeValue(value: unknown): void {\n if (value === null || value === undefined || value === '') {\n const previous = this.internalValue();\n this.internalValue.set(null);\n this.value.set(null);\n this.rangeError.set(false);\n this.hourText.set('');\n this.minuteText.set('');\n this.secondText.set('');\n this.timeChange.emit({ value: null, previousValue: previous, source: 'programmatic' });\n return;\n }\n const coerced = this.adapter.deserialize(value);\n if (coerced === null || !this.adapter.isValid(coerced)) {\n this.internalValue.set(null);\n this.value.set(null);\n this.hourText.set('');\n this.minuteText.set('');\n this.secondText.set('');\n this.rangeError.set(true);\n return;\n }\n const previous = this.internalValue();\n this.internalValue.set(coerced);\n this.value.set(coerced);\n this.rangeError.set(!this.isInRange(coerced));\n this.timeChange.emit({ value: coerced, previousValue: previous, source: 'programmatic' });\n }\n\n registerOnChange(fn: (value: D | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // ── FormFieldControl methods ──\n\n /** @internal */\n setDescribedByIds(ids: string[]): void {\n this.describedByIdsSignal.set([...ids]);\n }\n\n /** @internal Receives the merged `aria-labelledby` ids from the wrapping form-field and applies them to the `role=\"group\"` wrapper. Required because the host is a custom element rather than a labelable control, so the field's `<label for>` never reaches it. */\n override setLabelledByIds(ids: string[]): void {\n this.labelledByIdsSignal.set([...ids]);\n }\n\n /** @internal */\n onContainerClick(event: MouseEvent): void {\n if (this.isDisabled()) return;\n const target = event.target as HTMLElement | null;\n // Clicks that land on an actual field or button should settle focus naturally.\n if (target && (target.tagName === 'INPUT' || target.tagName === 'BUTTON')) return;\n this.hourInputRef().nativeElement.focus();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|