Updated
Input
Input collects one line of text, a password, a number, a code or a message, with a label, a hint and an error that never change the height of the field.
Updated
On this page
Preview
The field is 56 pt tall in every state, 104 with its label and hint, and underlined: one rule on the bottom edge and no fill or radius. Type in it.
Which types does Input have?
Input has six types: Default, Left Selection, Right Selection, Password, Prefix and Suffix. Default is a plain field, and Left and Right Selection put a picker on one side of a divider, for a dial code or a currency.
Default
Left Selection
Right Selection
Password
Prefix
Suffix
Password leads with a lock and ends on an eye-off icon, which in the specimen above is a switch that shows the typed text. Prefix writes https:// inside the value row in the placeholder color, so the person types only the part that varies.
Suffix ends the row on a unit such as kg.
Which states does Input have?
Input has five states: Placeholder, Filled, Focused, Error and Disabled. Only the rule, the text and the icons move, so a form does not jump on error, and Focused adds a clear button before the trailing icon.
Focused is the brand rule alone: an underlined field has no box for a focus ring to follow, and the brand rule against the gray one is the cue a keyboard user needs.
Error turns the rule, the hint and its icon red and keeps the typed value readable. Say what went wrong in the hint, because red is not a message.
Every title row can carry (Optional) after the title and a Tooltip info icon at the far end. Both are Boolean properties and both are on by default, so turn them off on a field that is required or says everything in its label.
Chip Input
The same underlined field with a tag icon, for entries that become chips. Once there is a value, the chips sit in their own row between the rule and the hint.
Filled
Focused
Counter Input
A pill with two round buttons and a number, for a quantity you nudge rather than type: the control iOS calls a stepper. The buttons work.
Focused
Error
Disabled
Digit Input
One cell per digit, for a code that arrives by text message: 64 pt squares at radius 16 with a 30/36 Medium digit, so the number reads at arm's length. Type a code in it.
Focused
Error
Disabled
Text Area
The same underlined field, one line deep at first, grows by a line as you type up to five and then scrolls inside instead of pushing the form down. Type in it.
Placeholder
Filled
Focused
Error
Disabled
The counter sits at the end of the hint row and follows the typing. Focused paints the rule in brand/base and Error in state/error/base-500, the same as Text Input.
Use a Text Area for an answer longer than a sentence and a Text Input for everything else.
Stepper
Two buttons and a number, for a value you change by one, with no field and no label: the stepper sits in a row that already says what it counts. The buttons work.
Size sm
State Min
State Max
Min and Max change only the glyph of the button that would cross the bound, to fg/disabled-400. The button keeps its white fill and its stroke, so the other button still reads as live.
The md size has 44 pt buttons and meets the iOS touch target. The sm size has 36 pt buttons, so give it a larger hit area in code.
Composer
A message or comment bar at one 40 pt height. Send stays dormant while the field is empty and turns brand blue as soon as there is text.
Default, Empty
Default, Typing
Avatar and Action on
Overlay, Empty
Overlay, Typing
The avatar, the action and the send circle share the 40 pt height with the field, so they line up without extra spacing. Avatar and Action are off by default and the paperclip accessory is on.
Style Overlay draws the field and the action on translucent black and white with a blur, for a bar that floats over a photo or a video. Press Send in the live bar and it empties the field, as sending a message does.
How does Input differ on iOS and Material 3?
Appetite UI draws an underlined field with its own label and hint, 56 pt tall. iOS draws a bare 52 pt row and Material 3 draws a filled or outlined box, 56 dp tall.
| Appetite UI component | iOS counterpart | Material 3 counterpart | What differs |
|---|---|---|---|
Text Input | iOS / Text Field, a 402 x 52 row with Placeholder, Focused, Typing and Value Entered | M3 / Text Field, 280 x 56, Filled or Outlined at radius 4, with Enabled, Focused, Error and Disabled | Appetite UI adds a label above, a hint below and an Error state that keeps the height. The platform fields carry no hint row. |
Password, Prefix, Suffix types | None in the file. SwiftUI uses SecureField for a password. | None in the file | The eye switch, the https:// prefix and the unit suffix are part of the Appetite UI field. |
Counter Input, Stepper | iOS / Stepper, a 92 x 32 pill | None in the file | Appetite UI Stepper is 107 x 36 at sm and 123 x 44 at md, so the md buttons meet the 44 pt target. |
Digit Input | None in the file. Set the one-time-code keyboard and autofill in code. | None in the file | Cells are 64 pt squares at radius 16. |
Text Area, Chip Input, Composer | None in the file | None in the file | These exist as Appetite UI components only. Chip Input draws its chips with the Chip component. |
The minimum touch target comes from platform/min-touch-target, 44 pt on iOS and 48 dp on Android, and a 56 field row clears both. Read Platform Bridge for the switch, and iOS and Material 3 for the platform mirrors.
Properties
Seven sets share one Figma page. Every property and its options, per set, read from the component definitions.
| Property | Type | Options | Default |
|---|---|---|---|
Type | Variant | Default, Left Selection, Right Selection, Password, Prefix, Suffix | Default |
State | Variant | Placeholder, Filled, Focused, Error, Disabled | Placeholder |
Input Label, Optional, Tooltip, Help | Boolean | on, off | on |
Icon Left, Icon Right | Boolean | on, off | on |
Icon Left Swap, Icon Right Swap | Instance swap | any icon | phone, chevron-down |
Input Label Text, Input Text, Help Text | Text | any string | Title of input, Placeholder text, This is a hint text to help user |
Password Text, Prefix Text, Suffix Text | Text | any string | ten dots, https://, kg |
| Set | Property | Type | Options | Default |
|---|---|---|---|---|
| Text Area | State | Variant | Placeholder, Filled, Focused, Error, Disabled | Placeholder |
| Text Area | Input Label, Optional, Tooltip, Help, Counter | Boolean | on, off | on |
| Text Area | Input Label Text, Input Text, Help Text, Counter Text, Value Text | Text | any string | Title of input, Add more detail, hint, 0/500, a sample sentence |
| Chip Input | State | Variant | Placeholder, Filled, Focused, Error, Disabled | Placeholder |
| Chip Input | Input Label, Optional, Tooltip, Help, Icon Left | Boolean | on, off | on |
| Chip Input | Input Label Text, Input Placeholder Text, Help Text | Text | any string | Title of input, Add tags, hint |
| Counter Input | State | Variant | Placeholder, Filled, Focused, Error, Disabled | Placeholder |
| Counter Input | Input Label, Optional, Tooltip, Help | Boolean | on, off | on |
| Counter Input | Input Label Text, Input Number, Help Text | Text | any string | Title of input, 24, hint |
| Digit Input | State | Variant | Default, Focused, Filled, Disabled, Error | Default |
| Set | Property | Type | Options | Default |
|---|---|---|---|---|
| Stepper | Size | Variant | sm, md | sm |
| Stepper | State | Variant | Default, Min, Max | Default |
| Stepper | Value | Text | any string | 2 |
| Composer | Style | Variant | Default, Overlay | Default |
| Composer | State | Variant | Empty, Typing | Empty |
| Composer | Avatar, Action | Boolean | on, off | off |
| Composer | Accessory | Boolean | on, off | on |
| Composer | Placeholder, Value | Text | any string | Message, Looks good to me |
| Composer | Action Icon, Accessory Icon | Instance swap | any icon | camera, paperclip |
Text Input 30 variants, Text Area 5, Chip Input 5, Counter Input 5, Digit Input 5, Stepper 6, Composer 4. Read from Figma on October 2, 2026.
Tokens
Every value the input reads, resolved through its aliases to the primitive underneath.
| Token | Light | Dark | Applied to |
|---|---|---|---|
border/sub-200 | #D1D1D6 | #48484A | The rule under the field, the Counter pill and the Digit cell |
brand/base | #155DFC | #2B7FFF | The rule while focused, the focused Counter and Digit stroke, the typing Send |
state/error/base-500 | #FB2C36 | #FB2C36 | The rule, the stroke and the hint on error |
text/soft-500 | #8E8E93 | #AEAEB2 | Label title, placeholder and affix text |
fg/soft-500 | #8E8E93 | #AEAEB2 | Every icon at rest |
text/strong-950 | #0E0E0F | #FFFFFF | The typed value, the Counter label and the Stepper value |
text/sub-700 | #48484A | #C7C7CC | Hint text |
text/disabled-400 | #AEAEB2 | #8E8E93 | Value and hint when disabled, and (Optional) |
border/soft-100 | #E9E9EA | #2F2F31 | Selection divider, Counter and Stepper buttons |
bg/white-0 | #FFFFFF | #0E0E0F | Counter, Digit and button fills |
bg/weak-50 | #F4F5F5 | #242427 | Composer field, disabled Counter and Digit fill |
bg/soft-100 | #E9E9EA | #48484A | The dormant Send |
fg/sub-700 | #48484A | #C7C7CC | The Stepper glyphs |
fg/disabled-400 | #AEAEB2 | #8E8E93 | Icons when disabled, the Stepper glyph at a bound and the dormant Send arrow |
text/on-color/strong | #FFFFFF | #FFFFFF | The Send arrow while typing |
static/static-white-0 | #FFFFFF | #FFFFFF | The Overlay value and glyphs |
The Overlay Composer uses the primitives colors/alpha/black/alpha-24, colors/alpha/white/alpha-24 and, for the placeholder, colors/alpha/white/alpha-72, which do not change between Light and Dark, with backdropBlur/sm. Counter and Digit Focused use the effect style focusRing/brand: a 2 pt gap in the surface color, then a 2 pt brand ring.
Guidelines
Do
Keep the hint slot filled from the start and swap its text on error. The field never changes height, so the form does not jump.
Don't
Do not signal the error with the red rule alone. A color blind user cannot read the rule, so the message has to say what is wrong.
Keep fields at 16 pt text or larger so iOS does not zoom the page on focus. Name every field with its label, because the placeholder disappears as soon as someone types.
The label title, the placeholder and the affix text use text/soft-500, #8E8E93, which measures 3.26 to 1 on white in Light. Give the real field a color at 4.5 to 1 for text a person has to read.
For keyboard focus the real field shows the brand rule, and Counter and Digit add the 2 plus 2 focus ring. Composer is 40 pt high, so give it a 44 pt hit area in code.