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
@@ -1,42 +0,0 @@
1
- /**
2
- * weifuwu/ui-dom — 弹出层定位工具
3
- *
4
- * 基于 position: fixed 的坐标计算,替代 CSS absolute 定位。
5
- * 配合 createPortal 使用,让弹出层不受父级 overflow/transform 影响。
6
- */
7
- export interface FixedPos {
8
- top: number;
9
- left: number;
10
- }
11
- export type Placement = 'top' | 'bottom' | 'left' | 'right';
12
- export declare function computeFixedPosRect(rect: DOMRect, placement?: Placement, gap?: number, center?: boolean): FixedPos;
13
- /**
14
- * 根据触发元素和方向计算弹出层的 fixed 坐标
15
- * @param el 触发元素
16
- * @param placement 弹出方向
17
- * @param gap 间距(px),默认 6
18
- * @param center 是否居中于触发元素,默认 true
19
- */
20
- export declare function computeFixedPos(el: HTMLElement, placement?: Placement, gap?: number, center?: boolean): FixedPos;
21
- /**
22
- * 弹层视口夹紧——fixed 定位弹层超高/超宽时,超出视口部分不可交互。
23
- *
24
- * 实测场景:DatePicker datetime/range 面板高约 416px,锚点在页面中部时
25
- * bottom 超出视口 → 底部“确定/取消”按钮落在窗口外,真实点击不可达。
26
- *
27
- * 以面板真实渲染矩形(含 transform 居中偏移)为基准平移坐标,
28
- * 保证:top/left 不动时面板整体回到视口内(保留 margin 安全边距)。
29
- *
30
- * @param pos 计算出的坐标(top/left,可选 width)
31
- * @param panel 已渲染的面板元素;null/undefined 时不夹紧(调用方未提供)
32
- * @param margin 视口边缘安全边距(px),默认 8
33
- */
34
- export declare function clampToViewport(pos: {
35
- top: number;
36
- left: number;
37
- width?: number;
38
- }, panel: HTMLElement | null | undefined, margin?: number): {
39
- top: number;
40
- left: number;
41
- width?: number;
42
- };
@@ -1,24 +0,0 @@
1
- /**
2
- * createStore — 共享状态工厂(render-only 方案,见 design 归档)
3
- *
4
- * state 是**普通对象(非 Proxy)**——渲染是显式 render(),状态只是数据,
5
- * 无响应式引擎(无深度代理/Set/Map 绑定/isMounting 保护——§6.4 整节不需要)。
6
- *
7
- * 订阅:任何状态变化 → notify() → 所有订阅者(useExternal 注册的组件)重渲染。
8
- * 作用域由创建位置决定:模块级(全局共享)/ 组件工厂(局部共享)/ ctx 注入(请求级)。
9
- */
10
- /** 可订阅状态契约(结构化类型——任何带 state+subscribe 的对象都可被 useExternal 订阅) */
11
- export interface ExternalStore<T = unknown> {
12
- /** 渲染期读最新值(普通对象,读什么就是什么) */
13
- state: T;
14
- /** 订阅状态变化(返回退订) */
15
- subscribe(cb: () => void): () => void;
16
- /** 合并赋值(自动通知订阅者)——推荐写路径 */
17
- set(partial: Partial<T>): void;
18
- /** 函数式变更(自动通知订阅者)——推荐写路径(如 push) */
19
- update(fn: (s: T) => void): void;
20
- /** 手动通知(逃生口:直接改 state 后调用) */
21
- notify(): void;
22
- }
23
- /** 创建共享状态(state 普通对象 + 订阅表 + 写路径) */
24
- export declare function createStore<T extends object>(init: T): ExternalStore<T>;
@@ -1,68 +0,0 @@
1
- /**
2
- * weifuwu/ui-dom/testing — 组件测试原语(vue/test-utils 模式)
3
- *
4
- * 收敛组件测试脚手架的官方工具:94 个测试文件曾手抄 renderVNode(3 种变体)、
5
- * 114 个手抄 mockCtx、20 个手抄 VNode 树遍历、25 个手抄同实例 mount 模式。
6
- *
7
- * 用法(node --test 直跑,零依赖):
8
- * ```ts
9
- * import { renderVNode, mountComponent, findByClass, createTestCtx, createPopupMock } from '../../ui-dom/testing.ts'
10
- * // 或 npm 用户:import { ... } from 'weifuwu/ui-dom/testing'
11
- * ```
12
- *
13
- * 纪律(AGENTS.md 测试节):
14
- * - `renderVNode`:两阶段组件渲染到 VNode 层(**只一层**——子组件保留函数引用,断言 type 而非 DOM)
15
- * - `mountComponent`:**同实例 re-render**(内部 `let` 状态流转测试)——`renderVNode` 每次是新 mount,状态会丢
16
- * - `findByClass`:class token 精确匹配(`split(' ')`——`includes` 会误匹配 `wf-a` ⊃ `wf-a-b`)
17
- * - `walkVNode`:处理嵌套数组 children(渲染器不展开嵌套数组——Select optgroup 教训)
18
- */
19
- import type { VNode } from './vnode.ts';
20
- import type { WfuiContext } from './types.ts';
21
- export declare function mountToDom(container: Element, vnode: any, _ctx: any): Promise<void>;
22
- export declare function patchToDom(container: Element, _node: Node | null, _prev: any, next: any, _ctx: any): Promise<any>;
23
- export declare function buildToDom(vnode: any, _ctx: any): Promise<any>;
24
- /**
25
- * 渲染两阶段异步组件到 VNode 层:await 工厂(mount)+ render 一次(内层)。
26
- * **只渲染一层**——子组件 VNode 的 type 是组件函数(断言 === Comp),不展开 DOM。
27
- * 统一 async 签名(weifuwu 只支持 async 两阶段组件)——总是返回 Promise<VNode>。
28
- * 注意:每次调用是**新 mount**——内部 `let` 状态不保留;测状态流转用 `mountComponent`。
29
- */
30
- export declare function renderVNode(Comp: any, props: Record<string, any>, ctx: WfuiContext): Promise<VNode | null>;
31
- /**
32
- * 同实例渲染器:await 工厂(mount 一次),之后每次调用重跑内层 render(保留内部 `let` 状态)。
33
- * 交互测试(点击/输入后状态流转)必须用这个——`renderVNode` 每次是新 mount 会丢状态。
34
- */
35
- export declare function mountComponent(Comp: any, props: Record<string, any>, ctx: WfuiContext): Promise<() => VNode | null>;
36
- /**
37
- * 深度遍历 VNode 树(含嵌套数组 children——渲染器不展开嵌套数组,
38
- * 测试遍历必须处理:`[[div, div]]` 一层层深入)。
39
- * visitor 对每个节点调用(含根)。
40
- */
41
- export declare function walkVNode(vnode: unknown, visit: (n: any) => void): void;
42
- /** 按谓词查询第一个匹配节点(深度优先) */
43
- export declare function findVNode(vnode: unknown, pred: (n: any) => boolean): any;
44
- /** 收集所有 class token 精确匹配的节点(split(' ')——includes 会误匹配前缀) */
45
- export declare function findByClass(vnode: unknown, cls: string): any[];
46
- /**
47
- * 标准测试 ctx:`{ ui: { render, ready: true } }` + 覆盖。
48
- * overrides.ui 部分覆盖(可注入 usePopup/useScrollPosition 等任意原语 mock)。
49
- */
50
- export declare function createTestCtx(overrides?: {
51
- ui?: Partial<WfuiContext['ui']>;
52
- browser?: WfuiContext['browser'];
53
- }): WfuiContext;
54
- /**
55
- * usePopup 标准 mock:`get open()`(渲染期读最新)+ setOpen(默认 no-op;
56
- * 传第二个参数可转发到组件传入的 setOpen——Escape/外部点击关闭测试需要真实写 $)+ refresh + portal
57
- * (按 isOpen 条件渲染——closed 返回 null,模拟真实 popup 不挂载面板)。
58
- * ```ts
59
- * const ctx = createTestCtx({ ui: { usePopup: (opts: any) => createPopupMock(() => opts.isOpen(), opts.setOpen) } })
60
- * ```
61
- */
62
- export declare function createPopupMock(isOpen?: () => boolean, setOpen?: (v: boolean) => void): {
63
- readonly open: boolean;
64
- setOpen: (v: boolean) => void;
65
- refresh: () => void;
66
- portal: (content: any, _key?: string) => any;
67
- wrapProps: {};
68
- };
@@ -1,7 +0,0 @@
1
- function q(e){if(e==null||typeof e=="boolean")return"null";if(typeof e=="string"||typeof e=="number")return"text";let t=e.type;return typeof t=="function"?"comp":typeof t=="symbol"?t===G?"app":e.props?.portalKey!=null?"portal":"frag":"native"}function Te(e){return Array.isArray(e)?e.flatMap(t=>Te(t)):[e]}function T(e){if(e.children!=null)return Te(e.children);let t=e.props?.children??[];return Te(t)}var Z=Symbol("v3-fragment"),B=Symbol("v3-portal"),G=Symbol("v3-app");function h(e,t,n,o){let r={entity:e,action:t,ts:Date.now()};return n!=null&&(r.target=n),o!=null&&(r.payload=o),r}function sn(e=2e4,t){let n=[],o=0,r=0,s=0,a=!1,l=t?.watermark??.8,u=new Set,i=d=>n[(o+d)%e],c=(d,g)=>{n[(o+d)%e]=g},f=(d,g)=>{r<e?(c(r,d),r++):(c(0,d),o=(o+1)%e,g||(s++,(s%64===1||s===1)&&f(h("stream","overflow",void 0,{capacity:e,count:s,dropped:`${d.entity}:${d.action}`,droppedTarget:d.target??null}),!0)))},p=null,m=0;return{setSession(){return p=`s${++m}`,p},currentSession(){return p},emit(d){p!=null&&d.session==null&&(d.session=p),f(d,!1),l>0&&!a&&r>=e*l&&(a=!0,f(h("stream","watermark",void 0,{usage:r,capacity:e,ratio:l}),!0));for(let g of u)try{g(d)}catch{}},subscribe(d,g){let b=typeof d=="function"?null:d,y=typeof d=="function"?d:g,N=x=>{if(b==null){y(x);return}(Array.isArray(b)?b:[b]).includes(x.entity)&&y(x)};return u.add(N),()=>{u.delete(N)}},size(){return r},capacity(){return e},overflowCount(){return s},events(){let d=new Array(r);for(let g=0;g<r;g++)d[g]=i(g);return d},eventsBySession(d){return this.events().filter(g=>g.session===d)},inverse(d){switch(d.entity+":"+d.action){case"node:insert":return h("node","remove",d.target,{parent:d.payload?.parent});case"node:remove":return null;case"prop:update":return h("prop","update",d.target,{key:d.payload?.key,value:d.payload?.prev,prev:d.payload?.value});case"text:update":return h("text","update",d.target,{value:d.payload?.prev,prev:d.payload?.value});case"node:move":return null;default:return null}},reset(){o=0,r=0,s=0,a=!1}}}var w=sn();if(typeof globalThis<"u"){let e=globalThis;e.__wf_tail||(e.__wf_tail=(t=200,n)=>{let o=w.events().slice(-t);return n?o.filter(r=>!(n.comp&&r.payload?.name!==n.comp||n.decision&&r.payload?.reason!==n.decision||n.causeId&&r.payload?.causeId!==n.causeId)):o},e.__wf_builds=t=>{let n=w.events().filter(o=>o.entity==="comp"&&o.action==="build");return t?n.filter(o=>o.payload?.name===t).map(o=>({name:o.payload?.name,reason:o.payload?.reason,changedKeys:o.payload?.changedKeys})):n.map(o=>({name:o.payload?.name,reason:o.payload?.reason,changedKeys:o.payload?.changedKeys}))},e.__wf_recent=(t=50)=>w.events().slice(-t),e.__wf_comp=t=>w.events().filter(o=>!!(o.target===t||o.payload?.name&&!t)).map(o=>({entity:o.entity,action:o.action,target:o.target,payload:o.payload,session:o.session})))}var ln=0;function $(){return`n${++ln}`}function Le(e){if(!e)return 0;let t=0;for(let n of U.values())n.has(e)&&t++;return t}var U=new Map,nt=new Set,Se=new Map,Ze=new Map,Ve=new Map,Ce=new Map,Pe={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"},an={focusin:"focus",focusout:"blur",mouseover:"mouseenter",mouseout:"mouseleave"},un=new Set(["error","load","loadstart","loadend","abort","unload","resize","message"]),dn=new Set(["input","change","compositionstart","compositionend"]);function ot(e,t,n,o=!1){let r=U.get(t);r||(r=new Map,U.set(t,r)),r.set(e,{handler:n,once:o})}function cn(e,t){U.get(t)?.delete(e)&&w.emit(h("event","unbind",e,{event:t}))}function Ae(e){for(let[t,n]of U)n.delete(e)&&w.emit(h("event","unbind",e,{event:t}))}function le(e,t,n,o=!1){let r=e.getAttribute("data-v3-id");if(!r)return()=>{};ot(r,t,n,o);let s=Oe(e);return s&&Re(s,t),()=>cn(r,t)}function rt(e,t){let n=Oe(e);if(n){for(let[o,r]of Object.entries(t))if(typeof r=="function"&&/^on[A-Z]/.test(o)){let s=o.slice(2).toLowerCase(),a=Pe[s]??s;Se.get(n)?.has(a)||Re(n,s)}}}function Me(e){nt.add(e),fn()}var et=!1,_e=0,ie=[];function tt(){let e=document.getSelection?.(),t=e?.toString?.()??"",n=e?.anchorNode;return{target:n&&n.nodeType===1?n.getAttribute?.("data-v3-id")??null:n?.parentElement?.getAttribute?.("data-v3-id")??null,text:t}}function fn(){if(et||(et=!0,typeof document>"u"))return;let e=()=>{_e||(_e=requestAnimationFrame(()=>{_e=0;try{let{target:o,text:r}=tt();if(!r)return;w.emit(h("text","select",void 0,{target:o,length:r.length,sample:r.slice(0,40)}))}catch{}}))};ie.push(V(document,"selectionchange",e));let t=o=>{let{target:r,text:s}=tt(),a=s;return o.type==="paste"&&(a=o.clipboardData?.getData?.("text")??""),{target:r,sample:a.slice(0,40)}},n=o=>{if(!(o.type!=="copy"&&o.type!=="cut"&&o.type!=="paste"))try{let{target:r,sample:s}=t(o);if(!s)return;w.emit(h("text",o.type,void 0,{target:r,length:s.length,sample:s}))}catch{}};ie.push(V(document,"copy",n)),ie.push(V(document,"cut",n)),ie.push(V(document,"paste",n))}function Oe(e){let t=e;for(;t;){if(t.nodeType===1&&nt.has(t))return t;t=t.parentNode}return null}function Re(e,t){let n=Pe[t]??t,o=Se.get(e)??new Set;if(o.has(n))return;o.add(n),Se.set(e,o);let r=u=>pn(u),s=un.has(n);e.addEventListener(n,r,s?{capture:!0}:void 0);let a=Ze.get(e)??new Map;a.set(n,r),Ze.set(e,a);let l=e.hasAttribute("data-wf-portal-key")?`portal:${e.getAttribute("data-wf-portal-key")}`:"root";w.emit(h("event","bind",l,{event:n,delegated:!0}))}function V(e,t,n,o){let r=Pe[t]??t,s=Ve.get(r);s||(s=new Set,Ve.set(r,s)),s.add(n);let a=Ce.get(e)??new Map;if(!a.has(r)){let l=i=>{for(let c of Ve.get(r)??[])try{c(i)}catch{}},u=o?.capture?{capture:!0,passive:o?.passive??!1}:void 0;e.addEventListener(r,l,u),a.set(r,l),Ce.set(e,a),w.emit(h("event","bind",e===window?"window":"document",{event:r,delegated:!0,capture:o?.capture??!1}))}return()=>{if(s.delete(n),s.size===0){let l=a.get(r);l&&e.removeEventListener(r,l,o?.capture?{capture:!0}:void 0),a.delete(r),a.size===0&&Ce.delete(e),w.emit(h("event","unbind",e===window?"window":"document",{event:r}))}}}function Ie(e,t,n,o){if(ot(e,t,n),o){let r=Oe(o);r&&Re(r,t)}}function pn(e){let t=e.target;t&&t.nodeType===3&&(t=t.parentElement);let n=[];U.has(e.type)&&n.push(e.type);let o=an[e.type];if(o&&o!==e.type&&U.has(o)&&n.push(o),n.length!==0)for(;t;){if(!t.hasAttribute?.("data-v3-id")){let s=t.closest?.("[data-v3-id]");if(s&&s!==t){t=s;continue}}let r=t.getAttribute?.("data-v3-id");if(r){for(let s of n){let a=U.get(s)?.get(r);if(a){try{Object.defineProperty(e,"currentTarget",{value:t,configurable:!0})}catch{}try{a.handler(e)}catch{}if(dn.has(e.type)){let l=t?.value??null;w.emit(h("text","input",r,{event:e.type,value:typeof l=="string"?l.slice(0,100):null}))}if(a.once&&(U.get(s).delete(r),w.emit(h("event","unbind",r,{event:e.type}))),e.cancelBubble)break}}if(e.cancelBubble)break}t=t.parentElement}}var st=new Map;function He(e){e._id&&st.set(e._id,e)}function it(e){st.delete(e)}function ee(e){let t=document.getElementById("__wf_portal");t||(t=document.createElement("div"),t.id="__wf_portal",document.body.appendChild(t));let n=t.querySelector(`[data-wf-portal-key="${e}"]`);return n||(n=document.createElement("div"),n.setAttribute("data-wf-portal-key",e),t.appendChild(n)),n}var O=class{byId=new Map;idByNode=new WeakMap;removed=new Map;static PORTAL=t=>`portal:${t}`;resolveParent(t){return t.startsWith("portal:")?ee(t.slice(7)):this.get(t)}get(t){return t.startsWith("portal:")?ee(t.slice(7)):this.byId.get(t)??null}register(t,n){this.byId.set(t,n),this.idByNode.set(n,t)}idOf(t){return t?t.nodeType===1?t.getAttribute("data-v3-id")??this.idByNode.get(t)??"el":this.idByNode.get(t)??"node":"null"}unregister(t,n){this.byId.delete(t),this.removed.set(t,n)}takeRemoved(t){let n=this.removed.get(t);return n&&this.removed.delete(t),n??null}static ROOT="root"};function R(){return{activeElement:()=>typeof document<"u"?document.activeElement:null,byId:e=>typeof document<"u"?document.getElementById(e):null,query:e=>typeof document<"u"?document.querySelector(e):null,queryAll:e=>typeof document<"u"?document.querySelectorAll(e):null,createElement:e=>typeof document<"u"?document.createElement(e):null,createElementNS:(e,t)=>typeof document<"u"?document.createElementNS(e,t):null,createDocumentFragment:()=>typeof document<"u"?document.createDocumentFragment():null,createComment:e=>typeof document<"u"?document.createComment(e):null,createTextNode:e=>typeof document<"u"?document.createTextNode(e):null,addEventListener:(e,t,n)=>{typeof window<"u"&&window.addEventListener(e,t,n)},removeEventListener:(e,t,n)=>{typeof window<"u"&&window.removeEventListener(e,t,n)},scrollTo:e=>{typeof window<"u"&&window.scrollTo(0,e)},matchMedia:e=>typeof window<"u"&&typeof window.matchMedia=="function"?window.matchMedia(e):null,visualViewport:()=>(typeof window<"u"?window:null)?.visualViewport??null,scrollingElement:()=>typeof document<"u"?document.scrollingElement:null,bodyElement:()=>typeof document<"u"?document.body:null,bodyAppend:e=>{typeof document<"u"&&document.body.appendChild(e)},bodyRemove:e=>{typeof document<"u"&&e.parentNode&&document.body.removeChild(e)},clearBody:()=>{typeof document<"u"&&(document.body.innerHTML="")},event:(e,t)=>{let n=typeof window<"u"?window:null,o=t&&(t.key||t.code)?"KeyboardEvent":t&&(t.clientX!==void 0||t.clientY!==void 0||t.pointerId!==void 0)?"PointerEvent":"Event";try{return new n[o](e,t)}catch{return new n.Event(e,t)}},dispatchEvent:(e,t)=>typeof e<"u"?e.dispatchEvent(t):!1,reload:()=>{typeof window<"u"&&window.location.reload()},navigate:e=>{typeof window>"u"||(window.history.pushState(null,"",e),window.dispatchEvent(new PopStateEvent("popstate",{state:null})))},downloadFile:(e,t,n="text/plain")=>{try{if(typeof document>"u"||typeof URL>"u"||!URL.createObjectURL)return!1;let o=new Blob([t],{type:n}),r=URL.createObjectURL(o),s=document.createElement("a");return s.href=r,s.download=e,document.body.appendChild(s),s.click(),document.body.removeChild(s),setTimeout(()=>URL.revokeObjectURL(r),1e3),!0}catch{return!1}},copyText:async e=>{let t=typeof window<"u"?window:null;if(t?.navigator?.clipboard?.writeText)try{return await t.navigator.clipboard.writeText(e),!0}catch{}try{if(typeof document>"u")return!1;let n=document.createElement("textarea");n.value=e,n.style.position="fixed",n.style.opacity="0",document.body.appendChild(n),n.select();let o=document.execCommand("copy");return document.body.removeChild(n),o}catch{return!1}},execCommand:(e,t)=>typeof document<"u"?document.execCommand(e,!1,t):!1,queryCommandState:e=>typeof document<"u"?document.queryCommandState(e):!1,queryCommandValue:e=>typeof document<"u"?document.queryCommandValue(e):"",selectionText:()=>typeof window<"u"?window.getSelection?.()?.toString()??null:null,getSelection:()=>typeof window<"u"?window.getSelection():null,viewportHeight:()=>typeof window<"u"?window.innerHeight:0,viewportWidth:()=>typeof window<"u"?window.innerWidth:0,pathname:()=>typeof window<"u"?window.location.pathname:"",createTreeWalker:(e,t)=>typeof document<"u"?document.createTreeWalker(e,t??NodeFilter.SHOW_ALL):null,scrollTop:()=>{let e=typeof document<"u"?document:null,t=typeof window<"u"?window:null;return e?.scrollingElement?.scrollTop??t?.scrollY??0},hash:()=>typeof window<"u"?window.location?.hash??"":"",setHash:e=>{typeof window<"u"&&(window.location.hash=e)},timeout:(e,t)=>typeof window<"u"?window.setTimeout(e,t):0,onFormRestore:e=>typeof window>"u"||typeof document>"u"?()=>{}:(window.addEventListener("load",e,{once:!0}),window.addEventListener("pageshow",e),()=>{window.removeEventListener("load",e),window.removeEventListener("pageshow",e)}),rootElement:()=>typeof document<"u"?document.documentElement:null,storageGet:e=>{try{return typeof window<"u"?window.localStorage?.getItem(e)??null:null}catch{return null}},storageSet:(e,t)=>{try{typeof window<"u"&&window.localStorage?.setItem(e,t)}catch{}}}}var mn=new Map;function lt(e){return mn.get(e)??null}function at(e,t){let n=e.selfId(),o;return n&&(o=t.subscribe(()=>e.render([n])),e.onUnmount(()=>o?.())),t}function Ue(e,t){let n=e.selfId(),o=t.value!==void 0;if(o&&!t.onChange&&t.name&&(e.warned.has(t.name)||(e.warned.add(t.name),console.warn(`[weifuwu/${t.name}] \u53D7\u63A7\u6A21\u5F0F\uFF08value \u5DF2\u4F20\uFF09\u4F46\u672A\u63D0\u4F9B onChange\uFF0C\u4EA4\u4E92\u65E0\u6CD5\u751F\u6548\u3002
2
- \u975E\u53D7\u63A7\uFF1A\u53BB\u6389 value\uFF1B\u53D7\u63A7\uFF1A\u4F20\u5165 onChange={(v) => setValue(v)}`))),!o&&n&&!e.uncontrolledValues.has(n)){e.uncontrolledValues.set(n,t.value);let s=e.onUnmount(a=>{a===n&&(e.uncontrolledValues.delete(n),s())})}let r=s=>{if(o){t.onChange?.(s);return}n&&e.uncontrolledValues.set(n,s),n?e.render([n]):e.render()};return{value:o?t.value:n?e.uncontrolledValues.get(n):t.value,setValue:r,controlled:o}}function ut(e,t){let n=e.selfId(),o=Ue(e,{value:t.value,onChange:t.onChange,name:t.name});if(n&&!e.inputStates.has(n)){e.inputStates.set(n,{keyword:"",selectedLabel:""});let a=e.onUnmount(l=>{l===n&&(e.inputStates.delete(n),a())})}let r=n?e.inputStates.get(n):{keyword:"",selectedLabel:""},s=()=>{n?e.render([n]):e.render()};return{...o,get keyword(){return r.keyword},setKeyword(a){r.keyword=a,s()},get selectedLabel(){return r.selectedLabel},setSelectedLabel(a){r.selectedLabel=a,s()}}}function dt(e,t){let n=e.selfId(),o=!1;if(n){let u=e.onUnmount(i=>{i===n&&(o=!0,u())})}let r=()=>{o||(n?e.render([n]):e.render())},s={data:void 0,loading:!1,error:void 0},a=0,l=()=>{let u=++a;s.loading=!0,s.error=null,r(),Promise.resolve().then(()=>t()).then(i=>{a===u&&(s.data=i,s.loading=!1,r())}).catch(i=>{a===u&&(s.error=i,s.loading=!1,r())})};return l(),s.reload=l,s}function ct(e,t,n){return r=>{r?t(r):n?.()}}function ae(e){return typeof window<"u"&&!!window.matchMedia?.("(hover: hover)").matches}function De(e){return typeof window<"u"&&!!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches}function ft(e,t){let{onLongPress:n,duration:o=500}=t,r,s=0,a=0,l=null,u=()=>{clearTimeout(r),r=void 0},i=e.selfId();if(i){let c=e.onUnmount(f=>{f===i&&(u(),c())})}return{onPointerDown:c=>{s=c.clientX??0,a=c.clientY??0,l=c,u(),r=setTimeout(()=>{r=void 0,l&&n(l)},o)},onPointerUp:u,onPointerLeave:u,onPointerMove:c=>{let f=Math.abs((c.clientX??0)-s),p=Math.abs((c.clientY??0)-a);(f>10||p>10)&&u()},onContextMenu:c=>{c.preventDefault(),n(c)}}}function ue(e,t){let n=e.selfId(),o="closed",r,s=()=>{o="closed",n?e.render([n]):e.render()},a=null;return{get phase(){return o},ref:u=>{u?a||(r=()=>{o==="exit"&&s()},a=le(u,"animationend",r)):(a?.(),a=null,r=void 0)},sync:u=>(u?o="open":o==="open"&&(o="exit"),o)}}function pt(e,t,n){let o=e.selfId(),r=De(e),s=n?.duration??400,a=n?.ease==="linear"?p=>p:p=>1-Math.pow(1-p,3),l,u=t,i={value:r?t:0,reset:()=>{}},c=()=>{o?e.render([o]):e.render()},f=p=>{if(u=p,r){i.value=p,c();return}if(p===i.value)return;l&&cancelAnimationFrame(l);let m=i.value,d=performance.now(),g=b=>{let y=Math.min(1,(b-d)/s);i.value=Math.round(m+(p-m)*a(y)),y<1?(l=requestAnimationFrame(g),c()):(l=void 0,c())};l=requestAnimationFrame(g)};if(i.reset=p=>{p===u&&l||f(p)},o){let p=e.onUnmount(m=>{m===o&&(l&&(cancelAnimationFrame(l),l=void 0),p())})}return queueMicrotask(()=>f(t)),i}var mt=R();function yt(e,t="bottom",n=6,o=!0){switch(t){case"bottom":return{top:e.bottom+n,left:o?e.left+e.width/2:e.left};case"top":return{top:e.top-n,left:o?e.left+e.width/2:e.left};case"left":return{top:o?e.top+e.height/2:e.top,left:e.left-n};case"right":return{top:o?e.top+e.height/2:e.top,left:e.right+n}}}function de(e,t,n=8){if(!t)return e;let o=t.getBoundingClientRect();if(o.width===0&&o.height===0)return e;let r=Number.parseFloat(t.style.top)||o.top,s=Number.parseFloat(t.style.left)||o.left,a=e.top-r,l=e.left-s,u={top:o.top+a,bottom:o.bottom+a,left:o.left+l,right:o.right+l},i=mt.viewportWidth(),c=mt.viewportHeight(),f=e.top,p=e.left;return u.bottom>c-n&&(f=Math.max(n,f-(u.bottom-(c-n)))),u.top<n&&(f=Math.max(n,f+(n-u.top))),u.right>i-n&&(p=Math.max(n,p-(u.right-(i-n)))),u.left<n&&(p=Math.max(n,p+(n-u.left))),{top:f,left:p,width:e.width}}function oe(e,t,...n){let o=t?{...t}:{};return n.length>0&&(o.children=n.length===1?n[0]:n),{type:e,props:o,key:t?.key??null}}function ce(e,t){return{type:B,props:{children:Array.isArray(e)?e:[e],portalKey:t??"default"},key:t??null}}function We(e,t){let n=e.selfId(),o={top:0,left:0,refresh:()=>{}};if(!n)return o;let r={pos:o,getEl:t.el,isOpen:t.isOpen,compute:t.compute,panel:t.panel,margin:t.margin??8};e.popupTrackers.set(n,r),e.ensurePopupListeners();let s=e.onUnmount(a=>{a===n&&(e.popupTrackers.delete(n),s())});return o.refresh=()=>{let a=r.getEl();if(!a)return;let l=a.getBoundingClientRect();if(l.width===0&&l.height===0)return;let u=r.compute(l);Object.assign(o,de(u,r.panel?.(),r.margin))},o}function gt(e,t){let n=e.selfId(),o=e.browser,r=ae(e),s=()=>typeof t.trigger=="function"?t.trigger():t.trigger??"manual",a=t.open!==void 0,l=()=>!!t.disabled?.(),u=()=>a?typeof t.open=="function"?!!t.open():!!t.open:t.isOpen(),i=t.presence?ue(e,{name:t.name}):null,c,f=!1,p=v=>{if(!i)return v?"open":"closed";let k=i.sync(v);return v&&t.lockScroll&&!f&&(yn(),f=!0),k},m=v=>{l()||(a?t.onOpenChange?.(v):i?v?p(!0):u()&&p(!1):t.setOpen(v))},d=()=>{let v=t.placement;return typeof v=="function"?v():v??"bottom"},g=null,b=!1,y=We(e,{el:t.el??(()=>null),isOpen:()=>u(),compute:v=>{if(t.position){let k=t.position();return{top:k.y,left:k.x,width:k.width}}return yt(v,d(),t.gap??6,t.center!==!1)},panel:()=>g,margin:t.margin??8}),N=v=>{if(t.closeOnOutside===!1||t.mask||!u())return;let k=v.target;if(!(k instanceof Node))return;let A=t.el?.()??null;A&&A.contains(k)||g&&g.contains(k)||m(!1)},x=v=>{t.closeOnEscape!==!1&&(v.key!=="Escape"||!u()||m(!1))},S=V(o,"mousedown",N),Yt=V(o,"keydown",x);if(n){let v=e.onUnmount(k=>{k===n&&(S(),Yt(),v())})}let L={},ze=v=>typeof v=="function"?v():v??0,Je=()=>ze(t.openDelay),be=()=>ze(t.closeDelay),P,_,zt=()=>{clearTimeout(P),clearTimeout(_),P=void 0,_=void 0},Jt=v=>{if(l())return;let k=v.currentTarget,A=v.relatedTarget;k.contains(A)||(clearTimeout(_),_=void 0,P=setTimeout(()=>{P=void 0,m(!0)},Je()))},Qt=v=>{if(l())return;let k=v.currentTarget,A=v.relatedTarget;k.contains(A)||(clearTimeout(P),P=void 0,_=setTimeout(()=>{_=void 0,m(!1)},be()))},Zt=()=>{l()||(clearTimeout(_),_=void 0,P=setTimeout(()=>{P=void 0,m(!0)},Je()))},en=()=>{l()||(clearTimeout(P),P=void 0,_=setTimeout(()=>{_=void 0,m(!1)},be()))},ne=()=>s()==="hover";if(L.onMouseOver=v=>{ne()&&Jt(v)},L.onMouseOut=v=>{ne()&&Qt(v)},L.onClick=()=>{ne()?r||m(!u()):s()==="click"&&m(!0)},L.onFocus=()=>{ne()?Zt():s()==="focus"&&(clearTimeout(_),_=void 0,m(!0))},L.onBlur=()=>{ne()?en():s()==="focus"&&(clearTimeout(P),P=void 0,_=setTimeout(()=>{_=void 0,m(!1)},be()))},s()==="longpress"){let v,k=0,A=0,j=()=>{clearTimeout(v),v=void 0};L.onPointerDown=C=>{l()||(k=C.clientX??0,A=C.clientY??0,j(),v=setTimeout(()=>{v=void 0,t.onTrigger?.({clientX:k,clientY:A}),m(!0)},t.longPressDuration??500))},L.onPointerUp=j,L.onPointerLeave=j,L.onPointerMove=C=>{let ke=Math.abs((C.clientX??0)-k),xe=Math.abs((C.clientY??0)-A);(ke>10||xe>10)&&j()},L.onContextMenu=C=>{C.preventDefault(),t.onTrigger?.({clientX:C.clientX??0,clientY:C.clientY??0}),m(!0)}}if(L.onKeyDown=v=>{v.key==="Escape"&&t.closeOnEscape!==!1&&m(!1)},n){let v=e.onUnmount(k=>{k===n&&(zt(),v())})}let tn=v=>{v?(g=v,le(v,"animationend",()=>y.refresh(),!0)):g=null},Ee=null,Ne=null,Qe=v=>{tn(v),Ne&&Ne(v),i?.ref(v),t.trapFocus&&(v?c=wn(v):(c?.(),c=void 0)),t.lockScroll&&!v&&f&&(gn(),f=!1)};return{get open(){return u()},setOpen:m,get phase(){return i?i.phase:u()?"open":"closed"},sync:p,wrapProps:L,portal:(v,k="popover")=>{if(l())return null;if(!(i?i.phase!=="closed":u()))return b=!1,Ee=null,null;let j=t.el?.()??null;(!b||j!==Ee)&&(j?y.refresh():queueMicrotask(()=>{u()&&y.refresh()}),b=!0,Ee=j);let C=(v??oe("span")).props??{};if(!v)return null;Ne=C.ref??null;let ke=t.positioning==="none"?C.class??"":["wf-popup",C.class].filter(Boolean).join(" "),xe=t.positioning==="none"?{...C.style??{},position:"fixed"}:{...C.style??{},position:"fixed",top:`${y.top}px`,left:`${y.left}px`,...y.width!==void 0?{width:`${y.width}px`}:{},maxWidth:(()=>{let se=typeof t.width=="function"?t.width():t.width;return se!==void 0?`min(${se}px, calc(100vw - 32px))`:"calc(100vw - 32px)"})()},Q={...v,props:{...C,class:ke,style:xe,ref:Qe}};if(t.mask){let se=typeof t.mask=="object"?t.mask:oe("div",{class:"wf-popup-mask","data-portal-mask":k,onClick:t.maskClosable===!1?void 0:()=>m(!1)}),nn=t.maskCentered?oe("div",{class:"wf-cover",style:{"--wf-z":"var(--wf-z-popover)",pointerEvents:"none"}},{...Q,props:{...Q.props,style:{...C.style??{},pointerEvents:"auto"},ref:Qe}}):null,on=t.maskCentered?void 0:{...Q.props?.style??{},zIndex:"var(--wf-z-popover)"},rn=t.maskCentered?nn:{...Q,props:{...Q.props,style:on}};return ce([se,rn],k)}return ce(Q,k)},refresh:()=>y.refresh()}}function ht(e,t){let n=e.selfId();if(n&&!e.openStates.has(n)){e.openStates.set(n,!1);let l=e.onUnmount(u=>{u===n&&(e.openStates.delete(n),l())})}let o=t.open!==void 0;o&&!t.onOpenChange&&t.name&&!e.warned.has(t.name)&&(e.warned.add(t.name),console.warn(`[weifuwu/${t.name}] \u53D7\u63A7\u6A21\u5F0F\uFF08open \u5DF2\u4F20\uFF09\u4F46\u672A\u63D0\u4F9B onOpenChange\uFF0C\u4EA4\u4E92\u65E0\u6CD5\u751F\u6548\u3002
3
- \u975E\u53D7\u63A7\uFF1A\u53BB\u6389 open\uFF1B\u53D7\u63A7\uFF1A\u4F20\u5165 onOpenChange={(o) => setOpen(o)}`));let r=()=>o?!!t.open:n?e.openStates.get(n)??!1:!1,s=()=>{n?e.render([n]):e.render()},a=l=>{if(o){t.onOpenChange?.(l);return}n&&e.openStates.set(n,l),s()};return{get open(){return r()},setOpen:a,triggerProps:{onClick:()=>a(!0),onFocus:()=>{t.openOnFocus&&a(!0)}}}}var Y=R(),X=0,wt="",vt="",bt="",Et="",fe=0;function Nt(){return typeof window<"u"&&typeof document<"u"}function yn(){if(X++,w.emit(h("effect","lock",void 0,{depth:X})),X>1||!Nt())return;fe=Y.scrollTop();let e=Y.bodyElement();wt=e.style.overflow,vt=e.style.position,bt=e.style.top,Et=e.style.width,e.style.overflow="hidden",(/iPhone|iPad|iPod/.test(navigator.platform)||/Mac/.test(navigator.platform)&&"ontouchend"in document)&&(e.style.position="fixed",e.style.top=`-${fe}px`,e.style.width="100%")}function gn(){if(X===0||(X--,w.emit(h("effect","unlock",void 0,{depth:X})),X>0)||!Nt())return;let e=Y.bodyElement();e.style.overflow=wt,e.style.position=vt,e.style.top=bt,e.style.width=Et,fe>0&&Y.scrollTo(fe)}var hn='a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';function wn(e){let t;return queueMicrotask(()=>{let n=e.querySelectorAll(hn);if(n.length===0)return;let o=n[0],r=n[n.length-1],s=u=>{u.key==="Tab"&&(u.shiftKey&&Y.activeElement()===o?(u.preventDefault(),r.focus()):!u.shiftKey&&Y.activeElement()===r&&(u.preventDefault(),o.focus()))},a=Y.activeElement();w.emit(h("effect","focus",void 0,{mode:"trap-start"})),o.focus();let l=V(e,"keydown",s);t=()=>{l(),w.emit(h("effect","focus",void 0,{mode:"restore"})),a?.focus()}}),()=>t?.()}function kt(e,t,n){let o=e.selfId(),r=e.browser,s=`media:${o}:${t}`;if(!e.mediaRegistry.has(s)){let a=r.matchMedia(t);n(a.matches);let l=i=>n(i.matches);V(a,"change",l),e.mediaRegistry.set(s,{mql:a,handler:l});let u=e.onUnmount(i=>{if(i!==o)return;let c=e.mediaRegistry.get(s);if(c?.mql&&c.handler)try{c.mql.removeEventListener("change",c.handler)}catch{}e.mediaRegistry.delete(s),u()})}}function xt(e,t,n){let o=e.browser,r=typeof t=="function"?{mobile:"(max-width: 639px)",tablet:"(min-width: 640px) and (max-width: 1023px)",desktop:"(min-width: 1024px)"}:t,s=typeof t=="function"?t:n,a=e.selfId(),l=`bp:${a}`;function u(){for(let[i,c]of Object.entries(r))if(o.matchMedia(c).matches)return i;return Object.keys(r)[0]??""}if(!e.mediaRegistry.has(l)){s(u());let i=[];for(let f of Object.values(r)){let p=o.matchMedia(f),m=()=>s(u());V(p,"change",m),i.push({mql:p,handler:m})}e.mediaRegistry.set(l,{mqls:i});let c=e.onUnmount(f=>{if(f!==a)return;let p=e.mediaRegistry.get(l);if(p?.mqls)for(let m of p.mqls)try{m.mql.removeEventListener("change",m.handler)}catch{}e.mediaRegistry.delete(l),c()})}}function Tt(e){let t=e.selfId(),n=e.browser,o={height:n.viewportHeight(),offsetTop:0,keyboardOpen:!1},r=()=>{t?e.render([t]):e.render()},s=()=>{let i=n.visualViewport();o.height=i?.height??n.viewportHeight(),o.offsetTop=i?.offsetTop??0,o.keyboardOpen=o.height<n.viewportHeight()*.9,r()},a=n.visualViewport(),l=null,u=null;if(a?.addEventListener?(l=V(a,"resize",s),V(a,"scroll",s)):u=V(window,"resize",s),t){let i=e.onUnmount(c=>{c===t&&(l?.(),u?.(),i())})}return o}function Vt(e,t){let n=e.selfId(),o={isIn:!1,ready:!1,observe:u,refresh:i,disconnect:c},r=null,s=null,a=()=>{n?e.render([n]):e.render()};function l(){if(s?.disconnect(),s=null,!r)return;let f=typeof t.rootMargin=="function"?t.rootMargin():t.rootMargin,p=typeof t.threshold=="function"?t.threshold():t.threshold;s=new IntersectionObserver(m=>{let d=m[m.length-1];if(!d)return;let g=d.isIntersecting,b=g!==o.isIn,y=!o.ready;o.isIn=g,o.ready=!0,t.onChange?.(d,g),(b||y)&&a()},{root:t.root?t.root():null,rootMargin:f??"0px",threshold:p??0}),s.observe(r)}function u(f){r=f,f?l():(s?.disconnect(),s=null,o.isIn=!1)}function i(){l()}function c(){s?.disconnect(),s=null}if(n){let f=e.onUnmount(p=>{p===n&&(c(),f())})}return o}function Ct(e,t){let n=e.selfId(),o=e.browser,r={y:0,refresh(){let l=s.getScroller();r.y=l instanceof Window?o.scrollingElement()?.scrollTop??o.scrollTop():l.scrollTop??0}},s={handle:r,getScroller:t.getScroller??(()=>window)};if(!n)return r.refresh(),r;e.scrollTrackers.set(n,s),e.ensurePopupListeners(),r.refresh();let a=e.onUnmount(l=>{l===n&&(e.scrollTrackers.delete(n),a())});return r}function _t(e,t){let n=e.selfId();if(typeof window>"u")return()=>{};let o=V(window,"keydown",t);if(n){let r=e.onUnmount(s=>{s===n&&(o(),r())})}return o}function St(e,t){let n=e.browser,o=0,r=0,s=!1,a=m=>{s&&t.onMove(m,{x:m.clientX-o,y:m.clientY-r})},l=null,u=null,i=()=>{l?.(),l=null,u?.(),u=null},c=m=>{s&&(s=!1,i(),t.onEnd?.(m))},f=m=>{s||(m.preventDefault(),s=!0,o=m.clientX,r=m.clientY,l=V(window,"pointermove",a),u=V(window,"pointerup",c),t.onStart?.(m))},p=e.selfId();if(p){let m=e.onUnmount(d=>{d===p&&(s&&(i(),s=!1),m())})}return{onPointerDown:f}}function Lt(e,t){let n={};t.onDrop&&(n.onDrop=r=>{r.preventDefault(),t.onDrop(r)}),t.onDragOver&&(n.onDragOver=r=>{r.preventDefault(),t.onDragOver(r)}),t.onDragLeave&&(n.onDragLeave=r=>t.onDragLeave(r));let o={draggable:!0};if(t.onDragStart){let r=t.onDragStart;o.onDragStart=s=>{typeof document<"u"&&document.body.classList.add("wf-dragging"),r(s)}}if(t.onDragEnd){let r=t.onDragEnd;o.onDragEnd=s=>{typeof document<"u"&&document.body.classList.remove("wf-dragging"),r(s)}}return{dropProps:n,dragProps:o}}function vn(e){return e.map(t=>{let n={role:t.role,content:t.content};return t.reasoning&&(n.reasoning_content=t.reasoning),n})}function Fe(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`msg-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function Pt(e,t,n,o){n.initialMessages?e.messages=structuredClone(n.initialMessages):e.messages===void 0&&(e.messages=[]),e.input===void 0&&(e.input=""),e.streaming===void 0&&(e.streaming=!1),e.error===void 0&&(e.error=null),e.usage===void 0&&(e.usage=null),e.step===void 0&&(e.step=null);let r=null;function s(){if(!e.streaming)return;let d=e.messages[e.messages.length-1];return d&&d.role==="assistant"&&d.status==="streaming"?d:void 0}function a(d,g,b){let y=s();switch(d){case"wf:token":y&&(y.content+=g.text);break;case"wf:tool_call":{y&&(y.toolCalls||(y.toolCalls=[]),y.toolCalls.push({call:g,status:"running"}));break}case"wf:tool_progress":{let N=g,x=y?.toolCalls?.find(S=>S.call.id===N.toolCallId);x&&(x.progress=N);break}case"wf:tool_result":{let N=g,x=y?.toolCalls?.find(S=>S.call.id===N.id);x&&(x.result=N,x.status=N.ok?"ok":"error");break}case"wf:approval_request":y&&(y.approval=g);break;case"wf:usage":y&&(y.usage=g);break;case"wf:step":e.step=g;break;case"wf:done":if(y){y.status="done",y.approval=void 0;let N=g;N.reasoning&&(y.reasoning=N.reasoning)}e.streaming=!1,e.step=null;break;case"wf:error":y&&(y.status="error",y.error=g,y.approval=void 0),e.error=g,e.streaming=!1,e.step=null;break;default:b?.(d,g);break}o?.()}function l(){let d=n.body?n.body(e.messages):{messages:vn(e.messages)};r=t(n.url,d,{onToken:b=>a("wf:token",{text:b}),onToolCall:b=>a("wf:tool_call",b),onToolProgress:b=>a("wf:tool_progress",b),onToolResult:b=>a("wf:tool_result",b),onApproval:b=>a("wf:approval_request",b),onUsage:b=>a("wf:usage",b),onStep:b=>a("wf:step",b),onDone:b=>a("wf:done",b),onError:b=>a("wf:error",b),onEvent:(b,y)=>a(b,y,n.onEvent)},{signal:n.signal,headers:n.headers}),e.streaming=!0;let g=s();g&&r?.traceId&&(g.id=r.traceId)}function u(){if(e.streaming)return;let d=String(e.input??"").trim();d&&(e.input="",e.error=null,e.usage=null,e.step=null,e.messages.push({id:Fe(),role:"user",content:d,status:"done"},{id:Fe(),role:"assistant",content:"",status:"streaming",toolCalls:[]}),l(),o?.())}function i(){r?.abort(),e.streaming=!1,e.step=null;let d=e.messages[e.messages.length-1];d&&d.role==="assistant"&&d.status==="streaming"&&(!d.content&&(!d.toolCalls||d.toolCalls.length===0)?e.messages.pop():d.status="done"),o?.()}function c(){if(e.streaming)return;let d=-1;for(let g=e.messages.length-1;g>=0;g--)if(e.messages[g].role==="user"){d=g;break}d!==-1&&(e.messages.splice(d+1),e.error=null,e.usage=null,e.step=null,e.messages.push({id:Fe(),role:"assistant",content:"",status:"streaming",toolCalls:[]}),l(),o?.())}function f(){r?.abort(),e.messages=[],e.input="",e.streaming=!1,e.error=null,e.usage=null,e.step=null,o?.()}async function p(d,g,b){let y=e.messages[e.messages.length-1],N=y?.role==="assistant"?y.approval:void 0;if(N&&(y.approval=void 0,o?.(),!!n.approveUrl))try{await fetch(n.approveUrl,{method:"POST",headers:{"Content-Type":"application/json",...n.headers},body:JSON.stringify(b?{id:N.id,decision:d,note:g,modifiedArgs:b}:{id:N.id,decision:d,note:g}),signal:n.signal})}catch(x){if(n.signal?.aborted)return;e.error={code:"provider_error",message:x instanceof Error?x.message:String(x)},o?.()}}function m(){r?.abort(),r=null}return{send:u,stop:i,retry:c,clear:f,approve:p,dispose:m}}function At(e,t,n){let o=new AbortController,r=n?.signal;r&&(r.aborted?o.abort():r.addEventListener("abort",()=>o.abort(),{once:!0}));let s=n?.traceId??xn(),a=n?.record!==!1,l=[],u=(async()=>{let i;try{i=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json","X-Trace-Id":s,Accept:"text/event-stream",...n?.headers},body:JSON.stringify(t),signal:o.signal})}catch(c){if(o.signal.aborted)return;n?.onError?.({code:"provider_error",message:c instanceof Error?c.message:String(c)});return}if(!i.ok){n?.onError?.({code:kn(i.status),message:`HTTP ${i.status} ${i.statusText}`});return}try{for await(let{name:c,data:f}of En(i.body)){if(o.signal.aborted)return;Nn(l,{name:c,data:f},a),bn(c,f,n??{})}}catch(c){if(o.signal.aborted)return;n?.onError?.({code:"provider_error",message:c instanceof Error?c.message:String(c)})}})();return{abort:()=>o.abort(),done:u,traceId:s,events:l}}function bn(e,t,n){switch(e){case"wf:token":return n.onToken?.(t.text);case"wf:tool_call":return n.onToolCall?.(t);case"wf:tool_result":return n.onToolResult?.(t);case"wf:tool_progress":return n.onToolProgress?.(t);case"wf:step":return n.onStep?.(t);case"wf:approval_request":return n.onApproval?.(t);case"wf:usage":return n.onUsage?.(t);case"wf:done":return n.onDone?.(t);case"wf:error":return n.onError?.(t);default:return n.onEvent?.(e,t)}}async function*En(e){let t=e.getReader(),n=new TextDecoder,o="";try{for(;;){let{done:r,value:s}=await t.read();if(r)break;o+=n.decode(s,{stream:!0});let a=o.split(`
4
-
5
- `);o=a.pop()??"";for(let l of a){let u="message",i="";for(let c of l.split(`
6
- `))c.startsWith("event: ")?u=c.slice(7):c.startsWith("data: ")&&(i+=c.slice(6));if(i)try{yield{name:u,data:JSON.parse(i)}}catch{}}}}finally{t.releaseLock()}}function Nn(e,t,n){n&&(e.length>=1e3&&e.shift(),e.push(t))}function kn(e){return e===401||e===403?"auth_failed":e===429?"rate_limited":e>=500?"provider_error":"invalid_request"}function xn(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`trace-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function Mt(e,t){let n={messages:[],input:"",streaming:!1,error:null,usage:null,step:null},o=new Set,s=Pt(n,At,t,()=>{for(let l of[...o])l()});Object.assign(n,s),n.subscribe=l=>(o.add(l),()=>{o.delete(l)});let a=e.selfId();if(a){let l=e.onUnmount(u=>{u===a&&(s.dispose(),l())})}return n}var Ot=R();function Rt(e){let t=new Map,n=new Map,o=!1,r=0;function s(){r||(r=requestAnimationFrame(()=>{r=0;let p=[];for(let[m,d]of t){if(!d.isOpen())continue;let g=d.getEl();if(!g)continue;let b=g.getBoundingClientRect();if(b.width===0&&b.height===0)continue;let y=d.compute(b);Object.assign(d.pos,de(y,d.panel?.(),d.margin)),p.push(m)}for(let[m,d]of n){let g=d.getScroller(),b=g instanceof Window?Ot.scrollingElement()?.scrollTop??Ot.scrollTop():g.scrollTop??0;b!==d.handle.y&&(d.handle.y=b,p.push(m))}p.length>0&&e(p)}))}let a=null,l=null;function u(){o||(o=!0,a=V(window,"scroll",s,{capture:!0,passive:!0}),l=V(window,"resize",s))}function i(){o&&(a?.(),l?.(),a=null,l=null,o=!1)}function c(p){for(let m of[...t.keys()])(m.startsWith(`popup:${p}:`)||m===`popup:${p}`||m===p)&&t.delete(m);n.delete(p)}function f(){i(),r&&(cancelAnimationFrame(r),r=0),t.clear(),n.clear()}return{popupTrackers:t,scrollTrackers:n,schedulePopupRecompute:s,ensurePopupListeners:u,destroyPopupListeners:i,cleanupTrackers:c,destroy:f}}var Tn=new Map,Vn=new Set,Cn=new Map,_n=new Map,Sn=new Map,je=new Map,$e=Rt(e=>{for(let t of e){let n=je.get(t);if(n)try{n()}catch{}}}),Ln=$e.popupTrackers,Pn=$e.scrollTrackers,An=$e.ensurePopupListeners;function It(e,t,n){je.set(e,t);let o={selfId:()=>e,render:s=>{window.__chain="env.render",!s||s.length===0||s.includes(e)?t():console.warn(`[vdom3/ui] render([${s.join(",")}]) \u8DE8\u7EC4\u4EF6\u6E32\u67D3\u6682\u672A\u5B9E\u73B0\uFF08vdom3 \u5F53\u524D\u4EC5\u7EC4\u4EF6\u81EA\u8EAB render\uFF09`)},browser:R(),onUnmount:s=>(n(()=>{s(e),je.delete(e)}),()=>{}),registry:{idRegistry:new Map},mediaRegistry:Tn,popupTrackers:Ln,scrollTrackers:Pn,isMounting:()=>!1,warned:Vn,uncontrolledValues:Cn,inputStates:_n,openStates:Sn,ensurePopupListeners:An};return{__v3ui:!0,__compId:e,render:s=>o.render(s),onUnmount:s=>{n(s)},selfId:s=>{o.registry.idRegistry.set(s,e)},useExternal:s=>at(o,s),useControlled:s=>Ue(o,s),useControlledInput:s=>ut(o,s),useOpen:s=>ht(o,s),usePopup:s=>gt(o,s),usePopupPosition:s=>We(o,s),useTween:(s,a)=>pt(o,s,a),useInView:s=>Vt(o,s),useScrollPosition:s=>Ct(o,s),useGlobalKey:s=>_t(o,s),useDrag:s=>St(o,s),useDragDrop:s=>Lt(o,s),useMedia:(s,a)=>{kt(o,s,a)},useBreakpoint:(s,a)=>{xt(o,s,a)},useReducedMotion:()=>De(o),useStableRef:(s,a)=>ct(o,s,a),usePresence:s=>ue(o,s),useLongPress:s=>ft(o,s),useHoverCapable:()=>ae(o),useVisualViewport:()=>Tt(o),useAsync:s=>dt(o,s),useChat:s=>Mt(o,s)}}var me=new Map;function Ke(e){let t=me.get(e);if(t){try{t()}catch{}me.delete(e)}}function H(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)&&"type"in e}function pe(e){try{let t={};for(let[n,o]of Object.entries(e))if(o!=null&&typeof o=="object"){let r=JSON.stringify(o);r!=null&&r.length<=1e4&&(t[n]=r)}return Object.keys(t).length>0?JSON.stringify(t):null}catch{return null}}var Ht=new Set;function Ut(e,t){let n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(let r of n)if(e[r]!==t[r])return!1;return!0}async function K(e,t,n,o=!1){if(typeof e.type=="function"||e.type===G){let i={...e};if(e.type===G)return r(i,t,n);let c=n!=null&&typeof n=="object"&&n.type===e.type&&n.key===e.key&&n._render?n:null;if(c){if(i._render=c._render,i._id=c._id,He(i),!o&&Ut(c.props,i.props)){if(i._child=c._child,c.el!=null&&(i.el=c.el),globalThis.__WF_V3_AUDIT!=="0"&&c._propsSnap!=null){let d=pe(i.props);if(d!=null&&d!==c._propsSnap){let g=`${I(i.type)}:${d.slice(0,40)}`;Ht.has(g)||(Ht.add(g),console.warn(`[vdom3/audit] \u7EC4\u4EF6 ${I(i.type)} \u7684 props \u5BF9\u8C61\u5185\u5BB9\u5DF2\u53D8\u4F46\u5F15\u7528\u672A\u53D8\uFF08\u539F\u5730\u4FEE\u6539\u5BF9\u8C61\uFF1F\uFF09\u2014\u2014\u526A\u679D\u5C06\u8DF3\u8FC7\u91CD\u6E32\u67D3\u2014\u2014\u8BF7\u65B0\u5EFA\u5BF9\u8C61\u4F20 props\uFF08props \u4E0D\u53EF\u53D8\u5951\u7EA6\uFF09`))}}return w.emit(h("comp","build",i._id,{name:I(i.type),reused:!0,index:!0,reason:"reuse-skip",propsKeys:Object.keys(i.props)})),i._propsSnap=pe(i.props),i}let m=Object.keys({...c.props,...i.props}).filter(d=>c.props[d]!==i.props[d]);w.emit(h("props","update",i._id,{name:I(i.type),keys:m})),i._propsSnap=pe(i.props),w.emit(h("comp","build",i._id,{name:I(i.type),reused:!0,index:!0,reason:o?"root-render":"props-changed",changedKeys:m}))}else{i._id=$(),He(i),w.emit(h("comp","build",i._id,{name:I(i.type),reused:!1,index:!0,reason:"mount"})),w.emit(h("comp","mount",i._id,{name:I(i.type)}));let m=i._id,d=()=>{window.__chain="componentRender:"+m;let y=t._componentRender;y?(window.__chain="fn("+m+")",y(m)):(window.__chain="ctx.render("+m+")",t.render())},g=Object.assign(Object.create(t),{render:d,onUnmount:y=>{me.set(m,y)},browser:t.browser??R(),ui:It(m,d,y=>{me.set(m,y)})}),b=null;try{b=await i.type(i.props,g)}catch(y){let N=y;throw w.emit(h("error","throw",i._id,{phase:"factory",name:I(i.type),message:N?.message??String(y)})),y}i._render=b,i._propsSnap=pe(i.props)}w.emit(h("comp","render",i._id,{name:I(i.type)}));let f=null;try{f=await i._render(i.props)}catch(m){let d=m;throw w.emit(h("error","throw",i._id,{phase:"renderFn",name:I(i.type),message:d?.message??String(m)})),m}i._child=null;let p=c?._child??null;if(f){let m=await K(f,t,p!=null&&typeof p=="object"?p:null);i._child=m}return i}async function r(i,c,f){let p=String(i.props?.appId??""),m=lt(p);if(!m)return w.emit(h("app","error",void 0,{appId:p,reason:"unknown-app"})),i;let d=f!=null&&f.type===G&&f.appId===p;if(!d||!f._appOutput){w.emit(h("app","mount",void 0,{appId:p}));let y=await m(i.props?.props??{},c);i._appOutput=y}else{i._appOutput=f._appOutput;let y=f.props?.props??{},N=i.props?.props??{},x=[...new Set([...Object.keys(y),...Object.keys(N)])].filter(S=>y[S]!==N[S]);x.length>0&&w.emit(h("app","update",void 0,{appId:p,keys:x}))}let g=d&&f._appOutput?await K(f._appOutput,c,null):null,b=i._appOutput?await K(i._appOutput,c,g):null;return i._child=b,i.appId=p,i}let s=T(n??{}),a=0,l=null;for(let i of T(e)){if(H(i)){let c=s[a],f=await K(i,t,c!=null&&typeof c=="object"?c:null);f!==i&&(l??=[...T(e)],l[a]=f)}a++}if(l==null&&n!=null&&typeof n=="object"&&!Array.isArray(n)){let i=T(n),c=T(e);if(Ut(n.props??{},e.props??{})&&i.length===c.length&&i.every((f,p)=>f===c[p]))return n}let u={...e};return l&&(u.children=l),u}function I(e){return typeof e=="function"?e.name||"anonymous":String(e)}var Mn=globalThis.__WF_V3_AUDIT!=="0";function Dt(e,t){if(!Mn)return;let n=T(t).filter(s=>s!=null&&typeof s=="object"&&s.el!=null);if(n.length<2)return;let o=n[0].el?.parentNode;if(!o)return;let r=-1;for(let s of n){let a=s.el;if(a.parentNode!==o)return;let l=[...o.childNodes].indexOf(a);if(l<0)return;if(l<r){let u=globalThis.__WF_V3_AUDIT_STACK?new Error().stack?.split(`
7
- `).slice(2,5).map(f=>f.trim().slice(0,70)).join(" | "):"",i=n.map(f=>typeof f.type=="function"?"C":String(f.type).slice(0,8)),c=n.map(f=>[...o.childNodes].indexOf(f.el));console.warn(`[vdom3/audit] children \u987A\u5E8F\u9519\u4F4D idx=${l}<${r} tag=${String(s.type).slice(0,30)} kinds=[${i.join(",")}] idxs=[${c.join(",")}] kids=${n.length} domKids=${o.childNodes.length}${u?" || "+u:""}`);return}r=l}}var On=new Set(["svg","path","circle","rect","line","polyline","polygon","g","defs","use","text","tspan","ellipse","title","desc","marker","symbol","linearGradient","radialGradient","stop","mask","pattern","clipPath"]);function J(e){if(e==null||typeof e!="object")return!1;let t=e.type;return t===B||typeof t=="symbol"&&e.props?.portalKey!=null}function Bt(e,t){e.value=t,e.type==="range"&&e.setAttribute("value",t)}function Rn(e){if(e==null||typeof e!="object")return!1;let t=e.type;return(t===Z||typeof t=="symbol")&&e.props?.portalKey==null}var E=new O;function Ge(e,t,n){let o=E;n&&(E=n);try{Me(t),t.innerHTML="",E.register(O.ROOT,t),W(e,t)}finally{E=o}}function W(e,t,n){if(typeof e.type=="function"||e.type===G){let l=e._child!==void 0?e._child:T(e)[0]??null;if(l==null)return null;if(e.el!=null&&(e.el.isConnected||e.el.parentNode===t))return e.el;let u=W(l,t,n);return e.el=u,e._outFirst=l._outFirst??u,e._outLast=l._outLast??u,u}if(Rn(e)){let l=null,u=null;for(let i of T(e)){let c=qe(i,t,n);c&&(l||(l=c),u=c)}return e._outFirst=l,e._outLast=u,l}if(J(e)){let u=String(e.props?.portalKey??"default"),i=ee(u);Me(i),E.register(O.PORTAL(u),i);let c=null,f=i.childNodes.length===0;for(let p of T(e)){let m=qe(p,i);m&&!c&&(c=m)}return f&&i.childNodes.length>0&&w.emit(h("portal","open",void 0,{portalKey:u})),e.el=i,c??i}let o=e.type,r=On.has(o)?document.createElementNS("http://www.w3.org/2000/svg",o):document.createElement(o),s=$();r.setAttribute("data-v3-id",s),E.register(s,r),e.el=r,w.emit(h("node","create",s,{tag:e.type}));for(let[l,u]of Object.entries(e.props??{}))if(!(l==="key"||l==="children"||l==="ref")){if(typeof u=="function"&&/^on[A-Z]/.test(l)){Ie(s,l.slice(2).toLowerCase(),u,t);continue}if(u!=null&&u!==!1){if(l==="value"&&r instanceof HTMLInputElement)Bt(r,String(u));else if(l==="innerHTML")r.innerHTML=String(u);else if(l==="style"&&typeof u=="object"&&!Array.isArray(u)){let i=Object.entries(u).filter(([,c])=>c!=null&&c!==!1).map(([c,f])=>`${c.replace(/[A-Z]/g,p=>"-"+p.toLowerCase())}:${f}`).join(";");r.setAttribute("style",i)}else r.setAttribute(l,String(u));w.emit(h("prop","update",s,{key:l,value:u,prev:""}))}}e._outFirst=r,e._outLast=r,n&&n.parentNode===t?t.insertBefore(r,n):t.appendChild(r),w.emit(h("node","insert",s,{parent:F(t),ref:n?M(n):null,causeId:D??void 0})),rt(r,e.props??{});let a=e.props?.ref;typeof a=="function"&&(w.emit(h("ref","mount",s,{})),a(r));for(let l of T(e))qe(l,r);return r}function In(e,t,n,o){if(e!=null&&typeof e=="object"&&e._outFirst&&e._outLast&&e._outLast!==e._outFirst){let r=e._outFirst,s=e._outLast;typeof e.type=="function"&&e._id?Kt(e,t,o):e.el&&e.el.parentNode===t?ge(e.el,t,e):r.parentNode===t&&z(r,t);let a=r.nextSibling,l=64,u=0;for(;a&&a!==s&&u++<l;){let i=a.nextSibling;z(a,t),a=i}s.parentNode===t&&z(s,t);return}if(e!=null&&typeof e=="object"&&J(e)){te(e);return}if(e!=null&&typeof e=="object"&&e._child&&J(e._child)){te(e._child);return}if(e!=null&&typeof e=="object"&&typeof e.type=="function"&&e._id){Kt(e,t,o);return}e!=null&&typeof e=="object"&&e.el?ge(e.el,t,e):n&&z(n,t)}function z(e,t){let n=E.idOf(e);n&&(w.emit(h("node","remove",n,{parent:F(t),causeId:D??void 0})),E.unregister(n,e)),e.parentNode?.removeChild(e)}function Be(e,t){let n=document.createComment("wf-hole"),o=$();return E.register(o,n),w.emit(h("node","create",o,{kind:"hole"})),t&&t.parentNode===e?e.insertBefore(n,t):e.appendChild(n),w.emit(h("node","insert",o,{parent:F(e),ref:t?M(t):null,kind:"hole",causeId:D??void 0})),n}function qe(e,t,n){if(e==null||e===!1||e===!0)return Be(t,n);if(typeof e=="string"||typeof e=="number"){let o=document.createTextNode(String(e)),r=$();return E.register(r,o),w.emit(h("text","create",r,{value:String(e)})),n&&n.parentNode===t?t.insertBefore(o,n):t.appendChild(o),w.emit(h("node","insert",r,{parent:F(t),ref:n?M(n):null})),o}return W(e,t,n)}function re(e,t,n,o,r){let s=E;r&&(E=r);try{return e!==null&&t!==null&&typeof e=="object"&&typeof t=="object"&&e===t?e.el??null:Un(e,t,n,o)}finally{E=s}}var Hn=0,D=null,Gt=[];function Wt(){return Gt.push(D),D=`c${++Hn}`,D}function Ft(){D=Gt.pop()??null}function jt(e){if(e==null||typeof e=="boolean")return"hole";if(typeof e=="string"||typeof e=="number")return"text";if(typeof e=="object"&&!Array.isArray(e)){let t=e.type;return typeof t=="function"?"comp":t===Z?"frag":t===B?"portal":"native"}return"unknown"}function Un(e,t,n,o){let r=jt(e),s=jt(t);if(w.emit(h("diff","transition",void 0,{from:r,to:s,level:"trace"})),typeof t=="string"||typeof t=="number"){let i=String(t),c=e&&typeof e=="object"?e.el:n.childNodes[0]??null;if(c&&c.nodeType===3)return c.nodeValue!==i&&(w.emit(h("text","update",M(c),{value:i,prev:c.nodeValue??""})),c.nodeValue=i),c;let f=document.createTextNode(i),p=$();return E.register(p,f),w.emit(h("text","create",p,{value:i})),o&&o.parentNode===n?n.insertBefore(f,o):n.appendChild(f),w.emit(h("node","insert",p,{parent:F(n),ref:o?M(o):null})),f}if(t==null||t===!1||t===!0){if(e!=null&&typeof e=="object"&&!Array.isArray(e)){if(J(e))te(e);else if(e.el&&e.el.parentNode===n){let i=E.idOf(e.el);w.emit(h("node","remove",i,{parent:F(n)})),e.el.parentNode?.removeChild(e.el),E.unregister(i,e.el)}}return null}let a=t,l=e!=null&&typeof e=="object"&&"type"in e;if(l&&e.type===a.type&&e.key===a.key){let i=e,c=q(a);ye(l?q(e):null,c,"reuse");let f=$n[c];return f?f(i,a,n,o):(ye(l?q(e):null,c,"unhandled"),console.warn(`[vdom3/patch] kind=${c} \u65E0\u540C\u7C7B\u578B\u5904\u7406\u5668\u2014\u2014\u964D\u7EA7\u91CD\u5EFA\uFF08kind \u5206\u53D1\u5B8C\u6574\u6027\u7F3A\u5931\uFF09`),W(a,n,o))}if(ye(l?q(e):null,q(a),"rebuild"),l&&typeof e.type=="function"&&e._id&&(Ke(e._id),w.emit(h("comp","unmount",e._id,{name:Ye(e.type)}))),l){let i=e.el;i&&i.parentNode===n?ge(i,n,e):e&&J(e)&&te(e)}return W(a,n,o)}function Dn(e,t,n){let o=M(e),r=new Set([...Object.keys(t??{}),...Object.keys(n??{})]),s=t?.ref,a=n?.ref;s!==a&&(typeof s=="function"&&s(null),typeof a=="function"&&a(e));for(let l of r){if(l==="key"||l==="children"||l==="ref")continue;let u=t?.[l],i=n?.[l];if(u!==i&&!(u!=null&&i!=null&&typeof u=="object"&&typeof i=="object"&&!Array.isArray(u)&&!Array.isArray(i)&&Gn(u,i))){if(typeof i=="function"&&/^on[A-Z]/.test(l)){Ie(o,l.slice(2).toLowerCase(),i,e);continue}if(i==null||i===!1)l==="value"&&e instanceof HTMLInputElement?(e.value="",e.type==="range"&&e.removeAttribute("value")):e.removeAttribute(l);else if(l==="value"&&e instanceof HTMLInputElement)Bt(e,String(i));else if(l==="style"&&typeof i=="object"&&!Array.isArray(i)){let c=Object.entries(i).filter(([,f])=>f!=null&&f!==!1).map(([f,p])=>`${f.replace(/[A-Z]/g,m=>"-"+m.toLowerCase())}:${p}`).join(";");e.setAttribute("style",c)}else e.setAttribute(l,String(i));w.emit(h("prop","update",o,{key:l,value:i,prev:u??""}))}}}function ye(e,t,n){w.emit(h("vnode","patch",void 0,{oldKind:e,newKind:t,strategy:n}))}function Wn(e,t,n,o){let r=e.el;return r==null?(ye(q(e),"native","unhandled"),console.warn(`[vdom3/patch] native \u590D\u7528\u4F46 ov.el \u7F3A\u5931\uFF08tag=${String(e.type)}\u2014\u2014kind \u5206\u53D1\u6216\u6E32\u67D3\u65F6\u5E8F\u9519\u8BEF\uFF09\u2014\u2014\u964D\u7EA7\u91CD\u5EFA`),W(t,n,o)):(t.el=r,Dn(r,e.props,t.props),Xe(e,t,r),r)}function $t(e,t,n,o){t._render=e._render,t._id=e._id;let r=t._child!==void 0?t._child:T(t)[0]??null,s=e._child!==void 0?e._child:T(e)[0]??null;if(r==null||r===!1||r===!0){if(s&&J(s))te(s);else if(e.el){he(s);let a=e._outFirst??e.el,l=e._outLast??e.el;if(l!==a&&a.parentNode===n){let u=E.idOf(a);w.emit(h("node","remove",u,{parent:F(n)})),a.parentNode?.removeChild(a),E.unregister(u,a);let i=a.nextSibling,c=64,f=0;for(;i&&i!==l&&f++<c;){let p=i.nextSibling;z(i,n),i=p}l.parentNode===n&&z(l,n)}else{let u=E.idOf(e.el);w.emit(h("node","remove",u,{parent:F(n)})),e.el.parentNode?.removeChild(e.el),E.unregister(u,e.el)}e.el=null}return t.el=null,null}return e.el==null||!(e.el.isConnected||e.el.parentNode===n)?t.el=W(t,n,o):(re(s,r,n,o),t.el=e.el,t._outFirst=r._outFirst??t.el,t._outLast=r._outLast??t.el),t.el}function Fn(e,t,n,o){Xe(e,t,n,Kn(e));let r=T(e).find(u=>u!=null&&typeof u=="object"&&!Array.isArray(u));t.el=e.el??r?.el??null;let s=T(t).filter(u=>u!=null&&typeof u=="object"&&!Array.isArray(u)),a=s[0],l=s[s.length-1];return t._outFirst=a?.el??t.el,t._outLast=l?._outLast??l?.el??t.el,t.el}function jn(e,t,n,o){let r=String(t.props?.portalKey??"default"),s=ee(r);return E.register(O.PORTAL(r),s),Xe(e,t,s),t.el=s,s}var $n={native:Wn,comp:$t,app:$t,frag:Fn,portal:jn,text:void 0,null:void 0};function Kn(e){let n=T(e).find(r=>r!=null&&typeof r=="object"&&!Array.isArray(r))?.el,o=n?.parentNode;if(o&&n){let r=0;for(let s of o.childNodes){if(s===n)return r;r++}}return 0}function qn(e,t,n){let o=new Map;e.forEach((s,a)=>{H(s)&&s.key!=null&&o.set(s.key,a)});let r=null;for(let s=0;s<t.length;s++){let a=t[s];if(!H(a)||a.key==null){r=null;continue}let l=o.get(a.key),u=null;if(l!=null&&H(e[l])&&(u=e[l].el??null),u&&u.parentNode===n){let i=r?r.nextSibling:n.firstChild;if(i!==u){let c=u.previousSibling?E.idOf(u.previousSibling):null;n.insertBefore(u,i),w.emit(h("node","move",E.idOf(u),{parent:M(n),ref:i?E.idOf(i):null,prev:c,key:a.key,causeId:D??void 0}))}r=u}}}function Bn(e,t,n){let o=new Map;for(let a of e)H(a)&&a.key!=null&&o.set(a.key,a);qn(e,t,n);let r=null;for(let a of t){let l=a,u=o.get(l.key??"")??null;u&&u!==l?(re(u,l,n),r=l.el??r):u||(W(l,n,r?r.nextSibling:n.firstChild),r=l.el??r)}let s=new Set(t.filter(a=>H(a)).map(a=>a.key));for(let a of e)if(H(a)&&a.key!=null&&!s.has(a.key)&&a.el?.parentNode===n){let l=E.idOf(a.el);w.emit(h("node","remove",l,{parent:M(n)})),a.el.parentNode?.removeChild(a.el),E.unregister(l,a.el)}}function he(e){if(e==null||typeof e!="object"||Array.isArray(e))return;let t=e.props?.ref;if(typeof t=="function"){let n=e.el;w.emit(h("ref","cleanup",n?E.idOf(n):"null")),t(null)}for(let n of T(e))n!=null&&typeof n=="object"&&!Array.isArray(n)&&he(n)}function Kt(e,t,n){let o=e._id;if(o&&(Ke(o),w.emit(h("comp","unmount",o,{name:Ye(e.type)})),it(o)),e.el)ge(e.el,t,e);else{let r=t.childNodes[n];r&&r.parentNode?.removeChild(r)}}function ge(e,t,n){let o=globalThis.__WF_V3_AUDIT!=="0"?Le(E.idOf(e)):0;if(Ae(E.idOf(e)),o>0){let s=Le(E.idOf(e));s>0&&console.warn(`[vdom3/audit] \u8282\u70B9\u76D1\u542C\u6B8B\u7559\uFF1A${s}/${o} \u4E2A\u76D1\u542C\u672A\u6E05\u7406\uFF08${String(n?.type??e.nodeName).slice(0,20)}\uFF09\u2014\u2014\u4E8B\u4EF6\u4ECD\u4F1A\u54CD\u5E94\u2014\u2014\u6CC4\u6F0F`)}n&&he(n);let r=E.idOf(e);w.emit(h("node","remove",r,{parent:F(t),causeId:D??void 0})),e.parentNode?.removeChild(e),E.unregister(r,e)}function Gn(e,t){let n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(let r of n)if(e[r]!==t[r])return!1;return!0}function te(e){let t=String(e.props?.portalKey??"default"),n=ee(t);he(e);for(let o of[...n.childNodes]){Ae(E.idOf(o));let r=E.idOf(o);w.emit(h("node","remove",r,{parent:O.PORTAL(t)})),n.removeChild(o),E.unregister(r,o)}n.childNodes.length===0&&w.emit(h("portal","close",void 0,{portalKey:t}))}var qt=new Set;function Xe(e,t,n,o=0){let r=T(e),s=T(t),a=s.length>1&&s.every(f=>H(f)&&f.key!=null)?"keyed":"unkeyed";if(w.emit(h("diff","mode",void 0,{mode:a,len:s.length,prevLen:r.length,level:"trace"})),globalThis.__WF_V3_AUDIT!=="0"&&r.length!==s.length){let f=`${s.length}:${r.length}`;if(!qt.has(f)){qt.add(f);for(let p=0;p<s.length;p++){let m=s[p];if(m!=null&&typeof m=="object"&&!Array.isArray(m)&&typeof m.type=="function"&&m.key==null){console.error(`[vdom3/audit] \u52A8\u6001\u6570\u7EC4\u4F4D\u7F6E ${p} \u7684\u7EC4\u4EF6\u7F3A\u5C11 key\uFF08${Ye(m.type)}\uFF09\u2014\u2014\u5217\u8868\u589E\u5220/\u91CD\u6392\u4F1A\u9519\u4F4D\u7EC4\u4EF6\u5B9E\u4F8B\u72B6\u6001\u3002\u8BF7\u63D0\u4F9B\u4E1A\u52A1\u8EAB\u4EFD key\uFF08\u5982 key={item.id}\uFF09\uFF1B\u65E0\u72B6\u6001 native \u9879\u8C41\u514D\u3002`);break}}}}if(s.length>1&&s.every(f=>H(f)&&f.key!=null)){Bn(r,s,n);return}let l=f=>!!f&&f.nodeType===8&&(f.nodeValue??"").includes("wf-hole"),u=Math.max(r.length,s.length),i=o,c=(f,p)=>{if(f!=null&&typeof f=="object"&&!Array.isArray(f)){let m=f._outFirst,d=f._outLast;if(m&&d&&d!==m){let g=1,b=m,y=64,N=0;for(;b&&b!==d&&N++<y;)g++,b=b.nextSibling;return g}}return p?1:0};for(let f=0;f<u;f++){let p=f<r.length?r[f]:null,m=f<s.length?s[f]:null,d=n.childNodes[i]??null,g=()=>In(p,n,d,f);if(f>=s.length){let y=p!=null&&typeof p=="object"&&p._outFirst&&p._outLast&&p._outLast!==p._outFirst?c(p,d):1;g(),i+=y;continue}if(typeof m=="string"||typeof m=="number"){let y=String(m);if(d&&d.nodeType===3)d.nodeValue!==y&&(w.emit(h("text","update",M(d),{value:y,prev:d.nodeValue??""})),d.nodeValue=y);else{let N=document.createTextNode(y),x=$();if(E.register(x,N),w.emit(h("text","create",x,{value:y})),d&&d.parentNode===n){let S=E.idOf(d);S&&(w.emit(h("node","remove",S,{parent:M(n)})),E.unregister(S,d)),n.replaceChild(N,d)}else n.appendChild(N);w.emit(h("node","insert",x,{parent:M(n),ref:null}))}i+=1;continue}if(m==null||m===!1||m===!0){if(p!=null&&typeof p=="object"&&!Array.isArray(p)&&J(p)&&te(p),!l(d)){Wt();try{let y=d?d.nextSibling:null;g(),Be(n,y)}finally{Ft()}}i+=1;continue}if(p!=null&&typeof p=="object"&&p.type===m.type)re(p,m,n,d??null);else{Wt();try{let y=W(m,n,d??null);d&&!l(d)?g():d&&l(d)&&z(d,n),y==null&&!d&&Be(n,null)}finally{Ft()}}let b=c(m,d)||(p!=null&&typeof p=="object"&&!Array.isArray(p)&&p._outFirst&&p._outLast&&p._outLast!==p._outFirst?c(p,d):1);i+=b}Dt(n,t)}function Ye(e){return typeof e=="function"?e.name||"anonymous":String(e)}function M(e){return E.idOf(e)}function F(e){return E.idOf(e)}var we=new WeakMap,Xt=new WeakMap;function yr(e,t,n){return new Promise((o,r)=>{(async()=>{try{document.getElementById("__wf_portal")?.remove();let s=new O,a=await K(t,{});Ge(a,e,s),we.set(e,a),Xt.set(e,s),o()}catch(s){r(s)}})()})}async function gr(e,t,n,o,r){let s=we.get(e)??null,a=Xt.get(e)??E;if(o==null)return e.innerHTML="",we.set(e,null),null;let l=await K(o,{},s);return s?re(s,l,e,void 0,a):Ge(l,e,a),we.set(e,l),l}function hr(e,t){return K(e,{})}async function wr(e,t,n){let o=await e(t,n);return typeof o=="function"?o(t):o}async function vr(e,t,n){let o=await e(t,n);return()=>typeof o=="function"?o(t):o}function ve(e,t){if(e==null||typeof e!="object")return;if(Array.isArray(e)){for(let o of e)ve(o,t);return}t(e);let n=e?.props?.children;n!=null&&ve(n,t)}function br(e,t){let n;return ve(e,o=>{!n&&t(o)&&(n=o)}),n}function Er(e,t){let n=[];return ve(e,o=>{typeof o?.props?.class=="string"&&o.props.class.split(" ").includes(t)&&n.push(o)}),n}function Nr(e){let t={ui:{render:()=>{},ready:!0,useExternal:()=>{},useVisualViewport:()=>({keyboardOpen:!1,height:0,offsetTop:0}),useScrollPosition:()=>({y:0}),useStableRef:()=>()=>{},useGlobalKey:()=>()=>{},useReducedMotion:()=>!1,useControlledInput:o=>({value:o.value??"",setValue:o.onChange??(()=>{}),keyword:o.value??"",setKeyword:()=>{},setSelectedLabel:()=>{}}),useOpen:o=>({get open(){return!!o.open},setOpen:o.onOpenChange??(()=>{}),triggerProps:{}}),usePopup:o=>({open:!1,setOpen:r=>{},refresh:()=>{},portal:(r,s)=>null,wrapProps:{}})}};return e?{ui:{...t.ui,...e.ui??{}},...e.browser?{browser:e.browser}:{}}:t}function kr(e=()=>!1,t){return{get open(){return e()},setOpen:t??(n=>{}),refresh:()=>{},portal:(n,o)=>e()?n:null,wrapProps:{}}}export{hr as buildToDom,kr as createPopupMock,Nr as createTestCtx,Er as findByClass,br as findVNode,vr as mountComponent,yr as mountToDom,gr as patchToDom,wr as renderVNode,ve as walkVNode};