A versatile component for displaying content with media, title, description, and actions.
This is a description that provides additional context.
This item includes a title, description, and action button.
This item includes media, title, and description.
Complete item with all components: media, title, description, and button.
Item with multiple action buttons in the actions area.
This is a description that provides additional context.
This item includes a title, description, and action button.
This item includes media, title, and description.
Complete item with all components: media, title, description, and button.
Item with multiple action buttons in the actions area.
This is a description that provides additional context.
This item includes a title, description, and action button.
This item includes media, title, and description.
Complete item with all components: media, title, description, and button.
Item with multiple action buttons in the actions area.
This is a description that provides additional context.
This item includes a title, description, and action button.
This item includes media, title, and description.
Complete item with all components: media, title, description, and button.
Item with multiple action buttons in the actions area.
This is a description that provides additional context.
This item includes a title, description, and action button.
This item includes media, title, and description.
Complete item with all components: media, title, description, and button.
Item with multiple action buttons in the actions area.
This is a description that provides additional context.
This item includes a title, description, and action button.
This item includes media, title, and description.
Complete item with all components: media, title, description, and button.
Item with multiple action buttons in the actions area.
This is a description that provides additional context.
This item includes a title, description, and action button.
This item includes media, title, and description.
Complete item with all components: media, title, description, and button.
Item with multiple action buttons in the actions area.
This is a description that provides additional context.
This item includes a title, description, and action button.
This item includes media, title, and description.
Complete item with all components: media, title, description, and button.
Item with multiple action buttons in the actions area.
This is a description that provides additional context.
This item includes a title, description, and action button.
This item includes media, title, and description.
Complete item with all components: media, title, description, and button.
Item with multiple action buttons in the actions area.
First item in the group.
Second item in the group.
Third item in the group.
First item with icon.
Second item with icon.
Third item with icon.
First item in muted group.
Second item in muted group.
Third item in muted group.
View all incoming messages.
View all sent messages.
View all draft messages.
View archived messages.
A comprehensive collection of reusable UI components for building consistent interfaces.
Track performance metrics and engagement rates across all marketing channels.
Complete reference guide for all available endpoints and authentication methods.
Financial overview including revenue, expenses, and growth metrics for the fourth quarter.
Insights from interviews and surveys conducted with 50+ users across different demographics.
Planned features and improvements scheduled for the next three months.
Complete overhaul of the company website with modern design principles and improved user experience.
Building a cross-platform mobile application for iOS and Android with React Native.
Step-by-step instructions for integrating third-party APIs with authentication and error handling.
Overview of project settings and configuration.
A document with metadata displayed.
Complete file with image, title, description, and action button.
Overview of project settings and configuration.
A document with metadata displayed.
Complete file with image, title, description, and action button.
Overview of project settings and configuration.
A document with metadata displayed.
Complete file with image, title, description, and action button.
Overview of project settings and configuration.
A document with metadata displayed.
Complete file with image, title, description, and action button.
<script lang="ts">
import type { Snippet } from 'svelte';
import type { HTMLAttributes } from 'svelte/elements';
import { Example, ExampleWrapper } from '@sveltery/components/example';
import { Button } from '@sveltery/components/button';
import { Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle } from '@sveltery/components/item';
import { IconPlaceholder } from '@sveltery/components/icons';
</script>
{#snippet link(props: HTMLAttributes<HTMLElement>, _state: unknown, children?: Snippet)}
<!-- svelte-ignore a11y_invalid_attribute -->
<a href="#" {...props}>{@render children?.()}</a>
{/snippet}
{#snippet DefaultVariantItems()}
<Example title="Default">
<Item>
<ItemContent>
<ItemTitle>Title Only</ItemTitle>
</ItemContent>
</Item>
<Item>
<ItemContent>
<ItemTitle>Title + Button</ItemTitle>
</ItemContent>
<ItemActions>
<Button variant="outline">Action</Button>
</ItemActions>
</Item>
<Item>
<ItemContent>
<ItemTitle>Title + Description</ItemTitle>
<ItemDescription>
This is a description that provides additional context.
</ItemDescription>
</ItemContent>
</Item>
<Item>
<ItemContent>
<ItemTitle>Title + Description + Button</ItemTitle>
<ItemDescription>
This item includes a title, description, and action button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline">Action</Button>
</ItemActions>
</Item>
<Item>
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title</ItemTitle>
</ItemContent>
</Item>
<Item>
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Button</ItemTitle>
</ItemContent>
<ItemActions>
<Button size="sm">Action</Button>
</ItemActions>
</Item>
<Item>
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description</ItemTitle>
<ItemDescription>
This item includes media, title, and description.
</ItemDescription>
</ItemContent>
</Item>
<Item>
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description + Button</ItemTitle>
<ItemDescription>
Complete item with all components: media, title, description, and
button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button size="sm">Action</Button>
</ItemActions>
</Item>
<Item>
<ItemContent>
<ItemTitle>Multiple Actions</ItemTitle>
<ItemDescription>
Item with multiple action buttons in the actions area.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Cancel
</Button>
<Button size="sm">Confirm</Button>
</ItemActions>
</Item>
</Example>
{/snippet}
{#snippet OutlineVariantItems()}
<Example title="Outline">
<Item variant="outline">
<ItemContent>
<ItemTitle>Title Only</ItemTitle>
</ItemContent>
</Item>
<Item variant="outline">
<ItemContent>
<ItemTitle>Title + Button</ItemTitle>
</ItemContent>
<ItemActions>
<Button variant="outline">Action</Button>
</ItemActions>
</Item>
<Item variant="outline">
<ItemContent>
<ItemTitle>Title + Description</ItemTitle>
<ItemDescription>
This is a description that provides additional context.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="outline">
<ItemContent>
<ItemTitle>Title + Description + Button</ItemTitle>
<ItemDescription>
This item includes a title, description, and action button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline">Action</Button>
</ItemActions>
</Item>
<Item variant="outline">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title</ItemTitle>
</ItemContent>
</Item>
<Item variant="outline">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Button</ItemTitle>
</ItemContent>
<ItemActions>
<Button size="sm">Action</Button>
</ItemActions>
</Item>
<Item variant="outline">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description</ItemTitle>
<ItemDescription>
This item includes media, title, and description.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="outline">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description + Button</ItemTitle>
<ItemDescription>
Complete item with all components: media, title, description, and
button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button size="sm">Action</Button>
</ItemActions>
</Item>
<Item variant="outline">
<ItemContent>
<ItemTitle>Multiple Actions</ItemTitle>
<ItemDescription>
Item with multiple action buttons in the actions area.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Cancel
</Button>
<Button size="sm">Confirm</Button>
</ItemActions>
</Item>
</Example>
{/snippet}
{#snippet MutedVariantItems()}
<Example title="Muted">
<Item variant="muted">
<ItemContent>
<ItemTitle>Title Only</ItemTitle>
</ItemContent>
</Item>
<Item variant="muted">
<ItemContent>
<ItemTitle>Title + Button</ItemTitle>
</ItemContent>
<ItemActions>
<Button variant="outline">Action</Button>
</ItemActions>
</Item>
<Item variant="muted">
<ItemContent>
<ItemTitle>Title + Description</ItemTitle>
<ItemDescription>
This is a description that provides additional context.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="muted">
<ItemContent>
<ItemTitle>Title + Description + Button</ItemTitle>
<ItemDescription>
This item includes a title, description, and action button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline">Action</Button>
</ItemActions>
</Item>
<Item variant="muted">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title</ItemTitle>
</ItemContent>
</Item>
<Item variant="muted">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Button</ItemTitle>
</ItemContent>
<ItemActions>
<Button size="sm">Action</Button>
</ItemActions>
</Item>
<Item variant="muted">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description</ItemTitle>
<ItemDescription>
This item includes media, title, and description.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="muted">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description + Button</ItemTitle>
<ItemDescription>
Complete item with all components: media, title, description, and
button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button size="sm">Action</Button>
</ItemActions>
</Item>
<Item variant="muted">
<ItemContent>
<ItemTitle>Multiple Actions</ItemTitle>
<ItemDescription>
Item with multiple action buttons in the actions area.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Cancel
</Button>
<Button size="sm">Confirm</Button>
</ItemActions>
</Item>
</Example>
{/snippet}
{#snippet DefaultVariantItemsSmall()}
<Example title="Small">
<Item size="sm">
<ItemContent>
<ItemTitle>Title Only</ItemTitle>
</ItemContent>
</Item>
<Item size="sm">
<ItemContent>
<ItemTitle>Title + Button</ItemTitle>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Action
</Button>
</ItemActions>
</Item>
<Item size="sm">
<ItemContent>
<ItemTitle>Title + Description</ItemTitle>
<ItemDescription>
This is a description that provides additional context.
</ItemDescription>
</ItemContent>
</Item>
<Item size="sm">
<ItemContent>
<ItemTitle>Title + Description + Button</ItemTitle>
<ItemDescription>
This item includes a title, description, and action button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Action
</Button>
</ItemActions>
</Item>
<Item size="sm">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title</ItemTitle>
</ItemContent>
</Item>
<Item size="sm">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Button</ItemTitle>
</ItemContent>
<ItemActions>
<Button size="sm">Action</Button>
</ItemActions>
</Item>
<Item size="sm">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description</ItemTitle>
<ItemDescription>
This item includes media, title, and description.
</ItemDescription>
</ItemContent>
</Item>
<Item size="sm">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description + Button</ItemTitle>
<ItemDescription>
Complete item with all components: media, title, description, and
button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button size="sm">Action</Button>
</ItemActions>
</Item>
<Item size="sm">
<ItemContent>
<ItemTitle>Multiple Actions</ItemTitle>
<ItemDescription>
Item with multiple action buttons in the actions area.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Cancel
</Button>
<Button size="sm">Confirm</Button>
</ItemActions>
</Item>
</Example>
{/snippet}
{#snippet OutlineVariantItemsSmall()}
<Example title="Outline - Small">
<Item variant="outline" size="sm">
<ItemContent>
<ItemTitle>Title Only</ItemTitle>
</ItemContent>
</Item>
<Item variant="outline" size="sm">
<ItemContent>
<ItemTitle>Title + Button</ItemTitle>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Action
</Button>
</ItemActions>
</Item>
<Item variant="outline" size="sm">
<ItemContent>
<ItemTitle>Title + Description</ItemTitle>
<ItemDescription>
This is a description that provides additional context.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="outline" size="sm">
<ItemContent>
<ItemTitle>Title + Description + Button</ItemTitle>
<ItemDescription>
This item includes a title, description, and action button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Action
</Button>
</ItemActions>
</Item>
<Item variant="outline" size="sm">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title</ItemTitle>
</ItemContent>
</Item>
<Item variant="outline" size="sm">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Button</ItemTitle>
</ItemContent>
<ItemActions>
<Button size="sm">Action</Button>
</ItemActions>
</Item>
<Item variant="outline" size="sm">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description</ItemTitle>
<ItemDescription>
This item includes media, title, and description.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="outline" size="sm">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description + Button</ItemTitle>
<ItemDescription>
Complete item with all components: media, title, description, and
button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button size="sm">Action</Button>
</ItemActions>
</Item>
<Item variant="outline" size="sm">
<ItemContent>
<ItemTitle>Multiple Actions</ItemTitle>
<ItemDescription>
Item with multiple action buttons in the actions area.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Cancel
</Button>
<Button size="sm">Confirm</Button>
</ItemActions>
</Item>
</Example>
{/snippet}
{#snippet MutedVariantItemsSmall()}
<Example title="Muted - Small">
<Item variant="muted" size="sm">
<ItemContent>
<ItemTitle>Title Only</ItemTitle>
</ItemContent>
</Item>
<Item variant="muted" size="sm">
<ItemContent>
<ItemTitle>Title + Button</ItemTitle>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Action
</Button>
</ItemActions>
</Item>
<Item variant="muted" size="sm">
<ItemContent>
<ItemTitle>Title + Description</ItemTitle>
<ItemDescription>
This is a description that provides additional context.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="muted" size="sm">
<ItemContent>
<ItemTitle>Title + Description + Button</ItemTitle>
<ItemDescription>
This item includes a title, description, and action button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Action
</Button>
</ItemActions>
</Item>
<Item variant="muted" size="sm">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title</ItemTitle>
</ItemContent>
</Item>
<Item variant="muted" size="sm">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Button</ItemTitle>
</ItemContent>
<ItemActions>
<Button size="sm">Action</Button>
</ItemActions>
</Item>
<Item variant="muted" size="sm">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description</ItemTitle>
<ItemDescription>
This item includes media, title, and description.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="muted" size="sm">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description + Button</ItemTitle>
<ItemDescription>
Complete item with all components: media, title, description, and
button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button size="sm">Action</Button>
</ItemActions>
</Item>
<Item variant="muted" size="sm">
<ItemContent>
<ItemTitle>Multiple Actions</ItemTitle>
<ItemDescription>
Item with multiple action buttons in the actions area.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Cancel
</Button>
<Button size="sm">Confirm</Button>
</ItemActions>
</Item>
</Example>
{/snippet}
{#snippet DefaultVariantItemsExtraSmall()}
<Example title="Extra Small">
<Item size="xs">
<ItemContent>
<ItemTitle>Title Only</ItemTitle>
</ItemContent>
</Item>
<Item size="xs">
<ItemContent>
<ItemTitle>Title + Button</ItemTitle>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Action
</Button>
</ItemActions>
</Item>
<Item size="xs">
<ItemContent>
<ItemTitle>Title + Description</ItemTitle>
<ItemDescription>
This is a description that provides additional context.
</ItemDescription>
</ItemContent>
</Item>
<Item size="xs">
<ItemContent>
<ItemTitle>Title + Description + Button</ItemTitle>
<ItemDescription>
This item includes a title, description, and action button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Action
</Button>
</ItemActions>
</Item>
<Item size="xs">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title</ItemTitle>
</ItemContent>
</Item>
<Item size="xs">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Button</ItemTitle>
</ItemContent>
<ItemActions>
<Button size="sm">Action</Button>
</ItemActions>
</Item>
<Item size="xs">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description</ItemTitle>
<ItemDescription>
This item includes media, title, and description.
</ItemDescription>
</ItemContent>
</Item>
<Item size="xs">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description + Button</ItemTitle>
<ItemDescription>
Complete item with all components: media, title, description, and
button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button size="sm">Action</Button>
</ItemActions>
</Item>
<Item size="xs">
<ItemContent>
<ItemTitle>Multiple Actions</ItemTitle>
<ItemDescription>
Item with multiple action buttons in the actions area.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Cancel
</Button>
<Button size="sm">Confirm</Button>
</ItemActions>
</Item>
</Example>
{/snippet}
{#snippet OutlineVariantItemsExtraSmall()}
<Example title="Outline - Extra Small">
<Item variant="outline" size="xs">
<ItemContent>
<ItemTitle>Title Only</ItemTitle>
</ItemContent>
</Item>
<Item variant="outline" size="xs">
<ItemContent>
<ItemTitle>Title + Button</ItemTitle>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Action
</Button>
</ItemActions>
</Item>
<Item variant="outline" size="xs">
<ItemContent>
<ItemTitle>Title + Description</ItemTitle>
<ItemDescription>
This is a description that provides additional context.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="outline" size="xs">
<ItemContent>
<ItemTitle>Title + Description + Button</ItemTitle>
<ItemDescription>
This item includes a title, description, and action button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Action
</Button>
</ItemActions>
</Item>
<Item variant="outline" size="xs">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title</ItemTitle>
</ItemContent>
</Item>
<Item variant="outline" size="xs">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Button</ItemTitle>
</ItemContent>
<ItemActions>
<Button size="sm">Action</Button>
</ItemActions>
</Item>
<Item variant="outline" size="xs">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description</ItemTitle>
<ItemDescription>
This item includes media, title, and description.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="outline" size="xs">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description + Button</ItemTitle>
<ItemDescription>
Complete item with all components: media, title, description, and
button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button size="sm">Action</Button>
</ItemActions>
</Item>
<Item variant="outline" size="xs">
<ItemContent>
<ItemTitle>Multiple Actions</ItemTitle>
<ItemDescription>
Item with multiple action buttons in the actions area.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Cancel
</Button>
<Button size="sm">Confirm</Button>
</ItemActions>
</Item>
</Example>
{/snippet}
{#snippet MutedVariantItemsExtraSmall()}
<Example title="Muted - Extra Small">
<Item variant="muted" size="xs">
<ItemContent>
<ItemTitle>Title Only</ItemTitle>
</ItemContent>
</Item>
<Item variant="muted" size="xs">
<ItemContent>
<ItemTitle>Title + Button</ItemTitle>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Action
</Button>
</ItemActions>
</Item>
<Item variant="muted" size="xs">
<ItemContent>
<ItemTitle>Title + Description</ItemTitle>
<ItemDescription>
This is a description that provides additional context.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="muted" size="xs">
<ItemContent>
<ItemTitle>Title + Description + Button</ItemTitle>
<ItemDescription>
This item includes a title, description, and action button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Action
</Button>
</ItemActions>
</Item>
<Item variant="muted" size="xs">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title</ItemTitle>
</ItemContent>
</Item>
<Item variant="muted" size="xs">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Button</ItemTitle>
</ItemContent>
<ItemActions>
<Button size="sm">Action</Button>
</ItemActions>
</Item>
<Item variant="muted" size="xs">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description</ItemTitle>
<ItemDescription>
This item includes media, title, and description.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="muted" size="xs">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description + Button</ItemTitle>
<ItemDescription>
Complete item with all components: media, title, description, and
button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button size="sm">Action</Button>
</ItemActions>
</Item>
<Item variant="muted" size="xs">
<ItemContent>
<ItemTitle>Multiple Actions</ItemTitle>
<ItemDescription>
Item with multiple action buttons in the actions area.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Cancel
</Button>
<Button size="sm">Confirm</Button>
</ItemActions>
</Item>
</Example>
{/snippet}
{#snippet DefaultLinkItems()}
<Example title="asChild">
<ItemGroup>
<Item render={link}>
<ItemContent>
<ItemTitle>Title Only (Link)</ItemTitle>
</ItemContent>
</Item>
<Item render={link}>
<ItemContent>
<ItemTitle>Title + Description (Link)</ItemTitle>
<ItemDescription>
Clickable item with title and description.
</ItemDescription>
</ItemContent>
</Item>
<Item render={link}>
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title (Link)</ItemTitle>
</ItemContent>
</Item>
<Item render={link}>
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description (Link)</ItemTitle>
<ItemDescription>
Complete link item with media, title, and description.
</ItemDescription>
</ItemContent>
</Item>
<Item render={link}>
<ItemContent>
<ItemTitle>With Actions (Link)</ItemTitle>
<ItemDescription>
Link item that also has action buttons.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Share
</Button>
</ItemActions>
</Item>
</ItemGroup>
</Example>
{/snippet}
{#snippet OutlineLinkItems()}
<Example title="Outline - asChild">
<ItemGroup>
<Item variant="outline" render={link}>
<ItemContent>
<ItemTitle>Title Only (Link)</ItemTitle>
</ItemContent>
</Item>
<Item variant="outline" render={link}>
<ItemContent>
<ItemTitle>Title + Description (Link)</ItemTitle>
<ItemDescription>
Clickable item with title and description.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="outline" render={link}>
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title (Link)</ItemTitle>
</ItemContent>
</Item>
<Item variant="outline" render={link}>
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description (Link)</ItemTitle>
<ItemDescription>
Complete link item with media, title, and description.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="outline" render={link}>
<ItemContent>
<ItemTitle>With Actions (Link)</ItemTitle>
<ItemDescription>
Link item that also has action buttons.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Share
</Button>
</ItemActions>
</Item>
</ItemGroup>
</Example>
{/snippet}
{#snippet MutedLinkItems()}
<Example title="Muted - asChild">
<ItemGroup>
<Item variant="muted" render={link}>
<ItemContent>
<ItemTitle>Title Only (Link)</ItemTitle>
</ItemContent>
</Item>
<Item variant="muted" render={link}>
<ItemContent>
<ItemTitle>Title + Description (Link)</ItemTitle>
<ItemDescription>
Clickable item with title and description.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="muted" render={link}>
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title (Link)</ItemTitle>
</ItemContent>
</Item>
<Item variant="muted" render={link}>
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Media + Title + Description (Link)</ItemTitle>
<ItemDescription>
Complete link item with media, title, and description.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="muted" render={link}>
<ItemContent>
<ItemTitle>With Actions (Link)</ItemTitle>
<ItemDescription>
Link item that also has action buttons.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Share
</Button>
</ItemActions>
</Item>
</ItemGroup>
</Example>
{/snippet}
{#snippet DefaultItemGroup()}
<Example title="ItemGroup">
<ItemGroup>
<Item>
<ItemContent>
<ItemTitle>Item 1</ItemTitle>
<ItemDescription>First item in the group.</ItemDescription>
</ItemContent>
</Item>
<Item>
<ItemContent>
<ItemTitle>Item 2</ItemTitle>
<ItemDescription>Second item in the group.</ItemDescription>
</ItemContent>
</Item>
<Item>
<ItemContent>
<ItemTitle>Item 3</ItemTitle>
<ItemDescription>Third item in the group.</ItemDescription>
</ItemContent>
</Item>
</ItemGroup>
</Example>
{/snippet}
{#snippet OutlineItemGroup()}
<Example title="Outline - ItemGroup">
<ItemGroup>
<Item variant="outline">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Item 1</ItemTitle>
<ItemDescription>First item with icon.</ItemDescription>
</ItemContent>
</Item>
<Item variant="outline">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Item 2</ItemTitle>
<ItemDescription>Second item with icon.</ItemDescription>
</ItemContent>
</Item>
<Item variant="outline">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Item 3</ItemTitle>
<ItemDescription>Third item with icon.</ItemDescription>
</ItemContent>
</Item>
</ItemGroup>
</Example>
{/snippet}
{#snippet MutedItemGroup()}
<Example title="Muted - ItemGroup">
<ItemGroup>
<Item variant="muted">
<ItemContent>
<ItemTitle>Item 1</ItemTitle>
<ItemDescription>First item in muted group.</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Action
</Button>
</ItemActions>
</Item>
<Item variant="muted">
<ItemContent>
<ItemTitle>Item 2</ItemTitle>
<ItemDescription>Second item in muted group.</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Action
</Button>
</ItemActions>
</Item>
<Item variant="muted">
<ItemContent>
<ItemTitle>Item 3</ItemTitle>
<ItemDescription>Third item in muted group.</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Action
</Button>
</ItemActions>
</Item>
</ItemGroup>
</Example>
{/snippet}
{#snippet ItemSeparatorExample()}
<Example title="ItemSeparator">
<ItemGroup>
<Item variant="outline">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Inbox</ItemTitle>
<ItemDescription>View all incoming messages.</ItemDescription>
</ItemContent>
</Item>
<ItemSeparator />
<Item variant="outline">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Sent</ItemTitle>
<ItemDescription>View all sent messages.</ItemDescription>
</ItemContent>
</Item>
<ItemSeparator />
<Item variant="outline">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Drafts</ItemTitle>
<ItemDescription>View all draft messages.</ItemDescription>
</ItemContent>
</Item>
<ItemSeparator />
<Item variant="outline">
<ItemMedia variant="icon">
<IconPlaceholder
lucide="InboxIcon"
tabler="IconArchive"
hugeicons="Archive02Icon"
phosphor="ArchiveIcon"
remixicon="RiArchiveLine"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Archive</ItemTitle>
<ItemDescription>View archived messages.</ItemDescription>
</ItemContent>
</Item>
</ItemGroup>
</Example>
{/snippet}
{#snippet ItemHeaderExamples()}
<Example title="ItemHeader">
<Item>
<ItemHeader>
<span class="text-sm font-medium">Design System</span>
</ItemHeader>
<ItemContent>
<ItemTitle>Component Library</ItemTitle>
<ItemDescription>
A comprehensive collection of reusable UI components for building
consistent interfaces.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="outline">
<ItemHeader>
<span class="text-sm font-medium">Marketing</span>
</ItemHeader>
<ItemContent>
<ItemTitle>Campaign Analytics</ItemTitle>
<ItemDescription>
Track performance metrics and engagement rates across all marketing
channels.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="muted">
<ItemHeader>
<span class="text-sm font-medium">Engineering</span>
</ItemHeader>
<ItemContent>
<ItemTitle>API Documentation</ItemTitle>
<ItemDescription>
Complete reference guide for all available endpoints and
authentication methods.
</ItemDescription>
</ItemContent>
</Item>
</Example>
{/snippet}
{#snippet ItemFooterExamples()}
<Example title="ItemFooter">
<Item>
<ItemContent>
<ItemTitle>Quarterly Report Q4 2024</ItemTitle>
<ItemDescription>
Financial overview including revenue, expenses, and growth metrics
for the fourth quarter.
</ItemDescription>
</ItemContent>
<ItemFooter>
<span class="text-sm text-muted-foreground">
Last updated 2 hours ago
</span>
</ItemFooter>
</Item>
<Item variant="outline">
<ItemContent>
<ItemTitle>User Research Findings</ItemTitle>
<ItemDescription>
Insights from interviews and surveys conducted with 50+ users across
different demographics.
</ItemDescription>
</ItemContent>
<ItemFooter>
<span class="text-sm text-muted-foreground">
Created by Sarah Chen
</span>
</ItemFooter>
</Item>
<Item variant="muted">
<ItemContent>
<ItemTitle>Product Roadmap</ItemTitle>
<ItemDescription>
Planned features and improvements scheduled for the next three
months.
</ItemDescription>
</ItemContent>
<ItemFooter>
<span class="text-sm text-muted-foreground">12 comments</span>
</ItemFooter>
</Item>
</Example>
{/snippet}
{#snippet ItemHeaderAndFooterExamples()}
<Example title="ItemHeader + ItemFooter">
<Item>
<ItemHeader>
<span class="text-sm font-medium">Team Project</span>
</ItemHeader>
<ItemContent>
<ItemTitle>Website Redesign</ItemTitle>
<ItemDescription>
Complete overhaul of the company website with modern design
principles and improved user experience.
</ItemDescription>
</ItemContent>
<ItemFooter>
<span class="text-sm text-muted-foreground">
Updated 5 minutes ago
</span>
</ItemFooter>
</Item>
<Item variant="outline">
<ItemHeader>
<span class="text-sm font-medium">Client Work</span>
</ItemHeader>
<ItemContent>
<ItemTitle>Mobile App Development</ItemTitle>
<ItemDescription>
Building a cross-platform mobile application for iOS and Android
with React Native.
</ItemDescription>
</ItemContent>
<ItemFooter>
<span class="text-sm text-muted-foreground">
Status: In Progress
</span>
</ItemFooter>
</Item>
<Item variant="muted">
<ItemHeader>
<span class="text-sm font-medium">Documentation</span>
</ItemHeader>
<ItemContent>
<ItemTitle>API Integration Guide</ItemTitle>
<ItemDescription>
Step-by-step instructions for integrating third-party APIs with
authentication and error handling.
</ItemDescription>
</ItemContent>
<ItemFooter>
<span class="text-sm text-muted-foreground">
Category: Technical • 3 attachments
</span>
</ItemFooter>
</Item>
</Example>
{/snippet}
{#snippet DefaultVariantItemsWithImage()}
<Example title="Default - ItemMedia image">
<Item>
<ItemMedia variant="image">
<img
src="https://avatar.vercel.sh/Project"
alt="Project"
width={40}
height={40}
class="object-cover grayscale"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Project Dashboard</ItemTitle>
<ItemDescription>
Overview of project settings and configuration.
</ItemDescription>
</ItemContent>
</Item>
<Item>
<ItemMedia variant="image">
<img
src="https://avatar.vercel.sh/Document"
alt="Document"
width={40}
height={40}
class="object-cover grayscale"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Document</ItemTitle>
<ItemDescription>A document with metadata displayed.</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
View
</Button>
</ItemActions>
</Item>
<Item>
<ItemMedia variant="image">
<img
src="https://avatar.vercel.sh/File"
alt="File"
width={40}
height={40}
class="object-cover grayscale"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>File Attachment</ItemTitle>
<ItemDescription>
Complete file with image, title, description, and action button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button size="sm">Download</Button>
</ItemActions>
</Item>
</Example>
{/snippet}
{#snippet OutlineVariantItemsWithImage()}
<Example title="Outline - ItemMedia image">
<Item variant="outline">
<ItemMedia variant="image">
<img
src="https://avatar.vercel.sh/Project"
alt="Project"
width={40}
height={40}
class="object-cover grayscale"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Project Dashboard</ItemTitle>
<ItemDescription>
Overview of project settings and configuration.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="outline">
<ItemMedia variant="image">
<img
src="https://avatar.vercel.sh/Document"
alt="Document"
width={40}
height={40}
class="object-cover grayscale"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Document</ItemTitle>
<ItemDescription>A document with metadata displayed.</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
View
</Button>
</ItemActions>
</Item>
<Item variant="outline">
<ItemMedia variant="image">
<img
src="https://avatar.vercel.sh/File"
alt="File"
width={40}
height={40}
class="object-cover grayscale"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>File Attachment</ItemTitle>
<ItemDescription>
Complete file with image, title, description, and action button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button size="sm">Download</Button>
</ItemActions>
</Item>
</Example>
{/snippet}
{#snippet OutlineVariantItemsWithImageSmall()}
<Example title="Outline - ItemMedia image - Small">
<Item variant="outline" size="sm">
<ItemMedia variant="image">
<img
src="https://avatar.vercel.sh/Project"
alt="Project"
width={40}
height={40}
class="object-cover grayscale"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Project Dashboard</ItemTitle>
<ItemDescription>
Overview of project settings and configuration.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="outline" size="sm">
<ItemMedia variant="image">
<img
src="https://avatar.vercel.sh/Document"
alt="Document"
width={40}
height={40}
class="object-cover grayscale"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Document</ItemTitle>
<ItemDescription>A document with metadata displayed.</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
View
</Button>
</ItemActions>
</Item>
<Item variant="outline" size="sm">
<ItemMedia variant="image">
<img
src="https://avatar.vercel.sh/File"
alt="File"
width={40}
height={40}
class="object-cover grayscale"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>File Attachment</ItemTitle>
<ItemDescription>
Complete file with image, title, description, and action button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button size="sm">Download</Button>
</ItemActions>
</Item>
</Example>
{/snippet}
{#snippet OutlineVariantItemsWithImageExtraSmall()}
<Example title="Outline - ItemMedia image - Extra Small">
<Item variant="outline" size="xs">
<ItemMedia variant="image">
<img
src="https://avatar.vercel.sh/Project"
alt="Project"
width={40}
height={40}
class="object-cover grayscale"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Project Dashboard</ItemTitle>
</ItemContent>
</Item>
<Item variant="outline" size="xs">
<ItemMedia variant="image">
<img
src="https://avatar.vercel.sh/Document"
alt="Document"
width={40}
height={40}
class="object-cover grayscale"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Document</ItemTitle>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
View
</Button>
</ItemActions>
</Item>
<Item variant="outline" size="xs">
<ItemMedia variant="image">
<img
src="https://avatar.vercel.sh/File"
alt="File"
width={40}
height={40}
class="object-cover grayscale"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>File Attachment</ItemTitle>
</ItemContent>
<ItemActions>
<Button size="sm">Download</Button>
</ItemActions>
</Item>
</Example>
{/snippet}
{#snippet MutedVariantItemsWithImage()}
<Example title="Muted - ItemMedia image">
<Item variant="muted">
<ItemMedia variant="image">
<img
src="https://avatar.vercel.sh/Project"
alt="Project"
width={40}
height={40}
class="object-cover grayscale"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Project Dashboard</ItemTitle>
<ItemDescription>
Overview of project settings and configuration.
</ItemDescription>
</ItemContent>
</Item>
<Item variant="muted">
<ItemMedia variant="image">
<img
src="https://avatar.vercel.sh/Document"
alt="Document"
width={40}
height={40}
class="object-cover grayscale"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>Document</ItemTitle>
<ItemDescription>A document with metadata displayed.</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
View
</Button>
</ItemActions>
</Item>
<Item variant="muted">
<ItemMedia variant="image">
<img
src="https://avatar.vercel.sh/File"
alt="File"
width={40}
height={40}
class="object-cover grayscale"
/>
</ItemMedia>
<ItemContent>
<ItemTitle>File Attachment</ItemTitle>
<ItemDescription>
Complete file with image, title, description, and action button.
</ItemDescription>
</ItemContent>
<ItemActions>
<Button size="sm">Download</Button>
</ItemActions>
</Item>
</Example>
{/snippet}
<ExampleWrapper>
{@render DefaultVariantItems()}
{@render OutlineVariantItems()}
{@render MutedVariantItems()}
{@render DefaultVariantItemsSmall()}
{@render OutlineVariantItemsSmall()}
{@render MutedVariantItemsSmall()}
{@render DefaultVariantItemsExtraSmall()}
{@render OutlineVariantItemsExtraSmall()}
{@render MutedVariantItemsExtraSmall()}
{@render DefaultLinkItems()}
{@render OutlineLinkItems()}
{@render MutedLinkItems()}
{@render DefaultItemGroup()}
{@render OutlineItemGroup()}
{@render MutedItemGroup()}
{@render ItemSeparatorExample()}
{@render ItemHeaderExamples()}
{@render ItemFooterExamples()}
{@render ItemHeaderAndFooterExamples()}
{@render DefaultVariantItemsWithImage()}
{@render OutlineVariantItemsWithImage()}
{@render OutlineVariantItemsWithImageSmall()}
{@render OutlineVariantItemsWithImageExtraSmall()}
{@render MutedVariantItemsWithImage()}
</ExampleWrapper>Installation
Install the dependencies
pnpm add cn class-variance-authority github:sveltery/baseCopy the component
Copy the following files into src/lib/components/ui/item.
It imports the separator component, so copy its folder too.
<script lang="ts">
import type { ItemProps, ItemState } from './types.js';
import { cn } from 'cn';
import { itemVariants } from './variants.js';
let { children, class: classProp, variant = 'default', size = 'default', render, ...props }: ItemProps = $props();
const state: ItemState = $derived({ slot: 'item', variant, size });
const hostProps = $derived({ 'data-slot': state.slot, 'data-variant': state.variant, 'data-size': state.size, ...props, class: cn(itemVariants({ variant, size, class: classProp })) });
</script>
{#if render}
{@render render(hostProps, state, children)}
{:else}
<div {...hostProps}>{@render children?.()}</div>
{/if}<script lang="ts">
import type { ItemActionsProps } from './types.js';
import { cn } from 'cn';
let { children, class: classProp, ...props }: ItemActionsProps = $props();
</script>
<div data-slot="item-actions" {...props} class={cn('gap-2 flex items-center', classProp)}>
{@render children?.()}
</div><script lang="ts">
import type { ItemContentProps } from './types.js';
import { cn } from 'cn';
let { children, class: classProp, ...props }: ItemContentProps = $props();
</script>
<div data-slot="item-content" {...props} class={cn('gap-1 group-data-[size=xs]/item:gap-0 flex flex-1 flex-col [&+[data-slot=item-content]]:flex-none', classProp)}>
{@render children?.()}
</div><script lang="ts">
import type { ItemDescriptionProps } from './types.js';
import { cn } from 'cn';
let { children, class: classProp, ...props }: ItemDescriptionProps = $props();
</script>
<p data-slot="item-description" {...props} class={cn('text-muted-foreground text-left text-sm leading-normal group-data-[size=xs]/item:text-xs line-clamp-2 font-normal [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary', classProp)}>
{@render children?.()}
</p><script lang="ts">
import type { ItemFooterProps } from './types.js';
import { cn } from 'cn';
let { children, class: classProp, ...props }: ItemFooterProps = $props();
</script>
<div data-slot="item-footer" {...props} class={cn('gap-2 flex basis-full items-center justify-between', classProp)}>
{@render children?.()}
</div><script lang="ts">
import type { ItemGroupProps } from './types.js';
import { cn } from 'cn';
let { children, class: classProp, ...props }: ItemGroupProps = $props();
</script>
<div role="list" data-slot="item-group" {...props} class={cn('gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2 group/item-group flex w-full flex-col', classProp)}>
{@render children?.()}
</div><script lang="ts">
import type { ItemHeaderProps } from './types.js';
import { cn } from 'cn';
let { children, class: classProp, ...props }: ItemHeaderProps = $props();
</script>
<div data-slot="item-header" {...props} class={cn('gap-2 flex basis-full items-center justify-between', classProp)}>
{@render children?.()}
</div><script lang="ts">
import type { ItemMediaProps } from './types.js';
import { cn } from 'cn';
import { itemMediaVariants } from './variants.js';
let { children, class: classProp, variant = 'default', ...props }: ItemMediaProps = $props();
</script>
<div data-slot="item-media" data-variant={variant} {...props} class={cn(itemMediaVariants({ variant, class: classProp }))}>
{@render children?.()}
</div><script lang="ts">
import type { ItemSeparatorProps } from './types.js';
import { cn } from 'cn';
import { Separator } from '../separator/index.js';
let { class: classProp, ...props }: ItemSeparatorProps = $props();
</script>
<Separator data-slot="item-separator" orientation="horizontal" class={cn('my-2', classProp)} {...props} /><script lang="ts">
import type { ItemTitleProps } from './types.js';
import { cn } from 'cn';
let { children, class: classProp, ...props }: ItemTitleProps = $props();
</script>
<div data-slot="item-title" {...props} class={cn('gap-2 text-sm leading-snug font-medium underline-offset-4 line-clamp-1 flex w-fit items-center', classProp)}>
{@render children?.()}
</div>import type { HTMLAttributes } from 'svelte/elements';
import type { RenderSnippet } from '../shared/render.js';
import type { SeparatorProps } from '../separator/index.js';
import type { ItemMediaVariants, ItemVariants } from './variants.js';
type NativeItemProps = HTMLAttributes<HTMLDivElement>;
export type ItemState = { slot: 'item'; variant: ItemVariants['variant']; size: ItemVariants['size'] };
export type ItemProps = NativeItemProps & ItemVariants & { render?: RenderSnippet<ItemState, HTMLDivElement> };
export type ItemGroupProps = NativeItemProps;
export type ItemSeparatorProps = SeparatorProps;
export type ItemMediaProps = NativeItemProps & ItemMediaVariants;
export type ItemContentProps = NativeItemProps;
export type ItemTitleProps = NativeItemProps;
export type ItemDescriptionProps = HTMLAttributes<HTMLParagraphElement>;
export type ItemActionsProps = NativeItemProps;
export type ItemHeaderProps = NativeItemProps;
export type ItemFooterProps = NativeItemProps;// Adapted from shadcn-ui/ui d75a96ab; MIT: packages/ui/THIRD_PARTY_NOTICES.md.
import { cva } from 'class-variance-authority';
import type { VariantProps } from 'class-variance-authority';
export const itemVariants = cva('[a]:hover:bg-muted rounded-lg border text-sm group/item flex w-full flex-wrap items-center transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [a]:transition-colors', {
variants: {
variant: { default: 'border-transparent', outline: 'border-border', muted: 'bg-muted/50 border-transparent' },
size: { default: 'gap-2.5 px-3 py-2.5', sm: 'gap-2.5 px-3 py-2.5', xs: 'gap-2 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0' },
},
defaultVariants: { variant: 'default', size: 'default' },
});
export const itemMediaVariants = cva('gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start flex shrink-0 items-center justify-center [&_svg]:pointer-events-none', {
variants: {
variant: { default: 'bg-transparent', icon: "[&_svg:not([class*='size-'])]:size-4", image: 'size-10 overflow-hidden rounded-sm group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover' },
},
defaultVariants: { variant: 'default' },
});
export type ItemVariants = VariantProps<typeof itemVariants>;
export type ItemMediaVariants = VariantProps<typeof itemMediaVariants>;import type { Snippet } from 'svelte';
import type { HTMLAttributes } from 'svelte/elements';
/**
* Replaces a part's default element, like the `render` snippets of Sveltery Base.
* Spread `props` onto the host element and render `children` inside it.
* `Host` is the element the part renders by default, so its typed event handlers carry over.
*/
export type RenderSnippet<State, Host extends HTMLElement = HTMLElement> = Snippet<[props: HTMLAttributes<Host>, state: State, children: Snippet | undefined]>;export { default as Item } from './Item.svelte';
export { default as ItemGroup } from './ItemGroup.svelte';
export { default as ItemSeparator } from './ItemSeparator.svelte';
export { default as ItemMedia } from './ItemMedia.svelte';
export { default as ItemContent } from './ItemContent.svelte';
export { default as ItemTitle } from './ItemTitle.svelte';
export { default as ItemDescription } from './ItemDescription.svelte';
export { default as ItemActions } from './ItemActions.svelte';
export { default as ItemHeader } from './ItemHeader.svelte';
export { default as ItemFooter } from './ItemFooter.svelte';
export { itemVariants, itemMediaVariants } from './variants.js';
export type { ItemVariants, ItemMediaVariants } from './variants.js';
export type {
ItemProps, ItemState, ItemGroupProps, ItemSeparatorProps, ItemMediaProps, ItemContentProps, ItemTitleProps,
ItemDescriptionProps, ItemActionsProps, ItemHeaderProps, ItemFooterProps,
} from './types.js';Update the import paths
Change the imports to match your project setup.
Usage
<script lang="ts">
import { Button } from '$lib/components/ui/button';
import { Item, ItemActions, ItemContent, ItemDescription, ItemTitle } from '$lib/components/ui/item';
</script><Item variant="outline">
<ItemContent>
<ItemTitle>Basic Item</ItemTitle>
<ItemDescription>A simple item with title and description.</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">Action</Button>
</ItemActions>
</Item>Link
Pass a render snippet to render the item as a link. Spread props onto it and render children inside it.
<Item>
{#snippet render(props, state, children)}
<a href="/settings" {...props}>{@render children?.()}</a>
{/snippet}
<ItemContent>
<ItemTitle>Settings</ItemTitle>
</ItemContent>
</Item>