Item
Added 14 October 2026
React
Codecomponents/react/item-demo.tsx
import {
Item,
ItemActions,
ItemContent,
ItemDescription,
ItemGroup,
ItemMedia,
ItemSeparator,
ItemTitle,
Button,
Badge,
} from '@stroeer-labs/design-library/react';
import {BadgeCheckIcon, ChevronRightIcon} from 'lucide-react';
export function ItemDemo() {
return (
<div className="space-y-6">
<div className="space-y-2">
<p className="text-xs font-medium text-muted-foreground">Variants</p>
<div className="flex flex-col gap-3">
<Item variant="default">
<ItemContent>
<ItemTitle>Default</ItemTitle>
<ItemDescription>Transparent — a flat row inside a list or panel.</ItemDescription>
</ItemContent>
</Item>
<Item variant="outline">
<ItemContent>
<ItemTitle>Outline</ItemTitle>
<ItemDescription>Bordered — the item reads as its own card.</ItemDescription>
</ItemContent>
</Item>
<Item variant="muted">
<ItemContent>
<ItemTitle>Muted</ItemTitle>
<ItemDescription>Filled — a subtly recessed surface.</ItemDescription>
</ItemContent>
</Item>
</div>
</div>
<div className="space-y-2">
<p className="text-xs font-medium text-muted-foreground">As link (render prop)</p>
{/* biome-ignore lint/a11y/useAnchorContent: children are merged into the anchor by the render prop (Base UI useRender) */}
<Item variant="outline" render={<a href="/components/item" />}>
<ItemContent>
<ItemTitle>Item documentation</ItemTitle>
<ItemDescription>The whole row is one anchor — hover and focus land on it.</ItemDescription>
</ItemContent>
<ItemActions>
<ChevronRightIcon className="size-4 text-muted-foreground" />
</ItemActions>
</Item>
</div>
<div className="space-y-2">
<p className="text-xs font-medium text-muted-foreground">Media, content & actions</p>
<Item variant="outline">
<ItemMedia variant="icon">
<BadgeCheckIcon />
</ItemMedia>
<ItemContent>
<ItemTitle>Your profile is verified</ItemTitle>
<ItemDescription>Everyone can see your verified badge.</ItemDescription>
</ItemContent>
<ItemActions>
<Button variant="outline" size="sm">
Manage
</Button>
</ItemActions>
</Item>
</div>
<div className="space-y-2">
<p className="text-xs font-medium text-muted-foreground">Group with separators</p>
<ItemGroup className="rounded-md border border-border">
<Item size="sm">
<ItemContent>
<ItemTitle>Documents</ItemTitle>
</ItemContent>
<ItemActions>
<Badge variant="secondary">12</Badge>
<ChevronRightIcon className="size-4 text-muted-foreground" />
</ItemActions>
</Item>
<ItemSeparator />
<Item size="sm">
<ItemContent>
<ItemTitle>Shared with me</ItemTitle>
</ItemContent>
<ItemActions>
<Badge variant="secondary">3</Badge>
<ChevronRightIcon className="size-4 text-muted-foreground" />
</ItemActions>
</Item>
</ItemGroup>
</div>
</div>
);
}Angular
Codecomponents/angular/item-demo.ts
import {Component} from '@angular/core';
import {NgIcon, provideIcons} from '@ng-icons/core';
import {lucideBadgeCheck, lucideChevronRight} from '@ng-icons/lucide';
import {HlmItemImports, HlmButtonImports, HlmBadgeImports} from '@stroeer-labs/design-library/angular';
@Component({
selector: 'dl-item-demo',
standalone: true,
imports: [HlmItemImports, HlmButtonImports, HlmBadgeImports, NgIcon],
viewProviders: [provideIcons({lucideBadgeCheck, lucideChevronRight})],
template: `
<div class="space-y-6">
<div class="space-y-2">
<p class="text-xs font-medium text-muted-foreground">Variants</p>
<div class="flex flex-col gap-3">
<div hlmItem variant="default">
<div hlmItemContent>
<div hlmItemTitle>Default</div>
<p hlmItemDescription>Transparent — a flat row inside a list or panel.</p>
</div>
</div>
<div hlmItem variant="outline">
<div hlmItemContent>
<div hlmItemTitle>Outline</div>
<p hlmItemDescription>Bordered — the item reads as its own card.</p>
</div>
</div>
<div hlmItem variant="muted">
<div hlmItemContent>
<div hlmItemTitle>Muted</div>
<p hlmItemDescription>Filled — a subtly recessed surface.</p>
</div>
</div>
</div>
</div>
<div class="space-y-2">
<p class="text-xs font-medium text-muted-foreground">As link (anchor host)</p>
<a hlmItem variant="outline" href="/components/item">
<div hlmItemContent>
<div hlmItemTitle>Item documentation</div>
<p hlmItemDescription>The whole row is one anchor — hover and focus land on it.</p>
</div>
<div hlmItemActions>
<ng-icon name="lucideChevronRight" class="text-muted-foreground" />
</div>
</a>
</div>
<div class="space-y-2">
<p class="text-xs font-medium text-muted-foreground">Media, content & actions</p>
<div hlmItem variant="outline">
<div hlmItemMedia variant="icon">
<ng-icon name="lucideBadgeCheck" />
</div>
<div hlmItemContent>
<div hlmItemTitle>Your profile is verified</div>
<p hlmItemDescription>Everyone can see your verified badge.</p>
</div>
<div hlmItemActions>
<button hlmBtn variant="outline" size="sm">Manage</button>
</div>
</div>
</div>
<div class="space-y-2">
<p class="text-xs font-medium text-muted-foreground">Group with separators</p>
<div hlmItemGroup class="rounded-md border border-border">
<div hlmItem size="sm">
<div hlmItemContent>
<div hlmItemTitle>Documents</div>
</div>
<div hlmItemActions>
<span hlmBadge variant="secondary">12</span>
<ng-icon name="lucideChevronRight" class="size-4 text-muted-foreground" />
</div>
</div>
<hlm-item-separator />
<div hlmItem size="sm">
<div hlmItemContent>
<div hlmItemTitle>Shared with me</div>
</div>
<div hlmItemActions>
<span hlmBadge variant="secondary">3</span>
<ng-icon name="lucideChevronRight" class="size-4 text-muted-foreground" />
</div>
</div>
</div>
</div>
</div>
`,
})
export class ItemDemoComponent {}