Two-column row
.row.row--2 for paired fields.
Form building blocks — field stacks, labels, text controls, hints, and validation errors.
Live
<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>
import { Form, Field, FieldLabel, Input, FieldHint, FieldError, Row } from 'caustica-design/core'
import 'caustica-design/css'
<Form>
<Field>
<FieldLabel htmlFor="name">Full name</FieldLabel>
<Input id="name" name="name" autoComplete="name" />
<FieldHint>As it should appear on applications.</FieldHint>
</Field>
<Field>
<FieldLabel htmlFor="email">Email</FieldLabel>
<Input id="email" invalid aria-describedby="email-err" />
<FieldError id="email-err">Enter a valid email.</FieldError>
</Field>
<Field>
<FieldLabel htmlFor="handle">Handle</FieldLabel>
<Input id="handle" valid aria-describedby="handle-ok" />
<p className="field-success" id="handle-ok">Looks good.</p>
</Field>
</Form>
.row.row--2 for paired fields.
Same field stack with multiline control.
.is-invalid + aria-invalid + error via aria-describedby.
Required.
.is-valid success border (--ok) + message via aria-describedby.
Available.
<label> via for/id.aria-describedby; use role="alert" on .field-error.aria-invalid (React invalid prop) when showing validation failures..is-valid / React valid for success chrome — if both valid and invalid are set, invalid wins.| 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. |
From src/core/Field.tsx — Form, 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. |