import { Component, ChangeDetectionStrategy } from '@angular/core'; import { CommonModule } from '@angular/common'; import { ListItemComponent, ListItemData } from './list-item.component'; import { ListContainerComponent } from './list-container.component'; @Component({ selector: 'ui-list-examples', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, ListItemComponent, ListContainerComponent], template: `

List Component Examples

Text Lists - Different Sizes

Small (sm)

@for (item of basicTextItems; track item.primary) { }

Medium (md)

@for (item of basicTextItems; track item.primary) { }

Large (lg)

@for (item of basicTextItems; track item.primary) { }

Multi-line Text Lists

Two Lines

@for (item of twoLineItems; track item.primary) { }

Three Lines

@for (item of threeLineItems; track item.primary) { }

Lists with Avatars

Avatar + One Line

@for (item of avatarItems; track item.primary) { }

Avatar + Two Lines

@for (item of avatarTwoLineItems; track item.primary) { 2h }

Lists with Media

Media + Two Lines

@for (item of mediaItems; track item.primary) { }

Media + Three Lines

@for (item of mediaThreeLineItems; track item.primary) {
4.8
}

Scrollable List

@for (item of longList; track item.primary) { @if (item.selected) { } }

Interactive States

@for (item of interactiveItems; track item.primary) { @if (item.selected) { } @else { } }
`, styleUrls: ['./list-examples.component.scss'] }) export class ListExamplesComponent { basicTextItems: ListItemData[] = [ { primary: 'Inbox' }, { primary: 'Starred' }, { primary: 'Sent' }, { primary: 'Drafts' }, { primary: 'Archive' } ]; twoLineItems: ListItemData[] = [ { primary: 'Meeting with Design Team', secondary: 'Discuss new component library architecture and implementation' }, { primary: 'Code Review - Authentication', secondary: 'Review pull request #247 for OAuth integration updates' }, { primary: 'Performance Optimization', secondary: 'Analyze bundle size and implement lazy loading strategies' } ]; threeLineItems: ListItemData[] = [ { primary: 'Angular 19 Migration', secondary: 'Upgrade project to latest Angular version with new control flow', tertiary: 'Estimated completion: Next Sprint' }, { primary: 'Design System Documentation', secondary: 'Create comprehensive documentation for all components', tertiary: 'Priority: High - Needed for team onboarding' } ]; avatarItems: ListItemData[] = [ { primary: 'John Doe', avatarSrc: 'https://api.dicebear.com/7.x/avataaars/svg?seed=john', avatarAlt: 'John Doe avatar' }, { primary: 'Jane Smith', avatarSrc: 'https://api.dicebear.com/7.x/avataaars/svg?seed=jane', avatarAlt: 'Jane Smith avatar' }, { primary: 'Mike Johnson', avatarSrc: 'https://api.dicebear.com/7.x/avataaars/svg?seed=mike', avatarAlt: 'Mike Johnson avatar' } ]; avatarTwoLineItems: ListItemData[] = [ { primary: 'Sarah Wilson', secondary: 'Hey! How\'s the new component library coming along?', avatarSrc: 'https://api.dicebear.com/7.x/avataaars/svg?seed=sarah', avatarAlt: 'Sarah Wilson avatar' }, { primary: 'Alex Chen', secondary: 'The design tokens look great. Ready for review.', avatarSrc: 'https://api.dicebear.com/7.x/avataaars/svg?seed=alex', avatarAlt: 'Alex Chen avatar' } ]; mediaItems: ListItemData[] = [ { primary: 'Angular Fundamentals', secondary: 'Complete guide to modern Angular development', mediaSrc: 'https://picsum.photos/80/80?random=1', mediaAlt: 'Angular course thumbnail' }, { primary: 'TypeScript Deep Dive', secondary: 'Advanced TypeScript patterns and best practices', mediaSrc: 'https://picsum.photos/80/80?random=2', mediaAlt: 'TypeScript course thumbnail' } ]; mediaThreeLineItems: ListItemData[] = [ { primary: 'Design Systems at Scale', secondary: 'Building maintainable design systems for large organizations', tertiary: 'Duration: 2h 30m • Updated: Today', mediaSrc: 'https://picsum.photos/80/80?random=3', mediaAlt: 'Design systems course' }, { primary: 'Component Architecture', secondary: 'Scalable component patterns in modern web applications', tertiary: 'Duration: 1h 45m • Updated: Yesterday', mediaSrc: 'https://picsum.photos/80/80?random=4', mediaAlt: 'Component architecture course' } ]; longList: ListItemData[] = Array.from({ length: 20 }, (_, i) => ({ primary: `Contact ${i + 1}`, secondary: `contact${i + 1}@example.com`, avatarSrc: `https://api.dicebear.com/7.x/avataaars/svg?seed=contact${i}`, avatarAlt: `Contact ${i + 1} avatar`, selected: i === 3 || i === 7 || i === 12 })); interactiveItems: ListItemData[] = [ { primary: 'Enable Notifications', secondary: 'Get notified about important updates', avatarSrc: 'https://api.dicebear.com/7.x/avataaars/svg?seed=notify', selected: false }, { primary: 'Dark Mode', secondary: 'Switch to dark theme', avatarSrc: 'https://api.dicebear.com/7.x/avataaars/svg?seed=dark', selected: true }, { primary: 'Auto-save', secondary: 'Automatically save your work', avatarSrc: 'https://api.dicebear.com/7.x/avataaars/svg?seed=save', selected: false, disabled: true } ]; }