dsh-plugin-beyond-simulator 2.0.10 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -97,7 +97,7 @@ dsh plugin --profile web add dsh-plugin-beyond-simulator
97
97
  # 或,从 GitHub 默认分支源码安装
98
98
  dsh plugin --profile web add github:1475505/miliastra-beyond-simulator
99
99
  # 或,从本地安装包安装
100
- dsh plugin --profile web add ./release/dsh-plugin-beyond-simulator-2.0.10.tgz
100
+ dsh plugin --profile web add ./release/dsh-plugin-beyond-simulator-2.0.11.tgz
101
101
 
102
102
  dsh --profile web --dump-config
103
103
  dsh web
@@ -194,7 +194,7 @@ AI 可以直接获取工程状态、发送输入、读取日志和截图,无
194
194
 
195
195
  - **模拟器通过不等于真机通过。** 它用于提前发现脚本、布局和交互问题,最终仍需在千星奇域中验证。
196
196
  - **服务端模拟覆盖变量与信号。** 1–8 人试玩是本地多客户端模拟,不包含完整官方服务端节点图或真实网络联机。
197
- - **图片预览支持基础图元与白名单静态素材。** `100001–100006` 使用代理图形,另有 1,516 个白名单 ID 可从指定素材源按需下载;编辑器、试玩及 AI 截图共用本地缓存,浏览器复用 HTTP 缓存。选择图片后可在属性面板「重新下载此素材」。未列入或加载失败显示缺失提示;九宫格和动效不在本轮范围。详见 [素材缓存与预览](studio/docs/image-assets.md)。
197
+ - **图片预览支持基础图元、静态素材和元件图标。** 静态来源 `100001–100006` 使用代理图形,另有 1,516 个静态图片及 2,720 个元件图标 ID 可按需下载。图片类型支持「基础/拉伸」:基础整图缩放,拉伸按素材边界三切片/九切片;全零边界按基础显示。编辑器、试玩及 AI 截图共用按来源隔离的本地缓存,浏览器复用 HTTP 缓存。属性面板可「重新下载此素材」。未知来源/ID 或加载失败显示缺失提示;动效及 3D 模型不在此预览范围。详见 [素材缓存与预览](studio/docs/image-assets.md)。
198
198
  - **Lua 2D 音效可在试玩页播放。** 支持 `game.PlayAudio2D`、`game.StopAudio`、`game.IsAudioAlive`,固定 1,997 个音频 ID,按需下载 MP3 并复用磁盘/浏览器缓存。首次可点击「开启声音」解锁;时长及暂停采用明确的模拟器策略。详见 [音频缓存与接口](studio/docs/audio-assets.md)。
199
199
  - **GIA 支持已验证的内容子集。** 部分控件属性与脚本挂载关系无法完整交换,导出时请关注提示,并保留原始文件及完整 JSON 存档。
200
200
 
@@ -1,4 +1,4 @@
1
- (()=>{function lt(n){let c=n.createElement;return function({snap:g,request:e,patch:b,prepare:P,refresh:j}){let M={version:1,workspaceDir:"",clientImportRoot:"",clientSubdir:""},[C,S]=n.useState(g.scriptSync||M),[L,F]=n.useState(g.storage?.path||"qxqy-simulator.save.json"),[ee,se]=n.useState([]),[J,v]=n.useState(null),[q,U]=n.useState([]),[k,H]=n.useState(null),[Z,V]=n.useState(""),[E,ye]=n.useState(!1);n.useEffect(()=>{S(g.scriptSync||M),v(null)},[JSON.stringify(g.scriptSync),g.storage?.path]),n.useEffect(()=>{v(null)},[g.version,g.asset?.type]),n.useEffect(()=>{g.storage?.path&&F(g.storage.path)},[g.storage?.path]);let qe=async u=>{ye(!0),V("");try{await u()}catch(_){V(_.message||String(_))}finally{ye(!1)}},we=(u,_={})=>e("script-sync",{action:u,args:_});async function X(){v(null),H(null);let u=await P();await e("save",{path:L,expectedRevision:u.version}),await j();let _=await we("preview");v(_),U(_.rows.filter(K=>!K.error&&K.status!=="\u672A\u53D8\u5316").map(K=>K.id))}let W=JSON.stringify(C)!==JSON.stringify(g.scriptSync||M),xe=(u,_)=>c("label",{className:"qxsim-field",key:u},c("span",null,_),c("input",{type:"text",value:C[u],disabled:E,onChange:K=>{S({...C,[u]:K.target.value}),v(null)}})),Q=C.clientImportRoot.replaceAll("\\","/").match(/BeyondLocal\/([^/]+)\/Beyond_Local_Save_Level\/([^/]+)/),ie=(u,_,K=!1)=>c("button",{type:"button",className:"qxsim-action",disabled:E||K,onClick:()=>void qe(_)},u);return c("details",{className:"qxsim-section",style:{flexShrink:0,maxHeight:"55%",overflow:"auto",margin:"5px 10px"}},c("summary",null,`\u5B9E\u673A\u811A\u672C\u540C\u6B65 \xB7 ${g.scriptSync?"\u5DF2\u914D\u7F6E\uFF08\u624B\u52A8\u590D\u5236\uFF09":"\u672A\u914D\u7F6E"}`),c("div",{className:"qxsim-section-body"},c("p",null,"\u76EE\u5F55\u4F4D\u4E8E\u6A21\u62DF\u5668\u5BBF\u4E3B\u673A\u5668\u3002\u4FDD\u5B58\u5B58\u6863\u540E\u68C0\u67E5\u5DEE\u5F02\uFF0C\u786E\u8BA4\u624D\u590D\u5236\uFF1B\u4E4B\u540E\u8BF7\u5728\u5343\u661F\u6C99\u7BB1\u4FDD\u5B58\u5E76\u8BD5\u73A9\u3002\u65B0\u589E\u811A\u672C\u4ECD\u9700\u5EFA\u7ACB\u6620\u5C04\u3002"),xe("workspaceDir","\u5DE5\u4F5C\u533A\u811A\u672C\u76EE\u5F55\uFF08\u76F8\u5BF9\u8DEF\u5F84\uFF1B\u7559\u7A7A\u8868\u793A\u5DE5\u4F5C\u533A\u6839\u76EE\u5F55\uFF09"),xe("clientImportRoot","\u5B9E\u673A\u5BFC\u5165\u6839\u76EE\u5F55\uFF08default_import_file \u7684\u5B8C\u6574\u8DEF\u5F84\uFF09"),xe("clientSubdir","\u5B9E\u673A\u5BF9\u5E94\u5B50\u76EE\u5F55\uFF08\u901A\u5E38\u4E0E\u5DE5\u4F5C\u533A\u811A\u672C\u76EE\u5F55\u76F8\u540C\uFF0C\u4FDD\u7559 GIA \u8DEF\u5F84\uFF09"),Q?c("p",null,`UID\uFF1A${Q[1]} \xB7 \u7F16\u8F91\u5668 ID\uFF1A${Q[2]}`):null,c("div",{style:{display:"flex",gap:6,flexWrap:"wrap"}},ie("\u53D1\u73B0\u672C\u673A\u76EE\u5F55",async()=>{let u=await we("discover");se(u.candidates),u.candidates.length||V("\u672A\u53D1\u73B0\u76EE\u5F55\uFF0C\u53EF\u7C98\u8D34\u5B8C\u6574\u8DEF\u5F84\u3002")}),ie("\u4FDD\u5B58\u76EE\u5F55\u914D\u7F6E",async()=>{await P();let u=await b({op:"setScriptSync",config:C});await e("save",{path:L,expectedRevision:u.version}),await j(),v(null)},!C.clientImportRoot||!L.trim()),ie("\u6E05\u9664\u914D\u7F6E",async()=>{await P();let u=await b({op:"setScriptSync",config:null});await e("save",{path:L,expectedRevision:u.version}),await j(),v(null)},!g.scriptSync||!L.trim())),ee.length?c("label",{className:"qxsim-field"},"\u53D1\u73B0\u7684\u76EE\u5F55",c("select",{value:"",disabled:E,onChange:u=>{S({...C,clientImportRoot:u.target.value}),v(null)}},c("option",{value:""},"\u9009\u62E9 UID / \u7F16\u8F91\u5668\u2026"),ee.map(u=>c("option",{key:u.path,value:u.path},`${u.uid} / ${u.editorId} \xB7 ${u.path}`)))):null,c("label",{className:"qxsim-field",style:{marginTop:8}},c("span",null,"\u5B8C\u6574\u5B58\u6863\u4FDD\u5B58\u8DEF\u5F84"),c("input",{type:"text",value:L,disabled:E,onChange:u=>{F(u.target.value),v(null)}})),ie("\u4FDD\u5B58\u5B58\u6863\u5E76\u68C0\u67E5\u5DEE\u5F02",X,!g.scriptSync||W||!L.trim()),W?c("p",null,"\u76EE\u5F55\u914D\u7F6E\u5DF2\u4FEE\u6539\uFF0C\u8BF7\u5148\u4FDD\u5B58\u76EE\u5F55\u914D\u7F6E\u3002"):null,Z?c("p",{role:"alert",style:{color:"var(--danger)"}},Z):null,J?c("section",{"aria-label":"\u811A\u672C\u540C\u6B65\u786E\u8BA4"},c("p",null,`\u76EE\u6807\u76EE\u5F55\uFF1A${J.root}`),J.pendingGuidChanges?c("p",{role:"alert"},"\u5C1A\u6709\u63A7\u4EF6\u7D22\u5F15\u5F15\u7528\u5F85\u6838\u5BF9\uFF0C\u8BF7\u5904\u7406\u5E76\u786E\u8BA4\u8BB0\u5F55\u540E\u518D\u540C\u6B65\u3002"):null,J.rows.map(u=>c("div",{key:u.id,style:{borderTop:"1px solid var(--line)",padding:6}},c("label",null,c("input",{type:"checkbox",disabled:E||!!u.error||u.status==="\u672A\u53D8\u5316",checked:q.includes(u.id),onChange:_=>U(_.target.checked?[...q,u.id]:q.filter(K=>K!==u.id))}),` ${u.path} \xB7 ${u.sourceKind} \xB7 ${u.status}`),c("div",{style:{overflowWrap:"anywhere"}},u.error||`\u2192 ${u.target}`),u.sourceMismatch?c("div",{className:"qxsim-note"},"\u5B58\u6863\u6E90\u7801\u4E0E\u5DE5\u4F5C\u533A\u6587\u4EF6\u4E0D\u540C\uFF1B\u5F53\u524D\u4F7F\u7528\u5B58\u6863\u6E90\u7801\u3002",c("details",null,c("summary",null,"\u67E5\u770B\u5DE5\u4F5C\u533A\u6587\u4EF6"),c("pre",{style:{maxHeight:200,overflow:"auto"}},u.diskSource)),ie("\u4ECE\u5DE5\u4F5C\u533A\u6587\u4EF6\u66F4\u65B0\u5B58\u6863\u6E90\u7801",async()=>{await P(),await b({op:"updateScript",id:u.id,source:u.diskSource}),v(null)})):null,!u.error&&u.status!=="\u672A\u53D8\u5316"?c("details",null,c("summary",null,"\u67E5\u770B\u590D\u5236\u524D\u540E\u5185\u5BB9"),c("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8}},c("div",null,"\u5B9E\u673A\u5F53\u524D\u5185\u5BB9",c("pre",{style:{maxHeight:240,overflow:"auto"}},u.beforeSource)),c("div",null,"\u5C06\u5199\u5165\u7684\u5185\u5BB9",c("pre",{style:{maxHeight:240,overflow:"auto"}},u.source)))):null)),c("p",null,`\u786E\u8BA4\u590D\u5236 ${q.length} \u4E2A\u811A\u672C\uFF0C\u5176\u4E2D\u8986\u76D6 ${J.rows.filter(u=>q.includes(u.id)&&u.status==="\u8986\u76D6").length} \u4E2A\u3002\u8986\u76D6\u524D\u5907\u4EFD\uFF0C\u4E0D\u5220\u9664\u5B9E\u673A\u989D\u5916\u6587\u4EF6\u3002`),c("div",{style:{display:"flex",gap:6}},ie("\u53D6\u6D88",async()=>v(null)),ie(`\u786E\u8BA4\u590D\u5236 ${q.length} \u4E2A\u811A\u672C`,async()=>{let u=J;v(null),await P(),H(await e("script-sync-apply",{planId:u.id,scriptIds:q,confirmed:!0}))},!q.length||!!J.pendingGuidChanges))):null,k?c("div",{role:"status"},c("strong",null,k.completed?"\u540C\u6B65\u5B8C\u6210":"\u90E8\u5206\u6587\u4EF6\u540C\u6B65\u5931\u8D25"),c("p",null,`${k.at} \xB7 \u5907\u4EFD\u4F4D\u7F6E\uFF1A${k.backupRoot}`),c("ul",null,k.results.map(u=>c("li",{key:u.id},`${u.target}\uFF1A${u.status}${u.error?` \xB7 ${u.error}`:""}`)))):null))}}function Pe(n){try{n?.close()}catch{}}function ra(){if(window.location.protocol==="dsh-app:")return null;let n;try{return n=window.open("about:blank","_blank"),!n||n.closed?null:(n.document.write('<!doctype html><meta charset="utf-8"><title>\u6B63\u5728\u51C6\u5907\u8BD5\u73A9\u2026</title><p>\u6B63\u5728\u4FDD\u5B58\u9879\u76EE\u5E76\u51C6\u5907\u8BD5\u73A9\u2026</p>'),n)}catch{return Pe(n),null}}function ct(n){let c=n.createElement,N=new Map;function g({entry:e,api:b,onClosed:P}){let j=n.useRef(null),M=n.useRef(null),[C,S]=n.useState(!1),[L,F]=n.useState(""),[ee,se]=n.useState(!1);n.useLayoutEffect(()=>{let v={closing:!1,stopped:!1,pending:null,controller:null,requests:new Set};M.current=v;let q=j.current,U=q.querySelector("iframe"),k=!0,H=()=>{if(v.stopped)return Promise.resolve();if(v.closing=!0,!v.controller)return v.stopped=!0,Promise.resolve();if(!v.pending){let E=(async()=>{v.controller?.quiesce(),await Promise.allSettled([...v.requests]),await b(e.sessionId,"play",{action:"stop",args:{}}),v.stopped=!0})().finally(()=>{v.pending=null,N.get(e.sessionId)===E&&N.delete(e.sessionId)});v.pending=E,N.set(e.sessionId,E)}return v.pending};v.close=async()=>{if(!(v.pending||v.stopped)){S(!0),F("");try{await H(),k&&P()}catch(E){k&&(F(`\u505C\u6B62\u8BD5\u73A9\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\uFF1A${E?.message||E}`),S(!1))}}};let Z=E=>{E.source!==U.contentWindow||E.data?.type!=="qxqy-play-close"||E.data.sessionId!==e.sessionId||v.close()},V=E=>{E.preventDefault(),v.close()};return window.addEventListener("message",Z),q.addEventListener("cancel",V),q.showModal(),()=>{k=!1,window.removeEventListener("message",Z),q.removeEventListener("cancel",V),q.close(),H().catch(E=>console.error("Embedded play cleanup failed",E)),e.returnFocus?.isConnected&&e.returnFocus.focus()}},[e,b,P]);function J(v){let q=M.current;if(!q.closing)try{let U=v.currentTarget,k=U.contentWindow?.qxqyEmbeddedPlay;if(!k)throw new Error("\u8BD5\u73A9\u9875\u672A\u80FD\u52A0\u8F7D\uFF0C\u8BF7\u8FD4\u56DE\u7F16\u8F91\u540E\u91CD\u8BD5\u3002");q.controller=k,se(!0),U.focus(),k.focus();let H=(Z,V={})=>{if(q.closing)return Promise.reject(new Error("\u8BD5\u73A9\u6B63\u5728\u5173\u95ED"));let E=b(e.sessionId,"play",{action:Z,args:V});return q.requests.add(E),E.then(()=>q.requests.delete(E),()=>q.requests.delete(E)),E};k.start(H).catch(Z=>{q.closing||F(Z?.message||String(Z))})}catch(U){F(U?.message||String(U))}}return c("dialog",{ref:j,className:"qxsim-play-overlay","aria-label":"\u5185\u5D4C\u8BD5\u73A9","aria-modal":!0},c("header",{className:"qxsim-play-header"},c("span",{role:"status"},C?"\u6B63\u5728\u505C\u6B62\u8BD5\u73A9\u2026":ee?"\u5185\u5D4C\u8BD5\u73A9":"\u6B63\u5728\u8F7D\u5165\u8BD5\u73A9\u2026"),c("button",{className:"qxsim-action",type:"button",disabled:C,onClick:()=>void M.current?.close?.()},"\u5173\u95ED\u8BD5\u73A9")),L?c("div",{className:"qxsim-play-error",role:"alert"},L):null,c("iframe",{title:"\u5343\u661F\u6C99\u7BB1\u8BD5\u73A9",src:e.url,onLoad:J,tabIndex:0}))}return function({sessionId:b,api:P,playUrl:j,onError:M}){let C=n.useRef(null),[S,L]=n.useState(!1),[F,ee]=n.useState(null),se=n.useCallback(()=>ee(null),[]);n.useEffect(()=>{let v={active:!0,pending:!1,popup:null};return C.current=v,L(!1),ee(null),()=>{v.active=!1,Pe(v.popup)}},[b]);async function J(v){let q=C.current;if(!q?.active||q.pending||F)return;q.pending=!0;let U=document.activeElement;L(!0);try{let k=ra();if(q.popup=k,await N.get(b),!q.active||(await v(),!q.active))return;let H=new URL(j(b),window.location.href);if(k){try{if(k.closed)throw new Error("Play window closed");k.location.replace(H.href)}catch{Pe(k),k=null}q.popup=null}k||(H.searchParams.set("embedded","1"),ee({sessionId:b,url:H.href,returnFocus:U}))}catch(k){Pe(q.popup),q.popup=null,q.active&&M(k?.message||String(k))}finally{q.pending=!1,q.active&&L(!1)}}return{open:J,opening:S,overlay:F?.sessionId===b?c(g,{key:b,entry:F,api:P,onClosed:se}):null}}}var sa="sprite-v1",oa="/qxqy-assets/",la=[[100001,100006],[100101,100213],[101001,101018],[101020,101028],[101030,101046],[101048,101048],[101050,101054],[101056,101080],[102001,102052],[103001,103148],[104001,104010],[105001,105140],[105142,105219],[105221,105317],[106001,106047],[106049,106096],[107001,107007],[107010,107020],[107031,107092],[107094,107180],[107183,107201],[107203,107205],[107207,107228],[107231,107278],[107280,107402],[108001,108017],[108019,108020],[109001,109031],[109033,109034],[109036,109075],[110001,110053],[111001,111139],[112001,112042]];function be(n){return Number.isSafeInteger(n)&&n>100006&&la.some(([c,N])=>n>=c&&n<=N)}function dt(n,c=0){return`${oa}${sa}/${n}.png${c?`?refresh=${c}`:""}`}var He="qxqy-image-refresh",re=new Map,ve=new Map,Ve=new Set,ca=16777216,pt=!1;function mt(n,c){ve.set(n,c),re.delete(n);for(let N of Ve)N(n)}function Ye(){if(!(pt||typeof window>"u")){pt=!0;try{for(let[n,c]of Object.entries(JSON.parse(localStorage.getItem(He)||"{}")))ve.set(Number(n),c)}catch{}window.addEventListener("storage",n=>{if(n.key===He)try{for(let[c,N]of Object.entries(JSON.parse(n.newValue||"{}")))ve.get(Number(c))!==N&&mt(Number(c),N)}catch{}})}}function ut(n){return Ye(),Ve.add(n),()=>Ve.delete(n)}function xt(n){Ye(),mt(n,Date.now());try{localStorage.setItem(He,JSON.stringify(Object.fromEntries(ve)))}catch{}}function gt(n){if(Ye(),!be(n))return Promise.reject(new Error("Image ID is not in the preview allowlist"));let c=re.get(n);if(c&&(!c.failed||Date.now()<c.retryAt))return re.delete(n),re.set(n,c),c.promise;let N={pixels:0,failed:!1};return N.promise=new Promise((g,e)=>{let b=new Image,P=setTimeout(()=>{b.src="",j(new Error("\u56FE\u7247\u52A0\u8F7D\u8D85\u65F6"))},45e3);function j(M){if(clearTimeout(P),b.onload=b.onerror=null,M){N.failed=!0,N.retryAt=Date.now()+6e4,e(M);return}N.pixels=b.width*b.height;let C=[...re.values()].reduce((S,L)=>S+L.pixels,0);for(let[S,L]of re){if(C<=ca&&re.size<=128)break;S!==n&&(!L.pixels&&!L.failed||(re.delete(S),C-=L.pixels))}g(b)}b.onload=()=>j(),b.onerror=()=>j(new Error(`\u56FE\u7247 ${n} \u52A0\u8F7D\u5931\u8D25\uFF0C\u53EF\u5728\u5C5E\u6027\u9762\u677F\u5237\u65B0\u7D20\u6750`)),b.src=dt(n,ve.get(n))}),re.set(n,N),N.promise}function ft(n,c,N){let g=Number(c??4294967295)>>>0;if((g&16777215)===16777215)return n;let e=N(n.width,n.height),b=e.getContext("2d");b.drawImage(n,0,0);let P=b.getImageData(0,0,e.width,e.height),j=g>>>16&255,M=g>>>8&255,C=g&255;for(let S=0;S<P.data.length;S+=4)P.data[S]=Math.round(P.data[S]*j/255),P.data[S+1]=Math.round(P.data[S+1]*M/255),P.data[S+2]=Math.round(P.data[S+2]*C/255);return b.putImageData(P,0,0),e}function ht(n,c,N){if(n.fillType!=="Horizontal"&&n.fillType!=="Vertical")return null;let g=Number(n.fillAmount??1),e=Number.isFinite(g)?Math.max(0,Math.min(1,g)):1;if(n.fillType==="Horizontal"){let P=c*e;return{x:n.fillHorizontalType==="Right"?c/2-P:-c/2,y:-N/2,width:P,height:N}}let b=N*e;return{x:-c/2,y:n.fillVerticalType==="Top"?-N/2:N/2-b,width:c,height:b}}function da(n,c){let N=document.createElement("canvas");return N.width=n,N.height=c,N}function bt(n){let c=n.createElement;return function({item:g}){let e=n.useRef(null),[b,P]=n.useState({image:null,error:""}),[j,M]=n.useState(0);return n.useEffect(()=>ut(C=>{C===g.imageId&&M(S=>S+1)}),[g.imageId]),n.useEffect(()=>{let C=!0;return P({image:null,error:""}),gt(g.imageId).then(S=>{C&&P({image:S,error:""})},S=>{C&&P({image:null,error:S.message})}),()=>{C=!1}},[g.imageId,j]),n.useEffect(()=>{let C=e.current;if(!b.image||!C)return;let S=ft(b.image,g.imageColor,da);C.width=S.width,C.height=S.height;let L=C.getContext("2d"),F=g.enableFill?ht(g,C.width,C.height):null;F&&(L.beginPath(),L.rect(F.x+C.width/2,F.y+C.height/2,F.width,F.height),L.clip()),L.globalAlpha=(Number(g.imageColor??4294967295)>>>24&255)/255,L.drawImage(S,0,0)},[b.image,g.imageColor,g.enableFill,g.fillType,g.fillHorizontalType,g.fillVerticalType,g.fillAmount]),b.image?c("canvas",{ref:e,"data-image-id":g.imageId,"aria-label":`\u56FE\u7247 ${g.imageId}`,style:{display:"block",position:"absolute",inset:0,width:"100%",height:"100%"}}):c("span",{className:"qxsim-box-label",title:b.error,role:b.error?"status":void 0},b.error?`\u56FE\u7247 ${g.imageId} \u52A0\u8F7D\u5931\u8D25`:`\u52A0\u8F7D\u56FE\u7247 ${g.imageId}\u2026`)}}function vt(n,{api:c,playUrl:N,saveToWorkspace:g=!1}){let e=n.createElement,b=lt(n),P=ct(n),j=bt(n),M="qxqy-simulator-style",C=`
1
+ (()=>{function bt(i){let n=i.createElement;return function({snap:c,request:e,patch:g,prepare:v,refresh:k}){let I={version:1,workspaceDir:"",clientImportRoot:"",clientSubdir:""},[C,y]=i.useState(c.scriptSync||I),[L,$]=i.useState(c.storage?.path||"qxqy-simulator.save.json"),[M,T]=i.useState([]),[G,w]=i.useState(null),[S,_]=i.useState([]),[N,F]=i.useState(null),[A,B]=i.useState(""),[E,Q]=i.useState(""),[Y,pe]=i.useState(!1),se=i.useId();i.useEffect(()=>{y(c.scriptSync||I),w(null)},[JSON.stringify(c.scriptSync),c.storage?.path]),i.useEffect(()=>{w(null)},[c.version,c.asset?.type]),i.useEffect(()=>{c.storage?.path&&$(c.storage.path)},[c.storage?.path]);let X=async m=>{pe(!0),Q(""),B("");try{await m()}catch(Z){Q(Z.message||String(Z))}finally{pe(!1)}},W=(m,Z={})=>e("script-sync",{action:m,args:Z});async function ge(){w(null),F(null);let m=await v();await e("save",{path:L,expectedRevision:m.version}),await k();let Z=await W("preview");w(Z),_(Z.rows.filter(te=>!te.error&&te.status!=="\u672A\u53D8\u5316").map(te=>te.id))}let ee=JSON.stringify(C)!==JSON.stringify(c.scriptSync||I),re=(m,Z,te,be)=>n("label",{className:"qxsim-field",key:m},n("span",null,Z),n("input",{type:"text",value:C[m],placeholder:te,"aria-label":Z,"aria-describedby":`${se}-${m}`,disabled:Y,onChange:He=>{y({...C,[m]:He.target.value}),w(null),B("")}}),n("small",{id:`${se}-${m}`},be)),he=C.clientImportRoot.replaceAll("\\","/").match(/BeyondLocal\/([^/]+)\/Beyond_Local_Save_Level\/([^/]+)/),me=m=>m.trim().replaceAll("\\","/").replace(/^\.$/,""),ue=me(C.workspaceDir)?`${me(C.workspaceDir)}/`:"",ne=c.scripts?.find(m=>m.path.replaceAll("\\","/").startsWith(ue)&&m.path.toLowerCase().endsWith(".lua"))?.path.replaceAll("\\","/")||`${ue}main.lua`,Le=[C.clientImportRoot.trim().replaceAll("\\","/").replace(/\/+$/,"")||"\u3010\u5343\u661F\u6C99\u7BB1\u811A\u672C\u6587\u4EF6\u5939\u3011",me(C.clientSubdir),ne.slice(ue.length)].filter(Boolean).join("/"),Te={\u65B0\u589E:"\u65B0\u589E\u6587\u4EF6",\u8986\u76D6:"\u66F4\u65B0\u5DF2\u6709\u6587\u4EF6",\u672A\u53D8\u5316:"\u5185\u5BB9\u76F8\u540C\uFF0C\u65E0\u9700\u66F4\u65B0",\u9519\u8BEF:"\u65E0\u6CD5\u590D\u5236"},Me={\u5B58\u6863\u6E90\u7801:"\u5B58\u6863\u91CC\u7F16\u8F91\u7684\u4EE3\u7801",\u5DE5\u4F5C\u533A\u6587\u4EF6:"\u9879\u76EE\u4E2D\u7684 .lua \u6587\u4EF6"},oe=(m,Z,te=!1)=>n("button",{type:"button",className:"qxsim-action",disabled:Y||te,onClick:()=>void X(Z)},m);return n("details",{className:"qxsim-section",style:{flexShrink:0,maxHeight:"55%",overflow:"auto",margin:"5px 10px"}},n("summary",null,`\u5B9E\u673A\u811A\u672C\u540C\u6B65 \xB7 ${c.scriptSync?"\u5DF2\u8BBE\u7F6E\u6587\u4EF6\u5939":"\u5148\u8BBE\u7F6E\u6587\u4EF6\u5939"}`),n("div",{className:"qxsim-section-body"},n("p",null,"\u628A\u5F53\u524D\u5B58\u6863\u91CC\u7684 Lua \u811A\u672C\u590D\u5236\u5230\u5343\u661F\u6C99\u7BB1\uFF0C\u7528\u4E8E\u6E38\u620F\u5185\u6D4B\u8BD5\u3002\u64CD\u4F5C\u987A\u5E8F\uFF1A\u586B\u5199\u811A\u672C\u4F4D\u7F6E \u2192 \u4FDD\u5B58\u8BBE\u7F6E \u2192 \u4FDD\u5B58\u5B58\u6863\u5E76\u67E5\u770B\u66F4\u65B0 \u2192 \u786E\u8BA4\u590D\u5236\u3002"),re("workspaceDir","\u9879\u76EE\u811A\u672C\u6587\u4EF6\u5939","\u4F8B\u5982 workspace/my-game\uFF1B\u4E5F\u53EF\u4EE5\u7559\u7A7A","\u586B\u5199\u5728\u5DE5\u4F5C\u533A\u91CC\u7684\u4F4D\u7F6E\uFF0C\u4F8B\u5982 workspace/my-game\uFF1B\u7559\u7A7A\u8868\u793A\u4F7F\u7528\u5DE5\u4F5C\u533A\u672C\u8EAB\u3002"),re("clientImportRoot","\u5343\u661F\u6C99\u7BB1\u811A\u672C\u6587\u4EF6\u5939","\u7C98\u8D34\u4EE5 default_import_file \u7ED3\u5C3E\u7684\u5B8C\u6574\u8DEF\u5F84","\u5173\u5361\u5B58\u653E\u5916\u90E8 Lua \u811A\u672C\u7684\u6587\u4EF6\u5939\uFF0C\u53EF\u70B9\u51FB\u300C\u53D1\u73B0\u672C\u673A\u76EE\u5F55\u300D\u67E5\u627E\u3002\u8BF7\u586B\u5199\u8FD0\u884C\u6A21\u62DF\u5668\u90A3\u53F0\u7535\u8111\u4E0A\u7684\u5B8C\u6574\u8DEF\u5F84\u3002"),re("clientSubdir","\u6E38\u620F\u91CC\u7684\u9879\u76EE\u5B50\u6587\u4EF6\u5939","\u4F8B\u5982 workspace/my-game\uFF1B\u4E5F\u53EF\u4EE5\u7559\u7A7A",n(i.Fragment,null,"\u4E00\u822C\u548C\u201C\u9879\u76EE\u811A\u672C\u6587\u4EF6\u5939\u201D\u586B\u4E00\u6837\u7684\u5185\u5BB9\uFF0C\u4FDD\u7559\u539F\u6765\u7684\u6587\u4EF6\u4F4D\u7F6E\u3002\u7559\u7A7A\u5219\u76F4\u63A5\u653E\u8FDB\u5343\u661F\u6C99\u7BB1\u811A\u672C\u6587\u4EF6\u5939\u3002",n("span",{"aria-label":"\u590D\u5236\u8DEF\u5F84\u793A\u4F8B",style:{display:"block",overflowWrap:"anywhere"}},"\u590D\u5236\u793A\u4F8B\uFF1A",n("code",null,ne)," \u2192 ",n("code",null,Le)))),he?n("p",null,`\u6E38\u620F\u8D26\u53F7 UID\uFF1A${he[1]} \xB7 \u5173\u5361\u76EE\u5F55\u7F16\u53F7\uFF1A${he[2]}`):null,n("div",{style:{display:"flex",gap:6,flexWrap:"wrap"}},oe("\u53D1\u73B0\u672C\u673A\u76EE\u5F55",async()=>{let m=await W("discover");T(m.candidates),m.candidates.length?B(`\u627E\u5230 ${m.candidates.length} \u4E2A\u6E38\u620F\u811A\u672C\u6587\u4EF6\u5939\uFF0C\u8BF7\u9009\u62E9\u8981\u66F4\u65B0\u7684\u8D26\u53F7\u548C\u5173\u5361\u3002`):Q("\u6CA1\u6709\u627E\u5230\u6E38\u620F\u811A\u672C\u6587\u4EF6\u5939\u3002\u53EF\u4EE5\u624B\u52A8\u7C98\u8D34 default_import_file \u6587\u4EF6\u5939\u7684\u5B8C\u6574\u8DEF\u5F84\uFF1B\u5982\u679C\u8FD8\u6CA1\u5BFC\u5165\u811A\u672C\uFF0C\u8BF7\u5148\u5728\u5343\u661F\u6C99\u7BB1\u5B8C\u6210\u5BFC\u5165\u3002")}),oe("\u4FDD\u5B58\u8BBE\u7F6E",async()=>{await v();let m=await g({op:"setScriptSync",config:C});await e("save",{path:L,expectedRevision:m.version}),await k(),w(null),F(null),B("\u811A\u672C\u4F4D\u7F6E\u5DF2\u4FDD\u5B58\u3002\u4E0B\u4E00\u6B65\u70B9\u51FB\u300C\u4FDD\u5B58\u5B58\u6863\u5E76\u67E5\u770B\u66F4\u65B0\u300D\u3002")},!C.clientImportRoot.trim()||!L.trim()),oe("\u6E05\u9664\u8BBE\u7F6E",async()=>{await v();let m=await g({op:"setScriptSync",config:null});await e("save",{path:L,expectedRevision:m.version}),await k(),w(null),F(null),B("\u5DF2\u6E05\u9664\u811A\u672C\u4F4D\u7F6E\u8BBE\u7F6E\u3002\u6E38\u620F\u91CC\u7684\u811A\u672C\u6587\u4EF6\u4ECD\u7136\u4FDD\u7559\u3002")},!c.scriptSync||!L.trim())),M.length?n("label",{className:"qxsim-field"},"\u9009\u62E9\u8981\u66F4\u65B0\u7684\u8D26\u53F7\u548C\u5173\u5361",n("select",{value:"",disabled:Y,onChange:m=>{y({...C,clientImportRoot:m.target.value}),w(null),B("")}},n("option",{value:""},"\u8BF7\u9009\u62E9\u6E38\u620F\u8D26\u53F7\u548C\u5173\u5361\u6587\u4EF6\u5939\u2026"),M.map(m=>n("option",{key:m.path,value:m.path},`\u8D26\u53F7 ${m.uid} / \u5173\u5361\u76EE\u5F55 ${m.editorId} \xB7 ${m.path}`)))):null,n("label",{className:"qxsim-field",style:{marginTop:8}},n("span",null,"\u6A21\u62DF\u5668\u5B58\u6863\u6587\u4EF6"),n("input",{type:"text",value:L,placeholder:"\u4F8B\u5982 my-game.save.json","aria-label":"\u6A21\u62DF\u5668\u5B58\u6863\u6587\u4EF6","aria-describedby":`${se}-archive`,disabled:Y,onChange:m=>{$(m.target.value),w(null),B("")}}),n("small",{id:`${se}-archive`},"\u586B\u5199\u5DE5\u4F5C\u533A\u91CC\u7684\u5B58\u6863\u6587\u4EF6\u540D\u6216\u8DEF\u5F84\u3002\u4FDD\u5B58\u8BBE\u7F6E\u65F6\u4F1A\u4E00\u8D77\u4FDD\u5B58\u9879\u76EE\uFF0C\u4E0B\u6B21\u6253\u5F00\u5B58\u6863\u5373\u53EF\u590D\u7528\u3002")),oe("\u4FDD\u5B58\u5B58\u6863\u5E76\u67E5\u770B\u66F4\u65B0",ge,!c.scriptSync||ee||!L.trim()),c.scriptSync?ee?n("p",null,"\u811A\u672C\u4F4D\u7F6E\u5DF2\u6539\u52A8\uFF0C\u8BF7\u5148\u70B9\u51FB\u300C\u4FDD\u5B58\u8BBE\u7F6E\u300D\u3002"):L.trim()?null:n("p",null,"\u8BF7\u5148\u586B\u5199\u6A21\u62DF\u5668\u5B58\u6863\u6587\u4EF6\u540D\u3002"):n("p",null,"\u8BF7\u5148\u586B\u5199\u5343\u661F\u6C99\u7BB1\u811A\u672C\u6587\u4EF6\u5939\uFF0C\u5E76\u70B9\u51FB\u300C\u4FDD\u5B58\u8BBE\u7F6E\u300D\u3002"),Y?n("p",{role:"status"},"\u6B63\u5728\u5904\u7406\uFF0C\u8BF7\u7A0D\u5019\u2026"):A?n("p",{role:"status"},A):null,E?n("p",{role:"alert",style:{color:"var(--danger)"}},E):null,G?n("section",{"aria-label":"\u811A\u672C\u540C\u6B65\u786E\u8BA4"},n("p",{style:{overflowWrap:"anywhere"}},`\u672C\u6B21\u66F4\u65B0\u5230\uFF1A${G.root}`),G.rows.length?G.rows.every(m=>m.status==="\u672A\u53D8\u5316")?n("p",{role:"status"},"\u6240\u6709\u811A\u672C\u90FD\u4E0E\u6E38\u620F\u6587\u4EF6\u5939\u91CC\u7684\u5185\u5BB9\u76F8\u540C\uFF0C\u65E0\u9700\u590D\u5236\u3002"):null:n("p",null,"\u8FD9\u4E2A\u5B58\u6863\u8FD8\u6CA1\u6709 Lua \u811A\u672C\u3002\u8BF7\u5148\u5728\u4E0B\u65B9\u6DFB\u52A0\u811A\u672C\uFF0C\u518D\u67E5\u770B\u66F4\u65B0\u3002"),G.pendingGuidChanges?n("p",{role:"alert"},"\u6709\u63A7\u4EF6\u7F16\u53F7\u6539\u52A8\u5C1A\u672A\u786E\u8BA4\u3002\u8BF7\u5148\u6838\u5BF9\u811A\u672C\u91CC\u7528\u5230\u7684\u63A7\u4EF6\u7F16\u53F7\uFF0C\u5728\u9875\u9762\u4E0A\u70B9\u51FB\u300C\u5DF2\u5B8C\u6210\u811A\u672C\u540C\u6B65\u300D\uFF0C\u518D\u91CD\u65B0\u67E5\u770B\u66F4\u65B0\u3002"):null,G.rows.map(m=>n("div",{key:m.id,style:{borderTop:"1px solid var(--line)",padding:6}},n("label",{style:{overflowWrap:"anywhere"}},n("input",{type:"checkbox",disabled:Y||!!m.error||m.status==="\u672A\u53D8\u5316",checked:S.includes(m.id),onChange:Z=>_(Z.target.checked?[...S,m.id]:S.filter(te=>te!==m.id))}),` ${m.path} \xB7 ${Te[m.status]||m.status}`),n("div",null,`\u590D\u5236\u7684\u4EE3\u7801\u6765\u81EA\uFF1A${Me[m.sourceKind]||m.sourceKind}`),n("div",{style:{overflowWrap:"anywhere"}},m.error?`\u65E0\u6CD5\u590D\u5236\uFF1A${m.error}`:`\u590D\u5236\u5230\uFF1A${m.target}`),m.sourceMismatch?n("div",{className:"qxsim-note"},"\u8FD9\u4E2A\u811A\u672C\u5728\u5B58\u6863\u91CC\u548C\u9879\u76EE\u6587\u4EF6\u91CC\u7684\u4EE3\u7801\u4E0D\u540C\u3002\u672C\u6B21\u4F1A\u590D\u5236\u5B58\u6863\u91CC\u7684\u4EE3\u7801\uFF1B\u5982\u679C\u8981\u4F7F\u7528\u9879\u76EE\u6587\u4EF6\uFF0C\u8BF7\u70B9\u51FB\u300C\u6539\u7528\u9879\u76EE\u6587\u4EF6\u91CC\u7684\u4EE3\u7801\u300D\uFF0C\u7136\u540E\u91CD\u65B0\u67E5\u770B\u66F4\u65B0\u3002",n("details",null,n("summary",null,"\u67E5\u770B\u9879\u76EE\u6587\u4EF6\u91CC\u7684\u4EE3\u7801"),n("pre",{style:{maxHeight:200,overflow:"auto"}},m.diskSource)),oe("\u6539\u7528\u9879\u76EE\u6587\u4EF6\u91CC\u7684\u4EE3\u7801",async()=>{await v(),await g({op:"updateScript",id:m.id,source:m.diskSource}),w(null)})):null,!m.error&&m.status!=="\u672A\u53D8\u5316"?n("details",null,n("summary",null,"\u5BF9\u6BD4\u66F4\u65B0\u524D\u540E\u7684\u4EE3\u7801"),n("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8}},n("div",{style:{minWidth:0}},"\u6E38\u620F\u91CC\u73B0\u5728\u7684\u4EE3\u7801",n("pre",{style:{maxHeight:240,overflow:"auto"}},m.status==="\u65B0\u589E"?"\uFF08\u6E38\u620F\u91CC\u8FD8\u6CA1\u6709\u8FD9\u4E2A\u6587\u4EF6\uFF09":m.beforeSource)),n("div",{style:{minWidth:0}},"\u672C\u6B21\u8981\u590D\u5236\u7684\u4EE3\u7801",n("pre",{style:{maxHeight:240,overflow:"auto"}},m.source)))):null)),G.rows.some(m=>m.status==="\u65B0\u589E")?n("p",null,"\u65B0\u589E\u811A\u672C\u590D\u5236\u540E\uFF0C\u8FD8\u9700\u8981\u5728\u5343\u661F\u6C99\u7BB1\u91CC\u5173\u8054\u5BF9\u5E94\u7684\u811A\u672C\u6587\u4EF6\uFF1B\u9700\u8981\u76F4\u63A5\u8FD0\u884C\u7684\u811A\u672C\u8FD8\u8981\u6302\u5230\u63A7\u4EF6\u4E0A\u3002"):null,S.length?n("p",null,`\u5DF2\u9009 ${S.length} \u4E2A\u811A\u672C\uFF0C\u5176\u4E2D ${G.rows.filter(m=>S.includes(m.id)&&m.status==="\u8986\u76D6").length} \u4E2A\u4F1A\u66FF\u6362\u6E38\u620F\u91CC\u7684\u65E7\u6587\u4EF6\u3002\u66FF\u6362\u524D\u4F1A\u81EA\u52A8\u5907\u4EFD\u65E7\u6587\u4EF6\uFF0C\u6E38\u620F\u91CC\u7684\u5176\u4ED6\u6587\u4EF6\u4F1A\u4FDD\u7559\u3002`):null,n("div",{style:{display:"flex",gap:6}},oe("\u6682\u4E0D\u590D\u5236",async()=>w(null)),oe(`\u786E\u8BA4\u590D\u5236 ${S.length} \u4E2A\u811A\u672C`,async()=>{let m=G;w(null),await v(),F(await e("script-sync-apply",{planId:m.id,scriptIds:S,confirmed:!0}))},!S.length||!!G.pendingGuidChanges))):null,N?n("div",{role:"status"},n("strong",null,N.completed?"\u811A\u672C\u5DF2\u590D\u5236\u5230\u5343\u661F\u6C99\u7BB1":"\u6709\u4E9B\u811A\u672C\u672A\u590D\u5236\u6210\u529F"),n("p",null,N.completed?"\u4E0B\u4E00\u6B65\uFF1A\u56DE\u5230\u5343\u661F\u6C99\u7BB1\uFF0C\u4FDD\u5B58\u5173\u5361\u5E76\u91CD\u65B0\u8BD5\u73A9\uFF0C\u8BA9\u6E38\u620F\u52A0\u8F7D\u66F4\u65B0\u540E\u7684\u811A\u672C\u3002":"\u8BF7\u6309\u4E0B\u65B9\u63D0\u793A\u5904\u7406\u5931\u8D25\u7684\u6587\u4EF6\uFF0C\u518D\u91CD\u65B0\u67E5\u770B\u66F4\u65B0\u5E76\u590D\u5236\u3002"),n("p",{style:{overflowWrap:"anywhere"}},`\u590D\u5236\u65F6\u95F4\uFF1A${new Date(N.at).toLocaleString()} \xB7 \u65E7\u6587\u4EF6\u5907\u4EFD\u4FDD\u5B58\u5728\uFF1A${N.backupRoot}`),n("ul",{style:{overflowWrap:"anywhere"}},N.results.map(m=>n("li",{key:m.id},`${m.target}\uFF1A${m.status==="\u6210\u529F"?"\u5DF2\u590D\u5236":"\u672A\u590D\u5236"}${m.error?` \xB7 ${m.error}`:""}`)))):null))}}function je(i){try{i?.close()}catch{}}function wa(){if(window.location.protocol==="dsh-app:")return null;let i;try{return i=window.open("about:blank","_blank"),!i||i.closed?null:(i.document.write('<!doctype html><meta charset="utf-8"><title>\u6B63\u5728\u51C6\u5907\u8BD5\u73A9\u2026</title><p>\u6B63\u5728\u4FDD\u5B58\u9879\u76EE\u5E76\u51C6\u5907\u8BD5\u73A9\u2026</p>'),i)}catch{return je(i),null}}function vt(i){let n=i.createElement,f=new Map;function c({entry:e,api:g,onClosed:v}){let k=i.useRef(null),I=i.useRef(null),[C,y]=i.useState(!1),[L,$]=i.useState(""),[M,T]=i.useState(!1);i.useLayoutEffect(()=>{let w={closing:!1,stopped:!1,pending:null,controller:null,requests:new Set};I.current=w;let S=k.current,_=S.querySelector("iframe"),N=!0,F=()=>{if(w.stopped)return Promise.resolve();if(w.closing=!0,!w.controller)return w.stopped=!0,Promise.resolve();if(!w.pending){let E=(async()=>{w.controller?.quiesce(),await Promise.allSettled([...w.requests]),await g(e.sessionId,"play",{action:"stop",args:{}}),w.stopped=!0})().finally(()=>{w.pending=null,f.get(e.sessionId)===E&&f.delete(e.sessionId)});w.pending=E,f.set(e.sessionId,E)}return w.pending};w.close=async()=>{if(!(w.pending||w.stopped)){y(!0),$("");try{await F(),N&&v()}catch(E){N&&($(`\u505C\u6B62\u8BD5\u73A9\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\uFF1A${E?.message||E}`),y(!1))}}};let A=E=>{E.source!==_.contentWindow||E.data?.type!=="qxqy-play-close"||E.data.sessionId!==e.sessionId||w.close()},B=E=>{E.preventDefault(),w.close()};return window.addEventListener("message",A),S.addEventListener("cancel",B),S.showModal(),()=>{N=!1,window.removeEventListener("message",A),S.removeEventListener("cancel",B),S.close(),F().catch(E=>console.error("Embedded play cleanup failed",E)),e.returnFocus?.isConnected&&e.returnFocus.focus()}},[e,g,v]);function G(w){let S=I.current;if(!S.closing)try{let _=w.currentTarget,N=_.contentWindow?.qxqyEmbeddedPlay;if(!N)throw new Error("\u8BD5\u73A9\u9875\u672A\u80FD\u52A0\u8F7D\uFF0C\u8BF7\u8FD4\u56DE\u7F16\u8F91\u540E\u91CD\u8BD5\u3002");S.controller=N,T(!0),_.focus(),N.focus();let F=(A,B={})=>{if(S.closing)return Promise.reject(new Error("\u8BD5\u73A9\u6B63\u5728\u5173\u95ED"));let E=g(e.sessionId,"play",{action:A,args:B});return S.requests.add(E),E.then(()=>S.requests.delete(E),()=>S.requests.delete(E)),E};N.start(F).catch(A=>{S.closing||$(A?.message||String(A))})}catch(_){$(_?.message||String(_))}}return n("dialog",{ref:k,className:"qxsim-play-overlay","aria-label":"\u5185\u5D4C\u8BD5\u73A9","aria-modal":!0},n("header",{className:"qxsim-play-header"},n("span",{role:"status"},C?"\u6B63\u5728\u505C\u6B62\u8BD5\u73A9\u2026":M?"\u5185\u5D4C\u8BD5\u73A9":"\u6B63\u5728\u8F7D\u5165\u8BD5\u73A9\u2026"),n("button",{className:"qxsim-action",type:"button",disabled:C,onClick:()=>void I.current?.close?.()},"\u5173\u95ED\u8BD5\u73A9")),L?n("div",{className:"qxsim-play-error",role:"alert"},L):null,n("iframe",{title:"\u5343\u661F\u6C99\u7BB1\u8BD5\u73A9",src:e.url,onLoad:G,tabIndex:0}))}return function({sessionId:g,api:v,playUrl:k,onError:I}){let C=i.useRef(null),[y,L]=i.useState(!1),[$,M]=i.useState(null),T=i.useCallback(()=>M(null),[]);i.useEffect(()=>{let w={active:!0,pending:!1,popup:null};return C.current=w,L(!1),M(null),()=>{w.active=!1,je(w.popup)}},[g]);async function G(w){let S=C.current;if(!S?.active||S.pending||$)return;S.pending=!0;let _=document.activeElement;L(!0);try{let N=wa();if(S.popup=N,await f.get(g),!S.active||(await w(),!S.active))return;let F=new URL(k(g),window.location.href);if(N){try{if(N.closed)throw new Error("Play window closed");N.location.replace(F.href)}catch{je(N),N=null}S.popup=null}N||(F.searchParams.set("embedded","1"),M({sessionId:g,url:F.href,returnFocus:_}))}catch(N){je(S.popup),S.popup=null,S.active&&I(N?.message||String(N))}finally{S.pending=!1,S.active&&L(!1)}}return{open:G,opening:y,overlay:$?.sessionId===g?n(c,{key:g,entry:$,api:v,onClosed:T}):null}}}var yt="prefab-v1",ka=[[10003004,10003004],[10005001,10005142],[10006001,10006002],[10007002,10007002],[10008001,10008001],[10009001,10009011],[20001001,20001074],[20001076,20001121],[20001123,20001156],[20001158,20001302],[20001304,20001568],[20001570,20001999],[20002001,20002755],[20002757,20002999],[20003001,20003455],[30001001,30001016],[30002001,30002017],[30003001,30003011],[30004001,30004001],[30005001,30005020],[30006001,30006026],[30007001,30007013],[30008001,30008011]];function qt(i){return!Number.isSafeInteger(i)||!ka.some(([n,f])=>i>=n&&i<=f)?null:i===10003004||i===10008001?128:256}var Sa="sprite-v1",Na="/qxqy-assets/",Ca=[[100001,100006],[100101,100213],[101001,101018],[101020,101028],[101030,101046],[101048,101048],[101050,101054],[101056,101080],[102001,102052],[103001,103148],[104001,104010],[105001,105140],[105142,105219],[105221,105317],[106001,106047],[106049,106096],[107001,107007],[107010,107020],[107031,107092],[107094,107180],[107183,107201],[107203,107205],[107207,107228],[107231,107278],[107280,107402],[108001,108017],[108019,108020],[109001,109031],[109033,109034],[109036,109075],[110001,110053],[111001,111139],[112001,112042]];function we(i){return i==null||i===""?"StaticReference":typeof i=="string"?i:typeof i.Name=="string"?i.Name:"Unknown"}function de(i,n){return`${we(n)}:${i}`}function $e(i,n){let f=we(n);return f==="Prefab"?qt(i)!==null:f==="StaticReference"&&Number.isSafeInteger(i)&&i>100006&&Ca.some(([c,e])=>i>=c&&i<=e)}function it(i,n=0,f){let c=we(f);if(!["StaticReference","Prefab"].includes(c))throw new Error(`Unsupported image source: ${c}`);return`${Na}${c==="Prefab"?yt:Sa}/${i}.png${n?`?refresh=${n}`:""}`}function wt(i,n=0,f){return it(i,n,f).replace(".png",".json")}var nt="qxqy-image-refresh",fe=new Map,Pe=new Map,Ie=new Map,rt=new Set,$a=16777216,kt=!1;function Nt(i,n){Ie.set(i,n),fe.delete(i),Pe.delete(i);for(let f of rt)f(i)}var St=i=>/^\d+$/.test(i)?de(Number(i)):i;function Ge(){if(!(kt||typeof window>"u")){kt=!0;try{for(let[i,n]of Object.entries(JSON.parse(localStorage.getItem(nt)||"{}")))Ie.set(St(i),n)}catch{}window.addEventListener("storage",i=>{if(i.key===nt)try{for(let[n,f]of Object.entries(JSON.parse(i.newValue||"{}"))){let c=St(n);Ie.get(c)!==f&&Nt(c,f)}}catch{}})}}function st(i){return Ge(),rt.add(i),()=>rt.delete(i)}function Ct(i,n){Ge(),Nt(de(i,n),Date.now());try{localStorage.setItem(nt,JSON.stringify(Object.fromEntries(Ie)))}catch{}}function ot(i,n){if(Ge(),we(n)!=="StaticReference"||!$e(i,n))return Promise.resolve(null);let f=de(i,n),c=Pe.get(f);if(c)return c;let e=fetch(wt(i,Ie.get(f),n),{signal:AbortSignal.timeout(3e4)}).then(async g=>{if(!g.ok)throw new Error(`\u56FE\u7247 ${i} \u5143\u6570\u636E\u52A0\u8F7D\u5931\u8D25\uFF1AHTTP ${g.status}`);return g.json()}).catch(g=>{throw Pe.get(f)===e&&Pe.delete(f),g});return Pe.set(f,e),e}async function $t(i,n){let[f,c]=await Promise.all([Ia(i,n),ot(i,n).then(e=>({meta:e,error:""}),e=>({meta:void 0,error:e.message}))]);return{image:f,...c}}function Ia(i,n){if(Ge(),!$e(i,n))return Promise.reject(new Error("Image source/ID is not in the preview allowlist"));let f=de(i,n),c=fe.get(f);if(c&&(!c.failed||Date.now()<c.retryAt))return fe.delete(f),fe.set(f,c),c.promise;let e={pixels:0,failed:!1};return e.promise=new Promise((g,v)=>{let k=new Image,I=setTimeout(()=>{k.src="",C(new Error("\u56FE\u7247\u52A0\u8F7D\u8D85\u65F6"))},45e3);function C(y){if(clearTimeout(I),k.onload=k.onerror=null,y){e.failed=!0,e.retryAt=Date.now()+6e4,v(y);return}e.pixels=k.width*k.height;let L=[...fe.values()].reduce(($,M)=>$+M.pixels,0);for(let[$,M]of fe){if(L<=$a&&fe.size<=128)break;$!==f&&(!M.pixels&&!M.failed||(fe.delete($),L-=M.pixels))}g(k)}k.onload=()=>C(),k.onerror=()=>C(new Error(`\u56FE\u7247 ${i} \u52A0\u8F7D\u5931\u8D25\uFF0C\u53EF\u5728\u5C5E\u6027\u9762\u677F\u5237\u65B0\u7D20\u6750`)),k.src=it(i,Ie.get(f),n)}),fe.set(f,e),e.promise}function It(i,n,f){let c=Number(n??4294967295)>>>0;if((c&16777215)===16777215)return i;let e=f(i.width,i.height),g=e.getContext("2d");g.drawImage(i,0,0);let v=g.getImageData(0,0,e.width,e.height),k=c>>>16&255,I=c>>>8&255,C=c&255;for(let y=0;y<v.data.length;y+=4)v.data[y]=Math.round(v.data[y]*k/255),v.data[y+1]=Math.round(v.data[y+1]*I/255),v.data[y+2]=Math.round(v.data[y+2]*C/255);return g.putImageData(v,0,0),e}function lt(i){return!!i?.border&&Object.values(i.border).some(n=>Number.isFinite(n)&&n>0)}function Ue(i,n){let f=typeof n=="object"?n?.Name:n;return lt(i)&&f!=="Basic"?"Stretch":"Basic"}function Ea(i,n,f,c){n=Number.isFinite(n)?Math.max(0,n):0,f=Number.isFinite(f)?Math.max(0,f):0;let e=Math.min(1,i/(n+f||1));n*=e,f*=e;let g=Math.min(1,c/(n+f||1));return{source:[0,n,i-f,i],target:[0,n*g,c-f*g,c]}}var Et=new WeakMap;function At(i,n,f,c,e){let g=Math.max(0,f),v=Math.max(0,c),k=Math.min(1,4096/Math.max(1,g),4096/Math.max(1,v)),I=Math.max(1,Math.round(g*k)),C=Math.max(1,Math.round(v*k)),y=e(I,C),L=y.getContext("2d");if(!g||!v)return y;let $=Et.get(i);if(!$){let _=e(i.width,i.height),N=_.getContext("2d");N.drawImage(i,0,0),$=N.getImageData(0,0,i.width,i.height),Et.set(i,$)}let M=L.createImageData(I,C),T=$.data,G=(_,N,F,A,B,E)=>{let{source:Q,target:Y}=Ea(N,F,A,B);return Array.from({length:E},(pe,se)=>{let X=(se+.5)*B/E,W=X<Y[1]?0:X<Y[2]?1:2,ge=Y[W+1]>Y[W]?(X-Y[W])/(Y[W+1]-Y[W]):0,ee=Math.max(0,Math.min(_-1,(Q[W]+ge*(Q[W+1]-Q[W]))*_/N-.5)),re=Math.floor(ee);return[re,Math.min(_-1,re+1),ee-re]})},w=G(i.width,n.width,n.border.left,n.border.right,g,I),S=G(i.height,n.height,n.border.top,n.border.bottom,v,C);for(let _=0;_<C;_++)for(let N=0;N<I;N++){let[F,A,B]=w[N],[E,Q,Y]=S[_],pe=(E*i.width+F)*4,se=(E*i.width+A)*4,X=(Q*i.width+F)*4,W=(Q*i.width+A)*4,ge=T[pe+3]*(1-B)*(1-Y),ee=T[se+3]*B*(1-Y),re=T[X+3]*(1-B)*Y,he=T[W+3]*B*Y,me=ge+ee+re+he,ue=(_*I+N)*4;M.data[ue+3]=Math.round(me);for(let ne=0;ne<3;ne++)M.data[ue+ne]=me?Math.round((T[pe+ne]*ge+T[se+ne]*ee+T[X+ne]*re+T[W+ne]*he)/me):0}return L.putImageData(M,0,0),y}function Pt(i,n,f){if(i.fillType!=="Horizontal"&&i.fillType!=="Vertical")return null;let c=Number(i.fillAmount??1),e=Number.isFinite(c)?Math.max(0,Math.min(1,c)):1;if(i.fillType==="Horizontal"){let v=n*e;return{x:i.fillHorizontalType==="Right"?n/2-v:-n/2,y:-f/2,width:v,height:f}}let g=f*e;return{x:-n/2,y:i.fillVerticalType==="Top"?-f/2:f/2-g,width:n,height:g}}function Lt(i,n){let f=document.createElement("canvas");return f.width=i,f.height=n,f}function Tt(i){let n=i.createElement;return function({item:c}){let e=de(c.imageId,c.imageSource),g=i.useRef(null),[v,k]=i.useState({image:null,meta:null,error:""}),[I,C]=i.useState(0);return i.useEffect(()=>st(y=>{y===e&&C(L=>L+1)}),[e]),i.useEffect(()=>{let y=!0;return k({image:null,error:""}),$t(c.imageId,c.imageSource).then(({image:L,meta:$,error:M})=>{y&&k({image:L,meta:$,error:M})},L=>{y&&k({image:null,error:L.message})}),()=>{y=!1}},[e,I]),i.useEffect(()=>{let y=g.current;if(!v.image||!y)return;let L=Ue(v.meta,c.imageType)==="Stretch"?At(v.image,v.meta,c.width,c.height,Lt):v.image,$=It(L,c.imageColor,Lt);y.width=$.width,y.height=$.height;let M=y.getContext("2d"),T=c.enableFill?Pt(c,y.width,y.height):null;T&&(M.beginPath(),M.rect(T.x+y.width/2,T.y+y.height/2,T.width,T.height),M.clip()),M.globalAlpha=(Number(c.imageColor??4294967295)>>>24&255)/255,M.drawImage($,0,0)},[v.image,v.meta,c.imageType,c.width,c.height,c.imageColor,c.enableFill,c.fillType,c.fillHorizontalType,c.fillVerticalType,c.fillAmount]),v.image?n("canvas",{ref:g,title:v.error,"data-image-id":c.imageId,"data-image-source":we(c.imageSource),"data-image-type":Ue(v.meta,c.imageType),"aria-label":`\u56FE\u7247 ${c.imageId}`,style:{display:"block",position:"absolute",inset:0,width:"100%",height:"100%"}}):n("span",{className:"qxsim-box-label",title:v.error,role:v.error?"status":void 0},v.error?`\u56FE\u7247 ${c.imageId} \u52A0\u8F7D\u5931\u8D25`:`\u52A0\u8F7D\u56FE\u7247 ${c.imageId}\u2026`)}}function Mt(i){let n=i.createElement;return function({imageId:c,imageSource:e,value:g,commit:v}){let k=de(c,e),[I,C]=i.useState({key:"",meta:void 0,error:""}),[y,L]=i.useState(0);i.useEffect(()=>st(T=>{T===k&&L(G=>G+1)}),[k]),i.useEffect(()=>{let T=!0;return C({key:k,meta:void 0,error:""}),ot(c,e).then(G=>{T&&C({key:k,meta:G,error:""})},G=>{T&&C({key:k,meta:void 0,error:G.message})}),()=>{T=!1}},[k,y]);let $=I.key===k&&I.meta!==void 0,M=$&&lt(I.meta);return n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},"\u56FE\u7247\u7C7B\u578B"),n("select",{"aria-label":"\u56FE\u7247\u7C7B\u578B",disabled:!M,value:$?Ue(I.meta,g):"",onChange:T=>v("imageType",T.target.value)},$?n("option",{value:"Basic"},"\u57FA\u7840"):n("option",{value:""},I.error?"\u5143\u6570\u636E\u52A0\u8F7D\u5931\u8D25":"\u8BFB\u53D6\u7D20\u6750\u8FB9\u754C\u2026"),M?n("option",{value:"Stretch"},"\u62C9\u4F38"):null),I.error?n("small",{role:"status"},I.error):null)}}var Aa=i=>`#${(Number(i)&16777215).toString(16).padStart(6,"0").toUpperCase()}`,zt=i=>String(Math.round(i/255*100));function Ft(i){let n=i.createElement;return function({field:c,commit:e}){let g=Aa(c.value),v=Number(c.value)>>>24,k=zt(v),[I,C]=i.useState(g),[y,L]=i.useState(k),$=i.useRef(!1),[M,T]=i.useState(""),[G,w]=i.useState("");i.useEffect(()=>{C(g),T("")},[g]),i.useEffect(()=>{$.current||(L(k),w(""))},[k]);function S(A){let B=A.trim().replace(/^#/,"");if(!/^[0-9a-f]{6}$/i.test(B)){T("\u8BF7\u8F93\u5165\u516D\u4F4D\u989C\u8272\uFF0C\u4F8B\u5982 #FF8800");return}let E=`#${B.toUpperCase()}`;C(E),T(""),e(c.key,Q=>(Number(Q)&4278190080|parseInt(B,16))>>>0)}function _(A){let B=Number(A);if(!String(A).trim()||!Number.isInteger(B)||B<0||B>100){w("\u900F\u660E\u5EA6\u8BF7\u8F93\u5165 0\u2013100 \u7684\u6574\u6570");return}let E=Math.round(B/100*255);$.current=!1,L(zt(E)),w(""),e(c.key,Q=>(E<<24|Number(Q)&16777215)>>>0)}let N="Alpha\uFF1A0% \u5B8C\u5168\u900F\u660E\uFF0C100% \u5B8C\u5168\u4E0D\u900F\u660E",F=y.trim()&&Number.isFinite(Number(y))?Math.max(0,Math.min(100,Number(y))):Number(k);return n("div",{className:"qxsim-color-editor",role:"group","aria-label":`${c.label}\u4E0E\u900F\u660E\u5EA6`},n("div",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},c.label),n("span",{className:"qxsim-color-row"},n("span",{className:"qxsim-color-swatch",title:"\u6253\u5F00\u53D6\u8272\u5668"},n("input",{type:"color",value:/^#[0-9a-f]{6}$/i.test(I)?I:g,disabled:!!c.readonly,"aria-label":`${c.label}\u53D6\u8272\u5668`,onInput:A=>S(A.target.value)})),n("input",{type:"text",value:I,spellCheck:!1,disabled:!!c.readonly,placeholder:"#RRGGBB","aria-label":`${c.label} RGB`,"aria-invalid":!!M,onChange:A=>{C(A.target.value),T("")},onBlur:()=>S(I),onKeyDown:A=>{A.key==="Enter"&&A.currentTarget.blur(),A.key==="Escape"&&(C(g),T(""))}})),M?n("small",{className:"qxsim-color-error",role:"alert"},M):null),n("div",{className:"qxsim-field"},n("span",{className:"qxsim-field-label",title:N},"\u900F\u660E\u5EA6"),n("span",{className:"qxsim-alpha-row"},n("input",{type:"range",min:0,max:100,step:1,value:F,disabled:!!c.readonly,title:N,"aria-label":`${c.label}\u900F\u660E\u5EA6\u6ED1\u5757`,onInput:A=>_(A.target.value)}),n("span",{className:"qxsim-alpha-value"},n("input",{type:"number",min:0,max:100,step:1,inputMode:"numeric",value:y,disabled:!!c.readonly,title:N,"aria-label":`${c.label}\u900F\u660E\u5EA6`,"aria-invalid":!!G,onChange:A=>{$.current=!0,L(A.target.value),w("")},onBlur:()=>{$.current&&_(y)},onKeyDown:A=>{A.key==="Enter"&&A.currentTarget.blur(),A.key==="Escape"&&($.current=!1,L(k),w(""))}}),n("span",{"aria-hidden":!0},"%"))),G?n("small",{className:"qxsim-color-error",role:"alert"},G):null))}}function Dt(i,{api:n,playUrl:f,saveToWorkspace:c=!1}){let e=i.createElement,g=bt(i),v=vt(i),k=Tt(i),I=Mt(i),C=Ft(i),y="qxqy-simulator-style",L=`
2
2
  .qxsim-save-overlay{position:absolute;inset:0;z-index:30;display:grid;place-items:center;background:#0006}.qxsim-save-dialog{width:min(440px,90%);padding:24px;border:1px solid var(--line);border-radius:12px;background:var(--panel);box-shadow:0 12px 48px #0005}.qxsim-save-dialog h2{margin:0 0 16px;font-size:17px}.qxsim-save-dialog input{width:100%;margin:8px 0 16px;padding:10px;border:1px solid var(--line);border-radius:6px;background:var(--input)}.qxsim-save-dialog footer{display:flex;justify-content:flex-end;gap:8px}.qxsim-save-dialog [role=alert]{color:var(--danger);margin-bottom:12px;overflow-wrap:anywhere}
3
3
  .qxsim-play-overlay{position:fixed;inset:0;width:100%;height:100%;max-width:none;max-height:none;margin:0;padding:0;border:0;background:var(--bg);color:var(--text)}.qxsim-play-overlay[open]{display:flex;flex-direction:column}.qxsim-play-overlay::backdrop{background:#0008}.qxsim-play-header{display:flex;align-items:center;justify-content:space-between;flex-shrink:0;gap:12px;padding:4px 12px;border-bottom:1px solid var(--line);background:var(--panel)}.qxsim-play-overlay iframe{display:block;flex:1;width:100%;min-height:0;border:0;background:var(--bg)}.qxsim-play-error{padding:8px 12px;color:var(--danger);overflow-wrap:anywhere}html[data-windows-titlebar] .qxsim-play-overlay{top:40px;height:calc(100% - 40px)}
4
4
  .qxsim{--blue:#477cf0;--danger:#e75a6a;position:relative;display:flex;flex:1 1 0;align-self:stretch;flex-direction:column;width:100%;height:100%;min-width:0;min-height:0;max-height:none;container-type:inline-size;color:var(--text);background:var(--bg);font:13px/1.4 Inter,"Microsoft YaHei UI","Microsoft YaHei",sans-serif;overflow:hidden;color-scheme:inherit}
@@ -18,12 +18,13 @@
18
18
  .qxsim-switch-row{min-height:32px;display:flex;align-items:center;gap:8px;margin-bottom:4px}.qxsim-switch{position:relative;width:40px;height:22px;margin-left:auto;flex:0 0 40px}.qxsim-switch input{position:absolute;opacity:0}.qxsim-switch-track{position:absolute;inset:0;border:1px solid var(--line);border-radius:12px;background:color-mix(in srgb,var(--muted) 28%,var(--input))}.qxsim-switch-track:after{content:"";position:absolute;left:3px;top:3px;width:14px;height:14px;border-radius:50%;background:var(--muted);box-shadow:0 1px 3px #0006;transition:.15s}.qxsim-switch input:checked+.qxsim-switch-track{border-color:#5688f4;background:#477cec}.qxsim-switch input:checked+.qxsim-switch-track:after{left:21px;background:#fff}.qxsim-pair{display:grid;grid-template-columns:42px minmax(0,1fr) minmax(0,1fr);gap:5px;align-items:end;margin-bottom:7px}.qxsim-pair-name{padding-bottom:7px;color:var(--muted);font-size:11px}.qxsim-pair .qxsim-field{margin:0}.qxsim-pair .qxsim-field-label{font-size:10px}.qxsim-axis{display:grid;place-items:center;width:17px;height:17px;border-radius:3px;font-size:10px}.qxsim-axis.x{color:#ff9aa6;background:#6c2733}.qxsim-axis.y{color:#a9e178;background:#2f5726}.qxsim-axis.w,.qxsim-axis.h{color:#8bc7ff;background:#294762}.qxsim-color-row{display:grid;grid-template-columns:34px 1fr;gap:6px}.qxsim-color-swatch{position:relative;width:34px;height:31px;border:1px solid var(--line);border-radius:5px;overflow:hidden;background:#fff}.qxsim-color-swatch input{position:absolute;inset:-8px;width:50px;height:47px;padding:0;border:0;cursor:pointer}.qxsim-percent{display:grid;grid-template-columns:minmax(0,1fr) 58px;gap:7px;align-items:center}.qxsim-percent input[type=range]{width:100%;accent-color:var(--blue)}.qxsim-percent output{height:30px;display:grid;place-items:center;border:1px solid var(--line);border-radius:5px;background:var(--input)}.qxsim-subfields{margin:2px 0 8px 8px;padding:7px 0 2px 9px;border-left:2px solid color-mix(in srgb,var(--blue) 55%,var(--line))}.qxsim-state-field{margin:8px 0}.qxsim-state-label{display:flex;align-items:center;gap:6px;margin-bottom:4px;color:var(--muted);font-size:11px}.qxsim-unsupported{min-height:31px;display:flex;align-items:center;padding:5px 8px;border:1px dashed var(--line);border-radius:5px;background:color-mix(in srgb,var(--muted) 8%,var(--input));color:var(--muted)}.qxsim-state-ref{display:grid;grid-template-columns:32px minmax(0,1fr);height:54px;border:1px dashed var(--line);border-radius:6px;background:color-mix(in srgb,var(--input) 72%,transparent);overflow:hidden}.qxsim-state-ref button{border:0;border-right:1px solid var(--line);background:transparent;color:var(--muted);font-size:22px}.qxsim-state-ref button:hover{color:var(--blue);background:var(--hover)}.qxsim-state-ref select{min-width:0;border:0;outline:0;background:transparent;padding:0 7px}.qxsim-script-actions{display:flex;justify-content:flex-end}.qxsim-script-actions button{height:30px;padding:0 10px;border:1px solid #4779e6;border-radius:5px;color:#fff;background:#2e5cab}.qxsim-empty{padding:22px 10px;text-align:center;color:var(--muted)}
19
19
  .qxsim-script-page{display:grid;grid-template-columns:280px minmax(420px,1fr);flex:1;min-height:0;background:var(--workspace)}.qxsim-script-assets{min-height:0;padding:12px;border-right:1px solid var(--line);background:var(--panel);overflow:auto}.qxsim-script-assets h3{margin:2px 4px 10px;font-size:13px}.qxsim-script-asset{width:100%;margin-bottom:7px;padding:10px;border:1px solid var(--line);border-radius:7px;background:var(--button);text-align:left}.qxsim-script-asset.active{border-color:var(--blue);background:color-mix(in srgb,var(--blue) 14%,var(--button))}.qxsim-script-asset strong,.qxsim-script-asset small{display:block}.qxsim-script-asset small{margin-top:3px;color:var(--muted)}.qxsim-script-list-row{display:flex;gap:4px;align-items:stretch;margin-bottom:7px}.qxsim-script-list-row .qxsim-script-asset{flex:1;min-width:0;margin-bottom:0}.qxsim-script-list-row .qxsim-iconbtn{flex:0 0 30px;width:30px;min-height:30px;height:auto;align-self:stretch}.qxsim-script-editor{min-width:0;min-height:0;display:grid;grid-template-rows:auto auto minmax(0,1fr) auto;gap:10px;padding:18px 22px}.qxsim-script-title{display:flex;align-items:end;justify-content:space-between;gap:16px}.qxsim-script-title h2{margin:0;font-size:18px}.qxsim-script-title span{color:var(--muted);font-size:11px}.qxsim-script-fields{display:grid;grid-template-columns:minmax(220px,1fr) minmax(220px,1fr);gap:10px}.qxsim-script-editor label{display:flex;flex-direction:column;gap:5px;color:var(--muted);font-size:11px}.qxsim-script-editor input,.qxsim-script-editor select,.qxsim-script-editor textarea{min-width:0;border:1px solid var(--line);border-radius:6px;outline:0;background:var(--input);color:var(--text)}.qxsim-script-editor input,.qxsim-script-editor select{height:34px;padding:0 9px}.qxsim-script-editor textarea{width:100%;height:100%;min-height:220px;padding:12px;resize:none;font:12px/1.65 ui-monospace,SFMono-Regular,Consolas,monospace;tab-size:2}.qxsim-script-editor textarea:focus,.qxsim-script-editor input:focus,.qxsim-script-editor select:focus{border-color:var(--blue);box-shadow:0 0 0 2px #4075e52e}.qxsim-script-footer{display:flex;align-items:center;gap:8px}.qxsim-script-footer span{color:var(--muted);font-size:10px}.qxsim-script-footer .spacer{flex:1}
20
20
  .qxsim-server-logic{flex:1;min-height:0;overflow:auto;padding:18px 22px;background:var(--workspace)}.qxsim-logic-wrap{max-width:900px;margin:0 auto}.qxsim-logic-title{display:flex;align-items:end;justify-content:space-between;gap:16px;margin-bottom:10px}.qxsim-logic-title h2{margin:0;font-size:18px}.qxsim-logic-title p{margin:3px 0 0;color:var(--muted);font-size:11px}.qxsim-logic-rule{margin:12px 0;border:1px solid var(--line);border-radius:8px;background:var(--panel);overflow:hidden}.qxsim-logic-rule-head,.qxsim-logic-action-head{display:flex;align-items:center;gap:8px;padding:9px 11px;border-bottom:1px solid var(--lineSoft)}.qxsim-logic-rule-head strong,.qxsim-logic-action-head strong{font-size:12px}.qxsim-logic-rule-head .qxsim-field{flex:1;margin:0}.qxsim-logic-rule-head .qxsim-field input{height:30px}.qxsim-logic-actions{padding:10px}.qxsim-logic-action{margin-bottom:9px;border:1px solid var(--line);border-radius:6px;background:var(--panel2);overflow:hidden}.qxsim-logic-action:last-child{margin-bottom:0}.qxsim-logic-action-head{min-height:36px;padding:6px 8px}.qxsim-logic-action-head span{color:var(--muted);font-size:10px}.qxsim-logic-action-head .qxsim-iconbtn{width:28px;height:28px;margin-left:auto}.qxsim-logic-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding:9px}.qxsim-logic-fields .wide{grid-column:1 / -1}.qxsim-logic-actions-foot{display:flex;gap:7px;margin-top:10px}.qxsim-logic-actions-foot .qxsim-action{flex:0 0 auto}.qxsim-logic-json{min-height:58px;font:11px/1.45 ui-monospace,SFMono-Regular,Consolas,monospace}.qxsim-logic-target{height:31px;display:flex;align-items:center;padding:0 7px;border:1px solid var(--line);border-radius:5px;background:color-mix(in srgb,var(--input) 75%,var(--muted));color:var(--muted)}.qxsim-logic-error{margin:10px 0;color:var(--danger);font-size:11px}.qxsim-logic-empty{padding:24px 12px;border:1px dashed var(--line);border-radius:8px;text-align:center;color:var(--muted);background:color-mix(in srgb,var(--panel) 70%,transparent)}
21
+ .qxsim-color-editor{margin-bottom:8px}.qxsim-color-editor:last-child{margin-bottom:0}.qxsim-alpha-row{display:grid;grid-template-columns:minmax(0,1fr) 88px;gap:7px;align-items:center}.qxsim-alpha-row input[type=range]{width:100%;min-width:0;margin:0;accent-color:var(--blue)}.qxsim-alpha-value{position:relative}.qxsim-alpha-value input[type=number]{padding-right:23px;appearance:textfield;-moz-appearance:textfield}.qxsim-alpha-value input::-webkit-inner-spin-button,.qxsim-alpha-value input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.qxsim-alpha-value>span{position:absolute;right:8px;top:50%;transform:translateY(-50%);color:var(--muted);pointer-events:none}.qxsim-field .qxsim-color-error{color:var(--danger)}
21
22
  .qxsim-toolbar-center{min-width:0}.qxsim-device-switch{display:flex;flex:0 0 auto;gap:2px;padding:2px;border:1px solid var(--line);border-radius:9px;background:var(--input)}.qxsim-device-switch button{height:26px;padding:0 10px;border:0;border-radius:7px;background:transparent;color:var(--muted);font-size:11px;font-weight:600;white-space:nowrap}.qxsim-device-switch button:hover{color:var(--text)}.qxsim-device-switch button.active{color:#fff;background:linear-gradient(#4f86ff,#3c6ed8);box-shadow:0 1px 5px #1d4b9f44}.qxsim-control.ratio{width:150px;min-width:0;padding-right:22px;text-overflow:ellipsis}.qxsim-io .qxsim-control{width:118px;min-width:0;padding-right:22px;text-overflow:ellipsis}.qxsim-platform-tag{padding:2px 7px;border:1px solid var(--line);border-radius:9px;background:var(--panel);color:var(--text);font-weight:600;font-size:10px}
22
23
  .qxsim-toolbar{grid-template-columns:minmax(170px,1fr) auto auto;column-gap:12px}.qxsim-toolbar-center .zoom{width:78px;min-width:78px}.qxsim-actions{min-width:0}
23
24
  @container(max-width:1180px){.qxsim-toolbar{grid-template-columns:minmax(130px,1fr) auto auto;column-gap:8px}.qxsim-action{padding:0 8px}.qxsim-main{grid-template-columns:200px minmax(300px,1fr) 292px}.qxsim-control{min-width:132px}.qxsim-control.ratio{width:128px}.qxsim-io .qxsim-control{width:96px}.qxsim-device-switch button{padding:0 7px}.qxsim-workspace{padding-left:12px;padding-right:12px}.qxsim-brand-text span{display:none}.qxsim-asset-switch button{font-size:11px}}
24
25
  @container(max-width:1000px){.qxsim-toolbar{height:90px;flex-basis:90px;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:42px 42px}.qxsim-toolbar-center{justify-self:end}.qxsim-actions{grid-column:1 / -1}.qxsim-editor-nav .save-summary{display:none}.qxsim-inspector{top:130px}}
25
26
  @container(max-width:820px){.qxsim-main{grid-template-columns:180px minmax(280px,1fr)}.qxsim-inspector{position:absolute;right:0;top:130px;bottom:0;width:285px;z-index:5;box-shadow:-10px 0 24px var(--shadow)}.qxsim-script-page{grid-template-columns:190px minmax(320px,1fr)}.qxsim-script-editor{padding:12px}.qxsim-script-fields{grid-template-columns:1fr}}
26
- `,S={"server-container":["\u25A3","\u5BA2\u6237\u7AEF\u63A7\u4EF6\u5BB9\u5668"],container:["\u25A1","\u5BB9\u5668\u8282\u70B9"],textbox:["T","\u6587\u672C\u6846"],cursor:["\u2301","\u5149\u6807\u68C0\u6D4B\u533A\u57DF"],reference:["\u2197","\u6A21\u677F\u5F15\u7528\u63A7\u4EF6"],grid:["\u25A6","\u7F51\u683C\u89C6\u7A97"],image:["\u25A7","\u56FE\u7247"],button:["Btn","\u9884\u8BBE\u6309\u94AE"],textwindow:["T\u2195","\u6587\u672C\u89C6\u7A97"],keyhint:["1","\u6309\u952E\u63D0\u793A"],animation:["\u2726","\u754C\u9762\u52A8\u6548"],fullscreen:["\u2725","\u5168\u5C4F\u52A8\u6548"]},L=[["container","\u5BB9\u5668\u8282\u70B9"],["textbox","\u6587\u672C\u6846"],["cursor","\u5149\u6807\u68C0\u6D4B"],["reference","\u6A21\u677F\u5F15\u7528"],["grid","\u7F51\u683C\u89C6\u7A97"],["button","\u9884\u8BBE\u6309\u94AE"],["textwindow","\u6587\u672C\u89C6\u7A97"],["keyhint","\u6309\u952E\u63D0\u793A"],["image","\u56FE\u7247"],["animation","\u754C\u9762\u52A8\u6548"],["fullscreen","\u5168\u5C4F\u52A8\u6548"]],F={container:["isolateNavigation","disableKeyEventPassthrough","disableCursorEventPassthrough","showCursor"],textbox:["fontSize","adaptiveFontSize","minimumFontSize","fontColor","bgColor","enableOutline","outlineColor","horizontalAlignment","verticalAlignment","text"],cursor:[],reference:["referencedPrefabId"],grid:["itemPrefabId","raycastTarget","interactable","showScrollBar","scrollDirection","layoutConstraint","layoutConstraintFixedCount","cellSizeX","cellSizeY","spacingX","spacingY","padding1X","padding1Y","padding2X","padding2Y","previewCount"],image:["imageSource","imageId","imageColor","enableMask","enableSoftEdge","softEdgeMode","softEdgeWidthX","softEdgeWidthY","horizontalSoftRange","verticalSoftRange","enableFill","fillType","fillHorizontalType","fillVerticalType","fillRadial90Type","fillRadialType","fillAmount","reverseMaskArea"],button:["raycastTarget","interactable","unavailableChildId","hoverChildId","pressedChildId","selectedChildId","clickAudioId"],textwindow:["interactable","showScrollBar","fontSize","adaptiveFontSize","minimumFontSize","fontColor","bgColor","enableOutline","outlineColor","horizontalAlignment","verticalAlignment","text"],keyhint:["keyboardKeyCode","controllerKeyCode"],animation:["animationId"],fullscreen:["animationId"]};function ee(){if(document.getElementById(M))return;let t=document.createElement("style");t.id=M,t.textContent=C,document.head.appendChild(t)}function se(){let t=document.documentElement,s=document.body,i=[t.dataset.theme,t.className,t.getAttribute("style"),s?.dataset?.theme,s?.className,s?.getAttribute("style"),getComputedStyle(t).colorScheme].filter(Boolean).join(" ").toLowerCase();return i.includes("dark")?"dark":i.includes("light")?"light":window.matchMedia?.("(prefers-color-scheme: dark)").matches?"dark":"light"}function J(){let[t,s]=n.useState(se);return n.useEffect(()=>{let i=()=>s(se()),r=new MutationObserver(i);r.observe(document.documentElement,{attributes:!0,attributeFilter:["class","style","data-theme"]}),document.body&&r.observe(document.body,{attributes:!0,attributeFilter:["class","style","data-theme"]});let l=window.matchMedia?.("(prefers-color-scheme: dark)");return l?.addEventListener?.("change",i),()=>{r.disconnect(),l?.removeEventListener?.("change",i)}},[]),t}function v(t,s){let i=Number(t??s)>>>0;return`rgba(${i>>>16&255},${i>>>8&255},${i&255},${(i>>>24&255)/255})`}function q(t){return`#${(Number(t)>>>0).toString(16).padStart(8,"0").toUpperCase()}`}function U(t,s){return t==="sprite"?{background:"transparent"}:t==="circle"?{borderRadius:"50%",background:s}:t==="ring"?{borderRadius:"50%",border:`7px solid ${s}`,background:"transparent"}:t==="triangle"?{background:s,clipPath:"polygon(50% 0,100% 100%,0 100%)"}:t==="fourstar"?{background:s,clipPath:"polygon(50% 0,62% 38%,100% 50%,62% 62%,50% 100%,38% 62%,0 50%,38% 38%)"}:t==="fivestar"?{background:s,clipPath:"polygon(50% 0,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%)"}:t==="missing"?{background:"#4822285c",border:"1px dashed #ff7481"}:{background:s}}let k=c;function H(t){let s;try{s=atob(t.data)}catch{throw new Error("\u5BFC\u51FA\u5185\u5BB9\u89E3\u7801\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u6216\u5237\u65B0\u9875\u9762")}let i=new Uint8Array(s.length);for(let p=0;p<s.length;p+=1)i[p]=s.charCodeAt(p);let r=URL.createObjectURL(new Blob([i],{type:t.mimeType||"application/octet-stream"})),l=document.createElement("a");l.href=r,l.download=t.filename||"qxqy-export",l.rel="noopener",l.style.display="none",document.body.appendChild(l),l.click(),l.remove(),setTimeout(()=>URL.revokeObjectURL(r),1e3)}async function Z(t){let s=new Uint8Array(await t.arrayBuffer()),i="",r=32768;for(let l=0;l<s.length;l+=r)i+=String.fromCharCode(...s.subarray(l,l+r));return btoa(i)}let V=t=>typeof t=="object"?t.value:t,E=t=>typeof t=="object"?t.label:t,ye=[{key:"KEYBOARD",label:"PC",title:"PC KEYBOARD \u753B\u5E03\uFF1A1600\xD7900 / 2100\xD7900"},{key:"TOUCHSCREEN",label:"\u624B\u673A",title:"\u624B\u673A TOUCHSCREEN \u753B\u5E03\uFF1A1280\xD7720 / 1560\xD7720 / 1280\xD7960"}];function qe(t){return String(t.id||"").split("-").slice(1).join(":")}function we(t,s){let i=(l,p)=>p?i(p,l%p):l,r=i(Math.round(t),Math.round(s))||1;return`${Math.round(t)/r}:${Math.round(s)/r}`}function X({field:t,commit:s,axis:i}){let r=t.type==="color"?q(t.value):t.value==null?"":String(t.value),[l,p]=n.useState(r);if(n.useEffect(()=>p(t.type==="color"?q(t.value):t.value==null?"":String(t.value)),[t.value,t.type]),t.type==="note")return e("div",{className:"qxsim-note"},t.value||t.label);if(t.readonly&&(t.evidence==="N"||t.evidence==="U"))return e("div",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},t.label),e("div",{className:"qxsim-unsupported"},t.value==null?"\u5C1A\u65E0\u53EF\u7F16\u8F91\u503C":String(t.value)));if(t.type==="bool")return e("div",{className:"qxsim-switch-row"},e("span",null,t.label),e("label",{className:"qxsim-switch"},e("input",{type:"checkbox",checked:!!t.value,disabled:!!t.readonly,onChange:d=>s(t.key,d.target.checked)}),e("span",{className:"qxsim-switch-track"})));if(t.type==="enum"){let d=[...t.options||[]],y=String(t.value??"");return d.some($=>String(V($))===y)||d.unshift({value:t.value??"",label:`\u672A\u8BC6\u522B\u9009\u9879 ${t.unknownValue??(y||"\u7A7A")}\uFF08\u4FDD\u7559\u539F\u503C\uFF09`}),e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},t.label),e("select",{value:y,disabled:!!t.readonly,onChange:$=>s(t.key,$.target.value)},d.map($=>e("option",{key:String(V($)),value:V($)},E($)))))}if(t.type==="percent"){let d=Math.round(Number(t.value||0)*100);return e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},t.label),e("span",{className:"qxsim-percent"},e("input",{type:"range",min:0,max:100,value:d,onInput:y=>s(t.key,Number(y.target.value)/100)}),e("output",null,`${d}%`)))}if(t.type==="color"){let d=/^#[0-9a-f]{8}$/i.test(l)?l:q(t.value);return e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},t.label,e("small",null,"ARGB")),e("span",{className:"qxsim-color-row"},e("span",{className:"qxsim-color-swatch",title:"\u6253\u5F00\u53D6\u8272\u5668"},e("input",{type:"color",value:`#${d.slice(3)}`,onInput:y=>{let $=`#${d.slice(1,3)}${y.target.value.slice(1).toUpperCase()}`;p($),s(t.key,$)}})),e("input",{type:"text",value:l,spellCheck:!1,"aria-label":`${t.label} ARGB`,onChange:y=>p(y.target.value),onBlur:()=>s(t.key,l),onKeyDown:y=>{y.key==="Enter"&&y.currentTarget.blur(),y.key==="Escape"&&p(q(t.value))}})))}let x={value:l,disabled:!!t.readonly,readOnly:!!t.readonly,onChange:d=>p(d.target.value),onBlur:()=>{t.readonly||s(t.key,l)},onKeyDown:d=>{d.key==="Enter"&&t.type!=="text"&&d.currentTarget.blur(),d.key==="Escape"&&p(t.value==null?"":String(t.value))}};return e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},i?e("b",{className:`qxsim-axis ${i.toLowerCase()}`},i):null,t.label),t.type==="text"?e("textarea",{...x,rows:4}):e("input",{...x,type:t.type==="number"?"number":"text",step:t.type==="number"?"any":void 0}))}function W({title:t,open:s=!0,children:i}){return e("details",{className:"qxsim-section",open:s},e("summary",null,t),e("div",{className:"qxsim-section-body"},i))}function xe(t){let s={};for(let i of t||[])s[i.key]=i;return s}function Q({label:t,x:s,y:i,xAxis:r="X",yAxis:l="Y",commit:p}){return e("div",{className:"qxsim-pair"},e("div",{className:"qxsim-pair-name"},t),e(X,{field:s,axis:r,commit:p}),e(X,{field:i,axis:l,commit:p}))}function ie({field:t,commit:s,createStateChild:i}){return e("div",{className:"qxsim-state-field"},e("div",{className:"qxsim-state-label"},t.label),e("div",{className:"qxsim-state-ref"},e("button",{title:`\u65B0\u5EFA\u5E76\u7ED1\u5B9A${t.label}\u56FE\u7247`,onClick:()=>i(t.key,t.label)},"+"),e("select",{value:String(t.value??""),"aria-label":t.label,onChange:r=>s(t.key,r.target.value)},(t.options||[]).map(r=>e("option",{key:String(V(r)),value:V(r)},E(r))))))}function u({inspector:t,commit:s,createStateChild:i}){let r=xe(t.fields),l=y=>y?.type==="node"?e(ie,{key:y.key,field:y,commit:s,createStateChild:i}):y?e(X,{key:y.key,field:y,commit:s}):null,p=(F[t.kind]||[]).map(y=>r[y]).filter(Boolean).map(l),x=null;if(t.kind==="image"){let y=r.fillType?.value==="Horizontal"?r.fillHorizontalType:r.fillType?.value==="Vertical"?r.fillVerticalType:r.fillType?.value==="Radial90"?r.fillRadial90Type:r.fillRadialType,$=[l(r.enableMask),l(r.enableSoftEdge),r.enableSoftEdge?.value?e("div",{className:"qxsim-subfields",key:"soft-fields"},l(r.softEdgeMode),e(Q,{label:"\u7FBD\u5316\u5BBD\u5EA6",x:r.softEdgeWidthX,y:r.softEdgeWidthY,commit:s}),e(Q,{label:"\u7FBD\u5316\u8303\u56F4",x:r.horizontalSoftRange,y:r.verticalSoftRange,commit:s})):null,l(r.enableFill),r.enableFill?.value?e("div",{className:"qxsim-subfields",key:"fill-fields"},l(r.fillType),l(y),l(r.fillAmount)):null,l(r.reverseMaskArea)];x=e(n.Fragment,null,e(W,{title:"\u56FE\u7247\u8BBE\u7F6E"},l(r.imageSource),l(r.imageId),l(r.imageColor)),e(W,{title:"\u906E\u7F69\u8BBE\u7F6E"},$))}let d=t.kind==="textbox"?"\u6587\u672C\u6846\u8BBE\u7F6E":t.kind==="button"?"\u6309\u94AE\u8BBE\u7F6E":`${t.label}\u8BBE\u7F6E`;return e(n.Fragment,null,e(W,{title:"\u8282\u70B9\u4FE1\u606F",open:!1},e(X,{field:r.name,commit:s})),e(W,{title:"\u53D8\u6362"},r.posX?e(Q,{label:"\u4F4D\u7F6E",x:r.posX,y:r.posY,commit:s}):null,r.width?e(Q,{label:"\u5927\u5C0F",x:r.width,y:r.height,xAxis:"W",yAxis:"H",commit:s}):null,r.rotationZ?e(X,{field:r.rotationZ,commit:s}):null,r.syncAllDevices?e(X,{field:r.syncAllDevices,commit:s}):null,r.anchorType?e(X,{field:r.anchorType,commit:s}):null,r.anchorMinX?e(Q,{label:"Min",x:r.anchorMinX,y:r.anchorMinY,commit:s}):null,r.anchorMaxX?e(Q,{label:"Max",x:r.anchorMaxX,y:r.anchorMaxY,commit:s}):null,r.pivotX?e(Q,{label:"\u4E2D\u5FC3",x:r.pivotX,y:r.pivotY,commit:s}):null),e(W,{title:"\u521B\u5EFA\u8BBE\u7F6E"},r.active?e(X,{field:r.active,commit:s}):null,r.visible?e(X,{field:r.visible,commit:s}):null),x||(p.length?e(W,{title:d},p):null),r.canControllerFocus?e(W,{title:"\u624B\u67C4\u5BFC\u822A",open:!1},e(X,{field:r.canControllerFocus,commit:s})):null,r.incomplete?e(W,{title:"\u5B9E\u73B0\u72B6\u6001"},e(X,{field:r.incomplete,commit:s})):null)}function _({snap:t,selectedScriptId:s,selectScript:i,draft:r,updateDraft:l,saveScript:p,addScript:x,removeScript:d,exportLua:y,exportScripts:$,exportScriptsGia:G,notice:Y}){let A=t.scripts||[],I=A.find(w=>w.id===s)||null,z=t.mountTargets||[],T=z.filter(w=>w.assetType==="server-control-template"),f=z.filter(w=>w.assetType==="client-control-template"),te=w=>{let ae=z.find(oe=>oe.id===w);return ae?`${ae.assetLabel} \xB7 ${ae.name}`:""};return e("div",{className:"qxsim-script-page"},e("aside",{className:"qxsim-script-assets"},e("h3",null,`\u5B58\u6863\u5185 Lua \u811A\u672C\uFF08${A.length}\uFF09`),e("button",{className:"qxsim-action",style:{width:"100%",marginBottom:8},onClick:x},"\uFF0B \u65B0\u5EFA\u811A\u672C"),A.length?A.map(w=>e("div",{key:w.id,className:"qxsim-script-list-row"},e("button",{className:`qxsim-script-asset${w.id===s?" active":""}`,onClick:()=>i(w.id)},e("strong",null,w.path||"(\u672A\u547D\u540D\u811A\u672C)"),e("small",null,w.mounted?`\u6302\u8F7D\uFF1A${w.assetLabel} \xB7 ${w.controlName}`:"\u672A\u6302\u8F7D\uFF08\u4EC5\u53EF\u88AB require\uFF09")),e("button",{className:"qxsim-iconbtn",title:"\u4E0B\u8F7D\u8BE5\u811A\u672C .lua",onClick:()=>y(w.id)},"\u21E9"),e("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u8BE5\u811A\u672C",onClick:()=>d(w.id)},"\u2715"))):e("div",{className:"qxsim-empty"},"\u8FD8\u6CA1\u6709\u811A\u672C\uFF0C\u70B9\u51FB\u201C\u65B0\u5EFA\u811A\u672C\u201D\u5F00\u59CB")),e("main",{className:"qxsim-script-editor"},I&&r?e(n.Fragment,null,e("div",{className:"qxsim-script-title"},e("div",null,e("h2",null,r.path||"(\u672A\u547D\u540D\u811A\u672C)"),e("span",null,`\u5C5E\u4E8E\u5B58\u6863\u201C${t.save?.name||"\u672A\u547D\u540D\u5B58\u6863"}\u201D \xB7 Lua \u811A\u672C\u662F\u5B58\u6863\u5185\u72EC\u7ACB\u8D44\u4EA7`)),e("span",null,`\u811A\u672C ${I.id}`)),e("div",{className:"qxsim-script-fields"},e("label",null,"\u811A\u672C\u8DEF\u5F84\uFF08\u5DE5\u4F5C\u533A\u76F8\u5BF9\u8DEF\u5F84\uFF09",e("input",{type:"text",value:r.path,placeholder:"lua/example.lua",onChange:w=>l({path:w.target.value})})),e("label",null,"\u6302\u8F7D\u76EE\u6807\uFF08\u5BA2\u6237\u7AEF\u63A7\u4EF6 / \u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\uFF09",e("select",{value:r.controlId?`${r.controlAsset||"server-control-template"}|${r.controlId}`:"",onChange:w=>{let[ae,oe]=w.target.value.split("|");l(oe?{controlId:oe,controlAsset:ae}:{controlId:"",controlAsset:""})}},e("option",{value:""},"\u672A\u6302\u8F7D\uFF08\u4E0D\u751F\u6548\uFF0C\u4EC5\u53EF\u88AB require\uFF09"),e("optgroup",{label:"\u670D\u52A1\u5668\u63A7\u4EF6\u6A21\u677F \xB7 \u5BA2\u6237\u7AEF\u63A7\u4EF6\u5BB9\u5668\u5185"},T.map(w=>e("option",{key:w.id,value:`${w.assetType}|${w.id}`},`${w.name} \xB7 ${w.id}`))),f.length?e("optgroup",{label:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F"},f.map(w=>e("option",{key:w.id,value:`${w.assetType}|${w.id}`},`${w.name} \xB7 ${w.id}`))):null))),e("label",null,"Lua \u6E90\u7801",e("textarea",{value:r.source,spellCheck:!1,placeholder:"-- \u5728\u8FD9\u91CC\u8F93\u5165\u5BA2\u6237\u7AEF Lua\uFF1B\u811A\u672C\u53EA\u6709\u6302\u8F7D\u5230\u5BA2\u6237\u7AEF\u63A7\u4EF6\u540E\u624D\u4F1A\u5728\u8BD5\u73A9\u65F6\u751F\u6548",onChange:w=>l({source:w.target.value})})),e("div",{className:"qxsim-script-footer"},e("span",null,r.dirty?"\u6709\u672A\u4FDD\u5B58\u7684\u4FEE\u6539":Y||(I.mounted?`\u5DF2\u6302\u8F7D\uFF1A${te(I.controlId)}`:"\u5F53\u524D\u672A\u6302\u8F7D\uFF0C\u8BD5\u73A9\u65F6\u4E0D\u4F1A\u81EA\u52A8\u8FD0\u884C")),e("span",{className:"spacer"}),e("button",{className:"qxsim-action",onClick:$},"\u21E9 \u811A\u672C\u5305 JSON"),e("button",{className:"qxsim-action",onClick:G},"\u21E9 \u811A\u672C\u5305 GIA"),e("button",{className:"qxsim-action primary",disabled:!r.dirty,onClick:p},"\u4FDD\u5B58\u811A\u672C"))):e("div",{className:"qxsim-empty"},"\u8BF7\u65B0\u5EFA\u6216\u9009\u62E9\u4E00\u4E2A\u811A\u672C")))}function K(t){if(t===void 0)return"null";try{return JSON.stringify(t)}catch{return String(t)}}function Re(t){let s=String(t??"").trim();if(!s)return null;try{return JSON.parse(s)}catch{return s}}function Je(t){return!!(t&&typeof t=="object"&&!Array.isArray(t)&&Object.prototype.hasOwnProperty.call(t,"fromSignalParam"))}function Xe(t){return{version:1,dirty:!1,rules:(Array.isArray(t?.rules)?t.rules:[]).map((i,r)=>({id:String(i.id||`signal-${r+1}`),signalName:String(i.signalName||""),actions:Array.isArray(i.actions)&&i.actions.length?i.actions.map(l=>wt(l)):[ge("setCustomVariable")]}))}}let We=["PlayerSelf","AllPlayers","Player1","Player2","Player3","Player4","Player5","Player6","Player7","Player8"],Ke=["PlayerSelf","Level","Player1","Player2","Player3","Player4","Player5","Player6","Player7","Player8"],Ze={PlayerSelf:"PlayerSelf \u5F53\u524D\u73A9\u5BB6",AllPlayers:"AllPlayers \u5168\u90E8\u73A9\u5BB6",Level:"Level \u5173\u5361",Player1:"Player1 \u73A9\u5BB61",Player2:"Player2 \u73A9\u5BB62",Player3:"Player3 \u73A9\u5BB63",Player4:"Player4 \u73A9\u5BB64",Player5:"Player5 \u73A9\u5BB65",Player6:"Player6 \u73A9\u5BB66",Player7:"Player7 \u73A9\u5BB67",Player8:"Player8 \u73A9\u5BB68"};function Ae(t){return Ke.includes(t)&&t!=="AllPlayers"?t:t==="Level"?"Level":"PlayerSelf"}function Ee(t){return We.includes(t)?t:"PlayerSelf"}function ge(t){return t==="sendClientScriptSignal"?{kind:"sendClientScriptSignal",target:"PlayerSelf",signalName:"",params:[]}:{kind:"setCustomVariable",entityType:"PlayerSelf",name:"",value:0}}function yt(t){return{version:1,rules:(t?.rules||[]).map(s=>({id:String(s.id||""),signalName:String(s.signalName||"").trim(),actions:(s.actions||[]).map(i=>i?.kind==="sendClientScriptSignal"?{kind:"sendClientScriptSignal",target:Ee(i.target),signalName:String(i.signalName||"").trim(),params:Array.isArray(i.params)?i.params:[]}:{kind:"setCustomVariable",entityType:Ae(i?.entityType),name:String(i?.name||"").trim(),value:i&&Object.prototype.hasOwnProperty.call(i,"value")?i.value:0})}))}}function qt(t){let s=[];for(let[i,r]of(t?.rules||[]).entries()){String(r.signalName||"").trim()||s.push(`\u89C4\u5219 ${i+1} \u9700\u8981\u76D1\u542C\u4FE1\u53F7\u540D`);let l=r.actions||[];l.length||s.push(`\u89C4\u5219 ${i+1} \u81F3\u5C11\u9700\u8981\u4E00\u4E2A\u52A8\u4F5C`);for(let[p,x]of l.entries())x?.kind==="sendClientScriptSignal"?String(x.signalName||"").trim()||s.push(`\u89C4\u5219 ${i+1} \u52A8\u4F5C ${p+1} \u9700\u8981\u5BA2\u6237\u7AEF\u4FE1\u53F7\u540D`):String(x?.name||"").trim()||s.push(`\u89C4\u5219 ${i+1} \u52A8\u4F5C ${p+1} \u9700\u8981\u53D8\u91CF\u540D`)}return s}function wt(t){if(t?.kind==="sendClientScriptSignal")return{kind:"sendClientScriptSignal",target:Ee(t.target),signalName:String(t.signalName||""),params:Array.isArray(t.params)?t.params.map(i=>{try{return JSON.parse(JSON.stringify(i))}catch{return i}}):[]};let s=0;if(t&&Object.prototype.hasOwnProperty.call(t,"value"))try{s=JSON.parse(JSON.stringify(t.value))}catch{s=t.value}return{kind:"setCustomVariable",entityType:Ae(t?.entityType),name:String(t?.name||""),value:s}}function Qe({label:t,value:s,onChange:i}){let r=Je(s),[l,p]=n.useState(()=>r?"":K(s));return n.useEffect(()=>{Je(s)||p(K(s))},[s]),e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},t),e("select",{value:r?"param":"literal","aria-label":`${t}\u6765\u6E90`,onChange:x=>{x.target.value==="param"?i({fromSignalParam:Number(s?.fromSignalParam)||0}):i(Re(l||"0"))}},e("option",{value:"literal"},"\u5B57\u9762\u91CF\uFF08JSON\uFF09"),e("option",{value:"param"},"\u5F15\u7528\u76D1\u542C\u4FE1\u53F7\u53C2\u6570")),r?e("input",{type:"number",min:0,step:1,value:Number(s.fromSignalParam)||0,"aria-label":`${t}\u53C2\u6570\u5E8F\u53F7`,onChange:x=>i({fromSignalParam:Math.max(0,Math.trunc(Number(x.target.value)||0))})}):e("textarea",{className:"qxsim-logic-json",value:l,spellCheck:!1,"aria-label":`${t}\u5B57\u9762\u91CF`,onBlur:()=>i(Re(l)),onChange:x=>p(x.target.value)}))}function kt({params:t,onChange:s}){let i=Array.isArray(t)?t:[];return e("div",{className:"qxsim-field wide"},e("span",{className:"qxsim-field-label"},"\u5BA2\u6237\u7AEF\u4FE1\u53F7\u53C2\u6570\uFF08\u6309\u6DFB\u52A0\u987A\u5E8F\uFF09"),i.length?i.map((r,l)=>e("div",{key:l,style:{display:"flex",gap:6,alignItems:"flex-start",marginBottom:6}},e("div",{style:{flex:1,minWidth:0}},e(Qe,{label:`\u53C2\u6570 ${l}`,value:r,onChange:p=>s(i.map((x,d)=>d===l?p:x))})),e("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u53C2\u6570",onClick:()=>s(i.filter((p,x)=>x!==l))},"\u2715"))):e("div",{className:"qxsim-muted"},"\u6682\u65E0\u53C2\u6570\uFF0C\u53EF\u53D1\u9001\u7A7A\u53C2\u6570\u5217\u8868"),e("button",{className:"qxsim-action",style:{marginTop:4},onClick:()=>s(i.concat([0]))},"\uFF0B \u6DFB\u52A0\u53C2\u6570"))}function Nt({snap:t,draft:s,setDraft:i,saveLogic:r,notice:l,error:p}){let x=s?.rules||[];function d(A){i({version:1,rules:A,dirty:!0})}function y(){d(x.concat([{id:`signal-${Date.now().toString(36)}`,signalName:"",actions:[ge("setCustomVariable")]}]))}function $(A,I){d(x.map((z,T)=>T===A?{...z,...I}:z))}function G(A,I,z){let T=x[A];T&&$(A,{actions:T.actions.map((f,te)=>te===I?{...f,...z}:f)})}function Y(A,I,z){G(A,I,ge(z))}return e("div",{className:"qxsim-server-logic"},e("div",{className:"qxsim-logic-wrap"},e("div",{className:"qxsim-logic-title"},e("div",null,e("h2",null,"\u670D\u52A1\u7AEF\u903B\u8F91"),e("p",null,`\u5C5E\u4E8E\u5B58\u6863\u201C${t.save?.name||"\u672A\u547D\u540D\u5B58\u6863"}\u201D \xB7 \u76D1\u542C\u5BA2\u6237\u7AEF\u4FE1\u53F7\u540E\u8BBE\u7F6E Level / \u73A9\u5BB6\u53D8\u91CF\uFF0C\u6216\u5411\u6307\u5B9A\u73A9\u5BB6\u53D1\u9001\u5BA2\u6237\u7AEF\u811A\u672C\u4FE1\u53F7`)),e("button",{className:"qxsim-action primary",disabled:!s?.dirty,onClick:r},"\u4FDD\u5B58\u670D\u52A1\u7AEF\u903B\u8F91")),e("div",{className:"qxsim-note"},"\u8FD9\u662F\u6A21\u62DF\u5668\u5B58\u6863\u683C\u5F0F\uFF0C\u4E0D\u662F\u5B98\u65B9\u8282\u70B9\u56FE\u3002PlayerSelf \u8868\u793A\u53D1\u4FE1\u53F7\u7684\u90A3\u4F4D\u73A9\u5BB6\uFF1BPlayer1\u20138 \u662F\u56FA\u5B9A\u5EA7\u4F4D\uFF1BAllPlayers \u5411\u672C\u5C40\u5168\u90E8\u8BD5\u73A9\u73A9\u5BB6\u5E7F\u64AD\u3002"),p?e("div",{className:"qxsim-logic-error"},p):null,x.length?x.map((A,I)=>e("section",{key:A.id||I,className:"qxsim-logic-rule"},e("div",{className:"qxsim-logic-rule-head"},e("strong",null,`\u89C4\u5219 ${I+1}`),e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},"\u76D1\u542C\u4FE1\u53F7\u540D"),e("input",{type:"text",value:A.signalName,placeholder:"EarnGold","aria-label":`\u89C4\u5219 ${I+1} \u76D1\u542C\u4FE1\u53F7\u540D`,onChange:z=>$(I,{signalName:z.target.value})})),e("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u89C4\u5219",onClick:()=>d(x.filter((z,T)=>T!==I))},"\u2715")),e("div",{className:"qxsim-logic-actions"},(A.actions||[]).map((z,T)=>e("div",{key:T,className:"qxsim-logic-action"},e("div",{className:"qxsim-logic-action-head"},e("strong",null,`\u52A8\u4F5C ${T+1}`),e("select",{value:z.kind,"aria-label":`\u89C4\u5219 ${I+1} \u52A8\u4F5C ${T+1} \u7C7B\u578B`,onChange:f=>Y(I,T,f.target.value)},e("option",{value:"setCustomVariable"},"\u8BBE\u7F6E\u81EA\u5B9A\u4E49\u53D8\u91CF"),e("option",{value:"sendClientScriptSignal"},"\u53D1\u9001\u5BA2\u6237\u7AEF\u811A\u672C\u4FE1\u53F7")),e("span",null,z.kind==="sendClientScriptSignal"?"\u53D1\u7ED9\u5F53\u524D\u73A9\u5BB6\u3001\u6307\u5B9A\u73A9\u5BB6\u6216\u5168\u90E8\u73A9\u5BB6":"\u5199\u5165 Level / \u5F53\u524D\u73A9\u5BB6 / \u73A9\u5BB61-8"),e("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u52A8\u4F5C",disabled:(A.actions||[]).length<=1,onClick:()=>$(I,{actions:A.actions.filter((f,te)=>te!==T)})},"\u2715")),z.kind==="sendClientScriptSignal"?e("div",{className:"qxsim-logic-fields"},e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},"\u53D1\u9001\u76EE\u6807"),e("select",{value:Ee(z.target),onChange:f=>G(I,T,{target:f.target.value})},We.map(f=>e("option",{key:f,value:f},Ze[f])))),e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},"\u5BA2\u6237\u7AEF\u4FE1\u53F7\u540D"),e("input",{type:"text",value:z.signalName,placeholder:"GoldChanged",onChange:f=>G(I,T,{signalName:f.target.value})})),e(kt,{params:z.params,onChange:f=>G(I,T,{params:f})})):e("div",{className:"qxsim-logic-fields"},e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},"\u5B9E\u4F53"),e("select",{value:Ae(z.entityType),onChange:f=>G(I,T,{entityType:f.target.value})},Ke.map(f=>e("option",{key:f,value:f},Ze[f])))),e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},"\u53D8\u91CF\u540D"),e("input",{type:"text",value:z.name,placeholder:"Gold",onChange:f=>G(I,T,{name:f.target.value})})),e("div",{className:"wide"},e(Qe,{label:"\u53D8\u91CF\u503C",value:z.value,onChange:f=>G(I,T,{value:f})}))))),e("div",{className:"qxsim-logic-actions-foot"},e("button",{className:"qxsim-action",onClick:()=>$(I,{actions:(A.actions||[]).concat([ge("setCustomVariable")])})},"\uFF0B \u8BBE\u7F6E\u81EA\u5B9A\u4E49\u53D8\u91CF"),e("button",{className:"qxsim-action",onClick:()=>$(I,{actions:(A.actions||[]).concat([ge("sendClientScriptSignal")])})},"\uFF0B \u53D1\u9001\u5BA2\u6237\u7AEF\u811A\u672C\u4FE1\u53F7"))))):e("div",{className:"qxsim-logic-empty"},"\u8FD8\u6CA1\u6709\u76D1\u542C\u89C4\u5219\u3002\u8BD5\u73A9\u65F6\u5BA2\u6237\u7AEF SendSignal \u4E0D\u4F1A\u81EA\u52A8\u6539\u53D8\u91CF\u6216\u56DE\u4F20\u4FE1\u53F7\u3002"),e("div",{className:"qxsim-logic-actions-foot"},e("button",{className:"qxsim-action",onClick:y},"\uFF0B \u6DFB\u52A0\u76D1\u542C\u89C4\u5219")),e("div",{className:"qxsim-script-footer",style:{marginTop:16}},e("span",null,s?.dirty?"\u6709\u672A\u4FDD\u5B58\u7684\u4FEE\u6539":l||"\u4FDD\u5B58\u540E\u4F1A\u5199\u5165\u5F53\u524D\u5B58\u6863\uFF0C\u4E0B\u6B21\u8BD5\u73A9\u751F\u6548"),e("span",{className:"spacer"}))))}function St({inspector:t,onSave:s}){let[i,r]=n.useState(String(t.guid??"")),[l,p]=n.useState(!1),[x,d]=n.useState("");n.useEffect(()=>{r(String(t.guid??"")),d("")},[t.guid]);async function y($){$.preventDefault();let G=i.trim();if(!/^[0-9]+$/.test(G)||Number(G)<1||Number(G)>2147483647){d("\u8BF7\u8F93\u5165 1\u20132147483647 \u4E4B\u95F4\u7684\u6574\u6570\u7D22\u5F15\u3002");return}p(!0),d("");try{await s(t.id,Number(G))}catch(Y){d(Y?.message||String(Y))}finally{p(!1)}}return e("form",{onSubmit:y,style:{marginTop:8}},e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u7D22\u5F15"),e("div",{style:{display:"flex",gap:6}},e("input",{type:"text",inputMode:"numeric","aria-label":"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u7D22\u5F15",value:i,disabled:l,onChange:$=>{r($.target.value),d("")},onKeyDown:$=>{$.key==="Escape"&&(r(String(t.guid)),d(""))}}),e("button",{type:"submit",className:"qxsim-action",disabled:l||i.trim()===String(t.guid)},l?"\u4FDD\u5B58\u4E2D":"\u4FEE\u6539"))),x?e("div",{role:"alert",className:"qxsim-note"},x):null,e("div",{className:"qxsim-muted",style:{lineHeight:1.5}},"\u586B\u5199 GIA \u5BFC\u5165\u540E\u5B9E\u9645\u663E\u793A\u7684\u7D22\u5F15\uFF1B\u4FEE\u6539\u540E\u987B\u8BA9 AI \u540C\u6B65 Lua \u811A\u672C\u4E2D\u7684\u5F15\u7528\u3002"))}function Ct({snap:t,addScriptMounted:s,mountScriptTo:i,unmountScript:r,openScript:l}){let p=(t.scripts||[]).filter(d=>d.controlId===t.selectedId),x=(t.scripts||[]).filter(d=>d.controlId!==t.selectedId);return e(n.Fragment,null,e(W,{title:"\u6302\u8F7D\u5230\u8BE5\u63A7\u4EF6\u7684\u811A\u672C"},p.length?p.map(d=>e("div",{key:d.id,className:"qxsim-script-list-row"},e("button",{className:"qxsim-script-asset",onClick:()=>l(d.id)},e("strong",null,d.path||"(\u672A\u547D\u540D\u811A\u672C)"),e("small",null,`\u811A\u672C ${d.id}`)),e("button",{className:"qxsim-iconbtn",title:"\u89E3\u9664\u6302\u8F7D\uFF08\u4FDD\u7559\u811A\u672C\uFF09",onClick:()=>r(d.id)},"\u292B"))):e("div",{className:"qxsim-note"},"\u8BE5\u63A7\u4EF6\u5C1A\u672A\u6302\u8F7D\u811A\u672C\u3002\u811A\u672C\u6302\u8F7D\u5230\u5BA2\u6237\u7AEF\u63A7\u4EF6\u540E\u624D\u4F1A\u5728\u8BD5\u73A9\u65F6\u751F\u6548\u3002")),e(W,{title:"\u6302\u8F7D\u5DF2\u6709\u811A\u672C",open:!1},x.length?e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},"\u9009\u62E9\u811A\u672C\u6302\u8F7D\u5230\u8BE5\u63A7\u4EF6"),e("select",{value:"","aria-label":"\u9009\u62E9\u811A\u672C\u6302\u8F7D\u5230\u8BE5\u63A7\u4EF6",onChange:d=>{let y=d.target.value;d.target.value="",y&&i(y)}},e("option",{value:""},"\u9009\u62E9\u811A\u672C\u2026"),x.map(d=>e("option",{key:d.id,value:d.id},`${d.path||"(\u672A\u547D\u540D\u811A\u672C)"} \xB7 ${d.id}${d.mounted?`\uFF08\u5F53\u524D\u6302\u8F7D\u4E8E ${d.assetLabel} \xB7 ${d.controlName}\uFF0C\u5C06\u79FB\u52A8\u5230\u6B64\u63A7\u4EF6\uFF09`:"\uFF08\u672A\u6302\u8F7D\uFF09"}`)))):e("div",{className:"qxsim-note"},"\u5B58\u6863\u5185\u8FD8\u6CA1\u6709\u5176\u4ED6\u811A\u672C\uFF0C\u53EF\u70B9\u51FB\u4E0B\u65B9\u6309\u94AE\u65B0\u5EFA\u3002"),e("div",{className:"qxsim-script-actions",style:{marginTop:8}},e("button",{onClick:()=>s(t.selectedId)},"\uFF0B \u65B0\u5EFA\u811A\u672C\u5E76\u6302\u8F7D\u5230\u6B64\u63A7\u4EF6"))))}function $t(t,s){let i=null,r=null;function l(p,x){p.id===s&&(i=p,r=x);for(let d of p.children||[])l(d,p)}if(l(t,null),i?.kind==="container")return i.id;if(i?.kind==="server-container")return i.children?.find(p=>p.kind==="container")?.id||i.id;for(;r&&r.kind!=="container";){let x=function(d){for(let y of d.children||[])y===r&&(p=d),x(y)},p=null;x(t),r=p}return r?.id||t.children?.find(p=>p.kind==="container")?.id}function It(t,s){let i=null;function r(l){l.id===s&&(i=l);for(let p of l.children||[])r(p)}return r(t),i&&i.kind!=="server-container"?i.id:$t(t,s)}function Pt(t,s,i,r){let l=t,p=t.kind,x=p==="textbox"||p==="textwindow",d=l.renderLeft??l.left,y=l.renderBottom??l.bottom,$=l.renderWidth??l.width,G=l.renderHeight??l.height,Y=l.renderRotationZ??t.rotationZ??0,A={left:`${d/i*100}%`,bottom:`${y/r*100}%`,width:`${$/i*100}%`,height:`${G/r*100}%`,"--rotation":`${-Number(Y)}deg`,fontSize:Math.max(8,Math.min(40,Number(t.fontSize||12))),color:x?v(t.fontColor,4294967295):"#fff"};p==="image"?Object.assign(A,U(t.primitive,v(t.imageColor,4294967295))):x?(A.background=v(t.bgColor,16777215),A.justifyContent=t.horizontalAlignment==="Right"?"flex-end":t.horizontalAlignment==="Middle"?"center":"flex-start",A.alignItems=t.verticalAlignment==="Bottom"?"flex-end":t.verticalAlignment==="Middle"?"center":"flex-start",A.textShadow=t.enableOutline===!1?"none":`0 0 2px ${v(t.outlineColor,4278190080)}`):p==="container"&&(A.background="transparent");let I=t.id===s.selectedId,z=p==="image"&&t.primitive==="sprite"?e(j,{key:t.imageId,item:t}):x?t.text||"":p==="image"&&t.primitive==="missing"?e("span",{className:"qxsim-box-label"},`\u7F3A\u5C11\u56FE\u7247 ${t.imageId||""}`):p!=="container"&&p!=="image"?e("span",{className:"qxsim-box-label"},t.name||S[p]?.[1]||p):null;return e("div",{key:t.id,className:`qxsim-box ${p}${I?" selected":""}${t.instantiated?" dynamic":""}${t.pressed?" pressed":""}`,style:A},z,I&&p!=="container"?["tl","tr","bl","br"].map(T=>e("i",{key:T,className:`qxsim-handle ${T}`})):null)}function At({sessionId:t}){let s=J(),[i,r]=n.useState(null),l=n.useRef(null),p=n.useRef(Promise.resolve()),[x,d]=n.useState(""),y=P({sessionId:t,api:k,playUrl:N,onError:d}),[$,G]=n.useState(null),[Y,A]=n.useState(!1),[I,z]=n.useState(!1),[T,f]=n.useState(""),te=n.useRef(null),[w,ae]=n.useState([]),[oe,et]=n.useState([]),[ne,Et]=n.useState("ui"),[Le,ze]=n.useState("base"),[Te,Lt]=n.useState("fit"),[Me,zt]=n.useState({}),[ke,Oe]=n.useState(""),[de,De]=n.useState("template"),[je,Ne]=n.useState(""),[Ge,fe]=n.useState(null),[tt,Fe]=n.useState({version:1,rules:[],dirty:!1}),at=n.useRef(null),[Se,Tt]=n.useState({width:0,height:0});n.useEffect(()=>{let a=at.current;if(!a||typeof ResizeObserver>"u")return;let o=new ResizeObserver(m=>{let h=m[0]?.contentRect;h&&h.width>0&&Tt({width:h.width,height:h.height})});return o.observe(a),()=>o.disconnect()},[i?.canvas?.id]);function pe(a,{keepLogicDraft:o=!0}={}){return l.current=a,r(a),a?.scripts&&Ne(m=>a.scripts.some(h=>h.id===m)?m:a.scripts[0]?.id||""),Fe(m=>o&&m?.dirty?m:Xe(a?.serverLogic)),a}let Ce=n.useCallback(async()=>{try{d(""),pe(await k(t,"get"),{keepLogicDraft:!1})}catch(a){d(a?.message||String(a))}},[t]),$e=n.useCallback(async()=>{try{let a=await k(t,"archives");et(a?.archives||[])}catch{et([])}},[t]);n.useEffect(()=>{Ce(),$e()},[Ce,$e]);function D(a,o=""){let m=async()=>{let h=l.current;if(!h)throw new Error("editor is not ready");try{if(o&&h.asset?.type!==o)throw new Error("\u5F53\u524D\u8D44\u4EA7\u5DF2\u5207\u6362\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u63A7\u4EF6\u540E\u4FEE\u6539\u7D22\u5F15");let R=await k(t,"patch",{op:{...a,expectedRevision:h.version}});return d(""),pe(R)}catch(R){throw d(R?.message||String(R)),/revision conflict/.test(String(R?.message||R))&&await Ce(),R}};return p.current=p.current.then(m,m),p.current}async function Mt(a,o,m){await D({op:"setControlGuid",id:a,guid:o},m),f("\u63A7\u4EF6\u7D22\u5F15\u5DF2\u4FEE\u6539\uFF1B\u8BF7\u8BA9 AI \u6839\u636E\u7D22\u5F15\u53D8\u66F4\u8BB0\u5F55\u540C\u6B65 Lua \u811A\u672C\u5F15\u7528\u3002")}async function Ot(){let m=["\u8BF7\u540C\u6B65\u5F53\u524D\u6A21\u62DF\u5668\u5DE5\u7A0B\u7684\u5BA2\u6237\u7AEF\u63A7\u4EF6\u7D22\u5F15\u5F15\u7528\uFF1A",...(l.current?.controlGuidChanges||[]).map(h=>`${h.controlAsset} / ${h.controlName}\uFF08${h.controlId}\uFF09\uFF1A${h.oldGuid} \u2192 ${h.newGuid}\uFF1B\u8BB0\u5F55 ${h.id}`),"\u5148\u8BFB\u53D6\u6700\u65B0\u5FEB\u7167\u7684 controlGuidChanges\uFF0C\u6309\u63A7\u4EF6\u8EAB\u4EFD\u548C\u53D8\u66F4\u987A\u5E8F\u6838\u5BF9\u5168\u90E8 Lua \u811A\u672C\u7684\u7D22\u5F15\u5E38\u91CF\u3001\u914D\u7F6E\u8868\u4E0E\u8C03\u7528\uFF0C\u4FEE\u6539\u5B58\u6863\u4E2D\u7684 source \u53CA\u76F8\u5173 Lua \u6E90\u6587\u4EF6\u3002\u4E0D\u8981\u5168\u5C40\u66FF\u6362\u540C\u503C\u6570\u5B57\uFF0C\u4E5F\u4E0D\u8981\u6539\u8FD0\u884C\u65F6\u5B9E\u4F8B ID \u6216\u56FE\u7247\u8D44\u6E90 ID\u3002","\u68C0\u67E5\u65E7\u7D22\u5F15\u5F15\u7528\u5E76\u91CD\u65B0\u8BD5\u73A9\uFF1B\u786E\u8BA4\u5B8C\u6210\u540E\u7528 acknowledgeControlGuidChanges \u7684 changeIds \u6E05\u9664\u5DF2\u6838\u5BF9\u8BB0\u5F55\uFF0C\u518D\u4FDD\u5B58\u5B8C\u6574\u5B58\u6863\u3002"].join(`
27
- `);try{await navigator.clipboard.writeText(m),f("\u5DF2\u590D\u5236\u7D22\u5F15\u53D8\u66F4\u53CA\u811A\u672C\u540C\u6B65\u8981\u6C42\uFF0C\u53EF\u7C98\u8D34\u7ED9 AI\u3002")}catch{d("\u65E0\u6CD5\u8BBF\u95EE\u526A\u8D34\u677F\uFF0C\u8BF7\u5C06\u4E0A\u65B9\u7D22\u5F15\u53D8\u66F4\u8BB0\u5F55\u4EA4\u7ED9 AI\uFF0C\u5E76\u8981\u6C42\u540C\u6B65 Lua \u811A\u672C\u5F15\u7528\u3002")}}async function Dt(){let a=(l.current?.controlGuidChanges||[]).map(o=>o.id);try{await le(),await D({op:"acknowledgeControlGuidChanges",changeIds:a}),f("\u5DF2\u786E\u8BA4\u811A\u672C\u7D22\u5F15\u5F15\u7528\u5B8C\u6210\u540C\u6B65\uFF1B\u8BF7\u4FDD\u5B58\u5B8C\u6574\u5B58\u6863\u3002")}catch{}}let jt=(a,o)=>void D({op:"set",key:a,value:o}).catch(()=>{});async function Gt(){let a=l.current?.boxes?.find(o=>o.id===l.current.selectedId)?.imageId;if(be(a)){z(!0);try{await k(t,"image-refresh",{imageId:a}),xt(a),f(`\u56FE\u7247 ${a} \u5DF2\u91CD\u65B0\u4E0B\u8F7D\uFF1B\u540C\u6E90\u8BD5\u73A9\u9875\u4F1A\u540C\u6B65\u5237\u65B0\u3002`)}catch(o){d(o.message)}finally{z(!1)}}}async function Ft(a,o){let m=l.current?.inspector?.id;if(m)try{let h=await D({op:"add",kind:"image",parentId:m,name:`${o}\u56FE\u7247`});await D({op:"set",id:m,key:a,value:h.selectedId}),f(`${o}\u5DF2\u521B\u5EFA\u5E76\u7ED1\u5B9A\uFF1B\u53EF\u5728\u63A7\u4EF6\u6811\u4E2D\u7EE7\u7EED\u7F16\u8F91\u56FE\u7247\u3002`)}catch{}}n.useEffect(()=>{let a=i?.scripts?.find(o=>o.id===je);fe(o=>o&&a&&o.id===a.id&&o.dirty?o:a?{id:a.id,path:a.path,source:a.source,controlId:a.controlId,controlAsset:a.controlAsset,dirty:!1}:null)},[i,je]);function Bt(a){fe(o=>o&&{...o,...a,dirty:!0})}async function le(){let a=Ge;!a||!a.dirty||(await D({op:"updateScript",id:a.id,path:a.path,source:a.source,controlId:a.controlId,controlAsset:a.controlAsset}),fe(o=>o&&o.id===a.id?{...o,dirty:!1}:o))}function it(){le().then(()=>f("Lua \u811A\u672C\u5DF2\u4FDD\u5B58\u5230\u5F53\u524D\u5B58\u6863")).catch(()=>{})}async function me({silent:a=!1}={}){let o=tt;if(!o||!o.dirty)return;let m=qt(o);if(m.length){let R=m[0];throw a||d(R),new Error(R)}let h=await D({op:"setServerLogic",logic:yt(o)});Fe(Xe(h.serverLogic)),f("\u670D\u52A1\u7AEF\u903B\u8F91\u5DF2\u4FDD\u5B58\u5230\u5F53\u524D\u5B58\u6863")}function _t(){me({silent:!0}).catch(()=>{})}function he(a){it(),_t(),Et(a)}async function nt(a={}){let o=await D({op:"addScript",...a}),m=o.scripts?.[o.scripts.length-1];return m&&Ne(m.id),f(a.controlId?"\u5DF2\u65B0\u5EFA\u811A\u672C\u5E76\u6302\u8F7D\u5230\u8BE5\u63A7\u4EF6":"\u5DF2\u65B0\u5EFA\u811A\u672C\uFF0C\u53EF\u7F16\u8F91\u8DEF\u5F84\u3001\u6E90\u7801\u548C\u6302\u8F7D\u76EE\u6807"),m}function Ut(a){Ge?.id===a&&fe(null),D({op:"removeScript",id:a}).then(()=>f("\u811A\u672C\u5DF2\u5220\u9664")).catch(()=>{})}function Ht(a){D({op:"updateScript",id:a,controlId:""}).then(()=>f("\u5DF2\u89E3\u9664\u6302\u8F7D\uFF0C\u811A\u672C\u4ECD\u4FDD\u7559\u5728\u5B58\u6863\u4E2D")).catch(()=>{})}function Vt(a){let o=l.current?.selectedId||"",m=l.current?.asset?.type||"";o&&(fe(h=>h&&h.id===a?{...h,controlId:o,controlAsset:m}:h),D({op:"updateScript",id:a,controlId:o,controlAsset:m}).then(()=>f("\u5DF2\u6302\u8F7D\u5230\u5F53\u524D\u63A7\u4EF6")).catch(()=>{}))}async function rt(a){if(l.current?.asset?.type!==a)try{let o=await D({op:"selectAsset",assetType:a});Oe(""),De(a==="client-control-template"?"template":"child"),f(`\u5DF2\u5207\u6362\u5230\u5B58\u6863\u5185\u7684${o.asset.label}`)}catch{}}function Yt(a,o){let m=l.current;if(!m)return;let h=m.asset?.type==="client-control-template"&&de==="template",R=h?{op:"addTemplate",kind:a,name:`${o}\u6A21\u677F`}:{op:"add",kind:a,parentId:It(m.root,m.selectedId),name:o};D(R).then(()=>f(h?`\u5DF2\u65B0\u589E${o}\u6A21\u677F`:`\u5DF2\u6DFB\u52A0${o}\u5B50\u63A7\u4EF6`)).catch(()=>{})}async function Ie(a,o=""){try{await p.current.catch(()=>{}),await le(),await me();let m=await k(t,"export",{format:a,assetType:o});if(ae([...new Set([...m.warnings||[],...(m.files||[]).flatMap(h=>h.warnings||[])])]),Array.isArray(m?.files)&&m.files.length){for(let h of m.files)H(h);d(""),f(`\u5DF2\u5BFC\u51FA ${m.files.length} \u4E2A GIA \u6587\u4EF6\uFF08${m.files.map(h=>h.filename).join("\u3001")}\uFF09\uFF1B\u82E5\u6D4F\u89C8\u5668\u62E6\u622A\u591A\u6587\u4EF6\u4E0B\u8F7D\uFF0C\u8BF7\u5141\u8BB8\u540E\u91CD\u8BD5\u3002`);return}H(m),d(""),f(m.warnings?.length?`\u5DF2\u5BFC\u51FA ${m.filename}\uFF1B\u8BF7\u67E5\u770B\u4E0A\u65B9\u5BFC\u51FA\u8BF4\u660E\u3002`:`\u5DF2\u5BFC\u51FA ${m.filename}`)}catch(m){d(m?.message||String(m))}}async function Rt(a){if(a)try{await p.current.catch(()=>{});let o=await k(t,"load-archive",{path:a});pe(o.snapshot,{keepLogicDraft:!1}),d(""),f(`\u5DF2\u4ECE\u5DE5\u4F5C\u533A\u62C9\u53D6 ${a}`),ae([])}catch(o){d(o?.message||String(o))}}async function Jt(a){if(!a)return;let o=a.name.toLowerCase().endsWith(".gia")?"gia":a.name.toLowerCase().endsWith(".json")?"json":a.name.toLowerCase().endsWith(".lua")?"lua":"";if(!o){d("\u4EC5\u652F\u6301 .json\u3001.gia \u6216 .lua \u6587\u4EF6");return}try{await p.current.catch(()=>{});let m=await k(t,"import",{format:o,filename:a.name,data:await Z(a)});pe(m.snapshot,{keepLogicDraft:!1}),d(""),f([`\u5DF2\u5BFC\u5165 ${a.name}`,...m.warnings||[]].join(`
28
- `)),ae([])}catch(m){d(m?.message||String(m))}finally{te.current&&(te.current.value="")}}function Xt(){y.open(async()=>{await p.current.catch(()=>{}),await le(),await me(),await p.current,d("")})}async function Wt(){if(!(Y||!$?.trim())){A(!0);try{await le(),await me(),await p.current.catch(()=>{});let a=l.current,o=await k(t,"save",{path:$.trim(),expectedRevision:a.version});pe(await k(t,"get")),f(`\u5DF2\u4FDD\u5B58\u5230 ${o.path}`),d(""),G(null),$e()}catch(a){d(a?.message||String(a))}finally{A(!1)}}}if(n.useEffect(()=>{i?.inspector?.kind==="server-container"&&ze("base")},[i?.inspector?.kind]),!i)return e("div",{className:"qxsim","data-theme":s,"data-qxsim-session-id":t},e("div",{className:"qxsim-status error"},x||"\u6B63\u5728\u8F7D\u5165\u5343\u661F\u6C99\u7BB1\u2026"));let ce=i.canvas.width,ue=i.canvas.height,Be=Se.width>0&&Se.height>0?Math.min((Se.width-44)/ce,(Se.height-54)/ue):NaN,Kt=Number.isFinite(Be)&&Be>0?Math.min(2,Math.round(Be*1e3)/1e3):.5,Zt=Te==="fit"?Kt:Number(Te)||.5,st=we(ce,ue),Qt=(i.canvas.presets||[]).filter(a=>a.platform===i.canvas.platform);function ea(a){if(!i||i.canvas.platform===a)return;let o=(i.canvas.presets||[]).filter(h=>h.platform===a);if(!o.length)return;let m=o.find(h=>qe(h)===st)||o[0];D({op:"setCanvas",canvasId:m.id}).then(()=>f(`\u5DF2\u5207\u6362\u5230${m.label}`)).catch(()=>{})}let B=i.asset?.type==="client-control-template",_e=!!(i.inspector&&i.inspector.kind!=="server-container"),Ue=new Set;for(let a of i.tree||[])(Me[a.id]||(a.ancestorIds||[]).some(o=>Me[o]))&&Ue.add(a.id);let ta=(i.boxes||[]).filter(a=>a.kind!=="server-container"&&a.visible&&!Ue.has(a.id));function aa(a,o){a.stopPropagation(),zt(m=>{let h={...m};return h[o]?delete h[o]:h[o]=!0,h})}let ot=i.tree.filter(a=>!ke.trim()||`${a.name} ${a.label}`.toLowerCase().includes(ke.trim().toLowerCase())),O=i.tree.find(a=>a.id===i.selectedId),ia=B&&O?i.tree.filter(a=>a.id!==O.id&&!(a.ancestorIds||[]).includes(O.id)):[],na=O?.parentId||i.root.id;return e("div",{className:"qxsim","data-theme":s,"data-qxsim-session-id":t},y.overlay,ne==="script"&&x?e("div",{className:"qxsim-status error",role:"alert"},x):null,$!==null?e("div",{className:"qxsim-save-overlay"},e("form",{className:"qxsim-save-dialog",role:"dialog","aria-modal":!0,"aria-label":"\u4FDD\u5B58\u5230\u5DE5\u4F5C\u533A",onSubmit:a=>{a.preventDefault(),Wt()}},e("h2",null,"\u4FDD\u5B58\u5230\u5DE5\u4F5C\u533A"),e("label",null,"\u5B58\u6863\u76F8\u5BF9\u8DEF\u5F84",e("input",{autoFocus:!0,required:!0,value:$,disabled:Y,onChange:a=>G(a.target.value)})),x?e("div",{role:"alert"},x):null,e("footer",null,e("button",{className:"qxsim-action",type:"button",disabled:Y,onClick:()=>G(null)},"\u53D6\u6D88"),e("button",{className:"qxsim-action primary",type:"submit",disabled:Y||!$.trim()},Y?"\u4FDD\u5B58\u4E2D\u2026":"\u4FDD\u5B58")))):null,e("header",{className:"qxsim-toolbar"},e("div",{className:"qxsim-brand",title:`${i.workspace?.bound?i.workspace.path:"\u5DE5\u4F5C\u533A\u672A\u7ED1\u5B9A"}
29
- ${i.meta?.sourceFile||"\u5C1A\u672A\u5BFC\u5165\u6587\u4EF6"}`},e("span",{className:"qxsim-appicon"},"UI"),e("span",{className:"qxsim-brand-text"},e("strong",null,`\u5B58\u6863\uFF1A${i.save?.name||i.meta?.name||"\u672A\u547D\u540D\u5B58\u6863"}`),e("span",null,`\u5DE5\u4F5C\u533A\uFF1A${i.workspace?.bound?i.workspace.name:"\u672A\u7ED1\u5B9A"} \xB7 \u5F53\u524D\u8D44\u4EA7\uFF1A${i.asset?.label||"UI\u63A7\u4EF6"}`))),e("div",{className:"qxsim-toolbar-center"},ne==="ui"?e(n.Fragment,null,e("div",{className:"qxsim-device-switch",role:"group","aria-label":"\u76EE\u6807\u8BBE\u5907"},ye.map(a=>e("button",{key:a.key,className:i.canvas.platform===a.key?"active":"",title:a.title,onClick:()=>ea(a.key)},a.label))),e("select",{className:"qxsim-control ratio","aria-label":"\u5C4F\u5E55\u6BD4\u4F8B",value:i.canvasId,onChange:a=>void D({op:"setCanvas",canvasId:a.target.value}).catch(()=>{})},Qt.map(a=>e("option",{key:a.id,value:a.id},`${qe(a)} \xB7 ${a.width}\xD7${a.height}`))),e("select",{className:"qxsim-control zoom","aria-label":"\u753B\u5E03\u7F29\u653E",value:Te,onChange:a=>Lt(a.target.value)},[["fit","\u9002\u5E94"],["0.25","25%"],["0.5","50%"],["0.75","75%"],["1","100%"]].map(([a,o])=>e("option",{key:a,value:a},o)))):e("span",{className:"qxsim-muted"},ne==="logic"?"\u670D\u52A1\u7AEF\u903B\u8F91\uFF1A\u76D1\u542C\u4FE1\u53F7 / \u81EA\u5B9A\u4E49\u53D8\u91CF / \u73A9\u5BB61-8 \u56DE\u4F20":"Lua \u811A\u672C\u8D44\u4EA7\u7F16\u8F91")),e("div",{className:"qxsim-actions"},g?e("button",{className:"qxsim-action",title:"\u4FDD\u5B58\u5B8C\u6574\u5B58\u6863\u5230\u5DE5\u4F5C\u533A",onClick:()=>{d(""),G(l.current?.storage?.path||"qxqy-simulator.save.json")}},"\u4FDD\u5B58\u5B58\u6863"):null,e("div",{className:"qxsim-io"},e("input",{ref:te,hidden:!0,type:"file",accept:".json,.gia,.lua,application/json,application/octet-stream,text/plain",onChange:a=>void Jt(a.target.files?.[0])}),e("select",{className:"qxsim-control zoom","aria-label":"\u4ECE\u5DE5\u4F5C\u533A\u62C9\u53D6\u5B58\u6863",defaultValue:"",onFocus:()=>void $e(),onChange:a=>{let o=a.target.value;a.target.value="",o&&Rt(o)}},e("option",{value:"",disabled:!0},i.workspace?.bound?"\u2913 \u5DE5\u4F5C\u533A\u5B58\u6863":"\u5DE5\u4F5C\u533A\u672A\u7ED1\u5B9A"),...oe.length?oe.map(a=>e("option",{key:a.path,value:a.path},`${a.name} \xB7 ${a.path}`)):[e("option",{value:"",disabled:!0},i.workspace?.bound?"\u672A\u53D1\u73B0 qxqy-simulator-save":"\u5148\u7ED1\u5B9A\u4F1A\u8BDD\u5DE5\u4F5C\u533A")]),e("button",{className:"qxsim-action",title:"\u5BFC\u5165\u5B58\u6863\u3001\u5355\u9879 UI \u8D44\u4EA7\u6216 Lua",onClick:()=>te.current?.click()},"\u21E7 \u5BFC\u5165"),e("select",{className:"qxsim-control zoom","aria-label":"\u5BFC\u51FA\u683C\u5F0F",defaultValue:"",onChange:a=>{let[o,m=""]=a.target.value.split("|");a.target.value="",o&&Ie(o,m)}},e("option",{value:"",disabled:!0},"\u21E9 \u5BFC\u51FA"),e("option",{value:"save"},"\u8D44\u4EA7\u5305 JSON\uFF08\u4E09\u7C7B\u5408\u4E00\uFF09"),e("option",{value:"save-gia"},"\u8D44\u4EA7\u5305 GIA\uFF08\u5DF2\u6539\u52A8\u9879\uFF09"),e("option",{value:"gia-combined"},"\u8D44\u4EA7\u5305 GIA \u6574\u5408\u5305\uFF08\u63A7\u4EF6+\u811A\u672C\uFF09"),e("optgroup",{label:"\u5F53\u524D\u754C\u9762\uFF08\u5DE6\u680F\u6B63\u5728\u770B\u7684\u90A3\u68F5\u6811\uFF09"},e("option",{value:"json"},"\u5F53\u524D\u754C\u9762 Authoring JSON"),e("option",{value:"gia"},"\u5F53\u524D\u754C\u9762 GIA")),e("optgroup",{label:"\u670D\u52A1\u5668\u63A7\u4EF6\u6A21\u677F"},e("option",{value:"json|server-control-template"},"Authoring JSON"),e("option",{value:"gia|server-control-template"},"GIA")),e("optgroup",{label:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\uFF08\u4EC5\u5F53\u5DE6\u680F\u5207\u5230\u300CUI\u63A7\u4EF6-\u5BA2\u6237\u7AEF\u300D\u65F6\u624D\u662F\u9875\u9762\u5185\u5BB9\uFF09"},e("option",{value:"json|client-control-template"},"Authoring JSON"),e("option",{value:"gia|client-control-template"},"GIA")),e("optgroup",{label:"Lua \u811A\u672C"},e("option",{value:"scripts"},"\u811A\u672C\u5305 JSON\uFF08\u5168\u90E8\u811A\u672C\uFF09"),e("option",{value:"scripts-gia"},"\u811A\u672C\u5305 GIA\uFF08\u5168\u90E8\u811A\u672C\uFF09")))),e("button",{className:"qxsim-action primary",title:"\u6253\u5F00\u8BD5\u73A9\uFF1B\u65B0\u7A97\u53E3\u4E0D\u53EF\u7528\u65F6\u5728\u5E94\u7528\u5185\u8BD5\u73A9",disabled:y.opening,onClick:Xt},y.opening?"\u6B63\u5728\u51C6\u5907\u2026":"\u25B7 \u8BD5\u73A9 \u2197"),e("button",{className:"qxsim-iconbtn",title:"\u91CD\u65B0\u8F7D\u5165",onClick:Ce},"\u21BB"))),e("nav",{className:"qxsim-editor-nav","aria-label":"\u7F16\u8F91\u9875\u9762"},e("button",{className:ne==="ui"?"active":"",onClick:()=>he("ui")},"UI \u7F16\u8F91"),e("button",{className:ne==="script"?"active":"",onClick:()=>he("script")},"Lua \u811A\u672C"),e("button",{className:ne==="logic"?"active":"",onClick:()=>he("logic")},"\u670D\u52A1\u7AEF\u903B\u8F91"),e("span",{className:"save-summary"},"\u4E00\u4E2A\u5B58\u6863 \xB7 \u670D\u52A1\u5668\u63A7\u4EF6\u6A21\u677F + \u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F + Lua \u811A\u672C + \u670D\u52A1\u7AEF\u903B\u8F91")),ne==="script"?e(b,{snap:i,patch:D,request:(a,o)=>k(t,a,o),refresh:async()=>pe(await k(t,"get")),prepare:async()=>(await p.current,await le(),await me(),l.current)}):null,i.controlGuidChanges?.length?e("details",{className:"qxsim-note",open:!0,style:{flexShrink:0,maxHeight:170,overflow:"auto"}},e("summary",{style:{cursor:"pointer"}},`\u5F85\u540C\u6B65 Lua \u7D22\u5F15\u5F15\u7528\uFF08${i.controlGuidChanges.length} \u9879\uFF09`),e("div",null,"\u63A7\u4EF6\u7D22\u5F15\u5DF2\u4FEE\u6539\u3002\u8BF7\u8BA9 AI \u66F4\u65B0\u5B58\u6863\u811A\u672C\u548C\u76F8\u5173 Lua \u6E90\u6587\u4EF6\uFF0C\u5E76\u91CD\u65B0\u8BD5\u73A9\u6838\u5BF9\u3002"),e("ul",{style:{margin:"5px 0"}},i.controlGuidChanges.map(a=>e("li",{key:a.id},`${a.controlAsset==="client-control-template"?"\u5BA2\u6237\u7AEF\u6A21\u677F":"\u670D\u52A1\u7AEF\u754C\u9762"} \xB7 ${a.controlName}\uFF1A${a.oldGuid} \u2192 ${a.newGuid}`))),e("div",{style:{display:"flex",gap:6}},e("button",{className:"qxsim-action",onClick:Ot},"\u590D\u5236\u7ED9 AI"),e("button",{className:"qxsim-action",title:"\u4EC5\u5728\u5DF2\u4FEE\u6539\u6216\u786E\u8BA4\u4E0D\u6D89\u53CA\u811A\u672C\u5F15\u7528\uFF0C\u5E76\u5B8C\u6210\u6838\u5BF9\u540E\u4F7F\u7528",onClick:Dt},"\u5DF2\u5B8C\u6210\u811A\u672C\u540C\u6B65"))):null,w.length?e("details",{className:"qxsim-export-warnings",open:!0,role:"status",style:{flexShrink:0,maxHeight:180,overflow:"auto",padding:"8px 16px",borderBottom:"1px solid currentColor"}},e("summary",{style:{cursor:"pointer"}},`\u4E0A\u6B21\u5BFC\u51FA\u8BF4\u660E\uFF08${w.length} \u9879\uFF0C\u8BF7\u6838\u5BF9\u5BFC\u5165\u540E\u7684\u6548\u679C\uFF09`),e("button",{className:"qxsim-action",onClick:()=>ae([])},"\u5173\u95ED\u5BFC\u51FA\u8BF4\u660E"),e("ul",null,w.map((a,o)=>e("li",{key:o},a)))):null,ne==="ui"?e("div",{className:"qxsim-main"},e("aside",{className:"qxsim-tree"},e("div",{className:"qxsim-asset-switch","aria-label":"\u7F16\u8F91\u8D44\u6E90\u7C7B\u578B"},e("button",{className:B?"":"active",title:"\u7F16\u8F91\u5B58\u6863\u5185\u7684\u670D\u52A1\u7AEF UI \u63A7\u4EF6",onClick:()=>void rt("server-control-template")},"UI\u63A7\u4EF6-\u670D\u52A1\u7AEF"),e("button",{className:B?"active":"",title:"\u7F16\u8F91\u5B58\u6863\u5185\u7684\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F",onClick:()=>void rt("client-control-template")},"UI\u63A7\u4EF6-\u5BA2\u6237\u7AEF")),e("div",{className:"qxsim-pane-head"},e("div",{className:"qxsim-pane-title"},B?"\u6A21\u677F\u4E0E\u5B50\u63A7\u4EF6":"\u63A7\u4EF6\u6811"),e("span",{className:"qxsim-muted"},B?`${i.asset.templateCount} \u4E2A\u6A21\u677F \xB7 ${i.tree.length} \u4E2A\u63A7\u4EF6`:`${i.tree.length} \u4E2A\u8282\u70B9`)),e("label",{className:"qxsim-search"},"\u2315",e("input",{value:ke,placeholder:B?"\u641C\u7D22\u6A21\u677F\u6216\u63A7\u4EF6":"\u641C\u7D22\u63A7\u4EF6",onChange:a=>Oe(a.target.value)}),ke?e("button",{onClick:()=>Oe("")},"\xD7"):e("span",null,"\u2301")),e("div",{className:"qxsim-tree-scroll"},ot.length?ot.map(a=>{let o=S[a.kind]||["\u25C7",a.label],m=Ue.has(a.id),h=!!Me[a.id];return e("div",{key:a.id,className:`qxsim-row${B&&a.depth===0?" template-root":""}${a.id===i.selectedId?" active":""}${m?" canvas-hidden":""}`,style:{paddingLeft:8+a.depth*18,"--depth":a.depth},title:`${o[1]} \xB7 ${a.name} \xB7 GUID ${a.guid??a.id}`,onClick:()=>void D({op:"select",id:a.id}).catch(()=>{})},e("span",{className:"qxsim-chevron"},a.childCount?"\u25BC":""),e("span",{className:"qxsim-kind"},o[0]),e("span",{className:"qxsim-row-label"},a.name),e("span",{className:"qxsim-row-end"},B&&a.depth===0?e(n.Fragment,null,e("span",{className:"qxsim-template-tag"},"\u6A21\u677F"),e("span",{className:"qxsim-template-id"},`#${a.guid??a.id}`)):a.incomplete?e("span",{className:"qxsim-incomplete"},"\u6682\u4E0D\u652F\u6301"):null,e("button",{className:`qxsim-eye${h?" off":""}`,type:"button",title:h?"\u5728\u753B\u5E03\u4E0A\u663E\u793A\uFF08\u4E0D\u5F71\u54CD\u63A7\u4EF6\u521D\u59CB\u53EF\u89C1\u6027\uFF09":"\u5728\u753B\u5E03\u4E0A\u9690\u85CF\uFF08\u4E0D\u5F71\u54CD\u63A7\u4EF6\u521D\u59CB\u53EF\u89C1\u6027\uFF09","aria-label":`${a.name}\u753B\u5E03\u53EF\u89C1\u6027`,"aria-pressed":!h,onClick:R=>aa(R,a.id)},h?"\u25CC":"\u25C9")))}):e("div",{className:"qxsim-empty"},"\u6CA1\u6709\u5339\u914D\u7684\u63A7\u4EF6")),e("div",{className:"qxsim-tree-foot"},B&&O?e("div",{className:"qxsim-hierarchy"},e("div",{className:"qxsim-hierarchy-head"},e("strong",null,"\u5C42\u7EA7\u4E0E\u6A21\u677F\u8FB9\u754C"),e("span",null,O.name)),e("div",{className:"qxsim-parent-row"},e("select",{"aria-label":"\u7236\u7EA7\u63A7\u4EF6",value:na,onChange:a=>void D({op:"reparent",id:O.id,parentId:a.target.value}).then(()=>f(a.target.value===i.root.id?"\u5DF2\u63D0\u5347\u4E3A\u53EF\u5B9E\u4F8B\u5316\u9876\u5C42\u6A21\u677F":"\u5DF2\u8C03\u6574\u63A7\u4EF6\u7236\u7EA7")).catch(()=>{})},e("option",{value:i.root.id},"\u9876\u5C42\u6A21\u677F\uFF08\u53EF\u5B9E\u4F8B\u5316\uFF09"),ia.map(a=>e("option",{key:a.id,value:a.id},`${"\u3000".repeat(a.depth)}${a.name}`))),e("button",{title:"\u5728\u540C\u7EA7\u4E2D\u4E0A\u79FB",disabled:O.siblingIndex<=0,onClick:()=>void D({op:"moveSibling",id:O.id,direction:"up"}).catch(()=>{})},"\u2191"),e("button",{title:"\u5728\u540C\u7EA7\u4E2D\u4E0B\u79FB",disabled:O.siblingIndex>=O.siblingCount-1,onClick:()=>void D({op:"moveSibling",id:O.id,direction:"down"}).catch(()=>{})},"\u2193")),e("div",{className:"qxsim-hierarchy-note"},O.depth===0?"\u8BE5\u8282\u70B9\u4F1A\u5199\u5165\u72EC\u7ACB UIControlTemplate\uFF0C\u53EF\u76F4\u63A5\u4F5C\u4E3A prefabId\u3002":`\u5F53\u524D\u4E3A\u7B2C ${O.depth} \u5C42\u5B50\u63A7\u4EF6\uFF0C\u4E0D\u4F1A\u5355\u72EC\u6210\u4E3A prefabId\u3002`)):null,e("div",{className:"qxsim-palette-head"},e("span",{title:B&&de==="template"?"\u65B0\u589E\u72EC\u7ACB\u53EF\u5B9E\u4F8B\u5316\u6A21\u677F":`\u6DFB\u52A0\u5230${O?O.name:"\u5F53\u524D\u63A7\u4EF6"}`},B&&de==="template"?"\u65B0\u589E\u9876\u5C42\u6A21\u677F":`\u6DFB\u52A0\u5230${O?`\u201C${O.name}\u201D`:"\u5F53\u524D\u63A7\u4EF6"}`),B?e("span",{className:"qxsim-add-mode"},e("button",{className:de==="template"?"active":"",onClick:()=>De("template")},"\u9876\u5C42"),e("button",{className:de==="child"?"active":"",onClick:()=>De("child")},"\u5B50\u63A7\u4EF6")):null),e("div",{className:"qxsim-add"},L.filter(([a])=>B||a!=="container").map(([a,o])=>e("button",{key:a,title:`${B&&de==="template"?"\u65B0\u589E":"\u6DFB\u52A0"}${o}`,onClick:()=>Yt(a,o)},`\uFF0B ${o}`))))),e("main",{className:"qxsim-center"},e("div",{className:"qxsim-workspace",ref:at},e("div",{className:"qxsim-stage-shell",style:{width:`${Math.max(40,Math.round(ce*Zt))}px`}},e("div",{className:"qxsim-stage-label"},e("b",null,B?"Lua \u6A21\u677F\u9884\u89C8":"\u754C\u9762\u63A7\u4EF6\u7EC4"),e("span",{className:"qxsim-platform-tag"},i.canvas.platform),e("span",null,`${st} \xB7 ${ce}\xD7${ue} \xB7 \u5DE6\u4E0B\u539F\u70B9`)),e("div",{className:"qxsim-stage",style:{width:"100%",aspectRatio:`${ce} / ${ue}`},onClick:a=>{let o=a.currentTarget.getBoundingClientRect();D({op:"pick",x:(a.clientX-o.left)*ce/o.width,y:(o.bottom-a.clientY)*ue/o.height}).catch(()=>{})}},ta.map(a=>Pt(a,i,ce,ue))))),x?e("div",{className:"qxsim-status error"},"\u26A0 ",x):e("div",{className:"qxsim-status"},e("span",null,`\u25CF ${i.asset?.label||"\u63A7\u4EF6"}\u7F16\u8F91`),e("span",null,T||(O?`\u5F53\u524D\uFF1A${O.name}`:"")),e("span",{className:"spacer"}),e("span",null,B?"GIA \u5BFC\u51FA\u540E\u53EF\u5728 Lua \u4E2D\u6309 prefabId \u5B9E\u4F8B\u5316":"\u5B57\u6BB5\u5728\u5931\u7126\u6216 Enter \u65F6\u63D0\u4EA4"),e("a",{className:"qxsim-community",href:"https://space.bilibili.com/23358791",target:"_blank",rel:"noreferrer",title:"\u4F5C\u8005 B\u7AD9\u4E3B\u9875"},"\u4F5C\u8005B\u7AD9"),e("a",{className:"qxsim-community",href:"https://qm.qq.com/q/DpuMvxAfhm",target:"_blank",rel:"noreferrer",title:"\u52A0\u5165 QQ \u7FA4 1007538100"},"QQ\u7FA4 1007538100"))),e("aside",{className:"qxsim-inspector"},i.inspector?e(n.Fragment,null,e("div",{className:"qxsim-inspector-head"},e("div",{className:"qxsim-inspector-line"},e("span",{className:"qxsim-kind"},(S[i.inspector.kind]||["\u25C7"])[0]),e("strong",null,i.inspector.label),B&&O?.depth===0?e("span",{className:"qxsim-template-tag"},"\u53EF\u5B9E\u4F8B\u5316"):null),e("div",{className:"qxsim-node-id"},B&&O?.depth===0?"\u6A21\u677F\u7D22\u5F15 ":"\u63A7\u4EF6 GUID ",e("code",null,i.inspector.guid??i.inspector.id)," \xB7 ",O?.name||"\u8282\u70B9"),i.inspector.kind!=="server-container"?e(St,{key:`${i.asset.type}:${i.inspector.id}`,inspector:i.inspector,onSave:(a,o)=>Mt(a,o,i.asset.type)}):null),e("div",{className:"qxsim-tabs",style:_e?void 0:{gridTemplateColumns:"1fr"}},e("button",{className:Le==="base"?"active":"",onClick:()=>ze("base")},"\u57FA\u7840\u5C5E\u6027"),_e?e("button",{className:Le==="script"?"active":"",onClick:()=>ze("script")},"\u811A\u672C"):null),e("div",{className:"qxsim-inspector-scroll"},_e&&Le==="script"?e(Ct,{snap:i,addScriptMounted:a=>void nt({controlId:a,controlAsset:i.asset?.type}).then(()=>he("script")),mountScriptTo:Vt,unmountScript:Ht,openScript:a=>{Ne(a),he("script")}}):e(n.Fragment,null,e(u,{inspector:i.inspector,commit:jt,createStateChild:Ft}),be(i.boxes?.find(a=>a.id===i.selectedId)?.imageId)?e("div",{className:"qxsim-section-body"},e("button",{className:"qxsim-action",disabled:I,onClick:Gt},I?"\u6B63\u5728\u5237\u65B0\u7D20\u6750\u2026":"\u21BB \u91CD\u65B0\u4E0B\u8F7D\u6B64\u7D20\u6750"),e("p",{className:"qxsim-muted"},"\u767D\u540D\u5355\u56FE\u7247\u6309\u9700\u7F13\u5B58\uFF1B\u5237\u65B0\u4F1A\u91CD\u65B0\u8BBF\u95EE\u7D20\u6750\u6E90\u3002")):null)),e("div",{className:"qxsim-tree-foot"},e("button",{className:"qxsim-action danger",style:{width:"100%"},onClick:()=>void D({op:"remove"}).catch(()=>{})},B&&O?.depth===0?"\u232B \u5220\u9664\u5F53\u524D\u6A21\u677F":"\u232B \u5220\u9664\u5F53\u524D\u63A7\u4EF6"))):e("div",{className:"qxsim-empty"},"\u8BF7\u9009\u62E9\u4E00\u4E2A\u63A7\u4EF6"))):ne==="script"?e(_,{snap:i,selectedScriptId:je,selectScript:a=>{it(),Ne(a)},draft:Ge,updateDraft:Bt,saveScript:()=>void le().then(()=>f("Lua \u811A\u672C\u5DF2\u4FDD\u5B58\u5230\u5F53\u524D\u5B58\u6863")).catch(()=>{}),addScript:()=>void nt(),removeScript:Ut,exportLua:a=>void Ie("lua",a),exportScripts:()=>void Ie("scripts"),exportScriptsGia:()=>void Ie("scripts-gia"),notice:T}):e(Nt,{snap:i,draft:tt,setDraft:Fe,saveLogic:()=>void me().catch(()=>{}),notice:T,error:x}))}return{SimulatorView:At,ensureStyle:ee,removeStyle:()=>document.getElementById(M)?.remove()}}window.__ModuleLoader__.load({id:"dsh-plugin-beyond-simulator",factory:n=>{let c={},N=n("react"),g=vt(N,{async api(e,b,P){let j=await fetch("/qxqy-simulator/api/"+b,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({sessionId:e,...P||{}}),...b==="play"?{signal:AbortSignal.timeout(15e3)}:{}}),M=await j.json();if(!j.ok||!M.ok)throw new Error(M.error||"Request failed");return M.value},playUrl:e=>"/qxqy-simulator/play#"+encodeURIComponent(e)});return c.inject=["slots"],c.apply=e=>{g.ensureStyle(),e.effect(()=>g.removeStyle,"qxqy-simulator: style cleanup"),e.slots.inject("conversation.view",()=>e.slots.register({name:"conversation.view",id:"qxqy-simulator",order:20,label:()=>"\u6A21\u62DF\u5668"},g.SimulatorView))},c}});})();
27
+ `,$={"server-container":["\u25A3","\u5BA2\u6237\u7AEF\u63A7\u4EF6\u5BB9\u5668"],container:["\u25A1","\u5BB9\u5668\u8282\u70B9"],textbox:["T","\u6587\u672C\u6846"],cursor:["\u2301","\u5149\u6807\u68C0\u6D4B\u533A\u57DF"],reference:["\u2197","\u6A21\u677F\u5F15\u7528\u63A7\u4EF6"],grid:["\u25A6","\u7F51\u683C\u89C6\u7A97"],image:["\u25A7","\u56FE\u7247"],button:["Btn","\u9884\u8BBE\u6309\u94AE"],textwindow:["T\u2195","\u6587\u672C\u89C6\u7A97"],keyhint:["1","\u6309\u952E\u63D0\u793A"],animation:["\u2726","\u754C\u9762\u52A8\u6548"],fullscreen:["\u2725","\u5168\u5C4F\u52A8\u6548"]},M=[["container","\u5BB9\u5668\u8282\u70B9"],["textbox","\u6587\u672C\u6846"],["cursor","\u5149\u6807\u68C0\u6D4B"],["reference","\u6A21\u677F\u5F15\u7528"],["grid","\u7F51\u683C\u89C6\u7A97"],["button","\u9884\u8BBE\u6309\u94AE"],["textwindow","\u6587\u672C\u89C6\u7A97"],["keyhint","\u6309\u952E\u63D0\u793A"],["image","\u56FE\u7247"],["animation","\u754C\u9762\u52A8\u6548"],["fullscreen","\u5168\u5C4F\u52A8\u6548"]],T={container:["isolateNavigation","disableKeyEventPassthrough","disableCursorEventPassthrough","showCursor"],textbox:["fontSize","adaptiveFontSize","minimumFontSize","fontColor","bgColor","enableOutline","outlineColor","horizontalAlignment","verticalAlignment","text"],cursor:[],reference:["referencedPrefabId"],grid:["itemPrefabId","raycastTarget","interactable","showScrollBar","scrollDirection","layoutConstraint","layoutConstraintFixedCount","cellSizeX","cellSizeY","spacingX","spacingY","padding1X","padding1Y","padding2X","padding2Y","previewCount"],image:["imageSource","imageId","imageColor","enableMask","enableSoftEdge","softEdgeMode","softEdgeWidthX","softEdgeWidthY","horizontalSoftRange","verticalSoftRange","enableFill","fillType","fillHorizontalType","fillVerticalType","fillRadial90Type","fillRadialType","fillAmount","reverseMaskArea"],button:["raycastTarget","interactable","unavailableChildId","hoverChildId","pressedChildId","selectedChildId","clickAudioId"],textwindow:["interactable","showScrollBar","fontSize","adaptiveFontSize","minimumFontSize","fontColor","bgColor","enableOutline","outlineColor","horizontalAlignment","verticalAlignment","text"],keyhint:["keyboardKeyCode","controllerKeyCode"],animation:["animationId"],fullscreen:["animationId"]};function G(){if(document.getElementById(y))return;let t=document.createElement("style");t.id=y,t.textContent=L,document.head.appendChild(t)}function w(){let t=document.documentElement,o=document.body,r=[t.dataset.theme,t.className,t.getAttribute("style"),o?.dataset?.theme,o?.className,o?.getAttribute("style"),getComputedStyle(t).colorScheme].filter(Boolean).join(" ").toLowerCase();return r.includes("dark")?"dark":r.includes("light")?"light":window.matchMedia?.("(prefers-color-scheme: dark)").matches?"dark":"light"}function S(){let[t,o]=i.useState(w);return i.useEffect(()=>{let r=()=>o(w()),s=new MutationObserver(r);s.observe(document.documentElement,{attributes:!0,attributeFilter:["class","style","data-theme"]}),document.body&&s.observe(document.body,{attributes:!0,attributeFilter:["class","style","data-theme"]});let d=window.matchMedia?.("(prefers-color-scheme: dark)");return d?.addEventListener?.("change",r),()=>{s.disconnect(),d?.removeEventListener?.("change",r)}},[]),t}function _(t,o){let r=Number(t??o)>>>0;return`rgba(${r>>>16&255},${r>>>8&255},${r&255},${(r>>>24&255)/255})`}function N(t,o){return t==="sprite"?{background:"transparent"}:t==="circle"?{borderRadius:"50%",background:o}:t==="ring"?{borderRadius:"50%",border:`7px solid ${o}`,background:"transparent"}:t==="triangle"?{background:o,clipPath:"polygon(50% 0,100% 100%,0 100%)"}:t==="fourstar"?{background:o,clipPath:"polygon(50% 0,62% 38%,100% 50%,62% 62%,50% 100%,38% 62%,0 50%,38% 38%)"}:t==="fivestar"?{background:o,clipPath:"polygon(50% 0,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%)"}:t==="missing"?{background:"#4822285c",border:"1px dashed #ff7481"}:{background:o}}let F=n;function A(t){let o;try{o=atob(t.data)}catch{throw new Error("\u5BFC\u51FA\u5185\u5BB9\u89E3\u7801\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u6216\u5237\u65B0\u9875\u9762")}let r=new Uint8Array(o.length);for(let u=0;u<o.length;u+=1)r[u]=o.charCodeAt(u);let s=URL.createObjectURL(new Blob([r],{type:t.mimeType||"application/octet-stream"})),d=document.createElement("a");d.href=s,d.download=t.filename||"qxqy-export",d.rel="noopener",d.style.display="none",document.body.appendChild(d),d.click(),d.remove(),setTimeout(()=>URL.revokeObjectURL(s),1e3)}async function B(t){let o=new Uint8Array(await t.arrayBuffer()),r="",s=32768;for(let d=0;d<o.length;d+=s)r+=String.fromCharCode(...o.subarray(d,d+s));return btoa(r)}let E=t=>typeof t=="object"?t.value:t,Q=t=>typeof t=="object"?t.label:t,Y=[{key:"KEYBOARD",label:"PC",title:"PC KEYBOARD \u753B\u5E03\uFF1A1600\xD7900 / 2100\xD7900"},{key:"TOUCHSCREEN",label:"\u624B\u673A",title:"\u624B\u673A TOUCHSCREEN \u753B\u5E03\uFF1A1280\xD7720 / 1560\xD7720 / 1280\xD7960"}];function pe(t){return String(t.id||"").split("-").slice(1).join(":")}function se(t,o){let r=(d,u)=>u?r(u,d%u):d,s=r(Math.round(t),Math.round(o))||1;return`${Math.round(t)/s}:${Math.round(o)/s}`}function X({field:t,commit:o,axis:r}){let s=t.value==null?"":String(t.value),[d,u]=i.useState(s);if(i.useEffect(()=>u(t.value==null?"":String(t.value)),[t.value,t.type]),t.type==="note")return e("div",{className:"qxsim-note"},t.value||t.label);if(t.readonly&&(t.evidence==="N"||t.evidence==="U"))return e("div",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},t.label),e("div",{className:"qxsim-unsupported"},t.value==null?"\u5C1A\u65E0\u53EF\u7F16\u8F91\u503C":String(t.value)));if(t.type==="bool")return e("div",{className:"qxsim-switch-row"},e("span",null,t.label),e("label",{className:"qxsim-switch"},e("input",{type:"checkbox",checked:!!t.value,disabled:!!t.readonly,onChange:p=>o(t.key,p.target.checked)}),e("span",{className:"qxsim-switch-track"})));if(t.type==="enum"){let p=[...t.options||[]],z=String(t.value??"");return p.some(j=>String(E(j))===z)||p.unshift({value:t.value??"",label:`\u672A\u8BC6\u522B\u9009\u9879 ${t.unknownValue??(z||"\u7A7A")}\uFF08\u4FDD\u7559\u539F\u503C\uFF09`}),e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},t.label),e("select",{value:z,disabled:!!t.readonly,onChange:j=>o(t.key,j.target.value)},p.map(j=>e("option",{key:String(E(j)),value:E(j)},Q(j)))))}if(t.type==="percent"){let p=Math.round(Number(t.value||0)*100);return e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},t.label),e("span",{className:"qxsim-percent"},e("input",{type:"range",min:0,max:100,value:p,onInput:z=>o(t.key,Number(z.target.value)/100)}),e("output",null,`${p}%`)))}if(t.type==="color")return e(C,{field:t,commit:o});let h={value:d,disabled:!!t.readonly,readOnly:!!t.readonly,onChange:p=>u(p.target.value),onBlur:()=>{t.readonly||o(t.key,d)},onKeyDown:p=>{p.key==="Enter"&&t.type!=="text"&&p.currentTarget.blur(),p.key==="Escape"&&u(t.value==null?"":String(t.value))}};return e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},r?e("b",{className:`qxsim-axis ${r.toLowerCase()}`},r):null,t.label),t.type==="text"?e("textarea",{...h,rows:4}):e("input",{...h,type:t.type==="number"?"number":"text",step:t.type==="number"?"any":void 0}))}function W({title:t,open:o=!0,children:r}){return e("details",{className:"qxsim-section",open:o},e("summary",null,t),e("div",{className:"qxsim-section-body"},r))}function ge(t){let o={};for(let r of t||[])o[r.key]=r;return o}function ee({label:t,x:o,y:r,xAxis:s="X",yAxis:d="Y",commit:u}){return e("div",{className:"qxsim-pair"},e("div",{className:"qxsim-pair-name"},t),e(X,{field:o,axis:s,commit:u}),e(X,{field:r,axis:d,commit:u}))}function re({field:t,commit:o,createStateChild:r}){return e("div",{className:"qxsim-state-field"},e("div",{className:"qxsim-state-label"},t.label),e("div",{className:"qxsim-state-ref"},e("button",{title:`\u65B0\u5EFA\u5E76\u7ED1\u5B9A${t.label}\u56FE\u7247`,onClick:()=>r(t.key,t.label)},"+"),e("select",{value:String(t.value??""),"aria-label":t.label,onChange:s=>o(t.key,s.target.value)},(t.options||[]).map(s=>e("option",{key:String(E(s)),value:E(s)},Q(s))))))}function he({inspector:t,commit:o,createStateChild:r}){let s=ge(t.fields),d=z=>z?.type==="node"?e(re,{key:z.key,field:z,commit:o,createStateChild:r}):z?e(X,{key:z.key,field:z,commit:o}):null,u=(T[t.kind]||[]).map(z=>s[z]).filter(Boolean).map(d),h=null;if(t.kind==="image"){let z=s.fillType?.value==="Horizontal"?s.fillHorizontalType:s.fillType?.value==="Vertical"?s.fillVerticalType:s.fillType?.value==="Radial90"?s.fillRadial90Type:s.fillRadialType,j=[d(s.enableMask),d(s.enableSoftEdge),s.enableSoftEdge?.value?e("div",{className:"qxsim-subfields",key:"soft-fields"},d(s.softEdgeMode),e(ee,{label:"\u7FBD\u5316\u5BBD\u5EA6",x:s.softEdgeWidthX,y:s.softEdgeWidthY,commit:o}),e(ee,{label:"\u7FBD\u5316\u8303\u56F4",x:s.horizontalSoftRange,y:s.verticalSoftRange,commit:o})):null,d(s.enableFill),s.enableFill?.value?e("div",{className:"qxsim-subfields",key:"fill-fields"},d(s.fillType),d(z),d(s.fillAmount)):null,d(s.reverseMaskArea)];h=e(i.Fragment,null,e(W,{title:"\u56FE\u7247\u8BBE\u7F6E"},d(s.imageSource),d(s.imageId),e(I,{imageId:s.imageId?.value,imageSource:s.imageSource?.value,value:s.imageType?.value,commit:o}),d(s.imageColor)),e(W,{title:"\u906E\u7F69\u8BBE\u7F6E"},j))}let p=t.kind==="textbox"?"\u6587\u672C\u6846\u8BBE\u7F6E":t.kind==="button"?"\u6309\u94AE\u8BBE\u7F6E":`${t.label}\u8BBE\u7F6E`;return e(i.Fragment,null,e(W,{title:"\u8282\u70B9\u4FE1\u606F",open:!1},e(X,{field:s.name,commit:o})),e(W,{title:"\u53D8\u6362"},s.posX?e(ee,{label:"\u4F4D\u7F6E",x:s.posX,y:s.posY,commit:o}):null,s.width?e(ee,{label:"\u5927\u5C0F",x:s.width,y:s.height,xAxis:"W",yAxis:"H",commit:o}):null,s.rotationZ?e(X,{field:s.rotationZ,commit:o}):null,s.syncAllDevices?e(X,{field:s.syncAllDevices,commit:o}):null,s.anchorType?e(X,{field:s.anchorType,commit:o}):null,s.anchorMinX?e(ee,{label:"Min",x:s.anchorMinX,y:s.anchorMinY,commit:o}):null,s.anchorMaxX?e(ee,{label:"Max",x:s.anchorMaxX,y:s.anchorMaxY,commit:o}):null,s.pivotX?e(ee,{label:"\u4E2D\u5FC3",x:s.pivotX,y:s.pivotY,commit:o}):null),e(W,{title:"\u521B\u5EFA\u8BBE\u7F6E"},s.active?e(X,{field:s.active,commit:o}):null,s.visible?e(X,{field:s.visible,commit:o}):null),h||(u.length?e(W,{title:p},u):null),s.canControllerFocus?e(W,{title:"\u624B\u67C4\u5BFC\u822A",open:!1},e(X,{field:s.canControllerFocus,commit:o})):null,s.incomplete?e(W,{title:"\u5B9E\u73B0\u72B6\u6001"},e(X,{field:s.incomplete,commit:o})):null)}function me({snap:t,selectedScriptId:o,selectScript:r,draft:s,updateDraft:d,saveScript:u,addScript:h,removeScript:p,exportLua:z,exportScripts:j,exportScriptsGia:K,notice:ae}){let O=t.scripts||[],D=O.find(P=>P.id===o)||null,U=t.mountTargets||[],H=U.filter(P=>P.assetType==="server-control-template"),q=U.filter(P=>P.assetType==="client-control-template"),le=P=>{let ce=U.find(ve=>ve.id===P);return ce?`${ce.assetLabel} \xB7 ${ce.name}`:""};return e("div",{className:"qxsim-script-page"},e("aside",{className:"qxsim-script-assets"},e("h3",null,`\u5B58\u6863\u5185 Lua \u811A\u672C\uFF08${O.length}\uFF09`),e("button",{className:"qxsim-action",style:{width:"100%",marginBottom:8},onClick:h},"\uFF0B \u65B0\u5EFA\u811A\u672C"),O.length?O.map(P=>e("div",{key:P.id,className:"qxsim-script-list-row"},e("button",{className:`qxsim-script-asset${P.id===o?" active":""}`,onClick:()=>r(P.id)},e("strong",null,P.path||"(\u672A\u547D\u540D\u811A\u672C)"),e("small",null,P.mounted?`\u6302\u8F7D\uFF1A${P.assetLabel} \xB7 ${P.controlName}`:"\u672A\u6302\u8F7D\uFF08\u4EC5\u53EF\u88AB require\uFF09")),e("button",{className:"qxsim-iconbtn",title:"\u4E0B\u8F7D\u8BE5\u811A\u672C .lua",onClick:()=>z(P.id)},"\u21E9"),e("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u8BE5\u811A\u672C",onClick:()=>p(P.id)},"\u2715"))):e("div",{className:"qxsim-empty"},"\u8FD8\u6CA1\u6709\u811A\u672C\uFF0C\u70B9\u51FB\u201C\u65B0\u5EFA\u811A\u672C\u201D\u5F00\u59CB")),e("main",{className:"qxsim-script-editor"},D&&s?e(i.Fragment,null,e("div",{className:"qxsim-script-title"},e("div",null,e("h2",null,s.path||"(\u672A\u547D\u540D\u811A\u672C)"),e("span",null,`\u5C5E\u4E8E\u5B58\u6863\u201C${t.save?.name||"\u672A\u547D\u540D\u5B58\u6863"}\u201D \xB7 Lua \u811A\u672C\u662F\u5B58\u6863\u5185\u72EC\u7ACB\u8D44\u4EA7`)),e("span",null,`\u811A\u672C ${D.id}`)),e("div",{className:"qxsim-script-fields"},e("label",null,"\u811A\u672C\u8DEF\u5F84\uFF08\u5DE5\u4F5C\u533A\u76F8\u5BF9\u8DEF\u5F84\uFF09",e("input",{type:"text",value:s.path,placeholder:"lua/example.lua",onChange:P=>d({path:P.target.value})})),e("label",null,"\u6302\u8F7D\u76EE\u6807\uFF08\u5BA2\u6237\u7AEF\u63A7\u4EF6 / \u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\uFF09",e("select",{value:s.controlId?`${s.controlAsset||"server-control-template"}|${s.controlId}`:"",onChange:P=>{let[ce,ve]=P.target.value.split("|");d(ve?{controlId:ve,controlAsset:ce}:{controlId:"",controlAsset:""})}},e("option",{value:""},"\u672A\u6302\u8F7D\uFF08\u4E0D\u751F\u6548\uFF0C\u4EC5\u53EF\u88AB require\uFF09"),e("optgroup",{label:"\u670D\u52A1\u5668\u63A7\u4EF6\u6A21\u677F \xB7 \u5BA2\u6237\u7AEF\u63A7\u4EF6\u5BB9\u5668\u5185"},H.map(P=>e("option",{key:P.id,value:`${P.assetType}|${P.id}`},`${P.name} \xB7 ${P.id}`))),q.length?e("optgroup",{label:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F"},q.map(P=>e("option",{key:P.id,value:`${P.assetType}|${P.id}`},`${P.name} \xB7 ${P.id}`))):null))),e("label",null,"Lua \u6E90\u7801",e("textarea",{value:s.source,spellCheck:!1,placeholder:"-- \u5728\u8FD9\u91CC\u8F93\u5165\u5BA2\u6237\u7AEF Lua\uFF1B\u811A\u672C\u53EA\u6709\u6302\u8F7D\u5230\u5BA2\u6237\u7AEF\u63A7\u4EF6\u540E\u624D\u4F1A\u5728\u8BD5\u73A9\u65F6\u751F\u6548",onChange:P=>d({source:P.target.value})})),e("div",{className:"qxsim-script-footer"},e("span",null,s.dirty?"\u6709\u672A\u4FDD\u5B58\u7684\u4FEE\u6539":ae||(D.mounted?`\u5DF2\u6302\u8F7D\uFF1A${le(D.controlId)}`:"\u5F53\u524D\u672A\u6302\u8F7D\uFF0C\u8BD5\u73A9\u65F6\u4E0D\u4F1A\u81EA\u52A8\u8FD0\u884C")),e("span",{className:"spacer"}),e("button",{className:"qxsim-action",onClick:j},"\u21E9 \u811A\u672C\u5305 JSON"),e("button",{className:"qxsim-action",onClick:K},"\u21E9 \u811A\u672C\u5305 GIA"),e("button",{className:"qxsim-action primary",disabled:!s.dirty,onClick:u},"\u4FDD\u5B58\u811A\u672C"))):e("div",{className:"qxsim-empty"},"\u8BF7\u65B0\u5EFA\u6216\u9009\u62E9\u4E00\u4E2A\u811A\u672C")))}function ue(t){if(t===void 0)return"null";try{return JSON.stringify(t)}catch{return String(t)}}function ne(t){let o=String(t??"").trim();if(!o)return null;try{return JSON.parse(o)}catch{return o}}function Le(t){return!!(t&&typeof t=="object"&&!Array.isArray(t)&&Object.prototype.hasOwnProperty.call(t,"fromSignalParam"))}function Te(t){return{version:1,dirty:!1,rules:(Array.isArray(t?.rules)?t.rules:[]).map((r,s)=>({id:String(r.id||`signal-${s+1}`),signalName:String(r.signalName||""),actions:Array.isArray(r.actions)&&r.actions.length?r.actions.map(d=>_t(d)):[be("setCustomVariable")]}))}}let Me=["PlayerSelf","AllPlayers","Player1","Player2","Player3","Player4","Player5","Player6","Player7","Player8"],oe=["PlayerSelf","Level","Player1","Player2","Player3","Player4","Player5","Player6","Player7","Player8"],m={PlayerSelf:"PlayerSelf \u5F53\u524D\u73A9\u5BB6",AllPlayers:"AllPlayers \u5168\u90E8\u73A9\u5BB6",Level:"Level \u5173\u5361",Player1:"Player1 \u73A9\u5BB61",Player2:"Player2 \u73A9\u5BB62",Player3:"Player3 \u73A9\u5BB63",Player4:"Player4 \u73A9\u5BB64",Player5:"Player5 \u73A9\u5BB65",Player6:"Player6 \u73A9\u5BB66",Player7:"Player7 \u73A9\u5BB67",Player8:"Player8 \u73A9\u5BB68"};function Z(t){return oe.includes(t)&&t!=="AllPlayers"?t:t==="Level"?"Level":"PlayerSelf"}function te(t){return Me.includes(t)?t:"PlayerSelf"}function be(t){return t==="sendClientScriptSignal"?{kind:"sendClientScriptSignal",target:"PlayerSelf",signalName:"",params:[]}:{kind:"setCustomVariable",entityType:"PlayerSelf",name:"",value:0}}function He(t){return{version:1,rules:(t?.rules||[]).map(o=>({id:String(o.id||""),signalName:String(o.signalName||"").trim(),actions:(o.actions||[]).map(r=>r?.kind==="sendClientScriptSignal"?{kind:"sendClientScriptSignal",target:te(r.target),signalName:String(r.signalName||"").trim(),params:Array.isArray(r.params)?r.params:[]}:{kind:"setCustomVariable",entityType:Z(r?.entityType),name:String(r?.name||"").trim(),value:r&&Object.prototype.hasOwnProperty.call(r,"value")?r.value:0})}))}}function Ot(t){let o=[];for(let[r,s]of(t?.rules||[]).entries()){String(s.signalName||"").trim()||o.push(`\u89C4\u5219 ${r+1} \u9700\u8981\u76D1\u542C\u4FE1\u53F7\u540D`);let d=s.actions||[];d.length||o.push(`\u89C4\u5219 ${r+1} \u81F3\u5C11\u9700\u8981\u4E00\u4E2A\u52A8\u4F5C`);for(let[u,h]of d.entries())h?.kind==="sendClientScriptSignal"?String(h.signalName||"").trim()||o.push(`\u89C4\u5219 ${r+1} \u52A8\u4F5C ${u+1} \u9700\u8981\u5BA2\u6237\u7AEF\u4FE1\u53F7\u540D`):String(h?.name||"").trim()||o.push(`\u89C4\u5219 ${r+1} \u52A8\u4F5C ${u+1} \u9700\u8981\u53D8\u91CF\u540D`)}return o}function _t(t){if(t?.kind==="sendClientScriptSignal")return{kind:"sendClientScriptSignal",target:te(t.target),signalName:String(t.signalName||""),params:Array.isArray(t.params)?t.params.map(r=>{try{return JSON.parse(JSON.stringify(r))}catch{return r}}):[]};let o=0;if(t&&Object.prototype.hasOwnProperty.call(t,"value"))try{o=JSON.parse(JSON.stringify(t.value))}catch{o=t.value}return{kind:"setCustomVariable",entityType:Z(t?.entityType),name:String(t?.name||""),value:o}}function ct({label:t,value:o,onChange:r}){let s=Le(o),[d,u]=i.useState(()=>s?"":ue(o));return i.useEffect(()=>{Le(o)||u(ue(o))},[o]),e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},t),e("select",{value:s?"param":"literal","aria-label":`${t}\u6765\u6E90`,onChange:h=>{h.target.value==="param"?r({fromSignalParam:Number(o?.fromSignalParam)||0}):r(ne(d||"0"))}},e("option",{value:"literal"},"\u5B57\u9762\u91CF\uFF08JSON\uFF09"),e("option",{value:"param"},"\u5F15\u7528\u76D1\u542C\u4FE1\u53F7\u53C2\u6570")),s?e("input",{type:"number",min:0,step:1,value:Number(o.fromSignalParam)||0,"aria-label":`${t}\u53C2\u6570\u5E8F\u53F7`,onChange:h=>r({fromSignalParam:Math.max(0,Math.trunc(Number(h.target.value)||0))})}):e("textarea",{className:"qxsim-logic-json",value:d,spellCheck:!1,"aria-label":`${t}\u5B57\u9762\u91CF`,onBlur:()=>r(ne(d)),onChange:h=>u(h.target.value)}))}function Bt({params:t,onChange:o}){let r=Array.isArray(t)?t:[];return e("div",{className:"qxsim-field wide"},e("span",{className:"qxsim-field-label"},"\u5BA2\u6237\u7AEF\u4FE1\u53F7\u53C2\u6570\uFF08\u6309\u6DFB\u52A0\u987A\u5E8F\uFF09"),r.length?r.map((s,d)=>e("div",{key:d,style:{display:"flex",gap:6,alignItems:"flex-start",marginBottom:6}},e("div",{style:{flex:1,minWidth:0}},e(ct,{label:`\u53C2\u6570 ${d}`,value:s,onChange:u=>o(r.map((h,p)=>p===d?u:h))})),e("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u53C2\u6570",onClick:()=>o(r.filter((u,h)=>h!==d))},"\u2715"))):e("div",{className:"qxsim-muted"},"\u6682\u65E0\u53C2\u6570\uFF0C\u53EF\u53D1\u9001\u7A7A\u53C2\u6570\u5217\u8868"),e("button",{className:"qxsim-action",style:{marginTop:4},onClick:()=>o(r.concat([0]))},"\uFF0B \u6DFB\u52A0\u53C2\u6570"))}function jt({snap:t,draft:o,setDraft:r,saveLogic:s,notice:d,error:u}){let h=o?.rules||[];function p(O){r({version:1,rules:O,dirty:!0})}function z(){p(h.concat([{id:`signal-${Date.now().toString(36)}`,signalName:"",actions:[be("setCustomVariable")]}]))}function j(O,D){p(h.map((U,H)=>H===O?{...U,...D}:U))}function K(O,D,U){let H=h[O];H&&j(O,{actions:H.actions.map((q,le)=>le===D?{...q,...U}:q)})}function ae(O,D,U){K(O,D,be(U))}return e("div",{className:"qxsim-server-logic"},e("div",{className:"qxsim-logic-wrap"},e("div",{className:"qxsim-logic-title"},e("div",null,e("h2",null,"\u670D\u52A1\u7AEF\u903B\u8F91"),e("p",null,`\u5C5E\u4E8E\u5B58\u6863\u201C${t.save?.name||"\u672A\u547D\u540D\u5B58\u6863"}\u201D \xB7 \u76D1\u542C\u5BA2\u6237\u7AEF\u4FE1\u53F7\u540E\u8BBE\u7F6E Level / \u73A9\u5BB6\u53D8\u91CF\uFF0C\u6216\u5411\u6307\u5B9A\u73A9\u5BB6\u53D1\u9001\u5BA2\u6237\u7AEF\u811A\u672C\u4FE1\u53F7`)),e("button",{className:"qxsim-action primary",disabled:!o?.dirty,onClick:s},"\u4FDD\u5B58\u670D\u52A1\u7AEF\u903B\u8F91")),e("div",{className:"qxsim-note"},"\u8FD9\u662F\u6A21\u62DF\u5668\u5B58\u6863\u683C\u5F0F\uFF0C\u4E0D\u662F\u5B98\u65B9\u8282\u70B9\u56FE\u3002PlayerSelf \u8868\u793A\u53D1\u4FE1\u53F7\u7684\u90A3\u4F4D\u73A9\u5BB6\uFF1BPlayer1\u20138 \u662F\u56FA\u5B9A\u5EA7\u4F4D\uFF1BAllPlayers \u5411\u672C\u5C40\u5168\u90E8\u8BD5\u73A9\u73A9\u5BB6\u5E7F\u64AD\u3002"),u?e("div",{className:"qxsim-logic-error"},u):null,h.length?h.map((O,D)=>e("section",{key:O.id||D,className:"qxsim-logic-rule"},e("div",{className:"qxsim-logic-rule-head"},e("strong",null,`\u89C4\u5219 ${D+1}`),e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},"\u76D1\u542C\u4FE1\u53F7\u540D"),e("input",{type:"text",value:O.signalName,placeholder:"EarnGold","aria-label":`\u89C4\u5219 ${D+1} \u76D1\u542C\u4FE1\u53F7\u540D`,onChange:U=>j(D,{signalName:U.target.value})})),e("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u89C4\u5219",onClick:()=>p(h.filter((U,H)=>H!==D))},"\u2715")),e("div",{className:"qxsim-logic-actions"},(O.actions||[]).map((U,H)=>e("div",{key:H,className:"qxsim-logic-action"},e("div",{className:"qxsim-logic-action-head"},e("strong",null,`\u52A8\u4F5C ${H+1}`),e("select",{value:U.kind,"aria-label":`\u89C4\u5219 ${D+1} \u52A8\u4F5C ${H+1} \u7C7B\u578B`,onChange:q=>ae(D,H,q.target.value)},e("option",{value:"setCustomVariable"},"\u8BBE\u7F6E\u81EA\u5B9A\u4E49\u53D8\u91CF"),e("option",{value:"sendClientScriptSignal"},"\u53D1\u9001\u5BA2\u6237\u7AEF\u811A\u672C\u4FE1\u53F7")),e("span",null,U.kind==="sendClientScriptSignal"?"\u53D1\u7ED9\u5F53\u524D\u73A9\u5BB6\u3001\u6307\u5B9A\u73A9\u5BB6\u6216\u5168\u90E8\u73A9\u5BB6":"\u5199\u5165 Level / \u5F53\u524D\u73A9\u5BB6 / \u73A9\u5BB61-8"),e("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u52A8\u4F5C",disabled:(O.actions||[]).length<=1,onClick:()=>j(D,{actions:O.actions.filter((q,le)=>le!==H)})},"\u2715")),U.kind==="sendClientScriptSignal"?e("div",{className:"qxsim-logic-fields"},e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},"\u53D1\u9001\u76EE\u6807"),e("select",{value:te(U.target),onChange:q=>K(D,H,{target:q.target.value})},Me.map(q=>e("option",{key:q,value:q},m[q])))),e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},"\u5BA2\u6237\u7AEF\u4FE1\u53F7\u540D"),e("input",{type:"text",value:U.signalName,placeholder:"GoldChanged",onChange:q=>K(D,H,{signalName:q.target.value})})),e(Bt,{params:U.params,onChange:q=>K(D,H,{params:q})})):e("div",{className:"qxsim-logic-fields"},e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},"\u5B9E\u4F53"),e("select",{value:Z(U.entityType),onChange:q=>K(D,H,{entityType:q.target.value})},oe.map(q=>e("option",{key:q,value:q},m[q])))),e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},"\u53D8\u91CF\u540D"),e("input",{type:"text",value:U.name,placeholder:"Gold",onChange:q=>K(D,H,{name:q.target.value})})),e("div",{className:"wide"},e(ct,{label:"\u53D8\u91CF\u503C",value:U.value,onChange:q=>K(D,H,{value:q})}))))),e("div",{className:"qxsim-logic-actions-foot"},e("button",{className:"qxsim-action",onClick:()=>j(D,{actions:(O.actions||[]).concat([be("setCustomVariable")])})},"\uFF0B \u8BBE\u7F6E\u81EA\u5B9A\u4E49\u53D8\u91CF"),e("button",{className:"qxsim-action",onClick:()=>j(D,{actions:(O.actions||[]).concat([be("sendClientScriptSignal")])})},"\uFF0B \u53D1\u9001\u5BA2\u6237\u7AEF\u811A\u672C\u4FE1\u53F7"))))):e("div",{className:"qxsim-logic-empty"},"\u8FD8\u6CA1\u6709\u76D1\u542C\u89C4\u5219\u3002\u8BD5\u73A9\u65F6\u5BA2\u6237\u7AEF SendSignal \u4E0D\u4F1A\u81EA\u52A8\u6539\u53D8\u91CF\u6216\u56DE\u4F20\u4FE1\u53F7\u3002"),e("div",{className:"qxsim-logic-actions-foot"},e("button",{className:"qxsim-action",onClick:z},"\uFF0B \u6DFB\u52A0\u76D1\u542C\u89C4\u5219")),e("div",{className:"qxsim-script-footer",style:{marginTop:16}},e("span",null,o?.dirty?"\u6709\u672A\u4FDD\u5B58\u7684\u4FEE\u6539":d||"\u4FDD\u5B58\u540E\u4F1A\u5199\u5165\u5F53\u524D\u5B58\u6863\uFF0C\u4E0B\u6B21\u8BD5\u73A9\u751F\u6548"),e("span",{className:"spacer"}))))}function Gt({inspector:t,onSave:o}){let[r,s]=i.useState(String(t.guid??"")),[d,u]=i.useState(!1),[h,p]=i.useState("");i.useEffect(()=>{s(String(t.guid??"")),p("")},[t.guid]);async function z(j){j.preventDefault();let K=r.trim();if(!/^[0-9]+$/.test(K)||Number(K)<1||Number(K)>2147483647){p("\u8BF7\u8F93\u5165 1\u20132147483647 \u4E4B\u95F4\u7684\u6574\u6570\u7D22\u5F15\u3002");return}u(!0),p("");try{await o(t.id,Number(K))}catch(ae){p(ae?.message||String(ae))}finally{u(!1)}}return e("form",{onSubmit:z,style:{marginTop:8}},e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u7D22\u5F15"),e("div",{style:{display:"flex",gap:6}},e("input",{type:"text",inputMode:"numeric","aria-label":"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u7D22\u5F15",value:r,disabled:d,onChange:j=>{s(j.target.value),p("")},onKeyDown:j=>{j.key==="Escape"&&(s(String(t.guid)),p(""))}}),e("button",{type:"submit",className:"qxsim-action",disabled:d||r.trim()===String(t.guid)},d?"\u4FDD\u5B58\u4E2D":"\u4FEE\u6539"))),h?e("div",{role:"alert",className:"qxsim-note"},h):null,e("div",{className:"qxsim-muted",style:{lineHeight:1.5}},"\u586B\u5199 GIA \u5BFC\u5165\u540E\u5B9E\u9645\u663E\u793A\u7684\u7D22\u5F15\uFF1B\u4FEE\u6539\u540E\u987B\u8BA9 AI \u540C\u6B65 Lua \u811A\u672C\u4E2D\u7684\u5F15\u7528\u3002"))}function Ut({snap:t,addScriptMounted:o,mountScriptTo:r,unmountScript:s,openScript:d}){let u=(t.scripts||[]).filter(p=>p.controlId===t.selectedId),h=(t.scripts||[]).filter(p=>p.controlId!==t.selectedId);return e(i.Fragment,null,e(W,{title:"\u6302\u8F7D\u5230\u8BE5\u63A7\u4EF6\u7684\u811A\u672C"},u.length?u.map(p=>e("div",{key:p.id,className:"qxsim-script-list-row"},e("button",{className:"qxsim-script-asset",onClick:()=>d(p.id)},e("strong",null,p.path||"(\u672A\u547D\u540D\u811A\u672C)"),e("small",null,`\u811A\u672C ${p.id}`)),e("button",{className:"qxsim-iconbtn",title:"\u89E3\u9664\u6302\u8F7D\uFF08\u4FDD\u7559\u811A\u672C\uFF09",onClick:()=>s(p.id)},"\u292B"))):e("div",{className:"qxsim-note"},"\u8BE5\u63A7\u4EF6\u5C1A\u672A\u6302\u8F7D\u811A\u672C\u3002\u811A\u672C\u6302\u8F7D\u5230\u5BA2\u6237\u7AEF\u63A7\u4EF6\u540E\u624D\u4F1A\u5728\u8BD5\u73A9\u65F6\u751F\u6548\u3002")),e(W,{title:"\u6302\u8F7D\u5DF2\u6709\u811A\u672C",open:!1},h.length?e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},"\u9009\u62E9\u811A\u672C\u6302\u8F7D\u5230\u8BE5\u63A7\u4EF6"),e("select",{value:"","aria-label":"\u9009\u62E9\u811A\u672C\u6302\u8F7D\u5230\u8BE5\u63A7\u4EF6",onChange:p=>{let z=p.target.value;p.target.value="",z&&r(z)}},e("option",{value:""},"\u9009\u62E9\u811A\u672C\u2026"),h.map(p=>e("option",{key:p.id,value:p.id},`${p.path||"(\u672A\u547D\u540D\u811A\u672C)"} \xB7 ${p.id}${p.mounted?`\uFF08\u5F53\u524D\u6302\u8F7D\u4E8E ${p.assetLabel} \xB7 ${p.controlName}\uFF0C\u5C06\u79FB\u52A8\u5230\u6B64\u63A7\u4EF6\uFF09`:"\uFF08\u672A\u6302\u8F7D\uFF09"}`)))):e("div",{className:"qxsim-note"},"\u5B58\u6863\u5185\u8FD8\u6CA1\u6709\u5176\u4ED6\u811A\u672C\uFF0C\u53EF\u70B9\u51FB\u4E0B\u65B9\u6309\u94AE\u65B0\u5EFA\u3002"),e("div",{className:"qxsim-script-actions",style:{marginTop:8}},e("button",{onClick:()=>o(t.selectedId)},"\uFF0B \u65B0\u5EFA\u811A\u672C\u5E76\u6302\u8F7D\u5230\u6B64\u63A7\u4EF6"))))}function Ht(t,o){let r=null,s=null;function d(u,h){u.id===o&&(r=u,s=h);for(let p of u.children||[])d(p,u)}if(d(t,null),r?.kind==="container")return r.id;if(r?.kind==="server-container")return r.children?.find(u=>u.kind==="container")?.id||r.id;for(;s&&s.kind!=="container";){let h=function(p){for(let z of p.children||[])z===s&&(u=p),h(z)},u=null;h(t),s=u}return s?.id||t.children?.find(u=>u.kind==="container")?.id}function Wt(t,o){let r=null;function s(d){d.id===o&&(r=d);for(let u of d.children||[])s(u)}return s(t),r&&r.kind!=="server-container"?r.id:Ht(t,o)}function Vt(t,o,r,s){let d=t,u=t.kind,h=u==="textbox"||u==="textwindow",p=d.renderLeft??d.left,z=d.renderBottom??d.bottom,j=d.renderWidth??d.width,K=d.renderHeight??d.height,ae=d.renderRotationZ??t.rotationZ??0,O={left:`${p/r*100}%`,bottom:`${z/s*100}%`,width:`${j/r*100}%`,height:`${K/s*100}%`,"--rotation":`${-Number(ae)}deg`,fontSize:Math.max(8,Math.min(40,Number(t.fontSize||12))),color:h?_(t.fontColor,4294967295):"#fff"};u==="image"?Object.assign(O,N(t.primitive,_(t.imageColor,4294967295))):h?(O.background=_(t.bgColor,16777215),O.justifyContent=t.horizontalAlignment==="Right"?"flex-end":t.horizontalAlignment==="Middle"?"center":"flex-start",O.alignItems=t.verticalAlignment==="Bottom"?"flex-end":t.verticalAlignment==="Middle"?"center":"flex-start",O.textShadow=t.enableOutline===!1?"none":`0 0 2px ${_(t.outlineColor,4278190080)}`):u==="container"&&(O.background="transparent");let D=t.id===o.selectedId,U=u==="image"&&t.primitive==="sprite"?e(k,{key:de(t.imageId,t.imageSource),item:t}):h?t.text||"":u==="image"&&t.primitive==="missing"?e("span",{className:"qxsim-box-label"},`\u7F3A\u5C11\u56FE\u7247 ${t.imageId||""}`):u!=="container"&&u!=="image"?e("span",{className:"qxsim-box-label"},t.name||$[u]?.[1]||u):null;return e("div",{key:t.id,className:`qxsim-box ${u}${D?" selected":""}${t.instantiated?" dynamic":""}${t.pressed?" pressed":""}`,style:O},U,D&&u!=="container"?["tl","tr","bl","br"].map(H=>e("i",{key:H,className:`qxsim-handle ${H}`})):null)}function Rt({sessionId:t}){let o=S(),[r,s]=i.useState(null),d=i.useRef(null),u=i.useRef(Promise.resolve()),[h,p]=i.useState(""),z=v({sessionId:t,api:F,playUrl:f,onError:p}),[j,K]=i.useState(null),[ae,O]=i.useState(!1),[D,U]=i.useState(!1),[H,q]=i.useState(""),le=i.useRef(null),[P,ce]=i.useState([]),[ve,dt]=i.useState([]),[xe,Yt]=i.useState("ui"),[We,Ve]=i.useState("base"),[Re,Kt]=i.useState("fit"),[Ye,Xt]=i.useState({}),[ze,Ke]=i.useState(""),[ke,Xe]=i.useState("template"),[Je,Fe]=i.useState(""),[Ze,Ee]=i.useState(null),[pt,Qe]=i.useState({version:1,rules:[],dirty:!1}),mt=i.useRef(null),[De,Jt]=i.useState({width:0,height:0});i.useEffect(()=>{let a=mt.current;if(!a||typeof ResizeObserver>"u")return;let l=new ResizeObserver(x=>{let b=x[0]?.contentRect;b&&b.width>0&&Jt({width:b.width,height:b.height})});return l.observe(a),()=>l.disconnect()},[r?.canvas?.id]);function Se(a,{keepLogicDraft:l=!0}={}){return d.current=a,s(a),a?.scripts&&Fe(x=>a.scripts.some(b=>b.id===x)?x:a.scripts[0]?.id||""),Qe(x=>l&&x?.dirty?x:Te(a?.serverLogic)),a}let Oe=i.useCallback(async()=>{try{p(""),Se(await F(t,"get"),{keepLogicDraft:!1})}catch(a){p(a?.message||String(a))}},[t]),_e=i.useCallback(async()=>{try{let a=await F(t,"archives");dt(a?.archives||[])}catch{dt([])}},[t]);i.useEffect(()=>{Oe(),_e()},[Oe,_e]);function R(a,l=""){let x=async()=>{let b=d.current;if(!b)throw new Error("editor is not ready");try{if(l&&b.asset?.type!==l)throw new Error("\u5F53\u524D\u8D44\u4EA7\u5DF2\u5207\u6362\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u63A7\u4EF6\u540E\u4FEE\u6539\u7D22\u5F15");let ie=await F(t,"patch",{op:{...typeof a=="function"?a(b):a,expectedRevision:b.version}});return p(""),Se(ie)}catch(ie){throw p(ie?.message||String(ie)),/revision conflict/.test(String(ie?.message||ie))&&await Oe(),ie}};return u.current=u.current.then(x,x),u.current}async function Zt(a,l,x){await R({op:"setControlGuid",id:a,guid:l},x),q("\u63A7\u4EF6\u7D22\u5F15\u5DF2\u4FEE\u6539\uFF1B\u8BF7\u8BA9 AI \u6839\u636E\u7D22\u5F15\u53D8\u66F4\u8BB0\u5F55\u540C\u6B65 Lua \u811A\u672C\u5F15\u7528\u3002")}async function Qt(){let x=["\u8BF7\u540C\u6B65\u5F53\u524D\u6A21\u62DF\u5668\u5DE5\u7A0B\u7684\u5BA2\u6237\u7AEF\u63A7\u4EF6\u7D22\u5F15\u5F15\u7528\uFF1A",...(d.current?.controlGuidChanges||[]).map(b=>`${b.controlAsset} / ${b.controlName}\uFF08${b.controlId}\uFF09\uFF1A${b.oldGuid} \u2192 ${b.newGuid}\uFF1B\u8BB0\u5F55 ${b.id}`),"\u5148\u8BFB\u53D6\u6700\u65B0\u5FEB\u7167\u7684 controlGuidChanges\uFF0C\u6309\u63A7\u4EF6\u8EAB\u4EFD\u548C\u53D8\u66F4\u987A\u5E8F\u6838\u5BF9\u5168\u90E8 Lua \u811A\u672C\u7684\u7D22\u5F15\u5E38\u91CF\u3001\u914D\u7F6E\u8868\u4E0E\u8C03\u7528\uFF0C\u4FEE\u6539\u5B58\u6863\u4E2D\u7684 source \u53CA\u76F8\u5173 Lua \u6E90\u6587\u4EF6\u3002\u4E0D\u8981\u5168\u5C40\u66FF\u6362\u540C\u503C\u6570\u5B57\uFF0C\u4E5F\u4E0D\u8981\u6539\u8FD0\u884C\u65F6\u5B9E\u4F8B ID \u6216\u56FE\u7247\u8D44\u6E90 ID\u3002","\u68C0\u67E5\u65E7\u7D22\u5F15\u5F15\u7528\u5E76\u91CD\u65B0\u8BD5\u73A9\uFF1B\u786E\u8BA4\u5B8C\u6210\u540E\u7528 acknowledgeControlGuidChanges \u7684 changeIds \u6E05\u9664\u5DF2\u6838\u5BF9\u8BB0\u5F55\uFF0C\u518D\u4FDD\u5B58\u5B8C\u6574\u5B58\u6863\u3002"].join(`
28
+ `);try{await navigator.clipboard.writeText(x),q("\u5DF2\u590D\u5236\u7D22\u5F15\u53D8\u66F4\u53CA\u811A\u672C\u540C\u6B65\u8981\u6C42\uFF0C\u53EF\u7C98\u8D34\u7ED9 AI\u3002")}catch{p("\u65E0\u6CD5\u8BBF\u95EE\u526A\u8D34\u677F\uFF0C\u8BF7\u5C06\u4E0A\u65B9\u7D22\u5F15\u53D8\u66F4\u8BB0\u5F55\u4EA4\u7ED9 AI\uFF0C\u5E76\u8981\u6C42\u540C\u6B65 Lua \u811A\u672C\u5F15\u7528\u3002")}}async function ea(){let a=(d.current?.controlGuidChanges||[]).map(l=>l.id);try{await ye(),await R({op:"acknowledgeControlGuidChanges",changeIds:a}),q("\u5DF2\u786E\u8BA4\u811A\u672C\u7D22\u5F15\u5F15\u7528\u5B8C\u6210\u540C\u6B65\uFF1B\u8BF7\u4FDD\u5B58\u5B8C\u6574\u5B58\u6863\u3002")}catch{}}let ta=(a,l)=>void R(x=>({op:"set",key:a,value:typeof l=="function"?l(x.inspector.fields.find(b=>b.key===a)?.value):l})).catch(()=>{});async function aa(){let{imageId:a,imageSource:l}=d.current?.boxes?.find(x=>x.id===d.current.selectedId)||{};if($e(a,l)){U(!0);try{await F(t,"image-refresh",{imageId:a,imageSource:l}),Ct(a,l),q(`\u56FE\u7247 ${a} \u5DF2\u91CD\u65B0\u4E0B\u8F7D\uFF1B\u540C\u6E90\u8BD5\u73A9\u9875\u4F1A\u540C\u6B65\u5237\u65B0\u3002`)}catch(x){p(x.message)}finally{U(!1)}}}async function ia(a,l){let x=d.current?.inspector?.id;if(x)try{let b=await R({op:"add",kind:"image",parentId:x,name:`${l}\u56FE\u7247`});await R({op:"set",id:x,key:a,value:b.selectedId}),q(`${l}\u5DF2\u521B\u5EFA\u5E76\u7ED1\u5B9A\uFF1B\u53EF\u5728\u63A7\u4EF6\u6811\u4E2D\u7EE7\u7EED\u7F16\u8F91\u56FE\u7247\u3002`)}catch{}}i.useEffect(()=>{let a=r?.scripts?.find(l=>l.id===Je);Ee(l=>l&&a&&l.id===a.id&&l.dirty?l:a?{id:a.id,path:a.path,source:a.source,controlId:a.controlId,controlAsset:a.controlAsset,dirty:!1}:null)},[r,Je]);function na(a){Ee(l=>l&&{...l,...a,dirty:!0})}async function ye(){let a=Ze;!a||!a.dirty||(await R({op:"updateScript",id:a.id,path:a.path,source:a.source,controlId:a.controlId,controlAsset:a.controlAsset}),Ee(l=>l&&l.id===a.id?{...l,dirty:!1}:l))}function ut(){ye().then(()=>q("Lua \u811A\u672C\u5DF2\u4FDD\u5B58\u5230\u5F53\u524D\u5B58\u6863")).catch(()=>{})}async function Ne({silent:a=!1}={}){let l=pt;if(!l||!l.dirty)return;let x=Ot(l);if(x.length){let ie=x[0];throw a||p(ie),new Error(ie)}let b=await R({op:"setServerLogic",logic:He(l)});Qe(Te(b.serverLogic)),q("\u670D\u52A1\u7AEF\u903B\u8F91\u5DF2\u4FDD\u5B58\u5230\u5F53\u524D\u5B58\u6863")}function ra(){Ne({silent:!0}).catch(()=>{})}function Ae(a){ut(),ra(),Yt(a)}async function xt(a={}){let l=await R({op:"addScript",...a}),x=l.scripts?.[l.scripts.length-1];return x&&Fe(x.id),q(a.controlId?"\u5DF2\u65B0\u5EFA\u811A\u672C\u5E76\u6302\u8F7D\u5230\u8BE5\u63A7\u4EF6":"\u5DF2\u65B0\u5EFA\u811A\u672C\uFF0C\u53EF\u7F16\u8F91\u8DEF\u5F84\u3001\u6E90\u7801\u548C\u6302\u8F7D\u76EE\u6807"),x}function sa(a){Ze?.id===a&&Ee(null),R({op:"removeScript",id:a}).then(()=>q("\u811A\u672C\u5DF2\u5220\u9664")).catch(()=>{})}function oa(a){R({op:"updateScript",id:a,controlId:""}).then(()=>q("\u5DF2\u89E3\u9664\u6302\u8F7D\uFF0C\u811A\u672C\u4ECD\u4FDD\u7559\u5728\u5B58\u6863\u4E2D")).catch(()=>{})}function la(a){let l=d.current?.selectedId||"",x=d.current?.asset?.type||"";l&&(Ee(b=>b&&b.id===a?{...b,controlId:l,controlAsset:x}:b),R({op:"updateScript",id:a,controlId:l,controlAsset:x}).then(()=>q("\u5DF2\u6302\u8F7D\u5230\u5F53\u524D\u63A7\u4EF6")).catch(()=>{}))}async function ft(a){if(d.current?.asset?.type!==a)try{let l=await R({op:"selectAsset",assetType:a});Ke(""),Xe(a==="client-control-template"?"template":"child"),q(`\u5DF2\u5207\u6362\u5230\u5B58\u6863\u5185\u7684${l.asset.label}`)}catch{}}function ca(a,l){let x=d.current;if(!x)return;let b=x.asset?.type==="client-control-template"&&ke==="template",ie=b?{op:"addTemplate",kind:a,name:`${l}\u6A21\u677F`}:{op:"add",kind:a,parentId:Wt(x.root,x.selectedId),name:l};R(ie).then(()=>q(b?`\u5DF2\u65B0\u589E${l}\u6A21\u677F`:`\u5DF2\u6DFB\u52A0${l}\u5B50\u63A7\u4EF6`)).catch(()=>{})}async function Be(a,l=""){try{await u.current.catch(()=>{}),await ye(),await Ne();let x=await F(t,"export",{format:a,assetType:l});if(ce([...new Set([...x.warnings||[],...(x.files||[]).flatMap(b=>b.warnings||[])])]),Array.isArray(x?.files)&&x.files.length){for(let b of x.files)A(b);p(""),q(`\u5DF2\u5BFC\u51FA ${x.files.length} \u4E2A GIA \u6587\u4EF6\uFF08${x.files.map(b=>b.filename).join("\u3001")}\uFF09\uFF1B\u82E5\u6D4F\u89C8\u5668\u62E6\u622A\u591A\u6587\u4EF6\u4E0B\u8F7D\uFF0C\u8BF7\u5141\u8BB8\u540E\u91CD\u8BD5\u3002`);return}A(x),p(""),q(x.warnings?.length?`\u5DF2\u5BFC\u51FA ${x.filename}\uFF1B\u8BF7\u67E5\u770B\u4E0A\u65B9\u5BFC\u51FA\u8BF4\u660E\u3002`:`\u5DF2\u5BFC\u51FA ${x.filename}`)}catch(x){p(x?.message||String(x))}}async function da(a){if(a)try{await u.current.catch(()=>{});let l=await F(t,"load-archive",{path:a});Se(l.snapshot,{keepLogicDraft:!1}),p(""),q(`\u5DF2\u4ECE\u5DE5\u4F5C\u533A\u62C9\u53D6 ${a}`),ce([])}catch(l){p(l?.message||String(l))}}async function pa(a){if(!a)return;let l=a.name.toLowerCase().endsWith(".gia")?"gia":a.name.toLowerCase().endsWith(".json")?"json":a.name.toLowerCase().endsWith(".lua")?"lua":"";if(!l){p("\u4EC5\u652F\u6301 .json\u3001.gia \u6216 .lua \u6587\u4EF6");return}try{await u.current.catch(()=>{});let x=await F(t,"import",{format:l,filename:a.name,data:await B(a)});Se(x.snapshot,{keepLogicDraft:!1}),p(""),q([`\u5DF2\u5BFC\u5165 ${a.name}`,...x.warnings||[]].join(`
29
+ `)),ce([])}catch(x){p(x?.message||String(x))}finally{le.current&&(le.current.value="")}}function ma(){z.open(async()=>{await u.current.catch(()=>{}),await ye(),await Ne(),await u.current,p("")})}async function ua(){if(!(ae||!j?.trim())){O(!0);try{await ye(),await Ne(),await u.current.catch(()=>{});let a=d.current,l=await F(t,"save",{path:j.trim(),expectedRevision:a.version});Se(await F(t,"get")),q(`\u5DF2\u4FDD\u5B58\u5230 ${l.path}`),p(""),K(null),_e()}catch(a){p(a?.message||String(a))}finally{O(!1)}}}if(i.useEffect(()=>{r?.inspector?.kind==="server-container"&&Ve("base")},[r?.inspector?.kind]),!r)return e("div",{className:"qxsim","data-theme":o,"data-qxsim-session-id":t},e("div",{className:"qxsim-status error"},h||"\u6B63\u5728\u8F7D\u5165\u5343\u661F\u6C99\u7BB1\u2026"));let qe=r.canvas.width,Ce=r.canvas.height,et=De.width>0&&De.height>0?Math.min((De.width-44)/qe,(De.height-54)/Ce):NaN,xa=Number.isFinite(et)&&et>0?Math.min(2,Math.round(et*1e3)/1e3):.5,fa=Re==="fit"?xa:Number(Re)||.5,gt=se(qe,Ce),ga=(r.canvas.presets||[]).filter(a=>a.platform===r.canvas.platform);function ha(a){if(!r||r.canvas.platform===a)return;let l=(r.canvas.presets||[]).filter(b=>b.platform===a);if(!l.length)return;let x=l.find(b=>pe(b)===gt)||l[0];R({op:"setCanvas",canvasId:x.id}).then(()=>q(`\u5DF2\u5207\u6362\u5230${x.label}`)).catch(()=>{})}let J=r.asset?.type==="client-control-template",tt=!!(r.inspector&&r.inspector.kind!=="server-container"),at=new Set;for(let a of r.tree||[])(Ye[a.id]||(a.ancestorIds||[]).some(l=>Ye[l]))&&at.add(a.id);let ba=(r.boxes||[]).filter(a=>a.kind!=="server-container"&&a.visible&&!at.has(a.id));function va(a,l){a.stopPropagation(),Xt(x=>{let b={...x};return b[l]?delete b[l]:b[l]=!0,b})}let ht=r.tree.filter(a=>!ze.trim()||`${a.name} ${a.label}`.toLowerCase().includes(ze.trim().toLowerCase())),V=r.tree.find(a=>a.id===r.selectedId),ya=J&&V?r.tree.filter(a=>a.id!==V.id&&!(a.ancestorIds||[]).includes(V.id)):[],qa=V?.parentId||r.root.id;return e("div",{className:"qxsim","data-theme":o,"data-qxsim-session-id":t},z.overlay,xe==="script"&&h?e("div",{className:"qxsim-status error",role:"alert"},h):null,j!==null?e("div",{className:"qxsim-save-overlay"},e("form",{className:"qxsim-save-dialog",role:"dialog","aria-modal":!0,"aria-label":"\u4FDD\u5B58\u5230\u5DE5\u4F5C\u533A",onSubmit:a=>{a.preventDefault(),ua()}},e("h2",null,"\u4FDD\u5B58\u5230\u5DE5\u4F5C\u533A"),e("label",null,"\u5B58\u6863\u76F8\u5BF9\u8DEF\u5F84",e("input",{autoFocus:!0,required:!0,value:j,disabled:ae,onChange:a=>K(a.target.value)})),h?e("div",{role:"alert"},h):null,e("footer",null,e("button",{className:"qxsim-action",type:"button",disabled:ae,onClick:()=>K(null)},"\u53D6\u6D88"),e("button",{className:"qxsim-action primary",type:"submit",disabled:ae||!j.trim()},ae?"\u4FDD\u5B58\u4E2D\u2026":"\u4FDD\u5B58")))):null,e("header",{className:"qxsim-toolbar"},e("div",{className:"qxsim-brand",title:`${r.workspace?.bound?r.workspace.path:"\u5DE5\u4F5C\u533A\u672A\u7ED1\u5B9A"}
30
+ ${r.meta?.sourceFile||"\u5C1A\u672A\u5BFC\u5165\u6587\u4EF6"}`},e("span",{className:"qxsim-appicon"},"UI"),e("span",{className:"qxsim-brand-text"},e("strong",null,`\u5B58\u6863\uFF1A${r.save?.name||r.meta?.name||"\u672A\u547D\u540D\u5B58\u6863"}`),e("span",null,`\u5DE5\u4F5C\u533A\uFF1A${r.workspace?.bound?r.workspace.name:"\u672A\u7ED1\u5B9A"} \xB7 \u5F53\u524D\u8D44\u4EA7\uFF1A${r.asset?.label||"UI\u63A7\u4EF6"}`))),e("div",{className:"qxsim-toolbar-center"},xe==="ui"?e(i.Fragment,null,e("div",{className:"qxsim-device-switch",role:"group","aria-label":"\u76EE\u6807\u8BBE\u5907"},Y.map(a=>e("button",{key:a.key,className:r.canvas.platform===a.key?"active":"",title:a.title,onClick:()=>ha(a.key)},a.label))),e("select",{className:"qxsim-control ratio","aria-label":"\u5C4F\u5E55\u6BD4\u4F8B",value:r.canvasId,onChange:a=>void R({op:"setCanvas",canvasId:a.target.value}).catch(()=>{})},ga.map(a=>e("option",{key:a.id,value:a.id},`${pe(a)} \xB7 ${a.width}\xD7${a.height}`))),e("select",{className:"qxsim-control zoom","aria-label":"\u753B\u5E03\u7F29\u653E",value:Re,onChange:a=>Kt(a.target.value)},[["fit","\u9002\u5E94"],["0.25","25%"],["0.5","50%"],["0.75","75%"],["1","100%"]].map(([a,l])=>e("option",{key:a,value:a},l)))):e("span",{className:"qxsim-muted"},xe==="logic"?"\u670D\u52A1\u7AEF\u903B\u8F91\uFF1A\u76D1\u542C\u4FE1\u53F7 / \u81EA\u5B9A\u4E49\u53D8\u91CF / \u73A9\u5BB61-8 \u56DE\u4F20":"Lua \u811A\u672C\u8D44\u4EA7\u7F16\u8F91")),e("div",{className:"qxsim-actions"},c?e("button",{className:"qxsim-action",title:"\u4FDD\u5B58\u5B8C\u6574\u5B58\u6863\u5230\u5DE5\u4F5C\u533A",onClick:()=>{p(""),K(d.current?.storage?.path||"qxqy-simulator.save.json")}},"\u4FDD\u5B58\u5B58\u6863"):null,e("div",{className:"qxsim-io"},e("input",{ref:le,hidden:!0,type:"file",accept:".json,.gia,.lua,application/json,application/octet-stream,text/plain",onChange:a=>void pa(a.target.files?.[0])}),e("select",{className:"qxsim-control zoom","aria-label":"\u4ECE\u5DE5\u4F5C\u533A\u62C9\u53D6\u5B58\u6863",defaultValue:"",onFocus:()=>void _e(),onChange:a=>{let l=a.target.value;a.target.value="",l&&da(l)}},e("option",{value:"",disabled:!0},r.workspace?.bound?"\u2913 \u5DE5\u4F5C\u533A\u5B58\u6863":"\u5DE5\u4F5C\u533A\u672A\u7ED1\u5B9A"),...ve.length?ve.map(a=>e("option",{key:a.path,value:a.path},`${a.name} \xB7 ${a.path}`)):[e("option",{value:"",disabled:!0},r.workspace?.bound?"\u672A\u53D1\u73B0 qxqy-simulator-save":"\u5148\u7ED1\u5B9A\u4F1A\u8BDD\u5DE5\u4F5C\u533A")]),e("button",{className:"qxsim-action",title:"\u5BFC\u5165\u5B58\u6863\u3001\u5355\u9879 UI \u8D44\u4EA7\u6216 Lua",onClick:()=>le.current?.click()},"\u21E7 \u5BFC\u5165"),e("select",{className:"qxsim-control zoom","aria-label":"\u5BFC\u51FA\u683C\u5F0F",defaultValue:"",onChange:a=>{let[l,x=""]=a.target.value.split("|");a.target.value="",l&&Be(l,x)}},e("option",{value:"",disabled:!0},"\u21E9 \u5BFC\u51FA"),e("option",{value:"save"},"\u8D44\u4EA7\u5305 JSON\uFF08\u4E09\u7C7B\u5408\u4E00\uFF09"),e("option",{value:"save-gia"},"\u8D44\u4EA7\u5305 GIA\uFF08\u5DF2\u6539\u52A8\u9879\uFF09"),e("option",{value:"gia-combined"},"\u8D44\u4EA7\u5305 GIA \u6574\u5408\u5305\uFF08\u63A7\u4EF6+\u811A\u672C\uFF09"),e("optgroup",{label:"\u5F53\u524D\u754C\u9762\uFF08\u5DE6\u680F\u6B63\u5728\u770B\u7684\u90A3\u68F5\u6811\uFF09"},e("option",{value:"json"},"\u5F53\u524D\u754C\u9762 Authoring JSON"),e("option",{value:"gia"},"\u5F53\u524D\u754C\u9762 GIA")),e("optgroup",{label:"\u670D\u52A1\u5668\u63A7\u4EF6\u6A21\u677F"},e("option",{value:"json|server-control-template"},"Authoring JSON"),e("option",{value:"gia|server-control-template"},"GIA")),e("optgroup",{label:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\uFF08\u4EC5\u5F53\u5DE6\u680F\u5207\u5230\u300CUI\u63A7\u4EF6-\u5BA2\u6237\u7AEF\u300D\u65F6\u624D\u662F\u9875\u9762\u5185\u5BB9\uFF09"},e("option",{value:"json|client-control-template"},"Authoring JSON"),e("option",{value:"gia|client-control-template"},"GIA")),e("optgroup",{label:"Lua \u811A\u672C"},e("option",{value:"scripts"},"\u811A\u672C\u5305 JSON\uFF08\u5168\u90E8\u811A\u672C\uFF09"),e("option",{value:"scripts-gia"},"\u811A\u672C\u5305 GIA\uFF08\u5168\u90E8\u811A\u672C\uFF09")))),e("button",{className:"qxsim-action primary",title:"\u6253\u5F00\u8BD5\u73A9\uFF1B\u65B0\u7A97\u53E3\u4E0D\u53EF\u7528\u65F6\u5728\u5E94\u7528\u5185\u8BD5\u73A9",disabled:z.opening,onClick:ma},z.opening?"\u6B63\u5728\u51C6\u5907\u2026":"\u25B7 \u8BD5\u73A9 \u2197"),e("button",{className:"qxsim-iconbtn",title:"\u91CD\u65B0\u8F7D\u5165",onClick:Oe},"\u21BB"))),e("nav",{className:"qxsim-editor-nav","aria-label":"\u7F16\u8F91\u9875\u9762"},e("button",{className:xe==="ui"?"active":"",onClick:()=>Ae("ui")},"UI \u7F16\u8F91"),e("button",{className:xe==="script"?"active":"",onClick:()=>Ae("script")},"Lua \u811A\u672C"),e("button",{className:xe==="logic"?"active":"",onClick:()=>Ae("logic")},"\u670D\u52A1\u7AEF\u903B\u8F91"),e("span",{className:"save-summary"},"\u4E00\u4E2A\u5B58\u6863 \xB7 \u670D\u52A1\u5668\u63A7\u4EF6\u6A21\u677F + \u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F + Lua \u811A\u672C + \u670D\u52A1\u7AEF\u903B\u8F91")),xe==="script"?e(g,{snap:r,patch:R,request:(a,l)=>F(t,a,l),refresh:async()=>Se(await F(t,"get")),prepare:async()=>(await u.current,await ye(),await Ne(),d.current)}):null,r.controlGuidChanges?.length?e("details",{className:"qxsim-note",open:!0,style:{flexShrink:0,maxHeight:170,overflow:"auto"}},e("summary",{style:{cursor:"pointer"}},`\u5F85\u540C\u6B65 Lua \u7D22\u5F15\u5F15\u7528\uFF08${r.controlGuidChanges.length} \u9879\uFF09`),e("div",null,"\u63A7\u4EF6\u7D22\u5F15\u5DF2\u4FEE\u6539\u3002\u8BF7\u8BA9 AI \u66F4\u65B0\u5B58\u6863\u811A\u672C\u548C\u76F8\u5173 Lua \u6E90\u6587\u4EF6\uFF0C\u5E76\u91CD\u65B0\u8BD5\u73A9\u6838\u5BF9\u3002"),e("ul",{style:{margin:"5px 0"}},r.controlGuidChanges.map(a=>e("li",{key:a.id},`${a.controlAsset==="client-control-template"?"\u5BA2\u6237\u7AEF\u6A21\u677F":"\u670D\u52A1\u7AEF\u754C\u9762"} \xB7 ${a.controlName}\uFF1A${a.oldGuid} \u2192 ${a.newGuid}`))),e("div",{style:{display:"flex",gap:6}},e("button",{className:"qxsim-action",onClick:Qt},"\u590D\u5236\u7ED9 AI"),e("button",{className:"qxsim-action",title:"\u4EC5\u5728\u5DF2\u4FEE\u6539\u6216\u786E\u8BA4\u4E0D\u6D89\u53CA\u811A\u672C\u5F15\u7528\uFF0C\u5E76\u5B8C\u6210\u6838\u5BF9\u540E\u4F7F\u7528",onClick:ea},"\u5DF2\u5B8C\u6210\u811A\u672C\u540C\u6B65"))):null,P.length?e("details",{className:"qxsim-export-warnings",open:!0,role:"status",style:{flexShrink:0,maxHeight:180,overflow:"auto",padding:"8px 16px",borderBottom:"1px solid currentColor"}},e("summary",{style:{cursor:"pointer"}},`\u4E0A\u6B21\u5BFC\u51FA\u8BF4\u660E\uFF08${P.length} \u9879\uFF0C\u8BF7\u6838\u5BF9\u5BFC\u5165\u540E\u7684\u6548\u679C\uFF09`),e("button",{className:"qxsim-action",onClick:()=>ce([])},"\u5173\u95ED\u5BFC\u51FA\u8BF4\u660E"),e("ul",null,P.map((a,l)=>e("li",{key:l},a)))):null,xe==="ui"?e("div",{className:"qxsim-main"},e("aside",{className:"qxsim-tree"},e("div",{className:"qxsim-asset-switch","aria-label":"\u7F16\u8F91\u8D44\u6E90\u7C7B\u578B"},e("button",{className:J?"":"active",title:"\u7F16\u8F91\u5B58\u6863\u5185\u7684\u670D\u52A1\u7AEF UI \u63A7\u4EF6",onClick:()=>void ft("server-control-template")},"UI\u63A7\u4EF6-\u670D\u52A1\u7AEF"),e("button",{className:J?"active":"",title:"\u7F16\u8F91\u5B58\u6863\u5185\u7684\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F",onClick:()=>void ft("client-control-template")},"UI\u63A7\u4EF6-\u5BA2\u6237\u7AEF")),e("div",{className:"qxsim-pane-head"},e("div",{className:"qxsim-pane-title"},J?"\u6A21\u677F\u4E0E\u5B50\u63A7\u4EF6":"\u63A7\u4EF6\u6811"),e("span",{className:"qxsim-muted"},J?`${r.asset.templateCount} \u4E2A\u6A21\u677F \xB7 ${r.tree.length} \u4E2A\u63A7\u4EF6`:`${r.tree.length} \u4E2A\u8282\u70B9`)),e("label",{className:"qxsim-search"},"\u2315",e("input",{value:ze,placeholder:J?"\u641C\u7D22\u6A21\u677F\u6216\u63A7\u4EF6":"\u641C\u7D22\u63A7\u4EF6",onChange:a=>Ke(a.target.value)}),ze?e("button",{onClick:()=>Ke("")},"\xD7"):e("span",null,"\u2301")),e("div",{className:"qxsim-tree-scroll"},ht.length?ht.map(a=>{let l=$[a.kind]||["\u25C7",a.label],x=at.has(a.id),b=!!Ye[a.id];return e("div",{key:a.id,className:`qxsim-row${J&&a.depth===0?" template-root":""}${a.id===r.selectedId?" active":""}${x?" canvas-hidden":""}`,style:{paddingLeft:8+a.depth*18,"--depth":a.depth},title:`${l[1]} \xB7 ${a.name} \xB7 GUID ${a.guid??a.id}`,onClick:()=>void R({op:"select",id:a.id}).catch(()=>{})},e("span",{className:"qxsim-chevron"},a.childCount?"\u25BC":""),e("span",{className:"qxsim-kind"},l[0]),e("span",{className:"qxsim-row-label"},a.name),e("span",{className:"qxsim-row-end"},J&&a.depth===0?e(i.Fragment,null,e("span",{className:"qxsim-template-tag"},"\u6A21\u677F"),e("span",{className:"qxsim-template-id"},`#${a.guid??a.id}`)):a.incomplete?e("span",{className:"qxsim-incomplete"},"\u6682\u4E0D\u652F\u6301"):null,e("button",{className:`qxsim-eye${b?" off":""}`,type:"button",title:b?"\u5728\u753B\u5E03\u4E0A\u663E\u793A\uFF08\u4E0D\u5F71\u54CD\u63A7\u4EF6\u521D\u59CB\u53EF\u89C1\u6027\uFF09":"\u5728\u753B\u5E03\u4E0A\u9690\u85CF\uFF08\u4E0D\u5F71\u54CD\u63A7\u4EF6\u521D\u59CB\u53EF\u89C1\u6027\uFF09","aria-label":`${a.name}\u753B\u5E03\u53EF\u89C1\u6027`,"aria-pressed":!b,onClick:ie=>va(ie,a.id)},b?"\u25CC":"\u25C9")))}):e("div",{className:"qxsim-empty"},"\u6CA1\u6709\u5339\u914D\u7684\u63A7\u4EF6")),e("div",{className:"qxsim-tree-foot"},J&&V?e("div",{className:"qxsim-hierarchy"},e("div",{className:"qxsim-hierarchy-head"},e("strong",null,"\u5C42\u7EA7\u4E0E\u6A21\u677F\u8FB9\u754C"),e("span",null,V.name)),e("div",{className:"qxsim-parent-row"},e("select",{"aria-label":"\u7236\u7EA7\u63A7\u4EF6",value:qa,onChange:a=>void R({op:"reparent",id:V.id,parentId:a.target.value}).then(()=>q(a.target.value===r.root.id?"\u5DF2\u63D0\u5347\u4E3A\u53EF\u5B9E\u4F8B\u5316\u9876\u5C42\u6A21\u677F":"\u5DF2\u8C03\u6574\u63A7\u4EF6\u7236\u7EA7")).catch(()=>{})},e("option",{value:r.root.id},"\u9876\u5C42\u6A21\u677F\uFF08\u53EF\u5B9E\u4F8B\u5316\uFF09"),ya.map(a=>e("option",{key:a.id,value:a.id},`${"\u3000".repeat(a.depth)}${a.name}`))),e("button",{title:"\u5728\u540C\u7EA7\u4E2D\u4E0A\u79FB",disabled:V.siblingIndex<=0,onClick:()=>void R({op:"moveSibling",id:V.id,direction:"up"}).catch(()=>{})},"\u2191"),e("button",{title:"\u5728\u540C\u7EA7\u4E2D\u4E0B\u79FB",disabled:V.siblingIndex>=V.siblingCount-1,onClick:()=>void R({op:"moveSibling",id:V.id,direction:"down"}).catch(()=>{})},"\u2193")),e("div",{className:"qxsim-hierarchy-note"},V.depth===0?"\u8BE5\u8282\u70B9\u4F1A\u5199\u5165\u72EC\u7ACB UIControlTemplate\uFF0C\u53EF\u76F4\u63A5\u4F5C\u4E3A prefabId\u3002":`\u5F53\u524D\u4E3A\u7B2C ${V.depth} \u5C42\u5B50\u63A7\u4EF6\uFF0C\u4E0D\u4F1A\u5355\u72EC\u6210\u4E3A prefabId\u3002`)):null,e("div",{className:"qxsim-palette-head"},e("span",{title:J&&ke==="template"?"\u65B0\u589E\u72EC\u7ACB\u53EF\u5B9E\u4F8B\u5316\u6A21\u677F":`\u6DFB\u52A0\u5230${V?V.name:"\u5F53\u524D\u63A7\u4EF6"}`},J&&ke==="template"?"\u65B0\u589E\u9876\u5C42\u6A21\u677F":`\u6DFB\u52A0\u5230${V?`\u201C${V.name}\u201D`:"\u5F53\u524D\u63A7\u4EF6"}`),J?e("span",{className:"qxsim-add-mode"},e("button",{className:ke==="template"?"active":"",onClick:()=>Xe("template")},"\u9876\u5C42"),e("button",{className:ke==="child"?"active":"",onClick:()=>Xe("child")},"\u5B50\u63A7\u4EF6")):null),e("div",{className:"qxsim-add"},M.filter(([a])=>J||a!=="container").map(([a,l])=>e("button",{key:a,title:`${J&&ke==="template"?"\u65B0\u589E":"\u6DFB\u52A0"}${l}`,onClick:()=>ca(a,l)},`\uFF0B ${l}`))))),e("main",{className:"qxsim-center"},e("div",{className:"qxsim-workspace",ref:mt},e("div",{className:"qxsim-stage-shell",style:{width:`${Math.max(40,Math.round(qe*fa))}px`}},e("div",{className:"qxsim-stage-label"},e("b",null,J?"Lua \u6A21\u677F\u9884\u89C8":"\u754C\u9762\u63A7\u4EF6\u7EC4"),e("span",{className:"qxsim-platform-tag"},r.canvas.platform),e("span",null,`${gt} \xB7 ${qe}\xD7${Ce} \xB7 \u5DE6\u4E0B\u539F\u70B9`)),e("div",{className:"qxsim-stage",style:{width:"100%",aspectRatio:`${qe} / ${Ce}`},onClick:a=>{let l=a.currentTarget.getBoundingClientRect();R({op:"pick",x:(a.clientX-l.left)*qe/l.width,y:(l.bottom-a.clientY)*Ce/l.height}).catch(()=>{})}},ba.map(a=>Vt(a,r,qe,Ce))))),h?e("div",{className:"qxsim-status error"},"\u26A0 ",h):e("div",{className:"qxsim-status"},e("span",null,`\u25CF ${r.asset?.label||"\u63A7\u4EF6"}\u7F16\u8F91`),e("span",null,H||(V?`\u5F53\u524D\uFF1A${V.name}`:"")),e("span",{className:"spacer"}),e("span",null,J?"GIA \u5BFC\u51FA\u540E\u53EF\u5728 Lua \u4E2D\u6309 prefabId \u5B9E\u4F8B\u5316":"\u5B57\u6BB5\u5728\u5931\u7126\u6216 Enter \u65F6\u63D0\u4EA4"),e("a",{className:"qxsim-community",href:"https://space.bilibili.com/23358791",target:"_blank",rel:"noreferrer",title:"\u4F5C\u8005 B\u7AD9\u4E3B\u9875"},"\u4F5C\u8005B\u7AD9"),e("a",{className:"qxsim-community",href:"https://qm.qq.com/q/DpuMvxAfhm",target:"_blank",rel:"noreferrer",title:"\u52A0\u5165 QQ \u7FA4 1007538100"},"QQ\u7FA4 1007538100"))),e("aside",{className:"qxsim-inspector"},r.inspector?e(i.Fragment,null,e("div",{className:"qxsim-inspector-head"},e("div",{className:"qxsim-inspector-line"},e("span",{className:"qxsim-kind"},($[r.inspector.kind]||["\u25C7"])[0]),e("strong",null,r.inspector.label),J&&V?.depth===0?e("span",{className:"qxsim-template-tag"},"\u53EF\u5B9E\u4F8B\u5316"):null),e("div",{className:"qxsim-node-id"},J&&V?.depth===0?"\u6A21\u677F\u7D22\u5F15 ":"\u63A7\u4EF6 GUID ",e("code",null,r.inspector.guid??r.inspector.id)," \xB7 ",V?.name||"\u8282\u70B9"),r.inspector.kind!=="server-container"?e(Gt,{key:`${r.asset.type}:${r.inspector.id}`,inspector:r.inspector,onSave:(a,l)=>Zt(a,l,r.asset.type)}):null),e("div",{className:"qxsim-tabs",style:tt?void 0:{gridTemplateColumns:"1fr"}},e("button",{className:We==="base"?"active":"",onClick:()=>Ve("base")},"\u57FA\u7840\u5C5E\u6027"),tt?e("button",{className:We==="script"?"active":"",onClick:()=>Ve("script")},"\u811A\u672C"):null),e("div",{className:"qxsim-inspector-scroll"},tt&&We==="script"?e(Ut,{snap:r,addScriptMounted:a=>void xt({controlId:a,controlAsset:r.asset?.type}).then(()=>Ae("script")),mountScriptTo:la,unmountScript:oa,openScript:a=>{Fe(a),Ae("script")}}):e(i.Fragment,null,e(he,{key:`${r.asset.type}:${r.inspector.id}`,inspector:r.inspector,commit:ta,createStateChild:ia}),r.boxes?.some(a=>a.id===r.selectedId&&$e(a.imageId,a.imageSource))?e("div",{className:"qxsim-section-body"},e("button",{className:"qxsim-action",disabled:D,onClick:aa},D?"\u6B63\u5728\u5237\u65B0\u7D20\u6750\u2026":"\u21BB \u91CD\u65B0\u4E0B\u8F7D\u6B64\u7D20\u6750"),e("p",{className:"qxsim-muted"},"\u767D\u540D\u5355\u56FE\u7247\u6309\u9700\u7F13\u5B58\uFF1B\u5237\u65B0\u4F1A\u91CD\u65B0\u8BBF\u95EE\u7D20\u6750\u6E90\u3002")):null)),e("div",{className:"qxsim-tree-foot"},e("button",{className:"qxsim-action danger",style:{width:"100%"},onClick:()=>void R({op:"remove"}).catch(()=>{})},J&&V?.depth===0?"\u232B \u5220\u9664\u5F53\u524D\u6A21\u677F":"\u232B \u5220\u9664\u5F53\u524D\u63A7\u4EF6"))):e("div",{className:"qxsim-empty"},"\u8BF7\u9009\u62E9\u4E00\u4E2A\u63A7\u4EF6"))):xe==="script"?e(me,{snap:r,selectedScriptId:Je,selectScript:a=>{ut(),Fe(a)},draft:Ze,updateDraft:na,saveScript:()=>void ye().then(()=>q("Lua \u811A\u672C\u5DF2\u4FDD\u5B58\u5230\u5F53\u524D\u5B58\u6863")).catch(()=>{}),addScript:()=>void xt(),removeScript:sa,exportLua:a=>void Be("lua",a),exportScripts:()=>void Be("scripts"),exportScriptsGia:()=>void Be("scripts-gia"),notice:H}):e(jt,{snap:r,draft:pt,setDraft:Qe,saveLogic:()=>void Ne().catch(()=>{}),notice:H,error:h}))}return{SimulatorView:Rt,ensureStyle:G,removeStyle:()=>document.getElementById(y)?.remove()}}window.__ModuleLoader__.load({id:"dsh-plugin-beyond-simulator",factory:i=>{let n={},f=i("react"),c=Dt(f,{async api(e,g,v){let k=await fetch("/qxqy-simulator/api/"+g,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({sessionId:e,...v||{}}),...g==="play"?{signal:AbortSignal.timeout(15e3)}:{}}),I=await k.json();if(!k.ok||!I.ok)throw new Error(I.error||"Request failed");return I.value},playUrl:e=>"/qxqy-simulator/play#"+encodeURIComponent(e)});return n.inject=["slots"],n.apply=e=>{c.ensureStyle(),e.effect(()=>c.removeStyle,"qxqy-simulator: style cleanup"),e.slots.inject("conversation.view",()=>e.slots.register({name:"conversation.view",id:"qxqy-simulator",order:20,label:()=>"\u6A21\u62DF\u5668"},c.SimulatorView))},n}});})();