Skip to content

Select

A React source recipe with Base UI behavior and the public TIS Select classes and tokens.

Design

Functional preview

Running with the React source recipe distributed through shadcn and based on Base UI.

Loading functional preview…

Anatomy

7
1 2 3 4
Please select a country. 5
Choose one country from the list. 6
1 Wrapper (.ds-select) — container with border, radius.
2 Icon (optional, .ds-select__icon) — leading icon, decorative.
3 Field (.ds-select__field) — native <select> element.
4 Arrow (.ds-select__arrow) — custom chevron, pointer-events: none.
5 Error message (.ds-field__error) — external, via Form Field.
6 Helper text (.ds-field__helper) — external, via Form Field.
7 Label (.ds-field__label) — external, via Form Field.

Default

Helper text

Sizes

SizeHeightFontPaddingTouch target
Small (--sm)32px (component.select.height.sm)component.select.text.font-size.smcomponent.select.padding-x.sm / component.field.padding-y.sm32px — meets WCAG 2.5.8 min (24px)
Medium (--md)40px (component.select.height.md)component.select.text.font-size.mdcomponent.select.padding-x.md / component.field.padding-y.md40px
Large (--lg)48px (component.select.height.lg)component.select.text.font-size.lgcomponent.select.padding-x.lg / component.field.padding-y.lg48px — meets AAA 44px target

With icon

States

In Figma, State only represents exclusive visual states: Default, Hover, Focus, and Disabled. Filled, Error, and Read-only are separate properties; Error combines with Default/Hover/Focus, and Read-only combines with Default/Focus.

Error

Please select a country. Choose one country from the list.

Disabled

Readonly

Figma propertyValue / CSS triggerVisual changeToken
StateDefaultNeutral bordercomponent.field.border-color.default
StateHover / :hoverDarker bordercomponent.field.border-color.hover
StateFocus / :focus-visible2px outline ring, component radiuscomponent.field.border-color.focus, component.focus-ring.*, component.select.focus-ring.radius.default
StateDisabled / [disabled]Muted bg + content, no pointer eventscomponent.field.bg.disabled, component.field.value.color.disabled, component.field.placeholder.color.disabled
ErrorTrue / .ds-select--error or .ds-field--error .ds-selectRed border and error focus ringcomponent.field.border-color.error, component.focus-ring.color.error
Error + StateTrue + Hover / .ds-select--error:hoverDarker red bordercomponent.field.border-color.error-hover
Read-onlyTrue / .ds-select--readonly + [disabled]Readonly bg and content treatment; native select has no real readonly focuscomponent.field.bg.readonly, component.field.value.color.readonly

Figma properties

PropertyTypeDefaultDescription
Show LabelBooleantrueShows or hides the label row (including required asterisk)
LabelText"Rótulo"Label text (label/md)
RequiredBooleanfalseShows * in feedback/error/content/default next to the label
Show Helper TextBooleantrueShows or hides the helper text below the control
Helper TextText"Texto auxiliar"Caption/sm annotation (content/secondary)