Collapse
Collapse display a list of high-level options that can expand/collapse to reveal more information.
import { Collapse } from '@nextui-org/react';
Default
The Collapse.Group
behavior is like an accordion by default.
import { Collapse, Text } from "@nextui-org/react";
export default function App() {
return (
<Collapse.Group>
<Collapse title="Option A">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Option B">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Option C">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.
</Text>
</Collapse>
</Collapse.Group>
);
}
No Accordion
You can disable the accordion behavior with the accordion
property.
import { Collapse, Text } from "@nextui-org/react";
export default function App() {
return (
<Collapse.Group accordion={false}>
<Collapse title="Option A">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Option B">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Option C">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.
</Text>
</Collapse>
</Collapse.Group>
);
}
Initial Expanded
You can use the expanded
property to expand an item.
import { Collapse, Text } from "@nextui-org/react";
export default function App() {
return (
<Collapse.Group>
<Collapse title="Option A">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Option B" expanded>
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Option C">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.
</Text>
</Collapse>
</Collapse.Group>
);
}
With subtitle
You can add the subtitle
property to the Collapse
component to give more details.
import { Collapse, Text } from "@nextui-org/react";
export default function App() {
return (
<Collapse.Group>
<Collapse title="Option A" subtitle="More description about Option A">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse
title="Option B"
subtitle={
<>
More description about <Text b>Option B</Text>
</>
}
>
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.
</Text>
</Collapse>
</Collapse.Group>
);
}
Shadow
You can add a shadow effect with the property shadow
.
import { Collapse, Grid, Text } from "@nextui-org/react";
export default function App() {
return (
<Grid.Container gap={2}>
<Grid>
<Collapse
shadow
title="Option"
subtitle="More description about Option"
>
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.
</Text>
</Collapse>
</Grid>
<Grid>
<Collapse.Group shadow>
<Collapse title="Option A">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Option B">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Option C">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
</Collapse.Group>
</Grid>
</Grid.Container>
);
}
Bordered
You can change the full style to a bordered Collapse
with the bordered
property.
import { Collapse, Grid, Text } from "@nextui-org/react";
export default function App() {
return (
<Grid.Container gap={2}>
<Grid>
<Collapse
bordered
title="Option"
subtitle="More description about Option"
>
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat.
</Text>
</Collapse>
</Grid>
<Grid>
<Collapse.Group bordered>
<Collapse title="Option A">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Option B">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Option C">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
</Collapse.Group>
</Grid>
</Grid.Container>
);
}
Splitted
You can change the full style to a separated Collapse
with the splitted
property.
import { Collapse, Text, Grid } from "@nextui-org/react";
export default function App() {
return (
<Grid.Container gap={2}>
<Grid>
<Collapse.Group splitted>
<Collapse title="Option A">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Option B">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Option C">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
</Collapse.Group>
</Grid>
</Grid.Container>
);
}
Custom Arrow
You can set a custom arrow with the arrowIcon
property.
import { Collapse,Text,Grid } from '@nextui-org/react';
import { SunIcon } from './SunIcon';
import { MoonIcon } from './MoonIcon';
import { AnchorIcon } from './AnchorIcon';
export default function App() {
return (
<Grid.Container gap={2}>
<Grid>
<Collapse.Group shadow>
<Collapse title="Anchor" arrowIcon={<AnchorIcon />}>
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Moon" arrowIcon={<MoonIcon />}>
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Sun" arrowIcon={<SunIcon />}>
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
</Collapse.Group>
</Grid>
</Grid.Container>
);
}
Content Left
You can put any content at the begining of the Collapse
with the contentLeft
property.
import { Collapse, Text, Grid, Avatar, Link } from "@nextui-org/react";
export default function App() {
return (
<Grid.Container gap={2}>
<Grid>
<Collapse.Group shadow>
<Collapse
title={<Text h4>Chung Miller</Text>}
subtitle="4 unread messages"
contentLeft={
<Avatar
size="lg"
src="https://i.pravatar.cc/150?u=a042581f4e29026024d"
color="secondary"
bordered
squared
/>
}
>
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse
title={<Text h4>Janelle Lenard</Text>}
subtitle="3 incompleted steps"
contentLeft={
<Avatar
size="lg"
src="https://i.pravatar.cc/150?u=a042581f4e29026704d"
color="success"
bordered
squared
/>
}
>
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse
title={<Text h4>Zoey Lang</Text>}
subtitle={
<Text>
2 issues to <Link color>fix now</Link>
</Text>
}
contentLeft={
<Avatar
size="lg"
src="https://i.pravatar.cc/150?u=a04258114e29026702d"
color="error"
bordered
squared
/>
}
>
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
</Collapse.Group>
</Grid>
</Grid.Container>
);
}
No Divider
You can remove the Collapse
divider with the divider
property.
import { Collapse, Text, Grid } from "@nextui-org/react";
export default function App() {
return (
<Grid.Container gap={2}>
<Grid>
<Collapse.Group shadow divider={false}>
<Collapse title="Option A">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Option B">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Option C">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
</Collapse.Group>
</Grid>
</Grid.Container>
);
}
Disabled
You can disable an specific Collapse
item with the disabled
property.
import { Collapse,Text,Grid } from '@nextui-org/react';
export default function App() {
return (
<Grid.Container gap={2}>
<Grid>
<Collapse.Group shadow>
<Collapse title="Option A">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse disabled title="Option B" subtitle="Disabled option">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Option C">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
</Collapse.Group>
</Grid>
</Grid.Container>
);
}
No Animated
You can disable the entire animation with the animated
property.
import { Collapse, Text, Grid } from "@nextui-org/react";
export default function App() {
return (
<Grid.Container gap={2}>
<Grid>
<Collapse.Group shadow animated={false}>
<Collapse title="Option A">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Option B">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
<Collapse title="Option C">
<Text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</Text>
</Collapse>
</Collapse.Group>
</Grid>
</Grid.Container>
);
}
APIs
Collapse Props
Attribute | Type | Accepted values | Description | Default |
---|---|---|---|---|
expanded | boolean | true/false | Manage the expand behaivor by prop | false |
title | string React.ReactNode | - | Collapse title content | - |
subtitle | string React.ReactNode | - | Collapse description content | - |
divider | boolean | true/false | Show or hide the collapse divider | true |
disabled | boolean | true/false | Disable collapse | false |
bordered | boolean | true/false | Bordered collapse | false |
shadow | boolean | true/false | Enable or disable the collapse shadow | false |
animated | boolean | true/false | Enable or disable the collapse animation | true |
showArrow | boolean | true/false | Show or hide the collapse right arrow | true |
arrowIcon | React.ReactNode | - | Collapse arrow icon | - |
contentLeft | React.ReactNode | - | Left content for the collapse | - |
borderWeight | NormalWeights | NormalWeights | Border weight for bordered collapse | light |
index | number | - | Collapse's index, this value it's autogenerated by default | - |
preventDefault | boolean | true/false | Prevent default event on when is selected through the Space, Enter keys | true |
onChange | (e: React.ChangeEvent, index:number, value: boolean) => void | - | Callback fired when the value is changed | - |
css | Stitches.CSS | - | Override Default CSS style | - |
as | keyof JSX.IntrinsicElements | - | Changes which tag component outputs | div |
... | HTMLAttributes | 'id', 'className', ... | Div native props | - |
Collapse.Group props
Attribute | Type | Accepted values | Description | Default |
---|---|---|---|---|
accordion | boolean | true/false | Expand children collapse like an accordion | true |
animated | boolean | true/false | Enable or disable the collapse group animation | true |
bordered | boolean | true/false | Bordered collapse group | false |
splitted | boolean | true/false | Separated collapse group | false |
shadow | boolean | true/false | Enable or disable the collapse group shadow | false |
divider | boolean | true/false | Show or hide the collapse group children divider | - |
borderWeight | NormalWeights | NormalWeights | Border weight for bordered collapse group | light |
onChange | (index:number, value: boolean) => void | - | Callback fired when a collapse children value is changed | - |
css | Stitches.CSS | - | Override Default CSS style | - |
as | keyof JSX.IntrinsicElements | - | Changes which tag component outputs | div |
... | HTMLAttributes | 'id', 'className', ... | Div native props | - |
Collapse types
Normal Weights
type NormalWeights = 'light' | 'normal' | 'bold';