dsh-plugin-core 0.2.14 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/README.md +52 -83
  2. package/dist/design/tokens-css.d.ts +1 -1
  3. package/dist/design/tokens-css.d.ts.map +1 -1
  4. package/dist/design/tokens-css.generated.d.ts +2 -0
  5. package/dist/design/tokens-css.generated.d.ts.map +1 -0
  6. package/dist/design/tokens-css.generated.js +4 -0
  7. package/dist/design/tokens-css.generated.js.map +1 -0
  8. package/dist/design/tokens-css.js +1 -252
  9. package/dist/design/tokens-css.js.map +1 -1
  10. package/dist/explorer/FileBrowser.d.ts +41 -0
  11. package/dist/explorer/FileBrowser.d.ts.map +1 -0
  12. package/dist/explorer/FileBrowser.js +659 -0
  13. package/dist/explorer/FileBrowser.js.map +1 -0
  14. package/dist/explorer/explorer-css.d.ts +1 -1
  15. package/dist/explorer/explorer-css.d.ts.map +1 -1
  16. package/dist/explorer/explorer-css.generated.d.ts +2 -0
  17. package/dist/explorer/explorer-css.generated.d.ts.map +1 -0
  18. package/dist/explorer/explorer-css.generated.js +4 -0
  19. package/dist/explorer/explorer-css.generated.js.map +1 -0
  20. package/dist/explorer/explorer-css.js +1 -31
  21. package/dist/explorer/explorer-css.js.map +1 -1
  22. package/dist/explorer/index.d.ts +4 -2
  23. package/dist/explorer/index.d.ts.map +1 -1
  24. package/dist/explorer/index.js +4 -2
  25. package/dist/explorer/index.js.map +1 -1
  26. package/dist/explorer/open.d.ts +103 -0
  27. package/dist/explorer/open.d.ts.map +1 -0
  28. package/dist/explorer/open.js +282 -0
  29. package/dist/explorer/open.js.map +1 -0
  30. package/dist/explorer/preview/BytesPreview.d.ts +13 -0
  31. package/dist/explorer/preview/BytesPreview.d.ts.map +1 -0
  32. package/dist/explorer/preview/BytesPreview.js +56 -0
  33. package/dist/explorer/preview/BytesPreview.js.map +1 -0
  34. package/dist/explorer/preview/HtmlPreview.d.ts +18 -0
  35. package/dist/explorer/preview/HtmlPreview.d.ts.map +1 -0
  36. package/dist/explorer/preview/HtmlPreview.js +112 -0
  37. package/dist/explorer/preview/HtmlPreview.js.map +1 -0
  38. package/dist/explorer/preview/OfficePreview.d.ts +11 -0
  39. package/dist/explorer/preview/OfficePreview.d.ts.map +1 -0
  40. package/dist/explorer/preview/OfficePreview.js +53 -0
  41. package/dist/explorer/preview/OfficePreview.js.map +1 -0
  42. package/dist/explorer/preview/TextPreview.d.ts +17 -0
  43. package/dist/explorer/preview/TextPreview.d.ts.map +1 -0
  44. package/dist/explorer/preview/TextPreview.js +95 -0
  45. package/dist/explorer/preview/TextPreview.js.map +1 -0
  46. package/dist/explorer/preview/index.d.ts +10 -3
  47. package/dist/explorer/preview/index.d.ts.map +1 -1
  48. package/dist/explorer/preview/index.js +52 -55
  49. package/dist/explorer/preview/index.js.map +1 -1
  50. package/dist/explorer/preview/md-labels.d.ts +3 -0
  51. package/dist/explorer/preview/md-labels.d.ts.map +1 -0
  52. package/dist/explorer/preview/md-labels.js +12 -0
  53. package/dist/explorer/preview/md-labels.js.map +1 -0
  54. package/dist/explorer/types.d.ts +186 -4
  55. package/dist/explorer/types.d.ts.map +1 -1
  56. package/dist/explorer/types.js +401 -14
  57. package/dist/explorer/types.js.map +1 -1
  58. package/dist/host/index.d.ts +66 -0
  59. package/dist/host/index.d.ts.map +1 -0
  60. package/dist/host/index.js +60 -0
  61. package/dist/host/index.js.map +1 -0
  62. package/dist/session/SessionViewModal.d.ts +42 -0
  63. package/dist/session/SessionViewModal.d.ts.map +1 -0
  64. package/dist/session/SessionViewModal.js +997 -0
  65. package/dist/session/SessionViewModal.js.map +1 -0
  66. package/dist/session/changes.d.ts +73 -0
  67. package/dist/session/changes.d.ts.map +1 -0
  68. package/dist/session/changes.js +134 -0
  69. package/dist/session/changes.js.map +1 -0
  70. package/dist/session/faces.d.ts +198 -0
  71. package/dist/session/faces.d.ts.map +1 -0
  72. package/dist/session/faces.js +17 -0
  73. package/dist/session/faces.js.map +1 -0
  74. package/dist/session/index.d.ts +5 -23
  75. package/dist/session/index.d.ts.map +1 -1
  76. package/dist/session/index.js +25 -70
  77. package/dist/session/index.js.map +1 -1
  78. package/dist/session/mirror/ChangedFileDiff.d.ts +22 -0
  79. package/dist/session/mirror/ChangedFileDiff.d.ts.map +1 -0
  80. package/dist/session/mirror/ChangedFileDiff.js +157 -0
  81. package/dist/session/mirror/ChangedFileDiff.js.map +1 -0
  82. package/dist/session/mirror/ChangedFilesCard.d.ts +18 -0
  83. package/dist/session/mirror/ChangedFilesCard.d.ts.map +1 -0
  84. package/dist/session/mirror/ChangedFilesCard.js +158 -0
  85. package/dist/session/mirror/ChangedFilesCard.js.map +1 -0
  86. package/dist/session/mirror/ChatGroupSeat.d.ts +24 -0
  87. package/dist/session/mirror/ChatGroupSeat.d.ts.map +1 -0
  88. package/dist/session/mirror/ChatGroupSeat.js +134 -0
  89. package/dist/session/mirror/ChatGroupSeat.js.map +1 -0
  90. package/dist/session/mirror/ChatNodeSeat.d.ts +43 -0
  91. package/dist/session/mirror/ChatNodeSeat.d.ts.map +1 -0
  92. package/dist/session/mirror/ChatNodeSeat.js +133 -0
  93. package/dist/session/mirror/ChatNodeSeat.js.map +1 -0
  94. package/dist/session/mirror/ChatView.d.ts +47 -0
  95. package/dist/session/mirror/ChatView.d.ts.map +1 -0
  96. package/dist/session/mirror/ChatView.js +127 -0
  97. package/dist/session/mirror/ChatView.js.map +1 -0
  98. package/dist/session/mirror/CommandCard.d.ts +20 -0
  99. package/dist/session/mirror/CommandCard.d.ts.map +1 -0
  100. package/dist/session/mirror/CommandCard.js +69 -0
  101. package/dist/session/mirror/CommandCard.js.map +1 -0
  102. package/dist/session/mirror/Deliverables.d.ts +24 -0
  103. package/dist/session/mirror/Deliverables.d.ts.map +1 -0
  104. package/dist/session/mirror/Deliverables.js +134 -0
  105. package/dist/session/mirror/Deliverables.js.map +1 -0
  106. package/dist/session/mirror/GenericCommandCard.d.ts +25 -0
  107. package/dist/session/mirror/GenericCommandCard.d.ts.map +1 -0
  108. package/dist/session/mirror/GenericCommandCard.js +567 -0
  109. package/dist/session/mirror/GenericCommandCard.js.map +1 -0
  110. package/dist/session/mirror/MessageIconActions.d.ts +16 -0
  111. package/dist/session/mirror/MessageIconActions.d.ts.map +1 -0
  112. package/dist/session/mirror/MessageIconActions.js +71 -0
  113. package/dist/session/mirror/MessageIconActions.js.map +1 -0
  114. package/dist/session/mirror/MessageItem.d.ts +66 -0
  115. package/dist/session/mirror/MessageItem.d.ts.map +1 -0
  116. package/dist/session/mirror/MessageItem.js +135 -0
  117. package/dist/session/mirror/MessageItem.js.map +1 -0
  118. package/dist/session/mirror/ReasoningRow.d.ts +11 -0
  119. package/dist/session/mirror/ReasoningRow.d.ts.map +1 -0
  120. package/dist/session/mirror/ReasoningRow.js +49 -0
  121. package/dist/session/mirror/ReasoningRow.js.map +1 -0
  122. package/dist/session/mirror/StatDialog.d.ts +20 -0
  123. package/dist/session/mirror/StatDialog.d.ts.map +1 -0
  124. package/dist/session/mirror/StatDialog.js +36 -0
  125. package/dist/session/mirror/StatDialog.js.map +1 -0
  126. package/dist/session/mirror/TurnProcessNodeView.d.ts +10 -0
  127. package/dist/session/mirror/TurnProcessNodeView.d.ts.map +1 -0
  128. package/dist/session/mirror/TurnProcessNodeView.js +68 -0
  129. package/dist/session/mirror/TurnProcessNodeView.js.map +1 -0
  130. package/dist/session/mirror/TurnTailNodeView.d.ts +32 -0
  131. package/dist/session/mirror/TurnTailNodeView.d.ts.map +1 -0
  132. package/dist/session/mirror/TurnTailNodeView.js +48 -0
  133. package/dist/session/mirror/TurnTailNodeView.js.map +1 -0
  134. package/dist/session/mirror/TurnTriggerNodeView.d.ts +14 -0
  135. package/dist/session/mirror/TurnTriggerNodeView.d.ts.map +1 -0
  136. package/dist/session/mirror/TurnTriggerNodeView.js +87 -0
  137. package/dist/session/mirror/TurnTriggerNodeView.js.map +1 -0
  138. package/dist/session/mirror/TurnUsagePanel.d.ts +21 -0
  139. package/dist/session/mirror/TurnUsagePanel.d.ts.map +1 -0
  140. package/dist/session/mirror/TurnUsagePanel.js +41 -0
  141. package/dist/session/mirror/TurnUsagePanel.js.map +1 -0
  142. package/dist/session/mirror/message-chrome.d.ts +33 -0
  143. package/dist/session/mirror/message-chrome.d.ts.map +1 -0
  144. package/dist/session/mirror/message-chrome.js +158 -0
  145. package/dist/session/mirror/message-chrome.js.map +1 -0
  146. package/dist/session/mirror/process-groups.d.ts +56 -0
  147. package/dist/session/mirror/process-groups.d.ts.map +1 -0
  148. package/dist/session/mirror/process-groups.js +202 -0
  149. package/dist/session/mirror/process-groups.js.map +1 -0
  150. package/dist/session/official-classes.d.ts +28 -0
  151. package/dist/session/official-classes.d.ts.map +1 -0
  152. package/dist/session/official-classes.js +146 -0
  153. package/dist/session/official-classes.js.map +1 -0
  154. package/dist/session/open-session-view.d.ts +17 -0
  155. package/dist/session/open-session-view.d.ts.map +1 -0
  156. package/dist/session/open-session-view.js +136 -0
  157. package/dist/session/open-session-view.js.map +1 -0
  158. package/dist/session/session-css.d.ts +1 -1
  159. package/dist/session/session-css.d.ts.map +1 -1
  160. package/dist/session/session-css.generated.d.ts +2 -0
  161. package/dist/session/session-css.generated.d.ts.map +1 -0
  162. package/dist/session/session-css.generated.js +4 -0
  163. package/dist/session/session-css.generated.js.map +1 -0
  164. package/dist/session/session-css.js +1 -17
  165. package/dist/session/session-css.js.map +1 -1
  166. package/dist/ui/AlertModal.d.ts +28 -0
  167. package/dist/ui/AlertModal.d.ts.map +1 -0
  168. package/dist/ui/AlertModal.js +29 -0
  169. package/dist/ui/AlertModal.js.map +1 -0
  170. package/dist/ui/Button.d.ts.map +1 -1
  171. package/dist/ui/Button.js +14 -1
  172. package/dist/ui/Button.js.map +1 -1
  173. package/dist/ui/Card.d.ts +4 -2
  174. package/dist/ui/Card.d.ts.map +1 -1
  175. package/dist/ui/Card.js +12 -6
  176. package/dist/ui/Card.js.map +1 -1
  177. package/dist/ui/Chip.d.ts +9 -1
  178. package/dist/ui/Chip.d.ts.map +1 -1
  179. package/dist/ui/Chip.js +8 -2
  180. package/dist/ui/Chip.js.map +1 -1
  181. package/dist/ui/CodeViewer.d.ts +36 -0
  182. package/dist/ui/CodeViewer.d.ts.map +1 -0
  183. package/dist/ui/CodeViewer.js +90 -0
  184. package/dist/ui/CodeViewer.js.map +1 -0
  185. package/dist/ui/ConfirmModal.d.ts +30 -0
  186. package/dist/ui/ConfirmModal.d.ts.map +1 -0
  187. package/dist/ui/ConfirmModal.js +23 -0
  188. package/dist/ui/ConfirmModal.js.map +1 -0
  189. package/dist/ui/DateTimePicker.d.ts +45 -0
  190. package/dist/ui/DateTimePicker.d.ts.map +1 -0
  191. package/dist/ui/DateTimePicker.js +447 -0
  192. package/dist/ui/DateTimePicker.js.map +1 -0
  193. package/dist/ui/Field.d.ts +11 -2
  194. package/dist/ui/Field.d.ts.map +1 -1
  195. package/dist/ui/Field.js +15 -5
  196. package/dist/ui/Field.js.map +1 -1
  197. package/dist/ui/MarqueeText.d.ts.map +1 -1
  198. package/dist/ui/MarqueeText.js +3 -1
  199. package/dist/ui/MarqueeText.js.map +1 -1
  200. package/dist/ui/Modal.d.ts +25 -3
  201. package/dist/ui/Modal.d.ts.map +1 -1
  202. package/dist/ui/Modal.js +41 -7
  203. package/dist/ui/Modal.js.map +1 -1
  204. package/dist/ui/ModelPicker.d.ts +25 -12
  205. package/dist/ui/ModelPicker.d.ts.map +1 -1
  206. package/dist/ui/ModelPicker.js +67 -19
  207. package/dist/ui/ModelPicker.js.map +1 -1
  208. package/dist/ui/PanelDock.d.ts +127 -0
  209. package/dist/ui/PanelDock.d.ts.map +1 -0
  210. package/dist/ui/PanelDock.js +297 -0
  211. package/dist/ui/PanelDock.js.map +1 -0
  212. package/dist/ui/Picker.d.ts +8 -2
  213. package/dist/ui/Picker.d.ts.map +1 -1
  214. package/dist/ui/Picker.js +86 -18
  215. package/dist/ui/Picker.js.map +1 -1
  216. package/dist/ui/SectionHead.d.ts +3 -3
  217. package/dist/ui/SectionHead.d.ts.map +1 -1
  218. package/dist/ui/SectionHead.js +4 -4
  219. package/dist/ui/SectionHead.js.map +1 -1
  220. package/dist/ui/Segmented.d.ts +2 -0
  221. package/dist/ui/Segmented.d.ts.map +1 -1
  222. package/dist/ui/Segmented.js +3 -1
  223. package/dist/ui/Segmented.js.map +1 -1
  224. package/dist/ui/Textarea.d.ts +2 -0
  225. package/dist/ui/Textarea.d.ts.map +1 -1
  226. package/dist/ui/Textarea.js +6 -1
  227. package/dist/ui/Textarea.js.map +1 -1
  228. package/dist/ui/Toast.d.ts +41 -8
  229. package/dist/ui/Toast.d.ts.map +1 -1
  230. package/dist/ui/Toast.js +216 -28
  231. package/dist/ui/Toast.js.map +1 -1
  232. package/dist/ui/WorkspacePicker.d.ts +15 -28
  233. package/dist/ui/WorkspacePicker.d.ts.map +1 -1
  234. package/dist/ui/WorkspacePicker.js +18 -27
  235. package/dist/ui/WorkspacePicker.js.map +1 -1
  236. package/dist/ui/card-css.d.ts +1 -1
  237. package/dist/ui/card-css.d.ts.map +1 -1
  238. package/dist/ui/card-css.generated.d.ts +2 -0
  239. package/dist/ui/card-css.generated.d.ts.map +1 -0
  240. package/dist/ui/card-css.generated.js +4 -0
  241. package/dist/ui/card-css.generated.js.map +1 -0
  242. package/dist/ui/card-css.js +1 -35
  243. package/dist/ui/card-css.js.map +1 -1
  244. package/dist/ui/chip-css.d.ts +1 -1
  245. package/dist/ui/chip-css.d.ts.map +1 -1
  246. package/dist/ui/chip-css.generated.d.ts +2 -0
  247. package/dist/ui/chip-css.generated.d.ts.map +1 -0
  248. package/dist/ui/chip-css.generated.js +4 -0
  249. package/dist/ui/chip-css.generated.js.map +1 -0
  250. package/dist/ui/chip-css.js +1 -17
  251. package/dist/ui/chip-css.js.map +1 -1
  252. package/dist/ui/code-viewer-css.d.ts +2 -0
  253. package/dist/ui/code-viewer-css.d.ts.map +1 -0
  254. package/dist/ui/code-viewer-css.generated.d.ts +2 -0
  255. package/dist/ui/code-viewer-css.generated.d.ts.map +1 -0
  256. package/dist/ui/code-viewer-css.generated.js +4 -0
  257. package/dist/ui/code-viewer-css.generated.js.map +1 -0
  258. package/dist/ui/code-viewer-css.js +3 -0
  259. package/dist/ui/code-viewer-css.js.map +1 -0
  260. package/dist/ui/code-viewer-lang.d.ts +15 -0
  261. package/dist/ui/code-viewer-lang.d.ts.map +1 -0
  262. package/dist/ui/code-viewer-lang.js +190 -0
  263. package/dist/ui/code-viewer-lang.js.map +1 -0
  264. package/dist/ui/code-viewer-theme.d.ts +5 -0
  265. package/dist/ui/code-viewer-theme.d.ts.map +1 -0
  266. package/dist/ui/code-viewer-theme.js +138 -0
  267. package/dist/ui/code-viewer-theme.js.map +1 -0
  268. package/dist/ui/controls/back-to-top-css.generated.d.ts +2 -0
  269. package/dist/ui/controls/back-to-top-css.generated.d.ts.map +1 -0
  270. package/dist/ui/controls/back-to-top-css.generated.js +4 -0
  271. package/dist/ui/controls/back-to-top-css.generated.js.map +1 -0
  272. package/dist/ui/controls/button-css.generated.d.ts +2 -0
  273. package/dist/ui/controls/button-css.generated.d.ts.map +1 -0
  274. package/dist/ui/controls/button-css.generated.js +4 -0
  275. package/dist/ui/controls/button-css.generated.js.map +1 -0
  276. package/dist/ui/controls/datetime-css.generated.d.ts +2 -0
  277. package/dist/ui/controls/datetime-css.generated.d.ts.map +1 -0
  278. package/dist/ui/controls/datetime-css.generated.js +4 -0
  279. package/dist/ui/controls/datetime-css.generated.js.map +1 -0
  280. package/dist/ui/controls/field-css.generated.d.ts +2 -0
  281. package/dist/ui/controls/field-css.generated.d.ts.map +1 -0
  282. package/dist/ui/controls/field-css.generated.js +4 -0
  283. package/dist/ui/controls/field-css.generated.js.map +1 -0
  284. package/dist/ui/controls/hint-css.generated.d.ts +2 -0
  285. package/dist/ui/controls/hint-css.generated.d.ts.map +1 -0
  286. package/dist/ui/controls/hint-css.generated.js +4 -0
  287. package/dist/ui/controls/hint-css.generated.js.map +1 -0
  288. package/dist/ui/controls/loading-css.generated.d.ts +2 -0
  289. package/dist/ui/controls/loading-css.generated.d.ts.map +1 -0
  290. package/dist/ui/controls/loading-css.generated.js +4 -0
  291. package/dist/ui/controls/loading-css.generated.js.map +1 -0
  292. package/dist/ui/controls/segmented-css.generated.d.ts +2 -0
  293. package/dist/ui/controls/segmented-css.generated.d.ts.map +1 -0
  294. package/dist/ui/controls/segmented-css.generated.js +4 -0
  295. package/dist/ui/controls/segmented-css.generated.js.map +1 -0
  296. package/dist/ui/controls-css.d.ts +7 -8
  297. package/dist/ui/controls-css.d.ts.map +1 -1
  298. package/dist/ui/controls-css.js +13 -11
  299. package/dist/ui/controls-css.js.map +1 -1
  300. package/dist/ui/css.d.ts +5 -0
  301. package/dist/ui/css.d.ts.map +1 -1
  302. package/dist/ui/css.js +13 -4
  303. package/dist/ui/css.js.map +1 -1
  304. package/dist/ui/datetime-logic.d.ts +100 -0
  305. package/dist/ui/datetime-logic.d.ts.map +1 -0
  306. package/dist/ui/datetime-logic.js +193 -0
  307. package/dist/ui/datetime-logic.js.map +1 -0
  308. package/dist/ui/feedback-css.d.ts +1 -1
  309. package/dist/ui/feedback-css.d.ts.map +1 -1
  310. package/dist/ui/feedback-css.generated.d.ts +2 -0
  311. package/dist/ui/feedback-css.generated.d.ts.map +1 -0
  312. package/dist/ui/feedback-css.generated.js +4 -0
  313. package/dist/ui/feedback-css.generated.js.map +1 -0
  314. package/dist/ui/feedback-css.js +1 -53
  315. package/dist/ui/feedback-css.js.map +1 -1
  316. package/dist/ui/host-data.d.ts +103 -0
  317. package/dist/ui/host-data.d.ts.map +1 -0
  318. package/dist/ui/host-data.js +106 -0
  319. package/dist/ui/host-data.js.map +1 -0
  320. package/dist/ui/host-toast.d.ts +23 -0
  321. package/dist/ui/host-toast.d.ts.map +1 -0
  322. package/dist/ui/host-toast.js +34 -0
  323. package/dist/ui/host-toast.js.map +1 -0
  324. package/dist/ui/index.d.ts +12 -6
  325. package/dist/ui/index.d.ts.map +1 -1
  326. package/dist/ui/index.js +10 -4
  327. package/dist/ui/index.js.map +1 -1
  328. package/dist/ui/marquee-css.d.ts +2 -0
  329. package/dist/ui/marquee-css.d.ts.map +1 -0
  330. package/dist/ui/marquee-css.generated.d.ts +2 -0
  331. package/dist/ui/marquee-css.generated.d.ts.map +1 -0
  332. package/dist/ui/marquee-css.generated.js +4 -0
  333. package/dist/ui/marquee-css.generated.js.map +1 -0
  334. package/dist/ui/marquee-css.js +4 -0
  335. package/dist/ui/marquee-css.js.map +1 -0
  336. package/dist/ui/modal-host.d.ts +30 -0
  337. package/dist/ui/modal-host.d.ts.map +1 -0
  338. package/dist/ui/modal-host.js +101 -0
  339. package/dist/ui/modal-host.js.map +1 -0
  340. package/dist/ui/official.d.ts.map +1 -1
  341. package/dist/ui/official.js +45 -1
  342. package/dist/ui/official.js.map +1 -1
  343. package/dist/ui/panel-dock-css.d.ts +2 -0
  344. package/dist/ui/panel-dock-css.d.ts.map +1 -0
  345. package/dist/ui/panel-dock-css.generated.d.ts +2 -0
  346. package/dist/ui/panel-dock-css.generated.d.ts.map +1 -0
  347. package/dist/ui/panel-dock-css.generated.js +4 -0
  348. package/dist/ui/panel-dock-css.generated.js.map +1 -0
  349. package/dist/ui/panel-dock-css.js +4 -0
  350. package/dist/ui/panel-dock-css.js.map +1 -0
  351. package/dist/ui/panel-dock-logic.d.ts +50 -0
  352. package/dist/ui/panel-dock-logic.d.ts.map +1 -0
  353. package/dist/ui/panel-dock-logic.js +64 -0
  354. package/dist/ui/panel-dock-logic.js.map +1 -0
  355. package/dist/ui/picker-css.d.ts +1 -1
  356. package/dist/ui/picker-css.d.ts.map +1 -1
  357. package/dist/ui/picker-css.generated.d.ts +2 -0
  358. package/dist/ui/picker-css.generated.d.ts.map +1 -0
  359. package/dist/ui/picker-css.generated.js +4 -0
  360. package/dist/ui/picker-css.generated.js.map +1 -0
  361. package/dist/ui/picker-css.js +1 -48
  362. package/dist/ui/picker-css.js.map +1 -1
  363. package/dist/ui/picker-icons.d.ts +12 -0
  364. package/dist/ui/picker-icons.d.ts.map +1 -0
  365. package/dist/ui/picker-icons.js +29 -0
  366. package/dist/ui/picker-icons.js.map +1 -0
  367. package/dist/ui/picker-logic.d.ts +4 -1
  368. package/dist/ui/picker-logic.d.ts.map +1 -1
  369. package/dist/ui/picker-logic.js +1 -2
  370. package/dist/ui/picker-logic.js.map +1 -1
  371. package/dist/ui/resizer.d.ts +3 -1
  372. package/dist/ui/resizer.d.ts.map +1 -1
  373. package/dist/ui/resizer.js +1 -1
  374. package/dist/ui/resizer.js.map +1 -1
  375. package/dist/ui/toast-host.d.ts +24 -0
  376. package/dist/ui/toast-host.d.ts.map +1 -0
  377. package/dist/ui/toast-host.js +20 -0
  378. package/dist/ui/toast-host.js.map +1 -0
  379. package/dist/utils/date.d.ts +8 -0
  380. package/dist/utils/date.d.ts.map +1 -1
  381. package/dist/utils/date.js +16 -0
  382. package/dist/utils/date.js.map +1 -1
  383. package/dist/utils/i18n.d.ts +1 -1
  384. package/dist/utils/i18n.d.ts.map +1 -1
  385. package/dist/utils/i18n.js +437 -18
  386. package/dist/utils/i18n.js.map +1 -1
  387. package/dist/utils/index.d.ts +1 -1
  388. package/dist/utils/index.d.ts.map +1 -1
  389. package/dist/utils/index.js +1 -1
  390. package/dist/utils/index.js.map +1 -1
  391. package/dist/utils/path.d.ts.map +1 -1
  392. package/dist/utils/path.js +1 -0
  393. package/dist/utils/path.js.map +1 -1
  394. package/docs/README.md +12 -5
  395. package/docs/design/architecture.md +38 -8
  396. package/docs/design/copywriting.md +95 -0
  397. package/docs/design/doc-format.md +80 -0
  398. package/docs/design/doc-format.ts +39 -0
  399. package/docs/design/external/dsh-host.md +150 -1
  400. package/docs/design/features.md +4 -17
  401. package/docs/design/methods.md +13 -34
  402. package/docs/design/structure.md +25 -22
  403. package/docs/design/style.md +24 -50
  404. package/docs/help/design.doc.ts +112 -0
  405. package/docs/help/design.md +88 -0
  406. package/docs/help/explorer.doc.ts +136 -0
  407. package/docs/help/explorer.md +68 -0
  408. package/docs/help/index.doc.ts +79 -0
  409. package/docs/help/index.md +28 -0
  410. package/docs/help/integration.doc.ts +114 -0
  411. package/docs/help/integration.md +127 -0
  412. package/docs/help/methods.md +58 -0
  413. package/docs/help/session.doc.ts +154 -0
  414. package/docs/help/session.md +91 -0
  415. package/docs/help/style.md +80 -0
  416. package/docs/help/ui.doc.ts +404 -0
  417. package/docs/help/ui.md +342 -0
  418. package/docs/help/utils.doc.ts +133 -0
  419. package/docs/help/utils.md +96 -0
  420. package/docs/requirements.md +33 -12
  421. package/package.json +44 -3
  422. package/dist/ui/ErrorBoundary.d.ts +0 -22
  423. package/dist/ui/ErrorBoundary.d.ts.map +0 -1
  424. package/dist/ui/ErrorBoundary.js +0 -30
  425. package/dist/ui/ErrorBoundary.js.map +0 -1
  426. package/docs/design/features/design.md +0 -55
  427. package/docs/design/features/explorer.md +0 -73
  428. package/docs/design/features/session.md +0 -70
  429. package/docs/design/features/ui.md +0 -225
  430. package/docs/design/features/utils.md +0 -64
  431. package/docs/examples/integration.md +0 -103
@@ -0,0 +1,2 @@
1
+ export declare const BUTTON_CSS = "\n/* \u2500\u2500 \u6309\u94AE / \u56FE\u6807\u94AE P2 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n \u4E0E Segmented \u540C\u4E00\u6761\u9AD8\u5EA6\u7EAA\u5F8B\uFF1A--dshpc-control-h-sm(24) / -md(28) / -lg(32)\uFF0C\n \u6709\u8FB9\u6846\u7684 variant \u7528 1px \u771F\u8FB9\u6846 + \u5185\u90E8 padding \u8865\u56DE\uFF0C**\u6709\u8FB9 / \u65E0\u8FB9\u540C\u9AD8**\u3002\n\n \u4E09\u6761\u53D7\u63A7\u8F74\uFF082026-10-19 \u91CD\u5199\uFF0C\u5BF9\u9F50\u4E3B\u6D41 UI \u6846\u67B6\u7684\u5206\u7C7B\u53E3\u5F84\uFF09\uFF1A\n \u00B7 variant \u2014\u2014 \u5916\u89C2\u6863 = \u5F62\u6001 + \u8BED\u4E49\u8272\uFF0C\u5171 10 \u6863\uFF1A\n primary / secondary / outline / ghost / danger / success / warning / info /\n danger-outline\uFF08\u7EA2\u5B57\u63CF\u8FB9\uFF09/ link\uFF08\u884C\u5185\u94FE\u63A5\uFF09\n \u00B7 size \u2014\u2014 sm / md / lg\n \u00B7 block \u2014\u2014 \u6491\u6EE1\u7236\u5BBD\n \u6BCF\u4E00\u6863**\u53EA\u586B 5 \u4E2A\u5C40\u90E8\u53D8\u91CF**\uFF08--btn-bg / -fg / -border / -bg-hover / -bg-active\uFF09\uFF0C\n \u7ED3\u6784\u4E0E\u4EA4\u4E92\u53EA\u6709\u4E0A\u9762\u8FD9\u4E00\u4EFD\uFF1B\u4EFB\u4F55\u6863\u4F4D\u90FD\u4E0D\u8BB8\u518D\u5199\u4E00\u904D display/height/padding\u3002\n \u81EA\u5B9A\u4E49\u989C\u8272\uFF08Button \u7684 color \u53C2\u6570\uFF09\u540C\u6837\u53EA\u8986\u76D6\u8FD9 5 \u4E2A\u53D8\u91CF\uFF08token \u8986\u76D6\uFF0C\u4E0D\u662F\u65B0\u76AE\u80A4\uFF09\u3002\n\n \u26A0\uFE0F hover \u4E0D\u518D\u7528 opacity \u538B\u4E00\u5C42\uFF08\u7528\u6237 2026-10-19\uFF1A\u300C\u9ED1\u8272\u548C\u7EA2\u8272\u7684\u6309\u94AE\u79FB\u4E0A\u53BB\u53D8\u5316\u592A\u5C0F\uFF0C\n \u5B8C\u5168\u611F\u89C9\u4E0D\u5230\u989C\u8272\u53D8\u4E86\u300D\uFF09\u21D2 \u8D70 --dshpc-*-hover / -active \u7684\u660E\u786E\u6DF7\u8272\uFF0C\u89C1 tokens-css.ts\u3002 */\n.dshpc-btn{--btn-bg:transparent;--btn-fg:var(--dshpc-fg);--btn-border:transparent;--btn-pad:12px;\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);--btn-fg-hover:var(--btn-fg);\n appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;\n box-sizing:border-box;border:1px solid var(--btn-border);border-radius:var(--dshpc-radius-md);\n background-color:var(--btn-bg);color:var(--btn-fg);font-family:inherit;font-weight:500;white-space:nowrap;cursor:pointer;\n 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);}\n.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;}\n.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;}\n.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;}\n/* block\uFF1A\u6491\u6EE1\u7236\u5BBD\uFF08\u8868\u5355\u5E95\u680F / \u62BD\u5C49\u5E95\u90E8\u7684\u4E3B\u64CD\u4F5C\uFF09 */\n.dshpc-btn--block{display:flex;width:100%;}\n/* block + \u524D\u7F6E\u56FE\u6807 \u21D2 \u6587\u5B57\u89C6\u89C9\u5C45\u4E2D\uFF082026-10-19 \u7528\u6237\u70B9\u540D\uFF09\uFF1A\n \u5185\u5BB9\u7EC4 [\u56FE\u6807 + \u95F4\u8DDD + \u6587\u5B57] \u6574\u4F53\u5728\u76D2\u5185\u5C45\u4E2D\u65F6\uFF0C**\u6587\u5B57**\u7684\u4E2D\u5FC3\u4F1A\u88AB\u56FE\u6807\u63A8\u53F3\u534A\u683C\u3002\n \u628A\u53F3\u5185\u8FB9\u8DDD\u8865\u4E0A\u300C\u56FE\u6807\u5BBD + \u95F4\u8DDD\u300D\uFF0C\u53EF\u7528\u76D2\u968F\u4E4B\u5DE6\u79FB\u540C\u91CF \u21D2 \u6587\u5B57\u843D\u56DE\u89C6\u89C9\u4E2D\u5FC3\uFF0C\u56FE\u6807\u8D34\u5DE6\u4FA7\u3002\n \u56FE\u6807\u5BBD\u6309 1.2em \u4F30\uFF08\u5B98\u65B9\u56FE\u6807 14/16px vs \u5B57\u53F7 12/13px\uFF09\uFF0Cem \u968F\u5B57\u53F7\u6863\u81EA\u52A8\u7F29\u653E\u3002 */\n.dshpc-btn--block.dshpc-btn--icon-start{padding-right:calc(var(--btn-pad) + 1.2em + 6px);}\n.dshpc-btn__icon,.dshpc-btn__icon-end{display:inline-flex;align-items:center;justify-content:center;flex:none;line-height:0;}\n.dshpc-btn__icon svg,.dshpc-btn__icon-end svg{display:block;margin:0;}\n/* loading\uFF1A\u4E0D\u6362 DOM \u7ED3\u6784\uFF0C\u53EA\u5728\u6587\u6848\u524D\u63D2\u4E00\u4E2A\u540C\u8272\u5C0F\u5708\u3002\n \u26A0\uFE0F 2026-10-20 \u6539\u753B\u6CD5\uFF1A\u539F\u6765\u662F border:1.5px \u52A0 border-radius:999px \u753B\u7684\u73AF \u2014\u2014 \u771F\u673A\u5B9E\u6D4B computed\n radius \u5C31\u662F 999px\u3001\u5BBD\u9AD8\u90FD\u662F 12px\uFF08\u6CA1\u88AB\u4EFB\u4F55\u6837\u5F0F\u8986\u76D6\uFF09\uFF0C\u770B\u7740\u5374\"\u50CF\u5706\u89D2\u65B9\"\uFF0C\u539F\u56E0\u662F**\u6B21\u50CF\u7D20\u8FB9\u6846\n \uFF081.5px\uFF09\u5728 12px \u8FD9\u4E48\u5C0F\u7684\u5706\u4E0A\u88AB\u6297\u952F\u9F7F\u63D2\u503C\u62C9\u6BDB**\u3002\u6539\u7528 SVG \u77E2\u91CF\u5F27\uFF1A\u4EFB\u610F DPR \u4E0B\u90FD\u662F\u771F\u5706\u3002 */\n.dshpc-btn__spinner{display:block;flex:none;width:12px;height:12px;\n animation:dshpc-btn-spin .7s linear infinite;}\n/* shortcut: 12px \u662F\u56FA\u5B9A\u503C\uFF0C\u4E0D\u968F\u6309\u94AE\u5B57\u53F7\u7F29\u653E\uFF1B\u8981\u66F4\u5927\u5C31\u6539\u8FD9\u4E00\u5904\u3002 */\n@keyframes dshpc-btn-spin{to{transform:rotate(360deg)}}\n\n/* \u4EA4\u4E92\u6001\uFF1A\u989C\u8272\u53D8\u5316\u5199\u5728\u53D8\u91CF\u4E0A \u21D2 \u6240\u6709\u6863\u4F4D\u4E00\u6B21\u751F\u6548\uFF0C\u4E14\u53D8\u5316\u5E45\u5EA6\u7531 token \u51B3\u5B9A\uFF08\u591F\u660E\u663E\uFF09 */\n.dshpc-btn:hover:not(:disabled){background-color:var(--btn-bg-hover);color:var(--btn-fg-hover);}\n.dshpc-btn:active:not(:disabled){background-color:var(--btn-bg-active);transform:translateY(1px);}\n.dshpc-btn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}\n.dshpc-btn:disabled{cursor:default;opacity:.5;}\n\n.dshpc-btn--primary{--btn-bg:var(--dshpc-accent);--btn-fg:var(--dshpc-fg-inverse);\n --btn-bg-hover:var(--dshpc-accent-hover);--btn-bg-active:var(--dshpc-accent-active);}\n/* secondary\uFF1A\u4E2D\u6027\u5B9E\u5FC3\uFF08\u7070\u9762\uFF09\uFF0C\u7528\u4E8E\u300C\u53D6\u6D88 / \u6B21\u8981\u300D\u8FD9\u7C7B\u4E0E\u4E3B\u64CD\u4F5C\u5E76\u6392\u7684\u6309\u94AE */\n.dshpc-btn--secondary{--btn-bg:var(--dshpc-hover);--btn-fg:var(--dshpc-fg);\n --btn-bg-hover:var(--dshpc-active);--btn-bg-active:var(--dshpc-active);}\n.dshpc-btn--outline{--btn-bg:var(--dshpc-surface-1);--btn-border:var(--dshpc-border-strong);\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);}\n.dshpc-btn--ghost{--btn-fg:var(--dshpc-fg-2);--btn-fg-hover:var(--dshpc-fg);\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);}\n.dshpc-btn--danger{--btn-bg:var(--dshpc-danger);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-danger-hover);--btn-bg-active:var(--dshpc-danger-active);}\n.dshpc-btn--success{--btn-bg:var(--dshpc-success);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-success-hover);--btn-bg-active:var(--dshpc-success-active);}\n.dshpc-btn--warning{--btn-bg:var(--dshpc-warning);--btn-fg:var(--dshpc-on-warning);\n --btn-bg-hover:var(--dshpc-warning-hover);--btn-bg-active:var(--dshpc-warning-active);}\n.dshpc-btn--info{--btn-bg:var(--dshpc-business);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-business-hover);--btn-bg-active:var(--dshpc-business-active);}\n/* danger-outline\uFF1A\u7EA2\u5B57\u63CF\u8FB9\uFF08\u7834\u574F\u6027\u6B21\u8981\u64CD\u4F5C\uFF0C\u5982\u5361\u7247\u4E0A\u7684\u300C\u5220\u9664\u300D\uFF09\u3002\n \u26A0\uFE0F \u65E7\u4FEE\u9970\u7C7B danger-ink \u4FDD\u7559\u4E3A\u522B\u540D\uFF08\u6D88\u8D39\u65B9\u53EF\u80FD\u8FD8\u5728\u6302\uFF09\uFF0C\u4E24\u8005\u540C\u4E00\u5957\u76AE\u80A4\u3002 */\n.dshpc-btn--danger-outline,.dshpc-btn--danger-ink{--btn-border:var(--dshpc-danger);--btn-fg:var(--dshpc-danger);\n --btn-fg-hover:var(--dshpc-danger);--btn-bg-hover:var(--dshpc-danger-soft);--btn-bg-active:var(--dshpc-danger-soft);}\n/* link\uFF1A\u884C\u5185\u6587\u5B57\u94FE\u63A5\u578B\uFF08\u4F1A\u8BDD / \u4EA7\u51FA\u6587\u4EF6\u540D\uFF09\uFF0C\u65E0\u5E95\u65E0\u8FB9\u3001\u54C1\u724C\u84DD\u3001hover \u4E0B\u5212\u7EBF */\n.dshpc-btn--link{--btn-fg:var(--dshpc-link);--btn-fg-hover:var(--dshpc-link);\n --btn-bg-hover:transparent;--btn-bg-active:transparent;\n height:auto;padding:0;border:0;background:none;font-weight:400;text-align:left;}\n.dshpc-btn--link:hover:not(:disabled){text-decoration:underline;}\n\n/* \u56FE\u6807\u94AE\uFF1A\u7EAF\u56FE\u6807\uFF0C\u65B9\u5F62\uFF1B\u5C3A\u5BF8\u6863\u7684\u5BBD\u9AD8\u4E0E\u540C\u6863\u6587\u5B57\u6309\u94AE\u7B49\u9AD8 */\n.dshpc-iconbtn{appearance:none;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;\n border:1px solid transparent;border-radius:var(--dshpc-radius-sm);background:transparent;color:var(--dshpc-fg-2);\n font-family:inherit;cursor:pointer;flex:none;\n 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);}\n.dshpc-iconbtn--sm{width:var(--dshpc-control-h-sm);height:var(--dshpc-control-h-sm);font-size:var(--dshpc-font-sm);}\n.dshpc-iconbtn--md{width:var(--dshpc-control-h-md);height:var(--dshpc-control-h-md);font-size:var(--dshpc-font-md);}\n.dshpc-iconbtn--lg{width:var(--dshpc-control-h-lg);height:var(--dshpc-control-h-lg);font-size:var(--dshpc-font-md);}\n.dshpc-iconbtn--plain{color:var(--dshpc-fg-2);}\n.dshpc-iconbtn--outline{background:var(--dshpc-surface-1);border-color:var(--dshpc-border);color:var(--dshpc-fg-2);}\n.dshpc-iconbtn--danger{color:var(--dshpc-danger);}\n.dshpc-iconbtn:hover:not(:disabled){background:var(--dshpc-hover);color:var(--dshpc-fg);}\n.dshpc-iconbtn--danger:hover:not(:disabled){background:var(--dshpc-danger-soft);color:var(--dshpc-danger);}\n.dshpc-iconbtn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}\n.dshpc-iconbtn:disabled{cursor:default;opacity:.4;}\n\n/* \u2500\u2500 \u884C\u5F0F\u6587\u4EF6\u6309\u94AE\uFF08\u56FE\u6807 + \u6587\u4EF6\u540D\uFF09P2\uFF1A**\u5168\u7AD9\u552F\u4E00\u5B9E\u73B0**\uFF082026-10-04 \u6536\u7F16\uFF09\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n \u7528\u9014\uFF1A\u300C\u4EA7\u51FA\u7269 / \u9644\u4EF6\u300D\u90A3\u79CD**\u4E00\u884C\u4E00\u4E2A\u6587\u4EF6**\u7684\u6E05\u5355\u9879\uFF08\u57FA\u7840\u4FE1\u606F\u53F3\u680F\u4EA7\u51FA\u7269\u6E05\u5355\u3001\u9644\u4EF6\u533A\u3001\n \u6267\u884C\u8BB0\u5F55\u9875\u7684\u5C55\u5F00\u533A\uFF09\u3002\u5E73\u65F6\u900F\u660E\u3001**\u9F20\u6807\u79FB\u4E0A\u53BB\u624D\u51FA\u6D45\u5E95**\uFF08\u6CBF\u7528\u7528\u6237 2026-10-03 \u5B9A\u7684\u89C2\u611F\uFF09\u3002\n \u4E24\u4E2A\u5F62\u6001\u4FEE\u9970\u7C7B\uFF1A\n --block \u6491\u6EE1\u7236\u5BBD\uFF08\u6E05\u5355\u91CC\u4E00\u9879\u4E00\u884C\uFF09\n --inline \u5185\u5BB9\u5BBD\uFF08\u8DDF\u5728\u6587\u5B57\u540E\u5934\uFF0C\u5982\u9644\u4EF6\u884C\uFF09\n \u6536\u7F16\u539F\u56E0\uFF1A\u8FD9\u4EFD\u76AE\u80A4\u6B64\u524D\u53EA\u5199\u5728 task-list.tsx \u7684 TASK_LIST_CSS \u91CC\uFF08\u65E7\u540D .dshpc-info-out\uFF09\uFF0C\n \u6267\u884C\u8BB0\u5F55\u9875\u5C55\u5F00\u533A\u8981\u7528\u540C\u4E00\u79CD\u89C2\u611F \u21D2 \u4E0A\u63D0\u57FA\u7840\u5C42\uFF0C\u907F\u514D\u518D\u51FA\u73B0\u300C\u5404\u5199\u4E00\u4EFD\u5916\u89C2\u300D\uFF08\u540C\u540D\u4E0D\u540C\u76AE\u7684\u5751\u521A\u8E29\u8FC7\uFF09\u3002 */\n.dshpc-filechip{appearance:none;-webkit-appearance:none;border:0;border-radius:var(--dshpc-radius-xs);\n background:transparent;color:var(--dshpc-fg);font:inherit;text-align:left;cursor:pointer;min-width:0;\n transition:background-color var(--dshpc-dur) var(--dshpc-ease);}\n.dshpc-filechip:hover:not(:disabled){background:var(--dshpc-chip-bg);}\n.dshpc-filechip:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px;}\n.dshpc-filechip:disabled{cursor:default;background:transparent;color:var(--dshpc-fg-3);}\n.dshpc-filechip--block{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;\n padding:4px 6px;font-size:var(--dshpc-font-xs);}\n.dshpc-filechip--inline{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;font-size:var(--dshpc-font-sm);}\n\n@media (prefers-reduced-motion: reduce){.dshpc-btn,.dshpc-iconbtn,.dshpc-filechip{transition:none;}}\n";
2
+ //# sourceMappingURL=button-css.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-css.generated.d.ts","sourceRoot":"","sources":["../../../src/ui/controls/button-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,ugZAAyhQ,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ⚠️ 生成物,勿手改。真源 = src/ui/controls/button.css
2
+ // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
+ export const BUTTON_CSS = "\n/* ── 按钮 / 图标钮 P2 ───────────────────────────────────────────────────\n 与 Segmented 同一条高度纪律:--dshpc-control-h-sm(24) / -md(28) / -lg(32),\n 有边框的 variant 用 1px 真边框 + 内部 padding 补回,**有边 / 无边同高**。\n\n 三条受控轴(2026-10-19 重写,对齐主流 UI 框架的分类口径):\n · variant —— 外观档 = 形态 + 语义色,共 10 档:\n primary / secondary / outline / ghost / danger / success / warning / info /\n danger-outline(红字描边)/ link(行内链接)\n · size —— sm / md / lg\n · block —— 撑满父宽\n 每一档**只填 5 个局部变量**(--btn-bg / -fg / -border / -bg-hover / -bg-active),\n 结构与交互只有上面这一份;任何档位都不许再写一遍 display/height/padding。\n 自定义颜色(Button 的 color 参数)同样只覆盖这 5 个变量(token 覆盖,不是新皮肤)。\n\n ⚠️ hover 不再用 opacity 压一层(用户 2026-10-19:「黑色和红色的按钮移上去变化太小,\n 完全感觉不到颜色变了」)⇒ 走 --dshpc-*-hover / -active 的明确混色,见 tokens-css.ts。 */\n.dshpc-btn{--btn-bg:transparent;--btn-fg:var(--dshpc-fg);--btn-border:transparent;--btn-pad:12px;\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);--btn-fg-hover:var(--btn-fg);\n appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;\n box-sizing:border-box;border:1px solid var(--btn-border);border-radius:var(--dshpc-radius-md);\n background-color:var(--btn-bg);color:var(--btn-fg);font-family:inherit;font-weight:500;white-space:nowrap;cursor:pointer;\n 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);}\n.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;}\n.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;}\n.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;}\n/* block:撑满父宽(表单底栏 / 抽屉底部的主操作) */\n.dshpc-btn--block{display:flex;width:100%;}\n/* block + 前置图标 ⇒ 文字视觉居中(2026-10-19 用户点名):\n 内容组 [图标 + 间距 + 文字] 整体在盒内居中时,**文字**的中心会被图标推右半格。\n 把右内边距补上「图标宽 + 间距」,可用盒随之左移同量 ⇒ 文字落回视觉中心,图标贴左侧。\n 图标宽按 1.2em 估(官方图标 14/16px vs 字号 12/13px),em 随字号档自动缩放。 */\n.dshpc-btn--block.dshpc-btn--icon-start{padding-right:calc(var(--btn-pad) + 1.2em + 6px);}\n.dshpc-btn__icon,.dshpc-btn__icon-end{display:inline-flex;align-items:center;justify-content:center;flex:none;line-height:0;}\n.dshpc-btn__icon svg,.dshpc-btn__icon-end svg{display:block;margin:0;}\n/* loading:不换 DOM 结构,只在文案前插一个同色小圈。\n ⚠️ 2026-10-20 改画法:原来是 border:1.5px 加 border-radius:999px 画的环 —— 真机实测 computed\n radius 就是 999px、宽高都是 12px(没被任何样式覆盖),看着却\"像圆角方\",原因是**次像素边框\n (1.5px)在 12px 这么小的圆上被抗锯齿插值拉毛**。改用 SVG 矢量弧:任意 DPR 下都是真圆。 */\n.dshpc-btn__spinner{display:block;flex:none;width:12px;height:12px;\n animation:dshpc-btn-spin .7s linear infinite;}\n/* shortcut: 12px 是固定值,不随按钮字号缩放;要更大就改这一处。 */\n@keyframes dshpc-btn-spin{to{transform:rotate(360deg)}}\n\n/* 交互态:颜色变化写在变量上 ⇒ 所有档位一次生效,且变化幅度由 token 决定(够明显) */\n.dshpc-btn:hover:not(:disabled){background-color:var(--btn-bg-hover);color:var(--btn-fg-hover);}\n.dshpc-btn:active:not(:disabled){background-color:var(--btn-bg-active);transform:translateY(1px);}\n.dshpc-btn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}\n.dshpc-btn:disabled{cursor:default;opacity:.5;}\n\n.dshpc-btn--primary{--btn-bg:var(--dshpc-accent);--btn-fg:var(--dshpc-fg-inverse);\n --btn-bg-hover:var(--dshpc-accent-hover);--btn-bg-active:var(--dshpc-accent-active);}\n/* secondary:中性实心(灰面),用于「取消 / 次要」这类与主操作并排的按钮 */\n.dshpc-btn--secondary{--btn-bg:var(--dshpc-hover);--btn-fg:var(--dshpc-fg);\n --btn-bg-hover:var(--dshpc-active);--btn-bg-active:var(--dshpc-active);}\n.dshpc-btn--outline{--btn-bg:var(--dshpc-surface-1);--btn-border:var(--dshpc-border-strong);\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);}\n.dshpc-btn--ghost{--btn-fg:var(--dshpc-fg-2);--btn-fg-hover:var(--dshpc-fg);\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);}\n.dshpc-btn--danger{--btn-bg:var(--dshpc-danger);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-danger-hover);--btn-bg-active:var(--dshpc-danger-active);}\n.dshpc-btn--success{--btn-bg:var(--dshpc-success);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-success-hover);--btn-bg-active:var(--dshpc-success-active);}\n.dshpc-btn--warning{--btn-bg:var(--dshpc-warning);--btn-fg:var(--dshpc-on-warning);\n --btn-bg-hover:var(--dshpc-warning-hover);--btn-bg-active:var(--dshpc-warning-active);}\n.dshpc-btn--info{--btn-bg:var(--dshpc-business);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-business-hover);--btn-bg-active:var(--dshpc-business-active);}\n/* danger-outline:红字描边(破坏性次要操作,如卡片上的「删除」)。\n ⚠️ 旧修饰类 danger-ink 保留为别名(消费方可能还在挂),两者同一套皮肤。 */\n.dshpc-btn--danger-outline,.dshpc-btn--danger-ink{--btn-border:var(--dshpc-danger);--btn-fg:var(--dshpc-danger);\n --btn-fg-hover:var(--dshpc-danger);--btn-bg-hover:var(--dshpc-danger-soft);--btn-bg-active:var(--dshpc-danger-soft);}\n/* link:行内文字链接型(会话 / 产出文件名),无底无边、品牌蓝、hover 下划线 */\n.dshpc-btn--link{--btn-fg:var(--dshpc-link);--btn-fg-hover:var(--dshpc-link);\n --btn-bg-hover:transparent;--btn-bg-active:transparent;\n height:auto;padding:0;border:0;background:none;font-weight:400;text-align:left;}\n.dshpc-btn--link:hover:not(:disabled){text-decoration:underline;}\n\n/* 图标钮:纯图标,方形;尺寸档的宽高与同档文字按钮等高 */\n.dshpc-iconbtn{appearance:none;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;\n border:1px solid transparent;border-radius:var(--dshpc-radius-sm);background:transparent;color:var(--dshpc-fg-2);\n font-family:inherit;cursor:pointer;flex:none;\n 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);}\n.dshpc-iconbtn--sm{width:var(--dshpc-control-h-sm);height:var(--dshpc-control-h-sm);font-size:var(--dshpc-font-sm);}\n.dshpc-iconbtn--md{width:var(--dshpc-control-h-md);height:var(--dshpc-control-h-md);font-size:var(--dshpc-font-md);}\n.dshpc-iconbtn--lg{width:var(--dshpc-control-h-lg);height:var(--dshpc-control-h-lg);font-size:var(--dshpc-font-md);}\n.dshpc-iconbtn--plain{color:var(--dshpc-fg-2);}\n.dshpc-iconbtn--outline{background:var(--dshpc-surface-1);border-color:var(--dshpc-border);color:var(--dshpc-fg-2);}\n.dshpc-iconbtn--danger{color:var(--dshpc-danger);}\n.dshpc-iconbtn:hover:not(:disabled){background:var(--dshpc-hover);color:var(--dshpc-fg);}\n.dshpc-iconbtn--danger:hover:not(:disabled){background:var(--dshpc-danger-soft);color:var(--dshpc-danger);}\n.dshpc-iconbtn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}\n.dshpc-iconbtn:disabled{cursor:default;opacity:.4;}\n\n/* ── 行式文件按钮(图标 + 文件名)P2:**全站唯一实现**(2026-10-04 收编)──────────\n 用途:「产出物 / 附件」那种**一行一个文件**的清单项(基础信息右栏产出物清单、附件区、\n 执行记录页的展开区)。平时透明、**鼠标移上去才出浅底**(沿用用户 2026-10-03 定的观感)。\n 两个形态修饰类:\n --block 撑满父宽(清单里一项一行)\n --inline 内容宽(跟在文字后头,如附件行)\n 收编原因:这份皮肤此前只写在 task-list.tsx 的 TASK_LIST_CSS 里(旧名 .dshpc-info-out),\n 执行记录页展开区要用同一种观感 ⇒ 上提基础层,避免再出现「各写一份外观」(同名不同皮的坑刚踩过)。 */\n.dshpc-filechip{appearance:none;-webkit-appearance:none;border:0;border-radius:var(--dshpc-radius-xs);\n background:transparent;color:var(--dshpc-fg);font:inherit;text-align:left;cursor:pointer;min-width:0;\n transition:background-color var(--dshpc-dur) var(--dshpc-ease);}\n.dshpc-filechip:hover:not(:disabled){background:var(--dshpc-chip-bg);}\n.dshpc-filechip:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px;}\n.dshpc-filechip:disabled{cursor:default;background:transparent;color:var(--dshpc-fg-3);}\n.dshpc-filechip--block{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;\n padding:4px 6px;font-size:var(--dshpc-font-xs);}\n.dshpc-filechip--inline{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;font-size:var(--dshpc-font-sm);}\n\n@media (prefers-reduced-motion: reduce){.dshpc-btn,.dshpc-iconbtn,.dshpc-filechip{transition:none;}}\n";
4
+ //# sourceMappingURL=button-css.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-css.generated.js","sourceRoot":"","sources":["../../../src/ui/controls/button-css.generated.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qEAAqE;AACrE,MAAM,CAAC,MAAM,UAAU,GAAG,shQAAshQ,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const DATETIME_CSS = "/* \u65E5\u671F\u65F6\u95F4\u9009\u62E9\u5668\uFF08DateTimePicker\uFF09\u3002\u7C7B\u540D dshpc-dt-*\uFF1B\u914D\u8272\u53EA\u5403 token\uFF0C\u660E\u6697\u968F token \u5207\u6362\u3002\n \u7ED3\u6784\uFF1A\u89E6\u53D1\u5668\uFF08range = \u4E00\u4E2A\u6574\u6761\uFF1A\u4E24\u4E2A\u65E5\u671F\u533A + \u6837\u5F0F\u753B\u7684\u7070\u9694\u6761\uFF1Bsingle = \u5355\u65E5\u671F\uFF09\u2192 \u6D6E\u5C42\n \uFF08\u4E24\u4E2A\u72EC\u7ACB\u7AEF\u6846 + \u4E24\u5757\u72EC\u7ACB\u65E5\u5386 + \u5E95\u90E8\u52A8\u4F5C\uFF09\u3002\n \u6D6E\u5C42\u884C\u4E3A\u4E0E Picker \u4E00\u81F4\uFF1Aportal \u5230 body\u3001\u8D34\u8FB9\u7FFB\u8F6C\u3001\u70B9\u5916\u5173\u95ED\u3001\u65E0\u906E\u7F69\u3002 */\n.dshpc-dt{position:relative;display:inline-block;font-size:13px;line-height:20px}\n.dshpc-dt__trigger{\n display:inline-flex;align-items:center;justify-content:space-between;gap:6px;\n max-width:100%;height:var(--dshpc-control-h-md);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-dt__trigger--sm{height:var(--dshpc-control-h-sm);font-size:12px}\n.dshpc-dt__trigger--lg{height:var(--dshpc-control-h-lg)}\n.dshpc-dt__trigger:disabled{color:var(--dshpc-fg-dim);cursor:not-allowed;opacity:.7}\n/* \u7126\u70B9\u4E0E\u57FA\u7840 Input \u5B8C\u5168\u540C\u6B3E\uFF08\u70B9\u51FB\u5373\u84DD\u63CF\u8FB9 + 1px \u5149\u73AF\uFF09\u3002 */\n.dshpc-dt__trigger:focus{border-color:var(--dshpc-focus);box-shadow:0 0 0 1px var(--dshpc-focus)}\n.dshpc-dt__trigger-label{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;font-variant-numeric:tabular-nums}\n.dshpc-dt__trigger-label--empty{color:var(--dshpc-fg-dim)}\n.dshpc-dt__cal{flex:none;color:var(--dshpc-fg-3)}\n/* range \u89E6\u53D1\u5668\uFF1A\u4E00\u4E2A\u6574\u6761\u91CC\u4E24\u4E2A\u65E5\u671F\u533A + \u6837\u5F0F\u753B\u51FA\u6765\u7684\u7070\u9694\u6761\uFF08\u5DE6\u53F3\u4E24\u6761\u7AD6\u8FB9\uFF09\uFF0C\u70B9\u6574\u6761\u90FD\u5C55\u5F00\u3002 */\n/* \u7EC4\u6491\u6EE1\u89E6\u53D1\u5668\u5185\u5BB9\u9AD8\u5EA6\uFF0C\u9694\u6761\u624D\u80FD\u4E0A\u4E0B\u9876\u5230 border\u3002 */\n.dshpc-dt__pair-group{flex:1 1 auto;min-width:0;align-self:stretch;display:flex;align-items:center;gap:8px}\n/* \u4E24\u4E2A\u65E5\u671F\u533A\u5E73\u5206\uFF08flex:1 1 0\uFF09\uFF1A\u5F00\u59CB / \u7ED3\u675F\u6C38\u8FDC\u4E00\u6837\u5BBD\uFF0C\u4E0D\u968F\u5185\u5BB9\u504F\u8892\u3002 */\n.dshpc-dt__pair-date{flex:1 1 0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums}\n.dshpc-dt__pair-date--empty{color:var(--dshpc-fg-dim)}\n/* \u9694\u6761\uFF1A\u4E0A\u4E0B\u9876\u5230\u89E6\u53D1\u5668 border\uFF08\u4E0E\u8FB9\u6846\u8FDE\u8D77\u6765\uFF09\uFF0C\u4E2D\u95F4\u9694\u51FA\u4E00\u5757\uFF1B\u5757\u91CC\u653E\u300C\u5230\u300D\u7684\u7B26\u53F7\uFF08-\uFF0C\u7528\u6237 2026-10-24 \u62CD\u677F\uFF09\u3002 */\n.dshpc-dt__pair-sep{\n flex:none;align-self:stretch;width:22px;margin:0;\n display:inline-flex;align-items:center;justify-content:center;\n background:var(--dshpc-surface-sunken);\n border-left:1px solid var(--dshpc-border);border-right:1px solid var(--dshpc-border);\n color:var(--dshpc-fg-3);font-size:12px;line-height:1;\n}\n/* \u9ED8\u8BA4\u5BBD\uFF1A**\u56FA\u5B9A**\uFF08\u9009\u4E2D\u524D\u540E\u4E0D\u53D8\uFF09\uFF0C\u6570\u503C\u5BF9\u7167\u53C2\u8003\u56FE\u5B9E\u6D4B\uFF082x \u5C4F\uFF0C\u6362\u7B97 CSS px\uFF09\u540E\n \u7EDF\u4E00 -6px\uFF08\u7528\u6237 2026-10-24\uFF1A\u5B9E\u6D4B\u503C\u7559\u5F97\u504F\u591A\uFF09\uFF1A\n \u5355\u503C day 128 / \u65F6\u00B7\u5206 153.2 / \u79D2 174.8\uFF1B\u533A\u95F4 day 269 / \u5206 341.4 / \u79D2 377.6\u3002\n ch = \u5B57\u4F53\u91CC \"0\" \u7684\u5BBD\uFF08\u65E5\u671F tabular-nums \u7B49\u5BBD\uFF09\u21D2 \u5199\u6210 Nch + \u5E38\u6570\uFF1B\u5E38\u6570\u540C\u65F6\u515C\u4F4F\n \u9ED8\u8BA4\u5360\u4F4D\u300C\u8BF7\u9009\u62E9\u65E5\u671F\u65F6\u95F4\u300D\uFF087 \u6C49\u5B57\uFF09\u4E0D\u7701\u7565\u3002\u8C03\u7528\u65B9\u8981\u53E6\u7ED9\u5BBD\uFF1AclassName \u4F20 width\u3002 */\n.dshpc-dt__trigger--w-day{width:calc(10ch + 56px)}\n.dshpc-dt__trigger--w-minute{width:calc(16ch + 38px)}\n.dshpc-dt__trigger--w-second{width:calc(19ch + 38px)}\n.dshpc-dt__trigger--wr-day{width:calc(20ch + 125px)}\n.dshpc-dt__trigger--wr-minute{width:calc(32ch + 111px)}\n.dshpc-dt__trigger--wr-second{width:calc(38ch + 104px)}\n\n.dshpc-dt__pop{\n z-index:60;padding:10px;user-select:none;\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/* \u4E24\u4E2A\u72EC\u7ACB\u7AEF\u6846\uFF08range\uFF09\uFF1A\u70B9\u54EA\u4E2A\u54EA\u4E2A\u6210\u4E3A\u5F53\u524D\u7F16\u8F91\u7AEF\uFF0C\u4E92\u4E0D\u8054\u52A8\u3001\u53EA\u662F\u6392\u5728\u4E00\u8D77\u3002 */\n.dshpc-dt__ends{display:flex;gap:6px;margin-bottom:8px}\n.dshpc-dt__end{\n flex:1 1 0;min-width:0;display:flex;align-items:center;gap:6px;padding:4px 8px;\n text-align:left;background:var(--dshpc-surface-1);\n border:1px solid var(--dshpc-border-faint);border-radius:var(--dshpc-radius-sm);cursor:pointer;\n}\n.dshpc-dt__end--active{border-color:var(--dshpc-business);background:var(--dshpc-open-bg)}\n.dshpc-dt__end:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}\n.dshpc-dt__end-label{flex:none;font-size:11px;line-height:16px;color:var(--dshpc-fg-3);white-space:nowrap}\n.dshpc-dt__end-value{font-size:12px;line-height:18px;color:var(--dshpc-fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums}\n.dshpc-dt__end-value--empty{color:var(--dshpc-fg-dim)}\n\n.dshpc-dt__nav{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}\n.dshpc-dt__nav-group{display:flex;gap:2px}\n.dshpc-dt__nav-btn{\n display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;\n color:var(--dshpc-fg-2);background:none;border:0;border-radius:var(--dshpc-radius-sm);cursor:pointer;\n}\n.dshpc-dt__nav-btn:hover{background:var(--dshpc-surface-sunken);color:var(--dshpc-fg)}\n.dshpc-dt__nav-btn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:-1px}\n.dshpc-dt__caption{font-size:13px;font-weight:600;color:var(--dshpc-fg);white-space:nowrap}\n\n.dshpc-dt__grid{display:grid;grid-template-columns:repeat(7,30px);gap:2px}\n.dshpc-dt__wd{height:20px;font-size:11px;line-height:20px;color:var(--dshpc-fg-3);text-align:center}\n.dshpc-dt__cell{\n height:26px;padding:0;font-size:12px;font-variant-numeric:tabular-nums;\n color:var(--dshpc-fg);background:none;border:0;border-radius:var(--dshpc-radius-sm);cursor:pointer;\n}\n.dshpc-dt__cell:hover{background:var(--dshpc-surface-sunken)}\n.dshpc-dt__cell:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:-1px}\n.dshpc-dt__cell--out{color:var(--dshpc-fg-dim)}\n.dshpc-dt__cell--today{color:var(--dshpc-business);font-weight:600}\n/* \u8D77 / \u6B62\u7AEF\uFF1A\u54C1\u724C\u84DD\u5B9E\u9762\u53CD\u767D\uFF08\u4E0E Segmented weekday \u9009\u4E2D\u540C\u53E3\u5F84\uFF09\u3002 */\n.dshpc-dt__cell--sel{background:var(--dshpc-business);color:var(--dshpc-fg-inverse);font-weight:600}\n.dshpc-dt__cell--sel:hover{background:var(--dshpc-business-hover)}\n\n/* \u4E24\u5757\u65E5\u5386\u9762\u677F\uFF08range\uFF1A\u5DE6\u5F00\u59CB\u3001\u53F3\u7ED3\u675F\uFF0C\u5404\u9009\u5404\u7684\uFF09\u3002 */\n.dshpc-dt__panels{display:flex;gap:14px;align-items:flex-start}\n.dshpc-dt__panel{display:flex;flex-direction:column;gap:6px}\n\n.dshpc-dt__time{display:flex;align-items:flex-end;justify-content:center;gap:4px;margin-top:2px;padding-top:8px;border-top:1px solid var(--dshpc-border-faint)}\n.dshpc-dt__unit{display:flex;flex-direction:column;align-items:center;gap:2px}\n.dshpc-dt__unit-label{font-size:10px;line-height:14px;color:var(--dshpc-fg-3)}\n.dshpc-dt__step-btn{\n display:inline-flex;align-items:center;justify-content:center;width:34px;height:14px;padding:0;\n color:var(--dshpc-fg-2);background:none;border:0;border-radius:var(--dshpc-radius-sm);cursor:pointer;\n}\n.dshpc-dt__step-btn:hover{background:var(--dshpc-surface-sunken);color:var(--dshpc-fg)}\n.dshpc-dt__step-btn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:-1px}\n.dshpc-dt__step-val{\n width:34px;height:24px;padding:0;box-sizing:border-box;text-align:center;\n font-size:13px;font-variant-numeric:tabular-nums;color:var(--dshpc-fg);\n background:var(--dshpc-surface-sunken);border:1px solid var(--dshpc-border-faint);\n border-radius:var(--dshpc-radius-sm);outline:none;\n}\n.dshpc-dt__step-val:focus{border-color:var(--dshpc-focus);box-shadow:0 0 0 1px var(--dshpc-focus)}\n.dshpc-dt__step-val:disabled{color:var(--dshpc-fg-dim);cursor:not-allowed}\n.dshpc-dt__sep{padding-bottom:5px;color:var(--dshpc-fg-3);font-size:12px}\n\n.dshpc-dt__foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px;padding-top:8px;border-top:1px solid var(--dshpc-border-faint)}\n.dshpc-dt__foot-side{display:flex;align-items:center;gap:6px}\n.dshpc-dt__warn{font-size:11px;color:var(--dshpc-warning-label);white-space:nowrap}\n";
2
+ //# sourceMappingURL=datetime-css.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datetime-css.generated.d.ts","sourceRoot":"","sources":["../../../src/ui/controls/datetime-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,6lSAAy9N,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ⚠️ 生成物,勿手改。真源 = src/ui/controls/datetime.css
2
+ // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
+ export const DATETIME_CSS = "/* 日期时间选择器(DateTimePicker)。类名 dshpc-dt-*;配色只吃 token,明暗随 token 切换。\n 结构:触发器(range = 一个整条:两个日期区 + 样式画的灰隔条;single = 单日期)→ 浮层\n (两个独立端框 + 两块独立日历 + 底部动作)。\n 浮层行为与 Picker 一致:portal 到 body、贴边翻转、点外关闭、无遮罩。 */\n.dshpc-dt{position:relative;display:inline-block;font-size:13px;line-height:20px}\n.dshpc-dt__trigger{\n display:inline-flex;align-items:center;justify-content:space-between;gap:6px;\n max-width:100%;height:var(--dshpc-control-h-md);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-dt__trigger--sm{height:var(--dshpc-control-h-sm);font-size:12px}\n.dshpc-dt__trigger--lg{height:var(--dshpc-control-h-lg)}\n.dshpc-dt__trigger:disabled{color:var(--dshpc-fg-dim);cursor:not-allowed;opacity:.7}\n/* 焦点与基础 Input 完全同款(点击即蓝描边 + 1px 光环)。 */\n.dshpc-dt__trigger:focus{border-color:var(--dshpc-focus);box-shadow:0 0 0 1px var(--dshpc-focus)}\n.dshpc-dt__trigger-label{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;font-variant-numeric:tabular-nums}\n.dshpc-dt__trigger-label--empty{color:var(--dshpc-fg-dim)}\n.dshpc-dt__cal{flex:none;color:var(--dshpc-fg-3)}\n/* range 触发器:一个整条里两个日期区 + 样式画出来的灰隔条(左右两条竖边),点整条都展开。 */\n/* 组撑满触发器内容高度,隔条才能上下顶到 border。 */\n.dshpc-dt__pair-group{flex:1 1 auto;min-width:0;align-self:stretch;display:flex;align-items:center;gap:8px}\n/* 两个日期区平分(flex:1 1 0):开始 / 结束永远一样宽,不随内容偏袒。 */\n.dshpc-dt__pair-date{flex:1 1 0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums}\n.dshpc-dt__pair-date--empty{color:var(--dshpc-fg-dim)}\n/* 隔条:上下顶到触发器 border(与边框连起来),中间隔出一块;块里放「到」的符号(-,用户 2026-10-24 拍板)。 */\n.dshpc-dt__pair-sep{\n flex:none;align-self:stretch;width:22px;margin:0;\n display:inline-flex;align-items:center;justify-content:center;\n background:var(--dshpc-surface-sunken);\n border-left:1px solid var(--dshpc-border);border-right:1px solid var(--dshpc-border);\n color:var(--dshpc-fg-3);font-size:12px;line-height:1;\n}\n/* 默认宽:**固定**(选中前后不变),数值对照参考图实测(2x 屏,换算 CSS px)后\n 统一 -6px(用户 2026-10-24:实测值留得偏多):\n 单值 day 128 / 时·分 153.2 / 秒 174.8;区间 day 269 / 分 341.4 / 秒 377.6。\n ch = 字体里 \"0\" 的宽(日期 tabular-nums 等宽)⇒ 写成 Nch + 常数;常数同时兜住\n 默认占位「请选择日期时间」(7 汉字)不省略。调用方要另给宽:className 传 width。 */\n.dshpc-dt__trigger--w-day{width:calc(10ch + 56px)}\n.dshpc-dt__trigger--w-minute{width:calc(16ch + 38px)}\n.dshpc-dt__trigger--w-second{width:calc(19ch + 38px)}\n.dshpc-dt__trigger--wr-day{width:calc(20ch + 125px)}\n.dshpc-dt__trigger--wr-minute{width:calc(32ch + 111px)}\n.dshpc-dt__trigger--wr-second{width:calc(38ch + 104px)}\n\n.dshpc-dt__pop{\n z-index:60;padding:10px;user-select:none;\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/* 两个独立端框(range):点哪个哪个成为当前编辑端,互不联动、只是排在一起。 */\n.dshpc-dt__ends{display:flex;gap:6px;margin-bottom:8px}\n.dshpc-dt__end{\n flex:1 1 0;min-width:0;display:flex;align-items:center;gap:6px;padding:4px 8px;\n text-align:left;background:var(--dshpc-surface-1);\n border:1px solid var(--dshpc-border-faint);border-radius:var(--dshpc-radius-sm);cursor:pointer;\n}\n.dshpc-dt__end--active{border-color:var(--dshpc-business);background:var(--dshpc-open-bg)}\n.dshpc-dt__end:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}\n.dshpc-dt__end-label{flex:none;font-size:11px;line-height:16px;color:var(--dshpc-fg-3);white-space:nowrap}\n.dshpc-dt__end-value{font-size:12px;line-height:18px;color:var(--dshpc-fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums}\n.dshpc-dt__end-value--empty{color:var(--dshpc-fg-dim)}\n\n.dshpc-dt__nav{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}\n.dshpc-dt__nav-group{display:flex;gap:2px}\n.dshpc-dt__nav-btn{\n display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;\n color:var(--dshpc-fg-2);background:none;border:0;border-radius:var(--dshpc-radius-sm);cursor:pointer;\n}\n.dshpc-dt__nav-btn:hover{background:var(--dshpc-surface-sunken);color:var(--dshpc-fg)}\n.dshpc-dt__nav-btn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:-1px}\n.dshpc-dt__caption{font-size:13px;font-weight:600;color:var(--dshpc-fg);white-space:nowrap}\n\n.dshpc-dt__grid{display:grid;grid-template-columns:repeat(7,30px);gap:2px}\n.dshpc-dt__wd{height:20px;font-size:11px;line-height:20px;color:var(--dshpc-fg-3);text-align:center}\n.dshpc-dt__cell{\n height:26px;padding:0;font-size:12px;font-variant-numeric:tabular-nums;\n color:var(--dshpc-fg);background:none;border:0;border-radius:var(--dshpc-radius-sm);cursor:pointer;\n}\n.dshpc-dt__cell:hover{background:var(--dshpc-surface-sunken)}\n.dshpc-dt__cell:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:-1px}\n.dshpc-dt__cell--out{color:var(--dshpc-fg-dim)}\n.dshpc-dt__cell--today{color:var(--dshpc-business);font-weight:600}\n/* 起 / 止端:品牌蓝实面反白(与 Segmented weekday 选中同口径)。 */\n.dshpc-dt__cell--sel{background:var(--dshpc-business);color:var(--dshpc-fg-inverse);font-weight:600}\n.dshpc-dt__cell--sel:hover{background:var(--dshpc-business-hover)}\n\n/* 两块日历面板(range:左开始、右结束,各选各的)。 */\n.dshpc-dt__panels{display:flex;gap:14px;align-items:flex-start}\n.dshpc-dt__panel{display:flex;flex-direction:column;gap:6px}\n\n.dshpc-dt__time{display:flex;align-items:flex-end;justify-content:center;gap:4px;margin-top:2px;padding-top:8px;border-top:1px solid var(--dshpc-border-faint)}\n.dshpc-dt__unit{display:flex;flex-direction:column;align-items:center;gap:2px}\n.dshpc-dt__unit-label{font-size:10px;line-height:14px;color:var(--dshpc-fg-3)}\n.dshpc-dt__step-btn{\n display:inline-flex;align-items:center;justify-content:center;width:34px;height:14px;padding:0;\n color:var(--dshpc-fg-2);background:none;border:0;border-radius:var(--dshpc-radius-sm);cursor:pointer;\n}\n.dshpc-dt__step-btn:hover{background:var(--dshpc-surface-sunken);color:var(--dshpc-fg)}\n.dshpc-dt__step-btn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:-1px}\n.dshpc-dt__step-val{\n width:34px;height:24px;padding:0;box-sizing:border-box;text-align:center;\n font-size:13px;font-variant-numeric:tabular-nums;color:var(--dshpc-fg);\n background:var(--dshpc-surface-sunken);border:1px solid var(--dshpc-border-faint);\n border-radius:var(--dshpc-radius-sm);outline:none;\n}\n.dshpc-dt__step-val:focus{border-color:var(--dshpc-focus);box-shadow:0 0 0 1px var(--dshpc-focus)}\n.dshpc-dt__step-val:disabled{color:var(--dshpc-fg-dim);cursor:not-allowed}\n.dshpc-dt__sep{padding-bottom:5px;color:var(--dshpc-fg-3);font-size:12px}\n\n.dshpc-dt__foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px;padding-top:8px;border-top:1px solid var(--dshpc-border-faint)}\n.dshpc-dt__foot-side{display:flex;align-items:center;gap:6px}\n.dshpc-dt__warn{font-size:11px;color:var(--dshpc-warning-label);white-space:nowrap}\n";
4
+ //# sourceMappingURL=datetime-css.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datetime-css.generated.js","sourceRoot":"","sources":["../../../src/ui/controls/datetime-css.generated.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,qEAAqE;AACrE,MAAM,CAAC,MAAM,YAAY,GAAG,s9NAAs9N,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const FIELD_CSS = "\n/* \u2500\u2500 \u5B57\u6BB5 + \u95EE\u53F7\u63D0\u793A\uFF08hint \u53C2\u6570\u5185\u7F6E\uFF09 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n/* \u63A7\u4EF6 + FieldHint \u540C\u4E00\u884C\uFF1Bhint \u7248\u7531\u7EC4\u4EF6\u81EA\u5DF1\u5305\uFF0C\u8C03\u7528\u65B9\u53EA\u4F20 hint \u5B57\u7B26\u4E32\u3002\n \u94FA\u6EE1\u578B\u63A7\u4EF6\uFF08input/textarea\uFF09\u8FDB\u5305\u540E\u6539\u5403 flex \u5F39\u6027\uFF0C\u8BA9\u4F4D\u7ED9\u95EE\u53F7\u3002 */\n.dshpc-fieldwrap{display:flex;align-items:center;gap:6px;min-width:0;max-width:100%;}\n.dshpc-fieldwrap--inline{display:inline-flex;}\n.dshpc-fieldwrap > .dshpc-input,.dshpc-fieldwrap > .dshpc-textarea{flex:1 1 auto;width:auto;min-width:0;}\n/* \u591A\u884C\u8F93\u5165\uFF1A\u95EE\u53F7\u9489\u5728**\u53F3\u4E0B\u89D2**\uFF082026-10-20 \u7528\u6237\uFF1A\u4E0D\u8981\u5782\u76F4\u5C45\u4E2D\uFF09\uFF0C\u6587\u672C\u533A\u5E95\u90E8\u7559\u51FA\u5B83\u7684\u4F4D\u7F6E\u3002\n \u26A0\uFE0F \u8FD9\u4E00\u6863\u5FC5\u987B\u628A textarea \u7684\u5BBD\u5EA6\u8FD8\u56DE\u53BB\uFF08\u4E0A\u9762\u90A3\u6761 flex \u8BA9\u4F4D\u89C4\u5219\u4F1A\u628A\u5B83\u7F29\u7A84\uFF09\u3002 */\n.dshpc-fieldwrap--block{position:relative;display:block;}\n.dshpc-fieldwrap--block > .dshpc-textarea{width:100%;padding-bottom:24px;}\n.dshpc-fieldwrap--block > .dshpc-hint{position:absolute;right:8px;bottom:6px;}\n\n/* \u2500\u2500 \u8F93\u5165\u7C7B P3 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n/* \u9ED8\u8BA4\u94FA\u6EE1\u5BB9\u5668\uFF08width:100%\uFF0C\u4E0E .dshpc-textarea \u540C\u53E3\u5F84\uFF09\uFF1Ainput \u539F\u751F\u6309 size \u5C5E\u6027\u53D6\u5185\u5728\u5BBD\uFF0C\n \u4E0D\u94FA\u6EE1 \u21D2 \u8C03\u7528\u65B9\u5957\u5B9A\u5BBD\u58F3\u65F6\u4F1A\u300C\u53F3\u8FB9\u7A7A\u4E00\u622A\u3001\u770B\u7740\u6CA1\u8D34\u53F3\u300D\uFF082026-10-20 \u7528\u6237\u6293\u7684 bug\uFF09\u3002\n \u8981\u5B9A\u5BBD\u7531\u8C03\u7528\u65B9\u5728\u5916\u9762\u5957\u58F3\u63A7\u5236\uFF08\u5982 192px \u641C\u7D22\u69FD\uFF09\u3002 */\n.dshpc-input{display:block;width:100%;box-sizing:border-box;border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);\n background:var(--dshpc-surface-1);color:var(--dshpc-fg);font-family:inherit;outline:none;\n transition:border-color var(--dshpc-dur-fast) var(--dshpc-ease),box-shadow var(--dshpc-dur-fast) var(--dshpc-ease);}\n.dshpc-input--sm{height:var(--dshpc-control-h-sm);padding:0 8px;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);}\n.dshpc-input--md{height:var(--dshpc-control-h-md);padding:0 10px;font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}\n.dshpc-input--lg{height:var(--dshpc-control-h-lg);padding:0 12px;font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}\n.dshpc-input::placeholder{color:var(--dshpc-fg-dim);}\n.dshpc-input:focus{border-color:var(--dshpc-focus);box-shadow:0 0 0 1px var(--dshpc-focus);}\n.dshpc-input--error{border-color:var(--dshpc-danger);}\n.dshpc-input:disabled{cursor:default;opacity:.5;}\n\n.dshpc-pfx{display:inline-flex;align-items:center;box-sizing:border-box;overflow:hidden;\n border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);background:var(--dshpc-surface-1);color:var(--dshpc-fg);}\n.dshpc-pfx--sm{height:var(--dshpc-control-h-sm);}\n.dshpc-pfx--md{height:var(--dshpc-control-h-md);}\n.dshpc-pfx--lg{height:var(--dshpc-control-h-lg);}\n/* md / lg \u6863\u5B57\u53F7\u8DDF\u6863\u8D70\uFF08\u4E0E\u540C\u6863\u4E0B\u62C9\u540C\u5B57\u53F7\uFF09\uFF1A\u6B64\u524D\u5199\u6B7B sm(12px)\uFF0C\u540C\u6392\u4E0B\u62C9\u662F 13px \u21D2 \u663E\u5F97\u300Cinput \u5B57\u5C0F\u300D\u3002 */\n.dshpc-pfx--md .dshpc-pfx__label,.dshpc-pfx--lg .dshpc-pfx__label{font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}\n.dshpc-pfx--md .dshpc-pfx__input,.dshpc-pfx--lg .dshpc-pfx__input{font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}\n.dshpc-pfx--error{border-color:var(--dshpc-danger);}\n.dshpc-pfx:focus-within{border-color:var(--dshpc-focus);box-shadow:0 0 0 1px var(--dshpc-focus);}\n.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);}\n.dshpc-pfx__input{flex:1 1 auto;min-width:0;height:100%;padding:0 8px;border:0;background:transparent;color:var(--dshpc-fg);\n font-family:inherit;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);outline:none;}\n.dshpc-pfx__input::placeholder{color:var(--dshpc-fg-dim);}\n\n.dshpc-num{display:inline-flex;align-items:center;justify-content:space-between;box-sizing:border-box;overflow:hidden;\n border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);background:var(--dshpc-surface-1);color:var(--dshpc-fg);}\n/* \u4E2D\u6BB5\uFF1A\u6570\u5B57 + \u540E\u7F00\u6210\u7EC4\u5C45\u4E2D\uFF1B\u5BB9\u5668\u88AB\u6D88\u8D39\u7AEF\u62C9\u5BBD\u65F6\u5403\u6389\u5168\u90E8\u4F59\u91CF\uFF0C\u4E24\u7AEF \u2212 / + \u56E0\u6B64\u9489\u6B7B\u5728\u5DE6\u53F3\u8FB9\u7F18\u3002 */\n.dshpc-num__mid{display:flex;align-items:center;justify-content:center;flex:1 1 auto;min-width:0;}\n.dshpc-num--sm{height:var(--dshpc-control-h-sm);}\n.dshpc-num--md{height:var(--dshpc-control-h-md);}\n.dshpc-num--lg{height:var(--dshpc-control-h-lg);}\n.dshpc-num--md .dshpc-num__input,.dshpc-num--lg .dshpc-num__input{font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}\n.dshpc-num--md .dshpc-num__suffix,.dshpc-num--lg .dshpc-num__suffix{font-size:var(--dshpc-font-md);}\n.dshpc-num--disabled{opacity:.5;}\n/* \u7126\u70B9\u6001\u4E0E Input \u540C\u6B3E\uFF082026-10-20 \u7528\u6237\uFF1A\u6570\u5B57\u6846\u91CC\u70B9\u8FDB\u53BB\u6CA1\u6709\u84DD\u6846\uFF09\uFF1A\u5185\u5C42 input \u65E0\u8FB9\u6846\uFF0C\n \u7126\u70B9\u72B6\u6001\u753B\u5728\u6574\u4E2A\u6B65\u8FDB\u63A7\u4EF6\u5916\u6846\u4E0A\u3002 */\n.dshpc-num:focus-within{border-color:var(--dshpc-focus);box-shadow:0 0 0 1px var(--dshpc-focus);}\n.dshpc-num__input{width:36px;height:100%;padding:0 2px;border:0;background:transparent;color:var(--dshpc-fg);\n font-family:inherit;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);text-align:center;outline:none;}\n.dshpc-num__suffix{padding:0 6px;color:var(--dshpc-fg-2);font-size:var(--dshpc-font-sm);white-space:nowrap;}\n.dshpc-num .dshpc-iconbtn{border-radius:0;color:var(--dshpc-fg-2);flex:none;}\n\n/* \u5B98\u65B9 Switch \u5305\u88C5\u7EDF\u4E00\uFF1A\u9009\u4E2D = success \u7EFF\u3002\n \uFF08\u5408\u5E76\u539F\u5148 task-editor-css / task-list \u4E24\u5904\u5C31\u5730\u8986\u76D6\uFF1B\u9009\u62E9\u5668\u5E26\u5305\u88C5\u7C7B + role\uFF0C\u7279\u5F02\u6027\u9AD8\u4E8E\u5B98\u65B9\u3002\uFF09 */\n.dshpc-switch button[role='switch'][aria-checked='true']{background:var(--dshpc-success);}\n\n/* \u591A\u884C\u6587\u672C\u8F93\u5165\uFF08\u63D0\u793A\u8BCD\u7B49\uFF0CP3\uFF09\uFF1A**\u8FB9\u6846 / \u5706\u89D2 / \u5E95 / \u7126\u70B9\u6001\u4E0E Input \u540C\u4E00\u5957\u53E3\u5F84**\uFF08\u7528\u6237 2026-10-20\uFF1A\n \u300C\u591A\u884C\u8F93\u5165\u5E94\u8BE5\u548C input \u7684\u8FB9\u513F\u662F\u4E00\u4E2A\u9053\u7406\uFF0C\u5305\u62EC\u5706\u89D2\u5728\u5185\uFF0C\u90FD\u662F\u4E00\u4E2A\u4E1C\u897F\u300D\uFF09\u3002\n \u26A0\uFE0F \u65E7\u610F\u56FE\u300C\u5361\u5185\u65E0\u8FB9\u6846\u3001\u89C6\u89C9\u91CD\u5FC3\u5728\u6574\u5F20\u5361\u4E0A\u300D\u5DF2\u4F5C\u5E9F \u2014\u2014 \u73B0\u5728\u5B83\u5C31\u662F\u4E00\u53EA\u5E26\u6846\u7684\u591A\u884C\u8F93\u5165\u6846\u3002\n \uFF08\u4ECE task-editor-css \u7684 .dshpc-ed-prompt \u4E0A\u63D0\u800C\u6765\uFF1B\u4E1A\u52A1\u6587\u4EF6\u4E0D\u518D\u81EA\u5199 textarea \u76AE\u80A4\u3002\uFF09 */\n.dshpc-textarea{display:block;width:100%;box-sizing:border-box;min-height:132px;padding:8px 12px;\n border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);outline:none;\n background:var(--dshpc-surface-1);color:var(--dshpc-fg);font-family:inherit;font-size:var(--dshpc-font-lg);line-height:1.6;resize:vertical;\n transition:border-color var(--dshpc-dur-fast) var(--dshpc-ease),box-shadow var(--dshpc-dur-fast) var(--dshpc-ease);}\n.dshpc-textarea::placeholder{color:var(--dshpc-fg-dim);}\n.dshpc-textarea:focus{border-color:var(--dshpc-focus);box-shadow:0 0 0 1px var(--dshpc-focus);}\n/* \u6821\u9A8C\u4E0D\u901A\u8FC7\uFF1A\u4E0E Input \u4E00\u81F4\uFF0C\u8D70\u8FB9\u6846\u63CF\u7EA2\uFF08\u65E7\u7248\u662F box-shadow \u63CF\u7EA2\u76D2\uFF0C\u4E0E Input \u4E0D\u540C\u53E3\u5F84\uFF09 */\n.dshpc-textarea--error{border-color:var(--dshpc-danger);}\n.dshpc-textarea:disabled{cursor:default;opacity:.5;}\n@media (prefers-reduced-motion: reduce){.dshpc-textarea{transition:none;}}\n\n/* \u62D6\u62FD\u5206\u9694\u6761\uFF08\u7F16\u8F91\u5206\u680F / \u9884\u89C8 dock \u5171\u7528\uFF0CU20 #3\uFF09\uFF1A6px \u547D\u4E2D\u533A\uFF0Ccol-resize\uFF0C\u4E0D\u753B\u7EBF\uFF0Chover/\u6309\u4E0B\u6D6E\u51FA\u6D45\u5E26\u3002\n \u5177\u4F53 z-index \u7531 .dshpc-ed-resizer / .dshpc-sv-resizer \u5404\u81EA\u8865\u3002 */\n.dshpc-resizer{position:absolute;top:0;bottom:0;left:0;width:6px;cursor:col-resize;background:0 0;touch-action:none;user-select:none;}\n.dshpc-resizer:hover,.dshpc-resizer:active{background:var(--dshpc-hover,rgba(38,49,72,.06));}\n\n@media (prefers-reduced-motion: reduce){.dshpc-input,.dshpc-pfx{transition:none;}}\n";
2
+ //# sourceMappingURL=field-css.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-css.generated.d.ts","sourceRoot":"","sources":["../../../src/ui/controls/field-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,2lTAA43M,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ⚠️ 生成物,勿手改。真源 = src/ui/controls/field.css
2
+ // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
+ export const FIELD_CSS = "\n/* ── 字段 + 问号提示(hint 参数内置) ──────────────────────────────────── */\n/* 控件 + FieldHint 同一行;hint 版由组件自己包,调用方只传 hint 字符串。\n 铺满型控件(input/textarea)进包后改吃 flex 弹性,让位给问号。 */\n.dshpc-fieldwrap{display:flex;align-items:center;gap:6px;min-width:0;max-width:100%;}\n.dshpc-fieldwrap--inline{display:inline-flex;}\n.dshpc-fieldwrap > .dshpc-input,.dshpc-fieldwrap > .dshpc-textarea{flex:1 1 auto;width:auto;min-width:0;}\n/* 多行输入:问号钉在**右下角**(2026-10-20 用户:不要垂直居中),文本区底部留出它的位置。\n ⚠️ 这一档必须把 textarea 的宽度还回去(上面那条 flex 让位规则会把它缩窄)。 */\n.dshpc-fieldwrap--block{position:relative;display:block;}\n.dshpc-fieldwrap--block > .dshpc-textarea{width:100%;padding-bottom:24px;}\n.dshpc-fieldwrap--block > .dshpc-hint{position:absolute;right:8px;bottom:6px;}\n\n/* ── 输入类 P3 ────────────────────────────────────────────────────────── */\n/* 默认铺满容器(width:100%,与 .dshpc-textarea 同口径):input 原生按 size 属性取内在宽,\n 不铺满 ⇒ 调用方套定宽壳时会「右边空一截、看着没贴右」(2026-10-20 用户抓的 bug)。\n 要定宽由调用方在外面套壳控制(如 192px 搜索槽)。 */\n.dshpc-input{display:block;width:100%;box-sizing:border-box;border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);\n background:var(--dshpc-surface-1);color:var(--dshpc-fg);font-family:inherit;outline:none;\n transition:border-color var(--dshpc-dur-fast) var(--dshpc-ease),box-shadow var(--dshpc-dur-fast) var(--dshpc-ease);}\n.dshpc-input--sm{height:var(--dshpc-control-h-sm);padding:0 8px;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);}\n.dshpc-input--md{height:var(--dshpc-control-h-md);padding:0 10px;font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}\n.dshpc-input--lg{height:var(--dshpc-control-h-lg);padding:0 12px;font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}\n.dshpc-input::placeholder{color:var(--dshpc-fg-dim);}\n.dshpc-input:focus{border-color:var(--dshpc-focus);box-shadow:0 0 0 1px var(--dshpc-focus);}\n.dshpc-input--error{border-color:var(--dshpc-danger);}\n.dshpc-input:disabled{cursor:default;opacity:.5;}\n\n.dshpc-pfx{display:inline-flex;align-items:center;box-sizing:border-box;overflow:hidden;\n border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);background:var(--dshpc-surface-1);color:var(--dshpc-fg);}\n.dshpc-pfx--sm{height:var(--dshpc-control-h-sm);}\n.dshpc-pfx--md{height:var(--dshpc-control-h-md);}\n.dshpc-pfx--lg{height:var(--dshpc-control-h-lg);}\n/* md / lg 档字号跟档走(与同档下拉同字号):此前写死 sm(12px),同排下拉是 13px ⇒ 显得「input 字小」。 */\n.dshpc-pfx--md .dshpc-pfx__label,.dshpc-pfx--lg .dshpc-pfx__label{font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}\n.dshpc-pfx--md .dshpc-pfx__input,.dshpc-pfx--lg .dshpc-pfx__input{font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}\n.dshpc-pfx--error{border-color:var(--dshpc-danger);}\n.dshpc-pfx:focus-within{border-color:var(--dshpc-focus);box-shadow:0 0 0 1px var(--dshpc-focus);}\n.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);}\n.dshpc-pfx__input{flex:1 1 auto;min-width:0;height:100%;padding:0 8px;border:0;background:transparent;color:var(--dshpc-fg);\n font-family:inherit;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);outline:none;}\n.dshpc-pfx__input::placeholder{color:var(--dshpc-fg-dim);}\n\n.dshpc-num{display:inline-flex;align-items:center;justify-content:space-between;box-sizing:border-box;overflow:hidden;\n border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);background:var(--dshpc-surface-1);color:var(--dshpc-fg);}\n/* 中段:数字 + 后缀成组居中;容器被消费端拉宽时吃掉全部余量,两端 − / + 因此钉死在左右边缘。 */\n.dshpc-num__mid{display:flex;align-items:center;justify-content:center;flex:1 1 auto;min-width:0;}\n.dshpc-num--sm{height:var(--dshpc-control-h-sm);}\n.dshpc-num--md{height:var(--dshpc-control-h-md);}\n.dshpc-num--lg{height:var(--dshpc-control-h-lg);}\n.dshpc-num--md .dshpc-num__input,.dshpc-num--lg .dshpc-num__input{font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}\n.dshpc-num--md .dshpc-num__suffix,.dshpc-num--lg .dshpc-num__suffix{font-size:var(--dshpc-font-md);}\n.dshpc-num--disabled{opacity:.5;}\n/* 焦点态与 Input 同款(2026-10-20 用户:数字框里点进去没有蓝框):内层 input 无边框,\n 焦点状态画在整个步进控件外框上。 */\n.dshpc-num:focus-within{border-color:var(--dshpc-focus);box-shadow:0 0 0 1px var(--dshpc-focus);}\n.dshpc-num__input{width:36px;height:100%;padding:0 2px;border:0;background:transparent;color:var(--dshpc-fg);\n font-family:inherit;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);text-align:center;outline:none;}\n.dshpc-num__suffix{padding:0 6px;color:var(--dshpc-fg-2);font-size:var(--dshpc-font-sm);white-space:nowrap;}\n.dshpc-num .dshpc-iconbtn{border-radius:0;color:var(--dshpc-fg-2);flex:none;}\n\n/* 官方 Switch 包装统一:选中 = success 绿。\n (合并原先 task-editor-css / task-list 两处就地覆盖;选择器带包装类 + role,特异性高于官方。) */\n.dshpc-switch button[role='switch'][aria-checked='true']{background:var(--dshpc-success);}\n\n/* 多行文本输入(提示词等,P3):**边框 / 圆角 / 底 / 焦点态与 Input 同一套口径**(用户 2026-10-20:\n 「多行输入应该和 input 的边儿是一个道理,包括圆角在内,都是一个东西」)。\n ⚠️ 旧意图「卡内无边框、视觉重心在整张卡上」已作废 —— 现在它就是一只带框的多行输入框。\n (从 task-editor-css 的 .dshpc-ed-prompt 上提而来;业务文件不再自写 textarea 皮肤。) */\n.dshpc-textarea{display:block;width:100%;box-sizing:border-box;min-height:132px;padding:8px 12px;\n border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);outline:none;\n background:var(--dshpc-surface-1);color:var(--dshpc-fg);font-family:inherit;font-size:var(--dshpc-font-lg);line-height:1.6;resize:vertical;\n transition:border-color var(--dshpc-dur-fast) var(--dshpc-ease),box-shadow var(--dshpc-dur-fast) var(--dshpc-ease);}\n.dshpc-textarea::placeholder{color:var(--dshpc-fg-dim);}\n.dshpc-textarea:focus{border-color:var(--dshpc-focus);box-shadow:0 0 0 1px var(--dshpc-focus);}\n/* 校验不通过:与 Input 一致,走边框描红(旧版是 box-shadow 描红盒,与 Input 不同口径) */\n.dshpc-textarea--error{border-color:var(--dshpc-danger);}\n.dshpc-textarea:disabled{cursor:default;opacity:.5;}\n@media (prefers-reduced-motion: reduce){.dshpc-textarea{transition:none;}}\n\n/* 拖拽分隔条(编辑分栏 / 预览 dock 共用,U20 #3):6px 命中区,col-resize,不画线,hover/按下浮出浅带。\n 具体 z-index 由 .dshpc-ed-resizer / .dshpc-sv-resizer 各自补。 */\n.dshpc-resizer{position:absolute;top:0;bottom:0;left:0;width:6px;cursor:col-resize;background:0 0;touch-action:none;user-select:none;}\n.dshpc-resizer:hover,.dshpc-resizer:active{background:var(--dshpc-hover,rgba(38,49,72,.06));}\n\n@media (prefers-reduced-motion: reduce){.dshpc-input,.dshpc-pfx{transition:none;}}\n";
4
+ //# sourceMappingURL=field-css.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-css.generated.js","sourceRoot":"","sources":["../../../src/ui/controls/field-css.generated.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,qEAAqE;AACrE,MAAM,CAAC,MAAM,SAAS,GAAG,y3MAAy3M,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const HINT_CSS = "\n/* \u2500\u2500 \u95EE\u53F7\u63D0\u793A P4\uFF08\u7528\u6237 2026-10-18\uFF1A\u5BF9\u9F50\u771F\u5B9E\u63D2\u4EF6 HelpButton\u2014\u2014**\u5E26\u5708\u7684\u95EE\u53F7\u56FE\u6807**\uFF09\u2500\u2500\n \u672C\u4F53 14px \u7EC6\u5708 + \u5708\u5185 ?\uFF0C\u989C\u8272 fg-3\u3001hover \u53EA\u63D0\u4EAE\u4E0D\u52A0\u5E95\uFF08\u4E0E dshpc-ed-help \u540C\u89C4\u77E9\uFF09\u3002\n \u6C14\u6CE1\u4E0D\u5728\u672C\u6587\u4EF6\uFF1A2026-10-19 \u7528\u6237\u62CD\u677F\u300C\u95EE\u53F7\u5FC5\u987B\u7528\u5B98\u65B9 Tooltip \u90A3\u4E00\u4E2A\u300D\u21D2 \u6C14\u6CE1\u7531\u6CE8\u5165\u7684\n \u5B98\u65B9\u7EC4\u4EF6\u6E32\u67D3\uFF08src/ui/tooltip.ts\uFF09\uFF0C\u8FD9\u91CC\u53EA\u7BA1\u95EE\u53F7\u56FE\u6807\u672C\u8EAB\u3002 */\n.dshpc-hint{display:inline-flex;align-items:center;justify-content:center;flex:none;\n box-sizing:border-box;width:14px;height:14px;padding:0;border:1px solid currentColor;border-radius:50%;background:transparent;\n color:var(--dshpc-fg-3);font-family:inherit;font-size:8px;font-weight:600;line-height:12px;cursor:help;vertical-align:middle;\n transition:color var(--dshpc-dur-fast) var(--dshpc-ease);}\n.dshpc-hint:hover,.dshpc-hint:focus-visible{color:var(--dshpc-fg);background:0 0;}\n.dshpc-hint:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px;}\n";
2
+ //# sourceMappingURL=hint-css.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hint-css.generated.d.ts","sourceRoot":"","sources":["../../../src/ui/controls/hint-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,2yCAA6yB,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ⚠️ 生成物,勿手改。真源 = src/ui/controls/hint.css
2
+ // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
+ export const HINT_CSS = "\n/* ── 问号提示 P4(用户 2026-10-18:对齐真实插件 HelpButton——**带圈的问号图标**)──\n 本体 14px 细圈 + 圈内 ?,颜色 fg-3、hover 只提亮不加底(与 dshpc-ed-help 同规矩)。\n 气泡不在本文件:2026-10-19 用户拍板「问号必须用官方 Tooltip 那一个」⇒ 气泡由注入的\n 官方组件渲染(src/ui/tooltip.ts),这里只管问号图标本身。 */\n.dshpc-hint{display:inline-flex;align-items:center;justify-content:center;flex:none;\n box-sizing:border-box;width:14px;height:14px;padding:0;border:1px solid currentColor;border-radius:50%;background:transparent;\n color:var(--dshpc-fg-3);font-family:inherit;font-size:8px;font-weight:600;line-height:12px;cursor:help;vertical-align:middle;\n transition:color var(--dshpc-dur-fast) var(--dshpc-ease);}\n.dshpc-hint:hover,.dshpc-hint:focus-visible{color:var(--dshpc-fg);background:0 0;}\n.dshpc-hint:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px;}\n";
4
+ //# sourceMappingURL=hint-css.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hint-css.generated.js","sourceRoot":"","sources":["../../../src/ui/controls/hint-css.generated.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,qEAAqE;AACrE,MAAM,CAAC,MAAM,QAAQ,GAAG,0yBAA0yB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const LOADING_CSS = "\n/* \u8FD0\u884C\u4E2D / loading \u7684\u6D3B\u52A8\u6307\u793A\uFF1A\u4E09\u4E2A\u5C0F\u65B9\u5757\u4F9D\u6B21\u8109\u52A8\u3002 */\n@keyframes dshpc-run-block { 0%, 80%, 100% { opacity: 0.25; transform: scale(0.8) } 40% { opacity: 1; transform: scale(1) } }\n.dshpc-run-blocks { display: inline-flex; align-items: center; gap: 3px; }\n.dshpc-run-blocks > i { width: 5px; height: 5px; border-radius: 1px; background: currentColor; animation: dshpc-run-block 1.2s ease-in-out infinite; }\n.dshpc-run-blocks > i:nth-child(2) { animation-delay: 0.15s; }\n.dshpc-run-blocks > i:nth-child(3) { animation-delay: 0.3s; }\n@media (prefers-reduced-motion: reduce) { .dshpc-run-blocks > i { animation: none; opacity: 1; } }\n";
2
+ //# sourceMappingURL=loading-css.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading-css.generated.d.ts","sourceRoot":"","sources":["../../../src/ui/controls/loading-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,ktBAAmnB,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ⚠️ 生成物,勿手改。真源 = src/ui/controls/loading.css
2
+ // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
+ export const LOADING_CSS = "\n/* 运行中 / loading 的活动指示:三个小方块依次脉动。 */\n@keyframes dshpc-run-block { 0%, 80%, 100% { opacity: 0.25; transform: scale(0.8) } 40% { opacity: 1; transform: scale(1) } }\n.dshpc-run-blocks { display: inline-flex; align-items: center; gap: 3px; }\n.dshpc-run-blocks > i { width: 5px; height: 5px; border-radius: 1px; background: currentColor; animation: dshpc-run-block 1.2s ease-in-out infinite; }\n.dshpc-run-blocks > i:nth-child(2) { animation-delay: 0.15s; }\n.dshpc-run-blocks > i:nth-child(3) { animation-delay: 0.3s; }\n@media (prefers-reduced-motion: reduce) { .dshpc-run-blocks > i { animation: none; opacity: 1; } }\n";
4
+ //# sourceMappingURL=loading-css.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading-css.generated.js","sourceRoot":"","sources":["../../../src/ui/controls/loading-css.generated.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,qEAAqE;AACrE,MAAM,CAAC,MAAM,WAAW,GAAG,gnBAAgnB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const SEGMENTED_CSS = "\n/* \u2500\u2500 \u5206\u6BB5\u63A7\u4EF6 P2 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n \u7ED3\u6784\u7167\u5144\u5F1F\u9879\u76EE dsh-task-dispatch-table \u7684 Segmented \u76AE\u80A4\uFF08item \u65E0\u8FB9\u6846\u3001hover \u53EA\u63D0\u4EAE\u6587\u5B57\uFF09\uFF0C\n \u524D\u7F00 / \u53D8\u91CF\u540D\u6362\u6210\u672C\u4ED3\u53E3\u5F84\u3002\u7528\u6237\u989D\u5916\u8981\u7684\u4E24\u5904\uFF08\u5144\u5F1F\u6CA1\u6709\uFF09\uFF1Aweekday \u65B9\u5757\u95F4\u9694\uFF08\u73B0\u4E3A 2px\uFF09\uFF1B\u6BB5\u5185\u4E2D\u6027\u8BA1\u6570 __count\u3002\n \u26A0\uFE0F 2026-10-19 \u4E24\u6B21\u8BEF\u5224\u5747\u5DF2\u6F84\u6E05\uFF1A\u2460 \u300C\u5BBF\u4E3B\u53EA\u8BA4\u5355\u884C CSS\u300D\u2014\u2014\u5047\uFF0C\u591A\u884C\u4E00\u76F4\u6B63\u5E38\uFF1B\n \u2461 \u300C\u5BBF\u4E3B\u5403\u6389 token \u5757\u4E4B\u540E\u7B2C\u4E00\u6761\u89C4\u5219\u300D\u2014\u2014\u4E5F\u5047\uFF0C\u771F\u56E0\u662F tokens \u6A21\u677F\u5B57\u7B26\u4E32\u7ED3\u5C3E\u591A\u4E86\u4E00\u4E2A\u53CD\u659C\u6760\uFF0C\n \u6CE8\u5165\u6587\u672C\u91CC\u7559\u4E0B\u5B57\u9762\u53CD\u5F15\u53F7\uFF0C\u628A\u7D27\u968F\u5176\u540E\u7684\u90A3\u6761\u89C4\u5219\u7684\u9009\u62E9\u5668\u6C61\u67D3\u6389\u4E86\uFF08\u89C1 dsh-host.md \u00A79\uFF09\u3002\n \u6837\u5F0F\u7167\u5E38\u591A\u884C\u4E66\u5199\uFF0C\u4E0D\u5FC5\u538B\u884C\uFF1B\u4E5F\u4E0D\u9700\u8981\u4EFB\u4F55\u300C\u727A\u7272\u89C4\u5219\u300D\u3002 */\n.dshpc-seg{display:inline-flex;align-items:center;gap:2px;padding:2px;border-radius:var(--dshpc-radius-md);background:var(--dshpc-seg-track);}\n.dshpc-seg--default{--seg-track:var(--dshpc-seg-track);--seg-thumb:var(--dshpc-surface-raised);border:0;padding:2px;background:var(--seg-track);}\n.dshpc-seg--inset{--seg-track:var(--dshpc-seg-track);--seg-thumb:var(--dshpc-surface-raised);border:0;padding:3px;background:var(--seg-track);}\n.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);}\n.dshpc-seg--md .dshpc-seg__item{height:calc(var(--dshpc-control-h-md) - 6px);}\n.dshpc-seg--lg .dshpc-seg__item{height:calc(var(--dshpc-control-h-lg) - 6px);}\n.dshpc-seg__item:hover:not([aria-pressed='true']):not(:disabled){color:var(--dshpc-fg);}\n.dshpc-seg__item[aria-pressed='true']{background:var(--seg-thumb);box-shadow:var(--dshpc-shadow-raised);color:var(--dshpc-fg);font-weight:600;}\n.dshpc-seg__item:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:-2px;}\n.dshpc-seg__item:disabled{cursor:default;opacity:.4;}\n/* \u6BB5\u5185\u89D2\u6807\uFF08\u5982\u300C\u5F02\u5E38\u300D\u7684\u6570\u91CF\uFF09\uFF1A\u8BED\u4E49\u8272\u5B9E\u9762 + \u53CD\u767D\u5B57\uFF0C0 \u7531\u7EC4\u4EF6\u4FA7\u4E0D\u6E32\u67D3\u3002\u5FC5\u987B\u662F\u6B63\u5706\uFF08\u7528\u6237 2026-10-03\uFF09\u3002 */\n.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;}\n/* \u6BB5\u5185\u4E2D\u6027\u8BA1\u6570\uFF08\u5982\u7B5B\u9009\u6761\u300C\u5168\u90E8 11\u300D\uFF09\uFF1A\u7EAF\u6587\u5B57\u3001\u65E0\u5E95\u65E0\u8FB9\uFF08\u5BF9\u9F50 task-ledger .dtl-seg__num \u62CD\u677F\u53E3\u5F84\uFF09\uFF1B0 \u7531\u7EC4\u4EF6\u4FA7\u4E0D\u6E32\u67D3\u3002 */\n.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;}\n/* block\uFF1A\u6491\u6EE1\u7236\u5BBD\uFF08\u8868\u5355\u884C\u7528\uFF09\uFF0C\u5404\u6BB5\u7B49\u5206 */\n.dshpc-seg--block{display:flex;width:100%;}\n.dshpc-seg--block .dshpc-seg__item{flex:1 1 auto;justify-content:center;}\n/* weekday\uFF1A\u661F\u671F\u591A\u9009\u65B9\u5757\u3002\u57FA\u7840\u63D2\u4EF6\u7684\u7279\u6B8A\u5316\u5B9A\u5236\uFF08\u7528\u6237 2026-10-01\uFF1A\u539F WeekdayPicker \u5373\u300C\u84DD\u5E95 + \u8FD1\u4F3C\u65B9\u5F62\u300D\uFF09\uFF1A\n \u6BCF\u683C\u6B63\u65B9\u5F62\uFF08\u5BBD = \u6BB5\u9AD8\uFF09\u3001\u9009\u4E2D\u54C1\u724C\u84DD\u53CD\u767D\u5B57\u3001**\u65E0\u5916\u63CF\u8FB9**\uFF082026-10-18 \u91CD\u7533\uFF09\u3001\n \u65B9\u5757\u4E4B\u95F4\u95F4\u8DDD gap:2px\uFF082026-10-20 \u7528\u6237\u5B9A\u7A3F\uFF1A\u65B9\u5757\u6539\u5C0F\u540E 6px \u663E\u5F97\u592A\u5BBD\u300210-18 \u66FE\u4ECE 2px \u653E\u5BBD\u5230 6px\uFF0C\n \u4E24\u6B21\u90FD\u662F\u7528\u6237\u62CD\u677F \u2014\u2014 \u522B\u81EA\u4F5C\u4E3B\u5F20\u6539\u56DE\u53BB\uFF09\u3002 */\n.dshpc-seg--weekday{--seg-track:var(--dshpc-seg-track);gap:2px;border:0;padding:3px;background:var(--seg-track);}\n.dshpc-seg--weekday .dshpc-seg__item{width:calc(var(--dshpc-control-h-lg) - 8px);padding:0;justify-content:center;}\n.dshpc-seg--weekday .dshpc-seg__item[aria-pressed='true']{background:var(--dshpc-business);color:var(--dshpc-fg-inverse);box-shadow:var(--dshpc-shadow-raised);}\n\n/* \u2500\u2500 bordered \u5916\u6846\uFF082026-10-20 \u7528\u6237\u8981\u7684\u7B2C\u4E8C\u79CD\u6A21\u5F0F\uFF09\uFF1A**\u53EA\u5728\u6700\u5916\u9762\u5957\u4E00\u5708 1px \u63CF\u8FB9**\uFF0C\n \u91CC\u9762\u4E00\u6982\u4E0D\u52A8 \u2014\u2014 \u9009\u4E2D\u6BB5\u7684\u586B\u5145\u8272 / \u9634\u5F71 / \u6587\u5B57\u8272\u5168\u90E8\u4FDD\u6301\u5404\u81EA\u53D8\u4F53\u539F\u672C\u7684\u6837\u5B50\n \uFF08default \u7684\u7070\u9762\u3001weekday \u7684\u84DD\u9762\u90FD\u7167\u65E7\uFF09\uFF0C\u8FD9\u91CC\u4E0D\u5199\u4EFB\u4F55\u9488\u5BF9 __item \u7684\u89C4\u5219\u3002\n \u603B\u9AD8\u5FC5\u987B\u4E0E\u65E0\u6846\u7248\u9010\u50CF\u7D20\u4E00\u81F4\uFF1Aborder 1px\u00D72 \u7531\u5404\u53D8\u4F53\u7684 padding \u5404\u8BA9 1px \u62B5\u6D88\n \uFF08default 2\u21921\u3001inset/weekday 3\u21922\uFF09\uFF0C\u6240\u4EE5\u4E09\u79CD\u53D8\u4F53 \u00D7 bordered \u7684\u603B\u9AD8\u90FD\u4E0E\u65E0\u6846\u7248\u76F8\u540C\u3002 */\n.dshpc-seg--bordered{border:1px solid var(--dshpc-border);padding:1px;}\n.dshpc-seg--bordered.dshpc-seg--inset{padding:2px;}\n.dshpc-seg--bordered.dshpc-seg--weekday{padding:2px;}\n\n@media (prefers-reduced-motion: reduce){.dshpc-seg__item{transition:none;}}\n";
2
+ //# sourceMappingURL=segmented-css.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segmented-css.generated.d.ts","sourceRoot":"","sources":["../../../src/ui/controls/segmented-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,wwNAAg1H,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ⚠️ 生成物,勿手改。真源 = src/ui/controls/segmented.css
2
+ // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
+ export const SEGMENTED_CSS = "\n/* ── 分段控件 P2 ─────────────────────────────────────────────────────\n 结构照兄弟项目 dsh-task-dispatch-table 的 Segmented 皮肤(item 无边框、hover 只提亮文字),\n 前缀 / 变量名换成本仓口径。用户额外要的两处(兄弟没有):weekday 方块间隔(现为 2px);段内中性计数 __count。\n ⚠️ 2026-10-19 两次误判均已澄清:① 「宿主只认单行 CSS」——假,多行一直正常;\n ② 「宿主吃掉 token 块之后第一条规则」——也假,真因是 tokens 模板字符串结尾多了一个反斜杠,\n 注入文本里留下字面反引号,把紧随其后的那条规则的选择器污染掉了(见 dsh-host.md §9)。\n 样式照常多行书写,不必压行;也不需要任何「牺牲规则」。 */\n.dshpc-seg{display:inline-flex;align-items:center;gap:2px;padding:2px;border-radius:var(--dshpc-radius-md);background:var(--dshpc-seg-track);}\n.dshpc-seg--default{--seg-track:var(--dshpc-seg-track);--seg-thumb:var(--dshpc-surface-raised);border:0;padding:2px;background:var(--seg-track);}\n.dshpc-seg--inset{--seg-track:var(--dshpc-seg-track);--seg-thumb:var(--dshpc-surface-raised);border:0;padding:3px;background:var(--seg-track);}\n.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);}\n.dshpc-seg--md .dshpc-seg__item{height:calc(var(--dshpc-control-h-md) - 6px);}\n.dshpc-seg--lg .dshpc-seg__item{height:calc(var(--dshpc-control-h-lg) - 6px);}\n.dshpc-seg__item:hover:not([aria-pressed='true']):not(:disabled){color:var(--dshpc-fg);}\n.dshpc-seg__item[aria-pressed='true']{background:var(--seg-thumb);box-shadow:var(--dshpc-shadow-raised);color:var(--dshpc-fg);font-weight:600;}\n.dshpc-seg__item:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:-2px;}\n.dshpc-seg__item:disabled{cursor:default;opacity:.4;}\n/* 段内角标(如「异常」的数量):语义色实面 + 反白字,0 由组件侧不渲染。必须是正圆(用户 2026-10-03)。 */\n.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;}\n/* 段内中性计数(如筛选条「全部 11」):纯文字、无底无边(对齐 task-ledger .dtl-seg__num 拍板口径);0 由组件侧不渲染。 */\n.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;}\n/* block:撑满父宽(表单行用),各段等分 */\n.dshpc-seg--block{display:flex;width:100%;}\n.dshpc-seg--block .dshpc-seg__item{flex:1 1 auto;justify-content:center;}\n/* weekday:星期多选方块。基础插件的特殊化定制(用户 2026-10-01:原 WeekdayPicker 即「蓝底 + 近似方形」):\n 每格正方形(宽 = 段高)、选中品牌蓝反白字、**无外描边**(2026-10-18 重申)、\n 方块之间间距 gap:2px(2026-10-20 用户定稿:方块改小后 6px 显得太宽。10-18 曾从 2px 放宽到 6px,\n 两次都是用户拍板 —— 别自作主张改回去)。 */\n.dshpc-seg--weekday{--seg-track:var(--dshpc-seg-track);gap:2px;border:0;padding:3px;background:var(--seg-track);}\n.dshpc-seg--weekday .dshpc-seg__item{width:calc(var(--dshpc-control-h-lg) - 8px);padding:0;justify-content:center;}\n.dshpc-seg--weekday .dshpc-seg__item[aria-pressed='true']{background:var(--dshpc-business);color:var(--dshpc-fg-inverse);box-shadow:var(--dshpc-shadow-raised);}\n\n/* ── bordered 外框(2026-10-20 用户要的第二种模式):**只在最外面套一圈 1px 描边**,\n 里面一概不动 —— 选中段的填充色 / 阴影 / 文字色全部保持各自变体原本的样子\n (default 的灰面、weekday 的蓝面都照旧),这里不写任何针对 __item 的规则。\n 总高必须与无框版逐像素一致:border 1px×2 由各变体的 padding 各让 1px 抵消\n (default 2→1、inset/weekday 3→2),所以三种变体 × bordered 的总高都与无框版相同。 */\n.dshpc-seg--bordered{border:1px solid var(--dshpc-border);padding:1px;}\n.dshpc-seg--bordered.dshpc-seg--inset{padding:2px;}\n.dshpc-seg--bordered.dshpc-seg--weekday{padding:2px;}\n\n@media (prefers-reduced-motion: reduce){.dshpc-seg__item{transition:none;}}\n";
4
+ //# sourceMappingURL=segmented-css.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segmented-css.generated.js","sourceRoot":"","sources":["../../../src/ui/controls/segmented-css.generated.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,qEAAqE;AACrE,MAAM,CAAC,MAAM,aAAa,GAAG,60HAA60H,CAAA"}
@@ -1,9 +1,8 @@
1
- export declare const SEGMENTED_CSS = " /* \u2500\u2500 \u5206\u6BB5\u63A7\u4EF6 P2 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 2026-10-19\uFF1A\u6309\u7528\u6237\u70B9\u540D\u300C\u539F\u5C01\u4E0D\u52A8\u7167\u5144\u5F1F\u9879\u76EE dsh-task-dispatch-table \u6284\u300D\u2014\u2014 \u89C4\u5219\u7ED3\u6784\u3001\u5199\u6CD5\u3001transition \u5168\u90E8\u5BF9\u9F50\u5144\u5F1F\u539F\u6587\uFF08\u5355\u884C\u89C4\u5219\u3001item \u65E0\u8FB9\u6846\u3001hover \u53EA\u63D0\u4EAE\u6587\u5B57\uFF09\uFF0C \u53EA\u628A\u524D\u7F00 / \u53D8\u91CF\u540D\u6362\u6210\u672C\u4ED3\u53E3\u5F84\u30020.2.2-0.2.8 \u771F\u673A\u4E0A\u300C\u8F68\u9053\u900F\u660E\u3001gap \u5931\u6548\u300D\u81EA\u67E5\u591A\u8F6E\u65E0\u679C \u21D2 \u4E0D\u518D\u81EA\u521B\u5199\u6CD5\uFF0C\u56DE\u5230\u5144\u5F1F\u540C\u6B3E\u3002 \u7528\u6237\u989D\u5916\u8981\u7684\u4E24\u5904\uFF08\u5144\u5F1F\u6CA1\u6709\uFF0C\u4FDD\u7559\uFF09\uFF1Aweekday \u65B9\u5757\u95F4\u8DDD gap:6px\uFF1B\u6BB5\u5185\u4E2D\u6027\u8BA1\u6570 __count\u3002 */ .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;} /* \u6BB5\u5185\u89D2\u6807\uFF08\u5982\u300C\u5F02\u5E38\u300D\u7684\u6570\u91CF\uFF09\uFF1A\u8BED\u4E49\u8272\u5B9E\u9762 + \u53CD\u767D\u5B57\uFF0C0 \u7531\u7EC4\u4EF6\u4FA7\u4E0D\u6E32\u67D3\u3002\u5FC5\u987B\u662F\u6B63\u5706\uFF08\u7528\u6237 2026-10-03\uFF09\u3002 */ .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;} /* \u6BB5\u5185\u4E2D\u6027\u8BA1\u6570\uFF08\u5982\u7B5B\u9009\u6761\u300C\u5168\u90E8 11\u300D\uFF09\uFF1A\u7EAF\u6587\u5B57\u3001\u65E0\u5E95\u65E0\u8FB9\uFF08\u5BF9\u9F50 task-ledger .dtl-seg__num \u62CD\u677F\u53E3\u5F84\uFF09\uFF1B0 \u7531\u7EC4\u4EF6\u4FA7\u4E0D\u6E32\u67D3\u3002 */ .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\uFF1A\u6491\u6EE1\u7236\u5BBD\uFF08\u8868\u5355\u884C\u7528\uFF09\uFF0C\u5404\u6BB5\u7B49\u5206 */ .dshpc-seg--block{display:flex;width:100%;} .dshpc-seg--block .dshpc-seg__item{flex:1 1 auto;justify-content:center;} /* weekday\uFF1A\u661F\u671F\u591A\u9009\u65B9\u5757\u3002\u57FA\u7840\u63D2\u4EF6\u7684\u7279\u6B8A\u5316\u5B9A\u5236\uFF08\u7528\u6237 2026-10-01\uFF1A\u539F WeekdayPicker \u5373\u300C\u84DD\u5E95 + \u8FD1\u4F3C\u65B9\u5F62\u300D\uFF09\uFF1A \u6BCF\u683C\u6B63\u65B9\u5F62\uFF08\u5BBD = \u6BB5\u9AD8\uFF09\u3001\u9009\u4E2D\u54C1\u724C\u84DD\u53CD\u767D\u5B57\u3001**\u65E0\u5916\u63CF\u8FB9**\uFF082026-10-18 \u91CD\u7533\uFF09\u3001 \u65B9\u5757\u4E4B\u95F4\u95F4\u8DDD gap:6px\uFF082026-10-18\uFF1A\u4E0D\u518D 2px \u6324\u6210\u4E00\u5768 \u2014\u2014 \u8FD9\u4E00\u6761\u5144\u5F1F\u6CA1\u6709\u3001\u662F\u7528\u6237\u989D\u5916\u8981\u7684\uFF09\u3002 */ .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;}}\n/* \u5B9E\u9A8C\u63A2\u9488\uFF082026-10-19\uFF0C\u5B9A\u4F4D\u540E\u5220\uFF09\uFF1A\u4E0E .dshpc-seg \u57FA\u7840\u89C4\u5219\u9010\u5B57\u540C\u5185\u5BB9\u3001\u53EA\u6362\u7C7B\u540D\u3002\n \u8BCA\u65AD\u91CC\u67E5\u5B83\u6D3B\u4E0D\u6D3B\uFF1A\u6D3B \u21D2 \u89E6\u96F7\u7684\u662F\u300Cdshpc-seg\u300D\u8FD9\u4E2A\u540D\u5B57\u672C\u8EAB\uFF0C\u4E0D\u662F\u5185\u5BB9\u3002 */\n.dshpc-segprobe{display:inline-flex;align-items:center;gap:2px;padding:2px;border-radius:var(--dshpc-radius-md);background:var(--dshpc-seg-track);} ";
2
- export declare const BUTTON_CSS = " /* \u2500\u2500 \u6309\u94AE / \u56FE\u6807\u94AE P2 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u4E0E Segmented \u540C\u4E00\u6761\u9AD8\u5EA6\u7EAA\u5F8B\uFF1A--dshpc-control-h-sm(24) / -md(28) / -lg(32)\uFF0C \u6709\u8FB9\u6846\u7684 variant \u7528 1px \u771F\u8FB9\u6846 + \u5185\u90E8 padding \u8865\u56DE\uFF0C**\u6709\u8FB9 / \u65E0\u8FB9\u540C\u9AD8**\u3002 \u4E09\u6761\u53D7\u63A7\u8F74\uFF082026-10-19 \u91CD\u5199\uFF0C\u5BF9\u9F50\u4E3B\u6D41 UI \u6846\u67B6\u7684\u5206\u7C7B\u53E3\u5F84\uFF09\uFF1A \u00B7 variant \u2014\u2014 \u5916\u89C2\u6863 = \u5F62\u6001 + \u8BED\u4E49\u8272\uFF0C\u5171 10 \u6863\uFF1A primary / secondary / outline / ghost / danger / success / warning / info / danger-outline\uFF08\u7EA2\u5B57\u63CF\u8FB9\uFF09/ link\uFF08\u884C\u5185\u94FE\u63A5\uFF09 \u00B7 size \u2014\u2014 sm / md / lg \u00B7 block \u2014\u2014 \u6491\u6EE1\u7236\u5BBD \u6BCF\u4E00\u6863**\u53EA\u586B 5 \u4E2A\u5C40\u90E8\u53D8\u91CF**\uFF08--btn-bg / -fg / -border / -bg-hover / -bg-active\uFF09\uFF0C \u7ED3\u6784\u4E0E\u4EA4\u4E92\u53EA\u6709\u4E0A\u9762\u8FD9\u4E00\u4EFD\uFF1B\u4EFB\u4F55\u6863\u4F4D\u90FD\u4E0D\u8BB8\u518D\u5199\u4E00\u904D display/height/padding\u3002 \u81EA\u5B9A\u4E49\u989C\u8272\uFF08Button \u7684 color \u53C2\u6570\uFF09\u540C\u6837\u53EA\u8986\u76D6\u8FD9 5 \u4E2A\u53D8\u91CF\uFF08token \u8986\u76D6\uFF0C\u4E0D\u662F\u65B0\u76AE\u80A4\uFF09\u3002 \u26A0\uFE0F hover \u4E0D\u518D\u7528 opacity \u538B\u4E00\u5C42\uFF08\u7528\u6237 2026-10-19\uFF1A\u300C\u9ED1\u8272\u548C\u7EA2\u8272\u7684\u6309\u94AE\u79FB\u4E0A\u53BB\u53D8\u5316\u592A\u5C0F\uFF0C \u5B8C\u5168\u611F\u89C9\u4E0D\u5230\u989C\u8272\u53D8\u4E86\u300D\uFF09\u21D2 \u8D70 --dshpc-*-hover / -active \u7684\u660E\u786E\u6DF7\u8272\uFF0C\u89C1 tokens-css.ts\u3002 */ .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\uFF1A\u6491\u6EE1\u7236\u5BBD\uFF08\u8868\u5355\u5E95\u680F / \u62BD\u5C49\u5E95\u90E8\u7684\u4E3B\u64CD\u4F5C\uFF09 */ .dshpc-btn--block{display:flex;width:100%;} /* block + \u524D\u7F6E\u56FE\u6807 \u21D2 \u6587\u5B57\u89C6\u89C9\u5C45\u4E2D\uFF082026-10-19 \u7528\u6237\u70B9\u540D\uFF09\uFF1A \u5185\u5BB9\u7EC4 [\u56FE\u6807 + \u95F4\u8DDD + \u6587\u5B57] \u6574\u4F53\u5728\u76D2\u5185\u5C45\u4E2D\u65F6\uFF0C**\u6587\u5B57**\u7684\u4E2D\u5FC3\u4F1A\u88AB\u56FE\u6807\u63A8\u53F3\u534A\u683C\u3002 \u628A\u53F3\u5185\u8FB9\u8DDD\u8865\u4E0A\u300C\u56FE\u6807\u5BBD + \u95F4\u8DDD\u300D\uFF0C\u53EF\u7528\u76D2\u968F\u4E4B\u5DE6\u79FB\u540C\u91CF \u21D2 \u6587\u5B57\u843D\u56DE\u89C6\u89C9\u4E2D\u5FC3\uFF0C\u56FE\u6807\u8D34\u5DE6\u4FA7\u3002 \u56FE\u6807\u5BBD\u6309 1.2em \u4F30\uFF08\u5B98\u65B9\u56FE\u6807 14/16px vs \u5B57\u53F7 12/13px\uFF09\uFF0Cem \u968F\u5B57\u53F7\u6863\u81EA\u52A8\u7F29\u653E\u3002 */ .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\uFF1A\u4E0D\u6362 DOM \u7ED3\u6784\uFF0C\u53EA\u5728\u6587\u6848\u524D\u63D2\u4E00\u4E2A\u540C\u8272\u5C0F\u5708\uFF08\u5C3A\u5BF8\u968F\u5B57\u53F7\uFF0C\u7F29\u653E\u4E0D\u4F9D\u8D56\u5E38\u91CF\uFF09 */ .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 \u662F\u56FA\u5B9A\u503C\uFF0C\u4E0D\u968F\u6309\u94AE\u5B57\u53F7\u7F29\u653E\uFF1B\u8981\u66F4\u5927\u5C31\u6539\u8FD9\u4E00\u5904\u3002 */ @keyframes dshpc-btn-spin{to{transform:rotate(360deg)}} /* \u4EA4\u4E92\u6001\uFF1A\u989C\u8272\u53D8\u5316\u5199\u5728\u53D8\u91CF\u4E0A \u21D2 \u6240\u6709\u6863\u4F4D\u4E00\u6B21\u751F\u6548\uFF0C\u4E14\u53D8\u5316\u5E45\u5EA6\u7531 token \u51B3\u5B9A\uFF08\u591F\u660E\u663E\uFF09 */ .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\uFF1A\u4E2D\u6027\u5B9E\u5FC3\uFF08\u7070\u9762\uFF09\uFF0C\u7528\u4E8E\u300C\u53D6\u6D88 / \u6B21\u8981\u300D\u8FD9\u7C7B\u4E0E\u4E3B\u64CD\u4F5C\u5E76\u6392\u7684\u6309\u94AE */ .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\uFF1A\u7EA2\u5B57\u63CF\u8FB9\uFF08\u7834\u574F\u6027\u6B21\u8981\u64CD\u4F5C\uFF0C\u5982\u5361\u7247\u4E0A\u7684\u300C\u5220\u9664\u300D\uFF09\u3002 \u26A0\uFE0F \u65E7\u4FEE\u9970\u7C7B danger-ink \u4FDD\u7559\u4E3A\u522B\u540D\uFF08\u6D88\u8D39\u65B9\u53EF\u80FD\u8FD8\u5728\u6302\uFF09\uFF0C\u4E24\u8005\u540C\u4E00\u5957\u76AE\u80A4\u3002 */ .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\uFF1A\u884C\u5185\u6587\u5B57\u94FE\u63A5\u578B\uFF08\u4F1A\u8BDD / \u4EA7\u51FA\u6587\u4EF6\u540D\uFF09\uFF0C\u65E0\u5E95\u65E0\u8FB9\u3001\u54C1\u724C\u84DD\u3001hover \u4E0B\u5212\u7EBF */ .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;} /* \u56FE\u6807\u94AE\uFF1A\u7EAF\u56FE\u6807\uFF0C\u65B9\u5F62\uFF1B\u5C3A\u5BF8\u6863\u7684\u5BBD\u9AD8\u4E0E\u540C\u6863\u6587\u5B57\u6309\u94AE\u7B49\u9AD8 */ .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;} /* \u2500\u2500 \u884C\u5F0F\u6587\u4EF6\u6309\u94AE\uFF08\u56FE\u6807 + \u6587\u4EF6\u540D\uFF09P2\uFF1A**\u5168\u7AD9\u552F\u4E00\u5B9E\u73B0**\uFF082026-10-04 \u6536\u7F16\uFF09\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u7528\u9014\uFF1A\u300C\u4EA7\u51FA\u7269 / \u9644\u4EF6\u300D\u90A3\u79CD**\u4E00\u884C\u4E00\u4E2A\u6587\u4EF6**\u7684\u6E05\u5355\u9879\uFF08\u57FA\u7840\u4FE1\u606F\u53F3\u680F\u4EA7\u51FA\u7269\u6E05\u5355\u3001\u9644\u4EF6\u533A\u3001 \u6267\u884C\u8BB0\u5F55\u9875\u7684\u5C55\u5F00\u533A\uFF09\u3002\u5E73\u65F6\u900F\u660E\u3001**\u9F20\u6807\u79FB\u4E0A\u53BB\u624D\u51FA\u6D45\u5E95**\uFF08\u6CBF\u7528\u7528\u6237 2026-10-03 \u5B9A\u7684\u89C2\u611F\uFF09\u3002 \u4E24\u4E2A\u5F62\u6001\u4FEE\u9970\u7C7B\uFF1A --block \u6491\u6EE1\u7236\u5BBD\uFF08\u6E05\u5355\u91CC\u4E00\u9879\u4E00\u884C\uFF09 --inline \u5185\u5BB9\u5BBD\uFF08\u8DDF\u5728\u6587\u5B57\u540E\u5934\uFF0C\u5982\u9644\u4EF6\u884C\uFF09 \u6536\u7F16\u539F\u56E0\uFF1A\u8FD9\u4EFD\u76AE\u80A4\u6B64\u524D\u53EA\u5199\u5728 task-list.tsx \u7684 TASK_LIST_CSS \u91CC\uFF08\u65E7\u540D .dshpc-info-out\uFF09\uFF0C \u6267\u884C\u8BB0\u5F55\u9875\u5C55\u5F00\u533A\u8981\u7528\u540C\u4E00\u79CD\u89C2\u611F \u21D2 \u4E0A\u63D0\u57FA\u7840\u5C42\uFF0C\u907F\u514D\u518D\u51FA\u73B0\u300C\u5404\u5199\u4E00\u4EFD\u5916\u89C2\u300D\uFF08\u540C\u540D\u4E0D\u540C\u76AE\u7684\u5751\u521A\u8E29\u8FC7\uFF09\u3002 */ .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;}} ";
3
- export declare const FIELD_CSS = " /* \u2500\u2500 \u8F93\u5165\u7C7B P3 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */ .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 \u6863\u5B57\u53F7\u8DDF\u6863\u8D70\uFF08\u4E0E\u540C\u6863\u4E0B\u62C9\u540C\u5B57\u53F7\uFF09\uFF1A\u6B64\u524D\u5199\u6B7B sm(12px)\uFF0C\u540C\u6392\u4E0B\u62C9\u662F 13px \u21D2 \u663E\u5F97\u300Cinput \u5B57\u5C0F\u300D\u3002 */ .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);} /* \u4E2D\u6BB5\uFF1A\u6570\u5B57 + \u540E\u7F00\u6210\u7EC4\u5C45\u4E2D\uFF1B\u5BB9\u5668\u88AB\u6D88\u8D39\u7AEF\u62C9\u5BBD\u65F6\u5403\u6389\u5168\u90E8\u4F59\u91CF\uFF0C\u4E24\u7AEF \u2212 / + \u56E0\u6B64\u9489\u6B7B\u5728\u5DE6\u53F3\u8FB9\u7F18\u3002 */ .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;} /* \u5B98\u65B9 Switch \u5305\u88C5\u7EDF\u4E00\uFF1A\u9009\u4E2D = success \u7EFF\u3002 \uFF08\u5408\u5E76\u539F\u5148 task-editor-css / task-list \u4E24\u5904\u5C31\u5730\u8986\u76D6\uFF1B\u9009\u62E9\u5668\u5E26\u5305\u88C5\u7C7B + role\uFF0C\u7279\u5F02\u6027\u9AD8\u4E8E\u5B98\u65B9\u3002\uFF09 */ .dshpc-switch button[role='switch'][aria-checked='true']{background:var(--dshpc-success);} /* \u591A\u884C\u6587\u672C\u8F93\u5165\uFF08\u63D0\u793A\u8BCD\u7B49\uFF0CP3\uFF09\uFF1A\u5361\u5185\u65E0\u8FB9\u6846\uFF08\u89C6\u89C9\u91CD\u5FC3\u5728\u6574\u5F20\u5361\u4E0A\uFF09\uFF0C\u5360\u4F4D\u8272\u8D70 dimmed\uFF1B\u6821\u9A8C\u4E0D\u901A\u8FC7\u63CF\u7EA2\u76D2\u3002 \uFF08\u4ECE task-editor-css \u7684 .dshpc-ed-prompt \u4E0A\u63D0\u800C\u6765\uFF1B\u4E1A\u52A1\u6587\u4EF6\u4E0D\u518D\u81EA\u5199 textarea \u76AE\u80A4\u3002\uFF09 */ .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);} /* \u62D6\u62FD\u5206\u9694\u6761\uFF08\u7F16\u8F91\u5206\u680F / \u9884\u89C8 dock \u5171\u7528\uFF0CU20 #3\uFF09\uFF1A6px \u547D\u4E2D\u533A\uFF0Ccol-resize\uFF0C\u4E0D\u753B\u7EBF\uFF0Chover/\u6309\u4E0B\u6D6E\u51FA\u6D45\u5E26\u3002 \u5177\u4F53 z-index \u7531 .dshpc-ed-resizer / .dshpc-sv-resizer \u5404\u81EA\u8865\u3002 */ .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;}} ";
4
- export declare const DATETIME_CSS = " /* \u2500\u2500 \u65E5\u671F / \u65F6\u95F4 P4 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */ .dshpc-dtf-wrap{display:inline-flex;position:relative;min-width:0;} /* \u26A0\uFE0F \u8FB9\u6846\u7C97\u7EC6 / \u5706\u89D2\u5FC5\u987B\u4E0E\u4E0B\u62C9\u951A\u70B9\uFF08dshpc-ed-field \u7684 fieldButtonStyle\uFF09\u5B8C\u5168\u4E00\u81F4 \uFF08\u7528\u6237 2026-10-02 \u70B9\u540D\uFF1A\u540C\u6392\u7684\u65E5\u671F\u6846\u4E0E\u4E0B\u62C9\u6846\u770B\u7740\u4E0D\u662F\u4E00\u5957\uFF09\u21D2 \u8FD9\u91CC\u4E5F\u662F 0.5px + radius-md\u3002 */ .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);} /* \u65E5\u671F / \u65F6\u95F4\u951A\u70B9\uFF1A\u4E09\u6863\u9AD8\u5EA6\uFF08\u9ED8\u8BA4 lg=32\uFF09\u3002base \u5DF2\u542B lg \u9AD8\u5EA6\u4F5C\u515C\u5E95\uFF0C\u4E0B\u9762\u4E09\u6863\u6309 size \u8986\u76D6\u3002 */ .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;}} ";
5
- export declare const SELECT_CSS = " /* \u4E0B\u62C9 / \u65E5\u5386 / \u65F6\u5206\u951A\u70B9\uFF1A\u952E\u76D8\u53EF\u8FBE\u6027\u63CF\u8FB9 + \u6821\u9A8C\u63CF\u7EA2\uFF08\u7C7B\u540D\u4ECE\u4E1A\u52A1\u5C42\u6CBF\u7528\uFF0C\u76AE\u80A4\u5F52\u4F4D\u57FA\u7840\u5C42\uFF09 */ .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);} /* \u6574\u884C\u4E0B\u62C9\uFF1A\u5B98\u65B9 Menu \u7684\u5305\u88C5 span \u662F inline-flex\uFF08shrink-to-fit\uFF09\uFF0C\u8981\u8FDE\u5B83\u4E00\u8D77\u6491\u6EE1 */ .dshpc-ed-selectwrap{width:100%;} /* \u7701\u7565\u53F7\u4E09\u4EF6\u5957\uFF08ui-style-guide \u00A7\u4E09\u300C\u5F85\u62BD\u8C61 #1\u300D\u7684\u6536\u655B\u70B9\uFF09\uFF1A**\u65B0\u4EE3\u7801\u4E00\u5F8B\u6302\u8FD9\u4E2A\u7C7B**\uFF0C\u4E0D\u518D\u5404\u5199\u4E00\u904D\u3002 \u26A0\uFE0F \u5DF2\u6709 19 \u5904\u65E7\u5199\u6CD5\u5F85\u9010\u6B65\u6536\u7F16\uFF082026-10-04 \u8D77\u65B0\u589E\u7684\u8C03\u7528\u70B9\u4E0D\u8BB8\u518D\u624B\u5199\u8FD9\u4E09\u6761\u5C5E\u6027\uFF09\u3002 */ .dshpc-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;} /* \u8DD1\u9A6C\u706F\u6587\u672C\uFF08MarqueeText\uFF09\uFF1A\u53CC\u5C42\u2014\u2014\u5916\u5C42\u53EA\u88C1\u526A\uFF0C\u5185\u5C42\u624D transform \u6EDA\u52A8\uFF1B\u975E hover \u5185\u5C42\u81EA\u5E26\u7701\u7565\u53F7 */ .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;} /* \u26A0\uFE0F \u8DD1\u6CD5\uFF08\u7528\u6237 2026-10-03 \u62CD\u677F\uFF09\uFF1A**\u8DD1\u4E00\u904D\u3001\u505C\u5728\u5C3E\u5B57**\uFF08\u64AD\u653E 1 \u6B21 + forwards\uFF09\uFF0C\u4E0D\u6765\u56DE\u5F39\u3001\u4E0D\u65E0\u9650\u8DD1\u3002 \u6EDA\u8DDD = \u7CBE\u786E\u6EA2\u51FA\u91CF \u21D2 \u505C\u4E0B\u65F6\u6700\u540E\u4E00\u4E2A\u5B57\u6B63\u597D\u8D34\u53F3\u7F18\uFF0C**\u4E0D\u4F1A\u8DD1\u8FDB\u9ED1\u5757**\uFF08\u9ED1\u5757\u662F\u65E7\u624B\u5199\u7248\u628A \u5185\u5C42\u76D2\u5B50\u88C1\u4E86\u3001\u6309\u300C\u534A\u622A\u6587\u672C\u300D\u5E73\u79FB\u5BFC\u81F4\u7684\uFF09\u3002\u9F20\u6807\u79FB\u5F00 \u21D2 :hover \u5931\u6548 \u21D2 \u81EA\u52A8\u590D\u4F4D\u56DE\u7701\u7565\u53F7\u6001\u3002 */ .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))}} ";
6
- export declare const LOADING_CSS = " /* \u8FD0\u884C\u4E2D / loading \u7684\u6D3B\u52A8\u6307\u793A\uFF1A\u4E09\u4E2A\u5C0F\u65B9\u5757\u4F9D\u6B21\u8109\u52A8\u3002 */ @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; } } ";
7
- export declare const BACK_TO_TOP_CSS = " /* \u56DE\u5230\u9876\u90E8\u60AC\u6D6E\u94AE\uFF1A\u5706\u94AE\u3001\u5B9E\u9762\u3001\u6295\u5F71\uFF1B\u9ED8\u8BA4\u9690\u8EAB\uFF0C\u6EDA\u8FC7\u9608\u503C\u52A0 .is-visible \u624D\u663E\u5F62\u3002 \u6A2A\u5411 left \u7531\u7EC4\u4EF6\u6309\u4E3B\u5185\u5BB9\u5217\u53F3\u7F18\u5B9E\u65F6\u7B97\u51FA\uFF08\u8D34\u5728\u5176\u53F3\u4FA7\u5916\u4FA7\uFF09\uFF0C\u4E0D\u5199\u6B7B\u3002 */ .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;} } ";
8
- export declare const HINT_CSS = " /* \u2500\u2500 \u95EE\u53F7\u63D0\u793A P4\uFF08\u7528\u6237 2026-10-18\uFF1A\u5BF9\u9F50\u771F\u5B9E\u63D2\u4EF6 HelpButton\u2014\u2014**\u5E26\u5708\u7684\u95EE\u53F7\u56FE\u6807**\uFF09\u2500\u2500 \u672C\u4F53 14px \u7EC6\u5708 + \u5708\u5185 ?\uFF0C\u989C\u8272 fg-3\u3001hover \u53EA\u63D0\u4EAE\u4E0D\u52A0\u5E95\uFF08\u4E0E dshpc-ed-help \u540C\u89C4\u77E9\uFF09\u3002 \u6C14\u6CE1\u4E0D\u5728\u672C\u6587\u4EF6\uFF1A2026-10-19 \u7528\u6237\u62CD\u677F\u300C\u95EE\u53F7\u5FC5\u987B\u7528\u5B98\u65B9 Tooltip \u90A3\u4E00\u4E2A\u300D\u21D2 \u6C14\u6CE1\u7531\u6CE8\u5165\u7684 \u5B98\u65B9\u7EC4\u4EF6\u6E32\u67D3\uFF08src/ui/tooltip.ts\uFF09\uFF0C\u8FD9\u91CC\u53EA\u7BA1\u95EE\u53F7\u56FE\u6807\u672C\u8EAB\u3002 */ .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;} ";
1
+ export { SEGMENTED_CSS } from './controls/segmented-css.generated.js';
2
+ export { BUTTON_CSS } from './controls/button-css.generated.js';
3
+ export { FIELD_CSS } from './controls/field-css.generated.js';
4
+ export { LOADING_CSS } from './controls/loading-css.generated.js';
5
+ export { BACK_TO_TOP_CSS } from './controls/back-to-top-css.generated.js';
6
+ export { HINT_CSS } from './controls/hint-css.generated.js';
7
+ export { DATETIME_CSS } from './controls/datetime-css.generated.js';
9
8
  //# sourceMappingURL=controls-css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"controls-css.d.ts","sourceRoot":"","sources":["../../src/ui/controls-css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,wqLAG2H,CAAA;AAErJ,eAAO,MAAM,UAAU,+0XAAosP,CAAA;AAE3tP,eAAO,MAAM,SAAS,ggMAAonJ,CAAA;AAE1oJ,eAAO,MAAM,YAAY,mnJAA66H,CAAA;AAEt8H,eAAO,MAAM,UAAU,qiFAAqtC,CAAA;AAE5uC,eAAO,MAAM,WAAW,0sBAA2mB,CAAA;AAEnoB,eAAO,MAAM,eAAe,85CAA6mC,CAAA;AAEzoC,eAAO,MAAM,QAAQ,ixCAAmxB,CAAA"}
1
+ {"version":3,"file":"controls-css.d.ts","sourceRoot":"","sources":["../../src/ui/controls-css.ts"],"names":[],"mappings":"AASA,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"}
@@ -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"}