weifuwu 0.86.0 → 0.87.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 (651) hide show
  1. package/README.md +56 -45
  2. package/content/apps/admin.md +55 -0
  3. package/content/apps/agent-platform.md +35 -0
  4. package/content/apps/auth.md +49 -0
  5. package/content/apps/multi.md +44 -0
  6. package/content/apps/todo.md +51 -0
  7. package/content/backend/ai.md +28 -0
  8. package/content/backend/auth.md +20 -0
  9. package/content/backend/email.md +23 -0
  10. package/content/backend/graphql.md +23 -0
  11. package/content/backend/http.md +23 -0
  12. package/content/backend/limit.md +23 -0
  13. package/content/backend/middleware.md +17 -0
  14. package/content/backend/queue.md +23 -0
  15. package/content/backend/redis.md +26 -0
  16. package/content/backend/router.md +23 -0
  17. package/content/backend/schedule.md +23 -0
  18. package/content/backend/sql.md +27 -0
  19. package/content/backend/sse.md +26 -0
  20. package/content/backend/ws.md +26 -0
  21. package/content/capabilities/app-node.md +21 -0
  22. package/content/capabilities/data.md +21 -0
  23. package/content/capabilities/events.md +21 -0
  24. package/content/capabilities/hooks.md +22 -0
  25. package/content/capabilities/i18n.md +21 -0
  26. package/content/capabilities/popup.md +21 -0
  27. package/content/capabilities/render-only.md +23 -0
  28. package/content/capabilities/router.md +22 -0
  29. package/content/capabilities/self-id.md +21 -0
  30. package/content/capabilities/store.md +21 -0
  31. package/content/capabilities/theme.md +21 -0
  32. package/content/capabilities/two-phase.md +21 -0
  33. package/content/components/accordion.md +50 -0
  34. package/content/components/actionsheet.md +46 -0
  35. package/content/components/affix.md +51 -0
  36. package/content/components/aichat.md +57 -0
  37. package/content/components/alert.md +52 -0
  38. package/content/components/alertgroup.md +45 -0
  39. package/content/components/anchor.md +52 -0
  40. package/content/components/app.md +37 -0
  41. package/content/components/approvalcard.md +56 -0
  42. package/content/components/appshell.md +50 -0
  43. package/content/components/aspectratio.md +47 -0
  44. package/content/components/authpage.md +61 -0
  45. package/content/components/autocomplete-v2.md +40 -0
  46. package/content/components/autocomplete.md +56 -0
  47. package/content/components/avatar.md +51 -0
  48. package/content/components/avatargroup.md +47 -0
  49. package/content/components/backtop.md +53 -0
  50. package/content/components/badge.md +55 -0
  51. package/content/components/breadcrumb.md +49 -0
  52. package/content/components/button.md +63 -0
  53. package/content/components/calendar-v2.md +40 -0
  54. package/content/components/calendar.md +50 -0
  55. package/content/components/card.md +58 -0
  56. package/content/components/carousel.md +52 -0
  57. package/content/components/cascader-v2.md +39 -0
  58. package/content/components/cascader.md +54 -0
  59. package/content/components/chart.md +53 -0
  60. package/content/components/chatinput.md +63 -0
  61. package/content/components/checkbox.md +51 -0
  62. package/content/components/checkboxgroup.md +52 -0
  63. package/content/components/citationcard.md +48 -0
  64. package/content/components/codeblock.md +48 -0
  65. package/content/components/codeeditor.md +47 -0
  66. package/content/components/collapse.md +49 -0
  67. package/content/components/colorpicker.md +50 -0
  68. package/content/components/command.md +50 -0
  69. package/content/components/confirm.md +57 -0
  70. package/content/components/contextmenu.md +48 -0
  71. package/content/components/copybutton.md +51 -0
  72. package/content/components/datepicker.md +52 -0
  73. package/content/components/descriptions-v2.md +39 -0
  74. package/content/components/descriptions.md +52 -0
  75. package/content/components/diffview-v2.md +39 -0
  76. package/content/components/diffview.md +50 -0
  77. package/content/components/divider.md +48 -0
  78. package/content/components/drawer.md +55 -0
  79. package/content/components/dropdown.md +53 -0
  80. package/content/components/editor.md +49 -0
  81. package/content/components/emptystate.md +51 -0
  82. package/content/components/exportcsv.md +38 -0
  83. package/content/components/field.md +54 -0
  84. package/content/components/filepreview-office.md +37 -0
  85. package/content/components/filepreview.md +49 -0
  86. package/content/components/filetree.md +56 -0
  87. package/content/components/fileupload-v2.md +39 -0
  88. package/content/components/fileupload.md +57 -0
  89. package/content/components/floatbutton.md +52 -0
  90. package/content/components/form-v2.md +41 -0
  91. package/content/components/form.md +60 -0
  92. package/content/components/grid.md +51 -0
  93. package/content/components/highlight-v2.md +39 -0
  94. package/content/components/highlight.md +46 -0
  95. package/content/components/hovercard.md +51 -0
  96. package/content/components/icon.md +50 -0
  97. package/content/components/imagecropper.md +45 -0
  98. package/content/components/img.md +56 -0
  99. package/content/components/infinitescroll-v2.md +40 -0
  100. package/content/components/infinitescroll.md +54 -0
  101. package/content/components/input.md +65 -0
  102. package/content/components/inputnumber.md +58 -0
  103. package/content/components/inview.md +56 -0
  104. package/content/components/jsonschemaform.md +53 -0
  105. package/content/components/jsonviewer-v2.md +39 -0
  106. package/content/components/jsonviewer.md +49 -0
  107. package/content/components/kanban.md +46 -0
  108. package/content/components/label.md +48 -0
  109. package/content/components/layout.md +54 -0
  110. package/content/components/layoutcontent.md +43 -0
  111. package/content/components/layoutheader.md +43 -0
  112. package/content/components/layoutsider.md +43 -0
  113. package/content/components/link.md +52 -0
  114. package/content/components/list.md +44 -0
  115. package/content/components/loading.md +45 -0
  116. package/content/components/logviewer-v2.md +39 -0
  117. package/content/components/logviewer.md +53 -0
  118. package/content/components/markdown.md +51 -0
  119. package/content/components/markdowneditor.md +47 -0
  120. package/content/components/math.md +42 -0
  121. package/content/components/mentions-v2.md +39 -0
  122. package/content/components/mentions.md +52 -0
  123. package/content/components/menu.md +56 -0
  124. package/content/components/menubar.md +44 -0
  125. package/content/components/messagebubble.md +50 -0
  126. package/content/components/modal.md +59 -0
  127. package/content/components/navmenu.md +47 -0
  128. package/content/components/notification.md +51 -0
  129. package/content/components/pageheader.md +53 -0
  130. package/content/components/pagination.md +49 -0
  131. package/content/components/paragraph.md +45 -0
  132. package/content/components/passwordinput.md +57 -0
  133. package/content/components/pininput-v2.md +39 -0
  134. package/content/components/pininput.md +50 -0
  135. package/content/components/pipeline.md +49 -0
  136. package/content/components/popconfirm.md +58 -0
  137. package/content/components/popover.md +61 -0
  138. package/content/components/progressbar.md +50 -0
  139. package/content/components/prompttemplate.md +49 -0
  140. package/content/components/qrcode.md +50 -0
  141. package/content/components/radiogroup.md +53 -0
  142. package/content/components/rate.md +53 -0
  143. package/content/components/reasoningblock.md +47 -0
  144. package/content/components/relationgraph.md +52 -0
  145. package/content/components/resizable.md +53 -0
  146. package/content/components/result.md +49 -0
  147. package/content/components/scrollbar.md +49 -0
  148. package/content/components/searchinput.md +51 -0
  149. package/content/components/segmentedcontrol.md +59 -0
  150. package/content/components/select-searchable.md +47 -0
  151. package/content/components/select.md +66 -0
  152. package/content/components/sessionlist.md +52 -0
  153. package/content/components/sheetgrid.md +44 -0
  154. package/content/components/skeleton.md +55 -0
  155. package/content/components/slidecanvas.md +44 -0
  156. package/content/components/slider.md +62 -0
  157. package/content/components/sortablelist.md +39 -0
  158. package/content/components/space.md +52 -0
  159. package/content/components/sparkline.md +52 -0
  160. package/content/components/statcard-countdown.md +39 -0
  161. package/content/components/statcard.md +56 -0
  162. package/content/components/steps.md +48 -0
  163. package/content/components/switch.md +50 -0
  164. package/content/components/tabbar.md +45 -0
  165. package/content/components/table-v2.md +40 -0
  166. package/content/components/table.md +66 -0
  167. package/content/components/tabs.md +56 -0
  168. package/content/components/tag.md +51 -0
  169. package/content/components/tagsinput-v2.md +39 -0
  170. package/content/components/tagsinput.md +54 -0
  171. package/content/components/text.md +45 -0
  172. package/content/components/textarea.md +57 -0
  173. package/content/components/themeswitch.md +69 -0
  174. package/content/components/timeline.md +50 -0
  175. package/content/components/title.md +45 -0
  176. package/content/components/toast.md +52 -0
  177. package/content/components/toggle-togglegroup.md +52 -0
  178. package/content/components/togglegroup.md +47 -0
  179. package/content/components/toolcallcard.md +51 -0
  180. package/content/components/tooltip.md +50 -0
  181. package/content/components/tour.md +50 -0
  182. package/content/components/transfer.md +52 -0
  183. package/content/components/tree-v2.md +39 -0
  184. package/content/components/tree.md +59 -0
  185. package/content/components/treeselect.md +54 -0
  186. package/content/components/typography.md +51 -0
  187. package/content/components/videoplayer.md +52 -0
  188. package/content/components/virtuallist.md +52 -0
  189. package/content/components/virtualtable-v2.md +39 -0
  190. package/content/components/virtualtable.md +55 -0
  191. package/content/components/watermark.md +53 -0
  192. package/content/components/wave.md +43 -0
  193. package/content/guides/ai-chat-family.md +24 -0
  194. package/content/guides/choose.md +67 -0
  195. package/content/guides/component-model.md +32 -0
  196. package/content/guides/component-standards.md +123 -0
  197. package/{docs/components.md → content/guides/components-guide.md} +31 -7
  198. package/{docs/custom-components.md → content/guides/custom-component.md} +70 -55
  199. package/{docs/data.md → content/guides/data-guide.md} +5 -2
  200. package/content/guides/file-preview-family.md +18 -0
  201. package/{docs → content/guides}/frontend.md +122 -52
  202. package/content/guides/layout-choice.md +64 -0
  203. package/{docs/layout.md → content/guides/layout-guide.md} +12 -8
  204. package/{docs/frontend-middleware.md → content/guides/middleware.md} +34 -3
  205. package/{docs/mobile.md → content/guides/mobile-guide.md} +20 -24
  206. package/content/guides/page-building.md +98 -0
  207. package/content/guides/production.md +37 -0
  208. package/content/guides/quality.md +60 -0
  209. package/{docs/realtime.md → content/guides/realtime-guide.md} +6 -3
  210. package/content/guides/render-only.md +44 -0
  211. package/{docs/saas.md → content/guides/saas-guide.md} +8 -5
  212. package/{docs/server.md → content/guides/server-guide.md} +5 -2
  213. package/content/guides/start.md +41 -0
  214. package/{docs → content/guides}/styling.md +5 -1
  215. package/{docs/frontend-ui-dom.md → content/guides/ui-dom-guide.md} +7 -1
  216. package/content/index.json +4344 -0
  217. package/content/index.md +181 -0
  218. package/content/layout/align.md +20 -0
  219. package/content/layout/anchor.md +19 -0
  220. package/content/layout/app-shell.md +23 -0
  221. package/content/layout/border.md +20 -0
  222. package/content/layout/center.md +19 -0
  223. package/content/layout/cluster.md +19 -0
  224. package/content/layout/container.md +19 -0
  225. package/content/layout/fill.md +19 -0
  226. package/content/layout/grid.md +19 -0
  227. package/content/layout/hidden.md +22 -0
  228. package/content/layout/layer.md +19 -0
  229. package/content/layout/position.md +22 -0
  230. package/content/layout/row.md +23 -0
  231. package/content/layout/safe-area.md +20 -0
  232. package/content/layout/scroll.md +21 -0
  233. package/content/layout/spacing.md +22 -0
  234. package/content/layout/split.md +19 -0
  235. package/content/layout/stack.md +19 -0
  236. package/content/layout/surface.md +23 -0
  237. package/content/layout/text.md +22 -0
  238. package/content/patterns/app-shell.md +34 -0
  239. package/content/patterns/dashboard.md +36 -0
  240. package/content/patterns/data-screen.md +30 -0
  241. package/content/patterns/detail-page.md +31 -0
  242. package/content/patterns/docs.md +34 -0
  243. package/content/patterns/focus-task.md +34 -0
  244. package/content/patterns/landing.md +35 -0
  245. package/content/patterns/list-page.md +32 -0
  246. package/content/patterns/mobile.md +31 -0
  247. package/content/patterns/settings-page.md +33 -0
  248. package/content/patterns/workspace.md +32 -0
  249. package/dist/cli/apps-typecheck.test.d.ts +11 -0
  250. package/dist/cli/docs.d.ts +2 -0
  251. package/dist/cli/docs.mjs +10961 -0
  252. package/dist/cli/home-flash.test.d.ts +1 -0
  253. package/dist/{components → client/components}/Accordion/Accordion.d.ts +1 -1
  254. package/dist/client/components/ActionSheet/ActionSheet.d.ts +37 -0
  255. package/dist/{components → client/components}/Affix/Affix.d.ts +1 -1
  256. package/dist/{components → client/components}/AiChat/AiChat.d.ts +3 -3
  257. package/dist/{components → client/components}/Alert/Alert.d.ts +1 -1
  258. package/dist/{components → client/components}/AlertGroup/AlertGroup.d.ts +1 -1
  259. package/dist/{components → client/components}/Anchor/Anchor.d.ts +1 -1
  260. package/dist/client/components/AppShell/AppShell.d.ts +55 -0
  261. package/dist/{components → client/components}/ApprovalCard/ApprovalCard.d.ts +2 -2
  262. package/dist/{components → client/components}/AspectRatio/AspectRatio.d.ts +1 -1
  263. package/dist/{components → client/components}/AuthPage/AuthPage.d.ts +2 -2
  264. package/dist/{components → client/components}/AutoComplete/AutoComplete.d.ts +1 -1
  265. package/dist/{components → client/components}/Avatar/Avatar.d.ts +1 -1
  266. package/dist/{components → client/components}/AvatarGroup/AvatarGroup.d.ts +1 -1
  267. package/dist/{components → client/components}/BackTop/BackTop.d.ts +1 -1
  268. package/dist/{components → client/components}/Badge/Badge.d.ts +1 -1
  269. package/dist/{components → client/components}/Breadcrumb/Breadcrumb.d.ts +1 -1
  270. package/dist/{components → client/components}/Button/Button.d.ts +1 -1
  271. package/dist/{components → client/components}/Calendar/Calendar.d.ts +1 -1
  272. package/dist/{components → client/components}/Card/Card.d.ts +1 -1
  273. package/dist/{components → client/components}/Carousel/Carousel.d.ts +1 -1
  274. package/dist/{components → client/components}/Cascader/Cascader.d.ts +1 -1
  275. package/dist/{components → client/components}/Chart/Chart.d.ts +1 -1
  276. package/dist/{components → client/components}/Chart/chart-utils.d.ts +5 -1
  277. package/dist/{components → client/components}/ChatInput/ChatInput.d.ts +7 -7
  278. package/dist/{components → client/components}/Checkbox/Checkbox.d.ts +1 -1
  279. package/dist/{components → client/components}/CheckboxGroup/CheckboxGroup.d.ts +1 -1
  280. package/dist/{components → client/components}/CitationCard/CitationCard.d.ts +3 -3
  281. package/dist/{components → client/components}/CodeBlock/CodeBlock.d.ts +1 -1
  282. package/dist/client/components/CodeEditor/CodeEditor.d.ts +18 -0
  283. package/dist/{components → client/components}/Collapse/Collapse.d.ts +1 -1
  284. package/dist/{components → client/components}/ColorPicker/ColorPicker.d.ts +1 -1
  285. package/dist/{components → client/components}/Command/Command.d.ts +1 -1
  286. package/dist/{components → client/components}/Confirm/Confirm.d.ts +2 -7
  287. package/dist/{components → client/components}/ContextMenu/ContextMenu.d.ts +1 -1
  288. package/dist/{components → client/components}/CopyButton/CopyButton.d.ts +1 -1
  289. package/dist/{components → client/components}/DatePicker/DatePicker.d.ts +2 -2
  290. package/dist/{components → client/components}/Descriptions/Descriptions.d.ts +1 -1
  291. package/dist/{components → client/components}/DiffView/DiffView.d.ts +1 -1
  292. package/dist/{components → client/components}/Divider/Divider.d.ts +1 -1
  293. package/dist/{components → client/components}/Drawer/Drawer.d.ts +1 -1
  294. package/dist/{components → client/components}/Dropdown/Dropdown.d.ts +1 -1
  295. package/dist/{components → client/components}/Editor/Editor.d.ts +1 -1
  296. package/dist/{components → client/components}/Editor/tools/toolbar.d.ts +1 -1
  297. package/dist/{components → client/components}/EmptyState/EmptyState.d.ts +1 -1
  298. package/dist/client/components/ExportCSV/ExportCSV.d.ts +30 -0
  299. package/dist/{components → client/components}/Field/Field.d.ts +1 -1
  300. package/dist/{components → client/components}/FilePreview/FilePreview.d.ts +1 -1
  301. package/dist/client/components/FileTree/FileTree.d.ts +57 -0
  302. package/dist/{components → client/components}/FileUpload/FileUpload.d.ts +1 -1
  303. package/dist/{components → client/components}/FloatButton/FloatButton.d.ts +1 -1
  304. package/dist/{components → client/components}/Form/Form.d.ts +1 -1
  305. package/dist/{components → client/components}/Grid/Grid.d.ts +1 -1
  306. package/dist/{components → client/components}/Highlight/Highlight.d.ts +1 -1
  307. package/dist/{components → client/components}/HoverCard/HoverCard.d.ts +5 -4
  308. package/dist/{components → client/components}/Icon/Icon.d.ts +2 -2
  309. package/dist/client/components/ImageCropper/ImageCropper.d.ts +17 -0
  310. package/dist/{components → client/components}/Img/Img.d.ts +1 -1
  311. package/dist/{components → client/components}/InView/InView.d.ts +1 -1
  312. package/dist/{components → client/components}/InfiniteScroll/InfiniteScroll.d.ts +1 -1
  313. package/dist/{components → client/components}/Input/Input.d.ts +1 -1
  314. package/dist/{components → client/components}/InputNumber/InputNumber.d.ts +1 -1
  315. package/dist/{components → client/components}/JSONViewer/JSONViewer.d.ts +1 -1
  316. package/dist/{components → client/components}/JsonSchemaForm/JsonSchemaForm.d.ts +3 -3
  317. package/dist/{components → client/components}/Kanban/Kanban.d.ts +1 -1
  318. package/dist/{components → client/components}/Label/Label.d.ts +1 -1
  319. package/dist/{components → client/components}/Layout/Layout.d.ts +1 -1
  320. package/dist/{components → client/components}/Link/Link.d.ts +1 -1
  321. package/dist/{components → client/components}/List/List.d.ts +1 -1
  322. package/dist/{components → client/components}/Loading/Loading.d.ts +1 -1
  323. package/dist/{components → client/components}/LogViewer/LogViewer.d.ts +1 -1
  324. package/dist/{components → client/components}/Markdown/Markdown.d.ts +1 -1
  325. package/dist/client/components/MarkdownEditor/MarkdownEditor.d.ts +18 -0
  326. package/dist/client/components/Math/Math.d.ts +15 -0
  327. package/dist/{components → client/components}/Mentions/Mentions.d.ts +1 -1
  328. package/dist/{components → client/components}/Menu/Menu.d.ts +1 -1
  329. package/dist/{components → client/components}/Menubar/Menubar.d.ts +1 -1
  330. package/dist/{components → client/components}/MessageBubble/MessageBubble.d.ts +1 -1
  331. package/dist/{components → client/components}/Modal/Modal.d.ts +1 -1
  332. package/dist/{components → client/components}/NavMenu/NavMenu.d.ts +2 -2
  333. package/dist/{components → client/components}/Notification/Notification.d.ts +7 -2
  334. package/dist/{components → client/components}/PageHeader/PageHeader.d.ts +1 -1
  335. package/dist/{components → client/components}/Pagination/Pagination.d.ts +1 -1
  336. package/dist/{components → client/components}/PasswordInput/PasswordInput.d.ts +1 -1
  337. package/dist/{components → client/components}/PinInput/PinInput.d.ts +1 -1
  338. package/dist/{components → client/components}/Pipeline/Pipeline.d.ts +1 -1
  339. package/dist/{components → client/components}/Popconfirm/Popconfirm.d.ts +2 -2
  340. package/dist/{components → client/components}/Popover/Popover.d.ts +5 -4
  341. package/dist/{components → client/components}/ProgressBar/ProgressBar.d.ts +1 -1
  342. package/dist/client/components/PromptTemplate/PromptTemplate.d.ts +37 -0
  343. package/dist/{components → client/components}/QRCode/QRCode.d.ts +1 -1
  344. package/dist/{components → client/components}/RadioGroup/RadioGroup.d.ts +1 -1
  345. package/dist/{components → client/components}/Rate/Rate.d.ts +1 -1
  346. package/dist/{components → client/components}/ReasoningBlock/ReasoningBlock.d.ts +3 -3
  347. package/dist/client/components/RelationGraph/RelationGraph.d.ts +59 -0
  348. package/dist/{components → client/components}/Resizable/Resizable.d.ts +1 -1
  349. package/dist/{components → client/components}/Result/Result.d.ts +1 -1
  350. package/dist/{components → client/components}/Scrollbar/Scrollbar.d.ts +1 -1
  351. package/dist/{components → client/components}/SearchInput/SearchInput.d.ts +1 -1
  352. package/dist/{components → client/components}/SegmentedControl/SegmentedControl.d.ts +1 -1
  353. package/dist/{components → client/components}/Select/Select.d.ts +1 -1
  354. package/dist/{components → client/components}/SessionList/SessionList.d.ts +3 -3
  355. package/dist/{components → client/components}/SheetGrid/SheetGrid.d.ts +1 -1
  356. package/dist/{components → client/components}/Skeleton/Skeleton.d.ts +1 -1
  357. package/dist/{components → client/components}/SlideCanvas/SlideCanvas.d.ts +1 -1
  358. package/dist/client/components/Slider/Slider.d.ts +27 -0
  359. package/dist/client/components/SortableList/SortableList.d.ts +23 -0
  360. package/dist/{components → client/components}/Space/Space.d.ts +1 -1
  361. package/dist/{components → client/components}/Sparkline/Sparkline.d.ts +1 -1
  362. package/dist/{components → client/components}/StatCard/StatCard.d.ts +1 -1
  363. package/dist/{components → client/components}/Steps/Steps.d.ts +1 -1
  364. package/dist/{components → client/components}/Switch/Switch.d.ts +1 -1
  365. package/dist/client/components/TabBar/TabBar.d.ts +35 -0
  366. package/dist/{components → client/components}/Table/Table.d.ts +7 -1
  367. package/dist/client/components/Tabs/Tabs.d.ts +22 -0
  368. package/dist/{components → client/components}/Tag/Tag.d.ts +1 -1
  369. package/dist/{components → client/components}/TagsInput/TagsInput.d.ts +1 -1
  370. package/dist/{components → client/components}/Textarea/Textarea.d.ts +1 -1
  371. package/dist/{components → client/components}/ThemeSwitch/ThemeSwitch.d.ts +1 -1
  372. package/dist/{components → client/components}/Timeline/Timeline.d.ts +1 -1
  373. package/dist/{components → client/components}/Toast/Toast.d.ts +1 -1
  374. package/dist/{components → client/components}/ToggleGroup/ToggleGroup.d.ts +1 -1
  375. package/dist/{components → client/components}/ToolCallCard/ToolCallCard.d.ts +2 -2
  376. package/dist/{components → client/components}/Tooltip/Tooltip.d.ts +4 -3
  377. package/dist/{components → client/components}/Tour/Tour.d.ts +1 -1
  378. package/dist/{components → client/components}/Transfer/Transfer.d.ts +1 -1
  379. package/dist/{components → client/components}/Tree/Tree.d.ts +5 -1
  380. package/dist/{components → client/components}/TreeSelect/TreeSelect.d.ts +5 -1
  381. package/dist/{components → client/components}/Typography/Typography.d.ts +1 -1
  382. package/dist/client/components/VideoPlayer/VideoPlayer.d.ts +25 -0
  383. package/dist/{components → client/components}/VirtualList/VirtualList.d.ts +1 -1
  384. package/dist/{components → client/components}/VirtualTable/VirtualTable.d.ts +1 -1
  385. package/dist/{components → client/components}/Watermark/Watermark.d.ts +1 -1
  386. package/dist/client/components/Wave/Wave.d.ts +15 -0
  387. package/dist/{components → client/components}/index.d.ts +44 -5
  388. package/dist/client/components/index.js +57 -0
  389. package/dist/{components → client/components}/style.css +1081 -98
  390. package/dist/{layout → client/layout}/weifuwu-layout.css +60 -6
  391. package/dist/{office → client/office}/xml-serialize.d.ts +1 -1
  392. package/dist/client/vdom/browser/Browser.d.ts +73 -0
  393. package/dist/client/vdom/browser/create-client-browser.d.ts +11 -0
  394. package/dist/client/vdom/commands.d.ts +19 -0
  395. package/dist/client/vdom/context/UIContext.d.ts +61 -0
  396. package/dist/client/vdom/context/data.d.ts +17 -0
  397. package/dist/client/vdom/core/async-guard.d.ts +20 -0
  398. package/dist/client/vdom/core/build.d.ts +36 -0
  399. package/dist/client/vdom/core/command/create.d.ts +25 -0
  400. package/dist/client/vdom/core/command/index.d.ts +15 -0
  401. package/dist/client/vdom/core/command/insert.d.ts +32 -0
  402. package/dist/client/vdom/core/command/lifecycle.d.ts +47 -0
  403. package/dist/client/vdom/core/command/props.d.ts +22 -0
  404. package/dist/client/vdom/core/diff/attrs.d.ts +10 -0
  405. package/dist/client/vdom/core/diff/children.d.ts +29 -0
  406. package/dist/client/vdom/core/diff/cleanup.d.ts +44 -0
  407. package/dist/client/vdom/core/diff/index.d.ts +22 -0
  408. package/dist/client/vdom/core/diff/output.d.ts +30 -0
  409. package/dist/client/vdom/core/diff/same.d.ts +22 -0
  410. package/dist/client/vdom/core/field/attributes.d.ts +15 -0
  411. package/dist/client/vdom/core/field/events.d.ts +54 -0
  412. package/dist/client/vdom/core/field/index.d.ts +19 -0
  413. package/dist/client/vdom/core/field/key.d.ts +16 -0
  414. package/dist/client/vdom/core/field/props.d.ts +15 -0
  415. package/dist/client/vdom/core/field/ref.d.ts +38 -0
  416. package/dist/client/vdom/core/field/style.d.ts +17 -0
  417. package/dist/client/vdom/core/node/children.d.ts +20 -0
  418. package/dist/client/vdom/core/node/component.d.ts +93 -0
  419. package/dist/client/vdom/core/node/fragment.d.ts +14 -0
  420. package/dist/client/vdom/core/node/hole.d.ts +22 -0
  421. package/dist/client/vdom/core/node/index.d.ts +35 -0
  422. package/dist/client/vdom/core/node/keyed.d.ts +64 -0
  423. package/dist/client/vdom/core/node/native.d.ts +20 -0
  424. package/dist/client/vdom/core/node/portal.d.ts +11 -0
  425. package/dist/client/vdom/core/patch/fields.d.ts +15 -0
  426. package/dist/client/vdom/core/patch/index.d.ts +51 -0
  427. package/dist/client/vdom/core/patch/processors.d.ts +75 -0
  428. package/dist/client/vdom/core/patch/state-machine.d.ts +38 -0
  429. package/dist/client/vdom/core/patch/verify.d.ts +17 -0
  430. package/dist/client/vdom/core/router.d.ts +31 -0
  431. package/dist/client/vdom/core/serve.d.ts +75 -0
  432. package/dist/client/vdom/core/ssr/absorb.d.ts +53 -0
  433. package/dist/client/vdom/core/ssr/html.d.ts +32 -0
  434. package/dist/client/vdom/core/ssr/index.d.ts +25 -0
  435. package/dist/client/vdom/core/transform/component.d.ts +23 -0
  436. package/dist/client/vdom/core/transform/element.d.ts +21 -0
  437. package/dist/client/vdom/core/transform/fragment.d.ts +21 -0
  438. package/dist/client/vdom/core/transform/hole.d.ts +13 -0
  439. package/dist/client/vdom/core/transform/index.d.ts +46 -0
  440. package/dist/client/vdom/core/transform/states.d.ts +22 -0
  441. package/dist/client/vdom/core/transform/table.d.ts +28 -0
  442. package/dist/client/vdom/core/transform/text.d.ts +10 -0
  443. package/dist/client/vdom/core/vnode.d.ts +45 -0
  444. package/dist/client/vdom/dev/effect-guard.d.ts +8 -0
  445. package/dist/client/vdom/hooks/ai-stream.d.ts +46 -0
  446. package/dist/client/vdom/hooks/basic.d.ts +42 -0
  447. package/dist/client/vdom/hooks/chat.d.ts +91 -0
  448. package/dist/client/vdom/hooks/controlled.d.ts +27 -0
  449. package/dist/client/vdom/hooks/drag-media.d.ts +52 -0
  450. package/dist/client/vdom/hooks/env.d.ts +119 -0
  451. package/dist/client/vdom/hooks/input.d.ts +43 -0
  452. package/dist/client/vdom/hooks/observe.d.ts +60 -0
  453. package/dist/client/vdom/hooks/popup-manager.d.ts +92 -0
  454. package/dist/client/vdom/hooks/popup.d.ts +52 -0
  455. package/dist/client/vdom/hooks/stable.d.ts +45 -0
  456. package/dist/client/vdom/index.d.ts +67 -0
  457. package/dist/client/vdom/index.js +8 -0
  458. package/dist/client/vdom/jsx-runtime.d.ts +28 -0
  459. package/dist/client/vdom/jsx-runtime.js +1 -0
  460. package/dist/client/vdom/middlewares/api.d.ts +38 -0
  461. package/dist/client/vdom/middlewares/auth-i18n.d.ts +66 -0
  462. package/dist/client/vdom/middlewares/ws.d.ts +37 -0
  463. package/dist/client/vdom/store.d.ts +49 -0
  464. package/dist/client/vdom/testing.d.ts +46 -0
  465. package/dist/client/vdom/testing.js +2 -0
  466. package/dist/dev/index.d.ts +12 -0
  467. package/dist/dev/index.js +4 -4
  468. package/dist/{ai → server/ai}/contracts.d.ts +1 -1
  469. package/dist/{ai → server/ai}/index.d.ts +2 -2
  470. package/dist/{ai → server/ai}/types.d.ts +1 -1
  471. package/dist/{core → server/core}/router.d.ts +2 -4
  472. package/dist/{db → server/db}/contracts.d.ts +1 -1
  473. package/dist/server/db/postgres-server.d.ts +37 -0
  474. package/dist/server/db/redis-server.d.ts +32 -0
  475. package/dist/server/db/server.d.ts +30 -0
  476. package/dist/server/db/test-servers.d.ts +21 -0
  477. package/dist/{email → server/email}/contracts.d.ts +1 -1
  478. package/dist/{index.js → server/index.js} +3145 -2487
  479. package/dist/{ui → server/ui}/index.d.ts +2 -2
  480. package/dist/{user → server/user}/token.d.ts +1 -1
  481. package/dist/shared/router/trie.d.ts +61 -0
  482. package/docs/components-map.md +5 -5
  483. package/docs/style-guide.md +14 -2
  484. package/examples/apps/admin/README.md +23 -0
  485. package/examples/apps/admin/api.ts +27 -0
  486. package/examples/apps/admin/app.tsx +144 -0
  487. package/examples/apps/admin/main.tsx +8 -0
  488. package/examples/apps/admin/server.ts +37 -0
  489. package/examples/apps/auth/README.md +23 -0
  490. package/examples/apps/auth/api.ts +49 -0
  491. package/examples/apps/auth/app.tsx +137 -0
  492. package/examples/apps/auth/main.tsx +8 -0
  493. package/examples/apps/auth/server.ts +37 -0
  494. package/examples/apps/multi/README.md +23 -0
  495. package/examples/apps/multi/app.tsx +83 -0
  496. package/examples/apps/multi/main.tsx +8 -0
  497. package/examples/apps/multi/server.ts +33 -0
  498. package/examples/apps/todo/README.md +23 -0
  499. package/examples/apps/todo/api.ts +26 -0
  500. package/examples/apps/todo/app.tsx +128 -0
  501. package/examples/apps/todo/main.tsx +9 -0
  502. package/examples/apps/todo/server.ts +39 -0
  503. package/examples/hello-world/README.md +9 -0
  504. package/examples/hello-world/client.ts +14 -0
  505. package/examples/hello-world/routes.tsx +26 -0
  506. package/examples/hello-world/server.ts +46 -0
  507. package/examples/patterns/AppShell.tsx +224 -0
  508. package/examples/patterns/Dashboard.tsx +153 -0
  509. package/examples/patterns/DataScreen.tsx +104 -0
  510. package/examples/patterns/DetailPage.tsx +79 -0
  511. package/examples/patterns/Docs.tsx +105 -0
  512. package/examples/patterns/FocusTask.tsx +67 -0
  513. package/examples/patterns/Landing.tsx +90 -0
  514. package/examples/patterns/ListPage.tsx +77 -0
  515. package/examples/patterns/Mobile.tsx +154 -0
  516. package/examples/patterns/SettingsPage.tsx +98 -0
  517. package/examples/patterns/SplitWorkspace.tsx +113 -0
  518. package/package.json +61 -29
  519. package/dist/components/Slider/Slider.d.ts +0 -19
  520. package/dist/components/Tabs/Tabs.d.ts +0 -12
  521. package/dist/components/index.js +0 -55
  522. package/dist/ui-dom/Confirm.d.ts +0 -8
  523. package/dist/ui-dom/Notification.d.ts +0 -8
  524. package/dist/ui-dom/Toast.d.ts +0 -8
  525. package/dist/ui-dom/ai.d.ts +0 -59
  526. package/dist/ui-dom/browser.d.ts +0 -10
  527. package/dist/ui-dom/debug.d.ts +0 -21
  528. package/dist/ui-dom/hooks/chat.d.ts +0 -11
  529. package/dist/ui-dom/hooks/events.d.ts +0 -30
  530. package/dist/ui-dom/hooks/external.d.ts +0 -20
  531. package/dist/ui-dom/hooks/index.d.ts +0 -29
  532. package/dist/ui-dom/hooks/input.d.ts +0 -33
  533. package/dist/ui-dom/hooks/media.d.ts +0 -17
  534. package/dist/ui-dom/hooks/popup.d.ts +0 -30
  535. package/dist/ui-dom/hooks/stable.d.ts +0 -35
  536. package/dist/ui-dom/hooks/types.d.ts +0 -77
  537. package/dist/ui-dom/i18n.d.ts +0 -31
  538. package/dist/ui-dom/index.d.ts +0 -47
  539. package/dist/ui-dom/index.js +0 -41
  540. package/dist/ui-dom/jsx-runtime.d.ts +0 -4
  541. package/dist/ui-dom/jsx-runtime.js +0 -1
  542. package/dist/ui-dom/locale/en_US.d.ts +0 -69
  543. package/dist/ui-dom/locale/zh_CN.d.ts +0 -69
  544. package/dist/ui-dom/middleware/api.d.ts +0 -91
  545. package/dist/ui-dom/middleware/auth.d.ts +0 -30
  546. package/dist/ui-dom/middleware/ws.d.ts +0 -33
  547. package/dist/ui-dom/motion.d.ts +0 -8
  548. package/dist/ui-dom/popup-tracker.d.ts +0 -36
  549. package/dist/ui-dom/popup.d.ts +0 -42
  550. package/dist/ui-dom/store.d.ts +0 -24
  551. package/dist/ui-dom/testing.d.ts +0 -68
  552. package/dist/ui-dom/testing.js +0 -7
  553. package/dist/ui-dom/types.d.ts +0 -634
  554. package/dist/ui-dom/use-chat.d.ts +0 -95
  555. package/dist/ui-dom/vdom3/README.d.ts +0 -32
  556. package/dist/ui-dom/vdom3/app.d.ts +0 -20
  557. package/dist/ui-dom/vdom3/audit.d.ts +0 -29
  558. package/dist/ui-dom/vdom3/build.d.ts +0 -20
  559. package/dist/ui-dom/vdom3/commands.d.ts +0 -21
  560. package/dist/ui-dom/vdom3/comp-index.d.ts +0 -18
  561. package/dist/ui-dom/vdom3/delegate.d.ts +0 -53
  562. package/dist/ui-dom/vdom3/events.d.ts +0 -17
  563. package/dist/ui-dom/vdom3/index.d.ts +0 -42
  564. package/dist/ui-dom/vdom3/jsx.d.ts +0 -32
  565. package/dist/ui-dom/vdom3/record.d.ts +0 -16
  566. package/dist/ui-dom/vdom3/registry.d.ts +0 -30
  567. package/dist/ui-dom/vdom3/render.d.ts +0 -39
  568. package/dist/ui-dom/vdom3/replay.d.ts +0 -28
  569. package/dist/ui-dom/vdom3/root.d.ts +0 -24
  570. package/dist/ui-dom/vdom3/router.d.ts +0 -31
  571. package/dist/ui-dom/vdom3/scheduler.d.ts +0 -23
  572. package/dist/ui-dom/vdom3/ssr.d.ts +0 -27
  573. package/dist/ui-dom/vdom3/sync.d.ts +0 -22
  574. package/dist/ui-dom/vdom3/types.d.ts +0 -173
  575. package/dist/ui-dom/vdom3/ui.d.ts +0 -16
  576. package/dist/ui-dom/vdom3.js +0 -41
  577. package/dist/ui-dom/vnode.d.ts +0 -13
  578. /package/dist/{make-executable-schema.test.d.ts → cli/content-sync.test.d.ts} +0 -0
  579. /package/dist/{ui-dom/testing.test.d.ts → cli/docs-cli.test.d.ts} +0 -0
  580. /package/dist/{components → client/components}/CodeBlock/highlight.d.ts +0 -0
  581. /package/dist/{components → client/components}/DatePicker/calendar-utils.d.ts +0 -0
  582. /package/dist/{components → client/components}/DiffView/diff-utils.d.ts +0 -0
  583. /package/dist/{components → client/components}/Editor/edit-events.d.ts +0 -0
  584. /package/dist/{components → client/components}/Editor/model/apply.d.ts +0 -0
  585. /package/dist/{components → client/components}/Editor/model/diff.d.ts +0 -0
  586. /package/dist/{components → client/components}/Editor/model/dom.d.ts +0 -0
  587. /package/dist/{components → client/components}/Editor/model/history.d.ts +0 -0
  588. /package/dist/{components → client/components}/Editor/model/html.d.ts +0 -0
  589. /package/dist/{components → client/components}/Editor/model/inverse.d.ts +0 -0
  590. /package/dist/{components → client/components}/Editor/model/types.d.ts +0 -0
  591. /package/dist/{components → client/components}/Editor/tools/table.d.ts +0 -0
  592. /package/dist/{components → client/components}/Editor/tools/types.d.ts +0 -0
  593. /package/dist/{components → client/components}/FilePreview/markdown.d.ts +0 -0
  594. /package/dist/{components → client/components}/Markdown/parser.d.ts +0 -0
  595. /package/dist/{components → client/components}/OfficeEditor/ai/ai-bridge.d.ts +0 -0
  596. /package/dist/{components → client/components}/OfficeEditor/model/apply.d.ts +0 -0
  597. /package/dist/{components → client/components}/OfficeEditor/model/types.d.ts +0 -0
  598. /package/dist/{components → client/components}/Pipeline/dag-utils.d.ts +0 -0
  599. /package/dist/{components → client/components}/QRCode/qr.d.ts +0 -0
  600. /package/dist/{components → client/components}/Sparkline/sparkline-utils.d.ts +0 -0
  601. /package/dist/{office → client/office}/docx.d.ts +0 -0
  602. /package/dist/{office → client/office}/pptx.d.ts +0 -0
  603. /package/dist/{office → client/office}/xlsx.d.ts +0 -0
  604. /package/dist/{office → client/office}/xml.d.ts +0 -0
  605. /package/dist/{office → client/office}/zip.d.ts +0 -0
  606. /package/dist/{ai → server/ai}/agent.d.ts +0 -0
  607. /package/dist/{ai → server/ai}/client.d.ts +0 -0
  608. /package/dist/{ai → server/ai}/sse.d.ts +0 -0
  609. /package/dist/{core → server/core}/serve.d.ts +0 -0
  610. /package/dist/{core → server/core}/ws.d.ts +0 -0
  611. /package/dist/{db → server/db}/errors.d.ts +0 -0
  612. /package/dist/{db → server/db}/memory-redis.d.ts +0 -0
  613. /package/dist/{db → server/db}/memory-sql.d.ts +0 -0
  614. /package/dist/{db → server/db}/postgres/connection.d.ts +0 -0
  615. /package/dist/{db → server/db}/postgres/pool.d.ts +0 -0
  616. /package/dist/{db → server/db}/postgres/protocol.d.ts +0 -0
  617. /package/dist/{db → server/db}/postgres/schema.d.ts +0 -0
  618. /package/dist/{db → server/db}/query-builder.d.ts +0 -0
  619. /package/dist/{db → server/db}/query.d.ts +0 -0
  620. /package/dist/{db → server/db}/redis/client.d.ts +0 -0
  621. /package/dist/{db → server/db}/redis/commands.d.ts +0 -0
  622. /package/dist/{db → server/db}/redis/connection.d.ts +0 -0
  623. /package/dist/{db → server/db}/redis/pipeline.d.ts +0 -0
  624. /package/dist/{db → server/db}/redis/pool.d.ts +0 -0
  625. /package/dist/{db → server/db}/redis/resp.d.ts +0 -0
  626. /package/dist/{db → server/db}/redis/subscriber.d.ts +0 -0
  627. /package/dist/{db → server/db}/sql-parser.d.ts +0 -0
  628. /package/dist/{email → server/email}/index.d.ts +0 -0
  629. /package/dist/{email → server/email}/smtp.d.ts +0 -0
  630. /package/dist/{graphql.d.ts → server/graphql.d.ts} +0 -0
  631. /package/dist/{index.d.ts → server/index.d.ts} +0 -0
  632. /package/dist/{make-executable-schema.d.ts → server/make-executable-schema.d.ts} +0 -0
  633. /package/dist/{messager → server/messager}/index.d.ts +0 -0
  634. /package/dist/{middleware → server/middleware}/cors.d.ts +0 -0
  635. /package/dist/{middleware → server/middleware}/rate-limit.d.ts +0 -0
  636. /package/dist/{middleware → server/middleware}/static.d.ts +0 -0
  637. /package/dist/{postgres → server/postgres}/client.d.ts +0 -0
  638. /package/dist/{postgres → server/postgres}/index.d.ts +0 -0
  639. /package/dist/{postgres → server/postgres}/types.d.ts +0 -0
  640. /package/dist/{queue → server/queue}/index.d.ts +0 -0
  641. /package/dist/{redis → server/redis}/client.d.ts +0 -0
  642. /package/dist/{redis → server/redis}/index.d.ts +0 -0
  643. /package/dist/{redis → server/redis}/types.d.ts +0 -0
  644. /package/dist/{request.d.ts → server/request.d.ts} +0 -0
  645. /package/dist/{response.d.ts → server/response.d.ts} +0 -0
  646. /package/dist/{scheduler → server/scheduler}/cron.d.ts +0 -0
  647. /package/dist/{scheduler → server/scheduler}/index.d.ts +0 -0
  648. /package/dist/{types.d.ts → server/types.d.ts} +0 -0
  649. /package/dist/{ui → server/ui}/html-safe.d.ts +0 -0
  650. /package/dist/{user → server/user}/index.d.ts +0 -0
  651. /package/dist/{user → server/user}/password.d.ts +0 -0
@@ -160,9 +160,13 @@
160
160
  /* 浮层面板底色(surface-2/3:浮层/模态——亮色同 bg 靠阴影区分,暗色抬升一级见 _dark.css) */
161
161
  --wf-color-bg-elevated: var(--wf-color-bg);
162
162
 
163
- /* ── 字体 ── */
164
- --wf-font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
165
- --wf-font-mono: 'SF Mono', 'Fira Code', 'JetBrains Mono', monospace;
163
+ /* ── 字体 ──
164
+ * 西文优先(拉丁字形平台最优),CJK 显式回退(中文原生:PingFang/苹方、
165
+ * Hiragino/冬青、雅黑、思源 Noto Sans SC——三平台中文渲染一致) */
166
+ --wf-font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
167
+ 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;
168
+ --wf-font-mono: 'SF Mono', 'Fira Code', 'JetBrains Mono',
169
+ 'PingFang SC', 'Microsoft YaHei', monospace;
166
170
 
167
171
  --wf-font-size-xs: 12px;
168
172
  --wf-font-size-sm: 13px;
@@ -196,9 +200,11 @@
196
200
  变暗不可见,primary 是亮蓝——明暗主题聚焦均可见) ── */
197
201
  --wf-focus-ring: 0 0 0 2px var(--wf-color-primary-bg), 0 0 0 1px var(--wf-color-primary);
198
202
 
199
- /* ── 动效 ── */
200
- --wf-transition-duration: 150ms;
201
- --wf-transition-timing: ease;
203
+ /* ── 动效 ──
204
+ * --wf-transition 为派生别名(hover 类过渡统一走 dur-fast + ease-out——微流明标准节奏)。
205
+ * 旧 --wf-transition-duration/timing 保留为兼容(不建议新引用——新代码直接用 --wf-dur-* 系列) */
206
+ --wf-transition-duration: var(--wf-dur-fast);
207
+ --wf-transition-timing: var(--wf-ease-out);
202
208
  --wf-transition: var(--wf-transition-duration) var(--wf-transition-timing);
203
209
 
204
210
  /* ── 动效语言:时长阶梯 + 缓动曲线 + 位移量(组件动效统一引用,不各自硬编码) ── */
@@ -217,6 +223,12 @@
217
223
  --wf-motion-md: 8px;
218
224
  --wf-motion-lg: 24px; /* drawer 全幅位移 */
219
225
 
226
+ /* 循环动效族(旋转/呼吸/闪烁/进度——时长阶梯之外的循环节拍——S5 审计强制引用) */
227
+ --wf-dur-spin: 0.6s; /* 旋转(spinner/loading/折叠) */
228
+ --wf-dur-pulse: 1.2s; /* 呼吸脉冲(在线点/骨架/思考) */
229
+ --wf-dur-blink: 1.1s; /* 光标闪烁(流式光标/AI 回复) */
230
+ --wf-dur-progress: 1.4s; /* 不确定进度循环(indeterminate) */
231
+
220
232
  /* ── 色彩 — 信息(补充) ── */
221
233
  --wf-color-info: var(--wf-sky-500);
222
234
  --wf-color-info-bg: var(--wf-sky-50);
@@ -274,6 +286,7 @@
274
286
  --wf-letter-spacing: normal;
275
287
  --wf-letter-spacing-wide: 0.5px;
276
288
  --wf-letter-spacing-wider: 1px;
289
+ --wf-heading-display-tracking: -0.5px; /* 顶级标题 display 档窄字距(PageHeader display——CJK 可覆盖) */
277
290
 
278
291
  /* ── 数字 ── */
279
292
  --wf-nums: 'tabular-nums'; /* 数字等宽(统计/表格数值防抖动) */
@@ -721,6 +734,34 @@ body.wf-dragging {
721
734
  user-select: none;
722
735
  -webkit-user-select: none;
723
736
  }
737
+
738
+ /* ── 微流明 · 进行态语言:stream-in 内容渐显(AI 回复/流式列表/hero 元素) ──
739
+ * 微流明设计语言三支柱之二(design/design-language.md)——"进行中"是可见的流
740
+ * 用法:元素加 wf-stream-in 类(opacity 0→1 + 上移 4px)
741
+ */
742
+ @keyframes wf-stream-in {
743
+ from { opacity: 0; transform: translateY(4px); }
744
+ to { opacity: 1; transform: translateY(0); }
745
+ }
746
+ .wf-stream-in {
747
+ animation: wf-stream-in var(--wf-dur-base) var(--wf-ease-out) both;
748
+ }
749
+ @media (prefers-reduced-motion: reduce) {
750
+ .wf-stream-in {
751
+ animation-duration: 0.01ms;
752
+ }
753
+ }
754
+
755
+ /* ── 首页 hero 打字机光标(微流明·进行态——reduced-motion 由下方降级块处理) ── */
756
+ .wf-hero-cursor {
757
+ animation: wf-hero-blink 1s step-end infinite;
758
+ color: var(--wf-color-primary);
759
+ }
760
+
761
+ @keyframes wf-hero-blink {
762
+ 0%, 100% { opacity: 1; }
763
+ 50% { opacity: 0; }
764
+ }
724
765
  }
725
766
 
726
767
  @layer layout {
@@ -1004,6 +1045,11 @@ body.wf-dragging {
1004
1045
  background: var(--wf-surface-bg);
1005
1046
  }
1006
1047
 
1048
+ /* 平面表面(M4 表面语言——静态卡片/面板组合 wf-border 用:阴影仅抬升语义) */
1049
+ .wf-surface--flat {
1050
+ box-shadow: none;
1051
+ }
1052
+
1007
1053
  /* ── 背景色工具 — 引用语义 Token,免自定义 CSS ── */
1008
1054
  .wf-bg-secondary { background: var(--wf-color-bg-secondary); }
1009
1055
  .wf-bg-tertiary { background: var(--wf-color-bg-tertiary); }
@@ -1494,6 +1540,14 @@ body.wf-dragging {
1494
1540
  /* 内容高于视口时在主区内滚动(壳固定视口高度后的唯一滚动出口) */
1495
1541
  overflow-y: auto;
1496
1542
  background: var(--wf-color-bg);
1543
+ /* 行宽约束(P5):默认 none 全宽(聊天/表格等全宽应用零影响);
1544
+ 文档站/长文本场景设 --wf-main-max: 900px——直接子元素限宽居中 */
1545
+ --wf-main-max: none;
1546
+ }
1547
+
1548
+ .wf-main > * {
1549
+ max-width: var(--wf-main-max);
1550
+ margin-inline: auto;
1497
1551
  }
1498
1552
 
1499
1553
  /* ── 触屏:导航项 44px 命中区 ── */
@@ -1796,6 +1850,10 @@ body.wf-dragging {
1796
1850
  background: var(--wf-color-bg-tertiary);
1797
1851
  }
1798
1852
 
1853
+ .wf-accordion-summary:active {
1854
+ background: var(--wf-state-pressed);
1855
+ }
1856
+
1799
1857
  .wf-accordion-arrow {
1800
1858
  transition: transform var(--wf-dur-base) var(--wf-ease-out);
1801
1859
  color: var(--wf-color-text-secondary);
@@ -1819,6 +1877,157 @@ body.wf-dragging {
1819
1877
 
1820
1878
  .wf-accordion-summary[disabled] { opacity: 0.5; cursor: not-allowed; }
1821
1879
 
1880
+ /* weifuwu/components — ActionSheet 动作面板(移动端底部滑出) */
1881
+
1882
+ .wf-actionsheet {
1883
+ position: fixed;
1884
+ inset: 0;
1885
+ z-index: var(--wf-z-popover);
1886
+ display: flex;
1887
+ flex-direction: column;
1888
+ justify-content: flex-end;
1889
+ padding: var(--wf-space-md);
1890
+ }
1891
+
1892
+ /* 遮罩(禁裸 rgba——audit 强制) */
1893
+ .wf-actionsheet-overlay {
1894
+ position: absolute;
1895
+ inset: 0;
1896
+ background: var(--wf-overlay);
1897
+ border: none;
1898
+ cursor: pointer;
1899
+ }
1900
+
1901
+ /* 面板:底部滑出(enter/exit 成对——audit 强制) */
1902
+ .wf-actionsheet-panel {
1903
+ position: relative;
1904
+ background: var(--wf-color-bg-elevated);
1905
+ border-radius: var(--wf-radius-lg);
1906
+ overflow: hidden;
1907
+ box-shadow: var(--wf-shadow-lg);
1908
+ }
1909
+
1910
+ .wf-actionsheet--enter .wf-actionsheet-panel {
1911
+ animation: wf-actionsheet-slidein var(--wf-dur-base) var(--wf-ease-out);
1912
+ }
1913
+
1914
+ .wf-actionsheet--exit .wf-actionsheet-panel {
1915
+ animation: wf-actionsheet-slideout var(--wf-dur-base) var(--wf-ease-in);
1916
+ }
1917
+
1918
+ .wf-actionsheet--enter .wf-actionsheet-overlay {
1919
+ animation: wf-actionsheet-overlay-fadein var(--wf-dur-fast) var(--wf-ease-out);
1920
+ }
1921
+
1922
+ .wf-actionsheet--exit .wf-actionsheet-overlay {
1923
+ animation: wf-actionsheet-overlay-fadeout var(--wf-dur-fast) var(--wf-ease-in);
1924
+ }
1925
+
1926
+ @keyframes wf-actionsheet-slidein {
1927
+ from { transform: translateY(100%); }
1928
+ to { transform: translateY(0); }
1929
+ }
1930
+
1931
+ @keyframes wf-actionsheet-slideout {
1932
+ from { transform: translateY(0); }
1933
+ to { transform: translateY(100%); }
1934
+ }
1935
+
1936
+ @keyframes wf-actionsheet-overlay-fadein {
1937
+ from { opacity: 0; }
1938
+ to { opacity: 1; }
1939
+ }
1940
+
1941
+ @keyframes wf-actionsheet-overlay-fadeout {
1942
+ from { opacity: 1; }
1943
+ to { opacity: 0; }
1944
+ }
1945
+
1946
+ .wf-actionsheet-title {
1947
+ padding: var(--wf-space-md);
1948
+ text-align: center;
1949
+ font-size: var(--wf-font-size-sm);
1950
+ color: var(--wf-color-text-secondary);
1951
+ border-bottom: 1px solid var(--wf-color-border-light);
1952
+ }
1953
+
1954
+ /* 项:固定 min/max-height(§5.6——全局 button min-height:36px 防撑高) */
1955
+ .wf-actionsheet-item {
1956
+ display: flex;
1957
+ align-items: center;
1958
+ justify-content: center;
1959
+ gap: var(--wf-gap-xs);
1960
+ width: 100%;
1961
+ min-height: 48px;
1962
+ max-height: 48px;
1963
+ padding: 0 var(--wf-space-md);
1964
+ background: transparent;
1965
+ border: none;
1966
+ border-bottom: 1px solid var(--wf-color-border-light);
1967
+ font-size: var(--wf-font-size-base);
1968
+ color: var(--wf-color-text);
1969
+ cursor: pointer;
1970
+ transition: background-color var(--wf-dur-fast) var(--wf-ease-out);
1971
+ }
1972
+
1973
+ .wf-actionsheet-item:hover:not(:disabled) {
1974
+ background: var(--wf-state-hover);
1975
+ }
1976
+
1977
+ .wf-actionsheet-item:active:not(:disabled) {
1978
+ background: var(--wf-state-pressed);
1979
+ }
1980
+
1981
+ .wf-actionsheet-item:focus-visible {
1982
+ outline: none;
1983
+ box-shadow: var(--wf-focus-ring);
1984
+ }
1985
+
1986
+ .wf-actionsheet-item--danger {
1987
+ color: var(--wf-color-error-text);
1988
+ }
1989
+
1990
+ .wf-actionsheet-item--disabled {
1991
+ color: var(--wf-color-text-disabled);
1992
+ cursor: not-allowed;
1993
+ }
1994
+
1995
+ /* 分隔(取消按钮上方的结构分隔——细边框美学) */
1996
+ .wf-actionsheet-divider {
1997
+ height: 8px;
1998
+ background: var(--wf-color-bg-secondary);
1999
+ }
2000
+
2001
+ .wf-actionsheet-cancel {
2002
+ width: 100%;
2003
+ min-height: 48px;
2004
+ max-height: 48px;
2005
+ background: transparent;
2006
+ border: none;
2007
+ font-size: var(--wf-font-size-base);
2008
+ font-weight: var(--wf-font-weight-semibold);
2009
+ color: var(--wf-color-text-secondary);
2010
+ cursor: pointer;
2011
+ transition: background-color var(--wf-dur-fast) var(--wf-ease-out);
2012
+ }
2013
+
2014
+ .wf-actionsheet-cancel:hover {
2015
+ background: var(--wf-state-hover);
2016
+ }
2017
+
2018
+ .wf-actionsheet-cancel:active {
2019
+ background: var(--wf-state-pressed);
2020
+ }
2021
+
2022
+ .wf-actionsheet-cancel:focus-visible {
2023
+ outline: none;
2024
+ box-shadow: var(--wf-focus-ring);
2025
+ }
2026
+
2027
+ .wf-actionsheet-icon {
2028
+ color: inherit;
2029
+ }
2030
+
1822
2031
  /* weifuwu/components — Affix */
1823
2032
 
1824
2033
  .wf-affix {
@@ -2013,7 +2222,7 @@ body.wf-dragging {
2013
2222
 
2014
2223
  .wf-alertgroup-time {
2015
2224
  color: var(--wf-color-text-tertiary);
2016
- font-size: 12px;
2225
+ font-size: var(--wf-font-size-xs); /* 12px 同值 token 化——compact 预设可缩放 */
2017
2226
  }
2018
2227
 
2019
2228
  .wf-alertgroup-close {
@@ -2077,6 +2286,87 @@ body.wf-dragging {
2077
2286
  box-shadow: var(--wf-focus-ring);
2078
2287
  }
2079
2288
 
2289
+ /* weifuwu/components — AppShell(应用壳——品牌区/用户区细节——栅格复用 layout app-shell)
2290
+ * M1:旧 token 体系迁移(--wf-text-tertiary/--wf-bg-hover → 语义 token)+
2291
+ * CJK 感知(heading case/tracking 引用 token)+ 循环动效 token。
2292
+ */
2293
+ .wf-app-shell-brand-text {
2294
+ display: flex;
2295
+ flex-direction: column;
2296
+ min-width: 0;
2297
+ }
2298
+ .wf-app-shell-brand-name {
2299
+ font-size: var(--wf-font-size-base);
2300
+ font-weight: var(--wf-font-weight-semibold);
2301
+ line-height: var(--wf-line-height-tight);
2302
+ white-space: nowrap;
2303
+ overflow: hidden;
2304
+ text-overflow: ellipsis;
2305
+ }
2306
+ .wf-app-shell-brand-sub {
2307
+ font-size: var(--wf-font-size-xs);
2308
+ letter-spacing: var(--wf-heading-tracking); /* CJK 默认 0,英文可覆盖 */
2309
+ text-transform: var(--wf-heading-case); /* CJK 默认 none,英文可覆盖 uppercase */
2310
+ color: var(--wf-color-text-tertiary);
2311
+ white-space: nowrap;
2312
+ overflow: hidden;
2313
+ text-overflow: ellipsis;
2314
+ }
2315
+ .wf-app-shell-user {
2316
+ display: flex;
2317
+ align-items: center;
2318
+ justify-content: space-between;
2319
+ gap: var(--wf-gap-sm);
2320
+ padding: var(--wf-space-sm);
2321
+ }
2322
+ .wf-app-shell-user-info {
2323
+ display: flex;
2324
+ align-items: center;
2325
+ gap: var(--wf-gap-sm);
2326
+ min-width: 0;
2327
+ flex: 1;
2328
+ }
2329
+ .wf-app-shell-user-meta {
2330
+ display: flex;
2331
+ flex-direction: column;
2332
+ min-width: 0;
2333
+ }
2334
+ .wf-app-shell-user-name {
2335
+ font-size: var(--wf-font-size-sm);
2336
+ font-weight: var(--wf-font-weight-semibold);
2337
+ white-space: nowrap;
2338
+ overflow: hidden;
2339
+ text-overflow: ellipsis;
2340
+ }
2341
+ .wf-app-shell-user-mail {
2342
+ font-size: var(--wf-font-size-xs);
2343
+ color: var(--wf-color-text-tertiary);
2344
+ white-space: nowrap;
2345
+ overflow: hidden;
2346
+ text-overflow: ellipsis;
2347
+ }
2348
+ .wf-app-shell-user-actions {
2349
+ display: flex;
2350
+ align-items: center;
2351
+ gap: var(--wf-gap-xs);
2352
+ flex-shrink: 0;
2353
+ }
2354
+ .wf-app-shell-skel {
2355
+ height: var(--wf-space-md);
2356
+ border-radius: var(--wf-radius-sm);
2357
+ background: var(--wf-color-fill);
2358
+ animation: wf-app-shell-pulse var(--wf-dur-pulse) var(--wf-ease-in-out) infinite;
2359
+ }
2360
+ .wf-app-shell-skel--sm {
2361
+ width: 60%;
2362
+ height: var(--wf-space-sm);
2363
+ margin-top: var(--wf-gap-xs);
2364
+ }
2365
+ @keyframes wf-app-shell-pulse {
2366
+ 0%, 100% { opacity: 0.5 }
2367
+ 50% { opacity: 1 }
2368
+ }
2369
+
2080
2370
  /* weifuwu/components — ApprovalCard */
2081
2371
 
2082
2372
  .wf-approval {
@@ -2410,6 +2700,11 @@ body.wf-dragging {
2410
2700
  .wf-breadcrumb-link:hover {
2411
2701
  text-decoration: underline;
2412
2702
  }
2703
+ .wf-breadcrumb-link:focus-visible {
2704
+ outline: none;
2705
+ border-radius: var(--wf-radius-xs);
2706
+ box-shadow: var(--wf-focus-ring);
2707
+ }
2413
2708
 
2414
2709
  .wf-breadcrumb-current {
2415
2710
  color: var(--wf-color-text);
@@ -2476,7 +2771,7 @@ body.wf-dragging {
2476
2771
  border: 2px solid currentColor;
2477
2772
  border-top-color: transparent;
2478
2773
  border-radius: 50%;
2479
- animation: wf-btn-spin 0.6s linear infinite;
2774
+ animation: wf-btn-spin var(--wf-dur-spin) linear infinite;
2480
2775
  flex-shrink: 0;
2481
2776
  }
2482
2777
 
@@ -2642,8 +2937,10 @@ body.wf-dragging {
2642
2937
  font-family: var(--wf-font-sans);
2643
2938
  }
2644
2939
 
2940
+ /* 默认卡片:1px 细边框是设计主角(微流明·边界即结构——阴影仅抬升语义,
2941
+ * 提升由 .wf-elevate / hover 承担)。旧阴影观感可用 --wf-card-shadow 覆盖 / 自加 box-shadow */
2645
2942
  .wf-card--default {
2646
- box-shadow: var(--wf-card-shadow, var(--wf-surface-shadow));
2943
+ border: var(--wf-border-width) solid var(--wf-color-border);
2647
2944
  }
2648
2945
 
2649
2946
  .wf-card--outlined {
@@ -2658,10 +2955,13 @@ body.wf-dragging {
2658
2955
  cursor: pointer;
2659
2956
  }
2660
2957
 
2661
- /* hover 抬升已提炼为 .wf-elevate(_surface.css),此处仅保留语义类 */
2662
- .wf-card--hover {
2958
+ .wf-card--clickable:focus-visible {
2959
+ outline: none;
2960
+ box-shadow: var(--wf-focus-ring);
2663
2961
  }
2664
2962
 
2963
+ /* hover 抬升由 .wf-elevate(_surface.css)承担:wf-card--hover 仅语义标记类(配合 Card hover prop) */
2964
+
2665
2965
  /* 选中态 — 选择卡片(类型选择/模板选择) */
2666
2966
  .wf-card--active {
2667
2967
  border: var(--wf-border-width) solid var(--wf-color-primary);
@@ -3094,7 +3394,7 @@ body.wf-dragging {
3094
3394
  }
3095
3395
 
3096
3396
  .wf-chat-input:hover:not(:disabled) {
3097
- border-color: var(--wf-color-primary-muted, var(--wf-color-primary));
3397
+ border-color: var(--wf-color-primary);
3098
3398
  }
3099
3399
 
3100
3400
  /* 多行 textarea:自适应高度(行数由内容撑开) */
@@ -3422,6 +3722,18 @@ body.wf-dragging {
3422
3722
  .wf-hl-jsx-tag { color: var(--wf-color-error-text); }
3423
3723
  .wf-hl-operator { color: var(--wf-color-text-tertiary); }
3424
3724
 
3725
+ .wf-codeeditor {
3726
+ width: 100%;
3727
+ }
3728
+ .wf-codeeditor-area {
3729
+ width: 100%;
3730
+ color: var(--wf-color-text);
3731
+ }
3732
+ .wf-codeeditor-gutter {
3733
+ border-right: 1px solid var(--wf-color-border);
3734
+ background: var(--wf-color-bg-secondary);
3735
+ }
3736
+
3425
3737
  /* weifuwu/components — Collapse */
3426
3738
 
3427
3739
  .wf-collapse {
@@ -3495,7 +3807,7 @@ body.wf-dragging {
3495
3807
  align-items: center;
3496
3808
  gap: var(--wf-gap-xs);
3497
3809
  color: var(--wf-color-text-tertiary);
3498
- animation: wf-collapse-spin 1s linear infinite;
3810
+ animation: wf-collapse-spin var(--wf-dur-spin) linear infinite;
3499
3811
  }
3500
3812
 
3501
3813
  @keyframes wf-collapse-spin {
@@ -4226,7 +4538,7 @@ body.wf-dragging {
4226
4538
  overflow: hidden;
4227
4539
  background: var(--wf-color-bg);
4228
4540
  font-family: var(--wf-font-mono);
4229
- font-size: 13px;
4541
+ font-size: var(--wf-font-size-sm); /* 13px 同值 token 化——compact 预设可缩放 */
4230
4542
  line-height: 1.6;
4231
4543
  min-width: 0;
4232
4544
  }
@@ -4239,7 +4551,7 @@ body.wf-dragging {
4239
4551
  padding: 8px 12px;
4240
4552
  background: var(--wf-color-fill);
4241
4553
  border-bottom: 1px solid var(--wf-color-border);
4242
- font-size: 12px;
4554
+ font-size: var(--wf-font-size-xs); /* 12px 同值 token 化——compact 预设可缩放 */
4243
4555
  flex-shrink: 0;
4244
4556
  }
4245
4557
  .wf-diffview-title--old {
@@ -4299,7 +4611,7 @@ body.wf-dragging {
4299
4611
  border: 1px dashed var(--wf-color-border);
4300
4612
  border-radius: var(--wf-radius-sm);
4301
4613
  color: var(--wf-color-text-secondary);
4302
- font-size: 12px;
4614
+ font-size: var(--wf-font-size-xs); /* 12px 同值 token 化——compact 预设可缩放 */
4303
4615
  cursor: pointer;
4304
4616
  background: var(--wf-color-bg-subtle);
4305
4617
  user-select: none;
@@ -4312,7 +4624,7 @@ body.wf-dragging {
4312
4624
  .wf-diffview-overflow {
4313
4625
  padding: 8px 12px;
4314
4626
  color: var(--wf-color-text-tertiary);
4315
- font-size: 12px;
4627
+ font-size: var(--wf-font-size-xs); /* 12px 同值 token 化——compact 预设可缩放 */
4316
4628
  text-align: center;
4317
4629
  }
4318
4630
 
@@ -4527,8 +4839,9 @@ body.wf-dragging {
4527
4839
  box-shadow: var(--wf-shadow-md);
4528
4840
  z-index: var(--wf-z-dropdown);
4529
4841
  padding: var(--wf-space-xs) 0;
4530
-
4531
- transform: translateX(-50%);
4842
+ /* **真实 bug**:JS 坐标定位(fixed top/left——usePopup 计算)——transform
4843
+ 残留(旧 CSS 居中方案)把面板推移(-50% 宽度)——视口外不可见(下拉
4844
+ 出现在左上角——agent-browser 实测:rect -70,0)——删除 */
4532
4845
  }
4533
4846
 
4534
4847
  .wf-dropdown--open {
@@ -4634,7 +4947,7 @@ body.wf-dragging {
4634
4947
  font-size: var(--wf-font-size-sm);
4635
4948
  font-weight: var(--wf-font-weight-semibold);
4636
4949
  cursor: pointer;
4637
- transition: background 0.15s;
4950
+ transition: background var(--wf-dur-fast) var(--wf-ease-out);
4638
4951
  }
4639
4952
 
4640
4953
  .wf-editor-tb-btn:hover {
@@ -4651,7 +4964,7 @@ body.wf-dragging {
4651
4964
  }
4652
4965
 
4653
4966
  .wf-editor-tb-btn--link {
4654
- font-size: 14px;
4967
+ font-size: var(--wf-font-size-base); /* 14px 同值 token 化——compact 预设可缩放 */
4655
4968
  }
4656
4969
 
4657
4970
  .wf-editor-tb-sep {
@@ -4905,7 +5218,7 @@ body.wf-dragging {
4905
5218
  border-radius: var(--wf-radius-xs);
4906
5219
  cursor: pointer;
4907
5220
  background: var(--wf-color-bg);
4908
- transition: background 0.1s, border-color 0.1s;
5221
+ transition: background var(--wf-dur-fast) var(--wf-ease-out), border-color var(--wf-dur-fast) var(--wf-ease-out);
4909
5222
  }
4910
5223
 
4911
5224
  .wf-editor-table-grid-cell:hover,
@@ -5118,6 +5431,8 @@ body.wf-dragging {
5118
5431
  margin-top: var(--wf-gap-sm);
5119
5432
  }
5120
5433
 
5434
+ /* ExportCSV 复用 wf-btn 样式(按钮视觉由框架提供)——无独立样式 */
5435
+
5121
5436
  /* weifuwu/components — Field */
5122
5437
 
5123
5438
  .wf-field {
@@ -5236,16 +5551,16 @@ body.wf-dragging {
5236
5551
  }
5237
5552
 
5238
5553
  .wf-filepreview-md pre {
5239
- background: var(--wf-color-bg-muted, var(--wf-color-border));
5554
+ background: var(--wf-color-bg-secondary);
5240
5555
  padding: var(--wf-space-sm) var(--wf-space-md);
5241
5556
  border-radius: var(--wf-radius-sm);
5242
5557
  overflow-x: auto;
5243
5558
  }
5244
5559
 
5245
5560
  .wf-filepreview-md code {
5246
- background: var(--wf-color-bg-muted, var(--wf-color-border));
5561
+ background: var(--wf-color-bg-secondary);
5247
5562
  padding: 1px 4px;
5248
- border-radius: 3px;
5563
+ border-radius: var(--wf-radius-sm);
5249
5564
  }
5250
5565
 
5251
5566
  .wf-filepreview-md pre code {
@@ -5313,39 +5628,195 @@ body.wf-dragging {
5313
5628
  color: var(--wf-color-text-secondary);
5314
5629
  }
5315
5630
 
5316
- /* weifuwu/components — FileUpload */
5317
-
5318
- .wf-upload {
5631
+ /* weifuwu/components — FileTree(文件树浏览器:面包屑 + 列表/编辑态)
5632
+ * 语义 token 化(design/style-professional-plan.md M1——旧 token 体系迁移):
5633
+ * 全部颜色/间距/字号/圆角/动效引用 layout --wf-*,暗色自动适配。
5634
+ */
5635
+ .wf-filetree {
5636
+ border: var(--wf-border-width) solid var(--wf-color-border);
5637
+ border-radius: var(--wf-radius-md);
5638
+ overflow: hidden;
5639
+ font-size: var(--wf-font-size-base);
5640
+ background: var(--wf-color-bg);
5641
+ }
5642
+ .wf-filetree-toolbar {
5319
5643
  display: flex;
5320
- flex-direction: column;
5644
+ align-items: center;
5645
+ justify-content: space-between;
5321
5646
  gap: var(--wf-gap-sm);
5647
+ padding: var(--wf-space-sm) var(--wf-space);
5648
+ border-bottom: var(--wf-border-width) solid var(--wf-color-border);
5649
+ background: var(--wf-color-bg-secondary);
5322
5650
  }
5323
-
5324
- .wf-upload-zone {
5651
+ .wf-filetree-path {
5325
5652
  display: flex;
5326
- flex-direction: column;
5327
5653
  align-items: center;
5328
- justify-content: center;
5329
5654
  gap: var(--wf-gap-xs);
5330
- padding: var(--wf-space-lg);
5331
- border: 2px dashed var(--wf-color-border);
5332
- border-radius: var(--wf-radius);
5333
- background: var(--wf-color-bg-secondary);
5334
- cursor: pointer;
5335
- transition: border-color var(--wf-transition), box-shadow var(--wf-transition), background-color var(--wf-transition), color var(--wf-transition);
5336
- min-height: 120px;
5337
- }
5338
-
5339
- .wf-upload-zone:hover {
5340
- border-color: var(--wf-color-primary);
5341
- background: var(--wf-color-bg);
5655
+ min-width: 0;
5656
+ overflow: hidden;
5657
+ white-space: nowrap;
5342
5658
  }
5343
-
5344
- .wf-upload-zone--disabled {
5345
- opacity: var(--wf-opacity-disabled);
5346
- cursor: not-allowed;
5659
+ .wf-filetree-crumb-wrap {
5660
+ display: inline-flex;
5661
+ align-items: center;
5662
+ gap: var(--wf-gap-xs);
5347
5663
  }
5348
-
5664
+ .wf-filetree-crumb {
5665
+ border: none;
5666
+ background: none;
5667
+ padding: var(--wf-space-xs) var(--wf-gap-xs);
5668
+ font-size: var(--wf-font-size-sm);
5669
+ color: var(--wf-color-text-secondary);
5670
+ cursor: pointer;
5671
+ border-radius: var(--wf-radius-sm);
5672
+ transition: background-color var(--wf-dur-fast) var(--wf-ease-out), color var(--wf-dur-fast) var(--wf-ease-out);
5673
+ }
5674
+ .wf-filetree-crumb:hover {
5675
+ background: var(--wf-state-hover);
5676
+ color: var(--wf-color-text);
5677
+ }
5678
+ .wf-filetree-crumb:focus-visible {
5679
+ outline: none;
5680
+ box-shadow: var(--wf-focus-ring);
5681
+ }
5682
+ .wf-filetree-sep {
5683
+ color: var(--wf-color-text-tertiary);
5684
+ font-size: var(--wf-font-size-sm);
5685
+ }
5686
+ .wf-filetree-actions {
5687
+ display: flex;
5688
+ align-items: center;
5689
+ gap: var(--wf-gap-xs);
5690
+ flex-shrink: 0;
5691
+ }
5692
+ .wf-filetree-list {
5693
+ max-height: 320px;
5694
+ overflow: auto;
5695
+ padding: var(--wf-space-xs);
5696
+ }
5697
+ .wf-filetree-item {
5698
+ display: flex;
5699
+ align-items: center;
5700
+ gap: var(--wf-gap-sm);
5701
+ width: 100%;
5702
+ border: none;
5703
+ background: none;
5704
+ padding: var(--wf-space-sm);
5705
+ border-radius: var(--wf-radius);
5706
+ cursor: pointer;
5707
+ text-align: left;
5708
+ font-size: var(--wf-font-size-base);
5709
+ color: var(--wf-color-text);
5710
+ transition: background-color var(--wf-dur-fast) var(--wf-ease-out);
5711
+ }
5712
+ .wf-filetree-item:hover {
5713
+ background: var(--wf-state-hover);
5714
+ }
5715
+ .wf-filetree-item:focus-visible {
5716
+ outline: none;
5717
+ box-shadow: var(--wf-focus-ring);
5718
+ }
5719
+ .wf-filetree-dir {
5720
+ color: var(--wf-color-primary-text);
5721
+ }
5722
+ .wf-filetree-file {
5723
+ color: var(--wf-color-text-tertiary);
5724
+ }
5725
+ .wf-filetree-name {
5726
+ flex: 1;
5727
+ min-width: 0;
5728
+ overflow: hidden;
5729
+ text-overflow: ellipsis;
5730
+ white-space: nowrap;
5731
+ }
5732
+ .wf-filetree-meta {
5733
+ font-size: var(--wf-font-size-sm);
5734
+ color: var(--wf-color-text-tertiary);
5735
+ flex-shrink: 0;
5736
+ }
5737
+ .wf-filetree-empty {
5738
+ padding: var(--wf-space-xl) var(--wf-space);
5739
+ text-align: center;
5740
+ font-size: var(--wf-font-size-base);
5741
+ }
5742
+ .wf-filetree-editor {
5743
+ padding: var(--wf-space);
5744
+ }
5745
+ .wf-filetree-editor-head {
5746
+ display: flex;
5747
+ align-items: center;
5748
+ gap: var(--wf-gap-sm);
5749
+ margin-bottom: var(--wf-gap-sm);
5750
+ }
5751
+ .wf-filetree-filename {
5752
+ flex: 1;
5753
+ min-width: 0;
5754
+ overflow: hidden;
5755
+ text-overflow: ellipsis;
5756
+ white-space: nowrap;
5757
+ font-size: var(--wf-font-size-base);
5758
+ font-weight: var(--wf-font-weight-medium);
5759
+ }
5760
+ .wf-filetree-editor-area {
5761
+ width: 100%;
5762
+ box-sizing: border-box;
5763
+ border: var(--wf-border-width) solid var(--wf-color-border);
5764
+ border-radius: var(--wf-radius);
5765
+ padding: var(--wf-space-sm);
5766
+ font-family: var(--wf-font-mono);
5767
+ font-size: var(--wf-font-size-sm);
5768
+ line-height: 1.6;
5769
+ resize: vertical;
5770
+ background: var(--wf-color-bg);
5771
+ color: var(--wf-color-text);
5772
+ }
5773
+ .wf-filetree-preview {
5774
+ margin: 0;
5775
+ padding: var(--wf-space-sm);
5776
+ max-height: 280px;
5777
+ overflow: auto;
5778
+ font-family: var(--wf-font-mono);
5779
+ font-size: var(--wf-font-size-sm);
5780
+ line-height: 1.6;
5781
+ background: var(--wf-color-bg-secondary);
5782
+ border-radius: var(--wf-radius);
5783
+ white-space: pre-wrap;
5784
+ word-break: break-all;
5785
+ }
5786
+
5787
+ /* weifuwu/components — FileUpload */
5788
+
5789
+ .wf-upload {
5790
+ display: flex;
5791
+ flex-direction: column;
5792
+ gap: var(--wf-gap-sm);
5793
+ }
5794
+
5795
+ .wf-upload-zone {
5796
+ display: flex;
5797
+ flex-direction: column;
5798
+ align-items: center;
5799
+ justify-content: center;
5800
+ gap: var(--wf-gap-xs);
5801
+ padding: var(--wf-space-lg);
5802
+ border: 2px dashed var(--wf-color-border);
5803
+ border-radius: var(--wf-radius);
5804
+ background: var(--wf-color-bg-secondary);
5805
+ cursor: pointer;
5806
+ transition: border-color var(--wf-transition), box-shadow var(--wf-transition), background-color var(--wf-transition), color var(--wf-transition);
5807
+ min-height: 120px;
5808
+ }
5809
+
5810
+ .wf-upload-zone:hover {
5811
+ border-color: var(--wf-color-primary);
5812
+ background: var(--wf-color-bg);
5813
+ }
5814
+
5815
+ .wf-upload-zone--disabled {
5816
+ opacity: var(--wf-opacity-disabled);
5817
+ cursor: not-allowed;
5818
+ }
5819
+
5349
5820
  .wf-upload-zone--err {
5350
5821
  border-color: var(--wf-color-error);
5351
5822
  }
@@ -5670,21 +6141,19 @@ body.wf-dragging {
5670
6141
  pointer-events: none;
5671
6142
  }
5672
6143
 
5673
- /* placement 修正(与 Tooltip/Popover 一致):top 整体上移 + 居中,bottom 居中,left/right 垂直居中 */
6144
+ /* placement 定位全权归 JS(usePopup computePos——fixed left/top 已含中心对齐/偏移)——
6145
+ * 旧 transform 残留(top/bottom/left/right 修正)与 JS 坐标叠加双倍偏移——
6146
+ * 同 Tooltip/Popover/Popconfirm 修复——已删 */
5674
6147
  .wf-hover-card--top {
5675
- transform: translateX(-50%) translateY(-100%);
5676
6148
  }
5677
6149
 
5678
6150
  .wf-hover-card--bottom {
5679
- transform: translateX(-50%);
5680
6151
  }
5681
6152
 
5682
6153
  .wf-hover-card--left {
5683
- transform: translateY(-50%) translateX(-100%);
5684
6154
  }
5685
6155
 
5686
6156
  .wf-hover-card--right {
5687
- transform: translateY(-50%);
5688
6157
  }
5689
6158
 
5690
6159
  /* weifuwu/components — Icon(内联 SVG 基础样式) */
@@ -5695,6 +6164,10 @@ body.wf-dragging {
5695
6164
  vertical-align: -0.125em; /* 与文字基线对齐 */
5696
6165
  }
5697
6166
 
6167
+ .wf-imagecropper {
6168
+ display: inline-block;
6169
+ }
6170
+
5698
6171
  /* weifuwu/components — Img */
5699
6172
 
5700
6173
  .wf-image {
@@ -6256,10 +6729,10 @@ body.wf-dragging {
6256
6729
  justify-content: space-between;
6257
6730
  padding: var(--wf-space-sm) 12px;
6258
6731
  font-weight: 600;
6259
- font-size: 13px;
6732
+ font-size: var(--wf-font-size-sm); /* 13px 同值 token 化——compact 预设可缩放 */
6260
6733
  }
6261
6734
  .wf-kanban-col-count {
6262
- font-size: 12px;
6735
+ font-size: var(--wf-font-size-xs); /* 12px 同值 token 化——compact 预设可缩放 */
6263
6736
  color: var(--wf-color-text-tertiary);
6264
6737
  background: var(--wf-color-fill);
6265
6738
  border-radius: 50%;
@@ -6299,13 +6772,13 @@ body.wf-dragging {
6299
6772
  }
6300
6773
 
6301
6774
  .wf-kanban-card-title {
6302
- font-size: 13px;
6775
+ font-size: var(--wf-font-size-sm); /* 13px 同值 token 化——compact 预设可缩放 */
6303
6776
  line-height: 1.5;
6304
6777
  min-width: 0;
6305
6778
  }
6306
6779
 
6307
6780
  .wf-kanban-tag {
6308
- font-size: 11px;
6781
+ font-size: var(--wf-font-size-xs); /* 与 Tag 组件基准一致(10px 白名单复核——11px 偏小) */
6309
6782
  color: var(--wf-color-primary-text);
6310
6783
  background: var(--wf-color-primary-bg);
6311
6784
  border-radius: var(--wf-radius-xs);
@@ -6386,7 +6859,7 @@ body.wf-dragging {
6386
6859
  background: transparent;
6387
6860
  color: var(--wf-color-text-secondary);
6388
6861
  cursor: pointer;
6389
- font-size: 12px;
6862
+ font-size: var(--wf-font-size-xs); /* 12px 同值 token 化——compact 预设可缩放 */
6390
6863
  transition: background var(--wf-dur-fast) var(--wf-ease-standard);
6391
6864
  }
6392
6865
 
@@ -6550,7 +7023,7 @@ body.wf-dragging {
6550
7023
  border: 3px solid var(--wf-color-border);
6551
7024
  border-top-color: var(--wf-color-primary);
6552
7025
  border-radius: 50%;
6553
- animation: wf-spin 0.6s linear infinite;
7026
+ animation: wf-spin var(--wf-dur-spin) linear infinite;
6554
7027
  }
6555
7028
 
6556
7029
  @keyframes wf-spin {
@@ -6768,6 +7241,26 @@ body.wf-dragging {
6768
7241
  background: var(--wf-color-bg-secondary);
6769
7242
  }
6770
7243
 
7244
+ .wf-md-editor {
7245
+ width: 100%;
7246
+ }
7247
+ .wf-md-editor-textarea {
7248
+ width: 100%;
7249
+ }
7250
+
7251
+ .wf-math-frac {
7252
+ display: inline-flex;
7253
+ flex-direction: column;
7254
+ vertical-align: middle;
7255
+ text-align: center;
7256
+ margin: 0 2px;
7257
+ }
7258
+ .wf-math-num { border-bottom: 1px solid currentColor; padding: 0 4px; }
7259
+ .wf-math-den { padding: 0 4px; }
7260
+ .wf-math-sqrt-radical { margin-right: 1px; }
7261
+ .wf-math-sup { font-size: 0.75em; vertical-align: super; }
7262
+ .wf-math-sub { font-size: 0.75em; vertical-align: sub; }
7263
+
6771
7264
  /* weifuwu/components — Mentions */
6772
7265
 
6773
7266
  .wf-mentions {
@@ -6859,7 +7352,7 @@ body.wf-dragging {
6859
7352
  font-size: var(--wf-font-size-xs);
6860
7353
  font-weight: var(--wf-font-weight-semibold);
6861
7354
  color: var(--wf-color-text-tertiary);
6862
- letter-spacing: 0.02em;
7355
+ letter-spacing: var(--wf-heading-tracking); /* CJK 默认 0,英文可覆盖 */
6863
7356
  }
6864
7357
 
6865
7358
  .wf-menu-item {
@@ -6880,6 +7373,10 @@ body.wf-dragging {
6880
7373
  color: var(--wf-color-text);
6881
7374
  }
6882
7375
 
7376
+ .wf-menu-item:active {
7377
+ background: var(--wf-state-pressed);
7378
+ }
7379
+
6883
7380
  .wf-menu-item--active {
6884
7381
  background: var(--wf-color-primary-bg);
6885
7382
  color: var(--wf-color-primary-text);
@@ -7141,7 +7638,7 @@ body.wf-dragging {
7141
7638
  border-right: 3px solid var(--wf-color-primary);
7142
7639
  border-right-color: var(--wf-color-primary);
7143
7640
  /* 1s 光标式平缓闪烁(≤1Hz,远低于 3Hz 光敏阈值);reduced-motion 下基线降为 0.01ms */
7144
- animation: wf-bubble-blink 1.1s var(--wf-ease-in-out) infinite;
7641
+ animation: wf-bubble-blink var(--wf-dur-blink) var(--wf-ease-in-out) infinite;
7145
7642
  }
7146
7643
 
7147
7644
  @keyframes wf-bubble-blink {
@@ -7220,7 +7717,7 @@ body.wf-dragging {
7220
7717
 
7221
7718
  .wf-modal-content {
7222
7719
  background: var(--wf-color-bg-elevated);
7223
- border-radius: var(--wf-modal-radius, var(--wf-radius-md));
7720
+ border-radius: var(--wf-modal-radius, var(--wf-radius-lg)); /* 浮层圆角矩阵:Modal 12(抬升语义) */
7224
7721
  box-shadow: var(--wf-modal-shadow, var(--wf-shadow-lg));
7225
7722
  min-width: var(--wf-modal-width, 400px);
7226
7723
  max-width: 90vw;
@@ -7527,10 +8024,10 @@ body.wf-dragging {
7527
8024
  line-height: var(--wf-line-height-tight);
7528
8025
  }
7529
8026
 
7530
- /* display 档:顶级页面标题,配窄字距 */
8027
+ /* display 档:顶级页面标题,配窄字距(token 可覆盖——CJK 长标题可归零) */
7531
8028
  .wf-page-title--display {
7532
8029
  font-size: var(--wf-font-size-display);
7533
- letter-spacing: -0.5px;
8030
+ letter-spacing: var(--wf-heading-display-tracking);
7534
8031
  }
7535
8032
 
7536
8033
  .wf-page-sub {
@@ -7581,6 +8078,15 @@ body.wf-dragging {
7581
8078
  color: var(--wf-color-primary-text);
7582
8079
  }
7583
8080
 
8081
+ .wf-page-btn:active:not(:disabled):not(.wf-page-btn--active) {
8082
+ background: var(--wf-state-pressed);
8083
+ }
8084
+
8085
+ .wf-page-btn:focus-visible {
8086
+ outline: none;
8087
+ box-shadow: var(--wf-focus-ring);
8088
+ }
8089
+
7584
8090
  .wf-page-btn--active {
7585
8091
  background: var(--wf-color-primary);
7586
8092
  border-color: var(--wf-color-primary);
@@ -7710,7 +8216,7 @@ body.wf-dragging {
7710
8216
  background: var(--wf-color-bg);
7711
8217
  border: 1px solid var(--wf-color-border);
7712
8218
  border-radius: var(--wf-radius-md);
7713
- font-size: 13px;
8219
+ font-size: var(--wf-font-size-sm); /* 13px 同值 token 化——compact 预设可缩放 */
7714
8220
  font-weight: 500;
7715
8221
  pointer-events: auto;
7716
8222
  white-space: nowrap;
@@ -7744,7 +8250,7 @@ body.wf-dragging {
7744
8250
  position: absolute;
7745
8251
  bottom: -24px;
7746
8252
  left: 0;
7747
- font-size: 12px;
8253
+ font-size: var(--wf-font-size-xs); /* 12px 同值 token 化——compact 预设可缩放 */
7748
8254
  color: var(--wf-color-warning-text);
7749
8255
  }
7750
8256
 
@@ -7769,10 +8275,10 @@ body.wf-dragging {
7769
8275
  font-size: var(--wf-font-size-sm);
7770
8276
  }
7771
8277
 
7772
- .wf-popconfirm--bottom { transform: translateX(-50%); }
7773
- .wf-popconfirm--top { transform: translateX(-50%) translateY(-100%); }
7774
- .wf-popconfirm--left { transform: translateY(-50%) translateX(-100%); }
7775
- .wf-popconfirm--right { transform: translateY(-50%); }
8278
+ .wf-popconfirm--bottom { /* transform 残留已删(同 Tooltip 修复) */ }
8279
+ .wf-popconfirm--top { /* 同上 */ }
8280
+ .wf-popconfirm--left { /* 同上 */ }
8281
+ .wf-popconfirm--right { /* 同上 */ }
7776
8282
 
7777
8283
  .wf-popconfirm--enter {
7778
8284
  animation: wf-popconfirm-in var(--wf-dur-md) var(--wf-ease-standard);
@@ -7843,19 +8349,19 @@ body.wf-dragging {
7843
8349
  }
7844
8350
 
7845
8351
  .wf-popover--bottom {
7846
- transform: translateX(-50%);
8352
+ /* transform 残留已删(旧 absolute 定位——JS 坐标叠加双倍偏移——同 Tooltip 修复) */
7847
8353
  }
7848
8354
 
7849
8355
  .wf-popover--top {
7850
- transform: translateX(-50%) translateY(-100%);
8356
+ /* 定位全权归 JS(同 Tooltip 修复——旧 transform 与 fixed 坐标叠加双倍偏移) */
7851
8357
  }
7852
8358
 
7853
8359
  .wf-popover--left {
7854
- transform: translateY(-50%) translateX(-100%);
8360
+ /* 同上 */
7855
8361
  }
7856
8362
 
7857
8363
  .wf-popover--right {
7858
- transform: translateY(-50%);
8364
+ /* 同上 */
7859
8365
  }
7860
8366
 
7861
8367
  .wf-popover-arrow {
@@ -7942,13 +8448,109 @@ body.wf-dragging {
7942
8448
  /* indeterminate:不确定态(动画扫动) */
7943
8449
  .wf-progress--indeterminate .wf-progress-fill {
7944
8450
  width: 40%;
7945
- animation: wf-progress-indeterminate 1.4s var(--wf-ease-in-out) infinite;
8451
+ animation: wf-progress-indeterminate var(--wf-dur-progress) var(--wf-ease-in-out) infinite;
7946
8452
  }
7947
8453
  @keyframes wf-progress-indeterminate {
7948
8454
  0% { transform: translateX(-100%); }
7949
8455
  100% { transform: translateX(350%); }
7950
8456
  }
7951
8457
 
8458
+ /* weifuwu/components — PromptTemplate 提示词模板编辑器 */
8459
+
8460
+ .wf-prompt-template {
8461
+ display: flex;
8462
+ flex-direction: column;
8463
+ gap: var(--wf-gap-sm);
8464
+ }
8465
+
8466
+ .wf-prompt-label {
8467
+ font-size: var(--wf-font-size-sm);
8468
+ font-weight: var(--wf-font-weight-medium);
8469
+ color: var(--wf-color-text);
8470
+ }
8471
+
8472
+ /* 变量 chips 行 */
8473
+ .wf-prompt-chips {
8474
+ display: flex;
8475
+ align-items: center;
8476
+ flex-wrap: wrap;
8477
+ gap: var(--wf-gap-xs);
8478
+ }
8479
+
8480
+ .wf-prompt-chips-hint {
8481
+ font-size: var(--wf-font-size-xs);
8482
+ color: var(--wf-color-text-tertiary);
8483
+ }
8484
+
8485
+ .wf-prompt-chip {
8486
+ padding: 2px var(--wf-space-sm);
8487
+ border: 1px solid var(--wf-color-border);
8488
+ border-radius: var(--wf-radius-sm);
8489
+ background: var(--wf-color-bg-secondary);
8490
+ font-family: var(--wf-font-mono);
8491
+ font-size: var(--wf-font-size-xs);
8492
+ color: var(--wf-color-primary-text);
8493
+ cursor: pointer;
8494
+ transition: border-color var(--wf-dur-fast) var(--wf-ease-out),
8495
+ background-color var(--wf-dur-fast) var(--wf-ease-out);
8496
+ }
8497
+
8498
+ .wf-prompt-chip:hover:not(:disabled) {
8499
+ border-color: var(--wf-color-primary);
8500
+ background: var(--wf-color-primary-bg);
8501
+ }
8502
+
8503
+ .wf-prompt-chip:focus-visible {
8504
+ outline: none;
8505
+ box-shadow: var(--wf-focus-ring);
8506
+ }
8507
+
8508
+ .wf-prompt-chip:disabled {
8509
+ cursor: not-allowed;
8510
+ opacity: 0.6;
8511
+ }
8512
+
8513
+ /* 模板编辑区 */
8514
+ .wf-prompt-editor {
8515
+ width: 100%;
8516
+ min-height: 120px;
8517
+ padding: var(--wf-space-md);
8518
+ border: 1px solid var(--wf-color-border);
8519
+ border-radius: var(--wf-radius-md);
8520
+ background: var(--wf-color-bg-elevated);
8521
+ color: var(--wf-color-text);
8522
+ font-family: var(--wf-font-mono);
8523
+ font-size: var(--wf-font-size-sm);
8524
+ line-height: 1.6;
8525
+ resize: vertical;
8526
+ }
8527
+
8528
+ .wf-prompt-editor:focus-visible {
8529
+ outline: none;
8530
+ box-shadow: var(--wf-focus-ring);
8531
+ }
8532
+
8533
+ /* 预览区(填充结果) */
8534
+ .wf-prompt-preview {
8535
+ border: 1px dashed var(--wf-color-border);
8536
+ border-radius: var(--wf-radius-md);
8537
+ padding: var(--wf-space-md);
8538
+ background: var(--wf-color-bg-secondary);
8539
+ }
8540
+
8541
+ .wf-prompt-preview-title {
8542
+ font-size: var(--wf-font-size-xs);
8543
+ color: var(--wf-color-text-tertiary);
8544
+ margin-bottom: var(--wf-space-xs);
8545
+ }
8546
+
8547
+ .wf-prompt-preview-body {
8548
+ font-size: var(--wf-font-size-sm);
8549
+ color: var(--wf-color-text);
8550
+ white-space: pre-wrap;
8551
+ word-break: break-word;
8552
+ }
8553
+
7952
8554
  /* weifuwu/components — RadioGroup */
7953
8555
 
7954
8556
  .wf-radio-group {
@@ -8051,6 +8653,9 @@ body.wf-dragging {
8051
8653
  .wf-rate-star:hover {
8052
8654
  transform: scale(1.15);
8053
8655
  }
8656
+ .wf-rate-star:active {
8657
+ transform: scale(0.95);
8658
+ }
8054
8659
 
8055
8660
  .wf-rate-star:focus-visible {
8056
8661
  outline: none;
@@ -8171,6 +8776,74 @@ body.wf-dragging {
8171
8776
  word-break: break-word;
8172
8777
  }
8173
8778
 
8779
+ /* weifuwu/components — RelationGraph(关系图谱:SVG 画布 + 图例)
8780
+ * 语义 token 化(M1——旧 token 体系迁移:--wf-border/--wf-text* → --wf-color-*)。
8781
+ */
8782
+ .wf-rg {
8783
+ display: flex;
8784
+ flex-direction: column;
8785
+ gap: var(--wf-gap-sm);
8786
+ }
8787
+ .wf-rg-canvas {
8788
+ display: block;
8789
+ border: var(--wf-border-width) solid var(--wf-color-border);
8790
+ border-radius: var(--wf-radius-md);
8791
+ background:
8792
+ radial-gradient(circle at 1px 1px, var(--wf-color-border) 1px, transparent 0) 0 0 / 24px 24px;
8793
+ overflow: hidden;
8794
+ }
8795
+ .wf-rg-edge {
8796
+ transition: opacity var(--wf-dur-fast) var(--wf-ease-out);
8797
+ }
8798
+ .wf-rg-node {
8799
+ cursor: pointer;
8800
+ }
8801
+ .wf-rg-node circle {
8802
+ transition: stroke-width var(--wf-dur-fast) var(--wf-ease-out);
8803
+ }
8804
+ .wf-rg-node:hover circle {
8805
+ stroke-width: 3;
8806
+ }
8807
+ .wf-rg-node--selected circle {
8808
+ stroke-width: 3.5;
8809
+ stroke-dasharray: 4 3;
8810
+ }
8811
+ .wf-rg-label {
8812
+ font-size: var(--wf-font-size-base);
8813
+ font-weight: var(--wf-font-weight-semibold);
8814
+ fill: var(--wf-color-text);
8815
+ pointer-events: none;
8816
+ }
8817
+ .wf-rg-sublabel {
8818
+ font-size: var(--wf-font-size-xs);
8819
+ fill: var(--wf-color-text-tertiary);
8820
+ pointer-events: none;
8821
+ }
8822
+ .wf-rg-legend {
8823
+ display: flex;
8824
+ flex-wrap: wrap;
8825
+ gap: var(--wf-gap-xs) var(--wf-gap-md);
8826
+ font-size: var(--wf-font-size-sm);
8827
+ color: var(--wf-color-text-secondary);
8828
+ }
8829
+ .wf-rg-legend-item {
8830
+ display: inline-flex;
8831
+ align-items: center;
8832
+ gap: var(--wf-gap-xs);
8833
+ }
8834
+ .wf-rg-swatch {
8835
+ display: inline-block;
8836
+ width: 10px;
8837
+ height: 10px;
8838
+ border-radius: 50%;
8839
+ }
8840
+ .wf-rg-line {
8841
+ display: inline-block;
8842
+ width: 16px;
8843
+ height: 3px;
8844
+ border-radius: var(--wf-radius-xs);
8845
+ }
8846
+
8174
8847
  /* weifuwu/components — Resizable */
8175
8848
 
8176
8849
  .wf-resizable {
@@ -8340,7 +9013,7 @@ body.wf-dragging {
8340
9013
  background: none;
8341
9014
  border: none;
8342
9015
  cursor: pointer;
8343
- font-size: 12px;
9016
+ font-size: var(--wf-font-size-xs); /* 12px 同值 token 化——compact 预设可缩放 */
8344
9017
  color: var(--wf-color-text-tertiary);
8345
9018
  padding: 2px;
8346
9019
  line-height: 1;
@@ -8350,6 +9023,14 @@ body.wf-dragging {
8350
9023
  .wf-search-clear:hover {
8351
9024
  color: var(--wf-color-text);
8352
9025
  }
9026
+ .wf-search-clear:active {
9027
+ opacity: 0.6;
9028
+ }
9029
+ .wf-search-clear:focus-visible {
9030
+ outline: none;
9031
+ box-shadow: var(--wf-focus-ring);
9032
+ border-radius: var(--wf-radius-sm);
9033
+ }
8353
9034
 
8354
9035
  /* 受控 + 自定义清除按钮时隐藏原生 ×(type=search WebKit 双清除 UI——
8355
9036
  自定义 wf-search-clear 是设计清除入口,原生 × 样式不统一且重复) */
@@ -8471,6 +9152,11 @@ body.wf-dragging {
8471
9152
  box-shadow: var(--wf-focus-ring);
8472
9153
  }
8473
9154
 
9155
+ /* hover 反馈(对齐 Input——可感知可交互;disabled 不反馈) */
9156
+ .wf-select:hover:not(:disabled) {
9157
+ border-color: var(--wf-color-border-dark);
9158
+ }
9159
+
8474
9160
  .wf-select:disabled {
8475
9161
  opacity: var(--wf-opacity-disabled);
8476
9162
  cursor: not-allowed;
@@ -8494,6 +9180,9 @@ body.wf-dragging {
8494
9180
  cursor: pointer;
8495
9181
  transition: border-color var(--wf-transition), box-shadow var(--wf-transition), background-color var(--wf-transition), color var(--wf-transition);
8496
9182
  }
9183
+ .wf-select-search-trigger:hover {
9184
+ border-color: var(--wf-color-border-dark);
9185
+ }
8497
9186
  .wf-select-search-trigger:focus-within {
8498
9187
  border-color: var(--wf-color-primary);
8499
9188
  }
@@ -8695,6 +9384,7 @@ body.wf-dragging {
8695
9384
  }
8696
9385
 
8697
9386
  .wf-session-item:hover { background: var(--wf-color-bg-tertiary); }
9387
+ .wf-session-item:active { background: var(--wf-state-pressed); }
8698
9388
 
8699
9389
  .wf-session-item--focus { background: var(--wf-color-bg-tertiary); }
8700
9390
 
@@ -9236,11 +9926,29 @@ body.wf-dragging {
9236
9926
  .wf-slider-track {
9237
9927
  flex: 1;
9238
9928
  min-width: 0;
9929
+ /* **垂直基准变量(真实 bug——thumb/fill/mark 三线不齐)**:thumb 基于
9930
+ input 盒(margin 8 + 高 6)——fill/mark 曾基于 track 中线(inset:0/
9931
+ margin:auto)——但 track 是 flex item 被 value 文本拉伸(align-items
9932
+ stretch——行高 23px)→ 基准错位(常态 0.5px——字体加载后行高变
9933
+ 22/24 → 差 1.5px——全量并发偶发失败)——统一三者基准 = input 盒 */
9934
+ --wf-slider-track-margin: 8px;
9935
+ --wf-slider-track-h: 6px;
9936
+ /* **absolute 定位基准(真实 bug——fill/marks 错位)**:fill/marks 都是
9937
+ absolute——track 无 position → 基准落到外层容器(wf-slider/页面)——
9938
+ fill 中心偏离轨道中线(价格区间 fill 在 thumb 下方 15px)——thumb/
9939
+ fill/mark 三线不齐——加 relative 使 fill/marks 相对轨道定位 */
9940
+ position: relative;
9239
9941
  }
9240
9942
 
9241
9943
  .wf-slider-input {
9242
9944
  width: 100%;
9243
9945
  height: 6px;
9946
+ /* **baseline 对齐消除(真实 bug——thumb/fill/mark 1px 偏差)**:input 是
9947
+ inline-block(默认)——行框内 baseline 对齐使 input 视觉下移(字体
9948
+ descent ~1px)——margin 8px 不是真实视觉顶——thumb 中心比 marks/fill
9949
+ 低 1px(全量并发偶发失败根因)——vertical-align: top 使 input 顶对齐
9950
+ 行框顶(margin 精确生效——三线同基准) */
9951
+ vertical-align: top;
9244
9952
  appearance: none;
9245
9953
  /* 清零 UA 默认 padding/border(Chrome range 默认 padding 9px + border 1px)——
9246
9954
  否则 content 区被压缩,thumb 活动范围 ≠ 盒宽,marks/渐变偏移公式错位 */
@@ -9250,7 +9958,7 @@ body.wf-dragging {
9250
9958
  border-radius: var(--wf-radius-xs);
9251
9959
  outline: none;
9252
9960
  cursor: pointer;
9253
- margin: 8px 0; /* thumb 18px 超出轨道——留出 hover/拖拽空间 */
9961
+ margin: var(--wf-slider-track-margin) 0; /* thumb 18px 超出轨道——留出 hover/拖拽空间 */
9254
9962
  }
9255
9963
 
9256
9964
  /* hover / 拖拽中(active):thumb 放大 + 加深(跨浏览器一致) */
@@ -9336,15 +10044,29 @@ body.wf-dragging {
9336
10044
 
9337
10045
  /* ── 刻度标记(marks) ── */
9338
10046
  .wf-slider-marks {
9339
- position: relative;
9340
- height: 18px;
9341
- margin-top: 2px;
10047
+ position: absolute;
10048
+ left: 0;
10049
+ right: 0;
10050
+ /* 基准 = input 盒(与 thumb 一致——不受 track 拉伸影响) */
10051
+ top: var(--wf-slider-track-margin);
10052
+ bottom: auto;
10053
+ height: var(--wf-slider-track-h);
9342
10054
  pointer-events: none;
9343
10055
  }
9344
10056
 
10057
+ /* 区间模式:input absolute 撑满容器(36px)——marks 基准 = 容器中线
10058
+ (与 thumb/fill 一致——普通模式的 input 盒基准不适用) */
10059
+ .wf-slider-range .wf-slider-marks {
10060
+ top: 0;
10061
+ bottom: 0;
10062
+ height: auto;
10063
+ }
10064
+
9345
10065
  .wf-slider-mark {
9346
10066
  position: absolute;
9347
- top: 0;
10067
+ /* dot 中心 = 轨道中线(dot 半高 4px——thumb/填充/刻度同一条直线——
10068
+ 用户要求;label 在 dot 下方(溢出可见——刻度标签) */
10069
+ top: calc(50% - 4px);
9348
10070
  transform: translateX(-50%);
9349
10071
  display: flex;
9350
10072
  flex-direction: column;
@@ -9373,6 +10095,76 @@ body.wf-dragging {
9373
10095
  .wf-slider-input:disabled::-webkit-slider-thumb,
9374
10096
  .wf-slider-input:disabled::-moz-range-thumb { cursor: not-allowed; }
9375
10097
 
10098
+ /* ── range 模式:双滑块(lo/hi input 叠加——轨道透明,填充分离绘制) ── */
10099
+ .wf-slider-range {
10100
+ position: relative;
10101
+ /* thumb 18px 超出轨道——容器高度容纳(原 margin:8px 0 语义移至容器) */
10102
+ min-height: 36px;
10103
+ display: flex;
10104
+ align-items: center;
10105
+ }
10106
+
10107
+ .wf-slider-range .wf-slider-input {
10108
+ position: absolute;
10109
+ inset: 0;
10110
+ margin: 0;
10111
+ background: transparent;
10112
+ /* **撑满轨道(真实 bug——thumb 与 fill 错位 15px)**:全局 .wf-slider-input
10113
+ height: 6px 与 inset: 0 冲突(absolute 时 top+height 决定尺寸——bottom 被
10114
+ 忽略)→ input 6px 高在轨道顶部——thumb 中心 = 轨道顶 + 3——而 fill 中心 =
10115
+ 轨道中线——thumb/fill 不同线——height auto 使 inset 0 生效(撑满轨道——
10116
+ thumb 中心 = 轨道中线 = fill 中心) */
10117
+ height: auto;
10118
+ pointer-events: none; /* 轨道不响应——点击/拖拽只走 thumb(双 thumb 互不抢事件) */
10119
+ /* 层级 = DOM 顺序(hi 后渲染天然在上——重叠时点最上层 = 上限)——audit 禁 z-index 数字 */
10120
+ }
10121
+
10122
+ /* thumb 可交互(pointer-events 只在 thumb 上——轨道命中不抢) */
10123
+ .wf-slider-range .wf-slider-input::-webkit-slider-thumb { pointer-events: auto; }
10124
+ .wf-slider-range .wf-slider-input::-moz-range-thumb { pointer-events: auto; }
10125
+
10126
+ /* range 模式轨道填充(双 thumb 之间) */
10127
+ .wf-slider-range-fill {
10128
+ position: absolute;
10129
+ /* 基准 = 容器中线(区间模式 input 撑满容器——thumb 中心 = 容器中线——
10130
+ 与 marks 同基准——不受容器高度变化影响) */
10131
+ top: 0;
10132
+ bottom: 0;
10133
+ margin: auto;
10134
+ height: var(--wf-slider-track-h);
10135
+ background: var(--wf-color-primary);
10136
+ border-radius: var(--wf-radius-xs);
10137
+ pointer-events: none;
10138
+ }
10139
+
10140
+ .wf-sortable {
10141
+ list-style: none;
10142
+ }
10143
+
10144
+ .wf-sortable-item {
10145
+ cursor: grab;
10146
+ user-select: none;
10147
+ transition: transform var(--wf-dur-fast) var(--wf-ease-out), box-shadow var(--wf-dur-fast) var(--wf-ease-out);
10148
+ border-radius: var(--wf-radius-sm);
10149
+ }
10150
+
10151
+ .wf-sortable-item:active {
10152
+ cursor: grabbing;
10153
+ }
10154
+
10155
+ .wf-sortable-item.wf-sortable-dragging {
10156
+ opacity: 0.6;
10157
+ }
10158
+
10159
+ .wf-sortable-item.wf-sortable-over {
10160
+ transform: translateY(2px);
10161
+ box-shadow: 0 0 0 2px var(--wf-color-primary-bg), 0 0 0 1px var(--wf-color-primary);
10162
+ }
10163
+
10164
+ .wf-sortable-item:hover {
10165
+ background: var(--wf-color-bg-hover);
10166
+ }
10167
+
9376
10168
  /* weifuwu/components — Space 间距容器 */
9377
10169
 
9378
10170
  .wf-space {
@@ -9404,7 +10196,7 @@ body.wf-dragging {
9404
10196
  padding: var(--wf-space-md);
9405
10197
  border-radius: var(--wf-radius-md);
9406
10198
  background: var(--wf-surface-bg);
9407
- box-shadow: var(--wf-surface-shadow);
10199
+ border: var(--wf-border-width) solid var(--wf-color-border-light); /* 边界即结构:细边框——阴影仅抬升(hover) */
9408
10200
  font-family: var(--wf-font-sans);
9409
10201
  }
9410
10202
 
@@ -9451,6 +10243,10 @@ body.wf-dragging {
9451
10243
  transform: translateY(-2px);
9452
10244
  box-shadow: var(--wf-shadow-md);
9453
10245
  }
10246
+ .wf-stat--clickable:focus-visible {
10247
+ outline: none;
10248
+ box-shadow: var(--wf-shadow-md), var(--wf-focus-ring);
10249
+ }
9454
10250
 
9455
10251
  /* weifuwu/components — Steps */
9456
10252
 
@@ -9486,7 +10282,7 @@ body.wf-dragging {
9486
10282
  .wf-step--done .wf-step-num {
9487
10283
  background: var(--wf-color-primary);
9488
10284
  color: var(--wf-color-on-brand);
9489
- font-size: 14px;
10285
+ font-size: var(--wf-font-size-base); /* 14px 同值 token 化——compact 预设可缩放 */
9490
10286
  }
9491
10287
 
9492
10288
  .wf-step--current .wf-step-num {
@@ -9589,6 +10385,105 @@ body.wf-dragging {
9589
10385
  color: var(--wf-color-text);
9590
10386
  }
9591
10387
 
10388
+ /* weifuwu/components — TabBar 底部标签栏 */
10389
+
10390
+ .wf-tab-bar {
10391
+ display: flex;
10392
+ align-items: stretch;
10393
+ background: var(--wf-color-bg-elevated);
10394
+ border-top: 1px solid var(--wf-color-border);
10395
+ /* 小按钮固定尺寸纪律(§5.6):防全局 button min-height:36px 撑高 tab */
10396
+ min-height: 56px;
10397
+ }
10398
+
10399
+ /* 底部固定:safe-area 避让手势条 + 浮层层级 */
10400
+ .wf-tab-bar--fixed {
10401
+ position: fixed;
10402
+ left: 0;
10403
+ right: 0;
10404
+ bottom: 0;
10405
+ z-index: var(--wf-z-popover);
10406
+ padding-bottom: env(safe-area-inset-bottom, 0px);
10407
+ }
10408
+
10409
+ .wf-tab-bar-item {
10410
+ flex: 1;
10411
+ display: flex;
10412
+ flex-direction: column;
10413
+ align-items: center;
10414
+ justify-content: center;
10415
+ gap: 4px;
10416
+ padding: 8px 4px;
10417
+ background: transparent;
10418
+ border: none;
10419
+ cursor: pointer;
10420
+ color: var(--wf-color-text-tertiary);
10421
+ transition: color var(--wf-dur-fast) var(--wf-ease-out),
10422
+ background-color var(--wf-dur-fast) var(--wf-ease-out);
10423
+ position: relative;
10424
+ }
10425
+
10426
+ .wf-tab-bar-item:hover:not(:disabled) {
10427
+ color: var(--wf-color-text-secondary);
10428
+ background: var(--wf-state-hover);
10429
+ }
10430
+
10431
+ .wf-tab-bar-item:active:not(:disabled) {
10432
+ background: var(--wf-state-pressed);
10433
+ }
10434
+
10435
+ .wf-tab-bar-item--active {
10436
+ color: var(--wf-color-primary-text);
10437
+ font-weight: var(--wf-font-weight-semibold);
10438
+ }
10439
+
10440
+ .wf-tab-bar-item--active::before {
10441
+ /* 激活指示条(细边框美学——层级用边界表达) */
10442
+ content: '';
10443
+ position: absolute;
10444
+ top: 0;
10445
+ left: 25%;
10446
+ right: 25%;
10447
+ height: 2px;
10448
+ border-radius: 0 0 2px 2px;
10449
+ background: var(--wf-color-primary);
10450
+ }
10451
+
10452
+ .wf-tab-bar-item:focus-visible {
10453
+ outline: none;
10454
+ box-shadow: var(--wf-focus-ring);
10455
+ }
10456
+
10457
+ .wf-tab-bar-icon-wrap {
10458
+ position: relative;
10459
+ display: inline-flex;
10460
+ line-height: 1;
10461
+ }
10462
+
10463
+ /* 角标(右上角小圆点——badge 数字) */
10464
+ .wf-tab-bar-badge {
10465
+ position: absolute;
10466
+ top: -4px;
10467
+ right: -8px;
10468
+ min-width: 16px;
10469
+ height: 16px;
10470
+ padding: 0 4px;
10471
+ border-radius: var(--wf-radius-xl);
10472
+ background: var(--wf-color-error);
10473
+ color: var(--wf-color-on-brand);
10474
+ font-size: 10px;
10475
+ line-height: 16px;
10476
+ text-align: center;
10477
+ font-weight: var(--wf-font-weight-semibold);
10478
+ pointer-events: none;
10479
+ }
10480
+
10481
+ .wf-tab-bar-label {
10482
+ font-size: var(--wf-font-size-xs);
10483
+ line-height: 1.2;
10484
+ white-space: nowrap;
10485
+ }
10486
+
9592
10487
  /* weifuwu/components — Table */
9593
10488
 
9594
10489
  .wf-table-wrap {
@@ -9612,8 +10507,8 @@ body.wf-dragging {
9612
10507
  font-weight: var(--wf-font-weight-medium);
9613
10508
  font-size: var(--wf-font-size-xs);
9614
10509
  color: var(--wf-color-text-tertiary);
9615
- text-transform: uppercase;
9616
- letter-spacing: 0.5px;
10510
+ text-transform: var(--wf-heading-case); /* CJK 默认 none,英文可覆盖 uppercase */
10511
+ letter-spacing: var(--wf-heading-tracking);
9617
10512
  padding: var(--wf-space) var(--wf-space-sm);
9618
10513
  background: var(--wf-color-bg-secondary);
9619
10514
  white-space: nowrap;
@@ -9750,6 +10645,8 @@ body.wf-dragging {
9750
10645
  }
9751
10646
 
9752
10647
  .wf-tab {
10648
+ display: inline-flex;
10649
+ align-items: center;
9753
10650
  padding: var(--wf-space) var(--wf-space-md);
9754
10651
  border: none;
9755
10652
  background: none;
@@ -9767,7 +10664,14 @@ body.wf-dragging {
9767
10664
  .wf-tab:hover {
9768
10665
  color: var(--wf-color-text);
9769
10666
  }
9770
-
10667
+ .wf-tab:active {
10668
+ background: var(--wf-state-pressed);
10669
+ }
10670
+ .wf-tab:focus-visible {
10671
+ outline: none;
10672
+ box-shadow: var(--wf-focus-ring);
10673
+ border-radius: var(--wf-radius-xs);
10674
+ }
9771
10675
  .wf-tab--active {
9772
10676
  color: var(--wf-color-primary-text);
9773
10677
  }
@@ -9790,6 +10694,50 @@ body.wf-dragging {
9790
10694
  display: none;
9791
10695
  }
9792
10696
 
10697
+ /* ── 可关闭 tab(closable) ── */
10698
+ .wf-tab-close {
10699
+ display: inline-flex;
10700
+ align-items: center;
10701
+ justify-content: center;
10702
+ width: 16px;
10703
+ height: 16px;
10704
+ margin-left: 6px;
10705
+ border-radius: var(--wf-radius-sm);
10706
+ color: var(--wf-color-text-tertiary);
10707
+ cursor: pointer;
10708
+ transition: background-color var(--wf-dur-fast) var(--wf-ease-out),
10709
+ color var(--wf-dur-fast) var(--wf-ease-out);
10710
+ }
10711
+
10712
+ .wf-tab-close:hover {
10713
+ background: var(--wf-state-hover);
10714
+ color: var(--wf-color-error-text);
10715
+ }
10716
+
10717
+ /* ── 新增 + 按钮(addable) ── */
10718
+ .wf-tab-add {
10719
+ display: inline-flex;
10720
+ align-items: center;
10721
+ justify-content: center;
10722
+ width: 24px;
10723
+ height: 24px;
10724
+ margin: auto 4px;
10725
+ padding: 0;
10726
+ border: none;
10727
+ background: transparent;
10728
+ border-radius: var(--wf-radius-sm);
10729
+ color: var(--wf-color-text-tertiary);
10730
+ cursor: pointer;
10731
+ flex-shrink: 0;
10732
+ transition: background-color var(--wf-dur-fast) var(--wf-ease-out),
10733
+ color var(--wf-dur-fast) var(--wf-ease-out);
10734
+ }
10735
+
10736
+ .wf-tab-add:hover {
10737
+ background: var(--wf-state-hover);
10738
+ color: var(--wf-color-primary-text);
10739
+ }
10740
+
9793
10741
  /* weifuwu/components — Tag */
9794
10742
 
9795
10743
  .wf-tag {
@@ -9830,6 +10778,12 @@ body.wf-dragging {
9830
10778
  color: inherit;
9831
10779
  }
9832
10780
  .wf-tag-close:hover { opacity: 1; }
10781
+ .wf-tag-close:active { opacity: 0.5; }
10782
+ .wf-tag-close:focus-visible {
10783
+ outline: none;
10784
+ box-shadow: var(--wf-focus-ring);
10785
+ border-radius: var(--wf-radius-sm);
10786
+ }
9833
10787
 
9834
10788
  /* weifuwu/components — TagsInput */
9835
10789
 
@@ -10432,19 +11386,20 @@ body.wf-dragging {
10432
11386
  }
10433
11387
 
10434
11388
  .wf-tooltip--bottom {
10435
- transform: translateX(-50%);
11389
+ /* 定位全权归 JS(usePopup computePos——fixed left/top 已含中心对齐/偏移)——
11390
+ * CSS transform 残留(旧 absolute 定位)与 JS 坐标叠加双倍偏移——已删 */
10436
11391
  }
10437
11392
 
10438
11393
  .wf-tooltip--top {
10439
- transform: translateX(-50%) translateY(-100%);
11394
+ /* 同上(旧 translateX(-50%) translateY(-100%) 与 JS 定位叠加——偏左上) */
10440
11395
  }
10441
11396
 
10442
11397
  .wf-tooltip--left {
10443
- transform: translateY(-50%) translateX(-100%);
11398
+ /* 同上 */
10444
11399
  }
10445
11400
 
10446
11401
  .wf-tooltip--right {
10447
- transform: translateY(-50%);
11402
+ /* 同上 */
10448
11403
  }
10449
11404
 
10450
11405
  .wf-tooltip-arrow {
@@ -10561,16 +11516,16 @@ body.wf-dragging {
10561
11516
  }
10562
11517
  .wf-tour-title {
10563
11518
  font-weight: 600;
10564
- font-size: 14px;
11519
+ font-size: var(--wf-font-size-base); /* 14px 同值 token 化——compact 预设可缩放 */
10565
11520
  }
10566
11521
  .wf-tour-step {
10567
- font-size: 12px;
11522
+ font-size: var(--wf-font-size-xs); /* 12px 同值 token 化——compact 预设可缩放 */
10568
11523
  color: var(--wf-color-text-tertiary);
10569
11524
  flex-shrink: 0;
10570
11525
  }
10571
11526
 
10572
11527
  .wf-tour-content {
10573
- font-size: 13px;
11528
+ font-size: var(--wf-font-size-sm); /* 13px 同值 token 化——compact 预设可缩放 */
10574
11529
  color: var(--wf-color-text-secondary);
10575
11530
  line-height: 1.6;
10576
11531
  }
@@ -10589,7 +11544,7 @@ body.wf-dragging {
10589
11544
  border: 1px solid var(--wf-color-border);
10590
11545
  background: var(--wf-color-bg);
10591
11546
  color: var(--wf-color-text);
10592
- font-size: 13px;
11547
+ font-size: var(--wf-font-size-sm); /* 13px 同值 token 化——compact 预设可缩放 */
10593
11548
  cursor: pointer;
10594
11549
  display: inline-flex;
10595
11550
  align-items: center;
@@ -10949,10 +11904,10 @@ body.wf-dragging {
10949
11904
 
10950
11905
  .wf-treeselect-placeholder {
10951
11906
  color: var(--wf-color-text-tertiary);
10952
- font-size: 13px;
11907
+ font-size: var(--wf-font-size-sm); /* 13px 同值 token 化——compact 预设可缩放 */
10953
11908
  }
10954
11909
  .wf-treeselect-label {
10955
- font-size: 13px;
11910
+ font-size: var(--wf-font-size-sm); /* 13px 同值 token 化——compact 预设可缩放 */
10956
11911
  min-width: 0;
10957
11912
  overflow: hidden;
10958
11913
  text-overflow: ellipsis;
@@ -11058,6 +12013,10 @@ body.wf-dragging {
11058
12013
  max-width: 100%; /* block 父级下约束在容器内截断 */
11059
12014
  }
11060
12015
 
12016
+ .wf-videoplayer {
12017
+ width: 100%;
12018
+ }
12019
+
11061
12020
  /* weifuwu/components — VirtualList */
11062
12021
 
11063
12022
  .wf-virtual-list {
@@ -11265,4 +12224,28 @@ body.wf-dragging {
11265
12224
  background-size: auto;
11266
12225
  }
11267
12226
 
12227
+ .wf-wave {
12228
+ position: relative;
12229
+ display: inline-block;
12230
+ overflow: hidden;
12231
+ border-radius: inherit; /* 跟随子元素圆角(Button 波纹圆角一致) */
12232
+ -webkit-tap-highlight-color: transparent;
12233
+ }
12234
+
12235
+ .wf-wave-ripple {
12236
+ position: absolute;
12237
+ border-radius: 50%;
12238
+ pointer-events: none;
12239
+ background: color-mix(in srgb, currentColor 12%, transparent);
12240
+ transform: scale(0);
12241
+ animation: wf-wave-pop var(--wf-dur-base) var(--wf-ease-out) forwards;
12242
+ }
12243
+
12244
+ @keyframes wf-wave-pop {
12245
+ to {
12246
+ transform: scale(1);
12247
+ opacity: 0;
12248
+ }
12249
+ }
12250
+
11268
12251
  }