@xyhp915/slack-base-ui 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/AGENTS.md +331 -0
  2. package/CHANGELOG.md +347 -0
  3. package/README.md +368 -0
  4. package/eslint.config.js +23 -0
  5. package/index.html +13 -0
  6. package/libs/AlertDialog.d.ts +26 -0
  7. package/libs/AlertDialog.d.ts.map +1 -0
  8. package/libs/AutoComplete.d.ts +32 -0
  9. package/libs/AutoComplete.d.ts.map +1 -0
  10. package/libs/Avatar.d.ts +13 -0
  11. package/libs/Avatar.d.ts.map +1 -0
  12. package/libs/Badge.d.ts +8 -0
  13. package/libs/Badge.d.ts.map +1 -0
  14. package/libs/Button.d.ts +12 -0
  15. package/libs/Button.d.ts.map +1 -0
  16. package/libs/Checkbox.d.ts +21 -0
  17. package/libs/Checkbox.d.ts.map +1 -0
  18. package/libs/ContextMenu.d.ts +85 -0
  19. package/libs/ContextMenu.d.ts.map +1 -0
  20. package/libs/Dialog.d.ts +34 -0
  21. package/libs/Dialog.d.ts.map +1 -0
  22. package/libs/Form.d.ts +77 -0
  23. package/libs/Form.d.ts.map +1 -0
  24. package/libs/IconButton.d.ts +9 -0
  25. package/libs/IconButton.d.ts.map +1 -0
  26. package/libs/Input.d.ts +8 -0
  27. package/libs/Input.d.ts.map +1 -0
  28. package/libs/Loading.d.ts +16 -0
  29. package/libs/Loading.d.ts.map +1 -0
  30. package/libs/Menu.d.ts +89 -0
  31. package/libs/Menu.d.ts.map +1 -0
  32. package/libs/Popover.d.ts +43 -0
  33. package/libs/Popover.d.ts.map +1 -0
  34. package/libs/Progress.d.ts +18 -0
  35. package/libs/Progress.d.ts.map +1 -0
  36. package/libs/Radio.d.ts +29 -0
  37. package/libs/Radio.d.ts.map +1 -0
  38. package/libs/Select.d.ts +31 -0
  39. package/libs/Select.d.ts.map +1 -0
  40. package/libs/Switch.d.ts +20 -0
  41. package/libs/Switch.d.ts.map +1 -0
  42. package/libs/Tabs.d.ts +30 -0
  43. package/libs/Tabs.d.ts.map +1 -0
  44. package/libs/Toast.d.ts +33 -0
  45. package/libs/Toast.d.ts.map +1 -0
  46. package/libs/Tooltip.d.ts +9 -0
  47. package/libs/Tooltip.d.ts.map +1 -0
  48. package/libs/index.d.ts +43 -0
  49. package/libs/index.d.ts.map +1 -0
  50. package/libs/index.js +15281 -0
  51. package/libs/vite.svg +1 -0
  52. package/package.json +39 -0
  53. package/tsconfig.app.json +28 -0
  54. package/tsconfig.json +7 -0
  55. package/tsconfig.libs.json +25 -0
  56. package/tsconfig.node.json +26 -0
  57. package/vite.config.ts +8 -0
  58. package/vite.libs.config.ts +33 -0
package/AGENTS.md ADDED
@@ -0,0 +1,331 @@
1
+ # AGENTS.md - AI 协作指南
2
+
3
+ > 本文档为 AI 助手提供项目上下文和协作指导
4
+
5
+ ## 📋 项目概览
6
+
7
+ **项目名称**: Slack Base UI
8
+ **项目类型**: React UI 组件库 + 演示应用
9
+ **核心技术**: React 19 + TypeScript + Base UI + TailwindCSS + Vite
10
+ **设计风格**: Slack Design System
11
+
12
+ ## 🎯 项目目标
13
+
14
+ 1. 使用 Base UI 无样式组件库构建完整的 Slack 风格 UI 组件
15
+ 2. 提供可重用、可访问、类型安全的组件库
16
+ 3. 展示如何用这些组件构建真实的应用(Slack 克隆)
17
+ 4. 支持亮色/暗色主题切换
18
+
19
+ ## 🏗️ 架构设计
20
+
21
+ ### 技术栈
22
+
23
+ ```
24
+ ┌─────────────────────────────────────┐
25
+ │ React 19 + TypeScript │
26
+ ├─────────────────────────────────────┤
27
+ │ @base-ui/react (无样式组件) │
28
+ ├─────────────────────────────────────┤
29
+ │ TailwindCSS + CSS Variables (样式) │
30
+ ├─────────────────────────────────────┤
31
+ │ React Router (路由管理) │
32
+ ├─────────────────────────────────────┤
33
+ │ Vite (构建工具) │
34
+ └─────────────────────────────────────┘
35
+ ```
36
+
37
+ ### 目录结构
38
+
39
+ ```
40
+ src/
41
+ ├── components/ # 核心组件库(可重用)
42
+ │ ├── Button.tsx # 按钮 - 4 种变体,3 种尺寸
43
+ │ ├── Avatar.tsx # 头像 - 5 种尺寸,状态指示器
44
+ │ ├── Badge.tsx # 徽章 - 数字/圆点,2 种风格
45
+ │ ├── Input.tsx # 输入框 - 标签、错误提示
46
+ │ ├── IconButton.tsx # 图标按钮 - 紧凑型
47
+ │ ├── Tooltip.tsx # 工具提示 - 基于 Base UI
48
+ │ └── Dialog.tsx # 对话框 - 模态对话框,4 种尺寸
49
+
50
+ ├── pages/ # 展示页面
51
+ │ ├── Dashboard.tsx # 首页 - 项目介绍和导航
52
+ │ └── ComponentShowcase.tsx # 组件展示页
53
+
54
+ ├── examples/ # 完整应用示例
55
+ │ └── slack-clone/ # Slack 克隆
56
+ │ ├── SlackApp.tsx
57
+ │ ├── components/ # Message, Composer, ChannelHeader, UserProfile
58
+ │ └── layout/ # Layout (包含 Sidebar)
59
+
60
+ ├── context/
61
+ │ └── ThemeContext.tsx # 主题切换 (light/dark)
62
+
63
+ ├── App.tsx # 路由配置
64
+ ├── main.tsx # 入口
65
+ └── index.css # 全局样式和 CSS 变量定义
66
+ ```
67
+
68
+ ## 🎨 设计系统
69
+
70
+ ### CSS 变量命名规范
71
+
72
+ 所有颜色和样式变量定义在 `src/index.css`:
73
+
74
+ ```css
75
+ /* 品牌色 */
76
+ --slack-aubergine: #3F0E40; /* Slack 紫色 */
77
+ --slack-blue: #1164A3; /* Slack 蓝色 */
78
+ --slack-green: #007a5a; /* Slack 绿色 */
79
+ --slack-red: #E01E5A; /* Slack 红色 */
80
+
81
+ /* 语义化颜色 */
82
+ --bg-primary: #ffffff; /* 主背景 */
83
+ --bg-secondary: #f8f8f8; /* 次背景 */
84
+ --bg-hover: #f2f2f2; /* 悬停背景 */
85
+ --text-primary: #1d1c1d; /* 主文本 */
86
+ --text-secondary: #616061; /* 次文本 */
87
+ --text-muted: #868686; /* 弱化文本 */
88
+ --border-light: #dddddd; /* 边框 */
89
+ ```
90
+
91
+ ### 组件设计原则
92
+
93
+ 1. **基于 Base UI**:所有组件优先使用 Base UI 提供的无样式组件
94
+ 2. **样式定制**:使用 TailwindCSS 类和 CSS 变量实现 Slack 风格
95
+ 3. **类型安全**:完整的 TypeScript 类型定义
96
+ 4. **可访问性**:继承 Base UI 的 ARIA 支持
97
+ 5. **主题感知**:所有颜色使用 CSS 变量,自动支持主题切换
98
+
99
+ ### 组件模式
100
+
101
+ 典型组件结构:
102
+
103
+ ```tsx
104
+ import { ComponentName as BaseComponent } from '@base-ui/react';
105
+ import clsx from 'clsx';
106
+ import React from 'react';
107
+
108
+ export interface ComponentProps extends BaseComponentProps {
109
+ variant?: 'primary' | 'secondary';
110
+ size?: 'sm' | 'md' | 'lg';
111
+ // 自定义 props
112
+ }
113
+
114
+ export const Component = React.forwardRef<HTMLElement, ComponentProps>(
115
+ ({ className, variant = 'primary', size = 'md', ...props }, ref) => {
116
+ // 样式逻辑
117
+ const baseStyles = '...';
118
+ const variants = { primary: '...', secondary: '...' };
119
+ const sizes = { sm: '...', md: '...', lg: '...' };
120
+
121
+ return (
122
+ <BaseComponent
123
+ ref={ref}
124
+ className={clsx(baseStyles, variants[variant], sizes[size], className)}
125
+ {...props}
126
+ />
127
+ );
128
+ }
129
+ );
130
+ ```
131
+
132
+ ## 🔧 开发指南
133
+
134
+ ### 添加新组件
135
+
136
+ 1. **确定需求**:明确组件的功能和 API
137
+ 2. **选择基础**:查找 Base UI 是否有对应的无样式组件
138
+ 3. **创建文件**:在 `src/components/` 创建 `ComponentName.tsx`
139
+ 4. **实现组件**:
140
+ - 导入 Base UI 组件(如果有)
141
+ - 定义 TypeScript 接口
142
+ - 使用 `React.forwardRef`
143
+ - 实现变体和尺寸逻辑
144
+ - 使用 CSS 变量实现 Slack 风格
145
+ 5. **添加展示**:在 `ComponentShowcase.tsx` 中添加使用示例
146
+ 6. **测试主题**:确保在亮色和暗色主题下都正常显示
147
+
148
+ ### 修改现有组件
149
+
150
+ 1. **阅读代码**:理解组件当前实现
151
+ 2. **保持一致性**:遵循现有的命名和样式模式
152
+ 3. **测试影响**:检查 `ComponentShowcase.tsx` 和 `slack-clone` 中的使用
153
+ 4. **更新类型**:如果修改了 props,更新 TypeScript 接口
154
+
155
+ ### 样式开发
156
+
157
+ - **优先使用 CSS 变量**:`var(--bg-primary)` 而不是硬编码颜色
158
+ - **TailwindCSS 类**:用于布局和常用样式
159
+ - **响应式**:使用 Tailwind 的响应式前缀 `md:`、`lg:` 等
160
+ - **状态变体**:`hover:`、`focus:`、`active:`、`disabled:` 等
161
+
162
+ ### 主题切换
163
+
164
+ 主题通过 `ThemeContext` 管理:
165
+
166
+ ```tsx
167
+ const { theme, toggleTheme } = useTheme();
168
+ // theme: 'light' | 'dark'
169
+ // toggleTheme: () => void
170
+ ```
171
+
172
+ 切换主题时,会在 `<html>` 元素上添加/移除 `.dark` 类,CSS 变量自动切换。
173
+
174
+ ## 📦 依赖管理
175
+
176
+ ### 核心依赖
177
+
178
+ - `@base-ui/react` - 无样式组件库,提供行为和可访问性
179
+ - `react` / `react-dom` - UI 框架
180
+ - `react-router-dom` - 页面路由
181
+ - `tailwindcss` - CSS 工具类
182
+ - `lucide-react` - 图标库
183
+ - `clsx` - 类名拼接
184
+ - `tailwind-merge` - Tailwind 类名合并
185
+
186
+ ### 何时添加新依赖
187
+
188
+ 1. **优先使用现有工具**:Base UI、Tailwind、Lucide 已覆盖大部分需求
189
+ 2. **评估必要性**:新功能是否真的需要外部库
190
+ 3. **考虑包大小**:避免引入过大的依赖
191
+ 4. **类型支持**:优先选择有 TypeScript 类型的库
192
+
193
+ ## 🎯 常见任务
194
+
195
+ ### 任务:添加新组件(例如 Select 下拉选择)
196
+
197
+ ```markdown
198
+ 1. 查阅 Base UI 文档,找到 Select 组件
199
+ 2. 在 src/components/Select.tsx 创建文件
200
+ 3. 导入 Base UI 的 Select 相关组件
201
+ 4. 定义 SelectProps 接口
202
+ 5. 实现样式:
203
+ - Trigger: 类似 Input 的样式
204
+ - Popup: 白色背景,圆角,阴影
205
+ - Option: hover 背景变为 var(--bg-hover)
206
+ 6. 在 ComponentShowcase.tsx 添加展示
207
+ 7. 测试亮色/暗色主题
208
+ ```
209
+
210
+ ### 任务:修改主题颜色
211
+
212
+ ```markdown
213
+ 1. 打开 src/index.css
214
+ 2. 修改 :root 和 :root.dark 中的 CSS 变量
215
+ 3. 保存后自动热更新,查看效果
216
+ 4. 如果是品牌色修改,需要全局替换引用
217
+ ```
218
+
219
+ ### 任务:优化 Slack 克隆页面
220
+
221
+ ```markdown
222
+ 1. 定位到 src/examples/slack-clone/
223
+ 2. 主要文件:
224
+ - SlackApp.tsx: 页面主入口
225
+ - layout/Layout.tsx: 整体布局和侧边栏
226
+ - components/Message.tsx: 消息卡片
227
+ - components/Composer.tsx: 消息输入框
228
+ - components/ChannelHeader.tsx: 频道头部
229
+ 3. 修改组件,使用 CSS 变量保持主题一致性
230
+ ```
231
+
232
+ ### 任务:添加新路由
233
+
234
+ ```markdown
235
+ 1. 在 src/pages/ 创建新页面组件
236
+ 2. 打开 src/App.tsx
237
+ 3. 添加新的 <Route path="/new-path" element={<NewPage />} />
238
+ 4. 在 Dashboard.tsx 添加导航链接(如需要)
239
+ ```
240
+
241
+ ## 🐛 调试技巧
242
+
243
+ ### 样式问题
244
+
245
+ 1. **检查 CSS 变量**:确认在 light/dark 模式下都有定义
246
+ 2. **TailwindCSS 类**:使用浏览器开发工具检查是否生效
247
+ 3. **类名冲突**:使用 `tailwind-merge` 合并类名
248
+ 4. **主题切换**:检查 `<html>` 是否有 `.dark` 类
249
+
250
+ ### 组件问题
251
+
252
+ 1. **Base UI 文档**:查阅官方文档确认正确用法
253
+ 2. **Props 传递**:确认所有必需的 props 都已提供
254
+ 3. **Ref 转发**:确保使用了 `React.forwardRef`
255
+ 4. **TypeScript 错误**:检查类型定义是否匹配
256
+
257
+ ### 性能问题
258
+
259
+ 1. **避免不必要的重渲染**:使用 `React.memo`、`useMemo`、`useCallback`
260
+ 2. **代码分割**:使用 `React.lazy` 和 `Suspense`
261
+ 3. **图片优化**:使用合适的尺寸和格式
262
+
263
+ ## 📚 参考资源
264
+
265
+ - [Base UI 文档](https://base-ui.com/) - 无样式组件库
266
+ - [Slack Design](https://slack.design/) - Slack 官方设计指南
267
+ - [TailwindCSS 文档](https://tailwindcss.com/) - CSS 工具类
268
+ - [Lucide Icons](https://lucide.dev/) - 图标库
269
+ - [React Router](https://reactrouter.com/) - 路由文档
270
+
271
+ ## 🤖 AI 协作建议
272
+
273
+ ### 理解项目时
274
+
275
+ 1. 先阅读本文档了解整体架构
276
+ 2. 查看 `package.json` 了解依赖
277
+ 3. 阅读 `src/index.css` 了解设计系统
278
+ 4. 浏览 `src/components/` 了解组件实现模式
279
+ 5. 运行项目,查看实际效果
280
+
281
+ ### 修改代码时
282
+
283
+ 1. **保持一致性**:遵循现有的代码风格和命名规范
284
+ 2. **类型安全**:确保 TypeScript 类型正确
285
+ 3. **主题感知**:使用 CSS 变量,测试两种主题
286
+ 4. **可访问性**:保留 Base UI 的 ARIA 属性
287
+ 5. **文档同步**:重大改动时更新本文档
288
+
289
+ ### 添加功能时
290
+
291
+ 1. **评估范围**:是添加新组件还是增强现有组件
292
+ 2. **查找基础**:优先使用 Base UI 的无样式组件
293
+ 3. **设计 API**:定义清晰的 props 接口
294
+ 4. **实现样式**:使用 Slack 的设计语言
295
+ 5. **添加示例**:在 ComponentShowcase 中展示用法
296
+
297
+ ### 回答问题时
298
+
299
+ 1. **定位问题**:根据描述找到相关文件
300
+ 2. **提供上下文**:解释代码在项目中的作用
301
+ 3. **给出方案**:提供具体的代码示例
302
+ 4. **考虑影响**:说明改动可能影响的其他部分
303
+
304
+ ## 🚀 快速命令
305
+
306
+ ```bash
307
+ # 开发
308
+ npm run dev # 启动开发服务器(端口 5173)
309
+
310
+ # 构建
311
+ npm run build # 构建生产版本
312
+ npm run preview # 预览生产构建
313
+
314
+ # 代码检查
315
+ npm run lint # ESLint 检查
316
+ ```
317
+
318
+ ## 📝 更新日志
319
+
320
+ 当做出重大改动时,请在此记录:
321
+
322
+ ### 2026-02-08
323
+ - 创建初始项目文档
324
+ - 完成核心组件库(Button, Avatar, Badge, Input, IconButton, Tooltip, Dialog)
325
+ - 实现 Slack 克隆演示应用
326
+ - 支持亮色/暗色主题切换
327
+ - 添加 Dialog 组件,支持多种尺寸和自定义布局
328
+
329
+ ---
330
+
331
+ **记住**:这个项目的目标是展示如何使用 Base UI 构建真实的、美观的、可访问的 UI 组件库。保持代码清晰、注释充分、类型安全。
package/CHANGELOG.md ADDED
@@ -0,0 +1,347 @@
1
+ # 更新日志
2
+
3
+ ## [修复] 2026-02-19
4
+
5
+ ### 🐛 Context Menu 修复
6
+
7
+ #### 修复右键菜单功能
8
+ 修复了 ContextMenu 组件的两个关键问题,大幅提升用户体验。
9
+
10
+ **修复内容:**
11
+ - ✅ **右键点击功能** - 修复了右键点击不起作用的问题,现在右键点击会正确触发菜单
12
+ - ✅ **菜单定位** - 菜单现在显示在鼠标点击位置附近,而不是触发区域的固定位置
13
+ - ✅ **视觉反馈** - 改进了触发区域的悬停效果和视觉提示
14
+ - ✅ **用户引导** - 添加了鼠标图标和更清晰的说明文字
15
+
16
+ **技术实现:**
17
+ - 使用虚拟锚点元素(Virtual Element)定位菜单到鼠标坐标
18
+ - 通过 Context API 共享锚点位置
19
+ - 正确处理 `onContextMenu` 事件并程序化触发菜单
20
+ - 支持受控和非受控模式
21
+
22
+ **使用示例:**
23
+ ```tsx
24
+ <ContextMenu>
25
+ <ContextMenuTrigger>
26
+ <div>右键点击这里</div>
27
+ </ContextMenuTrigger>
28
+ <ContextMenuContent>
29
+ <ContextMenuItem>复制</ContextMenuItem>
30
+ <ContextMenuItem>粘贴</ContextMenuItem>
31
+ </ContextMenuContent>
32
+ </ContextMenu>
33
+ ```
34
+
35
+ 详细文档请参考:
36
+ - `/docs/CONTEXTMENU_FIX.md` - 技术实现细节
37
+ - `/docs/CONTEXTMENU_TEST.md` - 测试说明
38
+
39
+ ---
40
+
41
+ ## [新增] 2026-02-10
42
+
43
+ ### 🎉 新增组件
44
+
45
+ #### Popover - 浮层组件
46
+ 一个功能强大的浮层组件,用于显示临时内容和交互界面。
47
+
48
+ **特性:**
49
+ - ✅ 基于 Base UI Popover 构建
50
+ - ✅ 支持四个方向:`top`、`right`、`bottom`、`left`
51
+ - ✅ 支持三种对齐方式:`start`、`center`、`end`
52
+ - ✅ 提供便捷子组件:`PopoverHeader`、`PopoverBody`、`PopoverFooter`
53
+ - ✅ 支持受控和非受控两种模式
54
+ - ✅ 优雅的进入/退出动画
55
+ - ✅ 完整的无障碍支持
56
+
57
+ **示例:**
58
+ ```tsx
59
+ <Popover>
60
+ <PopoverTrigger asChild>
61
+ <Button>打开设置</Button>
62
+ </PopoverTrigger>
63
+ <PopoverContent>
64
+ <PopoverHeader>设置选项</PopoverHeader>
65
+ <PopoverBody>配置内容</PopoverBody>
66
+ <PopoverFooter>
67
+ <Button>保存</Button>
68
+ </PopoverFooter>
69
+ </PopoverContent>
70
+ </Popover>
71
+ ```
72
+
73
+ #### Menu - 下拉菜单组件
74
+ 一个功能完整的下拉菜单组件,支持多种菜单项类型和丰富的交互。
75
+
76
+ **特性:**
77
+ - ✅ 基于 Base UI Menu 构建
78
+ - ✅ 支持普通菜单项、复选框项、单选组
79
+ - ✅ 支持多级子菜单
80
+ - ✅ 支持菜单分组和标签
81
+ - ✅ 支持图标和快捷键显示
82
+ - ✅ 支持危险操作标记(红色高亮)
83
+ - ✅ 完整的键盘导航支持
84
+ - ✅ 优雅的动画效果
85
+
86
+ **包含的子组件:**
87
+ - `MenuItem` - 普通菜单项
88
+ - `MenuCheckboxItem` - 复选框菜单项
89
+ - `MenuRadioGroup` / `MenuRadioItem` - 单选组
90
+ - `MenuSub` / `MenuSubTrigger` / `MenuSubContent` - 子菜单
91
+ - `MenuLabel` - 菜单标签
92
+ - `MenuSeparator` - 分隔线
93
+ - `MenuItemWithIcon` - 带图标的菜单项(便捷组件)
94
+
95
+ **示例:**
96
+ ```tsx
97
+ <Menu>
98
+ <MenuTrigger asChild>
99
+ <Button>文件</Button>
100
+ </MenuTrigger>
101
+ <MenuContent>
102
+ <MenuItemWithIcon icon={<FileIcon />} shortcut="⌘N">
103
+ 新建文件
104
+ </MenuItemWithIcon>
105
+ <MenuSeparator />
106
+ <MenuItem destructive>删除</MenuItem>
107
+ </MenuContent>
108
+ </Menu>
109
+ ```
110
+
111
+ #### ContextMenu - 右键菜单组件
112
+ 一个右键触发的上下文菜单组件,API 与 Menu 完全一致。
113
+
114
+ **特性:**
115
+ - ✅ 自动处理右键事件
116
+ - ✅ 与 Menu 组件 API 完全一致
117
+ - ✅ 支持所有 Menu 的功能(复选框、单选、子菜单等)
118
+ - ✅ 完整的键盘导航和无障碍支持
119
+ - ✅ 适用于上下文操作场景
120
+
121
+ **示例:**
122
+ ```tsx
123
+ <ContextMenu>
124
+ <ContextMenuTrigger>
125
+ <div>右键点击这里</div>
126
+ </ContextMenuTrigger>
127
+ <ContextMenuContent>
128
+ <ContextMenuItem>复制</ContextMenuItem>
129
+ <ContextMenuItem>粘贴</ContextMenuItem>
130
+ <ContextMenuSeparator />
131
+ <ContextMenuItem destructive>删除</ContextMenuItem>
132
+ </ContextMenuContent>
133
+ </ContextMenu>
134
+ ```
135
+
136
+ **文档:**
137
+ 详细使用指南请查看 [POPOVER_MENU_CONTEXTMENU.md](./docs/POPOVER_MENU_CONTEXTMENU.md)
138
+
139
+ ---
140
+
141
+ ## [新增] 2026-02-09
142
+
143
+ ### 🎉 新增组件
144
+
145
+ #### AlertDialog - 警告对话框组件
146
+ 一个专注于重要确认和警告场景的对话框组件,提供更好的用户体验。
147
+
148
+ **特性:**
149
+ - ✅ 四种语义化变体:`info`、`success`、`warning`、`danger`
150
+ - ✅ 每种变体配有专属图标和配色方案
151
+ - ✅ 支持异步确认操作,自动显示加载状态
152
+ - ✅ 可自定义确认/取消按钮文本和样式
153
+ - ✅ 支持自定义内容区域
154
+
155
+ **使用场景:**
156
+ - 删除操作确认
157
+ - 重要操作警告
158
+ - 成功/失败提示
159
+ - 信息通知
160
+
161
+ **示例:**
162
+ ```tsx
163
+ <AlertDialog
164
+ open={open}
165
+ onOpenChange={setOpen}
166
+ title="Delete Account?"
167
+ description="This action cannot be undone."
168
+ variant="danger"
169
+ confirmText="Delete"
170
+ onConfirm={async () => {
171
+ await deleteAccount()
172
+ }}
173
+ />
174
+ ```
175
+
176
+ #### Form - 完整表单系统
177
+ 一个功能完整的表单管理系统,提供状态管理、验证和多种表单控件。
178
+
179
+ **特性:**
180
+ - ✅ 完整的表单状态管理(values、errors、touched)
181
+ - ✅ 内置验证系统,支持自定义验证规则
182
+ - ✅ 多种表单控件:Input、Textarea、Select、Checkbox
183
+ - ✅ 自动错误提示和验证反馈
184
+ - ✅ 必填字段自动标记
185
+ - ✅ 灵活的自定义字段支持(render props)
186
+
187
+ **包含的子组件:**
188
+ - `FormInput` - 文本输入框
189
+ - `FormTextarea` - 多行文本框
190
+ - `FormSelect` - 下拉选择框
191
+ - `FormCheckbox` - 复选框
192
+ - `FormField` - 自定义表单字段(render props)
193
+ - `FormActions` - 表单操作按钮容器
194
+ - `useFormContext` - 表单上下文 Hook
195
+
196
+ **使用场景:**
197
+ - 用户注册/登录
198
+ - 个人资料编辑
199
+ - 设置页面
200
+ - 数据录入表单
201
+
202
+ **示例:**
203
+ ```tsx
204
+ <Form
205
+ initialValues={{ name: '', email: '' }}
206
+ validate={(values) => {
207
+ const errors = {}
208
+ if (!values.name) errors.name = 'Name is required'
209
+ if (!values.email) errors.email = 'Email is required'
210
+ return errors
211
+ }}
212
+ onSubmit={(values) => {
213
+ console.log(values)
214
+ }}
215
+ >
216
+ <FormInput name="name" label="Name" required fullWidth />
217
+ <FormInput name="email" label="Email" type="email" required fullWidth />
218
+ <FormActions>
219
+ <Button type="submit" variant="primary">Submit</Button>
220
+ </FormActions>
221
+ </Form>
222
+ ```
223
+
224
+ ### 📚 新增文档
225
+
226
+ 1. **ALERTDIALOG_AND_FORM_GUIDE.md** - AlertDialog 和 Form 组件的详细使用指南
227
+ - 完整的 API 文档
228
+ - 丰富的使用示例
229
+ - 设计原则说明
230
+ - 可访问性说明
231
+
232
+ 2. **QUICK_REFERENCE.md** - 快速参考文档
233
+ - 所有组件的快速使用示例
234
+ - 常用 Props 速查
235
+ - CSS 变量参考
236
+ - 最佳实践
237
+ - 常见问题解答
238
+
239
+ ### 🔧 改进
240
+
241
+ 1. **统一导出文件** (`src/components/index.ts`)
242
+ - 添加了统一的组件导出文件
243
+ - 支持一次性导入多个组件
244
+ - 包含 TypeScript 类型导出
245
+
246
+ 2. **组件展示页面更新**
247
+ - 添加了 AlertDialog 展示区域,包含四种变体的完整示例
248
+ - 添加了 Form 展示区域,包含两个完整的表单示例
249
+ - 改进了页面布局和说明文字
250
+
251
+ 3. **README 更新**
252
+ - 更新了组件列表,添加 AlertDialog 和 Form 的说明
253
+ - 改进了文档结构
254
+
255
+ ### 🎨 设计改进
256
+
257
+ 1. **AlertDialog 视觉设计**
258
+ - 每种变体都有独特的图标和配色
259
+ - 图标使用了 lucide-react 的语义化图标
260
+ - 背景色使用半透明效果,更加柔和
261
+
262
+ 2. **Form 用户体验**
263
+ - 字段失焦后立即显示验证错误
264
+ - 必填字段自动显示红色星号标记
265
+ - 错误信息显示在字段下方,带有警告图标
266
+
267
+ ### 🐛 Bug 修复
268
+
269
+ 1. 修复了 AlertDialog 中 `flex-shrink-0` 应该使用 `shrink-0` 的 Tailwind 警告
270
+ 2. 修复了 Form 组件中未使用的 `isSubmitting` 状态变量
271
+ 3. 修复了 FormTextarea 中 `min-h-[80px]` 应该使用 `min-h-20` 的 Tailwind 警告
272
+
273
+ ### 📦 依赖
274
+
275
+ 无新增依赖,所有新组件都基于现有依赖构建。
276
+
277
+ ### ⚡️ 性能
278
+
279
+ - Form 组件使用了 React.useCallback 优化性能
280
+ - AlertDialog 的异步操作使用了适当的加载状态管理
281
+
282
+ ### ♿️ 可访问性
283
+
284
+ - AlertDialog 继承了 Base UI Dialog 的完整 ARIA 支持
285
+ - Form 组件自动为表单字段添加正确的 label 关联
286
+ - 所有错误信息都使用了适当的语义化标签
287
+
288
+ ---
289
+
290
+ ## 现有组件
291
+
292
+ ### Button - 按钮组件
293
+ 基础交互组件,支持多种样式和状态。
294
+
295
+ ### Avatar - 头像组件
296
+ 用户头像展示,支持状态指示器。
297
+
298
+ ### Badge - 徽章组件
299
+ 通知计数和状态标识。
300
+
301
+ ### Input - 输入框组件
302
+ 基础文本输入控件。
303
+
304
+ ### IconButton - 图标按钮
305
+ 紧凑的工具栏按钮。
306
+
307
+ ### Tooltip - 工具提示
308
+ 上下文信息提示。
309
+
310
+ ### Dialog - 对话框组件
311
+ 通用模态对话框,支持自定义布局。
312
+
313
+ ---
314
+
315
+ ## 路线图
316
+
317
+ ### 计划中的组件
318
+
319
+ 1. **Select** - 独立的下拉选择组件(目前只在 Form 中)
320
+ 2. **Checkbox** - 独立的复选框组件(目前只在 Form 中)
321
+ 3. **Radio** - 单选按钮组件
322
+ 4. **Switch** - 开关组件
323
+ 5. **Tabs** - 标签页组件
324
+ 6. **Dropdown Menu** - 下拉菜单
325
+ 7. **Toast** - 轻量级通知提示
326
+ 8. **Modal** - 更通用的模态框
327
+ 9. **Popover** - 弹出框
328
+ 10. **Progress** - 进度条
329
+
330
+ ### 计划中的功能
331
+
332
+ 1. 表单字段级别的异步验证
333
+ 2. 更多的表单控件变体
334
+ 3. 组件动画效果增强
335
+ 4. 暗色主题优化
336
+ 5. 响应式断点工具
337
+
338
+ ---
339
+
340
+ ## 贡献
341
+
342
+ 欢迎提交 Issue 和 Pull Request!
343
+
344
+ ## 许可证
345
+
346
+ MIT
347
+