# Tree Select

Hierarchical tree selection



<ComponentPreview base="ink" name="tree-select-demo" />

Installation [#installation]

<CodeTabs>
  <TabsList>
    <TabsTrigger value="cli">
      Command
    </TabsTrigger>

    <TabsTrigger value="manual">
      Manual
    </TabsTrigger>
  </TabsList>

  <TabsContent value="cli">
    ```bash
    npx shadcn@latest add @termcn/tree-select
    ```
  </TabsContent>

  <TabsContent value="manual">
    <Steps>
      <Step>
        Copy and paste the following code into your project.
      </Step>

      <ComponentSource base="ink" name="tree-select" title="components/ui/tree-select.tsx" />

      <Step>
        Update the import paths to match your project setup.
      </Step>
    </Steps>
  </TabsContent>
</CodeTabs>

Usage [#usage]

```tsx
import { TreeSelect } from "@/components/ui/tree-select";
```

```tsx
<TreeSelect
  label="Select a file"
  nodes={[
    {
      value: "src",
      label: "src",
      children: [
        { value: "index.ts", label: "index.ts" },
        { value: "utils.ts", label: "utils.ts" },
      ],
    },
    { value: "README.md", label: "README.md" },
  ]}
  onChange={(value) => {}}
/>
```

API Reference [#api-reference]

TreeSelect [#treeselect]

| Prop                | Type                  | Default    |
| ------------------- | --------------------- | ---------- |
| `nodes`             | `TreeSelectNode<T>[]` | `required` |
| `value`             | `T`                   | -          |
| `onChange`          | `(value: T) => void`  | -          |
| `onSubmit`          | `(value: T) => void`  | -          |
| `label`             | `string`              | -          |
| `expandedByDefault` | `boolean`             | `false`    |
