ListItem
ListItem renders a compact ghost row with a title, optional subtitle, and optional start and end slots. It always uses Density’s button presentation. Subtitles render one size smaller than the ListItem size, clamped at 2xs.
import { ListItem } from "density-base-ui";
export default function ListItemExample() {
return <ListItem title="Release notes" />;
}Props
| Prop | Attribute | Values | Default |
|---|---|---|---|
title |
None | ReactNode |
Required |
subtitle |
None | ReactNode |
None |
childrenStart |
None | ReactNode |
None |
childrenEnd |
None | ReactNode |
None |
as |
None | ElementType |
button |
size |
data-dn-size |
2xs, xs, sm, md, lg, xl, 2xl, 3xl |
md |
| Fixed presentation | data-dn-presentation |
button |
button |
Content and element
Release notesEdited 12 minutes ago
import { ListItem } from "density-base-ui";
import { FileText, MoreHorizontal } from "lucide-react";
export default function ListItemContentExample() {
return (
<ListItem
as="div"
childrenEnd={<MoreHorizontal aria-hidden="true" size={16} />}
childrenStart={<FileText aria-hidden="true" size={16} />}
subtitle="Edited 12 minutes ago"
title="Release notes"
/>
);
}Size
import { ListItem } from "density-base-ui";
import { ExampleStack } from "../ExampleLayout";
export default function ListItemSizeExample() {
return (
<ExampleStack style={styles.panel}>
<ListItem title="2xs" size="2xs" />
<ListItem title="xs" size="xs" />
<ListItem title="sm" size="sm" />
<ListItem title="md" size="md" />
<ListItem title="lg" size="lg" />
<ListItem title="xl" size="xl" />
<ListItem title="2xl" size="2xl" />
<ListItem title="3xl" size="3xl" />
</ExampleStack>
);
}
const styles = {
panel: {
display: "grid",
gap: "0.375rem",
},
} as const;