Inklapbaar
Een combinatie van een trigger en een paneel voor bestandsstructuren, geavanceerde instellingen en ‘meer weergeven’-secties — met die neobrutalistische stijl van randen en schaduwen.
"use client"
import * as React from "react"De collapsible is het broertje van de accordion met één sectie: één trigger, één paneel, open of dicht. Gebouwd op de Base UI Collapsible-component en vormgegeven volgens het neobrutalistische recept: dikke randen, harde schaduwen en vette typografie.
Gebruik deze component bij:
- Bestandsbomen en geneste navigatie — nestel collapsibles om mappen uit te klappen (zie het bestandsboomvoorbeeld hieronder).
- Geavanceerde instellingen — houd de gangbare opties zichtbaar en vouw de rest achter een schakelaar weg.
- "Meer tonen"-inhoud — lange changelogs, afgekapte lijsten, optionele details op dichtbevolkte pagina’s.
Installatie#
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
Installeer de volgende afhankelijkheden:
pnpm add @base-ui/reactnpm install @base-ui/reactyarn add @base-ui/reactbun add @base-ui/react
Kopieer en plak de volgende code in je project.
"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 }
Werk de importpaden bij zodat ze overeenkomen met je projectconfiguratie.
Gebruik#
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>Compositie#
Gebruik de volgende compositie om een Collapsible te bouwen:
Collapsible
├── CollapsibleTrigger
└── CollapsibleContentGecontroleerde staat#
Gebruik de props open en onOpenChange om de staat te beheren.
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>
)
}Voorbeelden#
Basis#
import { ChevronDownIcon } from "@/registry/icons/__lucide__"
import { Button } from "@/components/ui/button"
import { Card, CardContent } from "@/components/ui/card"Instellingenpaneel#
Gebruik een triggerknop om extra instellingen te tonen.
"use client"
import * as React from "react"Bestandsstructuur#
Gebruik geneste collapsibles om een bestandsstructuur te bouwen.
import { ChevronRightIcon, FileIcon, FolderIcon } from "lucide-react"
import { Button } from "@/components/ui/button"RTL#
Om RTL-ondersteuning in Neobrutalism in te schakelen, zie de RTL-configuratiegids.
"use client"
import * as React from "react"Toegankelijkheid#
De collapsible volgt het WAI-ARIA Disclosure-patroon: de trigger is een echte knop met aria-expanded en aria-controls, zodat schermlezers aankondigen of het paneel open is.
Toetsenbordinteracties:
| Toets | Actie |
|---|---|
Tab / Shift + Tab | Verplaatst de focus naar en van de trigger |
Space / Enter | Klapt het paneel open of dicht |
API-referentie#
Zie de Base UI-documentatie voor meer informatie.