What it is
A field the reader types a value into directly — a single line, or several as multiline. Input is the default for free text and numbers with no fixed set of valid answers; the moment the answer comes from an enumerable set, that is a different decision. This page covers the single-line and multiline variants together, since choosing between them is one decision about the same field, not two components.Live example
Exports
Vocabulary
Choose Input when
- The value is free text or a number the reader types, with no fixed set of valid answers.
- The expected answer is short enough to read within the field for a single line, or longer for multiline.
Choose something else when
Anatomy
Variants, sizes, and states
Confirmed from the Figma library, not source. Real axes on this component:
Type
(Default · Error), State (Default · Focused · Filled · Disabled), Multiline,
Search bar, and Left Icon — each boolean and independently combinable. Filled means
“has a value,” a named state distinct from empty, which this page did not previously call
out. Search bar is a real, named configuration of this same component — not a separate
search component.Edge and failure states
Tokens
Composition
Always paired with FieldLabel above it. Multiple Inputs stack vertically inside Form — no vertical-rhythm token between stacked fields was found in the snapshot; see Gaps. For a complete field rather than the bare control, compose throughFormInput with
type="text" — see TITAN-INPUT-08.
Content
Accessibility
What this component does not handle: validating its own value or deciding when an error
should show — both belong to Form validation.
Constraints
Known issues
Input: open issues
Divergences, open decisions, and undocumented gaps for Input.
Why it works this way
Numeric fields trade the native spinner for typed entry because the spinner’s usability problems — accidental scroll-edits, inconsistent cross-browser sizing — outweigh the convenience of clicking to increment. A reader who wants to change a number by a fixed step can still type the new value directly. Multiline never inherits the platform default row count for the same reason Button holds its width while loading: an undeclared dimension makes identical markup render at different sizes depending on the browser, which is a layout bug waiting to be noticed rather than a design decision anyone made. Read-only and disabled stay visually distinct because they answer different questions — “can I change this” versus “does this even apply right now” — and a reader who cannot tell which one they’re looking at cannot tell whether the fix is theirs to make.Status
Related
- FieldLabel — every Input composes with one
- Select — the constrained-choice counterpart
- Form validation — decides when and how an Input shows invalid
- Numbers · Dates and times — formatting rules for what a reader types