@h-ai/cli 0.1.0-alpha.22 → 0.1.0-alpha.23
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.
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@h-ai/cli",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.1.0-alpha.
|
|
4
|
+
"version": "0.1.0-alpha.23",
|
|
5
5
|
"description": "Hai Framework CLI for project scaffolding and code generation.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"keywords": [
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"ora": "^9.1.0",
|
|
35
35
|
"prompts": "^2.4.2",
|
|
36
36
|
"yaml": "^2.7.0",
|
|
37
|
-
"@h-ai/core": "0.1.0-alpha.
|
|
37
|
+
"@h-ai/core": "0.1.0-alpha.23"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/fs-extra": "^11.0.4",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "{{projectName}}",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.23",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "{{#if_eq appType 'admin'}}Enterprise management system built with hai Agent Framework{{/if_eq}}{{#if_eq appType 'website'}}Enterprise website built with hai Agent Framework{{/if_eq}}{{#if_eq appType 'h5'}}Mobile H5 app built with hai Agent Framework{{/if_eq}}{{#if_eq appType 'api'}}REST API service built with hai Agent Framework{{/if_eq}}{{#if_eq appType 'mobile-app'}}Mobile app built with hai Agent Framework{{/if_eq}}",
|
|
6
6
|
"keywords": ["hai", {{#unless isSvelteOnlyApp}}"sveltekit", {{/unless}}"svelte5", "{{appType}}"],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hai-app-review
|
|
3
|
-
description:
|
|
3
|
+
description: 对应用代码进行审查:路由安全 → 认证授权 → i18n → 组件使用 → API 端点 / service workspace → 服务层 → 性能,并补充产品体验与交互走查;当需求涉及代码审查、规范化、质量检查时使用。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# hai-app-review — 应用代码审查规范
|
|
@@ -119,6 +119,21 @@ if (!result.success)
|
|
|
119
119
|
- [ ] 事件回调通过 props 传入(非 `createEventDispatcher`)
|
|
120
120
|
- [ ] 样式使用 TailwindCSS 4 + DaisyUI 5
|
|
121
121
|
|
|
122
|
+
### 产品体验与交互审查(用户视角走查)
|
|
123
|
+
|
|
124
|
+
- [ ] 页面层级与视觉重心清晰,主操作足够突出
|
|
125
|
+
- [ ] 响应式断点(桌面 / 平板 / 移动)下无溢出、遮挡、错位
|
|
126
|
+
- [ ] 暗色 / 亮色主题下文字对比度满足 WCAG AA
|
|
127
|
+
- [ ] 关键路径步骤最短,无多余跳转或确认
|
|
128
|
+
- [ ] 危险操作(删除、提交、不可逆变更)有二次确认或可撤销机制
|
|
129
|
+
- [ ] 所有可点击区域 hit area ≥ 44px(移动端尤其)
|
|
130
|
+
- [ ] 表单具备失焦校验、提交校验与首个错误项聚焦
|
|
131
|
+
- [ ] 长任务有进度反馈(百分比 / 预计时间 / skeleton)
|
|
132
|
+
- [ ] 四态反馈完整:Loading / Empty / Error / Success
|
|
133
|
+
- [ ] 边界场景覆盖:空数据、超长文本、并发操作、权限不足、网络抖动
|
|
134
|
+
- [ ] 导航无死路:用户在任意页面都能退出/返回
|
|
135
|
+
- [ ] 国际化文本展开后不破坏布局
|
|
136
|
+
|
|
122
137
|
### 初始化
|
|
123
138
|
|
|
124
139
|
- [ ] 模块初始化顺序正确:`core → db → cache → iam → ...`
|
|
@@ -11,7 +11,7 @@ description: 使用 @h-ai/ui 构建多端应用界面,包含三层组件架构
|
|
|
11
11
|
|
|
12
12
|
## 运行环境
|
|
13
13
|
|
|
14
|
-
>
|
|
14
|
+
> **面向 Svelte / SvelteKit 界面层。** 组件可用于 SvelteKit 的 SSR + CSR 页面,也可用于纯客户端 SPA / 原生壳 App;不要在纯 Node 服务模块里直接引用 UI 组件。
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
@@ -22,13 +22,71 @@ description: 使用 @h-ai/ui 构建多端应用界面,包含三层组件架构
|
|
|
22
22
|
- 使用 Bits UI headless 交互组件(Combobox、DatePicker、Calendar)
|
|
23
23
|
- 使用 IAM 场景组件(登录/注册/密码/权限守卫/用户资料表单)
|
|
24
24
|
- 使用 Storage 场景组件(文件上传/图片上传/头像上传/文件列表)
|
|
25
|
-
- 使用 CRUD
|
|
25
|
+
- 使用 CRUD 场景组件(列表过滤、详情/编辑面板、删除确认)
|
|
26
26
|
- 渲染 AI 输出(Markdown / Mermaid 文档、代码产物预览)
|
|
27
27
|
- 配置主题切换与 i18n 多语言
|
|
28
28
|
- 多端平台检测与适配
|
|
29
29
|
|
|
30
30
|
---
|
|
31
31
|
|
|
32
|
+
## 使用边界
|
|
33
|
+
|
|
34
|
+
- **优先复用 `@h-ai/ui` 现有组件**,不要在 app 中重复实现同类按钮、表格、表单、弹层或场景页面。
|
|
35
|
+
- **页面级文案与业务逻辑放在应用层**;`@h-ai/ui` 负责展示与交互,不承接业务服务、数据库访问或页面级 i18n 管理。
|
|
36
|
+
- **场景组件自带内置中英文文案**(如 IAM / CRUD / AI / Storage 场景),除非组件显式提供覆盖 prop,否则不要把页面翻译样板再传进去。
|
|
37
|
+
- **自动导入不是全能魔法**:`toast`、类型导入和 `Range` 仍需显式 `import`;其它公开 Svelte 组件可交给 `autoImportHaiUi()`。
|
|
38
|
+
- **移动端组件不是样式糖**:使用 `SafeArea` / `BottomNav` / `PullRefresh` / `ActionSheet` 时,务必同步引入 `design-tokens.css` 与 `mobile.css`。
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## AI 使用顺序(先判断,再落地)
|
|
43
|
+
|
|
44
|
+
### 1. 先确认项目集成是否完整
|
|
45
|
+
|
|
46
|
+
至少检查以下四项:
|
|
47
|
+
|
|
48
|
+
- `svelte.config.*`:`autoImportHaiUi()` 在 `vitePreprocess()` 前。
|
|
49
|
+
- `vite.config.*`:`ssr.noExternal` 包含 `@h-ai/*`,`optimizeDeps.exclude` 包含 `bits-ui`。
|
|
50
|
+
- `app.css`:已导入 `global.css` / `theme.css`;移动端还要导入 `design-tokens.css` / `mobile.css`。
|
|
51
|
+
- Tailwind:已配置 `@source` 扫描 `@h-ai/ui/dist/**/*.{svelte,js,ts}`。
|
|
52
|
+
|
|
53
|
+
如果这四项不完整,优先先补集成,再写页面;否则组件很容易出现“能编译但没样式 / SSR 报错 / 自动导入失效”。
|
|
54
|
+
|
|
55
|
+
### 2. 再选组件层级
|
|
56
|
+
|
|
57
|
+
按复杂度从低到高选:
|
|
58
|
+
|
|
59
|
+
- **primitives**:单个交互单元,例如 `Button`、`Input`、`Select`、`Badge`。
|
|
60
|
+
- **compounds**:通用业务骨架,例如 `Form`、`Modal`、`Drawer`、`DataTable`、`Pagination`。
|
|
61
|
+
- **scenes**:完整业务流,例如 `LoginForm`、`FileUpload`、`CrudPage`、`AiDocumentEditor`。
|
|
62
|
+
|
|
63
|
+
经验法则:
|
|
64
|
+
|
|
65
|
+
- 只是做一个输入控件或按钮行 → 先看 primitives。
|
|
66
|
+
- 需要通用弹层/表格/分页/表单布局 → 先看 compounds。
|
|
67
|
+
- 已经是“登录页 / CRUD 页 / 文件上传页 / AI 文档页”这类完整场景 → 先看 scenes,**不要手搓一遍**。
|
|
68
|
+
|
|
69
|
+
### 3. 常见任务 → 首选组件
|
|
70
|
+
|
|
71
|
+
| 任务 | 首选组件 | 使用要点 |
|
|
72
|
+
| --- | --- | --- |
|
|
73
|
+
| 后台列表页 | `PageHeader` + `Card` + `DataTable` + `Pagination` | 分页、筛选、批量操作优先复用 compounds |
|
|
74
|
+
| 表单页/弹层表单 | `Form` + `FormField` + `Input/Select/...` | 表单字段布局统一交给 `FormField` |
|
|
75
|
+
| 简单确认/详情弹层 | `Modal` / `Drawer` / `Confirm` | 根据桌面/移动端交互选择弹窗或抽屉 |
|
|
76
|
+
| 完整 CRUD 页面 | `CrudPage` | 优先通过 `form` / `pagination` / `density` 配置,不要拆开重写 |
|
|
77
|
+
| 登录/注册/资料页 | `LoginForm` / `RegisterForm` / `UserProfile` | 页面只负责路由和提交逻辑 |
|
|
78
|
+
| 文件/图片上传 | `FileUpload` / `ImageUpload` / `AvatarUpload` | 上传 URL、限制和业务状态由应用层提供 |
|
|
79
|
+
| 移动端页面骨架 | `SafeArea` + `AppBar` + `BottomNav` | 原生壳页面优先这一套 |
|
|
80
|
+
| AI 文档/Markdown 展示 | `MarkdownRenderer` / `AiDocumentEditor` | Mermaid、代码高亮、复制/下载已内置 |
|
|
81
|
+
|
|
82
|
+
### 4. 最后再决定是否自定义样式
|
|
83
|
+
|
|
84
|
+
- 优先通过组件已有 props(`variant` / `size` / `outline` / `class` / snippet slot)调整。
|
|
85
|
+
- 需要统一视觉规范时,优先改 `theme.css` / `design-tokens.css` 对应 token,而不是在页面里散落 magic class。
|
|
86
|
+
- 只有当 `@h-ai/ui` 现有抽象确实不覆盖时,才在应用层补专属组件。
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
32
90
|
## 项目配置(从 npm 安装)
|
|
33
91
|
|
|
34
92
|
> 以下示例面向通过 `npm install @h-ai/ui` 引用发布包的项目。monorepo 内部使用 `workspace:*` 时路径略有不同。
|
|
@@ -333,10 +391,46 @@ const p = usePlatform()
|
|
|
333
391
|
| ------------------- | ---- |
|
|
334
392
|
| `CrudPage` | CRUD 主页面 |
|
|
335
393
|
| `CrudFilterBar` | 过滤工具栏 |
|
|
336
|
-
| `
|
|
337
|
-
| `
|
|
394
|
+
| `CrudDetailPanel` | 详情面板(抽屉/弹窗) |
|
|
395
|
+
| `CrudEditPanel` | 编辑面板(抽屉/弹窗) |
|
|
338
396
|
| `CrudDeleteConfirm` | 删除确认框 |
|
|
339
397
|
|
|
398
|
+
`CrudPage` 是首选入口;只有在你明确要自定义组合方式时,才直接使用 `CrudFilterBar` / `CrudDetailPanel` / `CrudEditPanel`。
|
|
399
|
+
|
|
400
|
+
### CrudPage 配置重点
|
|
401
|
+
|
|
402
|
+
| 配置项 | 说明 |
|
|
403
|
+
| --- | --- |
|
|
404
|
+
| `form.variant` | `'drawer'`(抽屉,默认)或 `'modal'`(弹出窗口) |
|
|
405
|
+
| `form.drawerSize` / `form.drawerWidth` | 抽屉尺寸预设 / 自定义 CSS 宽度(宽度优先) |
|
|
406
|
+
| `form.modalSize` / `form.modalWidth` / `form.modalHeight` | 弹窗尺寸预设 / 自定义宽高 |
|
|
407
|
+
| `pagination.showSizeChanger` | 每页条数选择器(默认开启) |
|
|
408
|
+
| `pagination.pageSizeOptions` | 每页条数候选项(默认 `[10, 20, 50, 100]`) |
|
|
409
|
+
| `pagination.showJumper` / `pagination.showTotal` | 跳页输入 / 总数(默认开启) |
|
|
410
|
+
| `density` | 列表密度:`'normal'`(默认)或 `'compact'` |
|
|
411
|
+
|
|
412
|
+
注意:分页栏会始终显示,不再因数据量小而自动隐藏。
|
|
413
|
+
|
|
414
|
+
### CrudPage 推荐用法
|
|
415
|
+
|
|
416
|
+
```svelte
|
|
417
|
+
<CrudPage
|
|
418
|
+
crud={roleCrud}
|
|
419
|
+
{data}
|
|
420
|
+
permissions={{ create: true, update: true, delete: true }}
|
|
421
|
+
form={{ variant: 'modal', modalSize: 'lg' }}
|
|
422
|
+
pagination={{ showSizeChanger: true, showJumper: true, pageSizeOptions: [10, 20, 50] }}
|
|
423
|
+
density='compact'
|
|
424
|
+
{nav}
|
|
425
|
+
/>
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
如果想维持侧边编辑体验,可改成:
|
|
429
|
+
|
|
430
|
+
```svelte
|
|
431
|
+
form={{ variant: 'drawer', drawerWidth: '40rem' }}
|
|
432
|
+
```
|
|
433
|
+
|
|
340
434
|
---
|
|
341
435
|
|
|
342
436
|
## Design Token 系统
|