beyond-simulator-web 0.1.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -30,7 +30,8 @@ Error generating stack: `+a.message+`
30
30
  @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}}
31
31
  @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}}
32
32
  @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}}
33
- `,c={"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"]},f=[["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"]],p={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 x(){if(document.getElementById(i))return;let s=document.createElement("style");s.id=i,s.textContent=u,document.head.appendChild(s)}function S(){let s=document.documentElement,q=document.body,h=[s.dataset.theme,s.className,s.getAttribute("style"),q?.dataset?.theme,q?.className,q?.getAttribute("style"),getComputedStyle(s).colorScheme].filter(Boolean).join(" ").toLowerCase();return h.includes("dark")?"dark":h.includes("light")?"light":window.matchMedia?.("(prefers-color-scheme: dark)").matches?"dark":"light"}function g(){let[s,q]=t.useState(S);return t.useEffect(()=>{let h=()=>q(S()),b=new MutationObserver(h);b.observe(document.documentElement,{attributes:!0,attributeFilter:["class","style","data-theme"]}),document.body&&b.observe(document.body,{attributes:!0,attributeFilter:["class","style","data-theme"]});let N=window.matchMedia?.("(prefers-color-scheme: dark)");return N?.addEventListener?.("change",h),()=>{b.disconnect(),N?.removeEventListener?.("change",h)}},[]),s}function v(s,q){let h=Number(s??q)>>>0;return`rgba(${h>>>16&255},${h>>>8&255},${h&255},${(h>>>24&255)/255})`}function U(s){return`#${(Number(s)>>>0).toString(16).padStart(8,"0").toUpperCase()}`}function C(s,q){return s==="circle"?{borderRadius:"50%",background:q}:s==="ring"?{borderRadius:"50%",border:`7px solid ${q}`,background:"transparent"}:s==="triangle"?{background:q,clipPath:"polygon(50% 0,100% 100%,0 100%)"}:s==="fourstar"?{background:q,clipPath:"polygon(50% 0,62% 38%,100% 50%,62% 62%,50% 100%,38% 62%,0 50%,38% 38%)"}:s==="fivestar"?{background:q,clipPath:"polygon(50% 0,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%)"}:s==="missing"?{background:"#4822285c",border:"1px dashed #ff7481"}:{background:q}}let j=l;function d(s){let q;try{q=atob(s.data)}catch{throw new Error("\u5BFC\u51FA\u5185\u5BB9\u89E3\u7801\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u6216\u5237\u65B0\u9875\u9762")}let h=new Uint8Array(q.length);for(let z=0;z<q.length;z+=1)h[z]=q.charCodeAt(z);let b=URL.createObjectURL(new Blob([h],{type:s.mimeType||"application/octet-stream"})),N=document.createElement("a");N.href=b,N.download=s.filename||"qxqy-export",N.rel="noopener",N.style.display="none",document.body.appendChild(N),N.click(),N.remove(),setTimeout(()=>URL.revokeObjectURL(b),1e3)}async function o(s){let q=new Uint8Array(await s.arrayBuffer()),h="",b=32768;for(let N=0;N<q.length;N+=b)h+=String.fromCharCode(...q.subarray(N,N+b));return btoa(h)}let m=s=>typeof s=="object"?s.value:s,y=s=>typeof s=="object"?s.label:s,O=[{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 G(s){return String(s.id||"").split("-").slice(1).join(":")}function D(s,q){let h=(N,z)=>z?h(z,N%z):N,b=h(Math.round(s),Math.round(q))||1;return`${Math.round(s)/b}:${Math.round(q)/b}`}function M({field:s,commit:q,axis:h}){let b=s.type==="color"?U(s.value):s.value==null?"":String(s.value),[N,z]=t.useState(b);if(t.useEffect(()=>z(s.type==="color"?U(s.value):s.value==null?"":String(s.value)),[s.value,s.type]),s.type==="note")return n("div",{className:"qxsim-note"},s.value||s.label);if(s.readonly&&(s.evidence==="N"||s.evidence==="U"))return n("div",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},s.label),n("div",{className:"qxsim-unsupported"},s.value==null?"\u5C1A\u65E0\u53EF\u7F16\u8F91\u503C":String(s.value)));if(s.type==="bool")return n("div",{className:"qxsim-switch-row"},n("span",null,s.label),n("label",{className:"qxsim-switch"},n("input",{type:"checkbox",checked:!!s.value,disabled:!!s.readonly,onChange:E=>q(s.key,E.target.checked)}),n("span",{className:"qxsim-switch-track"})));if(s.type==="enum"){let E=[...s.options||[]],w=String(s.value??"");return E.some(nt=>String(m(nt))===w)||E.unshift({value:s.value??"",label:`\u672A\u8BC6\u522B\u9009\u9879 ${s.unknownValue??(w||"\u7A7A")}\uFF08\u4FDD\u7559\u539F\u503C\uFF09`}),n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},s.label),n("select",{value:w,disabled:!!s.readonly,onChange:nt=>q(s.key,nt.target.value)},E.map(nt=>n("option",{key:String(m(nt)),value:m(nt)},y(nt)))))}if(s.type==="percent"){let E=Math.round(Number(s.value||0)*100);return n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},s.label),n("span",{className:"qxsim-percent"},n("input",{type:"range",min:0,max:100,value:E,onInput:w=>q(s.key,Number(w.target.value)/100)}),n("output",null,`${E}%`)))}if(s.type==="color"){let E=/^#[0-9a-f]{8}$/i.test(N)?N:U(s.value);return n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},s.label,n("small",null,"ARGB")),n("span",{className:"qxsim-color-row"},n("span",{className:"qxsim-color-swatch",title:"\u6253\u5F00\u53D6\u8272\u5668"},n("input",{type:"color",value:`#${E.slice(3)}`,onInput:w=>{let nt=`#${E.slice(1,3)}${w.target.value.slice(1).toUpperCase()}`;z(nt),q(s.key,nt)}})),n("input",{type:"text",value:N,spellCheck:!1,"aria-label":`${s.label} ARGB`,onChange:w=>z(w.target.value),onBlur:()=>q(s.key,N),onKeyDown:w=>{w.key==="Enter"&&w.currentTarget.blur(),w.key==="Escape"&&z(U(s.value))}})))}let Y={value:N,disabled:!!s.readonly,readOnly:!!s.readonly,onChange:E=>z(E.target.value),onBlur:()=>{s.readonly||q(s.key,N)},onKeyDown:E=>{E.key==="Enter"&&s.type!=="text"&&E.currentTarget.blur(),E.key==="Escape"&&z(s.value==null?"":String(s.value))}};return n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},h?n("b",{className:`qxsim-axis ${h.toLowerCase()}`},h):null,s.label),s.type==="text"?n("textarea",{...Y,rows:4}):n("input",{...Y,type:s.type==="number"?"number":"text",step:s.type==="number"?"any":void 0}))}function I({title:s,open:q=!0,children:h}){return n("details",{className:"qxsim-section",open:q},n("summary",null,s),n("div",{className:"qxsim-section-body"},h))}function k(s){let q={};for(let h of s||[])q[h.key]=h;return q}function Rt({label:s,x:q,y:h,xAxis:b="X",yAxis:N="Y",commit:z}){return n("div",{className:"qxsim-pair"},n("div",{className:"qxsim-pair-name"},s),n(M,{field:q,axis:b,commit:z}),n(M,{field:h,axis:N,commit:z}))}function Ou({field:s,commit:q,createStateChild:h}){return n("div",{className:"qxsim-state-field"},n("div",{className:"qxsim-state-label"},s.label),n("div",{className:"qxsim-state-ref"},n("button",{title:`\u65B0\u5EFA\u5E76\u7ED1\u5B9A${s.label}\u56FE\u7247`,onClick:()=>h(s.key,s.label)},"+"),n("select",{value:String(s.value??""),"aria-label":s.label,onChange:b=>q(s.key,b.target.value)},(s.options||[]).map(b=>n("option",{key:String(m(b)),value:m(b)},y(b))))))}function E0({inspector:s,commit:q,createStateChild:h}){let b=k(s.fields),N=w=>w?.type==="node"?n(Ou,{key:w.key,field:w,commit:q,createStateChild:h}):w?n(M,{key:w.key,field:w,commit:q}):null,z=(p[s.kind]||[]).map(w=>b[w]).filter(Boolean).map(N),Y=null;if(s.kind==="image"){let w=b.fillType?.value==="Horizontal"?b.fillHorizontalType:b.fillType?.value==="Vertical"?b.fillVerticalType:b.fillType?.value==="Radial90"?b.fillRadial90Type:b.fillRadialType,nt=[N(b.enableMask),N(b.enableSoftEdge),b.enableSoftEdge?.value?n("div",{className:"qxsim-subfields",key:"soft-fields"},N(b.softEdgeMode),n(Rt,{label:"\u7FBD\u5316\u5BBD\u5EA6",x:b.softEdgeWidthX,y:b.softEdgeWidthY,commit:q}),n(Rt,{label:"\u7FBD\u5316\u8303\u56F4",x:b.horizontalSoftRange,y:b.verticalSoftRange,commit:q})):null,N(b.enableFill),b.enableFill?.value?n("div",{className:"qxsim-subfields",key:"fill-fields"},N(b.fillType),N(w),N(b.fillAmount)):null,N(b.reverseMaskArea)];Y=n(t.Fragment,null,n(I,{title:"\u56FE\u7247\u8BBE\u7F6E"},N(b.imageSource),N(b.imageId),N(b.imageColor)),n(I,{title:"\u906E\u7F69\u8BBE\u7F6E"},nt))}let E=s.kind==="textbox"?"\u6587\u672C\u6846\u8BBE\u7F6E":s.kind==="button"?"\u6309\u94AE\u8BBE\u7F6E":`${s.label}\u8BBE\u7F6E`;return n(t.Fragment,null,n(I,{title:"\u8282\u70B9\u4FE1\u606F",open:!1},n(M,{field:b.name,commit:q})),n(I,{title:"\u53D8\u6362"},b.posX?n(Rt,{label:"\u4F4D\u7F6E",x:b.posX,y:b.posY,commit:q}):null,b.width?n(Rt,{label:"\u5927\u5C0F",x:b.width,y:b.height,xAxis:"W",yAxis:"H",commit:q}):null,b.rotationZ?n(M,{field:b.rotationZ,commit:q}):null,b.syncAllDevices?n(M,{field:b.syncAllDevices,commit:q}):null,b.anchorType?n(M,{field:b.anchorType,commit:q}):null,b.anchorMinX?n(Rt,{label:"Min",x:b.anchorMinX,y:b.anchorMinY,commit:q}):null,b.anchorMaxX?n(Rt,{label:"Max",x:b.anchorMaxX,y:b.anchorMaxY,commit:q}):null,b.pivotX?n(Rt,{label:"\u4E2D\u5FC3",x:b.pivotX,y:b.pivotY,commit:q}):null),n(I,{title:"\u521B\u5EFA\u8BBE\u7F6E"},b.active?n(M,{field:b.active,commit:q}):null,b.visible?n(M,{field:b.visible,commit:q}):null),Y||(z.length?n(I,{title:E},z):null),b.canControllerFocus?n(I,{title:"\u624B\u67C4\u5BFC\u822A",open:!1},n(M,{field:b.canControllerFocus,commit:q})):null,b.incomplete?n(I,{title:"\u5B9E\u73B0\u72B6\u6001"},n(M,{field:b.incomplete,commit:q})):null)}function z0({snap:s,selectedScriptId:q,selectScript:h,draft:b,updateDraft:N,saveScript:z,addScript:Y,removeScript:E,exportLua:w,exportScripts:nt,exportScriptsGia:Dt,notice:jl}){let J=s.scripts||[],R=J.find(L=>L.id===q)||null,P=s.mountTargets||[],ut=P.filter(L=>L.assetType==="server-control-template"),$=P.filter(L=>L.assetType==="client-control-template"),kt=L=>{let Al=P.find(Ll=>Ll.id===L);return Al?`${Al.assetLabel} \xB7 ${Al.name}`:""};return n("div",{className:"qxsim-script-page"},n("aside",{className:"qxsim-script-assets"},n("h3",null,`\u5B58\u6863\u5185 Lua \u811A\u672C\uFF08${J.length}\uFF09`),n("button",{className:"qxsim-action",style:{width:"100%",marginBottom:8},onClick:Y},"\uFF0B \u65B0\u5EFA\u811A\u672C"),J.length?J.map(L=>n("div",{key:L.id,className:"qxsim-script-list-row"},n("button",{className:`qxsim-script-asset${L.id===q?" active":""}`,onClick:()=>h(L.id)},n("strong",null,L.path||"(\u672A\u547D\u540D\u811A\u672C)"),n("small",null,L.mounted?`\u6302\u8F7D\uFF1A${L.assetLabel} \xB7 ${L.controlName}`:"\u672A\u6302\u8F7D\uFF08\u4EC5\u53EF\u88AB require\uFF09")),n("button",{className:"qxsim-iconbtn",title:"\u4E0B\u8F7D\u8BE5\u811A\u672C .lua",onClick:()=>w(L.id)},"\u21E9"),n("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u8BE5\u811A\u672C",onClick:()=>E(L.id)},"\u2715"))):n("div",{className:"qxsim-empty"},"\u8FD8\u6CA1\u6709\u811A\u672C\uFF0C\u70B9\u51FB\u201C\u65B0\u5EFA\u811A\u672C\u201D\u5F00\u59CB")),n("main",{className:"qxsim-script-editor"},R&&b?n(t.Fragment,null,n("div",{className:"qxsim-script-title"},n("div",null,n("h2",null,b.path||"(\u672A\u547D\u540D\u811A\u672C)"),n("span",null,`\u5C5E\u4E8E\u5B58\u6863\u201C${s.save?.name||"\u672A\u547D\u540D\u5B58\u6863"}\u201D \xB7 Lua \u811A\u672C\u662F\u5B58\u6863\u5185\u72EC\u7ACB\u8D44\u4EA7`)),n("span",null,`\u811A\u672C ${R.id}`)),n("div",{className:"qxsim-script-fields"},n("label",null,"\u811A\u672C\u8DEF\u5F84\uFF08\u5DE5\u4F5C\u533A\u76F8\u5BF9\u8DEF\u5F84\uFF09",n("input",{type:"text",value:b.path,placeholder:"lua/example.lua",onChange:L=>N({path:L.target.value})})),n("label",null,"\u6302\u8F7D\u76EE\u6807\uFF08\u5BA2\u6237\u7AEF\u63A7\u4EF6 / \u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\uFF09",n("select",{value:b.controlId?`${b.controlAsset||"server-control-template"}|${b.controlId}`:"",onChange:L=>{let[Al,Ll]=L.target.value.split("|");N(Ll?{controlId:Ll,controlAsset:Al}:{controlId:"",controlAsset:""})}},n("option",{value:""},"\u672A\u6302\u8F7D\uFF08\u4E0D\u751F\u6548\uFF0C\u4EC5\u53EF\u88AB require\uFF09"),n("optgroup",{label:"\u670D\u52A1\u5668\u63A7\u4EF6\u6A21\u677F \xB7 \u5BA2\u6237\u7AEF\u63A7\u4EF6\u5BB9\u5668\u5185"},ut.map(L=>n("option",{key:L.id,value:`${L.assetType}|${L.id}`},`${L.name} \xB7 ${L.id}`))),$.length?n("optgroup",{label:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F"},$.map(L=>n("option",{key:L.id,value:`${L.assetType}|${L.id}`},`${L.name} \xB7 ${L.id}`))):null))),n("label",null,"Lua \u6E90\u7801",n("textarea",{value:b.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:L=>N({source:L.target.value})})),n("div",{className:"qxsim-script-footer"},n("span",null,b.dirty?"\u6709\u672A\u4FDD\u5B58\u7684\u4FEE\u6539":jl||(R.mounted?`\u5DF2\u6302\u8F7D\uFF1A${kt(R.controlId)}`:"\u5F53\u524D\u672A\u6302\u8F7D\uFF0C\u8BD5\u73A9\u65F6\u4E0D\u4F1A\u81EA\u52A8\u8FD0\u884C")),n("span",{className:"spacer"}),n("button",{className:"qxsim-action",onClick:nt},"\u21E9 \u811A\u672C\u5305 JSON"),n("button",{className:"qxsim-action",onClick:Dt},"\u21E9 \u811A\u672C\u5305 GIA"),n("button",{className:"qxsim-action primary",disabled:!b.dirty,onClick:z},"\u4FDD\u5B58\u811A\u672C"))):n("div",{className:"qxsim-empty"},"\u8BF7\u65B0\u5EFA\u6216\u9009\u62E9\u4E00\u4E2A\u811A\u672C")))}function Ts(s){if(s===void 0)return"null";try{return JSON.stringify(s)}catch{return String(s)}}function As(s){let q=String(s??"").trim();if(!q)return null;try{return JSON.parse(q)}catch{return q}}function Ns(s){return!!(s&&typeof s=="object"&&!Array.isArray(s)&&Object.prototype.hasOwnProperty.call(s,"fromSignalParam"))}function Es(s){return{version:1,dirty:!1,rules:(Array.isArray(s?.rules)?s.rules:[]).map((h,b)=>({id:String(h.id||`signal-${b+1}`),signalName:String(h.signalName||""),actions:Array.isArray(h.actions)&&h.actions.length?h.actions.map(N=>D0(N)):[Re("setCustomVariable")]}))}}let zs=["PlayerSelf","AllPlayers","Player1","Player2","Player3","Player4","Player5","Player6","Player7","Player8"],Os=["PlayerSelf","Level","Player1","Player2","Player3","Player4","Player5","Player6","Player7","Player8"],Ms={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 Mu(s){return Os.includes(s)&&s!=="AllPlayers"?s:s==="Level"?"Level":"PlayerSelf"}function Du(s){return zs.includes(s)?s:"PlayerSelf"}function Re(s){return s==="sendClientScriptSignal"?{kind:"sendClientScriptSignal",target:"PlayerSelf",signalName:"",params:[]}:{kind:"setCustomVariable",entityType:"PlayerSelf",name:"",value:0}}function O0(s){return{version:1,rules:(s?.rules||[]).map(q=>({id:String(q.id||""),signalName:String(q.signalName||"").trim(),actions:(q.actions||[]).map(h=>h?.kind==="sendClientScriptSignal"?{kind:"sendClientScriptSignal",target:Du(h.target),signalName:String(h.signalName||"").trim(),params:Array.isArray(h.params)?h.params:[]}:{kind:"setCustomVariable",entityType:Mu(h?.entityType),name:String(h?.name||"").trim(),value:h&&Object.prototype.hasOwnProperty.call(h,"value")?h.value:0})}))}}function M0(s){let q=[];for(let[h,b]of(s?.rules||[]).entries()){String(b.signalName||"").trim()||q.push(`\u89C4\u5219 ${h+1} \u9700\u8981\u76D1\u542C\u4FE1\u53F7\u540D`);let N=b.actions||[];N.length||q.push(`\u89C4\u5219 ${h+1} \u81F3\u5C11\u9700\u8981\u4E00\u4E2A\u52A8\u4F5C`);for(let[z,Y]of N.entries())Y?.kind==="sendClientScriptSignal"?String(Y.signalName||"").trim()||q.push(`\u89C4\u5219 ${h+1} \u52A8\u4F5C ${z+1} \u9700\u8981\u5BA2\u6237\u7AEF\u4FE1\u53F7\u540D`):String(Y?.name||"").trim()||q.push(`\u89C4\u5219 ${h+1} \u52A8\u4F5C ${z+1} \u9700\u8981\u53D8\u91CF\u540D`)}return q}function D0(s){if(s?.kind==="sendClientScriptSignal")return{kind:"sendClientScriptSignal",target:Du(s.target),signalName:String(s.signalName||""),params:Array.isArray(s.params)?s.params.map(h=>{try{return JSON.parse(JSON.stringify(h))}catch{return h}}):[]};let q=0;if(s&&Object.prototype.hasOwnProperty.call(s,"value"))try{q=JSON.parse(JSON.stringify(s.value))}catch{q=s.value}return{kind:"setCustomVariable",entityType:Mu(s?.entityType),name:String(s?.name||""),value:q}}function Ds({label:s,value:q,onChange:h}){let b=Ns(q),[N,z]=t.useState(()=>b?"":Ts(q));return t.useEffect(()=>{Ns(q)||z(Ts(q))},[q]),n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},s),n("select",{value:b?"param":"literal","aria-label":`${s}\u6765\u6E90`,onChange:Y=>{Y.target.value==="param"?h({fromSignalParam:Number(q?.fromSignalParam)||0}):h(As(N||"0"))}},n("option",{value:"literal"},"\u5B57\u9762\u91CF\uFF08JSON\uFF09"),n("option",{value:"param"},"\u5F15\u7528\u76D1\u542C\u4FE1\u53F7\u53C2\u6570")),b?n("input",{type:"number",min:0,step:1,value:Number(q.fromSignalParam)||0,"aria-label":`${s}\u53C2\u6570\u5E8F\u53F7`,onChange:Y=>h({fromSignalParam:Math.max(0,Math.trunc(Number(Y.target.value)||0))})}):n("textarea",{className:"qxsim-logic-json",value:N,spellCheck:!1,"aria-label":`${s}\u5B57\u9762\u91CF`,onBlur:()=>h(As(N)),onChange:Y=>z(Y.target.value)}))}function _0({params:s,onChange:q}){let h=Array.isArray(s)?s:[];return n("div",{className:"qxsim-field wide"},n("span",{className:"qxsim-field-label"},"\u5BA2\u6237\u7AEF\u4FE1\u53F7\u53C2\u6570\uFF08\u6309\u6DFB\u52A0\u987A\u5E8F\uFF09"),h.length?h.map((b,N)=>n("div",{key:N,style:{display:"flex",gap:6,alignItems:"flex-start",marginBottom:6}},n("div",{style:{flex:1,minWidth:0}},n(Ds,{label:`\u53C2\u6570 ${N}`,value:b,onChange:z=>q(h.map((Y,E)=>E===N?z:Y))})),n("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u53C2\u6570",onClick:()=>q(h.filter((z,Y)=>Y!==N))},"\u2715"))):n("div",{className:"qxsim-muted"},"\u6682\u65E0\u53C2\u6570\uFF0C\u53EF\u53D1\u9001\u7A7A\u53C2\u6570\u5217\u8868"),n("button",{className:"qxsim-action",style:{marginTop:4},onClick:()=>q(h.concat([0]))},"\uFF0B \u6DFB\u52A0\u53C2\u6570"))}function U0({snap:s,draft:q,setDraft:h,saveLogic:b,notice:N,error:z}){let Y=q?.rules||[];function E(J){h({version:1,rules:J,dirty:!0})}function w(){E(Y.concat([{id:`signal-${Date.now().toString(36)}`,signalName:"",actions:[Re("setCustomVariable")]}]))}function nt(J,R){E(Y.map((P,ut)=>ut===J?{...P,...R}:P))}function Dt(J,R,P){let ut=Y[J];ut&&nt(J,{actions:ut.actions.map(($,kt)=>kt===R?{...$,...P}:$)})}function jl(J,R,P){Dt(J,R,Re(P))}return n("div",{className:"qxsim-server-logic"},n("div",{className:"qxsim-logic-wrap"},n("div",{className:"qxsim-logic-title"},n("div",null,n("h2",null,"\u670D\u52A1\u7AEF\u903B\u8F91"),n("p",null,`\u5C5E\u4E8E\u5B58\u6863\u201C${s.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`)),n("button",{className:"qxsim-action primary",disabled:!q?.dirty,onClick:b},"\u4FDD\u5B58\u670D\u52A1\u7AEF\u903B\u8F91")),n("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"),z?n("div",{className:"qxsim-logic-error"},z):null,Y.length?Y.map((J,R)=>n("section",{key:J.id||R,className:"qxsim-logic-rule"},n("div",{className:"qxsim-logic-rule-head"},n("strong",null,`\u89C4\u5219 ${R+1}`),n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},"\u76D1\u542C\u4FE1\u53F7\u540D"),n("input",{type:"text",value:J.signalName,placeholder:"EarnGold","aria-label":`\u89C4\u5219 ${R+1} \u76D1\u542C\u4FE1\u53F7\u540D`,onChange:P=>nt(R,{signalName:P.target.value})})),n("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u89C4\u5219",onClick:()=>E(Y.filter((P,ut)=>ut!==R))},"\u2715")),n("div",{className:"qxsim-logic-actions"},(J.actions||[]).map((P,ut)=>n("div",{key:ut,className:"qxsim-logic-action"},n("div",{className:"qxsim-logic-action-head"},n("strong",null,`\u52A8\u4F5C ${ut+1}`),n("select",{value:P.kind,"aria-label":`\u89C4\u5219 ${R+1} \u52A8\u4F5C ${ut+1} \u7C7B\u578B`,onChange:$=>jl(R,ut,$.target.value)},n("option",{value:"setCustomVariable"},"\u8BBE\u7F6E\u81EA\u5B9A\u4E49\u53D8\u91CF"),n("option",{value:"sendClientScriptSignal"},"\u53D1\u9001\u5BA2\u6237\u7AEF\u811A\u672C\u4FE1\u53F7")),n("span",null,P.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"),n("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u52A8\u4F5C",disabled:(J.actions||[]).length<=1,onClick:()=>nt(R,{actions:J.actions.filter(($,kt)=>kt!==ut)})},"\u2715")),P.kind==="sendClientScriptSignal"?n("div",{className:"qxsim-logic-fields"},n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},"\u53D1\u9001\u76EE\u6807"),n("select",{value:Du(P.target),onChange:$=>Dt(R,ut,{target:$.target.value})},zs.map($=>n("option",{key:$,value:$},Ms[$])))),n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},"\u5BA2\u6237\u7AEF\u4FE1\u53F7\u540D"),n("input",{type:"text",value:P.signalName,placeholder:"GoldChanged",onChange:$=>Dt(R,ut,{signalName:$.target.value})})),n(_0,{params:P.params,onChange:$=>Dt(R,ut,{params:$})})):n("div",{className:"qxsim-logic-fields"},n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},"\u5B9E\u4F53"),n("select",{value:Mu(P.entityType),onChange:$=>Dt(R,ut,{entityType:$.target.value})},Os.map($=>n("option",{key:$,value:$},Ms[$])))),n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},"\u53D8\u91CF\u540D"),n("input",{type:"text",value:P.name,placeholder:"Gold",onChange:$=>Dt(R,ut,{name:$.target.value})})),n("div",{className:"wide"},n(Ds,{label:"\u53D8\u91CF\u503C",value:P.value,onChange:$=>Dt(R,ut,{value:$})}))))),n("div",{className:"qxsim-logic-actions-foot"},n("button",{className:"qxsim-action",onClick:()=>nt(R,{actions:(J.actions||[]).concat([Re("setCustomVariable")])})},"\uFF0B \u8BBE\u7F6E\u81EA\u5B9A\u4E49\u53D8\u91CF"),n("button",{className:"qxsim-action",onClick:()=>nt(R,{actions:(J.actions||[]).concat([Re("sendClientScriptSignal")])})},"\uFF0B \u53D1\u9001\u5BA2\u6237\u7AEF\u811A\u672C\u4FE1\u53F7"))))):n("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"),n("div",{className:"qxsim-logic-actions-foot"},n("button",{className:"qxsim-action",onClick:w},"\uFF0B \u6DFB\u52A0\u76D1\u542C\u89C4\u5219")),n("div",{className:"qxsim-script-footer",style:{marginTop:16}},n("span",null,q?.dirty?"\u6709\u672A\u4FDD\u5B58\u7684\u4FEE\u6539":N||"\u4FDD\u5B58\u540E\u4F1A\u5199\u5165\u5F53\u524D\u5B58\u6863\uFF0C\u4E0B\u6B21\u8BD5\u73A9\u751F\u6548"),n("span",{className:"spacer"}))))}function C0({snap:s,addScriptMounted:q,mountScriptTo:h,unmountScript:b,openScript:N}){let z=(s.scripts||[]).filter(E=>E.controlId===s.selectedId),Y=(s.scripts||[]).filter(E=>E.controlId!==s.selectedId);return n(t.Fragment,null,n(I,{title:"\u6302\u8F7D\u5230\u8BE5\u63A7\u4EF6\u7684\u811A\u672C"},z.length?z.map(E=>n("div",{key:E.id,className:"qxsim-script-list-row"},n("button",{className:"qxsim-script-asset",onClick:()=>N(E.id)},n("strong",null,E.path||"(\u672A\u547D\u540D\u811A\u672C)"),n("small",null,`\u811A\u672C ${E.id}`)),n("button",{className:"qxsim-iconbtn",title:"\u89E3\u9664\u6302\u8F7D\uFF08\u4FDD\u7559\u811A\u672C\uFF09",onClick:()=>b(E.id)},"\u292B"))):n("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")),n(I,{title:"\u6302\u8F7D\u5DF2\u6709\u811A\u672C",open:!1},Y.length?n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},"\u9009\u62E9\u811A\u672C\u6302\u8F7D\u5230\u8BE5\u63A7\u4EF6"),n("select",{value:"","aria-label":"\u9009\u62E9\u811A\u672C\u6302\u8F7D\u5230\u8BE5\u63A7\u4EF6",onChange:E=>{let w=E.target.value;E.target.value="",w&&h(w)}},n("option",{value:""},"\u9009\u62E9\u811A\u672C\u2026"),Y.map(E=>n("option",{key:E.id,value:E.id},`${E.path||"(\u672A\u547D\u540D\u811A\u672C)"} \xB7 ${E.id}${E.mounted?`\uFF08\u5F53\u524D\u6302\u8F7D\u4E8E ${E.assetLabel} \xB7 ${E.controlName}\uFF0C\u5C06\u79FB\u52A8\u5230\u6B64\u63A7\u4EF6\uFF09`:"\uFF08\u672A\u6302\u8F7D\uFF09"}`)))):n("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"),n("div",{className:"qxsim-script-actions",style:{marginTop:8}},n("button",{onClick:()=>q(s.selectedId)},"\uFF0B \u65B0\u5EFA\u811A\u672C\u5E76\u6302\u8F7D\u5230\u6B64\u63A7\u4EF6"))))}function R0(s,q){let h=null,b=null;function N(z,Y){z.id===q&&(h=z,b=Y);for(let E of z.children||[])N(E,z)}if(N(s,null),h?.kind==="container")return h.id;if(h?.kind==="server-container")return h.children?.find(z=>z.kind==="container")?.id||h.id;for(;b&&b.kind!=="container";){let Y=function(E){for(let w of E.children||[])w===b&&(z=E),Y(w)},z=null;Y(s),b=z}return b?.id||s.children?.find(z=>z.kind==="container")?.id}function H0(s,q){let h=null;function b(N){N.id===q&&(h=N);for(let z of N.children||[])b(z)}return b(s),h&&h.kind!=="server-container"?h.id:R0(s,q)}function Y0(s,q,h,b){let N=s,z=s.kind,Y=z==="textbox"||z==="textwindow",E=N.renderLeft??N.left,w=N.renderBottom??N.bottom,nt=N.renderWidth??N.width,Dt=N.renderHeight??N.height,jl=N.renderRotationZ??s.rotationZ??0,J={left:`${E/h*100}%`,bottom:`${w/b*100}%`,width:`${nt/h*100}%`,height:`${Dt/b*100}%`,"--rotation":`${-Number(jl)}deg`,fontSize:Math.max(8,Math.min(40,Number(s.fontSize||12))),color:Y?v(s.fontColor,4294967295):"#fff"};z==="image"?Object.assign(J,C(s.primitive,v(s.imageColor,4294967295))):Y?(J.background=v(s.bgColor,16777215),J.justifyContent=s.horizontalAlignment==="Right"?"flex-end":s.horizontalAlignment==="Middle"?"center":"flex-start",J.alignItems=s.verticalAlignment==="Bottom"?"flex-end":s.verticalAlignment==="Middle"?"center":"flex-start",J.textShadow=s.enableOutline===!1?"none":`0 0 2px ${v(s.outlineColor,4278190080)}`):z==="container"&&(J.background="transparent");let R=s.id===q.selectedId,P=Y?s.text||"":z==="image"&&s.primitive==="missing"?n("span",{className:"qxsim-box-label"},`\u7F3A\u5C11\u56FE\u7247 ${s.imageId||""}`):z!=="container"&&z!=="image"?n("span",{className:"qxsim-box-label"},s.name||c[z]?.[1]||z):null;return n("div",{key:s.id,className:`qxsim-box ${z}${R?" selected":""}${s.instantiated?" dynamic":""}${s.pressed?" pressed":""}`,style:J},P,R&&z!=="container"?["tl","tr","bl","br"].map(ut=>n("i",{key:ut,className:`qxsim-handle ${ut}`})):null)}function B0({sessionId:s}){let q=g(),[h,b]=t.useState(null),N=t.useRef(null),z=t.useRef(Promise.resolve()),[Y,E]=t.useState(""),[w,nt]=t.useState(null),[Dt,jl]=t.useState(!1),[J,R]=t.useState(""),P=t.useRef(null),[ut,$]=t.useState([]),[kt,L]=t.useState("ui"),[Al,Ll]=t.useState("base"),[_u,w0]=t.useState("fit"),[Uu,G0]=t.useState({}),[Vn,Cu]=t.useState(""),[wa,Ru]=t.useState("template"),[Hu,kn]=t.useState(""),[Yu,He]=t.useState(null),[_s,Bu]=t.useState({version:1,rules:[],dirty:!1}),Us=t.useRef(null),[Kn,X0]=t.useState({width:0,height:0});t.useEffect(()=>{let r=Us.current;if(!r||typeof ResizeObserver>"u")return;let A=new ResizeObserver(_=>{let B=_[0]?.contentRect;B&&B.width>0&&X0({width:B.width,height:B.height})});return A.observe(r),()=>A.disconnect()},[h?.canvas?.id]);function Ye(r,{keepLogicDraft:A=!0}={}){return N.current=r,b(r),r?.scripts&&kn(_=>r.scripts.some(B=>B.id===_)?_:r.scripts[0]?.id||""),Bu(_=>A&&_?.dirty?_:Es(r?.serverLogic)),r}let Jn=t.useCallback(async()=>{try{E(""),Ye(await j(s,"get"),{keepLogicDraft:!1})}catch(r){E(r?.message||String(r))}},[s]),$n=t.useCallback(async()=>{try{let r=await j(s,"archives");$(r?.archives||[])}catch{$([])}},[s]);t.useEffect(()=>{Jn(),$n()},[Jn,$n]);function qt(r){let A=async()=>{let _=N.current;if(!_)throw new Error("editor is not ready");try{let B=await j(s,"patch",{op:{...r,expectedRevision:_.version}});return E(""),Ye(B)}catch(B){throw E(B?.message||String(B)),/revision conflict/.test(String(B?.message||B))&&await Jn(),B}};return z.current=z.current.then(A,A),z.current}let Q0=(r,A)=>void qt({op:"set",key:r,value:A}).catch(()=>{});async function j0(r,A){let _=N.current?.inspector?.id;if(_)try{let B=await qt({op:"add",kind:"image",parentId:_,name:`${A}\u56FE\u7247`});await qt({op:"set",id:_,key:r,value:B.selectedId}),R(`${A}\u5DF2\u521B\u5EFA\u5E76\u7ED1\u5B9A\uFF1B\u53EF\u5728\u63A7\u4EF6\u6811\u4E2D\u7EE7\u7EED\u7F16\u8F91\u56FE\u7247\u3002`)}catch{}}t.useEffect(()=>{let r=h?.scripts?.find(A=>A.id===Hu);He(A=>A&&r&&A.id===r.id&&A.dirty?A:r?{id:r.id,path:r.path,source:r.source,controlId:r.controlId,controlAsset:r.controlAsset,dirty:!1}:null)},[h,Hu]);function L0(r){He(A=>A&&{...A,...r,dirty:!0})}async function Wn(){let r=Yu;!r||!r.dirty||(await qt({op:"updateScript",id:r.id,path:r.path,source:r.source,controlId:r.controlId,controlAsset:r.controlAsset}),He(A=>A&&A.id===r.id?{...A,dirty:!1}:A))}function Cs(){Wn().then(()=>R("Lua \u811A\u672C\u5DF2\u4FDD\u5B58\u5230\u5F53\u524D\u5B58\u6863")).catch(()=>{})}async function Fn({silent:r=!1}={}){let A=_s;if(!A||!A.dirty)return;let _=M0(A);if(_.length){let Xa=_[0];throw r||E(Xa),new Error(Xa)}let B=await qt({op:"setServerLogic",logic:O0(A)});Bu(Es(B.serverLogic)),R("\u670D\u52A1\u7AEF\u903B\u8F91\u5DF2\u4FDD\u5B58\u5230\u5F53\u524D\u5B58\u6863")}function Z0(){Fn({silent:!0}).catch(()=>{})}function Be(r){Cs(),Z0(),L(r)}async function Rs(r={}){let A=await qt({op:"addScript",...r}),_=A.scripts?.[A.scripts.length-1];return _&&kn(_.id),R(r.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"),_}function V0(r){Yu?.id===r&&He(null),qt({op:"removeScript",id:r}).then(()=>R("\u811A\u672C\u5DF2\u5220\u9664")).catch(()=>{})}function k0(r){qt({op:"updateScript",id:r,controlId:""}).then(()=>R("\u5DF2\u89E3\u9664\u6302\u8F7D\uFF0C\u811A\u672C\u4ECD\u4FDD\u7559\u5728\u5B58\u6863\u4E2D")).catch(()=>{})}function K0(r){let A=N.current?.selectedId||"",_=N.current?.asset?.type||"";A&&(He(B=>B&&B.id===r?{...B,controlId:A,controlAsset:_}:B),qt({op:"updateScript",id:r,controlId:A,controlAsset:_}).then(()=>R("\u5DF2\u6302\u8F7D\u5230\u5F53\u524D\u63A7\u4EF6")).catch(()=>{}))}async function Hs(r){if(N.current?.asset?.type!==r)try{let A=await qt({op:"selectAsset",assetType:r});Cu(""),Ru(r==="client-control-template"?"template":"child"),R(`\u5DF2\u5207\u6362\u5230\u5B58\u6863\u5185\u7684${A.asset.label}`)}catch{}}function J0(r,A){let _=N.current;if(!_)return;let B=_.asset?.type==="client-control-template"&&wa==="template",Xa=B?{op:"addTemplate",kind:r,name:`${A}\u6A21\u677F`}:{op:"add",kind:r,parentId:H0(_.root,_.selectedId),name:A};qt(Xa).then(()=>R(B?`\u5DF2\u65B0\u589E${A}\u6A21\u677F`:`\u5DF2\u6DFB\u52A0${A}\u5B50\u63A7\u4EF6`)).catch(()=>{})}async function Pn(r,A=""){try{await z.current.catch(()=>{});let _=await j(s,"export",{format:r,assetType:A});if(Array.isArray(_?.files)&&_.files.length){for(let B of _.files)d(B);E(""),R(`\u5DF2\u5BFC\u51FA ${_.files.length} \u4E2A GIA \u6587\u4EF6\uFF08${_.files.map(B=>B.filename).join("\u3001")}\uFF09\uFF1B\u82E5\u6D4F\u89C8\u5668\u62E6\u622A\u591A\u6587\u4EF6\u4E0B\u8F7D\uFF0C\u8BF7\u5141\u8BB8\u540E\u91CD\u8BD5\u3002`);return}d(_),E(""),R(_.warnings?.length?`\u5DF2\u5BFC\u51FA ${_.filename}\uFF1B\u90E8\u5206\u5185\u5BB9\u6682\u4E0D\u652F\u6301 GIA\u3002`:`\u5DF2\u5BFC\u51FA ${_.filename}`)}catch(_){E(_?.message||String(_))}}async function $0(r){if(r)try{await z.current.catch(()=>{});let A=await j(s,"load-archive",{path:r});Ye(A.snapshot,{keepLogicDraft:!1}),E(""),R(`\u5DF2\u4ECE\u5DE5\u4F5C\u533A\u62C9\u53D6 ${r}`)}catch(A){E(A?.message||String(A))}}async function W0(r){if(!r)return;let A=r.name.toLowerCase().endsWith(".gia")?"gia":r.name.toLowerCase().endsWith(".json")?"json":r.name.toLowerCase().endsWith(".lua")?"lua":"";if(!A){E("\u4EC5\u652F\u6301 .json\u3001.gia \u6216 .lua \u6587\u4EF6");return}try{await z.current.catch(()=>{});let _=await j(s,"import",{format:A,filename:r.name,data:await o(r)});Ye(_.snapshot,{keepLogicDraft:!1}),E(""),R(_.warnings?.length?`\u5DF2\u5BFC\u5165 ${r.name}\uFF1B\u90E8\u5206\u5185\u5BB9\u6682\u4E0D\u652F\u6301\u7F16\u8F91\u3002`:`\u5DF2\u5BFC\u5165 ${r.name}`)}catch(_){E(_?.message||String(_))}finally{P.current&&(P.current.value="")}}async function F0(){let r=window.open("about:blank","_blank");if(!r){E("\u6D4F\u89C8\u5668\u963B\u6B62\u4E86\u8BD5\u73A9\u6807\u7B7E\u9875\uFF0C\u8BF7\u5141\u8BB8\u6B64\u7AD9\u70B9\u6253\u5F00\u65B0\u6807\u7B7E\u9875\u540E\u91CD\u8BD5\u3002");return}r.document.write('<!doctype html><meta charset="utf-8"><title>\u6B63\u5728\u51C6\u5907\u8BD5\u73A9\u2026</title><style>html{color-scheme:light dark;font:14px system-ui}body{min-height:100vh;margin:0;display:grid;place-items:center;background:Canvas;color:CanvasText}</style><p>\u6B63\u5728\u4FDD\u5B58\u9879\u76EE\u5E76\u51C6\u5907\u8BD5\u73A9\u2026</p>');try{await Wn(),await Fn(),r.location.replace(a(s))}catch(A){r.close(),E(A?.message||String(A))}}async function P0(){if(!(Dt||!w?.trim())){jl(!0);try{await Wn(),await Fn(),await z.current.catch(()=>{});let r=N.current,A=await j(s,"save",{path:w.trim(),expectedRevision:r.version});Ye(await j(s,"get")),R(`\u5DF2\u4FDD\u5B58\u5230 ${A.path}`),E(""),nt(null),$n()}catch(r){E(r?.message||String(r))}finally{jl(!1)}}}if(t.useEffect(()=>{h?.inspector?.kind==="server-container"&&Ll("base")},[h?.inspector?.kind]),!h)return n("div",{className:"qxsim","data-theme":q,"data-qxsim-session-id":s},n("div",{className:"qxsim-status error"},Y||"\u6B63\u5728\u8F7D\u5165\u5343\u661F\u6C99\u7BB1\u2026"));let xa=h.canvas.width,Ga=h.canvas.height,wu=Kn.width>0&&Kn.height>0?Math.min((Kn.width-44)/xa,(Kn.height-54)/Ga):NaN,I0=Number.isFinite(wu)&&wu>0?Math.min(2,Math.round(wu*1e3)/1e3):.5,tp=_u==="fit"?I0:Number(_u)||.5,Ys=D(xa,Ga),lp=(h.canvas.presets||[]).filter(r=>r.platform===h.canvas.platform);function ap(r){if(!h||h.canvas.platform===r)return;let A=(h.canvas.presets||[]).filter(B=>B.platform===r);if(!A.length)return;let _=A.find(B=>G(B)===Ys)||A[0];qt({op:"setCanvas",canvasId:_.id}).then(()=>R(`\u5DF2\u5207\u6362\u5230${_.label}`)).catch(()=>{})}let yt=h.asset?.type==="client-control-template",Gu=!!(h.inspector&&h.inspector.kind!=="server-container"),Xu=new Set;for(let r of h.tree||[])(Uu[r.id]||(r.ancestorIds||[]).some(A=>Uu[A]))&&Xu.add(r.id);let ep=(h.boxes||[]).filter(r=>r.kind!=="server-container"&&r.visible&&!Xu.has(r.id));function np(r,A){r.stopPropagation(),G0(_=>{let B={..._};return B[A]?delete B[A]:B[A]=!0,B})}let Bs=h.tree.filter(r=>!Vn.trim()||`${r.name} ${r.label}`.toLowerCase().includes(Vn.trim().toLowerCase())),ft=h.tree.find(r=>r.id===h.selectedId),ip=yt&&ft?h.tree.filter(r=>r.id!==ft.id&&!(r.ancestorIds||[]).includes(ft.id)):[],up=ft?.parentId||h.root.id;return n("div",{className:"qxsim","data-theme":q,"data-qxsim-session-id":s},w!==null?n("div",{className:"qxsim-save-overlay"},n("form",{className:"qxsim-save-dialog",role:"dialog","aria-modal":!0,"aria-label":"\u4FDD\u5B58\u5230\u5DE5\u4F5C\u533A",onSubmit:r=>{r.preventDefault(),P0()}},n("h2",null,"\u4FDD\u5B58\u5230\u5DE5\u4F5C\u533A"),n("label",null,"\u5B58\u6863\u76F8\u5BF9\u8DEF\u5F84",n("input",{autoFocus:!0,required:!0,value:w,disabled:Dt,onChange:r=>nt(r.target.value)})),Y?n("div",{role:"alert"},Y):null,n("footer",null,n("button",{className:"qxsim-action",type:"button",disabled:Dt,onClick:()=>nt(null)},"\u53D6\u6D88"),n("button",{className:"qxsim-action primary",type:"submit",disabled:Dt||!w.trim()},Dt?"\u4FDD\u5B58\u4E2D\u2026":"\u4FDD\u5B58")))):null,n("header",{className:"qxsim-toolbar"},n("div",{className:"qxsim-brand",title:`${h.workspace?.bound?h.workspace.path:"\u5DE5\u4F5C\u533A\u672A\u7ED1\u5B9A"}
33
+ `,c={"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"]},f=[["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"]],p={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 x(){if(document.getElementById(i))return;let s=document.createElement("style");s.id=i,s.textContent=u,document.head.appendChild(s)}function S(){let s=document.documentElement,q=document.body,h=[s.dataset.theme,s.className,s.getAttribute("style"),q?.dataset?.theme,q?.className,q?.getAttribute("style"),getComputedStyle(s).colorScheme].filter(Boolean).join(" ").toLowerCase();return h.includes("dark")?"dark":h.includes("light")?"light":window.matchMedia?.("(prefers-color-scheme: dark)").matches?"dark":"light"}function g(){let[s,q]=t.useState(S);return t.useEffect(()=>{let h=()=>q(S()),b=new MutationObserver(h);b.observe(document.documentElement,{attributes:!0,attributeFilter:["class","style","data-theme"]}),document.body&&b.observe(document.body,{attributes:!0,attributeFilter:["class","style","data-theme"]});let N=window.matchMedia?.("(prefers-color-scheme: dark)");return N?.addEventListener?.("change",h),()=>{b.disconnect(),N?.removeEventListener?.("change",h)}},[]),s}function v(s,q){let h=Number(s??q)>>>0;return`rgba(${h>>>16&255},${h>>>8&255},${h&255},${(h>>>24&255)/255})`}function U(s){return`#${(Number(s)>>>0).toString(16).padStart(8,"0").toUpperCase()}`}function C(s,q){return s==="circle"?{borderRadius:"50%",background:q}:s==="ring"?{borderRadius:"50%",border:`7px solid ${q}`,background:"transparent"}:s==="triangle"?{background:q,clipPath:"polygon(50% 0,100% 100%,0 100%)"}:s==="fourstar"?{background:q,clipPath:"polygon(50% 0,62% 38%,100% 50%,62% 62%,50% 100%,38% 62%,0 50%,38% 38%)"}:s==="fivestar"?{background:q,clipPath:"polygon(50% 0,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%)"}:s==="missing"?{background:"#4822285c",border:"1px dashed #ff7481"}:{background:q}}let j=l;function d(s){let q;try{q=atob(s.data)}catch{throw new Error("\u5BFC\u51FA\u5185\u5BB9\u89E3\u7801\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u6216\u5237\u65B0\u9875\u9762")}let h=new Uint8Array(q.length);for(let z=0;z<q.length;z+=1)h[z]=q.charCodeAt(z);let b=URL.createObjectURL(new Blob([h],{type:s.mimeType||"application/octet-stream"})),N=document.createElement("a");N.href=b,N.download=s.filename||"qxqy-export",N.rel="noopener",N.style.display="none",document.body.appendChild(N),N.click(),N.remove(),setTimeout(()=>URL.revokeObjectURL(b),1e3)}async function o(s){let q=new Uint8Array(await s.arrayBuffer()),h="",b=32768;for(let N=0;N<q.length;N+=b)h+=String.fromCharCode(...q.subarray(N,N+b));return btoa(h)}let m=s=>typeof s=="object"?s.value:s,y=s=>typeof s=="object"?s.label:s,O=[{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 G(s){return String(s.id||"").split("-").slice(1).join(":")}function D(s,q){let h=(N,z)=>z?h(z,N%z):N,b=h(Math.round(s),Math.round(q))||1;return`${Math.round(s)/b}:${Math.round(q)/b}`}function M({field:s,commit:q,axis:h}){let b=s.type==="color"?U(s.value):s.value==null?"":String(s.value),[N,z]=t.useState(b);if(t.useEffect(()=>z(s.type==="color"?U(s.value):s.value==null?"":String(s.value)),[s.value,s.type]),s.type==="note")return n("div",{className:"qxsim-note"},s.value||s.label);if(s.readonly&&(s.evidence==="N"||s.evidence==="U"))return n("div",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},s.label),n("div",{className:"qxsim-unsupported"},s.value==null?"\u5C1A\u65E0\u53EF\u7F16\u8F91\u503C":String(s.value)));if(s.type==="bool")return n("div",{className:"qxsim-switch-row"},n("span",null,s.label),n("label",{className:"qxsim-switch"},n("input",{type:"checkbox",checked:!!s.value,disabled:!!s.readonly,onChange:E=>q(s.key,E.target.checked)}),n("span",{className:"qxsim-switch-track"})));if(s.type==="enum"){let E=[...s.options||[]],w=String(s.value??"");return E.some(nt=>String(m(nt))===w)||E.unshift({value:s.value??"",label:`\u672A\u8BC6\u522B\u9009\u9879 ${s.unknownValue??(w||"\u7A7A")}\uFF08\u4FDD\u7559\u539F\u503C\uFF09`}),n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},s.label),n("select",{value:w,disabled:!!s.readonly,onChange:nt=>q(s.key,nt.target.value)},E.map(nt=>n("option",{key:String(m(nt)),value:m(nt)},y(nt)))))}if(s.type==="percent"){let E=Math.round(Number(s.value||0)*100);return n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},s.label),n("span",{className:"qxsim-percent"},n("input",{type:"range",min:0,max:100,value:E,onInput:w=>q(s.key,Number(w.target.value)/100)}),n("output",null,`${E}%`)))}if(s.type==="color"){let E=/^#[0-9a-f]{8}$/i.test(N)?N:U(s.value);return n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},s.label,n("small",null,"ARGB")),n("span",{className:"qxsim-color-row"},n("span",{className:"qxsim-color-swatch",title:"\u6253\u5F00\u53D6\u8272\u5668"},n("input",{type:"color",value:`#${E.slice(3)}`,onInput:w=>{let nt=`#${E.slice(1,3)}${w.target.value.slice(1).toUpperCase()}`;z(nt),q(s.key,nt)}})),n("input",{type:"text",value:N,spellCheck:!1,"aria-label":`${s.label} ARGB`,onChange:w=>z(w.target.value),onBlur:()=>q(s.key,N),onKeyDown:w=>{w.key==="Enter"&&w.currentTarget.blur(),w.key==="Escape"&&z(U(s.value))}})))}let Y={value:N,disabled:!!s.readonly,readOnly:!!s.readonly,onChange:E=>z(E.target.value),onBlur:()=>{s.readonly||q(s.key,N)},onKeyDown:E=>{E.key==="Enter"&&s.type!=="text"&&E.currentTarget.blur(),E.key==="Escape"&&z(s.value==null?"":String(s.value))}};return n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},h?n("b",{className:`qxsim-axis ${h.toLowerCase()}`},h):null,s.label),s.type==="text"?n("textarea",{...Y,rows:4}):n("input",{...Y,type:s.type==="number"?"number":"text",step:s.type==="number"?"any":void 0}))}function I({title:s,open:q=!0,children:h}){return n("details",{className:"qxsim-section",open:q},n("summary",null,s),n("div",{className:"qxsim-section-body"},h))}function k(s){let q={};for(let h of s||[])q[h.key]=h;return q}function Rt({label:s,x:q,y:h,xAxis:b="X",yAxis:N="Y",commit:z}){return n("div",{className:"qxsim-pair"},n("div",{className:"qxsim-pair-name"},s),n(M,{field:q,axis:b,commit:z}),n(M,{field:h,axis:N,commit:z}))}function Ou({field:s,commit:q,createStateChild:h}){return n("div",{className:"qxsim-state-field"},n("div",{className:"qxsim-state-label"},s.label),n("div",{className:"qxsim-state-ref"},n("button",{title:`\u65B0\u5EFA\u5E76\u7ED1\u5B9A${s.label}\u56FE\u7247`,onClick:()=>h(s.key,s.label)},"+"),n("select",{value:String(s.value??""),"aria-label":s.label,onChange:b=>q(s.key,b.target.value)},(s.options||[]).map(b=>n("option",{key:String(m(b)),value:m(b)},y(b))))))}function E0({inspector:s,commit:q,createStateChild:h}){let b=k(s.fields),N=w=>w?.type==="node"?n(Ou,{key:w.key,field:w,commit:q,createStateChild:h}):w?n(M,{key:w.key,field:w,commit:q}):null,z=(p[s.kind]||[]).map(w=>b[w]).filter(Boolean).map(N),Y=null;if(s.kind==="image"){let w=b.fillType?.value==="Horizontal"?b.fillHorizontalType:b.fillType?.value==="Vertical"?b.fillVerticalType:b.fillType?.value==="Radial90"?b.fillRadial90Type:b.fillRadialType,nt=[N(b.enableMask),N(b.enableSoftEdge),b.enableSoftEdge?.value?n("div",{className:"qxsim-subfields",key:"soft-fields"},N(b.softEdgeMode),n(Rt,{label:"\u7FBD\u5316\u5BBD\u5EA6",x:b.softEdgeWidthX,y:b.softEdgeWidthY,commit:q}),n(Rt,{label:"\u7FBD\u5316\u8303\u56F4",x:b.horizontalSoftRange,y:b.verticalSoftRange,commit:q})):null,N(b.enableFill),b.enableFill?.value?n("div",{className:"qxsim-subfields",key:"fill-fields"},N(b.fillType),N(w),N(b.fillAmount)):null,N(b.reverseMaskArea)];Y=n(t.Fragment,null,n(I,{title:"\u56FE\u7247\u8BBE\u7F6E"},N(b.imageSource),N(b.imageId),N(b.imageColor)),n(I,{title:"\u906E\u7F69\u8BBE\u7F6E"},nt))}let E=s.kind==="textbox"?"\u6587\u672C\u6846\u8BBE\u7F6E":s.kind==="button"?"\u6309\u94AE\u8BBE\u7F6E":`${s.label}\u8BBE\u7F6E`;return n(t.Fragment,null,n(I,{title:"\u8282\u70B9\u4FE1\u606F",open:!1},n(M,{field:b.name,commit:q})),n(I,{title:"\u53D8\u6362"},b.posX?n(Rt,{label:"\u4F4D\u7F6E",x:b.posX,y:b.posY,commit:q}):null,b.width?n(Rt,{label:"\u5927\u5C0F",x:b.width,y:b.height,xAxis:"W",yAxis:"H",commit:q}):null,b.rotationZ?n(M,{field:b.rotationZ,commit:q}):null,b.syncAllDevices?n(M,{field:b.syncAllDevices,commit:q}):null,b.anchorType?n(M,{field:b.anchorType,commit:q}):null,b.anchorMinX?n(Rt,{label:"Min",x:b.anchorMinX,y:b.anchorMinY,commit:q}):null,b.anchorMaxX?n(Rt,{label:"Max",x:b.anchorMaxX,y:b.anchorMaxY,commit:q}):null,b.pivotX?n(Rt,{label:"\u4E2D\u5FC3",x:b.pivotX,y:b.pivotY,commit:q}):null),n(I,{title:"\u521B\u5EFA\u8BBE\u7F6E"},b.active?n(M,{field:b.active,commit:q}):null,b.visible?n(M,{field:b.visible,commit:q}):null),Y||(z.length?n(I,{title:E},z):null),b.canControllerFocus?n(I,{title:"\u624B\u67C4\u5BFC\u822A",open:!1},n(M,{field:b.canControllerFocus,commit:q})):null,b.incomplete?n(I,{title:"\u5B9E\u73B0\u72B6\u6001"},n(M,{field:b.incomplete,commit:q})):null)}function z0({snap:s,selectedScriptId:q,selectScript:h,draft:b,updateDraft:N,saveScript:z,addScript:Y,removeScript:E,exportLua:w,exportScripts:nt,exportScriptsGia:Dt,notice:jl}){let J=s.scripts||[],R=J.find(L=>L.id===q)||null,P=s.mountTargets||[],ut=P.filter(L=>L.assetType==="server-control-template"),$=P.filter(L=>L.assetType==="client-control-template"),kt=L=>{let Al=P.find(Ll=>Ll.id===L);return Al?`${Al.assetLabel} \xB7 ${Al.name}`:""};return n("div",{className:"qxsim-script-page"},n("aside",{className:"qxsim-script-assets"},n("h3",null,`\u5B58\u6863\u5185 Lua \u811A\u672C\uFF08${J.length}\uFF09`),n("button",{className:"qxsim-action",style:{width:"100%",marginBottom:8},onClick:Y},"\uFF0B \u65B0\u5EFA\u811A\u672C"),J.length?J.map(L=>n("div",{key:L.id,className:"qxsim-script-list-row"},n("button",{className:`qxsim-script-asset${L.id===q?" active":""}`,onClick:()=>h(L.id)},n("strong",null,L.path||"(\u672A\u547D\u540D\u811A\u672C)"),n("small",null,L.mounted?`\u6302\u8F7D\uFF1A${L.assetLabel} \xB7 ${L.controlName}`:"\u672A\u6302\u8F7D\uFF08\u4EC5\u53EF\u88AB require\uFF09")),n("button",{className:"qxsim-iconbtn",title:"\u4E0B\u8F7D\u8BE5\u811A\u672C .lua",onClick:()=>w(L.id)},"\u21E9"),n("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u8BE5\u811A\u672C",onClick:()=>E(L.id)},"\u2715"))):n("div",{className:"qxsim-empty"},"\u8FD8\u6CA1\u6709\u811A\u672C\uFF0C\u70B9\u51FB\u201C\u65B0\u5EFA\u811A\u672C\u201D\u5F00\u59CB")),n("main",{className:"qxsim-script-editor"},R&&b?n(t.Fragment,null,n("div",{className:"qxsim-script-title"},n("div",null,n("h2",null,b.path||"(\u672A\u547D\u540D\u811A\u672C)"),n("span",null,`\u5C5E\u4E8E\u5B58\u6863\u201C${s.save?.name||"\u672A\u547D\u540D\u5B58\u6863"}\u201D \xB7 Lua \u811A\u672C\u662F\u5B58\u6863\u5185\u72EC\u7ACB\u8D44\u4EA7`)),n("span",null,`\u811A\u672C ${R.id}`)),n("div",{className:"qxsim-script-fields"},n("label",null,"\u811A\u672C\u8DEF\u5F84\uFF08\u5DE5\u4F5C\u533A\u76F8\u5BF9\u8DEF\u5F84\uFF09",n("input",{type:"text",value:b.path,placeholder:"lua/example.lua",onChange:L=>N({path:L.target.value})})),n("label",null,"\u6302\u8F7D\u76EE\u6807\uFF08\u5BA2\u6237\u7AEF\u63A7\u4EF6 / \u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\uFF09",n("select",{value:b.controlId?`${b.controlAsset||"server-control-template"}|${b.controlId}`:"",onChange:L=>{let[Al,Ll]=L.target.value.split("|");N(Ll?{controlId:Ll,controlAsset:Al}:{controlId:"",controlAsset:""})}},n("option",{value:""},"\u672A\u6302\u8F7D\uFF08\u4E0D\u751F\u6548\uFF0C\u4EC5\u53EF\u88AB require\uFF09"),n("optgroup",{label:"\u670D\u52A1\u5668\u63A7\u4EF6\u6A21\u677F \xB7 \u5BA2\u6237\u7AEF\u63A7\u4EF6\u5BB9\u5668\u5185"},ut.map(L=>n("option",{key:L.id,value:`${L.assetType}|${L.id}`},`${L.name} \xB7 ${L.id}`))),$.length?n("optgroup",{label:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F"},$.map(L=>n("option",{key:L.id,value:`${L.assetType}|${L.id}`},`${L.name} \xB7 ${L.id}`))):null))),n("label",null,"Lua \u6E90\u7801",n("textarea",{value:b.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:L=>N({source:L.target.value})})),n("div",{className:"qxsim-script-footer"},n("span",null,b.dirty?"\u6709\u672A\u4FDD\u5B58\u7684\u4FEE\u6539":jl||(R.mounted?`\u5DF2\u6302\u8F7D\uFF1A${kt(R.controlId)}`:"\u5F53\u524D\u672A\u6302\u8F7D\uFF0C\u8BD5\u73A9\u65F6\u4E0D\u4F1A\u81EA\u52A8\u8FD0\u884C")),n("span",{className:"spacer"}),n("button",{className:"qxsim-action",onClick:nt},"\u21E9 \u811A\u672C\u5305 JSON"),n("button",{className:"qxsim-action",onClick:Dt},"\u21E9 \u811A\u672C\u5305 GIA"),n("button",{className:"qxsim-action primary",disabled:!b.dirty,onClick:z},"\u4FDD\u5B58\u811A\u672C"))):n("div",{className:"qxsim-empty"},"\u8BF7\u65B0\u5EFA\u6216\u9009\u62E9\u4E00\u4E2A\u811A\u672C")))}function Ts(s){if(s===void 0)return"null";try{return JSON.stringify(s)}catch{return String(s)}}function As(s){let q=String(s??"").trim();if(!q)return null;try{return JSON.parse(q)}catch{return q}}function Ns(s){return!!(s&&typeof s=="object"&&!Array.isArray(s)&&Object.prototype.hasOwnProperty.call(s,"fromSignalParam"))}function Es(s){return{version:1,dirty:!1,rules:(Array.isArray(s?.rules)?s.rules:[]).map((h,b)=>({id:String(h.id||`signal-${b+1}`),signalName:String(h.signalName||""),actions:Array.isArray(h.actions)&&h.actions.length?h.actions.map(N=>D0(N)):[Re("setCustomVariable")]}))}}let zs=["PlayerSelf","AllPlayers","Player1","Player2","Player3","Player4","Player5","Player6","Player7","Player8"],Os=["PlayerSelf","Level","Player1","Player2","Player3","Player4","Player5","Player6","Player7","Player8"],Ms={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 Mu(s){return Os.includes(s)&&s!=="AllPlayers"?s:s==="Level"?"Level":"PlayerSelf"}function Du(s){return zs.includes(s)?s:"PlayerSelf"}function Re(s){return s==="sendClientScriptSignal"?{kind:"sendClientScriptSignal",target:"PlayerSelf",signalName:"",params:[]}:{kind:"setCustomVariable",entityType:"PlayerSelf",name:"",value:0}}function O0(s){return{version:1,rules:(s?.rules||[]).map(q=>({id:String(q.id||""),signalName:String(q.signalName||"").trim(),actions:(q.actions||[]).map(h=>h?.kind==="sendClientScriptSignal"?{kind:"sendClientScriptSignal",target:Du(h.target),signalName:String(h.signalName||"").trim(),params:Array.isArray(h.params)?h.params:[]}:{kind:"setCustomVariable",entityType:Mu(h?.entityType),name:String(h?.name||"").trim(),value:h&&Object.prototype.hasOwnProperty.call(h,"value")?h.value:0})}))}}function M0(s){let q=[];for(let[h,b]of(s?.rules||[]).entries()){String(b.signalName||"").trim()||q.push(`\u89C4\u5219 ${h+1} \u9700\u8981\u76D1\u542C\u4FE1\u53F7\u540D`);let N=b.actions||[];N.length||q.push(`\u89C4\u5219 ${h+1} \u81F3\u5C11\u9700\u8981\u4E00\u4E2A\u52A8\u4F5C`);for(let[z,Y]of N.entries())Y?.kind==="sendClientScriptSignal"?String(Y.signalName||"").trim()||q.push(`\u89C4\u5219 ${h+1} \u52A8\u4F5C ${z+1} \u9700\u8981\u5BA2\u6237\u7AEF\u4FE1\u53F7\u540D`):String(Y?.name||"").trim()||q.push(`\u89C4\u5219 ${h+1} \u52A8\u4F5C ${z+1} \u9700\u8981\u53D8\u91CF\u540D`)}return q}function D0(s){if(s?.kind==="sendClientScriptSignal")return{kind:"sendClientScriptSignal",target:Du(s.target),signalName:String(s.signalName||""),params:Array.isArray(s.params)?s.params.map(h=>{try{return JSON.parse(JSON.stringify(h))}catch{return h}}):[]};let q=0;if(s&&Object.prototype.hasOwnProperty.call(s,"value"))try{q=JSON.parse(JSON.stringify(s.value))}catch{q=s.value}return{kind:"setCustomVariable",entityType:Mu(s?.entityType),name:String(s?.name||""),value:q}}function Ds({label:s,value:q,onChange:h}){let b=Ns(q),[N,z]=t.useState(()=>b?"":Ts(q));return t.useEffect(()=>{Ns(q)||z(Ts(q))},[q]),n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},s),n("select",{value:b?"param":"literal","aria-label":`${s}\u6765\u6E90`,onChange:Y=>{Y.target.value==="param"?h({fromSignalParam:Number(q?.fromSignalParam)||0}):h(As(N||"0"))}},n("option",{value:"literal"},"\u5B57\u9762\u91CF\uFF08JSON\uFF09"),n("option",{value:"param"},"\u5F15\u7528\u76D1\u542C\u4FE1\u53F7\u53C2\u6570")),b?n("input",{type:"number",min:0,step:1,value:Number(q.fromSignalParam)||0,"aria-label":`${s}\u53C2\u6570\u5E8F\u53F7`,onChange:Y=>h({fromSignalParam:Math.max(0,Math.trunc(Number(Y.target.value)||0))})}):n("textarea",{className:"qxsim-logic-json",value:N,spellCheck:!1,"aria-label":`${s}\u5B57\u9762\u91CF`,onBlur:()=>h(As(N)),onChange:Y=>z(Y.target.value)}))}function _0({params:s,onChange:q}){let h=Array.isArray(s)?s:[];return n("div",{className:"qxsim-field wide"},n("span",{className:"qxsim-field-label"},"\u5BA2\u6237\u7AEF\u4FE1\u53F7\u53C2\u6570\uFF08\u6309\u6DFB\u52A0\u987A\u5E8F\uFF09"),h.length?h.map((b,N)=>n("div",{key:N,style:{display:"flex",gap:6,alignItems:"flex-start",marginBottom:6}},n("div",{style:{flex:1,minWidth:0}},n(Ds,{label:`\u53C2\u6570 ${N}`,value:b,onChange:z=>q(h.map((Y,E)=>E===N?z:Y))})),n("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u53C2\u6570",onClick:()=>q(h.filter((z,Y)=>Y!==N))},"\u2715"))):n("div",{className:"qxsim-muted"},"\u6682\u65E0\u53C2\u6570\uFF0C\u53EF\u53D1\u9001\u7A7A\u53C2\u6570\u5217\u8868"),n("button",{className:"qxsim-action",style:{marginTop:4},onClick:()=>q(h.concat([0]))},"\uFF0B \u6DFB\u52A0\u53C2\u6570"))}function U0({snap:s,draft:q,setDraft:h,saveLogic:b,notice:N,error:z}){let Y=q?.rules||[];function E(J){h({version:1,rules:J,dirty:!0})}function w(){E(Y.concat([{id:`signal-${Date.now().toString(36)}`,signalName:"",actions:[Re("setCustomVariable")]}]))}function nt(J,R){E(Y.map((P,ut)=>ut===J?{...P,...R}:P))}function Dt(J,R,P){let ut=Y[J];ut&&nt(J,{actions:ut.actions.map(($,kt)=>kt===R?{...$,...P}:$)})}function jl(J,R,P){Dt(J,R,Re(P))}return n("div",{className:"qxsim-server-logic"},n("div",{className:"qxsim-logic-wrap"},n("div",{className:"qxsim-logic-title"},n("div",null,n("h2",null,"\u670D\u52A1\u7AEF\u903B\u8F91"),n("p",null,`\u5C5E\u4E8E\u5B58\u6863\u201C${s.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`)),n("button",{className:"qxsim-action primary",disabled:!q?.dirty,onClick:b},"\u4FDD\u5B58\u670D\u52A1\u7AEF\u903B\u8F91")),n("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"),z?n("div",{className:"qxsim-logic-error"},z):null,Y.length?Y.map((J,R)=>n("section",{key:J.id||R,className:"qxsim-logic-rule"},n("div",{className:"qxsim-logic-rule-head"},n("strong",null,`\u89C4\u5219 ${R+1}`),n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},"\u76D1\u542C\u4FE1\u53F7\u540D"),n("input",{type:"text",value:J.signalName,placeholder:"EarnGold","aria-label":`\u89C4\u5219 ${R+1} \u76D1\u542C\u4FE1\u53F7\u540D`,onChange:P=>nt(R,{signalName:P.target.value})})),n("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u89C4\u5219",onClick:()=>E(Y.filter((P,ut)=>ut!==R))},"\u2715")),n("div",{className:"qxsim-logic-actions"},(J.actions||[]).map((P,ut)=>n("div",{key:ut,className:"qxsim-logic-action"},n("div",{className:"qxsim-logic-action-head"},n("strong",null,`\u52A8\u4F5C ${ut+1}`),n("select",{value:P.kind,"aria-label":`\u89C4\u5219 ${R+1} \u52A8\u4F5C ${ut+1} \u7C7B\u578B`,onChange:$=>jl(R,ut,$.target.value)},n("option",{value:"setCustomVariable"},"\u8BBE\u7F6E\u81EA\u5B9A\u4E49\u53D8\u91CF"),n("option",{value:"sendClientScriptSignal"},"\u53D1\u9001\u5BA2\u6237\u7AEF\u811A\u672C\u4FE1\u53F7")),n("span",null,P.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"),n("button",{className:"qxsim-iconbtn",title:"\u5220\u9664\u52A8\u4F5C",disabled:(J.actions||[]).length<=1,onClick:()=>nt(R,{actions:J.actions.filter(($,kt)=>kt!==ut)})},"\u2715")),P.kind==="sendClientScriptSignal"?n("div",{className:"qxsim-logic-fields"},n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},"\u53D1\u9001\u76EE\u6807"),n("select",{value:Du(P.target),onChange:$=>Dt(R,ut,{target:$.target.value})},zs.map($=>n("option",{key:$,value:$},Ms[$])))),n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},"\u5BA2\u6237\u7AEF\u4FE1\u53F7\u540D"),n("input",{type:"text",value:P.signalName,placeholder:"GoldChanged",onChange:$=>Dt(R,ut,{signalName:$.target.value})})),n(_0,{params:P.params,onChange:$=>Dt(R,ut,{params:$})})):n("div",{className:"qxsim-logic-fields"},n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},"\u5B9E\u4F53"),n("select",{value:Mu(P.entityType),onChange:$=>Dt(R,ut,{entityType:$.target.value})},Os.map($=>n("option",{key:$,value:$},Ms[$])))),n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},"\u53D8\u91CF\u540D"),n("input",{type:"text",value:P.name,placeholder:"Gold",onChange:$=>Dt(R,ut,{name:$.target.value})})),n("div",{className:"wide"},n(Ds,{label:"\u53D8\u91CF\u503C",value:P.value,onChange:$=>Dt(R,ut,{value:$})}))))),n("div",{className:"qxsim-logic-actions-foot"},n("button",{className:"qxsim-action",onClick:()=>nt(R,{actions:(J.actions||[]).concat([Re("setCustomVariable")])})},"\uFF0B \u8BBE\u7F6E\u81EA\u5B9A\u4E49\u53D8\u91CF"),n("button",{className:"qxsim-action",onClick:()=>nt(R,{actions:(J.actions||[]).concat([Re("sendClientScriptSignal")])})},"\uFF0B \u53D1\u9001\u5BA2\u6237\u7AEF\u811A\u672C\u4FE1\u53F7"))))):n("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"),n("div",{className:"qxsim-logic-actions-foot"},n("button",{className:"qxsim-action",onClick:w},"\uFF0B \u6DFB\u52A0\u76D1\u542C\u89C4\u5219")),n("div",{className:"qxsim-script-footer",style:{marginTop:16}},n("span",null,q?.dirty?"\u6709\u672A\u4FDD\u5B58\u7684\u4FEE\u6539":N||"\u4FDD\u5B58\u540E\u4F1A\u5199\u5165\u5F53\u524D\u5B58\u6863\uFF0C\u4E0B\u6B21\u8BD5\u73A9\u751F\u6548"),n("span",{className:"spacer"}))))}function C0({snap:s,addScriptMounted:q,mountScriptTo:h,unmountScript:b,openScript:N}){let z=(s.scripts||[]).filter(E=>E.controlId===s.selectedId),Y=(s.scripts||[]).filter(E=>E.controlId!==s.selectedId);return n(t.Fragment,null,n(I,{title:"\u6302\u8F7D\u5230\u8BE5\u63A7\u4EF6\u7684\u811A\u672C"},z.length?z.map(E=>n("div",{key:E.id,className:"qxsim-script-list-row"},n("button",{className:"qxsim-script-asset",onClick:()=>N(E.id)},n("strong",null,E.path||"(\u672A\u547D\u540D\u811A\u672C)"),n("small",null,`\u811A\u672C ${E.id}`)),n("button",{className:"qxsim-iconbtn",title:"\u89E3\u9664\u6302\u8F7D\uFF08\u4FDD\u7559\u811A\u672C\uFF09",onClick:()=>b(E.id)},"\u292B"))):n("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")),n(I,{title:"\u6302\u8F7D\u5DF2\u6709\u811A\u672C",open:!1},Y.length?n("label",{className:"qxsim-field"},n("span",{className:"qxsim-field-label"},"\u9009\u62E9\u811A\u672C\u6302\u8F7D\u5230\u8BE5\u63A7\u4EF6"),n("select",{value:"","aria-label":"\u9009\u62E9\u811A\u672C\u6302\u8F7D\u5230\u8BE5\u63A7\u4EF6",onChange:E=>{let w=E.target.value;E.target.value="",w&&h(w)}},n("option",{value:""},"\u9009\u62E9\u811A\u672C\u2026"),Y.map(E=>n("option",{key:E.id,value:E.id},`${E.path||"(\u672A\u547D\u540D\u811A\u672C)"} \xB7 ${E.id}${E.mounted?`\uFF08\u5F53\u524D\u6302\u8F7D\u4E8E ${E.assetLabel} \xB7 ${E.controlName}\uFF0C\u5C06\u79FB\u52A8\u5230\u6B64\u63A7\u4EF6\uFF09`:"\uFF08\u672A\u6302\u8F7D\uFF09"}`)))):n("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"),n("div",{className:"qxsim-script-actions",style:{marginTop:8}},n("button",{onClick:()=>q(s.selectedId)},"\uFF0B \u65B0\u5EFA\u811A\u672C\u5E76\u6302\u8F7D\u5230\u6B64\u63A7\u4EF6"))))}function R0(s,q){let h=null,b=null;function N(z,Y){z.id===q&&(h=z,b=Y);for(let E of z.children||[])N(E,z)}if(N(s,null),h?.kind==="container")return h.id;if(h?.kind==="server-container")return h.children?.find(z=>z.kind==="container")?.id||h.id;for(;b&&b.kind!=="container";){let Y=function(E){for(let w of E.children||[])w===b&&(z=E),Y(w)},z=null;Y(s),b=z}return b?.id||s.children?.find(z=>z.kind==="container")?.id}function H0(s,q){let h=null;function b(N){N.id===q&&(h=N);for(let z of N.children||[])b(z)}return b(s),h&&h.kind!=="server-container"?h.id:R0(s,q)}function Y0(s,q,h,b){let N=s,z=s.kind,Y=z==="textbox"||z==="textwindow",E=N.renderLeft??N.left,w=N.renderBottom??N.bottom,nt=N.renderWidth??N.width,Dt=N.renderHeight??N.height,jl=N.renderRotationZ??s.rotationZ??0,J={left:`${E/h*100}%`,bottom:`${w/b*100}%`,width:`${nt/h*100}%`,height:`${Dt/b*100}%`,"--rotation":`${-Number(jl)}deg`,fontSize:Math.max(8,Math.min(40,Number(s.fontSize||12))),color:Y?v(s.fontColor,4294967295):"#fff"};z==="image"?Object.assign(J,C(s.primitive,v(s.imageColor,4294967295))):Y?(J.background=v(s.bgColor,16777215),J.justifyContent=s.horizontalAlignment==="Right"?"flex-end":s.horizontalAlignment==="Middle"?"center":"flex-start",J.alignItems=s.verticalAlignment==="Bottom"?"flex-end":s.verticalAlignment==="Middle"?"center":"flex-start",J.textShadow=s.enableOutline===!1?"none":`0 0 2px ${v(s.outlineColor,4278190080)}`):z==="container"&&(J.background="transparent");let R=s.id===q.selectedId,P=Y?s.text||"":z==="image"&&s.primitive==="missing"?n("span",{className:"qxsim-box-label"},`\u7F3A\u5C11\u56FE\u7247 ${s.imageId||""}`):z!=="container"&&z!=="image"?n("span",{className:"qxsim-box-label"},s.name||c[z]?.[1]||z):null;return n("div",{key:s.id,className:`qxsim-box ${z}${R?" selected":""}${s.instantiated?" dynamic":""}${s.pressed?" pressed":""}`,style:J},P,R&&z!=="container"?["tl","tr","bl","br"].map(ut=>n("i",{key:ut,className:`qxsim-handle ${ut}`})):null)}function B0({sessionId:s}){let q=g(),[h,b]=t.useState(null),N=t.useRef(null),z=t.useRef(Promise.resolve()),[Y,E]=t.useState(""),[w,nt]=t.useState(null),[Dt,jl]=t.useState(!1),[J,R]=t.useState(""),P=t.useRef(null),[ut,$]=t.useState([]),[kt,L]=t.useState("ui"),[Al,Ll]=t.useState("base"),[_u,w0]=t.useState("fit"),[Uu,G0]=t.useState({}),[Vn,Cu]=t.useState(""),[wa,Ru]=t.useState("template"),[Hu,kn]=t.useState(""),[Yu,He]=t.useState(null),[_s,Bu]=t.useState({version:1,rules:[],dirty:!1}),Us=t.useRef(null),[Kn,X0]=t.useState({width:0,height:0});t.useEffect(()=>{let r=Us.current;if(!r||typeof ResizeObserver>"u")return;let A=new ResizeObserver(_=>{let B=_[0]?.contentRect;B&&B.width>0&&X0({width:B.width,height:B.height})});return A.observe(r),()=>A.disconnect()},[h?.canvas?.id]);function Ye(r,{keepLogicDraft:A=!0}={}){return N.current=r,b(r),r?.scripts&&kn(_=>r.scripts.some(B=>B.id===_)?_:r.scripts[0]?.id||""),Bu(_=>A&&_?.dirty?_:Es(r?.serverLogic)),r}let Jn=t.useCallback(async()=>{try{E(""),Ye(await j(s,"get"),{keepLogicDraft:!1})}catch(r){E(r?.message||String(r))}},[s]),$n=t.useCallback(async()=>{try{let r=await j(s,"archives");$(r?.archives||[])}catch{$([])}},[s]);t.useEffect(()=>{Jn(),$n()},[Jn,$n]);function qt(r){let A=async()=>{let _=N.current;if(!_)throw new Error("editor is not ready");try{let B=await j(s,"patch",{op:{...r,expectedRevision:_.version}});return E(""),Ye(B)}catch(B){throw E(B?.message||String(B)),/revision conflict/.test(String(B?.message||B))&&await Jn(),B}};return z.current=z.current.then(A,A),z.current}let Q0=(r,A)=>void qt({op:"set",key:r,value:A}).catch(()=>{});async function j0(r,A){let _=N.current?.inspector?.id;if(_)try{let B=await qt({op:"add",kind:"image",parentId:_,name:`${A}\u56FE\u7247`});await qt({op:"set",id:_,key:r,value:B.selectedId}),R(`${A}\u5DF2\u521B\u5EFA\u5E76\u7ED1\u5B9A\uFF1B\u53EF\u5728\u63A7\u4EF6\u6811\u4E2D\u7EE7\u7EED\u7F16\u8F91\u56FE\u7247\u3002`)}catch{}}t.useEffect(()=>{let r=h?.scripts?.find(A=>A.id===Hu);He(A=>A&&r&&A.id===r.id&&A.dirty?A:r?{id:r.id,path:r.path,source:r.source,controlId:r.controlId,controlAsset:r.controlAsset,dirty:!1}:null)},[h,Hu]);function L0(r){He(A=>A&&{...A,...r,dirty:!0})}async function Wn(){let r=Yu;!r||!r.dirty||(await qt({op:"updateScript",id:r.id,path:r.path,source:r.source,controlId:r.controlId,controlAsset:r.controlAsset}),He(A=>A&&A.id===r.id?{...A,dirty:!1}:A))}function Cs(){Wn().then(()=>R("Lua \u811A\u672C\u5DF2\u4FDD\u5B58\u5230\u5F53\u524D\u5B58\u6863")).catch(()=>{})}async function Fn({silent:r=!1}={}){let A=_s;if(!A||!A.dirty)return;let _=M0(A);if(_.length){let Xa=_[0];throw r||E(Xa),new Error(Xa)}let B=await qt({op:"setServerLogic",logic:O0(A)});Bu(Es(B.serverLogic)),R("\u670D\u52A1\u7AEF\u903B\u8F91\u5DF2\u4FDD\u5B58\u5230\u5F53\u524D\u5B58\u6863")}function Z0(){Fn({silent:!0}).catch(()=>{})}function Be(r){Cs(),Z0(),L(r)}async function Rs(r={}){let A=await qt({op:"addScript",...r}),_=A.scripts?.[A.scripts.length-1];return _&&kn(_.id),R(r.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"),_}function V0(r){Yu?.id===r&&He(null),qt({op:"removeScript",id:r}).then(()=>R("\u811A\u672C\u5DF2\u5220\u9664")).catch(()=>{})}function k0(r){qt({op:"updateScript",id:r,controlId:""}).then(()=>R("\u5DF2\u89E3\u9664\u6302\u8F7D\uFF0C\u811A\u672C\u4ECD\u4FDD\u7559\u5728\u5B58\u6863\u4E2D")).catch(()=>{})}function K0(r){let A=N.current?.selectedId||"",_=N.current?.asset?.type||"";A&&(He(B=>B&&B.id===r?{...B,controlId:A,controlAsset:_}:B),qt({op:"updateScript",id:r,controlId:A,controlAsset:_}).then(()=>R("\u5DF2\u6302\u8F7D\u5230\u5F53\u524D\u63A7\u4EF6")).catch(()=>{}))}async function Hs(r){if(N.current?.asset?.type!==r)try{let A=await qt({op:"selectAsset",assetType:r});Cu(""),Ru(r==="client-control-template"?"template":"child"),R(`\u5DF2\u5207\u6362\u5230\u5B58\u6863\u5185\u7684${A.asset.label}`)}catch{}}function J0(r,A){let _=N.current;if(!_)return;let B=_.asset?.type==="client-control-template"&&wa==="template",Xa=B?{op:"addTemplate",kind:r,name:`${A}\u6A21\u677F`}:{op:"add",kind:r,parentId:H0(_.root,_.selectedId),name:A};qt(Xa).then(()=>R(B?`\u5DF2\u65B0\u589E${A}\u6A21\u677F`:`\u5DF2\u6DFB\u52A0${A}\u5B50\u63A7\u4EF6`)).catch(()=>{})}async function Pn(r,A=""){try{await z.current.catch(()=>{});let _=await j(s,"export",{format:r,assetType:A});if(Array.isArray(_?.files)&&_.files.length){for(let B of _.files)d(B);E(""),R(`\u5DF2\u5BFC\u51FA ${_.files.length} \u4E2A GIA \u6587\u4EF6\uFF08${_.files.map(B=>B.filename).join("\u3001")}\uFF09\uFF1B\u82E5\u6D4F\u89C8\u5668\u62E6\u622A\u591A\u6587\u4EF6\u4E0B\u8F7D\uFF0C\u8BF7\u5141\u8BB8\u540E\u91CD\u8BD5\u3002`);return}d(_),E(""),R(_.warnings?.length?`\u5DF2\u5BFC\u51FA ${_.filename}\uFF1B\u90E8\u5206\u5185\u5BB9\u6682\u4E0D\u652F\u6301 GIA\u3002`:`\u5DF2\u5BFC\u51FA ${_.filename}`)}catch(_){E(_?.message||String(_))}}async function $0(r){if(r)try{await z.current.catch(()=>{});let A=await j(s,"load-archive",{path:r});Ye(A.snapshot,{keepLogicDraft:!1}),E(""),R(`\u5DF2\u4ECE\u5DE5\u4F5C\u533A\u62C9\u53D6 ${r}`)}catch(A){E(A?.message||String(A))}}async function W0(r){if(!r)return;let A=r.name.toLowerCase().endsWith(".gia")?"gia":r.name.toLowerCase().endsWith(".json")?"json":r.name.toLowerCase().endsWith(".lua")?"lua":"";if(!A){E("\u4EC5\u652F\u6301 .json\u3001.gia \u6216 .lua \u6587\u4EF6");return}try{await z.current.catch(()=>{});let _=await j(s,"import",{format:A,filename:r.name,data:await o(r)});Ye(_.snapshot,{keepLogicDraft:!1}),E(""),R([`\u5DF2\u5BFC\u5165 ${r.name}`,..._.warnings||[]].join(`
34
+ `))}catch(_){E(_?.message||String(_))}finally{P.current&&(P.current.value="")}}async function F0(){let r=window.open("about:blank","_blank");if(!r){E("\u6D4F\u89C8\u5668\u963B\u6B62\u4E86\u8BD5\u73A9\u6807\u7B7E\u9875\uFF0C\u8BF7\u5141\u8BB8\u6B64\u7AD9\u70B9\u6253\u5F00\u65B0\u6807\u7B7E\u9875\u540E\u91CD\u8BD5\u3002");return}r.document.write('<!doctype html><meta charset="utf-8"><title>\u6B63\u5728\u51C6\u5907\u8BD5\u73A9\u2026</title><style>html{color-scheme:light dark;font:14px system-ui}body{min-height:100vh;margin:0;display:grid;place-items:center;background:Canvas;color:CanvasText}</style><p>\u6B63\u5728\u4FDD\u5B58\u9879\u76EE\u5E76\u51C6\u5907\u8BD5\u73A9\u2026</p>');try{await Wn(),await Fn(),r.location.replace(a(s))}catch(A){r.close(),E(A?.message||String(A))}}async function P0(){if(!(Dt||!w?.trim())){jl(!0);try{await Wn(),await Fn(),await z.current.catch(()=>{});let r=N.current,A=await j(s,"save",{path:w.trim(),expectedRevision:r.version});Ye(await j(s,"get")),R(`\u5DF2\u4FDD\u5B58\u5230 ${A.path}`),E(""),nt(null),$n()}catch(r){E(r?.message||String(r))}finally{jl(!1)}}}if(t.useEffect(()=>{h?.inspector?.kind==="server-container"&&Ll("base")},[h?.inspector?.kind]),!h)return n("div",{className:"qxsim","data-theme":q,"data-qxsim-session-id":s},n("div",{className:"qxsim-status error"},Y||"\u6B63\u5728\u8F7D\u5165\u5343\u661F\u6C99\u7BB1\u2026"));let xa=h.canvas.width,Ga=h.canvas.height,wu=Kn.width>0&&Kn.height>0?Math.min((Kn.width-44)/xa,(Kn.height-54)/Ga):NaN,I0=Number.isFinite(wu)&&wu>0?Math.min(2,Math.round(wu*1e3)/1e3):.5,tp=_u==="fit"?I0:Number(_u)||.5,Ys=D(xa,Ga),lp=(h.canvas.presets||[]).filter(r=>r.platform===h.canvas.platform);function ap(r){if(!h||h.canvas.platform===r)return;let A=(h.canvas.presets||[]).filter(B=>B.platform===r);if(!A.length)return;let _=A.find(B=>G(B)===Ys)||A[0];qt({op:"setCanvas",canvasId:_.id}).then(()=>R(`\u5DF2\u5207\u6362\u5230${_.label}`)).catch(()=>{})}let yt=h.asset?.type==="client-control-template",Gu=!!(h.inspector&&h.inspector.kind!=="server-container"),Xu=new Set;for(let r of h.tree||[])(Uu[r.id]||(r.ancestorIds||[]).some(A=>Uu[A]))&&Xu.add(r.id);let ep=(h.boxes||[]).filter(r=>r.kind!=="server-container"&&r.visible&&!Xu.has(r.id));function np(r,A){r.stopPropagation(),G0(_=>{let B={..._};return B[A]?delete B[A]:B[A]=!0,B})}let Bs=h.tree.filter(r=>!Vn.trim()||`${r.name} ${r.label}`.toLowerCase().includes(Vn.trim().toLowerCase())),ft=h.tree.find(r=>r.id===h.selectedId),ip=yt&&ft?h.tree.filter(r=>r.id!==ft.id&&!(r.ancestorIds||[]).includes(ft.id)):[],up=ft?.parentId||h.root.id;return n("div",{className:"qxsim","data-theme":q,"data-qxsim-session-id":s},w!==null?n("div",{className:"qxsim-save-overlay"},n("form",{className:"qxsim-save-dialog",role:"dialog","aria-modal":!0,"aria-label":"\u4FDD\u5B58\u5230\u5DE5\u4F5C\u533A",onSubmit:r=>{r.preventDefault(),P0()}},n("h2",null,"\u4FDD\u5B58\u5230\u5DE5\u4F5C\u533A"),n("label",null,"\u5B58\u6863\u76F8\u5BF9\u8DEF\u5F84",n("input",{autoFocus:!0,required:!0,value:w,disabled:Dt,onChange:r=>nt(r.target.value)})),Y?n("div",{role:"alert"},Y):null,n("footer",null,n("button",{className:"qxsim-action",type:"button",disabled:Dt,onClick:()=>nt(null)},"\u53D6\u6D88"),n("button",{className:"qxsim-action primary",type:"submit",disabled:Dt||!w.trim()},Dt?"\u4FDD\u5B58\u4E2D\u2026":"\u4FDD\u5B58")))):null,n("header",{className:"qxsim-toolbar"},n("div",{className:"qxsim-brand",title:`${h.workspace?.bound?h.workspace.path:"\u5DE5\u4F5C\u533A\u672A\u7ED1\u5B9A"}
34
35
  ${h.meta?.sourceFile||"\u5C1A\u672A\u5BFC\u5165\u6587\u4EF6"}`},n("span",{className:"qxsim-appicon"},"UI"),n("span",{className:"qxsim-brand-text"},n("strong",null,`\u5B58\u6863\uFF1A${h.save?.name||h.meta?.name||"\u672A\u547D\u540D\u5B58\u6863"}`),n("span",null,`\u5DE5\u4F5C\u533A\uFF1A${h.workspace?.bound?h.workspace.name:"\u672A\u7ED1\u5B9A"} \xB7 \u5F53\u524D\u8D44\u4EA7\uFF1A${h.asset?.label||"UI\u63A7\u4EF6"}`))),n("div",{className:"qxsim-toolbar-center"},kt==="ui"?n(t.Fragment,null,n("div",{className:"qxsim-device-switch",role:"group","aria-label":"\u76EE\u6807\u8BBE\u5907"},O.map(r=>n("button",{key:r.key,className:h.canvas.platform===r.key?"active":"",title:r.title,onClick:()=>ap(r.key)},r.label))),n("select",{className:"qxsim-control ratio","aria-label":"\u5C4F\u5E55\u6BD4\u4F8B",value:h.canvasId,onChange:r=>void qt({op:"setCanvas",canvasId:r.target.value}).catch(()=>{})},lp.map(r=>n("option",{key:r.id,value:r.id},`${G(r)} \xB7 ${r.width}\xD7${r.height}`))),n("select",{className:"qxsim-control zoom","aria-label":"\u753B\u5E03\u7F29\u653E",value:_u,onChange:r=>w0(r.target.value)},[["fit","\u9002\u5E94"],["0.25","25%"],["0.5","50%"],["0.75","75%"],["1","100%"]].map(([r,A])=>n("option",{key:r,value:r},A)))):n("span",{className:"qxsim-muted"},kt==="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")),n("div",{className:"qxsim-actions"},e?n("button",{className:"qxsim-action",title:"\u4FDD\u5B58\u5B8C\u6574\u5B58\u6863\u5230\u5DE5\u4F5C\u533A",onClick:()=>{E(""),nt(N.current?.storage?.path||"qxqy-simulator.save.json")}},"\u4FDD\u5B58\u5B58\u6863"):null,n("div",{className:"qxsim-io"},n("input",{ref:P,hidden:!0,type:"file",accept:".json,.gia,.lua,application/json,application/octet-stream,text/plain",onChange:r=>void W0(r.target.files?.[0])}),n("select",{className:"qxsim-control zoom","aria-label":"\u4ECE\u5DE5\u4F5C\u533A\u62C9\u53D6\u5B58\u6863",defaultValue:"",onFocus:()=>void $n(),onChange:r=>{let A=r.target.value;r.target.value="",A&&$0(A)}},n("option",{value:"",disabled:!0},h.workspace?.bound?"\u2913 \u5DE5\u4F5C\u533A\u5B58\u6863":"\u5DE5\u4F5C\u533A\u672A\u7ED1\u5B9A"),...ut.length?ut.map(r=>n("option",{key:r.path,value:r.path},`${r.name} \xB7 ${r.path}`)):[n("option",{value:"",disabled:!0},h.workspace?.bound?"\u672A\u53D1\u73B0 qxqy-simulator-save":"\u5148\u7ED1\u5B9A\u4F1A\u8BDD\u5DE5\u4F5C\u533A")]),n("button",{className:"qxsim-action",title:"\u5BFC\u5165\u5B58\u6863\u3001\u5355\u9879 UI \u8D44\u4EA7\u6216 Lua",onClick:()=>P.current?.click()},"\u21E7 \u5BFC\u5165"),n("select",{className:"qxsim-control zoom","aria-label":"\u5BFC\u51FA\u683C\u5F0F",defaultValue:"",onChange:r=>{let[A,_=""]=r.target.value.split("|");r.target.value="",A&&Pn(A,_)}},n("option",{value:"",disabled:!0},"\u21E9 \u5BFC\u51FA"),n("option",{value:"save"},"\u8D44\u4EA7\u5305 JSON\uFF08\u4E09\u7C7B\u5408\u4E00\uFF09"),n("option",{value:"save-gia"},"\u8D44\u4EA7\u5305 GIA\uFF08\u5DF2\u6539\u52A8\u9879\uFF09"),n("option",{value:"gia-combined"},"\u8D44\u4EA7\u5305 GIA \u6574\u5408\u5305\uFF08\u63A7\u4EF6+\u811A\u672C\uFF09"),n("optgroup",{label:"\u5F53\u524D\u754C\u9762\uFF08\u5DE6\u680F\u6B63\u5728\u770B\u7684\u90A3\u68F5\u6811\uFF09"},n("option",{value:"json"},"\u5F53\u524D\u754C\u9762 Authoring JSON"),n("option",{value:"gia"},"\u5F53\u524D\u754C\u9762 GIA")),n("optgroup",{label:"\u670D\u52A1\u5668\u63A7\u4EF6\u6A21\u677F"},n("option",{value:"json|server-control-template"},"Authoring JSON"),n("option",{value:"gia|server-control-template"},"GIA")),n("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"},n("option",{value:"json|client-control-template"},"Authoring JSON"),n("option",{value:"gia|client-control-template"},"GIA")),n("optgroup",{label:"Lua \u811A\u672C"},n("option",{value:"scripts"},"\u811A\u672C\u5305 JSON\uFF08\u5168\u90E8\u811A\u672C\uFF09"),n("option",{value:"scripts-gia"},"\u811A\u672C\u5305 GIA\uFF08\u5168\u90E8\u811A\u672C\uFF09")))),n("button",{className:"qxsim-action primary",title:"\u5728\u72EC\u7ACB\u6807\u7B7E\u9875\u4E2D\u8BD5\u73A9",onClick:F0},"\u25B7 \u8BD5\u73A9 \u2197"),n("button",{className:"qxsim-iconbtn",title:"\u91CD\u65B0\u8F7D\u5165",onClick:Jn},"\u21BB"))),n("nav",{className:"qxsim-editor-nav","aria-label":"\u7F16\u8F91\u9875\u9762"},n("button",{className:kt==="ui"?"active":"",onClick:()=>Be("ui")},"UI \u7F16\u8F91"),n("button",{className:kt==="script"?"active":"",onClick:()=>Be("script")},"Lua \u811A\u672C"),n("button",{className:kt==="logic"?"active":"",onClick:()=>Be("logic")},"\u670D\u52A1\u7AEF\u903B\u8F91"),n("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")),kt==="ui"?n("div",{className:"qxsim-main"},n("aside",{className:"qxsim-tree"},n("div",{className:"qxsim-asset-switch","aria-label":"\u7F16\u8F91\u8D44\u6E90\u7C7B\u578B"},n("button",{className:yt?"":"active",title:"\u7F16\u8F91\u5B58\u6863\u5185\u7684\u670D\u52A1\u7AEF UI \u63A7\u4EF6",onClick:()=>void Hs("server-control-template")},"UI\u63A7\u4EF6-\u670D\u52A1\u7AEF"),n("button",{className:yt?"active":"",title:"\u7F16\u8F91\u5B58\u6863\u5185\u7684\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F",onClick:()=>void Hs("client-control-template")},"UI\u63A7\u4EF6-\u5BA2\u6237\u7AEF")),n("div",{className:"qxsim-pane-head"},n("div",{className:"qxsim-pane-title"},yt?"\u6A21\u677F\u4E0E\u5B50\u63A7\u4EF6":"\u63A7\u4EF6\u6811"),n("span",{className:"qxsim-muted"},yt?`${h.asset.templateCount} \u4E2A\u6A21\u677F \xB7 ${h.tree.length} \u4E2A\u63A7\u4EF6`:`${h.tree.length} \u4E2A\u8282\u70B9`)),n("label",{className:"qxsim-search"},"\u2315",n("input",{value:Vn,placeholder:yt?"\u641C\u7D22\u6A21\u677F\u6216\u63A7\u4EF6":"\u641C\u7D22\u63A7\u4EF6",onChange:r=>Cu(r.target.value)}),Vn?n("button",{onClick:()=>Cu("")},"\xD7"):n("span",null,"\u2301")),n("div",{className:"qxsim-tree-scroll"},Bs.length?Bs.map(r=>{let A=c[r.kind]||["\u25C7",r.label],_=Xu.has(r.id),B=!!Uu[r.id];return n("div",{key:r.id,className:`qxsim-row${yt&&r.depth===0?" template-root":""}${r.id===h.selectedId?" active":""}${_?" canvas-hidden":""}`,style:{paddingLeft:8+r.depth*18,"--depth":r.depth},title:`${A[1]} \xB7 ${r.name} \xB7 GUID ${r.guid??r.id}`,onClick:()=>void qt({op:"select",id:r.id}).catch(()=>{})},n("span",{className:"qxsim-chevron"},r.childCount?"\u25BC":""),n("span",{className:"qxsim-kind"},A[0]),n("span",{className:"qxsim-row-label"},r.name),n("span",{className:"qxsim-row-end"},yt&&r.depth===0?n(t.Fragment,null,n("span",{className:"qxsim-template-tag"},"\u6A21\u677F"),n("span",{className:"qxsim-template-id"},`#${r.guid??r.id}`)):r.incomplete?n("span",{className:"qxsim-incomplete"},"\u6682\u4E0D\u652F\u6301"):null,n("button",{className:`qxsim-eye${B?" off":""}`,type:"button",title:B?"\u5728\u753B\u5E03\u4E0A\u663E\u793A\uFF08\u4E0D\u5F71\u54CD\u63A7\u4EF6\u521D\u59CB\u53EF\u89C1\u6027\uFF09":"\u5728\u753B\u5E03\u4E0A\u9690\u85CF\uFF08\u4E0D\u5F71\u54CD\u63A7\u4EF6\u521D\u59CB\u53EF\u89C1\u6027\uFF09","aria-label":`${r.name}\u753B\u5E03\u53EF\u89C1\u6027`,"aria-pressed":!B,onClick:Xa=>np(Xa,r.id)},B?"\u25CC":"\u25C9")))}):n("div",{className:"qxsim-empty"},"\u6CA1\u6709\u5339\u914D\u7684\u63A7\u4EF6")),n("div",{className:"qxsim-tree-foot"},yt&&ft?n("div",{className:"qxsim-hierarchy"},n("div",{className:"qxsim-hierarchy-head"},n("strong",null,"\u5C42\u7EA7\u4E0E\u6A21\u677F\u8FB9\u754C"),n("span",null,ft.name)),n("div",{className:"qxsim-parent-row"},n("select",{"aria-label":"\u7236\u7EA7\u63A7\u4EF6",value:up,onChange:r=>void qt({op:"reparent",id:ft.id,parentId:r.target.value}).then(()=>R(r.target.value===h.root.id?"\u5DF2\u63D0\u5347\u4E3A\u53EF\u5B9E\u4F8B\u5316\u9876\u5C42\u6A21\u677F":"\u5DF2\u8C03\u6574\u63A7\u4EF6\u7236\u7EA7")).catch(()=>{})},n("option",{value:h.root.id},"\u9876\u5C42\u6A21\u677F\uFF08\u53EF\u5B9E\u4F8B\u5316\uFF09"),ip.map(r=>n("option",{key:r.id,value:r.id},`${"\u3000".repeat(r.depth)}${r.name}`))),n("button",{title:"\u5728\u540C\u7EA7\u4E2D\u4E0A\u79FB",disabled:ft.siblingIndex<=0,onClick:()=>void qt({op:"moveSibling",id:ft.id,direction:"up"}).catch(()=>{})},"\u2191"),n("button",{title:"\u5728\u540C\u7EA7\u4E2D\u4E0B\u79FB",disabled:ft.siblingIndex>=ft.siblingCount-1,onClick:()=>void qt({op:"moveSibling",id:ft.id,direction:"down"}).catch(()=>{})},"\u2193")),n("div",{className:"qxsim-hierarchy-note"},ft.depth===0?"\u8BE5\u8282\u70B9\u4F1A\u5199\u5165\u72EC\u7ACB UIControlTemplate\uFF0C\u53EF\u76F4\u63A5\u4F5C\u4E3A prefabId\u3002":`\u5F53\u524D\u4E3A\u7B2C ${ft.depth} \u5C42\u5B50\u63A7\u4EF6\uFF0C\u4E0D\u4F1A\u5355\u72EC\u6210\u4E3A prefabId\u3002`)):null,n("div",{className:"qxsim-palette-head"},n("span",{title:yt&&wa==="template"?"\u65B0\u589E\u72EC\u7ACB\u53EF\u5B9E\u4F8B\u5316\u6A21\u677F":`\u6DFB\u52A0\u5230${ft?ft.name:"\u5F53\u524D\u63A7\u4EF6"}`},yt&&wa==="template"?"\u65B0\u589E\u9876\u5C42\u6A21\u677F":`\u6DFB\u52A0\u5230${ft?`\u201C${ft.name}\u201D`:"\u5F53\u524D\u63A7\u4EF6"}`),yt?n("span",{className:"qxsim-add-mode"},n("button",{className:wa==="template"?"active":"",onClick:()=>Ru("template")},"\u9876\u5C42"),n("button",{className:wa==="child"?"active":"",onClick:()=>Ru("child")},"\u5B50\u63A7\u4EF6")):null),n("div",{className:"qxsim-add"},f.filter(([r])=>yt||r!=="container").map(([r,A])=>n("button",{key:r,title:`${yt&&wa==="template"?"\u65B0\u589E":"\u6DFB\u52A0"}${A}`,onClick:()=>J0(r,A)},`\uFF0B ${A}`))))),n("main",{className:"qxsim-center"},n("div",{className:"qxsim-workspace",ref:Us},n("div",{className:"qxsim-stage-shell",style:{width:`${Math.max(40,Math.round(xa*tp))}px`}},n("div",{className:"qxsim-stage-label"},n("b",null,yt?"Lua \u6A21\u677F\u9884\u89C8":"\u754C\u9762\u63A7\u4EF6\u7EC4"),n("span",{className:"qxsim-platform-tag"},h.canvas.platform),n("span",null,`${Ys} \xB7 ${xa}\xD7${Ga} \xB7 \u5DE6\u4E0B\u539F\u70B9`)),n("div",{className:"qxsim-stage",style:{width:"100%",aspectRatio:`${xa} / ${Ga}`},onClick:r=>{let A=r.currentTarget.getBoundingClientRect();qt({op:"pick",x:(r.clientX-A.left)*xa/A.width,y:(A.bottom-r.clientY)*Ga/A.height}).catch(()=>{})}},ep.map(r=>Y0(r,h,xa,Ga))))),Y?n("div",{className:"qxsim-status error"},"\u26A0 ",Y):n("div",{className:"qxsim-status"},n("span",null,`\u25CF ${h.asset?.label||"\u63A7\u4EF6"}\u7F16\u8F91`),n("span",null,J||(ft?`\u5F53\u524D\uFF1A${ft.name}`:"")),n("span",{className:"spacer"}),n("span",null,yt?"GIA \u5BFC\u51FA\u540E\u53EF\u5728 Lua \u4E2D\u6309 prefabId \u5B9E\u4F8B\u5316":"\u5B57\u6BB5\u5728\u5931\u7126\u6216 Enter \u65F6\u63D0\u4EA4"))),n("aside",{className:"qxsim-inspector"},h.inspector?n(t.Fragment,null,n("div",{className:"qxsim-inspector-head"},n("div",{className:"qxsim-inspector-line"},n("span",{className:"qxsim-kind"},(c[h.inspector.kind]||["\u25C7"])[0]),n("strong",null,h.inspector.label),yt&&ft?.depth===0?n("span",{className:"qxsim-template-tag"},"\u53EF\u5B9E\u4F8B\u5316"):null),n("div",{className:"qxsim-node-id"},yt&&ft?.depth===0?"\u5BFC\u51FA prefabId ":"\u63A7\u4EF6 GUID ",n("code",null,h.inspector.guid??h.inspector.id)," \xB7 ",ft?.name||"\u8282\u70B9",yt&&ft?.depth===0?n("small",null,"\uFF08\u771F\u5B9E\u7F16\u8F91\u5668\u5BFC\u5165\u540E\u53EF\u80FD\u91CD\u6620\u5C04\uFF09"):null)),n("div",{className:"qxsim-tabs",style:Gu?void 0:{gridTemplateColumns:"1fr"}},n("button",{className:Al==="base"?"active":"",onClick:()=>Ll("base")},"\u57FA\u7840\u5C5E\u6027"),Gu?n("button",{className:Al==="script"?"active":"",onClick:()=>Ll("script")},"\u811A\u672C"):null),n("div",{className:"qxsim-inspector-scroll"},Gu&&Al==="script"?n(C0,{snap:h,addScriptMounted:r=>void Rs({controlId:r,controlAsset:h.asset?.type}).then(()=>Be("script")),mountScriptTo:K0,unmountScript:k0,openScript:r=>{kn(r),Be("script")}}):n(E0,{inspector:h.inspector,commit:Q0,createStateChild:j0})),n("div",{className:"qxsim-tree-foot"},n("button",{className:"qxsim-action danger",style:{width:"100%"},onClick:()=>void qt({op:"remove"}).catch(()=>{})},yt&&ft?.depth===0?"\u232B \u5220\u9664\u5F53\u524D\u6A21\u677F":"\u232B \u5220\u9664\u5F53\u524D\u63A7\u4EF6"))):n("div",{className:"qxsim-empty"},"\u8BF7\u9009\u62E9\u4E00\u4E2A\u63A7\u4EF6"))):kt==="script"?n(z0,{snap:h,selectedScriptId:Hu,selectScript:r=>{Cs(),kn(r)},draft:Yu,updateDraft:L0,saveScript:()=>void Wn().then(()=>R("Lua \u811A\u672C\u5DF2\u4FDD\u5B58\u5230\u5F53\u524D\u5B58\u6863")).catch(()=>{}),addScript:()=>void Rs(),removeScript:V0,exportLua:r=>void Pn("lua",r),exportScripts:()=>void Pn("scripts"),exportScriptsGia:()=>void Pn("scripts-gia"),notice:J}):n(U0,{snap:h,draft:_s,setDraft:Bu,saveLogic:()=>void Fn().catch(()=>{}),notice:J,error:Y}))}return{SimulatorView:B0,ensureStyle:x,removeStyle:()=>document.getElementById(i)?.remove()}}var A0="qxqy-editor-session",zu=sessionStorage.getItem(A0);zu||(zu=Array.from(crypto.getRandomValues(new Uint8Array(16)),t=>t.toString(16).padStart(2,"0")).join(""),sessionStorage.setItem(A0,zu));var N0=q0(qs.default,{async api(t,l,a={}){let e=await fetch(`/editor/api/${l}`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({sessionId:t,...a})}),n=await e.json();if(!e.ok||!n.ok)throw new Error(n.error||"\u8BF7\u6C42\u5931\u8D25");return n.value},playUrl:t=>`/editor/play#${encodeURIComponent(t)}`,saveToWorkspace:!0});N0.ensureStyle();(0,T0.createRoot)(document.getElementById("editor")).render(qs.default.createElement(N0.SimulatorView,{sessionId:zu}));
35
36
  /*! Bundled license information:
36
37