Field

Form building blocks — field stacks, labels, text controls, hints, and validation errors.

Preview

Live

As it should appear on applications.

Looks good.

<form class="form">
  <div class="field">
    <label for="name">Full name</label>
    <input id="name" name="name" autocomplete="name" />
    <p class="field-hint">As it should appear on applications.</p>
  </div>
  <div class="field">
    <label for="email">Email</label>
    <input id="email" class="is-invalid" aria-invalid="true" aria-describedby="email-err" />
    <p class="field-error" id="email-err" role="alert">Enter a valid email.</p>
  </div>
  <div class="field">
    <label for="handle">Handle</label>
    <input id="handle" class="is-valid" aria-describedby="handle-ok" />
    <p class="field-success" id="handle-ok">Looks good.</p>
  </div>
</form>

Variants

Two-column row

.row.row--2 for paired fields.

Textarea

Same field stack with multiline control.

Invalid

.is-invalid + aria-invalid + error via aria-describedby.

Valid

.is-valid success border (--ok) + message via aria-describedby.

Available.

Accessibility

  • Associate every control with a visible <label> via for/id.
  • Wire errors/success with aria-describedby; use role="alert" on .field-error.
  • Set aria-invalid (React invalid prop) when showing validation failures.
  • Use .is-valid / React valid for success chrome — if both valid and invalid are set, invalid wins.

API

HTML classes

Class Description
.form Vertical form stack.
.field Label + control + hint/error group.
.field-label Explicit label class (also styles bare label).
.field-hint Helper text.
.field-error Validation message (role=alert in React).
.field-control Min-height for custom triggers (select/pickers).
.is-invalid Invalid control border.
.is-valid Valid/success control border (--ok).
.field-success Success message text.
.row / .row--2 1- or 2-column field grid.

React props

From src/core/Field.tsxForm, Field, FieldLabel, Input, Textarea, FieldHint, FieldError, Row.

Prop Type Default Description
invalid boolean false Input/Textarea — adds .is-invalid + aria-invalid.
valid boolean false Input/Textarea — adds .is-valid (ignored when invalid).
columns 1 | 2 1 Row layout columns.
…native HTML attrs Form/Field/Label/Input/Textarea forward native props.