dsh-plugin-core 0.32.0 → 0.33.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 (632) hide show
  1. package/dist/adv/explorer/FileBrowser.d.ts +58 -0
  2. package/dist/adv/explorer/FileBrowser.d.ts.map +1 -0
  3. package/dist/adv/explorer/FileBrowser.js +632 -0
  4. package/dist/adv/explorer/FileBrowser.js.map +1 -0
  5. package/dist/adv/explorer/crumb-nav.d.ts +45 -0
  6. package/dist/adv/explorer/crumb-nav.d.ts.map +1 -0
  7. package/dist/adv/explorer/crumb-nav.js +78 -0
  8. package/dist/adv/explorer/crumb-nav.js.map +1 -0
  9. package/dist/adv/explorer/crumbs-menu.d.ts +37 -0
  10. package/dist/adv/explorer/crumbs-menu.d.ts.map +1 -0
  11. package/dist/adv/explorer/crumbs-menu.js +102 -0
  12. package/dist/adv/explorer/crumbs-menu.js.map +1 -0
  13. package/dist/adv/explorer/explorer-css.d.ts +2 -0
  14. package/dist/adv/explorer/explorer-css.d.ts.map +1 -0
  15. package/dist/adv/explorer/explorer-css.generated.d.ts +2 -0
  16. package/dist/adv/explorer/explorer-css.generated.d.ts.map +1 -0
  17. package/dist/adv/explorer/explorer-css.generated.js +4 -0
  18. package/dist/adv/explorer/explorer-css.generated.js.map +1 -0
  19. package/dist/adv/explorer/explorer-css.js +3 -0
  20. package/dist/adv/explorer/explorer-css.js.map +1 -0
  21. package/dist/adv/explorer/fs-face.d.ts +36 -0
  22. package/dist/adv/explorer/fs-face.d.ts.map +1 -0
  23. package/dist/adv/explorer/fs-face.js +74 -0
  24. package/dist/adv/explorer/fs-face.js.map +1 -0
  25. package/dist/adv/explorer/index.d.ts +6 -0
  26. package/dist/adv/explorer/index.d.ts.map +1 -0
  27. package/dist/adv/explorer/index.js +6 -0
  28. package/dist/adv/explorer/index.js.map +1 -0
  29. package/dist/adv/explorer/landing.d.ts +26 -0
  30. package/dist/adv/explorer/landing.d.ts.map +1 -0
  31. package/dist/adv/explorer/landing.js +43 -0
  32. package/dist/adv/explorer/landing.js.map +1 -0
  33. package/dist/adv/explorer/open.d.ts +137 -0
  34. package/dist/adv/explorer/open.d.ts.map +1 -0
  35. package/dist/adv/explorer/open.js +350 -0
  36. package/dist/adv/explorer/open.js.map +1 -0
  37. package/dist/adv/explorer/picker-placement.d.ts +69 -0
  38. package/dist/adv/explorer/picker-placement.d.ts.map +1 -0
  39. package/dist/adv/explorer/picker-placement.js +122 -0
  40. package/dist/adv/explorer/picker-placement.js.map +1 -0
  41. package/dist/adv/explorer/preview/BytesPreview.d.ts +12 -0
  42. package/dist/adv/explorer/preview/BytesPreview.d.ts.map +1 -0
  43. package/dist/adv/explorer/preview/BytesPreview.js +60 -0
  44. package/dist/adv/explorer/preview/BytesPreview.js.map +1 -0
  45. package/dist/adv/explorer/preview/HtmlPreview.d.ts +17 -0
  46. package/dist/adv/explorer/preview/HtmlPreview.d.ts.map +1 -0
  47. package/dist/adv/explorer/preview/HtmlPreview.js +113 -0
  48. package/dist/adv/explorer/preview/HtmlPreview.js.map +1 -0
  49. package/dist/adv/explorer/preview/OfficePreview.d.ts +12 -0
  50. package/dist/adv/explorer/preview/OfficePreview.d.ts.map +1 -0
  51. package/dist/adv/explorer/preview/OfficePreview.js +63 -0
  52. package/dist/adv/explorer/preview/OfficePreview.js.map +1 -0
  53. package/dist/adv/explorer/preview/TextPreview.d.ts +18 -0
  54. package/dist/adv/explorer/preview/TextPreview.d.ts.map +1 -0
  55. package/dist/adv/explorer/preview/TextPreview.js +122 -0
  56. package/dist/adv/explorer/preview/TextPreview.js.map +1 -0
  57. package/dist/adv/explorer/preview/index.d.ts +24 -0
  58. package/dist/adv/explorer/preview/index.d.ts.map +1 -0
  59. package/dist/adv/explorer/preview/index.js +58 -0
  60. package/dist/adv/explorer/preview/index.js.map +1 -0
  61. package/dist/adv/explorer/preview/md-labels.d.ts +3 -0
  62. package/dist/adv/explorer/preview/md-labels.d.ts.map +1 -0
  63. package/dist/adv/explorer/preview/md-labels.js +12 -0
  64. package/dist/adv/explorer/preview/md-labels.js.map +1 -0
  65. package/dist/adv/explorer/preview-title-bar.d.ts +26 -0
  66. package/dist/adv/explorer/preview-title-bar.d.ts.map +1 -0
  67. package/dist/adv/explorer/preview-title-bar.js +48 -0
  68. package/dist/adv/explorer/preview-title-bar.js.map +1 -0
  69. package/dist/adv/explorer/types.d.ts +259 -0
  70. package/dist/adv/explorer/types.d.ts.map +1 -0
  71. package/dist/adv/explorer/types.js +379 -0
  72. package/dist/adv/explorer/types.js.map +1 -0
  73. package/dist/adv/session/SessionViewModal.d.ts +37 -0
  74. package/dist/adv/session/SessionViewModal.d.ts.map +1 -0
  75. package/dist/adv/session/SessionViewModal.js +1133 -0
  76. package/dist/adv/session/SessionViewModal.js.map +1 -0
  77. package/dist/adv/session/changes.d.ts +73 -0
  78. package/dist/adv/session/changes.d.ts.map +1 -0
  79. package/dist/adv/session/changes.js +134 -0
  80. package/dist/adv/session/changes.js.map +1 -0
  81. package/dist/adv/session/faces.d.ts +244 -0
  82. package/dist/adv/session/faces.d.ts.map +1 -0
  83. package/dist/adv/session/faces.js +17 -0
  84. package/dist/adv/session/faces.js.map +1 -0
  85. package/dist/adv/session/index.d.ts +7 -0
  86. package/dist/adv/session/index.d.ts.map +1 -0
  87. package/dist/adv/session/index.js +27 -0
  88. package/dist/adv/session/index.js.map +1 -0
  89. package/dist/adv/session/mirror/AskCard.d.ts +35 -0
  90. package/dist/adv/session/mirror/AskCard.d.ts.map +1 -0
  91. package/dist/adv/session/mirror/AskCard.js +131 -0
  92. package/dist/adv/session/mirror/AskCard.js.map +1 -0
  93. package/dist/adv/session/mirror/BashRow.d.ts +14 -0
  94. package/dist/adv/session/mirror/BashRow.d.ts.map +1 -0
  95. package/dist/adv/session/mirror/BashRow.js +143 -0
  96. package/dist/adv/session/mirror/BashRow.js.map +1 -0
  97. package/dist/adv/session/mirror/ChangedFileDiff.d.ts +25 -0
  98. package/dist/adv/session/mirror/ChangedFileDiff.d.ts.map +1 -0
  99. package/dist/adv/session/mirror/ChangedFileDiff.js +178 -0
  100. package/dist/adv/session/mirror/ChangedFileDiff.js.map +1 -0
  101. package/dist/adv/session/mirror/ChangedFilesCard.d.ts +18 -0
  102. package/dist/adv/session/mirror/ChangedFilesCard.d.ts.map +1 -0
  103. package/dist/adv/session/mirror/ChangedFilesCard.js +165 -0
  104. package/dist/adv/session/mirror/ChangedFilesCard.js.map +1 -0
  105. package/dist/adv/session/mirror/ChatGroupSeat.d.ts +24 -0
  106. package/dist/adv/session/mirror/ChatGroupSeat.d.ts.map +1 -0
  107. package/dist/adv/session/mirror/ChatGroupSeat.js +135 -0
  108. package/dist/adv/session/mirror/ChatGroupSeat.js.map +1 -0
  109. package/dist/adv/session/mirror/ChatNodeSeat.d.ts +43 -0
  110. package/dist/adv/session/mirror/ChatNodeSeat.d.ts.map +1 -0
  111. package/dist/adv/session/mirror/ChatNodeSeat.js +133 -0
  112. package/dist/adv/session/mirror/ChatNodeSeat.js.map +1 -0
  113. package/dist/adv/session/mirror/ChatView.d.ts +47 -0
  114. package/dist/adv/session/mirror/ChatView.d.ts.map +1 -0
  115. package/dist/adv/session/mirror/ChatView.js +138 -0
  116. package/dist/adv/session/mirror/ChatView.js.map +1 -0
  117. package/dist/adv/session/mirror/CommandCard.d.ts +20 -0
  118. package/dist/adv/session/mirror/CommandCard.d.ts.map +1 -0
  119. package/dist/adv/session/mirror/CommandCard.js +69 -0
  120. package/dist/adv/session/mirror/CommandCard.js.map +1 -0
  121. package/dist/adv/session/mirror/ContextInjectionRow.d.ts +18 -0
  122. package/dist/adv/session/mirror/ContextInjectionRow.d.ts.map +1 -0
  123. package/dist/adv/session/mirror/ContextInjectionRow.js +50 -0
  124. package/dist/adv/session/mirror/ContextInjectionRow.js.map +1 -0
  125. package/dist/adv/session/mirror/Deliverables.d.ts +24 -0
  126. package/dist/adv/session/mirror/Deliverables.d.ts.map +1 -0
  127. package/dist/adv/session/mirror/Deliverables.js +175 -0
  128. package/dist/adv/session/mirror/Deliverables.js.map +1 -0
  129. package/dist/adv/session/mirror/GenericCommandCard.d.ts +136 -0
  130. package/dist/adv/session/mirror/GenericCommandCard.d.ts.map +1 -0
  131. package/dist/adv/session/mirror/GenericCommandCard.js +948 -0
  132. package/dist/adv/session/mirror/GenericCommandCard.js.map +1 -0
  133. package/dist/adv/session/mirror/MessageIconActions.d.ts +16 -0
  134. package/dist/adv/session/mirror/MessageIconActions.d.ts.map +1 -0
  135. package/dist/adv/session/mirror/MessageIconActions.js +69 -0
  136. package/dist/adv/session/mirror/MessageIconActions.js.map +1 -0
  137. package/dist/adv/session/mirror/MessageItem.d.ts +93 -0
  138. package/dist/adv/session/mirror/MessageItem.d.ts.map +1 -0
  139. package/dist/adv/session/mirror/MessageItem.js +194 -0
  140. package/dist/adv/session/mirror/MessageItem.js.map +1 -0
  141. package/dist/adv/session/mirror/ReasoningRow.d.ts +11 -0
  142. package/dist/adv/session/mirror/ReasoningRow.d.ts.map +1 -0
  143. package/dist/adv/session/mirror/ReasoningRow.js +111 -0
  144. package/dist/adv/session/mirror/ReasoningRow.js.map +1 -0
  145. package/dist/adv/session/mirror/RunningStatus.d.ts +12 -0
  146. package/dist/adv/session/mirror/RunningStatus.d.ts.map +1 -0
  147. package/dist/adv/session/mirror/RunningStatus.js +57 -0
  148. package/dist/adv/session/mirror/RunningStatus.js.map +1 -0
  149. package/dist/adv/session/mirror/StatDialog.d.ts +20 -0
  150. package/dist/adv/session/mirror/StatDialog.d.ts.map +1 -0
  151. package/dist/adv/session/mirror/StatDialog.js +49 -0
  152. package/dist/adv/session/mirror/StatDialog.js.map +1 -0
  153. package/dist/adv/session/mirror/ToolDetails.d.ts +65 -0
  154. package/dist/adv/session/mirror/ToolDetails.d.ts.map +1 -0
  155. package/dist/adv/session/mirror/ToolDetails.js +268 -0
  156. package/dist/adv/session/mirror/ToolDetails.js.map +1 -0
  157. package/dist/adv/session/mirror/TurnProcessNodeView.d.ts +10 -0
  158. package/dist/adv/session/mirror/TurnProcessNodeView.d.ts.map +1 -0
  159. package/dist/adv/session/mirror/TurnProcessNodeView.js +57 -0
  160. package/dist/adv/session/mirror/TurnProcessNodeView.js.map +1 -0
  161. package/dist/adv/session/mirror/TurnTailNodeView.d.ts +57 -0
  162. package/dist/adv/session/mirror/TurnTailNodeView.d.ts.map +1 -0
  163. package/dist/adv/session/mirror/TurnTailNodeView.js +106 -0
  164. package/dist/adv/session/mirror/TurnTailNodeView.js.map +1 -0
  165. package/dist/adv/session/mirror/TurnTriggerNodeView.d.ts +16 -0
  166. package/dist/adv/session/mirror/TurnTriggerNodeView.d.ts.map +1 -0
  167. package/dist/adv/session/mirror/TurnTriggerNodeView.js +103 -0
  168. package/dist/adv/session/mirror/TurnTriggerNodeView.js.map +1 -0
  169. package/dist/adv/session/mirror/TurnUsagePanel.d.ts +21 -0
  170. package/dist/adv/session/mirror/TurnUsagePanel.d.ts.map +1 -0
  171. package/dist/adv/session/mirror/TurnUsagePanel.js +41 -0
  172. package/dist/adv/session/mirror/TurnUsagePanel.js.map +1 -0
  173. package/dist/adv/session/mirror/control-details.d.ts +9 -0
  174. package/dist/adv/session/mirror/control-details.d.ts.map +1 -0
  175. package/dist/adv/session/mirror/control-details.js +549 -0
  176. package/dist/adv/session/mirror/control-details.js.map +1 -0
  177. package/dist/adv/session/mirror/detail-i18n.d.ts +4 -0
  178. package/dist/adv/session/mirror/detail-i18n.d.ts.map +1 -0
  179. package/dist/adv/session/mirror/detail-i18n.js +153 -0
  180. package/dist/adv/session/mirror/detail-i18n.js.map +1 -0
  181. package/dist/adv/session/mirror/message-chrome.d.ts +39 -0
  182. package/dist/adv/session/mirror/message-chrome.d.ts.map +1 -0
  183. package/dist/adv/session/mirror/message-chrome.js +153 -0
  184. package/dist/adv/session/mirror/message-chrome.js.map +1 -0
  185. package/dist/adv/session/mirror/process-groups.d.ts +56 -0
  186. package/dist/adv/session/mirror/process-groups.d.ts.map +1 -0
  187. package/dist/adv/session/mirror/process-groups.js +204 -0
  188. package/dist/adv/session/mirror/process-groups.js.map +1 -0
  189. package/dist/adv/session/official-classes.d.ts +28 -0
  190. package/dist/adv/session/official-classes.d.ts.map +1 -0
  191. package/dist/adv/session/official-classes.js +152 -0
  192. package/dist/adv/session/official-classes.js.map +1 -0
  193. package/dist/adv/session/open-review.d.ts +13 -0
  194. package/dist/adv/session/open-review.d.ts.map +1 -0
  195. package/dist/adv/session/open-review.js +32 -0
  196. package/dist/adv/session/open-review.js.map +1 -0
  197. package/dist/adv/session/open-session-view.d.ts +19 -0
  198. package/dist/adv/session/open-session-view.d.ts.map +1 -0
  199. package/dist/adv/session/open-session-view.js +147 -0
  200. package/dist/adv/session/open-session-view.js.map +1 -0
  201. package/dist/adv/session/pending-inputs.d.ts +33 -0
  202. package/dist/adv/session/pending-inputs.d.ts.map +1 -0
  203. package/dist/adv/session/pending-inputs.js +130 -0
  204. package/dist/adv/session/pending-inputs.js.map +1 -0
  205. package/dist/adv/session/session-css.d.ts +2 -0
  206. package/dist/adv/session/session-css.d.ts.map +1 -0
  207. package/dist/adv/session/session-css.generated.d.ts +2 -0
  208. package/dist/adv/session/session-css.generated.d.ts.map +1 -0
  209. package/dist/adv/session/session-css.generated.js +4 -0
  210. package/dist/adv/session/session-css.generated.js.map +1 -0
  211. package/dist/adv/session/session-css.js +3 -0
  212. package/dist/adv/session/session-css.js.map +1 -0
  213. package/dist/adv/session/tail-follow.d.ts +29 -0
  214. package/dist/adv/session/tail-follow.d.ts.map +1 -0
  215. package/dist/adv/session/tail-follow.js +106 -0
  216. package/dist/adv/session/tail-follow.js.map +1 -0
  217. package/dist/ui/actions/Button.d.ts +102 -0
  218. package/dist/ui/actions/Button.d.ts.map +1 -0
  219. package/dist/ui/actions/Button.js +233 -0
  220. package/dist/ui/actions/Button.js.map +1 -0
  221. package/dist/ui/actions/button-css.generated.d.ts +2 -0
  222. package/dist/ui/actions/button-css.generated.d.ts.map +1 -0
  223. package/dist/ui/actions/button-css.generated.js +4 -0
  224. package/dist/ui/actions/button-css.generated.js.map +1 -0
  225. package/dist/ui/display/Card.d.ts +65 -0
  226. package/dist/ui/display/Card.d.ts.map +1 -0
  227. package/dist/ui/display/Card.js +109 -0
  228. package/dist/ui/display/Card.js.map +1 -0
  229. package/dist/ui/display/Chip.d.ts +28 -0
  230. package/dist/ui/display/Chip.d.ts.map +1 -0
  231. package/dist/ui/display/Chip.js +36 -0
  232. package/dist/ui/display/Chip.js.map +1 -0
  233. package/dist/ui/display/CodeViewer.d.ts +38 -0
  234. package/dist/ui/display/CodeViewer.d.ts.map +1 -0
  235. package/dist/ui/display/CodeViewer.js +107 -0
  236. package/dist/ui/display/CodeViewer.js.map +1 -0
  237. package/dist/ui/display/FieldHint.d.ts +18 -0
  238. package/dist/ui/display/FieldHint.d.ts.map +1 -0
  239. package/dist/ui/display/FieldHint.js +40 -0
  240. package/dist/ui/display/FieldHint.js.map +1 -0
  241. package/dist/ui/display/FlipText.d.ts +43 -0
  242. package/dist/ui/display/FlipText.d.ts.map +1 -0
  243. package/dist/ui/display/FlipText.js +59 -0
  244. package/dist/ui/display/FlipText.js.map +1 -0
  245. package/dist/ui/display/LiveText.d.ts +13 -0
  246. package/dist/ui/display/LiveText.d.ts.map +1 -0
  247. package/dist/ui/display/LiveText.js +19 -0
  248. package/dist/ui/display/LiveText.js.map +1 -0
  249. package/dist/ui/display/MarqueeText.d.ts +22 -0
  250. package/dist/ui/display/MarqueeText.d.ts.map +1 -0
  251. package/dist/ui/display/MarqueeText.js +52 -0
  252. package/dist/ui/display/MarqueeText.js.map +1 -0
  253. package/dist/ui/display/SectionHead.d.ts +35 -0
  254. package/dist/ui/display/SectionHead.d.ts.map +1 -0
  255. package/dist/ui/display/SectionHead.js +45 -0
  256. package/dist/ui/display/SectionHead.js.map +1 -0
  257. package/dist/ui/display/Surface.d.ts +43 -0
  258. package/dist/ui/display/Surface.d.ts.map +1 -0
  259. package/dist/ui/display/Surface.js +39 -0
  260. package/dist/ui/display/Surface.js.map +1 -0
  261. package/dist/ui/display/Table.d.ts +30 -0
  262. package/dist/ui/display/Table.d.ts.map +1 -0
  263. package/dist/ui/display/Table.js +96 -0
  264. package/dist/ui/display/Table.js.map +1 -0
  265. package/dist/ui/display/card-css.d.ts +2 -0
  266. package/dist/ui/display/card-css.d.ts.map +1 -0
  267. package/dist/ui/display/card-css.generated.d.ts +2 -0
  268. package/dist/ui/display/card-css.generated.d.ts.map +1 -0
  269. package/dist/ui/display/card-css.generated.js +4 -0
  270. package/dist/ui/display/card-css.generated.js.map +1 -0
  271. package/dist/ui/display/card-css.js +5 -0
  272. package/dist/ui/display/card-css.js.map +1 -0
  273. package/dist/ui/display/chip-css.d.ts +2 -0
  274. package/dist/ui/display/chip-css.d.ts.map +1 -0
  275. package/dist/ui/display/chip-css.generated.d.ts +2 -0
  276. package/dist/ui/display/chip-css.generated.d.ts.map +1 -0
  277. package/dist/ui/display/chip-css.generated.js +4 -0
  278. package/dist/ui/display/chip-css.generated.js.map +1 -0
  279. package/dist/ui/display/chip-css.js +12 -0
  280. package/dist/ui/display/chip-css.js.map +1 -0
  281. package/dist/ui/display/code-viewer-css.d.ts +2 -0
  282. package/dist/ui/display/code-viewer-css.d.ts.map +1 -0
  283. package/dist/ui/display/code-viewer-css.generated.d.ts +2 -0
  284. package/dist/ui/display/code-viewer-css.generated.d.ts.map +1 -0
  285. package/dist/ui/display/code-viewer-css.generated.js +4 -0
  286. package/dist/ui/display/code-viewer-css.generated.js.map +1 -0
  287. package/dist/ui/display/code-viewer-css.js +3 -0
  288. package/dist/ui/display/code-viewer-css.js.map +1 -0
  289. package/dist/ui/display/code-viewer-lang.d.ts +15 -0
  290. package/dist/ui/display/code-viewer-lang.d.ts.map +1 -0
  291. package/dist/ui/display/code-viewer-lang.js +190 -0
  292. package/dist/ui/display/code-viewer-lang.js.map +1 -0
  293. package/dist/ui/display/code-viewer-theme.d.ts +5 -0
  294. package/dist/ui/display/code-viewer-theme.d.ts.map +1 -0
  295. package/dist/ui/display/code-viewer-theme.js +138 -0
  296. package/dist/ui/display/code-viewer-theme.js.map +1 -0
  297. package/dist/ui/display/flip-css.d.ts +2 -0
  298. package/dist/ui/display/flip-css.d.ts.map +1 -0
  299. package/dist/ui/display/flip-css.generated.d.ts +2 -0
  300. package/dist/ui/display/flip-css.generated.d.ts.map +1 -0
  301. package/dist/ui/display/flip-css.generated.js +4 -0
  302. package/dist/ui/display/flip-css.generated.js.map +1 -0
  303. package/dist/ui/display/flip-css.js +4 -0
  304. package/dist/ui/display/flip-css.js.map +1 -0
  305. package/dist/ui/display/hint-css.generated.d.ts +2 -0
  306. package/dist/ui/display/hint-css.generated.d.ts.map +1 -0
  307. package/dist/ui/display/hint-css.generated.js +4 -0
  308. package/dist/ui/display/hint-css.generated.js.map +1 -0
  309. package/dist/ui/display/marquee-css.d.ts +2 -0
  310. package/dist/ui/display/marquee-css.d.ts.map +1 -0
  311. package/dist/ui/display/marquee-css.generated.d.ts +2 -0
  312. package/dist/ui/display/marquee-css.generated.d.ts.map +1 -0
  313. package/dist/ui/display/marquee-css.generated.js +4 -0
  314. package/dist/ui/display/marquee-css.generated.js.map +1 -0
  315. package/dist/ui/display/marquee-css.js +4 -0
  316. package/dist/ui/display/marquee-css.js.map +1 -0
  317. package/dist/ui/display/section-head-css.generated.d.ts +2 -0
  318. package/dist/ui/display/section-head-css.generated.d.ts.map +1 -0
  319. package/dist/ui/display/section-head-css.generated.js +4 -0
  320. package/dist/ui/display/section-head-css.generated.js.map +1 -0
  321. package/dist/ui/display/surface-css.d.ts +2 -0
  322. package/dist/ui/display/surface-css.d.ts.map +1 -0
  323. package/dist/ui/display/surface-css.generated.d.ts +2 -0
  324. package/dist/ui/display/surface-css.generated.d.ts.map +1 -0
  325. package/dist/ui/display/surface-css.generated.js +4 -0
  326. package/dist/ui/display/surface-css.generated.js.map +1 -0
  327. package/dist/ui/display/surface-css.js +7 -0
  328. package/dist/ui/display/surface-css.js.map +1 -0
  329. package/dist/ui/display/table-css.generated.d.ts +2 -0
  330. package/dist/ui/display/table-css.generated.d.ts.map +1 -0
  331. package/dist/ui/display/table-css.generated.js +4 -0
  332. package/dist/ui/display/table-css.generated.js.map +1 -0
  333. package/dist/ui/display/table-logic.d.ts +110 -0
  334. package/dist/ui/display/table-logic.d.ts.map +1 -0
  335. package/dist/ui/display/table-logic.js +81 -0
  336. package/dist/ui/display/table-logic.js.map +1 -0
  337. package/dist/ui/display/table-plain-css.generated.d.ts +2 -0
  338. package/dist/ui/display/table-plain-css.generated.d.ts.map +1 -0
  339. package/dist/ui/display/table-plain-css.generated.js +4 -0
  340. package/dist/ui/display/table-plain-css.generated.js.map +1 -0
  341. package/dist/ui/display/table-shared.d.ts +101 -0
  342. package/dist/ui/display/table-shared.d.ts.map +1 -0
  343. package/dist/ui/display/table-shared.js +229 -0
  344. package/dist/ui/display/table-shared.js.map +1 -0
  345. package/dist/ui/feedback/AlertModal.d.ts +41 -0
  346. package/dist/ui/feedback/AlertModal.d.ts.map +1 -0
  347. package/dist/ui/feedback/AlertModal.js +45 -0
  348. package/dist/ui/feedback/AlertModal.js.map +1 -0
  349. package/dist/ui/feedback/ConfirmModal.d.ts +50 -0
  350. package/dist/ui/feedback/ConfirmModal.d.ts.map +1 -0
  351. package/dist/ui/feedback/ConfirmModal.js +47 -0
  352. package/dist/ui/feedback/ConfirmModal.js.map +1 -0
  353. package/dist/ui/feedback/Loader.d.ts +49 -0
  354. package/dist/ui/feedback/Loader.d.ts.map +1 -0
  355. package/dist/ui/feedback/Loader.js +79 -0
  356. package/dist/ui/feedback/Loader.js.map +1 -0
  357. package/dist/ui/feedback/LoaderBar.d.ts +38 -0
  358. package/dist/ui/feedback/LoaderBar.d.ts.map +1 -0
  359. package/dist/ui/feedback/LoaderBar.js +79 -0
  360. package/dist/ui/feedback/LoaderBar.js.map +1 -0
  361. package/dist/ui/feedback/Loading.d.ts +69 -0
  362. package/dist/ui/feedback/Loading.d.ts.map +1 -0
  363. package/dist/ui/feedback/Loading.js +164 -0
  364. package/dist/ui/feedback/Loading.js.map +1 -0
  365. package/dist/ui/feedback/Modal.d.ts +73 -0
  366. package/dist/ui/feedback/Modal.d.ts.map +1 -0
  367. package/dist/ui/feedback/Modal.js +83 -0
  368. package/dist/ui/feedback/Modal.js.map +1 -0
  369. package/dist/ui/feedback/SideSheet.d.ts +70 -0
  370. package/dist/ui/feedback/SideSheet.d.ts.map +1 -0
  371. package/dist/ui/feedback/SideSheet.js +130 -0
  372. package/dist/ui/feedback/SideSheet.js.map +1 -0
  373. package/dist/ui/feedback/Toast.d.ts +45 -0
  374. package/dist/ui/feedback/Toast.d.ts.map +1 -0
  375. package/dist/ui/feedback/Toast.js +225 -0
  376. package/dist/ui/feedback/Toast.js.map +1 -0
  377. package/dist/ui/feedback/feedback-css.d.ts +2 -0
  378. package/dist/ui/feedback/feedback-css.d.ts.map +1 -0
  379. package/dist/ui/feedback/feedback-css.generated.d.ts +2 -0
  380. package/dist/ui/feedback/feedback-css.generated.d.ts.map +1 -0
  381. package/dist/ui/feedback/feedback-css.generated.js +4 -0
  382. package/dist/ui/feedback/feedback-css.generated.js.map +1 -0
  383. package/dist/ui/feedback/feedback-css.js +4 -0
  384. package/dist/ui/feedback/feedback-css.js.map +1 -0
  385. package/dist/ui/feedback/host-toast.d.ts +23 -0
  386. package/dist/ui/feedback/host-toast.d.ts.map +1 -0
  387. package/dist/ui/feedback/host-toast.js +34 -0
  388. package/dist/ui/feedback/host-toast.js.map +1 -0
  389. package/dist/ui/feedback/loader-bar-art.d.ts +6 -0
  390. package/dist/ui/feedback/loader-bar-art.d.ts.map +1 -0
  391. package/dist/ui/feedback/loader-bar-art.js +6 -0
  392. package/dist/ui/feedback/loader-bar-art.js.map +1 -0
  393. package/dist/ui/feedback/loader-bar-css.generated.d.ts +2 -0
  394. package/dist/ui/feedback/loader-bar-css.generated.d.ts.map +1 -0
  395. package/dist/ui/feedback/loader-bar-css.generated.js +4 -0
  396. package/dist/ui/feedback/loader-bar-css.generated.js.map +1 -0
  397. package/dist/ui/feedback/loader-css.generated.d.ts +2 -0
  398. package/dist/ui/feedback/loader-css.generated.d.ts.map +1 -0
  399. package/dist/ui/feedback/loader-css.generated.js +4 -0
  400. package/dist/ui/feedback/loader-css.generated.js.map +1 -0
  401. package/dist/ui/feedback/loading-css.generated.d.ts +2 -0
  402. package/dist/ui/feedback/loading-css.generated.d.ts.map +1 -0
  403. package/dist/ui/feedback/loading-css.generated.js +4 -0
  404. package/dist/ui/feedback/loading-css.generated.js.map +1 -0
  405. package/dist/ui/feedback/loading-host.d.ts +49 -0
  406. package/dist/ui/feedback/loading-host.d.ts.map +1 -0
  407. package/dist/ui/feedback/loading-host.js +57 -0
  408. package/dist/ui/feedback/loading-host.js.map +1 -0
  409. package/dist/ui/feedback/modal-host.d.ts +51 -0
  410. package/dist/ui/feedback/modal-host.d.ts.map +1 -0
  411. package/dist/ui/feedback/modal-host.js +170 -0
  412. package/dist/ui/feedback/modal-host.js.map +1 -0
  413. package/dist/ui/feedback/side-sheet-css.d.ts +2 -0
  414. package/dist/ui/feedback/side-sheet-css.d.ts.map +1 -0
  415. package/dist/ui/feedback/side-sheet-css.generated.d.ts +2 -0
  416. package/dist/ui/feedback/side-sheet-css.generated.d.ts.map +1 -0
  417. package/dist/ui/feedback/side-sheet-css.generated.js +4 -0
  418. package/dist/ui/feedback/side-sheet-css.generated.js.map +1 -0
  419. package/dist/ui/feedback/side-sheet-css.js +2 -0
  420. package/dist/ui/feedback/side-sheet-css.js.map +1 -0
  421. package/dist/ui/feedback/toast-host.d.ts +24 -0
  422. package/dist/ui/feedback/toast-host.d.ts.map +1 -0
  423. package/dist/ui/feedback/toast-host.js +20 -0
  424. package/dist/ui/feedback/toast-host.js.map +1 -0
  425. package/dist/ui/index.d.ts +44 -44
  426. package/dist/ui/index.d.ts.map +1 -1
  427. package/dist/ui/index.js +44 -44
  428. package/dist/ui/index.js.map +1 -1
  429. package/dist/ui/infra/chevron.d.ts +22 -0
  430. package/dist/ui/infra/chevron.d.ts.map +1 -0
  431. package/dist/ui/infra/chevron.js +33 -0
  432. package/dist/ui/infra/chevron.js.map +1 -0
  433. package/dist/ui/infra/controls-css.d.ts +16 -0
  434. package/dist/ui/infra/controls-css.d.ts.map +1 -0
  435. package/dist/ui/infra/controls-css.js +26 -0
  436. package/dist/ui/infra/controls-css.js.map +1 -0
  437. package/dist/ui/infra/css.d.ts +35 -0
  438. package/dist/ui/infra/css.d.ts.map +1 -0
  439. package/dist/ui/infra/css.js +52 -0
  440. package/dist/ui/infra/css.js.map +1 -0
  441. package/dist/ui/infra/host-data.d.ts +119 -0
  442. package/dist/ui/infra/host-data.d.ts.map +1 -0
  443. package/dist/ui/infra/host-data.js +122 -0
  444. package/dist/ui/infra/host-data.js.map +1 -0
  445. package/dist/ui/infra/locale.d.ts +4 -0
  446. package/dist/ui/infra/locale.d.ts.map +1 -0
  447. package/dist/ui/infra/locale.js +17 -0
  448. package/dist/ui/infra/locale.js.map +1 -0
  449. package/dist/ui/infra/overlay-css.d.ts +2 -0
  450. package/dist/ui/infra/overlay-css.d.ts.map +1 -0
  451. package/dist/ui/infra/overlay-css.generated.d.ts +2 -0
  452. package/dist/ui/infra/overlay-css.generated.d.ts.map +1 -0
  453. package/dist/ui/infra/overlay-css.generated.js +4 -0
  454. package/dist/ui/infra/overlay-css.generated.js.map +1 -0
  455. package/dist/ui/infra/overlay-css.js +2 -0
  456. package/dist/ui/infra/overlay-css.js.map +1 -0
  457. package/dist/ui/infra/overlay.d.ts +62 -0
  458. package/dist/ui/infra/overlay.d.ts.map +1 -0
  459. package/dist/ui/infra/overlay.js +94 -0
  460. package/dist/ui/infra/overlay.js.map +1 -0
  461. package/dist/ui/infra/panel-css.d.ts +2 -0
  462. package/dist/ui/infra/panel-css.d.ts.map +1 -0
  463. package/dist/ui/infra/panel-css.generated.d.ts +2 -0
  464. package/dist/ui/infra/panel-css.generated.d.ts.map +1 -0
  465. package/dist/ui/infra/panel-css.generated.js +4 -0
  466. package/dist/ui/infra/panel-css.generated.js.map +1 -0
  467. package/dist/ui/infra/panel-css.js +2 -0
  468. package/dist/ui/infra/panel-css.js.map +1 -0
  469. package/dist/ui/infra/panel.d.ts +41 -0
  470. package/dist/ui/infra/panel.d.ts.map +1 -0
  471. package/dist/ui/infra/panel.js +37 -0
  472. package/dist/ui/infra/panel.js.map +1 -0
  473. package/dist/ui/infra/side-panel-css.d.ts +2 -0
  474. package/dist/ui/infra/side-panel-css.d.ts.map +1 -0
  475. package/dist/ui/infra/side-panel-css.generated.d.ts +2 -0
  476. package/dist/ui/infra/side-panel-css.generated.d.ts.map +1 -0
  477. package/dist/ui/infra/side-panel-css.generated.js +4 -0
  478. package/dist/ui/infra/side-panel-css.generated.js.map +1 -0
  479. package/dist/ui/infra/side-panel-css.js +2 -0
  480. package/dist/ui/infra/side-panel-css.js.map +1 -0
  481. package/dist/ui/infra/thenable.d.ts +9 -0
  482. package/dist/ui/infra/thenable.d.ts.map +1 -0
  483. package/dist/ui/infra/thenable.js +15 -0
  484. package/dist/ui/infra/thenable.js.map +1 -0
  485. package/dist/ui/infra/ticker.d.ts +8 -0
  486. package/dist/ui/infra/ticker.d.ts.map +1 -0
  487. package/dist/ui/infra/ticker.js +49 -0
  488. package/dist/ui/infra/ticker.js.map +1 -0
  489. package/dist/ui/infra/tooltip.d.ts +29 -0
  490. package/dist/ui/infra/tooltip.d.ts.map +1 -0
  491. package/dist/ui/infra/tooltip.js +10 -0
  492. package/dist/ui/infra/tooltip.js.map +1 -0
  493. package/dist/ui/inputs/Checkbox.d.ts +24 -0
  494. package/dist/ui/inputs/Checkbox.d.ts.map +1 -0
  495. package/dist/ui/inputs/Checkbox.js +35 -0
  496. package/dist/ui/inputs/Checkbox.js.map +1 -0
  497. package/dist/ui/inputs/DateTimePicker.d.ts +45 -0
  498. package/dist/ui/inputs/DateTimePicker.d.ts.map +1 -0
  499. package/dist/ui/inputs/DateTimePicker.js +462 -0
  500. package/dist/ui/inputs/DateTimePicker.js.map +1 -0
  501. package/dist/ui/inputs/Field.d.ts +125 -0
  502. package/dist/ui/inputs/Field.d.ts.map +1 -0
  503. package/dist/ui/inputs/Field.js +175 -0
  504. package/dist/ui/inputs/Field.js.map +1 -0
  505. package/dist/ui/inputs/InputGroup.d.ts +91 -0
  506. package/dist/ui/inputs/InputGroup.d.ts.map +1 -0
  507. package/dist/ui/inputs/InputGroup.js +125 -0
  508. package/dist/ui/inputs/InputGroup.js.map +1 -0
  509. package/dist/ui/inputs/ModelPicker.d.ts +48 -0
  510. package/dist/ui/inputs/ModelPicker.d.ts.map +1 -0
  511. package/dist/ui/inputs/ModelPicker.js +101 -0
  512. package/dist/ui/inputs/ModelPicker.js.map +1 -0
  513. package/dist/ui/inputs/Picker.d.ts +56 -0
  514. package/dist/ui/inputs/Picker.d.ts.map +1 -0
  515. package/dist/ui/inputs/Picker.js +244 -0
  516. package/dist/ui/inputs/Picker.js.map +1 -0
  517. package/dist/ui/inputs/Segmented.d.ts +99 -0
  518. package/dist/ui/inputs/Segmented.d.ts.map +1 -0
  519. package/dist/ui/inputs/Segmented.js +135 -0
  520. package/dist/ui/inputs/Segmented.js.map +1 -0
  521. package/dist/ui/inputs/Textarea.d.ts +36 -0
  522. package/dist/ui/inputs/Textarea.d.ts.map +1 -0
  523. package/dist/ui/inputs/Textarea.js +35 -0
  524. package/dist/ui/inputs/Textarea.js.map +1 -0
  525. package/dist/ui/inputs/WorkspacePicker.d.ts +35 -0
  526. package/dist/ui/inputs/WorkspacePicker.d.ts.map +1 -0
  527. package/dist/ui/inputs/WorkspacePicker.js +39 -0
  528. package/dist/ui/inputs/WorkspacePicker.js.map +1 -0
  529. package/dist/ui/inputs/datetime-css.generated.d.ts +2 -0
  530. package/dist/ui/inputs/datetime-css.generated.d.ts.map +1 -0
  531. package/dist/ui/inputs/datetime-css.generated.js +4 -0
  532. package/dist/ui/inputs/datetime-css.generated.js.map +1 -0
  533. package/dist/ui/inputs/datetime-logic.d.ts +102 -0
  534. package/dist/ui/inputs/datetime-logic.d.ts.map +1 -0
  535. package/dist/ui/inputs/datetime-logic.js +200 -0
  536. package/dist/ui/inputs/datetime-logic.js.map +1 -0
  537. package/dist/ui/inputs/field-css.generated.d.ts +2 -0
  538. package/dist/ui/inputs/field-css.generated.d.ts.map +1 -0
  539. package/dist/ui/inputs/field-css.generated.js +4 -0
  540. package/dist/ui/inputs/field-css.generated.js.map +1 -0
  541. package/dist/ui/inputs/input-group-css.generated.d.ts +2 -0
  542. package/dist/ui/inputs/input-group-css.generated.d.ts.map +1 -0
  543. package/dist/ui/inputs/input-group-css.generated.js +4 -0
  544. package/dist/ui/inputs/input-group-css.generated.js.map +1 -0
  545. package/dist/ui/inputs/picker-css.d.ts +2 -0
  546. package/dist/ui/inputs/picker-css.d.ts.map +1 -0
  547. package/dist/ui/inputs/picker-css.generated.d.ts +2 -0
  548. package/dist/ui/inputs/picker-css.generated.d.ts.map +1 -0
  549. package/dist/ui/inputs/picker-css.generated.js +4 -0
  550. package/dist/ui/inputs/picker-css.generated.js.map +1 -0
  551. package/dist/ui/inputs/picker-css.js +4 -0
  552. package/dist/ui/inputs/picker-css.js.map +1 -0
  553. package/dist/ui/inputs/picker-icons.d.ts +12 -0
  554. package/dist/ui/inputs/picker-icons.d.ts.map +1 -0
  555. package/dist/ui/inputs/picker-icons.js +29 -0
  556. package/dist/ui/inputs/picker-icons.js.map +1 -0
  557. package/dist/ui/inputs/picker-logic.d.ts +33 -0
  558. package/dist/ui/inputs/picker-logic.d.ts.map +1 -0
  559. package/dist/ui/inputs/picker-logic.js +68 -0
  560. package/dist/ui/inputs/picker-logic.js.map +1 -0
  561. package/dist/ui/inputs/segmented-css.generated.d.ts +2 -0
  562. package/dist/ui/inputs/segmented-css.generated.d.ts.map +1 -0
  563. package/dist/ui/inputs/segmented-css.generated.js +4 -0
  564. package/dist/ui/inputs/segmented-css.generated.js.map +1 -0
  565. package/dist/ui/layout/PanelDock.d.ts +132 -0
  566. package/dist/ui/layout/PanelDock.d.ts.map +1 -0
  567. package/dist/ui/layout/PanelDock.js +390 -0
  568. package/dist/ui/layout/PanelDock.js.map +1 -0
  569. package/dist/ui/layout/QuickToolbar.d.ts +54 -0
  570. package/dist/ui/layout/QuickToolbar.d.ts.map +1 -0
  571. package/dist/ui/layout/QuickToolbar.js +254 -0
  572. package/dist/ui/layout/QuickToolbar.js.map +1 -0
  573. package/dist/ui/layout/SplitGroup.d.ts +37 -0
  574. package/dist/ui/layout/SplitGroup.d.ts.map +1 -0
  575. package/dist/ui/layout/SplitGroup.js +36 -0
  576. package/dist/ui/layout/SplitGroup.js.map +1 -0
  577. package/dist/ui/layout/panel-dock-css.d.ts +2 -0
  578. package/dist/ui/layout/panel-dock-css.d.ts.map +1 -0
  579. package/dist/ui/layout/panel-dock-css.generated.d.ts +2 -0
  580. package/dist/ui/layout/panel-dock-css.generated.d.ts.map +1 -0
  581. package/dist/ui/layout/panel-dock-css.generated.js +4 -0
  582. package/dist/ui/layout/panel-dock-css.generated.js.map +1 -0
  583. package/dist/ui/layout/panel-dock-css.js +4 -0
  584. package/dist/ui/layout/panel-dock-css.js.map +1 -0
  585. package/dist/ui/layout/panel-dock-logic.d.ts +67 -0
  586. package/dist/ui/layout/panel-dock-logic.d.ts.map +1 -0
  587. package/dist/ui/layout/panel-dock-logic.js +110 -0
  588. package/dist/ui/layout/panel-dock-logic.js.map +1 -0
  589. package/dist/ui/layout/quick-toolbar-css.generated.d.ts +2 -0
  590. package/dist/ui/layout/quick-toolbar-css.generated.d.ts.map +1 -0
  591. package/dist/ui/layout/quick-toolbar-css.generated.js +4 -0
  592. package/dist/ui/layout/quick-toolbar-css.generated.js.map +1 -0
  593. package/dist/ui/layout/quick-toolbar-logic.d.ts +76 -0
  594. package/dist/ui/layout/quick-toolbar-logic.d.ts.map +1 -0
  595. package/dist/ui/layout/quick-toolbar-logic.js +40 -0
  596. package/dist/ui/layout/quick-toolbar-logic.js.map +1 -0
  597. package/dist/ui/layout/resizer.d.ts +29 -0
  598. package/dist/ui/layout/resizer.d.ts.map +1 -0
  599. package/dist/ui/layout/resizer.js +42 -0
  600. package/dist/ui/layout/resizer.js.map +1 -0
  601. package/dist/ui/layout/split-group-css.generated.d.ts +2 -0
  602. package/dist/ui/layout/split-group-css.generated.d.ts.map +1 -0
  603. package/dist/ui/layout/split-group-css.generated.js +4 -0
  604. package/dist/ui/layout/split-group-css.generated.js.map +1 -0
  605. package/dist/ui/navigation/Pagination.d.ts +59 -0
  606. package/dist/ui/navigation/Pagination.d.ts.map +1 -0
  607. package/dist/ui/navigation/Pagination.js +112 -0
  608. package/dist/ui/navigation/Pagination.js.map +1 -0
  609. package/dist/ui/navigation/pagination-css.generated.d.ts +2 -0
  610. package/dist/ui/navigation/pagination-css.generated.d.ts.map +1 -0
  611. package/dist/ui/navigation/pagination-css.generated.js +4 -0
  612. package/dist/ui/navigation/pagination-css.generated.js.map +1 -0
  613. package/dist/ui/navigation/pagination-logic.d.ts +36 -0
  614. package/dist/ui/navigation/pagination-logic.d.ts.map +1 -0
  615. package/dist/ui/navigation/pagination-logic.js +73 -0
  616. package/dist/ui/navigation/pagination-logic.js.map +1 -0
  617. package/dist/ui/official.js +2 -2
  618. package/dist/ui/official.js.map +1 -1
  619. package/dist/utils/i18n.d.ts +2 -2
  620. package/dist/utils/i18n.d.ts.map +1 -1
  621. package/dist/utils/i18n.js +1 -1
  622. package/dist/utils/i18n.js.map +1 -1
  623. package/docs/README.md +1 -1
  624. package/docs/design/architecture.md +9 -8
  625. package/docs/design/copywriting.md +23 -0
  626. package/docs/design/external/dsh-host.md +5 -5
  627. package/docs/design/structure.md +132 -128
  628. package/docs/design/style.md +5 -5
  629. package/docs/help/utils.doc.ts +3 -3
  630. package/docs/help/utils.md +3 -3
  631. package/docs/requirements.md +30 -290
  632. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-css.d.ts","sourceRoot":"","sources":["../../../src/adv/session/session-css.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const SESSION_CSS = "/* \u4F1A\u8BDD\u9884\u89C8\uFF08SessionViewModal\uFF09\u81EA\u7ED8\u6837\u5F0F\uFF1A\u53EA\u88C5\u672C\u5305\u81EA\u5DF1\u7684\u7EC4\u4EF6\uFF08\u6682\u5B58\u8F93\u5165\u533A / fork / \u63A2\u9488\u7B49\uFF09\n + \u4E24\u4E2A\u7A33\u5B9A\u94A9\u5B50\u7C7B\uFF08dshpc-sv-frame / dshpc-sv-scroll\uFF09\u3002\n \u5DF2\u5220\uFF1AChangedFiles \u5361\u4E0E FileDiff \u7684\u5168\u90E8\u81EA\u7ED8\u89C4\u5219\uFF082026-10-24\uFF09\u2014\u2014\u5B98\u65B9 ChangedFiles /\n FileDiff \u6A21\u5757\u7C7B\u7531 officialClass() \u8FD0\u884C\u65F6\u53D1\u73B0\u5E76\u6302\u5728\u5143\u7D20\u4E0A\uFF0C\u672C\u5305\u4E0D\u518D\u6709\u4E00\u884C\u515C\u5E95\u3002\n \u26A0\uFE0F 2026-10-23 \u8D77\u4E0D\u518D\u6709\u5B98\u65B9\u7C7B\u515C\u5E95\uFF1A\u955C\u50CF\u5B98\u65B9\u7EC4\u4EF6\u7684\u5143\u7D20\u4E00\u5F8B\u6302\u5B98\u65B9 CSS-module \u7C7B\u540D\n \uFF08officialClass() \u8FD0\u884C\u65F6\u53D1\u73B0\uFF0C\u53D6\u4E0D\u5230 = \u7A7A\u7C7B\u3001\u88F8\u7ED3\u6784\u4E0D\u767D\u5C4F\uFF09\u2014\u2014\u672C\u5305\u53EA\u8DD1 DSH \u5BBF\u4E3B\u3001\u5B98\u65B9\u6837\u5F0F\u5FC5\u5728\u573A\uFF0C\n \u81EA\u7ED8\u4E00\u4E00\u5BF9\u5E94\u662F\u6B7B\u4EE3\u7801\u3002\u8981\u6539\u5B98\u65B9\u89C2\u611F\u8D70 token \u8986\u76D6 / \u53CC\u7C7B\u540D\u94A9\u5B50\uFF08\u89C1 ChatView.ts \u5934\u6CE8\uFF09\uFF0C\u522B\u5728\u8FD9\u52A0\u515C\u5E95\u3002\n \u7C7B\u540D\u56FA\u5B9A dshpc-sv-*\uFF1B\u989C\u8272\u4E00\u5F8B\u8D70 --dshpc-* token\uFF08\u660E\u6697\u81EA\u9002\u5E94\uFF09\u3002\n \u5916\u58F3\uFF08\u906E\u7F69 / \u9762\u677F / \u5934\u90E8 / \u5173\u95ED\u94AE\uFF09= \u6838\u5FC3 Modal\uFF08size lg\uFF09\u3002 */\n/* \u4F1A\u8BDD\u533A = \u666E\u901A\u7EB5\u5411\u6D41\uFF1A\u4E0D\u8BBE\u9AD8\u5EA6\u3001\u4E0D\u81EA\u5DF1\u6EDA\uFF08\u6EDA\u52A8\u4E0E\u5185\u8DDD\u5F52\u6838\u5FC3 Modal body\uFF0C\u7528\u6237 2026-10-22 \u53E3\u5F84\uFF09\u3002 */\n.dshpc-sv{display:flex;flex-direction:column;min-width:0;gap:10px}\n\n/* \u5B98\u65B9\u6837\u5F0F\u672A\u547D\u4E2D\u65F6\u7684\u53EF\u89C1\u63A2\u9488\uFF08\u6302\u5728\u5934\u90E8\u526F\u6807\u9898\u884C\uFF0C\u4E0D\u5360\u6B63\u6587\uFF09\u3002 */\n.dshpc-sv-probe{font-size:var(--dshpc-font-xs);color:var(--dshpc-warning)}\n\n/* \u5934\u90E8\u5F52\u6863\u6807\u8BC6\uFF08\u5B98\u65B9\u5F52\u6863\u56FE\u6807 + \u300C\u5DF2\u5F52\u6863\u300D\uFF09\u3002 */\n.dshpc-sv-archived{display:inline-flex;align-items:center;gap:4px;font-size:var(--dshpc-font-xs);font-weight:400;color:var(--dshpc-fg-3)}\n\n/* \u5185\u8DDD\u4E0E\u6EDA\u52A8\u5168\u90E8\u8BA9\u7ED9\u6838\u5FC3 Modal body \u21D2 \u8FD9\u91CC\u628A\u5B98\u65B9 ChatView.frame / scroll \u7684\u5185\u8DDD\u3001\n overflow\u3001\u9AD8\u5EA6\u4E00\u5F8B\u5F52\u96F6\uFF08\u53CC\u7C7B\u540D 0,2,0 \u538B\u8FC7 CSS module\uFF0C\u4E0D\u9760\u6CE8\u5165\u987A\u5E8F\uFF09\u3002\n \u26A0\uFE0F \u5FC5\u987B\u540C\u65F6\u628A flex \u6536\u6389\uFF1A\u5B98\u65B9 scroll \u662F flex:1\uFF08basis=0\uFF09\uFF0C\u5728**\u81EA\u52A8\u9AD8**\u7684\u5BB9\u5668\u91CC\u4F1A\u628A\n \u4F1A\u8BDD\u533A\u538B\u6210 0 \u9AD8 \u2014\u2014 \u8FD9\u6B63\u662F\u300C\u5185\u5BB9\u81EA\u7BA1\u9AD8\u5EA6\u300D\u7684\u8001\u6BDB\u75C5\uFF0C\u522B\u518D\u653E\u56DE\u6765\u3002 */\n.dshpc-sv-frame.dshpc-sv-frame{padding-top:0;padding-bottom:0;}\n\n/* \u5B98\u65B9\u7EC4\u4EF6\u62FF --dsw-alias-bg-base \u505A sticky \u906E\u6321\u5E95\uFF08\u601D\u8003\u884C\u5C55\u5F00\u5934\u7B49\uFF09\uFF0C\u53D6\u503C\u662F\u5BBF\u4E3B app\n \u5168\u5C40\u57FA\u5E95\u8272\uFF0C\u4E0E\u5F39\u7A97\u9762\u677F\u5E95\u4E0D\u540C\u5C42 \u21D2 \u4F1A\u8BDD\u533A\u5185\u6539\u6307\u5411\u5F39\u7A97\u9762\u677F\u5E95\uFF08\u80CC\u666F\u4FDD\u7559\u3001\u989C\u8272\u8D34\u5408\uFF09\u3002 */\n.dshpc-sv-frame.dshpc-sv-frame{--dsw-alias-bg-base:var(--dshpc-surface-1);}\n\n.dshpc-sv-scroll.dshpc-sv-scroll{padding:0;overflow:visible;height:auto;max-height:none;flex:none;}\n\n/* \u4F1A\u8BDD\u533A\u4FDD\u5E95\uFF1A\u9AD8\u5EA6\u7531\u5185\u5BB9\u51B3\u5B9A\uFF08\u6491\u5F00\u7531 Modal body \u6EDA\uFF09\u3002 */\n.dshpc-sv-chat{flex:none;min-height:0;}\n\n\n.dshpc-sv-assistant{align-self:stretch;font-size:var(--dshpc-font-lg);line-height:1.7;word-break:break-word;}\n\n.dshpc-sv-image{align-self:flex-start;font-size:var(--dshpc-font-sm);color:var(--dshpc-fg-3);border:1px dashed var(--dshpc-border);border-radius:var(--dshpc-radius-sm);padding:4px 10px;}\n\n/* \u5DE5\u5177\u5361\u6839\uFF08SessionViewModal legacy \u515C\u5E95\u6E32\u67D3\u76F4\u63A5\u7528\uFF1B\u6B63\u5E38 keyed \u8DEF\u5F84\u4E00\u5F8B\u6302\u5B98\u65B9 ToolRow \u7C7B\uFF09\u3002 */\n.dshpc-sv-tool{flex-direction:column;display:flex;}\n\n.dshpc-sv-notice{align-self:center;font-size:var(--dshpc-font-sm);color:var(--dshpc-fg-3);padding:2px 8px;}\n\n\n.dshpc-sv-forkerr{margin:0;font-size:var(--dshpc-font-lg);line-height:var(--dshpc-line-lg);color:var(--dshpc-danger);word-break:break-word;}\n\n.dshpc-sv-forktext{margin:0;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);color:var(--dshpc-fg-2);}\n\n/* \u2500\u2500 \u6682\u5B58\u8F93\u5165\u533A\uFF08\u671F4\uFF1A\u6253\u5B57 \u2192 \u786E\u5B9A \u2192 fork \u5E26\u8BDD\u8DF3\u5B98\u65B9\u89C6\u56FE\uFF09\u2500\u2500 */\n.dshpc-sv-composer{flex:1;display:flex;align-items:flex-end;gap:8px;flex-wrap:wrap;}\n\n.dshpc-sv-composer textarea{flex:1;min-width:0;resize:none;font:inherit;font-size:var(--dshpc-font-lg);line-height:var(--dshpc-line-lg);color:var(--dshpc-fg);background:var(--dshpc-surface-2);border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);padding:8px 12px;min-height:40px;max-height:120px;}\n\n.dshpc-sv-composer textarea:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:-1px;}\n\n.dshpc-sv-composer-hint{flex:none;font-size:var(--dshpc-font-xs);color:var(--dshpc-fg-3);padding-bottom:10px;white-space:nowrap;}";
2
+ //# sourceMappingURL=session-css.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-css.generated.d.ts","sourceRoot":"","sources":["../../../src/adv/session/session-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,+rLAAmjG,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ⚠️ 生成物,勿手改。真源 = src/adv/session/session.css
2
+ // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
+ export const SESSION_CSS = "/* 会话预览(SessionViewModal)自绘样式:只装本包自己的组件(暂存输入区 / fork / 探针等)\n + 两个稳定钩子类(dshpc-sv-frame / dshpc-sv-scroll)。\n 已删:ChangedFiles 卡与 FileDiff 的全部自绘规则(2026-10-24)——官方 ChangedFiles /\n FileDiff 模块类由 officialClass() 运行时发现并挂在元素上,本包不再有一行兜底。\n ⚠️ 2026-10-23 起不再有官方类兜底:镜像官方组件的元素一律挂官方 CSS-module 类名\n (officialClass() 运行时发现,取不到 = 空类、裸结构不白屏)——本包只跑 DSH 宿主、官方样式必在场,\n 自绘一一对应是死代码。要改官方观感走 token 覆盖 / 双类名钩子(见 ChatView.ts 头注),别在这加兜底。\n 类名固定 dshpc-sv-*;颜色一律走 --dshpc-* token(明暗自适应)。\n 外壳(遮罩 / 面板 / 头部 / 关闭钮)= 核心 Modal(size lg)。 */\n/* 会话区 = 普通纵向流:不设高度、不自己滚(滚动与内距归核心 Modal body,用户 2026-10-22 口径)。 */\n.dshpc-sv{display:flex;flex-direction:column;min-width:0;gap:10px}\n\n/* 官方样式未命中时的可见探针(挂在头部副标题行,不占正文)。 */\n.dshpc-sv-probe{font-size:var(--dshpc-font-xs);color:var(--dshpc-warning)}\n\n/* 头部归档标识(官方归档图标 + 「已归档」)。 */\n.dshpc-sv-archived{display:inline-flex;align-items:center;gap:4px;font-size:var(--dshpc-font-xs);font-weight:400;color:var(--dshpc-fg-3)}\n\n/* 内距与滚动全部让给核心 Modal body ⇒ 这里把官方 ChatView.frame / scroll 的内距、\n overflow、高度一律归零(双类名 0,2,0 压过 CSS module,不靠注入顺序)。\n ⚠️ 必须同时把 flex 收掉:官方 scroll 是 flex:1(basis=0),在**自动高**的容器里会把\n 会话区压成 0 高 —— 这正是「内容自管高度」的老毛病,别再放回来。 */\n.dshpc-sv-frame.dshpc-sv-frame{padding-top:0;padding-bottom:0;}\n\n/* 官方组件拿 --dsw-alias-bg-base 做 sticky 遮挡底(思考行展开头等),取值是宿主 app\n 全局基底色,与弹窗面板底不同层 ⇒ 会话区内改指向弹窗面板底(背景保留、颜色贴合)。 */\n.dshpc-sv-frame.dshpc-sv-frame{--dsw-alias-bg-base:var(--dshpc-surface-1);}\n\n.dshpc-sv-scroll.dshpc-sv-scroll{padding:0;overflow:visible;height:auto;max-height:none;flex:none;}\n\n/* 会话区保底:高度由内容决定(撑开由 Modal body 滚)。 */\n.dshpc-sv-chat{flex:none;min-height:0;}\n\n\n.dshpc-sv-assistant{align-self:stretch;font-size:var(--dshpc-font-lg);line-height:1.7;word-break:break-word;}\n\n.dshpc-sv-image{align-self:flex-start;font-size:var(--dshpc-font-sm);color:var(--dshpc-fg-3);border:1px dashed var(--dshpc-border);border-radius:var(--dshpc-radius-sm);padding:4px 10px;}\n\n/* 工具卡根(SessionViewModal legacy 兜底渲染直接用;正常 keyed 路径一律挂官方 ToolRow 类)。 */\n.dshpc-sv-tool{flex-direction:column;display:flex;}\n\n.dshpc-sv-notice{align-self:center;font-size:var(--dshpc-font-sm);color:var(--dshpc-fg-3);padding:2px 8px;}\n\n\n.dshpc-sv-forkerr{margin:0;font-size:var(--dshpc-font-lg);line-height:var(--dshpc-line-lg);color:var(--dshpc-danger);word-break:break-word;}\n\n.dshpc-sv-forktext{margin:0;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);color:var(--dshpc-fg-2);}\n\n/* ── 暂存输入区(期4:打字 → 确定 → fork 带话跳官方视图)── */\n.dshpc-sv-composer{flex:1;display:flex;align-items:flex-end;gap:8px;flex-wrap:wrap;}\n\n.dshpc-sv-composer textarea{flex:1;min-width:0;resize:none;font:inherit;font-size:var(--dshpc-font-lg);line-height:var(--dshpc-line-lg);color:var(--dshpc-fg);background:var(--dshpc-surface-2);border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);padding:8px 12px;min-height:40px;max-height:120px;}\n\n.dshpc-sv-composer textarea:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:-1px;}\n\n.dshpc-sv-composer-hint{flex:none;font-size:var(--dshpc-font-xs);color:var(--dshpc-fg-3);padding-bottom:10px;white-space:nowrap;}";
4
+ //# sourceMappingURL=session-css.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-css.generated.js","sourceRoot":"","sources":["../../../src/adv/session/session-css.generated.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,qEAAqE;AACrE,MAAM,CAAC,MAAM,WAAW,GAAG,gjGAAgjG,CAAA"}
@@ -0,0 +1,3 @@
1
+ // 会话预览样式。类名固定 dshpc-ses-*。
2
+ export { SESSION_CSS } from './session-css.generated.js';
3
+ //# sourceMappingURL=session-css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-css.js","sourceRoot":"","sources":["../../../src/adv/session/session-css.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA"}
@@ -0,0 +1,29 @@
1
+ /** 滚动容器的一次几何读数(组件侧从 `.dshpc-modal__body` 读取)。 */
2
+ export interface TailMetrics {
3
+ scrollTop: number;
4
+ scrollHeight: number;
5
+ clientHeight: number;
6
+ }
7
+ /** 与宿主 DOM 的唯一接口:读一次几何、写一次 scrollTop、调度 / 取消一帧。 */
8
+ export interface TailHost {
9
+ metrics(): TailMetrics;
10
+ setScrollTop(top: number): void;
11
+ frame(fn: () => void): number;
12
+ cancelFrame(id: number): void;
13
+ }
14
+ export interface TailFollower {
15
+ /** 首次打开:立即到底(instant,不做动画)。 */
16
+ open(): void;
17
+ /** 宿主快照内容版本变化 —— 唯一允许启动追尾的事件。 */
18
+ content(): void;
19
+ /** scroll 事件:只更新「用户是否想跟」的意图,不产生任何滚动。 */
20
+ scrolled(): void;
21
+ /** 卸载:停动画、断引用。 */
22
+ dispose(): void;
23
+ }
24
+ /** 判定「当时就在底部」的容差(px)。 */
25
+ export declare const TAIL_NEAR_BOTTOM_PX = 24;
26
+ /** 内容版本窗口内,连续多少帧「已到底且高度不变」才认为这批内容渲染完。 */
27
+ export declare const TAIL_STABLE_FRAMES = 3;
28
+ export declare function createTailFollower(host: TailHost): TailFollower;
29
+ //# sourceMappingURL=tail-follow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tail-follow.d.ts","sourceRoot":"","sources":["../../../src/adv/session/tail-follow.ts"],"names":[],"mappings":"AAcA,iDAAiD;AACjD,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,mDAAmD;AACnD,MAAM,WAAW,QAAQ;IACvB,OAAO,IAAI,WAAW,CAAA;IACtB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,KAAK,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,IAAI,IAAI,IAAI,CAAA;IACZ,iCAAiC;IACjC,OAAO,IAAI,IAAI,CAAA;IACf,wCAAwC;IACxC,QAAQ,IAAI,IAAI,CAAA;IAChB,kBAAkB;IAClB,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,yBAAyB;AACzB,eAAO,MAAM,mBAAmB,KAAK,CAAA;AACrC,yCAAyC;AACzC,eAAO,MAAM,kBAAkB,IAAI,CAAA;AAEnC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,YAAY,CA0E/D"}
@@ -0,0 +1,106 @@
1
+ // 会话区自动贴底:纯状态机(零 DOM / 零 React / 零宿主)。
2
+ //
3
+ // 口径(docs/requirements.md §2.5,用户 2026-11-04 二次拍板):只有两种情况允许把视图拉到底 ——
4
+ // ① 首次打开(open);② 宿主快照有新内容且当时就在底部(content)。
5
+ // 本地展开 / 折叠(思考行、工具卡、历史分组)只改 DOM 高度,**不是新内容**,不许把视图拽走。
6
+ //
7
+ // 历次复发的根因:早先由 ResizeObserver 的「高度变了」反推原因,但高度变化的原因无从分辨
8
+ // (展开、异步渲染、新内容都会改高度),而 contentBumpRef 只在「高度稳定」那次 RO 回调里清,
9
+ // RO 稳定后根本不再回调 ⇒ 窗口永久敞开,任何一次展开都被当成新内容。
10
+ // 这里把原因**显式化**:贴底只由调用方在宿主快照版本变化时调用 content() 触发;
11
+ // 窗口由事件打开、由「连续 N 帧已到底且高度不变」关闭,绝不用 DOM 高度反推原因。
12
+ // scroll 事件只更新用户意图,绝不启动追尾(程序自己往下滚也发 scroll,在这里追尾就是自激)。
13
+ // 流式「边渲染边长」由连续到达的快照事件不断续上同一条 rAF:step 每帧以最新 scrollHeight 为目标。
14
+ /** 判定「当时就在底部」的容差(px)。 */
15
+ export const TAIL_NEAR_BOTTOM_PX = 24;
16
+ /** 内容版本窗口内,连续多少帧「已到底且高度不变」才认为这批内容渲染完。 */
17
+ export const TAIL_STABLE_FRAMES = 3;
18
+ export function createTailFollower(host) {
19
+ let following = true;
20
+ let lastTop = host.metrics().scrollTop;
21
+ let lastHeight = host.metrics().scrollHeight;
22
+ let stableFrames = 0;
23
+ let windowOpen = false;
24
+ let animating = false;
25
+ let raf = 0;
26
+ let disposed = false;
27
+ const targetOf = () => {
28
+ const m = host.metrics();
29
+ return Math.max(0, m.scrollHeight - m.clientHeight);
30
+ };
31
+ const nearBottom = () => {
32
+ const m = host.metrics();
33
+ return m.scrollHeight - m.scrollTop - m.clientHeight <= TAIL_NEAR_BOTTOM_PX;
34
+ };
35
+ const stop = () => {
36
+ if (animating)
37
+ host.cancelFrame(raf);
38
+ animating = false;
39
+ windowOpen = false;
40
+ stableFrames = 0;
41
+ };
42
+ const step = () => {
43
+ if (disposed || !following || !windowOpen) {
44
+ stop();
45
+ return;
46
+ }
47
+ const m = host.metrics();
48
+ const target = Math.max(0, m.scrollHeight - m.clientHeight);
49
+ const delta = target - m.scrollTop;
50
+ // 指数缓出:每帧以**最新** scrollHeight 为目标,内容边渲染边长也不会停在半路。
51
+ if (delta > 1)
52
+ host.setScrollTop(m.scrollTop + Math.max(1, delta * 0.28));
53
+ else
54
+ host.setScrollTop(target);
55
+ stableFrames = m.scrollHeight === lastHeight && delta <= 1 ? stableFrames + 1 : 0;
56
+ lastHeight = m.scrollHeight;
57
+ if (stableFrames >= TAIL_STABLE_FRAMES) {
58
+ stop();
59
+ return;
60
+ }
61
+ raf = host.frame(step);
62
+ };
63
+ return {
64
+ open() {
65
+ if (disposed)
66
+ return;
67
+ host.setScrollTop(targetOf());
68
+ // 记**写入后的实际读数**:浏览器会把 scrollTop 钳到真实可滚上限,理论值差 1px
69
+ // 就会让随后到达的 scroll 事件被误判成「用户往上滚」,首屏后直接失跟。
70
+ lastTop = host.metrics().scrollTop;
71
+ lastHeight = host.metrics().scrollHeight;
72
+ },
73
+ content() {
74
+ // 用户已经往上滚过 ⇒ 这次新内容也不许把视图拽走。
75
+ if (disposed || !following)
76
+ return;
77
+ windowOpen = true;
78
+ stableFrames = 0;
79
+ lastHeight = host.metrics().scrollHeight;
80
+ if (animating)
81
+ return; // 已在追尾,只续窗口,不重启动画
82
+ animating = true;
83
+ raf = host.frame(step);
84
+ },
85
+ scrolled() {
86
+ if (disposed)
87
+ return;
88
+ const top = host.metrics().scrollTop;
89
+ // 程序只往下滚 ⇒ 「往上滚」是可靠的用户意图判据;手动滚回底部恢复跟随。
90
+ if (top < lastTop - 1) {
91
+ following = false;
92
+ stop();
93
+ }
94
+ else if (nearBottom())
95
+ following = true;
96
+ lastTop = top;
97
+ },
98
+ dispose() {
99
+ if (disposed)
100
+ return;
101
+ disposed = true;
102
+ stop();
103
+ },
104
+ };
105
+ }
106
+ //# sourceMappingURL=tail-follow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tail-follow.js","sourceRoot":"","sources":["../../../src/adv/session/tail-follow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import { createElement as h, type CSSProperties, type MouseEvent, type ReactNode } from 'react';
2
+ /** 按钮外观档。 */
3
+ export type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger' | 'success' | 'warning' | 'info' | 'danger-outline' | 'link' | 'purple' | 'pink' | 'cyan' | 'teal' | 'orange' | 'indigo' | 'rose' | 'slate';
4
+ /** 按钮高度档(sm 24 / md 28 / lg 32)。 */
5
+ export type ButtonSize = 'sm' | 'md' | 'lg';
6
+ export interface ButtonProps {
7
+ /** 外观档(默认 outline)。 */
8
+ variant?: ButtonVariant;
9
+ /** 高度档(默认 lg)。 */
10
+ size?: ButtonSize;
11
+ /** 前置图标(可选;字符串 / 官方图标组件都可以)。 */
12
+ icon?: ReactNode;
13
+ /** 后置图标(可选;如「展开 / 外链」箭头)。 */
14
+ iconRight?: ReactNode;
15
+ /**
16
+ * 自定义主色(任意 CSS 色值,如 `#7c3aed` / `var(--dshpc-business)`)。
17
+ * 实心档作底色、描边与文字档作主色;hover / active 由基础层按该色混出。
18
+ */
19
+ color?: string;
20
+ /** 加载中:文案前显示同色小圈,并自动禁用点击。与「点击自动 loading」是或关系,任一为真就转圈。 */
21
+ loading?: boolean;
22
+ /**
23
+ * loading 时是否保留文案(默认 true)。
24
+ * 传 `false`:loading 期间**清掉文案**、把按钮锁在「有文案时」的宽度上,只剩一枚居中的圈,
25
+ * settle 后文案与自适应宽度一起回来 —— 用于文案长、不想让按钮被圈撑宽的场景。
26
+ *
27
+ * 两条前提:① 文案被清掉后读屏只剩「按钮」,`children` 不是字符串时请自己传 `aria-label`;
28
+ * ② 首帧就是 loading(没有「有文案的宽度」可量)时不锁宽,请改用 `width` 定宽。
29
+ */
30
+ loadingText?: boolean;
31
+ /**
32
+ * 点击回调。**返回 Promise 即自动进入 loading**(转圈 + 禁用 + 防连点),settle 后自己恢复;
33
+ * reject 会恢复并把错误打到控制台。同步返回值 = 老行为,不转圈。
34
+ */
35
+ onClick?: (event: MouseEvent<HTMLButtonElement>) => unknown;
36
+ /**
37
+ * 把「这个按钮正在跑」报出去(如锁死所在弹窗的遮罩 / Esc / ✕)。
38
+ * 不改变按钮自己的行为;与 `loading` 无关。
39
+ */
40
+ onBusyChange?: (busy: boolean) => void;
41
+ /** 撑满父宽。 */
42
+ block?: boolean;
43
+ /**
44
+ * 固定宽(px 或任意 CSS 宽度值)。与 `minWidth` / `maxWidth` 互斥:一旦设定,后两者自动失效。
45
+ */
46
+ width?: number | string;
47
+ /** 最小宽:`width` 未设时生效,内容不足此宽时以它为准。 */
48
+ minWidth?: number | string;
49
+ /**
50
+ * 最大宽:`width` 未设时生效,文字超出时折叠成省略号,hover 以跑马灯展开全名。
51
+ */
52
+ maxWidth?: number | string;
53
+ /** 追加 class(只允许补布局、或挂本文件声明的修饰类,不许覆盖皮肤)。 */
54
+ className?: string;
55
+ /** 追加样式(只允许补布局,不许覆盖皮肤)。 */
56
+ style?: CSSProperties;
57
+ /** 文案 / 内容。 */
58
+ children?: ReactNode;
59
+ /** 其余原生 button 属性(type / disabled / title / aria-* / onClick …)原样透传。 */
60
+ [key: string]: unknown;
61
+ }
62
+ export interface IconButtonProps {
63
+ /** 外观档(默认 plain:无底色、无边框)。 */
64
+ variant?: 'plain' | 'outline' | 'danger';
65
+ /** 高度档(默认 lg)。 */
66
+ size?: ButtonSize;
67
+ /** 图标(必填)。 */
68
+ icon: ReactNode;
69
+ /** 无障碍名(必填;同时作为默认 title)。 */
70
+ label: string;
71
+ /** 图标色(任意 CSS 色值);hover 按它混出浅底。 */
72
+ color?: string;
73
+ /** 底色(任意 CSS 色值);不传 = 无底色。hover 按它压深。 */
74
+ background?: string;
75
+ /** 加载中:图标位换成小圈并禁用(纯图标钮没有文字,圈就是它的全部内容)。与「点击自动 loading」取或。 */
76
+ loading?: boolean;
77
+ /** 点击回调;**返回 Promise 自动 loading**,settle 后恢复。 */
78
+ onClick?: (event: MouseEvent<HTMLButtonElement>) => unknown;
79
+ /** 把「这个按钮正在跑」报出去(如锁死所在弹窗)。 */
80
+ onBusyChange?: (busy: boolean) => void;
81
+ /** 追加 class。 */
82
+ className?: string;
83
+ /** 追加样式。 */
84
+ style?: CSSProperties;
85
+ /** 其余原生 button 属性原样透传。 */
86
+ [key: string]: unknown;
87
+ }
88
+ /**
89
+ * 渲染一个「图标 + 文案」按钮。
90
+ *
91
+ * @param props 见 {@link ButtonProps}。
92
+ * @returns 按钮元素。
93
+ */
94
+ export declare function Button(props: ButtonProps): ReturnType<typeof h>;
95
+ /**
96
+ * 渲染一个纯图标按钮。
97
+ *
98
+ * @param props 见 {@link IconButtonProps}。
99
+ * @returns 图标按钮元素。
100
+ */
101
+ export declare function IconButton(props: IconButtonProps): ReturnType<typeof h>;
102
+ //# sourceMappingURL=Button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/ui/actions/Button.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * 按钮 / 图标钮 —— **全站唯一实现**(L2 组件皮肤,P2)
3
+ *
4
+ * 三轴模型:
5
+ * - `variant`:外观档(形态 + 语义色),共 18 档
6
+ * primary(黑实心)/ secondary(灰实心)/ outline(描边)/ ghost(无底无边)
7
+ * danger(红实心)/ success(绿实心)/ warning(黄实心)/ info(蓝实心)
8
+ * danger-outline(红字描边)/ link(行内链接)
9
+ * purple / pink / cyan / teal / orange / indigo / rose / slate(扩展八色实心,2026-10-29)
10
+ * - `size`:`sm`(24) / `md`(28) / `lg`(32) —— 高度一律吃 `--dshpc-control-h-*`,
11
+ * **有边 / 无边同高**(边框在内部补回)
12
+ * - `block`:撑满父宽
13
+ *
14
+ * 内容轴:`icon`(前置)/ `iconRight`(后置)/ `loading`(前置小圈并自动禁用)。
15
+ * 颜色轴:任一档都可以再用 `color` 传任意 CSS 色值 —— 只覆盖 `--btn-*` 几个变量,
16
+ * 不新增皮肤(皮肤仍只在 `controls-css.ts` 里)。
17
+ *
18
+ * `IconButton` 是纯图标钮:`plain`(默认无底无边,hover 起灰底)/ `outline`(描边)/ `danger`(红)。
19
+ * 兼容别名:`danger-ink` 仍是 `danger-outline` 的旧类名,可直接挂 className。
20
+ *
21
+ * ⚠️ 不许在任何使用点就地写按钮样式;要多一档外观 ⇒ 改基础层(一处改全站生效)。
22
+ */
23
+ import { MarqueeText } from '../display/MarqueeText.js';
24
+ import { Loader } from '../feedback/Loader.js';
25
+ import { createElement as h, useEffect, useLayoutEffect, useRef, useState, } from 'react';
26
+ import { ensureComponentStyles } from '../infra/css.js';
27
+ import { useOverlayLocked } from '../infra/overlay.js';
28
+ import { BUTTON_CSS } from '../infra/controls-css.js';
29
+ import { isThenable } from '../infra/thenable.js';
30
+ /**
31
+ * 有 DOM 时用 layout effect(绘制前锁宽,用户看不到中间态),SSR 退化成 useEffect(服务端本就不跑)。
32
+ * 直接用 `useLayoutEffect` 会在服务端渲染时告警。
33
+ */
34
+ const useIsoLayoutEffect = typeof document === 'undefined' ? useEffect : useLayoutEffect;
35
+ /** 实心档(color 参数按「底色」处理;其余档按「字色 + 描边色」处理)。 */
36
+ const SOLID_VARIANTS = [
37
+ 'primary', 'secondary', 'danger', 'success', 'warning', 'info',
38
+ 'purple', 'pink', 'cyan', 'teal', 'orange', 'indigo', 'rose', 'slate',
39
+ ];
40
+ /** 把自定义颜色翻译成 5 个局部变量(只覆盖 token,不新增皮肤)。 */
41
+ function colorVars(variant, color) {
42
+ if (color === undefined || color === '')
43
+ return undefined;
44
+ if (SOLID_VARIANTS.includes(variant)) {
45
+ return {
46
+ '--btn-bg': color,
47
+ // 亮色主题下 --dshpc-fg 是黑 ⇒ 压深;暗色下是白 ⇒ 提亮。两边都能明确看出变化。
48
+ '--btn-bg-hover': `color-mix(in srgb, ${color} 82%, var(--dshpc-fg))`,
49
+ '--btn-bg-active': `color-mix(in srgb, ${color} 70%, var(--dshpc-fg))`,
50
+ };
51
+ }
52
+ return {
53
+ '--btn-fg': color,
54
+ '--btn-fg-hover': color,
55
+ '--btn-border': color,
56
+ '--btn-bg-hover': `color-mix(in srgb, ${color} 12%, transparent)`,
57
+ '--btn-bg-active': `color-mix(in srgb, ${color} 18%, transparent)`,
58
+ };
59
+ }
60
+ /** 组装按钮 class(结构一套 + 轴类)。 */
61
+ function buttonClass(variant, size, block, hasIcon, extra) {
62
+ return `dshpc-btn dshpc-btn--${variant} dshpc-btn--${size}`
63
+ + `${block ? ' dshpc-btn--block' : ''}`
64
+ // 前置图标标记:block 时靠它把文字拉回视觉中心(见 controls-css 的 --icon-start 规则)
65
+ + `${hasIcon ? ' dshpc-btn--icon-start' : ''}`
66
+ + `${extra !== undefined && extra !== '' ? ` ${extra}` : ''}`;
67
+ }
68
+ /**
69
+ * 异步点击:`onClick` 返回 thenable 就自己转圈(并禁用),settle 后恢复。
70
+ * 不用 `onBusyChange` 也能单独工作 —— 它只是把状态报给外面(弹窗锁关闭用)。
71
+ * `onBusyStart` 在 setBusy 之前跑:那时按钮还是「有文案」的样子,要量宽度只能抓这一刻。
72
+ */
73
+ function useAsyncClick(onClick, onBusyChange, onBusyStart) {
74
+ const [busy, setBusy] = useState(false);
75
+ const click = (event) => {
76
+ if (onClick === undefined)
77
+ return;
78
+ const out = onClick(event);
79
+ if (!isThenable(out))
80
+ return;
81
+ onBusyStart?.(event.currentTarget);
82
+ setBusy(true);
83
+ onBusyChange?.(true);
84
+ const done = () => {
85
+ setBusy(false);
86
+ onBusyChange?.(false);
87
+ };
88
+ void out.then(done, (err) => {
89
+ // 状态先恢复,再让失败可见(不吞:消费方该看到自己抛了什么)
90
+ done();
91
+ console.error('[dsh-plugin-core] Button 异步点击失败,已恢复可点:', err);
92
+ });
93
+ };
94
+ return { busy, click };
95
+ }
96
+ /**
97
+ * 渲染一个「图标 + 文案」按钮。
98
+ *
99
+ * @param props 见 {@link ButtonProps}。
100
+ * @returns 按钮元素。
101
+ */
102
+ export function Button(props) {
103
+ ensureComponentStyles('button', BUTTON_CSS);
104
+ const { variant = 'outline', size = 'lg', icon, iconRight, color, loading: loadingProp = false, loadingText = true, block = false, width, minWidth, maxWidth, className, style, children, onClick, onBusyChange, ...rest } = props;
105
+ const btnRef = useRef(null);
106
+ // 「有文案时的宽度」:只在非 loading 的布局里记,loading 时用它锁宽。
107
+ const idleWidth = useRef(null);
108
+ const [lockWidth, setLockWidth] = useState(null);
109
+ // 调用方自己定了宽(width 参数或 style.width)⇒ 不测量、不锁,照他的来。
110
+ const hasOwnWidth = width !== undefined || (style !== undefined && style.width !== undefined);
111
+ const lockable = !loadingText && !hasOwnWidth && !block;
112
+ const asyncClick = useAsyncClick(onClick, onBusyChange, (el) => {
113
+ if (!lockable)
114
+ return;
115
+ // 点击这一刻 DOM 还是「有文案」的样子,量到的是要锁的那个宽度。
116
+ const w = el.getBoundingClientRect().width;
117
+ if (w > 0) {
118
+ idleWidth.current = w;
119
+ setLockWidth(w);
120
+ }
121
+ });
122
+ // 两个来源取或:外部传的 loading(别处刷新也能点亮它)+ 自己异步在跑
123
+ const loading = loadingProp || asyncClick.busy;
124
+ // 外层浮层锁死:按自己的禁用态渲染,只做「或」—— 不写回调用方的 disabled,解锁即还原。
125
+ const locked = useOverlayLocked();
126
+ // 外部驱动的 loading 没有点击可抓:进 loading 那一次用上次记下的宽度补锁(绘制前重渲染,不见中间态)。
127
+ useIsoLayoutEffect(() => {
128
+ const el = btnRef.current;
129
+ if (el === null)
130
+ return;
131
+ if (!loading) {
132
+ const w = el.getBoundingClientRect().width;
133
+ if (w > 0)
134
+ idleWidth.current = w;
135
+ if (lockWidth !== null)
136
+ setLockWidth(null);
137
+ return;
138
+ }
139
+ if (!lockable) {
140
+ if (lockWidth !== null)
141
+ setLockWidth(null);
142
+ return;
143
+ }
144
+ if (lockWidth === null && idleWidth.current !== null)
145
+ setLockWidth(idleWidth.current);
146
+ }, [loading, lockable, lockWidth]);
147
+ // 三轴互斥:固定宽优先,min / max 失效;否则 min / max 各自生效。
148
+ const widthStyle = {};
149
+ if (width !== undefined) {
150
+ widthStyle.width = width;
151
+ }
152
+ else if (loading && lockWidth !== null) {
153
+ // 锁宽只在 loading 期间生效:结束时这一帧就回到自适应,不留额外一拍。
154
+ widthStyle.width = lockWidth;
155
+ }
156
+ else {
157
+ if (minWidth !== undefined)
158
+ widthStyle.minWidth = minWidth;
159
+ if (maxWidth !== undefined)
160
+ widthStyle.maxWidth = maxWidth;
161
+ }
162
+ // loading 且不保留文案 ⇒ 文字整块不渲染,按钮只剩一枚居中的圈。
163
+ const hideText = loading && !loadingText;
164
+ // 最大宽 + 纯文字标签 ⇒ 折叠省略号、hover 跑马灯(复用全站唯一 MarqueeText)。
165
+ const marqueeLabel = !hideText && maxWidth !== undefined && width === undefined && typeof children === 'string';
166
+ // 文案没了,读屏名称得留住:字符串 children 自动补;复合 children 由调用方传 aria-label。
167
+ const autoLabel = hideText && typeof children === 'string' ? children : undefined;
168
+ const attrs = {
169
+ ...rest,
170
+ ref: btnRef,
171
+ type: rest.type ?? 'button',
172
+ disabled: rest.disabled === true || loading || locked,
173
+ // 与 IconButton 同一口径:文字还在,但让读屏知道它正在忙、不是单纯不可点
174
+ 'aria-busy': loading || undefined,
175
+ ...(autoLabel !== undefined && rest['aria-label'] === undefined ? { 'aria-label': autoLabel } : {}),
176
+ onClick: asyncClick.click,
177
+ className: buttonClass(variant, size, block, icon !== undefined && icon !== null && !loading, className),
178
+ style: { ...colorVars(variant, color), ...widthStyle, ...style },
179
+ };
180
+ return h('button', attrs, loading
181
+ // 转圈统一走 Loader:包在图标容器里 ⇒ 尺寸/对齐与常规前置图标完全一致,
182
+ // 「有 icon 的按钮」切 loading 时宽度一点不动(容器内 svg 被 1em 规则接管)。
183
+ ? h('span', { className: 'dshpc-btn__icon' }, h(Loader, { size: 'xs' }))
184
+ : icon !== undefined && icon !== null
185
+ ? h('span', { className: 'dshpc-btn__icon' }, icon)
186
+ : null, hideText
187
+ ? null
188
+ : marqueeLabel
189
+ ? h(MarqueeText, { text: children, className: 'dshpc-btn__label' })
190
+ : children,
191
+ // 转圈期间所有图标位都让位:前置位被 Loader 顶替,后置位(展开 / 外链)留在禁用态里只会挤版面
192
+ iconRight !== undefined && iconRight !== null && !loading
193
+ ? h('span', { className: 'dshpc-btn__icon-end' }, iconRight)
194
+ : null);
195
+ }
196
+ /**
197
+ * 渲染一个纯图标按钮。
198
+ *
199
+ * @param props 见 {@link IconButtonProps}。
200
+ * @returns 图标按钮元素。
201
+ */
202
+ export function IconButton(props) {
203
+ ensureComponentStyles('button', BUTTON_CSS);
204
+ const { variant = 'plain', size = 'lg', icon, label, color, background, loading: loadingProp = false, className, style, onClick, onBusyChange, ...rest } = props;
205
+ const asyncClick = useAsyncClick(onClick, onBusyChange);
206
+ const loading = loadingProp || asyncClick.busy;
207
+ const locked = useOverlayLocked();
208
+ // 只覆盖 4 个局部变量:图标色 / 底色及其 hover 派生(不新增皮肤,皮肤仍在 controls-css.ts)。
209
+ const accent = {};
210
+ if (color !== undefined && color !== '') {
211
+ accent['--icb-fg'] = color;
212
+ accent['--icb-fg-hover'] = color;
213
+ accent['--icb-bg-hover'] = `color-mix(in srgb, ${color} 14%, transparent)`;
214
+ }
215
+ if (background !== undefined && background !== '') {
216
+ accent['--icb-bg'] = background;
217
+ accent['--icb-bg-hover'] = `color-mix(in srgb, ${background} 85%, var(--dshpc-fg))`;
218
+ }
219
+ const attrs = {
220
+ ...rest,
221
+ type: rest.type ?? 'button',
222
+ title: rest.title ?? label,
223
+ 'aria-label': rest['aria-label'] ?? label,
224
+ // 无障碍名不变(仍是 label),只声明「正在忙」,读屏不会把圈读成内容
225
+ 'aria-busy': loading || undefined,
226
+ disabled: rest.disabled === true || loading || locked,
227
+ onClick: asyncClick.click,
228
+ className: `dshpc-iconbtn dshpc-iconbtn--${variant} dshpc-iconbtn--${size}${className !== undefined && className !== '' ? ` ${className}` : ''}`,
229
+ style: { ...accent, ...style },
230
+ };
231
+ return h('button', attrs, loading ? h(Loader, { size: 'xs' }) : icon);
232
+ }
233
+ //# sourceMappingURL=Button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/ui/actions/Button.ts"],"names":[],"mappings":"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"}
@@ -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/* \u56FE\u6807\u6BD4\u540C\u6863\u6587\u5B57\u5C0F\u4E00\u53F7\uFF08\u7528\u6237 2026-11-02\uFF09\uFF1A\u5BB9\u5668\u5403\u6389 0.875em\uFF0C\u5185\u8054 SVG \u4E00\u5F8B\u8DDF\u968F 1em\uFF0C\n \u4E0D\u518D\u7531\u8C03\u7528\u65B9\u7684 size={16} \u8BF4\u4E86\u7B97 \u2014\u2014 \u5168\u7AD9\u6309\u94AE\u56FE\u6807\u5C3A\u5BF8\u53EA\u7531\u8FD9\u4E00\u5904\u51B3\u5B9A\u3002 */\n.dshpc-btn__icon,.dshpc-btn__icon-end{display:inline-flex;align-items:center;justify-content:center;flex:none;line-height:0;font-size:.875em;}\n.dshpc-btn__icon svg,.dshpc-btn__icon-end svg{display:block;margin:0;width:1em;height:1em;}\n/* maxWidth \u5305 MarqueeText \u65F6\uFF1A\u6807\u7B7E\u4F5C\u4E3A flex \u5B50\u9879\u5FC5\u987B\u80FD\u6536\u7F29\u5230\u5185\u5BB9\u4EE5\u4E0B\uFF0C\u5426\u5219\u7701\u7565\u53F7 / \u8DD1\u9A6C\u706F\u6D4B\u4E0D\u51C6 */\n.dshpc-btn .dshpc-btn__label{min-width:0;}\n/* loading\uFF1A\u4E0D\u6362 DOM \u7ED3\u6784\uFF0C\u53EA\u5728\u6587\u6848\u524D\u63D2\u4E00\u679A Loader\uFF08size=xs\uFF0C12px\uFF09\u3002\n \u73AF\u7684\u753B\u6CD5\u4E0E\u52A8\u753B\u7EDF\u4E00\u5728 controls/loader.css\uFF08\u672C\u6587\u4EF6\u4E0D\u518D\u7EF4\u62A4\u7B2C\u4E8C\u4EFD SVG \u5F27 / keyframes\uFF09\u3002 */\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/* \u6269\u5C55\u516B\u8272\u5B9E\u5FC3\uFF082026-10-29\uFF09\uFF1A\u767D\u5B57\u4E24\u4E3B\u9898\u5747 \u22654.5:1\uFF1Bhover/active \u8D70\u5404\u81EA token \u6D3E\u751F\u3002 */\n.dshpc-btn--purple{--btn-bg:var(--dshpc-purple);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-purple-hover);--btn-bg-active:var(--dshpc-purple-active);}\n.dshpc-btn--pink{--btn-bg:var(--dshpc-pink);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-pink-hover);--btn-bg-active:var(--dshpc-pink-active);}\n.dshpc-btn--cyan{--btn-bg:var(--dshpc-cyan);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-cyan-hover);--btn-bg-active:var(--dshpc-cyan-active);}\n.dshpc-btn--teal{--btn-bg:var(--dshpc-teal);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-teal-hover);--btn-bg-active:var(--dshpc-teal-active);}\n.dshpc-btn--orange{--btn-bg:var(--dshpc-orange);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-orange-hover);--btn-bg-active:var(--dshpc-orange-active);}\n.dshpc-btn--indigo{--btn-bg:var(--dshpc-indigo);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-indigo-hover);--btn-bg-active:var(--dshpc-indigo-active);}\n.dshpc-btn--rose{--btn-bg:var(--dshpc-rose);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-rose-hover);--btn-bg-active:var(--dshpc-rose-active);}\n.dshpc-btn--slate{--btn-bg:var(--dshpc-slate);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-slate-hover);--btn-bg-active:var(--dshpc-slate-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\u3001\u5706\u89D2\u7EDF\u4E00\u5403 md\uFF08\u4E0E .dshpc-btn \u540C\u6B3E\uFF0C2026-10-28 \u62CD\u677F\uFF09\n \u5E95\u8272 / \u56FE\u6807\u8272\u5168\u8D70\u5C40\u90E8\u53D8\u91CF\uFF1A\u9ED8\u8BA4**\u65E0\u5E95\u8272**\uFF0C\u6D88\u8D39\u65B9\u53EF\u4F20 color\uFF08\u56FE\u6807\u8272\uFF09/ background\uFF08\u5E95\u8272\uFF09\u8986\u76D6\uFF08\u7528\u6237 2026-11-02\uFF09\u3002 */\n.dshpc-iconbtn{--icb-bg:transparent;--icb-bg-hover:var(--dshpc-hover);--icb-fg:var(--dshpc-fg-2);--icb-fg-hover:var(--dshpc-fg);\n appearance:none;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;\n border:1px solid var(--icb-border,transparent);border-radius:var(--dshpc-radius-md);\n background:var(--icb-bg);color:var(--icb-fg);\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/* \u56FE\u6807\u4E0E\u6587\u5B57\u6309\u94AE\u540C\u53E3\u5F84\uFF1A\u5185\u8054 SVG \u4E00\u5F8B\u8DDF\u968F 1em\uFF08\u6BD4 16px \u6863\u5C0F\u4E00\u53F7\uFF09 */\n.dshpc-iconbtn > svg{display:block;width:1em;height:1em;}\n.dshpc-iconbtn--outline{--icb-bg:var(--dshpc-surface-1);--icb-border:var(--dshpc-border);}\n.dshpc-iconbtn--danger{--icb-fg:var(--dshpc-danger);--icb-bg-hover:var(--dshpc-danger-soft);--icb-fg-hover:var(--dshpc-danger);}\n.dshpc-iconbtn:hover:not(:disabled){background:var(--icb-bg-hover);color:var(--icb-fg-hover);}\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/actions/button-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,0idAAmkT,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ⚠️ 生成物,勿手改。真源 = src/ui/actions/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/* 图标比同档文字小一号(用户 2026-11-02):容器吃掉 0.875em,内联 SVG 一律跟随 1em,\n 不再由调用方的 size={16} 说了算 —— 全站按钮图标尺寸只由这一处决定。 */\n.dshpc-btn__icon,.dshpc-btn__icon-end{display:inline-flex;align-items:center;justify-content:center;flex:none;line-height:0;font-size:.875em;}\n.dshpc-btn__icon svg,.dshpc-btn__icon-end svg{display:block;margin:0;width:1em;height:1em;}\n/* maxWidth 包 MarqueeText 时:标签作为 flex 子项必须能收缩到内容以下,否则省略号 / 跑马灯测不准 */\n.dshpc-btn .dshpc-btn__label{min-width:0;}\n/* loading:不换 DOM 结构,只在文案前插一枚 Loader(size=xs,12px)。\n 环的画法与动画统一在 controls/loader.css(本文件不再维护第二份 SVG 弧 / keyframes)。 */\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/* 扩展八色实心(2026-10-29):白字两主题均 ≥4.5:1;hover/active 走各自 token 派生。 */\n.dshpc-btn--purple{--btn-bg:var(--dshpc-purple);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-purple-hover);--btn-bg-active:var(--dshpc-purple-active);}\n.dshpc-btn--pink{--btn-bg:var(--dshpc-pink);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-pink-hover);--btn-bg-active:var(--dshpc-pink-active);}\n.dshpc-btn--cyan{--btn-bg:var(--dshpc-cyan);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-cyan-hover);--btn-bg-active:var(--dshpc-cyan-active);}\n.dshpc-btn--teal{--btn-bg:var(--dshpc-teal);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-teal-hover);--btn-bg-active:var(--dshpc-teal-active);}\n.dshpc-btn--orange{--btn-bg:var(--dshpc-orange);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-orange-hover);--btn-bg-active:var(--dshpc-orange-active);}\n.dshpc-btn--indigo{--btn-bg:var(--dshpc-indigo);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-indigo-hover);--btn-bg-active:var(--dshpc-indigo-active);}\n.dshpc-btn--rose{--btn-bg:var(--dshpc-rose);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-rose-hover);--btn-bg-active:var(--dshpc-rose-active);}\n.dshpc-btn--slate{--btn-bg:var(--dshpc-slate);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-slate-hover);--btn-bg-active:var(--dshpc-slate-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/* 图标钮:纯图标,方形;尺寸档的宽高与同档文字按钮等高、圆角统一吃 md(与 .dshpc-btn 同款,2026-10-28 拍板)\n 底色 / 图标色全走局部变量:默认**无底色**,消费方可传 color(图标色)/ background(底色)覆盖(用户 2026-11-02)。 */\n.dshpc-iconbtn{--icb-bg:transparent;--icb-bg-hover:var(--dshpc-hover);--icb-fg:var(--dshpc-fg-2);--icb-fg-hover:var(--dshpc-fg);\n appearance:none;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;\n border:1px solid var(--icb-border,transparent);border-radius:var(--dshpc-radius-md);\n background:var(--icb-bg);color:var(--icb-fg);\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/* 图标与文字按钮同口径:内联 SVG 一律跟随 1em(比 16px 档小一号) */\n.dshpc-iconbtn > svg{display:block;width:1em;height:1em;}\n.dshpc-iconbtn--outline{--icb-bg:var(--dshpc-surface-1);--icb-border:var(--dshpc-border);}\n.dshpc-iconbtn--danger{--icb-fg:var(--dshpc-danger);--icb-bg-hover:var(--dshpc-danger-soft);--icb-fg-hover:var(--dshpc-danger);}\n.dshpc-iconbtn:hover:not(:disabled){background:var(--icb-bg-hover);color:var(--icb-fg-hover);}\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