Overview
Foundations
Brand
Colors
Typography
Spacing & Layout
Semantic Tokens
Icons
Shadows
Components
Patterns
Design System
Text inputs allow users to enter and edit short-form text. They support four visual states — default, hover, focus, and disabled — each driven by semantic tokens that adapt automatically between light and dark modes.
Inputs transition through four visual states. Borders, backgrounds, and text colours are driven by semantic tokens that switch automatically between light and dark mode — no additional props needed.
Interactive
Disabled
Padding
10px 12px
Border Radius
6px
Border Width
1.5px
Font Size
14px
Input colours are driven by a combination of shared and input-specific semantic tokens. Shared tokens like bg.card and border.default are reused across components, while input.* tokens handle interaction states unique to form fields.
Property
Token
Light
Dark
Background
--bg-card
white
gray.800
Background Disabled
--neutral-bg
gray.100
gray.900
Border
--border
gray.200
gray.700
Border Hover
--input-border-hover
gray.300
gray.600
Border Focus
--input-border-focus
brand.600
brand.600
Text
--text
gray.900
gray.50
Text Disabled
--text-disabled
gray.500
gray.400
Placeholder
--placeholder
tertiary.600
gray.400
Focus Ring
--focus-ring
brand.600
brand.600
Do
Always pair inputs with a visible label or aria-label
Use placeholder text as a hint, not a replacement for labels
Provide clear focus indicators for keyboard navigation
Use semantic tokens so inputs adapt to colour mode automatically
Don't
Don't use placeholder text as the only label
Don't remove the focus ring — it is essential for accessibility
Don't hardcode border or background colours — use tokens
Don't disable inputs without explaining why in a tooltip or helper text
Labelling
Every input must be associated with a label via htmlFor / id, or use aria-label for icon-only inputs. Placeholder text alone is not accessible.
Focus Visibility
The focus ring (secondary.600) and border highlight ensure keyboard users can clearly identify the active input. Never suppress these indicators.
Error Announcements
When isInvalid is true, pair it with FormErrorMessage inside a FormControl. Chakra automatically adds aria-invalid and connects the error message via aria-describedby.