weifuwu 0.85.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 (655) 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} +153 -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/client/components/Editor/Editor.d.ts +14 -0
  296. package/dist/client/components/Editor/edit-events.d.ts +27 -0
  297. package/dist/client/components/Editor/model/apply.d.ts +23 -0
  298. package/dist/client/components/Editor/model/diff.d.ts +25 -0
  299. package/dist/client/components/Editor/model/dom.d.ts +27 -0
  300. package/dist/client/components/Editor/model/history.d.ts +21 -0
  301. package/dist/client/components/Editor/model/html.d.ts +16 -0
  302. package/dist/client/components/Editor/model/inverse.d.ts +20 -0
  303. package/dist/client/components/Editor/model/types.d.ts +116 -0
  304. package/dist/client/components/Editor/tools/table.d.ts +10 -0
  305. package/dist/{components → client/components}/Editor/tools/toolbar.d.ts +2 -2
  306. package/dist/client/components/Editor/tools/types.d.ts +40 -0
  307. package/dist/{components → client/components}/EmptyState/EmptyState.d.ts +1 -1
  308. package/dist/client/components/ExportCSV/ExportCSV.d.ts +30 -0
  309. package/dist/{components → client/components}/Field/Field.d.ts +1 -1
  310. package/dist/client/components/FilePreview/FilePreview.d.ts +42 -0
  311. package/dist/client/components/FilePreview/markdown.d.ts +23 -0
  312. package/dist/client/components/FileTree/FileTree.d.ts +57 -0
  313. package/dist/{components → client/components}/FileUpload/FileUpload.d.ts +1 -1
  314. package/dist/{components → client/components}/FloatButton/FloatButton.d.ts +1 -1
  315. package/dist/{components → client/components}/Form/Form.d.ts +1 -1
  316. package/dist/{components → client/components}/Grid/Grid.d.ts +1 -1
  317. package/dist/{components → client/components}/Highlight/Highlight.d.ts +1 -1
  318. package/dist/{components → client/components}/HoverCard/HoverCard.d.ts +5 -4
  319. package/dist/{components → client/components}/Icon/Icon.d.ts +2 -2
  320. package/dist/client/components/ImageCropper/ImageCropper.d.ts +17 -0
  321. package/dist/{components → client/components}/Img/Img.d.ts +1 -1
  322. package/dist/{components → client/components}/InView/InView.d.ts +1 -1
  323. package/dist/{components → client/components}/InfiniteScroll/InfiniteScroll.d.ts +1 -1
  324. package/dist/{components → client/components}/Input/Input.d.ts +1 -1
  325. package/dist/{components → client/components}/InputNumber/InputNumber.d.ts +1 -1
  326. package/dist/{components → client/components}/JSONViewer/JSONViewer.d.ts +1 -1
  327. package/dist/{components → client/components}/JsonSchemaForm/JsonSchemaForm.d.ts +3 -3
  328. package/dist/{components → client/components}/Kanban/Kanban.d.ts +1 -1
  329. package/dist/{components → client/components}/Label/Label.d.ts +1 -1
  330. package/dist/{components → client/components}/Layout/Layout.d.ts +1 -1
  331. package/dist/{components → client/components}/Link/Link.d.ts +1 -1
  332. package/dist/{components → client/components}/List/List.d.ts +1 -1
  333. package/dist/{components → client/components}/Loading/Loading.d.ts +1 -1
  334. package/dist/{components → client/components}/LogViewer/LogViewer.d.ts +1 -1
  335. package/dist/{components → client/components}/Markdown/Markdown.d.ts +1 -1
  336. package/dist/client/components/MarkdownEditor/MarkdownEditor.d.ts +18 -0
  337. package/dist/client/components/Math/Math.d.ts +15 -0
  338. package/dist/{components → client/components}/Mentions/Mentions.d.ts +1 -1
  339. package/dist/{components → client/components}/Menu/Menu.d.ts +1 -1
  340. package/dist/{components → client/components}/Menubar/Menubar.d.ts +1 -1
  341. package/dist/{components → client/components}/MessageBubble/MessageBubble.d.ts +1 -1
  342. package/dist/{components → client/components}/Modal/Modal.d.ts +1 -1
  343. package/dist/{components → client/components}/NavMenu/NavMenu.d.ts +2 -2
  344. package/dist/{components → client/components}/Notification/Notification.d.ts +7 -2
  345. package/dist/client/components/OfficeEditor/ai/ai-bridge.d.ts +39 -0
  346. package/dist/client/components/OfficeEditor/model/apply.d.ts +25 -0
  347. package/dist/client/components/OfficeEditor/model/types.d.ts +224 -0
  348. package/dist/{components → client/components}/PageHeader/PageHeader.d.ts +1 -1
  349. package/dist/{components → client/components}/Pagination/Pagination.d.ts +1 -1
  350. package/dist/{components → client/components}/PasswordInput/PasswordInput.d.ts +1 -1
  351. package/dist/{components → client/components}/PinInput/PinInput.d.ts +1 -1
  352. package/dist/{components → client/components}/Pipeline/Pipeline.d.ts +1 -1
  353. package/dist/{components → client/components}/Popconfirm/Popconfirm.d.ts +2 -2
  354. package/dist/{components → client/components}/Popover/Popover.d.ts +5 -4
  355. package/dist/{components → client/components}/ProgressBar/ProgressBar.d.ts +1 -1
  356. package/dist/client/components/PromptTemplate/PromptTemplate.d.ts +37 -0
  357. package/dist/{components → client/components}/QRCode/QRCode.d.ts +1 -1
  358. package/dist/{components → client/components}/RadioGroup/RadioGroup.d.ts +1 -1
  359. package/dist/{components → client/components}/Rate/Rate.d.ts +1 -1
  360. package/dist/{components → client/components}/ReasoningBlock/ReasoningBlock.d.ts +3 -3
  361. package/dist/client/components/RelationGraph/RelationGraph.d.ts +59 -0
  362. package/dist/{components → client/components}/Resizable/Resizable.d.ts +1 -1
  363. package/dist/{components → client/components}/Result/Result.d.ts +1 -1
  364. package/dist/{components → client/components}/Scrollbar/Scrollbar.d.ts +1 -1
  365. package/dist/{components → client/components}/SearchInput/SearchInput.d.ts +1 -1
  366. package/dist/{components → client/components}/SegmentedControl/SegmentedControl.d.ts +1 -1
  367. package/dist/{components → client/components}/Select/Select.d.ts +1 -1
  368. package/dist/{components → client/components}/SessionList/SessionList.d.ts +3 -3
  369. package/dist/client/components/SheetGrid/SheetGrid.d.ts +30 -0
  370. package/dist/{components → client/components}/Skeleton/Skeleton.d.ts +1 -1
  371. package/dist/client/components/SlideCanvas/SlideCanvas.d.ts +28 -0
  372. package/dist/client/components/Slider/Slider.d.ts +27 -0
  373. package/dist/client/components/SortableList/SortableList.d.ts +23 -0
  374. package/dist/{components → client/components}/Space/Space.d.ts +1 -1
  375. package/dist/{components → client/components}/Sparkline/Sparkline.d.ts +1 -1
  376. package/dist/{components → client/components}/StatCard/StatCard.d.ts +1 -1
  377. package/dist/{components → client/components}/Steps/Steps.d.ts +1 -1
  378. package/dist/{components → client/components}/Switch/Switch.d.ts +1 -1
  379. package/dist/client/components/TabBar/TabBar.d.ts +35 -0
  380. package/dist/{components → client/components}/Table/Table.d.ts +7 -1
  381. package/dist/client/components/Tabs/Tabs.d.ts +22 -0
  382. package/dist/{components → client/components}/Tag/Tag.d.ts +1 -1
  383. package/dist/{components → client/components}/TagsInput/TagsInput.d.ts +1 -1
  384. package/dist/{components → client/components}/Textarea/Textarea.d.ts +1 -1
  385. package/dist/{components → client/components}/ThemeSwitch/ThemeSwitch.d.ts +1 -1
  386. package/dist/{components → client/components}/Timeline/Timeline.d.ts +1 -1
  387. package/dist/{components → client/components}/Toast/Toast.d.ts +1 -1
  388. package/dist/{components → client/components}/ToggleGroup/ToggleGroup.d.ts +1 -1
  389. package/dist/{components → client/components}/ToolCallCard/ToolCallCard.d.ts +2 -2
  390. package/dist/{components → client/components}/Tooltip/Tooltip.d.ts +4 -3
  391. package/dist/{components → client/components}/Tour/Tour.d.ts +1 -1
  392. package/dist/{components → client/components}/Transfer/Transfer.d.ts +1 -1
  393. package/dist/{components → client/components}/Tree/Tree.d.ts +5 -1
  394. package/dist/{components → client/components}/TreeSelect/TreeSelect.d.ts +5 -1
  395. package/dist/{components → client/components}/Typography/Typography.d.ts +1 -1
  396. package/dist/client/components/VideoPlayer/VideoPlayer.d.ts +25 -0
  397. package/dist/{components → client/components}/VirtualList/VirtualList.d.ts +1 -1
  398. package/dist/{components → client/components}/VirtualTable/VirtualTable.d.ts +1 -1
  399. package/dist/{components → client/components}/Watermark/Watermark.d.ts +1 -1
  400. package/dist/client/components/Wave/Wave.d.ts +15 -0
  401. package/dist/{components → client/components}/index.d.ts +48 -2
  402. package/dist/client/components/index.js +57 -0
  403. package/dist/{components → client/components}/style.css +3554 -1896
  404. package/dist/{layout → client/layout}/weifuwu-layout.css +60 -6
  405. package/dist/client/office/docx.d.ts +33 -0
  406. package/dist/client/office/pptx.d.ts +24 -0
  407. package/dist/client/office/xlsx.d.ts +25 -0
  408. package/dist/client/office/xml-serialize.d.ts +18 -0
  409. package/dist/client/office/xml.d.ts +21 -0
  410. package/dist/client/office/zip.d.ts +21 -0
  411. package/dist/client/vdom/browser/Browser.d.ts +73 -0
  412. package/dist/client/vdom/browser/create-client-browser.d.ts +11 -0
  413. package/dist/client/vdom/commands.d.ts +19 -0
  414. package/dist/client/vdom/context/UIContext.d.ts +61 -0
  415. package/dist/client/vdom/context/data.d.ts +17 -0
  416. package/dist/client/vdom/core/async-guard.d.ts +20 -0
  417. package/dist/client/vdom/core/build.d.ts +36 -0
  418. package/dist/client/vdom/core/command/create.d.ts +25 -0
  419. package/dist/client/vdom/core/command/index.d.ts +15 -0
  420. package/dist/client/vdom/core/command/insert.d.ts +32 -0
  421. package/dist/client/vdom/core/command/lifecycle.d.ts +47 -0
  422. package/dist/client/vdom/core/command/props.d.ts +22 -0
  423. package/dist/client/vdom/core/diff/attrs.d.ts +10 -0
  424. package/dist/client/vdom/core/diff/children.d.ts +29 -0
  425. package/dist/client/vdom/core/diff/cleanup.d.ts +44 -0
  426. package/dist/client/vdom/core/diff/index.d.ts +22 -0
  427. package/dist/client/vdom/core/diff/output.d.ts +30 -0
  428. package/dist/client/vdom/core/diff/same.d.ts +22 -0
  429. package/dist/client/vdom/core/field/attributes.d.ts +15 -0
  430. package/dist/client/vdom/core/field/events.d.ts +54 -0
  431. package/dist/client/vdom/core/field/index.d.ts +19 -0
  432. package/dist/client/vdom/core/field/key.d.ts +16 -0
  433. package/dist/client/vdom/core/field/props.d.ts +15 -0
  434. package/dist/client/vdom/core/field/ref.d.ts +38 -0
  435. package/dist/client/vdom/core/field/style.d.ts +17 -0
  436. package/dist/client/vdom/core/node/children.d.ts +20 -0
  437. package/dist/client/vdom/core/node/component.d.ts +93 -0
  438. package/dist/client/vdom/core/node/fragment.d.ts +14 -0
  439. package/dist/client/vdom/core/node/hole.d.ts +22 -0
  440. package/dist/client/vdom/core/node/index.d.ts +35 -0
  441. package/dist/client/vdom/core/node/keyed.d.ts +64 -0
  442. package/dist/client/vdom/core/node/native.d.ts +20 -0
  443. package/dist/client/vdom/core/node/portal.d.ts +11 -0
  444. package/dist/client/vdom/core/patch/fields.d.ts +15 -0
  445. package/dist/client/vdom/core/patch/index.d.ts +51 -0
  446. package/dist/client/vdom/core/patch/processors.d.ts +75 -0
  447. package/dist/client/vdom/core/patch/state-machine.d.ts +38 -0
  448. package/dist/client/vdom/core/patch/verify.d.ts +17 -0
  449. package/dist/client/vdom/core/router.d.ts +31 -0
  450. package/dist/client/vdom/core/serve.d.ts +75 -0
  451. package/dist/client/vdom/core/ssr/absorb.d.ts +53 -0
  452. package/dist/client/vdom/core/ssr/html.d.ts +32 -0
  453. package/dist/client/vdom/core/ssr/index.d.ts +25 -0
  454. package/dist/client/vdom/core/transform/component.d.ts +23 -0
  455. package/dist/client/vdom/core/transform/element.d.ts +21 -0
  456. package/dist/client/vdom/core/transform/fragment.d.ts +21 -0
  457. package/dist/client/vdom/core/transform/hole.d.ts +13 -0
  458. package/dist/client/vdom/core/transform/index.d.ts +46 -0
  459. package/dist/client/vdom/core/transform/states.d.ts +22 -0
  460. package/dist/client/vdom/core/transform/table.d.ts +28 -0
  461. package/dist/client/vdom/core/transform/text.d.ts +10 -0
  462. package/dist/client/vdom/core/vnode.d.ts +45 -0
  463. package/dist/client/vdom/dev/effect-guard.d.ts +8 -0
  464. package/dist/client/vdom/hooks/ai-stream.d.ts +46 -0
  465. package/dist/client/vdom/hooks/basic.d.ts +42 -0
  466. package/dist/client/vdom/hooks/chat.d.ts +91 -0
  467. package/dist/client/vdom/hooks/controlled.d.ts +27 -0
  468. package/dist/client/vdom/hooks/drag-media.d.ts +52 -0
  469. package/dist/client/vdom/hooks/env.d.ts +119 -0
  470. package/dist/client/vdom/hooks/input.d.ts +43 -0
  471. package/dist/client/vdom/hooks/observe.d.ts +60 -0
  472. package/dist/client/vdom/hooks/popup-manager.d.ts +92 -0
  473. package/dist/client/vdom/hooks/popup.d.ts +52 -0
  474. package/dist/client/vdom/hooks/stable.d.ts +45 -0
  475. package/dist/client/vdom/index.d.ts +67 -0
  476. package/dist/client/vdom/index.js +8 -0
  477. package/dist/client/vdom/jsx-runtime.d.ts +28 -0
  478. package/dist/client/vdom/jsx-runtime.js +1 -0
  479. package/dist/client/vdom/middlewares/api.d.ts +38 -0
  480. package/dist/client/vdom/middlewares/auth-i18n.d.ts +66 -0
  481. package/dist/client/vdom/middlewares/ws.d.ts +37 -0
  482. package/dist/client/vdom/store.d.ts +49 -0
  483. package/dist/client/vdom/testing.d.ts +46 -0
  484. package/dist/client/vdom/testing.js +2 -0
  485. package/dist/dev/index.d.ts +12 -0
  486. package/dist/dev/index.js +4 -4
  487. package/dist/{ai → server/ai}/contracts.d.ts +1 -1
  488. package/dist/{ai → server/ai}/index.d.ts +2 -2
  489. package/dist/{ai → server/ai}/types.d.ts +1 -1
  490. package/dist/{core → server/core}/router.d.ts +2 -4
  491. package/dist/{db → server/db}/contracts.d.ts +1 -1
  492. package/dist/server/db/postgres-server.d.ts +37 -0
  493. package/dist/server/db/redis-server.d.ts +32 -0
  494. package/dist/server/db/server.d.ts +30 -0
  495. package/dist/server/db/test-servers.d.ts +21 -0
  496. package/dist/{email → server/email}/contracts.d.ts +1 -1
  497. package/dist/{index.js → server/index.js} +3147 -2462
  498. package/dist/{ui → server/ui}/index.d.ts +2 -2
  499. package/dist/{user → server/user}/token.d.ts +1 -1
  500. package/dist/shared/router/trie.d.ts +61 -0
  501. package/docs/components-map.md +16 -4
  502. package/docs/style-guide.md +14 -2
  503. package/examples/apps/admin/README.md +23 -0
  504. package/examples/apps/admin/api.ts +27 -0
  505. package/examples/apps/admin/app.tsx +144 -0
  506. package/examples/apps/admin/main.tsx +8 -0
  507. package/examples/apps/admin/server.ts +37 -0
  508. package/examples/apps/auth/README.md +23 -0
  509. package/examples/apps/auth/api.ts +49 -0
  510. package/examples/apps/auth/app.tsx +137 -0
  511. package/examples/apps/auth/main.tsx +8 -0
  512. package/examples/apps/auth/server.ts +37 -0
  513. package/examples/apps/multi/README.md +23 -0
  514. package/examples/apps/multi/app.tsx +83 -0
  515. package/examples/apps/multi/main.tsx +8 -0
  516. package/examples/apps/multi/server.ts +33 -0
  517. package/examples/apps/todo/README.md +23 -0
  518. package/examples/apps/todo/api.ts +26 -0
  519. package/examples/apps/todo/app.tsx +128 -0
  520. package/examples/apps/todo/main.tsx +9 -0
  521. package/examples/apps/todo/server.ts +39 -0
  522. package/examples/hello-world/README.md +9 -0
  523. package/examples/hello-world/client.ts +14 -0
  524. package/examples/hello-world/routes.tsx +26 -0
  525. package/examples/hello-world/server.ts +46 -0
  526. package/examples/patterns/AppShell.tsx +224 -0
  527. package/examples/patterns/Dashboard.tsx +153 -0
  528. package/examples/patterns/DataScreen.tsx +104 -0
  529. package/examples/patterns/DetailPage.tsx +79 -0
  530. package/examples/patterns/Docs.tsx +105 -0
  531. package/examples/patterns/FocusTask.tsx +67 -0
  532. package/examples/patterns/Landing.tsx +90 -0
  533. package/examples/patterns/ListPage.tsx +77 -0
  534. package/examples/patterns/Mobile.tsx +154 -0
  535. package/examples/patterns/SettingsPage.tsx +98 -0
  536. package/examples/patterns/SplitWorkspace.tsx +113 -0
  537. package/package.json +61 -29
  538. package/dist/components/Editor/Editor.d.ts +0 -13
  539. package/dist/components/Editor/tools/format.d.ts +0 -11
  540. package/dist/components/Editor/tools/table.d.ts +0 -7
  541. package/dist/components/Editor/tools/types.d.ts +0 -15
  542. package/dist/components/Slider/Slider.d.ts +0 -19
  543. package/dist/components/Tabs/Tabs.d.ts +0 -12
  544. package/dist/components/index.js +0 -15
  545. package/dist/ui-dom/Confirm.d.ts +0 -8
  546. package/dist/ui-dom/Notification.d.ts +0 -8
  547. package/dist/ui-dom/Toast.d.ts +0 -8
  548. package/dist/ui-dom/ai.d.ts +0 -59
  549. package/dist/ui-dom/browser.d.ts +0 -10
  550. package/dist/ui-dom/debug.d.ts +0 -21
  551. package/dist/ui-dom/hooks/chat.d.ts +0 -11
  552. package/dist/ui-dom/hooks/events.d.ts +0 -30
  553. package/dist/ui-dom/hooks/external.d.ts +0 -20
  554. package/dist/ui-dom/hooks/index.d.ts +0 -29
  555. package/dist/ui-dom/hooks/input.d.ts +0 -33
  556. package/dist/ui-dom/hooks/media.d.ts +0 -17
  557. package/dist/ui-dom/hooks/popup.d.ts +0 -30
  558. package/dist/ui-dom/hooks/stable.d.ts +0 -35
  559. package/dist/ui-dom/hooks/types.d.ts +0 -77
  560. package/dist/ui-dom/i18n.d.ts +0 -31
  561. package/dist/ui-dom/index.d.ts +0 -47
  562. package/dist/ui-dom/index.js +0 -41
  563. package/dist/ui-dom/jsx-runtime.d.ts +0 -4
  564. package/dist/ui-dom/jsx-runtime.js +0 -1
  565. package/dist/ui-dom/locale/en_US.d.ts +0 -55
  566. package/dist/ui-dom/locale/zh_CN.d.ts +0 -55
  567. package/dist/ui-dom/middleware/api.d.ts +0 -91
  568. package/dist/ui-dom/middleware/auth.d.ts +0 -30
  569. package/dist/ui-dom/middleware/ws.d.ts +0 -33
  570. package/dist/ui-dom/motion.d.ts +0 -8
  571. package/dist/ui-dom/popup-tracker.d.ts +0 -36
  572. package/dist/ui-dom/popup.d.ts +0 -42
  573. package/dist/ui-dom/store.d.ts +0 -24
  574. package/dist/ui-dom/testing.d.ts +0 -68
  575. package/dist/ui-dom/testing.js +0 -7
  576. package/dist/ui-dom/types.d.ts +0 -632
  577. package/dist/ui-dom/use-chat.d.ts +0 -95
  578. package/dist/ui-dom/vdom3/README.d.ts +0 -32
  579. package/dist/ui-dom/vdom3/app.d.ts +0 -20
  580. package/dist/ui-dom/vdom3/audit.d.ts +0 -29
  581. package/dist/ui-dom/vdom3/build.d.ts +0 -20
  582. package/dist/ui-dom/vdom3/commands.d.ts +0 -21
  583. package/dist/ui-dom/vdom3/comp-index.d.ts +0 -18
  584. package/dist/ui-dom/vdom3/delegate.d.ts +0 -48
  585. package/dist/ui-dom/vdom3/events.d.ts +0 -17
  586. package/dist/ui-dom/vdom3/index.d.ts +0 -42
  587. package/dist/ui-dom/vdom3/jsx.d.ts +0 -32
  588. package/dist/ui-dom/vdom3/record.d.ts +0 -16
  589. package/dist/ui-dom/vdom3/registry.d.ts +0 -30
  590. package/dist/ui-dom/vdom3/render.d.ts +0 -39
  591. package/dist/ui-dom/vdom3/replay.d.ts +0 -28
  592. package/dist/ui-dom/vdom3/root.d.ts +0 -24
  593. package/dist/ui-dom/vdom3/router.d.ts +0 -31
  594. package/dist/ui-dom/vdom3/scheduler.d.ts +0 -23
  595. package/dist/ui-dom/vdom3/ssr.d.ts +0 -27
  596. package/dist/ui-dom/vdom3/sync.d.ts +0 -22
  597. package/dist/ui-dom/vdom3/types.d.ts +0 -173
  598. package/dist/ui-dom/vdom3/ui.d.ts +0 -16
  599. package/dist/ui-dom/vdom3.js +0 -41
  600. package/dist/ui-dom/vnode.d.ts +0 -13
  601. /package/dist/{make-executable-schema.test.d.ts → cli/content-sync.test.d.ts} +0 -0
  602. /package/dist/{ui-dom/testing.test.d.ts → cli/docs-cli.test.d.ts} +0 -0
  603. /package/dist/{components → client/components}/CodeBlock/highlight.d.ts +0 -0
  604. /package/dist/{components → client/components}/DatePicker/calendar-utils.d.ts +0 -0
  605. /package/dist/{components → client/components}/DiffView/diff-utils.d.ts +0 -0
  606. /package/dist/{components → client/components}/Markdown/parser.d.ts +0 -0
  607. /package/dist/{components → client/components}/Pipeline/dag-utils.d.ts +0 -0
  608. /package/dist/{components → client/components}/QRCode/qr.d.ts +0 -0
  609. /package/dist/{components → client/components}/Sparkline/sparkline-utils.d.ts +0 -0
  610. /package/dist/{ai → server/ai}/agent.d.ts +0 -0
  611. /package/dist/{ai → server/ai}/client.d.ts +0 -0
  612. /package/dist/{ai → server/ai}/sse.d.ts +0 -0
  613. /package/dist/{core → server/core}/serve.d.ts +0 -0
  614. /package/dist/{core → server/core}/ws.d.ts +0 -0
  615. /package/dist/{db → server/db}/errors.d.ts +0 -0
  616. /package/dist/{db → server/db}/memory-redis.d.ts +0 -0
  617. /package/dist/{db → server/db}/memory-sql.d.ts +0 -0
  618. /package/dist/{db → server/db}/postgres/connection.d.ts +0 -0
  619. /package/dist/{db → server/db}/postgres/pool.d.ts +0 -0
  620. /package/dist/{db → server/db}/postgres/protocol.d.ts +0 -0
  621. /package/dist/{db → server/db}/postgres/schema.d.ts +0 -0
  622. /package/dist/{db → server/db}/query-builder.d.ts +0 -0
  623. /package/dist/{db → server/db}/query.d.ts +0 -0
  624. /package/dist/{db → server/db}/redis/client.d.ts +0 -0
  625. /package/dist/{db → server/db}/redis/commands.d.ts +0 -0
  626. /package/dist/{db → server/db}/redis/connection.d.ts +0 -0
  627. /package/dist/{db → server/db}/redis/pipeline.d.ts +0 -0
  628. /package/dist/{db → server/db}/redis/pool.d.ts +0 -0
  629. /package/dist/{db → server/db}/redis/resp.d.ts +0 -0
  630. /package/dist/{db → server/db}/redis/subscriber.d.ts +0 -0
  631. /package/dist/{db → server/db}/sql-parser.d.ts +0 -0
  632. /package/dist/{email → server/email}/index.d.ts +0 -0
  633. /package/dist/{email → server/email}/smtp.d.ts +0 -0
  634. /package/dist/{graphql.d.ts → server/graphql.d.ts} +0 -0
  635. /package/dist/{index.d.ts → server/index.d.ts} +0 -0
  636. /package/dist/{make-executable-schema.d.ts → server/make-executable-schema.d.ts} +0 -0
  637. /package/dist/{messager → server/messager}/index.d.ts +0 -0
  638. /package/dist/{middleware → server/middleware}/cors.d.ts +0 -0
  639. /package/dist/{middleware → server/middleware}/rate-limit.d.ts +0 -0
  640. /package/dist/{middleware → server/middleware}/static.d.ts +0 -0
  641. /package/dist/{postgres → server/postgres}/client.d.ts +0 -0
  642. /package/dist/{postgres → server/postgres}/index.d.ts +0 -0
  643. /package/dist/{postgres → server/postgres}/types.d.ts +0 -0
  644. /package/dist/{queue → server/queue}/index.d.ts +0 -0
  645. /package/dist/{redis → server/redis}/client.d.ts +0 -0
  646. /package/dist/{redis → server/redis}/index.d.ts +0 -0
  647. /package/dist/{redis → server/redis}/types.d.ts +0 -0
  648. /package/dist/{request.d.ts → server/request.d.ts} +0 -0
  649. /package/dist/{response.d.ts → server/response.d.ts} +0 -0
  650. /package/dist/{scheduler → server/scheduler}/cron.d.ts +0 -0
  651. /package/dist/{scheduler → server/scheduler}/index.d.ts +0 -0
  652. /package/dist/{types.d.ts → server/types.d.ts} +0 -0
  653. /package/dist/{ui → server/ui}/html-safe.d.ts +0 -0
  654. /package/dist/{user → server/user}/index.d.ts +0 -0
  655. /package/dist/{user → server/user}/password.d.ts +0 -0
@@ -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 K(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===B?"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 J=Symbol("v3-fragment"),q=Symbol("v3-portal"),B=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 on(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 v=typeof d=="function"?null:d,y=typeof d=="function"?d:g,N=x=>{if(v==null){y(x);return}(Array.isArray(v)?v:[v]).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=on();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 rn=0;function j(){return`n${++rn}`}function Se(e){if(!e)return 0;let t=0;for(let n of Q.values())n.has(e)&&t++;return t}var Q=new Map,Ze=new Set,Ye=new Map,ze=new Map,Ve=new Map,Ce=new Map,et={focus:"focusin",blur:"focusout"},sn=new Set(["error","load","loadstart","loadend","abort","unload","resize","message"]),ln=new Set(["input","change","compositionstart","compositionend"]);function tt(e,t,n,o=!1){let r=Q.get(t);r||(r=new Map,Q.set(t,r)),r.set(e,{handler:n,once:o})}function an(e,t){Q.get(t)?.delete(e)&&w.emit(h("event","unbind",e,{event:t}))}function Pe(e){for(let[t,n]of Q)n.delete(e)&&w.emit(h("event","unbind",e,{event:t}))}function ie(e,t,n,o=!1){let r=e.getAttribute("data-v3-id");if(!r)return()=>{};tt(r,t,n,o);let s=nt(e);return s&&ot(s,t),()=>an(r,t)}function Le(e){Ze.add(e),un()}var Je=!1,_e=0,se=[];function Qe(){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 un(){if(Je||(Je=!0,typeof document>"u"))return;let e=()=>{_e||(_e=requestAnimationFrame(()=>{_e=0;try{let{target:o,text:r}=Qe();if(!r)return;w.emit(h("text","select",void 0,{target:o,length:r.length,sample:r.slice(0,40)}))}catch{}}))};se.push(V(document,"selectionchange",e));let t=o=>{let{target:r,text:s}=Qe(),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{}};se.push(V(document,"copy",n)),se.push(V(document,"cut",n)),se.push(V(document,"paste",n))}function nt(e){let t=e;for(;t;){if(t.nodeType===1&&Ze.has(t))return t;t=t.parentNode}return null}function ot(e,t){let n=Ye.get(e)??new Set;if(n.has(t))return;n.add(t),Ye.set(e,n);let o=et[t]??t,r=u=>dn(u),s=sn.has(o);e.addEventListener(o,r,s?{capture:!0}:void 0);let a=ze.get(e)??new Map;a.set(o,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:o,delegated:!0}))}function V(e,t,n,o){let r=et[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 Ae(e,t,n,o){if(tt(e,t,n),o){let r=nt(o);r&&ot(r,t)}}function dn(e){let t=e.target;t&&t.nodeType===3&&(t=t.parentElement);let n=Q.get(e.type);if(n)for(;t;){if(!t.hasAttribute?.("data-v3-id")){let r=t.closest?.("[data-v3-id]");if(r&&r!==t){t=r;continue}}let o=t.getAttribute?.("data-v3-id");if(o){let r=n.get(o);if(r){try{Object.defineProperty(e,"currentTarget",{value:t,configurable:!0})}catch{}try{r.handler(e)}catch{}if(ln.has(e.type)){let s=t?.value??null;w.emit(h("text","input",o,{event:e.type,value:typeof s=="string"?s.slice(0,100):null}))}if(r.once&&(n.delete(o),w.emit(h("event","unbind",o,{event:e.type}))),e.cancelBubble)break}}t=t.parentElement}}var rt=new Map;function Me(e){e._id&&rt.set(e._id,e)}function st(e){rt.delete(e)}function Z(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:")?Z(t.slice(7)):this.get(t)}get(t){return t.startsWith("portal:")?Z(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 I(){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,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 cn=new Map;function it(e){return cn.get(e)??null}function lt(e,t){let n=e.selfId(),o;return n&&(o=t.subscribe(()=>e.render([n])),e.onUnmount(()=>o?.())),t}function Oe(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 at(e,t){let n=e.selfId(),o=Oe(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 ut(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 dt(e,t,n){return r=>{r?t(r):n?.()}}function le(e){return typeof window<"u"&&!!window.matchMedia?.("(hover: hover)").matches}function Ie(e){return typeof window<"u"&&!!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches}function ct(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 ae(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=ie(u,"animationend",r)):(a?.(),a=null,r=void 0)},sync:u=>(u?o="open":o==="open"&&(o="exit"),o)}}function ft(e,t,n){let o=e.selfId(),r=Ie(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=v=>{let y=Math.min(1,(v-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 pt=I();function mt(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 ue(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=pt.viewportWidth(),c=pt.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 de(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:q,props:{children:Array.isArray(e)?e:[e],portalKey:t??"default"},key:t??null}}function Re(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,ue(u,r.panel?.(),r.margin))},o}function yt(e,t){let n=e.selfId(),o=e.browser,r=le(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?ae(e,{name:t.name}):null,c,f=!1,p=b=>{if(!i)return b?"open":"closed";let k=i.sync(b);return b&&t.lockScroll&&!f&&(fn(),f=!0),k},m=b=>{l()||(a?t.onOpenChange?.(b):i?b?p(!0):u()&&p(!1):t.setOpen(b))},d=()=>{let b=t.placement;return typeof b=="function"?b():b??"bottom"},g=null,v=!1,y=Re(e,{el:t.el??(()=>null),isOpen:()=>u(),compute:b=>{if(t.position){let k=t.position();return{top:k.y,left:k.x,width:k.width}}return mt(b,d(),t.gap??6,t.center!==!1)},panel:()=>g,margin:t.margin??8}),N=b=>{if(t.closeOnOutside===!1||t.mask||!u())return;let k=b.target;if(!(k instanceof Node))return;let A=t.el?.()??null;A&&A.contains(k)||g&&g.contains(k)||m(!1)},x=b=>{t.closeOnEscape!==!1&&(b.key!=="Escape"||!u()||m(!1))},S=V(o,"mousedown",N),Gt=V(o,"keydown",x);if(n){let b=e.onUnmount(k=>{k===n&&(S(),Gt(),b())})}let P={},Be=b=>typeof b=="function"?b():b??0,Ge=()=>Be(t.openDelay),be=()=>Be(t.closeDelay),L,_,Xt=()=>{clearTimeout(L),clearTimeout(_),L=void 0,_=void 0},Yt=b=>{if(l())return;let k=b.currentTarget,A=b.relatedTarget;k.contains(A)||(clearTimeout(_),_=void 0,L=setTimeout(()=>{L=void 0,m(!0)},Ge()))},zt=b=>{if(l())return;let k=b.currentTarget,A=b.relatedTarget;k.contains(A)||(clearTimeout(L),L=void 0,_=setTimeout(()=>{_=void 0,m(!1)},be()))},Jt=()=>{l()||(clearTimeout(_),_=void 0,L=setTimeout(()=>{L=void 0,m(!0)},Ge()))},Qt=()=>{l()||(clearTimeout(L),L=void 0,_=setTimeout(()=>{_=void 0,m(!1)},be()))},te=()=>s()==="hover";if(P.onMouseOver=b=>{te()&&Yt(b)},P.onMouseOut=b=>{te()&&zt(b)},P.onClick=()=>{te()?r||m(!u()):s()==="click"&&m(!0)},P.onFocus=()=>{te()?Jt():s()==="focus"&&(clearTimeout(_),_=void 0,m(!0))},P.onBlur=()=>{te()?Qt():s()==="focus"&&(clearTimeout(L),L=void 0,_=setTimeout(()=>{_=void 0,m(!1)},be()))},s()==="longpress"){let b,k=0,A=0,F=()=>{clearTimeout(b),b=void 0};P.onPointerDown=C=>{l()||(k=C.clientX??0,A=C.clientY??0,F(),b=setTimeout(()=>{b=void 0,t.onTrigger?.({clientX:k,clientY:A}),m(!0)},t.longPressDuration??500))},P.onPointerUp=F,P.onPointerLeave=F,P.onPointerMove=C=>{let ke=Math.abs((C.clientX??0)-k),xe=Math.abs((C.clientY??0)-A);(ke>10||xe>10)&&F()},P.onContextMenu=C=>{C.preventDefault(),t.onTrigger?.({clientX:C.clientX??0,clientY:C.clientY??0}),m(!0)}}if(P.onKeyDown=b=>{b.key==="Escape"&&t.closeOnEscape!==!1&&m(!1)},n){let b=e.onUnmount(k=>{k===n&&(Xt(),b())})}let Zt=b=>{b?(g=b,ie(b,"animationend",()=>y.refresh(),!0)):g=null},Ee=null,Ne=null,Xe=b=>{Zt(b),Ne&&Ne(b),i?.ref(b),t.trapFocus&&(b?c=yn(b):(c?.(),c=void 0)),t.lockScroll&&!b&&f&&(pn(),f=!1)};return{get open(){return u()},setOpen:m,get phase(){return i?i.phase:u()?"open":"closed"},sync:p,wrapProps:P,portal:(b,k="popover")=>{if(l())return null;if(!(i?i.phase!=="closed":u()))return v=!1,Ee=null,null;let F=t.el?.()??null;(!v||F!==Ee)&&(F?y.refresh():queueMicrotask(()=>{u()&&y.refresh()}),v=!0,Ee=F);let C=b.props??{};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 re=typeof t.width=="function"?t.width():t.width;return re!==void 0?`min(${re}px, calc(100vw - 32px))`:"calc(100vw - 32px)"})()},z={...b,props:{...C,class:ke,style:xe,ref:Xe}};if(t.mask){let re=typeof t.mask=="object"?t.mask:de("div",{class:"wf-popup-mask","data-portal-mask":k,onClick:t.maskClosable===!1?void 0:()=>m(!1)}),en=t.maskCentered?de("div",{class:"wf-cover",style:{"--wf-z":"var(--wf-z-popover)",pointerEvents:"none"}},{...z,props:{...z.props,style:{...C.style??{},pointerEvents:"auto"},ref:Xe}}):null,tn=t.maskCentered?void 0:{...z.props?.style??{},zIndex:"var(--wf-z-popover)"},nn=t.maskCentered?en:{...z,props:{...z.props,style:tn}};return ce([re,nn],k)}return ce(z,k)},refresh:()=>y.refresh()}}function gt(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 X=I(),G=0,ht="",wt="",vt="",bt="",fe=0;function Et(){return typeof window<"u"&&typeof document<"u"}function fn(){if(G++,w.emit(h("effect","lock",void 0,{depth:G})),G>1||!Et())return;fe=X.scrollTop();let e=X.bodyElement();ht=e.style.overflow,wt=e.style.position,vt=e.style.top,bt=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 pn(){if(G===0||(G--,w.emit(h("effect","unlock",void 0,{depth:G})),G>0)||!Et())return;let e=X.bodyElement();e.style.overflow=ht,e.style.position=wt,e.style.top=vt,e.style.width=bt,fe>0&&X.scrollTo(fe)}var mn='a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';function yn(e){let t;return queueMicrotask(()=>{let n=e.querySelectorAll(mn);if(n.length===0)return;let o=n[0],r=n[n.length-1],s=u=>{u.key==="Tab"&&(u.shiftKey&&X.activeElement()===o?(u.preventDefault(),r.focus()):!u.shiftKey&&X.activeElement()===r&&(u.preventDefault(),o.focus()))},a=X.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 Nt(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 kt(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 xt(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 Tt(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,v=g!==o.isIn,y=!o.ready;o.isIn=g,o.ready=!0,t.onChange?.(d,g),(v||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 Vt(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 Ct(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 _t(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 St(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 gn(e){return e.map(t=>{let n={role:t.role,content:t.content};return t.reasoning&&(n.reasoning_content=t.reasoning),n})}function He(){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,v){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:v?.(d,g);break}o?.()}function l(){let d=n.body?n.body(e.messages):{messages:gn(e.messages)};r=t(n.url,d,{onToken:v=>a("wf:token",{text:v}),onToolCall:v=>a("wf:tool_call",v),onToolProgress:v=>a("wf:tool_progress",v),onToolResult:v=>a("wf:tool_result",v),onApproval:v=>a("wf:approval_request",v),onUsage:v=>a("wf:usage",v),onStep:v=>a("wf:step",v),onDone:v=>a("wf:done",v),onError:v=>a("wf:error",v),onEvent:(v,y)=>a(v,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:He(),role:"user",content:d,status:"done"},{id:He(),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:He(),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,v){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(v?{id:N.id,decision:d,note:g,modifiedArgs:v}:{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 Lt(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??En(),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:bn(i.status),message:`HTTP ${i.status} ${i.statusText}`});return}try{for await(let{name:c,data:f}of wn(i.body)){if(o.signal.aborted)return;vn(l,{name:c,data:f},a),hn(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 hn(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*wn(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 vn(e,t,n){n&&(e.length>=1e3&&e.shift(),e.push(t))}function bn(e){return e===401||e===403?"auth_failed":e===429?"rate_limited":e>=500?"provider_error":"invalid_request"}function En(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`trace-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function At(e,t){let n={messages:[],input:"",streaming:!1,error:null,usage:null,step:null},o=new Set,s=Pt(n,Lt,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 Mt=I();function Ot(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 v=g.getBoundingClientRect();if(v.width===0&&v.height===0)continue;let y=d.compute(v);Object.assign(d.pos,ue(y,d.panel?.(),d.margin)),p.push(m)}for(let[m,d]of n){let g=d.getScroller(),v=g instanceof Window?Mt.scrollingElement()?.scrollTop??Mt.scrollTop():g.scrollTop??0;v!==d.handle.y&&(d.handle.y=v,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 Nn=new Map,kn=new Set,xn=new Map,Tn=new Map,Vn=new Map,Ue=new Map,De=Ot(e=>{for(let t of e){let n=Ue.get(t);if(n)try{n()}catch{}}}),Cn=De.popupTrackers,_n=De.scrollTrackers,Sn=De.ensurePopupListeners;function It(e,t,n){Ue.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:I(),onUnmount:s=>(n(()=>{s(e),Ue.delete(e)}),()=>{}),registry:{idRegistry:new Map},mediaRegistry:Nn,popupTrackers:Cn,scrollTrackers:_n,isMounting:()=>!1,warned:kn,uncontrolledValues:xn,inputStates:Tn,openStates:Vn,ensurePopupListeners:Sn};return{__v3ui:!0,__compId:e,render:s=>o.render(s),onUnmount:s=>{n(s)},selfId:s=>{o.registry.idRegistry.set(s,e)},useExternal:s=>lt(o,s),useControlled:s=>Oe(o,s),useControlledInput:s=>at(o,s),useOpen:s=>gt(o,s),usePopup:s=>yt(o,s),usePopupPosition:s=>Re(o,s),useTween:(s,a)=>ft(o,s,a),useInView:s=>Tt(o,s),useScrollPosition:s=>Vt(o,s),useGlobalKey:s=>Ct(o,s),useDrag:s=>_t(o,s),useDragDrop:s=>St(o,s),useMedia:(s,a)=>{Nt(o,s,a)},useBreakpoint:(s,a)=>{kt(o,s,a)},useReducedMotion:()=>Ie(o),useStableRef:(s,a)=>dt(o,s,a),usePresence:s=>ae(o,s),useLongPress:s=>ct(o,s),useHoverCapable:()=>le(o),useVisualViewport:()=>xt(o),useAsync:s=>ut(o,s),useChat:s=>At(o,s)}}var me=new Map;function We(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 Rt=new Set;function Ht(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 $(e,t,n,o=!1){if(typeof e.type=="function"||e.type===B){let i={...e};if(e.type===B)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,Me(i),!o&&Ht(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=`${R(i.type)}:${d.slice(0,40)}`;Rt.has(g)||(Rt.add(g),console.warn(`[vdom3/audit] \u7EC4\u4EF6 ${R(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:R(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:R(i.type),keys:m})),i._propsSnap=pe(i.props),w.emit(h("comp","build",i._id,{name:R(i.type),reused:!0,index:!0,reason:o?"root-render":"props-changed",changedKeys:m}))}else{i._id=j(),Me(i),w.emit(h("comp","build",i._id,{name:R(i.type),reused:!1,index:!0,reason:"mount"})),w.emit(h("comp","mount",i._id,{name:R(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:I(),ui:It(m,d,y=>{me.set(m,y)})}),v=null;try{v=await i.type(i.props,g)}catch(y){let N=y;throw w.emit(h("error","throw",i._id,{phase:"factory",name:R(i.type),message:N?.message??String(y)})),y}i._render=v,i._propsSnap=pe(i.props)}w.emit(h("comp","render",i._id,{name:R(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:R(i.type),message:d?.message??String(m)})),m}i._child=null;let p=c?._child??null;if(f){let m=await $(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=it(p);if(!m)return w.emit(h("app","error",void 0,{appId:p,reason:"unknown-app"})),i;let d=f!=null&&f.type===B&&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 $(f._appOutput,c,null):null,v=i._appOutput?await $(i._appOutput,c,g):null;return i._child=v,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 $(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(Ht(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 R(e){return typeof e=="function"?e.name||"anonymous":String(e)}var Pn=globalThis.__WF_V3_AUDIT!=="0";function Ut(e,t){if(!Pn)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 Ln=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 ee(e){if(e==null||typeof e!="object")return!1;let t=e.type;return t===q||typeof t=="symbol"&&e.props?.portalKey!=null}function An(e){if(e==null||typeof e!="object")return!1;let t=e.type;return(t===J||typeof t=="symbol")&&e.props?.portalKey==null}var E=new O;function $e(e,t,n){let o=E;n&&(E=n);try{Le(t),t.innerHTML="",E.register(O.ROOT,t),D(e,t)}finally{E=o}}function D(e,t,n){if(typeof e.type=="function"||e.type===B){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=D(l,t,n);return e.el=u,e._outFirst=l._outFirst??u,e._outLast=l._outLast??u,u}if(An(e)){let l=null,u=null;for(let i of T(e)){let c=Fe(i,t,n);c&&(l||(l=c),u=c)}return e._outFirst=l,e._outLast=u,l}if(ee(e)){let u=String(e.props?.portalKey??"default"),i=Z(u);Le(i),E.register(O.PORTAL(u),i);let c=null,f=i.childNodes.length===0;for(let p of T(e)){let m=Fe(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=Ln.has(o)?document.createElementNS("http://www.w3.org/2000/svg",o):document.createElement(o),s=j();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)){Ae(s,l.slice(2).toLowerCase(),u,t);continue}if(u!=null&&u!==!1){if(l==="value"&&r instanceof HTMLInputElement)r.value=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:W(t),ref:n?M(n):null,causeId:U??void 0}));let a=e.props?.ref;typeof a=="function"&&(w.emit(h("ref","mount",s,{})),a(r));for(let l of T(e))Fe(l,r);return r}function Mn(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?$t(e,t,o):e.el&&e.el.parentNode===t?ge(e.el,t,e):r.parentNode===t&&Y(r,t);let a=r.nextSibling,l=64,u=0;for(;a&&a!==s&&u++<l;){let i=a.nextSibling;Y(a,t),a=i}s.parentNode===t&&Y(s,t);return}if(e!=null&&typeof e=="object"&&ee(e)){ne(e);return}if(e!=null&&typeof e=="object"&&e._child&&ee(e._child)){ne(e._child);return}if(e!=null&&typeof e=="object"&&typeof e.type=="function"&&e._id){$t(e,t,o);return}e!=null&&typeof e=="object"&&e.el?ge(e.el,t,e):n&&Y(n,t)}function Y(e,t){let n=E.idOf(e);n&&(w.emit(h("node","remove",n,{parent:W(t),causeId:U??void 0})),E.unregister(n,e)),e.parentNode?.removeChild(e)}function je(e,t){let n=document.createComment("wf-hole"),o=j();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:W(e),ref:t?M(t):null,kind:"hole",causeId:U??void 0})),n}function Fe(e,t,n){if(e==null||e===!1||e===!0)return je(t,n);if(typeof e=="string"||typeof e=="number"){let o=document.createTextNode(String(e)),r=j();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:W(t),ref:n?M(n):null})),o}return D(e,t,n)}function oe(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:In(e,t,n,o)}finally{E=s}}var On=0,U=null,qt=[];function Dt(){return qt.push(U),U=`c${++On}`,U}function Wt(){U=qt.pop()??null}function Ft(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===J?"frag":t===q?"portal":"native"}return"unknown"}function In(e,t,n,o){let r=Ft(e),s=Ft(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=j();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:W(n),ref:o?M(o):null})),f}if(t==null||t===!1||t===!0){if(e!=null&&typeof e=="object"&&!Array.isArray(e)){if(ee(e))ne(e);else if(e.el&&e.el.parentNode===n){let i=E.idOf(e.el);w.emit(h("node","remove",i,{parent:W(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=K(a);ye(l?K(e):null,c,"reuse");let f=Wn[c];return f?f(i,a,n,o):(ye(l?K(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`),D(a,n,o))}if(ye(l?K(e):null,K(a),"rebuild"),l&&typeof e.type=="function"&&e._id&&(We(e._id),w.emit(h("comp","unmount",e._id,{name:qe(e.type)}))),l){let i=e.el;i&&i.parentNode===n?ge(i,n,e):e&&ee(e)&&ne(e)}return D(a,n,o)}function Rn(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)&&Kn(u,i))){if(typeof i=="function"&&/^on[A-Z]/.test(l)){Ae(o,l.slice(2).toLowerCase(),i,e);continue}if(i==null||i===!1)l==="value"&&e instanceof HTMLInputElement?e.value="":e.removeAttribute(l);else if(l==="value"&&e instanceof HTMLInputElement)e.value=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 Hn(e,t,n,o){let r=e.el;return r==null?(ye(K(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`),D(t,n,o)):(t.el=r,Rn(r,e.props,t.props),Ke(e,t,r),r)}function jt(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&&ee(s))ne(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:W(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;Y(i,n),i=p}l.parentNode===n&&Y(l,n)}else{let u=E.idOf(e.el);w.emit(h("node","remove",u,{parent:W(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=D(t,n,o):(oe(s,r,n,o),t.el=e.el,t._outFirst=r._outFirst??t.el,t._outLast=r._outLast??t.el),t.el}function Un(e,t,n,o){Ke(e,t,n,Fn(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 Dn(e,t,n,o){let r=String(t.props?.portalKey??"default"),s=Z(r);return E.register(O.PORTAL(r),s),Ke(e,t,s),t.el=s,s}var Wn={native:Hn,comp:jt,app:jt,frag:Un,portal:Dn,text:void 0,null:void 0};function Fn(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 jn(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:U??void 0}))}r=u}}}function $n(e,t,n){let o=new Map;for(let a of e)H(a)&&a.key!=null&&o.set(a.key,a);jn(e,t,n);let r=null;for(let a of t){let l=a,u=o.get(l.key??"")??null;u&&u!==l?(oe(u,l,n),r=l.el??r):u||(D(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 $t(e,t,n){let o=e._id;if(o&&(We(o),w.emit(h("comp","unmount",o,{name:qe(e.type)})),st(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"?Se(E.idOf(e)):0;if(Pe(E.idOf(e)),o>0){let s=Se(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:W(t),causeId:U??void 0})),e.parentNode?.removeChild(e),E.unregister(r,e)}function Kn(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 ne(e){let t=String(e.props?.portalKey??"default"),n=Z(t);he(e);for(let o of[...n.childNodes]){Pe(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 Kt=new Set;function Ke(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(!Kt.has(f)){Kt.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${qe(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)){$n(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,v=m,y=64,N=0;for(;v&&v!==d&&N++<y;)g++,v=v.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=()=>Mn(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=j();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(!l(d)){Dt();try{let y=d?d.nextSibling:null;g(),je(n,y)}finally{Wt()}}i+=1;continue}if(p!=null&&typeof p=="object"&&p.type===m.type)oe(p,m,n,d??null);else{Dt();try{let y=D(m,n,d??null);d&&!l(d)?g():d&&l(d)&&Y(d,n),y==null&&!d&&je(n,null)}finally{Wt()}}let v=c(m,d)||(p!=null&&typeof p=="object"&&!Array.isArray(p)&&p._outFirst&&p._outLast&&p._outLast!==p._outFirst?c(p,d):1);i+=v}Ut(n,t)}function qe(e){return typeof e=="function"?e.name||"anonymous":String(e)}function M(e){return E.idOf(e)}function W(e){return E.idOf(e)}var we=new WeakMap,Bt=new WeakMap;function fr(e,t,n){return new Promise((o,r)=>{(async()=>{try{document.getElementById("__wf_portal")?.remove();let s=new O,a=await $(t,{});$e(a,e,s),we.set(e,a),Bt.set(e,s),o()}catch(s){r(s)}})()})}async function pr(e,t,n,o,r){let s=we.get(e)??null,a=Bt.get(e)??E;if(o==null)return e.innerHTML="",we.set(e,null),null;let l=await $(o,{},s);return s?oe(s,l,e,void 0,a):$e(l,e,a),we.set(e,l),l}function mr(e,t){return $(e,{})}async function yr(e,t,n){let o=await e(t,n);return typeof o=="function"?o(t):o}async function gr(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 hr(e,t){let n;return ve(e,o=>{!n&&t(o)&&(n=o)}),n}function wr(e,t){let n=[];return ve(e,o=>{typeof o?.props?.class=="string"&&o.props.class.split(" ").includes(t)&&n.push(o)}),n}function vr(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:{}})}};return e?{ui:{...t.ui,...e.ui??{}},...e.browser?{browser:e.browser}:{}}:t}function br(e=()=>!1,t){return{get open(){return e()},setOpen:t??(n=>{}),refresh:()=>{},portal:(n,o)=>e()?n:null,wrapProps:{}}}export{mr as buildToDom,br as createPopupMock,vr as createTestCtx,wr as findByClass,hr as findVNode,gr as mountComponent,fr as mountToDom,pr as patchToDom,yr as renderVNode,ve as walkVNode};