2.0 KiB
2.0 KiB
6. Components Architecture
Component Hierarchy
src/components/
├── ui/ # shadcn/ui primitives
│ ├── button.tsx
│ ├── input.tsx
│ ├── dialog.tsx
│ ├── table.tsx
│ ├── select.tsx
│ ├── checkbox.tsx
│ ├── tabs.tsx
│ ├── card.tsx
│ ├── badge.tsx
│ ├── progress.tsx
│ └── ...
│
├── layout/ # Layout components
│ ├── app-shell.tsx # Main layout wrapper
│ ├── app-sidebar.tsx # Navigation sidebar
│ └── app-header.tsx # Top header with breadcrumbs
│
├── characters/ # Character feature components
│ ├── character-list.tsx
│ ├── character-card.tsx
│ ├── character-form.tsx
│ ├── character-filters.tsx
│ └── character-bulk-actions.tsx
│
├── accounts/ # Account feature components
│ ├── account-list.tsx
│ ├── account-card.tsx
│ └── account-form.tsx
│
├── teams/ # Team feature components
│ ├── team-list.tsx
│ ├── team-detail.tsx
│ ├── team-form.tsx
│ └── team-member-selector.tsx
│
├── progressions/ # Progression feature components
│ ├── progression-section.tsx
│ ├── progression-tracker.tsx
│ └── progression-filters.tsx
│
└── shared/ # Shared components
├── data-table.tsx
├── search-input.tsx
├── pagination.tsx
├── confirmation-modal.tsx
├── loading-spinner.tsx
└── error-boundary.tsx
Component Design Principles
- Composition over inheritance - Prefer composing smaller components
- Props interface first - Define TypeScript interfaces for all props
- Controlled components - Parent manages state when needed
- Accessible by default - Use semantic HTML, ARIA attributes
- Responsive design - Mobile-first approach with Tailwind