ZEROlobby
22/22 strict⌘Kvisitor
skip to main
ADR-018
skin
——:——:——zcovenant · audit
forms· chapter 25 · ADR-018

operators can finally enter text · 14 primitives · one grammar

the form-input pack closes the largest gap in the 1.0.0 system. 14 primitives — Field, Form, Input, Textarea, Select, Checkbox, RadioGroup, Switch, Slider, DatePicker, TimePicker, FileUpload, ColorPicker, TagInput — share one seven-state grammar (idle · hover · focus · invalid · disabled · readonly · refuse), so consumers learn it once and apply it everywhere. paper-trade entry, refusal reasons, attestation upload, skin tuning — all composed from this pack.

playground · live

pick a state · the entire pack snaps to that grammar · the receipt below echoes the bound values. seven states uniform across every primitive — idle · hover · focus · invalid · disabled · readonly · refuse.

form playground · live· seven states · uniform across every primitive · pick a state · the whole pack snapsfocuscaret live · amber ring

symbol · mono variant

numeric · tabular · right-aligned

paper-first · live needs tier ≥ 3

single-of-N · roving tabindex

execute without manual confirmation

binary on/off · amber on

no custody · no advice · replayable · geofenced

single boolean · indeterminate supported

trade receipt
state
focus
ticker
sol
size
2500 usd
venue
paper
side
long
auto
off
terms
acknowledged
note
caret live · amber ring

04 worked example · paper-trade entry

every field below uses Field for label + hint + error rhythm. nothing is bespoke; the form is composed entirely from@zero/ui.

symbol on the chosen venue

paper-first · live requires tier ≥ 3

0.42σ envelope unless overridden

0.42 σ

drag publishes a pulse · article I.6

papersolbreakout

comma to commit · backspace to remove last

graded live by RewriteTester downstream

optional · proof of risk-acknowledged

execute without manual confirmation
i acknowledge no custody, no advice, replayable, geofenced

06 dossier · 14 primitives

numprimitivewhy it ships
46Fieldthe canonical label + control + hint + error wrapper
47Formvalidation host with refuse-callout error summary
48Inputsingle-line text · default · mono · numeric · refuse
49Textareamulti-line text · auto-grow · counter slot
50Selectsingle-value choose-one (combobox in v1.1)
51Checkboxsingle boolean · indeterminate (mixed) shipped
52RadioGroupsingle-of-N · roving tabindex · group primitive only
53Switchbinary on/off · amber on · never green
54Slidersingle value or paired range · pulse-bound on drag
55DatePickercustom calendar · today is amber dot, never cell fill
56TimePickermono twin columns · 24h default · 12h opt-in
57FileUploaddrop zone · explicit caption · per-file refuse handles
58ColorPickerOKLCH-aware · L/C/H sliders · hex is read-only readout
59TagInputmulti-value · enter to commit · backspace removes last

07 the seven-state grammar

statemeaningvisual
idle no interaction yet --field-border · 1px
hover pointer over interactive surface --field-border-strong · 1px
focus receives keyboard focus --border-focus · 1px + 1px ring
invalid failed validation, hint visible --danger · 1px + inline FieldError
disabled not interactive (system-set) --field-bg-disabled · --fg-subtle
readonly value visible but not editable --field-bg-readonly · dashed border
refuse operator-side refusal (ZERO posture) RefusePill chrome at field foot