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
@@ -1,13 +1,15 @@
1
1
  // 控件样式。类名与变量统一使用 dshpc 前缀。
2
- export const SEGMENTED_CSS = ` /* ── 分段控件 P2 ───────────────────────────────────────────────────── 2026-10-19:按用户点名「原封不动照兄弟项目 dsh-task-dispatch-table 抄」—— 规则结构、写法、transition 全部对齐兄弟原文(单行规则、item 无边框、hover 只提亮文字), 只把前缀 / 变量名换成本仓口径。0.2.2-0.2.8 真机上「轨道透明、gap 失效」自查多轮无果 ⇒ 不再自创写法,回到兄弟同款。 用户额外要的两处(兄弟没有,保留):weekday 方块间距 gap:6px;段内中性计数 __count。 */ .dshpc-seg{display:inline-flex;} .dshpc-seg{align-items:center;} .dshpc-seg{gap:2px;} .dshpc-seg{padding:2px;} .dshpc-seg{border-radius:var(--dshpc-radius-md);} .dshpc-seg{background:var(--dshpc-seg-track);} .dshpc-seg--default{--seg-track:var(--dshpc-seg-track);--seg-thumb:var(--dshpc-surface-raised);border:0;padding:2px;background:var(--seg-track);} .dshpc-seg--inset{--seg-track:var(--dshpc-seg-track);--seg-thumb:var(--dshpc-surface-raised);border:0;padding:3px;background:var(--seg-track);} .dshpc-seg__item{appearance:none;display:inline-flex;align-items:center;gap:4px;box-sizing:border-box;height:calc(var(--dshpc-control-h-sm) - 6px);padding:0 12px;border:0;border-radius:var(--dshpc-radius-sm);background:transparent;color:var(--dshpc-fg-2);font-family:inherit;font-size:var(--dshpc-font-xs);font-weight:500;white-space:nowrap;cursor:pointer;flex:none;transition:color var(--dshpc-dur-fast) var(--dshpc-ease),background-color var(--dshpc-dur-fast) var(--dshpc-ease),box-shadow var(--dshpc-dur-fast) var(--dshpc-ease);} .dshpc-seg--md .dshpc-seg__item{height:calc(var(--dshpc-control-h-md) - 6px);} .dshpc-seg--lg .dshpc-seg__item{height:calc(var(--dshpc-control-h-lg) - 6px);} .dshpc-seg__item:hover:not([aria-pressed='true']):not(:disabled){color:var(--dshpc-fg);} .dshpc-seg__item[aria-pressed='true']{background:var(--seg-thumb);box-shadow:var(--dshpc-shadow-raised);color:var(--dshpc-fg);font-weight:600;} .dshpc-seg__item:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:-2px;} .dshpc-seg__item:disabled{cursor:default;opacity:.4;} /* 段内角标(如「异常」的数量):语义色实面 + 反白字,0 由组件侧不渲染。必须是正圆(用户 2026-10-03)。 */ .dshpc-seg__badge{display:inline-flex;align-items:center;justify-content:center;flex:none;width:16px;height:16px;padding:0;overflow:hidden;border-radius:50%;background:var(--dshpc-danger);color:var(--dshpc-on-signal);font-size:10px;line-height:16px;font-weight:500;font-variant-numeric:tabular-nums;} /* 段内中性计数(如筛选条「全部 11」):纯文字、无底无边(对齐 task-ledger .dtl-seg__num 拍板口径);0 由组件侧不渲染。 */ .dshpc-seg__count{display:inline;flex:none;margin-left:3px;padding:0;border:0;border-radius:0;background:none;color:var(--dshpc-fg-3);font-size:10px;line-height:1;font-weight:400;font-variant-numeric:tabular-nums;} /* block:撑满父宽(表单行用),各段等分 */ .dshpc-seg--block{display:flex;width:100%;} .dshpc-seg--block .dshpc-seg__item{flex:1 1 auto;justify-content:center;} /* weekday:星期多选方块。基础插件的特殊化定制(用户 2026-10-01:原 WeekdayPicker 即「蓝底 + 近似方形」): 每格正方形(宽 = 段高)、选中品牌蓝反白字、**无外描边**(2026-10-18 重申)、 方块之间间距 gap:6px(2026-10-18:不再 2px 挤成一坨 —— 这一条兄弟没有、是用户额外要的)。 */ .dshpc-seg--weekday{--seg-track:var(--dshpc-seg-track);gap:6px;border:0;padding:3px;background:var(--seg-track);} .dshpc-seg--weekday .dshpc-seg__item{width:calc(var(--dshpc-control-h-lg) - 8px);padding:0;justify-content:center;} .dshpc-seg--weekday .dshpc-seg__item[aria-pressed='true']{background:var(--dshpc-business);color:var(--dshpc-fg-inverse);box-shadow:var(--dshpc-shadow-raised);} @media (prefers-reduced-motion: reduce){.dshpc-seg__item{transition:none;}}
3
- /* 实验探针(2026-10-19,定位后删):与 .dshpc-seg 基础规则逐字同内容、只换类名。
4
- 诊断里查它活不活:活 ⇒ 触雷的是「dshpc-seg」这个名字本身,不是内容。 */
5
- .dshpc-segprobe{display:inline-flex;align-items:center;gap:2px;padding:2px;border-radius:var(--dshpc-radius-md);background:var(--dshpc-seg-track);} `;
6
- export const BUTTON_CSS = ` /* ── 按钮 / 图标钮 P2 ─────────────────────────────────────────────────── 与 Segmented 同一条高度纪律:--dshpc-control-h-sm(24) / -md(28) / -lg(32), 有边框的 variant 用 1px 真边框 + 内部 padding 补回,**有边 / 无边同高**。 三条受控轴(2026-10-19 重写,对齐主流 UI 框架的分类口径): · variant —— 外观档 = 形态 + 语义色,共 10 档: primary / secondary / outline / ghost / danger / success / warning / info / danger-outline(红字描边)/ link(行内链接) · size —— sm / md / lg · block —— 撑满父宽 每一档**只填 5 个局部变量**(--btn-bg / -fg / -border / -bg-hover / -bg-active), 结构与交互只有上面这一份;任何档位都不许再写一遍 display/height/padding。 自定义颜色(Button 的 color 参数)同样只覆盖这 5 个变量(token 覆盖,不是新皮肤)。 ⚠️ hover 不再用 opacity 压一层(用户 2026-10-19:「黑色和红色的按钮移上去变化太小, 完全感觉不到颜色变了」)⇒ 走 --dshpc-*-hover / -active 的明确混色,见 tokens-css.ts。 */ .dshpc-btn{--btn-bg:transparent;--btn-fg:var(--dshpc-fg);--btn-border:transparent;--btn-pad:12px; --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);--btn-fg-hover:var(--btn-fg); appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:6px; box-sizing:border-box;border:1px solid var(--btn-border);border-radius:var(--dshpc-radius-md); background-color:var(--btn-bg);color:var(--btn-fg);font-family:inherit;font-weight:500;white-space:nowrap;cursor:pointer; transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),border-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease),box-shadow var(--dshpc-dur-fast) var(--dshpc-ease),transform var(--dshpc-dur-fast) var(--dshpc-ease);} .dshpc-btn--sm{--btn-pad:10px;height:var(--dshpc-control-h-sm);padding:0 var(--btn-pad);font-size:var(--dshpc-font-sm);line-height:1;} .dshpc-btn--md{--btn-pad:12px;height:var(--dshpc-control-h-md);padding:0 var(--btn-pad);font-size:var(--dshpc-font-md);line-height:1;} .dshpc-btn--lg{--btn-pad:14px;height:var(--dshpc-control-h-lg);padding:0 var(--btn-pad);font-size:var(--dshpc-font-md);line-height:1;} /* block:撑满父宽(表单底栏 / 抽屉底部的主操作) */ .dshpc-btn--block{display:flex;width:100%;} /* block + 前置图标 ⇒ 文字视觉居中(2026-10-19 用户点名): 内容组 [图标 + 间距 + 文字] 整体在盒内居中时,**文字**的中心会被图标推右半格。 把右内边距补上「图标宽 + 间距」,可用盒随之左移同量 ⇒ 文字落回视觉中心,图标贴左侧。 图标宽按 1.2em 估(官方图标 14/16px vs 字号 12/13px),em 随字号档自动缩放。 */ .dshpc-btn--block.dshpc-btn--icon-start{padding-right:calc(var(--btn-pad) + 1.2em + 6px);} .dshpc-btn__icon,.dshpc-btn__icon-end{display:inline-flex;align-items:center;justify-content:center;flex:none;line-height:0;} .dshpc-btn__icon svg,.dshpc-btn__icon-end svg{display:block;margin:0;} /* loading:不换 DOM 结构,只在文案前插一个同色小圈(尺寸随字号,缩放不依赖常量) */ .dshpc-btn__spinner{display:block;flex:none;width:12px;height:12px;box-sizing:border-box; border:1.5px solid currentColor;border-right-color:transparent;border-radius:999px; animation:dshpc-btn-spin .7s linear infinite;} /* shortcut: 12px 是固定值,不随按钮字号缩放;要更大就改这一处。 */ @keyframes dshpc-btn-spin{to{transform:rotate(360deg)}} /* 交互态:颜色变化写在变量上 ⇒ 所有档位一次生效,且变化幅度由 token 决定(够明显) */ .dshpc-btn:hover:not(:disabled){background-color:var(--btn-bg-hover);color:var(--btn-fg-hover);} .dshpc-btn:active:not(:disabled){background-color:var(--btn-bg-active);transform:translateY(1px);} .dshpc-btn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;} .dshpc-btn:disabled{cursor:default;opacity:.5;} .dshpc-btn--primary{--btn-bg:var(--dshpc-accent);--btn-fg:var(--dshpc-fg-inverse); --btn-bg-hover:var(--dshpc-accent-hover);--btn-bg-active:var(--dshpc-accent-active);} /* secondary:中性实心(灰面),用于「取消 / 次要」这类与主操作并排的按钮 */ .dshpc-btn--secondary{--btn-bg:var(--dshpc-hover);--btn-fg:var(--dshpc-fg); --btn-bg-hover:var(--dshpc-active);--btn-bg-active:var(--dshpc-active);} .dshpc-btn--outline{--btn-bg:var(--dshpc-surface-1);--btn-border:var(--dshpc-border-strong); --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);} .dshpc-btn--ghost{--btn-fg:var(--dshpc-fg-2);--btn-fg-hover:var(--dshpc-fg); --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);} .dshpc-btn--danger{--btn-bg:var(--dshpc-danger);--btn-fg:var(--dshpc-on-signal); --btn-bg-hover:var(--dshpc-danger-hover);--btn-bg-active:var(--dshpc-danger-active);} .dshpc-btn--success{--btn-bg:var(--dshpc-success);--btn-fg:var(--dshpc-on-signal); --btn-bg-hover:var(--dshpc-success-hover);--btn-bg-active:var(--dshpc-success-active);} .dshpc-btn--warning{--btn-bg:var(--dshpc-warning);--btn-fg:var(--dshpc-on-warning); --btn-bg-hover:var(--dshpc-warning-hover);--btn-bg-active:var(--dshpc-warning-active);} .dshpc-btn--info{--btn-bg:var(--dshpc-business);--btn-fg:var(--dshpc-on-signal); --btn-bg-hover:var(--dshpc-business-hover);--btn-bg-active:var(--dshpc-business-active);} /* danger-outline:红字描边(破坏性次要操作,如卡片上的「删除」)。 ⚠️ 旧修饰类 danger-ink 保留为别名(消费方可能还在挂),两者同一套皮肤。 */ .dshpc-btn--danger-outline,.dshpc-btn--danger-ink{--btn-border:var(--dshpc-danger);--btn-fg:var(--dshpc-danger); --btn-fg-hover:var(--dshpc-danger);--btn-bg-hover:var(--dshpc-danger-soft);--btn-bg-active:var(--dshpc-danger-soft);} /* link:行内文字链接型(会话 / 产出文件名),无底无边、品牌蓝、hover 下划线 */ .dshpc-btn--link{--btn-fg:var(--dshpc-link);--btn-fg-hover:var(--dshpc-link); --btn-bg-hover:transparent;--btn-bg-active:transparent; height:auto;padding:0;border:0;background:none;font-weight:400;text-align:left;} .dshpc-btn--link:hover:not(:disabled){text-decoration:underline;} /* 图标钮:纯图标,方形;尺寸档的宽高与同档文字按钮等高 */ .dshpc-iconbtn{appearance:none;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box; border:1px solid transparent;border-radius:var(--dshpc-radius-sm);background:transparent;color:var(--dshpc-fg-2); font-family:inherit;cursor:pointer;flex:none; transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),border-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease),opacity var(--dshpc-dur-fast) var(--dshpc-ease);} .dshpc-iconbtn--sm{width:var(--dshpc-control-h-sm);height:var(--dshpc-control-h-sm);font-size:var(--dshpc-font-sm);} .dshpc-iconbtn--md{width:var(--dshpc-control-h-md);height:var(--dshpc-control-h-md);font-size:var(--dshpc-font-md);} .dshpc-iconbtn--lg{width:var(--dshpc-control-h-lg);height:var(--dshpc-control-h-lg);font-size:var(--dshpc-font-md);} .dshpc-iconbtn--plain{color:var(--dshpc-fg-2);} .dshpc-iconbtn--outline{background:var(--dshpc-surface-1);border-color:var(--dshpc-border);color:var(--dshpc-fg-2);} .dshpc-iconbtn--danger{color:var(--dshpc-danger);} .dshpc-iconbtn:hover:not(:disabled){background:var(--dshpc-hover);color:var(--dshpc-fg);} .dshpc-iconbtn--danger:hover:not(:disabled){background:var(--dshpc-danger-soft);color:var(--dshpc-danger);} .dshpc-iconbtn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;} .dshpc-iconbtn:disabled{cursor:default;opacity:.4;} /* ── 行式文件按钮(图标 + 文件名)P2:**全站唯一实现**(2026-10-04 收编)────────── 用途:「产出物 / 附件」那种**一行一个文件**的清单项(基础信息右栏产出物清单、附件区、 执行记录页的展开区)。平时透明、**鼠标移上去才出浅底**(沿用用户 2026-10-03 定的观感)。 两个形态修饰类: --block 撑满父宽(清单里一项一行) --inline 内容宽(跟在文字后头,如附件行) 收编原因:这份皮肤此前只写在 task-list.tsx 的 TASK_LIST_CSS 里(旧名 .dshpc-info-out), 执行记录页展开区要用同一种观感 ⇒ 上提基础层,避免再出现「各写一份外观」(同名不同皮的坑刚踩过)。 */ .dshpc-filechip{appearance:none;-webkit-appearance:none;border:0;border-radius:var(--dshpc-radius-xs); background:transparent;color:var(--dshpc-fg);font:inherit;text-align:left;cursor:pointer;min-width:0; transition:background-color var(--dshpc-dur) var(--dshpc-ease);} .dshpc-filechip:hover:not(:disabled){background:var(--dshpc-chip-bg);} .dshpc-filechip:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px;} .dshpc-filechip:disabled{cursor:default;background:transparent;color:var(--dshpc-fg-3);} .dshpc-filechip--block{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box; padding:4px 6px;font-size:var(--dshpc-font-xs);} .dshpc-filechip--inline{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;font-size:var(--dshpc-font-sm);} @media (prefers-reduced-motion: reduce){.dshpc-btn,.dshpc-iconbtn,.dshpc-filechip{transition:none;}} `;
7
- export const FIELD_CSS = ` /* ── 输入类 P3 ────────────────────────────────────────────────────────── */ .dshpc-input{box-sizing:border-box;border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md); background:var(--dshpc-surface-1);color:var(--dshpc-fg);font-family:inherit;outline:none; transition:border-color var(--dshpc-dur-fast) var(--dshpc-ease),box-shadow var(--dshpc-dur-fast) var(--dshpc-ease);} .dshpc-input--sm{height:var(--dshpc-control-h-sm);padding:0 8px;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);} .dshpc-input--md{height:var(--dshpc-control-h-md);padding:0 10px;font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);} .dshpc-input--lg{height:var(--dshpc-control-h-lg);padding:0 12px;font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);} .dshpc-input::placeholder{color:var(--dshpc-fg-dim);} .dshpc-input:focus{border-color:var(--dshpc-focus);box-shadow:0 0 0 1px var(--dshpc-focus);} .dshpc-input--error{border-color:var(--dshpc-danger);} .dshpc-input:disabled{cursor:default;opacity:.5;} .dshpc-pfx{display:inline-flex;align-items:center;box-sizing:border-box;overflow:hidden; border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);background:var(--dshpc-surface-1);color:var(--dshpc-fg);} .dshpc-pfx--sm{height:var(--dshpc-control-h-sm);} .dshpc-pfx--md{height:var(--dshpc-control-h-md);} .dshpc-pfx--lg{height:var(--dshpc-control-h-lg);} /* md / lg 档字号跟档走(与同档下拉同字号):此前写死 sm(12px),同排下拉是 13px ⇒ 显得「input 字小」。 */ .dshpc-pfx--md .dshpc-pfx__label,.dshpc-pfx--lg .dshpc-pfx__label{font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);} .dshpc-pfx--md .dshpc-pfx__input,.dshpc-pfx--lg .dshpc-pfx__input{font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);} .dshpc-pfx--error{border-color:var(--dshpc-danger);} .dshpc-pfx:focus-within{border-color:var(--dshpc-focus);box-shadow:0 0 0 1px var(--dshpc-focus);} .dshpc-pfx__label{padding:0 8px;color:var(--dshpc-fg-2);font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);white-space:nowrap;border-right:1px solid var(--dshpc-border);} .dshpc-pfx__input{flex:1 1 auto;min-width:0;height:100%;padding:0 8px;border:0;background:transparent;color:var(--dshpc-fg); font-family:inherit;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);outline:none;} .dshpc-pfx__input::placeholder{color:var(--dshpc-fg-dim);} .dshpc-num{display:inline-flex;align-items:center;justify-content:space-between;box-sizing:border-box;overflow:hidden; border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);background:var(--dshpc-surface-1);color:var(--dshpc-fg);} /* 中段:数字 + 后缀成组居中;容器被消费端拉宽时吃掉全部余量,两端 − / + 因此钉死在左右边缘。 */ .dshpc-num__mid{display:flex;align-items:center;justify-content:center;flex:1 1 auto;min-width:0;} .dshpc-num--sm{height:var(--dshpc-control-h-sm);} .dshpc-num--md{height:var(--dshpc-control-h-md);} .dshpc-num--lg{height:var(--dshpc-control-h-lg);} .dshpc-num--md .dshpc-num__input,.dshpc-num--lg .dshpc-num__input{font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);} .dshpc-num--md .dshpc-num__suffix,.dshpc-num--lg .dshpc-num__suffix{font-size:var(--dshpc-font-md);} .dshpc-num--disabled{opacity:.5;} .dshpc-num__input{width:36px;height:100%;padding:0 2px;border:0;background:transparent;color:var(--dshpc-fg); font-family:inherit;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);text-align:center;outline:none;} .dshpc-num__suffix{padding:0 6px;color:var(--dshpc-fg-2);font-size:var(--dshpc-font-sm);white-space:nowrap;} .dshpc-num .dshpc-iconbtn{border-radius:0;color:var(--dshpc-fg-2);flex:none;} /* 官方 Switch 包装统一:选中 = success 绿。 (合并原先 task-editor-css / task-list 两处就地覆盖;选择器带包装类 + role,特异性高于官方。) */ .dshpc-switch button[role='switch'][aria-checked='true']{background:var(--dshpc-success);} /* 多行文本输入(提示词等,P3):卡内无边框(视觉重心在整张卡上),占位色走 dimmed;校验不通过描红盒。 (从 task-editor-css 的 .dshpc-ed-prompt 上提而来;业务文件不再自写 textarea 皮肤。) */ .dshpc-textarea{display:block;width:100%;box-sizing:border-box;min-height:132px;padding:2px;border:none;outline:none;background:0 0;color:var(--dshpc-fg);font:inherit;font-size:var(--dshpc-font-lg);line-height:1.6;resize:vertical;} .dshpc-textarea::placeholder{color:var(--dshpc-fg-dim);} .dshpc-textarea--error{box-shadow:0 0 0 1px var(--dshpc-danger);} /* 拖拽分隔条(编辑分栏 / 预览 dock 共用,U20 #3):6px 命中区,col-resize,不画线,hover/按下浮出浅带。 具体 z-index 由 .dshpc-ed-resizer / .dshpc-sv-resizer 各自补。 */ .dshpc-resizer{position:absolute;top:0;bottom:0;left:0;width:6px;cursor:col-resize;background:0 0;touch-action:none;user-select:none;} .dshpc-resizer:hover,.dshpc-resizer:active{background:var(--dshpc-hover,rgba(38,49,72,.06));} @media (prefers-reduced-motion: reduce){.dshpc-input,.dshpc-pfx{transition:none;}} `;
8
- export const DATETIME_CSS = ` /* ── 日期 / 时间 P4 ───────────────────────────────────────────────────── */ .dshpc-dtf-wrap{display:inline-flex;position:relative;min-width:0;} /* ⚠️ 边框粗细 / 圆角必须与下拉锚点(dshpc-ed-field 的 fieldButtonStyle)完全一致 (用户 2026-10-02 点名:同排的日期框与下拉框看着不是一套)⇒ 这里也是 0.5px + radius-md。 */ .dshpc-dtf{display:inline-flex;align-items:center;gap:6px;box-sizing:border-box;height:var(--dshpc-control-h-lg); min-width:0;max-width:100%;padding:0 8px;border:0.5px solid var(--dshpc-border-heavy);border-radius:var(--dshpc-radius-md); background:var(--dshpc-surface-1);color:var(--dshpc-fg);font:inherit;font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md); cursor:pointer;transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),border-color var(--dshpc-dur-fast) var(--dshpc-ease);} /* 日期 / 时间锚点:三档高度(默认 lg=32)。base 已含 lg 高度作兜底,下面三档按 size 覆盖。 */ .dshpc-dtf--sm{height:var(--dshpc-control-h-sm);padding:0 6px;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);} .dshpc-dtf--md{height:var(--dshpc-control-h-md);padding:0 8px;font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);} .dshpc-dtf--lg{height:var(--dshpc-control-h-lg);padding:0 8px;font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);} .dshpc-dtf:hover:not(:disabled){background:var(--dshpc-hover);} .dshpc-dtf:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;} .dshpc-dtf:disabled{cursor:not-allowed;opacity:.6;} .dshpc-dtf__label{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;} .dshpc-dtf__label--ph{color:var(--dshpc-fg-dim);} .dshpc-dtf__icon{display:inline-flex;width:16px;height:16px;align-items:center;justify-content:center;flex:none;color:var(--dshpc-fg-3);} .dshpc-layer{position:fixed;z-index:var(--dshpc-z-menu);box-sizing:border-box;padding:8px;background:var(--dshpc-surface-1); box-shadow:var(--dshpc-shadow-2);border-radius:var(--dshpc-radius-md);color:var(--dshpc-fg);font-size:var(--dshpc-font-md);} .dshpc-cal__head{display:flex;align-items:center;justify-content:space-between;gap:4px;margin-bottom:4px;} .dshpc-cal__title{flex:1 1 auto;text-align:center;font-size:var(--dshpc-font-md);font-weight:600;color:var(--dshpc-fg);} .dshpc-cal__grid{display:grid;grid-template-columns:repeat(7,32px);gap:2px;} .dshpc-cal__weekday{height:24px;display:flex;align-items:center;justify-content:center;font-size:var(--dshpc-font-sm);color:var(--dshpc-fg-3);} .dshpc-cal__cell{width:32px;height:32px;padding:0;display:flex;align-items:center;justify-content:center; border:1px solid transparent;border-radius:var(--dshpc-radius-md);background:transparent;color:var(--dshpc-fg); font:inherit;font-size:var(--dshpc-font-md);cursor:pointer; transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease);} .dshpc-cal__cell--hover{background:var(--dshpc-hover);} .dshpc-cal__cell--out{color:var(--dshpc-fg-dim);} .dshpc-cal__cell--today{border-color:var(--dshpc-business);} .dshpc-cal__cell[aria-pressed='true']{background:var(--dshpc-accent);color:var(--dshpc-fg-inverse);} .dshpc-cal__foot{margin-top:6px;padding-top:6px;border-top:1px solid var(--dshpc-border);} .dshpc-time__cols{display:flex;gap:4px;} .dshpc-time__list{width:56px;max-height:196px;overflow-y:auto;display:flex;flex-direction:column;gap:2px;} .dshpc-time__opt{padding:5px 0;border:0;border-radius:var(--dshpc-radius-sm);background:transparent;color:var(--dshpc-fg-2); font:inherit;font-size:var(--dshpc-font-md);cursor:pointer;transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease);} .dshpc-time__opt[aria-selected='true']{background:var(--dshpc-hover);color:var(--dshpc-fg);font-weight:600;} .dshpc-time__foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:6px;padding-top:6px;border-top:1px solid var(--dshpc-border);} @media (prefers-reduced-motion: reduce){.dshpc-dtf,.dshpc-cal__cell,.dshpc-time__opt{transition:none;}} `;
9
- export const SELECT_CSS = ` /* 下拉 / 日历 / 时分锚点:键盘可达性描边 + 校验描红(类名从业务层沿用,皮肤归位基础层) */ .dshpc-ed-field:focus-visible{outline:2px solid var(--dshpc-business);outline-offset:1px;} .dshpc-ed-field--error{border-color:var(--dshpc-danger)!important;box-shadow:0 0 0 1px var(--dshpc-danger);} /* 整行下拉:官方 Menu 的包装 span 是 inline-flex(shrink-to-fit),要连它一起撑满 */ .dshpc-ed-selectwrap{width:100%;} /* 省略号三件套(ui-style-guide §三「待抽象 #1」的收敛点):**新代码一律挂这个类**,不再各写一遍。 ⚠️ 已有 19 处旧写法待逐步收编(2026-10-04 起新增的调用点不许再手写这三条属性)。 */ .dshpc-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;} /* 跑马灯文本(MarqueeText):双层——外层只裁剪,内层才 transform 滚动;非 hover 内层自带省略号 */ .dshpc-mq{display:block;overflow:hidden;white-space:nowrap;} .dshpc-mq .dshpc-mq-in{display:inline-block;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis;vertical-align:top;} /* ⚠️ 跑法(用户 2026-10-03 拍板):**跑一遍、停在尾字**(播放 1 次 + forwards),不来回弹、不无限跑。 滚距 = 精确溢出量 ⇒ 停下时最后一个字正好贴右缘,**不会跑进黑块**(黑块是旧手写版把 内层盒子裁了、按「半截文本」平移导致的)。鼠标移开 ⇒ :hover 失效 ⇒ 自动复位回省略号态。 */ .dshpc-mq-run:hover .dshpc-mq-in{max-width:none;overflow:visible;animation:dshpc-mq-scroll var(--dshpc-mq-dur,6s) linear .4s 1 forwards;} @keyframes dshpc-mq-scroll{from{transform:translateX(0)}to{transform:translateX(var(--dshpc-mq-dist,-40px))}} `;
10
- export const LOADING_CSS = ` /* 运行中 / loading 的活动指示:三个小方块依次脉动。 */ @keyframes dshpc-run-block { 0%, 80%, 100% { opacity: 0.25; transform: scale(0.8) } 40% { opacity: 1; transform: scale(1) } } .dshpc-run-blocks { display: inline-flex; align-items: center; gap: 3px; } .dshpc-run-blocks > i { width: 5px; height: 5px; border-radius: 1px; background: currentColor; animation: dshpc-run-block 1.2s ease-in-out infinite; } .dshpc-run-blocks > i:nth-child(2) { animation-delay: 0.15s; } .dshpc-run-blocks > i:nth-child(3) { animation-delay: 0.3s; } @media (prefers-reduced-motion: reduce) { .dshpc-run-blocks > i { animation: none; opacity: 1; } } `;
11
- export const BACK_TO_TOP_CSS = ` /* 回到顶部悬浮钮:圆钮、实面、投影;默认隐身,滚过阈值加 .is-visible 才显形。 横向 left 由组件按主内容列右缘实时算出(贴在其右侧外侧),不写死。 */ .dshpc-backtotop{ position:fixed; bottom:var(--dshpc-space-4); z-index:var(--dshpc-z-dock); width:44px;height:44px; display:inline-flex;align-items:center;justify-content:center; padding:0;margin:0; box-sizing:border-box; border:1px solid var(--dshpc-border); border-radius:50%; background:var(--dshpc-solid); color:var(--dshpc-on-solid); box-shadow:var(--dshpc-shadow-2); cursor:pointer; opacity:0; transform:translateY(8px) scale(.92); transition:opacity var(--dshpc-dur) var(--dshpc-ease), transform var(--dshpc-dur) var(--dshpc-ease), background-color var(--dshpc-dur-fast) var(--dshpc-ease); pointer-events:none; } .dshpc-backtotop.is-visible{opacity:1;transform:translateY(0) scale(1);pointer-events:auto;} .dshpc-backtotop:hover{background:var(--dshpc-hover);} .dshpc-backtotop:active{background:var(--dshpc-active);} .dshpc-backtotop:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;} @media (prefers-reduced-motion: reduce){ .dshpc-backtotop{transition:opacity var(--dshpc-dur-fast) linear;transform:none;} } `;
12
- export const HINT_CSS = ` /* ── 问号提示 P4(用户 2026-10-18:对齐真实插件 HelpButton——**带圈的问号图标**)── 本体 14px 细圈 + 圈内 ?,颜色 fg-3、hover 只提亮不加底(与 dshpc-ed-help 同规矩)。 气泡不在本文件:2026-10-19 用户拍板「问号必须用官方 Tooltip 那一个」⇒ 气泡由注入的 官方组件渲染(src/ui/tooltip.ts),这里只管问号图标本身。 */ .dshpc-hint{display:inline-flex;align-items:center;justify-content:center;flex:none; box-sizing:border-box;width:14px;height:14px;padding:0;border:1px solid currentColor;border-radius:50%;background:transparent; color:var(--dshpc-fg-3);font-family:inherit;font-size:8px;font-weight:600;line-height:12px;cursor:help;vertical-align:middle; transition:color var(--dshpc-dur-fast) var(--dshpc-ease);} .dshpc-hint:hover,.dshpc-hint:focus-visible{color:var(--dshpc-fg);background:0 0;} .dshpc-hint:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px;} `;
2
+ // ⚠️ 曾有过的错误结论(2026-10-19 已查清,勿回潮):
3
+ // 「宿主会吃掉 token 块之后的第一条 CSS 规则」是**误判**,因此加的 `.dshpc-css-guard`
4
+ // 牺牲规则也已删除。真因见 `docs/design/external/dsh-host.md` §9:tokens 模板字符串
5
+ // 结尾多了一个反斜杠,在注入文本里留下字面反引号,把**紧随其后的那条规则的选择器**污染成
6
+ // 匹配不到任何元素的怪选择器(规则仍在 CSSOM 里,只是永不生效)——守卫当年只是替它挨刀。
7
+ // 现在由 `test/css-contract.test.mjs` 盯「CSS 文本里不得出现反引号 / 反斜杠」。
8
+ export { SEGMENTED_CSS } from './controls/segmented-css.generated.js';
9
+ export { BUTTON_CSS } from './controls/button-css.generated.js';
10
+ export { FIELD_CSS } from './controls/field-css.generated.js';
11
+ export { LOADING_CSS } from './controls/loading-css.generated.js';
12
+ export { BACK_TO_TOP_CSS } from './controls/back-to-top-css.generated.js';
13
+ export { HINT_CSS } from './controls/hint-css.generated.js';
14
+ export { DATETIME_CSS } from './controls/datetime-css.generated.js';
13
15
  //# sourceMappingURL=controls-css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"controls-css.js","sourceRoot":"","sources":["../../src/ui/controls-css.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,MAAM,CAAC,MAAM,aAAa,GAAG;;;qJAGwH,CAAA;AAErJ,MAAM,CAAC,MAAM,UAAU,GAAG,isPAAisP,CAAA;AAE3tP,MAAM,CAAC,MAAM,SAAS,GAAG,inJAAinJ,CAAA;AAE1oJ,MAAM,CAAC,MAAM,YAAY,GAAG,06HAA06H,CAAA;AAEt8H,MAAM,CAAC,MAAM,UAAU,GAAG,ktCAAktC,CAAA;AAE5uC,MAAM,CAAC,MAAM,WAAW,GAAG,wmBAAwmB,CAAA;AAEnoB,MAAM,CAAC,MAAM,eAAe,GAAG,0mCAA0mC,CAAA;AAEzoC,MAAM,CAAC,MAAM,QAAQ,GAAG,gxBAAgxB,CAAA"}
1
+ {"version":3,"file":"controls-css.js","sourceRoot":"","sources":["../../src/ui/controls-css.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,mCAAmC;AACnC,8DAA8D;AAC9D,kEAAkE;AAClE,gDAAgD;AAChD,kDAAkD;AAClD,4DAA4D;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA"}
package/dist/ui/css.d.ts CHANGED
@@ -1,5 +1,10 @@
1
1
  import { type StyleKit } from '../design/index.js';
2
2
  export declare const CONTROLS_DOMAIN = "controls";
3
+ /**
4
+ * 全部控件样式(数组顺序不可调换:同特异性规则后注入者胜出)。
5
+ * 导出仅供 `test/css-contract.test.mjs` 做文本自检,不作为对外 API。
6
+ */
7
+ export declare const CONTROLS_CSS: string;
3
8
  export declare function setStyleKit(kit: StyleKit): void;
4
9
  export declare function getStyleKit(): StyleKit;
5
10
  /** 登记 token + 控件样式并确保挂载(幂等)。 */
@@ -1 +1 @@
1
- {"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/ui/css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAkBlE,eAAO,MAAM,eAAe,aAAa,CAAA;AA4BzC,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAE/C;AAED,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAED,gCAAgC;AAChC,wBAAgB,cAAc,CAAC,GAAG,GAAE,QAAkB,GAAG,IAAI,CAG5D"}
1
+ {"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/ui/css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAoBlE,eAAO,MAAM,eAAe,aAAa,CAAA;AAEzC;;;GAGG;AACH,eAAO,MAAM,YAAY,QAiBb,CAAA;AAWZ,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAE/C;AAED,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAED,gCAAgC;AAChC,wBAAgB,cAAc,CAAC,GAAG,GAAE,QAAkB,GAAG,IAAI,CAG5D"}
package/dist/ui/css.js CHANGED
@@ -1,27 +1,36 @@
1
1
  import { createStyleKit } from '../design/index.js';
2
- import { BACK_TO_TOP_CSS, BUTTON_CSS, DATETIME_CSS, FIELD_CSS, HINT_CSS, LOADING_CSS, SEGMENTED_CSS, SELECT_CSS, } from './controls-css.js';
2
+ import { BACK_TO_TOP_CSS, BUTTON_CSS, DATETIME_CSS, FIELD_CSS, HINT_CSS, LOADING_CSS, SEGMENTED_CSS, } from './controls-css.js';
3
+ import { MARQUEE_CSS } from './marquee-css.js';
3
4
  import { PICKER_CSS } from './picker-css.js';
4
5
  import { FEEDBACK_CSS } from './feedback-css.js';
5
6
  import { CARD_CSS } from './card-css.js';
6
7
  import { CHIP_CSS } from './chip-css.js';
8
+ import { CODE_VIEWER_CSS } from './code-viewer-css.js';
9
+ import { PANEL_DOCK_CSS } from './panel-dock-css.js';
7
10
  import { EXPLORER_CSS } from '../explorer/explorer-css.js';
8
11
  import { SESSION_CSS } from '../session/session-css.js';
9
12
  export const CONTROLS_DOMAIN = 'controls';
10
- const CONTROLS_CSS = [
13
+ /**
14
+ * 全部控件样式(数组顺序不可调换:同特异性规则后注入者胜出)。
15
+ * 导出仅供 `test/css-contract.test.mjs` 做文本自检,不作为对外 API。
16
+ */
17
+ export const CONTROLS_CSS = [
11
18
  SEGMENTED_CSS,
12
19
  BUTTON_CSS,
13
20
  FIELD_CSS,
14
- DATETIME_CSS,
15
- SELECT_CSS,
16
21
  LOADING_CSS,
17
22
  BACK_TO_TOP_CSS,
18
23
  HINT_CSS,
19
24
  PICKER_CSS,
25
+ DATETIME_CSS,
20
26
  FEEDBACK_CSS,
21
27
  EXPLORER_CSS,
22
28
  SESSION_CSS,
23
29
  CARD_CSS,
24
30
  CHIP_CSS,
31
+ MARQUEE_CSS,
32
+ PANEL_DOCK_CSS,
33
+ CODE_VIEWER_CSS,
25
34
  ].join('\n');
26
35
  /**
27
36
  * 当前插件的样式设施。
@@ -1 +1 @@
1
- {"version":3,"file":"css.js","sourceRoot":"","sources":["../../src/ui/css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,MAAM,oBAAoB,CAAA;AAClE,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,WAAW,EACX,aAAa,EACb,UAAU,GACX,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAEvD,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAA;AAEzC,MAAM,YAAY,GAAG;IACnB,aAAa;IACb,UAAU;IACV,SAAS;IACT,YAAY;IACZ,UAAU;IACV,WAAW;IACX,eAAe;IACf,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,QAAQ;IACR,QAAQ;CACT,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEZ;;;;;;GAMG;AACH,IAAI,OAAO,GAAa,cAAc,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAA;AAEpE,MAAM,UAAU,WAAW,CAAC,GAAa;IACvC,OAAO,GAAG,GAAG,CAAA;AACf,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,cAAc,CAAC,MAAgB,OAAO;IACpD,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;IAC1C,GAAG,CAAC,UAAU,CAAC,eAAe,EAAE,YAAY,CAAC,CAAA;AAC/C,CAAC"}
1
+ {"version":3,"file":"css.js","sourceRoot":"","sources":["../../src/ui/css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,MAAM,oBAAoB,CAAA;AAClE,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,WAAW,EACX,aAAa,GACd,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAEvD,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAA;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,aAAa;IACb,UAAU;IACV,SAAS;IACT,WAAW;IACX,eAAe;IACf,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,cAAc;IACd,eAAe;CAChB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEZ;;;;;;GAMG;AACH,IAAI,OAAO,GAAa,cAAc,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAA;AAEpE,MAAM,UAAU,WAAW,CAAC,GAAa;IACvC,OAAO,GAAG,GAAG,CAAA;AACf,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,cAAc,CAAC,MAAgB,OAAO;IACpD,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;IAC1C,GAAG,CAAC,UAAU,CAAC,eAAe,EAAE,YAAY,CAAC,CAAA;AAC/C,CAAC"}
@@ -0,0 +1,100 @@
1
+ /** 时间精度:day 只选日期;hour / minute / second 依次多一级时间选择。 */
2
+ export type DateTimePrecision = 'day' | 'hour' | 'minute' | 'second';
3
+ /** 本地时区的日期时间各部分(毫秒单独存:结束端补全需要 .999)。 */
4
+ export interface DateTimeParts {
5
+ year: number;
6
+ month: number;
7
+ day: number;
8
+ hour: number;
9
+ minute: number;
10
+ second: number;
11
+ ms: number;
12
+ }
13
+ /** 月历网格中的一格。 */
14
+ export interface DayCell {
15
+ /** `YYYY-MM-DD`(本地日历日,用于比对 / 回填)。 */
16
+ iso: string;
17
+ year: number;
18
+ month: number;
19
+ day: number;
20
+ /** 是否属于当前展示月(false = 前后月的补位格)。 */
21
+ inMonth: boolean;
22
+ /** 0 = 周一 … 6 = 周日(周一起排)。 */
23
+ weekday: number;
24
+ }
25
+ /** 时 / 分 / 秒三个步进列。 */
26
+ export type StepUnit = 'hour' | 'minute' | 'second';
27
+ /** 日历端选中的日期(可空:时间允许先于日期选,「确定」时才算账)。 */
28
+ export interface DayRef {
29
+ year: number;
30
+ month: number;
31
+ day: number;
32
+ }
33
+ /** 时间部分恒存在(默认零);没选日期时步进照样能调。 */
34
+ export interface TimeParts {
35
+ hour: number;
36
+ minute: number;
37
+ second: number;
38
+ ms: number;
39
+ }
40
+ /** 一端的草稿:日期(可空)+ 时间(恒存在)。 */
41
+ export interface EndDraft {
42
+ day: DayRef | null;
43
+ time: TimeParts;
44
+ }
45
+ /**
46
+ * 本地 ISO(`YYYY-MM-DDTHH:mm:ss.SSS`,无时区后缀)→ 各部分。
47
+ * 不存在的日期(2026-02-30 / 2026-13-01)经 Date 反向校验后返回 null。
48
+ */
49
+ export declare function parseDateTime(iso: string): DateTimeParts | null;
50
+ /**
51
+ * 各部分 → 本地 ISO。毫秒恒三位:数据库若只收「到秒」,`23:59:59.999` 被截成
52
+ * `23:59:59` 仍是当天最后一秒,语义不坏(优雅降级,调用方无需特殊处理)。
53
+ */
54
+ export declare function formatDateTimeIso(p: DateTimeParts): string;
55
+ /** 各部分 → 本地毫秒时间戳(仅用于比较,不涉及时区换算)。 */
56
+ export declare function partsToMs(p: DateTimeParts): number;
57
+ /** 本地毫秒时间戳 → 各部分。 */
58
+ export declare function msToParts(ms: number): DateTimeParts;
59
+ /** 当前时刻。 */
60
+ export declare function nowParts(): DateTimeParts;
61
+ /** 本地 ISO → 一端草稿(日期 / 时间分离);解析失败或空 ⇒ 日期为空、时间归零。 */
62
+ export declare function toEndDraft(iso: string | null | undefined): EndDraft;
63
+ /** 一端草稿 → 完整时刻;**没选日期 ⇒ null**(调用方据此不传数据)。 */
64
+ export declare function partsOf(e: EndDraft): DateTimeParts | null;
65
+ /**
66
+ * 「现在」按钮的时间部分:按精度截断(day ⇒ 全零;hour ⇒ H:00:00;
67
+ * minute ⇒ H:M:00;second ⇒ 完整当前时刻)。
68
+ */
69
+ export declare function nowTimeFor(precision: DateTimePrecision): TimeParts;
70
+ /**
71
+ * 起始端补全:未选的时间单位归零。
72
+ * day ⇒ `00:00:00.000`;hour ⇒ `H:00:00.000`;minute ⇒ `H:M:00.000`;second ⇒ ms 归零。
73
+ */
74
+ export declare function floorToPrecision(p: DateTimeParts, precision: DateTimePrecision): DateTimeParts;
75
+ /**
76
+ * 结束端补全:未选的时间单位拉到最大。
77
+ * day ⇒ `23:59:59.999`;hour ⇒ `H:59:59.999`;minute ⇒ `H:M:59.999`;
78
+ * second ⇒ 精确值不动(用户显式选到秒,不猜)。
79
+ */
80
+ export declare function ceilToPrecision(p: DateTimeParts, precision: DateTimePrecision): DateTimeParts;
81
+ /**
82
+ * 6×7 固定月历网格,周一起排;补位格给真实日期并标 `inMonth: false`。
83
+ * 42 格恒定 ⇒ 弹层高度不随月份跳动。
84
+ */
85
+ export declare function buildMonthCells(year: number, month: number): DayCell[];
86
+ /** 月历标题:zh `2026年10月`;en `October 2026`。 */
87
+ export declare function monthCaption(year: number, month: number, locale: 'zh' | 'en'): string;
88
+ /** 星期表头(周一起排)。 */
89
+ export declare function weekdayLabels(locale: 'zh' | 'en'): readonly string[];
90
+ /** 步进 ±1 循环(23→0、59→0):免去用户点 60 次选分钟。 */
91
+ export declare function stepUnit(value: number, unit: StepUnit, delta: number): number;
92
+ /** 步进列的上限(hour 23 / minute 59 / second 59)。 */
93
+ export declare function stepMax(unit: StepUnit): number;
94
+ /** 把键入 / 滚轮得到的原始值收进合法范围(NaN 归 0)。 */
95
+ export declare function clampUnit(value: number, unit: StepUnit): number;
96
+ /** 时间段是否成立(起 ≤ 止;任一端解析失败 ⇒ 不成立)。 */
97
+ export declare function rangeIsValid(startIso: string, endIso: string): boolean;
98
+ /** 两个时刻是否同一本地日历日。 */
99
+ export declare function sameLocalDay(a: DateTimeParts, b: DateTimeParts): boolean;
100
+ //# sourceMappingURL=datetime-logic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datetime-logic.d.ts","sourceRoot":"","sources":["../../src/ui/datetime-logic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,193 @@
1
+ // 日期时间选择器的纯逻辑(与 React 运行时无关,便于 node 单测;React 只进类型引用,编译期擦除)。
2
+ //
3
+ // 口径(与 utils/date.ts 一致):全部走**本机时区**;解析失败一律返回 null,不抛错、不编造时间。
4
+ import { pad2 } from '../utils/date.js';
5
+ const ISO_RE = /^(\d{4})-(\d{2})-(\d{2})(?:T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,3}))?)?$/;
6
+ const STEP_MAX = { hour: 23, minute: 59, second: 59 };
7
+ const EN_MONTHS = [
8
+ 'January', 'February', 'March', 'April', 'May', 'June',
9
+ 'July', 'August', 'September', 'October', 'November', 'December',
10
+ ];
11
+ /** 星期表头(周一起排;中文一~日,英文 Mon~Sun)。 */
12
+ const WEEKDAYS = {
13
+ zh: ['一', '二', '三', '四', '五', '六', '日'],
14
+ en: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
15
+ };
16
+ const pad3 = (ms) => String(ms).padStart(3, '0');
17
+ const pad4 = (year) => String(year).padStart(4, '0');
18
+ /**
19
+ * 本地 ISO(`YYYY-MM-DDTHH:mm:ss.SSS`,无时区后缀)→ 各部分。
20
+ * 不存在的日期(2026-02-30 / 2026-13-01)经 Date 反向校验后返回 null。
21
+ */
22
+ export function parseDateTime(iso) {
23
+ const m = ISO_RE.exec(iso.trim());
24
+ if (m === null)
25
+ return null;
26
+ const parts = {
27
+ year: Number(m[1]),
28
+ month: Number(m[2]),
29
+ day: Number(m[3]),
30
+ hour: Number(m[4] ?? '0'),
31
+ minute: Number(m[5] ?? '0'),
32
+ second: Number(m[6] ?? '0'),
33
+ ms: Number((m[7] ?? '0').padEnd(3, '0')),
34
+ };
35
+ const d = new Date(parts.year, parts.month - 1, parts.day, parts.hour, parts.minute, parts.second, parts.ms);
36
+ if (d.getFullYear() !== parts.year ||
37
+ d.getMonth() !== parts.month - 1 ||
38
+ d.getDate() !== parts.day ||
39
+ d.getHours() !== parts.hour ||
40
+ d.getMinutes() !== parts.minute ||
41
+ d.getSeconds() !== parts.second) {
42
+ return null;
43
+ }
44
+ return parts;
45
+ }
46
+ /**
47
+ * 各部分 → 本地 ISO。毫秒恒三位:数据库若只收「到秒」,`23:59:59.999` 被截成
48
+ * `23:59:59` 仍是当天最后一秒,语义不坏(优雅降级,调用方无需特殊处理)。
49
+ */
50
+ export function formatDateTimeIso(p) {
51
+ return `${pad4(p.year)}-${pad2(p.month)}-${pad2(p.day)}T${pad2(p.hour)}:${pad2(p.minute)}:${pad2(p.second)}.${pad3(p.ms)}`;
52
+ }
53
+ /** 各部分 → 本地毫秒时间戳(仅用于比较,不涉及时区换算)。 */
54
+ export function partsToMs(p) {
55
+ return new Date(p.year, p.month - 1, p.day, p.hour, p.minute, p.second, p.ms).getTime();
56
+ }
57
+ /** 本地毫秒时间戳 → 各部分。 */
58
+ export function msToParts(ms) {
59
+ const d = new Date(ms);
60
+ return {
61
+ year: d.getFullYear(),
62
+ month: d.getMonth() + 1,
63
+ day: d.getDate(),
64
+ hour: d.getHours(),
65
+ minute: d.getMinutes(),
66
+ second: d.getSeconds(),
67
+ ms: d.getMilliseconds(),
68
+ };
69
+ }
70
+ /** 当前时刻。 */
71
+ export function nowParts() {
72
+ return msToParts(Date.now());
73
+ }
74
+ /** 本地 ISO → 一端草稿(日期 / 时间分离);解析失败或空 ⇒ 日期为空、时间归零。 */
75
+ export function toEndDraft(iso) {
76
+ const p = iso === undefined || iso === null || iso === '' ? null : parseDateTime(iso);
77
+ if (p === null)
78
+ return { day: null, time: { hour: 0, minute: 0, second: 0, ms: 0 } };
79
+ return {
80
+ day: { year: p.year, month: p.month, day: p.day },
81
+ time: { hour: p.hour, minute: p.minute, second: p.second, ms: p.ms },
82
+ };
83
+ }
84
+ /** 一端草稿 → 完整时刻;**没选日期 ⇒ null**(调用方据此不传数据)。 */
85
+ export function partsOf(e) {
86
+ return e.day === null ? null : { ...e.day, ...e.time };
87
+ }
88
+ /**
89
+ * 「现在」按钮的时间部分:按精度截断(day ⇒ 全零;hour ⇒ H:00:00;
90
+ * minute ⇒ H:M:00;second ⇒ 完整当前时刻)。
91
+ */
92
+ export function nowTimeFor(precision) {
93
+ const n = nowParts();
94
+ if (precision === 'day')
95
+ return { hour: 0, minute: 0, second: 0, ms: 0 };
96
+ if (precision === 'hour')
97
+ return { hour: n.hour, minute: 0, second: 0, ms: 0 };
98
+ if (precision === 'minute')
99
+ return { hour: n.hour, minute: n.minute, second: 0, ms: 0 };
100
+ return { hour: n.hour, minute: n.minute, second: n.second, ms: n.ms };
101
+ }
102
+ /**
103
+ * 起始端补全:未选的时间单位归零。
104
+ * day ⇒ `00:00:00.000`;hour ⇒ `H:00:00.000`;minute ⇒ `H:M:00.000`;second ⇒ ms 归零。
105
+ */
106
+ export function floorToPrecision(p, precision) {
107
+ switch (precision) {
108
+ case 'day':
109
+ return { ...p, hour: 0, minute: 0, second: 0, ms: 0 };
110
+ case 'hour':
111
+ return { ...p, minute: 0, second: 0, ms: 0 };
112
+ case 'minute':
113
+ return { ...p, second: 0, ms: 0 };
114
+ case 'second':
115
+ return { ...p, ms: 0 };
116
+ }
117
+ }
118
+ /**
119
+ * 结束端补全:未选的时间单位拉到最大。
120
+ * day ⇒ `23:59:59.999`;hour ⇒ `H:59:59.999`;minute ⇒ `H:M:59.999`;
121
+ * second ⇒ 精确值不动(用户显式选到秒,不猜)。
122
+ */
123
+ export function ceilToPrecision(p, precision) {
124
+ switch (precision) {
125
+ case 'day':
126
+ return { ...p, hour: 23, minute: 59, second: 59, ms: 999 };
127
+ case 'hour':
128
+ return { ...p, minute: 59, second: 59, ms: 999 };
129
+ case 'minute':
130
+ return { ...p, second: 59, ms: 999 };
131
+ case 'second':
132
+ return p;
133
+ }
134
+ }
135
+ /**
136
+ * 6×7 固定月历网格,周一起排;补位格给真实日期并标 `inMonth: false`。
137
+ * 42 格恒定 ⇒ 弹层高度不随月份跳动。
138
+ */
139
+ export function buildMonthCells(year, month) {
140
+ const firstWeekday = (new Date(year, month - 1, 1).getDay() + 6) % 7; // 周一 = 0
141
+ const cells = [];
142
+ for (let i = 0; i < 42; i++) {
143
+ const d = new Date(year, month - 1, 1 - firstWeekday + i);
144
+ cells.push({
145
+ iso: `${pad4(d.getFullYear())}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`,
146
+ year: d.getFullYear(),
147
+ month: d.getMonth() + 1,
148
+ day: d.getDate(),
149
+ inMonth: d.getMonth() === month - 1 && d.getFullYear() === year,
150
+ weekday: i % 7,
151
+ });
152
+ }
153
+ return cells;
154
+ }
155
+ /** 月历标题:zh `2026年10月`;en `October 2026`。 */
156
+ export function monthCaption(year, month, locale) {
157
+ return locale === 'zh'
158
+ ? `${pad4(year)}年${pad2(month)}月`
159
+ : `${EN_MONTHS[month - 1] ?? ''} ${String(year)}`;
160
+ }
161
+ /** 星期表头(周一起排)。 */
162
+ export function weekdayLabels(locale) {
163
+ return WEEKDAYS[locale];
164
+ }
165
+ /** 步进 ±1 循环(23→0、59→0):免去用户点 60 次选分钟。 */
166
+ export function stepUnit(value, unit, delta) {
167
+ const max = STEP_MAX[unit] + 1;
168
+ return ((value + delta) % max + max) % max;
169
+ }
170
+ /** 步进列的上限(hour 23 / minute 59 / second 59)。 */
171
+ export function stepMax(unit) {
172
+ return STEP_MAX[unit];
173
+ }
174
+ /** 把键入 / 滚轮得到的原始值收进合法范围(NaN 归 0)。 */
175
+ export function clampUnit(value, unit) {
176
+ if (!Number.isFinite(value))
177
+ return 0;
178
+ const max = STEP_MAX[unit];
179
+ return Math.min(max, Math.max(0, Math.round(value)));
180
+ }
181
+ /** 时间段是否成立(起 ≤ 止;任一端解析失败 ⇒ 不成立)。 */
182
+ export function rangeIsValid(startIso, endIso) {
183
+ const a = parseDateTime(startIso);
184
+ const b = parseDateTime(endIso);
185
+ if (a === null || b === null)
186
+ return false;
187
+ return partsToMs(a) <= partsToMs(b);
188
+ }
189
+ /** 两个时刻是否同一本地日历日。 */
190
+ export function sameLocalDay(a, b) {
191
+ return a.year === b.year && a.month === b.month && a.day === b.day;
192
+ }
193
+ //# sourceMappingURL=datetime-logic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datetime-logic.js","sourceRoot":"","sources":["../../src/ui/datetime-logic.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const FEEDBACK_CSS = "\n.dshpc-modal-mask{\n position:fixed;inset:0;z-index:1070;display:flex;align-items:center;justify-content:center;\n background:rgba(15,23,42,.45);\n}\n.dshpc-modal{\n display:flex;flex-direction:column;max-width:min(960px,92vw);max-height:86vh;\n background:var(--dshpc-surface-base);border:1px solid var(--dshpc-border);\n border-radius:10px;box-shadow:0 16px 48px rgba(15,23,42,.24);overflow:hidden;\n}\n.dshpc-modal__head{\n display:flex;align-items:center;gap:8px;padding:12px 14px;\n border-bottom:1px solid var(--dshpc-border-faint);color:var(--dshpc-fg);font-size:14px;\n}\n.dshpc-modal__title{flex:1;min-width:0}\n/* \u5173\u95ED\u6309\u94AE\uFF1A24\u00D724 \u65B9\u89D2\u56FE\u6807\u4F4D\uFF0C\u4E0D\u501F\u7528 Picker \u7684\u89E6\u53D1\u5668\u76AE\u80A4\uFF08\u90A3\u4EFD\u5E26 min-width:120px\uFF09\u3002 */\n.dshpc-modal__close{\n display:inline-flex;align-items:center;justify-content:center;flex:none;\n width:24px;height:24px;padding:0;border:none;border-radius:var(--dshpc-radius-sm);\n background:transparent;color:var(--dshpc-fg-3);font-family:inherit;font-size:12px;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-modal__close:hover{background:var(--dshpc-hover);color:var(--dshpc-fg)}\n.dshpc-modal__close:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}\n.dshpc-modal__body{flex:1;min-height:0;overflow:auto;padding:12px 14px}\n.dshpc-modal__foot{\n display:flex;justify-content:flex-end;gap:8px;padding:10px 14px;\n border-top:1px solid var(--dshpc-border-faint);\n}\n.dshpc-toast-host{\n position:fixed;z-index:1090;left:50%;bottom:32px;transform:translateX(-50%);\n display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;\n}\n.dshpc-toast{\n padding:8px 14px;border-radius:8px;font-size:13px;color:var(--dshpc-fg);\n background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border);\n box-shadow:0 8px 24px rgba(15,23,42,.16);\n}\n.dshpc-toast--success{color:var(--dshpc-success);border-color:color-mix(in srgb,var(--dshpc-success) 40%,transparent)}\n.dshpc-toast--error{color:var(--dshpc-danger);border-color:color-mix(in srgb,var(--dshpc-danger) 40%,transparent)}\n.dshpc-empty{\n display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;\n padding:24px;color:var(--dshpc-fg-3);font-size:13px;text-align:center;\n}\n.dshpc-error{\n padding:12px 14px;border-radius:8px;font-size:13px;\n color:var(--dshpc-danger);background:color-mix(in srgb,var(--dshpc-danger) 10%,transparent);\n border:1px solid color-mix(in srgb,var(--dshpc-danger) 30%,transparent);\n}\n.dshpc-error__retry{\n margin-top:8px;color:var(--dshpc-link);cursor:pointer;background:none;border:none;padding:0;\n}\n";
1
+ export { FEEDBACK_CSS } from './feedback-css.generated.js';
2
2
  //# sourceMappingURL=feedback-css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feedback-css.d.ts","sourceRoot":"","sources":["../../src/ui/feedback-css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,+wFAoDxB,CAAA"}
1
+ {"version":3,"file":"feedback-css.d.ts","sourceRoot":"","sources":["../../src/ui/feedback-css.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const FEEDBACK_CSS = "\n/* \u906E\u7F69 = \u5BBF\u4E3B\u906E\u7F69\u53D8\u91CF --dsw-alias-bg-mask-1\uFF08\u4E0E\u5B98\u65B9 Modal / \u5144\u5F1F\u9879\u76EE --tdt-mask \u540C\u4E00\u6761\u771F\u503C\uFF0C\u7528\u6237 2026-10-20\uFF09\u3002 */\n/* \u53F3\u8FB9\u754C\u8BA9\u4F4D\u9875\u9762\u7EA7\u5206\u680F\uFF08PanelDock \u53D1\u5E03\u7684 --dshpc-page-inset-right\uFF0C\u7528\u6237 2026-10-22\uFF09\uFF1A\n \u5206\u680F\u4E0D\u88AB\u538B\u6697\u3001\u7167\u5E38\u53EF\u70B9\uFF1B\u5F39\u7A97\u5728\u8FD9\u5757**\u5269\u4E0B**\u7684\u533A\u57DF\u91CC\u5C45\u4E2D\uFF0C\u5C31\u50CF\u6574\u9875\u88AB\u63A8\u51FA\u53BB\u4E00\u6837\u3002 */\n.dshpc-modal-mask{\n position:fixed;inset:0 var(--dshpc-page-inset-right,0px) 0 0;z-index:1070;\n display:flex;align-items:center;justify-content:center;\n background:var(--dshpc-mask);\n}\n/* \u5927\u5F39\u7A97\u5BB6\u65CF\uFF08md/lg\uFF09\uFF1A\u6284\u5144\u5F1F\u9879\u76EE archive-session-css \u7684 .dsh-tdt-sv-panel\uFF08surface-base + border-l2 + radius 12 + shadow-2\uFF09\u3002 */\n.dshpc-modal{\n display:flex;flex-direction:column;box-sizing:border-box;\n background:var(--dshpc-surface-base);color:var(--dshpc-fg);\n border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);\n box-shadow:var(--dshpc-shadow-2);overflow:hidden;\n}\n.dshpc-modal__head{\n display:flex;align-items:center;gap:8px;padding:18px 31px 12px;\n border-bottom:1px solid var(--dshpc-border);flex-wrap:wrap;\n}\n/* \u6807\u9898\u7EC4\uFF1A\u7B2C\u4E00\u884C = \u6807\u9898 + \u53F3\u4FA7\u5C0F\u5757\uFF08\u5FBD\u6807\u7D27\u8DDF\u6807\u9898\uFF09\uFF0C\u7B2C\u4E8C\u884C = \u526F\u6807\u9898\u3002 */\n.dshpc-modal__titlegroup{display:flex;flex-direction:column;gap:2px;min-width:0;flex:0 1 auto}\n.dshpc-modal__titlerow{display:flex;align-items:center;gap:8px;min-width:0}\n.dshpc-modal__title{font-size:var(--dshpc-font-lg);font-weight:600;line-height:1.4;min-width:0}\n/* \u6807\u9898\u4E0B\u526F\u6807\u9898\u884C\uFF08\u5144\u5F1F\u9879\u76EE .dsh-tdt-sv-sid\uFF1A\u7B49\u5BBD\u5B57\u4F53\u3001caption \u8272\u3001\u53EF\u6362\u884C\uFF09\u3002 */\n.dshpc-modal__sid{font-family:var(--ds-font-family-code,monospace);font-size:var(--dshpc-font-xs);color:var(--dshpc-fg-3);word-break:break-all}\n/* \u5173\u95ED\u6309\u94AE\uFF1A24\u00D724 \u65B9\u89D2\u56FE\u6807\u4F4D\uFF0C\u4E0D\u501F\u7528 Picker \u7684\u89E6\u53D1\u5668\u76AE\u80A4\uFF08\u90A3\u4EFD\u5E26 min-width:120px\uFF09\u3002 */\n.dshpc-modal__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);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-modal__close:hover{background:var(--dshpc-hover);color:var(--dshpc-fg)}\n.dshpc-modal__close:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}\n/* body = \u552F\u4E00\u6EDA\u52A8\u5BB9\u5668\uFF1A\u5185\u8DDD\u4E0E\u6EDA\u52A8\u90FD\u5F52\u5B83\uFF08\u6EDA\u52A8\u6761\u8D34\u9762\u677F\u53F3\u7F18\uFF0C\u4E0D\u88AB\u5185\u8DDD\u6324\u8FDB\u6765\uFF09\uFF1B\n \u5185\u5BB9\u6309\u6D41\u6392\uFF0C\u4E0D\u8BBE height:100%\u3001\u4E0D\u81EA\u5DF1\u5F00\u6EDA\u52A8\u6761\u3002 */\n.dshpc-modal__body{flex:1 1 auto;min-height:0;overflow:auto;padding:17px 31px}\n.dshpc-modal__foot{display:flex;justify-content:flex-end;gap:8px;padding:12px 31px 18px}\n.dshpc-toast-host{\n position:fixed;z-index:1090;left:50%;bottom:32px;transform:translateX(-50%);\n display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;\n}\n.dshpc-toast{\n padding:8px 14px;border-radius:8px;font-size:13px;color:var(--dshpc-fg);\n background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border);\n box-shadow:0 8px 24px rgba(15,23,42,.16);\n}\n.dshpc-toast--success{color:var(--dshpc-success);border-color:color-mix(in srgb,var(--dshpc-success) 40%,transparent)}\n.dshpc-toast--error{color:var(--dshpc-danger);border-color:color-mix(in srgb,var(--dshpc-danger) 40%,transparent)}\n.dshpc-error__retry{\n margin-top:8px;color:var(--dshpc-link);cursor:pointer;background:none;border:none;padding:0;\n}\n/* \u539F\u751F\u5F39\u7A97\u6F14\u793A\uFF1A\u7ECF\u5BBF\u4E3B Modal \u7684 contentClassName \u6CE8\u5165\uFF0C\u8BC1\u660E\u5BBF\u4E3B\u5185\u5BB9\u533A\u5C3A\u5BF8\u53EF\u7ECF\u7C7B\u540D\u81EA\u5B9A\u4E49\u3002 */\n.dshpc-native-demo-content{max-width:520px}\n/* Modal \u5934\u90E8\u56DB\u69FD\uFF1A\u5DE6\u56FE\u6807 / \u6807\u9898\u7EC4 / \u5F39\u6027\u95F4\u9694 / \u53F3\u4FA7\u52A8\u4F5C\u533A + \u5173\u95ED\u94AE\u3002 */\n.dshpc-modal__heading{display:flex;align-items:center;gap:8px;min-width:0;flex:0 1 auto}\n.dshpc-modal__lead{flex:none;display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1}\n.dshpc-modal__extra{flex:none;display:inline-flex;align-items:center}\n.dshpc-modal__spacer{flex:1 1 auto;min-width:8px}\n.dshpc-modal__actions{flex:none;display:flex;align-items:center;gap:8px}\n/* \u5934\u90E8\u4FE1\u53F7\u56FE\u6807\uFF08AlertModal \u6309 severity \u6CE8\u5165\uFF09\uFF1A\u81EA\u542B\u914D\u8272\uFF0C\u4E0D\u4F9D\u8D56\u5BBF\u4E3B token\u3002 */\n.dshpc-alert-sev{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;font-size:12px;color:#fff;flex:none}\n.dshpc-alert-sev--info{background:#2563eb}\n.dshpc-alert-sev--success{background:#16a34a}\n.dshpc-alert-sev--warning{background:#d97706}\n.dshpc-alert-sev--error{background:#dc2626}\n/* \u5C0F\u786E\u8BA4\u6846\u5BB6\u65CF\uFF08sm\uFF09\uFF1A\u4E25\u683C\u6284\u5144\u5F1F\u9879\u76EE renderConfirm \u7684 dialogStyle\uFF08task-list.tsx:456\uFF09\u2014\u2014\n 360px \u5BBD / 18px \u5185\u8DDD / \u5934\u90E8\u65E0\u5206\u9694\u7EBF / \u8BF4\u660E\u6587\u5B57 fg-2 / \u5E95\u90E8\u6309\u94AE\u53F3\u5BF9\u9F50\u3002 */\n.dshpc-modal--sm{padding:18px}\n.dshpc-modal--sm .dshpc-modal__head{padding:0 0 8px;border-bottom:none}\n.dshpc-modal--sm .dshpc-modal__body{padding:0 0 14px;overflow:visible;font-size:var(--dshpc-font-sm);color:var(--dshpc-fg-2);line-height:var(--dshpc-line-sm)}\n.dshpc-modal--sm .dshpc-modal__foot{padding:0}\n";
2
+ //# sourceMappingURL=feedback-css.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback-css.generated.d.ts","sourceRoot":"","sources":["../../src/ui/feedback-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,kqMAAu8I,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ⚠️ 生成物,勿手改。真源 = src/ui/feedback.css
2
+ // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
+ export const FEEDBACK_CSS = "\n/* 遮罩 = 宿主遮罩变量 --dsw-alias-bg-mask-1(与官方 Modal / 兄弟项目 --tdt-mask 同一条真值,用户 2026-10-20)。 */\n/* 右边界让位页面级分栏(PanelDock 发布的 --dshpc-page-inset-right,用户 2026-10-22):\n 分栏不被压暗、照常可点;弹窗在这块**剩下**的区域里居中,就像整页被推出去一样。 */\n.dshpc-modal-mask{\n position:fixed;inset:0 var(--dshpc-page-inset-right,0px) 0 0;z-index:1070;\n display:flex;align-items:center;justify-content:center;\n background:var(--dshpc-mask);\n}\n/* 大弹窗家族(md/lg):抄兄弟项目 archive-session-css 的 .dsh-tdt-sv-panel(surface-base + border-l2 + radius 12 + shadow-2)。 */\n.dshpc-modal{\n display:flex;flex-direction:column;box-sizing:border-box;\n background:var(--dshpc-surface-base);color:var(--dshpc-fg);\n border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);\n box-shadow:var(--dshpc-shadow-2);overflow:hidden;\n}\n.dshpc-modal__head{\n display:flex;align-items:center;gap:8px;padding:18px 31px 12px;\n border-bottom:1px solid var(--dshpc-border);flex-wrap:wrap;\n}\n/* 标题组:第一行 = 标题 + 右侧小块(徽标紧跟标题),第二行 = 副标题。 */\n.dshpc-modal__titlegroup{display:flex;flex-direction:column;gap:2px;min-width:0;flex:0 1 auto}\n.dshpc-modal__titlerow{display:flex;align-items:center;gap:8px;min-width:0}\n.dshpc-modal__title{font-size:var(--dshpc-font-lg);font-weight:600;line-height:1.4;min-width:0}\n/* 标题下副标题行(兄弟项目 .dsh-tdt-sv-sid:等宽字体、caption 色、可换行)。 */\n.dshpc-modal__sid{font-family:var(--ds-font-family-code,monospace);font-size:var(--dshpc-font-xs);color:var(--dshpc-fg-3);word-break:break-all}\n/* 关闭按钮:24×24 方角图标位,不借用 Picker 的触发器皮肤(那份带 min-width:120px)。 */\n.dshpc-modal__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);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-modal__close:hover{background:var(--dshpc-hover);color:var(--dshpc-fg)}\n.dshpc-modal__close:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}\n/* body = 唯一滚动容器:内距与滚动都归它(滚动条贴面板右缘,不被内距挤进来);\n 内容按流排,不设 height:100%、不自己开滚动条。 */\n.dshpc-modal__body{flex:1 1 auto;min-height:0;overflow:auto;padding:17px 31px}\n.dshpc-modal__foot{display:flex;justify-content:flex-end;gap:8px;padding:12px 31px 18px}\n.dshpc-toast-host{\n position:fixed;z-index:1090;left:50%;bottom:32px;transform:translateX(-50%);\n display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;\n}\n.dshpc-toast{\n padding:8px 14px;border-radius:8px;font-size:13px;color:var(--dshpc-fg);\n background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border);\n box-shadow:0 8px 24px rgba(15,23,42,.16);\n}\n.dshpc-toast--success{color:var(--dshpc-success);border-color:color-mix(in srgb,var(--dshpc-success) 40%,transparent)}\n.dshpc-toast--error{color:var(--dshpc-danger);border-color:color-mix(in srgb,var(--dshpc-danger) 40%,transparent)}\n.dshpc-error__retry{\n margin-top:8px;color:var(--dshpc-link);cursor:pointer;background:none;border:none;padding:0;\n}\n/* 原生弹窗演示:经宿主 Modal 的 contentClassName 注入,证明宿主内容区尺寸可经类名自定义。 */\n.dshpc-native-demo-content{max-width:520px}\n/* Modal 头部四槽:左图标 / 标题组 / 弹性间隔 / 右侧动作区 + 关闭钮。 */\n.dshpc-modal__heading{display:flex;align-items:center;gap:8px;min-width:0;flex:0 1 auto}\n.dshpc-modal__lead{flex:none;display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1}\n.dshpc-modal__extra{flex:none;display:inline-flex;align-items:center}\n.dshpc-modal__spacer{flex:1 1 auto;min-width:8px}\n.dshpc-modal__actions{flex:none;display:flex;align-items:center;gap:8px}\n/* 头部信号图标(AlertModal 按 severity 注入):自含配色,不依赖宿主 token。 */\n.dshpc-alert-sev{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;font-size:12px;color:#fff;flex:none}\n.dshpc-alert-sev--info{background:#2563eb}\n.dshpc-alert-sev--success{background:#16a34a}\n.dshpc-alert-sev--warning{background:#d97706}\n.dshpc-alert-sev--error{background:#dc2626}\n/* 小确认框家族(sm):严格抄兄弟项目 renderConfirm 的 dialogStyle(task-list.tsx:456)——\n 360px 宽 / 18px 内距 / 头部无分隔线 / 说明文字 fg-2 / 底部按钮右对齐。 */\n.dshpc-modal--sm{padding:18px}\n.dshpc-modal--sm .dshpc-modal__head{padding:0 0 8px;border-bottom:none}\n.dshpc-modal--sm .dshpc-modal__body{padding:0 0 14px;overflow:visible;font-size:var(--dshpc-font-sm);color:var(--dshpc-fg-2);line-height:var(--dshpc-line-sm)}\n.dshpc-modal--sm .dshpc-modal__foot{padding:0}\n";
4
+ //# sourceMappingURL=feedback-css.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback-css.generated.js","sourceRoot":"","sources":["../../src/ui/feedback-css.generated.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,qEAAqE;AACrE,MAAM,CAAC,MAAM,YAAY,GAAG,o8IAAo8I,CAAA"}
@@ -1,56 +1,4 @@
1
1
  // 反馈件(Modal / toast / 空态 / 错误边界)样式。
2
2
  // 类名与 token 变量统一 dshpc 前缀。
3
- export const FEEDBACK_CSS = `
4
- .dshpc-modal-mask{
5
- position:fixed;inset:0;z-index:1070;display:flex;align-items:center;justify-content:center;
6
- background:rgba(15,23,42,.45);
7
- }
8
- .dshpc-modal{
9
- display:flex;flex-direction:column;max-width:min(960px,92vw);max-height:86vh;
10
- background:var(--dshpc-surface-base);border:1px solid var(--dshpc-border);
11
- border-radius:10px;box-shadow:0 16px 48px rgba(15,23,42,.24);overflow:hidden;
12
- }
13
- .dshpc-modal__head{
14
- display:flex;align-items:center;gap:8px;padding:12px 14px;
15
- border-bottom:1px solid var(--dshpc-border-faint);color:var(--dshpc-fg);font-size:14px;
16
- }
17
- .dshpc-modal__title{flex:1;min-width:0}
18
- /* 关闭按钮:24×24 方角图标位,不借用 Picker 的触发器皮肤(那份带 min-width:120px)。 */
19
- .dshpc-modal__close{
20
- display:inline-flex;align-items:center;justify-content:center;flex:none;
21
- width:24px;height:24px;padding:0;border:none;border-radius:var(--dshpc-radius-sm);
22
- background:transparent;color:var(--dshpc-fg-3);font-family:inherit;font-size:12px;line-height:1;cursor:pointer;
23
- transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease);
24
- }
25
- .dshpc-modal__close:hover{background:var(--dshpc-hover);color:var(--dshpc-fg)}
26
- .dshpc-modal__close:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}
27
- .dshpc-modal__body{flex:1;min-height:0;overflow:auto;padding:12px 14px}
28
- .dshpc-modal__foot{
29
- display:flex;justify-content:flex-end;gap:8px;padding:10px 14px;
30
- border-top:1px solid var(--dshpc-border-faint);
31
- }
32
- .dshpc-toast-host{
33
- position:fixed;z-index:1090;left:50%;bottom:32px;transform:translateX(-50%);
34
- display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;
35
- }
36
- .dshpc-toast{
37
- padding:8px 14px;border-radius:8px;font-size:13px;color:var(--dshpc-fg);
38
- background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border);
39
- box-shadow:0 8px 24px rgba(15,23,42,.16);
40
- }
41
- .dshpc-toast--success{color:var(--dshpc-success);border-color:color-mix(in srgb,var(--dshpc-success) 40%,transparent)}
42
- .dshpc-toast--error{color:var(--dshpc-danger);border-color:color-mix(in srgb,var(--dshpc-danger) 40%,transparent)}
43
- .dshpc-empty{
44
- display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
45
- padding:24px;color:var(--dshpc-fg-3);font-size:13px;text-align:center;
46
- }
47
- .dshpc-error{
48
- padding:12px 14px;border-radius:8px;font-size:13px;
49
- color:var(--dshpc-danger);background:color-mix(in srgb,var(--dshpc-danger) 10%,transparent);
50
- border:1px solid color-mix(in srgb,var(--dshpc-danger) 30%,transparent);
51
- }
52
- .dshpc-error__retry{
53
- margin-top:8px;color:var(--dshpc-link);cursor:pointer;background:none;border:none;padding:0;
54
- }
55
- `;
3
+ export { FEEDBACK_CSS } from './feedback-css.generated.js';
56
4
  //# sourceMappingURL=feedback-css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"feedback-css.js","sourceRoot":"","sources":["../../src/ui/feedback-css.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,2BAA2B;AAC3B,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoD3B,CAAA"}
1
+ {"version":3,"file":"feedback-css.js","sourceRoot":"","sources":["../../src/ui/feedback-css.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,2BAA2B;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA"}