weifuwu 0.87.0 → 0.89.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (392) hide show
  1. package/README.md +111 -135
  2. package/dist/client/components/ActionSheet/ActionSheet.d.ts +1 -1
  3. package/dist/client/components/AiChat/AiChat.d.ts +3 -4
  4. package/dist/client/components/ChatInput/ChatInput.d.ts +5 -0
  5. package/dist/client/components/CitationCard/CitationCard.d.ts +1 -1
  6. package/dist/client/components/Command/Command.d.ts +1 -1
  7. package/dist/client/components/ContextMenu/ContextMenu.d.ts +1 -1
  8. package/dist/client/components/DatePicker/DatePicker.d.ts +1 -1
  9. package/dist/client/components/Dropdown/Dropdown.d.ts +1 -1
  10. package/dist/client/components/Editor/model/html.d.ts +10 -0
  11. package/dist/client/components/ImageCropper/ImageCropper.d.ts +6 -2
  12. package/dist/client/components/Menu/Menu.d.ts +1 -1
  13. package/dist/client/components/NavMenu/NavMenu.d.ts +1 -1
  14. package/dist/client/components/Popconfirm/Popconfirm.d.ts +1 -1
  15. package/dist/client/components/SlideCanvas/SlideCanvas.d.ts +1 -1
  16. package/dist/client/components/Tour/Tour.d.ts +1 -1
  17. package/dist/client/components/TreeSelect/TreeSelect.d.ts +1 -1
  18. package/dist/client/components/index.js +41 -41
  19. package/dist/client/components/style.css +298 -644
  20. package/dist/client/layout/weifuwu-layout.css +286 -640
  21. package/dist/client/vdom/browser/Browser.d.ts +2 -0
  22. package/dist/client/vdom/commands.d.ts +4 -1
  23. package/dist/client/vdom/context/UIContext.d.ts +8 -0
  24. package/dist/client/vdom/core/diff/attrs.d.ts +10 -2
  25. package/dist/client/vdom/core/field/attributes.d.ts +12 -0
  26. package/dist/client/vdom/core/field/events.d.ts +8 -0
  27. package/dist/client/vdom/core/field/input-sync.d.ts +14 -0
  28. package/dist/client/vdom/core/field/key.d.ts +3 -0
  29. package/dist/client/vdom/core/field/props.d.ts +13 -1
  30. package/dist/client/vdom/core/field/ref.d.ts +6 -0
  31. package/dist/client/vdom/core/field/style.d.ts +7 -1
  32. package/dist/client/vdom/core/node/component.d.ts +3 -4
  33. package/dist/client/vdom/core/node/native.d.ts +6 -1
  34. package/dist/client/vdom/core/patch/index.d.ts +24 -1
  35. package/dist/client/vdom/core/patch/processors.d.ts +8 -1
  36. package/dist/client/vdom/core/protocol.d.ts +45 -0
  37. package/dist/client/vdom/core/router.d.ts +7 -0
  38. package/dist/client/vdom/core/ssr/absorb.d.ts +31 -4
  39. package/dist/client/vdom/core/transform/index.d.ts +6 -6
  40. package/dist/client/vdom/core/v2/cycle.d.ts +54 -0
  41. package/dist/client/vdom/core/v2/diff.d.ts +80 -0
  42. package/dist/client/vdom/core/v2/integrate.d.ts +24 -0
  43. package/dist/client/vdom/core/v2/render.d.ts +28 -0
  44. package/dist/client/vdom/core/v2/schedule.d.ts +33 -0
  45. package/dist/client/vdom/core/v2/serve.d.ts +4 -0
  46. package/dist/client/vdom/core/v2/spy.d.ts +21 -0
  47. package/dist/client/vdom/core/v2/ssr.d.ts +14 -0
  48. package/dist/client/vdom/core/vnode.d.ts +9 -6
  49. package/dist/client/vdom/dev/error-counter.d.ts +27 -0
  50. package/dist/client/vdom/dev/render-health.d.ts +60 -0
  51. package/dist/client/vdom/hooks/chat.d.ts +32 -5
  52. package/dist/client/vdom/hooks/drag-media.d.ts +3 -1
  53. package/dist/client/vdom/hooks/env.d.ts +32 -0
  54. package/dist/client/vdom/hooks/popup-manager.d.ts +21 -0
  55. package/dist/client/vdom/hooks/popup.d.ts +4 -1
  56. package/dist/client/vdom/hooks/stable.d.ts +4 -0
  57. package/dist/client/vdom/hooks/use-observable.d.ts +13 -0
  58. package/dist/client/vdom/index.d.ts +14 -6
  59. package/dist/client/vdom/index.js +4 -7
  60. package/dist/client/vdom/jsx-runtime.js +1 -1
  61. package/dist/client/vdom/middlewares/api.d.ts +8 -0
  62. package/dist/client/vdom/middlewares/auth-i18n.d.ts +7 -0
  63. package/dist/client/vdom/middlewares/ws.d.ts +41 -1
  64. package/dist/client/vdom/observable/index.d.ts +13 -0
  65. package/dist/client/vdom/observable/observable.d.ts +26 -0
  66. package/dist/client/vdom/observable/operators.d.ts +76 -0
  67. package/dist/client/vdom/observable/sources.d.ts +54 -0
  68. package/dist/client/vdom/observable/types.d.ts +45 -0
  69. package/dist/client/vdom/store.d.ts +17 -2
  70. package/dist/client/vdom/testing.js +2 -2
  71. package/dist/server/ai/agent.d.ts +18 -0
  72. package/dist/server/ai/client.d.ts +14 -2
  73. package/dist/server/ai/contracts.d.ts +2 -2
  74. package/dist/server/ai/sse.d.ts +6 -0
  75. package/dist/server/core/collect.d.ts +31 -0
  76. package/dist/server/core/error-counter.d.ts +11 -0
  77. package/dist/server/core/hub.d.ts +2 -0
  78. package/dist/server/core/router.d.ts +12 -9
  79. package/dist/server/db/contracts.d.ts +24 -0
  80. package/dist/server/db/memory-redis.d.ts +3 -4
  81. package/dist/server/db/memory-sql.d.ts +20 -4
  82. package/dist/server/db/postgres-server.d.ts +2 -0
  83. package/dist/server/db/query.d.ts +21 -0
  84. package/dist/server/db/redis-server.d.ts +4 -2
  85. package/dist/server/db/sql-parser.d.ts +2 -1
  86. package/dist/server/email/index.d.ts +2 -0
  87. package/dist/server/index.d.ts +4 -1
  88. package/dist/server/index.js +3927 -1982
  89. package/dist/server/messager/index.d.ts +21 -2
  90. package/dist/server/middleware/compress.d.ts +25 -0
  91. package/dist/server/ui/index.d.ts +8 -1
  92. package/dist/server/user/index.d.ts +4 -0
  93. package/dist/shared/router/chain.d.ts +9 -0
  94. package/dist/shared/router/context.d.ts +35 -0
  95. package/dist/shared/router/ctx-fields.d.ts +20 -0
  96. package/dist/shared/router/pipeline.d.ts +70 -0
  97. package/dist/shared/router/trie.d.ts +11 -3
  98. package/dist/shared/router/types.d.ts +23 -0
  99. package/docs/style-guide.md +44 -41
  100. package/package.json +13 -10
  101. package/content/apps/admin.md +0 -55
  102. package/content/apps/agent-platform.md +0 -35
  103. package/content/apps/auth.md +0 -49
  104. package/content/apps/multi.md +0 -44
  105. package/content/apps/todo.md +0 -51
  106. package/content/backend/ai.md +0 -28
  107. package/content/backend/auth.md +0 -20
  108. package/content/backend/email.md +0 -23
  109. package/content/backend/graphql.md +0 -23
  110. package/content/backend/http.md +0 -23
  111. package/content/backend/limit.md +0 -23
  112. package/content/backend/middleware.md +0 -17
  113. package/content/backend/queue.md +0 -23
  114. package/content/backend/redis.md +0 -26
  115. package/content/backend/router.md +0 -23
  116. package/content/backend/schedule.md +0 -23
  117. package/content/backend/sql.md +0 -27
  118. package/content/backend/sse.md +0 -26
  119. package/content/backend/ws.md +0 -26
  120. package/content/capabilities/app-node.md +0 -21
  121. package/content/capabilities/data.md +0 -21
  122. package/content/capabilities/events.md +0 -21
  123. package/content/capabilities/hooks.md +0 -22
  124. package/content/capabilities/i18n.md +0 -21
  125. package/content/capabilities/popup.md +0 -21
  126. package/content/capabilities/render-only.md +0 -23
  127. package/content/capabilities/router.md +0 -22
  128. package/content/capabilities/self-id.md +0 -21
  129. package/content/capabilities/store.md +0 -21
  130. package/content/capabilities/theme.md +0 -21
  131. package/content/capabilities/two-phase.md +0 -21
  132. package/content/components/accordion.md +0 -50
  133. package/content/components/actionsheet.md +0 -46
  134. package/content/components/affix.md +0 -51
  135. package/content/components/aichat.md +0 -57
  136. package/content/components/alert.md +0 -52
  137. package/content/components/alertgroup.md +0 -45
  138. package/content/components/anchor.md +0 -52
  139. package/content/components/app.md +0 -37
  140. package/content/components/approvalcard.md +0 -56
  141. package/content/components/appshell.md +0 -50
  142. package/content/components/aspectratio.md +0 -47
  143. package/content/components/authpage.md +0 -61
  144. package/content/components/autocomplete-v2.md +0 -40
  145. package/content/components/autocomplete.md +0 -56
  146. package/content/components/avatar.md +0 -51
  147. package/content/components/avatargroup.md +0 -47
  148. package/content/components/backtop.md +0 -53
  149. package/content/components/badge.md +0 -55
  150. package/content/components/breadcrumb.md +0 -49
  151. package/content/components/button.md +0 -63
  152. package/content/components/calendar-v2.md +0 -40
  153. package/content/components/calendar.md +0 -50
  154. package/content/components/card.md +0 -58
  155. package/content/components/carousel.md +0 -52
  156. package/content/components/cascader-v2.md +0 -39
  157. package/content/components/cascader.md +0 -54
  158. package/content/components/chart.md +0 -53
  159. package/content/components/chatinput.md +0 -63
  160. package/content/components/checkbox.md +0 -51
  161. package/content/components/checkboxgroup.md +0 -52
  162. package/content/components/citationcard.md +0 -48
  163. package/content/components/codeblock.md +0 -48
  164. package/content/components/codeeditor.md +0 -47
  165. package/content/components/collapse.md +0 -49
  166. package/content/components/colorpicker.md +0 -50
  167. package/content/components/command.md +0 -50
  168. package/content/components/confirm.md +0 -57
  169. package/content/components/contextmenu.md +0 -48
  170. package/content/components/copybutton.md +0 -51
  171. package/content/components/datepicker.md +0 -52
  172. package/content/components/descriptions-v2.md +0 -39
  173. package/content/components/descriptions.md +0 -52
  174. package/content/components/diffview-v2.md +0 -39
  175. package/content/components/diffview.md +0 -50
  176. package/content/components/divider.md +0 -48
  177. package/content/components/drawer.md +0 -55
  178. package/content/components/dropdown.md +0 -53
  179. package/content/components/editor.md +0 -49
  180. package/content/components/emptystate.md +0 -51
  181. package/content/components/exportcsv.md +0 -38
  182. package/content/components/field.md +0 -54
  183. package/content/components/filepreview-office.md +0 -37
  184. package/content/components/filepreview.md +0 -49
  185. package/content/components/filetree.md +0 -56
  186. package/content/components/fileupload-v2.md +0 -39
  187. package/content/components/fileupload.md +0 -57
  188. package/content/components/floatbutton.md +0 -52
  189. package/content/components/form-v2.md +0 -41
  190. package/content/components/form.md +0 -60
  191. package/content/components/grid.md +0 -51
  192. package/content/components/highlight-v2.md +0 -39
  193. package/content/components/highlight.md +0 -46
  194. package/content/components/hovercard.md +0 -51
  195. package/content/components/icon.md +0 -50
  196. package/content/components/imagecropper.md +0 -45
  197. package/content/components/img.md +0 -56
  198. package/content/components/infinitescroll-v2.md +0 -40
  199. package/content/components/infinitescroll.md +0 -54
  200. package/content/components/input.md +0 -65
  201. package/content/components/inputnumber.md +0 -58
  202. package/content/components/inview.md +0 -56
  203. package/content/components/jsonschemaform.md +0 -53
  204. package/content/components/jsonviewer-v2.md +0 -39
  205. package/content/components/jsonviewer.md +0 -49
  206. package/content/components/kanban.md +0 -46
  207. package/content/components/label.md +0 -48
  208. package/content/components/layout.md +0 -54
  209. package/content/components/layoutcontent.md +0 -43
  210. package/content/components/layoutheader.md +0 -43
  211. package/content/components/layoutsider.md +0 -43
  212. package/content/components/link.md +0 -52
  213. package/content/components/list.md +0 -44
  214. package/content/components/loading.md +0 -45
  215. package/content/components/logviewer-v2.md +0 -39
  216. package/content/components/logviewer.md +0 -53
  217. package/content/components/markdown.md +0 -51
  218. package/content/components/markdowneditor.md +0 -47
  219. package/content/components/math.md +0 -42
  220. package/content/components/mentions-v2.md +0 -39
  221. package/content/components/mentions.md +0 -52
  222. package/content/components/menu.md +0 -56
  223. package/content/components/menubar.md +0 -44
  224. package/content/components/messagebubble.md +0 -50
  225. package/content/components/modal.md +0 -59
  226. package/content/components/navmenu.md +0 -47
  227. package/content/components/notification.md +0 -51
  228. package/content/components/pageheader.md +0 -53
  229. package/content/components/pagination.md +0 -49
  230. package/content/components/paragraph.md +0 -45
  231. package/content/components/passwordinput.md +0 -57
  232. package/content/components/pininput-v2.md +0 -39
  233. package/content/components/pininput.md +0 -50
  234. package/content/components/pipeline.md +0 -49
  235. package/content/components/popconfirm.md +0 -58
  236. package/content/components/popover.md +0 -61
  237. package/content/components/progressbar.md +0 -50
  238. package/content/components/prompttemplate.md +0 -49
  239. package/content/components/qrcode.md +0 -50
  240. package/content/components/radiogroup.md +0 -53
  241. package/content/components/rate.md +0 -53
  242. package/content/components/reasoningblock.md +0 -47
  243. package/content/components/relationgraph.md +0 -52
  244. package/content/components/resizable.md +0 -53
  245. package/content/components/result.md +0 -49
  246. package/content/components/scrollbar.md +0 -49
  247. package/content/components/searchinput.md +0 -51
  248. package/content/components/segmentedcontrol.md +0 -59
  249. package/content/components/select-searchable.md +0 -47
  250. package/content/components/select.md +0 -66
  251. package/content/components/sessionlist.md +0 -52
  252. package/content/components/sheetgrid.md +0 -44
  253. package/content/components/skeleton.md +0 -55
  254. package/content/components/slidecanvas.md +0 -44
  255. package/content/components/slider.md +0 -62
  256. package/content/components/sortablelist.md +0 -39
  257. package/content/components/space.md +0 -52
  258. package/content/components/sparkline.md +0 -52
  259. package/content/components/statcard-countdown.md +0 -39
  260. package/content/components/statcard.md +0 -56
  261. package/content/components/steps.md +0 -48
  262. package/content/components/switch.md +0 -50
  263. package/content/components/tabbar.md +0 -45
  264. package/content/components/table-v2.md +0 -40
  265. package/content/components/table.md +0 -66
  266. package/content/components/tabs.md +0 -56
  267. package/content/components/tag.md +0 -51
  268. package/content/components/tagsinput-v2.md +0 -39
  269. package/content/components/tagsinput.md +0 -54
  270. package/content/components/text.md +0 -45
  271. package/content/components/textarea.md +0 -57
  272. package/content/components/themeswitch.md +0 -69
  273. package/content/components/timeline.md +0 -50
  274. package/content/components/title.md +0 -45
  275. package/content/components/toast.md +0 -52
  276. package/content/components/toggle-togglegroup.md +0 -52
  277. package/content/components/togglegroup.md +0 -47
  278. package/content/components/toolcallcard.md +0 -51
  279. package/content/components/tooltip.md +0 -50
  280. package/content/components/tour.md +0 -50
  281. package/content/components/transfer.md +0 -52
  282. package/content/components/tree-v2.md +0 -39
  283. package/content/components/tree.md +0 -59
  284. package/content/components/treeselect.md +0 -54
  285. package/content/components/typography.md +0 -51
  286. package/content/components/videoplayer.md +0 -52
  287. package/content/components/virtuallist.md +0 -52
  288. package/content/components/virtualtable-v2.md +0 -39
  289. package/content/components/virtualtable.md +0 -55
  290. package/content/components/watermark.md +0 -53
  291. package/content/components/wave.md +0 -43
  292. package/content/guides/ai-chat-family.md +0 -24
  293. package/content/guides/choose.md +0 -67
  294. package/content/guides/component-model.md +0 -32
  295. package/content/guides/component-standards.md +0 -123
  296. package/content/guides/components-guide.md +0 -813
  297. package/content/guides/custom-component.md +0 -321
  298. package/content/guides/data-guide.md +0 -281
  299. package/content/guides/file-preview-family.md +0 -18
  300. package/content/guides/frontend.md +0 -968
  301. package/content/guides/layout-choice.md +0 -64
  302. package/content/guides/layout-guide.md +0 -241
  303. package/content/guides/middleware.md +0 -459
  304. package/content/guides/mobile-guide.md +0 -105
  305. package/content/guides/page-building.md +0 -98
  306. package/content/guides/production.md +0 -37
  307. package/content/guides/quality.md +0 -60
  308. package/content/guides/realtime-guide.md +0 -296
  309. package/content/guides/render-only.md +0 -44
  310. package/content/guides/saas-guide.md +0 -253
  311. package/content/guides/server-guide.md +0 -359
  312. package/content/guides/start.md +0 -41
  313. package/content/guides/styling.md +0 -154
  314. package/content/guides/ui-dom-guide.md +0 -157
  315. package/content/index.json +0 -4344
  316. package/content/index.md +0 -181
  317. package/content/layout/align.md +0 -20
  318. package/content/layout/anchor.md +0 -19
  319. package/content/layout/app-shell.md +0 -23
  320. package/content/layout/border.md +0 -20
  321. package/content/layout/center.md +0 -19
  322. package/content/layout/cluster.md +0 -19
  323. package/content/layout/container.md +0 -19
  324. package/content/layout/fill.md +0 -19
  325. package/content/layout/grid.md +0 -19
  326. package/content/layout/hidden.md +0 -22
  327. package/content/layout/layer.md +0 -19
  328. package/content/layout/position.md +0 -22
  329. package/content/layout/row.md +0 -23
  330. package/content/layout/safe-area.md +0 -20
  331. package/content/layout/scroll.md +0 -21
  332. package/content/layout/spacing.md +0 -22
  333. package/content/layout/split.md +0 -19
  334. package/content/layout/stack.md +0 -19
  335. package/content/layout/surface.md +0 -23
  336. package/content/layout/text.md +0 -22
  337. package/content/patterns/app-shell.md +0 -34
  338. package/content/patterns/dashboard.md +0 -36
  339. package/content/patterns/data-screen.md +0 -30
  340. package/content/patterns/detail-page.md +0 -31
  341. package/content/patterns/docs.md +0 -34
  342. package/content/patterns/focus-task.md +0 -34
  343. package/content/patterns/landing.md +0 -35
  344. package/content/patterns/list-page.md +0 -32
  345. package/content/patterns/mobile.md +0 -31
  346. package/content/patterns/settings-page.md +0 -33
  347. package/content/patterns/workspace.md +0 -32
  348. package/dist/cli/content-sync.test.d.ts +0 -1
  349. package/dist/cli/docs-cli.test.d.ts +0 -1
  350. package/dist/cli/docs.d.ts +0 -2
  351. package/dist/cli/docs.mjs +0 -10961
  352. package/dist/client/vdom/core/build.d.ts +0 -36
  353. package/dist/client/vdom/core/diff/children.d.ts +0 -29
  354. package/dist/client/vdom/core/diff/index.d.ts +0 -22
  355. package/dist/client/vdom/core/diff/output.d.ts +0 -30
  356. package/dist/client/vdom/core/diff/same.d.ts +0 -22
  357. package/dist/client/vdom/core/serve.d.ts +0 -75
  358. package/dist/client/vdom/core/ssr/index.d.ts +0 -25
  359. package/examples/apps/admin/README.md +0 -23
  360. package/examples/apps/admin/api.ts +0 -27
  361. package/examples/apps/admin/app.tsx +0 -144
  362. package/examples/apps/admin/main.tsx +0 -8
  363. package/examples/apps/admin/server.ts +0 -37
  364. package/examples/apps/auth/README.md +0 -23
  365. package/examples/apps/auth/api.ts +0 -49
  366. package/examples/apps/auth/app.tsx +0 -137
  367. package/examples/apps/auth/main.tsx +0 -8
  368. package/examples/apps/auth/server.ts +0 -37
  369. package/examples/apps/multi/README.md +0 -23
  370. package/examples/apps/multi/app.tsx +0 -83
  371. package/examples/apps/multi/main.tsx +0 -8
  372. package/examples/apps/multi/server.ts +0 -33
  373. package/examples/apps/todo/README.md +0 -23
  374. package/examples/apps/todo/api.ts +0 -26
  375. package/examples/apps/todo/app.tsx +0 -128
  376. package/examples/apps/todo/main.tsx +0 -9
  377. package/examples/apps/todo/server.ts +0 -39
  378. package/examples/hello-world/README.md +0 -9
  379. package/examples/hello-world/client.ts +0 -14
  380. package/examples/hello-world/routes.tsx +0 -26
  381. package/examples/hello-world/server.ts +0 -46
  382. package/examples/patterns/AppShell.tsx +0 -224
  383. package/examples/patterns/Dashboard.tsx +0 -153
  384. package/examples/patterns/DataScreen.tsx +0 -104
  385. package/examples/patterns/DetailPage.tsx +0 -79
  386. package/examples/patterns/Docs.tsx +0 -105
  387. package/examples/patterns/FocusTask.tsx +0 -67
  388. package/examples/patterns/Landing.tsx +0 -90
  389. package/examples/patterns/ListPage.tsx +0 -77
  390. package/examples/patterns/Mobile.tsx +0 -154
  391. package/examples/patterns/SettingsPage.tsx +0 -98
  392. package/examples/patterns/SplitWorkspace.tsx +0 -113
@@ -1,8 +1,5 @@
1
- function Se(n){let e=n?.key;return e==null?null:typeof e=="string"?e:typeof e=="number"?String(e):(console.warn(`[vdom] key \u5FC5\u987B\u662F string|number\u2014\u2014\u5F53\u524D ${typeof e}\uFF08\u5FFD\u7565\u2014\u2014\u4F4D\u7F6E\u8EAB\u4EFD\uFF09`),null)}function Ne(n){let e={...n??{}};return delete e.key,e}function $(n,e,...t){let o=Ne(e);return t.length===1?o.children=t[0]:t.length>1&&(o.children=t),{type:n,props:o,key:Se(e)}}function Re(n,e,t){return{type:n,props:Ne(e),key:t??Se(e)??null}}var Bt=Re,_t=Re;var Be=Symbol("vdom-fragment");function q(n){return n.type===Be}function Ie(){return{children:new Map}}function Ve(n){return n.split("/").filter(Boolean)}function jt(n,e,t){let o=e.slice(1);if(!n.children.has(":")){let s=t();s.param=o,n.children.set(":",s)}let r=n.children.get(":");if(r.param!==o)throw new Error(`[router] param conflict: ":${r.param}" already registered, cannot register ":${o}"`);return r}function zt(n,e,t){return e==="*"?(n.wildcard=!0,n):e.startsWith(":")?jt(n,e,t):(n.children.has(e)||n.children.set(e,t()),n.children.get(e))}function je(n,e,t,o=!1){let r=Ve(e),s=n;for(let i of r){if(i==="*")return s.wildcard=!0,s.wildcardValue=t,s;s=zt(s,i,()=>Ie())}return o?s.wildcardValue=t:s.value=t,s}function ze(n,e){let t={};if(e.length===0)return n.value!==void 0?(n.wildcardValue!==void 0&&(t["*"]=""),{value:n.value,params:t,wildcard:!1}):n.wildcardValue!==void 0?{value:n.wildcardValue,params:t,wildcard:!0}:null;let o=n;for(let r=0;r<e.length;r++){let s=Ge(o,e[r],t);if(!s)return _e(n,e,r,t);o=s}return o.value!==void 0?(o.wildcardValue!==void 0&&(t["*"]=""),{value:o.value,params:t,wildcard:!1}):_e(n,e,e.length,t)}function _e(n,e,t,o){let r=n;for(let s=0;s<t;s++){if(r.wildcardValue!==void 0)return o["*"]=e.slice(s).join("/"),{value:r.wildcardValue,params:o,wildcard:!0};let i=Ge(r,e[s],o);if(!i)return null;r=i}return r.wildcardValue!==void 0?(o["*"]=e.slice(t).join("/"),{value:r.wildcardValue,params:o,wildcard:!0}):null}function Ge(n,e,t){if(n.children.has(e))return n.children.get(e);if(n.children.has(":")){let o=n.children.get(":");return o.param&&(t[o.param]=decodeURIComponent(e)),o}return null}function se(n){return new Request(new URL(n,"http://localhost"))}var Pe=class{root=Ie();notFoundHandler=null;get(e,t){return je(this.root,e,t),this}notFound(e){return this.notFoundHandler=e,this}async resolve(e,t){let o=new URL(e.url),r=Ve(o.pathname),s=ze(this.root,r),i=s?.value??this.notFoundHandler;if(!i)return new Response(null,{status:404});let a={};return s&&Object.assign(a,s.params),t.params=a,t.query=Object.fromEntries(o.searchParams),i(e,t)}};function Je(n){try{if(typeof document>"u")return;let e=document.createElement("textarea");e.value=n,e.style.position="fixed",e.style.opacity="0",e.setAttribute("readonly",""),document.body.appendChild(e),e.select();let t=document.execCommand("copy");e.remove(),!t&&typeof console<"u"&&console.warn("[browser] copyText \u964D\u7EA7\u5931\u8D25\uFF08execCommand \u8FD4\u56DE false\uFF09")}catch{}}function Ae(){let n=()=>typeof document<"u"?document.documentElement:null,e=()=>typeof document<"u"?document.scrollingElement??document.documentElement:null;return{get window(){return typeof window<"u"?window:void 0},get document(){return typeof document<"u"?document:void 0},copyText(t){if(typeof navigator<"u"&&navigator.clipboard?.writeText){navigator.clipboard.writeText(t).catch(()=>Je(t));return}Je(t)},downloadFile(t,o,r="text/plain"){try{let s=typeof document<"u"?document:null;if(!s)return!1;let i=new Blob([o],{type:r}),a=URL.createObjectURL(i),l=s.createElement("a");return l.href=a,l.download=t,l.click(),URL.revokeObjectURL(a),!0}catch{return!1}},activeElement:()=>typeof document<"u"?document.activeElement:null,byId:t=>typeof document<"u"?document.getElementById(t):null,query:t=>typeof document<"u"?document.querySelector(t):null,queryAll:t=>typeof document<"u"?document.querySelectorAll(t):null,createElement:t=>typeof document<"u"?document.createElement(t):null,createElementNS:(t,o)=>typeof document<"u"?document.createElementNS(t,o):null,createDocumentFragment:()=>typeof document<"u"?document.createDocumentFragment():null,createComment:t=>typeof document<"u"?document.createComment(t):null,createTextNode:t=>typeof document<"u"?document.createTextNode(t):null,addEventListener:(t,o,r)=>{typeof window<"u"&&window.addEventListener(t,o,r)},removeEventListener:(t,o,r)=>{typeof window<"u"&&window.removeEventListener(t,o,r)},scrollTo:t=>{typeof window<"u"&&window.scrollTo(0,t)},scrollTop:()=>e()?.scrollTop??0,matchMedia:t=>typeof window<"u"&&typeof window.matchMedia=="function"?window.matchMedia(t):null,visualViewport:()=>typeof window<"u"?window.visualViewport??null:null,scrollingElement:()=>e(),bodyElement:()=>typeof document<"u"?document.body:null,bodyAppend:t=>{typeof document<"u"&&document.body.appendChild(t)},bodyRemove:t=>{typeof document<"u"&&document.body.contains(t)&&document.body.removeChild(t)},clearBody:()=>{typeof document<"u"&&(document.body.innerHTML="")},event:(t,o)=>typeof window<"u"?new window.Event(t,o):new Event(t,o),rootElement:()=>n(),getSelection:()=>typeof window<"u"?window.getSelection():null,selectionText:()=>typeof window<"u"?window.getSelection()?.toString()??"":"",storageGet:t=>{try{return typeof window<"u"?window.localStorage.getItem(t):null}catch{return null}},storageSet:(t,o)=>{try{typeof window<"u"&&window.localStorage.setItem(t,o)}catch{}},timeout:(t,o)=>typeof window<"u"?window.setTimeout(t,o):0,pathname:()=>typeof window<"u"?window.location.pathname:"",setHash:t=>{typeof window<"u"&&(window.location.hash=t)},viewportHeight:()=>typeof window<"u"?window.innerHeight:0,onFormRestore:t=>{t()}}}var be=class{table=new Map;rootTypes=new Set;doc;dispatchBound;container;phase="active";constructor(e,t){this.doc=e,this.container=t,this.dispatchBound=this.dispatch.bind(this)}set(e,t,o){if(this.phase==="disposed"){console.error(`[vdom] \u4E8B\u4EF6\u8868\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Adisposed \u540E set(${e}, ${t}) \u88AB\u5FFD\u7565`);return}if(typeof o!="function"){console.warn(`[vdom] \u4E8B\u4EF6 ${t} \u975E\u51FD\u6570\u503C\u88AB\u8DF3\u8FC7\uFF08node ${e}\uFF09\u2014\u2014\u671F\u671B\u51FD\u6570\uFF0C\u5B9E\u9645 ${typeof o}`);return}let r=this.table.get(e);r||(r=new Map,this.table.set(e,r)),r.set(t,o),this.ensureRoot(t)}get(e,t){return this.table.get(e)?.get(t)}removeEvent(e,t){let o=this.table.get(e);o&&(o.delete(t),o.size===0&&this.table.delete(e))}remove(e){for(let t of[...this.table.keys()])(t===e||t.startsWith(e+"."))&&this.table.delete(t)}ensureRoot(e){this.rootTypes.has(e)||(this.doc.addEventListener(e,this.dispatchBound,{capture:!0}),this.rootTypes.add(e))}dispatch(e){if(this.container){let o=e.target;if(o&&!this.container.contains(o))return}if(e.type==="contextmenu"&&window.__dbgEvt){let o=e.target,r=[...this.table.entries()].map(([s,i])=>s+":"+[...i.keys()].join("+")).join(" | ");console.error("[dbg-evt-dispatch]","target:",o?.getAttribute("data-wf-id"),"ALL:",r.slice(0,400))}let t=e.target;for(t&&t.nodeType===3&&(t=t.parentElement);t;){if(!t.hasAttribute?.("data-wf-id")){let r=t.closest?.("[data-wf-id]");if(r&&r!==t){t=r;continue}}let o=t.getAttribute?.("data-wf-id");if(o){let r=this.table.get(o)?.get(e.type);if(r){try{Object.defineProperty(e,"currentTarget",{value:t,configurable:!0})}catch{}try{r(e)}catch(s){console.error("[vdom] \u4E8B\u4EF6 handler:",s)}if(e.cancelBubble)return}}t=t.parentElement}}dispose(){if(this.phase!=="disposed"){this.phase="disposed";for(let e of this.rootTypes)this.doc.removeEventListener(e,this.dispatchBound,{capture:!0});this.rootTypes.clear(),this.table.clear()}}},ee=/^on[A-Z]/;function ae(n){return ee.test(n)?n.slice(2).toLowerCase():null}var we=class{refs=new Map;phase="active";set(e,t,o){if(this.phase==="disposed"){console.error(`[vdom] ref \u8868\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Adisposed \u540E set(${e}) \u88AB\u5FFD\u7565`);return}if(o&&o!==t&&typeof o=="function")try{o(null)}catch(r){console.error("[vdom] ref prev:",r)}this.refs.set(e,t)}mount(e,t){let o=this.refs.get(e);if(typeof o=="function")try{o(t)}catch(r){console.error("[vdom] ref mount:",r)}}unmount(e){for(let[t,o]of[...this.refs])if(t===e||t.startsWith(e+".")){if(typeof o=="function")try{o(null)}catch(r){console.error("[vdom] ref unmount:",r)}this.refs.delete(t)}}remap(e,t){for(let[o,r]of[...this.refs])(o===e||o.startsWith(e+"."))&&(this.refs.delete(o),this.refs.set(t+o.slice(e.length),r))}dispose(){this.phase!=="disposed"&&(this.phase="disposed",this.refs.clear())}};function Ye(n){let e=new Set,t=n,o=()=>{for(let r of[...e])r()};return{get state(){return t},subscribe(r){return e.add(r),()=>{e.delete(r)}},set(r){t={...t,...r},o()},update(r){r(t),o()},notify:o}}function Me(n){let e=Ye(n),t=(()=>e.state);return t.set=o=>e.set(o),t.update=o=>e.update(o),t.subscribe=o=>e.subscribe(o),t.notify=()=>e.notify(),t.store=e,t}function Xe(n,e,t){if(typeof e=="function"){let r=e;return i=>{i?r(i):t?.()}}return{current:e}}function Qe(n,e,t){let o=typeof e=="object"?e:void 0,r=typeof e=="boolean"?e:!1,s=o??t,i=n.nextHookIndex(),a=n.getHookState(i)??{open:r};n.setHookState(i,a);let l=s?.open!==void 0;return{get open(){return s?.open??a.open},setOpen(u){l?(s?.onOpenChange||console.warn(`[vdom] useOpen${o?.name?`(${o.name})`:""} \u53D7\u63A7\u7F3A onOpenChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),s?.onOpenChange?.(u)):(a.open=u,n.requestRender())},toggle(){this.setOpen(!this.open)}}}function Ze(n,e,t){let o=t?e:(()=>!0),r=t??e,s=n.getBrowser()?.window;if(!s)return()=>{};let i=l=>{if(typeof o=="string"){if(l.key!==o)return}else if(!o(l))return;r(l)};s.addEventListener("keydown",i);let a=()=>s.removeEventListener("keydown",i);return n.onUnmount(a),a}function et(n,e,t,o,r,s,i,a){let l=n.getBoundingClientRect();if(l.width===0&&l.height===0)return null;let u=e.innerWidth,d=e.innerHeight,c,f;switch(r){case"bottom":c=l.bottom+s,f=a?l.left+l.width/2-t/2:l.left;break;case"top":c=l.top-o-s,f=a?l.left+l.width/2-t/2:l.left;break;case"left":c=a?l.top+l.height/2-o/2:l.top,f=l.left-t-s;break;case"right":c=a?l.top+l.height/2-o/2:l.top,f=l.right+s;break}return f+t>u-i&&(f=u-t-i),f<i&&(f=i),c+o>d-i&&(c=d-o-i),c<i&&(c=i),{top:c,left:f}}function tt(n,e){let t=e.getComputedStyle(n).animationName;if(t&&t!=="none")return!0;for(let o of n.children){let r=e.getComputedStyle(o).animationName;if(r&&r!=="none")return!0}return!1}function nt(n,e){let t=n.getBrowser()?.window,o=0,r=0,s={get top(){return o},get left(){return r},refresh:()=>{}},i=()=>{let u=e.el();if(!u)return;let d=u.getBoundingClientRect();if(d.width===0&&d.height===0)return;let c=e.compute(d);o=c.top,r=c.left},a,l=()=>{a||t&&(a=t.requestAnimationFrame(()=>{a=void 0,(e.isOpen?.()??!0)&&i()}))};return t&&(t.addEventListener("scroll",l,!0),t.addEventListener("resize",l),n.onUnmount(()=>{a!==void 0&&t.cancelAnimationFrame(a),t.removeEventListener("scroll",l,!0),t.removeEventListener("resize",l)})),s.refresh=i,s}function A(n){let e=n.children??(n.props.children===void 0?[]:n.props.children),t=o=>Array.isArray(o)?o.flatMap(t):[o];return Array.isArray(e)?e.flatMap(t):[e]}function L(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)&&q(n)?A(n).reduce((e,t)=>e+L(t),0):1}function ot(n){return n==null||typeof n=="boolean"}function rt(n){return!(n==null||typeof n=="boolean"||typeof n=="string"||typeof n=="number"||Array.isArray(n)||typeof n=="object"&&typeof n.type=="string"||typeof n.type=="function"||typeof n.type=="symbol")}function Le(n){return n==null?"null/undefined":typeof n=="object"?`object\uFF08type: ${typeof n.type}\uFF09`:typeof n}function Gt(n,e,t,o){return[{op:"createAnchor",id:n,...o!==void 0?{detail:o}:{}},{op:"insert",id:n,parent:e,ref:t}]}function le(n,e,t,o,r){for(let s of Gt(e,t,o,r))n(s)}function F(n){return n===""?"hole":typeof n=="string"||typeof n=="number"?"text":ot(n)?"hole":Array.isArray(n)?"array":typeof n.type=="string"?"element":q(n)?"fragment":typeof n.type=="function"?"component":(rt(n),"invalid")}function it(n){return typeof n=="string"||typeof n=="number"?String(n):null}function O(n){return F(n)==="hole"}function te(n){return F(n)==="text"}function H(n,e){return`${n}.k${e.replace(/%/g,"%25").replace(/\./g,"%2E")}`}function U(n){return n==null||typeof n=="boolean"||typeof n=="string"||typeof n=="number"||Array.isArray(n)?null:n.key}function de(n){return U(n)!==null}function ue(n){let e=!1,t=!1;for(let o of n)if(de(o)?e=!0:t=!0,e&&t)return"mixed";return e?"all-keyed":"all-unkeyed"}function z(n,e){let t=new Set;for(let o of n){let r=U(o);if(r!==null){if(t.has(r)){console.warn(`[vdom] ${e}\uFF1A\u91CD\u590D key "${r}"\uFF08\u5217\u8868\u8EAB\u4EFD\u6620\u5C04\u6B67\u4E49\u2014\u2014\u589E\u5220/\u91CD\u6392\u884C\u4E3A\u4E0D\u786E\u5B9A\uFF09\u2014\u2014\u8BF7\u4E3A\u6BCF\u9879\u58F0\u660E\u552F\u4E00 key\uFF08\u6570\u636E id \u2192 keyBy\uFF09`);return}t.add(r)}}}function st(n,e){if(n.length<2)return;let t=n.some(r=>typeof r?.type=="function"),o=n.some(r=>!de(r)&&typeof r?.type=="function");if(t&&o){let r=n.map(s=>{let i=s;if(i==null)return"null";if(typeof i=="boolean")return"bool";if(typeof i=="string"||typeof i=="number")return"text";if(Array.isArray(i))return"arr";if(typeof i.type=="function"){let a=i.type.name;return"comp"+(a?":"+a:"")}return"el"+(i.key?`.k{${String(i.key).slice(0,16)}}`:"")});console.warn(`[vdom] ${e}\uFF1A\u5217\u8868\u542B\u65E0 key \u7684\u7EC4\u4EF6\u9879\uFF08\u957F\u5EA6 ${n.length}\uFF09\u2014\u2014\u9879: [${r.join(", ")}]\u2014\u2014\u52A8\u6001\u589E\u5220/\u91CD\u6392\u65F6\u72B6\u6001\u4F1A\u6309\u4F4D\u7F6E\u7EE7\u627F\u2014\u2014\u8BF7\u4E3A\u7EC4\u4EF6\u9879\u58F0\u660E key\uFF08\u6570\u636E id \u2192 keyBy\uFF09`)}}function k(n,e){return`${n}.${e}`}function xe(n){let e={};for(let[t,o]of Object.entries(n))t==="children"||t==="key"||t==="ref"||typeof o!="function"&&(e[t]=o);return e}async function at(n,e,t,o,r,s){r({op:"create",id:e,tag:n.type,attrs:xe(n.props)});for(let[d,c]of Object.entries(n.props))d==="children"||d==="key"||d==="ref"||typeof c=="function"&&r({op:"setProp",id:e,key:d,value:c});r({op:"insert",id:e,parent:t,ref:o});let i=n.props.ref;typeof i=="function"&&r({op:"ref",id:e,fn:i});let a=A(n);z(a,`\u5143\u7D20 children\uFF08${e}\uFF09`);let l=null,u=0;for(let d of a){await s(d,e,u,l);let c=L(d);l=k(e,u+c-1),u+=c}r({op:"close",id:e})}function Oe(n,e,t){let o=new Map,r=i=>{switch(i.op){case"create":{let a=o.get(i.id);a&&a!=="el"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1Acreate ${i.id} \u7C7B\u578B\u51B2\u7A81\uFF08${a} \u2192 el\uFF09`),o.set(i.id,"el");break}case"createText":{let a=o.get(i.id);a&&a!=="text"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1AcreateText ${i.id} \u7C7B\u578B\u51B2\u7A81\uFF08${a} \u2192 text\uFF09`),o.set(i.id,"text");break}case"createAnchor":{let a=o.get(i.id);a&&a!=="anchor"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1AcreateAnchor ${i.id} \u7C7B\u578B\u51B2\u7A81\uFF08${a} \u2192 anchor\uFF09`),o.set(i.id,"anchor");break}case"insert":{let a=o.get(i.parent);a&&a!=="el"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1Ainsert ${i.id} \u7684 parent ${i.parent} \u662F${a}\uFF08\u975E\u5BB9\u5668\u2014\u2014id \u7A7A\u95F4\u9519\u4F4D\uFF09`);break}default:break}n(i)},s=async(i,a,l,u)=>{let d=k(a,l);switch(F(i)){case"text":{let c=it(i);r({op:"createText",id:d,value:c}),r({op:"insert",id:d,parent:a,ref:u});return}case"hole":{le(r,d,a,u);return}case"array":{let c=i;z(c,`\u6570\u7EC4\u5C55\u5F00\uFF08${a}\uFF09`);let f=l,m=u;for(let x of c){await s(x,a,f,m);let T=L(x);m=k(a,f+T-1),f+=T}return}case"fragment":{let c=A(i);z(c,`Fragment \u5C55\u5F00\uFF08${a}\uFF09`);let f=l,m=u;for(let x of c){await s(x,a,f,m);let T=L(x);m=k(a,f+T-1),f+=T}return}case"element":{await at(i,d,a,u,r,s);return}case"component":{let c=i,f=c.key!==null?H(a,c.key):d;await J(c,a,l,u,f,e,t,s,n)&&n({op:"mount",compId:f});return}case"invalid":{console.warn(`[vdom] \u975E\u6CD5\u5B50\u8282\u70B9\u2014\u2014${Le(i)}`),le(r,d,a,u,Le(i));return}}};return s}function G(n,e,t){let o=e??{},r=t??_();return new ReadableStream({async start(s){await Oe(a=>s.enqueue(a),o,r)(n,"root",0,null),s.enqueue({op:"done",full:!0}),s.close()}})}function M(n){if(n==null)return"hole";let e=F(n);return e==="invalid"?"hole":e}var ne=async(n,e,t)=>{t.emit({op:"remove",id:t.oldId}),await t.emitNode(e,t.parent,t.index,t.ref)};var oe=async(n,e,t)=>{t.emit({op:"remove",id:t.oldId}),await t.emitNode(e,t.parent,t.index,t.ref)};function Y(n,e,t){return typeof n?.type=="function"?k(e,0):Array.isArray(n)?e:O(n)?k(e,0):t}function fe(n,e,t){return typeof n?.type=="function"||Array.isArray(n)?e:t}function V(n,e,t,o,r){if(globalThis.__DBG8&&console.log("[dbg-rmt]",e,"parent=",t,"type=",typeof n=="object"&&n!==null&&!Array.isArray(n)?String(n.type):Array.isArray(n)?"array":String(n)),O(n)){o({op:"remove",id:e});return}if(te(n)){o({op:"remove",id:e});return}if(Array.isArray(n)){globalThis.__DBG4&&console.log(`[dbg-arr] \u6570\u7EC4 base=${e} parent=${t} \u9879\u6570=${n.length}`);let l=0;for(let u of n)V(u,k(e,l),e,o,r),l+=L(u);return}let s=n;if(q(s)){let l=Number(e.slice(t.length+1)),u=A(s),d=l;for(let c of u)V(c,k(t,d),t,o,r),d+=L(c);return}if(typeof s.type=="function"){let l=s.key!==null?H(t,s.key):e;globalThis.__DBG5&&console.log(`[dbg-comp] unmount ${l} base=${e} parent=${t}`),o({op:"unmount",compId:l});let u=r?.get(l)?.lastOutput;if(u!==void 0){let d=X(u),c=Y(d,l,e),m=d!==null&&typeof d=="object"&&!Array.isArray(d)&&q(d)?e.slice(0,e.lastIndexOf(".")):fe(d,l,l);V(d,c,m,o,r)}}let i=A(s),a=0;i.forEach(l=>{let u=k(e,a);l!==null&&typeof l!="string"&&typeof l!="number"&&typeof l!="boolean"&&!Array.isArray(l)?V(l,u,e,o,r):o({op:"remove",id:u}),a+=L(l)}),o({op:"remove",id:e})}var re=async(n,e,t)=>{V(n,t.oldId,t.parent,t.emit,t.registry),await t.emitNode(e,t.parent,t.index,t.ref)};var ie=async(n,e,t)=>{globalThis.__DBG8&&console.log("[dbg-tc] oldCompId=",t.oldCompId,"oldId=",t.oldId,"parent=",t.parent,"index=",t.index),t.oldCompId&&t.emit({op:"unmount",compId:t.oldCompId});let o=t.registry?.get(t.oldCompId??"")?.lastOutput;if(o!==void 0){let r=X(o);V(r,Y(r,t.oldCompId??"",k(t.parent,t.index)),fe(r,t.oldCompId??"",t.parent),t.emit,t.registry)}else t.emit({op:"remove",id:t.oldId});await t.emitNode(e,t.parent,t.index,t.ref)};var K=async(n,e,t)=>{let o=Array.isArray(n)?n:A(n),r=t.index;for(let s of o)V(s,k(t.parent,r),t.parent,t.emit,t.registry),r+=L(s);await t.emitNode(e,t.parent,t.index,t.ref)};var Jt={text:{text:null,hole:ne,element:ne,component:ne,fragment:ne,array:ne},hole:{text:oe,hole:null,element:oe,component:oe,fragment:oe,array:oe},element:{text:re,hole:re,element:null,component:re,fragment:re,array:re},component:{text:ie,hole:ie,element:ie,component:null,fragment:ie,array:ie},fragment:{text:K,hole:K,element:K,component:K,fragment:null,array:K},array:{text:K,hole:K,element:K,component:K,fragment:K,array:null}};function B(n,e){return Jt[n]?.[e]??null}function lt(n,e,t,o){let r=xe(n.props),s=xe(e.props);for(let[i,a]of Object.entries(s))r[i]!==a&&o({op:"setProp",id:t,key:i,value:a});for(let i of Object.keys(r))i in s||o({op:"setProp",id:t,key:i,value:void 0});for(let[i,a]of Object.entries(e.props))i==="children"||i==="key"||typeof a=="function"&&n.props[i]!==a&&o({op:"setProp",id:t,key:i,value:a,prev:n.props[i]});for(let i of Object.keys(n.props))i==="children"||i==="key"||typeof n.props[i]=="function"&&e.props[i]===void 0&&o({op:"setProp",id:t,key:i,value:void 0,prev:n.props[i]})}async function ct(n,e,t,o,r,s,i){let a=A(n),l=A(e),u=Array.isArray(n.props.children)!==Array.isArray(e.props.children);await pe(a,l,t,o,r,s,i,u)}async function pe(n,e,t,o,r,s,i,a=!1){if(n=He(n),e=He(e),!a){let f=h=>!O(h)&&!te(h)&&!Array.isArray(h),m=n.filter(f),x=e.filter(f),T=(h,E)=>E>=h.length||O(h[E]),g=h=>typeof h?.type=="function"&&!de(h),p=h=>T(n,h)||g(n[h]),y=h=>T(e,h)||g(e[h]);(e.some((h,E)=>g(h)&&!p(E))||n.some((h,E)=>g(h)&&!y(E)))&&st(x,`children\uFF08\u65E0 key \u7EC4\u4EF6\u5B9E\u69FD\u7FFB\u8F6C ${m.length}\u2192${x.length}\uFF09`)}if(globalThis.__WF_DEBUG_MOVED__&&console.log("[debug-dci] id=",t,"oldKeys=",JSON.stringify(n.map(U)),"newKeys=",JSON.stringify(e.map(U)),"lk=",ue(n),ue(e)),ue(e)==="all-keyed"&&ue(n)==="all-keyed"){await ft(n,e,t,o,r,s,i);return}if(ut(e)||ut(n)){await ft(n,e,t,o,r,s,i);return}let l=null,u=Math.min(n.length,e.length);for(let f=0;f<u;f++){let m=n[f]??null,x=e[f]??null,T=k(t,f);O(x)?O(m)||(await dt(m,t,T,r,i),le(r,T,t,l)):await Yt(m,x,t,f,l,T,o,r,s,i),l=T}for(let f=n.length;f<e.length;f++)await o(e[f],t,f,l),l=k(t,f);let d=n.reduce((f,m)=>f+L(m),0),c=e.reduce((f,m)=>f+L(m),0);if(d>c){let f=d-c;for(let m=n.length-1;m>=0&&f>0;m--){let x=L(n[m]);x<=f&&(await dt(n[m],t,k(t,m),r,i),f-=x)}}}async function dt(n,e,t,o,r){if(O(n)){o({op:"remove",id:t});return}V(n,t,e,o,r)}function He(n){let e=[];for(let t of n)t!==null&&typeof t=="object"&&!Array.isArray(t)&&q(t)?e.push(...He(A(t))):e.push(t);return e}async function Yt(n,e,t,o,r,s,i,a,l,u){if(globalThis.__DBG7&&console.log("[dbg-slot]",s,"old=",n===null?"null":String(typeof n=="object"?n.type:n),"new=",e===null?"null":String(typeof e=="object"?e.type:e)),F(n)==="text"&&F(e)==="text"){String(n)!==String(e)&&a({op:"setText",id:s,value:String(e)});return}if(F(n)==="hole"){a({op:"remove",id:s}),await i(e,t,o,r);return}if(F(n)===F(e)&&typeof n!="string"&&typeof n!="number"){await Q(n,e,t,o,r,i,a,l,u);return}let d=B(M(n),M(e));if(!d)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${M(n)} \u2192 ${M(e)}\uFF08diffSlot\u2014\u2014\u5FC5\u987B\u663E\u5F0F\u8FC1\u79FB\u6216\u663E\u5F0F Reject\uFF09`);await d(n,e,{emit:a,emitNode:i,oldId:s,newId:s,parent:t,index:o,ref:r,oldCompId:typeof n?.type=="function"?s:void 0,registry:u})}function ut(n){return n.some(de)}async function ft(n,e,t,o,r,s,i){let a=new Map;n.forEach((p,y)=>{let w=U(p);w!==null&&!a.has(w)&&a.set(w,y)}),z(e,`keyed \u5217\u8868\uFF08${t}\uFF09`),z(n,`keyed \u5217\u8868\uFF08${t}\uFF09`);let l=new Set(e.map(p=>U(p)).filter(p=>p!==null)),u=new Map;for(let p=0;p<n.length;p++){let y=n[p];if(O(y)){r({op:"remove",id:k(t,p)});continue}if(te(y)){r({op:"remove",id:k(t,p)});continue}if(Array.isArray(y))continue;let w=U(y);if(w!==null){let h=(u.get(w)??0)+1;if(u.set(w,h),h===1)continue;V(y,k(t,p),t,r,i);continue}V(y,k(t,p),t,r,i)}for(let[p,y]of a)l.has(p)||V(n[y],k(t,y),t,r,i);let d=n.map(p=>U(p)).filter(p=>p!==null&&l.has(p)),c=e.map(p=>U(p)).filter(p=>p!==null&&a.has(p)),f=!0;{let p=0;for(let y of c){let w=d.indexOf(y,p);if(w===-1){f=!1;break}p=w+1}}if(!f){for(let[y,w]of a)l.has(y)||r({op:"unmount",compId:H(t,y)});n.forEach((y,w)=>{if(!O(y)){if(te(y)){r({op:"remove",id:k(t,w)});return}if(U(y)!==null){r({op:"remove",id:k(t,w)});return}V(y,k(t,w),t,r,i)}});let p=null;for(let y=0;y<e.length;y++){let w=e[y],h=U(w);if(h!==null&&typeof w.type=="function"){let E=H(t,h);await J(w,t,y,p,E,s,i,o,r)&&r({op:"mount",compId:E})}else await o(w,t,y,p);p=k(t,y)}return}let m=[];e.forEach((p,y)=>{let w=U(p);if(w===null)return;let h=a.get(w);h!==void 0&&h!==y&&m.push({oldIdx:h,newIdx:y})});let x=m.every(p=>p.newIdx<p.oldIdx);m.sort((p,y)=>x?p.newIdx-y.newIdx:y.newIdx-p.newIdx),globalThis.__WF_DEBUG_MOVED__&&console.log("[debug-moved] subseq=1 moved=",JSON.stringify(m),"oldIdxByKey=",JSON.stringify([...a.entries()]),"newKeys=",JSON.stringify([...l]),"parent=",t);for(let p of m)r({op:"move",id:k(t,p.oldIdx),parent:t,ref:null,newId:k(t,p.newIdx),noMove:!0});let T=!0,g=null;for(let p=0;p<e.length;p++){let y=e[p],w=U(y),h=k(t,p);if(w!==null){let E=a.get(w);E===void 0?await ce(y,t,p,g,w,o,r,s,i):typeof y.type=="function"?await ce(y,t,p,g,w,o,r,s,i):await Q(n[E],y,t,p,g,o,r,s,i)}else await o(y,t,p,g);g=h}}async function ce(n,e,t,o,r,s,i,a,l){let u=n;if(typeof u.type=="function"){let d=H(e,r),f=l.get(d)?.lastOutput;await J(u,e,t,o,d,a,l,async(x,T,g,p)=>{await Te(f,x,T,g,p,s,i,a,l,Q,d,k(e,t),(y,w,h,E,W)=>ce(y,w,h,E,W,s,i,a,l))},i)&&i({op:"mount",compId:d});return}await s(n,e,t,o)}async function Te(n,e,t,o,r,s,i,a,l,u,d,c,f){let m=()=>{if(n?.kind==="vnode"){let g=n.v;return g!==null&&typeof g=="object"&&typeof g.type=="function"?k(d,0):c}return k(d,0)},x=k(t,o),T=O(e);if(n===void 0){await s(e,t,o,r);return}switch(n.kind){case"hole":{if(!T){let g=B("hole",M(e));if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 hole \u2192 ${M(e)}\uFF08\u7EC4\u4EF6\u8F93\u51FA\u5C55\u5F00\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);await g(null,e,{emit:i,emitNode:s,oldId:m(),newId:x,parent:t,index:o,ref:r,registry:l})}return}case"vnode":{if(T){let g=B(M(n.v),"hole");if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${M(n.v)} \u2192 hole\uFF08\u7EC4\u4EF6\u8F93\u51FA\u6536\u7F29\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);let p=n.v,y=p!==null&&typeof p=="object"&&typeof p.type=="function"?p.key!==null?H(d,p.key):k(d,0):void 0;await g(n.v,e,{emit:i,emitNode:s,oldId:m(),newId:x,parent:t,index:o,ref:r,registry:l,oldCompId:y})}else if(Array.isArray(e)){let g=B(M(n.v),"array");if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${M(n.v)} \u2192 array\uFF08\u5355\u8282\u70B9\u2192\u591A\u6839\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);await g(n.v,e,{emit:i,emitNode:s,oldId:m(),newId:x,parent:t,index:o,ref:r,registry:l})}else{let g=e;f&&g!==null&&typeof g=="object"&&typeof g.type=="function"&&g.key!==null?await f(e,t,o,r,g.key):await u(n.v,g,t,o,r,s,i,a,l)}return}case"array":{if(T){let g=B("array","hole");if(!g)throw new Error("[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 array \u2192 hole\uFF08\u591A\u6839\u6536\u7F29\u2014\u2014P2 \u663E\u5F0F Reject\uFF09");await g(n.items,e,{emit:i,emitNode:s,oldId:m(),newId:x,parent:t,index:o,ref:r,registry:l})}else if(Array.isArray(e))await pe(n.items,e,t,s,i,a,l);else{let g=B("array",M(e));if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 array \u2192 ${M(e)}\uFF08\u591A\u6839\u2192\u5355\u8282\u70B9\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);await g(n.items,e,{emit:i,emitNode:s,oldId:m(),newId:x,parent:t,index:o,ref:r,registry:l})}return}}}async function Q(n,e,t,o,r,s,i,a,l){let u=k(t,o);if(typeof e.type=="function"){let c=e.key!==null?H(t,e.key):u,f=typeof n.type=="function"&&n.key!==null?H(t,n.key):u,m=l.get(c);if(c!==f||m&&m.type!==e.type){let g=l.get(f);if(g){f!==c&&i({op:"unmount",compId:f});let p=g.lastOutput;if(p!==void 0){let y=X(p);V(y,Y(y,f,k(t,o)),fe(y,f,t),i,l)}Z(f,l)}m=void 0,await J(e,t,o,r,c,a,l,s,i),i({op:"mount",compId:c});return}let x=m?.lastOutput;await J(e,t,o,r,c,a,l,async(g,p,y,w)=>{await Te(x,g,p,y,w,s,i,a,l,Q,c,k(t,o),(h,E,W,P,v)=>ce(h,E,W,P,v,s,i,a,l))})&&i({op:"mount",compId:c});return}if(typeof e.type=="string"&&typeof n.type=="string"){n.type===e.type?(lt(n,e,u,i),await ct(n,e,u,s,i,a,l)):(V(n,u,t,i,l),await s(e,t,o,r));return}if(q(n)&&q(e)){await pe(A(n),A(e),t,s,i,a,l);return}throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1AdiffSame \u672A\u5B9A\u4E49\u540C\u6001\u5BF9\u7167 ${String(n.type)} \u2194 ${String(e.type)}\uFF08P2 \u663E\u5F0F Reject\uFF09`)}function me(n,e,t,o){return new ReadableStream({async start(r){let s=d=>r.enqueue(d),i=Oe(s,t,o),a=M(n),l=M(e),u=B(a,l);u?await u(n,e,{emit:s,emitNode:i,oldId:"root.0",newId:"root.0",parent:"root",index:0,ref:null,registry:o,oldCompId:typeof n.type=="function"?n.key!==null?H("root",n.key):"root.0":void 0}):await Q(n,e,"root",0,null,i,s,t,o),s({op:"done"}),r.close()}})}var ke="__wf_portal";function De(n){return`${ke}-${n}`}function Xt(n){return typeof n=="function"?n():n}function pt(n){return n?typeof n=="function"?n():n:null}function mt(n,e){let t={tree:null,applier:null,container:null,chain:Promise.resolve(),version:0,open:!1,phase:"closed",disposed:!1,panel:null,pos:{top:0,left:0}},o=n.getBrowser()?.window,r=n.getBrowser()?.document,s=()=>{if(!r)return null;if(t.container)return t.container;let v=r.getElementById(ke);v||(v=r.createElement("div"),v.id=ke,r.body.appendChild(v));let b=e.key??"popup",S=r.getElementById(De(b));return S?t.container=S:(t.container=r.createElement("div"),t.container.id=De(b),v.appendChild(t.container)),t.container},i=0,a=()=>{if(t.disposed||!t.open)return;let v=pt(e.anchor);if(!v||!t.panel){i++<10&&queueMicrotask(a);return}if(!o)return;let b=t.panel,S=b.offsetWidth||b.getBoundingClientRect().width,C=b.offsetHeight||b.getBoundingClientRect().height;if((S===0||C===0)&&i++<10){typeof o.requestAnimationFrame=="function"?o.requestAnimationFrame(a):queueMicrotask(a);return}let N=typeof e.placement=="function"?e.placement():e.placement??"bottom";if(e.position){let I=e.position();if(I&&typeof I.x=="number"&&typeof I.y=="number"){if(t.pos={top:I.y,left:I.x,width:I.width},t.applier){let D=u(t.tree);D&&d(D)}return}}let R=et(v,o,S,C,N,e.gap??8,e.margin??8,e.center??!0);if(!R){i++<10&&queueMicrotask(a);return}if(i=0,t.pos=R,t.applier){let I=u(t.tree);I&&d(I)}},l=v=>{if(t.panel=v,v&&t.open&&e.positioning!=="none"&&(o&&typeof o.requestAnimationFrame=="function"?o.requestAnimationFrame(a):queueMicrotask(a)),v&&e.presence){let b=S=>{t.phase==="exit"&&f()};v.addEventListener("animationend",b),n.onUnmount(()=>v.removeEventListener("animationend",b))}},u=v=>{if(!v)return null;let b=v;e.mask&&(b=$("div",{class:"wf-popup-mask",style:{position:"fixed",inset:"0",background:"var(--wf-overlay, rgba(0,0,0,0.5))",display:"flex",alignItems:"center",justifyContent:"center",zIndex:"var(--wf-z-modal, 1000)"},onClick:I=>{e.maskClosable!==!1&&I.target===I.currentTarget&&m()}},e.maskCentered?{...b,props:{...b.props??{}}}:$("div",{class:"wf-popup-mask-inner"},b)));let S=b.props??{},C=e.positioning==="none"||String(S.class??"").includes("mask")?S.class??"":["wf-popup",S.class].filter(Boolean).join(" "),N=e.positioning==="none"?{...S.style??{},position:"fixed"}:{...S.style??{},position:"fixed",top:`${t.pos.top}px`,left:`${t.pos.left}px`,...t.pos.width!==void 0?{width:`${t.pos.width}px`}:{}};return{...b,props:{...S,class:C,style:N,ref:l}}},d=v=>{let b=++t.version,S=t.tree;t.tree=v,t.chain=t.chain.then(async()=>{if(t.disposed||b!==t.version)return;let C=t.applier;if(!C)return;let N=C.registry;if(!N)return;let R=n.getSharedContext()??{},D=(S?me(S,v,R,N):G(v,R,N)).getReader();for(;;){let{value:he,done:Kt}=await D.read();if(Kt)break;if(t.disposed||b!==t.version)return;C.apply(he)}}).catch(C=>{console.error("[popup] render error:",C)})},c=()=>{t.disposed||(t.disposed=!0,t.applier&&(t.applier.dispose(),t.applier=null),t.tree=null,t.container&&(t.container.remove(),t.container=null))},f=()=>{t.disposed||(t.open=!1,t.phase="closed",p(),c(),e.onClose?.())},m=()=>{!t.open||t.disposed||(e.presence?(t.phase="exit",t.panel&&o&&!tt(t.panel,o)&&f(),t.panel||f()):f())},x={value:""},T={value:null},g={value:!1},p=()=>{g.value&&(r?.body&&(r.body.style.overflow=x.value),x.value="",T.value&&(T.value.focus?.(),T.value=null),g.value=!1)},y=()=>{g.value=!0,e.lockScroll&&r?.body&&(x.value=r.body.style.overflow,r.body.style.overflow="hidden"),e.trapFocus&&o&&(T.value=o.document.activeElement,n.scheduleAfterRender(()=>{let v=t.panel;v&&(v.querySelector?.("input, button, [tabindex], select, textarea")??v).focus?.()}))},w=null;e.trapFocus&&o&&(w=v=>{if(v.key!=="Tab"||!t.open||!t.panel)return;let b=Array.from(t.panel.querySelectorAll?.("input, button, [tabindex], select, textarea")??[]).filter(R=>!R.disabled&&R.offsetParent!==null);if(b.length===0)return;let S=b[0],C=b[b.length-1],N=o?.document.activeElement;v.shiftKey&&(N===S||N===t.panel||!t.panel.contains(N))?(v.preventDefault(),C.focus()):!v.shiftKey&&(N===C||!t.panel.contains(N))&&(v.preventDefault(),S.focus())},o.addEventListener("keydown",w));let h=v=>{if(!t.open||(e.closeOnOutside??!0)===!1)return;let b=v.target,S=pt(e.anchor);b&&S?.contains(b)||b&&t.panel?.contains(b)||m()},E=v=>{t.open&&(e.closeOnEscape??!0)&&v.key==="Escape"&&m()};o&&(o.addEventListener("mousedown",h),o.addEventListener("keydown",E)),n.onUnmount(()=>{o&&(o.removeEventListener("mousedown",h),o.removeEventListener("keydown",E),w&&o.removeEventListener("keydown",w)),f()});let W=()=>{if(t.open||t.disposed)return;t.open=!0,t.phase="open";let v=s();if(!v)return;(e.trapFocus||e.lockScroll)&&y();let b=_();t.applier=new j(v,r,b);let S=Xt(e.content);S!=null?d(u(S)):f()},P={close:m,update(v){if(!(t.disposed||!t.open)){if(v==null){m();return}if(e.position){let b=e.position();b&&typeof b.x=="number"&&typeof b.y=="number"&&(t.pos={top:b.y,left:b.x,width:b.width})}d(u(v))}},refresh(){if(t.disposed||!t.open||!t.tree)return;if(e.position){let b=e.position();b&&typeof b.x=="number"&&typeof b.y=="number"&&(t.pos={top:b.y,left:b.x,width:b.width})}let v=u(t.tree);v&&d(v)},get open(){return t.open}};return W(),P}function gt(n,e,t){let o=n.nextHookIndex(),r=n.getHookState(o)??{value:t};n.setHookState(o,r);let s=e.value!==void 0;return{get value(){return e.value??r.value},controlled:e,setValue(i){s?(e.onChange||console.warn("[vdom] useControlled \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548"),e.onChange?.(i)):(r.value=i,n.requestRender())}}}function Qt(n,e,t){if(typeof n=="string")return n==="win"||n==="window"?e:t?t.querySelector(n)??e:e;if(n&&typeof n=="object"&&!("nodeType"in n)){let o=n;if(typeof o.getScroller=="function"){let r=o.getScroller();return r||e}return o.root?typeof o.root=="string"?t?t.querySelector(o.root)??e:e:o.root:e}return e}function yt(n,e){let t=n.nextHookIndex(),o=n.getHookState(t)??{y:0,x:0,raf:null,handler:null,retries:0};n.setHookState(t,o);let r=n.getBrowser()?.window,s=n.getBrowser()?.document??null;if(!r)return{y:0,x:0,refresh:()=>{}};let i=()=>{if(typeof e=="function")return e();if(e&&typeof e=="object"&&!("nodeType"in e)){let u=e;return typeof u.getScroller=="function"?u.getScroller()??null:u.root?typeof u.root=="string"?s?s.querySelector(u.root)??r:r:u.root:r}return Qt(e,r,s)},a=u=>{u===r?(o.y=r.scrollY||0,o.x=r.scrollX||0):(o.y=u.scrollTop,o.x=u.scrollLeft)},l=()=>{if(o.handler)return;let u=i();if(!u){o.retries++<10&&n.scheduleAfterRender(l);return}let d=()=>{o.raf||(o.raf=r.requestAnimationFrame(()=>{o.raf=null,a(u),n.requestRender()}))};u.addEventListener("scroll",d,{passive:!0}),o.handler=d,n.onUnmount(()=>{o.raf&&r.cancelAnimationFrame(o.raf),u.removeEventListener("scroll",d),o.handler=null})};return l(),{get y(){return o.y},get x(){return o.x},refresh:()=>{let u=i();u&&a(u)}}}function vt(n,e){let t=n.nextHookIndex(),o=n.getHookState(t)??{isIn:!1,io:null,retries:0,ready:!1};n.setHookState(t,o);let s=n.getBrowser()?.window?.IntersectionObserver,i=e&&typeof e=="object"&&!("nodeType"in e)?e:void 0,a=i?.target??(typeof e=="function"||e&&"nodeType"in e?e:void 0),l=typeof i?.rootMargin=="function"?i.rootMargin():i?.rootMargin,u=typeof i?.threshold=="function"?i.threshold():i?.threshold,d=typeof i?.root=="function"?i.root():i?.root??null,c=f=>{if(!s||!f||o.io)return;let m=new s(x=>{let T=x[0];T&&T.isIntersecting!==o.isIn&&(o.isIn=T.isIntersecting,i?.onChange?.(T,T.isIntersecting),n.requestRender())},{root:d??void 0,rootMargin:l,threshold:u});m.observe(f),o.io=m,o.ready=!0,n.onUnmount(()=>o.io?.disconnect())};if(s&&!o.io){let f=typeof a=="function"?a():a??null;f?c(f):a!==void 0&&o.retries++<10&&n.scheduleAfterRender(()=>c(typeof a=="function"?a():a??null))}return{get isIn(){return o.isIn},get ready(){return o.ready},ref:f=>{f?c(f):o.io?.disconnect()},observe:f=>c(f),disconnect:()=>{o.io?.disconnect(),o.io=null}}}function ht(n,e,t){let o=n.nextHookIndex(),r=n.getHookState(o)??{keyword:"",selectedLabel:"",composing:!1};n.setHookState(o,r);let s=e.value!==void 0;return{controlled:e,get value(){return e.value??r.keyword},setValue(i){s?(e.onChange||console.warn(`[vdom] useControlledInput(${t?.name??""}) \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),e.onChange?.(i)):(r.keyword=i,n.requestRender())},get keyword(){return r.keyword},setKeyword(i){r.keyword=i,r.composing||this.setValue(i)},get selectedLabel(){return r.selectedLabel},setSelectedLabel(i){r.selectedLabel=i},get isComposing(){return r.composing},onCompositionStart(){r.composing=!0},onCompositionEnd(){r.composing=!1}}}function bt(n,e){let t={draggable:!0,onDragStart:o=>{e.data!==void 0&&o.dataTransfer?.setData("text/plain",JSON.stringify(e.data)),e.onDragStart?.(o,e.data)},onDragEnd:o=>e.onDragEnd?.(o)};return{draggableProps:t,dragProps:t,dropProps:{onDragOver:o=>{o.preventDefault(),e.onDragOver?.(o)},onDragLeave:o=>e.onDragLeave?.(o),onDrop:o=>{o.preventDefault();let r;try{r=o.dataTransfer?.getData("text/plain")?JSON.parse(o.dataTransfer.getData("text/plain")):void 0}catch{r=void 0}e.onDrop?.(o,r)}}}}function Ue(n,e){let t=`media:${e}`,o=n.getInstanceData().get(t);o||(o={matches:!1,mql:null},n.getInstanceData().set(t,o));let r=n.getBrowser()?.window,i=(r?.matchMedia?.bind(r)??(typeof matchMedia=="function"?matchMedia.bind(void 0):void 0))?.(e);if(i&&(o.matches=i.matches,!o.mql)){let a=()=>{o.matches=i.matches,n.requestRender()};i.addEventListener("change",a),o.mql=i,n.onUnmount(()=>i.removeEventListener("change",a))}return()=>o.matches}function wt(n,e){let t=Object.entries(e).sort((o,r)=>o[1]-r[1]);return()=>{let o=t[0]?.[0]??"default";for(let[r,s]of t)Ue(n,`(min-width: ${s}px)`)()&&(o=r);return o}}var Zt=0,$e=()=>`m${Date.now().toString(36)}${(Zt++).toString(36)}`;function xt(n,e){let t=n.nextHookIndex(),o=n.getHookState(t)??{messages:[],status:"idle",subs:new Set,controller:null,seq:0,input:"",error:null,usage:null,step:null};if(n.setHookState(t,o),o.messages.length===0){let a=[];e.system&&a.push({id:$e(),role:"system",content:e.system}),e.initialMessages&&a.push(...e.initialMessages),o.messages=a}let r=()=>{for(let a of[...o.subs])a()},s=e.parseChunk??(a=>{let l=a.trim();if(!l||l.startsWith("event:"))return null;let u=l.startsWith("data:")?l.slice(5).trim():l;if(!u)return null;try{let d=JSON.parse(u);return d.toolCalls?d:d.text!==void 0?{content:String(d.text)}:d.content!==void 0?{content:d.content}:null}catch{return null}}),i={get state(){return o.messages},get messages(){return o.messages},get status(){return o.status},get input(){return o.input??""},setInput(a){o.input=a},get streaming(){return o.status==="streaming"},get error(){return o.error??null},get usage(){return o.usage??null},get step(){return o.step??null},subscribe(a){return o.subs.add(a),()=>{o.subs.delete(a)}},set(){},update(){},notify:r,async send(a=o.input){let l=typeof e.url=="function"?e.url():e.url??"/api/chat",u={id:$e(),role:"user",content:a};o.messages=[...o.messages,u];let d={id:$e(),role:"assistant",content:"",status:"streaming"};o.messages=[...o.messages,d],o.status="streaming",r();let c=new AbortController;o.controller=c;try{let f=await fetch(l,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({messages:o.messages.map(g=>({role:g.role,content:g.content}))}),signal:c.signal});if(!f.ok||!f.body)throw new Error(`[vdom] chat \u8BF7\u6C42\u5931\u8D25 ${f.status}`);let m=f.body.getReader(),x=new TextDecoder,T="";for(;;){let{value:g,done:p}=await m.read();if(p)break;T+=x.decode(g,{stream:!0});let y=T.split(`
2
- `);T=y.pop()??"";for(let w of y){if(!w.trim())continue;let h=s(w);h&&(h.content&&(d.content+=h.content,r()),h.toolCalls&&(d.toolCalls=[...d.toolCalls??[],...h.toolCalls],r()))}}d.status=void 0,o.status="idle"}catch(f){f.name!=="AbortError"?(d.status="error",o.status="error"):(d.status=void 0,o.status="idle")}finally{o.controller=null,r()}},stop(){o.controller?.abort()},retry(){let a=[...o.messages].reverse().find(l=>l.role==="user");a&&i.send(a.content)},reset(){o.messages=[],o.status="idle",r()},async approve(a,l,u){let d=!1;o.messages=o.messages.map(c=>({...c,toolCalls:c.toolCalls?.map(f=>d||f.approved?f:(d=!0,{...f,approved:a!=="rejected",feedback:l,...a==="modified"&&u?{args:u}:{}}))})),r()}};return i}function en(n){let e=n.getBrowser()?.window;return e?.matchMedia?e.matchMedia.bind(e):typeof matchMedia=="function"?matchMedia.bind(void 0):null}function We(n){let e=en(n);return!!(e&&e("(prefers-reduced-motion: reduce)").matches)}function Tt(n,e,t){let o=n.getBrowser()?.window,r=We(n),s=t?.duration??400;if(s<=0)return{value:e,reset:()=>{}};let i=t?.ease==="linear"?m=>m:m=>1-Math.pow(1-m,3),a,l=e,u=r?e:0,d={get value(){return u},set value(m){u=m},reset:()=>{}},c=()=>{n.requestRender()},f=m=>{if(l=m,r){d.value=m,c();return}if(m===d.value)return;if(!o){d.value=m;return}a&&o.cancelAnimationFrame(a);let x=d.value,T=o.performance.now(),g=p=>{let y=Math.min(1,(p-T)/s);d.value=Math.round(x+(m-x)*i(y)),y<1?a=o.requestAnimationFrame(g):a=void 0,c()};a=o.requestAnimationFrame(g)};return d.reset=m=>{m===l&&a||f(m)},n.onUnmount(()=>{a&&o&&(o.cancelAnimationFrame(a),a=void 0)}),d.reset(e),d}function kt(n,e){let t=n.getBrowser()?.window,o=0,r=0,s=!1,i=0,a=c=>{s&&e.onMove(c,{x:c.clientX-o,y:c.clientY-r})},l=c=>{s&&c.pointerId===i&&(s=!1,t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",u)),e.onEnd?.(c))},u=c=>{!s||c.pointerId!==i||(s=!1,t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",u)),e.onEnd?.(c))},d=c=>{s||(c.preventDefault(),s=!0,i=c.pointerId,o=c.clientX,r=c.clientY,t&&(t.addEventListener("pointermove",a),t.addEventListener("pointerup",l),t.addEventListener("pointercancel",u)),e.onStart?.(c))};return n.onUnmount(()=>{s&&t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",u),s=!1)}),{onPointerDown:d}}function Ct(n){let e=n.getBrowser()?.window,t=e?.visualViewport,o=t?.height??e?.innerHeight??0,r=t?.offsetTop??0,s=!1,i={get height(){return o},get offsetTop(){return r},get keyboardOpen(){return s}},a=()=>{let l=e?.visualViewport;o=l?.height??e?.innerHeight??0,r=l?.offsetTop??0,s=o<(e?.innerHeight??0)*.9,n.requestRender()};if(e){let l=e.visualViewport;l?.addEventListener?(l.addEventListener("resize",a),l.addEventListener("scroll",a),n.onUnmount(()=>{l.removeEventListener("resize",a),l.removeEventListener("scroll",a)})):(e.addEventListener("resize",a),n.onUnmount(()=>e.removeEventListener("resize",a)))}return i}function Et(n){return{useExternal(e){let t=n.getInstanceData(),o=t.get(e);if(!o){let r=e.subscribe(()=>n.requestRender());n.onUnmount(r),o={unsub:r},t.set(e,o)}return()=>e.state},signal:e=>Me(e),hold:e=>n.onUnmount(e),useStableRef:(e,t)=>Xe(n,e,t),useOpen:(e,t)=>Qe(n,e,t),onUnmount:e=>n.onUnmount(e),useGlobalKey:(e,t)=>Ze(n,e,t),openPopup:e=>mt(n,e),usePopupPosition:e=>nt(n,e),useControlled:(e,t)=>gt(n,e,t),useScrollPosition:e=>yt(n,e),useInView:e=>vt(n,e),useControlledInput:(e,t)=>ht(n,e,t),useDragDrop:e=>bt(n,e),useMedia:e=>Ue(n,e),useBreakpoint:e=>wt(n,e),useChat:e=>xt(n,e),useTween:(e,t)=>Tt(n,e,t),useDrag:e=>kt(n,e),useVisualViewport:()=>Ct(n),useReducedMotion:()=>We(n)}}function ge(n,e,t){return e<=0?n:new Promise((o,r)=>{let s=setTimeout(()=>{r(new Error(`[vdom] \u5F02\u6B65\u8D85\u65F6\uFF08${e}ms\uFF09: ${t}`))},e);n.then(i=>{clearTimeout(s),o(i)},i=>{clearTimeout(s),r(i)})})}var Ce=0,St=!1;function Rt(){Ce++}function It(){Ce>0&&Ce--}function Nt(n,e){if(Ce<=0)return!1;let t=new Error().stack?.split(`
3
- `).slice(2,6).map(o=>o.trim()).join(" \u2190 ")??"";return console.warn(`[vdom] \u6E32\u67D3\u8DEF\u5F84\u526F\u4F5C\u7528\uFF1ArenderFn \u5185\u521B\u5EFA ${n}\u2014\u2014\u6BCF\u6B21\u6E32\u67D3\u91CD\u5EFA\u5B9A\u65F6\u5668\uFF08\u91CD\u6E32\u67D3\u98CE\u66B4/SSR \u670D\u52A1\u5668\u6C61\u67D3\u2014\u2014DemoProgress \u5B9E\u8BC1\uFF09\u2014\u2014\u5E94\u5728\u5DE5\u5382\uFF08mount \u671F\uFF09\u521B\u5EFA + ctx.ui.hold \u6CE8\u518C\u6E05\u7406\uFF0C\u6216\u56DE\u8C03\u5185\u521B\u5EFA`),console.warn(`[vdom] \u8C03\u7528\u94FE: ${t}`),e}function Vt(n,e=!1){if(St)return;let t=n,o=t.setTimeout,r=t.setInterval;typeof o!="function"||typeof r!="function"||(t.setTimeout=function(i,a,...l){return Nt("setTimeout",e)?0:o.call(t,i,a,...l)},t.setInterval=function(i,a,...l){return Nt("setInterval",e)?0:r.call(t,i,a,...l)},St=!0)}function tn(n){return O(n)?{kind:"hole"}:Array.isArray(n)?{kind:"array",items:n}:{kind:"vnode",v:n}}function X(n){return n.kind==="hole"?null:n.kind==="array"?n.items:n.v}function _(){let n=new Map;return{get:e=>n.get(e),set:(e,t)=>{n.set(e,t)},delete:e=>{n.delete(e)},keys:()=>[...n.keys()],asyncTimeout:15e3}}function Pt(n){for(let e of[...n.keys()].reverse())Z(e,n)}async function J(n,e,t,o,r,s,i,a,l){let u=n.type,d=i.get(r);if(d&&d.phase==="mounting")throw new Error(`[vdom] \u7EC4\u4EF6\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A${r} \u6B63\u5728 mount\uFF08\u5F02\u6B65\u5DE5\u5382\u671F\u95F4\u91CD\u590D\u5F15\u7528\u2014\u2014\u5FAA\u73AF\u4F9D\u8D56\uFF1F\uFF09`);if(d&&d.type!==u){if(Z(r,i),d.lastOutput!==void 0&&l){let g=X(d.lastOutput);V(g,Y(g,r,r),r,l,i)}d=void 0}let c=!d;if(!d){let g=[],p=new Map,y={n:0},w=new Map,h=Object.create(s);h.onUnmount=P=>{g.push(P)},h.ui=Et({requestRender:()=>{h.render?.()},onUnmount:P=>{g.push(P)},getBrowser:()=>s.browser??null,nextHookIndex:()=>y.n++,getHookState:P=>p.get(P),setHookState:(P,v)=>{p.set(P,v)},getInstanceData:()=>w,scheduleAfterRender:P=>s.afterRender?.(P),getSharedContext:()=>s??null});let E={type:u,renderFn:(()=>null),onUnmounts:g,hookSeq:y,hookStates:p,renderBase:0,phase:"mounting"};i.set(r,E);let W;try{let P=u(n.props,h);W=await ge(Promise.resolve(P),i.asyncTimeout,`mount(${r})`)}catch(P){i.delete(r);for(let v of g.reverse())try{v()}catch(b){console.error("[vdom] mount \u6E05\u7406:",b)}throw P}d={type:u,renderFn:W,onUnmounts:g,hookSeq:y,hookStates:p,renderBase:0,phase:"mounted"},d.renderBase=y.n,i.set(r,d)}d.hookSeq.n=d.renderBase;let f;try{Rt();let g;try{g=d.renderFn(n.props)}finally{It()}f=await ge(Promise.resolve(g),i.asyncTimeout,`renderFn(${r})`)}catch(g){console.error(`[vdom] renderFn \u8D85\u65F6/\u9519\u8BEF\uFF08${r}\uFF09\u2014\u2014\u7EC4\u4EF6\u7EA7 hole \u964D\u7EA7\uFF08\u4E0B\u4E00\u62CD\u91CD\u8BD5\u81EA\u6108\uFF09:`,g),f=null}d.lastOutput=tn(f);let m=Array.isArray(f),x=typeof f?.type=="function",T=O(f);return await a(f,m||x||T?r:e,m||x||T?0:t,o),c}function Z(n,e){let t=[...e.keys()].filter(o=>o===n||o.startsWith(n+".")).reverse();for(let o of t){let r=e.get(o);if(r){for(let s of r.onUnmounts.reverse())try{s()}catch(i){console.error("[vdom] onUnmount:",i)}e.delete(o)}}}var Ee=class{queue=null;failed=!1;phase="inactive";begin(e){let t=[],o=r=>{t.push(r);for(let s of r.childNodes)o(s)};for(let r of e.childNodes)o(r);this.queue=t,this.failed=!1,this.phase="consuming"}end(){this.phase==="consuming"&&(this.queue&&this.queue.length>0&&(this.failed=!0),this.queue=null,this.phase=this.failed?"failed":"inactive")}reset(){this.queue=null,this.failed=!1,this.phase="inactive"}next(e,t,o){if(this.phase!=="consuming")return console.error(`[vdom] absorb \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Anext \u5728 ${this.phase} \u9636\u6BB5\u8C03\u7528\uFF08\u5E94 consuming\uFF09`),null;let r=this.queue;if(!r)return null;for(;r.length>0;){let s=r.shift();if(e==="element"?s.nodeType===1&&s.tagName.toLowerCase()===t:e==="text"?s.nodeType===3:s.nodeType===8){if(e==="text"&&o!==void 0){let a=s,l=a.textContent??"";if(l!==o&&l.startsWith(o)){let u=a.splitText(o.length);r.unshift(u)}}return s}}return this.failed=!0,this.phase="failed",null}};var nn=new Set(["draggable","contenteditable","spellcheck"]);function Fe(n,e,t){if(e==="innerHTML"||e==="textContent"||e==="value"){n[e]=t;return}if(t==null){n.removeAttribute(e);return}if(nn.has(e)){n.setAttribute(e,t?"true":"false");return}if(t===!1){n.removeAttribute(e);return}if(e==="class"||e==="className"){n.setAttribute("class",String(t));return}if(typeof t=="boolean"){n.setAttribute(e,"");return}n.setAttribute(e,String(t))}var on=new Set(["zIndex","opacity","lineHeight","zoom","fontWeight","order","flex","flexGrow","flexShrink","flexBasis","animationIterationCount","orphans","widows","columns","columnCount","columnGap","counterIncrement","counterReset","aspectRatio","scale","rotate"]);function rn(n,e,t){if(t==null||t===!1){e.startsWith("--")&&n.style.removeProperty(e),n.style[e]="";return}if(e.startsWith("--")){n.style.setProperty(e,String(t));return}typeof t=="number"&&!on.has(e)&&(t=`${t}px`),n.style[e]=String(t)}function Ke(n,e){if(typeof e=="string"){n.setAttribute("style",e);return}if(e&&typeof e=="object"){n.style.cssText="";for(let[t,o]of Object.entries(e))rn(n,t,o)}}var sn=new Set(["value","checked","selected","disabled","hidden","autofocus","defaultValue","defaultChecked","innerHTML","textContent","download","indeterminate","multiple","readOnly","required","tabIndex","spellcheck","draggable","scrollTop","scrollLeft","volume","muted","paused","playbackRate","open"]);function At(n){return sn.has(n)}function Mt(n,e,t){n[e]=t}function ye(n,e){for(let[t,o]of Object.entries(e))t==="style"?Ke(n,o):Fe(n,t,o)}function Lt(n,e,t,o,r,s){if(o!=="ref")if(typeof r=="function"||r===void 0&&typeof s=="function"){if(ee.test(o)){let i=ae(o);i&&n.set(e,i,r)}return}else if(ee.test(o)){let i=ae(o);i&&n.set(e,i,r)}else o==="style"?Ke(t,r):At(o)?Mt(t,o,r):Fe(t,o,r)}var an="http://www.w3.org/2000/svg",ln=new Set(["svg","path","circle","line","rect","text","g","defs","marker","polyline","polygon","ellipse","use","symbol","tspan","textPath","clipPath","mask","pattern","linearGradient","radialGradient","stop"]);function Ot(n,e){return ln.has(e)?n.createElementNS(an,e):n.createElement(e)}function dn(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===1&&t.tagName.toLowerCase()===e.tag)ye(t,e.attrs);else if(n.absorb.queue&&!t){let r=n.absorb.next("element",e.tag);if(r)ye(r,e.attrs),n.nodes.set(e.id,r);else{let s=Ot(n.doc,e.tag);ye(s,e.attrs),n.nodes.set(e.id,s)}}else{let r=Ot(n.doc,e.tag);ye(r,e.attrs),t&&(n.clearNodeRefs(e.id),n.eventRegistry.remove(e.id),t.replaceWith(r)),n.nodes.set(e.id,r)}let o=n.nodes.get(e.id);o&&o.nodeType===1&&o.setAttribute("data-wf-id",e.id)}function un(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===3)t.textContent!==e.value&&(t.textContent=e.value);else if(n.absorb.queue&&!t){let o=n.absorb.next("text",void 0,e.value);if(o)o.textContent!==e.value&&(o.textContent=e.value),n.nodes.set(e.id,o);else{let r=n.doc.createTextNode(e.value);n.nodes.set(e.id,r)}}else{let o=n.doc.createTextNode(e.value);t&&t.replaceWith(o),n.nodes.set(e.id,o)}}function fn(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===8){let o=e.detail?`wf-hole: ${e.detail}`:"wf-hole";t.textContent!==o&&(t.textContent=o)}else if(n.absorb.queue&&!t){let o=n.absorb.next("comment");if(o)n.nodes.set(e.id,o);else{let r=n.doc.createComment(e.detail?`wf-hole: ${e.detail}`:"wf-hole");n.nodes.set(e.id,r)}}else{let o=n.doc.createComment(e.detail?`wf-hole: ${e.detail}`:"wf-hole");t&&t.replaceWith(o),n.nodes.set(e.id,o)}}function cn(n,e){let t=n.nodes.get(e.id);if(!t||t.isConnected)return;let o=n.parentOf(e);if(o){if(o.nodeType===3){let r=o.parentElement;if(!r)return;let s=o.nextSibling&&o.nextSibling.parentNode===r?o.nextSibling:null;r.insertBefore(t,s),t.nodeType===1&&n.refRegistry.mount(e.id,t);return}if(o.nodeType===8){console.error(`[vdom] id \u7A7A\u95F4\u8FDD\u4F8B\uFF1Ainsert ${e.id} \u7684 parent \u662F\u6CE8\u91CA\u951A\uFF08${e.parent}\uFF09\u2014\u2014\u63D2\u5230\u7236\u5BB9\u5668`);let r=o.parentElement;r&&r.appendChild(t),t.nodeType===1&&n.refRegistry.mount(e.id,t);return}if(e.ref){let r=n.nodes.get(e.ref)??null;r&&r.parentNode===o?o.insertBefore(t,r.nextSibling):r?o.appendChild(t):o.insertBefore(t,o.firstChild)}else o.insertBefore(t,o.firstChild);t.nodeType===1&&n.refRegistry.mount(e.id,t)}}function pn(n,e){let t=n.nodes.get(e.id);if(t){if(!e.noMove){let o=n.parentOf(e);if(!o)return;let r=e.ref?n.nodes.get(e.ref)??null:null;r?o.insertBefore(t,r.nextSibling):e.first?o.insertBefore(t,o.firstChild):o.appendChild(t)}n.remapSubtree(e.id,e.newId)}}function mn(n,e){n.clearNodeRefs(e.id),n.eventRegistry.remove(e.id),n.nodes.get(e.id)?.remove();let t=e.id+".";for(let o of[...n.nodes.keys()])o.startsWith(t)&&(n.clearNodeRefs(o),n.eventRegistry.remove(o),n.nodes.delete(o));n.nodes.delete(e.id)}function gn(n,e){let t=n.nodes.get(e.id);t&&t.nodeType===3&&(t.textContent=e.value)}function yn(n,e){let t=n.nodes.get(e.id);if(!t||t.nodeType!==1)return;let o=t;if(e.key==="ref"){let r=n.refRegistry.refs.get(e.id);if(e.value===void 0){n.refRegistry.set(e.id,void 0,r),n.refRegistry.refs.delete(e.id);return}n.refRegistry.set(e.id,e.value,r),o.isConnected&&n.refRegistry.mount(e.id,o);return}if(ee.test(e.key)){let r=ae(e.key);r&&(e.value===void 0?n.eventRegistry.removeEvent(e.id,r):n.eventRegistry.set(e.id,r,e.value));return}Lt(n.eventRegistry,e.id,o,e.key,e.value,e.prev)}function vn(n,e){let t=n.nodes.get(e.id);t&&t.nodeType===1&&typeof e.fn=="function"&&(n.refRegistry.set(e.id,e.fn),n.refRegistry.mount(e.id,t))}function hn(n,e){n.clearNodeRefs(e.id)}function bn(n,e){let t=n.registry?.get(e.compId);t&&(t.phase="mounted")}function wn(n,e){n.registry&&Z(e.compId,n.registry)}function xn(n,e){if(e.full&&n.absorb.end(),e.full&&n.touched.size>0)for(let[t,o]of[...n.nodes])n.touched.has(t)||(n.clearNodeRefs(t),n.eventRegistry.remove(t),o.remove(),n.nodes.delete(t));n.touched.clear()}function Ht(n,e){switch(e.op){case"create":dn(n,e);break;case"createText":un(n,e);break;case"createAnchor":fn(n,e);break;case"insert":cn(n,e);break;case"move":pn(n,e);break;case"remove":mn(n,e);break;case"setText":gn(n,e);break;case"setProp":yn(n,e);break;case"ref":vn(n,e);break;case"unref":hn(n,e);break;case"mount":bn(n,e);break;case"unmount":wn(n,e);break;case"done":xn(n,e);break;case"close":break}}var j=class{nodes=new Map;touched=new Set;eventRegistry;refRegistry=new we;absorb=new Ee;container;doc;registry;devVerify=null;constructor(e,t,o){this.container=e,this.doc=t,this.registry=o??null,this.eventRegistry=new be(t,e)}dispose(){if(this.eventRegistry.dispose(),this.refRegistry.dispose(),this.registry)for(let e of[...this.registry.keys()].reverse()){let t=this.registry.get(e);if(t){for(let o of[...t.onUnmounts].reverse())try{o()}catch{}this.registry.delete(e)}}}clearNodeRefs(e){this.refRegistry.unmount(e)}remapSubtree(e,t){let o=(r,s)=>{let i=r.get(s);i!==void 0&&(r.delete(s),r.set(t+s.slice(e.length),i))};for(let r of[...this.nodes.keys()])if(r===e||r.startsWith(e+".")){o(this.nodes,r);let s=this.nodes.get(t+r.slice(e.length));s&&s.nodeType===1&&s.setAttribute("data-wf-id",t+r.slice(e.length))}this.refRegistry.remap(e,t);for(let r of[...this.eventRegistry.table.keys()])if(r===e||r.startsWith(e+".")){let s=this.eventRegistry.table.get(r);this.eventRegistry.table.delete(r),this.eventRegistry.table.set(t+r.slice(e.length),s)}if(this.registry){for(let r of[...this.registry.keys()])if(r===e||r.startsWith(e+".")){let s=this.registry.get(r);this.registry.delete(r),this.registry.set(t+r.slice(e.length),s)}}}parentOf(e){if(e.parent==="root")return this.container;let t=this.nodes.get(e.parent);if(t)return t;let o=e.parent.split(".");for(let r=o.length-1;r>0;r--){let s=o.slice(0,r).join(".");if(s==="root")return this.container;let i=this.nodes.get(s);if(i)return i}return null}apply(e){Ht(this,e),this.devVerify&&this.devVerify(e,this)}};function Dt(){let n=new Map;return{get:e=>n.get(e),set:(e,t)=>{n.set(e,t)},removePrefix:e=>{for(let t of[...n.keys()])(t===e||t.startsWith(e+"."))&&n.delete(t)},hasPrefix:e=>{for(let t of n.keys())if(t===e||t.startsWith(e+"."))return!0;return!1},remapPrefix:(e,t)=>{for(let[o,r]of[...n])(o===e||o.startsWith(e+"."))&&(n.delete(o),n.set(t+o.slice(e.length),r))},clear:()=>{n.clear()}}}function Ut(n,e){let t=[];switch(e.op){case"create":case"createText":case"createAnchor":{n.get(e.id)===void 0&&n.set(e.id,"created");break}case"insert":{let o=n.get(e.id);o===void 0?t.push(`insert Pre \u8FDD\u4F8B\uFF1Aid ${e.id} \u672A create`):o==="created"&&n.set(e.id,"inserted");break}case"close":{let o=n.get(e.id);o===void 0?t.push(`close Pre \u8FDD\u4F8B\uFF1Aid ${e.id} \u4E0D\u5B58\u5728`):o==="inserted"?n.set(e.id,"active"):o!=="active"&&t.push(`close Pre \u8FDD\u4F8B\uFF1A${e.id} \u72B6\u6001\u5E94\u4E3A inserted/active\uFF08\u5B9E\u9645 ${o}\uFF09`);break}case"remove":{n.removePrefix(e.id),n.hasPrefix(e.id)&&t.push(`remove Post \u8FDD\u4F8B\uFF1A${e.id} \u524D\u7F00\u8BB0\u5F55\u6B8B\u7559`);break}case"setText":{n.get(e.id)===void 0&&t.push(`setText Pre \u8FDD\u4F8B\uFF1Aid ${e.id} \u4E0D\u5B58\u5728`);break}case"setProp":{n.get(e.id)===void 0&&t.push(`setProp Pre \u8FDD\u4F8B\uFF1Aid ${e.id} \u4E0D\u5B58\u5728`);break}case"move":{n.remapPrefix(e.id,e.newId),n.get(e.newId)===void 0&&t.push(`move Post \u8FDD\u4F8B\uFF1Aremap \u540E\u65B0 id ${e.newId} \u4E0D\u5B58\u5728`);break}case"mount":case"unmount":case"ref":case"unref":break;case"done":break}return t}function $t(){let n=Dt();return(e,t)=>{let o=Ut(n,e);for(let r of o)console.error(`[vdom-dev] ${r}`);switch(e.op){case"insert":{let r=t.nodes.get(e.id);r&&!r.isConnected&&console.error(`[vdom-dev] insert Post \u8FDD\u4F8B\uFF1A${e.id} \u672A\u6302\u8F7D\uFF08isConnected=false\uFF09`);break}case"setText":{let r=t.nodes.get(e.id);r&&r.nodeType!==3&&console.error(`[vdom-dev] setText Pre \u8FDD\u4F8B\uFF1A${e.id} \u975E\u6587\u672C\u8282\u70B9\uFF08${r.nodeType}\uFF09`);break}case"setProp":{let r=t.nodes.get(e.id);r&&r.nodeType!==1&&console.error(`[vdom-dev] setProp Pre \u8FDD\u4F8B\uFF1A${e.id} \u975E\u5143\u7D20\u8282\u70B9\uFF08${r.nodeType}\uFF09`);break}default:break}}}function Wt(n=15e3){let e=new Map,t="active",o={};return{get(r,s){let i=e.get(r);if(i)return i;let a=ge((async()=>{if(r in o)return o[r];if(s)return s();let l=await fetch(r);if(!l.ok)throw new Error(`[vdom] ctx.data \u8BF7\u6C42\u5931\u8D25 ${l.status}: ${r}`);return l.json()})(),n,`ctx.data(${r})`);return e.set(r,a),a},set(r,s){e.set(r,Promise.resolve(s))},has(r){return e.has(r)},preload(r){o={...o,...r}},invalidate(r){e.delete(r)},seed(){return o}}}function Tn(n){return(e,t)=>{if(t&&typeof t=="object"&&typeof t.$fn=="number"){let o=n.get(t.$fn);return o||console.error(`[vdom] \u4F20\u8F93\u8FDD\u4F8B\uFF1A$fn:${t.$fn} \u65E0\u5BF9\u5E94\u51FD\u6570\uFF08\u51FD\u6570\u8868\u5DF2\u6E05/\u8DE8\u6D41\u5F15\u7528\uFF09`),o}return t}}function kn(n,e){return $("div",{class:"wf-error-fallback",style:"padding:40px 24px;text-align:center;font-family:var(--wf-font-sans,system-ui);"},[$("div",{style:"font-size:21px;font-weight:600;margin-bottom:8px;"},"\u9875\u9762\u6E32\u67D3\u5931\u8D25"),$("div",{style:"font-size:13px;color:var(--wf-color-text-secondary,#64748b);margin-bottom:16px;max-width:520px;margin-inline:auto;word-break:break-all;"},String(n?.message??n)),$("button",{class:"wf-btn wf-btn--primary",onClick:()=>{e.render?.()},style:"padding:8px 20px;border-radius:6px;border:none;cursor:pointer;"},"\u91CD\u8BD5")])}function qt(n,e){let t=new TextDecoder,o="",r=Tn(e),s=async()=>{for(;;){let i=o.indexOf(`
4
- `);if(i>=0){let u=o.slice(0,i).trim();if(o=o.slice(i+1),u)return{value:JSON.parse(u,r),done:!1};continue}let{value:a,done:l}=await n.read();if(l){if(o.trim()){let u=o.trim();return o="",{value:JSON.parse(u,r),done:!1}}return{value:void 0,done:!0}}o+=t.decode(a,{stream:!0})}};return{[Symbol.asyncIterator](){return{next:s}}}}function Cn(n,e){let t=new TextEncoder,o=new WeakMap,r=(s,i)=>{if(typeof i=="function"){let a=o.get(i);if(a!==void 0)return{$fn:a};let l=e.size+1;return e.set(l,i),o.set(i,l),{$fn:l}}return i};return n.pipeThrough(new TransformStream({transform(s,i){i.enqueue(t.encode(JSON.stringify(s,r)+`
5
- `))}}))}function En(){return new Map}function Sn(n,e){let t=document,o=window,r=typeof e.root=="string"?t.querySelector(e.root):e.root;if(!r)throw new Error(`uiServe: root \u672A\u627E\u5230 \u2014 ${String(e.root)}`);let s=En(),i=_(),a=new j(r,t,i);o.__WF_DEV__&&(a.devVerify=$t(),Vt(o));let l=se(o.location.pathname),u=null,d="active",c="idle",f=[],m=null,x=0,T=3,g=C=>{u=null;let N=e.errorFallback?.(C,E)??kn(C,E),I=W.stream(N,{status:500}).body.getReader();(async()=>{try{for await(let D of qt(I,s))a.apply(D)}catch(D){console.error("[vdom] error fallback \u6E32\u67D3\u5931\u8D25:",D)}})()},p=[],y=async C=>{let N=C;c="rendering";try{for(;;){try{l=N;let R=await n.resolve(l,E),I=R.headers.get("Location");if(R.status>=300&&R.status<400&&I){o.history.replaceState({},"",I),N=se(I);continue}if(R.body){for await(let D of qt(R.body.getReader(),s))a.apply(D);if(a.absorb.failed){r.innerHTML="",u=null,a.absorb.reset();continue}}if(!u&&a.absorb.failed){r.innerHTML="",a.absorb.reset();continue}x=0}catch(R){u=null,x++,console.error("[vdom] render:",R),x>=T&&(x=0,g(R instanceof Error?R:new Error(String(R))))}if(f.length>0)N=f.shift();else break}}finally{let R=p;p=[];for(let I of R)try{I()}catch(D){console.error("[vdom] afterRender:",D)}c="idle",m=null,s.clear()}},w=C=>{if(d==="unmounted")return console.error("[vdom] serve \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Aunmount \u540E render \u8C03\u7528\u88AB\u5FFD\u7565"),Promise.resolve();if(c==="rendering"&&m)return f.push(C),m;let N=y(C);return m=N,N},h=async C=>{if(d==="unmounted"){console.error("[vdom] serve \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Aunmount \u540E navigate \u88AB\u5FFD\u7565");return}o.history.pushState({},"",C),await w(se(C))},E={async render(){await w(l)},data:Wt(),browser:Ae(),onUnmount(C){S.push(C)},afterRender(C){p.push(C)},...e.api?{api:e.api}:{},...e.auth?{auth:e.auth}:{},...e.ws?{ws:e.ws}:{},...e.i18n?{i18n:e.i18n}:{},...e.toast?{toast:e.toast}:{},...e.confirm?{confirm:e.confirm}:{},...e.notification?{notification:e.notification}:{},app:{navigate:h}},W=E;W.stream=(C,N)=>{!u&&r.childNodes.length>0&&(Array.from(r.querySelectorAll("*")).some(D=>[...D.childNodes].some(he=>he.nodeType===8&&he.textContent?.includes("wf")))?a.absorb.begin(r):r.innerHTML="");let R=u?u.type!==C.type?(Pt(i),G(C,E,i)):me(u,C,E,i):G(C,E,i);return u=C,new Response(Cn(R,s),{status:N?.status??200,headers:N?.headers})};let P=C=>{let R=C.target?.closest?.("a[href]");if(!R)return;let I=R.getAttribute("href");!I||I.startsWith("http")||I.startsWith("#")||(C.preventDefault(),h(I))};t.addEventListener("click",P);let v=()=>{w(se(o.location.pathname))};o.addEventListener("popstate",v);let b=(async()=>{await w(l)})(),S=[];return{ready:b,navigate:h,unmount(){d="unmounted",t.removeEventListener("click",P),o.removeEventListener("popstate",v),a.dispose();for(let C of S.reverse())try{C()}catch(N){console.error("[vdom] unmount:",N)}S.length=0,r.innerHTML=""}}}var ve=class extends Error{status;constructor(e,t){super(e),this.name="ApiError",this.status=t}};function Nn(n={}){let e=n.baseUrl??"",t=n.timeout??15e3;async function o(r,s,i,a={}){let l=new AbortController,u=setTimeout(()=>l.abort(),t);try{let d=typeof n.token=="function"?n.token():n.token,c={"content-type":"application/json",...typeof n.headers=="function"?n.headers():n.headers,...d?{authorization:`Bearer ${d}`}:{},...a.headers},f=await fetch(e+s,{method:r,headers:c,body:i!==void 0?JSON.stringify(i):void 0,signal:l.signal});if(f.status===401&&n.onUnauthorized&&await n.onUnauthorized())return o(r,s,i,a);if(!f.ok)throw new ve(`[api] \u8BF7\u6C42\u5931\u8D25 ${f.status}: ${r} ${s}`,f.status);let m=await f.text();return m?JSON.parse(m):void 0}catch(d){let c=d instanceof ve?d:new ve(d.message);throw n.onError?.(c),c}finally{clearTimeout(u)}}return{get:(r,s)=>o("GET",r,void 0,s),post:(r,s,i)=>o("POST",r,s,i),put:(r,s,i)=>o("PUT",r,s,i),delete:(r,s)=>o("DELETE",r,void 0,s),patch:(r,s,i)=>o("PATCH",r,s,i),request:o}}function Rn(n={}){let e=n.scheme??"Bearer",t=n.storage??{get:()=>null,set:()=>{}},o=n.tokenKey??n.key??"wf-auth-token",r=n.userKey??"wf-auth-user",s=n.refreshTokenKey??"wf-auth-refresh",i=null;try{let l=t.get(r);l&&(i=JSON.parse(l))}catch{}let a={getToken(){let l=t.get(o);return l||null},setToken(l){l===null?t.set(o,""):t.set(o,l)},headers(){let l=t.get(o);return l?{authorization:`${e} ${l}`}:{}},logout(){t.set(o,""),t.set(r,""),t.set(s,""),i=null},get user(){return i},get isLoggedIn(){return!!t.get(o)},login(l,u,d){t.set(o,l),u!==void 0&&(t.set(r,JSON.stringify(u)),i=u),d!=null&&t.set(s,d),n.onAuth?.(a)},setUser(l){t.set(r,JSON.stringify(l)),i=l},async refresh(){if(!n.onRefresh)return!1;let l=await n.onRefresh();return l&&n.onAuth?.(a),l}};return a}function In(n={}){let e=n.messages??{},t=n.locale??Object.keys(e)[0]??"default";return{get locale(){return t},setLocale(o){t=o},t(o,r){let i=e[t]?.[o]??o;if(r)for(let[a,l]of Object.entries(r))i=i.replaceAll(`{${a}}`,String(l));return i}}}function Vn(n={}){let e=n.WebSocketCtor??globalThis.WebSocket,t=null,o=new Set,r=i=>{let a=i.data;if(typeof i.data=="string")try{a=JSON.parse(i.data)}catch{}for(let l of[...o])l(a)},s={current:!1};return{connect(i){t?.close(),e&&(t=new e(i??n.url??""),t.onmessage=r,t.onopen=()=>{s.current=!0},t.onclose=()=>{s.current=!1,t=null})},get isConnected(){return s.current},send(i){t?.send(typeof i=="string"?i:JSON.stringify(i))},onMessage(i){return o.add(i),()=>{o.delete(i)}},close(){t?.close(),t=null}}}function Ft(n,e="info",t=3e3){let o=document.createElement("div");o.className="wf-toast-host",o.style.cssText="position:fixed;top:16px;right:16px;z-index:var(--wf-z-toast,9999)",document.body.appendChild(o);let r=_(),s=new j(o,document,r),i={render:async()=>{},onUnmount:()=>{},data:{get:async()=>{},set:()=>{},has:()=>!1}};G($(()=>()=>$("div",{class:`wf-toast wf-toast--${e}`},$("span",{class:"wf-toast-msg"},n)),{}),i,r).pipeTo(new WritableStream({write(l){s.apply(l)}})).then(()=>{setTimeout(()=>{s.dispose(),o.remove()},t)})}function Pn(n){return Object.assign(n,{toast:Ft})}function An(n,e,t){let o=new AbortController,r=t?.signal;r&&(r.aborted?o.abort():r.addEventListener("abort",()=>o.abort(),{once:!0}));let s=t?.traceId??Dn(),i=t?.record!==!1,a=[],l=(async()=>{let u;try{u=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json","X-Trace-Id":s,Accept:"text/event-stream",...t?.headers},body:JSON.stringify(e),signal:o.signal})}catch(d){if(o.signal.aborted)return;t?.onError?.({code:"provider_error",message:d instanceof Error?d.message:String(d)});return}if(!u.ok){t?.onError?.({code:Hn(u.status),message:`HTTP ${u.status} ${u.statusText}`});return}try{for await(let{name:d,data:c}of Ln(u.body)){if(o.signal.aborted)return;On(a,{name:d,data:c},i),Mn(d,c,t??{})}}catch(d){if(o.signal.aborted)return;t?.onError?.({code:"provider_error",message:d instanceof Error?d.message:String(d)})}})();return{abort:()=>o.abort(),done:l,traceId:s,events:a}}function Mn(n,e,t){switch(n){case"wf:token":return t.onToken?.(e.text);case"wf:tool_call":return t.onToolCall?.(e);case"wf:tool_result":return t.onToolResult?.(e);case"wf:tool_progress":return t.onToolProgress?.(e);case"wf:step":return t.onStep?.(e);case"wf:approval_request":return t.onApproval?.(e);case"wf:usage":return t.onUsage?.(e);case"wf:done":return t.onDone?.(e);case"wf:error":return t.onError?.(e);default:return t.onEvent?.(n,e)}}async function*Ln(n){let e=n.getReader(),t=new TextDecoder,o="";try{for(;;){let{done:r,value:s}=await e.read();if(r)break;o+=t.decode(s,{stream:!0});let i=o.split(`
1
+ var fo=Object.defineProperty;var Kt=(n,e,t)=>()=>{if(t)throw t[0];try{return n&&(e=n(n=0)),e}catch(o){throw t=[o],o}};var po=(n,e)=>{for(var t in e)fo(n,t,{get:e[t],enumerable:!0})};function At(n,e){return!n.startsWith("aria-")||typeof e!="boolean"?null:e?"true":"false"}function Ht(n,e,t){if(e==="innerHTML"||e==="textContent"||e==="value"){n[e]=t;return}if(t==null){n.removeAttribute(e);return}let o=At(e,t);if(o!==null){n.setAttribute(e,o);return}if(Lo.has(e)){n.setAttribute(e,t?"true":"false");return}if(t===!1){n.removeAttribute(e);return}if(e==="class"||e==="className"){n.setAttribute("class",String(t));return}if(typeof t=="boolean"){n.setAttribute(e,"");return}n.setAttribute(e,String(t))}var Lo,Lt=Kt(()=>{"use strict";Lo=new Set(["draggable","contenteditable","spellcheck"])});var io={};po(io,{VOID_ELEMENTS:()=>oo,attrsToHtml:()=>so,commandToHtml:()=>wr,escapeHtml:()=>Ne,htmlDocument:()=>Tr,kebab:()=>ro});function Ne(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function ro(n){return n.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}function so(n){let e=[];for(let[t,o]of Object.entries(n)){let r=At(t,o);if(r!==null){e.push(`${t}="${r}"`);continue}if(!(o==null||o===!1))if(t==="style"&&o&&typeof o=="object"){let s=Object.entries(o).filter(([,i])=>i!=null&&i!==!1).map(([i,a])=>`${ro(i)}: ${a}`).join("; ");s&&e.push(`style="${Ne(s)}"`)}else typeof o=="boolean"?e.push(`${t}=""`):e.push(`${t}="${Ne(String(o))}"`)}return e.length?" "+e.join(" "):""}function wr(){let n=[];return new TransformStream({transform(e,t){switch(e.op){case"create":n.push(e.tag),t.enqueue(`<${e.tag}${so(e.attrs)}>`);break;case"createText":t.enqueue(Ne(e.value));break;case"createAnchor":t.enqueue("<!--wf-hole-->");break;case"close":{let o=n.pop();o&&!oo.has(o)&&t.enqueue(`</${o}>`);break}case"setText":t.enqueue(Ne(e.value));break;case"insert":case"remove":case"setProp":case"ref":case"unref":case"mount":case"unmount":case"move":case"done":break}}})}function Tr(n,e={}){let t=e.rootId??"root",o=e.data?`<script>window.__DATA__=${JSON.stringify(e.data).replace(/</g,"\\u003c")}<\/script>`:"";return`<!DOCTYPE html><html><head><meta charset="utf-8"><title>${Ne(e.title??"")}</title></head><body><div id="${t}">${n}</div>${o}</body></html>`}var oo,ao=Kt(()=>{"use strict";Lt();oo=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"])});function st(n){return n==null?null:typeof n=="string"?n:typeof n=="number"?String(n):(console.warn(`[vdom] key \u5FC5\u987B\u662F string|number\u2014\u2014\u5F53\u524D ${typeof n}\uFF08\u5FFD\u7565\u2014\u2014\u4F4D\u7F6E\u8EAB\u4EFD\uFF09`),null)}function it(n){return st(n?.key)}function at(n){let e={...n??{}};return delete e.key,e}function X(n,e,...t){let o=at(e);return t.length===1?o.children=t[0]:t.length>1&&(o.children=t),{type:n,props:o,key:it(e)}}function lt(n,e,t){return{type:n,props:at(e),key:st(t)??it(e)}}var mo=lt,go=lt;var zt="pos:";function Q(n,e){return`${n}.k${e.replace(/%/g,"%25").replace(/\./g,"%2E")}`}function L(n){return n==null||typeof n=="boolean"||typeof n=="string"||typeof n=="number"||Array.isArray(n)?null:n.key}function bo(n){return L(n)!==null}function ut(n){return`${zt}${n}`}function Yt(n){return n.startsWith(zt)}function Ve(n,e){let t=new Set;for(let o of n){let r=L(o);if(r!==null){if(t.has(r)){console.warn(`[vdom] ${e}\uFF1A\u91CD\u590D key "${r}"\uFF08\u5217\u8868\u8EAB\u4EFD\u6620\u5C04\u6B67\u4E49\u2014\u2014\u589E\u5220/\u91CD\u6392\u884C\u4E3A\u4E0D\u786E\u5B9A\uFF09\u2014\u2014\u8BF7\u4E3A\u6BCF\u9879\u58F0\u660E\u552F\u4E00 key\uFF08\u6570\u636E id \u2192 keyBy\uFF09`);return}t.add(r)}}}function Jt(n,e){if(n.length<2)return;let t=n.some(r=>typeof r?.type=="function"),o=n.some(r=>!bo(r)&&typeof r?.type=="function");if(t&&o){let r=n.map(s=>{let i=s;if(i==null)return"null";if(typeof i=="boolean")return"bool";if(typeof i=="string"||typeof i=="number")return"text";if(Array.isArray(i))return"arr";if(typeof i.type=="function"){let a=i.type.name;return"comp"+(a?":"+a:"")}return"el"+(i.key?`.k{${String(i.key).slice(0,16)}}`:"")});console.warn(`[vdom] ${e}\uFF1A\u5217\u8868\u542B\u65E0 key \u7684\u7EC4\u4EF6\u9879\uFF08\u957F\u5EA6 ${n.length}\uFF09\u2014\u2014\u9879: [${r.join(", ")}]\u2014\u2014\u52A8\u6001\u589E\u5220/\u91CD\u6392\u65F6\u72B6\u6001\u4F1A\u6309\u4F4D\u7F6E\u7EE7\u627F\u2014\u2014\u8BF7\u4E3A\u7EC4\u4EF6\u9879\u58F0\u660E key\uFF08\u6570\u636E id \u2192 keyBy\uFF09`)}}var Gt=Symbol("vdom-fragment");function le(n){return n.type===Gt}function dt(){return{children:new Map}}function ct(n){return n.split("/").filter(Boolean)}function vo(n,e,t){let o=e.slice(1);if(!n.children.has(":")){let s=t();s.param=o,n.children.set(":",s)}let r=n.children.get(":");if(r.param!==o)throw new Error(`[router] param conflict: ":${r.param}" already registered, cannot register ":${o}"`);return r}function ho(n,e,t){return e==="*"?(n.wildcard=!0,n):e.startsWith(":")?vo(n,e,t):(n.children.has(e)||n.children.set(e,t()),n.children.get(e))}function Xt(n,e,t){let o=ct(e),r=n;for(let s of o){if(s==="*")return r.wildcard=!0,r.wildcardValue=t,r;r=ho(r,s,()=>dt())}return r.value=t,r}function qe(n,e,t,o,r="value"){if(t===e.length){let l=r==="value"?n.value:n.wildcardValue;return l!==void 0?{value:l,params:{...o},node:n}:null}let s=e[t],i=n.children.get(s);if(i){let l=qe(i,e,t+1,o,r);if(l)return l}let a=n.children.get(":");if(a?.param){let l={...o,[a.param]:decodeURIComponent(s)},d=qe(a,e,t+1,l,r);if(d)return d}return null}function Be(n,e){let t=qe(n,e,0,{});if(t){let o=t.node.wildcardValue!==void 0;return{value:t.value,params:o?{...t.params,"*":""}:t.params,wildcard:!1}}return yo(n,e,e.length)}function yo(n,e,t){for(let o=0;o<=t;o++){let r=qe(n,e.slice(0,o),0,{},"wildcard");if(r)return{value:r.value,params:{...r.params,"*":e.slice(o).join("/")},wildcard:!0}}return null}function Qt(n){let e;try{e=new URL(n.url)}catch{return{ok:!1,reason:"invalid-url"}}let t=xo(e);try{decodeURI(e.pathname)}catch{return{ok:!1,reason:"malformed-encoding"}}for(let o of Zt(e.pathname))try{decodeURIComponent(o)}catch{return{ok:!1,reason:"malformed-encoding"}}return{ok:!0,segments:Zt(e.pathname),pathname:e.pathname,query:t}}function Zt(n){return n.split("/").filter(Boolean)}function en(n){return n?{...n.params}:{}}function xo(n){return Object.fromEntries(n.searchParams)}function wo(n){return Response.json({error:"Bad Request",reason:n},{status:400})}async function tn(n,e,t,o){let r=Qt(t);if(!r.ok)return wo(r.reason);let s=Be(n,r.segments),i=s?{value:s.value,params:en(s),wildcard:s.wildcard}:null;e.enrichCtx?.(o,i,r.pathname,r.query);try{if(!i)return await e.onNotFound(t,o,r.pathname);let a=e.resolveHandler(i,t,o);if(a.kind==="not-found")return await e.onNotFound(t,o,r.pathname);if(a.kind==="not-allowed")return e.onMethodNotAllowed?await e.onMethodNotAllowed(a.methods,t,o,r.pathname):new Response("Method Not Allowed",{status:405,headers:{Allow:a.methods.join(", ")}});let l=await a.run();return e.onRouteSuccess?.(t,o,r.pathname),l}catch(a){if(e.onError)return e.onError(a,t,o,r.pathname);throw a}}function nn(n){return new Request(new URL(n,"http://localhost"))}var ft=class{root=dt();notFoundHandler=null;get(e,t){return Xt(this.root,e,t),this}has(e){try{let t=new URL(e,"http://x");for(let o of t.pathname.split("/").filter(Boolean))decodeURIComponent(o);return Be(this.root,ct(t.pathname))!==null}catch{return!1}}notFound(e){return this.notFoundHandler=e,this}_pipeline;get pipeline(){return this._pipeline??={resolveHandler:(e,t,o)=>({kind:"route",run:()=>e.value(t,o)}),onNotFound:(e,t)=>this.notFoundHandler?this.notFoundHandler(e,t):new Response(null,{status:404}),enrichCtx:(e,t,o,r)=>{e.params=t?{...t.params}:{},e.query=r,e.route={path:o,params:e.params,query:r}}}}async resolve(e,t){return tn(this.root,this.pipeline,e,t)}};function on(n){try{if(typeof document>"u")return;let e=document.createElement("textarea");e.value=n,e.style.position="fixed",e.style.opacity="0",e.setAttribute("readonly",""),document.body.appendChild(e),e.select();let t=document.execCommand("copy");e.remove(),!t&&typeof console<"u"&&console.warn("[browser] copyText \u964D\u7EA7\u5931\u8D25\uFF08execCommand \u8FD4\u56DE false\uFF09")}catch{}}function pt(){let n=()=>typeof document<"u"?document.documentElement:null,e=()=>typeof document<"u"?document.scrollingElement??document.documentElement:null;return{get window(){return typeof window<"u"?window:void 0},get document(){return typeof document<"u"?document:void 0},copyText(t){if(typeof navigator<"u"&&navigator.clipboard?.writeText){navigator.clipboard.writeText(t).catch(()=>on(t));return}on(t)},downloadFile(t,o,r="text/plain"){try{let s=typeof document<"u"?document:null;if(!s)return!1;let i=new Blob([o],{type:r}),a=URL.createObjectURL(i),l=s.createElement("a");return l.href=a,l.download=t,l.click(),URL.revokeObjectURL(a),!0}catch{return!1}},activeElement:()=>typeof document<"u"?document.activeElement:null,byId:t=>typeof document<"u"?document.getElementById(t):null,query:t=>typeof document<"u"?document.querySelector(t):null,queryAll:t=>typeof document<"u"?document.querySelectorAll(t):null,createElement:t=>typeof document<"u"?document.createElement(t):null,createElementNS:(t,o)=>typeof document<"u"?document.createElementNS(t,o):null,createDocumentFragment:()=>typeof document<"u"?document.createDocumentFragment():null,createComment:t=>typeof document<"u"?document.createComment(t):null,createTextNode:t=>typeof document<"u"?document.createTextNode(t):null,addEventListener:(t,o,r)=>{typeof window<"u"&&window.addEventListener(t,o,r)},removeEventListener:(t,o,r)=>{typeof window<"u"&&window.removeEventListener(t,o,r)},scrollTo:t=>{typeof window<"u"&&window.scrollTo(0,t)},reload:()=>{typeof window<"u"&&window.location.reload()},scrollTop:()=>e()?.scrollTop??0,matchMedia:t=>typeof window<"u"&&typeof window.matchMedia=="function"?window.matchMedia(t):null,visualViewport:()=>typeof window<"u"?window.visualViewport??null:null,scrollingElement:()=>e(),bodyElement:()=>typeof document<"u"?document.body:null,bodyAppend:t=>{typeof document<"u"&&document.body.appendChild(t)},bodyRemove:t=>{typeof document<"u"&&document.body.contains(t)&&document.body.removeChild(t)},clearBody:()=>{typeof document<"u"&&(document.body.innerHTML="")},event:(t,o)=>typeof window<"u"?new window.Event(t,o):new Event(t,o),rootElement:()=>n(),getSelection:()=>typeof window<"u"?window.getSelection():null,selectionText:()=>typeof window<"u"?window.getSelection()?.toString()??"":"",storageGet:t=>{try{return typeof window<"u"?window.localStorage.getItem(t):null}catch{return null}},storageSet:(t,o)=>{try{typeof window<"u"&&window.localStorage.setItem(t,o)}catch{}},timeout:(t,o)=>typeof window<"u"?window.setTimeout(t,o):0,pathname:()=>typeof window<"u"?window.location.pathname:"",setHash:t=>{typeof window<"u"&&(window.location.hash=t)},viewportHeight:()=>typeof window<"u"?window.innerHeight:0,onFormRestore:t=>{t()}}}var je=()=>{},B=class{_subscribe;constructor(e){this._subscribe=e}subscribe(e){let t=To(e),o=!1,r=null,s={next:l=>{o||t.next(l)},error:l=>{o||(o=!0,t.error(l),r?.())},complete:()=>{o||(o=!0,t.complete(),r?.())}},i=this._subscribe(s);r=typeof i=="function"?i:i?()=>i.unsubscribe():je,o&&r();let a=!1;return{unsubscribe(){a||(a=!0,o||(o=!0,r?.()))}}}pipe(...e){return e.reduce((t,o)=>o(t),this)}};function To(n){return{next:n?.next??je,error:n?.error??je,complete:n?.complete??je}}function I(n){return new B(n)}var mt=()=>{},N=class{subs=new Set;closed=!1;asObservable(){return I(e=>this.closed?(e.complete(),mt):(this.subs.add(e),()=>{this.subs.delete(e)}))}subscribe(e){return this.asObservable().subscribe(e)}next(e){if(!this.closed)for(let t of this.subs)t.next(e)}error(e){if(!this.closed){this.closed=!0;for(let t of this.subs)t.error(e);this.subs.clear()}}complete(){if(!this.closed){this.closed=!0;for(let e of this.subs)e.complete();this.subs.clear()}}},ae=class extends N{value;constructor(e){super(),this.value=e}get(){return this.value}next(e){this.value=e,super.next(e)}asObservable(){return I(e=>this.closed?(e.complete(),mt):(e.next(this.value),this.subs.add(e),()=>{this.subs.delete(e)}))}};function ce(n,e){return I(t=>{let o=!0,r=()=>{o&&(o=!1,t.complete())},s=e?.signal;if(s){if(s.aborted)return r(),mt;s.addEventListener("abort",r,{once:!0})}return n.then(i=>{o&&(o=!1,t.next(i),t.complete())},i=>{o&&(o=!1,t.error(i))}),()=>{o=!1,s&&s.removeEventListener("abort",r)}})}function gt(n,e){return I(t=>{let o=n(r=>t.next(r));return e&&t.next(e()),()=>{typeof o=="function"&&o()}})}function bt(n){return e=>new B(t=>e.subscribe({next:o=>t.next(n(o)),error:o=>t.error(o),complete:()=>t.complete()}))}function vt(n){return e=>new B(t=>e.subscribe({next:o=>{n(o)&&t.next(o)},error:o=>t.error(o),complete:()=>t.complete()}))}function fe(n){return e=>new B(t=>e.subscribe({next:o=>{try{n(o)}catch(r){t.error(r);return}t.next(o)},error:o=>t.error(o),complete:()=>t.complete()}))}function ht(){return n=>new B(e=>{let t=[];n.subscribe({next:o=>t.push(o),error:o=>e.error(o),complete:()=>{e.next(t),e.complete()}})})}function yt(n){return e=>new B(t=>{let o=new Set,r=!1,s=!1,i=()=>{s&&o.size===0&&(r=!0,t.complete())},a=e.subscribe({next:l=>{let d=setTimeout(()=>{o.delete(d),!r&&(t.next(l),i())},n);o.add(d)},error:l=>{r=!0,t.error(l)},complete:()=>{s=!0,i()}});return()=>{r=!0;for(let l of o)clearTimeout(l);o.clear(),a.unsubscribe()}})}function ge(n,e){let t=e;return o=>new B(r=>o.subscribe({next:s=>{t=n(t,s),r.next(t)},error:s=>r.error(s),complete:()=>r.complete()}))}function Pe(n){return e=>new B(t=>{let o=null,r=!1,s=e.subscribe({next:i=>{o?.unsubscribe();let a=!1,l=n(i).subscribe({next:d=>t.next(d),error:d=>t.error(d),complete:()=>{a=!0,o=null}});o=a?null:l},error:i=>t.error(i),complete:()=>{r=!0,o||t.complete()}});return()=>{s.unsubscribe(),o?.unsubscribe()}})}function xt(n){return e=>new B(t=>{let o=null,r=e.subscribe({next:s=>{if(o)return;let i=!1,a=n(s).subscribe({next:l=>t.next(l),error:l=>t.error(l),complete:()=>{i=!0,o=null}});o=i?null:a},error:s=>t.error(s),complete:()=>{o||t.complete()}});return()=>{r.unsubscribe(),o?.unsubscribe()}})}function wt(n){return e=>new B(t=>{if(n<=0)return t.complete(),()=>{};let o=0,r=null;return r=e.subscribe({next:s=>{o++,t.next(s),o>=n&&(t.complete(),r?.unsubscribe())},error:s=>t.error(s),complete:()=>t.complete()}),()=>r?.unsubscribe()})}function Tt(n,e){let t=e?.trailing??!1;return o=>new B(r=>{let s=null,i=!1,a,l=!1,d=!1,u=b=>{d||r.next(b)},c=()=>{s=null,t&&l&&(l=!1,u(a)),i=!1},f=o.subscribe({next:b=>{i?t&&(a=b,l=!0):(i=!0,u(b),s=setTimeout(c,n))},error:b=>{d=!0,s&&clearTimeout(s),r.error(b)},complete:()=>{d=!0,s&&clearTimeout(s),r.complete()}});return()=>{d=!0,s&&clearTimeout(s),f.unsubscribe()}})}var Ke=globalThis;Ke.__wfErrState||(Ke.__wfErrState={errState:new Map,totalErrors:0});var{errState:ze,totalErrorsRef:Ct}={errState:Ke.__wfErrState.errState,totalErrorsRef:Ke.__wfErrState},rn={get:()=>Ct.totalErrors,inc:()=>{Ct.totalErrors++},reset:()=>{Ct.totalErrors=0}};function Ie(n,e){rn.inc();let t=ze.get(n);if(t){t.count++;return}ze.set(n,{shown:!0,count:1}),console.error(`[vdom] renderFn \u9519\u8BEF\uFF08${n}\uFF09\u2014\u2014\u7EC4\u4EF6\u7EA7 hole \u964D\u7EA7\uFF08\u4E0B\u4E00\u62CD\u91CD\u8BD5\u81EA\u6108\uFF09:`,e)}function kt(n){ze.delete(n)}function be(){let n={};for(let[e,t]of ze)n[e]=t.count;return{total:rn.get(),byComp:n}}function sn(n){let e=new Set,t=new N,o=n,r=()=>{for(let s of[...e])s();t.next(typeof o=="object"&&o!==null?{...o}:o)};return{get state(){return o},subscribe(s){return e.add(s),()=>{e.delete(s)}},set(s){typeof o=="object"&&o!==null&&!Array.isArray(o)&&typeof s=="object"&&s!==null?o={...o,...s}:o=s,r()},update(s){let i=s(o);i!==void 0&&(typeof o!="object"||o===null||i!==o)&&(o=i),r()},notify:r,changes$:t.asObservable()}}function Et(n){let e=sn(n),t=(()=>e.state);return t.set=o=>e.set(o),t.update=o=>e.update(o),t.subscribe=o=>e.subscribe(o),t.notify=()=>e.notify(),t.store=e,t}function Co(n,e,t=(o,r)=>o===r){let o,r,s=!1;return()=>{let i=n.map(a=>a());return(!s||i.some((a,l)=>!t(r[l],a)))&&(r=i,o=e(i),s=!0),o}}function W(n,e){let t=globalThis.__wfSpy;t&&t.length<1e3&&t.push({at:Date.now()%1e5,kind:n,data:e===void 0?void 0:String(e).slice(0,80)})}function te(n,e,t,o){let r=n.getInstanceData(),s=r.get(e);if(!s){let i=t,a=!0,l=new N,d=e.subscribe({next:f=>{let b=f!==i;i=f,b&&!a&&l.next()},error:f=>{console.error("[vdom] useObservable:",f)}});a=!1;let c=(o?.throttleMs&&o.throttleMs>0?l.asObservable().pipe(Tt(o.throttleMs,{trailing:!0})):l.asObservable()).subscribe({next:()=>{W("obs:next",String(i)+" \u2192 req:render"),n.requestRender()}});n.onUnmount(()=>{d.unsubscribe(),c.unsubscribe()}),s={get:()=>i},r.set(e,s)}return()=>s.get()}function an(n,e,t){if(typeof e=="function"){let r=e;return i=>{i?r(i):t?.()}}return{current:e}}function ln(n,e,t){let o=typeof e=="object"?e:void 0,r=typeof e=="boolean"?e:!1,s=o??t,i=n.nextHookIndex(),a=n.getHookState(i)??{open:r};n.setHookState(i,a);let l=s?.open!==void 0;return{get open(){return s?.open??a.open},setOpen(d){l?(s?.onOpenChange||console.warn(`[vdom] useOpen${o?.name?`(${o.name})`:""} \u53D7\u63A7\u7F3A onOpenChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),s?.onOpenChange?.(d)):(a.open=d,n.requestRender())},toggle(){this.setOpen(!this.open)}}}function un(n,e,t){let o=t?e:(()=>!0),r=t??e,s=n.getBrowser()?.window;if(!s)return()=>{};let i=l=>{if(typeof o=="string"){if(l.key!==o)return}else if(!o(l))return;r(l)};s.addEventListener("keydown",i);let a=()=>s.removeEventListener("keydown",i);return n.onUnmount(a),a}function dn(n,e,t,o,r,s,i,a){let l=n.getBoundingClientRect();if(l.width===0&&l.height===0)return null;let d=e.innerWidth,u=e.innerHeight,c,f;switch(r){case"bottom":c=l.bottom+s,f=a?l.left+l.width/2-t/2:l.left;break;case"top":c=l.top-o-s,f=a?l.left+l.width/2-t/2:l.left;break;case"left":c=a?l.top+l.height/2-o/2:l.top,f=l.left-t-s;break;case"right":c=a?l.top+l.height/2-o/2:l.top,f=l.right+s;break}return f+t>d-i&&(f=d-t-i),f<i&&(f=i),c+o>u-i&&(c=u-o-i),c<i&&(c=i),{top:c,left:f}}function cn(n,e){let t=e.getComputedStyle(n).animationName;if(t&&t!=="none")return!0;for(let o of n.children){let r=e.getComputedStyle(o).animationName;if(r&&r!=="none")return!0}return!1}function fn(n,e){let t=new N,o=te(n,ko(n,e,t),{top:0,left:0});return{get top(){return o().top},get left(){return o().left},refresh:()=>{t.next()}}}function ko(n,e,t){let o=n.getBrowser()?.window;return I(r=>{if(!o)return r.next({top:0,left:0}),r.complete(),()=>{};let s,i=()=>{let d=e.el();if(!d)return;let u=d.getBoundingClientRect();u.width===0&&u.height===0||(e.isOpen?.()??!0)&&r.next(e.compute(u))},a=()=>{s===void 0&&(s=o.requestAnimationFrame(()=>{s=void 0,i()}))};o.addEventListener("scroll",a,!0),o.addEventListener("resize",a),i();let l=t?.subscribe({next:()=>i()});return()=>{l?.unsubscribe(),s!==void 0&&o.cancelAnimationFrame(s),o.removeEventListener("scroll",a,!0),o.removeEventListener("resize",a)}})}function q(n){let e=n.children??(n.props.children===void 0?[]:n.props.children),t=o=>Array.isArray(o)?o.flatMap(t):[o];return Array.isArray(e)?e.flatMap(t):[e]}function $(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)&&le(n)?q(n).reduce((e,t)=>e+$(t),0):1}function R(n,e){return`${n}.${e}`}function Ae(n){let e={};for(let[t,o]of Object.entries(n))t==="children"||t==="key"||t==="ref"||typeof o!="function"&&o!==void 0&&(e[t]=o);return e}function pn(n){return n==null||typeof n=="boolean"}function mn(n){return!(n==null||typeof n=="boolean"||typeof n=="string"||typeof n=="number"||Array.isArray(n)||typeof n=="object"&&typeof n.type=="string"||typeof n.type=="function"||typeof n.type=="symbol")}function St(n){return n==null?"null/undefined":typeof n=="object"?`object\uFF08type: ${typeof n.type}\uFF09`:typeof n}function Eo(n,e,t,o){return[{op:"createAnchor",id:n,...o!==void 0?{detail:o}:{}},{op:"insert",id:n,parent:e,ref:t}]}function Rt(n,e,t,o,r){for(let s of Eo(e,t,o,r))n(s)}function ne(n){return n===""?"hole":typeof n=="string"||typeof n=="number"?"text":pn(n)?"hole":Array.isArray(n)?"array":typeof n.type=="string"?"element":le(n)?"fragment":typeof n.type=="function"?"component":(mn(n),"invalid")}function Ye(n){return typeof n=="string"||typeof n=="number"?String(n):null}function z(n){return ne(n)==="hole"}function pe(n){return ne(n)==="text"}function ue(n){if(n==null)return"hole";let e=ne(n);return e==="invalid"?"hole":e}function gn(n,e,t,o,r){let s=Ae(n.props),i=Ae(e.props);for(let[a,l]of Object.entries(i))a==="value"&&r?.formControl?o({op:"setProp",id:t,key:a,value:l}):s[a]!==l&&o({op:"setProp",id:t,key:a,value:l});for(let a of Object.keys(s))a in i||o({op:"setProp",id:t,key:a,value:void 0});for(let[a,l]of Object.entries(e.props))a==="children"||a==="key"||typeof l=="function"&&n.props[a]!==l&&o({op:"setProp",id:t,key:a,value:l,prev:n.props[a]});for(let a of Object.keys(n.props))a==="children"||a==="key"||typeof n.props[a]=="function"&&e.props[a]===void 0&&o({op:"setProp",id:t,key:a,value:void 0,prev:n.props[a]})}function Te(n,e,t){return typeof n?.type=="function"?R(e,0):Array.isArray(n)?e:z(n)?R(e,0):t}function He(n,e,t){return typeof n?.type=="function"||Array.isArray(n)?e:t}function Y(n,e,t,o,r){if(z(n)){o({op:"remove",id:e});return}if(pe(n)){o({op:"remove",id:e});return}if(Array.isArray(n)){let l=0;for(let d of n)Y(d,R(e,l),e,o,r),l+=$(d);return}let s=n;if(le(s)){let l=Number(e.slice(t.length+1)),d=q(s),u=l;for(let c of d)Y(c,R(t,u),t,o,r),u+=$(c);return}if(typeof s.type=="function"){let l=s.key!==null?Q(t,s.key):e;o({op:"unmount",compId:l});let d=r?.get(l)?.lastOutput;if(d!==void 0){let u=ve(d),c=Te(u,l,e),b=u!==null&&typeof u=="object"&&!Array.isArray(u)&&le(u)?e.slice(0,e.lastIndexOf(".")):He(u,l,l);Y(u,c,b,o,r)}}let i=q(s),a=0;i.forEach(l=>{let d=R(e,a);l!==null&&typeof l!="string"&&typeof l!="number"&&typeof l!="boolean"&&!Array.isArray(l)?Y(l,d,e,o,r):o({op:"remove",id:d}),a+=$(l)}),o({op:"remove",id:e})}var Ce=(n,e,t)=>{t.emit({op:"remove",id:t.oldId}),t.emitNode(e,t.parent,t.index,t.ref)};var ke=(n,e,t)=>{t.emit({op:"remove",id:t.oldId}),t.emitNode(e,t.parent,t.index,t.ref)};var Ee=(n,e,t)=>{Y(n,t.oldId,t.parent,t.emit,t.registry),t.emitNode(e,t.parent,t.index,t.ref)};var Se=(n,e,t)=>{t.oldCompId&&t.emit({op:"unmount",compId:t.oldCompId});let o=t.registry?.get(t.oldCompId??"")?.lastOutput;if(o!==void 0){let r=ve(o);Y(r,Te(r,t.oldCompId??"",R(t.parent,t.index)),He(r,t.oldCompId??"",t.parent),t.emit,t.registry)}else t.emit({op:"remove",id:t.oldId});t.emitNode(e,t.parent,t.index,t.ref)};var oe=(n,e,t)=>{let o=Array.isArray(n)?n:q(n),r=t.index;for(let s of o)Y(s,R(t.parent,r),t.parent,t.emit,t.registry),r+=$(s);t.emitNode(e,t.parent,t.index,t.ref)};var So={text:{text:null,hole:Ce,element:Ce,component:Ce,fragment:Ce,array:Ce},hole:{text:ke,hole:null,element:ke,component:ke,fragment:ke,array:ke},element:{text:Ee,hole:Ee,element:null,component:Ee,fragment:Ee,array:Ee},component:{text:Se,hole:Se,element:Se,component:null,fragment:Se,array:Se},fragment:{text:oe,hole:oe,element:oe,component:oe,fragment:null,array:oe},array:{text:oe,hole:oe,element:oe,component:oe,fragment:oe,array:null}};function Ot(n,e){return So[n]?.[e]??null}function Mt(n,e,t,o,r){let s=[],i=new Map,a={n:0},l=new Map,d=new N;d.subscribe({next:()=>{for(let b of[...s].reverse())try{b()}catch(h){console.error("[vdom] v2 onUnmount:",h)}}});let u=Object.create(t);u.onUnmount=b=>{s.push(b)},u.ui=Pt({requestRender:()=>{W("req:render",o.slice(-18)),r?.()},onUnmount:b=>{s.push(b)},getBrowser:()=>t.browser??null,nextHookIndex:()=>a.n++,getHookState:b=>l.get(b),setHookState:(b,h)=>{l.set(b,h)},getInstanceData:()=>i,scheduleAfterRender:b=>{let h=t.afterRender;h?h(b):setTimeout(b,0)},getSharedContext:()=>t??null});let c=n(e,u),f=a.n;return{factory:n,renderFn:c,lastOutput:void 0,hookSeq:a,renderBase:f,instData:i,destroy$:d,disposed:!1}}function Vt(n,e){return n.hookSeq.n=n.renderBase,n.renderFn(e)}function K(n,e){let t=e.get(n);if(!(!t||t.disposed)){t.disposed=!0;try{t.destroy$.next()}catch(o){console.error("[vdom] v2 destroy$:",o)}t.instData.clear(),e.delete(n)}}function Ro(n,e,t,o){let r=e.get(n),s=[];if(r){let a=r.lastOutput!==void 0?ve(r.lastOutput):void 0;if(a!==void 0){let l={get:d=>{let u=e.get(d);return u?{lastOutput:u.lastOutput}:void 0}};Y(a,Te(a,n,t),He(a,n,o),d=>{s.push(d)},l)}}let i=[];for(let a of s)a.op==="unmount"&&e.has(a.compId)&&i.push(a.compId);K(n,e);for(let a of i)e.has(a)&&K(a,e);return s.unshift({op:"unmount",compId:n}),s}function yn(n,e,t,o){let r=n?.lastOutput;if(r===void 0)return[e+".0"];if(typeof r=="object"&&r!==null&&"kind"in r){let s=r;if(s.kind==="hole")return[e+".0"];if(s.kind==="array")return(s.items??[]).map((a,l)=>`${e}.${l}`);let i=s.v;return i?typeof i.type=="function"?[e+".0"]:[R(t,o)]:[e+".0"]}return[e+".0"]}function Oo(n,e,t,o){if(z(n))return R(e,t);if(pe(n))return R(e,t);let r=n;if(typeof r.type!="function")return R(e,t);let s=L(r);if(s===null)return R(e,t);let i=Q(e,s);return yn(o?.get(i),i,e,t)[0]}function bn(n,e,t,o,r,s,i,a){let l=[],d=[],u=0,c=null;for(let f=0;f<e.length;f++){let b=$(e[f]);l.push(n[f]===void 0?j(e[f],t,u,c,o,s,r,i):ye(n[f],e[f],t,u,c,o,r,s,i)),c=R(t,u+b-1),u+=b}for(let f=n.length-1;f>=e.length;f--)d.push(A(he(n[f],t,No(n,f),r)));return a?J([...d.reverse(),...l]):(d.reverse(),J([...l,...d]))}function ye(n,e,t,o,r,s,i,a,l){let d=R(t,o),u=ne(n),c=ne(e);if(u==="text"&&c==="text")return String(n)===String(e)?A([]):A([{op:"setText",id:d,value:Ye(e)}]);if(u==="hole"&&c==="hole")return A([]);if(u==="hole")return J([A([{op:"remove",id:d}]),j(e,t,o,r,s,a,i,l)]);if(c==="hole")return Nt(n,e,t,o,r,s,a,u==="component"?$e(n,t,o):void 0,i,l);if((u==="fragment"||u==="array")&&(c==="fragment"||c==="array")){let m=Le(Array.isArray(n)?n:q(n)),v=Le(Array.isArray(e)?e:q(e));return Je(v)||Je(m)?hn(m,v,t,s,i,a,l):bn(m,v,t,s,i,a,l,!0)}if(u===c&&typeof n!="string"&&typeof n!="number"){let m=n,v=e;if(typeof m.type=="function"&&typeof v.type=="function"){if(m.type===v.type)return Vo(m,v,t,o,r,s,i,a,l);let C=$e(m,t,o),E=Ro(C,i,R(t,o),t);return J([A(E),j(v,t,o,r,s,a,i,l)])}if(typeof m.type=="string"&&typeof v.type=="string"){if(m.type===v.type){let C=[];gn(m,v,d,p=>C.push(p),{formControl:m.type==="input"||m.type==="textarea"});let E=Le(q(m)),k=Le(q(v));if(Io(E,k,d),Je(k)||Je(E))return J([A(C),hn(E,k,d,s,i,a,l)]);let g=bn(E,k,d,s,i,a,l,!1);return J([A(C),g])}return J([A(he(m,t,o,i)),j(v,t,o,r,s,a,i,l)])}}let f=ue(n),b=ue(e),h=ne(n)==="component"?$e(n,t,o):void 0;return Nt(n,e,t,o,r,s,a,h,i,l)}function No(n,e){let t=0;for(let o=0;o<e;o++)t+=$(n[o]);return t}function Mo(n,e){let t=0;for(let o=0;o<e;o++)t+=$(n[o]);return t}function Vo(n,e,t,o,r,s,i,a,l){let d=$e(e,t,o),u=i.get(d);if(!u||u.factory!==e.type)return u&&K(d,i),j(e,t,o,r,s,a,i,l);let c;try{c=Vt(u,e.props)}catch(h){return Ie(d,h),A([])}let f=u.lastOutput!==void 0?ve(u.lastOutput):void 0;u.lastOutput=Ge(c);let b=It(c,d,t,o);return f===void 0?j(c,b.parent,b.index,r,s,a,i,l):Po(f,c,b.parent,b.index,r,s,i,a,l)}function Po(n,e,t,o,r,s,i,a,l){let d=Array.isArray(n),u=Array.isArray(e);if(d||u){let c=d?n:[n],f=u?e:[e],b=0,h=null,m=[];for(let v=0;v<f.length;v++){let C=$(f[v]);m.push(c[v]===void 0?j(f[v],t,b,h,s,a,i,l):ye(c[v],f[v],t,b,h,s,i,a,l)),h=R(t,b+C-1),b+=C}for(let v=f.length;v<c.length;v++)m.push(A(he(c[v],t,Mo(c,v),i)));return J(m)}return ye(n,e,t,o,r,s,i,a,l)}function Le(n){let e=[];for(let t of n)t!==null&&typeof t=="object"&&!Array.isArray(t)&&le(t)?e.push(...Le(q(t))):e.push(t);return e}function Io(n,e,t){if(globalThis.__WF_NO_A_CHECK__)return;let o=c=>!z(c)&&!pe(c)&&!Array.isArray(c),r=n.filter(o),s=e.filter(o),i=c=>typeof c?.type=="function"&&L(c)===null,a=(c,f)=>f>=c.length||z(c[f]),l=c=>a(n,c)||i(n[c]),d=c=>a(e,c)||i(e[c]);(e.some((c,f)=>i(c)&&!l(f))||n.some((c,f)=>i(c)&&!d(f)))&&Jt(s,`children\uFF08${t}\u2014\u2014\u65E0 key \u7EC4\u4EF6\u5B9E\u69FD\u7FFB\u8F6C ${r.length}\u2192${s.length}\uFF09`)}function $e(n,e,t){return n.key!==null?Q(e,n.key):R(e,t)}function xe(n,e,t,o,r,s){let i=ue(n),a=ue(e);return Ot(i,a)?Nt(n,e,"root",0,null,t,r,i==="component"?$e(n,"root",0):void 0,o,s).pipe(vn):ye(n,e,"root",0,null,t,o,r,s).pipe(vn)}var vn=n=>J([n,A([{op:"done"}])]);function Ao(n,e,t,o,r,s,i,a,l){return n===void 0?j(e,t,o,r,s,a,i,l):ye(n,e,t,o,r,s,i,a,l)}function hn(n,e,t,o,r,s,i){let a=[],l=(g,p)=>L(g)??ut(p),d=new Map;n.forEach((g,p)=>{let y=l(g,p);d.has(y)||d.set(y,p)});let u=new Set(e.map((g,p)=>l(g,p))),c=new Map;for(let g=0;g<n.length;g++){let p=n[g];if(z(p)){a.push({op:"remove",id:R(t,g)});continue}if(pe(p)){a.push({op:"remove",id:R(t,g)});continue}if(Array.isArray(p))continue;let y=L(p);if(y!==null){let x=(c.get(y)??0)+1;if(c.set(y,x),x===1)continue;a.push(...he(p,t,g,r));continue}}for(let[g,p]of d)if(!u.has(g)&&(a.push(...he(n[p],t,p,r)),!Yt(g))){let y=Q(t,g);r.has(y)&&K(y,r)}let f=n.map(g=>L(g)).filter(g=>g!==null&&u.has(g)),b=e.map(g=>L(g)).filter(g=>g!==null&&d.has(g)),m=!e.some((g,p)=>{let y=L(g);if(y===null||typeof g.type!="function")return!1;let x=d.get(y);return x===void 0||x===p?!1:r?.get(Q(t,y))===void 0});{let g=0;for(let p of b){let y=f.indexOf(p,g);if(y===-1){m=!1;break}g=y+1}}if(!m){n.forEach((y,x)=>{if(!(z(y)||pe(y))&&!Array.isArray(y)){if(L(y)!==null&&typeof y.type=="function"){a.push(...he(y,t,x,r,{keepSegments:!0}));return}if(L(y)!==null){a.push({op:"remove",id:R(t,x)});return}a.push(...he(y,t,x,r))}});let g=[],p=null;for(let y=0;y<e.length;y++){let x=e[y],M=L(x),D=M!==null?Q(t,M):R(t,y);M!==null&&typeof x.type=="function"?g.push(j(x,t,y,p,o,s,r,i)):g.push(j(x,t,y,p,o,s,r,i)),p=R(t,y)}return J([A(a),...g])}let v=[];e.forEach((g,p)=>{let y=L(g);if(y===null)return;let x=d.get(y);x!==void 0&&x!==p&&v.push({oldIdx:x,newIdx:p})});let C=v.every(g=>g.newIdx<g.oldIdx);v.sort((g,p)=>C?g.newIdx-p.newIdx:p.newIdx-g.newIdx);for(let g of v){let p=e[g.newIdx],y=L(p);if(y!==null&&typeof p.type=="function"){let x=Q(t,y),M=yn(r?.get(x),x,t,g.oldIdx);if(M.length===1&&!M[0].startsWith(x+"."))a.push({op:"move",id:M[0],parent:t,ref:null,newId:R(t,g.newIdx),noMove:!0});else{let re=g.newIdx>0?e[g.newIdx-1]:null,se=re===null?null:Oo(re,t,g.newIdx-1,r);for(let ie of M)a.push({op:"move",id:ie,parent:t,ref:se,newId:ie,noMove:!1}),se=ie}}else a.push({op:"move",id:R(t,g.oldIdx),parent:t,ref:null,newId:R(t,g.newIdx),noMove:!0})}let E=[],k=null;for(let g=0;g<e.length;g++){let p=e[g],y=L(p),x=R(t,g);if(y!==null){let M=d.get(y);M===void 0?E.push(j(p,t,g,k,o,s,r,i)):typeof p.type=="function"?E.push(Ao(n[M],p,t,g,k,o,r,s,i)):E.push(ye(n[M],p,t,g,k,o,r,s,i))}else{let M=d.get(ut(g)),D=M===void 0?void 0:n[M];D!==void 0&&!z(D)&&!pe(D)&&!Array.isArray(D)?E.push(ye(D,p,t,g,k,o,r,s,i)):E.push(j(p,t,g,k,o,s,r,i))}k=x}return J([A(a),...E])}function he(n,e,t,o,r){let s=[],i=R(e,t),a=o&&o.size>0?{get:d=>{let u=o.get(d);return u?{lastOutput:u.lastOutput}:void 0}}:void 0;if(Y(n,i,e,d=>s.push(d),a),o&&!r?.keepSegments)for(let d of s)d.op==="unmount"&&o.has(d.compId)&&K(d.compId,o);else if(o&&r?.keepSegments){for(let d of s)if(d.op==="unmount"){let u=o.get(d.compId);u&&(u.lastOutput=void 0)}}return r?.keepSegments?s.filter(d=>d.op!=="unmount"):s}function Je(n){return n.some(e=>L(e)!==null)}function Nt(n,e,t,o,r,s,i,a,l,d){let u=Ot(ue(n),ue(e));if(!u)throw new Error(`[vdom] v2 \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${ue(n)} \u2192 ${ue(e)}`);let c=[],f=null,b=[],h=l&&l.size>0?{get:C=>{let E=l.get(C);return E?{lastOutput:E.lastOutput}:void 0}}:i,m={emit:C=>{let E=C;E.op==="unmount"&&l?.has(E.compId)&&b.push(E.compId),c.push(E)},emitNode:(C,E,k,g)=>{f={v:C,p:E,i:k,r:g}},oldId:R(t,o),newId:R(t,o),parent:t,index:o,ref:r,oldCompId:a,registry:h};u(n,e,m);let v=f?I(C=>{let E=f;return j(E.v,E.p,E.i,E.r,s,i,l,d).subscribe({next:g=>C.next(g),error:g=>C.error(g),complete:()=>C.complete()})}):A([]);return J([I(C=>{for(let E of b)l?.has(E)&&K(E,l);return C.complete(),()=>{}}),A(c),v])}var Xe=class{table=new Map;rootTypes=new Set;doc;dispatchBound;container;phase="active";constructor(e,t){this.doc=e,this.container=t,this.dispatchBound=this.dispatch.bind(this)}set(e,t,o){if(this.phase==="disposed"){console.error(`[vdom] \u4E8B\u4EF6\u8868\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Adisposed \u540E set(${e}, ${t}) \u88AB\u5FFD\u7565`);return}if(typeof o!="function"){console.warn(`[vdom] \u4E8B\u4EF6 ${t} \u975E\u51FD\u6570\u503C\u88AB\u8DF3\u8FC7\uFF08node ${e}\uFF09\u2014\u2014\u671F\u671B\u51FD\u6570\uFF0C\u5B9E\u9645 ${typeof o}`);return}let r=this.table.get(e);r||(r=new Map,this.table.set(e,r)),r.set(t,o),this.ensureRoot(t)}get(e,t){return this.table.get(e)?.get(t)}removeEvent(e,t){let o=this.table.get(e);o&&(o.delete(t),o.size===0&&this.table.delete(e))}remove(e){for(let t of[...this.table.keys()])(t===e||t.startsWith(e+"."))&&this.table.delete(t)}removeOne(e){this.table.delete(e)}ensureRoot(e){this.rootTypes.has(e)||(this.doc.addEventListener(e,this.dispatchBound,{capture:!0}),this.rootTypes.add(e))}dispatch(e){if(this.container){let o=e.target;if(o&&!this.container.contains(o))return}if(e.type==="contextmenu"&&window.__dbgEvt){let o=e.target,r=[...this.table.entries()].map(([s,i])=>s+":"+[...i.keys()].join("+")).join(" | ");console.error("[dbg-evt-dispatch]","target:",o?.getAttribute("data-wf-id"),"ALL:",r.slice(0,400))}let t=e.target;for(t&&t.nodeType===3&&(t=t.parentElement);t;){if(!t.hasAttribute?.("data-wf-id")){let r=t.closest?.("[data-wf-id]");if(r&&r!==t){t=r;continue}}let o=t.getAttribute?.("data-wf-id");if(o){let r=this.table.get(o)?.get(e.type);if(r){try{Object.defineProperty(e,"currentTarget",{value:t,configurable:!0})}catch{}try{r(e)}catch(s){console.error("[vdom] \u4E8B\u4EF6 handler:",s)}if(e.cancelBubble)return}}t=t.parentElement}}clear(){this.table.clear()}dispose(){if(this.phase!=="disposed"){this.phase="disposed";for(let e of this.rootTypes)this.doc.removeEventListener(e,this.dispatchBound,{capture:!0});this.rootTypes.clear(),this.table.clear()}}},Re=/^on[A-Z]/;function De(n){return Re.test(n)?n.slice(2).toLowerCase():null}var Ze=class{refs=new Map;phase="active";set(e,t,o){if(this.phase==="disposed"){console.error(`[vdom] ref \u8868\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Adisposed \u540E set(${e}) \u88AB\u5FFD\u7565`);return}if(o&&o!==t&&typeof o=="function")try{o(null)}catch(r){console.error("[vdom] ref prev:",r)}this.refs.set(e,t)}mount(e,t){let o=this.refs.get(e);if(typeof o=="function")try{o(t)}catch(r){console.error("[vdom] ref mount:",r)}}unmount(e){for(let[t,o]of[...this.refs])if(t===e||t.startsWith(e+".")){if(typeof o=="function")try{o(null)}catch(r){console.error("[vdom] ref unmount:",r)}this.refs.delete(t)}}unmountOne(e){let t=this.refs.get(e);if(typeof t=="function")try{t(null)}catch(o){console.error("[vdom] ref unmount:",o)}this.refs.delete(e)}remap(e,t){for(let[o,r]of[...this.refs])(o===e||o.startsWith(e+"."))&&(this.refs.delete(o),this.refs.set(t+o.slice(e.length),r))}clear(){this.refs.clear()}dispose(){this.phase!=="disposed"&&(this.phase="disposed",this.refs.clear())}};function Ho(n,e){switch(e.kind){case"begin":return"consuming";case"next":return e.matched?"consuming":"failed";case"end":return n==="consuming"?e.remaining>0?"failed":"inactive":n;case"reset":return"inactive"}}var Qe=class{queue=null;phase="inactive";events$;failed$;events=new N;constructor(){this.events$=this.events.asObservable(),this.events.asObservable().pipe(ge(Ho,"inactive")).subscribe({next:e=>{this.phase=e}}),this.failed$=this.events.asObservable().pipe(vt(e=>e.kind==="next"&&!e.matched||e.kind==="end"&&e.remaining>0),bt(()=>{}))}begin(e){let t=[],o=r=>{t.push(r);for(let s of r.childNodes)o(s)};for(let r of e.childNodes)o(r);this.queue=t,this.events.next({kind:"begin"})}end(){if(this.phase!=="consuming")return;let e=this.queue?.length??0;this.queue=null,this.events.next({kind:"end",remaining:e})}reset(){this.queue=null,this.events.next({kind:"reset"})}next(e,t,o){if(this.phase!=="consuming")return console.error(`[vdom] absorb \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Anext \u5728 ${this.phase} \u9636\u6BB5\u8C03\u7528\uFF08\u5E94 consuming\uFF09`),null;let r=this.queue;if(!r)return null;for(;r.length>0;){let s=r.shift();if(e==="element"?s.nodeType===1&&s.tagName.toLowerCase()===t:e==="text"?s.nodeType===3:s.nodeType===8){if(e==="text"&&o!==void 0){let a=s,l=a.textContent??"";if(l!==o&&l.startsWith(o)){let d=a.splitText(o.length);r.unshift(d)}}return this.events.next({kind:"next",matched:!0}),s}}return this.events.next({kind:"next",matched:!1}),null}};Lt();var $o=new Set(["zIndex","opacity","lineHeight","zoom","fontWeight","order","flex","flexGrow","flexShrink","flexBasis","animationIterationCount","orphans","widows","columns","columnCount","columnGap","counterIncrement","counterReset","aspectRatio","scale","rotate"]);function Do(n,e,t){if(t==null||t===!1){e.startsWith("--")&&n.style.removeProperty(e),n.style[e]="";return}if(e.startsWith("--")){n.style.setProperty(e,String(t));return}typeof t=="number"&&!$o.has(e)&&(t=`${t}px`),n.style[e]=String(t)}function $t(n,e){if(e==null||e===!1){n.style.cssText="";return}if(typeof e=="string"){n.setAttribute("style",e);return}if(e&&typeof e=="object"){n.style.cssText="";for(let[t,o]of Object.entries(e))Do(n,t,o)}}var et=null,xn=new WeakSet;function Uo(n){if(et||(et=new WeakSet),!xn.has(n)){xn.add(n);let e=et;n.addEventListener("compositionstart",t=>{let o=t.target;o instanceof HTMLElement&&e.add(o)},!0),n.addEventListener("compositionend",t=>{let o=t.target;o instanceof HTMLElement&&e.delete(o)},!0)}return et}function wn(n,e){return Uo(n).has(e)}var Fo=new Set(["value","checked","selected","disabled","hidden","autofocus","defaultValue","defaultChecked","innerHTML","textContent","download","indeterminate","multiple","readOnly","required","tabIndex","spellcheck","draggable","scrollTop","scrollLeft","volume","muted","paused","playbackRate","open"]);function Tn(n){return Fo.has(n)}function Cn(n,e,t){if(t===void 0){if(_o.has(e)){n[e]=!1;return}return}if(e==="value"&&n.nodeType===1){let o=n;if(n.ownerDocument&&wn(n.ownerDocument,o))return;let r=o.value;if(r===t||String(r)===String(t))return}n[e]=t}var _o=new Set(["disabled","checked","selected","multiple","readOnly","required","indeterminate","muted","paused","open","autofocus","draggable","hidden"]);function Ue(n,e){for(let[t,o]of Object.entries(e))t==="style"?$t(n,o):Ht(n,t,o)}function kn(n,e,t,o,r,s){if(o!=="ref")if(typeof r=="function"||r===void 0&&typeof s=="function"){if(Re.test(o)){let i=De(o);i&&n.set(e,i,r)}return}else if(Re.test(o)){let i=De(o);i&&n.set(e,i,r)}else o==="style"?$t(t,r):Tn(o)?Cn(t,o,r):Ht(t,o,r)}var Wo="http://www.w3.org/2000/svg",qo=new Set(["svg","path","circle","line","rect","text","g","defs","marker","polyline","polygon","ellipse","use","symbol","tspan","textPath","clipPath","mask","pattern","linearGradient","radialGradient","stop"]);function En(n,e){return qo.has(e)?n.createElementNS(Wo,e):n.createElement(e)}function Bo(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===1&&t.tagName.toLowerCase()===e.tag)Ue(t,e.attrs);else if(n.absorb.queue&&!t){let r=n.absorb.next("element",e.tag);if(r)Ue(r,e.attrs),n.nodes.set(e.id,r);else{let s=En(n.doc,e.tag);Ue(s,e.attrs),n.nodes.set(e.id,s)}}else{let r=En(n.doc,e.tag);Ue(r,e.attrs),t&&(n.refRegistry.unmountOne(e.id),n.eventRegistry.removeOne(e.id),t.replaceWith(r)),n.nodes.set(e.id,r)}let o=n.nodes.get(e.id);o&&o.nodeType===1&&o.setAttribute("data-wf-id",e.id)}function jo(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===3)t.textContent!==e.value&&(t.textContent=e.value);else if(n.absorb.queue&&!t){let o=n.absorb.next("text",void 0,e.value);if(o)o.textContent!==e.value&&(o.textContent=e.value),n.nodes.set(e.id,o);else{let r=n.doc.createTextNode(e.value);n.nodes.set(e.id,r)}}else{let o=n.doc.createTextNode(e.value);t&&t.replaceWith(o),n.nodes.set(e.id,o)}}function Ko(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===8){let o=e.detail?`wf-hole: ${e.detail}`:"wf-hole";t.textContent!==o&&(t.textContent=o)}else if(n.absorb.queue&&!t){let o=n.absorb.next("comment");if(o)n.nodes.set(e.id,o);else{let r=n.doc.createComment(e.detail?`wf-hole: ${e.detail}`:"wf-hole");n.nodes.set(e.id,r)}}else{let o=n.doc.createComment(e.detail?`wf-hole: ${e.detail}`:"wf-hole");t&&t.replaceWith(o),n.nodes.set(e.id,o)}}function zo(n,e){let t=n.nodes.get(e.id);if(!t||t.isConnected)return;let o=n.parentOf(e);if(o){if(o.nodeType===3){let r=o.parentElement;if(!r)return;let s=o.nextSibling&&o.nextSibling.parentNode===r?o.nextSibling:null;r.insertBefore(t,s),t.nodeType===1&&n.refRegistry.mount(e.id,t),n.registerChild(e.parent,e.id);return}if(o.nodeType===8){console.error(`[vdom] id \u7A7A\u95F4\u8FDD\u4F8B\uFF1Ainsert ${e.id} \u7684 parent \u662F\u6CE8\u91CA\u951A\uFF08${e.parent}\uFF09\u2014\u2014\u63D2\u5230\u951A\u540E`);let r=o.parentElement;r&&r.insertBefore(t,o.nextSibling),t.nodeType===1&&n.refRegistry.mount(e.id,t),n.registerChild(e.parent,e.id);return}if(e.ref){let r=n.nodes.get(e.ref)??null;if(!r){let s=n.childIds.size>0&&n.childIds.has(e.ref)?n.collectDesc(e.ref):null;if(s){let i="",a=-1;for(let l of s){let d=n.seq.get(l)??0;d>a&&(a=d,i=l)}i&&(r=n.nodes.get(i)??null)}else{let i=e.ref+".";for(let[a,l]of n.nodes)a.startsWith(i)&&(r=l)}}r&&r.parentNode===o?o.insertBefore(t,r.nextSibling):r?o.appendChild(t):o.insertBefore(t,o.firstChild)}else o.insertBefore(t,o.firstChild);t.nodeType===1&&n.refRegistry.mount(e.id,t),n.registerChild(e.parent,e.id)}}function Yo(n,e){let t=n.nodes.get(e.id);if(t){if(!e.noMove){let o=n.parentOf(e);if(!o)return;let r=e.ref?n.nodes.get(e.ref)??null:null;r?o.insertBefore(t,r.nextSibling):e.first?o.insertBefore(t,o.firstChild):o.appendChild(t)}n.remapSubtree(e.id,e.newId)}}function Jo(n,e){n.refRegistry.unmountOne(e.id),n.eventRegistry.removeOne(e.id),n.nodes.get(e.id)?.remove();let t=n.childIds.size>0?n.collectDesc(e.id):null,o=t??[];if(!t){let r=e.id+".";for(let s of[...n.nodes.keys()])s.startsWith(r)&&o.push(s)}for(let r of o)n.refRegistry.unmountOne(r),n.eventRegistry.removeOne(r),n.nodes.delete(r),n.unregisterChild(r);n.nodes.delete(e.id),n.unregisterChild(e.id)}function Go(n,e){let t=n.nodes.get(e.id);t&&t.nodeType===3&&(t.textContent=e.value)}function Xo(n,e){let t=n.nodes.get(e.id);if(!t||t.nodeType!==1)return;let o=t;if(e.key==="ref"){let r=n.refRegistry.refs.get(e.id);if(e.value===void 0){n.refRegistry.set(e.id,void 0,r),n.refRegistry.refs.delete(e.id);return}n.refRegistry.set(e.id,e.value,r),o.isConnected&&n.refRegistry.mount(e.id,o);return}if(Re.test(e.key)){let r=De(e.key);r&&(e.value===void 0?n.eventRegistry.removeEvent(e.id,r):n.eventRegistry.set(e.id,r,e.value));return}kn(n.eventRegistry,e.id,o,e.key,e.value,e.prev)}function Zo(n,e){let t=n.nodes.get(e.id);t&&t.nodeType===1&&typeof e.fn=="function"&&(n.refRegistry.set(e.id,e.fn),n.refRegistry.mount(e.id,t))}function Qo(n,e){n.clearNodeRefs(e.id)}function er(n,e){let t=n.registry?.get(e.compId);t&&(t.phase="mounted")}function tr(n,e){n.registry&&Dt(e.compId,n.registry)}function nr(n,e){if(e.full&&n.absorb.end(),e.full&&n.touched.size>0)for(let[t,o]of[...n.nodes])n.touched.has(t)||(n.refRegistry.unmountOne(t),n.eventRegistry.removeOne(t),o.remove(),n.nodes.delete(t),n.unregisterChild(t));n.touched.clear()}function Sn(n,e){switch(e.op){case"create":Bo(n,e);break;case"createText":jo(n,e);break;case"createAnchor":Ko(n,e);break;case"insert":zo(n,e);break;case"move":Yo(n,e);break;case"remove":Jo(n,e);break;case"setText":Go(n,e);break;case"setProp":Xo(n,e);break;case"ref":Zo(n,e);break;case"unref":Qo(n,e);break;case"mount":er(n,e);break;case"unmount":tr(n,e);break;case"done":nr(n,e);break;case"close":break}}var de=class{nodes=new Map;touched=new Set;childIds=new Map;byChild=new Map;seq=new Map;seqCounter=0;registerChild(e,t){this.byChild.set(t,e),this.seq.set(t,++this.seqCounter);let o=this.childIds.get(e);o||(o=new Set,this.childIds.set(e,o)),o.add(t)}unregisterChild(e){let t=this.byChild.get(e);if(t===void 0)return;this.byChild.delete(e),this.seq.delete(e);let o=this.childIds.get(t);o&&(o.delete(e),o.size===0&&this.childIds.delete(t))}collectDesc(e){let t=[],o=[e];for(;o.length>0;){let r=o.pop();t.push(r);let s=this.childIds.get(r);if(s)for(let i of s)o.push(i)}return t}reset(){this.nodes.clear(),this.touched.clear(),this.childIds.clear(),this.byChild.clear(),this.seq.clear(),this.seqCounter=0,this.eventRegistry.clear(),this.refRegistry.clear()}eventRegistry;refRegistry=new Ze;absorb=new Qe;container;doc;registry;devVerify=null;constructor(e,t,o){this.container=e,this.doc=t,this.registry=o??null,this.eventRegistry=new Xe(t,e)}dispose(){if(this.eventRegistry.dispose(),this.refRegistry.dispose(),this.registry)for(let e of[...this.registry.keys()].reverse()){let t=this.registry.get(e);if(t){for(let o of[...t.onUnmounts].reverse())try{o()}catch{}this.registry.delete(e)}}}clearNodeRefs(e){this.refRegistry.unmount(e)}remapSubtree(e,t){let o=(s,i)=>{let a=s.get(i);a!==void 0&&(s.delete(i),s.set(t+i.slice(e.length),a))};for(let s of[...this.nodes.keys()])if(s===e||s.startsWith(e+".")){o(this.nodes,s);let i=this.nodes.get(t+s.slice(e.length));i&&i.nodeType===1&&i.setAttribute("data-wf-id",t+s.slice(e.length))}for(let[s,i]of[...this.byChild]){let a=s===e||s.startsWith(e+"."),l=i===e||i.startsWith(e+".");if(!a&&!l)continue;let d=a?t+s.slice(e.length):s,u=l?t+i.slice(e.length):i;this.byChild.delete(s),this.byChild.set(d,u);let c=this.childIds.get(i);c&&(c.delete(s),c.size===0&&this.childIds.delete(i));let f=this.childIds.get(u);f||(f=new Set,this.childIds.set(u,f)),f.add(d)}let r=this.byChild.get(e);r!==void 0&&!this.byChild.has(t)&&(this.unregisterChild(e),this.registerChild(r,t)),this.refRegistry.remap(e,t);for(let s of[...this.eventRegistry.table.keys()])if(s===e||s.startsWith(e+".")){let i=this.eventRegistry.table.get(s);this.eventRegistry.table.delete(s),this.eventRegistry.table.set(t+s.slice(e.length),i)}if(this.registry){for(let s of[...this.registry.keys()])if(s===e||s.startsWith(e+".")){let i=this.registry.get(s);this.registry.delete(s),this.registry.set(t+s.slice(e.length),i)}}}parentOf(e){if(e.parent==="root")return this.container;let t=this.nodes.get(e.parent);if(t&&t.isConnected)return t;let o=e.parent.split(".");for(let r=o.length-1;r>0;r--){let s=o.slice(0,r).join(".");if(s==="root")return this.container;let i=this.nodes.get(s);if(i&&i.isConnected)return i}return null}apply(e){Sn(this,e),this.devVerify&&this.devVerify(e,this)}};var tt="__wf_portal";function Ut(n){return`${tt}-${n}`}function or(n,e){switch(e.kind){case"open":return"open";case"exit":return n==="open"?"exit":n;case"closed":return"closed";case"disposed":return"closed"}}function rr(n){return typeof n=="function"?n():n}function Rn(n){return n?typeof n=="function"?n():n:null}function On(n,e){let t={tree:null,applier:null,container:null,chain:Promise.resolve(),version:0,open:!1,phase:"closed",disposed:!1,panel:null,pos:{top:0,left:0},segments:new Map},o=new N,r=o.asObservable();o.asObservable().pipe(ge(or,"closed")).subscribe({next:w=>{t.phase=w}});let s=w=>{o.next(w)},i=n.getBrowser()?.window,a=n.getBrowser()?.document,l=()=>{if(!a)return null;if(t.container)return t.container;let w=a.getElementById(tt);w||(w=a.createElement("div"),w.id=tt,a.body.appendChild(w));let S=e.key??"popup",O=a.getElementById(Ut(S));return O?t.container=O:(t.container=a.createElement("div"),t.container.id=Ut(S),w.appendChild(t.container)),t.container},d=0,u=!1,c=()=>{if(t.disposed||!t.open)return;if(e.position&&t.panel){let F=e.position();if(F&&typeof F.x=="number"&&typeof F.y=="number"){t.pos={top:F.y,left:F.x,width:F.width},u=!0,m();return}}let w=Rn(e.anchor);if(!w||!t.panel){d++<10&&queueMicrotask(c);return}if(!i)return;let S=t.panel,O=S.offsetWidth||S.getBoundingClientRect().width,U=S.offsetHeight||S.getBoundingClientRect().height;if((O===0||U===0)&&d++<10){typeof i.requestAnimationFrame=="function"?i.requestAnimationFrame(c):queueMicrotask(c);return}let H=typeof e.placement=="function"?e.placement():e.placement??"bottom",G=dn(w,i,O,U,H,e.gap??8,e.margin??8,e.center??!0);if(!G){d++<10&&queueMicrotask(c);return}if(d=0,t.pos=G,t.applier){let F=v(t.tree);F&&C(F)}},f=w=>{if(t.panel=w,w&&t.open&&!u&&e.positioning!=="none"&&(i&&typeof i.requestAnimationFrame=="function"?i.requestAnimationFrame(c):queueMicrotask(c)),w&&e.presence){let S=O=>{t.phase==="exit"&&k()};w.addEventListener("animationend",S),n.onUnmount(()=>w.removeEventListener("animationend",S))}},b=null,h=w=>{b=w,w&&u&&m()},m=()=>{let w=e.mask?b:t.panel;w&&(w.style.top=`${t.pos.top}px`,w.style.left=`${t.pos.left}px`,t.pos.width!==void 0&&(w.style.width=`${t.pos.width}px`))},v=w=>{if(!w)return null;let S=w;e.mask&&(S=X("div",{class:"wf-popup-mask",style:{position:"fixed",inset:"0",background:"var(--wf-overlay, rgba(0,0,0,0.5))",display:"flex",alignItems:"center",justifyContent:"center",zIndex:"var(--wf-z-modal, 1000)"},onClick:Z=>{e.maskClosable!==!1&&Z.target===Z.currentTarget&&g()}},e.maskCentered?{...S,props:{...S.props??{}}}:X("div",{class:"wf-popup-mask-inner",ref:h,style:e.position?{position:"fixed",top:`${t.pos.top}px`,left:`${t.pos.left}px`,...t.pos.width!==void 0?{width:`${t.pos.width}px`}:{}}:void 0},S)));let O=S.props??{},U=e.positioning==="none"||String(O.class??"").includes("mask")?O.class??"":["wf-popup",O.class].filter(Boolean).join(" "),H=!(e.mask&&e.position),G=e.positioning==="none"?{...O.style??{},position:"fixed"}:{...O.style??{},position:"fixed",...H?{top:`${t.pos.top}px`,left:`${t.pos.left}px`}:{},...H&&t.pos.width!==void 0?{width:`${t.pos.width}px`}:{}};return{...S,props:{...O,class:U,style:G,ref:f}}},C=w=>{let S=++t.version,O=t.tree;t.tree=w,t.chain=t.chain.then(async()=>{if(t.disposed||S!==t.version)return;let U=t.applier;if(!U)return;let H=U.registry;if(!H)return;let G=n.getSharedContext()??{},F=await new Promise((Z,jt)=>{let T=[],V=()=>n.requestRender?.();(O?xe(O,w,G,t.segments,H,V):me(w,G,H,t.segments,V)).subscribe({next:_=>T.push(_),error:jt,complete:()=>Z(T)})});for(let Z of F){if(t.disposed||S!==t.version)return;U.apply(Z)}for(let Z of F)Z.op==="unmount"&&K(Z.compId,t.segments)}).catch(U=>{console.error("[popup] render error:",U)})},E=()=>{t.disposed||(t.disposed=!0,t.applier&&(t.applier.dispose(),t.applier=null),t.tree=null,t.container&&(t.container.remove(),t.container=null))},k=()=>{t.disposed||(t.open=!1,s({kind:"closed"}),M(),E(),s({kind:"disposed"}),e.onClose?.())},g=()=>{!t.open||t.disposed||(e.presence?(s({kind:"exit"}),t.panel&&i&&!cn(t.panel,i)&&k(),t.panel||k()):k())},p={value:""},y={value:null},x={value:!1},M=()=>{x.value&&(a?.body&&(a.body.style.overflow=p.value),p.value="",y.value&&(y.value.focus?.(),y.value=null),x.value=!1)},D=()=>{n.scheduleAfterRender(()=>{let w=S=>{let O=t.panel;O?(O.querySelector?.("input, button, [tabindex], select, textarea")??O).focus?.():S<10&&t.open&&queueMicrotask(()=>w(S+1))};w(0)})},re=()=>{x.value=!0,e.lockScroll&&a?.body&&(p.value=a.body.style.overflow,a.body.style.overflow="hidden"),e.trapFocus&&i&&(y.value=i.document.activeElement,D())},se=null;e.trapFocus&&i&&(se=w=>{if(w.key!=="Tab"||!t.open||!t.panel)return;let S=Array.from(t.panel.querySelectorAll?.("input, button, [tabindex], select, textarea")??[]).filter(G=>!G.disabled&&G.offsetParent!==null);if(S.length===0)return;let O=S[0],U=S[S.length-1],H=i?.document.activeElement;w.shiftKey&&(H===O||H===t.panel||!t.panel.contains(H))?(w.preventDefault(),U.focus()):!w.shiftKey&&(H===U||!t.panel.contains(H))&&(w.preventDefault(),O.focus())},i.addEventListener("keydown",se));let ie=w=>{if(!t.open||(e.closeOnOutside??!0)===!1)return;let S=w.target,O=Rn(e.anchor);S&&O?.contains(S)||S&&t.panel?.contains(S)||g()},Me=w=>{t.open&&(e.closeOnEscape??!0)&&w.key==="Escape"&&g()};i&&(i.addEventListener("mousedown",ie),i.addEventListener("keydown",Me)),n.onUnmount(()=>{i&&(i.removeEventListener("mousedown",ie),i.removeEventListener("keydown",Me),se&&i.removeEventListener("keydown",se)),k()});let rt=()=>{if(t.open||t.disposed)return;t.open=!0,s({kind:"open"});let w=l();if(!w)return;e.trapFocus||e.lockScroll?re():e.autoFocus&&D();let S=ee();t.applier=new de(w,a,S),t.segments=new Map;let O=rr(e.content);O!=null?C(v(O)):k()},we={close:g,update(w){if(t.disposed||!t.open)return;if(w==null){g();return}let S=!1;if(e.position){let O=e.position();O&&typeof O.x=="number"&&typeof O.y=="number"&&(t.pos={top:O.y,left:O.x,width:O.width},S=!0)}C(v(w)),S&&m()},refresh(){if(!(t.disposed||!t.open||!t.tree)&&e.position){let w=e.position();w&&typeof w.x=="number"&&typeof w.y=="number"&&(t.pos={top:w.y,left:w.x,width:w.width},m())}},get open(){return t.open},events$:r};return rt(),we}function Nn(n,e,t){let o=n.nextHookIndex(),r=n.getHookState(o)??{value:t};n.setHookState(o,r);let s=e.value!==void 0;return{get value(){return e.value??r.value},controlled:e,setValue(i){s?(e.onChange||console.warn("[vdom] useControlled \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548"),e.onChange?.(i)):(r.value=i,n.requestRender())}}}function Mn(n,e){let t=new N,o=te(n,sr(n,e,t),{y:0,x:0});return{get y(){return o().y},get x(){return o().x},refresh:()=>{t.next()}}}function sr(n,e,t){let o=n.getBrowser()?.window,r=n.getBrowser()?.document??null;return I(s=>{if(!o)return s.next({y:0,x:0}),s.complete(),()=>{};let i,a=null,l=null,d=0,u=()=>{if(typeof e=="function")return e();if(e&&typeof e=="object"&&!("nodeType"in e)){let m=e;return typeof m.getScroller=="function"?m.getScroller()??null:m.root?typeof m.root=="string"?r?r.querySelector(m.root)??o:o:m.root:o}return o},c=m=>m?m===o?{y:o.scrollY||0,x:o.scrollX||0}:{y:m.scrollTop,x:m.scrollLeft}:{y:0,x:0},f=()=>{s.next(c(l))},b=()=>{if(a)return;if(l=u(),!l){d++<10&&n.scheduleAfterRender(b);return}let m=()=>{i===void 0&&(i=o.requestAnimationFrame(()=>{i=void 0,f()}))};l.addEventListener("scroll",m,{passive:!0}),a=m,f()};b();let h=t?.subscribe({next:()=>{b(),f()}});return()=>{h?.unsubscribe(),i!==void 0&&o.cancelAnimationFrame(i),a&&l&&l.removeEventListener("scroll",a),a=null}})}function Vn(n,e){let t=n.nextHookIndex(),o=n.getHookState(t)??{isIn:!1,io:null,retries:0,ready:!1};n.setHookState(t,o);let s=n.getBrowser()?.window?.IntersectionObserver,i=e&&typeof e=="object"&&!("nodeType"in e)?e:void 0,a=i?.target??(typeof e=="function"||e&&"nodeType"in e?e:void 0),l=typeof i?.rootMargin=="function"?i.rootMargin():i?.rootMargin,d=typeof i?.threshold=="function"?i.threshold():i?.threshold,u=typeof i?.root=="function"?i.root():i?.root??null,c=f=>{if(!s||!f||o.io)return;let b=new s(h=>{let m=h[0];m&&m.isIntersecting!==o.isIn&&(o.isIn=m.isIntersecting,i?.onChange?.(m,m.isIntersecting),n.requestRender())},{root:u??void 0,rootMargin:l,threshold:d});b.observe(f),o.io=b,o.ready=!0,n.onUnmount(()=>o.io?.disconnect())};if(s&&!o.io){let f=typeof a=="function"?a():a??null;f?c(f):a!==void 0&&o.retries++<10&&n.scheduleAfterRender(()=>c(typeof a=="function"?a():a??null))}return{get isIn(){return o.isIn},get ready(){return o.ready},ref:f=>{f?c(f):o.io?.disconnect()},observe:f=>c(f),disconnect:()=>{o.io?.disconnect(),o.io=null}}}function Pn(n,e,t){let o=n.nextHookIndex(),r=n.getHookState(o)??{keyword:"",selectedLabel:"",composing:!1};n.setHookState(o,r);let s=e.value!==void 0;return{controlled:e,get value(){return e.value??r.keyword},setValue(i){s?(e.onChange||console.warn(`[vdom] useControlledInput(${t?.name??""}) \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),e.onChange?.(i)):(r.keyword=i,n.requestRender())},get keyword(){return r.keyword},setKeyword(i){r.keyword=i,r.composing||this.setValue(i)},get selectedLabel(){return r.selectedLabel},setSelectedLabel(i){r.selectedLabel=i},get isComposing(){return r.composing},onCompositionStart(){r.composing=!0},onCompositionEnd(){r.composing=!1}}}function An(n,e){let t={draggable:!0,onDragStart:o=>{e.data!==void 0&&o.dataTransfer?.setData("text/plain",JSON.stringify(e.data)),e.onDragStart?.(o,e.data)},onDragEnd:o=>e.onDragEnd?.(o)};return{draggableProps:t,dragProps:t,dropProps:{onDragOver:o=>{o.preventDefault(),e.onDragOver?.(o)},onDragLeave:o=>e.onDragLeave?.(o),onDrop:o=>{o.preventDefault();let r;try{r=o.dataTransfer?.getData("text/plain")?JSON.parse(o.dataTransfer.getData("text/plain")):void 0}catch{r=void 0}e.onDrop?.(o,r)}}}}var In=new WeakMap,ir=new Map;function ar(n,e){let t=n.getBrowser()?.window,o=t?In.get(t)??In.set(t,new Map).get(t):ir,r=o.get(e);return r||(r=gt(s=>{let i=n.getBrowser()?.window,l=(i?.matchMedia?.bind(i)??(typeof globalThis.matchMedia=="function"?globalThis.matchMedia.bind(globalThis):void 0))?.(e);if(!l)return;let d=()=>s(l.matches);return l.addEventListener("change",d),()=>l.removeEventListener("change",d)},()=>{let s=n.getBrowser()?.window,i=s?.matchMedia?.bind(s)??(typeof globalThis.matchMedia=="function"?globalThis.matchMedia.bind(globalThis):void 0);return i?i(e).matches:!1}),o.set(e,r)),r}function Fe(n,e){return te(n,ar(n,e),!1)}function Hn(n,e){let t=Object.entries(e).sort((o,r)=>o[1]-r[1]);return()=>{let o=t[0]?.[0]??"default";for(let[r,s]of t)Fe(n,`(min-width: ${s}px)`)()&&(o=r);return o}}var lr=0,Ft=()=>`m${Date.now().toString(36)}${(lr++).toString(36)}`;function ur(){let n="";return(e,t)=>{let o=e.trim();if(!o)return null;if(o.startsWith("event:"))return n=o.slice(6).trim(),null;let r=t??n,s=o.startsWith("data:")?o.slice(5).trim():o;if(!s)return null;let i;try{i=JSON.parse(s)}catch{return null}if(!r)return i.toolCalls?{toolCalls:i.toolCalls}:i.text!==void 0?{content:String(i.text)}:i.content!==void 0?{content:i.content}:null;switch(r){case"wf:message_start":return null;case"wf:token":return{content:i.text!==void 0?String(i.text):i.content};case"wf:step":return{step:i};case"wf:usage":return{usage:i};case"wf:tool_call":return{toolCalls:[{id:i.id,name:i.name,args:i.args,status:"running",call:i}]};case"wf:tool_progress":return{toolProgress:i};case"wf:tool_result":return{toolResult:i};case"wf:approval_request":return{approval:i};case"wf:error":return{error:i};case"wf:done":{let a=i.usage?{usage:i.usage}:{};return{done:!0,...i.content?{content:i.content,doneContent:!0}:{},...a}}default:return null}}}function Ln(n,e){let t=n.nextHookIndex(),o=n.getHookState(t)??{messages:[],status:"idle",subs:new Set,changes:new N,controller:null,seq:0,input:"",error:null,usage:null,step:null};if(n.setHookState(t,o),o.messages.length===0){let a=[];e.system&&a.push({id:Ft(),role:"system",content:e.system}),e.initialMessages&&a.push(...e.initialMessages),o.messages=a}let r=()=>{for(let a of[...o.subs])a();o.changes.next([...o.messages])},s=e.parseChunk??ur(),i={get state(){return o.messages},get messages(){return o.messages},changes$:o.changes.asObservable(),get status(){return o.status},get input(){return o.input??""},setInput(a){o.input=a},get streaming(){return o.status==="streaming"},get error(){return o.error??null},get usage(){return o.usage??null},get step(){return o.step??null},subscribe(a){return o.subs.add(a),()=>{o.subs.delete(a)}},set(){},update(){},notify:r,async send(a=o.input){let l=typeof e.url=="function"?e.url():e.url??"/api/chat",d={id:Ft(),role:"user",content:a};o.messages=[...o.messages,d];let u={id:Ft(),role:"assistant",content:"",status:"streaming"};o.messages=[...o.messages,u],o.status="streaming",r();let c=new AbortController;o.controller=c;try{let f=await fetch(l,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({messages:o.messages.map(v=>({role:v.role,content:v.content}))}),signal:c.signal});if(!f.ok||!f.body)throw new Error(`[vdom] chat \u8BF7\u6C42\u5931\u8D25 ${f.status}`);let b=f.body.getReader(),h=new TextDecoder,m="";for(;;){let{value:v,done:C}=await b.read();if(C)break;m+=h.decode(v,{stream:!0});let E=m.split(`
2
+ `);m=E.pop()??"";let k;for(let g of E){if(!g.trim())continue;if(g.trim().startsWith("event:")){k=g.trim().slice(6).trim();continue}let p=s(g,k);if(g.trim().startsWith("data:")&&(k=void 0),!!p){if(p.content&&(u.content=p.doneContent?u.content||p.content:u.content+p.content,r()),p.toolCalls?.length&&(u.toolCalls=[...u.toolCalls??[],...p.toolCalls],r()),p.toolProgress){let y=u.toolCalls?.find(x=>x.id===p.toolProgress.toolCallId);y&&(y.progress=p.toolProgress,r())}if(p.toolResult){let y=u.toolCalls?.find(x=>x.id===p.toolResult.id);y&&(y.result=p.toolResult.output,y.status=p.toolResult.ok===!1?"error":"ok",r())}if(p.approval){u.approval=p.approval;let y=u.toolCalls?.find(x=>x.id===p.approval.toolCallId);y&&(y.approval=p.approval),r()}p.usage&&(o.usage=p.usage,r()),p.step!==void 0&&(o.step=p.step,r()),p.error&&(o.error=p.error,u.status="error",r()),p.done&&(o.step=null,r())}}}u.status=void 0,o.status="idle"}catch(f){f.name!=="AbortError"?(u.status="error",o.status="error"):(u.status=void 0,o.status="idle")}finally{o.controller=null,r()}},stop(){o.controller?.abort()},retry(){let a=[...o.messages].reverse().find(l=>l.role==="user");a&&i.send(a.content)},reset(){o.messages=[],o.status="idle",r()},async approve(a,l,d){let u=!1;for(let c of o.messages){for(let f of c.toolCalls??[])if(!f.approved){f.approved=a!=="rejected",l&&(f.feedback=l),a==="modified"&&d&&(f.args=d),u=!0;break}if(u)break}r()}};return i}function _t(n){return Fe(n,"(prefers-reduced-motion: reduce)")()}function $n(n,e,t){let o=n.getBrowser()?.window,r=_t(n),s=t?.duration??400;if(s<=0)return{value:e,reset:()=>{}};let i=t?.ease==="linear"?k=>k:k=>1-Math.pow(1-k,3),a=n.nextHookIndex(),l=n.getHookState(a);if(l)return l.reset(e),l;let d=r?e:0,u,c=e,f=0,b=s+200,h,m={get value(){return u!==void 0&&o&&o.performance.now()-f>b?c:d},set value(k){d=k},reset:()=>{}},v=()=>{n.requestRender()},C=k=>{if(c=k,r){m.value=k,v();return}if(k===m.value)return;if(!o){m.value=k;return}u!==void 0&&o.cancelAnimationFrame(u);let g=m.value,p=o.performance.now();f=p,E();let y=x=>{let M=Math.min(1,(x-p)/s);m.value=Math.round(g+(k-g)*i(M)),M<1?u=o.requestAnimationFrame(y):u=void 0,v()};u=o.requestAnimationFrame(y)},E=()=>{o&&(h!==void 0&&clearTimeout(h),h=setTimeout(()=>{h=void 0,u!==void 0&&(o&&o.cancelAnimationFrame(u),u=void 0,m.value=c,v())},b))};return m.reset=k=>{k===c&&u!==void 0||C(k)},n.onUnmount(()=>{u!==void 0&&o&&(o.cancelAnimationFrame(u),u=void 0)}),n.setHookState(a,m),l=m,l.reset(e),l}function Dn(n,e){let t=n.getBrowser()?.window,o=0,r=0,s=!1,i=0,a=c=>{s&&e.onMove(c,{x:c.clientX-o,y:c.clientY-r})},l=c=>{s&&c.pointerId===i&&(s=!1,t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",d)),e.onEnd?.(c))},d=c=>{!s||c.pointerId!==i||(s=!1,t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",d)),e.onEnd?.(c))},u=c=>{s||(c.preventDefault(),s=!0,i=c.pointerId,o=c.clientX,r=c.clientY,t&&(t.addEventListener("pointermove",a),t.addEventListener("pointerup",l),t.addEventListener("pointercancel",d)),e.onStart?.(c))};return n.onUnmount(()=>{s&&t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",d),s=!1)}),{onPointerDown:u}}function Un(n){let e=te(n,dr(n),{height:0,offsetTop:0,keyboardOpen:!1});return{get height(){return e().height},get offsetTop(){return e().offsetTop},get keyboardOpen(){return e().keyboardOpen}}}function dr(n){let e=n.getBrowser()?.window;return I(t=>{let o=()=>{let i=e?.visualViewport,a=i?.height??e?.innerHeight??0;return{height:a,offsetTop:i?.offsetTop??0,keyboardOpen:a<(e?.innerHeight??0)*.9}};if(!e)return t.next({height:0,offsetTop:0,keyboardOpen:!1}),t.complete(),()=>{};let r=()=>t.next(o()),s=e.visualViewport;return s?.addEventListener?(s.addEventListener("resize",r),s.addEventListener("scroll",r),r(),()=>{s.removeEventListener("resize",r),s.removeEventListener("scroll",r)}):(e.addEventListener("resize",r),r(),()=>e.removeEventListener("resize",r))})}var Wt=new Map,Fn=new Set,cr=new N;function _n(n){if(n)for(let[e,t]of Object.entries(n)){let o=Wt.get(e);o?(o.state$.next(t),o.seedHit=!0):_e.set(e,t)}}var _e=new Map;function Pt(n){return{useObservable(e,t,o){return te(n,e,t,o)},useAsyncData(e,t){let o=Wt.get(t);o||(o={trigger:new ae(void 0),state$:new ae(_e.get(t)??null),fetcher:null,started:_e.has(t),seedHit:_e.has(t),sub:null},_e.delete(t),Wt.set(t,o)),o.fetcher=e;let r=()=>{if(o.sub||o.seedHit)return;o.started=!0;let a=o.trigger.asObservable().pipe(Pe(()=>{let l=o.fetcher;if(!l)return ce(Promise.resolve(null));let d=l();return Fn.add(d),d.finally(()=>Fn.delete(d)).catch(()=>{}),ce(d)}));o.sub=a.subscribe({next:l=>{o.state$.next(l)},error:l=>{console.error("[vdom] useAsyncData:",l),cr.next({key:t,error:l}),o.state$.next(null)}})};return r(),[te(n,o.state$.asObservable(),null),()=>{o.seedHit&&(o.seedHit=!1),o.state$.next(null),o.sub?o.trigger.next():r()}]},useExternal(e){let t=n.getInstanceData(),o=t.get(e);if(!o){let r=e.subscribe(()=>n.requestRender());n.onUnmount(r),o={unsub:r},t.set(e,o)}return()=>e.state},signal:e=>{let t=Et(e),o=t.subscribe(()=>n.requestRender());return n.onUnmount(o),t},hold:e=>n.onUnmount(e),useStableRef:(e,t)=>an(n,e,t),useOpen:(e,t)=>ln(n,e,t),onUnmount:e=>n.onUnmount(e),useGlobalKey:(e,t)=>un(n,e,t),openPopup:e=>On(n,e),usePopupPosition:e=>fn(n,e),useControlled:(e,t)=>Nn(n,e,t),useScrollPosition:e=>Mn(n,e),useInView:e=>Vn(n,e),useControlledInput:(e,t)=>Pn(n,e,t),useDragDrop:e=>An(n,e),useMedia:e=>Fe(n,e),useBreakpoint:e=>Hn(n,e),useChat:e=>Ln(n,e),useTween:(e,t)=>$n(n,e,t),useDrag:e=>Dn(n,e),useVisualViewport:()=>Un(n),useReducedMotion:()=>_t(n)}}function Wn(n,e,t){return e<=0?n:new Promise((o,r)=>{let s=setTimeout(()=>{r(new Error(`[vdom] \u5F02\u6B65\u8D85\u65F6\uFF08${e}ms\uFF09: ${t}`))},e);n.then(i=>{clearTimeout(s),o(i)},i=>{clearTimeout(s),r(i)})})}function Ge(n){return z(n)?{kind:"hole"}:Array.isArray(n)?{kind:"array",items:n}:{kind:"vnode",v:n}}function ve(n){return n.kind==="hole"?null:n.kind==="array"?n.items:n.v}function ee(){let n=new Map;return{get:e=>n.get(e),set:(e,t)=>{n.set(e,t)},delete:e=>{n.delete(e)},keys:()=>[...n.keys()],asyncTimeout:15e3}}function Dt(n,e){let t=[...e.keys()].filter(o=>o===n||o.startsWith(n+".")).reverse();for(let o of t){let r=e.get(o);if(r){for(let s of r.onUnmounts.reverse())try{s()}catch(i){console.error("[vdom] onUnmount:",i)}e.delete(o)}}}function It(n,e,t,o){return typeof n?.type=="function"||Array.isArray(n)||ne(n)==="hole"?{parent:e,index:0}:{parent:t,index:o}}function j(n,e,t,o,r,s,i,a){let l=[];return We(n,e,t,o,r,s,i,a,l),A(l)}function We(n,e,t,o,r,s,i,a,l){let d=R(e,t);switch(ne(n)){case"text":{let u=Ye(n);l.push({op:"createText",id:d,value:u},{op:"insert",id:d,parent:e,ref:o});break}case"hole":{Rt(u=>l.push(u),d,e,o);break}case"array":{let u=n;Ve(u,`\u6570\u7EC4\u5C55\u5F00\uFF08${e}\uFF09`);let c=t,f=o;for(let b of u){We(b,e,c,f,r,s,i,a,l);let h=$(b);f=R(e,c+h-1),c+=h}break}case"fragment":{let u=q(n);Ve(u,`Fragment \u5C55\u5F00\uFF08${e}\uFF09`);let c=t,f=o;for(let b of u){We(b,e,c,f,r,s,i,a,l);let h=$(b);f=R(e,c+h-1),c+=h}break}case"element":{let u=n;l.push({op:"create",id:d,tag:u.type,attrs:Ae(u.props)});for(let[m,v]of Object.entries(u.props))m==="children"||m==="key"||m==="ref"||typeof v=="function"&&l.push({op:"setProp",id:d,key:m,value:v});l.push({op:"insert",id:d,parent:e,ref:o});let c=u.props.ref;typeof c=="function"&&l.push({op:"ref",id:d,fn:c});let f=q(u);Ve(f,`\u5143\u7D20 children\uFF08${d}\uFF09`);let b=null,h=0;for(let m of f){We(m,d,h,b,r,s,i,a,l);let v=$(m);b=R(d,h+v-1),h+=v}l.push({op:"close",id:d});break}case"component":{let u=n,c=u.key!==null?Q(e,u.key):d,f=i??new Map,b=f.get(c);b&&b.factory!==u.type&&(K(c,f),b=void 0),b?W("seg:reuse",c):(b=Mt(u.type,u.props,r,c,a),f.set(c,b),W("seg:create",c));let h;try{h=Vt(b,u.props)}catch(v){Ie(c,v),h=null}h!==null&&kt(c),b.lastOutput=Ge(h);let m=It(h,c,e,t);if(z(h)){let v=R(c,0);l.push({op:"createAnchor",id:v},{op:"insert",id:v,parent:e,ref:o},{op:"mount",compId:c});break}We(h,m.parent,m.index,o,r,s,f,a,l),l.push({op:"mount",compId:c});break}case"invalid":{console.warn(`[vdom] \u975E\u6CD5\u5B50\u8282\u70B9\u2014\u2014${St(n)}`),Rt(u=>l.push(u),d,e,o,St(n));break}}}function me(n,e,t,o,r){let s=e??{},i=t??ee();return j(n,"root",0,null,s,i,o,r).pipe(fr(A([{op:"done",full:!0}])))}function A(n){return I(e=>{for(let t of n)e.next(t);return e.complete(),()=>{}})}function J(n){return I(e=>{let t=0,o=null,r=!1,s=!1,i=()=>{if(!(r||s)){for(s=!0;!r;){if(t>=n.length){e.complete();break}let a=n[t++],l=!1,d=!0;if(o=a.subscribe({next:u=>e.next(u),error:u=>{r||(r=!0,e.error(u))},complete:()=>{l||r||(l=!0,!d&&i())}}),d=!1,!l)break}s=!1}};return i(),()=>{r=!0,o?.unsubscribe()}})}function fr(n){return e=>J([e,n])}function qn(n,e){return X("div",{class:"wf-error-fallback",style:"padding:40px 24px;text-align:center;font-family:var(--wf-font-sans,system-ui);"},[X("div",{style:"font-size:21px;font-weight:600;margin-bottom:8px;"},"\u9875\u9762\u6E32\u67D3\u5931\u8D25"),X("div",{style:"font-size:13px;color:var(--wf-color-text-secondary,#64748b);margin-bottom:16px;max-width:520px;margin-inline:auto;word-break:break-all;"},String(n?.message??n)),X("button",{class:"wf-btn wf-btn--primary",onClick:()=>{e.render?.()},style:"padding:8px 20px;border-radius:6px;border:none;cursor:pointer;"},"\u91CD\u8BD5")])}function Bn(){return new Map}function jn(){let n=new Map;return{get:e=>n.get(e),set:(e,t)=>{n.set(e,t)},removePrefix:e=>{for(let t of[...n.keys()])(t===e||t.startsWith(e+"."))&&n.delete(t)},hasPrefix:e=>{for(let t of n.keys())if(t===e||t.startsWith(e+"."))return!0;return!1},remapPrefix:(e,t)=>{for(let[o,r]of[...n])(o===e||o.startsWith(e+"."))&&(n.delete(o),n.set(t+o.slice(e.length),r))},clear:()=>{n.clear()}}}function Kn(n,e){let t=[];switch(e.op){case"create":case"createText":case"createAnchor":{n.get(e.id)===void 0&&n.set(e.id,"created");break}case"insert":{let o=n.get(e.id);o===void 0?t.push(`insert Pre \u8FDD\u4F8B\uFF1Aid ${e.id} \u672A create`):o==="created"&&n.set(e.id,"inserted");break}case"close":{let o=n.get(e.id);o===void 0?t.push(`close Pre \u8FDD\u4F8B\uFF1Aid ${e.id} \u4E0D\u5B58\u5728`):o==="inserted"?n.set(e.id,"active"):o!=="active"&&t.push(`close Pre \u8FDD\u4F8B\uFF1A${e.id} \u72B6\u6001\u5E94\u4E3A inserted/active\uFF08\u5B9E\u9645 ${o}\uFF09`);break}case"remove":{n.removePrefix(e.id),n.hasPrefix(e.id)&&t.push(`remove Post \u8FDD\u4F8B\uFF1A${e.id} \u524D\u7F00\u8BB0\u5F55\u6B8B\u7559`);break}case"setText":{n.get(e.id)===void 0&&t.push(`setText Pre \u8FDD\u4F8B\uFF1Aid ${e.id} \u4E0D\u5B58\u5728`);break}case"setProp":{n.get(e.id)===void 0&&t.push(`setProp Pre \u8FDD\u4F8B\uFF1Aid ${e.id} \u4E0D\u5B58\u5728`);break}case"move":{n.remapPrefix(e.id,e.newId),n.get(e.newId)===void 0&&!n.hasPrefix(e.newId)&&t.push(`move Post \u8FDD\u4F8B\uFF1Aremap \u540E\u65B0 id ${e.newId} \u4E0D\u5B58\u5728`),e.id!==e.newId&&(n.hasPrefix(e.id)&&t.push(`move Post \u8FDD\u4F8B\uFF1A\u65E7\u524D\u7F00 ${e.id} \u8FC1\u79FB\u540E\u6B8B\u7559`),n.get(e.id)!==void 0&&n.get(e.newId)!==void 0&&t.push(`move Post \u8FDD\u4F8B\uFF1A\u65E7 id ${e.id} \u8FC1\u79FB\u540E\u6B8B\u7559`));break}case"mount":case"unmount":case"ref":case"unref":break;case"done":break}return t}function zn(){let n=jn();return(e,t)=>{let o=Kn(n,e);for(let r of o)console.error(`[vdom-dev] ${r}`);switch(e.op){case"insert":{let r=t.nodes.get(e.id);r&&!r.isConnected&&console.error(`[vdom-dev] insert Post \u8FDD\u4F8B\uFF1A${e.id} \u672A\u6302\u8F7D\uFF08isConnected=false\uFF09`);break}case"setText":{let r=t.nodes.get(e.id);r&&r.nodeType!==3&&console.error(`[vdom-dev] setText Pre \u8FDD\u4F8B\uFF1A${e.id} \u975E\u6587\u672C\u8282\u70B9\uFF08${r.nodeType}\uFF09`);break}case"setProp":{let r=t.nodes.get(e.id);r&&r.nodeType!==1&&console.error(`[vdom-dev] setProp Pre \u8FDD\u4F8B\uFF1A${e.id} \u975E\u5143\u7D20\u8282\u70B9\uFF08${r.nodeType}\uFF09`);break}default:break}}}function Yn(n=15e3){let e=new Map,t="active",o={};return{get(r,s){let i=e.get(r);if(i)return i;let a=Wn((async()=>{if(r in o)return o[r];if(s)return s();let l=await fetch(r);if(!l.ok)throw new Error(`[vdom] ctx.data \u8BF7\u6C42\u5931\u8D25 ${l.status}: ${r}`);return l.json()})(),n,`ctx.data(${r})`);return e.set(r,a),a},set(r,s){e.set(r,Promise.resolve(s))},has(r){return e.has(r)},preload(r){o={...o,...r}},invalidate(r){e.delete(r)},seed(){return o}}}var pr=16,mr=20;function gr(){return globalThis.performance?.now?.()??Date.now()}function Bt(){let n=new N,e=0,t=0,o=!1,r=!1,s=0,i=0,a=()=>{if(o=!1,!r){r=!0;try{let l=gr();s=l-i<pr?s+1:0,i=l,t++,W("sched:flush"),n.next()}finally{r=!1,o&&(s>=mr?(console.warn("[vdom] v2 \u8C03\u5EA6\uFF1A\u8FDE\u7EED\u91CD\u6E32\u67D3\u8D85\u9650\uFF08",s,"\uFF09\u2014\u2014\u8BF7\u6C42\u4E22\u5F03\uFF08\u6E32\u67D3\u98CE\u66B4\u9632\u62A4\uFF09"),o=!1):queueMicrotask(a))}}};return{request(l){if(e++,W("sched:request",l??"unknown"),r){o=!0;return}o||(o=!0,queueMicrotask(a))},renders$:n.asObservable(),stats:()=>({requested:e,flushed:t})}}function Jn(n){let e=!1,t=null,o={builds:0,diffs:0,applies:0,unmounts:0},r=new N,s=new N,i=u=>{if(n.active())for(let c of u)try{o.applies++,n.apply(c)}catch(f){console.error("[vdom] v2 apply:",f);break}},a=u=>{if(n.active())for(let c of u)c.op==="unmount"&&n.dispose(c.compId)&&o.unmounts++};return{apply:u=>new Promise((c,f)=>{if(!n.active()){c();return}let b;if(!e){e=!0;try{n.boot()}catch(h){f(h);return}}if(t===null)o.builds++,b=n.build(u);else if(t.type!==u.type){o.builds++;try{n.resetRoot()}catch(h){f(h);return}t=null,b=n.build(u)}else o.diffs++,b=n.diff(t,u);b.pipe(ht(),fe(h=>W("cmd:render",`${h.length}\u6761`)),fe(i),fe(a),fe(h=>{n.active()&&(t=u)})).subscribe({next:h=>{if(!n.active()){c();return}r.next(h),s.next(),c()},error:h=>{t=null,f(h)}})}),reset:()=>{t=null},metrics:()=>({...o}),applied$:r.asObservable(),complete$:s.asObservable()}}var nt=2e3,Gn=5e3,Xn=10,Zn=.05,Qn=300;function br(n,e,t,o){let r=()=>o?.()??globalThis.__wfSpy??[],s=0,i=0,a=0,l=0,d=0,u=0,c=0,f=0,b=0,h=0,m=0,v=[];n.subscribe({next:p=>{d=p.length,u=Math.max(u,p.length),i+=p.length}}),e.subscribe({next:()=>{s++,m++,c>0&&(b=eo()-c),b>h&&(h=b),c=eo(),g()}});let C=()=>{let p=0,y=0;for(let x of r())x.kind==="seg:create"?p++:x.kind==="seg:reuse"&&y++;a=p,l=y},E=null,k=()=>{C();let p=m/(nt/1e3),y=a+l>0?a/(a+l):0;v.length=0,p>Xn&&v.push(`\u9891\u7387\u8D85\u9650\uFF1A${p.toFixed(1)} \u6E32\u67D3/s\uFF08> ${Xn}\uFF09`),d>Gn&&v.push(`\u89C4\u6A21\u8D85\u9650\uFF1A\u5355\u6E32\u67D3 ${d} \u547D\u4EE4\uFF08> ${Gn}\uFF09`),h>Qn&&v.push(`\u6E32\u67D3\u8017\u65F6\u8D85\u9650\uFF1A${h}ms\uFF08> ${Qn}\uFF09`),y>Zn&&v.push(`\u590D\u7528\u7387\u4E0D\u8DB3\uFF1A\u91CD\u8DD1\u7387 ${(y*100).toFixed(1)}%\uFF08> ${Zn*100}%\uFF09`),be().total>0&&be().total!==f&&(v.push(`renderFn \u9519\u8BEF\uFF1A\u7D2F\u8BA1 ${be().total}\uFF08\u7EC4\u4EF6\u7EA7 hole \u964D\u7EA7\u2014\u2014\u81EA\u6108\u91CD\u8BD5\u4E2D\uFF09`),f=be().total);for(let x of v)console.warn(`[vdom-dev] \u6E32\u67D3\u5065\u5EB7\uFF1A${x}`);m=0,g()},g=()=>{let p=a+l>0?a/(a+l):0,y={fps:m/(nt/1e3),lastCmds:d,maxCmds:u,reRunRate:p,segments:t?.size??0,errors:be().total,total:{renders:s,cmds:i,creates:a,reuses:l},warns:[...v]};globalThis.__wfRenderHealth=y};return g(),E=setInterval(k,nt),{snapshot:()=>{C();let p=a+l>0?a/(a+l):0;return{fps:m/(nt/1e3),lastCmds:d,maxCmds:u,reRunRate:p,segments:t?.size??0,errors:be().total,total:{renders:s,cmds:i,creates:a,reuses:l},warns:[...v]}},refresh:k,dispose:()=>{E&&(clearInterval(E),E=null)}}}function eo(){return globalThis.performance?.now?.()??Date.now()}function to(n){let e=br(n.applied$,n.complete$,n.segments);return W("health:attached"),e}function no(n,e){let t=document,o=window,r=typeof e.root=="string"?t.querySelector(e.root):e.root;if(!r)throw new Error(`uiServeV2: root \u672A\u627E\u5230 \u2014 ${String(e.root)}`);let s=o.__DATA__;s&&_n(s);let i=Bn(),a=ee(),l=new Map,d=new de(r,t,a);o.__WF_DEV__&&(d.devVerify=zn());let u=Bt(),c=o.__wfV2??={builds:0,diffs:0},f=[],b=[],h=()=>{let T=f.splice(0);for(let V of T)try{V()}catch(P){console.error("[vdom] v2 afterRender:",P)}},m={browser:pt(),data:Yn(),onUnmount(T){b.push(T)},afterRender(T){f.push(T)},...e.api?{api:e.api}:{},...e.auth?{auth:e.auth}:{},...e.ws?{ws:e.ws}:{},...e.i18n?{i18n:e.i18n}:{},...e.toast?{toast:e.toast}:{},...e.confirm?{confirm:e.confirm}:{},...e.notification?{notification:e.notification}:{}},v=!0,C=Jn({boot:()=>{Array.from(r.querySelectorAll("*")).some(V=>[...V.childNodes].some(P=>P.nodeType===8&&P.textContent?.includes("wf")))?d.absorb.begin(r):r.innerHTML=""},resetRoot:()=>{r.innerHTML="";for(let[T]of[...l])K(T,l);d.reset()},build:T=>me(T,m,a,l,()=>u.request("component-rerender")),diff:(T,V)=>xe(T,V,m,l,a,()=>u.request("component-rerender")),apply:T=>{d.apply(T)},dispose:T=>l.has(T)?(K(T,l),!0):!1,active:()=>v}),E=()=>{let T=C.metrics();c.builds=T.builds,c.diffs=T.diffs},k=!1;d.absorb.failed$.subscribe({next:()=>{k=!0,console.warn("[vdom] SSR \u5438\u6536\u5931\u8D25\u2014\u2014\u56DE\u9000\u6E05\u7A7A\u91CD\u5EFA\uFF08\u4E8B\u4EF6\u9A71\u52A8\uFF09")}}),C.complete$.subscribe({next:()=>{h(),k&&(k=!1,d.absorb.reset(),r.innerHTML="",C.reset(),u.request("error-fallback"))}});let g=null;o.__WF_DEV__&&(g=to({applied$:C.applied$,complete$:C.complete$,segments:l}));let p=0,y=3,x=T=>{C.reset();let V=e.errorFallback?.(T,m)??qn(T,m);C.apply(V).then(E).catch(P=>console.error("[vdom] v2 error fallback \u6E32\u67D3\u5931\u8D25:",P))},M=async T=>{if(v)try{await C.apply(T),p=0,E()}catch(V){console.error("[vdom] v2 render:",V),p++,p>=y&&(p=0,x(V instanceof Error?V:new Error(String(V))))}},D=m;D.stream=(T,V)=>(M(T),new Response(null,{status:V?.status??200}));let re=new N,se="idle";re.asObservable().pipe(ge((T,V)=>V.kind==="begin"?"rendering":"idle","idle")).subscribe({next:T=>{se=T}});let ie=new N;ie.subscribe({next:T=>W("nav:resolve",T)});let Me=(T,V)=>ce(n.resolve(nn(T),m)).pipe(Pe(P=>{let _=P.status>=300&&P.status<400&&P.headers?.get("Location")?P.headers.get("Location"):null;if(_){if(V>=5)throw new Error(`[vdom] redirect \u94FE\u8D85\u9650\uFF08${V+1}\uFF09\u2014\u2014${T} \u2192 ${_}`);return o.history.replaceState({},"",_),Me(_,V+1)}if(P.status===404)throw new Error(`[vdom] \u65E0\u8DEF\u7531\uFF1A${T}\u2014\u2014\u56DE\u9000\u9875\u9762\u7EA7\u5BFC\u822A`);return A([void 0])})),rt=T=>I(V=>{re.next({kind:"begin"});let P=!1,_=Me(T,0).subscribe({next:()=>V.next(),error:co=>{P=!0,re.next({kind:"end"}),V.error(co)},complete:()=>{P=!0,re.next({kind:"end"}),V.complete()}});return()=>{_.unsubscribe(),P||re.next({kind:"end"})}}),we=T=>(ie.next(T),new Promise((V,P)=>{rt(T).subscribe({next:()=>V(),error:_=>P(_),complete:()=>V()})})),w=()=>o.location.pathname+o.location.search,S=async()=>{await we(w())};u.renders$.subscribe({next:()=>{S().catch(T=>console.error("[vdom] v2 render:",T))}}),m.render=()=>{u.request("page-render")};let O=()=>{try{o.history.replaceState({...o.history.state??{},scrollY:o.scrollY},"")}catch{}},U=()=>{try{let T=o.history.state?.scrollY;o.scrollTo(0,typeof T=="number"?T:0)}catch{}},H=async T=>{O(),o.history.pushState({scrollY:0},"",T);try{await we(T),o.scrollTo(0,0)}catch{o.location.href=T}};m.app={navigate:H};let G=T=>{let P=T.target?.closest?.("a[href]");if(!P)return;let _=P.getAttribute("href");!_||_.startsWith("http")||_.startsWith("#")||n.has(_)&&(T.preventDefault(),H(_))};t.addEventListener("click",G);let F=()=>{we(w()).then(()=>U()).catch(()=>{o.location.reload()})};o.addEventListener("popstate",F),we(w()).catch(T=>console.error("[vdom] v2 \u9996\u5E27:",T));let Z=!1;return{ready:Promise.resolve(),render:()=>S(),__apply:T=>M(T),navigate:H,unmount:()=>{Z=!0,v=!1,t.removeEventListener("click",G),o.removeEventListener("popstate",F),g?.dispose();for(let[T]of[...l])K(T,l);d.dispose();for(let T of b.reverse())try{T()}catch(V){console.error("[vdom] v2 unmount:",V)}b.length=0,r.innerHTML=""}}}var Oe=class extends Error{status;constructor(e,t){super(e),this.name="ApiError",this.status=t}};function vr(n={}){let e=n.baseUrl??"",t=n.timeout??15e3,o=new N,r=new N;o.asObservable().pipe(xt(()=>ce(Promise.resolve(n.onUnauthorized?.()??!1)))).subscribe({next:a=>r.next(a),error:()=>r.next(!1)});let s=async()=>(o.next(),new Promise(a=>{r.asObservable().pipe(wt(1)).subscribe({next:l=>a(l)})}));async function i(a,l,d,u={},c=!1){let f=new AbortController,b=setTimeout(()=>f.abort(),t),h=typeof n.token=="function"?n.token():n.token;try{let m=h,v={"content-type":"application/json",...typeof n.headers=="function"?n.headers():n.headers,...m?{authorization:`Bearer ${m}`}:{},...u.headers},C=await fetch(e+l,{method:a,headers:v,body:d!==void 0?JSON.stringify(d):void 0,signal:f.signal});if(C.status===401&&!c){let k=typeof n.token=="function"?n.token():n.token;if(k&&k!==h||await s())return i(a,l,d,u,!0);throw new Oe(`[api] 401 ${a} ${l}\uFF08\u5237\u65B0\u5931\u8D25\uFF09`,401)}if(!C.ok){let k="";try{let g=await C.text();if(g){let p=JSON.parse(g);p&&typeof p=="object"&&typeof p.error=="string"&&(k=p.error)}}catch{}throw new Oe(k||`[api] \u8BF7\u6C42\u5931\u8D25 ${C.status}: ${a} ${l}`,C.status)}let E=await C.text();return E?JSON.parse(E):void 0}catch(m){let v=m instanceof Oe?m:new Oe(m.message);throw n.onError?.(v),v}finally{clearTimeout(b)}}return{get:(a,l)=>i("GET",a,void 0,l),post:(a,l,d)=>i("POST",a,l,d),put:(a,l,d)=>i("PUT",a,l,d),delete:(a,l)=>i("DELETE",a,void 0,l),patch:(a,l,d)=>i("PATCH",a,l,d),request:i}}function hr(n={}){let e=n.scheme??"Bearer",t=n.storage??{get:()=>null,set:()=>{}},o=n.tokenKey??n.key??"wf-auth-token",r=n.userKey??"wf-auth-user",s=n.refreshTokenKey??"wf-auth-refresh",i=null;try{let u=t.get(r);u&&(i=JSON.parse(u))}catch{}let a=new ae(t.get(o)||null),l=()=>{a.next(d.getToken())},d={getToken(){let u=t.get(o);return u||null},setToken(u){u===null?t.set(o,""):t.set(o,u),l()},headers(){let u=t.get(o);return u?{authorization:`${e} ${u}`}:{}},logout(){t.set(o,""),t.set(r,""),t.set(s,""),i=null,l()},get user(){return i},get isLoggedIn(){return!!t.get(o)},login(u,c,f){t.set(o,u),c!==void 0&&(t.set(r,JSON.stringify(c)),i=c),f!=null&&t.set(s,f),l(),n.onAuth?.(d)},setUser(u){t.set(r,JSON.stringify(u)),i=u},token$:a.asObservable(),async refresh(){if(!n.onRefresh)return console.warn("[vdom] auth.refresh() \u672A\u914D\u7F6E onRefresh \u94A9\u5B50\u2014\u2014401 \u65F6\u5C06\u65E0\u6CD5\u7EED\u671F\uFF08\u76F4\u63A5\u767B\u51FA\u8BED\u4E49\uFF09"),!1;let u=await n.onRefresh();return u&&n.onAuth?.(d),u}};return d}function yr(n={}){let e=n.messages??{},t=n.locale??Object.keys(e)[0]??"default",o=new N;return{get locale(){return t},setLocale(r){t=r,o.next(r)},locale$:o.asObservable(),t(r,s){let a=e[t]?.[r]??r;if(s)for(let[l,d]of Object.entries(s))a=a.replaceAll(`{${l}}`,String(d));return a}}}function xr(n={}){let e=n.WebSocketCtor??globalThis.WebSocket,t=null,o=!1,r=0,s=null,i=new Set,a=new Set,l=new N,d=new ae(!1),u=n.autoReconnect?typeof n.autoReconnect=="object"?n.autoReconnect:{}:null,c=x=>{v=Date.now();let M=x.data;if(typeof x.data=="string")try{M=JSON.parse(x.data)}catch{}for(let D of[...i])D(M);l.next(M)},f=x=>{if(b.current!==x){b.current=x;for(let M of[...a])M(x);d.next(x)}},b={current:!1},h=n.ping,m=null,v=0,C=()=>{m&&(clearInterval(m),m=null)},E=()=>{if(!h||!t)return;C();let x=h.intervalMs??15e3,M=h.timeoutMs??35e3;v=Date.now(),m=setInterval(()=>{if(!t){C();return}if(Date.now()-v>M){try{t.close()}catch{}return}if(t.readyState!==1){try{t.close()}catch{}return}try{t.send(JSON.stringify(h.payload?.()??{type:"ping"}))}catch{}},x)},k=()=>{if(!u||o||s)return;let x=u.baseMs??1e3,M=u.maxMs??3e4,D=Math.min(x*2**r,M);r++,s=setTimeout(()=>{s=null,y(g)},D)},g=n.url??"",p=[],y=x=>{e&&(g=x,t=new e(x),t.onmessage=c,t.onopen=()=>{for(r=0,f(!0),E();p.length>0;)t?.send(p.shift())},t.onerror=()=>{try{t?.close()}catch{}},t.onclose=()=>{C(),t=null,f(!1),k()})};return{connect(x){o=!1,s&&(clearTimeout(s),s=null),r=0,C(),t?.close(),t=null,f(!1),y(x??n.url??"")},get isConnected(){return b.current},send(x){let M=typeof x=="string"?x:JSON.stringify(x);t?.readyState===1?t.send(M):p.push(M)},onMessage(x){return i.add(x),()=>{i.delete(x)}},onStatusChange(x){return a.add(x),x(b.current),()=>{a.delete(x)}},messages$:l.asObservable(),status$:d.asObservable(),close(){o=!0,s&&(clearTimeout(s),s=null),C(),t?.close(),t=null,f(!1)}}}function lo(n){return new Promise((e,t)=>{let o=[];n.subscribe({next:r=>o.push(r),error:t,complete:()=>e(o)})})}function Cr(n,e,t,o,r,s){let i=r??new Map,a=o??ee(),l=xe(n,e,t??{},i,a,s);return new ReadableStream({start(d){l.subscribe({next:u=>d.enqueue(u),error:u=>d.error(u),complete:()=>d.close()})}})}function ot(n,e,t,o,r){let i=me(n,e,t,o??new Map,r);return new ReadableStream({start(a){i.subscribe({next:l=>a.enqueue(l),error:l=>a.error(l),complete:()=>a.close()})}})}async function kr(n,e,t){let o=t??ee(),r=await lo(me(n,e,o)),{commandToHtml:s}=await Promise.resolve().then(()=>(ao(),io)),a=new ReadableStream({start(d){for(let u of r)d.enqueue(u);d.close()}}).pipeThrough(s()).getReader(),l="";for(;;){let{value:d,done:u}=await a.read();if(u)break;l+=d}return l}function uo(n,e="info",t=3e3){let o=document.createElement("div");o.className="wf-toast-host",o.style.cssText="position:fixed;top:16px;right:16px;z-index:var(--wf-z-toast,9999)",document.body.appendChild(o);let r=ee(),s=new de(o,document,r),i={render:async()=>{},onUnmount:()=>{},data:{get:async()=>{},set:()=>{},has:()=>!1}};ot(X(()=>()=>X("div",{class:`wf-toast wf-toast--${e}`},X("span",{class:"wf-toast-msg"},n)),{}),i,r).pipeTo(new WritableStream({write(l){s.apply(l)}})).then(()=>{I(l=>(l.next(1),l.complete(),()=>{})).pipe(yt(t),fe(()=>{s.dispose(),o.remove()})).subscribe({next:()=>{}})})}function Er(n){return Object.assign(n,{toast:uo})}function Sr(n,e,t){let o=new AbortController,r=t?.signal;r&&(r.aborted?o.abort():r.addEventListener("abort",()=>o.abort(),{once:!0}));let s=t?.traceId??Vr(),i=t?.record!==!1,a=[],l=(async()=>{let d;try{d=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json","X-Trace-Id":s,Accept:"text/event-stream",...t?.headers},body:JSON.stringify(e),signal:o.signal})}catch(u){if(o.signal.aborted)return;t?.onError?.({code:"provider_error",message:u instanceof Error?u.message:String(u)});return}if(!d.ok){t?.onError?.({code:Mr(d.status),message:`HTTP ${d.status} ${d.statusText}`});return}try{for await(let{name:u,data:c}of Or(d.body)){if(o.signal.aborted)return;Nr(a,{name:u,data:c},i),Rr(u,c,t??{})}}catch(u){if(o.signal.aborted)return;t?.onError?.({code:"provider_error",message:u instanceof Error?u.message:String(u)})}})();return{abort:()=>o.abort(),done:l,traceId:s,events:a}}function Rr(n,e,t){switch(n){case"wf:token":return t.onToken?.(e.text);case"wf:tool_call":return t.onToolCall?.(e);case"wf:tool_result":return t.onToolResult?.(e);case"wf:tool_progress":return t.onToolProgress?.(e);case"wf:step":return t.onStep?.(e);case"wf:approval_request":return t.onApproval?.(e);case"wf:usage":return t.onUsage?.(e);case"wf:done":return t.onDone?.(e);case"wf:error":return t.onError?.(e);default:return t.onEvent?.(n,e)}}async function*Or(n){let e=n.getReader(),t=new TextDecoder,o="";try{for(;;){let{done:r,value:s}=await e.read();if(r)break;o+=t.decode(s,{stream:!0});let i=o.split(`
6
3
 
7
- `);o=i.pop()??"";for(let a of i){let l="message",u="";for(let d of a.split(`
8
- `))d.startsWith("event: ")?l=d.slice(7):d.startsWith("data: ")&&(u+=d.slice(6));if(u)try{yield{name:l,data:JSON.parse(u)}}catch{}}}}finally{e.releaseLock()}}function On(n,e,t){t&&(n.length>=500&&n.shift(),n.push(e))}function Hn(n){return n===401||n===403?"auth_failed":n===429?"rate_limited":n>=500?"provider_error":"invalid_request"}function Dn(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`trace-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}export{j as CommandApplier,Be as Fragment,Pe as UIRouter,An as aiStream,Nn as api,Rn as auth,Ae as createClientBrowser,_ as createComponentRegistry,Me as createSignal,Ye as createStore,me as diffStream,$ as h,In as i18n,Pn as injectCommands,Re as jsx,_t as jsxDEV,Bt as jsxs,G as renderToStream,Ft as toast,Sn as uiServe,Vn as ws};
4
+ `);o=i.pop()??"";for(let a of i){let l="message",d="";for(let u of a.split(`
5
+ `))u.startsWith("event: ")?l=u.slice(7):u.startsWith("data: ")&&(d+=u.slice(6));if(d)try{yield{name:l,data:JSON.parse(d)}}catch{}}}}finally{e.releaseLock()}}function Nr(n,e,t){t&&(n.length>=500&&n.shift(),n.push(e))}function Mr(n){return n===401||n===403?"auth_failed":n===429?"rate_limited":n>=500?"provider_error":"invalid_request"}function Vr(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`trace-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}export{de as CommandApplier,Gt as Fragment,ft as UIRouter,Sr as aiStream,vr as api,hr as auth,lo as collectCommands,pt as createClientBrowser,ee as createComponentRegistry,Bt as createRenderScheduler,Mt as createSegment,Et as createSignal,sn as createStore,Co as derived,Cr as diffStream,xe as diffV2,K as disposeSegment,X as h,yr as i18n,Er as injectCommands,lt as jsx,go as jsxDEV,mo as jsxs,L as keyOf,Q as keyedId,ot as renderToStream,ot as renderToStreamV2,me as renderV2,uo as toast,no as uiServe,no as uiServeV2,kr as v2ToHtml,xr as ws};
@@ -1 +1 @@
1
- function o(e){let n=e?.key;return n==null?null:typeof n=="string"?n:typeof n=="number"?String(n):(console.warn(`[vdom] key \u5FC5\u987B\u662F string|number\u2014\u2014\u5F53\u524D ${typeof n}\uFF08\u5FFD\u7565\u2014\u2014\u4F4D\u7F6E\u8EAB\u4EFD\uFF09`),null)}function r(e){let n={...e??{}};return delete n.key,n}function t(e,n,s){return{type:e,props:r(n),key:s??o(n)??null}}var l=t,p=t;var i=Symbol("vdom-fragment");export{i as Fragment,t as jsx,p as jsxDEV,l as jsxs};
1
+ function t(n){return n==null?null:typeof n=="string"?n:typeof n=="number"?String(n):(console.warn(`[vdom] key \u5FC5\u987B\u662F string|number\u2014\u2014\u5F53\u524D ${typeof n}\uFF08\u5FFD\u7565\u2014\u2014\u4F4D\u7F6E\u8EAB\u4EFD\uFF09`),null)}function o(n){return t(n?.key)}function i(n){let e={...n??{}};return delete e.key,e}function r(n,e,l){return{type:n,props:i(e),key:t(l)??o(e)}}var p=r,u=r;var s=Symbol("vdom-fragment");export{s as Fragment,r as jsx,u as jsxDEV,p as jsxs};
@@ -4,6 +4,14 @@
4
4
  * 设计:fetch 封装——JSON 序列化/解析——超时(AbortController)——
5
5
  * ApiError(status)——onError 钩子——经注入(零全局直接访问——
6
6
  * 测试 mock fetch)。
7
+ *
8
+ * W2(VDOM-STREAM-FIX-PLAN)——401 单飞刷新流化(G13 修复的窗口堵死):
9
+ * - `refreshTrigger$`(Subject):401 且 token 未变 → 触发事件
10
+ * - `exhaustMap`:单飞刷新(刷新中后续触发被丢弃——**并发 401 只刷一次**)
11
+ * ——原 G13 快照比对堵不住「同拍双 401 在刷新完成前都走 onUnauthorized
12
+ * 分支」的窗口(两者 tokenNow 都未变);单飞 = 结构上不可能双刷
13
+ * - `refreshDone$`:刷新结果广播(true=成功可重试)——等待者 take(1)
14
+ * - 旋转 token 双刷新竞态(走查实证):exhaustMap 内建 single-flight 根治
7
15
  */
8
16
  export interface ApiOptions {
9
17
  /** 基础路径(前缀拼接) */
@@ -1,3 +1,4 @@
1
+ import { type Observable } from '../observable/index.ts';
1
2
  /**
2
3
  * vdom middlewares — auth/i18n(ctx.auth 令牌管理 + ctx.i18n 国际化)
3
4
  *
@@ -20,6 +21,9 @@ export interface AuthClient {
20
21
  user: unknown;
21
22
  /** 是否已登录(token 存在) */
22
23
  isLoggedIn: boolean;
24
+ /** **token 值流(波次 7——login/setToken/logout 触发——BehaviorSubject
25
+ * 语义——订阅即收当前 token——应用层监听登录态变化)** */
26
+ token$: Observable<string | null>;
23
27
  /** 登录(token/user/refreshToken 持久化——onAuth 钩子接线) */
24
28
  login(token: string, user: unknown, refreshToken?: string | null): void;
25
29
  /** 更新用户信息(原地写——userKey 持久化) */
@@ -56,6 +60,9 @@ export interface I18nOptions {
56
60
  export interface I18nState {
57
61
  locale: string;
58
62
  setLocale(locale: string): void;
63
+ /** **locale 值流(波次 7——setLocale 事件源——Subject 语义——无自动
64
+ * 渲染纪律保持:订阅方自行决定渲染时机)** */
65
+ locale$: Observable<string>;
59
66
  /** 取文本({name} 插值——缺失 key 返回 key 本身——不静默) */
60
67
  t(key: string, params?: Record<string, unknown>): string;
61
68
  /** 组件文案面(ui-dom 兼容——SheetGrid/SlideCanvas 读组件级文案——
@@ -1,19 +1,53 @@
1
+ import { type Observable } from '../observable/index.ts';
1
2
  /**
2
3
  * vdom middlewares — ws(WebSocket 客户端——ctx.ws 注入面)
3
4
  *
4
5
  * 设计:WebSocket 构造经 opts 注入(jsdom 无 WS——测试 mock——
5
6
  * 零全局直接访问);onMessage 订阅(返回退订);unmount 关闭。
7
+ *
8
+ * 可靠性面(2026-08——A2 消息断线补拉的地基):
9
+ * - autoReconnect:断线自动重连(指数退避 1s/2s/4s...封顶 maxMs——
10
+ * onopen 重置计数)——**close() 手动关闭不重连**(主动语义)
11
+ * - onStatusChange:状态翻转通知(onopen/onclose 触发——订阅即回放当前
12
+ * 态——应用层感知「重连成功 → 补拉数据」)
13
+ * - **心跳看门狗(2026-08——网络硬断静默挂起根因歼灭)**:浏览器对
14
+ * 网络断(WiFi 闪断/离线仿真)**不触发 close/error**——socket 静默
15
+ * 挂起——onclose 永不执行 → 重连调度永不启动——断线期间消息永远丢失
16
+ * (chat 断线补拉失效实证——CDP setOffline 场景)。修复:onopen 后
17
+ * 周期发 ping,任何入站(pong/消息)刷新活性;超时未活性 → 强制
18
+ * close → onclose → setConnected(false) + 重连调度(应用层感知断线
19
+ * → 补拉)。此外 onerror 也走 close 路径(error→onclose 链)。
6
20
  */
21
+ export interface WsReconnectOptions {
22
+ /** 重连基延迟(ms——指数退避起点——默认 1000) */
23
+ baseMs?: number;
24
+ /** 重连间隔上限(ms——默认 30000) */
25
+ maxMs?: number;
26
+ }
27
+ export interface WsPingOptions {
28
+ /** 心跳间隔(ms——默认 15000) */
29
+ intervalMs?: number;
30
+ /** 活性超时(ms——超过无入站即判死——默认 35000) */
31
+ timeoutMs?: number;
32
+ /** 心跳载荷(默认 { type: 'ping' }——标准 WS 协议) */
33
+ payload?: () => unknown;
34
+ }
7
35
  export interface WsOptions {
8
36
  /** WebSocket 构造器(注入——测试 mock——默认全局 WebSocket) */
9
37
  WebSocketCtor?: new (url: string) => WsLike;
10
38
  /** 默认连接 URL(未传时 connect(url) 必需) */
11
39
  url?: string;
40
+ /** 断线自动重连(指数退避——默认关——显式开启不突改既有行为) */
41
+ autoReconnect?: boolean | WsReconnectOptions;
42
+ /** 心跳看门狗(网络硬断静默挂起检测——默认关) */
43
+ ping?: WsPingOptions;
12
44
  }
13
45
  /** 最小 WS 形状(兼容浏览器 WebSocket 与测试 mock) */
14
46
  export interface WsLike {
15
47
  send(data: string): void;
16
48
  close(): void;
49
+ /** 连接状态(浏览器 WebSocket 标准——CONNECTING=0 OPEN=1——Mock 需实现) */
50
+ readyState: number;
17
51
  onmessage: ((e: {
18
52
  data: unknown;
19
53
  }) => void) | null;
@@ -30,7 +64,13 @@ export interface WsClient {
30
64
  send(data: unknown): void;
31
65
  /** 消息订阅(返回退订) */
32
66
  onMessage(cb: (data: unknown) => void): () => void;
33
- /** 关闭 */
67
+ /** 状态翻转订阅(订阅时回放当前态——onopen/onclose 触发——返回退订) */
68
+ onStatusChange(cb: (connected: boolean) => void): () => void;
69
+ /** **消息流视图(波次 7——onMessage 同源——可 pipe/takeUntil)** */
70
+ messages$: Observable<unknown>;
71
+ /** **状态流视图(波次 7——BehaviorSubject 语义——订阅即回放当前态)** */
72
+ status$: Observable<boolean>;
73
+ /** 关闭(主动——不触发自动重连) */
34
74
  close(): void;
35
75
  }
36
76
  /** 创建 ws 客户端(每 serve 实例独立) */
@@ -0,0 +1,13 @@
1
+ /**
2
+ * vdom observable — 统一出口
3
+ *
4
+ * 自研零依赖 Observable(2027-08——weifuwu/client 数据流地基):
5
+ * - 语义规格:types.ts(先文档后实现——契约测试锁定)
6
+ * - 核心:observable.ts(class/create/pipe)
7
+ * - 源:sources.ts(Subject/BehaviorSubject/fromPromise/fromEventPattern)
8
+ * - 算子:operators.ts(7 个——场景驱动裁剪)
9
+ */
10
+ export { Observable, create } from './observable.ts';
11
+ export type { Observer, PartialObserver, Subscription, SubscribeFn, OperatorFn, UnsubscribeFn } from './observable.ts';
12
+ export { Subject, BehaviorSubject, fromPromise, fromEventPattern } from './sources.ts';
13
+ export { map, filter, tap, toArray, delay, scan, switchMap, mergeMap, exhaustMap, takeUntil, shareReplay, startWith, take, finalize, distinctUntilChanged, debounceTime, throttleTime, combineLatest, merge } from './operators.ts';
@@ -0,0 +1,26 @@
1
+ /**
2
+ * vdom observable — Observable 核心类 + create + pipe
3
+ *
4
+ * 实现契约(与 types.ts 语义规格一一对应):
5
+ * - subscribe 规范化 observer(缺省 noop)——terminated 后发射忽略
6
+ * - error/complete:terminated → teardown 自动执行(一次)
7
+ * - unsubscribe:幂等(重复调用无副作用)——teardown 只执行一次
8
+ * - next 期间安全:广播快照迭代(删除不中断)——见 Subject(sources.ts)
9
+ */
10
+ import type { PartialObserver, Subscription, SubscribeFn } from './types.ts';
11
+ export type { Observer, PartialObserver, Subscription, SubscribeFn, UnsubscribeFn } from './types.ts';
12
+ /** 算子:Observable → Observable(此处定义——避免 types 循环依赖) */
13
+ export type OperatorFn<T, R> = (source: Observable<T>) => Observable<R>;
14
+ export declare class Observable<T> {
15
+ /** 订阅函数(冷源惰性——订阅才执行) */
16
+ private readonly _subscribe;
17
+ constructor(subscribe: SubscribeFn<T>);
18
+ subscribe(partial?: PartialObserver<T>): Subscription;
19
+ pipe<A>(op1: OperatorFn<T, A>): Observable<A>;
20
+ pipe<A, B>(op1: OperatorFn<T, A>, op2: OperatorFn<A, B>): Observable<B>;
21
+ pipe<A, B, C>(op1: OperatorFn<T, A>, op2: OperatorFn<A, B>, op3: OperatorFn<B, C>): Observable<C>;
22
+ pipe<A, B, C, D>(op1: OperatorFn<T, A>, op2: OperatorFn<A, B>, op3: OperatorFn<B, C>, op4: OperatorFn<C, D>): Observable<D>;
23
+ pipe<A, B, C, D, E>(op1: OperatorFn<T, A>, op2: OperatorFn<A, B>, op3: OperatorFn<B, C>, op4: OperatorFn<C, D>, op5: OperatorFn<D, E>): Observable<E>;
24
+ }
25
+ /** 源构造(裸冷源)——订阅函数直接定义 */
26
+ export declare function create<T>(subscribe: SubscribeFn<T>): Observable<T>;