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
Email
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
Email
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
Employees
250+
Growing

Props

DescriptionList component API reference

PropTypeDefaultDescription
itemsArray<{term, description, icon?}>Array of term/description pairs
layout'stacked' | 'horizontal' | 'inline''stacked'Layout orientation
size'sm' | 'md' | 'lg''md'Text size
classNamestringAdditional 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

KeyAction
TabNavigate 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

Related Components