Item
Item is a standalone component for displaying a single piece of content. Use with ItemContent, ItemTitle, ItemDescription, etc. for structured content.
Stone · Honed
Usage
import { Item, ItemActions, itemAnatomy, ItemContent, ItemDescription, ItemFooter, ItemGroup, itemGroupAnatomy, ItemGroupProps, ItemHeader, ItemMedia, ItemMediaProps, ItemProps, ItemSeparator, ItemTitle } from "@desk/ui/components/item";Best practices
Structure content with
ItemContent/ItemTitle/ItemDescription(plusItemMedia/ItemActions) rather than raw divs — the compound parts carry the gap and truncation rhythm.Wrap a set of items in
ItemGroupand set the look via itsvariant(divided/separated/grouped) —Itemadapts automatically, so avoid re-styling borders/backgrounds per item.Use
asChildto make the whole item a link/button (e.g. Next<Link>); pass exactly one element child so Slot can merge className — don't wrap the child in a fragment or extra element.Reach for
Itemfor generic single rows; for files/documents useDocumentList, and for term/value metadata useDescriptionList.
Props
Item
| Prop | Type | Default | Description |
|---|---|---|---|
| asChild | boolean | Merge props onto the child element instead of rendering a div (Radix Slot) — e.g. to make the whole item a link. | |
| size | "base" | "2xs" | "xs" | "sm" | "lg" | "xl" | "2xl" | "3xl" | ||
| variant | "default" | "outline" | "muted" | "card" | null | undefined |
ItemGroup
| Prop | Type | Default | Description |
|---|---|---|---|
| ordered | boolean | false | Render as an ordered |
| ref | ((instance: HTMLUListElement | null) => void | (() => void | { [UNDEFINED_VOID_ONLY]: never; }) | React.DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof React.DO_NOT_USE_OR_YOU_WILL_BE | ||
| variant | "grouped" | "divided" | "separated" | null | undefined |
ItemMedia
| Prop | Type | Default | Description |
|---|---|---|---|
| tone | "neutral" | "brand" | "danger" | "warning" | "success" | "info" | null | undefined | ||
| radius | "rounded" | "square" | "full" | null | undefined | ||
| size | "base" | "2xs" | "xs" | "sm" | "lg" | "xl" | "2xl" | "3xl" | null | undefined | ||
| icon | import("../../tokens/icon-component").IconComponent | Icon component from lucide-react or any SVG React component. | |
| emphasis | "outline" | "solid" | "ghost" | "soft" | null | undefined | ||
| iconSize | IconSize | undefined | Size of the icon inside the box. Defaults based on box size. | |
| iconClassName | string | Additional className for the icon itself. | |
| variant | "image" | "default" | "icon" | null | undefined |
ItemSeparator
| Prop | Type | Default | Description |
|---|---|---|---|
| variant | "strong" | "default" | "muted" | "accent" | "default" | Visual weight of the separator line. |
Also exports
- component
ItemActions - const
itemAnatomy - component
ItemContent - component
ItemDescription - component
ItemFooter - const
itemGroupAnatomy - interface
ItemGroupProps - component
ItemHeader - interface
ItemMediaProps - interface
ItemProps - component
ItemTitle
Anatomy
Item
itemA flexible content container for displaying structured information
ItemMedia
item-mediaIcon, image, or avatar display area
ItemHeader
item-headerHeader row spanning full width
ItemContent
item-contentMain content area with title and description
ItemTitle
item-titlePrimary heading
ItemDescription
item-descriptionSecondary text
ItemActions
item-actionsAction buttons or controls
ItemFooter
item-footerFooter row spanning full width