用户输入组件

📎 引用文件

本文引用的文件 - Composer.tsx - ProgressBar.tsx - Composer.test.tsx - ProgressBar.test.tsx - tailwind.config.ts

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向 Vibe-Trading 前端中的“用户输入”相关组件,重点覆盖: - Composer(智能输入框):多行编辑、自动补全与快捷键、文件附件上传、状态联动与无障碍支持。 - ProgressBar(进度条):状态管理、动画过渡、可访问性与尺寸配置。 同时给出输入验证、字符限制、响应式布局、键盘导航、移动端适配、事件处理、数据绑定与表单集成的实现要点与示例路径。

项目结构

与用户输入相关的核心代码位于前端 chat 组件目录中,样式基于 Tailwind CSS 主题变量进行响应式与暗色模式适配。

graph TB subgraph "前端组件" C["Composer.tsx"] P["ProgressBar.tsx"] end subgraph "样式与主题" T["tailwind.config.ts"] end C --> T P --> T

图表来源 - Composer.tsx:1-413 - ProgressBar.tsx:1-74 - tailwind.config.ts:1-34

章节来源 - Composer.tsx:1-413 - ProgressBar.tsx:1-74 - tailwind.config.ts:1-34

核心组件

章节来源 - Composer.tsx:42-127 - ProgressBar.tsx:4-17

架构总览

Composer 作为输入入口,负责本地状态(输入文本、附件、上传中标志、菜单显隐)、事件处理(键盘、输入、组合输入)、文件校验与上传、以及将结果提交给父组件。ProgressBar 仅负责展示当前/总量并计算百分比宽度,配合主题色与过渡动画呈现进度。

sequenceDiagram participant U as "用户" participant Comp as "Composer" participant API as "后端API" participant UI as "UI层" U->>Comp : 键入/粘贴/组合输入 Comp->>Comp : 更新本地输入值<br/>自适应高度 U->>Comp : 点击发送或按 Enter Comp->>Comp : 校验(流式/空内容/附件) alt 有附件 Comp->>API : 上传文件 API-->>Comp : 返回文件名与路径 end Comp->>UI : onSubmit(prompt, attachment) UI-->>U : 清空输入/聚焦/提示

图表来源 - Composer.tsx:104-165 - Composer.tsx:328-376

详细组件分析

Composer(智能输入框)

flowchart TD Start(["进入 Composer"]) --> Input["监听输入/组合输入"] Input --> Height["自适应高度"] Input --> Key["监听键盘事件"] Key --> Enter{"按下 Enter?"} Enter --> |是| Compose{"是否组合输入中?"} Compose --> |是| Block["阻止提交"] Compose --> |否| Submit["提交 prompt + 附件"] Enter --> |否| Wait["等待下一次输入"] Submit --> Upload{"是否有附件?"} Upload --> |是| FileUpload["校验并上传文件"] Upload --> |否| Done["完成提交"] FileUpload --> Done Block --> Wait

图表来源 - Composer.tsx:328-376 - Composer.tsx:134-165

章节来源 - Composer.tsx:88-127 - Composer.tsx:129-165 - Composer.tsx:233-327 - Composer.tsx:328-410

输入验证与字符限制

章节来源 - Composer.tsx:39-45 - Composer.tsx:134-165 - Composer.tsx:388-407

键盘导航与无障碍

章节来源 - Composer.tsx:167-187 - Composer.tsx:233-327 - Composer.tsx:360-376

移动端适配

章节来源 - Composer.tsx:233-327 - tailwind.config.ts:6-30

事件处理、数据绑定与表单集成

章节来源 - Composer.tsx:129-165 - Composer.tsx:328-376 - Composer.tsx:189-191

ProgressBar(进度条)

classDiagram class ProgressBar { +number current +number total +"xs"|"sm" height +boolean showCount +string ariaLabel +string className }

图表来源 - ProgressBar.tsx:4-17 - ProgressBar.tsx:30-73

章节来源 - ProgressBar.tsx:30-73

依赖关系分析

graph LR A["Composer.tsx"] --> B["@/lib/api"] A --> C["react-i18next"] A --> D["lucide-react"] A --> E["sonner"] A --> F["LiveRuntimePanel"] G["ProgressBar.tsx"] --> H["@/lib/utils (cn)"] A --> I["Tailwind 主题"] G --> I

图表来源 - Composer.tsx:1-33 - ProgressBar.tsx:1-3 - tailwind.config.ts:6-30

章节来源 - Composer.tsx:1-33 - ProgressBar.tsx:1-3 - tailwind.config.ts:6-30

性能考虑

章节来源 - Composer.tsx:71-87 - Composer.tsx:333-358 - ProgressBar.tsx:61-64

故障排查指南

章节来源 - Composer.tsx:104-112 - Composer.tsx:134-165 - Composer.tsx:345-358 - ProgressBar.tsx:38-42

结论

Composer 提供了完善的智能输入体验:多行自适应、输入法友好、快捷键支持、附件上传与丰富的上下文操作;ProgressBar 则以最小化实现提供稳定、可访问的进度可视化。两者结合 Tailwind 主题,可在桌面与移动端保持一致的交互与视觉质量。建议在集成时遵循其事件与状态约定,充分利用 ref 方法与回调,以获得最佳的用户体验与可维护性。

附录

章节来源 - Composer.test.tsx:36-55 - ProgressBar.test.tsx:5-8 - ProgressBar.test.tsx:20-34 - ProgressBar.test.tsx:36-56