weifuwu 0.86.0 → 0.87.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (651) hide show
  1. package/README.md +56 -45
  2. package/content/apps/admin.md +55 -0
  3. package/content/apps/agent-platform.md +35 -0
  4. package/content/apps/auth.md +49 -0
  5. package/content/apps/multi.md +44 -0
  6. package/content/apps/todo.md +51 -0
  7. package/content/backend/ai.md +28 -0
  8. package/content/backend/auth.md +20 -0
  9. package/content/backend/email.md +23 -0
  10. package/content/backend/graphql.md +23 -0
  11. package/content/backend/http.md +23 -0
  12. package/content/backend/limit.md +23 -0
  13. package/content/backend/middleware.md +17 -0
  14. package/content/backend/queue.md +23 -0
  15. package/content/backend/redis.md +26 -0
  16. package/content/backend/router.md +23 -0
  17. package/content/backend/schedule.md +23 -0
  18. package/content/backend/sql.md +27 -0
  19. package/content/backend/sse.md +26 -0
  20. package/content/backend/ws.md +26 -0
  21. package/content/capabilities/app-node.md +21 -0
  22. package/content/capabilities/data.md +21 -0
  23. package/content/capabilities/events.md +21 -0
  24. package/content/capabilities/hooks.md +22 -0
  25. package/content/capabilities/i18n.md +21 -0
  26. package/content/capabilities/popup.md +21 -0
  27. package/content/capabilities/render-only.md +23 -0
  28. package/content/capabilities/router.md +22 -0
  29. package/content/capabilities/self-id.md +21 -0
  30. package/content/capabilities/store.md +21 -0
  31. package/content/capabilities/theme.md +21 -0
  32. package/content/capabilities/two-phase.md +21 -0
  33. package/content/components/accordion.md +50 -0
  34. package/content/components/actionsheet.md +46 -0
  35. package/content/components/affix.md +51 -0
  36. package/content/components/aichat.md +57 -0
  37. package/content/components/alert.md +52 -0
  38. package/content/components/alertgroup.md +45 -0
  39. package/content/components/anchor.md +52 -0
  40. package/content/components/app.md +37 -0
  41. package/content/components/approvalcard.md +56 -0
  42. package/content/components/appshell.md +50 -0
  43. package/content/components/aspectratio.md +47 -0
  44. package/content/components/authpage.md +61 -0
  45. package/content/components/autocomplete-v2.md +40 -0
  46. package/content/components/autocomplete.md +56 -0
  47. package/content/components/avatar.md +51 -0
  48. package/content/components/avatargroup.md +47 -0
  49. package/content/components/backtop.md +53 -0
  50. package/content/components/badge.md +55 -0
  51. package/content/components/breadcrumb.md +49 -0
  52. package/content/components/button.md +63 -0
  53. package/content/components/calendar-v2.md +40 -0
  54. package/content/components/calendar.md +50 -0
  55. package/content/components/card.md +58 -0
  56. package/content/components/carousel.md +52 -0
  57. package/content/components/cascader-v2.md +39 -0
  58. package/content/components/cascader.md +54 -0
  59. package/content/components/chart.md +53 -0
  60. package/content/components/chatinput.md +63 -0
  61. package/content/components/checkbox.md +51 -0
  62. package/content/components/checkboxgroup.md +52 -0
  63. package/content/components/citationcard.md +48 -0
  64. package/content/components/codeblock.md +48 -0
  65. package/content/components/codeeditor.md +47 -0
  66. package/content/components/collapse.md +49 -0
  67. package/content/components/colorpicker.md +50 -0
  68. package/content/components/command.md +50 -0
  69. package/content/components/confirm.md +57 -0
  70. package/content/components/contextmenu.md +48 -0
  71. package/content/components/copybutton.md +51 -0
  72. package/content/components/datepicker.md +52 -0
  73. package/content/components/descriptions-v2.md +39 -0
  74. package/content/components/descriptions.md +52 -0
  75. package/content/components/diffview-v2.md +39 -0
  76. package/content/components/diffview.md +50 -0
  77. package/content/components/divider.md +48 -0
  78. package/content/components/drawer.md +55 -0
  79. package/content/components/dropdown.md +53 -0
  80. package/content/components/editor.md +49 -0
  81. package/content/components/emptystate.md +51 -0
  82. package/content/components/exportcsv.md +38 -0
  83. package/content/components/field.md +54 -0
  84. package/content/components/filepreview-office.md +37 -0
  85. package/content/components/filepreview.md +49 -0
  86. package/content/components/filetree.md +56 -0
  87. package/content/components/fileupload-v2.md +39 -0
  88. package/content/components/fileupload.md +57 -0
  89. package/content/components/floatbutton.md +52 -0
  90. package/content/components/form-v2.md +41 -0
  91. package/content/components/form.md +60 -0
  92. package/content/components/grid.md +51 -0
  93. package/content/components/highlight-v2.md +39 -0
  94. package/content/components/highlight.md +46 -0
  95. package/content/components/hovercard.md +51 -0
  96. package/content/components/icon.md +50 -0
  97. package/content/components/imagecropper.md +45 -0
  98. package/content/components/img.md +56 -0
  99. package/content/components/infinitescroll-v2.md +40 -0
  100. package/content/components/infinitescroll.md +54 -0
  101. package/content/components/input.md +65 -0
  102. package/content/components/inputnumber.md +58 -0
  103. package/content/components/inview.md +56 -0
  104. package/content/components/jsonschemaform.md +53 -0
  105. package/content/components/jsonviewer-v2.md +39 -0
  106. package/content/components/jsonviewer.md +49 -0
  107. package/content/components/kanban.md +46 -0
  108. package/content/components/label.md +48 -0
  109. package/content/components/layout.md +54 -0
  110. package/content/components/layoutcontent.md +43 -0
  111. package/content/components/layoutheader.md +43 -0
  112. package/content/components/layoutsider.md +43 -0
  113. package/content/components/link.md +52 -0
  114. package/content/components/list.md +44 -0
  115. package/content/components/loading.md +45 -0
  116. package/content/components/logviewer-v2.md +39 -0
  117. package/content/components/logviewer.md +53 -0
  118. package/content/components/markdown.md +51 -0
  119. package/content/components/markdowneditor.md +47 -0
  120. package/content/components/math.md +42 -0
  121. package/content/components/mentions-v2.md +39 -0
  122. package/content/components/mentions.md +52 -0
  123. package/content/components/menu.md +56 -0
  124. package/content/components/menubar.md +44 -0
  125. package/content/components/messagebubble.md +50 -0
  126. package/content/components/modal.md +59 -0
  127. package/content/components/navmenu.md +47 -0
  128. package/content/components/notification.md +51 -0
  129. package/content/components/pageheader.md +53 -0
  130. package/content/components/pagination.md +49 -0
  131. package/content/components/paragraph.md +45 -0
  132. package/content/components/passwordinput.md +57 -0
  133. package/content/components/pininput-v2.md +39 -0
  134. package/content/components/pininput.md +50 -0
  135. package/content/components/pipeline.md +49 -0
  136. package/content/components/popconfirm.md +58 -0
  137. package/content/components/popover.md +61 -0
  138. package/content/components/progressbar.md +50 -0
  139. package/content/components/prompttemplate.md +49 -0
  140. package/content/components/qrcode.md +50 -0
  141. package/content/components/radiogroup.md +53 -0
  142. package/content/components/rate.md +53 -0
  143. package/content/components/reasoningblock.md +47 -0
  144. package/content/components/relationgraph.md +52 -0
  145. package/content/components/resizable.md +53 -0
  146. package/content/components/result.md +49 -0
  147. package/content/components/scrollbar.md +49 -0
  148. package/content/components/searchinput.md +51 -0
  149. package/content/components/segmentedcontrol.md +59 -0
  150. package/content/components/select-searchable.md +47 -0
  151. package/content/components/select.md +66 -0
  152. package/content/components/sessionlist.md +52 -0
  153. package/content/components/sheetgrid.md +44 -0
  154. package/content/components/skeleton.md +55 -0
  155. package/content/components/slidecanvas.md +44 -0
  156. package/content/components/slider.md +62 -0
  157. package/content/components/sortablelist.md +39 -0
  158. package/content/components/space.md +52 -0
  159. package/content/components/sparkline.md +52 -0
  160. package/content/components/statcard-countdown.md +39 -0
  161. package/content/components/statcard.md +56 -0
  162. package/content/components/steps.md +48 -0
  163. package/content/components/switch.md +50 -0
  164. package/content/components/tabbar.md +45 -0
  165. package/content/components/table-v2.md +40 -0
  166. package/content/components/table.md +66 -0
  167. package/content/components/tabs.md +56 -0
  168. package/content/components/tag.md +51 -0
  169. package/content/components/tagsinput-v2.md +39 -0
  170. package/content/components/tagsinput.md +54 -0
  171. package/content/components/text.md +45 -0
  172. package/content/components/textarea.md +57 -0
  173. package/content/components/themeswitch.md +69 -0
  174. package/content/components/timeline.md +50 -0
  175. package/content/components/title.md +45 -0
  176. package/content/components/toast.md +52 -0
  177. package/content/components/toggle-togglegroup.md +52 -0
  178. package/content/components/togglegroup.md +47 -0
  179. package/content/components/toolcallcard.md +51 -0
  180. package/content/components/tooltip.md +50 -0
  181. package/content/components/tour.md +50 -0
  182. package/content/components/transfer.md +52 -0
  183. package/content/components/tree-v2.md +39 -0
  184. package/content/components/tree.md +59 -0
  185. package/content/components/treeselect.md +54 -0
  186. package/content/components/typography.md +51 -0
  187. package/content/components/videoplayer.md +52 -0
  188. package/content/components/virtuallist.md +52 -0
  189. package/content/components/virtualtable-v2.md +39 -0
  190. package/content/components/virtualtable.md +55 -0
  191. package/content/components/watermark.md +53 -0
  192. package/content/components/wave.md +43 -0
  193. package/content/guides/ai-chat-family.md +24 -0
  194. package/content/guides/choose.md +67 -0
  195. package/content/guides/component-model.md +32 -0
  196. package/content/guides/component-standards.md +123 -0
  197. package/{docs/components.md → content/guides/components-guide.md} +31 -7
  198. package/{docs/custom-components.md → content/guides/custom-component.md} +70 -55
  199. package/{docs/data.md → content/guides/data-guide.md} +5 -2
  200. package/content/guides/file-preview-family.md +18 -0
  201. package/{docs → content/guides}/frontend.md +122 -52
  202. package/content/guides/layout-choice.md +64 -0
  203. package/{docs/layout.md → content/guides/layout-guide.md} +12 -8
  204. package/{docs/frontend-middleware.md → content/guides/middleware.md} +34 -3
  205. package/{docs/mobile.md → content/guides/mobile-guide.md} +20 -24
  206. package/content/guides/page-building.md +98 -0
  207. package/content/guides/production.md +37 -0
  208. package/content/guides/quality.md +60 -0
  209. package/{docs/realtime.md → content/guides/realtime-guide.md} +6 -3
  210. package/content/guides/render-only.md +44 -0
  211. package/{docs/saas.md → content/guides/saas-guide.md} +8 -5
  212. package/{docs/server.md → content/guides/server-guide.md} +5 -2
  213. package/content/guides/start.md +41 -0
  214. package/{docs → content/guides}/styling.md +5 -1
  215. package/{docs/frontend-ui-dom.md → content/guides/ui-dom-guide.md} +7 -1
  216. package/content/index.json +4344 -0
  217. package/content/index.md +181 -0
  218. package/content/layout/align.md +20 -0
  219. package/content/layout/anchor.md +19 -0
  220. package/content/layout/app-shell.md +23 -0
  221. package/content/layout/border.md +20 -0
  222. package/content/layout/center.md +19 -0
  223. package/content/layout/cluster.md +19 -0
  224. package/content/layout/container.md +19 -0
  225. package/content/layout/fill.md +19 -0
  226. package/content/layout/grid.md +19 -0
  227. package/content/layout/hidden.md +22 -0
  228. package/content/layout/layer.md +19 -0
  229. package/content/layout/position.md +22 -0
  230. package/content/layout/row.md +23 -0
  231. package/content/layout/safe-area.md +20 -0
  232. package/content/layout/scroll.md +21 -0
  233. package/content/layout/spacing.md +22 -0
  234. package/content/layout/split.md +19 -0
  235. package/content/layout/stack.md +19 -0
  236. package/content/layout/surface.md +23 -0
  237. package/content/layout/text.md +22 -0
  238. package/content/patterns/app-shell.md +34 -0
  239. package/content/patterns/dashboard.md +36 -0
  240. package/content/patterns/data-screen.md +30 -0
  241. package/content/patterns/detail-page.md +31 -0
  242. package/content/patterns/docs.md +34 -0
  243. package/content/patterns/focus-task.md +34 -0
  244. package/content/patterns/landing.md +35 -0
  245. package/content/patterns/list-page.md +32 -0
  246. package/content/patterns/mobile.md +31 -0
  247. package/content/patterns/settings-page.md +33 -0
  248. package/content/patterns/workspace.md +32 -0
  249. package/dist/cli/apps-typecheck.test.d.ts +11 -0
  250. package/dist/cli/docs.d.ts +2 -0
  251. package/dist/cli/docs.mjs +10961 -0
  252. package/dist/cli/home-flash.test.d.ts +1 -0
  253. package/dist/{components → client/components}/Accordion/Accordion.d.ts +1 -1
  254. package/dist/client/components/ActionSheet/ActionSheet.d.ts +37 -0
  255. package/dist/{components → client/components}/Affix/Affix.d.ts +1 -1
  256. package/dist/{components → client/components}/AiChat/AiChat.d.ts +3 -3
  257. package/dist/{components → client/components}/Alert/Alert.d.ts +1 -1
  258. package/dist/{components → client/components}/AlertGroup/AlertGroup.d.ts +1 -1
  259. package/dist/{components → client/components}/Anchor/Anchor.d.ts +1 -1
  260. package/dist/client/components/AppShell/AppShell.d.ts +55 -0
  261. package/dist/{components → client/components}/ApprovalCard/ApprovalCard.d.ts +2 -2
  262. package/dist/{components → client/components}/AspectRatio/AspectRatio.d.ts +1 -1
  263. package/dist/{components → client/components}/AuthPage/AuthPage.d.ts +2 -2
  264. package/dist/{components → client/components}/AutoComplete/AutoComplete.d.ts +1 -1
  265. package/dist/{components → client/components}/Avatar/Avatar.d.ts +1 -1
  266. package/dist/{components → client/components}/AvatarGroup/AvatarGroup.d.ts +1 -1
  267. package/dist/{components → client/components}/BackTop/BackTop.d.ts +1 -1
  268. package/dist/{components → client/components}/Badge/Badge.d.ts +1 -1
  269. package/dist/{components → client/components}/Breadcrumb/Breadcrumb.d.ts +1 -1
  270. package/dist/{components → client/components}/Button/Button.d.ts +1 -1
  271. package/dist/{components → client/components}/Calendar/Calendar.d.ts +1 -1
  272. package/dist/{components → client/components}/Card/Card.d.ts +1 -1
  273. package/dist/{components → client/components}/Carousel/Carousel.d.ts +1 -1
  274. package/dist/{components → client/components}/Cascader/Cascader.d.ts +1 -1
  275. package/dist/{components → client/components}/Chart/Chart.d.ts +1 -1
  276. package/dist/{components → client/components}/Chart/chart-utils.d.ts +5 -1
  277. package/dist/{components → client/components}/ChatInput/ChatInput.d.ts +7 -7
  278. package/dist/{components → client/components}/Checkbox/Checkbox.d.ts +1 -1
  279. package/dist/{components → client/components}/CheckboxGroup/CheckboxGroup.d.ts +1 -1
  280. package/dist/{components → client/components}/CitationCard/CitationCard.d.ts +3 -3
  281. package/dist/{components → client/components}/CodeBlock/CodeBlock.d.ts +1 -1
  282. package/dist/client/components/CodeEditor/CodeEditor.d.ts +18 -0
  283. package/dist/{components → client/components}/Collapse/Collapse.d.ts +1 -1
  284. package/dist/{components → client/components}/ColorPicker/ColorPicker.d.ts +1 -1
  285. package/dist/{components → client/components}/Command/Command.d.ts +1 -1
  286. package/dist/{components → client/components}/Confirm/Confirm.d.ts +2 -7
  287. package/dist/{components → client/components}/ContextMenu/ContextMenu.d.ts +1 -1
  288. package/dist/{components → client/components}/CopyButton/CopyButton.d.ts +1 -1
  289. package/dist/{components → client/components}/DatePicker/DatePicker.d.ts +2 -2
  290. package/dist/{components → client/components}/Descriptions/Descriptions.d.ts +1 -1
  291. package/dist/{components → client/components}/DiffView/DiffView.d.ts +1 -1
  292. package/dist/{components → client/components}/Divider/Divider.d.ts +1 -1
  293. package/dist/{components → client/components}/Drawer/Drawer.d.ts +1 -1
  294. package/dist/{components → client/components}/Dropdown/Dropdown.d.ts +1 -1
  295. package/dist/{components → client/components}/Editor/Editor.d.ts +1 -1
  296. package/dist/{components → client/components}/Editor/tools/toolbar.d.ts +1 -1
  297. package/dist/{components → client/components}/EmptyState/EmptyState.d.ts +1 -1
  298. package/dist/client/components/ExportCSV/ExportCSV.d.ts +30 -0
  299. package/dist/{components → client/components}/Field/Field.d.ts +1 -1
  300. package/dist/{components → client/components}/FilePreview/FilePreview.d.ts +1 -1
  301. package/dist/client/components/FileTree/FileTree.d.ts +57 -0
  302. package/dist/{components → client/components}/FileUpload/FileUpload.d.ts +1 -1
  303. package/dist/{components → client/components}/FloatButton/FloatButton.d.ts +1 -1
  304. package/dist/{components → client/components}/Form/Form.d.ts +1 -1
  305. package/dist/{components → client/components}/Grid/Grid.d.ts +1 -1
  306. package/dist/{components → client/components}/Highlight/Highlight.d.ts +1 -1
  307. package/dist/{components → client/components}/HoverCard/HoverCard.d.ts +5 -4
  308. package/dist/{components → client/components}/Icon/Icon.d.ts +2 -2
  309. package/dist/client/components/ImageCropper/ImageCropper.d.ts +17 -0
  310. package/dist/{components → client/components}/Img/Img.d.ts +1 -1
  311. package/dist/{components → client/components}/InView/InView.d.ts +1 -1
  312. package/dist/{components → client/components}/InfiniteScroll/InfiniteScroll.d.ts +1 -1
  313. package/dist/{components → client/components}/Input/Input.d.ts +1 -1
  314. package/dist/{components → client/components}/InputNumber/InputNumber.d.ts +1 -1
  315. package/dist/{components → client/components}/JSONViewer/JSONViewer.d.ts +1 -1
  316. package/dist/{components → client/components}/JsonSchemaForm/JsonSchemaForm.d.ts +3 -3
  317. package/dist/{components → client/components}/Kanban/Kanban.d.ts +1 -1
  318. package/dist/{components → client/components}/Label/Label.d.ts +1 -1
  319. package/dist/{components → client/components}/Layout/Layout.d.ts +1 -1
  320. package/dist/{components → client/components}/Link/Link.d.ts +1 -1
  321. package/dist/{components → client/components}/List/List.d.ts +1 -1
  322. package/dist/{components → client/components}/Loading/Loading.d.ts +1 -1
  323. package/dist/{components → client/components}/LogViewer/LogViewer.d.ts +1 -1
  324. package/dist/{components → client/components}/Markdown/Markdown.d.ts +1 -1
  325. package/dist/client/components/MarkdownEditor/MarkdownEditor.d.ts +18 -0
  326. package/dist/client/components/Math/Math.d.ts +15 -0
  327. package/dist/{components → client/components}/Mentions/Mentions.d.ts +1 -1
  328. package/dist/{components → client/components}/Menu/Menu.d.ts +1 -1
  329. package/dist/{components → client/components}/Menubar/Menubar.d.ts +1 -1
  330. package/dist/{components → client/components}/MessageBubble/MessageBubble.d.ts +1 -1
  331. package/dist/{components → client/components}/Modal/Modal.d.ts +1 -1
  332. package/dist/{components → client/components}/NavMenu/NavMenu.d.ts +2 -2
  333. package/dist/{components → client/components}/Notification/Notification.d.ts +7 -2
  334. package/dist/{components → client/components}/PageHeader/PageHeader.d.ts +1 -1
  335. package/dist/{components → client/components}/Pagination/Pagination.d.ts +1 -1
  336. package/dist/{components → client/components}/PasswordInput/PasswordInput.d.ts +1 -1
  337. package/dist/{components → client/components}/PinInput/PinInput.d.ts +1 -1
  338. package/dist/{components → client/components}/Pipeline/Pipeline.d.ts +1 -1
  339. package/dist/{components → client/components}/Popconfirm/Popconfirm.d.ts +2 -2
  340. package/dist/{components → client/components}/Popover/Popover.d.ts +5 -4
  341. package/dist/{components → client/components}/ProgressBar/ProgressBar.d.ts +1 -1
  342. package/dist/client/components/PromptTemplate/PromptTemplate.d.ts +37 -0
  343. package/dist/{components → client/components}/QRCode/QRCode.d.ts +1 -1
  344. package/dist/{components → client/components}/RadioGroup/RadioGroup.d.ts +1 -1
  345. package/dist/{components → client/components}/Rate/Rate.d.ts +1 -1
  346. package/dist/{components → client/components}/ReasoningBlock/ReasoningBlock.d.ts +3 -3
  347. package/dist/client/components/RelationGraph/RelationGraph.d.ts +59 -0
  348. package/dist/{components → client/components}/Resizable/Resizable.d.ts +1 -1
  349. package/dist/{components → client/components}/Result/Result.d.ts +1 -1
  350. package/dist/{components → client/components}/Scrollbar/Scrollbar.d.ts +1 -1
  351. package/dist/{components → client/components}/SearchInput/SearchInput.d.ts +1 -1
  352. package/dist/{components → client/components}/SegmentedControl/SegmentedControl.d.ts +1 -1
  353. package/dist/{components → client/components}/Select/Select.d.ts +1 -1
  354. package/dist/{components → client/components}/SessionList/SessionList.d.ts +3 -3
  355. package/dist/{components → client/components}/SheetGrid/SheetGrid.d.ts +1 -1
  356. package/dist/{components → client/components}/Skeleton/Skeleton.d.ts +1 -1
  357. package/dist/{components → client/components}/SlideCanvas/SlideCanvas.d.ts +1 -1
  358. package/dist/client/components/Slider/Slider.d.ts +27 -0
  359. package/dist/client/components/SortableList/SortableList.d.ts +23 -0
  360. package/dist/{components → client/components}/Space/Space.d.ts +1 -1
  361. package/dist/{components → client/components}/Sparkline/Sparkline.d.ts +1 -1
  362. package/dist/{components → client/components}/StatCard/StatCard.d.ts +1 -1
  363. package/dist/{components → client/components}/Steps/Steps.d.ts +1 -1
  364. package/dist/{components → client/components}/Switch/Switch.d.ts +1 -1
  365. package/dist/client/components/TabBar/TabBar.d.ts +35 -0
  366. package/dist/{components → client/components}/Table/Table.d.ts +7 -1
  367. package/dist/client/components/Tabs/Tabs.d.ts +22 -0
  368. package/dist/{components → client/components}/Tag/Tag.d.ts +1 -1
  369. package/dist/{components → client/components}/TagsInput/TagsInput.d.ts +1 -1
  370. package/dist/{components → client/components}/Textarea/Textarea.d.ts +1 -1
  371. package/dist/{components → client/components}/ThemeSwitch/ThemeSwitch.d.ts +1 -1
  372. package/dist/{components → client/components}/Timeline/Timeline.d.ts +1 -1
  373. package/dist/{components → client/components}/Toast/Toast.d.ts +1 -1
  374. package/dist/{components → client/components}/ToggleGroup/ToggleGroup.d.ts +1 -1
  375. package/dist/{components → client/components}/ToolCallCard/ToolCallCard.d.ts +2 -2
  376. package/dist/{components → client/components}/Tooltip/Tooltip.d.ts +4 -3
  377. package/dist/{components → client/components}/Tour/Tour.d.ts +1 -1
  378. package/dist/{components → client/components}/Transfer/Transfer.d.ts +1 -1
  379. package/dist/{components → client/components}/Tree/Tree.d.ts +5 -1
  380. package/dist/{components → client/components}/TreeSelect/TreeSelect.d.ts +5 -1
  381. package/dist/{components → client/components}/Typography/Typography.d.ts +1 -1
  382. package/dist/client/components/VideoPlayer/VideoPlayer.d.ts +25 -0
  383. package/dist/{components → client/components}/VirtualList/VirtualList.d.ts +1 -1
  384. package/dist/{components → client/components}/VirtualTable/VirtualTable.d.ts +1 -1
  385. package/dist/{components → client/components}/Watermark/Watermark.d.ts +1 -1
  386. package/dist/client/components/Wave/Wave.d.ts +15 -0
  387. package/dist/{components → client/components}/index.d.ts +44 -5
  388. package/dist/client/components/index.js +57 -0
  389. package/dist/{components → client/components}/style.css +1081 -98
  390. package/dist/{layout → client/layout}/weifuwu-layout.css +60 -6
  391. package/dist/{office → client/office}/xml-serialize.d.ts +1 -1
  392. package/dist/client/vdom/browser/Browser.d.ts +73 -0
  393. package/dist/client/vdom/browser/create-client-browser.d.ts +11 -0
  394. package/dist/client/vdom/commands.d.ts +19 -0
  395. package/dist/client/vdom/context/UIContext.d.ts +61 -0
  396. package/dist/client/vdom/context/data.d.ts +17 -0
  397. package/dist/client/vdom/core/async-guard.d.ts +20 -0
  398. package/dist/client/vdom/core/build.d.ts +36 -0
  399. package/dist/client/vdom/core/command/create.d.ts +25 -0
  400. package/dist/client/vdom/core/command/index.d.ts +15 -0
  401. package/dist/client/vdom/core/command/insert.d.ts +32 -0
  402. package/dist/client/vdom/core/command/lifecycle.d.ts +47 -0
  403. package/dist/client/vdom/core/command/props.d.ts +22 -0
  404. package/dist/client/vdom/core/diff/attrs.d.ts +10 -0
  405. package/dist/client/vdom/core/diff/children.d.ts +29 -0
  406. package/dist/client/vdom/core/diff/cleanup.d.ts +44 -0
  407. package/dist/client/vdom/core/diff/index.d.ts +22 -0
  408. package/dist/client/vdom/core/diff/output.d.ts +30 -0
  409. package/dist/client/vdom/core/diff/same.d.ts +22 -0
  410. package/dist/client/vdom/core/field/attributes.d.ts +15 -0
  411. package/dist/client/vdom/core/field/events.d.ts +54 -0
  412. package/dist/client/vdom/core/field/index.d.ts +19 -0
  413. package/dist/client/vdom/core/field/key.d.ts +16 -0
  414. package/dist/client/vdom/core/field/props.d.ts +15 -0
  415. package/dist/client/vdom/core/field/ref.d.ts +38 -0
  416. package/dist/client/vdom/core/field/style.d.ts +17 -0
  417. package/dist/client/vdom/core/node/children.d.ts +20 -0
  418. package/dist/client/vdom/core/node/component.d.ts +93 -0
  419. package/dist/client/vdom/core/node/fragment.d.ts +14 -0
  420. package/dist/client/vdom/core/node/hole.d.ts +22 -0
  421. package/dist/client/vdom/core/node/index.d.ts +35 -0
  422. package/dist/client/vdom/core/node/keyed.d.ts +64 -0
  423. package/dist/client/vdom/core/node/native.d.ts +20 -0
  424. package/dist/client/vdom/core/node/portal.d.ts +11 -0
  425. package/dist/client/vdom/core/patch/fields.d.ts +15 -0
  426. package/dist/client/vdom/core/patch/index.d.ts +51 -0
  427. package/dist/client/vdom/core/patch/processors.d.ts +75 -0
  428. package/dist/client/vdom/core/patch/state-machine.d.ts +38 -0
  429. package/dist/client/vdom/core/patch/verify.d.ts +17 -0
  430. package/dist/client/vdom/core/router.d.ts +31 -0
  431. package/dist/client/vdom/core/serve.d.ts +75 -0
  432. package/dist/client/vdom/core/ssr/absorb.d.ts +53 -0
  433. package/dist/client/vdom/core/ssr/html.d.ts +32 -0
  434. package/dist/client/vdom/core/ssr/index.d.ts +25 -0
  435. package/dist/client/vdom/core/transform/component.d.ts +23 -0
  436. package/dist/client/vdom/core/transform/element.d.ts +21 -0
  437. package/dist/client/vdom/core/transform/fragment.d.ts +21 -0
  438. package/dist/client/vdom/core/transform/hole.d.ts +13 -0
  439. package/dist/client/vdom/core/transform/index.d.ts +46 -0
  440. package/dist/client/vdom/core/transform/states.d.ts +22 -0
  441. package/dist/client/vdom/core/transform/table.d.ts +28 -0
  442. package/dist/client/vdom/core/transform/text.d.ts +10 -0
  443. package/dist/client/vdom/core/vnode.d.ts +45 -0
  444. package/dist/client/vdom/dev/effect-guard.d.ts +8 -0
  445. package/dist/client/vdom/hooks/ai-stream.d.ts +46 -0
  446. package/dist/client/vdom/hooks/basic.d.ts +42 -0
  447. package/dist/client/vdom/hooks/chat.d.ts +91 -0
  448. package/dist/client/vdom/hooks/controlled.d.ts +27 -0
  449. package/dist/client/vdom/hooks/drag-media.d.ts +52 -0
  450. package/dist/client/vdom/hooks/env.d.ts +119 -0
  451. package/dist/client/vdom/hooks/input.d.ts +43 -0
  452. package/dist/client/vdom/hooks/observe.d.ts +60 -0
  453. package/dist/client/vdom/hooks/popup-manager.d.ts +92 -0
  454. package/dist/client/vdom/hooks/popup.d.ts +52 -0
  455. package/dist/client/vdom/hooks/stable.d.ts +45 -0
  456. package/dist/client/vdom/index.d.ts +67 -0
  457. package/dist/client/vdom/index.js +8 -0
  458. package/dist/client/vdom/jsx-runtime.d.ts +28 -0
  459. package/dist/client/vdom/jsx-runtime.js +1 -0
  460. package/dist/client/vdom/middlewares/api.d.ts +38 -0
  461. package/dist/client/vdom/middlewares/auth-i18n.d.ts +66 -0
  462. package/dist/client/vdom/middlewares/ws.d.ts +37 -0
  463. package/dist/client/vdom/store.d.ts +49 -0
  464. package/dist/client/vdom/testing.d.ts +46 -0
  465. package/dist/client/vdom/testing.js +2 -0
  466. package/dist/dev/index.d.ts +12 -0
  467. package/dist/dev/index.js +4 -4
  468. package/dist/{ai → server/ai}/contracts.d.ts +1 -1
  469. package/dist/{ai → server/ai}/index.d.ts +2 -2
  470. package/dist/{ai → server/ai}/types.d.ts +1 -1
  471. package/dist/{core → server/core}/router.d.ts +2 -4
  472. package/dist/{db → server/db}/contracts.d.ts +1 -1
  473. package/dist/server/db/postgres-server.d.ts +37 -0
  474. package/dist/server/db/redis-server.d.ts +32 -0
  475. package/dist/server/db/server.d.ts +30 -0
  476. package/dist/server/db/test-servers.d.ts +21 -0
  477. package/dist/{email → server/email}/contracts.d.ts +1 -1
  478. package/dist/{index.js → server/index.js} +3145 -2487
  479. package/dist/{ui → server/ui}/index.d.ts +2 -2
  480. package/dist/{user → server/user}/token.d.ts +1 -1
  481. package/dist/shared/router/trie.d.ts +61 -0
  482. package/docs/components-map.md +5 -5
  483. package/docs/style-guide.md +14 -2
  484. package/examples/apps/admin/README.md +23 -0
  485. package/examples/apps/admin/api.ts +27 -0
  486. package/examples/apps/admin/app.tsx +144 -0
  487. package/examples/apps/admin/main.tsx +8 -0
  488. package/examples/apps/admin/server.ts +37 -0
  489. package/examples/apps/auth/README.md +23 -0
  490. package/examples/apps/auth/api.ts +49 -0
  491. package/examples/apps/auth/app.tsx +137 -0
  492. package/examples/apps/auth/main.tsx +8 -0
  493. package/examples/apps/auth/server.ts +37 -0
  494. package/examples/apps/multi/README.md +23 -0
  495. package/examples/apps/multi/app.tsx +83 -0
  496. package/examples/apps/multi/main.tsx +8 -0
  497. package/examples/apps/multi/server.ts +33 -0
  498. package/examples/apps/todo/README.md +23 -0
  499. package/examples/apps/todo/api.ts +26 -0
  500. package/examples/apps/todo/app.tsx +128 -0
  501. package/examples/apps/todo/main.tsx +9 -0
  502. package/examples/apps/todo/server.ts +39 -0
  503. package/examples/hello-world/README.md +9 -0
  504. package/examples/hello-world/client.ts +14 -0
  505. package/examples/hello-world/routes.tsx +26 -0
  506. package/examples/hello-world/server.ts +46 -0
  507. package/examples/patterns/AppShell.tsx +224 -0
  508. package/examples/patterns/Dashboard.tsx +153 -0
  509. package/examples/patterns/DataScreen.tsx +104 -0
  510. package/examples/patterns/DetailPage.tsx +79 -0
  511. package/examples/patterns/Docs.tsx +105 -0
  512. package/examples/patterns/FocusTask.tsx +67 -0
  513. package/examples/patterns/Landing.tsx +90 -0
  514. package/examples/patterns/ListPage.tsx +77 -0
  515. package/examples/patterns/Mobile.tsx +154 -0
  516. package/examples/patterns/SettingsPage.tsx +98 -0
  517. package/examples/patterns/SplitWorkspace.tsx +113 -0
  518. package/package.json +61 -29
  519. package/dist/components/Slider/Slider.d.ts +0 -19
  520. package/dist/components/Tabs/Tabs.d.ts +0 -12
  521. package/dist/components/index.js +0 -55
  522. package/dist/ui-dom/Confirm.d.ts +0 -8
  523. package/dist/ui-dom/Notification.d.ts +0 -8
  524. package/dist/ui-dom/Toast.d.ts +0 -8
  525. package/dist/ui-dom/ai.d.ts +0 -59
  526. package/dist/ui-dom/browser.d.ts +0 -10
  527. package/dist/ui-dom/debug.d.ts +0 -21
  528. package/dist/ui-dom/hooks/chat.d.ts +0 -11
  529. package/dist/ui-dom/hooks/events.d.ts +0 -30
  530. package/dist/ui-dom/hooks/external.d.ts +0 -20
  531. package/dist/ui-dom/hooks/index.d.ts +0 -29
  532. package/dist/ui-dom/hooks/input.d.ts +0 -33
  533. package/dist/ui-dom/hooks/media.d.ts +0 -17
  534. package/dist/ui-dom/hooks/popup.d.ts +0 -30
  535. package/dist/ui-dom/hooks/stable.d.ts +0 -35
  536. package/dist/ui-dom/hooks/types.d.ts +0 -77
  537. package/dist/ui-dom/i18n.d.ts +0 -31
  538. package/dist/ui-dom/index.d.ts +0 -47
  539. package/dist/ui-dom/index.js +0 -41
  540. package/dist/ui-dom/jsx-runtime.d.ts +0 -4
  541. package/dist/ui-dom/jsx-runtime.js +0 -1
  542. package/dist/ui-dom/locale/en_US.d.ts +0 -69
  543. package/dist/ui-dom/locale/zh_CN.d.ts +0 -69
  544. package/dist/ui-dom/middleware/api.d.ts +0 -91
  545. package/dist/ui-dom/middleware/auth.d.ts +0 -30
  546. package/dist/ui-dom/middleware/ws.d.ts +0 -33
  547. package/dist/ui-dom/motion.d.ts +0 -8
  548. package/dist/ui-dom/popup-tracker.d.ts +0 -36
  549. package/dist/ui-dom/popup.d.ts +0 -42
  550. package/dist/ui-dom/store.d.ts +0 -24
  551. package/dist/ui-dom/testing.d.ts +0 -68
  552. package/dist/ui-dom/testing.js +0 -7
  553. package/dist/ui-dom/types.d.ts +0 -634
  554. package/dist/ui-dom/use-chat.d.ts +0 -95
  555. package/dist/ui-dom/vdom3/README.d.ts +0 -32
  556. package/dist/ui-dom/vdom3/app.d.ts +0 -20
  557. package/dist/ui-dom/vdom3/audit.d.ts +0 -29
  558. package/dist/ui-dom/vdom3/build.d.ts +0 -20
  559. package/dist/ui-dom/vdom3/commands.d.ts +0 -21
  560. package/dist/ui-dom/vdom3/comp-index.d.ts +0 -18
  561. package/dist/ui-dom/vdom3/delegate.d.ts +0 -53
  562. package/dist/ui-dom/vdom3/events.d.ts +0 -17
  563. package/dist/ui-dom/vdom3/index.d.ts +0 -42
  564. package/dist/ui-dom/vdom3/jsx.d.ts +0 -32
  565. package/dist/ui-dom/vdom3/record.d.ts +0 -16
  566. package/dist/ui-dom/vdom3/registry.d.ts +0 -30
  567. package/dist/ui-dom/vdom3/render.d.ts +0 -39
  568. package/dist/ui-dom/vdom3/replay.d.ts +0 -28
  569. package/dist/ui-dom/vdom3/root.d.ts +0 -24
  570. package/dist/ui-dom/vdom3/router.d.ts +0 -31
  571. package/dist/ui-dom/vdom3/scheduler.d.ts +0 -23
  572. package/dist/ui-dom/vdom3/ssr.d.ts +0 -27
  573. package/dist/ui-dom/vdom3/sync.d.ts +0 -22
  574. package/dist/ui-dom/vdom3/types.d.ts +0 -173
  575. package/dist/ui-dom/vdom3/ui.d.ts +0 -16
  576. package/dist/ui-dom/vdom3.js +0 -41
  577. package/dist/ui-dom/vnode.d.ts +0 -13
  578. /package/dist/{make-executable-schema.test.d.ts → cli/content-sync.test.d.ts} +0 -0
  579. /package/dist/{ui-dom/testing.test.d.ts → cli/docs-cli.test.d.ts} +0 -0
  580. /package/dist/{components → client/components}/CodeBlock/highlight.d.ts +0 -0
  581. /package/dist/{components → client/components}/DatePicker/calendar-utils.d.ts +0 -0
  582. /package/dist/{components → client/components}/DiffView/diff-utils.d.ts +0 -0
  583. /package/dist/{components → client/components}/Editor/edit-events.d.ts +0 -0
  584. /package/dist/{components → client/components}/Editor/model/apply.d.ts +0 -0
  585. /package/dist/{components → client/components}/Editor/model/diff.d.ts +0 -0
  586. /package/dist/{components → client/components}/Editor/model/dom.d.ts +0 -0
  587. /package/dist/{components → client/components}/Editor/model/history.d.ts +0 -0
  588. /package/dist/{components → client/components}/Editor/model/html.d.ts +0 -0
  589. /package/dist/{components → client/components}/Editor/model/inverse.d.ts +0 -0
  590. /package/dist/{components → client/components}/Editor/model/types.d.ts +0 -0
  591. /package/dist/{components → client/components}/Editor/tools/table.d.ts +0 -0
  592. /package/dist/{components → client/components}/Editor/tools/types.d.ts +0 -0
  593. /package/dist/{components → client/components}/FilePreview/markdown.d.ts +0 -0
  594. /package/dist/{components → client/components}/Markdown/parser.d.ts +0 -0
  595. /package/dist/{components → client/components}/OfficeEditor/ai/ai-bridge.d.ts +0 -0
  596. /package/dist/{components → client/components}/OfficeEditor/model/apply.d.ts +0 -0
  597. /package/dist/{components → client/components}/OfficeEditor/model/types.d.ts +0 -0
  598. /package/dist/{components → client/components}/Pipeline/dag-utils.d.ts +0 -0
  599. /package/dist/{components → client/components}/QRCode/qr.d.ts +0 -0
  600. /package/dist/{components → client/components}/Sparkline/sparkline-utils.d.ts +0 -0
  601. /package/dist/{office → client/office}/docx.d.ts +0 -0
  602. /package/dist/{office → client/office}/pptx.d.ts +0 -0
  603. /package/dist/{office → client/office}/xlsx.d.ts +0 -0
  604. /package/dist/{office → client/office}/xml.d.ts +0 -0
  605. /package/dist/{office → client/office}/zip.d.ts +0 -0
  606. /package/dist/{ai → server/ai}/agent.d.ts +0 -0
  607. /package/dist/{ai → server/ai}/client.d.ts +0 -0
  608. /package/dist/{ai → server/ai}/sse.d.ts +0 -0
  609. /package/dist/{core → server/core}/serve.d.ts +0 -0
  610. /package/dist/{core → server/core}/ws.d.ts +0 -0
  611. /package/dist/{db → server/db}/errors.d.ts +0 -0
  612. /package/dist/{db → server/db}/memory-redis.d.ts +0 -0
  613. /package/dist/{db → server/db}/memory-sql.d.ts +0 -0
  614. /package/dist/{db → server/db}/postgres/connection.d.ts +0 -0
  615. /package/dist/{db → server/db}/postgres/pool.d.ts +0 -0
  616. /package/dist/{db → server/db}/postgres/protocol.d.ts +0 -0
  617. /package/dist/{db → server/db}/postgres/schema.d.ts +0 -0
  618. /package/dist/{db → server/db}/query-builder.d.ts +0 -0
  619. /package/dist/{db → server/db}/query.d.ts +0 -0
  620. /package/dist/{db → server/db}/redis/client.d.ts +0 -0
  621. /package/dist/{db → server/db}/redis/commands.d.ts +0 -0
  622. /package/dist/{db → server/db}/redis/connection.d.ts +0 -0
  623. /package/dist/{db → server/db}/redis/pipeline.d.ts +0 -0
  624. /package/dist/{db → server/db}/redis/pool.d.ts +0 -0
  625. /package/dist/{db → server/db}/redis/resp.d.ts +0 -0
  626. /package/dist/{db → server/db}/redis/subscriber.d.ts +0 -0
  627. /package/dist/{db → server/db}/sql-parser.d.ts +0 -0
  628. /package/dist/{email → server/email}/index.d.ts +0 -0
  629. /package/dist/{email → server/email}/smtp.d.ts +0 -0
  630. /package/dist/{graphql.d.ts → server/graphql.d.ts} +0 -0
  631. /package/dist/{index.d.ts → server/index.d.ts} +0 -0
  632. /package/dist/{make-executable-schema.d.ts → server/make-executable-schema.d.ts} +0 -0
  633. /package/dist/{messager → server/messager}/index.d.ts +0 -0
  634. /package/dist/{middleware → server/middleware}/cors.d.ts +0 -0
  635. /package/dist/{middleware → server/middleware}/rate-limit.d.ts +0 -0
  636. /package/dist/{middleware → server/middleware}/static.d.ts +0 -0
  637. /package/dist/{postgres → server/postgres}/client.d.ts +0 -0
  638. /package/dist/{postgres → server/postgres}/index.d.ts +0 -0
  639. /package/dist/{postgres → server/postgres}/types.d.ts +0 -0
  640. /package/dist/{queue → server/queue}/index.d.ts +0 -0
  641. /package/dist/{redis → server/redis}/client.d.ts +0 -0
  642. /package/dist/{redis → server/redis}/index.d.ts +0 -0
  643. /package/dist/{redis → server/redis}/types.d.ts +0 -0
  644. /package/dist/{request.d.ts → server/request.d.ts} +0 -0
  645. /package/dist/{response.d.ts → server/response.d.ts} +0 -0
  646. /package/dist/{scheduler → server/scheduler}/cron.d.ts +0 -0
  647. /package/dist/{scheduler → server/scheduler}/index.d.ts +0 -0
  648. /package/dist/{types.d.ts → server/types.d.ts} +0 -0
  649. /package/dist/{ui → server/ui}/html-safe.d.ts +0 -0
  650. /package/dist/{user → server/user}/index.d.ts +0 -0
  651. /package/dist/{user → server/user}/password.d.ts +0 -0
@@ -1,41 +0,0 @@
1
- function ae(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===ne?"app":e.props?.portalKey!=null?"portal":"frag":"native"}function ze(e){return Array.isArray(e)?e.flatMap(t=>ze(t)):[e]}function V(e){if(e.children!=null)return ze(e.children);let t=e.props?.children??[];return ze(t)}var q=Symbol("v3-fragment"),te=Symbol("v3-portal"),ne=Symbol("v3-app");function C(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 we(e,t,n){let o=t?{...t}:{};return delete o.key,{type:e,props:o,key:n??t?.key??null}}var vt=we;function bt(e,t,n){return we(e,t,n)}function ve(e,t){return{type:te,props:{children:Array.isArray(e)?e:[e],portalKey:t??"default"},key:t??null}}function D(){return{activeElement:()=>typeof document<"u"?document.activeElement:null,byId:e=>typeof document<"u"?document.getElementById(e):null,query:e=>typeof document<"u"?document.querySelector(e):null,queryAll:e=>typeof document<"u"?document.querySelectorAll(e):null,createElement:e=>typeof document<"u"?document.createElement(e):null,createElementNS:(e,t)=>typeof document<"u"?document.createElementNS(e,t):null,createDocumentFragment:()=>typeof document<"u"?document.createDocumentFragment():null,createComment:e=>typeof document<"u"?document.createComment(e):null,createTextNode:e=>typeof document<"u"?document.createTextNode(e):null,addEventListener:(e,t,n)=>{typeof window<"u"&&window.addEventListener(e,t,n)},removeEventListener:(e,t,n)=>{typeof window<"u"&&window.removeEventListener(e,t,n)},scrollTo:e=>{typeof window<"u"&&window.scrollTo(0,e)},matchMedia:e=>typeof window<"u"&&typeof window.matchMedia=="function"?window.matchMedia(e):null,visualViewport:()=>(typeof window<"u"?window:null)?.visualViewport??null,scrollingElement:()=>typeof document<"u"?document.scrollingElement:null,bodyElement:()=>typeof document<"u"?document.body:null,bodyAppend:e=>{typeof document<"u"&&document.body.appendChild(e)},bodyRemove:e=>{typeof document<"u"&&e.parentNode&&document.body.removeChild(e)},clearBody:()=>{typeof document<"u"&&(document.body.innerHTML="")},event:(e,t)=>{let n=typeof window<"u"?window:null,o=t&&(t.key||t.code)?"KeyboardEvent":t&&(t.clientX!==void 0||t.clientY!==void 0||t.pointerId!==void 0)?"PointerEvent":"Event";try{return new n[o](e,t)}catch{return new n.Event(e,t)}},dispatchEvent:(e,t)=>typeof e<"u"?e.dispatchEvent(t):!1,reload:()=>{typeof window<"u"&&window.location.reload()},navigate:e=>{typeof window>"u"||(window.history.pushState(null,"",e),window.dispatchEvent(new PopStateEvent("popstate",{state:null})))},downloadFile:(e,t,n="text/plain")=>{try{if(typeof document>"u"||typeof URL>"u"||!URL.createObjectURL)return!1;let o=new Blob([t],{type:n}),r=URL.createObjectURL(o),s=document.createElement("a");return s.href=r,s.download=e,document.body.appendChild(s),s.click(),document.body.removeChild(s),setTimeout(()=>URL.revokeObjectURL(r),1e3),!0}catch{return!1}},copyText:async e=>{let t=typeof window<"u"?window:null;if(t?.navigator?.clipboard?.writeText)try{return await t.navigator.clipboard.writeText(e),!0}catch{}try{if(typeof document>"u")return!1;let n=document.createElement("textarea");n.value=e,n.style.position="fixed",n.style.opacity="0",document.body.appendChild(n),n.select();let o=document.execCommand("copy");return document.body.removeChild(n),o}catch{return!1}},execCommand:(e,t)=>typeof document<"u"?document.execCommand(e,!1,t):!1,queryCommandState:e=>typeof document<"u"?document.queryCommandState(e):!1,queryCommandValue:e=>typeof document<"u"?document.queryCommandValue(e):"",selectionText:()=>typeof window<"u"?window.getSelection?.()?.toString()??null:null,getSelection:()=>typeof window<"u"?window.getSelection():null,viewportHeight:()=>typeof window<"u"?window.innerHeight:0,viewportWidth:()=>typeof window<"u"?window.innerWidth:0,pathname:()=>typeof window<"u"?window.location.pathname:"",createTreeWalker:(e,t)=>typeof document<"u"?document.createTreeWalker(e,t??NodeFilter.SHOW_ALL):null,scrollTop:()=>{let e=typeof document<"u"?document:null,t=typeof window<"u"?window:null;return e?.scrollingElement?.scrollTop??t?.scrollY??0},hash:()=>typeof window<"u"?window.location?.hash??"":"",setHash:e=>{typeof window<"u"&&(window.location.hash=e)},timeout:(e,t)=>typeof window<"u"?window.setTimeout(e,t):0,onFormRestore:e=>typeof window>"u"||typeof document>"u"?()=>{}:(window.addEventListener("load",e,{once:!0}),window.addEventListener("pageshow",e),()=>{window.removeEventListener("load",e),window.removeEventListener("pageshow",e)}),rootElement:()=>typeof document<"u"?document.documentElement:null,storageGet:e=>{try{return typeof window<"u"?window.localStorage?.getItem(e)??null:null}catch{return null}},storageSet:(e,t)=>{try{typeof window<"u"&&window.localStorage?.setItem(e,t)}catch{}}}}function y(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 An(e){return`${e.entity}:${e.action}`}function wt(e=2e4,t){let n=[],o=0,r=0,s=0,a=!1,l=t?.watermark??.8,u=new Set,i=f=>n[(o+f)%e],d=(f,b)=>{n[(o+f)%e]=b},c=(f,b)=>{r<e?(d(r,f),r++):(d(0,f),o=(o+1)%e,b||(s++,(s%64===1||s===1)&&c(y("stream","overflow",void 0,{capacity:e,count:s,dropped:`${f.entity}:${f.action}`,droppedTarget:f.target??null}),!0)))},p=null,m=0;return{setSession(){return p=`s${++m}`,p},currentSession(){return p},emit(f){p!=null&&f.session==null&&(f.session=p),c(f,!1),l>0&&!a&&r>=e*l&&(a=!0,c(y("stream","watermark",void 0,{usage:r,capacity:e,ratio:l}),!0));for(let b of u)try{b(f)}catch{}},subscribe(f,b){let w=typeof f=="function"?null:f,h=typeof f=="function"?f:b,k=g=>{if(w==null){h(g);return}(Array.isArray(w)?w:[w]).includes(g.entity)&&h(g)};return u.add(k),()=>{u.delete(k)}},size(){return r},capacity(){return e},overflowCount(){return s},events(){let f=new Array(r);for(let b=0;b<r;b++)f[b]=i(b);return f},eventsBySession(f){return this.events().filter(b=>b.session===f)},inverse(f){switch(f.entity+":"+f.action){case"node:insert":return y("node","remove",f.target,{parent:f.payload?.parent});case"node:remove":return null;case"prop:update":return y("prop","update",f.target,{key:f.payload?.key,value:f.payload?.prev,prev:f.payload?.value});case"text:update":return y("text","update",f.target,{value:f.payload?.prev,prev:f.payload?.value});case"node:move":return null;default:return null}},reset(){o=0,r=0,s=0,a=!1}}}var v=wt();if(typeof globalThis<"u"){let e=globalThis;e.__wf_tail||(e.__wf_tail=(t=200,n)=>{let o=v.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=v.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)=>v.events().slice(-t),e.__wf_comp=t=>v.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 _n=0;function oe(){return`n${++_n}`}function Be(e){if(!e)return 0;let t=0;for(let n of G.values())n.has(e)&&t++;return t}var G=new Map,Ge=new Set,xe=new Map,ke=new Map,Fe=new Map,qe=new Map,Je={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"},On={focusin:"focus",focusout:"blur",mouseover:"mouseenter",mouseout:"mouseleave"},Rn=new Set(["error","load","loadstart","loadend","abort","unload","resize","message"]),Hn=new Set(["input","change","compositionstart","compositionend"]);function kt(e,t,n,o=!1){let r=G.get(t);r||(r=new Map,G.set(t,r)),r.set(e,{handler:n,once:o})}function Tt(e,t){G.get(t)?.delete(e)&&v.emit(y("event","unbind",e,{event:t}))}function Te(e){for(let[t,n]of G)n.delete(e)&&v.emit(y("event","unbind",e,{event:t}))}function J(e,t,n,o=!1){let r=e.getAttribute("data-v3-id");if(!r)return()=>{};kt(r,t,n,o);let s=Xe(e);return s&&Ye(s,t),()=>Tt(r,t)}function Nt(e,t){let n=Xe(e);if(n){for(let[o,r]of Object.entries(t))if(typeof r=="function"&&/^on[A-Z]/.test(o)){let s=o.slice(2).toLowerCase(),a=Je[s]??s;xe.get(n)?.has(a)||Ye(n,s)}}}function re(e){Ge.add(e),In()}var Et=!1,Ke=0,Ee=[];function xt(){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 In(){if(Et||(Et=!0,typeof document>"u"))return;let e=()=>{Ke||(Ke=requestAnimationFrame(()=>{Ke=0;try{let{target:o,text:r}=xt();if(!r)return;v.emit(y("text","select",void 0,{target:o,length:r.length,sample:r.slice(0,40)}))}catch{}}))};Ee.push(A(document,"selectionchange",e));let t=o=>{let{target:r,text:s}=xt(),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;v.emit(y("text",o.type,void 0,{target:r,length:s.length,sample:s}))}catch{}};Ee.push(A(document,"copy",n)),Ee.push(A(document,"cut",n)),Ee.push(A(document,"paste",n))}function Un(e){Ge.delete(e),xe.delete(e);let t=ke.get(e);if(t){for(let[n,o]of t)e.removeEventListener(n,o);ke.delete(e)}}function Xe(e){let t=e;for(;t;){if(t.nodeType===1&&Ge.has(t))return t;t=t.parentNode}return null}function Ye(e,t){let n=Je[t]??t,o=xe.get(e)??new Set;if(o.has(n))return;o.add(n),xe.set(e,o);let r=u=>Dn(u),s=Rn.has(n);e.addEventListener(n,r,s?{capture:!0}:void 0);let a=ke.get(e)??new Map;a.set(n,r),ke.set(e,a);let l=e.hasAttribute("data-wf-portal-key")?`portal:${e.getAttribute("data-wf-portal-key")}`:"root";v.emit(y("event","bind",l,{event:n,delegated:!0}))}function A(e,t,n,o){let r=Je[t]??t,s=Fe.get(r);s||(s=new Set,Fe.set(r,s)),s.add(n);let a=qe.get(e)??new Map;if(!a.has(r)){let l=i=>{for(let d of Fe.get(r)??[])try{d(i)}catch{}},u=o?.capture?{capture:!0,passive:o?.passive??!1}:void 0;e.addEventListener(r,l,u),a.set(r,l),qe.set(e,a),v.emit(y("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&&qe.delete(e),v.emit(y("event","unbind",e===window?"window":"document",{event:r}))}}}function Ne(e,t,n,o){if(kt(e,t,n),o){let r=Xe(o);r&&Ye(r,t)}}function Dn(e){let t=e.target;t&&t.nodeType===3&&(t=t.parentElement);let n=[];G.has(e.type)&&n.push(e.type);let o=On[e.type];if(o&&o!==e.type&&G.has(o)&&n.push(o),n.length!==0)for(;t;){if(!t.hasAttribute?.("data-v3-id")){let s=t.closest?.("[data-v3-id]");if(s&&s!==t){t=s;continue}}let r=t.getAttribute?.("data-v3-id");if(r){for(let s of n){let a=G.get(s)?.get(r);if(a){try{Object.defineProperty(e,"currentTarget",{value:t,configurable:!0})}catch{}try{a.handler(e)}catch{}if(Hn.has(e.type)){let l=t?.value??null;v.emit(y("text","input",r,{event:e.type,value:typeof l=="string"?l.slice(0,100):null}))}if(a.once&&(G.get(s).delete(r),v.emit(y("event","unbind",r,{event:e.type}))),e.cancelBubble)break}}if(e.cancelBubble)break}t=t.parentElement}}function jn(e,t,n=400){v.emit(y("effect","animate",void 0,{target:e.getAttribute?.("data-v3-id")??null,ms:n}));let o=!1,r=()=>{o||(o=!0,s(),clearTimeout(l),t())},s=()=>{};e.getAttribute?.("data-v3-id")?s=J(e,"animationend",r,!0):e.addEventListener("animationend",r);let l=setTimeout(r,n)}function fe(e,t){return Object.assign(Object.create(e),t)}function Wn(e){let t={baseURL:e?.baseURL??"",headers:{"Content-Type":"application/json",...e?.headers}},n=e?.onRequest,o=e?.onResponse,r=e?.timeout??0;async function s(a,l,u,i,d=!1){let c=t.baseURL+l,p={method:a,headers:{...t.headers,...i?.headers}},m=e?.token?.();m&&!p.headers.Authorization&&(p.headers.Authorization=`Bearer ${m}`);let f=r>0,b=!!i?.signal,w=null,h=null;(f||b)&&(w=new AbortController,p.signal=w.signal,f&&(h=setTimeout(()=>w.abort(new Error("Request timed out")),r)),b&&i.signal.addEventListener("abort",()=>w.abort())),u!==void 0&&a!=="GET"&&a!=="HEAD"&&(p.body=JSON.stringify(u));let k={url:c,init:p};n&&(k=n(k));try{let g=await fetch(k.url,k.init);if(g.status===401&&await e?.onUnauthorized?.()&&!d)return s(a,l,u,i,!0);if(o)return o(g);if(!g.ok){let T=await g.text().catch(()=>"");throw new Qe(g.status,T||g.statusText)}let E=g.headers.get("content-length");if(g.status===204||E==="0")return;let S=(g.headers.get("content-type")||"").toLowerCase();return S.includes("application/json")||S.includes("json")?g.json():g.text()}finally{h&&clearTimeout(h)}}return a=>fe(a,{api:{get:(u,i)=>s("GET",u,void 0,i),post:(u,i,d)=>s("POST",u,i,d),put:(u,i,d)=>s("PUT",u,i,d),patch:(u,i,d)=>s("PATCH",u,i,d),delete:(u,i)=>s("DELETE",u,void 0,i)}})}var Qe=class extends Error{status;body;constructor(t,n){super(`API Error ${t}: ${n}`),this.name="ApiError",this.status=t,this.body=n}};function $n(e){try{let t=e.split(".");if(t.length!==3)return null;let n=t[1].replace(/-/g,"+").replace(/_/g,"/");return JSON.parse(atob(n))}catch{return null}}function zn(e){let t=$n(e);return t?.exp?t.exp*1e3-3e4<Date.now():!0}function Fn(e){let t=e?.storage??localStorage,n=e?.tokenKey??"weifuwu_token",o=e?.userKey??"weifuwu_user",r=e?.refreshTokenKey??"weifuwu_refresh",s=e?.refreshEndpoint??"/api/auth/refresh";return a=>{let l=t.getItem(n),u=t.getItem(o),i=null,d={token:l,user:u?JSON.parse(u):null,get isLoggedIn(){return this.token!==null},login(p,m,f){d.token=p,d.user=m,t.setItem(n,p),t.setItem(o,JSON.stringify(m)),f&&t.setItem(r,f)},logout(){d.token=null,d.user=null,t.removeItem(n),t.removeItem(o),t.removeItem(r)},setUser(p){d.user=p,t.setItem(o,JSON.stringify(p))},async refresh(){return i||(i=c().finally(()=>{i=null}),i)}};async function c(){let p=t.getItem(r);if(!p)return!1;let m=t.getItem(n);try{let f=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:p})});if(t.getItem(n)!==m)return!1;if(!f.ok)return d.logout(),!1;let b=await f.json();return t.getItem(n)!==m?!1:(d.token=b.token,t.setItem(n,b.token),b.refreshToken&&t.setItem(r,b.refreshToken),!0)}catch{return!1}}return l&&zn(l)&&d.refresh().catch(()=>{}),e?.onAuth?.(d),fe(a,{auth:d})}}function qn(e={}){let t=e.url??"/ws",n=e.reconnectInterval??3e3,o=e.maxReconnect??10,r=e.pingInterval??3e4,s=e.pingTimeout??1e4;return a=>{let l=new Set,u=null,i=0,d=null,c=null,p=null,m=!1,f=[],b=new Set,w=T=>{h.isConnected=T==="connected";let N=T==="disconnected"?{attempt:i+1,max:o}:void 0;for(let O of b)try{O(T,N)}catch{}},h={isConnected:!1,onMessage:T=>(l.add(T),()=>{l.delete(T)}),onStatusChange:T=>(b.add(T),queueMicrotask(()=>{try{T(h.isConnected?"connected":"connecting",{attempt:0,max:o})}catch{}}),()=>{b.delete(T)}),send:T=>{let N=JSON.stringify(T);try{u?.readyState===WebSocket.OPEN?u.send(N):f.push(N)}catch{f.push(N)}},_connect:k,close:()=>{m=!0,S(),u?.close(),u=null,f=[],h.isConnected=!1}};async function k(){if(!m)try{u=new WebSocket(t),u.onopen=()=>{h.isConnected=!0,i=0,w("connected");for(let T of f)u.send(T);f=[],g()},u.onmessage=T=>{try{let N=JSON.parse(T.data);for(let O of l)O(N)}catch{}E()},u.onclose=()=>{h.isConnected=!1,S(),w("disconnected"),!m&&i<o&&(i++,d=setTimeout(k,n*Math.min(i,5)))},u.onerror=()=>{u?.close()}}catch{m||(d=setTimeout(k,n))}}function g(){r<=0||(c=setInterval(()=>{u?.readyState===WebSocket.OPEN&&u.send(JSON.stringify({type:"ping"})),p=setTimeout(()=>{u?.close()},s)},r))}function E(){clearTimeout(p)}function S(){clearInterval(c),clearTimeout(p),clearTimeout(d)}return k(),fe(a,{ws:h})}}var Mt={components:{Button:{loading:"\u52A0\u8F7D\u4E2D..."},FileUpload:{placeholder:"\u70B9\u51FB\u6216\u62D6\u62FD\u4E0A\u4F20\u6587\u4EF6",supportedFormats:"\u652F\u6301\u683C\u5F0F: ",maxSize:"\u6700\u5927 ",remove:"\u5220\u9664"},Editor:{"ai-polish":"\u6DA6\u8272","ai-translate":"\u7FFB\u8BD1","ai-shorten":"\u7F29\u5199","ai-expand":"\u6269\u5199","ai-fix":"\u7EA0\u9519",generating:"\u751F\u6210\u4E2D\u2026",failed:"\u5931\u8D25",reject:"\u62D2\u7EDD",accept:"\u63A5\u53D7",retry:"\u91CD\u8BD5",linkTitle:"\u63D2\u5165\u94FE\u63A5",imageTitle:"\u63D2\u5165\u56FE\u7247"},Pagination:{ariaLabel:"\u5206\u9875"},ProgressBar:{ariaLabel:"\u8FDB\u5EA6"},Switch:{ariaLabel:"\u5207\u6362"},Breadcrumb:{ariaLabel:"\u9762\u5305\u5C51"},Modal:{ariaLabel:"\u5F39\u7A97",closeAria:"\u5173\u95ED"},Confirm:{confirmText:"\u786E\u5B9A",cancelText:"\u53D6\u6D88"},Drawer:{ariaLabel:"\u4FA7\u8FB9\u9762\u677F",closeAria:"\u5173\u95ED"},DatePicker:{w0:"\u65E5",w1:"\u4E00",w2:"\u4E8C",w3:"\u4E09",w4:"\u56DB",w5:"\u4E94",w6:"\u516D",hour:"\u65F6",minute:"\u5206",time:"\u65F6\u95F4",confirm:"\u786E\u5B9A",cancel:"\u53D6\u6D88",placeholder:"\u9009\u62E9\u65E5\u671F"}}};var Ct={components:{Editor:{"ai-polish":"Polish","ai-translate":"Translate","ai-shorten":"Shorten","ai-expand":"Expand","ai-fix":"Fix",generating:"Generating\u2026",failed:"Failed",reject:"Reject",accept:"Accept",retry:"Retry",linkTitle:"Insert link",imageTitle:"Insert image"},Button:{loading:"Loading..."},FileUpload:{placeholder:"Click or drag to upload",supportedFormats:"Supported formats: ",maxSize:"Max size: ",remove:"Remove"},Pagination:{ariaLabel:"Pagination"},ProgressBar:{ariaLabel:"Progress"},Switch:{ariaLabel:"Toggle"},Breadcrumb:{ariaLabel:"Breadcrumb"},Modal:{ariaLabel:"Dialog",closeAria:"Close"},Confirm:{confirmText:"OK",cancelText:"Cancel"},Drawer:{ariaLabel:"Panel",closeAria:"Close"},DatePicker:{w0:"Su",w1:"Mo",w2:"Tu",w3:"We",w4:"Th",w5:"Fr",w6:"Sa",hour:"Hour",minute:"Min",time:"Time",confirm:"OK",cancel:"Cancel",placeholder:"Pick a date"}}};var Me={"zh-CN":Mt,"en-US":Ct};function Vt(e){if(Me[e])return e;let t=e.split("-")[0];return Object.keys(Me).find(o=>o.startsWith(t))??"zh-CN"}function Kn(e={}){let{locale:t="zh-CN",messages:n={},components:o={}}=e,r=Vt(t),s=Me[r],a=St(s,n,o),l={locale:r,t:(u,i)=>a.messages?.[u]??i??u,setLocale:()=>{},components:a.components};return u=>{let i=u;return i.i18n=l,l.setLocale=d=>{let c=Vt(d),p=Me[c];p&&(a=St(p,n,o),l.locale=c,l.components=a.components,i.render?.(),i.ui?.render?.())},u}}function St(e,t,n){return{messages:{...e?.messages,...t},components:Bn(e?.components??{},n)}}function Bn(e,t){let n={...e};for(let o of Object.keys(t))typeof t[o]=="object"&&t[o]!==null&&typeof n[o]=="object"?n[o]={...n[o],...t[o]}:n[o]=t[o];return n}function Gn(e){let t={...e},n=new Set,o=()=>{for(let r of[...n])r()};return{state:t,subscribe(r){return n.add(r),()=>{n.delete(r)}},set(r){Object.assign(t,r),o()},update(r){r(t),o()},notify:o}}var Ze=new Map;function et(e){e._id&&Ze.set(e._id,e)}function Pt(e){Ze.delete(e)}function Lt(e){return Ze.get(e)??null}var tt=new Map;function Jn(e,t){tt.set(e,t)}function nt(e){return tt.get(e)??null}function Xn(){tt.clear()}function At(e,t){let n=e.selfId(),o;return n&&(o=t.subscribe(()=>e.render([n])),e.onUnmount(()=>o?.())),t}function ot(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 _t(e,t){let n=e.selfId(),o=ot(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 Ot(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 Rt(e,t,n){return r=>{r?t(r):n?.()}}function Ce(e){return typeof window<"u"&&!!window.matchMedia?.("(hover: hover)").matches}function rt(e){return typeof window<"u"&&!!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches}function Ht(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 d=e.onUnmount(c=>{c===i&&(u(),d())})}return{onPointerDown:d=>{s=d.clientX??0,a=d.clientY??0,l=d,u(),r=setTimeout(()=>{r=void 0,l&&n(l)},o)},onPointerUp:u,onPointerLeave:u,onPointerMove:d=>{let c=Math.abs((d.clientX??0)-s),p=Math.abs((d.clientY??0)-a);(c>10||p>10)&&u()},onContextMenu:d=>{d.preventDefault(),n(d)}}}function Ve(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=J(u,"animationend",r)):(a?.(),a=null,r=void 0)},sync:u=>(u?o="open":o==="open"&&(o="exit"),o)}}function It(e,t,n){let o=e.selfId(),r=rt(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:()=>{}},d=()=>{o?e.render([o]):e.render()},c=p=>{if(u=p,r){i.value=p,d();return}if(p===i.value)return;l&&cancelAnimationFrame(l);let m=i.value,f=performance.now(),b=w=>{let h=Math.min(1,(w-f)/s);i.value=Math.round(m+(p-m)*a(h)),h<1?(l=requestAnimationFrame(b),d()):(l=void 0,d())};l=requestAnimationFrame(b)};if(i.reset=p=>{p===u&&l||c(p)},o){let p=e.onUnmount(m=>{m===o&&(l&&(cancelAnimationFrame(l),l=void 0),p())})}return queueMicrotask(()=>c(t)),i}var Ut=D();function Dt(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 Se(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=Ut.viewportWidth(),d=Ut.viewportHeight(),c=e.top,p=e.left;return u.bottom>d-n&&(c=Math.max(n,c-(u.bottom-(d-n)))),u.top<n&&(c=Math.max(n,c+(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:c,left:p,width:e.width}}function st(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,Se(u,r.panel?.(),r.margin))},o}function jt(e,t){let n=e.selfId(),o=e.browser,r=Ce(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?Ve(e,{name:t.name}):null,d,c=!1,p=x=>{if(!i)return x?"open":"closed";let L=i.sync(x);return x&&t.lockScroll&&!c&&(Yn(),c=!0),L},m=x=>{l()||(a?t.onOpenChange?.(x):i?x?p(!0):u()&&p(!1):t.setOpen(x))},f=()=>{let x=t.placement;return typeof x=="function"?x():x??"bottom"},b=null,w=!1,h=st(e,{el:t.el??(()=>null),isOpen:()=>u(),compute:x=>{if(t.position){let L=t.position();return{top:L.y,left:L.x,width:L.width}}return Dt(x,f(),t.gap??6,t.center!==!1)},panel:()=>b,margin:t.margin??8}),k=x=>{if(t.closeOnOutside===!1||t.mask||!u())return;let L=x.target;if(!(L instanceof Node))return;let j=t.el?.()??null;j&&j.contains(L)||b&&b.contains(L)||m(!1)},g=x=>{t.closeOnEscape!==!1&&(x.key!=="Escape"||!u()||m(!1))},E=A(o,"mousedown",k),S=A(o,"keydown",g);if(n){let x=e.onUnmount(L=>{L===n&&(E(),S(),x())})}let T={},N=x=>typeof x=="function"?x():x??0,O=()=>N(t.openDelay),U=()=>N(t.closeDelay),P,_,kn=()=>{clearTimeout(P),clearTimeout(_),P=void 0,_=void 0},Tn=x=>{if(l())return;let L=x.currentTarget,j=x.relatedTarget;L.contains(j)||(clearTimeout(_),_=void 0,P=setTimeout(()=>{P=void 0,m(!0)},O()))},Nn=x=>{if(l())return;let L=x.currentTarget,j=x.relatedTarget;L.contains(j)||(clearTimeout(P),P=void 0,_=setTimeout(()=>{_=void 0,m(!1)},U()))},Mn=()=>{l()||(clearTimeout(_),_=void 0,P=setTimeout(()=>{P=void 0,m(!0)},O()))},Cn=()=>{l()||(clearTimeout(P),P=void 0,_=setTimeout(()=>{_=void 0,m(!1)},U()))},he=()=>s()==="hover";if(T.onMouseOver=x=>{he()&&Tn(x)},T.onMouseOut=x=>{he()&&Nn(x)},T.onClick=()=>{he()?r||m(!u()):s()==="click"&&m(!0)},T.onFocus=()=>{he()?Mn():s()==="focus"&&(clearTimeout(_),_=void 0,m(!0))},T.onBlur=()=>{he()?Cn():s()==="focus"&&(clearTimeout(P),P=void 0,_=setTimeout(()=>{_=void 0,m(!1)},U()))},s()==="longpress"){let x,L=0,j=0,ee=()=>{clearTimeout(x),x=void 0};T.onPointerDown=H=>{l()||(L=H.clientX??0,j=H.clientY??0,ee(),x=setTimeout(()=>{x=void 0,t.onTrigger?.({clientX:L,clientY:j}),m(!0)},t.longPressDuration??500))},T.onPointerUp=ee,T.onPointerLeave=ee,T.onPointerMove=H=>{let We=Math.abs((H.clientX??0)-L),$e=Math.abs((H.clientY??0)-j);(We>10||$e>10)&&ee()},T.onContextMenu=H=>{H.preventDefault(),t.onTrigger?.({clientX:H.clientX??0,clientY:H.clientY??0}),m(!0)}}if(T.onKeyDown=x=>{x.key==="Escape"&&t.closeOnEscape!==!1&&m(!1)},n){let x=e.onUnmount(L=>{L===n&&(kn(),x())})}let Vn=x=>{x?(b=x,J(x,"animationend",()=>h.refresh(),!0)):b=null},De=null,je=null,ht=x=>{Vn(x),je&&je(x),i?.ref(x),t.trapFocus&&(x?d=eo(x):(d?.(),d=void 0)),t.lockScroll&&!x&&c&&(Qn(),c=!1)};return{get open(){return u()},setOpen:m,get phase(){return i?i.phase:u()?"open":"closed"},sync:p,wrapProps:T,portal:(x,L="popover")=>{if(l())return null;if(!(i?i.phase!=="closed":u()))return w=!1,De=null,null;let ee=t.el?.()??null;(!w||ee!==De)&&(ee?h.refresh():queueMicrotask(()=>{u()&&h.refresh()}),w=!0,De=ee);let H=(x??C("span")).props??{};if(!x)return null;je=H.ref??null;let We=t.positioning==="none"?H.class??"":["wf-popup",H.class].filter(Boolean).join(" "),$e=t.positioning==="none"?{...H.style??{},position:"fixed"}:{...H.style??{},position:"fixed",top:`${h.top}px`,left:`${h.left}px`,...h.width!==void 0?{width:`${h.width}px`}:{},maxWidth:(()=>{let be=typeof t.width=="function"?t.width():t.width;return be!==void 0?`min(${be}px, calc(100vw - 32px))`:"calc(100vw - 32px)"})()},pe={...x,props:{...H,class:We,style:$e,ref:ht}};if(t.mask){let be=typeof t.mask=="object"?t.mask:C("div",{class:"wf-popup-mask","data-portal-mask":L,onClick:t.maskClosable===!1?void 0:()=>m(!1)}),Sn=t.maskCentered?C("div",{class:"wf-cover",style:{"--wf-z":"var(--wf-z-popover)",pointerEvents:"none"}},{...pe,props:{...pe.props,style:{...H.style??{},pointerEvents:"auto"},ref:ht}}):null,Pn=t.maskCentered?void 0:{...pe.props?.style??{},zIndex:"var(--wf-z-popover)"},Ln=t.maskCentered?Sn:{...pe,props:{...pe.props,style:Pn}};return ve([be,Ln],L)}return ve(pe,L)},refresh:()=>h.refresh()}}function Wt(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 ue=D(),le=0,$t="",zt="",Ft="",qt="",Pe=0;function Kt(){return typeof window<"u"&&typeof document<"u"}function Yn(){if(le++,v.emit(y("effect","lock",void 0,{depth:le})),le>1||!Kt())return;Pe=ue.scrollTop();let e=ue.bodyElement();$t=e.style.overflow,zt=e.style.position,Ft=e.style.top,qt=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=`-${Pe}px`,e.style.width="100%")}function Qn(){if(le===0||(le--,v.emit(y("effect","unlock",void 0,{depth:le})),le>0)||!Kt())return;let e=ue.bodyElement();e.style.overflow=$t,e.style.position=zt,e.style.top=Ft,e.style.width=qt,Pe>0&&ue.scrollTo(Pe)}var Zn='a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';function eo(e){let t;return queueMicrotask(()=>{let n=e.querySelectorAll(Zn);if(n.length===0)return;let o=n[0],r=n[n.length-1],s=u=>{u.key==="Tab"&&(u.shiftKey&&ue.activeElement()===o?(u.preventDefault(),r.focus()):!u.shiftKey&&ue.activeElement()===r&&(u.preventDefault(),o.focus()))},a=ue.activeElement();v.emit(y("effect","focus",void 0,{mode:"trap-start"})),o.focus();let l=A(e,"keydown",s);t=()=>{l(),v.emit(y("effect","focus",void 0,{mode:"restore"})),a?.focus()}}),()=>t?.()}function Bt(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);A(a,"change",l),e.mediaRegistry.set(s,{mql:a,handler:l});let u=e.onUnmount(i=>{if(i!==o)return;let d=e.mediaRegistry.get(s);if(d?.mql&&d.handler)try{d.mql.removeEventListener("change",d.handler)}catch{}e.mediaRegistry.delete(s),u()})}}function Gt(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,d]of Object.entries(r))if(o.matchMedia(d).matches)return i;return Object.keys(r)[0]??""}if(!e.mediaRegistry.has(l)){s(u());let i=[];for(let c of Object.values(r)){let p=o.matchMedia(c),m=()=>s(u());A(p,"change",m),i.push({mql:p,handler:m})}e.mediaRegistry.set(l,{mqls:i});let d=e.onUnmount(c=>{if(c!==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),d()})}}function Jt(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=A(a,"resize",s),A(a,"scroll",s)):u=A(window,"resize",s),t){let i=e.onUnmount(d=>{d===t&&(l?.(),u?.(),i())})}return o}function Xt(e,t){let n=e.selfId(),o={isIn:!1,ready:!1,observe:u,refresh:i,disconnect:d},r=null,s=null,a=()=>{n?e.render([n]):e.render()};function l(){if(s?.disconnect(),s=null,!r)return;let c=typeof t.rootMargin=="function"?t.rootMargin():t.rootMargin,p=typeof t.threshold=="function"?t.threshold():t.threshold;s=new IntersectionObserver(m=>{let f=m[m.length-1];if(!f)return;let b=f.isIntersecting,w=b!==o.isIn,h=!o.ready;o.isIn=b,o.ready=!0,t.onChange?.(f,b),(w||h)&&a()},{root:t.root?t.root():null,rootMargin:c??"0px",threshold:p??0}),s.observe(r)}function u(c){r=c,c?l():(s?.disconnect(),s=null,o.isIn=!1)}function i(){l()}function d(){s?.disconnect(),s=null}if(n){let c=e.onUnmount(p=>{p===n&&(d(),c())})}return o}function Yt(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 Qt(e,t){let n=e.selfId();if(typeof window>"u")return()=>{};let o=A(window,"keydown",t);if(n){let r=e.onUnmount(s=>{s===n&&(o(),r())})}return o}function Zt(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},d=m=>{s&&(s=!1,i(),t.onEnd?.(m))},c=m=>{s||(m.preventDefault(),s=!0,o=m.clientX,r=m.clientY,l=A(window,"pointermove",a),u=A(window,"pointerup",d),t.onStart?.(m))},p=e.selfId();if(p){let m=e.onUnmount(f=>{f===p&&(s&&(i(),s=!1),m())})}return{onPointerDown:c}}function en(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 to(e){return e.map(t=>{let n={role:t.role,content:t.content};return t.reasoning&&(n.reasoning_content=t.reasoning),n})}function it(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`msg-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function tn(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 f=e.messages[e.messages.length-1];return f&&f.role==="assistant"&&f.status==="streaming"?f:void 0}function a(f,b,w){let h=s();switch(f){case"wf:token":h&&(h.content+=b.text);break;case"wf:tool_call":{h&&(h.toolCalls||(h.toolCalls=[]),h.toolCalls.push({call:b,status:"running"}));break}case"wf:tool_progress":{let k=b,g=h?.toolCalls?.find(E=>E.call.id===k.toolCallId);g&&(g.progress=k);break}case"wf:tool_result":{let k=b,g=h?.toolCalls?.find(E=>E.call.id===k.id);g&&(g.result=k,g.status=k.ok?"ok":"error");break}case"wf:approval_request":h&&(h.approval=b);break;case"wf:usage":h&&(h.usage=b);break;case"wf:step":e.step=b;break;case"wf:done":if(h){h.status="done",h.approval=void 0;let k=b;k.reasoning&&(h.reasoning=k.reasoning)}e.streaming=!1,e.step=null;break;case"wf:error":h&&(h.status="error",h.error=b,h.approval=void 0),e.error=b,e.streaming=!1,e.step=null;break;default:w?.(f,b);break}o?.()}function l(){let f=n.body?n.body(e.messages):{messages:to(e.messages)};r=t(n.url,f,{onToken:w=>a("wf:token",{text:w}),onToolCall:w=>a("wf:tool_call",w),onToolProgress:w=>a("wf:tool_progress",w),onToolResult:w=>a("wf:tool_result",w),onApproval:w=>a("wf:approval_request",w),onUsage:w=>a("wf:usage",w),onStep:w=>a("wf:step",w),onDone:w=>a("wf:done",w),onError:w=>a("wf:error",w),onEvent:(w,h)=>a(w,h,n.onEvent)},{signal:n.signal,headers:n.headers}),e.streaming=!0;let b=s();b&&r?.traceId&&(b.id=r.traceId)}function u(){if(e.streaming)return;let f=String(e.input??"").trim();f&&(e.input="",e.error=null,e.usage=null,e.step=null,e.messages.push({id:it(),role:"user",content:f,status:"done"},{id:it(),role:"assistant",content:"",status:"streaming",toolCalls:[]}),l(),o?.())}function i(){r?.abort(),e.streaming=!1,e.step=null;let f=e.messages[e.messages.length-1];f&&f.role==="assistant"&&f.status==="streaming"&&(!f.content&&(!f.toolCalls||f.toolCalls.length===0)?e.messages.pop():f.status="done"),o?.()}function d(){if(e.streaming)return;let f=-1;for(let b=e.messages.length-1;b>=0;b--)if(e.messages[b].role==="user"){f=b;break}f!==-1&&(e.messages.splice(f+1),e.error=null,e.usage=null,e.step=null,e.messages.push({id:it(),role:"assistant",content:"",status:"streaming",toolCalls:[]}),l(),o?.())}function c(){r?.abort(),e.messages=[],e.input="",e.streaming=!1,e.error=null,e.usage=null,e.step=null,o?.()}async function p(f,b,w){let h=e.messages[e.messages.length-1],k=h?.role==="assistant"?h.approval:void 0;if(k&&(h.approval=void 0,o?.(),!!n.approveUrl))try{await fetch(n.approveUrl,{method:"POST",headers:{"Content-Type":"application/json",...n.headers},body:JSON.stringify(w?{id:k.id,decision:f,note:b,modifiedArgs:w}:{id:k.id,decision:f,note:b}),signal:n.signal})}catch(g){if(n.signal?.aborted)return;e.error={code:"provider_error",message:g instanceof Error?g.message:String(g)},o?.()}}function m(){r?.abort(),r=null}return{send:u,stop:i,retry:d,clear:c,approve:p,dispose:m}}function nn(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??io(),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(d){if(o.signal.aborted)return;n?.onError?.({code:"provider_error",message:d instanceof Error?d.message:String(d)});return}if(!i.ok){n?.onError?.({code:so(i.status),message:`HTTP ${i.status} ${i.statusText}`});return}try{for await(let{name:d,data:c}of oo(i.body)){if(o.signal.aborted)return;ro(l,{name:d,data:c},a),no(d,c,n??{})}}catch(d){if(o.signal.aborted)return;n?.onError?.({code:"provider_error",message:d instanceof Error?d.message:String(d)})}})();return{abort:()=>o.abort(),done:u,traceId:s,events:l}}function no(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*oo(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 d of l.split(`
6
- `))d.startsWith("event: ")?u=d.slice(7):d.startsWith("data: ")&&(i+=d.slice(6));if(i)try{yield{name:u,data:JSON.parse(i)}}catch{}}}}finally{t.releaseLock()}}function ro(e,t,n){n&&(e.length>=1e3&&e.shift(),e.push(t))}function so(e){return e===401||e===403?"auth_failed":e===429?"rate_limited":e>=500?"provider_error":"invalid_request"}function io(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`trace-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function on(e,t){let n={messages:[],input:"",streaming:!1,error:null,usage:null,step:null},o=new Set,s=tn(n,nn,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 rn=D();function sn(e){let t=new Map,n=new Map,o=!1,r=0;function s(){r||(r=requestAnimationFrame(()=>{r=0;let p=[];for(let[m,f]of t){if(!f.isOpen())continue;let b=f.getEl();if(!b)continue;let w=b.getBoundingClientRect();if(w.width===0&&w.height===0)continue;let h=f.compute(w);Object.assign(f.pos,Se(h,f.panel?.(),f.margin)),p.push(m)}for(let[m,f]of n){let b=f.getScroller(),w=b instanceof Window?rn.scrollingElement()?.scrollTop??rn.scrollTop():b.scrollTop??0;w!==f.handle.y&&(f.handle.y=w,p.push(m))}p.length>0&&e(p)}))}let a=null,l=null;function u(){o||(o=!0,a=A(window,"scroll",s,{capture:!0,passive:!0}),l=A(window,"resize",s))}function i(){o&&(a?.(),l?.(),a=null,l=null,o=!1)}function d(p){for(let m of[...t.keys()])(m.startsWith(`popup:${p}:`)||m===`popup:${p}`||m===p)&&t.delete(m);n.delete(p)}function c(){i(),r&&(cancelAnimationFrame(r),r=0),t.clear(),n.clear()}return{popupTrackers:t,scrollTrackers:n,schedulePopupRecompute:s,ensurePopupListeners:u,destroyPopupListeners:i,cleanupTrackers:d,destroy:c}}var ao=new Map,lo=new Set,uo=new Map,co=new Map,po=new Map,at=new Map,lt=sn(e=>{for(let t of e){let n=at.get(t);if(n)try{n()}catch{}}}),fo=lt.popupTrackers,mo=lt.scrollTrackers,go=lt.ensurePopupListeners;function ut(e,t,n){at.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:D(),onUnmount:s=>(n(()=>{s(e),at.delete(e)}),()=>{}),registry:{idRegistry:new Map},mediaRegistry:ao,popupTrackers:fo,scrollTrackers:mo,isMounting:()=>!1,warned:lo,uncontrolledValues:uo,inputStates:co,openStates:po,ensurePopupListeners:go};return{__v3ui:!0,__compId:e,render:s=>o.render(s),onUnmount:s=>{n(s)},selfId:s=>{o.registry.idRegistry.set(s,e)},useExternal:s=>At(o,s),useControlled:s=>ot(o,s),useControlledInput:s=>_t(o,s),useOpen:s=>Wt(o,s),usePopup:s=>jt(o,s),usePopupPosition:s=>st(o,s),useTween:(s,a)=>It(o,s,a),useInView:s=>Xt(o,s),useScrollPosition:s=>Yt(o,s),useGlobalKey:s=>Qt(o,s),useDrag:s=>Zt(o,s),useDragDrop:s=>en(o,s),useMedia:(s,a)=>{Bt(o,s,a)},useBreakpoint:(s,a)=>{Gt(o,s,a)},useReducedMotion:()=>rt(o),useStableRef:(s,a)=>Rt(o,s,a),usePresence:s=>Ve(o,s),useLongPress:s=>Ht(o,s),useHoverCapable:()=>Ce(o),useVisualViewport:()=>Jt(o),useAsync:s=>Ot(o,s),useChat:s=>on(o,s)}}var Ae=new Map;function dt(e){let t=Ae.get(e);if(t){try{t()}catch{}Ae.delete(e)}}function W(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)&&"type"in e}function Le(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 an=new Set;function ln(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 I(e,t,n,o=!1){if(typeof e.type=="function"||e.type===ne){let i={...e};if(e.type===ne)return r(i,t,n);let d=n!=null&&typeof n=="object"&&n.type===e.type&&n.key===e.key&&n._render?n:null;if(d){if(i._render=d._render,i._id=d._id,et(i),!o&&ln(d.props,i.props)){if(i._child=d._child,d.el!=null&&(i.el=d.el),globalThis.__WF_V3_AUDIT!=="0"&&d._propsSnap!=null){let f=Le(i.props);if(f!=null&&f!==d._propsSnap){let b=`${K(i.type)}:${f.slice(0,40)}`;an.has(b)||(an.add(b),console.warn(`[vdom3/audit] \u7EC4\u4EF6 ${K(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 v.emit(y("comp","build",i._id,{name:K(i.type),reused:!0,index:!0,reason:"reuse-skip",propsKeys:Object.keys(i.props)})),i._propsSnap=Le(i.props),i}let m=Object.keys({...d.props,...i.props}).filter(f=>d.props[f]!==i.props[f]);v.emit(y("props","update",i._id,{name:K(i.type),keys:m})),i._propsSnap=Le(i.props),v.emit(y("comp","build",i._id,{name:K(i.type),reused:!0,index:!0,reason:o?"root-render":"props-changed",changedKeys:m}))}else{i._id=oe(),et(i),v.emit(y("comp","build",i._id,{name:K(i.type),reused:!1,index:!0,reason:"mount"})),v.emit(y("comp","mount",i._id,{name:K(i.type)}));let m=i._id,f=()=>{window.__chain="componentRender:"+m;let h=t._componentRender;h?(window.__chain="fn("+m+")",h(m)):(window.__chain="ctx.render("+m+")",t.render())},b=Object.assign(Object.create(t),{render:f,onUnmount:h=>{Ae.set(m,h)},browser:t.browser??D(),ui:ut(m,f,h=>{Ae.set(m,h)})}),w=null;try{w=await i.type(i.props,b)}catch(h){let k=h;throw v.emit(y("error","throw",i._id,{phase:"factory",name:K(i.type),message:k?.message??String(h)})),h}i._render=w,i._propsSnap=Le(i.props)}v.emit(y("comp","render",i._id,{name:K(i.type)}));let c=null;try{c=await i._render(i.props)}catch(m){let f=m;throw v.emit(y("error","throw",i._id,{phase:"renderFn",name:K(i.type),message:f?.message??String(m)})),m}i._child=null;let p=d?._child??null;if(c){let m=await I(c,t,p!=null&&typeof p=="object"?p:null);i._child=m}return i}async function r(i,d,c){let p=String(i.props?.appId??""),m=nt(p);if(!m)return v.emit(y("app","error",void 0,{appId:p,reason:"unknown-app"})),i;let f=c!=null&&c.type===ne&&c.appId===p;if(!f||!c._appOutput){v.emit(y("app","mount",void 0,{appId:p}));let h=await m(i.props?.props??{},d);i._appOutput=h}else{i._appOutput=c._appOutput;let h=c.props?.props??{},k=i.props?.props??{},g=[...new Set([...Object.keys(h),...Object.keys(k)])].filter(E=>h[E]!==k[E]);g.length>0&&v.emit(y("app","update",void 0,{appId:p,keys:g}))}let b=f&&c._appOutput?await I(c._appOutput,d,null):null,w=i._appOutput?await I(i._appOutput,d,b):null;return i._child=w,i.appId=p,i}let s=V(n??{}),a=0,l=null;for(let i of V(e)){if(W(i)){let d=s[a],c=await I(i,t,d!=null&&typeof d=="object"?d:null);c!==i&&(l??=[...V(e)],l[a]=c)}a++}if(l==null&&n!=null&&typeof n=="object"&&!Array.isArray(n)){let i=V(n),d=V(e);if(ln(n.props??{},e.props??{})&&i.length===d.length&&i.every((c,p)=>c===d[p]))return n}let u={...e};return l&&(u.children=l),u}function K(e){return typeof e=="function"?e.name||"anonymous":String(e)}function de(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 R=class{byId=new Map;idByNode=new WeakMap;removed=new Map;static PORTAL=t=>`portal:${t}`;resolveParent(t){return t.startsWith("portal:")?de(t.slice(7)):this.get(t)}get(t){return t.startsWith("portal:")?de(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"};var yo=globalThis.__WF_V3_AUDIT!=="0";function un(e,t){if(!yo)return;let n=V(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(c=>c.trim().slice(0,70)).join(" | "):"",i=n.map(c=>typeof c.type=="function"?"C":String(c.type).slice(0,8)),d=n.map(c=>[...o.childNodes].indexOf(c.el));console.warn(`[vdom3/audit] children \u987A\u5E8F\u9519\u4F4D idx=${l}<${r} tag=${String(s.type).slice(0,30)} kinds=[${i.join(",")}] idxs=[${d.join(",")}] kids=${n.length} domKids=${o.childNodes.length}${u?" || "+u:""}`);return}r=l}}function _e(e,t){if(globalThis.__WF_VDOM_AUDIT!=="1")return()=>{};let n=new Set,o=(s,a)=>{let l=`${s}:${a??"?"}`;n.has(l)||(n.add(l),console.warn(`[vdom3/audit] DOM \u53D8\u5316\u65E0\u4E8B\u4EF6\u6D41\u5BF9\u5E94\uFF08\u7ED5\u8FC7\u70B9\uFF09\uFF1A${s} id=${a??"?"}\u2014\u2014\u65E0\u4E8B\u4EF6\u6D41\u4E0D\u6E32\u67D3\u4E0D\u53D8\u91CF\u88AB\u7834\u574F`))},r=new MutationObserver(s=>{for(let a of s)if(a.type==="childList"){for(let l of a.removedNodes){if(l.nodeType!==1)continue;let u=l.getAttribute?.("data-v3-id")??null;u&&!n.has(`remove:${u}`)&&(t().some(c=>c.entity==="node"&&c.action==="remove"&&c.target===u)||o("remove",u))}for(let l of a.addedNodes){if(l.nodeType!==1)continue;let u=l.getAttribute?.("data-v3-id")??null;if(!u||[...a.removedNodes].some(p=>p.getAttribute?.("data-v3-id")===u))continue;t().some(p=>p.entity==="node"&&p.action==="insert"&&p.target===u)||o("insert",u)}}});return r.observe(e,{childList:!0,subtree:!0}),()=>r.disconnect()}var ho=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 z(e){if(e==null||typeof e!="object")return!1;let t=e.type;return t===te||typeof t=="symbol"&&e.props?.portalKey!=null}function yn(e,t){e.value=t,e.type==="range"&&e.setAttribute("value",t)}function vo(e){if(e==null||typeof e!="object")return!1;let t=e.type;return(t===q||typeof t=="symbol")&&e.props?.portalKey==null}var M=new R;function ie(e,t,n){let o=M;n&&(M=n);try{re(t),t.innerHTML="",M.register(R.ROOT,t),Y(e,t)}finally{M=o}}function Y(e,t,n){if(typeof e.type=="function"||e.type===ne){let l=e._child!==void 0?e._child:V(e)[0]??null;if(l==null)return null;if(e.el!=null&&(e.el.isConnected||e.el.parentNode===t))return e.el;let u=Y(l,t,n);return e.el=u,e._outFirst=l._outFirst??u,e._outLast=l._outLast??u,u}if(vo(e)){let l=null,u=null;for(let i of V(e)){let d=ct(i,t,n);d&&(l||(l=d),u=d)}return e._outFirst=l,e._outLast=u,l}if(z(e)){let u=String(e.props?.portalKey??"default"),i=de(u);re(i),M.register(R.PORTAL(u),i);let d=null,c=i.childNodes.length===0;for(let p of V(e)){let m=ct(p,i);m&&!d&&(d=m)}return c&&i.childNodes.length>0&&v.emit(y("portal","open",void 0,{portalKey:u})),e.el=i,d??i}let o=e.type,r=ho.has(o)?document.createElementNS("http://www.w3.org/2000/svg",o):document.createElement(o),s=oe();r.setAttribute("data-v3-id",s),M.register(s,r),e.el=r,v.emit(y("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)){Ne(s,l.slice(2).toLowerCase(),u,t);continue}if(u!=null&&u!==!1){if(l==="value"&&r instanceof HTMLInputElement)yn(r,String(u));else if(l==="innerHTML")r.innerHTML=String(u);else if(l==="style"&&typeof u=="object"&&!Array.isArray(u)){let i=Object.entries(u).filter(([,d])=>d!=null&&d!==!1).map(([d,c])=>`${d.replace(/[A-Z]/g,p=>"-"+p.toLowerCase())}:${c}`).join(";");r.setAttribute("style",i)}else r.setAttribute(l,String(u));v.emit(y("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),v.emit(y("node","insert",s,{parent:Q(t),ref:n?$(n):null,causeId:X??void 0})),Nt(r,e.props??{});let a=e.props?.ref;typeof a=="function"&&(v.emit(y("ref","mount",s,{})),a(r));for(let l of V(e))ct(l,r);return r}function bo(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?mn(e,t,o):e.el&&e.el.parentNode===t?se(e.el,t,e):r.parentNode===t&&ce(r,t);let a=r.nextSibling,l=64,u=0;for(;a&&a!==s&&u++<l;){let i=a.nextSibling;ce(a,t),a=i}s.parentNode===t&&ce(s,t);return}if(e!=null&&typeof e=="object"&&z(e)){B(e);return}if(e!=null&&typeof e=="object"&&e._child&&z(e._child)){B(e._child);return}if(e!=null&&typeof e=="object"&&typeof e.type=="function"&&e._id){mn(e,t,o);return}e!=null&&typeof e=="object"&&e.el?se(e.el,t,e):n&&ce(n,t)}function ce(e,t){let n=M.idOf(e);n&&(v.emit(y("node","remove",n,{parent:Q(t),causeId:X??void 0})),M.unregister(n,e)),e.parentNode?.removeChild(e)}function pt(e,t){let n=document.createComment("wf-hole"),o=oe();return M.register(o,n),v.emit(y("node","create",o,{kind:"hole"})),t&&t.parentNode===e?e.insertBefore(n,t):e.appendChild(n),v.emit(y("node","insert",o,{parent:Q(e),ref:t?$(t):null,kind:"hole",causeId:X??void 0})),n}function ct(e,t,n){if(e==null||e===!1||e===!0)return pt(t,n);if(typeof e=="string"||typeof e=="number"){let o=document.createTextNode(String(e)),r=oe();return M.register(r,o),v.emit(y("text","create",r,{value:String(e)})),n&&n.parentNode===t?t.insertBefore(o,n):t.appendChild(o),v.emit(y("node","insert",r,{parent:Q(t),ref:n?$(n):null})),o}return Y(e,t,n)}function F(e,t,n,o,r){let s=M;r&&(M=r);try{return e!==null&&t!==null&&typeof e=="object"&&typeof t=="object"&&e===t?e.el??null:Eo(e,t,n,o)}finally{M=s}}var wo=0,X=null,hn=[];function dn(){return hn.push(X),X=`c${++wo}`,X}function cn(){X=hn.pop()??null}function pn(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===q?"frag":t===te?"portal":"native"}return"unknown"}function Eo(e,t,n,o){let r=pn(e),s=pn(t);if(v.emit(y("diff","transition",void 0,{from:r,to:s,level:"trace"})),typeof t=="string"||typeof t=="number"){let i=String(t),d=e&&typeof e=="object"?e.el:n.childNodes[0]??null;if(d&&d.nodeType===3)return d.nodeValue!==i&&(v.emit(y("text","update",$(d),{value:i,prev:d.nodeValue??""})),d.nodeValue=i),d;let c=document.createTextNode(i),p=oe();return M.register(p,c),v.emit(y("text","create",p,{value:i})),o&&o.parentNode===n?n.insertBefore(c,o):n.appendChild(c),v.emit(y("node","insert",p,{parent:Q(n),ref:o?$(o):null})),c}if(t==null||t===!1||t===!0){if(e!=null&&typeof e=="object"&&!Array.isArray(e)){if(z(e))B(e);else if(e.el&&e.el.parentNode===n){let i=M.idOf(e.el);v.emit(y("node","remove",i,{parent:Q(n)})),e.el.parentNode?.removeChild(e.el),M.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,d=ae(a);Oe(l?ae(e):null,d,"reuse");let c=Mo[d];return c?c(i,a,n,o):(Oe(l?ae(e):null,d,"unhandled"),console.warn(`[vdom3/patch] kind=${d} \u65E0\u540C\u7C7B\u578B\u5904\u7406\u5668\u2014\u2014\u964D\u7EA7\u91CD\u5EFA\uFF08kind \u5206\u53D1\u5B8C\u6574\u6027\u7F3A\u5931\uFF09`),Y(a,n,o))}if(Oe(l?ae(e):null,ae(a),"rebuild"),l&&typeof e.type=="function"&&e._id&&(dt(e._id),v.emit(y("comp","unmount",e._id,{name:mt(e.type)}))),l){let i=e.el;i&&i.parentNode===n?se(i,n,e):e&&z(e)&&B(e)}return Y(a,n,o)}function xo(e,t,n){let o=$(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)&&Po(u,i))){if(typeof i=="function"&&/^on[A-Z]/.test(l)){Ne(o,l.slice(2).toLowerCase(),i,e);continue}if(i==null||i===!1)l==="value"&&e instanceof HTMLInputElement?(e.value="",e.type==="range"&&e.removeAttribute("value")):e.removeAttribute(l);else if(l==="value"&&e instanceof HTMLInputElement)yn(e,String(i));else if(l==="style"&&typeof i=="object"&&!Array.isArray(i)){let d=Object.entries(i).filter(([,c])=>c!=null&&c!==!1).map(([c,p])=>`${c.replace(/[A-Z]/g,m=>"-"+m.toLowerCase())}:${p}`).join(";");e.setAttribute("style",d)}else e.setAttribute(l,String(i));v.emit(y("prop","update",o,{key:l,value:i,prev:u??""}))}}}function Oe(e,t,n){v.emit(y("vnode","patch",void 0,{oldKind:e,newKind:t,strategy:n}))}function ko(e,t,n,o){let r=e.el;return r==null?(Oe(ae(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`),Y(t,n,o)):(t.el=r,xo(r,e.props,t.props),ft(e,t,r),r)}function fn(e,t,n,o){t._render=e._render,t._id=e._id;let r=t._child!==void 0?t._child:V(t)[0]??null,s=e._child!==void 0?e._child:V(e)[0]??null;if(r==null||r===!1||r===!0){if(s&&z(s))B(s);else if(e.el){Re(s);let a=e._outFirst??e.el,l=e._outLast??e.el;if(l!==a&&a.parentNode===n){let u=M.idOf(a);v.emit(y("node","remove",u,{parent:Q(n)})),a.parentNode?.removeChild(a),M.unregister(u,a);let i=a.nextSibling,d=64,c=0;for(;i&&i!==l&&c++<d;){let p=i.nextSibling;ce(i,n),i=p}l.parentNode===n&&ce(l,n)}else{let u=M.idOf(e.el);v.emit(y("node","remove",u,{parent:Q(n)})),e.el.parentNode?.removeChild(e.el),M.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=Y(t,n,o):(F(s,r,n,o),t.el=e.el,t._outFirst=r._outFirst??t.el,t._outLast=r._outLast??t.el),t.el}function To(e,t,n,o){ft(e,t,n,Co(e));let r=V(e).find(u=>u!=null&&typeof u=="object"&&!Array.isArray(u));t.el=e.el??r?.el??null;let s=V(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 No(e,t,n,o){let r=String(t.props?.portalKey??"default"),s=de(r);return M.register(R.PORTAL(r),s),ft(e,t,s),t.el=s,s}var Mo={native:ko,comp:fn,app:fn,frag:To,portal:No,text:void 0,null:void 0};function Co(e){let n=V(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 Vo(e,t,n){let o=new Map;e.forEach((s,a)=>{W(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(!W(a)||a.key==null){r=null;continue}let l=o.get(a.key),u=null;if(l!=null&&W(e[l])&&(u=e[l].el??null),u&&u.parentNode===n){let i=r?r.nextSibling:n.firstChild;if(i!==u){let d=u.previousSibling?M.idOf(u.previousSibling):null;n.insertBefore(u,i),v.emit(y("node","move",M.idOf(u),{parent:$(n),ref:i?M.idOf(i):null,prev:d,key:a.key,causeId:X??void 0}))}r=u}}}function So(e,t,n){let o=new Map;for(let a of e)W(a)&&a.key!=null&&o.set(a.key,a);Vo(e,t,n);let r=null;for(let a of t){let l=a,u=o.get(l.key??"")??null;u&&u!==l?(F(u,l,n),r=l.el??r):u||(Y(l,n,r?r.nextSibling:n.firstChild),r=l.el??r)}let s=new Set(t.filter(a=>W(a)).map(a=>a.key));for(let a of e)if(W(a)&&a.key!=null&&!s.has(a.key)&&a.el?.parentNode===n){let l=M.idOf(a.el);v.emit(y("node","remove",l,{parent:$(n)})),a.el.parentNode?.removeChild(a.el),M.unregister(l,a.el)}}function Re(e){if(e==null||typeof e!="object"||Array.isArray(e))return;let t=e.props?.ref;if(typeof t=="function"){let n=e.el;v.emit(y("ref","cleanup",n?M.idOf(n):"null")),t(null)}for(let n of V(e))n!=null&&typeof n=="object"&&!Array.isArray(n)&&Re(n)}function mn(e,t,n){let o=e._id;if(o&&(dt(o),v.emit(y("comp","unmount",o,{name:mt(e.type)})),Pt(o)),e.el)se(e.el,t,e);else{let r=t.childNodes[n];r&&r.parentNode?.removeChild(r)}}function se(e,t,n){let o=globalThis.__WF_V3_AUDIT!=="0"?Be(M.idOf(e)):0;if(Te(M.idOf(e)),o>0){let s=Be(M.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&&Re(n);let r=M.idOf(e);v.emit(y("node","remove",r,{parent:Q(t),causeId:X??void 0})),e.parentNode?.removeChild(e),M.unregister(r,e)}function Po(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 B(e){let t=String(e.props?.portalKey??"default"),n=de(t);Re(e);for(let o of[...n.childNodes]){Te(M.idOf(o));let r=M.idOf(o);v.emit(y("node","remove",r,{parent:R.PORTAL(t)})),n.removeChild(o),M.unregister(r,o)}n.childNodes.length===0&&v.emit(y("portal","close",void 0,{portalKey:t}))}var gn=new Set;function ft(e,t,n,o=0){let r=V(e),s=V(t),a=s.length>1&&s.every(c=>W(c)&&c.key!=null)?"keyed":"unkeyed";if(v.emit(y("diff","mode",void 0,{mode:a,len:s.length,prevLen:r.length,level:"trace"})),globalThis.__WF_V3_AUDIT!=="0"&&r.length!==s.length){let c=`${s.length}:${r.length}`;if(!gn.has(c)){gn.add(c);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${mt(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(c=>W(c)&&c.key!=null)){So(r,s,n);return}let l=c=>!!c&&c.nodeType===8&&(c.nodeValue??"").includes("wf-hole"),u=Math.max(r.length,s.length),i=o,d=(c,p)=>{if(c!=null&&typeof c=="object"&&!Array.isArray(c)){let m=c._outFirst,f=c._outLast;if(m&&f&&f!==m){let b=1,w=m,h=64,k=0;for(;w&&w!==f&&k++<h;)b++,w=w.nextSibling;return b}}return p?1:0};for(let c=0;c<u;c++){let p=c<r.length?r[c]:null,m=c<s.length?s[c]:null,f=n.childNodes[i]??null,b=()=>bo(p,n,f,c);if(c>=s.length){let h=p!=null&&typeof p=="object"&&p._outFirst&&p._outLast&&p._outLast!==p._outFirst?d(p,f):1;b(),i+=h;continue}if(typeof m=="string"||typeof m=="number"){let h=String(m);if(f&&f.nodeType===3)f.nodeValue!==h&&(v.emit(y("text","update",$(f),{value:h,prev:f.nodeValue??""})),f.nodeValue=h);else{let k=document.createTextNode(h),g=oe();if(M.register(g,k),v.emit(y("text","create",g,{value:h})),f&&f.parentNode===n){let E=M.idOf(f);E&&(v.emit(y("node","remove",E,{parent:$(n)})),M.unregister(E,f)),n.replaceChild(k,f)}else n.appendChild(k);v.emit(y("node","insert",g,{parent:$(n),ref:null}))}i+=1;continue}if(m==null||m===!1||m===!0){if(p!=null&&typeof p=="object"&&!Array.isArray(p)&&z(p)&&B(p),!l(f)){dn();try{let h=f?f.nextSibling:null;b(),pt(n,h)}finally{cn()}}i+=1;continue}if(p!=null&&typeof p=="object"&&p.type===m.type)F(p,m,n,f??null);else{dn();try{let h=Y(m,n,f??null);f&&!l(f)?b():f&&l(f)&&ce(f,n),h==null&&!f&&pt(n,null)}finally{cn()}}let w=d(m,f)||(p!=null&&typeof p=="object"&&!Array.isArray(p)&&p._outFirst&&p._outLast&&p._outLast!==p._outFirst?d(p,f):1);i+=w}un(n,t)}function mt(e){return typeof e=="function"?e.name||"anonymous":String(e)}function $(e){return M.idOf(e)}function Q(e){return M.idOf(e)}var He=class{queue=[];running=!1;iterations=0;schedule(t){this.queue.push(t),this.running||(this.running=!0,this.iterations=0,queueMicrotask(()=>this.flush()))}flush(){if(!(!this.running&&this.queue.length===0)){this.running=!0;do{if(++this.iterations>10){console.error("[vdom3/scheduler] \u6E32\u67D3\u5FAA\u73AF\u8D85\u9650\uFF08\u7591\u4F3C\u6B7B\u5FAA\u73AF\uFF09\u2014\u2014\u4E2D\u6B62\u672C\u8F6E flush"),this.queue=[];break}let t=this.queue;this.queue=[];for(let n of t)try{n()}catch(o){console.error("[vdom3/scheduler] render error:",o)}}while(this.queue.length>0);this.running=!1,this.iterations=0}}pending(){return this.queue.length}get isRunning(){return this.running}},me=new He;function Lo(e){return typeof e.type=="function"&&e.type.name||"anonymous"}function ge(e,t){if(e==null||typeof e!="object"||Array.isArray(e))return null;if(e._id===t)return e;let n=e._child;if(n!=null&&typeof n=="object"&&!Array.isArray(n)){let o=ge(n,t);if(o)return o}for(let o of V(e))if(o!=null&&typeof o=="object"&&!Array.isArray(o)){let r=ge(o,t);if(r)return r}return null}function vn(e,t,n){let o=Math.round(t+n);v.emit(y("render","duration",e??void 0,{ms:o,buildMs:Math.round(t),patchMs:Math.round(n)}));let r=globalThis.__v3SlowMs??100;o>r&&console.warn(`[vdom3/audit] \u6E32\u67D3\u8017\u65F6 ${o}ms\uFF08build ${Math.round(t)}ms + patch ${Math.round(n)}ms\uFF09\u2014\u2014session ${e??"?"}\u2014\u2014${r}ms \u4EE5\u4E0A\u89C6\u4E3A\u6162\u6E32\u67D3\uFF08__v3SlowMs \u53EF\u8C03\uFF09`)}function Ie(e,t,n){let o=e,r=null,s=!1,a=!1,l=new Set,u=new Set;async function i(w){if(l.has(w)){u.add(w),v.emit(y("render","queued",w,{target:"comp",cause:"coalesced"}));return}l.add(w),v.emit(y("render","flushed",w,{target:"comp",cause:"manual"})),v.setSession();let h=v.currentSession(),k=performance.now();try{do{u.delete(w);let g=ge(o,w)??(r&&r._id===w?r:null);if(!g||typeof g.type!="function"||!g._render){u.add(w);break}let E=globalThis.__WF_V3_STACK==="1";v.emit(y("comp","render",g._id,{name:Lo(g),...E?{stack:new Error().stack?.split(`
8
- `).slice(2,5).map(P=>P.trim().slice(0,80)).join(" | ")}:{}}));let S=globalThis.__v3HangMs??3e3,T=await Promise.race([g._render(g.props),new Promise((P,_)=>setTimeout(()=>_(new Error(`renderFn \u6302\u8D77\u8D85\u65F6\uFF08${S}ms\uFF09\u2014\u2014\u7EC4\u4EF6 ${w} \u672A resolve`)),S))]),N=g._child??null,O=T?await Promise.race([I(T,c,N??void 0),new Promise((P,_)=>setTimeout(()=>_(new Error(`buildVNode \u6302\u8D77\u8D85\u65F6\uFF08${S}ms\uFF09\u2014\u2014\u7EC4\u4EF6 ${w} \u8F93\u51FA\u6784\u5EFA\u672A resolve`)),S))]):null;g._child=O;let U=g.el?.parentNode??t;if(N&&O)F(N,O,U);else if(O)ie(O,U);else if(N||g.el)if(N&&z(N))B(N);else{let P=N&&N.el||g.el;P&&P.parentNode===U&&se(P,U,N)}g.el=O?.el??null}while(u.has(w))}catch(g){let E=g;v.emit(y("error","caught",w,{phase:"update",name:"component",message:E?.message??String(g)}))}finally{l.delete(w)}}async function d(){let w=v.setSession();if(s){a=!0,v.emit(y("render","queued",void 0,{target:"root",cause:"coalesced"}));return}s=!0,v.emit(y("render","flushed",void 0,{target:"root",cause:"manual"}));let h=performance.now(),k=0;try{do{a=!1;let g=await I(e,c,o,!0);k=performance.now()-h,o==null?ie(g,t):F(o,g,t),o=g,r=g}while(a);vn(w,k,performance.now()-h-k)}finally{s=!1}}let c=Object.assign(Object.create(n?.ctx??null),{_vnode:e,_parent:t,render(){me.schedule(()=>{d()})}}),p=w=>{me.schedule(()=>{i(w)})};c._componentRender=p;let m,f=new Promise(w=>{m=w}),b={ctx:c,ready:f,rerender:()=>me.schedule(()=>{d()}),flush:()=>me.flush(),unmount(){o._id&&v.emit(y("comp","unmount",o._id,{name:"root"})),t.innerHTML=""}};return re(t),_e(t,()=>v.events().slice(-200)),(async()=>{v.setSession();let w=v.currentSession(),h=performance.now();try{let k=await I(e,c),g=performance.now()-h;if(ie(k,t),o=k,r=k,vn(w,g,performance.now()-h-g),u.size>0)for(let E of[...u])i(E)}catch(k){let g=k;v.emit(y("error","caught",e._id??"root",{phase:"mount",name:"root",message:g?.message??String(k)}))}finally{m()}})(),b}function Ao(e){let t=[],n=String(e).replace(/:(\w+)/g,(o,r)=>(t.push(r),"([^/]+)")).replace(/\*/g,".*");return{re:new RegExp(`^${n}$`),keys:t}}function _o(e,t){for(let n of e){let{re:o,keys:r}=Ao(n.path),s=t.match(o);if(!s)continue;let a={};for(let l=0;l<r.length;l++)a[r[l]]=decodeURIComponent(s[l+1]);return{def:n,params:a}}return null}function gt(e){return typeof e.type=="function"&&e.type.name||"anonymous"}function Oo(e,t,n){let o=null,r=null,s=!1,a=new Set,l=null;re(t),_e(t,()=>v.events().slice(-200));let u={},i={path:"",params:{}},d=()=>Object.assign(Object.create(n?.ctx??{}),{render:()=>{c()},_componentRender:g=>{m(g)},route:i});async function c(){if(s){l={type:"refresh"};return}if(!o||!r){v.emit(y("internal","skip","page",{reason:o?"no-page-vnode":"no-current"}));return}s=!0;try{let g=r;if(typeof g.type=="function"&&g._render){v.emit(y("comp","render",g._id,{name:gt(g)}));let E=3e3,S=await Promise.race([g._render(g.props),new Promise((O,U)=>setTimeout(()=>U(new Error(`\u9875\u9762 renderFn \u6302\u8D77\u8D85\u65F6\uFF08${E}ms\uFF09`)),E))]);if(S==null)return;let T=g._child??null,N=await I(S,u,T&&typeof T=="object"?T:null);g._child=N,F(T,N,t)}}catch(g){let E=g;v.emit(y("error","caught",r?._id??"page",{phase:"update",name:"page",message:E?.message??String(g)}))}finally{if(s=!1,l!=null){let g=l;l=null,f(g)}}}let p=()=>globalThis.__v3HangMs??3e3;async function m(g){if(s){v.emit(y("internal","queue",g,{reason:"busy"})),a.add(g);return}if(!o){v.emit(y("internal","skip",g,{reason:"no-current"}));return}s=!0;try{let E=Lt(g)??ge(o,g);if(!E||typeof E.type!="function"||!E._render){v.emit(y("internal","notfound",g,{reason:"comp-missing-or-render-absent"}));return}v.emit(y("comp","render",E._id,{name:gt(E)}));let S=p(),T=await Promise.race([E._render(E.props),new Promise((P,_)=>setTimeout(()=>_(new Error(`renderFn \u6302\u8D77\u8D85\u65F6\uFF08${S}ms\uFF09\u2014\u2014\u7EC4\u4EF6 ${g} \u672A resolve`)),S))]),N=E._child??null,O=T?await Promise.race([I(T,u,N??void 0),new Promise((P,_)=>setTimeout(()=>_(new Error(`buildVNode \u6302\u8D77\u8D85\u65F6\uFF08${S}ms\uFF09\u2014\u2014\u7EC4\u4EF6 ${g} \u8F93\u51FA\u6784\u5EFA\u672A resolve`)),S))]):null;E._child=O;let U=E.el?.parentNode??t;if(N&&O)F(N,O,U);else if(O)ie(O,U);else if(N||E.el)if(N&&z(N))B(N);else{let P=N&&N.el||E.el;P&&P.parentNode===U&&se(P,U,N)}E.el=O?.el??null}catch(E){let S=E;v.emit(y("error","caught",g,{phase:"update",name:gt(ge(o,g)??{}),message:S?.message??String(E)}))}finally{if(s=!1,a.size>0){let E=a.values().next().value;a.delete(E),m(E)}else if(l!=null){let E=l;l=null,f(E)}}}function f(g){g.type==="nav"?b(g.path):g.type==="comp"?m(g.id):c()}async function b(g){if(s){l={type:"nav",path:g};return}s=!0;try{let E=_o(e,g);if(v.emit(y("route","change",void 0,{path:g,params:E?.params??{}})),!E){t.innerHTML="",o=null,r=null;return}u=d(),i.path=g,i.params=E.params;let S=E.def.render(E.params),T=E.def.layout?E.def.layout(S):S,N=await I(T,u,o,!0);o==null?ie(N,t):F(o,N,t),o=N,r=N}finally{if(s=!1,l!=null){let E=l;l=null,f(E)}}}let h=A(window,"popstate",()=>{b(window.location.pathname)}),k=n?.initialPath??window.location.pathname;return b(k),{navigate(g){window.history.pushState(null,"",g),b(g)},path:()=>window.location.pathname,refresh:()=>{b(window.location.pathname)},close:()=>{h()}}}function Z(e){return`${e.entity}:${e.action}`}function Ue(e,t,n){switch(Z(e)){case"node:create":{let o=e.payload;if(o.kind==="hole"){let s=document.createComment("wf-hole");n.register(e.target,s);break}let r=document.createElement(o.tag);r.setAttribute("data-v3-id",e.target),n.register(e.target,r);break}case"text:create":{let o=e.payload,r=document.createTextNode(o.value);n.register(e.target,r);break}case"node:insert":{let o=e.payload,r=o.parent===R.ROOT?t:n.resolveParent(o.parent),s=n.get(e.target),a=o.ref?n.get(o.ref):null;r&&s&&(a&&a.parentNode===r?r.insertBefore(s,a):r.appendChild(s));break}case"node:remove":{let o=n.get(e.target);o?.parentNode&&o.parentNode.removeChild(o);break}case"node:move":{let o=e.payload,r=n.get(e.target),s=o.parent===R.ROOT?t:n.resolveParent(o.parent),a=o.ref?n.get(o.ref):null;r&&s&&r.parentNode===s&&(a&&a.parentNode===s?s.insertBefore(r,a):s.appendChild(r));break}case"prop:update":{let o=e.payload,r=n.get(e.target);r?.nodeType===1&&(o.value==null||o.value===!1?r.removeAttribute(o.key):r.setAttribute(o.key,String(o.value)));break}case"text:update":{let o=e.payload,r=n.get(e.target);r?.nodeType===3&&(r.nodeValue=o.value);break}default:break}}function Ro(e,t,n=new R){n.register(R.ROOT,t),t.innerHTML="";for(let o of e)Ue(o,t,n)}function Ho(e,t,n=new R){let r=e.filter(s=>Z(s)==="node:insert"||Z(s)==="node:remove"||Z(s)==="prop:update"||Z(s)==="text:update"||Z(s)==="node:move").slice(-t);for(let s of[...r].reverse())switch(Z(s)){case"node:insert":{let a=n.get(s.target);a?.parentNode&&a.parentNode.removeChild(a);break}case"node:remove":{let a=s.payload,l=n.takeRemoved(s.target),u=a.parent===R.ROOT?null:n.get(a.parent);l&&u&&u.appendChild(l);break}case"prop:update":{let a=s.payload,l=n.get(s.target);l?.nodeType===1&&(a.prev==null||a.prev===""?l.removeAttribute(a.key):l.setAttribute(a.key,String(a.prev)));break}case"text:update":{let a=s.payload,l=n.get(s.target);l?.nodeType===3&&(l.nodeValue=a.prev);break}case"node:move":{let a=s.payload,l=n.get(s.target),u=a.parent===R.ROOT?null:n.get(a.parent);if(l&&u&&l.parentNode===u)if(a.prev){let i=n.get(a.prev);i&&i.parentNode===u&&u.insertBefore(l,i.nextSibling)}else u.insertBefore(l,u.firstChild);break}default:break}}function Io(e,t){return e.filter(n=>Z(n)===t)}function Uo(e,t){return e.some(t)}function Do(e,t){let n=e.map(Z);if(!t.map((r,s)=>n[s]===r).every(Boolean))throw new Error(`\u4E8B\u4EF6\u5E8F\u5217\u4E0D\u7B26\uFF1A\u671F\u671B [${t.join(",")}] \u5B9E\u9645 [${n.slice(0,t.length).join(",")}]`)}async function jo(e){let t=await I(e,{}),n=[],o=0,r=()=>`s${++o}`,s=Date.now(),a=(l,u)=>{if(typeof l.type=="function"){let d=l._child??V(l)[0]??null;d&&typeof d=="object"&&!Array.isArray(d)&&a(d,u);return}if(l.type===q){for(let d of V(l))d&&typeof d=="object"&&!Array.isArray(d)&&a(d,u);return}let i=r();n.push(y("node","create",i,{tag:l.type}));for(let[d,c]of Object.entries(l.props??{}))d==="key"||d==="children"||typeof c!="function"&&c!=null&&c!==!1&&n.push(y("prop","update",i,{key:d,value:c,prev:""}));n.push(y("node","insert",i,{parent:u,ref:null}));for(let d of V(l))if(d==null||d===!1||d===!0){let c=r();n.push(y("node","create",c,{kind:"hole"})),n.push(y("node","insert",c,{parent:i,ref:null}))}else if(typeof d=="string"||typeof d=="number"){let c=r();n.push(y("text","create",c,{value:String(d)})),n.push(y("node","insert",c,{parent:i,ref:null}))}else d&&typeof d=="object"&&!Array.isArray(d)&&a(d,i)};return a(t,"root"),n}async function*Wo(e){let t=await I(e,{}),n=0,o=()=>`s${++n}`,r=Date.now(),s=function*(a,l){if(typeof a.type=="function"){let i=a._child??V(a)[0]??null;i&&typeof i=="object"&&!Array.isArray(i)&&(yield*s(i,l));return}if(a.type===q){for(let i of a.children??[])i&&typeof i=="object"&&!Array.isArray(i)&&(yield*s(i,l));return}let u=o();yield y("node","create",u,{tag:a.type});for(let[i,d]of Object.entries(a.props??{}))i==="key"||i==="children"||typeof d!="function"&&d!=null&&d!==!1&&(yield y("prop","update",u,{key:i,value:d,prev:""}));yield y("node","insert",u,{parent:l,ref:null});for(let i of V(a))if(i==null||i===!1||i===!0){let d=o();yield y("node","create",d,{kind:"hole"}),yield y("node","insert",d,{parent:u,ref:null})}else if(typeof i=="string"||typeof i=="number"){let d=o();yield y("text","create",d,{value:String(i)}),yield y("node","insert",d,{parent:u,ref:null})}else i&&typeof i=="object"&&!Array.isArray(i)&&(yield*s(i,u))};yield*s(t,"root")}function $o(e){let t=new Map,n=new Map,o=new Map,r=new Set;for(let u of e)if(u.entity==="node"&&u.action==="create"){let i=u.payload;i.kind==="hole"?r.add(u.target):t.set(u.target,i.tag)}else if(u.entity==="prop"&&u.action==="update"){let i=u.payload,d=n.get(u.target)??new Map;i.value==null||i.value===!1?d.delete(i.key):d.set(i.key,i.value),n.set(u.target,d)}else u.entity==="text"&&u.action==="create"&&o.set(u.target,u.payload.value);let s=new Map;for(let u of e)if(u.entity==="node"&&u.action==="insert"){let i=u.payload,d=s.get(i.parent)??[];d.push(u.target),s.set(i.parent,d)}let a=u=>u.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"),l=u=>{if(r.has(u))return"<!--wf-hole-->";let i=t.get(u);if(i){let d=n.get(u),c=d?[...d.entries()].filter(([m,f])=>typeof f!="function"&&m!=="data-v3-id"&&m!=="key"&&m!=="ref").map(([m,f])=>` ${m}="${a(String(f))}"`).join(""):"",p=(s.get(u)??[]).map(l).join("");return`<${i}${c}>${p}</${i}>`}return a(o.get(u)??"")};return(s.get("root")??[]).map(l).join("")}function zo(e){return JSON.stringify(e)}function Fo(e){return JSON.parse(e)}function ye(e){return`${e.entity}:${e.action}`}function qo(e,t="recorded-render"){let n=[...new Set(e.map(ye))],o=new Map;for(let d of e)ye(d)==="node:create"&&o.set(d.target,d.payload.tag);let r=new Map;for(let d of e)if(ye(d)==="node:insert"){let c=d.payload,p=r.get(c.parent)??[];p.push(d.target),r.set(c.parent,p)}let s=new Set,a=d=>{s.add(d);for(let c of r.get(d)??[])a(c)};for(let d of e)ye(d)==="node:remove"&&a(d.target);let l=new Map;for(let[d,c]of o)s.has(d)||l.set(c,(l.get(c)??0)+1);let u=[...l.entries()].map(([d,c])=>` assert.equal(root.querySelectorAll('${d}').length, ${c}, '${d} \xD7 ${c}\uFF08\u4E8B\u4EF6\u6D41\u63A8\u5BFC\uFF09')`).join(`
9
- `),i=JSON.stringify(e);return`/**
10
- * \u81EA\u52A8\u751F\u6210\u6D4B\u8BD5\uFF08vdom3 recordToTest\uFF09\u2014\u2014\u4E8B\u4EF6\u6D41\u5F55\u5236\u8F6C\u56DE\u5F52
11
- * \u6E32\u67D3\u8FC7\u7A0B\uFF1A${n.join(" \u2192 ")}
12
- */
13
- import { test, before } from 'node:test'
14
- import assert from 'node:assert'
15
- import { setupJsdom } from './client/setup.ts'
16
- import { replay, eventsOf } from '../ui-dom/vdom3/index.ts'
17
-
18
- before(setupJsdom)
19
-
20
- test('${t}\uFF1A\u4E8B\u4EF6\u6D41\u56DE\u653E\uFF08DOM = fold\uFF09+ \u6E32\u67D3\u5E8F\u5217\u65AD\u8A00', () => {
21
- const events = ${i}
22
-
23
- // \u56DE\u653E\uFF1A\u4E8B\u4EF6\u6D41 \u2192 DOM\uFF08\u96F6\u731C\u6D4B\u91CD\u5EFA\uFF09
24
- const root = document.createElement('div')
25
- document.body.appendChild(root)
26
- replay(events, root)
27
- assert.ok(root.childNodes.length > 0, '\u56DE\u653E\u6E32\u67D3\u975E\u7A7A')
28
-
29
- // \u5185\u5BB9\u65AD\u8A00\uFF1Atag \u8BA1\u6570\u4E0E\u5F55\u5236\u4E00\u81F4\uFF08DOM = fold \u76F4\u63A5\u9A8C\u8BC1\uFF09
30
- ${u}
31
-
32
- // \u6E32\u67D3\u7C7B\u578B\u65AD\u8A00\uFF1A\u6E32\u67D3\u8FC7\u7A0B\u5305\u542B\u7684\u5173\u952E\u4E8B\u4EF6\uFF08\u7CBE\u786E\u63CF\u8FF0\u6E32\u67D3\u505A\u4E86\u4EC0\u4E48\uFF09
33
- const keyTypes = ['node:create', 'prop:update', 'node:insert']
34
- for (const t of keyTypes) {
35
- assert.ok(eventsOf(events, t).length > 0, '\u5305\u542B ' + t + ' \u4E8B\u4EF6')
36
- }
37
- assert.ok(eventsOf(events, 'text:create').length > 0, '\u5305\u542B\u6587\u672C\u521B\u5EFA\u4E8B\u4EF6\uFF08\u6709\u6587\u672C\u5185\u5BB9\uFF09')
38
-
39
- document.body.removeChild(root)
40
- })
41
- `}function Ko(e){let t={};for(let n of e)t[ye(n)]=(t[ye(n)]??0)+1;return Object.entries(t).map(([n,o])=>`${n}\xD7${o}`).join(" ")}function bn(e,t){let n=new R;n.register(R.ROOT,e),e.innerHTML="";let o=0,r=[];return{sync(){let s=t(),a=s.slice(o);r=a;for(let l of a)Ue(l,e,n);return o=s.length,a.length},applied(){return o},lastBatch(){return[...r]}}}function Bo(e,t,n){let o=bn(e,t);return o.sync(),n(()=>{o.sync()})}var Go={"chevron-down":["M6 9l6 6 6-6"],"chevron-up":["M6 15l6-6 6 6"],"chevron-left":["M15 18l-6-6 6-6"],"chevron-right":["M9 18l6-6-6-6"],"arrow-left":["M19 12H5","M12 19l-7-7 7-7"],"arrow-up":["M12 19V5","M5 12l7-7 7 7"],"arrow-down":["M12 5v14","M19 12l-7 7-7-7"],"arrow-right":["M5 12h14","M12 5l7 7-7 7"],sort:["M7 15l5 5 5-5","M7 9l5-5 5 5"],"sort-asc":["M12 19V5","M5 12l7-7 7 7"],"sort-desc":["M12 5v14","M19 12l-7 7-7-7"],check:["M20 6L9 17l-5-5"],close:["M18 6L6 18","M6 6l12 12"],alert:["M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z","M12 9v4","M12 17h.01"],info:["M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20z","M12 16v-4","M12 8h.01"],warning:["M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z","M12 9v4","M12 17h.01"],pause:["M6 4h4v16H6z","M14 4h4v16h-4z"],settings:["M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z","M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0z"],search:["M11 19a8 8 0 1 0 0-16 8 8 0 0 0 0 16z","M21 21l-4.35-4.35"],send:["M22 2L11 13","M22 2l-7 20-4-9-9-4 20-7z"],stop:["M6 6h12v12H6z"],retry:["M1 4v6h6","M23 20v-6h-6","M20.49 9A9 9 0 0 0 5.64 5.64L1 10","M3.51 15a9 9 0 0 0 14.85 3.36L23 14"],upload:["M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4","M17 8l-5-5-5 5","M12 3v12"],trash:["M3 6h18","M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2","M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6h14","M10 11v6","M14 11v6"],edit:["M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7","M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"],plus:["M12 5v14","M5 12h14"],copy:["M20 9h-9a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-9a2 2 0 0 0-2-2z","M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"],eye:["M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z","M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0z"],"eye-off":["M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94","M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19","M14.12 14.12a3 3 0 1 1-4.24-4.24","M1 1l22 22"],star:["M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"],dashboard:["M3 13h8V3H3z","M21 13h-8V9h8z","M21 21h-8v-8h8z","M3 21h8v-8H3z"],grid:["M3 3h7v7H3z","M14 3h7v7h-7z","M14 14h7v7h-7z","M3 14h7v7H3z"],box:["M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z","M3.27 6.96L12 12.01l8.73-5.05","M12 22.08V12"],users:["M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2","M9 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8z","M23 21v-2a4 4 0 0 0-3-3.87","M16 3.13a4 4 0 0 1 0 7.75"],user:["M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2","M12 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8z"],home:["M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z","M9 22V12h6v10"],folder:["M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"],file:["M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z","M13 2v7h7"],"file-text":["M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z","M13 2v7h7","M9 13h6","M9 17h6"],calendar:["M3 5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z","M16 3v4","M8 3v4","M3 11h18"],clock:["M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20z","M12 6v6l4 2"],bell:["M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9","M13.73 21a2 2 0 0 1-3.46 0"],menu:["M3 12h18","M3 6h18","M3 18h18"],activity:["M22 12h-4l-3 9L9 3l-3 9H2"],"trending-up":["M23 6l-9.5 9.5-5-5L1 18","M17 6h6v6"],"trending-down":["M23 18l-9.5-9.5-5 5L1 6","M17 18h6v-6"],database:["M12 8c4.97 0 9-1.34 9-3s-4.03-3-9-3-9 1.34-9 3 4.03 3 9 3z","M21 12c0 1.66-4.03 3-9 3s-9-1.34-9-3","M3 5v14c0 1.66 4.03 3 9 3s9-1.34 9-3V5"],server:["M20 4H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2z","M4 14h16","M20 14a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2","M7 18h.01","M12 18h.01"],heart:["M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"],refresh:["M23 4v6h-6","M1 20v-6h6","M3.51 9a9 9 0 0 1 14.85-3.36L23 10","M20.49 15a9 9 0 0 1-14.85 3.36L1 14"],message:["M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"],inbox:["M22 12h-6l-2 3h-4l-2-3H2","M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"],shield:["M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"],zap:["M13 2L3 14h9l-1 8 10-12h-9l1-8z"],target:["M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20z","M12 18a6 6 0 1 0 0-12 6 6 0 0 0 0 12z","M12 14a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"],mail:["M4 4h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z","M22 6l-10 7L2 6"],"external-link":["M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6","M15 3h6v6","M10 14L21 3"],"log-out":["M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4","M16 17l5-5-5-5","M21 12H9"],lock:["M5 11h14a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2z","M7 11V7a5 5 0 0 1 10 0v4"],list:["M8 6h13","M8 12h13","M8 18h13","M3 6h.01","M3 12h.01","M3 18h.01"],"bar-chart":["M12 20V10","M18 20V4","M6 20v-4"],gauge:["M12 15l3.5-3.5","M20.39 18.39A10 10 0 1 0 3.61 18.39","M12 15a2 2 0 1 0 0 4 2 2 0 0 0 0-4z"],paperclip:["M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"],filter:["M22 3H2l8 9.46V19l4 2v-8.54L22 3z"],layers:["M12 2L2 7l10 5 10-5-10-5z","M2 17l10 5 10-5","M2 12l10 5 10-5"],"map-pin":["M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z","M15 10a3 3 0 1 1-6 0 3 3 0 0 1 6 0z"],"book-open":["M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z","M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"],github:["M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"],tag:["M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z","M7 7h.01"],phone:["M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"],"more-vertical":["M12 7a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z","M12 13.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z","M12 20a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z"],"check-circle":["M22 11.08V12a10 10 0 1 1-5.93-9.14","M22 4L12 14.01l-3-3"],"alert-circle":["M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20z","M12 8v4","M12 16h.01"],wifi:["M5 12.55a11 11 0 0 1 14.08 0","M1.42 9a16 16 0 0 1 21.16 0","M8.53 16.11a6 6 0 0 1 6.95 0","M12 20h.01"],cpu:["M9 9h6v6H9z","M9 1v4","M15 1v4","M9 19v4","M15 19v4","M1 9h4","M1 15h4","M19 9h4","M19 15h4","M5 5h14v14H5z"],"hard-drive":["M22 12H2","M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z","M6 16h.01","M10 16h.01"],globe:["M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20z","M2 12h20","M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"],briefcase:["M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16","M2 20h20","M4 4h16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z"],layout:["M3 3h18a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z","M9 3v18","M3 9h18"]},wn=async(e,t)=>async n=>{let{name:o,size:r,className:s}=n;return C("svg",{class:`wf-icon${s?" "+s:""}`,width:r??"1em",height:r??"1em",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":1.8,"stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true",focusable:"false"},Go[o].map(a=>C("path",{d:a})))};var En=async(e,t)=>{let n=!1,o=t.ui.usePopup({presence:!0,trapFocus:!0,lockScroll:!0,positioning:"none",closeOnOutside:!1,closeOnEscape:!1,isOpen:()=>n,setOpen:()=>{}}),r;return t.ui.useGlobalKey(s=>{s.key==="Escape"&&o.phase==="open"&&r?.()}),async s=>{let{open:a,title:l,onClose:u,children:i,footer:d,width:c,closable:p=!0,maskClosable:m=!0}=s;r=u,n=!!a;let f=t?.i18n?.components?.Modal??{},b=o.sync(n);if(b==="closed")return null;let w=C("div",{class:"wf-modal-overlay",onClick:m?u:void 0}),h=p?C("button",{class:"wf-modal-close",onClick:u,type:"button","aria-label":f.closeAria??"\u5173\u95ED"},C(wn,{name:"close"})):null,k=l?C("div",{class:"wf-modal-header"},[l,h].filter(Boolean)):null,g=C("div",{class:"wf-modal-body"},i),E=d?C("div",{class:"wf-modal-footer"},d):null,S=C("div",{class:"wf-modal-content",onClick:N=>N.stopPropagation(),style:c?{minWidth:`min(${c}, calc(100vw - 32px))`,maxWidth:`min(${c}, calc(100vw - 32px))`}:void 0},[k,g,E].filter(Boolean)),T=C("div",{class:`wf-modal ${b==="exit"?"wf-modal--exit":"wf-modal--enter"}`,role:"dialog","aria-modal":"true","aria-label":l??f.ariaLabel??"\u5F39\u7A97"},[w,S]);return o.portal(T,"modal")}};var yt=async(e,t)=>async n=>{let{variant:o="primary",size:r="md",block:s,loading:a,disabled:l,type:u,onClick:i,children:d}=n,c=["wf-btn",`wf-btn--${o}`,`wf-btn--${r}`,s&&"wf-btn--block",a&&"wf-btn--loading"].filter(Boolean).join(" "),p=t?.i18n?.components?.Button??{};return C("button",{id:n.id,title:n.title,class:c,type:u??"button",disabled:l||a||void 0,"aria-busy":a||void 0,onClick:i},a?[C("span",{class:"wf-btn-spinner"}),p.loading??"\u52A0\u8F7D\u4E2D..."]:d)};var mi=D(),xn=async(e,t)=>async n=>{let{open:o=!1,title:r,message:s,confirmText:a,cancelText:l,variant:u="primary",width:i,maskClosable:d=!1,onConfirm:c,onCancel:p}=n,m=t?.i18n?.components?.Confirm??{},f=[C(yt,{variant:"secondary",size:"md",onClick:()=>p?.()},l??m.cancelText??"\u53D6\u6D88"),C(yt,{variant:u,size:"md",onClick:()=>c?.()},a??m.confirmText??"\u786E\u5B9A")];return C(En,{open:o,title:r,onClose:p??n.onClose,maskClosable:d,footer:f,width:i,closable:!1},s)};function Jo(){return e=>(e.confirm=(t,n)=>Xo(t,n??{},e),e)}function Xo(e,t,n){return new Promise(o=>{let r=document.createElement("div");document.body.appendChild(r);let s=!1,a=!0,u=Ie(C(async(c,p)=>async()=>C("div",{class:"wf-confirm-host"},C(xn,{open:a,title:t.title,onCancel:()=>{s||(s=!0,a=!1,o(!1),p.ui.render())},onConfirm:()=>{s||(s=!0,a=!1,o(!0),p.ui.render())},message:e})),{}),r,{ctx:{...n}}),i=()=>{u.unmount(),r.remove()},d=document.querySelector("#__wf_portal .wf-modal");if(d&&typeof d.addEventListener=="function"){let c=!1,p=()=>{c||(c=!0,i())};J(d,"animationend",p,!0),setTimeout(p,600)}else i()})}function Yo(){return e=>(e.toast=(t,n="info")=>Qo(t,n),e)}function Qo(e,t){let n=document.createElement("div");n.className="wf-toast-host",n.style.cssText="position:fixed;top:16px;right:16px;z-index:var(--wf-z-toast,9999)",document.body.appendChild(n);let r=Ie(C(async()=>async()=>C("div",{class:`wf-toast wf-toast--${t}`},C("span",{class:"wf-toast-msg"},e)),{}),n);setTimeout(()=>{r.unmount(),n.remove()},3e3)}export{ne as App,q as Fragment,R as NodeRegistry,te as Portal,He as Scheduler,A as addGlobalListener,jn as animateOut,Wn as api,Ue as applyEvent,Fn as auth,Bo as autoSync,Ne as bindDelegated,J as bindElementListener,I as buildVNode,D as createClientBrowser,wt as createEventStream,ve as createPortal,Ie as createRoot,Oo as createRouter,Gn as createStore,bn as createSync,ut as createV3Ui,Fo as deserializeEvents,re as ensureDelegationRoot,de as ensurePortalContainer,y as ev,An as evKey,Io as eventsOf,$o as eventsToHtml,Do as expectEventSequence,nt as getAppFactory,C as h,Uo as hasEvent,Kn as i18n,W as isVNode,we as jsx,bt as jsxDEV,vt as jsxs,ie as mount,F as patch,qo as recordToTest,Jn as registerApp,Un as removeDelegationRoot,Wo as renderToEventStream,jo as renderToEvents,Ro as replay,Xn as resetAppRegistry,me as scheduler,zo as serializeEvents,v as stream,Ko as summarizeEvents,Te as unbindAll,Tt as unbindEvent,Ho as undo,Jo as v3Confirm,Yo as v3Toast,qn as ws};
@@ -1,4 +0,0 @@
1
- /**
2
- * weifuwu/ui-dom JSX 运行时(jsxImportSource: weifuwu/ui-dom)
3
- */
4
- export { jsx, jsxs, jsxDEV, Fragment } from './vnode.ts';
@@ -1 +0,0 @@
1
- var r=Symbol("v3-fragment");function t(n,e,o){let i=e?{...e}:{};return delete i.key,{type:n,props:i,key:o??e?.key??null}}var p=t;function l(n,e,o){return t(n,e,o)}export{r as Fragment,t as jsx,l as jsxDEV,p as jsxs};
@@ -1,69 +0,0 @@
1
- /**
2
- * weifuwu i18n — 英文组件文案
3
- */
4
- export declare const enUS: {
5
- components: {
6
- Editor: {
7
- 'ai-polish': string;
8
- 'ai-translate': string;
9
- 'ai-shorten': string;
10
- 'ai-expand': string;
11
- 'ai-fix': string;
12
- generating: string;
13
- failed: string;
14
- reject: string;
15
- accept: string;
16
- retry: string;
17
- linkTitle: string;
18
- imageTitle: string;
19
- };
20
- Button: {
21
- loading: string;
22
- };
23
- FileUpload: {
24
- placeholder: string;
25
- supportedFormats: string;
26
- maxSize: string;
27
- remove: string;
28
- };
29
- Pagination: {
30
- ariaLabel: string;
31
- };
32
- ProgressBar: {
33
- ariaLabel: string;
34
- };
35
- Switch: {
36
- ariaLabel: string;
37
- };
38
- Breadcrumb: {
39
- ariaLabel: string;
40
- };
41
- Modal: {
42
- ariaLabel: string;
43
- closeAria: string;
44
- };
45
- Confirm: {
46
- confirmText: string;
47
- cancelText: string;
48
- };
49
- Drawer: {
50
- ariaLabel: string;
51
- closeAria: string;
52
- };
53
- DatePicker: {
54
- w0: string;
55
- w1: string;
56
- w2: string;
57
- w3: string;
58
- w4: string;
59
- w5: string;
60
- w6: string;
61
- hour: string;
62
- minute: string;
63
- time: string;
64
- confirm: string;
65
- cancel: string;
66
- placeholder: string;
67
- };
68
- };
69
- };
@@ -1,69 +0,0 @@
1
- /**
2
- * weifuwu i18n — 中文组件文案(缺省值)
3
- */
4
- export declare const zhCN: {
5
- components: {
6
- Button: {
7
- loading: string;
8
- };
9
- FileUpload: {
10
- placeholder: string;
11
- supportedFormats: string;
12
- maxSize: string;
13
- remove: string;
14
- };
15
- Editor: {
16
- 'ai-polish': string;
17
- 'ai-translate': string;
18
- 'ai-shorten': string;
19
- 'ai-expand': string;
20
- 'ai-fix': string;
21
- generating: string;
22
- failed: string;
23
- reject: string;
24
- accept: string;
25
- retry: string;
26
- linkTitle: string;
27
- imageTitle: string;
28
- };
29
- Pagination: {
30
- ariaLabel: string;
31
- };
32
- ProgressBar: {
33
- ariaLabel: string;
34
- };
35
- Switch: {
36
- ariaLabel: string;
37
- };
38
- Breadcrumb: {
39
- ariaLabel: string;
40
- };
41
- Modal: {
42
- ariaLabel: string;
43
- closeAria: string;
44
- };
45
- Confirm: {
46
- confirmText: string;
47
- cancelText: string;
48
- };
49
- Drawer: {
50
- ariaLabel: string;
51
- closeAria: string;
52
- };
53
- DatePicker: {
54
- w0: string;
55
- w1: string;
56
- w2: string;
57
- w3: string;
58
- w4: string;
59
- w5: string;
60
- w6: string;
61
- hour: string;
62
- minute: string;
63
- time: string;
64
- confirm: string;
65
- cancel: string;
66
- placeholder: string;
67
- };
68
- };
69
- };
@@ -1,91 +0,0 @@
1
- /**
2
- * weifuwu/ui-dom api — HTTP 客户端中间件
3
- *
4
- * 注入 ctx.api,提供类型友好的 fetch 封装。
5
- * 支持 baseURL、默认 headers、请求/响应拦截器。
6
- *
7
- * ```ts
8
- * import { UIRouter, api } from 'weifuwu/ui-dom'
9
- *
10
- * const app = new UIRouter()
11
- * app.use(api({ baseURL: '/api' }))
12
- *
13
- * // 在组件中:
14
- * function UsersPage(_props: {}, ctx: WfuiContext) {
15
- * const [users, { loading }] = createResource(() => ctx.api.get<User[]>('/users'))
16
- * // ...
17
- * }
18
- * ```
19
- */
20
- import type { AppMiddleware } from '../types.ts';
21
- export interface ApiOptions {
22
- /** API 基础路径 */
23
- baseURL?: string;
24
- /** 默认请求头 */
25
- headers?: Record<string, string>;
26
- /** 动态鉴权 token:非空时自动加 `Authorization: Bearer <token>`(请求头未显式指定时) */
27
- token?: () => string | null;
28
- /** 请求拦截器 */
29
- onRequest?: (req: {
30
- url: string;
31
- init: RequestInit;
32
- }) => {
33
- url: string;
34
- init: RequestInit;
35
- };
36
- /** 响应拦截器 */
37
- onResponse?: <T>(res: Response) => Promise<T>;
38
- /** 请求超时(ms), 默认 0 = 无超时 */
39
- timeout?: number;
40
- /** 401 回调(token 过期/无效——刷新凭证或跳转登录;403 不触发——权限不足非认证问题)。
41
- * async 可返回 true = 已恢复(如 refresh 成功)→ 重试原请求一次;false/void = 未恢复 → 抛 ApiError */
42
- onUnauthorized?: () => Promise<boolean> | boolean | void;
43
- }
44
- export interface ApiClient {
45
- get: <T>(url: string, options?: ApiRequestOptions) => Promise<T>;
46
- post: <T>(url: string, body?: unknown, options?: ApiRequestOptions) => Promise<T>;
47
- put: <T>(url: string, body?: unknown, options?: ApiRequestOptions) => Promise<T>;
48
- patch: <T>(url: string, body?: unknown, options?: ApiRequestOptions) => Promise<T>;
49
- delete: <T>(url: string, options?: ApiRequestOptions) => Promise<T>;
50
- }
51
- export interface ApiRequestOptions {
52
- headers?: Record<string, string>;
53
- /** 自定义 signal(用于 AbortController) */
54
- signal?: AbortSignal;
55
- }
56
- /**
57
- * API 客户端中间件 — 注入 ctx.api
58
- *
59
- * ```ts
60
- * app.use(api({ baseURL: import.meta.env.VITE_API_URL || '/api' }))
61
- *
62
- * // 组件中使用
63
- * const users = await ctx.api.get<User[]>('/users')
64
- * await ctx.api.post('/users', { name: 'Alice' })
65
- * await ctx.api.put('/users/1', { name: 'Bob' })
66
- * await ctx.api.delete('/users/1')
67
- * ```
68
- */
69
- /** api 中间件注入到 ctx 的字段 */
70
- export interface ApiInjected {
71
- api: ApiClient;
72
- }
73
- export declare function api(options?: ApiOptions): AppMiddleware<{}, ApiInjected>;
74
- /**
75
- * API 错误 — 包含 HTTP 状态码和响应文本。
76
- *
77
- * ```ts
78
- * try {
79
- * await ctx.api.get('/users')
80
- * } catch (e) {
81
- * if (e instanceof ApiError) {
82
- * console.log(e.status, e.message)
83
- * }
84
- * }
85
- * ```
86
- */
87
- export declare class ApiError extends Error {
88
- status: number;
89
- body: string;
90
- constructor(status: number, body: string);
91
- }
@@ -1,30 +0,0 @@
1
- /**
2
- * weifuwu/ui-dom auth — 认证状态管理中间件
3
- *
4
- * 管理 token 存储、登录/登出、当前用户信息。
5
- * 不依赖 signal,状态为普通对象,组件通过 ctx.ui.render() 刷新。
6
- */
7
- import type { AppMiddleware } from '../types.ts';
8
- export interface AuthOptions {
9
- storage?: Storage;
10
- tokenKey?: string;
11
- userKey?: string;
12
- refreshTokenKey?: string;
13
- refreshEndpoint?: string;
14
- /** 注入完成后回调(暴露 authClient——api 中间件 onUnauthorized 等需要调 refresh 的场景) */
15
- onAuth?: (auth: AuthClient) => void;
16
- }
17
- export interface AuthClient {
18
- token: string | null;
19
- user: any;
20
- isLoggedIn: boolean;
21
- login: (token: string, user: any, refreshToken?: string) => void;
22
- logout: () => void;
23
- setUser: (user: any) => void;
24
- refresh: () => Promise<boolean>;
25
- }
26
- /** auth 中间件注入到 ctx 的字段 */
27
- export interface AuthInjected {
28
- auth: AuthClient;
29
- }
30
- export declare function auth(options?: AuthOptions): AppMiddleware<{}, AuthInjected>;
@@ -1,33 +0,0 @@
1
- /**
2
- * ws middleware — 注入 ctx.ws
3
- *
4
- * WebSocket 客户端,自动重连,支持房间。
5
- * 状态为普通值,组件通过 ctx.ui.render() 刷新。
6
- */
7
- import type { AppMiddleware } from '../types.ts';
8
- export interface WsOptions {
9
- url?: string;
10
- reconnectInterval?: number;
11
- maxReconnect?: number;
12
- pingInterval?: number;
13
- pingTimeout?: number;
14
- }
15
- /** ws 中间件注入到 ctx 的字段 */
16
- /** ws 连接状态(页面清晰显示——用户要求"ws 链接状态一定要清晰") */
17
- export type WsStatus = 'connecting' | 'connected' | 'disconnected';
18
- /** ws 中间件注入的客户端形状(与 WfuiContext.ws 一致) */
19
- export interface WsClient {
20
- send: (msg: unknown) => void;
21
- onMessage: (fn: (data: unknown) => void) => () => void;
22
- isConnected: boolean;
23
- /** 连接状态通知(open → connected / close → disconnected(重连中)/
24
- * 首次连接前 connecting)——页面渲染 + 状态清晰显示;payload 含重连信息 */
25
- onStatusChange: (fn: (status: WsStatus, detail?: {
26
- attempt: number;
27
- max: number;
28
- }) => void) => () => void;
29
- }
30
- export interface WsInjected {
31
- ws: WsClient;
32
- }
33
- export declare function ws(options?: WsOptions): AppMiddleware<{}, WsInjected>;
@@ -1,8 +0,0 @@
1
- /**
2
- * weifuwu/ui-dom — 动效工具
3
- *
4
- * animateOut:挂 --exit 类播退场动画,animationend 后回调。
5
- * - reduced-motion 下动画时长被 _base.css 降为 0.01ms,animationend 立即触发,等效瞬时关闭
6
- * - 兜底 timeout:类未命中动画(防御)或 animationend 丢失时不挂死
7
- */
8
- export declare function animateOut(el: HTMLElement, onDone: () => void, fallbackMs?: number): void;
@@ -1,36 +0,0 @@
1
- /**
2
- * weifuwu/ui-dom 弹层/滚动位置跟踪系统(实例化——serve 每实例一个)
3
- *
4
- * 复制自 client/app.ts 闭包逻辑(createUi 依赖):scroll/resize 时重算弹层
5
- * fixed 坐标(rAF 节流)+ 滚动位置跟踪。vdom3 引擎(createRouter/createRoot)各自持有实例。
6
- */
7
- import type { PopupPosition } from './types.ts';
8
- export interface PopupTrackerEntry {
9
- pos: PopupPosition;
10
- getEl: () => HTMLElement | null;
11
- isOpen: () => boolean;
12
- compute: (rect: DOMRect) => {
13
- top: number;
14
- left: number;
15
- width?: number;
16
- };
17
- panel?: () => HTMLElement | null;
18
- margin: number;
19
- }
20
- export interface ScrollTrackerEntry {
21
- handle: {
22
- y: number;
23
- };
24
- getScroller: () => HTMLElement | Window;
25
- }
26
- export interface PopupTrackerSystem {
27
- popupTrackers: Map<string, PopupTrackerEntry>;
28
- scrollTrackers: Map<string, ScrollTrackerEntry>;
29
- schedulePopupRecompute: () => void;
30
- ensurePopupListeners: () => void;
31
- destroyPopupListeners: () => void;
32
- cleanupTrackers: (id: string) => void;
33
- destroy: () => void;
34
- }
35
- /** 创建跟踪系统实例(renderByIds 用于滚动/resize 后精准刷新目标组件) */
36
- export declare function createPopupTrackerSystem(renderByIds: (ids: string[]) => void): PopupTrackerSystem;