Accessibility
TimePicker wraps @prepared911/ui-core Input with type="time" and a Label. Platform semantics for the native input—keyboard handling, OS picker dialogs, and the roles reported by the browser—come for free on supporting browsers. The app is responsible for the visible label, distinguishing start / end fields in a range, and any committed-value announcement.
<input type="time">. Platform keyboard behavior and accessibility come from the browser. On macOS / iOS, VoiceOver announces the label plus the current value; on Windows, Narrator reads the time segments as they receive focus.label + id produce an associated Label; hideLabel retains the label element (still used for the accessible name) while hiding it visually.SVGAsset.Time). The icon is decorative; it does not carry an accessible name.TimeRangePicker and TimeRangeInputs compose two TimePickers with an en-dash separator and localized "From" / "To" labels; each input retains its own native accessibility.Label. Always pair every TimePicker with a label: placeholder or tooltip is not a name.TimePicker directly for a range. The range helpers already supply this.@prepared911/ui-core Input error patterns or external helper text tied to the field.<input type="time"> is reported by the browser with appropriate roles. Supporting browsers expose a spin or listbox semantic per segment.Label is a native <label> associated by htmlFor / id.<svg> with aria-hidden (decorative); do not rely on it as a label or trigger.@prepared911/ui-core Input error patterns or helper text for bad values.TimePickers without distinct labels read identically in speech. Use the range helpers or set label explicitly.