@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.ja.md CHANGED
@@ -4,19 +4,31 @@
4
4
 
5
5
  [フレームワークのホーム](../../README.ja.md) · 関連モジュール:[@h-ai/core](../core/README.ja.md)
6
6
 
7
- > Svelte 5 Runes のクロスプラットフォーム UI ライブラリーです。DaisyUI v5 + Tailwind CSS v4 のスタイル、Bits UI v2 のヘッドレス UI、内蔵 i18n(zh-CN / en-US)、15 種類の厳選テーマを提供します。
7
+ ## 概要
8
8
 
9
- ## インストール
9
+ 内蔵メッセージは `zh-CN`、`en-US`、`ja-JP` に対応し、言語セレクターは既定で3言語を表示します。
10
+
11
+ Svelte 5 Runes のクロスプラットフォーム UI ライブラリーです。DaisyUI v5 + Tailwind CSS v4 のスタイル、Bits UI v2 のヘッドレス UI、内蔵 i18n(zh-CN / en-US)、15 種類の厳選テーマを提供します。
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 の両方を本番依存に含め、ログなどのネイティブ依存を通常どおり読み込めるようにします。
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` を実行してください。adapter-node は直接の本番依存も参照するため、external 指定だけでは不十分です。
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
  3 層で構成します(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` の `type="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`)を共有します。既定は1列・ラベルを上に配置します。コンテナー幅が `36rem` 未満では1列、`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 によるヘッドレス UI
248
+ ##### Bits UI によるヘッドレス UI
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` | テーマ選択パネル | プロパティ不要 |
300
314
  | `ThemeToggle` | ライト・ダーク切り替え | プロパティ不要 |
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 })` からサービスを呼び、`{ 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
  | ------------------------ | ------------------------ | ---------------------------------------------------------------------------------------------------------- |
@@ -370,7 +384,7 @@ components/
370
384
  />
371
385
  ```
372
386
 
373
- #### Charts:グラフ
387
+ ##### Charts:グラフ
374
388
 
375
389
  `Chart type='line'` は既定で LayerChart の折れ線を使います。監視画面で分割線・点・最寄りの点への hover・縦基準線が必要な場合は `lineVariant='segmented-point'` を使います:
376
390
 
@@ -389,7 +403,7 @@ components/
389
403
  />
390
404
  ```
391
405
 
392
- #### CRUD:一覧操作(5)
406
+ ##### CRUD:一覧操作(5)
393
407
 
394
408
  | コンポーネント | 説明 | 主なプロパティ・機能 |
395
409
  | ------------------- | ------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -402,10 +416,11 @@ components/
402
416
  > `CrudPage` は既定で `TableToolbar` のアイコン・ポップアップ形式を使い、`toolbarStyle='filter-bar'` で平置きにできます。`detailColumns={['title']}` は指定列を詳細入口にします。`toolbarLeading` は左のタイトル・説明、`showHeader={false}` はタイトル重複の防止、`toolbarActions` は右の操作に使います。`card` は行をカード化、`tableCell` は行・列 key で Tooltip などの操作要素を描画、`sortableColumns` はサーバーのソート項目を制御します。フィルターは `select`、`boolean`、`number`、`date`、`date-range`、`text` に対応します。
403
417
  >
404
418
  > ページは親の利用可能な高さを満たします。データの有無にかかわらずテーブルが残りの領域を使い、データ部分のみがスクロールします。見出しはデータ領域の上、ページ分割は一覧カードの下に固定します。
419
+ > ビューポートの外枠からコンテンツまで、各親要素に `flex flex-1 min-h-0 flex-col` などで残りの高さを渡します。中間のラッパーを内容だけの高さにしないでください。空・少数・スクロールする一覧でもページ分割は下部に配置されます。
405
420
  >
406
421
  > 列は先に 7rem まで縮小し長文を切り詰め、総幅が容器を超える場合のみ横スクロールを出します。操作列は右に固定し、横スクロール中も表示します。
407
422
 
408
- #### エラーページ(1)
423
+ ##### エラーページ(1)
409
424
 
410
425
  | コンポーネント | 説明 | 主なプロパティ・機能 |
411
426
  | -------------- | -------------------------------------------------- | ----------------------------------------------------------------------- |
@@ -436,9 +451,9 @@ components/
436
451
  >
437
452
  > `Tabs` は遅延表示に対応し、`lazy` では未使用タブの内容を描画しません(`children` の `isActivated(key)` で判定)。`onactivate(key)` は初回のみ実行し、`createCrudController({ autoLoad: false })` と組み合わせて最初に表示されたときに読み込めます。
438
453
 
439
- ## 使用例
454
+ ### 使用例
440
455
 
441
- ### Toast 通知
456
+ #### Toast 通知
442
457
 
443
458
  ```svelte
444
459
  <script>
@@ -458,7 +473,7 @@ components/
458
473
 
459
474
  > `notifySuccess` / `notifyError` / `notifyInfo` / `notifyWarning` を内蔵し、アプリ独自の toast ツールは不要です。`notifyError(err, fallback?)` は `Error`・文字列と代替文言を受け付け、既定は成功 3 秒・失敗 5 秒です。
460
475
 
461
- ### Message 表示
476
+ #### Message 表示
462
477
 
463
478
  ```svelte
464
479
  <script>
@@ -476,7 +491,7 @@ components/
476
491
  <MessageContainer />
477
492
  ```
478
493
 
479
- ### 標準的な CRUD ページ
494
+ #### 標準的な CRUD ページ
480
495
 
481
496
  ```svelte
482
497
  <script>
@@ -546,7 +561,7 @@ components/
546
561
 
547
562
  `Modal` は `title` / `header` がなくても右上の閉じるボタンを表示し、ヘッダー全体は追加しません。角丸は `radius="1.4rem"`、内部ドロップダウンなどを外に表示する場合は `bodyOverflow="visible"` を指定できます。
548
563
 
549
- ### 宣言的な CRUD ページ(CrudPage)
564
+ #### 宣言的な CRUD ページ(CrudPage)
550
565
 
551
566
  ```svelte
552
567
  <script lang='ts'>
@@ -572,7 +587,7 @@ components/
572
587
 
573
588
  > ドロワーは `form={{ variant: 'drawer', drawerWidth: '40rem' }}` に変更できます。ユーザーが変更した幅が初期幅より優先され、リソースごとに記憶されます。
574
589
 
575
- ### ログインページ
590
+ #### ログインページ
576
591
 
577
592
  ```svelte
578
593
  <script>
@@ -598,7 +613,7 @@ components/
598
613
  <LoginForm {loading} {errors} onsubmit={handleLogin} showRegisterLink />
599
614
  ```
600
615
 
601
- ### PasswordInput の制御モード
616
+ #### PasswordInput の制御モード
602
617
 
603
618
  ```svelte
604
619
  <script>
@@ -615,7 +630,7 @@ components/
615
630
  />
616
631
  ```
617
632
 
618
- ## スタイルの依存関係
633
+ ### スタイルの依存関係
619
634
 
620
635
  コンポーネントは TailwindCSS v4 + DaisyUI を使います。アプリの `app.css` に次を設定します:
621
636
 
@@ -654,7 +669,7 @@ components/
654
669
  </div>
655
670
  ```
656
671
 
657
- ### アイコン
672
+ #### アイコン
658
673
 
659
674
  Iconify(Tabler Icons)を使用します:
660
675
 
@@ -669,7 +684,7 @@ npm install -D @iconify/tailwind4 @iconify-json/tabler
669
684
  }
670
685
  ```
671
686
 
672
- ### テーマ切り替え
687
+ #### テーマ切り替え
673
688
 
674
689
  内蔵ツールで 15 種類の厳選 DaisyUI テーマを管理します:
675
690
 
@@ -713,16 +728,16 @@ const themeBootstrapScript = createThemeBootstrapScript({
713
728
  transformPageChunk: ({ html }) => html.replace('%theme_bootstrap%', themeBootstrapScript)
714
729
  ```
715
730
 
716
- ## 国際化(i18n)
731
+ ### 国際化(i18n)
717
732
 
718
733
  @h-ai/ui は**コンポーネント内蔵翻訳**を使います:
719
734
 
720
- - 用途別コンポーネント(`scenes/`)は中国語・英語(zh-CN / en-US)を内蔵し、そのまま使えます。
735
+ - 用途別コンポーネント(`scenes/`)は中国語・英語・日本語(zh-CN / en-US / ja-JP)を内蔵し、そのまま使えます。
721
736
  - `@h-ai/core` と同期した全体 locale の変更へ自動応答します。
722
737
  - アプリは**ページ単位の文言**のみを扱い、内部テキストは @h-ai/ui が管理します。
723
738
  - 個別文言の変更は `submitText`・`labels` などの props で指定。
724
739
 
725
- ### createLocaleStore
740
+ #### createLocaleStore
726
741
 
727
742
  クライアントの locale 状態を管理し、`@h-ai/core` の全体管理器へ自動同期します:
728
743
 
@@ -746,7 +761,9 @@ transformPageChunk: ({ html }) => html.replace('%theme_bootstrap%', themeBootstr
746
761
  </select>
747
762
  ```
748
763
 
749
- ### エクスポートされる i18n ツール
764
+ `@h-ai/ui/i18n` の createLocaleStore は、解決できる保存値、navigator.languages 全体(その後 navigator.language)、defaultLocale、対応一覧の先頭の順で選択します。未対応の最初の候補で既定値に戻しません。大小文字、言語略称、地域・スクリプトの段階的フォールバックを照合し、設定済みのコードを返します。同じ言語の複数候補は supportedLocales 順です。実際の一致がなければ detectBrowserLocale は null、空の対応一覧では最終的に呼出側の既定値を返します。SSR はブラウザー候補を読まず全体の言語を変更しません。Paraglide アプリは独自の setLocale 同期が必要で、対応一覧の追加だけでは UI 内蔵辞書は増えません。
765
+
766
+ #### エクスポートされる i18n ツール
750
767
 
751
768
  ```ts
752
769
  import {
@@ -762,7 +779,9 @@ import {
762
779
  } from '@h-ai/ui/i18n'
763
780
  ```
764
781
 
765
- ## 設定による認証画面
782
+ ### 設定による認証画面
783
+
784
+ パスワードログインの送信項目は `identifier` と `password` のみです。`AuthPanel` は `LoginForm` の `username` を `identifier` に変換します。有効期間はサーバーの `session.maxAge` / `session.refreshTokenMaxAge` で設定し、フォームにログインごとの永続セッション選択肢はありません。
766
785
 
767
786
  YAML の `|` で `agreements.userAgreementMarkdown` と `privacyPolicyMarkdown` を設定できます。Modal は本文を安全に描画し、同じ規約の URL より本文を優先します。URL のみの場合は隔離 iframe を使用します。
768
787
 
@@ -795,9 +814,9 @@ AuthPanel は SSR 中のフォーム操作を無効にし、クライアント
795
814
 
796
815
  [完整 IAM 配置 / IAM configuration](../iam/README.ja.md)
797
816
 
798
- ## 初回ガイドとヘルプセンター
817
+ ### 初回ガイドとヘルプセンター
799
818
 
800
- `@h-ai/ui/guide` から `createGuide`、`GuideHost`、`HelpCenter` をインポートします。init/close は不要です。ガイド開始時にエンジンを読み込み、既存テーマと中国語・英語の共通文言を使用します。業務内容はアプリの翻訳関数を使います。
819
+ `@h-ai/ui/guide` から `createGuide`、`GuideHost`、`HelpCenter` をインポートします。init/close は不要です。ガイド開始時にエンジンを読み込み、既存テーマと中国語・英語・日本語の共通文言を使用します。業務内容はアプリの翻訳関数を使います。
801
820
 
802
821
  同じ入口の `resolveGuideText(text?)` は文字列や i18n コールバックを評価します。ホストコンポーネントは文言を自動で解析します。
803
822
 
@@ -847,7 +866,7 @@ start(id) は Promise<boolean> を返し、手動で再表示できます。失
847
866
 
848
867
  HelpCenter は articles、任意の tours、locale、selectedId、onstart で独立ページにも配置できます。admin-console と CLI fullstack Web/App/Desktop は初回案内、ヘルプ、プロフィールガイドを標準搭載します。[詳細ガイド](../cli/templates/skills/hai-ui/guide.md)を参照してください。
849
868
 
850
- ## その他のエクスポート
869
+ ### その他のエクスポート
851
870
 
852
871
  ```ts
853
872
  // 类型
@@ -877,3 +896,35 @@ import { toast } from '@h-ai/ui'
877
896
  {/snippet}
878
897
  </AuthPanel>
879
898
  ```
899
+
900
+
901
+ コンポーネントのサブパスは package.exports に明記した barrel(例: `@h-ai/ui/components/primitives/index`)に限定します。内部実装やストレージ補助関数は非公開で、ホストのクリップボード登録は引き続き公開します。
902
+
903
+ ### リクエスト言語の分離
904
+
905
+ Node リクエストと SSR は `core.i18n.runWithLocale(locale, () => handleRequest())` で囲みます。SvelteKit は `kit.i18n.runWithLocale(locale, () => resolve(event))` を使えます。serv はリクエストヘッダーから自動設定します。非同期の子処理も言語を継承し、明示的な `MessageOptions.locale`、リクエスト言語、起動時の既定値の順で優先します。コンテキスト内の `setGlobalLocale` はそのリクエストだけを変更します。コンテキスト外の設定は起動時に限定し、リクエスト hook から呼びません。
906
+
907
+ ブラウザーはアプリ全体の `setGlobalLocale` / `createLocaleStore` を使います。SSR の UI store 初期化と setter は自身の状態のみ変更し、メッセージはリクエストコンテキストを参照します。`runWithLocale` は Node 入口専用です。
908
+
909
+ ## 入力制約と HTTP 機能
910
+
911
+ キーは UTF-8 で最大 1024 バイトで、絶対パス、バックスラッシュ、制御文字、ドットセグメントを拒否します。公開 HTTP 一括削除は一度に 1–1000 件です。共通規則はブラウザー対応の `@h-ai/storage/schemas` から参照できます。署名有効期限は整数 1–604800 秒(Node 既定 3600、HTTP 既定 900)。アップロード署名の入力は key/contentType/expiresIn のみで、contentLength/maxSize/metadata/checksum は未対応です。不正入力は HTTP 400、typed client では VALIDATION_FAILED です。FileUpload の制限は選択時の補助であり、実際のオブジェクトはサーバーで検証してください。Node のストリーム/checksum/条件付き書き込みには既定の HTTP エンドポイントがありません。[機能と認可の対応表(中国語)](../storage/README.md#存储输入约束与跨端能力)を参照してください。
912
+
913
+ ## 開発とテスト
914
+
915
+ ```sh
916
+ pnpm --filter @h-ai/ui typecheck
917
+ pnpm --filter @h-ai/ui lint
918
+ pnpm --filter @h-ai/ui build
919
+ pnpm --filter @h-ai/ui test
920
+ ```
921
+
922
+ ## デザインと操作の検証
923
+
924
+ 画面設計は [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) も利用できます。
925
+
926
+ Tabs は方向キー・Home/End、無効項目のスキップと単一の Tab 入口に対応します。表は並べ替え・読み込み状態と行のキーボード操作を提供します。ページ切り替えのラベルは言語に従い、外部ページ変更を入力欄に同期します。ツールバーはフォーカスと表示切り替え状態を管理します。Empty/Alert は長文を折り返します。theme.css は共通 tokens を読み込み、global.css は動きを減らす設定に対応します。業務側で検索、並べ替え、ページ切り替えと復旧処理を接続してください。
927
+
928
+ ## ライセンス
929
+
930
+ Apache-2.0