weifuwu 0.75.0 → 0.77.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +48 -53
  2. package/dist/ai/types.d.ts +2 -0
  3. package/dist/components/AiChat/AiChat.d.ts +5 -1
  4. package/dist/components/ApprovalCard/ApprovalCard.d.ts +5 -2
  5. package/dist/components/CitationCard/CitationCard.d.ts +38 -0
  6. package/dist/components/Command/Command.d.ts +1 -1
  7. package/dist/components/DatePicker/DatePicker.d.ts +1 -1
  8. package/dist/components/JsonSchemaForm/JsonSchemaForm.d.ts +48 -0
  9. package/dist/components/ReasoningBlock/ReasoningBlock.d.ts +25 -0
  10. package/dist/components/Select/Select.d.ts +11 -1
  11. package/dist/components/SessionList/SessionList.d.ts +42 -0
  12. package/dist/components/Tour/Tour.d.ts +1 -1
  13. package/dist/components/TreeSelect/TreeSelect.d.ts +3 -2
  14. package/dist/components/index.d.ts +10 -2
  15. package/dist/components/index.js +14 -14
  16. package/dist/components/style.css +625 -20
  17. package/dist/index.js +1349 -1529
  18. package/dist/layout/weifuwu-layout.css +9 -0
  19. package/dist/scheduler/index.d.ts +7 -2
  20. package/dist/test/client/setup.d.ts +12 -0
  21. package/dist/ui/index.d.ts +2 -2
  22. package/dist/ui-dom/Confirm.d.ts +5 -41
  23. package/dist/ui-dom/Notification.d.ts +8 -70
  24. package/dist/ui-dom/Toast.d.ts +8 -43
  25. package/dist/ui-dom/hooks/chat.d.ts +11 -0
  26. package/dist/ui-dom/hooks/events.d.ts +30 -0
  27. package/dist/ui-dom/hooks/external.d.ts +20 -0
  28. package/dist/ui-dom/hooks/index.d.ts +30 -0
  29. package/dist/ui-dom/hooks/input.d.ts +33 -0
  30. package/dist/ui-dom/hooks/media.d.ts +17 -0
  31. package/dist/ui-dom/hooks/popup.d.ts +28 -0
  32. package/dist/ui-dom/hooks/stable.d.ts +39 -0
  33. package/dist/ui-dom/hooks/test/hooks.test.d.ts +1 -0
  34. package/dist/ui-dom/hooks/types.d.ts +77 -0
  35. package/dist/ui-dom/index.d.ts +19 -17
  36. package/dist/ui-dom/index.js +11 -11
  37. package/dist/ui-dom/jsx-runtime.js +1 -1
  38. package/dist/ui-dom/store.d.ts +24 -0
  39. package/dist/ui-dom/testing.d.ts +74 -0
  40. package/dist/ui-dom/testing.js +1 -0
  41. package/dist/ui-dom/testing.test.d.ts +1 -0
  42. package/dist/ui-dom/types.d.ts +55 -50
  43. package/dist/ui-dom/use-chat.d.ts +19 -14
  44. package/dist/ui-dom/vdom/build.d.ts +41 -0
  45. package/dist/ui-dom/vdom/diff.d.ts +33 -0
  46. package/dist/ui-dom/vdom/hydration.d.ts +17 -0
  47. package/dist/ui-dom/vdom/index.d.ts +23 -0
  48. package/dist/ui-dom/vdom/mount.d.ts +58 -0
  49. package/dist/ui-dom/vdom/registry.d.ts +27 -0
  50. package/dist/ui-dom/vdom/render.d.ts +15 -0
  51. package/dist/ui-dom/vdom/serve.d.ts +30 -0
  52. package/dist/ui-dom/vdom/ssr.d.ts +44 -0
  53. package/dist/ui-dom/vnode.d.ts +19 -31
  54. package/docs/components-map.md +18 -1
  55. package/docs/components.md +12 -7
  56. package/docs/custom-components.md +90 -60
  57. package/docs/examples.md +35 -41
  58. package/docs/frontend-middleware.md +3 -4
  59. package/docs/frontend-ui-dom.md +21 -18
  60. package/docs/frontend.md +243 -168
  61. package/docs/layout.md +2 -2
  62. package/docs/mobile.md +2 -2
  63. package/docs/realtime.md +8 -3
  64. package/package.json +5 -1
  65. package/dist/ui/ssr.d.ts +0 -35
  66. package/dist/ui-dom/diff.d.ts +0 -28
  67. package/dist/ui-dom/focus-trap.d.ts +0 -4
  68. package/dist/ui-dom/hydration.d.ts +0 -13
  69. package/dist/ui-dom/reactive.d.ts +0 -6
  70. package/dist/ui-dom/registry.d.ts +0 -27
  71. package/dist/ui-dom/render.d.ts +0 -46
  72. package/dist/ui-dom/scroll-lock.d.ts +0 -5
  73. package/dist/ui-dom/serve.d.ts +0 -28
  74. package/dist/ui-dom/ssr.d.ts +0 -57
  75. package/dist/ui-dom/ui.d.ts +0 -78
@@ -1,20 +1,20 @@
1
- function Rn(e){let n=[],t=(e||"/").replace(/:(\w+)/g,(o,r)=>(n.push(r),"([^/]+)")).replace(/\*/g,".*");return{re:new RegExp(`^${t}$`),keys:n}}var Le=class{_routes=[];_middlewares=[];_injections=[];_injected=!1;_mode;_notFound;constructor(n={}){this._mode=n.mode??"history"}get mode(){return this._mode}use(n,t){if(typeof n=="string"&&t){let o=this,r=n,c=async(i,s,u)=>{let a=s.__routePath??o.getPath(),d=null;return a===r?d="/":(r==="/"?a!=="/"&&a.startsWith("/"):a.startsWith(r+"/"))&&(d=a.slice(r.length)),d===null?u:async(m,w)=>{let C=await t._handle(d,m,w);return C===null?u(m,w):C}};return this._middlewares.push(c),this}return n.length<=1?(this._injections.push(n),this):(this._middlewares.push(n),this)}async _ensureInjected(n){if(!this._injected){this._injected=!0;for(let t of this._injections){let o=await t(n);o&&o!==n&&Object.assign(n,o)}}}get(n,t,o){return this._routes.push({path:n,handler:t,title:o?.title}),this}notFound(n){return this._notFound=n,this}getPath(){return this._getPath(void 0)}_getPath(n){let t=n?.location??(typeof window<"u"?window.location:null);return this._mode==="hash"?(t?.hash??"").replace(/^#/,"")||"/":t?.pathname??"/"}match(n){let t=null;for(let o of this._routes){let{re:r,keys:c}=Rn(o.path),i=n.match(r);if(!i)continue;let s={};for(let u=0;u<c.length;u++)s[c[u]]=decodeURIComponent(i[u+1]);t={handler:o.handler,params:s,title:o.title};break}return t||(t={handler:this._notFound??(()=>null),params:{}}),t}async _handle(n,t,o){await this._ensureInjected(o);let r=this.match(n);r.title&&typeof document<"u"&&(document.title=r.title),o.params=r.params,o.route&&(o.route.params=r.params);let i=r.handler,s=o.__routePath;o.__routePath=n;try{for(let u=this._middlewares.length-1;u>=0;u--){let a=this._middlewares[u],d=i;i=await a(t,o,d)??d}return await i(t,o)}finally{o.__routePath=s}}async execute(n,t,o){await this._ensureInjected(t);let r=this.match(o);r.title&&typeof document<"u"&&(document.title=r.title),t.params=r.params,t.route&&(t.route.params=r.params);let i=r.handler;for(let s=this._middlewares.length-1;s>=0;s--){let u=this._middlewares[s],a=i;i=await u(n,t,a)??a}return await i(n,t)}};function ie(){return{idCounter:0,idRegistry:new Map,unmountHooks:[]}}function j(e){return e?.__registry??ie()}function me(e){return`_wf_${e.idCounter++}`}function ye(e,n){return e.unmountHooks.push(n),()=>{let t=e.unmountHooks.indexOf(n);t>=0&&e.unmountHooks.splice(t,1)}}function Ve(e,n,t,o){try{e(n)}catch(r){console.error(`[weifuwu] ref ${t} error in <${o??"anonymous"}>`,r)}}function Mn(e,n){let t=e._child;if(t!=null)if(Array.isArray(t))for(let o of t)o&&typeof o=="object"&&O(o,n);else typeof t=="object"&&O(t,n)}function O(e,n){if(e==null||typeof e!="object")return;let t=e;if(t._id){if(t._customId&&n.idRegistry.delete(t._customId),n.idRegistry.delete(t._id),n.unmountHooks.length>0){let o=[...n.unmountHooks];for(let r of o)r(t._id);if(t._customId)for(let r of o)r(t._customId)}t._id=void 0,t._customId=void 0,t._render=void 0,t._parentNode=void 0,t._refNode=void 0}if(t._child!=null){if(Array.isArray(t._child))for(let o of t._child)o&&typeof o=="object"&&O(o,n);else O(t._child,n);t._child=void 0}if(t.props?.children&&typeof t.type=="string"){let o=Array.isArray(t.props.children)?t.props.children:[t.props.children];for(let r of o)r&&typeof r=="object"&&O(r,n)}typeof t.props?.ref=="function"&&Ve(t.props.ref,null,"cleanup"),t._remoteEl&&(Mn(t,n),t._remoteEl.remove(),t._remoteEl=void 0)}function W(){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,navigate:e=>{typeof window>"u"||(window.history.pushState(null,"",e),window.dispatchEvent(new PopStateEvent("popstate",{state:null})))},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 ze=W();function Xe(e,n="bottom",t=6,o=!0){switch(n){case"bottom":return{top:e.bottom+t,left:o?e.left+e.width/2:e.left};case"top":return{top:e.top-t,left:o?e.left+e.width/2:e.left};case"left":return{top:o?e.top+e.height/2:e.top,left:e.left-t};case"right":return{top:o?e.top+e.height/2:e.top,left:e.right+t}}}function ge(e,n,t=8){if(!n)return e;let o=n.getBoundingClientRect();if(o.width===0&&o.height===0)return e;let r=Number.parseFloat(n.style.top)||o.top,c=Number.parseFloat(n.style.left)||o.left,i=e.top-r,s=e.left-c,u={top:o.top+i,bottom:o.bottom+i,left:o.left+s,right:o.right+s},a=ze.viewportWidth(),d=ze.viewportHeight(),m=e.top,w=e.left;return u.bottom>d-t&&(m=Math.max(t,m-(u.bottom-(d-t)))),u.top<t&&(m=Math.max(t,m+(t-u.top))),u.right>a-t&&(w=Math.max(t,w-(u.right-(a-t)))),u.left<t&&(w=Math.max(t,w+(t-u.left))),{top:m,left:w,width:e.width}}var te=W();function Qe(e){let n=new Map,t=new Map,o=!1,r=0;function c(){r||(r=requestAnimationFrame(()=>{r=0;let d=[];for(let[m,w]of n){if(!w.isOpen())continue;let C=w.getEl();if(!C)continue;let h=C.getBoundingClientRect();if(h.width===0&&h.height===0)continue;let g=w.compute(h);Object.assign(w.pos,ge(g,w.panel?.(),w.margin)),d.push(m)}for(let[m,w]of t){let C=w.getScroller(),h=C instanceof Window?te.scrollingElement()?.scrollTop??te.scrollTop():C.scrollTop??0;h!==w.handle.y&&(w.handle.y=h,d.push(m))}d.length>0&&e(d)}))}function i(){o||(o=!0,te.addEventListener("scroll",c,{capture:!0,passive:!0}),te.addEventListener("resize",c))}function s(){o&&(te.removeEventListener("scroll",c,{capture:!0}),te.removeEventListener("resize",c),o=!1)}function u(d){for(let m of[...n.keys()])(m.startsWith(`popup:${d}:`)||m===`popup:${d}`)&&n.delete(m);t.delete(d)}function a(){s(),r&&(cancelAnimationFrame(r),r=0),n.clear(),t.clear()}return{popupTrackers:n,scrollTrackers:t,schedulePopupRecompute:c,ensurePopupListeners:i,destroyPopupListeners:s,cleanupTrackers:u,destroy:a}}var he=W(),le=0,Ze="",en="",nn="",tn="",ve=0;function on(){return typeof window<"u"&&typeof document<"u"}function rn(){if(le++,le>1||!on())return;ve=he.scrollTop();let e=he.bodyElement();Ze=e.style.overflow,en=e.style.position,nn=e.style.top,tn=e.style.width,e.style.overflow="hidden",(/iPhone|iPad|iPod/.test(navigator.platform)||/Mac/.test(navigator.platform)&&"ontouchend"in document)&&(e.style.position="fixed",e.style.top=`-${ve}px`,e.style.width="100%")}function sn(){if(le===0||(le--,le>0)||!on())return;let e=he.bodyElement();e.style.overflow=Ze,e.style.position=en,e.style.top=nn,e.style.width=tn,ve>0&&he.scrollTo(ve)}var Ln='a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])',Ie=W();function Ae(e){let n=e.querySelectorAll(Ln);if(n.length===0)return()=>{};let t=n[0],o=n[n.length-1],r=i=>{i.key==="Tab"&&(i.shiftKey&&Ie.activeElement()===t?(i.preventDefault(),o.focus()):!i.shiftKey&&Ie.activeElement()===o&&(i.preventDefault(),t.focus()))},c=Ie.activeElement();return queueMicrotask(()=>{t.focus()}),e.addEventListener("keydown",r),()=>{e.removeEventListener("keydown",r),c?.focus()}}var we=null;function q(){return we!==null||(we=typeof process<"u"&&process.env?.UI_DEBUG==="1"||globalThis.__UI_DEBUG===!0||typeof localStorage<"u"&&localStorage.getItem("__UI_DEBUG")==="1"),we}var Ue=0;function an(){return++Ue}function be(){return--Ue}var ln=new Map;function D(e,n,t){if(!q())return;let o=(ln.get(e)??0)+1;ln.set(e,o);let r=10,c=t?.throttle??100;if(o>r&&o%c!==0)return;let i=t?.depth!==void 0?t.depth:Ue,s=" ".repeat(Math.min(i,30));console.log(`[ui-debug] ${s}${e}#${o} ${n}`)}function Q(e){let n=new Map,t=(s,u)=>{let a=(n.get(s)??0)+1;n.set(s,a),(a<=5||a%100===0)&&D(u,s+" count="+a,{throttle:100})},o=new WeakMap,r=new Set,c=s=>{if(s===null||typeof s!="object")return s;if(s instanceof Set||s instanceof Map){if(o.has(s))return o.get(s);let a=s instanceof Set?new Set(["add","delete","clear"]):new Set(["set","delete","clear"]),d=new Proxy(s,{get(m,w){let C=Reflect.get(m,w);return typeof C=="function"?a.has(String(w))?(...h)=>{let g=C.apply(m,h);e();for(let v of r)v();return g}:C.bind(m):C},set(m,w,C){Reflect.set(m,w,C),t(String(w),"set"),e();for(let h of r)h();return!0}});return o.set(s,d),d}if(s instanceof Date||s instanceof RegExp)return s;if(o.has(s))return o.get(s);let u=new Proxy(s,{set(a,d,m){if(Reflect.get(a,d)===m)return!0;Reflect.set(a,d,m),e();for(let C of r)C();return!0},get(a,d){let m=Reflect.get(a,d);return typeof m=="object"&&m!==null?c(m):m},deleteProperty(a,d){if(Reflect.has(a,d)){Reflect.deleteProperty(a,d),e();for(let m of r)m()}return!0}});return o.set(s,u),u},i=c({});return Object.defineProperty(i,"__watch",{value:s=>(r.add(s),()=>{r.delete(s)}),writable:!1,enumerable:!1}),i}function un(e,n,t){let o=new AbortController,r=t?.signal;r&&(r.aborted?o.abort():r.addEventListener("abort",()=>o.abort(),{once:!0}));let c=t?.traceId??Hn(),i=t?.record!==!1,s=[],u=(async()=>{let a;try{a=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json","X-Trace-Id":c,Accept:"text/event-stream",...t?.headers},body:JSON.stringify(n),signal:o.signal})}catch(d){if(o.signal.aborted)return;t?.onError?.({code:"provider_error",message:d instanceof Error?d.message:String(d)});return}if(!a.ok){t?.onError?.({code:Un(a.status),message:`HTTP ${a.status} ${a.statusText}`});return}try{for await(let{name:d,data:m}of In(a.body)){if(o.signal.aborted)return;An(s,{name:d,data:m},i),Vn(d,m,t??{})}}catch(d){if(o.signal.aborted)return;t?.onError?.({code:"provider_error",message:d instanceof Error?d.message:String(d)})}})();return{abort:()=>o.abort(),done:u,traceId:c,events:s}}function Vn(e,n,t){switch(e){case"wf:token":return t.onToken?.(n.text);case"wf:tool_call":return t.onToolCall?.(n);case"wf:tool_result":return t.onToolResult?.(n);case"wf:tool_progress":return t.onToolProgress?.(n);case"wf:step":return t.onStep?.(n);case"wf:approval_request":return t.onApproval?.(n);case"wf:usage":return t.onUsage?.(n);case"wf:done":return t.onDone?.(n);case"wf:error":return t.onError?.(n);default:return t.onEvent?.(e,n)}}async function*In(e){let n=e.getReader(),t=new TextDecoder,o="";try{for(;;){let{done:r,value:c}=await n.read();if(r)break;o+=t.decode(c,{stream:!0});let i=o.split(`
1
+ function yn(e){let n=[],t=(e||"/").replace(/:(\w+)/g,(r,o)=>(n.push(o),"([^/]+)")).replace(/\*/g,".*");return{re:new RegExp(`^${t}$`),keys:n}}var be=class{_routes=[];_middlewares=[];_injections=[];_injected=!1;_mode;_notFound;constructor(n={}){this._mode=n.mode??"history"}get mode(){return this._mode}use(n,t){if(typeof n=="string"&&t){let r=this,o=n,s=async(i,l,u)=>{let d=l.__routePath??r.getPath(),a=null;return d===o?a="/":(o==="/"?d!=="/"&&d.startsWith("/"):d.startsWith(o+"/"))&&(a=d.slice(o.length)),a===null?u:async(c,p)=>{let w=await t._handle(a,c,p);return w===null?u(c,p):w}};return this._middlewares.push(s),this}return n.length<=1?(this._injections.push(n),this):(this._middlewares.push(n),this)}async _ensureInjected(n){if(!this._injected){this._injected=!0;for(let t of this._injections){let r=await t(n);r&&r!==n&&Object.assign(n,r)}}}get(n,t,r){return this._routes.push({path:n,handler:t,title:r?.title}),this}notFound(n){return this._notFound=n,this}getPath(){return this._getPath(void 0)}_getPath(n){let t=n?.location??(typeof window<"u"?window.location:null);return this._mode==="hash"?(t?.hash??"").replace(/^#/,"")||"/":t?.pathname??"/"}match(n){let t=null;for(let r of this._routes){let{re:o,keys:s}=yn(r.path),i=n.match(o);if(!i)continue;let l={};for(let u=0;u<s.length;u++)l[s[u]]=decodeURIComponent(i[u+1]);t={handler:r.handler,params:l,title:r.title};break}return t||(t={handler:this._notFound??(()=>null),params:{}}),t}async _handle(n,t,r){await this._ensureInjected(r);let o=this.match(n);o.title&&typeof document<"u"&&(document.title=o.title),r.params=o.params,r.route&&(r.route.params=o.params);let i=o.handler,l=r.__routePath;r.__routePath=n;try{for(let u=this._middlewares.length-1;u>=0;u--){let d=this._middlewares[u],a=i;i=await d(t,r,a)??a}return await i(t,r)}finally{r.__routePath=l}}async execute(n,t,r){await this._ensureInjected(t);let o=this.match(r);o.title&&typeof document<"u"&&(document.title=o.title),t.params=o.params,t.route&&(t.route.params=o.params);let i=o.handler;for(let l=this._middlewares.length-1;l>=0;l--){let u=this._middlewares[l],d=i;i=await u(n,t,d)??d}return await i(n,t)}};var L=Symbol("Fragment"),H=Symbol("Portal");function ve(e,n,t){return{type:e,props:Ge(n),key:t??void 0}}var gn=ve;function hn(e,n,t){return ve(e,n,t)}function j(e,n,...t){let r=Ge(n??{});return t.length>0&&(r.children=t.length===1?t[0]:t),{type:e,props:r,key:n?.key??void 0}}function Ge(e){if(!e)return{};let n={};for(let t of Object.keys(e))t!=="key"&&(n[t]=e[t]);return n}function F(e){if(e==null||typeof e=="boolean")return[];if(Array.isArray(e)){let n=!1;for(let o=0;o<e.length;o++)if(Array.isArray(e[o])){n=!0;break}if(!n)return e;let t=[],r=[...e].reverse();for(;r.length>0;){let o=r.pop();if(Array.isArray(o))for(let s=o.length-1;s>=0;s--)r.push(o[s]);else t.push(o)}return t}return[e]}function te(e,n){return{type:H,props:{children:e,portalKey:n},key:n??void 0,_placement:"remote"}}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,r=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[r](e,n)}catch{return new t.Event(e,n)}},dispatchEvent:(e,n)=>typeof e<"u"?e.dispatchEvent(n):!1,navigate:e=>{typeof window>"u"||(window.history.pushState(null,"",e),window.dispatchEvent(new PopStateEvent("popstate",{state:null})))},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 r=document.execCommand("copy");return document.body.removeChild(t),r}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{}}}}function wn(e,n,t=400){let r=!1,o=()=>{r||(r=!0,e.removeEventListener("animationend",o),clearTimeout(s),n())};e.addEventListener("animationend",o);let s=setTimeout(o,t)}function B(e,n){return Object.assign(Object.create(e),n)}function bn(e){let n={baseURL:e?.baseURL??"",headers:{"Content-Type":"application/json",...e?.headers}},t=e?.onRequest,r=e?.onResponse,o=e?.timeout??0;async function s(i,l,u,d){let a=n.baseURL+l,c={method:i,headers:{...n.headers,...d?.headers}},p=e?.token?.();p&&!c.headers.Authorization&&(c.headers.Authorization=`Bearer ${p}`);let w=o>0,b=!!d?.signal,m=null,g=null;(w||b)&&(m=new AbortController,c.signal=m.signal,w&&(g=setTimeout(()=>m.abort(new Error("Request timed out")),o)),b&&d.signal.addEventListener("abort",()=>m.abort())),u!==void 0&&i!=="GET"&&i!=="HEAD"&&(c.body=JSON.stringify(u));let y={url:a,init:c};t&&(y=t(y));try{let f=await fetch(y.url,y.init);if(r)return r(f);if(!f.ok){let P=await f.text().catch(()=>"");throw new Ce(f.status,P||f.statusText)}let h=f.headers.get("content-length");if(f.status===204||h==="0")return;let x=(f.headers.get("content-type")||"").toLowerCase();return x.includes("application/json")||x.includes("json")?f.json():f.text()}finally{g&&clearTimeout(g)}}return i=>B(i,{api:{get:(u,d)=>s("GET",u,void 0,d),post:(u,d,a)=>s("POST",u,d,a),put:(u,d,a)=>s("PUT",u,d,a),patch:(u,d,a)=>s("PATCH",u,d,a),delete:(u,d)=>s("DELETE",u,void 0,d)}})}var Ce=class extends Error{status;body;constructor(n,t){super(`API Error ${n}: ${t}`),this.name="ApiError",this.status=n,this.body=t}};function vn(e){try{let n=e.split(".");if(n.length!==3)return null;let t=n[1].replace(/-/g,"+").replace(/_/g,"/");return JSON.parse(atob(t))}catch{return null}}function Cn(e){let n=vn(e);return n?.exp?n.exp*1e3-3e4<Date.now():!0}function xn(e){let n=e?.storage??localStorage,t=e?.tokenKey??"weifuwu_token",r=e?.userKey??"weifuwu_user",o=e?.refreshTokenKey??"weifuwu_refresh",s=e?.refreshEndpoint??"/api/auth/refresh";return i=>{let l=n.getItem(t),u=n.getItem(r),d={token:l,user:u?JSON.parse(u):null,get isLoggedIn(){return this.token!==null},login(a,c,p){d.token=a,d.user=c,n.setItem(t,a),n.setItem(r,JSON.stringify(c)),p&&n.setItem(o,p)},logout(){d.token=null,d.user=null,n.removeItem(t),n.removeItem(r),n.removeItem(o)},setUser(a){d.user=a,n.setItem(r,JSON.stringify(a))},async refresh(){let a=n.getItem(o);if(!a)return!1;try{let c=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:a})});if(!c.ok)return d.logout(),!1;let p=await c.json();return d.token=p.token,n.setItem(t,p.token),p.refreshToken&&n.setItem(o,p.refreshToken),!0}catch{return!1}}};return l&&Cn(l)&&d.refresh().catch(()=>{}),B(i,{auth:d})}}function En(e={}){let n=e.url??"/ws",t=e.reconnectInterval??3e3,r=e.maxReconnect??10,o=e.pingInterval??3e4,s=e.pingTimeout??1e4;return i=>{let l=new Set,u=null,d=0,a=null,c=null,p=null,w=!1,b={isConnected:!1,onMessage:h=>(l.add(h),()=>{l.delete(h)}),send:h=>{u?.readyState===WebSocket.OPEN&&u.send(JSON.stringify(h))},_connect:m,close:()=>{w=!0,f(),u?.close(),u=null,b.isConnected=!1}};async function m(){if(!w)try{u=new WebSocket(n),u.onopen=()=>{b.isConnected=!0,d=0,g()},u.onmessage=h=>{try{let x=JSON.parse(h.data);for(let P of l)P(x)}catch{}y()},u.onclose=()=>{b.isConnected=!1,f(),!w&&d<r&&(d++,a=setTimeout(m,t*Math.min(d,5)))},u.onerror=()=>{u?.close()}}catch{w||(a=setTimeout(m,t))}}function g(){o<=0||(c=setInterval(()=>{u?.readyState===WebSocket.OPEN&&u.send(JSON.stringify({type:"ping"})),p=setTimeout(()=>{u?.close()},s)},o))}function y(){clearTimeout(p)}function f(){clearInterval(c),clearTimeout(p),clearTimeout(a)}return m(),B(i,{ws:b})}}function Tn(e,n){if(e===n)return!0;let t=Object.keys(e),r=Object.keys(n);if(t.length!==r.length)return!1;for(let o of t)if(e[o]!==n[o])return!1;return!0}async function Ye(e,n,t,r){e._id||(r?.reuse?._id?e._id=r.reuse._id:e._id=t.nextId(),t.idRegistry.set(e._id,e)),r?.reuse&&(r.reuse._parentNode&&(e._parentNode=r.reuse._parentNode),r.reuse._refNode&&(e._refNode=r.reuse._refNode),r.reuse._ctxVersion!=null&&(e._ctxVersion=r.reuse._ctxVersion));let o=Object.create(n);o.ui=Object.create(n.ui);let s=o.ui;if(s._selfId=e._id,s._selfVNode=e,s.render=function(i){return i==null&&e._id?n.ui.render([e._id]):n.ui.render(i)},typeof e._render!="function"&&typeof r?.reuse?._render=="function"&&(e._render=r.reuse._render),typeof e._render!="function"){n.ui?.setMounting?.(!0);let i;try{i=await e.type(e.props??{},o)}finally{n.ui?.endMounting?.()}if(typeof i!="function")throw new Error(`Component ${e.type.name||"anonymous"} must return a render function. Use (init_props, ctx) => (props) => VNode pattern.`);e._render=i}return{renderFn:e._render,childCtx:o}}function xe(e){return!!e&&typeof e.then=="function"}function M(e,n,t,r,o){if(e==null||typeof e=="boolean"||typeof e=="string"||typeof e=="number")return e;if(Array.isArray(e)){let u=Array.isArray(t)?t:[],d=e.map((c,p)=>M(c,n,u[p],r,o)),a=!1;for(let c=0;c<d.length;c++)if(xe(d[c])){a=!0;break}return a?Promise.all(d).then(()=>e):e}let s=e,i=r??n.__registry,l=t!=null&&typeof t=="object"&&!Array.isArray(t)&&t.type===s.type?t:null;if(typeof s.type=="function"){s._id||(s._id=l?._id??i.nextId(),i.idRegistry.set(s._id,s)),l&&(l._parentNode&&(s._parentNode=l._parentNode),l._refNode&&(s._refNode=l._refNode),l._ctxVersion!=null&&(s._ctxVersion=l._ctxVersion),typeof l._render=="function"&&(s._render=l._render));let u=Tn(l?.props??{},s.props??{}),d=n?.ui?._ctxVersion??0,a=(l?._ctxVersion??-1)===d;return!o?.force&&u&&a&&l?._child!=null?(s._child=l._child,s._ctxVersion=l._ctxVersion,s):(async()=>{let{childCtx:c}=await Ye(s,n,i,{reuse:l??void 0}),p=await M(await s._render(s.props),c,l?._child,i);return s._child=p??null,s._ctxVersion=d,s})()}if(s.type===L){let u=M(s.props?.children??null,n,l?._child??l?.props?.children,i);return xe(u)?u.then(d=>(s._child=d??null,s)):(s._child=u??null,s)}if(typeof s.type=="string"||typeof s.type=="symbol"){let u=M(s.props?.children??null,n,l?.props?.children,i);return xe(u)?u.then(d=>(s._child=d??null,s)):(s._child=u??null,s)}return s}var Ee=new Set(["svg","path","circle","rect","line","polyline","polygon","g","text","defs","use","clipPath"]),re=/^on[A-Z]/,Nn=new Set(["zIndex","opacity","lineHeight","fontWeight","fontSizeAdjust","flex","flexGrow","flexShrink","order","zoom","aspectRatio","gridRow","gridColumn","scale","rotate","animationIterationCount","columnCount","fillOpacity","strokeOpacity","stopOpacity","floodOpacity"]);function Y(e,n,t){if(t==null||t===!1)return;let r=e.ownerDocument?.defaultView;if(n==="class"||n==="className"){if(typeof t=="object")for(let[o,s]of Object.entries(t))s&&e.classList.add(o);else e.setAttribute("class",String(t));return}if(n==="style"){if(typeof t=="string")e.setAttribute("style",t);else{let o=e.style;for(let[s,i]of Object.entries(t))i==null?o[s]="":s.startsWith("--")?o.setProperty(s,String(i)):typeof i=="number"&&!Nn.has(s)?o[s]=`${i}px`:o[s]=String(i)}return}if(n==="ref"){if(typeof t=="function")try{t(e)}catch(o){console.error("[weifuwu] ref error",o)}return}if(re.test(n)){let o=n.slice(2).toLowerCase();if(typeof t!="function"){console.warn(`[weifuwu] event prop ${n} expects a function, got ${typeof t} \u2014 ignored`);return}e.addEventListener(o,t);return}if(n==="value"){e.value=t;return}if(n==="indeterminate"){e.indeterminate=!!t;return}if(n==="innerHTML"){e.innerHTML=String(t??"");return}if(n==="draggable"||n==="contenteditable"||n==="spellcheck"){e.setAttribute(n,t?"true":"false");return}if(n.startsWith("aria-")&&typeof t=="boolean"){e.setAttribute(n,t?"true":"false");return}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))}}function S(e,n,t){let r=n?.browser??t;if(!r)throw new Error("[vdom] renderValue requires browser env (ctx.browser)");if(e==null||typeof e=="boolean")return null;if(typeof e=="string"||typeof e=="number")return r.createTextNode(String(e));if(Array.isArray(e)){let u=r.createDocumentFragment();if(!u)return null;for(let d of e){let a=S(d,n,r);a!=null&&u.appendChild(a)}return u}let o=e;if(o.type===H){let u=r.bodyElement();if(!u)return null;let d=u.querySelector("#__wf_portal");d||(d=r.createElement("div"),d&&(d.id="__wf_portal",u.appendChild(d)));let a=r.createElement("div");if(a){a.setAttribute("data-portal",String(o.props?.portalKey??"wf"));let c=S(o.props?.children??null,n,r);c!=null&&a.appendChild(c),d&&d.appendChild(a),o._remoteEl=a}return null}if(o.type===L){let u=r.createDocumentFragment();if(!u)return null;for(let d of F(o.props?.children)){let a=S(d,n,r);a!=null&&u.appendChild(a)}return o._childNodes=Array.from(u.childNodes),u}if(typeof o.type=="function"){if(typeof o._render!="function")throw new Error(`[vdom] component ${o.type.name||"anonymous"} not built (missing _render) \u2014 buildVNode must run before renderValue`);if(o._child===void 0)throw new Error(`[vdom] component ${o.type.name||"anonymous"} not built (missing _child) \u2014 buildVNode must run before renderValue`);let u=o._child;if(u==null)return o._child=null,null;let d=(Array.isArray(u)||typeof u=="object"&&typeof u.type=="function",u);o._child=d,typeof d=="object"&&!Array.isArray(d)&&(d._parentVNode=o);let a=S(d,n,r);return a&&(o._refNode=a),a}let s=o.type,i=Ee.has(s)?r.createElementNS("http://www.w3.org/2000/svg",s):r.createElement(s);if(!i)return null;o.el=i;let l;for(let[u,d]of Object.entries(o.props??{}))if(!(u==="children"||u==="key")){if(u==="value"&&i instanceof HTMLSelectElement){l=d;continue}Y(i,u,d)}if(!("innerHTML"in(o.props??{})))for(let u of F(o.props?.children)){let d=S(u,n,r);if(d!=null&&(i.appendChild(d),u&&typeof u=="object"&&!Array.isArray(u)&&typeof u.type=="function")){let a=u;a._parentNode||(a._parentNode=i,a._refNode=d)}}return l!==void 0&&(i.value=String(l)),i}var Pn=0;function Te(){return{idRegistry:new Map,unmountHooks:[],nextId:()=>`_wf_${Pn++}`}}function Ne(e,n){return e.unmountHooks.push(n),()=>{let t=e.unmountHooks.indexOf(n);t>=0&&e.unmountHooks.splice(t,1)}}function oe(e,n){for(let t of[...e.unmountHooks])t(n);e.idRegistry.delete(n),e.idRegistry.delete(`custom:${n}`)}function Vn(e,n,t,r){try{e(n)}catch(o){console.error(`[weifuwu] ref ${t} error in <${r??"anonymous"}>`,o)}}function R(e,n){if(e==null||typeof e!="object")return;let t=e;if(t._id){if(t._customId&&n.idRegistry.delete(t._customId),n.idRegistry.delete(t._id),n.unmountHooks.length>0){let r=[...n.unmountHooks];for(let o of r)o(t._id);if(t._customId)for(let o of r)o(t._customId)}t._id=void 0,t._customId=void 0,t._render=void 0,t._parentNode=void 0,t._refNode=void 0}if(t._child!=null){if(Array.isArray(t._child))for(let r of t._child)r&&typeof r=="object"&&R(r,n);else R(t._child,n);t._child=void 0}if(t.props?.children&&typeof t.type=="string"){let r=Array.isArray(t.props.children)?t.props.children:[t.props.children];for(let o of r)o&&typeof o=="object"&&R(o,n)}if(typeof t.props?.ref=="function"&&Vn(t.props.ref,null,"cleanup"),t._remoteEl){let r=t._child;if(r!=null)if(Array.isArray(r))for(let o of r)o&&typeof o=="object"&&R(o,n);else typeof r=="object"&&R(r,n);t._remoteEl.remove(),t._remoteEl=void 0}}function ie(e,n){if(n&&typeof e.type=="function"&&e._id){try{R(e,n)}catch(t){console.error("[weifuwu] ref cleanup error",t)}oe(n,e._id)}}function X(e){if(e==null||typeof e!="object"||Array.isArray(e))return;let n=e;return n._placement==="remote"?n.props?.portalKey:n.key}function Pe(e,n){if(n&&e&&typeof e=="object"&&!Array.isArray(e)&&e.type===L){let t=e._childNodes;if(t&&t.length)return t}return[n]}function O(e,n,t,r,o){if(typeof r=="string"||typeof r=="number"){if(typeof t=="string"||typeof t=="number"){if(String(t)!==String(r)){if(n&&n.nodeType===3)return n.nodeValue=String(r),n;let c=e.ownerDocument.createTextNode(String(r));return n?.parentNode?n.parentNode.replaceChild(c,n):e.appendChild(c),c}return n}let a=e.ownerDocument.createTextNode(String(r));return n?.parentNode?n.parentNode.replaceChild(a,n):e.appendChild(a),a}if(r==null||typeof r=="boolean"){if(t&&typeof t=="object"&&!Array.isArray(t)&&t.type===H){let a=t._remoteEl;try{R(t.props?.children,o.registry)}catch(c){console.error("[weifuwu] portal ref cleanup error",c)}return a?.parentNode?.removeChild(a),null}if(t&&typeof t=="object"&&!Array.isArray(t))if(typeof t.type=="function")ie(t,o.registry);else try{R(t,o.registry)}catch(a){console.error("[weifuwu] ref cleanup error",a)}return n?.parentNode&&n.parentNode.removeChild(n),null}if(Array.isArray(r)){if(t===r&&n?.parentNode)return n;let a=e.ownerDocument.createDocumentFragment(),c=se(e,t,r,o,n?[n]:void 0);for(let p of c)p&&a.appendChild(p);return n?.parentNode?a.contains(n)?e.appendChild(a):n.parentNode.replaceChild(a,n):e.appendChild(a),a}let s=r;if(s.type===H){let a=t&&typeof t=="object"&&!Array.isArray(t)?t:null;if(a?.type===H){let c=a._remoteEl;if(c){let p=a.props?.children??null,w=s.props?.children??null;se(c,p,w,o)}return s._remoteEl=a._remoteEl,null}return S(s,o,o.browser??_()),null}if(s.type===L){let a=t&&typeof t=="object"&&!Array.isArray(t)?t:null,c=a?._childNodes,p=se(e,a?.props?.children??t,s.props?.children??null,o,c);return s._childNodes=p.filter(Boolean),n?.parentNode&&n.nodeType===8&&n.parentNode.removeChild(n),n&&n.nodeType===1?n:p[0]??null}if(typeof s.type=="function"){if(typeof s._render!="function")throw new Error(`[vdom] component ${s.type.name||"anonymous"} not built in diff \u2014 buildVNode must run before patchValue`);let a=t&&typeof t=="object"&&!Array.isArray(t)?t:null,c=a?.type===s.type;if(!o.force&&a&&c&&a._child!==void 0&&s._child===a._child)return n;a?.type===s.type&&a._id&&(s._id=a._id,o.registry.idRegistry.set(s._id,s)),s._parentNode=e,n&&(s._refNode=n);let p;if(s._child===void 0)throw new Error(`[vdom] component ${s.type.name||"anonymous"} not built (missing _child) \u2014 buildVNode must run before patchValue`);p=s._child;let w=O(e,n,a?._child,p,o);return w&&(s._refNode=w),w}let i=t&&typeof t=="object"&&!Array.isArray(t)?t:null,l=i?.type??null,u=s.type;if(n&&n.nodeType===1&&l===u){let a=n;return s.el=a,_n(a,i?.props??{},s.props??{}),se(a,i?.props?.children??null,s.props?.children??null,o),a}let d=S(s,o,o.browser??_());if(d==null)return null;if(n?.parentNode)if(t!=null&&typeof t!="boolean"){if(typeof t=="object"&&!Array.isArray(t))try{R(t,o.registry)}catch(a){console.error("[weifuwu] ref cleanup error",a)}n.parentNode.replaceChild(d,n)}else n.parentNode.insertBefore(d,n);else e.appendChild(d);return d}function _n(e,n,t){let r=Object.keys(n),o=Object.keys(t);if(r.length===o.length){let i=!0;for(let l=0;l<r.length;l++)if(r[l]!==o[l]||n[r[l]]!==t[r[l]]){i=!1;break}if(i)return}let s=new Set([...r,...o]);for(let i of s){if(i==="children"||i==="key")continue;let l=n[i],u=t[i];if(l!==u){if(re.test(i)){typeof l=="function"&&e.removeEventListener(i.slice(2).toLowerCase(),l),u!=null&&u!==!1&&(typeof u!="function"?console.warn(`[weifuwu] event prop ${i} expects a function, got ${typeof u} \u2014 ignored`):e.addEventListener(i.slice(2).toLowerCase(),u));continue}if(u==null||u===!1){if(i==="class"||i==="className")e.removeAttribute("class");else if(re.test(i))e.removeEventListener(i.slice(2).toLowerCase(),l);else if(i==="ref"){if(typeof l=="function")try{l(null)}catch(d){console.error("[weifuwu] ref cleanup error",d)}}else if(i==="value")e.value="";else if(i==="indeterminate")e.indeterminate=!1;else{e.removeAttribute(i);try{delete e[i]}catch{}}continue}Y(e,i,u)}}}function se(e,n,t,r,o){let s=F(n),i=F(t),l=o??Array.from(e.childNodes);if(i.some(m=>{if(m==null||typeof m!="object"||Array.isArray(m))return!1;let g=m;return g._placement!=="remote"&&g.key!==void 0})){for(let m=0;m<i.length;m++){let g=i[m];g&&typeof g=="object"&&!Array.isArray(g)&&X(g)===void 0&&(g.key=`pos:${m}`)}for(let m=0;m<s.length;m++){let g=s[m];g&&typeof g=="object"&&!Array.isArray(g)&&X(g)===void 0&&(g.key=`pos:${m}`)}}let d=s.map((m,g)=>{if(m==null||typeof m!="object"||Array.isArray(m))return l[g]??null;let y=m;return y._placement==="remote"?y._remoteEl??null:y.type===L?y._childNodes?.[0]??null:y._refNode??y.el??null});if(!i.some(m=>{if(m==null||typeof m!="object"||Array.isArray(m))return!1;let g=m;return g._placement!=="remote"&&g.key!==void 0})){let m=Math.max(s.length,i.length),g=[];for(let y=0;y<m;y++){let f=y<s.length?s[y]:null,h=y<i.length?i[y]:null;if(h==null||typeof h=="boolean"){if(f&&typeof f=="object"&&!Array.isArray(f))if(typeof f.type=="function")ie(f,r.registry);else try{R(f,r.registry)}catch(C){console.error("[weifuwu] ref cleanup error",C)}let P=d[y];P?.parentNode&&P.parentNode.removeChild(P),g.push(null);continue}if(f!=null&&typeof f=="object"&&!Array.isArray(f)&&h!=null&&typeof h=="object"&&!Array.isArray(h)&&h===f){g.push(d[y]);continue}if(f==null||typeof f=="boolean"){let P=S(h,r,r.browser??_());if(P==null){g.push(null);continue}let C=null;for(let T=y+1;T<d.length;T++){let E=d[T];if(E&&E.parentNode===e){C=E;break}}if(!C){let T=null;for(let E=g.length-1;E>=0;E--)if(g[E]){T=g[E];break}if(T&&T.parentNode===e&&(C=T.nextSibling),!C){let E=d[d.length-1];E&&E.parentNode===e&&(C=E.nextSibling)}}C&&C.parentNode===e?e.insertBefore(P,C):e.appendChild(P),g.push(P);continue}let x=O(e,d[y],f,h,r);g.push(...Pe(h,x))}return g}let c=new Map;s.forEach((m,g)=>{let y=X(m);y!==void 0&&m&&typeof m=="object"&&!Array.isArray(m)&&c.set(y,{vnode:m,nodes:[d[g]??null].filter(Boolean),index:g})});let p=[],w=new Set,b=null;return i.forEach((m,g)=>{let y=X(m),f=m;if(y!==void 0&&c.has(y)){let h=c.get(y),x=h.nodes[0]??null;w.add(y);let P=O(e,x,h.vnode,f,r),C=Pe(f,P),T=C[C.length-1]??P;T&&T.parentNode===e&&b&&T.previousSibling!==b&&e.insertBefore(T,b.nextSibling),p.push(...C),T&&(b=T)}else if(f?._placement==="remote"){let h=s[g]??null,x=O(e,d[g]??null,h,f,r),P=Pe(f,x);p.push(...P);let C=P[P.length-1]??x;C&&(b=C)}else{let h=S(f,r,r.browser??_());p.push(h),h!=null&&(b?e.insertBefore(h,b.nextSibling):e.insertBefore(h,e.firstChild),b=h)}}),s.forEach((m,g)=>{let y=X(m),f=m&&typeof m=="object"&&!Array.isArray(m)&&typeof m.type=="function";if(y!==void 0&&!w.has(y)){if(m&&typeof m=="object"&&!Array.isArray(m))if(f)ie(m,r.registry);else try{R(m,r.registry)}catch(x){console.error("[weifuwu] ref cleanup error",x)}let h=d[g];h?.parentNode&&h.parentNode.removeChild(h)}else if(y===void 0){if(m&&typeof m=="object"&&!Array.isArray(m))if(f)ie(m,r.registry);else try{R(m,r.registry)}catch(x){console.error("[weifuwu] ref cleanup error",x)}let h=d[g];h?.parentNode&&h.parentNode.removeChild(h)}}),p}var Xe=_();function Je(e,n="bottom",t=6,r=!0){switch(n){case"bottom":return{top:e.bottom+t,left:r?e.left+e.width/2:e.left};case"top":return{top:e.top-t,left:r?e.left+e.width/2:e.left};case"left":return{top:r?e.top+e.height/2:e.top,left:e.left-t};case"right":return{top:r?e.top+e.height/2:e.top,left:e.right+t}}}function ae(e,n,t=8){if(!n)return e;let r=n.getBoundingClientRect();if(r.width===0&&r.height===0)return e;let o=Number.parseFloat(n.style.top)||r.top,s=Number.parseFloat(n.style.left)||r.left,i=e.top-o,l=e.left-s,u={top:r.top+i,bottom:r.bottom+i,left:r.left+l,right:r.right+l},d=Xe.viewportWidth(),a=Xe.viewportHeight(),c=e.top,p=e.left;return u.bottom>a-t&&(c=Math.max(t,c-(u.bottom-(a-t)))),u.top<t&&(c=Math.max(t,c+(t-u.top))),u.right>d-t&&(p=Math.max(t,p-(u.right-(d-t)))),u.left<t&&(p=Math.max(t,p+(t-u.left))),{top:c,left:p,width:e.width}}var K=_();function Qe(e){let n=new Map,t=new Map,r=!1,o=0;function s(){o||(o=requestAnimationFrame(()=>{o=0;let a=[];for(let[c,p]of n){if(!p.isOpen())continue;let w=p.getEl();if(!w)continue;let b=w.getBoundingClientRect();if(b.width===0&&b.height===0)continue;let m=p.compute(b);Object.assign(p.pos,ae(m,p.panel?.(),p.margin)),a.push(c)}for(let[c,p]of t){let w=p.getScroller(),b=w instanceof Window?K.scrollingElement()?.scrollTop??K.scrollTop():w.scrollTop??0;b!==p.handle.y&&(p.handle.y=b,a.push(c))}a.length>0&&e(a)}))}function i(){r||(r=!0,K.addEventListener("scroll",s,{capture:!0,passive:!0}),K.addEventListener("resize",s))}function l(){r&&(K.removeEventListener("scroll",s,{capture:!0}),K.removeEventListener("resize",s),r=!1)}function u(a){for(let c of[...n.keys()])(c.startsWith(`popup:${a}:`)||c===`popup:${a}`||c===a)&&n.delete(c);t.delete(a)}function d(){l(),o&&(cancelAnimationFrame(o),o=0),n.clear(),t.clear()}return{popupTrackers:n,scrollTrackers:t,schedulePopupRecompute:s,ensurePopupListeners:i,destroyPopupListeners:l,cleanupTrackers:u,destroy:d}}function Ve(e,n,t){return o=>{o?n(o):t?.()}}function J(e){return typeof window<"u"&&!!window.matchMedia?.("(hover: hover)").matches}function le(e){return typeof window<"u"&&!!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches}function _e(e,n,t){let r=null,o=()=>{n(),t?.once&&r&&r.removeEventListener("animationend",o)};return i=>{i?(r=i,i.addEventListener("animationend",o)):r&&(r.removeEventListener("animationend",o),r=null)}}function ke(e,n){let{onLongPress:t,duration:r=500}=n,o,s=0,i=0,l=null,u=()=>{clearTimeout(o),o=void 0},d=e.selfId();if(d){let a=e.onUnmount(c=>{c===d&&(u(),a())})}return{onPointerDown:a=>{s=a.clientX??0,i=a.clientY??0,l=a,u(),o=setTimeout(()=>{o=void 0,l&&t(l)},r)},onPointerUp:u,onPointerLeave:u,onPointerMove:a=>{let c=Math.abs((a.clientX??0)-s),p=Math.abs((a.clientY??0)-i);(c>10||p>10)&&u()},onContextMenu:a=>{a.preventDefault(),t(a)}}}function Q(e,n){let t=e.selfId(),r="closed",o,s=()=>{r="closed",t?e.render([t]):e.render()};return{get phase(){return r},ref:l=>{l?o||(o=()=>{r==="exit"&&s()},l.addEventListener("animationend",o)):o=void 0},sync:l=>(l?r="open":r==="open"&&(r="exit"),r)}}function Se(e,n,t){let r=e.selfId(),o=le(e),s=t?.duration??400,i=t?.ease==="linear"?p=>p:p=>1-Math.pow(1-p,3),l,u=n,d={value:o?n:0,reset:()=>{}},a=()=>{r?e.render([r]):e.render()},c=p=>{if(u=p,o){d.value=p,a();return}if(p===d.value)return;l&&cancelAnimationFrame(l);let w=d.value,b=performance.now(),m=g=>{let y=Math.min(1,(g-b)/s);d.value=Math.round(w+(p-w)*i(y)),y<1?(l=requestAnimationFrame(m),a()):(l=void 0,a())};l=requestAnimationFrame(m)};if(d.reset=p=>{p===u&&l||c(p)},r){let p=e.onUnmount(w=>{w===r&&(l&&(cancelAnimationFrame(l),l=void 0),p())})}return queueMicrotask(()=>c(n)),d}function Re(e,n,t){let r=e.selfId(),o=e.browser,s=`media:${r}:${n}`;if(!e.mediaRegistry.has(s)){let i=o.matchMedia(n);t(i.matches);let l=d=>t(d.matches);i.addEventListener("change",l),e.mediaRegistry.set(s,{mql:i,handler:l});let u=e.onUnmount(d=>{if(d!==r)return;let a=e.mediaRegistry.get(s);if(a?.mql&&a.handler)try{a.mql.removeEventListener("change",a.handler)}catch{}e.mediaRegistry.delete(s),u()})}}function Ae(e,n,t){let r=e.browser,o=typeof n=="function"?{mobile:"(max-width: 639px)",tablet:"(min-width: 640px) and (max-width: 1023px)",desktop:"(min-width: 1024px)"}:n,s=typeof n=="function"?n:t,i=e.selfId(),l=`bp:${i}`;function u(){for(let[d,a]of Object.entries(o))if(r.matchMedia(a).matches)return d;return Object.keys(o)[0]??""}if(!e.mediaRegistry.has(l)){s(u());let d=[];for(let c of Object.values(o)){let p=r.matchMedia(c),w=()=>s(u());p.addEventListener("change",w),d.push({mql:p,handler:w})}e.mediaRegistry.set(l,{mqls:d});let a=e.onUnmount(c=>{if(c!==i)return;let p=e.mediaRegistry.get(l);if(p?.mqls)for(let w of p.mqls)try{w.mql.removeEventListener("change",w.handler)}catch{}e.mediaRegistry.delete(l),a()})}}function Me(e){let n=e.selfId(),t=e.browser,r={height:t.viewportHeight(),offsetTop:0,keyboardOpen:!1},o=()=>{n?e.render([n]):e.render()},s=()=>{let l=t.visualViewport();r.height=l?.height??t.viewportHeight(),r.offsetTop=l?.offsetTop??0,r.keyboardOpen=r.height<t.viewportHeight()*.9,o()},i=t.visualViewport();if(i?.addEventListener?(i.addEventListener("resize",s),i.addEventListener("scroll",s)):t.addEventListener("resize",s),n){let l=e.onUnmount(u=>{u===n&&(i?.removeEventListener?(i.removeEventListener("resize",s),i.removeEventListener("scroll",s)):t.removeEventListener("resize",s),l())})}return r}function Le(e,n){let t=e.selfId(),r={isIn:!1,ready:!1,observe:u,refresh:d,disconnect:a},o=null,s=null,i=()=>{t?e.render([t]):e.render()};function l(){if(s?.disconnect(),s=null,!o)return;let c=typeof n.rootMargin=="function"?n.rootMargin():n.rootMargin,p=typeof n.threshold=="function"?n.threshold():n.threshold;s=new IntersectionObserver(w=>{let b=w[w.length-1];if(!b)return;let m=b.isIntersecting,g=m!==r.isIn,y=!r.ready;r.isIn=m,r.ready=!0,n.onChange?.(b,m),(g||y)&&i()},{root:n.root?n.root():null,rootMargin:c??"0px",threshold:p??0}),s.observe(o)}function u(c){o=c,c?l():(s?.disconnect(),s=null,r.isIn=!1)}function d(){l()}function a(){s?.disconnect(),s=null}if(t){let c=e.onUnmount(p=>{p===t&&(a(),c())})}return r}function He(e,n){let t=e.selfId(),r=e.browser,o={y:0,refresh(){let l=s.getScroller();o.y=l instanceof Window?r.scrollingElement()?.scrollTop??r.scrollTop():l.scrollTop??0}},s={handle:o,getScroller:n.getScroller??(()=>window)};if(!t)return o.refresh(),o;e.scrollTrackers.set(t,s),e.ensurePopupListeners(),o.refresh();let i=e.onUnmount(l=>{l===t&&(e.scrollTrackers.delete(t),i())});return o}function ue(e,n){let t=e.selfId(),r=n.value!==void 0;if(r&&!n.onChange&&n.name&&(e.warned.has(n.name)||(e.warned.add(n.name),console.warn(`[weifuwu/${n.name}] \u53D7\u63A7\u6A21\u5F0F\uFF08value \u5DF2\u4F20\uFF09\u4F46\u672A\u63D0\u4F9B onChange\uFF0C\u4EA4\u4E92\u65E0\u6CD5\u751F\u6548\u3002
2
+ \u975E\u53D7\u63A7\uFF1A\u53BB\u6389 value\uFF1B\u53D7\u63A7\uFF1A\u4F20\u5165 onChange={(v) => setValue(v)}`))),!r&&t&&!e.uncontrolledValues.has(t)){e.uncontrolledValues.set(t,n.value);let s=e.onUnmount(i=>{i===t&&(e.uncontrolledValues.delete(t),s())})}let o=s=>{if(r){n.onChange?.(s);return}t&&e.uncontrolledValues.set(t,s),t?e.render([t]):e.render()};return{value:r?n.value:t?e.uncontrolledValues.get(t):n.value,setValue:o,controlled:r}}function Ie(e,n){let t=e.selfId(),r=ue(e,{value:n.value,onChange:n.onChange,name:n.name});if(t&&!e.inputStates.has(t)){e.inputStates.set(t,{keyword:"",selectedLabel:""});let i=e.onUnmount(l=>{l===t&&(e.inputStates.delete(t),i())})}let o=t?e.inputStates.get(t):{keyword:"",selectedLabel:""},s=()=>{t?e.render([t]):e.render()};return{...r,get keyword(){return o.keyword},setKeyword(i){o.keyword=i,s()},get selectedLabel(){return o.selectedLabel},setSelectedLabel(i){o.selectedLabel=i,s()}}}function Oe(e,n){let t=e.selfId(),r=!1;if(t){let u=e.onUnmount(d=>{d===t&&(r=!0,u())})}let o=()=>{r||(t?e.render([t]):e.render())},s={data:void 0,loading:!1,error:void 0},i=0,l=()=>{let u=++i;s.loading=!0,s.error=null,o(),Promise.resolve().then(()=>n()).then(d=>{i===u&&(s.data=d,s.loading=!1,o())}).catch(d=>{i===u&&(s.error=d,s.loading=!1,o())})};return l(),s.reload=l,s}function Ue(e,n){let t=e.selfId(),r=e.browser;if(typeof window>"u")return()=>{};if(r.addEventListener("keydown",n),t){let o=e.onUnmount(s=>{s===t&&(r.removeEventListener("keydown",n),o())})}return()=>r.removeEventListener("keydown",n)}function We(e,n){let t=e.browser,r=0,o=0,s=!1,i=a=>{s&&n.onMove(a,{x:a.clientX-r,y:a.clientY-o})},l=a=>{s&&(s=!1,t.removeEventListener("pointermove",i),t.removeEventListener("pointerup",l),n.onEnd?.(a))},u=a=>{s||(a.preventDefault(),s=!0,r=a.clientX,o=a.clientY,t.addEventListener("pointermove",i),t.addEventListener("pointerup",l),n.onStart?.(a))},d=e.selfId();if(d){let a=e.onUnmount(c=>{c===d&&(s&&(t.removeEventListener("pointermove",i),t.removeEventListener("pointerup",l),s=!1),a())})}return{onPointerDown:u}}function De(e,n){let t={};n.onDrop&&(t.onDrop=o=>{o.preventDefault(),n.onDrop(o)}),n.onDragOver&&(t.onDragOver=o=>{o.preventDefault(),n.onDragOver(o)}),n.onDragLeave&&(t.onDragLeave=o=>n.onDragLeave(o));let r={draggable:!0};if(n.onDragStart){let o=n.onDragStart;r.onDragStart=s=>{typeof document<"u"&&document.body.classList.add("wf-dragging"),o(s)}}if(n.onDragEnd){let o=n.onDragEnd;r.onDragEnd=s=>{typeof document<"u"&&document.body.classList.remove("wf-dragging"),o(s)}}return{dropProps:t,dragProps:r}}function ce(e,n){let t=e.selfId(),r={top:0,left:0,refresh:()=>{}};if(!t)return r;let o={pos:r,getEl:n.el,isOpen:n.isOpen,compute:n.compute,panel:n.panel,margin:n.margin??8};e.popupTrackers.set(t,o),e.ensurePopupListeners();let s=e.onUnmount(i=>{i===t&&(e.popupTrackers.delete(t),s())});return r.refresh=()=>{let i=o.getEl();if(!i)return;let l=i.getBoundingClientRect();if(l.width===0&&l.height===0)return;let u=o.compute(l);Object.assign(r,ae(u,o.panel?.(),o.margin))},r}function je(e,n){let t=e.selfId(),r=e.browser,o=J(e),s=()=>typeof n.trigger=="function"?n.trigger():n.trigger??"manual",i=n.open!==void 0,l=()=>!!n.disabled?.(),u=()=>i?typeof n.open=="function"?!!n.open():!!n.open:n.isOpen(),d=n.presence?Q(e,{name:n.name}):null,a,c=!1,p=v=>{if(!d)return v?"open":"closed";let N=d.sync(v);return v&&n.lockScroll&&!c&&(kn(),c=!0),N},w=v=>{l()||(i?n.onOpenChange?.(v):d?v?p(!0):u()&&p(!1):n.setOpen(v))},b=()=>{let v=n.placement;return typeof v=="function"?v():v??"bottom"},m=null,g=!1,y=ce(e,{el:n.el??(()=>null),isOpen:()=>u(),compute:v=>{if(n.position){let N=n.position();return{top:N.y,left:N.x,width:N.width}}return Je(v,b(),n.gap??6,n.center!==!1)},panel:()=>m,margin:n.margin??8}),f=v=>{if(n.closeOnOutside===!1||n.mask||!u())return;let N=v.target;if(!(N instanceof Node))return;let I=n.el?.()??null;I&&I.contains(N)||m&&m.contains(N)||w(!1)},h=v=>{n.closeOnEscape!==!1&&(v.key!=="Escape"||!u()||w(!1))};if(r.addEventListener("mousedown",f),r.addEventListener("keydown",h),t){let v=e.onUnmount(N=>{N===t&&(r.removeEventListener("mousedown",f),r.removeEventListener("keydown",h),v())})}let x={},P=v=>typeof v=="function"?v():v??0,C=()=>P(n.openDelay),T=()=>P(n.closeDelay),E,V,W=()=>{clearTimeout(E),clearTimeout(V),E=void 0,V=void 0},U=v=>{if(l())return;let N=v.currentTarget,I=v.relatedTarget;N.contains(I)||(clearTimeout(V),V=void 0,E=setTimeout(()=>{E=void 0,w(!0)},C()))},A=v=>{if(l())return;let N=v.currentTarget,I=v.relatedTarget;N.contains(I)||(clearTimeout(E),E=void 0,V=setTimeout(()=>{V=void 0,w(!1)},T()))},me=()=>{l()||(clearTimeout(V),V=void 0,E=setTimeout(()=>{E=void 0,w(!0)},C()))},dn=()=>{l()||(clearTimeout(E),E=void 0,V=setTimeout(()=>{V=void 0,w(!1)},T()))},G=()=>s()==="hover";if(x.onMouseOver=v=>{G()&&U(v)},x.onMouseOut=v=>{G()&&A(v)},x.onClick=()=>{G()?o||w(!u()):s()==="click"&&w(!0)},x.onFocus=()=>{G()?me():s()==="focus"&&(clearTimeout(V),V=void 0,w(!0))},x.onBlur=()=>{G()?dn():s()==="focus"&&(clearTimeout(E),E=void 0,V=setTimeout(()=>{V=void 0,w(!1)},T()))},s()==="longpress"){let v,N=0,I=0,D=()=>{clearTimeout(v),v=void 0};x.onPointerDown=k=>{l()||(N=k.clientX??0,I=k.clientY??0,D(),v=setTimeout(()=>{v=void 0,n.onTrigger?.({clientX:N,clientY:I}),w(!0)},n.longPressDuration??500))},x.onPointerUp=D,x.onPointerLeave=D,x.onPointerMove=k=>{let he=Math.abs((k.clientX??0)-N),we=Math.abs((k.clientY??0)-I);(he>10||we>10)&&D()},x.onContextMenu=k=>{k.preventDefault(),n.onTrigger?.({clientX:k.clientX??0,clientY:k.clientY??0}),w(!0)}}if(x.onKeyDown=v=>{v.key==="Escape"&&n.closeOnEscape!==!1&&w(!1)},t){let v=e.onUnmount(N=>{N===t&&(W(),v())})}let cn=v=>{if(v){m=v;let N=()=>y.refresh();v.addEventListener("animationend",N,{once:!0})}else m=null},ye=null,ge=null,ze=v=>{cn(v),ge&&ge(v),d?.ref(v),n.trapFocus&&(v?a=An(v):(a?.(),a=void 0)),n.lockScroll&&!v&&c&&(Sn(),c=!1)};return{get open(){return u()},setOpen:w,get phase(){return d?d.phase:u()?"open":"closed"},sync:p,wrapProps:x,portal:(v,N="popover")=>{if(l())return null;if(!(d?d.phase!=="closed":u()))return g=!1,ye=null,null;let D=n.el?.()??null;(!g||D!==ye)&&(D?y.refresh():queueMicrotask(()=>{u()&&y.refresh()}),g=!0,ye=D);let k=v.props??{};ge=k.ref??null;let he=n.positioning==="none"?k.class??"":["wf-popup",k.class].filter(Boolean).join(" "),we=n.positioning==="none"?{...k.style??{},position:"fixed"}:{...k.style??{},position:"fixed",top:`${y.top}px`,left:`${y.left}px`,...y.width!==void 0?{width:`${y.width}px`}:{},maxWidth:(()=>{let ne=typeof n.width=="function"?n.width():n.width;return ne!==void 0?`min(${ne}px, calc(100vw - 32px))`:"calc(100vw - 32px)"})()},q={...v,props:{...k,class:he,style:we,ref:ze}};if(n.mask){let ne=typeof n.mask=="object"?n.mask:j("div",{class:"wf-popup-mask","data-portal-mask":N,onClick:n.maskClosable===!1?void 0:()=>w(!1)}),fn=n.maskCentered?j("div",{class:"wf-cover",style:{"--wf-z":"var(--wf-z-popover)",pointerEvents:"none"}},{...q,props:{...q.props,style:{...k.style??{},pointerEvents:"auto"},ref:ze}}):null,pn=n.maskCentered?void 0:{...q.props?.style??{},zIndex:"var(--wf-z-popover)"},mn=n.maskCentered?fn:{...q,props:{...q.props,style:pn}};return te([ne,mn],N)}return te(q,N)},refresh:()=>y.refresh()}}function $e(e,n){let t=e.selfId();if(t&&!e.openStates.has(t)){e.openStates.set(t,!1);let l=e.onUnmount(u=>{u===t&&(e.openStates.delete(t),l())})}let r=n.open!==void 0;r&&!n.onOpenChange&&n.name&&!e.warned.has(n.name)&&(e.warned.add(n.name),console.warn(`[weifuwu/${n.name}] \u53D7\u63A7\u6A21\u5F0F\uFF08open \u5DF2\u4F20\uFF09\u4F46\u672A\u63D0\u4F9B onOpenChange\uFF0C\u4EA4\u4E92\u65E0\u6CD5\u751F\u6548\u3002
3
+ \u975E\u53D7\u63A7\uFF1A\u53BB\u6389 open\uFF1B\u53D7\u63A7\uFF1A\u4F20\u5165 onOpenChange={(o) => setOpen(o)}`));let o=()=>r?!!n.open:t?e.openStates.get(t)??!1:!1,s=()=>{t?e.render([t]):e.render()},i=l=>{if(r){n.onOpenChange?.(l);return}t&&e.openStates.set(t,l),s()};return{get open(){return o()},setOpen:i,triggerProps:{onClick:()=>i(!0),onFocus:()=>{n.openOnFocus&&i(!0)}}}}var $=_(),Z=0,Ze="",en="",nn="",tn="",de=0;function rn(){return typeof window<"u"&&typeof document<"u"}function kn(){if(Z++,Z>1||!rn())return;de=$.scrollTop();let e=$.bodyElement();Ze=e.style.overflow,en=e.style.position,nn=e.style.top,tn=e.style.width,e.style.overflow="hidden",(/iPhone|iPad|iPod/.test(navigator.platform)||/Mac/.test(navigator.platform)&&"ontouchend"in document)&&(e.style.position="fixed",e.style.top=`-${de}px`,e.style.width="100%")}function Sn(){if(Z===0||(Z--,Z>0)||!rn())return;let e=$.bodyElement();e.style.overflow=Ze,e.style.position=en,e.style.top=nn,e.style.width=tn,de>0&&$.scrollTo(de)}var Rn='a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';function An(e){let n;return queueMicrotask(()=>{let t=e.querySelectorAll(Rn);if(t.length===0)return;let r=t[0],o=t[t.length-1],s=l=>{l.key==="Tab"&&(l.shiftKey&&$.activeElement()===r?(l.preventDefault(),o.focus()):!l.shiftKey&&$.activeElement()===o&&(l.preventDefault(),r.focus()))},i=$.activeElement();r.focus(),e.addEventListener("keydown",s),n=()=>{e.removeEventListener("keydown",s),i?.focus()}}),()=>n?.()}function Mn(e){return e.map(n=>{let t={role:n.role,content:n.content};return n.reasoning&&(t.reasoning_content=n.reasoning),t})}function qe(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`msg-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function on(e,n,t,r){t.initialMessages?e.messages=structuredClone(t.initialMessages):e.messages===void 0&&(e.messages=[]),e.input===void 0&&(e.input=""),e.streaming===void 0&&(e.streaming=!1),e.error===void 0&&(e.error=null),e.usage===void 0&&(e.usage=null),e.step===void 0&&(e.step=null);let o=null;function s(){if(!e.streaming)return;let b=e.messages[e.messages.length-1];return b&&b.role==="assistant"&&b.status==="streaming"?b:void 0}function i(b,m,g){let y=s();switch(b){case"wf:token":y&&(y.content+=m.text);break;case"wf:tool_call":{y&&(y.toolCalls||(y.toolCalls=[]),y.toolCalls.push({call:m,status:"running"}));break}case"wf:tool_progress":{let f=m,h=y?.toolCalls?.find(x=>x.call.id===f.toolCallId);h&&(h.progress=f);break}case"wf:tool_result":{let f=m,h=y?.toolCalls?.find(x=>x.call.id===f.id);h&&(h.result=f,h.status=f.ok?"ok":"error");break}case"wf:approval_request":y&&(y.approval=m);break;case"wf:usage":y&&(y.usage=m);break;case"wf:step":e.step=m;break;case"wf:done":if(y){y.status="done",y.approval=void 0;let f=m;f.reasoning&&(y.reasoning=f.reasoning)}e.streaming=!1,e.step=null;break;case"wf:error":y&&(y.status="error",y.error=m,y.approval=void 0),e.error=m,e.streaming=!1,e.step=null;break;default:g?.(b,m);break}r?.()}function l(){let b=t.body?t.body(e.messages):{messages:Mn(e.messages)};o=n(t.url,b,{onToken:g=>i("wf:token",{text:g}),onToolCall:g=>i("wf:tool_call",g),onToolProgress:g=>i("wf:tool_progress",g),onToolResult:g=>i("wf:tool_result",g),onApproval:g=>i("wf:approval_request",g),onUsage:g=>i("wf:usage",g),onStep:g=>i("wf:step",g),onDone:g=>i("wf:done",g),onError:g=>i("wf:error",g),onEvent:(g,y)=>i(g,y,t.onEvent)},{signal:t.signal,headers:t.headers}),e.streaming=!0;let m=s();m&&o?.traceId&&(m.id=o.traceId)}function u(){if(e.streaming)return;let b=String(e.input??"").trim();b&&(e.input="",e.error=null,e.usage=null,e.step=null,e.messages.push({id:qe(),role:"user",content:b,status:"done"},{id:qe(),role:"assistant",content:"",status:"streaming",toolCalls:[]}),l(),r?.())}function d(){o?.abort(),e.streaming=!1,e.step=null;let b=e.messages[e.messages.length-1];b&&b.role==="assistant"&&b.status==="streaming"&&(!b.content&&(!b.toolCalls||b.toolCalls.length===0)?e.messages.pop():b.status="done"),r?.()}function a(){if(e.streaming)return;let b=-1;for(let m=e.messages.length-1;m>=0;m--)if(e.messages[m].role==="user"){b=m;break}b!==-1&&(e.messages.splice(b+1),e.error=null,e.usage=null,e.step=null,e.messages.push({id:qe(),role:"assistant",content:"",status:"streaming",toolCalls:[]}),l(),r?.())}function c(){o?.abort(),e.messages=[],e.input="",e.streaming=!1,e.error=null,e.usage=null,e.step=null,r?.()}async function p(b,m,g){let y=e.messages[e.messages.length-1],f=y?.role==="assistant"?y.approval:void 0;if(f&&(y.approval=void 0,r?.(),!!t.approveUrl))try{await fetch(t.approveUrl,{method:"POST",headers:{"Content-Type":"application/json",...t.headers},body:JSON.stringify(g?{id:f.id,decision:b,note:m,modifiedArgs:g}:{id:f.id,decision:b,note:m}),signal:t.signal})}catch(h){if(t.signal?.aborted)return;e.error={code:"provider_error",message:h instanceof Error?h.message:String(h)},r?.()}}function w(){o?.abort(),o=null}return{send:u,stop:d,retry:a,clear:c,approve:p,dispose:w}}function sn(e,n,t){let r=new AbortController,o=t?.signal;o&&(o.aborted?r.abort():o.addEventListener("abort",()=>r.abort(),{once:!0}));let s=t?.traceId??Un(),i=t?.record!==!1,l=[],u=(async()=>{let d;try{d=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json","X-Trace-Id":s,Accept:"text/event-stream",...t?.headers},body:JSON.stringify(n),signal:r.signal})}catch(a){if(r.signal.aborted)return;t?.onError?.({code:"provider_error",message:a instanceof Error?a.message:String(a)});return}if(!d.ok){t?.onError?.({code:On(d.status),message:`HTTP ${d.status} ${d.statusText}`});return}try{for await(let{name:a,data:c}of Hn(d.body)){if(r.signal.aborted)return;In(l,{name:a,data:c},i),Ln(a,c,t??{})}}catch(a){if(r.signal.aborted)return;t?.onError?.({code:"provider_error",message:a instanceof Error?a.message:String(a)})}})();return{abort:()=>r.abort(),done:u,traceId:s,events:l}}function Ln(e,n,t){switch(e){case"wf:token":return t.onToken?.(n.text);case"wf:tool_call":return t.onToolCall?.(n);case"wf:tool_result":return t.onToolResult?.(n);case"wf:tool_progress":return t.onToolProgress?.(n);case"wf:step":return t.onStep?.(n);case"wf:approval_request":return t.onApproval?.(n);case"wf:usage":return t.onUsage?.(n);case"wf:done":return t.onDone?.(n);case"wf:error":return t.onError?.(n);default:return t.onEvent?.(e,n)}}async function*Hn(e){let n=e.getReader(),t=new TextDecoder,r="";try{for(;;){let{done:o,value:s}=await n.read();if(o)break;r+=t.decode(s,{stream:!0});let i=r.split(`
2
4
 
3
- `);o=i.pop()??"";for(let s of i){let u="message",a="";for(let d of s.split(`
4
- `))d.startsWith("event: ")?u=d.slice(7):d.startsWith("data: ")&&(a+=d.slice(6));if(a)try{yield{name:u,data:JSON.parse(a)}}catch{}}}}finally{n.releaseLock()}}function An(e,n,t){t&&(e.length>=1e3&&e.shift(),e.push(n))}function Un(e){return e===401||e===403?"auth_failed":e===429?"rate_limited":e>=500?"provider_error":"invalid_request"}function Hn(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`trace-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function On(e){return e.map(n=>({role:n.role,content:n.content}))}function He(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`msg-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function dn(e,n,t){t.initialMessages?e.messages=structuredClone(t.initialMessages):e.messages===void 0&&(e.messages=[]),e.input===void 0&&(e.input=""),e.streaming===void 0&&(e.streaming=!1),e.error===void 0&&(e.error=null),e.usage===void 0&&(e.usage=null),e.step===void 0&&(e.step=null);let o=null;function r(){if(!e.streaming)return;let C=e.messages[e.messages.length-1];return C&&C.role==="assistant"&&C.status==="streaming"?C:void 0}function c(C,h,g){let v=r();switch(C){case"wf:token":v&&(v.content+=h.text);break;case"wf:tool_call":{v&&(v.toolCalls||(v.toolCalls=[]),v.toolCalls.push({call:h,status:"running"}));break}case"wf:tool_progress":{let x=h,S=v?.toolCalls?.find(l=>l.call.id===x.toolCallId);S&&(S.progress=x);break}case"wf:tool_result":{let x=h,S=v?.toolCalls?.find(l=>l.call.id===x.id);S&&(S.result=x,S.status=x.ok?"ok":"error");break}case"wf:approval_request":v&&(v.approval=h);break;case"wf:usage":v&&(v.usage=h);break;case"wf:step":e.step=h;break;case"wf:done":v&&(v.status="done",v.approval=void 0),e.streaming=!1,e.step=null;break;case"wf:error":v&&(v.status="error",v.error=h,v.approval=void 0),e.error=h,e.streaming=!1,e.step=null;break;default:g?.(C,h);break}}function i(){let C=t.body?t.body(e.messages):{messages:On(e.messages)};o=n(t.url,C,{onToken:g=>c("wf:token",{text:g}),onToolCall:g=>c("wf:tool_call",g),onToolProgress:g=>c("wf:tool_progress",g),onToolResult:g=>c("wf:tool_result",g),onApproval:g=>c("wf:approval_request",g),onUsage:g=>c("wf:usage",g),onStep:g=>c("wf:step",g),onDone:g=>c("wf:done",g),onError:g=>c("wf:error",g),onEvent:(g,v)=>c(g,v,t.onEvent)},{signal:t.signal,headers:t.headers}),e.streaming=!0;let h=r();h&&o?.traceId&&(h.id=o.traceId)}function s(){if(e.streaming)return;let C=String(e.input??"").trim();C&&(e.input="",e.error=null,e.usage=null,e.step=null,e.messages.push({id:He(),role:"user",content:C,status:"done"},{id:He(),role:"assistant",content:"",status:"streaming",toolCalls:[]}),i())}function u(){o?.abort(),e.streaming=!1,e.step=null;let C=e.messages[e.messages.length-1];C&&C.role==="assistant"&&C.status==="streaming"&&(!C.content&&(!C.toolCalls||C.toolCalls.length===0)?e.messages.pop():C.status="done")}function a(){if(e.streaming)return;let C=-1;for(let h=e.messages.length-1;h>=0;h--)if(e.messages[h].role==="user"){C=h;break}C!==-1&&(e.messages.splice(C+1),e.error=null,e.usage=null,e.step=null,e.messages.push({id:He(),role:"assistant",content:"",status:"streaming",toolCalls:[]}),i())}function d(){o?.abort(),e.messages=[],e.input="",e.streaming=!1,e.error=null,e.usage=null,e.step=null}async function m(C,h){let g=e.messages[e.messages.length-1],v=g?.role==="assistant"?g.approval:void 0;if(v&&(g.approval=void 0,!!t.approveUrl))try{await fetch(t.approveUrl,{method:"POST",headers:{"Content-Type":"application/json",...t.headers},body:JSON.stringify({id:v.id,decision:C,note:h}),signal:t.signal})}catch(x){if(t.signal?.aborted)return;e.error={code:"provider_error",message:x instanceof Error?x.message:String(x)}}}function w(){o?.abort(),o=null}return{send:s,stop:u,retry:a,clear:d,approve:m,dispose:w}}var G=Symbol("Fragment"),B=Symbol("Portal"),Ce=(e,n)=>{let t=n._suspense;return()=>t?.fallback??null},Oe=(e,n)=>t=>t.children;function De(e,n,t){return{type:e,props:cn(n),key:t??void 0}}var Dn=De;function Wn(e,n,t){return De(e,n,t)}function Te(e,n,...t){let o=cn(n??{});return t.length>0&&(o.children=t.length===1?t[0]:t),{type:e,props:o,key:n?.key??void 0}}function cn(e){if(!e)return{};let n={};for(let t of Object.keys(e))t!=="key"&&(n[t]=e[t]);return n}function We(e,n){return{type:B,props:{children:e,portalKey:n},key:n??void 0,_placement:"remote"}}var Ee=new Set,ae=new Map,xe=new Map,ue=new Map;function fn(e){let{ctx:n,renderByIds:t,getSelfId:o,dirtyBatch:r,dirtySet:c,mediaRegistry:i,popupTrackers:s,scrollTrackers:u,schedulePopupRecompute:a,ensurePopupListeners:d,isRendering:m,isMounting:w,setMounting:C,endMounting:h}=e,g=n.browser??W(),v=e.registry??j(n),x=l=>ye(v,l);return{_selfId:"_wf_root",_ctxVersion:0,_dirtySet:c,setMounting:C,endMounting:h,bumpCtxVersion:function(){this._ctxVersion++},render:function(l){if(m()){if(w())return;this._pendingRender||(this._pendingRender=!0,queueMicrotask(()=>{this._pendingRender=!1,this.render(l)}));return}if(!l||l.length===0){let f=o(this);if(f)l=[f];else return}t(l)},dirty:function(l){let f=this._selfId??"",p=this._debugDirty=(this._debugDirty??0)+1;if(D("dirty","self="+String(f).slice(0,20)+" ids="+JSON.stringify(l)+" n="+p+" mounting="+w()+" rendering="+m(),{throttle:200}),p<=3&&q()&&console.trace("[ui-debug]","dirty-trace",String(f).slice(0,20)),!w()){if(m()){this._pendingDirty||(this._pendingDirty=!0,queueMicrotask(()=>{this._pendingDirty=!1,this.dirty(l)}));return}if(!l||l.length===0){let y=o(this);if(y)l=[y];else return}for(let y of l)y&&(r.add(y),c.add(y));this._dirtyScheduled||(this._dirtyScheduled=!0,queueMicrotask(()=>{this._dirtyScheduled=!1;let y=[...r];r.clear(),y.length>0&&t(y)}))}},$:function(){let l=this;if(!Object.prototype.hasOwnProperty.call(l,"_$cache")){let f=Q(()=>{let p=l._selfVNode?._id??o(l);p&&n.ui.dirty([p])});l._$cache=f}return l._$cache},useChat:function(l){let f=this.$(),p=dn(f,un,l);Object.assign(f,{send:p.send,stop:p.stop,retry:p.retry,clear:p.clear,approve:p.approve,dispose:p.dispose});let y=o(this);if(y){let b=x(T=>{T===y&&(p.dispose(),b())})}return f},useMedia:function(l,f){let y=`media:${o(this)}:${l}`;if(!i.has(y)){let b=g.matchMedia(l);f(b.matches);let T=_=>f(_.matches);b.addEventListener("change",T),i.set(y,{mql:b,handler:T})}},useBreakpoint:function(l,f){let p=typeof l=="function"?{mobile:"(max-width: 639px)",tablet:"(min-width: 640px) and (max-width: 1023px)",desktop:"(min-width: 1024px)"}:l,y=typeof l=="function"?l:f,T=`bp:${o(this)}`;function _(){for(let[P,M]of Object.entries(p))if(g.matchMedia(M).matches)return P;return Object.keys(p)[0]??""}if(!i.has(T)){y(_());let P=[];for(let M of Object.values(p)){let H=g.matchMedia(M),U=()=>y(_());H.addEventListener("change",U),P.push({mql:H,handler:U})}i.set(T,{mqls:P})}},usePopupPosition:function(l){let f=o(this),p={top:0,left:0,refresh:()=>{}};if(!f)return p;let y={pos:p,getEl:l.el,isOpen:l.isOpen,compute:l.compute,panel:l.panel,margin:l.margin??8};return s.set(f,y),d(),p.refresh=()=>{let b=y.getEl();if(!b)return;let T=b.getBoundingClientRect();if(T.width===0&&T.height===0)return;let _=y.compute(T);Object.assign(p,ge(_,y.panel?.(),y.margin))},p},useHoverCapable:function(){return typeof window<"u"&&!!window.matchMedia?.("(hover: hover)").matches},useStableRef:function(l,f){return y=>{y?l(y):f?.()}},useVisualViewport:function(){let l=o(this),f={height:g.viewportHeight(),offsetTop:0,keyboardOpen:!1},p=()=>{n.ui&&n.ui.dirty(l?[l]:void 0)},y=()=>{let T=g.visualViewport();f.height=T?.height??g.viewportHeight(),f.offsetTop=T?.offsetTop??0,f.keyboardOpen=f.height<g.viewportHeight()*.9,p()},b=g.visualViewport();if(b?.addEventListener?(b.addEventListener("resize",y),b.addEventListener("scroll",y)):g.addEventListener("resize",y),l){let T=x(_=>{_===l&&(b?.removeEventListener?(b.removeEventListener("resize",y),b.removeEventListener("scroll",y)):g.removeEventListener("resize",y),T())})}return f},usePopup:function(l){let f=o(this),p=this.useHoverCapable(),y=()=>typeof l.trigger=="function"?l.trigger():l.trigger,b=l.open!==void 0,T=()=>!!l.disabled?.(),_=()=>b?typeof l.open=="function"?!!l.open():!!l.open:l.isOpen(),P=N=>{T()||(b?l.onOpenChange?.(N):l.setOpen(N))},M=()=>{let N=l.placement;return typeof N=="function"?N():N??"bottom"},H=null,U=!1,L=n.ui.usePopupPosition({el:l.el,isOpen:()=>_(),compute:N=>{if(l.position){let V=l.position();return{top:V.y,left:V.x}}return Xe(N,M(),l.gap??6,l.center!==!1)},panel:()=>H,margin:l.margin??8}),k=N=>{if(l.closeOnOutside===!1||!_())return;let V=N.target;if(!(V instanceof Node))return;let K=l.el();K&&K.contains(V)||H&&H.contains(V)||P(!1)},R=N=>{l.closeOnEscape!==!1&&(N.key!=="Escape"||!_()||P(!1))};if(g.addEventListener("mousedown",k),g.addEventListener("keydown",R),f){let N=x(V=>{V===f&&(g.removeEventListener("mousedown",k),g.removeEventListener("keydown",R),N())})}let E={},I=N=>typeof N=="function"?N():N??0,A=()=>I(l.openDelay),J=()=>I(l.closeDelay),Y,z,Tn=()=>{clearTimeout(Y),clearTimeout(z),Y=void 0,z=void 0},En=N=>{if(T())return;let V=N.currentTarget,K=N.relatedTarget;V.contains(K)||(clearTimeout(z),z=void 0,Y=setTimeout(()=>{Y=void 0,P(!0)},A()))},xn=N=>{if(T())return;let V=N.currentTarget,K=N.relatedTarget;V.contains(K)||(clearTimeout(Y),Y=void 0,z=setTimeout(()=>{z=void 0,P(!1)},J()))},_n=()=>{T()||(clearTimeout(z),z=void 0,Y=setTimeout(()=>{Y=void 0,P(!0)},A()))},Pn=()=>{T()||(clearTimeout(Y),Y=void 0,z=setTimeout(()=>{z=void 0,P(!1)},J()))},se=()=>y()==="hover";if(E.onMouseOver=N=>{se()&&En(N)},E.onMouseOut=N=>{se()&&xn(N)},E.onClick=()=>{se()?p||P(!_()):y()==="click"&&P(!0)},E.onFocus=()=>{se()&&_n()},E.onBlur=()=>{se()&&Pn()},y()==="longpress"){let N,V=0,K=0,X=()=>{clearTimeout(N),N=void 0};E.onPointerDown=F=>{T()||(V=F.clientX??0,K=F.clientY??0,X(),N=setTimeout(()=>{N=void 0,l.onTrigger?.({clientX:V,clientY:K}),P(!0)},l.longPressDuration??500))},E.onPointerUp=X,E.onPointerLeave=X,E.onPointerMove=F=>{let Re=Math.abs((F.clientX??0)-V),Me=Math.abs((F.clientY??0)-K);(Re>10||Me>10)&&X()},E.onContextMenu=F=>{F.preventDefault(),l.onTrigger?.({clientX:F.clientX??0,clientY:F.clientY??0}),P(!0)}}if(E.onKeyDown=N=>{N.key==="Escape"&&l.closeOnEscape!==!1&&P(!1)},f){let N=x(V=>{V===f&&(Tn(),N())})}let Nn=N=>{if(N){H=N;let V=()=>L.refresh();N.addEventListener("animationend",V,{once:!0})}else H=null},ke=null,Se=null,kn=N=>{Nn(N),Se&&Se(N)};return{get open(){return _()},setOpen:P,wrapProps:E,portal:(N,V="popover")=>{if(T())return null;if(!_())return U=!1,ke=null,null;let X=l.el();(!U||X!==ke)&&(X?L.refresh():queueMicrotask(()=>{_()&&L.refresh()}),U=!0,ke=X);let F=N.props??{};Se=F.ref??null;let Re=["wf-popup",F.class].filter(Boolean).join(" "),Me={...F.style??{},position:"fixed",top:`${L.top}px`,left:`${L.left}px`,maxWidth:l.width!==void 0?`min(${l.width}px, calc(100vw - 32px))`:"calc(100vw - 32px)"},Sn={...N,props:{...F,class:Re,style:Me,ref:kn}};return We(Sn,V)},refresh:()=>L.refresh()}},useLongPress:function(l){let{onLongPress:f,duration:p=500}=l,y,b=0,T=0,_=null,P=()=>{clearTimeout(y),y=void 0};return{onPointerDown:M=>{b=M.clientX??0,T=M.clientY??0,_=M,P(),y=setTimeout(()=>{y=void 0,_&&f(_)},p)},onPointerUp:P,onPointerLeave:P,onPointerMove:M=>{let H=Math.abs((M.clientX??0)-b),U=Math.abs((M.clientY??0)-T);(H>10||U>10)&&P()},onContextMenu:M=>{M.preventDefault(),f(M)}}},useInView:function(l){let f=o(this),p={isIn:!1,ready:!1,observe:P,refresh:M,disconnect:H},y=null,b=null,T=()=>{n.ui&&n.ui.dirty(f?[f]:void 0)};function _(){if(b?.disconnect(),b=null,!y)return;let U=typeof l.rootMargin=="function"?l.rootMargin():l.rootMargin,L=typeof l.threshold=="function"?l.threshold():l.threshold;b=new IntersectionObserver(k=>{let R=k[k.length-1];if(!R)return;let E=R.isIntersecting,I=E!==p.isIn,A=!p.ready;p.isIn=E,p.ready=!0,l.onChange?.(R,E),(I||A)&&T()},{root:l.root?l.root():null,rootMargin:U??"0px",threshold:L??0}),b.observe(y)}function P(U){y=U,U?_():(b?.disconnect(),b=null,p.isIn=!1)}function M(){_()}function H(){b?.disconnect(),b=null}return p},useScrollPosition:function(l){let f=o(this),p={y:0,refresh(){let b=y.getScroller();p.y=b instanceof Window?g.scrollingElement()?.scrollTop??g.scrollTop():b.scrollTop??0}},y={handle:p,getScroller:l.getScroller??(()=>window)};return f?(u.set(f,y),d(),p.refresh(),p):(p.refresh(),p)},useAsync:function(l){let f=o(this),p=Q(()=>{n.ui&&n.ui.dirty(f?[f]:void 0)});p.loading=!0;let y=0,b=()=>{let T=++y;p.loading=!0,p.error=null,Promise.resolve().then(()=>l()).then(_=>{y===T&&(p.data=_,p.loading=!1)}).catch(_=>{y===T&&(p.error=_,p.loading=!1)})};return b(),p.reload=b,p},useControlled:function(l){let f=o(this),p=l.value!==void 0;if(p&&!l.onChange&&l.name&&(Ee.has(l.name)||(Ee.add(l.name),console.warn(`[weifuwu/${l.name}] \u53D7\u63A7\u6A21\u5F0F\uFF08value \u5DF2\u4F20\uFF09\u4F46\u672A\u63D0\u4F9B onChange\uFF0C\u4EA4\u4E92\u65E0\u6CD5\u751F\u6548\u3002
5
- \u975E\u53D7\u63A7\uFF1A\u53BB\u6389 value\uFF1B\u53D7\u63A7\uFF1A\u4F20\u5165 onChange={(v) => setValue(v)}`))),!p&&f&&!ae.has(f)){ae.set(f,l.value);let b=x(T=>{T===f&&(ae.delete(f),b())})}let y=b=>{if(p){l.onChange?.(b);return}f&&ae.set(f,b),n.ui&&(f?n.ui.dirty([f]):n.ui.render())};return{value:p?l.value:f?ae.get(f):l.value,setValue:y,controlled:p}},useControlledInput:function(l){let f=o(this),p=this.useControlled({value:l.value,onChange:l.onChange,name:l.name});if(f&&!xe.has(f)){xe.set(f,{keyword:"",selectedLabel:""});let T=x(_=>{_===f&&(xe.delete(f),T())})}let y=f?xe.get(f):{keyword:"",selectedLabel:""},b=()=>{f?n.ui?.dirty([f]):n.ui?.render()};return{...p,get keyword(){return y.keyword},setKeyword(T){y.keyword=T,b()},get selectedLabel(){return y.selectedLabel},setSelectedLabel(T){y.selectedLabel=T,b()}}},useOpen:function(l){let f=o(this);if(f&&!ue.has(f)){ue.set(f,!1);let _=x(P=>{P===f&&(ue.delete(f),_())})}let p=l.open!==void 0;p&&!l.onOpenChange&&l.name&&!Ee.has(l.name)&&(Ee.add(l.name),console.warn(`[weifuwu/${l.name}] \u53D7\u63A7\u6A21\u5F0F\uFF08open \u5DF2\u4F20\uFF09\u4F46\u672A\u63D0\u4F9B onOpenChange\uFF0C\u4EA4\u4E92\u65E0\u6CD5\u751F\u6548\u3002
6
- \u975E\u53D7\u63A7\uFF1A\u53BB\u6389 open\uFF1B\u53D7\u63A7\uFF1A\u4F20\u5165 onOpenChange={(o) => setOpen(o)}`));let y=()=>p?!!l.open:f?ue.get(f)??!1:!1,b=()=>{f?n.ui?.dirty([f]):n.ui?.render()},T=_=>{if(p){l.onOpenChange?.(_);return}f&&ue.set(f,_),b()};return{get open(){return y()},setOpen:T,triggerProps:{onClick:()=>T(!0),onFocus:()=>{l.openOnFocus&&T(!0)}}}},usePresence:function(l){let f=o(this),p="closed",y,b=()=>{p="closed",n.ui&&(f?n.ui.dirty([f]):n.ui.render())};return{get phase(){return p},ref:_=>{_?y||(y=()=>{p==="exit"&&b()},_.addEventListener("animationend",y)):y=void 0},sync:_=>(_?p="open":p==="open"&&(p="exit"),p)}},useDialog:function(l){let f=o(this),p,y=null,b=this.usePresence(l);return{get phase(){return b.phase},rootRef:P=>{P?(rn(),y&&(p=Ae(y)),b.ref(P)):(sn(),p?.(),b.ref(null))},panelRef:P=>{y=P,P&&!p&&(p=Ae(P))},sync:P=>b.sync(P)}},useGlobalKey:function(l){let f=o(this);if(typeof window>"u")return()=>{};if(g.addEventListener("keydown",l),f){let p=x(y=>{y===f&&(g.removeEventListener("keydown",l),p())})}return()=>g.removeEventListener("keydown",l)},useDrag:function(l){let f=0,p=0,y=!1,b=P=>{y&&l.onMove(P,{x:P.clientX-f,y:P.clientY-p})},T=P=>{y&&(y=!1,g.removeEventListener("pointermove",b),g.removeEventListener("pointerup",T),l.onEnd?.(P))};return{onPointerDown:P=>{y||(P.preventDefault(),y=!0,f=P.clientX,p=P.clientY,g.addEventListener("pointermove",b),g.addEventListener("pointerup",T),l.onStart?.(P))}}},useDragDrop:function(l){let f={};l.onDrop&&(f.onDrop=y=>{y.preventDefault(),l.onDrop(y)}),l.onDragOver&&(f.onDragOver=y=>{y.preventDefault(),l.onDragOver(y)}),l.onDragLeave&&(f.onDragLeave=y=>l.onDragLeave(y));let p={draggable:!0};if(l.onDragStart){let y=l.onDragStart;p.onDragStart=b=>{typeof document<"u"&&document.body.classList.add("wf-dragging"),y(b)}}if(l.onDragEnd){let y=l.onDragEnd;p.onDragEnd=b=>{typeof document<"u"&&document.body.classList.remove("wf-dragging"),y(b)}}return{dropProps:f,dragProps:p}},useReducedMotion:function(){return typeof window<"u"&&!!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches},useAnimationEnd:function(l,f){let p=null,y=()=>{l(),f?.once&&p&&p.removeEventListener("animationend",y)};return T=>{T?(p=T,T.addEventListener("animationend",y)):p&&(p.removeEventListener("animationend",y),p=null)}},useTween:function(l,f){let p=o(this),y=this.useReducedMotion(),b=f?.duration??400,T=f?.ease==="linear"?L=>L:L=>1-Math.pow(1-L,3),_,P=l,M={value:y?l:0,reset:()=>{}},H=()=>{n.ui&&(p?n.ui.dirty([p]):n.ui.render())},U=L=>{if(P=L,y){M.value=L,H();return}if(L===M.value)return;_&&cancelAnimationFrame(_);let k=M.value,R=performance.now(),E=I=>{let A=Math.min(1,(I-R)/b);M.value=Math.round(k+(L-k)*T(A)),A<1?(_=requestAnimationFrame(E),H()):(_=void 0,H())};_=requestAnimationFrame(E)};return M.reset=L=>{L===P&&_||U(L)},queueMicrotask(()=>U(l)),M},selfId:function(l){if(typeof l!="string"||!l)throw new Error(`[weifuwu] selfId requires a non-empty string, got ${typeof l}`);if(v.idRegistry.has(l))throw new Error(`[weifuwu] Duplicate component ID: "${l}". Each component must have a unique custom ID.`);let f=this._selfVNode;f&&(f._customId=l,v.idRegistry.set(l,f))}}}var pn=new WeakMap;function jn(e){let n=pn.get(e)??{count:0,warned:!1};n.count++,n.count>=3&&!n.warned&&(n.warned=!0,console.warn("[weifuwu] ref \u51FD\u6570\u6BCF\u6B21\u6E32\u67D3\u90FD\u53D8\u5316\uFF08\u5185\u8054 ref\uFF09\u2014\u2014ref \u56DE\u8C03\u5728\u6BCF\u6B21\u6E32\u67D3\u540E\u91CD\u65B0\u6267\u884C\uFF08\u6027\u80FD\u635F\u8017\uFF09\u3002\u628A ref \u5B9A\u4E49\u5230 mount \u4F5C\u7528\u57DF\uFF08\u7A33\u5B9A\u5F15\u7528\uFF09\uFF1Aconst listRef = (el) => {...}; return h('div', { ref: listRef })")),pn.set(e,n)}function Z(e,n,t,o,r){if(q()){let a=t!=null&&typeof t=="object"?t.type?.name??String(t.type).slice(0,20):typeof t,d=o!=null&&typeof o=="object"?o.type?.name??String(o.type).slice(0,20):typeof o;D("patchValue","old="+a+" new="+d)}if(t==null){if(o==null)return null;let a=$(o,r);return a==null?null:(n&&n.parentNode?n.parentNode.insertBefore(a,n):e.appendChild(a),a)}if(o==null)return n?(O(t,j(r)),n.remove()):O(t,j(r)),null;let c=yn(t),i=yn(o);if(c!==i){O(t,j(r));let a=$(o,r);return a==null?null:(n?.parentNode?n.parentNode.replaceChild(a,n):a.parentNode||e.appendChild(a),a)}if(i==="text")return n&&n.textContent!==String(o)&&(n.textContent=String(o)),n;let s=o,u=t;if(typeof s.type=="function"){let a=s.type;u.type===s.type&&(u._render||u._asyncDef)&&(u._render&&(s._render=u._render),s._id=u._id,s._id&&j(r).idRegistry.set(s._id,s)),u.type===s.type&&u._asyncDef&&(s._asyncDef=u._asyncDef),s._parentNode=e,n&&(s._refNode=n);let d=Object.create(r);d.ui=Object.create(r.ui);let m=d.ui;m._selfId=s._id,m._selfVNode=s,s._ctxVersion=u._ctxVersion??m._ctxVersion??0;let w=u._render&&u.type===s.type,C=Fn(u.props,s.props),h=!m._dirtySet?.has(u._id),g=s._ctxVersion===m._ctxVersion,v=a?.name??"anon";if(q()){let f=a?.name??"anon";D("tri-state-skip",f+" type="+w+" props="+C+" dirty="+h+" ver="+g)}if(w&&C&&h&&g)return s._child=u._child,n;m._dirtySet?.delete(u._id);let x;try{typeof s._render=="function"?x=s._render(s.props):x=$e(a,s.props,s,d)}catch(f){let p=r.ui?._errorHandler;p?(p(f),x=null):(console.error(`[weifuwu] Component render error in <${a?.name||"anonymous"}> (id: ${u._id??"?"}, phase: update)`,f),x=null)}let S=u._child;s._child=x;let l=Z(e,n,S,x,d);return l?s._refNode=l:s._refNode=null,l}if(s.type===G){let a=u._childNodes,d=hn(e,u,s,r,a);return s._childNodes=d,n}if(typeof s.type=="string"){if(n&&n.nodeType===1){let a=u.props?.ref,d=s.props?.ref;a!==d&&(typeof d=="function"&&d(n),typeof a=="function"&&typeof d=="function"&&jn(n)),qe(n,u.props,s.props),hn(n,u,s,r)}else if(n){O(t,j(r));let a=$(o,r);return a==null?null:(n.parentNode?.replaceChild(a,n),a)}else{let a=t.el??t._refNode;O(t,j(r)),a&&a.parentNode&&a.remove();let d=$(o,r);return d==null?null:(e.appendChild(d),d)}return n}if(s.type===B)return fe(u,s,r),null;if(Array.isArray(o)){let a=Array.isArray(t)?t:[];_e(a,o);let d=Array.from(e.childNodes),m=n?d.indexOf(n):-1,w=m>=0?de(d.slice(m),a):de(d,a);return Pe(e,a,o,r,w,n),n}return n}var mn=new Map;function qn(e){let n=mn.get(e);return n||(n=`fn:${e.name||"anon"}`,mn.set(e,n)),n}function yn(e){if(e==null||typeof e=="boolean")return"null";if(typeof e=="string"||typeof e=="number")return"text";if(Array.isArray(e))return"array";let n=e;return typeof n.type=="function"?qn(n.type):n.type===G?"fragment":n.type===B?"portal":typeof n.type=="string"?"tag:"+n.type:"unknown"}function qe(e,n,t){q()&&D("patchProps","oldKeys="+(n?Object.keys(n).length:0)+" newKeys="+Object.keys(t).length);let o=n?Object.keys(n).filter(i=>i!=="children"&&i!=="key"&&i!=="innerHTML"):[],r=t?Object.keys(t).filter(i=>i!=="children"&&i!=="key"&&i!=="innerHTML"):[],c=new Set(r);for(let i of o){if(!n)break;if(!c.has(i)){if(i==="ref")continue;i.startsWith("on")&&typeof n[i]=="function"?e.removeEventListener(i.slice(2).toLowerCase(),n[i]):i==="value"&&(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement)?e.value="":e.removeAttribute(i==="className"?"class":i)}}for(let i of r){if(i==="ref")continue;let s=n?.[i],u=t?.[i];if(i==="innerHTML")u!==s&&(e.innerHTML=String(u??""));else if(u!==s)if(i==="class"||i==="className")e instanceof SVGElement?e.setAttribute("class",gn(u)):e.className=gn(u);else if(i==="style"&&typeof u=="object"&&u!==null){let a=e.style,d=u;for(let m of Object.keys(d)){let w=d[m];w==null?m.startsWith("--")?a.removeProperty(m):a[m]="":m.startsWith("--")?a.setProperty(m,String(w)):a[m]=typeof w=="number"?w+"px":String(w)}}else if(i.startsWith("on")&&typeof u=="function"){let a=i.slice(2).toLowerCase();typeof s=="function"&&e.removeEventListener(a,s),e.addEventListener(a,u)}else i==="draggable"?e.setAttribute("draggable",u?"true":"false"):i==="value"&&(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement)?e.value=String(u??""):u===!0?e.setAttribute(i,""):u!=null&&u!==!1?e.setAttribute(i,String(u)):i==="value"&&(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement)?e.value="":e.removeAttribute(i)}}function gn(e){return typeof e=="string"?e:Array.isArray(e)?e.filter(Boolean).join(" "):e&&typeof e=="object"?Object.entries(e).filter(([,n])=>n).map(([n])=>n).join(" "):""}function je(e){if(!(e==null||typeof e!="object"))return Array.isArray(e)?void 0:e.key}function _e(e,n){if(!n.some(o=>o&&typeof o=="object"&&!Array.isArray(o)&&o.key!==void 0)){for(let o=0;o<n.length;o++){let r=n[o];r&&typeof r=="object"&&!Array.isArray(r)&&(r.key=String(o))}for(let o=0;o<e.length;o++){let r=e[o];r&&typeof r=="object"&&!Array.isArray(r)&&(r.key=String(o))}}}function de(e,n){let t=[],o=0;for(let r of n){if(r==null||typeof r=="boolean"){t.push(null);continue}let c=r;if(c.type===B){t.push(null);continue}if(c.type===G){let i=c._childNodes;Array.isArray(i)&&i.length>0?(t.push(i.slice()),o+=i.length):(t.push(e[o]?[e[o]]:null),o+=1)}else if(typeof c.type=="function")if(c._render){let i=c._childNodes??c._refNode;i==null?t.push(null):Array.isArray(i)?(t.push(i.slice()),o+=i.length):(t.push([i]),o+=1)}else t.push(e[o]?[e[o]]:null),o+=1;else typeof process<"u"&&process.env.DBG&&console.error("[map] idx=",o,"type=",c.type,"sourceLen=",e.length,"hit=",!!e[o]),t.push(e[o]?[e[o]]:null),o+=1}return t}function hn(e,n,t,o,r){q()&&D("patchChildren","old="+n.props?.children?.length+" new="+t.props?.children?.length);let c=ce(n.props?.children),i=ce(t.props?.children);_e(c,i);let s=r??Array.from(e.childNodes),u=de(s,c),a=Pe(e,c,i,o,u,r?.[0]??null),d=[];for(let m of a)m&&m.length>0&&d.push(...m);return d}function ce(e){if(e==null)return[];if(!Array.isArray(e))return[e];let n=[];for(let t of e)Array.isArray(t)?n.push(...t):n.push(t);return n}function vn(e){return e==null?[]:e instanceof DocumentFragment?Array.from(e.childNodes):[e]}function Pe(e,n,t,o,r=[],c=null){if(q()&&D("patchKeyedChildren","old="+n.length+" new="+t.length),!t.some(h=>h&&typeof h=="object"&&!Array.isArray(h)&&h.key!==void 0&&h._placement!=="remote")){let h=Math.max(n.length,t.length);for(let g=0;g<h;g++){let v=g<n.length?n[g]:null,x=g<t.length?t[g]:null;if(x==null){if(v!=null){O(v,j(o));for(let S of r[g]??[])S.remove()}}else if(v==null){let S=$(x,o);if(S!=null){let l=null;for(let f=g+1;f<r.length;f++){let p=r[f]?.[0];if(p&&p.parentNode===e){l=p;break}}l?e.insertBefore(S,l):e.appendChild(S)}}else{let S=r[g]?.[0]??null;Z(e,S,v,x,o)}}return[]}for(let h=0;h<n.length;h++){let g=n[h];if(!(g==null||typeof g=="boolean")&&je(g)===void 0)for(let v of r[h]??[])v.remove()}let s=new Map,u=0;for(let h=0;h<n.length;h++){let g=je(n[h]);g!==void 0&&s.set(g,{vnode:n[h],nodes:r[h]??[],index:u++})}let a=t.map(h=>je(h)),d=new Set(a);for(let h of[...s.keys()])if(!d.has(h)){let g=s.get(h);O(g.vnode,j(o));for(let v of g.nodes)v?.remove();s.delete(h)}let m=new Array(t.length).fill(null),w=-1,C=c&&c.parentNode===e?c:e.firstChild;for(let h=0;h<t.length;h++){let g=a[h],v=t[h],x=g!==void 0?s.get(g):void 0,S=v&&typeof v=="object"&&v._placement==="remote";if(x)if(x.nodes.length>0){if(x.index<w)for(let f of x.nodes)e.insertBefore(f,C);w=Math.max(w,x.index),Z(e,x.nodes[0],x.vnode,v,o),m[h]=v._childNodes??x.nodes.filter(f=>f.parentNode===e),C=m[h][m[h].length-1]?.nextSibling??null}else if(S)fe(x.vnode,v,o),m[h]=[];else{let l=Z(e,null,x.vnode,v,o);m[h]=vn(l);for(let p of m[h])e.insertBefore(p,C);C=m[h][m[h].length-1]?.nextSibling??null}else if(S)oe(v,o),m[h]=[];else{let l=$(v,o);m[h]=vn(l);for(let p of m[h])e.insertBefore(p,C);C=m[h][m[h].length-1]?.nextSibling??null}}return m}function $n(e,n){if(e===n)return!0;if(Array.isArray(e)&&Array.isArray(n)){if(e.length!==n.length)return!1;for(let t=0;t<e.length;t++)if(e[t]!==n[t])return!1;return!0}return e===n}function Fn(e,n){if(e===n)return!0;if(!e||!n)return!1;let t=new Set([...Object.keys(e),...Object.keys(n)]);for(let o of t)if(o!=="key"){if(o==="children"){if(!$n(e[o],n[o]))return!1}else if(e[o]!==n[o])return!1}return!0}var ee=W(),Fe="http://www.w3.org/2000/svg",Be=new Set(["svg","path","circle","line","rect","text","g","polyline","polygon","ellipse","defs","use","clipPath","mask","linearGradient","radialGradient","stop","tspan"]);function $(e,n){let t=n.browser??ee;if(q()){let s=e!=null&&typeof e=="object"?e.type?.name??String(e.type).slice(0,20):typeof e;D("renderValue","type="+s,{depth:an()})}if(e==null||typeof e=="boolean")return q()&&be(),null;if(typeof e=="string"||typeof e=="number")return q()&&be(),t.createTextNode(String(e));if(Array.isArray(e)){let s=Gn(e,n);return q()&&be(),s}let o=e;if(o.type===B)return oe(o,n),null;if(o.type===G){let s=t.createDocumentFragment(),u=o.props?.children==null?[]:Array.isArray(o.props.children)?o.props.children:[o.props.children];for(let a of u){let d=$(a,n);d!=null&&s.appendChild(d)}return o._childNodes=Array.from(s.childNodes),s}if(typeof o.type=="function")return Kn(o.type,o.props,o,n);let r=o.type,c=Be.has(r)?t.createElementNS(Fe,r):t.createElement(r);if(!c)return null;o.el=c;let i;for(let[s,u]of Object.entries(o.props??{}))s==="children"||s==="key"||s==="value"||s==="innerHTML"||wn(c,s,u);if("value"in(o.props??{})&&c instanceof HTMLSelectElement?i=o.props.value:"value"in(o.props??{})&&wn(c,"value",o.props.value),"innerHTML"in(o.props??{}))c.innerHTML=String(o.props.innerHTML??"");else{let s=Ke(o.props?.children);for(let u of s){let a=$(u,n);if(a!=null&&(c.appendChild(a),u&&typeof u=="object"&&typeof u.type=="function")){let d=u;d._parentNode||(d._parentNode=c,d._refNode=a)}}}return i!==void 0&&(c.value=String(i)),typeof o.props?.ref=="function"&&Ve(o.props.ref,c,"mount",r),c}function Bn(e){let n=e.__scheduleRender;if(typeof n=="function"){n();return}let t=e.ui;t&&typeof t.render=="function"&&t.render(["_wf_root"])}function $e(e,n,t,o){if(q()){let a=e?.name??(typeof e=="function"?"fn":typeof e);D("mountComponent",a+" id="+String(t.id??"").slice(0,10))}let r=globalThis;if(r.__wf_mountCount===void 0&&(r.__wf_mountCount=0),++r.__wf_mountCount>500)throw r.__wf_mountCount=0,new Error("[wf-render] mountComponent \u8D85\u8FC7 500 \u6B21\u2014\u2014\u6E32\u67D3\u6B7B\u5FAA\u73AF\uFF08\u65E0\u9650\u6302\u8F7D\uFF09");let c=o.browser??ee,i=t._asyncDef;if(i instanceof Promise)return Te(Ce,{});if(typeof i=="function")return t._render=i,i(n);o.ui?.setMounting?.(!0);let s;try{s=e(n,o)}finally{o.ui?.endMounting?.()}if(s instanceof Promise){let a=s;return t._asyncDef=a,a.then(d=>{if(typeof d!="function")throw new Error(`Component ${e.name||"anonymous"} async factory must return a render function. (props) => VNode pattern.`);t._asyncDef=d,Bn(o)},()=>{}),Te(Ce,{})}if(typeof s!="function")throw new Error(`Component ${e.name||"anonymous"} must return a render function. Use (init_props, ctx) => (props) => VNode pattern.`);let u=s;return t._render=u,u(n)}function Kn(e,n,t,o){let r=o.browser??ee;if(!t._id){let a=j(o);t._id=me(a),a.idRegistry.set(t._id,t)}let c=Object.create(o);t.type===Oe&&(c._suspense={fallback:t.props?.fallback}),c.ui=Object.create(o.ui);let i=c.ui;i._selfId=t._id,i._selfVNode=t,t._ctxVersion=i._ctxVersion??0;let s;try{s=$e(e,n,t,c)}catch(a){let d=o.ui?._errorHandler;d?(d(a),s=null):(console.error(`[weifuwu] Component render error in <${e.name||"anonymous"}> (id: ${t._id??"?"}, phase: mount)`,a),s=null)}if(s==null){if(t._child=null,c.ui?._errorHandler){let d=r.createComment("wf-empty");return t._refNode=d,d}return null}t._child=s;let u=$(s,c);return t._refNode||(t._refNode=u),u}function Gn(e,n){let o=(n.browser??ee).createDocumentFragment();for(let r of e){let c=$(r,n);c!=null&&o.appendChild(c)}return o}function Jn(){let e=ee,n=e.byId("__wf_portal");if(!n){if(n=e.createElement("div"),!n)throw new Error("[ui-dom] portal container creation failed");n.id="__wf_portal",n.style.cssText="position:fixed;inset:0;pointer-events:none;z-index:9999",e.bodyAppend(n)}return n}function oe(e,n){let t=n.browser??ee,o=Jn(),r=t.createElement("div");r.style.pointerEvents="auto",o.appendChild(r),e._remoteEl=r;let c=ce(e.props?.children);e._child=c;for(let i of c){let s=$(i,n);s!=null&&r.appendChild(s)}}function fe(e,n,t){let o=t.browser??ee,r=e?._remoteEl;if(n._remoteEl=r,!r){oe(n,t);return}let c=ce(n.props?.children),i=e._child||[];n._child=c,_e(i,c);let s=de(Array.from(r.childNodes),i);Pe(r,i,c,t,s,s[0]?.[0]??null)}function Ke(e){if(e==null)return[];if(!Array.isArray(e))return[e];let n=[];for(let t of e)Array.isArray(t)?n.push(...t):n.push(t);return n}function wn(e,n,t){if(n!=="ref")if(n==="class"||n==="className")e instanceof SVGElement?e.setAttribute("class",String(t??"")):e.className=String(t??"");else if(n==="style"&&typeof t=="object"&&t!==null){let o=e.style;for(let r of Object.keys(t)){let c=t[r];c!=null&&(r.startsWith("--")?o.setProperty(r,String(c)):o[r]=typeof c=="number"?c+"px":String(c))}}else n.startsWith("on")&&typeof t=="function"?e.addEventListener(n.slice(2).toLowerCase(),t):n==="draggable"?e.setAttribute("draggable",t?"true":"false"):n==="value"&&(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement)?e.value=String(t??""):t===!0?e.setAttribute(n,""):t!=null&&t!==!1&&e.setAttribute(n,String(t))}function Yn(e,n,t){e.innerHTML="";let o=$(n,t);o instanceof Node&&e.appendChild(o)}function zn(e){O(e,ie())}function Ge(e){e.node=e.node?e.node.nextSibling:null}function Xn(e,n){e.node&&e.node.parentNode?e.node.parentNode.insertBefore(n,e.node):e.parent.appendChild(n)}function Qn(e,n){e.node&&e.node.parentNode?(e.node.parentNode.replaceChild(n,e.node),Ge(e)):e.parent.appendChild(n)}async function pe(e,n,t){let o=n.browser??W();if(e==null||typeof e=="boolean")return null;if(typeof e=="string"||typeof e=="number"){let u=String(e);if(t.node&&t.node.nodeType===3)return t.node.textContent!==u&&(t.node.textContent=u),Ge(t),t.node;let a=o.createTextNode(u);return Xn(t,a),a}if(Array.isArray(e)){let u=null;for(let a of e){let d=await pe(a,n,t);d!=null&&!u&&(u=d)}return u}let r=e;if(r.type===B||r.type===G){let u=r.props?.children,a=u==null?[]:Array.isArray(u)?u:[u],d=null;for(let m of a){let w=await pe(m,n,t);w!=null&&!d&&(d=w)}return d}if(typeof r.type=="function")return Zn(r,n,t);let c=r.type,i=r.props??{},s;if(t.node&&t.node.nodeType===1&&t.node.tagName.toLowerCase()===c.toLowerCase()?(s=t.node,Ge(t)):(s=Be.has(c)?o.createElementNS(Fe,c):o.createElement(c),Qn(t,s)),r.el=s,qe(s,null,i),!("innerHTML"in i)){let u={parent:s,node:s.firstChild},a=Ke(i.children);for(let d of a){let m=await pe(d,n,u);if(m!=null&&m.parentNode!==s&&s.appendChild(m),d&&typeof d=="object"&&typeof d.type=="function"){let w=d;w._parentNode||(w._parentNode=s,w._refNode=m)}}for(;u.node;){let d=u.node;u.node=d.nextSibling,d.parentNode?.removeChild(d)}}return"value"in i&&s instanceof HTMLSelectElement&&(s.value=String(i.value??"")),typeof i.ref=="function"&&i.ref(s),s}async function Zn(e,n,t){if(!e._id){let u=j(n);e._id=me(u),u.idRegistry.set(e._id,e)}let o=Object.create(n);o.ui=Object.create(n.ui);let r=o.ui;r._selfId=e._id,r._selfVNode=e,e._ctxVersion=r._ctxVersion??0;let c=e.type,i;try{let u=c(e.props??{},o);if(u instanceof Promise&&(u=await u),typeof u!="function")throw new Error(`Component ${c.name||"anonymous"} must return a render function. Use (init_props, ctx) => (props) => VNode pattern.`);e._render=u,i=u(e.props??{})}catch(u){let a=n.ui?._errorHandler;a?(a(u),i=null):(console.error(`[weifuwu] Component hydration error in <${c.name||"anonymous"}> (id: ${e._id??"?"})`,u),i=null)}if(i==null)return e._child=null,null;e._child=i;let s=await pe(i,o,t);return e._refNode||(e._refNode=s),s}async function Je(e,n,t){let o={parent:e,node:e.firstChild};for(await pe(n,t,o);o.node;){let r=o.node;o.node=r.nextSibling,r.parentNode?.removeChild(r)}}function et(e,n){let t=W(),o=typeof n.root=="string"?t.query(n.root):n.root;if(!o)throw new Error(`uiServe: root not found: ${n.root}`);let r=o,c=!!n.hydrate;c||(r.innerHTML="");let i=ie(),s=new Set,u=0,a=new Set,d=new Map,m=!1,w=!1,C=[];function h(k){C.push(w),w=k}function g(){w=C.pop()??!1}let v={params:{},query:{}};v.__scheduleRender=M;let x=new Map,S=globalThis.__DATA__??window.__DATA__;if(S&&typeof S=="object")for(let[k,R]of Object.entries(S))x.set(k,{value:R});v.data={async get(k,R){let E=x.get(k);if(E&&"value"in E)return E.value;if(E?.promise)return E.promise;if(!R)return;let I=Promise.resolve().then(()=>R()).then(A=>(x.set(k,{value:A}),A));return x.set(k,{promise:I}),I},set(k,R){x.set(k,{value:R})},has(k){return x.has(k)}};let l=!1;function f(){s.size>0&&!l&&(l=!0,queueMicrotask(()=>{l=!1;let k=[...s];s.clear(),k.length>0&&(D("flushDirty","ids="+JSON.stringify(k)),p(k))}))}function p(k){if(!m){m=!0;for(let R of k){let E=i.idRegistry.get(R);if(!E||!E._render)continue;D("renderByIds-start",R+" render="+String(E._render.name).slice(0,30)),v.ui._dirtySet?.delete(R);let I=E._child,A=E._render(E.props);if(E._child=A,I&&I._placement==="remote"||A&&A._placement==="remote"){I&&A?fe(I,A,v):A?oe(A,v):I&&O(I,i);continue}if(!E._parentNode&&E._refNode){let J=E._refNode.parentNode;J&&(E._parentNode=J)}if(E._parentNode){let J=Z(E._parentNode,E._refNode??null,I,A,v);J&&J!==E._refNode?E._refNode=J:J||(E._refNode=null)}D("renderByIds-done",R)}m=!1,f()}}let y=null;function b(){return y||(y=Qe(k=>v.ui.render(k))),y}v.browser=t,v.__registry=i,v.ui=fn({ctx:v,renderByIds:p,getSelfId:k=>k?._selfId??v.ui?._selfId,dirtyBatch:s,dirtySet:a,mediaRegistry:d,popupTrackers:b().popupTrackers,scrollTrackers:b().scrollTrackers,schedulePopupRecompute:b().schedulePopupRecompute,ensurePopupListeners:b().ensurePopupListeners,destroyPopupListeners:b().destroyPopupListeners,isRendering:()=>m,isMounting:()=>w,setMounting:h,endMounting:g,registry:i}),ye(i,k=>{for(let R of[...d.keys()])if(R.startsWith(`media:${k}:`)||R===`bp:${k}`){let E=d.get(R);E?.mql&&E.handler&&E.mql.removeEventListener("change",E.handler),E?.mqls?.forEach(({mql:I,handler:A})=>I.removeEventListener("change",A)),d.delete(R)}b().cleanupTrackers(k)}),v.__rerender=()=>M(),v.app={navigate:k=>{e.mode==="hash"?t.setHash("#"+k):t.navigate(k),M()}};let T=null,_=!1,P=!1;function M(){P||(P=!0,queueMicrotask(()=>{P=!1,H()}))}async function H(){if(!_){D("doRender","path="+e.getPath()),_=!0;try{let k=e.getPath();if(v.route={path:k,params:v.params,query:v.query},!v.__state){let E=Q(()=>{_||M()});v.__state=E;let I=v.ui.$;v.ui.$=function(){return this&&this._selfVNode?I.call(this):E}}let R=await e.execute(window.location,v,k);if(T==null){if(R){let E=c&&r.firstElementChild?(Je(r,R,v),r.firstChild):$(R,v);E&&E.parentNode!==r&&r.appendChild(E)}}else{let E=Z(r,r.firstChild,T,R,v);E&&E.parentNode!==r&&r.appendChild(E)}T=R}catch(k){if(console.error("[ui-dom] render error:",k),T==null){let R=t.createElement("div");R.className="ui-dom-error",R.textContent=`\u6E32\u67D3\u9519\u8BEF: ${k?.message??String(k)}`,r.appendChild(R)}}finally{_=!1}}}let U=()=>M();t.addEventListener("popstate",U);let L=()=>M();return e.mode==="hash"&&t.addEventListener("hashchange",L),M(),{get ctx(){return v},close(){t.removeEventListener("popstate",U),e.mode==="hash"&&t.removeEventListener("hashchange",L),T&&O(T,i),b().destroy(),i.idRegistry.clear(),r.innerHTML="",T=null}}}function nt(e,n,t=400){let o=!1,r=()=>{o||(o=!0,e.removeEventListener("animationend",r),clearTimeout(c),n())};e.addEventListener("animationend",r);let c=setTimeout(r,t)}function re(e,n){return Object.assign(Object.create(e),n)}function tt(e){let n={baseURL:e?.baseURL??"",headers:{"Content-Type":"application/json",...e?.headers}},t=e?.onRequest,o=e?.onResponse,r=e?.timeout??0;async function c(i,s,u,a){let d=n.baseURL+s,m={method:i,headers:{...n.headers,...a?.headers}},w=e?.token?.();w&&!m.headers.Authorization&&(m.headers.Authorization=`Bearer ${w}`);let C=r>0,h=!!a?.signal,g=null,v=null;(C||h)&&(g=new AbortController,m.signal=g.signal,C&&(v=setTimeout(()=>g.abort(new Error("Request timed out")),r)),h&&a.signal.addEventListener("abort",()=>g.abort())),u!==void 0&&i!=="GET"&&i!=="HEAD"&&(m.body=JSON.stringify(u));let x={url:d,init:m};t&&(x=t(x));try{let S=await fetch(x.url,x.init);if(o)return o(S);if(!S.ok){let p=await S.text().catch(()=>"");throw new Ye(S.status,p||S.statusText)}let l=S.headers.get("content-length");if(S.status===204||l==="0")return;let f=(S.headers.get("content-type")||"").toLowerCase();return f.includes("application/json")||f.includes("json")?S.json():S.text()}finally{v&&clearTimeout(v)}}return i=>re(i,{api:{get:(u,a)=>c("GET",u,void 0,a),post:(u,a,d)=>c("POST",u,a,d),put:(u,a,d)=>c("PUT",u,a,d),patch:(u,a,d)=>c("PATCH",u,a,d),delete:(u,a)=>c("DELETE",u,void 0,a)}})}var Ye=class extends Error{status;body;constructor(n,t){super(`API Error ${n}: ${t}`),this.name="ApiError",this.status=n,this.body=t}};function ot(e){try{let n=e.split(".");if(n.length!==3)return null;let t=n[1].replace(/-/g,"+").replace(/_/g,"/");return JSON.parse(atob(t))}catch{return null}}function rt(e){let n=ot(e);return n?.exp?n.exp*1e3-3e4<Date.now():!0}function st(e){let n=e?.storage??localStorage,t=e?.tokenKey??"weifuwu_token",o=e?.userKey??"weifuwu_user",r=e?.refreshTokenKey??"weifuwu_refresh",c=e?.refreshEndpoint??"/api/auth/refresh";return i=>{let s=n.getItem(t),u=n.getItem(o),a={token:s,user:u?JSON.parse(u):null,get isLoggedIn(){return this.token!==null},login(d,m,w){a.token=d,a.user=m,n.setItem(t,d),n.setItem(o,JSON.stringify(m)),w&&n.setItem(r,w)},logout(){a.token=null,a.user=null,n.removeItem(t),n.removeItem(o),n.removeItem(r)},setUser(d){a.user=d,n.setItem(o,JSON.stringify(d))},async refresh(){let d=n.getItem(r);if(!d)return!1;try{let m=await fetch(c,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:d})});if(!m.ok)return a.logout(),!1;let w=await m.json();return a.token=w.token,n.setItem(t,w.token),w.refreshToken&&n.setItem(r,w.refreshToken),!0}catch{return!1}}};return s&&rt(s)&&a.refresh().catch(()=>{}),re(i,{auth:a})}}function it(e={}){let n=e.url??"/ws",t=e.reconnectInterval??3e3,o=e.maxReconnect??10,r=e.pingInterval??3e4,c=e.pingTimeout??1e4;return i=>{let s=new Set,u=null,a=0,d=null,m=null,w=null,C=!1,h={isConnected:!1,onMessage:l=>(s.add(l),()=>{s.delete(l)}),send:l=>{u?.readyState===WebSocket.OPEN&&u.send(JSON.stringify(l))},_connect:g,close:()=>{C=!0,S(),u?.close(),u=null,h.isConnected=!1}};async function g(){if(!C)try{u=new WebSocket(n),u.onopen=()=>{h.isConnected=!0,a=0,v()},u.onmessage=l=>{try{let f=JSON.parse(l.data);for(let p of s)p(f)}catch{}x()},u.onclose=()=>{h.isConnected=!1,S(),!C&&a<o&&(a++,d=setTimeout(g,t*Math.min(a,5)))},u.onerror=()=>{u?.close()}}catch{C||(d=setTimeout(g,t))}}function v(){r<=0||(m=setInterval(()=>{u?.readyState===WebSocket.OPEN&&u.send(JSON.stringify({type:"ping"})),w=setTimeout(()=>{u?.close()},c)},r))}function x(){clearTimeout(w)}function S(){clearInterval(m),clearTimeout(w),clearTimeout(d)}return g(),re(i,{ws:h})}}function Ne(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}var lt=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function at(e){return typeof e=="string"?e:Array.isArray(e)?e.filter(Boolean).join(" "):e&&typeof e=="object"?Object.entries(e).filter(([,n])=>n).map(([n])=>n).join(" "):""}function ut(e){return typeof e=="string"?e:e&&typeof e=="object"?Object.entries(e).filter(([,n])=>n!=null).map(([n,t])=>`${n}:${typeof t=="number"?t+"px":String(t)}`).join(";"):""}function bn(e,n){let t=new Set,o={$:()=>Q(()=>{}),dirty:()=>{},render:()=>{},selfId:i=>{if(t.has(i))throw new Error(`[weifuwu] Duplicate component ID: "${i}"`);t.add(i)},useMedia:()=>{},useBreakpoint:()=>{},usePopupPosition:()=>({top:0,left:0,refresh:()=>{}}),useHoverCapable:()=>!1,useVisualViewport:()=>({height:0,offsetTop:0,keyboardOpen:!1}),useLongPress:()=>({}),useInView:()=>({isIn:!1,ready:!1,observe:()=>{},refresh:()=>{},disconnect:()=>{}}),useScrollPosition:()=>({y:0,refresh:()=>{}}),useStableRef:i=>s=>{s&&i?.(s)},useGlobalKey:()=>()=>{},useReducedMotion:()=>!1,useAnimationEnd:()=>()=>{},useTween:i=>{let s={value:i,reset:u=>{s.value=u}};return s},useDrag:()=>({onPointerDown:()=>{}}),useDragDrop:()=>({dropProps:{},dragProps:{}}),useControlled:i=>({value:i.value,setValue:s=>{i.onChange?.(s)},controlled:i.value!==void 0}),useControlledInput:i=>({value:i.value,setValue:s=>{i.onChange?.(s)},controlled:i.value!==void 0,keyword:"",setKeyword:()=>{},selectedLabel:"",setSelectedLabel:()=>{}}),useOpen:i=>({get open(){return!!i.open},setOpen:s=>{i.onOpenChange?.(s)},triggerProps:{}}),useAsync:()=>({data:void 0,loading:!0,error:void 0,reload:()=>{}}),usePopup:()=>({open:!1,setOpen:()=>{},wrapProps:{},portal:()=>null,refresh:()=>{}}),usePresence:()=>({phase:"closed",ref:()=>{},sync:i=>i?"open":"closed"}),useDialog:()=>({phase:"closed",rootRef:()=>{},panelRef:()=>{},sync:i=>i?"open":"closed"}),useChat:()=>({messages:[],input:"",streaming:!1,error:null,usage:null,step:null,send:()=>{},stop:()=>{},retry:()=>{},clear:()=>{},approve:async()=>{},dispose:()=>{}})},r={activeElement:()=>null,byId:()=>null,query:()=>null,queryAll:()=>null,createElement:()=>null,createElementNS:()=>null,createDocumentFragment:()=>null,createComment:()=>null,createTextNode:()=>null,addEventListener:()=>{},removeEventListener:()=>{},scrollTo:()=>{},matchMedia:()=>null,visualViewport:()=>null,scrollingElement:()=>null,bodyElement:()=>null,bodyAppend:()=>{},bodyRemove:()=>{},clearBody:()=>{},event:()=>new Event("wf-ssr"),dispatchEvent:()=>!1,navigate:()=>{},createTreeWalker:()=>null,copyText:async()=>!1,execCommand:()=>!1,selectionText:()=>null,getSelection:()=>null,queryCommandState:()=>!1,queryCommandValue:()=>"",viewportHeight:()=>0,viewportWidth:()=>0,pathname:()=>"",scrollTop:()=>0,hash:()=>"",setHash:()=>{},timeout:()=>0,rootElement:()=>null,storageGet:()=>null,storageSet:()=>{}},c=Object.create(e??{});return c.ui=o,c.browser=r,c.data={async get(i,s){if(n.has(i))return n.get(i);if(!s)return;let u=await s();return n.set(i,u),u},set(i,s){n.set(i,s)},has(i){return n.has(i)}},c}async function ne(e,n){if(e==null||typeof e=="boolean")return"";if(typeof e=="string"||typeof e=="number")return Ne(String(e));if(Array.isArray(e)){let a="";for(let d of e)a+=await ne(d,n);return a}let t=e;if(t.type===B||t.type===G)return ne(t.props?.children,n);if(typeof t.type=="function"){let a=Object.create(n),d;try{d=t.type(t.props??{},a)}catch(m){throw m}if(d instanceof Promise&&(d=await d),typeof d!="function")throw new Error(`Component ${t.type.name||"anonymous"} must return a render function. Use (init_props, ctx) => (props) => VNode pattern.`);return ne(d(t.props??{}),a)}let o=t.type,r=t.props??{},c=[],i;for(let[a,d]of Object.entries(r))if(!(a==="children"||a==="key")&&a!=="ref"&&!(a.startsWith("on")&&typeof d=="function")){if(a==="innerHTML"){i=String(d??"");continue}if(a==="class"||a==="className"){let m=at(d);m&&c.push(` class="${Ne(m)}"`);continue}if(a==="style"&&d&&typeof d=="object"){c.push(` style="${Ne(ut(d))}"`);continue}if(d===!0){c.push(` ${a}`);continue}d===!1||d==null||c.push(` ${a}="${Ne(String(d))}"`)}let s=c.join("");if(lt.has(o))return`<${o}${s}>`;if(i!==void 0)return`<${o}${s}>${i}</${o}>`;let u=await ne(r.children,n);return`<${o}${s}>${u}</${o}>`}async function dt(e,n,t,o={}){let r=o.data??new Map,c=bn(t,r);return await ne({type:e,props:n??{},key:void 0},c)}function Cn(e){return`<script>window.__DATA__=${JSON.stringify(Object.fromEntries(e)).replace(/</g,"\\u003c")};<\/script>`}async function ct(e,n){let t=new Map,r=bn({params:{},query:{}},t),c=n.url.split("?")[0].split("#")[0],i=e.match(c);r.params=i.params,r.query=Object.fromEntries(new URLSearchParams(n.url.split("?")[1]??""));let s=new URL(n.url.startsWith("http")?n.url:`http://localhost${n.url.startsWith("/")?n.url:"/"+n.url}`),u=await e.execute(s,r,c),a=await ne(u,r),d=Cn(t),m=i.title??n.title??"",w=n.rootId??"root",C=(n.styles??[]).map(g=>` <link rel="stylesheet" href="${g}">`).join(`
7
- `),h=`<!DOCTYPE html>
5
+ `);r=i.pop()??"";for(let l of i){let u="message",d="";for(let a of l.split(`
6
+ `))a.startsWith("event: ")?u=a.slice(7):a.startsWith("data: ")&&(d+=a.slice(6));if(d)try{yield{name:u,data:JSON.parse(d)}}catch{}}}}finally{n.releaseLock()}}function In(e,n,t){t&&(e.length>=1e3&&e.shift(),e.push(n))}function On(e){return e===401||e===403?"auth_failed":e===429?"rate_limited":e>=500?"provider_error":"invalid_request"}function Un(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`trace-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function Fe(e,n){let t={messages:[],input:"",streaming:!1,error:null,usage:null,step:null},r=new Set,s=on(t,sn,n,()=>{for(let l of[...r])l()});Object.assign(t,s),t.subscribe=l=>(r.add(l),()=>{r.delete(l)});let i=e.selfId();if(i){let l=e.onUnmount(u=>{u===i&&(s.dispose(),l())})}return t}function Be(e,n){let t=e.selfId(),r;return t&&(r=n.subscribe(()=>e.render([t])),e.onUnmount(()=>r?.())),n}function an(e){let n=new Map;async function t(s){let i=n.get(s);if(i)return await i,n.has(s)?void 0:t(s);let l=r(s);n.set(s,l);try{await l}finally{n.delete(s)}}async function r(s){let i=e.registry.idRegistry.get(s);if(!(!i||typeof i._render!="function"))try{let l={browser:e.ctx.browser,registry:e.registry,ctxVersion:e.ctx?.ui?._ctxVersion??0},u=await i._render(i.props),d=await M(u,e.ctx,i._child,e.registry)??null,a=i._child;i._child=d;let c=i._parentNode??i._refNode?.parentNode??e.rootEl??null;if(c){let p=O(c,i._refNode??null,a,d,l);p?i._refNode=p:i._refNode=null}}catch(l){e.onError?e.onError(l):console.error("[weifuwu] render error:",l?.stack??l)}}function o(s){if(s==null){let i=e.ctx.ui?._selfId;return i?t(i):Promise.resolve()}return Promise.all(s.map(i=>t(i))).then(()=>{})}return{render:o}}function fe(e){let n=e.registry??Te(),t={_selfId:"_wf_root",_mounting:!1,_ctxVersion:0,_rootVNodeId:void 0},r={browser:e.browser,__registry:n},o=e.renderer??an({registry:n,ctx:r,rootEl:e.root}),s=!1;t.render=function(f){if(f==null){let h=this._selfId!=="_wf_root"&&this._selfId?this._selfId:t._rootVNodeId;return h?o.render([h]):(s||(s=!0,console.warn("[weifuwu] render() \u65E0\u53C2\u4F46\u65E0\u6E32\u67D3\u76EE\u6807\uFF1A\u9875\u9762\u6839\u662F native vnode\uFF08UIHandler \u76F4\u63A5\u8FD4\u56DE vnode \u7684\u9875\u9762\u5F62\u6001\uFF09\uFF0C\u5185\u90E8\u72B6\u6001\u6E32\u67D3\u65E0\u6548\u3002\u6539\u7528 async \u7EC4\u4EF6\u5F62\u6001\uFF08const Page: Component = async ... => (props) => ...\uFF09\u6216 createStore + useExternal \u5171\u4EAB\u72B6\u6001\u3002")),Promise.resolve())}return o.render(f)},t.setMounting=f=>{t._mounting=f},t.endMounting=()=>{t._mounting=!1},r.ui=t;let i=Qe(f=>{for(let h of f)o.render([h])}),{mediaRegistry:l,popupTrackers:u,scrollTrackers:d,ensurePopupListeners:a,destroyPopupListeners:c,cleanupTrackers:p}=i;Ne(n,f=>{p(f),u.has(f)&&u.delete(f)});let w=new Set,b=new Map,m=new Map,g=new Map,y=f=>({selfId:()=>{let h=f?._selfVNode?._id??f?._selfId;return typeof h=="string"?h:void 0},render:h=>o.render(h),browser:e.browser,onUnmount:h=>Ne(n,h),registry:n,mediaRegistry:l,popupTrackers:u,scrollTrackers:d,isMounting:()=>t._mounting===!0,warned:w,uncontrolledValues:b,inputStates:m,openStates:g,ensurePopupListeners:a});return t.bumpCtxVersion=()=>{t._ctxVersion=(t._ctxVersion??0)+1},t.selfId=function(f){if(typeof f!="string"||!f)throw new Error(`[weifuwu] selfId requires a non-empty string, got ${typeof f}`);if(n.idRegistry.has(f))throw new Error(`[weifuwu] Duplicate component ID: "${f}". Each component must have a unique custom ID.`);let h=this._selfVNode;h&&(h._customId=f,n.idRegistry.set(f,h))},t.useChat=function(f){return Fe(y(this),f)},t.useMedia=function(f,h){return Re(y(this),f,h)},t.useBreakpoint=function(f,h){return Ae(y(this),f,h)},t.usePopupPosition=function(f){return ce(y(this),f)},t.useHoverCapable=function(){return J(y(this))},t.useStableRef=function(f,h){return Ve(y(this),f,h)},t.useVisualViewport=function(){return Me(y(this))},t.usePopup=function(f){return je(y(this),f)},t.useLongPress=function(f){return ke(y(this),f)},t.useInView=function(f){return Le(y(this),f)},t.useScrollPosition=function(f){return He(y(this),f)},t.useAsync=function(f){return Oe(y(this),f)},t.useControlled=function(f){return ue(y(this),f)},t.useControlledInput=function(f){return Ie(y(this),f)},t.useOpen=function(f){return $e(y(this),f)},t.usePresence=function(f){return Q(y(this),f)},t.useGlobalKey=function(f){return Ue(y(this),f)},t.useDrag=function(f){return We(y(this),f)},t.useDragDrop=function(f){return De(y(this),f)},t.useExternal=function(f){return Be(y(this),f)},t.useReducedMotion=function(){return le(y(this))},t.useAnimationEnd=function(f,h){return _e(y(this),f,h)},t.useTween=function(f,h){return Se(y(this),f,h)},t.destroyPopupListeners=c,{ctx:r,registry:n,renderer:o,rootUi:t,destroyPopupListeners:c}}function Wn(e){let{ctx:n,registry:t,renderer:r,rootUi:o,destroyPopupListeners:s}=fe(e),i=null,l=null;return{ctx:n,registry:t,renderer:r,async mount(d){i=d;let a=await M(d,n,void 0,t);e.root.innerHTML="";let c=S(a,n,e.browser);c!=null&&e.root.appendChild(c),l=a?._child??a,o._rootVNodeId=a?._id},async rerender(){if(i==null)return;let d=await M(i,n,i,t,{force:!0}),a=i,c=l,p=a._child,w=e.root.firstChild;O(e.root,w,c,p,{browser:e.browser,registry:t,ctxVersion:n?.ui?._ctxVersion??0,force:!0}),l=p},unmount(){for(let[,d]of t.idRegistry)try{R(d,t)}catch(a){console.error("[weifuwu] unmount ref error",a)}e.root.innerHTML="",t.idRegistry.clear(),s()}}}function Dn(e){return e.__registry??(e.__registry=Te())}function jn(e,n,t,r){let o=Dn(t),s=t.browser??_();return Promise.resolve(M(n,t,void 0,o)).then(()=>{let i=S(n,t,s);if(i!=null&&e.appendChild(i),n._id&&o){let l=o.idRegistry.get(n._id);l&&(l._parentNode=e)}r?.onMounted?.()}).catch(i=>console.error("[weifuwu] command mount error",i)),{id:n._id??""}}function $n(e,n,t){let r=t.__registry;n&&r&&(R(n,r),n._id&&oe(r,n._id)),e.remove()}function qn(){let e=_(),n=e.createElement("div");return n?(e.bodyAppend(n),n):null}function Fn(e,n){let t=_(),r=typeof n.root=="string"?t.query(n.root):n.root;if(!r)throw new Error(`uiServe: root not found: ${n.root}`);let o=r;!n.hydrate&&!n.loading&&(o.innerHTML="");let{ctx:i,registry:l,renderer:u,rootUi:d,destroyPopupListeners:a}=fe({browser:t,root:o}),c=new Map,p=globalThis.__DATA__??window.__DATA__;if(p&&typeof p=="object")for(let[C,T]of Object.entries(p))c.set(C,{value:T});i.data={async get(C,T){let E=c.get(C);if(E&&"value"in E)return E.value;if(E?.promise)return E.promise;if(!T)return;let V=Promise.resolve().then(()=>T()).then(W=>(c.set(C,{value:W}),W));return c.set(C,{promise:V}),V},set(C,T){c.set(C,{value:T})},has(C){return c.has(C)}},i.route={params:{},query:{},path:""};let w=null,b="",m=0,g,y=new Promise(C=>{g=C}),f=!1;async function h(C,T){let E=++m,V={pathname:C,search:""};i.route.path=C;let W;try{W=await e.execute(V,i,C)}catch(A){W=j("div",{class:"ui-dom-error"},`\u9875\u9762\u6E32\u67D3\u5931\u8D25: ${A?.message??String(A)}`)}if(f||E!==m)return;let U;try{U=await M(W,i,w,l)}catch(A){U=j("div",{class:"ui-dom-error"},`\u7EC4\u4EF6\u6E32\u67D3\u5931\u8D25: ${A?.message??String(A)}`)}if(!(f||E!==m)){if(T){o.innerHTML="";let A=S(U,i,t);A!=null&&o.appendChild(A)}else if(w!==void 0){let A=w;w=U;let me=A?.el??A?._refNode??null;O(o,me,A,U,{browser:t,registry:l,ctxVersion:i?.ui?._ctxVersion??0})}w=U,b=C,d._rootVNodeId=U?._id}}let x=t.pathname();h(x,!0).finally(()=>{f||g()});let P=()=>{let C=t.pathname();C!==b&&h(C,!1)};return t.addEventListener("popstate",P),{close(){f=!0,t.removeEventListener("popstate",P),a(),l.idRegistry.clear()},ready:y,ctx:i}}function Ke(e){e.node=e.node?e.node.nextSibling:null}function Bn(e,n){e.node&&e.node.parentNode?e.node.parentNode.insertBefore(n,e.node):e.parent.appendChild(n)}function Kn(e,n){e.node&&e.node.parentNode?(e.node.parentNode.replaceChild(n,e.node),Ke(e)):e.parent.appendChild(n)}function zn(e,n){for(let[t,r]of Object.entries(n))t==="children"||t==="key"||t==="innerHTML"||Y(e,t,r)}function ee(e,n,t){let r=n.browser??_();if(e==null||typeof e=="boolean")return null;if(typeof e=="string"||typeof e=="number"){let u=String(e);if(t.node&&t.node.nodeType===3)return t.node.textContent!==u&&(t.node.textContent=u),Ke(t),t.node;let d=r.createTextNode(u);return Bn(t,d),d}if(Array.isArray(e)){let u=null;for(let d of e){let a=ee(d,n,t);a!=null&&!u&&(u=a)}return u}let o=e;if(o.type===H||o.type===L){let u=o.props?.children,d=u==null?[]:Array.isArray(u)?u:[u],a=null;for(let c of d){let p=ee(c,n,t);p!=null&&!a&&(a=p)}return a}if(typeof o.type=="function"){let u=o._child;if(u==null){if(typeof o._render!="function")throw new Error(`[vdom] component ${o.type.name||"anonymous"} not built before hydration`);return o._child=null,null}let d=ee(u,n,t);return o._refNode||(o._refNode=d),d}let s=o.type,i=o.props??{},l;if(t.node&&t.node.nodeType===1&&t.node.tagName.toLowerCase()===s.toLowerCase()?(l=t.node,Ke(t)):(l=Ee.has(s)?r.createElementNS("http://www.w3.org/2000/svg",s):r.createElement(s),Kn(t,l)),o.el=l,zn(l,i),!("innerHTML"in i)){let u={parent:l,node:l.firstChild},d=(Array.isArray(i.children)?i.children:[i.children]).flat(1/0);for(let a of d){let c=ee(a,n,u);if(c!=null&&c.parentNode!==l&&l.appendChild(c),a&&typeof a=="object"&&!Array.isArray(a)&&typeof a.type=="function"){let p=a;p._parentNode||(p._parentNode=l,p._refNode=c)}}for(;u.node;){let a=u.node;u.node=a.nextSibling,a.parentNode?.removeChild(a)}}return"value"in i&&l instanceof HTMLSelectElement&&(l.value=String(i.value??"")),l}async function Gn(e,n,t){let r=t.__registry;await M(n,t,void 0,r);let o={parent:e,node:e.firstChild};for(ee(n,t,o);o.node;){let s=o.node;o.node=s.nextSibling,s.parentNode?.removeChild(s)}}var Yn=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),Xn=new Set(["svg","path","circle","rect","line","polyline","polygon","g","text","defs","use","clipPath"]);function pe(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function Jn(e){return typeof e=="string"?e:Array.isArray(e)?e.filter(Boolean).join(" "):e&&typeof e=="object"?Object.entries(e).filter(([,n])=>n).map(([n])=>n).join(" "):""}function Qn(e){return Object.entries(e).filter(([,n])=>n!=null).map(([n,t])=>{let r=n.replace(/[A-Z]/g,s=>"-"+s.toLowerCase()),o=typeof t=="number"&&t!==0?`${t}px`:String(t);return`${r}:${o}`}).join(";")}async function z(e,n){if(e==null||typeof e=="boolean")return"";if(typeof e=="string"||typeof e=="number")return pe(String(e));if(Array.isArray(e))return(await Promise.all(e.map(c=>z(c,n)))).join("");let t=e;if(t.type===H||t.type===L)return z(t.props?.children,n);if(typeof t.type=="function"){let a=Object.create(n),c=await t.type(t.props??{},a);if(typeof c!="function")throw new Error(`Component ${t.type.name||"anonymous"} must return a render function. Use (init_props, ctx) => (props) => VNode pattern.`);return z(await c(t.props??{}),a)}let r=t.type,o=t.props??{},s=[],i;for(let[a,c]of Object.entries(o))if(!(a==="children"||a==="key")&&a!=="ref"&&!(a.startsWith("on")&&typeof c=="function")){if(a==="innerHTML"){i=String(c??"");continue}if(a==="class"||a==="className"){let p=Jn(c);p&&s.push(` class="${pe(p)}"`);continue}if(a==="style"&&c&&typeof c=="object"){s.push(` style="${pe(Qn(c))}"`);continue}if(a==="draggable"||a==="contenteditable"||a==="spellcheck"){s.push(` ${a}="${c?"true":"false"}"`);continue}if(c===!0){s.push(` ${a}`);continue}c===!1||c==null||s.push(` ${a}="${pe(String(c))}"`)}let l=s.join(""),u=Xn.has(r);if(Yn.has(r))return`<${r}${l}>`;if(i!==void 0)return`<${r}${l}>${i}</${r}>`;let d=await z(o.children,n);return u?`<${r}${l}>${d}</${r}>`:`<${r}${l}>${d}</${r}>`}function Zn(){let e=()=>()=>{},n=()=>({});return{_selfId:"_wf_root",render:()=>{},selfId:()=>{},bumpCtxVersion:()=>{},setMounting:()=>{},endMounting:()=>{},useChat:()=>({messages:[],input:"",streaming:!1,error:null,usage:null,step:null,send:()=>{},stop:()=>{},retry:()=>{},clear:()=>{},approve:()=>{},subscribe:()=>()=>{}}),useExternal:t=>t,useMedia:e,useBreakpoint:e,usePopupPosition:()=>({top:0,left:0,refresh:()=>{}}),useHoverCapable:()=>!1,useStableRef:t=>r=>{r&&t?.(r)},useVisualViewport:()=>({height:0,offsetTop:0,keyboardOpen:!1}),usePopup:()=>({open:!1,setOpen:()=>{},phase:"closed",sync:t=>t?"open":"closed",wrapProps:{},portal:t=>t,refresh:()=>{}}),useLongPress:n,useInView:()=>({isIn:!1,ready:!1,observe:()=>{},refresh:()=>{},disconnect:()=>{}}),useScrollPosition:()=>({y:0,refresh:()=>{}}),useAsync:()=>({data:void 0,loading:!0,error:void 0,reload:()=>{}}),useControlled:()=>({value:void 0,setValue:()=>{},controlled:!1}),useControlledInput:()=>({value:void 0,setValue:()=>{},keyword:"",setKeyword:()=>{},selectedLabel:"",setSelectedLabel:()=>{},controlled:!1}),useOpen:()=>({open:!1,setOpen:()=>{},triggerProps:{}}),usePresence:()=>({phase:"closed",ref:()=>{},sync:()=>"closed"}),useGlobalKey:()=>()=>{},useDrag:n,useDragDrop:()=>({dropProps:{},dragProps:{}}),useReducedMotion:()=>!0,useAnimationEnd:()=>()=>{},useTween:t=>{let r=t;return{get value(){return r},set value(o){r=o},reset:o=>(o!==void 0&&(r=o),r)}}}}function ln(e,n){let t={...e,ui:Zn(),browser:void 0},r=new Map;return t.data={async get(o,s){let i=r.get(o);if(i&&"value"in i)return i.value;if(i?.promise)return i.promise;if(!s)return;let l=Promise.resolve().then(()=>s()).then(u=>(r.set(o,{value:u}),n.set(o,u),u));return r.set(o,{promise:l}),l},set(o,s){r.set(o,{value:s}),n.set(o,s)},has(o){return r.has(o)}},t}function un(e){return`<script>window.__DATA__=${JSON.stringify(Object.fromEntries(e)).replace(/</g,"\\u003c")};<\/script>`}async function et(e,n){let t=new Map,o=ln({params:{},query:{}},t),s=n.url.split("?")[0].split("#")[0],i=e.match(s);o.params=i.params,o.query=Object.fromEntries(new URLSearchParams(n.url.split("?")[1]??""));let l=new URL(n.url.startsWith("http")?n.url:`http://localhost${n.url.startsWith("/")?n.url:"/"+n.url}`),u=await e.execute(l,o,s),d=await z(u,o),a=un(t),c=i.title??n.title??"",p=n.rootId??"root",w=(n.styles??[]).map(m=>` <link rel="stylesheet" href="${m}">`).join(`
7
+ `),b=`<!DOCTYPE html>
8
8
  <html lang="${n.lang??"zh-CN"}">
9
9
  <head>
10
10
  <meta charset="UTF-8">
11
11
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
12
- ${m?`<title>${m}</title>`:""}
13
- ${C}
12
+ ${c?`<title>${c}</title>`:""}
13
+ ${w}
14
14
  </head>
15
15
  <body>
16
- <div id="${w}">${a}</div>
17
- ${d}
16
+ <div id="${p}">${d}</div>
17
+ ${a}
18
18
  <script src="/app.js"><\/script>
19
19
  </body>
20
- </html>`;return{html:a,dataScript:d,page:h}}export{G as Fragment,Ce as Placeholder,B as Portal,Oe as Suspense,Le as UIRouter,nt as animateOut,tt as api,st as auth,zn as callRefCleanup,W as createClientBrowser,We as createPortal,Q as createReactiveState,Te as h,Je as hydrateVNode,De as jsx,Wn as jsxDEV,Dn as jsxs,Yn as mountVNode,Z as patchValue,Cn as serializeData,ct as ssrPage,dt as ssrToString,et as uiServe,it as ws};
20
+ </html>`;return{html:d,dataScript:a,page:b}}async function nt(e,n,t,r={}){let o=r.data??new Map,s=ln(t,o);return z({type:e,props:n??{},key:void 0},s)}function tt(e){let n={...e},t=new Set,r=()=>{for(let o of[...t])o()};return{state:n,subscribe(o){return t.add(o),()=>{t.delete(o)}},set(o){Object.assign(n,o),r()},update(o){o(n),r()},notify:r}}export{L as Fragment,H as Portal,be as UIRouter,wn as animateOut,bn as api,xn as auth,M as buildVNode,_ as createClientBrowser,qn as createCommandContainer,te as createPortal,an as createRenderer,tt as createStore,fe as createVdomContext,j as h,Gn as hydrateVNode,ve as jsx,hn as jsxDEV,gn as jsxs,jn as mountCommand,Wn as mountRoot,O as patchValue,S as renderValue,un as serializeData,et as ssrPage,nt as ssrToString,Fn as uiServe,$n as unmountCommand,En as ws};
@@ -1 +1 @@
1
- var r=Symbol("Fragment");function o(e,t,n){return{type:e,props:p(t),key:n??void 0}}var s=o;function i(e,t,n){return o(e,t,n)}function p(e){if(!e)return{};let t={};for(let n of Object.keys(e))n!=="key"&&(t[n]=e[n]);return t}export{r as Fragment,o as jsx,i as jsxDEV,s as jsxs};
1
+ var r=Symbol("Fragment");function o(e,t,n){return{type:e,props:d(t),key:n??void 0}}var i=o;function l(e,t,n){return o(e,t,n)}function d(e){if(!e)return{};let t={};for(let n of Object.keys(e))n!=="key"&&(t[n]=e[n]);return t}export{r as Fragment,o as jsx,l as jsxDEV,i as jsxs};
@@ -0,0 +1,24 @@
1
+ /**
2
+ * createStore — 共享状态工厂(render-only 方案,见 design/render-only-plan.md)
3
+ *
4
+ * state 是**普通对象(非 Proxy)**——渲染是显式 render(),状态只是数据,
5
+ * 无响应式引擎(无深度代理/Set/Map 绑定/isMounting 保护——§6.4 整节不需要)。
6
+ *
7
+ * 订阅:任何状态变化 → notify() → 所有订阅者(useExternal 注册的组件)重渲染。
8
+ * 作用域由创建位置决定:模块级(全局共享)/ 组件工厂(局部共享)/ ctx 注入(请求级)。
9
+ */
10
+ /** 可订阅状态契约(结构化类型——任何带 state+subscribe 的对象都可被 useExternal 订阅) */
11
+ export interface ExternalStore<T = unknown> {
12
+ /** 渲染期读最新值(普通对象,读什么就是什么) */
13
+ state: T;
14
+ /** 订阅状态变化(返回退订) */
15
+ subscribe(cb: () => void): () => void;
16
+ /** 合并赋值(自动通知订阅者)——推荐写路径 */
17
+ set(partial: Partial<T>): void;
18
+ /** 函数式变更(自动通知订阅者)——推荐写路径(如 push) */
19
+ update(fn: (s: T) => void): void;
20
+ /** 手动通知(逃生口:直接改 state 后调用) */
21
+ notify(): void;
22
+ }
23
+ /** 创建共享状态(state 普通对象 + 订阅表 + 写路径) */
24
+ export declare function createStore<T extends object>(init: T): ExternalStore<T>;
@@ -0,0 +1,74 @@
1
+ /**
2
+ * weifuwu/ui-dom/testing — 组件测试原语(vue/test-utils 模式)
3
+ *
4
+ * 收敛组件测试脚手架的官方工具:94 个测试文件曾手抄 renderVNode(3 种变体)、
5
+ * 114 个手抄 mockCtx、20 个手抄 VNode 树遍历、25 个手抄同实例 mount 模式。
6
+ *
7
+ * 用法(node --test 直跑,零依赖):
8
+ * ```ts
9
+ * import { renderVNode, mountComponent, findByClass, createTestCtx, createPopupMock } from '../../ui-dom/testing.ts'
10
+ * // 或 npm 用户:import { ... } from 'weifuwu/ui-dom/testing'
11
+ * ```
12
+ *
13
+ * 纪律(AGENTS.md 测试节):
14
+ * - `renderVNode`:两阶段组件渲染到 VNode 层(**只一层**——子组件保留函数引用,断言 type 而非 DOM)
15
+ * - `mountComponent`:**同实例 re-render**(内部 `let` 状态流转测试)——`renderVNode` 每次是新 mount,状态会丢
16
+ * - `findByClass`:class token 精确匹配(`split(' ')`——`includes` 会误匹配 `wf-a` ⊃ `wf-a-b`)
17
+ * - `walkVNode`:处理嵌套数组 children(渲染器不展开嵌套数组——Select optgroup 教训)
18
+ */
19
+ import type { VNode } from './vnode.ts';
20
+ import type { WfuiContext } from './types.ts';
21
+ /**
22
+ * 组件 DOM 级测试辅助(vdom 引擎):
23
+ * - mountToDom:buildVNode(await 工厂)→ renderValue → append(等挂载完成)
24
+ * - patchToDom:同树 patch(patchValue 兼容签名——第 5 参 ctx)
25
+ * - buildToDom:buildVNode 预构建(vdom 签名:reg 参数可省略)
26
+ */
27
+ export declare function mountToDom(container: Element, vnode: VNode, ctx: any): Promise<void>;
28
+ export declare function patchToDom(container: Element, node: Node | null, prev: any, next: any, ctx: any): Promise<any>;
29
+ export declare function buildToDom(vnode: VNode, ctx: any): Promise<any>;
30
+ /**
31
+ * 渲染两阶段异步组件到 VNode 层:await 工厂(mount)+ render 一次(内层)。
32
+ * **只渲染一层**——子组件 VNode 的 type 是组件函数(断言 === Comp),不展开 DOM。
33
+ * 统一 async 签名(weifuwu 只支持 async 两阶段组件)——总是返回 Promise<VNode>。
34
+ * 注意:每次调用是**新 mount**——内部 `let` 状态不保留;测状态流转用 `mountComponent`。
35
+ */
36
+ export declare function renderVNode(Comp: any, props: Record<string, any>, ctx: WfuiContext): Promise<VNode | null>;
37
+ /**
38
+ * 同实例渲染器:await 工厂(mount 一次),之后每次调用重跑内层 render(保留内部 `let` 状态)。
39
+ * 交互测试(点击/输入后状态流转)必须用这个——`renderVNode` 每次是新 mount 会丢状态。
40
+ */
41
+ export declare function mountComponent(Comp: any, props: Record<string, any>, ctx: WfuiContext): Promise<() => VNode | null>;
42
+ /**
43
+ * 深度遍历 VNode 树(含嵌套数组 children——渲染器不展开嵌套数组,
44
+ * 测试遍历必须处理:`[[div, div]]` 一层层深入)。
45
+ * visitor 对每个节点调用(含根)。
46
+ */
47
+ export declare function walkVNode(vnode: unknown, visit: (n: any) => void): void;
48
+ /** 按谓词查询第一个匹配节点(深度优先) */
49
+ export declare function findVNode(vnode: unknown, pred: (n: any) => boolean): any;
50
+ /** 收集所有 class token 精确匹配的节点(split(' ')——includes 会误匹配前缀) */
51
+ export declare function findByClass(vnode: unknown, cls: string): any[];
52
+ /**
53
+ * 标准测试 ctx:`{ ui: { render, ready: true } }` + 覆盖。
54
+ * overrides.ui 部分覆盖(可注入 usePopup/useScrollPosition 等任意原语 mock)。
55
+ */
56
+ export declare function createTestCtx(overrides?: {
57
+ ui?: Partial<WfuiContext['ui']>;
58
+ browser?: WfuiContext['browser'];
59
+ }): WfuiContext;
60
+ /**
61
+ * usePopup 标准 mock:`get open()`(渲染期读最新)+ setOpen(默认 no-op;
62
+ * 传第二个参数可转发到组件传入的 setOpen——Escape/外部点击关闭测试需要真实写 $)+ refresh + portal
63
+ * (按 isOpen 条件渲染——closed 返回 null,模拟真实 popup 不挂载面板)。
64
+ * ```ts
65
+ * const ctx = createTestCtx({ ui: { usePopup: (opts: any) => createPopupMock(() => opts.isOpen(), opts.setOpen) } })
66
+ * ```
67
+ */
68
+ export declare function createPopupMock(isOpen?: () => boolean, setOpen?: (v: boolean) => void): {
69
+ readonly open: boolean;
70
+ setOpen: (v: boolean) => void;
71
+ refresh: () => void;
72
+ portal: (content: any, _key?: string) => any;
73
+ wrapProps: {};
74
+ };
@@ -0,0 +1 @@
1
+ var P=Symbol("Fragment"),T=Symbol("Portal");function S(e){if(e==null||typeof e=="boolean")return[];if(Array.isArray(e)){let n=!1;for(let o=0;o<e.length;o++)if(Array.isArray(e[o])){n=!0;break}if(!n)return e;let t=[],r=[...e].reverse();for(;r.length>0;){let o=r.pop();if(Array.isArray(o))for(let i=o.length-1;i>=0;i--)r.push(o[i]);else t.push(o)}return t}return[e]}function q(e,n){if(e===n)return!0;let t=Object.keys(e),r=Object.keys(n);if(t.length!==r.length)return!1;for(let o of t)if(e[o]!==n[o])return!1;return!0}async function K(e,n,t,r){e._id||(r?.reuse?._id?e._id=r.reuse._id:e._id=t.nextId(),t.idRegistry.set(e._id,e)),r?.reuse&&(r.reuse._parentNode&&(e._parentNode=r.reuse._parentNode),r.reuse._refNode&&(e._refNode=r.reuse._refNode),r.reuse._ctxVersion!=null&&(e._ctxVersion=r.reuse._ctxVersion));let o=Object.create(n);o.ui=Object.create(n.ui);let i=o.ui;if(i._selfId=e._id,i._selfVNode=e,i.render=function(s){return s==null&&e._id?n.ui.render([e._id]):n.ui.render(s)},typeof e._render!="function"&&typeof r?.reuse?._render=="function"&&(e._render=r.reuse._render),typeof e._render!="function"){n.ui?.setMounting?.(!0);let s;try{s=await e.type(e.props??{},o)}finally{n.ui?.endMounting?.()}if(typeof s!="function")throw new Error(`Component ${e.type.name||"anonymous"} must return a render function. Use (init_props, ctx) => (props) => VNode pattern.`);e._render=s}return{renderFn:e._render,childCtx:o}}function O(e){return!!e&&typeof e.then=="function"}function E(e,n,t,r,o){if(e==null||typeof e=="boolean"||typeof e=="string"||typeof e=="number")return e;if(Array.isArray(e)){let u=Array.isArray(t)?t:[],l=e.map((y,g)=>E(y,n,u[g],r,o)),d=!1;for(let y=0;y<l.length;y++)if(O(l[y])){d=!0;break}return d?Promise.all(l).then(()=>e):e}let i=e,s=r??n.__registry,f=t!=null&&typeof t=="object"&&!Array.isArray(t)&&t.type===i.type?t:null;if(typeof i.type=="function"){i._id||(i._id=f?._id??s.nextId(),s.idRegistry.set(i._id,i)),f&&(f._parentNode&&(i._parentNode=f._parentNode),f._refNode&&(i._refNode=f._refNode),f._ctxVersion!=null&&(i._ctxVersion=f._ctxVersion),typeof f._render=="function"&&(i._render=f._render));let u=q(f?.props??{},i.props??{}),l=n?.ui?._ctxVersion??0,d=(f?._ctxVersion??-1)===l;return!o?.force&&u&&d&&f?._child!=null?(i._child=f._child,i._ctxVersion=f._ctxVersion,i):(async()=>{let{childCtx:y}=await K(i,n,s,{reuse:f??void 0}),g=await E(await i._render(i.props),y,f?._child,s);return i._child=g??null,i._ctxVersion=l,i})()}if(i.type===P){let u=E(i.props?.children??null,n,f?._child??f?.props?.children,s);return O(u)?u.then(l=>(i._child=l??null,i)):(i._child=u??null,i)}if(typeof i.type=="string"||typeof i.type=="symbol"){let u=E(i.props?.children??null,n,f?.props?.children,s);return O(u)?u.then(l=>(i._child=l??null,i)):(i._child=u??null,i)}return i}var z=new Set(["svg","path","circle","rect","line","polyline","polygon","g","text","defs","use","clipPath"]),j=/^on[A-Z]/,G=new Set(["zIndex","opacity","lineHeight","fontWeight","fontSizeAdjust","flex","flexGrow","flexShrink","order","zoom","aspectRatio","gridRow","gridColumn","scale","rotate","animationIterationCount","columnCount","fillOpacity","strokeOpacity","stopOpacity","floodOpacity"]);function D(e,n,t){if(t==null||t===!1)return;let r=e.ownerDocument?.defaultView;if(n==="class"||n==="className"){if(typeof t=="object")for(let[o,i]of Object.entries(t))i&&e.classList.add(o);else e.setAttribute("class",String(t));return}if(n==="style"){if(typeof t=="string")e.setAttribute("style",t);else{let o=e.style;for(let[i,s]of Object.entries(t))s==null?o[i]="":i.startsWith("--")?o.setProperty(i,String(s)):typeof s=="number"&&!G.has(i)?o[i]=`${s}px`:o[i]=String(s)}return}if(n==="ref"){if(typeof t=="function")try{t(e)}catch(o){console.error("[weifuwu] ref error",o)}return}if(j.test(n)){let o=n.slice(2).toLowerCase();if(typeof t!="function"){console.warn(`[weifuwu] event prop ${n} expects a function, got ${typeof t} \u2014 ignored`);return}e.addEventListener(o,t);return}if(n==="value"){e.value=t;return}if(n==="indeterminate"){e.indeterminate=!!t;return}if(n==="innerHTML"){e.innerHTML=String(t??"");return}if(n==="draggable"||n==="contenteditable"||n==="spellcheck"){e.setAttribute(n,t?"true":"false");return}if(n.startsWith("aria-")&&typeof t=="boolean"){e.setAttribute(n,t?"true":"false");return}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))}}function C(e,n,t){let r=n?.browser??t;if(!r)throw new Error("[vdom] renderValue requires browser env (ctx.browser)");if(e==null||typeof e=="boolean")return null;if(typeof e=="string"||typeof e=="number")return r.createTextNode(String(e));if(Array.isArray(e)){let u=r.createDocumentFragment();if(!u)return null;for(let l of e){let d=C(l,n,r);d!=null&&u.appendChild(d)}return u}let o=e;if(o.type===T){let u=r.bodyElement();if(!u)return null;let l=u.querySelector("#__wf_portal");l||(l=r.createElement("div"),l&&(l.id="__wf_portal",u.appendChild(l)));let d=r.createElement("div");if(d){d.setAttribute("data-portal",String(o.props?.portalKey??"wf"));let y=C(o.props?.children??null,n,r);y!=null&&d.appendChild(y),l&&l.appendChild(d),o._remoteEl=d}return null}if(o.type===P){let u=r.createDocumentFragment();if(!u)return null;for(let l of S(o.props?.children)){let d=C(l,n,r);d!=null&&u.appendChild(d)}return o._childNodes=Array.from(u.childNodes),u}if(typeof o.type=="function"){if(typeof o._render!="function")throw new Error(`[vdom] component ${o.type.name||"anonymous"} not built (missing _render) \u2014 buildVNode must run before renderValue`);if(o._child===void 0)throw new Error(`[vdom] component ${o.type.name||"anonymous"} not built (missing _child) \u2014 buildVNode must run before renderValue`);let u=o._child;if(u==null)return o._child=null,null;let l=(Array.isArray(u)||typeof u=="object"&&typeof u.type=="function",u);o._child=l,typeof l=="object"&&!Array.isArray(l)&&(l._parentVNode=o);let d=C(l,n,r);return d&&(o._refNode=d),d}let i=o.type,s=z.has(i)?r.createElementNS("http://www.w3.org/2000/svg",i):r.createElement(i);if(!s)return null;o.el=s;let f;for(let[u,l]of Object.entries(o.props??{}))if(!(u==="children"||u==="key")){if(u==="value"&&s instanceof HTMLSelectElement){f=l;continue}D(s,u,l)}if(!("innerHTML"in(o.props??{})))for(let u of S(o.props?.children)){let l=C(u,n,r);if(l!=null&&(s.appendChild(l),u&&typeof u=="object"&&!Array.isArray(u)&&typeof u.type=="function")){let d=u;d._parentNode||(d._parentNode=s,d._refNode=l)}}return f!==void 0&&(s.value=String(f)),s}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,r=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[r](e,n)}catch{return new t.Event(e,n)}},dispatchEvent:(e,n)=>typeof e<"u"?e.dispatchEvent(n):!1,navigate:e=>{typeof window>"u"||(window.history.pushState(null,"",e),window.dispatchEvent(new PopStateEvent("popstate",{state:null})))},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 r=document.execCommand("copy");return document.body.removeChild(t),r}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 X=0;function L(){return{idRegistry:new Map,unmountHooks:[],nextId:()=>`_wf_${X++}`}}function B(e,n){for(let t of[...e.unmountHooks])t(n);e.idRegistry.delete(n),e.idRegistry.delete(`custom:${n}`)}function Y(e,n,t,r){try{e(n)}catch(o){console.error(`[weifuwu] ref ${t} error in <${r??"anonymous"}>`,o)}}function _(e,n){if(e==null||typeof e!="object")return;let t=e;if(t._id){if(t._customId&&n.idRegistry.delete(t._customId),n.idRegistry.delete(t._id),n.unmountHooks.length>0){let r=[...n.unmountHooks];for(let o of r)o(t._id);if(t._customId)for(let o of r)o(t._customId)}t._id=void 0,t._customId=void 0,t._render=void 0,t._parentNode=void 0,t._refNode=void 0}if(t._child!=null){if(Array.isArray(t._child))for(let r of t._child)r&&typeof r=="object"&&_(r,n);else _(t._child,n);t._child=void 0}if(t.props?.children&&typeof t.type=="string"){let r=Array.isArray(t.props.children)?t.props.children:[t.props.children];for(let o of r)o&&typeof o=="object"&&_(o,n)}if(typeof t.props?.ref=="function"&&Y(t.props.ref,null,"cleanup"),t._remoteEl){let r=t._child;if(r!=null)if(Array.isArray(r))for(let o of r)o&&typeof o=="object"&&_(o,n);else typeof r=="object"&&_(r,n);t._remoteEl.remove(),t._remoteEl=void 0}}function W(e,n){if(n&&typeof e.type=="function"&&e._id){try{_(e,n)}catch(t){console.error("[weifuwu] ref cleanup error",t)}B(n,e._id)}}function M(e){if(e==null||typeof e!="object"||Array.isArray(e))return;let n=e;return n._placement==="remote"?n.props?.portalKey:n.key}function $(e,n){if(n&&e&&typeof e=="object"&&!Array.isArray(e)&&e.type===P){let t=e._childNodes;if(t&&t.length)return t}return[n]}function k(e,n,t,r,o){if(typeof r=="string"||typeof r=="number"){if(typeof t=="string"||typeof t=="number"){if(String(t)!==String(r)){if(n&&n.nodeType===3)return n.nodeValue=String(r),n;let y=e.ownerDocument.createTextNode(String(r));return n?.parentNode?n.parentNode.replaceChild(y,n):e.appendChild(y),y}return n}let d=e.ownerDocument.createTextNode(String(r));return n?.parentNode?n.parentNode.replaceChild(d,n):e.appendChild(d),d}if(r==null||typeof r=="boolean"){if(t&&typeof t=="object"&&!Array.isArray(t)&&t.type===T){let d=t._remoteEl;try{_(t.props?.children,o.registry)}catch(y){console.error("[weifuwu] portal ref cleanup error",y)}return d?.parentNode?.removeChild(d),null}if(t&&typeof t=="object"&&!Array.isArray(t))if(typeof t.type=="function")W(t,o.registry);else try{_(t,o.registry)}catch(d){console.error("[weifuwu] ref cleanup error",d)}return n?.parentNode&&n.parentNode.removeChild(n),null}if(Array.isArray(r)){if(t===r&&n?.parentNode)return n;let d=e.ownerDocument.createDocumentFragment(),y=H(e,t,r,o,n?[n]:void 0);for(let g of y)g&&d.appendChild(g);return n?.parentNode?d.contains(n)?e.appendChild(d):n.parentNode.replaceChild(d,n):e.appendChild(d),d}let i=r;if(i.type===T){let d=t&&typeof t=="object"&&!Array.isArray(t)?t:null;if(d?.type===T){let y=d._remoteEl;if(y){let g=d.props?.children??null,A=i.props?.children??null;H(y,g,A,o)}return i._remoteEl=d._remoteEl,null}return C(i,o,o.browser??v()),null}if(i.type===P){let d=t&&typeof t=="object"&&!Array.isArray(t)?t:null,y=d?._childNodes,g=H(e,d?.props?.children??t,i.props?.children??null,o,y);return i._childNodes=g.filter(Boolean),n?.parentNode&&n.nodeType===8&&n.parentNode.removeChild(n),n&&n.nodeType===1?n:g[0]??null}if(typeof i.type=="function"){if(typeof i._render!="function")throw new Error(`[vdom] component ${i.type.name||"anonymous"} not built in diff \u2014 buildVNode must run before patchValue`);let d=t&&typeof t=="object"&&!Array.isArray(t)?t:null,y=d?.type===i.type;if(!o.force&&d&&y&&d._child!==void 0&&i._child===d._child)return n;d?.type===i.type&&d._id&&(i._id=d._id,o.registry.idRegistry.set(i._id,i)),i._parentNode=e,n&&(i._refNode=n);let g;if(i._child===void 0)throw new Error(`[vdom] component ${i.type.name||"anonymous"} not built (missing _child) \u2014 buildVNode must run before patchValue`);g=i._child;let A=k(e,n,d?._child,g,o);return A&&(i._refNode=A),A}let s=t&&typeof t=="object"&&!Array.isArray(t)?t:null,f=s?.type??null,u=i.type;if(n&&n.nodeType===1&&f===u){let d=n;return i.el=d,J(d,s?.props??{},i.props??{}),H(d,s?.props?.children??null,i.props?.children??null,o),d}let l=C(i,o,o.browser??v());if(l==null)return null;if(n?.parentNode)if(t!=null&&typeof t!="boolean"){if(typeof t=="object"&&!Array.isArray(t))try{_(t,o.registry)}catch(d){console.error("[weifuwu] ref cleanup error",d)}n.parentNode.replaceChild(l,n)}else n.parentNode.insertBefore(l,n);else e.appendChild(l);return l}function J(e,n,t){let r=Object.keys(n),o=Object.keys(t);if(r.length===o.length){let s=!0;for(let f=0;f<r.length;f++)if(r[f]!==o[f]||n[r[f]]!==t[r[f]]){s=!1;break}if(s)return}let i=new Set([...r,...o]);for(let s of i){if(s==="children"||s==="key")continue;let f=n[s],u=t[s];if(f!==u){if(j.test(s)){typeof f=="function"&&e.removeEventListener(s.slice(2).toLowerCase(),f),u!=null&&u!==!1&&(typeof u!="function"?console.warn(`[weifuwu] event prop ${s} expects a function, got ${typeof u} \u2014 ignored`):e.addEventListener(s.slice(2).toLowerCase(),u));continue}if(u==null||u===!1){if(s==="class"||s==="className")e.removeAttribute("class");else if(j.test(s))e.removeEventListener(s.slice(2).toLowerCase(),f);else if(s==="ref"){if(typeof f=="function")try{f(null)}catch(l){console.error("[weifuwu] ref cleanup error",l)}}else if(s==="value")e.value="";else if(s==="indeterminate")e.indeterminate=!1;else{e.removeAttribute(s);try{delete e[s]}catch{}}continue}D(e,s,u)}}}function H(e,n,t,r,o){let i=S(n),s=S(t),f=o??Array.from(e.childNodes);if(s.some(a=>{if(a==null||typeof a!="object"||Array.isArray(a))return!1;let c=a;return c._placement!=="remote"&&c.key!==void 0})){for(let a=0;a<s.length;a++){let c=s[a];c&&typeof c=="object"&&!Array.isArray(c)&&M(c)===void 0&&(c.key=`pos:${a}`)}for(let a=0;a<i.length;a++){let c=i[a];c&&typeof c=="object"&&!Array.isArray(c)&&M(c)===void 0&&(c.key=`pos:${a}`)}}let l=i.map((a,c)=>{if(a==null||typeof a!="object"||Array.isArray(a))return f[c]??null;let p=a;return p._placement==="remote"?p._remoteEl??null:p.type===P?p._childNodes?.[0]??null:p._refNode??p.el??null});if(!s.some(a=>{if(a==null||typeof a!="object"||Array.isArray(a))return!1;let c=a;return c._placement!=="remote"&&c.key!==void 0})){let a=Math.max(i.length,s.length),c=[];for(let p=0;p<a;p++){let h=p<i.length?i[p]:null,m=p<s.length?s[p]:null;if(m==null||typeof m=="boolean"){if(h&&typeof h=="object"&&!Array.isArray(h))if(typeof h.type=="function")W(h,r.registry);else try{_(h,r.registry)}catch(w){console.error("[weifuwu] ref cleanup error",w)}let N=l[p];N?.parentNode&&N.parentNode.removeChild(N),c.push(null);continue}if(h!=null&&typeof h=="object"&&!Array.isArray(h)&&m!=null&&typeof m=="object"&&!Array.isArray(m)&&m===h){c.push(l[p]);continue}if(h==null||typeof h=="boolean"){let N=C(m,r,r.browser??v());if(N==null){c.push(null);continue}let w=null;for(let V=p+1;V<l.length;V++){let b=l[V];if(b&&b.parentNode===e){w=b;break}}if(!w){let V=null;for(let b=c.length-1;b>=0;b--)if(c[b]){V=c[b];break}if(V&&V.parentNode===e&&(w=V.nextSibling),!w){let b=l[l.length-1];b&&b.parentNode===e&&(w=b.nextSibling)}}w&&w.parentNode===e?e.insertBefore(N,w):e.appendChild(N),c.push(N);continue}let x=k(e,l[p],h,m,r);c.push(...$(m,x))}return c}let y=new Map;i.forEach((a,c)=>{let p=M(a);p!==void 0&&a&&typeof a=="object"&&!Array.isArray(a)&&y.set(p,{vnode:a,nodes:[l[c]??null].filter(Boolean),index:c})});let g=[],A=new Set,R=null;return s.forEach((a,c)=>{let p=M(a),h=a;if(p!==void 0&&y.has(p)){let m=y.get(p),x=m.nodes[0]??null;A.add(p);let N=k(e,x,m.vnode,h,r),w=$(h,N),V=w[w.length-1]??N;V&&V.parentNode===e&&R&&V.previousSibling!==R&&e.insertBefore(V,R.nextSibling),g.push(...w),V&&(R=V)}else if(h?._placement==="remote"){let m=i[c]??null,x=k(e,l[c]??null,m,h,r),N=$(h,x);g.push(...N);let w=N[N.length-1]??x;w&&(R=w)}else{let m=C(h,r,r.browser??v());g.push(m),m!=null&&(R?e.insertBefore(m,R.nextSibling):e.insertBefore(m,e.firstChild),R=m)}}),i.forEach((a,c)=>{let p=M(a),h=a&&typeof a=="object"&&!Array.isArray(a)&&typeof a.type=="function";if(p!==void 0&&!A.has(p)){if(a&&typeof a=="object"&&!Array.isArray(a))if(h)W(a,r.registry);else try{_(a,r.registry)}catch(x){console.error("[weifuwu] ref cleanup error",x)}let m=l[c];m?.parentNode&&m.parentNode.removeChild(m)}else if(p===void 0){if(a&&typeof a=="object"&&!Array.isArray(a))if(h)W(a,r.registry);else try{_(a,r.registry)}catch(x){console.error("[weifuwu] ref cleanup error",x)}let m=l[c];m?.parentNode&&m.parentNode.removeChild(m)}}),g}function Z(e){return e.__registry??(e.__registry=L())}function U(e,n,t,r){let o=Z(t),i=t.browser??v();return Promise.resolve(E(n,t,void 0,o)).then(()=>{let s=C(n,t,i);if(s!=null&&e.appendChild(s),n._id&&o){let f=o.idRegistry.get(n._id);f&&(f._parentNode=e)}r?.onMounted?.()}).catch(s=>console.error("[weifuwu] command mount error",s)),{id:n._id??""}}function _e(e,n,t){return new Promise(r=>{U(e,n,t,{onMounted:r})})}async function be(e,n,t,r,o){return await E(r,o,t,o.__registry),k(e,n,t,r,{browser:o.browser??o.__browser,registry:o.__registry})}function Ce(e,n){let t=n.__registry??(n.__registry=L());return Promise.resolve(E(e,n,void 0,t))}async function xe(e,n,t){let r=await e(n,t);return typeof r=="function"?r(n):r}async function Ee(e,n,t){let r=await e(n,t);return()=>typeof r=="function"?r(n):r}function F(e,n){if(e==null||typeof e!="object")return;if(Array.isArray(e)){for(let r of e)F(r,n);return}n(e);let t=e?.props?.children;t!=null&&F(t,n)}function Ae(e,n){let t;return F(e,r=>{!t&&n(r)&&(t=r)}),t}function Re(e,n){let t=[];return F(e,r=>{typeof r?.props?.class=="string"&&r.props.class.split(" ").includes(n)&&t.push(r)}),t}function Pe(e){let n={ui:{render:()=>{},ready:!0,useExternal:()=>{}}};return e?{ui:{...n.ui,...e.ui??{}},...e.browser?{browser:e.browser}:{}}:n}function ve(e=()=>!1,n){return{get open(){return e()},setOpen:n??(t=>{}),refresh:()=>{},portal:(t,r)=>e()?t:null,wrapProps:{}}}export{Ce as buildToDom,ve as createPopupMock,Pe as createTestCtx,Re as findByClass,Ae as findVNode,Ee as mountComponent,_e as mountToDom,be as patchToDom,xe as renderVNode,F as walkVNode};
@@ -0,0 +1 @@
1
+ export {};