Skip to content

Collapsible

Sección plegable individual. Más simple que Accordion, sin grupo.


Import

jsx
import {
  Collapsible,
  CollapsibleTrigger,
  CollapsibleContent,
} from '@imansi/ui';

Uso básico

jsx
<Collapsible>
  <CollapsibleTrigger asChild>
    <Button variant="outline">Ver detalles</Button>
  </CollapsibleTrigger>
  <CollapsibleContent>
    <div className="mt-4 rounded-md border p-4">
      <p>Contenido que se muestra y oculta.</p>
    </div>
  </CollapsibleContent>
</Collapsible>

Con ícono que rota

jsx
import { ChevronsUpDown } from 'lucide-react';
import { useState } from 'react';

export function Ejemplo() {
  const [abierto, setAbierto] = useState(false);

  return (
    <Collapsible open={abierto} onOpenChange={setAbierto}>
      <CollapsibleTrigger asChild>
        <Button variant="ghost" className="w-full justify-between">
          3 usuarios asignados
          <ChevronsUpDown className="h-4 w-4" />
        </Button>
      </CollapsibleTrigger>
      <CollapsibleContent className="space-y-2 mt-2">
        <div className="rounded-md border px-4 py-2 text-sm">
          Juan Pérez
        </div>
        <div className="rounded-md border px-4 py-2 text-sm">
          María García
        </div>
        <div className="rounded-md border px-4 py-2 text-sm">
          Carlos López
        </div>
      </CollapsibleContent>
    </Collapsible>
  );
}

Props

Collapsible

PropTipoDefaultDescripción
openbooleanEstado controlado
defaultOpenbooleanfalseEstado inicial
onOpenChange(open: boolean) => voidCallback
disabledbooleanfalseDeshabilita

Accesibilidad

  • aria-expanded en el trigger
  • aria-controls conecta trigger y content
  • role="region" en el content

Hecho con ❤️ en Argentina