- src
- components
- button.tsx
- card.tsx
- tree-view.tsx
- lib
- styles
- README.md
- package.json
Instalación
npx logic2b@next add tree-viewUso
import { TreeItem, TreeView } from "@/components/ui/tree-view"
<TreeView aria-label="Archivos" defaultExpanded={["src"]}>
<TreeItem value="src" label="src">
<TreeItem value="button" label="button.tsx" />
<TreeItem value="card" label="card.tsx" />
</TreeItem>
<TreeItem value="readme" label="README.md" />
</TreeView>
Anidar elementos TreeItem convierte un elemento en una rama. El chevrón, el
estado aria-expanded y la sangría se derivan de forma automática.
Ejemplos
Controlado
Gestiona externamente la expansión y la selección: expande o contrae todo desde fuera y reacciona al valor seleccionado.
- workspace
- apps
- packages
Selected: none
Accesibilidad
- Sigue el patrón Tree View de WAI-ARIA.
- Flecha arriba y Flecha abajo recorren los elementos visibles; Inicio y Fin saltan al primero o al último.
- Flecha derecha expande una rama contraída y después entra en ella; Flecha izquierda contrae una rama expandida o lleva al nivel padre.
- Intro o Espacio seleccionan el elemento con foco y alternan las ramas.
- Los elementos exponen
aria-level,aria-expandedyaria-selected; los desactivados usanaria-disabledy se omiten durante la navegación.
Playground interactivo
Edita las propiedades del componente y revisa el JSX exacto antes de copiarlo. La vista previa se carga solo cuando esta sección entra en pantalla.
<TreeView
defaultExpanded={["packages"]}
defaultSelected="registry"
aria-label="Repository files"
>
<TreeItem
value="packages"
label="packages"
>
<TreeItem
value="registry"
label="registry"
/>
<TreeItem
value="web"
label="web"
/>
</TreeItem>
<TreeItem
value="roadmap"
label="ROADMAP.md"
/>
</TreeView>- packages
- registry
- web
- ROADMAP.md
Referencia de API
Generada a partir de las exportaciones públicas de TypeScript en src/ui/tree-view.tsx. Las descripciones técnicas conservan el texto canónico del código fuente.
TreeView
ComponenteProps: Omit<React.ComponentProps<"ul">, "onSelect"> & { expanded?: string[] defaultExpanded?: string[] onExpandedChange?: (expanded: string[]) => void selected?: string | null defaultSelected?: string | null onSelectedChange?: (selected: string | null) => void }| Propiedad | Tipo | Obligatoria | Valor predeterminado | Descripción |
|---|---|---|---|---|
expanded | string[] | No | — | — |
defaultExpanded | string[] | No | — | — |
onExpandedChange | (expanded: string[]) => void | No | — | — |
selected | string | null | No | — | — |
defaultSelected | string | null | No | — | — |
onSelectedChange | (selected: string | null) => void | No | — | — |
TreeItem
ComponenteProps: Omit<React.ComponentProps<"li">, "onSelect"> & { value: string label: React.ReactNode icon?: React.ReactNode disabled?: boolean }| Propiedad | Tipo | Obligatoria | Valor predeterminado | Descripción |
|---|---|---|---|---|
value | string | Sí | — | — |
label | React.ReactNode | Sí | — | — |
icon | React.ReactNode | No | — | — |
disabled | boolean | No | — | — |
Contrato de accesibilidad
Comportamiento legible por máquinas y responsabilidades de quien integra tree-view. Los detalles normativos conservan el texto canónico del registro.
- Soporte
- Comportamiento implementado
- Patrón
- tree
| Teclas | Comportamiento |
|---|---|
| ArrowUp ArrowDown ArrowLeft ArrowRight | Move within the composite control. |
| Home End | Move to the first or last visible node. |
| Enter Space | Select or activate the focused node. |
Semántica incorporada
- Uses tree/treeitem/group roles with aria-expanded, aria-selected, level and set position metadata.
Responsabilidades de integración
- Give the tree a label and ensure node actions are distinguishable from expand/collapse.