Components
Select Sheet
A bottom sheet based select component, ideal for mobile interfaces, with support for single and multiple selections, searching, and infinite scrolling.
Demo
Code
Single Select
Favorite Framework
Multi Select (Max 3)
Tech Stack
Installation
Usage
Single Select
Multi Select
Searchable
Infinite Loading
For large datasets, you can implement infinite loading using the `onLoadMore`, `hasMore`, and `isLoading` props.
Trigger Variants & Sizes
With Error and Disabled States
API Reference
SelectSheet
| Prop | Type | Default | Description |
|---|---|---|---|
| `options` | `SelectOption[]` | Required | List of options (`{ label, value, ... }`) |
| `value` | `string | number` | — | Selected value |
| `onValueChange` | `function` | — | Callback when value changes |
| `placeholder` | `string` | `'Select...'` | Placeholder text for trigger |
| `label` | `string` | — | Input label displayed above |
| `error` | `string` | — | Error message to display |
| `disabled` | `boolean` | `false` | Disable the select |
| `variant` | `'outline' | 'underline'` | `'outline'` | Visual variant of the trigger |
| `size` | `'sm' | 'md' | 'lg'` | `'md'` | Size of the trigger |
| `className` | `string` | — | Additional wrapper classes |
| `title` | `string` | `'Select an option'` | Sheet header title |
| `description` | `string` | — | Sheet header description |
| `snapPoints` | `string[]` | `['70%']` | Sheet snap points |
| `searchable` | `boolean` | `false` | Enable search bar |
| `searchPlaceholder` | `string` | `'Search...'` | Search input placeholder |
| `onSearch` | `(query) => void` | — | Callback when search changes |
| `emptyMessage` | `string` | `'No options found'` | Custom empty state message |
| `onLoadMore` | `() => void` | — | Callback for infinite scrolling |
| `hasMore` | `boolean` | `false` | Whether more items are available |
| `isLoading` | `boolean` | `false` | Show loading indicator at footer |
| `name` | `string` | — | Input name for form integration |
MultiSelectSheet
Inherits all properties from `SelectSheet`, but adjusts the value shape and adds multiple-selection features:
| Prop | Type | Default | Description |
|---|---|---|---|
| `value` | `(string | number)[]` | `[]` | Array of selected values |
| `onValueChange` | `function` | — | Callback with selected array |
| `maxSelection` | `number` | — | Maximum allowed selections |
| `showCount` | `boolean` | `true` | Show selected count in sheet header |