Grid List
Installation
Install the component via the CLI in one command.
npx shadcn@latest add @intentui/grid-list
Composed components
When you install this component via the CLI, it automatically loads all composed components, so you don’t need to add them individually.
Manual installation
Use this approach if you prefer to install and wire up the component yourself instead of using the CLI.
npm install react-aria-components tailwind-merge
Anatomy
import { GridList, GridListItem } from "@/components/ui/grid-list"const items = [
{ id: "1", name: "The Beatles" },
...
]
<GridList
selectionMode="single"
items={items}
aria-label="Select your favorite bands"
className="min-w-64"
>
{(item) => <GridListItem id={item.id}>{item.name}</GridList.Item>}
</GridList>Examples
Multiple selection
To enable multiple selections, set the selectionMode prop to multiple. Since this prop has no default value, you must define it explicitly.
Note that I haven't set an id for the grid list item as the items already have default IDs. However, you should specify the id prop for each grid list item like this:
{(item) => <GridListItem id={item.name}>{item.name}</GridListItem>}Drag and drop
The grid list supports drag and drop functionalities if you use the dragAndDropHooks prop along with the useDragAndDrop hook. You can drop data on the entire list, individual items, add new items between existing ones, or rearrange items.
Dragging between items
You can move items between positions within the grid list.
Render empty state
The grid list can display an empty state when no items are available using the renderEmptyState prop.
Infinite scrolling
The grid list can handle large datasets efficiently with infinite scrolling. This allows for loading more data as the user scrolls down, improving performance and user experience.
Section
The grid list supports sections, allowing you to group items under different headings.
Controlled
The grid list can be controlled, which means the parent component manages the selection state of each item.
Disabled
Similar to how the Tag Group component can be disabled using isDisabled for children and disabledKeys for the parent, the Grid List supports similar functionality. For example, items "Led Zeppelin" and "The Rolling Stones" are disabled.
To disable items via the parent component, you can use the disabledKeys prop like this:
<GridList
items={items}
aria-label="Select your favorite bands"
selectionMode="multiple"
disabledKeys={[2,5]}
className="min-w-64"
>
{(item) => <GridListItem id={item.id}>{item.name}</GridListItem>}
</GridList>Component API
GridList
GridList extends the React Aria Components <GridList> component.
classNamestringGridListDescription
GridListDescription extends the React Aria Components <Text> component.
classNamestringGridListEmptyState
GridListEmptyState extends the native <div> element.
classNamestringGridListHeader
GridListHeader extends the React Aria Components <GridListHeader> component.
classNamestringGridListItem
GridListItem extends the React Aria Components <GridListItem> component.
classNamestringGridListLabel
GridListLabel extends the React Aria Components <Text> component.
classNamestringGridListSection
GridListSection extends the React Aria Components <GridListSection> component.
classNamestringGridListSpacer
GridListSpacer extends the native <div> element.
classNamestringGridListStart
GridListStart extends the native <div> element.
classNamestringSee the React Aria for the full API reference.
