4.4 KiB
4.4 KiB
Components
UI components organized by feature domain.
Structure
components/
├── chat/ # Session message display
│ ├── items/ # Individual message/tool items
│ │ ├── linkedTool/ # Tool call/result display helpers
│ │ ├── BaseItem # Base item wrapper
│ │ ├── baseItemHelpers # Base item utility functions
│ │ ├── ExecutionTrace # Execution trace display
│ │ ├── LinkedToolItem # Tool call with linked result
│ │ ├── MetricsPill # Metrics badge display
│ │ ├── SlashItem # Slash command display
│ │ ├── SubagentItem # Subagent execution display
│ │ ├── TeammateMessageItem # Team message cards
│ │ ├── ThinkingItem # Extended thinking display
│ │ └── TextItem # Text output display
│ ├── viewers/ # Content viewers (JSON, code, diff)
│ ├── SessionContextPanel/ # Visible context tracking panel
│ │ ├── components/ # Section wrappers (ClaudeMdFilesSection, ToolOutputsSection, UserMessagesSection, etc.)
│ │ ├── items/ # Per-injection item renderers (ClaudeMdItem, ToolOutputItem, UserMessageItem, etc.)
│ │ ├── DirectoryTree/ # CLAUDE.md directory navigation
│ │ ├── utils/ # Formatting helpers
│ │ ├── index.tsx # Main panel component
│ │ └── types.ts # SectionType constants, panel props
│ ├── AIChatGroup.tsx # AI response group display
│ ├── ChatHistory.tsx # Chat timeline container
│ ├── ChatHistoryEmptyState.tsx # Empty state display
│ ├── ChatHistoryItem.tsx # Individual history item
│ ├── ChatHistoryLoadingState.tsx # Loading state display
│ ├── CompactBoundary.tsx # Compaction event boundary marker
│ ├── ContextBadge.tsx # Per-turn context injection popover badge
│ ├── DisplayItemList.tsx # Display item list rendering
│ ├── LastOutputDisplay.tsx # Last output display
│ ├── SystemChatGroup.tsx # System message group display
│ ├── UserChatGroup.tsx # User message display
│ ├── markdownComponents.tsx # Custom markdown renderers
│ └── searchHighlightUtils.ts # Search highlight utilities
├── common/ # Shared UI primitives
│ ├── CopyButton # Copy to clipboard button
│ ├── CopyablePath # Clickable, copyable file path
│ ├── ErrorBoundary # React error boundary
│ ├── OngoingIndicator # Session in-progress indicator
│ ├── RepositoryDropdown # Repository selector dropdown
│ ├── TokenUsageDisplay # Token breakdown with context stats hover
│ └── WorktreeBadge # Git worktree badge
├── dashboard/ # Overview and listing pages
├── layout/ # App shell, sidebars, headers
├── notifications/ # Notification panels and badges
├── search/ # Search UI and results
├── settings/ # Settings pages and controls
│ ├── components/ # Reusable setting controls (SettingRow, SettingsToggle, etc.)
│ ├── hooks/ # Settings-specific hooks
│ ├── sections/ # Setting sections (General, Notifications, Advanced)
│ └── NotificationTriggerSettings/ # Trigger config UI
│ ├── components/ # Trigger form components
│ ├── hooks/ # Trigger form hooks
│ └── utils/ # Trigger utilities
└── sidebar/ # Project/session navigation
Adding Components
- Choose appropriate parent directory by feature
- If used across features, place in
common/ - Use Tailwind with theme-aware CSS variables
- Connect to store via
useStore()hook if needed - Colocate related hooks/utils in same directory
Component Guidelines
- One component per file, PascalCase naming
- Use functional components with hooks
- Prefer composition over prop drilling
- Use
TabUIContextfor per-tab UI state
Virtual Scrolling
Use @tanstack/react-virtual for lists > 100 items:
- Session lists in sidebar
- Message lists in chat view