weifuwu 0.83.0 → 0.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +56 -51
  2. package/dist/components/ChatInput/ChatInput.d.ts +2 -2
  3. package/dist/components/Confirm/Confirm.d.ts +2 -2
  4. package/dist/components/Notification/Notification.d.ts +0 -2
  5. package/dist/components/Toast/Toast.d.ts +0 -2
  6. package/dist/components/index.d.ts +3 -3
  7. package/dist/components/index.js +12 -12
  8. package/dist/components/style.css +17 -0
  9. package/dist/index.js +2408 -341
  10. package/dist/ui-dom/Confirm.d.ts +1 -1
  11. package/dist/ui-dom/Notification.d.ts +1 -1
  12. package/dist/ui-dom/Toast.d.ts +1 -1
  13. package/dist/ui-dom/hooks/index.d.ts +0 -1
  14. package/dist/ui-dom/hooks/popup.d.ts +2 -0
  15. package/dist/ui-dom/hooks/stable.d.ts +2 -6
  16. package/dist/ui-dom/index.d.ts +24 -19
  17. package/dist/ui-dom/index.js +40 -22
  18. package/dist/ui-dom/jsx-runtime.js +1 -1
  19. package/dist/ui-dom/middleware/ws.d.ts +8 -0
  20. package/dist/ui-dom/popup-tracker.d.ts +1 -1
  21. package/dist/ui-dom/testing.d.ts +3 -9
  22. package/dist/ui-dom/testing.js +7 -1
  23. package/dist/ui-dom/types.d.ts +7 -37
  24. package/dist/ui-dom/vdom3/README.d.ts +6 -3
  25. package/dist/ui-dom/vdom3/app.d.ts +20 -0
  26. package/dist/ui-dom/vdom3/audit.d.ts +13 -0
  27. package/dist/ui-dom/vdom3/build.d.ts +7 -3
  28. package/dist/ui-dom/vdom3/commands.d.ts +13 -3
  29. package/dist/ui-dom/vdom3/comp-index.d.ts +18 -0
  30. package/dist/ui-dom/vdom3/delegate.d.ts +48 -0
  31. package/dist/ui-dom/vdom3/events.d.ts +8 -2
  32. package/dist/ui-dom/vdom3/index.d.ts +5 -3
  33. package/dist/ui-dom/vdom3/jsx.d.ts +26 -4
  34. package/dist/ui-dom/vdom3/record.d.ts +3 -0
  35. package/dist/ui-dom/vdom3/render.d.ts +19 -6
  36. package/dist/ui-dom/vdom3/replay.d.ts +11 -8
  37. package/dist/ui-dom/vdom3/root.d.ts +3 -7
  38. package/dist/ui-dom/vdom3/types.d.ts +128 -70
  39. package/dist/ui-dom/vdom3/ui.d.ts +3 -30
  40. package/dist/ui-dom/vdom3.js +12 -10
  41. package/dist/ui-dom/vnode.d.ts +9 -89
  42. package/docs/compat-three-library.md +1 -1
  43. package/docs/components-map.md +1 -1
  44. package/docs/frontend-middleware.md +59 -53
  45. package/docs/frontend-ui-dom.md +115 -132
  46. package/docs/frontend.md +28 -24
  47. package/docs/realtime.md +21 -21
  48. package/package.json +1 -1
  49. package/dist/test/client/setup.d.ts +0 -12
  50. package/dist/ui-dom/context.d.ts +0 -32
  51. package/dist/ui-dom/hooks/test/hooks.test.d.ts +0 -1
  52. package/dist/ui-dom/middleware/serve.d.ts +0 -27
  53. package/dist/ui-dom/router.d.ts +0 -73
  54. package/dist/ui-dom/vdom2/audit.d.ts +0 -28
  55. package/dist/ui-dom/vdom2/build.d.ts +0 -53
  56. package/dist/ui-dom/vdom2/ctx.d.ts +0 -32
  57. package/dist/ui-dom/vdom2/dom-trace.d.ts +0 -4
  58. package/dist/ui-dom/vdom2/events.d.ts +0 -65
  59. package/dist/ui-dom/vdom2/hydrate.d.ts +0 -21
  60. package/dist/ui-dom/vdom2/index.d.ts +0 -13
  61. package/dist/ui-dom/vdom2/kind.d.ts +0 -44
  62. package/dist/ui-dom/vdom2/lifecycle.d.ts +0 -54
  63. package/dist/ui-dom/vdom2/mount.d.ts +0 -77
  64. package/dist/ui-dom/vdom2/patch.d.ts +0 -116
  65. package/dist/ui-dom/vdom2/registry.d.ts +0 -27
  66. package/dist/ui-dom/vdom2/render.d.ts +0 -21
  67. package/dist/ui-dom/vdom2/route.d.ts +0 -29
  68. package/dist/ui-dom/vdom2/ssr.d.ts +0 -32
  69. package/dist/ui-dom/vdom2/trace.d.ts +0 -62
  70. package/dist/ui-dom/vdom2/transform.d.ts +0 -76
  71. package/dist/ui-dom/vdom2/transitions.d.ts +0 -24
  72. package/dist/ui-dom/vdom2/x2html.d.ts +0 -26
  73. package/dist/ui-dom/vdom3/compat.d.ts +0 -20
@@ -1 +1 @@
1
- var i=Symbol("Fragment"),d=Symbol("Portal");function t(e,o,n=null){return{type:e,props:o,key:n,_child:null,_parentNode:null,_refNode:null,_id:null,_customId:null,_parentVNode:null,_ctxVersion:null,_lifecycle:"fresh"}}function u(e,o,n=null){return e===i?{...t(e,o,n),type:e}:e===d?{...t(e,o,n),type:e,_remoteEl:null,_placement:"remote"}:typeof e=="function"?{...t(e,o,n),type:e,_render:null,_outputChild:null}:{...t(e,o,n),type:e,el:null}}function r(e,o,n){return u(e,c(o),n??null)}var s=r;function a(e,o,n){return r(e,o,n)}function c(e){if(!e)return{};let o={};for(let n of Object.keys(e))n!=="key"&&(o[n]=e[n]);return o}export{i as Fragment,r as jsx,a as jsxDEV,s as jsxs};
1
+ var r=Symbol("v3-fragment");function t(n,e,o){let i=e?{...e}:{};return delete i.key,{type:n,props:i,key:o??e?.key??null}}var p=t;function l(n,e,o){return t(n,e,o)}export{r as Fragment,t as jsx,l as jsxDEV,p as jsxs};
@@ -13,11 +13,19 @@ export interface WsOptions {
13
13
  pingTimeout?: number;
14
14
  }
15
15
  /** ws 中间件注入到 ctx 的字段 */
16
+ /** ws 连接状态(页面清晰显示——用户要求"ws 链接状态一定要清晰") */
17
+ export type WsStatus = 'connecting' | 'connected' | 'disconnected';
16
18
  /** ws 中间件注入的客户端形状(与 WfuiContext.ws 一致) */
17
19
  export interface WsClient {
18
20
  send: (msg: unknown) => void;
19
21
  onMessage: (fn: (data: unknown) => void) => () => void;
20
22
  isConnected: boolean;
23
+ /** 连接状态通知(open → connected / close → disconnected(重连中)/
24
+ * 首次连接前 connecting)——页面渲染 + 状态清晰显示;payload 含重连信息 */
25
+ onStatusChange: (fn: (status: WsStatus, detail?: {
26
+ attempt: number;
27
+ max: number;
28
+ }) => void) => () => void;
21
29
  }
22
30
  export interface WsInjected {
23
31
  ws: WsClient;
@@ -2,7 +2,7 @@
2
2
  * weifuwu/ui-dom 弹层/滚动位置跟踪系统(实例化——serve 每实例一个)
3
3
  *
4
4
  * 复制自 client/app.ts 闭包逻辑(createUi 依赖):scroll/resize 时重算弹层
5
- * fixed 坐标(rAF 节流)+ 滚动位置跟踪。createApp 与 uiServe 各自持有实例。
5
+ * fixed 坐标(rAF 节流)+ 滚动位置跟踪。vdom3 引擎(createRouter/createRoot)各自持有实例。
6
6
  */
7
7
  import type { PopupPosition } from './types.ts';
8
8
  export interface PopupTrackerEntry {
@@ -18,15 +18,9 @@
18
18
  */
19
19
  import type { VNode } from './vnode.ts';
20
20
  import type { WfuiContext } from './types.ts';
21
- /**
22
- * 组件 DOM 级测试辅助(vdom 引擎):
23
- * - mountToDom:buildVNode(await 工厂)→ renderValue → append(等挂载完成)
24
- * - patchToDom:同树 patch(patchValue 兼容签名——第 5 参 ctx)
25
- * - buildToDom:buildVNode 预构建(vdom 签名:reg 参数可省略)
26
- */
27
- export declare function mountToDom(container: Element, vnode: VNode, ctx: any): Promise<void>;
28
- export declare function patchToDom(container: Element, node: Node | null, prev: any, next: any, ctx: any): Promise<any>;
29
- export declare function buildToDom(vnode: VNode, ctx: any): Promise<any>;
21
+ export declare function mountToDom(container: Element, vnode: any, _ctx: any): Promise<void>;
22
+ export declare function patchToDom(container: Element, _node: Node | null, _prev: any, next: any, _ctx: any): Promise<any>;
23
+ export declare function buildToDom(vnode: any, _ctx: any): Promise<any>;
30
24
  /**
31
25
  * 渲染两阶段异步组件到 VNode 层:await 工厂(mount)+ render 一次(内层)。
32
26
  * **只渲染一层**——子组件 VNode 的 type 是组件函数(断言 === Comp),不展开 DOM。
@@ -1 +1,7 @@
1
- var oe=Symbol("Fragment"),ae=Symbol("Portal");function ke(e){return e!=null&&typeof e=="object"&&typeof e.type=="string"}function K(e){return e!=null&&typeof e=="object"&&e.type===oe}function w(e){return e!=null&&typeof e=="object"&&typeof e.type=="function"}function S(e){return e!=null&&typeof e=="object"&&e.type===ae}function b(e){return e==null||typeof e=="boolean"?[]:Array.isArray(e)?e:[e]}var he={error:0,warn:1,info:2,debug:3,trace:4},$e=["mount","build","render","diff","lifecycle","route","audit"],I={enabled:!1,stages:new Set,level:"info",filter:null},ge=!1;function on(e){return e&&e in he?e:"info"}function Pe(e){let n=new Set;if(!e)return n;for(let t of e.split(",")){let o=t.trim().split(":")[0];$e.includes(o)&&n.add(o)}return n}function rn(){if(ge)return I;ge=!0;try{let e=globalThis,n=new URLSearchParams(typeof e.location?.search=="string"?e.location.search:""),t=n.get("vdom_trace"),o=n.get("vdom_debug"),i=e.__vdom_trace__,r=typeof e.localStorage?.getItem=="function"?e.localStorage.getItem("vdom_trace"):null;if(o==="1"||e?.localStorage?.getItem?.("__WF_VDOM_DEBUG")==="1")I={enabled:!0,stages:new Set($e),level:"debug",filter:null};else if(t||i||r){let l=new Set;if(t)for(let d of Pe(t))l.add(d);if(i?.stages){let d=Array.isArray(i.stages)?i.stages:[...i.stages];for(let u of d)l.add(u)}if(r)for(let d of Pe(r))l.add(d);I={enabled:!0,stages:l,level:t?.includes(":")?on(t.split(":")[1]):i?.level??"debug",filter:typeof i?.filter=="string"?i.filter:null}}}catch{}return I}function N(e,n="info"){return!I.enabled&&(ge||rn(),!I.enabled)||I.stages.size&&!I.stages.has(e)?!1:he[n]<=he[I.level]}function h(e,n,t,...o){if(!N(e,n)&&!Ie())return;let i=I.filter;i&&!t.includes(i)||C({session:"",machine:e,nodeId:null,component:null,from:"",event:"TRACE",to:"",payload:()=>o.length?`${t} ${o.join(" ")}`:t,level:n,ts:Date.now()})}function A(e,n=12){if(!e)return"\u2205";if(typeof e=="string"||typeof e=="number")return`"${e}"`;if(!Array.isArray(e))return z(e);let t=e.slice(0,n).map(z);return e.length>n&&t.push(`\u2026+${e.length-n}`),`[${t.join(" | ")}]`}function ln(e){return typeof e=="function"?"function":e===oe?"fragment":typeof e=="string"?"string":"other"}var dn={function:e=>e.name||"Comp",fragment:()=>"Frag",string:e=>String(e),other:e=>String(e)};function z(e){if(e==null||typeof e=="boolean")return String(e);if(typeof e=="string")return`"${e.slice(0,16)}"`;if(typeof e=="number")return String(e);if(Array.isArray(e))return`ARR(${e.length})`;let n=e,t=n.type,o=dn[ln(t)](t),i=n.props?.id?`#${n.props.id}`:n.key!=null?`@${n.key}`:"";return o+i}function R(e){if(!e)return"null";if(e.nodeType===1){let n=e;return`${n.tagName}${n.id?`#${n.id}`:""}${n.getAttribute?.("data-wf-key")?`@${n.getAttribute("data-wf-key")}`:""}`}return e.nodeType===3?`"${(e.textContent??"").slice(0,12)}"`:e.nodeType===8?`<!--${(e.nodeValue??"").slice(0,40)}-->`:`#${e.nodeType}`}function O(e,n=12){if(!e)return"null";let o=Array.from(e.childNodes).slice(0,n).map(R);return e.childNodes.length>n&&o.push(`\u2026+${e.childNodes.length-n}`),`[${o.join(" | ")}]`}var sn={route:"route",lifecycle:"lifecycle",x2y:"diff",keys:"diff",pos:"diff",render:"render",audit:"audit",build:"build",mount:"mount",diff:"diff",dom:"diff"};function Me(e){return sn[e]}var Y=new Set;function je(e){return Y.add(e),()=>{Y.delete(e)}}var Le=[];function _e(){return Le[Le.length-1]??""}function C(e){if(pn(),Y.size!==0){e.session||(e.session=_e()),typeof e.payload=="function"&&(Y.size>1||N(Me(e.machine),e.level??"debug"))&&(e.payload=e.payload());for(let n of Y)try{n(e)}catch{}}}function Ie(){return Y.size>1}function un(e){if(e==null)return"";if(typeof e=="string")return` ${e}`;if(typeof e=="object"){let n=e,t=[];for(let o of["path","i","key","mode","kind","insertedBefore","after","depth"])if(n[o]!==void 0){let i=n[o];t.push(`${o}=${typeof i=="object"?JSON.stringify(i):String(i)}`)}return t.length?" "+t.join(" "):""}return` ${String(e)}`}function an(e){let n=Me(e.machine);if(!N(n,e.level??"debug"))return;if(e.event==="TRACE"){console.log(`[vdom:${e.machine}] ${e.payload}`);return}let t=e.component?`${e.component}${e.nodeId?`(${e.nodeId})`:""}`:e.nodeId?`(${e.nodeId})`:"";console.log(`[vdom:${e.machine}] ${t?t+" ":""}${e.from} --${e.event}--> ${e.to}${un(e.payload)}`)}je(an);var cn=Number(globalThis?.__WF_RING_MAX)||5e3,Ve=[],De=!1;function fn(e){Ve.push(e),Ve.length>cn&&Ve.shift()}function pn(){De||(De=!0,je(fn))}var yn={fresh:{BUILD_START:"building",BUILD_DONE:"built",PRUNE:"pruned",DISPOSE:"disposed"},building:{BUILD_DONE:"built",DISPOSE:"disposed"},built:{BUILD_START:"building",PRUNE:"pruned",DISPOSE:"disposed"},pruned:{BUILD_START:"building",PRUNE:"pruned",DISPOSE:"disposed"},disposed:{BUILD_START:"building"}};function k(e){let n=0,t=e._parentVNode??null;for(let o=0;o<10&&t;o++)n++,t=t._parentVNode??null;return{name:typeof e.type=="function"?e.type.name||"anonymous":String(e.type),id:e._id??null,depth:n}}var Oe=new Map,mn=50;function Nn(e,n,t,o){if(!e?.id)return;let i=Oe.get(e.id);i||(i={name:e.name??"?",events:[]},Oe.set(e.id,i)),i.events.push(`${n}--${t}-->${o}`),i.events.length>mn&&i.events.shift()}function P(e,n,t){let o=yn[e]?.[n]??null;return o==null?(C({session:"",machine:"lifecycle",nodeId:t?.id??null,component:t?.name??null,from:e,event:n,to:"?",level:"warn",ts:Date.now()}),e):(Nn(t,e,n,o),C({session:"",machine:"lifecycle",nodeId:t?.id??null,component:t?.name??null,from:e,event:n,to:o,payload:()=>({depth:t?.depth??0}),level:"debug",ts:Date.now()}),o)}function Q(e){return!e||e._lifecycle==="disposed"||e._child==null?!1:!J(e._child)}function J(e){if(e==null||typeof e!="object")return!1;if(Array.isArray(e)){for(let t of e)if(J(t))return!0;return!1}let n=e;return!!(n._lifecycle==="disposed"||n._child!=null&&J(n._child))}var hn=0;function U(){return{idRegistry:new Map,unmountHooks:[],nextId:()=>`_wf_${hn++}`}}function He(e,n){for(let t of[...e.unmountHooks])t(n);e.idRegistry.delete(n),e.idRegistry.delete(`custom:${n}`)}function gn(e,n,t,o){try{e(n)}catch(i){console.error(`[weifuwu] ref ${t} error in <${o??"anonymous"}>`,i)}}function v(e,n){if(e==null||typeof e!="object")return;let t=e;if(t._lifecycle!=="disposed"){if(t._id){let o=k(t);if(t._customId&&n.idRegistry.delete(t._customId),n.idRegistry.delete(t._id),n.unmountHooks.length>0){let i=[...n.unmountHooks];for(let r of i)r(t._id);if(t._customId)for(let r of i)r(t._customId)}t._id=null,t._customId=null,w(t)&&(t._render=null),t._parentNode=null,t._refNode=null,t._lifecycle=P(t._lifecycle,"DISPOSE",o)}else(w(t)||t._child!=null)&&(t._lifecycle=P(t._lifecycle,"DISPOSE",k(t)));if(t._child!=null){if(Array.isArray(t._child))for(let o of t._child)o&&typeof o=="object"&&v(o,n);else v(t._child,n);t._child=null}if(t.props?.children&&typeof t.type=="string"){let o=Array.isArray(t.props.children)?t.props.children:[t.props.children];for(let i of o)i&&typeof i=="object"&&v(i,n)}if(typeof t.props?.ref=="function"&&gn(t.props.ref,null,"cleanup"),S(t)){let o=t._remoteEl;if(o){let i=t._child;if(i!=null)if(Array.isArray(i))for(let r of i)r&&typeof r=="object"&&v(r,n);else typeof i=="object"&&v(i,n);o.remove(),t._remoteEl=null}}}}function g(e){return typeof e=="function"&&e.name||"anonymous"}function Be(e){return e.ui?._ctxVersion??0}function Ce(e,n){e.ui?.setMounting?.(n)}function V(e,n){if(e==null||typeof e!="object")return null;if(Array.isArray(e)||K(e)){let o=n;if(o&&o.nodeType===8&&o.nodeValue?.includes("type=fragment-start")){let i=[o],r=/fid=([^\s"]+)/.exec(o.nodeValue)?.[1]??"",l=o.nextSibling;for(;l&&(i.push(l),!(l.nodeType===8&&l.nodeValue?.includes("type=fragment-end")&&(/fid=([^\s"]+)/.exec(l.nodeValue)?.[1]??r)===r));)l=l.nextSibling;return i}return null}let t=e;return w(t)?V(t._outputChild??t._child,n):null}function L(e){if(e==null||typeof e=="boolean")return"hole";if(typeof e=="string"||typeof e=="number")return"text";if(Array.isArray(e))return"arr";let n=e;return K(n)?"frag":S(n)?"portal":w(n)?"comp":"native"}function we(e){let n=!1,t=!1;for(let o of e){if(o==null||typeof o=="boolean"||typeof o=="string"||typeof o=="number")continue;if(Array.isArray(o)){t=!0;continue}let i=o;S(i)||(i.key!=null?n=!0:t=!0)}return n&&t?"mixed":n?"keyed":"unkeyed"}function Vn(e){if(e===!1)return"false";if(e===null)return"null";if(e===void 0)return"undefined";if(e===!0)return"true";if(typeof e=="object")try{let n=JSON.stringify(e);return`object ${n!=null&&n.length>80?n.slice(0,80)+"\u2026":n??""}`}catch{return`object ${Object.prototype.toString.call(e)}`}return`bad-vnode type=${typeof e}`}function ce(e){return/[\s"=]/.test(e)?`"${e.replace(/"/g,"'")}"`:e}function Z(e){let n=[`type=${e.type}`];return e.value!==void 0&&n.push(`value=${ce(Vn(e.value))}`),e.key!=null&&n.push(`key=${ce(e.key)}`),e.id!=null&&n.push(`id=${ce(e.id)}`),e.fid!=null&&n.push(`fid=${ce(e.fid)}`),`wf-hole: ${n.join(" ")}`}var _n=/^on[A-Z]/,Cn=/^on[A-Z].*Capture$/;function be(e){let n=Cn.test(e);return{type:(n?e.slice(2,-7):e.slice(2)).toLowerCase(),capture:n}}var wn=new Set(["draggable","contenteditable","spellcheck","translate"]),bn=new Set(["zIndex","opacity","lineHeight","fontWeight","fontSizeAdjust","flex","flexGrow","flexShrink","order","zoom","aspectRatio","gridRow","gridColumn","scale","rotate","animationIterationCount","columnCount","fillOpacity","strokeOpacity","stopOpacity","floodOpacity"]);function ve(e){return wn.has(e.toLowerCase())?"enumerated":e==="class"||e==="className"?"class":e==="style"?"style":e==="ref"?"ref":_n.test(e)?"event":e==="value"?"value":e==="indeterminate"?"indeterminate":e==="innerHTML"?"innerHTML":e.startsWith("aria-")?"aria":"default"}function Fe(e,n,t){if(t!==!1){if(t===!0){e.setAttribute(n,"");return}try{e[n]=t,e.getAttribute(n)!==String(t)&&e.setAttribute(n,String(t))}catch{e.setAttribute(n,String(t))}}}var vn={enumerated:(e,n,t)=>{e.setAttribute(n,t?"true":"false")},class:(e,n,t)=>{if(t!==!1)if(typeof t=="object")for(let[o,i]of Object.entries(t))i&&e.classList.add(o);else e.setAttribute("class",String(t))},style:(e,n,t)=>{if(t!==!1)if(typeof t=="string")e.setAttribute("style",t);else{let o=e.style;for(let[i,r]of Object.entries(t))r==null?o[i]="":i.startsWith("--")?o.setProperty(i,String(r)):typeof r=="number"&&!bn.has(i)?o[i]=`${r}px`:o[i]=String(r)}},ref:(e,n,t)=>{if(typeof t=="function")try{t(e)}catch(o){console.error("[weifuwu] ref error",o)}},event:(e,n,t)=>{if(t===!1)return;let{type:o,capture:i}=be(n);if(typeof t!="function"){console.warn(`[weifuwu] event prop ${n} expects a function, got ${typeof t} \u2014 ignored`);return}e.addEventListener(o,t,i?{capture:!0}:{})},value:(e,n,t)=>{t!==!1&&(e.value=t)},indeterminate:(e,n,t)=>{t!==!1&&(e.indeterminate=!!t)},innerHTML:(e,n,t)=>{t!==!1&&(e.innerHTML=String(t??""))},aria:(e,n,t)=>{if(t!==!1){if(typeof t=="boolean"){e.setAttribute(n,t?"true":"false");return}Fe(e,n,t)}},default:Fe};function q(e,n,t){t!=null&&vn[ve(n)](e,n,t)}function H(e,n){return e.createComment(Z({type:"hole",value:n,key:null,id:null,fid:null}))}function ee(){let e=globalThis;return!(e.__WF_VDOM_AUDIT===0||e.__WF_VDOM_AUDIT==="0"||e.__WF_VDOM_AUDIT===!1)}function xn(e,n){if(e===n)return!0;let t=Object.keys(e),o=Object.keys(n);if(t.length!==o.length)return!1;for(let i of t)if(e[i]!==n[i])return!1;return!0}async function En(e,n,t,o){let i=e;i._id||(o?.reuse?._id?i._id=o.reuse._id:i._id=t.nextId(),t.idRegistry.set(i._id,i)),o?.reuse&&(o.reuse._parentNode&&(i._parentNode=o.reuse._parentNode),o.reuse._refNode&&(i._refNode=o.reuse._refNode),o.reuse._ctxVersion!=null&&(i._ctxVersion=o.reuse._ctxVersion));let r=Object.create(n);r.ui=Object.create(n.ui);let l=r.ui;if(l._selfId=i._id??null,l._selfVNode=i,l.render=function(d){let u={source:"component",component:g(i.type),nodeId:i._id??null},c=r.ui,s=0;for(;c&&typeof c=="object"&&c._selfVNode&&s<10;)c=Object.getPrototypeOf(c),s++;return d==null&&i._id?c.render([i._id],u):c.render(d,u)},typeof i._render!="function"&&w(o?.reuse)&&typeof o.reuse._render=="function"&&(i._render=o.reuse._render),typeof i._render!="function"){Ce(n,!0);let d;try{d=await i.type(i.props??{},r)}finally{Ce(n,!1)}if(typeof d!="function")throw new Error(`Component ${g(e.type)} must return a render function. Use (init_props, ctx) => (props) => VNode pattern.`);i._render=d}return{renderFn:i._render,childCtx:r}}function xe(e){return!!e&&typeof e.then=="function"}function B(e,n,t,o,i){return Sn[L(e)](e,n,t,o,i)}function Ee(e,n){return e!=null&&typeof e=="object"&&!Array.isArray(e)&&e.type===n.type?e:null}var Sn={hole:e=>e,text:e=>e,arr:An,comp:Rn,frag:Tn,native:Ke,portal:Ke};function An(e,n,t,o,i){let r=e;N("build")&&h("build","debug","",`array in kids=${A(r)}`);for(let s of r)if(s!=null&&typeof s=="object"&&!Array.isArray(s)&&s._lifecycle==="disposed"){let a=s;C({session:"",machine:"audit",nodeId:a._id??null,component:g(a.type),from:"disposed",event:"CONTRACT_VIOLATION",to:"new-tree",level:"error",ts:Date.now()}),ee()&&console.error(`[vdom2/audit] \u4E24\u9636\u6BB5\u5951\u7EA6\u8FDD\u53CD\uFF1A\u7EC4\u4EF6 ${g(a.type)} \u7684 renderFn \u8FD4\u56DE\u4E86 disposed \u65E7 vnode${a._id?`(${a._id})`:""}\u2014\u2014\u590D\u7528\u65E7\u6811\u5BF9\u8C61\uFF08\u5E94\u4E3A\u6BCF\u6B21\u6E32\u67D3\u751F\u6210\u65B0 vnode\uFF09\u3002\u540C\u4E00\u5BF9\u8C61\u65E2\u662F\u65E7\u6811\u53C8\u88AB dispose \u2192 diff \u81EA dispose \u2192 \u5361\u7247\u9519\u4F4D/\u6D88\u5931\uFF08demo \u641C\u7D22\u6062\u590D\u4E8B\u6545\uFF09`);break}for(let s=0;s<r.length;s++){let a=r[s];if(a!=null&&typeof a=="object"&&!Array.isArray(a)){let f=a;f.key!==null&&(f.key=String(f.key))}}let l=Array.isArray(t)?t:[],d=new Map;for(let s of l)s!=null&&typeof s=="object"&&!Array.isArray(s)&&s.key!=null&&d.set(s.key,s);let u=r.map((s,a)=>{let f=null;return s!=null&&typeof s=="object"&&!Array.isArray(s)&&s.key!=null&&(f=d.get(s.key)??null),f==null&&(f=l[a]??null),B(s,n,f,o,i)});N("build")&&h("build","debug","",`array out kids=${A(r)}`);let c=!1;for(let s=0;s<u.length;s++)if(xe(u[s])){c=!0;break}return c?Promise.all(u).then(()=>r):r}function Rn(e,n,t,o,i){let r=e,l=o??n.__registry??U(),d=Ee(t,r);if(ee()){let a=_e(),f=r._sessionId;f!=null&&f!==a&&r._lifecycle==="building"&&console.error(`[vdom2/audit] I1 \u4F1A\u8BDD\u4E92\u65A5\u8FDD\u53CD\uFF1A${g(r.type)} \u88AB\u4F1A\u8BDD ${f} \u6784\u5EFA\u4E2D\u53C8\u88AB\u4F1A\u8BDD ${a} \u5904\u7406\u2014\u2014\u540C\u4E00 vnode \u591A\u4F1A\u8BDD\u5E76\u53D1\u6784\u5EFA\uFF08await \u70B9\u6E32\u67D3\u4EA4\u9519\u2014\u2014\u6784\u5EFA\u7ED3\u679C\u4E0D\u786E\u5B9A\uFF0C\u9700\u6392\u67E5\u6E32\u67D3\u89E6\u53D1\u6E90\uFF09`),r._sessionId=a}r._id||(r._id=d?._id??l.nextId(),l.idRegistry.set(r._id,r)),d&&(d._parentNode&&(r._parentNode=d._parentNode),d._refNode&&(r._refNode=d._refNode),d._ctxVersion!=null&&(r._ctxVersion=d._ctxVersion),w(r)&&w(d)&&typeof d._render=="function"&&(r._render=d._render));let u=xn(d?.props??{},r.props??{}),c=Be(n),s=(d?._ctxVersion??-1)===c;if(!i?.force&&u&&s&&Q(d)&&typeof r._render=="function"){let a=d;return r._lifecycle=P(r._lifecycle,"PRUNE",k(r)),r._child=a._child,r._ctxVersion=a._ctxVersion,N("build")&&h("build","debug","",`prune comp=${z(r)} propsSame=${u} verSame=${s}`),r}return r._lifecycle=P(r._lifecycle,"BUILD_START",k(r)),N("build")&&h("build","debug","",`mount comp=${z(r)} propsSame=${u} verSame=${s} force=${!!i?.force} oldV=${d?(typeof d.type=="function"?d.type.name:String(d.type))+"/"+(d._lifecycle??"?"):"null"}`),(async()=>{let{childCtx:a}=await En(r,n,l,{reuse:d??null}),f=await B(await r._render(r.props),a,d?._child,l,i);return r._child=f??null,r._ctxVersion=c,r._lifecycle=P(r._lifecycle,"BUILD_DONE",k(r)),r})()}function Tn(e,n,t,o,i){let r=e,l=o??n.__registry??U(),d=Ee(t,r);N("build")&&h("build","debug","",`fragment kids=${A(b(r.props?.children))}`);let u=B(r.props?.children??null,n,d?._child??d?.props?.children,l,i);return xe(u)?u.then(c=>(r._child=c??null,r._lifecycle=P(r._lifecycle,"BUILD_DONE",k(r)),r)):(r._child=u??null,r._lifecycle=P(r._lifecycle,"BUILD_DONE",k(r)),r)}function Ke(e,n,t,o,i){let r=e;if(typeof r.type!="string"&&typeof r.type!="symbol")return r;let l=o??n.__registry??U(),d=Ee(t,r);N("build")&&h("build","trace","",`native <${String(r.type)}> kids=${A(b(r.props?.children))}`);let u=B(r.props?.children??null,n,d?.props?.children,l,i);return xe(u)?u.then(c=>(r._child=c??null,r._lifecycle=P(r._lifecycle,"BUILD_DONE",k(r)),r)):(r._child=u??null,r._lifecycle=P(r._lifecycle,"BUILD_DONE",k(r)),r)}function _(){return{activeElement:()=>typeof document<"u"?document.activeElement:null,byId:e=>typeof document<"u"?document.getElementById(e):null,query:e=>typeof document<"u"?document.querySelector(e):null,queryAll:e=>typeof document<"u"?document.querySelectorAll(e):null,createElement:e=>typeof document<"u"?document.createElement(e):null,createElementNS:(e,n)=>typeof document<"u"?document.createElementNS(e,n):null,createDocumentFragment:()=>typeof document<"u"?document.createDocumentFragment():null,createComment:e=>typeof document<"u"?document.createComment(e):null,createTextNode:e=>typeof document<"u"?document.createTextNode(e):null,addEventListener:(e,n,t)=>{typeof window<"u"&&window.addEventListener(e,n,t)},removeEventListener:(e,n,t)=>{typeof window<"u"&&window.removeEventListener(e,n,t)},scrollTo:e=>{typeof window<"u"&&window.scrollTo(0,e)},matchMedia:e=>typeof window<"u"&&typeof window.matchMedia=="function"?window.matchMedia(e):null,visualViewport:()=>(typeof window<"u"?window:null)?.visualViewport??null,scrollingElement:()=>typeof document<"u"?document.scrollingElement:null,bodyElement:()=>typeof document<"u"?document.body:null,bodyAppend:e=>{typeof document<"u"&&document.body.appendChild(e)},bodyRemove:e=>{typeof document<"u"&&e.parentNode&&document.body.removeChild(e)},clearBody:()=>{typeof document<"u"&&(document.body.innerHTML="")},event:(e,n)=>{let t=typeof window<"u"?window:null,o=n&&(n.key||n.code)?"KeyboardEvent":n&&(n.clientX!==void 0||n.clientY!==void 0||n.pointerId!==void 0)?"PointerEvent":"Event";try{return new t[o](e,n)}catch{return new t.Event(e,n)}},dispatchEvent:(e,n)=>typeof e<"u"?e.dispatchEvent(n):!1,reload:()=>{typeof window<"u"&&window.location.reload()},navigate:e=>{typeof window>"u"||(window.history.pushState(null,"",e),window.dispatchEvent(new PopStateEvent("popstate",{state:null})))},downloadFile:(e,n,t="text/plain")=>{try{if(typeof document>"u"||typeof URL>"u"||!URL.createObjectURL)return!1;let o=new Blob([n],{type:t}),i=URL.createObjectURL(o),r=document.createElement("a");return r.href=i,r.download=e,document.body.appendChild(r),r.click(),document.body.removeChild(r),setTimeout(()=>URL.revokeObjectURL(i),1e3),!0}catch{return!1}},copyText:async e=>{let n=typeof window<"u"?window:null;if(n?.navigator?.clipboard?.writeText)try{return await n.navigator.clipboard.writeText(e),!0}catch{}try{if(typeof document>"u")return!1;let t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();let o=document.execCommand("copy");return document.body.removeChild(t),o}catch{return!1}},execCommand:(e,n)=>typeof document<"u"?document.execCommand(e,!1,n):!1,queryCommandState:e=>typeof document<"u"?document.queryCommandState(e):!1,queryCommandValue:e=>typeof document<"u"?document.queryCommandValue(e):"",selectionText:()=>typeof window<"u"?window.getSelection?.()?.toString()??null:null,getSelection:()=>typeof window<"u"?window.getSelection():null,viewportHeight:()=>typeof window<"u"?window.innerHeight:0,viewportWidth:()=>typeof window<"u"?window.innerWidth:0,pathname:()=>typeof window<"u"?window.location.pathname:"",createTreeWalker:(e,n)=>typeof document<"u"?document.createTreeWalker(e,n??NodeFilter.SHOW_ALL):null,scrollTop:()=>{let e=typeof document<"u"?document:null,n=typeof window<"u"?window:null;return e?.scrollingElement?.scrollTop??n?.scrollY??0},hash:()=>typeof window<"u"?window.location?.hash??"":"",setHash:e=>{typeof window<"u"&&(window.location.hash=e)},timeout:(e,n)=>typeof window<"u"?window.setTimeout(e,n):0,rootElement:()=>typeof document<"u"?document.documentElement:null,storageGet:e=>{try{return typeof window<"u"?window.localStorage?.getItem(e)??null:null}catch{return null}},storageSet:(e,n)=>{try{typeof window<"u"&&window.localStorage?.setItem(e,n)}catch{}}}}var kn=new Set(["svg","path","circle","rect","line","polyline","polygon","g","text","defs","use","clipPath"]);function ne(e,n){return H(e,n)}function E(e,n,t,o=null,i=null,r=null){let l=n?.browser??t;if(!l)throw new Error("[vdom2] renderValue requires browser env (ctx.browser)");return Hn[L(e)](e,n,l,o,i,r)}function Pn(e,n,t){return null}function $n(e,n,t){return t.createTextNode(String(e))}function Se(e,n,t,o,i){if(e==null||typeof e=="boolean")return ne(t,e);let r=E(e,n,t,String(o),null,i);return r??ne(t,null)}function In(e,n,t,o=null,i=null,r=null){let l=e,d=t.createDocumentFragment();if(!d)return null;N("render")&&h("render","debug","",`array kids=${A(l)} fid=${r??"-"} key=${o??"-"}`);let u=t.createComment(Z({type:"fragment-start",key:o,id:i,fid:r})),c=t.createComment(Z({type:"fragment-end",key:o,id:i,fid:r}));u&&d.appendChild(u);for(let s=0;s<l.length;s++){let a=l[s],f=r!=null?`${r}-${s}`:String(s),p=Se(a,n,t,s,f);p!=null&&d.appendChild(p)}return c&&d.appendChild(c),d}function Ln(e,n,t){let o=e,i=o,r=t.bodyElement();if(!r)return null;let l=r.querySelector("#__wf_portal");l||(l=t.createElement("div"),l&&(l.id="__wf_portal",r.appendChild(l)));let d=t.createElement("div");if(d){d.setAttribute("data-portal",String(o.props?.portalKey??"wf"));let u=E(o.props?.children??null,n,t);u!=null&&d.appendChild(u),l&&l.appendChild(d),i._remoteEl=d;let c=b(o.props?.children);for(let s of c)s!=null&&typeof s=="object"&&!Array.isArray(s)&&(s._parentVNode=o)}return null}function Dn(e,n,t,o=null,i=null,r=null){let l=e,d=l,u=t.createDocumentFragment();if(!u)return null;let c=b(l.props?.children);N("render")&&h("render","debug","",`fragment kids=${A(c)} fid=${r??"-"}`);let s=t.createComment(Z({type:"fragment-start",key:o,id:i,fid:r})),a=t.createComment(Z({type:"fragment-end",key:o,id:i,fid:r}));s&&u.appendChild(s),d._refNode=s;for(let f=0;f<c.length;f++){let p=c[f],y=r!=null?`${r}-${f}`:String(f),m=Se(p,n,t,f,y);m!=null&&u.appendChild(m)}return a&&u.appendChild(a),u}function Mn(e,n,t){let o=e,i=o._lifecycle??(typeof o._render=="function"?"built":"fresh");return jn[i](o,n,t)}var jn={fresh:(e,n,t)=>{throw new Error(`[vdom2] component ${g(e.type)} not built (missing _render) \u2014 buildVNode must run before renderValue`)},building:(e,n,t)=>{throw new Error(`[vdom2] component ${g(e.type)} building in render \u2014 buildVNode must await before renderValue`)},disposed:(e,n,t)=>(console.warn(`[vdom2] disposed \u7EC4\u4EF6 ${g(e.type)} \u5728\u6E32\u67D3\u2014\u2014\u526A\u679D\u7F13\u5B58\u5931\u6548\u2014\u2014\u7236\u6811\u91CD\u5EFA\u4E2D\uFF08\u5360\u4F4D\u515C\u5E95\uFF09`),ne(t,null)),built:Ue,pruned:Ue};function Ue(e,n,t){let o=e._child;if(o==null)return e._child=null,null;e._child=o,e._outputChild=o,typeof o=="object"&&!Array.isArray(o)&&(o._parentVNode=e);let i=E(o,n,t);if(i){if(e._refNode=i.nodeType===11?i.firstChild:i,e._id)if(i.nodeType===11)for(let r of Array.from(i.childNodes))r.nodeType===1&&r.setAttribute("data-wf-id",e._id);else i.nodeType===1&&i.setAttribute("data-wf-id",e._id);if(e.key!=null)if(i.nodeType===11)for(let r of Array.from(i.childNodes))r.nodeType===1&&r.setAttribute("data-wf-key",e.key);else i.nodeType===1&&i.setAttribute("data-wf-key",e.key)}return i}function On(e,n,t,o,i){let r=e,l=r,d=r.type,u=kn.has(d)?t.createElementNS("http://www.w3.org/2000/svg",d):t.createElement(d);if(!u)return null;l.el=u,l._refNode=u,N("render")&&h("render","trace","",`native <${d}> key=${r.key??"-"} kids=${A(b(r.props?.children))}`),r.key!=null&&u.setAttribute("data-wf-key",r.key);let c=null;for(let[s,a]of Object.entries(r.props??{}))if(!(s==="children"||s==="key")){if(s==="value"&&(u instanceof HTMLSelectElement||u instanceof HTMLInputElement)){c=a;continue}q(u,s,a)}if(!("innerHTML"in(r.props??{}))){let s=b(r.props?.children);for(let a=0;a<s.length;a++){let f=s[a],p=i!=null?`${i}-${a}`:String(a),y=Se(f,n,t,a,p);if(y!=null&&(u.appendChild(y),f&&typeof f=="object"&&!Array.isArray(f)&&typeof f.type=="function")){let m=f;m._parentNode||(m._parentNode=u)}}N("render")&&h("render","trace","",`native <${d}> out=${O(u)}`)}return c!==null&&(u.value=String(c)),u}var Hn={hole:Pn,text:$n,arr:In,portal:Ln,frag:Dn,comp:Mn,native:On};function F(e){let{parent:n,oldNode:t,oldInput:o,ctx:i}=e,r=E(e.newInput,i,i.browser??_());if(r==null)return null;if(t?.parentNode){let l=re(o,t,n,i);return l&&l.parentNode===n?n.insertBefore(r,l):n.appendChild(r),r}return n.appendChild(r),r}function Bn(e){return re(e.oldInput,e.oldNode,e.parent,e.ctx),null}function Fn(e){let n=e.oldNode;if(n?.nodeType===8){let t=ne(e.ctx.browser??_(),e.newInput);return t&&n.nodeValue!==t.nodeValue&&(n.nodeValue=t.nodeValue),n}return null}function te(e){let{parent:n,oldNode:t,ctx:o}=e,i=E(e.newInput,o,o.browser??_());return i==null?null:(t?.parentNode?t.parentNode.replaceChild(i,t):t?n.insertBefore(i,t):n.appendChild(i),i)}function Kn(e){let{parent:n,oldNode:t,oldInput:o}=e,i=String(e.newInput);if(String(o)!==i){if(t&&t.nodeType===3)return t.nodeValue=i,t;let r=n.ownerDocument.createTextNode(i);return t?.parentNode?t.parentNode.replaceChild(r,t):n.appendChild(r),r}return t}function Un(e){let{parent:n,oldNode:t,oldInput:o,ctx:i}=e,r=e.newInput,l=o&&typeof o=="object"&&!Array.isArray(o)?o:null,d=r.type;if(t&&t.nodeType===1&&(l?.type??null)===d&&ke(r)){let u=t;return r.el=u,r._refNode=u,We(u,l?.props??{},r.props??{}),"innerHTML"in(r.props??{})||ie(u,l?._child??l?.props?.children??null,r._child??r.props?.children??null,i),u}return F(e)}function qn(e){let{parent:n,oldNode:t,oldInput:o,ctx:i}=e,r=e.newInput,l=o&&typeof o=="object"&&!Array.isArray(o)?o:null,d=K(l)?V(l,t):null,u=Ae(n,l??o,r,i,d);return t?.parentNode?t:u[0]??null}function Wn(e){let{parent:n,oldNode:t,oldInput:o,ctx:i}=e,r=e.newInput;if(!w(r)||typeof r._render!="function")throw new Error(`[vdom2] component ${g(r.type)} not built in diff \u2014 buildVNode must run before patchValue`);let l=o&&typeof o=="object"&&!Array.isArray(o)?o:null;if(l?.type!=null&&l.type!==r.type)return F(e);let d=l?.type===r.type;if(!i.force&&l&&d&&Q(l)&&r._child===l._child)return t;l?.type===r.type&&l._id&&(r._id=l._id,i.registry.idRegistry.set(r._id,r)),r._parentNode=n,t&&(r._refNode=t);let u=r._child;if(u===null){r._outputChild=null,r._refNode=null;let s=t?.parentNode!=null,a=re(l?._child??null,t,n,i);l&&(l._child=null);let f=ne(i.browser??_(),null);return s&&f?(a&&a.parentNode===n?n.insertBefore(f,a):n.appendChild(f),f):W(n,t,l?._child,null,i)}if(r._outputChild=u,u!=null&&J(u)||l?._child!=null&&J(l._child))return C({session:"",machine:"audit",nodeId:r._id??null,component:g(r.type),from:"PRUNED",event:"STALE_CACHE",to:"SKIP_DIFF",level:"warn",ts:Date.now()}),console.warn(`[vdom2] \u526A\u679D\u7F13\u5B58\u5931\u6548\uFF1A${g(r.type)} \u8F93\u51FA\u542B disposed \u7EC4\u4EF6\u2014\u2014\u5E76\u53D1\u6E32\u67D3\u4F1A\u8BDD dispose \u5171\u4EAB\u65E7\u6811\u2014\u2014\u8DF3\u8FC7 diff\uFF08\u4E0B\u4E00\u8F6E\u91CD\u5EFA\u6062\u590D\uFF09`),t;let c=W(n,t,l?._child,u,i);return c&&(r._refNode=c),c}function zn(e){let{parent:n,oldNode:t,oldInput:o,ctx:i}=e;if(o===e.newInput&&t?.parentNode)return t;let r=n.ownerDocument.createDocumentFragment(),l=ie(n,o,e.newInput,i,t?[t]:null);for(let d of l)d&&r.appendChild(d);return t?.parentNode?r.contains(t)?n.appendChild(r):t.parentNode.replaceChild(r,t):n.appendChild(r),r}function Gn(e){let{ctx:n,oldInput:t}=e,o=e.newInput,i=t&&typeof t=="object"&&!Array.isArray(t)?t:null;if(S(i)&&S(o)){let r=i._remoteEl;if(r){let l=i._child??i.props?.children??null,d=o._child??o.props?.children??null;ie(r,l,d,n)}return o._remoteEl=i._remoteEl,null}return F(e)}function G(e){return{text:F,native:F,frag:F,comp:F,arr:F,hole:Bn,portal:F,...e}}var Xn={text:G({text:Kn}),hole:G({text:te,native:te,frag:te,comp:te,arr:te,portal:te,hole:Fn}),native:G({native:Un}),frag:G({frag:qn}),comp:G({comp:Wn}),arr:G({arr:zn}),portal:G({portal:Gn})};function qe(e){let n=L(e.oldInput),t=L(e.newInput);return C({session:"",machine:"x2y",nodeId:null,component:null,from:n,event:"X2Y",to:t,level:"trace",ts:Date.now()}),Xn[n][t](e)}function D(e,n){if(n&&typeof e.type=="function"&&e._id){try{v(e,n)}catch(t){console.error("[weifuwu] ref cleanup error",t)}He(n,e._id)}}var ze=new Set;function ue(e){if(e==null||typeof e!="object"||Array.isArray(e))return null;let n=e;return S(n)?typeof n.props?.portalKey=="string"?n.props.portalKey:null:n.key}function Re(e,n){if(n&&e&&typeof e=="object"&&!Array.isArray(e)){let t=V(e,n);if(t&&t.length>1)return t}return[n]}function fe(e,n){let t=b(e.props?.children);for(let o of t){if(o==null||typeof o!="object"||Array.isArray(o))continue;let i=o;Yn[L(i)](i,n)}}var Yn={comp:(e,n)=>{D(e,n)},frag:(e,n)=>{fe(e,n)},native:(e,n)=>{fe(e,n)},portal:(e,n)=>{fe(e,n)},arr:()=>{},text:()=>{},hole:()=>{}};function re(e,n,t,o){return Jn[L(e)](e,n,t,o)}var Jn={arr:(e,n,t,o)=>{let i=V(e,n);if(i&&i.length){let r=(i[i.length-1]??n)?.nextSibling??null;for(let l of i)l.parentNode&&l.parentNode.removeChild(l);return r&&r.parentNode===t?r:null}return le(e,n,t,o)},frag:(e,n,t,o)=>{let i=e,l=V(i,n)??[],d=(l[l.length-1]??n)?.nextSibling??null;for(let u of l)u.parentNode&&u.parentNode.removeChild(u);return fe(i,o.registry),d&&d.parentNode===t?d:null},portal:(e,n,t,o)=>{let i=e,r=i._remoteEl;try{v(i.props?.children,o.registry)}catch(l){console.error("[weifuwu] portal ref cleanup error",l)}return r?.parentNode?.removeChild(r),null},comp:(e,n,t,o)=>{let i=e,r=V(i,n);if(D(i,o.registry),r&&r.length>1){let l=(r[r.length-1]??n)?.nextSibling??null;for(let d of r)d.parentNode&&d.parentNode.removeChild(d);return l&&l.parentNode===t?l:null}return le(e,n,t,o)},native:(e,n,t,o)=>{try{v(e,o.registry)}catch(i){console.error("[weifuwu] ref cleanup error",i)}return le(e,n,t,o)},text:(e,n,t,o)=>le(e,n,t,o),hole:(e,n,t,o)=>le(e,n,t,o)};function le(e,n,t,o){let i=n?.nextSibling??null;return n?.parentNode&&n.parentNode.removeChild(n),i&&i.parentNode===t?i:null}function W(e,n,t,o,i){return qe({parent:e,oldNode:n,oldInput:t,newInput:o,ctx:i})}var Ge={event:(e,n,t,o)=>{let{type:i,capture:r}=be(n);typeof t=="function"&&e.removeEventListener(i,t,r?{capture:!0}:{}),o!=null&&o!==!1&&(typeof o!="function"?console.warn(`[weifuwu] event prop ${n} expects a function, got ${typeof o} \u2014 ignored`):e.addEventListener(i,o,r?{capture:!0}:{}))},class:(e,n,t,o)=>{o==null||o===!1?e.removeAttribute("class"):(e.className="",q(e,n,o))},ref:(e,n,t,o)=>{if(o==null||o===!1){if(typeof t=="function")try{t(null)}catch(i){console.error("[weifuwu] ref cleanup error",i)}}else q(e,n,o)},value:(e,n,t,o)=>{o==null||o===!1?e.value="":q(e,n,o)},indeterminate:(e,n,t,o)=>{o==null||o===!1?e.indeterminate=!1:q(e,n,o)},enumerated:de,style:de,innerHTML:de,aria:de,default:de};function de(e,n,t,o){if(o==null||o===!1){e.removeAttribute(n);try{delete e[n]}catch{}}else q(e,n,o)}function We(e,n,t){let o=Object.keys(n),i=Object.keys(t);if(o.length===i.length){let d=!0;for(let u=0;u<o.length;u++)if(o[u]!==i[u]||n[o[u]]!==t[o[u]]){d=!1;break}if(d)return}let r=new Set([...o,...i]),l=null;for(let d of r){if(d==="children"||d==="key")continue;let u=n[d],c=t[d];if(u!==c){if(d==="value"&&(e instanceof HTMLSelectElement||e instanceof HTMLInputElement)){l={ov:u,nv:c};continue}Ge[ve(d)](e,d,u,c)}}l&&Ge.value(e,"value",l.ov,l.nv)}function Ae(e,n,t,o,i){let r=Array.isArray(n)?n:n?._child??n?.props?.children??null,l=Array.isArray(t)?t:t?._child??t?.props?.children??null;return ie(e,r,l,o,i)}function ie(e,n,t,o,i,r){let l=b(n),d=b(t),u=i??Array.from(e.childNodes);N("diff")&&h("diff","debug","",`patchChildren parent=${R(e)} old=${A(l)} new=${A(d)} dom=${O(e)}`);let c=d.some(p=>Array.isArray(p))||l.some(p=>Array.isArray(p)),s=c?"unkeyed":we(d);if(C({session:"",machine:"keys",nodeId:null,component:null,from:c?"unkeyed":we(d),event:"SELECT",to:s,payload:()=>({len:d.length}),level:"trace",ts:Date.now()}),ee()&&l.length!==d.length){let p=`${d.length}:${l.length}`;if(!ze.has(p)){ze.add(p);for(let y=0;y<d.length;y++){let m=d[y];m!=null&&typeof m=="object"&&!Array.isArray(m)&&w(m)&&m.key==null&&console.error(`[vdom2/audit] \u52A8\u6001\u6570\u7EC4\u4F4D\u7F6E ${y} \u7684\u7EC4\u4EF6\u7F3A\u5C11 key\uFF08${g(m.type)}\uFF09\u2014\u2014\u5217\u8868\u589E\u5220/\u91CD\u6392\u4F1A\u9519\u4F4D\u7EC4\u4EF6\u5B9E\u4F8B\u72B6\u6001\u3002\u8BF7\u63D0\u4F9B\u4E1A\u52A1\u8EAB\u4EFD key\uFF08\u5982 key={item.id}\uFF09\uFF1B\u65E0\u72B6\u6001 native \u9879\u8C41\u514D\u3002`)}}}let a=i&&i.length?i[i.length-1]:null;s==="mixed"&&(pe(d),pe(l));let f=(()=>{let p=u;p.length>=2&&p[0]?.nodeType===8&&p[0].nodeValue?.includes("fragment-start")&&p[p.length-1]?.nodeType===8&&p[p.length-1].nodeValue?.includes("fragment-end")&&(p=p.slice(1,-1));let y=[],m=0;for(let T=0;T<l.length;T++){let x=l[T];if(Array.isArray(x)){let M=p[m]??null;y.push(M);let j=V(x,M);m+=j?.length??1;continue}if(x==null||typeof x=="boolean"||typeof x=="string"||typeof x=="number"){y.push(p[m]??null),m++;continue}let $=x;if(S($)){y.push($._remoteEl??null);continue}if(y.push($._refNode??p[m]??null),typeof $.type=="function"||K($)){let M=V($,$._refNode??p[m]??null);m+=M?.length??1}else m++}return y})();return ht[s]({parent:e,oldChildren:l,newChildren:d,oldNodes:f,ctx:o,arrEnd:a,anchorOut:r})}function se(e){return e==null||typeof e=="boolean"?"hole":Array.isArray(e)||e&&typeof e=="object"&&K(e)?"multi":"real"}function Qn(e){let{parent:n,oldC:t,oldNode:o,oldNodes:i,i:r,ctx:l,out:d,pushA:u}=e;if(Array.isArray(t)){N("diff")&&h("diff","trace","",`remove-arr-item i=${r} range=[${(V(t,i[r])??[]).map(R).join(" | ")}] before=${O(n)}`);let c=V(t,o);for(let s of c??[])s.parentNode?.removeChild(s);N("diff")&&h("diff","trace","",`remove-arr-item after=${O(n)}`);for(let s of t)s!=null&&typeof s=="object"&&!Array.isArray(s)&&typeof s.type=="function"&&D(s,l.registry)}else if(t&&typeof t=="object"&&!Array.isArray(t)){if(typeof t.type=="function")D(t,l.registry);else try{v(t,l.registry)}catch(c){console.error("[weifuwu] ref cleanup error",c)}o?.parentNode&&o.parentNode.removeChild(o)}else o?.parentNode&&o.parentNode.removeChild(o);d.push(null),u(null)}function Zn(e){let{parent:n,newC:t,oldNode:o,i,oldNodes:r,out:l,pushA:d,ctx:u}=e,c=H(u.browser??_(),t);if(o?.nodeType===8){c&&o.nodeValue!==c.nodeValue&&(o.nodeValue=c.nodeValue),l.push(o),d(o);return}if(c&&o?.parentNode)o.parentNode.replaceChild(c,o);else if(c){let s=null;for(let a=i+1;a<r.length;a++){let f=r[a];if(f&&f.parentNode===n){s=f;break}}if(!s){let a=null;for(let f=l.length-1;f>=0;f--)if(l[f]){a=l[f];break}a&&a.parentNode===n&&(s=a.nextSibling)}s&&s.parentNode===n?n.insertBefore(c,s):n.appendChild(c),l.push(c),d(c)}else l.push(c),d(c)}function Xe(e){let{parent:n,newC:t,oldNode:o,i,oldNodes:r,out:l,pushA:d,ctx:u}=e,c=E(t,u,u.browser??_(),String(i));if(c==null){l.push(null),d(null);return}if(o&&o.nodeType===8&&o.nodeValue?.includes("type=hole")){C({session:"",machine:"pos",nodeId:null,component:null,from:"hole",event:"HOLE_FILL",to:"real",payload:()=>({i,replaced:R(o)}),level:"trace",ts:Date.now()}),o.parentNode?.replaceChild(c,o),l.push(c),d(c);return}let s=null;for(let a=i+1;a<r.length;a++){let f=r[a];if(f&&f.parentNode===n){s=f;break}}if(s==null){let a=null;for(let f=l.length-1;f>=0;f--)if(l[f]){a=l[f];break}if(a&&a.parentNode===n)s=a.nextSibling;else{let f=r[r.length-1];f&&f.parentNode===n&&(s=f.nextSibling)}}s&&s.parentNode===n?n.insertBefore(c,s):n.appendChild(c),C({session:"",machine:"pos",nodeId:null,component:null,from:"hole",event:"INSERT",to:"real",payload:()=>({i,insertedBefore:s?R(s):"END",node:R(c)}),level:"trace",ts:Date.now()}),l.push(c),d(c)}function et(e){let{parent:n,oldC:t,newC:o,oldNode:i,out:r,pushA:l,ctx:d}=e;if(t&&typeof t=="object"&&!Array.isArray(t)&&typeof t.type=="function"){let c=Qe(n,t,i,o,d);r.push(c),l(c);return}let u=Ze(n,t,i,o,d);r.push(u),l(u)}function nt(e){let{parent:n,oldC:t,newC:o,oldNode:i,i:r,out:l,pushA:d,ctx:u}=e,c=u.browser??_(),s=E(o,u,c,String(r));if(s==null){l.push(null),d(null);return}let a=t&&typeof t=="object"?V(t,i):null;if(a&&a.length>1){let p=(a[a.length-1]??i)?.nextSibling??null;for(let y of a)y.parentNode&&y.parentNode.removeChild(y);if(t&&typeof t=="object"&&!Array.isArray(t))if(typeof t.type=="function")D(t,u.registry);else try{v(t,u.registry)}catch(y){console.error("[weifuwu] ref cleanup error",y)}p&&p.parentNode===n?n.insertBefore(s,p):n.appendChild(s)}else i?.parentNode?i.parentNode.replaceChild(s,i):n.appendChild(s);let f=s.nodeType===11?Array.from(s.childNodes):[s];l.push(...f),d(f[0]??s)}function tt(e){let{parent:n,oldC:t,newC:o,oldNode:i,out:r,pushA:l,ctx:d}=e,u=Je(n,t,i,o,d);r.push(u),l(u)}function ot(e){let{parent:n,oldC:t,newC:o,oldNode:i,i:r,oldNodes:l,out:d,pushA:u,ctx:c}=e,s=c.browser??_(),a=V(t,i);N("diff")&&h("diff","debug","",`multi-remove i=${r} range=${a?a.map(R).join(" | "):"null"}`);for(let y of a??[])y.parentNode?.removeChild(y);for(let y of b(t?.props?.children))y!=null&&typeof y=="object"&&!Array.isArray(y)&&typeof y.type=="function"&&D(y,c.registry);let f=E(o,c,s,String(r));if(f==null){d.push(null),u(null);return}let p=l[r+1]??null;p?.parentNode?p.parentNode.insertBefore(f,p):n.appendChild(f),d.push(f),u(f)}function rt(e){let{parent:n,oldC:t,newC:o,oldNode:i,oldNodes:r,i:l,out:d,pushA:u,ctx:c}=e,s=V(t,i),a=Ae(n,t,o,c,s);d.push(...a),u(r[l]??a[0]??null)}function it(e){let{parent:n,oldC:t,newC:o,oldNode:i,i:r,out:l,pushA:d,ctx:u}=e;if(o&&typeof o=="object"&&!Array.isArray(o)&&typeof o.type=="function"&&o._lifecycle==="disposed"){let a=nn(n,i,u,g(o.type));l.push(a),d(a);return}let c=W(n,i,t,o,u);N("diff")&&h("diff","trace","",`after-patch i=${r} new=${z(o)} node=${R(c)} dom=${O(n)}`);let s=Re(o,c);l.push(...s),d(s[0]??c??null)}function Je(e,n,t,o,i){let r=H(i.browser??_(),o),l=V(n,t),d=((l??[])[l?.length?l.length-1:0]??t)?.nextSibling??null;for(let u of l??[])u.parentNode?.removeChild(u);for(let u of b(n?.props?.children))u!=null&&typeof u=="object"&&!Array.isArray(u)&&typeof u.type=="function"&&D(u,i.registry);return r&&d&&d.parentNode===e?e.insertBefore(r,d):r&&e.appendChild(r),r}function Qe(e,n,t,o,i){let r=H(i.browser??_(),o),l=re(n,t,e,i);return r&&l?e.insertBefore(r,l):r&&e.appendChild(r),r}function Ze(e,n,t,o,i){let r=H(i.browser??_(),o);if(n&&typeof n=="object"&&!Array.isArray(n))if(typeof n.type=="function")D(n,i.registry);else try{v(n,i.registry)}catch(l){console.error("[weifuwu] ref cleanup error",l)}return r&&t?.parentNode?t.parentNode.replaceChild(r,t):r&&e.appendChild(r),r}var lt={hole:{hole:Zn,real:Xe,multi:Xe},real:{hole:et,real:it,multi:nt},multi:{hole:tt,real:ot,multi:rt}};function dt(e){let{parent:n,oldChildren:t,newChildren:o,oldNodes:i,ctx:r,anchorOut:l}=e,d=Math.max(t.length,o.length),u=[],c=s=>{l&&l.push(s)};for(let s=0;s<d;s++){let a=s<t.length?t[s]:null,f=s<o.length?o[s]:null;if(s>=o.length){Qn({parent:n,oldC:a,newC:f,oldNode:i[s],i:s,oldNodes:i,newChildren:o,out:u,pushA:c,ctx:r});continue}if(a!=null&&typeof a=="object"&&!Array.isArray(a)&&f!=null&&typeof f=="object"&&!Array.isArray(f)&&f===a&&Q(a)){u.push(i[s]),c(i[s]);continue}let p=lt[se(a)][se(f)];C({session:"",machine:"pos",nodeId:null,component:null,from:se(a),event:p.name,to:se(f),payload:()=>({i:s}),level:"trace",ts:Date.now()}),p({parent:n,oldC:a,newC:f,oldNode:i[s],i:s,oldNodes:i,newChildren:o,out:u,pushA:c,ctx:r})}return u}function Ye(e){let{parent:n,oldChildren:t,newChildren:o,oldNodes:i,ctx:r,anchorOut:l,arrEnd:d}=e,u=new Map;t.forEach((p,y)=>{let m=ue(p);m!==null&&p&&typeof p=="object"&&!Array.isArray(p)&&u.set(m,{vnode:p,nodes:[i[y]??null].filter(Boolean),index:y})});let c=[],s=new Set,a=p=>{l&&l.push(p)},f=null;return o.forEach((p,y)=>{let m=ue(p),T=p;if(m!==null&&u.has(m)){let x=u.get(m),$=x.nodes[0]??null;if(s.add(m),T&&typeof T=="object"&&typeof T.type=="function"&&T._lifecycle==="disposed"){let X=nn(n,$,r,g(T.type));c.push(X),a(X),X&&(f=X);return}let M=W(n,$,x.vnode,T,r),j=Re(T,M),me=j[0]??M,Te=j[j.length-1]??M;if(me&&me.parentNode===n&&f&&me.previousSibling!==f){N("diff")&&h("diff","debug","",`keyed-correct i=${y} k=${m} move=[${j.map(R).join(" | ")}] after=${R(f)} before=${O(n)}`);let X=f.nextSibling;for(let Ne of j)Ne&&Ne.parentNode===n&&n.insertBefore(Ne,X);N("diff")&&h("diff","debug","",`keyed-correct after=${O(n)}`)}c.push(...j),a(j[0]??M??null),Te&&(f=Te)}else{let x={current:f};pt[ft(p)]({parent:n,oldChildren:t,newChildren:o,oldNodes:i,ctx:r,out:c,pushA:a,arrEnd:d,c:p,i:y},x),f=x.current}}),t.forEach((p,y)=>{ut[st(ue(p),s)](n,p,y,i,r,o.length)}),c}function st(e,n){return e===null?"unkeyed":n.has(e)?"moved":"stale-keyed"}var ut={moved:()=>{},"stale-keyed":at,unkeyed:ct};function at(e,n,t,o,i){let r=n&&typeof n=="object"&&!Array.isArray(n)?V(n,o[t]):null;if(N("diff")&&h("diff","trace","",`keyed-delete i=${t} k=${ue(n)} range=${r?.length??0} oldNode=${R(o[t])}`),n&&typeof n=="object"&&!Array.isArray(n))if(typeof n.type=="function")D(n,i.registry);else try{v(n,i.registry)}catch(l){console.error("[weifuwu] ref cleanup error",l)}en(r,o[t])}function ct(e,n,t,o,i,r){let l=o[t];if(l?.nodeType===8&&l.nodeValue?.includes("type=hole")&&t<r)return;if(n&&typeof n=="object"&&!Array.isArray(n))if(typeof n.type=="function")D(n,i.registry);else try{v(n,i.registry)}catch(c){console.error("[weifuwu] ref cleanup error",c)}let u=n&&typeof n=="object"&&!Array.isArray(n)?V(n,l):null;en(u,l)}function en(e,n){if(e&&e.length>1)for(let t of e)t.parentNode&&t.parentNode.removeChild(t);else n?.parentNode&&n.parentNode.removeChild(n)}function ft(e){return e==null||typeof e=="boolean"?"hole":e&&typeof e=="object"&&!Array.isArray(e)&&S(e)?"portal":"real"}var pt={hole:yt,portal:mt,real:Nt};function yt(e,n){let{parent:t,oldChildren:o,oldNodes:i,ctx:r,out:l,pushA:d,c:u,i:c}=e,s=o[c]??null,a=i[c]??null,f=se(s);if(f==="hole"){let y=H(r.browser??_(),u);a?.nodeType===8?(y&&a.nodeValue!==y.nodeValue&&(a.nodeValue=y.nodeValue),l.push(a),d(a),a&&(n.current=a)):(y&&a?.parentNode?a.parentNode.replaceChild(y,a):y&&t.appendChild(y),l.push(y),d(y),y&&(n.current=y));return}let p=f==="multi"?Je(t,s,a,u,r):s&&typeof s=="object"&&!Array.isArray(s)&&typeof s.type=="function"?Qe(t,s,a,u,r):Ze(t,s,a,u,r);l.push(p),d(p),p&&(n.current=p)}function mt(e,n){let{parent:t,oldChildren:o,oldNodes:i,ctx:r,out:l,pushA:d,c:u,i:c}=e,s=u,a=o[c]??null,f=W(t,i[c]??null,a,s,r),p=Re(s,f);l.push(...p),d(p[0]??f??null);let y=p[p.length-1]??f;y&&(n.current=y)}function Nt(e,n){let{parent:t,oldNodes:o,ctx:i,out:r,pushA:l,arrEnd:d,c:u,i:c}=e,a=E(u,i,i.browser??_());if(r.push(a),l(a??null),a!=null){let f=o[c];f&&f.nodeType===8&&f.nodeValue?.includes("type=hole")?(f.parentNode?.replaceChild(a,f),n.current=a):(n.current?t.insertBefore(a,n.current.nextSibling):d&&d.parentNode===t?t.insertBefore(a,d):t.insertBefore(a,t.firstChild),n.current=a)}}function pe(e){for(let n=0;n<e.length;n++){let t=e[n];t&&typeof t=="object"&&!Array.isArray(t)&&ue(t)===null&&(t.key=`pos:${n}`)}}function nn(e,n,t,o){ee()?console.error(`[vdom2/audit] I1 \u8FDD\u53CD\uFF1Adiff \u6536\u5230 disposed \u7EC4\u4EF6 ${o}\u2014\u2014\u526A\u679D\u7F13\u5B58\u5931\u6548\uFF08portal \u5185\u5BB9\u72EC\u7ACB dispose\uFF09\u2014\u2014\u7236\u6811\u5C06\u91CD\u5EFA`):console.warn(`[vdom2] disposed \u7EC4\u4EF6 ${o} \u5728 diff\u2014\u2014\u526A\u679D\u7F13\u5B58\u5931\u6548\u2014\u2014\u7236\u6811\u91CD\u5EFA\u4E2D\uFF08\u5360\u4F4D\u515C\u5E95\uFF09`);let i=H(t.browser??_(),null);if(i==null)return null;let r=n;if(r){let l=r.parentNode;l?l.replaceChild(i,r):e.appendChild(i)}else e.appendChild(i);return i}var ht={unkeyed:dt,keyed:Ye,mixed:e=>(pe(e.newChildren),pe(e.oldChildren),Ye(e))};function tn(e,n,t,o){let i=t,r=i.__registry??U(),l=i.browser??_();return Promise.resolve(B(n,i,null,r)).then(()=>{let d=E(n,i,l);if(d!=null&&e.appendChild(d),n._id&&r){let u=r.idRegistry.get(n._id);u&&(u._parentNode=e)}o?.onMounted?.()}).catch(d=>console.error("[vdom2] command mount error",d)),{id:n._id??""}}function Uo(e,n,t){return new Promise(o=>{tn(e,n,t,{onMounted:o})})}async function qo(e,n,t,o,i){return await B(o,i,t,i.__registry),W(e,n,t,o,{browser:i.browser??i.__browser,registry:i.__registry})}function Wo(e,n){let t=n.__registry??(n.__registry=U());return Promise.resolve(B(e,n,void 0,t))}async function zo(e,n,t){let o=await e(n,t);return typeof o=="function"?o(n):o}async function Go(e,n,t){let o=await e(n,t);return()=>typeof o=="function"?o(n):o}function ye(e,n){if(e==null||typeof e!="object")return;if(Array.isArray(e)){for(let o of e)ye(o,n);return}n(e);let t=e?.props?.children;t!=null&&ye(t,n)}function Xo(e,n){let t;return ye(e,o=>{!t&&n(o)&&(t=o)}),t}function Yo(e,n){let t=[];return ye(e,o=>{typeof o?.props?.class=="string"&&o.props.class.split(" ").includes(n)&&t.push(o)}),t}function Jo(e){let n={ui:{render:()=>{},ready:!0,useExternal:()=>{}}};return e?{ui:{...n.ui,...e.ui??{}},...e.browser?{browser:e.browser}:{}}:n}function Qo(e=()=>!1,n){return{get open(){return e()},setOpen:n??(t=>{}),refresh:()=>{},portal:(t,o)=>e()?t:null,wrapProps:{}}}export{Wo as buildToDom,Qo as createPopupMock,Jo as createTestCtx,Yo as findByClass,Xo as findVNode,Go as mountComponent,Uo as mountToDom,qo as patchToDom,zo as renderVNode,ye as walkVNode};
1
+ function K(e){if(e==null||typeof e=="boolean")return"null";if(typeof e=="string"||typeof e=="number")return"text";let t=e.type;return typeof t=="function"?"comp":typeof t=="symbol"?t===B?"app":e.props?.portalKey!=null?"portal":"frag":"native"}function Te(e){return Array.isArray(e)?e.flatMap(t=>Te(t)):[e]}function T(e){if(e.children!=null)return Te(e.children);let t=e.props?.children??[];return Te(t)}var J=Symbol("v3-fragment"),q=Symbol("v3-portal"),B=Symbol("v3-app");function h(e,t,n,o){let r={entity:e,action:t,ts:Date.now()};return n!=null&&(r.target=n),o!=null&&(r.payload=o),r}function on(e=2e4,t){let n=[],o=0,r=0,s=0,a=!1,l=t?.watermark??.8,u=new Set,i=d=>n[(o+d)%e],c=(d,g)=>{n[(o+d)%e]=g},f=(d,g)=>{r<e?(c(r,d),r++):(c(0,d),o=(o+1)%e,g||(s++,(s%64===1||s===1)&&f(h("stream","overflow",void 0,{capacity:e,count:s,dropped:`${d.entity}:${d.action}`,droppedTarget:d.target??null}),!0)))},p=null,m=0;return{setSession(){return p=`s${++m}`,p},currentSession(){return p},emit(d){p!=null&&d.session==null&&(d.session=p),f(d,!1),l>0&&!a&&r>=e*l&&(a=!0,f(h("stream","watermark",void 0,{usage:r,capacity:e,ratio:l}),!0));for(let g of u)try{g(d)}catch{}},subscribe(d,g){let v=typeof d=="function"?null:d,y=typeof d=="function"?d:g,N=x=>{if(v==null){y(x);return}(Array.isArray(v)?v:[v]).includes(x.entity)&&y(x)};return u.add(N),()=>{u.delete(N)}},size(){return r},capacity(){return e},overflowCount(){return s},events(){let d=new Array(r);for(let g=0;g<r;g++)d[g]=i(g);return d},eventsBySession(d){return this.events().filter(g=>g.session===d)},inverse(d){switch(d.entity+":"+d.action){case"node:insert":return h("node","remove",d.target,{parent:d.payload?.parent});case"node:remove":return null;case"prop:update":return h("prop","update",d.target,{key:d.payload?.key,value:d.payload?.prev,prev:d.payload?.value});case"text:update":return h("text","update",d.target,{value:d.payload?.prev,prev:d.payload?.value});case"node:move":return null;default:return null}},reset(){o=0,r=0,s=0,a=!1}}}var w=on();if(typeof globalThis<"u"){let e=globalThis;e.__wf_tail||(e.__wf_tail=(t=200,n)=>{let o=w.events().slice(-t);return n?o.filter(r=>!(n.comp&&r.payload?.name!==n.comp||n.decision&&r.payload?.reason!==n.decision||n.causeId&&r.payload?.causeId!==n.causeId)):o},e.__wf_builds=t=>{let n=w.events().filter(o=>o.entity==="comp"&&o.action==="build");return t?n.filter(o=>o.payload?.name===t).map(o=>({name:o.payload?.name,reason:o.payload?.reason,changedKeys:o.payload?.changedKeys})):n.map(o=>({name:o.payload?.name,reason:o.payload?.reason,changedKeys:o.payload?.changedKeys}))},e.__wf_recent=(t=50)=>w.events().slice(-t),e.__wf_comp=t=>w.events().filter(o=>!!(o.target===t||o.payload?.name&&!t)).map(o=>({entity:o.entity,action:o.action,target:o.target,payload:o.payload,session:o.session})))}var rn=0;function j(){return`n${++rn}`}function Se(e){if(!e)return 0;let t=0;for(let n of Q.values())n.has(e)&&t++;return t}var Q=new Map,Ze=new Set,Ye=new Map,ze=new Map,Ve=new Map,Ce=new Map,et={focus:"focusin",blur:"focusout"},sn=new Set(["error","load","loadstart","loadend","abort","unload","resize","message"]),ln=new Set(["input","change","compositionstart","compositionend"]);function tt(e,t,n,o=!1){let r=Q.get(t);r||(r=new Map,Q.set(t,r)),r.set(e,{handler:n,once:o})}function an(e,t){Q.get(t)?.delete(e)&&w.emit(h("event","unbind",e,{event:t}))}function Pe(e){for(let[t,n]of Q)n.delete(e)&&w.emit(h("event","unbind",e,{event:t}))}function ie(e,t,n,o=!1){let r=e.getAttribute("data-v3-id");if(!r)return()=>{};tt(r,t,n,o);let s=nt(e);return s&&ot(s,t),()=>an(r,t)}function Le(e){Ze.add(e),un()}var Je=!1,_e=0,se=[];function Qe(){let e=document.getSelection?.(),t=e?.toString?.()??"",n=e?.anchorNode;return{target:n&&n.nodeType===1?n.getAttribute?.("data-v3-id")??null:n?.parentElement?.getAttribute?.("data-v3-id")??null,text:t}}function un(){if(Je||(Je=!0,typeof document>"u"))return;let e=()=>{_e||(_e=requestAnimationFrame(()=>{_e=0;try{let{target:o,text:r}=Qe();if(!r)return;w.emit(h("text","select",void 0,{target:o,length:r.length,sample:r.slice(0,40)}))}catch{}}))};se.push(V(document,"selectionchange",e));let t=o=>{let{target:r,text:s}=Qe(),a=s;return o.type==="paste"&&(a=o.clipboardData?.getData?.("text")??""),{target:r,sample:a.slice(0,40)}},n=o=>{if(!(o.type!=="copy"&&o.type!=="cut"&&o.type!=="paste"))try{let{target:r,sample:s}=t(o);if(!s)return;w.emit(h("text",o.type,void 0,{target:r,length:s.length,sample:s}))}catch{}};se.push(V(document,"copy",n)),se.push(V(document,"cut",n)),se.push(V(document,"paste",n))}function nt(e){let t=e;for(;t;){if(t.nodeType===1&&Ze.has(t))return t;t=t.parentNode}return null}function ot(e,t){let n=Ye.get(e)??new Set;if(n.has(t))return;n.add(t),Ye.set(e,n);let o=et[t]??t,r=u=>dn(u),s=sn.has(o);e.addEventListener(o,r,s?{capture:!0}:void 0);let a=ze.get(e)??new Map;a.set(o,r),ze.set(e,a);let l=e.hasAttribute("data-wf-portal-key")?`portal:${e.getAttribute("data-wf-portal-key")}`:"root";w.emit(h("event","bind",l,{event:o,delegated:!0}))}function V(e,t,n,o){let r=et[t]??t,s=Ve.get(r);s||(s=new Set,Ve.set(r,s)),s.add(n);let a=Ce.get(e)??new Map;if(!a.has(r)){let l=i=>{for(let c of Ve.get(r)??[])try{c(i)}catch{}},u=o?.capture?{capture:!0,passive:o?.passive??!1}:void 0;e.addEventListener(r,l,u),a.set(r,l),Ce.set(e,a),w.emit(h("event","bind",e===window?"window":"document",{event:r,delegated:!0,capture:o?.capture??!1}))}return()=>{if(s.delete(n),s.size===0){let l=a.get(r);l&&e.removeEventListener(r,l,o?.capture?{capture:!0}:void 0),a.delete(r),a.size===0&&Ce.delete(e),w.emit(h("event","unbind",e===window?"window":"document",{event:r}))}}}function Ae(e,t,n,o){if(tt(e,t,n),o){let r=nt(o);r&&ot(r,t)}}function dn(e){let t=e.target;t&&t.nodeType===3&&(t=t.parentElement);let n=Q.get(e.type);if(n)for(;t;){if(!t.hasAttribute?.("data-v3-id")){let r=t.closest?.("[data-v3-id]");if(r&&r!==t){t=r;continue}}let o=t.getAttribute?.("data-v3-id");if(o){let r=n.get(o);if(r){try{Object.defineProperty(e,"currentTarget",{value:t,configurable:!0})}catch{}try{r.handler(e)}catch{}if(ln.has(e.type)){let s=t?.value??null;w.emit(h("text","input",o,{event:e.type,value:typeof s=="string"?s.slice(0,100):null}))}if(r.once&&(n.delete(o),w.emit(h("event","unbind",o,{event:e.type}))),e.cancelBubble)break}}t=t.parentElement}}var rt=new Map;function Me(e){e._id&&rt.set(e._id,e)}function st(e){rt.delete(e)}function Z(e){let t=document.getElementById("__wf_portal");t||(t=document.createElement("div"),t.id="__wf_portal",document.body.appendChild(t));let n=t.querySelector(`[data-wf-portal-key="${e}"]`);return n||(n=document.createElement("div"),n.setAttribute("data-wf-portal-key",e),t.appendChild(n)),n}var O=class{byId=new Map;idByNode=new WeakMap;removed=new Map;static PORTAL=t=>`portal:${t}`;resolveParent(t){return t.startsWith("portal:")?Z(t.slice(7)):this.get(t)}get(t){return t.startsWith("portal:")?Z(t.slice(7)):this.byId.get(t)??null}register(t,n){this.byId.set(t,n),this.idByNode.set(n,t)}idOf(t){return t?t.nodeType===1?t.getAttribute("data-v3-id")??this.idByNode.get(t)??"el":this.idByNode.get(t)??"node":"null"}unregister(t,n){this.byId.delete(t),this.removed.set(t,n)}takeRemoved(t){let n=this.removed.get(t);return n&&this.removed.delete(t),n??null}static ROOT="root"};function I(){return{activeElement:()=>typeof document<"u"?document.activeElement:null,byId:e=>typeof document<"u"?document.getElementById(e):null,query:e=>typeof document<"u"?document.querySelector(e):null,queryAll:e=>typeof document<"u"?document.querySelectorAll(e):null,createElement:e=>typeof document<"u"?document.createElement(e):null,createElementNS:(e,t)=>typeof document<"u"?document.createElementNS(e,t):null,createDocumentFragment:()=>typeof document<"u"?document.createDocumentFragment():null,createComment:e=>typeof document<"u"?document.createComment(e):null,createTextNode:e=>typeof document<"u"?document.createTextNode(e):null,addEventListener:(e,t,n)=>{typeof window<"u"&&window.addEventListener(e,t,n)},removeEventListener:(e,t,n)=>{typeof window<"u"&&window.removeEventListener(e,t,n)},scrollTo:e=>{typeof window<"u"&&window.scrollTo(0,e)},matchMedia:e=>typeof window<"u"&&typeof window.matchMedia=="function"?window.matchMedia(e):null,visualViewport:()=>(typeof window<"u"?window:null)?.visualViewport??null,scrollingElement:()=>typeof document<"u"?document.scrollingElement:null,bodyElement:()=>typeof document<"u"?document.body:null,bodyAppend:e=>{typeof document<"u"&&document.body.appendChild(e)},bodyRemove:e=>{typeof document<"u"&&e.parentNode&&document.body.removeChild(e)},clearBody:()=>{typeof document<"u"&&(document.body.innerHTML="")},event:(e,t)=>{let n=typeof window<"u"?window:null,o=t&&(t.key||t.code)?"KeyboardEvent":t&&(t.clientX!==void 0||t.clientY!==void 0||t.pointerId!==void 0)?"PointerEvent":"Event";try{return new n[o](e,t)}catch{return new n.Event(e,t)}},dispatchEvent:(e,t)=>typeof e<"u"?e.dispatchEvent(t):!1,reload:()=>{typeof window<"u"&&window.location.reload()},navigate:e=>{typeof window>"u"||(window.history.pushState(null,"",e),window.dispatchEvent(new PopStateEvent("popstate",{state:null})))},downloadFile:(e,t,n="text/plain")=>{try{if(typeof document>"u"||typeof URL>"u"||!URL.createObjectURL)return!1;let o=new Blob([t],{type:n}),r=URL.createObjectURL(o),s=document.createElement("a");return s.href=r,s.download=e,document.body.appendChild(s),s.click(),document.body.removeChild(s),setTimeout(()=>URL.revokeObjectURL(r),1e3),!0}catch{return!1}},copyText:async e=>{let t=typeof window<"u"?window:null;if(t?.navigator?.clipboard?.writeText)try{return await t.navigator.clipboard.writeText(e),!0}catch{}try{if(typeof document>"u")return!1;let n=document.createElement("textarea");n.value=e,n.style.position="fixed",n.style.opacity="0",document.body.appendChild(n),n.select();let o=document.execCommand("copy");return document.body.removeChild(n),o}catch{return!1}},execCommand:(e,t)=>typeof document<"u"?document.execCommand(e,!1,t):!1,queryCommandState:e=>typeof document<"u"?document.queryCommandState(e):!1,queryCommandValue:e=>typeof document<"u"?document.queryCommandValue(e):"",selectionText:()=>typeof window<"u"?window.getSelection?.()?.toString()??null:null,getSelection:()=>typeof window<"u"?window.getSelection():null,viewportHeight:()=>typeof window<"u"?window.innerHeight:0,viewportWidth:()=>typeof window<"u"?window.innerWidth:0,pathname:()=>typeof window<"u"?window.location.pathname:"",createTreeWalker:(e,t)=>typeof document<"u"?document.createTreeWalker(e,t??NodeFilter.SHOW_ALL):null,scrollTop:()=>{let e=typeof document<"u"?document:null,t=typeof window<"u"?window:null;return e?.scrollingElement?.scrollTop??t?.scrollY??0},hash:()=>typeof window<"u"?window.location?.hash??"":"",setHash:e=>{typeof window<"u"&&(window.location.hash=e)},timeout:(e,t)=>typeof window<"u"?window.setTimeout(e,t):0,rootElement:()=>typeof document<"u"?document.documentElement:null,storageGet:e=>{try{return typeof window<"u"?window.localStorage?.getItem(e)??null:null}catch{return null}},storageSet:(e,t)=>{try{typeof window<"u"&&window.localStorage?.setItem(e,t)}catch{}}}}var cn=new Map;function it(e){return cn.get(e)??null}function lt(e,t){let n=e.selfId(),o;return n&&(o=t.subscribe(()=>e.render([n])),e.onUnmount(()=>o?.())),t}function Oe(e,t){let n=e.selfId(),o=t.value!==void 0;if(o&&!t.onChange&&t.name&&(e.warned.has(t.name)||(e.warned.add(t.name),console.warn(`[weifuwu/${t.name}] \u53D7\u63A7\u6A21\u5F0F\uFF08value \u5DF2\u4F20\uFF09\u4F46\u672A\u63D0\u4F9B onChange\uFF0C\u4EA4\u4E92\u65E0\u6CD5\u751F\u6548\u3002
2
+ \u975E\u53D7\u63A7\uFF1A\u53BB\u6389 value\uFF1B\u53D7\u63A7\uFF1A\u4F20\u5165 onChange={(v) => setValue(v)}`))),!o&&n&&!e.uncontrolledValues.has(n)){e.uncontrolledValues.set(n,t.value);let s=e.onUnmount(a=>{a===n&&(e.uncontrolledValues.delete(n),s())})}let r=s=>{if(o){t.onChange?.(s);return}n&&e.uncontrolledValues.set(n,s),n?e.render([n]):e.render()};return{value:o?t.value:n?e.uncontrolledValues.get(n):t.value,setValue:r,controlled:o}}function at(e,t){let n=e.selfId(),o=Oe(e,{value:t.value,onChange:t.onChange,name:t.name});if(n&&!e.inputStates.has(n)){e.inputStates.set(n,{keyword:"",selectedLabel:""});let a=e.onUnmount(l=>{l===n&&(e.inputStates.delete(n),a())})}let r=n?e.inputStates.get(n):{keyword:"",selectedLabel:""},s=()=>{n?e.render([n]):e.render()};return{...o,get keyword(){return r.keyword},setKeyword(a){r.keyword=a,s()},get selectedLabel(){return r.selectedLabel},setSelectedLabel(a){r.selectedLabel=a,s()}}}function ut(e,t){let n=e.selfId(),o=!1;if(n){let u=e.onUnmount(i=>{i===n&&(o=!0,u())})}let r=()=>{o||(n?e.render([n]):e.render())},s={data:void 0,loading:!1,error:void 0},a=0,l=()=>{let u=++a;s.loading=!0,s.error=null,r(),Promise.resolve().then(()=>t()).then(i=>{a===u&&(s.data=i,s.loading=!1,r())}).catch(i=>{a===u&&(s.error=i,s.loading=!1,r())})};return l(),s.reload=l,s}function dt(e,t,n){return r=>{r?t(r):n?.()}}function le(e){return typeof window<"u"&&!!window.matchMedia?.("(hover: hover)").matches}function Ie(e){return typeof window<"u"&&!!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches}function ct(e,t){let{onLongPress:n,duration:o=500}=t,r,s=0,a=0,l=null,u=()=>{clearTimeout(r),r=void 0},i=e.selfId();if(i){let c=e.onUnmount(f=>{f===i&&(u(),c())})}return{onPointerDown:c=>{s=c.clientX??0,a=c.clientY??0,l=c,u(),r=setTimeout(()=>{r=void 0,l&&n(l)},o)},onPointerUp:u,onPointerLeave:u,onPointerMove:c=>{let f=Math.abs((c.clientX??0)-s),p=Math.abs((c.clientY??0)-a);(f>10||p>10)&&u()},onContextMenu:c=>{c.preventDefault(),n(c)}}}function ae(e,t){let n=e.selfId(),o="closed",r,s=()=>{o="closed",n?e.render([n]):e.render()},a=null;return{get phase(){return o},ref:u=>{u?a||(r=()=>{o==="exit"&&s()},a=ie(u,"animationend",r)):(a?.(),a=null,r=void 0)},sync:u=>(u?o="open":o==="open"&&(o="exit"),o)}}function ft(e,t,n){let o=e.selfId(),r=Ie(e),s=n?.duration??400,a=n?.ease==="linear"?p=>p:p=>1-Math.pow(1-p,3),l,u=t,i={value:r?t:0,reset:()=>{}},c=()=>{o?e.render([o]):e.render()},f=p=>{if(u=p,r){i.value=p,c();return}if(p===i.value)return;l&&cancelAnimationFrame(l);let m=i.value,d=performance.now(),g=v=>{let y=Math.min(1,(v-d)/s);i.value=Math.round(m+(p-m)*a(y)),y<1?(l=requestAnimationFrame(g),c()):(l=void 0,c())};l=requestAnimationFrame(g)};if(i.reset=p=>{p===u&&l||f(p)},o){let p=e.onUnmount(m=>{m===o&&(l&&(cancelAnimationFrame(l),l=void 0),p())})}return queueMicrotask(()=>f(t)),i}var pt=I();function mt(e,t="bottom",n=6,o=!0){switch(t){case"bottom":return{top:e.bottom+n,left:o?e.left+e.width/2:e.left};case"top":return{top:e.top-n,left:o?e.left+e.width/2:e.left};case"left":return{top:o?e.top+e.height/2:e.top,left:e.left-n};case"right":return{top:o?e.top+e.height/2:e.top,left:e.right+n}}}function ue(e,t,n=8){if(!t)return e;let o=t.getBoundingClientRect();if(o.width===0&&o.height===0)return e;let r=Number.parseFloat(t.style.top)||o.top,s=Number.parseFloat(t.style.left)||o.left,a=e.top-r,l=e.left-s,u={top:o.top+a,bottom:o.bottom+a,left:o.left+l,right:o.right+l},i=pt.viewportWidth(),c=pt.viewportHeight(),f=e.top,p=e.left;return u.bottom>c-n&&(f=Math.max(n,f-(u.bottom-(c-n)))),u.top<n&&(f=Math.max(n,f+(n-u.top))),u.right>i-n&&(p=Math.max(n,p-(u.right-(i-n)))),u.left<n&&(p=Math.max(n,p+(n-u.left))),{top:f,left:p,width:e.width}}function de(e,t,...n){let o=t?{...t}:{};return n.length>0&&(o.children=n.length===1?n[0]:n),{type:e,props:o,key:t?.key??null}}function ce(e,t){return{type:q,props:{children:Array.isArray(e)?e:[e],portalKey:t??"default"},key:t??null}}function Re(e,t){let n=e.selfId(),o={top:0,left:0,refresh:()=>{}};if(!n)return o;let r={pos:o,getEl:t.el,isOpen:t.isOpen,compute:t.compute,panel:t.panel,margin:t.margin??8};e.popupTrackers.set(n,r),e.ensurePopupListeners();let s=e.onUnmount(a=>{a===n&&(e.popupTrackers.delete(n),s())});return o.refresh=()=>{let a=r.getEl();if(!a)return;let l=a.getBoundingClientRect();if(l.width===0&&l.height===0)return;let u=r.compute(l);Object.assign(o,ue(u,r.panel?.(),r.margin))},o}function yt(e,t){let n=e.selfId(),o=e.browser,r=le(e),s=()=>typeof t.trigger=="function"?t.trigger():t.trigger??"manual",a=t.open!==void 0,l=()=>!!t.disabled?.(),u=()=>a?typeof t.open=="function"?!!t.open():!!t.open:t.isOpen(),i=t.presence?ae(e,{name:t.name}):null,c,f=!1,p=b=>{if(!i)return b?"open":"closed";let k=i.sync(b);return b&&t.lockScroll&&!f&&(fn(),f=!0),k},m=b=>{l()||(a?t.onOpenChange?.(b):i?b?p(!0):u()&&p(!1):t.setOpen(b))},d=()=>{let b=t.placement;return typeof b=="function"?b():b??"bottom"},g=null,v=!1,y=Re(e,{el:t.el??(()=>null),isOpen:()=>u(),compute:b=>{if(t.position){let k=t.position();return{top:k.y,left:k.x,width:k.width}}return mt(b,d(),t.gap??6,t.center!==!1)},panel:()=>g,margin:t.margin??8}),N=b=>{if(t.closeOnOutside===!1||t.mask||!u())return;let k=b.target;if(!(k instanceof Node))return;let A=t.el?.()??null;A&&A.contains(k)||g&&g.contains(k)||m(!1)},x=b=>{t.closeOnEscape!==!1&&(b.key!=="Escape"||!u()||m(!1))},S=V(o,"mousedown",N),Gt=V(o,"keydown",x);if(n){let b=e.onUnmount(k=>{k===n&&(S(),Gt(),b())})}let P={},Be=b=>typeof b=="function"?b():b??0,Ge=()=>Be(t.openDelay),be=()=>Be(t.closeDelay),L,_,Xt=()=>{clearTimeout(L),clearTimeout(_),L=void 0,_=void 0},Yt=b=>{if(l())return;let k=b.currentTarget,A=b.relatedTarget;k.contains(A)||(clearTimeout(_),_=void 0,L=setTimeout(()=>{L=void 0,m(!0)},Ge()))},zt=b=>{if(l())return;let k=b.currentTarget,A=b.relatedTarget;k.contains(A)||(clearTimeout(L),L=void 0,_=setTimeout(()=>{_=void 0,m(!1)},be()))},Jt=()=>{l()||(clearTimeout(_),_=void 0,L=setTimeout(()=>{L=void 0,m(!0)},Ge()))},Qt=()=>{l()||(clearTimeout(L),L=void 0,_=setTimeout(()=>{_=void 0,m(!1)},be()))},te=()=>s()==="hover";if(P.onMouseOver=b=>{te()&&Yt(b)},P.onMouseOut=b=>{te()&&zt(b)},P.onClick=()=>{te()?r||m(!u()):s()==="click"&&m(!0)},P.onFocus=()=>{te()?Jt():s()==="focus"&&(clearTimeout(_),_=void 0,m(!0))},P.onBlur=()=>{te()?Qt():s()==="focus"&&(clearTimeout(L),L=void 0,_=setTimeout(()=>{_=void 0,m(!1)},be()))},s()==="longpress"){let b,k=0,A=0,F=()=>{clearTimeout(b),b=void 0};P.onPointerDown=C=>{l()||(k=C.clientX??0,A=C.clientY??0,F(),b=setTimeout(()=>{b=void 0,t.onTrigger?.({clientX:k,clientY:A}),m(!0)},t.longPressDuration??500))},P.onPointerUp=F,P.onPointerLeave=F,P.onPointerMove=C=>{let ke=Math.abs((C.clientX??0)-k),xe=Math.abs((C.clientY??0)-A);(ke>10||xe>10)&&F()},P.onContextMenu=C=>{C.preventDefault(),t.onTrigger?.({clientX:C.clientX??0,clientY:C.clientY??0}),m(!0)}}if(P.onKeyDown=b=>{b.key==="Escape"&&t.closeOnEscape!==!1&&m(!1)},n){let b=e.onUnmount(k=>{k===n&&(Xt(),b())})}let Zt=b=>{b?(g=b,ie(b,"animationend",()=>y.refresh(),!0)):g=null},Ee=null,Ne=null,Xe=b=>{Zt(b),Ne&&Ne(b),i?.ref(b),t.trapFocus&&(b?c=yn(b):(c?.(),c=void 0)),t.lockScroll&&!b&&f&&(pn(),f=!1)};return{get open(){return u()},setOpen:m,get phase(){return i?i.phase:u()?"open":"closed"},sync:p,wrapProps:P,portal:(b,k="popover")=>{if(l())return null;if(!(i?i.phase!=="closed":u()))return v=!1,Ee=null,null;let F=t.el?.()??null;(!v||F!==Ee)&&(F?y.refresh():queueMicrotask(()=>{u()&&y.refresh()}),v=!0,Ee=F);let C=b.props??{};Ne=C.ref??null;let ke=t.positioning==="none"?C.class??"":["wf-popup",C.class].filter(Boolean).join(" "),xe=t.positioning==="none"?{...C.style??{},position:"fixed"}:{...C.style??{},position:"fixed",top:`${y.top}px`,left:`${y.left}px`,...y.width!==void 0?{width:`${y.width}px`}:{},maxWidth:(()=>{let re=typeof t.width=="function"?t.width():t.width;return re!==void 0?`min(${re}px, calc(100vw - 32px))`:"calc(100vw - 32px)"})()},z={...b,props:{...C,class:ke,style:xe,ref:Xe}};if(t.mask){let re=typeof t.mask=="object"?t.mask:de("div",{class:"wf-popup-mask","data-portal-mask":k,onClick:t.maskClosable===!1?void 0:()=>m(!1)}),en=t.maskCentered?de("div",{class:"wf-cover",style:{"--wf-z":"var(--wf-z-popover)",pointerEvents:"none"}},{...z,props:{...z.props,style:{...C.style??{},pointerEvents:"auto"},ref:Xe}}):null,tn=t.maskCentered?void 0:{...z.props?.style??{},zIndex:"var(--wf-z-popover)"},nn=t.maskCentered?en:{...z,props:{...z.props,style:tn}};return ce([re,nn],k)}return ce(z,k)},refresh:()=>y.refresh()}}function gt(e,t){let n=e.selfId();if(n&&!e.openStates.has(n)){e.openStates.set(n,!1);let l=e.onUnmount(u=>{u===n&&(e.openStates.delete(n),l())})}let o=t.open!==void 0;o&&!t.onOpenChange&&t.name&&!e.warned.has(t.name)&&(e.warned.add(t.name),console.warn(`[weifuwu/${t.name}] \u53D7\u63A7\u6A21\u5F0F\uFF08open \u5DF2\u4F20\uFF09\u4F46\u672A\u63D0\u4F9B onOpenChange\uFF0C\u4EA4\u4E92\u65E0\u6CD5\u751F\u6548\u3002
3
+ \u975E\u53D7\u63A7\uFF1A\u53BB\u6389 open\uFF1B\u53D7\u63A7\uFF1A\u4F20\u5165 onOpenChange={(o) => setOpen(o)}`));let r=()=>o?!!t.open:n?e.openStates.get(n)??!1:!1,s=()=>{n?e.render([n]):e.render()},a=l=>{if(o){t.onOpenChange?.(l);return}n&&e.openStates.set(n,l),s()};return{get open(){return r()},setOpen:a,triggerProps:{onClick:()=>a(!0),onFocus:()=>{t.openOnFocus&&a(!0)}}}}var X=I(),G=0,ht="",wt="",vt="",bt="",fe=0;function Et(){return typeof window<"u"&&typeof document<"u"}function fn(){if(G++,w.emit(h("effect","lock",void 0,{depth:G})),G>1||!Et())return;fe=X.scrollTop();let e=X.bodyElement();ht=e.style.overflow,wt=e.style.position,vt=e.style.top,bt=e.style.width,e.style.overflow="hidden",(/iPhone|iPad|iPod/.test(navigator.platform)||/Mac/.test(navigator.platform)&&"ontouchend"in document)&&(e.style.position="fixed",e.style.top=`-${fe}px`,e.style.width="100%")}function pn(){if(G===0||(G--,w.emit(h("effect","unlock",void 0,{depth:G})),G>0)||!Et())return;let e=X.bodyElement();e.style.overflow=ht,e.style.position=wt,e.style.top=vt,e.style.width=bt,fe>0&&X.scrollTo(fe)}var mn='a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';function yn(e){let t;return queueMicrotask(()=>{let n=e.querySelectorAll(mn);if(n.length===0)return;let o=n[0],r=n[n.length-1],s=u=>{u.key==="Tab"&&(u.shiftKey&&X.activeElement()===o?(u.preventDefault(),r.focus()):!u.shiftKey&&X.activeElement()===r&&(u.preventDefault(),o.focus()))},a=X.activeElement();w.emit(h("effect","focus",void 0,{mode:"trap-start"})),o.focus();let l=V(e,"keydown",s);t=()=>{l(),w.emit(h("effect","focus",void 0,{mode:"restore"})),a?.focus()}}),()=>t?.()}function Nt(e,t,n){let o=e.selfId(),r=e.browser,s=`media:${o}:${t}`;if(!e.mediaRegistry.has(s)){let a=r.matchMedia(t);n(a.matches);let l=i=>n(i.matches);V(a,"change",l),e.mediaRegistry.set(s,{mql:a,handler:l});let u=e.onUnmount(i=>{if(i!==o)return;let c=e.mediaRegistry.get(s);if(c?.mql&&c.handler)try{c.mql.removeEventListener("change",c.handler)}catch{}e.mediaRegistry.delete(s),u()})}}function kt(e,t,n){let o=e.browser,r=typeof t=="function"?{mobile:"(max-width: 639px)",tablet:"(min-width: 640px) and (max-width: 1023px)",desktop:"(min-width: 1024px)"}:t,s=typeof t=="function"?t:n,a=e.selfId(),l=`bp:${a}`;function u(){for(let[i,c]of Object.entries(r))if(o.matchMedia(c).matches)return i;return Object.keys(r)[0]??""}if(!e.mediaRegistry.has(l)){s(u());let i=[];for(let f of Object.values(r)){let p=o.matchMedia(f),m=()=>s(u());V(p,"change",m),i.push({mql:p,handler:m})}e.mediaRegistry.set(l,{mqls:i});let c=e.onUnmount(f=>{if(f!==a)return;let p=e.mediaRegistry.get(l);if(p?.mqls)for(let m of p.mqls)try{m.mql.removeEventListener("change",m.handler)}catch{}e.mediaRegistry.delete(l),c()})}}function xt(e){let t=e.selfId(),n=e.browser,o={height:n.viewportHeight(),offsetTop:0,keyboardOpen:!1},r=()=>{t?e.render([t]):e.render()},s=()=>{let i=n.visualViewport();o.height=i?.height??n.viewportHeight(),o.offsetTop=i?.offsetTop??0,o.keyboardOpen=o.height<n.viewportHeight()*.9,r()},a=n.visualViewport(),l=null,u=null;if(a?.addEventListener?(l=V(a,"resize",s),V(a,"scroll",s)):u=V(window,"resize",s),t){let i=e.onUnmount(c=>{c===t&&(l?.(),u?.(),i())})}return o}function Tt(e,t){let n=e.selfId(),o={isIn:!1,ready:!1,observe:u,refresh:i,disconnect:c},r=null,s=null,a=()=>{n?e.render([n]):e.render()};function l(){if(s?.disconnect(),s=null,!r)return;let f=typeof t.rootMargin=="function"?t.rootMargin():t.rootMargin,p=typeof t.threshold=="function"?t.threshold():t.threshold;s=new IntersectionObserver(m=>{let d=m[m.length-1];if(!d)return;let g=d.isIntersecting,v=g!==o.isIn,y=!o.ready;o.isIn=g,o.ready=!0,t.onChange?.(d,g),(v||y)&&a()},{root:t.root?t.root():null,rootMargin:f??"0px",threshold:p??0}),s.observe(r)}function u(f){r=f,f?l():(s?.disconnect(),s=null,o.isIn=!1)}function i(){l()}function c(){s?.disconnect(),s=null}if(n){let f=e.onUnmount(p=>{p===n&&(c(),f())})}return o}function Vt(e,t){let n=e.selfId(),o=e.browser,r={y:0,refresh(){let l=s.getScroller();r.y=l instanceof Window?o.scrollingElement()?.scrollTop??o.scrollTop():l.scrollTop??0}},s={handle:r,getScroller:t.getScroller??(()=>window)};if(!n)return r.refresh(),r;e.scrollTrackers.set(n,s),e.ensurePopupListeners(),r.refresh();let a=e.onUnmount(l=>{l===n&&(e.scrollTrackers.delete(n),a())});return r}function Ct(e,t){let n=e.selfId();if(typeof window>"u")return()=>{};let o=V(window,"keydown",t);if(n){let r=e.onUnmount(s=>{s===n&&(o(),r())})}return o}function _t(e,t){let n=e.browser,o=0,r=0,s=!1,a=m=>{s&&t.onMove(m,{x:m.clientX-o,y:m.clientY-r})},l=null,u=null,i=()=>{l?.(),l=null,u?.(),u=null},c=m=>{s&&(s=!1,i(),t.onEnd?.(m))},f=m=>{s||(m.preventDefault(),s=!0,o=m.clientX,r=m.clientY,l=V(window,"pointermove",a),u=V(window,"pointerup",c),t.onStart?.(m))},p=e.selfId();if(p){let m=e.onUnmount(d=>{d===p&&(s&&(i(),s=!1),m())})}return{onPointerDown:f}}function St(e,t){let n={};t.onDrop&&(n.onDrop=r=>{r.preventDefault(),t.onDrop(r)}),t.onDragOver&&(n.onDragOver=r=>{r.preventDefault(),t.onDragOver(r)}),t.onDragLeave&&(n.onDragLeave=r=>t.onDragLeave(r));let o={draggable:!0};if(t.onDragStart){let r=t.onDragStart;o.onDragStart=s=>{typeof document<"u"&&document.body.classList.add("wf-dragging"),r(s)}}if(t.onDragEnd){let r=t.onDragEnd;o.onDragEnd=s=>{typeof document<"u"&&document.body.classList.remove("wf-dragging"),r(s)}}return{dropProps:n,dragProps:o}}function gn(e){return e.map(t=>{let n={role:t.role,content:t.content};return t.reasoning&&(n.reasoning_content=t.reasoning),n})}function He(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`msg-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function Pt(e,t,n,o){n.initialMessages?e.messages=structuredClone(n.initialMessages):e.messages===void 0&&(e.messages=[]),e.input===void 0&&(e.input=""),e.streaming===void 0&&(e.streaming=!1),e.error===void 0&&(e.error=null),e.usage===void 0&&(e.usage=null),e.step===void 0&&(e.step=null);let r=null;function s(){if(!e.streaming)return;let d=e.messages[e.messages.length-1];return d&&d.role==="assistant"&&d.status==="streaming"?d:void 0}function a(d,g,v){let y=s();switch(d){case"wf:token":y&&(y.content+=g.text);break;case"wf:tool_call":{y&&(y.toolCalls||(y.toolCalls=[]),y.toolCalls.push({call:g,status:"running"}));break}case"wf:tool_progress":{let N=g,x=y?.toolCalls?.find(S=>S.call.id===N.toolCallId);x&&(x.progress=N);break}case"wf:tool_result":{let N=g,x=y?.toolCalls?.find(S=>S.call.id===N.id);x&&(x.result=N,x.status=N.ok?"ok":"error");break}case"wf:approval_request":y&&(y.approval=g);break;case"wf:usage":y&&(y.usage=g);break;case"wf:step":e.step=g;break;case"wf:done":if(y){y.status="done",y.approval=void 0;let N=g;N.reasoning&&(y.reasoning=N.reasoning)}e.streaming=!1,e.step=null;break;case"wf:error":y&&(y.status="error",y.error=g,y.approval=void 0),e.error=g,e.streaming=!1,e.step=null;break;default:v?.(d,g);break}o?.()}function l(){let d=n.body?n.body(e.messages):{messages:gn(e.messages)};r=t(n.url,d,{onToken:v=>a("wf:token",{text:v}),onToolCall:v=>a("wf:tool_call",v),onToolProgress:v=>a("wf:tool_progress",v),onToolResult:v=>a("wf:tool_result",v),onApproval:v=>a("wf:approval_request",v),onUsage:v=>a("wf:usage",v),onStep:v=>a("wf:step",v),onDone:v=>a("wf:done",v),onError:v=>a("wf:error",v),onEvent:(v,y)=>a(v,y,n.onEvent)},{signal:n.signal,headers:n.headers}),e.streaming=!0;let g=s();g&&r?.traceId&&(g.id=r.traceId)}function u(){if(e.streaming)return;let d=String(e.input??"").trim();d&&(e.input="",e.error=null,e.usage=null,e.step=null,e.messages.push({id:He(),role:"user",content:d,status:"done"},{id:He(),role:"assistant",content:"",status:"streaming",toolCalls:[]}),l(),o?.())}function i(){r?.abort(),e.streaming=!1,e.step=null;let d=e.messages[e.messages.length-1];d&&d.role==="assistant"&&d.status==="streaming"&&(!d.content&&(!d.toolCalls||d.toolCalls.length===0)?e.messages.pop():d.status="done"),o?.()}function c(){if(e.streaming)return;let d=-1;for(let g=e.messages.length-1;g>=0;g--)if(e.messages[g].role==="user"){d=g;break}d!==-1&&(e.messages.splice(d+1),e.error=null,e.usage=null,e.step=null,e.messages.push({id:He(),role:"assistant",content:"",status:"streaming",toolCalls:[]}),l(),o?.())}function f(){r?.abort(),e.messages=[],e.input="",e.streaming=!1,e.error=null,e.usage=null,e.step=null,o?.()}async function p(d,g,v){let y=e.messages[e.messages.length-1],N=y?.role==="assistant"?y.approval:void 0;if(N&&(y.approval=void 0,o?.(),!!n.approveUrl))try{await fetch(n.approveUrl,{method:"POST",headers:{"Content-Type":"application/json",...n.headers},body:JSON.stringify(v?{id:N.id,decision:d,note:g,modifiedArgs:v}:{id:N.id,decision:d,note:g}),signal:n.signal})}catch(x){if(n.signal?.aborted)return;e.error={code:"provider_error",message:x instanceof Error?x.message:String(x)},o?.()}}function m(){r?.abort(),r=null}return{send:u,stop:i,retry:c,clear:f,approve:p,dispose:m}}function Lt(e,t,n){let o=new AbortController,r=n?.signal;r&&(r.aborted?o.abort():r.addEventListener("abort",()=>o.abort(),{once:!0}));let s=n?.traceId??En(),a=n?.record!==!1,l=[],u=(async()=>{let i;try{i=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json","X-Trace-Id":s,Accept:"text/event-stream",...n?.headers},body:JSON.stringify(t),signal:o.signal})}catch(c){if(o.signal.aborted)return;n?.onError?.({code:"provider_error",message:c instanceof Error?c.message:String(c)});return}if(!i.ok){n?.onError?.({code:bn(i.status),message:`HTTP ${i.status} ${i.statusText}`});return}try{for await(let{name:c,data:f}of wn(i.body)){if(o.signal.aborted)return;vn(l,{name:c,data:f},a),hn(c,f,n??{})}}catch(c){if(o.signal.aborted)return;n?.onError?.({code:"provider_error",message:c instanceof Error?c.message:String(c)})}})();return{abort:()=>o.abort(),done:u,traceId:s,events:l}}function hn(e,t,n){switch(e){case"wf:token":return n.onToken?.(t.text);case"wf:tool_call":return n.onToolCall?.(t);case"wf:tool_result":return n.onToolResult?.(t);case"wf:tool_progress":return n.onToolProgress?.(t);case"wf:step":return n.onStep?.(t);case"wf:approval_request":return n.onApproval?.(t);case"wf:usage":return n.onUsage?.(t);case"wf:done":return n.onDone?.(t);case"wf:error":return n.onError?.(t);default:return n.onEvent?.(e,t)}}async function*wn(e){let t=e.getReader(),n=new TextDecoder,o="";try{for(;;){let{done:r,value:s}=await t.read();if(r)break;o+=n.decode(s,{stream:!0});let a=o.split(`
4
+
5
+ `);o=a.pop()??"";for(let l of a){let u="message",i="";for(let c of l.split(`
6
+ `))c.startsWith("event: ")?u=c.slice(7):c.startsWith("data: ")&&(i+=c.slice(6));if(i)try{yield{name:u,data:JSON.parse(i)}}catch{}}}}finally{t.releaseLock()}}function vn(e,t,n){n&&(e.length>=1e3&&e.shift(),e.push(t))}function bn(e){return e===401||e===403?"auth_failed":e===429?"rate_limited":e>=500?"provider_error":"invalid_request"}function En(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`trace-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function At(e,t){let n={messages:[],input:"",streaming:!1,error:null,usage:null,step:null},o=new Set,s=Pt(n,Lt,t,()=>{for(let l of[...o])l()});Object.assign(n,s),n.subscribe=l=>(o.add(l),()=>{o.delete(l)});let a=e.selfId();if(a){let l=e.onUnmount(u=>{u===a&&(s.dispose(),l())})}return n}var Mt=I();function Ot(e){let t=new Map,n=new Map,o=!1,r=0;function s(){r||(r=requestAnimationFrame(()=>{r=0;let p=[];for(let[m,d]of t){if(!d.isOpen())continue;let g=d.getEl();if(!g)continue;let v=g.getBoundingClientRect();if(v.width===0&&v.height===0)continue;let y=d.compute(v);Object.assign(d.pos,ue(y,d.panel?.(),d.margin)),p.push(m)}for(let[m,d]of n){let g=d.getScroller(),v=g instanceof Window?Mt.scrollingElement()?.scrollTop??Mt.scrollTop():g.scrollTop??0;v!==d.handle.y&&(d.handle.y=v,p.push(m))}p.length>0&&e(p)}))}let a=null,l=null;function u(){o||(o=!0,a=V(window,"scroll",s,{capture:!0,passive:!0}),l=V(window,"resize",s))}function i(){o&&(a?.(),l?.(),a=null,l=null,o=!1)}function c(p){for(let m of[...t.keys()])(m.startsWith(`popup:${p}:`)||m===`popup:${p}`||m===p)&&t.delete(m);n.delete(p)}function f(){i(),r&&(cancelAnimationFrame(r),r=0),t.clear(),n.clear()}return{popupTrackers:t,scrollTrackers:n,schedulePopupRecompute:s,ensurePopupListeners:u,destroyPopupListeners:i,cleanupTrackers:c,destroy:f}}var Nn=new Map,kn=new Set,xn=new Map,Tn=new Map,Vn=new Map,Ue=new Map,De=Ot(e=>{for(let t of e){let n=Ue.get(t);if(n)try{n()}catch{}}}),Cn=De.popupTrackers,_n=De.scrollTrackers,Sn=De.ensurePopupListeners;function It(e,t,n){Ue.set(e,t);let o={selfId:()=>e,render:s=>{window.__chain="env.render",!s||s.length===0||s.includes(e)?t():console.warn(`[vdom3/ui] render([${s.join(",")}]) \u8DE8\u7EC4\u4EF6\u6E32\u67D3\u6682\u672A\u5B9E\u73B0\uFF08vdom3 \u5F53\u524D\u4EC5\u7EC4\u4EF6\u81EA\u8EAB render\uFF09`)},browser:I(),onUnmount:s=>(n(()=>{s(e),Ue.delete(e)}),()=>{}),registry:{idRegistry:new Map},mediaRegistry:Nn,popupTrackers:Cn,scrollTrackers:_n,isMounting:()=>!1,warned:kn,uncontrolledValues:xn,inputStates:Tn,openStates:Vn,ensurePopupListeners:Sn};return{__v3ui:!0,__compId:e,render:s=>o.render(s),onUnmount:s=>{n(s)},selfId:s=>{o.registry.idRegistry.set(s,e)},useExternal:s=>lt(o,s),useControlled:s=>Oe(o,s),useControlledInput:s=>at(o,s),useOpen:s=>gt(o,s),usePopup:s=>yt(o,s),usePopupPosition:s=>Re(o,s),useTween:(s,a)=>ft(o,s,a),useInView:s=>Tt(o,s),useScrollPosition:s=>Vt(o,s),useGlobalKey:s=>Ct(o,s),useDrag:s=>_t(o,s),useDragDrop:s=>St(o,s),useMedia:(s,a)=>{Nt(o,s,a)},useBreakpoint:(s,a)=>{kt(o,s,a)},useReducedMotion:()=>Ie(o),useStableRef:(s,a)=>dt(o,s,a),usePresence:s=>ae(o,s),useLongPress:s=>ct(o,s),useHoverCapable:()=>le(o),useVisualViewport:()=>xt(o),useAsync:s=>ut(o,s),useChat:s=>At(o,s)}}var me=new Map;function We(e){let t=me.get(e);if(t){try{t()}catch{}me.delete(e)}}function H(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)&&"type"in e}function pe(e){try{let t={};for(let[n,o]of Object.entries(e))if(o!=null&&typeof o=="object"){let r=JSON.stringify(o);r!=null&&r.length<=1e4&&(t[n]=r)}return Object.keys(t).length>0?JSON.stringify(t):null}catch{return null}}var Rt=new Set;function Ht(e,t){let n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(let r of n)if(e[r]!==t[r])return!1;return!0}async function $(e,t,n,o=!1){if(typeof e.type=="function"||e.type===B){let i={...e};if(e.type===B)return r(i,t,n);let c=n!=null&&typeof n=="object"&&n.type===e.type&&n.key===e.key&&n._render?n:null;if(c){if(i._render=c._render,i._id=c._id,Me(i),!o&&Ht(c.props,i.props)){if(i._child=c._child,c.el!=null&&(i.el=c.el),globalThis.__WF_V3_AUDIT!=="0"&&c._propsSnap!=null){let d=pe(i.props);if(d!=null&&d!==c._propsSnap){let g=`${R(i.type)}:${d.slice(0,40)}`;Rt.has(g)||(Rt.add(g),console.warn(`[vdom3/audit] \u7EC4\u4EF6 ${R(i.type)} \u7684 props \u5BF9\u8C61\u5185\u5BB9\u5DF2\u53D8\u4F46\u5F15\u7528\u672A\u53D8\uFF08\u539F\u5730\u4FEE\u6539\u5BF9\u8C61\uFF1F\uFF09\u2014\u2014\u526A\u679D\u5C06\u8DF3\u8FC7\u91CD\u6E32\u67D3\u2014\u2014\u8BF7\u65B0\u5EFA\u5BF9\u8C61\u4F20 props\uFF08props \u4E0D\u53EF\u53D8\u5951\u7EA6\uFF09`))}}return w.emit(h("comp","build",i._id,{name:R(i.type),reused:!0,index:!0,reason:"reuse-skip",propsKeys:Object.keys(i.props)})),i._propsSnap=pe(i.props),i}let m=Object.keys({...c.props,...i.props}).filter(d=>c.props[d]!==i.props[d]);w.emit(h("props","update",i._id,{name:R(i.type),keys:m})),i._propsSnap=pe(i.props),w.emit(h("comp","build",i._id,{name:R(i.type),reused:!0,index:!0,reason:o?"root-render":"props-changed",changedKeys:m}))}else{i._id=j(),Me(i),w.emit(h("comp","build",i._id,{name:R(i.type),reused:!1,index:!0,reason:"mount"})),w.emit(h("comp","mount",i._id,{name:R(i.type)}));let m=i._id,d=()=>{window.__chain="componentRender:"+m;let y=t._componentRender;y?(window.__chain="fn("+m+")",y(m)):(window.__chain="ctx.render("+m+")",t.render())},g=Object.assign(Object.create(t),{render:d,onUnmount:y=>{me.set(m,y)},browser:I(),ui:It(m,d,y=>{me.set(m,y)})}),v=null;try{v=await i.type(i.props,g)}catch(y){let N=y;throw w.emit(h("error","throw",i._id,{phase:"factory",name:R(i.type),message:N?.message??String(y)})),y}i._render=v,i._propsSnap=pe(i.props)}w.emit(h("comp","render",i._id,{name:R(i.type)}));let f=null;try{f=await i._render(i.props)}catch(m){let d=m;throw w.emit(h("error","throw",i._id,{phase:"renderFn",name:R(i.type),message:d?.message??String(m)})),m}i._child=null;let p=c?._child??null;if(f){let m=await $(f,t,p!=null&&typeof p=="object"?p:null);i._child=m}return i}async function r(i,c,f){let p=String(i.props?.appId??""),m=it(p);if(!m)return w.emit(h("app","error",void 0,{appId:p,reason:"unknown-app"})),i;let d=f!=null&&f.type===B&&f.appId===p;if(!d||!f._appOutput){w.emit(h("app","mount",void 0,{appId:p}));let y=await m(i.props?.props??{},c);i._appOutput=y}else{i._appOutput=f._appOutput;let y=f.props?.props??{},N=i.props?.props??{},x=[...new Set([...Object.keys(y),...Object.keys(N)])].filter(S=>y[S]!==N[S]);x.length>0&&w.emit(h("app","update",void 0,{appId:p,keys:x}))}let g=d&&f._appOutput?await $(f._appOutput,c,null):null,v=i._appOutput?await $(i._appOutput,c,g):null;return i._child=v,i.appId=p,i}let s=T(n??{}),a=0,l=null;for(let i of T(e)){if(H(i)){let c=s[a],f=await $(i,t,c!=null&&typeof c=="object"?c:null);f!==i&&(l??=[...T(e)],l[a]=f)}a++}if(l==null&&n!=null&&typeof n=="object"&&!Array.isArray(n)){let i=T(n),c=T(e);if(Ht(n.props??{},e.props??{})&&i.length===c.length&&i.every((f,p)=>f===c[p]))return n}let u={...e};return l&&(u.children=l),u}function R(e){return typeof e=="function"?e.name||"anonymous":String(e)}var Pn=globalThis.__WF_V3_AUDIT!=="0";function Ut(e,t){if(!Pn)return;let n=T(t).filter(s=>s!=null&&typeof s=="object"&&s.el!=null);if(n.length<2)return;let o=n[0].el?.parentNode;if(!o)return;let r=-1;for(let s of n){let a=s.el;if(a.parentNode!==o)return;let l=[...o.childNodes].indexOf(a);if(l<0)return;if(l<r){let u=globalThis.__WF_V3_AUDIT_STACK?new Error().stack?.split(`
7
+ `).slice(2,5).map(f=>f.trim().slice(0,70)).join(" | "):"",i=n.map(f=>typeof f.type=="function"?"C":String(f.type).slice(0,8)),c=n.map(f=>[...o.childNodes].indexOf(f.el));console.warn(`[vdom3/audit] children \u987A\u5E8F\u9519\u4F4D idx=${l}<${r} tag=${String(s.type).slice(0,30)} kinds=[${i.join(",")}] idxs=[${c.join(",")}] kids=${n.length} domKids=${o.childNodes.length}${u?" || "+u:""}`);return}r=l}}var Ln=new Set(["svg","path","circle","rect","line","polyline","polygon","g","defs","use","text","tspan","ellipse","title","desc","marker","symbol","linearGradient","radialGradient","stop","mask","pattern","clipPath"]);function ee(e){if(e==null||typeof e!="object")return!1;let t=e.type;return t===q||typeof t=="symbol"&&e.props?.portalKey!=null}function An(e){if(e==null||typeof e!="object")return!1;let t=e.type;return(t===J||typeof t=="symbol")&&e.props?.portalKey==null}var E=new O;function $e(e,t,n){let o=E;n&&(E=n);try{Le(t),t.innerHTML="",E.register(O.ROOT,t),D(e,t)}finally{E=o}}function D(e,t,n){if(typeof e.type=="function"||e.type===B){let l=e._child!==void 0?e._child:T(e)[0]??null;if(l==null)return null;if(e.el!=null&&(e.el.isConnected||e.el.parentNode===t))return e.el;let u=D(l,t,n);return e.el=u,e._outFirst=l._outFirst??u,e._outLast=l._outLast??u,u}if(An(e)){let l=null,u=null;for(let i of T(e)){let c=Fe(i,t,n);c&&(l||(l=c),u=c)}return e._outFirst=l,e._outLast=u,l}if(ee(e)){let u=String(e.props?.portalKey??"default"),i=Z(u);Le(i),E.register(O.PORTAL(u),i);let c=null,f=i.childNodes.length===0;for(let p of T(e)){let m=Fe(p,i);m&&!c&&(c=m)}return f&&i.childNodes.length>0&&w.emit(h("portal","open",void 0,{portalKey:u})),e.el=i,c??i}let o=e.type,r=Ln.has(o)?document.createElementNS("http://www.w3.org/2000/svg",o):document.createElement(o),s=j();r.setAttribute("data-v3-id",s),E.register(s,r),e.el=r,w.emit(h("node","create",s,{tag:e.type}));for(let[l,u]of Object.entries(e.props??{}))if(!(l==="key"||l==="children"||l==="ref")){if(typeof u=="function"&&/^on[A-Z]/.test(l)){Ae(s,l.slice(2).toLowerCase(),u,t);continue}if(u!=null&&u!==!1){if(l==="value"&&r instanceof HTMLInputElement)r.value=String(u);else if(l==="style"&&typeof u=="object"&&!Array.isArray(u)){let i=Object.entries(u).filter(([,c])=>c!=null&&c!==!1).map(([c,f])=>`${c.replace(/[A-Z]/g,p=>"-"+p.toLowerCase())}:${f}`).join(";");r.setAttribute("style",i)}else r.setAttribute(l,String(u));w.emit(h("prop","update",s,{key:l,value:u,prev:""}))}}e._outFirst=r,e._outLast=r,n&&n.parentNode===t?t.insertBefore(r,n):t.appendChild(r),w.emit(h("node","insert",s,{parent:W(t),ref:n?M(n):null,causeId:U??void 0}));let a=e.props?.ref;typeof a=="function"&&(w.emit(h("ref","mount",s,{})),a(r));for(let l of T(e))Fe(l,r);return r}function Mn(e,t,n,o){if(e!=null&&typeof e=="object"&&e._outFirst&&e._outLast&&e._outLast!==e._outFirst){let r=e._outFirst,s=e._outLast;typeof e.type=="function"&&e._id?$t(e,t,o):e.el&&e.el.parentNode===t?ge(e.el,t,e):r.parentNode===t&&Y(r,t);let a=r.nextSibling,l=64,u=0;for(;a&&a!==s&&u++<l;){let i=a.nextSibling;Y(a,t),a=i}s.parentNode===t&&Y(s,t);return}if(e!=null&&typeof e=="object"&&ee(e)){ne(e);return}if(e!=null&&typeof e=="object"&&e._child&&ee(e._child)){ne(e._child);return}if(e!=null&&typeof e=="object"&&typeof e.type=="function"&&e._id){$t(e,t,o);return}e!=null&&typeof e=="object"&&e.el?ge(e.el,t,e):n&&Y(n,t)}function Y(e,t){let n=E.idOf(e);n&&(w.emit(h("node","remove",n,{parent:W(t),causeId:U??void 0})),E.unregister(n,e)),e.parentNode?.removeChild(e)}function je(e,t){let n=document.createComment("wf-hole"),o=j();return E.register(o,n),w.emit(h("node","create",o,{kind:"hole"})),t&&t.parentNode===e?e.insertBefore(n,t):e.appendChild(n),w.emit(h("node","insert",o,{parent:W(e),ref:t?M(t):null,kind:"hole",causeId:U??void 0})),n}function Fe(e,t,n){if(e==null||e===!1||e===!0)return je(t,n);if(typeof e=="string"||typeof e=="number"){let o=document.createTextNode(String(e)),r=j();return E.register(r,o),w.emit(h("text","create",r,{value:String(e)})),n&&n.parentNode===t?t.insertBefore(o,n):t.appendChild(o),w.emit(h("node","insert",r,{parent:W(t),ref:n?M(n):null})),o}return D(e,t,n)}function oe(e,t,n,o,r){let s=E;r&&(E=r);try{return e!==null&&t!==null&&typeof e=="object"&&typeof t=="object"&&e===t?e.el??null:In(e,t,n,o)}finally{E=s}}var On=0,U=null,qt=[];function Dt(){return qt.push(U),U=`c${++On}`,U}function Wt(){U=qt.pop()??null}function Ft(e){if(e==null||typeof e=="boolean")return"hole";if(typeof e=="string"||typeof e=="number")return"text";if(typeof e=="object"&&!Array.isArray(e)){let t=e.type;return typeof t=="function"?"comp":t===J?"frag":t===q?"portal":"native"}return"unknown"}function In(e,t,n,o){let r=Ft(e),s=Ft(t);if(w.emit(h("diff","transition",void 0,{from:r,to:s,level:"trace"})),typeof t=="string"||typeof t=="number"){let i=String(t),c=e&&typeof e=="object"?e.el:n.childNodes[0]??null;if(c&&c.nodeType===3)return c.nodeValue!==i&&(w.emit(h("text","update",M(c),{value:i,prev:c.nodeValue??""})),c.nodeValue=i),c;let f=document.createTextNode(i),p=j();return E.register(p,f),w.emit(h("text","create",p,{value:i})),o&&o.parentNode===n?n.insertBefore(f,o):n.appendChild(f),w.emit(h("node","insert",p,{parent:W(n),ref:o?M(o):null})),f}if(t==null||t===!1||t===!0){if(e!=null&&typeof e=="object"&&!Array.isArray(e)){if(ee(e))ne(e);else if(e.el&&e.el.parentNode===n){let i=E.idOf(e.el);w.emit(h("node","remove",i,{parent:W(n)})),e.el.parentNode?.removeChild(e.el),E.unregister(i,e.el)}}return null}let a=t,l=e!=null&&typeof e=="object"&&"type"in e;if(l&&e.type===a.type&&e.key===a.key){let i=e,c=K(a);ye(l?K(e):null,c,"reuse");let f=Wn[c];return f?f(i,a,n,o):(ye(l?K(e):null,c,"unhandled"),console.warn(`[vdom3/patch] kind=${c} \u65E0\u540C\u7C7B\u578B\u5904\u7406\u5668\u2014\u2014\u964D\u7EA7\u91CD\u5EFA\uFF08kind \u5206\u53D1\u5B8C\u6574\u6027\u7F3A\u5931\uFF09`),D(a,n,o))}if(ye(l?K(e):null,K(a),"rebuild"),l&&typeof e.type=="function"&&e._id&&(We(e._id),w.emit(h("comp","unmount",e._id,{name:qe(e.type)}))),l){let i=e.el;i&&i.parentNode===n?ge(i,n,e):e&&ee(e)&&ne(e)}return D(a,n,o)}function Rn(e,t,n){let o=M(e),r=new Set([...Object.keys(t??{}),...Object.keys(n??{})]),s=t?.ref,a=n?.ref;s!==a&&(typeof s=="function"&&s(null),typeof a=="function"&&a(e));for(let l of r){if(l==="key"||l==="children"||l==="ref")continue;let u=t?.[l],i=n?.[l];if(u!==i&&!(u!=null&&i!=null&&typeof u=="object"&&typeof i=="object"&&!Array.isArray(u)&&!Array.isArray(i)&&Kn(u,i))){if(typeof i=="function"&&/^on[A-Z]/.test(l)){Ae(o,l.slice(2).toLowerCase(),i,e);continue}if(i==null||i===!1)l==="value"&&e instanceof HTMLInputElement?e.value="":e.removeAttribute(l);else if(l==="value"&&e instanceof HTMLInputElement)e.value=String(i);else if(l==="style"&&typeof i=="object"&&!Array.isArray(i)){let c=Object.entries(i).filter(([,f])=>f!=null&&f!==!1).map(([f,p])=>`${f.replace(/[A-Z]/g,m=>"-"+m.toLowerCase())}:${p}`).join(";");e.setAttribute("style",c)}else e.setAttribute(l,String(i));w.emit(h("prop","update",o,{key:l,value:i,prev:u??""}))}}}function ye(e,t,n){w.emit(h("vnode","patch",void 0,{oldKind:e,newKind:t,strategy:n}))}function Hn(e,t,n,o){let r=e.el;return r==null?(ye(K(e),"native","unhandled"),console.warn(`[vdom3/patch] native \u590D\u7528\u4F46 ov.el \u7F3A\u5931\uFF08tag=${String(e.type)}\u2014\u2014kind \u5206\u53D1\u6216\u6E32\u67D3\u65F6\u5E8F\u9519\u8BEF\uFF09\u2014\u2014\u964D\u7EA7\u91CD\u5EFA`),D(t,n,o)):(t.el=r,Rn(r,e.props,t.props),Ke(e,t,r),r)}function jt(e,t,n,o){t._render=e._render,t._id=e._id;let r=t._child!==void 0?t._child:T(t)[0]??null,s=e._child!==void 0?e._child:T(e)[0]??null;if(r==null||r===!1||r===!0){if(s&&ee(s))ne(s);else if(e.el){he(s);let a=e._outFirst??e.el,l=e._outLast??e.el;if(l!==a&&a.parentNode===n){let u=E.idOf(a);w.emit(h("node","remove",u,{parent:W(n)})),a.parentNode?.removeChild(a),E.unregister(u,a);let i=a.nextSibling,c=64,f=0;for(;i&&i!==l&&f++<c;){let p=i.nextSibling;Y(i,n),i=p}l.parentNode===n&&Y(l,n)}else{let u=E.idOf(e.el);w.emit(h("node","remove",u,{parent:W(n)})),e.el.parentNode?.removeChild(e.el),E.unregister(u,e.el)}e.el=null}return t.el=null,null}return e.el==null||!(e.el.isConnected||e.el.parentNode===n)?t.el=D(t,n,o):(oe(s,r,n,o),t.el=e.el,t._outFirst=r._outFirst??t.el,t._outLast=r._outLast??t.el),t.el}function Un(e,t,n,o){Ke(e,t,n,Fn(e));let r=T(e).find(u=>u!=null&&typeof u=="object"&&!Array.isArray(u));t.el=e.el??r?.el??null;let s=T(t).filter(u=>u!=null&&typeof u=="object"&&!Array.isArray(u)),a=s[0],l=s[s.length-1];return t._outFirst=a?.el??t.el,t._outLast=l?._outLast??l?.el??t.el,t.el}function Dn(e,t,n,o){let r=String(t.props?.portalKey??"default"),s=Z(r);return E.register(O.PORTAL(r),s),Ke(e,t,s),t.el=s,s}var Wn={native:Hn,comp:jt,app:jt,frag:Un,portal:Dn,text:void 0,null:void 0};function Fn(e){let n=T(e).find(r=>r!=null&&typeof r=="object"&&!Array.isArray(r))?.el,o=n?.parentNode;if(o&&n){let r=0;for(let s of o.childNodes){if(s===n)return r;r++}}return 0}function jn(e,t,n){let o=new Map;e.forEach((s,a)=>{H(s)&&s.key!=null&&o.set(s.key,a)});let r=null;for(let s=0;s<t.length;s++){let a=t[s];if(!H(a)||a.key==null){r=null;continue}let l=o.get(a.key),u=null;if(l!=null&&H(e[l])&&(u=e[l].el??null),u&&u.parentNode===n){let i=r?r.nextSibling:n.firstChild;if(i!==u){let c=u.previousSibling?E.idOf(u.previousSibling):null;n.insertBefore(u,i),w.emit(h("node","move",E.idOf(u),{parent:M(n),ref:i?E.idOf(i):null,prev:c,key:a.key,causeId:U??void 0}))}r=u}}}function $n(e,t,n){let o=new Map;for(let a of e)H(a)&&a.key!=null&&o.set(a.key,a);jn(e,t,n);let r=null;for(let a of t){let l=a,u=o.get(l.key??"")??null;u&&u!==l?(oe(u,l,n),r=l.el??r):u||(D(l,n,r?r.nextSibling:n.firstChild),r=l.el??r)}let s=new Set(t.filter(a=>H(a)).map(a=>a.key));for(let a of e)if(H(a)&&a.key!=null&&!s.has(a.key)&&a.el?.parentNode===n){let l=E.idOf(a.el);w.emit(h("node","remove",l,{parent:M(n)})),a.el.parentNode?.removeChild(a.el),E.unregister(l,a.el)}}function he(e){if(e==null||typeof e!="object"||Array.isArray(e))return;let t=e.props?.ref;if(typeof t=="function"){let n=e.el;w.emit(h("ref","cleanup",n?E.idOf(n):"null")),t(null)}for(let n of T(e))n!=null&&typeof n=="object"&&!Array.isArray(n)&&he(n)}function $t(e,t,n){let o=e._id;if(o&&(We(o),w.emit(h("comp","unmount",o,{name:qe(e.type)})),st(o)),e.el)ge(e.el,t,e);else{let r=t.childNodes[n];r&&r.parentNode?.removeChild(r)}}function ge(e,t,n){let o=globalThis.__WF_V3_AUDIT!=="0"?Se(E.idOf(e)):0;if(Pe(E.idOf(e)),o>0){let s=Se(E.idOf(e));s>0&&console.warn(`[vdom3/audit] \u8282\u70B9\u76D1\u542C\u6B8B\u7559\uFF1A${s}/${o} \u4E2A\u76D1\u542C\u672A\u6E05\u7406\uFF08${String(n?.type??e.nodeName).slice(0,20)}\uFF09\u2014\u2014\u4E8B\u4EF6\u4ECD\u4F1A\u54CD\u5E94\u2014\u2014\u6CC4\u6F0F`)}n&&he(n);let r=E.idOf(e);w.emit(h("node","remove",r,{parent:W(t),causeId:U??void 0})),e.parentNode?.removeChild(e),E.unregister(r,e)}function Kn(e,t){let n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(let r of n)if(e[r]!==t[r])return!1;return!0}function ne(e){let t=String(e.props?.portalKey??"default"),n=Z(t);he(e);for(let o of[...n.childNodes]){Pe(E.idOf(o));let r=E.idOf(o);w.emit(h("node","remove",r,{parent:O.PORTAL(t)})),n.removeChild(o),E.unregister(r,o)}n.childNodes.length===0&&w.emit(h("portal","close",void 0,{portalKey:t}))}var Kt=new Set;function Ke(e,t,n,o=0){let r=T(e),s=T(t),a=s.length>1&&s.every(f=>H(f)&&f.key!=null)?"keyed":"unkeyed";if(w.emit(h("diff","mode",void 0,{mode:a,len:s.length,prevLen:r.length,level:"trace"})),globalThis.__WF_V3_AUDIT!=="0"&&r.length!==s.length){let f=`${s.length}:${r.length}`;if(!Kt.has(f)){Kt.add(f);for(let p=0;p<s.length;p++){let m=s[p];if(m!=null&&typeof m=="object"&&!Array.isArray(m)&&typeof m.type=="function"&&m.key==null){console.error(`[vdom3/audit] \u52A8\u6001\u6570\u7EC4\u4F4D\u7F6E ${p} \u7684\u7EC4\u4EF6\u7F3A\u5C11 key\uFF08${qe(m.type)}\uFF09\u2014\u2014\u5217\u8868\u589E\u5220/\u91CD\u6392\u4F1A\u9519\u4F4D\u7EC4\u4EF6\u5B9E\u4F8B\u72B6\u6001\u3002\u8BF7\u63D0\u4F9B\u4E1A\u52A1\u8EAB\u4EFD key\uFF08\u5982 key={item.id}\uFF09\uFF1B\u65E0\u72B6\u6001 native \u9879\u8C41\u514D\u3002`);break}}}}if(s.length>1&&s.every(f=>H(f)&&f.key!=null)){$n(r,s,n);return}let l=f=>!!f&&f.nodeType===8&&(f.nodeValue??"").includes("wf-hole"),u=Math.max(r.length,s.length),i=o,c=(f,p)=>{if(f!=null&&typeof f=="object"&&!Array.isArray(f)){let m=f._outFirst,d=f._outLast;if(m&&d&&d!==m){let g=1,v=m,y=64,N=0;for(;v&&v!==d&&N++<y;)g++,v=v.nextSibling;return g}}return p?1:0};for(let f=0;f<u;f++){let p=f<r.length?r[f]:null,m=f<s.length?s[f]:null,d=n.childNodes[i]??null,g=()=>Mn(p,n,d,f);if(f>=s.length){let y=p!=null&&typeof p=="object"&&p._outFirst&&p._outLast&&p._outLast!==p._outFirst?c(p,d):1;g(),i+=y;continue}if(typeof m=="string"||typeof m=="number"){let y=String(m);if(d&&d.nodeType===3)d.nodeValue!==y&&(w.emit(h("text","update",M(d),{value:y,prev:d.nodeValue??""})),d.nodeValue=y);else{let N=document.createTextNode(y),x=j();if(E.register(x,N),w.emit(h("text","create",x,{value:y})),d&&d.parentNode===n){let S=E.idOf(d);S&&(w.emit(h("node","remove",S,{parent:M(n)})),E.unregister(S,d)),n.replaceChild(N,d)}else n.appendChild(N);w.emit(h("node","insert",x,{parent:M(n),ref:null}))}i+=1;continue}if(m==null||m===!1||m===!0){if(!l(d)){Dt();try{let y=d?d.nextSibling:null;g(),je(n,y)}finally{Wt()}}i+=1;continue}if(p!=null&&typeof p=="object"&&p.type===m.type)oe(p,m,n,d??null);else{Dt();try{let y=D(m,n,d??null);d&&!l(d)?g():d&&l(d)&&Y(d,n),y==null&&!d&&je(n,null)}finally{Wt()}}let v=c(m,d)||(p!=null&&typeof p=="object"&&!Array.isArray(p)&&p._outFirst&&p._outLast&&p._outLast!==p._outFirst?c(p,d):1);i+=v}Ut(n,t)}function qe(e){return typeof e=="function"?e.name||"anonymous":String(e)}function M(e){return E.idOf(e)}function W(e){return E.idOf(e)}var we=new WeakMap,Bt=new WeakMap;function fr(e,t,n){return new Promise((o,r)=>{(async()=>{try{document.getElementById("__wf_portal")?.remove();let s=new O,a=await $(t,{});$e(a,e,s),we.set(e,a),Bt.set(e,s),o()}catch(s){r(s)}})()})}async function pr(e,t,n,o,r){let s=we.get(e)??null,a=Bt.get(e)??E;if(o==null)return e.innerHTML="",we.set(e,null),null;let l=await $(o,{},s);return s?oe(s,l,e,void 0,a):$e(l,e,a),we.set(e,l),l}function mr(e,t){return $(e,{})}async function yr(e,t,n){let o=await e(t,n);return typeof o=="function"?o(t):o}async function gr(e,t,n){let o=await e(t,n);return()=>typeof o=="function"?o(t):o}function ve(e,t){if(e==null||typeof e!="object")return;if(Array.isArray(e)){for(let o of e)ve(o,t);return}t(e);let n=e?.props?.children;n!=null&&ve(n,t)}function hr(e,t){let n;return ve(e,o=>{!n&&t(o)&&(n=o)}),n}function wr(e,t){let n=[];return ve(e,o=>{typeof o?.props?.class=="string"&&o.props.class.split(" ").includes(t)&&n.push(o)}),n}function vr(e){let t={ui:{render:()=>{},ready:!0,useExternal:()=>{},useVisualViewport:()=>({keyboardOpen:!1,height:0,offsetTop:0}),useScrollPosition:()=>({y:0}),useStableRef:()=>()=>{},useGlobalKey:()=>()=>{},useReducedMotion:()=>!1,useControlledInput:o=>({value:o.value??"",setValue:o.onChange??(()=>{}),keyword:o.value??"",setKeyword:()=>{},setSelectedLabel:()=>{}}),useOpen:o=>({get open(){return!!o.open},setOpen:o.onOpenChange??(()=>{}),triggerProps:{}})}};return e?{ui:{...t.ui,...e.ui??{}},...e.browser?{browser:e.browser}:{}}:t}function br(e=()=>!1,t){return{get open(){return e()},setOpen:t??(n=>{}),refresh:()=>{},portal:(n,o)=>e()?n:null,wrapProps:{}}}export{mr as buildToDom,br as createPopupMock,vr as createTestCtx,wr as findByClass,hr as findVNode,gr as mountComponent,fr as mountToDom,pr as patchToDom,yr as renderVNode,ve as walkVNode};
@@ -2,8 +2,8 @@
2
2
  * weifuwu/ui-dom 类型定义
3
3
  */
4
4
  import type { UseChatHandle, UseChatOptions } from './use-chat.ts';
5
- import type { VNode } from './vnode.ts';
6
- export type { VNode } from './vnode.ts';
5
+ import type { VNode } from './vdom3/types.ts';
6
+ export type { VNode } from './vdom3/types.ts';
7
7
  import type { Placement } from './popup.ts';
8
8
  /** 弹层位置跟踪配置 — 供 ctx.ui.usePopupPosition 使用 */
9
9
  export interface PopupPositionOptions {
@@ -284,8 +284,9 @@ export interface WfuiContext {
284
284
  i18n?: import('./i18n.ts').I18nState;
285
285
  /** UI 框架能力(由 createApp.mount 注入) */
286
286
  ui: {
287
- /** 触发组件重渲染(同步,无参 = 当前组件) */
288
- render: (ids?: string[]) => Promise<void>;
287
+ /** 触发组件重渲染(无参 = 当前组件——同步调度(vdom3)或异步(兼容面)——
288
+ * 统一契约 void | Promise<void>:调用方不 await(fire-and-forget) */
289
+ render: (ids?: string[]) => void | Promise<void>;
289
290
  /** 组件卸载钩子(mount 阶段注册——组件卸载时调用 fn;SSR no-op;返回退订) */
290
291
  onUnmount?: (fn: () => void) => (() => void) | undefined;
291
292
  /**
@@ -506,18 +507,6 @@ export interface WfuiContext {
506
507
  /** 响应式系统偏好(prefers-reduced-motion):JS 动画(rAF/tween)侧跳过用。
507
508
  * CSS 动画已有 _base.css 全局降级(0.01ms)——此原语覆盖 JS 动画路径。 */
508
509
  useReducedMotion: () => boolean;
509
- /** 元素动画完成回调(animationend):stableRef 形态——ref 挂载绑定、卸载清理、引用恒定。
510
- * `{ once: true }` 一次性(入场 settle);默认常驻(退场判断,回调读状态机 phase)。
511
- * 唯一动画事件入口(组件内禁直接 addEventListener('animationend'))。
512
- *
513
- * ```tsx
514
- * const settleRef = ctx.ui.useAnimationEnd(() => pos.refresh(), { once: true })
515
- * return () => h('div', { class: 'wf-panel', ref: settleRef })
516
- * ```
517
- */
518
- useAnimationEnd: (cb: () => void, opts?: {
519
- once?: boolean;
520
- }) => (el: HTMLElement | null) => void;
521
510
  /** 数值补间(rAF + ease + reduced-motion 直落终值):count-up / 进度 / 指示器。
522
511
  * 目标值变化自动补间;返回 `{ value }`(当前值,render 读)。 */
523
512
  useTween: (target: number, opts?: {
@@ -639,24 +628,5 @@ declare global {
639
628
  var __DATA__: Record<string, unknown> | undefined;
640
629
  }
641
630
  export {};
642
- /** ui-dom ctx:client WfuiContext + 顶层 params/query/data(定稿——对齐后端 ctx.params/ctx.query) */
643
- export type UIContext<C extends object = {}> = WfuiContext & C & {
644
- params: Record<string, string>;
645
- query: Record<string, string>;
646
- data: NonNullable<WfuiContext['data']>;
647
- [key: string]: any;
648
- };
649
- /** req = window.location(浏览器原生 Location,不包装) */
650
- export type UIRequest = Location;
651
- /** res = VNode(数据结构);uiServe = VDOM(落地) */
652
- export type UIResponse = VNode | null;
653
- /** handler = 异步组件:async (location, ctx) => vnode($ 有效) */
654
- export type UIHandler<C extends object = {}> = (location: Location, ctx: UIContext<C>) => Promise<UIResponse> | UIResponse;
655
- /** middleware = 两阶段 async:(location, ctx, children) => async (location, ctx) => vnode */
656
- export type UIMiddleware<I extends object = {}, O extends object = {}> = (location: Location, ctx: UIContext<I>, children: UIHandler<any>) => Promise<UIHandler<O>> | UIHandler<O>;
657
- /** 路由定义(UIRouter.get 内部存储) */
658
- export interface UIRouteDef {
659
- path: string;
660
- handler: UIHandler;
661
- title?: string;
662
- }
631
+ /** 组件 ctx:WfuiContext(vdom3 V3Ctx extends 统一——组件声明面) */
632
+ /** 路由由 vdom3 createRouter(RouteDef)统一承担——UIRouter 时代类型已删除 */
@@ -15,9 +15,12 @@ export {};
15
15
  * 4. 更新最小化:同位置同类型(含 key)复用——仅变化发事件
16
16
  * (TEXT_UPDATE/PROP_UPDATE——无整树 diff 决策噪音;异类型 → 重建事件)
17
17
  *
18
- * 事件流覆盖(location → DOM):
19
- * ROUTE_CHANGE → COMP_MOUNT → NODE_CREATE/TEXT_CREATE → INSERT → PROP_UPDATE/
20
- * TEXT_UPDATE → REMOVE/MOVE(更新时)→ COMP_UNMOUNT
18
+ * 事件流覆盖(location → DOM)——统一命名:对象 + 动作 + 参数(entity + action + target + payload):
19
+ * route:change → comp:mount → node:text:create → node:insert → prop:text:update
20
+ * → node:remove/move(更新时)→ comp:unmount
21
+ * 每层同构:location(route:change)/ jsx(comp:render·build·mount·unmount、props:update)
22
+ * / vdom(vnode:patch 决策——strategy 参数)/ dom(node:text:prop:event:ref 的 create·insert·
23
+ * remove·move·update·bind·unbind·cleanup)——任何事件触发最终落到 dom 层的精准状态变化
21
24
  *
22
25
  * 模块:
23
26
  * types.ts — VNode(native/文本/Fragment)+ V3Event + EventStream 契约
@@ -0,0 +1,20 @@
1
+ /**
2
+ * vdom3 app — 应用注册表(多应用加载——app 节点消费)
3
+ *
4
+ * registerApp(appId, factory):注册子应用(factory 返回子应用根 vnode——
5
+ * 可 await 初始化——应用实例状态由工厂闭包持有——appId 复用不重跑)。
6
+ * 渲染时(app 节点 build):查注册表 → 工厂调用(首次/应用实例复用)→
7
+ * 子应用根在父流构建——app:* 边界事件(mount/update/unmount/error——带 appId)。
8
+ *
9
+ * 不隔离设计(design/vdom3-app-node.md):共享流/全局 id——天然归属唯一——
10
+ * app 的价值 = 应用编排(注册表 + 生命周期 + 边界事件)。
11
+ */
12
+ import type { VNode, V3Ctx } from './types.ts';
13
+ /** 子应用工厂:(props, ctx) => 子应用根 vnode(可 await——应用初始化) */
14
+ export type AppFactory = (props: Record<string, unknown>, ctx: V3Ctx) => Promise<VNode> | VNode;
15
+ /** 注册子应用(模块级——appId 全局唯一) */
16
+ export declare function registerApp(appId: string, factory: AppFactory): void;
17
+ /** 查询(app 节点 build 消费——未注册返回 null——app:error unknown-app) */
18
+ export declare function getAppFactory(appId: string): AppFactory | null;
19
+ /** 测试隔离 */
20
+ export declare function resetAppRegistry(): void;
@@ -14,3 +14,16 @@ export declare function auditAfterRender(root: Element): void;
14
14
  /** vnode/DOM 顺序一致性(children 有 el 的项——DOM 顺序 = children 顺序)
15
15
  * 索引比较(父下 childNodes indexOf——无 compareDocumentPosition 的跨树/同节点歧义) */
16
16
  export declare function auditOrder(_el: Element, v: VNode): void;
17
+ /**
18
+ * DOM ↔ 事件流对照审计(不变量"无事件流不渲染"的运行时守护——dev 模式)
19
+ *
20
+ * 启用:__WF_VDOM_AUDIT === '1'(独立开关——默认关——审计开销仅 dev)。
21
+ * 机制:MutationObserver 观察挂载点(childList——added/removedNodes)——
22
+ * 对照事件流(node:insert/remove 的 target)——无事件对应的 DOM 结构变化
23
+ * = 绕过点(静默渲染)——warn。
24
+ * 例外(白名单):无 data-v3-id 的节点(内部容器/文本包装);挂载点自身清空
25
+ * (mount/unmount——初始/销毁语义)。
26
+ */
27
+ export declare function auditDomEvents(root: Element, getRecent: () => Array<{
28
+ target?: string;
29
+ }>): () => void;
@@ -4,13 +4,17 @@
4
4
  * 与 vdom2 同模型:先 await 组件工厂 + renderFn → 构建产物(纯树)→ 同步渲染。
5
5
  * 组件实例复用:同位置同类型(patch 判定)→ 工厂不重跑(内部状态保持)。
6
6
  */
7
- import type { VNode, PortalVNode } from './types.ts';
7
+ import type { VNode, PortalVNode, V3Ctx } from './types.ts';
8
8
  import { Fragment } from './types.ts';
9
9
  export declare function runUnmountHooks(id: string): void;
10
10
  export declare function isVNode(v: unknown): v is VNode;
11
11
  /** 构建 vnode 树(组件展开——异步;native/text 同步递归)——**纯函数式**:
12
12
  * 每层返回克隆(不就地修改入参)——update 的对照树(current)不被污染。
13
- * oldV:旧树同位置对照——同类型组件复用 _render(工厂不重跑——内部状态保持)。 */
14
- export declare function buildVNode(vnode: VNode, ctx: Record<string, unknown>, oldV?: VNode | null): Promise<VNode>;
13
+ * oldV:旧树同位置对照——同类型组件复用 _render(工厂不重跑——内部状态保持)。
14
+ * isRoot:整树 rerender(createRoot/router 顶层)——根组件不剪枝(内部状态
15
+ * (闭包 let)变化时 props 不变——剪枝跳过 renderFn = 读旧闭包值;根必须重跑。
16
+ * 嵌套剪枝保留:子组件内部状态由自身 ctx.render(组件级——绕开 build)维护,
17
+ * 父重跑时剪枝复用其最新输出——安全。 */
18
+ export declare function buildVNode(vnode: VNode, ctx: V3Ctx, oldV?: VNode | null, isRoot?: boolean): Promise<VNode>;
15
19
  export declare function isPortal(v: unknown): v is PortalVNode;
16
20
  export { Fragment };
@@ -5,7 +5,17 @@
5
5
  * vdom3 适配:复用 Confirm/Toast 组件(vdom2 组件——hooks shim 可跑)——
6
6
  * createRoot 挂载到命令式容器——resolve 时 handle.unmount 清理。
7
7
  */
8
- /** 命令式确认(vdom3——createRoot 挂载 Confirm 组件——Modal portal 退场) */
9
- export declare function v3Confirm(): any;
8
+ /** 命令式中间件注入类型(confirm/toast 挂到 ctx——中间件面) */
9
+ export interface V3CommandInjected {
10
+ confirm(message: string, options?: Record<string, unknown>): Promise<boolean>;
11
+ toast(message: string, variant?: 'success' | 'error' | 'warning' | 'info'): void;
12
+ }
13
+ /** 命令式确认(vdom3——createRoot 挂载 Confirm 组件——Modal portal 退场)
14
+ * 泛型 ctx(兼容 UIRouter(WfuiContext)与 vdom3(V3Ctx)双入口) */
15
+ export declare function v3Confirm<C extends {
16
+ [key: string]: unknown;
17
+ }>(): (ctx: C) => C & V3CommandInjected;
10
18
  /** 命令式轻提示(vdom3——createRoot 挂载 Toast 组件——自动消失) */
11
- export declare function v3Toast(): any;
19
+ export declare function v3Toast<C extends {
20
+ [key: string]: unknown;
21
+ }>(): (ctx: C) => C & V3CommandInjected;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * vdom3 comp-index — 组件实例索引(组件 id → 当前树 vnode 引用)
3
+ *
4
+ * 优化:updateComponent(组件级更新——ctx.render 高频路径)原为 DFS 整树
5
+ * 定位(O(树大小))——滚动跟随 renderByIds 每帧多次——大应用热点。
6
+ * 索引定位 O(1)——注册(build 组件分支)/ 注销(组件移除)/ miss 回退 DFS(防御)。
7
+ *
8
+ * id 全局唯一(nextNodeId)——索引全局——与 delegate 注册表同模式。
9
+ */
10
+ import type { VNode } from './types.ts';
11
+ /** 注册(build 组件分支——mount/reuse 时——指向当前树的最新克隆) */
12
+ export declare function indexComponent(v: VNode): void;
13
+ /** 注销(组件实例从树中移除——条件渲染/列表删除) */
14
+ export declare function unindexComponent(compId: string): void;
15
+ /** O(1) 定位(updateComponent 消费——miss 由调用方回退 DFS) */
16
+ export declare function getIndexedComponent(compId: string): VNode | null;
17
+ /** 测试隔离(跨测试残留——id 从 n1 重新分配——旧索引 miss 回退安全——整洁清理) */
18
+ export declare function resetCompIndex(): void;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * vdom3 event delegation — 事件代理(用户决策:事件注册到代理而非组件自身)
3
+ *
4
+ * 架构:
5
+ * 组件渲染 → handler 写入代理注册表(按节点 id——Map 覆盖零重绑)
6
+ * 挂载点(createRoot/createRouter 的 root + portal 容器)注册原生监听
7
+ * (每挂载点每事件一次——监听器 O(1))——惰性(首次绑定某事件时注册)
8
+ * 事件冒泡 → 挂载点监听 → e.target 向上找最近 [data-v3-id] → 查注册表 → 分发
9
+ *
10
+ * 收益:
11
+ * - 监听器 O(1)(每挂载点每事件一次——非每元素)
12
+ * - 零重绑(handler 变化 = Map 覆盖——事件流零噪音——§5.1 稳定引用仅为性能建议)
13
+ * - 生命周期:EVENT_BIND(挂载点首次注册)/ EVENT_UNBIND(节点移除时代理删除)
14
+ */
15
+ /** event → (nodeId → 条目{handler, once})——模块级全局(节点 id 全局唯一) */
16
+ /** 监听计数 API(round3 阶段 4——泄漏检测:unmount 后残留检查——
17
+ * handlers[event][nodeId] 数 = 某节点的绑定数) */
18
+ export declare function listenerCount(nodeId: string | null): number;
19
+ /** 绑定/更新 handler(Map 覆盖——零重绑零事件) */
20
+ export declare function bindEvent(nodeId: string, event: string, handler: EventListener, once?: boolean): void;
21
+ /** 解绑(节点移除——代理删除 + EVENT_UNBIND) */
22
+ export declare function unbindEvent(nodeId: string, event: string): void;
23
+ /** 解绑节点的全部事件(移除统一清理——注册表与元素级标记解耦) */
24
+ export declare function unbindAll(nodeId: string): void;
25
+ /** 元素级监听统一入口(动画生命周期等——ref 回调的 el):
26
+ * 注册到代理(once 自动解绑)+ 挂载点监听(el 已挂载——向上找)——返回退订 */
27
+ export declare function bindElementListener(el: Element, event: string, handler: EventListener, once?: boolean): () => void;
28
+ /** 测试/调试隔离:清空注册表与挂载点(模块级 handlers 跨测试残留——
29
+ * 节点 id 各测试从 n1 重新分配——旧 handler 可能被错误分发) */
30
+ export declare function resetDelegation(): void;
31
+ /** 注册挂载点(createRoot/createRouter 挂载时调用) */
32
+ export declare function ensureDelegationRoot(root: Element): void;
33
+ /** 移除挂载点(卸载——removeEventListener 配对 + 注册表清理;
34
+ * handler 由节点移除清理(unbindAll)) */
35
+ export declare function removeDelegationRoot(root: Element): void;
36
+ /** 全局监听(document/window 级——hooks 统一入口):
37
+ * 同事件多 handler 聚合到一个目标监听(EventTarget 每事件一次)——
38
+ * 统一注册/退订 + 事件流可观测(EVENT_BIND/UNBIND——delegated: true)。
39
+ * options.capture:scroll 等不冒泡事件的捕获监听(嵌套容器滚动跟踪)。
40
+ * mql/visualViewport 等浏览器 API 对象(无事件冒泡语义)不纳入——保持直接监听。 */
41
+ export interface GlobalListenerOptions {
42
+ capture?: boolean;
43
+ passive?: boolean;
44
+ }
45
+ export declare function addGlobalListener(target: EventTarget, event: string, handler: EventListener, opts?: GlobalListenerOptions): () => void;
46
+ /** 渲染时绑定(createNode/patchProps 调用——事件 props 处理):
47
+ * 注册 handler + 确保挂载点监听(向上找——首次) */
48
+ export declare function bindDelegated(nodeId: string, event: string, handler: EventListener, parent: Node | null): void;
@@ -4,8 +4,14 @@
4
4
  * 不变量:DOM = fold(事件流)——初始 DOM + 事件序列 = 任意时刻 DOM。
5
5
  * 事件不可变;DOM 指令可逆(取消 = 应用逆事件)。
6
6
  */
7
- import type { EventStream } from './types.ts';
8
- export declare function createEventStream(max?: number): EventStream;
7
+ import type { EventStream, V3Event, Entity, Action } from './types.ts';
8
+ /** 事件构造(统一命名:对象 + 动作 + 参数——每层同构) */
9
+ export declare function ev(entity: Entity, action: Action, target?: string, payload?: Record<string, unknown>): V3Event;
10
+ /** 事件键(断言/审计:'comp:render'——对象:动作) */
11
+ export declare function evKey(ev: V3Event): string;
12
+ export declare function createEventStream(max?: number, opts?: {
13
+ watermark?: number;
14
+ }): EventStream;
9
15
  /** 全局流(默认实例——后续 per-app 实例化) */
10
16
  export declare const stream: EventStream;
11
17
  export declare function nextNodeId(): string;