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
}
];
}