Rost
← All components
component

Input

A 56px text field with a floating label, an optional lock icon, a line of help text and an error state.

In codeContract: reviewGuidance: agreedContract on GitHubFigma 240:273
Supportive
Default · Empty · not selected · not error
Supportive
Default · Empty · selected · not error
Supportive
Disabled · Empty · not selected · not error
Supportive
Default · Empty · not selected · error
Supportive
Default · Filled · not selected · error
Supportive
Default · Empty · selected · error
Supportive
Default · Filled · selected · error
Supportive
Default · Filled · not selected · not error
Supportive
Disabled · Filled · not selected · not error
Supportive
Default · Filled · selected · not error

Hover, press or tab to one to see the other 4 states.

When to use

  • Any single line of text: email, name, an amount, search.

When not to use

  • Picking from a known list. That's Chip or Toggle, free text just invites typos.
  • Several lines of text. There's no textarea in the kit yet.

Behaviour

Four things change it:

  • configuration: Empty shows the label where you'll type. Filled moves it up and shows the value.
  • selected: it has focus, so the focus ring shows.
  • error: the outline, label, help text and icons go red, and the alarm icon shows up on the right.
  • state: Default, Hover and Disabled.

Check what people typed when they leave the field or submit, not on every key.

Accessibility

  • Element: a real <input> with a <label for>. The floating label is the label. Never a placeholder.
  • Supportive Text: connected with aria-describedby.
  • Error: aria-invalid="true", and the help text says how to fix it.
  • Colour: an error shows as the alarm icon and the message, not only red.
  • Focus: the ring shows on :focus-visible and when you arrive by keyboard. Never remove the outline without the ring.
  • Lock Icon: just decoration, unless it means read-only. If it does, set readonly and say so in the help text.

Content

Label: a noun, sentence case ("Email address"). Help text: one line. Before an error it's a hint, after it it's the fix ("Use at least 8 characters", not "Invalid input").

Props

PropTypeValuesDefault
labelslot
valueslot
placeholderslot
supportiveslot
configurationenumEmpty · FilledEmpty
selectedbooleanfalse
errorbooleanfalse
iconslot

States: Default, Hover, Disabled.

Where it's used

Values

Straight from the contract. Each value sits next to its token, because six tokens here all come out as #3a3a3a and the colour alone can't tell you which one is right.

Never changes

PartPropertyValueToken
rootdisplayflexlayout
rootalign-itemscenterlayout
rootpositionrelativelayout
rootgap8pxspacing/gap/small
rootheight56pxspacing/size/large
rootpadding-left12pxspacing/gap/small-medium
rootpadding-right12pxspacing/gap/small-medium
rootpadding-top0pxspacing/gap/none
rootpadding-bottom0pxspacing/gap/none
rootborder-radius12pxspacing/radius/medium
rootcursortextFigma frame size
rootwidth208pxFigma frame size
outlinepositionabsolutelayout
outlineinset0layout
outlineborder-stylesolidno token yet
outlineborder-width1pxspacing/outline/small
outlineborder-radius12pxspacing/radius/medium
outlineopacity1opacity/solid
outlinepointer-eventsnoneFigma frame size
leftdisplayflexlayout
leftalign-itemscenterlayout
leftflex1 0 0layout
leftmin-width1pxFigma frame size
leftpositionrelativelayout
leftgap8pxspacing/gap/small
icons-lockdisplayblocklayout
icons-lockflex-shrink0layout
icons-lockwidth20pxspacing/size/xsmall
icons-lockheight20pxspacing/size/xsmall
icons-lockmaskurl(./icon-lock.svg) center / contain no-repeaton purpose: The icon file itself.
contentdisplayflexlayout
contentflex-directioncolumnlayout
contentalign-itemsflex-startlayout
contentflex1 0 0layout
contentmin-width1pxFigma frame size
contentpositionrelativelayout
contentwhite-spacenowraplayout
labelfont-family'General Sans Variable'font-family/base
labelfont-weight400typography/label/font-weight/regular
labelpointer-eventsnoneFigma frame size
valuedisplayblocklayout
valuewidth100%layout
valuepadding0pxspacing/gap/none
valuebordernoneFigma frame size
valuebackgroundnoneFigma frame size
valueoutlinenoneFigma frame size
valuefont-family'General Sans Variable'font-family/base
valuefont-weight400typography/paragraph/font-weight/regular
valuefont-size14pxtypography/paragraph/font-size
valueline-height20pxtypography/paragraph/line-height
valueletter-spacing0pxtypography/paragraph/letter-spacing
rightdisplayflexlayout
rightalign-itemscenterlayout
rightflex-shrink0layout
rightpositionrelativelayout
clear-glyphdisplayblocklayout
clear-glyphwidth16pxspacing/size/2xsmall
clear-glyphheight16pxspacing/size/2xsmall
clear-glyphbackgroundcurrentColorno token yet
clear-glyphmaskurl(./icon-clear.svg) center / contain no-repeaton purpose: The icon file itself.
icons-alarmdisplayblocklayout
icons-alarmflex-shrink0layout
icons-alarmwidth24pxspacing/size/small
icons-alarmheight24pxspacing/size/small
icons-alarmmaskurl(./icon-alarm.svg) center / contain no-repeaton purpose: The icon file itself.
supportivepositionabsolutelayout
supportiveleft12pxspacing/gap/small-medium
supportivetopcalc(var(--spacing-size-large) + var(--spacing-gap-2xsmall))on purpose: Composed from tokens: the field's height plus spacing/gap/2xsmall.
supportivewhite-spacenowraplayout
supportivefont-family'General Sans Variable'font-family/base
supportivefont-weight500typography/label/font-weight/medium
supportivefont-size10pxtypography/placeholder/font-size
supportiveline-height12pxtypography/placeholder/line-height
supportiveletter-spacing0pxtypography/placeholder/letter-spacing
focus-ringdisplaynonelayout
focus-ringpositionabsolutelayout
focus-ringinsetcalc(-1 * var(--spacing-gap-2xsmall))layout
focus-ringborder-stylesolidno token yet
focus-ringborder-width2pxspacing/outline/medium
focus-ringborder-radius16pxspacing/radius/large
focus-ringpointer-eventsnoneFigma frame size

Changes by variant

focus-ring.border-color4
state=Default, configuration=Empty, selected=True, error=False#00d669input/regular/focus/focus-ring
state=Default, configuration=Empty, selected=True, error=True#00d669input/negative/focus/focus-ring
state=Default, configuration=Filled, selected=True, error=True#00d669input/negative/focus/focus-ring
state=Default, configuration=Filled, selected=True, error=False#00d669input/regular/focus/focus-ring
focus-ring.display4
state=Default, configuration=Empty, selected=True, error=Falseblocklayout
state=Default, configuration=Empty, selected=True, error=Trueblocklayout
state=Default, configuration=Filled, selected=True, error=Trueblocklayout
state=Default, configuration=Filled, selected=True, error=Falseblocklayout
icons-alarm.background6
state=Default, configuration=Empty, selected=False, error=True#e93120input/negative/default/icon
state=Default, configuration=Filled, selected=False, error=True#e93120input/negative/default/icon
state=Default, configuration=Empty, selected=True, error=True#e93120input/negative/focus/icon
state=Default, configuration=Filled, selected=True, error=True#e93120input/negative/focus/icon
state=Hover, configuration=Empty, selected=False, error=True#ae1b13input/negative/hover/icon
state=Hover, configuration=Filled, selected=False, error=True#ae1b13input/negative/hover/icon
icons-lock.background14
state=Default, configuration=Empty, selected=False, error=False#00d669input/regular/default/icon
state=Hover, configuration=Empty, selected=False, error=False#00b450input/regular/hover/icon
state=Default, configuration=Empty, selected=True, error=False#00d669input/regular/focus/icon
state=Disabled, configuration=Empty, selected=False, error=False#b6ffdainput/regular/disabled/icon
state=Default, configuration=Empty, selected=False, error=True#e93120input/negative/default/icon
state=Default, configuration=Filled, selected=False, error=True#e93120input/negative/default/icon
state=Default, configuration=Empty, selected=True, error=True#e93120input/negative/focus/icon
state=Default, configuration=Filled, selected=True, error=True#e93120input/negative/focus/icon
state=Hover, configuration=Empty, selected=False, error=True#ae1b13input/negative/hover/icon
state=Hover, configuration=Filled, selected=False, error=True#ae1b13input/negative/hover/icon
state=Default, configuration=Filled, selected=False, error=False#00d669input/regular/default/icon
state=Disabled, configuration=Filled, selected=False, error=False#b6ffdainput/regular/disabled/icon
state=Default, configuration=Filled, selected=True, error=False#00d669input/regular/focus/icon
state=Hover, configuration=Filled, selected=False, error=False#00b450input/regular/hover/icon
icons-lock.opacity2
state=Disabled, configuration=Empty, selected=False, error=False0.16opacity/soft
state=Disabled, configuration=Filled, selected=False, error=False0.16opacity/soft
label.color14
state=Default, configuration=Empty, selected=False, error=False#999999input/regular/default/label
state=Hover, configuration=Empty, selected=False, error=False#d3d9d5input/regular/hover/supportive
state=Default, configuration=Empty, selected=True, error=False#999999input/regular/focus/label
state=Disabled, configuration=Empty, selected=False, error=False#555555input/regular/disabled/label
state=Default, configuration=Empty, selected=False, error=True#e93120input/negative/default/label
state=Default, configuration=Filled, selected=False, error=True#e93120input/negative/default/label
state=Default, configuration=Empty, selected=True, error=True#e93120input/negative/focus/label
state=Default, configuration=Filled, selected=True, error=True#e93120input/negative/focus/label
state=Hover, configuration=Empty, selected=False, error=True#e93120input/negative/hover/label
state=Hover, configuration=Filled, selected=False, error=True#e93120input/negative/hover/label
state=Default, configuration=Filled, selected=False, error=False#999999input/regular/default/label
state=Disabled, configuration=Filled, selected=False, error=False#555555input/regular/disabled/label
state=Default, configuration=Filled, selected=True, error=False#999999input/regular/focus/label
state=Hover, configuration=Filled, selected=False, error=False#d3d9d5input/regular/hover/label
label.font-size14
state=Default, configuration=Empty, selected=False, error=False14pxtypography/paragraph/font-size
state=Hover, configuration=Empty, selected=False, error=False14pxtypography/paragraph/font-size
state=Default, configuration=Empty, selected=True, error=False10pxtypography/placeholder/font-size
state=Disabled, configuration=Empty, selected=False, error=False14pxtypography/paragraph/font-size
state=Default, configuration=Empty, selected=False, error=True14pxtypography/paragraph/font-size
state=Default, configuration=Filled, selected=False, error=True10pxtypography/placeholder/font-size
state=Default, configuration=Empty, selected=True, error=True10pxtypography/placeholder/font-size
state=Default, configuration=Filled, selected=True, error=True10pxtypography/placeholder/font-size
state=Hover, configuration=Empty, selected=False, error=True14pxtypography/paragraph/font-size
state=Hover, configuration=Filled, selected=False, error=True10pxtypography/placeholder/font-size
state=Default, configuration=Filled, selected=False, error=False10pxtypography/placeholder/font-size
state=Disabled, configuration=Filled, selected=False, error=False10pxtypography/placeholder/font-size
state=Default, configuration=Filled, selected=True, error=False10pxtypography/placeholder/font-size
state=Hover, configuration=Filled, selected=False, error=False10pxtypography/placeholder/font-size
label.letter-spacing14
state=Default, configuration=Empty, selected=False, error=False0pxtypography/paragraph/letter-spacing
state=Hover, configuration=Empty, selected=False, error=False0pxtypography/paragraph/letter-spacing
state=Default, configuration=Empty, selected=True, error=False0pxtypography/placeholder/letter-spacing
state=Disabled, configuration=Empty, selected=False, error=False0pxtypography/paragraph/letter-spacing
state=Default, configuration=Empty, selected=False, error=True0pxtypography/paragraph/letter-spacing
state=Default, configuration=Filled, selected=False, error=True0pxtypography/placeholder/letter-spacing
state=Default, configuration=Empty, selected=True, error=True0pxtypography/placeholder/letter-spacing
state=Default, configuration=Filled, selected=True, error=True0pxtypography/placeholder/letter-spacing
state=Hover, configuration=Empty, selected=False, error=True0pxtypography/paragraph/letter-spacing
state=Hover, configuration=Filled, selected=False, error=True0pxtypography/placeholder/letter-spacing
state=Default, configuration=Filled, selected=False, error=False0pxtypography/placeholder/letter-spacing
state=Disabled, configuration=Filled, selected=False, error=False0pxtypography/placeholder/letter-spacing
state=Default, configuration=Filled, selected=True, error=False0pxtypography/placeholder/letter-spacing
state=Hover, configuration=Filled, selected=False, error=False0pxtypography/placeholder/letter-spacing
label.line-height14
state=Default, configuration=Empty, selected=False, error=False20pxtypography/paragraph/line-height
state=Hover, configuration=Empty, selected=False, error=False20pxtypography/paragraph/line-height
state=Default, configuration=Empty, selected=True, error=False12pxtypography/placeholder/line-height
state=Disabled, configuration=Empty, selected=False, error=False20pxtypography/paragraph/line-height
state=Default, configuration=Empty, selected=False, error=True20pxtypography/paragraph/line-height
state=Default, configuration=Filled, selected=False, error=True12pxtypography/placeholder/line-height
state=Default, configuration=Empty, selected=True, error=True12pxtypography/placeholder/line-height
state=Default, configuration=Filled, selected=True, error=True12pxtypography/placeholder/line-height
state=Hover, configuration=Empty, selected=False, error=True20pxtypography/paragraph/line-height
state=Hover, configuration=Filled, selected=False, error=True12pxtypography/placeholder/line-height
state=Default, configuration=Filled, selected=False, error=False12pxtypography/placeholder/line-height
state=Disabled, configuration=Filled, selected=False, error=False12pxtypography/placeholder/line-height
state=Default, configuration=Filled, selected=True, error=False12pxtypography/placeholder/line-height
state=Hover, configuration=Filled, selected=False, error=False12pxtypography/placeholder/line-height
outline.background14
state=Default, configuration=Empty, selected=False, error=False#060805input/regular/default/background
state=Hover, configuration=Empty, selected=False, error=False#171717input/regular/hover/background
state=Default, configuration=Empty, selected=True, error=False#060805input/regular/focus/background
state=Disabled, configuration=Empty, selected=False, error=False#171717input/regular/disabled/background
state=Default, configuration=Empty, selected=False, error=True#060805input/negative/default/background
state=Default, configuration=Filled, selected=False, error=True#060805input/negative/default/background
state=Default, configuration=Empty, selected=True, error=True#060805input/negative/focus/background
state=Default, configuration=Filled, selected=True, error=True#060805input/negative/focus/background
state=Hover, configuration=Empty, selected=False, error=True#171717input/negative/hover/background
state=Hover, configuration=Filled, selected=False, error=True#171717input/negative/hover/background
state=Default, configuration=Filled, selected=False, error=False#060805input/regular/default/background
state=Disabled, configuration=Filled, selected=False, error=False#171717input/regular/disabled/background
state=Default, configuration=Filled, selected=True, error=False#060805input/regular/focus/background
state=Hover, configuration=Filled, selected=False, error=False#171717input/regular/hover/background
outline.border-color14
state=Default, configuration=Empty, selected=False, error=False#555555input/regular/default/outline
state=Hover, configuration=Empty, selected=False, error=False#999999input/regular/hover/outline
state=Default, configuration=Empty, selected=True, error=False#555555input/regular/focus/outline
state=Disabled, configuration=Empty, selected=False, error=False#3a3a3ainput/regular/disabled/outline
state=Default, configuration=Empty, selected=False, error=True#f2705finput/negative/default/outline
state=Default, configuration=Filled, selected=False, error=True#f2705finput/negative/default/outline
state=Default, configuration=Empty, selected=True, error=True#f2705finput/negative/focus/outline
state=Default, configuration=Filled, selected=True, error=True#f2705finput/negative/focus/outline
state=Hover, configuration=Empty, selected=False, error=True#e93120input/negative/hover/outline
state=Hover, configuration=Filled, selected=False, error=True#e93120input/negative/hover/outline
state=Default, configuration=Filled, selected=False, error=False#555555input/regular/default/outline
state=Disabled, configuration=Filled, selected=False, error=False#3a3a3ainput/regular/disabled/outline
state=Default, configuration=Filled, selected=True, error=False#555555input/regular/focus/outline
state=Hover, configuration=Filled, selected=False, error=False#999999input/regular/hover/outline
supportive.color14
state=Default, configuration=Empty, selected=False, error=False#999999input/regular/default/supportive
state=Hover, configuration=Empty, selected=False, error=False#d3d9d5input/regular/hover/supportive
state=Default, configuration=Empty, selected=True, error=False#999999input/regular/focus/supportive
state=Disabled, configuration=Empty, selected=False, error=False#555555input/regular/disabled/supportive
state=Default, configuration=Empty, selected=False, error=True#e93120input/negative/default/supportive
state=Default, configuration=Filled, selected=False, error=True#e93120input/negative/default/supportive
state=Default, configuration=Empty, selected=True, error=True#e93120input/negative/focus/supportive
state=Default, configuration=Filled, selected=True, error=True#e93120input/negative/focus/supportive
state=Hover, configuration=Empty, selected=False, error=True#ae1b13input/negative/hover/supportive
state=Hover, configuration=Filled, selected=False, error=True#ae1b13input/negative/hover/supportive
state=Default, configuration=Filled, selected=False, error=False#999999input/regular/default/supportive
state=Disabled, configuration=Filled, selected=False, error=False#555555input/regular/disabled/supportive
state=Default, configuration=Filled, selected=True, error=False#999999input/regular/focus/supportive
state=Hover, configuration=Filled, selected=False, error=False#d3d9d5input/regular/hover/supportive
value.color9
state=Default, configuration=Empty, selected=True, error=False#c2c7c3input/regular/focus/placeholder
state=Default, configuration=Filled, selected=False, error=True#999999input/negative/default/placeholder
state=Default, configuration=Empty, selected=True, error=True#edededinput/negative/focus/value
state=Default, configuration=Filled, selected=True, error=True#edededinput/negative/focus/value
state=Hover, configuration=Filled, selected=False, error=True#555555input/negative/hover/placeholder
state=Default, configuration=Filled, selected=False, error=False#c2c7c3input/regular/default/placeholder
state=Disabled, configuration=Filled, selected=False, error=False#555555input/regular/disabled/placeholder
state=Default, configuration=Filled, selected=True, error=False#c2c7c3input/regular/focus/placeholder
state=Hover, configuration=Filled, selected=False, error=False#d3d9d5input/regular/hover/placeholder
value.height5
state=Default, configuration=Empty, selected=False, error=False0Figma frame size
state=Hover, configuration=Empty, selected=False, error=False0Figma frame size
state=Disabled, configuration=Empty, selected=False, error=False0Figma frame size
state=Default, configuration=Empty, selected=False, error=True0Figma frame size
state=Hover, configuration=Empty, selected=False, error=True0Figma frame size
value.opacity5
state=Default, configuration=Empty, selected=False, error=False0Figma frame size
state=Hover, configuration=Empty, selected=False, error=False0Figma frame size
state=Disabled, configuration=Empty, selected=False, error=False0Figma frame size
state=Default, configuration=Empty, selected=False, error=True0Figma frame size
state=Hover, configuration=Empty, selected=False, error=True0Figma frame size