Select
import {Select} from "@qualcomm-ui/react/select"Overview
- Each select uses the
selectCollectionhelper to manage the list of options. This creates aListCollectioninstance, documented below.
Examples
Simple
The simple API provides a standalone component with built-in layout.
<Select
className="w-48"
collection={cityCollection}
controlProps={{"aria-label": "City"}}
placeholder="Select a city"
/>Composite
Build with the composite API for granular control. This API requires you to provide each subcomponent, but gives you full control over the structure and layout.
<Select.Root
className="w-48"
collection={cityCollection}
placeholder="Select a city"
>
<Select.Label>City</Select.Label>
<Select.Control>
<Select.ValueText />
<Select.ClearTrigger />
<Select.Indicator />
<Select.ErrorIndicator />
</Select.Control>
<Select.HiddenSelect />
<Portal>
<Select.Positioner>
<Select.Content>
{cityCollection.items.map((item) => {
const label = cityCollection.stringifyItem(item)
const value = cityCollection.getItemValue(item)
return (
<Select.Item key={value} item={item}>
<Select.ItemText>{label}</Select.ItemText>
<Select.ItemIndicator />
</Select.Item>
)
})}
</Select.Content>
</Select.Positioner>
</Portal>
</Select.Root>ARIA Label
The Select's label is automatically associated with the input element for accessibility. If you omit the label, you should provide an aria-label to the control to give your select an accessible name.
<Select
className="w-48"
collection={cityCollection}
controlProps={{"aria-label": "City"}}
placeholder="Select a city"
/>Content Width
The positioning.sameWidth property controls whether the width of the select content matches the width of the trigger element. The default is true.
<Select
className="w-48"
collection={cityCollection}
controlProps={{"aria-label": "City"}}
placeholder="Select a city"
positioning={{sameWidth: false}}
/>Trigger Icon
Use the icon prop to add an icon to the start of the trigger element.
<Select
className="w-48"
collection={cityCollection}
controlProps={{"aria-label": "City"}}
icon={MapPin}
placeholder="Select a city"
/>Items as Objects
The items prop can be an array of objects. Use the itemLabel and itemValue properties on the selectCollection to specify the label and value of each item.
const cityCollection = selectCollection({
itemLabel: (item) => item.name,
items: [
{name: "San Diego", value: "SD"},
{name: "Nashville", value: "NV"},
{name: "Denver", value: "DV"},
{name: "Miami", value: "MI"},
{name: "Las Vegas", value: "LV"},
{name: "New York City", value: "NYC"},
{name: "San Francisco", value: "SF"},
],
itemValue: (item) => item.value,
})Sizes
This component supports three size options to accommodate different layout densities and design requirements.
The available sizes are sm, md, and lg. The default size is md.
Content Height
Change the height of the item container by adjusting the style of the Content element.
<Select
className="w-48"
collection={cityCollection}
contentProps={{style: {maxHeight: 240}}}
controlProps={{"aria-label": "City"}}
placeholder="Select a city"
positioning={{sameWidth: true}}
/>Multiple Selection
Use the multiple prop to allow multiple selections.
<Select
className="w-72"
collection={cityCollection}
controlProps={{"aria-label": "City"}}
multiple
placeholder="Select a city"
/>Controlled State
Set the initial value using the defaultValue prop, or use value and onValueChange to control the value manually. These props follow our controlled state pattern.
<Select
className="w-48"
collection={cityCollection}
controlProps={{"aria-label": "City"}}
onValueChange={setValue}
placeholder="Select a city"
value={value}
/>States
The following shows how the Select component appears in each interactive state.
<Select
className="w-48"
collection={cityCollection}
defaultValue={["San Diego"]}
disabled
label="Disabled"
/>
<Select
className="w-48"
collection={cityCollection}
defaultValue={["San Diego"]}
label="Read only"
readOnly
/>
<Select
className="w-48"
collection={cityCollection}
defaultValue={["San Diego"]}
errorText="Invalid"
invalid
label="Invalid"
/>Error Text and Indicator
Error messages are displayed using two props:
The error text and indicator will only render when invalid is true.
<Select
className="w-48"
collection={cityCollection}
controlProps={{"aria-label": "City"}}
errorText="You must select a city"
invalid={!value.length}
onValueChange={setValue}
placeholder="Select a city"
value={value}
/>Within Dialog
To use the Select within a Dialog, you need to avoid portalling the Select.Positioner to the document's body. To do this using the simple API, set portalProps.disabled to true:
Within Popover
Like with the Dialog, you need to avoid portalling the Select.Positioner to the document's body:
Forms
Choose the form library that fits your needs—we've built examples with React Hook Form and Tanstack Form to get you started.
React Hook Form
Use React Hook Form to handle the input state and validation. ArkType works great for schema validation if you need it.
import type {ReactElement} from "react"
import {type} from "arktype"
import {Controller, type SubmitHandler, useForm} from "react-hook-form"
import {selectCollection} from "@qualcomm-ui/core/select"
import {Button} from "@qualcomm-ui/react/button"
import {Select} from "@qualcomm-ui/react/select"
import {createToaster, Toaster} from "@qualcomm-ui/react/toast"
const cityCollection = selectCollection({
items: [
"San Diego",
"Nashville",
"Denver",
"Miami",
"Las Vegas",
"New York City",
"San Francisco",
],
})
const valueSchema = type({
city: type("string[] > 0").configure({
message: "At least one city must be selected",
}),
})
type ValueSchema = typeof valueSchema.infer
const toaster = createToaster({
overlap: true,
placement: "bottom-end",
})
export default function Demo(): ReactElement {
const {
control,
formState: {isSubmitting},
handleSubmit,
setError,
} = useForm<ValueSchema>({
defaultValues: {
city: [],
},
})
const handleFormSubmit: SubmitHandler<ValueSchema> = async (data) => {
const validation = valueSchema(data)
if (validation instanceof type.errors) {
validation.forEach((error) => {
const field = error.path?.[0] as keyof ValueSchema
if (field) {
setError(field, {
message: error.message,
})
}
})
return
}
toaster.create({
label: "Form submitted",
type: "success",
})
}
return (
<>
<Toaster toaster={toaster} />
<form
className="w-48"
noValidate
onSubmit={handleSubmit(handleFormSubmit)}
>
<Controller
control={control}
name="city"
render={({field: {onChange, ...fieldProps}, fieldState: {error}}) => (
<Select
className="w-full"
collection={cityCollection}
errorText={error?.message}
invalid={!!error}
label="City"
onValueChange={(valueStrings) => onChange(valueStrings)}
placeholder="Select a city"
required
{...fieldProps}
/>
)}
/>
<div className="mt-2 flex w-full justify-end">
<Button
disabled={isSubmitting}
emphasis="primary"
type="submit"
variant="fill"
>
Submit
</Button>
</div>
</form>
</>
)
}
Tanstack Form
Tanstack Form handles validation with its built-in validators.
import type {ReactElement} from "react"
import {useForm} from "@tanstack/react-form"
import {selectCollection} from "@qualcomm-ui/core/select"
import {Button} from "@qualcomm-ui/react/button"
import {Select} from "@qualcomm-ui/react/select"
import {createToaster, Toaster} from "@qualcomm-ui/react/toast"
const cityCollection = selectCollection({
items: [
"San Diego",
"Nashville",
"Denver",
"Miami",
"Las Vegas",
"New York City",
"San Francisco",
],
})
const toaster = createToaster({
overlap: true,
placement: "bottom-end",
})
export default function Demo(): ReactElement {
const form = useForm({
defaultValues: {
city: [] as string[],
},
onSubmit: async () => {
toaster.create({
label: "Form submitted",
type: "success",
})
},
})
return (
<>
<Toaster toaster={toaster} />
<form
className="w-48"
noValidate
onSubmit={(e) => {
e.preventDefault()
e.stopPropagation()
form.handleSubmit()
}}
>
<form.Field
name="city"
validators={{
onChange: ({value}) =>
value.length === 0
? "At least one city must be selected"
: undefined,
}}
>
{(field) => (
<Select
className="w-full"
collection={cityCollection}
errorText={field.state.meta.errors[0]}
invalid={field.state.meta.errors.length > 0}
label="City"
onValueChange={field.handleChange}
placeholder="Select a city"
required
value={field.state.value}
/>
)}
</form.Field>
<div className="mt-2 flex w-full justify-end">
<Button
disabled={form.state.isSubmitting}
emphasis="primary"
type="submit"
variant="fill"
>
Submit
</Button>
</div>
</form>
</>
)
}
Tanstack form also supports ArkType.
API
<Select>
The simple select extends the Select.Root component with the following props:
| Prop | Type | Default |
|---|---|---|
When true, renders a clear button that resets the input value on click.
The button only appears when the input has a value. | boolean | true |
Props applied to the clear trigger element. | ||
Props applied to the content element. | ||
Props applied to the trigger element. | ||
Props applied to the error indicator element. | ||
Props applied to the error text element. | ||
Optional hint describing the element. This element is automatically
associated with the component's input element for accessibility. | ||
Props applied to the label element. | ||
Props applied to the indicator element. | ||
Optional label describing the element. Recommended. This element is
automatically associated with the component's input element for
accessibility. | ||
Props applied to the label element. | ||
Props applied to the portal element. | PortalProps | |
Props applied to the positioner element. | ||
Props applied to the select element. | ||
Props applied to the value text element. |
booleantrue, renders a clear button that resets the input value on click.
The button only appears when the input has a value.PortalPropsComposite API
This section describes the elements of the Select's composite API.
<Select.Root>
| Prop | Type | Default |
|---|---|---|
The item collection | ||
Whether the select should close after an item is selected | boolean | true |
The initial value of the highlighted item when opened.
Use when you don't need to control the highlighted value of the select. | string | |
Whether the select's open state is controlled by the user | boolean | |
The initial default value of the select when rendered.
Use when you don't need to control the value of the select. | string[] | |
Whether the value can be cleared by clicking the selected item. This is only applicable for single selection. | boolean | |
The document's text/writing direction. | 'ltr' | 'rtl' | 'ltr' |
Whether the select is disabled | boolean | |
The associate form of the underlying select. | string | |
A root node to correctly resolve document in custom environments. i.e.,
Iframes, Electron. | () => | |
The controlled key of the highlighted item | string | |
| LucideIcon | ||
id attribute. If
omitted, a unique identifier will be automatically generated for accessibility. | string | |
The ids of the elements that are associated with the select. These will be
automatically generated if omitted. | Partial< | |
Whether to synchronize the present change immediately or defer it to the next
frame | boolean | |
Whether the select is invalid | boolean | |
When true, the component will not be rendered in the DOM until it becomes
visible or active. | boolean | false |
Whether to loop the keyboard navigation through the options | boolean | false |
Whether to allow multiple selection | boolean | false |
The name attribute of the underlying select. | string | |
Function called when the animation ends in the closed state | VoidFunction | |
Function called when the focus is moved outside the component | ( | |
The callback fired when the highlighted item changes. | ( | |
Function called when an interaction happens outside the component | ( | |
Function invoked when the popup opens or closes
| ( | |
Function called when the pointer is pressed down outside the component | ( | |
Function called when an item is selected | ( | |
The callback fired when the selected item changes. | ( | |
Whether the select menu is open | boolean | |
Placeholder text to display when no value is selected. | string | "Select an option" |
The positioning options of the menu. | ||
Whether the node is present (controlled by the user) | boolean | |
Whether the select is read-only | boolean | |
Allows you to replace the component's HTML element with a different tag or component. Learn more | | ReactElement | |
Whether the select is required | boolean | |
Function to scroll to a specific index | (details: { | |
The size of the select and its elements. Governs properties like font size,
item padding, and icon sizes. | | 'sm' | 'md' |
Whether to allow the initial presence animation. | boolean | false |
When true, the component will be completely removed from the DOM when it
becomes inactive or hidden, rather than just being hidden with CSS. | boolean | false |
The controlled keys of the selected items | string[] |
booleanstringbooleanstring[]
booleanThis is only applicable for single selection.
'ltr' | 'rtl'
booleanstring() =>
| Node
| ShadowRoot
| Document
stringstringPartial<
Omit<
{
clearTrigger: string
content: string
control: string
errorText: string
hiddenSelect: string
hint: string
label: string
positioner: string
root: string
},
| 'item'
| 'itemGroupLabel'
| 'itemGroup'
>
>
booleanbooleanbooleanbooleanbooleanstringname attribute of the underlying select.VoidFunction(
event: FocusOutsideEvent,
) => void
(
value: string,
details: {
highlightedIndex: number
highlightedItem: T
},
) => void
(
event: InteractOutsideEvent,
) => void
(
open: boolean,
) => void
- openThe next value of the open state.
(
event: PointerDownOutsideEvent,
) => void
(
value: string,
) => void
(
valueStrings: string[],
details: {items: Array<T>},
) => void
booleanstringbooleanboolean| ReactElement
| ((
props: object,
) => ReactElement)
boolean(details: {
immediate?: boolean
index: number
}) => void
| 'sm'
| 'md'
| 'lg'
booleanbooleanstring[]
<Select.Label>
<label> element by default.| Prop | Type |
|---|---|
id attribute. If
omitted, a unique identifier will be automatically generated for accessibility. | string |
Allows you to replace the component's HTML element with a different tag or component. Learn more | | ReactElement |
string| ReactElement
| ((
props: object,
) => ReactElement)
| Attribute / Property | Value |
|---|---|
className | 'qui-select__label' |
data-disabled | |
data-invalid | |
data-part | 'label' |
data-readonly | |
data-scope | 'select' |
className'qui-select__label'data-disableddata-invaliddata-part'label'data-readonlydata-scope'select'<Select.Control>
<div> element
by default.| Prop | Type |
|---|---|
Allows you to replace the component's HTML element with a different tag or component. Learn more | | ReactElement |
| ReactElement
| ((
props: object,
) => ReactElement)
| Attribute / Property | Value |
|---|---|
className | 'qui-select__control' |
data-disabled | |
data-invalid | |
data-part | 'control' |
data-placeholder-shown | |
data-placement | | 'bottom' |
data-readonly | |
data-scope | 'select' |
data-size | | 'sm' |
data-state | | 'open' |
tabIndex | number |
className'qui-select__control'data-disableddata-invaliddata-part'control'data-placeholder-showndata-placement| 'bottom'
| 'bottom-end'
| 'bottom-start'
| 'left'
| 'left-end'
| 'left-start'
| 'right'
| 'right-end'
| 'right-start'
| 'top'
| 'top-end'
| 'top-start'
data-readonlydata-scope'select'data-size| 'sm'
| 'md'
| 'lg'
data-state| 'open'
| 'closed'
tabIndexnumber<Select.Indicator>
<div> element by default.| Prop | Type | Default |
|---|---|---|
Indicator icon. | | ReactNode | ChevronDown |
Allows you to replace the component's HTML element with a different tag or component. Learn more | | ReactElement |
| ReactNode
| LucideIcon
| ReactElement
| ((
props: object,
) => ReactElement)
| Attribute / Property | Value |
|---|---|
className | 'qui-select__indicator' |
data-disabled | |
data-invalid | |
data-part | 'indicator' |
data-readonly | |
data-scope | 'select' |
data-size | | 'sm' |
data-state | | 'open' |
className'qui-select__indicator'data-disableddata-invaliddata-part'indicator'data-readonlydata-scope'select'data-size| 'sm'
| 'md'
| 'lg'
data-state| 'open'
| 'closed'
<Select.ValueText>
<span> element by default.| Prop | Type |
|---|---|
Allows you to replace the component's HTML element with a different tag or component. Learn more | | ReactElement |
| ReactElement
| ((
props: object,
) => ReactElement)
| Attribute / Property | Value |
|---|---|
className | 'qui-select__value-text' |
data-disabled | |
data-focus | |
data-invalid | |
data-multiple | |
data-part | 'value-text' |
data-scope | 'select' |
data-size | | 'sm' |
className'qui-select__value-text'data-disableddata-focusdata-invaliddata-multipledata-part'value-text'data-scope'select'data-size| 'sm'
| 'md'
| 'lg'
<Select.ClearTrigger>
<button> element by default.| Prop | Type |
|---|---|
id attribute. If
omitted, a unique identifier will be automatically generated for accessibility. | string |
Allows you to replace the component's HTML element with a different tag or component. Learn more | | ReactElement |
string| ReactElement
| ((
props: object,
) => ReactElement)
| Attribute / Property | Value |
|---|---|
className | 'qui-select__clear-trigger' |
data-invalid | |
data-part | 'clear-trigger' |
data-scope | 'select' |
data-size | | 'sm' |
hidden | boolean |
className'qui-select__clear-trigger'data-invaliddata-part'clear-trigger'data-scope'select'data-size| 'sm'
| 'md'
| 'lg'
hiddenboolean<Select.Positioner>
<div> element by
default.| Prop | Type |
|---|---|
id attribute. If
omitted, a unique identifier will be automatically generated for accessibility. | string |
Allows you to replace the component's HTML element with a different tag or component. Learn more | | ReactElement |
string| ReactElement
| ((
props: object,
) => ReactElement)
| Attribute / Property | Value |
|---|---|
className | 'qui-select__positioner' |
data-part | 'positioner' |
data-scope | 'select' |
style |
className'qui-select__positioner'data-part'positioner'data-scope'select'style<Select.Content>
<div> element by default.| Prop | Type |
|---|---|
Allows you to replace the component's HTML element with a different tag or component. Learn more | | ReactElement |
| ReactElement
| ((
props: object,
) => ReactElement)
| Attribute / Property | Value |
|---|---|
className | 'qui-select__content' |
data-activedescendant | string |
data-focus-visible | |
data-part | 'content' |
data-placement | | 'bottom' |
data-scope | 'select' |
data-state | | 'open' |
hidden | boolean |
tabIndex | 0 |
className'qui-select__content'data-activedescendantstringdata-focus-visibledata-part'content'data-placement| 'bottom'
| 'bottom-end'
| 'bottom-start'
| 'left'
| 'left-end'
| 'left-start'
| 'right'
| 'right-end'
| 'right-start'
| 'top'
| 'top-end'
| 'top-start'
data-scope'select'data-state| 'open'
| 'closed'
hiddenbooleantabIndex0<Select.Item>
<div> element by default.| Prop | Type |
|---|---|
item * The item to render | any |
Whether hovering outside should clear the highlighted state | boolean |
Allows you to replace the component's HTML element with a different tag or component. Learn more | | ReactElement |
anyboolean| ReactElement
| ((
props: object,
) => ReactElement)
| Attribute / Property | Value |
|---|---|
className | 'qui-select__item' |
data-disabled | |
data-highlighted | |
data-part | 'item' |
data-scope | 'select' |
data-size | | 'sm' |
data-state | | 'checked' |
data-value | string |
className'qui-select__item'data-disableddata-highlighteddata-part'item'data-scope'select'data-size| 'sm'
| 'md'
| 'lg'
data-state| 'checked'
| 'unchecked'
data-valuestring<Select.ItemIndicator>
<span>
element by default.| Prop | Type | Default |
|---|---|---|
<Icon icon={Check}/> | ||
Allows you to replace the component's HTML element with a different tag or component. Learn more | | ReactElement |
| ReactElement
| ((
props: object,
) => ReactElement)
| Attribute / Property | Value |
|---|---|
data-part | 'item-indicator' |
data-scope | 'select' |
data-state | | 'checked' |
hidden | boolean |
data-part'item-indicator'data-scope'select'data-state| 'checked'
| 'unchecked'
hiddenboolean<Select.ItemText>
| Prop | Type |
|---|---|
Allows you to replace the component's HTML element with a different tag or component. Learn more | | ReactElement |
| ReactElement
| ((
props: object,
) => ReactElement)
| Attribute / Property | Value |
|---|---|
className | 'qui-select__item-text' |
data-disabled | |
data-highlighted | |
data-part | 'item-text' |
data-scope | 'select' |
data-state | | 'checked' |
className'qui-select__item-text'data-disableddata-highlighteddata-part'item-text'data-scope'select'data-state| 'checked'
| 'unchecked'
<Select.HiddenSelect>
<select> element.| Attribute / Property | Value |
|---|---|
className | 'qui-select__hidden-select' |
data-part | 'hidden-select' |
data-scope | 'select' |
style | |
tabIndex | -1 |
className'qui-select__hidden-select'data-part'hidden-select'data-scope'select'styletabIndex-1
<Select.Hint>
<div> element by default.| Prop | Type |
|---|---|
Allows you to replace the component's HTML element with a different tag or component. Learn more | | ReactElement |
| ReactElement
| ((
props: object,
) => ReactElement)
| Attribute / Property | Value |
|---|---|
className | 'qui-input__hint' |
data-disabled | |
data-part | 'hint' |
data-scope | 'select' |
className'qui-input__hint'data-disableddata-part'hint'data-scope'select'<Select.ErrorText>
<div> element by
default.| Prop | Type |
|---|---|
An icon to display next to the error text. | | LucideIcon |
id attribute. If
omitted, a unique identifier will be automatically generated for accessibility. | string |
Allows you to replace the component's HTML element with a different tag or component. Learn more | | ReactElement |
| LucideIcon
| ReactNode
string| ReactElement
| ((
props: object,
) => ReactElement)
| Attribute / Property | Value |
|---|---|
className | 'qui-input__error-text' |
data-part | 'error-text' |
data-scope | 'select' |
hidden | boolean |
className'qui-input__error-text'data-part'error-text'data-scope'select'hiddenboolean<Select.ErrorIndicator>
<div> element
by default.| Prop | Type | Default |
|---|---|---|
lucide-react icon or ReactNode. | | LucideIcon | CircleAlert |
Allows you to replace the component's HTML element with a different tag or component. Learn more | | ReactElement |
| LucideIcon
| ReactNode
| ReactElement
| ((
props: object,
) => ReactElement)
| Attribute / Property | Value |
|---|---|
data-part | 'error-indicator' |
data-scope | 'select' |
hidden | boolean |
data-part'error-indicator'data-scope'select'hiddenbooleanData Structures
ListCollection
The following describes the member variables and methods of the ListCollection class. The Select component uses an instance of this class as input:
const collection = selectCollection({
items: [
// ...
],
})
return <Select collection={collection} />Note that the ListCollection accepts a single generic type parameter, T, which is the type of each list item used in the collection. This can be a string or an object.
Constructor
| Prop | Type |
|---|---|
Function to group items | ( |
Function to sort items | | string[] |
Function to determine if a node is disabled. | ( |
Function to get the item's label. | ( |
The options of the select | | Iterable<T, any, any> |
Function to get the item's unique value. | ( |
(
item: T,
index: number,
) => string
| string[]
| 'desc'
| 'asc'
| ((
a: string,
b: string,
) => number)
(
item: T,
) => boolean
(
item: T,
) => string
| Iterable<T, any, any>
| Readonly<
Iterable<T, any, any>
>
(
item: T,
) => string
| Prop | Type |
|---|---|
Append items to the collection | ( |
Get the item based on its index | ( |
Compare two values | ( |
Copy the collection | (items Array<T>,) => ListCollection<T> |
Filter the collection | ( |
Get the item based on its value | ( |
Get the items based on its values | ( |
Returns the first value in the collection | string |
Whether an item is disabled | ( |
Convert an item to a value | ( |
Returns the next value in the collection | ( |
Returns the previous value in the collection | ( |
Get the range of values between two values | ( |
Returns all the values in the collection | ( |
Group items by the groupBy function provided in options
Returns an array of [groupKey, items] tuples | () => Array< |
Whether the collection has a value | ( |
Whether the collection has an item | ( |
Get the index of an item based on its key | ( |
Insert items at a specific index | ( |
Insert items after a specific value | ( |
Insert items before a specific value | ( |
Check if the collection is equal to another collection
| ( |
The items in the collection | Array<T> |
Returns the last value in the collection | string |
Move an item to a specific index | ( |
Move items after a specific value | ( |
Move items before a specific value | ( |
Prepend items to the collection | ( |
Remove items from the collection | ( |
Reorder items | ( |
Search for a value based on a query | ( |
Function to update the collection items | ( |
Returns the number of items in the collection | number |
Sort the values based on their index | ( |
Convert a value to a string | ( |
Convert an item to a string | ( |
Convert an array of items to a string | ( |
Convert an array of items to a string | (value: string[],separator string,) => string |
Convert the collection to a JSON object | () => { |
Convert the collection to a string | () => string |
Update an item in the collection | ( |
Update an item in the collection if it exists, otherwise append it | ( |
(
items: Array<T>,
) => ListCollection<T>
(
index: number,
) => T
(
a: string,
b: string,
) => -1 | 0 | 1
(items Array<T>,) => ListCollection<T>
(
fn: (
itemString: string,
index: number,
item: T,
) => boolean,
) => ListCollection<T>
(
value: string,
) => T
(
values: string[],
) => Array<T>
string(
T,
) => boolean
(
T,
) => string
(
value: string,
step: number,
clamp: boolean,
) => string
(
value: string,
step: number,
clamp: boolean,
) => string
(
from: string,
to: string,
) => string[]
(
items: Array<T>,
) => string[]
() => Array<
[string, Array<T>]
>
(
value: string,
) => boolean
(
T,
) => boolean
(
value: string,
) => number
(
index: number,
items: Array<T>,
) => ListCollection<T>
(
value: string,
items: Array<T>,
) => ListCollection<T>
(
value: string,
items: Array<T>,
) => ListCollection<T>
(
any,
) => boolean
- itemsThe items in the collection
Array<T>
string(
value: string,
toIndex: number,
) => ListCollection<T>
(
value: string,
values: string[],
) => ListCollection<T>
(
value: string,
values: string[],
) => ListCollection<T>
(
items: Array<T>,
) => ListCollection<T>
(
itemsOrValues: Array<
string | T
>,
) => ListCollection<T>
(
fromIndex: number,
toIndex: number,
) => ListCollection<T>
(
queryString: string,
{
currentValue: string
state: {
keysSoFar: string
timer: number
}
timeout?: number
},
) => string
(
items: Array<T>,
) => ListCollection<T>
number(
values: string[],
) => string[]
(
value: string,
) => string
(
T,
) => string
(
items: Array<T>,
separator: string,
) => string
(value: string[],separator string,) => string
() => {
first: string
last: string
size: number
}
() => string
(
value: string,
T,
) => ListCollection<T>
(
value: string,
T,
mode: 'append' | 'prepend',
) => ListCollection<T>
SelectPositioningOptions
| Prop | Type | Default |
|---|---|---|
The minimum padding between the arrow and the floating element's corner. | number | 4 |
The overflow boundary of the reference element | () => | |
Whether the popover should fit the viewport. | boolean | |
Whether to flip the placement when the floating element overflows the boundary. | | boolean | true |
Function that returns the anchor rect | ( | |
The main axis offset or gap between the reference and floating element | number | 2 |
Whether the popover should be hidden when the reference element is detached | boolean | |
Options to activate auto-update listeners | | boolean | true |
The offset of the floating element | { | |
Function called when the placement is computed | ( | |
Function called when the floating element is positioned or not | (data: { | |
The virtual padding around the viewport edges to check for overflow | number | |
Whether the floating element can overlap the reference element | boolean | false |
The initial placement of the floating element | | 'bottom' | 'bottom-start' |
Whether to make the floating element same width as the reference element | boolean | true |
The secondary axis offset or gap between the reference and floating elements | number | |
Whether the popover should slide when it overflows. | boolean | |
The strategy to use for positioning | | 'absolute' | 'absolute' |
A callback that will be called when the popover needs to calculate its
position. | (data: { |
number() =>
| 'clippingAncestors'
| Element
| Array<Element>
| {
height: number
width: number
x: number
y: number
}
boolean| boolean
| Array<
| 'bottom'
| 'bottom-end'
| 'bottom-start'
| 'left'
| 'left-end'
| 'left-start'
| 'right'
| 'right-end'
| 'right-start'
| 'top'
| 'top-end'
| 'top-start'
>
(
element:
| HTMLElement
| VirtualElement,
) => {
height?: number
width?: number
x?: number
y?: number
}
numberboolean| boolean
| {
ancestorResize?: boolean
ancestorScroll?: boolean
animationFrame?: boolean
elementResize?: boolean
layoutShift?: boolean
}
{
crossAxis?: number
mainAxis?: number
}
(
data: ComputePositionReturn,
) => void
(data: {
placed: boolean
}) => void
numberboolean| 'bottom'
| 'bottom-end'
| 'bottom-start'
| 'left'
| 'left-end'
| 'left-start'
| 'right'
| 'right-end'
| 'right-start'
| 'top'
| 'top-end'
| 'top-start'
booleannumberboolean| 'absolute'
| 'fixed'
(data: {
updatePosition: () => Promise<void>
}) => void | Promise<void>
<div>element by default.