Collapse
Collapse hides and reveals optional sections without leaving the current page.
@duskmoon-dev/components/collapse Usage
When to use
- Use it to clarify state, metadata, content hierarchy, or loading without creating a new workflow.
- Pair it with semantic content so visual treatment never becomes the only source of meaning.
Implementation notes
Features
Focuses on status, metadata, empty/loading states, or content grouping without owning application state.
Uses DuskMoon tokens so the component follows the active docs theme.
Collapse is most often configured through `items`, `activeKey`, `defaultActiveKey`, `onChange`.
Renders item labels with DuskMoon collapse classes
Feature Demos
Feature demos are authored for the component page, then supplemented with behavior scenarios from the component test coverage.
Basic usage
Import the component stylesheet and Collapse from its package subpath, then render it with the core props.
import "@duskmoon-dev/components/styles.css";
import { Collapse } from "@duskmoon-dev/components/collapse";
export function Example() {
return (<Collapse
defaultActiveKey="intro"
items={[
{
key: "intro",
label: "What is DuskMoon?",
children: "DuskMoon React components provide typed, themeable UI primitives."
}
]}
/>);
} Renders item labels with DuskMoon collapse classes
test-backedCollapse scenario from the component test coverage: renders item labels with duskmoon collapse classes.
import "@duskmoon-dev/components/styles.css";
import { Collapse } from "@duskmoon-dev/components/collapse";
export function CollapseRendersItemLabelsWithDemo() {
return (<Collapse
defaultActiveKey="intro"
items={[
{
key: "intro",
label: "What is DuskMoon?",
children: "DuskMoon React components provide typed, themeable UI primitives."
}
]}
/>);
} Supports default active key
test-backedCollapse scenario from the component test coverage: supports default active key.
import "@duskmoon-dev/components/styles.css";
import { Collapse } from "@duskmoon-dev/components/collapse";
export function CollapseSupportsDefaultActiveKeyDemo() {
return (<Collapse
defaultActiveKey="intro"
items={[
{
key: "intro",
label: "What is DuskMoon?",
children: "DuskMoon React components provide typed, themeable UI primitives."
}
]}
/>);
} Supports className and toggles panels
test-backedCollapse scenario from the component test coverage: supports classname and toggles panels.
import "@duskmoon-dev/components/styles.css";
import { Collapse } from "@duskmoon-dev/components/collapse";
export function CollapseSupportsClassNameAndTogglesDemo() {
return (<Collapse
defaultActiveKey="intro"
items={[
{
key: "intro",
label: "What is DuskMoon?",
children: "DuskMoon React components provide typed, themeable UI primitives."
}
]}
/>);
} Supports accordion onChange
test-backedCollapse scenario from the component test coverage: supports accordion onchange.
import "@duskmoon-dev/components/styles.css";
import { Collapse } from "@duskmoon-dev/components/collapse";
export function CollapseSupportsAccordionOnChangeDemo() {
return (<Collapse
defaultActiveKey="intro"
items={[
{
key: "intro",
label: "What is DuskMoon?",
children: "DuskMoon React components provide typed, themeable UI primitives."
}
]}
/>);
} Supports size, ghost, and disabled item classes
test-backedCollapse scenario from the component test coverage: supports size, ghost, and disabled item classes.
import "@duskmoon-dev/components/styles.css";
import { Collapse } from "@duskmoon-dev/components/collapse";
export function CollapseSupportsSizeGhostAndDemo() {
return (<Collapse
defaultActiveKey="intro"
items={[
{
key: "intro",
label: "What is DuskMoon?",
children: "DuskMoon React components provide typed, themeable UI primitives."
}
]}
/>);
} Forwards root ref
test-backedCollapse scenario from the component test coverage: forwards root ref.
import "@duskmoon-dev/components/styles.css";
import { Collapse } from "@duskmoon-dev/components/collapse";
export function CollapseForwardsRootRefDemo() {
return (<Collapse
defaultActiveKey="intro"
items={[
{
key: "intro",
label: "What is DuskMoon?",
children: "DuskMoon React components provide typed, themeable UI primitives."
}
]}
/>);
} Theme aware
Docs previews inherit the DuskMoon data-theme value. Use the header switch to compare light and dark rendering.
<div data-theme="sunshine">
<Collapse
defaultActiveKey="intro"
items={[
{
key: "intro",
label: "What is DuskMoon?",
children: "DuskMoon React components provide typed, themeable UI primitives."
}
]}
/>
</div>
<div data-theme="moonlight">
<Collapse
defaultActiveKey="intro"
items={[
{
key: "intro",
label: "What is DuskMoon?",
children: "DuskMoon React components provide typed, themeable UI primitives."
}
]}
/>
</div> API
The API reference below lists every parsed exported type or interface for Collapse. Start with `items`, `activeKey`, `defaultActiveKey`, `onChange` for common usage.
packages/components/src/components/collapse/Collapse.types.ts
Scenarios: packages/components/src/components/collapse/Collapse.test.tsx | Prop | Type | Required | Description |
|---|---|---|---|
items | CollapseItem[] | No | items configures Collapse. |
activeKey | CollapseKey | CollapseKey[] | No | activeKey configures Collapse. |
defaultActiveKey | CollapseKey | CollapseKey[] | No | defaultActiveKey configures Collapse. |
onChange | (key: CollapseKey | CollapseKey[]) => void | No | onChange configures Collapse. |
accordion | boolean | No | accordion configures Collapse. |
bordered | boolean | No | bordered configures Collapse. |
ghost | boolean | No | ghost configures Collapse. |
size | CollapseSize | No | size configures Collapse. |
children | ReactNode | No | children configures Collapse. |
| Prop | Type | Required | Description |
|---|---|---|---|
key | CollapseKey | Yes | key configures Collapse. |
label | ReactNode | Yes | label configures Collapse. |
children | ReactNode | No | children configures Collapse. |
disabled | boolean | No | disabled configures Collapse. |
className | string | No | className configures Collapse. |
string | number "sm" | "md" | "lg"