Accessibility
DurationField, DurationFieldLimitEdge, DurationFieldPart, DurationFieldSize, DurationUnit, durationToMilliseconds, durationToSeconds from @prepared911/ui/duration-field.
role="group" named by the label (aria-labelledby) and described by the description and the error (aria-describedby). The label is a real label for the amount, so clicking it focuses the amount.spinbutton named by amountLabel, with aria-valuenow, aria-valuemin, aria-valuemax and aria-valuetext from NumberField. required, aria-invalid and aria-errormessage sit on it, and the error id is also in its aria-describedby so the message is announced. With one unit, the unit's name is in its description.radiogroup of radio segments with its own name (unitLabel, presetsLabel), one tab stop each, and arrow keys that move and select (Home and End jump). Selection is announced through aria-checked.valueAnnouncement, which receives the unit so the message can read "4 hours".readonly; the unit and preset radiogroups carry aria-readonly="true". Nothing is removed from the tab order.announceFieldErrors={false}.