dsh-plugin-core 0.32.0 → 0.33.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (634) hide show
  1. package/README.md +197 -64
  2. package/README.zh-CN.md +242 -0
  3. package/dist/adv/explorer/FileBrowser.d.ts +58 -0
  4. package/dist/adv/explorer/FileBrowser.d.ts.map +1 -0
  5. package/dist/adv/explorer/FileBrowser.js +632 -0
  6. package/dist/adv/explorer/FileBrowser.js.map +1 -0
  7. package/dist/adv/explorer/crumb-nav.d.ts +45 -0
  8. package/dist/adv/explorer/crumb-nav.d.ts.map +1 -0
  9. package/dist/adv/explorer/crumb-nav.js +78 -0
  10. package/dist/adv/explorer/crumb-nav.js.map +1 -0
  11. package/dist/adv/explorer/crumbs-menu.d.ts +37 -0
  12. package/dist/adv/explorer/crumbs-menu.d.ts.map +1 -0
  13. package/dist/adv/explorer/crumbs-menu.js +102 -0
  14. package/dist/adv/explorer/crumbs-menu.js.map +1 -0
  15. package/dist/adv/explorer/explorer-css.d.ts +2 -0
  16. package/dist/adv/explorer/explorer-css.d.ts.map +1 -0
  17. package/dist/adv/explorer/explorer-css.generated.d.ts +2 -0
  18. package/dist/adv/explorer/explorer-css.generated.d.ts.map +1 -0
  19. package/dist/adv/explorer/explorer-css.generated.js +4 -0
  20. package/dist/adv/explorer/explorer-css.generated.js.map +1 -0
  21. package/dist/adv/explorer/explorer-css.js +3 -0
  22. package/dist/adv/explorer/explorer-css.js.map +1 -0
  23. package/dist/adv/explorer/fs-face.d.ts +36 -0
  24. package/dist/adv/explorer/fs-face.d.ts.map +1 -0
  25. package/dist/adv/explorer/fs-face.js +74 -0
  26. package/dist/adv/explorer/fs-face.js.map +1 -0
  27. package/dist/adv/explorer/index.d.ts +6 -0
  28. package/dist/adv/explorer/index.d.ts.map +1 -0
  29. package/dist/adv/explorer/index.js +6 -0
  30. package/dist/adv/explorer/index.js.map +1 -0
  31. package/dist/adv/explorer/landing.d.ts +26 -0
  32. package/dist/adv/explorer/landing.d.ts.map +1 -0
  33. package/dist/adv/explorer/landing.js +43 -0
  34. package/dist/adv/explorer/landing.js.map +1 -0
  35. package/dist/adv/explorer/open.d.ts +137 -0
  36. package/dist/adv/explorer/open.d.ts.map +1 -0
  37. package/dist/adv/explorer/open.js +350 -0
  38. package/dist/adv/explorer/open.js.map +1 -0
  39. package/dist/adv/explorer/picker-placement.d.ts +69 -0
  40. package/dist/adv/explorer/picker-placement.d.ts.map +1 -0
  41. package/dist/adv/explorer/picker-placement.js +122 -0
  42. package/dist/adv/explorer/picker-placement.js.map +1 -0
  43. package/dist/adv/explorer/preview/BytesPreview.d.ts +12 -0
  44. package/dist/adv/explorer/preview/BytesPreview.d.ts.map +1 -0
  45. package/dist/adv/explorer/preview/BytesPreview.js +60 -0
  46. package/dist/adv/explorer/preview/BytesPreview.js.map +1 -0
  47. package/dist/adv/explorer/preview/HtmlPreview.d.ts +17 -0
  48. package/dist/adv/explorer/preview/HtmlPreview.d.ts.map +1 -0
  49. package/dist/adv/explorer/preview/HtmlPreview.js +113 -0
  50. package/dist/adv/explorer/preview/HtmlPreview.js.map +1 -0
  51. package/dist/adv/explorer/preview/OfficePreview.d.ts +12 -0
  52. package/dist/adv/explorer/preview/OfficePreview.d.ts.map +1 -0
  53. package/dist/adv/explorer/preview/OfficePreview.js +63 -0
  54. package/dist/adv/explorer/preview/OfficePreview.js.map +1 -0
  55. package/dist/adv/explorer/preview/TextPreview.d.ts +18 -0
  56. package/dist/adv/explorer/preview/TextPreview.d.ts.map +1 -0
  57. package/dist/adv/explorer/preview/TextPreview.js +122 -0
  58. package/dist/adv/explorer/preview/TextPreview.js.map +1 -0
  59. package/dist/adv/explorer/preview/index.d.ts +24 -0
  60. package/dist/adv/explorer/preview/index.d.ts.map +1 -0
  61. package/dist/adv/explorer/preview/index.js +58 -0
  62. package/dist/adv/explorer/preview/index.js.map +1 -0
  63. package/dist/adv/explorer/preview/md-labels.d.ts +3 -0
  64. package/dist/adv/explorer/preview/md-labels.d.ts.map +1 -0
  65. package/dist/adv/explorer/preview/md-labels.js +12 -0
  66. package/dist/adv/explorer/preview/md-labels.js.map +1 -0
  67. package/dist/adv/explorer/preview-title-bar.d.ts +26 -0
  68. package/dist/adv/explorer/preview-title-bar.d.ts.map +1 -0
  69. package/dist/adv/explorer/preview-title-bar.js +48 -0
  70. package/dist/adv/explorer/preview-title-bar.js.map +1 -0
  71. package/dist/adv/explorer/types.d.ts +259 -0
  72. package/dist/adv/explorer/types.d.ts.map +1 -0
  73. package/dist/adv/explorer/types.js +379 -0
  74. package/dist/adv/explorer/types.js.map +1 -0
  75. package/dist/adv/session/SessionViewModal.d.ts +37 -0
  76. package/dist/adv/session/SessionViewModal.d.ts.map +1 -0
  77. package/dist/adv/session/SessionViewModal.js +1133 -0
  78. package/dist/adv/session/SessionViewModal.js.map +1 -0
  79. package/dist/adv/session/changes.d.ts +73 -0
  80. package/dist/adv/session/changes.d.ts.map +1 -0
  81. package/dist/adv/session/changes.js +134 -0
  82. package/dist/adv/session/changes.js.map +1 -0
  83. package/dist/adv/session/faces.d.ts +244 -0
  84. package/dist/adv/session/faces.d.ts.map +1 -0
  85. package/dist/adv/session/faces.js +17 -0
  86. package/dist/adv/session/faces.js.map +1 -0
  87. package/dist/adv/session/index.d.ts +7 -0
  88. package/dist/adv/session/index.d.ts.map +1 -0
  89. package/dist/adv/session/index.js +27 -0
  90. package/dist/adv/session/index.js.map +1 -0
  91. package/dist/adv/session/mirror/AskCard.d.ts +35 -0
  92. package/dist/adv/session/mirror/AskCard.d.ts.map +1 -0
  93. package/dist/adv/session/mirror/AskCard.js +131 -0
  94. package/dist/adv/session/mirror/AskCard.js.map +1 -0
  95. package/dist/adv/session/mirror/BashRow.d.ts +14 -0
  96. package/dist/adv/session/mirror/BashRow.d.ts.map +1 -0
  97. package/dist/adv/session/mirror/BashRow.js +143 -0
  98. package/dist/adv/session/mirror/BashRow.js.map +1 -0
  99. package/dist/adv/session/mirror/ChangedFileDiff.d.ts +25 -0
  100. package/dist/adv/session/mirror/ChangedFileDiff.d.ts.map +1 -0
  101. package/dist/adv/session/mirror/ChangedFileDiff.js +178 -0
  102. package/dist/adv/session/mirror/ChangedFileDiff.js.map +1 -0
  103. package/dist/adv/session/mirror/ChangedFilesCard.d.ts +18 -0
  104. package/dist/adv/session/mirror/ChangedFilesCard.d.ts.map +1 -0
  105. package/dist/adv/session/mirror/ChangedFilesCard.js +165 -0
  106. package/dist/adv/session/mirror/ChangedFilesCard.js.map +1 -0
  107. package/dist/adv/session/mirror/ChatGroupSeat.d.ts +24 -0
  108. package/dist/adv/session/mirror/ChatGroupSeat.d.ts.map +1 -0
  109. package/dist/adv/session/mirror/ChatGroupSeat.js +135 -0
  110. package/dist/adv/session/mirror/ChatGroupSeat.js.map +1 -0
  111. package/dist/adv/session/mirror/ChatNodeSeat.d.ts +43 -0
  112. package/dist/adv/session/mirror/ChatNodeSeat.d.ts.map +1 -0
  113. package/dist/adv/session/mirror/ChatNodeSeat.js +133 -0
  114. package/dist/adv/session/mirror/ChatNodeSeat.js.map +1 -0
  115. package/dist/adv/session/mirror/ChatView.d.ts +47 -0
  116. package/dist/adv/session/mirror/ChatView.d.ts.map +1 -0
  117. package/dist/adv/session/mirror/ChatView.js +138 -0
  118. package/dist/adv/session/mirror/ChatView.js.map +1 -0
  119. package/dist/adv/session/mirror/CommandCard.d.ts +20 -0
  120. package/dist/adv/session/mirror/CommandCard.d.ts.map +1 -0
  121. package/dist/adv/session/mirror/CommandCard.js +69 -0
  122. package/dist/adv/session/mirror/CommandCard.js.map +1 -0
  123. package/dist/adv/session/mirror/ContextInjectionRow.d.ts +18 -0
  124. package/dist/adv/session/mirror/ContextInjectionRow.d.ts.map +1 -0
  125. package/dist/adv/session/mirror/ContextInjectionRow.js +50 -0
  126. package/dist/adv/session/mirror/ContextInjectionRow.js.map +1 -0
  127. package/dist/adv/session/mirror/Deliverables.d.ts +24 -0
  128. package/dist/adv/session/mirror/Deliverables.d.ts.map +1 -0
  129. package/dist/adv/session/mirror/Deliverables.js +175 -0
  130. package/dist/adv/session/mirror/Deliverables.js.map +1 -0
  131. package/dist/adv/session/mirror/GenericCommandCard.d.ts +136 -0
  132. package/dist/adv/session/mirror/GenericCommandCard.d.ts.map +1 -0
  133. package/dist/adv/session/mirror/GenericCommandCard.js +948 -0
  134. package/dist/adv/session/mirror/GenericCommandCard.js.map +1 -0
  135. package/dist/adv/session/mirror/MessageIconActions.d.ts +16 -0
  136. package/dist/adv/session/mirror/MessageIconActions.d.ts.map +1 -0
  137. package/dist/adv/session/mirror/MessageIconActions.js +69 -0
  138. package/dist/adv/session/mirror/MessageIconActions.js.map +1 -0
  139. package/dist/adv/session/mirror/MessageItem.d.ts +93 -0
  140. package/dist/adv/session/mirror/MessageItem.d.ts.map +1 -0
  141. package/dist/adv/session/mirror/MessageItem.js +194 -0
  142. package/dist/adv/session/mirror/MessageItem.js.map +1 -0
  143. package/dist/adv/session/mirror/ReasoningRow.d.ts +11 -0
  144. package/dist/adv/session/mirror/ReasoningRow.d.ts.map +1 -0
  145. package/dist/adv/session/mirror/ReasoningRow.js +111 -0
  146. package/dist/adv/session/mirror/ReasoningRow.js.map +1 -0
  147. package/dist/adv/session/mirror/RunningStatus.d.ts +12 -0
  148. package/dist/adv/session/mirror/RunningStatus.d.ts.map +1 -0
  149. package/dist/adv/session/mirror/RunningStatus.js +57 -0
  150. package/dist/adv/session/mirror/RunningStatus.js.map +1 -0
  151. package/dist/adv/session/mirror/StatDialog.d.ts +20 -0
  152. package/dist/adv/session/mirror/StatDialog.d.ts.map +1 -0
  153. package/dist/adv/session/mirror/StatDialog.js +49 -0
  154. package/dist/adv/session/mirror/StatDialog.js.map +1 -0
  155. package/dist/adv/session/mirror/ToolDetails.d.ts +65 -0
  156. package/dist/adv/session/mirror/ToolDetails.d.ts.map +1 -0
  157. package/dist/adv/session/mirror/ToolDetails.js +268 -0
  158. package/dist/adv/session/mirror/ToolDetails.js.map +1 -0
  159. package/dist/adv/session/mirror/TurnProcessNodeView.d.ts +10 -0
  160. package/dist/adv/session/mirror/TurnProcessNodeView.d.ts.map +1 -0
  161. package/dist/adv/session/mirror/TurnProcessNodeView.js +57 -0
  162. package/dist/adv/session/mirror/TurnProcessNodeView.js.map +1 -0
  163. package/dist/adv/session/mirror/TurnTailNodeView.d.ts +57 -0
  164. package/dist/adv/session/mirror/TurnTailNodeView.d.ts.map +1 -0
  165. package/dist/adv/session/mirror/TurnTailNodeView.js +106 -0
  166. package/dist/adv/session/mirror/TurnTailNodeView.js.map +1 -0
  167. package/dist/adv/session/mirror/TurnTriggerNodeView.d.ts +16 -0
  168. package/dist/adv/session/mirror/TurnTriggerNodeView.d.ts.map +1 -0
  169. package/dist/adv/session/mirror/TurnTriggerNodeView.js +103 -0
  170. package/dist/adv/session/mirror/TurnTriggerNodeView.js.map +1 -0
  171. package/dist/adv/session/mirror/TurnUsagePanel.d.ts +21 -0
  172. package/dist/adv/session/mirror/TurnUsagePanel.d.ts.map +1 -0
  173. package/dist/adv/session/mirror/TurnUsagePanel.js +41 -0
  174. package/dist/adv/session/mirror/TurnUsagePanel.js.map +1 -0
  175. package/dist/adv/session/mirror/control-details.d.ts +9 -0
  176. package/dist/adv/session/mirror/control-details.d.ts.map +1 -0
  177. package/dist/adv/session/mirror/control-details.js +549 -0
  178. package/dist/adv/session/mirror/control-details.js.map +1 -0
  179. package/dist/adv/session/mirror/detail-i18n.d.ts +4 -0
  180. package/dist/adv/session/mirror/detail-i18n.d.ts.map +1 -0
  181. package/dist/adv/session/mirror/detail-i18n.js +153 -0
  182. package/dist/adv/session/mirror/detail-i18n.js.map +1 -0
  183. package/dist/adv/session/mirror/message-chrome.d.ts +39 -0
  184. package/dist/adv/session/mirror/message-chrome.d.ts.map +1 -0
  185. package/dist/adv/session/mirror/message-chrome.js +153 -0
  186. package/dist/adv/session/mirror/message-chrome.js.map +1 -0
  187. package/dist/adv/session/mirror/process-groups.d.ts +56 -0
  188. package/dist/adv/session/mirror/process-groups.d.ts.map +1 -0
  189. package/dist/adv/session/mirror/process-groups.js +204 -0
  190. package/dist/adv/session/mirror/process-groups.js.map +1 -0
  191. package/dist/adv/session/official-classes.d.ts +28 -0
  192. package/dist/adv/session/official-classes.d.ts.map +1 -0
  193. package/dist/adv/session/official-classes.js +152 -0
  194. package/dist/adv/session/official-classes.js.map +1 -0
  195. package/dist/adv/session/open-review.d.ts +13 -0
  196. package/dist/adv/session/open-review.d.ts.map +1 -0
  197. package/dist/adv/session/open-review.js +32 -0
  198. package/dist/adv/session/open-review.js.map +1 -0
  199. package/dist/adv/session/open-session-view.d.ts +19 -0
  200. package/dist/adv/session/open-session-view.d.ts.map +1 -0
  201. package/dist/adv/session/open-session-view.js +147 -0
  202. package/dist/adv/session/open-session-view.js.map +1 -0
  203. package/dist/adv/session/pending-inputs.d.ts +33 -0
  204. package/dist/adv/session/pending-inputs.d.ts.map +1 -0
  205. package/dist/adv/session/pending-inputs.js +130 -0
  206. package/dist/adv/session/pending-inputs.js.map +1 -0
  207. package/dist/adv/session/session-css.d.ts +2 -0
  208. package/dist/adv/session/session-css.d.ts.map +1 -0
  209. package/dist/adv/session/session-css.generated.d.ts +2 -0
  210. package/dist/adv/session/session-css.generated.d.ts.map +1 -0
  211. package/dist/adv/session/session-css.generated.js +4 -0
  212. package/dist/adv/session/session-css.generated.js.map +1 -0
  213. package/dist/adv/session/session-css.js +3 -0
  214. package/dist/adv/session/session-css.js.map +1 -0
  215. package/dist/adv/session/tail-follow.d.ts +29 -0
  216. package/dist/adv/session/tail-follow.d.ts.map +1 -0
  217. package/dist/adv/session/tail-follow.js +106 -0
  218. package/dist/adv/session/tail-follow.js.map +1 -0
  219. package/dist/ui/actions/Button.d.ts +102 -0
  220. package/dist/ui/actions/Button.d.ts.map +1 -0
  221. package/dist/ui/actions/Button.js +233 -0
  222. package/dist/ui/actions/Button.js.map +1 -0
  223. package/dist/ui/actions/button-css.generated.d.ts +2 -0
  224. package/dist/ui/actions/button-css.generated.d.ts.map +1 -0
  225. package/dist/ui/actions/button-css.generated.js +4 -0
  226. package/dist/ui/actions/button-css.generated.js.map +1 -0
  227. package/dist/ui/display/Card.d.ts +65 -0
  228. package/dist/ui/display/Card.d.ts.map +1 -0
  229. package/dist/ui/display/Card.js +109 -0
  230. package/dist/ui/display/Card.js.map +1 -0
  231. package/dist/ui/display/Chip.d.ts +28 -0
  232. package/dist/ui/display/Chip.d.ts.map +1 -0
  233. package/dist/ui/display/Chip.js +36 -0
  234. package/dist/ui/display/Chip.js.map +1 -0
  235. package/dist/ui/display/CodeViewer.d.ts +38 -0
  236. package/dist/ui/display/CodeViewer.d.ts.map +1 -0
  237. package/dist/ui/display/CodeViewer.js +107 -0
  238. package/dist/ui/display/CodeViewer.js.map +1 -0
  239. package/dist/ui/display/FieldHint.d.ts +18 -0
  240. package/dist/ui/display/FieldHint.d.ts.map +1 -0
  241. package/dist/ui/display/FieldHint.js +40 -0
  242. package/dist/ui/display/FieldHint.js.map +1 -0
  243. package/dist/ui/display/FlipText.d.ts +43 -0
  244. package/dist/ui/display/FlipText.d.ts.map +1 -0
  245. package/dist/ui/display/FlipText.js +59 -0
  246. package/dist/ui/display/FlipText.js.map +1 -0
  247. package/dist/ui/display/LiveText.d.ts +13 -0
  248. package/dist/ui/display/LiveText.d.ts.map +1 -0
  249. package/dist/ui/display/LiveText.js +19 -0
  250. package/dist/ui/display/LiveText.js.map +1 -0
  251. package/dist/ui/display/MarqueeText.d.ts +22 -0
  252. package/dist/ui/display/MarqueeText.d.ts.map +1 -0
  253. package/dist/ui/display/MarqueeText.js +52 -0
  254. package/dist/ui/display/MarqueeText.js.map +1 -0
  255. package/dist/ui/display/SectionHead.d.ts +35 -0
  256. package/dist/ui/display/SectionHead.d.ts.map +1 -0
  257. package/dist/ui/display/SectionHead.js +45 -0
  258. package/dist/ui/display/SectionHead.js.map +1 -0
  259. package/dist/ui/display/Surface.d.ts +43 -0
  260. package/dist/ui/display/Surface.d.ts.map +1 -0
  261. package/dist/ui/display/Surface.js +39 -0
  262. package/dist/ui/display/Surface.js.map +1 -0
  263. package/dist/ui/display/Table.d.ts +30 -0
  264. package/dist/ui/display/Table.d.ts.map +1 -0
  265. package/dist/ui/display/Table.js +96 -0
  266. package/dist/ui/display/Table.js.map +1 -0
  267. package/dist/ui/display/card-css.d.ts +2 -0
  268. package/dist/ui/display/card-css.d.ts.map +1 -0
  269. package/dist/ui/display/card-css.generated.d.ts +2 -0
  270. package/dist/ui/display/card-css.generated.d.ts.map +1 -0
  271. package/dist/ui/display/card-css.generated.js +4 -0
  272. package/dist/ui/display/card-css.generated.js.map +1 -0
  273. package/dist/ui/display/card-css.js +5 -0
  274. package/dist/ui/display/card-css.js.map +1 -0
  275. package/dist/ui/display/chip-css.d.ts +2 -0
  276. package/dist/ui/display/chip-css.d.ts.map +1 -0
  277. package/dist/ui/display/chip-css.generated.d.ts +2 -0
  278. package/dist/ui/display/chip-css.generated.d.ts.map +1 -0
  279. package/dist/ui/display/chip-css.generated.js +4 -0
  280. package/dist/ui/display/chip-css.generated.js.map +1 -0
  281. package/dist/ui/display/chip-css.js +12 -0
  282. package/dist/ui/display/chip-css.js.map +1 -0
  283. package/dist/ui/display/code-viewer-css.d.ts +2 -0
  284. package/dist/ui/display/code-viewer-css.d.ts.map +1 -0
  285. package/dist/ui/display/code-viewer-css.generated.d.ts +2 -0
  286. package/dist/ui/display/code-viewer-css.generated.d.ts.map +1 -0
  287. package/dist/ui/display/code-viewer-css.generated.js +4 -0
  288. package/dist/ui/display/code-viewer-css.generated.js.map +1 -0
  289. package/dist/ui/display/code-viewer-css.js +3 -0
  290. package/dist/ui/display/code-viewer-css.js.map +1 -0
  291. package/dist/ui/display/code-viewer-lang.d.ts +15 -0
  292. package/dist/ui/display/code-viewer-lang.d.ts.map +1 -0
  293. package/dist/ui/display/code-viewer-lang.js +190 -0
  294. package/dist/ui/display/code-viewer-lang.js.map +1 -0
  295. package/dist/ui/display/code-viewer-theme.d.ts +5 -0
  296. package/dist/ui/display/code-viewer-theme.d.ts.map +1 -0
  297. package/dist/ui/display/code-viewer-theme.js +138 -0
  298. package/dist/ui/display/code-viewer-theme.js.map +1 -0
  299. package/dist/ui/display/flip-css.d.ts +2 -0
  300. package/dist/ui/display/flip-css.d.ts.map +1 -0
  301. package/dist/ui/display/flip-css.generated.d.ts +2 -0
  302. package/dist/ui/display/flip-css.generated.d.ts.map +1 -0
  303. package/dist/ui/display/flip-css.generated.js +4 -0
  304. package/dist/ui/display/flip-css.generated.js.map +1 -0
  305. package/dist/ui/display/flip-css.js +4 -0
  306. package/dist/ui/display/flip-css.js.map +1 -0
  307. package/dist/ui/display/hint-css.generated.d.ts +2 -0
  308. package/dist/ui/display/hint-css.generated.d.ts.map +1 -0
  309. package/dist/ui/display/hint-css.generated.js +4 -0
  310. package/dist/ui/display/hint-css.generated.js.map +1 -0
  311. package/dist/ui/display/marquee-css.d.ts +2 -0
  312. package/dist/ui/display/marquee-css.d.ts.map +1 -0
  313. package/dist/ui/display/marquee-css.generated.d.ts +2 -0
  314. package/dist/ui/display/marquee-css.generated.d.ts.map +1 -0
  315. package/dist/ui/display/marquee-css.generated.js +4 -0
  316. package/dist/ui/display/marquee-css.generated.js.map +1 -0
  317. package/dist/ui/display/marquee-css.js +4 -0
  318. package/dist/ui/display/marquee-css.js.map +1 -0
  319. package/dist/ui/display/section-head-css.generated.d.ts +2 -0
  320. package/dist/ui/display/section-head-css.generated.d.ts.map +1 -0
  321. package/dist/ui/display/section-head-css.generated.js +4 -0
  322. package/dist/ui/display/section-head-css.generated.js.map +1 -0
  323. package/dist/ui/display/surface-css.d.ts +2 -0
  324. package/dist/ui/display/surface-css.d.ts.map +1 -0
  325. package/dist/ui/display/surface-css.generated.d.ts +2 -0
  326. package/dist/ui/display/surface-css.generated.d.ts.map +1 -0
  327. package/dist/ui/display/surface-css.generated.js +4 -0
  328. package/dist/ui/display/surface-css.generated.js.map +1 -0
  329. package/dist/ui/display/surface-css.js +7 -0
  330. package/dist/ui/display/surface-css.js.map +1 -0
  331. package/dist/ui/display/table-css.generated.d.ts +2 -0
  332. package/dist/ui/display/table-css.generated.d.ts.map +1 -0
  333. package/dist/ui/display/table-css.generated.js +4 -0
  334. package/dist/ui/display/table-css.generated.js.map +1 -0
  335. package/dist/ui/display/table-logic.d.ts +110 -0
  336. package/dist/ui/display/table-logic.d.ts.map +1 -0
  337. package/dist/ui/display/table-logic.js +81 -0
  338. package/dist/ui/display/table-logic.js.map +1 -0
  339. package/dist/ui/display/table-plain-css.generated.d.ts +2 -0
  340. package/dist/ui/display/table-plain-css.generated.d.ts.map +1 -0
  341. package/dist/ui/display/table-plain-css.generated.js +4 -0
  342. package/dist/ui/display/table-plain-css.generated.js.map +1 -0
  343. package/dist/ui/display/table-shared.d.ts +101 -0
  344. package/dist/ui/display/table-shared.d.ts.map +1 -0
  345. package/dist/ui/display/table-shared.js +229 -0
  346. package/dist/ui/display/table-shared.js.map +1 -0
  347. package/dist/ui/feedback/AlertModal.d.ts +41 -0
  348. package/dist/ui/feedback/AlertModal.d.ts.map +1 -0
  349. package/dist/ui/feedback/AlertModal.js +45 -0
  350. package/dist/ui/feedback/AlertModal.js.map +1 -0
  351. package/dist/ui/feedback/ConfirmModal.d.ts +50 -0
  352. package/dist/ui/feedback/ConfirmModal.d.ts.map +1 -0
  353. package/dist/ui/feedback/ConfirmModal.js +47 -0
  354. package/dist/ui/feedback/ConfirmModal.js.map +1 -0
  355. package/dist/ui/feedback/Loader.d.ts +49 -0
  356. package/dist/ui/feedback/Loader.d.ts.map +1 -0
  357. package/dist/ui/feedback/Loader.js +79 -0
  358. package/dist/ui/feedback/Loader.js.map +1 -0
  359. package/dist/ui/feedback/LoaderBar.d.ts +38 -0
  360. package/dist/ui/feedback/LoaderBar.d.ts.map +1 -0
  361. package/dist/ui/feedback/LoaderBar.js +79 -0
  362. package/dist/ui/feedback/LoaderBar.js.map +1 -0
  363. package/dist/ui/feedback/Loading.d.ts +69 -0
  364. package/dist/ui/feedback/Loading.d.ts.map +1 -0
  365. package/dist/ui/feedback/Loading.js +164 -0
  366. package/dist/ui/feedback/Loading.js.map +1 -0
  367. package/dist/ui/feedback/Modal.d.ts +73 -0
  368. package/dist/ui/feedback/Modal.d.ts.map +1 -0
  369. package/dist/ui/feedback/Modal.js +83 -0
  370. package/dist/ui/feedback/Modal.js.map +1 -0
  371. package/dist/ui/feedback/SideSheet.d.ts +70 -0
  372. package/dist/ui/feedback/SideSheet.d.ts.map +1 -0
  373. package/dist/ui/feedback/SideSheet.js +130 -0
  374. package/dist/ui/feedback/SideSheet.js.map +1 -0
  375. package/dist/ui/feedback/Toast.d.ts +45 -0
  376. package/dist/ui/feedback/Toast.d.ts.map +1 -0
  377. package/dist/ui/feedback/Toast.js +225 -0
  378. package/dist/ui/feedback/Toast.js.map +1 -0
  379. package/dist/ui/feedback/feedback-css.d.ts +2 -0
  380. package/dist/ui/feedback/feedback-css.d.ts.map +1 -0
  381. package/dist/ui/feedback/feedback-css.generated.d.ts +2 -0
  382. package/dist/ui/feedback/feedback-css.generated.d.ts.map +1 -0
  383. package/dist/ui/feedback/feedback-css.generated.js +4 -0
  384. package/dist/ui/feedback/feedback-css.generated.js.map +1 -0
  385. package/dist/ui/feedback/feedback-css.js +4 -0
  386. package/dist/ui/feedback/feedback-css.js.map +1 -0
  387. package/dist/ui/feedback/host-toast.d.ts +23 -0
  388. package/dist/ui/feedback/host-toast.d.ts.map +1 -0
  389. package/dist/ui/feedback/host-toast.js +34 -0
  390. package/dist/ui/feedback/host-toast.js.map +1 -0
  391. package/dist/ui/feedback/loader-bar-art.d.ts +6 -0
  392. package/dist/ui/feedback/loader-bar-art.d.ts.map +1 -0
  393. package/dist/ui/feedback/loader-bar-art.js +6 -0
  394. package/dist/ui/feedback/loader-bar-art.js.map +1 -0
  395. package/dist/ui/feedback/loader-bar-css.generated.d.ts +2 -0
  396. package/dist/ui/feedback/loader-bar-css.generated.d.ts.map +1 -0
  397. package/dist/ui/feedback/loader-bar-css.generated.js +4 -0
  398. package/dist/ui/feedback/loader-bar-css.generated.js.map +1 -0
  399. package/dist/ui/feedback/loader-css.generated.d.ts +2 -0
  400. package/dist/ui/feedback/loader-css.generated.d.ts.map +1 -0
  401. package/dist/ui/feedback/loader-css.generated.js +4 -0
  402. package/dist/ui/feedback/loader-css.generated.js.map +1 -0
  403. package/dist/ui/feedback/loading-css.generated.d.ts +2 -0
  404. package/dist/ui/feedback/loading-css.generated.d.ts.map +1 -0
  405. package/dist/ui/feedback/loading-css.generated.js +4 -0
  406. package/dist/ui/feedback/loading-css.generated.js.map +1 -0
  407. package/dist/ui/feedback/loading-host.d.ts +49 -0
  408. package/dist/ui/feedback/loading-host.d.ts.map +1 -0
  409. package/dist/ui/feedback/loading-host.js +57 -0
  410. package/dist/ui/feedback/loading-host.js.map +1 -0
  411. package/dist/ui/feedback/modal-host.d.ts +51 -0
  412. package/dist/ui/feedback/modal-host.d.ts.map +1 -0
  413. package/dist/ui/feedback/modal-host.js +170 -0
  414. package/dist/ui/feedback/modal-host.js.map +1 -0
  415. package/dist/ui/feedback/side-sheet-css.d.ts +2 -0
  416. package/dist/ui/feedback/side-sheet-css.d.ts.map +1 -0
  417. package/dist/ui/feedback/side-sheet-css.generated.d.ts +2 -0
  418. package/dist/ui/feedback/side-sheet-css.generated.d.ts.map +1 -0
  419. package/dist/ui/feedback/side-sheet-css.generated.js +4 -0
  420. package/dist/ui/feedback/side-sheet-css.generated.js.map +1 -0
  421. package/dist/ui/feedback/side-sheet-css.js +2 -0
  422. package/dist/ui/feedback/side-sheet-css.js.map +1 -0
  423. package/dist/ui/feedback/toast-host.d.ts +24 -0
  424. package/dist/ui/feedback/toast-host.d.ts.map +1 -0
  425. package/dist/ui/feedback/toast-host.js +20 -0
  426. package/dist/ui/feedback/toast-host.js.map +1 -0
  427. package/dist/ui/index.d.ts +44 -44
  428. package/dist/ui/index.d.ts.map +1 -1
  429. package/dist/ui/index.js +44 -44
  430. package/dist/ui/index.js.map +1 -1
  431. package/dist/ui/infra/chevron.d.ts +22 -0
  432. package/dist/ui/infra/chevron.d.ts.map +1 -0
  433. package/dist/ui/infra/chevron.js +33 -0
  434. package/dist/ui/infra/chevron.js.map +1 -0
  435. package/dist/ui/infra/controls-css.d.ts +16 -0
  436. package/dist/ui/infra/controls-css.d.ts.map +1 -0
  437. package/dist/ui/infra/controls-css.js +26 -0
  438. package/dist/ui/infra/controls-css.js.map +1 -0
  439. package/dist/ui/infra/css.d.ts +35 -0
  440. package/dist/ui/infra/css.d.ts.map +1 -0
  441. package/dist/ui/infra/css.js +52 -0
  442. package/dist/ui/infra/css.js.map +1 -0
  443. package/dist/ui/infra/host-data.d.ts +119 -0
  444. package/dist/ui/infra/host-data.d.ts.map +1 -0
  445. package/dist/ui/infra/host-data.js +122 -0
  446. package/dist/ui/infra/host-data.js.map +1 -0
  447. package/dist/ui/infra/locale.d.ts +4 -0
  448. package/dist/ui/infra/locale.d.ts.map +1 -0
  449. package/dist/ui/infra/locale.js +17 -0
  450. package/dist/ui/infra/locale.js.map +1 -0
  451. package/dist/ui/infra/overlay-css.d.ts +2 -0
  452. package/dist/ui/infra/overlay-css.d.ts.map +1 -0
  453. package/dist/ui/infra/overlay-css.generated.d.ts +2 -0
  454. package/dist/ui/infra/overlay-css.generated.d.ts.map +1 -0
  455. package/dist/ui/infra/overlay-css.generated.js +4 -0
  456. package/dist/ui/infra/overlay-css.generated.js.map +1 -0
  457. package/dist/ui/infra/overlay-css.js +2 -0
  458. package/dist/ui/infra/overlay-css.js.map +1 -0
  459. package/dist/ui/infra/overlay.d.ts +62 -0
  460. package/dist/ui/infra/overlay.d.ts.map +1 -0
  461. package/dist/ui/infra/overlay.js +94 -0
  462. package/dist/ui/infra/overlay.js.map +1 -0
  463. package/dist/ui/infra/panel-css.d.ts +2 -0
  464. package/dist/ui/infra/panel-css.d.ts.map +1 -0
  465. package/dist/ui/infra/panel-css.generated.d.ts +2 -0
  466. package/dist/ui/infra/panel-css.generated.d.ts.map +1 -0
  467. package/dist/ui/infra/panel-css.generated.js +4 -0
  468. package/dist/ui/infra/panel-css.generated.js.map +1 -0
  469. package/dist/ui/infra/panel-css.js +2 -0
  470. package/dist/ui/infra/panel-css.js.map +1 -0
  471. package/dist/ui/infra/panel.d.ts +41 -0
  472. package/dist/ui/infra/panel.d.ts.map +1 -0
  473. package/dist/ui/infra/panel.js +37 -0
  474. package/dist/ui/infra/panel.js.map +1 -0
  475. package/dist/ui/infra/side-panel-css.d.ts +2 -0
  476. package/dist/ui/infra/side-panel-css.d.ts.map +1 -0
  477. package/dist/ui/infra/side-panel-css.generated.d.ts +2 -0
  478. package/dist/ui/infra/side-panel-css.generated.d.ts.map +1 -0
  479. package/dist/ui/infra/side-panel-css.generated.js +4 -0
  480. package/dist/ui/infra/side-panel-css.generated.js.map +1 -0
  481. package/dist/ui/infra/side-panel-css.js +2 -0
  482. package/dist/ui/infra/side-panel-css.js.map +1 -0
  483. package/dist/ui/infra/thenable.d.ts +9 -0
  484. package/dist/ui/infra/thenable.d.ts.map +1 -0
  485. package/dist/ui/infra/thenable.js +15 -0
  486. package/dist/ui/infra/thenable.js.map +1 -0
  487. package/dist/ui/infra/ticker.d.ts +8 -0
  488. package/dist/ui/infra/ticker.d.ts.map +1 -0
  489. package/dist/ui/infra/ticker.js +49 -0
  490. package/dist/ui/infra/ticker.js.map +1 -0
  491. package/dist/ui/infra/tooltip.d.ts +29 -0
  492. package/dist/ui/infra/tooltip.d.ts.map +1 -0
  493. package/dist/ui/infra/tooltip.js +10 -0
  494. package/dist/ui/infra/tooltip.js.map +1 -0
  495. package/dist/ui/inputs/Checkbox.d.ts +24 -0
  496. package/dist/ui/inputs/Checkbox.d.ts.map +1 -0
  497. package/dist/ui/inputs/Checkbox.js +35 -0
  498. package/dist/ui/inputs/Checkbox.js.map +1 -0
  499. package/dist/ui/inputs/DateTimePicker.d.ts +45 -0
  500. package/dist/ui/inputs/DateTimePicker.d.ts.map +1 -0
  501. package/dist/ui/inputs/DateTimePicker.js +462 -0
  502. package/dist/ui/inputs/DateTimePicker.js.map +1 -0
  503. package/dist/ui/inputs/Field.d.ts +125 -0
  504. package/dist/ui/inputs/Field.d.ts.map +1 -0
  505. package/dist/ui/inputs/Field.js +175 -0
  506. package/dist/ui/inputs/Field.js.map +1 -0
  507. package/dist/ui/inputs/InputGroup.d.ts +91 -0
  508. package/dist/ui/inputs/InputGroup.d.ts.map +1 -0
  509. package/dist/ui/inputs/InputGroup.js +125 -0
  510. package/dist/ui/inputs/InputGroup.js.map +1 -0
  511. package/dist/ui/inputs/ModelPicker.d.ts +48 -0
  512. package/dist/ui/inputs/ModelPicker.d.ts.map +1 -0
  513. package/dist/ui/inputs/ModelPicker.js +101 -0
  514. package/dist/ui/inputs/ModelPicker.js.map +1 -0
  515. package/dist/ui/inputs/Picker.d.ts +56 -0
  516. package/dist/ui/inputs/Picker.d.ts.map +1 -0
  517. package/dist/ui/inputs/Picker.js +244 -0
  518. package/dist/ui/inputs/Picker.js.map +1 -0
  519. package/dist/ui/inputs/Segmented.d.ts +99 -0
  520. package/dist/ui/inputs/Segmented.d.ts.map +1 -0
  521. package/dist/ui/inputs/Segmented.js +135 -0
  522. package/dist/ui/inputs/Segmented.js.map +1 -0
  523. package/dist/ui/inputs/Textarea.d.ts +36 -0
  524. package/dist/ui/inputs/Textarea.d.ts.map +1 -0
  525. package/dist/ui/inputs/Textarea.js +35 -0
  526. package/dist/ui/inputs/Textarea.js.map +1 -0
  527. package/dist/ui/inputs/WorkspacePicker.d.ts +35 -0
  528. package/dist/ui/inputs/WorkspacePicker.d.ts.map +1 -0
  529. package/dist/ui/inputs/WorkspacePicker.js +39 -0
  530. package/dist/ui/inputs/WorkspacePicker.js.map +1 -0
  531. package/dist/ui/inputs/datetime-css.generated.d.ts +2 -0
  532. package/dist/ui/inputs/datetime-css.generated.d.ts.map +1 -0
  533. package/dist/ui/inputs/datetime-css.generated.js +4 -0
  534. package/dist/ui/inputs/datetime-css.generated.js.map +1 -0
  535. package/dist/ui/inputs/datetime-logic.d.ts +102 -0
  536. package/dist/ui/inputs/datetime-logic.d.ts.map +1 -0
  537. package/dist/ui/inputs/datetime-logic.js +200 -0
  538. package/dist/ui/inputs/datetime-logic.js.map +1 -0
  539. package/dist/ui/inputs/field-css.generated.d.ts +2 -0
  540. package/dist/ui/inputs/field-css.generated.d.ts.map +1 -0
  541. package/dist/ui/inputs/field-css.generated.js +4 -0
  542. package/dist/ui/inputs/field-css.generated.js.map +1 -0
  543. package/dist/ui/inputs/input-group-css.generated.d.ts +2 -0
  544. package/dist/ui/inputs/input-group-css.generated.d.ts.map +1 -0
  545. package/dist/ui/inputs/input-group-css.generated.js +4 -0
  546. package/dist/ui/inputs/input-group-css.generated.js.map +1 -0
  547. package/dist/ui/inputs/picker-css.d.ts +2 -0
  548. package/dist/ui/inputs/picker-css.d.ts.map +1 -0
  549. package/dist/ui/inputs/picker-css.generated.d.ts +2 -0
  550. package/dist/ui/inputs/picker-css.generated.d.ts.map +1 -0
  551. package/dist/ui/inputs/picker-css.generated.js +4 -0
  552. package/dist/ui/inputs/picker-css.generated.js.map +1 -0
  553. package/dist/ui/inputs/picker-css.js +4 -0
  554. package/dist/ui/inputs/picker-css.js.map +1 -0
  555. package/dist/ui/inputs/picker-icons.d.ts +12 -0
  556. package/dist/ui/inputs/picker-icons.d.ts.map +1 -0
  557. package/dist/ui/inputs/picker-icons.js +29 -0
  558. package/dist/ui/inputs/picker-icons.js.map +1 -0
  559. package/dist/ui/inputs/picker-logic.d.ts +33 -0
  560. package/dist/ui/inputs/picker-logic.d.ts.map +1 -0
  561. package/dist/ui/inputs/picker-logic.js +68 -0
  562. package/dist/ui/inputs/picker-logic.js.map +1 -0
  563. package/dist/ui/inputs/segmented-css.generated.d.ts +2 -0
  564. package/dist/ui/inputs/segmented-css.generated.d.ts.map +1 -0
  565. package/dist/ui/inputs/segmented-css.generated.js +4 -0
  566. package/dist/ui/inputs/segmented-css.generated.js.map +1 -0
  567. package/dist/ui/layout/PanelDock.d.ts +132 -0
  568. package/dist/ui/layout/PanelDock.d.ts.map +1 -0
  569. package/dist/ui/layout/PanelDock.js +390 -0
  570. package/dist/ui/layout/PanelDock.js.map +1 -0
  571. package/dist/ui/layout/QuickToolbar.d.ts +54 -0
  572. package/dist/ui/layout/QuickToolbar.d.ts.map +1 -0
  573. package/dist/ui/layout/QuickToolbar.js +254 -0
  574. package/dist/ui/layout/QuickToolbar.js.map +1 -0
  575. package/dist/ui/layout/SplitGroup.d.ts +37 -0
  576. package/dist/ui/layout/SplitGroup.d.ts.map +1 -0
  577. package/dist/ui/layout/SplitGroup.js +36 -0
  578. package/dist/ui/layout/SplitGroup.js.map +1 -0
  579. package/dist/ui/layout/panel-dock-css.d.ts +2 -0
  580. package/dist/ui/layout/panel-dock-css.d.ts.map +1 -0
  581. package/dist/ui/layout/panel-dock-css.generated.d.ts +2 -0
  582. package/dist/ui/layout/panel-dock-css.generated.d.ts.map +1 -0
  583. package/dist/ui/layout/panel-dock-css.generated.js +4 -0
  584. package/dist/ui/layout/panel-dock-css.generated.js.map +1 -0
  585. package/dist/ui/layout/panel-dock-css.js +4 -0
  586. package/dist/ui/layout/panel-dock-css.js.map +1 -0
  587. package/dist/ui/layout/panel-dock-logic.d.ts +67 -0
  588. package/dist/ui/layout/panel-dock-logic.d.ts.map +1 -0
  589. package/dist/ui/layout/panel-dock-logic.js +110 -0
  590. package/dist/ui/layout/panel-dock-logic.js.map +1 -0
  591. package/dist/ui/layout/quick-toolbar-css.generated.d.ts +2 -0
  592. package/dist/ui/layout/quick-toolbar-css.generated.d.ts.map +1 -0
  593. package/dist/ui/layout/quick-toolbar-css.generated.js +4 -0
  594. package/dist/ui/layout/quick-toolbar-css.generated.js.map +1 -0
  595. package/dist/ui/layout/quick-toolbar-logic.d.ts +76 -0
  596. package/dist/ui/layout/quick-toolbar-logic.d.ts.map +1 -0
  597. package/dist/ui/layout/quick-toolbar-logic.js +40 -0
  598. package/dist/ui/layout/quick-toolbar-logic.js.map +1 -0
  599. package/dist/ui/layout/resizer.d.ts +29 -0
  600. package/dist/ui/layout/resizer.d.ts.map +1 -0
  601. package/dist/ui/layout/resizer.js +42 -0
  602. package/dist/ui/layout/resizer.js.map +1 -0
  603. package/dist/ui/layout/split-group-css.generated.d.ts +2 -0
  604. package/dist/ui/layout/split-group-css.generated.d.ts.map +1 -0
  605. package/dist/ui/layout/split-group-css.generated.js +4 -0
  606. package/dist/ui/layout/split-group-css.generated.js.map +1 -0
  607. package/dist/ui/navigation/Pagination.d.ts +59 -0
  608. package/dist/ui/navigation/Pagination.d.ts.map +1 -0
  609. package/dist/ui/navigation/Pagination.js +112 -0
  610. package/dist/ui/navigation/Pagination.js.map +1 -0
  611. package/dist/ui/navigation/pagination-css.generated.d.ts +2 -0
  612. package/dist/ui/navigation/pagination-css.generated.d.ts.map +1 -0
  613. package/dist/ui/navigation/pagination-css.generated.js +4 -0
  614. package/dist/ui/navigation/pagination-css.generated.js.map +1 -0
  615. package/dist/ui/navigation/pagination-logic.d.ts +36 -0
  616. package/dist/ui/navigation/pagination-logic.d.ts.map +1 -0
  617. package/dist/ui/navigation/pagination-logic.js +73 -0
  618. package/dist/ui/navigation/pagination-logic.js.map +1 -0
  619. package/dist/ui/official.js +2 -2
  620. package/dist/ui/official.js.map +1 -1
  621. package/dist/utils/i18n.d.ts +2 -2
  622. package/dist/utils/i18n.d.ts.map +1 -1
  623. package/dist/utils/i18n.js +1 -1
  624. package/dist/utils/i18n.js.map +1 -1
  625. package/docs/README.md +2 -1
  626. package/docs/design/architecture.md +9 -8
  627. package/docs/design/copywriting.md +23 -0
  628. package/docs/design/external/dsh-host.md +5 -5
  629. package/docs/design/structure.md +132 -128
  630. package/docs/design/style.md +5 -5
  631. package/docs/help/utils.doc.ts +3 -3
  632. package/docs/help/utils.md +3 -3
  633. package/docs/requirements.md +30 -290
  634. package/package.json +1 -1
@@ -0,0 +1,229 @@
1
+ import { createElement as h } from 'react';
2
+ import { t } from '../../utils/i18n.js';
3
+ import { ensureComponentStyles } from '../infra/css.js';
4
+ import { TABLE_BASE_CSS } from '../infra/controls-css.js';
5
+ import { Loader } from '../feedback/Loader.js';
6
+ import { SectionHead } from './SectionHead.js';
7
+ import { headerRows, isTableCellSpec, leafColumns, } from './table-logic.js';
8
+ function widthOf(width) {
9
+ if (width === undefined)
10
+ return undefined;
11
+ return typeof width === 'number' ? `${width}px` : width;
12
+ }
13
+ /** 列级水平内距(覆盖 density 档);不传交给 CSS。 */
14
+ function padStyle(column) {
15
+ return column.padding === undefined ? undefined : { paddingInline: `${column.padding}px` };
16
+ }
17
+ function alignClass(prefix, align) {
18
+ return align === undefined || align === 'left' ? '' : ` ${prefix}--${align}`;
19
+ }
20
+ /**
21
+ * 某列在叶子序列里的位置决定画不画左竖线:
22
+ * 首列恒不画(那是外框的位置);其余列只在「想要线」时画。
23
+ * 分组列自己不写 `divider` 时,跟随它第一个叶子列 —— 组头的左缘和第一个子列的左缘
24
+ * 是同一条线,否则「组头无线、下面子列有线」会断成两截(2026-10-30 用户真机指出)。
25
+ */
26
+ function dividerAttr(leafIndex, wanted) {
27
+ if (leafIndex === 0)
28
+ return undefined;
29
+ return wanted === true ? 'left' : undefined;
30
+ }
31
+ /**
32
+ * 表格共享渲染壳(**内部件,不进公开导出**)。
33
+ *
34
+ * 职责:基础层样式登记 + 语义化 `<table>` 结构 + 表头分组计算 + 行交互 + 列/单元格配置落地。
35
+ * 外观(表头底色 / 分隔线 / 悬浮 / 选中)由调用方的皮肤 CSS 负责:每个公开组件
36
+ * (`Table`、将来的 `TableGrid` / `TableZebra`)只 import 自己那份皮肤,并把自己的
37
+ * modifier class 传进来。这样消费方引哪个就只打包哪个 —— 绝不用 `variant` 汇总多份皮肤。
38
+ */
39
+ export function tableShell(skinClass, props, options = {}) {
40
+ ensureComponentStyles('table-core', TABLE_BASE_CSS);
41
+ const tt = props.translate ?? t;
42
+ const headRows = headerRows(props.columns);
43
+ const leaves = leafColumns(props.columns);
44
+ const leafIndexByKey = new Map();
45
+ leaves.forEach((column, index) => {
46
+ leafIndexByKey.set(column.key, index);
47
+ });
48
+ const selected = new Set(props.selectedKeys ?? []);
49
+ const onRowClick = props.onRowClick;
50
+ const density = props.density ?? 'default';
51
+ const borders = props.borders ?? 'y';
52
+ /** 表头一行:分组表头按层级逐行渲染(每组重复渲染它,分组模式也要表头)。 */
53
+ const headRowOf = (cells, level) => h('tr', { key: `head-${level}`, className: 'dshpc-table__head-row' }, ...cells.map((cell) => {
54
+ const group = cell.colSpan > 1;
55
+ const firstLeafIndex = leafIndexByKey.get(cell.leafKeys[0] ?? '');
56
+ // 分组列没写 divider ⇒ 跟第一个叶子列走(两行列的左缘是同一条线)。
57
+ const firstLeaf = firstLeafIndex === undefined ? undefined : leaves[firstLeafIndex];
58
+ const className = `dshpc-table__head-cell${group ? ' dshpc-table__head-cell--group' : ''}${alignClass('dshpc-table__head-cell', cell.column.align)}`;
59
+ const tone = cell.column.headerTone;
60
+ return h('th', {
61
+ key: cell.column.key,
62
+ scope: group ? 'colgroup' : 'col',
63
+ colSpan: cell.colSpan > 1 ? cell.colSpan : undefined,
64
+ rowSpan: cell.rowSpan > 1 ? cell.rowSpan : undefined,
65
+ className,
66
+ style: padStyle(cell.column),
67
+ 'data-divider': firstLeafIndex === undefined
68
+ ? undefined
69
+ : dividerAttr(firstLeafIndex, cell.column.divider ?? firstLeaf?.divider),
70
+ 'data-header-tone': tone === undefined || tone === 'default' ? undefined : tone,
71
+ }, cell.column.title);
72
+ }));
73
+ /**
74
+ * 跨行单元格(rowSpan)把上下几行连成一个视觉块:块里任意一行被选中,整块都算选中。
75
+ * 先按 rowSpan 求每行所属块的范围 [start, end],再判断块内有没有选中行 ——
76
+ * 不依赖点击的是块里的哪一行,也不要求调用方自己展开。
77
+ */
78
+ const selectedBlocksOf = (rows) => {
79
+ const blocks = rows.map((_, index) => ({ start: index, end: index }));
80
+ rows.forEach((row, index) => {
81
+ for (const cell of Object.values(row.cells)) {
82
+ if (!isTableCellSpec(cell) || cell.rowSpan === undefined || cell.rowSpan <= 1)
83
+ continue;
84
+ const end = Math.min(index + cell.rowSpan - 1, rows.length - 1);
85
+ for (let line = index; line <= end; line += 1) {
86
+ const block = blocks[line];
87
+ if (block === undefined)
88
+ continue;
89
+ block.start = Math.min(block.start, index);
90
+ block.end = Math.max(block.end, end);
91
+ }
92
+ }
93
+ });
94
+ return blocks.map((block) => {
95
+ for (let line = block.start; line <= block.end; line += 1) {
96
+ const row = rows[line];
97
+ if (row !== undefined && selected.has(row.key))
98
+ return true;
99
+ }
100
+ return false;
101
+ });
102
+ };
103
+ /** 一组数据行(选中 / 可点 / 单元格配置都在这里落地)。 */
104
+ const dataRowsOf = (rows, offset = 0) => {
105
+ const selectedBlocks = selectedBlocksOf(rows);
106
+ return rows.map((row, index) => h('tr', {
107
+ key: row.key,
108
+ className: 'dshpc-table__row',
109
+ 'data-selected': selectedBlocks[index] === true ? 'true' : undefined,
110
+ 'data-interactive': onRowClick === undefined ? undefined : 'true',
111
+ tabIndex: onRowClick === undefined ? undefined : 0,
112
+ onClick: onRowClick === undefined ? undefined : () => onRowClick(row, offset + index),
113
+ onKeyDown: onRowClick === undefined
114
+ ? undefined
115
+ : (event) => {
116
+ if (event.key !== 'Enter' && event.key !== ' ')
117
+ return;
118
+ event.preventDefault();
119
+ onRowClick(row, offset + index);
120
+ },
121
+ }, ...leaves.map((column, leafIndex) => {
122
+ const cell = row.cells[column.key];
123
+ // 缺 key = 该格不渲染(上一行的 rowSpan 已经占了这个位置);要空格请显式传 null。
124
+ if (cell === undefined)
125
+ return null;
126
+ let spec;
127
+ let content;
128
+ if (isTableCellSpec(cell)) {
129
+ spec = cell;
130
+ content = cell.content;
131
+ }
132
+ else {
133
+ content = cell;
134
+ }
135
+ const align = spec?.align ?? column.align;
136
+ return h('td', {
137
+ key: column.key,
138
+ className: `dshpc-table__cell${alignClass('dshpc-table__cell', align)}`,
139
+ style: padStyle(column),
140
+ colSpan: spec?.colSpan !== undefined && spec.colSpan > 1 ? spec.colSpan : undefined,
141
+ rowSpan: spec?.rowSpan !== undefined && spec.rowSpan > 1 ? spec.rowSpan : undefined,
142
+ 'data-divider': dividerAttr(leafIndex, column.divider),
143
+ }, content ?? null);
144
+ })));
145
+ };
146
+ const colSpan = leaves.length > 0 ? leaves.length : undefined;
147
+ const emptyRow = h('tr', { key: 'empty', className: 'dshpc-table__row' }, h('td', { className: 'dshpc-table__empty', colSpan }, props.emptyText ?? tt('tableEmpty')));
148
+ // 整表加载:只在一条数据都没有时占位,不遮挡已有行(追加下一页请用 loadingMore)。
149
+ const loadingRow = h('tr', { key: 'loading', className: 'dshpc-table__state-row' }, h('td', { className: 'dshpc-table__state-cell', colSpan }, h('div', {
150
+ className: 'dshpc-table__state dshpc-table__state--full',
151
+ style: props.loadingHeight === undefined ? undefined : { height: `${props.loadingHeight}px` },
152
+ }, h(Loader, { variant: 'blocks', size: 'xl', label: tt('tableLoading') }))));
153
+ // 底部加载态:只在给了 onLoadMore(开关)时渲染,且 loadingMore 优先于「没有更多」。
154
+ const infinite = props.onLoadMore !== undefined;
155
+ const loadingMore = infinite && props.loadingMore === true;
156
+ const showNoMore = infinite && !loadingMore && props.hasMore === false && props.noMoreText !== false;
157
+ const footerRows = [];
158
+ if (loadingMore) {
159
+ footerRows.push(h('tr', { key: 'more', className: 'dshpc-table__state-row dshpc-table__state-row--footer' }, h('td', { className: 'dshpc-table__state-cell', colSpan }, h('div', { className: 'dshpc-table__state' }, h(Loader, { variant: 'blocks', size: 'md', label: tt('tableLoadingMore') })))));
160
+ }
161
+ else if (showNoMore) {
162
+ footerRows.push(h('tr', { key: 'end', className: 'dshpc-table__state-row dshpc-table__state-row--footer' }, h('td', { className: 'dshpc-table__state-cell', colSpan }, h('div', { className: 'dshpc-table__state' }, h('span', { className: 'dshpc-table__state-text' }, props.noMoreText === undefined ? tt('tableNoMore') : props.noMoreText)))));
163
+ }
164
+ // 底部哨兵:IntersectionObserver 的落点;hasMore === false 时没有下一页,不必再监听。
165
+ const sentinelRow = infinite && props.hasMore !== false && options.sentinelRef !== undefined
166
+ ? h('tr', {
167
+ key: 'sentinel',
168
+ ref: options.sentinelRef,
169
+ className: 'dshpc-table__sentinel',
170
+ 'aria-hidden': 'true',
171
+ }, h('td', { colSpan }))
172
+ : null;
173
+ // 没有左右外框(y / none)且底部有状态行时,表底那条横线也去掉 ——
174
+ // 状态行只保留上方一条实线,否则图标下面会多出一条孤线(2026-10-31 用户定)。
175
+ const flatFoot = footerRows.length > 0 && (borders === 'y' || borders === 'none');
176
+ const tableClass = [
177
+ 'dshpc-table',
178
+ skinClass,
179
+ `dshpc-table--density-${density}`,
180
+ `dshpc-table--borders-${borders}`,
181
+ props.striped === true ? 'dshpc-table--striped' : '',
182
+ flatFoot ? 'dshpc-table--foot-no-bottom' : '',
183
+ props.className ?? '',
184
+ ]
185
+ .filter((s) => s !== '')
186
+ .join(' ');
187
+ // 分组模式下底部状态行 / 哨兵单独占一个 tbody,排在最后一组之后(不影响各组的表头归属)。
188
+ const groupFoot = footerRows.length > 0 || sentinelRow !== null
189
+ ? h('tbody', { key: 'group-foot', className: 'dshpc-table__body' }, ...footerRows, sentinelRow)
190
+ : null;
191
+ const groups = props.groups ?? [];
192
+ const body = groups.length > 0
193
+ ? [
194
+ ...groups.map((group, groupIndex) => h('tbody', { key: group.key, className: 'dshpc-table__body dshpc-table__group-body' },
195
+ // 通栏标题行:横跨所有列,充当这一组的「大标题」。
196
+ h('tr', { className: 'dshpc-table__group-row' }, h('th', {
197
+ className: 'dshpc-table__group-cell',
198
+ scope: 'colgroup',
199
+ colSpan: leaves.length > 0 ? leaves.length : undefined,
200
+ },
201
+ // 标题的固定标签(短竖线)与排版归 SectionHead —— Table 只负责把标题装进通栏。
202
+ h(SectionHead, {
203
+ title: group.title,
204
+ accent: props.groupAccent ?? 'default',
205
+ flush: true,
206
+ }))),
207
+ // 每组自带表头:分组模式不放在 <thead>(一个 table 只能有一个 thead)
208
+ ...headRows.map((cells, level) => headRowOf(cells, `g${groupIndex}-${level}`)), ...dataRowsOf(group.rows, 0))),
209
+ ...(groupFoot === null ? [] : [groupFoot]),
210
+ ]
211
+ : [
212
+ h('tbody', { key: 'body', className: 'dshpc-table__body' }, props.loading === true && (props.rows?.length ?? 0) === 0
213
+ ? loadingRow
214
+ : props.rows !== undefined && props.rows.length > 0
215
+ ? dataRowsOf(props.rows)
216
+ : emptyRow, ...footerRows, sentinelRow),
217
+ ];
218
+ return h('table', { className: tableClass, style: props.style, 'aria-label': props.ariaLabel }, leaves.length === 0
219
+ ? null
220
+ : h('colgroup', null, ...leaves.map((column) => h('col', {
221
+ key: column.key,
222
+ style: widthOf(column.width) === undefined ? undefined : { width: widthOf(column.width) },
223
+ }))),
224
+ // 有分组时,每组的表头在各自的 tbody 里;单一表时表头在 thead。
225
+ groups.length > 0
226
+ ? null
227
+ : h('thead', { className: 'dshpc-table__head' }, ...headRows.map((cells, level) => headRowOf(cells, level))), ...body);
228
+ }
229
+ //# sourceMappingURL=table-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-shared.js","sourceRoot":"","sources":["../../../src/ui/display/table-shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { createElement as h, type ReactNode } from 'react';
2
+ import { type ModalSize } from './Modal.js';
3
+ import { type Translate } from '../../utils/i18n.js';
4
+ /** Alert 信号档(图标 + 配色由头部 severity 图标承载)。 */
5
+ export type AlertSeverity = 'info' | 'success' | 'warning' | 'error';
6
+ export interface AlertModalProps {
7
+ /** 主标题(不传则整条头部消失,直接出说明文字)。 */
8
+ title?: ReactNode;
9
+ /** 说明文字 / 任意内容。 */
10
+ message?: ReactNode;
11
+ /** 信号档(默认 info)。 */
12
+ severity?: AlertSeverity;
13
+ /** 确认按钮文案(默认 i18n「知道了」)。 */
14
+ confirmText?: string;
15
+ /** 确认钮定宽(px 或任意 CSS 宽度值);loading 转圈会把按钮撑宽,定宽后不跳。 */
16
+ confirmWidth?: number | string;
17
+ /**
18
+ * loading 时是否保留按钮文案(默认 true)。传 `false`:loading 期间清文字、
19
+ * 锁在「有文案」的宽度上、只留一枚居中的圈(见 `Button.loadingText`)。
20
+ */
21
+ loadingText?: boolean;
22
+ /** 点遮罩是否关闭(默认 true)。 */
23
+ closeOnMask?: boolean;
24
+ /** 锁死全部交互(含义见 `Modal.locked`):整框点不动、Tab 进不去、三条关闭路径同时失效。 */
25
+ locked?: boolean;
26
+ /** 外部驱动确认钮 loading(如别处正在刷新)。与按钮自己的异步状态取或。 */
27
+ confirmLoading?: boolean;
28
+ /** 底栏左侧的一行过程提示(换字即翻牌,超长省略 + hover 跑马灯)。不传 = 不占位。 */
29
+ notice?: string;
30
+ /** 尺寸档(默认 sm 确认框宽度)。 */
31
+ size?: ModalSize;
32
+ /** 点击确认 / 遮罩 / Esc 的统一出口(单按钮弹窗,关闭即确认);**返回 Promise 自动转圈 + 整框锁死**。 */
33
+ onConfirm?: () => unknown;
34
+ translate?: Translate;
35
+ }
36
+ /**
37
+ * 警告框(语义层,基于 Modal):单按钮 + 无 ✕ + severity 图标;无标题时整条头部消失。
38
+ * 样式封闭:按钮只暴露语义档(primary),不透传任意 className/style。
39
+ */
40
+ export declare function AlertModal(props: AlertModalProps): ReturnType<typeof h>;
41
+ //# sourceMappingURL=AlertModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlertModal.d.ts","sourceRoot":"","sources":["../../../src/ui/feedback/AlertModal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACpE,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AAElD,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAIvD,2CAA2C;AAC3C,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;AASpE,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,mBAAmB;IACnB,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,wBAAwB;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wBAAwB;IACxB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,OAAO,CAAA;IACzB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CA+BvE"}
@@ -0,0 +1,45 @@
1
+ import { createElement as h, useState } from 'react';
2
+ import { Modal } from './Modal.js';
3
+ import { Button } from '../actions/Button.js';
4
+ import { t } from '../../utils/i18n.js';
5
+ import { ensureComponentStyles } from '../infra/css.js';
6
+ import { FEEDBACK_CSS } from './feedback-css.js';
7
+ const SEVERITY_GLYPH = {
8
+ info: 'ⓘ',
9
+ success: '✓',
10
+ warning: '⚠',
11
+ error: '✕',
12
+ };
13
+ /**
14
+ * 警告框(语义层,基于 Modal):单按钮 + 无 ✕ + severity 图标;无标题时整条头部消失。
15
+ * 样式封闭:按钮只暴露语义档(primary),不透传任意 className/style。
16
+ */
17
+ export function AlertModal(props) {
18
+ ensureComponentStyles('feedback', FEEDBACK_CSS);
19
+ const tt = props.translate ?? t;
20
+ const severity = props.severity ?? 'info';
21
+ const [running, setRunning] = useState(false);
22
+ // 在跑(自己点的或外部传的)⇒ 遮罩 / Esc 一律不关。
23
+ const busy = running || props.confirmLoading === true;
24
+ return h(Modal, {
25
+ icon: h('span', { className: `dshpc-alert-sev dshpc-alert-sev--${severity}` }, SEVERITY_GLYPH[severity]),
26
+ title: props.title,
27
+ size: props.size ?? 'sm',
28
+ hideHeader: props.title === undefined,
29
+ closable: false,
30
+ closeOnMask: props.closeOnMask,
31
+ busy,
32
+ locked: props.locked,
33
+ onClose: props.onConfirm,
34
+ notice: props.notice,
35
+ footer: h(Button, {
36
+ variant: 'primary',
37
+ width: props.confirmWidth,
38
+ loadingText: props.loadingText,
39
+ loading: props.confirmLoading === true,
40
+ onBusyChange: setRunning,
41
+ onClick: () => props.onConfirm?.(),
42
+ }, props.confirmText ?? tt('dialogOk')),
43
+ }, props.message ?? null);
44
+ }
45
+ //# sourceMappingURL=AlertModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlertModal.js","sourceRoot":"","sources":["../../../src/ui/feedback/AlertModal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AACpE,OAAO,EAAE,KAAK,EAAkB,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,CAAC,EAAkB,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAKhD,MAAM,cAAc,GAAkC;IACpD,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,KAAK,EAAE,GAAG;CACX,CAAA;AAiCD;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,qBAAqB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,CAAA;IAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAA;IACzC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,gCAAgC;IAChC,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,CAAA;IACrD,OAAO,CAAC,CACN,KAAK,EACL;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,oCAAoC,QAAQ,EAAE,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;QACxG,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;QACxB,UAAU,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS;QACrC,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,IAAI;QACJ,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,SAAS;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,KAAK,CAAC,YAAY;YACzB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,CAAC,cAAc,KAAK,IAAI;YACtC,YAAY,EAAE,UAAU;YACxB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE;SACnC,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC;KACxC,EACD,KAAK,CAAC,OAAO,IAAI,IAAI,CACtB,CAAA;AACH,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { createElement as h, type ReactNode } from 'react';
2
+ import { type ModalSize } from './Modal.js';
3
+ import { type Translate } from '../../utils/i18n.js';
4
+ /** 确认钮语义档(决定确认钮外观)。 */
5
+ export type ConfirmTone = 'primary' | 'danger' | 'warning';
6
+ export interface ConfirmModalProps {
7
+ title?: ReactNode;
8
+ /** 说明文字 / 任意内容。 */
9
+ message?: ReactNode;
10
+ /** 确认钮语义档(默认 primary;danger=红 / warning=黄)。 */
11
+ tone?: ConfirmTone;
12
+ /** 确认钮文案(默认 i18n「确定」)。 */
13
+ confirmText?: string;
14
+ /** 取消钮文案(默认 i18n「取消」)。 */
15
+ cancelText?: string;
16
+ /** 确认钮定宽(px 或任意 CSS 宽度值);loading 转圈会把按钮撑宽,定宽后不跳。 */
17
+ confirmWidth?: number | string;
18
+ /** 取消钮定宽;同上。 */
19
+ cancelWidth?: number | string;
20
+ /**
21
+ * loading 时是否保留按钮文案(默认 true)。传 `false`:loading 期间按钮清文字、
22
+ * 锁在「有文案」的宽度上、只留一枚居中的圈,settle 后一起还原(见 `Button.loadingText`)。
23
+ */
24
+ loadingText?: boolean;
25
+ /** 点遮罩是否关闭(默认 true;点了 = 取消)。 */
26
+ closeOnMask?: boolean;
27
+ /** 锁死全部交互(含义见 `Modal.locked`):整框点不动、Tab 进不去、三条关闭路径同时失效。 */
28
+ locked?: boolean;
29
+ /** 外部驱动确认钮 loading(如别处正在刷新)。与按钮自己的异步状态取或。 */
30
+ confirmLoading?: boolean;
31
+ /** 外部驱动取消钮 loading:同上。 */
32
+ cancelLoading?: boolean;
33
+ /** 底栏左侧的一行过程提示(换字即翻牌,超长省略 + hover 跑马灯)。不传 = 不占位。 */
34
+ notice?: string;
35
+ size?: ModalSize;
36
+ /** 确认回调;**返回 Promise 自动转圈 + 整框锁死**,settle 后恢复(关闭与否由你决定)。 */
37
+ onConfirm?: () => unknown;
38
+ /** 取消 / 遮罩 / Esc 回调;异步语义同 `onConfirm`。 */
39
+ onCancel?: () => unknown;
40
+ translate?: Translate;
41
+ }
42
+ /**
43
+ * 确认框(语义层,基于 Modal):双按钮(取消 outline + 确认语义档)、无 ✕;无标题时整条头部消失。
44
+ * 样式封闭:按钮只暴露语义档(tone → variant),不透传任意 className/style。
45
+ *
46
+ * 异步不在这里实现:`onConfirm` / `onCancel` 返回 Promise 时由 `Button` 自动转圈,
47
+ * 它再把「在跑」报上来,这里只负责把它转成 `Modal` 的 `busy`(锁死遮罩 / Esc)。
48
+ */
49
+ export declare function ConfirmModal(props: ConfirmModalProps): ReturnType<typeof h>;
50
+ //# sourceMappingURL=ConfirmModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmModal.d.ts","sourceRoot":"","sources":["../../../src/ui/feedback/ConfirmModal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACpE,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AAElD,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEvD,uBAAuB;AACvB,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;AAE1D,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,mBAAmB;IACnB,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC7B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,gCAAgC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,OAAO,CAAA;IACzB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAA;IACxB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CA2C3E"}
@@ -0,0 +1,47 @@
1
+ import { createElement as h, useState } from 'react';
2
+ import { Modal } from './Modal.js';
3
+ import { Button } from '../actions/Button.js';
4
+ import { t } from '../../utils/i18n.js';
5
+ /**
6
+ * 确认框(语义层,基于 Modal):双按钮(取消 outline + 确认语义档)、无 ✕;无标题时整条头部消失。
7
+ * 样式封闭:按钮只暴露语义档(tone → variant),不透传任意 className/style。
8
+ *
9
+ * 异步不在这里实现:`onConfirm` / `onCancel` 返回 Promise 时由 `Button` 自动转圈,
10
+ * 它再把「在跑」报上来,这里只负责把它转成 `Modal` 的 `busy`(锁死遮罩 / Esc)。
11
+ */
12
+ export function ConfirmModal(props) {
13
+ const tt = props.translate ?? t;
14
+ const tone = props.tone ?? 'primary';
15
+ const confirmVariant = tone === 'danger' ? 'danger' : tone === 'warning' ? 'warning' : 'primary';
16
+ const [confirmBusy, setConfirmBusy] = useState(false);
17
+ const [cancelBusy, setCancelBusy] = useState(false);
18
+ // 任一钮在跑(自己点的或外部传的)⇒ 整框不可关。
19
+ const busy = confirmBusy || cancelBusy || props.confirmLoading === true || props.cancelLoading === true;
20
+ return h(Modal, {
21
+ title: props.title,
22
+ size: props.size ?? 'sm',
23
+ hideHeader: props.title === undefined,
24
+ closable: false,
25
+ closeOnMask: props.closeOnMask,
26
+ busy,
27
+ locked: props.locked,
28
+ onClose: props.onCancel,
29
+ notice: props.notice,
30
+ footer: h('div', { style: { display: 'flex', gap: '8px', justifyContent: 'flex-end' } }, h(Button, {
31
+ variant: 'outline',
32
+ width: props.cancelWidth,
33
+ loadingText: props.loadingText,
34
+ loading: props.cancelLoading === true,
35
+ onBusyChange: setCancelBusy,
36
+ onClick: () => props.onCancel?.(),
37
+ }, props.cancelText ?? tt('cancel')), h(Button, {
38
+ variant: confirmVariant,
39
+ width: props.confirmWidth,
40
+ loadingText: props.loadingText,
41
+ loading: props.confirmLoading === true,
42
+ onBusyChange: setConfirmBusy,
43
+ onClick: () => props.onConfirm?.(),
44
+ }, props.confirmText ?? tt('confirm'))),
45
+ }, props.message ?? null);
46
+ }
47
+ //# sourceMappingURL=ConfirmModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmModal.js","sourceRoot":"","sources":["../../../src/ui/feedback/ConfirmModal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AACpE,OAAO,EAAE,KAAK,EAAkB,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,CAAC,EAAkB,MAAM,qBAAqB,CAAA;AA0CvD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,CAAA;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,SAAS,CAAA;IACpC,MAAM,cAAc,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;IAChG,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACrD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACnD,2BAA2B;IAC3B,MAAM,IAAI,GAAG,WAAW,IAAI,UAAU,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,CAAA;IACvG,OAAO,CAAC,CACN,KAAK,EACL;QACE,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;QACxB,UAAU,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS;QACrC,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,IAAI;QACJ,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,QAAQ;QACvB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,CAAC,CACP,KAAK,EACL,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,EACtE,CAAC,CAAC,MAAM,EAAE;YACR,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,KAAK,CAAC,WAAW;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI;YACrC,YAAY,EAAE,aAAa;YAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE;SAClC,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,EACpC,CAAC,CAAC,MAAM,EAAE;YACR,OAAO,EAAE,cAAc;YACvB,KAAK,EAAE,KAAK,CAAC,YAAY;YACzB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,CAAC,cAAc,KAAK,IAAI;YACtC,YAAY,EAAE,cAAc;YAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE;SACnC,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CACvC;KACF,EACD,KAAK,CAAC,OAAO,IAAI,IAAI,CACtB,CAAA;AACH,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Loader —— 统一的加载动画图标(UI 基础层 · 反馈族)。
3
+ *
4
+ * 一句话边界:**只画图标本身**。没有背景、没有内距、没有圆角、没有定位。
5
+ * 要圆角底就外面套 `Chip` / `Card`,要浮在屏幕上就自己包一层 fixed 容器 ——
6
+ * 背景与位置属于调用方,不属于这个控件。
7
+ *
8
+ * 两轴正交(不是两个组件,也不是 N×M 份样式):
9
+ * - `variant`:`ring` 开口弧旋转(默认)/ `blocks` 三块脉动
10
+ * - `size`:`xs` 12 / `sm` 16 / `md` 24(默认)/ `lg` 32 / `xl` 48
11
+ *
12
+ * 几何统一画在 `viewBox="0 0 24 24"` 里,尺寸档只改 `width` / `height` ⇒ 等比缩放,
13
+ * 描边与方块的视觉重量在各档一致(12px 下描边 1.5px,48px 下 6px)。
14
+ *
15
+ * 颜色:全程 `currentColor`,自动跟随所在按钮 / 标签的文字色,不给 color 轴
16
+ * (要换色在调用点给 `style={{ color }}` 即可,不必新增参数)。
17
+ *
18
+ * 无障碍:默认 `aria-hidden`(图标本身是装饰,语义由所在按钮的文字 / 卡片的
19
+ * `role="status"` 承担);要让它自己承担语义时传 `label`,此时输出 `role="status"`。
20
+ *
21
+ * 扩展新形态:在 `LoaderVariant` 加一个值 + 本文件加一支几何 + `loader.css` 加一段规则,
22
+ * 不新增导出(形态由数据决定时直接传字符串即可,见 docs/help/ui.md)。
23
+ */
24
+ import { createElement as h } from 'react';
25
+ /** 尺寸档:只影响 width / height,几何等比缩放。 */
26
+ export type LoaderSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
27
+ /** 形态档。 */
28
+ export type LoaderVariant = 'ring' | 'blocks';
29
+ export interface LoaderProps {
30
+ /** 形态,默认 `ring`。 */
31
+ variant?: LoaderVariant;
32
+ /** 尺寸档,默认 `md`。 */
33
+ size?: LoaderSize;
34
+ /**
35
+ * 无障碍文案。不传 = 纯装饰(`aria-hidden`);传了 = 输出 `role="status"` 并由它播报。
36
+ * 按钮里、加载卡里这类**旁边已有文字**的场景不要传。
37
+ */
38
+ label?: string;
39
+ /** 追加 class(只允许补布局,不许覆盖外观)。 */
40
+ className?: string;
41
+ }
42
+ /**
43
+ * 渲染一个加载动画图标。
44
+ *
45
+ * @param props 见 {@link LoaderProps}。
46
+ * @returns `<svg>` 元素(inline,不占额外行高)。
47
+ */
48
+ export declare function Loader(props: LoaderProps): ReturnType<typeof h>;
49
+ //# sourceMappingURL=Loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Loader.d.ts","sourceRoot":"","sources":["../../../src/ui/feedback/Loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,MAAM,OAAO,CAAA;AAI1C,qCAAqC;AACrC,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAEzD,WAAW;AACX,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAA;AAE7C,MAAM,WAAW,WAAW;IAC1B,oBAAoB;IACpB,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,mBAAmB;IACnB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAqCD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAiB/D"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Loader —— 统一的加载动画图标(UI 基础层 · 反馈族)。
3
+ *
4
+ * 一句话边界:**只画图标本身**。没有背景、没有内距、没有圆角、没有定位。
5
+ * 要圆角底就外面套 `Chip` / `Card`,要浮在屏幕上就自己包一层 fixed 容器 ——
6
+ * 背景与位置属于调用方,不属于这个控件。
7
+ *
8
+ * 两轴正交(不是两个组件,也不是 N×M 份样式):
9
+ * - `variant`:`ring` 开口弧旋转(默认)/ `blocks` 三块脉动
10
+ * - `size`:`xs` 12 / `sm` 16 / `md` 24(默认)/ `lg` 32 / `xl` 48
11
+ *
12
+ * 几何统一画在 `viewBox="0 0 24 24"` 里,尺寸档只改 `width` / `height` ⇒ 等比缩放,
13
+ * 描边与方块的视觉重量在各档一致(12px 下描边 1.5px,48px 下 6px)。
14
+ *
15
+ * 颜色:全程 `currentColor`,自动跟随所在按钮 / 标签的文字色,不给 color 轴
16
+ * (要换色在调用点给 `style={{ color }}` 即可,不必新增参数)。
17
+ *
18
+ * 无障碍:默认 `aria-hidden`(图标本身是装饰,语义由所在按钮的文字 / 卡片的
19
+ * `role="status"` 承担);要让它自己承担语义时传 `label`,此时输出 `role="status"`。
20
+ *
21
+ * 扩展新形态:在 `LoaderVariant` 加一个值 + 本文件加一支几何 + `loader.css` 加一段规则,
22
+ * 不新增导出(形态由数据决定时直接传字符串即可,见 docs/help/ui.md)。
23
+ */
24
+ import { createElement as h } from 'react';
25
+ import { ensureComponentStyles } from '../infra/css.js';
26
+ import { LOADER_CSS } from '../infra/controls-css.js';
27
+ /** 形态一:约 265° 的开口弧(周长 59.7,画 44 的空缺留 15.7)。 */
28
+ function ringNode() {
29
+ return h('circle', {
30
+ cx: 12,
31
+ cy: 12,
32
+ r: 9.5,
33
+ fill: 'none',
34
+ stroke: 'currentColor',
35
+ strokeWidth: 3,
36
+ strokeLinecap: 'round',
37
+ strokeDasharray: '44 15.7',
38
+ });
39
+ }
40
+ /**
41
+ * 形态二:三个圆角短条,横向三等分。
42
+ * 每个 7.2×6.0 —— 正方形在 24px 档看着像「方点」,用户 2026-10-30 指出太丑。
43
+ * 间隔 0.6,左右各留 0.6;三块总宽 22.8,垂直居中于 24 高。
44
+ */
45
+ function blockNodes() {
46
+ const cells = [0, 1, 2];
47
+ return cells.map((i) => h('rect', {
48
+ key: i,
49
+ className: 'dshpc-loader__node',
50
+ x: 0.6 + i * 7.8,
51
+ y: 9,
52
+ width: 7.2,
53
+ height: 6,
54
+ rx: 1.5,
55
+ fill: 'currentColor',
56
+ }));
57
+ }
58
+ /**
59
+ * 渲染一个加载动画图标。
60
+ *
61
+ * @param props 见 {@link LoaderProps}。
62
+ * @returns `<svg>` 元素(inline,不占额外行高)。
63
+ */
64
+ export function Loader(props) {
65
+ ensureComponentStyles('loader', LOADER_CSS);
66
+ const { variant = 'ring', size = 'md', label, className } = props;
67
+ const classes = ['dshpc-loader', `dshpc-loader--${variant}`, `dshpc-loader--${size}`];
68
+ if (className !== undefined && className !== '')
69
+ classes.push(className);
70
+ return h('svg', {
71
+ className: classes.join(' '),
72
+ viewBox: '0 0 24 24',
73
+ role: label === undefined ? undefined : 'status',
74
+ 'aria-label': label,
75
+ 'aria-hidden': label === undefined ? true : undefined,
76
+ focusable: 'false',
77
+ }, variant === 'ring' ? ringNode() : blockNodes());
78
+ }
79
+ //# sourceMappingURL=Loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Loader.js","sourceRoot":"","sources":["../../../src/ui/feedback/Loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAsBrD,+CAA+C;AAC/C,SAAS,QAAQ;IACf,OAAO,CAAC,CAAC,QAAQ,EAAE;QACjB,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,CAAC,EAAE,GAAG;QACN,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,cAAc;QACtB,WAAW,EAAE,CAAC;QACd,aAAa,EAAE,OAAO;QACtB,eAAe,EAAE,SAAS;KAC3B,CAAC,CAAA;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU;IACjB,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACvB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrB,CAAC,CAAC,MAAM,EAAE;QACR,GAAG,EAAE,CAAC;QACN,SAAS,EAAE,oBAAoB;QAC/B,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG;QAChB,CAAC,EAAE,CAAC;QACJ,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,CAAC;QACT,EAAE,EAAE,GAAG;QACP,IAAI,EAAE,cAAc;KACrB,CAAC,CACH,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,KAAkB;IACvC,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IAC3C,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IACjE,MAAM,OAAO,GAAG,CAAC,cAAc,EAAE,iBAAiB,OAAO,EAAE,EAAE,iBAAiB,IAAI,EAAE,CAAC,CAAA;IACrF,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACxE,OAAO,CAAC,CACN,KAAK,EACL;QACE,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5B,OAAO,EAAE,WAAW;QACpB,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QAChD,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QACrD,SAAS,EAAE,OAAO;KACnB,EACD,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAC/C,CAAA;AACH,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * LoaderBar —— 胶囊不定进度 loading(Loader 家族成员)。
3
+ *
4
+ * 图形来源:设计出的「轨道 + 蓝色段 + 斜纹」胶囊条。动画是**不定进度**语义:
5
+ * 蓝色那半截**固定不动**,只有它上面的一道道细斜纹单向流动(0.55 秒走一个条纹周期),
6
+ * 看着像条纹在转,不表示任何百分比。要「确定进度」别改这个控件 —— 它是固定加载态,
7
+ * 不是进度条 API。
8
+ *
9
+ * 尺寸轴按**高度**给(宽固定 4:1):图形本身是横条,套方形的尺寸轴没意义。
10
+ *
11
+ * 实现要点:外层 `<g clip-path>` 静止、只让内层的蓝色段动。若把 `clip-path` 与
12
+ * `transform` 放在同一层,裁剪框会跟着平移,等于没裁,蓝段会跑出胶囊外。
13
+ * clipPath 的 id 由 `useId` 生成(同一页面可能有多个实例,写死 id 会互相抢)。
14
+ *
15
+ * 边界同 `Loader`:不带背景、不带内距、不带定位。
16
+ *
17
+ * ⚠️ 图形数据在 `loader-bar-art.ts`(源 SVG 一次性转录),别手改坐标。
18
+ */
19
+ import { createElement as h } from 'react';
20
+ import type { LoaderSize } from './Loader.js';
21
+ export interface LoaderBarProps {
22
+ /** 尺寸档(按高度),默认 `md`(96×24)。 */
23
+ size?: LoaderSize;
24
+ /** 是否播放动画,默认 `true`;`false` 时蓝段停在左侧原位。 */
25
+ animated?: boolean;
26
+ /** 无障碍文案。不传 = 纯装饰(`aria-hidden`);传了 = `role="status"` 由它播报。 */
27
+ label?: string;
28
+ /** 追加 class(只允许补布局,不许覆盖外观)。 */
29
+ className?: string;
30
+ }
31
+ /**
32
+ * 渲染胶囊不定进度 loading。
33
+ *
34
+ * @param props 见 {@link LoaderBarProps}。
35
+ * @returns `<svg>` 元素。
36
+ */
37
+ export declare function LoaderBar(props: LoaderBarProps): ReturnType<typeof h>;
38
+ //# sourceMappingURL=LoaderBar.d.ts.map