dsh-plugin-core 0.2.14 → 0.3.0

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 (431) hide show
  1. package/README.md +52 -83
  2. package/dist/design/tokens-css.d.ts +1 -1
  3. package/dist/design/tokens-css.d.ts.map +1 -1
  4. package/dist/design/tokens-css.generated.d.ts +2 -0
  5. package/dist/design/tokens-css.generated.d.ts.map +1 -0
  6. package/dist/design/tokens-css.generated.js +4 -0
  7. package/dist/design/tokens-css.generated.js.map +1 -0
  8. package/dist/design/tokens-css.js +1 -252
  9. package/dist/design/tokens-css.js.map +1 -1
  10. package/dist/explorer/FileBrowser.d.ts +41 -0
  11. package/dist/explorer/FileBrowser.d.ts.map +1 -0
  12. package/dist/explorer/FileBrowser.js +659 -0
  13. package/dist/explorer/FileBrowser.js.map +1 -0
  14. package/dist/explorer/explorer-css.d.ts +1 -1
  15. package/dist/explorer/explorer-css.d.ts.map +1 -1
  16. package/dist/explorer/explorer-css.generated.d.ts +2 -0
  17. package/dist/explorer/explorer-css.generated.d.ts.map +1 -0
  18. package/dist/explorer/explorer-css.generated.js +4 -0
  19. package/dist/explorer/explorer-css.generated.js.map +1 -0
  20. package/dist/explorer/explorer-css.js +1 -31
  21. package/dist/explorer/explorer-css.js.map +1 -1
  22. package/dist/explorer/index.d.ts +4 -2
  23. package/dist/explorer/index.d.ts.map +1 -1
  24. package/dist/explorer/index.js +4 -2
  25. package/dist/explorer/index.js.map +1 -1
  26. package/dist/explorer/open.d.ts +103 -0
  27. package/dist/explorer/open.d.ts.map +1 -0
  28. package/dist/explorer/open.js +282 -0
  29. package/dist/explorer/open.js.map +1 -0
  30. package/dist/explorer/preview/BytesPreview.d.ts +13 -0
  31. package/dist/explorer/preview/BytesPreview.d.ts.map +1 -0
  32. package/dist/explorer/preview/BytesPreview.js +56 -0
  33. package/dist/explorer/preview/BytesPreview.js.map +1 -0
  34. package/dist/explorer/preview/HtmlPreview.d.ts +18 -0
  35. package/dist/explorer/preview/HtmlPreview.d.ts.map +1 -0
  36. package/dist/explorer/preview/HtmlPreview.js +112 -0
  37. package/dist/explorer/preview/HtmlPreview.js.map +1 -0
  38. package/dist/explorer/preview/OfficePreview.d.ts +11 -0
  39. package/dist/explorer/preview/OfficePreview.d.ts.map +1 -0
  40. package/dist/explorer/preview/OfficePreview.js +53 -0
  41. package/dist/explorer/preview/OfficePreview.js.map +1 -0
  42. package/dist/explorer/preview/TextPreview.d.ts +17 -0
  43. package/dist/explorer/preview/TextPreview.d.ts.map +1 -0
  44. package/dist/explorer/preview/TextPreview.js +95 -0
  45. package/dist/explorer/preview/TextPreview.js.map +1 -0
  46. package/dist/explorer/preview/index.d.ts +10 -3
  47. package/dist/explorer/preview/index.d.ts.map +1 -1
  48. package/dist/explorer/preview/index.js +52 -55
  49. package/dist/explorer/preview/index.js.map +1 -1
  50. package/dist/explorer/preview/md-labels.d.ts +3 -0
  51. package/dist/explorer/preview/md-labels.d.ts.map +1 -0
  52. package/dist/explorer/preview/md-labels.js +12 -0
  53. package/dist/explorer/preview/md-labels.js.map +1 -0
  54. package/dist/explorer/types.d.ts +186 -4
  55. package/dist/explorer/types.d.ts.map +1 -1
  56. package/dist/explorer/types.js +401 -14
  57. package/dist/explorer/types.js.map +1 -1
  58. package/dist/host/index.d.ts +66 -0
  59. package/dist/host/index.d.ts.map +1 -0
  60. package/dist/host/index.js +60 -0
  61. package/dist/host/index.js.map +1 -0
  62. package/dist/session/SessionViewModal.d.ts +42 -0
  63. package/dist/session/SessionViewModal.d.ts.map +1 -0
  64. package/dist/session/SessionViewModal.js +997 -0
  65. package/dist/session/SessionViewModal.js.map +1 -0
  66. package/dist/session/changes.d.ts +73 -0
  67. package/dist/session/changes.d.ts.map +1 -0
  68. package/dist/session/changes.js +134 -0
  69. package/dist/session/changes.js.map +1 -0
  70. package/dist/session/faces.d.ts +198 -0
  71. package/dist/session/faces.d.ts.map +1 -0
  72. package/dist/session/faces.js +17 -0
  73. package/dist/session/faces.js.map +1 -0
  74. package/dist/session/index.d.ts +5 -23
  75. package/dist/session/index.d.ts.map +1 -1
  76. package/dist/session/index.js +25 -70
  77. package/dist/session/index.js.map +1 -1
  78. package/dist/session/mirror/ChangedFileDiff.d.ts +22 -0
  79. package/dist/session/mirror/ChangedFileDiff.d.ts.map +1 -0
  80. package/dist/session/mirror/ChangedFileDiff.js +157 -0
  81. package/dist/session/mirror/ChangedFileDiff.js.map +1 -0
  82. package/dist/session/mirror/ChangedFilesCard.d.ts +18 -0
  83. package/dist/session/mirror/ChangedFilesCard.d.ts.map +1 -0
  84. package/dist/session/mirror/ChangedFilesCard.js +158 -0
  85. package/dist/session/mirror/ChangedFilesCard.js.map +1 -0
  86. package/dist/session/mirror/ChatGroupSeat.d.ts +24 -0
  87. package/dist/session/mirror/ChatGroupSeat.d.ts.map +1 -0
  88. package/dist/session/mirror/ChatGroupSeat.js +134 -0
  89. package/dist/session/mirror/ChatGroupSeat.js.map +1 -0
  90. package/dist/session/mirror/ChatNodeSeat.d.ts +43 -0
  91. package/dist/session/mirror/ChatNodeSeat.d.ts.map +1 -0
  92. package/dist/session/mirror/ChatNodeSeat.js +133 -0
  93. package/dist/session/mirror/ChatNodeSeat.js.map +1 -0
  94. package/dist/session/mirror/ChatView.d.ts +47 -0
  95. package/dist/session/mirror/ChatView.d.ts.map +1 -0
  96. package/dist/session/mirror/ChatView.js +127 -0
  97. package/dist/session/mirror/ChatView.js.map +1 -0
  98. package/dist/session/mirror/CommandCard.d.ts +20 -0
  99. package/dist/session/mirror/CommandCard.d.ts.map +1 -0
  100. package/dist/session/mirror/CommandCard.js +69 -0
  101. package/dist/session/mirror/CommandCard.js.map +1 -0
  102. package/dist/session/mirror/Deliverables.d.ts +24 -0
  103. package/dist/session/mirror/Deliverables.d.ts.map +1 -0
  104. package/dist/session/mirror/Deliverables.js +134 -0
  105. package/dist/session/mirror/Deliverables.js.map +1 -0
  106. package/dist/session/mirror/GenericCommandCard.d.ts +25 -0
  107. package/dist/session/mirror/GenericCommandCard.d.ts.map +1 -0
  108. package/dist/session/mirror/GenericCommandCard.js +567 -0
  109. package/dist/session/mirror/GenericCommandCard.js.map +1 -0
  110. package/dist/session/mirror/MessageIconActions.d.ts +16 -0
  111. package/dist/session/mirror/MessageIconActions.d.ts.map +1 -0
  112. package/dist/session/mirror/MessageIconActions.js +71 -0
  113. package/dist/session/mirror/MessageIconActions.js.map +1 -0
  114. package/dist/session/mirror/MessageItem.d.ts +66 -0
  115. package/dist/session/mirror/MessageItem.d.ts.map +1 -0
  116. package/dist/session/mirror/MessageItem.js +135 -0
  117. package/dist/session/mirror/MessageItem.js.map +1 -0
  118. package/dist/session/mirror/ReasoningRow.d.ts +11 -0
  119. package/dist/session/mirror/ReasoningRow.d.ts.map +1 -0
  120. package/dist/session/mirror/ReasoningRow.js +49 -0
  121. package/dist/session/mirror/ReasoningRow.js.map +1 -0
  122. package/dist/session/mirror/StatDialog.d.ts +20 -0
  123. package/dist/session/mirror/StatDialog.d.ts.map +1 -0
  124. package/dist/session/mirror/StatDialog.js +36 -0
  125. package/dist/session/mirror/StatDialog.js.map +1 -0
  126. package/dist/session/mirror/TurnProcessNodeView.d.ts +10 -0
  127. package/dist/session/mirror/TurnProcessNodeView.d.ts.map +1 -0
  128. package/dist/session/mirror/TurnProcessNodeView.js +68 -0
  129. package/dist/session/mirror/TurnProcessNodeView.js.map +1 -0
  130. package/dist/session/mirror/TurnTailNodeView.d.ts +32 -0
  131. package/dist/session/mirror/TurnTailNodeView.d.ts.map +1 -0
  132. package/dist/session/mirror/TurnTailNodeView.js +48 -0
  133. package/dist/session/mirror/TurnTailNodeView.js.map +1 -0
  134. package/dist/session/mirror/TurnTriggerNodeView.d.ts +14 -0
  135. package/dist/session/mirror/TurnTriggerNodeView.d.ts.map +1 -0
  136. package/dist/session/mirror/TurnTriggerNodeView.js +87 -0
  137. package/dist/session/mirror/TurnTriggerNodeView.js.map +1 -0
  138. package/dist/session/mirror/TurnUsagePanel.d.ts +21 -0
  139. package/dist/session/mirror/TurnUsagePanel.d.ts.map +1 -0
  140. package/dist/session/mirror/TurnUsagePanel.js +41 -0
  141. package/dist/session/mirror/TurnUsagePanel.js.map +1 -0
  142. package/dist/session/mirror/message-chrome.d.ts +33 -0
  143. package/dist/session/mirror/message-chrome.d.ts.map +1 -0
  144. package/dist/session/mirror/message-chrome.js +158 -0
  145. package/dist/session/mirror/message-chrome.js.map +1 -0
  146. package/dist/session/mirror/process-groups.d.ts +56 -0
  147. package/dist/session/mirror/process-groups.d.ts.map +1 -0
  148. package/dist/session/mirror/process-groups.js +202 -0
  149. package/dist/session/mirror/process-groups.js.map +1 -0
  150. package/dist/session/official-classes.d.ts +28 -0
  151. package/dist/session/official-classes.d.ts.map +1 -0
  152. package/dist/session/official-classes.js +146 -0
  153. package/dist/session/official-classes.js.map +1 -0
  154. package/dist/session/open-session-view.d.ts +17 -0
  155. package/dist/session/open-session-view.d.ts.map +1 -0
  156. package/dist/session/open-session-view.js +136 -0
  157. package/dist/session/open-session-view.js.map +1 -0
  158. package/dist/session/session-css.d.ts +1 -1
  159. package/dist/session/session-css.d.ts.map +1 -1
  160. package/dist/session/session-css.generated.d.ts +2 -0
  161. package/dist/session/session-css.generated.d.ts.map +1 -0
  162. package/dist/session/session-css.generated.js +4 -0
  163. package/dist/session/session-css.generated.js.map +1 -0
  164. package/dist/session/session-css.js +1 -17
  165. package/dist/session/session-css.js.map +1 -1
  166. package/dist/ui/AlertModal.d.ts +28 -0
  167. package/dist/ui/AlertModal.d.ts.map +1 -0
  168. package/dist/ui/AlertModal.js +29 -0
  169. package/dist/ui/AlertModal.js.map +1 -0
  170. package/dist/ui/Button.d.ts.map +1 -1
  171. package/dist/ui/Button.js +14 -1
  172. package/dist/ui/Button.js.map +1 -1
  173. package/dist/ui/Card.d.ts +4 -2
  174. package/dist/ui/Card.d.ts.map +1 -1
  175. package/dist/ui/Card.js +12 -6
  176. package/dist/ui/Card.js.map +1 -1
  177. package/dist/ui/Chip.d.ts +9 -1
  178. package/dist/ui/Chip.d.ts.map +1 -1
  179. package/dist/ui/Chip.js +8 -2
  180. package/dist/ui/Chip.js.map +1 -1
  181. package/dist/ui/CodeViewer.d.ts +36 -0
  182. package/dist/ui/CodeViewer.d.ts.map +1 -0
  183. package/dist/ui/CodeViewer.js +90 -0
  184. package/dist/ui/CodeViewer.js.map +1 -0
  185. package/dist/ui/ConfirmModal.d.ts +30 -0
  186. package/dist/ui/ConfirmModal.d.ts.map +1 -0
  187. package/dist/ui/ConfirmModal.js +23 -0
  188. package/dist/ui/ConfirmModal.js.map +1 -0
  189. package/dist/ui/DateTimePicker.d.ts +45 -0
  190. package/dist/ui/DateTimePicker.d.ts.map +1 -0
  191. package/dist/ui/DateTimePicker.js +447 -0
  192. package/dist/ui/DateTimePicker.js.map +1 -0
  193. package/dist/ui/Field.d.ts +11 -2
  194. package/dist/ui/Field.d.ts.map +1 -1
  195. package/dist/ui/Field.js +15 -5
  196. package/dist/ui/Field.js.map +1 -1
  197. package/dist/ui/MarqueeText.d.ts.map +1 -1
  198. package/dist/ui/MarqueeText.js +3 -1
  199. package/dist/ui/MarqueeText.js.map +1 -1
  200. package/dist/ui/Modal.d.ts +25 -3
  201. package/dist/ui/Modal.d.ts.map +1 -1
  202. package/dist/ui/Modal.js +41 -7
  203. package/dist/ui/Modal.js.map +1 -1
  204. package/dist/ui/ModelPicker.d.ts +25 -12
  205. package/dist/ui/ModelPicker.d.ts.map +1 -1
  206. package/dist/ui/ModelPicker.js +67 -19
  207. package/dist/ui/ModelPicker.js.map +1 -1
  208. package/dist/ui/PanelDock.d.ts +127 -0
  209. package/dist/ui/PanelDock.d.ts.map +1 -0
  210. package/dist/ui/PanelDock.js +297 -0
  211. package/dist/ui/PanelDock.js.map +1 -0
  212. package/dist/ui/Picker.d.ts +8 -2
  213. package/dist/ui/Picker.d.ts.map +1 -1
  214. package/dist/ui/Picker.js +86 -18
  215. package/dist/ui/Picker.js.map +1 -1
  216. package/dist/ui/SectionHead.d.ts +3 -3
  217. package/dist/ui/SectionHead.d.ts.map +1 -1
  218. package/dist/ui/SectionHead.js +4 -4
  219. package/dist/ui/SectionHead.js.map +1 -1
  220. package/dist/ui/Segmented.d.ts +2 -0
  221. package/dist/ui/Segmented.d.ts.map +1 -1
  222. package/dist/ui/Segmented.js +3 -1
  223. package/dist/ui/Segmented.js.map +1 -1
  224. package/dist/ui/Textarea.d.ts +2 -0
  225. package/dist/ui/Textarea.d.ts.map +1 -1
  226. package/dist/ui/Textarea.js +6 -1
  227. package/dist/ui/Textarea.js.map +1 -1
  228. package/dist/ui/Toast.d.ts +41 -8
  229. package/dist/ui/Toast.d.ts.map +1 -1
  230. package/dist/ui/Toast.js +216 -28
  231. package/dist/ui/Toast.js.map +1 -1
  232. package/dist/ui/WorkspacePicker.d.ts +15 -28
  233. package/dist/ui/WorkspacePicker.d.ts.map +1 -1
  234. package/dist/ui/WorkspacePicker.js +18 -27
  235. package/dist/ui/WorkspacePicker.js.map +1 -1
  236. package/dist/ui/card-css.d.ts +1 -1
  237. package/dist/ui/card-css.d.ts.map +1 -1
  238. package/dist/ui/card-css.generated.d.ts +2 -0
  239. package/dist/ui/card-css.generated.d.ts.map +1 -0
  240. package/dist/ui/card-css.generated.js +4 -0
  241. package/dist/ui/card-css.generated.js.map +1 -0
  242. package/dist/ui/card-css.js +1 -35
  243. package/dist/ui/card-css.js.map +1 -1
  244. package/dist/ui/chip-css.d.ts +1 -1
  245. package/dist/ui/chip-css.d.ts.map +1 -1
  246. package/dist/ui/chip-css.generated.d.ts +2 -0
  247. package/dist/ui/chip-css.generated.d.ts.map +1 -0
  248. package/dist/ui/chip-css.generated.js +4 -0
  249. package/dist/ui/chip-css.generated.js.map +1 -0
  250. package/dist/ui/chip-css.js +1 -17
  251. package/dist/ui/chip-css.js.map +1 -1
  252. package/dist/ui/code-viewer-css.d.ts +2 -0
  253. package/dist/ui/code-viewer-css.d.ts.map +1 -0
  254. package/dist/ui/code-viewer-css.generated.d.ts +2 -0
  255. package/dist/ui/code-viewer-css.generated.d.ts.map +1 -0
  256. package/dist/ui/code-viewer-css.generated.js +4 -0
  257. package/dist/ui/code-viewer-css.generated.js.map +1 -0
  258. package/dist/ui/code-viewer-css.js +3 -0
  259. package/dist/ui/code-viewer-css.js.map +1 -0
  260. package/dist/ui/code-viewer-lang.d.ts +15 -0
  261. package/dist/ui/code-viewer-lang.d.ts.map +1 -0
  262. package/dist/ui/code-viewer-lang.js +190 -0
  263. package/dist/ui/code-viewer-lang.js.map +1 -0
  264. package/dist/ui/code-viewer-theme.d.ts +5 -0
  265. package/dist/ui/code-viewer-theme.d.ts.map +1 -0
  266. package/dist/ui/code-viewer-theme.js +138 -0
  267. package/dist/ui/code-viewer-theme.js.map +1 -0
  268. package/dist/ui/controls/back-to-top-css.generated.d.ts +2 -0
  269. package/dist/ui/controls/back-to-top-css.generated.d.ts.map +1 -0
  270. package/dist/ui/controls/back-to-top-css.generated.js +4 -0
  271. package/dist/ui/controls/back-to-top-css.generated.js.map +1 -0
  272. package/dist/ui/controls/button-css.generated.d.ts +2 -0
  273. package/dist/ui/controls/button-css.generated.d.ts.map +1 -0
  274. package/dist/ui/controls/button-css.generated.js +4 -0
  275. package/dist/ui/controls/button-css.generated.js.map +1 -0
  276. package/dist/ui/controls/datetime-css.generated.d.ts +2 -0
  277. package/dist/ui/controls/datetime-css.generated.d.ts.map +1 -0
  278. package/dist/ui/controls/datetime-css.generated.js +4 -0
  279. package/dist/ui/controls/datetime-css.generated.js.map +1 -0
  280. package/dist/ui/controls/field-css.generated.d.ts +2 -0
  281. package/dist/ui/controls/field-css.generated.d.ts.map +1 -0
  282. package/dist/ui/controls/field-css.generated.js +4 -0
  283. package/dist/ui/controls/field-css.generated.js.map +1 -0
  284. package/dist/ui/controls/hint-css.generated.d.ts +2 -0
  285. package/dist/ui/controls/hint-css.generated.d.ts.map +1 -0
  286. package/dist/ui/controls/hint-css.generated.js +4 -0
  287. package/dist/ui/controls/hint-css.generated.js.map +1 -0
  288. package/dist/ui/controls/loading-css.generated.d.ts +2 -0
  289. package/dist/ui/controls/loading-css.generated.d.ts.map +1 -0
  290. package/dist/ui/controls/loading-css.generated.js +4 -0
  291. package/dist/ui/controls/loading-css.generated.js.map +1 -0
  292. package/dist/ui/controls/segmented-css.generated.d.ts +2 -0
  293. package/dist/ui/controls/segmented-css.generated.d.ts.map +1 -0
  294. package/dist/ui/controls/segmented-css.generated.js +4 -0
  295. package/dist/ui/controls/segmented-css.generated.js.map +1 -0
  296. package/dist/ui/controls-css.d.ts +7 -8
  297. package/dist/ui/controls-css.d.ts.map +1 -1
  298. package/dist/ui/controls-css.js +13 -11
  299. package/dist/ui/controls-css.js.map +1 -1
  300. package/dist/ui/css.d.ts +5 -0
  301. package/dist/ui/css.d.ts.map +1 -1
  302. package/dist/ui/css.js +13 -4
  303. package/dist/ui/css.js.map +1 -1
  304. package/dist/ui/datetime-logic.d.ts +100 -0
  305. package/dist/ui/datetime-logic.d.ts.map +1 -0
  306. package/dist/ui/datetime-logic.js +193 -0
  307. package/dist/ui/datetime-logic.js.map +1 -0
  308. package/dist/ui/feedback-css.d.ts +1 -1
  309. package/dist/ui/feedback-css.d.ts.map +1 -1
  310. package/dist/ui/feedback-css.generated.d.ts +2 -0
  311. package/dist/ui/feedback-css.generated.d.ts.map +1 -0
  312. package/dist/ui/feedback-css.generated.js +4 -0
  313. package/dist/ui/feedback-css.generated.js.map +1 -0
  314. package/dist/ui/feedback-css.js +1 -53
  315. package/dist/ui/feedback-css.js.map +1 -1
  316. package/dist/ui/host-data.d.ts +103 -0
  317. package/dist/ui/host-data.d.ts.map +1 -0
  318. package/dist/ui/host-data.js +106 -0
  319. package/dist/ui/host-data.js.map +1 -0
  320. package/dist/ui/host-toast.d.ts +23 -0
  321. package/dist/ui/host-toast.d.ts.map +1 -0
  322. package/dist/ui/host-toast.js +34 -0
  323. package/dist/ui/host-toast.js.map +1 -0
  324. package/dist/ui/index.d.ts +12 -6
  325. package/dist/ui/index.d.ts.map +1 -1
  326. package/dist/ui/index.js +10 -4
  327. package/dist/ui/index.js.map +1 -1
  328. package/dist/ui/marquee-css.d.ts +2 -0
  329. package/dist/ui/marquee-css.d.ts.map +1 -0
  330. package/dist/ui/marquee-css.generated.d.ts +2 -0
  331. package/dist/ui/marquee-css.generated.d.ts.map +1 -0
  332. package/dist/ui/marquee-css.generated.js +4 -0
  333. package/dist/ui/marquee-css.generated.js.map +1 -0
  334. package/dist/ui/marquee-css.js +4 -0
  335. package/dist/ui/marquee-css.js.map +1 -0
  336. package/dist/ui/modal-host.d.ts +30 -0
  337. package/dist/ui/modal-host.d.ts.map +1 -0
  338. package/dist/ui/modal-host.js +101 -0
  339. package/dist/ui/modal-host.js.map +1 -0
  340. package/dist/ui/official.d.ts.map +1 -1
  341. package/dist/ui/official.js +45 -1
  342. package/dist/ui/official.js.map +1 -1
  343. package/dist/ui/panel-dock-css.d.ts +2 -0
  344. package/dist/ui/panel-dock-css.d.ts.map +1 -0
  345. package/dist/ui/panel-dock-css.generated.d.ts +2 -0
  346. package/dist/ui/panel-dock-css.generated.d.ts.map +1 -0
  347. package/dist/ui/panel-dock-css.generated.js +4 -0
  348. package/dist/ui/panel-dock-css.generated.js.map +1 -0
  349. package/dist/ui/panel-dock-css.js +4 -0
  350. package/dist/ui/panel-dock-css.js.map +1 -0
  351. package/dist/ui/panel-dock-logic.d.ts +50 -0
  352. package/dist/ui/panel-dock-logic.d.ts.map +1 -0
  353. package/dist/ui/panel-dock-logic.js +64 -0
  354. package/dist/ui/panel-dock-logic.js.map +1 -0
  355. package/dist/ui/picker-css.d.ts +1 -1
  356. package/dist/ui/picker-css.d.ts.map +1 -1
  357. package/dist/ui/picker-css.generated.d.ts +2 -0
  358. package/dist/ui/picker-css.generated.d.ts.map +1 -0
  359. package/dist/ui/picker-css.generated.js +4 -0
  360. package/dist/ui/picker-css.generated.js.map +1 -0
  361. package/dist/ui/picker-css.js +1 -48
  362. package/dist/ui/picker-css.js.map +1 -1
  363. package/dist/ui/picker-icons.d.ts +12 -0
  364. package/dist/ui/picker-icons.d.ts.map +1 -0
  365. package/dist/ui/picker-icons.js +29 -0
  366. package/dist/ui/picker-icons.js.map +1 -0
  367. package/dist/ui/picker-logic.d.ts +4 -1
  368. package/dist/ui/picker-logic.d.ts.map +1 -1
  369. package/dist/ui/picker-logic.js +1 -2
  370. package/dist/ui/picker-logic.js.map +1 -1
  371. package/dist/ui/resizer.d.ts +3 -1
  372. package/dist/ui/resizer.d.ts.map +1 -1
  373. package/dist/ui/resizer.js +1 -1
  374. package/dist/ui/resizer.js.map +1 -1
  375. package/dist/ui/toast-host.d.ts +24 -0
  376. package/dist/ui/toast-host.d.ts.map +1 -0
  377. package/dist/ui/toast-host.js +20 -0
  378. package/dist/ui/toast-host.js.map +1 -0
  379. package/dist/utils/date.d.ts +8 -0
  380. package/dist/utils/date.d.ts.map +1 -1
  381. package/dist/utils/date.js +16 -0
  382. package/dist/utils/date.js.map +1 -1
  383. package/dist/utils/i18n.d.ts +1 -1
  384. package/dist/utils/i18n.d.ts.map +1 -1
  385. package/dist/utils/i18n.js +437 -18
  386. package/dist/utils/i18n.js.map +1 -1
  387. package/dist/utils/index.d.ts +1 -1
  388. package/dist/utils/index.d.ts.map +1 -1
  389. package/dist/utils/index.js +1 -1
  390. package/dist/utils/index.js.map +1 -1
  391. package/dist/utils/path.d.ts.map +1 -1
  392. package/dist/utils/path.js +1 -0
  393. package/dist/utils/path.js.map +1 -1
  394. package/docs/README.md +12 -5
  395. package/docs/design/architecture.md +38 -8
  396. package/docs/design/copywriting.md +95 -0
  397. package/docs/design/doc-format.md +80 -0
  398. package/docs/design/doc-format.ts +39 -0
  399. package/docs/design/external/dsh-host.md +150 -1
  400. package/docs/design/features.md +4 -17
  401. package/docs/design/methods.md +13 -34
  402. package/docs/design/structure.md +25 -22
  403. package/docs/design/style.md +24 -50
  404. package/docs/help/design.doc.ts +112 -0
  405. package/docs/help/design.md +88 -0
  406. package/docs/help/explorer.doc.ts +136 -0
  407. package/docs/help/explorer.md +68 -0
  408. package/docs/help/index.doc.ts +79 -0
  409. package/docs/help/index.md +28 -0
  410. package/docs/help/integration.doc.ts +114 -0
  411. package/docs/help/integration.md +127 -0
  412. package/docs/help/methods.md +58 -0
  413. package/docs/help/session.doc.ts +154 -0
  414. package/docs/help/session.md +91 -0
  415. package/docs/help/style.md +80 -0
  416. package/docs/help/ui.doc.ts +404 -0
  417. package/docs/help/ui.md +342 -0
  418. package/docs/help/utils.doc.ts +133 -0
  419. package/docs/help/utils.md +96 -0
  420. package/docs/requirements.md +33 -12
  421. package/package.json +44 -3
  422. package/dist/ui/ErrorBoundary.d.ts +0 -22
  423. package/dist/ui/ErrorBoundary.d.ts.map +0 -1
  424. package/dist/ui/ErrorBoundary.js +0 -30
  425. package/dist/ui/ErrorBoundary.js.map +0 -1
  426. package/docs/design/features/design.md +0 -55
  427. package/docs/design/features/explorer.md +0 -73
  428. package/docs/design/features/session.md +0 -70
  429. package/docs/design/features/ui.md +0 -225
  430. package/docs/design/features/utils.md +0 -64
  431. package/docs/examples/integration.md +0 -103
@@ -22,11 +22,13 @@ export function MarqueeText(props) {
22
22
  }, []);
23
23
  useLayoutEffect(() => {
24
24
  const outer = outerRef.current;
25
- if (outer === null)
25
+ const inner = innerRef.current;
26
+ if (outer === null || inner === null)
26
27
  return;
27
28
  measure();
28
29
  const ro = new ResizeObserver(measure); // 抽屉拖宽变窄 / 字体就绪都会改 clientWidth ⇒ 重测
29
30
  ro.observe(outer);
31
+ ro.observe(inner); // webfont 就绪只改 inner.scrollWidth 不改 outer.clientWidth,不观察就漏测(官方 PathLabel 同款双观察)
30
32
  return () => { ro.disconnect(); };
31
33
  }, [measure]);
32
34
  useEffect(() => { measure(); }, [props.text, measure]);
@@ -1 +1 @@
1
- {"version":3,"file":"MarqueeText.js","sourceRoot":"","sources":["../../src/ui/MarqueeText.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAyC,MAAM,OAAO,CAAA;AAE5I,aAAa;AACb,MAAM,UAAU,WAAW,CAAC,KAS3B;IACC,MAAM,QAAQ,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAA;IACrD,MAAM,QAAQ,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAA;IACrD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACnC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;YAAE,OAAM;QAC5C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IACxE,CAAC,EAAE,EAAE,CAAC,CAAA;IACN,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,IAAI,KAAK,KAAK,IAAI;YAAE,OAAM;QAC1B,OAAO,EAAE,CAAA;QACT,MAAM,EAAE,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA,CAAC,oCAAoC;QAC3E,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACjB,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAA,CAAC,CAAC,CAAA;IAClC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IACb,SAAS,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,CAAA,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IACrD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAA;IACpB,OAAO,CAAC,CAAC,MAAM,EAAE;QACf,GAAG,EAAE,QAAQ;QACb,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACtH,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,EACC,CAAC,CAAC,MAAM,EAAE;QACR,GAAG,EAAE,QAAQ;QACb,SAAS,EAAE,aAAa;QACxB,KAAK,EAAE;YACL,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClH;KACF,EAAE,KAAK,CAAC,IAAI,CAAC,CACf,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"MarqueeText.js","sourceRoot":"","sources":["../../src/ui/MarqueeText.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAyC,MAAM,OAAO,CAAA;AAE5I,aAAa;AACb,MAAM,UAAU,WAAW,CAAC,KAS3B;IACC,MAAM,QAAQ,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAA;IACrD,MAAM,QAAQ,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAA;IACrD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACnC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;YAAE,OAAM;QAC5C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IACxE,CAAC,EAAE,EAAE,CAAC,CAAA;IACN,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;YAAE,OAAM;QAC5C,OAAO,EAAE,CAAA;QACT,MAAM,EAAE,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA,CAAC,oCAAoC;QAC3E,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACjB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA,CAAC,iFAAiF;QACnG,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAA,CAAC,CAAC,CAAA;IAClC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IACb,SAAS,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,CAAA,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IACrD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAA;IACpB,OAAO,CAAC,CAAC,MAAM,EAAE;QACf,GAAG,EAAE,QAAQ;QACb,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACtH,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,EACC,CAAC,CAAC,MAAM,EAAE;QACR,GAAG,EAAE,QAAQ;QACb,SAAS,EAAE,aAAa;QACxB,KAAK,EAAE;YACL,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClH;KACF,EAAE,KAAK,CAAC,IAAI,CAAC,CACf,CAAA;AACH,CAAC"}
@@ -1,16 +1,38 @@
1
1
  import { createElement as h, type ReactNode } from 'react';
2
2
  import { type Translate } from '../utils/i18n.js';
3
+ /** 弹窗尺寸档:sm≈确认框 / md(默认) / lg 大窗。 */
4
+ export type ModalSize = 'sm' | 'md' | 'lg';
3
5
  export interface ModalProps {
6
+ /** 头部左侧图标位(可不传)。 */
7
+ icon?: ReactNode;
4
8
  title?: ReactNode;
5
- /** 关闭回调;不传就不显示关闭钮(必须自己给关闭路径)。 */
9
+ /**
10
+ * 标题**下方**的副标题行(等宽小字;会话预览的 sessionId 就放这里 —— 用户 2026-10-22:
11
+ * 标识属于标题区,不占正文)。与标题同宽、可换行。
12
+ */
13
+ subtitle?: ReactNode;
14
+ /** 标题右侧小块:数字 / 标签(ReactNode;demo 用 Chip 演示)。 */
15
+ headerExtra?: ReactNode;
16
+ /** 头部右侧动作区:关闭钮之外的更多按钮(ReactNode)。 */
17
+ headerActions?: ReactNode;
18
+ /** 关闭回调;不传则 ✕ 不显示(必须自己给关闭路径)。 */
6
19
  onClose?: () => void;
20
+ /** 是否显示右上角 ✕(默认 = `onClose` 是否传入)。确认框传 false 即可去掉小叉。 */
21
+ closable?: boolean;
7
22
  /** 点遮罩是否关闭(默认 true;误触代价大的场景设 false)。 */
8
23
  closeOnMask?: boolean;
9
24
  /** 按 Esc 是否关闭(默认 true)。 */
10
25
  escClose?: boolean;
11
- /** 面板最大宽度,默认 `min(960px, 92vw)`。 */
26
+ /** 尺寸档:sm=小确认框家族 / md·lg=大弹窗家族;也可用 width/height 精确覆盖。 */
27
+ size?: ModalSize;
28
+ /** 面板宽度(默认随 size:sm 360px / md 720px / lg 1120px,均带视口兜底)。 */
29
+ width?: string;
30
+ /** 面板高度(默认仅 lg 有:calc(100% - 80px),同兄弟项目大弹窗)。 */
31
+ height?: string;
32
+ /** 面板最大宽度 / 最大高度覆盖(不传走 size 默认)。 */
12
33
  maxWidth?: string;
13
- /** 不传 `title` 且传这个为 true ⇒ 不渲染头部(沉浸式场景)。 */
34
+ maxHeight?: string;
35
+ /** 不渲染头部(沉浸式 / 无标题场景)。 */
14
36
  hideHeader?: boolean;
15
37
  footer?: ReactNode;
16
38
  children?: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/ui/Modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAErE,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEpD,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,wCAAwC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAqD7D"}
1
+ {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/ui/Modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAErE,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEpD,qCAAqC;AACrC,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAE1C,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,gDAAgD;IAChD,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,qCAAqC;IACrC,aAAa,CAAC,EAAE,SAAS,CAAA;IACzB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,wCAAwC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,yDAAyD;IACzD,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAwG7D"}
package/dist/ui/Modal.js CHANGED
@@ -21,6 +21,23 @@ export function Modal(props) {
21
21
  document.addEventListener('keydown', onKey);
22
22
  return () => document.removeEventListener('keydown', onKey);
23
23
  }, [escClose, props.onClose]);
24
+ // 默认宽高(兄弟项目真值:小框 360px(task-list.tsx:457)/ 大弹窗 min(1120px,100vw-32px) × calc(100%-80px)(archive-session-css.ts:42))。
25
+ // 宽度用 `100%`(相对遮罩盒)而不是 `100vw`:遮罩已按右侧分栏让位(见 feedback.css),
26
+ // 用 `100vw` 算出来的宽在分栏在场时会溢出到分栏上,等于白让(用户 2026-10-22)。
27
+ const sizeStyle = {
28
+ sm: { width: '360px', maxWidth: 'calc(100% - 48px)' },
29
+ md: { width: 'min(720px, calc(100% - 32px))', maxHeight: '86vh' },
30
+ lg: { width: 'min(1120px, calc(100% - 32px))', height: 'calc(100% - 80px)' },
31
+ };
32
+ const s = sizeStyle[props.size ?? 'md'];
33
+ const showClose = props.closable !== false && props.onClose !== undefined;
34
+ const showHeader = props.hideHeader !== true &&
35
+ (props.icon !== undefined ||
36
+ props.title !== undefined ||
37
+ props.subtitle !== undefined ||
38
+ props.headerExtra !== undefined ||
39
+ props.headerActions !== undefined ||
40
+ showClose);
24
41
  return h('div', {
25
42
  className: 'dshpc-modal-mask',
26
43
  onClick: () => {
@@ -28,18 +45,35 @@ export function Modal(props) {
28
45
  props.onClose?.();
29
46
  },
30
47
  }, h('div', {
31
- className: 'dshpc-modal',
32
- style: props.maxWidth === undefined ? undefined : { maxWidth: props.maxWidth },
48
+ className: `dshpc-modal${props.size ? ` dshpc-modal--${props.size}` : ''}`,
49
+ style: {
50
+ width: props.width ?? s.width,
51
+ maxWidth: props.maxWidth ?? s.maxWidth,
52
+ maxHeight: props.maxHeight ?? s.maxHeight,
53
+ height: props.height ?? s.height,
54
+ },
33
55
  onClick: (e) => e.stopPropagation(),
34
- }, props.hideHeader === true || (props.title === undefined && props.onClose === undefined)
35
- ? null
36
- : h('div', { className: 'dshpc-modal__head' }, h('div', { className: 'dshpc-modal__title' }, props.title ?? ''), props.onClose === undefined
56
+ }, showHeader
57
+ ? h('div', { className: 'dshpc-modal__head' }, h('div', { className: 'dshpc-modal__heading' }, props.icon === undefined ? null : h('span', { className: 'dshpc-modal__lead' }, props.icon),
58
+ // 标题组:第一行 = 标题 + 右侧小块(徽标**紧跟标题**,不跨两行居中),
59
+ // 第二行 = 副标题(会话 id 这类标识)。
60
+ h('div', { className: 'dshpc-modal__titlegroup' }, h('div', { className: 'dshpc-modal__titlerow' }, h('div', { className: 'dshpc-modal__title' }, props.title ?? ''), props.headerExtra === undefined
61
+ ? null
62
+ : h('div', { className: 'dshpc-modal__extra' }, props.headerExtra)), props.subtitle === undefined
63
+ ? null
64
+ : h('div', { className: 'dshpc-modal__sid' }, props.subtitle))), h('div', { className: 'dshpc-modal__spacer' }), props.headerActions === undefined
37
65
  ? null
38
- : h('button', {
66
+ : h('div', { className: 'dshpc-modal__actions' }, props.headerActions), showClose
67
+ ? h('button', {
39
68
  type: 'button',
40
69
  className: 'dshpc-modal__close',
41
70
  'aria-label': tt('modalClose'),
42
71
  onClick: () => props.onClose?.(),
43
- }, '✕')), h('div', { className: 'dshpc-modal__body' }, props.children ?? null), props.footer === undefined ? null : h('div', { className: 'dshpc-modal__foot' }, props.footer)));
72
+ }, '✕')
73
+ : null)
74
+ : null,
75
+ // body 是**唯一滚动容器**:内距归它、滚动条归它、滚动条贴面板右缘;
76
+ // 内容只管按流排,不许自己定高、不许自己再开滚动条(用户 2026-10-22 定的口径)。
77
+ h('div', { className: 'dshpc-modal__body' }, props.children ?? null), props.footer === undefined ? null : h('div', { className: 'dshpc-modal__foot' }, props.footer)));
44
78
  }
45
79
  //# sourceMappingURL=Modal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/ui/Modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,CAAC,EAAkB,MAAM,kBAAkB,CAAA;AAmBpD;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,KAAiB;IACrC,cAAc,EAAE,CAAA;IAChB,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,CAAA;IAC/B,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,KAAK,KAAK,CAAA;IAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAA;IAEzC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;YAAE,OAAM;QACpD,MAAM,KAAK,GAAG,CAAC,CAAgB,EAAQ,EAAE;YACvC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;gBAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CAAA;QAC3C,CAAC,CAAA;QACD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QAC3C,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IAC7D,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;IAE7B,OAAO,CAAC,CACN,KAAK,EACL;QACE,SAAS,EAAE,kBAAkB;QAC7B,OAAO,EAAE,GAAG,EAAE;YACZ,IAAI,WAAW;gBAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CAAA;QACpC,CAAC;KACF,EACD,CAAC,CACC,KAAK,EACL;QACE,SAAS,EAAE,aAAa;QACxB,KAAK,EAAE,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;QAC9E,OAAO,EAAE,CAAC,CAAkC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE;KACrE,EACD,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC;QACrF,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,CACC,KAAK,EACL,EAAE,SAAS,EAAE,mBAAmB,EAAE,EAClC,CAAC,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,oBAAoB,EAAE,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,EAChE,KAAK,CAAC,OAAO,KAAK,SAAS;YACzB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,CAAC,CACC,QAAQ,EACR;gBACE,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,oBAAoB;gBAC/B,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC;gBAC9B,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;aACjC,EACD,GAAG,CACJ,CACN,EACL,CAAC,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,mBAAmB,EAAE,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,EACpE,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,mBAAmB,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAC/F,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/ui/Modal.ts"],"names":[],"mappings":"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"}
@@ -1,30 +1,43 @@
1
- import { createElement as h } from 'react';
1
+ import { createElement as h, type ReactNode } from 'react';
2
2
  import { type Translate } from '../utils/i18n.js';
3
3
  import { type PickerSize } from './Picker.js';
4
4
  import { type PickerGroup } from './picker-logic.js';
5
5
  /**
6
- * 模型选择的两种形态(需求文档 §6):
7
- * - `cascade`(级联):先选供应商、再选模型(一行两个下拉,stp 的形态)
8
- * - `flat`(平铺):一个下拉列出全部(dispatch 的形态)
6
+ * 模型选择器的两种形态(消费者自选):
7
+ * - `grouped`(分组,默认):**一个下拉、完全独立**,供应商做组头、模型列在下面,不与任何东西联动。
8
+ * - `cascade`(联动):**两个下拉、彼此联动** —— 先选供应商,后面模型列表跟着筛;
9
+ * 换供应商会清空已选模型(旧模型不属于新供应商)。
9
10
  *
10
- * 两种形态吃**同一份分组数据**,只是渲染方式不同 —— 调用方不用准备两套数据。
11
- * 数据由调用方给(供应商目录来自 `llm/listProviders` 这类宿主路由,组件取不到)。
11
+ * **返回口径一致**:`onChange` 一律发最终模型值(`${provider}/${id}`);级联态换供应商先发 `''`。
12
+ * 选「默认模型」也发 `''` —— 表示没选,调用方自己处理。
13
+ *
14
+ * **数据自带**:不传 `groups` 就读 `connectHost(ctx, { modelsPath })` 喂进的真实目录。
12
15
  */
13
- export type ModelPickerVariant = 'cascade' | 'flat';
16
+ export type ModelPickerVariant = 'grouped' | 'cascade';
14
17
  export interface ModelPickerProps {
15
- /** 分组数据:一组 = 一个供应商。 */
16
- groups: PickerGroup[];
18
+ /** 覆盖内置目录(一般不用;测试或特殊数据源时才传)。 */
19
+ groups?: PickerGroup[];
17
20
  variant?: ModelPickerVariant;
18
- /** 最终模型值(`option.value`,编码口径由调用方定,如 `${provider}/${id}`)。 */
21
+ /** 最终模型值;`''` = 默认模型(没选)。 */
19
22
  value?: string;
20
23
  /** 非受控初始值。 */
21
24
  defaultValue?: string;
22
25
  onChange?: (value: string) => void;
23
- /** 候选可能不完整 ⇒ 如实提示。 */
26
+ /** 是否提供「默认模型」选项(默认提供;不需要就传 false)。 */
27
+ allowDefault?: boolean;
28
+ /** 「默认模型」的文案(默认取内置字典)。 */
29
+ defaultLabel?: string;
30
+ /** 未选时的文字(默认「模型」)。 */
31
+ placeholder?: string;
32
+ /** 触发器前置图标:不传 = 默认星形;传 `null` = 不显示;传元素 = 自定义。 */
33
+ icon?: ReactNode | null;
34
+ /** 问号提示文字(传了才显示)。 */
35
+ hint?: string;
36
+ /** 目录不可用时的如实提示(不传则由目录状态决定)。 */
24
37
  degraded?: boolean;
25
38
  disabled?: boolean;
26
- /** 允许清空(「跟随宿主」这类语义靠调用方自己塞默认项,这里只负责能清掉)。 */
27
39
  clearable?: boolean;
40
+ /** 下拉内搜索框(默认开;要关传 false)。 */
28
41
  searchable?: boolean;
29
42
  size?: PickerSize;
30
43
  placement?: 'down' | 'up';
@@ -1 +1 @@
1
- {"version":3,"file":"ModelPicker.d.ts","sourceRoot":"","sources":["../../src/ui/ModelPicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAA2B,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE7E;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,MAAM,CAAA;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,uBAAuB;IACvB,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,sBAAsB;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAoDzE"}
1
+ {"version":3,"file":"ModelPicker.d.ts","sourceRoot":"","sources":["../../src/ui/ModelPicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAA6C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAErG,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAA2B,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAI7E;;;;;;;;;;GAUG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,CAAA;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAA;IACtB,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,sCAAsC;IACtC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,sBAAsB;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kDAAkD;IAClD,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB,qBAAqB;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAqGzE"}
@@ -1,52 +1,100 @@
1
- import { createElement as h } from 'react';
1
+ import { createElement as h, useEffect, useState, useSyncExternalStore } from 'react';
2
2
  import { ensureControls } from './css.js';
3
3
  import { t } from '../utils/i18n.js';
4
4
  import { Picker } from './Picker.js';
5
5
  import { flattenOptions, groupOf } from './picker-logic.js';
6
+ import { modelCatalog } from './host-data.js';
7
+ import { sparkleIcon } from './picker-icons.js';
6
8
  export function ModelPicker(props) {
7
9
  ensureControls();
8
10
  const tt = props.translate ?? t;
9
11
  const value = props.value;
10
- const variant = props.variant ?? 'flat';
11
- const cur = value ?? '';
12
- if (variant === 'flat') {
12
+ const variant = props.variant ?? 'grouped';
13
+ const searchable = props.searchable ?? true;
14
+ const defaultOption = props.allowDefault === false
15
+ ? undefined
16
+ : { value: '', label: props.defaultLabel ?? tt('modelDefault') };
17
+ // 目录状态:外部没喂目录(Node 自检 / 宿主缺服务)⇒ 空 + 如实降级,不编数据。
18
+ const catalog = useSyncExternalStore(modelCatalog.subscribe, modelCatalog.getSnapshot);
19
+ const groups = props.groups ??
20
+ (catalog.status === 'ready'
21
+ ? catalog.routes.map((route) => ({
22
+ value: route.provider,
23
+ label: route.displayName,
24
+ options: route.models.map((model) => ({
25
+ value: `${route.provider}/${model.id}`,
26
+ label: model.name ?? model.id,
27
+ })),
28
+ }))
29
+ : []);
30
+ // 目录不可用、或读出来是空的 ⇒ 如实提示「候选可能不完整」,别让空列表看起来像坏了。
31
+ const degraded = props.degraded ?? (catalog.status === 'unavailable' || (catalog.status === 'ready' && groups.length === 0));
32
+ const icon = props.icon === undefined ? sparkleIcon() : props.icon ?? undefined;
33
+ const emitModel = (v) => {
34
+ props.onChange?.(typeof v === 'string' ? v : v[0] ?? '');
35
+ };
36
+ // 联动态的厂商选择必须组件自己记 —— 值是从模型值反推的,换厂商会把模型清成 ''
37
+ // (拍板口径),反推就再也找不到刚点的厂商(2026-10-20 真机:选完厂商后面仍是黑的)。
38
+ const [pickedProvider, setPickedProvider] = useState('');
39
+ const curGroup = groupOf(groups, value ?? '');
40
+ const provider = pickedProvider !== '' && groups.some((g) => g.value === pickedProvider)
41
+ ? pickedProvider
42
+ : curGroup?.value ?? '';
43
+ // 值定到某模型上 ⇒ 临时选的厂商功成身退,回到按值反推
44
+ useEffect(() => {
45
+ if (value !== undefined && value !== '')
46
+ setPickedProvider('');
47
+ }, [value]);
48
+ if (variant === 'grouped') {
13
49
  return h(Picker, {
14
- options: flattenOptions(props.groups),
50
+ // 「默认模型」放最上面:空 label 的组,Picker 只渲染选项不渲染组头
51
+ groups: defaultOption === undefined
52
+ ? groups
53
+ : [{ value: '', label: '', options: [defaultOption] }, ...groups],
15
54
  value,
16
55
  defaultValue: props.defaultValue,
17
- placeholder: tt('modelModel'),
18
- degraded: props.degraded,
56
+ icon,
57
+ placeholder: props.placeholder ?? tt('modelModel'),
58
+ degraded,
19
59
  disabled: props.disabled,
20
60
  clearable: props.clearable,
21
- searchable: props.searchable ?? true,
61
+ searchable,
62
+ hint: props.hint,
22
63
  size: props.size,
23
64
  placement: props.placement,
24
65
  className: props.className,
25
- onChange: (v) => props.onChange?.(typeof v === 'string' ? v : v[0] ?? ''),
66
+ onChange: emitModel,
26
67
  });
27
68
  }
28
- const group = groupOf(props.groups, cur);
29
- const provider = group?.value ?? '';
69
+ // cascade:两个下拉联动 —— 供应商筛模型;换供应商清空模型
70
+ const group = groups.find((g) => g.value === provider);
71
+ const options = group === undefined ? [] : flattenOptions([group]);
30
72
  return h('div', { className: 'dshpc-picker__row' }, h(Picker, {
31
- options: props.groups.map((g) => ({ value: g.value, label: g.label })),
73
+ options: groups.map((g) => ({ value: g.value, label: g.label })),
32
74
  value: provider === '' ? undefined : provider,
33
75
  placeholder: tt('modelProvider'),
76
+ degraded,
34
77
  disabled: props.disabled,
35
- // 换供应商 ⇒ 清空已选模型(旧的模型不属于新供应商);参数不用,故不命名
36
- onChange: () => props.onChange?.(''),
78
+ searchable: false,
79
+ onChange: (v) => {
80
+ setPickedProvider(typeof v === 'string' ? v : v[0] ?? '');
81
+ props.onChange?.('');
82
+ },
37
83
  }), h(Picker, {
38
- options: group?.options ?? [],
84
+ options: defaultOption === undefined ? options : [defaultOption, ...options],
39
85
  value,
40
86
  defaultValue: props.defaultValue,
41
- placeholder: tt('modelModel'),
42
- degraded: props.degraded,
87
+ icon,
88
+ placeholder: props.placeholder ?? tt('modelModel'),
89
+ degraded,
43
90
  disabled: props.disabled === true || provider === '',
44
91
  clearable: props.clearable,
45
- searchable: props.searchable ?? true,
92
+ searchable,
93
+ hint: props.hint,
46
94
  size: props.size,
47
95
  placement: props.placement,
48
96
  className: props.className,
49
- onChange: (v) => props.onChange?.(typeof v === 'string' ? v : v[0] ?? ''),
97
+ onChange: emitModel,
50
98
  }));
51
99
  }
52
100
  //# sourceMappingURL=ModelPicker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModelPicker.js","sourceRoot":"","sources":["../../src/ui/ModelPicker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ModelPicker.js","sourceRoot":"","sources":["../../src/ui/ModelPicker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * 停靠面板(PanelDock)—— 可停靠的右侧分栏容器。
3
+ *
4
+ * 形态:**布局成员,不是浮层**。占宽度、把主区挤窄,因此必须由调用方放进自己的
5
+ * flex 根容器里;不能像 Modal 那样自挂 `document.body`(自挂只能遮盖、挤不窄)。
6
+ *
7
+ * 分工照成熟组件库的通行做法(Ant Design `Tabs` / `Drawer` 同一套):
8
+ * · **结构写在调用点** —— `<PanelDock dock={dock}><DockPanel id="files">…</DockPanel></PanelDock>`;
9
+ * · **显隐归状态** —— `dock.open('files')` / `dock.close('files')`,只传 id,不传内容;
10
+ * · **头部可控** —— `title` / `icon` / `extra` 三件套;要更自由就 `header` 整块替换,`header={null}` 表示不要头部;
11
+ * · **关闭钮可退让** —— `closable={false}` 不出;`closeButton="floating"` 浮在右上角,不占头部布局。
12
+ */
13
+ import { createElement as h, type ReactNode } from 'react';
14
+ import { type Translate } from '../utils/i18n.js';
15
+ import { type DockState, type OpenResult } from './panel-dock-logic.js';
16
+ /** 关闭钮位置:`auto` = 有头部就放头部行末、没头部就浮着。 */
17
+ export type DockCloseButton = 'auto' | 'header' | 'floating' | 'none';
18
+ /** 关闭来源:区分「用户点 ✕」与「代码关的」,拦截/清理时用得着。 */
19
+ export type DockCloseReason = 'button' | 'api';
20
+ export interface DockPanelProps {
21
+ /** 组名(寻址键);同名唯一。 */
22
+ id: string;
23
+ /** 标题;`header` 传了非 undefined 的值时它只用于无障碍名。 */
24
+ title?: ReactNode;
25
+ /** 标题前的图标位(可多个)。 */
26
+ icon?: ReactNode;
27
+ /** 标题**右侧**的任意内容(可以是按钮、标签、下拉、甚至是弹层触发器)。 */
28
+ extra?: ReactNode;
29
+ /**
30
+ * 整块替换头部:
31
+ * · 不传 / `undefined` ⇒ 内置头(`icon` + `title` + `extra`)
32
+ * · `null` ⇒ 不要头部(此时关闭钮默认浮在右上角)
33
+ * · 其他 ReactNode ⇒ 你的头部,库不加内边距/边框/背景
34
+ */
35
+ header?: ReactNode | null;
36
+ /** 是否显示关闭钮(默认 true)。 */
37
+ closable?: boolean;
38
+ /** 关闭钮位置(默认 `auto`)。 */
39
+ closeButton?: DockCloseButton;
40
+ /** 自定义关闭图标(默认 ✕)。 */
41
+ closeIcon?: ReactNode;
42
+ /** 首次打开时的宽度(px,默认 460)。 */
43
+ width?: number;
44
+ /** 可拖动的宽度下限(默认 320)。 */
45
+ minWidth?: number;
46
+ /** 可拖动的宽度上限;不传 = 只受视口与主区保底约束。 */
47
+ maxWidth?: number;
48
+ /** 无头部时的无障碍名(缺省退回 `title`,再退回 `id`)。 */
49
+ ariaLabel?: string;
50
+ children?: ReactNode;
51
+ }
52
+ /**
53
+ * 声明一个面板。**它自己不渲染任何东西**——由父级 `<PanelDock>` 读它的 props 后统一画。
54
+ * 因此必须作为 `<PanelDock>` 的**直接子元素**(可以条件渲染成 `null`)。
55
+ */
56
+ export declare function DockPanel(_props: DockPanelProps): null;
57
+ export interface PanelDockOptions {
58
+ /** 同时存在的栏数上限(默认 3)。 */
59
+ maxPanels?: number;
60
+ /** 新栏默认宽度(默认 460)。 */
61
+ defaultWidth?: number;
62
+ /** 新栏默认宽度下限(默认 320)。 */
63
+ minWidth?: number;
64
+ /** 宽度记忆前缀;传 `false` 关闭记忆(默认 `dshpc-dock`)。 */
65
+ storageKey?: string | false;
66
+ /** 新开一栏后触发(重复打开已存在的不触发)。 */
67
+ onOpen?: (event: {
68
+ id: string;
69
+ created: boolean;
70
+ }) => void;
71
+ /** 关闭**之前**触发;返回 `false` 可取消(未保存内容拦截就靠它)。 */
72
+ onBeforeClose?: (event: {
73
+ id: string;
74
+ reason: DockCloseReason;
75
+ }) => boolean | undefined;
76
+ /** 已经关掉之后触发。 */
77
+ onClose?: (event: {
78
+ id: string;
79
+ reason: DockCloseReason;
80
+ }) => void;
81
+ /** 拖宽松手后触发。 */
82
+ onResize?: (event: {
83
+ id: string;
84
+ width: number;
85
+ }) => void;
86
+ /** 到上限被拒时触发(库不弹提示、不抛异常)。 */
87
+ onLimitReached?: (event: {
88
+ id: string;
89
+ }) => void;
90
+ }
91
+ export interface PanelDockController {
92
+ open(id?: string): OpenResult;
93
+ close(id?: string, reason?: DockCloseReason): void;
94
+ toggle(id?: string): OpenResult;
95
+ isOpen(id?: string): boolean;
96
+ ids(): string[];
97
+ setWidth(id: string, width: number): void;
98
+ subscribe(listener: () => void): () => void;
99
+ getSnapshot(): DockState;
100
+ /** 归一化后的默认值(组件兜底用)。 */
101
+ defaults: {
102
+ maxPanels: number;
103
+ defaultWidth: number;
104
+ minWidth: number;
105
+ };
106
+ }
107
+ /**
108
+ * 造一个面板控制器。状态在它身上,组件用 `useSyncExternalStore` 订阅。
109
+ *
110
+ * 为什么状态不放在组件里:开门/关门常常发生在按钮 onClick、事件回调里(命令式),
111
+ * 而**内容与头部仍在调用点声明**——这正是 Tabs 那种「状态 + children」的分工。
112
+ */
113
+ export declare function createPanelDock(options?: PanelDockOptions): PanelDockController;
114
+ export interface PanelDockProps {
115
+ /** `createPanelDock()` 的返回值。 */
116
+ dock: PanelDockController;
117
+ /** 由 `<DockPanel>` 直接子元素组成。 */
118
+ children?: ReactNode;
119
+ /** 追加 class(只补布局,不覆盖皮肤)。 */
120
+ className?: string;
121
+ /** 拖宽时给主区留的最小宽度(px,默认 480)。 */
122
+ mainMinWidth?: number;
123
+ translate?: Translate;
124
+ }
125
+ /** 停靠栏本体:只渲染「开着的」面板,结构取自对应的 `<DockPanel>`。 */
126
+ export declare function PanelDock(props: PanelDockProps): ReturnType<typeof h>;
127
+ //# sourceMappingURL=PanelDock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PanelDock.d.ts","sourceRoot":"","sources":["../../src/ui/PanelDock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAY,aAAa,IAAI,CAAC,EAA2D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAE7H,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEpD,OAAO,EASL,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,uBAAuB,CAAA;AA0B9B,uCAAuC;AACvC,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAA;AAErE,uCAAuC;AACvC,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,KAAK,CAAA;AAE9C,MAAM,WAAW,cAAc;IAC7B,oBAAoB;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,6CAA6C;IAC7C,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,oBAAoB;IACpB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACzB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,wBAAwB;IACxB,WAAW,CAAC,EAAE,eAAe,CAAA;IAC7B,qBAAqB;IACrB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAEtD;AAED,MAAM,WAAW,gBAAgB;IAC/B,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sBAAsB;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IAC3B,4BAA4B;IAC5B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;IAC1D,6CAA6C;IAC7C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,eAAe,CAAA;KAAE,KAAK,OAAO,GAAG,SAAS,CAAA;IACvF,gBAAgB;IAChB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,eAAe,CAAA;KAAE,KAAK,IAAI,CAAA;IAClE,eAAe;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACzD,4BAA4B;IAC5B,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;CACjD;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;IAC7B,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI,CAAA;IAClD,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;IAC/B,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAC5B,GAAG,IAAI,MAAM,EAAE,CAAA;IACf,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACzC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;IAC3C,WAAW,IAAI,SAAS,CAAA;IACxB,uBAAuB;IACvB,QAAQ,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CACxE;AAuBD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,mBAAmB,CAqEnF;AAED,MAAM,WAAW,cAAc;IAC7B,gCAAgC;IAChC,IAAI,EAAE,mBAAmB,CAAA;IACzB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAWD,8CAA8C;AAC9C,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CA+JrE"}