tuil
ReferenceComponentsForms and controls

MultiSelect

MultiSelect component API, behavior, and executable example.

View rawEdit

Loading executable example…

API and events

Connect semantic terminal controls to typed form state, validation, descriptions, errors, hints, and submission.

export function MultiSelect<T extends string>({
  options,
  value,
  defaultValue,
  onValueChange,
  field: adaptedField,
  validators,
  onBlur,
  maxSelected,
  placeholder = "Select…",
  autoFocus,
  disabled = false,
  readOnly = false,
  ...props
}: MultiSelectProps<T>): ReactNode;

Props, functions, and events

MemberTypeRequiredDescriptionRelated types
valuereadonly T[] | undefinedNoThe value member uses the readonly T[] | undefined contract.
defaultValuereadonly T[] | undefinedNoThe defaultValue member uses the readonly T[] | undefined contract.
onValueChange((value: readonly T[]) => void | Promise<void>) | undefinedNoThe onValueChange member uses the ((value: readonly T[]) => void | Promise<void>) | undefined contract.
fieldAdaptedTanStackField<readonly T[]> | undefinedNoThe field member uses the AdaptedTanStackField<readonly T[]> | undefined contract.AdaptedTanStackField
validatorsFieldValidators<readonly T[]> | undefinedNoThe validators member uses the FieldValidators<readonly T[]> | undefined contract.FieldValidators
onBlur(() => void | Promise<void>) | undefinedNoThe onBlur member uses the (() => void | Promise<void>) | undefined contract.
maxSelectednumber | undefinedNoThe maxSelected member uses the number | undefined contract.
optionsreadonly SelectOption<T>[]YesThe options member uses the readonly SelectOption<T>[] contract.
placeholderstring | undefinedNoThe placeholder member uses the string | undefined contract.
searchableboolean | undefinedNoThe searchable member uses the boolean | undefined contract.
autoFocusboolean | undefinedNoThe autoFocus member uses the boolean | undefined contract.
variantstring | undefinedNoThe variant member uses the string | undefined contract.
size"sm" | "md" | "lg" | undefinedNoThe size member uses the "sm" | "md" | "lg" | undefined contract.
unstyledboolean | undefinedNoThe unstyled member uses the boolean | undefined contract.
classNamestring | undefinedNoThe className member uses the string | undefined contract.
layoutPartial<Omit<LayoutNodeInput, "id" | "children" | "semantics">> | undefinedNoThe layout member uses the Partial<Omit<LayoutNodeInput, "id" | "children" | "semantics">> | undefined contract.
idstring | undefinedNoThe id member uses the string | undefined contract.
testIdstring | undefinedNoThe testId member uses the string | undefined contract.
roleSemanticRole | undefinedNoThe role member uses the SemanticRole | undefined contract.SemanticRole
labelstring | undefinedNoThe label member uses the string | undefined contract.
descriptionstring | undefinedNoThe description member uses the string | undefined contract.
disabledboolean | undefinedNoThe disabled member uses the boolean | undefined contract.
readOnlyboolean | undefinedNoThe readOnly member uses the boolean | undefined contract.
selectedboolean | undefinedNoThe selected member uses the boolean | undefined contract.
checkedboolean | undefinedNoThe checked member uses the boolean | undefined contract.
expandedboolean | undefinedNoThe expanded member uses the boolean | undefined contract.
valueTextstring | undefinedNoThe valueText member uses the string | undefined contract.
slotsPartial<SlotComponents<&#123; root: import("ink").BoxProps; indicator: import("ink").TextProps; list: import("ink").BoxProps; option: import("ink").TextProps; empty: import("ink").TextProps; &#125;>> | undefinedNoThe slots member uses the Partial<SlotComponents<&#123; root: import("ink").BoxProps; indicator: import("ink").TextProps; list: import("ink").BoxProps; option: import("ink").TextProps; empty: import("ink").TextProps; &#125;>> | undefined contract.BoxProps, SlotComponents, TextProps
slotPropsPartial<SlotProps<&#123; root: import("ink").BoxProps; indicator: import("ink").TextProps; list: import("ink").BoxProps; option: import("ink").TextProps; empty: import("ink").TextProps; &#125;, object>> | undefinedNoThe slotProps member uses the Partial<SlotProps<&#123; root: import("ink").BoxProps; indicator: import("ink").TextProps; list: import("ink").BoxProps; option: import("ink").TextProps; empty: import("ink").TextProps; &#125;, object>> | undefined contract.BoxProps, SlotProps, TextProps

Controls expose onValueChange, onSubmit, focus, selection, and validation callbacks.

Callback props run after the documented input is accepted. Callbacks are not cancellable unless their return type or description states otherwise.

Interaction and capabilities

Text controls edit directly; choice controls use arrows and Space or Enter; Form coordinates validation and submission.

The published manifest records keyboard, focus, pointer, theme, terminal, semantic, event, and dependency requirements.

Complete import

import { MultiSelect } from "@/components/tuil/forms/controls";

On this page