@h-ai/ui 0.1.0-alpha.66 → 0.1.0-alpha.68

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 (286) hide show
  1. package/README.en.md +106 -55
  2. package/README.ja.md +106 -55
  3. package/README.md +137 -87
  4. package/dist/components/compounds/Accordion.svelte +24 -0
  5. package/dist/components/compounds/Accordion.svelte.d.ts +34 -0
  6. package/dist/components/compounds/ActionSheet.svelte +24 -0
  7. package/dist/components/compounds/ActionSheet.svelte.d.ts +38 -0
  8. package/dist/components/compounds/Alert.svelte +15 -4
  9. package/dist/components/compounds/Alert.svelte.d.ts +10 -0
  10. package/dist/components/compounds/AppBar.svelte +24 -0
  11. package/dist/components/compounds/AppBar.svelte.d.ts +33 -0
  12. package/dist/components/compounds/BottomNav.svelte +37 -0
  13. package/dist/components/compounds/BottomNav.svelte.d.ts +43 -0
  14. package/dist/components/compounds/Breadcrumb.svelte +11 -0
  15. package/dist/components/compounds/Breadcrumb.svelte.d.ts +20 -0
  16. package/dist/components/compounds/Calendar.svelte +20 -6
  17. package/dist/components/compounds/Calendar.svelte.d.ts +20 -6
  18. package/dist/components/compounds/Card.svelte +10 -0
  19. package/dist/components/compounds/Card.svelte.d.ts +10 -0
  20. package/dist/components/compounds/Combobox.svelte +35 -18
  21. package/dist/components/compounds/Combobox.svelte.d.ts +35 -18
  22. package/dist/components/compounds/Confirm.svelte +11 -0
  23. package/dist/components/compounds/Confirm.svelte.d.ts +21 -0
  24. package/dist/components/compounds/DataTable.svelte +40 -17
  25. package/dist/components/compounds/DataTable.svelte.d.ts +9 -13
  26. package/dist/components/compounds/DatePicker.svelte +20 -6
  27. package/dist/components/compounds/DatePicker.svelte.d.ts +20 -6
  28. package/dist/components/compounds/Drawer.svelte +11 -0
  29. package/dist/components/compounds/Drawer.svelte.d.ts +21 -0
  30. package/dist/components/compounds/Dropdown.svelte +10 -0
  31. package/dist/components/compounds/Dropdown.svelte.d.ts +10 -0
  32. package/dist/components/compounds/Empty.svelte +16 -5
  33. package/dist/components/compounds/Empty.svelte.d.ts +20 -0
  34. package/dist/components/compounds/Form.svelte +37 -2
  35. package/dist/components/compounds/Form.svelte.d.ts +20 -0
  36. package/dist/components/compounds/FormField.svelte +11 -0
  37. package/dist/components/compounds/FormField.svelte.d.ts +20 -0
  38. package/dist/components/compounds/FormLayout.svelte +13 -1
  39. package/dist/components/compounds/FormLayout.svelte.d.ts +13 -0
  40. package/dist/components/compounds/InfiniteScroll.svelte +24 -0
  41. package/dist/components/compounds/InfiniteScroll.svelte.d.ts +34 -0
  42. package/dist/components/compounds/MessageBoxContainer.svelte +11 -0
  43. package/dist/components/compounds/MessageBoxContainer.svelte.d.ts +21 -0
  44. package/dist/components/compounds/MessageBoxDialog.svelte +14 -0
  45. package/dist/components/compounds/MessageBoxDialog.svelte.d.ts +21 -0
  46. package/dist/components/compounds/MessageContainer.svelte +11 -0
  47. package/dist/components/compounds/MessageContainer.svelte.d.ts +21 -0
  48. package/dist/components/compounds/Modal.svelte +10 -0
  49. package/dist/components/compounds/Modal.svelte.d.ts +10 -0
  50. package/dist/components/compounds/PageHeader.svelte +21 -8
  51. package/dist/components/compounds/PageHeader.svelte.d.ts +21 -8
  52. package/dist/components/compounds/Pagination.svelte +34 -8
  53. package/dist/components/compounds/Pagination.svelte.d.ts +20 -0
  54. package/dist/components/compounds/Popover.svelte +11 -0
  55. package/dist/components/compounds/Popover.svelte.d.ts +20 -0
  56. package/dist/components/compounds/PullRefresh.svelte +24 -0
  57. package/dist/components/compounds/PullRefresh.svelte.d.ts +32 -0
  58. package/dist/components/compounds/Result.svelte +11 -0
  59. package/dist/components/compounds/Result.svelte.d.ts +20 -0
  60. package/dist/components/compounds/SafeArea.svelte +24 -0
  61. package/dist/components/compounds/SafeArea.svelte.d.ts +32 -0
  62. package/dist/components/compounds/Skeleton.svelte +10 -0
  63. package/dist/components/compounds/Skeleton.svelte.d.ts +10 -0
  64. package/dist/components/compounds/Steps.svelte +11 -0
  65. package/dist/components/compounds/Steps.svelte.d.ts +20 -0
  66. package/dist/components/compounds/SwipeCell.svelte +24 -0
  67. package/dist/components/compounds/SwipeCell.svelte.d.ts +37 -0
  68. package/dist/components/compounds/TableToolbar.svelte +66 -28
  69. package/dist/components/compounds/TableToolbar.svelte.d.ts +29 -19
  70. package/dist/components/compounds/Tabs.svelte +58 -10
  71. package/dist/components/compounds/Tabs.svelte.d.ts +10 -0
  72. package/dist/components/compounds/TagInput.svelte +11 -0
  73. package/dist/components/compounds/TagInput.svelte.d.ts +20 -0
  74. package/dist/components/compounds/Timeline.svelte +24 -0
  75. package/dist/components/compounds/Timeline.svelte.d.ts +34 -0
  76. package/dist/components/compounds/ToastContainer.svelte +11 -0
  77. package/dist/components/compounds/ToastContainer.svelte.d.ts +26 -0
  78. package/dist/components/compounds/Tooltip.svelte +11 -0
  79. package/dist/components/compounds/Tooltip.svelte.d.ts +22 -0
  80. package/dist/components/compounds/accordion-types.d.ts +10 -1
  81. package/dist/components/compounds/action-sheet-types.d.ts +9 -0
  82. package/dist/components/compounds/bottom-nav-types.d.ts +9 -0
  83. package/dist/components/compounds/swipe-cell-types.d.ts +9 -0
  84. package/dist/components/compounds/timeline-types.d.ts +9 -0
  85. package/dist/components/control-size.d.ts +17 -0
  86. package/dist/components/control-size.js +8 -0
  87. package/dist/components/primitives/Avatar.svelte +10 -0
  88. package/dist/components/primitives/Avatar.svelte.d.ts +10 -0
  89. package/dist/components/primitives/Badge.svelte +10 -0
  90. package/dist/components/primitives/Badge.svelte.d.ts +10 -0
  91. package/dist/components/primitives/BareButton.svelte +11 -0
  92. package/dist/components/primitives/BareButton.svelte.d.ts +20 -0
  93. package/dist/components/primitives/BareInput.svelte +11 -0
  94. package/dist/components/primitives/BareInput.svelte.d.ts +20 -0
  95. package/dist/components/primitives/Button.svelte +10 -0
  96. package/dist/components/primitives/Button.svelte.d.ts +10 -0
  97. package/dist/components/primitives/Checkbox.svelte +11 -0
  98. package/dist/components/primitives/Checkbox.svelte.d.ts +20 -0
  99. package/dist/components/primitives/IconButton.svelte +11 -0
  100. package/dist/components/primitives/IconButton.svelte.d.ts +20 -0
  101. package/dist/components/primitives/Input.svelte +10 -0
  102. package/dist/components/primitives/Input.svelte.d.ts +10 -0
  103. package/dist/components/primitives/Progress.svelte +11 -0
  104. package/dist/components/primitives/Progress.svelte.d.ts +20 -0
  105. package/dist/components/primitives/Radio.svelte +11 -0
  106. package/dist/components/primitives/Radio.svelte.d.ts +20 -0
  107. package/dist/components/primitives/Range.svelte +24 -0
  108. package/dist/components/primitives/Range.svelte.d.ts +34 -0
  109. package/dist/components/primitives/Rating.svelte +24 -0
  110. package/dist/components/primitives/Rating.svelte.d.ts +34 -0
  111. package/dist/components/primitives/Select.svelte +11 -0
  112. package/dist/components/primitives/Select.svelte.d.ts +21 -0
  113. package/dist/components/primitives/Spinner.svelte +11 -0
  114. package/dist/components/primitives/Spinner.svelte.d.ts +20 -0
  115. package/dist/components/primitives/Switch.svelte +11 -0
  116. package/dist/components/primitives/Switch.svelte.d.ts +20 -0
  117. package/dist/components/primitives/Tag.svelte +11 -0
  118. package/dist/components/primitives/Tag.svelte.d.ts +20 -0
  119. package/dist/components/primitives/Textarea.svelte +11 -0
  120. package/dist/components/primitives/Textarea.svelte.d.ts +21 -0
  121. package/dist/components/primitives/ToggleCheckbox.svelte +11 -0
  122. package/dist/components/primitives/ToggleCheckbox.svelte.d.ts +20 -0
  123. package/dist/components/primitives/ToggleInput.svelte +11 -0
  124. package/dist/components/primitives/ToggleInput.svelte.d.ts +20 -0
  125. package/dist/components/primitives/ToggleRadio.svelte +11 -0
  126. package/dist/components/primitives/ToggleRadio.svelte.d.ts +20 -0
  127. package/dist/components/scenes/ai/AiDocumentDownloadMenu.svelte +27 -0
  128. package/dist/components/scenes/ai/AiDocumentDownloadMenu.svelte.d.ts +27 -0
  129. package/dist/components/scenes/ai/AiDocumentEditor.svelte +79 -0
  130. package/dist/components/scenes/ai/AiDocumentEditor.svelte.d.ts +23 -0
  131. package/dist/components/scenes/ai/MarkdownRenderer.svelte +11 -0
  132. package/dist/components/scenes/ai/MarkdownRenderer.svelte.d.ts +28 -0
  133. package/dist/components/scenes/ai/code-preview.d.ts +28 -0
  134. package/dist/components/scenes/ai/code-preview.js +20 -0
  135. package/dist/components/scenes/ai/document-download.d.ts +52 -0
  136. package/dist/components/scenes/ai/document-download.js +30 -2
  137. package/dist/components/scenes/ai/document-parse.d.ts +71 -14
  138. package/dist/components/scenes/ai/document-parse.js +19 -9
  139. package/dist/components/scenes/ai/document-types.d.ts +222 -88
  140. package/dist/components/scenes/ai/editor-markdown-extensions.d.ts +16 -0
  141. package/dist/components/scenes/ai/editor-markdown-extensions.js +16 -0
  142. package/dist/components/scenes/ai/highlight.d.ts +11 -0
  143. package/dist/components/scenes/ai/highlight.js +11 -0
  144. package/dist/components/scenes/ai/markdown-parse.d.ts +8 -2
  145. package/dist/components/scenes/ai/markdown-parse.js +2 -2
  146. package/dist/components/scenes/ai/mermaid-host-sync.d.ts +38 -0
  147. package/dist/components/scenes/ai/mermaid-host-sync.js +30 -0
  148. package/dist/components/scenes/ai/mermaid-render.d.ts +23 -0
  149. package/dist/components/scenes/ai/mermaid-render.js +23 -0
  150. package/dist/components/scenes/ai/safe-html.d.ts +54 -6
  151. package/dist/components/scenes/ai/safe-html.js +54 -6
  152. package/dist/components/scenes/ai/table/AiTableEditor.svelte +48 -0
  153. package/dist/components/scenes/ai/table/AiTableEditor.svelte.d.ts +24 -0
  154. package/dist/components/scenes/ai/table/table-types.d.ts +79 -0
  155. package/dist/components/scenes/app/FeedbackModal.svelte +45 -5
  156. package/dist/components/scenes/app/FeedbackModal.svelte.d.ts +45 -5
  157. package/dist/components/scenes/app/LanguageSwitch.svelte +29 -19
  158. package/dist/components/scenes/app/LanguageSwitch.svelte.d.ts +28 -19
  159. package/dist/components/scenes/app/SettingsLayout.svelte +21 -9
  160. package/dist/components/scenes/app/SettingsLayout.svelte.d.ts +21 -9
  161. package/dist/components/scenes/app/SettingsModal.svelte +23 -0
  162. package/dist/components/scenes/app/SettingsModal.svelte.d.ts +23 -0
  163. package/dist/components/scenes/app/ThemeColorPicker.svelte +31 -0
  164. package/dist/components/scenes/app/ThemeColorPicker.svelte.d.ts +31 -0
  165. package/dist/components/scenes/app/ThemeSelector.svelte +21 -6
  166. package/dist/components/scenes/app/ThemeSelector.svelte.d.ts +21 -6
  167. package/dist/components/scenes/app/ThemeToggle.svelte +21 -4
  168. package/dist/components/scenes/app/ThemeToggle.svelte.d.ts +21 -4
  169. package/dist/components/scenes/app/index.d.ts +1 -1
  170. package/dist/components/scenes/app/index.js +1 -1
  171. package/dist/components/scenes/charts/Chart.svelte +11 -0
  172. package/dist/components/scenes/charts/Chart.svelte.d.ts +20 -0
  173. package/dist/components/scenes/charts/chart-theme.d.ts +25 -1
  174. package/dist/components/scenes/charts/chart-theme.js +25 -1
  175. package/dist/components/scenes/charts/chart-types.d.ts +83 -7
  176. package/dist/components/scenes/charts/renderers/LineChart.svelte +53 -0
  177. package/dist/components/scenes/charts/renderers/LineChart.svelte.d.ts +13 -0
  178. package/dist/components/scenes/crud/CrudDeleteConfirm.svelte +10 -0
  179. package/dist/components/scenes/crud/CrudDeleteConfirm.svelte.d.ts +10 -0
  180. package/dist/components/scenes/crud/CrudDetailDrawer.svelte +8 -0
  181. package/dist/components/scenes/crud/CrudDetailDrawer.svelte.d.ts +8 -0
  182. package/dist/components/scenes/crud/CrudDetailPanel.svelte +18 -0
  183. package/dist/components/scenes/crud/CrudDetailPanel.svelte.d.ts +18 -0
  184. package/dist/components/scenes/crud/CrudEditPanel.svelte +10 -0
  185. package/dist/components/scenes/crud/CrudEditPanel.svelte.d.ts +10 -0
  186. package/dist/components/scenes/crud/CrudFilterBar.svelte +18 -0
  187. package/dist/components/scenes/crud/CrudFilterBar.svelte.d.ts +18 -0
  188. package/dist/components/scenes/crud/CrudPage.svelte +37 -5
  189. package/dist/components/scenes/crud/CrudPage.svelte.d.ts +35 -3
  190. package/dist/components/scenes/crud/crud-controller.svelte.d.ts +142 -23
  191. package/dist/components/scenes/crud/crud-controller.svelte.js +22 -11
  192. package/dist/components/scenes/crud/crud-form-validation.d.ts +12 -0
  193. package/dist/components/scenes/crud/crud-form-validation.js +12 -0
  194. package/dist/components/scenes/crud/crud-types.d.ts +79 -8
  195. package/dist/components/scenes/crud/nav-adapter.d.ts +14 -0
  196. package/dist/components/scenes/crud/nav-adapter.js +8 -0
  197. package/dist/components/scenes/crypto/EncryptedInput.svelte +24 -0
  198. package/dist/components/scenes/crypto/EncryptedInput.svelte.d.ts +34 -0
  199. package/dist/components/scenes/crypto/HashDisplay.svelte +11 -0
  200. package/dist/components/scenes/crypto/HashDisplay.svelte.d.ts +21 -0
  201. package/dist/components/scenes/crypto/SignatureDisplay.svelte +11 -0
  202. package/dist/components/scenes/crypto/SignatureDisplay.svelte.d.ts +21 -0
  203. package/dist/components/scenes/error/ErrorPage.svelte +8 -1
  204. package/dist/components/scenes/error/ErrorPage.svelte.d.ts +8 -1
  205. package/dist/components/scenes/error/error-presets.d.ts +40 -4
  206. package/dist/components/scenes/error/error-presets.js +22 -2
  207. package/dist/components/scenes/guide/GuideHost.svelte +27 -0
  208. package/dist/components/scenes/guide/GuideHost.svelte.d.ts +27 -0
  209. package/dist/components/scenes/guide/HelpCenter.svelte +27 -0
  210. package/dist/components/scenes/guide/HelpCenter.svelte.d.ts +27 -0
  211. package/dist/components/scenes/iam/AuthPanel.svelte +26 -2
  212. package/dist/components/scenes/iam/AuthPanel.svelte.d.ts +25 -0
  213. package/dist/components/scenes/iam/AuthShell.svelte +8 -3
  214. package/dist/components/scenes/iam/AuthShell.svelte.d.ts +8 -3
  215. package/dist/components/scenes/iam/ChangePasswordForm.svelte +10 -0
  216. package/dist/components/scenes/iam/ChangePasswordForm.svelte.d.ts +10 -0
  217. package/dist/components/scenes/iam/ForgotPasswordForm.svelte +11 -0
  218. package/dist/components/scenes/iam/ForgotPasswordForm.svelte.d.ts +21 -0
  219. package/dist/components/scenes/iam/LoginForm.svelte +24 -31
  220. package/dist/components/scenes/iam/LoginForm.svelte.d.ts +10 -0
  221. package/dist/components/scenes/iam/PasswordInput.svelte +23 -0
  222. package/dist/components/scenes/iam/PasswordInput.svelte.d.ts +23 -0
  223. package/dist/components/scenes/iam/PermGuard.svelte +21 -11
  224. package/dist/components/scenes/iam/PermGuard.svelte.d.ts +30 -0
  225. package/dist/components/scenes/iam/RegisterForm.svelte +10 -0
  226. package/dist/components/scenes/iam/RegisterForm.svelte.d.ts +10 -0
  227. package/dist/components/scenes/iam/ResetPasswordForm.svelte +10 -0
  228. package/dist/components/scenes/iam/ResetPasswordForm.svelte.d.ts +10 -0
  229. package/dist/components/scenes/iam/UserProfile.svelte +11 -0
  230. package/dist/components/scenes/iam/UserProfile.svelte.d.ts +21 -0
  231. package/dist/components/scenes/iam/auth-error-message.d.ts +10 -0
  232. package/dist/components/scenes/iam/auth-error-message.js +10 -0
  233. package/dist/components/scenes/iam/password-utils.d.ts +39 -1
  234. package/dist/components/scenes/iam/password-utils.js +39 -1
  235. package/dist/components/scenes/iam/permission-context.svelte.d.ts +33 -23
  236. package/dist/components/scenes/iam/permission-context.svelte.js +20 -22
  237. package/dist/components/scenes/storage/AvatarUpload.svelte +11 -0
  238. package/dist/components/scenes/storage/AvatarUpload.svelte.d.ts +20 -0
  239. package/dist/components/scenes/storage/FileList.svelte +13 -2
  240. package/dist/components/scenes/storage/FileList.svelte.d.ts +20 -0
  241. package/dist/components/scenes/storage/FileUpload.svelte +37 -2
  242. package/dist/components/scenes/storage/FileUpload.svelte.d.ts +21 -0
  243. package/dist/components/scenes/storage/ImageUpload.svelte +11 -0
  244. package/dist/components/scenes/storage/ImageUpload.svelte.d.ts +21 -0
  245. package/dist/components/scenes/types.d.ts +352 -11
  246. package/dist/guide-storage.d.ts +13 -1
  247. package/dist/guide-storage.js +13 -1
  248. package/dist/guide-types.d.ts +67 -2
  249. package/dist/guide.svelte.d.ts +22 -1
  250. package/dist/guide.svelte.js +22 -1
  251. package/dist/i18n.svelte.d.ts +64 -3
  252. package/dist/i18n.svelte.js +99 -18
  253. package/dist/index.d.ts +2 -1
  254. package/dist/index.js +1 -2
  255. package/dist/internal/browser-safety.d.ts +51 -2
  256. package/dist/internal/browser-safety.js +45 -7
  257. package/dist/internal/form-context.d.ts +73 -0
  258. package/dist/internal/form-context.js +57 -0
  259. package/dist/internal/form-validation.svelte.d.ts +42 -0
  260. package/dist/internal/form-validation.svelte.js +26 -0
  261. package/dist/internal/icon-safety.d.ts +7 -0
  262. package/dist/internal/icon-safety.js +7 -0
  263. package/dist/internal/locale.d.ts +19 -0
  264. package/dist/internal/locale.js +21 -0
  265. package/dist/message.svelte.d.ts +90 -0
  266. package/dist/message.svelte.js +84 -0
  267. package/dist/messagebox.svelte.d.ts +61 -13
  268. package/dist/messagebox.svelte.js +55 -13
  269. package/dist/messages/en-US.json +6 -1
  270. package/dist/messages/ja-JP.json +389 -0
  271. package/dist/messages/zh-CN.json +6 -1
  272. package/dist/messages.d.ts +24 -3
  273. package/dist/messages.js +18 -3
  274. package/dist/styles/design-tokens.css +4 -2
  275. package/dist/styles/global.css +28 -8
  276. package/dist/styles/theme.css +2 -0
  277. package/dist/theme-config.d.ts +173 -0
  278. package/dist/theme-config.js +143 -0
  279. package/dist/toast.svelte.d.ts +114 -4
  280. package/dist/toast.svelte.js +108 -4
  281. package/dist/types.d.ts +526 -9
  282. package/dist/utils/platform.svelte.d.ts +28 -15
  283. package/dist/utils/platform.svelte.js +19 -14
  284. package/dist/utils.d.ts +102 -0
  285. package/dist/utils.js +93 -0
  286. package/package.json +66 -6
package/README.md CHANGED
@@ -4,19 +4,31 @@
4
4
 
5
5
  [框架首页](../../README.md) · 相关模块:[@h-ai/core](../core/README.md)
6
6
 
7
- > 基于 Svelte 5 Runes 的多端 UI 组件库,采用 DaisyUI v5 + Tailwind CSS v4 样式 + Bits UI v2 headless 交互,内置 i18n(zh-CN / en-US),内置 15 个精选 DaisyUI 主题。
7
+ ## 简介
8
8
 
9
- ## 安装
9
+ 内置中英日文消息(`zh-CN` / `en-US` / `ja-JP`),语言选择器默认提供三种语言。
10
+
11
+ 基于 Svelte 5 Runes 的多端 UI 组件库,采用 DaisyUI v5 + Tailwind CSS v4 样式 + Bits UI v2 headless 交互,内置 i18n(zh-CN / en-US),内置 15 个精选 DaisyUI 主题。
12
+
13
+ ## 核心功能清单
14
+
15
+ - 表单、表格、弹窗、导航、图表与业务场景组件。
16
+ - 认证、CRUD、AI 内容展示、新手引导和帮助中心。
17
+ - Svelte 5、主题切换、响应式布局及中英日文组件文案。
18
+
19
+ ## 使用入门
20
+
21
+ ### 安装
10
22
 
11
23
  ```bash
12
- npm install @h-ai/ui
24
+ npm install @h-ai/ui @h-ai/core
13
25
  ```
14
26
 
15
- 依赖 `@h-ai/core`(会自动安装)。
27
+ Node 服务端工程将 UI 与 core 都列为生产依赖,确保适配器保留 core 的日志和原生依赖加载。
16
28
 
17
- ## 快速开始
29
+ ### 快速开始
18
30
 
19
- ### 1. 配置 svelte.config.js
31
+ #### 1. 配置 svelte.config.js
20
32
 
21
33
  ```js
22
34
  import { autoImportHaiUi } from '@h-ai/ui/auto-import'
@@ -33,7 +45,7 @@ const config = {
33
45
  export default config
34
46
  ```
35
47
 
36
- ### 2. 配置 vite.config.ts
48
+ #### 2. 配置 vite.config.ts
37
49
 
38
50
  ```ts
39
51
  import { haiOptimizeExclude, haiPrebundledDeps } from '@h-ai/ui/vite'
@@ -51,11 +63,13 @@ export default defineConfig({
51
63
  // 避免首次进入业务路由时触发依赖再优化与整页刷新
52
64
  include: [...haiPrebundledDeps],
53
65
  },
54
- ssr: { noExternal: [/@h-ai\//] },
66
+ ssr: { noExternal: ['@h-ai/ui', '@h-ai/kit'], external: ['@h-ai/core', 'sm-crypto'] },
55
67
  })
56
68
  ```
57
69
 
58
- ### 3. 配置 src/app.css
70
+ 使用 Crypto 或依赖它的 Kit/IAM 时,应用生产依赖需包含 `sm-crypto@0.5.7`。CLI 已配好这一项;手工接入时运行 `pnpm add sm-crypto@0.5.7`。仅设置 external 不够,adapter-node 还需要这项直接依赖声明才能保留原包加载。
71
+
72
+ #### 3. 配置 src/app.css
59
73
 
60
74
  ```css
61
75
  @import 'tailwindcss';
@@ -76,7 +90,7 @@ export default defineConfig({
76
90
 
77
91
  > `@source` 让 TailwindCSS 扫描 `@h-ai/ui` 组件中使用的 class 名,否则组件样式会丢失。嵌套应用位于 monorepo 中时,依赖包可能被提升到工作区根 `node_modules`,所以建议同时保留两条路径。
78
92
 
79
- ### 4. 使用组件
93
+ #### 4. 使用组件
80
94
 
81
95
  ```svelte
82
96
  <script>
@@ -108,7 +122,7 @@ import { Button } from '@h-ai/ui/components/primitives/index'
108
122
  import { getThemeInfo, THEMES } from '@h-ai/ui/theme'
109
123
  ```
110
124
 
111
- ### data-* 属性透传
125
+ #### data-* 属性透传
112
126
 
113
127
  公开 Svelte 组件支持把调用方传入的 `data-*` 属性透传到组件根节点或主交互节点,便于测试选择器、埋点和自动化标记。普通未知属性不会被透传。
114
128
 
@@ -120,7 +134,7 @@ import { getThemeInfo, THEMES } from '@h-ai/ui/theme'
120
134
 
121
135
  无需再为了 `data-testid` 单独封装按钮、输入框或弹层组件。
122
136
 
123
- ## 组件架构
137
+ ### 组件架构
124
138
 
125
139
  组件按三层划分(primitives → compounds → scenes):
126
140
 
@@ -137,9 +151,9 @@ components/
137
151
  └── crypto/ # 加密展示
138
152
  ```
139
153
 
140
- ## 组件清单
154
+ ### 组件清单
141
155
 
142
- ### 原子组件 Primitives(20 个)
156
+ #### 原子组件 Primitives(20 个)
143
157
 
144
158
  | 组件 | 描述 | 主要属性 |
145
159
  | ---------------- | ------------ | ------------------------------------------------------------------ |
@@ -166,9 +180,9 @@ components/
166
180
 
167
181
  `BareInput` 的 `file` 类型通过 `onchange` 读取 `event.currentTarget.files`,不绑定文件路径 `value`;其他输入类型可使用 `bind:value`。
168
182
 
169
- ### 组合组件 Compounds(37 个)
183
+ #### 组合组件 Compounds(37 个)
170
184
 
171
- #### 表单
185
+ ##### 表单
172
186
 
173
187
  | 组件 | 描述 | 主要属性 |
174
188
  | ----------- | -------- | -------------------------------------------- |
@@ -177,7 +191,7 @@ components/
177
191
  | `FormLayout` | 表单布局 | `columns`, `labelPosition`, `labelWidth` |
178
192
  | `TagInput` | 标签输入 | `tags`, `maxTags`, `allowDuplicates`, `size` |
179
193
 
180
- #### 表单布局与校验
194
+ ##### 表单布局与校验
181
195
 
182
196
  `Form` 和可嵌入原生 `<form>` 的 `FormLayout` 共用 `columns={1 | 2}`、`labelPosition="top" | "left"`、`labelWidth`(默认 `8rem`)。默认单列、标签独立成行;双列在容器不足 `36rem` 时收为单列,同行标签在容器不足 `28rem` 时改为上下排列。
183
197
 
@@ -185,7 +199,7 @@ components/
185
199
 
186
200
  标签自动关联内部 UI 控件;已有控件 ID 或原生控件使用 `<FormField for="control-id">`。错误/提示通过 `aria-describedby` 关联,错误控件带 `aria-invalid`,只显示一份字段提示。`label` / `error` / `hint` 支持字符串或延迟翻译函数。
187
201
 
188
- `Input`、`Textarea`、`Select` 和 `PasswordInput` 的原生校验使用内置中英文提示;`validationMessage` 只覆盖失败提示,不让有效输入一直无效。应用通过 UI 的 `setGlobalLocale` / `createLocaleStore` 同步语言,已显示的校验错误即时更新。`Textarea` 支持 `minlength` / `maxlength`,`Select` 支持 `name`、必填校验和 FormData 序列化。
202
+ `Input`、`Textarea`、`Select` 和 `PasswordInput` 的原生校验使用内置中英日文提示;`validationMessage` 只覆盖失败提示,不让有效输入一直无效。应用通过 UI 的 `setGlobalLocale` / `createLocaleStore` 同步语言,已显示的校验错误即时更新。`Textarea` 支持 `minlength` / `maxlength`,`Select` 支持 `name`、必填校验和 FormData 序列化。
189
203
 
190
204
  字段首次失焦后显示前端校验错误,修正输入时即时更新;未访问的字段在提交时统一校验。CRUD 新增/编辑复用该行为,支持自定义校验文案,关闭重开清空校验状态。`Select` 在焦点离开触发器和选项后校验。`PasswordInput.minLength` 同时约束长度并用于强度计算;省略时不限制登录密码长度,强度计算仍以 8 位为基准。
191
205
 
@@ -206,14 +220,14 @@ components/
206
220
  </Form>
207
221
  ```
208
222
 
209
- #### 反馈
223
+ ##### 反馈
210
224
 
211
225
  | 组件 | 描述 | 主要属性 |
212
226
  | ---------------- | -------- | --------------------------------- |
213
227
  | `Alert` | 警告框 | `variant`, `title`, `dismissible` |
214
228
  | `ToastContainer` | 通知容器 | 全局放置,配合 `toast` 单例使用 |
215
229
 
216
- #### 弹层
230
+ ##### 弹层
217
231
 
218
232
  | 组件 | 描述 | 主要属性 |
219
233
  | --------- | ------ | ------------------------------------------------------- |
@@ -222,7 +236,7 @@ components/
222
236
  | `Confirm` | 确认框 | `open`, `title`, `message`, `variant`, `onconfirm` |
223
237
  | `Popover` | 弹出层 | `open`, `position`, `trigger`, `offset`, `portal` |
224
238
 
225
- #### 数据展示
239
+ ##### 数据展示
226
240
 
227
241
  | 组件 | 描述 | 主要属性 |
228
242
  | ----------- | -------- | ---------------------------------------- |
@@ -231,7 +245,7 @@ components/
231
245
  | `Accordion` | 手风琴 | `items: AccordionItem[]` |
232
246
  | `Timeline` | 时间线 | `items: TimelineItem[]` |
233
247
 
234
- #### Bits UI headless 交互
248
+ ##### Bits UI headless 交互
235
249
 
236
250
  | 组件 | 描述 | 主要属性 |
237
251
  | ------------ | --------------------------- | ----------------------------------------------------------- |
@@ -241,7 +255,7 @@ components/
241
255
 
242
256
  > 日期值使用 `@internationalized/date` 的 `DateValue` / `CalendarDate` 类型。
243
257
 
244
- #### 移动端 / 增强交互
258
+ ##### 移动端 / 增强交互
245
259
 
246
260
  | 组件 | 描述 | 主要属性 |
247
261
  | ---------------- | ------------ | --------------------------------------------------- |
@@ -253,7 +267,7 @@ components/
253
267
  | `SafeArea` | 安全区域容器 | `top`, `bottom`, `left`, `right` |
254
268
  | `SwipeCell` | 滑动操作单元 | `leftActions`, `rightActions`, `threshold`, `onaction` |
255
269
 
256
- #### 导航
270
+ ##### 导航
257
271
 
258
272
  | 组件 | 描述 | 主要属性 |
259
273
  | ------------ | -------- | -------------------------------------------- |
@@ -264,7 +278,7 @@ components/
264
278
  | `Dropdown` | 下拉菜单 | `items`, `trigger`, `triggerClass`, `position` |
265
279
  | `Tooltip` | 提示 | `content`, `position`, `delay` |
266
280
 
267
- #### 状态占位
281
+ ##### 状态占位
268
282
 
269
283
  | 组件 | 描述 | 主要属性 |
270
284
  | ---------- | ------ | ------------------------------------- |
@@ -272,22 +286,22 @@ components/
272
286
  | `Empty` | 空状态 | `title`, `description`, `icon` |
273
287
  | `Result` | 结果页 | `status`, `title`, `description` |
274
288
 
275
- #### 页面级
289
+ ##### 页面级
276
290
 
277
291
  | 组件 | 描述 | 主要属性 |
278
292
  | ------------ | -------- | ------------------------------------------- |
279
293
  | `PageHeader` | 页面头部 | `title`, `description`,支持 `actions` 插槽 |
280
294
 
281
- ### 场景组件 Scenes(36 个)
295
+ #### 场景组件 Scenes(36 个)
282
296
 
283
- #### Guide 引导与帮助(2 个)
297
+ ##### Guide 引导与帮助(2 个)
284
298
 
285
299
  | 组件 | 描述 | 主要属性 |
286
300
  | --- | --- | --- |
287
301
  | `GuideHost` | 首次邀请、页面导览与帮助弹窗宿主 | `guide`, `locale`, `scope`, `autoStart` |
288
302
  | `HelpCenter` | 可独立使用的帮助中心 | `articles`, `tours`, `locale`, `selectedId`, `onstart` |
289
303
 
290
- #### App 应用级(7 个)
304
+ ##### App 应用级(7 个)
291
305
 
292
306
  | 组件 | 描述 | 主要属性 |
293
307
  | ---------------- | ---------------- | ------------------ |
@@ -299,13 +313,13 @@ components/
299
313
  | `ThemeSelector` | 完整主题选择面板 | 无需 Props |
300
314
  | `ThemeToggle` | 明/暗主题切换 | 无需 Props |
301
315
 
302
- #### IAM 身份认证(10 个)
316
+ ##### IAM 身份认证(10 个)
303
317
 
304
318
  | 组件 | 描述 | 主要属性 |
305
319
  | -------------------- | ---------- | ----------------------------------------------------- |
306
320
  | `AuthPanel` | 配置驱动认证页 | `config`, `actions`, `loginHeader/loginFields/loginFooter`, `registerHeader/registerFields/registerFooter` |
307
321
  | `AuthShell` | 认证页布局(居中卡片 / 左右分栏) | `variant`, `title`, `subtitle`, `brandTitle`, `brandText`, `illustration`, `description`, `highlights` |
308
- | `LoginForm` | 登录表单 | `loading`, `errors`, `showRememberMe`, `onsubmit` |
322
+ | `LoginForm` | 登录表单 | `loading`, `errors`, `showForgotPassword`, `onsubmit` |
309
323
  | `RegisterForm` | 注册表单 | `loading`, `errors`, `fields`, `onsubmit` |
310
324
  | `ForgotPasswordForm` | 忘记密码 | `mode`, `loading`, `errors`, `onsubmit` |
311
325
  | `ResetPasswordForm` | 重置密码 | `loading`, `errors`, `showCode`, `onsubmit` |
@@ -314,7 +328,7 @@ components/
314
328
  | `PermGuard` | 权限守卫 | `permissions`, `mode`, `fallback` |
315
329
  | `UserProfile` | 用户资料 | `user`, `editable`, `fields`, `avatarAccept`, `avatarHint`, `onsubmit` |
316
330
 
317
- #### Storage 存储(4 个)
331
+ ##### Storage 存储(4 个)
318
332
 
319
333
  | 组件 | 描述 | 主要属性 |
320
334
  | -------------- | -------- | -------------------------------------------------------- |
@@ -325,7 +339,7 @@ components/
325
339
 
326
340
  上传组件不内置 presign、请求头或 PUT/POST 协议。应用层通过 `uploadHandler(file, { signal, onProgress })` 调用自己的 service,并返回 `{ url?, response? }`;图片和头像上传需要返回可展示的 `url`。未提供 handler 时,`FileUpload` 只选择文件,图片/头像组件只生成本地预览。
327
341
 
328
- #### Crypto 加密展示(3 个)
342
+ ##### Crypto 加密展示(3 个)
329
343
 
330
344
  输入变化立即清空 `encryptedValue`,只有当前输入的成功结果会回填;清空、回调替换和卸载均使旧请求失效。失败显示内置错误提示且密文保持为空;表单应仅在当前密文非空时提交需要加密的输入。
331
345
 
@@ -339,7 +353,7 @@ components/
339
353
 
340
354
  默认算法与 `@h-ai/crypto` 对齐:加密输入使用 `SM4`,哈希展示使用 `SM3`,签名展示使用 `SM2`。
341
355
 
342
- #### AI 文档与表格(4 个)
356
+ ##### AI 文档与表格(4 个)
343
357
 
344
358
  | 组件 | 描述 | 主要属性 / 能力 |
345
359
  | ------------------------ | ---------------- | ---------------- |
@@ -369,7 +383,7 @@ components/
369
383
  />
370
384
  ```
371
385
 
372
- #### Charts 图表
386
+ ##### Charts 图表
373
387
 
374
388
  `Chart type='line'` 默认透传 LayerChart 原生折线图;需要监控看板常见的“分段线 + 圆点 + 最近点 hover + 竖向参考线”时,使用 `lineVariant='segmented-point'`:
375
389
 
@@ -388,7 +402,7 @@ components/
388
402
  />
389
403
  ```
390
404
 
391
- #### CRUD 场景(5 个)
405
+ ##### CRUD 场景(5 个)
392
406
 
393
407
  | 组件 | 描述 | 主要属性 / 能力 |
394
408
  | -------------------- | ------------ | ---------------- |
@@ -401,10 +415,11 @@ components/
401
415
  > `CrudPage` 默认使用 `TableToolbar` 图标弹层工具栏,也可通过 `toolbarStyle='filter-bar'` 切回平铺筛选栏;`detailColumns={['title']}` 可把标题等指定列绑定为详情入口;`toolbarLeading` 用于注入左侧标题或说明,配合 `showHeader={false}` 可避免重复标题;`toolbarActions` 注入右侧业务操作,`card` 插槽可将列表项替换为卡片视图,`tableCell` 可按行和列 key 渲染交互式单元格内容(例如 Tooltip),`sortableColumns` 控制服务端排序字段。过滤工具栏支持 `select`、`boolean`、`number`、`date`、`date-range`、`text`。
402
416
  >
403
417
  > 页面根容器会占满父级可用高度。表格无论是否有数据都会撑满剩余空间,仅数据区域滚动;表头固定在数据区顶部,分页栏固定在列表卡片底部。
418
+ > 宿主从视口外壳到内容区须逐层传递剩余高度(例如 `flex flex-1 min-h-0 flex-col`),中间包装层不能仅按内容自动计算高度。空表、少量数据和长列表均沿用底部分页。
404
419
  >
405
420
  > 表格列会优先压缩到 7rem 并截断超长文本;列总宽度仍超过容器时才显示横向滚动条。操作列固定在右侧,横向滚动时保持可见。
406
421
 
407
- #### 错误页场景(1 个)
422
+ ##### 错误页场景(1 个)
408
423
 
409
424
  | 组件 | 描述 | 主要属性 / 能力 |
410
425
  | ----------- | ------------ | ---------------- |
@@ -435,9 +450,9 @@ components/
435
450
  >
436
451
  > `Tabs` 支持惰性页签:`lazy` 开启后未激活过的页签内容不渲染(`children` 提供 `isActivated(key)` 判断),`onactivate(key)` 在页签首次激活时触发一次,适合配合 `createCrudController({ autoLoad: false })` 在首次可见时才加载。
437
452
 
438
- ## 使用示例
453
+ ### 使用示例
439
454
 
440
- ### Toast 通知
455
+ #### Toast 通知
441
456
 
442
457
  ```svelte
443
458
  <script>
@@ -457,7 +472,7 @@ components/
457
472
 
458
473
  > 已内置 `notifySuccess` / `notifyError` / `notifyInfo` / `notifyWarning` 封装,业务应用无需自建 toast 工具文件:`notifyError(err, fallback?)` 接受 `Error` 或字符串并内置兑底文案,默认成功 3s / 失败 5s。
459
474
 
460
- ### Message 消息提示
475
+ #### Message 消息提示
461
476
 
462
477
  ```svelte
463
478
  <script>
@@ -475,7 +490,7 @@ components/
475
490
  <MessageContainer />
476
491
  ```
477
492
 
478
- ### 典型 CRUD 页面
493
+ #### 典型 CRUD 页面
479
494
 
480
495
  ```svelte
481
496
  <script>
@@ -545,7 +560,7 @@ components/
545
560
 
546
561
  `Modal` 不传 `title` / `header` 时会保留右上角关闭按钮,但不额外渲染整条头部。需要调整圆角时可传 `radius="1.4rem"`,内部下拉等浮层需要越界显示时可传 `bodyOverflow="visible"`。
547
562
 
548
- ### 声明式 CRUD 页面(CrudPage)
563
+ #### 声明式 CRUD 页面(CrudPage)
549
564
 
550
565
  ```svelte
551
566
  <script lang='ts'>
@@ -571,7 +586,7 @@ components/
571
586
 
572
587
  > 抽屉形式可改用 `form={{ variant: 'drawer', drawerWidth: '40rem' }}`;用户拖动后的宽度会覆盖初始宽度并按资源记忆。
573
588
 
574
- ### 登录页面
589
+ #### 登录页面
575
590
 
576
591
  ```svelte
577
592
  <script>
@@ -597,7 +612,7 @@ components/
597
612
  <LoginForm {loading} {errors} onsubmit={handleLogin} showRegisterLink />
598
613
  ```
599
614
 
600
- ### PasswordInput 受控模式
615
+ #### PasswordInput 受控模式
601
616
 
602
617
  ```svelte
603
618
  <script>
@@ -614,7 +629,7 @@ components/
614
629
  />
615
630
  ```
616
631
 
617
- ## 样式依赖
632
+ ### 样式依赖
618
633
 
619
634
  组件基于 TailwindCSS v4 + DaisyUI。应用层 `app.css` 需要以下配置:
620
635
 
@@ -653,7 +668,7 @@ components/
653
668
  </div>
654
669
  ```
655
670
 
656
- ### 图标
671
+ #### 图标
657
672
 
658
673
  组件使用 Iconify (Tabler Icons):
659
674
 
@@ -668,7 +683,7 @@ npm install -D @iconify/tailwind4 @iconify-json/tabler
668
683
  }
669
684
  ```
670
685
 
671
- ### 主题切换
686
+ #### 主题切换
672
687
 
673
688
  使用内置的主题工具函数管理 15 个精选 DaisyUI 主题:
674
689
 
@@ -712,49 +727,16 @@ const themeBootstrapScript = createThemeBootstrapScript({
712
727
  transformPageChunk: ({ html }) => html.replace('%theme_bootstrap%', themeBootstrapScript)
713
728
  ```
714
729
 
715
- ## 国际化 (i18n)
730
+ ### 国际化 (i18n)
716
731
 
717
732
  @h-ai/ui 采用**组件内置翻译**模式:
718
733
 
719
- - 场景组件(`scenes/`)内置中英文翻译(zh-CN / en-US),开箱即用
734
+ - 场景组件(`scenes/`)内置中英日文翻译(zh-CN / en-US / ja-JP),开箱即用
720
735
  - 组件自动响应全局 locale 变化(通过 `@h-ai/core` 同步)
721
736
  - 应用层只需处理**页面级文本**,组件内部文本由 @h-ai/ui 统一管理
722
737
  - 如需覆盖特定文本,通过 `submitText`、`labels` 等 props 传入
723
738
 
724
- ## 配置驱动认证页面
725
-
726
- 协议支持 `agreements.userAgreementMarkdown` 与 `privacyPolicyMarkdown` 直接从配置加载;YAML 的 `|` 保留 Markdown 段落和换行。弹窗复用安全 MarkdownRenderer,关闭原始 HTML、脚本和代码复制工具。同主题同时提供正文与 URL 时优先正文,URL 可作为额外查看入口;只有 URL 时使用隔离 iframe。
727
-
728
- ```yaml
729
- agreements:
730
- showOnRegister: true
731
- showOnLogin: false
732
- userAgreementMarkdown: |
733
- # 用户协议
734
-
735
- **账户使用条款**
736
-
737
- - 请妥善保管账户凭据。
738
- privacyPolicyMarkdown: |
739
- # 隐私政策
740
-
741
- 注册资料用于账户管理,会话信息用于身份认证。
742
- # 可选 URL;同主题同时配置 Markdown 和 URL 时,弹窗优先显示 Markdown。
743
- # userAgreementUrl: https://example.com/terms
744
- # privacyPolicyUrl: https://example.com/privacy
745
- ```
746
-
747
-
748
-
749
- AuthPanel 直接接收 IAM 白名单配置和 actions,内置登录(密码/LDAP/邮件/短信)、注册、找回、重置及协议展示。使用 `config.ui` 配置卡片/分栏、标题、品牌、Logo 和配图。`LoginForm` 提供 methods、onsendotp、otpLength、resendInterval;密码表单接受 passwordPolicy。组件只渲染与交互,网络和 Token 存储通过 actions 注入。认证场景按公开 IAM 错误码显示当前 UI 语言的提示,应用自定义错误保留原文。
750
-
751
- AuthPanel 在 SSR 阶段禁用原生表单控件,客户端挂载并绑定事件后自动开放输入,避免接管时丢失早到的输入。应用无需额外的就绪适配;E2E 等待控件可编辑,并覆盖客户端脚本延迟加载的场景。
752
-
753
- 认证链接指向当前完整 URL 时,AuthPanel 只切换场景并阻止重复导航,返回登录后可立即输入。路径、查询串或 hash 不同时交给应用路由处理;Ctrl/Cmd 等修改键点击保留浏览器行为。
754
-
755
- [完整 IAM 配置 / IAM configuration](../iam/README.md)
756
-
757
- ### createLocaleStore
739
+ #### createLocaleStore
758
740
 
759
741
  用于客户端 locale 状态管理,自动同步到 `@h-ai/core` 全局 locale 管理器:
760
742
 
@@ -778,7 +760,9 @@ AuthPanel 在 SSR 阶段禁用原生表单控件,客户端挂载并绑定事
778
760
  </select>
779
761
  ```
780
762
 
781
- ### 导出的 i18n 工具
763
+ `@h-ai/ui/i18n` 的 `createLocaleStore` 按“可解析的持久化值 → 完整 navigator.languages(再检查 navigator.language)→ defaultLocale → 支持列表首项”选择语言;首个不支持的候选不触发默认回退。匹配大小写、语言简写及逐级区域/脚本回退,返回 supportedLocales 中的配置代码;同语言多个变体按列表顺序选择。detectBrowserLocale 无实际命中返回 null,不插入框架默认值;空支持列表最终保留调用方默认值。SSR 不读取浏览器候选或修改全局语言。应用若使用 Paraglide,仍需用该项目的 setLocale 同步应用翻译;内置 UI 字典的覆盖范围不因自定义 store 列表而自动增加。
764
+
765
+ #### 导出的 i18n 工具
782
766
 
783
767
  ```ts
784
768
  import {
@@ -811,10 +795,44 @@ import {
811
795
 
812
796
  上例的 subscribe 为应用自身的 $state,应用包装 register 动作校验/提交扩展业务数据;如需单独组合表单,使用 `<RegisterForm> {#snippet extraFields()}...{/snippet} </RegisterForm>`。扩展里的按钮须为 `type="button"`,避免误提交。
813
797
 
798
+ ### 配置驱动认证页面
799
+
800
+ 密码登录只提交 `identifier` 和 `password`;`AuthPanel` 将 `LoginForm` 的 `username` 映射为 `identifier`。会话有效期由服务端 `session.maxAge` / `session.refreshTokenMaxAge` 配置决定,登录表单不提供按次登录的持久会话选项。
801
+
802
+ 协议支持 `agreements.userAgreementMarkdown` 与 `privacyPolicyMarkdown` 直接从配置加载;YAML 的 `|` 保留 Markdown 段落和换行。弹窗复用安全 MarkdownRenderer,关闭原始 HTML、脚本和代码复制工具。同主题同时提供正文与 URL 时优先正文,URL 可作为额外查看入口;只有 URL 时使用隔离 iframe。
803
+
804
+ ```yaml
805
+ agreements:
806
+ showOnRegister: true
807
+ showOnLogin: false
808
+ userAgreementMarkdown: |
809
+ # 用户协议
810
+
811
+ **账户使用条款**
812
+
813
+ - 请妥善保管账户凭据。
814
+ privacyPolicyMarkdown: |
815
+ # 隐私政策
814
816
 
815
- ## 新手引导与帮助中心
817
+ 注册资料用于账户管理,会话信息用于身份认证。
818
+ # 可选 URL;同主题同时配置 Markdown 和 URL 时,弹窗优先显示 Markdown。
819
+ # userAgreementUrl: https://example.com/terms
820
+ # privacyPolicyUrl: https://example.com/privacy
821
+ ```
816
822
 
817
- `@h-ai/ui/guide` 提供 `createGuide`、`GuideHost`、`HelpCenter` 和相关类型。无需 init/close;引擎在开始导览时按需加载,浮层复用当前主题。组件内置中英文按钮、进度和错误提示,业务内容使用应用 i18n。
823
+
824
+
825
+ AuthPanel 直接接收 IAM 白名单配置和 actions,内置登录(密码/LDAP/邮件/短信)、注册、找回、重置及协议展示。使用 `config.ui` 配置卡片/分栏、标题、品牌、Logo 和配图。`LoginForm` 提供 methods、onsendotp、otpLength、resendInterval;密码表单接受 passwordPolicy。组件只渲染与交互,网络和 Token 存储通过 actions 注入。认证场景按公开 IAM 错误码显示当前 UI 语言的提示,应用自定义错误保留原文。
826
+
827
+ AuthPanel 在 SSR 阶段禁用原生表单控件,客户端挂载并绑定事件后自动开放输入,避免接管时丢失早到的输入。应用无需额外的就绪适配;E2E 等待控件可编辑,并覆盖客户端脚本延迟加载的场景。
828
+
829
+ 认证链接指向当前完整 URL 时,AuthPanel 只切换场景并阻止重复导航,返回登录后可立即输入。路径、查询串或 hash 不同时交给应用路由处理;Ctrl/Cmd 等修改键点击保留浏览器行为。
830
+
831
+ [完整 IAM 配置 / IAM configuration](../iam/README.md)
832
+
833
+ ### 新手引导与帮助中心
834
+
835
+ `@h-ai/ui/guide` 提供 `createGuide`、`GuideHost`、`HelpCenter` 和相关类型。无需 init/close;引擎在开始导览时按需加载,浮层复用当前主题。组件内置中英日文按钮、进度和错误提示,业务内容使用应用 i18n。
818
836
 
819
837
  同一入口的 `resolveGuideText(text?)` 可解析字符串或 i18n 回调;宿主组件已自动解析文案。
820
838
 
@@ -865,7 +883,7 @@ import {
865
883
 
866
884
  admin-console 示例和 CLI fullstack Web/App/Desktop 默认包含帮助入口、首次邀请及个人资料导览。完整配置和验证场景见 [引导指南](../cli/templates/skills/hai-ui/guide.md)。
867
885
 
868
- ## 其他导出
886
+ ### 其他导出
869
887
 
870
888
  ```ts
871
889
  // 类型
@@ -881,3 +899,35 @@ import { cn, generateId, getSizeClass, getVariantClass } from '@h-ai/ui'
881
899
  // Toast 单例
882
900
  import { toast } from '@h-ai/ui'
883
901
  ```
902
+
903
+
904
+ 组件子路径只开放 package.exports 明确列出的 barrel,例如 `@h-ai/ui/components/primitives/index`;不开放任意组件实现或内部存储辅助函数。宿主剪贴板注册仍是公开能力。
905
+
906
+ ### 请求语言隔离
907
+
908
+ Node 请求与 SSR 使用 `core.i18n.runWithLocale(locale, () => handleRequest())`;SvelteKit 可使用 `kit.i18n.runWithLocale(locale, () => resolve(event))`,serv 自动按请求头建立上下文。异步子任务继承请求语言,优先级为显式 `MessageOptions.locale`、请求语言、进程启动默认语言。`setGlobalLocale` 在请求上下文中只更新当前请求;上下文外仅用于启动默认值,不能在请求 hook 中调用它修改默认值。
909
+
910
+ 浏览器继续使用应用级 `setGlobalLocale` / `createLocaleStore`。SSR 的 UI store 初始化和 setter 只修改自身状态,不写全局语言;UI 消息从请求上下文读取。`runWithLocale` 仅支持 Node 入口,浏览器通过显式 locale 或应用状态翻译。
911
+
912
+ ## 输入约束与 HTTP 能力
913
+
914
+ 存储 key 按 UTF-8 最多 1024 字节,并拒绝绝对路径、反斜线、控制字符及点路径段;公开 HTTP 批量删除每次 1–1000 项。`@h-ai/storage/schemas` 提供浏览器安全的共同规则。预签名有效期为整数 1–604800 秒(Node 默认 3600,HTTP 默认 900);HTTP 上传仅接受 key/contentType/expiresIn,不支持 contentLength/maxSize/metadata/checksum。无效输入返回 HTTP 400,typed client 映射 VALIDATION_FAILED。FileUpload 的大小/类型限制仅为前端体验,实际对象须由应用服务端复核。Node 流式读写/checksum/条件写等没有默认 HTTP 端点。完整映射与授权边界见 [存储 API 能力](../storage/README.md#存储输入约束与跨端能力)。
915
+
916
+ ## 开发测试
917
+
918
+ ```sh
919
+ pnpm --filter @h-ai/ui typecheck
920
+ pnpm --filter @h-ai/ui lint
921
+ pnpm --filter @h-ai/ui build
922
+ pnpm --filter @h-ai/ui test
923
+ ```
924
+
925
+ ## 设计与交互验收
926
+
927
+ 页面设计使用 [hai-ui-design](../cli/templates/skills/hai-ui-design/SKILL.md),组件实现使用 [hai-ui](../cli/templates/skills/hai-ui/SKILL.md),真实界面走查使用 [hai-ui-review](../cli/templates/skills/hai-ui-review/SKILL.md)。[设计约定](../../.agents/instructions/ui-design.md) 说明布局、状态和示例。
928
+
929
+ Tabs 支持方向键/Home/End、禁用项跳过和单一 Tab 入口;表格提供排序与加载状态和行键盘操作;分页导航/输入名称跟随语言,外部页码同步跳页输入;工具栏弹层管理焦点,视图按钮提供选中状态。Empty/Alert 支持长内容换行。theme.css 引入共享 tokens,焦点跟随当前主题,global.css 响应减少动态效果。应用仍需接入实际筛选、排序、分页与失败恢复。
930
+
931
+ ## 许可证
932
+
933
+ Apache-2.0
@@ -1,4 +1,5 @@
1
1
  <!--
2
+ @component Accordion
2
3
  =============================================================================
3
4
  @h-ai/ui - Accordion 组件
4
5
  =============================================================================
@@ -7,6 +8,16 @@
7
8
  使用 Svelte 5 Runes ($props, $state, $derived)
8
9
  使用 DaisyUI collapse 类
9
10
  =============================================================================
11
+
12
+ @example
13
+ ```ts
14
+ import { mount, unmount } from 'svelte'
15
+ import type { ComponentProps } from 'svelte'
16
+ import { Accordion } from '@h-ai/ui'
17
+ const props: ComponentProps<typeof Accordion> = { items: [{ id: 'intro', title: '简介', content: '操作说明' }], value: 'intro' }
18
+ const component = mount(Accordion, { target: document.body, props })
19
+ await unmount(component)
20
+ ```
10
21
  -->
11
22
 
12
23
  <script lang='ts'>
@@ -17,6 +28,19 @@
17
28
  import ToggleCheckbox from '../primitives/ToggleCheckbox.svelte'
18
29
  import ToggleRadio from '../primitives/ToggleRadio.svelte'
19
30
 
31
+ /**
32
+ * Accordion 组件的属性契约;通过公开组件配置使用。
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * import { mount, unmount } from 'svelte'
37
+ * import type { ComponentProps } from 'svelte'
38
+ * import { Accordion } from '@h-ai/ui'
39
+ * const props: ComponentProps<typeof Accordion> = { items: [{ id: 'intro', title: '简介', content: '操作说明' }], value: 'intro' }
40
+ * const component = mount(Accordion, { target: document.body, props })
41
+ * await unmount(component)
42
+ * ```
43
+ */
20
44
  interface Props {
21
45
  /** 折叠项数据 */
22
46
  items: AccordionItem[]
@@ -1,6 +1,19 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  import type { DataAttributes } from '../../types.js';
3
3
  import type { AccordionItem } from './accordion-types.js';
4
+ /**
5
+ * Accordion 组件的属性契约;通过公开组件配置使用。
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { mount, unmount } from 'svelte'
10
+ * import type { ComponentProps } from 'svelte'
11
+ * import { Accordion } from '@h-ai/ui'
12
+ * const props: ComponentProps<typeof Accordion> = { items: [{ id: 'intro', title: '简介', content: '操作说明' }], value: 'intro' }
13
+ * const component = mount(Accordion, { target: document.body, props })
14
+ * await unmount(component)
15
+ * ```
16
+ */
4
17
  interface Props {
5
18
  /** 折叠项数据 */
6
19
  items: AccordionItem[];
@@ -22,6 +35,27 @@ interface Props {
22
35
  children?: Snippet<[AccordionItem]>;
23
36
  }
24
37
  type $$ComponentProps = Props & DataAttributes;
38
+ /**
39
+ * Accordion
40
+ * =============================================================================
41
+ * @h-ai/ui - Accordion 组件
42
+ * =============================================================================
43
+ * 手风琴/折叠面板组件,支持单选/多选模式、多种样式变体
44
+ *
45
+ * 使用 Svelte 5 Runes ($props, $state, $derived)
46
+ * 使用 DaisyUI collapse 类
47
+ * =============================================================================
48
+ *
49
+ * @example
50
+ * ```ts
51
+ * import { mount, unmount } from 'svelte'
52
+ * import type { ComponentProps } from 'svelte'
53
+ * import { Accordion } from '@h-ai/ui'
54
+ * const props: ComponentProps<typeof Accordion> = { items: [{ id: 'intro', title: '简介', content: '操作说明' }], value: 'intro' }
55
+ * const component = mount(Accordion, { target: document.body, props })
56
+ * await unmount(component)
57
+ * ```
58
+ */
25
59
  declare const Accordion: import("svelte").Component<$$ComponentProps, {}, "value">;
26
60
  type Accordion = ReturnType<typeof Accordion>;
27
61
  export default Accordion;
@@ -1,4 +1,5 @@
1
1
  <!--
2
+ @component ActionSheet
2
3
  @h-ai/ui — ActionSheet(底部操作菜单)
3
4
 
4
5
  用法:
@@ -11,6 +12,16 @@
11
12
  onselect={(id) => handleAction(id)}
12
13
  onclose={() => showActions = false}
13
14
  />
15
+
16
+ @example
17
+ ```ts
18
+ import { mount, unmount } from 'svelte'
19
+ import type { ComponentProps } from 'svelte'
20
+ import { ActionSheet } from '@h-ai/ui'
21
+ const props: ComponentProps<typeof ActionSheet> = { open: true, items: [{ id: 'remove', label: '删除', destructive: true }] }
22
+ const component = mount(ActionSheet, { target: document.body, props })
23
+ await unmount(component)
24
+ ```
14
25
  -->
15
26
  <script lang='ts'>
16
27
  import type { DataAttributes } from '../../types.js'
@@ -20,6 +31,19 @@
20
31
  // eslint-disable-next-line no-import-assign -- type re-export
21
32
  export type { ActionSheetItem }
22
33
 
34
+ /**
35
+ * ActionSheet 组件的属性契约;通过公开组件配置使用。
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * import { mount, unmount } from 'svelte'
40
+ * import type { ComponentProps } from 'svelte'
41
+ * import { ActionSheet } from '@h-ai/ui'
42
+ * const props: ComponentProps<typeof ActionSheet> = { open: true, items: [{ id: 'remove', label: '删除', destructive: true }] }
43
+ * const component = mount(ActionSheet, { target: document.body, props })
44
+ * await unmount(component)
45
+ * ```
46
+ */
23
47
  interface Props {
24
48
  /** 是否显示 */
25
49
  open?: boolean