dsh-plugin-beyond-simulator 2.0.8 → 2.0.11

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
@@ -18,6 +18,8 @@
18
18
  | **七步游戏制作工作流** | 从策划案与测试用例出发,展示 HTML 效果、准备千星美术素材,再完成 Lua 编码、测试与真机反馈修复。 |
19
19
  | **存档与资产交换** | 用完整 JSON 存档保存工程,导入导出 UI、Lua 脚本及已支持的 GIA 内容,衔接后续编辑与交付。 |
20
20
 
21
+ 11 类控件的实际运行能力和缺口见 [客户端控件支持矩阵](studio/docs/control-support.md)。文本视窗、网格视窗现支持基础滚轮/拖拽/触摸与滚动条;编辑、字段存取与完整仿真程度分别说明。
22
+
21
23
  ## 集成方式
22
24
 
23
25
  按你的开发环境选择接入方式。Web 可以独立使用;让 AI 直接编辑和测试工程时使用 MCP;需要边对话边看画面时组合 MCP + Web:
@@ -95,7 +97,7 @@ dsh plugin --profile web add dsh-plugin-beyond-simulator
95
97
  # 或,从 GitHub 默认分支源码安装
96
98
  dsh plugin --profile web add github:1475505/miliastra-beyond-simulator
97
99
  # 或,从本地安装包安装
98
- dsh plugin --profile web add ./release/dsh-plugin-beyond-simulator-2.0.8.tgz
100
+ dsh plugin --profile web add ./release/dsh-plugin-beyond-simulator-2.0.11.tgz
99
101
 
100
102
  dsh --profile web --dump-config
101
103
  dsh web
@@ -192,7 +194,8 @@ AI 可以直接获取工程状态、发送输入、读取日志和截图,无
192
194
 
193
195
  - **模拟器通过不等于真机通过。** 它用于提前发现脚本、布局和交互问题,最终仍需在千星奇域中验证。
194
196
  - **服务端模拟覆盖变量与信号。** 1–8 人试玩是本地多客户端模拟,不包含完整官方服务端节点图或真实网络联机。
195
- - **图片预览以基础图元为主。** 当前用代理图形显示图片 ID `100001–100006`,其他素材显示缺失提示;安装包不包含完整官方图片和动效资源。
197
+ - **图片预览支持基础图元与白名单静态素材。** `100001–100006` 使用代理图形,另有 1,516 个白名单 ID 可从指定素材源按需下载;编辑器、试玩及 AI 截图共用本地缓存,浏览器复用 HTTP 缓存。选择图片后可在属性面板「重新下载此素材」。未列入或加载失败显示缺失提示;九宫格和动效不在本轮范围。详见 [素材缓存与预览](studio/docs/image-assets.md)。
198
+ - **Lua 2D 音效可在试玩页播放。** 支持 `game.PlayAudio2D`、`game.StopAudio`、`game.IsAudioAlive`,固定 1,997 个音频 ID,按需下载 MP3 并复用磁盘/浏览器缓存。首次可点击「开启声音」解锁;时长及暂停采用明确的模拟器策略。详见 [音频缓存与接口](studio/docs/audio-assets.md)。
196
199
  - **GIA 支持已验证的内容子集。** 部分控件属性与脚本挂载关系无法完整交换,导出时请关注提示,并保留原始文件及完整 JSON 存档。
197
200
 
198
201
  ## 从源码构建
@@ -1,4 +1,4 @@
1
- (()=>{function Re(d){let u=d.createElement;return function({snap:L,request:e,patch:I,prepare:U,refresh:B}){let F={version:1,workspaceDir:"",clientImportRoot:"",clientSubdir:""},[M,ee]=d.useState(L.scriptSync||F),[j,W]=d.useState(L.storage?.path||"qxqy-simulator.save.json"),[Z,se]=d.useState([]),[O,b]=d.useState(null),[y,P]=d.useState([]),[$,J]=d.useState(null),[D,R]=d.useState(""),[S,me]=d.useState(!1);d.useEffect(()=>{ee(L.scriptSync||F),b(null)},[JSON.stringify(L.scriptSync),L.storage?.path]),d.useEffect(()=>{b(null)},[L.version,L.asset?.type]),d.useEffect(()=>{L.storage?.path&&W(L.storage.path)},[L.storage?.path]);let Ne=async m=>{me(!0),R("");try{await m()}catch(G){R(G.message||String(G))}finally{me(!1)}},_=(m,G={})=>e("script-sync",{action:m,args:G});async function K(){b(null),J(null);let m=await U();await e("save",{path:j,expectedRevision:m.version}),await B();let G=await _("preview");b(G),P(G.rows.filter(X=>!X.error&&X.status!=="\u672A\u53D8\u5316").map(X=>X.id))}let be=JSON.stringify(M)!==JSON.stringify(L.scriptSync||F),Q=(m,G)=>u("label",{className:"qxsim-field",key:m},u("span",null,G),u("input",{type:"text",value:M[m],disabled:S,onChange:X=>{ee({...M,[m]:X.target.value}),b(null)}})),ue=M.clientImportRoot.replaceAll("\\","/").match(/BeyondLocal\/([^/]+)\/Beyond_Local_Save_Level\/([^/]+)/),ie=(m,G,X=!1)=>u("button",{type:"button",className:"qxsim-action",disabled:S||X,onClick:()=>void Ne(G)},m);return u("details",{className:"qxsim-section",style:{flexShrink:0,maxHeight:"55%",overflow:"auto",margin:"5px 10px"}},u("summary",null,`\u5B9E\u673A\u811A\u672C\u540C\u6B65 \xB7 ${L.scriptSync?"\u5DF2\u914D\u7F6E\uFF08\u624B\u52A8\u590D\u5236\uFF09":"\u672A\u914D\u7F6E"}`),u("div",{className:"qxsim-section-body"},u("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"),Q("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"),Q("clientImportRoot","\u5B9E\u673A\u5BFC\u5165\u6839\u76EE\u5F55\uFF08default_import_file \u7684\u5B8C\u6574\u8DEF\u5F84\uFF09"),Q("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"),ue?u("p",null,`UID\uFF1A${ue[1]} \xB7 \u7F16\u8F91\u5668 ID\uFF1A${ue[2]}`):null,u("div",{style:{display:"flex",gap:6,flexWrap:"wrap"}},ie("\u53D1\u73B0\u672C\u673A\u76EE\u5F55",async()=>{let m=await _("discover");se(m.candidates),m.candidates.length||R("\u672A\u53D1\u73B0\u76EE\u5F55\uFF0C\u53EF\u7C98\u8D34\u5B8C\u6574\u8DEF\u5F84\u3002")}),ie("\u4FDD\u5B58\u76EE\u5F55\u914D\u7F6E",async()=>{await U();let m=await I({op:"setScriptSync",config:M});await e("save",{path:j,expectedRevision:m.version}),await B(),b(null)},!M.clientImportRoot||!j.trim()),ie("\u6E05\u9664\u914D\u7F6E",async()=>{await U();let m=await I({op:"setScriptSync",config:null});await e("save",{path:j,expectedRevision:m.version}),await B(),b(null)},!L.scriptSync||!j.trim())),Z.length?u("label",{className:"qxsim-field"},"\u53D1\u73B0\u7684\u76EE\u5F55",u("select",{value:"",disabled:S,onChange:m=>{ee({...M,clientImportRoot:m.target.value}),b(null)}},u("option",{value:""},"\u9009\u62E9 UID / \u7F16\u8F91\u5668\u2026"),Z.map(m=>u("option",{key:m.path,value:m.path},`${m.uid} / ${m.editorId} \xB7 ${m.path}`)))):null,u("label",{className:"qxsim-field",style:{marginTop:8}},u("span",null,"\u5B8C\u6574\u5B58\u6863\u4FDD\u5B58\u8DEF\u5F84"),u("input",{type:"text",value:j,disabled:S,onChange:m=>{W(m.target.value),b(null)}})),ie("\u4FDD\u5B58\u5B58\u6863\u5E76\u68C0\u67E5\u5DEE\u5F02",K,!L.scriptSync||be||!j.trim()),be?u("p",null,"\u76EE\u5F55\u914D\u7F6E\u5DF2\u4FEE\u6539\uFF0C\u8BF7\u5148\u4FDD\u5B58\u76EE\u5F55\u914D\u7F6E\u3002"):null,D?u("p",{role:"alert",style:{color:"var(--danger)"}},D):null,O?u("section",{"aria-label":"\u811A\u672C\u540C\u6B65\u786E\u8BA4"},u("p",null,`\u76EE\u6807\u76EE\u5F55\uFF1A${O.root}`),O.pendingGuidChanges?u("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,O.rows.map(m=>u("div",{key:m.id,style:{borderTop:"1px solid var(--line)",padding:6}},u("label",null,u("input",{type:"checkbox",disabled:S||!!m.error||m.status==="\u672A\u53D8\u5316",checked:y.includes(m.id),onChange:G=>P(G.target.checked?[...y,m.id]:y.filter(X=>X!==m.id))}),` ${m.path} \xB7 ${m.sourceKind} \xB7 ${m.status}`),u("div",{style:{overflowWrap:"anywhere"}},m.error||`\u2192 ${m.target}`),m.sourceMismatch?u("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",u("details",null,u("summary",null,"\u67E5\u770B\u5DE5\u4F5C\u533A\u6587\u4EF6"),u("pre",{style:{maxHeight:200,overflow:"auto"}},m.diskSource)),ie("\u4ECE\u5DE5\u4F5C\u533A\u6587\u4EF6\u66F4\u65B0\u5B58\u6863\u6E90\u7801",async()=>{await U(),await I({op:"updateScript",id:m.id,source:m.diskSource}),b(null)})):null,!m.error&&m.status!=="\u672A\u53D8\u5316"?u("details",null,u("summary",null,"\u67E5\u770B\u590D\u5236\u524D\u540E\u5185\u5BB9"),u("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8}},u("div",null,"\u5B9E\u673A\u5F53\u524D\u5185\u5BB9",u("pre",{style:{maxHeight:240,overflow:"auto"}},m.beforeSource)),u("div",null,"\u5C06\u5199\u5165\u7684\u5185\u5BB9",u("pre",{style:{maxHeight:240,overflow:"auto"}},m.source)))):null)),u("p",null,`\u786E\u8BA4\u590D\u5236 ${y.length} \u4E2A\u811A\u672C\uFF0C\u5176\u4E2D\u8986\u76D6 ${O.rows.filter(m=>y.includes(m.id)&&m.status==="\u8986\u76D6").length} \u4E2A\u3002\u8986\u76D6\u524D\u5907\u4EFD\uFF0C\u4E0D\u5220\u9664\u5B9E\u673A\u989D\u5916\u6587\u4EF6\u3002`),u("div",{style:{display:"flex",gap:6}},ie("\u53D6\u6D88",async()=>b(null)),ie(`\u786E\u8BA4\u590D\u5236 ${y.length} \u4E2A\u811A\u672C`,async()=>{let m=O;b(null),await U(),J(await e("script-sync-apply",{planId:m.id,scriptIds:y,confirmed:!0}))},!y.length||!!O.pendingGuidChanges))):null,$?u("div",{role:"status"},u("strong",null,$.completed?"\u540C\u6B65\u5B8C\u6210":"\u90E8\u5206\u6587\u4EF6\u540C\u6B65\u5931\u8D25"),u("p",null,`${$.at} \xB7 \u5907\u4EFD\u4F4D\u7F6E\uFF1A${$.backupRoot}`),u("ul",null,$.results.map(m=>u("li",{key:m.id},`${m.target}\uFF1A${m.status}${m.error?` \xB7 ${m.error}`:""}`)))):null))}}function Qe(d){let u=d.createElement,ae=new Map;function L({entry:e,api:I,onClosed:U}){let B=d.useRef(null),F=d.useRef(null),[M,ee]=d.useState(!1),[j,W]=d.useState(""),[Z,se]=d.useState(!1);d.useLayoutEffect(()=>{let b={closing:!1,stopped:!1,pending:null,controller:null,requests:new Set};F.current=b;let y=B.current,P=y.querySelector("iframe"),$=!0,J=()=>{if(b.stopped)return Promise.resolve();if(b.closing=!0,!b.controller)return b.stopped=!0,Promise.resolve();if(!b.pending){let S=(async()=>{b.controller?.quiesce(),await Promise.allSettled([...b.requests]),await I(e.sessionId,"play",{action:"stop",args:{}}),b.stopped=!0})().finally(()=>{b.pending=null,ae.get(e.sessionId)===S&&ae.delete(e.sessionId)});b.pending=S,ae.set(e.sessionId,S)}return b.pending};b.close=async()=>{if(!(b.pending||b.stopped)){ee(!0),W("");try{await J(),$&&U()}catch(S){$&&(W(`\u505C\u6B62\u8BD5\u73A9\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\uFF1A${S?.message||S}`),ee(!1))}}};let D=S=>{S.source!==P.contentWindow||S.data?.type!=="qxqy-play-close"||S.data.sessionId!==e.sessionId||b.close()},R=S=>{S.preventDefault(),b.close()};return window.addEventListener("message",D),y.addEventListener("cancel",R),y.showModal(),()=>{$=!1,window.removeEventListener("message",D),y.removeEventListener("cancel",R),y.close(),J().catch(S=>console.error("Embedded play cleanup failed",S)),e.returnFocus?.isConnected&&e.returnFocus.focus()}},[e,I,U]);function O(b){let y=F.current;if(!y.closing)try{let P=b.currentTarget,$=P.contentWindow?.qxqyEmbeddedPlay;if(!$)throw new Error("\u8BD5\u73A9\u9875\u672A\u80FD\u52A0\u8F7D\uFF0C\u8BF7\u8FD4\u56DE\u7F16\u8F91\u540E\u91CD\u8BD5\u3002");y.controller=$,se(!0),P.focus(),$.focus();let J=(D,R={})=>{if(y.closing)return Promise.reject(new Error("\u8BD5\u73A9\u6B63\u5728\u5173\u95ED"));let S=I(e.sessionId,"play",{action:D,args:R});return y.requests.add(S),S.then(()=>y.requests.delete(S),()=>y.requests.delete(S)),S};$.start(J).catch(D=>{y.closing||W(D?.message||String(D))})}catch(P){W(P?.message||String(P))}}return u("dialog",{ref:B,className:"qxsim-play-overlay","aria-label":"\u5185\u5D4C\u8BD5\u73A9","aria-modal":!0},u("header",{className:"qxsim-play-header"},u("span",{role:"status"},M?"\u6B63\u5728\u505C\u6B62\u8BD5\u73A9\u2026":Z?"\u5185\u5D4C\u8BD5\u73A9":"\u6B63\u5728\u8F7D\u5165\u8BD5\u73A9\u2026"),u("button",{className:"qxsim-action",type:"button",disabled:M,onClick:()=>void F.current?.close?.()},"\u5173\u95ED\u8BD5\u73A9")),j?u("div",{className:"qxsim-play-error",role:"alert"},j):null,u("iframe",{title:"\u5343\u661F\u6C99\u7BB1\u8BD5\u73A9",src:e.url,onLoad:O,tabIndex:0}))}return function({sessionId:I,api:U,playUrl:B,onError:F}){let M=d.useRef(null),[ee,j]=d.useState(!1),[W,Z]=d.useState(null),se=d.useCallback(()=>Z(null),[]);d.useEffect(()=>{let b={active:!0,pending:!1,popup:null};return M.current=b,j(!1),Z(null),()=>{b.active=!1,b.popup?.close()}},[I]);async function O(b){let y=M.current;if(!y?.active||y.pending||W)return;y.pending=!0;let P=document.activeElement;j(!0);try{let $=window.open("about:blank","_blank");if(y.popup=$,$&&$.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>'),await ae.get(I),!y.active||(await b(),!y.active))return;let J=new URL(B(I),window.location.href);$?($.location.replace(J.href),y.popup=null):(J.searchParams.set("embedded","1"),Z({sessionId:I,url:J.href,returnFocus:P}))}catch($){y.popup?.close(),y.popup=null,y.active&&F($?.message||String($))}finally{y.pending=!1,y.active&&j(!1)}}return{open:O,opening:ee,overlay:W?.sessionId===I?u(L,{key:I,entry:W,api:U,onClosed:se}):null}}}function et(d,{api:u,playUrl:ae,saveToWorkspace:L=!1}){let e=d.createElement,I=Re(d),U=Qe(d),B="qxqy-simulator-style",F=`
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=`
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}
@@ -23,7 +23,7 @@
23
23
  @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
24
  @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
25
  @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
- `,M={"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"]},ee=[["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"]],j={container:["isolateNavigation","disableKeyEventPassthrough","disableCursorEventPassthrough","showCursor"],textbox:["fontSize","adaptiveFontSize","minimumFontSize","fontColor","bgColor","enableOutline","outlineColor","horizontalAlignment","verticalAlignment","text"],cursor:[],reference:["referencedPrefabId"],grid:["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:["fontSize","adaptiveFontSize","minimumFontSize","fontColor","bgColor","enableOutline","outlineColor","horizontalAlignment","verticalAlignment","text"],keyhint:["keyboardKeyCode","controllerKeyCode"],animation:["animationId"],fullscreen:["animationId"]};function W(){if(document.getElementById(B))return;let t=document.createElement("style");t.id=B,t.textContent=F,document.head.appendChild(t)}function Z(){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 se(){let[t,s]=d.useState(Z);return d.useEffect(()=>{let i=()=>s(Z()),n=new MutationObserver(i);n.observe(document.documentElement,{attributes:!0,attributeFilter:["class","style","data-theme"]}),document.body&&n.observe(document.body,{attributes:!0,attributeFilter:["class","style","data-theme"]});let o=window.matchMedia?.("(prefers-color-scheme: dark)");return o?.addEventListener?.("change",i),()=>{n.disconnect(),o?.removeEventListener?.("change",i)}},[]),t}function O(t,s){let i=Number(t??s)>>>0;return`rgba(${i>>>16&255},${i>>>8&255},${i&255},${(i>>>24&255)/255})`}function b(t){return`#${(Number(t)>>>0).toString(16).padStart(8,"0").toUpperCase()}`}function y(t,s){return 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 P=u;function $(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 c=0;c<s.length;c+=1)i[c]=s.charCodeAt(c);let n=URL.createObjectURL(new Blob([i],{type:t.mimeType||"application/octet-stream"})),o=document.createElement("a");o.href=n,o.download=t.filename||"qxqy-export",o.rel="noopener",o.style.display="none",document.body.appendChild(o),o.click(),o.remove(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}async function J(t){let s=new Uint8Array(await t.arrayBuffer()),i="",n=32768;for(let o=0;o<s.length;o+=n)i+=String.fromCharCode(...s.subarray(o,o+n));return btoa(i)}let D=t=>typeof t=="object"?t.value:t,R=t=>typeof t=="object"?t.label:t,S=[{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 me(t){return String(t.id||"").split("-").slice(1).join(":")}function Ne(t,s){let i=(o,c)=>c?i(c,o%c):o,n=i(Math.round(t),Math.round(s))||1;return`${Math.round(t)/n}:${Math.round(s)/n}`}function _({field:t,commit:s,axis:i}){let n=t.type==="color"?b(t.value):t.value==null?"":String(t.value),[o,c]=d.useState(n);if(d.useEffect(()=>c(t.type==="color"?b(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:l=>s(t.key,l.target.checked)}),e("span",{className:"qxsim-switch-track"})));if(t.type==="enum"){let l=[...t.options||[]],h=String(t.value??"");return l.some(q=>String(D(q))===h)||l.unshift({value:t.value??"",label:`\u672A\u8BC6\u522B\u9009\u9879 ${t.unknownValue??(h||"\u7A7A")}\uFF08\u4FDD\u7559\u539F\u503C\uFF09`}),e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},t.label),e("select",{value:h,disabled:!!t.readonly,onChange:q=>s(t.key,q.target.value)},l.map(q=>e("option",{key:String(D(q)),value:D(q)},R(q)))))}if(t.type==="percent"){let l=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:l,onInput:h=>s(t.key,Number(h.target.value)/100)}),e("output",null,`${l}%`)))}if(t.type==="color"){let l=/^#[0-9a-f]{8}$/i.test(o)?o:b(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:`#${l.slice(3)}`,onInput:h=>{let q=`#${l.slice(1,3)}${h.target.value.slice(1).toUpperCase()}`;c(q),s(t.key,q)}})),e("input",{type:"text",value:o,spellCheck:!1,"aria-label":`${t.label} ARGB`,onChange:h=>c(h.target.value),onBlur:()=>s(t.key,o),onKeyDown:h=>{h.key==="Enter"&&h.currentTarget.blur(),h.key==="Escape"&&c(b(t.value))}})))}let x={value:o,disabled:!!t.readonly,readOnly:!!t.readonly,onChange:l=>c(l.target.value),onBlur:()=>{t.readonly||s(t.key,o)},onKeyDown:l=>{l.key==="Enter"&&t.type!=="text"&&l.currentTarget.blur(),l.key==="Escape"&&c(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 K({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 be(t){let s={};for(let i of t||[])s[i.key]=i;return s}function Q({label:t,x:s,y:i,xAxis:n="X",yAxis:o="Y",commit:c}){return e("div",{className:"qxsim-pair"},e("div",{className:"qxsim-pair-name"},t),e(_,{field:s,axis:n,commit:c}),e(_,{field:i,axis:o,commit:c}))}function ue({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:n=>s(t.key,n.target.value)},(t.options||[]).map(n=>e("option",{key:String(D(n)),value:D(n)},R(n))))))}function ie({inspector:t,commit:s,createStateChild:i}){let n=be(t.fields),o=h=>h?.type==="node"?e(ue,{key:h.key,field:h,commit:s,createStateChild:i}):h?e(_,{key:h.key,field:h,commit:s}):null,c=(j[t.kind]||[]).map(h=>n[h]).filter(Boolean).map(o),x=null;if(t.kind==="image"){let h=n.fillType?.value==="Horizontal"?n.fillHorizontalType:n.fillType?.value==="Vertical"?n.fillVerticalType:n.fillType?.value==="Radial90"?n.fillRadial90Type:n.fillRadialType,q=[o(n.enableMask),o(n.enableSoftEdge),n.enableSoftEdge?.value?e("div",{className:"qxsim-subfields",key:"soft-fields"},o(n.softEdgeMode),e(Q,{label:"\u7FBD\u5316\u5BBD\u5EA6",x:n.softEdgeWidthX,y:n.softEdgeWidthY,commit:s}),e(Q,{label:"\u7FBD\u5316\u8303\u56F4",x:n.horizontalSoftRange,y:n.verticalSoftRange,commit:s})):null,o(n.enableFill),n.enableFill?.value?e("div",{className:"qxsim-subfields",key:"fill-fields"},o(n.fillType),o(h),o(n.fillAmount)):null,o(n.reverseMaskArea)];x=e(d.Fragment,null,e(K,{title:"\u56FE\u7247\u8BBE\u7F6E"},o(n.imageSource),o(n.imageId),o(n.imageColor)),e(K,{title:"\u906E\u7F69\u8BBE\u7F6E"},q))}let l=t.kind==="textbox"?"\u6587\u672C\u6846\u8BBE\u7F6E":t.kind==="button"?"\u6309\u94AE\u8BBE\u7F6E":`${t.label}\u8BBE\u7F6E`;return e(d.Fragment,null,e(K,{title:"\u8282\u70B9\u4FE1\u606F",open:!1},e(_,{field:n.name,commit:s})),e(K,{title:"\u53D8\u6362"},n.posX?e(Q,{label:"\u4F4D\u7F6E",x:n.posX,y:n.posY,commit:s}):null,n.width?e(Q,{label:"\u5927\u5C0F",x:n.width,y:n.height,xAxis:"W",yAxis:"H",commit:s}):null,n.rotationZ?e(_,{field:n.rotationZ,commit:s}):null,n.syncAllDevices?e(_,{field:n.syncAllDevices,commit:s}):null,n.anchorType?e(_,{field:n.anchorType,commit:s}):null,n.anchorMinX?e(Q,{label:"Min",x:n.anchorMinX,y:n.anchorMinY,commit:s}):null,n.anchorMaxX?e(Q,{label:"Max",x:n.anchorMaxX,y:n.anchorMaxY,commit:s}):null,n.pivotX?e(Q,{label:"\u4E2D\u5FC3",x:n.pivotX,y:n.pivotY,commit:s}):null),e(K,{title:"\u521B\u5EFA\u8BBE\u7F6E"},n.active?e(_,{field:n.active,commit:s}):null,n.visible?e(_,{field:n.visible,commit:s}):null),x||(c.length?e(K,{title:l},c):null),n.canControllerFocus?e(K,{title:"\u624B\u67C4\u5BFC\u822A",open:!1},e(_,{field:n.canControllerFocus,commit:s})):null,n.incomplete?e(K,{title:"\u5B9E\u73B0\u72B6\u6001"},e(_,{field:n.incomplete,commit:s})):null)}function m({snap:t,selectedScriptId:s,selectScript:i,draft:n,updateDraft:o,saveScript:c,addScript:x,removeScript:l,exportLua:h,exportScripts:q,exportScriptsGia:z,notice:H}){let k=t.scripts||[],w=k.find(v=>v.id===s)||null,f=t.mountTargets||[],C=f.filter(v=>v.assetType==="server-control-template"),N=f.filter(v=>v.assetType==="client-control-template"),te=v=>{let ne=f.find(Y=>Y.id===v);return ne?`${ne.assetLabel} \xB7 ${ne.name}`:""};return e("div",{className:"qxsim-script-page"},e("aside",{className:"qxsim-script-assets"},e("h3",null,`\u5B58\u6863\u5185 Lua \u811A\u672C\uFF08${k.length}\uFF09`),e("button",{className:"qxsim-action",style:{width:"100%",marginBottom:8},onClick:x},"\uFF0B \u65B0\u5EFA\u811A\u672C"),k.length?k.map(v=>e("div",{key:v.id,className:"qxsim-script-list-row"},e("button",{className:`qxsim-script-asset${v.id===s?" active":""}`,onClick:()=>i(v.id)},e("strong",null,v.path||"(\u672A\u547D\u540D\u811A\u672C)"),e("small",null,v.mounted?`\u6302\u8F7D\uFF1A${v.assetLabel} \xB7 ${v.controlName}`:"\u672A\u6302\u8F7D\uFF08\u4EC5\u53EF\u88AB require\uFF09")),e("button",{className:"qxsim-iconbtn",title:"\u4E0B\u8F7D\u8BE5\u811A\u672C .lua",onClick:()=>h(v.id)},"\u21E9"),e("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u8BE5\u811A\u672C",onClick:()=>l(v.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"},w&&n?e(d.Fragment,null,e("div",{className:"qxsim-script-title"},e("div",null,e("h2",null,n.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 ${w.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:n.path,placeholder:"lua/example.lua",onChange:v=>o({path:v.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:n.controlId?`${n.controlAsset||"server-control-template"}|${n.controlId}`:"",onChange:v=>{let[ne,Y]=v.target.value.split("|");o(Y?{controlId:Y,controlAsset:ne}:{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"},C.map(v=>e("option",{key:v.id,value:`${v.assetType}|${v.id}`},`${v.name} \xB7 ${v.id}`))),N.length?e("optgroup",{label:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F"},N.map(v=>e("option",{key:v.id,value:`${v.assetType}|${v.id}`},`${v.name} \xB7 ${v.id}`))):null))),e("label",null,"Lua \u6E90\u7801",e("textarea",{value:n.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:v=>o({source:v.target.value})})),e("div",{className:"qxsim-script-footer"},e("span",null,n.dirty?"\u6709\u672A\u4FDD\u5B58\u7684\u4FEE\u6539":H||(w.mounted?`\u5DF2\u6302\u8F7D\uFF1A${te(w.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:q},"\u21E9 \u811A\u672C\u5305 JSON"),e("button",{className:"qxsim-action",onClick:z},"\u21E9 \u811A\u672C\u5305 GIA"),e("button",{className:"qxsim-action primary",disabled:!n.dirty,onClick:c},"\u4FDD\u5B58\u811A\u672C"))):e("div",{className:"qxsim-empty"},"\u8BF7\u65B0\u5EFA\u6216\u9009\u62E9\u4E00\u4E2A\u811A\u672C")))}function G(t){if(t===void 0)return"null";try{return JSON.stringify(t)}catch{return String(t)}}function X(t){let s=String(t??"").trim();if(!s)return null;try{return JSON.parse(s)}catch{return s}}function Ge(t){return!!(t&&typeof t=="object"&&!Array.isArray(t)&&Object.prototype.hasOwnProperty.call(t,"fromSignalParam"))}function Be(t){return{version:1,dirty:!1,rules:(Array.isArray(t?.rules)?t.rules:[]).map((i,n)=>({id:String(i.id||`signal-${n+1}`),signalName:String(i.signalName||""),actions:Array.isArray(i.actions)&&i.actions.length?i.actions.map(o=>it(o)):[xe("setCustomVariable")]}))}}let Fe=["PlayerSelf","AllPlayers","Player1","Player2","Player3","Player4","Player5","Player6","Player7","Player8"],Ue=["PlayerSelf","Level","Player1","Player2","Player3","Player4","Player5","Player6","Player7","Player8"],_e={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 Se(t){return Ue.includes(t)&&t!=="AllPlayers"?t:t==="Level"?"Level":"PlayerSelf"}function Ce(t){return Fe.includes(t)?t:"PlayerSelf"}function xe(t){return t==="sendClientScriptSignal"?{kind:"sendClientScriptSignal",target:"PlayerSelf",signalName:"",params:[]}:{kind:"setCustomVariable",entityType:"PlayerSelf",name:"",value:0}}function tt(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:Ce(i.target),signalName:String(i.signalName||"").trim(),params:Array.isArray(i.params)?i.params:[]}:{kind:"setCustomVariable",entityType:Se(i?.entityType),name:String(i?.name||"").trim(),value:i&&Object.prototype.hasOwnProperty.call(i,"value")?i.value:0})}))}}function at(t){let s=[];for(let[i,n]of(t?.rules||[]).entries()){String(n.signalName||"").trim()||s.push(`\u89C4\u5219 ${i+1} \u9700\u8981\u76D1\u542C\u4FE1\u53F7\u540D`);let o=n.actions||[];o.length||s.push(`\u89C4\u5219 ${i+1} \u81F3\u5C11\u9700\u8981\u4E00\u4E2A\u52A8\u4F5C`);for(let[c,x]of o.entries())x?.kind==="sendClientScriptSignal"?String(x.signalName||"").trim()||s.push(`\u89C4\u5219 ${i+1} \u52A8\u4F5C ${c+1} \u9700\u8981\u5BA2\u6237\u7AEF\u4FE1\u53F7\u540D`):String(x?.name||"").trim()||s.push(`\u89C4\u5219 ${i+1} \u52A8\u4F5C ${c+1} \u9700\u8981\u53D8\u91CF\u540D`)}return s}function it(t){if(t?.kind==="sendClientScriptSignal")return{kind:"sendClientScriptSignal",target:Ce(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:Se(t?.entityType),name:String(t?.name||""),value:s}}function He({label:t,value:s,onChange:i}){let n=Ge(s),[o,c]=d.useState(()=>n?"":G(s));return d.useEffect(()=>{Ge(s)||c(G(s))},[s]),e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},t),e("select",{value:n?"param":"literal","aria-label":`${t}\u6765\u6E90`,onChange:x=>{x.target.value==="param"?i({fromSignalParam:Number(s?.fromSignalParam)||0}):i(X(o||"0"))}},e("option",{value:"literal"},"\u5B57\u9762\u91CF\uFF08JSON\uFF09"),e("option",{value:"param"},"\u5F15\u7528\u76D1\u542C\u4FE1\u53F7\u53C2\u6570")),n?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:o,spellCheck:!1,"aria-label":`${t}\u5B57\u9762\u91CF`,onBlur:()=>i(X(o)),onChange:x=>c(x.target.value)}))}function nt({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((n,o)=>e("div",{key:o,style:{display:"flex",gap:6,alignItems:"flex-start",marginBottom:6}},e("div",{style:{flex:1,minWidth:0}},e(He,{label:`\u53C2\u6570 ${o}`,value:n,onChange:c=>s(i.map((x,l)=>l===o?c:x))})),e("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u53C2\u6570",onClick:()=>s(i.filter((c,x)=>x!==o))},"\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 st({snap:t,draft:s,setDraft:i,saveLogic:n,notice:o,error:c}){let x=s?.rules||[];function l(k){i({version:1,rules:k,dirty:!0})}function h(){l(x.concat([{id:`signal-${Date.now().toString(36)}`,signalName:"",actions:[xe("setCustomVariable")]}]))}function q(k,w){l(x.map((f,C)=>C===k?{...f,...w}:f))}function z(k,w,f){let C=x[k];C&&q(k,{actions:C.actions.map((N,te)=>te===w?{...N,...f}:N)})}function H(k,w,f){z(k,w,xe(f))}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:n},"\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"),c?e("div",{className:"qxsim-logic-error"},c):null,x.length?x.map((k,w)=>e("section",{key:k.id||w,className:"qxsim-logic-rule"},e("div",{className:"qxsim-logic-rule-head"},e("strong",null,`\u89C4\u5219 ${w+1}`),e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},"\u76D1\u542C\u4FE1\u53F7\u540D"),e("input",{type:"text",value:k.signalName,placeholder:"EarnGold","aria-label":`\u89C4\u5219 ${w+1} \u76D1\u542C\u4FE1\u53F7\u540D`,onChange:f=>q(w,{signalName:f.target.value})})),e("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u89C4\u5219",onClick:()=>l(x.filter((f,C)=>C!==w))},"\u2715")),e("div",{className:"qxsim-logic-actions"},(k.actions||[]).map((f,C)=>e("div",{key:C,className:"qxsim-logic-action"},e("div",{className:"qxsim-logic-action-head"},e("strong",null,`\u52A8\u4F5C ${C+1}`),e("select",{value:f.kind,"aria-label":`\u89C4\u5219 ${w+1} \u52A8\u4F5C ${C+1} \u7C7B\u578B`,onChange:N=>H(w,C,N.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,f.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:(k.actions||[]).length<=1,onClick:()=>q(w,{actions:k.actions.filter((N,te)=>te!==C)})},"\u2715")),f.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:Ce(f.target),onChange:N=>z(w,C,{target:N.target.value})},Fe.map(N=>e("option",{key:N,value:N},_e[N])))),e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},"\u5BA2\u6237\u7AEF\u4FE1\u53F7\u540D"),e("input",{type:"text",value:f.signalName,placeholder:"GoldChanged",onChange:N=>z(w,C,{signalName:N.target.value})})),e(nt,{params:f.params,onChange:N=>z(w,C,{params:N})})):e("div",{className:"qxsim-logic-fields"},e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},"\u5B9E\u4F53"),e("select",{value:Se(f.entityType),onChange:N=>z(w,C,{entityType:N.target.value})},Ue.map(N=>e("option",{key:N,value:N},_e[N])))),e("label",{className:"qxsim-field"},e("span",{className:"qxsim-field-label"},"\u53D8\u91CF\u540D"),e("input",{type:"text",value:f.name,placeholder:"Gold",onChange:N=>z(w,C,{name:N.target.value})})),e("div",{className:"wide"},e(He,{label:"\u53D8\u91CF\u503C",value:f.value,onChange:N=>z(w,C,{value:N})}))))),e("div",{className:"qxsim-logic-actions-foot"},e("button",{className:"qxsim-action",onClick:()=>q(w,{actions:(k.actions||[]).concat([xe("setCustomVariable")])})},"\uFF0B \u8BBE\u7F6E\u81EA\u5B9A\u4E49\u53D8\u91CF"),e("button",{className:"qxsim-action",onClick:()=>q(w,{actions:(k.actions||[]).concat([xe("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:h},"\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":o||"\u4FDD\u5B58\u540E\u4F1A\u5199\u5165\u5F53\u524D\u5B58\u6863\uFF0C\u4E0B\u6B21\u8BD5\u73A9\u751F\u6548"),e("span",{className:"spacer"}))))}function rt({inspector:t,onSave:s}){let[i,n]=d.useState(String(t.guid??"")),[o,c]=d.useState(!1),[x,l]=d.useState("");d.useEffect(()=>{n(String(t.guid??"")),l("")},[t.guid]);async function h(q){q.preventDefault();let z=i.trim();if(!/^[0-9]+$/.test(z)||Number(z)<1||Number(z)>2147483647){l("\u8BF7\u8F93\u5165 1\u20132147483647 \u4E4B\u95F4\u7684\u6574\u6570\u7D22\u5F15\u3002");return}c(!0),l("");try{await s(t.id,Number(z))}catch(H){l(H?.message||String(H))}finally{c(!1)}}return e("form",{onSubmit:h,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:o,onChange:q=>{n(q.target.value),l("")},onKeyDown:q=>{q.key==="Escape"&&(n(String(t.guid)),l(""))}}),e("button",{type:"submit",className:"qxsim-action",disabled:o||i.trim()===String(t.guid)},o?"\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 ot({snap:t,addScriptMounted:s,mountScriptTo:i,unmountScript:n,openScript:o}){let c=(t.scripts||[]).filter(l=>l.controlId===t.selectedId),x=(t.scripts||[]).filter(l=>l.controlId!==t.selectedId);return e(d.Fragment,null,e(K,{title:"\u6302\u8F7D\u5230\u8BE5\u63A7\u4EF6\u7684\u811A\u672C"},c.length?c.map(l=>e("div",{key:l.id,className:"qxsim-script-list-row"},e("button",{className:"qxsim-script-asset",onClick:()=>o(l.id)},e("strong",null,l.path||"(\u672A\u547D\u540D\u811A\u672C)"),e("small",null,`\u811A\u672C ${l.id}`)),e("button",{className:"qxsim-iconbtn",title:"\u89E3\u9664\u6302\u8F7D\uFF08\u4FDD\u7559\u811A\u672C\uFF09",onClick:()=>n(l.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(K,{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:l=>{let h=l.target.value;l.target.value="",h&&i(h)}},e("option",{value:""},"\u9009\u62E9\u811A\u672C\u2026"),x.map(l=>e("option",{key:l.id,value:l.id},`${l.path||"(\u672A\u547D\u540D\u811A\u672C)"} \xB7 ${l.id}${l.mounted?`\uFF08\u5F53\u524D\u6302\u8F7D\u4E8E ${l.assetLabel} \xB7 ${l.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 lt(t,s){let i=null,n=null;function o(c,x){c.id===s&&(i=c,n=x);for(let l of c.children||[])o(l,c)}if(o(t,null),i?.kind==="container")return i.id;if(i?.kind==="server-container")return i.children?.find(c=>c.kind==="container")?.id||i.id;for(;n&&n.kind!=="container";){let x=function(l){for(let h of l.children||[])h===n&&(c=l),x(h)},c=null;x(t),n=c}return n?.id||t.children?.find(c=>c.kind==="container")?.id}function ct(t,s){let i=null;function n(o){o.id===s&&(i=o);for(let c of o.children||[])n(c)}return n(t),i&&i.kind!=="server-container"?i.id:lt(t,s)}function dt(t,s,i,n){let o=t,c=t.kind,x=c==="textbox"||c==="textwindow",l=o.renderLeft??o.left,h=o.renderBottom??o.bottom,q=o.renderWidth??o.width,z=o.renderHeight??o.height,H=o.renderRotationZ??t.rotationZ??0,k={left:`${l/i*100}%`,bottom:`${h/n*100}%`,width:`${q/i*100}%`,height:`${z/n*100}%`,"--rotation":`${-Number(H)}deg`,fontSize:Math.max(8,Math.min(40,Number(t.fontSize||12))),color:x?O(t.fontColor,4294967295):"#fff"};c==="image"?Object.assign(k,y(t.primitive,O(t.imageColor,4294967295))):x?(k.background=O(t.bgColor,16777215),k.justifyContent=t.horizontalAlignment==="Right"?"flex-end":t.horizontalAlignment==="Middle"?"center":"flex-start",k.alignItems=t.verticalAlignment==="Bottom"?"flex-end":t.verticalAlignment==="Middle"?"center":"flex-start",k.textShadow=t.enableOutline===!1?"none":`0 0 2px ${O(t.outlineColor,4278190080)}`):c==="container"&&(k.background="transparent");let w=t.id===s.selectedId,f=x?t.text||"":c==="image"&&t.primitive==="missing"?e("span",{className:"qxsim-box-label"},`\u7F3A\u5C11\u56FE\u7247 ${t.imageId||""}`):c!=="container"&&c!=="image"?e("span",{className:"qxsim-box-label"},t.name||M[c]?.[1]||c):null;return e("div",{key:t.id,className:`qxsim-box ${c}${w?" selected":""}${t.instantiated?" dynamic":""}${t.pressed?" pressed":""}`,style:k},f,w&&c!=="container"?["tl","tr","bl","br"].map(C=>e("i",{key:C,className:`qxsim-handle ${C}`})):null)}function pt({sessionId:t}){let s=se(),[i,n]=d.useState(null),o=d.useRef(null),c=d.useRef(Promise.resolve()),[x,l]=d.useState(""),h=U({sessionId:t,api:P,playUrl:ae,onError:l}),[q,z]=d.useState(null),[H,k]=d.useState(!1),[w,f]=d.useState(""),C=d.useRef(null),[N,te]=d.useState([]),[v,ne]=d.useState([]),[Y,mt]=d.useState("ui"),[$e,Pe]=d.useState("base"),[Ae,ut]=d.useState("fit"),[Le,xt]=d.useState({}),[he,Ee]=d.useState(""),[le,ze]=d.useState("template"),[Ie,ve]=d.useState(""),[Te,ge]=d.useState(null),[Ye,Me]=d.useState({version:1,rules:[],dirty:!1}),Ve=d.useRef(null),[ye,gt]=d.useState({width:0,height:0});d.useEffect(()=>{let a=Ve.current;if(!a||typeof ResizeObserver>"u")return;let r=new ResizeObserver(p=>{let g=p[0]?.contentRect;g&&g.width>0&&gt({width:g.width,height:g.height})});return r.observe(a),()=>r.disconnect()},[i?.canvas?.id]);function ce(a,{keepLogicDraft:r=!0}={}){return o.current=a,n(a),a?.scripts&&ve(p=>a.scripts.some(g=>g.id===p)?p:a.scripts[0]?.id||""),Me(p=>r&&p?.dirty?p:Be(a?.serverLogic)),a}let qe=d.useCallback(async()=>{try{l(""),ce(await P(t,"get"),{keepLogicDraft:!1})}catch(a){l(a?.message||String(a))}},[t]),we=d.useCallback(async()=>{try{let a=await P(t,"archives");ne(a?.archives||[])}catch{ne([])}},[t]);d.useEffect(()=>{qe(),we()},[qe,we]);function E(a,r=""){let p=async()=>{let g=o.current;if(!g)throw new Error("editor is not ready");try{if(r&&g.asset?.type!==r)throw new Error("\u5F53\u524D\u8D44\u4EA7\u5DF2\u5207\u6362\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u63A7\u4EF6\u540E\u4FEE\u6539\u7D22\u5F15");let V=await P(t,"patch",{op:{...a,expectedRevision:g.version}});return l(""),ce(V)}catch(V){throw l(V?.message||String(V)),/revision conflict/.test(String(V?.message||V))&&await qe(),V}};return c.current=c.current.then(p,p),c.current}async function ft(a,r,p){await E({op:"setControlGuid",id:a,guid:r},p),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 bt(){let p=["\u8BF7\u540C\u6B65\u5F53\u524D\u6A21\u62DF\u5668\u5DE5\u7A0B\u7684\u5BA2\u6237\u7AEF\u63A7\u4EF6\u7D22\u5F15\u5F15\u7528\uFF1A",...(o.current?.controlGuidChanges||[]).map(g=>`${g.controlAsset} / ${g.controlName}\uFF08${g.controlId}\uFF09\uFF1A${g.oldGuid} \u2192 ${g.newGuid}\uFF1B\u8BB0\u5F55 ${g.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(p),f("\u5DF2\u590D\u5236\u7D22\u5F15\u53D8\u66F4\u53CA\u811A\u672C\u540C\u6B65\u8981\u6C42\uFF0C\u53EF\u7C98\u8D34\u7ED9 AI\u3002")}catch{l("\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 ht(){let a=(o.current?.controlGuidChanges||[]).map(r=>r.id);try{await re(),await E({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 vt=(a,r)=>void E({op:"set",key:a,value:r}).catch(()=>{});async function yt(a,r){let p=o.current?.inspector?.id;if(p)try{let g=await E({op:"add",kind:"image",parentId:p,name:`${r}\u56FE\u7247`});await E({op:"set",id:p,key:a,value:g.selectedId}),f(`${r}\u5DF2\u521B\u5EFA\u5E76\u7ED1\u5B9A\uFF1B\u53EF\u5728\u63A7\u4EF6\u6811\u4E2D\u7EE7\u7EED\u7F16\u8F91\u56FE\u7247\u3002`)}catch{}}d.useEffect(()=>{let a=i?.scripts?.find(r=>r.id===Ie);ge(r=>r&&a&&r.id===a.id&&r.dirty?r:a?{id:a.id,path:a.path,source:a.source,controlId:a.controlId,controlAsset:a.controlAsset,dirty:!1}:null)},[i,Ie]);function qt(a){ge(r=>r&&{...r,...a,dirty:!0})}async function re(){let a=Te;!a||!a.dirty||(await E({op:"updateScript",id:a.id,path:a.path,source:a.source,controlId:a.controlId,controlAsset:a.controlAsset}),ge(r=>r&&r.id===a.id?{...r,dirty:!1}:r))}function We(){re().then(()=>f("Lua \u811A\u672C\u5DF2\u4FDD\u5B58\u5230\u5F53\u524D\u5B58\u6863")).catch(()=>{})}async function de({silent:a=!1}={}){let r=Ye;if(!r||!r.dirty)return;let p=at(r);if(p.length){let V=p[0];throw a||l(V),new Error(V)}let g=await E({op:"setServerLogic",logic:tt(r)});Me(Be(g.serverLogic)),f("\u670D\u52A1\u7AEF\u903B\u8F91\u5DF2\u4FDD\u5B58\u5230\u5F53\u524D\u5B58\u6863")}function wt(){de({silent:!0}).catch(()=>{})}function fe(a){We(),wt(),mt(a)}async function Je(a={}){let r=await E({op:"addScript",...a}),p=r.scripts?.[r.scripts.length-1];return p&&ve(p.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"),p}function kt(a){Te?.id===a&&ge(null),E({op:"removeScript",id:a}).then(()=>f("\u811A\u672C\u5DF2\u5220\u9664")).catch(()=>{})}function Nt(a){E({op:"updateScript",id:a,controlId:""}).then(()=>f("\u5DF2\u89E3\u9664\u6302\u8F7D\uFF0C\u811A\u672C\u4ECD\u4FDD\u7559\u5728\u5B58\u6863\u4E2D")).catch(()=>{})}function St(a){let r=o.current?.selectedId||"",p=o.current?.asset?.type||"";r&&(ge(g=>g&&g.id===a?{...g,controlId:r,controlAsset:p}:g),E({op:"updateScript",id:a,controlId:r,controlAsset:p}).then(()=>f("\u5DF2\u6302\u8F7D\u5230\u5F53\u524D\u63A7\u4EF6")).catch(()=>{}))}async function Xe(a){if(o.current?.asset?.type!==a)try{let r=await E({op:"selectAsset",assetType:a});Ee(""),ze(a==="client-control-template"?"template":"child"),f(`\u5DF2\u5207\u6362\u5230\u5B58\u6863\u5185\u7684${r.asset.label}`)}catch{}}function Ct(a,r){let p=o.current;if(!p)return;let g=p.asset?.type==="client-control-template"&&le==="template",V=g?{op:"addTemplate",kind:a,name:`${r}\u6A21\u677F`}:{op:"add",kind:a,parentId:ct(p.root,p.selectedId),name:r};E(V).then(()=>f(g?`\u5DF2\u65B0\u589E${r}\u6A21\u677F`:`\u5DF2\u6DFB\u52A0${r}\u5B50\u63A7\u4EF6`)).catch(()=>{})}async function ke(a,r=""){try{await c.current.catch(()=>{}),await re(),await de();let p=await P(t,"export",{format:a,assetType:r});if(te([...new Set([...p.warnings||[],...(p.files||[]).flatMap(g=>g.warnings||[])])]),Array.isArray(p?.files)&&p.files.length){for(let g of p.files)$(g);l(""),f(`\u5DF2\u5BFC\u51FA ${p.files.length} \u4E2A GIA \u6587\u4EF6\uFF08${p.files.map(g=>g.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}$(p),l(""),f(p.warnings?.length?`\u5DF2\u5BFC\u51FA ${p.filename}\uFF1B\u8BF7\u67E5\u770B\u4E0A\u65B9\u5BFC\u51FA\u8BF4\u660E\u3002`:`\u5DF2\u5BFC\u51FA ${p.filename}`)}catch(p){l(p?.message||String(p))}}async function $t(a){if(a)try{await c.current.catch(()=>{});let r=await P(t,"load-archive",{path:a});ce(r.snapshot,{keepLogicDraft:!1}),l(""),f(`\u5DF2\u4ECE\u5DE5\u4F5C\u533A\u62C9\u53D6 ${a}`),te([])}catch(r){l(r?.message||String(r))}}async function Pt(a){if(!a)return;let r=a.name.toLowerCase().endsWith(".gia")?"gia":a.name.toLowerCase().endsWith(".json")?"json":a.name.toLowerCase().endsWith(".lua")?"lua":"";if(!r){l("\u4EC5\u652F\u6301 .json\u3001.gia \u6216 .lua \u6587\u4EF6");return}try{await c.current.catch(()=>{});let p=await P(t,"import",{format:r,filename:a.name,data:await J(a)});ce(p.snapshot,{keepLogicDraft:!1}),l(""),f([`\u5DF2\u5BFC\u5165 ${a.name}`,...p.warnings||[]].join(`
28
- `)),te([])}catch(p){l(p?.message||String(p))}finally{C.current&&(C.current.value="")}}function At(){h.open(async()=>{await c.current.catch(()=>{}),await re(),await de(),await c.current,l("")})}async function Lt(){if(!(H||!q?.trim())){k(!0);try{await re(),await de(),await c.current.catch(()=>{});let a=o.current,r=await P(t,"save",{path:q.trim(),expectedRevision:a.version});ce(await P(t,"get")),f(`\u5DF2\u4FDD\u5B58\u5230 ${r.path}`),l(""),z(null),we()}catch(a){l(a?.message||String(a))}finally{k(!1)}}}if(d.useEffect(()=>{i?.inspector?.kind==="server-container"&&Pe("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 oe=i.canvas.width,pe=i.canvas.height,je=ye.width>0&&ye.height>0?Math.min((ye.width-44)/oe,(ye.height-54)/pe):NaN,Et=Number.isFinite(je)&&je>0?Math.min(2,Math.round(je*1e3)/1e3):.5,zt=Ae==="fit"?Et:Number(Ae)||.5,Ke=Ne(oe,pe),It=(i.canvas.presets||[]).filter(a=>a.platform===i.canvas.platform);function Tt(a){if(!i||i.canvas.platform===a)return;let r=(i.canvas.presets||[]).filter(g=>g.platform===a);if(!r.length)return;let p=r.find(g=>me(g)===Ke)||r[0];E({op:"setCanvas",canvasId:p.id}).then(()=>f(`\u5DF2\u5207\u6362\u5230${p.label}`)).catch(()=>{})}let T=i.asset?.type==="client-control-template",Oe=!!(i.inspector&&i.inspector.kind!=="server-container"),De=new Set;for(let a of i.tree||[])(Le[a.id]||(a.ancestorIds||[]).some(r=>Le[r]))&&De.add(a.id);let Mt=(i.boxes||[]).filter(a=>a.kind!=="server-container"&&a.visible&&!De.has(a.id));function jt(a,r){a.stopPropagation(),xt(p=>{let g={...p};return g[r]?delete g[r]:g[r]=!0,g})}let Ze=i.tree.filter(a=>!he.trim()||`${a.name} ${a.label}`.toLowerCase().includes(he.trim().toLowerCase())),A=i.tree.find(a=>a.id===i.selectedId),Ot=T&&A?i.tree.filter(a=>a.id!==A.id&&!(a.ancestorIds||[]).includes(A.id)):[],Dt=A?.parentId||i.root.id;return e("div",{className:"qxsim","data-theme":s,"data-qxsim-session-id":t},h.overlay,Y==="script"&&x?e("div",{className:"qxsim-status error",role:"alert"},x):null,q!==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(),Lt()}},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:q,disabled:H,onChange:a=>z(a.target.value)})),x?e("div",{role:"alert"},x):null,e("footer",null,e("button",{className:"qxsim-action",type:"button",disabled:H,onClick:()=>z(null)},"\u53D6\u6D88"),e("button",{className:"qxsim-action primary",type:"submit",disabled:H||!q.trim()},H?"\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"},Y==="ui"?e(d.Fragment,null,e("div",{className:"qxsim-device-switch",role:"group","aria-label":"\u76EE\u6807\u8BBE\u5907"},S.map(a=>e("button",{key:a.key,className:i.canvas.platform===a.key?"active":"",title:a.title,onClick:()=>Tt(a.key)},a.label))),e("select",{className:"qxsim-control ratio","aria-label":"\u5C4F\u5E55\u6BD4\u4F8B",value:i.canvasId,onChange:a=>void E({op:"setCanvas",canvasId:a.target.value}).catch(()=>{})},It.map(a=>e("option",{key:a.id,value:a.id},`${me(a)} \xB7 ${a.width}\xD7${a.height}`))),e("select",{className:"qxsim-control zoom","aria-label":"\u753B\u5E03\u7F29\u653E",value:Ae,onChange:a=>ut(a.target.value)},[["fit","\u9002\u5E94"],["0.25","25%"],["0.5","50%"],["0.75","75%"],["1","100%"]].map(([a,r])=>e("option",{key:a,value:a},r)))):e("span",{className:"qxsim-muted"},Y==="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"},L?e("button",{className:"qxsim-action",title:"\u4FDD\u5B58\u5B8C\u6574\u5B58\u6863\u5230\u5DE5\u4F5C\u533A",onClick:()=>{l(""),z(o.current?.storage?.path||"qxqy-simulator.save.json")}},"\u4FDD\u5B58\u5B58\u6863"):null,e("div",{className:"qxsim-io"},e("input",{ref:C,hidden:!0,type:"file",accept:".json,.gia,.lua,application/json,application/octet-stream,text/plain",onChange:a=>void Pt(a.target.files?.[0])}),e("select",{className:"qxsim-control zoom","aria-label":"\u4ECE\u5DE5\u4F5C\u533A\u62C9\u53D6\u5B58\u6863",defaultValue:"",onFocus:()=>void we(),onChange:a=>{let r=a.target.value;a.target.value="",r&&$t(r)}},e("option",{value:"",disabled:!0},i.workspace?.bound?"\u2913 \u5DE5\u4F5C\u533A\u5B58\u6863":"\u5DE5\u4F5C\u533A\u672A\u7ED1\u5B9A"),...v.length?v.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:()=>C.current?.click()},"\u21E7 \u5BFC\u5165"),e("select",{className:"qxsim-control zoom","aria-label":"\u5BFC\u51FA\u683C\u5F0F",defaultValue:"",onChange:a=>{let[r,p=""]=a.target.value.split("|");a.target.value="",r&&ke(r,p)}},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:h.opening,onClick:At},h.opening?"\u6B63\u5728\u51C6\u5907\u2026":"\u25B7 \u8BD5\u73A9 \u2197"),e("button",{className:"qxsim-iconbtn",title:"\u91CD\u65B0\u8F7D\u5165",onClick:qe},"\u21BB"))),e("nav",{className:"qxsim-editor-nav","aria-label":"\u7F16\u8F91\u9875\u9762"},e("button",{className:Y==="ui"?"active":"",onClick:()=>fe("ui")},"UI \u7F16\u8F91"),e("button",{className:Y==="script"?"active":"",onClick:()=>fe("script")},"Lua \u811A\u672C"),e("button",{className:Y==="logic"?"active":"",onClick:()=>fe("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")),Y==="script"?e(I,{snap:i,patch:E,request:(a,r)=>P(t,a,r),refresh:async()=>ce(await P(t,"get")),prepare:async()=>(await c.current,await re(),await de(),o.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:bt},"\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:ht},"\u5DF2\u5B8C\u6210\u811A\u672C\u540C\u6B65"))):null,N.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${N.length} \u9879\uFF0C\u8BF7\u6838\u5BF9\u5BFC\u5165\u540E\u7684\u6548\u679C\uFF09`),e("button",{className:"qxsim-action",onClick:()=>te([])},"\u5173\u95ED\u5BFC\u51FA\u8BF4\u660E"),e("ul",null,N.map((a,r)=>e("li",{key:r},a)))):null,Y==="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:T?"":"active",title:"\u7F16\u8F91\u5B58\u6863\u5185\u7684\u670D\u52A1\u7AEF UI \u63A7\u4EF6",onClick:()=>void Xe("server-control-template")},"UI\u63A7\u4EF6-\u670D\u52A1\u7AEF"),e("button",{className:T?"active":"",title:"\u7F16\u8F91\u5B58\u6863\u5185\u7684\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F",onClick:()=>void Xe("client-control-template")},"UI\u63A7\u4EF6-\u5BA2\u6237\u7AEF")),e("div",{className:"qxsim-pane-head"},e("div",{className:"qxsim-pane-title"},T?"\u6A21\u677F\u4E0E\u5B50\u63A7\u4EF6":"\u63A7\u4EF6\u6811"),e("span",{className:"qxsim-muted"},T?`${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:he,placeholder:T?"\u641C\u7D22\u6A21\u677F\u6216\u63A7\u4EF6":"\u641C\u7D22\u63A7\u4EF6",onChange:a=>Ee(a.target.value)}),he?e("button",{onClick:()=>Ee("")},"\xD7"):e("span",null,"\u2301")),e("div",{className:"qxsim-tree-scroll"},Ze.length?Ze.map(a=>{let r=M[a.kind]||["\u25C7",a.label],p=De.has(a.id),g=!!Le[a.id];return e("div",{key:a.id,className:`qxsim-row${T&&a.depth===0?" template-root":""}${a.id===i.selectedId?" active":""}${p?" canvas-hidden":""}`,style:{paddingLeft:8+a.depth*18,"--depth":a.depth},title:`${r[1]} \xB7 ${a.name} \xB7 GUID ${a.guid??a.id}`,onClick:()=>void E({op:"select",id:a.id}).catch(()=>{})},e("span",{className:"qxsim-chevron"},a.childCount?"\u25BC":""),e("span",{className:"qxsim-kind"},r[0]),e("span",{className:"qxsim-row-label"},a.name),e("span",{className:"qxsim-row-end"},T&&a.depth===0?e(d.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${g?" off":""}`,type:"button",title:g?"\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":!g,onClick:V=>jt(V,a.id)},g?"\u25CC":"\u25C9")))}):e("div",{className:"qxsim-empty"},"\u6CA1\u6709\u5339\u914D\u7684\u63A7\u4EF6")),e("div",{className:"qxsim-tree-foot"},T&&A?e("div",{className:"qxsim-hierarchy"},e("div",{className:"qxsim-hierarchy-head"},e("strong",null,"\u5C42\u7EA7\u4E0E\u6A21\u677F\u8FB9\u754C"),e("span",null,A.name)),e("div",{className:"qxsim-parent-row"},e("select",{"aria-label":"\u7236\u7EA7\u63A7\u4EF6",value:Dt,onChange:a=>void E({op:"reparent",id:A.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"),Ot.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:A.siblingIndex<=0,onClick:()=>void E({op:"moveSibling",id:A.id,direction:"up"}).catch(()=>{})},"\u2191"),e("button",{title:"\u5728\u540C\u7EA7\u4E2D\u4E0B\u79FB",disabled:A.siblingIndex>=A.siblingCount-1,onClick:()=>void E({op:"moveSibling",id:A.id,direction:"down"}).catch(()=>{})},"\u2193")),e("div",{className:"qxsim-hierarchy-note"},A.depth===0?"\u8BE5\u8282\u70B9\u4F1A\u5199\u5165\u72EC\u7ACB UIControlTemplate\uFF0C\u53EF\u76F4\u63A5\u4F5C\u4E3A prefabId\u3002":`\u5F53\u524D\u4E3A\u7B2C ${A.depth} \u5C42\u5B50\u63A7\u4EF6\uFF0C\u4E0D\u4F1A\u5355\u72EC\u6210\u4E3A prefabId\u3002`)):null,e("div",{className:"qxsim-palette-head"},e("span",{title:T&&le==="template"?"\u65B0\u589E\u72EC\u7ACB\u53EF\u5B9E\u4F8B\u5316\u6A21\u677F":`\u6DFB\u52A0\u5230${A?A.name:"\u5F53\u524D\u63A7\u4EF6"}`},T&&le==="template"?"\u65B0\u589E\u9876\u5C42\u6A21\u677F":`\u6DFB\u52A0\u5230${A?`\u201C${A.name}\u201D`:"\u5F53\u524D\u63A7\u4EF6"}`),T?e("span",{className:"qxsim-add-mode"},e("button",{className:le==="template"?"active":"",onClick:()=>ze("template")},"\u9876\u5C42"),e("button",{className:le==="child"?"active":"",onClick:()=>ze("child")},"\u5B50\u63A7\u4EF6")):null),e("div",{className:"qxsim-add"},ee.filter(([a])=>T||a!=="container").map(([a,r])=>e("button",{key:a,title:`${T&&le==="template"?"\u65B0\u589E":"\u6DFB\u52A0"}${r}`,onClick:()=>Ct(a,r)},`\uFF0B ${r}`))))),e("main",{className:"qxsim-center"},e("div",{className:"qxsim-workspace",ref:Ve},e("div",{className:"qxsim-stage-shell",style:{width:`${Math.max(40,Math.round(oe*zt))}px`}},e("div",{className:"qxsim-stage-label"},e("b",null,T?"Lua \u6A21\u677F\u9884\u89C8":"\u754C\u9762\u63A7\u4EF6\u7EC4"),e("span",{className:"qxsim-platform-tag"},i.canvas.platform),e("span",null,`${Ke} \xB7 ${oe}\xD7${pe} \xB7 \u5DE6\u4E0B\u539F\u70B9`)),e("div",{className:"qxsim-stage",style:{width:"100%",aspectRatio:`${oe} / ${pe}`},onClick:a=>{let r=a.currentTarget.getBoundingClientRect();E({op:"pick",x:(a.clientX-r.left)*oe/r.width,y:(r.bottom-a.clientY)*pe/r.height}).catch(()=>{})}},Mt.map(a=>dt(a,i,oe,pe))))),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,w||(A?`\u5F53\u524D\uFF1A${A.name}`:"")),e("span",{className:"spacer"}),e("span",null,T?"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(d.Fragment,null,e("div",{className:"qxsim-inspector-head"},e("div",{className:"qxsim-inspector-line"},e("span",{className:"qxsim-kind"},(M[i.inspector.kind]||["\u25C7"])[0]),e("strong",null,i.inspector.label),T&&A?.depth===0?e("span",{className:"qxsim-template-tag"},"\u53EF\u5B9E\u4F8B\u5316"):null),e("div",{className:"qxsim-node-id"},T&&A?.depth===0?"\u6A21\u677F\u7D22\u5F15 ":"\u63A7\u4EF6 GUID ",e("code",null,i.inspector.guid??i.inspector.id)," \xB7 ",A?.name||"\u8282\u70B9"),i.inspector.kind!=="server-container"?e(rt,{key:`${i.asset.type}:${i.inspector.id}`,inspector:i.inspector,onSave:(a,r)=>ft(a,r,i.asset.type)}):null),e("div",{className:"qxsim-tabs",style:Oe?void 0:{gridTemplateColumns:"1fr"}},e("button",{className:$e==="base"?"active":"",onClick:()=>Pe("base")},"\u57FA\u7840\u5C5E\u6027"),Oe?e("button",{className:$e==="script"?"active":"",onClick:()=>Pe("script")},"\u811A\u672C"):null),e("div",{className:"qxsim-inspector-scroll"},Oe&&$e==="script"?e(ot,{snap:i,addScriptMounted:a=>void Je({controlId:a,controlAsset:i.asset?.type}).then(()=>fe("script")),mountScriptTo:St,unmountScript:Nt,openScript:a=>{ve(a),fe("script")}}):e(ie,{inspector:i.inspector,commit:vt,createStateChild:yt})),e("div",{className:"qxsim-tree-foot"},e("button",{className:"qxsim-action danger",style:{width:"100%"},onClick:()=>void E({op:"remove"}).catch(()=>{})},T&&A?.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"))):Y==="script"?e(m,{snap:i,selectedScriptId:Ie,selectScript:a=>{We(),ve(a)},draft:Te,updateDraft:qt,saveScript:()=>void re().then(()=>f("Lua \u811A\u672C\u5DF2\u4FDD\u5B58\u5230\u5F53\u524D\u5B58\u6863")).catch(()=>{}),addScript:()=>void Je(),removeScript:kt,exportLua:a=>void ke("lua",a),exportScripts:()=>void ke("scripts"),exportScriptsGia:()=>void ke("scripts-gia"),notice:w}):e(st,{snap:i,draft:Ye,setDraft:Me,saveLogic:()=>void de().catch(()=>{}),notice:w,error:x}))}return{SimulatorView:pt,ensureStyle:W,removeStyle:()=>document.getElementById(B)?.remove()}}window.__ModuleLoader__.load({id:"dsh-plugin-beyond-simulator",factory:d=>{let u={},ae=d("react"),L=et(ae,{async api(e,I,U){let B=await fetch("/qxqy-simulator/api/"+I,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({sessionId:e,...U||{}}),...I==="play"?{signal:AbortSignal.timeout(15e3)}:{}}),F=await B.json();if(!B.ok||!F.ok)throw new Error(F.error||"Request failed");return F.value},playUrl:e=>"/qxqy-simulator/play#"+encodeURIComponent(e)});return u.inject=["slots"],u.apply=e=>{L.ensureStyle(),e.effect(()=>L.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"},L.SimulatorView))},u}});})();
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}});})();