diff --git a/packages/headless/package.json b/packages/headless/package.json index 97ecfbd4c03..97d663f1487 100644 --- a/packages/headless/package.json +++ b/packages/headless/package.json @@ -20,6 +20,10 @@ "import": "./dist/primitives/popover/index.js", "types": "./dist/primitives/popover/index.d.ts" }, + "./select": { + "import": "./dist/primitives/select/index.js", + "types": "./dist/primitives/select/index.d.ts" + }, "./dialog": { "import": "./dist/primitives/dialog/index.js", "types": "./dist/primitives/dialog/index.d.ts" diff --git a/packages/headless/src/primitives/select/README.md b/packages/headless/src/primitives/select/README.md new file mode 100644 index 00000000000..21cb4813135 --- /dev/null +++ b/packages/headless/src/primitives/select/README.md @@ -0,0 +1,163 @@ +# Select + +A dropdown select component with keyboard navigation, typeahead, and optional item-to-trigger alignment. Replaces native ` + + + + + + + + + + +; +``` + +### Controlled + +```tsx +const [value, setValue] = useState('apple'); + +; +``` + +### With `items` for SSR label resolution + +The `items` prop allows label resolution before options mount (useful for server rendering or deferred lists): + +```tsx +const items = [ + { value: 'apple', label: 'Apple' }, + { value: 'banana', label: 'Banana' }, +]; + +; +``` + +### Disable item-to-trigger alignment + +By default, the selected option visually aligns with the trigger. Disable this for standard dropdown positioning: + +```tsx + +``` + +## Parts + +| Part | Default Element | Description | +| ------------------- | --------------- | ------------------------------------------ | +| `Select` | — | Root context provider | +| `Select.Trigger` | `