weifuwu 0.87.0 → 0.88.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/docs.mjs CHANGED
@@ -529,14 +529,16 @@ var init_popup = __esm({
529
529
  });
530
530
 
531
531
  // src/client/vdom/core/field/key.ts
532
- function extractKey(props) {
533
- const k = props?.key;
532
+ function normalizeKey(k) {
534
533
  if (k === null || k === void 0) return null;
535
534
  if (typeof k === "string") return k;
536
535
  if (typeof k === "number") return String(k);
537
536
  console.warn(`[vdom] key \u5FC5\u987B\u662F string|number\u2014\u2014\u5F53\u524D ${typeof k}\uFF08\u5FFD\u7565\u2014\u2014\u4F4D\u7F6E\u8EAB\u4EFD\uFF09`);
538
537
  return null;
539
538
  }
539
+ function extractKey(props) {
540
+ return normalizeKey(props?.key);
541
+ }
540
542
  function stripKey(props) {
541
543
  const p = { ...props ?? {} };
542
544
  delete p.key;
@@ -3524,6 +3526,9 @@ function createClientBrowser() {
3524
3526
  scrollTo: (y) => {
3525
3527
  if (typeof window !== "undefined") window.scrollTo(0, y);
3526
3528
  },
3529
+ reload: () => {
3530
+ if (typeof window !== "undefined") window.location.reload();
3531
+ },
3527
3532
  scrollTop: () => scroller()?.scrollTop ?? 0,
3528
3533
  matchMedia: (q) => typeof window !== "undefined" && typeof window.matchMedia === "function" ? window.matchMedia(q) : null,
3529
3534
  visualViewport: () => typeof window !== "undefined" ? window.visualViewport ?? null : null,
@@ -36,6 +36,8 @@ export interface Browser {
36
36
  /** 事件监听(全局——组件层统一入口) */
37
37
  addEventListener(type: string, fn: (e: any) => void, options?: any): void;
38
38
  removeEventListener(type: string, fn: (e: any) => void, options?: any): void;
39
+ /** 页面刷新(location.reload——应用层重试/回滚后刷新) */
40
+ reload(): void;
39
41
  /** 滚动 */
40
42
  scrollTo(y: number): void;
41
43
  /** 当前滚动量(scrollingElement 优先——headless 漂移防护) */
@@ -54,6 +54,14 @@ export interface UIContext {
54
54
  ui: Ui;
55
55
  /** 路由参数(页面组件——UIRouter 注入) */
56
56
  params?: Record<string, string>;
57
+ /** 查询参数(UIRouter 注入——Object.fromEntries(searchParams)——随渲染替换) */
58
+ query?: Record<string, string>;
59
+ /** 路由上下文(UIRouter resolve 注入——path/params/query 三面——应用消费单点) */
60
+ route?: {
61
+ path: string;
62
+ params: Record<string, string>;
63
+ query: Record<string, string>;
64
+ };
57
65
  /** 国际化(middlewares i18n 注入——可选——组件读组件文案面) */
58
66
  i18n?: import('../middlewares/auth-i18n.ts').I18nState;
59
67
  /** 中间件注入面(api/auth/ws/i18n...——可选链消费) */
@@ -10,6 +10,9 @@
10
10
  * (数组长度变化 + 无 key 组件项 → dev error)在 diff 层消费
11
11
  */
12
12
  export declare const KEY = "key";
13
+ /** key 归一化(单一实现源——jsx 显式 key 参数与 props 路径同入口——
14
+ * 数字 key 不归一 → keyedId 的 key.replace 崩(key 必须字符串)) */
15
+ export declare function normalizeKey(k: unknown): string | null;
13
16
  /** key 提取(props → vnode.key——string|number 有效——其余 warn + null) */
14
17
  export declare function extractKey(props: Record<string, unknown> | null | undefined): string | null;
15
18
  /** 从 props 拷贝中剥离 key(h/jsx 用——props 不泄漏 key) */
@@ -1,8 +1,8 @@
1
- function Se(n){let e=n?.key;return e==null?null:typeof e=="string"?e:typeof e=="number"?String(e):(console.warn(`[vdom] key \u5FC5\u987B\u662F string|number\u2014\u2014\u5F53\u524D ${typeof e}\uFF08\u5FFD\u7565\u2014\u2014\u4F4D\u7F6E\u8EAB\u4EFD\uFF09`),null)}function Ne(n){let e={...n??{}};return delete e.key,e}function $(n,e,...t){let o=Ne(e);return t.length===1?o.children=t[0]:t.length>1&&(o.children=t),{type:n,props:o,key:Se(e)}}function Re(n,e,t){return{type:n,props:Ne(e),key:t??Se(e)??null}}var Bt=Re,_t=Re;var Be=Symbol("vdom-fragment");function q(n){return n.type===Be}function Ie(){return{children:new Map}}function Ve(n){return n.split("/").filter(Boolean)}function jt(n,e,t){let o=e.slice(1);if(!n.children.has(":")){let s=t();s.param=o,n.children.set(":",s)}let r=n.children.get(":");if(r.param!==o)throw new Error(`[router] param conflict: ":${r.param}" already registered, cannot register ":${o}"`);return r}function zt(n,e,t){return e==="*"?(n.wildcard=!0,n):e.startsWith(":")?jt(n,e,t):(n.children.has(e)||n.children.set(e,t()),n.children.get(e))}function je(n,e,t,o=!1){let r=Ve(e),s=n;for(let i of r){if(i==="*")return s.wildcard=!0,s.wildcardValue=t,s;s=zt(s,i,()=>Ie())}return o?s.wildcardValue=t:s.value=t,s}function ze(n,e){let t={};if(e.length===0)return n.value!==void 0?(n.wildcardValue!==void 0&&(t["*"]=""),{value:n.value,params:t,wildcard:!1}):n.wildcardValue!==void 0?{value:n.wildcardValue,params:t,wildcard:!0}:null;let o=n;for(let r=0;r<e.length;r++){let s=Ge(o,e[r],t);if(!s)return _e(n,e,r,t);o=s}return o.value!==void 0?(o.wildcardValue!==void 0&&(t["*"]=""),{value:o.value,params:t,wildcard:!1}):_e(n,e,e.length,t)}function _e(n,e,t,o){let r=n;for(let s=0;s<t;s++){if(r.wildcardValue!==void 0)return o["*"]=e.slice(s).join("/"),{value:r.wildcardValue,params:o,wildcard:!0};let i=Ge(r,e[s],o);if(!i)return null;r=i}return r.wildcardValue!==void 0?(o["*"]=e.slice(t).join("/"),{value:r.wildcardValue,params:o,wildcard:!0}):null}function Ge(n,e,t){if(n.children.has(e))return n.children.get(e);if(n.children.has(":")){let o=n.children.get(":");return o.param&&(t[o.param]=decodeURIComponent(e)),o}return null}function se(n){return new Request(new URL(n,"http://localhost"))}var Pe=class{root=Ie();notFoundHandler=null;get(e,t){return je(this.root,e,t),this}notFound(e){return this.notFoundHandler=e,this}async resolve(e,t){let o=new URL(e.url),r=Ve(o.pathname),s=ze(this.root,r),i=s?.value??this.notFoundHandler;if(!i)return new Response(null,{status:404});let a={};return s&&Object.assign(a,s.params),t.params=a,t.query=Object.fromEntries(o.searchParams),i(e,t)}};function Je(n){try{if(typeof document>"u")return;let e=document.createElement("textarea");e.value=n,e.style.position="fixed",e.style.opacity="0",e.setAttribute("readonly",""),document.body.appendChild(e),e.select();let t=document.execCommand("copy");e.remove(),!t&&typeof console<"u"&&console.warn("[browser] copyText \u964D\u7EA7\u5931\u8D25\uFF08execCommand \u8FD4\u56DE false\uFF09")}catch{}}function Ae(){let n=()=>typeof document<"u"?document.documentElement:null,e=()=>typeof document<"u"?document.scrollingElement??document.documentElement:null;return{get window(){return typeof window<"u"?window:void 0},get document(){return typeof document<"u"?document:void 0},copyText(t){if(typeof navigator<"u"&&navigator.clipboard?.writeText){navigator.clipboard.writeText(t).catch(()=>Je(t));return}Je(t)},downloadFile(t,o,r="text/plain"){try{let s=typeof document<"u"?document:null;if(!s)return!1;let i=new Blob([o],{type:r}),a=URL.createObjectURL(i),l=s.createElement("a");return l.href=a,l.download=t,l.click(),URL.revokeObjectURL(a),!0}catch{return!1}},activeElement:()=>typeof document<"u"?document.activeElement:null,byId:t=>typeof document<"u"?document.getElementById(t):null,query:t=>typeof document<"u"?document.querySelector(t):null,queryAll:t=>typeof document<"u"?document.querySelectorAll(t):null,createElement:t=>typeof document<"u"?document.createElement(t):null,createElementNS:(t,o)=>typeof document<"u"?document.createElementNS(t,o):null,createDocumentFragment:()=>typeof document<"u"?document.createDocumentFragment():null,createComment:t=>typeof document<"u"?document.createComment(t):null,createTextNode:t=>typeof document<"u"?document.createTextNode(t):null,addEventListener:(t,o,r)=>{typeof window<"u"&&window.addEventListener(t,o,r)},removeEventListener:(t,o,r)=>{typeof window<"u"&&window.removeEventListener(t,o,r)},scrollTo:t=>{typeof window<"u"&&window.scrollTo(0,t)},scrollTop:()=>e()?.scrollTop??0,matchMedia:t=>typeof window<"u"&&typeof window.matchMedia=="function"?window.matchMedia(t):null,visualViewport:()=>typeof window<"u"?window.visualViewport??null:null,scrollingElement:()=>e(),bodyElement:()=>typeof document<"u"?document.body:null,bodyAppend:t=>{typeof document<"u"&&document.body.appendChild(t)},bodyRemove:t=>{typeof document<"u"&&document.body.contains(t)&&document.body.removeChild(t)},clearBody:()=>{typeof document<"u"&&(document.body.innerHTML="")},event:(t,o)=>typeof window<"u"?new window.Event(t,o):new Event(t,o),rootElement:()=>n(),getSelection:()=>typeof window<"u"?window.getSelection():null,selectionText:()=>typeof window<"u"?window.getSelection()?.toString()??"":"",storageGet:t=>{try{return typeof window<"u"?window.localStorage.getItem(t):null}catch{return null}},storageSet:(t,o)=>{try{typeof window<"u"&&window.localStorage.setItem(t,o)}catch{}},timeout:(t,o)=>typeof window<"u"?window.setTimeout(t,o):0,pathname:()=>typeof window<"u"?window.location.pathname:"",setHash:t=>{typeof window<"u"&&(window.location.hash=t)},viewportHeight:()=>typeof window<"u"?window.innerHeight:0,onFormRestore:t=>{t()}}}var be=class{table=new Map;rootTypes=new Set;doc;dispatchBound;container;phase="active";constructor(e,t){this.doc=e,this.container=t,this.dispatchBound=this.dispatch.bind(this)}set(e,t,o){if(this.phase==="disposed"){console.error(`[vdom] \u4E8B\u4EF6\u8868\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Adisposed \u540E set(${e}, ${t}) \u88AB\u5FFD\u7565`);return}if(typeof o!="function"){console.warn(`[vdom] \u4E8B\u4EF6 ${t} \u975E\u51FD\u6570\u503C\u88AB\u8DF3\u8FC7\uFF08node ${e}\uFF09\u2014\u2014\u671F\u671B\u51FD\u6570\uFF0C\u5B9E\u9645 ${typeof o}`);return}let r=this.table.get(e);r||(r=new Map,this.table.set(e,r)),r.set(t,o),this.ensureRoot(t)}get(e,t){return this.table.get(e)?.get(t)}removeEvent(e,t){let o=this.table.get(e);o&&(o.delete(t),o.size===0&&this.table.delete(e))}remove(e){for(let t of[...this.table.keys()])(t===e||t.startsWith(e+"."))&&this.table.delete(t)}ensureRoot(e){this.rootTypes.has(e)||(this.doc.addEventListener(e,this.dispatchBound,{capture:!0}),this.rootTypes.add(e))}dispatch(e){if(this.container){let o=e.target;if(o&&!this.container.contains(o))return}if(e.type==="contextmenu"&&window.__dbgEvt){let o=e.target,r=[...this.table.entries()].map(([s,i])=>s+":"+[...i.keys()].join("+")).join(" | ");console.error("[dbg-evt-dispatch]","target:",o?.getAttribute("data-wf-id"),"ALL:",r.slice(0,400))}let t=e.target;for(t&&t.nodeType===3&&(t=t.parentElement);t;){if(!t.hasAttribute?.("data-wf-id")){let r=t.closest?.("[data-wf-id]");if(r&&r!==t){t=r;continue}}let o=t.getAttribute?.("data-wf-id");if(o){let r=this.table.get(o)?.get(e.type);if(r){try{Object.defineProperty(e,"currentTarget",{value:t,configurable:!0})}catch{}try{r(e)}catch(s){console.error("[vdom] \u4E8B\u4EF6 handler:",s)}if(e.cancelBubble)return}}t=t.parentElement}}dispose(){if(this.phase!=="disposed"){this.phase="disposed";for(let e of this.rootTypes)this.doc.removeEventListener(e,this.dispatchBound,{capture:!0});this.rootTypes.clear(),this.table.clear()}}},ee=/^on[A-Z]/;function ae(n){return ee.test(n)?n.slice(2).toLowerCase():null}var we=class{refs=new Map;phase="active";set(e,t,o){if(this.phase==="disposed"){console.error(`[vdom] ref \u8868\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Adisposed \u540E set(${e}) \u88AB\u5FFD\u7565`);return}if(o&&o!==t&&typeof o=="function")try{o(null)}catch(r){console.error("[vdom] ref prev:",r)}this.refs.set(e,t)}mount(e,t){let o=this.refs.get(e);if(typeof o=="function")try{o(t)}catch(r){console.error("[vdom] ref mount:",r)}}unmount(e){for(let[t,o]of[...this.refs])if(t===e||t.startsWith(e+".")){if(typeof o=="function")try{o(null)}catch(r){console.error("[vdom] ref unmount:",r)}this.refs.delete(t)}}remap(e,t){for(let[o,r]of[...this.refs])(o===e||o.startsWith(e+"."))&&(this.refs.delete(o),this.refs.set(t+o.slice(e.length),r))}dispose(){this.phase!=="disposed"&&(this.phase="disposed",this.refs.clear())}};function Ye(n){let e=new Set,t=n,o=()=>{for(let r of[...e])r()};return{get state(){return t},subscribe(r){return e.add(r),()=>{e.delete(r)}},set(r){t={...t,...r},o()},update(r){r(t),o()},notify:o}}function Me(n){let e=Ye(n),t=(()=>e.state);return t.set=o=>e.set(o),t.update=o=>e.update(o),t.subscribe=o=>e.subscribe(o),t.notify=()=>e.notify(),t.store=e,t}function Xe(n,e,t){if(typeof e=="function"){let r=e;return i=>{i?r(i):t?.()}}return{current:e}}function Qe(n,e,t){let o=typeof e=="object"?e:void 0,r=typeof e=="boolean"?e:!1,s=o??t,i=n.nextHookIndex(),a=n.getHookState(i)??{open:r};n.setHookState(i,a);let l=s?.open!==void 0;return{get open(){return s?.open??a.open},setOpen(u){l?(s?.onOpenChange||console.warn(`[vdom] useOpen${o?.name?`(${o.name})`:""} \u53D7\u63A7\u7F3A onOpenChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),s?.onOpenChange?.(u)):(a.open=u,n.requestRender())},toggle(){this.setOpen(!this.open)}}}function Ze(n,e,t){let o=t?e:(()=>!0),r=t??e,s=n.getBrowser()?.window;if(!s)return()=>{};let i=l=>{if(typeof o=="string"){if(l.key!==o)return}else if(!o(l))return;r(l)};s.addEventListener("keydown",i);let a=()=>s.removeEventListener("keydown",i);return n.onUnmount(a),a}function et(n,e,t,o,r,s,i,a){let l=n.getBoundingClientRect();if(l.width===0&&l.height===0)return null;let u=e.innerWidth,d=e.innerHeight,c,f;switch(r){case"bottom":c=l.bottom+s,f=a?l.left+l.width/2-t/2:l.left;break;case"top":c=l.top-o-s,f=a?l.left+l.width/2-t/2:l.left;break;case"left":c=a?l.top+l.height/2-o/2:l.top,f=l.left-t-s;break;case"right":c=a?l.top+l.height/2-o/2:l.top,f=l.right+s;break}return f+t>u-i&&(f=u-t-i),f<i&&(f=i),c+o>d-i&&(c=d-o-i),c<i&&(c=i),{top:c,left:f}}function tt(n,e){let t=e.getComputedStyle(n).animationName;if(t&&t!=="none")return!0;for(let o of n.children){let r=e.getComputedStyle(o).animationName;if(r&&r!=="none")return!0}return!1}function nt(n,e){let t=n.getBrowser()?.window,o=0,r=0,s={get top(){return o},get left(){return r},refresh:()=>{}},i=()=>{let u=e.el();if(!u)return;let d=u.getBoundingClientRect();if(d.width===0&&d.height===0)return;let c=e.compute(d);o=c.top,r=c.left},a,l=()=>{a||t&&(a=t.requestAnimationFrame(()=>{a=void 0,(e.isOpen?.()??!0)&&i()}))};return t&&(t.addEventListener("scroll",l,!0),t.addEventListener("resize",l),n.onUnmount(()=>{a!==void 0&&t.cancelAnimationFrame(a),t.removeEventListener("scroll",l,!0),t.removeEventListener("resize",l)})),s.refresh=i,s}function A(n){let e=n.children??(n.props.children===void 0?[]:n.props.children),t=o=>Array.isArray(o)?o.flatMap(t):[o];return Array.isArray(e)?e.flatMap(t):[e]}function L(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)&&q(n)?A(n).reduce((e,t)=>e+L(t),0):1}function ot(n){return n==null||typeof n=="boolean"}function rt(n){return!(n==null||typeof n=="boolean"||typeof n=="string"||typeof n=="number"||Array.isArray(n)||typeof n=="object"&&typeof n.type=="string"||typeof n.type=="function"||typeof n.type=="symbol")}function Le(n){return n==null?"null/undefined":typeof n=="object"?`object\uFF08type: ${typeof n.type}\uFF09`:typeof n}function Gt(n,e,t,o){return[{op:"createAnchor",id:n,...o!==void 0?{detail:o}:{}},{op:"insert",id:n,parent:e,ref:t}]}function le(n,e,t,o,r){for(let s of Gt(e,t,o,r))n(s)}function F(n){return n===""?"hole":typeof n=="string"||typeof n=="number"?"text":ot(n)?"hole":Array.isArray(n)?"array":typeof n.type=="string"?"element":q(n)?"fragment":typeof n.type=="function"?"component":(rt(n),"invalid")}function it(n){return typeof n=="string"||typeof n=="number"?String(n):null}function O(n){return F(n)==="hole"}function te(n){return F(n)==="text"}function H(n,e){return`${n}.k${e.replace(/%/g,"%25").replace(/\./g,"%2E")}`}function U(n){return n==null||typeof n=="boolean"||typeof n=="string"||typeof n=="number"||Array.isArray(n)?null:n.key}function de(n){return U(n)!==null}function ue(n){let e=!1,t=!1;for(let o of n)if(de(o)?e=!0:t=!0,e&&t)return"mixed";return e?"all-keyed":"all-unkeyed"}function z(n,e){let t=new Set;for(let o of n){let r=U(o);if(r!==null){if(t.has(r)){console.warn(`[vdom] ${e}\uFF1A\u91CD\u590D key "${r}"\uFF08\u5217\u8868\u8EAB\u4EFD\u6620\u5C04\u6B67\u4E49\u2014\u2014\u589E\u5220/\u91CD\u6392\u884C\u4E3A\u4E0D\u786E\u5B9A\uFF09\u2014\u2014\u8BF7\u4E3A\u6BCF\u9879\u58F0\u660E\u552F\u4E00 key\uFF08\u6570\u636E id \u2192 keyBy\uFF09`);return}t.add(r)}}}function st(n,e){if(n.length<2)return;let t=n.some(r=>typeof r?.type=="function"),o=n.some(r=>!de(r)&&typeof r?.type=="function");if(t&&o){let r=n.map(s=>{let i=s;if(i==null)return"null";if(typeof i=="boolean")return"bool";if(typeof i=="string"||typeof i=="number")return"text";if(Array.isArray(i))return"arr";if(typeof i.type=="function"){let a=i.type.name;return"comp"+(a?":"+a:"")}return"el"+(i.key?`.k{${String(i.key).slice(0,16)}}`:"")});console.warn(`[vdom] ${e}\uFF1A\u5217\u8868\u542B\u65E0 key \u7684\u7EC4\u4EF6\u9879\uFF08\u957F\u5EA6 ${n.length}\uFF09\u2014\u2014\u9879: [${r.join(", ")}]\u2014\u2014\u52A8\u6001\u589E\u5220/\u91CD\u6392\u65F6\u72B6\u6001\u4F1A\u6309\u4F4D\u7F6E\u7EE7\u627F\u2014\u2014\u8BF7\u4E3A\u7EC4\u4EF6\u9879\u58F0\u660E key\uFF08\u6570\u636E id \u2192 keyBy\uFF09`)}}function k(n,e){return`${n}.${e}`}function xe(n){let e={};for(let[t,o]of Object.entries(n))t==="children"||t==="key"||t==="ref"||typeof o!="function"&&(e[t]=o);return e}async function at(n,e,t,o,r,s){r({op:"create",id:e,tag:n.type,attrs:xe(n.props)});for(let[d,c]of Object.entries(n.props))d==="children"||d==="key"||d==="ref"||typeof c=="function"&&r({op:"setProp",id:e,key:d,value:c});r({op:"insert",id:e,parent:t,ref:o});let i=n.props.ref;typeof i=="function"&&r({op:"ref",id:e,fn:i});let a=A(n);z(a,`\u5143\u7D20 children\uFF08${e}\uFF09`);let l=null,u=0;for(let d of a){await s(d,e,u,l);let c=L(d);l=k(e,u+c-1),u+=c}r({op:"close",id:e})}function Oe(n,e,t){let o=new Map,r=i=>{switch(i.op){case"create":{let a=o.get(i.id);a&&a!=="el"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1Acreate ${i.id} \u7C7B\u578B\u51B2\u7A81\uFF08${a} \u2192 el\uFF09`),o.set(i.id,"el");break}case"createText":{let a=o.get(i.id);a&&a!=="text"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1AcreateText ${i.id} \u7C7B\u578B\u51B2\u7A81\uFF08${a} \u2192 text\uFF09`),o.set(i.id,"text");break}case"createAnchor":{let a=o.get(i.id);a&&a!=="anchor"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1AcreateAnchor ${i.id} \u7C7B\u578B\u51B2\u7A81\uFF08${a} \u2192 anchor\uFF09`),o.set(i.id,"anchor");break}case"insert":{let a=o.get(i.parent);a&&a!=="el"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1Ainsert ${i.id} \u7684 parent ${i.parent} \u662F${a}\uFF08\u975E\u5BB9\u5668\u2014\u2014id \u7A7A\u95F4\u9519\u4F4D\uFF09`);break}default:break}n(i)},s=async(i,a,l,u)=>{let d=k(a,l);switch(F(i)){case"text":{let c=it(i);r({op:"createText",id:d,value:c}),r({op:"insert",id:d,parent:a,ref:u});return}case"hole":{le(r,d,a,u);return}case"array":{let c=i;z(c,`\u6570\u7EC4\u5C55\u5F00\uFF08${a}\uFF09`);let f=l,m=u;for(let x of c){await s(x,a,f,m);let T=L(x);m=k(a,f+T-1),f+=T}return}case"fragment":{let c=A(i);z(c,`Fragment \u5C55\u5F00\uFF08${a}\uFF09`);let f=l,m=u;for(let x of c){await s(x,a,f,m);let T=L(x);m=k(a,f+T-1),f+=T}return}case"element":{await at(i,d,a,u,r,s);return}case"component":{let c=i,f=c.key!==null?H(a,c.key):d;await J(c,a,l,u,f,e,t,s,n)&&n({op:"mount",compId:f});return}case"invalid":{console.warn(`[vdom] \u975E\u6CD5\u5B50\u8282\u70B9\u2014\u2014${Le(i)}`),le(r,d,a,u,Le(i));return}}};return s}function G(n,e,t){let o=e??{},r=t??_();return new ReadableStream({async start(s){await Oe(a=>s.enqueue(a),o,r)(n,"root",0,null),s.enqueue({op:"done",full:!0}),s.close()}})}function M(n){if(n==null)return"hole";let e=F(n);return e==="invalid"?"hole":e}var ne=async(n,e,t)=>{t.emit({op:"remove",id:t.oldId}),await t.emitNode(e,t.parent,t.index,t.ref)};var oe=async(n,e,t)=>{t.emit({op:"remove",id:t.oldId}),await t.emitNode(e,t.parent,t.index,t.ref)};function Y(n,e,t){return typeof n?.type=="function"?k(e,0):Array.isArray(n)?e:O(n)?k(e,0):t}function fe(n,e,t){return typeof n?.type=="function"||Array.isArray(n)?e:t}function V(n,e,t,o,r){if(globalThis.__DBG8&&console.log("[dbg-rmt]",e,"parent=",t,"type=",typeof n=="object"&&n!==null&&!Array.isArray(n)?String(n.type):Array.isArray(n)?"array":String(n)),O(n)){o({op:"remove",id:e});return}if(te(n)){o({op:"remove",id:e});return}if(Array.isArray(n)){globalThis.__DBG4&&console.log(`[dbg-arr] \u6570\u7EC4 base=${e} parent=${t} \u9879\u6570=${n.length}`);let l=0;for(let u of n)V(u,k(e,l),e,o,r),l+=L(u);return}let s=n;if(q(s)){let l=Number(e.slice(t.length+1)),u=A(s),d=l;for(let c of u)V(c,k(t,d),t,o,r),d+=L(c);return}if(typeof s.type=="function"){let l=s.key!==null?H(t,s.key):e;globalThis.__DBG5&&console.log(`[dbg-comp] unmount ${l} base=${e} parent=${t}`),o({op:"unmount",compId:l});let u=r?.get(l)?.lastOutput;if(u!==void 0){let d=X(u),c=Y(d,l,e),m=d!==null&&typeof d=="object"&&!Array.isArray(d)&&q(d)?e.slice(0,e.lastIndexOf(".")):fe(d,l,l);V(d,c,m,o,r)}}let i=A(s),a=0;i.forEach(l=>{let u=k(e,a);l!==null&&typeof l!="string"&&typeof l!="number"&&typeof l!="boolean"&&!Array.isArray(l)?V(l,u,e,o,r):o({op:"remove",id:u}),a+=L(l)}),o({op:"remove",id:e})}var re=async(n,e,t)=>{V(n,t.oldId,t.parent,t.emit,t.registry),await t.emitNode(e,t.parent,t.index,t.ref)};var ie=async(n,e,t)=>{globalThis.__DBG8&&console.log("[dbg-tc] oldCompId=",t.oldCompId,"oldId=",t.oldId,"parent=",t.parent,"index=",t.index),t.oldCompId&&t.emit({op:"unmount",compId:t.oldCompId});let o=t.registry?.get(t.oldCompId??"")?.lastOutput;if(o!==void 0){let r=X(o);V(r,Y(r,t.oldCompId??"",k(t.parent,t.index)),fe(r,t.oldCompId??"",t.parent),t.emit,t.registry)}else t.emit({op:"remove",id:t.oldId});await t.emitNode(e,t.parent,t.index,t.ref)};var K=async(n,e,t)=>{let o=Array.isArray(n)?n:A(n),r=t.index;for(let s of o)V(s,k(t.parent,r),t.parent,t.emit,t.registry),r+=L(s);await t.emitNode(e,t.parent,t.index,t.ref)};var Jt={text:{text:null,hole:ne,element:ne,component:ne,fragment:ne,array:ne},hole:{text:oe,hole:null,element:oe,component:oe,fragment:oe,array:oe},element:{text:re,hole:re,element:null,component:re,fragment:re,array:re},component:{text:ie,hole:ie,element:ie,component:null,fragment:ie,array:ie},fragment:{text:K,hole:K,element:K,component:K,fragment:null,array:K},array:{text:K,hole:K,element:K,component:K,fragment:K,array:null}};function B(n,e){return Jt[n]?.[e]??null}function lt(n,e,t,o){let r=xe(n.props),s=xe(e.props);for(let[i,a]of Object.entries(s))r[i]!==a&&o({op:"setProp",id:t,key:i,value:a});for(let i of Object.keys(r))i in s||o({op:"setProp",id:t,key:i,value:void 0});for(let[i,a]of Object.entries(e.props))i==="children"||i==="key"||typeof a=="function"&&n.props[i]!==a&&o({op:"setProp",id:t,key:i,value:a,prev:n.props[i]});for(let i of Object.keys(n.props))i==="children"||i==="key"||typeof n.props[i]=="function"&&e.props[i]===void 0&&o({op:"setProp",id:t,key:i,value:void 0,prev:n.props[i]})}async function ct(n,e,t,o,r,s,i){let a=A(n),l=A(e),u=Array.isArray(n.props.children)!==Array.isArray(e.props.children);await pe(a,l,t,o,r,s,i,u)}async function pe(n,e,t,o,r,s,i,a=!1){if(n=He(n),e=He(e),!a){let f=h=>!O(h)&&!te(h)&&!Array.isArray(h),m=n.filter(f),x=e.filter(f),T=(h,E)=>E>=h.length||O(h[E]),g=h=>typeof h?.type=="function"&&!de(h),p=h=>T(n,h)||g(n[h]),y=h=>T(e,h)||g(e[h]);(e.some((h,E)=>g(h)&&!p(E))||n.some((h,E)=>g(h)&&!y(E)))&&st(x,`children\uFF08\u65E0 key \u7EC4\u4EF6\u5B9E\u69FD\u7FFB\u8F6C ${m.length}\u2192${x.length}\uFF09`)}if(globalThis.__WF_DEBUG_MOVED__&&console.log("[debug-dci] id=",t,"oldKeys=",JSON.stringify(n.map(U)),"newKeys=",JSON.stringify(e.map(U)),"lk=",ue(n),ue(e)),ue(e)==="all-keyed"&&ue(n)==="all-keyed"){await ft(n,e,t,o,r,s,i);return}if(ut(e)||ut(n)){await ft(n,e,t,o,r,s,i);return}let l=null,u=Math.min(n.length,e.length);for(let f=0;f<u;f++){let m=n[f]??null,x=e[f]??null,T=k(t,f);O(x)?O(m)||(await dt(m,t,T,r,i),le(r,T,t,l)):await Yt(m,x,t,f,l,T,o,r,s,i),l=T}for(let f=n.length;f<e.length;f++)await o(e[f],t,f,l),l=k(t,f);let d=n.reduce((f,m)=>f+L(m),0),c=e.reduce((f,m)=>f+L(m),0);if(d>c){let f=d-c;for(let m=n.length-1;m>=0&&f>0;m--){let x=L(n[m]);x<=f&&(await dt(n[m],t,k(t,m),r,i),f-=x)}}}async function dt(n,e,t,o,r){if(O(n)){o({op:"remove",id:t});return}V(n,t,e,o,r)}function He(n){let e=[];for(let t of n)t!==null&&typeof t=="object"&&!Array.isArray(t)&&q(t)?e.push(...He(A(t))):e.push(t);return e}async function Yt(n,e,t,o,r,s,i,a,l,u){if(globalThis.__DBG7&&console.log("[dbg-slot]",s,"old=",n===null?"null":String(typeof n=="object"?n.type:n),"new=",e===null?"null":String(typeof e=="object"?e.type:e)),F(n)==="text"&&F(e)==="text"){String(n)!==String(e)&&a({op:"setText",id:s,value:String(e)});return}if(F(n)==="hole"){a({op:"remove",id:s}),await i(e,t,o,r);return}if(F(n)===F(e)&&typeof n!="string"&&typeof n!="number"){await Q(n,e,t,o,r,i,a,l,u);return}let d=B(M(n),M(e));if(!d)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${M(n)} \u2192 ${M(e)}\uFF08diffSlot\u2014\u2014\u5FC5\u987B\u663E\u5F0F\u8FC1\u79FB\u6216\u663E\u5F0F Reject\uFF09`);await d(n,e,{emit:a,emitNode:i,oldId:s,newId:s,parent:t,index:o,ref:r,oldCompId:typeof n?.type=="function"?s:void 0,registry:u})}function ut(n){return n.some(de)}async function ft(n,e,t,o,r,s,i){let a=new Map;n.forEach((p,y)=>{let w=U(p);w!==null&&!a.has(w)&&a.set(w,y)}),z(e,`keyed \u5217\u8868\uFF08${t}\uFF09`),z(n,`keyed \u5217\u8868\uFF08${t}\uFF09`);let l=new Set(e.map(p=>U(p)).filter(p=>p!==null)),u=new Map;for(let p=0;p<n.length;p++){let y=n[p];if(O(y)){r({op:"remove",id:k(t,p)});continue}if(te(y)){r({op:"remove",id:k(t,p)});continue}if(Array.isArray(y))continue;let w=U(y);if(w!==null){let h=(u.get(w)??0)+1;if(u.set(w,h),h===1)continue;V(y,k(t,p),t,r,i);continue}V(y,k(t,p),t,r,i)}for(let[p,y]of a)l.has(p)||V(n[y],k(t,y),t,r,i);let d=n.map(p=>U(p)).filter(p=>p!==null&&l.has(p)),c=e.map(p=>U(p)).filter(p=>p!==null&&a.has(p)),f=!0;{let p=0;for(let y of c){let w=d.indexOf(y,p);if(w===-1){f=!1;break}p=w+1}}if(!f){for(let[y,w]of a)l.has(y)||r({op:"unmount",compId:H(t,y)});n.forEach((y,w)=>{if(!O(y)){if(te(y)){r({op:"remove",id:k(t,w)});return}if(U(y)!==null){r({op:"remove",id:k(t,w)});return}V(y,k(t,w),t,r,i)}});let p=null;for(let y=0;y<e.length;y++){let w=e[y],h=U(w);if(h!==null&&typeof w.type=="function"){let E=H(t,h);await J(w,t,y,p,E,s,i,o,r)&&r({op:"mount",compId:E})}else await o(w,t,y,p);p=k(t,y)}return}let m=[];e.forEach((p,y)=>{let w=U(p);if(w===null)return;let h=a.get(w);h!==void 0&&h!==y&&m.push({oldIdx:h,newIdx:y})});let x=m.every(p=>p.newIdx<p.oldIdx);m.sort((p,y)=>x?p.newIdx-y.newIdx:y.newIdx-p.newIdx),globalThis.__WF_DEBUG_MOVED__&&console.log("[debug-moved] subseq=1 moved=",JSON.stringify(m),"oldIdxByKey=",JSON.stringify([...a.entries()]),"newKeys=",JSON.stringify([...l]),"parent=",t);for(let p of m)r({op:"move",id:k(t,p.oldIdx),parent:t,ref:null,newId:k(t,p.newIdx),noMove:!0});let T=!0,g=null;for(let p=0;p<e.length;p++){let y=e[p],w=U(y),h=k(t,p);if(w!==null){let E=a.get(w);E===void 0?await ce(y,t,p,g,w,o,r,s,i):typeof y.type=="function"?await ce(y,t,p,g,w,o,r,s,i):await Q(n[E],y,t,p,g,o,r,s,i)}else await o(y,t,p,g);g=h}}async function ce(n,e,t,o,r,s,i,a,l){let u=n;if(typeof u.type=="function"){let d=H(e,r),f=l.get(d)?.lastOutput;await J(u,e,t,o,d,a,l,async(x,T,g,p)=>{await Te(f,x,T,g,p,s,i,a,l,Q,d,k(e,t),(y,w,h,E,W)=>ce(y,w,h,E,W,s,i,a,l))},i)&&i({op:"mount",compId:d});return}await s(n,e,t,o)}async function Te(n,e,t,o,r,s,i,a,l,u,d,c,f){let m=()=>{if(n?.kind==="vnode"){let g=n.v;return g!==null&&typeof g=="object"&&typeof g.type=="function"?k(d,0):c}return k(d,0)},x=k(t,o),T=O(e);if(n===void 0){await s(e,t,o,r);return}switch(n.kind){case"hole":{if(!T){let g=B("hole",M(e));if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 hole \u2192 ${M(e)}\uFF08\u7EC4\u4EF6\u8F93\u51FA\u5C55\u5F00\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);await g(null,e,{emit:i,emitNode:s,oldId:m(),newId:x,parent:t,index:o,ref:r,registry:l})}return}case"vnode":{if(T){let g=B(M(n.v),"hole");if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${M(n.v)} \u2192 hole\uFF08\u7EC4\u4EF6\u8F93\u51FA\u6536\u7F29\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);let p=n.v,y=p!==null&&typeof p=="object"&&typeof p.type=="function"?p.key!==null?H(d,p.key):k(d,0):void 0;await g(n.v,e,{emit:i,emitNode:s,oldId:m(),newId:x,parent:t,index:o,ref:r,registry:l,oldCompId:y})}else if(Array.isArray(e)){let g=B(M(n.v),"array");if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${M(n.v)} \u2192 array\uFF08\u5355\u8282\u70B9\u2192\u591A\u6839\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);await g(n.v,e,{emit:i,emitNode:s,oldId:m(),newId:x,parent:t,index:o,ref:r,registry:l})}else{let g=e;f&&g!==null&&typeof g=="object"&&typeof g.type=="function"&&g.key!==null?await f(e,t,o,r,g.key):await u(n.v,g,t,o,r,s,i,a,l)}return}case"array":{if(T){let g=B("array","hole");if(!g)throw new Error("[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 array \u2192 hole\uFF08\u591A\u6839\u6536\u7F29\u2014\u2014P2 \u663E\u5F0F Reject\uFF09");await g(n.items,e,{emit:i,emitNode:s,oldId:m(),newId:x,parent:t,index:o,ref:r,registry:l})}else if(Array.isArray(e))await pe(n.items,e,t,s,i,a,l);else{let g=B("array",M(e));if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 array \u2192 ${M(e)}\uFF08\u591A\u6839\u2192\u5355\u8282\u70B9\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);await g(n.items,e,{emit:i,emitNode:s,oldId:m(),newId:x,parent:t,index:o,ref:r,registry:l})}return}}}async function Q(n,e,t,o,r,s,i,a,l){let u=k(t,o);if(typeof e.type=="function"){let c=e.key!==null?H(t,e.key):u,f=typeof n.type=="function"&&n.key!==null?H(t,n.key):u,m=l.get(c);if(c!==f||m&&m.type!==e.type){let g=l.get(f);if(g){f!==c&&i({op:"unmount",compId:f});let p=g.lastOutput;if(p!==void 0){let y=X(p);V(y,Y(y,f,k(t,o)),fe(y,f,t),i,l)}Z(f,l)}m=void 0,await J(e,t,o,r,c,a,l,s,i),i({op:"mount",compId:c});return}let x=m?.lastOutput;await J(e,t,o,r,c,a,l,async(g,p,y,w)=>{await Te(x,g,p,y,w,s,i,a,l,Q,c,k(t,o),(h,E,W,P,v)=>ce(h,E,W,P,v,s,i,a,l))})&&i({op:"mount",compId:c});return}if(typeof e.type=="string"&&typeof n.type=="string"){n.type===e.type?(lt(n,e,u,i),await ct(n,e,u,s,i,a,l)):(V(n,u,t,i,l),await s(e,t,o,r));return}if(q(n)&&q(e)){await pe(A(n),A(e),t,s,i,a,l);return}throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1AdiffSame \u672A\u5B9A\u4E49\u540C\u6001\u5BF9\u7167 ${String(n.type)} \u2194 ${String(e.type)}\uFF08P2 \u663E\u5F0F Reject\uFF09`)}function me(n,e,t,o){return new ReadableStream({async start(r){let s=d=>r.enqueue(d),i=Oe(s,t,o),a=M(n),l=M(e),u=B(a,l);u?await u(n,e,{emit:s,emitNode:i,oldId:"root.0",newId:"root.0",parent:"root",index:0,ref:null,registry:o,oldCompId:typeof n.type=="function"?n.key!==null?H("root",n.key):"root.0":void 0}):await Q(n,e,"root",0,null,i,s,t,o),s({op:"done"}),r.close()}})}var ke="__wf_portal";function De(n){return`${ke}-${n}`}function Xt(n){return typeof n=="function"?n():n}function pt(n){return n?typeof n=="function"?n():n:null}function mt(n,e){let t={tree:null,applier:null,container:null,chain:Promise.resolve(),version:0,open:!1,phase:"closed",disposed:!1,panel:null,pos:{top:0,left:0}},o=n.getBrowser()?.window,r=n.getBrowser()?.document,s=()=>{if(!r)return null;if(t.container)return t.container;let v=r.getElementById(ke);v||(v=r.createElement("div"),v.id=ke,r.body.appendChild(v));let b=e.key??"popup",S=r.getElementById(De(b));return S?t.container=S:(t.container=r.createElement("div"),t.container.id=De(b),v.appendChild(t.container)),t.container},i=0,a=()=>{if(t.disposed||!t.open)return;let v=pt(e.anchor);if(!v||!t.panel){i++<10&&queueMicrotask(a);return}if(!o)return;let b=t.panel,S=b.offsetWidth||b.getBoundingClientRect().width,C=b.offsetHeight||b.getBoundingClientRect().height;if((S===0||C===0)&&i++<10){typeof o.requestAnimationFrame=="function"?o.requestAnimationFrame(a):queueMicrotask(a);return}let N=typeof e.placement=="function"?e.placement():e.placement??"bottom";if(e.position){let I=e.position();if(I&&typeof I.x=="number"&&typeof I.y=="number"){if(t.pos={top:I.y,left:I.x,width:I.width},t.applier){let D=u(t.tree);D&&d(D)}return}}let R=et(v,o,S,C,N,e.gap??8,e.margin??8,e.center??!0);if(!R){i++<10&&queueMicrotask(a);return}if(i=0,t.pos=R,t.applier){let I=u(t.tree);I&&d(I)}},l=v=>{if(t.panel=v,v&&t.open&&e.positioning!=="none"&&(o&&typeof o.requestAnimationFrame=="function"?o.requestAnimationFrame(a):queueMicrotask(a)),v&&e.presence){let b=S=>{t.phase==="exit"&&f()};v.addEventListener("animationend",b),n.onUnmount(()=>v.removeEventListener("animationend",b))}},u=v=>{if(!v)return null;let b=v;e.mask&&(b=$("div",{class:"wf-popup-mask",style:{position:"fixed",inset:"0",background:"var(--wf-overlay, rgba(0,0,0,0.5))",display:"flex",alignItems:"center",justifyContent:"center",zIndex:"var(--wf-z-modal, 1000)"},onClick:I=>{e.maskClosable!==!1&&I.target===I.currentTarget&&m()}},e.maskCentered?{...b,props:{...b.props??{}}}:$("div",{class:"wf-popup-mask-inner"},b)));let S=b.props??{},C=e.positioning==="none"||String(S.class??"").includes("mask")?S.class??"":["wf-popup",S.class].filter(Boolean).join(" "),N=e.positioning==="none"?{...S.style??{},position:"fixed"}:{...S.style??{},position:"fixed",top:`${t.pos.top}px`,left:`${t.pos.left}px`,...t.pos.width!==void 0?{width:`${t.pos.width}px`}:{}};return{...b,props:{...S,class:C,style:N,ref:l}}},d=v=>{let b=++t.version,S=t.tree;t.tree=v,t.chain=t.chain.then(async()=>{if(t.disposed||b!==t.version)return;let C=t.applier;if(!C)return;let N=C.registry;if(!N)return;let R=n.getSharedContext()??{},D=(S?me(S,v,R,N):G(v,R,N)).getReader();for(;;){let{value:he,done:Kt}=await D.read();if(Kt)break;if(t.disposed||b!==t.version)return;C.apply(he)}}).catch(C=>{console.error("[popup] render error:",C)})},c=()=>{t.disposed||(t.disposed=!0,t.applier&&(t.applier.dispose(),t.applier=null),t.tree=null,t.container&&(t.container.remove(),t.container=null))},f=()=>{t.disposed||(t.open=!1,t.phase="closed",p(),c(),e.onClose?.())},m=()=>{!t.open||t.disposed||(e.presence?(t.phase="exit",t.panel&&o&&!tt(t.panel,o)&&f(),t.panel||f()):f())},x={value:""},T={value:null},g={value:!1},p=()=>{g.value&&(r?.body&&(r.body.style.overflow=x.value),x.value="",T.value&&(T.value.focus?.(),T.value=null),g.value=!1)},y=()=>{g.value=!0,e.lockScroll&&r?.body&&(x.value=r.body.style.overflow,r.body.style.overflow="hidden"),e.trapFocus&&o&&(T.value=o.document.activeElement,n.scheduleAfterRender(()=>{let v=t.panel;v&&(v.querySelector?.("input, button, [tabindex], select, textarea")??v).focus?.()}))},w=null;e.trapFocus&&o&&(w=v=>{if(v.key!=="Tab"||!t.open||!t.panel)return;let b=Array.from(t.panel.querySelectorAll?.("input, button, [tabindex], select, textarea")??[]).filter(R=>!R.disabled&&R.offsetParent!==null);if(b.length===0)return;let S=b[0],C=b[b.length-1],N=o?.document.activeElement;v.shiftKey&&(N===S||N===t.panel||!t.panel.contains(N))?(v.preventDefault(),C.focus()):!v.shiftKey&&(N===C||!t.panel.contains(N))&&(v.preventDefault(),S.focus())},o.addEventListener("keydown",w));let h=v=>{if(!t.open||(e.closeOnOutside??!0)===!1)return;let b=v.target,S=pt(e.anchor);b&&S?.contains(b)||b&&t.panel?.contains(b)||m()},E=v=>{t.open&&(e.closeOnEscape??!0)&&v.key==="Escape"&&m()};o&&(o.addEventListener("mousedown",h),o.addEventListener("keydown",E)),n.onUnmount(()=>{o&&(o.removeEventListener("mousedown",h),o.removeEventListener("keydown",E),w&&o.removeEventListener("keydown",w)),f()});let W=()=>{if(t.open||t.disposed)return;t.open=!0,t.phase="open";let v=s();if(!v)return;(e.trapFocus||e.lockScroll)&&y();let b=_();t.applier=new j(v,r,b);let S=Xt(e.content);S!=null?d(u(S)):f()},P={close:m,update(v){if(!(t.disposed||!t.open)){if(v==null){m();return}if(e.position){let b=e.position();b&&typeof b.x=="number"&&typeof b.y=="number"&&(t.pos={top:b.y,left:b.x,width:b.width})}d(u(v))}},refresh(){if(t.disposed||!t.open||!t.tree)return;if(e.position){let b=e.position();b&&typeof b.x=="number"&&typeof b.y=="number"&&(t.pos={top:b.y,left:b.x,width:b.width})}let v=u(t.tree);v&&d(v)},get open(){return t.open}};return W(),P}function gt(n,e,t){let o=n.nextHookIndex(),r=n.getHookState(o)??{value:t};n.setHookState(o,r);let s=e.value!==void 0;return{get value(){return e.value??r.value},controlled:e,setValue(i){s?(e.onChange||console.warn("[vdom] useControlled \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548"),e.onChange?.(i)):(r.value=i,n.requestRender())}}}function Qt(n,e,t){if(typeof n=="string")return n==="win"||n==="window"?e:t?t.querySelector(n)??e:e;if(n&&typeof n=="object"&&!("nodeType"in n)){let o=n;if(typeof o.getScroller=="function"){let r=o.getScroller();return r||e}return o.root?typeof o.root=="string"?t?t.querySelector(o.root)??e:e:o.root:e}return e}function yt(n,e){let t=n.nextHookIndex(),o=n.getHookState(t)??{y:0,x:0,raf:null,handler:null,retries:0};n.setHookState(t,o);let r=n.getBrowser()?.window,s=n.getBrowser()?.document??null;if(!r)return{y:0,x:0,refresh:()=>{}};let i=()=>{if(typeof e=="function")return e();if(e&&typeof e=="object"&&!("nodeType"in e)){let u=e;return typeof u.getScroller=="function"?u.getScroller()??null:u.root?typeof u.root=="string"?s?s.querySelector(u.root)??r:r:u.root:r}return Qt(e,r,s)},a=u=>{u===r?(o.y=r.scrollY||0,o.x=r.scrollX||0):(o.y=u.scrollTop,o.x=u.scrollLeft)},l=()=>{if(o.handler)return;let u=i();if(!u){o.retries++<10&&n.scheduleAfterRender(l);return}let d=()=>{o.raf||(o.raf=r.requestAnimationFrame(()=>{o.raf=null,a(u),n.requestRender()}))};u.addEventListener("scroll",d,{passive:!0}),o.handler=d,n.onUnmount(()=>{o.raf&&r.cancelAnimationFrame(o.raf),u.removeEventListener("scroll",d),o.handler=null})};return l(),{get y(){return o.y},get x(){return o.x},refresh:()=>{let u=i();u&&a(u)}}}function vt(n,e){let t=n.nextHookIndex(),o=n.getHookState(t)??{isIn:!1,io:null,retries:0,ready:!1};n.setHookState(t,o);let s=n.getBrowser()?.window?.IntersectionObserver,i=e&&typeof e=="object"&&!("nodeType"in e)?e:void 0,a=i?.target??(typeof e=="function"||e&&"nodeType"in e?e:void 0),l=typeof i?.rootMargin=="function"?i.rootMargin():i?.rootMargin,u=typeof i?.threshold=="function"?i.threshold():i?.threshold,d=typeof i?.root=="function"?i.root():i?.root??null,c=f=>{if(!s||!f||o.io)return;let m=new s(x=>{let T=x[0];T&&T.isIntersecting!==o.isIn&&(o.isIn=T.isIntersecting,i?.onChange?.(T,T.isIntersecting),n.requestRender())},{root:d??void 0,rootMargin:l,threshold:u});m.observe(f),o.io=m,o.ready=!0,n.onUnmount(()=>o.io?.disconnect())};if(s&&!o.io){let f=typeof a=="function"?a():a??null;f?c(f):a!==void 0&&o.retries++<10&&n.scheduleAfterRender(()=>c(typeof a=="function"?a():a??null))}return{get isIn(){return o.isIn},get ready(){return o.ready},ref:f=>{f?c(f):o.io?.disconnect()},observe:f=>c(f),disconnect:()=>{o.io?.disconnect(),o.io=null}}}function ht(n,e,t){let o=n.nextHookIndex(),r=n.getHookState(o)??{keyword:"",selectedLabel:"",composing:!1};n.setHookState(o,r);let s=e.value!==void 0;return{controlled:e,get value(){return e.value??r.keyword},setValue(i){s?(e.onChange||console.warn(`[vdom] useControlledInput(${t?.name??""}) \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),e.onChange?.(i)):(r.keyword=i,n.requestRender())},get keyword(){return r.keyword},setKeyword(i){r.keyword=i,r.composing||this.setValue(i)},get selectedLabel(){return r.selectedLabel},setSelectedLabel(i){r.selectedLabel=i},get isComposing(){return r.composing},onCompositionStart(){r.composing=!0},onCompositionEnd(){r.composing=!1}}}function bt(n,e){let t={draggable:!0,onDragStart:o=>{e.data!==void 0&&o.dataTransfer?.setData("text/plain",JSON.stringify(e.data)),e.onDragStart?.(o,e.data)},onDragEnd:o=>e.onDragEnd?.(o)};return{draggableProps:t,dragProps:t,dropProps:{onDragOver:o=>{o.preventDefault(),e.onDragOver?.(o)},onDragLeave:o=>e.onDragLeave?.(o),onDrop:o=>{o.preventDefault();let r;try{r=o.dataTransfer?.getData("text/plain")?JSON.parse(o.dataTransfer.getData("text/plain")):void 0}catch{r=void 0}e.onDrop?.(o,r)}}}}function Ue(n,e){let t=`media:${e}`,o=n.getInstanceData().get(t);o||(o={matches:!1,mql:null},n.getInstanceData().set(t,o));let r=n.getBrowser()?.window,i=(r?.matchMedia?.bind(r)??(typeof matchMedia=="function"?matchMedia.bind(void 0):void 0))?.(e);if(i&&(o.matches=i.matches,!o.mql)){let a=()=>{o.matches=i.matches,n.requestRender()};i.addEventListener("change",a),o.mql=i,n.onUnmount(()=>i.removeEventListener("change",a))}return()=>o.matches}function wt(n,e){let t=Object.entries(e).sort((o,r)=>o[1]-r[1]);return()=>{let o=t[0]?.[0]??"default";for(let[r,s]of t)Ue(n,`(min-width: ${s}px)`)()&&(o=r);return o}}var Zt=0,$e=()=>`m${Date.now().toString(36)}${(Zt++).toString(36)}`;function xt(n,e){let t=n.nextHookIndex(),o=n.getHookState(t)??{messages:[],status:"idle",subs:new Set,controller:null,seq:0,input:"",error:null,usage:null,step:null};if(n.setHookState(t,o),o.messages.length===0){let a=[];e.system&&a.push({id:$e(),role:"system",content:e.system}),e.initialMessages&&a.push(...e.initialMessages),o.messages=a}let r=()=>{for(let a of[...o.subs])a()},s=e.parseChunk??(a=>{let l=a.trim();if(!l||l.startsWith("event:"))return null;let u=l.startsWith("data:")?l.slice(5).trim():l;if(!u)return null;try{let d=JSON.parse(u);return d.toolCalls?d:d.text!==void 0?{content:String(d.text)}:d.content!==void 0?{content:d.content}:null}catch{return null}}),i={get state(){return o.messages},get messages(){return o.messages},get status(){return o.status},get input(){return o.input??""},setInput(a){o.input=a},get streaming(){return o.status==="streaming"},get error(){return o.error??null},get usage(){return o.usage??null},get step(){return o.step??null},subscribe(a){return o.subs.add(a),()=>{o.subs.delete(a)}},set(){},update(){},notify:r,async send(a=o.input){let l=typeof e.url=="function"?e.url():e.url??"/api/chat",u={id:$e(),role:"user",content:a};o.messages=[...o.messages,u];let d={id:$e(),role:"assistant",content:"",status:"streaming"};o.messages=[...o.messages,d],o.status="streaming",r();let c=new AbortController;o.controller=c;try{let f=await fetch(l,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({messages:o.messages.map(g=>({role:g.role,content:g.content}))}),signal:c.signal});if(!f.ok||!f.body)throw new Error(`[vdom] chat \u8BF7\u6C42\u5931\u8D25 ${f.status}`);let m=f.body.getReader(),x=new TextDecoder,T="";for(;;){let{value:g,done:p}=await m.read();if(p)break;T+=x.decode(g,{stream:!0});let y=T.split(`
2
- `);T=y.pop()??"";for(let w of y){if(!w.trim())continue;let h=s(w);h&&(h.content&&(d.content+=h.content,r()),h.toolCalls&&(d.toolCalls=[...d.toolCalls??[],...h.toolCalls],r()))}}d.status=void 0,o.status="idle"}catch(f){f.name!=="AbortError"?(d.status="error",o.status="error"):(d.status=void 0,o.status="idle")}finally{o.controller=null,r()}},stop(){o.controller?.abort()},retry(){let a=[...o.messages].reverse().find(l=>l.role==="user");a&&i.send(a.content)},reset(){o.messages=[],o.status="idle",r()},async approve(a,l,u){let d=!1;o.messages=o.messages.map(c=>({...c,toolCalls:c.toolCalls?.map(f=>d||f.approved?f:(d=!0,{...f,approved:a!=="rejected",feedback:l,...a==="modified"&&u?{args:u}:{}}))})),r()}};return i}function en(n){let e=n.getBrowser()?.window;return e?.matchMedia?e.matchMedia.bind(e):typeof matchMedia=="function"?matchMedia.bind(void 0):null}function We(n){let e=en(n);return!!(e&&e("(prefers-reduced-motion: reduce)").matches)}function Tt(n,e,t){let o=n.getBrowser()?.window,r=We(n),s=t?.duration??400;if(s<=0)return{value:e,reset:()=>{}};let i=t?.ease==="linear"?m=>m:m=>1-Math.pow(1-m,3),a,l=e,u=r?e:0,d={get value(){return u},set value(m){u=m},reset:()=>{}},c=()=>{n.requestRender()},f=m=>{if(l=m,r){d.value=m,c();return}if(m===d.value)return;if(!o){d.value=m;return}a&&o.cancelAnimationFrame(a);let x=d.value,T=o.performance.now(),g=p=>{let y=Math.min(1,(p-T)/s);d.value=Math.round(x+(m-x)*i(y)),y<1?a=o.requestAnimationFrame(g):a=void 0,c()};a=o.requestAnimationFrame(g)};return d.reset=m=>{m===l&&a||f(m)},n.onUnmount(()=>{a&&o&&(o.cancelAnimationFrame(a),a=void 0)}),d.reset(e),d}function kt(n,e){let t=n.getBrowser()?.window,o=0,r=0,s=!1,i=0,a=c=>{s&&e.onMove(c,{x:c.clientX-o,y:c.clientY-r})},l=c=>{s&&c.pointerId===i&&(s=!1,t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",u)),e.onEnd?.(c))},u=c=>{!s||c.pointerId!==i||(s=!1,t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",u)),e.onEnd?.(c))},d=c=>{s||(c.preventDefault(),s=!0,i=c.pointerId,o=c.clientX,r=c.clientY,t&&(t.addEventListener("pointermove",a),t.addEventListener("pointerup",l),t.addEventListener("pointercancel",u)),e.onStart?.(c))};return n.onUnmount(()=>{s&&t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",u),s=!1)}),{onPointerDown:d}}function Ct(n){let e=n.getBrowser()?.window,t=e?.visualViewport,o=t?.height??e?.innerHeight??0,r=t?.offsetTop??0,s=!1,i={get height(){return o},get offsetTop(){return r},get keyboardOpen(){return s}},a=()=>{let l=e?.visualViewport;o=l?.height??e?.innerHeight??0,r=l?.offsetTop??0,s=o<(e?.innerHeight??0)*.9,n.requestRender()};if(e){let l=e.visualViewport;l?.addEventListener?(l.addEventListener("resize",a),l.addEventListener("scroll",a),n.onUnmount(()=>{l.removeEventListener("resize",a),l.removeEventListener("scroll",a)})):(e.addEventListener("resize",a),n.onUnmount(()=>e.removeEventListener("resize",a)))}return i}function Et(n){return{useExternal(e){let t=n.getInstanceData(),o=t.get(e);if(!o){let r=e.subscribe(()=>n.requestRender());n.onUnmount(r),o={unsub:r},t.set(e,o)}return()=>e.state},signal:e=>Me(e),hold:e=>n.onUnmount(e),useStableRef:(e,t)=>Xe(n,e,t),useOpen:(e,t)=>Qe(n,e,t),onUnmount:e=>n.onUnmount(e),useGlobalKey:(e,t)=>Ze(n,e,t),openPopup:e=>mt(n,e),usePopupPosition:e=>nt(n,e),useControlled:(e,t)=>gt(n,e,t),useScrollPosition:e=>yt(n,e),useInView:e=>vt(n,e),useControlledInput:(e,t)=>ht(n,e,t),useDragDrop:e=>bt(n,e),useMedia:e=>Ue(n,e),useBreakpoint:e=>wt(n,e),useChat:e=>xt(n,e),useTween:(e,t)=>Tt(n,e,t),useDrag:e=>kt(n,e),useVisualViewport:()=>Ct(n),useReducedMotion:()=>We(n)}}function ge(n,e,t){return e<=0?n:new Promise((o,r)=>{let s=setTimeout(()=>{r(new Error(`[vdom] \u5F02\u6B65\u8D85\u65F6\uFF08${e}ms\uFF09: ${t}`))},e);n.then(i=>{clearTimeout(s),o(i)},i=>{clearTimeout(s),r(i)})})}var Ce=0,St=!1;function Rt(){Ce++}function It(){Ce>0&&Ce--}function Nt(n,e){if(Ce<=0)return!1;let t=new Error().stack?.split(`
3
- `).slice(2,6).map(o=>o.trim()).join(" \u2190 ")??"";return console.warn(`[vdom] \u6E32\u67D3\u8DEF\u5F84\u526F\u4F5C\u7528\uFF1ArenderFn \u5185\u521B\u5EFA ${n}\u2014\u2014\u6BCF\u6B21\u6E32\u67D3\u91CD\u5EFA\u5B9A\u65F6\u5668\uFF08\u91CD\u6E32\u67D3\u98CE\u66B4/SSR \u670D\u52A1\u5668\u6C61\u67D3\u2014\u2014DemoProgress \u5B9E\u8BC1\uFF09\u2014\u2014\u5E94\u5728\u5DE5\u5382\uFF08mount \u671F\uFF09\u521B\u5EFA + ctx.ui.hold \u6CE8\u518C\u6E05\u7406\uFF0C\u6216\u56DE\u8C03\u5185\u521B\u5EFA`),console.warn(`[vdom] \u8C03\u7528\u94FE: ${t}`),e}function Vt(n,e=!1){if(St)return;let t=n,o=t.setTimeout,r=t.setInterval;typeof o!="function"||typeof r!="function"||(t.setTimeout=function(i,a,...l){return Nt("setTimeout",e)?0:o.call(t,i,a,...l)},t.setInterval=function(i,a,...l){return Nt("setInterval",e)?0:r.call(t,i,a,...l)},St=!0)}function tn(n){return O(n)?{kind:"hole"}:Array.isArray(n)?{kind:"array",items:n}:{kind:"vnode",v:n}}function X(n){return n.kind==="hole"?null:n.kind==="array"?n.items:n.v}function _(){let n=new Map;return{get:e=>n.get(e),set:(e,t)=>{n.set(e,t)},delete:e=>{n.delete(e)},keys:()=>[...n.keys()],asyncTimeout:15e3}}function Pt(n){for(let e of[...n.keys()].reverse())Z(e,n)}async function J(n,e,t,o,r,s,i,a,l){let u=n.type,d=i.get(r);if(d&&d.phase==="mounting")throw new Error(`[vdom] \u7EC4\u4EF6\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A${r} \u6B63\u5728 mount\uFF08\u5F02\u6B65\u5DE5\u5382\u671F\u95F4\u91CD\u590D\u5F15\u7528\u2014\u2014\u5FAA\u73AF\u4F9D\u8D56\uFF1F\uFF09`);if(d&&d.type!==u){if(Z(r,i),d.lastOutput!==void 0&&l){let g=X(d.lastOutput);V(g,Y(g,r,r),r,l,i)}d=void 0}let c=!d;if(!d){let g=[],p=new Map,y={n:0},w=new Map,h=Object.create(s);h.onUnmount=P=>{g.push(P)},h.ui=Et({requestRender:()=>{h.render?.()},onUnmount:P=>{g.push(P)},getBrowser:()=>s.browser??null,nextHookIndex:()=>y.n++,getHookState:P=>p.get(P),setHookState:(P,v)=>{p.set(P,v)},getInstanceData:()=>w,scheduleAfterRender:P=>s.afterRender?.(P),getSharedContext:()=>s??null});let E={type:u,renderFn:(()=>null),onUnmounts:g,hookSeq:y,hookStates:p,renderBase:0,phase:"mounting"};i.set(r,E);let W;try{let P=u(n.props,h);W=await ge(Promise.resolve(P),i.asyncTimeout,`mount(${r})`)}catch(P){i.delete(r);for(let v of g.reverse())try{v()}catch(b){console.error("[vdom] mount \u6E05\u7406:",b)}throw P}d={type:u,renderFn:W,onUnmounts:g,hookSeq:y,hookStates:p,renderBase:0,phase:"mounted"},d.renderBase=y.n,i.set(r,d)}d.hookSeq.n=d.renderBase;let f;try{Rt();let g;try{g=d.renderFn(n.props)}finally{It()}f=await ge(Promise.resolve(g),i.asyncTimeout,`renderFn(${r})`)}catch(g){console.error(`[vdom] renderFn \u8D85\u65F6/\u9519\u8BEF\uFF08${r}\uFF09\u2014\u2014\u7EC4\u4EF6\u7EA7 hole \u964D\u7EA7\uFF08\u4E0B\u4E00\u62CD\u91CD\u8BD5\u81EA\u6108\uFF09:`,g),f=null}d.lastOutput=tn(f);let m=Array.isArray(f),x=typeof f?.type=="function",T=O(f);return await a(f,m||x||T?r:e,m||x||T?0:t,o),c}function Z(n,e){let t=[...e.keys()].filter(o=>o===n||o.startsWith(n+".")).reverse();for(let o of t){let r=e.get(o);if(r){for(let s of r.onUnmounts.reverse())try{s()}catch(i){console.error("[vdom] onUnmount:",i)}e.delete(o)}}}var Ee=class{queue=null;failed=!1;phase="inactive";begin(e){let t=[],o=r=>{t.push(r);for(let s of r.childNodes)o(s)};for(let r of e.childNodes)o(r);this.queue=t,this.failed=!1,this.phase="consuming"}end(){this.phase==="consuming"&&(this.queue&&this.queue.length>0&&(this.failed=!0),this.queue=null,this.phase=this.failed?"failed":"inactive")}reset(){this.queue=null,this.failed=!1,this.phase="inactive"}next(e,t,o){if(this.phase!=="consuming")return console.error(`[vdom] absorb \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Anext \u5728 ${this.phase} \u9636\u6BB5\u8C03\u7528\uFF08\u5E94 consuming\uFF09`),null;let r=this.queue;if(!r)return null;for(;r.length>0;){let s=r.shift();if(e==="element"?s.nodeType===1&&s.tagName.toLowerCase()===t:e==="text"?s.nodeType===3:s.nodeType===8){if(e==="text"&&o!==void 0){let a=s,l=a.textContent??"";if(l!==o&&l.startsWith(o)){let u=a.splitText(o.length);r.unshift(u)}}return s}}return this.failed=!0,this.phase="failed",null}};var nn=new Set(["draggable","contenteditable","spellcheck"]);function Fe(n,e,t){if(e==="innerHTML"||e==="textContent"||e==="value"){n[e]=t;return}if(t==null){n.removeAttribute(e);return}if(nn.has(e)){n.setAttribute(e,t?"true":"false");return}if(t===!1){n.removeAttribute(e);return}if(e==="class"||e==="className"){n.setAttribute("class",String(t));return}if(typeof t=="boolean"){n.setAttribute(e,"");return}n.setAttribute(e,String(t))}var on=new Set(["zIndex","opacity","lineHeight","zoom","fontWeight","order","flex","flexGrow","flexShrink","flexBasis","animationIterationCount","orphans","widows","columns","columnCount","columnGap","counterIncrement","counterReset","aspectRatio","scale","rotate"]);function rn(n,e,t){if(t==null||t===!1){e.startsWith("--")&&n.style.removeProperty(e),n.style[e]="";return}if(e.startsWith("--")){n.style.setProperty(e,String(t));return}typeof t=="number"&&!on.has(e)&&(t=`${t}px`),n.style[e]=String(t)}function Ke(n,e){if(typeof e=="string"){n.setAttribute("style",e);return}if(e&&typeof e=="object"){n.style.cssText="";for(let[t,o]of Object.entries(e))rn(n,t,o)}}var sn=new Set(["value","checked","selected","disabled","hidden","autofocus","defaultValue","defaultChecked","innerHTML","textContent","download","indeterminate","multiple","readOnly","required","tabIndex","spellcheck","draggable","scrollTop","scrollLeft","volume","muted","paused","playbackRate","open"]);function At(n){return sn.has(n)}function Mt(n,e,t){n[e]=t}function ye(n,e){for(let[t,o]of Object.entries(e))t==="style"?Ke(n,o):Fe(n,t,o)}function Lt(n,e,t,o,r,s){if(o!=="ref")if(typeof r=="function"||r===void 0&&typeof s=="function"){if(ee.test(o)){let i=ae(o);i&&n.set(e,i,r)}return}else if(ee.test(o)){let i=ae(o);i&&n.set(e,i,r)}else o==="style"?Ke(t,r):At(o)?Mt(t,o,r):Fe(t,o,r)}var an="http://www.w3.org/2000/svg",ln=new Set(["svg","path","circle","line","rect","text","g","defs","marker","polyline","polygon","ellipse","use","symbol","tspan","textPath","clipPath","mask","pattern","linearGradient","radialGradient","stop"]);function Ot(n,e){return ln.has(e)?n.createElementNS(an,e):n.createElement(e)}function dn(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===1&&t.tagName.toLowerCase()===e.tag)ye(t,e.attrs);else if(n.absorb.queue&&!t){let r=n.absorb.next("element",e.tag);if(r)ye(r,e.attrs),n.nodes.set(e.id,r);else{let s=Ot(n.doc,e.tag);ye(s,e.attrs),n.nodes.set(e.id,s)}}else{let r=Ot(n.doc,e.tag);ye(r,e.attrs),t&&(n.clearNodeRefs(e.id),n.eventRegistry.remove(e.id),t.replaceWith(r)),n.nodes.set(e.id,r)}let o=n.nodes.get(e.id);o&&o.nodeType===1&&o.setAttribute("data-wf-id",e.id)}function un(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===3)t.textContent!==e.value&&(t.textContent=e.value);else if(n.absorb.queue&&!t){let o=n.absorb.next("text",void 0,e.value);if(o)o.textContent!==e.value&&(o.textContent=e.value),n.nodes.set(e.id,o);else{let r=n.doc.createTextNode(e.value);n.nodes.set(e.id,r)}}else{let o=n.doc.createTextNode(e.value);t&&t.replaceWith(o),n.nodes.set(e.id,o)}}function fn(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===8){let o=e.detail?`wf-hole: ${e.detail}`:"wf-hole";t.textContent!==o&&(t.textContent=o)}else if(n.absorb.queue&&!t){let o=n.absorb.next("comment");if(o)n.nodes.set(e.id,o);else{let r=n.doc.createComment(e.detail?`wf-hole: ${e.detail}`:"wf-hole");n.nodes.set(e.id,r)}}else{let o=n.doc.createComment(e.detail?`wf-hole: ${e.detail}`:"wf-hole");t&&t.replaceWith(o),n.nodes.set(e.id,o)}}function cn(n,e){let t=n.nodes.get(e.id);if(!t||t.isConnected)return;let o=n.parentOf(e);if(o){if(o.nodeType===3){let r=o.parentElement;if(!r)return;let s=o.nextSibling&&o.nextSibling.parentNode===r?o.nextSibling:null;r.insertBefore(t,s),t.nodeType===1&&n.refRegistry.mount(e.id,t);return}if(o.nodeType===8){console.error(`[vdom] id \u7A7A\u95F4\u8FDD\u4F8B\uFF1Ainsert ${e.id} \u7684 parent \u662F\u6CE8\u91CA\u951A\uFF08${e.parent}\uFF09\u2014\u2014\u63D2\u5230\u7236\u5BB9\u5668`);let r=o.parentElement;r&&r.appendChild(t),t.nodeType===1&&n.refRegistry.mount(e.id,t);return}if(e.ref){let r=n.nodes.get(e.ref)??null;r&&r.parentNode===o?o.insertBefore(t,r.nextSibling):r?o.appendChild(t):o.insertBefore(t,o.firstChild)}else o.insertBefore(t,o.firstChild);t.nodeType===1&&n.refRegistry.mount(e.id,t)}}function pn(n,e){let t=n.nodes.get(e.id);if(t){if(!e.noMove){let o=n.parentOf(e);if(!o)return;let r=e.ref?n.nodes.get(e.ref)??null:null;r?o.insertBefore(t,r.nextSibling):e.first?o.insertBefore(t,o.firstChild):o.appendChild(t)}n.remapSubtree(e.id,e.newId)}}function mn(n,e){n.clearNodeRefs(e.id),n.eventRegistry.remove(e.id),n.nodes.get(e.id)?.remove();let t=e.id+".";for(let o of[...n.nodes.keys()])o.startsWith(t)&&(n.clearNodeRefs(o),n.eventRegistry.remove(o),n.nodes.delete(o));n.nodes.delete(e.id)}function gn(n,e){let t=n.nodes.get(e.id);t&&t.nodeType===3&&(t.textContent=e.value)}function yn(n,e){let t=n.nodes.get(e.id);if(!t||t.nodeType!==1)return;let o=t;if(e.key==="ref"){let r=n.refRegistry.refs.get(e.id);if(e.value===void 0){n.refRegistry.set(e.id,void 0,r),n.refRegistry.refs.delete(e.id);return}n.refRegistry.set(e.id,e.value,r),o.isConnected&&n.refRegistry.mount(e.id,o);return}if(ee.test(e.key)){let r=ae(e.key);r&&(e.value===void 0?n.eventRegistry.removeEvent(e.id,r):n.eventRegistry.set(e.id,r,e.value));return}Lt(n.eventRegistry,e.id,o,e.key,e.value,e.prev)}function vn(n,e){let t=n.nodes.get(e.id);t&&t.nodeType===1&&typeof e.fn=="function"&&(n.refRegistry.set(e.id,e.fn),n.refRegistry.mount(e.id,t))}function hn(n,e){n.clearNodeRefs(e.id)}function bn(n,e){let t=n.registry?.get(e.compId);t&&(t.phase="mounted")}function wn(n,e){n.registry&&Z(e.compId,n.registry)}function xn(n,e){if(e.full&&n.absorb.end(),e.full&&n.touched.size>0)for(let[t,o]of[...n.nodes])n.touched.has(t)||(n.clearNodeRefs(t),n.eventRegistry.remove(t),o.remove(),n.nodes.delete(t));n.touched.clear()}function Ht(n,e){switch(e.op){case"create":dn(n,e);break;case"createText":un(n,e);break;case"createAnchor":fn(n,e);break;case"insert":cn(n,e);break;case"move":pn(n,e);break;case"remove":mn(n,e);break;case"setText":gn(n,e);break;case"setProp":yn(n,e);break;case"ref":vn(n,e);break;case"unref":hn(n,e);break;case"mount":bn(n,e);break;case"unmount":wn(n,e);break;case"done":xn(n,e);break;case"close":break}}var j=class{nodes=new Map;touched=new Set;eventRegistry;refRegistry=new we;absorb=new Ee;container;doc;registry;devVerify=null;constructor(e,t,o){this.container=e,this.doc=t,this.registry=o??null,this.eventRegistry=new be(t,e)}dispose(){if(this.eventRegistry.dispose(),this.refRegistry.dispose(),this.registry)for(let e of[...this.registry.keys()].reverse()){let t=this.registry.get(e);if(t){for(let o of[...t.onUnmounts].reverse())try{o()}catch{}this.registry.delete(e)}}}clearNodeRefs(e){this.refRegistry.unmount(e)}remapSubtree(e,t){let o=(r,s)=>{let i=r.get(s);i!==void 0&&(r.delete(s),r.set(t+s.slice(e.length),i))};for(let r of[...this.nodes.keys()])if(r===e||r.startsWith(e+".")){o(this.nodes,r);let s=this.nodes.get(t+r.slice(e.length));s&&s.nodeType===1&&s.setAttribute("data-wf-id",t+r.slice(e.length))}this.refRegistry.remap(e,t);for(let r of[...this.eventRegistry.table.keys()])if(r===e||r.startsWith(e+".")){let s=this.eventRegistry.table.get(r);this.eventRegistry.table.delete(r),this.eventRegistry.table.set(t+r.slice(e.length),s)}if(this.registry){for(let r of[...this.registry.keys()])if(r===e||r.startsWith(e+".")){let s=this.registry.get(r);this.registry.delete(r),this.registry.set(t+r.slice(e.length),s)}}}parentOf(e){if(e.parent==="root")return this.container;let t=this.nodes.get(e.parent);if(t)return t;let o=e.parent.split(".");for(let r=o.length-1;r>0;r--){let s=o.slice(0,r).join(".");if(s==="root")return this.container;let i=this.nodes.get(s);if(i)return i}return null}apply(e){Ht(this,e),this.devVerify&&this.devVerify(e,this)}};function Dt(){let n=new Map;return{get:e=>n.get(e),set:(e,t)=>{n.set(e,t)},removePrefix:e=>{for(let t of[...n.keys()])(t===e||t.startsWith(e+"."))&&n.delete(t)},hasPrefix:e=>{for(let t of n.keys())if(t===e||t.startsWith(e+"."))return!0;return!1},remapPrefix:(e,t)=>{for(let[o,r]of[...n])(o===e||o.startsWith(e+"."))&&(n.delete(o),n.set(t+o.slice(e.length),r))},clear:()=>{n.clear()}}}function Ut(n,e){let t=[];switch(e.op){case"create":case"createText":case"createAnchor":{n.get(e.id)===void 0&&n.set(e.id,"created");break}case"insert":{let o=n.get(e.id);o===void 0?t.push(`insert Pre \u8FDD\u4F8B\uFF1Aid ${e.id} \u672A create`):o==="created"&&n.set(e.id,"inserted");break}case"close":{let o=n.get(e.id);o===void 0?t.push(`close Pre \u8FDD\u4F8B\uFF1Aid ${e.id} \u4E0D\u5B58\u5728`):o==="inserted"?n.set(e.id,"active"):o!=="active"&&t.push(`close Pre \u8FDD\u4F8B\uFF1A${e.id} \u72B6\u6001\u5E94\u4E3A inserted/active\uFF08\u5B9E\u9645 ${o}\uFF09`);break}case"remove":{n.removePrefix(e.id),n.hasPrefix(e.id)&&t.push(`remove Post \u8FDD\u4F8B\uFF1A${e.id} \u524D\u7F00\u8BB0\u5F55\u6B8B\u7559`);break}case"setText":{n.get(e.id)===void 0&&t.push(`setText Pre \u8FDD\u4F8B\uFF1Aid ${e.id} \u4E0D\u5B58\u5728`);break}case"setProp":{n.get(e.id)===void 0&&t.push(`setProp Pre \u8FDD\u4F8B\uFF1Aid ${e.id} \u4E0D\u5B58\u5728`);break}case"move":{n.remapPrefix(e.id,e.newId),n.get(e.newId)===void 0&&t.push(`move Post \u8FDD\u4F8B\uFF1Aremap \u540E\u65B0 id ${e.newId} \u4E0D\u5B58\u5728`);break}case"mount":case"unmount":case"ref":case"unref":break;case"done":break}return t}function $t(){let n=Dt();return(e,t)=>{let o=Ut(n,e);for(let r of o)console.error(`[vdom-dev] ${r}`);switch(e.op){case"insert":{let r=t.nodes.get(e.id);r&&!r.isConnected&&console.error(`[vdom-dev] insert Post \u8FDD\u4F8B\uFF1A${e.id} \u672A\u6302\u8F7D\uFF08isConnected=false\uFF09`);break}case"setText":{let r=t.nodes.get(e.id);r&&r.nodeType!==3&&console.error(`[vdom-dev] setText Pre \u8FDD\u4F8B\uFF1A${e.id} \u975E\u6587\u672C\u8282\u70B9\uFF08${r.nodeType}\uFF09`);break}case"setProp":{let r=t.nodes.get(e.id);r&&r.nodeType!==1&&console.error(`[vdom-dev] setProp Pre \u8FDD\u4F8B\uFF1A${e.id} \u975E\u5143\u7D20\u8282\u70B9\uFF08${r.nodeType}\uFF09`);break}default:break}}}function Wt(n=15e3){let e=new Map,t="active",o={};return{get(r,s){let i=e.get(r);if(i)return i;let a=ge((async()=>{if(r in o)return o[r];if(s)return s();let l=await fetch(r);if(!l.ok)throw new Error(`[vdom] ctx.data \u8BF7\u6C42\u5931\u8D25 ${l.status}: ${r}`);return l.json()})(),n,`ctx.data(${r})`);return e.set(r,a),a},set(r,s){e.set(r,Promise.resolve(s))},has(r){return e.has(r)},preload(r){o={...o,...r}},invalidate(r){e.delete(r)},seed(){return o}}}function Tn(n){return(e,t)=>{if(t&&typeof t=="object"&&typeof t.$fn=="number"){let o=n.get(t.$fn);return o||console.error(`[vdom] \u4F20\u8F93\u8FDD\u4F8B\uFF1A$fn:${t.$fn} \u65E0\u5BF9\u5E94\u51FD\u6570\uFF08\u51FD\u6570\u8868\u5DF2\u6E05/\u8DE8\u6D41\u5F15\u7528\uFF09`),o}return t}}function kn(n,e){return $("div",{class:"wf-error-fallback",style:"padding:40px 24px;text-align:center;font-family:var(--wf-font-sans,system-ui);"},[$("div",{style:"font-size:21px;font-weight:600;margin-bottom:8px;"},"\u9875\u9762\u6E32\u67D3\u5931\u8D25"),$("div",{style:"font-size:13px;color:var(--wf-color-text-secondary,#64748b);margin-bottom:16px;max-width:520px;margin-inline:auto;word-break:break-all;"},String(n?.message??n)),$("button",{class:"wf-btn wf-btn--primary",onClick:()=>{e.render?.()},style:"padding:8px 20px;border-radius:6px;border:none;cursor:pointer;"},"\u91CD\u8BD5")])}function qt(n,e){let t=new TextDecoder,o="",r=Tn(e),s=async()=>{for(;;){let i=o.indexOf(`
4
- `);if(i>=0){let u=o.slice(0,i).trim();if(o=o.slice(i+1),u)return{value:JSON.parse(u,r),done:!1};continue}let{value:a,done:l}=await n.read();if(l){if(o.trim()){let u=o.trim();return o="",{value:JSON.parse(u,r),done:!1}}return{value:void 0,done:!0}}o+=t.decode(a,{stream:!0})}};return{[Symbol.asyncIterator](){return{next:s}}}}function Cn(n,e){let t=new TextEncoder,o=new WeakMap,r=(s,i)=>{if(typeof i=="function"){let a=o.get(i);if(a!==void 0)return{$fn:a};let l=e.size+1;return e.set(l,i),o.set(i,l),{$fn:l}}return i};return n.pipeThrough(new TransformStream({transform(s,i){i.enqueue(t.encode(JSON.stringify(s,r)+`
5
- `))}}))}function En(){return new Map}function Sn(n,e){let t=document,o=window,r=typeof e.root=="string"?t.querySelector(e.root):e.root;if(!r)throw new Error(`uiServe: root \u672A\u627E\u5230 \u2014 ${String(e.root)}`);let s=En(),i=_(),a=new j(r,t,i);o.__WF_DEV__&&(a.devVerify=$t(),Vt(o));let l=se(o.location.pathname),u=null,d="active",c="idle",f=[],m=null,x=0,T=3,g=C=>{u=null;let N=e.errorFallback?.(C,E)??kn(C,E),I=W.stream(N,{status:500}).body.getReader();(async()=>{try{for await(let D of qt(I,s))a.apply(D)}catch(D){console.error("[vdom] error fallback \u6E32\u67D3\u5931\u8D25:",D)}})()},p=[],y=async C=>{let N=C;c="rendering";try{for(;;){try{l=N;let R=await n.resolve(l,E),I=R.headers.get("Location");if(R.status>=300&&R.status<400&&I){o.history.replaceState({},"",I),N=se(I);continue}if(R.body){for await(let D of qt(R.body.getReader(),s))a.apply(D);if(a.absorb.failed){r.innerHTML="",u=null,a.absorb.reset();continue}}if(!u&&a.absorb.failed){r.innerHTML="",a.absorb.reset();continue}x=0}catch(R){u=null,x++,console.error("[vdom] render:",R),x>=T&&(x=0,g(R instanceof Error?R:new Error(String(R))))}if(f.length>0)N=f.shift();else break}}finally{let R=p;p=[];for(let I of R)try{I()}catch(D){console.error("[vdom] afterRender:",D)}c="idle",m=null,s.clear()}},w=C=>{if(d==="unmounted")return console.error("[vdom] serve \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Aunmount \u540E render \u8C03\u7528\u88AB\u5FFD\u7565"),Promise.resolve();if(c==="rendering"&&m)return f.push(C),m;let N=y(C);return m=N,N},h=async C=>{if(d==="unmounted"){console.error("[vdom] serve \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Aunmount \u540E navigate \u88AB\u5FFD\u7565");return}o.history.pushState({},"",C),await w(se(C))},E={async render(){await w(l)},data:Wt(),browser:Ae(),onUnmount(C){S.push(C)},afterRender(C){p.push(C)},...e.api?{api:e.api}:{},...e.auth?{auth:e.auth}:{},...e.ws?{ws:e.ws}:{},...e.i18n?{i18n:e.i18n}:{},...e.toast?{toast:e.toast}:{},...e.confirm?{confirm:e.confirm}:{},...e.notification?{notification:e.notification}:{},app:{navigate:h}},W=E;W.stream=(C,N)=>{!u&&r.childNodes.length>0&&(Array.from(r.querySelectorAll("*")).some(D=>[...D.childNodes].some(he=>he.nodeType===8&&he.textContent?.includes("wf")))?a.absorb.begin(r):r.innerHTML="");let R=u?u.type!==C.type?(Pt(i),G(C,E,i)):me(u,C,E,i):G(C,E,i);return u=C,new Response(Cn(R,s),{status:N?.status??200,headers:N?.headers})};let P=C=>{let R=C.target?.closest?.("a[href]");if(!R)return;let I=R.getAttribute("href");!I||I.startsWith("http")||I.startsWith("#")||(C.preventDefault(),h(I))};t.addEventListener("click",P);let v=()=>{w(se(o.location.pathname))};o.addEventListener("popstate",v);let b=(async()=>{await w(l)})(),S=[];return{ready:b,navigate:h,unmount(){d="unmounted",t.removeEventListener("click",P),o.removeEventListener("popstate",v),a.dispose();for(let C of S.reverse())try{C()}catch(N){console.error("[vdom] unmount:",N)}S.length=0,r.innerHTML=""}}}var ve=class extends Error{status;constructor(e,t){super(e),this.name="ApiError",this.status=t}};function Nn(n={}){let e=n.baseUrl??"",t=n.timeout??15e3;async function o(r,s,i,a={}){let l=new AbortController,u=setTimeout(()=>l.abort(),t);try{let d=typeof n.token=="function"?n.token():n.token,c={"content-type":"application/json",...typeof n.headers=="function"?n.headers():n.headers,...d?{authorization:`Bearer ${d}`}:{},...a.headers},f=await fetch(e+s,{method:r,headers:c,body:i!==void 0?JSON.stringify(i):void 0,signal:l.signal});if(f.status===401&&n.onUnauthorized&&await n.onUnauthorized())return o(r,s,i,a);if(!f.ok)throw new ve(`[api] \u8BF7\u6C42\u5931\u8D25 ${f.status}: ${r} ${s}`,f.status);let m=await f.text();return m?JSON.parse(m):void 0}catch(d){let c=d instanceof ve?d:new ve(d.message);throw n.onError?.(c),c}finally{clearTimeout(u)}}return{get:(r,s)=>o("GET",r,void 0,s),post:(r,s,i)=>o("POST",r,s,i),put:(r,s,i)=>o("PUT",r,s,i),delete:(r,s)=>o("DELETE",r,void 0,s),patch:(r,s,i)=>o("PATCH",r,s,i),request:o}}function Rn(n={}){let e=n.scheme??"Bearer",t=n.storage??{get:()=>null,set:()=>{}},o=n.tokenKey??n.key??"wf-auth-token",r=n.userKey??"wf-auth-user",s=n.refreshTokenKey??"wf-auth-refresh",i=null;try{let l=t.get(r);l&&(i=JSON.parse(l))}catch{}let a={getToken(){let l=t.get(o);return l||null},setToken(l){l===null?t.set(o,""):t.set(o,l)},headers(){let l=t.get(o);return l?{authorization:`${e} ${l}`}:{}},logout(){t.set(o,""),t.set(r,""),t.set(s,""),i=null},get user(){return i},get isLoggedIn(){return!!t.get(o)},login(l,u,d){t.set(o,l),u!==void 0&&(t.set(r,JSON.stringify(u)),i=u),d!=null&&t.set(s,d),n.onAuth?.(a)},setUser(l){t.set(r,JSON.stringify(l)),i=l},async refresh(){if(!n.onRefresh)return!1;let l=await n.onRefresh();return l&&n.onAuth?.(a),l}};return a}function In(n={}){let e=n.messages??{},t=n.locale??Object.keys(e)[0]??"default";return{get locale(){return t},setLocale(o){t=o},t(o,r){let i=e[t]?.[o]??o;if(r)for(let[a,l]of Object.entries(r))i=i.replaceAll(`{${a}}`,String(l));return i}}}function Vn(n={}){let e=n.WebSocketCtor??globalThis.WebSocket,t=null,o=new Set,r=i=>{let a=i.data;if(typeof i.data=="string")try{a=JSON.parse(i.data)}catch{}for(let l of[...o])l(a)},s={current:!1};return{connect(i){t?.close(),e&&(t=new e(i??n.url??""),t.onmessage=r,t.onopen=()=>{s.current=!0},t.onclose=()=>{s.current=!1,t=null})},get isConnected(){return s.current},send(i){t?.send(typeof i=="string"?i:JSON.stringify(i))},onMessage(i){return o.add(i),()=>{o.delete(i)}},close(){t?.close(),t=null}}}function Ft(n,e="info",t=3e3){let o=document.createElement("div");o.className="wf-toast-host",o.style.cssText="position:fixed;top:16px;right:16px;z-index:var(--wf-z-toast,9999)",document.body.appendChild(o);let r=_(),s=new j(o,document,r),i={render:async()=>{},onUnmount:()=>{},data:{get:async()=>{},set:()=>{},has:()=>!1}};G($(()=>()=>$("div",{class:`wf-toast wf-toast--${e}`},$("span",{class:"wf-toast-msg"},n)),{}),i,r).pipeTo(new WritableStream({write(l){s.apply(l)}})).then(()=>{setTimeout(()=>{s.dispose(),o.remove()},t)})}function Pn(n){return Object.assign(n,{toast:Ft})}function An(n,e,t){let o=new AbortController,r=t?.signal;r&&(r.aborted?o.abort():r.addEventListener("abort",()=>o.abort(),{once:!0}));let s=t?.traceId??Dn(),i=t?.record!==!1,a=[],l=(async()=>{let u;try{u=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json","X-Trace-Id":s,Accept:"text/event-stream",...t?.headers},body:JSON.stringify(e),signal:o.signal})}catch(d){if(o.signal.aborted)return;t?.onError?.({code:"provider_error",message:d instanceof Error?d.message:String(d)});return}if(!u.ok){t?.onError?.({code:Hn(u.status),message:`HTTP ${u.status} ${u.statusText}`});return}try{for await(let{name:d,data:c}of Ln(u.body)){if(o.signal.aborted)return;On(a,{name:d,data:c},i),Mn(d,c,t??{})}}catch(d){if(o.signal.aborted)return;t?.onError?.({code:"provider_error",message:d instanceof Error?d.message:String(d)})}})();return{abort:()=>o.abort(),done:l,traceId:s,events:a}}function Mn(n,e,t){switch(n){case"wf:token":return t.onToken?.(e.text);case"wf:tool_call":return t.onToolCall?.(e);case"wf:tool_result":return t.onToolResult?.(e);case"wf:tool_progress":return t.onToolProgress?.(e);case"wf:step":return t.onStep?.(e);case"wf:approval_request":return t.onApproval?.(e);case"wf:usage":return t.onUsage?.(e);case"wf:done":return t.onDone?.(e);case"wf:error":return t.onError?.(e);default:return t.onEvent?.(n,e)}}async function*Ln(n){let e=n.getReader(),t=new TextDecoder,o="";try{for(;;){let{done:r,value:s}=await e.read();if(r)break;o+=t.decode(s,{stream:!0});let i=o.split(`
1
+ function Se(n){return n==null?null:typeof n=="string"?n:typeof n=="number"?String(n):(console.warn(`[vdom] key \u5FC5\u987B\u662F string|number\u2014\u2014\u5F53\u524D ${typeof n}\uFF08\u5FFD\u7565\u2014\u2014\u4F4D\u7F6E\u8EAB\u4EFD\uFF09`),null)}function Ne(n){return Se(n?.key)}function Re(n){let e={...n??{}};return delete e.key,e}function $(n,e,...t){let o=Re(e);return t.length===1?o.children=t[0]:t.length>1&&(o.children=t),{type:n,props:o,key:Ne(e)}}function Ie(n,e,t){return{type:n,props:Re(e),key:Se(t)??Ne(e)}}var _t=Ie,jt=Ie;var _e=Symbol("vdom-fragment");function q(n){return n.type===_e}function Ve(){return{children:new Map}}function Pe(n){return n.split("/").filter(Boolean)}function zt(n,e,t){let o=e.slice(1);if(!n.children.has(":")){let s=t();s.param=o,n.children.set(":",s)}let r=n.children.get(":");if(r.param!==o)throw new Error(`[router] param conflict: ":${r.param}" already registered, cannot register ":${o}"`);return r}function Gt(n,e,t){return e==="*"?(n.wildcard=!0,n):e.startsWith(":")?zt(n,e,t):(n.children.has(e)||n.children.set(e,t()),n.children.get(e))}function ze(n,e,t,o=!1){let r=Pe(e),s=n;for(let i of r){if(i==="*")return s.wildcard=!0,s.wildcardValue=t,s;s=Gt(s,i,()=>Ve())}return o?s.wildcardValue=t:s.value=t,s}function Ge(n,e){let t={};if(e.length===0)return n.value!==void 0?(n.wildcardValue!==void 0&&(t["*"]=""),{value:n.value,params:t,wildcard:!1}):n.wildcardValue!==void 0?{value:n.wildcardValue,params:t,wildcard:!0}:null;let o=n;for(let r=0;r<e.length;r++){let s=Je(o,e[r],t);if(!s)return je(n,e,r,t);o=s}return o.value!==void 0?(o.wildcardValue!==void 0&&(t["*"]=""),{value:o.value,params:t,wildcard:!1}):je(n,e,e.length,t)}function je(n,e,t,o){let r=n;for(let s=0;s<t;s++){if(r.wildcardValue!==void 0)return o["*"]=e.slice(s).join("/"),{value:r.wildcardValue,params:o,wildcard:!0};let i=Je(r,e[s],o);if(!i)return null;r=i}return r.wildcardValue!==void 0?(o["*"]=e.slice(t).join("/"),{value:r.wildcardValue,params:o,wildcard:!0}):null}function Je(n,e,t){if(n.children.has(e))return n.children.get(e);if(n.children.has(":")){let o=n.children.get(":");return o.param&&(t[o.param]=decodeURIComponent(e)),o}return null}function se(n){return new Request(new URL(n,"http://localhost"))}var Me=class{root=Ve();notFoundHandler=null;get(e,t){return ze(this.root,e,t),this}notFound(e){return this.notFoundHandler=e,this}async resolve(e,t){let o=new URL(e.url),r=Pe(o.pathname),s=Ge(this.root,r),i=s?.value??this.notFoundHandler;if(!i)return new Response(null,{status:404});let a={};return s&&Object.assign(a,s.params),t.params=a,t.query=Object.fromEntries(o.searchParams),t.route={path:o.pathname,params:a,query:t.query},i(e,t)}};function Ye(n){try{if(typeof document>"u")return;let e=document.createElement("textarea");e.value=n,e.style.position="fixed",e.style.opacity="0",e.setAttribute("readonly",""),document.body.appendChild(e),e.select();let t=document.execCommand("copy");e.remove(),!t&&typeof console<"u"&&console.warn("[browser] copyText \u964D\u7EA7\u5931\u8D25\uFF08execCommand \u8FD4\u56DE false\uFF09")}catch{}}function Ae(){let n=()=>typeof document<"u"?document.documentElement:null,e=()=>typeof document<"u"?document.scrollingElement??document.documentElement:null;return{get window(){return typeof window<"u"?window:void 0},get document(){return typeof document<"u"?document:void 0},copyText(t){if(typeof navigator<"u"&&navigator.clipboard?.writeText){navigator.clipboard.writeText(t).catch(()=>Ye(t));return}Ye(t)},downloadFile(t,o,r="text/plain"){try{let s=typeof document<"u"?document:null;if(!s)return!1;let i=new Blob([o],{type:r}),a=URL.createObjectURL(i),l=s.createElement("a");return l.href=a,l.download=t,l.click(),URL.revokeObjectURL(a),!0}catch{return!1}},activeElement:()=>typeof document<"u"?document.activeElement:null,byId:t=>typeof document<"u"?document.getElementById(t):null,query:t=>typeof document<"u"?document.querySelector(t):null,queryAll:t=>typeof document<"u"?document.querySelectorAll(t):null,createElement:t=>typeof document<"u"?document.createElement(t):null,createElementNS:(t,o)=>typeof document<"u"?document.createElementNS(t,o):null,createDocumentFragment:()=>typeof document<"u"?document.createDocumentFragment():null,createComment:t=>typeof document<"u"?document.createComment(t):null,createTextNode:t=>typeof document<"u"?document.createTextNode(t):null,addEventListener:(t,o,r)=>{typeof window<"u"&&window.addEventListener(t,o,r)},removeEventListener:(t,o,r)=>{typeof window<"u"&&window.removeEventListener(t,o,r)},scrollTo:t=>{typeof window<"u"&&window.scrollTo(0,t)},reload:()=>{typeof window<"u"&&window.location.reload()},scrollTop:()=>e()?.scrollTop??0,matchMedia:t=>typeof window<"u"&&typeof window.matchMedia=="function"?window.matchMedia(t):null,visualViewport:()=>typeof window<"u"?window.visualViewport??null:null,scrollingElement:()=>e(),bodyElement:()=>typeof document<"u"?document.body:null,bodyAppend:t=>{typeof document<"u"&&document.body.appendChild(t)},bodyRemove:t=>{typeof document<"u"&&document.body.contains(t)&&document.body.removeChild(t)},clearBody:()=>{typeof document<"u"&&(document.body.innerHTML="")},event:(t,o)=>typeof window<"u"?new window.Event(t,o):new Event(t,o),rootElement:()=>n(),getSelection:()=>typeof window<"u"?window.getSelection():null,selectionText:()=>typeof window<"u"?window.getSelection()?.toString()??"":"",storageGet:t=>{try{return typeof window<"u"?window.localStorage.getItem(t):null}catch{return null}},storageSet:(t,o)=>{try{typeof window<"u"&&window.localStorage.setItem(t,o)}catch{}},timeout:(t,o)=>typeof window<"u"?window.setTimeout(t,o):0,pathname:()=>typeof window<"u"?window.location.pathname:"",setHash:t=>{typeof window<"u"&&(window.location.hash=t)},viewportHeight:()=>typeof window<"u"?window.innerHeight:0,onFormRestore:t=>{t()}}}var be=class{table=new Map;rootTypes=new Set;doc;dispatchBound;container;phase="active";constructor(e,t){this.doc=e,this.container=t,this.dispatchBound=this.dispatch.bind(this)}set(e,t,o){if(this.phase==="disposed"){console.error(`[vdom] \u4E8B\u4EF6\u8868\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Adisposed \u540E set(${e}, ${t}) \u88AB\u5FFD\u7565`);return}if(typeof o!="function"){console.warn(`[vdom] \u4E8B\u4EF6 ${t} \u975E\u51FD\u6570\u503C\u88AB\u8DF3\u8FC7\uFF08node ${e}\uFF09\u2014\u2014\u671F\u671B\u51FD\u6570\uFF0C\u5B9E\u9645 ${typeof o}`);return}let r=this.table.get(e);r||(r=new Map,this.table.set(e,r)),r.set(t,o),this.ensureRoot(t)}get(e,t){return this.table.get(e)?.get(t)}removeEvent(e,t){let o=this.table.get(e);o&&(o.delete(t),o.size===0&&this.table.delete(e))}remove(e){for(let t of[...this.table.keys()])(t===e||t.startsWith(e+"."))&&this.table.delete(t)}ensureRoot(e){this.rootTypes.has(e)||(this.doc.addEventListener(e,this.dispatchBound,{capture:!0}),this.rootTypes.add(e))}dispatch(e){if(this.container){let o=e.target;if(o&&!this.container.contains(o))return}if(e.type==="contextmenu"&&window.__dbgEvt){let o=e.target,r=[...this.table.entries()].map(([s,i])=>s+":"+[...i.keys()].join("+")).join(" | ");console.error("[dbg-evt-dispatch]","target:",o?.getAttribute("data-wf-id"),"ALL:",r.slice(0,400))}let t=e.target;for(t&&t.nodeType===3&&(t=t.parentElement);t;){if(!t.hasAttribute?.("data-wf-id")){let r=t.closest?.("[data-wf-id]");if(r&&r!==t){t=r;continue}}let o=t.getAttribute?.("data-wf-id");if(o){let r=this.table.get(o)?.get(e.type);if(r){try{Object.defineProperty(e,"currentTarget",{value:t,configurable:!0})}catch{}try{r(e)}catch(s){console.error("[vdom] \u4E8B\u4EF6 handler:",s)}if(e.cancelBubble)return}}t=t.parentElement}}dispose(){if(this.phase!=="disposed"){this.phase="disposed";for(let e of this.rootTypes)this.doc.removeEventListener(e,this.dispatchBound,{capture:!0});this.rootTypes.clear(),this.table.clear()}}},ee=/^on[A-Z]/;function ae(n){return ee.test(n)?n.slice(2).toLowerCase():null}var we=class{refs=new Map;phase="active";set(e,t,o){if(this.phase==="disposed"){console.error(`[vdom] ref \u8868\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Adisposed \u540E set(${e}) \u88AB\u5FFD\u7565`);return}if(o&&o!==t&&typeof o=="function")try{o(null)}catch(r){console.error("[vdom] ref prev:",r)}this.refs.set(e,t)}mount(e,t){let o=this.refs.get(e);if(typeof o=="function")try{o(t)}catch(r){console.error("[vdom] ref mount:",r)}}unmount(e){for(let[t,o]of[...this.refs])if(t===e||t.startsWith(e+".")){if(typeof o=="function")try{o(null)}catch(r){console.error("[vdom] ref unmount:",r)}this.refs.delete(t)}}remap(e,t){for(let[o,r]of[...this.refs])(o===e||o.startsWith(e+"."))&&(this.refs.delete(o),this.refs.set(t+o.slice(e.length),r))}dispose(){this.phase!=="disposed"&&(this.phase="disposed",this.refs.clear())}};function Xe(n){let e=new Set,t=n,o=()=>{for(let r of[...e])r()};return{get state(){return t},subscribe(r){return e.add(r),()=>{e.delete(r)}},set(r){t={...t,...r},o()},update(r){r(t),o()},notify:o}}function Le(n){let e=Xe(n),t=(()=>e.state);return t.set=o=>e.set(o),t.update=o=>e.update(o),t.subscribe=o=>e.subscribe(o),t.notify=()=>e.notify(),t.store=e,t}function Qe(n,e,t){if(typeof e=="function"){let r=e;return i=>{i?r(i):t?.()}}return{current:e}}function Ze(n,e,t){let o=typeof e=="object"?e:void 0,r=typeof e=="boolean"?e:!1,s=o??t,i=n.nextHookIndex(),a=n.getHookState(i)??{open:r};n.setHookState(i,a);let l=s?.open!==void 0;return{get open(){return s?.open??a.open},setOpen(u){l?(s?.onOpenChange||console.warn(`[vdom] useOpen${o?.name?`(${o.name})`:""} \u53D7\u63A7\u7F3A onOpenChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),s?.onOpenChange?.(u)):(a.open=u,n.requestRender())},toggle(){this.setOpen(!this.open)}}}function et(n,e,t){let o=t?e:(()=>!0),r=t??e,s=n.getBrowser()?.window;if(!s)return()=>{};let i=l=>{if(typeof o=="string"){if(l.key!==o)return}else if(!o(l))return;r(l)};s.addEventListener("keydown",i);let a=()=>s.removeEventListener("keydown",i);return n.onUnmount(a),a}function tt(n,e,t,o,r,s,i,a){let l=n.getBoundingClientRect();if(l.width===0&&l.height===0)return null;let u=e.innerWidth,d=e.innerHeight,c,f;switch(r){case"bottom":c=l.bottom+s,f=a?l.left+l.width/2-t/2:l.left;break;case"top":c=l.top-o-s,f=a?l.left+l.width/2-t/2:l.left;break;case"left":c=a?l.top+l.height/2-o/2:l.top,f=l.left-t-s;break;case"right":c=a?l.top+l.height/2-o/2:l.top,f=l.right+s;break}return f+t>u-i&&(f=u-t-i),f<i&&(f=i),c+o>d-i&&(c=d-o-i),c<i&&(c=i),{top:c,left:f}}function nt(n,e){let t=e.getComputedStyle(n).animationName;if(t&&t!=="none")return!0;for(let o of n.children){let r=e.getComputedStyle(o).animationName;if(r&&r!=="none")return!0}return!1}function ot(n,e){let t=n.getBrowser()?.window,o=0,r=0,s={get top(){return o},get left(){return r},refresh:()=>{}},i=()=>{let u=e.el();if(!u)return;let d=u.getBoundingClientRect();if(d.width===0&&d.height===0)return;let c=e.compute(d);o=c.top,r=c.left},a,l=()=>{a||t&&(a=t.requestAnimationFrame(()=>{a=void 0,(e.isOpen?.()??!0)&&i()}))};return t&&(t.addEventListener("scroll",l,!0),t.addEventListener("resize",l),n.onUnmount(()=>{a!==void 0&&t.cancelAnimationFrame(a),t.removeEventListener("scroll",l,!0),t.removeEventListener("resize",l)})),s.refresh=i,s}function M(n){let e=n.children??(n.props.children===void 0?[]:n.props.children),t=o=>Array.isArray(o)?o.flatMap(t):[o];return Array.isArray(e)?e.flatMap(t):[e]}function L(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)&&q(n)?M(n).reduce((e,t)=>e+L(t),0):1}function rt(n){return n==null||typeof n=="boolean"}function it(n){return!(n==null||typeof n=="boolean"||typeof n=="string"||typeof n=="number"||Array.isArray(n)||typeof n=="object"&&typeof n.type=="string"||typeof n.type=="function"||typeof n.type=="symbol")}function Oe(n){return n==null?"null/undefined":typeof n=="object"?`object\uFF08type: ${typeof n.type}\uFF09`:typeof n}function Jt(n,e,t,o){return[{op:"createAnchor",id:n,...o!==void 0?{detail:o}:{}},{op:"insert",id:n,parent:e,ref:t}]}function le(n,e,t,o,r){for(let s of Jt(e,t,o,r))n(s)}function F(n){return n===""?"hole":typeof n=="string"||typeof n=="number"?"text":rt(n)?"hole":Array.isArray(n)?"array":typeof n.type=="string"?"element":q(n)?"fragment":typeof n.type=="function"?"component":(it(n),"invalid")}function st(n){return typeof n=="string"||typeof n=="number"?String(n):null}function O(n){return F(n)==="hole"}function te(n){return F(n)==="text"}function H(n,e){return`${n}.k${e.replace(/%/g,"%25").replace(/\./g,"%2E")}`}function U(n){return n==null||typeof n=="boolean"||typeof n=="string"||typeof n=="number"||Array.isArray(n)?null:n.key}function de(n){return U(n)!==null}function ue(n){let e=!1,t=!1;for(let o of n)if(de(o)?e=!0:t=!0,e&&t)return"mixed";return e?"all-keyed":"all-unkeyed"}function z(n,e){let t=new Set;for(let o of n){let r=U(o);if(r!==null){if(t.has(r)){console.warn(`[vdom] ${e}\uFF1A\u91CD\u590D key "${r}"\uFF08\u5217\u8868\u8EAB\u4EFD\u6620\u5C04\u6B67\u4E49\u2014\u2014\u589E\u5220/\u91CD\u6392\u884C\u4E3A\u4E0D\u786E\u5B9A\uFF09\u2014\u2014\u8BF7\u4E3A\u6BCF\u9879\u58F0\u660E\u552F\u4E00 key\uFF08\u6570\u636E id \u2192 keyBy\uFF09`);return}t.add(r)}}}function at(n,e){if(n.length<2)return;let t=n.some(r=>typeof r?.type=="function"),o=n.some(r=>!de(r)&&typeof r?.type=="function");if(t&&o){let r=n.map(s=>{let i=s;if(i==null)return"null";if(typeof i=="boolean")return"bool";if(typeof i=="string"||typeof i=="number")return"text";if(Array.isArray(i))return"arr";if(typeof i.type=="function"){let a=i.type.name;return"comp"+(a?":"+a:"")}return"el"+(i.key?`.k{${String(i.key).slice(0,16)}}`:"")});console.warn(`[vdom] ${e}\uFF1A\u5217\u8868\u542B\u65E0 key \u7684\u7EC4\u4EF6\u9879\uFF08\u957F\u5EA6 ${n.length}\uFF09\u2014\u2014\u9879: [${r.join(", ")}]\u2014\u2014\u52A8\u6001\u589E\u5220/\u91CD\u6392\u65F6\u72B6\u6001\u4F1A\u6309\u4F4D\u7F6E\u7EE7\u627F\u2014\u2014\u8BF7\u4E3A\u7EC4\u4EF6\u9879\u58F0\u660E key\uFF08\u6570\u636E id \u2192 keyBy\uFF09`)}}function k(n,e){return`${n}.${e}`}function xe(n){let e={};for(let[t,o]of Object.entries(n))t==="children"||t==="key"||t==="ref"||typeof o!="function"&&(e[t]=o);return e}async function lt(n,e,t,o,r,s){r({op:"create",id:e,tag:n.type,attrs:xe(n.props)});for(let[d,c]of Object.entries(n.props))d==="children"||d==="key"||d==="ref"||typeof c=="function"&&r({op:"setProp",id:e,key:d,value:c});r({op:"insert",id:e,parent:t,ref:o});let i=n.props.ref;typeof i=="function"&&r({op:"ref",id:e,fn:i});let a=M(n);z(a,`\u5143\u7D20 children\uFF08${e}\uFF09`);let l=null,u=0;for(let d of a){await s(d,e,u,l);let c=L(d);l=k(e,u+c-1),u+=c}r({op:"close",id:e})}function He(n,e,t){let o=new Map,r=i=>{switch(i.op){case"create":{let a=o.get(i.id);a&&a!=="el"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1Acreate ${i.id} \u7C7B\u578B\u51B2\u7A81\uFF08${a} \u2192 el\uFF09`),o.set(i.id,"el");break}case"createText":{let a=o.get(i.id);a&&a!=="text"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1AcreateText ${i.id} \u7C7B\u578B\u51B2\u7A81\uFF08${a} \u2192 text\uFF09`),o.set(i.id,"text");break}case"createAnchor":{let a=o.get(i.id);a&&a!=="anchor"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1AcreateAnchor ${i.id} \u7C7B\u578B\u51B2\u7A81\uFF08${a} \u2192 anchor\uFF09`),o.set(i.id,"anchor");break}case"insert":{let a=o.get(i.parent);a&&a!=="el"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1Ainsert ${i.id} \u7684 parent ${i.parent} \u662F${a}\uFF08\u975E\u5BB9\u5668\u2014\u2014id \u7A7A\u95F4\u9519\u4F4D\uFF09`);break}default:break}n(i)},s=async(i,a,l,u)=>{let d=k(a,l);switch(F(i)){case"text":{let c=st(i);r({op:"createText",id:d,value:c}),r({op:"insert",id:d,parent:a,ref:u});return}case"hole":{le(r,d,a,u);return}case"array":{let c=i;z(c,`\u6570\u7EC4\u5C55\u5F00\uFF08${a}\uFF09`);let f=l,m=u;for(let x of c){await s(x,a,f,m);let y=L(x);m=k(a,f+y-1),f+=y}return}case"fragment":{let c=M(i);z(c,`Fragment \u5C55\u5F00\uFF08${a}\uFF09`);let f=l,m=u;for(let x of c){await s(x,a,f,m);let y=L(x);m=k(a,f+y-1),f+=y}return}case"element":{await lt(i,d,a,u,r,s);return}case"component":{let c=i,f=c.key!==null?H(a,c.key):d;await J(c,a,l,u,f,e,t,s,n)&&n({op:"mount",compId:f});return}case"invalid":{console.warn(`[vdom] \u975E\u6CD5\u5B50\u8282\u70B9\u2014\u2014${Oe(i)}`),le(r,d,a,u,Oe(i));return}}};return s}function G(n,e,t){let o=e??{},r=t??_();return new ReadableStream({async start(s){await He(a=>s.enqueue(a),o,r)(n,"root",0,null),s.enqueue({op:"done",full:!0}),s.close()}})}function A(n){if(n==null)return"hole";let e=F(n);return e==="invalid"?"hole":e}var ne=async(n,e,t)=>{t.emit({op:"remove",id:t.oldId}),await t.emitNode(e,t.parent,t.index,t.ref)};var oe=async(n,e,t)=>{t.emit({op:"remove",id:t.oldId}),await t.emitNode(e,t.parent,t.index,t.ref)};function Y(n,e,t){return typeof n?.type=="function"?k(e,0):Array.isArray(n)?e:O(n)?k(e,0):t}function fe(n,e,t){return typeof n?.type=="function"||Array.isArray(n)?e:t}function V(n,e,t,o,r){if(globalThis.__DBG8&&console.log("[dbg-rmt]",e,"parent=",t,"type=",typeof n=="object"&&n!==null&&!Array.isArray(n)?String(n.type):Array.isArray(n)?"array":String(n)),O(n)){o({op:"remove",id:e});return}if(te(n)){o({op:"remove",id:e});return}if(Array.isArray(n)){globalThis.__DBG4&&console.log(`[dbg-arr] \u6570\u7EC4 base=${e} parent=${t} \u9879\u6570=${n.length}`);let l=0;for(let u of n)V(u,k(e,l),e,o,r),l+=L(u);return}let s=n;if(q(s)){let l=Number(e.slice(t.length+1)),u=M(s),d=l;for(let c of u)V(c,k(t,d),t,o,r),d+=L(c);return}if(typeof s.type=="function"){let l=s.key!==null?H(t,s.key):e;globalThis.__DBG5&&console.log(`[dbg-comp] unmount ${l} base=${e} parent=${t}`),o({op:"unmount",compId:l});let u=r?.get(l)?.lastOutput;if(u!==void 0){let d=X(u),c=Y(d,l,e),m=d!==null&&typeof d=="object"&&!Array.isArray(d)&&q(d)?e.slice(0,e.lastIndexOf(".")):fe(d,l,l);V(d,c,m,o,r)}}let i=M(s),a=0;i.forEach(l=>{let u=k(e,a);l!==null&&typeof l!="string"&&typeof l!="number"&&typeof l!="boolean"&&!Array.isArray(l)?V(l,u,e,o,r):o({op:"remove",id:u}),a+=L(l)}),o({op:"remove",id:e})}var re=async(n,e,t)=>{V(n,t.oldId,t.parent,t.emit,t.registry),await t.emitNode(e,t.parent,t.index,t.ref)};var ie=async(n,e,t)=>{globalThis.__DBG8&&console.log("[dbg-tc] oldCompId=",t.oldCompId,"oldId=",t.oldId,"parent=",t.parent,"index=",t.index),t.oldCompId&&t.emit({op:"unmount",compId:t.oldCompId});let o=t.registry?.get(t.oldCompId??"")?.lastOutput;if(o!==void 0){let r=X(o);V(r,Y(r,t.oldCompId??"",k(t.parent,t.index)),fe(r,t.oldCompId??"",t.parent),t.emit,t.registry)}else t.emit({op:"remove",id:t.oldId});await t.emitNode(e,t.parent,t.index,t.ref)};var K=async(n,e,t)=>{let o=Array.isArray(n)?n:M(n),r=t.index;for(let s of o)V(s,k(t.parent,r),t.parent,t.emit,t.registry),r+=L(s);await t.emitNode(e,t.parent,t.index,t.ref)};var Yt={text:{text:null,hole:ne,element:ne,component:ne,fragment:ne,array:ne},hole:{text:oe,hole:null,element:oe,component:oe,fragment:oe,array:oe},element:{text:re,hole:re,element:null,component:re,fragment:re,array:re},component:{text:ie,hole:ie,element:ie,component:null,fragment:ie,array:ie},fragment:{text:K,hole:K,element:K,component:K,fragment:null,array:K},array:{text:K,hole:K,element:K,component:K,fragment:K,array:null}};function B(n,e){return Yt[n]?.[e]??null}function dt(n,e,t,o){let r=xe(n.props),s=xe(e.props);for(let[i,a]of Object.entries(s))r[i]!==a&&o({op:"setProp",id:t,key:i,value:a});for(let i of Object.keys(r))i in s||o({op:"setProp",id:t,key:i,value:void 0});for(let[i,a]of Object.entries(e.props))i==="children"||i==="key"||typeof a=="function"&&n.props[i]!==a&&o({op:"setProp",id:t,key:i,value:a,prev:n.props[i]});for(let i of Object.keys(n.props))i==="children"||i==="key"||typeof n.props[i]=="function"&&e.props[i]===void 0&&o({op:"setProp",id:t,key:i,value:void 0,prev:n.props[i]})}async function pt(n,e,t,o,r,s,i){let a=M(n),l=M(e),u=Array.isArray(n.props.children)!==Array.isArray(e.props.children);await pe(a,l,t,o,r,s,i,u)}async function pe(n,e,t,o,r,s,i,a=!1){if(n=De(n),e=De(e),!a){let f=b=>!O(b)&&!te(b)&&!Array.isArray(b),m=n.filter(f),x=e.filter(f),y=(b,S)=>S>=b.length||O(b[S]),g=b=>typeof b?.type=="function"&&!de(b),p=b=>y(n,b)||g(n[b]),v=b=>y(e,b)||g(e[b]);(e.some((b,S)=>g(b)&&!p(S))||n.some((b,S)=>g(b)&&!v(S)))&&at(x,`children\uFF08\u65E0 key \u7EC4\u4EF6\u5B9E\u69FD\u7FFB\u8F6C ${m.length}\u2192${x.length}\uFF09`)}if(globalThis.__WF_DEBUG_MOVED__&&console.log("[debug-dci] id=",t,"oldKeys=",JSON.stringify(n.map(U)),"newKeys=",JSON.stringify(e.map(U)),"lk=",ue(n),ue(e)),ue(e)==="all-keyed"&&ue(n)==="all-keyed"){await ct(n,e,t,o,r,s,i);return}if(ft(e)||ft(n)){await ct(n,e,t,o,r,s,i);return}let l=null,u=Math.min(n.length,e.length);for(let f=0;f<u;f++){let m=n[f]??null,x=e[f]??null,y=k(t,f);O(x)?O(m)||(await ut(m,t,y,r,i),le(r,y,t,l)):await Xt(m,x,t,f,l,y,o,r,s,i),l=y}for(let f=n.length;f<e.length;f++)await o(e[f],t,f,l),l=k(t,f);let d=n.reduce((f,m)=>f+L(m),0),c=e.reduce((f,m)=>f+L(m),0);if(d>c){let f=d-c;for(let m=n.length-1;m>=0&&f>0;m--){let x=L(n[m]);x<=f&&(await ut(n[m],t,k(t,m),r,i),f-=x)}}}async function ut(n,e,t,o,r){if(O(n)){o({op:"remove",id:t});return}V(n,t,e,o,r)}function De(n){let e=[];for(let t of n)t!==null&&typeof t=="object"&&!Array.isArray(t)&&q(t)?e.push(...De(M(t))):e.push(t);return e}async function Xt(n,e,t,o,r,s,i,a,l,u){if(globalThis.__DBG7&&console.log("[dbg-slot]",s,"old=",n===null?"null":String(typeof n=="object"?n.type:n),"new=",e===null?"null":String(typeof e=="object"?e.type:e)),F(n)==="text"&&F(e)==="text"){String(n)!==String(e)&&a({op:"setText",id:s,value:String(e)});return}if(F(n)==="hole"){a({op:"remove",id:s}),await i(e,t,o,r);return}if(F(n)===F(e)&&typeof n!="string"&&typeof n!="number"){await Q(n,e,t,o,r,i,a,l,u);return}let d=B(A(n),A(e));if(!d)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${A(n)} \u2192 ${A(e)}\uFF08diffSlot\u2014\u2014\u5FC5\u987B\u663E\u5F0F\u8FC1\u79FB\u6216\u663E\u5F0F Reject\uFF09`);await d(n,e,{emit:a,emitNode:i,oldId:s,newId:s,parent:t,index:o,ref:r,oldCompId:typeof n?.type=="function"?s:void 0,registry:u})}function ft(n){return n.some(de)}async function ct(n,e,t,o,r,s,i){let a=new Map;n.forEach((p,v)=>{let T=U(p);T!==null&&!a.has(T)&&a.set(T,v)}),z(e,`keyed \u5217\u8868\uFF08${t}\uFF09`),z(n,`keyed \u5217\u8868\uFF08${t}\uFF09`);let l=new Set(e.map(p=>U(p)).filter(p=>p!==null)),u=new Map;for(let p=0;p<n.length;p++){let v=n[p];if(O(v)){r({op:"remove",id:k(t,p)});continue}if(te(v)){r({op:"remove",id:k(t,p)});continue}if(Array.isArray(v))continue;let T=U(v);if(T!==null){let b=(u.get(T)??0)+1;if(u.set(T,b),b===1)continue;V(v,k(t,p),t,r,i);continue}V(v,k(t,p),t,r,i)}for(let[p,v]of a)l.has(p)||V(n[v],k(t,v),t,r,i);let d=n.map(p=>U(p)).filter(p=>p!==null&&l.has(p)),c=e.map(p=>U(p)).filter(p=>p!==null&&a.has(p)),f=!0;{let p=0;for(let v of c){let T=d.indexOf(v,p);if(T===-1){f=!1;break}p=T+1}}if(!f){for(let[v,T]of a)l.has(v)||r({op:"unmount",compId:H(t,v)});n.forEach((v,T)=>{if(!O(v)){if(te(v)){r({op:"remove",id:k(t,T)});return}if(U(v)!==null){r({op:"remove",id:k(t,T)});return}V(v,k(t,T),t,r,i)}});let p=null;for(let v=0;v<e.length;v++){let T=e[v],b=U(T);if(b!==null&&typeof T.type=="function"){let S=H(t,b);await J(T,t,v,p,S,s,i,o,r)&&r({op:"mount",compId:S})}else await o(T,t,v,p);p=k(t,v)}return}let m=[];e.forEach((p,v)=>{let T=U(p);if(T===null)return;let b=a.get(T);b!==void 0&&b!==v&&m.push({oldIdx:b,newIdx:v})});let x=m.every(p=>p.newIdx<p.oldIdx);m.sort((p,v)=>x?p.newIdx-v.newIdx:v.newIdx-p.newIdx),globalThis.__WF_DEBUG_MOVED__&&console.log("[debug-moved] subseq=1 moved=",JSON.stringify(m),"oldIdxByKey=",JSON.stringify([...a.entries()]),"newKeys=",JSON.stringify([...l]),"parent=",t);for(let p of m)r({op:"move",id:k(t,p.oldIdx),parent:t,ref:null,newId:k(t,p.newIdx),noMove:!0});let y=!0,g=null;for(let p=0;p<e.length;p++){let v=e[p],T=U(v),b=k(t,p);if(T!==null){let S=a.get(T);S===void 0?await ce(v,t,p,g,T,o,r,s,i):typeof v.type=="function"?await ce(v,t,p,g,T,o,r,s,i):await Q(n[S],v,t,p,g,o,r,s,i)}else await o(v,t,p,g);g=b}}async function ce(n,e,t,o,r,s,i,a,l){let u=n;if(typeof u.type=="function"){let d=H(e,r),f=l.get(d)?.lastOutput;await J(u,e,t,o,d,a,l,async(x,y,g,p)=>{await Te(f,x,y,g,p,s,i,a,l,Q,d,k(e,t),(v,T,b,S,W)=>ce(v,T,b,S,W,s,i,a,l))},i)&&i({op:"mount",compId:d});return}await s(n,e,t,o)}async function Te(n,e,t,o,r,s,i,a,l,u,d,c,f){let m=()=>{if(n?.kind==="vnode"){let g=n.v;return g!==null&&typeof g=="object"&&typeof g.type=="function"?k(d,0):c}return k(d,0)},x=k(t,o),y=O(e);if(n===void 0){await s(e,t,o,r);return}switch(n.kind){case"hole":{if(!y){let g=B("hole",A(e));if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 hole \u2192 ${A(e)}\uFF08\u7EC4\u4EF6\u8F93\u51FA\u5C55\u5F00\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);await g(null,e,{emit:i,emitNode:s,oldId:m(),newId:x,parent:t,index:o,ref:r,registry:l})}return}case"vnode":{if(y){let g=B(A(n.v),"hole");if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${A(n.v)} \u2192 hole\uFF08\u7EC4\u4EF6\u8F93\u51FA\u6536\u7F29\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);let p=n.v,v=p!==null&&typeof p=="object"&&typeof p.type=="function"?p.key!==null?H(d,p.key):k(d,0):void 0;await g(n.v,e,{emit:i,emitNode:s,oldId:m(),newId:x,parent:t,index:o,ref:r,registry:l,oldCompId:v})}else if(Array.isArray(e)){let g=B(A(n.v),"array");if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${A(n.v)} \u2192 array\uFF08\u5355\u8282\u70B9\u2192\u591A\u6839\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);await g(n.v,e,{emit:i,emitNode:s,oldId:m(),newId:x,parent:t,index:o,ref:r,registry:l})}else{let g=e;f&&g!==null&&typeof g=="object"&&typeof g.type=="function"&&g.key!==null?await f(e,t,o,r,g.key):await u(n.v,g,t,o,r,s,i,a,l)}return}case"array":{if(y){let g=B("array","hole");if(!g)throw new Error("[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 array \u2192 hole\uFF08\u591A\u6839\u6536\u7F29\u2014\u2014P2 \u663E\u5F0F Reject\uFF09");await g(n.items,e,{emit:i,emitNode:s,oldId:m(),newId:x,parent:t,index:o,ref:r,registry:l})}else if(Array.isArray(e))await pe(n.items,e,t,s,i,a,l);else{let g=B("array",A(e));if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 array \u2192 ${A(e)}\uFF08\u591A\u6839\u2192\u5355\u8282\u70B9\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);await g(n.items,e,{emit:i,emitNode:s,oldId:m(),newId:x,parent:t,index:o,ref:r,registry:l})}return}}}async function Q(n,e,t,o,r,s,i,a,l){let u=k(t,o);if(typeof e.type=="function"){let c=e.key!==null?H(t,e.key):u,f=typeof n.type=="function"&&n.key!==null?H(t,n.key):u,m=l.get(c);if(c!==f||m&&m.type!==e.type){let g=l.get(f);if(g){f!==c&&i({op:"unmount",compId:f});let p=g.lastOutput;if(p!==void 0){let v=X(p);V(v,Y(v,f,k(t,o)),fe(v,f,t),i,l)}Z(f,l)}m=void 0,await J(e,t,o,r,c,a,l,s,i),i({op:"mount",compId:c});return}let x=m?.lastOutput;await J(e,t,o,r,c,a,l,async(g,p,v,T)=>{await Te(x,g,p,v,T,s,i,a,l,Q,c,k(t,o),(b,S,W,P,h)=>ce(b,S,W,P,h,s,i,a,l))})&&i({op:"mount",compId:c});return}if(typeof e.type=="string"&&typeof n.type=="string"){n.type===e.type?(dt(n,e,u,i),await pt(n,e,u,s,i,a,l)):(V(n,u,t,i,l),await s(e,t,o,r));return}if(q(n)&&q(e)){await pe(M(n),M(e),t,s,i,a,l);return}throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1AdiffSame \u672A\u5B9A\u4E49\u540C\u6001\u5BF9\u7167 ${String(n.type)} \u2194 ${String(e.type)}\uFF08P2 \u663E\u5F0F Reject\uFF09`)}function me(n,e,t,o){return new ReadableStream({async start(r){let s=d=>r.enqueue(d),i=He(s,t,o),a=A(n),l=A(e),u=B(a,l);u?await u(n,e,{emit:s,emitNode:i,oldId:"root.0",newId:"root.0",parent:"root",index:0,ref:null,registry:o,oldCompId:typeof n.type=="function"?n.key!==null?H("root",n.key):"root.0":void 0}):await Q(n,e,"root",0,null,i,s,t,o),s({op:"done"}),r.close()}})}var ke="__wf_portal";function Ue(n){return`${ke}-${n}`}function Qt(n){return typeof n=="function"?n():n}function mt(n){return n?typeof n=="function"?n():n:null}function gt(n,e){let t={tree:null,applier:null,container:null,chain:Promise.resolve(),version:0,open:!1,phase:"closed",disposed:!1,panel:null,pos:{top:0,left:0}},o=n.getBrowser()?.window,r=n.getBrowser()?.document,s=()=>{if(!r)return null;if(t.container)return t.container;let h=r.getElementById(ke);h||(h=r.createElement("div"),h.id=ke,r.body.appendChild(h));let w=e.key??"popup",N=r.getElementById(Ue(w));return N?t.container=N:(t.container=r.createElement("div"),t.container.id=Ue(w),h.appendChild(t.container)),t.container},i=0,a=()=>{if(t.disposed||!t.open)return;let h=mt(e.anchor);if(!h||!t.panel){i++<10&&queueMicrotask(a);return}if(!o)return;let w=t.panel,N=w.offsetWidth||w.getBoundingClientRect().width,C=w.offsetHeight||w.getBoundingClientRect().height;if((N===0||C===0)&&i++<10){typeof o.requestAnimationFrame=="function"?o.requestAnimationFrame(a):queueMicrotask(a);return}let R=typeof e.placement=="function"?e.placement():e.placement??"bottom";if(e.position){let E=e.position();if(E&&typeof E.x=="number"&&typeof E.y=="number"){if(t.pos={top:E.y,left:E.x,width:E.width},t.applier){let D=u(t.tree);D&&d(D)}return}}let I=tt(h,o,N,C,R,e.gap??8,e.margin??8,e.center??!0);if(!I){i++<10&&queueMicrotask(a);return}if(i=0,t.pos=I,t.applier){let E=u(t.tree);E&&d(E)}},l=h=>{if(t.panel=h,h&&t.open&&e.positioning!=="none"&&(o&&typeof o.requestAnimationFrame=="function"?o.requestAnimationFrame(a):queueMicrotask(a)),h&&e.presence){let w=N=>{t.phase==="exit"&&f()};h.addEventListener("animationend",w),n.onUnmount(()=>h.removeEventListener("animationend",w))}},u=h=>{if(!h)return null;let w=h;e.mask&&(w=$("div",{class:"wf-popup-mask",style:{position:"fixed",inset:"0",background:"var(--wf-overlay, rgba(0,0,0,0.5))",display:"flex",alignItems:"center",justifyContent:"center",zIndex:"var(--wf-z-modal, 1000)"},onClick:E=>{e.maskClosable!==!1&&E.target===E.currentTarget&&m()}},e.maskCentered?{...w,props:{...w.props??{}}}:$("div",{class:"wf-popup-mask-inner"},w)));let N=w.props??{},C=e.positioning==="none"||String(N.class??"").includes("mask")?N.class??"":["wf-popup",N.class].filter(Boolean).join(" "),R=e.positioning==="none"?{...N.style??{},position:"fixed"}:{...N.style??{},position:"fixed",top:`${t.pos.top}px`,left:`${t.pos.left}px`,...t.pos.width!==void 0?{width:`${t.pos.width}px`}:{}};return{...w,props:{...N,class:C,style:R,ref:l}}},d=h=>{let w=++t.version,N=t.tree;t.tree=h,t.chain=t.chain.then(async()=>{if(t.disposed||w!==t.version)return;let C=t.applier;if(!C)return;let R=C.registry;if(!R)return;let I=n.getSharedContext()??{},D=(N?me(N,h,I,R):G(h,I,R)).getReader();for(;;){let{value:he,done:Bt}=await D.read();if(Bt)break;if(t.disposed||w!==t.version)return;C.apply(he)}}).catch(C=>{console.error("[popup] render error:",C)})},c=()=>{t.disposed||(t.disposed=!0,t.applier&&(t.applier.dispose(),t.applier=null),t.tree=null,t.container&&(t.container.remove(),t.container=null))},f=()=>{t.disposed||(t.open=!1,t.phase="closed",p(),c(),e.onClose?.())},m=()=>{!t.open||t.disposed||(e.presence?(t.phase="exit",t.panel&&o&&!nt(t.panel,o)&&f(),t.panel||f()):f())},x={value:""},y={value:null},g={value:!1},p=()=>{g.value&&(r?.body&&(r.body.style.overflow=x.value),x.value="",y.value&&(y.value.focus?.(),y.value=null),g.value=!1)},v=()=>{g.value=!0,e.lockScroll&&r?.body&&(x.value=r.body.style.overflow,r.body.style.overflow="hidden"),e.trapFocus&&o&&(y.value=o.document.activeElement,n.scheduleAfterRender(()=>{let h=t.panel;h&&(h.querySelector?.("input, button, [tabindex], select, textarea")??h).focus?.()}))},T=null;e.trapFocus&&o&&(T=h=>{if(h.key!=="Tab"||!t.open||!t.panel)return;let w=Array.from(t.panel.querySelectorAll?.("input, button, [tabindex], select, textarea")??[]).filter(I=>!I.disabled&&I.offsetParent!==null);if(w.length===0)return;let N=w[0],C=w[w.length-1],R=o?.document.activeElement;h.shiftKey&&(R===N||R===t.panel||!t.panel.contains(R))?(h.preventDefault(),C.focus()):!h.shiftKey&&(R===C||!t.panel.contains(R))&&(h.preventDefault(),N.focus())},o.addEventListener("keydown",T));let b=h=>{if(!t.open||(e.closeOnOutside??!0)===!1)return;let w=h.target,N=mt(e.anchor);w&&N?.contains(w)||w&&t.panel?.contains(w)||m()},S=h=>{t.open&&(e.closeOnEscape??!0)&&h.key==="Escape"&&m()};o&&(o.addEventListener("mousedown",b),o.addEventListener("keydown",S)),n.onUnmount(()=>{o&&(o.removeEventListener("mousedown",b),o.removeEventListener("keydown",S),T&&o.removeEventListener("keydown",T)),f()});let W=()=>{if(t.open||t.disposed)return;t.open=!0,t.phase="open";let h=s();if(!h)return;(e.trapFocus||e.lockScroll)&&v();let w=_();t.applier=new j(h,r,w);let N=Qt(e.content);N!=null?d(u(N)):f()},P={close:m,update(h){if(!(t.disposed||!t.open)){if(h==null){m();return}if(e.position){let w=e.position();w&&typeof w.x=="number"&&typeof w.y=="number"&&(t.pos={top:w.y,left:w.x,width:w.width})}d(u(h))}},refresh(){if(t.disposed||!t.open||!t.tree)return;if(e.position){let w=e.position();w&&typeof w.x=="number"&&typeof w.y=="number"&&(t.pos={top:w.y,left:w.x,width:w.width})}let h=u(t.tree);h&&d(h)},get open(){return t.open}};return W(),P}function yt(n,e,t){let o=n.nextHookIndex(),r=n.getHookState(o)??{value:t};n.setHookState(o,r);let s=e.value!==void 0;return{get value(){return e.value??r.value},controlled:e,setValue(i){s?(e.onChange||console.warn("[vdom] useControlled \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548"),e.onChange?.(i)):(r.value=i,n.requestRender())}}}function Zt(n,e,t){if(typeof n=="string")return n==="win"||n==="window"?e:t?t.querySelector(n)??e:e;if(n&&typeof n=="object"&&!("nodeType"in n)){let o=n;if(typeof o.getScroller=="function"){let r=o.getScroller();return r||e}return o.root?typeof o.root=="string"?t?t.querySelector(o.root)??e:e:o.root:e}return e}function vt(n,e){let t=n.nextHookIndex(),o=n.getHookState(t)??{y:0,x:0,raf:null,handler:null,retries:0};n.setHookState(t,o);let r=n.getBrowser()?.window,s=n.getBrowser()?.document??null;if(!r)return{y:0,x:0,refresh:()=>{}};let i=()=>{if(typeof e=="function")return e();if(e&&typeof e=="object"&&!("nodeType"in e)){let u=e;return typeof u.getScroller=="function"?u.getScroller()??null:u.root?typeof u.root=="string"?s?s.querySelector(u.root)??r:r:u.root:r}return Zt(e,r,s)},a=u=>{u===r?(o.y=r.scrollY||0,o.x=r.scrollX||0):(o.y=u.scrollTop,o.x=u.scrollLeft)},l=()=>{if(o.handler)return;let u=i();if(!u){o.retries++<10&&n.scheduleAfterRender(l);return}let d=()=>{o.raf||(o.raf=r.requestAnimationFrame(()=>{o.raf=null,a(u),n.requestRender()}))};u.addEventListener("scroll",d,{passive:!0}),o.handler=d,n.onUnmount(()=>{o.raf&&r.cancelAnimationFrame(o.raf),u.removeEventListener("scroll",d),o.handler=null})};return l(),{get y(){return o.y},get x(){return o.x},refresh:()=>{let u=i();u&&a(u)}}}function ht(n,e){let t=n.nextHookIndex(),o=n.getHookState(t)??{isIn:!1,io:null,retries:0,ready:!1};n.setHookState(t,o);let s=n.getBrowser()?.window?.IntersectionObserver,i=e&&typeof e=="object"&&!("nodeType"in e)?e:void 0,a=i?.target??(typeof e=="function"||e&&"nodeType"in e?e:void 0),l=typeof i?.rootMargin=="function"?i.rootMargin():i?.rootMargin,u=typeof i?.threshold=="function"?i.threshold():i?.threshold,d=typeof i?.root=="function"?i.root():i?.root??null,c=f=>{if(!s||!f||o.io)return;let m=new s(x=>{let y=x[0];y&&y.isIntersecting!==o.isIn&&(o.isIn=y.isIntersecting,i?.onChange?.(y,y.isIntersecting),n.requestRender())},{root:d??void 0,rootMargin:l,threshold:u});m.observe(f),o.io=m,o.ready=!0,n.onUnmount(()=>o.io?.disconnect())};if(s&&!o.io){let f=typeof a=="function"?a():a??null;f?c(f):a!==void 0&&o.retries++<10&&n.scheduleAfterRender(()=>c(typeof a=="function"?a():a??null))}return{get isIn(){return o.isIn},get ready(){return o.ready},ref:f=>{f?c(f):o.io?.disconnect()},observe:f=>c(f),disconnect:()=>{o.io?.disconnect(),o.io=null}}}function bt(n,e,t){let o=n.nextHookIndex(),r=n.getHookState(o)??{keyword:"",selectedLabel:"",composing:!1};n.setHookState(o,r);let s=e.value!==void 0;return{controlled:e,get value(){return e.value??r.keyword},setValue(i){s?(e.onChange||console.warn(`[vdom] useControlledInput(${t?.name??""}) \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),e.onChange?.(i)):(r.keyword=i,n.requestRender())},get keyword(){return r.keyword},setKeyword(i){r.keyword=i,r.composing||this.setValue(i)},get selectedLabel(){return r.selectedLabel},setSelectedLabel(i){r.selectedLabel=i},get isComposing(){return r.composing},onCompositionStart(){r.composing=!0},onCompositionEnd(){r.composing=!1}}}function wt(n,e){let t={draggable:!0,onDragStart:o=>{e.data!==void 0&&o.dataTransfer?.setData("text/plain",JSON.stringify(e.data)),e.onDragStart?.(o,e.data)},onDragEnd:o=>e.onDragEnd?.(o)};return{draggableProps:t,dragProps:t,dropProps:{onDragOver:o=>{o.preventDefault(),e.onDragOver?.(o)},onDragLeave:o=>e.onDragLeave?.(o),onDrop:o=>{o.preventDefault();let r;try{r=o.dataTransfer?.getData("text/plain")?JSON.parse(o.dataTransfer.getData("text/plain")):void 0}catch{r=void 0}e.onDrop?.(o,r)}}}}function $e(n,e){let t=`media:${e}`,o=n.getInstanceData().get(t);o||(o={matches:!1,mql:null},n.getInstanceData().set(t,o));let r=n.getBrowser()?.window,i=(r?.matchMedia?.bind(r)??(typeof matchMedia=="function"?matchMedia.bind(void 0):void 0))?.(e);if(i&&(o.matches=i.matches,!o.mql)){let a=()=>{o.matches=i.matches,n.requestRender()};i.addEventListener("change",a),o.mql=i,n.onUnmount(()=>i.removeEventListener("change",a))}return()=>o.matches}function xt(n,e){let t=Object.entries(e).sort((o,r)=>o[1]-r[1]);return()=>{let o=t[0]?.[0]??"default";for(let[r,s]of t)$e(n,`(min-width: ${s}px)`)()&&(o=r);return o}}var en=0,We=()=>`m${Date.now().toString(36)}${(en++).toString(36)}`;function Tt(n,e){let t=n.nextHookIndex(),o=n.getHookState(t)??{messages:[],status:"idle",subs:new Set,controller:null,seq:0,input:"",error:null,usage:null,step:null};if(n.setHookState(t,o),o.messages.length===0){let a=[];e.system&&a.push({id:We(),role:"system",content:e.system}),e.initialMessages&&a.push(...e.initialMessages),o.messages=a}let r=()=>{for(let a of[...o.subs])a()},s=e.parseChunk??(a=>{let l=a.trim();if(!l||l.startsWith("event:"))return null;let u=l.startsWith("data:")?l.slice(5).trim():l;if(!u)return null;try{let d=JSON.parse(u);return d.toolCalls?d:d.text!==void 0?{content:String(d.text)}:d.content!==void 0?{content:d.content}:null}catch{return null}}),i={get state(){return o.messages},get messages(){return o.messages},get status(){return o.status},get input(){return o.input??""},setInput(a){o.input=a},get streaming(){return o.status==="streaming"},get error(){return o.error??null},get usage(){return o.usage??null},get step(){return o.step??null},subscribe(a){return o.subs.add(a),()=>{o.subs.delete(a)}},set(){},update(){},notify:r,async send(a=o.input){let l=typeof e.url=="function"?e.url():e.url??"/api/chat",u={id:We(),role:"user",content:a};o.messages=[...o.messages,u];let d={id:We(),role:"assistant",content:"",status:"streaming"};o.messages=[...o.messages,d],o.status="streaming",r();let c=new AbortController;o.controller=c;try{let f=await fetch(l,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({messages:o.messages.map(g=>({role:g.role,content:g.content}))}),signal:c.signal});if(!f.ok||!f.body)throw new Error(`[vdom] chat \u8BF7\u6C42\u5931\u8D25 ${f.status}`);let m=f.body.getReader(),x=new TextDecoder,y="";for(;;){let{value:g,done:p}=await m.read();if(p)break;y+=x.decode(g,{stream:!0});let v=y.split(`
2
+ `);y=v.pop()??"";for(let T of v){if(!T.trim())continue;let b=s(T);b&&(b.content&&(d.content+=b.content,r()),b.toolCalls&&(d.toolCalls=[...d.toolCalls??[],...b.toolCalls],r()))}}d.status=void 0,o.status="idle"}catch(f){f.name!=="AbortError"?(d.status="error",o.status="error"):(d.status=void 0,o.status="idle")}finally{o.controller=null,r()}},stop(){o.controller?.abort()},retry(){let a=[...o.messages].reverse().find(l=>l.role==="user");a&&i.send(a.content)},reset(){o.messages=[],o.status="idle",r()},async approve(a,l,u){let d=!1;o.messages=o.messages.map(c=>({...c,toolCalls:c.toolCalls?.map(f=>d||f.approved?f:(d=!0,{...f,approved:a!=="rejected",feedback:l,...a==="modified"&&u?{args:u}:{}}))})),r()}};return i}function tn(n){let e=n.getBrowser()?.window;return e?.matchMedia?e.matchMedia.bind(e):typeof matchMedia=="function"?matchMedia.bind(void 0):null}function qe(n){let e=tn(n);return!!(e&&e("(prefers-reduced-motion: reduce)").matches)}function kt(n,e,t){let o=n.getBrowser()?.window,r=qe(n),s=t?.duration??400;if(s<=0)return{value:e,reset:()=>{}};let i=t?.ease==="linear"?m=>m:m=>1-Math.pow(1-m,3),a,l=e,u=r?e:0,d={get value(){return u},set value(m){u=m},reset:()=>{}},c=()=>{n.requestRender()},f=m=>{if(l=m,r){d.value=m,c();return}if(m===d.value)return;if(!o){d.value=m;return}a&&o.cancelAnimationFrame(a);let x=d.value,y=o.performance.now(),g=p=>{let v=Math.min(1,(p-y)/s);d.value=Math.round(x+(m-x)*i(v)),v<1?a=o.requestAnimationFrame(g):a=void 0,c()};a=o.requestAnimationFrame(g)};return d.reset=m=>{m===l&&a||f(m)},n.onUnmount(()=>{a&&o&&(o.cancelAnimationFrame(a),a=void 0)}),d.reset(e),d}function Ct(n,e){let t=n.getBrowser()?.window,o=0,r=0,s=!1,i=0,a=c=>{s&&e.onMove(c,{x:c.clientX-o,y:c.clientY-r})},l=c=>{s&&c.pointerId===i&&(s=!1,t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",u)),e.onEnd?.(c))},u=c=>{!s||c.pointerId!==i||(s=!1,t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",u)),e.onEnd?.(c))},d=c=>{s||(c.preventDefault(),s=!0,i=c.pointerId,o=c.clientX,r=c.clientY,t&&(t.addEventListener("pointermove",a),t.addEventListener("pointerup",l),t.addEventListener("pointercancel",u)),e.onStart?.(c))};return n.onUnmount(()=>{s&&t&&(t.removeEventListener("pointermove",a),t.removeEventListener("pointerup",l),t.removeEventListener("pointercancel",u),s=!1)}),{onPointerDown:d}}function Et(n){let e=n.getBrowser()?.window,t=e?.visualViewport,o=t?.height??e?.innerHeight??0,r=t?.offsetTop??0,s=!1,i={get height(){return o},get offsetTop(){return r},get keyboardOpen(){return s}},a=()=>{let l=e?.visualViewport;o=l?.height??e?.innerHeight??0,r=l?.offsetTop??0,s=o<(e?.innerHeight??0)*.9,n.requestRender()};if(e){let l=e.visualViewport;l?.addEventListener?(l.addEventListener("resize",a),l.addEventListener("scroll",a),n.onUnmount(()=>{l.removeEventListener("resize",a),l.removeEventListener("scroll",a)})):(e.addEventListener("resize",a),n.onUnmount(()=>e.removeEventListener("resize",a)))}return i}function St(n){return{useExternal(e){let t=n.getInstanceData(),o=t.get(e);if(!o){let r=e.subscribe(()=>n.requestRender());n.onUnmount(r),o={unsub:r},t.set(e,o)}return()=>e.state},signal:e=>Le(e),hold:e=>n.onUnmount(e),useStableRef:(e,t)=>Qe(n,e,t),useOpen:(e,t)=>Ze(n,e,t),onUnmount:e=>n.onUnmount(e),useGlobalKey:(e,t)=>et(n,e,t),openPopup:e=>gt(n,e),usePopupPosition:e=>ot(n,e),useControlled:(e,t)=>yt(n,e,t),useScrollPosition:e=>vt(n,e),useInView:e=>ht(n,e),useControlledInput:(e,t)=>bt(n,e,t),useDragDrop:e=>wt(n,e),useMedia:e=>$e(n,e),useBreakpoint:e=>xt(n,e),useChat:e=>Tt(n,e),useTween:(e,t)=>kt(n,e,t),useDrag:e=>Ct(n,e),useVisualViewport:()=>Et(n),useReducedMotion:()=>qe(n)}}function ge(n,e,t){return e<=0?n:new Promise((o,r)=>{let s=setTimeout(()=>{r(new Error(`[vdom] \u5F02\u6B65\u8D85\u65F6\uFF08${e}ms\uFF09: ${t}`))},e);n.then(i=>{clearTimeout(s),o(i)},i=>{clearTimeout(s),r(i)})})}var Ce=0,Nt=!1;function It(){Ce++}function Vt(){Ce>0&&Ce--}function Rt(n,e){if(Ce<=0)return!1;let t=new Error().stack?.split(`
3
+ `).slice(2,6).map(o=>o.trim()).join(" \u2190 ")??"";return console.warn(`[vdom] \u6E32\u67D3\u8DEF\u5F84\u526F\u4F5C\u7528\uFF1ArenderFn \u5185\u521B\u5EFA ${n}\u2014\u2014\u6BCF\u6B21\u6E32\u67D3\u91CD\u5EFA\u5B9A\u65F6\u5668\uFF08\u91CD\u6E32\u67D3\u98CE\u66B4/SSR \u670D\u52A1\u5668\u6C61\u67D3\u2014\u2014DemoProgress \u5B9E\u8BC1\uFF09\u2014\u2014\u5E94\u5728\u5DE5\u5382\uFF08mount \u671F\uFF09\u521B\u5EFA + ctx.ui.hold \u6CE8\u518C\u6E05\u7406\uFF0C\u6216\u56DE\u8C03\u5185\u521B\u5EFA`),console.warn(`[vdom] \u8C03\u7528\u94FE: ${t}`),e}function Pt(n,e=!1){if(Nt)return;let t=n,o=t.setTimeout,r=t.setInterval;typeof o!="function"||typeof r!="function"||(t.setTimeout=function(i,a,...l){return Rt("setTimeout",e)?0:o.call(t,i,a,...l)},t.setInterval=function(i,a,...l){return Rt("setInterval",e)?0:r.call(t,i,a,...l)},Nt=!0)}function nn(n){return O(n)?{kind:"hole"}:Array.isArray(n)?{kind:"array",items:n}:{kind:"vnode",v:n}}function X(n){return n.kind==="hole"?null:n.kind==="array"?n.items:n.v}function _(){let n=new Map;return{get:e=>n.get(e),set:(e,t)=>{n.set(e,t)},delete:e=>{n.delete(e)},keys:()=>[...n.keys()],asyncTimeout:15e3}}function Mt(n){for(let e of[...n.keys()].reverse())Z(e,n)}async function J(n,e,t,o,r,s,i,a,l){let u=n.type,d=i.get(r);if(d&&d.phase==="mounting")throw new Error(`[vdom] \u7EC4\u4EF6\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A${r} \u6B63\u5728 mount\uFF08\u5F02\u6B65\u5DE5\u5382\u671F\u95F4\u91CD\u590D\u5F15\u7528\u2014\u2014\u5FAA\u73AF\u4F9D\u8D56\uFF1F\uFF09`);if(d&&d.type!==u){if(Z(r,i),d.lastOutput!==void 0&&l){let g=X(d.lastOutput);V(g,Y(g,r,r),r,l,i)}d=void 0}let c=!d;if(!d){let g=[],p=new Map,v={n:0},T=new Map,b=Object.create(s);b.onUnmount=P=>{g.push(P)},b.ui=St({requestRender:()=>{b.render?.()},onUnmount:P=>{g.push(P)},getBrowser:()=>s.browser??null,nextHookIndex:()=>v.n++,getHookState:P=>p.get(P),setHookState:(P,h)=>{p.set(P,h)},getInstanceData:()=>T,scheduleAfterRender:P=>s.afterRender?.(P),getSharedContext:()=>s??null});let S={type:u,renderFn:(()=>null),onUnmounts:g,hookSeq:v,hookStates:p,renderBase:0,phase:"mounting"};i.set(r,S);let W;try{let P=u(n.props,b);W=await ge(Promise.resolve(P),i.asyncTimeout,`mount(${r})`)}catch(P){i.delete(r);for(let h of g.reverse())try{h()}catch(w){console.error("[vdom] mount \u6E05\u7406:",w)}throw P}d={type:u,renderFn:W,onUnmounts:g,hookSeq:v,hookStates:p,renderBase:0,phase:"mounted"},d.renderBase=v.n,i.set(r,d)}d.hookSeq.n=d.renderBase;let f;try{It();let g;try{g=d.renderFn(n.props)}finally{Vt()}f=await ge(Promise.resolve(g),i.asyncTimeout,`renderFn(${r})`)}catch(g){console.error(`[vdom] renderFn \u8D85\u65F6/\u9519\u8BEF\uFF08${r}\uFF09\u2014\u2014\u7EC4\u4EF6\u7EA7 hole \u964D\u7EA7\uFF08\u4E0B\u4E00\u62CD\u91CD\u8BD5\u81EA\u6108\uFF09:`,g),f=null}d.lastOutput=nn(f);let m=Array.isArray(f),x=typeof f?.type=="function",y=O(f);return await a(f,m||x||y?r:e,m||x||y?0:t,o),c}function Z(n,e){let t=[...e.keys()].filter(o=>o===n||o.startsWith(n+".")).reverse();for(let o of t){let r=e.get(o);if(r){for(let s of r.onUnmounts.reverse())try{s()}catch(i){console.error("[vdom] onUnmount:",i)}e.delete(o)}}}var Ee=class{queue=null;failed=!1;phase="inactive";begin(e){let t=[],o=r=>{t.push(r);for(let s of r.childNodes)o(s)};for(let r of e.childNodes)o(r);this.queue=t,this.failed=!1,this.phase="consuming"}end(){this.phase==="consuming"&&(this.queue&&this.queue.length>0&&(this.failed=!0),this.queue=null,this.phase=this.failed?"failed":"inactive")}reset(){this.queue=null,this.failed=!1,this.phase="inactive"}next(e,t,o){if(this.phase!=="consuming")return console.error(`[vdom] absorb \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Anext \u5728 ${this.phase} \u9636\u6BB5\u8C03\u7528\uFF08\u5E94 consuming\uFF09`),null;let r=this.queue;if(!r)return null;for(;r.length>0;){let s=r.shift();if(e==="element"?s.nodeType===1&&s.tagName.toLowerCase()===t:e==="text"?s.nodeType===3:s.nodeType===8){if(e==="text"&&o!==void 0){let a=s,l=a.textContent??"";if(l!==o&&l.startsWith(o)){let u=a.splitText(o.length);r.unshift(u)}}return s}}return this.failed=!0,this.phase="failed",null}};var on=new Set(["draggable","contenteditable","spellcheck"]);function Ke(n,e,t){if(e==="innerHTML"||e==="textContent"||e==="value"){n[e]=t;return}if(t==null){n.removeAttribute(e);return}if(on.has(e)){n.setAttribute(e,t?"true":"false");return}if(t===!1){n.removeAttribute(e);return}if(e==="class"||e==="className"){n.setAttribute("class",String(t));return}if(typeof t=="boolean"){n.setAttribute(e,"");return}n.setAttribute(e,String(t))}var rn=new Set(["zIndex","opacity","lineHeight","zoom","fontWeight","order","flex","flexGrow","flexShrink","flexBasis","animationIterationCount","orphans","widows","columns","columnCount","columnGap","counterIncrement","counterReset","aspectRatio","scale","rotate"]);function sn(n,e,t){if(t==null||t===!1){e.startsWith("--")&&n.style.removeProperty(e),n.style[e]="";return}if(e.startsWith("--")){n.style.setProperty(e,String(t));return}typeof t=="number"&&!rn.has(e)&&(t=`${t}px`),n.style[e]=String(t)}function Be(n,e){if(typeof e=="string"){n.setAttribute("style",e);return}if(e&&typeof e=="object"){n.style.cssText="";for(let[t,o]of Object.entries(e))sn(n,t,o)}}var an=new Set(["value","checked","selected","disabled","hidden","autofocus","defaultValue","defaultChecked","innerHTML","textContent","download","indeterminate","multiple","readOnly","required","tabIndex","spellcheck","draggable","scrollTop","scrollLeft","volume","muted","paused","playbackRate","open"]);function At(n){return an.has(n)}function Lt(n,e,t){n[e]=t}function ye(n,e){for(let[t,o]of Object.entries(e))t==="style"?Be(n,o):Ke(n,t,o)}function Ot(n,e,t,o,r,s){if(o!=="ref")if(typeof r=="function"||r===void 0&&typeof s=="function"){if(ee.test(o)){let i=ae(o);i&&n.set(e,i,r)}return}else if(ee.test(o)){let i=ae(o);i&&n.set(e,i,r)}else o==="style"?Be(t,r):At(o)?Lt(t,o,r):Ke(t,o,r)}var ln="http://www.w3.org/2000/svg",dn=new Set(["svg","path","circle","line","rect","text","g","defs","marker","polyline","polygon","ellipse","use","symbol","tspan","textPath","clipPath","mask","pattern","linearGradient","radialGradient","stop"]);function Ht(n,e){return dn.has(e)?n.createElementNS(ln,e):n.createElement(e)}function un(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===1&&t.tagName.toLowerCase()===e.tag)ye(t,e.attrs);else if(n.absorb.queue&&!t){let r=n.absorb.next("element",e.tag);if(r)ye(r,e.attrs),n.nodes.set(e.id,r);else{let s=Ht(n.doc,e.tag);ye(s,e.attrs),n.nodes.set(e.id,s)}}else{let r=Ht(n.doc,e.tag);ye(r,e.attrs),t&&(n.clearNodeRefs(e.id),n.eventRegistry.remove(e.id),t.replaceWith(r)),n.nodes.set(e.id,r)}let o=n.nodes.get(e.id);o&&o.nodeType===1&&o.setAttribute("data-wf-id",e.id)}function fn(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===3)t.textContent!==e.value&&(t.textContent=e.value);else if(n.absorb.queue&&!t){let o=n.absorb.next("text",void 0,e.value);if(o)o.textContent!==e.value&&(o.textContent=e.value),n.nodes.set(e.id,o);else{let r=n.doc.createTextNode(e.value);n.nodes.set(e.id,r)}}else{let o=n.doc.createTextNode(e.value);t&&t.replaceWith(o),n.nodes.set(e.id,o)}}function cn(n,e){n.touched.add(e.id);let t=n.nodes.get(e.id);if(t&&t.nodeType===8){let o=e.detail?`wf-hole: ${e.detail}`:"wf-hole";t.textContent!==o&&(t.textContent=o)}else if(n.absorb.queue&&!t){let o=n.absorb.next("comment");if(o)n.nodes.set(e.id,o);else{let r=n.doc.createComment(e.detail?`wf-hole: ${e.detail}`:"wf-hole");n.nodes.set(e.id,r)}}else{let o=n.doc.createComment(e.detail?`wf-hole: ${e.detail}`:"wf-hole");t&&t.replaceWith(o),n.nodes.set(e.id,o)}}function pn(n,e){let t=n.nodes.get(e.id);if(!t||t.isConnected)return;let o=n.parentOf(e);if(o){if(o.nodeType===3){let r=o.parentElement;if(!r)return;let s=o.nextSibling&&o.nextSibling.parentNode===r?o.nextSibling:null;r.insertBefore(t,s),t.nodeType===1&&n.refRegistry.mount(e.id,t);return}if(o.nodeType===8){console.error(`[vdom] id \u7A7A\u95F4\u8FDD\u4F8B\uFF1Ainsert ${e.id} \u7684 parent \u662F\u6CE8\u91CA\u951A\uFF08${e.parent}\uFF09\u2014\u2014\u63D2\u5230\u7236\u5BB9\u5668`);let r=o.parentElement;r&&r.appendChild(t),t.nodeType===1&&n.refRegistry.mount(e.id,t);return}if(e.ref){let r=n.nodes.get(e.ref)??null;r&&r.parentNode===o?o.insertBefore(t,r.nextSibling):r?o.appendChild(t):o.insertBefore(t,o.firstChild)}else o.insertBefore(t,o.firstChild);t.nodeType===1&&n.refRegistry.mount(e.id,t)}}function mn(n,e){let t=n.nodes.get(e.id);if(t){if(!e.noMove){let o=n.parentOf(e);if(!o)return;let r=e.ref?n.nodes.get(e.ref)??null:null;r?o.insertBefore(t,r.nextSibling):e.first?o.insertBefore(t,o.firstChild):o.appendChild(t)}n.remapSubtree(e.id,e.newId)}}function gn(n,e){n.clearNodeRefs(e.id),n.eventRegistry.remove(e.id),n.nodes.get(e.id)?.remove();let t=e.id+".";for(let o of[...n.nodes.keys()])o.startsWith(t)&&(n.clearNodeRefs(o),n.eventRegistry.remove(o),n.nodes.delete(o));n.nodes.delete(e.id)}function yn(n,e){let t=n.nodes.get(e.id);t&&t.nodeType===3&&(t.textContent=e.value)}function vn(n,e){let t=n.nodes.get(e.id);if(!t||t.nodeType!==1)return;let o=t;if(e.key==="ref"){let r=n.refRegistry.refs.get(e.id);if(e.value===void 0){n.refRegistry.set(e.id,void 0,r),n.refRegistry.refs.delete(e.id);return}n.refRegistry.set(e.id,e.value,r),o.isConnected&&n.refRegistry.mount(e.id,o);return}if(ee.test(e.key)){let r=ae(e.key);r&&(e.value===void 0?n.eventRegistry.removeEvent(e.id,r):n.eventRegistry.set(e.id,r,e.value));return}Ot(n.eventRegistry,e.id,o,e.key,e.value,e.prev)}function hn(n,e){let t=n.nodes.get(e.id);t&&t.nodeType===1&&typeof e.fn=="function"&&(n.refRegistry.set(e.id,e.fn),n.refRegistry.mount(e.id,t))}function bn(n,e){n.clearNodeRefs(e.id)}function wn(n,e){let t=n.registry?.get(e.compId);t&&(t.phase="mounted")}function xn(n,e){n.registry&&Z(e.compId,n.registry)}function Tn(n,e){if(e.full&&n.absorb.end(),e.full&&n.touched.size>0)for(let[t,o]of[...n.nodes])n.touched.has(t)||(n.clearNodeRefs(t),n.eventRegistry.remove(t),o.remove(),n.nodes.delete(t));n.touched.clear()}function Dt(n,e){switch(e.op){case"create":un(n,e);break;case"createText":fn(n,e);break;case"createAnchor":cn(n,e);break;case"insert":pn(n,e);break;case"move":mn(n,e);break;case"remove":gn(n,e);break;case"setText":yn(n,e);break;case"setProp":vn(n,e);break;case"ref":hn(n,e);break;case"unref":bn(n,e);break;case"mount":wn(n,e);break;case"unmount":xn(n,e);break;case"done":Tn(n,e);break;case"close":break}}var j=class{nodes=new Map;touched=new Set;eventRegistry;refRegistry=new we;absorb=new Ee;container;doc;registry;devVerify=null;constructor(e,t,o){this.container=e,this.doc=t,this.registry=o??null,this.eventRegistry=new be(t,e)}dispose(){if(this.eventRegistry.dispose(),this.refRegistry.dispose(),this.registry)for(let e of[...this.registry.keys()].reverse()){let t=this.registry.get(e);if(t){for(let o of[...t.onUnmounts].reverse())try{o()}catch{}this.registry.delete(e)}}}clearNodeRefs(e){this.refRegistry.unmount(e)}remapSubtree(e,t){let o=(r,s)=>{let i=r.get(s);i!==void 0&&(r.delete(s),r.set(t+s.slice(e.length),i))};for(let r of[...this.nodes.keys()])if(r===e||r.startsWith(e+".")){o(this.nodes,r);let s=this.nodes.get(t+r.slice(e.length));s&&s.nodeType===1&&s.setAttribute("data-wf-id",t+r.slice(e.length))}this.refRegistry.remap(e,t);for(let r of[...this.eventRegistry.table.keys()])if(r===e||r.startsWith(e+".")){let s=this.eventRegistry.table.get(r);this.eventRegistry.table.delete(r),this.eventRegistry.table.set(t+r.slice(e.length),s)}if(this.registry){for(let r of[...this.registry.keys()])if(r===e||r.startsWith(e+".")){let s=this.registry.get(r);this.registry.delete(r),this.registry.set(t+r.slice(e.length),s)}}}parentOf(e){if(e.parent==="root")return this.container;let t=this.nodes.get(e.parent);if(t)return t;let o=e.parent.split(".");for(let r=o.length-1;r>0;r--){let s=o.slice(0,r).join(".");if(s==="root")return this.container;let i=this.nodes.get(s);if(i)return i}return null}apply(e){Dt(this,e),this.devVerify&&this.devVerify(e,this)}};function Ut(){let n=new Map;return{get:e=>n.get(e),set:(e,t)=>{n.set(e,t)},removePrefix:e=>{for(let t of[...n.keys()])(t===e||t.startsWith(e+"."))&&n.delete(t)},hasPrefix:e=>{for(let t of n.keys())if(t===e||t.startsWith(e+"."))return!0;return!1},remapPrefix:(e,t)=>{for(let[o,r]of[...n])(o===e||o.startsWith(e+"."))&&(n.delete(o),n.set(t+o.slice(e.length),r))},clear:()=>{n.clear()}}}function $t(n,e){let t=[];switch(e.op){case"create":case"createText":case"createAnchor":{n.get(e.id)===void 0&&n.set(e.id,"created");break}case"insert":{let o=n.get(e.id);o===void 0?t.push(`insert Pre \u8FDD\u4F8B\uFF1Aid ${e.id} \u672A create`):o==="created"&&n.set(e.id,"inserted");break}case"close":{let o=n.get(e.id);o===void 0?t.push(`close Pre \u8FDD\u4F8B\uFF1Aid ${e.id} \u4E0D\u5B58\u5728`):o==="inserted"?n.set(e.id,"active"):o!=="active"&&t.push(`close Pre \u8FDD\u4F8B\uFF1A${e.id} \u72B6\u6001\u5E94\u4E3A inserted/active\uFF08\u5B9E\u9645 ${o}\uFF09`);break}case"remove":{n.removePrefix(e.id),n.hasPrefix(e.id)&&t.push(`remove Post \u8FDD\u4F8B\uFF1A${e.id} \u524D\u7F00\u8BB0\u5F55\u6B8B\u7559`);break}case"setText":{n.get(e.id)===void 0&&t.push(`setText Pre \u8FDD\u4F8B\uFF1Aid ${e.id} \u4E0D\u5B58\u5728`);break}case"setProp":{n.get(e.id)===void 0&&t.push(`setProp Pre \u8FDD\u4F8B\uFF1Aid ${e.id} \u4E0D\u5B58\u5728`);break}case"move":{n.remapPrefix(e.id,e.newId),n.get(e.newId)===void 0&&t.push(`move Post \u8FDD\u4F8B\uFF1Aremap \u540E\u65B0 id ${e.newId} \u4E0D\u5B58\u5728`);break}case"mount":case"unmount":case"ref":case"unref":break;case"done":break}return t}function Wt(){let n=Ut();return(e,t)=>{let o=$t(n,e);for(let r of o)console.error(`[vdom-dev] ${r}`);switch(e.op){case"insert":{let r=t.nodes.get(e.id);r&&!r.isConnected&&console.error(`[vdom-dev] insert Post \u8FDD\u4F8B\uFF1A${e.id} \u672A\u6302\u8F7D\uFF08isConnected=false\uFF09`);break}case"setText":{let r=t.nodes.get(e.id);r&&r.nodeType!==3&&console.error(`[vdom-dev] setText Pre \u8FDD\u4F8B\uFF1A${e.id} \u975E\u6587\u672C\u8282\u70B9\uFF08${r.nodeType}\uFF09`);break}case"setProp":{let r=t.nodes.get(e.id);r&&r.nodeType!==1&&console.error(`[vdom-dev] setProp Pre \u8FDD\u4F8B\uFF1A${e.id} \u975E\u5143\u7D20\u8282\u70B9\uFF08${r.nodeType}\uFF09`);break}default:break}}}function qt(n=15e3){let e=new Map,t="active",o={};return{get(r,s){let i=e.get(r);if(i)return i;let a=ge((async()=>{if(r in o)return o[r];if(s)return s();let l=await fetch(r);if(!l.ok)throw new Error(`[vdom] ctx.data \u8BF7\u6C42\u5931\u8D25 ${l.status}: ${r}`);return l.json()})(),n,`ctx.data(${r})`);return e.set(r,a),a},set(r,s){e.set(r,Promise.resolve(s))},has(r){return e.has(r)},preload(r){o={...o,...r}},invalidate(r){e.delete(r)},seed(){return o}}}function kn(n){return(e,t)=>{if(t&&typeof t=="object"&&typeof t.$fn=="number"){let o=n.get(t.$fn);return o||console.error(`[vdom] \u4F20\u8F93\u8FDD\u4F8B\uFF1A$fn:${t.$fn} \u65E0\u5BF9\u5E94\u51FD\u6570\uFF08\u51FD\u6570\u8868\u5DF2\u6E05/\u8DE8\u6D41\u5F15\u7528\uFF09`),o}return t}}function Cn(n,e){return $("div",{class:"wf-error-fallback",style:"padding:40px 24px;text-align:center;font-family:var(--wf-font-sans,system-ui);"},[$("div",{style:"font-size:21px;font-weight:600;margin-bottom:8px;"},"\u9875\u9762\u6E32\u67D3\u5931\u8D25"),$("div",{style:"font-size:13px;color:var(--wf-color-text-secondary,#64748b);margin-bottom:16px;max-width:520px;margin-inline:auto;word-break:break-all;"},String(n?.message??n)),$("button",{class:"wf-btn wf-btn--primary",onClick:()=>{e.render?.()},style:"padding:8px 20px;border-radius:6px;border:none;cursor:pointer;"},"\u91CD\u8BD5")])}function Ft(n,e){let t=new TextDecoder,o="",r=kn(e),s=async()=>{for(;;){let i=o.indexOf(`
4
+ `);if(i>=0){let u=o.slice(0,i).trim();if(o=o.slice(i+1),u)return{value:JSON.parse(u,r),done:!1};continue}let{value:a,done:l}=await n.read();if(l){if(o.trim()){let u=o.trim();return o="",{value:JSON.parse(u,r),done:!1}}return{value:void 0,done:!0}}o+=t.decode(a,{stream:!0})}};return{[Symbol.asyncIterator](){return{next:s}}}}function En(n,e){let t=new TextEncoder,o=new WeakMap,r=(s,i)=>{if(typeof i=="function"){let a=o.get(i);if(a!==void 0)return{$fn:a};let l=e.size+1;return e.set(l,i),o.set(i,l),{$fn:l}}return i};return n.pipeThrough(new TransformStream({transform(s,i){i.enqueue(t.encode(JSON.stringify(s,r)+`
5
+ `))}}))}function Sn(){return new Map}function Nn(n,e){let t=document,o=window,r=typeof e.root=="string"?t.querySelector(e.root):e.root;if(!r)throw new Error(`uiServe: root \u672A\u627E\u5230 \u2014 ${String(e.root)}`);let s=Sn(),i=_(),a=new j(r,t,i);o.__WF_DEV__&&(a.devVerify=Wt(),Pt(o));let l=se(o.location.pathname),u=null,d="active",c="idle",f=[],m=null,x=0,y=3,g=C=>{u=null;let R=e.errorFallback?.(C,S)??Cn(C,S),E=W.stream(R,{status:500}).body.getReader();(async()=>{try{for await(let D of Ft(E,s))a.apply(D)}catch(D){console.error("[vdom] error fallback \u6E32\u67D3\u5931\u8D25:",D)}})()},p=[],v=async C=>{let R=C;c="rendering";try{for(;;){try{l=R;let I=await n.resolve(l,S),E=I.headers.get("Location");if(I.status>=300&&I.status<400&&E){o.history.replaceState({},"",E),R=se(E);continue}if(I.body){for await(let D of Ft(I.body.getReader(),s))a.apply(D);if(a.absorb.failed){r.innerHTML="",u=null,a.absorb.reset();continue}}if(!u&&a.absorb.failed){r.innerHTML="",a.absorb.reset();continue}x=0}catch(I){u=null,x++,console.error("[vdom] render:",I),x>=y&&(x=0,g(I instanceof Error?I:new Error(String(I))))}if(f.length>0)R=f.shift();else break}}finally{c="idle",m=null;let I=p;p=[];for(let E of I)try{E()}catch(D){console.error("[vdom] afterRender:",D)}s.clear()}},T=C=>{if(d==="unmounted")return console.error("[vdom] serve \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Aunmount \u540E render \u8C03\u7528\u88AB\u5FFD\u7565"),Promise.resolve();if(c==="rendering"&&m)return f.push(C),m;let R=v(C);return m=R,R},b=async C=>{if(d==="unmounted"){console.error("[vdom] serve \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Aunmount \u540E navigate \u88AB\u5FFD\u7565");return}o.history.pushState({},"",C),await T(se(C))},S={async render(){await T(l)},data:qt(),browser:Ae(),onUnmount(C){N.push(C)},afterRender(C){p.push(C)},...e.api?{api:e.api}:{},...e.auth?{auth:e.auth}:{},...e.ws?{ws:e.ws}:{},...e.i18n?{i18n:e.i18n}:{},...e.toast?{toast:e.toast}:{},...e.confirm?{confirm:e.confirm}:{},...e.notification?{notification:e.notification}:{},app:{navigate:b}},W=S;W.stream=(C,R)=>{!u&&r.childNodes.length>0&&(Array.from(r.querySelectorAll("*")).some(D=>[...D.childNodes].some(he=>he.nodeType===8&&he.textContent?.includes("wf")))?a.absorb.begin(r):r.innerHTML="");let I=u?u.type!==C.type?(()=>{Mt(i);for(let E of[...a.nodes.keys()])a.clearNodeRefs(E),a.eventRegistry.remove(E);return a.nodes.clear(),a.touched.clear(),r.innerHTML="",u=null,G(C,S,i)})():me(u,C,S,i):G(C,S,i);return u=C,new Response(En(I,s),{status:R?.status??200,headers:R?.headers})};let P=C=>{let I=C.target?.closest?.("a[href]");if(!I)return;let E=I.getAttribute("href");!E||E.startsWith("http")||E.startsWith("#")||(C.preventDefault(),b(E))};t.addEventListener("click",P);let h=()=>{T(se(o.location.pathname))};o.addEventListener("popstate",h);let w=(async()=>{await T(l)})(),N=[];return{ready:w,navigate:b,unmount(){d="unmounted",t.removeEventListener("click",P),o.removeEventListener("popstate",h),a.dispose();for(let C of N.reverse())try{C()}catch(R){console.error("[vdom] unmount:",R)}N.length=0,r.innerHTML=""}}}var ve=class extends Error{status;constructor(e,t){super(e),this.name="ApiError",this.status=t}};function Rn(n={}){let e=n.baseUrl??"",t=n.timeout??15e3;async function o(r,s,i,a={}){let l=new AbortController,u=setTimeout(()=>l.abort(),t);try{let d=typeof n.token=="function"?n.token():n.token,c={"content-type":"application/json",...typeof n.headers=="function"?n.headers():n.headers,...d?{authorization:`Bearer ${d}`}:{},...a.headers},f=await fetch(e+s,{method:r,headers:c,body:i!==void 0?JSON.stringify(i):void 0,signal:l.signal});if(f.status===401&&n.onUnauthorized&&await n.onUnauthorized())return o(r,s,i,a);if(!f.ok)throw new ve(`[api] \u8BF7\u6C42\u5931\u8D25 ${f.status}: ${r} ${s}`,f.status);let m=await f.text();return m?JSON.parse(m):void 0}catch(d){let c=d instanceof ve?d:new ve(d.message);throw n.onError?.(c),c}finally{clearTimeout(u)}}return{get:(r,s)=>o("GET",r,void 0,s),post:(r,s,i)=>o("POST",r,s,i),put:(r,s,i)=>o("PUT",r,s,i),delete:(r,s)=>o("DELETE",r,void 0,s),patch:(r,s,i)=>o("PATCH",r,s,i),request:o}}function In(n={}){let e=n.scheme??"Bearer",t=n.storage??{get:()=>null,set:()=>{}},o=n.tokenKey??n.key??"wf-auth-token",r=n.userKey??"wf-auth-user",s=n.refreshTokenKey??"wf-auth-refresh",i=null;try{let l=t.get(r);l&&(i=JSON.parse(l))}catch{}let a={getToken(){let l=t.get(o);return l||null},setToken(l){l===null?t.set(o,""):t.set(o,l)},headers(){let l=t.get(o);return l?{authorization:`${e} ${l}`}:{}},logout(){t.set(o,""),t.set(r,""),t.set(s,""),i=null},get user(){return i},get isLoggedIn(){return!!t.get(o)},login(l,u,d){t.set(o,l),u!==void 0&&(t.set(r,JSON.stringify(u)),i=u),d!=null&&t.set(s,d),n.onAuth?.(a)},setUser(l){t.set(r,JSON.stringify(l)),i=l},async refresh(){if(!n.onRefresh)return!1;let l=await n.onRefresh();return l&&n.onAuth?.(a),l}};return a}function Vn(n={}){let e=n.messages??{},t=n.locale??Object.keys(e)[0]??"default";return{get locale(){return t},setLocale(o){t=o},t(o,r){let i=e[t]?.[o]??o;if(r)for(let[a,l]of Object.entries(r))i=i.replaceAll(`{${a}}`,String(l));return i}}}function Pn(n={}){let e=n.WebSocketCtor??globalThis.WebSocket,t=null,o=!1,r=0,s=null,i=new Set,a=new Set,l=n.autoReconnect?typeof n.autoReconnect=="object"?n.autoReconnect:{}:null,u=y=>{let g=y.data;if(typeof y.data=="string")try{g=JSON.parse(y.data)}catch{}for(let p of[...i])p(g)},d=y=>{if(c.current!==y){c.current=y;for(let g of[...a])g(y)}},c={current:!1},f=()=>{if(!l||o||s)return;let y=l.baseMs??1e3,g=l.maxMs??3e4,p=Math.min(y*2**r,g);r++,s=setTimeout(()=>{s=null,x(m)},p)},m=n.url??"",x=y=>{e&&(m=y,t=new e(y),t.onmessage=u,t.onopen=()=>{r=0,d(!0)},t.onclose=()=>{t=null,d(!1),f()})};return{connect(y){o=!1,s&&(clearTimeout(s),s=null),r=0,t?.close(),t=null,d(!1),x(y??n.url??"")},get isConnected(){return c.current},send(y){t?.send(typeof y=="string"?y:JSON.stringify(y))},onMessage(y){return i.add(y),()=>{i.delete(y)}},onStatusChange(y){return a.add(y),y(c.current),()=>{a.delete(y)}},close(){o=!0,s&&(clearTimeout(s),s=null),t?.close(),t=null,d(!1)}}}function Kt(n,e="info",t=3e3){let o=document.createElement("div");o.className="wf-toast-host",o.style.cssText="position:fixed;top:16px;right:16px;z-index:var(--wf-z-toast,9999)",document.body.appendChild(o);let r=_(),s=new j(o,document,r),i={render:async()=>{},onUnmount:()=>{},data:{get:async()=>{},set:()=>{},has:()=>!1}};G($(()=>()=>$("div",{class:`wf-toast wf-toast--${e}`},$("span",{class:"wf-toast-msg"},n)),{}),i,r).pipeTo(new WritableStream({write(l){s.apply(l)}})).then(()=>{setTimeout(()=>{s.dispose(),o.remove()},t)})}function Mn(n){return Object.assign(n,{toast:Kt})}function An(n,e,t){let o=new AbortController,r=t?.signal;r&&(r.aborted?o.abort():r.addEventListener("abort",()=>o.abort(),{once:!0}));let s=t?.traceId??Un(),i=t?.record!==!1,a=[],l=(async()=>{let u;try{u=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json","X-Trace-Id":s,Accept:"text/event-stream",...t?.headers},body:JSON.stringify(e),signal:o.signal})}catch(d){if(o.signal.aborted)return;t?.onError?.({code:"provider_error",message:d instanceof Error?d.message:String(d)});return}if(!u.ok){t?.onError?.({code:Dn(u.status),message:`HTTP ${u.status} ${u.statusText}`});return}try{for await(let{name:d,data:c}of On(u.body)){if(o.signal.aborted)return;Hn(a,{name:d,data:c},i),Ln(d,c,t??{})}}catch(d){if(o.signal.aborted)return;t?.onError?.({code:"provider_error",message:d instanceof Error?d.message:String(d)})}})();return{abort:()=>o.abort(),done:l,traceId:s,events:a}}function Ln(n,e,t){switch(n){case"wf:token":return t.onToken?.(e.text);case"wf:tool_call":return t.onToolCall?.(e);case"wf:tool_result":return t.onToolResult?.(e);case"wf:tool_progress":return t.onToolProgress?.(e);case"wf:step":return t.onStep?.(e);case"wf:approval_request":return t.onApproval?.(e);case"wf:usage":return t.onUsage?.(e);case"wf:done":return t.onDone?.(e);case"wf:error":return t.onError?.(e);default:return t.onEvent?.(n,e)}}async function*On(n){let e=n.getReader(),t=new TextDecoder,o="";try{for(;;){let{done:r,value:s}=await e.read();if(r)break;o+=t.decode(s,{stream:!0});let i=o.split(`
6
6
 
7
7
  `);o=i.pop()??"";for(let a of i){let l="message",u="";for(let d of a.split(`
8
- `))d.startsWith("event: ")?l=d.slice(7):d.startsWith("data: ")&&(u+=d.slice(6));if(u)try{yield{name:l,data:JSON.parse(u)}}catch{}}}}finally{e.releaseLock()}}function On(n,e,t){t&&(n.length>=500&&n.shift(),n.push(e))}function Hn(n){return n===401||n===403?"auth_failed":n===429?"rate_limited":n>=500?"provider_error":"invalid_request"}function Dn(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`trace-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}export{j as CommandApplier,Be as Fragment,Pe as UIRouter,An as aiStream,Nn as api,Rn as auth,Ae as createClientBrowser,_ as createComponentRegistry,Me as createSignal,Ye as createStore,me as diffStream,$ as h,In as i18n,Pn as injectCommands,Re as jsx,_t as jsxDEV,Bt as jsxs,G as renderToStream,Ft as toast,Sn as uiServe,Vn as ws};
8
+ `))d.startsWith("event: ")?l=d.slice(7):d.startsWith("data: ")&&(u+=d.slice(6));if(u)try{yield{name:l,data:JSON.parse(u)}}catch{}}}}finally{e.releaseLock()}}function Hn(n,e,t){t&&(n.length>=500&&n.shift(),n.push(e))}function Dn(n){return n===401||n===403?"auth_failed":n===429?"rate_limited":n>=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)}`}export{j as CommandApplier,_e as Fragment,Me as UIRouter,An as aiStream,Rn as api,In as auth,Ae as createClientBrowser,_ as createComponentRegistry,Le as createSignal,Xe as createStore,me as diffStream,$ as h,Vn as i18n,Mn as injectCommands,Ie as jsx,jt as jsxDEV,_t as jsxs,G as renderToStream,Kt as toast,Nn as uiServe,Pn as ws};
@@ -1 +1 @@
1
- function o(e){let n=e?.key;return n==null?null:typeof n=="string"?n:typeof n=="number"?String(n):(console.warn(`[vdom] key \u5FC5\u987B\u662F string|number\u2014\u2014\u5F53\u524D ${typeof n}\uFF08\u5FFD\u7565\u2014\u2014\u4F4D\u7F6E\u8EAB\u4EFD\uFF09`),null)}function r(e){let n={...e??{}};return delete n.key,n}function t(e,n,s){return{type:e,props:r(n),key:s??o(n)??null}}var l=t,p=t;var i=Symbol("vdom-fragment");export{i as Fragment,t as jsx,p as jsxDEV,l as jsxs};
1
+ function t(n){return n==null?null:typeof n=="string"?n:typeof n=="number"?String(n):(console.warn(`[vdom] key \u5FC5\u987B\u662F string|number\u2014\u2014\u5F53\u524D ${typeof n}\uFF08\u5FFD\u7565\u2014\u2014\u4F4D\u7F6E\u8EAB\u4EFD\uFF09`),null)}function r(n){return t(n?.key)}function i(n){let e={...n??{}};return delete e.key,e}function o(n,e,s){return{type:n,props:i(e),key:t(s)??r(e)}}var p=o,u=o;var l=Symbol("vdom-fragment");export{l as Fragment,o as jsx,u as jsxDEV,p as jsxs};
@@ -3,12 +3,26 @@
3
3
  *
4
4
  * 设计:WebSocket 构造经 opts 注入(jsdom 无 WS——测试 mock——
5
5
  * 零全局直接访问);onMessage 订阅(返回退订);unmount 关闭。
6
+ *
7
+ * 可靠性面(2026-08——A2 消息断线补拉的地基):
8
+ * - autoReconnect:断线自动重连(指数退避 1s/2s/4s...封顶 maxMs——
9
+ * onopen 重置计数)——**close() 手动关闭不重连**(主动语义)
10
+ * - onStatusChange:状态翻转通知(onopen/onclose 触发——订阅即回放当前
11
+ * 态——应用层感知「重连成功 → 补拉数据」)
6
12
  */
13
+ export interface WsReconnectOptions {
14
+ /** 重连基延迟(ms——指数退避起点——默认 1000) */
15
+ baseMs?: number;
16
+ /** 重连间隔上限(ms——默认 30000) */
17
+ maxMs?: number;
18
+ }
7
19
  export interface WsOptions {
8
20
  /** WebSocket 构造器(注入——测试 mock——默认全局 WebSocket) */
9
21
  WebSocketCtor?: new (url: string) => WsLike;
10
22
  /** 默认连接 URL(未传时 connect(url) 必需) */
11
23
  url?: string;
24
+ /** 断线自动重连(指数退避——默认关——显式开启不突改既有行为) */
25
+ autoReconnect?: boolean | WsReconnectOptions;
12
26
  }
13
27
  /** 最小 WS 形状(兼容浏览器 WebSocket 与测试 mock) */
14
28
  export interface WsLike {
@@ -30,7 +44,9 @@ export interface WsClient {
30
44
  send(data: unknown): void;
31
45
  /** 消息订阅(返回退订) */
32
46
  onMessage(cb: (data: unknown) => void): () => void;
33
- /** 关闭 */
47
+ /** 状态翻转订阅(订阅时回放当前态——onopen/onclose 触发——返回退订) */
48
+ onStatusChange(cb: (connected: boolean) => void): () => void;
49
+ /** 关闭(主动——不触发自动重连) */
34
50
  close(): void;
35
51
  }
36
52
  /** 创建 ws 客户端(每 serve 实例独立) */
@@ -1,2 +1,2 @@
1
- var Tt=Symbol("vdom-fragment");function D(t){return t.type===Tt}function V(t){let e=t.children??(t.props.children===void 0?[]:t.props.children),n=o=>Array.isArray(o)?o.flatMap(n):[o];return Array.isArray(e)?e.flatMap(n):[e]}function I(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)&&D(t)?V(t).reduce((e,n)=>e+I(n),0):1}function Pe(t){return t==null||typeof t=="boolean"}function Ae(t){return!(t==null||typeof t=="boolean"||typeof t=="string"||typeof t=="number"||Array.isArray(t)||typeof t=="object"&&typeof t.type=="string"||typeof t.type=="function"||typeof t.type=="symbol")}function ke(t){return t==null?"null/undefined":typeof t=="object"?`object\uFF08type: ${typeof t.type}\uFF09`:typeof t}function Ct(t,e,n,o){return[{op:"createAnchor",id:t,...o!==void 0?{detail:o}:{}},{op:"insert",id:t,parent:e,ref:n}]}function oe(t,e,n,o,r){for(let s of Ct(e,n,o,r))t(s)}function U(t){return t===""?"hole":typeof t=="string"||typeof t=="number"?"text":Pe(t)?"hole":Array.isArray(t)?"array":typeof t.type=="string"?"element":D(t)?"fragment":typeof t.type=="function"?"component":(Ae(t),"invalid")}function De(t){return typeof t=="string"||typeof t=="number"?String(t):null}function M(t){return U(t)==="hole"}function G(t){return U(t)==="text"}function H(t,e){return`${t}.k${e.replace(/%/g,"%25").replace(/\./g,"%2E")}`}function L(t){return t==null||typeof t=="boolean"||typeof t=="string"||typeof t=="number"||Array.isArray(t)?null:t.key}function re(t){return L(t)!==null}function ie(t){let e=!1,n=!1;for(let o of t)if(re(o)?e=!0:n=!0,e&&n)return"mixed";return e?"all-keyed":"all-unkeyed"}function q(t,e){let n=new Set;for(let o of t){let r=L(o);if(r!==null){if(n.has(r)){console.warn(`[vdom] ${e}\uFF1A\u91CD\u590D key "${r}"\uFF08\u5217\u8868\u8EAB\u4EFD\u6620\u5C04\u6B67\u4E49\u2014\u2014\u589E\u5220/\u91CD\u6392\u884C\u4E3A\u4E0D\u786E\u5B9A\uFF09\u2014\u2014\u8BF7\u4E3A\u6BCF\u9879\u58F0\u660E\u552F\u4E00 key\uFF08\u6570\u636E id \u2192 keyBy\uFF09`);return}n.add(r)}}}function Ue(t,e){if(t.length<2)return;let n=t.some(r=>typeof r?.type=="function"),o=t.some(r=>!re(r)&&typeof r?.type=="function");if(n&&o){let r=t.map(s=>{let i=s;if(i==null)return"null";if(typeof i=="boolean")return"bool";if(typeof i=="string"||typeof i=="number")return"text";if(Array.isArray(i))return"arr";if(typeof i.type=="function"){let a=i.type.name;return"comp"+(a?":"+a:"")}return"el"+(i.key?`.k{${String(i.key).slice(0,16)}}`:"")});console.warn(`[vdom] ${e}\uFF1A\u5217\u8868\u542B\u65E0 key \u7684\u7EC4\u4EF6\u9879\uFF08\u957F\u5EA6 ${t.length}\uFF09\u2014\u2014\u9879: [${r.join(", ")}]\u2014\u2014\u52A8\u6001\u589E\u5220/\u91CD\u6392\u65F6\u72B6\u6001\u4F1A\u6309\u4F4D\u7F6E\u7EE7\u627F\u2014\u2014\u8BF7\u4E3A\u7EC4\u4EF6\u9879\u58F0\u660E key\uFF08\u6570\u636E id \u2192 keyBy\uFF09`)}}function E(t,e){return`${t}.${e}`}function pe(t){let e={};for(let[n,o]of Object.entries(t))n==="children"||n==="key"||n==="ref"||typeof o!="function"&&(e[n]=o);return e}async function $e(t,e,n,o,r,s){r({op:"create",id:e,tag:t.type,attrs:pe(t.props)});for(let[d,p]of Object.entries(t.props))d==="children"||d==="key"||d==="ref"||typeof p=="function"&&r({op:"setProp",id:e,key:d,value:p});r({op:"insert",id:e,parent:n,ref:o});let i=t.props.ref;typeof i=="function"&&r({op:"ref",id:e,fn:i});let a=V(t);q(a,`\u5143\u7D20 children\uFF08${e}\uFF09`);let l=null,u=0;for(let d of a){await s(d,e,u,l);let p=I(d);l=E(e,u+p-1),u+=p}r({op:"close",id:e})}function Nt(t){let e=new Set,n=t,o=()=>{for(let r of[...e])r()};return{get state(){return n},subscribe(r){return e.add(r),()=>{e.delete(r)}},set(r){n={...n,...r},o()},update(r){r(n),o()},notify:o}}function Ke(t){let e=Nt(t),n=(()=>e.state);return n.set=o=>e.set(o),n.update=o=>e.update(o),n.subscribe=o=>e.subscribe(o),n.notify=()=>e.notify(),n.store=e,n}function Fe(t,e,n){if(typeof e=="function"){let r=e;return i=>{i?r(i):n?.()}}return{current:e}}function Be(t,e,n){let o=typeof e=="object"?e:void 0,r=typeof e=="boolean"?e:!1,s=o??n,i=t.nextHookIndex(),a=t.getHookState(i)??{open:r};t.setHookState(i,a);let l=s?.open!==void 0;return{get open(){return s?.open??a.open},setOpen(u){l?(s?.onOpenChange||console.warn(`[vdom] useOpen${o?.name?`(${o.name})`:""} \u53D7\u63A7\u7F3A onOpenChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),s?.onOpenChange?.(u)):(a.open=u,t.requestRender())},toggle(){this.setOpen(!this.open)}}}function qe(t,e,n){let o=n?e:(()=>!0),r=n??e,s=t.getBrowser()?.window;if(!s)return()=>{};let i=l=>{if(typeof o=="string"){if(l.key!==o)return}else if(!o(l))return;r(l)};s.addEventListener("keydown",i);let a=()=>s.removeEventListener("keydown",i);return t.onUnmount(a),a}function _e(t,e,n,o,r,s,i,a){let l=t.getBoundingClientRect();if(l.width===0&&l.height===0)return null;let u=e.innerWidth,d=e.innerHeight,p,f;switch(r){case"bottom":p=l.bottom+s,f=a?l.left+l.width/2-n/2:l.left;break;case"top":p=l.top-o-s,f=a?l.left+l.width/2-n/2:l.left;break;case"left":p=a?l.top+l.height/2-o/2:l.top,f=l.left-n-s;break;case"right":p=a?l.top+l.height/2-o/2:l.top,f=l.right+s;break}return f+n>u-i&&(f=u-n-i),f<i&&(f=i),p+o>d-i&&(p=d-o-i),p<i&&(p=i),{top:p,left:f}}function je(t,e){let n=e.getComputedStyle(t).animationName;if(n&&n!=="none")return!0;for(let o of t.children){let r=e.getComputedStyle(o).animationName;if(r&&r!=="none")return!0}return!1}function We(t,e){let n=t.getBrowser()?.window,o=0,r=0,s={get top(){return o},get left(){return r},refresh:()=>{}},i=()=>{let u=e.el();if(!u)return;let d=u.getBoundingClientRect();if(d.width===0&&d.height===0)return;let p=e.compute(d);o=p.top,r=p.left},a,l=()=>{a||n&&(a=n.requestAnimationFrame(()=>{a=void 0,(e.isOpen?.()??!0)&&i()}))};return n&&(n.addEventListener("scroll",l,!0),n.addEventListener("resize",l),t.onUnmount(()=>{a!==void 0&&n.cancelAnimationFrame(a),n.removeEventListener("scroll",l,!0),n.removeEventListener("resize",l)})),s.refresh=i,s}function ze(t){let e=t?.key;return e==null?null:typeof e=="string"?e:typeof e=="number"?String(e):(console.warn(`[vdom] key \u5FC5\u987B\u662F string|number\u2014\u2014\u5F53\u524D ${typeof e}\uFF08\u5FFD\u7565\u2014\u2014\u4F4D\u7F6E\u8EAB\u4EFD\uFF09`),null)}function Ge(t){let e={...t??{}};return delete e.key,e}function Te(t,e,...n){let o=Ge(e);return n.length===1?o.children=n[0]:n.length>1&&(o.children=n),{type:t,props:o,key:ze(e)}}function R(t){if(t==null)return"hole";let e=U(t);return e==="invalid"?"hole":e}var Y=async(t,e,n)=>{n.emit({op:"remove",id:n.oldId}),await n.emitNode(e,n.parent,n.index,n.ref)};var J=async(t,e,n)=>{n.emit({op:"remove",id:n.oldId}),await n.emitNode(e,n.parent,n.index,n.ref)};function j(t,e,n){return typeof t?.type=="function"?E(e,0):Array.isArray(t)?e:M(t)?E(e,0):n}function se(t,e,n){return typeof t?.type=="function"||Array.isArray(t)?e:n}function N(t,e,n,o,r){if(globalThis.__DBG8&&console.log("[dbg-rmt]",e,"parent=",n,"type=",typeof t=="object"&&t!==null&&!Array.isArray(t)?String(t.type):Array.isArray(t)?"array":String(t)),M(t)){o({op:"remove",id:e});return}if(G(t)){o({op:"remove",id:e});return}if(Array.isArray(t)){globalThis.__DBG4&&console.log(`[dbg-arr] \u6570\u7EC4 base=${e} parent=${n} \u9879\u6570=${t.length}`);let l=0;for(let u of t)N(u,E(e,l),e,o,r),l+=I(u);return}let s=t;if(D(s)){let l=Number(e.slice(n.length+1)),u=V(s),d=l;for(let p of u)N(p,E(n,d),n,o,r),d+=I(p);return}if(typeof s.type=="function"){let l=s.key!==null?H(n,s.key):e;globalThis.__DBG5&&console.log(`[dbg-comp] unmount ${l} base=${e} parent=${n}`),o({op:"unmount",compId:l});let u=r?.get(l)?.lastOutput;if(u!==void 0){let d=W(u),p=j(d,l,e),m=d!==null&&typeof d=="object"&&!Array.isArray(d)&&D(d)?e.slice(0,e.lastIndexOf(".")):se(d,l,l);N(d,p,m,o,r)}}let i=V(s),a=0;i.forEach(l=>{let u=E(e,a);l!==null&&typeof l!="string"&&typeof l!="number"&&typeof l!="boolean"&&!Array.isArray(l)?N(l,u,e,o,r):o({op:"remove",id:u}),a+=I(l)}),o({op:"remove",id:e})}var X=async(t,e,n)=>{N(t,n.oldId,n.parent,n.emit,n.registry),await n.emitNode(e,n.parent,n.index,n.ref)};var Q=async(t,e,n)=>{globalThis.__DBG8&&console.log("[dbg-tc] oldCompId=",n.oldCompId,"oldId=",n.oldId,"parent=",n.parent,"index=",n.index),n.oldCompId&&n.emit({op:"unmount",compId:n.oldCompId});let o=n.registry?.get(n.oldCompId??"")?.lastOutput;if(o!==void 0){let r=W(o);N(r,j(r,n.oldCompId??"",E(n.parent,n.index)),se(r,n.oldCompId??"",n.parent),n.emit,n.registry)}else n.emit({op:"remove",id:n.oldId});await n.emitNode(e,n.parent,n.index,n.ref)};var $=async(t,e,n)=>{let o=Array.isArray(t)?t:V(t),r=n.index;for(let s of o)N(s,E(n.parent,r),n.parent,n.emit,n.registry),r+=I(s);await n.emitNode(e,n.parent,n.index,n.ref)};var St={text:{text:null,hole:Y,element:Y,component:Y,fragment:Y,array:Y},hole:{text:J,hole:null,element:J,component:J,fragment:J,array:J},element:{text:X,hole:X,element:null,component:X,fragment:X,array:X},component:{text:Q,hole:Q,element:Q,component:null,fragment:Q,array:Q},fragment:{text:$,hole:$,element:$,component:$,fragment:null,array:$},array:{text:$,hole:$,element:$,component:$,fragment:$,array:null}};function K(t,e){return St[t]?.[e]??null}function Ye(t,e,n,o){let r=pe(t.props),s=pe(e.props);for(let[i,a]of Object.entries(s))r[i]!==a&&o({op:"setProp",id:n,key:i,value:a});for(let i of Object.keys(r))i in s||o({op:"setProp",id:n,key:i,value:void 0});for(let[i,a]of Object.entries(e.props))i==="children"||i==="key"||typeof a=="function"&&t.props[i]!==a&&o({op:"setProp",id:n,key:i,value:a,prev:t.props[i]});for(let i of Object.keys(t.props))i==="children"||i==="key"||typeof t.props[i]=="function"&&e.props[i]===void 0&&o({op:"setProp",id:n,key:i,value:void 0,prev:t.props[i]})}async function Ze(t,e,n,o,r,s,i){let a=V(t),l=V(e),u=Array.isArray(t.props.children)!==Array.isArray(e.props.children);await le(a,l,n,o,r,s,i,u)}async function le(t,e,n,o,r,s,i,a=!1){if(t=Ce(t),e=Ce(e),!a){let f=v=>!M(v)&&!G(v)&&!Array.isArray(v),m=t.filter(f),k=e.filter(f),w=(v,C)=>C>=v.length||M(v[C]),g=v=>typeof v?.type=="function"&&!re(v),c=v=>w(t,v)||g(t[v]),y=v=>w(e,v)||g(e[v]);(e.some((v,C)=>g(v)&&!c(C))||t.some((v,C)=>g(v)&&!y(C)))&&Ue(k,`children\uFF08\u65E0 key \u7EC4\u4EF6\u5B9E\u69FD\u7FFB\u8F6C ${m.length}\u2192${k.length}\uFF09`)}if(globalThis.__WF_DEBUG_MOVED__&&console.log("[debug-dci] id=",n,"oldKeys=",JSON.stringify(t.map(L)),"newKeys=",JSON.stringify(e.map(L)),"lk=",ie(t),ie(e)),ie(e)==="all-keyed"&&ie(t)==="all-keyed"){await Qe(t,e,n,o,r,s,i);return}if(Xe(e)||Xe(t)){await Qe(t,e,n,o,r,s,i);return}let l=null,u=Math.min(t.length,e.length);for(let f=0;f<u;f++){let m=t[f]??null,k=e[f]??null,w=E(n,f);M(k)?M(m)||(await Je(m,n,w,r,i),oe(r,w,n,l)):await Vt(m,k,n,f,l,w,o,r,s,i),l=w}for(let f=t.length;f<e.length;f++)await o(e[f],n,f,l),l=E(n,f);let d=t.reduce((f,m)=>f+I(m),0),p=e.reduce((f,m)=>f+I(m),0);if(d>p){let f=d-p;for(let m=t.length-1;m>=0&&f>0;m--){let k=I(t[m]);k<=f&&(await Je(t[m],n,E(n,m),r,i),f-=k)}}}async function Je(t,e,n,o,r){if(M(t)){o({op:"remove",id:n});return}N(t,n,e,o,r)}function Ce(t){let e=[];for(let n of t)n!==null&&typeof n=="object"&&!Array.isArray(n)&&D(n)?e.push(...Ce(V(n))):e.push(n);return e}async function Vt(t,e,n,o,r,s,i,a,l,u){if(globalThis.__DBG7&&console.log("[dbg-slot]",s,"old=",t===null?"null":String(typeof t=="object"?t.type:t),"new=",e===null?"null":String(typeof e=="object"?e.type:e)),U(t)==="text"&&U(e)==="text"){String(t)!==String(e)&&a({op:"setText",id:s,value:String(e)});return}if(U(t)==="hole"){a({op:"remove",id:s}),await i(e,n,o,r);return}if(U(t)===U(e)&&typeof t!="string"&&typeof t!="number"){await z(t,e,n,o,r,i,a,l,u);return}let d=K(R(t),R(e));if(!d)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${R(t)} \u2192 ${R(e)}\uFF08diffSlot\u2014\u2014\u5FC5\u987B\u663E\u5F0F\u8FC1\u79FB\u6216\u663E\u5F0F Reject\uFF09`);await d(t,e,{emit:a,emitNode:i,oldId:s,newId:s,parent:n,index:o,ref:r,oldCompId:typeof t?.type=="function"?s:void 0,registry:u})}function Xe(t){return t.some(re)}async function Qe(t,e,n,o,r,s,i){let a=new Map;t.forEach((c,y)=>{let x=L(c);x!==null&&!a.has(x)&&a.set(x,y)}),q(e,`keyed \u5217\u8868\uFF08${n}\uFF09`),q(t,`keyed \u5217\u8868\uFF08${n}\uFF09`);let l=new Set(e.map(c=>L(c)).filter(c=>c!==null)),u=new Map;for(let c=0;c<t.length;c++){let y=t[c];if(M(y)){r({op:"remove",id:E(n,c)});continue}if(G(y)){r({op:"remove",id:E(n,c)});continue}if(Array.isArray(y))continue;let x=L(y);if(x!==null){let v=(u.get(x)??0)+1;if(u.set(x,v),v===1)continue;N(y,E(n,c),n,r,i);continue}N(y,E(n,c),n,r,i)}for(let[c,y]of a)l.has(c)||N(t[y],E(n,y),n,r,i);let d=t.map(c=>L(c)).filter(c=>c!==null&&l.has(c)),p=e.map(c=>L(c)).filter(c=>c!==null&&a.has(c)),f=!0;{let c=0;for(let y of p){let x=d.indexOf(y,c);if(x===-1){f=!1;break}c=x+1}}if(!f){for(let[y,x]of a)l.has(y)||r({op:"unmount",compId:H(n,y)});t.forEach((y,x)=>{if(!M(y)){if(G(y)){r({op:"remove",id:E(n,x)});return}if(L(y)!==null){r({op:"remove",id:E(n,x)});return}N(y,E(n,x),n,r,i)}});let c=null;for(let y=0;y<e.length;y++){let x=e[y],v=L(x);if(v!==null&&typeof x.type=="function"){let C=H(n,v);await _(x,n,y,c,C,s,i,o,r)&&r({op:"mount",compId:C})}else await o(x,n,y,c);c=E(n,y)}return}let m=[];e.forEach((c,y)=>{let x=L(c);if(x===null)return;let v=a.get(x);v!==void 0&&v!==y&&m.push({oldIdx:v,newIdx:y})});let k=m.every(c=>c.newIdx<c.oldIdx);m.sort((c,y)=>k?c.newIdx-y.newIdx:y.newIdx-c.newIdx),globalThis.__WF_DEBUG_MOVED__&&console.log("[debug-moved] subseq=1 moved=",JSON.stringify(m),"oldIdxByKey=",JSON.stringify([...a.entries()]),"newKeys=",JSON.stringify([...l]),"parent=",n);for(let c of m)r({op:"move",id:E(n,c.oldIdx),parent:n,ref:null,newId:E(n,c.newIdx),noMove:!0});let w=!0,g=null;for(let c=0;c<e.length;c++){let y=e[c],x=L(y),v=E(n,c);if(x!==null){let C=a.get(x);C===void 0?await ae(y,n,c,g,x,o,r,s,i):typeof y.type=="function"?await ae(y,n,c,g,x,o,r,s,i):await z(t[C],y,n,c,g,o,r,s,i)}else await o(y,n,c,g);g=v}}async function ae(t,e,n,o,r,s,i,a,l){let u=t;if(typeof u.type=="function"){let d=H(e,r),f=l.get(d)?.lastOutput;await _(u,e,n,o,d,a,l,async(k,w,g,c)=>{await ce(f,k,w,g,c,s,i,a,l,z,d,E(e,n),(y,x,v,C,F)=>ae(y,x,v,C,F,s,i,a,l))},i)&&i({op:"mount",compId:d});return}await s(t,e,n,o)}async function ce(t,e,n,o,r,s,i,a,l,u,d,p,f){let m=()=>{if(t?.kind==="vnode"){let g=t.v;return g!==null&&typeof g=="object"&&typeof g.type=="function"?E(d,0):p}return E(d,0)},k=E(n,o),w=M(e);if(t===void 0){await s(e,n,o,r);return}switch(t.kind){case"hole":{if(!w){let g=K("hole",R(e));if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 hole \u2192 ${R(e)}\uFF08\u7EC4\u4EF6\u8F93\u51FA\u5C55\u5F00\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);await g(null,e,{emit:i,emitNode:s,oldId:m(),newId:k,parent:n,index:o,ref:r,registry:l})}return}case"vnode":{if(w){let g=K(R(t.v),"hole");if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${R(t.v)} \u2192 hole\uFF08\u7EC4\u4EF6\u8F93\u51FA\u6536\u7F29\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);let c=t.v,y=c!==null&&typeof c=="object"&&typeof c.type=="function"?c.key!==null?H(d,c.key):E(d,0):void 0;await g(t.v,e,{emit:i,emitNode:s,oldId:m(),newId:k,parent:n,index:o,ref:r,registry:l,oldCompId:y})}else if(Array.isArray(e)){let g=K(R(t.v),"array");if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${R(t.v)} \u2192 array\uFF08\u5355\u8282\u70B9\u2192\u591A\u6839\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);await g(t.v,e,{emit:i,emitNode:s,oldId:m(),newId:k,parent:n,index:o,ref:r,registry:l})}else{let g=e;f&&g!==null&&typeof g=="object"&&typeof g.type=="function"&&g.key!==null?await f(e,n,o,r,g.key):await u(t.v,g,n,o,r,s,i,a,l)}return}case"array":{if(w){let g=K("array","hole");if(!g)throw new Error("[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 array \u2192 hole\uFF08\u591A\u6839\u6536\u7F29\u2014\u2014P2 \u663E\u5F0F Reject\uFF09");await g(t.items,e,{emit:i,emitNode:s,oldId:m(),newId:k,parent:n,index:o,ref:r,registry:l})}else if(Array.isArray(e))await le(t.items,e,n,s,i,a,l);else{let g=K("array",R(e));if(!g)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 array \u2192 ${R(e)}\uFF08\u591A\u6839\u2192\u5355\u8282\u70B9\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);await g(t.items,e,{emit:i,emitNode:s,oldId:m(),newId:k,parent:n,index:o,ref:r,registry:l})}return}}}async function z(t,e,n,o,r,s,i,a,l){let u=E(n,o);if(typeof e.type=="function"){let p=e.key!==null?H(n,e.key):u,f=typeof t.type=="function"&&t.key!==null?H(n,t.key):u,m=l.get(p);if(p!==f||m&&m.type!==e.type){let g=l.get(f);if(g){f!==p&&i({op:"unmount",compId:f});let c=g.lastOutput;if(c!==void 0){let y=W(c);N(y,j(y,f,E(n,o)),se(y,f,n),i,l)}Z(f,l)}m=void 0,await _(e,n,o,r,p,a,l,s,i),i({op:"mount",compId:p});return}let k=m?.lastOutput;await _(e,n,o,r,p,a,l,async(g,c,y,x)=>{await ce(k,g,c,y,x,s,i,a,l,z,p,E(n,o),(v,C,F,S,h)=>ae(v,C,F,S,h,s,i,a,l))})&&i({op:"mount",compId:p});return}if(typeof e.type=="string"&&typeof t.type=="string"){t.type===e.type?(Ye(t,e,u,i),await Ze(t,e,u,s,i,a,l)):(N(t,u,n,i,l),await s(e,n,o,r));return}if(D(t)&&D(e)){await le(V(t),V(e),n,s,i,a,l);return}throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1AdiffSame \u672A\u5B9A\u4E49\u540C\u6001\u5BF9\u7167 ${String(t.type)} \u2194 ${String(e.type)}\uFF08P2 \u663E\u5F0F Reject\uFF09`)}function me(t,e,n,o){return new ReadableStream({async start(r){let s=d=>r.enqueue(d),i=Ne(s,n,o),a=R(t),l=R(e),u=K(a,l);u?await u(t,e,{emit:s,emitNode:i,oldId:"root.0",newId:"root.0",parent:"root",index:0,ref:null,registry:o,oldCompId:typeof t.type=="function"?t.key!==null?H("root",t.key):"root.0":void 0}):await z(t,e,"root",0,null,i,s,n,o),s({op:"done"}),r.close()}})}var ge=class{table=new Map;rootTypes=new Set;doc;dispatchBound;container;phase="active";constructor(e,n){this.doc=e,this.container=n,this.dispatchBound=this.dispatch.bind(this)}set(e,n,o){if(this.phase==="disposed"){console.error(`[vdom] \u4E8B\u4EF6\u8868\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Adisposed \u540E set(${e}, ${n}) \u88AB\u5FFD\u7565`);return}if(typeof o!="function"){console.warn(`[vdom] \u4E8B\u4EF6 ${n} \u975E\u51FD\u6570\u503C\u88AB\u8DF3\u8FC7\uFF08node ${e}\uFF09\u2014\u2014\u671F\u671B\u51FD\u6570\uFF0C\u5B9E\u9645 ${typeof o}`);return}let r=this.table.get(e);r||(r=new Map,this.table.set(e,r)),r.set(n,o),this.ensureRoot(n)}get(e,n){return this.table.get(e)?.get(n)}removeEvent(e,n){let o=this.table.get(e);o&&(o.delete(n),o.size===0&&this.table.delete(e))}remove(e){for(let n of[...this.table.keys()])(n===e||n.startsWith(e+"."))&&this.table.delete(n)}ensureRoot(e){this.rootTypes.has(e)||(this.doc.addEventListener(e,this.dispatchBound,{capture:!0}),this.rootTypes.add(e))}dispatch(e){if(this.container){let o=e.target;if(o&&!this.container.contains(o))return}if(e.type==="contextmenu"&&window.__dbgEvt){let o=e.target,r=[...this.table.entries()].map(([s,i])=>s+":"+[...i.keys()].join("+")).join(" | ");console.error("[dbg-evt-dispatch]","target:",o?.getAttribute("data-wf-id"),"ALL:",r.slice(0,400))}let n=e.target;for(n&&n.nodeType===3&&(n=n.parentElement);n;){if(!n.hasAttribute?.("data-wf-id")){let r=n.closest?.("[data-wf-id]");if(r&&r!==n){n=r;continue}}let o=n.getAttribute?.("data-wf-id");if(o){let r=this.table.get(o)?.get(e.type);if(r){try{Object.defineProperty(e,"currentTarget",{value:n,configurable:!0})}catch{}try{r(e)}catch(s){console.error("[vdom] \u4E8B\u4EF6 handler:",s)}if(e.cancelBubble)return}}n=n.parentElement}}dispose(){if(this.phase!=="disposed"){this.phase="disposed";for(let e of this.rootTypes)this.doc.removeEventListener(e,this.dispatchBound,{capture:!0});this.rootTypes.clear(),this.table.clear()}}},ee=/^on[A-Z]/;function de(t){return ee.test(t)?t.slice(2).toLowerCase():null}var ye=class{refs=new Map;phase="active";set(e,n,o){if(this.phase==="disposed"){console.error(`[vdom] ref \u8868\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Adisposed \u540E set(${e}) \u88AB\u5FFD\u7565`);return}if(o&&o!==n&&typeof o=="function")try{o(null)}catch(r){console.error("[vdom] ref prev:",r)}this.refs.set(e,n)}mount(e,n){let o=this.refs.get(e);if(typeof o=="function")try{o(n)}catch(r){console.error("[vdom] ref mount:",r)}}unmount(e){for(let[n,o]of[...this.refs])if(n===e||n.startsWith(e+".")){if(typeof o=="function")try{o(null)}catch(r){console.error("[vdom] ref unmount:",r)}this.refs.delete(n)}}remap(e,n){for(let[o,r]of[...this.refs])(o===e||o.startsWith(e+"."))&&(this.refs.delete(o),this.refs.set(n+o.slice(e.length),r))}dispose(){this.phase!=="disposed"&&(this.phase="disposed",this.refs.clear())}};var he=class{queue=null;failed=!1;phase="inactive";begin(e){let n=[],o=r=>{n.push(r);for(let s of r.childNodes)o(s)};for(let r of e.childNodes)o(r);this.queue=n,this.failed=!1,this.phase="consuming"}end(){this.phase==="consuming"&&(this.queue&&this.queue.length>0&&(this.failed=!0),this.queue=null,this.phase=this.failed?"failed":"inactive")}reset(){this.queue=null,this.failed=!1,this.phase="inactive"}next(e,n,o){if(this.phase!=="consuming")return console.error(`[vdom] absorb \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Anext \u5728 ${this.phase} \u9636\u6BB5\u8C03\u7528\uFF08\u5E94 consuming\uFF09`),null;let r=this.queue;if(!r)return null;for(;r.length>0;){let s=r.shift();if(e==="element"?s.nodeType===1&&s.tagName.toLowerCase()===n:e==="text"?s.nodeType===3:s.nodeType===8){if(e==="text"&&o!==void 0){let a=s,l=a.textContent??"";if(l!==o&&l.startsWith(o)){let u=a.splitText(o.length);r.unshift(u)}}return s}}return this.failed=!0,this.phase="failed",null}};var Rt=new Set(["draggable","contenteditable","spellcheck"]);function Se(t,e,n){if(e==="innerHTML"||e==="textContent"||e==="value"){t[e]=n;return}if(n==null){t.removeAttribute(e);return}if(Rt.has(e)){t.setAttribute(e,n?"true":"false");return}if(n===!1){t.removeAttribute(e);return}if(e==="class"||e==="className"){t.setAttribute("class",String(n));return}if(typeof n=="boolean"){t.setAttribute(e,"");return}t.setAttribute(e,String(n))}var It=new Set(["zIndex","opacity","lineHeight","zoom","fontWeight","order","flex","flexGrow","flexShrink","flexBasis","animationIterationCount","orphans","widows","columns","columnCount","columnGap","counterIncrement","counterReset","aspectRatio","scale","rotate"]);function Mt(t,e,n){if(n==null||n===!1){e.startsWith("--")&&t.style.removeProperty(e),t.style[e]="";return}if(e.startsWith("--")){t.style.setProperty(e,String(n));return}typeof n=="number"&&!It.has(e)&&(n=`${n}px`),t.style[e]=String(n)}function Ve(t,e){if(typeof e=="string"){t.setAttribute("style",e);return}if(e&&typeof e=="object"){t.style.cssText="";for(let[n,o]of Object.entries(e))Mt(t,n,o)}}var Ht=new Set(["value","checked","selected","disabled","hidden","autofocus","defaultValue","defaultChecked","innerHTML","textContent","download","indeterminate","multiple","readOnly","required","tabIndex","spellcheck","draggable","scrollTop","scrollLeft","volume","muted","paused","playbackRate","open"]);function et(t){return Ht.has(t)}function tt(t,e,n){t[e]=n}function ue(t,e){for(let[n,o]of Object.entries(e))n==="style"?Ve(t,o):Se(t,n,o)}function nt(t,e,n,o,r,s){if(o!=="ref")if(typeof r=="function"||r===void 0&&typeof s=="function"){if(ee.test(o)){let i=de(o);i&&t.set(e,i,r)}return}else if(ee.test(o)){let i=de(o);i&&t.set(e,i,r)}else o==="style"?Ve(n,r):et(o)?tt(n,o,r):Se(n,o,r)}var Lt="http://www.w3.org/2000/svg",Ot=new Set(["svg","path","circle","line","rect","text","g","defs","marker","polyline","polygon","ellipse","use","symbol","tspan","textPath","clipPath","mask","pattern","linearGradient","radialGradient","stop"]);function ot(t,e){return Ot.has(e)?t.createElementNS(Lt,e):t.createElement(e)}function Pt(t,e){t.touched.add(e.id);let n=t.nodes.get(e.id);if(n&&n.nodeType===1&&n.tagName.toLowerCase()===e.tag)ue(n,e.attrs);else if(t.absorb.queue&&!n){let r=t.absorb.next("element",e.tag);if(r)ue(r,e.attrs),t.nodes.set(e.id,r);else{let s=ot(t.doc,e.tag);ue(s,e.attrs),t.nodes.set(e.id,s)}}else{let r=ot(t.doc,e.tag);ue(r,e.attrs),n&&(t.clearNodeRefs(e.id),t.eventRegistry.remove(e.id),n.replaceWith(r)),t.nodes.set(e.id,r)}let o=t.nodes.get(e.id);o&&o.nodeType===1&&o.setAttribute("data-wf-id",e.id)}function At(t,e){t.touched.add(e.id);let n=t.nodes.get(e.id);if(n&&n.nodeType===3)n.textContent!==e.value&&(n.textContent=e.value);else if(t.absorb.queue&&!n){let o=t.absorb.next("text",void 0,e.value);if(o)o.textContent!==e.value&&(o.textContent=e.value),t.nodes.set(e.id,o);else{let r=t.doc.createTextNode(e.value);t.nodes.set(e.id,r)}}else{let o=t.doc.createTextNode(e.value);n&&n.replaceWith(o),t.nodes.set(e.id,o)}}function Dt(t,e){t.touched.add(e.id);let n=t.nodes.get(e.id);if(n&&n.nodeType===8){let o=e.detail?`wf-hole: ${e.detail}`:"wf-hole";n.textContent!==o&&(n.textContent=o)}else if(t.absorb.queue&&!n){let o=t.absorb.next("comment");if(o)t.nodes.set(e.id,o);else{let r=t.doc.createComment(e.detail?`wf-hole: ${e.detail}`:"wf-hole");t.nodes.set(e.id,r)}}else{let o=t.doc.createComment(e.detail?`wf-hole: ${e.detail}`:"wf-hole");n&&n.replaceWith(o),t.nodes.set(e.id,o)}}function Ut(t,e){let n=t.nodes.get(e.id);if(!n||n.isConnected)return;let o=t.parentOf(e);if(o){if(o.nodeType===3){let r=o.parentElement;if(!r)return;let s=o.nextSibling&&o.nextSibling.parentNode===r?o.nextSibling:null;r.insertBefore(n,s),n.nodeType===1&&t.refRegistry.mount(e.id,n);return}if(o.nodeType===8){console.error(`[vdom] id \u7A7A\u95F4\u8FDD\u4F8B\uFF1Ainsert ${e.id} \u7684 parent \u662F\u6CE8\u91CA\u951A\uFF08${e.parent}\uFF09\u2014\u2014\u63D2\u5230\u7236\u5BB9\u5668`);let r=o.parentElement;r&&r.appendChild(n),n.nodeType===1&&t.refRegistry.mount(e.id,n);return}if(e.ref){let r=t.nodes.get(e.ref)??null;r&&r.parentNode===o?o.insertBefore(n,r.nextSibling):r?o.appendChild(n):o.insertBefore(n,o.firstChild)}else o.insertBefore(n,o.firstChild);n.nodeType===1&&t.refRegistry.mount(e.id,n)}}function $t(t,e){let n=t.nodes.get(e.id);if(n){if(!e.noMove){let o=t.parentOf(e);if(!o)return;let r=e.ref?t.nodes.get(e.ref)??null:null;r?o.insertBefore(n,r.nextSibling):e.first?o.insertBefore(n,o.firstChild):o.appendChild(n)}t.remapSubtree(e.id,e.newId)}}function Kt(t,e){t.clearNodeRefs(e.id),t.eventRegistry.remove(e.id),t.nodes.get(e.id)?.remove();let n=e.id+".";for(let o of[...t.nodes.keys()])o.startsWith(n)&&(t.clearNodeRefs(o),t.eventRegistry.remove(o),t.nodes.delete(o));t.nodes.delete(e.id)}function Ft(t,e){let n=t.nodes.get(e.id);n&&n.nodeType===3&&(n.textContent=e.value)}function Bt(t,e){let n=t.nodes.get(e.id);if(!n||n.nodeType!==1)return;let o=n;if(e.key==="ref"){let r=t.refRegistry.refs.get(e.id);if(e.value===void 0){t.refRegistry.set(e.id,void 0,r),t.refRegistry.refs.delete(e.id);return}t.refRegistry.set(e.id,e.value,r),o.isConnected&&t.refRegistry.mount(e.id,o);return}if(ee.test(e.key)){let r=de(e.key);r&&(e.value===void 0?t.eventRegistry.removeEvent(e.id,r):t.eventRegistry.set(e.id,r,e.value));return}nt(t.eventRegistry,e.id,o,e.key,e.value,e.prev)}function qt(t,e){let n=t.nodes.get(e.id);n&&n.nodeType===1&&typeof e.fn=="function"&&(t.refRegistry.set(e.id,e.fn),t.refRegistry.mount(e.id,n))}function _t(t,e){t.clearNodeRefs(e.id)}function jt(t,e){let n=t.registry?.get(e.compId);n&&(n.phase="mounted")}function Wt(t,e){t.registry&&Z(e.compId,t.registry)}function zt(t,e){if(e.full&&t.absorb.end(),e.full&&t.touched.size>0)for(let[n,o]of[...t.nodes])t.touched.has(n)||(t.clearNodeRefs(n),t.eventRegistry.remove(n),o.remove(),t.nodes.delete(n));t.touched.clear()}function rt(t,e){switch(e.op){case"create":Pt(t,e);break;case"createText":At(t,e);break;case"createAnchor":Dt(t,e);break;case"insert":Ut(t,e);break;case"move":$t(t,e);break;case"remove":Kt(t,e);break;case"setText":Ft(t,e);break;case"setProp":Bt(t,e);break;case"ref":qt(t,e);break;case"unref":_t(t,e);break;case"mount":jt(t,e);break;case"unmount":Wt(t,e);break;case"done":zt(t,e);break;case"close":break}}var te=class{nodes=new Map;touched=new Set;eventRegistry;refRegistry=new ye;absorb=new he;container;doc;registry;devVerify=null;constructor(e,n,o){this.container=e,this.doc=n,this.registry=o??null,this.eventRegistry=new ge(n,e)}dispose(){if(this.eventRegistry.dispose(),this.refRegistry.dispose(),this.registry)for(let e of[...this.registry.keys()].reverse()){let n=this.registry.get(e);if(n){for(let o of[...n.onUnmounts].reverse())try{o()}catch{}this.registry.delete(e)}}}clearNodeRefs(e){this.refRegistry.unmount(e)}remapSubtree(e,n){let o=(r,s)=>{let i=r.get(s);i!==void 0&&(r.delete(s),r.set(n+s.slice(e.length),i))};for(let r of[...this.nodes.keys()])if(r===e||r.startsWith(e+".")){o(this.nodes,r);let s=this.nodes.get(n+r.slice(e.length));s&&s.nodeType===1&&s.setAttribute("data-wf-id",n+r.slice(e.length))}this.refRegistry.remap(e,n);for(let r of[...this.eventRegistry.table.keys()])if(r===e||r.startsWith(e+".")){let s=this.eventRegistry.table.get(r);this.eventRegistry.table.delete(r),this.eventRegistry.table.set(n+r.slice(e.length),s)}if(this.registry){for(let r of[...this.registry.keys()])if(r===e||r.startsWith(e+".")){let s=this.registry.get(r);this.registry.delete(r),this.registry.set(n+r.slice(e.length),s)}}}parentOf(e){if(e.parent==="root")return this.container;let n=this.nodes.get(e.parent);if(n)return n;let o=e.parent.split(".");for(let r=o.length-1;r>0;r--){let s=o.slice(0,r).join(".");if(s==="root")return this.container;let i=this.nodes.get(s);if(i)return i}return null}apply(e){rt(this,e),this.devVerify&&this.devVerify(e,this)}};var ve="__wf_portal";function Re(t){return`${ve}-${t}`}function Gt(t){return typeof t=="function"?t():t}function it(t){return t?typeof t=="function"?t():t:null}function st(t,e){let n={tree:null,applier:null,container:null,chain:Promise.resolve(),version:0,open:!1,phase:"closed",disposed:!1,panel:null,pos:{top:0,left:0}},o=t.getBrowser()?.window,r=t.getBrowser()?.document,s=()=>{if(!r)return null;if(n.container)return n.container;let h=r.getElementById(ve);h||(h=r.createElement("div"),h.id=ve,r.body.appendChild(h));let b=e.key??"popup",T=r.getElementById(Re(b));return T?n.container=T:(n.container=r.createElement("div"),n.container.id=Re(b),h.appendChild(n.container)),n.container},i=0,a=()=>{if(n.disposed||!n.open)return;let h=it(e.anchor);if(!h||!n.panel){i++<10&&queueMicrotask(a);return}if(!o)return;let b=n.panel,T=b.offsetWidth||b.getBoundingClientRect().width,O=b.offsetHeight||b.getBoundingClientRect().height;if((T===0||O===0)&&i++<10){typeof o.requestAnimationFrame=="function"?o.requestAnimationFrame(a):queueMicrotask(a);return}let P=typeof e.placement=="function"?e.placement():e.placement??"bottom";if(e.position){let A=e.position();if(A&&typeof A.x=="number"&&typeof A.y=="number"){if(n.pos={top:A.y,left:A.x,width:A.width},n.applier){let fe=u(n.tree);fe&&d(fe)}return}}let B=_e(h,o,T,O,P,e.gap??8,e.margin??8,e.center??!0);if(!B){i++<10&&queueMicrotask(a);return}if(i=0,n.pos=B,n.applier){let A=u(n.tree);A&&d(A)}},l=h=>{if(n.panel=h,h&&n.open&&e.positioning!=="none"&&(o&&typeof o.requestAnimationFrame=="function"?o.requestAnimationFrame(a):queueMicrotask(a)),h&&e.presence){let b=T=>{n.phase==="exit"&&f()};h.addEventListener("animationend",b),t.onUnmount(()=>h.removeEventListener("animationend",b))}},u=h=>{if(!h)return null;let b=h;e.mask&&(b=Te("div",{class:"wf-popup-mask",style:{position:"fixed",inset:"0",background:"var(--wf-overlay, rgba(0,0,0,0.5))",display:"flex",alignItems:"center",justifyContent:"center",zIndex:"var(--wf-z-modal, 1000)"},onClick:A=>{e.maskClosable!==!1&&A.target===A.currentTarget&&m()}},e.maskCentered?{...b,props:{...b.props??{}}}:Te("div",{class:"wf-popup-mask-inner"},b)));let T=b.props??{},O=e.positioning==="none"||String(T.class??"").includes("mask")?T.class??"":["wf-popup",T.class].filter(Boolean).join(" "),P=e.positioning==="none"?{...T.style??{},position:"fixed"}:{...T.style??{},position:"fixed",top:`${n.pos.top}px`,left:`${n.pos.left}px`,...n.pos.width!==void 0?{width:`${n.pos.width}px`}:{}};return{...b,props:{...T,class:O,style:P,ref:l}}},d=h=>{let b=++n.version,T=n.tree;n.tree=h,n.chain=n.chain.then(async()=>{if(n.disposed||b!==n.version)return;let O=n.applier;if(!O)return;let P=O.registry;if(!P)return;let B=t.getSharedContext()??{},fe=(T?me(T,h,B,P):be(h,B,P)).getReader();for(;;){let{value:Et,done:kt}=await fe.read();if(kt)break;if(n.disposed||b!==n.version)return;O.apply(Et)}}).catch(O=>{console.error("[popup] render error:",O)})},p=()=>{n.disposed||(n.disposed=!0,n.applier&&(n.applier.dispose(),n.applier=null),n.tree=null,n.container&&(n.container.remove(),n.container=null))},f=()=>{n.disposed||(n.open=!1,n.phase="closed",c(),p(),e.onClose?.())},m=()=>{!n.open||n.disposed||(e.presence?(n.phase="exit",n.panel&&o&&!je(n.panel,o)&&f(),n.panel||f()):f())},k={value:""},w={value:null},g={value:!1},c=()=>{g.value&&(r?.body&&(r.body.style.overflow=k.value),k.value="",w.value&&(w.value.focus?.(),w.value=null),g.value=!1)},y=()=>{g.value=!0,e.lockScroll&&r?.body&&(k.value=r.body.style.overflow,r.body.style.overflow="hidden"),e.trapFocus&&o&&(w.value=o.document.activeElement,t.scheduleAfterRender(()=>{let h=n.panel;h&&(h.querySelector?.("input, button, [tabindex], select, textarea")??h).focus?.()}))},x=null;e.trapFocus&&o&&(x=h=>{if(h.key!=="Tab"||!n.open||!n.panel)return;let b=Array.from(n.panel.querySelectorAll?.("input, button, [tabindex], select, textarea")??[]).filter(B=>!B.disabled&&B.offsetParent!==null);if(b.length===0)return;let T=b[0],O=b[b.length-1],P=o?.document.activeElement;h.shiftKey&&(P===T||P===n.panel||!n.panel.contains(P))?(h.preventDefault(),O.focus()):!h.shiftKey&&(P===O||!n.panel.contains(P))&&(h.preventDefault(),T.focus())},o.addEventListener("keydown",x));let v=h=>{if(!n.open||(e.closeOnOutside??!0)===!1)return;let b=h.target,T=it(e.anchor);b&&T?.contains(b)||b&&n.panel?.contains(b)||m()},C=h=>{n.open&&(e.closeOnEscape??!0)&&h.key==="Escape"&&m()};o&&(o.addEventListener("mousedown",v),o.addEventListener("keydown",C)),t.onUnmount(()=>{o&&(o.removeEventListener("mousedown",v),o.removeEventListener("keydown",C),x&&o.removeEventListener("keydown",x)),f()});let F=()=>{if(n.open||n.disposed)return;n.open=!0,n.phase="open";let h=s();if(!h)return;(e.trapFocus||e.lockScroll)&&y();let b=ne();n.applier=new te(h,r,b);let T=Gt(e.content);T!=null?d(u(T)):f()},S={close:m,update(h){if(!(n.disposed||!n.open)){if(h==null){m();return}if(e.position){let b=e.position();b&&typeof b.x=="number"&&typeof b.y=="number"&&(n.pos={top:b.y,left:b.x,width:b.width})}d(u(h))}},refresh(){if(n.disposed||!n.open||!n.tree)return;if(e.position){let b=e.position();b&&typeof b.x=="number"&&typeof b.y=="number"&&(n.pos={top:b.y,left:b.x,width:b.width})}let h=u(n.tree);h&&d(h)},get open(){return n.open}};return F(),S}function at(t,e,n){let o=t.nextHookIndex(),r=t.getHookState(o)??{value:n};t.setHookState(o,r);let s=e.value!==void 0;return{get value(){return e.value??r.value},controlled:e,setValue(i){s?(e.onChange||console.warn("[vdom] useControlled \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548"),e.onChange?.(i)):(r.value=i,t.requestRender())}}}function Yt(t,e,n){if(typeof t=="string")return t==="win"||t==="window"?e:n?n.querySelector(t)??e:e;if(t&&typeof t=="object"&&!("nodeType"in t)){let o=t;if(typeof o.getScroller=="function"){let r=o.getScroller();return r||e}return o.root?typeof o.root=="string"?n?n.querySelector(o.root)??e:e:o.root:e}return e}function lt(t,e){let n=t.nextHookIndex(),o=t.getHookState(n)??{y:0,x:0,raf:null,handler:null,retries:0};t.setHookState(n,o);let r=t.getBrowser()?.window,s=t.getBrowser()?.document??null;if(!r)return{y:0,x:0,refresh:()=>{}};let i=()=>{if(typeof e=="function")return e();if(e&&typeof e=="object"&&!("nodeType"in e)){let u=e;return typeof u.getScroller=="function"?u.getScroller()??null:u.root?typeof u.root=="string"?s?s.querySelector(u.root)??r:r:u.root:r}return Yt(e,r,s)},a=u=>{u===r?(o.y=r.scrollY||0,o.x=r.scrollX||0):(o.y=u.scrollTop,o.x=u.scrollLeft)},l=()=>{if(o.handler)return;let u=i();if(!u){o.retries++<10&&t.scheduleAfterRender(l);return}let d=()=>{o.raf||(o.raf=r.requestAnimationFrame(()=>{o.raf=null,a(u),t.requestRender()}))};u.addEventListener("scroll",d,{passive:!0}),o.handler=d,t.onUnmount(()=>{o.raf&&r.cancelAnimationFrame(o.raf),u.removeEventListener("scroll",d),o.handler=null})};return l(),{get y(){return o.y},get x(){return o.x},refresh:()=>{let u=i();u&&a(u)}}}function dt(t,e){let n=t.nextHookIndex(),o=t.getHookState(n)??{isIn:!1,io:null,retries:0,ready:!1};t.setHookState(n,o);let s=t.getBrowser()?.window?.IntersectionObserver,i=e&&typeof e=="object"&&!("nodeType"in e)?e:void 0,a=i?.target??(typeof e=="function"||e&&"nodeType"in e?e:void 0),l=typeof i?.rootMargin=="function"?i.rootMargin():i?.rootMargin,u=typeof i?.threshold=="function"?i.threshold():i?.threshold,d=typeof i?.root=="function"?i.root():i?.root??null,p=f=>{if(!s||!f||o.io)return;let m=new s(k=>{let w=k[0];w&&w.isIntersecting!==o.isIn&&(o.isIn=w.isIntersecting,i?.onChange?.(w,w.isIntersecting),t.requestRender())},{root:d??void 0,rootMargin:l,threshold:u});m.observe(f),o.io=m,o.ready=!0,t.onUnmount(()=>o.io?.disconnect())};if(s&&!o.io){let f=typeof a=="function"?a():a??null;f?p(f):a!==void 0&&o.retries++<10&&t.scheduleAfterRender(()=>p(typeof a=="function"?a():a??null))}return{get isIn(){return o.isIn},get ready(){return o.ready},ref:f=>{f?p(f):o.io?.disconnect()},observe:f=>p(f),disconnect:()=>{o.io?.disconnect(),o.io=null}}}function ut(t,e,n){let o=t.nextHookIndex(),r=t.getHookState(o)??{keyword:"",selectedLabel:"",composing:!1};t.setHookState(o,r);let s=e.value!==void 0;return{controlled:e,get value(){return e.value??r.keyword},setValue(i){s?(e.onChange||console.warn(`[vdom] useControlledInput(${n?.name??""}) \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),e.onChange?.(i)):(r.keyword=i,t.requestRender())},get keyword(){return r.keyword},setKeyword(i){r.keyword=i,r.composing||this.setValue(i)},get selectedLabel(){return r.selectedLabel},setSelectedLabel(i){r.selectedLabel=i},get isComposing(){return r.composing},onCompositionStart(){r.composing=!0},onCompositionEnd(){r.composing=!1}}}function ft(t,e){let n={draggable:!0,onDragStart:o=>{e.data!==void 0&&o.dataTransfer?.setData("text/plain",JSON.stringify(e.data)),e.onDragStart?.(o,e.data)},onDragEnd:o=>e.onDragEnd?.(o)};return{draggableProps:n,dragProps:n,dropProps:{onDragOver:o=>{o.preventDefault(),e.onDragOver?.(o)},onDragLeave:o=>e.onDragLeave?.(o),onDrop:o=>{o.preventDefault();let r;try{r=o.dataTransfer?.getData("text/plain")?JSON.parse(o.dataTransfer.getData("text/plain")):void 0}catch{r=void 0}e.onDrop?.(o,r)}}}}function Ie(t,e){let n=`media:${e}`,o=t.getInstanceData().get(n);o||(o={matches:!1,mql:null},t.getInstanceData().set(n,o));let r=t.getBrowser()?.window,i=(r?.matchMedia?.bind(r)??(typeof matchMedia=="function"?matchMedia.bind(void 0):void 0))?.(e);if(i&&(o.matches=i.matches,!o.mql)){let a=()=>{o.matches=i.matches,t.requestRender()};i.addEventListener("change",a),o.mql=i,t.onUnmount(()=>i.removeEventListener("change",a))}return()=>o.matches}function pt(t,e){let n=Object.entries(e).sort((o,r)=>o[1]-r[1]);return()=>{let o=n[0]?.[0]??"default";for(let[r,s]of n)Ie(t,`(min-width: ${s}px)`)()&&(o=r);return o}}var Jt=0,Me=()=>`m${Date.now().toString(36)}${(Jt++).toString(36)}`;function ct(t,e){let n=t.nextHookIndex(),o=t.getHookState(n)??{messages:[],status:"idle",subs:new Set,controller:null,seq:0,input:"",error:null,usage:null,step:null};if(t.setHookState(n,o),o.messages.length===0){let a=[];e.system&&a.push({id:Me(),role:"system",content:e.system}),e.initialMessages&&a.push(...e.initialMessages),o.messages=a}let r=()=>{for(let a of[...o.subs])a()},s=e.parseChunk??(a=>{let l=a.trim();if(!l||l.startsWith("event:"))return null;let u=l.startsWith("data:")?l.slice(5).trim():l;if(!u)return null;try{let d=JSON.parse(u);return d.toolCalls?d:d.text!==void 0?{content:String(d.text)}:d.content!==void 0?{content:d.content}:null}catch{return null}}),i={get state(){return o.messages},get messages(){return o.messages},get status(){return o.status},get input(){return o.input??""},setInput(a){o.input=a},get streaming(){return o.status==="streaming"},get error(){return o.error??null},get usage(){return o.usage??null},get step(){return o.step??null},subscribe(a){return o.subs.add(a),()=>{o.subs.delete(a)}},set(){},update(){},notify:r,async send(a=o.input){let l=typeof e.url=="function"?e.url():e.url??"/api/chat",u={id:Me(),role:"user",content:a};o.messages=[...o.messages,u];let d={id:Me(),role:"assistant",content:"",status:"streaming"};o.messages=[...o.messages,d],o.status="streaming",r();let p=new AbortController;o.controller=p;try{let f=await fetch(l,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({messages:o.messages.map(g=>({role:g.role,content:g.content}))}),signal:p.signal});if(!f.ok||!f.body)throw new Error(`[vdom] chat \u8BF7\u6C42\u5931\u8D25 ${f.status}`);let m=f.body.getReader(),k=new TextDecoder,w="";for(;;){let{value:g,done:c}=await m.read();if(c)break;w+=k.decode(g,{stream:!0});let y=w.split(`
2
- `);w=y.pop()??"";for(let x of y){if(!x.trim())continue;let v=s(x);v&&(v.content&&(d.content+=v.content,r()),v.toolCalls&&(d.toolCalls=[...d.toolCalls??[],...v.toolCalls],r()))}}d.status=void 0,o.status="idle"}catch(f){f.name!=="AbortError"?(d.status="error",o.status="error"):(d.status=void 0,o.status="idle")}finally{o.controller=null,r()}},stop(){o.controller?.abort()},retry(){let a=[...o.messages].reverse().find(l=>l.role==="user");a&&i.send(a.content)},reset(){o.messages=[],o.status="idle",r()},async approve(a,l,u){let d=!1;o.messages=o.messages.map(p=>({...p,toolCalls:p.toolCalls?.map(f=>d||f.approved?f:(d=!0,{...f,approved:a!=="rejected",feedback:l,...a==="modified"&&u?{args:u}:{}}))})),r()}};return i}function Xt(t){let e=t.getBrowser()?.window;return e?.matchMedia?e.matchMedia.bind(e):typeof matchMedia=="function"?matchMedia.bind(void 0):null}function He(t){let e=Xt(t);return!!(e&&e("(prefers-reduced-motion: reduce)").matches)}function mt(t,e,n){let o=t.getBrowser()?.window,r=He(t),s=n?.duration??400;if(s<=0)return{value:e,reset:()=>{}};let i=n?.ease==="linear"?m=>m:m=>1-Math.pow(1-m,3),a,l=e,u=r?e:0,d={get value(){return u},set value(m){u=m},reset:()=>{}},p=()=>{t.requestRender()},f=m=>{if(l=m,r){d.value=m,p();return}if(m===d.value)return;if(!o){d.value=m;return}a&&o.cancelAnimationFrame(a);let k=d.value,w=o.performance.now(),g=c=>{let y=Math.min(1,(c-w)/s);d.value=Math.round(k+(m-k)*i(y)),y<1?a=o.requestAnimationFrame(g):a=void 0,p()};a=o.requestAnimationFrame(g)};return d.reset=m=>{m===l&&a||f(m)},t.onUnmount(()=>{a&&o&&(o.cancelAnimationFrame(a),a=void 0)}),d.reset(e),d}function gt(t,e){let n=t.getBrowser()?.window,o=0,r=0,s=!1,i=0,a=p=>{s&&e.onMove(p,{x:p.clientX-o,y:p.clientY-r})},l=p=>{s&&p.pointerId===i&&(s=!1,n&&(n.removeEventListener("pointermove",a),n.removeEventListener("pointerup",l),n.removeEventListener("pointercancel",u)),e.onEnd?.(p))},u=p=>{!s||p.pointerId!==i||(s=!1,n&&(n.removeEventListener("pointermove",a),n.removeEventListener("pointerup",l),n.removeEventListener("pointercancel",u)),e.onEnd?.(p))},d=p=>{s||(p.preventDefault(),s=!0,i=p.pointerId,o=p.clientX,r=p.clientY,n&&(n.addEventListener("pointermove",a),n.addEventListener("pointerup",l),n.addEventListener("pointercancel",u)),e.onStart?.(p))};return t.onUnmount(()=>{s&&n&&(n.removeEventListener("pointermove",a),n.removeEventListener("pointerup",l),n.removeEventListener("pointercancel",u),s=!1)}),{onPointerDown:d}}function yt(t){let e=t.getBrowser()?.window,n=e?.visualViewport,o=n?.height??e?.innerHeight??0,r=n?.offsetTop??0,s=!1,i={get height(){return o},get offsetTop(){return r},get keyboardOpen(){return s}},a=()=>{let l=e?.visualViewport;o=l?.height??e?.innerHeight??0,r=l?.offsetTop??0,s=o<(e?.innerHeight??0)*.9,t.requestRender()};if(e){let l=e.visualViewport;l?.addEventListener?(l.addEventListener("resize",a),l.addEventListener("scroll",a),t.onUnmount(()=>{l.removeEventListener("resize",a),l.removeEventListener("scroll",a)})):(e.addEventListener("resize",a),t.onUnmount(()=>e.removeEventListener("resize",a)))}return i}function ht(t){return{useExternal(e){let n=t.getInstanceData(),o=n.get(e);if(!o){let r=e.subscribe(()=>t.requestRender());t.onUnmount(r),o={unsub:r},n.set(e,o)}return()=>e.state},signal:e=>Ke(e),hold:e=>t.onUnmount(e),useStableRef:(e,n)=>Fe(t,e,n),useOpen:(e,n)=>Be(t,e,n),onUnmount:e=>t.onUnmount(e),useGlobalKey:(e,n)=>qe(t,e,n),openPopup:e=>st(t,e),usePopupPosition:e=>We(t,e),useControlled:(e,n)=>at(t,e,n),useScrollPosition:e=>lt(t,e),useInView:e=>dt(t,e),useControlledInput:(e,n)=>ut(t,e,n),useDragDrop:e=>ft(t,e),useMedia:e=>Ie(t,e),useBreakpoint:e=>pt(t,e),useChat:e=>ct(t,e),useTween:(e,n)=>mt(t,e,n),useDrag:e=>gt(t,e),useVisualViewport:()=>yt(t),useReducedMotion:()=>He(t)}}function Le(t,e,n){return e<=0?t:new Promise((o,r)=>{let s=setTimeout(()=>{r(new Error(`[vdom] \u5F02\u6B65\u8D85\u65F6\uFF08${e}ms\uFF09: ${n}`))},e);t.then(i=>{clearTimeout(s),o(i)},i=>{clearTimeout(s),r(i)})})}var Oe=0;function vt(){Oe++}function bt(){Oe>0&&Oe--}function Zt(t){return M(t)?{kind:"hole"}:Array.isArray(t)?{kind:"array",items:t}:{kind:"vnode",v:t}}function W(t){return t.kind==="hole"?null:t.kind==="array"?t.items:t.v}function ne(){let t=new Map;return{get:e=>t.get(e),set:(e,n)=>{t.set(e,n)},delete:e=>{t.delete(e)},keys:()=>[...t.keys()],asyncTimeout:15e3}}async function _(t,e,n,o,r,s,i,a,l){let u=t.type,d=i.get(r);if(d&&d.phase==="mounting")throw new Error(`[vdom] \u7EC4\u4EF6\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A${r} \u6B63\u5728 mount\uFF08\u5F02\u6B65\u5DE5\u5382\u671F\u95F4\u91CD\u590D\u5F15\u7528\u2014\u2014\u5FAA\u73AF\u4F9D\u8D56\uFF1F\uFF09`);if(d&&d.type!==u){if(Z(r,i),d.lastOutput!==void 0&&l){let g=W(d.lastOutput);N(g,j(g,r,r),r,l,i)}d=void 0}let p=!d;if(!d){let g=[],c=new Map,y={n:0},x=new Map,v=Object.create(s);v.onUnmount=S=>{g.push(S)},v.ui=ht({requestRender:()=>{v.render?.()},onUnmount:S=>{g.push(S)},getBrowser:()=>s.browser??null,nextHookIndex:()=>y.n++,getHookState:S=>c.get(S),setHookState:(S,h)=>{c.set(S,h)},getInstanceData:()=>x,scheduleAfterRender:S=>s.afterRender?.(S),getSharedContext:()=>s??null});let C={type:u,renderFn:(()=>null),onUnmounts:g,hookSeq:y,hookStates:c,renderBase:0,phase:"mounting"};i.set(r,C);let F;try{let S=u(t.props,v);F=await Le(Promise.resolve(S),i.asyncTimeout,`mount(${r})`)}catch(S){i.delete(r);for(let h of g.reverse())try{h()}catch(b){console.error("[vdom] mount \u6E05\u7406:",b)}throw S}d={type:u,renderFn:F,onUnmounts:g,hookSeq:y,hookStates:c,renderBase:0,phase:"mounted"},d.renderBase=y.n,i.set(r,d)}d.hookSeq.n=d.renderBase;let f;try{vt();let g;try{g=d.renderFn(t.props)}finally{bt()}f=await Le(Promise.resolve(g),i.asyncTimeout,`renderFn(${r})`)}catch(g){console.error(`[vdom] renderFn \u8D85\u65F6/\u9519\u8BEF\uFF08${r}\uFF09\u2014\u2014\u7EC4\u4EF6\u7EA7 hole \u964D\u7EA7\uFF08\u4E0B\u4E00\u62CD\u91CD\u8BD5\u81EA\u6108\uFF09:`,g),f=null}d.lastOutput=Zt(f);let m=Array.isArray(f),k=typeof f?.type=="function",w=M(f);return await a(f,m||k||w?r:e,m||k||w?0:n,o),p}function Z(t,e){let n=[...e.keys()].filter(o=>o===t||o.startsWith(t+".")).reverse();for(let o of n){let r=e.get(o);if(r){for(let s of r.onUnmounts.reverse())try{s()}catch(i){console.error("[vdom] onUnmount:",i)}e.delete(o)}}}function Ne(t,e,n){let o=new Map,r=i=>{switch(i.op){case"create":{let a=o.get(i.id);a&&a!=="el"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1Acreate ${i.id} \u7C7B\u578B\u51B2\u7A81\uFF08${a} \u2192 el\uFF09`),o.set(i.id,"el");break}case"createText":{let a=o.get(i.id);a&&a!=="text"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1AcreateText ${i.id} \u7C7B\u578B\u51B2\u7A81\uFF08${a} \u2192 text\uFF09`),o.set(i.id,"text");break}case"createAnchor":{let a=o.get(i.id);a&&a!=="anchor"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1AcreateAnchor ${i.id} \u7C7B\u578B\u51B2\u7A81\uFF08${a} \u2192 anchor\uFF09`),o.set(i.id,"anchor");break}case"insert":{let a=o.get(i.parent);a&&a!=="el"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1Ainsert ${i.id} \u7684 parent ${i.parent} \u662F${a}\uFF08\u975E\u5BB9\u5668\u2014\u2014id \u7A7A\u95F4\u9519\u4F4D\uFF09`);break}default:break}t(i)},s=async(i,a,l,u)=>{let d=E(a,l);switch(U(i)){case"text":{let p=De(i);r({op:"createText",id:d,value:p}),r({op:"insert",id:d,parent:a,ref:u});return}case"hole":{oe(r,d,a,u);return}case"array":{let p=i;q(p,`\u6570\u7EC4\u5C55\u5F00\uFF08${a}\uFF09`);let f=l,m=u;for(let k of p){await s(k,a,f,m);let w=I(k);m=E(a,f+w-1),f+=w}return}case"fragment":{let p=V(i);q(p,`Fragment \u5C55\u5F00\uFF08${a}\uFF09`);let f=l,m=u;for(let k of p){await s(k,a,f,m);let w=I(k);m=E(a,f+w-1),f+=w}return}case"element":{await $e(i,d,a,u,r,s);return}case"component":{let p=i,f=p.key!==null?H(a,p.key):d;await _(p,a,l,u,f,e,n,s,t)&&t({op:"mount",compId:f});return}case"invalid":{console.warn(`[vdom] \u975E\u6CD5\u5B50\u8282\u70B9\u2014\u2014${ke(i)}`),oe(r,d,a,u,ke(i));return}}};return s}function be(t,e,n){let o=e??{},r=n??ne();return new ReadableStream({async start(s){await Ne(a=>s.enqueue(a),o,r)(t,"root",0,null),s.enqueue({op:"done",full:!0}),s.close()}})}function xe(t,e,n){if(t!==e)throw new Error(`${n??"assertEqual"}: ${JSON.stringify(t)} !== ${JSON.stringify(e)}`)}function xt(t,e){if(!t)throw new Error(e??"assertOk")}function wt(t){return t.nodeType===1?"element":t.nodeType===3?"text":t.nodeType===8?"hole":"comment"}function Fr(t,e,n="\u540C\u6784\uFF08childNodes \u957F\u5EA6 + \u4F4D\u7F6E + \u7C7B\u578B\uFF09"){xe(t.childNodes.length,e.length,`${n}\u2014\u2014\u957F\u5EA6\uFF08\u584C\u7F29/\u591A\u4F59\u5373 bug\uFF09`);for(let o=0;o<e.length;o++)xe(wt(t.childNodes[o]),e[o],`${n}\u2014\u2014\u4F4D\u7F6E ${o}\uFF08\u7B2C i \u9879 \u27F7 childNodes \u7B2C i \u4E2A\uFF09`)}function Br(t,e,n,o=`\u4F4D\u7F6E ${e}`){xt(t.childNodes[e],`${o}\u2014\u2014\u5B58\u5728`),xe(wt(t.childNodes[e]),n,`${o}\u2014\u2014\u7C7B\u578B`)}function qr(t,e,n,o="\u590D\u7528\u9879 DOM \u5F15\u7528\u4FDD\u6301\uFF08\u4E0D\u91CD\u5EFA\uFF09"){let r=t.querySelector(e);xt(r,`${o}\u2014\u2014\u65B0\u9879\u5B58\u5728`),xe(r,n,o)}async function _r(t,e,n,o,r=2,s="\u5F80\u8FD4\u53EF\u9006\uFF08\u72B6\u6001\u4E0D\u6F02\u79FB\uFF09"){for(let i=0;i<r;i++)t(),await o(n),t(),await o(e)}async function Yr(t,e,n){let o=await t(e,n);return typeof o=="function"?o(e):o}async function Jr(t,e,n){let o=await t(e,n);return()=>typeof o=="function"?o(e):o}function we(t,e){if(t==null||typeof t!="object")return;if(Array.isArray(t)){for(let o of t)we(o,e);return}e(t);let n=t?.props?.children;n!=null&&we(n,e)}function Xr(t,e){let n;return we(t,o=>{!n&&e(o)&&(n=o)}),n}function Qr(t,e){let n=[];return we(t,o=>{typeof o?.props?.class=="string"&&o.props.class.split(" ").includes(e)&&n.push(o)}),n}var Ee=new WeakMap;async function en(t,e,n){let o=t.ownerDocument;t.innerHTML="";let r=ne(),s=new te(t,o,r);Ee.set(t,{registry:r,applier:s});let i=be(e,n??{},r);for await(let a of i)s.apply(a)}async function Zr(t,e,n,o,r){let s=Ee.get(t);if(o==null)return t.innerHTML="",null;if(s){let i=me(n,o,r??{},s.registry);for await(let a of i)s.applier.apply(a)}else await en(t,o,r);return o}function ei(t){Ee.get(t)?.applier.dispose(),Ee.delete(t)}function ti(t,e){return Promise.resolve(t)}export{Fr as assertIsomorphic,qr as assertKept,_r as assertRoundTrip,Br as assertSlot,ti as buildToDom,ei as disposeToDom,Qr as findByClass,Xr as findVNode,Jr as mountComponent,en as mountToDom,Zr as patchToDom,Yr as renderVNode,wt as shapeOf,we as walkVNode};
1
+ var Ct=Symbol("vdom-fragment");function D(t){return t.type===Ct}function V(t){let e=t.children??(t.props.children===void 0?[]:t.props.children),n=o=>Array.isArray(o)?o.flatMap(n):[o];return Array.isArray(e)?e.flatMap(n):[e]}function I(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)&&D(t)?V(t).reduce((e,n)=>e+I(n),0):1}function Pe(t){return t==null||typeof t=="boolean"}function Ae(t){return!(t==null||typeof t=="boolean"||typeof t=="string"||typeof t=="number"||Array.isArray(t)||typeof t=="object"&&typeof t.type=="string"||typeof t.type=="function"||typeof t.type=="symbol")}function ke(t){return t==null?"null/undefined":typeof t=="object"?`object\uFF08type: ${typeof t.type}\uFF09`:typeof t}function Nt(t,e,n,o){return[{op:"createAnchor",id:t,...o!==void 0?{detail:o}:{}},{op:"insert",id:t,parent:e,ref:n}]}function oe(t,e,n,o,r){for(let s of Nt(e,n,o,r))t(s)}function U(t){return t===""?"hole":typeof t=="string"||typeof t=="number"?"text":Pe(t)?"hole":Array.isArray(t)?"array":typeof t.type=="string"?"element":D(t)?"fragment":typeof t.type=="function"?"component":(Ae(t),"invalid")}function De(t){return typeof t=="string"||typeof t=="number"?String(t):null}function M(t){return U(t)==="hole"}function G(t){return U(t)==="text"}function H(t,e){return`${t}.k${e.replace(/%/g,"%25").replace(/\./g,"%2E")}`}function L(t){return t==null||typeof t=="boolean"||typeof t=="string"||typeof t=="number"||Array.isArray(t)?null:t.key}function re(t){return L(t)!==null}function ie(t){let e=!1,n=!1;for(let o of t)if(re(o)?e=!0:n=!0,e&&n)return"mixed";return e?"all-keyed":"all-unkeyed"}function q(t,e){let n=new Set;for(let o of t){let r=L(o);if(r!==null){if(n.has(r)){console.warn(`[vdom] ${e}\uFF1A\u91CD\u590D key "${r}"\uFF08\u5217\u8868\u8EAB\u4EFD\u6620\u5C04\u6B67\u4E49\u2014\u2014\u589E\u5220/\u91CD\u6392\u884C\u4E3A\u4E0D\u786E\u5B9A\uFF09\u2014\u2014\u8BF7\u4E3A\u6BCF\u9879\u58F0\u660E\u552F\u4E00 key\uFF08\u6570\u636E id \u2192 keyBy\uFF09`);return}n.add(r)}}}function Ue(t,e){if(t.length<2)return;let n=t.some(r=>typeof r?.type=="function"),o=t.some(r=>!re(r)&&typeof r?.type=="function");if(n&&o){let r=t.map(s=>{let i=s;if(i==null)return"null";if(typeof i=="boolean")return"bool";if(typeof i=="string"||typeof i=="number")return"text";if(Array.isArray(i))return"arr";if(typeof i.type=="function"){let a=i.type.name;return"comp"+(a?":"+a:"")}return"el"+(i.key?`.k{${String(i.key).slice(0,16)}}`:"")});console.warn(`[vdom] ${e}\uFF1A\u5217\u8868\u542B\u65E0 key \u7684\u7EC4\u4EF6\u9879\uFF08\u957F\u5EA6 ${t.length}\uFF09\u2014\u2014\u9879: [${r.join(", ")}]\u2014\u2014\u52A8\u6001\u589E\u5220/\u91CD\u6392\u65F6\u72B6\u6001\u4F1A\u6309\u4F4D\u7F6E\u7EE7\u627F\u2014\u2014\u8BF7\u4E3A\u7EC4\u4EF6\u9879\u58F0\u660E key\uFF08\u6570\u636E id \u2192 keyBy\uFF09`)}}function E(t,e){return`${t}.${e}`}function pe(t){let e={};for(let[n,o]of Object.entries(t))n==="children"||n==="key"||n==="ref"||typeof o!="function"&&(e[n]=o);return e}async function $e(t,e,n,o,r,s){r({op:"create",id:e,tag:t.type,attrs:pe(t.props)});for(let[d,p]of Object.entries(t.props))d==="children"||d==="key"||d==="ref"||typeof p=="function"&&r({op:"setProp",id:e,key:d,value:p});r({op:"insert",id:e,parent:n,ref:o});let i=t.props.ref;typeof i=="function"&&r({op:"ref",id:e,fn:i});let a=V(t);q(a,`\u5143\u7D20 children\uFF08${e}\uFF09`);let l=null,u=0;for(let d of a){await s(d,e,u,l);let p=I(d);l=E(e,u+p-1),u+=p}r({op:"close",id:e})}function St(t){let e=new Set,n=t,o=()=>{for(let r of[...e])r()};return{get state(){return n},subscribe(r){return e.add(r),()=>{e.delete(r)}},set(r){n={...n,...r},o()},update(r){r(n),o()},notify:o}}function Ke(t){let e=St(t),n=(()=>e.state);return n.set=o=>e.set(o),n.update=o=>e.update(o),n.subscribe=o=>e.subscribe(o),n.notify=()=>e.notify(),n.store=e,n}function Fe(t,e,n){if(typeof e=="function"){let r=e;return i=>{i?r(i):n?.()}}return{current:e}}function Be(t,e,n){let o=typeof e=="object"?e:void 0,r=typeof e=="boolean"?e:!1,s=o??n,i=t.nextHookIndex(),a=t.getHookState(i)??{open:r};t.setHookState(i,a);let l=s?.open!==void 0;return{get open(){return s?.open??a.open},setOpen(u){l?(s?.onOpenChange||console.warn(`[vdom] useOpen${o?.name?`(${o.name})`:""} \u53D7\u63A7\u7F3A onOpenChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),s?.onOpenChange?.(u)):(a.open=u,t.requestRender())},toggle(){this.setOpen(!this.open)}}}function qe(t,e,n){let o=n?e:(()=>!0),r=n??e,s=t.getBrowser()?.window;if(!s)return()=>{};let i=l=>{if(typeof o=="string"){if(l.key!==o)return}else if(!o(l))return;r(l)};s.addEventListener("keydown",i);let a=()=>s.removeEventListener("keydown",i);return t.onUnmount(a),a}function _e(t,e,n,o,r,s,i,a){let l=t.getBoundingClientRect();if(l.width===0&&l.height===0)return null;let u=e.innerWidth,d=e.innerHeight,p,f;switch(r){case"bottom":p=l.bottom+s,f=a?l.left+l.width/2-n/2:l.left;break;case"top":p=l.top-o-s,f=a?l.left+l.width/2-n/2:l.left;break;case"left":p=a?l.top+l.height/2-o/2:l.top,f=l.left-n-s;break;case"right":p=a?l.top+l.height/2-o/2:l.top,f=l.right+s;break}return f+n>u-i&&(f=u-n-i),f<i&&(f=i),p+o>d-i&&(p=d-o-i),p<i&&(p=i),{top:p,left:f}}function je(t,e){let n=e.getComputedStyle(t).animationName;if(n&&n!=="none")return!0;for(let o of t.children){let r=e.getComputedStyle(o).animationName;if(r&&r!=="none")return!0}return!1}function We(t,e){let n=t.getBrowser()?.window,o=0,r=0,s={get top(){return o},get left(){return r},refresh:()=>{}},i=()=>{let u=e.el();if(!u)return;let d=u.getBoundingClientRect();if(d.width===0&&d.height===0)return;let p=e.compute(d);o=p.top,r=p.left},a,l=()=>{a||n&&(a=n.requestAnimationFrame(()=>{a=void 0,(e.isOpen?.()??!0)&&i()}))};return n&&(n.addEventListener("scroll",l,!0),n.addEventListener("resize",l),t.onUnmount(()=>{a!==void 0&&n.cancelAnimationFrame(a),n.removeEventListener("scroll",l,!0),n.removeEventListener("resize",l)})),s.refresh=i,s}function ze(t){return t==null?null:typeof t=="string"?t:typeof t=="number"?String(t):(console.warn(`[vdom] key \u5FC5\u987B\u662F string|number\u2014\u2014\u5F53\u524D ${typeof t}\uFF08\u5FFD\u7565\u2014\u2014\u4F4D\u7F6E\u8EAB\u4EFD\uFF09`),null)}function Ge(t){return ze(t?.key)}function Ye(t){let e={...t??{}};return delete e.key,e}function Te(t,e,...n){let o=Ye(e);return n.length===1?o.children=n[0]:n.length>1&&(o.children=n),{type:t,props:o,key:Ge(e)}}function R(t){if(t==null)return"hole";let e=U(t);return e==="invalid"?"hole":e}var Y=async(t,e,n)=>{n.emit({op:"remove",id:n.oldId}),await n.emitNode(e,n.parent,n.index,n.ref)};var J=async(t,e,n)=>{n.emit({op:"remove",id:n.oldId}),await n.emitNode(e,n.parent,n.index,n.ref)};function j(t,e,n){return typeof t?.type=="function"?E(e,0):Array.isArray(t)?e:M(t)?E(e,0):n}function se(t,e,n){return typeof t?.type=="function"||Array.isArray(t)?e:n}function N(t,e,n,o,r){if(globalThis.__DBG8&&console.log("[dbg-rmt]",e,"parent=",n,"type=",typeof t=="object"&&t!==null&&!Array.isArray(t)?String(t.type):Array.isArray(t)?"array":String(t)),M(t)){o({op:"remove",id:e});return}if(G(t)){o({op:"remove",id:e});return}if(Array.isArray(t)){globalThis.__DBG4&&console.log(`[dbg-arr] \u6570\u7EC4 base=${e} parent=${n} \u9879\u6570=${t.length}`);let l=0;for(let u of t)N(u,E(e,l),e,o,r),l+=I(u);return}let s=t;if(D(s)){let l=Number(e.slice(n.length+1)),u=V(s),d=l;for(let p of u)N(p,E(n,d),n,o,r),d+=I(p);return}if(typeof s.type=="function"){let l=s.key!==null?H(n,s.key):e;globalThis.__DBG5&&console.log(`[dbg-comp] unmount ${l} base=${e} parent=${n}`),o({op:"unmount",compId:l});let u=r?.get(l)?.lastOutput;if(u!==void 0){let d=W(u),p=j(d,l,e),m=d!==null&&typeof d=="object"&&!Array.isArray(d)&&D(d)?e.slice(0,e.lastIndexOf(".")):se(d,l,l);N(d,p,m,o,r)}}let i=V(s),a=0;i.forEach(l=>{let u=E(e,a);l!==null&&typeof l!="string"&&typeof l!="number"&&typeof l!="boolean"&&!Array.isArray(l)?N(l,u,e,o,r):o({op:"remove",id:u}),a+=I(l)}),o({op:"remove",id:e})}var X=async(t,e,n)=>{N(t,n.oldId,n.parent,n.emit,n.registry),await n.emitNode(e,n.parent,n.index,n.ref)};var Q=async(t,e,n)=>{globalThis.__DBG8&&console.log("[dbg-tc] oldCompId=",n.oldCompId,"oldId=",n.oldId,"parent=",n.parent,"index=",n.index),n.oldCompId&&n.emit({op:"unmount",compId:n.oldCompId});let o=n.registry?.get(n.oldCompId??"")?.lastOutput;if(o!==void 0){let r=W(o);N(r,j(r,n.oldCompId??"",E(n.parent,n.index)),se(r,n.oldCompId??"",n.parent),n.emit,n.registry)}else n.emit({op:"remove",id:n.oldId});await n.emitNode(e,n.parent,n.index,n.ref)};var $=async(t,e,n)=>{let o=Array.isArray(t)?t:V(t),r=n.index;for(let s of o)N(s,E(n.parent,r),n.parent,n.emit,n.registry),r+=I(s);await n.emitNode(e,n.parent,n.index,n.ref)};var Vt={text:{text:null,hole:Y,element:Y,component:Y,fragment:Y,array:Y},hole:{text:J,hole:null,element:J,component:J,fragment:J,array:J},element:{text:X,hole:X,element:null,component:X,fragment:X,array:X},component:{text:Q,hole:Q,element:Q,component:null,fragment:Q,array:Q},fragment:{text:$,hole:$,element:$,component:$,fragment:null,array:$},array:{text:$,hole:$,element:$,component:$,fragment:$,array:null}};function K(t,e){return Vt[t]?.[e]??null}function Je(t,e,n,o){let r=pe(t.props),s=pe(e.props);for(let[i,a]of Object.entries(s))r[i]!==a&&o({op:"setProp",id:n,key:i,value:a});for(let i of Object.keys(r))i in s||o({op:"setProp",id:n,key:i,value:void 0});for(let[i,a]of Object.entries(e.props))i==="children"||i==="key"||typeof a=="function"&&t.props[i]!==a&&o({op:"setProp",id:n,key:i,value:a,prev:t.props[i]});for(let i of Object.keys(t.props))i==="children"||i==="key"||typeof t.props[i]=="function"&&e.props[i]===void 0&&o({op:"setProp",id:n,key:i,value:void 0,prev:t.props[i]})}async function et(t,e,n,o,r,s,i){let a=V(t),l=V(e),u=Array.isArray(t.props.children)!==Array.isArray(e.props.children);await le(a,l,n,o,r,s,i,u)}async function le(t,e,n,o,r,s,i,a=!1){if(t=Ce(t),e=Ce(e),!a){let f=v=>!M(v)&&!G(v)&&!Array.isArray(v),m=t.filter(f),k=e.filter(f),w=(v,C)=>C>=v.length||M(v[C]),y=v=>typeof v?.type=="function"&&!re(v),c=v=>w(t,v)||y(t[v]),g=v=>w(e,v)||y(e[v]);(e.some((v,C)=>y(v)&&!c(C))||t.some((v,C)=>y(v)&&!g(C)))&&Ue(k,`children\uFF08\u65E0 key \u7EC4\u4EF6\u5B9E\u69FD\u7FFB\u8F6C ${m.length}\u2192${k.length}\uFF09`)}if(globalThis.__WF_DEBUG_MOVED__&&console.log("[debug-dci] id=",n,"oldKeys=",JSON.stringify(t.map(L)),"newKeys=",JSON.stringify(e.map(L)),"lk=",ie(t),ie(e)),ie(e)==="all-keyed"&&ie(t)==="all-keyed"){await Ze(t,e,n,o,r,s,i);return}if(Qe(e)||Qe(t)){await Ze(t,e,n,o,r,s,i);return}let l=null,u=Math.min(t.length,e.length);for(let f=0;f<u;f++){let m=t[f]??null,k=e[f]??null,w=E(n,f);M(k)?M(m)||(await Xe(m,n,w,r,i),oe(r,w,n,l)):await Rt(m,k,n,f,l,w,o,r,s,i),l=w}for(let f=t.length;f<e.length;f++)await o(e[f],n,f,l),l=E(n,f);let d=t.reduce((f,m)=>f+I(m),0),p=e.reduce((f,m)=>f+I(m),0);if(d>p){let f=d-p;for(let m=t.length-1;m>=0&&f>0;m--){let k=I(t[m]);k<=f&&(await Xe(t[m],n,E(n,m),r,i),f-=k)}}}async function Xe(t,e,n,o,r){if(M(t)){o({op:"remove",id:n});return}N(t,n,e,o,r)}function Ce(t){let e=[];for(let n of t)n!==null&&typeof n=="object"&&!Array.isArray(n)&&D(n)?e.push(...Ce(V(n))):e.push(n);return e}async function Rt(t,e,n,o,r,s,i,a,l,u){if(globalThis.__DBG7&&console.log("[dbg-slot]",s,"old=",t===null?"null":String(typeof t=="object"?t.type:t),"new=",e===null?"null":String(typeof e=="object"?e.type:e)),U(t)==="text"&&U(e)==="text"){String(t)!==String(e)&&a({op:"setText",id:s,value:String(e)});return}if(U(t)==="hole"){a({op:"remove",id:s}),await i(e,n,o,r);return}if(U(t)===U(e)&&typeof t!="string"&&typeof t!="number"){await z(t,e,n,o,r,i,a,l,u);return}let d=K(R(t),R(e));if(!d)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${R(t)} \u2192 ${R(e)}\uFF08diffSlot\u2014\u2014\u5FC5\u987B\u663E\u5F0F\u8FC1\u79FB\u6216\u663E\u5F0F Reject\uFF09`);await d(t,e,{emit:a,emitNode:i,oldId:s,newId:s,parent:n,index:o,ref:r,oldCompId:typeof t?.type=="function"?s:void 0,registry:u})}function Qe(t){return t.some(re)}async function Ze(t,e,n,o,r,s,i){let a=new Map;t.forEach((c,g)=>{let x=L(c);x!==null&&!a.has(x)&&a.set(x,g)}),q(e,`keyed \u5217\u8868\uFF08${n}\uFF09`),q(t,`keyed \u5217\u8868\uFF08${n}\uFF09`);let l=new Set(e.map(c=>L(c)).filter(c=>c!==null)),u=new Map;for(let c=0;c<t.length;c++){let g=t[c];if(M(g)){r({op:"remove",id:E(n,c)});continue}if(G(g)){r({op:"remove",id:E(n,c)});continue}if(Array.isArray(g))continue;let x=L(g);if(x!==null){let v=(u.get(x)??0)+1;if(u.set(x,v),v===1)continue;N(g,E(n,c),n,r,i);continue}N(g,E(n,c),n,r,i)}for(let[c,g]of a)l.has(c)||N(t[g],E(n,g),n,r,i);let d=t.map(c=>L(c)).filter(c=>c!==null&&l.has(c)),p=e.map(c=>L(c)).filter(c=>c!==null&&a.has(c)),f=!0;{let c=0;for(let g of p){let x=d.indexOf(g,c);if(x===-1){f=!1;break}c=x+1}}if(!f){for(let[g,x]of a)l.has(g)||r({op:"unmount",compId:H(n,g)});t.forEach((g,x)=>{if(!M(g)){if(G(g)){r({op:"remove",id:E(n,x)});return}if(L(g)!==null){r({op:"remove",id:E(n,x)});return}N(g,E(n,x),n,r,i)}});let c=null;for(let g=0;g<e.length;g++){let x=e[g],v=L(x);if(v!==null&&typeof x.type=="function"){let C=H(n,v);await _(x,n,g,c,C,s,i,o,r)&&r({op:"mount",compId:C})}else await o(x,n,g,c);c=E(n,g)}return}let m=[];e.forEach((c,g)=>{let x=L(c);if(x===null)return;let v=a.get(x);v!==void 0&&v!==g&&m.push({oldIdx:v,newIdx:g})});let k=m.every(c=>c.newIdx<c.oldIdx);m.sort((c,g)=>k?c.newIdx-g.newIdx:g.newIdx-c.newIdx),globalThis.__WF_DEBUG_MOVED__&&console.log("[debug-moved] subseq=1 moved=",JSON.stringify(m),"oldIdxByKey=",JSON.stringify([...a.entries()]),"newKeys=",JSON.stringify([...l]),"parent=",n);for(let c of m)r({op:"move",id:E(n,c.oldIdx),parent:n,ref:null,newId:E(n,c.newIdx),noMove:!0});let w=!0,y=null;for(let c=0;c<e.length;c++){let g=e[c],x=L(g),v=E(n,c);if(x!==null){let C=a.get(x);C===void 0?await ae(g,n,c,y,x,o,r,s,i):typeof g.type=="function"?await ae(g,n,c,y,x,o,r,s,i):await z(t[C],g,n,c,y,o,r,s,i)}else await o(g,n,c,y);y=v}}async function ae(t,e,n,o,r,s,i,a,l){let u=t;if(typeof u.type=="function"){let d=H(e,r),f=l.get(d)?.lastOutput;await _(u,e,n,o,d,a,l,async(k,w,y,c)=>{await ce(f,k,w,y,c,s,i,a,l,z,d,E(e,n),(g,x,v,C,F)=>ae(g,x,v,C,F,s,i,a,l))},i)&&i({op:"mount",compId:d});return}await s(t,e,n,o)}async function ce(t,e,n,o,r,s,i,a,l,u,d,p,f){let m=()=>{if(t?.kind==="vnode"){let y=t.v;return y!==null&&typeof y=="object"&&typeof y.type=="function"?E(d,0):p}return E(d,0)},k=E(n,o),w=M(e);if(t===void 0){await s(e,n,o,r);return}switch(t.kind){case"hole":{if(!w){let y=K("hole",R(e));if(!y)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 hole \u2192 ${R(e)}\uFF08\u7EC4\u4EF6\u8F93\u51FA\u5C55\u5F00\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);await y(null,e,{emit:i,emitNode:s,oldId:m(),newId:k,parent:n,index:o,ref:r,registry:l})}return}case"vnode":{if(w){let y=K(R(t.v),"hole");if(!y)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${R(t.v)} \u2192 hole\uFF08\u7EC4\u4EF6\u8F93\u51FA\u6536\u7F29\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);let c=t.v,g=c!==null&&typeof c=="object"&&typeof c.type=="function"?c.key!==null?H(d,c.key):E(d,0):void 0;await y(t.v,e,{emit:i,emitNode:s,oldId:m(),newId:k,parent:n,index:o,ref:r,registry:l,oldCompId:g})}else if(Array.isArray(e)){let y=K(R(t.v),"array");if(!y)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 ${R(t.v)} \u2192 array\uFF08\u5355\u8282\u70B9\u2192\u591A\u6839\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);await y(t.v,e,{emit:i,emitNode:s,oldId:m(),newId:k,parent:n,index:o,ref:r,registry:l})}else{let y=e;f&&y!==null&&typeof y=="object"&&typeof y.type=="function"&&y.key!==null?await f(e,n,o,r,y.key):await u(t.v,y,n,o,r,s,i,a,l)}return}case"array":{if(w){let y=K("array","hole");if(!y)throw new Error("[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 array \u2192 hole\uFF08\u591A\u6839\u6536\u7F29\u2014\u2014P2 \u663E\u5F0F Reject\uFF09");await y(t.items,e,{emit:i,emitNode:s,oldId:m(),newId:k,parent:n,index:o,ref:r,registry:l})}else if(Array.isArray(e))await le(t.items,e,n,s,i,a,l);else{let y=K("array",R(e));if(!y)throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A\u672A\u5B9A\u4E49\u8F6C\u6362 array \u2192 ${R(e)}\uFF08\u591A\u6839\u2192\u5355\u8282\u70B9\u2014\u2014P2 \u663E\u5F0F Reject\uFF09`);await y(t.items,e,{emit:i,emitNode:s,oldId:m(),newId:k,parent:n,index:o,ref:r,registry:l})}return}}}async function z(t,e,n,o,r,s,i,a,l){let u=E(n,o);if(typeof e.type=="function"){let p=e.key!==null?H(n,e.key):u,f=typeof t.type=="function"&&t.key!==null?H(n,t.key):u,m=l.get(p);if(p!==f||m&&m.type!==e.type){let y=l.get(f);if(y){f!==p&&i({op:"unmount",compId:f});let c=y.lastOutput;if(c!==void 0){let g=W(c);N(g,j(g,f,E(n,o)),se(g,f,n),i,l)}Z(f,l)}m=void 0,await _(e,n,o,r,p,a,l,s,i),i({op:"mount",compId:p});return}let k=m?.lastOutput;await _(e,n,o,r,p,a,l,async(y,c,g,x)=>{await ce(k,y,c,g,x,s,i,a,l,z,p,E(n,o),(v,C,F,S,h)=>ae(v,C,F,S,h,s,i,a,l))})&&i({op:"mount",compId:p});return}if(typeof e.type=="string"&&typeof t.type=="string"){t.type===e.type?(Je(t,e,u,i),await et(t,e,u,s,i,a,l)):(N(t,u,n,i,l),await s(e,n,o,r));return}if(D(t)&&D(e)){await le(V(t),V(e),n,s,i,a,l);return}throw new Error(`[vdom] \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1AdiffSame \u672A\u5B9A\u4E49\u540C\u6001\u5BF9\u7167 ${String(t.type)} \u2194 ${String(e.type)}\uFF08P2 \u663E\u5F0F Reject\uFF09`)}function me(t,e,n,o){return new ReadableStream({async start(r){let s=d=>r.enqueue(d),i=Ne(s,n,o),a=R(t),l=R(e),u=K(a,l);u?await u(t,e,{emit:s,emitNode:i,oldId:"root.0",newId:"root.0",parent:"root",index:0,ref:null,registry:o,oldCompId:typeof t.type=="function"?t.key!==null?H("root",t.key):"root.0":void 0}):await z(t,e,"root",0,null,i,s,n,o),s({op:"done"}),r.close()}})}var ye=class{table=new Map;rootTypes=new Set;doc;dispatchBound;container;phase="active";constructor(e,n){this.doc=e,this.container=n,this.dispatchBound=this.dispatch.bind(this)}set(e,n,o){if(this.phase==="disposed"){console.error(`[vdom] \u4E8B\u4EF6\u8868\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Adisposed \u540E set(${e}, ${n}) \u88AB\u5FFD\u7565`);return}if(typeof o!="function"){console.warn(`[vdom] \u4E8B\u4EF6 ${n} \u975E\u51FD\u6570\u503C\u88AB\u8DF3\u8FC7\uFF08node ${e}\uFF09\u2014\u2014\u671F\u671B\u51FD\u6570\uFF0C\u5B9E\u9645 ${typeof o}`);return}let r=this.table.get(e);r||(r=new Map,this.table.set(e,r)),r.set(n,o),this.ensureRoot(n)}get(e,n){return this.table.get(e)?.get(n)}removeEvent(e,n){let o=this.table.get(e);o&&(o.delete(n),o.size===0&&this.table.delete(e))}remove(e){for(let n of[...this.table.keys()])(n===e||n.startsWith(e+"."))&&this.table.delete(n)}ensureRoot(e){this.rootTypes.has(e)||(this.doc.addEventListener(e,this.dispatchBound,{capture:!0}),this.rootTypes.add(e))}dispatch(e){if(this.container){let o=e.target;if(o&&!this.container.contains(o))return}if(e.type==="contextmenu"&&window.__dbgEvt){let o=e.target,r=[...this.table.entries()].map(([s,i])=>s+":"+[...i.keys()].join("+")).join(" | ");console.error("[dbg-evt-dispatch]","target:",o?.getAttribute("data-wf-id"),"ALL:",r.slice(0,400))}let n=e.target;for(n&&n.nodeType===3&&(n=n.parentElement);n;){if(!n.hasAttribute?.("data-wf-id")){let r=n.closest?.("[data-wf-id]");if(r&&r!==n){n=r;continue}}let o=n.getAttribute?.("data-wf-id");if(o){let r=this.table.get(o)?.get(e.type);if(r){try{Object.defineProperty(e,"currentTarget",{value:n,configurable:!0})}catch{}try{r(e)}catch(s){console.error("[vdom] \u4E8B\u4EF6 handler:",s)}if(e.cancelBubble)return}}n=n.parentElement}}dispose(){if(this.phase!=="disposed"){this.phase="disposed";for(let e of this.rootTypes)this.doc.removeEventListener(e,this.dispatchBound,{capture:!0});this.rootTypes.clear(),this.table.clear()}}},ee=/^on[A-Z]/;function de(t){return ee.test(t)?t.slice(2).toLowerCase():null}var ge=class{refs=new Map;phase="active";set(e,n,o){if(this.phase==="disposed"){console.error(`[vdom] ref \u8868\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Adisposed \u540E set(${e}) \u88AB\u5FFD\u7565`);return}if(o&&o!==n&&typeof o=="function")try{o(null)}catch(r){console.error("[vdom] ref prev:",r)}this.refs.set(e,n)}mount(e,n){let o=this.refs.get(e);if(typeof o=="function")try{o(n)}catch(r){console.error("[vdom] ref mount:",r)}}unmount(e){for(let[n,o]of[...this.refs])if(n===e||n.startsWith(e+".")){if(typeof o=="function")try{o(null)}catch(r){console.error("[vdom] ref unmount:",r)}this.refs.delete(n)}}remap(e,n){for(let[o,r]of[...this.refs])(o===e||o.startsWith(e+"."))&&(this.refs.delete(o),this.refs.set(n+o.slice(e.length),r))}dispose(){this.phase!=="disposed"&&(this.phase="disposed",this.refs.clear())}};var he=class{queue=null;failed=!1;phase="inactive";begin(e){let n=[],o=r=>{n.push(r);for(let s of r.childNodes)o(s)};for(let r of e.childNodes)o(r);this.queue=n,this.failed=!1,this.phase="consuming"}end(){this.phase==="consuming"&&(this.queue&&this.queue.length>0&&(this.failed=!0),this.queue=null,this.phase=this.failed?"failed":"inactive")}reset(){this.queue=null,this.failed=!1,this.phase="inactive"}next(e,n,o){if(this.phase!=="consuming")return console.error(`[vdom] absorb \u72B6\u6001\u673A\u8FDD\u4F8B\uFF1Anext \u5728 ${this.phase} \u9636\u6BB5\u8C03\u7528\uFF08\u5E94 consuming\uFF09`),null;let r=this.queue;if(!r)return null;for(;r.length>0;){let s=r.shift();if(e==="element"?s.nodeType===1&&s.tagName.toLowerCase()===n:e==="text"?s.nodeType===3:s.nodeType===8){if(e==="text"&&o!==void 0){let a=s,l=a.textContent??"";if(l!==o&&l.startsWith(o)){let u=a.splitText(o.length);r.unshift(u)}}return s}}return this.failed=!0,this.phase="failed",null}};var It=new Set(["draggable","contenteditable","spellcheck"]);function Se(t,e,n){if(e==="innerHTML"||e==="textContent"||e==="value"){t[e]=n;return}if(n==null){t.removeAttribute(e);return}if(It.has(e)){t.setAttribute(e,n?"true":"false");return}if(n===!1){t.removeAttribute(e);return}if(e==="class"||e==="className"){t.setAttribute("class",String(n));return}if(typeof n=="boolean"){t.setAttribute(e,"");return}t.setAttribute(e,String(n))}var Mt=new Set(["zIndex","opacity","lineHeight","zoom","fontWeight","order","flex","flexGrow","flexShrink","flexBasis","animationIterationCount","orphans","widows","columns","columnCount","columnGap","counterIncrement","counterReset","aspectRatio","scale","rotate"]);function Ht(t,e,n){if(n==null||n===!1){e.startsWith("--")&&t.style.removeProperty(e),t.style[e]="";return}if(e.startsWith("--")){t.style.setProperty(e,String(n));return}typeof n=="number"&&!Mt.has(e)&&(n=`${n}px`),t.style[e]=String(n)}function Ve(t,e){if(typeof e=="string"){t.setAttribute("style",e);return}if(e&&typeof e=="object"){t.style.cssText="";for(let[n,o]of Object.entries(e))Ht(t,n,o)}}var Lt=new Set(["value","checked","selected","disabled","hidden","autofocus","defaultValue","defaultChecked","innerHTML","textContent","download","indeterminate","multiple","readOnly","required","tabIndex","spellcheck","draggable","scrollTop","scrollLeft","volume","muted","paused","playbackRate","open"]);function tt(t){return Lt.has(t)}function nt(t,e,n){t[e]=n}function ue(t,e){for(let[n,o]of Object.entries(e))n==="style"?Ve(t,o):Se(t,n,o)}function ot(t,e,n,o,r,s){if(o!=="ref")if(typeof r=="function"||r===void 0&&typeof s=="function"){if(ee.test(o)){let i=de(o);i&&t.set(e,i,r)}return}else if(ee.test(o)){let i=de(o);i&&t.set(e,i,r)}else o==="style"?Ve(n,r):tt(o)?nt(n,o,r):Se(n,o,r)}var Ot="http://www.w3.org/2000/svg",Pt=new Set(["svg","path","circle","line","rect","text","g","defs","marker","polyline","polygon","ellipse","use","symbol","tspan","textPath","clipPath","mask","pattern","linearGradient","radialGradient","stop"]);function rt(t,e){return Pt.has(e)?t.createElementNS(Ot,e):t.createElement(e)}function At(t,e){t.touched.add(e.id);let n=t.nodes.get(e.id);if(n&&n.nodeType===1&&n.tagName.toLowerCase()===e.tag)ue(n,e.attrs);else if(t.absorb.queue&&!n){let r=t.absorb.next("element",e.tag);if(r)ue(r,e.attrs),t.nodes.set(e.id,r);else{let s=rt(t.doc,e.tag);ue(s,e.attrs),t.nodes.set(e.id,s)}}else{let r=rt(t.doc,e.tag);ue(r,e.attrs),n&&(t.clearNodeRefs(e.id),t.eventRegistry.remove(e.id),n.replaceWith(r)),t.nodes.set(e.id,r)}let o=t.nodes.get(e.id);o&&o.nodeType===1&&o.setAttribute("data-wf-id",e.id)}function Dt(t,e){t.touched.add(e.id);let n=t.nodes.get(e.id);if(n&&n.nodeType===3)n.textContent!==e.value&&(n.textContent=e.value);else if(t.absorb.queue&&!n){let o=t.absorb.next("text",void 0,e.value);if(o)o.textContent!==e.value&&(o.textContent=e.value),t.nodes.set(e.id,o);else{let r=t.doc.createTextNode(e.value);t.nodes.set(e.id,r)}}else{let o=t.doc.createTextNode(e.value);n&&n.replaceWith(o),t.nodes.set(e.id,o)}}function Ut(t,e){t.touched.add(e.id);let n=t.nodes.get(e.id);if(n&&n.nodeType===8){let o=e.detail?`wf-hole: ${e.detail}`:"wf-hole";n.textContent!==o&&(n.textContent=o)}else if(t.absorb.queue&&!n){let o=t.absorb.next("comment");if(o)t.nodes.set(e.id,o);else{let r=t.doc.createComment(e.detail?`wf-hole: ${e.detail}`:"wf-hole");t.nodes.set(e.id,r)}}else{let o=t.doc.createComment(e.detail?`wf-hole: ${e.detail}`:"wf-hole");n&&n.replaceWith(o),t.nodes.set(e.id,o)}}function $t(t,e){let n=t.nodes.get(e.id);if(!n||n.isConnected)return;let o=t.parentOf(e);if(o){if(o.nodeType===3){let r=o.parentElement;if(!r)return;let s=o.nextSibling&&o.nextSibling.parentNode===r?o.nextSibling:null;r.insertBefore(n,s),n.nodeType===1&&t.refRegistry.mount(e.id,n);return}if(o.nodeType===8){console.error(`[vdom] id \u7A7A\u95F4\u8FDD\u4F8B\uFF1Ainsert ${e.id} \u7684 parent \u662F\u6CE8\u91CA\u951A\uFF08${e.parent}\uFF09\u2014\u2014\u63D2\u5230\u7236\u5BB9\u5668`);let r=o.parentElement;r&&r.appendChild(n),n.nodeType===1&&t.refRegistry.mount(e.id,n);return}if(e.ref){let r=t.nodes.get(e.ref)??null;r&&r.parentNode===o?o.insertBefore(n,r.nextSibling):r?o.appendChild(n):o.insertBefore(n,o.firstChild)}else o.insertBefore(n,o.firstChild);n.nodeType===1&&t.refRegistry.mount(e.id,n)}}function Kt(t,e){let n=t.nodes.get(e.id);if(n){if(!e.noMove){let o=t.parentOf(e);if(!o)return;let r=e.ref?t.nodes.get(e.ref)??null:null;r?o.insertBefore(n,r.nextSibling):e.first?o.insertBefore(n,o.firstChild):o.appendChild(n)}t.remapSubtree(e.id,e.newId)}}function Ft(t,e){t.clearNodeRefs(e.id),t.eventRegistry.remove(e.id),t.nodes.get(e.id)?.remove();let n=e.id+".";for(let o of[...t.nodes.keys()])o.startsWith(n)&&(t.clearNodeRefs(o),t.eventRegistry.remove(o),t.nodes.delete(o));t.nodes.delete(e.id)}function Bt(t,e){let n=t.nodes.get(e.id);n&&n.nodeType===3&&(n.textContent=e.value)}function qt(t,e){let n=t.nodes.get(e.id);if(!n||n.nodeType!==1)return;let o=n;if(e.key==="ref"){let r=t.refRegistry.refs.get(e.id);if(e.value===void 0){t.refRegistry.set(e.id,void 0,r),t.refRegistry.refs.delete(e.id);return}t.refRegistry.set(e.id,e.value,r),o.isConnected&&t.refRegistry.mount(e.id,o);return}if(ee.test(e.key)){let r=de(e.key);r&&(e.value===void 0?t.eventRegistry.removeEvent(e.id,r):t.eventRegistry.set(e.id,r,e.value));return}ot(t.eventRegistry,e.id,o,e.key,e.value,e.prev)}function _t(t,e){let n=t.nodes.get(e.id);n&&n.nodeType===1&&typeof e.fn=="function"&&(t.refRegistry.set(e.id,e.fn),t.refRegistry.mount(e.id,n))}function jt(t,e){t.clearNodeRefs(e.id)}function Wt(t,e){let n=t.registry?.get(e.compId);n&&(n.phase="mounted")}function zt(t,e){t.registry&&Z(e.compId,t.registry)}function Gt(t,e){if(e.full&&t.absorb.end(),e.full&&t.touched.size>0)for(let[n,o]of[...t.nodes])t.touched.has(n)||(t.clearNodeRefs(n),t.eventRegistry.remove(n),o.remove(),t.nodes.delete(n));t.touched.clear()}function it(t,e){switch(e.op){case"create":At(t,e);break;case"createText":Dt(t,e);break;case"createAnchor":Ut(t,e);break;case"insert":$t(t,e);break;case"move":Kt(t,e);break;case"remove":Ft(t,e);break;case"setText":Bt(t,e);break;case"setProp":qt(t,e);break;case"ref":_t(t,e);break;case"unref":jt(t,e);break;case"mount":Wt(t,e);break;case"unmount":zt(t,e);break;case"done":Gt(t,e);break;case"close":break}}var te=class{nodes=new Map;touched=new Set;eventRegistry;refRegistry=new ge;absorb=new he;container;doc;registry;devVerify=null;constructor(e,n,o){this.container=e,this.doc=n,this.registry=o??null,this.eventRegistry=new ye(n,e)}dispose(){if(this.eventRegistry.dispose(),this.refRegistry.dispose(),this.registry)for(let e of[...this.registry.keys()].reverse()){let n=this.registry.get(e);if(n){for(let o of[...n.onUnmounts].reverse())try{o()}catch{}this.registry.delete(e)}}}clearNodeRefs(e){this.refRegistry.unmount(e)}remapSubtree(e,n){let o=(r,s)=>{let i=r.get(s);i!==void 0&&(r.delete(s),r.set(n+s.slice(e.length),i))};for(let r of[...this.nodes.keys()])if(r===e||r.startsWith(e+".")){o(this.nodes,r);let s=this.nodes.get(n+r.slice(e.length));s&&s.nodeType===1&&s.setAttribute("data-wf-id",n+r.slice(e.length))}this.refRegistry.remap(e,n);for(let r of[...this.eventRegistry.table.keys()])if(r===e||r.startsWith(e+".")){let s=this.eventRegistry.table.get(r);this.eventRegistry.table.delete(r),this.eventRegistry.table.set(n+r.slice(e.length),s)}if(this.registry){for(let r of[...this.registry.keys()])if(r===e||r.startsWith(e+".")){let s=this.registry.get(r);this.registry.delete(r),this.registry.set(n+r.slice(e.length),s)}}}parentOf(e){if(e.parent==="root")return this.container;let n=this.nodes.get(e.parent);if(n)return n;let o=e.parent.split(".");for(let r=o.length-1;r>0;r--){let s=o.slice(0,r).join(".");if(s==="root")return this.container;let i=this.nodes.get(s);if(i)return i}return null}apply(e){it(this,e),this.devVerify&&this.devVerify(e,this)}};var ve="__wf_portal";function Re(t){return`${ve}-${t}`}function Yt(t){return typeof t=="function"?t():t}function st(t){return t?typeof t=="function"?t():t:null}function at(t,e){let n={tree:null,applier:null,container:null,chain:Promise.resolve(),version:0,open:!1,phase:"closed",disposed:!1,panel:null,pos:{top:0,left:0}},o=t.getBrowser()?.window,r=t.getBrowser()?.document,s=()=>{if(!r)return null;if(n.container)return n.container;let h=r.getElementById(ve);h||(h=r.createElement("div"),h.id=ve,r.body.appendChild(h));let b=e.key??"popup",T=r.getElementById(Re(b));return T?n.container=T:(n.container=r.createElement("div"),n.container.id=Re(b),h.appendChild(n.container)),n.container},i=0,a=()=>{if(n.disposed||!n.open)return;let h=st(e.anchor);if(!h||!n.panel){i++<10&&queueMicrotask(a);return}if(!o)return;let b=n.panel,T=b.offsetWidth||b.getBoundingClientRect().width,O=b.offsetHeight||b.getBoundingClientRect().height;if((T===0||O===0)&&i++<10){typeof o.requestAnimationFrame=="function"?o.requestAnimationFrame(a):queueMicrotask(a);return}let P=typeof e.placement=="function"?e.placement():e.placement??"bottom";if(e.position){let A=e.position();if(A&&typeof A.x=="number"&&typeof A.y=="number"){if(n.pos={top:A.y,left:A.x,width:A.width},n.applier){let fe=u(n.tree);fe&&d(fe)}return}}let B=_e(h,o,T,O,P,e.gap??8,e.margin??8,e.center??!0);if(!B){i++<10&&queueMicrotask(a);return}if(i=0,n.pos=B,n.applier){let A=u(n.tree);A&&d(A)}},l=h=>{if(n.panel=h,h&&n.open&&e.positioning!=="none"&&(o&&typeof o.requestAnimationFrame=="function"?o.requestAnimationFrame(a):queueMicrotask(a)),h&&e.presence){let b=T=>{n.phase==="exit"&&f()};h.addEventListener("animationend",b),t.onUnmount(()=>h.removeEventListener("animationend",b))}},u=h=>{if(!h)return null;let b=h;e.mask&&(b=Te("div",{class:"wf-popup-mask",style:{position:"fixed",inset:"0",background:"var(--wf-overlay, rgba(0,0,0,0.5))",display:"flex",alignItems:"center",justifyContent:"center",zIndex:"var(--wf-z-modal, 1000)"},onClick:A=>{e.maskClosable!==!1&&A.target===A.currentTarget&&m()}},e.maskCentered?{...b,props:{...b.props??{}}}:Te("div",{class:"wf-popup-mask-inner"},b)));let T=b.props??{},O=e.positioning==="none"||String(T.class??"").includes("mask")?T.class??"":["wf-popup",T.class].filter(Boolean).join(" "),P=e.positioning==="none"?{...T.style??{},position:"fixed"}:{...T.style??{},position:"fixed",top:`${n.pos.top}px`,left:`${n.pos.left}px`,...n.pos.width!==void 0?{width:`${n.pos.width}px`}:{}};return{...b,props:{...T,class:O,style:P,ref:l}}},d=h=>{let b=++n.version,T=n.tree;n.tree=h,n.chain=n.chain.then(async()=>{if(n.disposed||b!==n.version)return;let O=n.applier;if(!O)return;let P=O.registry;if(!P)return;let B=t.getSharedContext()??{},fe=(T?me(T,h,B,P):be(h,B,P)).getReader();for(;;){let{value:kt,done:Tt}=await fe.read();if(Tt)break;if(n.disposed||b!==n.version)return;O.apply(kt)}}).catch(O=>{console.error("[popup] render error:",O)})},p=()=>{n.disposed||(n.disposed=!0,n.applier&&(n.applier.dispose(),n.applier=null),n.tree=null,n.container&&(n.container.remove(),n.container=null))},f=()=>{n.disposed||(n.open=!1,n.phase="closed",c(),p(),e.onClose?.())},m=()=>{!n.open||n.disposed||(e.presence?(n.phase="exit",n.panel&&o&&!je(n.panel,o)&&f(),n.panel||f()):f())},k={value:""},w={value:null},y={value:!1},c=()=>{y.value&&(r?.body&&(r.body.style.overflow=k.value),k.value="",w.value&&(w.value.focus?.(),w.value=null),y.value=!1)},g=()=>{y.value=!0,e.lockScroll&&r?.body&&(k.value=r.body.style.overflow,r.body.style.overflow="hidden"),e.trapFocus&&o&&(w.value=o.document.activeElement,t.scheduleAfterRender(()=>{let h=n.panel;h&&(h.querySelector?.("input, button, [tabindex], select, textarea")??h).focus?.()}))},x=null;e.trapFocus&&o&&(x=h=>{if(h.key!=="Tab"||!n.open||!n.panel)return;let b=Array.from(n.panel.querySelectorAll?.("input, button, [tabindex], select, textarea")??[]).filter(B=>!B.disabled&&B.offsetParent!==null);if(b.length===0)return;let T=b[0],O=b[b.length-1],P=o?.document.activeElement;h.shiftKey&&(P===T||P===n.panel||!n.panel.contains(P))?(h.preventDefault(),O.focus()):!h.shiftKey&&(P===O||!n.panel.contains(P))&&(h.preventDefault(),T.focus())},o.addEventListener("keydown",x));let v=h=>{if(!n.open||(e.closeOnOutside??!0)===!1)return;let b=h.target,T=st(e.anchor);b&&T?.contains(b)||b&&n.panel?.contains(b)||m()},C=h=>{n.open&&(e.closeOnEscape??!0)&&h.key==="Escape"&&m()};o&&(o.addEventListener("mousedown",v),o.addEventListener("keydown",C)),t.onUnmount(()=>{o&&(o.removeEventListener("mousedown",v),o.removeEventListener("keydown",C),x&&o.removeEventListener("keydown",x)),f()});let F=()=>{if(n.open||n.disposed)return;n.open=!0,n.phase="open";let h=s();if(!h)return;(e.trapFocus||e.lockScroll)&&g();let b=ne();n.applier=new te(h,r,b);let T=Yt(e.content);T!=null?d(u(T)):f()},S={close:m,update(h){if(!(n.disposed||!n.open)){if(h==null){m();return}if(e.position){let b=e.position();b&&typeof b.x=="number"&&typeof b.y=="number"&&(n.pos={top:b.y,left:b.x,width:b.width})}d(u(h))}},refresh(){if(n.disposed||!n.open||!n.tree)return;if(e.position){let b=e.position();b&&typeof b.x=="number"&&typeof b.y=="number"&&(n.pos={top:b.y,left:b.x,width:b.width})}let h=u(n.tree);h&&d(h)},get open(){return n.open}};return F(),S}function lt(t,e,n){let o=t.nextHookIndex(),r=t.getHookState(o)??{value:n};t.setHookState(o,r);let s=e.value!==void 0;return{get value(){return e.value??r.value},controlled:e,setValue(i){s?(e.onChange||console.warn("[vdom] useControlled \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548"),e.onChange?.(i)):(r.value=i,t.requestRender())}}}function Jt(t,e,n){if(typeof t=="string")return t==="win"||t==="window"?e:n?n.querySelector(t)??e:e;if(t&&typeof t=="object"&&!("nodeType"in t)){let o=t;if(typeof o.getScroller=="function"){let r=o.getScroller();return r||e}return o.root?typeof o.root=="string"?n?n.querySelector(o.root)??e:e:o.root:e}return e}function dt(t,e){let n=t.nextHookIndex(),o=t.getHookState(n)??{y:0,x:0,raf:null,handler:null,retries:0};t.setHookState(n,o);let r=t.getBrowser()?.window,s=t.getBrowser()?.document??null;if(!r)return{y:0,x:0,refresh:()=>{}};let i=()=>{if(typeof e=="function")return e();if(e&&typeof e=="object"&&!("nodeType"in e)){let u=e;return typeof u.getScroller=="function"?u.getScroller()??null:u.root?typeof u.root=="string"?s?s.querySelector(u.root)??r:r:u.root:r}return Jt(e,r,s)},a=u=>{u===r?(o.y=r.scrollY||0,o.x=r.scrollX||0):(o.y=u.scrollTop,o.x=u.scrollLeft)},l=()=>{if(o.handler)return;let u=i();if(!u){o.retries++<10&&t.scheduleAfterRender(l);return}let d=()=>{o.raf||(o.raf=r.requestAnimationFrame(()=>{o.raf=null,a(u),t.requestRender()}))};u.addEventListener("scroll",d,{passive:!0}),o.handler=d,t.onUnmount(()=>{o.raf&&r.cancelAnimationFrame(o.raf),u.removeEventListener("scroll",d),o.handler=null})};return l(),{get y(){return o.y},get x(){return o.x},refresh:()=>{let u=i();u&&a(u)}}}function ut(t,e){let n=t.nextHookIndex(),o=t.getHookState(n)??{isIn:!1,io:null,retries:0,ready:!1};t.setHookState(n,o);let s=t.getBrowser()?.window?.IntersectionObserver,i=e&&typeof e=="object"&&!("nodeType"in e)?e:void 0,a=i?.target??(typeof e=="function"||e&&"nodeType"in e?e:void 0),l=typeof i?.rootMargin=="function"?i.rootMargin():i?.rootMargin,u=typeof i?.threshold=="function"?i.threshold():i?.threshold,d=typeof i?.root=="function"?i.root():i?.root??null,p=f=>{if(!s||!f||o.io)return;let m=new s(k=>{let w=k[0];w&&w.isIntersecting!==o.isIn&&(o.isIn=w.isIntersecting,i?.onChange?.(w,w.isIntersecting),t.requestRender())},{root:d??void 0,rootMargin:l,threshold:u});m.observe(f),o.io=m,o.ready=!0,t.onUnmount(()=>o.io?.disconnect())};if(s&&!o.io){let f=typeof a=="function"?a():a??null;f?p(f):a!==void 0&&o.retries++<10&&t.scheduleAfterRender(()=>p(typeof a=="function"?a():a??null))}return{get isIn(){return o.isIn},get ready(){return o.ready},ref:f=>{f?p(f):o.io?.disconnect()},observe:f=>p(f),disconnect:()=>{o.io?.disconnect(),o.io=null}}}function ft(t,e,n){let o=t.nextHookIndex(),r=t.getHookState(o)??{keyword:"",selectedLabel:"",composing:!1};t.setHookState(o,r);let s=e.value!==void 0;return{controlled:e,get value(){return e.value??r.keyword},setValue(i){s?(e.onChange||console.warn(`[vdom] useControlledInput(${n?.name??""}) \u53D7\u63A7\u7F3A onChange \u56DE\u8C03\u2014\u2014\u4EA4\u4E92\u9759\u9ED8\u5931\u6548`),e.onChange?.(i)):(r.keyword=i,t.requestRender())},get keyword(){return r.keyword},setKeyword(i){r.keyword=i,r.composing||this.setValue(i)},get selectedLabel(){return r.selectedLabel},setSelectedLabel(i){r.selectedLabel=i},get isComposing(){return r.composing},onCompositionStart(){r.composing=!0},onCompositionEnd(){r.composing=!1}}}function pt(t,e){let n={draggable:!0,onDragStart:o=>{e.data!==void 0&&o.dataTransfer?.setData("text/plain",JSON.stringify(e.data)),e.onDragStart?.(o,e.data)},onDragEnd:o=>e.onDragEnd?.(o)};return{draggableProps:n,dragProps:n,dropProps:{onDragOver:o=>{o.preventDefault(),e.onDragOver?.(o)},onDragLeave:o=>e.onDragLeave?.(o),onDrop:o=>{o.preventDefault();let r;try{r=o.dataTransfer?.getData("text/plain")?JSON.parse(o.dataTransfer.getData("text/plain")):void 0}catch{r=void 0}e.onDrop?.(o,r)}}}}function Ie(t,e){let n=`media:${e}`,o=t.getInstanceData().get(n);o||(o={matches:!1,mql:null},t.getInstanceData().set(n,o));let r=t.getBrowser()?.window,i=(r?.matchMedia?.bind(r)??(typeof matchMedia=="function"?matchMedia.bind(void 0):void 0))?.(e);if(i&&(o.matches=i.matches,!o.mql)){let a=()=>{o.matches=i.matches,t.requestRender()};i.addEventListener("change",a),o.mql=i,t.onUnmount(()=>i.removeEventListener("change",a))}return()=>o.matches}function ct(t,e){let n=Object.entries(e).sort((o,r)=>o[1]-r[1]);return()=>{let o=n[0]?.[0]??"default";for(let[r,s]of n)Ie(t,`(min-width: ${s}px)`)()&&(o=r);return o}}var Xt=0,Me=()=>`m${Date.now().toString(36)}${(Xt++).toString(36)}`;function mt(t,e){let n=t.nextHookIndex(),o=t.getHookState(n)??{messages:[],status:"idle",subs:new Set,controller:null,seq:0,input:"",error:null,usage:null,step:null};if(t.setHookState(n,o),o.messages.length===0){let a=[];e.system&&a.push({id:Me(),role:"system",content:e.system}),e.initialMessages&&a.push(...e.initialMessages),o.messages=a}let r=()=>{for(let a of[...o.subs])a()},s=e.parseChunk??(a=>{let l=a.trim();if(!l||l.startsWith("event:"))return null;let u=l.startsWith("data:")?l.slice(5).trim():l;if(!u)return null;try{let d=JSON.parse(u);return d.toolCalls?d:d.text!==void 0?{content:String(d.text)}:d.content!==void 0?{content:d.content}:null}catch{return null}}),i={get state(){return o.messages},get messages(){return o.messages},get status(){return o.status},get input(){return o.input??""},setInput(a){o.input=a},get streaming(){return o.status==="streaming"},get error(){return o.error??null},get usage(){return o.usage??null},get step(){return o.step??null},subscribe(a){return o.subs.add(a),()=>{o.subs.delete(a)}},set(){},update(){},notify:r,async send(a=o.input){let l=typeof e.url=="function"?e.url():e.url??"/api/chat",u={id:Me(),role:"user",content:a};o.messages=[...o.messages,u];let d={id:Me(),role:"assistant",content:"",status:"streaming"};o.messages=[...o.messages,d],o.status="streaming",r();let p=new AbortController;o.controller=p;try{let f=await fetch(l,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({messages:o.messages.map(y=>({role:y.role,content:y.content}))}),signal:p.signal});if(!f.ok||!f.body)throw new Error(`[vdom] chat \u8BF7\u6C42\u5931\u8D25 ${f.status}`);let m=f.body.getReader(),k=new TextDecoder,w="";for(;;){let{value:y,done:c}=await m.read();if(c)break;w+=k.decode(y,{stream:!0});let g=w.split(`
2
+ `);w=g.pop()??"";for(let x of g){if(!x.trim())continue;let v=s(x);v&&(v.content&&(d.content+=v.content,r()),v.toolCalls&&(d.toolCalls=[...d.toolCalls??[],...v.toolCalls],r()))}}d.status=void 0,o.status="idle"}catch(f){f.name!=="AbortError"?(d.status="error",o.status="error"):(d.status=void 0,o.status="idle")}finally{o.controller=null,r()}},stop(){o.controller?.abort()},retry(){let a=[...o.messages].reverse().find(l=>l.role==="user");a&&i.send(a.content)},reset(){o.messages=[],o.status="idle",r()},async approve(a,l,u){let d=!1;o.messages=o.messages.map(p=>({...p,toolCalls:p.toolCalls?.map(f=>d||f.approved?f:(d=!0,{...f,approved:a!=="rejected",feedback:l,...a==="modified"&&u?{args:u}:{}}))})),r()}};return i}function Qt(t){let e=t.getBrowser()?.window;return e?.matchMedia?e.matchMedia.bind(e):typeof matchMedia=="function"?matchMedia.bind(void 0):null}function He(t){let e=Qt(t);return!!(e&&e("(prefers-reduced-motion: reduce)").matches)}function yt(t,e,n){let o=t.getBrowser()?.window,r=He(t),s=n?.duration??400;if(s<=0)return{value:e,reset:()=>{}};let i=n?.ease==="linear"?m=>m:m=>1-Math.pow(1-m,3),a,l=e,u=r?e:0,d={get value(){return u},set value(m){u=m},reset:()=>{}},p=()=>{t.requestRender()},f=m=>{if(l=m,r){d.value=m,p();return}if(m===d.value)return;if(!o){d.value=m;return}a&&o.cancelAnimationFrame(a);let k=d.value,w=o.performance.now(),y=c=>{let g=Math.min(1,(c-w)/s);d.value=Math.round(k+(m-k)*i(g)),g<1?a=o.requestAnimationFrame(y):a=void 0,p()};a=o.requestAnimationFrame(y)};return d.reset=m=>{m===l&&a||f(m)},t.onUnmount(()=>{a&&o&&(o.cancelAnimationFrame(a),a=void 0)}),d.reset(e),d}function gt(t,e){let n=t.getBrowser()?.window,o=0,r=0,s=!1,i=0,a=p=>{s&&e.onMove(p,{x:p.clientX-o,y:p.clientY-r})},l=p=>{s&&p.pointerId===i&&(s=!1,n&&(n.removeEventListener("pointermove",a),n.removeEventListener("pointerup",l),n.removeEventListener("pointercancel",u)),e.onEnd?.(p))},u=p=>{!s||p.pointerId!==i||(s=!1,n&&(n.removeEventListener("pointermove",a),n.removeEventListener("pointerup",l),n.removeEventListener("pointercancel",u)),e.onEnd?.(p))},d=p=>{s||(p.preventDefault(),s=!0,i=p.pointerId,o=p.clientX,r=p.clientY,n&&(n.addEventListener("pointermove",a),n.addEventListener("pointerup",l),n.addEventListener("pointercancel",u)),e.onStart?.(p))};return t.onUnmount(()=>{s&&n&&(n.removeEventListener("pointermove",a),n.removeEventListener("pointerup",l),n.removeEventListener("pointercancel",u),s=!1)}),{onPointerDown:d}}function ht(t){let e=t.getBrowser()?.window,n=e?.visualViewport,o=n?.height??e?.innerHeight??0,r=n?.offsetTop??0,s=!1,i={get height(){return o},get offsetTop(){return r},get keyboardOpen(){return s}},a=()=>{let l=e?.visualViewport;o=l?.height??e?.innerHeight??0,r=l?.offsetTop??0,s=o<(e?.innerHeight??0)*.9,t.requestRender()};if(e){let l=e.visualViewport;l?.addEventListener?(l.addEventListener("resize",a),l.addEventListener("scroll",a),t.onUnmount(()=>{l.removeEventListener("resize",a),l.removeEventListener("scroll",a)})):(e.addEventListener("resize",a),t.onUnmount(()=>e.removeEventListener("resize",a)))}return i}function vt(t){return{useExternal(e){let n=t.getInstanceData(),o=n.get(e);if(!o){let r=e.subscribe(()=>t.requestRender());t.onUnmount(r),o={unsub:r},n.set(e,o)}return()=>e.state},signal:e=>Ke(e),hold:e=>t.onUnmount(e),useStableRef:(e,n)=>Fe(t,e,n),useOpen:(e,n)=>Be(t,e,n),onUnmount:e=>t.onUnmount(e),useGlobalKey:(e,n)=>qe(t,e,n),openPopup:e=>at(t,e),usePopupPosition:e=>We(t,e),useControlled:(e,n)=>lt(t,e,n),useScrollPosition:e=>dt(t,e),useInView:e=>ut(t,e),useControlledInput:(e,n)=>ft(t,e,n),useDragDrop:e=>pt(t,e),useMedia:e=>Ie(t,e),useBreakpoint:e=>ct(t,e),useChat:e=>mt(t,e),useTween:(e,n)=>yt(t,e,n),useDrag:e=>gt(t,e),useVisualViewport:()=>ht(t),useReducedMotion:()=>He(t)}}function Le(t,e,n){return e<=0?t:new Promise((o,r)=>{let s=setTimeout(()=>{r(new Error(`[vdom] \u5F02\u6B65\u8D85\u65F6\uFF08${e}ms\uFF09: ${n}`))},e);t.then(i=>{clearTimeout(s),o(i)},i=>{clearTimeout(s),r(i)})})}var Oe=0;function bt(){Oe++}function xt(){Oe>0&&Oe--}function en(t){return M(t)?{kind:"hole"}:Array.isArray(t)?{kind:"array",items:t}:{kind:"vnode",v:t}}function W(t){return t.kind==="hole"?null:t.kind==="array"?t.items:t.v}function ne(){let t=new Map;return{get:e=>t.get(e),set:(e,n)=>{t.set(e,n)},delete:e=>{t.delete(e)},keys:()=>[...t.keys()],asyncTimeout:15e3}}async function _(t,e,n,o,r,s,i,a,l){let u=t.type,d=i.get(r);if(d&&d.phase==="mounting")throw new Error(`[vdom] \u7EC4\u4EF6\u72B6\u6001\u673A\u8FDD\u4F8B\uFF1A${r} \u6B63\u5728 mount\uFF08\u5F02\u6B65\u5DE5\u5382\u671F\u95F4\u91CD\u590D\u5F15\u7528\u2014\u2014\u5FAA\u73AF\u4F9D\u8D56\uFF1F\uFF09`);if(d&&d.type!==u){if(Z(r,i),d.lastOutput!==void 0&&l){let y=W(d.lastOutput);N(y,j(y,r,r),r,l,i)}d=void 0}let p=!d;if(!d){let y=[],c=new Map,g={n:0},x=new Map,v=Object.create(s);v.onUnmount=S=>{y.push(S)},v.ui=vt({requestRender:()=>{v.render?.()},onUnmount:S=>{y.push(S)},getBrowser:()=>s.browser??null,nextHookIndex:()=>g.n++,getHookState:S=>c.get(S),setHookState:(S,h)=>{c.set(S,h)},getInstanceData:()=>x,scheduleAfterRender:S=>s.afterRender?.(S),getSharedContext:()=>s??null});let C={type:u,renderFn:(()=>null),onUnmounts:y,hookSeq:g,hookStates:c,renderBase:0,phase:"mounting"};i.set(r,C);let F;try{let S=u(t.props,v);F=await Le(Promise.resolve(S),i.asyncTimeout,`mount(${r})`)}catch(S){i.delete(r);for(let h of y.reverse())try{h()}catch(b){console.error("[vdom] mount \u6E05\u7406:",b)}throw S}d={type:u,renderFn:F,onUnmounts:y,hookSeq:g,hookStates:c,renderBase:0,phase:"mounted"},d.renderBase=g.n,i.set(r,d)}d.hookSeq.n=d.renderBase;let f;try{bt();let y;try{y=d.renderFn(t.props)}finally{xt()}f=await Le(Promise.resolve(y),i.asyncTimeout,`renderFn(${r})`)}catch(y){console.error(`[vdom] renderFn \u8D85\u65F6/\u9519\u8BEF\uFF08${r}\uFF09\u2014\u2014\u7EC4\u4EF6\u7EA7 hole \u964D\u7EA7\uFF08\u4E0B\u4E00\u62CD\u91CD\u8BD5\u81EA\u6108\uFF09:`,y),f=null}d.lastOutput=en(f);let m=Array.isArray(f),k=typeof f?.type=="function",w=M(f);return await a(f,m||k||w?r:e,m||k||w?0:n,o),p}function Z(t,e){let n=[...e.keys()].filter(o=>o===t||o.startsWith(t+".")).reverse();for(let o of n){let r=e.get(o);if(r){for(let s of r.onUnmounts.reverse())try{s()}catch(i){console.error("[vdom] onUnmount:",i)}e.delete(o)}}}function Ne(t,e,n){let o=new Map,r=i=>{switch(i.op){case"create":{let a=o.get(i.id);a&&a!=="el"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1Acreate ${i.id} \u7C7B\u578B\u51B2\u7A81\uFF08${a} \u2192 el\uFF09`),o.set(i.id,"el");break}case"createText":{let a=o.get(i.id);a&&a!=="text"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1AcreateText ${i.id} \u7C7B\u578B\u51B2\u7A81\uFF08${a} \u2192 text\uFF09`),o.set(i.id,"text");break}case"createAnchor":{let a=o.get(i.id);a&&a!=="anchor"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1AcreateAnchor ${i.id} \u7C7B\u578B\u51B2\u7A81\uFF08${a} \u2192 anchor\uFF09`),o.set(i.id,"anchor");break}case"insert":{let a=o.get(i.parent);a&&a!=="el"&&console.error(`[vdom] \u751F\u6210\u7AEF\u8FDD\u4F8B\uFF1Ainsert ${i.id} \u7684 parent ${i.parent} \u662F${a}\uFF08\u975E\u5BB9\u5668\u2014\u2014id \u7A7A\u95F4\u9519\u4F4D\uFF09`);break}default:break}t(i)},s=async(i,a,l,u)=>{let d=E(a,l);switch(U(i)){case"text":{let p=De(i);r({op:"createText",id:d,value:p}),r({op:"insert",id:d,parent:a,ref:u});return}case"hole":{oe(r,d,a,u);return}case"array":{let p=i;q(p,`\u6570\u7EC4\u5C55\u5F00\uFF08${a}\uFF09`);let f=l,m=u;for(let k of p){await s(k,a,f,m);let w=I(k);m=E(a,f+w-1),f+=w}return}case"fragment":{let p=V(i);q(p,`Fragment \u5C55\u5F00\uFF08${a}\uFF09`);let f=l,m=u;for(let k of p){await s(k,a,f,m);let w=I(k);m=E(a,f+w-1),f+=w}return}case"element":{await $e(i,d,a,u,r,s);return}case"component":{let p=i,f=p.key!==null?H(a,p.key):d;await _(p,a,l,u,f,e,n,s,t)&&t({op:"mount",compId:f});return}case"invalid":{console.warn(`[vdom] \u975E\u6CD5\u5B50\u8282\u70B9\u2014\u2014${ke(i)}`),oe(r,d,a,u,ke(i));return}}};return s}function be(t,e,n){let o=e??{},r=n??ne();return new ReadableStream({async start(s){await Ne(a=>s.enqueue(a),o,r)(t,"root",0,null),s.enqueue({op:"done",full:!0}),s.close()}})}function xe(t,e,n){if(t!==e)throw new Error(`${n??"assertEqual"}: ${JSON.stringify(t)} !== ${JSON.stringify(e)}`)}function wt(t,e){if(!t)throw new Error(e??"assertOk")}function Et(t){return t.nodeType===1?"element":t.nodeType===3?"text":t.nodeType===8?"hole":"comment"}function Br(t,e,n="\u540C\u6784\uFF08childNodes \u957F\u5EA6 + \u4F4D\u7F6E + \u7C7B\u578B\uFF09"){xe(t.childNodes.length,e.length,`${n}\u2014\u2014\u957F\u5EA6\uFF08\u584C\u7F29/\u591A\u4F59\u5373 bug\uFF09`);for(let o=0;o<e.length;o++)xe(Et(t.childNodes[o]),e[o],`${n}\u2014\u2014\u4F4D\u7F6E ${o}\uFF08\u7B2C i \u9879 \u27F7 childNodes \u7B2C i \u4E2A\uFF09`)}function qr(t,e,n,o=`\u4F4D\u7F6E ${e}`){wt(t.childNodes[e],`${o}\u2014\u2014\u5B58\u5728`),xe(Et(t.childNodes[e]),n,`${o}\u2014\u2014\u7C7B\u578B`)}function _r(t,e,n,o="\u590D\u7528\u9879 DOM \u5F15\u7528\u4FDD\u6301\uFF08\u4E0D\u91CD\u5EFA\uFF09"){let r=t.querySelector(e);wt(r,`${o}\u2014\u2014\u65B0\u9879\u5B58\u5728`),xe(r,n,o)}async function jr(t,e,n,o,r=2,s="\u5F80\u8FD4\u53EF\u9006\uFF08\u72B6\u6001\u4E0D\u6F02\u79FB\uFF09"){for(let i=0;i<r;i++)t(),await o(n),t(),await o(e)}async function Jr(t,e,n){let o=await t(e,n);return typeof o=="function"?o(e):o}async function Xr(t,e,n){let o=await t(e,n);return()=>typeof o=="function"?o(e):o}function we(t,e){if(t==null||typeof t!="object")return;if(Array.isArray(t)){for(let o of t)we(o,e);return}e(t);let n=t?.props?.children;n!=null&&we(n,e)}function Qr(t,e){let n;return we(t,o=>{!n&&e(o)&&(n=o)}),n}function Zr(t,e){let n=[];return we(t,o=>{typeof o?.props?.class=="string"&&o.props.class.split(" ").includes(e)&&n.push(o)}),n}var Ee=new WeakMap;async function tn(t,e,n){let o=t.ownerDocument;t.innerHTML="";let r=ne(),s=new te(t,o,r);Ee.set(t,{registry:r,applier:s});let i=be(e,n??{},r);for await(let a of i)s.apply(a)}async function ei(t,e,n,o,r){let s=Ee.get(t);if(o==null)return t.innerHTML="",null;if(s){let i=me(n,o,r??{},s.registry);for await(let a of i)s.applier.apply(a)}else await tn(t,o,r);return o}function ti(t){Ee.get(t)?.applier.dispose(),Ee.delete(t)}function ni(t,e){return Promise.resolve(t)}export{Br as assertIsomorphic,_r as assertKept,jr as assertRoundTrip,qr as assertSlot,ni as buildToDom,ti as disposeToDom,Zr as findByClass,Qr as findVNode,Xr as mountComponent,tn as mountToDom,ei as patchToDom,Jr as renderVNode,Et as shapeOf,we as walkVNode};
@@ -3697,14 +3697,16 @@ function usePopupPosition(env, options) {
3697
3697
  }
3698
3698
 
3699
3699
  // src/client/vdom/core/field/key.ts
3700
- function extractKey(props) {
3701
- const k = props?.key;
3700
+ function normalizeKey(k) {
3702
3701
  if (k === null || k === void 0) return null;
3703
3702
  if (typeof k === "string") return k;
3704
3703
  if (typeof k === "number") return String(k);
3705
3704
  console.warn(`[vdom] key \u5FC5\u987B\u662F string|number\u2014\u2014\u5F53\u524D ${typeof k}\uFF08\u5FFD\u7565\u2014\u2014\u4F4D\u7F6E\u8EAB\u4EFD\uFF09`);
3706
3705
  return null;
3707
3706
  }
3707
+ function extractKey(props) {
3708
+ return normalizeKey(props?.key);
3709
+ }
3708
3710
  function stripKey(props) {
3709
3711
  const p = { ...props ?? {} };
3710
3712
  delete p.key;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "weifuwu",
3
3
  "type": "module",
4
- "version": "0.87.0",
4
+ "version": "0.88.0",
5
5
  "description": "AI SaaS full-stack framework — backend HTTP + frontend VDOM + 129 components + CSS design system + SaaS foundation (auth/queue/AI). Zero-build, zero-dependency.",
6
6
  "exports": {
7
7
  ".": {
@@ -86,6 +86,7 @@
86
86
  "playwright": "^1.62.1",
87
87
  "postcss": "^8.5.19",
88
88
  "postgres": "^3.4.9",
89
+ "puppeteer-core": "^25.9.0",
89
90
  "tailwindcss": "^4.3.3"
90
91
  },
91
92
  "keywords": [