dsh-plugin-core 0.2.14 → 0.4.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 (432) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +52 -83
  3. package/dist/design/tokens-css.d.ts +1 -1
  4. package/dist/design/tokens-css.d.ts.map +1 -1
  5. package/dist/design/tokens-css.generated.d.ts +2 -0
  6. package/dist/design/tokens-css.generated.d.ts.map +1 -0
  7. package/dist/design/tokens-css.generated.js +4 -0
  8. package/dist/design/tokens-css.generated.js.map +1 -0
  9. package/dist/design/tokens-css.js +1 -252
  10. package/dist/design/tokens-css.js.map +1 -1
  11. package/dist/explorer/FileBrowser.d.ts +41 -0
  12. package/dist/explorer/FileBrowser.d.ts.map +1 -0
  13. package/dist/explorer/FileBrowser.js +659 -0
  14. package/dist/explorer/FileBrowser.js.map +1 -0
  15. package/dist/explorer/explorer-css.d.ts +1 -1
  16. package/dist/explorer/explorer-css.d.ts.map +1 -1
  17. package/dist/explorer/explorer-css.generated.d.ts +2 -0
  18. package/dist/explorer/explorer-css.generated.d.ts.map +1 -0
  19. package/dist/explorer/explorer-css.generated.js +4 -0
  20. package/dist/explorer/explorer-css.generated.js.map +1 -0
  21. package/dist/explorer/explorer-css.js +1 -31
  22. package/dist/explorer/explorer-css.js.map +1 -1
  23. package/dist/explorer/index.d.ts +4 -2
  24. package/dist/explorer/index.d.ts.map +1 -1
  25. package/dist/explorer/index.js +4 -2
  26. package/dist/explorer/index.js.map +1 -1
  27. package/dist/explorer/open.d.ts +103 -0
  28. package/dist/explorer/open.d.ts.map +1 -0
  29. package/dist/explorer/open.js +282 -0
  30. package/dist/explorer/open.js.map +1 -0
  31. package/dist/explorer/preview/BytesPreview.d.ts +13 -0
  32. package/dist/explorer/preview/BytesPreview.d.ts.map +1 -0
  33. package/dist/explorer/preview/BytesPreview.js +56 -0
  34. package/dist/explorer/preview/BytesPreview.js.map +1 -0
  35. package/dist/explorer/preview/HtmlPreview.d.ts +18 -0
  36. package/dist/explorer/preview/HtmlPreview.d.ts.map +1 -0
  37. package/dist/explorer/preview/HtmlPreview.js +112 -0
  38. package/dist/explorer/preview/HtmlPreview.js.map +1 -0
  39. package/dist/explorer/preview/OfficePreview.d.ts +11 -0
  40. package/dist/explorer/preview/OfficePreview.d.ts.map +1 -0
  41. package/dist/explorer/preview/OfficePreview.js +53 -0
  42. package/dist/explorer/preview/OfficePreview.js.map +1 -0
  43. package/dist/explorer/preview/TextPreview.d.ts +17 -0
  44. package/dist/explorer/preview/TextPreview.d.ts.map +1 -0
  45. package/dist/explorer/preview/TextPreview.js +95 -0
  46. package/dist/explorer/preview/TextPreview.js.map +1 -0
  47. package/dist/explorer/preview/index.d.ts +10 -3
  48. package/dist/explorer/preview/index.d.ts.map +1 -1
  49. package/dist/explorer/preview/index.js +52 -55
  50. package/dist/explorer/preview/index.js.map +1 -1
  51. package/dist/explorer/preview/md-labels.d.ts +3 -0
  52. package/dist/explorer/preview/md-labels.d.ts.map +1 -0
  53. package/dist/explorer/preview/md-labels.js +12 -0
  54. package/dist/explorer/preview/md-labels.js.map +1 -0
  55. package/dist/explorer/types.d.ts +186 -4
  56. package/dist/explorer/types.d.ts.map +1 -1
  57. package/dist/explorer/types.js +401 -14
  58. package/dist/explorer/types.js.map +1 -1
  59. package/dist/host/index.d.ts +66 -0
  60. package/dist/host/index.d.ts.map +1 -0
  61. package/dist/host/index.js +60 -0
  62. package/dist/host/index.js.map +1 -0
  63. package/dist/session/SessionViewModal.d.ts +42 -0
  64. package/dist/session/SessionViewModal.d.ts.map +1 -0
  65. package/dist/session/SessionViewModal.js +997 -0
  66. package/dist/session/SessionViewModal.js.map +1 -0
  67. package/dist/session/changes.d.ts +73 -0
  68. package/dist/session/changes.d.ts.map +1 -0
  69. package/dist/session/changes.js +134 -0
  70. package/dist/session/changes.js.map +1 -0
  71. package/dist/session/faces.d.ts +198 -0
  72. package/dist/session/faces.d.ts.map +1 -0
  73. package/dist/session/faces.js +17 -0
  74. package/dist/session/faces.js.map +1 -0
  75. package/dist/session/index.d.ts +5 -23
  76. package/dist/session/index.d.ts.map +1 -1
  77. package/dist/session/index.js +25 -70
  78. package/dist/session/index.js.map +1 -1
  79. package/dist/session/mirror/ChangedFileDiff.d.ts +22 -0
  80. package/dist/session/mirror/ChangedFileDiff.d.ts.map +1 -0
  81. package/dist/session/mirror/ChangedFileDiff.js +157 -0
  82. package/dist/session/mirror/ChangedFileDiff.js.map +1 -0
  83. package/dist/session/mirror/ChangedFilesCard.d.ts +18 -0
  84. package/dist/session/mirror/ChangedFilesCard.d.ts.map +1 -0
  85. package/dist/session/mirror/ChangedFilesCard.js +158 -0
  86. package/dist/session/mirror/ChangedFilesCard.js.map +1 -0
  87. package/dist/session/mirror/ChatGroupSeat.d.ts +24 -0
  88. package/dist/session/mirror/ChatGroupSeat.d.ts.map +1 -0
  89. package/dist/session/mirror/ChatGroupSeat.js +134 -0
  90. package/dist/session/mirror/ChatGroupSeat.js.map +1 -0
  91. package/dist/session/mirror/ChatNodeSeat.d.ts +43 -0
  92. package/dist/session/mirror/ChatNodeSeat.d.ts.map +1 -0
  93. package/dist/session/mirror/ChatNodeSeat.js +133 -0
  94. package/dist/session/mirror/ChatNodeSeat.js.map +1 -0
  95. package/dist/session/mirror/ChatView.d.ts +47 -0
  96. package/dist/session/mirror/ChatView.d.ts.map +1 -0
  97. package/dist/session/mirror/ChatView.js +127 -0
  98. package/dist/session/mirror/ChatView.js.map +1 -0
  99. package/dist/session/mirror/CommandCard.d.ts +20 -0
  100. package/dist/session/mirror/CommandCard.d.ts.map +1 -0
  101. package/dist/session/mirror/CommandCard.js +69 -0
  102. package/dist/session/mirror/CommandCard.js.map +1 -0
  103. package/dist/session/mirror/Deliverables.d.ts +24 -0
  104. package/dist/session/mirror/Deliverables.d.ts.map +1 -0
  105. package/dist/session/mirror/Deliverables.js +134 -0
  106. package/dist/session/mirror/Deliverables.js.map +1 -0
  107. package/dist/session/mirror/GenericCommandCard.d.ts +25 -0
  108. package/dist/session/mirror/GenericCommandCard.d.ts.map +1 -0
  109. package/dist/session/mirror/GenericCommandCard.js +567 -0
  110. package/dist/session/mirror/GenericCommandCard.js.map +1 -0
  111. package/dist/session/mirror/MessageIconActions.d.ts +16 -0
  112. package/dist/session/mirror/MessageIconActions.d.ts.map +1 -0
  113. package/dist/session/mirror/MessageIconActions.js +71 -0
  114. package/dist/session/mirror/MessageIconActions.js.map +1 -0
  115. package/dist/session/mirror/MessageItem.d.ts +66 -0
  116. package/dist/session/mirror/MessageItem.d.ts.map +1 -0
  117. package/dist/session/mirror/MessageItem.js +135 -0
  118. package/dist/session/mirror/MessageItem.js.map +1 -0
  119. package/dist/session/mirror/ReasoningRow.d.ts +11 -0
  120. package/dist/session/mirror/ReasoningRow.d.ts.map +1 -0
  121. package/dist/session/mirror/ReasoningRow.js +49 -0
  122. package/dist/session/mirror/ReasoningRow.js.map +1 -0
  123. package/dist/session/mirror/StatDialog.d.ts +20 -0
  124. package/dist/session/mirror/StatDialog.d.ts.map +1 -0
  125. package/dist/session/mirror/StatDialog.js +36 -0
  126. package/dist/session/mirror/StatDialog.js.map +1 -0
  127. package/dist/session/mirror/TurnProcessNodeView.d.ts +10 -0
  128. package/dist/session/mirror/TurnProcessNodeView.d.ts.map +1 -0
  129. package/dist/session/mirror/TurnProcessNodeView.js +68 -0
  130. package/dist/session/mirror/TurnProcessNodeView.js.map +1 -0
  131. package/dist/session/mirror/TurnTailNodeView.d.ts +32 -0
  132. package/dist/session/mirror/TurnTailNodeView.d.ts.map +1 -0
  133. package/dist/session/mirror/TurnTailNodeView.js +48 -0
  134. package/dist/session/mirror/TurnTailNodeView.js.map +1 -0
  135. package/dist/session/mirror/TurnTriggerNodeView.d.ts +14 -0
  136. package/dist/session/mirror/TurnTriggerNodeView.d.ts.map +1 -0
  137. package/dist/session/mirror/TurnTriggerNodeView.js +87 -0
  138. package/dist/session/mirror/TurnTriggerNodeView.js.map +1 -0
  139. package/dist/session/mirror/TurnUsagePanel.d.ts +21 -0
  140. package/dist/session/mirror/TurnUsagePanel.d.ts.map +1 -0
  141. package/dist/session/mirror/TurnUsagePanel.js +41 -0
  142. package/dist/session/mirror/TurnUsagePanel.js.map +1 -0
  143. package/dist/session/mirror/message-chrome.d.ts +33 -0
  144. package/dist/session/mirror/message-chrome.d.ts.map +1 -0
  145. package/dist/session/mirror/message-chrome.js +158 -0
  146. package/dist/session/mirror/message-chrome.js.map +1 -0
  147. package/dist/session/mirror/process-groups.d.ts +56 -0
  148. package/dist/session/mirror/process-groups.d.ts.map +1 -0
  149. package/dist/session/mirror/process-groups.js +202 -0
  150. package/dist/session/mirror/process-groups.js.map +1 -0
  151. package/dist/session/official-classes.d.ts +28 -0
  152. package/dist/session/official-classes.d.ts.map +1 -0
  153. package/dist/session/official-classes.js +146 -0
  154. package/dist/session/official-classes.js.map +1 -0
  155. package/dist/session/open-session-view.d.ts +17 -0
  156. package/dist/session/open-session-view.d.ts.map +1 -0
  157. package/dist/session/open-session-view.js +136 -0
  158. package/dist/session/open-session-view.js.map +1 -0
  159. package/dist/session/session-css.d.ts +1 -1
  160. package/dist/session/session-css.d.ts.map +1 -1
  161. package/dist/session/session-css.generated.d.ts +2 -0
  162. package/dist/session/session-css.generated.d.ts.map +1 -0
  163. package/dist/session/session-css.generated.js +4 -0
  164. package/dist/session/session-css.generated.js.map +1 -0
  165. package/dist/session/session-css.js +1 -17
  166. package/dist/session/session-css.js.map +1 -1
  167. package/dist/ui/AlertModal.d.ts +28 -0
  168. package/dist/ui/AlertModal.d.ts.map +1 -0
  169. package/dist/ui/AlertModal.js +29 -0
  170. package/dist/ui/AlertModal.js.map +1 -0
  171. package/dist/ui/Button.d.ts.map +1 -1
  172. package/dist/ui/Button.js +14 -1
  173. package/dist/ui/Button.js.map +1 -1
  174. package/dist/ui/Card.d.ts +4 -2
  175. package/dist/ui/Card.d.ts.map +1 -1
  176. package/dist/ui/Card.js +12 -6
  177. package/dist/ui/Card.js.map +1 -1
  178. package/dist/ui/Chip.d.ts +9 -1
  179. package/dist/ui/Chip.d.ts.map +1 -1
  180. package/dist/ui/Chip.js +8 -2
  181. package/dist/ui/Chip.js.map +1 -1
  182. package/dist/ui/CodeViewer.d.ts +36 -0
  183. package/dist/ui/CodeViewer.d.ts.map +1 -0
  184. package/dist/ui/CodeViewer.js +90 -0
  185. package/dist/ui/CodeViewer.js.map +1 -0
  186. package/dist/ui/ConfirmModal.d.ts +30 -0
  187. package/dist/ui/ConfirmModal.d.ts.map +1 -0
  188. package/dist/ui/ConfirmModal.js +23 -0
  189. package/dist/ui/ConfirmModal.js.map +1 -0
  190. package/dist/ui/DateTimePicker.d.ts +45 -0
  191. package/dist/ui/DateTimePicker.d.ts.map +1 -0
  192. package/dist/ui/DateTimePicker.js +447 -0
  193. package/dist/ui/DateTimePicker.js.map +1 -0
  194. package/dist/ui/Field.d.ts +11 -2
  195. package/dist/ui/Field.d.ts.map +1 -1
  196. package/dist/ui/Field.js +15 -5
  197. package/dist/ui/Field.js.map +1 -1
  198. package/dist/ui/MarqueeText.d.ts.map +1 -1
  199. package/dist/ui/MarqueeText.js +3 -1
  200. package/dist/ui/MarqueeText.js.map +1 -1
  201. package/dist/ui/Modal.d.ts +25 -3
  202. package/dist/ui/Modal.d.ts.map +1 -1
  203. package/dist/ui/Modal.js +41 -7
  204. package/dist/ui/Modal.js.map +1 -1
  205. package/dist/ui/ModelPicker.d.ts +25 -12
  206. package/dist/ui/ModelPicker.d.ts.map +1 -1
  207. package/dist/ui/ModelPicker.js +67 -19
  208. package/dist/ui/ModelPicker.js.map +1 -1
  209. package/dist/ui/PanelDock.d.ts +127 -0
  210. package/dist/ui/PanelDock.d.ts.map +1 -0
  211. package/dist/ui/PanelDock.js +297 -0
  212. package/dist/ui/PanelDock.js.map +1 -0
  213. package/dist/ui/Picker.d.ts +8 -2
  214. package/dist/ui/Picker.d.ts.map +1 -1
  215. package/dist/ui/Picker.js +86 -18
  216. package/dist/ui/Picker.js.map +1 -1
  217. package/dist/ui/SectionHead.d.ts +3 -3
  218. package/dist/ui/SectionHead.d.ts.map +1 -1
  219. package/dist/ui/SectionHead.js +4 -4
  220. package/dist/ui/SectionHead.js.map +1 -1
  221. package/dist/ui/Segmented.d.ts +4 -0
  222. package/dist/ui/Segmented.d.ts.map +1 -1
  223. package/dist/ui/Segmented.js +88 -31
  224. package/dist/ui/Segmented.js.map +1 -1
  225. package/dist/ui/Textarea.d.ts +2 -0
  226. package/dist/ui/Textarea.d.ts.map +1 -1
  227. package/dist/ui/Textarea.js +6 -1
  228. package/dist/ui/Textarea.js.map +1 -1
  229. package/dist/ui/Toast.d.ts +41 -8
  230. package/dist/ui/Toast.d.ts.map +1 -1
  231. package/dist/ui/Toast.js +216 -28
  232. package/dist/ui/Toast.js.map +1 -1
  233. package/dist/ui/WorkspacePicker.d.ts +15 -28
  234. package/dist/ui/WorkspacePicker.d.ts.map +1 -1
  235. package/dist/ui/WorkspacePicker.js +18 -27
  236. package/dist/ui/WorkspacePicker.js.map +1 -1
  237. package/dist/ui/card-css.d.ts +1 -1
  238. package/dist/ui/card-css.d.ts.map +1 -1
  239. package/dist/ui/card-css.generated.d.ts +2 -0
  240. package/dist/ui/card-css.generated.d.ts.map +1 -0
  241. package/dist/ui/card-css.generated.js +4 -0
  242. package/dist/ui/card-css.generated.js.map +1 -0
  243. package/dist/ui/card-css.js +1 -35
  244. package/dist/ui/card-css.js.map +1 -1
  245. package/dist/ui/chip-css.d.ts +1 -1
  246. package/dist/ui/chip-css.d.ts.map +1 -1
  247. package/dist/ui/chip-css.generated.d.ts +2 -0
  248. package/dist/ui/chip-css.generated.d.ts.map +1 -0
  249. package/dist/ui/chip-css.generated.js +4 -0
  250. package/dist/ui/chip-css.generated.js.map +1 -0
  251. package/dist/ui/chip-css.js +1 -17
  252. package/dist/ui/chip-css.js.map +1 -1
  253. package/dist/ui/code-viewer-css.d.ts +2 -0
  254. package/dist/ui/code-viewer-css.d.ts.map +1 -0
  255. package/dist/ui/code-viewer-css.generated.d.ts +2 -0
  256. package/dist/ui/code-viewer-css.generated.d.ts.map +1 -0
  257. package/dist/ui/code-viewer-css.generated.js +4 -0
  258. package/dist/ui/code-viewer-css.generated.js.map +1 -0
  259. package/dist/ui/code-viewer-css.js +3 -0
  260. package/dist/ui/code-viewer-css.js.map +1 -0
  261. package/dist/ui/code-viewer-lang.d.ts +15 -0
  262. package/dist/ui/code-viewer-lang.d.ts.map +1 -0
  263. package/dist/ui/code-viewer-lang.js +190 -0
  264. package/dist/ui/code-viewer-lang.js.map +1 -0
  265. package/dist/ui/code-viewer-theme.d.ts +5 -0
  266. package/dist/ui/code-viewer-theme.d.ts.map +1 -0
  267. package/dist/ui/code-viewer-theme.js +138 -0
  268. package/dist/ui/code-viewer-theme.js.map +1 -0
  269. package/dist/ui/controls/back-to-top-css.generated.d.ts +2 -0
  270. package/dist/ui/controls/back-to-top-css.generated.d.ts.map +1 -0
  271. package/dist/ui/controls/back-to-top-css.generated.js +4 -0
  272. package/dist/ui/controls/back-to-top-css.generated.js.map +1 -0
  273. package/dist/ui/controls/button-css.generated.d.ts +2 -0
  274. package/dist/ui/controls/button-css.generated.d.ts.map +1 -0
  275. package/dist/ui/controls/button-css.generated.js +4 -0
  276. package/dist/ui/controls/button-css.generated.js.map +1 -0
  277. package/dist/ui/controls/datetime-css.generated.d.ts +2 -0
  278. package/dist/ui/controls/datetime-css.generated.d.ts.map +1 -0
  279. package/dist/ui/controls/datetime-css.generated.js +4 -0
  280. package/dist/ui/controls/datetime-css.generated.js.map +1 -0
  281. package/dist/ui/controls/field-css.generated.d.ts +2 -0
  282. package/dist/ui/controls/field-css.generated.d.ts.map +1 -0
  283. package/dist/ui/controls/field-css.generated.js +4 -0
  284. package/dist/ui/controls/field-css.generated.js.map +1 -0
  285. package/dist/ui/controls/hint-css.generated.d.ts +2 -0
  286. package/dist/ui/controls/hint-css.generated.d.ts.map +1 -0
  287. package/dist/ui/controls/hint-css.generated.js +4 -0
  288. package/dist/ui/controls/hint-css.generated.js.map +1 -0
  289. package/dist/ui/controls/loading-css.generated.d.ts +2 -0
  290. package/dist/ui/controls/loading-css.generated.d.ts.map +1 -0
  291. package/dist/ui/controls/loading-css.generated.js +4 -0
  292. package/dist/ui/controls/loading-css.generated.js.map +1 -0
  293. package/dist/ui/controls/segmented-css.generated.d.ts +2 -0
  294. package/dist/ui/controls/segmented-css.generated.d.ts.map +1 -0
  295. package/dist/ui/controls/segmented-css.generated.js +4 -0
  296. package/dist/ui/controls/segmented-css.generated.js.map +1 -0
  297. package/dist/ui/controls-css.d.ts +7 -8
  298. package/dist/ui/controls-css.d.ts.map +1 -1
  299. package/dist/ui/controls-css.js +13 -11
  300. package/dist/ui/controls-css.js.map +1 -1
  301. package/dist/ui/css.d.ts +5 -0
  302. package/dist/ui/css.d.ts.map +1 -1
  303. package/dist/ui/css.js +13 -4
  304. package/dist/ui/css.js.map +1 -1
  305. package/dist/ui/datetime-logic.d.ts +100 -0
  306. package/dist/ui/datetime-logic.d.ts.map +1 -0
  307. package/dist/ui/datetime-logic.js +193 -0
  308. package/dist/ui/datetime-logic.js.map +1 -0
  309. package/dist/ui/feedback-css.d.ts +1 -1
  310. package/dist/ui/feedback-css.d.ts.map +1 -1
  311. package/dist/ui/feedback-css.generated.d.ts +2 -0
  312. package/dist/ui/feedback-css.generated.d.ts.map +1 -0
  313. package/dist/ui/feedback-css.generated.js +4 -0
  314. package/dist/ui/feedback-css.generated.js.map +1 -0
  315. package/dist/ui/feedback-css.js +1 -53
  316. package/dist/ui/feedback-css.js.map +1 -1
  317. package/dist/ui/host-data.d.ts +103 -0
  318. package/dist/ui/host-data.d.ts.map +1 -0
  319. package/dist/ui/host-data.js +106 -0
  320. package/dist/ui/host-data.js.map +1 -0
  321. package/dist/ui/host-toast.d.ts +23 -0
  322. package/dist/ui/host-toast.d.ts.map +1 -0
  323. package/dist/ui/host-toast.js +34 -0
  324. package/dist/ui/host-toast.js.map +1 -0
  325. package/dist/ui/index.d.ts +12 -6
  326. package/dist/ui/index.d.ts.map +1 -1
  327. package/dist/ui/index.js +10 -4
  328. package/dist/ui/index.js.map +1 -1
  329. package/dist/ui/marquee-css.d.ts +2 -0
  330. package/dist/ui/marquee-css.d.ts.map +1 -0
  331. package/dist/ui/marquee-css.generated.d.ts +2 -0
  332. package/dist/ui/marquee-css.generated.d.ts.map +1 -0
  333. package/dist/ui/marquee-css.generated.js +4 -0
  334. package/dist/ui/marquee-css.generated.js.map +1 -0
  335. package/dist/ui/marquee-css.js +4 -0
  336. package/dist/ui/marquee-css.js.map +1 -0
  337. package/dist/ui/modal-host.d.ts +30 -0
  338. package/dist/ui/modal-host.d.ts.map +1 -0
  339. package/dist/ui/modal-host.js +101 -0
  340. package/dist/ui/modal-host.js.map +1 -0
  341. package/dist/ui/official.d.ts.map +1 -1
  342. package/dist/ui/official.js +45 -1
  343. package/dist/ui/official.js.map +1 -1
  344. package/dist/ui/panel-dock-css.d.ts +2 -0
  345. package/dist/ui/panel-dock-css.d.ts.map +1 -0
  346. package/dist/ui/panel-dock-css.generated.d.ts +2 -0
  347. package/dist/ui/panel-dock-css.generated.d.ts.map +1 -0
  348. package/dist/ui/panel-dock-css.generated.js +4 -0
  349. package/dist/ui/panel-dock-css.generated.js.map +1 -0
  350. package/dist/ui/panel-dock-css.js +4 -0
  351. package/dist/ui/panel-dock-css.js.map +1 -0
  352. package/dist/ui/panel-dock-logic.d.ts +50 -0
  353. package/dist/ui/panel-dock-logic.d.ts.map +1 -0
  354. package/dist/ui/panel-dock-logic.js +64 -0
  355. package/dist/ui/panel-dock-logic.js.map +1 -0
  356. package/dist/ui/picker-css.d.ts +1 -1
  357. package/dist/ui/picker-css.d.ts.map +1 -1
  358. package/dist/ui/picker-css.generated.d.ts +2 -0
  359. package/dist/ui/picker-css.generated.d.ts.map +1 -0
  360. package/dist/ui/picker-css.generated.js +4 -0
  361. package/dist/ui/picker-css.generated.js.map +1 -0
  362. package/dist/ui/picker-css.js +1 -48
  363. package/dist/ui/picker-css.js.map +1 -1
  364. package/dist/ui/picker-icons.d.ts +12 -0
  365. package/dist/ui/picker-icons.d.ts.map +1 -0
  366. package/dist/ui/picker-icons.js +29 -0
  367. package/dist/ui/picker-icons.js.map +1 -0
  368. package/dist/ui/picker-logic.d.ts +4 -1
  369. package/dist/ui/picker-logic.d.ts.map +1 -1
  370. package/dist/ui/picker-logic.js +1 -2
  371. package/dist/ui/picker-logic.js.map +1 -1
  372. package/dist/ui/resizer.d.ts +3 -1
  373. package/dist/ui/resizer.d.ts.map +1 -1
  374. package/dist/ui/resizer.js +1 -1
  375. package/dist/ui/resizer.js.map +1 -1
  376. package/dist/ui/toast-host.d.ts +24 -0
  377. package/dist/ui/toast-host.d.ts.map +1 -0
  378. package/dist/ui/toast-host.js +20 -0
  379. package/dist/ui/toast-host.js.map +1 -0
  380. package/dist/utils/date.d.ts +8 -0
  381. package/dist/utils/date.d.ts.map +1 -1
  382. package/dist/utils/date.js +16 -0
  383. package/dist/utils/date.js.map +1 -1
  384. package/dist/utils/i18n.d.ts +1 -1
  385. package/dist/utils/i18n.d.ts.map +1 -1
  386. package/dist/utils/i18n.js +437 -18
  387. package/dist/utils/i18n.js.map +1 -1
  388. package/dist/utils/index.d.ts +1 -1
  389. package/dist/utils/index.d.ts.map +1 -1
  390. package/dist/utils/index.js +1 -1
  391. package/dist/utils/index.js.map +1 -1
  392. package/dist/utils/path.d.ts.map +1 -1
  393. package/dist/utils/path.js +1 -0
  394. package/dist/utils/path.js.map +1 -1
  395. package/docs/README.md +12 -5
  396. package/docs/design/architecture.md +38 -8
  397. package/docs/design/copywriting.md +95 -0
  398. package/docs/design/doc-format.md +80 -0
  399. package/docs/design/doc-format.ts +39 -0
  400. package/docs/design/external/dsh-host.md +150 -1
  401. package/docs/design/features.md +4 -17
  402. package/docs/design/methods.md +13 -34
  403. package/docs/design/structure.md +25 -22
  404. package/docs/design/style.md +24 -50
  405. package/docs/help/design.doc.ts +112 -0
  406. package/docs/help/design.md +88 -0
  407. package/docs/help/explorer.doc.ts +136 -0
  408. package/docs/help/explorer.md +68 -0
  409. package/docs/help/index.doc.ts +79 -0
  410. package/docs/help/index.md +28 -0
  411. package/docs/help/integration.doc.ts +114 -0
  412. package/docs/help/integration.md +127 -0
  413. package/docs/help/methods.md +58 -0
  414. package/docs/help/session.doc.ts +154 -0
  415. package/docs/help/session.md +91 -0
  416. package/docs/help/style.md +80 -0
  417. package/docs/help/ui.doc.ts +404 -0
  418. package/docs/help/ui.md +342 -0
  419. package/docs/help/utils.doc.ts +133 -0
  420. package/docs/help/utils.md +96 -0
  421. package/docs/requirements.md +33 -12
  422. package/package.json +44 -3
  423. package/dist/ui/ErrorBoundary.d.ts +0 -22
  424. package/dist/ui/ErrorBoundary.d.ts.map +0 -1
  425. package/dist/ui/ErrorBoundary.js +0 -30
  426. package/dist/ui/ErrorBoundary.js.map +0 -1
  427. package/docs/design/features/design.md +0 -55
  428. package/docs/design/features/explorer.md +0 -73
  429. package/docs/design/features/session.md +0 -70
  430. package/docs/design/features/ui.md +0 -225
  431. package/docs/design/features/utils.md +0 -64
  432. package/docs/examples/integration.md +0 -103
@@ -21,6 +21,9 @@ export * from '@deepseek-ai/dsh-client-ui-primitives';
21
21
  /** 官方命名空间:给运行时兜底 / 审计用;业务代码优先用上面的具名导出。 */
22
22
  export { Official };
23
23
  const warned = new Set();
24
+ // biome 的 noDynamicNamespaceImportAccess 不许直接 `Official[name]`:
25
+ // 先把命名空间收进普通 Record 再按名取(语义不变,避免动态访问命名空间)。
26
+ const officialRegistry = Official;
24
27
  /**
25
28
  * 运行时取一个官方导出;缺失(宿主升级改名 / 老宿主没有)时**一次性**告警并回落到 `fallback`,
26
29
  * 不静默白屏。仅用于「官方可能漂移」的边角件;稳定常用件直接用具名导出即可。
@@ -29,7 +32,7 @@ const warned = new Set();
29
32
  * @param fallback - 缺失时的兜底(通常是保留的自绘实现)。
30
33
  */
31
34
  export function pickOfficial(name, fallback) {
32
- const value = Official[name];
35
+ const value = officialRegistry[name];
33
36
  if (value === undefined) {
34
37
  if (!warned.has(name)) {
35
38
  warned.add(name);
@@ -39,4 +42,45 @@ export function pickOfficial(name, fallback) {
39
42
  }
40
43
  return value;
41
44
  }
45
+ // ── 宿主样式命令式弹窗:渲染逻辑住本文件(唯一 import 平台模块处),运行时注册给 modal-host ──
46
+ // 默认命令(core 皮肤)在 ui 入口自绘小确认框家族;宿主皮肤必须经官方 Modal,
47
+ // 故这里实现后通过 registerHostDialog 注入,confirmModal/alertModal 传 skin:"host" 即调用,保持 ui 入口零官方依赖。
48
+ import { createElement as h } from 'react';
49
+ import { createRoot } from 'react-dom/client';
50
+ import { Button } from './Button.js';
51
+ import { t } from '../utils/i18n.js';
52
+ import { registerHostDialog } from './modal-host.js';
53
+ function mountHostModal(render) {
54
+ if (typeof document === 'undefined')
55
+ return;
56
+ const container = document.createElement('div');
57
+ document.body.appendChild(container);
58
+ const root = createRoot(container);
59
+ const close = () => {
60
+ root.unmount();
61
+ container.remove();
62
+ };
63
+ root.render(render(close));
64
+ }
65
+ const hostConfirm = (opts) => new Promise((resolve) => {
66
+ mountHostModal((close) => h(Official.Modal, {
67
+ open: true,
68
+ onClose: () => { close(); resolve(false); },
69
+ title: opts.title ?? '',
70
+ closeLabel: t('modalClose'),
71
+ description: opts.description,
72
+ footer: h('div', { style: { display: 'flex', justifyContent: 'flex-end', gap: '8px' } }, h(Button, { variant: 'outline', onClick: () => { close(); resolve(false); } }, opts.cancelText ?? t('cancel')), h(Button, { variant: opts.danger === true ? 'danger' : 'primary', onClick: () => { close(); resolve(true); } }, opts.confirmText ?? t('confirm'))),
73
+ }));
74
+ });
75
+ const hostAlert = (opts) => new Promise((resolve) => {
76
+ mountHostModal((close) => h(Official.Modal, {
77
+ open: true,
78
+ onClose: () => { close(); resolve(); },
79
+ title: opts.title ?? '',
80
+ closeLabel: t('modalClose'),
81
+ description: opts.description,
82
+ footer: h('div', { style: { display: 'flex', justifyContent: 'flex-end' } }, h(Button, { variant: 'primary', onClick: () => { close(); resolve(); } }, opts.confirmText ?? t('dialogOk'))),
83
+ }));
84
+ });
85
+ registerHostDialog({ confirm: hostConfirm, alert: hostAlert });
42
86
  //# sourceMappingURL=official.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"official.js","sourceRoot":"","sources":["../../src/ui/official.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,QAAQ,MAAM,uCAAuC,CAAA;AAEjE,cAAc,uCAAuC,CAAA;AAErD,0CAA0C;AAC1C,OAAO,EAAE,QAAQ,EAAE,CAAA;AAEnB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAA;AAEhC;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAO,EACP,QAA8B;IAE9B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAc,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,IAAc,CAAC,CAAA;YAC1B,OAAO,CAAC,IAAI,CAAC,4CAA4C,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QACtF,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"official.js","sourceRoot":"","sources":["../../src/ui/official.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,QAAQ,MAAM,uCAAuC,CAAA;AAEjE,cAAc,uCAAuC,CAAA;AAErD,0CAA0C;AAC1C,OAAO,EAAE,QAAQ,EAAE,CAAA;AAEnB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAA;AAEhC,gEAAgE;AAChE,2CAA2C;AAC3C,MAAM,gBAAgB,GAA4B,QAAQ,CAAA;AAE1D;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAO,EACP,QAA8B;IAE9B,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAc,CAAqC,CAAA;IAClF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAc,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,IAAc,CAAC,CAAA;YAC1B,OAAO,CAAC,IAAI,CAAC,4CAA4C,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QACtF,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,8DAA8D;AAC9D,gDAAgD;AAChD,0FAA0F;AAE1F,OAAO,EAAE,aAAa,IAAI,CAAC,EAAkB,MAAM,OAAO,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAA;AACpC,OAAO,EAAE,kBAAkB,EAA4C,MAAM,iBAAiB,CAAA;AAE9F,SAAS,cAAc,CAAC,MAAwC;IAC9D,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAM;IAC3C,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAC/C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;IACpC,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;IAClC,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,CAAC,OAAO,EAAE,CAAA;QACd,SAAS,CAAC,MAAM,EAAE,CAAA;IACpB,CAAC,CAAA;IACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AAC5B,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,IAAqB,EAAoB,EAAE,CAC9D,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;IAC/B,cAAc,CAAC,CAAC,KAAK,EAAE,EAAE,CACvB,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE;QAChB,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC;QAC1C,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;QACvB,UAAU,EAAE,CAAC,CAAC,YAAY,CAAC;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,MAAM,EAAE,CAAC,CACP,KAAK,EACL,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EACtE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAC7G,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CACjJ;KACF,CAAC,CACH,CAAA;AACH,CAAC,CAAC,CAAA;AAEJ,MAAM,SAAS,GAAG,CAAC,IAAmB,EAAiB,EAAE,CACvD,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;IAC5B,cAAc,CAAC,CAAC,KAAK,EAAE,EAAE,CACvB,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE;QAChB,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA,CAAC,CAAC;QACrC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;QACvB,UAAU,EAAE,CAAC,CAAC,YAAY,CAAC;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,MAAM,EAAE,CAAC,CACP,KAAK,EACL,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,EAC1D,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAC5G;KACF,CAAC,CACH,CAAA;AACH,CAAC,CAAC,CAAA;AAEJ,kBAAkB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { PANEL_DOCK_CSS } from './panel-dock-css.generated.js';
2
+ //# sourceMappingURL=panel-dock-css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-dock-css.d.ts","sourceRoot":"","sources":["../../src/ui/panel-dock-css.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const PANEL_DOCK_CSS = "\n/* \u505C\u9760\u680F = **\u5E03\u5C40\u6210\u5458**\uFF0C\u4E0D\u662F\u6D6E\u5C42\uFF1A\u5B83\u5360\u5BBD\u5EA6\u3001\u628A\u4E3B\u533A\u771F\u6B63\u6324\u7A84\uFF08\u5144\u5F1F\u9879\u76EE 2026-09-28\uFF1A\n \u300C\u5206\u680F\u538B\u8FC7\u6765\uFF0C\u4E0D\u662F\u76D6\u4E0A\u53BB\u300D\uFF09\u3002\u6240\u4EE5\u8C03\u7528\u65B9\u5FC5\u987B\u628A\u5B83\u653E\u8FDB\u81EA\u5DF1\u7684 flex \u6839\u91CC\u3002 */\n.dshpc-dock{display:flex;flex:0 0 auto;align-self:stretch;min-width:0}\n\n/* \u5355\u680F\uFF1Asticky + 100vh \u8BA9\u5B83\u5728\u9875\u9762\u6EDA\u52A8\u65F6\u4FDD\u6301\u53EF\u89C1\uFF0C\u540C\u65F6\u4ECD\u7136\u5360\u5BBD\u5EA6\u3002\n \u26A0\uFE0F **\u672C\u6761\u523B\u610F\u4E0D\u8BBE z-index**\uFF1A\u5E03\u5C40\u6210\u5458\u4E00\u65E6\u5E26\u6B63 z-index\uFF0C\u5C31\u4F1A\u65E0\u6761\u4EF6\u538B\u8FC7\u5BBF\u4E3B portal \u5230 body \u7684\n \u5F39\u7A97\uFF08\u5144\u5F1F\u9879\u76EE 2026-10-05 \u771F\u673A\u4E8B\u6545\u300C\u4FA7\u8FB9\u680F\u76D6\u4F4F\u5BBF\u4E3B\u8BBE\u7F6E\u5F39\u7A97\u300D\uFF09\u3002\u5C42\u5E8F\u4EA4\u7ED9 DOM \u987A\u5E8F\u88C1\u51B3\u3002 */\n.dshpc-dock__panel{\n box-sizing:border-box;position:sticky;top:0;align-self:stretch;\n display:flex;flex-direction:column;flex:0 0 auto;\n /* \u9AD8\u5EA6\u9ED8\u8BA4\u89C6\u53E3\u9AD8\uFF08\u6574\u9875\u573A\u666F\uFF09\uFF1B\u5D4C\u5728\u5B9A\u9AD8\u5BB9\u5668\u91CC\u65F6\u7531\u8C03\u7528\u65B9\u7ED9 --dshpc-dock-h\uFF08\u5982 420px / 100%\uFF09\u3002 */\n height:var(--dshpc-dock-h,100vh);max-height:var(--dshpc-dock-h,100vh);min-width:0;\n background:var(--dshpc-surface-base);color:var(--dshpc-fg);\n border-left:1px solid var(--dshpc-border);\n box-shadow:var(--dshpc-shadow-2);\n}\n\n.dshpc-dock__head{\n flex:none;display:flex;align-items:center;gap:8px;\n /* \u53F3\u4FA7 34px = 8(\u8FB9\u8DDD) + 20(\u5173\u94AE) + 6(\u547C\u5438)\uFF1A\u7ED9\u7EDD\u5BF9\u5B9A\u4F4D\u7684\u5173\u94AE\u7559\u4F4D\uFF0C\u6807\u9898/extra \u4E0D\u4ECE\u5B83\u5E95\u4E0B\u94BB */\n padding:10px 34px 10px 14px;\n border-bottom:1px solid var(--dshpc-border-faint);\n}\n/* \u56FE\u6807\u4F4D / \u6807\u9898\u53F3\u4FA7\u7684\u5185\u5BB9\u4F4D\uFF1A\u6D88\u8D39\u65B9\u4F20 ReactNode\uFF0C\u53EF\u585E\u591A\u4E2A\uFF1B\u5E93\u53EA\u8D1F\u8D23\u6392\u5E03\uFF0C\u4E0D\u62A2\u5BBD\u5EA6\u3002 */\n.dshpc-dock__lead{display:inline-flex;align-items:center;gap:6px;flex:none;color:var(--dshpc-fg-2)}\n.dshpc-dock__extra{display:inline-flex;align-items:center;gap:6px;flex:none;margin-left:auto}\n/* \u81EA\u5B9A\u4E49\u5934\u90E8\uFF1A\u6574\u884C\u5F52\u8C03\u7528\u65B9 \u2014\u2014 \u4E0D\u52A0\u5185\u8FB9\u8DDD/\u8FB9\u6846/\u80CC\u666F\uFF0C\u4E5F\u4E0D\u7ED9\u5173\u94AE\u7559\u5185\u8054\u7A7A\u95F4\uFF08\u5173\u94AE\u662F\u7EDD\u5BF9\u5B9A\u4F4D\u7684\uFF09\u3002 */\n.dshpc-dock__head--custom{display:block;padding:0;border-bottom:none}\n.dshpc-dock__title{\n flex:1 1 auto;min-width:0;\n overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\n font-size:var(--dshpc-font-md);font-weight:600;\n}\n/* \u5173\u95ED\u94AE\uFF1A20\u00D720 \u65B9\u89D2\u56FE\u6807\u4F4D\uFF08\u4E0E Modal \u7684\u5173\u95ED\u94AE\u540C\u89C4\u683C\uFF0C\u4E0D\u501F Picker \u89E6\u53D1\u5668\u76AE\u80A4\uFF09\u3002 */\n.dshpc-dock__close{\n display:inline-flex;align-items:center;justify-content:center;flex:none;\n width:20px;height:20px;padding:0;border:none;border-radius:var(--dshpc-radius-sm);\n background:transparent;color:var(--dshpc-fg-3);\n font-family:inherit;font-size:13px;line-height:1;cursor:pointer;\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease);\n}\n.dshpc-dock__close:hover{background:var(--dshpc-hover);color:var(--dshpc-fg)}\n.dshpc-dock__close:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}\n/* \u5934\u90E8\u5173\u94AE\uFF1A\u7EDD\u5BF9\u5B9A\u4F4D\uFF0C\u4F4D\u7F6E\u4E0E\u5185\u7F6E\u5934\u5B8C\u5168\u4E00\u81F4\uFF08top 10 / right 8\uFF09\uFF1B\u81EA\u5B9A\u4E49\u5934\u4E5F\u7528\u8FD9\u4E00\u4E2A\u4F4D\u7F6E\u3002\n \u951A\u70B9\u662F\u9762\u677F\u672C\u8EAB\uFF08position:sticky \u5373\u5B9A\u4F4D\u4E0A\u4E0B\u6587\uFF09\uFF0C\u4E0D\u5728\u6EDA\u52A8\u5185\u5BB9\u91CC\uFF0C\u6240\u4EE5\u6B63\u6587\u6EDA\u52A8\u5B83\u4E0D\u8DDF\u6EDA\u3002 */\n.dshpc-dock__close--abs{position:absolute;top:10px;right:8px;z-index:8}\n/* \u6D6E\u52A8\u5173\u94AE\uFF1A\u65E0\u5934\u90E8\u9762\u677F\u7528\uFF0C\u7565\u6536\u4E00\u70B9\u8FB9\u8DDD\u3002 */\n.dshpc-dock__close--floating{\n position:absolute;top:6px;right:6px;z-index:8;\n background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border-faint);\n}\n\n/* \u5185\u5BB9\u533A\u81EA\u5DF1\u6EDA\uFF1A\u9762\u677F\u9AD8\u5EA6\u9501 100vh\uFF0C\u5185\u5BB9\u4E0D\u8BBE\u5185\u90E8\u6EDA\u52A8\u5C31\u4F1A\u628A\u6574\u9875\u6491\u9AD8\u3002 */\n.dshpc-dock__body{flex:1 1 auto;min-height:0;overflow:auto}\n\n/* \u62D6\u62FD\u6761\uFF1A\u5DE6\u7F18 6px \u547D\u4E2D\u533A\uFF0C**\u4E0D\u753B\u7EBF**\uFF0Chover/\u6309\u4F4F\u65F6\u624D\u6D6E\u51FA\u4E00\u6761\u6D45\u8272\u5E26\u3002\n z-index 7 \u5FC5\u987B\u9AD8\u4E8E\u9762\u677F\u5185\u5BB9\u91CC\u7684\u6D6E\u5C42\uFF08\u590D\u5236\u94AE\u4E00\u7C7B\uFF09\uFF0C\u5426\u5219\u547D\u4E2D\u533A\u4F1A\u88AB\u5185\u5BB9\u76D6\u4F4F\u3002 */\n.dshpc-dock__resizer{\n position:absolute;left:0;top:0;bottom:0;width:6px;\n z-index:7;cursor:col-resize;background:transparent;\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease);\n}\n/* hover/\u6309\u4F4F\uFF1A\u4E0D\u586B\u7070\u5E26\uFF0C\u6539\u4E3A\u5B98\u65B9 work \u533A\u6307\u793A\u6761\u6837\u5F0F \u2014\u2014 \u5DE6\u7F18 2px \u84DD\u7AD6\u6761\u3001\u4E0A\u4E0B\u6E10\u9690\n \uFF08\u989C\u8272\u8D70 business \u84DD\u7684\u5B98\u65B9 alias\uFF0C\u660E\u6697\u81EA\u52A8\u8DDF\u968F\u5BBF\u4E3B\uFF1B\u547D\u4E2D\u533A\u4ECD\u662F 6px \u4E0D\u53D8\uFF09\u3002 */\n.dshpc-dock__resizer:hover,.dshpc-dock__resizer:active{\n background:linear-gradient(180deg,transparent,var(--dshpc-business) 30%,var(--dshpc-business) 70%,transparent) left center / 1px 100% no-repeat;\n}\n\n/* \u62D6\u52A8\u671F\uFF1A\u2460 <iframe>\uFF08PDF / HTML \u9884\u89C8\uFF09\u662F\u72EC\u7ACB\u6587\u6863\uFF0C\u4F1A\u541E\u6389\u7236\u6587\u6863\u7684 pointermove\uFF0C\n \u5411\u53F3\u62D6\u8FDB iframe \u5C31\u5361\u6B7B \u2014\u2014 \u6574\u7247\u8BA9\u51FA\u6307\u9488\u4E8B\u4EF6\uFF1B\u2461 contain \u628A\u91CD\u6392\u9694\u79BB\u5728\u680F\u5185\uFF0C\n \u5426\u5219\u6BCF\u5E27\u6539\u5BBD\u5EA6\u90FD\u4F1A\u7275\u52A8\u6574\u9875\u91CD\u6392\uFF08\u5144\u5F1F\u9879\u76EE 2026-10-04 \u771F\u673A\u300C\u632A\u5F88\u4E45\u624D\u52A8\u4E00\u4E0B\u300D\uFF09\u3002 */\n.dshpc-dock.dshpc-dock--resizing iframe{pointer-events:none}\n.dshpc-dock.dshpc-dock--resizing .dshpc-dock__panel{contain:layout paint;will-change:width}\n";
2
+ //# sourceMappingURL=panel-dock-css.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-dock-css.generated.d.ts","sourceRoot":"","sources":["../../src/ui/panel-dock-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,srNAA+kH,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ⚠️ 生成物,勿手改。真源 = src/ui/panel-dock.css
2
+ // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
+ export const PANEL_DOCK_CSS = "\n/* 停靠栏 = **布局成员**,不是浮层:它占宽度、把主区真正挤窄(兄弟项目 2026-09-28:\n 「分栏压过来,不是盖上去」)。所以调用方必须把它放进自己的 flex 根里。 */\n.dshpc-dock{display:flex;flex:0 0 auto;align-self:stretch;min-width:0}\n\n/* 单栏:sticky + 100vh 让它在页面滚动时保持可见,同时仍然占宽度。\n ⚠️ **本条刻意不设 z-index**:布局成员一旦带正 z-index,就会无条件压过宿主 portal 到 body 的\n 弹窗(兄弟项目 2026-10-05 真机事故「侧边栏盖住宿主设置弹窗」)。层序交给 DOM 顺序裁决。 */\n.dshpc-dock__panel{\n box-sizing:border-box;position:sticky;top:0;align-self:stretch;\n display:flex;flex-direction:column;flex:0 0 auto;\n /* 高度默认视口高(整页场景);嵌在定高容器里时由调用方给 --dshpc-dock-h(如 420px / 100%)。 */\n height:var(--dshpc-dock-h,100vh);max-height:var(--dshpc-dock-h,100vh);min-width:0;\n background:var(--dshpc-surface-base);color:var(--dshpc-fg);\n border-left:1px solid var(--dshpc-border);\n box-shadow:var(--dshpc-shadow-2);\n}\n\n.dshpc-dock__head{\n flex:none;display:flex;align-items:center;gap:8px;\n /* 右侧 34px = 8(边距) + 20(关钮) + 6(呼吸):给绝对定位的关钮留位,标题/extra 不从它底下钻 */\n padding:10px 34px 10px 14px;\n border-bottom:1px solid var(--dshpc-border-faint);\n}\n/* 图标位 / 标题右侧的内容位:消费方传 ReactNode,可塞多个;库只负责排布,不抢宽度。 */\n.dshpc-dock__lead{display:inline-flex;align-items:center;gap:6px;flex:none;color:var(--dshpc-fg-2)}\n.dshpc-dock__extra{display:inline-flex;align-items:center;gap:6px;flex:none;margin-left:auto}\n/* 自定义头部:整行归调用方 —— 不加内边距/边框/背景,也不给关钮留内联空间(关钮是绝对定位的)。 */\n.dshpc-dock__head--custom{display:block;padding:0;border-bottom:none}\n.dshpc-dock__title{\n flex:1 1 auto;min-width:0;\n overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\n font-size:var(--dshpc-font-md);font-weight:600;\n}\n/* 关闭钮:20×20 方角图标位(与 Modal 的关闭钮同规格,不借 Picker 触发器皮肤)。 */\n.dshpc-dock__close{\n display:inline-flex;align-items:center;justify-content:center;flex:none;\n width:20px;height:20px;padding:0;border:none;border-radius:var(--dshpc-radius-sm);\n background:transparent;color:var(--dshpc-fg-3);\n font-family:inherit;font-size:13px;line-height:1;cursor:pointer;\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease);\n}\n.dshpc-dock__close:hover{background:var(--dshpc-hover);color:var(--dshpc-fg)}\n.dshpc-dock__close:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}\n/* 头部关钮:绝对定位,位置与内置头完全一致(top 10 / right 8);自定义头也用这一个位置。\n 锚点是面板本身(position:sticky 即定位上下文),不在滚动内容里,所以正文滚动它不跟滚。 */\n.dshpc-dock__close--abs{position:absolute;top:10px;right:8px;z-index:8}\n/* 浮动关钮:无头部面板用,略收一点边距。 */\n.dshpc-dock__close--floating{\n position:absolute;top:6px;right:6px;z-index:8;\n background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border-faint);\n}\n\n/* 内容区自己滚:面板高度锁 100vh,内容不设内部滚动就会把整页撑高。 */\n.dshpc-dock__body{flex:1 1 auto;min-height:0;overflow:auto}\n\n/* 拖拽条:左缘 6px 命中区,**不画线**,hover/按住时才浮出一条浅色带。\n z-index 7 必须高于面板内容里的浮层(复制钮一类),否则命中区会被内容盖住。 */\n.dshpc-dock__resizer{\n position:absolute;left:0;top:0;bottom:0;width:6px;\n z-index:7;cursor:col-resize;background:transparent;\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease);\n}\n/* hover/按住:不填灰带,改为官方 work 区指示条样式 —— 左缘 2px 蓝竖条、上下渐隐\n (颜色走 business 蓝的官方 alias,明暗自动跟随宿主;命中区仍是 6px 不变)。 */\n.dshpc-dock__resizer:hover,.dshpc-dock__resizer:active{\n background:linear-gradient(180deg,transparent,var(--dshpc-business) 30%,var(--dshpc-business) 70%,transparent) left center / 1px 100% no-repeat;\n}\n\n/* 拖动期:① <iframe>(PDF / HTML 预览)是独立文档,会吞掉父文档的 pointermove,\n 向右拖进 iframe 就卡死 —— 整片让出指针事件;② contain 把重排隔离在栏内,\n 否则每帧改宽度都会牵动整页重排(兄弟项目 2026-10-04 真机「挪很久才动一下」)。 */\n.dshpc-dock.dshpc-dock--resizing iframe{pointer-events:none}\n.dshpc-dock.dshpc-dock--resizing .dshpc-dock__panel{contain:layout paint;will-change:width}\n";
4
+ //# sourceMappingURL=panel-dock-css.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-dock-css.generated.js","sourceRoot":"","sources":["../../src/ui/panel-dock-css.generated.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,4kHAA4kH,CAAA"}
@@ -0,0 +1,4 @@
1
+ // PanelDock 样式(停靠栏 / 面板 / 拖拽条)。类名固定 dshpc-dock*;
2
+ // 颜色一律吃 token,深色由 design 的 token 深色段自动生效(不写死颜色值)。
3
+ export { PANEL_DOCK_CSS } from './panel-dock-css.generated.js';
4
+ //# sourceMappingURL=panel-dock-css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-dock-css.js","sourceRoot":"","sources":["../../src/ui/panel-dock-css.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,kDAAkD;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * 停靠面板的状态逻辑(纯函数,零 React / 零 DOM)。
3
+ *
4
+ * 只记两件事:**哪些面板开着**、**每栏多宽**。内容与头部不在这里——
5
+ * 那是调用方在页面里声明的东西(`<DockPanel id="…">…</DockPanel>`),
6
+ * 与 Ant Design `Tabs` 的 `activeKey` + `<TabPane>` 同一分工:
7
+ * **显隐归状态,结构归 children**。
8
+ *
9
+ * 口径(用户 2026-10-20 定案):
10
+ * · 组名 = 窗口,一对一:`open('A')` 再 `open('A')` 只是重复打开,不新增一栏;
11
+ * · 未到上限 ⇒ 追加;到上限 ⇒ 返回 `{ ok: false, reason: 'limit' }`,不静默丢弃;
12
+ * · 关一栏即腾位,之后可以开新组名;
13
+ * · 没有多份同名、没有自动淘汰、没有 tab 切换。
14
+ */
15
+ /** 默认窗口的保留名:`open()` 不传 id 时用它。 */
16
+ export declare const DEFAULT_PANEL_ID = "default";
17
+ export interface DockState {
18
+ /** 打开顺序即数组顺序(稳定,不随重开变化)。 */
19
+ ids: string[];
20
+ /** 每栏宽度(px);没有记录的栏由组件用它的 `width` 兜底。 */
21
+ widths: Record<string, number>;
22
+ }
23
+ export type OpenResult = {
24
+ ok: true;
25
+ id: string;
26
+ created: boolean;
27
+ } | {
28
+ ok: false;
29
+ id: string;
30
+ reason: 'limit';
31
+ };
32
+ export declare function emptyDock(): DockState;
33
+ /** 夹到 [min, max];`max` 缺省表示不设上限。NaN / Infinity 一律落回 min。 */
34
+ export declare function clampWidth(value: number, min: number, max?: number): number;
35
+ export declare function isOpen(state: DockState, id: string): boolean;
36
+ /**
37
+ * 打开一栏。已开 ⇒ 原样返回(`created: false`,位置不变);
38
+ * 未开且已满 ⇒ 返回失败结果,状态不动。
39
+ */
40
+ export declare function openPanel(state: DockState, id: string, maxPanels: number): {
41
+ state: DockState;
42
+ result: OpenResult;
43
+ };
44
+ /** 关一栏;不存在即原样返回(幂等)。宽度记忆随栏一起丢弃。 */
45
+ export declare function closePanel(state: DockState, id: string): DockState;
46
+ /** 记某栏宽度(已夹过);值没变时原样返回,避免无谓重渲染。 */
47
+ export declare function setPanelWidth(state: DockState, id: string, width: number): DockState;
48
+ /** 其他栏宽度之和(算「这一栏最多能拖多宽」用)。 */
49
+ export declare function othersWidth(state: DockState, id: string, fallbackOf: (panelId: string) => number): number;
50
+ //# sourceMappingURL=panel-dock-logic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-dock-logic.d.ts","sourceRoot":"","sources":["../../src/ui/panel-dock-logic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,mCAAmC;AACnC,eAAO,MAAM,gBAAgB,YAAY,CAAA;AAEzC,MAAM,WAAW,SAAS;IACxB,4BAA4B;IAC5B,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC1C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAA;AAE9C,wBAAgB,SAAS,IAAI,SAAS,CAErC;AAED,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAI3E;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,SAAS,EAChB,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAI1C;AAED,mCAAmC;AACnC,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,CAKlE;AAED,mCAAmC;AACnC,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAIpF;AAED,8BAA8B;AAC9B,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAKzG"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * 停靠面板的状态逻辑(纯函数,零 React / 零 DOM)。
3
+ *
4
+ * 只记两件事:**哪些面板开着**、**每栏多宽**。内容与头部不在这里——
5
+ * 那是调用方在页面里声明的东西(`<DockPanel id="…">…</DockPanel>`),
6
+ * 与 Ant Design `Tabs` 的 `activeKey` + `<TabPane>` 同一分工:
7
+ * **显隐归状态,结构归 children**。
8
+ *
9
+ * 口径(用户 2026-10-20 定案):
10
+ * · 组名 = 窗口,一对一:`open('A')` 再 `open('A')` 只是重复打开,不新增一栏;
11
+ * · 未到上限 ⇒ 追加;到上限 ⇒ 返回 `{ ok: false, reason: 'limit' }`,不静默丢弃;
12
+ * · 关一栏即腾位,之后可以开新组名;
13
+ * · 没有多份同名、没有自动淘汰、没有 tab 切换。
14
+ */
15
+ /** 默认窗口的保留名:`open()` 不传 id 时用它。 */
16
+ export const DEFAULT_PANEL_ID = 'default';
17
+ export function emptyDock() {
18
+ return { ids: [], widths: {} };
19
+ }
20
+ /** 夹到 [min, max];`max` 缺省表示不设上限。NaN / Infinity 一律落回 min。 */
21
+ export function clampWidth(value, min, max) {
22
+ const wide = Number.isFinite(value) ? value : min;
23
+ const capped = max === undefined || !Number.isFinite(max) ? wide : Math.min(wide, max);
24
+ return Math.max(min, Math.round(capped));
25
+ }
26
+ export function isOpen(state, id) {
27
+ return state.ids.includes(id);
28
+ }
29
+ /**
30
+ * 打开一栏。已开 ⇒ 原样返回(`created: false`,位置不变);
31
+ * 未开且已满 ⇒ 返回失败结果,状态不动。
32
+ */
33
+ export function openPanel(state, id, maxPanels) {
34
+ if (isOpen(state, id))
35
+ return { state, result: { ok: true, id, created: false } };
36
+ if (state.ids.length >= maxPanels)
37
+ return { state, result: { ok: false, id, reason: 'limit' } };
38
+ return { state: { ids: [...state.ids, id], widths: state.widths }, result: { ok: true, id, created: true } };
39
+ }
40
+ /** 关一栏;不存在即原样返回(幂等)。宽度记忆随栏一起丢弃。 */
41
+ export function closePanel(state, id) {
42
+ if (!isOpen(state, id))
43
+ return state;
44
+ const widths = { ...state.widths };
45
+ delete widths[id];
46
+ return { ids: state.ids.filter((item) => item !== id), widths };
47
+ }
48
+ /** 记某栏宽度(已夹过);值没变时原样返回,避免无谓重渲染。 */
49
+ export function setPanelWidth(state, id, width) {
50
+ if (!isOpen(state, id))
51
+ return state;
52
+ if (state.widths[id] === width)
53
+ return state;
54
+ return { ids: state.ids, widths: { ...state.widths, [id]: width } };
55
+ }
56
+ /** 其他栏宽度之和(算「这一栏最多能拖多宽」用)。 */
57
+ export function othersWidth(state, id, fallbackOf) {
58
+ return state.ids.reduce((sum, item) => {
59
+ if (item === id)
60
+ return sum;
61
+ return sum + (state.widths[item] ?? fallbackOf(item));
62
+ }, 0);
63
+ }
64
+ //# sourceMappingURL=panel-dock-logic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-dock-logic.js","sourceRoot":"","sources":["../../src/ui/panel-dock-logic.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const PICKER_CSS = "\n.dshpc-picker{position:relative;display:inline-block;font-size:13px;line-height:20px}\n.dshpc-picker__trigger{\n display:inline-flex;align-items:center;justify-content:space-between;gap:6px;\n min-width:120px;max-width:100%;height:28px;padding:0 8px;\n color:var(--dshpc-fg);background:var(--dshpc-surface-1);\n border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);cursor:pointer;\n}\n.dshpc-picker__trigger:disabled{color:var(--dshpc-fg-dim);cursor:not-allowed;opacity:.7}\n.dshpc-picker__caret{color:var(--dshpc-fg-3);font-size:10px}\n.dshpc-picker__menu{\n position:absolute;z-index:60;top:calc(100% + 4px);left:0;min-width:100%;\n max-height:280px;overflow:auto;padding:4px;\n background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border);\n border-radius:var(--dshpc-radius-md);box-shadow:0 8px 24px rgba(15,23,42,.12);\n}\n/* \u5411\u4E0A\u5C55\u5F00\uFF08\u89E6\u53D1\u5668\u9760\u8FD1\u89C6\u53E3\u5E95\u90E8\u65F6\u7528 placement=\"up\"\uFF09\u3002 */\n.dshpc-picker__menu--up{top:auto;bottom:calc(100% + 4px)}\n/* \u5C3A\u5BF8\u6863\uFF08\u4E0E Field \u7684 sm/md/lg \u5BF9\u5E94\uFF09\u3002 */\n.dshpc-picker__trigger--sm{height:24px;font-size:12px}\n.dshpc-picker__trigger--lg{height:32px}\n/* \u952E\u76D8\u6E38\u6807\u6240\u5728\u9879\uFF08\u65E0 hover \u4E5F\u8981\u770B\u5F97\u89C1\uFF09\u3002 */\n.dshpc-picker__option[data-active='true']{background:var(--dshpc-surface-sunken);outline:1px solid var(--dshpc-border)}\n.dshpc-picker__option--clear{color:var(--dshpc-fg-3)}\n.dshpc-picker__search{\n width:100%;height:28px;margin-bottom:4px;padding:0 8px;box-sizing:border-box;\n color:var(--dshpc-fg);background:var(--dshpc-surface-sunken);\n border:1px solid var(--dshpc-border-faint);border-radius:var(--dshpc-radius-md);outline:none;\n}\n.dshpc-picker__group-label{\n padding:6px 8px 2px;color:var(--dshpc-fg-3);font-size:11px;\n}\n.dshpc-picker__option{\n display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:var(--dshpc-radius-sm);cursor:pointer;\n color:var(--dshpc-fg);white-space:nowrap;\n}\n.dshpc-picker__option:hover{background:var(--dshpc-surface-sunken)}\n.dshpc-picker__option--active{background:var(--dshpc-open-bg);color:var(--dshpc-business)}\n.dshpc-picker__option--disabled{color:var(--dshpc-fg-dim);cursor:not-allowed}\n.dshpc-picker__tick{width:12px;color:var(--dshpc-business)}\n.dshpc-picker__empty{padding:8px;color:var(--dshpc-fg-3);text-align:center}\n.dshpc-picker__degraded{\n padding:6px 8px;margin-bottom:4px;border-radius:var(--dshpc-radius-sm);\n color:var(--dshpc-warning-label);background:color-mix(in srgb,var(--dshpc-warning) 12%,transparent);\n font-size:11px;\n}\n.dshpc-picker__row{display:flex;align-items:center;gap:8px}\n";
1
+ export { PICKER_CSS } from './picker-css.generated.js';
2
2
  //# sourceMappingURL=picker-css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"picker-css.d.ts","sourceRoot":"","sources":["../../src/ui/picker-css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,isFA+CtB,CAAA"}
1
+ {"version":3,"file":"picker-css.d.ts","sourceRoot":"","sources":["../../src/ui/picker-css.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const PICKER_CSS = "\n.dshpc-picker{position:relative;display:inline-block;font-size:13px;line-height:20px}\n.dshpc-picker__trigger{\n display:inline-flex;align-items:center;justify-content:space-between;gap:6px;\n min-width:120px;max-width:100%;height:28px;padding:0 8px;\n color:var(--dshpc-fg);background:var(--dshpc-surface-1);\n border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);cursor:pointer;\n}\n.dshpc-picker__trigger:disabled{color:var(--dshpc-fg-dim);cursor:not-allowed;opacity:.7}\n/* \u805A\u7126\uFF08\u952E\u76D8\u6216\u70B9\u51FB\u9009\u4E2D\uFF09\u65F6\u4E0E\u5168\u7AD9\u4E00\u81F4\u7684\u84DD\u8272\u63CF\u8FB9\uFF1B\u83DC\u5355\u6253\u5F00\u540E\u7126\u70B9\u4F1A\u8FDB\u53BB\uFF0C\u89E6\u53D1\u5668\u81EA\u7136\u5931\u53BB\u7126\u70B9\u3002 */\n.dshpc-picker__trigger:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}\n/* \u6587\u5B57\u9ED8\u8BA4\u9760\u5DE6\uFF08\u5403\u6389\u5269\u4F59\u5BBD\u5EA6\uFF09\uFF0C\u4E0D\u7ED9 space-between \u628A\u77ED\u6587\u6848\u63A8\u5230\u4E2D\u95F4\u7684\u673A\u4F1A\uFF1B\n \u786E\u5B9E\u8981\u5C45\u4E2D\u5C31\u663E\u5F0F\u4F20 align=\"center\"\u3002 */\n.dshpc-picker__label{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}\n.dshpc-picker__trigger--center .dshpc-picker__label{text-align:center}\n.dshpc-picker__caret{flex:none;color:var(--dshpc-fg-3)}\n.dshpc-picker__icon{display:inline-flex;flex:none;color:var(--dshpc-fg-2)}\n.dshpc-picker__option-icon{display:inline-flex;flex:none;color:var(--dshpc-fg-2)}\n.dshpc-picker__menu{\n z-index:60;max-height:280px;overflow:auto;padding:4px;\n /* \u83DC\u5355\u7ECF FloatingPortal \u6302\u5230 body\uFF0C\u8131\u79BB .dshpc-picker\uFF0C\u987B\u663E\u5F0F\u5B57\u53F7\uFF0C\u5426\u5219\u7EE7\u627F body \u7684\u5927\u5B57\u53F7 */\n font-size:13px;line-height:20px;\n background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border);\n border-radius:var(--dshpc-radius-md);box-shadow:0 8px 24px rgba(15,23,42,.12);\n}\n/* \u5C3A\u5BF8\u6863\uFF08\u4E0E Field \u7684 sm/md/lg \u5BF9\u5E94\uFF09\u3002 */\n.dshpc-picker__trigger--sm{height:24px;font-size:12px}\n.dshpc-picker__trigger--lg{height:32px}\n/* \u952E\u76D8\u6E38\u6807\u6240\u5728\u9879\uFF08\u65E0 hover \u4E5F\u8981\u770B\u5F97\u89C1\uFF09\u3002 */\n.dshpc-picker__option[data-active='true']{background:var(--dshpc-surface-sunken);outline:1px solid var(--dshpc-border)}\n.dshpc-picker__option--clear{color:var(--dshpc-fg-3)}\n.dshpc-picker__search{\n width:100%;height:28px;margin-bottom:4px;padding:0 8px;box-sizing:border-box;\n color:var(--dshpc-fg);background:var(--dshpc-surface-sunken);\n border:1px solid var(--dshpc-border-faint);border-radius:var(--dshpc-radius-md);outline:none;\n}\n.dshpc-picker__group-label{\n padding:6px 8px 2px;color:var(--dshpc-fg-3);font-size:11px;\n}\n.dshpc-picker__option{\n display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:var(--dshpc-radius-sm);cursor:pointer;\n color:var(--dshpc-fg);white-space:nowrap;\n}\n.dshpc-picker__option:hover{background:var(--dshpc-surface-sunken)}\n.dshpc-picker__option--active{background:var(--dshpc-open-bg);color:var(--dshpc-business)}\n.dshpc-picker__option--disabled{color:var(--dshpc-fg-dim);cursor:not-allowed}\n.dshpc-picker__tick{width:12px;color:var(--dshpc-business)}\n.dshpc-picker__empty{padding:8px;color:var(--dshpc-fg-3);text-align:center}\n.dshpc-picker__degraded{\n padding:6px 8px;margin-bottom:4px;border-radius:var(--dshpc-radius-sm);\n color:var(--dshpc-warning-label);background:color-mix(in srgb,var(--dshpc-warning) 12%,transparent);\n font-size:11px;\n}\n.dshpc-picker__row{display:flex;align-items:center;gap:8px}\n";
2
+ //# sourceMappingURL=picker-css.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picker-css.generated.d.ts","sourceRoot":"","sources":["../../src/ui/picker-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,ooHAAg/F,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ⚠️ 生成物,勿手改。真源 = src/ui/picker.css
2
+ // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
+ export const PICKER_CSS = "\n.dshpc-picker{position:relative;display:inline-block;font-size:13px;line-height:20px}\n.dshpc-picker__trigger{\n display:inline-flex;align-items:center;justify-content:space-between;gap:6px;\n min-width:120px;max-width:100%;height:28px;padding:0 8px;\n color:var(--dshpc-fg);background:var(--dshpc-surface-1);\n border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);cursor:pointer;\n}\n.dshpc-picker__trigger:disabled{color:var(--dshpc-fg-dim);cursor:not-allowed;opacity:.7}\n/* 聚焦(键盘或点击选中)时与全站一致的蓝色描边;菜单打开后焦点会进去,触发器自然失去焦点。 */\n.dshpc-picker__trigger:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}\n/* 文字默认靠左(吃掉剩余宽度),不给 space-between 把短文案推到中间的机会;\n 确实要居中就显式传 align=\"center\"。 */\n.dshpc-picker__label{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}\n.dshpc-picker__trigger--center .dshpc-picker__label{text-align:center}\n.dshpc-picker__caret{flex:none;color:var(--dshpc-fg-3)}\n.dshpc-picker__icon{display:inline-flex;flex:none;color:var(--dshpc-fg-2)}\n.dshpc-picker__option-icon{display:inline-flex;flex:none;color:var(--dshpc-fg-2)}\n.dshpc-picker__menu{\n z-index:60;max-height:280px;overflow:auto;padding:4px;\n /* 菜单经 FloatingPortal 挂到 body,脱离 .dshpc-picker,须显式字号,否则继承 body 的大字号 */\n font-size:13px;line-height:20px;\n background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border);\n border-radius:var(--dshpc-radius-md);box-shadow:0 8px 24px rgba(15,23,42,.12);\n}\n/* 尺寸档(与 Field 的 sm/md/lg 对应)。 */\n.dshpc-picker__trigger--sm{height:24px;font-size:12px}\n.dshpc-picker__trigger--lg{height:32px}\n/* 键盘游标所在项(无 hover 也要看得见)。 */\n.dshpc-picker__option[data-active='true']{background:var(--dshpc-surface-sunken);outline:1px solid var(--dshpc-border)}\n.dshpc-picker__option--clear{color:var(--dshpc-fg-3)}\n.dshpc-picker__search{\n width:100%;height:28px;margin-bottom:4px;padding:0 8px;box-sizing:border-box;\n color:var(--dshpc-fg);background:var(--dshpc-surface-sunken);\n border:1px solid var(--dshpc-border-faint);border-radius:var(--dshpc-radius-md);outline:none;\n}\n.dshpc-picker__group-label{\n padding:6px 8px 2px;color:var(--dshpc-fg-3);font-size:11px;\n}\n.dshpc-picker__option{\n display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:var(--dshpc-radius-sm);cursor:pointer;\n color:var(--dshpc-fg);white-space:nowrap;\n}\n.dshpc-picker__option:hover{background:var(--dshpc-surface-sunken)}\n.dshpc-picker__option--active{background:var(--dshpc-open-bg);color:var(--dshpc-business)}\n.dshpc-picker__option--disabled{color:var(--dshpc-fg-dim);cursor:not-allowed}\n.dshpc-picker__tick{width:12px;color:var(--dshpc-business)}\n.dshpc-picker__empty{padding:8px;color:var(--dshpc-fg-3);text-align:center}\n.dshpc-picker__degraded{\n padding:6px 8px;margin-bottom:4px;border-radius:var(--dshpc-radius-sm);\n color:var(--dshpc-warning-label);background:color-mix(in srgb,var(--dshpc-warning) 12%,transparent);\n font-size:11px;\n}\n.dshpc-picker__row{display:flex;align-items:center;gap:8px}\n";
4
+ //# sourceMappingURL=picker-css.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picker-css.generated.js","sourceRoot":"","sources":["../../src/ui/picker-css.generated.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,qEAAqE;AACrE,MAAM,CAAC,MAAM,UAAU,GAAG,6+FAA6+F,CAAA"}
@@ -1,51 +1,4 @@
1
1
  // 选择器(Picker / ModelPicker)样式。
2
2
  // 类名与 token 变量统一 dshpc 前缀。
3
- export const PICKER_CSS = `
4
- .dshpc-picker{position:relative;display:inline-block;font-size:13px;line-height:20px}
5
- .dshpc-picker__trigger{
6
- display:inline-flex;align-items:center;justify-content:space-between;gap:6px;
7
- min-width:120px;max-width:100%;height:28px;padding:0 8px;
8
- color:var(--dshpc-fg);background:var(--dshpc-surface-1);
9
- border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);cursor:pointer;
10
- }
11
- .dshpc-picker__trigger:disabled{color:var(--dshpc-fg-dim);cursor:not-allowed;opacity:.7}
12
- .dshpc-picker__caret{color:var(--dshpc-fg-3);font-size:10px}
13
- .dshpc-picker__menu{
14
- position:absolute;z-index:60;top:calc(100% + 4px);left:0;min-width:100%;
15
- max-height:280px;overflow:auto;padding:4px;
16
- background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border);
17
- border-radius:var(--dshpc-radius-md);box-shadow:0 8px 24px rgba(15,23,42,.12);
18
- }
19
- /* 向上展开(触发器靠近视口底部时用 placement="up")。 */
20
- .dshpc-picker__menu--up{top:auto;bottom:calc(100% + 4px)}
21
- /* 尺寸档(与 Field 的 sm/md/lg 对应)。 */
22
- .dshpc-picker__trigger--sm{height:24px;font-size:12px}
23
- .dshpc-picker__trigger--lg{height:32px}
24
- /* 键盘游标所在项(无 hover 也要看得见)。 */
25
- .dshpc-picker__option[data-active='true']{background:var(--dshpc-surface-sunken);outline:1px solid var(--dshpc-border)}
26
- .dshpc-picker__option--clear{color:var(--dshpc-fg-3)}
27
- .dshpc-picker__search{
28
- width:100%;height:28px;margin-bottom:4px;padding:0 8px;box-sizing:border-box;
29
- color:var(--dshpc-fg);background:var(--dshpc-surface-sunken);
30
- border:1px solid var(--dshpc-border-faint);border-radius:var(--dshpc-radius-md);outline:none;
31
- }
32
- .dshpc-picker__group-label{
33
- padding:6px 8px 2px;color:var(--dshpc-fg-3);font-size:11px;
34
- }
35
- .dshpc-picker__option{
36
- display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:var(--dshpc-radius-sm);cursor:pointer;
37
- color:var(--dshpc-fg);white-space:nowrap;
38
- }
39
- .dshpc-picker__option:hover{background:var(--dshpc-surface-sunken)}
40
- .dshpc-picker__option--active{background:var(--dshpc-open-bg);color:var(--dshpc-business)}
41
- .dshpc-picker__option--disabled{color:var(--dshpc-fg-dim);cursor:not-allowed}
42
- .dshpc-picker__tick{width:12px;color:var(--dshpc-business)}
43
- .dshpc-picker__empty{padding:8px;color:var(--dshpc-fg-3);text-align:center}
44
- .dshpc-picker__degraded{
45
- padding:6px 8px;margin-bottom:4px;border-radius:var(--dshpc-radius-sm);
46
- color:var(--dshpc-warning-label);background:color-mix(in srgb,var(--dshpc-warning) 12%,transparent);
47
- font-size:11px;
48
- }
49
- .dshpc-picker__row{display:flex;align-items:center;gap:8px}
50
- `;
3
+ export { PICKER_CSS } from './picker-css.generated.js';
51
4
  //# sourceMappingURL=picker-css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"picker-css.js","sourceRoot":"","sources":["../../src/ui/picker-css.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,2BAA2B;AAC3B,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CzB,CAAA"}
1
+ {"version":3,"file":"picker-css.js","sourceRoot":"","sources":["../../src/ui/picker-css.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,2BAA2B;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * 领域选择器的默认前置图标(2026-10-20 用户:默认就带一个 icon,可换、可去掉)。
3
+ *
4
+ * ui 零官方依赖 ⇒ 自绘小 SVG(14px,跟 currentColor 走明暗)。
5
+ * 用法:不传 `icon` ⇒ 默认这颗;传 `null` ⇒ 不显示;传任意 ReactNode ⇒ 换成它。
6
+ */
7
+ import { createElement as h } from 'react';
8
+ /** 工作区:文件夹 */
9
+ export declare function folderIcon(): ReturnType<typeof h>;
10
+ /** 模型:四角星 */
11
+ export declare function sparkleIcon(): ReturnType<typeof h>;
12
+ //# sourceMappingURL=picker-icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picker-icons.d.ts","sourceRoot":"","sources":["../../src/ui/picker-icons.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,MAAM,OAAO,CAAA;AAU1C,cAAc;AACd,wBAAgB,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAOjD;AAED,aAAa;AACb,wBAAgB,WAAW,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAOlD"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * 领域选择器的默认前置图标(2026-10-20 用户:默认就带一个 icon,可换、可去掉)。
3
+ *
4
+ * ui 零官方依赖 ⇒ 自绘小 SVG(14px,跟 currentColor 走明暗)。
5
+ * 用法:不传 `icon` ⇒ 默认这颗;传 `null` ⇒ 不显示;传任意 ReactNode ⇒ 换成它。
6
+ */
7
+ import { createElement as h } from 'react';
8
+ function glyph(path) {
9
+ return h('svg', { width: 14, height: 14, viewBox: '0 0 16 16', fill: 'none', 'aria-hidden': true }, path);
10
+ }
11
+ /** 工作区:文件夹 */
12
+ export function folderIcon() {
13
+ return glyph(h('path', {
14
+ d: 'M2 4.5A1.5 1.5 0 0 1 3.5 3h2.6l1.2 1.5h5.2A1.5 1.5 0 0 1 14 6v5.5A1.5 1.5 0 0 1 12.5 13h-9A1.5 1.5 0 0 1 2 11.5z',
15
+ stroke: 'currentColor',
16
+ 'stroke-width': 1.3,
17
+ 'stroke-linejoin': 'round',
18
+ }));
19
+ }
20
+ /** 模型:四角星 */
21
+ export function sparkleIcon() {
22
+ return glyph(h('path', {
23
+ d: 'M8 1.8l1.6 4.1 4.1 1.6-4.1 1.6L8 13.2 6.4 9.1 2.3 7.5l4.1-1.6z',
24
+ stroke: 'currentColor',
25
+ 'stroke-width': 1.2,
26
+ 'stroke-linejoin': 'round',
27
+ }));
28
+ }
29
+ //# sourceMappingURL=picker-icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picker-icons.js","sourceRoot":"","sources":["../../src/ui/picker-icons.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,MAAM,OAAO,CAAA;AAE1C,SAAS,KAAK,CAAC,IAA0B;IACvC,OAAO,CAAC,CACN,KAAK,EACL,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,EAClF,IAAI,CACL,CAAA;AACH,CAAC;AAED,cAAc;AACd,MAAM,UAAU,UAAU;IACxB,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE;QACrB,CAAC,EAAE,kHAAkH;QACrH,MAAM,EAAE,cAAc;QACtB,cAAc,EAAE,GAAG;QACnB,iBAAiB,EAAE,OAAO;KAC3B,CAAC,CAAC,CAAA;AACL,CAAC;AAED,aAAa;AACb,MAAM,UAAU,WAAW;IACzB,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE;QACrB,CAAC,EAAE,gEAAgE;QACnE,MAAM,EAAE,cAAc;QACtB,cAAc,EAAE,GAAG;QACnB,iBAAiB,EAAE,OAAO;KAC3B,CAAC,CAAC,CAAA;AACL,CAAC"}
@@ -1,6 +1,9 @@
1
+ import type { ReactNode } from 'react';
1
2
  export interface PickerOption {
2
3
  value: string;
3
4
  label: string;
5
+ /** 选项文字前的图标(任意 ReactNode;不传就没有这一段)。 */
6
+ icon?: ReactNode;
4
7
  disabled?: boolean;
5
8
  }
6
9
  /** 一组选项(模型选择里 group 就是 provider)。 */
@@ -17,6 +20,6 @@ export declare function filterGroups(groups: PickerGroup[], query: string): Pick
17
20
  /** 多选切换;`max` 达到上限时不再添加(返回原数组,不静默截断)。 */
18
21
  export declare function toggleValue(current: readonly string[], value: string, max?: number): string[];
19
22
  export declare function labelsOf(groups: PickerGroup[], values: readonly string[]): string[];
20
- /** 值落在哪个组里(cascade 形态用来反推 provider)。 */
23
+ /** 值落在哪个组里(按模型值反推供应商等场景)。 */
21
24
  export declare function groupOf(groups: PickerGroup[], value: string): PickerGroup | undefined;
22
25
  //# sourceMappingURL=picker-logic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"picker-logic.d.ts","sourceRoot":"","sources":["../../src/ui/picker-logic.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,qCAAqC;AACrC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,YAAY,EAAE,CAAA;CACxB;AAED,8CAA8C;AAC9C,wBAAgB,QAAQ,CACtB,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,EACjC,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,GAClC,WAAW,EAAE,CAIf;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAIpE;AAED,0CAA0C;AAC1C,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAShF;AAED,yCAAyC;AACzC,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAK7F;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAQnF;AAED,wCAAwC;AACxC,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAGrF"}
1
+ {"version":3,"file":"picker-logic.d.ts","sourceRoot":"","sources":["../../src/ui/picker-logic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,uCAAuC;IACvC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,qCAAqC;AACrC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,YAAY,EAAE,CAAA;CACxB;AAED,8CAA8C;AAC9C,wBAAgB,QAAQ,CACtB,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,EACjC,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,GAClC,WAAW,EAAE,CAIf;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAIpE;AAED,0CAA0C;AAC1C,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAShF;AAED,yCAAyC;AACzC,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAK7F;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAQnF;AAED,6BAA6B;AAC7B,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAGrF"}
@@ -1,4 +1,3 @@
1
- // 选择器的纯逻辑(与 React 无关,便于单测)。
2
1
  /** 两种输入归一成 groups:给了 `options` 就当成一个无标题的组。 */
3
2
  export function toGroups(groups, options) {
4
3
  if (groups !== undefined && groups.length > 0)
@@ -44,7 +43,7 @@ export function labelsOf(groups, values) {
44
43
  }
45
44
  return out;
46
45
  }
47
- /** 值落在哪个组里(cascade 形态用来反推 provider)。 */
46
+ /** 值落在哪个组里(按模型值反推供应商等场景)。 */
48
47
  export function groupOf(groups, value) {
49
48
  if (value === '')
50
49
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"picker-logic.js","sourceRoot":"","sources":["../../src/ui/picker-logic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"picker-logic.js","sourceRoot":"","sources":["../../src/ui/picker-logic.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,9 @@ export interface ResizeOptions {
17
17
  onMove: (width: number) => void;
18
18
  /** 松手:提交最终宽度(落 state / 持久化)。 */
19
19
  onCommit: (width: number) => void;
20
- /** 拖拽期间挂到 #dshpc-root 的类(如预览 dock 的 `dshpc-resizing` 令 iframe pointer-events:none);松手移除。 */
20
+ /** 拖拽期间挂 `rootClass` 的元素;不传则回落 `#dshpc-root`(多实例场景必须传自己的根,否则会挂到别人的根上)。 */
21
+ root?: HTMLElement | null;
22
+ /** 拖拽期间挂到 `root` 的类(如预览 dock 的 `dshpc-resizing` 令 iframe pointer-events:none);松手移除。 */
21
23
  rootClass?: string;
22
24
  /** rAF 节流(预览 dock 用,避免每帧整页重排)。 */
23
25
  rafThrottle?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"resizer.d.ts","sourceRoot":"","sources":["../../src/ui/resizer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,CAAA;IAC5D,wEAAwE;IACxE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;IACpC,yCAAyC;IACzC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,gCAAgC;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kCAAkC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,4DAA4D;AAC5D,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAkChE"}
1
+ {"version":3,"file":"resizer.d.ts","sourceRoot":"","sources":["../../src/ui/resizer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,CAAA;IAC5D,wEAAwE;IACxE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;IACpC,yCAAyC;IACzC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,gCAAgC;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,0EAA0E;IAC1E,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IACzB,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kCAAkC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,4DAA4D;AAC5D,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAkChE"}
@@ -5,7 +5,7 @@ export function startResizeLayoutWidth(opts) {
5
5
  const prevUserSelect = body.style.userSelect;
6
6
  body.style.userSelect = 'none';
7
7
  window.getSelection()?.removeAllRanges();
8
- const rootEl = document.getElementById('dshpc-root');
8
+ const rootEl = opts.root ?? document.getElementById('dshpc-root');
9
9
  if (opts.rootClass !== undefined)
10
10
  rootEl?.classList.add(opts.rootClass);
11
11
  let frame = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"resizer.js","sourceRoot":"","sources":["../../src/ui/resizer.ts"],"names":[],"mappings":"AAsBA,4DAA4D;AAC5D,MAAM,UAAU,sBAAsB,CAAC,IAAmB;IACxD,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,CAAA;IAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;IAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAA;IAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAA;IAC9B,MAAM,CAAC,YAAY,EAAE,EAAE,eAAe,EAAE,CAAA;IACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;IACpD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACvE,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,MAAM,IAAI,GAAG,CAAC,OAAe,EAAU,EAAE;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC/B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACd,OAAO,CAAC,CAAA;IACV,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,CAAC,KAAmB,EAAQ,EAAE;QAC3C,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC9B,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAA;YACxB,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAM;YACvB,KAAK,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QACpE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACrB,CAAC;IACH,CAAC,CAAA;IACD,MAAM,IAAI,GAAG,CAAC,KAAmB,EAAQ,EAAE;QACzC,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;QACjD,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QAC7C,IAAI,KAAK,KAAK,CAAC;YAAE,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,cAAc,CAAA;QACtC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC1E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAA;IACD,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAC9C,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;AAC5C,CAAC"}
1
+ {"version":3,"file":"resizer.js","sourceRoot":"","sources":["../../src/ui/resizer.ts"],"names":[],"mappings":"AAwBA,4DAA4D;AAC5D,MAAM,UAAU,sBAAsB,CAAC,IAAmB;IACxD,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,CAAA;IAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;IAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAA;IAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAA;IAC9B,MAAM,CAAC,YAAY,EAAE,EAAE,eAAe,EAAE,CAAA;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;IACjE,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACvE,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,MAAM,IAAI,GAAG,CAAC,OAAe,EAAU,EAAE;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC/B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACd,OAAO,CAAC,CAAA;IACV,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,CAAC,KAAmB,EAAQ,EAAE;QAC3C,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC9B,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAA;YACxB,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAM;YACvB,KAAK,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QACpE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACrB,CAAC;IACH,CAAC,CAAA;IACD,MAAM,IAAI,GAAG,CAAC,KAAmB,EAAQ,EAAE;QACzC,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;QACjD,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QAC7C,IAAI,KAAK,KAAK,CAAC;YAAE,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,cAAc,CAAA;QACtC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC1E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAA;IACD,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAC9C,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;AAC5C,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { ToastAction, ToastPosition, ToastVariant } from './Toast.js';
2
+ /** 全局注册表键:Symbol.for 跨 bundle 副本天然共享同一个符号。 */
3
+ export declare const TOAST_HOST_KEY: unique symbol;
4
+ /** 全局单例:已注册则直接返回(不触发 create),否则建一个并注册。 */
5
+ export declare function claimToastHost<T>(create: () => T): T;
6
+ export interface ToastPayload {
7
+ message: string;
8
+ variant: ToastVariant;
9
+ /** native = showToast(sonner 原味);card = notify(我们的卡)。 */
10
+ style: 'native' | 'card';
11
+ description?: string;
12
+ durationMs: number;
13
+ /** showToast 的整条自定义色(仅 native 有意义)。 */
14
+ color?: string;
15
+ onDismiss?: () => void;
16
+ /** notify 的右侧按钮(仅 card,1–2 个)。 */
17
+ actions?: ToastAction[];
18
+ }
19
+ export interface ToastHost {
20
+ show(payload: ToastPayload): void;
21
+ /** 全局统一位置:任一副本调用对所有插件生效。 */
22
+ setPosition(position: ToastPosition): void;
23
+ }
24
+ //# sourceMappingURL=toast-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast-host.d.ts","sourceRoot":"","sources":["../../src/ui/toast-host.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE1E,8CAA8C;AAC9C,eAAO,MAAM,cAAc,eAA2C,CAAA;AAEtE,0CAA0C;AAC1C,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAOpD;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,YAAY,CAAA;IACrB,yDAAyD;IACzD,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,kCAAkC;IAClC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAA;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;IACjC,4BAA4B;IAC5B,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAA;CAC3C"}
@@ -0,0 +1,20 @@
1
+ // 跨副本 toast 宿主(多插件同页只留一个提示区)。
2
+ //
3
+ // core 被打进每个插件的 bundle,模块级状态各副本一份 ⇒ 旧实现 N 个插件同页会挂出
4
+ // N 个同 id 容器 + N 个 Toaster 叠在同一屏位。这里在 globalThis 上用 Symbol.for 的
5
+ // 全局符号办一个单例:先到场的副本建宿主(唯一容器 + 唯一 Toaster),之后所有副本
6
+ // (含跨版本)都把 payload 交给已注册的宿主渲染。
7
+ // 纯逻辑、零 DOM / React 依赖 ⇒ Node 单测可直接断言单例语义。
8
+ /** 全局注册表键:Symbol.for 跨 bundle 副本天然共享同一个符号。 */
9
+ export const TOAST_HOST_KEY = Symbol.for('dsh-plugin-core/toast-host');
10
+ /** 全局单例:已注册则直接返回(不触发 create),否则建一个并注册。 */
11
+ export function claimToastHost(create) {
12
+ const g = globalThis;
13
+ const existing = g[TOAST_HOST_KEY];
14
+ if (existing !== undefined)
15
+ return existing;
16
+ const created = create();
17
+ g[TOAST_HOST_KEY] = created;
18
+ return created;
19
+ }
20
+ //# sourceMappingURL=toast-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast-host.js","sourceRoot":"","sources":["../../src/ui/toast-host.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,mDAAmD;AACnD,iEAAiE;AACjE,gDAAgD;AAChD,+BAA+B;AAC/B,2CAA2C;AAI3C,8CAA8C;AAC9C,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;AAEtE,0CAA0C;AAC1C,MAAM,UAAU,cAAc,CAAI,MAAe;IAC/C,MAAM,CAAC,GAAG,UAA2C,CAAA;IACrD,MAAM,QAAQ,GAAG,CAAC,CAAC,cAAc,CAAC,CAAA;IAClC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAA;IAC3C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAA;IACxB,CAAC,CAAC,cAAc,CAAC,GAAG,OAAO,CAAA;IAC3B,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -9,6 +9,14 @@ export declare function formatDateTime(iso: string, opts?: {
9
9
  seconds?: boolean;
10
10
  fallback?: string;
11
11
  }): string;
12
+ /**
13
+ * 按精度显示:day ⇒ `YYYY-MM-DD`;hour / minute ⇒ `YYYY-MM-DD HH:mm`;second ⇒ 补 `:ss`。
14
+ * 「数据补全到毫秒、显示只到精度」——不该显示的时分秒不出现(DateTimePicker 的显示口径)。
15
+ * 解析失败 ⇒ `opts.fallback`,缺省返回原串。
16
+ */
17
+ export declare function formatDateTimePrecision(iso: string, precision: 'day' | 'hour' | 'minute' | 'second', opts?: {
18
+ fallback?: string;
19
+ }): string;
12
20
  /** `YYYY-MM-DD`(带年份,跨年也能看懂)。解析失败 ⇒ `opts.fallback`,缺省 `—`。 */
13
21
  export declare function formatYmd(iso: string, opts?: {
14
22
  fallback?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"AAEA,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,WAAW,CAAA;AAE7C,sCAAsC;AACtC,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEnD;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAMnG;AAED,8DAA8D;AAC9D,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAK3E;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAOhG;AAED,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAOpD;AAED,uBAAuB;AACvB,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,OAAO,CAIzD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAetF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAexF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAahG;AAED,2CAA2C;AAC3C,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CAGT"}
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"AAEA,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,WAAW,CAAA;AAE7C,sCAAsC;AACtC,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEnD;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAMnG;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,EAC/C,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3B,MAAM,CAQR;AAED,8DAA8D;AAC9D,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAK3E;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAOhG;AAED,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAOpD;AAED,uBAAuB;AACvB,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,OAAO,CAIzD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAetF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAexF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAahG;AAED,2CAA2C;AAC3C,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CAGT"}