Plegable
Un conjunto de botones y paneles para árboles de archivos, ajustes avanzados y secciones «ver más», con ese estilo neobrutalista de bordes y sombras.
"use client"
import * as React from "react"El colapsable es el hermano de sección única del acordeón: un disparador, un panel, abierto o cerrado. Está construido sobre el componente Base UI Collapsible y sigue la receta neobrutalista: bordes gruesos, sombras duras y tipografía contundente.
Úsalo cuando:
- Árboles de archivos y navegación anidada — anida colapsables para expandir carpetas (mira el ejemplo del árbol de archivos más abajo).
- Ajustes avanzados — deja a la vista las opciones habituales y pliega el resto tras un conmutador.
- Contenido de «ver más» — registros de cambios largos, listas truncadas, detalles opcionales en páginas densas.
Instalación#
pnpm dlx shadcn@latest add https://neobrutalism.com/r/base/collapsible.jsonnpx shadcn@latest add https://neobrutalism.com/r/base/collapsible.jsonyarn dlx shadcn@latest add https://neobrutalism.com/r/base/collapsible.jsonbunx --bun shadcn@latest add https://neobrutalism.com/r/base/collapsible.json
Instala las siguientes dependencias:
pnpm add @base-ui/reactnpm install @base-ui/reactyarn add @base-ui/reactbun add @base-ui/react
Copia y pega el siguiente código en tu proyecto.
"use client"
import { Collapsible as CollapsiblePrimitive } from "radix-ui"
import { cn } from "@/lib/utils"
function Collapsible({
...props
}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {
return <CollapsiblePrimitive.Root data-slot="collapsible" {...props} />
}
function CollapsibleTrigger({
...props
}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {
return (
<CollapsiblePrimitive.CollapsibleTrigger
data-slot="collapsible-trigger"
{...props}
/>
)
}
function CollapsibleContent({
className,
...props
}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {
return (
<CollapsiblePrimitive.CollapsibleContent
data-slot="collapsible-content"
// Radix publishes the measured height as
// `--radix-collapsible-content-height`; the collapsible-down/up keyframes
// interpolate against it for a real slide open/close.
className={cn(
"overflow-hidden data-[state=open]:animate-collapsible-down data-[state=closed]:animate-collapsible-up",
className
)}
{...props}
/>
)
}
export { Collapsible, CollapsibleTrigger, CollapsibleContent }
Actualiza las rutas de importación según la configuración de tu proyecto.
Uso#
import {
Collapsible,
CollapsibleContent,
CollapsibleTrigger,
} from "@/components/ui/collapsible"<Collapsible>
<CollapsibleTrigger>Can I use this in my project?</CollapsibleTrigger>
<CollapsibleContent>
Yes. Free to use for personal and commercial projects. No attribution
required.
</CollapsibleContent>
</Collapsible>Composición#
Usa la siguiente composición para construir un Collapsible:
Collapsible
├── CollapsibleTrigger
└── CollapsibleContentEstado controlado#
Usa las props open y onOpenChange para controlar el estado.
import * as React from "react"
export function Example() {
const [open, setOpen] = React.useState(false)
return (
<Collapsible open={open} onOpenChange={setOpen}>
<CollapsibleTrigger>Toggle</CollapsibleTrigger>
<CollapsibleContent>Content</CollapsibleContent>
</Collapsible>
)
}Ejemplos#
Básico#
import { ChevronDownIcon } from "@/registry/icons/__lucide__"
import { Button } from "@/components/ui/button"
import { Card, CardContent } from "@/components/ui/card"Panel de ajustes#
Usa un botón disparador para mostrar ajustes adicionales.
"use client"
import * as React from "react"Árbol de archivos#
Anida varios collapsibles para construir un árbol de archivos.
import { ChevronRightIcon, FileIcon, FolderIcon } from "lucide-react"
import { Button } from "@/components/ui/button"RTL#
Para activar el soporte RTL en Neobrutalism, consulta la guía de configuración de RTL.
"use client"
import * as React from "react"Accesibilidad#
El colapsable sigue el patrón Disclosure de WAI-ARIA: el disparador es un botón real conectado con aria-expanded y aria-controls, de modo que los lectores de pantalla anuncian si el panel está abierto.
Interacciones de teclado:
| Tecla | Acción |
|---|---|
Tab / Shift + Tab | Lleva el foco al disparador o fuera de él |
Space / Enter | Abre o cierra el panel |
Referencia de API#
Consulta la documentación de Base UI para obtener más información.