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