Skip to content
Components
@app-studio/components

Select

A customizable UI component for selecting from a list of options.

View component source

Import

ts
import { Select } from '@app-studio/components';

New to the library? Complete installation and provider setup first.

Interactive examples

Try the component, then open Code to copy the complete example.

INTERACTIVE EXAMPLE

Loading preview…

Props

Required props are marked below. A dash indicates an unspecified default. Design system configuration can override implementation defaults.

Scroll horizontally to see every column.

Select
PropTypeDefaultDescription
idstring—See the type and source declaration for this property.Source
errorbooleanfalseError state — usually a string for the error message, or a boolean toggle.Source
namestring—Field name used by forms and Formik bindings.Source
labelstring—Visible label rendered alongside the input. Form-library wrappers (Switch, TextField, Checkbox, …) consume this. Not a native HTML attribute on <input>, but conventionally part of the form-control prop surface.Source
helperTextstring—Helper text rendered below the input (hint / error / explanation).Source
placeholderstring—Hint displayed while the field is empty.Source
options RequiredOption[][]Available choices and their values.Source
valuestring | string[]—Current controlled value. Update it from the matching change callback.Source
defaultValuestring | string[]—Initial value for uncontrolled usage.Source
isMultibooleanfalseSee the type and source declaration for this property.Source
isReadOnlybooleanfalseKeeps the value visible without allowing edits.Source
isDisabledbooleanfalseDisables user interaction.Source
isRequiredbooleanfalseMarks this field as required.Source
isAutoFocusbooleanfalseSee the type and source declaration for this property.Source
onChange((value: string | string[]) => void)—Called with the next selection whenever it changes: the chosen option's value for a single select, the full array of selected values when `isMulti`. It has to be the *next* selection rather than the option that was just touched, otherwise a controlled parent has nothing to store. It is always the **value**, never the DOM event — `e.target.value` is a compile error. The parameter is typed rather than left `any` so a DOM-shaped handler fails to build instead of failing silently at runtime. Declared with method syntax on purpose. Method parameters are compared bivariantly, so a single-select caller can still pass a plain `(value: string) => void` (arrays only ever occur when `isMulti`) while a `(e: ChangeEvent) => void` stays rejected — an event is unrelated to `string | string[]` in both directions. Writing this as a property would force every single-select consumer to narrow a union that their Select can never produce.Source
shapeShape
"square""rounded""pill""default"
'default'Shape preset for the component.Source
variantVariant
"outline""default""none"
'default'Visual treatment of the component.Source
viewsSelectStyles{ text: {}, icon: {}, dropDown: {}, selectBox: {}, label: {}, helperText: {}, }Style overrides for the named internal parts.Source
sizeSize
"sm""md""lg""xs""xl"
'md'Size preset for the component.Source
shadowViewProps | Shadow | Elevation{}Shadow or elevation styling.Source
isScrollableboolean—See the type and source declaration for this property.Source
Common inherited styling props (7)

Scroll horizontally to see every column.

Select inherited
PropTypeDefaultDescription
onClickany—Called when the user activates the component.
mediaRecord<string, CssProps>—See the type and source declaration for this property.
askeyof JSX.IntrinsicElements
"symbol""object""slot""style""title""pattern""form""animate""clipPath""filter""marker""mask""a""abbr""address""area""article""aside""audio""b""base""bdi""bdo""big""blockquote""body""br""button""canvas""caption""center""cite""code""col""colgroup""data""datalist""dd""del""details""dfn""dialog""div""dl""dt""em""embed""fieldset""figcaption""figure""footer""h1""h2""h3""h4""h5""h6""head""header""hgroup""hr""html""i""iframe""img""input""ins""kbd""keygen""label""legend""li""link""main""map""mark""menu""menuitem""meta""meter""nav""noindex""noscript""ol""optgroup""option""output""p""param""picture""pre""progress""q""rp""rt""ruby""s""samp""search""script""section""select""small""source""span""strong""sub""summary""sup""table""template""tbody""td""textarea""tfoot""th""thead""time""tr""track""u""ul""var""video""wbr""webview""svg""animateMotion""animateTransform""circle""defs""desc""ellipse""feBlend""feColorMatrix""feComponentTransfer""feComposite""feConvolveMatrix""feDiffuseLighting""feDisplacementMap""feDistantLight""feDropShadow""feFlood""feFuncA""feFuncB""feFuncG""feFuncR""feGaussianBlur""feImage""feMerge""feMergeNode""feMorphology""feOffset""fePointLight""feSpecularLighting""feSpotLight""feTile""feTurbulence""foreignObject""g""image""line""linearGradient""metadata""mpath""path""polygon""polyline""radialGradient""rect""set""stop""switch""text""textPath""tspan""use""view"
—See the type and source declaration for this property.
themeMode"light" | "dark"
"light""dark"
—See the type and source declaration for this property.
_hoverstring | CssProps—See the type and source declaration for this property.
_activestring | CssProps—See the type and source declaration for this property.
_focusstring | CssProps—See the type and source declaration for this property.

For shared layout, color, and responsive properties, read Styling & composition and Responsive layouts. Additional native element attributes depend on the target platform.

Usage guidance

  • Give controls a visible label or an accessible name, and verify keyboard interaction. See Accessibility.
  • For controlled inputs, update the value from the callback shown in the props table. Keep application state in your component or form library.
  • These previews run in the browser. Check React Native setup for platform requirements and differences.
Browse documentation source