Description List
Data Display
Layout
Key-value pairs displayed in a semantic description list format with multiple layouts.
Preview
Stacked layout with term above description
User Details
- Full Name
- Sarah Wilson
- sarah.wilson@example.com
- Phone
- +1 (555) 123-4567
- Location
- San Francisco, CA
Layouts
Three layout options: stacked, horizontal, and inline
Horizontal (side by side)
- Order ID
- #ORD-2024-001234
- Date
- December 15, 2024
- Status
- Processing
- Total
- $1,234.56
Inline (compact metadata)
- Status
- Active
- Version
- 2.4.1
- Last Updated
- 2 hours ago
With Icons
Add icons to description list terms
- Name
- John Smith
- john@example.com
- Phone
- +1 (555) 987-6543
- Location
- New York, NY
Sizes
Small, medium, and large text sizes
sm
- Project
- Eidetic Design System
- Status
- Active
md
- Project
- Eidetic Design System
- Status
- Active
lg
- Project
- Eidetic Design System
- Status
- Active
Custom Composition
Build complex layouts with individual components
- Company
- Acme Corporation
- Website
- www.acme.com
- Employees
- 250+Growing
Props
DescriptionList component API reference
| Prop | Type | Default | Description |
|---|---|---|---|
items | Array<{term, description, icon?}> | — | Array of term/description pairs |
layout | 'stacked' | 'horizontal' | 'inline' | 'stacked' | Layout orientation |
size | 'sm' | 'md' | 'lg' | 'md' | Text size |
className | string | — | Additional CSS classes |
Composition Components
DescriptionListItem - Wrapper for term/description pair
DescriptionListTerm - The key/label (dt element)
DescriptionListDescription - The value (dd element)
Usage
Import and implementation example
import {
DescriptionList,
DescriptionListItem,
DescriptionListTerm,
DescriptionListDescription,
} from '@/components/ui/description-list'
export default function Example() {
return (
<>
{/* Using items prop (simple) */}
<DescriptionList
layout="stacked"
items={[
{ term: 'Name', description: 'John Doe' },
{ term: 'Email', description: 'john@example.com' },
]}
/>
{/* With icons */}
<DescriptionList
layout="horizontal"
items={[
{ term: 'Email', description: 'john@example.com', icon: <Mail /> },
{ term: 'Phone', description: '+1 555-1234', icon: <Phone /> },
]}
/>
{/* Custom composition */}
<DescriptionList layout="stacked">
<DescriptionListItem>
<DescriptionListTerm icon={<User />}>Name</DescriptionListTerm>
<DescriptionListDescription>
<span className="font-medium">John Doe</span>
</DescriptionListDescription>
</DescriptionListItem>
</DescriptionList>
{/* Different sizes */}
<DescriptionList size="sm" items={items} />
<DescriptionList size="md" items={items} />
<DescriptionList size="lg" items={items} />
</>
)
}This block is self-contained (no UI component dependencies)
Features
Built-in functionality
- Semantic HTML: Uses dl/dt/dd elements
- Three layouts: Stacked, horizontal, inline
- Icon support: Optional icons for terms
- Size variants: Small, medium, large
- Items prop: Quick setup with array
- Composition: Individual components for custom layouts
- Rich content: Any React content in descriptions
- Dark mode: Full dark mode support
Accessibility
Accessibility considerations
ARIA Attributes
Uses semantic dl, dt, dd elementsProper term/definition associationIcons are decorative (aria-hidden)Keyboard Navigation
| Key | Action |
|---|---|
| Tab | Navigate links within descriptions |
Notes
- Screen readers announce term/description pairs
- Icons are hidden from assistive tech
- Links in descriptions remain accessible
- Maintains document outline structure