DataListItem displays a label and value pair in a horizontal layout, commonly used for displaying object properties or form data.
Import
import { DataListItem } from 'popui'
Basic Usage
<script lang="ts">
import { DataListItem } from 'popui'
</script>
<DataListItem label="Name" value="John Doe" />
<DataListItem label="Email" value="[email protected]" />
<DataListItem label="Status" value="Active" />
Monospaced Font
Use monospaced font for values like IDs or codes:
<DataListItem
label="User ID"
value="usr_1234567890"
monospaced={true}
/>
<DataListItem
label="API Key"
value="sk_test_1234567890abcdef"
monospaced={true}
/>
Monospaced Numbers
Use monospaced numbers for values with tabular data:
<DataListItem
label="Order Total"
value="$1,234.56"
monospacedNums={true}
/>
<DataListItem
label="Quantity"
value="42"
monospacedNums={true}
/>
<DataListItem
label="Date"
value="2024-03-15"
monospacedNums={true}
/>
Full Width
Make the value take full available width:
<DataListItem
label="Description"
value="This is a very long description that needs more space to display properly."
fullWidth={true}
/>
Custom Content
Use the children snippet for custom value content:
<script lang="ts">
import { DataListItem, TagStatus } from 'popui'
</script>
<DataListItem label="Status">
<TagStatus label="Active" status="green" />
</DataListItem>
<DataListItem label="Tags">
<div class="flex gap-2">
<TagStatus label="Premium" status="blue" />
<TagStatus label="Verified" status="green" />
</div>
</DataListItem>
With Components
<script lang="ts">
import { DataListItem, UuidCopy, ProfileAvatar } from 'popui'
</script>
<DataListItem label="User ID">
<UuidCopy uuid="550e8400-e29b-41d4-a716-446655440000" />
</DataListItem>
<DataListItem label="Owner">
<ProfileAvatar name="John Doe" picture="https://example.com/avatar.jpg" />
</DataListItem>
List of Items
<script lang="ts">
import { DataListItem } from 'popui'
const user = {
name: 'John Doe',
email: '[email protected]',
phone: '+1 (555) 123-4567',
address: '123 Main St, New York, NY 10001',
member_since: 'January 2020'
}
</script>
<div class="space-y-2">
<DataListItem label="Name" value={user.name} />
<DataListItem label="Email" value={user.email} />
<DataListItem label="Phone" value={user.phone} monospacedNums={true} />
<DataListItem label="Address" value={user.address} fullWidth={true} />
<DataListItem label="Member Since" value={user.member_since} />
</div>
Styling
<script lang="ts">
import { DataListItem } from 'popui'
</script>
<div class="space-y-1">
<DataListItem label="Regular" value="Normal weight text" />
<DataListItem label="Amount" value="$1,234.56" monospacedNums={true} />
<DataListItem label="Code" value="ABC-123-XYZ" monospaced={true} />
</div>
Complex Example
<script lang="ts">
import { DataListItem, UuidCopy, TagStatus, ProfileAvatar } from 'popui'
const invoice = {
id: '550e8400-e29b-41d4-a716-446655440000',
number: 'INV-2024-001',
customer: 'John Doe',
amount: '$1,234.56',
status: 'paid',
date: '2024-03-15',
description: 'Monthly subscription fee for premium plan'
}
</script>
<div class="space-y-2 p-4 border border-border rounded-lg">
<DataListItem label="Invoice ID">
<UuidCopy uuid={invoice.id} />
</DataListItem>
<DataListItem
label="Invoice Number"
value={invoice.number}
monospaced={true}
/>
<DataListItem label="Customer" value={invoice.customer} />
<DataListItem
label="Amount"
value={invoice.amount}
monospacedNums={true}
/>
<DataListItem label="Status">
<TagStatus
label="Paid"
status="green"
dot={true}
/>
</DataListItem>
<DataListItem
label="Date"
value={invoice.date}
monospacedNums={true}
/>
<DataListItem
label="Description"
value={invoice.description}
fullWidth={true}
/>
</div>
Props
The label text displayed on the left side.
The value text displayed on the right side. Ignored if children snippet is provided.
Use monospace font for the value (useful for IDs, codes, etc.).
Use monospace font for numbers in the value (useful for amounts, dates, etc.).
Make the value take full available width.
Custom content to display instead of the value prop.
Styling
The component includes hover effects with a subtle background change. The label has a minimum width of 125px to ensure consistent alignment across multiple items.
Default Classes
- Container:
flex gap-6 items-center px-3 py-1 rounded-lg hover:bg-background-default-secondary
- Label:
text-foreground-default-secondary text-base min-w-[125px]
- Value:
text-foreground font-medium text-base
- Monospaced:
font-mono
- Monospaced Numbers:
slashed-zero tabular-nums lining-nums