weifuwu 0.87.0 → 0.89.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 (392) hide show
  1. package/README.md +111 -135
  2. package/dist/client/components/ActionSheet/ActionSheet.d.ts +1 -1
  3. package/dist/client/components/AiChat/AiChat.d.ts +3 -4
  4. package/dist/client/components/ChatInput/ChatInput.d.ts +5 -0
  5. package/dist/client/components/CitationCard/CitationCard.d.ts +1 -1
  6. package/dist/client/components/Command/Command.d.ts +1 -1
  7. package/dist/client/components/ContextMenu/ContextMenu.d.ts +1 -1
  8. package/dist/client/components/DatePicker/DatePicker.d.ts +1 -1
  9. package/dist/client/components/Dropdown/Dropdown.d.ts +1 -1
  10. package/dist/client/components/Editor/model/html.d.ts +10 -0
  11. package/dist/client/components/ImageCropper/ImageCropper.d.ts +6 -2
  12. package/dist/client/components/Menu/Menu.d.ts +1 -1
  13. package/dist/client/components/NavMenu/NavMenu.d.ts +1 -1
  14. package/dist/client/components/Popconfirm/Popconfirm.d.ts +1 -1
  15. package/dist/client/components/SlideCanvas/SlideCanvas.d.ts +1 -1
  16. package/dist/client/components/Tour/Tour.d.ts +1 -1
  17. package/dist/client/components/TreeSelect/TreeSelect.d.ts +1 -1
  18. package/dist/client/components/index.js +41 -41
  19. package/dist/client/components/style.css +298 -644
  20. package/dist/client/layout/weifuwu-layout.css +286 -640
  21. package/dist/client/vdom/browser/Browser.d.ts +2 -0
  22. package/dist/client/vdom/commands.d.ts +4 -1
  23. package/dist/client/vdom/context/UIContext.d.ts +8 -0
  24. package/dist/client/vdom/core/diff/attrs.d.ts +10 -2
  25. package/dist/client/vdom/core/field/attributes.d.ts +12 -0
  26. package/dist/client/vdom/core/field/events.d.ts +8 -0
  27. package/dist/client/vdom/core/field/input-sync.d.ts +14 -0
  28. package/dist/client/vdom/core/field/key.d.ts +3 -0
  29. package/dist/client/vdom/core/field/props.d.ts +13 -1
  30. package/dist/client/vdom/core/field/ref.d.ts +6 -0
  31. package/dist/client/vdom/core/field/style.d.ts +7 -1
  32. package/dist/client/vdom/core/node/component.d.ts +3 -4
  33. package/dist/client/vdom/core/node/native.d.ts +6 -1
  34. package/dist/client/vdom/core/patch/index.d.ts +24 -1
  35. package/dist/client/vdom/core/patch/processors.d.ts +8 -1
  36. package/dist/client/vdom/core/protocol.d.ts +45 -0
  37. package/dist/client/vdom/core/router.d.ts +7 -0
  38. package/dist/client/vdom/core/ssr/absorb.d.ts +31 -4
  39. package/dist/client/vdom/core/transform/index.d.ts +6 -6
  40. package/dist/client/vdom/core/v2/cycle.d.ts +54 -0
  41. package/dist/client/vdom/core/v2/diff.d.ts +80 -0
  42. package/dist/client/vdom/core/v2/integrate.d.ts +24 -0
  43. package/dist/client/vdom/core/v2/render.d.ts +28 -0
  44. package/dist/client/vdom/core/v2/schedule.d.ts +33 -0
  45. package/dist/client/vdom/core/v2/serve.d.ts +4 -0
  46. package/dist/client/vdom/core/v2/spy.d.ts +21 -0
  47. package/dist/client/vdom/core/v2/ssr.d.ts +14 -0
  48. package/dist/client/vdom/core/vnode.d.ts +9 -6
  49. package/dist/client/vdom/dev/error-counter.d.ts +27 -0
  50. package/dist/client/vdom/dev/render-health.d.ts +60 -0
  51. package/dist/client/vdom/hooks/chat.d.ts +32 -5
  52. package/dist/client/vdom/hooks/drag-media.d.ts +3 -1
  53. package/dist/client/vdom/hooks/env.d.ts +32 -0
  54. package/dist/client/vdom/hooks/popup-manager.d.ts +21 -0
  55. package/dist/client/vdom/hooks/popup.d.ts +4 -1
  56. package/dist/client/vdom/hooks/stable.d.ts +4 -0
  57. package/dist/client/vdom/hooks/use-observable.d.ts +13 -0
  58. package/dist/client/vdom/index.d.ts +14 -6
  59. package/dist/client/vdom/index.js +4 -7
  60. package/dist/client/vdom/jsx-runtime.js +1 -1
  61. package/dist/client/vdom/middlewares/api.d.ts +8 -0
  62. package/dist/client/vdom/middlewares/auth-i18n.d.ts +7 -0
  63. package/dist/client/vdom/middlewares/ws.d.ts +41 -1
  64. package/dist/client/vdom/observable/index.d.ts +13 -0
  65. package/dist/client/vdom/observable/observable.d.ts +26 -0
  66. package/dist/client/vdom/observable/operators.d.ts +76 -0
  67. package/dist/client/vdom/observable/sources.d.ts +54 -0
  68. package/dist/client/vdom/observable/types.d.ts +45 -0
  69. package/dist/client/vdom/store.d.ts +17 -2
  70. package/dist/client/vdom/testing.js +2 -2
  71. package/dist/server/ai/agent.d.ts +18 -0
  72. package/dist/server/ai/client.d.ts +14 -2
  73. package/dist/server/ai/contracts.d.ts +2 -2
  74. package/dist/server/ai/sse.d.ts +6 -0
  75. package/dist/server/core/collect.d.ts +31 -0
  76. package/dist/server/core/error-counter.d.ts +11 -0
  77. package/dist/server/core/hub.d.ts +2 -0
  78. package/dist/server/core/router.d.ts +12 -9
  79. package/dist/server/db/contracts.d.ts +24 -0
  80. package/dist/server/db/memory-redis.d.ts +3 -4
  81. package/dist/server/db/memory-sql.d.ts +20 -4
  82. package/dist/server/db/postgres-server.d.ts +2 -0
  83. package/dist/server/db/query.d.ts +21 -0
  84. package/dist/server/db/redis-server.d.ts +4 -2
  85. package/dist/server/db/sql-parser.d.ts +2 -1
  86. package/dist/server/email/index.d.ts +2 -0
  87. package/dist/server/index.d.ts +4 -1
  88. package/dist/server/index.js +3927 -1982
  89. package/dist/server/messager/index.d.ts +21 -2
  90. package/dist/server/middleware/compress.d.ts +25 -0
  91. package/dist/server/ui/index.d.ts +8 -1
  92. package/dist/server/user/index.d.ts +4 -0
  93. package/dist/shared/router/chain.d.ts +9 -0
  94. package/dist/shared/router/context.d.ts +35 -0
  95. package/dist/shared/router/ctx-fields.d.ts +20 -0
  96. package/dist/shared/router/pipeline.d.ts +70 -0
  97. package/dist/shared/router/trie.d.ts +11 -3
  98. package/dist/shared/router/types.d.ts +23 -0
  99. package/docs/style-guide.md +44 -41
  100. package/package.json +13 -10
  101. package/content/apps/admin.md +0 -55
  102. package/content/apps/agent-platform.md +0 -35
  103. package/content/apps/auth.md +0 -49
  104. package/content/apps/multi.md +0 -44
  105. package/content/apps/todo.md +0 -51
  106. package/content/backend/ai.md +0 -28
  107. package/content/backend/auth.md +0 -20
  108. package/content/backend/email.md +0 -23
  109. package/content/backend/graphql.md +0 -23
  110. package/content/backend/http.md +0 -23
  111. package/content/backend/limit.md +0 -23
  112. package/content/backend/middleware.md +0 -17
  113. package/content/backend/queue.md +0 -23
  114. package/content/backend/redis.md +0 -26
  115. package/content/backend/router.md +0 -23
  116. package/content/backend/schedule.md +0 -23
  117. package/content/backend/sql.md +0 -27
  118. package/content/backend/sse.md +0 -26
  119. package/content/backend/ws.md +0 -26
  120. package/content/capabilities/app-node.md +0 -21
  121. package/content/capabilities/data.md +0 -21
  122. package/content/capabilities/events.md +0 -21
  123. package/content/capabilities/hooks.md +0 -22
  124. package/content/capabilities/i18n.md +0 -21
  125. package/content/capabilities/popup.md +0 -21
  126. package/content/capabilities/render-only.md +0 -23
  127. package/content/capabilities/router.md +0 -22
  128. package/content/capabilities/self-id.md +0 -21
  129. package/content/capabilities/store.md +0 -21
  130. package/content/capabilities/theme.md +0 -21
  131. package/content/capabilities/two-phase.md +0 -21
  132. package/content/components/accordion.md +0 -50
  133. package/content/components/actionsheet.md +0 -46
  134. package/content/components/affix.md +0 -51
  135. package/content/components/aichat.md +0 -57
  136. package/content/components/alert.md +0 -52
  137. package/content/components/alertgroup.md +0 -45
  138. package/content/components/anchor.md +0 -52
  139. package/content/components/app.md +0 -37
  140. package/content/components/approvalcard.md +0 -56
  141. package/content/components/appshell.md +0 -50
  142. package/content/components/aspectratio.md +0 -47
  143. package/content/components/authpage.md +0 -61
  144. package/content/components/autocomplete-v2.md +0 -40
  145. package/content/components/autocomplete.md +0 -56
  146. package/content/components/avatar.md +0 -51
  147. package/content/components/avatargroup.md +0 -47
  148. package/content/components/backtop.md +0 -53
  149. package/content/components/badge.md +0 -55
  150. package/content/components/breadcrumb.md +0 -49
  151. package/content/components/button.md +0 -63
  152. package/content/components/calendar-v2.md +0 -40
  153. package/content/components/calendar.md +0 -50
  154. package/content/components/card.md +0 -58
  155. package/content/components/carousel.md +0 -52
  156. package/content/components/cascader-v2.md +0 -39
  157. package/content/components/cascader.md +0 -54
  158. package/content/components/chart.md +0 -53
  159. package/content/components/chatinput.md +0 -63
  160. package/content/components/checkbox.md +0 -51
  161. package/content/components/checkboxgroup.md +0 -52
  162. package/content/components/citationcard.md +0 -48
  163. package/content/components/codeblock.md +0 -48
  164. package/content/components/codeeditor.md +0 -47
  165. package/content/components/collapse.md +0 -49
  166. package/content/components/colorpicker.md +0 -50
  167. package/content/components/command.md +0 -50
  168. package/content/components/confirm.md +0 -57
  169. package/content/components/contextmenu.md +0 -48
  170. package/content/components/copybutton.md +0 -51
  171. package/content/components/datepicker.md +0 -52
  172. package/content/components/descriptions-v2.md +0 -39
  173. package/content/components/descriptions.md +0 -52
  174. package/content/components/diffview-v2.md +0 -39
  175. package/content/components/diffview.md +0 -50
  176. package/content/components/divider.md +0 -48
  177. package/content/components/drawer.md +0 -55
  178. package/content/components/dropdown.md +0 -53
  179. package/content/components/editor.md +0 -49
  180. package/content/components/emptystate.md +0 -51
  181. package/content/components/exportcsv.md +0 -38
  182. package/content/components/field.md +0 -54
  183. package/content/components/filepreview-office.md +0 -37
  184. package/content/components/filepreview.md +0 -49
  185. package/content/components/filetree.md +0 -56
  186. package/content/components/fileupload-v2.md +0 -39
  187. package/content/components/fileupload.md +0 -57
  188. package/content/components/floatbutton.md +0 -52
  189. package/content/components/form-v2.md +0 -41
  190. package/content/components/form.md +0 -60
  191. package/content/components/grid.md +0 -51
  192. package/content/components/highlight-v2.md +0 -39
  193. package/content/components/highlight.md +0 -46
  194. package/content/components/hovercard.md +0 -51
  195. package/content/components/icon.md +0 -50
  196. package/content/components/imagecropper.md +0 -45
  197. package/content/components/img.md +0 -56
  198. package/content/components/infinitescroll-v2.md +0 -40
  199. package/content/components/infinitescroll.md +0 -54
  200. package/content/components/input.md +0 -65
  201. package/content/components/inputnumber.md +0 -58
  202. package/content/components/inview.md +0 -56
  203. package/content/components/jsonschemaform.md +0 -53
  204. package/content/components/jsonviewer-v2.md +0 -39
  205. package/content/components/jsonviewer.md +0 -49
  206. package/content/components/kanban.md +0 -46
  207. package/content/components/label.md +0 -48
  208. package/content/components/layout.md +0 -54
  209. package/content/components/layoutcontent.md +0 -43
  210. package/content/components/layoutheader.md +0 -43
  211. package/content/components/layoutsider.md +0 -43
  212. package/content/components/link.md +0 -52
  213. package/content/components/list.md +0 -44
  214. package/content/components/loading.md +0 -45
  215. package/content/components/logviewer-v2.md +0 -39
  216. package/content/components/logviewer.md +0 -53
  217. package/content/components/markdown.md +0 -51
  218. package/content/components/markdowneditor.md +0 -47
  219. package/content/components/math.md +0 -42
  220. package/content/components/mentions-v2.md +0 -39
  221. package/content/components/mentions.md +0 -52
  222. package/content/components/menu.md +0 -56
  223. package/content/components/menubar.md +0 -44
  224. package/content/components/messagebubble.md +0 -50
  225. package/content/components/modal.md +0 -59
  226. package/content/components/navmenu.md +0 -47
  227. package/content/components/notification.md +0 -51
  228. package/content/components/pageheader.md +0 -53
  229. package/content/components/pagination.md +0 -49
  230. package/content/components/paragraph.md +0 -45
  231. package/content/components/passwordinput.md +0 -57
  232. package/content/components/pininput-v2.md +0 -39
  233. package/content/components/pininput.md +0 -50
  234. package/content/components/pipeline.md +0 -49
  235. package/content/components/popconfirm.md +0 -58
  236. package/content/components/popover.md +0 -61
  237. package/content/components/progressbar.md +0 -50
  238. package/content/components/prompttemplate.md +0 -49
  239. package/content/components/qrcode.md +0 -50
  240. package/content/components/radiogroup.md +0 -53
  241. package/content/components/rate.md +0 -53
  242. package/content/components/reasoningblock.md +0 -47
  243. package/content/components/relationgraph.md +0 -52
  244. package/content/components/resizable.md +0 -53
  245. package/content/components/result.md +0 -49
  246. package/content/components/scrollbar.md +0 -49
  247. package/content/components/searchinput.md +0 -51
  248. package/content/components/segmentedcontrol.md +0 -59
  249. package/content/components/select-searchable.md +0 -47
  250. package/content/components/select.md +0 -66
  251. package/content/components/sessionlist.md +0 -52
  252. package/content/components/sheetgrid.md +0 -44
  253. package/content/components/skeleton.md +0 -55
  254. package/content/components/slidecanvas.md +0 -44
  255. package/content/components/slider.md +0 -62
  256. package/content/components/sortablelist.md +0 -39
  257. package/content/components/space.md +0 -52
  258. package/content/components/sparkline.md +0 -52
  259. package/content/components/statcard-countdown.md +0 -39
  260. package/content/components/statcard.md +0 -56
  261. package/content/components/steps.md +0 -48
  262. package/content/components/switch.md +0 -50
  263. package/content/components/tabbar.md +0 -45
  264. package/content/components/table-v2.md +0 -40
  265. package/content/components/table.md +0 -66
  266. package/content/components/tabs.md +0 -56
  267. package/content/components/tag.md +0 -51
  268. package/content/components/tagsinput-v2.md +0 -39
  269. package/content/components/tagsinput.md +0 -54
  270. package/content/components/text.md +0 -45
  271. package/content/components/textarea.md +0 -57
  272. package/content/components/themeswitch.md +0 -69
  273. package/content/components/timeline.md +0 -50
  274. package/content/components/title.md +0 -45
  275. package/content/components/toast.md +0 -52
  276. package/content/components/toggle-togglegroup.md +0 -52
  277. package/content/components/togglegroup.md +0 -47
  278. package/content/components/toolcallcard.md +0 -51
  279. package/content/components/tooltip.md +0 -50
  280. package/content/components/tour.md +0 -50
  281. package/content/components/transfer.md +0 -52
  282. package/content/components/tree-v2.md +0 -39
  283. package/content/components/tree.md +0 -59
  284. package/content/components/treeselect.md +0 -54
  285. package/content/components/typography.md +0 -51
  286. package/content/components/videoplayer.md +0 -52
  287. package/content/components/virtuallist.md +0 -52
  288. package/content/components/virtualtable-v2.md +0 -39
  289. package/content/components/virtualtable.md +0 -55
  290. package/content/components/watermark.md +0 -53
  291. package/content/components/wave.md +0 -43
  292. package/content/guides/ai-chat-family.md +0 -24
  293. package/content/guides/choose.md +0 -67
  294. package/content/guides/component-model.md +0 -32
  295. package/content/guides/component-standards.md +0 -123
  296. package/content/guides/components-guide.md +0 -813
  297. package/content/guides/custom-component.md +0 -321
  298. package/content/guides/data-guide.md +0 -281
  299. package/content/guides/file-preview-family.md +0 -18
  300. package/content/guides/frontend.md +0 -968
  301. package/content/guides/layout-choice.md +0 -64
  302. package/content/guides/layout-guide.md +0 -241
  303. package/content/guides/middleware.md +0 -459
  304. package/content/guides/mobile-guide.md +0 -105
  305. package/content/guides/page-building.md +0 -98
  306. package/content/guides/production.md +0 -37
  307. package/content/guides/quality.md +0 -60
  308. package/content/guides/realtime-guide.md +0 -296
  309. package/content/guides/render-only.md +0 -44
  310. package/content/guides/saas-guide.md +0 -253
  311. package/content/guides/server-guide.md +0 -359
  312. package/content/guides/start.md +0 -41
  313. package/content/guides/styling.md +0 -154
  314. package/content/guides/ui-dom-guide.md +0 -157
  315. package/content/index.json +0 -4344
  316. package/content/index.md +0 -181
  317. package/content/layout/align.md +0 -20
  318. package/content/layout/anchor.md +0 -19
  319. package/content/layout/app-shell.md +0 -23
  320. package/content/layout/border.md +0 -20
  321. package/content/layout/center.md +0 -19
  322. package/content/layout/cluster.md +0 -19
  323. package/content/layout/container.md +0 -19
  324. package/content/layout/fill.md +0 -19
  325. package/content/layout/grid.md +0 -19
  326. package/content/layout/hidden.md +0 -22
  327. package/content/layout/layer.md +0 -19
  328. package/content/layout/position.md +0 -22
  329. package/content/layout/row.md +0 -23
  330. package/content/layout/safe-area.md +0 -20
  331. package/content/layout/scroll.md +0 -21
  332. package/content/layout/spacing.md +0 -22
  333. package/content/layout/split.md +0 -19
  334. package/content/layout/stack.md +0 -19
  335. package/content/layout/surface.md +0 -23
  336. package/content/layout/text.md +0 -22
  337. package/content/patterns/app-shell.md +0 -34
  338. package/content/patterns/dashboard.md +0 -36
  339. package/content/patterns/data-screen.md +0 -30
  340. package/content/patterns/detail-page.md +0 -31
  341. package/content/patterns/docs.md +0 -34
  342. package/content/patterns/focus-task.md +0 -34
  343. package/content/patterns/landing.md +0 -35
  344. package/content/patterns/list-page.md +0 -32
  345. package/content/patterns/mobile.md +0 -31
  346. package/content/patterns/settings-page.md +0 -33
  347. package/content/patterns/workspace.md +0 -32
  348. package/dist/cli/content-sync.test.d.ts +0 -1
  349. package/dist/cli/docs-cli.test.d.ts +0 -1
  350. package/dist/cli/docs.d.ts +0 -2
  351. package/dist/cli/docs.mjs +0 -10961
  352. package/dist/client/vdom/core/build.d.ts +0 -36
  353. package/dist/client/vdom/core/diff/children.d.ts +0 -29
  354. package/dist/client/vdom/core/diff/index.d.ts +0 -22
  355. package/dist/client/vdom/core/diff/output.d.ts +0 -30
  356. package/dist/client/vdom/core/diff/same.d.ts +0 -22
  357. package/dist/client/vdom/core/serve.d.ts +0 -75
  358. package/dist/client/vdom/core/ssr/index.d.ts +0 -25
  359. package/examples/apps/admin/README.md +0 -23
  360. package/examples/apps/admin/api.ts +0 -27
  361. package/examples/apps/admin/app.tsx +0 -144
  362. package/examples/apps/admin/main.tsx +0 -8
  363. package/examples/apps/admin/server.ts +0 -37
  364. package/examples/apps/auth/README.md +0 -23
  365. package/examples/apps/auth/api.ts +0 -49
  366. package/examples/apps/auth/app.tsx +0 -137
  367. package/examples/apps/auth/main.tsx +0 -8
  368. package/examples/apps/auth/server.ts +0 -37
  369. package/examples/apps/multi/README.md +0 -23
  370. package/examples/apps/multi/app.tsx +0 -83
  371. package/examples/apps/multi/main.tsx +0 -8
  372. package/examples/apps/multi/server.ts +0 -33
  373. package/examples/apps/todo/README.md +0 -23
  374. package/examples/apps/todo/api.ts +0 -26
  375. package/examples/apps/todo/app.tsx +0 -128
  376. package/examples/apps/todo/main.tsx +0 -9
  377. package/examples/apps/todo/server.ts +0 -39
  378. package/examples/hello-world/README.md +0 -9
  379. package/examples/hello-world/client.ts +0 -14
  380. package/examples/hello-world/routes.tsx +0 -26
  381. package/examples/hello-world/server.ts +0 -46
  382. package/examples/patterns/AppShell.tsx +0 -224
  383. package/examples/patterns/Dashboard.tsx +0 -153
  384. package/examples/patterns/DataScreen.tsx +0 -104
  385. package/examples/patterns/DetailPage.tsx +0 -79
  386. package/examples/patterns/Docs.tsx +0 -105
  387. package/examples/patterns/FocusTask.tsx +0 -67
  388. package/examples/patterns/Landing.tsx +0 -90
  389. package/examples/patterns/ListPage.tsx +0 -77
  390. package/examples/patterns/Mobile.tsx +0 -154
  391. package/examples/patterns/SettingsPage.tsx +0 -98
  392. package/examples/patterns/SplitWorkspace.tsx +0 -113
@@ -1,154 +0,0 @@
1
- # 样式体系指南
2
-
3
- > 从 docs/styling.md 迁移(content/ 文档库——随 npm 包发布,与框架版本同步)。
4
- > 本页为叙述性指南——组件/能力逐项参考见 content/ 各域目录。
5
-
6
- # 主题配置指南(三档)
7
-
8
- > 主题配置按复杂度分三档——**90% 的项目止步于第一档**。
9
-
10
- ## 第一档:1 个值换肤(90% 项目)
11
-
12
- 改 `--wf-brand-seed` **一个值**,亮/暗全站色板自动跟随(50/500/600/700 色阶经
13
- `color-mix()` 派生;不支持 color-mix 的旧浏览器自动回退默认色板——渐进增强,零 JS):
14
-
15
- ```html
16
- <style>
17
- :root {
18
- --wf-brand-seed: #7c3aed; /* 品牌主色(亮色)——一个值全站跟随 */
19
- --wf-dark-brand-seed: #a78bfa; /* 暗色品牌(可选,不设则暗色沿用亮色色板) */
20
- }
21
- </style>
22
- ```
23
-
24
- 品牌换色 = 改 `--wf-brand-seed`;组件定制 = 设一个钩子变量:
25
-
26
- ```html
27
- <style>
28
- :root {
29
- --wf-modal-width: 640px; /* 组件定制钩子 */
30
- --wf-btn-radius: 999px;
31
- --wf-field-height: 44px;
32
- --wf-card-shadow: 0 8px 24px rgba(0,0,0,.12);
33
- }
34
- </style>
35
- ```
36
-
37
- 钩子清单:`--wf-btn-*` `--wf-card-*` `--wf-field-*` `--wf-modal-*` `--wf-drawer-width` `--wf-toast-*` `--wf-alert-radius` `--wf-badge-radius` `--wf-tag-radius` `--wf-switch-radius` `--wf-popover-*` `--wf-tooltip-radius` `--wf-dropdown-min-width` `--wf-datepicker-*`。
38
-
39
- ## 第二档:预设主题(开箱即用)
40
-
41
- `<html data-preset="minimal|compact|rounded">` 一键切换预设(与暗色 `data-theme` 正交,可组合):
42
-
43
- | 预设 | 语义 | 适用 |
44
- |------|------|------|
45
- | `minimal` | 品牌弱化:中性蓝灰主色 | 内容/文档型产品(Geist 式克制) |
46
- | `compact` | 紧凑密度:控件/间距/字号缩一档 | 数据密集型工具(管理后台/监控) |
47
- | `rounded` | 大圆角:radius 全升一档 + 按钮胶囊 | 亲和/消费型产品 |
48
-
49
- ```html
50
- <html data-theme="dark" data-preset="compact">
51
- <!-- 暗色 + 紧凑密度可同时生效 -->
52
- ```
53
-
54
- React/JS 侧:`<ThemeSwitch preset onPresetChange={...} />` 渲染模式 + 预设双行切换
55
- (localStorage 持久化,`wf_theme_preset` key)。
56
-
57
- ## 第三档:深度定制
58
-
59
- **组件级覆盖**(@layer 友好,未分层用户 CSS 天然最高优先级):
60
-
61
- ```css
62
- /* 覆盖 Button 主色 */
63
- .wf-btn--primary {
64
- background: #06b6d4;
65
- border-color: #06b6d4;
66
- }
67
- ```
68
-
69
- **作用域主题**(CSS 变量沿 DOM 继承——多主题共存):
70
-
71
- ```html
72
- <div style="--wf-color-primary: #f59e0b;">
73
- <!-- 此区域内组件使用金色主题,外部不受影响 -->
74
- <button class="wf-btn wf-btn--primary">金色按钮</button>
75
- </div>
76
- ```
77
-
78
- **全局语义变量**:直接覆盖 `--wf-*` 语义层:
79
-
80
- ```css
81
- :root {
82
- --wf-radius: 8px;
83
- --wf-font-sans: 'Inter', system-ui, sans-serif;
84
- }
85
- ```
86
-
87
- ## 暗色模式
88
-
89
- 两种激活方式(显式 `data-theme` 优先级高于系统偏好):
90
-
91
- ```ts
92
- document.documentElement.setAttribute('data-theme', 'dark') // 手动切换
93
- document.documentElement.setAttribute('data-theme', 'light') // 强制亮色
94
- ```
95
-
96
- 未设置 `data-theme` 时自动跟随系统偏好。所有 `--wf-*` 变量暗色自动切换;自定义暗色变量:
97
-
98
- ```css
99
- [data-theme="dark"] {
100
- --wf-color-bg: #1a1a2e;
101
- --wf-color-text: #e0e0e0;
102
- --wf-color-border: #2a2a4a;
103
- }
104
-
105
- /* 系统自动暗色需与上面同步 */
106
- @media (prefers-color-scheme: dark) {
107
- :root:not([data-theme="light"]) {
108
- --wf-color-bg: #1a1a2e;
109
- --wf-color-text: #e0e0e0;
110
- --wf-color-border: #2a2a4a;
111
- }
112
- }
113
- ```
114
-
115
- ## 状态层与表面层级(设计语言内建)
116
-
117
- 组件交互反馈统一走**状态层 token**(可覆盖定制):
118
-
119
- ```
120
- --wf-state-hover rgba(0,0,0,.04) 亮色 / rgba(255,255,255,.06) 暗色
121
- --wf-state-pressed rgba(0,0,0,.08) 亮色 / rgba(255,255,255,.10) 暗色
122
- --wf-state-selected 品牌浅底(--wf-color-primary-bg)
123
- ```
124
-
125
- 浮层(Modal/Drawer/Popover/Dropdown/Select/DatePicker 等)统一用
126
- `--wf-color-bg-elevated` 面板底色——暗色下自动抬升一级(Material tonal elevation 思想)。
127
-
128
- ## 覆盖优先级(@layer)
129
-
130
- `@layer tokens, base, layout, utilities, components`——你写的未分层 CSS 天然最高优先级;
131
- 也可用 `@layer utilities` 精准覆盖。
132
-
133
- ## 零自定义 CSS 模式(推荐)
134
-
135
- 一个项目只需要引用**一个 CSS 文件**(`weifuwu/components/style.css`,内含 Token + 布局原语 + 组件样式),
136
- 业务代码全部由组件 + `wf-*` 原语承担,**不需要再写 `style.css`**:
137
-
138
- ```tsx
139
- // 组件 → 页面功能块;wf-* 原语 → 块之间的空间关系;--wf-* → 业务色值
140
- <PageHeader title="仪表盘" sub="欢迎回来">
141
- <Button variant="primary">+ 新建</Button>
142
- </PageHeader>
143
- <div class="wf-row wf-gap-lg">
144
- <StatCard label="总用户" value="1,234" trend="up" trendLabel="12%" />
145
- </div>
146
- ```
147
-
148
- 主题定制(品牌色/圆角/字体)不需要独立文件——**内联在 HTML 的 `<style>` 里即可**。
149
- 完整的零样式示例:`apps/components-demo`(组件 + 原语即插即用,无手写样式)。
150
-
151
- 诚实例外(合理场景,仍可内联 `<style>` 解决):打印/PDF 导出规则、第三方库宿主样式、
152
- 业务特有的一次性视觉(如色板选择器交互)。
153
-
154
- ---
@@ -1,157 +0,0 @@
1
- # 前端运行时指南(UIRouter/渲染器)
2
-
3
- > 从 docs/frontend-ui-dom.md 迁移(content/ 文档库——随 npm 包发布,与框架版本同步)。
4
- > 本页为叙述性指南——组件/能力逐项参考见 content/ 各域目录。
5
-
6
- # ui-dom — 前端运行时(vdom3 精准事件流引擎)
7
-
8
- > **createRouter(路由)+ createRoot(挂载)+ 精准事件流(渲染本体)**,
9
- > 组件 = 两阶段异步组件(`async (initProps, ctx) => (props) => VNode`),
10
- > **params 在 ctx**(对齐后端 `ctx.params`),渲染全链路可观测/可回放/可断言。
11
-
12
- ## 架构:vdom3 事件流引擎
13
-
14
- ```
15
- 用户操作(ctx.render())
16
- → 决策层事件(jsx/vdom):comp:render → vnode:patch(reuse/rebuild 决策)
17
- → 执行层事件(dom):node:create/insert/remove/move、prop:update、
18
- text:update、event:bind/unbind、ref:cleanup
19
- → DOM(精准状态变化——事件数 = 实际变化数)
20
- ```
21
-
22
- - **统一命名**:对象 + 动作 + 参数(`{ entity, action, target, payload }`——键 `entity:action`)——location(`route:change`)/ jsx(`comp:render`/`props:update`)/ vdom(`vnode:patch`)/ dom(`node:insert` 等)四层同构
23
- - **DOM = fold(事件流)**:初始 DOM + 事件序列 = 任意时刻 DOM——可记录(`stream.events()`)、回放(`replay`)、断言(`expectEventSequence`/`eventsOf`)
24
- - **不变量:无事件流不渲染**——所有状态变化都通过事件流(DOM 操作/组件生命周期/索引/事件注册/错误/挂起/内部决策/文本操作/副作用)——静态审计 + 运行时对照审计(`__WF_VDOM_AUDIT='1'`)守护
25
- - **render-only**:渲染唯一触发 `ctx.render()`(组件级——只重跑该组件 renderFn + patch 其输出,兄弟零执行);`ctx.ui.render()` 为兼容面(同义)
26
- - **组件级精准更新**:`ctx.render()` 只刷新自身——组件 O(1) 索引定位——props 未变的子组件剪枝——事件数 = 实际变化数
27
-
28
- ### 事件代理(所有监听统一注册表)
29
-
30
- 元素事件/全局监听/动画钩子全部收敛到**代理注册表**(`delegate.ts`):
31
- - 元素事件(onClick 等 props)→ 挂载点监听(每挂载点每事件一次——O(1))+ 按 data-v3-id 祖先链分发(handler 更新 = Map 覆盖——**零重绑零噪音**)
32
- - 全局监听(keydown/mousedown/pointer/popstate/scroll/选区/剪贴板)→ `addGlobalListener`(同事件聚合——EventTarget 每事件一次)
33
- - 动画钩子(animationend)→ `bindElementListener`(once 自动解绑)
34
- - 不冒泡事件(error/load)→ 捕获监听;`e.currentTarget` 还原为绑定元素(与元素级语义一致)
35
-
36
- ## 快速开始(SPA)
37
-
38
- ```tsx
39
- import { createRouter, h } from 'weifuwu/ui-dom'
40
- import { Button } from 'weifuwu/components'
41
-
42
- // 两阶段异步组件:外层工厂(mount 一次——状态/数据),内层 renderFn(每次渲染)
43
- const Counter = async (_init, ctx) => {
44
- let count = 0
45
- return async () =>
46
- h('div', {},
47
- h('button', {
48
- onClick: () => { count++; ctx.render() }, // render-only:显式触发
49
- }, `count:${count}`),
50
- )
51
- }
52
-
53
- createRouter(
54
- [{ path: '/', render: () => h(Counter, {}) }],
55
- document.querySelector('#root') as HTMLElement,
56
- )
57
- ```
58
-
59
- - 页面组件 ctx:`ctx.render()`(页面级刷新)/ `ctx.route`(`{ path, params }`——动态参数)/ `ctx.ui`(24 hooks)
60
- - 中间件面注入:`createRouter(routes, root, { ctx })`——`ctx` 为中间件展开结果(`api/auth/toast/confirm/i18n` 等——与后端 `app.use` 同理念):
61
-
62
- ```ts
63
- let ctx: any = {}
64
- ctx = await api({ baseURL: '', token: ... })(ctx)
65
- ctx = auth({ ... })(ctx)
66
- ctx = v3Toast()(ctx)
67
- ctx = v3Notification()(ctx)
68
- createRouter([...], root, { ctx })
69
- ```
70
-
71
- ## 无路由挂载(createRoot)
72
-
73
- 组件树直接挂载(弹窗宿主、微前端片段、非路由页面):
74
-
75
- ```ts
76
- import { createRoot, h } from 'weifuwu/ui-dom'
77
- const handle = createRoot(h(App, {}), document.getElementById('root')!, { ctx })
78
- await handle.ready // 首帧完成
79
- ```
80
-
81
- ## ctx.ui(组件库消费面——24 hooks)
82
-
83
- `useExternal`(共享状态)/ `useControlled`/`useControlledInput`(受控原语)/ `useOpen`/`usePopup`(弹层组合器——portal 定位/Escape/外部点击)/ `usePopupPosition` / `useTween` / `useInView` / `useScrollPosition` / `useGlobalKey` / `useDrag`/`useDragDrop` / `useMedia`/`useBreakpoint` / `useReducedMotion` / `useStableRef` / `useAnimationEnd` / `usePresence`(退场状态机)/ `useLongPress` / `useHoverCapable` / `useVisualViewport` / `useAsync` / `useChat`(AI 会话——消息/工具调用/审批)。
84
-
85
- 组件库(weifuwu/components)零引擎耦合:只消费 `ctx.ui` 契约——vdom3 与未来引擎可无缝替换。
86
-
87
- ## 事件流可观测(调试/测试)
88
-
89
- ```ts
90
- import { stream, evKey } from 'weifuwu/ui-dom'
91
- import { eventsOf, expectEventSequence } from 'weifuwu/ui-dom'
92
-
93
- const events = stream.events()
94
- eventsOf(events, 'node:create').length // 创建了几个节点
95
- // 决策层事件解释"为什么"(reuse/rebuild),执行层事件是"做了什么"——完全可断言
96
- ```
97
-
98
- **完整事件覆盖**(任何问题都在事件流可定位):
99
- - **错误**:`error:throw/caught`(工厂/renderFn/挂载/更新失败——phase 定位)+ **挂起超时**(renderFn/buildVNode 永不 resolve → 3s 检测——静默失败不再静默)
100
- - **内部决策**:`internal:queue/notfound/skip`(busy 排队/组件未定位)
101
- - **事件流自身**:`stream:overflow`(溢出可审计)/ `stream:watermark`(水位预警)/ `size()`/`capacity()`/`overflowCount()`/`subscribe(filter, fn)`(按层过滤订阅)
102
- - **文本操作**:`text:input`(输入/组合)/ `text:select`(选区)/ `text:copy/cut/paste`(剪贴板摘要)
103
- - **组件副作用**:`ref:mount` + `effect:animate/lock/unlock/focus/scroll`(动画/滚动锁/焦点 trap/滚动)
104
-
105
- 测试纪律(jsdom):`renderVNode`(VNode 层)/ `mountComponent`(同实例 re-render)/ `expectEventSequence`(精确事件序列)——渲染 = 事件序列断言。
106
-
107
- ### 多应用加载(app 节点)
108
-
109
- ```ts
110
- import { registerApp, App } from 'weifuwu/ui-dom'
111
-
112
- // 注册子应用(工厂——可 await 初始化——appId 复用不重跑)
113
- registerApp('mini-todo', (props, ctx) => h(MiniTodo, {}))
114
- // 父树中嵌入(不隔离设计——共享流/全局 id——天然归属唯一)
115
- h(App, { appId: 'mini-todo', props: { title } })
116
- ```
117
- - 边界事件(同流):`app:mount` / `app:update`(props keys)/ `app:unmount` / `app:error`(unknown-app)——payload 带 appId 可区分
118
- - 子应用独立状态(工厂闭包)——渲染/事件与父同流(全链路可观测——调试一条流)
119
-
120
- ## SSR(事件流形态——DOM = fold 不变量)
121
-
122
- vdom3 SSR 不是 HTML 字符串 + 游标收养,而是**事件流序列化**:
123
-
124
- ```ts
125
- // 服务端:构建 → 事件流 → HTML + 序列化事件
126
- import { renderToEvents, eventsToHtml, serializeEvents } from 'weifuwu/ui-dom'
127
- const events = await renderToEvents(vnode) // 事件流(node:create/insert/...)
128
- const html = eventsToHtml(events) // 首帧 HTML
129
- const data = serializeEvents(events) // 序列化事件(__DATA__)
130
- // 客户端:replay(events, root) —— 零 DOM 猜测,与服务端 HTML 同构
131
- import { deserializeEvents, replay } from 'weifuwu/ui-dom'
132
- replay(deserializeEvents(data), root)
133
- ```
134
-
135
- `ctx.data.get(key, fetcher)` 三场景自动适配(SSR 真 fetch → 序列化进 `__DATA__` → 客户端种子命中 → SPA 未命中触发 fetcher)。
136
-
137
- ## 组件纪律速查(事故沉淀——详见 AGENTS.md)
138
-
139
- - **render-only**:状态是普通对象(`let` + 显式 `render()`)——禁止隐式触发
140
- - **mount/render 分工**:只依赖稳定引用的回调(ctx/挂载闭包)→ mount 定义(零重绑);依赖最新 props → render 内定义(重绑是正确性要求)
141
- - **ref 稳定**:带清理的 ref 定义在 mount 作用域(内联 ref 每次渲染新函数 → ref(null) 反复触发)
142
- - **浮层**:`ctx.ui.openPopup`(命令式——#__wf_portal 统一容器)——禁止 absolute 相对父容器
143
- - **浏览器环境**:组件用 `ctx.browser`(禁裸 window/document)——SSR 安全三态
144
- - **事件 handler**:代理 Map 覆盖——handler 更新零重绑零事件(稳定引用仅为性能建议——结构共享收益前提)
145
- - **props 不可变(红线——Chat 空 bubble 事故)**:**禁止原地修改 props 引用的对象**(`m.content += text`)——vdom3 剪枝按 props 浅比较判断"未变"→ 复用旧输出 → 渲染不更新。**状态更新必须新建对象**(`$.msgs[i] = { ...m, content: ... }`——引用变 → 剪枝不命中 → 重渲染)。排查"渲染没更新"时看 `__wf_tail` 的 `comp:build` 事件 `reason: 'reuse-skip'`(= 契约:props 引用未变)
146
-
147
- ## 与后端共享
148
-
149
- - 中间件理念同构:后端 `app.use`(ctx.sql/redis/api/...)↔ 前端 `createRouter(routes, root, { ctx })`(ctx.api/auth/...)
150
- - 路由参数:`ctx.route.params`(对齐后端 `ctx.params`)
151
- - `weifuwu/dev`(Node loader):服务端直接跑 `.tsx`——与 `ctx.ui.js` 前端动态编译对称,两端同一 JSX 运行时
152
-
153
- ## 参考
154
-
155
- - 组件库蓝本:`apps/components-demo`(115 组件 + createRouter 装配)
156
- - 完整应用:`apps/agent-platform`(多租户 AI 平台——认证守卫/嵌套布局/AI 会话)
157
- - 布局蓝本:`apps/layouts-demo`(8 种布局模式)