FORMS · FORM ELEMENTS
Inputs
Text fields, masks, tags and codes. Every field here validates, formats or talks to a fake server.THEME
DENSITY
01
Playground
Type, size, state and label — the field and its a11y tree update livePREVIEWLive · type to validate
We’ll send the invite here
ACCESSIBILITY TREE
roletextbox
name"Work email" · from <label for>
description"We’ll send the invite here"
valueempty
statesrequired
Settings
TYPE
SIZE
LABEL
STATE
CODE
<Input type="email" label="Work email" placeholder="name@studio.com" icon={<Mail />} clearable hint="We’ll send the invite here" required/>
02
Variants
12 field patterns, all workingText & emailtype="text" · type="email"
Client nameAs it appears on invoices
Passwordshow / hide · Caps Lock · confirm
PasswordToggle the eye to check what you typed
Number steppermin 1 · max 20 · ↑ ↓ keys
Seats4 seats × $12 = $48 / month
Searchtype="search" · Esc clears
Search projects
⌘ K
Esc clears the fieldFloating labellabel shrinks, never disappears
Inline labellabel column · 110 px
Country code + number
Prefix & suffixaddons are not part of the value
https://.avava.studio
Lowercase letters, numbers and dasheshttps://yourstudio.avava.studio$USD / day
Separators are added as you typeWith actionbutton inside the field
Invite link
Promo codeTry SPRING27, or anything else to see the error
Textareaauto-grow · 280 limit
Grows with the text, up to 9 lines
0 / 280Input masksformat as you type · raw value kept
+1
raw: —Try 4242 4242 4242 4242raw: —
raw: —
Try DE89 3704 0044 0532 0130 00raw: —
TagsEnter · comma · paste a list
3 / 8
1 address looks wrong — click it to edit
One-time codeauto-advance · paste fills all
Sent to o•••@avava.studio · resend in 0:24
03
States
7 states × 3 sizesDEFAULTFOCUSFILLEDERRORSUCCESSDISABLEDREAD-ONLYS · 36M · 44L · 52
Default1.5 px border at 16% ink, 3% fill
FocusCyan border plus a 4 px ring at 22%
ErrorCoral border, icon and a message that says how to fix it
SuccessGreen — only after a real check, not on every keystroke
Disabled55% opacity, not focusable, value not submitted
Read-onlyDashed border, focusable and selectable, value submitted
04
Behavior
Validation timing, strength, async checks, suggestionsValidation timingwhen should an error appear?
SHOW ERRORS
Type “olivia@avava”, then leave the field
Recommended. Errors wait until you leave the field, then update live while you fix them.
Password strengthmeter + live rules
New password
Start typingEstimated crack time
8+ charactersUpper & lowerA numberA symbol
Async checkdebounce 450 ms → request → result
@
Letters, numbers, dot, dash, underscore1 · typing2 · debounce3 · request4 · result
Taken in this demo: olivia, admin, avava, studio, jon.Search suggestionscombobox · ↑ ↓ Enter Esc
Focus the field to open the list
05
In Avava
Profile settings and a live client filterProfileSettings → Account · dirty tracking
Olivia Laneolivia@avava.studio
+1
https://
Shown on proposals and your public profile71 / 160
Clientslive filter · highlight · empty state
8 of 8
CLIENTCONTACTCITYSTATUS
Atelier NoirLeo ParkParisActive
Lume GoodsBen CostaAustinActive
Nova AthleticsAna PetitLondonPaused
Kiln & CoJakob MoreauLagosActive
Orbit LabsIda SvenssonSingaporeLead
Sable StudioJonas BergOsloActive
Forma TypeZoe DahlMilanLead
Halo HealthLiam NovakBostonPaused
06
Rules & a11y
Anatomy, screen readers, keyboards, labelsAnatomylabel · field · message · counter
Work email*1
olivia@avava
2Add a domain, like .studio312 / 404
1Label — always visible, 12.5 / 700, * for required
2Field — 44 px, 1.5 px border, 14 px radius, ring on focus
3Message — hint or error in the same slot — they replace, never stack
4Counter — only when there is a real limit
Screen readerswhat assistive tech hears
✓<label for="email">Every field has a visible label tied by for / id
✓aria-describedby="email-hint email-error"Hint and error are read after the label
✓aria-invalid="true"Set only after validation fails, never on load
✓aria-required="true"Plus a visible * — colour alone is not enough
✓role="alert"New errors are announced without moving focus
✓:focus-visibleRing stays at 3:1 contrast against the card
Right keyboardtype · inputmode · autocomplete
FIELDTYPEINPUTMODEAUTOCOMPLETE
Emailemailemailemail
Phonetelteltel
Amounttextdecimaloff
Cardtextnumericcc-number
OTPtextnumericone-time-code
Searchsearchsearchoff
New passwordpassword—new-password
Placeholder ≠ labelthe hint vanishes on the first keystroke
✕ PLACEHOLDER ONLY
olivia@av
Halfway through typing — what was this field again?✓ LABEL + EXAMPLEWork email
olivia@av
The label stays. The placeholder only shows the format.DO✓Keep a visible label above every field✓Validate on blur, then re-check live while the user fixes it✓Say how to fix it: “Add a domain, like .studio”✓Match the keyboard with type, inputmode and autocomplete✓Keep the raw value separate from the mask
DON’T✕Use placeholder text as the only label✕Show an error before the user has finished typing✕Block paste in password or code fields✕Disable Submit without saying what’s missing✕Clear the field when validation fails