# Multi select > `MultiSelect` is similar to [`Select`](select.md), except user can choose multiple options. [Theme](../source/components/multi-select/theme.ts) | [Example code](../examples/multi-select.tsx) ## Usage `MultiSelect` is an uncontrolled component. You can listen to value changes via `onChange` prop. ```tsx import React, {useState} from 'react'; import {render, Box, Text} from 'ink'; import {MultiSelect} from '@inkjs/ui'; function Example() { const [value, setValue] = useState([]); return ( Selected values: {value.join(', ')} ); } render(); ``` ### Default value Default value can be set via `defaultValue` prop. ```tsx import React, {useState} from 'react'; import {render, Box, Text} from 'ink'; import {MultiSelect} from '@inkjs/ui'; function Example() { const [value, setValue] = useState(['green']); return ( Selected values: {value.join(', ')} ); } render(); ``` ### Submit on enter When you're only looking for the final value when user presses enter, you can use `onSubmit` instead of `onChange` prop. ```tsx import React, {useState} from 'react'; import {render, Box, Text} from 'ink'; import {MultiSelect} from '@inkjs/ui'; function Example() { const [value, setValue] = useState([]); return ( Selected values: {value.join(', ')} ); } render(); ``` ### Disabled When there are two or more selects, only one should be receiving user input at a time, while others should be disabled via `isDisabled` prop. ```tsx import React, {useState} from 'react'; import {render, Box, Text} from 'ink'; import {MultiSelect} from '@inkjs/ui'; const options = [ { label: 'Red', value: 'red', }, { label: 'Green', value: 'green', }, { label: 'Yellow', value: 'yellow', }, { label: 'Blue', value: 'blue', }, { label: 'Magenta', value: 'magenta', }, { label: 'Cyan', value: 'cyan', }, { label: 'White', value: 'white', }, ]; function Example() { const [activeInput, setActiveInput] = useState('primary'); const [primaryColors, setPrimaryColors] = useState([]); const [secondaryColors, setSecondaryColors] = useState([]); return ( { setActiveInput('secondary'); }} /> Primary colors: {primaryColors.join(', ')} { setActiveInput('none'); }} /> Secondary colors: {secondaryColors.join(', ')} ); } render(); ``` ## Props ### isDisabled Type: `boolean`\ Default: `false` When disabled, user input is ignored. ### visibleOptionCount Type: `number`\ Default: `5` Number of visible options. ### highlightText Type: `string` Highlight text in option labels. ### options Type: `Array<{ label: string; value: string; }>` Options. ### defaultValue Type: `string[]` Default value. ### onChange(value) Type: `Function` Callback when selected options change. #### value Type: `string[]` Values of selected options. ### onSubmit(value) Type: `Function` Callback when user presses enter. #### value Type: `string[]` Value of selected options.