weifuwu 0.82.12 → 0.83.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.
@@ -34,6 +34,8 @@ export declare class UIRouter<C extends object = {}> {
34
34
  private _injected;
35
35
  private _mode;
36
36
  private _notFound?;
37
+ /** 子路由挂载(use(prefix, sub)——dumpRoutes 遍历用) */
38
+ private _children;
37
39
  constructor(options?: UIRouterOptions);
38
40
  get mode(): 'hash' | 'history';
39
41
  /** ctx 注入中间件(toast/confirm 等——(ctx) => ctx,对齐后端 app.use 注入 ctx.xxx) */
@@ -52,6 +54,11 @@ export declare class UIRouter<C extends object = {}> {
52
54
  notFound(handler: UIHandler): this;
53
55
  /** 当前 URL 路径(serve 调用——mode 由 UIRouter 决定) */
54
56
  getPath(): string;
57
+ /** 路由清单(debug 打印/测试用)——含嵌套子路由(use(prefix, sub) 递归展开) */
58
+ dumpRoutes(prefix?: string): Array<{
59
+ path: string;
60
+ title?: string;
61
+ }>;
55
62
  private _getPath;
56
63
  /** 匹配 URL → { handler, params, title }(serve 执行渲染) */
57
64
  match(path: string): RouteMatch;
@@ -1 +1 @@
1
- var ne=Symbol("Fragment"),ue=Symbol("Portal");function Te(e){return e!=null&&typeof e=="object"&&typeof e.type=="string"}function K(e){return e!=null&&typeof e=="object"&&e.type===ne}function C(e){return e!=null&&typeof e=="object"&&typeof e.type=="function"}function S(e){return e!=null&&typeof e=="object"&&e.type===ue}function w(e){return e==null||typeof e=="boolean"?[]:Array.isArray(e)?e:[e]}var Ne={error:0,warn:1,info:2,debug:3,trace:4},Re=["mount","build","render","diff","lifecycle","route","audit"],I={enabled:!1,stages:new Set,level:"info",filter:null},he=!1;function Ze(e){return e&&e in Ne?e:"info"}function ke(e){let n=new Set;if(!e)return n;for(let t of e.split(",")){let o=t.trim().split(":")[0];Re.includes(o)&&n.add(o)}return n}function Qe(){if(he)return I;he=!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(Re),level:"debug",filter:null};else if(t||i||r){let l=new Set;if(t)for(let d of ke(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 ke(r))l.add(d);I={enabled:!0,stages:l,level:t?.includes(":")?Ze(t.split(":")[1]):i?.level??"debug",filter:typeof i?.filter=="string"?i.filter:null}}}catch{}return I}function m(e,n="info"){return!I.enabled&&(he||Qe(),!I.enabled)||I.stages.size&&!I.stages.has(e)?!1:Ne[n]<=Ne[I.level]}function h(e,n,t,...o){if(!m(e,n)&&!Pe())return;let i=I.filter;i&&!t.includes(i)||_({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 en(e){return typeof e=="function"?"function":e===ne?"fragment":typeof e=="string"?"string":"other"}var nn={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=nn[en(t)](t),i=n.props?.id?`#${n.props.id}`:n.key!=null?`@${n.key}`:"";return o+i}function T(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 D(e,n=12){if(!e)return"null";let o=Array.from(e.childNodes).slice(0,n).map(T);return e.childNodes.length>n&&o.push(`\u2026+${e.childNodes.length-n}`),`[${o.join(" | ")}]`}var tn={route:"route",lifecycle:"lifecycle",x2y:"diff",keys:"diff",pos:"diff",render:"render",audit:"audit",build:"build",mount:"mount",diff:"diff"};function Ie(e){return tn[e]}var Y=new Set;function on(e){return Y.add(e),()=>{Y.delete(e)}}var $e=[];function rn(){return $e[$e.length-1]??""}function _(e){if(Y.size!==0){e.session||(e.session=rn()),typeof e.payload=="function"&&(Y.size>1||m(Ie(e.machine),e.level??"debug"))&&(e.payload=e.payload());for(let n of Y)try{n(e)}catch{}}}function Pe(){return Y.size>1}function ln(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 dn(e){let n=Ie(e.machine);if(!m(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}${ln(e.payload)}`)}on(dn);var sn={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 R(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 Le=new Map,un=50;function an(e,n,t,o){if(!e?.id)return;let i=Le.get(e.id);i||(i={name:e.name??"?",events:[]},Le.set(e.id,i)),i.events.push(`${n}--${t}-->${o}`),i.events.length>un&&i.events.shift()}function P(e,n,t){let o=sn[e]?.[n]??null;return o==null?(_({session:"",machine:"lifecycle",nodeId:t?.id??null,component:t?.name??null,from:e,event:n,to:"?",level:"warn",ts:Date.now()}),e):(an(t,e,n,o),_({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 J(e){return!e||e._lifecycle==="disposed"||e._child==null?!1:!ge(e._child)}function ge(e){if(e==null||typeof e!="object")return!1;if(Array.isArray(e)){for(let t of e)if(ge(t))return!0;return!1}let n=e;return!!(n._lifecycle==="disposed"||n._child!=null&&ge(n._child))}var cn=0;function U(){return{idRegistry:new Map,unmountHooks:[],nextId:()=>`_wf_${cn++}`}}function Me(e,n){for(let t of[...e.unmountHooks])t(n);e.idRegistry.delete(n),e.idRegistry.delete(`custom:${n}`)}function fn(e,n,t,o){try{e(n)}catch(i){console.error(`[weifuwu] ref ${t} error in <${o??"anonymous"}>`,i)}}function b(e,n){if(e==null||typeof e!="object")return;let t=e;if(t._id){let o=R(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,C(t)&&(t._render=null),t._parentNode=null,t._refNode=null,t._lifecycle=P(t._lifecycle,"DISPOSE",o)}else(C(t)||t._child!=null)&&(t._lifecycle=P(t._lifecycle,"DISPOSE",R(t)));if(t._child!=null){if(Array.isArray(t._child))for(let o of t._child)o&&typeof o=="object"&&b(o,n);else b(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"&&b(i,n)}if(typeof t.props?.ref=="function"&&fn(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"&&b(r,n);else typeof i=="object"&&b(i,n);o.remove(),t._remoteEl=null}}}function v(e){return typeof e=="function"&&e.name||"anonymous"}function je(e){return e.ui?._ctxVersion??0}function Ve(e,n){e.ui?.setMounting?.(n)}function g(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 C(t)?g(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":C(n)?"comp":"native"}function Ce(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 pn(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 ae(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=${ae(pn(e.value))}`),e.key!=null&&n.push(`key=${ae(e.key)}`),e.id!=null&&n.push(`id=${ae(e.id)}`),e.fid!=null&&n.push(`fid=${ae(e.fid)}`),`wf-hole: ${n.join(" ")}`}var yn=/^on[A-Z]/,mn=/^on[A-Z].*Capture$/;function we(e){let n=mn.test(e);return{type:(n?e.slice(2,-7):e.slice(2)).toLowerCase(),capture:n}}var Nn=new Set(["draggable","contenteditable","spellcheck","translate"]),hn=new Set(["zIndex","opacity","lineHeight","fontWeight","fontSizeAdjust","flex","flexGrow","flexShrink","order","zoom","aspectRatio","gridRow","gridColumn","scale","rotate","animationIterationCount","columnCount","fillOpacity","strokeOpacity","stopOpacity","floodOpacity"]);function _e(e){return Nn.has(e.toLowerCase())?"enumerated":e==="class"||e==="className"?"class":e==="style"?"style":e==="ref"?"ref":yn.test(e)?"event":e==="value"?"value":e==="indeterminate"?"indeterminate":e==="innerHTML"?"innerHTML":e.startsWith("aria-")?"aria":"default"}function Oe(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 gn={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"&&!hn.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}=we(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}Oe(e,n,t)}},default:Oe};function q(e,n,t){t!=null&&gn[_e(n)](e,n,t)}function H(e,n){return e.createComment(Z({type:"hole",value:n,key:null,id:null,fid:null}))}function te(){return!!globalThis?.__WF_VDOM_AUDIT}function Vn(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 Cn(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=n.ui;return d==null&&i._id?u.render([i._id]):u.render(d)},typeof i._render!="function"&&C(o?.reuse)&&typeof o.reuse._render=="function"&&(i._render=o.reuse._render),typeof i._render!="function"){Ve(n,!0);let d;try{d=await i.type(i.props??{},r)}finally{Ve(n,!1)}if(typeof d!="function")throw new Error(`Component ${v(e.type)} must return a render function. Use (init_props, ctx) => (props) => VNode pattern.`);i._render=d}return{renderFn:i._render,childCtx:r}}function be(e){return!!e&&typeof e.then=="function"}function B(e,n,t,o,i){return wn[L(e)](e,n,t,o,i)}function xe(e,n){return e!=null&&typeof e=="object"&&!Array.isArray(e)&&e.type===n.type?e:null}var wn={hole:e=>e,text:e=>e,arr:_n,comp:bn,frag:xn,native:De,portal:De};function _n(e,n,t,o,i){let r=e;m("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;_({session:"",machine:"audit",nodeId:a._id??null,component:v(a.type),from:"disposed",event:"CONTRACT_VIOLATION",to:"new-tree",level:"error",ts:Date.now()}),te()&&console.error(`[vdom2/audit] \u4E24\u9636\u6BB5\u5951\u7EA6\u8FDD\u53CD\uFF1A\u7EC4\u4EF6 ${v(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 c=a;c.key!==null&&(c.key=String(c.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 c=null;return s!=null&&typeof s=="object"&&!Array.isArray(s)&&s.key!=null&&(c=d.get(s.key)??null),c==null&&(c=l[a]??null),B(s,n,c,o,i)});m("build")&&h("build","debug","",`array out kids=${A(r)}`);let f=!1;for(let s=0;s<u.length;s++)if(be(u[s])){f=!0;break}return f?Promise.all(u).then(()=>r):r}function bn(e,n,t,o,i){let r=e,l=o??n.__registry??U(),d=xe(t,r);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),C(r)&&C(d)&&typeof d._render=="function"&&(r._render=d._render));let u=Vn(d?.props??{},r.props??{}),f=je(n),s=(d?._ctxVersion??-1)===f;if(!i?.force&&u&&s&&J(d)&&typeof r._render=="function"){let a=d;return r._lifecycle=P(r._lifecycle,"PRUNE",R(r)),r._child=a._child,r._ctxVersion=a._ctxVersion,m("build")&&h("build","debug","",`prune comp=${z(r)} propsSame=${u} verSame=${s}`),r}return r._lifecycle=P(r._lifecycle,"BUILD_START",R(r)),m("build")&&h("build","debug","",`mount comp=${z(r)} propsSame=${u} verSame=${s} force=${!!i?.force}`),(async()=>{let{childCtx:a}=await Cn(r,n,l,{reuse:d??null}),c=await B(await r._render(r.props),a,d?._child,l,i);return r._child=c??null,r._ctxVersion=f,r._lifecycle=P(r._lifecycle,"BUILD_DONE",R(r)),r})()}function xn(e,n,t,o,i){let r=e,l=o??n.__registry??U(),d=xe(t,r);m("build")&&h("build","debug","",`fragment kids=${A(w(r.props?.children))}`);let u=B(r.props?.children??null,n,d?._child??d?.props?.children,l,i);return be(u)?u.then(f=>(r._child=f??null,r._lifecycle=P(r._lifecycle,"BUILD_DONE",R(r)),r)):(r._child=u??null,r._lifecycle=P(r._lifecycle,"BUILD_DONE",R(r)),r)}function De(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=xe(t,r);m("build")&&h("build","trace","",`native <${String(r.type)}> kids=${A(w(r.props?.children))}`);let u=B(r.props?.children??null,n,d?.props?.children,l,i);return be(u)?u.then(f=>(r._child=f??null,r._lifecycle=P(r._lifecycle,"BUILD_DONE",R(r)),r)):(r._child=u??null,r._lifecycle=P(r._lifecycle,"BUILD_DONE",R(r)),r)}function V(){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 vn=new Set(["svg","path","circle","rect","line","polyline","polygon","g","text","defs","use","clipPath"]);function Q(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 In[L(e)](e,n,l,o,i,r)}function En(e,n,t){return null}function Sn(e,n,t){return t.createTextNode(String(e))}function ve(e,n,t,o,i){if(e==null||typeof e=="boolean")return Q(t,e);let r=E(e,n,t,String(o),null,i);return r??Q(t,null)}function An(e,n,t,o=null,i=null,r=null){let l=e,d=t.createDocumentFragment();if(!d)return null;m("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})),f=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],c=r!=null?`${r}-${s}`:String(s),p=ve(a,n,t,s,c);p!=null&&d.appendChild(p)}return f&&d.appendChild(f),d}function Tn(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 f=w(o.props?.children);for(let s of f)s!=null&&typeof s=="object"&&!Array.isArray(s)&&(s._parentVNode=o)}return null}function kn(e,n,t,o=null,i=null,r=null){let l=e,d=l,u=t.createDocumentFragment();if(!u)return null;let f=w(l.props?.children);m("render")&&h("render","debug","",`fragment kids=${A(f)} 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 c=0;c<f.length;c++){let p=f[c],y=r!=null?`${r}-${c}`:String(c),N=ve(p,n,t,c,y);N!=null&&u.appendChild(N)}return a&&u.appendChild(a),u}function Rn(e,n,t){let o=e,i=o._lifecycle??(typeof o._render=="function"?"built":"fresh");return Pn[i](o,n,t)}var Pn={fresh:(e,n,t)=>{throw new Error(`[vdom2] component ${v(e.type)} not built (missing _render) \u2014 buildVNode must run before renderValue`)},building:(e,n,t)=>{throw new Error(`[vdom2] component ${v(e.type)} building in render \u2014 buildVNode must await before renderValue`)},disposed:(e,n,t)=>(console.warn(`[vdom2] disposed \u7EC4\u4EF6 ${v(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`),Q(t,null)),built:He,pruned:He};function He(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 $n(e,n,t,o,i){let r=e,l=r,d=r.type,u=vn.has(d)?t.createElementNS("http://www.w3.org/2000/svg",d):t.createElement(d);if(!u)return null;l.el=u,l._refNode=u,m("render")&&h("render","trace","",`native <${d}> key=${r.key??"-"} kids=${A(w(r.props?.children))}`),r.key!=null&&u.setAttribute("data-wf-key",r.key);let f=null;for(let[s,a]of Object.entries(r.props??{}))if(!(s==="children"||s==="key")){if(s==="value"&&(u instanceof HTMLSelectElement||u instanceof HTMLInputElement)){f=a;continue}q(u,s,a)}if(!("innerHTML"in(r.props??{}))){let s=w(r.props?.children);for(let a=0;a<s.length;a++){let c=s[a],p=i!=null?`${i}-${a}`:String(a),y=ve(c,n,t,a,p);if(y!=null&&(u.appendChild(y),c&&typeof c=="object"&&!Array.isArray(c)&&typeof c.type=="function")){let N=c;N._parentNode||(N._parentNode=u)}}m("render")&&h("render","trace","",`native <${d}> out=${D(u)}`)}return f!==null&&(u.value=String(f)),u}var In={hole:En,text:Sn,arr:An,portal:Tn,frag:kn,comp:Rn,native:$n};function F(e){let{parent:n,oldNode:t,oldInput:o,ctx:i}=e,r=E(e.newInput,i,i.browser??V());if(r==null)return null;if(t?.parentNode){let l=oe(o,t,n,i);return l&&l.parentNode===n?n.insertBefore(r,l):n.appendChild(r),r}return n.appendChild(r),r}function Ln(e){return oe(e.oldInput,e.oldNode,e.parent,e.ctx),null}function Mn(e){let n=e.oldNode;if(n?.nodeType===8){let t=Q(e.ctx.browser??V(),e.newInput);return t&&n.nodeValue!==t.nodeValue&&(n.nodeValue=t.nodeValue),n}return null}function ee(e){let{parent:n,oldNode:t,ctx:o}=e,i=E(e.newInput,o,o.browser??V());return i==null?null:(t?.parentNode?t.parentNode.replaceChild(i,t):t?n.insertBefore(i,t):n.appendChild(i),i)}function jn(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 On(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&&Te(r)){let u=t;return r.el=u,r._refNode=u,Fe(u,l?.props??{},r.props??{}),"innerHTML"in(r.props??{})||re(u,l?._child??l?.props?.children??null,r._child??r.props?.children??null,i),u}return F(e)}function Dn(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)?g(l,t):null,u=Ee(n,l??o,r,i,d);return t?.parentNode?t:u[0]??null}function Hn(e){let{parent:n,oldNode:t,oldInput:o,ctx:i}=e,r=e.newInput;if(!C(r)||typeof r._render!="function")throw new Error(`[vdom2] component ${v(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&&J(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=oe(l?._child??null,t,n,i);l&&(l._child=null);let c=Q(i.browser??V(),null);return s&&c?(a&&a.parentNode===n?n.insertBefore(c,a):n.appendChild(c),c):W(n,t,l?._child,null,i)}r._outputChild=u;let f=W(n,t,l?._child,u,i);return f&&(r._refNode=f),f}function Bn(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=re(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 Fn(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;re(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:Ln,portal:F,...e}}var Kn={text:G({text:jn}),hole:G({text:ee,native:ee,frag:ee,comp:ee,arr:ee,portal:ee,hole:Mn}),native:G({native:On}),frag:G({frag:Dn}),comp:G({comp:Hn}),arr:G({arr:Bn}),portal:G({portal:Fn})};function Be(e){let n=L(e.oldInput),t=L(e.newInput);return _({session:"",machine:"x2y",nodeId:null,component:null,from:n,event:"X2Y",to:t,level:"trace",ts:Date.now()}),Kn[n][t](e)}function M(e,n){if(n&&typeof e.type=="function"&&e._id){try{b(e,n)}catch(t){console.error("[weifuwu] ref cleanup error",t)}Me(n,e._id)}}function se(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 Se(e,n){if(n&&e&&typeof e=="object"&&!Array.isArray(e)){let t=g(e,n);if(t&&t.length>1)return t}return[n]}function ce(e,n){let t=w(e.props?.children);for(let o of t){if(o==null||typeof o!="object"||Array.isArray(o))continue;let i=o;Un[L(i)](i,n)}}var Un={comp:(e,n)=>{M(e,n)},frag:(e,n)=>{ce(e,n)},native:(e,n)=>{ce(e,n)},portal:(e,n)=>{ce(e,n)},arr:()=>{},text:()=>{},hole:()=>{}};function oe(e,n,t,o){return qn[L(e)](e,n,t,o)}var qn={arr:(e,n,t,o)=>{let i=g(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 ie(e,n,t,o)},frag:(e,n,t,o)=>{let i=e,l=g(i,n)??[],d=(l[l.length-1]??n)?.nextSibling??null;for(let u of l)u.parentNode&&u.parentNode.removeChild(u);return ce(i,o.registry),d&&d.parentNode===t?d:null},portal:(e,n,t,o)=>{let i=e,r=i._remoteEl;try{b(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=g(i,n);if(M(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 ie(e,n,t,o)},native:(e,n,t,o)=>{try{b(e,o.registry)}catch(i){console.error("[weifuwu] ref cleanup error",i)}return ie(e,n,t,o)},text:(e,n,t,o)=>ie(e,n,t,o),hole:(e,n,t,o)=>ie(e,n,t,o)};function ie(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 Be({parent:e,oldNode:n,oldInput:t,newInput:o,ctx:i})}var Ke={event:(e,n,t,o)=>{let{type:i,capture:r}=we(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:le,style:le,innerHTML:le,aria:le,default:le};function le(e,n,t,o){if(o==null||o===!1){e.removeAttribute(n);try{delete e[n]}catch{}}else q(e,n,o)}function Fe(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],f=t[d];if(u!==f){if(d==="value"&&(e instanceof HTMLSelectElement||e instanceof HTMLInputElement)){l={ov:u,nv:f};continue}Ke[_e(d)](e,d,u,f)}}l&&Ke.value(e,"value",l.ov,l.nv)}function Ee(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 re(e,r,l,o,i)}function re(e,n,t,o,i,r){let l=w(n),d=w(t),u=i??Array.from(e.childNodes);m("diff")&&h("diff","debug","",`patchChildren parent=${T(e)} old=${A(l)} new=${A(d)} dom=${D(e)}`);let f=d.some(p=>Array.isArray(p))||l.some(p=>Array.isArray(p)),s=f?"unkeyed":Ce(d);if(_({session:"",machine:"keys",nodeId:null,component:null,from:f?"unkeyed":Ce(d),event:"SELECT",to:s,payload:()=>({len:d.length}),level:"trace",ts:Date.now()}),te()&&l.length!==d.length)for(let p=0;p<d.length;p++){let y=d[p];y!=null&&typeof y=="object"&&!Array.isArray(y)&&C(y)&&y.key==null&&console.error(`[vdom2/audit] \u52A8\u6001\u6570\u7EC4\u4F4D\u7F6E ${p} \u7684\u7EC4\u4EF6\u7F3A\u5C11 key\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"&&(fe(d),fe(l));let c=(()=>{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=[],N=0;for(let k=0;k<l.length;k++){let x=l[k];if(Array.isArray(x)){let j=p[N]??null;y.push(j);let O=g(x,j);N+=O?.length??1;continue}if(x==null||typeof x=="boolean"||typeof x=="string"||typeof x=="number"){y.push(p[N]??null),N++;continue}let $=x;if(S($)){y.push($._remoteEl??null);continue}if(y.push($._refNode??p[N]??null),typeof $.type=="function"||K($)){let j=g($,$._refNode??p[N]??null);N+=j?.length??1}else N++}return y})();return ct[s]({parent:e,oldChildren:l,newChildren:d,oldNodes:c,ctx:o,arrEnd:a,anchorOut:r})}function de(e){return e==null||typeof e=="boolean"?"hole":Array.isArray(e)||e&&typeof e=="object"&&K(e)?"multi":"real"}function Wn(e){let{parent:n,oldC:t,oldNode:o,oldNodes:i,i:r,ctx:l,out:d,pushA:u}=e;if(Array.isArray(t)){m("diff")&&h("diff","trace","",`remove-arr-item i=${r} range=[${(g(t,i[r])??[]).map(T).join(" | ")}] before=${D(n)}`);let f=g(t,o);for(let s of f??[])s.parentNode?.removeChild(s);m("diff")&&h("diff","trace","",`remove-arr-item after=${D(n)}`);for(let s of t)s!=null&&typeof s=="object"&&!Array.isArray(s)&&typeof s.type=="function"&&M(s,l.registry)}else if(t&&typeof t=="object"&&!Array.isArray(t)){if(typeof t.type=="function")M(t,l.registry);else try{b(t,l.registry)}catch(f){console.error("[weifuwu] ref cleanup error",f)}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,f=H(u.browser??V(),t);if(o?.nodeType===8){f&&o.nodeValue!==f.nodeValue&&(o.nodeValue=f.nodeValue),l.push(o),d(o);return}if(f&&o?.parentNode)o.parentNode.replaceChild(f,o);else if(f){let s=null;for(let a=i+1;a<r.length;a++){let c=r[a];if(c&&c.parentNode===n){s=c;break}}if(!s){let a=null;for(let c=l.length-1;c>=0;c--)if(l[c]){a=l[c];break}a&&a.parentNode===n&&(s=a.nextSibling)}s&&s.parentNode===n?n.insertBefore(f,s):n.appendChild(f),l.push(f),d(f)}else l.push(f),d(f)}function Ue(e){let{parent:n,newC:t,oldNode:o,i,oldNodes:r,out:l,pushA:d,ctx:u}=e,f=E(t,u,u.browser??V(),String(i));if(f==null){l.push(null),d(null);return}if(o&&o.nodeType===8&&o.nodeValue?.includes("type=hole")){_({session:"",machine:"pos",nodeId:null,component:null,from:"hole",event:"HOLE_FILL",to:"real",payload:()=>({i,replaced:T(o)}),level:"trace",ts:Date.now()}),o.parentNode?.replaceChild(f,o),l.push(f),d(f);return}let s=null;for(let a=i+1;a<r.length;a++){let c=r[a];if(c&&c.parentNode===n){s=c;break}}if(s==null){let a=null;for(let c=l.length-1;c>=0;c--)if(l[c]){a=l[c];break}if(a&&a.parentNode===n)s=a.nextSibling;else{let c=r[r.length-1];c&&c.parentNode===n&&(s=c.nextSibling)}}s&&s.parentNode===n?n.insertBefore(f,s):n.appendChild(f),_({session:"",machine:"pos",nodeId:null,component:null,from:"hole",event:"INSERT",to:"real",payload:()=>({i,insertedBefore:s?T(s):"END",node:T(f)}),level:"trace",ts:Date.now()}),l.push(f),d(f)}function Gn(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 f=ze(n,t,i,o,d);r.push(f),l(f);return}let u=Ge(n,t,i,o,d);r.push(u),l(u)}function Xn(e){let{parent:n,oldC:t,newC:o,oldNode:i,i:r,out:l,pushA:d,ctx:u}=e,f=u.browser??V(),s=E(o,u,f,String(r));if(s==null){l.push(null),d(null);return}let a=t&&typeof t=="object"?g(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")M(t,u.registry);else try{b(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 c=s.nodeType===11?Array.from(s.childNodes):[s];l.push(...c),d(c[0]??s)}function Yn(e){let{parent:n,oldC:t,newC:o,oldNode:i,out:r,pushA:l,ctx:d}=e,u=We(n,t,i,o,d);r.push(u),l(u)}function Jn(e){let{parent:n,oldC:t,newC:o,oldNode:i,i:r,oldNodes:l,out:d,pushA:u,ctx:f}=e,s=f.browser??V(),a=g(t,i);m("diff")&&h("diff","debug","",`multi-remove i=${r} range=${a?a.map(T).join(" | "):"null"}`);for(let y of a??[])y.parentNode?.removeChild(y);for(let y of w(t?.props?.children))y!=null&&typeof y=="object"&&!Array.isArray(y)&&typeof y.type=="function"&&M(y,f.registry);let c=E(o,f,s,String(r));if(c==null){d.push(null),u(null);return}let p=l[r+1]??null;p?.parentNode?p.parentNode.insertBefore(c,p):n.appendChild(c),d.push(c),u(c)}function Zn(e){let{parent:n,oldC:t,newC:o,oldNode:i,oldNodes:r,i:l,out:d,pushA:u,ctx:f}=e,s=g(t,i),a=Ee(n,t,o,f,s);d.push(...a),u(r[l]??a[0]??null)}function Qn(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=Ye(n,i,u,v(o.type));l.push(a),d(a);return}let f=W(n,i,t,o,u);m("diff")&&h("diff","trace","",`after-patch i=${r} new=${z(o)} node=${T(f)} dom=${D(n)}`);let s=Se(o,f);l.push(...s),d(s[0]??f??null)}function We(e,n,t,o,i){let r=H(i.browser??V(),o),l=g(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 w(n?.props?.children))u!=null&&typeof u=="object"&&!Array.isArray(u)&&typeof u.type=="function"&&M(u,i.registry);return r&&d&&d.parentNode===e?e.insertBefore(r,d):r&&e.appendChild(r),r}function ze(e,n,t,o,i){let r=H(i.browser??V(),o),l=oe(n,t,e,i);return r&&l?e.insertBefore(r,l):r&&e.appendChild(r),r}function Ge(e,n,t,o,i){let r=H(i.browser??V(),o);if(n&&typeof n=="object"&&!Array.isArray(n))if(typeof n.type=="function")M(n,i.registry);else try{b(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 et={hole:{hole:zn,real:Ue,multi:Ue},real:{hole:Gn,real:Qn,multi:Xn},multi:{hole:Yn,real:Jn,multi:Zn}};function nt(e){let{parent:n,oldChildren:t,newChildren:o,oldNodes:i,ctx:r,anchorOut:l}=e,d=Math.max(t.length,o.length),u=[],f=s=>{l&&l.push(s)};for(let s=0;s<d;s++){let a=s<t.length?t[s]:null,c=s<o.length?o[s]:null;if(s>=o.length){Wn({parent:n,oldC:a,newC:c,oldNode:i[s],i:s,oldNodes:i,newChildren:o,out:u,pushA:f,ctx:r});continue}if(a!=null&&typeof a=="object"&&!Array.isArray(a)&&c!=null&&typeof c=="object"&&!Array.isArray(c)&&c===a&&J(a)){u.push(i[s]),f(i[s]);continue}let p=et[de(a)][de(c)];_({session:"",machine:"pos",nodeId:null,component:null,from:de(a),event:p.name,to:de(c),payload:()=>({i:s}),level:"trace",ts:Date.now()}),p({parent:n,oldC:a,newC:c,oldNode:i[s],i:s,oldNodes:i,newChildren:o,out:u,pushA:f,ctx:r})}return u}function qe(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 N=se(p);N!==null&&p&&typeof p=="object"&&!Array.isArray(p)&&u.set(N,{vnode:p,nodes:[i[y]??null].filter(Boolean),index:y})});let f=[],s=new Set,a=p=>{l&&l.push(p)},c=null;return o.forEach((p,y)=>{let N=se(p),k=p;if(N!==null&&u.has(N)){let x=u.get(N),$=x.nodes[0]??null;if(s.add(N),k&&typeof k=="object"&&typeof k.type=="function"&&k._lifecycle==="disposed"){let X=Ye(n,$,r,v(k.type));f.push(X),a(X),X&&(c=X);return}let j=W(n,$,x.vnode,k,r),O=Se(k,j),ye=O[0]??j,Ae=O[O.length-1]??j;if(ye&&ye.parentNode===n&&c&&ye.previousSibling!==c){m("diff")&&h("diff","debug","",`keyed-correct i=${y} k=${N} move=[${O.map(T).join(" | ")}] after=${T(c)} before=${D(n)}`);let X=c.nextSibling;for(let me of O)me&&me.parentNode===n&&n.insertBefore(me,X);m("diff")&&h("diff","debug","",`keyed-correct after=${D(n)}`)}f.push(...O),a(O[0]??j??null),Ae&&(c=Ae)}else{let x={current:c};dt[lt(p)]({parent:n,oldChildren:t,newChildren:o,oldNodes:i,ctx:r,out:f,pushA:a,arrEnd:d,c:p,i:y},x),c=x.current}}),t.forEach((p,y)=>{ot[tt(se(p),s)](n,p,y,i,r,o.length)}),f}function tt(e,n){return e===null?"unkeyed":n.has(e)?"moved":"stale-keyed"}var ot={moved:()=>{},"stale-keyed":rt,unkeyed:it};function rt(e,n,t,o,i){let r=n&&typeof n=="object"&&!Array.isArray(n)?g(n,o[t]):null;if(m("diff")&&h("diff","trace","",`keyed-delete i=${t} k=${se(n)} range=${r?.length??0} oldNode=${T(o[t])}`),n&&typeof n=="object"&&!Array.isArray(n))if(typeof n.type=="function")M(n,i.registry);else try{b(n,i.registry)}catch(l){console.error("[weifuwu] ref cleanup error",l)}Xe(r,o[t])}function it(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")M(n,i.registry);else try{b(n,i.registry)}catch(f){console.error("[weifuwu] ref cleanup error",f)}let u=n&&typeof n=="object"&&!Array.isArray(n)?g(n,l):null;Xe(u,l)}function Xe(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 lt(e){return e==null||typeof e=="boolean"?"hole":e&&typeof e=="object"&&!Array.isArray(e)&&S(e)?"portal":"real"}var dt={hole:st,portal:ut,real:at};function st(e,n){let{parent:t,oldChildren:o,oldNodes:i,ctx:r,out:l,pushA:d,c:u,i:f}=e,s=o[f]??null,a=i[f]??null,c=de(s);if(c==="hole"){let y=H(r.browser??V(),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=c==="multi"?We(t,s,a,u,r):s&&typeof s=="object"&&!Array.isArray(s)&&typeof s.type=="function"?ze(t,s,a,u,r):Ge(t,s,a,u,r);l.push(p),d(p),p&&(n.current=p)}function ut(e,n){let{parent:t,oldChildren:o,oldNodes:i,ctx:r,out:l,pushA:d,c:u,i:f}=e,s=u,a=o[f]??null,c=W(t,i[f]??null,a,s,r),p=Se(s,c);l.push(...p),d(p[0]??c??null);let y=p[p.length-1]??c;y&&(n.current=y)}function at(e,n){let{parent:t,oldNodes:o,ctx:i,out:r,pushA:l,arrEnd:d,c:u,i:f}=e,a=E(u,i,i.browser??V());if(r.push(a),l(a??null),a!=null){let c=o[f];c&&c.nodeType===8&&c.nodeValue?.includes("type=hole")?(c.parentNode?.replaceChild(a,c),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 fe(e){for(let n=0;n<e.length;n++){let t=e[n];t&&typeof t=="object"&&!Array.isArray(t)&&se(t)===null&&(t.key=`pos:${n}`)}}function Ye(e,n,t,o){te()?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??V(),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 ct={unkeyed:nt,keyed:qe,mixed:e=>(fe(e.newChildren),fe(e.oldChildren),qe(e))};function Je(e,n,t,o){let i=t,r=i.__registry??U(),l=i.browser??V();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 jo(e,n,t){return new Promise(o=>{Je(e,n,t,{onMounted:o})})}async function Oo(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 Do(e,n){let t=n.__registry??(n.__registry=U());return Promise.resolve(B(e,n,void 0,t))}async function Ho(e,n,t){let o=await e(n,t);return typeof o=="function"?o(n):o}async function Bo(e,n,t){let o=await e(n,t);return()=>typeof o=="function"?o(n):o}function pe(e,n){if(e==null||typeof e!="object")return;if(Array.isArray(e)){for(let o of e)pe(o,n);return}n(e);let t=e?.props?.children;t!=null&&pe(t,n)}function Fo(e,n){let t;return pe(e,o=>{!t&&n(o)&&(t=o)}),t}function Ko(e,n){let t=[];return pe(e,o=>{typeof o?.props?.class=="string"&&o.props.class.split(" ").includes(n)&&t.push(o)}),t}function Uo(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{Do as buildToDom,qo as createPopupMock,Uo as createTestCtx,Ko as findByClass,Fo as findVNode,Bo as mountComponent,jo as mountToDom,Oo as patchToDom,Ho as renderVNode,pe as walkVNode};
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};
@@ -13,7 +13,10 @@
13
13
  */
14
14
  import type { VNodeChild } from '../vnode.ts';
15
15
  import { type VKind } from './kind.ts';
16
- /** audit 开关(dev/测试注入;生产默认关) */
16
+ /** audit 开关(默认开——正确性优先;显式关:__WF_VDOM_AUDIT=0/生产优化时)。
17
+ * 此前默认关 → 事故发生时无运行时校验(三层一致性/挂载不变量全靠事后手动排查)。
18
+ * 默认开的代价:每次 doRenderOne/renderPath 后 O(n) 结构校验(页面树几百节点——
19
+ * 毫秒级,可接受) */
17
20
  export declare function auditEnabled(): boolean;
18
21
  /** 安装挂载不变量 audit(uiServe 初始化时调用一次——订阅事件流而非遍历 DOM) */
19
22
  export declare function installMountInvariantAudit(): void;
@@ -0,0 +1,4 @@
1
+ /** DOM 写追踪开关(__WF_DOM_TRACE——audit 开启时自动安装;独立可开) */
2
+ export declare function domTraceEnabled(): boolean;
3
+ /** 安装 DOM 写追踪(幂等——audit/uiServe 初始化时调用;返回卸载函数) */
4
+ export declare function installDomTrace(): () => void;
@@ -14,7 +14,7 @@
14
14
  */
15
15
  import { type VdomLevel, type VdomStage } from './trace.ts';
16
16
  /** 状态机名(事件来源)——含执行细节摘要通道(build/render/diff/mount——trace 包装) */
17
- export type VdomMachine = 'route' | 'lifecycle' | 'x2y' | 'keys' | 'pos' | 'render' | 'audit' | 'build' | 'mount' | 'diff';
17
+ export type VdomMachine = 'route' | 'lifecycle' | 'x2y' | 'keys' | 'pos' | 'render' | 'audit' | 'build' | 'mount' | 'diff' | 'dom';
18
18
  export declare function machineToStage(m: VdomMachine): VdomStage;
19
19
  /** 统一状态机事件(一次渲染会话的全部转换通过 session 关联) */
20
20
  export interface VdomEvent {
@@ -53,6 +53,10 @@ export declare function hasObservingSinks(): boolean;
53
53
  export declare function installEventRing(): void;
54
54
  /** 调试 API:查询最近事件(可按 machine/nodeId/event 过滤)——__vdom_events(50, { machine: 'lifecycle' }) */
55
55
  export declare function __vdom_events(n?: number, filter?: Partial<VdomEvent>): VdomEvent[];
56
+ /** 渲染请求追踪(__vdom_render_trace(n?)——页面存续期所有渲染入口统一视图:
57
+ * uiServe 首帧/导航 + 组件 ctx.ui.render()(含调用者组件名/id) + 外部系统
58
+ * 输出:`[t=ms] source(component:id) → ids / detail`——按事件顺序 */
59
+ export declare function __vdom_render_trace(n?: number): string[];
56
60
  /** 重置 ring buffer(测试隔离用) */
57
61
  export declare function __resetVdomEvents(): void;
58
62
  export declare function makeEventCollector(): {
@@ -48,3 +48,7 @@ export declare function canReuse(oldV: {
48
48
  _lifecycle?: Lifecycle;
49
49
  _child?: unknown;
50
50
  } | null | undefined): boolean;
51
+ /** 递归检查子树是否含 disposed vnode(_child 树——不含 props.children 原始 JSX)
52
+ * 导出:compToComp 并发剪枝缓存失效检测复用(build 剪枝后另一渲染会话 dispose 共享
53
+ * 旧树——childNew 树含 disposed = 旧树被当新树,禁止 diff) */
54
+ export declare function treeHasDisposed(child: unknown): boolean;
@@ -32,7 +32,9 @@ export interface MountHandle {
32
32
  close?(): void;
33
33
  }
34
34
  export interface Renderer {
35
- render(ids?: string[]): Promise<void>;
35
+ render(ids?: string[], req?: RenderRequestInfo): Promise<void>;
36
+ /** 补跑构建期被跳过的渲染请求(renderPath/渲染链落地后调用——导航期间状态更新不丢失) */
37
+ flushPending(): Promise<void>;
36
38
  }
37
39
  export interface VdomContext {
38
40
  ctx: any;
@@ -40,6 +42,17 @@ export interface VdomContext {
40
42
  renderer: Renderer;
41
43
  rootUi: any;
42
44
  }
45
+ /** 渲染请求来源(render 调用追踪——页面存续期所有渲染入口统一可追溯) */
46
+ export interface RenderRequestInfo {
47
+ /** 调用来源分类 */
48
+ source: 'component' | 'uiServe' | 'external' | 'root';
49
+ /** 调用者组件名(source=component 时) */
50
+ component: string | null;
51
+ /** 调用者组件 id(childUi 绑定的 _id) */
52
+ nodeId: string | null;
53
+ /** 附加信息(uiServe: initial/nav;external: popup-tracker/hook 名等) */
54
+ detail?: string;
55
+ }
43
56
  /** 渲染执行器(render-only 唯一渲染入口——per-id 串行链:并发触发排队补跑,
44
57
  * 同一组件渲染中再次触发 → 排队等前一个完成后补跑最新状态(合并语义)) */
45
58
  export declare function createRenderer(opts: {
@@ -15,6 +15,8 @@ import { type Registry } from './registry.ts';
15
15
  export declare function disposeComponent(vnode: VNode, registry?: Registry): void;
16
16
  import { type PropChannel } from './transform.ts';
17
17
  import { type KeyMode, type VKind } from './kind.ts';
18
+ /** 重置 audit 告警去重(测试隔离——node --test 同进程共享 module 状态) */
19
+ export declare function __resetAuditWarnings(): void;
18
20
  /**
19
21
  * 移除旧输出的全部 DOM(Fragment 展开多节点 + Portal 容器)并做组件/ref 清理。
20
22
  * @returns 移除后应插入新节点的位置(范围后兄弟;null = append 末尾)
@@ -0,0 +1,29 @@
1
+ export {};
2
+ /**
3
+ * vdom3 — vnode + stream 前端引擎(2026-08)
4
+ *
5
+ * 与 vdom2 的差异:**渲染执行 = 事件流**(vnode 树保留声明式——renderFn 输出完整树)。
6
+ *
7
+ * vdom2:状态 → renderFn → vnode 树 → diff(命令式比较)→ DOM 变更 + 旁路事件记录
8
+ * vdom3:状态 → renderFn → vnode 树 → **渲染事件流**(CREATE/INSERT/UPDATE/REMOVE)
9
+ * → 执行器消费事件 → DOM(事件流是引擎本体——DOM = fold(事件流))
10
+ *
11
+ * 核心不变量:
12
+ * 1. vnode 树保留声明式(与 vdom2 同模型——两阶段组件兼容)
13
+ * 2. 渲染即事件:节点创建/属性设置/文本更新/插入/移除都是事件(可回放/取消/断言)
14
+ * 3. DOM = fold(事件流):初始 DOM + 事件序列 = 任意时刻 DOM(时间旅行)
15
+ * 4. 更新最小化:同位置同类型(含 key)复用——仅变化发事件
16
+ * (TEXT_UPDATE/PROP_UPDATE——无整树 diff 决策噪音;异类型 → 重建事件)
17
+ *
18
+ * 事件流覆盖(location → DOM):
19
+ * ROUTE_CHANGE → COMP_MOUNT → NODE_CREATE/TEXT_CREATE → INSERT → PROP_UPDATE/
20
+ * TEXT_UPDATE → REMOVE/MOVE(更新时)→ COMP_UNMOUNT
21
+ *
22
+ * 模块:
23
+ * types.ts — VNode(native/文本/Fragment)+ V3Event + EventStream 契约
24
+ * jsx.ts — h(vnode 创建——单数组参数自动展开)
25
+ * render.ts — mount/patch:树 → 事件流 → DOM(同类型复用/异类型重建/文本属性特判)
26
+ * events.ts — 事件流(记录/回放/逆操作/断言——DOM = fold(events))
27
+ *
28
+ * 与 vdom2 并行(不兼容演进)——vdom2 资产保留,vdom3 验证「事件流即执行」范式。
29
+ */
@@ -0,0 +1,16 @@
1
+ /**
2
+ * vdom3 audit — 开发期不变量校验(防御——测试之外的第二道防线)
3
+ *
4
+ * 启用:__WF_V3_AUDIT !== '0'(默认开——与 vdom2 audit 对齐)。
5
+ * 校验点(渲染后):
6
+ * 1. 孤儿节点:DOM 中 data-v3-id 节点在 registry 有记录(patch 泄漏检测)
7
+ * 2. vnode/DOM 一致性:有 el 的 children 项在 DOM 中的顺序与 children 顺序一致
8
+ * (空洞错位——prevNode 锚修复的回归防线)
9
+ * 校验失败 → console.warn('[vdom3/audit] ...')(不中断渲染——观测性)
10
+ */
11
+ import type { VNode } from './types.ts';
12
+ /** 渲染后校验(patch 完成调用——root 为挂载容器) */
13
+ export declare function auditAfterRender(root: Element): void;
14
+ /** vnode/DOM 顺序一致性(children 有 el 的项——DOM 顺序 = children 顺序)
15
+ * 索引比较(父下 childNodes indexOf——无 compareDocumentPosition 的跨树/同节点歧义) */
16
+ export declare function auditOrder(_el: Element, v: VNode): void;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * vdom3 build — 异步组件构建(两阶段组件 → 纯 vnode 树)
3
+ *
4
+ * 与 vdom2 同模型:先 await 组件工厂 + renderFn → 构建产物(纯树)→ 同步渲染。
5
+ * 组件实例复用:同位置同类型(patch 判定)→ 工厂不重跑(内部状态保持)。
6
+ */
7
+ import type { VNode, PortalVNode } from './types.ts';
8
+ import { Fragment } from './types.ts';
9
+ export declare function runUnmountHooks(id: string): void;
10
+ export declare function isVNode(v: unknown): v is VNode;
11
+ /** 构建 vnode 树(组件展开——异步;native/text 同步递归)——**纯函数式**:
12
+ * 每层返回克隆(不就地修改入参)——update 的对照树(current)不被污染。
13
+ * oldV:旧树同位置对照——同类型组件复用 _render(工厂不重跑——内部状态保持)。 */
14
+ export declare function buildVNode(vnode: VNode, ctx: Record<string, unknown>, oldV?: VNode | null): Promise<VNode>;
15
+ export declare function isPortal(v: unknown): v is PortalVNode;
16
+ export { Fragment };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * vdom3 commands — 命令式中间件(confirm/toast——vdom2 mountCommand 的 vdom3 等价)
3
+ *
4
+ * vdom2 的 confirm()/toast()(组件库)用 mountCommand 挂载——依赖 vdom2 引擎。
5
+ * vdom3 适配:复用 Confirm/Toast 组件(vdom2 组件——hooks shim 可跑)——
6
+ * createRoot 挂载到命令式容器——resolve 时 handle.unmount 清理。
7
+ */
8
+ /** 命令式确认(vdom3——createRoot 挂载 Confirm 组件——Modal portal 退场) */
9
+ export declare function v3Confirm(): any;
10
+ /** 命令式轻提示(vdom3——createRoot 挂载 Toast 组件——自动消失) */
11
+ export declare function v3Toast(): any;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * vdom3 compat — vdom2 ↔ vdom3 组件兼容层(迁移路径)
3
+ *
4
+ * vdom2 两阶段组件 `(initProps, ctx) => async (props) => VNode` 与 vdom3 同模型——
5
+ * 唯一差异是 ctx 接口:vdom2 用 `ctx.ui.render()`(vdom2 的 ui 上下文)。
6
+ *
7
+ * compat():包一层——ctx.ui.render → v3 ctx.render(调度自身重渲染——同 tick 合并)。
8
+ * 迁移:vdom2 组件 `h(compat(V2Comp), props)` 即可在 vdom3 树运行(无需改组件代码)。
9
+ *
10
+ * 裁剪(诚实):只适配 render/onUnmount/基础 ctx——vdom2 的 hooks
11
+ * (useExternal/useMedia/usePopup 等 ctx.ui.* 依赖)不在兼容范围
12
+ * (迁移时由调用方注入或重构)。
13
+ */
14
+ import type { Component } from './types.ts';
15
+ type V2Component = (initProps: any, ctx: any) => Promise<(props: any) => Promise<any>>;
16
+ /** vdom2 组件 → vdom3 组件(ctx.ui.render 适配) */
17
+ export declare function compat(comp: V2Component): Component;
18
+ /** vdom3 组件 → vdom2 组件(反向互操作——ctx.render 从 ui.render 取) */
19
+ export declare function toV2(comp: Component): V2Component;
20
+ export {};
@@ -0,0 +1,11 @@
1
+ /**
2
+ * vdom3 events — 事件流(引擎本体——渲染全程可记录/回放/取消)
3
+ *
4
+ * 不变量:DOM = fold(事件流)——初始 DOM + 事件序列 = 任意时刻 DOM。
5
+ * 事件不可变;DOM 指令可逆(取消 = 应用逆事件)。
6
+ */
7
+ import type { EventStream } from './types.ts';
8
+ export declare function createEventStream(max?: number): EventStream;
9
+ /** 全局流(默认实例——后续 per-app 实例化) */
10
+ export declare const stream: EventStream;
11
+ export declare function nextNodeId(): string;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * vdom3 — vnode + stream 前端引擎(全新架构,2026-08)
3
+ *
4
+ * 与 vdom2 的差异:**渲染执行 = 事件流**(不是命令式 diff + 旁路记录)。
5
+ *
6
+ * vdom2:状态 → renderFn → vnode 树 → diff(命令式比较)→ DOM 变更 + 旁路事件记录
7
+ * vdom3:状态 → renderFn → vnode 树 → **渲染事件流**(CREATE/INSERT/UPDATE/REMOVE)
8
+ * → 执行器消费事件 → DOM(事件流是引擎本体——DOM = fold(事件流))
9
+ *
10
+ * 核心不变量:
11
+ * 1. **vnode 树保留声明式**(renderFn 输出完整树——与 vdom2 同模型)
12
+ * 2. **渲染即事件**:节点创建/属性设置/文本更新/插入/移除都是事件(可回放/取消/断言)
13
+ * 3. **DOM = fold(事件流)**:初始 DOM + 事件序列 = 任意时刻 DOM(时间旅行)
14
+ * 4. **更新最小化**:同位置同类型(含 key)复用——仅变化发事件(无整树 diff 决策噪音)
15
+ *
16
+ * 事件流覆盖(location → DOM):
17
+ * ROUTE_CHANGE → COMP_MOUNT → NODE_CREATE/TEXT_CREATE → INSERT → PROP_UPDATE/TEXT_UPDATE
18
+ * → REMOVE/MOVE(更新时)→ COMP_UNMOUNT
19
+ *
20
+ * 与 vdom2 并行(不兼容演进)——vdom2 资产(两阶段组件/状态机/观测体系)保留,
21
+ * vdom3 验证"事件流即执行"范式。
22
+ */
23
+ export { h, Fragment } from './jsx.ts';
24
+ export { mount, patch } from './render.ts';
25
+ export { buildVNode, isVNode } from './build.ts';
26
+ export { createRoot } from './root.ts';
27
+ export { scheduler, Scheduler } from './scheduler.ts';
28
+ export { replay, applyEvent, undo, eventsOf, hasEvent, expectEventSequence } from './replay.ts';
29
+ export { NodeRegistry } from './registry.ts';
30
+ export { createRouter, type RouteDef } from './router.ts';
31
+ export { renderToEvents, renderToEventStream, serializeEvents, deserializeEvents, eventsToHtml } from './ssr.ts';
32
+ export { recordToTest, summarizeEvents } from './record.ts';
33
+ export { createPortal } from './jsx.ts';
34
+ export { Portal } from './types.ts';
35
+ export { ensurePortalContainer } from './registry.ts';
36
+ export { createV3Ui } from './ui.ts';
37
+ export { createSync, autoSync } from './sync.ts';
38
+ export { compat, toV2 } from './compat.ts';
39
+ export { createEventStream, stream, nextNodeId } from './events.ts';
40
+ export type { VNode, VNodeChild, V3Event, EventStream, Renderer } from './types.ts';
@@ -0,0 +1,10 @@
1
+ /**
2
+ * vdom3 jsx — vnode 创建(声明式——与 vdom2 同模型:renderFn 输出完整树)
3
+ */
4
+ import type { VNode, VNodeChild } from './types.ts';
5
+ import { Fragment, Portal } from './types.ts';
6
+ export declare function h(type: string | symbol | ((initProps: any, ctx: any) => any), props?: Record<string, unknown> | null, ...children: VNodeChild[]): VNode;
7
+ /** Portal:children 渲染到远程容器(#__wf_portal > [data-wf-portal-key=key]) */
8
+ /** Portal:children 渲染到远程容器(#__wf_portal > [data-wf-portal-key=key]) */
9
+ export declare function createPortal(children: VNodeChild, portalKey?: string): VNode;
10
+ export { Fragment, Portal };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * vdom3 record — 录制转测试(事故 → 自动生成可运行测试)
3
+ *
4
+ * 闭环:渲染/交互 → 事件流(录制)→ recordToTest 生成 jsdom 测试骨架
5
+ * → 回放 + 事件序列断言(DOM = fold 验证 + 精确渲染描述)。
6
+ *
7
+ * 事故转测试:任意渲染异常 → 录制事件流 → 生成回归测试(无需手动复现)。
8
+ */
9
+ import type { V3Event } from './types.ts';
10
+ /** 事件流 → jsdom 测试代码(可写盘/执行) */
11
+ export declare function recordToTest(events: V3Event[], name?: string): string;
12
+ /** 事件流摘要(录制信息——时间/类型计数) */
13
+ export declare function summarizeEvents(events: V3Event[]): string;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * vdom3 registry — 节点注册表(id ↔ DOM 节点双向映射)
3
+ *
4
+ * 事件流指令用 id 定位(NODE_CREATE id / INSERT parent/child)——回放/取消需要
5
+ * 从 id 解析节点。native 元素用 data-v3-id 属性;文本/注释节点无属性——用 WeakMap。
6
+ * REMOVE 时保存被移除节点(undo 恢复——取消的节点快照)。
7
+ */
8
+ /** portal 容器(#__wf_portal > [data-wf-portal-key]——lazy 创建——组件库浮层基础) */
9
+ export declare function ensurePortalContainer(key: string): HTMLElement;
10
+ export declare class NodeRegistry {
11
+ private byId;
12
+ private idByNode;
13
+ /** 被移除节点(id → node——undo 恢复用) */
14
+ private removed;
15
+ /** portal 容器 id 约定(事件流 parent 用——replay 可解析) */
16
+ static PORTAL: (key: string) => string;
17
+ /** 解析父 id(portal: 前缀 → lazy 容器;否则查注册表) */
18
+ resolveParent(id: string): Node | null;
19
+ /** id → 节点(回放/取消)——含 portal 容器 */
20
+ get(id: string): Node | null;
21
+ register(id: string, node: Node): void;
22
+ /** 节点 → id(native 元素读 data-v3-id;其他查 WeakMap) */
23
+ idOf(node: Node | null): string;
24
+ /** 移除记录(REMOVE 时调用——保存节点供 undo) */
25
+ unregister(id: string, node: Node): void;
26
+ /** 恢复被移除节点(undo 的 REMOVE 逆操作) */
27
+ takeRemoved(id: string): Node | null;
28
+ /** 根节点 id(replay 目标容器映射) */
29
+ static ROOT: string;
30
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * vdom3 render — 渲染执行器:**构建后的纯树** → 事件流 → DOM
3
+ *
4
+ * 核心:**渲染即事件**——节点创建/属性设置/文本更新/插入/移除都是事件(stream.emit),
5
+ * 执行器消费事件操作 DOM。DOM = fold(事件流)。
6
+ *
7
+ * 组件 vnode(已 build):输出 _child(渲染组件输出——无重复构建);
8
+ * 卸载:COMP_UNMOUNT 事件(类型/位置变化时——由 patch 顶层判定)。
9
+ */
10
+ import type { VNode, VNodeChild, PortalVNode } from './types.ts';
11
+ import { Fragment } from './types.ts';
12
+ /** Portal 判定(symbol 恒等 + props.portalKey——兼容 vdom2 组件产出的 Portal vnode) */
13
+ export declare function isPortalNode(v: unknown): v is PortalVNode;
14
+ /** Fragment 判定(symbol 且非 Portal——vdom2/vdom3 Fragment 都认) */
15
+ export declare function isFragmentNode(v: unknown): boolean;
16
+ import { NodeRegistry } from './registry.ts';
17
+ /** 全局节点注册表(id ↔ Node——事件流指令定位) */
18
+ export declare const registry: NodeRegistry;
19
+ /** 挂载:纯树 → 事件流 → DOM */
20
+ export declare function mount(vnode: VNode, root: HTMLElement): void;
21
+ /**
22
+ * patch:旧树(纯)vs 新树(纯)→ 事件流 → DOM。
23
+ * 同位置同类型(含 key)复用——仅变化发事件;异类型 → REMOVE+CREATE+INSERT(重建事件)。
24
+ */
25
+ export declare function patch(oldV: VNode | null, newV: VNodeChild, parent: Node, anchor?: Node | null): Node | null;
26
+ export { Fragment };