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.
- package/README.md +111 -135
- package/dist/client/components/ActionSheet/ActionSheet.d.ts +1 -1
- package/dist/client/components/AiChat/AiChat.d.ts +3 -4
- package/dist/client/components/ChatInput/ChatInput.d.ts +5 -0
- package/dist/client/components/CitationCard/CitationCard.d.ts +1 -1
- package/dist/client/components/Command/Command.d.ts +1 -1
- package/dist/client/components/ContextMenu/ContextMenu.d.ts +1 -1
- package/dist/client/components/DatePicker/DatePicker.d.ts +1 -1
- package/dist/client/components/Dropdown/Dropdown.d.ts +1 -1
- package/dist/client/components/Editor/model/html.d.ts +10 -0
- package/dist/client/components/ImageCropper/ImageCropper.d.ts +6 -2
- package/dist/client/components/Menu/Menu.d.ts +1 -1
- package/dist/client/components/NavMenu/NavMenu.d.ts +1 -1
- package/dist/client/components/Popconfirm/Popconfirm.d.ts +1 -1
- package/dist/client/components/SlideCanvas/SlideCanvas.d.ts +1 -1
- package/dist/client/components/Tour/Tour.d.ts +1 -1
- package/dist/client/components/TreeSelect/TreeSelect.d.ts +1 -1
- package/dist/client/components/index.js +41 -41
- package/dist/client/components/style.css +298 -644
- package/dist/client/layout/weifuwu-layout.css +286 -640
- package/dist/client/vdom/browser/Browser.d.ts +2 -0
- package/dist/client/vdom/commands.d.ts +4 -1
- package/dist/client/vdom/context/UIContext.d.ts +8 -0
- package/dist/client/vdom/core/diff/attrs.d.ts +10 -2
- package/dist/client/vdom/core/field/attributes.d.ts +12 -0
- package/dist/client/vdom/core/field/events.d.ts +8 -0
- package/dist/client/vdom/core/field/input-sync.d.ts +14 -0
- package/dist/client/vdom/core/field/key.d.ts +3 -0
- package/dist/client/vdom/core/field/props.d.ts +13 -1
- package/dist/client/vdom/core/field/ref.d.ts +6 -0
- package/dist/client/vdom/core/field/style.d.ts +7 -1
- package/dist/client/vdom/core/node/component.d.ts +3 -4
- package/dist/client/vdom/core/node/native.d.ts +6 -1
- package/dist/client/vdom/core/patch/index.d.ts +24 -1
- package/dist/client/vdom/core/patch/processors.d.ts +8 -1
- package/dist/client/vdom/core/protocol.d.ts +45 -0
- package/dist/client/vdom/core/router.d.ts +7 -0
- package/dist/client/vdom/core/ssr/absorb.d.ts +31 -4
- package/dist/client/vdom/core/transform/index.d.ts +6 -6
- package/dist/client/vdom/core/v2/cycle.d.ts +54 -0
- package/dist/client/vdom/core/v2/diff.d.ts +80 -0
- package/dist/client/vdom/core/v2/integrate.d.ts +24 -0
- package/dist/client/vdom/core/v2/render.d.ts +28 -0
- package/dist/client/vdom/core/v2/schedule.d.ts +33 -0
- package/dist/client/vdom/core/v2/serve.d.ts +4 -0
- package/dist/client/vdom/core/v2/spy.d.ts +21 -0
- package/dist/client/vdom/core/v2/ssr.d.ts +14 -0
- package/dist/client/vdom/core/vnode.d.ts +9 -6
- package/dist/client/vdom/dev/error-counter.d.ts +27 -0
- package/dist/client/vdom/dev/render-health.d.ts +60 -0
- package/dist/client/vdom/hooks/chat.d.ts +32 -5
- package/dist/client/vdom/hooks/drag-media.d.ts +3 -1
- package/dist/client/vdom/hooks/env.d.ts +32 -0
- package/dist/client/vdom/hooks/popup-manager.d.ts +21 -0
- package/dist/client/vdom/hooks/popup.d.ts +4 -1
- package/dist/client/vdom/hooks/stable.d.ts +4 -0
- package/dist/client/vdom/hooks/use-observable.d.ts +13 -0
- package/dist/client/vdom/index.d.ts +14 -6
- package/dist/client/vdom/index.js +4 -7
- package/dist/client/vdom/jsx-runtime.js +1 -1
- package/dist/client/vdom/middlewares/api.d.ts +8 -0
- package/dist/client/vdom/middlewares/auth-i18n.d.ts +7 -0
- package/dist/client/vdom/middlewares/ws.d.ts +41 -1
- package/dist/client/vdom/observable/index.d.ts +13 -0
- package/dist/client/vdom/observable/observable.d.ts +26 -0
- package/dist/client/vdom/observable/operators.d.ts +76 -0
- package/dist/client/vdom/observable/sources.d.ts +54 -0
- package/dist/client/vdom/observable/types.d.ts +45 -0
- package/dist/client/vdom/store.d.ts +17 -2
- package/dist/client/vdom/testing.js +2 -2
- package/dist/server/ai/agent.d.ts +18 -0
- package/dist/server/ai/client.d.ts +14 -2
- package/dist/server/ai/contracts.d.ts +2 -2
- package/dist/server/ai/sse.d.ts +6 -0
- package/dist/server/core/collect.d.ts +31 -0
- package/dist/server/core/error-counter.d.ts +11 -0
- package/dist/server/core/hub.d.ts +2 -0
- package/dist/server/core/router.d.ts +12 -9
- package/dist/server/db/contracts.d.ts +24 -0
- package/dist/server/db/memory-redis.d.ts +3 -4
- package/dist/server/db/memory-sql.d.ts +20 -4
- package/dist/server/db/postgres-server.d.ts +2 -0
- package/dist/server/db/query.d.ts +21 -0
- package/dist/server/db/redis-server.d.ts +4 -2
- package/dist/server/db/sql-parser.d.ts +2 -1
- package/dist/server/email/index.d.ts +2 -0
- package/dist/server/index.d.ts +4 -1
- package/dist/server/index.js +3927 -1982
- package/dist/server/messager/index.d.ts +21 -2
- package/dist/server/middleware/compress.d.ts +25 -0
- package/dist/server/ui/index.d.ts +8 -1
- package/dist/server/user/index.d.ts +4 -0
- package/dist/shared/router/chain.d.ts +9 -0
- package/dist/shared/router/context.d.ts +35 -0
- package/dist/shared/router/ctx-fields.d.ts +20 -0
- package/dist/shared/router/pipeline.d.ts +70 -0
- package/dist/shared/router/trie.d.ts +11 -3
- package/dist/shared/router/types.d.ts +23 -0
- package/docs/style-guide.md +44 -41
- package/package.json +13 -10
- package/content/apps/admin.md +0 -55
- package/content/apps/agent-platform.md +0 -35
- package/content/apps/auth.md +0 -49
- package/content/apps/multi.md +0 -44
- package/content/apps/todo.md +0 -51
- package/content/backend/ai.md +0 -28
- package/content/backend/auth.md +0 -20
- package/content/backend/email.md +0 -23
- package/content/backend/graphql.md +0 -23
- package/content/backend/http.md +0 -23
- package/content/backend/limit.md +0 -23
- package/content/backend/middleware.md +0 -17
- package/content/backend/queue.md +0 -23
- package/content/backend/redis.md +0 -26
- package/content/backend/router.md +0 -23
- package/content/backend/schedule.md +0 -23
- package/content/backend/sql.md +0 -27
- package/content/backend/sse.md +0 -26
- package/content/backend/ws.md +0 -26
- package/content/capabilities/app-node.md +0 -21
- package/content/capabilities/data.md +0 -21
- package/content/capabilities/events.md +0 -21
- package/content/capabilities/hooks.md +0 -22
- package/content/capabilities/i18n.md +0 -21
- package/content/capabilities/popup.md +0 -21
- package/content/capabilities/render-only.md +0 -23
- package/content/capabilities/router.md +0 -22
- package/content/capabilities/self-id.md +0 -21
- package/content/capabilities/store.md +0 -21
- package/content/capabilities/theme.md +0 -21
- package/content/capabilities/two-phase.md +0 -21
- package/content/components/accordion.md +0 -50
- package/content/components/actionsheet.md +0 -46
- package/content/components/affix.md +0 -51
- package/content/components/aichat.md +0 -57
- package/content/components/alert.md +0 -52
- package/content/components/alertgroup.md +0 -45
- package/content/components/anchor.md +0 -52
- package/content/components/app.md +0 -37
- package/content/components/approvalcard.md +0 -56
- package/content/components/appshell.md +0 -50
- package/content/components/aspectratio.md +0 -47
- package/content/components/authpage.md +0 -61
- package/content/components/autocomplete-v2.md +0 -40
- package/content/components/autocomplete.md +0 -56
- package/content/components/avatar.md +0 -51
- package/content/components/avatargroup.md +0 -47
- package/content/components/backtop.md +0 -53
- package/content/components/badge.md +0 -55
- package/content/components/breadcrumb.md +0 -49
- package/content/components/button.md +0 -63
- package/content/components/calendar-v2.md +0 -40
- package/content/components/calendar.md +0 -50
- package/content/components/card.md +0 -58
- package/content/components/carousel.md +0 -52
- package/content/components/cascader-v2.md +0 -39
- package/content/components/cascader.md +0 -54
- package/content/components/chart.md +0 -53
- package/content/components/chatinput.md +0 -63
- package/content/components/checkbox.md +0 -51
- package/content/components/checkboxgroup.md +0 -52
- package/content/components/citationcard.md +0 -48
- package/content/components/codeblock.md +0 -48
- package/content/components/codeeditor.md +0 -47
- package/content/components/collapse.md +0 -49
- package/content/components/colorpicker.md +0 -50
- package/content/components/command.md +0 -50
- package/content/components/confirm.md +0 -57
- package/content/components/contextmenu.md +0 -48
- package/content/components/copybutton.md +0 -51
- package/content/components/datepicker.md +0 -52
- package/content/components/descriptions-v2.md +0 -39
- package/content/components/descriptions.md +0 -52
- package/content/components/diffview-v2.md +0 -39
- package/content/components/diffview.md +0 -50
- package/content/components/divider.md +0 -48
- package/content/components/drawer.md +0 -55
- package/content/components/dropdown.md +0 -53
- package/content/components/editor.md +0 -49
- package/content/components/emptystate.md +0 -51
- package/content/components/exportcsv.md +0 -38
- package/content/components/field.md +0 -54
- package/content/components/filepreview-office.md +0 -37
- package/content/components/filepreview.md +0 -49
- package/content/components/filetree.md +0 -56
- package/content/components/fileupload-v2.md +0 -39
- package/content/components/fileupload.md +0 -57
- package/content/components/floatbutton.md +0 -52
- package/content/components/form-v2.md +0 -41
- package/content/components/form.md +0 -60
- package/content/components/grid.md +0 -51
- package/content/components/highlight-v2.md +0 -39
- package/content/components/highlight.md +0 -46
- package/content/components/hovercard.md +0 -51
- package/content/components/icon.md +0 -50
- package/content/components/imagecropper.md +0 -45
- package/content/components/img.md +0 -56
- package/content/components/infinitescroll-v2.md +0 -40
- package/content/components/infinitescroll.md +0 -54
- package/content/components/input.md +0 -65
- package/content/components/inputnumber.md +0 -58
- package/content/components/inview.md +0 -56
- package/content/components/jsonschemaform.md +0 -53
- package/content/components/jsonviewer-v2.md +0 -39
- package/content/components/jsonviewer.md +0 -49
- package/content/components/kanban.md +0 -46
- package/content/components/label.md +0 -48
- package/content/components/layout.md +0 -54
- package/content/components/layoutcontent.md +0 -43
- package/content/components/layoutheader.md +0 -43
- package/content/components/layoutsider.md +0 -43
- package/content/components/link.md +0 -52
- package/content/components/list.md +0 -44
- package/content/components/loading.md +0 -45
- package/content/components/logviewer-v2.md +0 -39
- package/content/components/logviewer.md +0 -53
- package/content/components/markdown.md +0 -51
- package/content/components/markdowneditor.md +0 -47
- package/content/components/math.md +0 -42
- package/content/components/mentions-v2.md +0 -39
- package/content/components/mentions.md +0 -52
- package/content/components/menu.md +0 -56
- package/content/components/menubar.md +0 -44
- package/content/components/messagebubble.md +0 -50
- package/content/components/modal.md +0 -59
- package/content/components/navmenu.md +0 -47
- package/content/components/notification.md +0 -51
- package/content/components/pageheader.md +0 -53
- package/content/components/pagination.md +0 -49
- package/content/components/paragraph.md +0 -45
- package/content/components/passwordinput.md +0 -57
- package/content/components/pininput-v2.md +0 -39
- package/content/components/pininput.md +0 -50
- package/content/components/pipeline.md +0 -49
- package/content/components/popconfirm.md +0 -58
- package/content/components/popover.md +0 -61
- package/content/components/progressbar.md +0 -50
- package/content/components/prompttemplate.md +0 -49
- package/content/components/qrcode.md +0 -50
- package/content/components/radiogroup.md +0 -53
- package/content/components/rate.md +0 -53
- package/content/components/reasoningblock.md +0 -47
- package/content/components/relationgraph.md +0 -52
- package/content/components/resizable.md +0 -53
- package/content/components/result.md +0 -49
- package/content/components/scrollbar.md +0 -49
- package/content/components/searchinput.md +0 -51
- package/content/components/segmentedcontrol.md +0 -59
- package/content/components/select-searchable.md +0 -47
- package/content/components/select.md +0 -66
- package/content/components/sessionlist.md +0 -52
- package/content/components/sheetgrid.md +0 -44
- package/content/components/skeleton.md +0 -55
- package/content/components/slidecanvas.md +0 -44
- package/content/components/slider.md +0 -62
- package/content/components/sortablelist.md +0 -39
- package/content/components/space.md +0 -52
- package/content/components/sparkline.md +0 -52
- package/content/components/statcard-countdown.md +0 -39
- package/content/components/statcard.md +0 -56
- package/content/components/steps.md +0 -48
- package/content/components/switch.md +0 -50
- package/content/components/tabbar.md +0 -45
- package/content/components/table-v2.md +0 -40
- package/content/components/table.md +0 -66
- package/content/components/tabs.md +0 -56
- package/content/components/tag.md +0 -51
- package/content/components/tagsinput-v2.md +0 -39
- package/content/components/tagsinput.md +0 -54
- package/content/components/text.md +0 -45
- package/content/components/textarea.md +0 -57
- package/content/components/themeswitch.md +0 -69
- package/content/components/timeline.md +0 -50
- package/content/components/title.md +0 -45
- package/content/components/toast.md +0 -52
- package/content/components/toggle-togglegroup.md +0 -52
- package/content/components/togglegroup.md +0 -47
- package/content/components/toolcallcard.md +0 -51
- package/content/components/tooltip.md +0 -50
- package/content/components/tour.md +0 -50
- package/content/components/transfer.md +0 -52
- package/content/components/tree-v2.md +0 -39
- package/content/components/tree.md +0 -59
- package/content/components/treeselect.md +0 -54
- package/content/components/typography.md +0 -51
- package/content/components/videoplayer.md +0 -52
- package/content/components/virtuallist.md +0 -52
- package/content/components/virtualtable-v2.md +0 -39
- package/content/components/virtualtable.md +0 -55
- package/content/components/watermark.md +0 -53
- package/content/components/wave.md +0 -43
- package/content/guides/ai-chat-family.md +0 -24
- package/content/guides/choose.md +0 -67
- package/content/guides/component-model.md +0 -32
- package/content/guides/component-standards.md +0 -123
- package/content/guides/components-guide.md +0 -813
- package/content/guides/custom-component.md +0 -321
- package/content/guides/data-guide.md +0 -281
- package/content/guides/file-preview-family.md +0 -18
- package/content/guides/frontend.md +0 -968
- package/content/guides/layout-choice.md +0 -64
- package/content/guides/layout-guide.md +0 -241
- package/content/guides/middleware.md +0 -459
- package/content/guides/mobile-guide.md +0 -105
- package/content/guides/page-building.md +0 -98
- package/content/guides/production.md +0 -37
- package/content/guides/quality.md +0 -60
- package/content/guides/realtime-guide.md +0 -296
- package/content/guides/render-only.md +0 -44
- package/content/guides/saas-guide.md +0 -253
- package/content/guides/server-guide.md +0 -359
- package/content/guides/start.md +0 -41
- package/content/guides/styling.md +0 -154
- package/content/guides/ui-dom-guide.md +0 -157
- package/content/index.json +0 -4344
- package/content/index.md +0 -181
- package/content/layout/align.md +0 -20
- package/content/layout/anchor.md +0 -19
- package/content/layout/app-shell.md +0 -23
- package/content/layout/border.md +0 -20
- package/content/layout/center.md +0 -19
- package/content/layout/cluster.md +0 -19
- package/content/layout/container.md +0 -19
- package/content/layout/fill.md +0 -19
- package/content/layout/grid.md +0 -19
- package/content/layout/hidden.md +0 -22
- package/content/layout/layer.md +0 -19
- package/content/layout/position.md +0 -22
- package/content/layout/row.md +0 -23
- package/content/layout/safe-area.md +0 -20
- package/content/layout/scroll.md +0 -21
- package/content/layout/spacing.md +0 -22
- package/content/layout/split.md +0 -19
- package/content/layout/stack.md +0 -19
- package/content/layout/surface.md +0 -23
- package/content/layout/text.md +0 -22
- package/content/patterns/app-shell.md +0 -34
- package/content/patterns/dashboard.md +0 -36
- package/content/patterns/data-screen.md +0 -30
- package/content/patterns/detail-page.md +0 -31
- package/content/patterns/docs.md +0 -34
- package/content/patterns/focus-task.md +0 -34
- package/content/patterns/landing.md +0 -35
- package/content/patterns/list-page.md +0 -32
- package/content/patterns/mobile.md +0 -31
- package/content/patterns/settings-page.md +0 -33
- package/content/patterns/workspace.md +0 -32
- package/dist/cli/content-sync.test.d.ts +0 -1
- package/dist/cli/docs-cli.test.d.ts +0 -1
- package/dist/cli/docs.d.ts +0 -2
- package/dist/cli/docs.mjs +0 -10961
- package/dist/client/vdom/core/build.d.ts +0 -36
- package/dist/client/vdom/core/diff/children.d.ts +0 -29
- package/dist/client/vdom/core/diff/index.d.ts +0 -22
- package/dist/client/vdom/core/diff/output.d.ts +0 -30
- package/dist/client/vdom/core/diff/same.d.ts +0 -22
- package/dist/client/vdom/core/serve.d.ts +0 -75
- package/dist/client/vdom/core/ssr/index.d.ts +0 -25
- package/examples/apps/admin/README.md +0 -23
- package/examples/apps/admin/api.ts +0 -27
- package/examples/apps/admin/app.tsx +0 -144
- package/examples/apps/admin/main.tsx +0 -8
- package/examples/apps/admin/server.ts +0 -37
- package/examples/apps/auth/README.md +0 -23
- package/examples/apps/auth/api.ts +0 -49
- package/examples/apps/auth/app.tsx +0 -137
- package/examples/apps/auth/main.tsx +0 -8
- package/examples/apps/auth/server.ts +0 -37
- package/examples/apps/multi/README.md +0 -23
- package/examples/apps/multi/app.tsx +0 -83
- package/examples/apps/multi/main.tsx +0 -8
- package/examples/apps/multi/server.ts +0 -33
- package/examples/apps/todo/README.md +0 -23
- package/examples/apps/todo/api.ts +0 -26
- package/examples/apps/todo/app.tsx +0 -128
- package/examples/apps/todo/main.tsx +0 -9
- package/examples/apps/todo/server.ts +0 -39
- package/examples/hello-world/README.md +0 -9
- package/examples/hello-world/client.ts +0 -14
- package/examples/hello-world/routes.tsx +0 -26
- package/examples/hello-world/server.ts +0 -46
- package/examples/patterns/AppShell.tsx +0 -224
- package/examples/patterns/Dashboard.tsx +0 -153
- package/examples/patterns/DataScreen.tsx +0 -104
- package/examples/patterns/DetailPage.tsx +0 -79
- package/examples/patterns/Docs.tsx +0 -105
- package/examples/patterns/FocusTask.tsx +0 -67
- package/examples/patterns/Landing.tsx +0 -90
- package/examples/patterns/ListPage.tsx +0 -77
- package/examples/patterns/Mobile.tsx +0 -154
- package/examples/patterns/SettingsPage.tsx +0 -98
- package/examples/patterns/SplitWorkspace.tsx +0 -113
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vdom observable — 算子(语义规格见 types.ts——每算子契约测试锁定)
|
|
3
|
+
*
|
|
4
|
+
* 裁剪边界(2027-08——场景驱动——加算子需场景证据):
|
|
5
|
+
* - 只有 7 个:map/filter/scan/switchMap/mergeMap/takeUntil/shareReplay(1)
|
|
6
|
+
* - 显式不做:背压/调度器/timeout/retry/debounce(可后补——场景证据)
|
|
7
|
+
*/
|
|
8
|
+
import { Observable } from './observable.ts';
|
|
9
|
+
import type { OperatorFn } from './observable.ts';
|
|
10
|
+
/** 变换 */
|
|
11
|
+
export declare function map<T, R>(fn: (v: T) => R): OperatorFn<T, R>;
|
|
12
|
+
/** 过滤(pred 为真才转发) */
|
|
13
|
+
export declare function filter<T>(pred: (v: T) => boolean): OperatorFn<T, T>;
|
|
14
|
+
/** 旁路副作用(值原样转发——**observability 基建**:sink/度量订阅点——
|
|
15
|
+
* tap 内抛错 = 源 error(传播终结)) */
|
|
16
|
+
export declare function tap<T>(fn: (v: T) => void): OperatorFn<T, T>;
|
|
17
|
+
/** 收束:同步流 → 数组单值(**完整收集后**才产出——原子性语义——
|
|
18
|
+
* 流生成完成前消费者零应用——错误 → 零产出) */
|
|
19
|
+
export declare function toArray<T>(): OperatorFn<T, T[]>;
|
|
20
|
+
/** 延迟(每值延时发射——**取消语义**:unsubscribe 清未发 timer——
|
|
21
|
+
* complete 等 pending 值发完(RxJS 对齐——时序完整不丢值);隐式时序
|
|
22
|
+
* (toast 自动消失)流化基建——场景证据:命令式 API 自动销毁链) */
|
|
23
|
+
export declare function delay<T>(ms: number): OperatorFn<T, T>;
|
|
24
|
+
/** 累积(状态 = 流的折叠——每值产出累加器) */
|
|
25
|
+
export declare function scan<T, R>(fn: (acc: R, v: T) => R, init: R): OperatorFn<T, R>;
|
|
26
|
+
/**
|
|
27
|
+
* 竞态取消(核心语义):上游每值 → 订阅内层——**新值到来取消旧内层**——
|
|
28
|
+
* 旧流的结果作废(switchMap 语义——竞态消灭的根基)
|
|
29
|
+
*/
|
|
30
|
+
export declare function switchMap<T, R>(fn: (v: T) => Observable<R>): OperatorFn<T, R>;
|
|
31
|
+
/** 并行合并:不取消内层——全部内层完成且上游完成 → 外部 complete */
|
|
32
|
+
export declare function mergeMap<T, R>(fn: (v: T) => Observable<R>): OperatorFn<T, R>;
|
|
33
|
+
/**
|
|
34
|
+
* 单飞合并(single-flight):内层 in-flight 期间上游发射被**丢弃**(不缓存
|
|
35
|
+
* 不排队)——内层完成后**下一个**上游发射才启动新内层。
|
|
36
|
+
* - W2(api refresh$):并发 401 → 只执行一次刷新——exhaustMap 内建
|
|
37
|
+
* single-flight(旋转 token 双刷新竞态歼灭——G13 快照比对的窗口堵死)
|
|
38
|
+
* - 上游 complete:内层空闲时瞬时完成(RxJS 对齐——内层 in-flight 不等待)
|
|
39
|
+
*/
|
|
40
|
+
export declare function exhaustMap<T, R>(fn: (v: T) => Observable<R>): OperatorFn<T, R>;
|
|
41
|
+
/**
|
|
42
|
+
* 停止信号:notifier **发射**(next)→ 外部 complete——notifier 的
|
|
43
|
+
* complete/error **不触发**(RxJS 对齐)——卸载停止的语义根基
|
|
44
|
+
*/
|
|
45
|
+
export declare function takeUntil<T>(notifier: Observable<unknown>): OperatorFn<T, T>;
|
|
46
|
+
/**
|
|
47
|
+
* 缓存共享:多订阅共享同一上游(源只执行一次)——缓存最后值——
|
|
48
|
+
* 新订阅立即收缓存——refCount 归零(全退订)后新订阅重新执行源——
|
|
49
|
+
* (useAsyncData 的「层上缓存」是 key 管道——此处纯 operator 语义)
|
|
50
|
+
*/
|
|
51
|
+
export declare function shareReplay<T>(bufferSize?: number): OperatorFn<T, T>;
|
|
52
|
+
/** 初值前置:订阅即同步发射初值——随后转发源(冷源惰性保持——
|
|
53
|
+
* startWith 后源才被订阅——自订阅时刻起算) */
|
|
54
|
+
export declare function startWith<T>(v: T): OperatorFn<T, T>;
|
|
55
|
+
/** 限量:第 n 值后 complete + 自动退订上游(n 值即止——有限流语义) */
|
|
56
|
+
export declare function take<T>(n: number): OperatorFn<T, T>;
|
|
57
|
+
/** 终结清理:complete/error/主动退订——**恰好调用一次**(三路径统一——
|
|
58
|
+
* 取消验证的钩子——泄漏检测基建) */
|
|
59
|
+
export declare function finalize<T>(fn: () => void): OperatorFn<T, T>;
|
|
60
|
+
/** 相邻去重:默认 ===(显式算子——比较器可自定义:深度/字段比较) */
|
|
61
|
+
export declare function distinctUntilChanged<T>(compare?: (a: T, b: T) => boolean): OperatorFn<T, T>;
|
|
62
|
+
/** 防抖:静默期后发射最后值——**取消语义**(新值到 → 旧 timer 清)——
|
|
63
|
+
* 完成语义(RxJS 对齐):complete 立即完成(pending 丢弃——搜索框
|
|
64
|
+
* unmount 不需尾值——数据完整向丢弃妥协——正确面)——零泄漏(退订清) */
|
|
65
|
+
export declare function debounceTime<T>(ms: number): OperatorFn<T, T>;
|
|
66
|
+
/** 节流:窗口期首值(leading——默认)——trailing 可选(窗口关闭时
|
|
67
|
+
* 补最后值——并立即开新窗口——RxJS 对齐)——complete 丢弃 pending */
|
|
68
|
+
export declare function throttleTime<T>(ms: number, opts?: {
|
|
69
|
+
trailing?: boolean;
|
|
70
|
+
}): OperatorFn<T, T>;
|
|
71
|
+
/** 多源汇流:**全源首发后**才发射——快照数组——全源完成 → 外部完成
|
|
72
|
+
* (任一源未发值即完成——其他源可等待——RxJS 对齐;任源 error →
|
|
73
|
+
* 外部 error 终结)——空源 = 立即 complete */
|
|
74
|
+
export declare function combineLatest<T>(...sources: Observable<T>[]): Observable<T[]>;
|
|
75
|
+
/** 多源合并:同类型流交错——**全源完成** → 外部完成(任源 error 终结) */
|
|
76
|
+
export declare function merge<T>(...sources: Observable<T>[]): Observable<T>;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vdom observable — 源构造
|
|
3
|
+
*
|
|
4
|
+
* Subject(热源):
|
|
5
|
+
* - next 广播全部当前订阅者(快照迭代——广播中退订安全)
|
|
6
|
+
* - error/complete:终结全部订阅者并清空——之后 next 忽略(closed)
|
|
7
|
+
* - 无订阅也持有(热——独立于订阅者存在)
|
|
8
|
+
*
|
|
9
|
+
* BehaviorSubject(状态源——signal 的根基):
|
|
10
|
+
* - 持当前值 get()(同步读)
|
|
11
|
+
* - 新订阅立即收到当前值(Behavior 语义——首帧同步命中的根基)
|
|
12
|
+
* - next 更新值并广播
|
|
13
|
+
*
|
|
14
|
+
* fromPromise(异步取数源——useAsyncData 的根基):
|
|
15
|
+
* - resolve → next(v) + complete(单发)
|
|
16
|
+
* - reject → error(传播——不静默)
|
|
17
|
+
* - AbortSignal:abort → **静默 complete**(不发值——订阅者恢复
|
|
18
|
+
* idle——fetch abort 语义——竞态取消靠 switchMap 层——此处只管停)
|
|
19
|
+
* - unsubscribe 后 resolve/reject 不发(alive 守卫)
|
|
20
|
+
*
|
|
21
|
+
* fromEventPattern(DOM/环境源——useMedia/useInView 的根基):
|
|
22
|
+
* - add(next) 注册监听(返回 unlisten 或 void)——unsubscribe 对称移除
|
|
23
|
+
* - initial():订阅时**同步发射首值**(Behavior 语义——useMedia 初值)
|
|
24
|
+
*/
|
|
25
|
+
import { Observable } from './observable.ts';
|
|
26
|
+
import type { Observer, UnsubscribeFn } from './types.ts';
|
|
27
|
+
/** 热源——先订阅者广播 */
|
|
28
|
+
export declare class Subject<T> {
|
|
29
|
+
protected subs: Set<Observer<T>>;
|
|
30
|
+
protected closed: boolean;
|
|
31
|
+
/** 可观察面(订阅——自动从 Subject 的订阅表接入) */
|
|
32
|
+
asObservable(): Observable<T>;
|
|
33
|
+
subscribe(partial?: Partial<Observer<T>>): {
|
|
34
|
+
unsubscribe(): void;
|
|
35
|
+
};
|
|
36
|
+
next(value: T): void;
|
|
37
|
+
error(err: unknown): void;
|
|
38
|
+
complete(): void;
|
|
39
|
+
}
|
|
40
|
+
/** 状态源——持当前值——新订阅立即收当前值 */
|
|
41
|
+
export declare class BehaviorSubject<T> extends Subject<T> {
|
|
42
|
+
private value;
|
|
43
|
+
constructor(init: T);
|
|
44
|
+
get(): T;
|
|
45
|
+
next(v: T): void;
|
|
46
|
+
/** Behavior 完整面(subscribe → 立即 next(当前值)) */
|
|
47
|
+
asObservable(): Observable<T>;
|
|
48
|
+
}
|
|
49
|
+
/** 固定值源(单发)+ Abort 支持——resolve/subscribe 时序安全 */
|
|
50
|
+
export declare function fromPromise<T>(p: Promise<T>, opts?: {
|
|
51
|
+
signal?: AbortSignal;
|
|
52
|
+
}): Observable<T>;
|
|
53
|
+
/** DOM/环境源——add 注册(可返 unlisten)——unsubscribe 对称移除 */
|
|
54
|
+
export declare function fromEventPattern<T>(add: (next: (v: T) => void) => UnsubscribeFn | void, initial?: () => T): Observable<T>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vdom observable — 类型(语义规格层)
|
|
3
|
+
*
|
|
4
|
+
* Observable 核心语义(自研零依赖——2027-08 架构地基):
|
|
5
|
+
*
|
|
6
|
+
* 1. 订阅:subscribe(observer) → Subscription——observer 可部分实现
|
|
7
|
+
* (缺省 next/error/complete = noop)——订阅即启动(冷源惰性执行)
|
|
8
|
+
* 2. 终结(terminal):error/complete 后——订阅者不再收任何值——
|
|
9
|
+
* 内部 teardown 自动执行(unsubscribe 幂等——重复调用无副作用)
|
|
10
|
+
* 3. unsubscribe:释放订阅——上游 teardown 执行——后续发射被忽略
|
|
11
|
+
* 4. 安全迭代:next 广播期间 unsubscribe 某订阅者——不影响正在广播的
|
|
12
|
+
* 其他订阅者(快照迭代——删除安全)
|
|
13
|
+
* 5. 错误传播:error 如遇链上未终结——传播到订阅者 error 回调——不静默
|
|
14
|
+
* 6. 冷热:create/fromPromise 冷(惰性——订阅才执行);Subject 热
|
|
15
|
+
* (无订阅也持有——next 只达当前订阅者)
|
|
16
|
+
*
|
|
17
|
+
* 算子规格(operators.ts):
|
|
18
|
+
* - map(fn):每个值 → fn 变换
|
|
19
|
+
* - filter(pred):pred 为真才转发
|
|
20
|
+
* - scan(fn, init):累积——每值产出累加器(状态 = 流的折叠)
|
|
21
|
+
* - switchMap(fn):上游每值 → 订阅内层——**新值到来取消旧内层**
|
|
22
|
+
* (旧流的结果作废——竞态消灭的语义根基)
|
|
23
|
+
* - mergeMap(fn):上游每值 → 订阅内层——**并行不取消**——全部完成后
|
|
24
|
+
* 且上游完成 → 外部 complete
|
|
25
|
+
* - takeUntil(notifier):notifier **发射**(next)→ 外部 complete
|
|
26
|
+
* (notifier 的 complete/error 不触发——RxJS 对齐语义)
|
|
27
|
+
* - shareReplay(1):多订阅共享同一上游——源只执行一次——缓存最后值——
|
|
28
|
+
* 新订阅立即收缓存——refCount 归零后新订阅重新执行源
|
|
29
|
+
*/
|
|
30
|
+
export type UnsubscribeFn = () => void;
|
|
31
|
+
/** teardown:函数或订阅对象(订阅函数统一返回形态) */
|
|
32
|
+
export type Teardown = UnsubscribeFn | {
|
|
33
|
+
unsubscribe(): void;
|
|
34
|
+
};
|
|
35
|
+
export interface Observer<T> {
|
|
36
|
+
next(value: T): void;
|
|
37
|
+
error(err: unknown): void;
|
|
38
|
+
complete(): void;
|
|
39
|
+
}
|
|
40
|
+
export type PartialObserver<T> = Partial<Observer<T>>;
|
|
41
|
+
export interface Subscription {
|
|
42
|
+
unsubscribe(): void;
|
|
43
|
+
}
|
|
44
|
+
/** 订阅函数(Observable 构造原料)——返回 teardown */
|
|
45
|
+
export type SubscribeFn<T> = (observer: Observer<T>) => Teardown | void;
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* - **触发渲染**:订阅方(useExternal——store 变化 → 组件重渲染)——
|
|
9
9
|
* 写者不直接渲染(高频 notify 由写者控制频率)
|
|
10
10
|
*/
|
|
11
|
+
import { type Observable } from './observable/index.ts';
|
|
11
12
|
export interface ExternalStore<T> {
|
|
12
13
|
/** 当前状态(普通对象——getter 读最新——非快照) */
|
|
13
14
|
readonly state: T;
|
|
@@ -19,11 +20,13 @@ export interface ExternalStore<T> {
|
|
|
19
20
|
update(fn: (state: T) => void): void;
|
|
20
21
|
/** 手动通知(高频场景由写者控制频率) */
|
|
21
22
|
notify(): void;
|
|
23
|
+
/** **变化值流(波次 7——值源 Observable 视图)**:set/update/notify →
|
|
24
|
+
* 发射当前 state——订阅即收当前值(BehaviorSubject 语义)——可
|
|
25
|
+
* pipe/takeUntil——与 subscribe 同源(同一变化事件) */
|
|
26
|
+
readonly changes$: Observable<T>;
|
|
22
27
|
}
|
|
23
28
|
export declare function createStore<T>(init: T): ExternalStore<T>;
|
|
24
29
|
/** 响应式信号(signal 原语——store 的获取器形态归一)
|
|
25
|
-
*
|
|
26
|
-
* **设计(2026-08——hooks getter 化组织的底层原语)**:
|
|
27
30
|
* - 读 = `sig()`(getter 函数——**任何时刻调用都返回最新值**——无快照
|
|
28
31
|
* 失效概念——mount 闭包持有 signal 永远最新——「调用位置规则」在
|
|
29
32
|
* API 形状上不存在)
|
|
@@ -47,3 +50,15 @@ export interface Signal<T> {
|
|
|
47
50
|
store: ExternalStore<T>;
|
|
48
51
|
}
|
|
49
52
|
export declare function createSignal<T>(init: T): Signal<T>;
|
|
53
|
+
/** 派生信号(2027-09——OBSERVABLE-OPTIMIZE 波次 2——声明式组合)
|
|
54
|
+
*
|
|
55
|
+
* 语义(**读时计算 + 惰性缓存——零订阅零泄漏**):
|
|
56
|
+
* - getter 形态——`d()` 永远最新(getter 纪律:任意位置读)
|
|
57
|
+
* - **读时比较**:get 时重读全部源 getter——与上次缓存引用比较(默认
|
|
58
|
+
* ===——可自定比较器)——源值变化才重算 compute(否则缓存直回)
|
|
59
|
+
* - **无内部订阅**(源 getter 只管读——变化检测在 get 路径——不依赖
|
|
60
|
+
* 源的变化通知——任何 getter 都可派生(signal/store/useObservable))
|
|
61
|
+
* - 嵌套派生天然支持(派生 getter 也是 getter——组合即函数引用)
|
|
62
|
+
* - **惰性**:不读不计算(无主动重算——与「每拍全算」的反面——
|
|
63
|
+
* 派生在消费点求值——消费点只付实际加载的代价) */
|
|
64
|
+
export declare function derived<T, R>(sources: readonly (() => T)[], compute: (vals: T[]) => R, equal?: (a: T, b: T) => boolean): () => R;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var Tt=Symbol("vdom-fragment");function D(t){return t.type===Tt}function V(t){let e=t.children??(t.props.children===void 0?[]:t.props.children),n=o=>Array.isArray(o)?o.flatMap(n):[o];return Array.isArray(e)?e.flatMap(n):[e]}function I(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)&&D(t)?V(t).reduce((e,n)=>e+I(n),0):1}function Pe(t){return t==null||typeof t=="boolean"}function Ae(t){return!(t==null||typeof t=="boolean"||typeof t=="string"||typeof t=="number"||Array.isArray(t)||typeof t=="object"&&typeof t.type=="string"||typeof t.type=="function"||typeof t.type=="symbol")}function ke(t){return t==null?"null/undefined":typeof t=="object"?`object\uFF08type: ${typeof t.type}\uFF09`:typeof t}function Ct(t,e,n,o){return[{op:"createAnchor",id:t,...o!==void 0?{detail:o}:{}},{op:"insert",id:t,parent:e,ref:n}]}function oe(t,e,n,o,r){for(let s of Ct(e,n,o,r))t(s)}function U(t){return t===""?"hole":typeof t=="string"||typeof t=="number"?"text":Pe(t)?"hole":Array.isArray(t)?"array":typeof t.type=="string"?"element":D(t)?"fragment":typeof t.type=="function"?"component":(Ae(t),"invalid")}function De(t){return typeof t=="string"||typeof t=="number"?String(t):null}function M(t){return U(t)==="hole"}function G(t){return U(t)==="text"}function H(t,e){return`${t}.k${e.replace(/%/g,"%25").replace(/\./g,"%2E")}`}function L(t){return t==null||typeof t=="boolean"||typeof t=="string"||typeof t=="number"||Array.isArray(t)?null:t.key}function re(t){return L(t)!==null}function ie(t){let e=!1,n=!1;for(let o of t)if(re(o)?e=!0:n=!0,e&&n)return"mixed";return e?"all-keyed":"all-unkeyed"}function q(t,e){let n=new Set;for(let o of t){let r=L(o);if(r!==null){if(n.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}n.add(r)}}}function Ue(t,e){if(t.length<2)return;let n=t.some(r=>typeof r?.type=="function"),o=t.some(r=>!re(r)&&typeof r?.type=="function");if(n&&o){let r=t.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 ${t.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 E(t,e){return`${t}.${e}`}function pe(t){let e={};for(let[n,o]of Object.entries(t))n==="children"||n==="key"||n==="ref"||typeof o!="function"&&(e[n]=o);return e}async function $e(t,e,n,o,r,s){r({op:"create",id:e,tag:t.type,attrs:pe(t.props)});for(let[d,p]of Object.entries(t.props))d==="children"||d==="key"||d==="ref"||typeof p=="function"&&r({op:"setProp",id:e,key:d,value:p});r({op:"insert",id:e,parent:n,ref:o});let i=t.props.ref;typeof i=="function"&&r({op:"ref",id:e,fn:i});let a=V(t);q(a,`\u5143\u7D20 children\uFF08${e}\uFF09`);let l=null,u=0;for(let d of a){await s(d,e,u,l);let p=I(d);l=E(e,u+p-1),u+=p}r({op:"close",id:e})}function Nt(t){let e=new Set,n=t,o=()=>{for(let r of[...e])r()};return{get state(){return n},subscribe(r){return e.add(r),()=>{e.delete(r)}},set(r){n={...n,...r},o()},update(r){r(n),o()},notify:o}}function Ke(t){let e=Nt(t),n=(()=>e.state);return n.set=o=>e.set(o),n.update=o=>e.update(o),n.subscribe=o=>e.subscribe(o),n.notify=()=>e.notify(),n.store=e,n}function Fe(t,e,n){if(typeof e=="function"){let r=e;return i=>{i?r(i):n?.()}}return{current:e}}function Be(t,e,n){let o=typeof e=="object"?e:void 0,r=typeof e=="boolean"?e:!1,s=o??n,i=t.nextHookIndex(),a=t.getHookState(i)??{open:r};t.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,t.requestRender())},toggle(){this.setOpen(!this.open)}}}function qe(t,e,n){let o=n?e:(()=>!0),r=n??e,s=t.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 t.onUnmount(a),a}function _e(t,e,n,o,r,s,i,a){let l=t.getBoundingClientRect();if(l.width===0&&l.height===0)return null;let u=e.innerWidth,d=e.innerHeight,p,f;switch(r){case"bottom":p=l.bottom+s,f=a?l.left+l.width/2-n/2:l.left;break;case"top":p=l.top-o-s,f=a?l.left+l.width/2-n/2:l.left;break;case"left":p=a?l.top+l.height/2-o/2:l.top,f=l.left-n-s;break;case"right":p=a?l.top+l.height/2-o/2:l.top,f=l.right+s;break}return f+n>u-i&&(f=u-n-i),f<i&&(f=i),p+o>d-i&&(p=d-o-i),p<i&&(p=i),{top:p,left:f}}function je(t,e){let n=e.getComputedStyle(t).animationName;if(n&&n!=="none")return!0;for(let o of t.children){let r=e.getComputedStyle(o).animationName;if(r&&r!=="none")return!0}return!1}function We(t,e){let n=t.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 p=e.compute(d);o=p.top,r=p.left},a,l=()=>{a||n&&(a=n.requestAnimationFrame(()=>{a=void 0,(e.isOpen?.()??!0)&&i()}))};return n&&(n.addEventListener("scroll",l,!0),n.addEventListener("resize",l),t.onUnmount(()=>{a!==void 0&&n.cancelAnimationFrame(a),n.removeEventListener("scroll",l,!0),n.removeEventListener("resize",l)})),s.refresh=i,s}function ze(t){let e=t?.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 Ge(t){let e={...t??{}};return delete e.key,e}function Te(t,e,...n){let o=Ge(e);return n.length===1?o.children=n[0]:n.length>1&&(o.children=n),{type:t,props:o,key:ze(e)}}function R(t){if(t==null)return"hole";let e=U(t);return e==="invalid"?"hole":e}var Y=async(t,e,n)=>{n.emit({op:"remove",id:n.oldId}),await n.emitNode(e,n.parent,n.index,n.ref)};var J=async(t,e,n)=>{n.emit({op:"remove",id:n.oldId}),await n.emitNode(e,n.parent,n.index,n.ref)};function j(t,e,n){return typeof t?.type=="function"?E(e,0):Array.isArray(t)?e:M(t)?E(e,0):n}function se(t,e,n){return typeof t?.type=="function"||Array.isArray(t)?e:n}function N(t,e,n,o,r){if(globalThis.__DBG8&&console.log("[dbg-rmt]",e,"parent=",n,"type=",typeof t=="object"&&t!==null&&!Array.isArray(t)?String(t.type):Array.isArray(t)?"array":String(t)),M(t)){o({op:"remove",id:e});return}if(G(t)){o({op:"remove",id:e});return}if(Array.isArray(t)){globalThis.__DBG4&&console.log(`[dbg-arr] \u6570\u7EC4 base=${e} parent=${n} \u9879\u6570=${t.length}`);let l=0;for(let u of t)N(u,E(e,l),e,o,r),l+=I(u);return}let s=t;if(D(s)){let l=Number(e.slice(n.length+1)),u=V(s),d=l;for(let p of u)N(p,E(n,d),n,o,r),d+=I(p);return}if(typeof s.type=="function"){let l=s.key!==null?H(n,s.key):e;globalThis.__DBG5&&console.log(`[dbg-comp] unmount ${l} base=${e} parent=${n}`),o({op:"unmount",compId:l});let u=r?.get(l)?.lastOutput;if(u!==void 0){let d=W(u),p=j(d,l,e),m=d!==null&&typeof d=="object"&&!Array.isArray(d)&&D(d)?e.slice(0,e.lastIndexOf(".")):se(d,l,l);N(d,p,m,o,r)}}let i=V(s),a=0;i.forEach(l=>{let u=E(e,a);l!==null&&typeof l!="string"&&typeof l!="number"&&typeof l!="boolean"&&!Array.isArray(l)?N(l,u,e,o,r):o({op:"remove",id:u}),a+=I(l)}),o({op:"remove",id:e})}var X=async(t,e,n)=>{N(t,n.oldId,n.parent,n.emit,n.registry),await n.emitNode(e,n.parent,n.index,n.ref)};var Q=async(t,e,n)=>{globalThis.__DBG8&&console.log("[dbg-tc] oldCompId=",n.oldCompId,"oldId=",n.oldId,"parent=",n.parent,"index=",n.index),n.oldCompId&&n.emit({op:"unmount",compId:n.oldCompId});let o=n.registry?.get(n.oldCompId??"")?.lastOutput;if(o!==void 0){let r=W(o);N(r,j(r,n.oldCompId??"",E(n.parent,n.index)),se(r,n.oldCompId??"",n.parent),n.emit,n.registry)}else n.emit({op:"remove",id:n.oldId});await n.emitNode(e,n.parent,n.index,n.ref)};var $=async(t,e,n)=>{let o=Array.isArray(t)?t:V(t),r=n.index;for(let s of o)N(s,E(n.parent,r),n.parent,n.emit,n.registry),r+=I(s);await n.emitNode(e,n.parent,n.index,n.ref)};var St={text:{text:null,hole:Y,element:Y,component:Y,fragment:Y,array:Y},hole:{text:J,hole:null,element:J,component:J,fragment:J,array:J},element:{text:X,hole:X,element:null,component:X,fragment:X,array:X},component:{text:Q,hole:Q,element:Q,component:null,fragment:Q,array:Q},fragment:{text:$,hole:$,element:$,component:$,fragment:null,array:$},array:{text:$,hole:$,element:$,component:$,fragment:$,array:null}};function K(t,e){return St[t]?.[e]??null}function Ye(t,e,n,o){let r=pe(t.props),s=pe(e.props);for(let[i,a]of Object.entries(s))r[i]!==a&&o({op:"setProp",id:n,key:i,value:a});for(let i of Object.keys(r))i in s||o({op:"setProp",id:n,key:i,value:void 0});for(let[i,a]of Object.entries(e.props))i==="children"||i==="key"||typeof a=="function"&&t.props[i]!==a&&o({op:"setProp",id:n,key:i,value:a,prev:t.props[i]});for(let i of Object.keys(t.props))i==="children"||i==="key"||typeof t.props[i]=="function"&&e.props[i]===void 0&&o({op:"setProp",id:n,key:i,value:void 0,prev:t.props[i]})}async function Ze(t,e,n,o,r,s,i){let a=V(t),l=V(e),u=Array.isArray(t.props.children)!==Array.isArray(e.props.children);await le(a,l,n,o,r,s,i,u)}async function le(t,e,n,o,r,s,i,a=!1){if(t=Ce(t),e=Ce(e),!a){let f=v=>!M(v)&&!G(v)&&!Array.isArray(v),m=t.filter(f),k=e.filter(f),w=(v,C)=>C>=v.length||M(v[C]),g=v=>typeof v?.type=="function"&&!re(v),c=v=>w(t,v)||g(t[v]),y=v=>w(e,v)||g(e[v]);(e.some((v,C)=>g(v)&&!c(C))||t.some((v,C)=>g(v)&&!y(C)))&&Ue(k,`children\uFF08\u65E0 key \u7EC4\u4EF6\u5B9E\u69FD\u7FFB\u8F6C ${m.length}\u2192${k.length}\uFF09`)}if(globalThis.__WF_DEBUG_MOVED__&&console.log("[debug-dci] id=",n,"oldKeys=",JSON.stringify(t.map(L)),"newKeys=",JSON.stringify(e.map(L)),"lk=",ie(t),ie(e)),ie(e)==="all-keyed"&&ie(t)==="all-keyed"){await Qe(t,e,n,o,r,s,i);return}if(Xe(e)||Xe(t)){await Qe(t,e,n,o,r,s,i);return}let l=null,u=Math.min(t.length,e.length);for(let f=0;f<u;f++){let m=t[f]??null,k=e[f]??null,w=E(n,f);M(k)?M(m)||(await Je(m,n,w,r,i),oe(r,w,n,l)):await Vt(m,k,n,f,l,w,o,r,s,i),l=w}for(let f=t.length;f<e.length;f++)await o(e[f],n,f,l),l=E(n,f);let d=t.reduce((f,m)=>f+I(m),0),p=e.reduce((f,m)=>f+I(m),0);if(d>p){let f=d-p;for(let m=t.length-1;m>=0&&f>0;m--){let k=I(t[m]);k<=f&&(await Je(t[m],n,E(n,m),r,i),f-=k)}}}async function Je(t,e,n,o,r){if(M(t)){o({op:"remove",id:n});return}N(t,n,e,o,r)}function Ce(t){let e=[];for(let n of t)n!==null&&typeof n=="object"&&!Array.isArray(n)&&D(n)?e.push(...Ce(V(n))):e.push(n);return e}async function Vt(t,e,n,o,r,s,i,a,l,u){if(globalThis.__DBG7&&console.log("[dbg-slot]",s,"old=",t===null?"null":String(typeof t=="object"?t.type:t),"new=",e===null?"null":String(typeof e=="object"?e.type:e)),U(t)==="text"&&U(e)==="text"){String(t)!==String(e)&&a({op:"setText",id:s,value:String(e)});return}if(U(t)==="hole"){a({op:"remove",id:s}),await i(e,n,o,r);return}if(U(t)===U(e)&&typeof t!="string"&&typeof t!="number"){await z(t,e,n,o,r,i,a,l,u);return}let d=K(R(t),R(e));if(!d)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${R(t)} \u2192 ${R(e)}\uFF08diffSlot\u2014\u2014\u5FC5\u987B\u663E\u5F0F\u8FC1\u79FB\u6216\u663E\u5F0F Reject\uFF09`);await d(t,e,{emit:a,emitNode:i,oldId:s,newId:s,parent:n,index:o,ref:r,oldCompId:typeof t?.type=="function"?s:void 0,registry:u})}function Xe(t){return t.some(re)}async function Qe(t,e,n,o,r,s,i){let a=new Map;t.forEach((c,y)=>{let x=L(c);x!==null&&!a.has(x)&&a.set(x,y)}),q(e,`keyed \u5217\u8868\uFF08${n}\uFF09`),q(t,`keyed \u5217\u8868\uFF08${n}\uFF09`);let l=new Set(e.map(c=>L(c)).filter(c=>c!==null)),u=new Map;for(let c=0;c<t.length;c++){let y=t[c];if(M(y)){r({op:"remove",id:E(n,c)});continue}if(G(y)){r({op:"remove",id:E(n,c)});continue}if(Array.isArray(y))continue;let x=L(y);if(x!==null){let v=(u.get(x)??0)+1;if(u.set(x,v),v===1)continue;N(y,E(n,c),n,r,i);continue}N(y,E(n,c),n,r,i)}for(let[c,y]of a)l.has(c)||N(t[y],E(n,y),n,r,i);let d=t.map(c=>L(c)).filter(c=>c!==null&&l.has(c)),p=e.map(c=>L(c)).filter(c=>c!==null&&a.has(c)),f=!0;{let c=0;for(let y of p){let x=d.indexOf(y,c);if(x===-1){f=!1;break}c=x+1}}if(!f){for(let[y,x]of a)l.has(y)||r({op:"unmount",compId:H(n,y)});t.forEach((y,x)=>{if(!M(y)){if(G(y)){r({op:"remove",id:E(n,x)});return}if(L(y)!==null){r({op:"remove",id:E(n,x)});return}N(y,E(n,x),n,r,i)}});let c=null;for(let y=0;y<e.length;y++){let x=e[y],v=L(x);if(v!==null&&typeof x.type=="function"){let C=H(n,v);await _(x,n,y,c,C,s,i,o,r)&&r({op:"mount",compId:C})}else await o(x,n,y,c);c=E(n,y)}return}let m=[];e.forEach((c,y)=>{let x=L(c);if(x===null)return;let v=a.get(x);v!==void 0&&v!==y&&m.push({oldIdx:v,newIdx:y})});let k=m.every(c=>c.newIdx<c.oldIdx);m.sort((c,y)=>k?c.newIdx-y.newIdx:y.newIdx-c.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=",n);for(let c of m)r({op:"move",id:E(n,c.oldIdx),parent:n,ref:null,newId:E(n,c.newIdx),noMove:!0});let w=!0,g=null;for(let c=0;c<e.length;c++){let y=e[c],x=L(y),v=E(n,c);if(x!==null){let C=a.get(x);C===void 0?await ae(y,n,c,g,x,o,r,s,i):typeof y.type=="function"?await ae(y,n,c,g,x,o,r,s,i):await z(t[C],y,n,c,g,o,r,s,i)}else await o(y,n,c,g);g=v}}async function ae(t,e,n,o,r,s,i,a,l){let u=t;if(typeof u.type=="function"){let d=H(e,r),f=l.get(d)?.lastOutput;await _(u,e,n,o,d,a,l,async(k,w,g,c)=>{await ce(f,k,w,g,c,s,i,a,l,z,d,E(e,n),(y,x,v,C,F)=>ae(y,x,v,C,F,s,i,a,l))},i)&&i({op:"mount",compId:d});return}await s(t,e,n,o)}async function ce(t,e,n,o,r,s,i,a,l,u,d,p,f){let m=()=>{if(t?.kind==="vnode"){let g=t.v;return g!==null&&typeof g=="object"&&typeof g.type=="function"?E(d,0):p}return E(d,0)},k=E(n,o),w=M(e);if(t===void 0){await s(e,n,o,r);return}switch(t.kind){case"hole":{if(!w){let g=K("hole",R(e));if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 hole \u2192 ${R(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:k,parent:n,index:o,ref:r,registry:l})}return}case"vnode":{if(w){let g=K(R(t.v),"hole");if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${R(t.v)} \u2192 hole\uFF08\u7EC4\u4EF6\u8F93\u51FA\u6536\u7F29\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);let c=t.v,y=c!==null&&typeof c=="object"&&typeof c.type=="function"?c.key!==null?H(d,c.key):E(d,0):void 0;await g(t.v,e,{emit:i,emitNode:s,oldId:m(),newId:k,parent:n,index:o,ref:r,registry:l,oldCompId:y})}else if(Array.isArray(e)){let g=K(R(t.v),"array");if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${R(t.v)} \u2192 array\uFF08\u5355\u8282\u70B9\u2192\u591A\u6839\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);await g(t.v,e,{emit:i,emitNode:s,oldId:m(),newId:k,parent:n,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,n,o,r,g.key):await u(t.v,g,n,o,r,s,i,a,l)}return}case"array":{if(w){let g=K("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(t.items,e,{emit:i,emitNode:s,oldId:m(),newId:k,parent:n,index:o,ref:r,registry:l})}else if(Array.isArray(e))await le(t.items,e,n,s,i,a,l);else{let g=K("array",R(e));if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 array \u2192 ${R(e)}\uFF08\u591A\u6839\u2192\u5355\u8282\u70B9\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);await g(t.items,e,{emit:i,emitNode:s,oldId:m(),newId:k,parent:n,index:o,ref:r,registry:l})}return}}}async function z(t,e,n,o,r,s,i,a,l){let u=E(n,o);if(typeof e.type=="function"){let p=e.key!==null?H(n,e.key):u,f=typeof t.type=="function"&&t.key!==null?H(n,t.key):u,m=l.get(p);if(p!==f||m&&m.type!==e.type){let g=l.get(f);if(g){f!==p&&i({op:"unmount",compId:f});let c=g.lastOutput;if(c!==void 0){let y=W(c);N(y,j(y,f,E(n,o)),se(y,f,n),i,l)}Z(f,l)}m=void 0,await _(e,n,o,r,p,a,l,s,i),i({op:"mount",compId:p});return}let k=m?.lastOutput;await _(e,n,o,r,p,a,l,async(g,c,y,x)=>{await ce(k,g,c,y,x,s,i,a,l,z,p,E(n,o),(v,C,F,S,h)=>ae(v,C,F,S,h,s,i,a,l))})&&i({op:"mount",compId:p});return}if(typeof e.type=="string"&&typeof t.type=="string"){t.type===e.type?(Ye(t,e,u,i),await Ze(t,e,u,s,i,a,l)):(N(t,u,n,i,l),await s(e,n,o,r));return}if(D(t)&&D(e)){await le(V(t),V(e),n,s,i,a,l);return}throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1AdiffSame \u672A\u5B9A\u4E49\u540C\u6001\u5BF9\u7167 ${String(t.type)} \u2194 ${String(e.type)}\uFF08P2 \u663E\u5F0F Reject\uFF09`)}function me(t,e,n,o){return new ReadableStream({async start(r){let s=d=>r.enqueue(d),i=Ne(s,n,o),a=R(t),l=R(e),u=K(a,l);u?await u(t,e,{emit:s,emitNode:i,oldId:"root.0",newId:"root.0",parent:"root",index:0,ref:null,registry:o,oldCompId:typeof t.type=="function"?t.key!==null?H("root",t.key):"root.0":void 0}):await z(t,e,"root",0,null,i,s,n,o),s({op:"done"}),r.close()}})}var ge=class{table=new Map;rootTypes=new Set;doc;dispatchBound;container;phase="active";constructor(e,n){this.doc=e,this.container=n,this.dispatchBound=this.dispatch.bind(this)}set(e,n,o){if(this.phase==="disposed"){console.error(`[vdom] \u4E8B\u4EF6\u8868\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Adisposed \u540E set(${e}, ${n}) \u88AB\u5FFD\u7565`);return}if(typeof o!="function"){console.warn(`[vdom] \u4E8B\u4EF6 ${n} \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(n,o),this.ensureRoot(n)}get(e,n){return this.table.get(e)?.get(n)}removeEvent(e,n){let o=this.table.get(e);o&&(o.delete(n),o.size===0&&this.table.delete(e))}remove(e){for(let n of[...this.table.keys()])(n===e||n.startsWith(e+"."))&&this.table.delete(n)}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 n=e.target;for(n&&n.nodeType===3&&(n=n.parentElement);n;){if(!n.hasAttribute?.("data-wf-id")){let r=n.closest?.("[data-wf-id]");if(r&&r!==n){n=r;continue}}let o=n.getAttribute?.("data-wf-id");if(o){let r=this.table.get(o)?.get(e.type);if(r){try{Object.defineProperty(e,"currentTarget",{value:n,configurable:!0})}catch{}try{r(e)}catch(s){console.error("[vdom] \u4E8B\u4EF6 handler:",s)}if(e.cancelBubble)return}}n=n.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 de(t){return ee.test(t)?t.slice(2).toLowerCase():null}var ye=class{refs=new Map;phase="active";set(e,n,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!==n&&typeof o=="function")try{o(null)}catch(r){console.error("[vdom] ref prev:",r)}this.refs.set(e,n)}mount(e,n){let o=this.refs.get(e);if(typeof o=="function")try{o(n)}catch(r){console.error("[vdom] ref mount:",r)}}unmount(e){for(let[n,o]of[...this.refs])if(n===e||n.startsWith(e+".")){if(typeof o=="function")try{o(null)}catch(r){console.error("[vdom] ref unmount:",r)}this.refs.delete(n)}}remap(e,n){for(let[o,r]of[...this.refs])(o===e||o.startsWith(e+"."))&&(this.refs.delete(o),this.refs.set(n+o.slice(e.length),r))}dispose(){this.phase!=="disposed"&&(this.phase="disposed",this.refs.clear())}};var he=class{queue=null;failed=!1;phase="inactive";begin(e){let n=[],o=r=>{n.push(r);for(let s of r.childNodes)o(s)};for(let r of e.childNodes)o(r);this.queue=n,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,n,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()===n: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 Rt=new Set(["draggable","contenteditable","spellcheck"]);function Se(t,e,n){if(e==="innerHTML"||e==="textContent"||e==="value"){t[e]=n;return}if(n==null){t.removeAttribute(e);return}if(Rt.has(e)){t.setAttribute(e,n?"true":"false");return}if(n===!1){t.removeAttribute(e);return}if(e==="class"||e==="className"){t.setAttribute("class",String(n));return}if(typeof n=="boolean"){t.setAttribute(e,"");return}t.setAttribute(e,String(n))}var It=new Set(["zIndex","opacity","lineHeight","zoom","fontWeight","order","flex","flexGrow","flexShrink","flexBasis","animationIterationCount","orphans","widows","columns","columnCount","columnGap","counterIncrement","counterReset","aspectRatio","scale","rotate"]);function Mt(t,e,n){if(n==null||n===!1){e.startsWith("--")&&t.style.removeProperty(e),t.style[e]="";return}if(e.startsWith("--")){t.style.setProperty(e,String(n));return}typeof n=="number"&&!It.has(e)&&(n=`${n}px`),t.style[e]=String(n)}function Ve(t,e){if(typeof e=="string"){t.setAttribute("style",e);return}if(e&&typeof e=="object"){t.style.cssText="";for(let[n,o]of Object.entries(e))Mt(t,n,o)}}var Ht=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 et(t){return Ht.has(t)}function tt(t,e,n){t[e]=n}function ue(t,e){for(let[n,o]of Object.entries(e))n==="style"?Ve(t,o):Se(t,n,o)}function nt(t,e,n,o,r,s){if(o!=="ref")if(typeof r=="function"||r===void 0&&typeof s=="function"){if(ee.test(o)){let i=de(o);i&&t.set(e,i,r)}return}else if(ee.test(o)){let i=de(o);i&&t.set(e,i,r)}else o==="style"?Ve(n,r):et(o)?tt(n,o,r):Se(n,o,r)}var Lt="http://www.w3.org/2000/svg",Ot=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(t,e){return Ot.has(e)?t.createElementNS(Lt,e):t.createElement(e)}function Pt(t,e){t.touched.add(e.id);let n=t.nodes.get(e.id);if(n&&n.nodeType===1&&n.tagName.toLowerCase()===e.tag)ue(n,e.attrs);else if(t.absorb.queue&&!n){let r=t.absorb.next("element",e.tag);if(r)ue(r,e.attrs),t.nodes.set(e.id,r);else{let s=ot(t.doc,e.tag);ue(s,e.attrs),t.nodes.set(e.id,s)}}else{let r=ot(t.doc,e.tag);ue(r,e.attrs),n&&(t.clearNodeRefs(e.id),t.eventRegistry.remove(e.id),n.replaceWith(r)),t.nodes.set(e.id,r)}let o=t.nodes.get(e.id);o&&o.nodeType===1&&o.setAttribute("data-wf-id",e.id)}function At(t,e){t.touched.add(e.id);let n=t.nodes.get(e.id);if(n&&n.nodeType===3)n.textContent!==e.value&&(n.textContent=e.value);else if(t.absorb.queue&&!n){let o=t.absorb.next("text",void 0,e.value);if(o)o.textContent!==e.value&&(o.textContent=e.value),t.nodes.set(e.id,o);else{let r=t.doc.createTextNode(e.value);t.nodes.set(e.id,r)}}else{let o=t.doc.createTextNode(e.value);n&&n.replaceWith(o),t.nodes.set(e.id,o)}}function Dt(t,e){t.touched.add(e.id);let n=t.nodes.get(e.id);if(n&&n.nodeType===8){let o=e.detail?`wf-hole: ${e.detail}`:"wf-hole";n.textContent!==o&&(n.textContent=o)}else if(t.absorb.queue&&!n){let o=t.absorb.next("comment");if(o)t.nodes.set(e.id,o);else{let r=t.doc.createComment(e.detail?`wf-hole: ${e.detail}`:"wf-hole");t.nodes.set(e.id,r)}}else{let o=t.doc.createComment(e.detail?`wf-hole: ${e.detail}`:"wf-hole");n&&n.replaceWith(o),t.nodes.set(e.id,o)}}function Ut(t,e){let n=t.nodes.get(e.id);if(!n||n.isConnected)return;let o=t.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(n,s),n.nodeType===1&&t.refRegistry.mount(e.id,n);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(n),n.nodeType===1&&t.refRegistry.mount(e.id,n);return}if(e.ref){let r=t.nodes.get(e.ref)??null;r&&r.parentNode===o?o.insertBefore(n,r.nextSibling):r?o.appendChild(n):o.insertBefore(n,o.firstChild)}else o.insertBefore(n,o.firstChild);n.nodeType===1&&t.refRegistry.mount(e.id,n)}}function $t(t,e){let n=t.nodes.get(e.id);if(n){if(!e.noMove){let o=t.parentOf(e);if(!o)return;let r=e.ref?t.nodes.get(e.ref)??null:null;r?o.insertBefore(n,r.nextSibling):e.first?o.insertBefore(n,o.firstChild):o.appendChild(n)}t.remapSubtree(e.id,e.newId)}}function Kt(t,e){t.clearNodeRefs(e.id),t.eventRegistry.remove(e.id),t.nodes.get(e.id)?.remove();let n=e.id+".";for(let o of[...t.nodes.keys()])o.startsWith(n)&&(t.clearNodeRefs(o),t.eventRegistry.remove(o),t.nodes.delete(o));t.nodes.delete(e.id)}function Ft(t,e){let n=t.nodes.get(e.id);n&&n.nodeType===3&&(n.textContent=e.value)}function Bt(t,e){let n=t.nodes.get(e.id);if(!n||n.nodeType!==1)return;let o=n;if(e.key==="ref"){let r=t.refRegistry.refs.get(e.id);if(e.value===void 0){t.refRegistry.set(e.id,void 0,r),t.refRegistry.refs.delete(e.id);return}t.refRegistry.set(e.id,e.value,r),o.isConnected&&t.refRegistry.mount(e.id,o);return}if(ee.test(e.key)){let r=de(e.key);r&&(e.value===void 0?t.eventRegistry.removeEvent(e.id,r):t.eventRegistry.set(e.id,r,e.value));return}nt(t.eventRegistry,e.id,o,e.key,e.value,e.prev)}function qt(t,e){let n=t.nodes.get(e.id);n&&n.nodeType===1&&typeof e.fn=="function"&&(t.refRegistry.set(e.id,e.fn),t.refRegistry.mount(e.id,n))}function _t(t,e){t.clearNodeRefs(e.id)}function jt(t,e){let n=t.registry?.get(e.compId);n&&(n.phase="mounted")}function Wt(t,e){t.registry&&Z(e.compId,t.registry)}function zt(t,e){if(e.full&&t.absorb.end(),e.full&&t.touched.size>0)for(let[n,o]of[...t.nodes])t.touched.has(n)||(t.clearNodeRefs(n),t.eventRegistry.remove(n),o.remove(),t.nodes.delete(n));t.touched.clear()}function rt(t,e){switch(e.op){case"create":Pt(t,e);break;case"createText":At(t,e);break;case"createAnchor":Dt(t,e);break;case"insert":Ut(t,e);break;case"move":$t(t,e);break;case"remove":Kt(t,e);break;case"setText":Ft(t,e);break;case"setProp":Bt(t,e);break;case"ref":qt(t,e);break;case"unref":_t(t,e);break;case"mount":jt(t,e);break;case"unmount":Wt(t,e);break;case"done":zt(t,e);break;case"close":break}}var te=class{nodes=new Map;touched=new Set;eventRegistry;refRegistry=new ye;absorb=new he;container;doc;registry;devVerify=null;constructor(e,n,o){this.container=e,this.doc=n,this.registry=o??null,this.eventRegistry=new ge(n,e)}dispose(){if(this.eventRegistry.dispose(),this.refRegistry.dispose(),this.registry)for(let e of[...this.registry.keys()].reverse()){let n=this.registry.get(e);if(n){for(let o of[...n.onUnmounts].reverse())try{o()}catch{}this.registry.delete(e)}}}clearNodeRefs(e){this.refRegistry.unmount(e)}remapSubtree(e,n){let o=(r,s)=>{let i=r.get(s);i!==void 0&&(r.delete(s),r.set(n+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(n+r.slice(e.length));s&&s.nodeType===1&&s.setAttribute("data-wf-id",n+r.slice(e.length))}this.refRegistry.remap(e,n);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(n+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(n+r.slice(e.length),s)}}}parentOf(e){if(e.parent==="root")return this.container;let n=this.nodes.get(e.parent);if(n)return n;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){rt(this,e),this.devVerify&&this.devVerify(e,this)}};var ve="__wf_portal";function Re(t){return`${ve}-${t}`}function Gt(t){return typeof t=="function"?t():t}function it(t){return t?typeof t=="function"?t():t:null}function st(t,e){let n={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=t.getBrowser()?.window,r=t.getBrowser()?.document,s=()=>{if(!r)return null;if(n.container)return n.container;let h=r.getElementById(ve);h||(h=r.createElement("div"),h.id=ve,r.body.appendChild(h));let b=e.key??"popup",T=r.getElementById(Re(b));return T?n.container=T:(n.container=r.createElement("div"),n.container.id=Re(b),h.appendChild(n.container)),n.container},i=0,a=()=>{if(n.disposed||!n.open)return;let h=it(e.anchor);if(!h||!n.panel){i++<10&&queueMicrotask(a);return}if(!o)return;let b=n.panel,T=b.offsetWidth||b.getBoundingClientRect().width,O=b.offsetHeight||b.getBoundingClientRect().height;if((T===0||O===0)&&i++<10){typeof o.requestAnimationFrame=="function"?o.requestAnimationFrame(a):queueMicrotask(a);return}let P=typeof e.placement=="function"?e.placement():e.placement??"bottom";if(e.position){let A=e.position();if(A&&typeof A.x=="number"&&typeof A.y=="number"){if(n.pos={top:A.y,left:A.x,width:A.width},n.applier){let fe=u(n.tree);fe&&d(fe)}return}}let B=_e(h,o,T,O,P,e.gap??8,e.margin??8,e.center??!0);if(!B){i++<10&&queueMicrotask(a);return}if(i=0,n.pos=B,n.applier){let A=u(n.tree);A&&d(A)}},l=h=>{if(n.panel=h,h&&n.open&&e.positioning!=="none"&&(o&&typeof o.requestAnimationFrame=="function"?o.requestAnimationFrame(a):queueMicrotask(a)),h&&e.presence){let b=T=>{n.phase==="exit"&&f()};h.addEventListener("animationend",b),t.onUnmount(()=>h.removeEventListener("animationend",b))}},u=h=>{if(!h)return null;let b=h;e.mask&&(b=Te("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:A=>{e.maskClosable!==!1&&A.target===A.currentTarget&&m()}},e.maskCentered?{...b,props:{...b.props??{}}}:Te("div",{class:"wf-popup-mask-inner"},b)));let T=b.props??{},O=e.positioning==="none"||String(T.class??"").includes("mask")?T.class??"":["wf-popup",T.class].filter(Boolean).join(" "),P=e.positioning==="none"?{...T.style??{},position:"fixed"}:{...T.style??{},position:"fixed",top:`${n.pos.top}px`,left:`${n.pos.left}px`,...n.pos.width!==void 0?{width:`${n.pos.width}px`}:{}};return{...b,props:{...T,class:O,style:P,ref:l}}},d=h=>{let b=++n.version,T=n.tree;n.tree=h,n.chain=n.chain.then(async()=>{if(n.disposed||b!==n.version)return;let O=n.applier;if(!O)return;let P=O.registry;if(!P)return;let B=t.getSharedContext()??{},fe=(T?me(T,h,B,P):be(h,B,P)).getReader();for(;;){let{value:Et,done:kt}=await fe.read();if(kt)break;if(n.disposed||b!==n.version)return;O.apply(Et)}}).catch(O=>{console.error("[popup] render error:",O)})},p=()=>{n.disposed||(n.disposed=!0,n.applier&&(n.applier.dispose(),n.applier=null),n.tree=null,n.container&&(n.container.remove(),n.container=null))},f=()=>{n.disposed||(n.open=!1,n.phase="closed",c(),p(),e.onClose?.())},m=()=>{!n.open||n.disposed||(e.presence?(n.phase="exit",n.panel&&o&&!je(n.panel,o)&&f(),n.panel||f()):f())},k={value:""},w={value:null},g={value:!1},c=()=>{g.value&&(r?.body&&(r.body.style.overflow=k.value),k.value="",w.value&&(w.value.focus?.(),w.value=null),g.value=!1)},y=()=>{g.value=!0,e.lockScroll&&r?.body&&(k.value=r.body.style.overflow,r.body.style.overflow="hidden"),e.trapFocus&&o&&(w.value=o.document.activeElement,t.scheduleAfterRender(()=>{let h=n.panel;h&&(h.querySelector?.("input, button, [tabindex], select, textarea")??h).focus?.()}))},x=null;e.trapFocus&&o&&(x=h=>{if(h.key!=="Tab"||!n.open||!n.panel)return;let b=Array.from(n.panel.querySelectorAll?.("input, button, [tabindex], select, textarea")??[]).filter(B=>!B.disabled&&B.offsetParent!==null);if(b.length===0)return;let T=b[0],O=b[b.length-1],P=o?.document.activeElement;h.shiftKey&&(P===T||P===n.panel||!n.panel.contains(P))?(h.preventDefault(),O.focus()):!h.shiftKey&&(P===O||!n.panel.contains(P))&&(h.preventDefault(),T.focus())},o.addEventListener("keydown",x));let v=h=>{if(!n.open||(e.closeOnOutside??!0)===!1)return;let b=h.target,T=it(e.anchor);b&&T?.contains(b)||b&&n.panel?.contains(b)||m()},C=h=>{n.open&&(e.closeOnEscape??!0)&&h.key==="Escape"&&m()};o&&(o.addEventListener("mousedown",v),o.addEventListener("keydown",C)),t.onUnmount(()=>{o&&(o.removeEventListener("mousedown",v),o.removeEventListener("keydown",C),x&&o.removeEventListener("keydown",x)),f()});let F=()=>{if(n.open||n.disposed)return;n.open=!0,n.phase="open";let h=s();if(!h)return;(e.trapFocus||e.lockScroll)&&y();let b=ne();n.applier=new te(h,r,b);let T=Gt(e.content);T!=null?d(u(T)):f()},S={close:m,update(h){if(!(n.disposed||!n.open)){if(h==null){m();return}if(e.position){let b=e.position();b&&typeof b.x=="number"&&typeof b.y=="number"&&(n.pos={top:b.y,left:b.x,width:b.width})}d(u(h))}},refresh(){if(n.disposed||!n.open||!n.tree)return;if(e.position){let b=e.position();b&&typeof b.x=="number"&&typeof b.y=="number"&&(n.pos={top:b.y,left:b.x,width:b.width})}let h=u(n.tree);h&&d(h)},get open(){return n.open}};return F(),S}function at(t,e,n){let o=t.nextHookIndex(),r=t.getHookState(o)??{value:n};t.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,t.requestRender())}}}function Yt(t,e,n){if(typeof t=="string")return t==="win"||t==="window"?e:n?n.querySelector(t)??e:e;if(t&&typeof t=="object"&&!("nodeType"in t)){let o=t;if(typeof o.getScroller=="function"){let r=o.getScroller();return r||e}return o.root?typeof o.root=="string"?n?n.querySelector(o.root)??e:e:o.root:e}return e}function lt(t,e){let n=t.nextHookIndex(),o=t.getHookState(n)??{y:0,x:0,raf:null,handler:null,retries:0};t.setHookState(n,o);let r=t.getBrowser()?.window,s=t.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 Yt(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&&t.scheduleAfterRender(l);return}let d=()=>{o.raf||(o.raf=r.requestAnimationFrame(()=>{o.raf=null,a(u),t.requestRender()}))};u.addEventListener("scroll",d,{passive:!0}),o.handler=d,t.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 dt(t,e){let n=t.nextHookIndex(),o=t.getHookState(n)??{isIn:!1,io:null,retries:0,ready:!1};t.setHookState(n,o);let s=t.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,p=f=>{if(!s||!f||o.io)return;let m=new s(k=>{let w=k[0];w&&w.isIntersecting!==o.isIn&&(o.isIn=w.isIntersecting,i?.onChange?.(w,w.isIntersecting),t.requestRender())},{root:d??void 0,rootMargin:l,threshold:u});m.observe(f),o.io=m,o.ready=!0,t.onUnmount(()=>o.io?.disconnect())};if(s&&!o.io){let f=typeof a=="function"?a():a??null;f?p(f):a!==void 0&&o.retries++<10&&t.scheduleAfterRender(()=>p(typeof a=="function"?a():a??null))}return{get isIn(){return o.isIn},get ready(){return o.ready},ref:f=>{f?p(f):o.io?.disconnect()},observe:f=>p(f),disconnect:()=>{o.io?.disconnect(),o.io=null}}}function ut(t,e,n){let o=t.nextHookIndex(),r=t.getHookState(o)??{keyword:"",selectedLabel:"",composing:!1};t.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(${n?.name??""}) \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),e.onChange?.(i)):(r.keyword=i,t.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 ft(t,e){let n={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:n,dragProps:n,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 Ie(t,e){let n=`media:${e}`,o=t.getInstanceData().get(n);o||(o={matches:!1,mql:null},t.getInstanceData().set(n,o));let r=t.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,t.requestRender()};i.addEventListener("change",a),o.mql=i,t.onUnmount(()=>i.removeEventListener("change",a))}return()=>o.matches}function pt(t,e){let n=Object.entries(e).sort((o,r)=>o[1]-r[1]);return()=>{let o=n[0]?.[0]??"default";for(let[r,s]of n)Ie(t,`(min-width: ${s}px)`)()&&(o=r);return o}}var Jt=0,Me=()=>`m${Date.now().toString(36)}${(Jt++).toString(36)}`;function ct(t,e){let n=t.nextHookIndex(),o=t.getHookState(n)??{messages:[],status:"idle",subs:new Set,controller:null,seq:0,input:"",error:null,usage:null,step:null};if(t.setHookState(n,o),o.messages.length===0){let a=[];e.system&&a.push({id:Me(),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:Me(),role:"user",content:a};o.messages=[...o.messages,u];let d={id:Me(),role:"assistant",content:"",status:"streaming"};o.messages=[...o.messages,d],o.status="streaming",r();let p=new AbortController;o.controller=p;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:p.signal});if(!f.ok||!f.body)throw new Error(`[vdom] chat \u8BF7\u6C42\u5931\u8D25 ${f.status}`);let m=f.body.getReader(),k=new TextDecoder,w="";for(;;){let{value:g,done:c}=await m.read();if(c)break;w+=k.decode(g,{stream:!0});let y=w.split(`
|
|
2
|
-
`);w=y.pop()??"";for(let x of y){if(!x.trim())continue;let v=s(x);v&&(v.content&&(d.content+=v.content,r()),v.toolCalls&&(d.toolCalls=[...d.toolCalls??[],...v.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(p=>({...p,toolCalls:p.toolCalls?.map(f=>d||f.approved?f:(d=!0,{...f,approved:a!=="rejected",feedback:l,...a==="modified"&&u?{args:u}:{}}))})),r()}};return i}function Xt(t){let e=t.getBrowser()?.window;return e?.matchMedia?e.matchMedia.bind(e):typeof matchMedia=="function"?matchMedia.bind(void 0):null}function He(t){let e=Xt(t);return!!(e&&e("(prefers-reduced-motion: reduce)").matches)}function mt(t,e,n){let o=t.getBrowser()?.window,r=He(t),s=n?.duration??400;if(s<=0)return{value:e,reset:()=>{}};let i=n?.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:()=>{}},p=()=>{t.requestRender()},f=m=>{if(l=m,r){d.value=m,p();return}if(m===d.value)return;if(!o){d.value=m;return}a&&o.cancelAnimationFrame(a);let k=d.value,w=o.performance.now(),g=c=>{let y=Math.min(1,(c-w)/s);d.value=Math.round(k+(m-k)*i(y)),y<1?a=o.requestAnimationFrame(g):a=void 0,p()};a=o.requestAnimationFrame(g)};return d.reset=m=>{m===l&&a||f(m)},t.onUnmount(()=>{a&&o&&(o.cancelAnimationFrame(a),a=void 0)}),d.reset(e),d}function gt(t,e){let n=t.getBrowser()?.window,o=0,r=0,s=!1,i=0,a=p=>{s&&e.onMove(p,{x:p.clientX-o,y:p.clientY-r})},l=p=>{s&&p.pointerId===i&&(s=!1,n&&(n.removeEventListener("pointermove",a),n.removeEventListener("pointerup",l),n.removeEventListener("pointercancel",u)),e.onEnd?.(p))},u=p=>{!s||p.pointerId!==i||(s=!1,n&&(n.removeEventListener("pointermove",a),n.removeEventListener("pointerup",l),n.removeEventListener("pointercancel",u)),e.onEnd?.(p))},d=p=>{s||(p.preventDefault(),s=!0,i=p.pointerId,o=p.clientX,r=p.clientY,n&&(n.addEventListener("pointermove",a),n.addEventListener("pointerup",l),n.addEventListener("pointercancel",u)),e.onStart?.(p))};return t.onUnmount(()=>{s&&n&&(n.removeEventListener("pointermove",a),n.removeEventListener("pointerup",l),n.removeEventListener("pointercancel",u),s=!1)}),{onPointerDown:d}}function yt(t){let e=t.getBrowser()?.window,n=e?.visualViewport,o=n?.height??e?.innerHeight??0,r=n?.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,t.requestRender()};if(e){let l=e.visualViewport;l?.addEventListener?(l.addEventListener("resize",a),l.addEventListener("scroll",a),t.onUnmount(()=>{l.removeEventListener("resize",a),l.removeEventListener("scroll",a)})):(e.addEventListener("resize",a),t.onUnmount(()=>e.removeEventListener("resize",a)))}return i}function ht(t){return{useExternal(e){let n=t.getInstanceData(),o=n.get(e);if(!o){let r=e.subscribe(()=>t.requestRender());t.onUnmount(r),o={unsub:r},n.set(e,o)}return()=>e.state},signal:e=>Ke(e),hold:e=>t.onUnmount(e),useStableRef:(e,n)=>Fe(t,e,n),useOpen:(e,n)=>Be(t,e,n),onUnmount:e=>t.onUnmount(e),useGlobalKey:(e,n)=>qe(t,e,n),openPopup:e=>st(t,e),usePopupPosition:e=>We(t,e),useControlled:(e,n)=>at(t,e,n),useScrollPosition:e=>lt(t,e),useInView:e=>dt(t,e),useControlledInput:(e,n)=>ut(t,e,n),useDragDrop:e=>ft(t,e),useMedia:e=>Ie(t,e),useBreakpoint:e=>pt(t,e),useChat:e=>ct(t,e),useTween:(e,n)=>mt(t,e,n),useDrag:e=>gt(t,e),useVisualViewport:()=>yt(t),useReducedMotion:()=>He(t)}}function Le(t,e,n){return e<=0?t:new Promise((o,r)=>{let s=setTimeout(()=>{r(new Error(`[vdom] \u5F02\u6B65\u8D85\u65F6\uFF08${e}ms\uFF09: ${n}`))},e);t.then(i=>{clearTimeout(s),o(i)},i=>{clearTimeout(s),r(i)})})}var Oe=0;function vt(){Oe++}function bt(){Oe>0&&Oe--}function Zt(t){return M(t)?{kind:"hole"}:Array.isArray(t)?{kind:"array",items:t}:{kind:"vnode",v:t}}function W(t){return t.kind==="hole"?null:t.kind==="array"?t.items:t.v}function ne(){let t=new Map;return{get:e=>t.get(e),set:(e,n)=>{t.set(e,n)},delete:e=>{t.delete(e)},keys:()=>[...t.keys()],asyncTimeout:15e3}}async function _(t,e,n,o,r,s,i,a,l){let u=t.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=W(d.lastOutput);N(g,j(g,r,r),r,l,i)}d=void 0}let p=!d;if(!d){let g=[],c=new Map,y={n:0},x=new Map,v=Object.create(s);v.onUnmount=S=>{g.push(S)},v.ui=ht({requestRender:()=>{v.render?.()},onUnmount:S=>{g.push(S)},getBrowser:()=>s.browser??null,nextHookIndex:()=>y.n++,getHookState:S=>c.get(S),setHookState:(S,h)=>{c.set(S,h)},getInstanceData:()=>x,scheduleAfterRender:S=>s.afterRender?.(S),getSharedContext:()=>s??null});let C={type:u,renderFn:(()=>null),onUnmounts:g,hookSeq:y,hookStates:c,renderBase:0,phase:"mounting"};i.set(r,C);let F;try{let S=u(t.props,v);F=await Le(Promise.resolve(S),i.asyncTimeout,`mount(${r})`)}catch(S){i.delete(r);for(let h of g.reverse())try{h()}catch(b){console.error("[vdom] mount \u6E05\u7406:",b)}throw S}d={type:u,renderFn:F,onUnmounts:g,hookSeq:y,hookStates:c,renderBase:0,phase:"mounted"},d.renderBase=y.n,i.set(r,d)}d.hookSeq.n=d.renderBase;let f;try{vt();let g;try{g=d.renderFn(t.props)}finally{bt()}f=await Le(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=Zt(f);let m=Array.isArray(f),k=typeof f?.type=="function",w=M(f);return await a(f,m||k||w?r:e,m||k||w?0:n,o),p}function Z(t,e){let n=[...e.keys()].filter(o=>o===t||o.startsWith(t+".")).reverse();for(let o of n){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 Ne(t,e,n){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}t(i)},s=async(i,a,l,u)=>{let d=E(a,l);switch(U(i)){case"text":{let p=De(i);r({op:"createText",id:d,value:p}),r({op:"insert",id:d,parent:a,ref:u});return}case"hole":{oe(r,d,a,u);return}case"array":{let p=i;q(p,`\u6570\u7EC4\u5C55\u5F00\uFF08${a}\uFF09`);let f=l,m=u;for(let k of p){await s(k,a,f,m);let w=I(k);m=E(a,f+w-1),f+=w}return}case"fragment":{let p=V(i);q(p,`Fragment \u5C55\u5F00\uFF08${a}\uFF09`);let f=l,m=u;for(let k of p){await s(k,a,f,m);let w=I(k);m=E(a,f+w-1),f+=w}return}case"element":{await $e(i,d,a,u,r,s);return}case"component":{let p=i,f=p.key!==null?H(a,p.key):d;await _(p,a,l,u,f,e,n,s,t)&&t({op:"mount",compId:f});return}case"invalid":{console.warn(`[vdom] \u975E\u6CD5\u5B50\u8282\u70B9\u2014\u2014${ke(i)}`),oe(r,d,a,u,ke(i));return}}};return s}function be(t,e,n){let o=e??{},r=n??ne();return new ReadableStream({async start(s){await Ne(a=>s.enqueue(a),o,r)(t,"root",0,null),s.enqueue({op:"done",full:!0}),s.close()}})}function xe(t,e,n){if(t!==e)throw new Error(`${n??"assertEqual"}: ${JSON.stringify(t)} !== ${JSON.stringify(e)}`)}function xt(t,e){if(!t)throw new Error(e??"assertOk")}function wt(t){return t.nodeType===1?"element":t.nodeType===3?"text":t.nodeType===8?"hole":"comment"}function Fr(t,e,n="\u540C\u6784\uFF08childNodes \u957F\u5EA6 + \u4F4D\u7F6E + \u7C7B\u578B\uFF09"){xe(t.childNodes.length,e.length,`${n}\u2014\u2014\u957F\u5EA6\uFF08\u584C\u7F29/\u591A\u4F59\u5373 bug\uFF09`);for(let o=0;o<e.length;o++)xe(wt(t.childNodes[o]),e[o],`${n}\u2014\u2014\u4F4D\u7F6E ${o}\uFF08\u7B2C i \u9879 \u27F7 childNodes \u7B2C i \u4E2A\uFF09`)}function Br(t,e,n,o=`\u4F4D\u7F6E ${e}`){xt(t.childNodes[e],`${o}\u2014\u2014\u5B58\u5728`),xe(wt(t.childNodes[e]),n,`${o}\u2014\u2014\u7C7B\u578B`)}function qr(t,e,n,o="\u590D\u7528\u9879 DOM \u5F15\u7528\u4FDD\u6301\uFF08\u4E0D\u91CD\u5EFA\uFF09"){let r=t.querySelector(e);xt(r,`${o}\u2014\u2014\u65B0\u9879\u5B58\u5728`),xe(r,n,o)}async function _r(t,e,n,o,r=2,s="\u5F80\u8FD4\u53EF\u9006\uFF08\u72B6\u6001\u4E0D\u6F02\u79FB\uFF09"){for(let i=0;i<r;i++)t(),await o(n),t(),await o(e)}async function Yr(t,e,n){let o=await t(e,n);return typeof o=="function"?o(e):o}async function Jr(t,e,n){let o=await t(e,n);return()=>typeof o=="function"?o(e):o}function we(t,e){if(t==null||typeof t!="object")return;if(Array.isArray(t)){for(let o of t)we(o,e);return}e(t);let n=t?.props?.children;n!=null&&we(n,e)}function Xr(t,e){let n;return we(t,o=>{!n&&e(o)&&(n=o)}),n}function Qr(t,e){let n=[];return we(t,o=>{typeof o?.props?.class=="string"&&o.props.class.split(" ").includes(e)&&n.push(o)}),n}var Ee=new WeakMap;async function en(t,e,n){let o=t.ownerDocument;t.innerHTML="";let r=ne(),s=new te(t,o,r);Ee.set(t,{registry:r,applier:s});let i=be(e,n??{},r);for await(let a of i)s.apply(a)}async function Zr(t,e,n,o,r){let s=Ee.get(t);if(o==null)return t.innerHTML="",null;if(s){let i=me(n,o,r??{},s.registry);for await(let a of i)s.applier.apply(a)}else await en(t,o,r);return o}function ei(t){Ee.get(t)?.applier.dispose(),Ee.delete(t)}function ti(t,e){return Promise.resolve(t)}export{Fr as assertIsomorphic,qr as assertKept,_r as assertRoundTrip,Br as assertSlot,ti as buildToDom,ei as disposeToDom,Qr as findByClass,Xr as findVNode,Jr as mountComponent,en as mountToDom,Zr as patchToDom,Yr as renderVNode,wt as shapeOf,we as walkVNode};
|
|
1
|
+
var bn=(n,e,t)=>()=>{if(t)throw t[0];try{return n&&(e=n(n=0)),e}catch(o){throw t=[o],o}};function Ln(n,e){return!n.startsWith("aria-")||typeof e!="boolean"?null:e?"true":"false"}function lt(n,e,t){if(e==="innerHTML"||e==="textContent"||e==="value"){n[e]=t;return}if(t==null){n.removeAttribute(e);return}let o=Ln(e,t);if(o!==null){n.setAttribute(e,o);return}if(Hn.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 Hn,Ft=bn(()=>{"use strict";Hn=new Set(["draggable","contenteditable","spellcheck"])});var Se=globalThis;Se.__wfErrState||(Se.__wfErrState={errState:new Map,totalErrors:0});var{errState:je,totalErrorsRef:_e}={errState:Se.__wfErrState.errState,totalErrorsRef:Se.__wfErrState},vn={get:()=>_e.totalErrors,inc:()=>{_e.totalErrors++},reset:()=>{_e.totalErrors=0}};function ge(n,e){vn.inc();let t=je.get(n);if(t){t.count++;return}je.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 qe(n){je.delete(n)}var Ne=()=>{},Y=class{_subscribe;constructor(e){this._subscribe=e}subscribe(e){let t=hn(e),o=!1,r=null,i={next:l=>{o||t.next(l)},error:l=>{o||(o=!0,t.error(l),r?.())},complete:()=>{o||(o=!0,t.complete(),r?.())}},s=this._subscribe(i);r=typeof s=="function"?s:s?()=>s.unsubscribe():Ne,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 hn(n){return{next:n?.next??Ne,error:n?.error??Ne,complete:n?.complete??Ne}}function R(n){return new Y(n)}var ze=()=>{},N=class{subs=new Set;closed=!1;asObservable(){return R(e=>this.closed?(e.complete(),ze):(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 R(e=>this.closed?(e.complete(),ze):(e.next(this.value),this.subs.add(e),()=>{this.subs.delete(e)}))}};function Ve(n,e){return R(t=>{let o=!0,r=()=>{o&&(o=!1,t.complete())},i=e?.signal;if(i){if(i.aborted)return r(),ze;i.addEventListener("abort",r,{once:!0})}return n.then(s=>{o&&(o=!1,t.next(s),t.complete())},s=>{o&&(o=!1,t.error(s))}),()=>{o=!1,i&&i.removeEventListener("abort",r)}})}function Ye(n,e){return R(t=>{let o=n(r=>t.next(r));return e&&t.next(e()),()=>{typeof o=="function"&&o()}})}function Ge(n){return e=>new Y(t=>e.subscribe({next:o=>t.next(n(o)),error:o=>t.error(o),complete:()=>t.complete()}))}function Je(n){return e=>new Y(t=>e.subscribe({next:o=>{n(o)&&t.next(o)},error:o=>t.error(o),complete:()=>t.complete()}))}function be(n,e){let t=e;return o=>new Y(r=>o.subscribe({next:i=>{t=n(t,i),r.next(t)},error:i=>r.error(i),complete:()=>r.complete()}))}function Xe(n){return e=>new Y(t=>{let o=null,r=!1,i=e.subscribe({next:s=>{o?.unsubscribe();let a=!1,l=n(s).subscribe({next:d=>t.next(d),error:d=>t.error(d),complete:()=>{a=!0,o=null}});o=a?null:l},error:s=>t.error(s),complete:()=>{r=!0,o||t.complete()}});return()=>{i.unsubscribe(),o?.unsubscribe()}})}function Ze(n,e){let t=e?.trailing??!1;return o=>new Y(r=>{let i=null,s=!1,a,l=!1,d=!1,u=m=>{d||r.next(m)},f=()=>{i=null,t&&l&&(l=!1,u(a)),s=!1},c=o.subscribe({next:m=>{s?t&&(a=m,l=!0):(s=!0,u(m),i=setTimeout(f,n))},error:m=>{d=!0,i&&clearTimeout(i),r.error(m)},complete:()=>{d=!0,i&&clearTimeout(i),r.complete()}});return()=>{d=!0,i&&clearTimeout(i),c.unsubscribe()}})}function yn(n){let e=new Set,t=new N,o=n,r=()=>{for(let i of[...e])i();t.next(typeof o=="object"&&o!==null?{...o}:o)};return{get state(){return o},subscribe(i){return e.add(i),()=>{e.delete(i)}},set(i){typeof o=="object"&&o!==null&&!Array.isArray(o)&&typeof i=="object"&&i!==null?o={...o,...i}:o=i,r()},update(i){let s=i(o);s!==void 0&&(typeof o!="object"||o===null||s!==o)&&(o=s),r()},notify:r,changes$:t.asObservable()}}function vt(n){let e=yn(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 ne(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 K(n,e,t,o){let r=n.getInstanceData(),i=r.get(e);if(!i){let s=t,a=!0,l=new N,d=e.subscribe({next:c=>{let m=c!==s;s=c,m&&!a&&l.next()},error:c=>{console.error("[vdom] useObservable:",c)}});a=!1;let f=(o?.throttleMs&&o.throttleMs>0?l.asObservable().pipe(Ze(o.throttleMs,{trailing:!0})):l.asObservable()).subscribe({next:()=>{ne("obs:next",String(s)+" \u2192 req:render"),n.requestRender()}});n.onUnmount(()=>{d.unsubscribe(),f.unsubscribe()}),i={get:()=>s},r.set(e,i)}return()=>i.get()}function ht(n,e,t){if(typeof e=="function"){let r=e;return s=>{s?r(s):t?.()}}return{current:e}}function yt(n,e,t){let o=typeof e=="object"?e:void 0,r=typeof e=="boolean"?e:!1,i=o??t,s=n.nextHookIndex(),a=n.getHookState(s)??{open:r};n.setHookState(s,a);let l=i?.open!==void 0;return{get open(){return i?.open??a.open},setOpen(d){l?(i?.onOpenChange||console.warn(`[vdom] useOpen${o?.name?`(${o.name})`:""} \u53D7\u63A7\u7F3A onOpenChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),i?.onOpenChange?.(d)):(a.open=d,n.requestRender())},toggle(){this.setOpen(!this.open)}}}function xt(n,e,t){let o=t?e:(()=>!0),r=t??e,i=n.getBrowser()?.window;if(!i)return()=>{};let s=l=>{if(typeof o=="string"){if(l.key!==o)return}else if(!o(l))return;r(l)};i.addEventListener("keydown",s);let a=()=>i.removeEventListener("keydown",s);return n.onUnmount(a),a}function Tt(n,e,t,o,r,i,s,a){let l=n.getBoundingClientRect();if(l.width===0&&l.height===0)return null;let d=e.innerWidth,u=e.innerHeight,f,c;switch(r){case"bottom":f=l.bottom+i,c=a?l.left+l.width/2-t/2:l.left;break;case"top":f=l.top-o-i,c=a?l.left+l.width/2-t/2:l.left;break;case"left":f=a?l.top+l.height/2-o/2:l.top,c=l.left-t-i;break;case"right":f=a?l.top+l.height/2-o/2:l.top,c=l.right+i;break}return c+t>d-s&&(c=d-t-s),c<s&&(c=s),f+o>u-s&&(f=u-o-s),f<s&&(f=s),{top:f,left:c}}function Ct(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 wt(n,e){let t=new N,o=K(n,xn(n,e,t),{top:0,left:0});return{get top(){return o().top},get left(){return o().left},refresh:()=>{t.next()}}}function xn(n,e,t){let o=n.getBrowser()?.window;return R(r=>{if(!o)return r.next({top:0,left:0}),r.complete(),()=>{};let i,s=()=>{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=()=>{i===void 0&&(i=o.requestAnimationFrame(()=>{i=void 0,s()}))};o.addEventListener("scroll",a,!0),o.addEventListener("resize",a),s();let l=t?.subscribe({next:()=>s()});return()=>{l?.unsubscribe(),i!==void 0&&o.cancelAnimationFrame(i),o.removeEventListener("scroll",a,!0),o.removeEventListener("resize",a)}})}function kt(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 Et(n){return kt(n?.key)}function Ot(n){let e={...n??{}};return delete e.key,e}function Qe(n,e,...t){let o=Ot(e);return t.length===1?o.children=t[0]:t.length>1&&(o.children=t),{type:n,props:o,key:Et(e)}}var Tn=Symbol("vdom-fragment");function X(n){return n.type===Tn}function H(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 I(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)&&X(n)?H(n).reduce((e,t)=>e+I(t),0):1}var St="pos:";function W(n,e){return`${n}.k${e.replace(/%/g,"%25").replace(/\./g,"%2E")}`}function A(n){return n==null||typeof n=="boolean"||typeof n=="string"||typeof n=="number"||Array.isArray(n)?null:n.key}function Cn(n){return A(n)!==null}function et(n){return`${St}${n}`}function Nt(n){return n.startsWith(St)}function ve(n,e){let t=new Set;for(let o of n){let r=A(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 Vt(n,e){if(n.length<2)return;let t=n.some(r=>typeof r?.type=="function"),o=n.some(r=>!Cn(r)&&typeof r?.type=="function");if(t&&o){let r=n.map(i=>{let s=i;if(s==null)return"null";if(typeof s=="boolean")return"bool";if(typeof s=="string"||typeof s=="number")return"text";if(Array.isArray(s))return"arr";if(typeof s.type=="function"){let a=s.type.name;return"comp"+(a?":"+a:"")}return"el"+(s.key?`.k{${String(s.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 C(n,e){return`${n}.${e}`}function he(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 Mt(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 tt(n){return n==null?"null/undefined":typeof n=="object"?`object\uFF08type: ${typeof n.type}\uFF09`:typeof n}function wn(n,e,t,o){return[{op:"createAnchor",id:n,...o!==void 0?{detail:o}:{}},{op:"insert",id:n,parent:e,ref:t}]}function nt(n,e,t,o,r){for(let i of wn(e,t,o,r))n(i)}function _(n){return n===""?"hole":typeof n=="string"||typeof n=="number"?"text":Mt(n)?"hole":Array.isArray(n)?"array":typeof n.type=="string"?"element":X(n)?"fragment":typeof n.type=="function"?"component":(Rt(n),"invalid")}function Me(n){return typeof n=="string"||typeof n=="number"?String(n):null}function F(n){return _(n)==="hole"}function Q(n){return _(n)==="text"}function Z(n){if(n==null)return"hole";let e=_(n);return e==="invalid"?"hole":e}function It(n,e,t,o,r){let i=he(n.props),s=he(e.props);for(let[a,l]of Object.entries(s))a==="value"&&r?.formControl?o({op:"setProp",id:t,key:a,value:l}):i[a]!==l&&o({op:"setProp",id:t,key:a,value:l});for(let a of Object.keys(i))a in s||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 le(n,e,t){return typeof n?.type=="function"?C(e,0):Array.isArray(n)?e:F(n)?C(e,0):t}function ye(n,e,t){return typeof n?.type=="function"||Array.isArray(n)?e:t}function U(n,e,t,o,r){if(F(n)){o({op:"remove",id:e});return}if(Q(n)){o({op:"remove",id:e});return}if(Array.isArray(n)){let l=0;for(let d of n)U(d,C(e,l),e,o,r),l+=I(d);return}let i=n;if(X(i)){let l=Number(e.slice(t.length+1)),d=H(i),u=l;for(let f of d)U(f,C(t,u),t,o,r),u+=I(f);return}if(typeof i.type=="function"){let l=i.key!==null?W(t,i.key):e;o({op:"unmount",compId:l});let d=r?.get(l)?.lastOutput;if(d!==void 0){let u=oe(d),f=le(u,l,e),m=u!==null&&typeof u=="object"&&!Array.isArray(u)&&X(u)?e.slice(0,e.lastIndexOf(".")):ye(u,l,l);U(u,f,m,o,r)}}let s=H(i),a=0;s.forEach(l=>{let d=C(e,a);l!==null&&typeof l!="string"&&typeof l!="number"&&typeof l!="boolean"&&!Array.isArray(l)?U(l,d,e,o,r):o({op:"remove",id:d}),a+=I(l)}),o({op:"remove",id:e})}var ue=(n,e,t)=>{t.emit({op:"remove",id:t.oldId}),t.emitNode(e,t.parent,t.index,t.ref)};var de=(n,e,t)=>{t.emit({op:"remove",id:t.oldId}),t.emitNode(e,t.parent,t.index,t.ref)};var fe=(n,e,t)=>{U(n,t.oldId,t.parent,t.emit,t.registry),t.emitNode(e,t.parent,t.index,t.ref)};var ce=(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=oe(o);U(r,le(r,t.oldCompId??"",C(t.parent,t.index)),ye(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 j=(n,e,t)=>{let o=Array.isArray(n)?n:H(n),r=t.index;for(let i of o)U(i,C(t.parent,r),t.parent,t.emit,t.registry),r+=I(i);t.emitNode(e,t.parent,t.index,t.ref)};var kn={text:{text:null,hole:ue,element:ue,component:ue,fragment:ue,array:ue},hole:{text:de,hole:null,element:de,component:de,fragment:de,array:de},element:{text:fe,hole:fe,element:null,component:fe,fragment:fe,array:fe},component:{text:ce,hole:ce,element:ce,component:null,fragment:ce,array:ce},fragment:{text:j,hole:j,element:j,component:j,fragment:null,array:j},array:{text:j,hole:j,element:j,component:j,fragment:j,array:null}};function ot(n,e){return kn[n]?.[e]??null}function Pt(n,e,t,o,r){let i=[],s=new Map,a={n:0},l=new Map,d=new N;d.subscribe({next:()=>{for(let m of[...i].reverse())try{m()}catch(x){console.error("[vdom] v2 onUnmount:",x)}}});let u=Object.create(t);u.onUnmount=m=>{i.push(m)},u.ui=it({requestRender:()=>{ne("req:render",o.slice(-18)),r?.()},onUnmount:m=>{i.push(m)},getBrowser:()=>t.browser??null,nextHookIndex:()=>a.n++,getHookState:m=>l.get(m),setHookState:(m,x)=>{l.set(m,x)},getInstanceData:()=>s,scheduleAfterRender:m=>{let x=t.afterRender;x?x(m):setTimeout(m,0)},getSharedContext:()=>t??null});let f=n(e,u),c=a.n;return{factory:n,renderFn:f,lastOutput:void 0,hookSeq:a,renderBase:c,instData:s,destroy$:d,disposed:!1}}function st(n,e){return n.hookSeq.n=n.renderBase,n.renderFn(e)}function G(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 En(n,e,t,o){let r=e.get(n),i=[];if(r){let a=r.lastOutput!==void 0?oe(r.lastOutput):void 0;if(a!==void 0){let l={get:d=>{let u=e.get(d);return u?{lastOutput:u.lastOutput}:void 0}};U(a,le(a,n,t),ye(a,n,o),d=>{i.push(d)},l)}}let s=[];for(let a of i)a.op==="unmount"&&e.has(a.compId)&&s.push(a.compId);G(n,e);for(let a of s)e.has(a)&&G(a,e);return i.unshift({op:"unmount",compId:n}),i}function Dt(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 i=r;if(i.kind==="hole")return[e+".0"];if(i.kind==="array")return(i.items??[]).map((a,l)=>`${e}.${l}`);let s=i.v;return s?typeof s.type=="function"?[e+".0"]:[C(t,o)]:[e+".0"]}return[e+".0"]}function On(n,e,t,o){if(F(n))return C(e,t);if(Q(n))return C(e,t);let r=n;if(typeof r.type!="function")return C(e,t);let i=A(r);if(i===null)return C(e,t);let s=W(e,i);return Dt(o?.get(s),s,e,t)[0]}function At(n,e,t,o,r,i,s,a){let l=[],d=[],u=0,f=null;for(let c=0;c<e.length;c++){let m=I(e[c]);l.push(n[c]===void 0?L(e[c],t,u,f,o,i,r,s):se(n[c],e[c],t,u,f,o,r,i,s)),f=C(t,u+m-1),u+=m}for(let c=n.length-1;c>=e.length;c--)d.push(M(re(n[c],t,Sn(n,c),r)));return a?$([...d.reverse(),...l]):(d.reverse(),$([...l,...d]))}function se(n,e,t,o,r,i,s,a,l){let d=C(t,o),u=_(n),f=_(e);if(u==="text"&&f==="text")return String(n)===String(e)?M([]):M([{op:"setText",id:d,value:Me(e)}]);if(u==="hole"&&f==="hole")return M([]);if(u==="hole")return $([M([{op:"remove",id:d}]),L(e,t,o,r,i,a,s,l)]);if(f==="hole")return rt(n,e,t,o,r,i,a,u==="component"?Te(n,t,o):void 0,s,l);if((u==="fragment"||u==="array")&&(f==="fragment"||f==="array")){let g=xe(Array.isArray(n)?n:H(n)),y=xe(Array.isArray(e)?e:H(e));return Re(y)||Re(g)?Lt(g,y,t,i,s,a,l):At(g,y,t,i,s,a,l,!0)}if(u===f&&typeof n!="string"&&typeof n!="number"){let g=n,y=e;if(typeof g.type=="function"&&typeof y.type=="function"){if(g.type===y.type)return Vn(g,y,t,o,r,i,s,a,l);let S=Te(g,t,o),w=En(S,s,C(t,o),t);return $([M(w),L(y,t,o,r,i,a,s,l)])}if(typeof g.type=="string"&&typeof y.type=="string"){if(g.type===y.type){let S=[];It(g,y,d,b=>S.push(b),{formControl:g.type==="input"||g.type==="textarea"});let w=xe(H(g)),T=xe(H(y));if(Rn(w,T,d),Re(T)||Re(w))return $([M(S),Lt(w,T,d,i,s,a,l)]);let p=At(w,T,d,i,s,a,l,!1);return $([M(S),p])}return $([M(re(g,t,o,s)),L(y,t,o,r,i,a,s,l)])}}let c=Z(n),m=Z(e),x=_(n)==="component"?Te(n,t,o):void 0;return rt(n,e,t,o,r,i,a,x,s,l)}function Sn(n,e){let t=0;for(let o=0;o<e;o++)t+=I(n[o]);return t}function Nn(n,e){let t=0;for(let o=0;o<e;o++)t+=I(n[o]);return t}function Vn(n,e,t,o,r,i,s,a,l){let d=Te(e,t,o),u=s.get(d);if(!u||u.factory!==e.type)return u&&G(d,s),L(e,t,o,r,i,a,s,l);let f;try{f=st(u,e.props)}catch(x){return ge(d,x),M([])}let c=u.lastOutput!==void 0?oe(u.lastOutput):void 0;u.lastOutput=Ae(f);let m=at(f,d,t,o);return c===void 0?L(f,m.parent,m.index,r,i,a,s,l):Mn(c,f,m.parent,m.index,r,i,s,a,l)}function Mn(n,e,t,o,r,i,s,a,l){let d=Array.isArray(n),u=Array.isArray(e);if(d||u){let f=d?n:[n],c=u?e:[e],m=0,x=null,g=[];for(let y=0;y<c.length;y++){let S=I(c[y]);g.push(f[y]===void 0?L(c[y],t,m,x,i,a,s,l):se(f[y],c[y],t,m,x,i,s,a,l)),x=C(t,m+S-1),m+=S}for(let y=c.length;y<f.length;y++)g.push(M(re(f[y],t,Nn(f,y),s)));return $(g)}return se(n,e,t,o,r,i,s,a,l)}function xe(n){let e=[];for(let t of n)t!==null&&typeof t=="object"&&!Array.isArray(t)&&X(t)?e.push(...xe(H(t))):e.push(t);return e}function Rn(n,e,t){if(globalThis.__WF_NO_A_CHECK__)return;let o=f=>!F(f)&&!Q(f)&&!Array.isArray(f),r=n.filter(o),i=e.filter(o),s=f=>typeof f?.type=="function"&&A(f)===null,a=(f,c)=>c>=f.length||F(f[c]),l=f=>a(n,f)||s(n[f]),d=f=>a(e,f)||s(e[f]);(e.some((f,c)=>s(f)&&!l(c))||n.some((f,c)=>s(f)&&!d(c)))&&Vt(i,`children\uFF08${t}\u2014\u2014\u65E0 key \u7EC4\u4EF6\u5B9E\u69FD\u7FFB\u8F6C ${r.length}\u2192${i.length}\uFF09`)}function Te(n,e,t){return n.key!==null?W(e,n.key):C(e,t)}function Ie(n,e,t,o,r,i){let s=Z(n),a=Z(e);return ot(s,a)?rt(n,e,"root",0,null,t,r,s==="component"?Te(n,"root",0):void 0,o,i).pipe(Ht):se(n,e,"root",0,null,t,o,r,i).pipe(Ht)}var Ht=n=>$([n,M([{op:"done"}])]);function In(n,e,t,o,r,i,s,a,l){return n===void 0?L(e,t,o,r,i,a,s,l):se(n,e,t,o,r,i,s,a,l)}function Lt(n,e,t,o,r,i,s){let a=[],l=(p,b)=>A(p)??et(b),d=new Map;n.forEach((p,b)=>{let v=l(p,b);d.has(v)||d.set(v,b)});let u=new Set(e.map((p,b)=>l(p,b))),f=new Map;for(let p=0;p<n.length;p++){let b=n[p];if(F(b)){a.push({op:"remove",id:C(t,p)});continue}if(Q(b)){a.push({op:"remove",id:C(t,p)});continue}if(Array.isArray(b))continue;let v=A(b);if(v!==null){let E=(f.get(v)??0)+1;if(f.set(v,E),E===1)continue;a.push(...re(b,t,p,r));continue}}for(let[p,b]of d)if(!u.has(p)&&(a.push(...re(n[b],t,b,r)),!Nt(p))){let v=W(t,p);r.has(v)&&G(v,r)}let c=n.map(p=>A(p)).filter(p=>p!==null&&u.has(p)),m=e.map(p=>A(p)).filter(p=>p!==null&&d.has(p)),g=!e.some((p,b)=>{let v=A(p);if(v===null||typeof p.type!="function")return!1;let E=d.get(v);return E===void 0||E===b?!1:r?.get(W(t,v))===void 0});{let p=0;for(let b of m){let v=c.indexOf(b,p);if(v===-1){g=!1;break}p=v+1}}if(!g){n.forEach((v,E)=>{if(!(F(v)||Q(v))&&!Array.isArray(v)){if(A(v)!==null&&typeof v.type=="function"){a.push(...re(v,t,E,r,{keepSegments:!0}));return}if(A(v)!==null){a.push({op:"remove",id:C(t,E)});return}a.push(...re(v,t,E,r))}});let p=[],b=null;for(let v=0;v<e.length;v++){let E=e[v],V=A(E),q=V!==null?W(t,V):C(t,v);V!==null&&typeof E.type=="function"?p.push(L(E,t,v,b,o,i,r,s)):p.push(L(E,t,v,b,o,i,r,s)),b=C(t,v)}return $([M(a),...p])}let y=[];e.forEach((p,b)=>{let v=A(p);if(v===null)return;let E=d.get(v);E!==void 0&&E!==b&&y.push({oldIdx:E,newIdx:b})});let S=y.every(p=>p.newIdx<p.oldIdx);y.sort((p,b)=>S?p.newIdx-b.newIdx:b.newIdx-p.newIdx);for(let p of y){let b=e[p.newIdx],v=A(b);if(v!==null&&typeof b.type=="function"){let E=W(t,v),V=Dt(r?.get(E),E,t,p.oldIdx);if(V.length===1&&!V[0].startsWith(E+"."))a.push({op:"move",id:V[0],parent:t,ref:null,newId:C(t,p.newIdx),noMove:!0});else{let Oe=p.newIdx>0?e[p.newIdx-1]:null,te=Oe===null?null:On(Oe,t,p.newIdx-1,r);for(let ie of V)a.push({op:"move",id:ie,parent:t,ref:te,newId:ie,noMove:!1}),te=ie}}else a.push({op:"move",id:C(t,p.oldIdx),parent:t,ref:null,newId:C(t,p.newIdx),noMove:!0})}let w=[],T=null;for(let p=0;p<e.length;p++){let b=e[p],v=A(b),E=C(t,p);if(v!==null){let V=d.get(v);V===void 0?w.push(L(b,t,p,T,o,i,r,s)):typeof b.type=="function"?w.push(In(n[V],b,t,p,T,o,r,i,s)):w.push(se(n[V],b,t,p,T,o,r,i,s))}else{let V=d.get(et(p)),q=V===void 0?void 0:n[V];q!==void 0&&!F(q)&&!Q(q)&&!Array.isArray(q)?w.push(se(q,b,t,p,T,o,r,i,s)):w.push(L(b,t,p,T,o,i,r,s))}T=E}return $([M(a),...w])}function re(n,e,t,o,r){let i=[],s=C(e,t),a=o&&o.size>0?{get:d=>{let u=o.get(d);return u?{lastOutput:u.lastOutput}:void 0}}:void 0;if(U(n,s,e,d=>i.push(d),a),o&&!r?.keepSegments)for(let d of i)d.op==="unmount"&&o.has(d.compId)&&G(d.compId,o);else if(o&&r?.keepSegments){for(let d of i)if(d.op==="unmount"){let u=o.get(d.compId);u&&(u.lastOutput=void 0)}}return r?.keepSegments?i.filter(d=>d.op!=="unmount"):i}function Re(n){return n.some(e=>A(e)!==null)}function rt(n,e,t,o,r,i,s,a,l,d){let u=ot(Z(n),Z(e));if(!u)throw new Error(`[vdom] v2 \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${Z(n)} \u2192 ${Z(e)}`);let f=[],c=null,m=[],x=l&&l.size>0?{get:S=>{let w=l.get(S);return w?{lastOutput:w.lastOutput}:void 0}}:s,g={emit:S=>{let w=S;w.op==="unmount"&&l?.has(w.compId)&&m.push(w.compId),f.push(w)},emitNode:(S,w,T,p)=>{c={v:S,p:w,i:T,r:p}},oldId:C(t,o),newId:C(t,o),parent:t,index:o,ref:r,oldCompId:a,registry:x};u(n,e,g);let y=c?R(S=>{let w=c;return L(w.v,w.p,w.i,w.r,i,s,l,d).subscribe({next:p=>S.next(p),error:p=>S.error(p),complete:()=>S.complete()})}):M([]);return $([R(S=>{for(let w of m)l?.has(w)&&G(w,l);return S.complete(),()=>{}}),M(f),y])}var He=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(([i,s])=>i+":"+[...s.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(i){console.error("[vdom] \u4E8B\u4EF6 handler:",i)}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()}}},pe=/^on[A-Z]/;function Ce(n){return pe.test(n)?n.slice(2).toLowerCase():null}var Le=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 An(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 Pe=class{queue=null;phase="inactive";events$;failed$;events=new N;constructor(){this.events$=this.events.asObservable(),this.events.asObservable().pipe(be(An,"inactive")).subscribe({next:e=>{this.phase=e}}),this.failed$=this.events.asObservable().pipe(Je(e=>e.kind==="next"&&!e.matched||e.kind==="end"&&e.remaining>0),Ge(()=>{}))}begin(e){let t=[],o=r=>{t.push(r);for(let i of r.childNodes)o(i)};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 i=r.shift();if(e==="element"?i.nodeType===1&&i.tagName.toLowerCase()===t:e==="text"?i.nodeType===3:i.nodeType===8){if(e==="text"&&o!==void 0){let a=i,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}),i}}return this.events.next({kind:"next",matched:!1}),null}};Ft();var Pn=new Set(["zIndex","opacity","lineHeight","zoom","fontWeight","order","flex","flexGrow","flexShrink","flexBasis","animationIterationCount","orphans","widows","columns","columnCount","columnGap","counterIncrement","counterReset","aspectRatio","scale","rotate"]);function Dn(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"&&!Pn.has(e)&&(t=`${t}px`),n.style[e]=String(t)}function ut(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))Dn(n,t,o)}}var De=null,Ut=new WeakSet;function Fn(n){if(De||(De=new WeakSet),!Ut.has(n)){Ut.add(n);let e=De;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 De}function $t(n,e){return Fn(n).has(e)}var Un=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 Bt(n){return Un.has(n)}function Kt(n,e,t){if(t===void 0){if($n.has(e)){n[e]=!1;return}return}if(e==="value"&&n.nodeType===1){let o=n;if(n.ownerDocument&&$t(n.ownerDocument,o))return;let r=o.value;if(r===t||String(r)===String(t))return}n[e]=t}var $n=new Set(["disabled","checked","selected","multiple","readOnly","required","indeterminate","muted","paused","open","autofocus","draggable","hidden"]);function we(n,e){for(let[t,o]of Object.entries(e))t==="style"?ut(n,o):lt(n,t,o)}function Wt(n,e,t,o,r,i){if(o!=="ref")if(typeof r=="function"||r===void 0&&typeof i=="function"){if(pe.test(o)){let s=Ce(o);s&&n.set(e,s,r)}return}else if(pe.test(o)){let s=Ce(o);s&&n.set(e,s,r)}else o==="style"?ut(t,r):Bt(o)?Kt(t,o,r):lt(t,o,r)}var Bn="http://www.w3.org/2000/svg",Kn=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 _t(n,e){return Kn.has(e)?n.createElementNS(Bn,e):n.createElement(e)}function Wn(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===1&&t.tagName.toLowerCase()===e.tag)we(t,e.attrs);else if(n.absorb.queue&&!t){let r=n.absorb.next("element",e.tag);if(r)we(r,e.attrs),n.nodes.set(e.id,r);else{let i=_t(n.doc,e.tag);we(i,e.attrs),n.nodes.set(e.id,i)}}else{let r=_t(n.doc,e.tag);we(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 _n(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 jn(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 qn(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 i=o.nextSibling&&o.nextSibling.parentNode===r?o.nextSibling:null;r.insertBefore(t,i),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 i=n.childIds.size>0&&n.childIds.has(e.ref)?n.collectDesc(e.ref):null;if(i){let s="",a=-1;for(let l of i){let d=n.seq.get(l)??0;d>a&&(a=d,s=l)}s&&(r=n.nodes.get(s)??null)}else{let s=e.ref+".";for(let[a,l]of n.nodes)a.startsWith(s)&&(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 zn(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 Yn(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 i of[...n.nodes.keys()])i.startsWith(r)&&o.push(i)}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 Gn(n,e){let t=n.nodes.get(e.id);t&&t.nodeType===3&&(t.textContent=e.value)}function Jn(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(pe.test(e.key)){let r=Ce(e.key);r&&(e.value===void 0?n.eventRegistry.removeEvent(e.id,r):n.eventRegistry.set(e.id,r,e.value));return}Wt(n.eventRegistry,e.id,o,e.key,e.value,e.prev)}function Xn(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 Zn(n,e){n.clearNodeRefs(e.id)}function Qn(n,e){let t=n.registry?.get(e.compId);t&&(t.phase="mounted")}function eo(n,e){n.registry&&dt(e.compId,n.registry)}function to(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 jt(n,e){switch(e.op){case"create":Wn(n,e);break;case"createText":_n(n,e);break;case"createAnchor":jn(n,e);break;case"insert":qn(n,e);break;case"move":zn(n,e);break;case"remove":Yn(n,e);break;case"setText":Gn(n,e);break;case"setProp":Jn(n,e);break;case"ref":Xn(n,e);break;case"unref":Zn(n,e);break;case"mount":Qn(n,e);break;case"unmount":eo(n,e);break;case"done":to(n,e);break;case"close":break}}var me=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 i=this.childIds.get(r);if(i)for(let s of i)o.push(s)}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 Le;absorb=new Pe;container;doc;registry;devVerify=null;constructor(e,t,o){this.container=e,this.doc=t,this.registry=o??null,this.eventRegistry=new He(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=(i,s)=>{let a=i.get(s);a!==void 0&&(i.delete(s),i.set(t+s.slice(e.length),a))};for(let i of[...this.nodes.keys()])if(i===e||i.startsWith(e+".")){o(this.nodes,i);let s=this.nodes.get(t+i.slice(e.length));s&&s.nodeType===1&&s.setAttribute("data-wf-id",t+i.slice(e.length))}for(let[i,s]of[...this.byChild]){let a=i===e||i.startsWith(e+"."),l=s===e||s.startsWith(e+".");if(!a&&!l)continue;let d=a?t+i.slice(e.length):i,u=l?t+s.slice(e.length):s;this.byChild.delete(i),this.byChild.set(d,u);let f=this.childIds.get(s);f&&(f.delete(i),f.size===0&&this.childIds.delete(s));let c=this.childIds.get(u);c||(c=new Set,this.childIds.set(u,c)),c.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 i of[...this.eventRegistry.table.keys()])if(i===e||i.startsWith(e+".")){let s=this.eventRegistry.table.get(i);this.eventRegistry.table.delete(i),this.eventRegistry.table.set(t+i.slice(e.length),s)}if(this.registry){for(let i of[...this.registry.keys()])if(i===e||i.startsWith(e+".")){let s=this.registry.get(i);this.registry.delete(i),this.registry.set(t+i.slice(e.length),s)}}}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 i=o.slice(0,r).join(".");if(i==="root")return this.container;let s=this.nodes.get(i);if(s&&s.isConnected)return s}return null}apply(e){jt(this,e),this.devVerify&&this.devVerify(e,this)}};var Fe="__wf_portal";function ft(n){return`${Fe}-${n}`}function no(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 oo(n){return typeof n=="function"?n():n}function qt(n){return n?typeof n=="function"?n():n:null}function zt(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(be(no,"closed")).subscribe({next:h=>{t.phase=h}});let i=h=>{o.next(h)},s=n.getBrowser()?.window,a=n.getBrowser()?.document,l=()=>{if(!a)return null;if(t.container)return t.container;let h=a.getElementById(Fe);h||(h=a.createElement("div"),h.id=Fe,a.body.appendChild(h));let k=e.key??"popup",O=a.getElementById(ft(k));return O?t.container=O:(t.container=a.createElement("div"),t.container.id=ft(k),h.appendChild(t.container)),t.container},d=0,u=!1,f=()=>{if(t.disposed||!t.open)return;if(e.position&&t.panel){let B=e.position();if(B&&typeof B.x=="number"&&typeof B.y=="number"){t.pos={top:B.y,left:B.x,width:B.width},u=!0,g();return}}let h=qt(e.anchor);if(!h||!t.panel){d++<10&&queueMicrotask(f);return}if(!s)return;let k=t.panel,O=k.offsetWidth||k.getBoundingClientRect().width,P=k.offsetHeight||k.getBoundingClientRect().height;if((O===0||P===0)&&d++<10){typeof s.requestAnimationFrame=="function"?s.requestAnimationFrame(f):queueMicrotask(f);return}let D=typeof e.placement=="function"?e.placement():e.placement??"bottom",z=Tt(h,s,O,P,D,e.gap??8,e.margin??8,e.center??!0);if(!z){d++<10&&queueMicrotask(f);return}if(d=0,t.pos=z,t.applier){let B=y(t.tree);B&&S(B)}},c=h=>{if(t.panel=h,h&&t.open&&!u&&e.positioning!=="none"&&(s&&typeof s.requestAnimationFrame=="function"?s.requestAnimationFrame(f):queueMicrotask(f)),h&&e.presence){let k=O=>{t.phase==="exit"&&T()};h.addEventListener("animationend",k),n.onUnmount(()=>h.removeEventListener("animationend",k))}},m=null,x=h=>{m=h,h&&u&&g()},g=()=>{let h=e.mask?m:t.panel;h&&(h.style.top=`${t.pos.top}px`,h.style.left=`${t.pos.left}px`,t.pos.width!==void 0&&(h.style.width=`${t.pos.width}px`))},y=h=>{if(!h)return null;let k=h;e.mask&&(k=Qe("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:J=>{e.maskClosable!==!1&&J.target===J.currentTarget&&p()}},e.maskCentered?{...k,props:{...k.props??{}}}:Qe("div",{class:"wf-popup-mask-inner",ref:x,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},k)));let O=k.props??{},P=e.positioning==="none"||String(O.class??"").includes("mask")?O.class??"":["wf-popup",O.class].filter(Boolean).join(" "),D=!(e.mask&&e.position),z=e.positioning==="none"?{...O.style??{},position:"fixed"}:{...O.style??{},position:"fixed",...D?{top:`${t.pos.top}px`,left:`${t.pos.left}px`}:{},...D&&t.pos.width!==void 0?{width:`${t.pos.width}px`}:{}};return{...k,props:{...O,class:P,style:z,ref:c}}},S=h=>{let k=++t.version,O=t.tree;t.tree=h,t.chain=t.chain.then(async()=>{if(t.disposed||k!==t.version)return;let P=t.applier;if(!P)return;let D=P.registry;if(!D)return;let z=n.getSharedContext()??{},B=await new Promise((J,mn)=>{let gt=[],bt=()=>n.requestRender?.();(O?Ie(O,h,z,t.segments,D,bt):Ue(h,z,D,t.segments,bt)).subscribe({next:gn=>gt.push(gn),error:mn,complete:()=>J(gt)})});for(let J of B){if(t.disposed||k!==t.version)return;P.apply(J)}for(let J of B)J.op==="unmount"&&G(J.compId,t.segments)}).catch(P=>{console.error("[popup] render error:",P)})},w=()=>{t.disposed||(t.disposed=!0,t.applier&&(t.applier.dispose(),t.applier=null),t.tree=null,t.container&&(t.container.remove(),t.container=null))},T=()=>{t.disposed||(t.open=!1,i({kind:"closed"}),V(),w(),i({kind:"disposed"}),e.onClose?.())},p=()=>{!t.open||t.disposed||(e.presence?(i({kind:"exit"}),t.panel&&s&&!Ct(t.panel,s)&&T(),t.panel||T()):T())},b={value:""},v={value:null},E={value:!1},V=()=>{E.value&&(a?.body&&(a.body.style.overflow=b.value),b.value="",v.value&&(v.value.focus?.(),v.value=null),E.value=!1)},q=()=>{n.scheduleAfterRender(()=>{let h=k=>{let O=t.panel;O?(O.querySelector?.("input, button, [tabindex], select, textarea")??O).focus?.():k<10&&t.open&&queueMicrotask(()=>h(k+1))};h(0)})},Oe=()=>{E.value=!0,e.lockScroll&&a?.body&&(b.value=a.body.style.overflow,a.body.style.overflow="hidden"),e.trapFocus&&s&&(v.value=s.document.activeElement,q())},te=null;e.trapFocus&&s&&(te=h=>{if(h.key!=="Tab"||!t.open||!t.panel)return;let k=Array.from(t.panel.querySelectorAll?.("input, button, [tabindex], select, textarea")??[]).filter(z=>!z.disabled&&z.offsetParent!==null);if(k.length===0)return;let O=k[0],P=k[k.length-1],D=s?.document.activeElement;h.shiftKey&&(D===O||D===t.panel||!t.panel.contains(D))?(h.preventDefault(),P.focus()):!h.shiftKey&&(D===P||!t.panel.contains(D))&&(h.preventDefault(),O.focus())},s.addEventListener("keydown",te));let ie=h=>{if(!t.open||(e.closeOnOutside??!0)===!1)return;let k=h.target,O=qt(e.anchor);k&&O?.contains(k)||k&&t.panel?.contains(k)||p()},mt=h=>{t.open&&(e.closeOnEscape??!0)&&h.key==="Escape"&&p()};s&&(s.addEventListener("mousedown",ie),s.addEventListener("keydown",mt)),n.onUnmount(()=>{s&&(s.removeEventListener("mousedown",ie),s.removeEventListener("keydown",mt),te&&s.removeEventListener("keydown",te)),T()});let cn=()=>{if(t.open||t.disposed)return;t.open=!0,i({kind:"open"});let h=l();if(!h)return;e.trapFocus||e.lockScroll?Oe():e.autoFocus&&q();let k=ee();t.applier=new me(h,a,k),t.segments=new Map;let O=oo(e.content);O!=null?S(y(O)):T()},pn={close:p,update(h){if(t.disposed||!t.open)return;if(h==null){p();return}let k=!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},k=!0)}S(y(h)),k&&g()},refresh(){if(!(t.disposed||!t.open||!t.tree)&&e.position){let h=e.position();h&&typeof h.x=="number"&&typeof h.y=="number"&&(t.pos={top:h.y,left:h.x,width:h.width},g())}},get open(){return t.open},events$:r};return cn(),pn}function Yt(n,e,t){let o=n.nextHookIndex(),r=n.getHookState(o)??{value:t};n.setHookState(o,r);let i=e.value!==void 0;return{get value(){return e.value??r.value},controlled:e,setValue(s){i?(e.onChange||console.warn("[vdom] useControlled \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548"),e.onChange?.(s)):(r.value=s,n.requestRender())}}}function Gt(n,e){let t=new N,o=K(n,ro(n,e,t),{y:0,x:0});return{get y(){return o().y},get x(){return o().x},refresh:()=>{t.next()}}}function ro(n,e,t){let o=n.getBrowser()?.window,r=n.getBrowser()?.document??null;return R(i=>{if(!o)return i.next({y:0,x:0}),i.complete(),()=>{};let s,a=null,l=null,d=0,u=()=>{if(typeof e=="function")return e();if(e&&typeof e=="object"&&!("nodeType"in e)){let g=e;return typeof g.getScroller=="function"?g.getScroller()??null:g.root?typeof g.root=="string"?r?r.querySelector(g.root)??o:o:g.root:o}return o},f=g=>g?g===o?{y:o.scrollY||0,x:o.scrollX||0}:{y:g.scrollTop,x:g.scrollLeft}:{y:0,x:0},c=()=>{i.next(f(l))},m=()=>{if(a)return;if(l=u(),!l){d++<10&&n.scheduleAfterRender(m);return}let g=()=>{s===void 0&&(s=o.requestAnimationFrame(()=>{s=void 0,c()}))};l.addEventListener("scroll",g,{passive:!0}),a=g,c()};m();let x=t?.subscribe({next:()=>{m(),c()}});return()=>{x?.unsubscribe(),s!==void 0&&o.cancelAnimationFrame(s),a&&l&&l.removeEventListener("scroll",a),a=null}})}function Jt(n,e){let t=n.nextHookIndex(),o=n.getHookState(t)??{isIn:!1,io:null,retries:0,ready:!1};n.setHookState(t,o);let i=n.getBrowser()?.window?.IntersectionObserver,s=e&&typeof e=="object"&&!("nodeType"in e)?e:void 0,a=s?.target??(typeof e=="function"||e&&"nodeType"in e?e:void 0),l=typeof s?.rootMargin=="function"?s.rootMargin():s?.rootMargin,d=typeof s?.threshold=="function"?s.threshold():s?.threshold,u=typeof s?.root=="function"?s.root():s?.root??null,f=c=>{if(!i||!c||o.io)return;let m=new i(x=>{let g=x[0];g&&g.isIntersecting!==o.isIn&&(o.isIn=g.isIntersecting,s?.onChange?.(g,g.isIntersecting),n.requestRender())},{root:u??void 0,rootMargin:l,threshold:d});m.observe(c),o.io=m,o.ready=!0,n.onUnmount(()=>o.io?.disconnect())};if(i&&!o.io){let c=typeof a=="function"?a():a??null;c?f(c):a!==void 0&&o.retries++<10&&n.scheduleAfterRender(()=>f(typeof a=="function"?a():a??null))}return{get isIn(){return o.isIn},get ready(){return o.ready},ref:c=>{c?f(c):o.io?.disconnect()},observe:c=>f(c),disconnect:()=>{o.io?.disconnect(),o.io=null}}}function Xt(n,e,t){let o=n.nextHookIndex(),r=n.getHookState(o)??{keyword:"",selectedLabel:"",composing:!1};n.setHookState(o,r);let i=e.value!==void 0;return{controlled:e,get value(){return e.value??r.keyword},setValue(s){i?(e.onChange||console.warn(`[vdom] useControlledInput(${t?.name??""}) \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),e.onChange?.(s)):(r.keyword=s,n.requestRender())},get keyword(){return r.keyword},setKeyword(s){r.keyword=s,r.composing||this.setValue(s)},get selectedLabel(){return r.selectedLabel},setSelectedLabel(s){r.selectedLabel=s},get isComposing(){return r.composing},onCompositionStart(){r.composing=!0},onCompositionEnd(){r.composing=!1}}}function Qt(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 Zt=new WeakMap,so=new Map;function io(n,e){let t=n.getBrowser()?.window,o=t?Zt.get(t)??Zt.set(t,new Map).get(t):so,r=o.get(e);return r||(r=Ye(i=>{let s=n.getBrowser()?.window,l=(s?.matchMedia?.bind(s)??(typeof globalThis.matchMedia=="function"?globalThis.matchMedia.bind(globalThis):void 0))?.(e);if(!l)return;let d=()=>i(l.matches);return l.addEventListener("change",d),()=>l.removeEventListener("change",d)},()=>{let i=n.getBrowser()?.window,s=i?.matchMedia?.bind(i)??(typeof globalThis.matchMedia=="function"?globalThis.matchMedia.bind(globalThis):void 0);return s?s(e).matches:!1}),o.set(e,r)),r}function ke(n,e){return K(n,io(n,e),!1)}function en(n,e){let t=Object.entries(e).sort((o,r)=>o[1]-r[1]);return()=>{let o=t[0]?.[0]??"default";for(let[r,i]of t)ke(n,`(min-width: ${i}px)`)()&&(o=r);return o}}var ao=0,ct=()=>`m${Date.now().toString(36)}${(ao++).toString(36)}`;function lo(){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,i=o.startsWith("data:")?o.slice(5).trim():o;if(!i)return null;let s;try{s=JSON.parse(i)}catch{return null}if(!r)return s.toolCalls?{toolCalls:s.toolCalls}:s.text!==void 0?{content:String(s.text)}:s.content!==void 0?{content:s.content}:null;switch(r){case"wf:message_start":return null;case"wf:token":return{content:s.text!==void 0?String(s.text):s.content};case"wf:step":return{step:s};case"wf:usage":return{usage:s};case"wf:tool_call":return{toolCalls:[{id:s.id,name:s.name,args:s.args,status:"running",call:s}]};case"wf:tool_progress":return{toolProgress:s};case"wf:tool_result":return{toolResult:s};case"wf:approval_request":return{approval:s};case"wf:error":return{error:s};case"wf:done":{let a=s.usage?{usage:s.usage}:{};return{done:!0,...s.content?{content:s.content,doneContent:!0}:{},...a}}default:return null}}}function tn(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:ct(),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])},i=e.parseChunk??lo(),s={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:ct(),role:"user",content:a};o.messages=[...o.messages,d];let u={id:ct(),role:"assistant",content:"",status:"streaming"};o.messages=[...o.messages,u],o.status="streaming",r();let f=new AbortController;o.controller=f;try{let c=await fetch(l,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({messages:o.messages.map(y=>({role:y.role,content:y.content}))}),signal:f.signal});if(!c.ok||!c.body)throw new Error(`[vdom] chat \u8BF7\u6C42\u5931\u8D25 ${c.status}`);let m=c.body.getReader(),x=new TextDecoder,g="";for(;;){let{value:y,done:S}=await m.read();if(S)break;g+=x.decode(y,{stream:!0});let w=g.split(`
|
|
2
|
+
`);g=w.pop()??"";let T;for(let p of w){if(!p.trim())continue;if(p.trim().startsWith("event:")){T=p.trim().slice(6).trim();continue}let b=i(p,T);if(p.trim().startsWith("data:")&&(T=void 0),!!b){if(b.content&&(u.content=b.doneContent?u.content||b.content:u.content+b.content,r()),b.toolCalls?.length&&(u.toolCalls=[...u.toolCalls??[],...b.toolCalls],r()),b.toolProgress){let v=u.toolCalls?.find(E=>E.id===b.toolProgress.toolCallId);v&&(v.progress=b.toolProgress,r())}if(b.toolResult){let v=u.toolCalls?.find(E=>E.id===b.toolResult.id);v&&(v.result=b.toolResult.output,v.status=b.toolResult.ok===!1?"error":"ok",r())}if(b.approval){u.approval=b.approval;let v=u.toolCalls?.find(E=>E.id===b.approval.toolCallId);v&&(v.approval=b.approval),r()}b.usage&&(o.usage=b.usage,r()),b.step!==void 0&&(o.step=b.step,r()),b.error&&(o.error=b.error,u.status="error",r()),b.done&&(o.step=null,r())}}}u.status=void 0,o.status="idle"}catch(c){c.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&&s.send(a.content)},reset(){o.messages=[],o.status="idle",r()},async approve(a,l,d){let u=!1;for(let f of o.messages){for(let c of f.toolCalls??[])if(!c.approved){c.approved=a!=="rejected",l&&(c.feedback=l),a==="modified"&&d&&(c.args=d),u=!0;break}if(u)break}r()}};return s}function pt(n){return ke(n,"(prefers-reduced-motion: reduce)")()}function nn(n,e,t){let o=n.getBrowser()?.window,r=pt(n),i=t?.duration??400;if(i<=0)return{value:e,reset:()=>{}};let s=t?.ease==="linear"?T=>T:T=>1-Math.pow(1-T,3),a=n.nextHookIndex(),l=n.getHookState(a);if(l)return l.reset(e),l;let d=r?e:0,u,f=e,c=0,m=i+200,x,g={get value(){return u!==void 0&&o&&o.performance.now()-c>m?f:d},set value(T){d=T},reset:()=>{}},y=()=>{n.requestRender()},S=T=>{if(f=T,r){g.value=T,y();return}if(T===g.value)return;if(!o){g.value=T;return}u!==void 0&&o.cancelAnimationFrame(u);let p=g.value,b=o.performance.now();c=b,w();let v=E=>{let V=Math.min(1,(E-b)/i);g.value=Math.round(p+(T-p)*s(V)),V<1?u=o.requestAnimationFrame(v):u=void 0,y()};u=o.requestAnimationFrame(v)},w=()=>{o&&(x!==void 0&&clearTimeout(x),x=setTimeout(()=>{x=void 0,u!==void 0&&(o&&o.cancelAnimationFrame(u),u=void 0,g.value=f,y())},m))};return g.reset=T=>{T===f&&u!==void 0||S(T)},n.onUnmount(()=>{u!==void 0&&o&&(o.cancelAnimationFrame(u),u=void 0)}),n.setHookState(a,g),l=g,l.reset(e),l}function on(n,e){let t=n.getBrowser()?.window,o=0,r=0,i=!1,s=0,a=f=>{i&&e.onMove(f,{x:f.clientX-o,y:f.clientY-r})},l=f=>{i&&f.pointerId===s&&(i=!1,t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",d)),e.onEnd?.(f))},d=f=>{!i||f.pointerId!==s||(i=!1,t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",d)),e.onEnd?.(f))},u=f=>{i||(f.preventDefault(),i=!0,s=f.pointerId,o=f.clientX,r=f.clientY,t&&(t.addEventListener("pointermove",a),t.addEventListener("pointerup",l),t.addEventListener("pointercancel",d)),e.onStart?.(f))};return n.onUnmount(()=>{i&&t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",d),i=!1)}),{onPointerDown:u}}function rn(n){let e=K(n,uo(n),{height:0,offsetTop:0,keyboardOpen:!1});return{get height(){return e().height},get offsetTop(){return e().offsetTop},get keyboardOpen(){return e().keyboardOpen}}}function uo(n){let e=n.getBrowser()?.window;return R(t=>{let o=()=>{let s=e?.visualViewport,a=s?.height??e?.innerHeight??0;return{height:a,offsetTop:s?.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()),i=e.visualViewport;return i?.addEventListener?(i.addEventListener("resize",r),i.addEventListener("scroll",r),r(),()=>{i.removeEventListener("resize",r),i.removeEventListener("scroll",r)}):(e.addEventListener("resize",r),r(),()=>e.removeEventListener("resize",r))})}var sn=new Map,an=new Set,fo=new N;var $e=new Map;function it(n){return{useObservable(e,t,o){return K(n,e,t,o)},useAsyncData(e,t){let o=sn.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),sn.set(t,o)),o.fetcher=e;let r=()=>{if(o.sub||o.seedHit)return;o.started=!0;let a=o.trigger.asObservable().pipe(Xe(()=>{let l=o.fetcher;if(!l)return Ve(Promise.resolve(null));let d=l();return an.add(d),d.finally(()=>an.delete(d)).catch(()=>{}),Ve(d)}));o.sub=a.subscribe({next:l=>{o.state$.next(l)},error:l=>{console.error("[vdom] useAsyncData:",l),fo.next({key:t,error:l}),o.state$.next(null)}})};return r(),[K(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=vt(e),o=t.subscribe(()=>n.requestRender());return n.onUnmount(o),t},hold:e=>n.onUnmount(e),useStableRef:(e,t)=>ht(n,e,t),useOpen:(e,t)=>yt(n,e,t),onUnmount:e=>n.onUnmount(e),useGlobalKey:(e,t)=>xt(n,e,t),openPopup:e=>zt(n,e),usePopupPosition:e=>wt(n,e),useControlled:(e,t)=>Yt(n,e,t),useScrollPosition:e=>Gt(n,e),useInView:e=>Jt(n,e),useControlledInput:(e,t)=>Xt(n,e,t),useDragDrop:e=>Qt(n,e),useMedia:e=>ke(n,e),useBreakpoint:e=>en(n,e),useChat:e=>tn(n,e),useTween:(e,t)=>nn(n,e,t),useDrag:e=>on(n,e),useVisualViewport:()=>rn(n),useReducedMotion:()=>pt(n)}}function Ae(n){return F(n)?{kind:"hole"}:Array.isArray(n)?{kind:"array",items:n}:{kind:"vnode",v:n}}function oe(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 i of r.onUnmounts.reverse())try{i()}catch(s){console.error("[vdom] onUnmount:",s)}e.delete(o)}}}function at(n,e,t,o){return typeof n?.type=="function"||Array.isArray(n)||_(n)==="hole"?{parent:e,index:0}:{parent:t,index:o}}function L(n,e,t,o,r,i,s,a){let l=[];return Ee(n,e,t,o,r,i,s,a,l),M(l)}function Ee(n,e,t,o,r,i,s,a,l){let d=C(e,t);switch(_(n)){case"text":{let u=Me(n);l.push({op:"createText",id:d,value:u},{op:"insert",id:d,parent:e,ref:o});break}case"hole":{nt(u=>l.push(u),d,e,o);break}case"array":{let u=n;ve(u,`\u6570\u7EC4\u5C55\u5F00\uFF08${e}\uFF09`);let f=t,c=o;for(let m of u){Ee(m,e,f,c,r,i,s,a,l);let x=I(m);c=C(e,f+x-1),f+=x}break}case"fragment":{let u=H(n);ve(u,`Fragment \u5C55\u5F00\uFF08${e}\uFF09`);let f=t,c=o;for(let m of u){Ee(m,e,f,c,r,i,s,a,l);let x=I(m);c=C(e,f+x-1),f+=x}break}case"element":{let u=n;l.push({op:"create",id:d,tag:u.type,attrs:he(u.props)});for(let[g,y]of Object.entries(u.props))g==="children"||g==="key"||g==="ref"||typeof y=="function"&&l.push({op:"setProp",id:d,key:g,value:y});l.push({op:"insert",id:d,parent:e,ref:o});let f=u.props.ref;typeof f=="function"&&l.push({op:"ref",id:d,fn:f});let c=H(u);ve(c,`\u5143\u7D20 children\uFF08${d}\uFF09`);let m=null,x=0;for(let g of c){Ee(g,d,x,m,r,i,s,a,l);let y=I(g);m=C(d,x+y-1),x+=y}l.push({op:"close",id:d});break}case"component":{let u=n,f=u.key!==null?W(e,u.key):d,c=s??new Map,m=c.get(f);m&&m.factory!==u.type&&(G(f,c),m=void 0),m?ne("seg:reuse",f):(m=Pt(u.type,u.props,r,f,a),c.set(f,m),ne("seg:create",f));let x;try{x=st(m,u.props)}catch(y){ge(f,y),x=null}x!==null&&qe(f),m.lastOutput=Ae(x);let g=at(x,f,e,t);if(F(x)){let y=C(f,0);l.push({op:"createAnchor",id:y},{op:"insert",id:y,parent:e,ref:o},{op:"mount",compId:f});break}Ee(x,g.parent,g.index,o,r,i,c,a,l),l.push({op:"mount",compId:f});break}case"invalid":{console.warn(`[vdom] \u975E\u6CD5\u5B50\u8282\u70B9\u2014\u2014${tt(n)}`),nt(u=>l.push(u),d,e,o,tt(n));break}}}function Ue(n,e,t,o,r){let i=e??{},s=t??ee();return L(n,"root",0,null,i,s,o,r).pipe(po(M([{op:"done",full:!0}])))}function M(n){return R(e=>{for(let t of n)e.next(t);return e.complete(),()=>{}})}function $(n){return R(e=>{let t=0,o=null,r=!1,i=!1,s=()=>{if(!(r||i)){for(i=!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&&s())}}),d=!1,!l)break}i=!1}};return s(),()=>{r=!0,o?.unsubscribe()}})}function po(n){return e=>$([e,n])}function ln(n,e,t,o,r,i){let s=r??new Map,a=o??ee(),l=Ie(n,e,t??{},s,a,i);return new ReadableStream({start(d){l.subscribe({next:u=>d.enqueue(u),error:u=>d.error(u),complete:()=>d.close()})}})}function un(n,e,t,o,r){let s=Ue(n,e,t,o??new Map,r);return new ReadableStream({start(a){s.subscribe({next:l=>a.enqueue(l),error:l=>a.error(l),complete:()=>a.close()})}})}function Be(n,e,t){if(n!==e)throw new Error(`${t??"assertEqual"}: ${JSON.stringify(n)} !== ${JSON.stringify(e)}`)}function dn(n,e){if(!n)throw new Error(e??"assertOk")}function fn(n){return n.nodeType===1?"element":n.nodeType===3?"text":n.nodeType===8?"hole":"comment"}function Wi(n,e,t="\u540C\u6784\uFF08childNodes \u957F\u5EA6 + \u4F4D\u7F6E + \u7C7B\u578B\uFF09"){Be(n.childNodes.length,e.length,`${t}\u2014\u2014\u957F\u5EA6\uFF08\u584C\u7F29/\u591A\u4F59\u5373 bug\uFF09`);for(let o=0;o<e.length;o++)Be(fn(n.childNodes[o]),e[o],`${t}\u2014\u2014\u4F4D\u7F6E ${o}\uFF08\u7B2C i \u9879 \u27F7 childNodes \u7B2C i \u4E2A\uFF09`)}function _i(n,e,t,o=`\u4F4D\u7F6E ${e}`){dn(n.childNodes[e],`${o}\u2014\u2014\u5B58\u5728`),Be(fn(n.childNodes[e]),t,`${o}\u2014\u2014\u7C7B\u578B`)}function ji(n,e,t,o="\u590D\u7528\u9879 DOM \u5F15\u7528\u4FDD\u6301\uFF08\u4E0D\u91CD\u5EFA\uFF09"){let r=n.querySelector(e);dn(r,`${o}\u2014\u2014\u65B0\u9879\u5B58\u5728`),Be(r,t,o)}async function qi(n,e,t,o,r=2,i="\u5F80\u8FD4\u53EF\u9006\uFF08\u72B6\u6001\u4E0D\u6F02\u79FB\uFF09"){for(let s=0;s<r;s++)n(),await o(t),n(),await o(e)}async function Ji(n,e,t){let o=await n(e,t);return typeof o=="function"?o(e):o}async function Xi(n,e,t){let o=await n(e,t);return()=>typeof o=="function"?o(e):o}function Ke(n,e){if(n==null||typeof n!="object")return;if(Array.isArray(n)){for(let o of n)Ke(o,e);return}e(n);let t=n?.props?.children;t!=null&&Ke(t,e)}function Zi(n,e){let t;return Ke(n,o=>{!t&&e(o)&&(t=o)}),t}function Qi(n,e){let t=[];return Ke(n,o=>{typeof o?.props?.class=="string"&&o.props.class.split(" ").includes(e)&&t.push(o)}),t}var We=new WeakMap;async function mo(n,e,t){let o=n.ownerDocument;n.innerHTML="";let r=ee(),i=new me(n,o,r),s=new Map;We.set(n,{registry:r,applier:i,segments:s});let a=un(e,t??{},r,s);for await(let l of a)i.apply(l)}async function ea(n,e,t,o,r){let i=We.get(n);if(o==null)return n.innerHTML="",null;if(i){let s=ln(t,o,r??{},i.registry,i.segments);for await(let a of s)i.applier.apply(a)}else await mo(n,o,r);return o}function ta(n){We.get(n)?.applier.dispose(),We.delete(n)}function na(n,e){return Promise.resolve(n)}export{Wi as assertIsomorphic,ji as assertKept,qi as assertRoundTrip,_i as assertSlot,na as buildToDom,ta as disposeToDom,Qi as findByClass,Zi as findVNode,Xi as mountComponent,mo as mountToDom,ea as patchToDom,Ji as renderVNode,fn as shapeOf,Ke as walkVNode};
|
|
@@ -20,6 +20,11 @@ export interface ToolContext {
|
|
|
20
20
|
emit: WfEmitter;
|
|
21
21
|
/** 用户取消 → abort(长任务应响应此 signal) */
|
|
22
22
|
signal?: AbortSignal;
|
|
23
|
+
/** **会话上下文(2027-09——AgentConfig.toolContext 透传)**:业务上下文
|
|
24
|
+
* (departmentId/appId/requestId 等——调用方自定义)——工具 run 直接读
|
|
25
|
+
* ——消除「闭包注入」(应用层 getCtx + _toolXXX 属性——注入顺序 bug
|
|
26
|
+
* 结构性来源:agent-platform 技能工具「无部门上下文」实证) */
|
|
27
|
+
context?: Record<string, unknown>;
|
|
23
28
|
}
|
|
24
29
|
export interface AgentTool {
|
|
25
30
|
name: string;
|
|
@@ -48,6 +53,19 @@ export interface AgentConfig {
|
|
|
48
53
|
}) => boolean);
|
|
49
54
|
/** 审批超时(默认 5 分钟),到期按拒绝处理 */
|
|
50
55
|
approvalTimeoutMs?: number;
|
|
56
|
+
/** **工具会话上下文(2027-09)**:透传到每次工具调用的 ToolContext.context——
|
|
57
|
+
* 业务上下文单一注入面(调用方闭包零侵入——工具不再需要拿应用的
|
|
58
|
+
* ctx 闭包/读注入属性)——框架工具(HITL 审批等)未来同面 */
|
|
59
|
+
toolContext?: Record<string, unknown>;
|
|
60
|
+
/**
|
|
61
|
+
* O13 并行工具(2026-08——ORCHESTRATION-PLAN Wave 4):单 step 多 tool_call
|
|
62
|
+
* 并发执行(默认关——不突改既有行为)。
|
|
63
|
+
* 约束:任一工具调用需审批(humanInTheLoop)→ 整批回退串行(审批是
|
|
64
|
+
* 例外路径——不并发等待多个审批——黑盒风险);工具独立性由调用方
|
|
65
|
+
* 保证(沙盒/文件工具共享资源面——per-sandbox 串行队列层兜底)。
|
|
66
|
+
* 结果按 tool_call 顺序写入上下文(provider 要求 role:tool 跟随顺序)。
|
|
67
|
+
*/
|
|
68
|
+
parallelTools?: boolean;
|
|
51
69
|
}
|
|
52
70
|
export interface AgentRunOptions {
|
|
53
71
|
signal?: AbortSignal;
|
|
@@ -59,6 +59,18 @@ export interface AiClientOptions {
|
|
|
59
59
|
defaultModel: string;
|
|
60
60
|
/** embedding provider 配置(可选;未配时 embed/embedMany 抛 AiError('unsupported')) */
|
|
61
61
|
embedding?: AiEmbeddingOptions;
|
|
62
|
+
/**
|
|
63
|
+
* W6 首 token 超时(ms):provider 挂起(连接后无任何 chunk——含 thinking 模式
|
|
64
|
+
* 不发 reasoning 的异常停顿)→ 中止上游请求 + wf:error timeout(协议错误码表已定义
|
|
65
|
+
* 「无 token 超时」——补协议-实现缺口)。0 = 关。默认 60000。
|
|
66
|
+
*/
|
|
67
|
+
firstTokenTimeoutMs?: number;
|
|
68
|
+
/**
|
|
69
|
+
* W6 流式重试次数:仅限** emit 任何事件之前**的错误(429/5xx HTTP / fetch 网络异常)
|
|
70
|
+
* ——安静重试(不重复 token——上游未产出)。流中途/4xx/认证错误不重试。
|
|
71
|
+
* 默认 0 = 不重试(计费语义由调用方决定——诚实裁剪)。
|
|
72
|
+
*/
|
|
73
|
+
streamRetries?: number;
|
|
62
74
|
}
|
|
63
75
|
/** embedding provider 配置——默认参数与 DashScope compatible-mode 对齐(DeepSeek 无 embedding API) */
|
|
64
76
|
export interface AiEmbeddingOptions {
|
|
@@ -100,13 +112,13 @@ export interface AiClient {
|
|
|
100
112
|
}): Promise<void>;
|
|
101
113
|
/** 响应一个挂起的 HITL 审批(协议 §4.5,app 的 POST /approve 路由调用) */
|
|
102
114
|
approve(response: WfApprovalResponse): boolean;
|
|
103
|
-
/** 内部:agent
|
|
115
|
+
/** 内部:agent 循环挂起等待审批(A4:signal 取消也收尾——挂起不阻塞取消) */
|
|
104
116
|
waitApproval(req: {
|
|
105
117
|
id: string;
|
|
106
118
|
toolCallId: string;
|
|
107
119
|
name: string;
|
|
108
120
|
args: Record<string, unknown>;
|
|
109
|
-
}, emit: WfEmitter, timeoutMs?: number): Promise<WfApprovalResponse>;
|
|
121
|
+
}, emit: WfEmitter, timeoutMs?: number, signal?: AbortSignal): Promise<WfApprovalResponse>;
|
|
110
122
|
/** 单文本嵌入(知识库/语义检索;需 ai({ embedding }) 配置,未配抛 AiError) */
|
|
111
123
|
embed(text: string): Promise<number[]>;
|
|
112
124
|
/** 批量文本嵌入(按输入顺序返回) */
|
|
@@ -44,8 +44,8 @@ export interface Ai {
|
|
|
44
44
|
}): Response;
|
|
45
45
|
/** 响应一个挂起的 HITL 审批(协议 §4.5,app 的 POST /approve 路由调用) */
|
|
46
46
|
approve(response: WfApprovalResponse): boolean;
|
|
47
|
-
/** 内部:agent
|
|
48
|
-
waitApproval(req: ApprovalRequest, emit: WfEmitter, timeoutMs?: number): Promise<WfApprovalResponse>;
|
|
47
|
+
/** 内部:agent 循环挂起等待审批(A4:signal 取消也收尾——挂起不阻塞取消) */
|
|
48
|
+
waitApproval(req: ApprovalRequest, emit: WfEmitter, timeoutMs?: number, signal?: AbortSignal): Promise<WfApprovalResponse>;
|
|
49
49
|
/** 单文本嵌入(知识库/语义检索;需 ai({ embedding }) 配置,未配抛 AiError) */
|
|
50
50
|
embed(text: string): Promise<number[]>;
|
|
51
51
|
/** 批量文本嵌入(按输入顺序返回) */
|
package/dist/server/ai/sse.d.ts
CHANGED
|
@@ -11,6 +11,12 @@ export type WfEmitter = (name: string, data: unknown) => void;
|
|
|
11
11
|
export interface SseResponseOptions {
|
|
12
12
|
/** 客户端断开回调(取消上游请求) */
|
|
13
13
|
onAbort?: () => void;
|
|
14
|
+
/**
|
|
15
|
+
* 心跳间隔 ms(SSE 注释行 `: wf-heartbeat`——代理保活——A6 修复):
|
|
16
|
+
* 长工具执行零字节输出 → nginx proxy_read_timeout 断流;0 = 关。默认 15000。
|
|
17
|
+
* 注释行是协议合法——前端解析器(无 data 行)自动跳过——零改动。
|
|
18
|
+
*/
|
|
19
|
+
heartbeatMs?: number;
|
|
14
20
|
}
|
|
15
21
|
/**
|
|
16
22
|
* 构造 SSE Response。run 收到 emit,负责输出完整事件序列。
|