File size: 2,263 Bytes
9697ede | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | // @ts-nocheck
import * as mod from "./collapsible"
const docs = `### Overview
Toggleable content region with optional arrow indicator.
Compose \`Collapsible.Trigger\`, \`Collapsible.Content\`, and \`Collapsible.Arrow\`.
### API
- Root accepts Kobalte Collapsible props (\`open\`, \`defaultOpen\`, \`onOpenChange\`).
- \`variant\` controls styling ("normal" | "ghost").
### Variants and states
- Normal and ghost variants.
- Open/closed states.
### Behavior
- Trigger toggles the content visibility.
### Accessibility
- TODO: confirm ARIA attributes provided by Kobalte.
### Theming/tokens
- Uses \`data-component="collapsible"\` and slots for trigger/content/arrow.
`
export default {
title: "UI/Collapsible",
id: "components-collapsible",
component: mod.Collapsible,
tags: ["autodocs"],
parameters: {
docs: {
description: {
component: docs,
},
},
},
argTypes: {
variant: {
control: "select",
options: ["normal", "ghost"],
},
},
}
export const Basic = {
args: {
variant: "normal",
defaultOpen: true,
},
render: (props) => (
<mod.Collapsible {...props}>
<mod.Collapsible.Trigger data-slot="collapsible-trigger">
<div style={{ display: "flex", "align-items": "center", gap: "8px" }}>
<span>Details</span>
<mod.Collapsible.Arrow />
</div>
</mod.Collapsible.Trigger>
<mod.Collapsible.Content data-slot="collapsible-content">
<div style={{ color: "var(--text-weak)", "padding-top": "8px" }}>Optional details sit here.</div>
</mod.Collapsible.Content>
</mod.Collapsible>
),
}
export const Ghost = {
args: {
variant: "ghost",
defaultOpen: false,
},
render: (props) => (
<mod.Collapsible {...props}>
<mod.Collapsible.Trigger data-slot="collapsible-trigger">
<div style={{ display: "flex", "align-items": "center", gap: "8px" }}>
<span>Ghost trigger</span>
<mod.Collapsible.Arrow />
</div>
</mod.Collapsible.Trigger>
<mod.Collapsible.Content data-slot="collapsible-content">
<div style={{ color: "var(--text-weak)", "padding-top": "8px" }}>Ghost content.</div>
</mod.Collapsible.Content>
</mod.Collapsible>
),
}
|