forty-cdk 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/accordion/README.md +122 -0
- package/aspect-ratio/README.md +76 -0
- package/avatar/README.md +100 -0
- package/breadcrumbs/README.md +49 -0
- package/breakpoints/README.md +81 -0
- package/button/README.md +49 -0
- package/calendar/README.md +458 -0
- package/carousel/README.md +358 -0
- package/checkbox/README.md +146 -0
- package/combobox/README.md +535 -0
- package/context-menu/README.md +139 -0
- package/date-field/README.md +184 -0
- package/date-picker/README.md +338 -0
- package/dialog/README.md +388 -0
- package/disclosure/README.md +114 -0
- package/drag-drop/README.md +359 -0
- package/drawer/README.md +560 -0
- package/dropdown-menu/README.md +176 -0
- package/fesm2022/forty-cdk-accordion.mjs +348 -0
- package/fesm2022/forty-cdk-accordion.mjs.map +1 -0
- package/fesm2022/forty-cdk-aspect-ratio.mjs +74 -0
- package/fesm2022/forty-cdk-aspect-ratio.mjs.map +1 -0
- package/fesm2022/forty-cdk-avatar.mjs +308 -0
- package/fesm2022/forty-cdk-avatar.mjs.map +1 -0
- package/fesm2022/forty-cdk-breadcrumbs.mjs +125 -0
- package/fesm2022/forty-cdk-breadcrumbs.mjs.map +1 -0
- package/fesm2022/forty-cdk-breakpoints.mjs +117 -0
- package/fesm2022/forty-cdk-breakpoints.mjs.map +1 -0
- package/fesm2022/forty-cdk-button.mjs +134 -0
- package/fesm2022/forty-cdk-button.mjs.map +1 -0
- package/fesm2022/forty-cdk-calendar.mjs +2034 -0
- package/fesm2022/forty-cdk-calendar.mjs.map +1 -0
- package/fesm2022/forty-cdk-carousel.mjs +968 -0
- package/fesm2022/forty-cdk-carousel.mjs.map +1 -0
- package/fesm2022/forty-cdk-checkbox.mjs +226 -0
- package/fesm2022/forty-cdk-checkbox.mjs.map +1 -0
- package/fesm2022/forty-cdk-combobox.mjs +2596 -0
- package/fesm2022/forty-cdk-combobox.mjs.map +1 -0
- package/fesm2022/forty-cdk-context-menu.mjs +413 -0
- package/fesm2022/forty-cdk-context-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-core.mjs +9022 -0
- package/fesm2022/forty-cdk-core.mjs.map +1 -0
- package/fesm2022/forty-cdk-date-field.mjs +744 -0
- package/fesm2022/forty-cdk-date-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-date-picker.mjs +1011 -0
- package/fesm2022/forty-cdk-date-picker.mjs.map +1 -0
- package/fesm2022/forty-cdk-dialog.mjs +707 -0
- package/fesm2022/forty-cdk-dialog.mjs.map +1 -0
- package/fesm2022/forty-cdk-disclosure.mjs +190 -0
- package/fesm2022/forty-cdk-disclosure.mjs.map +1 -0
- package/fesm2022/forty-cdk-drag-drop.mjs +1180 -0
- package/fesm2022/forty-cdk-drag-drop.mjs.map +1 -0
- package/fesm2022/forty-cdk-drawer.mjs +1641 -0
- package/fesm2022/forty-cdk-drawer.mjs.map +1 -0
- package/fesm2022/forty-cdk-dropdown-menu.mjs +350 -0
- package/fesm2022/forty-cdk-dropdown-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-field.mjs +425 -0
- package/fesm2022/forty-cdk-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-fieldset.mjs +164 -0
- package/fesm2022/forty-cdk-fieldset.mjs.map +1 -0
- package/fesm2022/forty-cdk-file-upload.mjs +221 -0
- package/fesm2022/forty-cdk-file-upload.mjs.map +1 -0
- package/fesm2022/forty-cdk-hover-card.mjs +496 -0
- package/fesm2022/forty-cdk-hover-card.mjs.map +1 -0
- package/fesm2022/forty-cdk-input.mjs +274 -0
- package/fesm2022/forty-cdk-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-internationalized-date.mjs +1 -1
- package/fesm2022/forty-cdk-internationalized-date.mjs.map +1 -1
- package/fesm2022/forty-cdk-listbox.mjs +1279 -0
- package/fesm2022/forty-cdk-listbox.mjs.map +1 -0
- package/fesm2022/forty-cdk-menu.mjs +1439 -0
- package/fesm2022/forty-cdk-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-menubar.mjs +787 -0
- package/fesm2022/forty-cdk-menubar.mjs.map +1 -0
- package/fesm2022/forty-cdk-meter.mjs +211 -0
- package/fesm2022/forty-cdk-meter.mjs.map +1 -0
- package/fesm2022/forty-cdk-navigation-menu.mjs +1145 -0
- package/fesm2022/forty-cdk-navigation-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-number-input.mjs +559 -0
- package/fesm2022/forty-cdk-number-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-otp-input.mjs +527 -0
- package/fesm2022/forty-cdk-otp-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-pagination.mjs +323 -0
- package/fesm2022/forty-cdk-pagination.mjs.map +1 -0
- package/fesm2022/forty-cdk-pane-resizer.mjs +297 -0
- package/fesm2022/forty-cdk-pane-resizer.mjs.map +1 -0
- package/fesm2022/forty-cdk-popover.mjs +698 -0
- package/fesm2022/forty-cdk-popover.mjs.map +1 -0
- package/fesm2022/forty-cdk-progress.mjs +226 -0
- package/fesm2022/forty-cdk-progress.mjs.map +1 -0
- package/fesm2022/forty-cdk-radio-group.mjs +378 -0
- package/fesm2022/forty-cdk-radio-group.mjs.map +1 -0
- package/fesm2022/forty-cdk-scroll-area.mjs +640 -0
- package/fesm2022/forty-cdk-scroll-area.mjs.map +1 -0
- package/fesm2022/forty-cdk-search.mjs +205 -0
- package/fesm2022/forty-cdk-search.mjs.map +1 -0
- package/fesm2022/forty-cdk-select.mjs +1661 -0
- package/fesm2022/forty-cdk-select.mjs.map +1 -0
- package/fesm2022/forty-cdk-separator.mjs +82 -0
- package/fesm2022/forty-cdk-separator.mjs.map +1 -0
- package/fesm2022/forty-cdk-signal-forms.mjs +97 -0
- package/fesm2022/forty-cdk-signal-forms.mjs.map +1 -0
- package/fesm2022/forty-cdk-slider.mjs +803 -0
- package/fesm2022/forty-cdk-slider.mjs.map +1 -0
- package/fesm2022/forty-cdk-stepper.mjs +886 -0
- package/fesm2022/forty-cdk-stepper.mjs.map +1 -0
- package/fesm2022/forty-cdk-switch.mjs +137 -0
- package/fesm2022/forty-cdk-switch.mjs.map +1 -0
- package/fesm2022/forty-cdk-table.mjs +1518 -0
- package/fesm2022/forty-cdk-table.mjs.map +1 -0
- package/fesm2022/forty-cdk-tabs.mjs +400 -0
- package/fesm2022/forty-cdk-tabs.mjs.map +1 -0
- package/fesm2022/forty-cdk-time-field.mjs +593 -0
- package/fesm2022/forty-cdk-time-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-time-picker.mjs +1013 -0
- package/fesm2022/forty-cdk-time-picker.mjs.map +1 -0
- package/fesm2022/forty-cdk-toast.mjs +1153 -0
- package/fesm2022/forty-cdk-toast.mjs.map +1 -0
- package/fesm2022/forty-cdk-toggle.mjs +516 -0
- package/fesm2022/forty-cdk-toggle.mjs.map +1 -0
- package/fesm2022/forty-cdk-toolbar.mjs +374 -0
- package/fesm2022/forty-cdk-toolbar.mjs.map +1 -0
- package/fesm2022/forty-cdk-tooltip.mjs +672 -0
- package/fesm2022/forty-cdk-tooltip.mjs.map +1 -0
- package/fesm2022/forty-cdk-tree.mjs +2007 -0
- package/fesm2022/forty-cdk-tree.mjs.map +1 -0
- package/fesm2022/forty-cdk-virtualization.mjs +1 -1
- package/fesm2022/forty-cdk-virtualization.mjs.map +1 -1
- package/fesm2022/forty-cdk.mjs +0 -43310
- package/fesm2022/forty-cdk.mjs.map +1 -1
- package/field/README.md +97 -0
- package/fieldset/README.md +86 -0
- package/file-upload/README.md +73 -0
- package/hover-card/README.md +171 -0
- package/input/README.md +156 -0
- package/listbox/README.md +424 -0
- package/menu/README.md +181 -0
- package/menubar/README.md +140 -0
- package/meter/README.md +128 -0
- package/navigation-menu/README.md +253 -0
- package/number-input/README.md +171 -0
- package/otp-input/README.md +198 -0
- package/package.json +213 -1
- package/pagination/README.md +61 -0
- package/pane-resizer/README.md +136 -0
- package/popover/README.md +262 -0
- package/progress/README.md +115 -0
- package/radio-group/README.md +129 -0
- package/scroll-area/README.md +184 -0
- package/search/README.md +42 -0
- package/select/README.md +488 -0
- package/separator/README.md +84 -0
- package/signal-forms/README.md +72 -0
- package/slider/README.md +152 -0
- package/stepper/README.md +292 -0
- package/switch/README.md +116 -0
- package/table/README.md +769 -0
- package/tabs/README.md +130 -0
- package/time-field/README.md +157 -0
- package/time-picker/README.md +172 -0
- package/toast/README.md +398 -0
- package/toggle/README.md +224 -0
- package/toolbar/README.md +109 -0
- package/tooltip/README.md +274 -0
- package/tree/README.md +708 -0
- package/types/forty-cdk-accordion.d.ts +242 -0
- package/types/forty-cdk-aspect-ratio.d.ts +59 -0
- package/types/forty-cdk-avatar.d.ts +133 -0
- package/types/forty-cdk-breadcrumbs.d.ts +92 -0
- package/types/forty-cdk-breakpoints.d.ts +141 -0
- package/types/forty-cdk-button.d.ts +80 -0
- package/types/forty-cdk-calendar.d.ts +914 -0
- package/types/forty-cdk-carousel.d.ts +530 -0
- package/types/forty-cdk-checkbox.d.ts +141 -0
- package/types/forty-cdk-combobox.d.ts +1259 -0
- package/types/forty-cdk-context-menu.d.ts +313 -0
- package/types/forty-cdk-core.d.ts +5774 -0
- package/types/forty-cdk-date-field.d.ts +307 -0
- package/types/forty-cdk-date-picker.d.ts +622 -0
- package/types/forty-cdk-dialog.d.ts +546 -0
- package/types/forty-cdk-disclosure.d.ts +127 -0
- package/types/forty-cdk-drag-drop.d.ts +456 -0
- package/types/forty-cdk-drawer.d.ts +871 -0
- package/types/forty-cdk-dropdown-menu.d.ts +242 -0
- package/types/forty-cdk-field.d.ts +236 -0
- package/types/forty-cdk-fieldset.d.ts +119 -0
- package/types/forty-cdk-file-upload.d.ts +124 -0
- package/types/forty-cdk-hover-card.d.ts +320 -0
- package/types/forty-cdk-input.d.ts +169 -0
- package/types/forty-cdk-internationalized-date.d.ts +1 -1
- package/types/forty-cdk-listbox.d.ts +513 -0
- package/types/forty-cdk-menu.d.ts +629 -0
- package/types/forty-cdk-menubar.d.ts +451 -0
- package/types/forty-cdk-meter.d.ts +122 -0
- package/types/forty-cdk-navigation-menu.d.ts +514 -0
- package/types/forty-cdk-number-input.d.ts +319 -0
- package/types/forty-cdk-otp-input.d.ts +248 -0
- package/types/forty-cdk-pagination.d.ts +214 -0
- package/types/forty-cdk-pane-resizer.d.ts +145 -0
- package/types/forty-cdk-popover.d.ts +509 -0
- package/types/forty-cdk-progress.d.ts +143 -0
- package/types/forty-cdk-radio-group.d.ts +222 -0
- package/types/forty-cdk-scroll-area.d.ts +258 -0
- package/types/forty-cdk-search.d.ts +142 -0
- package/types/forty-cdk-select.d.ts +899 -0
- package/types/forty-cdk-separator.d.ts +59 -0
- package/types/forty-cdk-signal-forms.d.ts +58 -0
- package/types/forty-cdk-slider.d.ts +379 -0
- package/types/forty-cdk-stepper.d.ts +650 -0
- package/types/forty-cdk-switch.d.ts +87 -0
- package/types/forty-cdk-table.d.ts +723 -0
- package/types/forty-cdk-tabs.d.ts +235 -0
- package/types/forty-cdk-time-field.d.ts +307 -0
- package/types/forty-cdk-time-picker.d.ts +578 -0
- package/types/forty-cdk-toast.d.ts +598 -0
- package/types/forty-cdk-toggle.d.ts +310 -0
- package/types/forty-cdk-toolbar.d.ts +217 -0
- package/types/forty-cdk-tooltip.d.ts +436 -0
- package/types/forty-cdk-tree.d.ts +688 -0
- package/types/forty-cdk.d.ts +1 -19743
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forty-cdk-time-field.mjs","sources":["../../../projects/forty-cdk/time-field/src/build-time-segments.ts","../../../projects/forty-cdk/time-field/src/time-field-context.ts","../../../projects/forty-cdk/time-field/src/time-field-defaults.ts","../../../projects/forty-cdk/time-field/src/time-field.ts","../../../projects/forty-cdk/time-field/src/time-field-segment.ts","../../../projects/forty-cdk/time-field/src/time-field-literal.ts","../../../projects/forty-cdk/time-field/src/time-field-host-directive.ts","../../../projects/forty-cdk/time-field/src/forty-cdk-time-field.ts"],"sourcesContent":["import { type FieldSpec, type TimeSegmentType } from 'forty-cdk/core';\n\nexport type { TimeSegmentType } from 'forty-cdk/core';\n\n/** Smallest editable time unit; controls which segments are rendered. */\nexport type TimeGranularity = 'hour' | 'minute' | 'second';\n\nconst DIGITS: Record<TimeSegmentType, number> = {\n hour: 2,\n minute: 2,\n second: 2,\n dayPeriod: 0,\n};\n\n// 1:23:45 PM — distinct hour / minute / second values and a PM reference so the\n// `dayPeriod` part is present to read back. Only each part's `type` (and the\n// separators) are used; the concrete value never surfaces.\nconst REFERENCE_TIME = new Date(2000, 0, 1, 13, 23, 45);\n\n/**\n * Derives the ordered segment list for a time field from the runtime locale,\n * the resolved hour cycle, and the granularity, using\n * `Intl.DateTimeFormat(...).formatToParts`. The visible order of the segments\n * (and the separators between them), and whether an AM/PM `dayPeriod` segment\n * is present, follow the locale and the 12-/24-hour cycle.\n *\n * Pure: the same arguments always yield the same list, touching no signals or\n * DOM.\n *\n * @param locale BCP 47 locale, or `undefined` for the runtime default.\n * @param hourCycle Resolved hour cycle (`12` shows AM/PM, `24` does not).\n * @param granularity Smallest editable unit; trims minute / second segments.\n */\nexport function buildTimeSegments(\n locale: string | undefined,\n hourCycle: 12 | 24,\n granularity: TimeGranularity,\n): readonly FieldSpec[] {\n const options: Intl.DateTimeFormatOptions = { hour: '2-digit', hour12: hourCycle === 12 };\n if (granularity !== 'hour') {\n options.minute = '2-digit';\n }\n if (granularity === 'second') {\n options.second = '2-digit';\n }\n\n const parts = new Intl.DateTimeFormat(locale, options).formatToParts(REFERENCE_TIME);\n const segments: FieldSpec[] = [];\n for (const part of parts) {\n switch (part.type) {\n case 'hour':\n case 'minute':\n case 'second':\n case 'dayPeriod':\n segments.push({ kind: 'editable', type: part.type, digits: DIGITS[part.type] });\n break;\n case 'literal':\n segments.push({ kind: 'literal', literal: part.value });\n break;\n default:\n break;\n }\n }\n return segments;\n}\n","import { inject, InjectionToken } from '@angular/core';\n\nimport {\n type FieldSegment,\n type SegmentHandle,\n type SegmentEditorContext,\n type TimeSegmentType,\n} from 'forty-cdk/core';\n\n/**\n * A rendered segment descriptor exposed by `ForTimeField.segments()` for the\n * consumer's `@for`. Covers both editable spinbutton segments (hour / minute /\n * second / dayPeriod) and the decorative literal separators between them.\n */\nexport type TimeFieldSegment = FieldSegment<TimeSegmentType>;\n\n/** Handle a `[forTimeFieldSegment]` registers with the root for focus moves. */\nexport type ForTimeFieldSegmentHandle = SegmentHandle<TimeSegmentType>;\n\n/**\n * The coordination surface `ForTimeField` exposes to its segment / literal\n * children. Segments read the reactive per-part accessors for their ARIA and\n * display bindings, and call the behavior methods to type, step, clear, and\n * move focus — all canonical state lives on the root, never on the segment.\n *\n * It is the shared {@link SegmentEditorContext} backing both date and time\n * fields; `ForTimeField` satisfies it by forwarding to its `SegmentEditor`.\n */\nexport type ForTimeFieldContext = SegmentEditorContext;\n\n/**\n * Injection token for the {@link ForTimeFieldContext} provided by\n * `[forTimeField]`. Segment and literal children inject it to coordinate with\n * the root.\n */\nexport const FOR_TIME_FIELD_CONTEXT = new InjectionToken<ForTimeFieldContext>(\n 'FOR_TIME_FIELD_CONTEXT',\n);\n\n/**\n * Resolves the surrounding {@link ForTimeFieldContext}, throwing a descriptive,\n * primitive-prefixed error when used outside a `[forTimeField]`.\n *\n * @param piece Name of the calling directive, used in the error message.\n */\nexport function injectTimeFieldContext(piece: string): ForTimeFieldContext {\n const ctx = inject(FOR_TIME_FIELD_CONTEXT, { optional: true });\n if (!ctx) {\n throw new Error(`[forty-cdk/time-field] ${piece} must be used inside a [forTimeField].`);\n }\n return ctx;\n}\n","import { type Provider } from '@angular/core';\n\nimport { createDefaults } from 'forty-cdk/core';\nimport type { TimeSegmentType } from './build-time-segments';\n\n/**\n * Accessible name announced for each editable segment, keyed by its part type.\n * Override individually (or wholesale) for localization; any key left unset\n * falls back to the library default for that part — so overriding just\n * `dayPeriod` keeps the English labels for the rest.\n */\nexport type ForTimeFieldSegmentLabels = Partial<Record<TimeSegmentType, string>>;\n\n/**\n * Defaults inherited by descendant `[forTimeField]` controls in the\n * surrounding injector scope. Configure with `provideForTimeFieldDefaults` at\n * the application root or in any component's `providers`; partial overrides\n * merge with the parent scope.\n */\nexport interface ForTimeFieldDefaults {\n /**\n * Accessible value announced (via `aria-valuetext`) for an empty editable\n * segment, so screen readers report the segment's empty state instead of\n * silence. Override for localization.\n */\n emptySegmentText: string;\n /**\n * Accessible names announced for each editable segment (via `aria-label`),\n * keyed by part type, used when a segment has no explicit `ariaLabel`. The\n * AM/PM `dayPeriod` defaults to `'AM/PM'` instead of leaking the raw token.\n * Override for localization; unset keys keep the library default.\n */\n segmentLabels: ForTimeFieldSegmentLabels;\n}\n\n/**\n * Library default accessible name for each editable segment. Used when neither\n * the segment's explicit `ariaLabel` nor a `provideForTimeFieldDefaults`\n * override supplies one for that part.\n */\nexport const DEFAULT_TIME_FIELD_SEGMENT_LABELS: Readonly<Record<TimeSegmentType, string>> = {\n hour: 'hour',\n minute: 'minute',\n second: 'second',\n dayPeriod: 'AM/PM',\n};\n\nconst FALLBACK: ForTimeFieldDefaults = {\n emptySegmentText: 'Empty',\n segmentLabels: DEFAULT_TIME_FIELD_SEGMENT_LABELS,\n};\n\nconst { token, provideDefaults } = createDefaults<ForTimeFieldDefaults>(\n 'FOR_TIME_FIELD_DEFAULTS',\n FALLBACK,\n);\n\n/** Token holding the resolved time-field defaults for the current scope. */\nexport const FOR_TIME_FIELD_DEFAULTS = token;\n\n/**\n * Configures forty-cdk time-field defaults for this injector scope. Partial\n * overrides inherit unspecified keys from the parent scope (or library\n * defaults at the root).\n */\nexport function provideForTimeFieldDefaults(\n defaults: Partial<ForTimeFieldDefaults> = {},\n): Provider[] {\n return provideDefaults(defaults);\n}\n","import { computed, Directive, ElementRef, inject, input, linkedSignal, model } from '@angular/core';\nimport type { FormValueControl } from '@angular/forms/signals';\n\nimport {\n assertTimeCapable,\n injectDateAdapter,\n type TimeCapableDateAdapter,\n dayPeriodNames,\n resolveHourCycle,\n type FieldSpec,\n SegmentEditor,\n type SegmentHandle,\n type SegmentType,\n composeWithTime,\n secondsOfDay,\n serializeISOTime,\n timeSentinel,\n FormUiControlBase,\n injectHiddenInput,\n type WritingDirection,\n RovingTabindex,\n injectTextDirection,\n FOR_TIME_VALUE_SOURCE,\n} from 'forty-cdk/core';\nimport {\n buildTimeSegments,\n type TimeGranularity,\n type TimeSegmentType,\n} from './build-time-segments';\nimport { FOR_TIME_FIELD_CONTEXT, type ForTimeFieldContext } from './time-field-context';\nimport { FOR_TIME_FIELD_DEFAULTS } from './time-field-defaults';\n\n/** Internal per-part state: the entered value for each editable segment, hour as 0-23. */\ninterface TimeParts {\n hour: number | null;\n minute: number | null;\n second: number | null;\n}\n\n/**\n * Headless, segmented, spin-editable time-of-day input — the time counterpart\n * to `ForDateField`. There is no single WAI-ARIA APG pattern for a time field;\n * it is a composition of\n * [Spinbuttons](https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/) inside a\n * labelled `role=\"group\"`.\n * Each hour / minute / second / AM·PM part is an independent\n * `role=\"spinbutton\"` segment (`[forTimeFieldSegment]`) so entry is unambiguous\n * and locale-correct.\n *\n * `ForTimeField` is the root: it owns the entered parts, composes them into the\n * adapter's date-time type, resolves the locale-ordered segment list, and\n * exposes everything to the segment / literal children through\n * {@link FOR_TIME_FIELD_CONTEXT}. The spin-button engine (digit typing,\n * stepping, Home/End, RTL focus moves, the segment registry) lives in the shared\n * `_internal/datetime` {@link SegmentEditor}; the root supplies only the\n * time-specific bits (segment bounds, the midnight seed, and the\n * sentinel-anchored setTime/clamp compose). All time math goes through the\n * pluggable {@link import('../_internal/date-adapter/date-adapter').DateAdapter} shared with\n * `ForCalendar`, which **must be time-capable** — `provideNativeDateAdapter()`\n * or `provideInternationalizedDateTimeAdapter()` (the day-only\n * `provideInternationalizedDateAdapter()` throws).\n *\n * It implements `FormValueControl<D | null>` from `@angular/forms/signals`, so\n * it auto-wires with `[formField]` and auto-associates inside a `[forField]`.\n * The value stays `null` until every visible segment is filled. When no value\n * is bound yet, the composed value is anchored on a fixed, DST-stable sentinel\n * date (`2000-01-01`) rather than today, so a wall-clock time always round-trips\n * to the same instant; bind an existing date-time as `value` to edit its time in\n * place.\n *\n * @typeParam D The adapter's immutable, time-capable date-time type.\n *\n * Note: the bounds are named `minTime` / `maxTime`, not `min` / `max` — the\n * latter are reserved `FormUiControl` members typed `number | undefined` for\n * numeric validators, so a date-time-typed `min` / `max` would break the\n * `FormValueControl` contract. Only the time-of-day component of the bounds is\n * considered.\n *\n * @example\n * ```html\n * <div forTimeField [(value)]=\"time\" [hourCycle]=\"24\"\n * [ariaLabel]=\"'Appointment time'\" #field=\"forTimeField\">\n * @for (seg of field.segments(); track seg.id) {\n * @if (seg.isLiteral) {\n * <span forTimeFieldLiteral>{{ seg.text }}</span>\n * } @else {\n * <span forTimeFieldSegment [segment]=\"seg.type!\">{{ seg.text }}</span>\n * }\n * }\n * </div>\n * ```\n */\n@Directive({\n selector: '[forTimeField]',\n exportAs: 'forTimeField',\n host: {\n role: 'group',\n '[attr.dir]': 'dir()',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.aria-disabled]': 'effectiveDisabled() ? \"true\" : null',\n '[attr.aria-readonly]': 'readonly() ? \"true\" : null',\n '[attr.aria-required]': 'required() ? \"true\" : null',\n '[attr.aria-invalid]': 'invalid() ? \"true\" : null',\n '[attr.data-disabled]': 'effectiveDisabled() ? \"\" : null',\n '[attr.data-readonly]': 'readonly() ? \"\" : null',\n '[attr.data-empty]': 'value() === null ? \"\" : null',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n { provide: FOR_TIME_FIELD_CONTEXT, useExisting: ForTimeField },\n { provide: FOR_TIME_VALUE_SOURCE, useExisting: ForTimeField },\n ],\n})\nexport class ForTimeField<D>\n extends FormUiControlBase\n implements FormValueControl<D | null>, ForTimeFieldContext\n{\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #defaults = inject(FOR_TIME_FIELD_DEFAULTS);\n\n /**\n * The active, time-capable date adapter, resolved from `FOR_DATE_ADAPTER`\n * (shared with `ForCalendar`). Throws when the provided adapter is day-only.\n */\n readonly adapter: TimeCapableDateAdapter<D> = assertTimeCapable(\n injectDateAdapter<D>('ForTimeField'),\n 'ForTimeField',\n );\n\n /**\n * Two-way bindable entered time, or `null` while any visible segment is\n * empty. Required by `FormValueControl<D | null>`. The `model()` change\n * emitter (`(valueChange)`) fires only when the field itself composes a new\n * value, never on consumer writes via `[(value)]`.\n *\n * When no value is bound, the composed date-time anchors its date part on a\n * fixed, DST-stable sentinel date (`2000-01-01`) instead of today. This avoids\n * two `today()` hazards on adapters whose `D` carries a time zone (e.g.\n * `NativeDateAdapter`'s `Date`): a wall-clock time on a DST-transition day that\n * does not exist or is ambiguous would silently shift the emitted instant, and\n * a today-anchored value would leak the current date into a time-only control\n * (so a persisted value re-derives a different time next week). Consumers\n * reading the emitted value should treat only its time-of-day component as\n * meaningful while no date is bound. `CalendarDateTime` (no time zone) is\n * unaffected, but anchors on the same sentinel for consistency.\n */\n readonly value = model<D | null>(null);\n\n /**\n * Earliest selectable time-of-day (inclusive). A composed value earlier in\n * the day is clamped up to it. Named `minTime` (not `min`) because\n * `FormUiControl.min` is reserved for a numeric validator. Only the\n * hour / minute / second component is considered.\n */\n readonly minTime = input<D | null>(null);\n\n /**\n * Latest selectable time-of-day (inclusive). A composed value later in the\n * day is clamped down to it. Named `maxTime` for the same reason as\n * {@link minTime}.\n */\n readonly maxTime = input<D | null>(null);\n\n /**\n * 12- or 24-hour cycle. When `null` (default) it is derived from the runtime\n * locale. A 12-hour cycle adds the AM/PM `dayPeriod` segment.\n */\n readonly hourCycle = input<12 | 24 | null>(null);\n\n /** Smallest editable unit: `'hour'`, `'minute'` (default), or `'second'`. */\n readonly granularity = input<TimeGranularity>('minute');\n\n /** BCP 47 locale driving segment order, separators, and AM/PM names. Defaults to the runtime locale. */\n readonly locale = input<string | null>(null);\n\n /**\n * Per-segment placeholder shown while empty. Unspecified parts fall back to\n * `hh` / `mm` / `ss` / `--`.\n */\n readonly placeholder = input<Partial<Record<TimeSegmentType, string>>>({});\n\n /** Accessible name for the field group. Emits no `aria-label` while `null`. */\n readonly ariaLabel = input<string | null>(null);\n\n /**\n * Writing direction. When unset (default `null`), the inherited ambient\n * direction is resolved from the nearest ancestor carrying a `dir` attribute\n * (or `<html dir>`), defaulting to `'ltr'`. An explicit `[dir]` always wins.\n * The resolved value is reflected to the host `dir` attribute and mirrors the\n * ArrowLeft / ArrowRight segment navigation in RTL.\n */\n readonly _dirInput = input<WritingDirection | null>(null, { alias: 'dir' });\n readonly dir = injectTextDirection(this._dirInput);\n\n /** Shared roving-tabindex tracker: exactly one segment owns `tabindex=0`. */\n readonly roving = new RovingTabindex();\n\n /** Resolved hour cycle (`12` shows AM/PM, `24` does not). */\n readonly #cycle = computed(() => resolveHourCycle(this.locale() ?? undefined, this.hourCycle()));\n\n readonly #specs = computed<readonly FieldSpec[]>(() =>\n buildTimeSegments(this.locale() ?? undefined, this.#cycle(), this.granularity()),\n );\n\n readonly #editableOrder = computed<readonly SegmentType[]>(() =>\n this.#specs()\n .filter((spec): spec is Extract<FieldSpec, { kind: 'editable' }> => spec.kind === 'editable')\n .map((spec) => spec.type),\n );\n\n readonly #periodNames = computed(() => dayPeriodNames(this.locale() ?? undefined));\n\n /**\n * The entered parts. A `linkedSignal` keyed on `value`: a non-null write\n * (consumer, `[formField]`, or our own compose) rehydrates the parts from the\n * date-time. A `null` transition is disambiguated by the prior parts — an\n * internal edit clearing one segment leaves the others, so `previous` still\n * carries a filled part and is preserved; an external reset of a complete\n * value clears the field.\n */\n readonly #parts = linkedSignal<D | null, TimeParts>({\n source: this.value,\n computation: (current, previous) => {\n if (current !== null) {\n return {\n hour: this.adapter.getHours(current),\n minute: this.adapter.getMinutes(current),\n second: this.adapter.getSeconds(current),\n };\n }\n const prior = previous?.value;\n if (prior && (prior.hour === null || prior.minute === null || prior.second === null)) {\n return prior;\n }\n return { hour: null, minute: null, second: null };\n },\n });\n\n readonly #editor = new SegmentEditor<TimeParts, TimeSegmentType>({\n disabled: this.effectiveDisabled,\n readonly: this.readonly,\n roving: this.roving,\n cycle: this.#cycle,\n specs: this.#specs,\n editableOrder: this.#editableOrder,\n periodNames: this.#periodNames,\n parts: () => this.#parts(),\n segmentMin: (type) => this.segmentMin(type),\n segmentMax: (type) => this.segmentMax(type),\n seed: (type) => this.#seed(type),\n placeholderFor: (type) => this.#placeholderFor(type),\n valueText: (type) => this.#valueText(type),\n commit: (next) => this.#commitParts(next),\n });\n\n /**\n * The ordered, locale-derived segments (editable + literals) to render. Each\n * entry carries the text to display: the formatted value when filled, the\n * placeholder while empty, or the literal separator.\n */\n readonly segments = this.#editor.segments;\n\n constructor() {\n super();\n injectHiddenInput({\n name: this.name,\n values: computed(() => {\n const current = this.value();\n if (current === null) {\n return [];\n }\n return [serializeISOTime(this.adapter, current, this.granularity())];\n }),\n disabled: this.effectiveDisabled,\n });\n }\n\n segmentValue(type: SegmentType): number | null {\n return this.#editor.segmentValue(type);\n }\n\n segmentMin(type: SegmentType): number {\n if (type === 'hour') {\n return this.#cycle() === 12 ? 1 : 0;\n }\n return 0;\n }\n\n segmentMax(type: SegmentType): number {\n if (type === 'hour') {\n return this.#cycle() === 12 ? 12 : 23;\n }\n if (type === 'dayPeriod') {\n return 1;\n }\n return 59;\n }\n\n segmentValueText(type: SegmentType): string | null {\n return this.#editor.segmentValueText(type);\n }\n\n segmentDisplayText(type: SegmentType): string {\n return this.#editor.segmentDisplayText(type);\n }\n\n isSegmentEmpty(type: SegmentType): boolean {\n return this.#editor.isSegmentEmpty(type);\n }\n\n isFirstSegmentType(type: SegmentType): boolean {\n return this.#editor.isFirstSegmentType(type);\n }\n\n registerSegment(handle: SegmentHandle): void {\n this.#editor.registerSegment(handle);\n }\n\n unregisterSegment(handle: SegmentHandle): void {\n this.#editor.unregisterSegment(handle);\n }\n\n focusSegment(type: SegmentType): void {\n this.#editor.focusSegment(type);\n }\n\n typeDigit(type: SegmentType, digit: number): void {\n this.#editor.typeDigit(type, digit);\n }\n\n step(type: SegmentType, delta: number): void {\n this.#editor.step(type, delta);\n }\n\n goToBound(type: SegmentType, bound: 'min' | 'max'): void {\n this.#editor.goToBound(type, bound);\n }\n\n setDayPeriod(period: 'am' | 'pm'): void {\n this.#editor.setDayPeriod(period);\n }\n\n clear(type: SegmentType): void {\n this.#editor.clear(type);\n }\n\n focusSibling(type: SegmentType, step: -1 | 1): void {\n this.#editor.focusSibling(type, step);\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (!next || !this.#host.nativeElement.contains(next)) {\n this.markTouched();\n }\n }\n\n /** Field-specific `aria-valuetext`: only the empty marker; numeric otherwise. */\n #valueText(type: SegmentType): string | null {\n return this.isSegmentEmpty(type) ? this.#defaults.emptySegmentText : null;\n }\n\n /** Base value for stepping an empty segment: midnight (hour 0, minute 0, second 0). */\n #seed(type: SegmentType): number {\n if (type !== 'hour') {\n return 0;\n }\n const display = this.segmentMin('hour');\n if (this.#cycle() === 24) {\n return display;\n }\n const hour = this.#parts().hour;\n const pm = hour !== null && hour >= 12;\n const base = display % 12;\n return pm ? base + 12 : base;\n }\n\n #placeholderFor(type: SegmentType): string {\n if (type === 'hour' || type === 'minute' || type === 'second' || type === 'dayPeriod') {\n const override = this.placeholder()[type];\n if (override) {\n return override;\n }\n }\n switch (type) {\n case 'hour':\n return 'hh';\n case 'minute':\n return 'mm';\n case 'second':\n return 'ss';\n default:\n return '--';\n }\n }\n\n #commitParts(next: TimeParts): void {\n this.#parts.set(next);\n const granularity = this.granularity();\n const needMinute = granularity !== 'hour';\n const needSecond = granularity === 'second';\n const complete =\n next.hour !== null &&\n (!needMinute || next.minute !== null) &&\n (!needSecond || next.second !== null);\n if (complete) {\n const base = this.value() ?? timeSentinel(this.adapter);\n const composed = this.adapter.setTime(\n base,\n next.hour!,\n needMinute ? next.minute! : 0,\n needSecond ? next.second! : 0,\n );\n this.value.set(this.#clampToBounds(composed));\n } else {\n this.value.set(null);\n }\n }\n\n #clampToBounds(date: D): D {\n const min = this.minTime();\n if (min !== null && secondsOfDay(this.adapter, date) < secondsOfDay(this.adapter, min)) {\n return composeWithTime(this.adapter, date, min);\n }\n const max = this.maxTime();\n if (max !== null && secondsOfDay(this.adapter, date) > secondsOfDay(this.adapter, max)) {\n return composeWithTime(this.adapter, date, max);\n }\n return date;\n }\n}\n","import { computed, Directive, inject, input } from '@angular/core';\n\nimport { ForDateTimeSegmentBase } from 'forty-cdk/core';\nimport type { TimeSegmentType } from './build-time-segments';\nimport { injectTimeFieldContext } from './time-field-context';\nimport { DEFAULT_TIME_FIELD_SEGMENT_LABELS, FOR_TIME_FIELD_DEFAULTS } from './time-field-defaults';\n\n/**\n * One editable spinbutton segment of a `[forTimeField]` — the hour, minute,\n * second, or AM/PM (`dayPeriod`) part. Apply on a focusable element (typically\n * a `<span>`); the shared {@link ForDateTimeSegmentBase} adds\n * `role=\"spinbutton\"`, the `aria-valuemin` / `aria-valuemax` / `aria-valuenow` /\n * `aria-valuetext` reflection, the roving tabindex, and the full keyboard map:\n *\n * - **digits** fill a numeric segment and auto-advance to the next when full;\n * - **a / p** set the period on the `dayPeriod` segment;\n * - **ArrowUp / ArrowDown** step the value (hour / minute / second wrap; dayPeriod toggles);\n * - **ArrowLeft / ArrowRight** move between segments (mirrored under RTL, no wrap);\n * - **Home / End** jump to the segment minimum / maximum (dayPeriod → AM / PM);\n * - **Backspace / Delete** clear a numeric segment.\n *\n * All state lives on the root `ForTimeField`; the segment only reads it and\n * forwards intents. The rendered text comes from the root's `segments()` list\n * (`{{ seg.text }}`), so this element carries behavior and ARIA, not content.\n */\n@Directive({\n selector: '[forTimeFieldSegment]',\n exportAs: 'forTimeFieldSegment',\n})\nexport class ForTimeFieldSegment extends ForDateTimeSegmentBase {\n protected readonly ctx = injectTimeFieldContext('ForTimeFieldSegment');\n readonly #defaults = inject(FOR_TIME_FIELD_DEFAULTS);\n\n /** Which time part this segment edits. */\n readonly segment = input.required<TimeSegmentType>();\n\n /**\n * Accessible name for this segment. Falls back to the scope's localized\n * default label for the part (via `provideForTimeFieldDefaults`), which in\n * turn defaults to the part name — and `'AM/PM'` for the `dayPeriod` segment.\n */\n readonly ariaLabel = input<string | null>(null);\n\n protected override readonly resolvedAriaLabel = computed(() => {\n const type = this.segment();\n return (\n this.ariaLabel() ??\n this.#defaults.segmentLabels[type] ??\n DEFAULT_TIME_FIELD_SEGMENT_LABELS[type]\n );\n });\n\n constructor() {\n super();\n this.registerSegment();\n }\n}\n","import { Directive } from '@angular/core';\n\nimport { ForDateTimeLiteralBase } from 'forty-cdk/core';\n\n/**\n * A decorative separator (`:`, a space) between the editable segments of a\n * `[forTimeField]`. Apply on the element rendering the literal text; it is\n * marked `aria-hidden` and stays out of the tab order, so assistive tech reads\n * only the spinbutton segments. The separator characters come from the root's\n * locale-ordered `segments()` list (`{{ seg.text }}`).\n */\n@Directive({\n selector: '[forTimeFieldLiteral]',\n exportAs: 'forTimeFieldLiteral',\n})\nexport class ForTimeFieldLiteral extends ForDateTimeLiteralBase {}\n","/**\n * Exact public names of every `ForTimeField` input, its models included. Spread it into the\n * `inputs` array of a `hostDirectives` entry so a wrapper component re-exposes the\n * primitive's full surface — the Signal Forms members `[formField]` binds among them —\n * without hand-maintaining the list. Always spread into an inline object literal as shown\n * below: the literal is what keeps the entry statically analyzable for consumers compiling\n * against the published package. An anti-drift spec fails when this list no longer matches\n * the directive's actual API. See `docs/wrapping-form-primitives.md` for both supported\n * wrapping patterns.\n *\n * @example\n * ```ts\n * @Component({\n * selector: 'div[myTimeField]',\n * template: '',\n * hostDirectives: [\n * {\n * directive: ForTimeField,\n * inputs: [...FOR_TIME_FIELD_HOST_DIRECTIVE_INPUTS],\n * outputs: [...FOR_TIME_FIELD_HOST_DIRECTIVE_OUTPUTS],\n * },\n * ],\n * })\n * export class MyTimeField {}\n * ```\n */\nexport const FOR_TIME_FIELD_HOST_DIRECTIVE_INPUTS = [\n 'value',\n 'ariaLabel',\n 'dir',\n 'dirty',\n 'disabled',\n 'errors',\n 'granularity',\n 'hourCycle',\n 'invalid',\n 'locale',\n 'maxTime',\n 'minTime',\n 'name',\n 'pending',\n 'placeholder',\n 'readonly',\n 'required',\n 'touched',\n] as const;\n\n/**\n * Exact public names of every `ForTimeField` output, the Signal Forms `touch` output\n * included. Spread it into the `outputs` array of the same `hostDirectives` entry as\n * {@link FOR_TIME_FIELD_HOST_DIRECTIVE_INPUTS}.\n */\nexport const FOR_TIME_FIELD_HOST_DIRECTIVE_OUTPUTS = [\n 'valueChange',\n 'touchedChange',\n 'touch',\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|