Keep scope focused so users can complete the flow without context switches.
Form
Layout, field selection, validation timing, and copy guidance for data-entry flows.
Field type selection
Pick the field type based on what the user is entering, not what is easiest to build. The table below maps answer types to the right component.
type for keyboard and autocomplete.Layout
Single-column is almost always right. Two-column works only when two fields are semantically paired and visually equal in length (first name / last name, start date / end date). Never use two columns just to fit more above the fold.
Required fields
Always state the convention at the top of the form before the first field. Mark required fields with * in red next to the label. If nearly every field is required, it is cleaner to mark the one or two optional fields as "optional" instead.
The required prop on Input, Textarea, Select, Checkbox, and FormGroup adds the visual * automatically and sets the native required attribute for browser validation.
<p className="form-note">Fields marked with * are required.</p>
<FormGroup label="Email" required>
<Input id="email" type="email" />
</FormGroup>
<FormGroup label="Company">
<Input id="company" placeholder="Optional" />
</FormGroup>Validation timing
When errors appear matters as much as what they say. Showing errors before the user has finished typing creates anxiety. Showing them only on submit delays feedback on recoverable mistakes.
Error copy
Error messages should say what is wrong and how to fix it. Not what the system rejected.
Password fields
Show requirements from the moment the field is focused, not after submit. Checking off requirements as the user types reduces anxiety and removes guesswork.
The standard requirement set is: 12 characters minimum, 1 uppercase letter, 1 number, 1 special character. The eye icon toggles password visibility and is built into the Input component when type="password".
<Input
id="password"
type="password"
label="Password"
required
hint="12+ characters, 1 uppercase, 1 number, 1 special character"
/>Submit placement
The primary action goes at the bottom-left of the form, aligned with the input fields. Cancel or secondary actions sit next to it, never above. Right-aligned submit buttons feel disconnected from the content the user just filled in.
Do and don't
Show errors close to fields and clear them as soon as the condition is resolved.
Keep Back and Submit placement consistent across steps.
Do not hide field meaning once users start typing.
Avoid forcing users through multiple failed submissions to discover issues.
Do not rely on color alone to communicate required or invalid states.