@h-ai/ui 0.1.0-alpha.67 → 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 +31 -5
  2. package/README.ja.md +31 -5
  3. package/README.md +64 -38
  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
@@ -1,4 +1,5 @@
1
1
  <!--
2
+ @component ToggleRadio
2
3
  =============================================================================
3
4
  @h-ai/ui - ToggleRadio 组件
4
5
  =============================================================================
@@ -6,6 +7,16 @@
6
7
 
7
8
  使用 Svelte 5 Runes ($props, $bindable)
8
9
  =============================================================================
10
+
11
+ @example
12
+ ```ts
13
+ import { mount, unmount } from 'svelte'
14
+ import type { ComponentProps } from 'svelte'
15
+ import { ToggleRadio } from '@h-ai/ui'
16
+ const props: ComponentProps<typeof ToggleRadio> = { name: 'section', checked: true }
17
+ const component = mount(ToggleRadio, { target: document.body, props })
18
+ await unmount(component)
19
+ ```
9
20
  -->
10
21
  <script lang='ts'>
11
22
  import type { DataAttributes, ToggleRadioProps } from '../../types.js'
@@ -1,5 +1,25 @@
1
1
  import type { DataAttributes, ToggleRadioProps } from '../../types.js';
2
2
  type $$ComponentProps = ToggleRadioProps & DataAttributes;
3
+ /**
4
+ * ToggleRadio
5
+ * =============================================================================
6
+ * @h-ai/ui - ToggleRadio 组件
7
+ * =============================================================================
8
+ * 仅渲染 radio input(用于 collapse/accordion 等结构要求)
9
+ *
10
+ * 使用 Svelte 5 Runes ($props, $bindable)
11
+ * =============================================================================
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * import { mount, unmount } from 'svelte'
16
+ * import type { ComponentProps } from 'svelte'
17
+ * import { ToggleRadio } from '@h-ai/ui'
18
+ * const props: ComponentProps<typeof ToggleRadio> = { name: 'section', checked: true }
19
+ * const component = mount(ToggleRadio, { target: document.body, props })
20
+ * await unmount(component)
21
+ * ```
22
+ */
3
23
  declare const ToggleRadio: import("svelte").Component<$$ComponentProps, {}, "checked">;
4
24
  type ToggleRadio = ReturnType<typeof ToggleRadio>;
5
25
  export default ToggleRadio;
@@ -1,3 +1,17 @@
1
+ <!--
2
+ @component AiDocumentDownloadMenu
3
+ AiDocumentDownloadMenu 组件的公开使用示例。
4
+
5
+ @example
6
+ ```ts
7
+ import { mount, unmount } from 'svelte'
8
+ import type { ComponentProps } from 'svelte'
9
+ import { AiDocumentDownloadMenu } from '@h-ai/ui'
10
+ const props: ComponentProps<typeof AiDocumentDownloadMenu> = { content: '# 报告', title: '报告', actions: [{ id: 'markdown', label: 'Markdown' }] }
11
+ const component = mount(AiDocumentDownloadMenu, { target: document.body, props })
12
+ await unmount(component)
13
+ ```
14
+ -->
1
15
  <script lang='ts'>
2
16
  import type { DataAttributes } from '../../../types.js'
3
17
  import type {
@@ -11,6 +25,19 @@
11
25
  resolveDocumentDownloadActions,
12
26
  } from './document-download.js'
13
27
 
28
+ /**
29
+ * AiDocumentDownloadMenu 组件的属性契约;通过公开组件配置使用。
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * import { mount, unmount } from 'svelte'
34
+ * import type { ComponentProps } from 'svelte'
35
+ * import { AiDocumentDownloadMenu } from '@h-ai/ui'
36
+ * const props: ComponentProps<typeof AiDocumentDownloadMenu> = { content: '# 报告', title: '报告', actions: [{ id: 'markdown', label: 'Markdown' }] }
37
+ * const component = mount(AiDocumentDownloadMenu, { target: document.body, props })
38
+ * await unmount(component)
39
+ * ```
40
+ */
14
41
  interface AiDocumentDownloadMenuProps {
15
42
  /** 触发下载时导出的原始内容。 */
16
43
  content?: string
@@ -1,5 +1,18 @@
1
1
  import type { DataAttributes } from '../../../types.js';
2
2
  import type { MarkdownSourceKind, MarkdownToolbarDownloadAction } from './document-types.js';
3
+ /**
4
+ * AiDocumentDownloadMenu 组件的属性契约;通过公开组件配置使用。
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * import { mount, unmount } from 'svelte'
9
+ * import type { ComponentProps } from 'svelte'
10
+ * import { AiDocumentDownloadMenu } from '@h-ai/ui'
11
+ * const props: ComponentProps<typeof AiDocumentDownloadMenu> = { content: '# 报告', title: '报告', actions: [{ id: 'markdown', label: 'Markdown' }] }
12
+ * const component = mount(AiDocumentDownloadMenu, { target: document.body, props })
13
+ * await unmount(component)
14
+ * ```
15
+ */
3
16
  interface AiDocumentDownloadMenuProps {
4
17
  /** 触发下载时导出的原始内容。 */
5
18
  content?: string;
@@ -35,6 +48,20 @@ interface AiDocumentDownloadMenuProps {
35
48
  itemClass?: string;
36
49
  }
37
50
  type $$ComponentProps = AiDocumentDownloadMenuProps & DataAttributes;
51
+ /**
52
+ * AiDocumentDownloadMenu
53
+ * AiDocumentDownloadMenu 组件的公开使用示例。
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * import { mount, unmount } from 'svelte'
58
+ * import type { ComponentProps } from 'svelte'
59
+ * import { AiDocumentDownloadMenu } from '@h-ai/ui'
60
+ * const props: ComponentProps<typeof AiDocumentDownloadMenu> = { content: '# 报告', title: '报告', actions: [{ id: 'markdown', label: 'Markdown' }] }
61
+ * const component = mount(AiDocumentDownloadMenu, { target: document.body, props })
62
+ * await unmount(component)
63
+ * ```
64
+ */
38
65
  declare const AiDocumentDownloadMenu: import("svelte").Component<$$ComponentProps, {}, "">;
39
66
  type AiDocumentDownloadMenu = ReturnType<typeof AiDocumentDownloadMenu>;
40
67
  export default AiDocumentDownloadMenu;
@@ -1,4 +1,5 @@
1
1
  <!--
2
+ @component AiDocumentEditor
2
3
  =============================================================================
3
4
  @h-ai/ui - AiDocumentEditor 组件
4
5
  =============================================================================
@@ -9,6 +10,16 @@
9
10
  适用于 AI 输出显示、文档预览、代码说明面板等场景。
10
11
  使用 Svelte 5 Runes ($props, $state, $derived, $effect)
11
12
  =============================================================================
13
+
14
+ @example
15
+ ```ts
16
+ import { mount, unmount } from 'svelte'
17
+ import type { ComponentProps } from 'svelte'
18
+ import { AiDocumentEditor } from '@h-ai/ui'
19
+ const props: ComponentProps<typeof AiDocumentEditor> = { content: '# 报告\n正文', title: '报告', sourceKind: 'document', allowHtmlTags: false, allowUnsafeCodePreview: false }
20
+ const component = mount(AiDocumentEditor, { target: document.body, props })
21
+ await unmount(component)
22
+ ```
12
23
  -->
13
24
  <script lang='ts'>
14
25
  import type { DataAttributes } from '../../../types.js'
@@ -45,6 +56,14 @@
45
56
  } from './mermaid-host-sync.js'
46
57
  import { renderMermaidDiagram, stripMermaidSvgStyleElements } from './mermaid-render.js'
47
58
 
59
+ /**
60
+ * 选区工具条在编辑器视口中的坐标和对齐方向。
61
+ *
62
+ * @example 模块内部上下文
63
+ * ```ts
64
+ * const example: SelectionToolbarPosition = { top: 24, left: 120, placement: 'bottom', alignment: 'left' }
65
+ * ```
66
+ */
48
67
  interface SelectionToolbarPosition {
49
68
  /** 选区工具条相对滚动容器的 top 坐标。 */
50
69
  top: number
@@ -56,6 +75,14 @@
56
75
  alignment: 'left' | 'center' | 'right'
57
76
  }
58
77
 
78
+ /**
79
+ * 单个代码块的运行进度及结果;错误状态只保留可展示消息。
80
+ *
81
+ * @example 模块内部上下文
82
+ * ```ts
83
+ * const example: CodePreviewState = { status: 'ready', result: { kind: 'text', content: '2' } }
84
+ * ```
85
+ */
59
86
  interface CodePreviewState {
60
87
  /** 当前代码块预览所处的生命周期阶段。 */
61
88
  status: 'running' | 'ready' | 'error'
@@ -65,6 +92,14 @@
65
92
  error?: string
66
93
  }
67
94
 
95
+ /**
96
+ * 按块源码签名缓存 Mermaid 渲染状态,避免流式更新重复渲染。
97
+ *
98
+ * @example 模块内部上下文
99
+ * ```ts
100
+ * const example: MermaidRenderCacheEntry = { signature: JSON.stringify(['diagram-1', 'graph TD; A-->B']), status: 'ready', html: '<svg xmlns="http://www.w3.org/2000/svg"></svg>' }
101
+ * ```
102
+ */
68
103
  interface MermaidRenderCacheEntry {
69
104
  /** 当前 Mermaid 源码签名。 */
70
105
  signature: string
@@ -76,6 +111,14 @@
76
111
  error?: string
77
112
  }
78
113
 
114
+ /**
115
+ * 当前选区的块级与行内格式快照;不持久化 DOM 节点。
116
+ *
117
+ * @example 模块内部上下文
118
+ * ```ts
119
+ * const example: SelectionFormatState = { blockFormat: 'paragraph', alignment: 'left', bold: false, strike: false, italic: false, underline: false, highlight: false, code: false, linkHref: '', textColor: null, backgroundColor: null }
120
+ * ```
121
+ */
79
122
  interface SelectionFormatState {
80
123
  /** 当前选区所在段落样式,用于标题/正文下拉默认值。 */
81
124
  blockFormat: MarkdownBlockStyleKind
@@ -101,6 +144,18 @@
101
144
  backgroundColor: string | null
102
145
  }
103
146
 
147
+ /**
148
+ * 预览 DOM 中选区与范围的临时快照,编辑结束后重新读取。
149
+ *
150
+ * @example 模块内部上下文
151
+ * ```ts
152
+ * const selection = window.getSelection()
153
+ * if (selection && selection.rangeCount > 0) {
154
+ * const snapshot: PreviewSelectionState = { selection, range: selection.getRangeAt(0).cloneRange(), text: selection.toString() }
155
+ * const selectedText = snapshot.text
156
+ * }
157
+ * ```
158
+ */
104
159
  interface PreviewSelectionState {
105
160
  /** 浏览器当前仍然有效的正文选区。 */
106
161
  selection: Selection
@@ -110,6 +165,14 @@
110
165
  text: string
111
166
  }
112
167
 
168
+ /**
169
+ * 背景色面板中的清除颜色选项。
170
+ *
171
+ * @example 模块内部上下文
172
+ * ```ts
173
+ * const example: ColorSwatchOption = { value: null, titleKey: 'markdown_background_none' }
174
+ * ```
175
+ */
113
176
  interface ColorSwatchOption {
114
177
  /** 颜色值;为空表示恢复默认或清除当前维度。 */
115
178
  value: string | null
@@ -117,6 +180,14 @@
117
180
  titleKey: 'markdown_background_none'
118
181
  }
119
182
 
183
+ /**
184
+ * 悬停链接的受控地址及提示层位置;原始地址不能绕过链接消毒。
185
+ *
186
+ * @example 模块内部上下文
187
+ * ```ts
188
+ * const example: HoveredLinkState = { element: document.createElement('a'), href: 'https://example.com', rawHref: 'https://example.com', top: 24, left: 120, placement: 'bottom' }
189
+ * ```
190
+ */
120
191
  interface HoveredLinkState {
121
192
  /** 当前悬停的链接元素。 */
122
193
  element: HTMLAnchorElement
@@ -132,6 +203,14 @@
132
203
  placement: 'top' | 'bottom'
133
204
  }
134
205
 
206
+ /**
207
+ * 选区菜单的互斥操作域。
208
+ *
209
+ * @example 模块内部上下文
210
+ * ```ts
211
+ * const example: SelectionMenuKind = 'rewrite'
212
+ * ```
213
+ */
135
214
  type SelectionMenuKind = 'rewrite' | 'block' | 'align' | 'link' | 'color'
136
215
 
137
216
  const BLOCK_FORMAT_OPTIONS: Array<{
@@ -1,6 +1,29 @@
1
1
  import type { DataAttributes } from '../../../types.js';
2
2
  import type { AiDocumentEditorProps } from './document-types.js';
3
3
  type $$ComponentProps = AiDocumentEditorProps & DataAttributes;
4
+ /**
5
+ * AiDocumentEditor
6
+ * =============================================================================
7
+ * @h-ai/ui - AiDocumentEditor 组件
8
+ * =============================================================================
9
+ * 通用 Markdown 渲染器,支持两种模式:
10
+ * - document:带目录、工具栏、代码运行预览的文档面板
11
+ * - code: 仅渲染代码块,适用于 AI 代码产物的展示和交互。
12
+ *
13
+ * 适用于 AI 输出显示、文档预览、代码说明面板等场景。
14
+ * 使用 Svelte 5 Runes ($props, $state, $derived, $effect)
15
+ * =============================================================================
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * import { mount, unmount } from 'svelte'
20
+ * import type { ComponentProps } from 'svelte'
21
+ * import { AiDocumentEditor } from '@h-ai/ui'
22
+ * const props: ComponentProps<typeof AiDocumentEditor> = { content: '# 报告\n正文', title: '报告', sourceKind: 'document', allowHtmlTags: false, allowUnsafeCodePreview: false }
23
+ * const component = mount(AiDocumentEditor, { target: document.body, props })
24
+ * await unmount(component)
25
+ * ```
26
+ */
4
27
  declare const AiDocumentEditor: import("svelte").Component<$$ComponentProps, {}, "editorScrollHost" | "previewHost">;
5
28
  type AiDocumentEditor = ReturnType<typeof AiDocumentEditor>;
6
29
  export default AiDocumentEditor;
@@ -1,4 +1,5 @@
1
1
  <!--
2
+ @component MarkdownRenderer
2
3
  =============================================================================
3
4
  @h-ai/ui - MarkdownRenderer 组件
4
5
  =============================================================================
@@ -14,6 +15,16 @@
14
15
 
15
16
  使用 Svelte 5 Runes ($props, $derived, $effect)
16
17
  =============================================================================
18
+
19
+ @example
20
+ ```ts
21
+ import { mount, unmount } from 'svelte'
22
+ import type { ComponentProps } from 'svelte'
23
+ import { MarkdownRenderer } from '@h-ai/ui'
24
+ const props: ComponentProps<typeof MarkdownRenderer> = { content: '# 标题\n正文', allowHtmlTags: false }
25
+ const component = mount(MarkdownRenderer, { target: document.body, props })
26
+ await unmount(component)
27
+ ```
17
28
  -->
18
29
  <script lang='ts'>
19
30
  import type { DataAttributes } from '../../../types.js'
@@ -1,6 +1,34 @@
1
1
  import type { DataAttributes } from '../../../types.js';
2
2
  import type { MarkdownRendererProps } from '../types.js';
3
3
  type $$ComponentProps = MarkdownRendererProps & DataAttributes;
4
+ /**
5
+ * MarkdownRenderer
6
+ * =============================================================================
7
+ * @h-ai/ui - MarkdownRenderer 组件
8
+ * =============================================================================
9
+ * 通用 Markdown 渲染器,适用于 AI 输出显示、文档预览等场景。
10
+ *
11
+ * 功能特性:
12
+ * - GFM (GitHub Flavored Markdown) 全量支持
13
+ * - 代码块语法高亮(Shiki,30+ 语言)
14
+ * - 代码块一键复制
15
+ * - 响应式表格
16
+ * - 任务列表
17
+ * - DaisyUI 主题自适应
18
+ *
19
+ * 使用 Svelte 5 Runes ($props, $derived, $effect)
20
+ * =============================================================================
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * import { mount, unmount } from 'svelte'
25
+ * import type { ComponentProps } from 'svelte'
26
+ * import { MarkdownRenderer } from '@h-ai/ui'
27
+ * const props: ComponentProps<typeof MarkdownRenderer> = { content: '# 标题\n正文', allowHtmlTags: false }
28
+ * const component = mount(MarkdownRenderer, { target: document.body, props })
29
+ * await unmount(component)
30
+ * ```
31
+ */
4
32
  declare const MarkdownRenderer: import("svelte").Component<$$ComponentProps, {}, "">;
5
33
  type MarkdownRenderer = ReturnType<typeof MarkdownRenderer>;
6
34
  export default MarkdownRenderer;
@@ -1,4 +1,12 @@
1
1
  import type { MarkdownCodeRunRequest, MarkdownCodeRunResult } from './document-types.js';
2
+ /**
3
+ * 内置代码预览的安全策略和标题,默认不执行任意代码。
4
+ *
5
+ * @example 模块内部上下文
6
+ * ```ts
7
+ * const example: BuiltInCodePreviewOptions = { previewTitle: '预览', allowUnsafeCodePreview: false }
8
+ * ```
9
+ */
2
10
  export interface BuiltInCodePreviewOptions {
3
11
  /**
4
12
  * 是否允许执行内置的不安全代码预览。
@@ -13,6 +21,26 @@ export interface BuiltInCodePreviewOptions {
13
21
  * 根据运行结果构造 iframe sandbox 值。
14
22
  *
15
23
  * 默认不允许脚本执行;只有显式声明 `allowScripts` 时才放开 `allow-scripts`。
24
+ * @param allowScripts - 是否显式允许 iframe 脚本。
25
+ * @returns iframe sandbox 属性值;默认不开放脚本权限。
26
+ *
27
+ * @example 模块内部上下文
28
+ * ```ts
29
+ * const sandbox = resolvePreviewSandbox(false)
30
+ * // 默认不添加 allow-scripts,只有受信任的显式选择才开放脚本。
31
+ * ```
16
32
  */
17
33
  export declare function resolvePreviewSandbox(allowScripts: boolean | undefined): string;
34
+ /**
35
+ * 按语言创建受控预览;未授权的 HTML/JS/CSS 返回 undefined,需由宿主明确处理。
36
+ * @param request - 包含来源、内容和动作标识的请求。
37
+ * @param options - 本次操作的行为与显示选项。
38
+ * @returns 受控预览结果;未授权或不支持的代码返回 undefined。
39
+ *
40
+ * @example 模块内部上下文
41
+ * ```ts
42
+ * const result = createBuiltInCodePreview({ blockId: 'md-1', code: '# 报告', language: 'markdown', sourceKind: 'code' }, { previewTitle: '预览', allowUnsafeCodePreview: false })
43
+ * if (result) { const markdown = result.content }
44
+ * ```
45
+ */
18
46
  export declare function createBuiltInCodePreview(request: MarkdownCodeRunRequest, options: BuiltInCodePreviewOptions): MarkdownCodeRunResult | undefined;
@@ -7,10 +7,30 @@ const CSS_LANGUAGE_SET = new Set(['css']);
7
7
  * 根据运行结果构造 iframe sandbox 值。
8
8
  *
9
9
  * 默认不允许脚本执行;只有显式声明 `allowScripts` 时才放开 `allow-scripts`。
10
+ * @param allowScripts - 是否显式允许 iframe 脚本。
11
+ * @returns iframe sandbox 属性值;默认不开放脚本权限。
12
+ *
13
+ * @example 模块内部上下文
14
+ * ```ts
15
+ * const sandbox = resolvePreviewSandbox(false)
16
+ * // 默认不添加 allow-scripts,只有受信任的显式选择才开放脚本。
17
+ * ```
10
18
  */
11
19
  export function resolvePreviewSandbox(allowScripts) {
12
20
  return allowScripts ? 'allow-scripts' : '';
13
21
  }
22
+ /**
23
+ * 按语言创建受控预览;未授权的 HTML/JS/CSS 返回 undefined,需由宿主明确处理。
24
+ * @param request - 包含来源、内容和动作标识的请求。
25
+ * @param options - 本次操作的行为与显示选项。
26
+ * @returns 受控预览结果;未授权或不支持的代码返回 undefined。
27
+ *
28
+ * @example 模块内部上下文
29
+ * ```ts
30
+ * const result = createBuiltInCodePreview({ blockId: 'md-1', code: '# 报告', language: 'markdown', sourceKind: 'code' }, { previewTitle: '预览', allowUnsafeCodePreview: false })
31
+ * if (result) { const markdown = result.content }
32
+ * ```
33
+ */
14
34
  export function createBuiltInCodePreview(request, options) {
15
35
  const language = (request.language ?? '').trim().toLowerCase();
16
36
  // mermaid 由 securityLevel:'strict' 渲染为消毒后的 SVG,无需 opt-in 高风险开关。
@@ -1,8 +1,23 @@
1
1
  import type { MarkdownSourceKind, MarkdownToolbarDownloadAction } from './document-types.js';
2
2
  /**
3
3
  * 组件内置支持的文档导出格式。
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * import type { AiDocumentDownloadFormat } from '@h-ai/ui'
8
+ * const example: AiDocumentDownloadFormat = 'markdown'
9
+ * ```
4
10
  */
5
11
  export type AiDocumentDownloadFormat = 'word' | 'markdown' | 'pdf';
12
+ /**
13
+ * 归一化后的下载菜单项目。
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * import type { AiDocumentResolvedDownloadAction } from '@h-ai/ui'
18
+ * const example: AiDocumentResolvedDownloadAction = { id: 'markdown', label: 'Markdown', badgeLabel: 'MD' }
19
+ * ```
20
+ */
6
21
  export interface AiDocumentResolvedDownloadAction {
7
22
  /** 菜单项稳定 id;内置格式直接复用格式名,自定义动作沿用上游传入值。 */
8
23
  id: string;
@@ -11,6 +26,15 @@ export interface AiDocumentResolvedDownloadAction {
11
26
  /** 可选短标签;保留给外层定制菜单使用。 */
12
27
  badgeLabel?: string;
13
28
  }
29
+ /**
30
+ * 文档下载输入;自定义动作应由宿主回调处理。
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * import type { AiDocumentDownloadRequest } from '@h-ai/ui'
35
+ * const example: AiDocumentDownloadRequest = { actionId: 'markdown', content: '# 报告\n正文', filename: 'report.md', sourceKind: 'document' }
36
+ * ```
37
+ */
14
38
  export interface AiDocumentDownloadRequest {
15
39
  /** 用户当前选中的下载动作 id。 */
16
40
  actionId: string;
@@ -28,13 +52,41 @@ export interface AiDocumentDownloadRequest {
28
52
  /**
29
53
  * code 类型产物通常只有裸代码正文。
30
54
  * 下载和预览都通过同一份规范化逻辑包装成 fenced markdown,避免两边导出的结构不一致。
55
+ * @param value - 待处理或校验的值。
56
+ * @param kind - 本次操作输入,具体字段见参数类型。
57
+ * @param language - 待识别的语言标记。
58
+ * @returns 保留原文或按代码来源包装后的 Markdown。
59
+ *
60
+ * @example
61
+ * ```ts
62
+ * import { resolveDocumentMarkdownContent } from '@h-ai/ui'
63
+ * const markdown = resolveDocumentMarkdownContent('const count = 42', 'code', 'typescript')
64
+ * // 裸代码会包装成足够长的 Markdown fence,保留源码中的反引号。
65
+ * ```
31
66
  */
32
67
  export declare function resolveDocumentMarkdownContent(value: string, kind?: MarkdownSourceKind, language?: string): string;
33
68
  /**
34
69
  * 把自定义动作和内置动作统一归一成统一的菜单项,保证左右两侧下载菜单展示一致。
70
+ * @param actions - 宿主提供的动作列表。
71
+ * @returns 具备显示标签的标准下载动作列表。
72
+ *
73
+ * @example
74
+ * ```ts
75
+ * import { resolveDocumentDownloadActions } from '@h-ai/ui'
76
+ * const actions = resolveDocumentDownloadActions([{ id: 'markdown', label: 'Markdown', badgeLabel: 'MD' }])
77
+ * ```
35
78
  */
36
79
  export declare function resolveDocumentDownloadActions(actions?: MarkdownToolbarDownloadAction[]): AiDocumentResolvedDownloadAction[];
37
80
  /**
38
81
  * 执行内置下载动作;未知动作直接跳过,方便外层保留自定义回调扩展口。
82
+ * @param request - 包含来源、内容和动作标识的请求。
83
+ * @returns 下载流程的 Promise;SSR 或未知动作无操作。
84
+ * @throws 浏览器渲染、第三方解析或下载失败时抛出异常,由交互边界显示错误。
85
+ *
86
+ * @example
87
+ * ```ts
88
+ * import { downloadAiDocument } from '@h-ai/ui'
89
+ * await downloadAiDocument({ actionId: 'markdown', content: '# 报告\n正文', title: '报告', filename: 'report.md', sourceKind: 'document' })
90
+ * ```
39
91
  */
40
92
  export declare function downloadAiDocument(request: AiDocumentDownloadRequest): Promise<void>;
@@ -1,4 +1,4 @@
1
- import { uiM } from '../../../messages.js';
1
+ import { getUILocale, uiM } from '../../../messages.js';
2
2
  import { renderMarkdownDocument } from './document-parse.js';
3
3
  const DOCUMENT_EXPORT_ROOT_CLASS = 'hai-ai-document-export';
4
4
  const BROWSER_PDF_PAGE_HEIGHT_MM = 297;
@@ -32,6 +32,17 @@ function renderDocumentBlocksForExport(blocks) {
32
32
  /**
33
33
  * code 类型产物通常只有裸代码正文。
34
34
  * 下载和预览都通过同一份规范化逻辑包装成 fenced markdown,避免两边导出的结构不一致。
35
+ * @param value - 待处理或校验的值。
36
+ * @param kind - 本次操作输入,具体字段见参数类型。
37
+ * @param language - 待识别的语言标记。
38
+ * @returns 保留原文或按代码来源包装后的 Markdown。
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * import { resolveDocumentMarkdownContent } from '@h-ai/ui'
43
+ * const markdown = resolveDocumentMarkdownContent('const count = 42', 'code', 'typescript')
44
+ * // 裸代码会包装成足够长的 Markdown fence,保留源码中的反引号。
45
+ * ```
35
46
  */
36
47
  export function resolveDocumentMarkdownContent(value, kind = 'markdown', language) {
37
48
  if (kind !== 'code') {
@@ -45,6 +56,14 @@ export function resolveDocumentMarkdownContent(value, kind = 'markdown', languag
45
56
  }
46
57
  /**
47
58
  * 把自定义动作和内置动作统一归一成统一的菜单项,保证左右两侧下载菜单展示一致。
59
+ * @param actions - 宿主提供的动作列表。
60
+ * @returns 具备显示标签的标准下载动作列表。
61
+ *
62
+ * @example
63
+ * ```ts
64
+ * import { resolveDocumentDownloadActions } from '@h-ai/ui'
65
+ * const actions = resolveDocumentDownloadActions([{ id: 'markdown', label: 'Markdown', badgeLabel: 'MD' }])
66
+ * ```
48
67
  */
49
68
  export function resolveDocumentDownloadActions(actions = []) {
50
69
  if (actions.length === 0) {
@@ -67,6 +86,15 @@ export function resolveDocumentDownloadActions(actions = []) {
67
86
  }
68
87
  /**
69
88
  * 执行内置下载动作;未知动作直接跳过,方便外层保留自定义回调扩展口。
89
+ * @param request - 包含来源、内容和动作标识的请求。
90
+ * @returns 下载流程的 Promise;SSR 或未知动作无操作。
91
+ * @throws 浏览器渲染、第三方解析或下载失败时抛出异常,由交互边界显示错误。
92
+ *
93
+ * @example
94
+ * ```ts
95
+ * import { downloadAiDocument } from '@h-ai/ui'
96
+ * await downloadAiDocument({ actionId: 'markdown', content: '# 报告\n正文', title: '报告', filename: 'report.md', sourceKind: 'document' })
97
+ * ```
70
98
  */
71
99
  export async function downloadAiDocument(request) {
72
100
  if (typeof document === 'undefined') {
@@ -285,7 +313,7 @@ function buildDocumentExportBody(bodyHtml) {
285
313
  }
286
314
  function buildDocumentExportHtml(title, bodyHtml) {
287
315
  return `<!doctype html>
288
- <html lang="zh-CN">
316
+ <html lang="${escapeExportHtml(getUILocale())}">
289
317
  <head>
290
318
  <meta charset="utf-8" />
291
319
  <meta name="viewport" content="width=device-width, initial-scale=1" />