# 组件系统 ## 概述 React 组件层,使用 TailwindCSS 和 shadcn/ui。 ## 目录结构 ``` src/components/ ├── ui/ # 基础 UI 组件 (shadcn/ui) ├── provider-pool/ # 凭证池管理 ├── flow-monitor/ # 流量监控 ├── general-chat/ # 兼容画布桥接(非对话主入口) ├── terminal/ # 内置终端 ├── mcp/ # MCP 服务器 ├── settings/ # 设置页面 └── AppSidebar.tsx # 全局侧边栏 ``` ## 核心组件 ### AppSidebar 全局图标侧边栏,类似 cherry-studio 风格。 ```tsx // src/components/AppSidebar.tsx export function AppSidebar() { return ( ); } ``` ### ProviderPool 凭证池管理组件。 ```tsx // src/components/provider-pool/ProviderPoolPanel.tsx export function ProviderPoolPanel() { const { credentials, addCredential, removeCredential } = useProviderPool(); return (
); } ``` ### FlowMonitor 流量监控组件。 ```tsx // src/components/flow-monitor/FlowMonitorPanel.tsx export function FlowMonitorPanel() { const { records, stats, query } = useFlowMonitor(); return (
); } ``` ## 组件规范 ### 文件命名 - 组件文件: `PascalCase.tsx` - Hook 文件: `useCamelCase.ts` - 工具文件: `camelCase.ts` ### 组件结构 ```tsx // 标准组件结构 interface Props { // props 定义 } export function ComponentName({ prop1, prop2 }: Props) { // hooks const [state, setState] = useState(); // handlers const handleClick = () => {}; // render return
{/* JSX */}
; } ``` ## 相关文档 - [hooks.md](hooks.md) - React Hooks - [lib.md](lib.md) - 工具库 ## 输入组件统一规范(input-kit) 输入组件统一基座位于 `src/components/input-kit/`,目标是避免多处输入实现导致行为漂移。 ### 分层原则 1. `Hook` 层管理状态与持久化(会话、Provider、Model、输入内容)。 2. `input-kit` 层只负责渲染和交互编排(`BaseComposer`、`ModelSelector`)。 3. 业务页面通过 `adapters` 做状态归一化,不允许 UI 组件直接写本地存储。 ### 必须遵守 1. UI 组件使用受控 props,不在组件内“偷偷”回写默认 Provider/Model。 2. Provider/Model 的默认值与恢复逻辑统一放在 Hook 层。 3. 新增输入入口优先复用 `BaseComposer`,而不是复制粘贴 textarea 逻辑。 ### 迁移约定 1. 先接 `adapters`,再替换页面中的旧输入实现。 2. 保留兼容包装组件(如 `ChatModelSelector`)用于渐进迁移。 3. 每次迁移至少补一个回归测试,覆盖 Enter 发送/停止和会话切换场景。