shadcn.io is not affiliated with official shadcn/ui
Shadcn Data List for React and Tailwind
A list of label-value pairs.
- New Users
- 234
- Sales
- £12,340
- Revenue
- 3,450
Installation
bunx --bun shadcn@latest add https://kit.dev/r/data-list.jsonpnpm dlx shadcn@latest add https://kit.dev/r/data-list.jsonnpx shadcn@latest add https://kit.dev/r/data-list.jsonyarn shadcn@latest add https://kit.dev/r/data-list.jsonInstall the following dependencies:
bun add @ark-ui/reactpnpm add @ark-ui/reactnpm install @ark-ui/reactyarn add @ark-ui/reactCopy and paste the following code into your project.
"use client";
import { ark } from "@ark-ui/react/factory";
import type React from "react";
import { cn } from "@/lib/utils";
export interface DataListProps extends React.ComponentProps<typeof ark.dl> {
/**
* Layout of each item. The list itself is always stacked.
* `horizontal` places label and value in a row.
* `vertical` stacks label above value.
*
* @default "horizontal"
*/
orientation?: "horizontal" | "vertical";
}
export const DataList = (props: DataListProps) => {
const { orientation = "horizontal", className, children, ...rest } = props;
return (
<ark.dl
className={cn(
"group/data-list",
"flex flex-col gap-1",
"text-sm",
className
)}
data-orientation={orientation}
data-slot="data-list"
{...rest}
>
{children}
</ark.dl>
);
};
export const DataListItem = (props: React.ComponentProps<typeof ark.div>) => {
const { className, ...rest } = props;
return (
<ark.div
className={cn(
"flex gap-4 py-2",
"group-data-[orientation=horizontal]/data-list:flex-row group-data-[orientation=horizontal]/data-list:items-center",
"group-data-[orientation=vertical]/data-list:flex-col group-data-[orientation=vertical]/data-list:gap-1",
className
)}
data-slot="data-list-item"
{...rest}
/>
);
};
export const DataListItemLabel = (
props: React.ComponentProps<typeof ark.dt>
) => {
const { className, ...rest } = props;
return (
<ark.dt
className={cn(
"min-w-24 shrink-0",
"font-medium text-muted-foreground",
"group-data-[orientation=vertical]/data-list:min-w-0",
className
)}
data-slot="data-list-item-label"
{...rest}
/>
);
};
export const DataListItemValue = (
props: React.ComponentProps<typeof ark.dd>
) => {
const { className, ...rest } = props;
return (
<ark.dd
className={cn("flex-1", "text-foreground", className)}
data-slot="data-list-item-value"
{...rest}
/>
);
};Update the import paths to match your project setup.
Usage
import {
DataList,
DataListItem,
DataListItemLabel,
DataListItemValue,
} from "@/components/ui/data-list";const data = [
{ label: "New Users", value: "234" },
{ label: "Sales", value: "£12,340" },
{ label: "Revenue", value: "3,450" },
];
const DataListDemo = () => (
<DataList>
{data.map((item) => (
<DataListItem key={item.label}>
<DataListItemLabel>{item.label}</DataListItemLabel>
<DataListItemValue>{item.value}</DataListItemValue>
</DataListItem>
))}
</DataList>
);Demos
Info Tip
Orientation Horizontal
Orientation Vertical
Separator
With Badge
API Reference
DataList
dl
PropType
AttributeType
DataListItem
div
PropType
AttributeType
DataListItemLabel
dt
PropType
AttributeType
DataListItemValue
dd
PropType
AttributeType