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
@@ -0,0 +1,46 @@
1
+ /**
2
+ * vdom hooks — ai-stream(流式 AI 工具——P2 组件迁移移植——零 ui-dom)
3
+ *
4
+ * wf: SSE 协议流式解析(event: <name> / data: <json> 块)——分发到
5
+ * onToken/onToolCall/onApproval 等回调——AbortController 取消——
6
+ * onError 统一(HTTP 状态映射/网络失败/解析失败)——provider 协议
7
+ * 类型来自 server/ai/types(服务端同源契约)。
8
+ *
9
+ * 组件消费(SheetGrid/SlideCanvas/Editor——AI 公式/生成)——
10
+ * 非公共面(内部路径导入——公共面保持 h/jsx/uiServe/UIRouter)。
11
+ */
12
+ import type { WfApprovalRequest, WfDone, WfError, WfStreamEvent, WfToolCall, WfToolProgress, WfToolResult, WfUsage } from '../../../server/ai/types.ts';
13
+ /** 事件回调面(组件消费) */
14
+ export interface AiStreamCallbacks {
15
+ onToken?: (text: string) => void;
16
+ onToolCall?: (call: WfToolCall) => void;
17
+ onToolResult?: (result: WfToolResult) => void;
18
+ onToolProgress?: (p: WfToolProgress) => void;
19
+ onStep?: (step: {
20
+ type: 'llm' | 'tool';
21
+ content?: string;
22
+ toolCallId?: string;
23
+ name?: string;
24
+ }) => void;
25
+ onApproval?: (req: WfApprovalRequest) => void;
26
+ onUsage?: (u: WfUsage) => void;
27
+ onDone?: (d: WfDone) => void;
28
+ onError?: (e: WfError) => void;
29
+ /** 未知/x:* 事件兜底 */
30
+ onEvent?: (name: string, data: unknown) => void;
31
+ }
32
+ export interface AiStreamOptions extends AiStreamCallbacks {
33
+ headers?: Record<string, string>;
34
+ signal?: AbortSignal;
35
+ traceId?: string;
36
+ /** 事件记录(record 开关——默认开——RECORD_LIMIT 环) */
37
+ record?: boolean;
38
+ }
39
+ export interface AiStreamHandle {
40
+ abort(): void;
41
+ done: Promise<void>;
42
+ traceId: string;
43
+ events: WfStreamEvent[];
44
+ }
45
+ /** wf: SSE 流式请求(POST——事件回调分发——Abort 取消) */
46
+ export declare function aiStream(url: string, body: unknown, options?: AiStreamOptions): AiStreamHandle;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * vdom hooks — 基础 hooks(useStableRef/useOpen/useGlobalKey)
3
+ *
4
+ * 设计(render-only 模型——设计规则 §4.2):
5
+ * - useStableRef:稳定引用容器(跨渲染保持——hooks 内部传递——引擎责任)
6
+ * - useOpen:受控/非受控开关(**受控缺回调 warn**——设计规则 §5.2——
7
+ * 静默不可用防护);非受控内部状态 + 显式渲染
8
+ * - useGlobalKey:全局键盘监听(Escape 关闭等——unmount 自动清理——
9
+ * 经 ctx.browser.window——零全局直接访问)
10
+ */
11
+ import type { HookEnv } from './env.ts';
12
+ /** 稳定引用容器(跨渲染保持——回调稳定引用——hooks 内部传递) */
13
+ export interface StableRef<T> {
14
+ current: T;
15
+ }
16
+ /** 稳定引用(**双形状**:容器 { current }——vdom 内部;ref 回调
17
+ * (el) => void——ui-dom 兼容——Select 用 `useStableRef(init, cleanup)`) */
18
+ export declare function useStableRef<T>(env: HookEnv, initial: T | ((el: T | null) => void), cleanup?: () => void): StableRef<T> | ((el: T | null) => void);
19
+ /** useOpen 结果(getter open——渲染期读最新) */
20
+ export interface OpenState {
21
+ open: boolean;
22
+ setOpen(v: boolean): void;
23
+ toggle(): void;
24
+ }
25
+ /** useOpen 选项(ui-dom 兼容对象形状——组件消费:{ open, onOpenChange, name }) */
26
+ export interface UseOpenOptions {
27
+ open?: boolean;
28
+ onOpenChange?: (v: boolean) => void;
29
+ openOnFocus?: boolean;
30
+ name?: string;
31
+ }
32
+ /** 受控/非受控开关(受控:open 由父独占——onOpenChange 唯一出口)
33
+ * **渲染期调用**(renderFn 内 ctx.ui.useOpen)——hook 状态缓存(per-instance
34
+ * index)——受控值读最新 props(设计规则 §3.1——renderFn 读最新 props)
35
+ * **双形状**:`useOpen(init, controlled?)`(vdom 既有)/
36
+ * `useOpen({ open, onOpenChange, name })`(ui-dom 兼容——组件消费) */
37
+ export declare function useOpen(env: HookEnv, initOrOpts: boolean | UseOpenOptions, controlled?: {
38
+ open?: boolean;
39
+ onOpenChange?: (v: boolean) => void;
40
+ }): OpenState;
41
+ /** 全局键盘监听(Escape 关闭等——unmount 自动清理) */
42
+ export declare function useGlobalKey(env: HookEnv, matchOrHandler: string | ((e: KeyboardEvent) => boolean) | ((e: KeyboardEvent) => void), handler?: (e: KeyboardEvent) => void): () => void;
@@ -0,0 +1,91 @@
1
+ /**
2
+ * vdom hooks — useChat(AI 对话会话——流式消息累积)
3
+ *
4
+ * 设计(设计规则 §4.2——useChat 会话:消息累积/工具调用/HITL 审批——
5
+ * handle 带 subscribe(cb)——ctx.ui.useExternal(chat) 订阅会话变化——
6
+ * 流式事件 → notify → 订阅组件自动重渲染——高频 notify 由写者控制频率):
7
+ * - send(text):用户消息 + 助手流式累积(SSE/NDJSON 行解析——fetch POST)
8
+ * - handle 兼容 ExternalStore(state = messages getter——useExternal 消费)
9
+ * - stop:AbortController 中断流式
10
+ * - 消息形状:role/content/toolCalls/status/approval(HITL 审批位)
11
+ */
12
+ import type { HookEnv } from './env.ts';
13
+ import type { ExternalStore } from '../store.ts';
14
+ /** 聊天消息(AI 会话——工具调用/HITL 审批位) */
15
+ /** 工具调用(assistant 发起——HITL 审批——ui-dom 兼容 call/progress/result 状态面) */
16
+ export interface ChatToolCall {
17
+ id: string;
18
+ name: string;
19
+ args: unknown;
20
+ approved?: boolean;
21
+ feedback?: string;
22
+ status?: 'running' | 'ok' | 'error';
23
+ call?: unknown;
24
+ progress?: unknown;
25
+ result?: unknown;
26
+ /** HITL 审批请求(ui-dom 兼容——AiChat 读 toolCall 级 approval) */
27
+ approval?: import('../../../server/ai/types.ts').WfApprovalRequest;
28
+ }
29
+ export interface ChatMessage {
30
+ id: string;
31
+ role: 'user' | 'assistant' | 'system';
32
+ content: string;
33
+ /** 推理过程(wf:done 后挂上——ReasoningBlock 展示——ui-dom 兼容) */
34
+ reasoning?: string;
35
+ /** 工具调用(assistant 发起——HITL 审批) */
36
+ toolCalls?: ChatToolCall[];
37
+ /** 消息状态(流式中/错误) */
38
+ status?: 'streaming' | 'error';
39
+ /** 用量(ui-dom 兼容) */
40
+ usage?: import('../../../server/ai/types.ts').WfUsage;
41
+ /** HITL 审批请求(ui-dom 兼容——AiChat 读消息级 approval) */
42
+ approval?: import('../../../server/ai/types.ts').WfApprovalRequest;
43
+ /** 错误(ui-dom 兼容) */
44
+ error?: import('../../../server/ai/types.ts').WfError;
45
+ }
46
+ export interface ChatOptions {
47
+ /** 会话端点(默认 /api/chat——POST——NDJSON 流式响应) */
48
+ url?: string | (() => string);
49
+ /** 系统提示(首条 system 消息) */
50
+ system?: string;
51
+ /** 初始消息 */
52
+ initialMessages?: ChatMessage[];
53
+ /** 流式分块解析(默认:每行 JSON——{ content }) */
54
+ parseChunk?: (line: string) => {
55
+ content?: string;
56
+ toolCalls?: ChatMessage['toolCalls'];
57
+ } | null;
58
+ }
59
+ /** 会话状态 */
60
+ export type ChatStatus = 'idle' | 'streaming' | 'error';
61
+ /** 会话 handle(兼容 ExternalStore——useExternal(chat) 订阅) */
62
+ export interface ChatHandle extends ExternalStore<ChatMessage[]> {
63
+ /** 消息列表(= state——getter) */
64
+ messages: ChatMessage[];
65
+ /** 发送消息(用户消息 + 助手流式累积——无参用 state.input——ui-dom 兼容) */
66
+ send(text?: string): Promise<void>;
67
+ /** 中断流式 */
68
+ stop(): void;
69
+ /** 重试(ui-dom 兼容——AiChat onRetry——重发最后一条用户消息) */
70
+ retry(): void;
71
+ /** 清空会话 */
72
+ reset(): void;
73
+ /** 会话状态 */
74
+ status: ChatStatus;
75
+ /** 输入态(ui-dom 兼容——AiChat 受控输入) */
76
+ input: string;
77
+ setInput(v: string): void;
78
+ /** 流式中(ui-dom 兼容) */
79
+ streaming: boolean;
80
+ /** 最近错误(ui-dom 兼容) */
81
+ error: import('../../../server/ai/types.ts').WfError | null;
82
+ /** 用量(ui-dom 兼容——wf:usage) */
83
+ usage: import('../../../server/ai/types.ts').WfUsage | null;
84
+ /** 最近 wf:step(思考/工具指示——done/error 清空) */
85
+ step: import('../../../server/ai/types.ts').WfStep | null;
86
+ /** 响应 HITL 审批(协议 §4.5——ui-dom 兼容:
87
+ * approve(decision, note?, modifiedArgs?)——modified 决策带修改后参数) */
88
+ approve(decision: string, note?: string, modifiedArgs?: Record<string, unknown>): Promise<void>;
89
+ }
90
+ /** useChat(工厂调用——会话生命周期——订阅经 useExternal) */
91
+ export declare function useChat(env: HookEnv, opts: ChatOptions): ChatHandle;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * vdom hooks — useControlled(受控值——受控 props 语义)
3
+ *
4
+ * 规则(设计规则 §5.2/§5.3):受控值由父独占——onChange 唯一出口;
5
+ * 非受控内部状态(hook 状态缓存——渲染期调用——读最新 props);
6
+ * 受控缺回调 warn(静默不可用防护)。
7
+ */
8
+ import type { HookEnv } from './env.ts';
9
+ /** useControlled 选项(ui-dom 兼容——含 name——组件消费) */
10
+ export interface ControlledOptions<T> {
11
+ value?: T;
12
+ onChange?: (v: T) => void;
13
+ name?: string;
14
+ }
15
+ /** useControlled 结果 */
16
+ export interface ControlledValue<T> {
17
+ /** 当前值(受控读 props——非受控读内部状态) */
18
+ value: T;
19
+ /** 设置(受控 → onChange 回调;非受控 → 内部 + 重渲染) */
20
+ setValue(v: T): void;
21
+ /** 原受控选项(ui-dom 兼容——组件读 controlled 原引用) */
22
+ controlled: ControlledOptions<T>;
23
+ }
24
+ /** 受控/非受控值(渲染期调用——受控读最新 props)
25
+ * **双形状**:useControlled(controlled, defaultValue?)——defaultValue 可选
26
+ * (ui-dom 兼容单参对象——无默认值时非受控初始为 undefined) */
27
+ export declare function useControlled<T>(env: HookEnv, controlled: ControlledOptions<T>, defaultValue?: T): ControlledValue<T>;
@@ -0,0 +1,52 @@
1
+ /**
2
+ * vdom hooks — drag/breakpoint(useDragDrop + useMedia/useBreakpoint)
3
+ *
4
+ * - useDragDrop:拖拽(draggable enumerated 属性显式 'true'——field/
5
+ * attributes 已处理;drag 事件回调——unmount 清理)
6
+ * - useMedia:媒体查询匹配(matchMedia——change 监听 → 重渲染——
7
+ * 经 ctx.browser.window——零全局直接访问;环境无 matchMedia → 恒 false)
8
+ * - useBreakpoint:命名断点(min-width 语义——当前匹配的最大宽度断点)
9
+ */
10
+ import type { HookEnv } from './env.ts';
11
+ /** useDragDrop 结果(拖拽属性——应用于拖拽源/放置目标) */
12
+ export interface DragDrop {
13
+ /** 拖拽源属性(draggable + drag 事件) */
14
+ draggableProps: {
15
+ draggable: true;
16
+ onDragStart: (e: DragEvent) => void;
17
+ onDragEnd: (e: DragEvent) => void;
18
+ };
19
+ /** 拖拽源属性别名(ui-dom 兼容——Kanban 用) */
20
+ dragProps: {
21
+ draggable: true;
22
+ onDragStart: (e: DragEvent) => void;
23
+ onDragEnd: (e: DragEvent) => void;
24
+ };
25
+ /** 放置目标属性 */
26
+ dropProps: {
27
+ onDragOver: (e: DragEvent) => void;
28
+ onDragLeave: (e: DragEvent) => void;
29
+ onDrop: (e: DragEvent) => void;
30
+ };
31
+ }
32
+ export interface DragDropOptions {
33
+ onDragStart?: (e: DragEvent, data?: unknown) => void;
34
+ onDragEnd?: (e: DragEvent) => void;
35
+ onDragOver?: (e: DragEvent) => void;
36
+ onDragLeave?: (e: DragEvent) => void;
37
+ onDrop?: (e: DragEvent, data?: unknown) => void;
38
+ /** 拖拽数据(dataTransfer 传递) */
39
+ data?: unknown;
40
+ }
41
+ /** 拖拽(draggable enumerated 显式 'true'——事件回调——组件层传 data) */
42
+ export declare function useDragDrop(env: HookEnv, opts: DragDropOptions): DragDrop;
43
+ /** 媒体查询匹配(**getter 形态——2026-08**)——返回 `() => boolean`:
44
+ * 任何时刻调用都返回最新匹配值——mount 闭包持有 getter 永远最新——
45
+ * 「必须在 renderFn 内调用」的调用位置规则**在 API 形状上不存在**
46
+ * (旧快照返回:mount 闭包读一次永不更新——契约 6 静默失效类)
47
+ * **登记幂等(按 query 的实例级 keyed——不依赖调用顺序)**:任意位置
48
+ * 任意次数调用不重复监听——change → 更新 + requestRender → 重渲染 */
49
+ export declare function useMedia(env: HookEnv, query: string): () => boolean;
50
+ /** 命名断点(min-width 语义——**getter 形态**——`bp()` 任何时刻最新——
51
+ * 事件驱动重渲染——内部 useMedia 按 query 幂等登记) */
52
+ export declare function useBreakpoint(env: HookEnv, breakpoints: Record<string, number>): () => string;
@@ -0,0 +1,119 @@
1
+ /**
2
+ * vdom hooks — env(hooks 环境——per 组件实例)
3
+ *
4
+ * 设计(2026-12):hooks 经 **ctx.ui 面**调用(`ctx.ui.useXXX`)——
5
+ * instCtx.ui = createUi(env)——env 闭包绑定**当前组件实例**(compId 渲染
6
+ * 触发/卸载注册)——无全局状态(零全局依赖——测试隔离天然)。
7
+ *
8
+ * requestRender = 组件级重渲染触发(当前实现:页面级 render——组件复用
9
+ * 保持状态——组件级精准渲染为后续优化)。
10
+ */
11
+ import type { ExternalStore } from '../store.ts';
12
+ import { type PopupHandle, type PopupOpenOptions } from './popup-manager.ts';
13
+ import { type TweenOptions } from './stable.ts';
14
+ /** hooks 环境(per 组件实例——renderComponent 注入) */
15
+ export interface HookEnv {
16
+ /** 组件级渲染触发(store 变化/事件驱动 hooks → 重渲染) */
17
+ requestRender(): void;
18
+ /** 卸载注册(useExternal 退订等清理) */
19
+ onUnmount(fn: () => void): void;
20
+ /** 浏览器环境(全局监听等——零全局直接访问) */
21
+ getBrowser(): import('../browser/Browser.ts').Browser | null;
22
+ /** hook 状态缓存(渲染期调用——按调用顺序 index——per-instance) */
23
+ nextHookIndex(): number;
24
+ getHookState<T>(idx: number): T | undefined;
25
+ setHookState<T>(idx: number, v: T): void;
26
+ /** **实例级 keyed 登记(2026-08——getter 化 hooks)**:按业务 key 幂等——
27
+ * 不依赖调用顺序(useMedia/useExternal 可在任意位置任意次数调用——
28
+ * 订阅注册幂等按 key——「调用位置规则」在 API 形状上不存在) */
29
+ getInstanceData(): Map<unknown, unknown>;
30
+ /** 渲染完成后回调(挂载后动作——目标元素已就绪) */
31
+ scheduleAfterRender(fn: () => void): void;
32
+ /** 共享 ctx(portal 独立通道——浮层内容组件继承 sharedCtx 独立实例) */
33
+ getSharedContext(): import('../context/UIContext.ts').UIContext | null;
34
+ }
35
+ /** hooks 注入面(ctx.ui)
36
+ *
37
+ * **getter 化纪律(2026-08——返回值形态 = 语义的载体)**:
38
+ * - `() => T`(getter):会随时间变化——**任何位置调用返回最新值**——
39
+ * mount 闭包持有永远最新——不存在「调用位置规则」(useExternal/
40
+ * useMedia/useBreakpoint——旧快照形态的静默失效类)
41
+ * - `{...}`(handle):一次性创建的资源/服务——mount 期获取长期持有
42
+ * - 直接值:纯计算/常量
43
+ * - **登记幂等**:getter 类 hook 按业务 key 登记(不依赖调用顺序)——
44
+ * 任意位置任意次数调用不重复订阅/监听 */
45
+ export interface Ui {
46
+ /** 共享状态订阅(**getter 形态**——`get()` 永远最新——store 变化 →
47
+ * 组件重渲染——unmount 自动退订——订阅幂等(重复调用不重复订阅)) */
48
+ useExternal<T>(store: ExternalStore<T>): () => T;
49
+ /** 响应式信号(顶层 createSignal——getter 读 + set/update 写 + 订阅——
50
+ * useExternal 同源消费(Signal 兼容 ExternalStore)) */
51
+ signal<T>(initial: T): import('../store.ts').Signal<T>;
52
+ /** 资源注册(**hold 语义**:声明的资源在组件卸载时自动释放——等价
53
+ * onUnmount——推荐名——「我持有的东西,卸载时释放」) */
54
+ hold(fn: () => void): void;
55
+ /** 稳定引用(双形状:容器 { current } / ref 回调 (el) => void——ui-dom 兼容) */
56
+ useStableRef<T>(initial: T | ((el: T | null) => void), cleanup?: () => void): import('./basic.ts').StableRef<T> | ((el: T | null) => void);
57
+ /** 受控/非受控开关(受控缺回调 warn——静默不可用防护——
58
+ * 双形状:useOpen(init, controlled?) / useOpen({ open, onOpenChange, name })) */
59
+ useOpen(initOrOpts: boolean | import('./basic.ts').UseOpenOptions, controlled?: {
60
+ open?: boolean;
61
+ onOpenChange?: (v: boolean) => void;
62
+ }): import('./basic.ts').OpenState;
63
+ /** 卸载注册(ui-dom 兼容——ctx.ui.onUnmount) */
64
+ onUnmount(fn: () => void): void;
65
+ /** 全局键盘监听(Escape 关闭等——unmount 自动清理——
66
+ * ui-dom 兼容单参:useGlobalKey((e) => ...) 无条件监听) */
67
+ useGlobalKey(matchOrHandler: string | ((e: KeyboardEvent) => boolean) | ((e: KeyboardEvent) => void), handler?: (e: KeyboardEvent) => void): () => void;
68
+ /** 命令式弹窗(唯一形态——2027-03:ctx.popup.open——toast 心智——
69
+ * 调用点构建内容——内核自管理挂载/更新/卸载——组件内部句柄同步样板) */
70
+ openPopup(opts: PopupOpenOptions): PopupHandle;
71
+ /** 弹层位置跟踪(scroll/resize 重算——Affix 阈值/宽度——0-rect 防护) */
72
+ usePopupPosition(options: import('./popup.ts').PopupPositionOptions): {
73
+ top: number;
74
+ left: number;
75
+ refresh: () => void;
76
+ };
77
+ /** 受控值(受控 props 语义——onChange 唯一出口——受控缺回调 warn) */
78
+ useControlled<T>(controlled: import('./controlled.ts').ControlledOptions<T>, defaultValue?: T): import('./controlled.ts').ControlledValue<T>;
79
+ /** 滚动位置跟踪(rAF 节流——事件驱动重渲染——视口/内部容器通用——
80
+ * ui-dom 兼容:{ getScroller } 对象 / 字符串 / 元素 / 函数) */
81
+ useScrollPosition(target?: import('./observe.ts').ScrollTarget): import('./observe.ts').ScrollPosition;
82
+ /** 可见性观察(IntersectionObserver——isIn 响应式——环境无 IO → 恒 false——
83
+ * ui-dom 兼容:{ root, threshold, target } 对象 / 元素 / 函数——
84
+ * 返回 observe/disconnect/ready——组件自管模式) */
85
+ useInView(options?: import('./observe.ts').UseInViewOptions | HTMLElement | (() => HTMLElement | null)): import('./observe.ts').InView;
86
+ /** 受控输入(内部输入态——焦点保持——IME 门控——选中回填) */
87
+ useControlledInput(controlled: {
88
+ value?: string;
89
+ onChange?: (v: string) => void;
90
+ name?: string;
91
+ }, opts?: {
92
+ name?: string;
93
+ }): import('./input.ts').ControlledInput;
94
+ /** 拖拽(draggable enumerated + drag 事件——dataTransfer 数据) */
95
+ useDragDrop(opts: import('./drag-media.ts').DragDropOptions): import('./drag-media.ts').DragDrop;
96
+ /** 媒体查询匹配(**getter 形态**——`match()` 任何时刻最新——变更→
97
+ * 自动重渲染——注册幂等按 query——任意位置调用) */
98
+ useMedia(query: string): () => boolean;
99
+ /** 命名断点(min-width 语义——**getter 形态**——`bp()` 当前最大断点) */
100
+ useBreakpoint(breakpoints: Record<string, number>): () => string;
101
+ /** AI 对话会话(流式消息累积——handle 兼容 useExternal 订阅) */
102
+ useChat(opts: import('./chat.ts').ChatOptions): import('./chat.ts').ChatHandle;
103
+ /** 数值补间(rAF + ease + reduced-motion 直落——目标变化自动补间——
104
+ * **对象 getter**:`tween.value` 永远最新——mount 闭包持有安全) */
105
+ useTween(target: number, opts?: TweenOptions): {
106
+ readonly value: number;
107
+ reset: (to: number) => void;
108
+ };
109
+ /** 指针拖拽(pointerdown 捕获 → window move/up 活动期监听——卸载释放) */
110
+ useDrag(options: import('./stable.ts').DragOptions): {
111
+ onPointerDown: (e: PointerEvent) => void;
112
+ };
113
+ /** 可视视口跟踪(键盘弹起/缩放——vv 不可用 → window resize fallback) */
114
+ useVisualViewport(): import('./stable.ts').VisualViewportHandle;
115
+ /** 响应式系统偏好(prefers-reduced-motion——mount 期一次判定) */
116
+ useReducedMotion(): boolean;
117
+ }
118
+ /** 创建 ctx.ui 面(env 绑定当前组件实例) */
119
+ export declare function createUi(env: HookEnv): Ui;
@@ -0,0 +1,43 @@
1
+ /**
2
+ * vdom hooks — useControlledInput(受控输入——设计规则 §5.3 纪律)
3
+ *
4
+ * 核心(受控输入纪律):**输入态不依赖受控 value 回流**——
5
+ * - keyword:内部输入态(输入期间 value 走内部态——不触发 onChange 回流——
6
+ * 父组件 render 不重挂 input——**焦点保持**)
7
+ * - setValue:触发 onChange(受控回流)
8
+ * - selectedLabel:选中回填(关闭后 input 回填选中 label——受控 onChange
9
+ * 不渲染时 props.value 不回流——input 空的坑)
10
+ * - **IME composition 门控**:中文输入法组合期间受控 value 重置打断——
11
+ * isComposing 门控 + onCompositionEnd 处理最终值
12
+ */
13
+ import type { HookEnv } from './env.ts';
14
+ export interface ControlledInput {
15
+ /** 原受控选项(ui-dom 兼容——Mentions 读 controlled 原引用) */
16
+ controlled: {
17
+ value?: string;
18
+ onChange?: (v: string) => void;
19
+ name?: string;
20
+ };
21
+ /** 受控值(渲染期读 props) */
22
+ value: string;
23
+ /** 触发 onChange(受控回流) */
24
+ setValue(v: string): void;
25
+ /** 内部输入态(输入期间——不回流——焦点保持) */
26
+ keyword: string;
27
+ setKeyword(v: string): void;
28
+ /** 选中回填(关闭后 input 回填选中 label) */
29
+ selectedLabel: string;
30
+ setSelectedLabel(v: string): void;
31
+ /** IME 组合门控(中文输入法) */
32
+ isComposing: boolean;
33
+ onCompositionStart(): void;
34
+ onCompositionEnd(): void;
35
+ }
36
+ /** 受控输入(渲染期调用——受控值读最新 props——内部态 hook 缓存) */
37
+ export declare function useControlledInput(env: HookEnv, controlled: {
38
+ value?: string;
39
+ onChange?: (v: string) => void;
40
+ name?: string;
41
+ }, opts?: {
42
+ name?: string;
43
+ }): ControlledInput;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * vdom hooks — observe(事件驱动响应式 hooks:useScrollPosition/useInView)
3
+ *
4
+ * 设计(设计规则 §4.2——hooks 是事件驱动重渲染——浏览器事件 → render——
5
+ * 与 $ 的「赋值自动」本质不同):
6
+ * - useScrollPosition:全局 scroll + rAF 节流——y 响应式(视口/内部容器
7
+ * 通用)——scroll 事件 → 重渲染——unmount 清理
8
+ * - useInView:IntersectionObserver——isIn 响应式——IO 回调 → 重渲染——
9
+ * unmount disconnect;环境无 IO(jsdom)→ 恒 false(测试注入 mock)
10
+ * - **目标元素未挂载**(首帧 ref 未就绪)→ 微任务重试注册(限次——防无限)
11
+ *
12
+ * 浏览器能力经 env.getBrowser()(零全局直接访问——设计规则 §5.5)。
13
+ */
14
+ import type { HookEnv } from './env.ts';
15
+ /** useScrollPosition 选项(ui-dom 兼容对象形状——组件消费:{ getScroller }) */
16
+ export interface UseScrollPositionOptions {
17
+ /** 滚动容器 getter(HTMLElement | Window——组件自管容器场景) */
18
+ getScroller?: () => HTMLElement | Window | null;
19
+ /** 容器(string 选择器 / 元素) */
20
+ root?: string | HTMLElement;
21
+ }
22
+ /** useScrollPosition 结果(**对象 getter 形态**——y/x 读时求值——mount
23
+ * 闭包持有永远最新——位置规则不存在;refresh 手动重算驱动) */
24
+ export interface ScrollPosition {
25
+ readonly y: number;
26
+ readonly x: number;
27
+ /** 手动重算(组件调用方驱动——读当前滚动位置——不触发渲染) */
28
+ refresh(): void;
29
+ }
30
+ /** 目标解析(ui-dom 兼容:对象 { getScroller } / 字符串 / 元素 / 函数 / 缺省=窗口) */
31
+ export type ScrollTarget = HTMLElement | (() => HTMLElement | null) | string | UseScrollPositionOptions;
32
+ /** 滚动位置跟踪(视口或内部容器——rAF 节流——事件驱动重渲染) */
33
+ export declare function useScrollPosition(env: HookEnv, target?: ScrollTarget): ScrollPosition;
34
+ /** useInView 选项(ui-dom 兼容对象形状——组件消费:{ root, threshold, target }) */
35
+ export interface UseInViewOptions {
36
+ /** 可见性变化回调(ui-dom 兼容——InfiniteScroll 用——双参 (entry, isIn)) */
37
+ onChange?(entry: unknown, isIn: boolean): void;
38
+ /** 根容器(元素或渲染期 getter——ui-dom 兼容) */
39
+ root?: HTMLElement | null | (() => HTMLElement | Element | null);
40
+ /** 阈值(值或渲染期 getter) */
41
+ threshold?: number | number[] | (() => number | number[]);
42
+ /** 边距(字符串或渲染期 getter——ui-dom 渲染期函数形状) */
43
+ rootMargin?: string | (() => string);
44
+ target?: HTMLElement | (() => HTMLElement | null);
45
+ }
46
+ /** useInView 结果(**对象 getter 形态**——isIn/ready 读时求值——mount
47
+ * 闭包持有永远最新) */
48
+ export interface InView {
49
+ readonly isIn: boolean;
50
+ /** 绑定 ref(el 挂载 → 观察;null → 断开) */
51
+ ref(el: HTMLElement | null): void;
52
+ /** 手动开始观察(组件自管 el 场景——BackTop/InView) */
53
+ observe(el: HTMLElement): void;
54
+ /** 停止观察 */
55
+ disconnect(): void;
56
+ /** 是否已注册(BackTop 用:ready && !isIn → 显示) */
57
+ readonly ready: boolean;
58
+ }
59
+ /** 可见性观察(IntersectionObserver——IO 回调 → 重渲染——环境无 IO → 恒 false) */
60
+ export declare function useInView(env: HookEnv, options?: UseInViewOptions | HTMLElement | (() => HTMLElement | null)): InView;
@@ -0,0 +1,92 @@
1
+ /**
2
+ * vdom 命令式弹窗内核(2027-03——一个形态:ctx.popup.open——toast 心智)
3
+ *
4
+ * 设计(design/imperative-popup-plan.md):
5
+ * - **唯一形态**:openPopup(opts) → PopupHandle——调用点构建内容——内核
6
+ * 自管理挂载/更新/卸载/销毁(挂载/卸载/销毁在实例内——无框架机制依赖)
7
+ * - **每次 openPopup = 独立实例**(普通闭包状态——非 hook 状态——无共享
8
+ * 冲突——NavMenu applierSame 类问题根治)
9
+ * - **渲染串行链 + 版本守卫**:链保证串行(防并发 diff);版本号丢弃过时
10
+ * 渲染(update 比渲染快时旧渲染跳过——无 applier 引用比较误判)
11
+ * - **零 Portal vnode**:内容直接 renderToStream 到独立 applier——主树
12
+ * 完全不知道浮层存在(与 ctx.toast 同构)
13
+ *
14
+ * 能力(组件层消费):
15
+ * - **定位**:anchor 锚定 + placement/center/gap/margin + 视口夹紧 +
16
+ * 0-rect 防护 + 面板未布局 rAF 重试(复用 computePos)
17
+ * - **交互**:外部点击关闭(el/panel 外)+ Escape 关闭(per-instance
18
+ * 监听——close 时移除——无常驻)
19
+ * - **会话级模态**:presence(退场动画 open→exit→closed→dispose)+
20
+ * trapFocus(Tab 焦点陷阱)+ lockScroll(滚动锁 + 焦点归还)
21
+ * - **mask**:遮罩 + 居中(maskClosable——危险操作防误触)
22
+ */
23
+ import type { VNodeChild } from '../core/vnode.ts';
24
+ import type { HookEnv } from './env.ts';
25
+ import { type PopupPlacement } from './popup.ts';
26
+ export type PopupPhase = 'closed' | 'open' | 'exit';
27
+ export interface PopupOpenOptions {
28
+ /** 内容(VNode 或工厂——打开/更新时构建——关闭态不构建) */
29
+ content: VNodeChild | (() => VNodeChild);
30
+ /** 锚点元素(锚定浮层——getter 渲染期读最新) */
31
+ anchor?: HTMLElement | (() => HTMLElement | null);
32
+ placement?: PopupPlacement | (() => PopupPlacement);
33
+ /** 左对齐(默认居中于锚点——水平+垂直) */
34
+ center?: boolean;
35
+ /** 锚点与面板间距 */
36
+ gap?: number;
37
+ /** 视口边距(夹紧) */
38
+ margin?: number;
39
+ /** 定位模式(none = 组件自定义定位——.wf-modal inset:0 居中) */
40
+ positioning?: 'anchor' | 'none';
41
+ /** 自定义坐标(光标处等——覆盖 computePos——width 面板宽度跟随 trigger——
42
+ * 同 usePopup position 语义) */
43
+ position?: () => {
44
+ x: number;
45
+ y: number;
46
+ width?: number;
47
+ };
48
+ /** 遮罩 + 居中(Img preview 等轻量居中弹层) */
49
+ mask?: boolean;
50
+ maskCentered?: boolean;
51
+ /** 遮罩点击关闭(默认 true——危险操作显式 false 防误触) */
52
+ maskClosable?: boolean;
53
+ /** 会话级模态:退场动画(open→exit→closed→dispose) */
54
+ presence?: boolean;
55
+ /** 焦点陷阱(Tab 面板内循环) */
56
+ trapFocus?: boolean;
57
+ /** 滚动锁(body overflow hidden + 关闭归还焦点) */
58
+ lockScroll?: boolean;
59
+ /** 外部点击关闭(默认 true——Confirm 等危险操作显式 false) */
60
+ closeOnOutside?: boolean;
61
+ /** Escape 关闭(默认 true) */
62
+ closeOnEscape?: boolean;
63
+ /** 容器 key(同组件多个弹层区分——默认 'popup') */
64
+ key?: string;
65
+ /** 关闭回调(内核 dispose 后——组件同步句柄状态) */
66
+ onClose?: () => void;
67
+ }
68
+ export interface PopupHandle {
69
+ /** 关闭(presence:exit 动画 → animationend → dispose) */
70
+ close(): void;
71
+ /** 内容更新(props 变化——diff 增量——自定义坐标同步读 position getter) */
72
+ update(content: VNodeChild): void;
73
+ /** 坐标/内容重渲染(组件状态变化后——Slider tooltip 跟随等) */
74
+ refresh(): void;
75
+ /** open getter */
76
+ get open(): boolean;
77
+ }
78
+ /**
79
+ * openPopup——命令式弹窗内核(唯一形态——toast 心智)
80
+ *
81
+ * 组件内部样板(受控同步):
82
+ * ```ts
83
+ * let handle: PopupHandle | null = null
84
+ * const syncPopup = (props) => {
85
+ * if (props.open && !handle)
86
+ * handle = ctx.ui.openPopup({ anchor: () => anchorEl, content: () => panelVn(props), onClose: () => { handle = null; ctx.ui.render() } })
87
+ * else if (!props.open && handle) { handle.close(); handle = null }
88
+ * else if (handle) handle.update(panelVn(props))
89
+ * }
90
+ * ```
91
+ */
92
+ export declare function openPopup(env: HookEnv, opts: PopupOpenOptions): PopupHandle;
@@ -0,0 +1,52 @@
1
+ /**
2
+ * vdom hooks — usePopup(浮层弹窗——28 个浮层组件的核心依赖)
3
+ *
4
+ * 能力(设计规则 §5.4——弹窗纪律):
5
+ * - **portal**:popup.portal(content, key)——createPortal 到 #__wf_portal +
6
+ * fixed 定位 + 视口夹紧(禁止 absolute 相对父容器)
7
+ * - **定位**:placement(top/bottom/left/right)+ center:false 左对齐 +
8
+ * gap/margin——打开时 refresh + 锚点变化自动重算
9
+ * - **el-null fallback**:锚点首帧未挂载——微任务重试
10
+ * - **外部点击关闭**:document mousedown——el/panel 外点击关闭
11
+ * (禁止自建 overlay 遮罩——会挡按钮)
12
+ * - **Escape 关闭**:document keydown
13
+ * - **open getter**:渲染期读最新(非创建时快照)
14
+ * - **panelRef 稳定**:ref 回调稳定引用(mount 作用域定义)
15
+ *
16
+ * 会话级模态(presence/焦点 trap/滚动锁——Modal/Drawer)后续实现。
17
+ */
18
+ import type { HookEnv } from './env.ts';
19
+ export type PopupPlacement = 'top' | 'bottom' | 'left' | 'right';
20
+ export type PopupPhase = 'closed' | 'open' | 'exit';
21
+ /** Placement 别名(ui-dom 兼容——HoverCard/Popover/Tooltip 消费) */
22
+ export type Placement = PopupPlacement;
23
+ export declare function computePos(el: HTMLElement, win: Window, panelW: number, panelH: number, placement: PopupPlacement, gap: number, margin: number, center: boolean): {
24
+ top: number;
25
+ left: number;
26
+ } | null;
27
+ /** 动画检查(根 + 直接子元素——Modal/Drawer 动画在子元素——jsdom 无动画) */
28
+ export declare function hasAnim(el: HTMLElement, win: Window): boolean;
29
+ /** 锚点解析(**el 优先**——真实 bug:`trigger ?? el` 让 trigger 字符串
30
+ * ('click'——触发方式装饰——vdom 组件显式 setOpen 驱动)优先——el getter
31
+ * 被忽略——refresh 锚点恒 null——浮层定位 0,0(左上角——agent-browser
32
+ * 实测 Dropdown 面板 rect 0,0)——ui-dom 语义:el 是锚点,trigger 是方式) */
33
+ export interface PopupPositionOptions {
34
+ /** 锚点元素(函数——ref 挂载后可用) */
35
+ el: () => HTMLElement | null;
36
+ /** 是否打开(关闭时跳过重算) */
37
+ isOpen?: () => boolean;
38
+ /** 重算回调(rect → 坐标)——Affix 阈值/宽度重算等 */
39
+ compute: (r: DOMRect) => {
40
+ top: number;
41
+ left: number;
42
+ };
43
+ /** 面板元素(视口夹紧用) */
44
+ panel?: () => HTMLElement | null;
45
+ margin?: number;
46
+ }
47
+ /** 弹层位置跟踪:scroll/resize 时自动重算 fixed 坐标(0 rect 防护) */
48
+ export declare function usePopupPosition(env: HookEnv, options: PopupPositionOptions): {
49
+ readonly top: number;
50
+ readonly left: number;
51
+ refresh: () => void;
52
+ };