Basic
Use an item to align media, content, descriptions, and trailing actions.
Icons by @ng-icons/tabler-icons
The component library does not provide icons.
Composable row primitive with media, content, descriptions, actions, grouping, links, sizing, and RTL support.
Preview
TS
import { FrItemModule } from '@frame-ui-ng/components/item';
import { FrButtonModule } from '@frame-ui-ng/components/button';HTML
<div frItem variant="outline">
<span frItemMedia variant="icon">
<ng-icon name="tablerFileText" />
</span>
<span frItemContent>
<span frItemTitle>Component documentation</span>
<span frItemDescription>
Build rows with media, content, descriptions, and actions.
</span>
</span>
<span frItemActions>
<button frButton appearance="outline" size="sm" type="button">Open</button>
</span>
</div>Use an item to align media, content, descriptions, and trailing actions.
Wrap related rows in an item group and separate them with item separators.
Apply FrItem to an anchor and mark it interactive when the whole row navigates.
Use default, outline, or muted variants depending on row emphasis.
Use default, sm, or xs sizes for different row densities.
Use media variants for icons, images, and other leading visuals.
Pair item media with Avatar for people, teams, and account rows.
Use actions for controls, badges, shortcuts, or row-level metadata.
Items use logical spacing, so media and actions adapt when direction changes.
Override item tokens locally to tune row density, media treatment, hover states, and grouped surfaces without changing the markup.
Inspect the item root, grouped surface, media, content, text, actions, footer, and separator tokens.
Use these CSS custom properties to customize item spacing, variants, media, typography, actions, and compact sizes.
SCSS
--frame-item-gap: 0.875rem;
--frame-item-padding: 1rem;
--frame-item-radius: var(--frame-radius-lg);
--frame-item-bg: transparent;
--frame-item-color: var(--frame-foreground);
--frame-item-border: transparent;
--frame-item-outline-border: var(--frame-border);
--frame-item-muted-bg: var(--frame-muted);
--frame-item-hover-bg: var(--frame-accent);
--frame-item-hover-color: var(--frame-accent-foreground);
--frame-item-focus-shadow: 0 0 0 3px color-mix(in srgb, var(--frame-ring) 24%, transparent);
--frame-item-disabled-opacity: 0.5;
--frame-item-content-gap: 0.25rem;
--frame-item-header-gap: 0.625rem;
--frame-item-footer-gap: 0.5rem;
--frame-item-actions-gap: 0.5rem;
--frame-item-media-size: 2.5rem;
--frame-item-media-radius: var(--frame-radius-md);
--frame-item-media-bg: var(--frame-muted);
--frame-item-media-color: var(--frame-muted-foreground);
--frame-item-media-icon-size: 1.25rem;
--frame-item-title-color: var(--frame-foreground);
--frame-item-title-font-size: 0.9375rem;
--frame-item-title-font-weight: 600;
--frame-item-description-color: var(--frame-muted-foreground);
--frame-item-description-font-size: 0.875rem;
--frame-item-sm-padding: 0.75rem;
--frame-item-sm-media-size: 2rem;
--frame-item-sm-title-font-size: 0.875rem;
--frame-item-xs-padding: 0.5rem;
--frame-item-xs-media-size: 1.75rem;
--frame-item-xs-title-font-size: 0.8125rem;