@dcl-regenesislabs/web-editor 0.3.16-40498753029.commit-6593057 → 0.3.16-40596302895.commit-0ee155d

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/editor.js +1 -1
  2. package/package.json +2 -2
package/editor.js CHANGED
@@ -35761,4 +35761,4 @@ ${n}
35761
35761
  ${r}`));return"w"+Array.from(new Uint8Array(a).slice(0,16),s=>s.toString(16).padStart(2,"0")).join("")}function wSr(t){return`${t.file===void 0?"":`${t.file}:${t.line??1}:${t.column??0}: `}${t.severity==="error"?"ERROR":"WARNING"}: ${t.message}`}function SSr(t){return t.length<=3?t.join(", "):`${t.slice(0,3).join(", ")} and ${t.length-3} more`}function TSr(t,n){const r=R1(t.get("package.json"));for(const a of[r==null?void 0:r.devDependencies,r==null?void 0:r.dependencies]){const s=typeof a=="object"&&a!==null?a["@dcl/sdk"]:void 0;if(typeof s=="string"&&s!==n)return`⚠ This project asks for @dcl/sdk ${s}; the editor builds it with ${n}.`}return null}function kSr(t){const{emit:n,log:r}=t;let a=null,s=!1,l=null,f=Promise.resolve();const m=C=>{const N=f.then(C,C);return f=N.catch(()=>{}),N};async function _(){if(s)throw new Error("The editor was closed");a===null&&(l=null);const C=a??M0r(t.urls);a=C;try{const N=await C.ready;return{builder:C,sdkVersion:N.sdkVersion,info:N}}catch(N){throw C.dispose(),a===C&&(a=null),N}}async function x(C,N,F){const{builder:B,info:H}=await _();let Z=!1;const K=await vSr(N,t.packages,H.snapshot,pe=>{t.onPackages(C,pe),F&&!Z&&r("Downloading packages from npm…"),Z=!0});K.lockFile!==void 0&&(N.set(I3,K.lockFile),await t.saveLock(C,K.lockFile));const te=K.lock===null?"":aVt(K.lock);if(te!==l)try{await B.setPackages(K.lock,t.packages),l=te}catch(pe){F&&r(`⚠ ${gOt(pe)}`),await B.setPackages(null),l=""}if(t.onPackages(C,K.status),!(!F||K.status===null)){if(K.status.state==="error")r(`✖ ${K.status.message??"The packages could not be installed"}`);else if(K.downloaded>0){const pe=Object.entries(K.status.installed).map(([fe,X])=>`${fe} ${X}`);r(`✔ Packages frozen into the scene: ${pe.join(", ")} (${K.status.total} in all)`)}for(const pe of K.status.warnings)r(`⚠ ${pe}`)}}function T(C,N,F=C){const B=_We(t.pageDir,F),H=new Set;let Z=null,K=null,te=!0,pe=!1,fe=!1,X=null;const _e=St=>(n({type:"failed",message:St}),r(`✖ Build failed: ${St.split(`
35762
35762
  `)[0]}`),!1);async function Ae(St){const mt=performance.now();n({type:"buildStarted",changed:St}),r(St.length===0?"Building the scene…":`Rebuilding: ${SSr(St)}`);try{const{builder:wt,sdkVersion:_t}=await _(),Ue=St.length===0?TSr(N,_t):null;Ue!==null&&r(Ue);const qt=St.length===0||St.includes("package.json")||St.includes(I3),{snapshot:Ve,result:Re}=await m(async()=>{(qt||l!==X)&&(await x(C,N,!0),X=l);const xt=new Map(N);return{snapshot:xt,result:await wt.build(xt)}});if(fe)return!1;const $t=Re.diagnostics.filter(xt=>xt.severity==="error"||xt.file===void 0||Ve.has(xt.file));n({type:"diagnostics",diagnostics:$t.map(({severity:xt,message:ut,file:Nt,line:Ut,column:Wt})=>({severity:xt,message:ut,file:Nt,line:Ut,column:Wt}))});for(const xt of $t)r(wSr(xt));if(!Re.ok){const xt=Re.events.find(ut=>ut.type==="failed");return _e((xt==null?void 0:xt.type)==="failed"?xt.message:"The build produced no bundle")}const vt=R1(Ve.get("scene.json"));return vt===null?_e("scene.json is missing or is not valid JSON"):(await qbr({realmUrl:B,projectId:F,files:Ve,buildOutputs:Re.outputs,sceneJson:vt,sdkVersion:_t,machineId:await t.machineId(F)}),fe?!1:(n({type:"bundleSaved"}),r(`✔ Built in ${Math.round(performance.now()-mt)} ms`),!0))}catch(wt){return fe?!1:_e(gOt(wt))}}function qe(){return fe?Promise.resolve(!1):(K!==null||(K=(async()=>{for(;(te||H.size>0)&&!fe;){const St=te?[]:[...H];te=!1,H.clear(),pe=await Ae(St)}return pe&&!fe})().finally(()=>{K=null})),K)}return{id:C,files:N,start:qe,flush(){return Z!==null&&clearTimeout(Z),Z=null,qe()},async published(){const St=await(await caches.open(Oxe)).match(gWe(B)),mt=await(St==null?void 0:St.json().catch(()=>{})),wt=mt==null?void 0:mt.entity;return(wt==null?void 0:wt.id)===NXe(F,await t.machineId(F))},changed(St){fe||(H.add(St),Z!==null&&clearTimeout(Z),Z=setTimeout(()=>{Z=null,qe()},bSr))},stop(){fe=!0,Z!==null&&clearTimeout(Z)}}}return{realmUrl:C=>_We(t.pageDir,C),open:T,async build(C,N,F){const{builder:B,sdkVersion:H}=await _();return m(async()=>(await x(C,N,!1),{...await B.build(N,F),sdkVersion:H}))},install:(C,N)=>m(()=>x(C,N,!1)),dispose(){s=!0,a==null||a.dispose(),a=null}}}const vOt=64*1024*1024,ESr=4*1024*1024;function CSr(t,n){return t.length>8192?!1:n==="POST"?t==="/content/entities/active":n!=="GET"&&n!=="HEAD"?!1:t==="/about"||t==="/scene.json"||/^\/content\/contents\/(?:b64-[A-Za-z0-9+/=]+|[A-Za-z0-9]+)$/.test(decodeURIComponent(t))}function ASr(t,n,r){const a=t===null?null:new URL(t).origin;let s="",l=null,f="",m="",_=new AbortController,x=0,T=0;const C=(B,H=[])=>{l!==null&&a!==null&&l.postMessage({...B,session:n,instance:s},a,H)},N=async B=>{var _e;if(typeof B.requestId!="string"||B.requestId.length>128||typeof B.path!="string")return;const H=B.requestId;if(x>=64){C({type:"realm-response",requestId:H,error:"Too many preview resource requests"});return}const Z=_,K=l,te=new AbortController,pe=setTimeout(()=>te.abort(new Error("Preview resource timed out")),3e4);let fe=0,X;x++;try{const Ae=new URL(f+B.path);if(!Ae.href.startsWith(f+"/")||!CSr(B.path,B.method))throw new Error("Invalid preview resource");if(B.body!==void 0&&(!(B.body instanceof ArrayBuffer)||B.body.byteLength>1024*1024))throw new Error("Invalid preview request body");const qe=await fetch(Ae,{method:String(B.method),credentials:"omit",redirect:"error",signal:AbortSignal.any([Z.signal,te.signal]),headers:{"Content-Type":"application/json"},body:B.method==="POST"?B.body:void 0}),St=qe.headers.get("Content-Type")??"application/octet-stream",mt=St.includes("application/json")?ESr:vOt;if(X=(_e=qe.body)==null?void 0:_e.getReader(),Number(qe.headers.get("Content-Length"))>mt)throw new Error("Preview resource exceeds the memory limit");const wt=[];if(X!==void 0)for(;;){const{done:Ve,value:Re}=await X.read();if(Ve)break;if(fe+=Re.byteLength,T+=Re.byteLength,fe>mt||T>vOt)throw new Error("Preview resource exceeds the memory limit");wt.push(Re)}const _t=new Uint8Array(fe);let Ue=0;for(const Ve of wt)_t.set(Ve,Ue),Ue+=Ve.byteLength;wt.length=0;let qt=_t.buffer;if(B.method!=="HEAD"&&qt.byteLength>0&&St.includes("application/json")){const Ve=JSON.parse(new TextDecoder().decode(qt)),Re=$t=>typeof $t=="string"?$t.startsWith(f+"/")||$t===f?m+$t.slice(f.length):$t:Array.isArray($t)?$t.map(Re):_l($t)?Object.fromEntries(Object.entries($t).map(([vt,xt])=>[vt,Re(xt)])):$t;qt=new TextEncoder().encode(JSON.stringify(Re(Ve))).buffer}!Z.signal.aborted&&K===l&&C({type:"realm-response",requestId:H,status:qe.status,headers:{"Content-Type":St},body:qt},[qt])}catch(Ae){!Z.signal.aborted&&K===l&&C({type:"realm-response",requestId:H,error:Ae instanceof Error?Ae.message:String(Ae)})}finally{clearTimeout(pe),te.abort(),X!==void 0&&X.cancel().catch(Ae=>{Ae instanceof Error&&Ae.name==="AbortError"||console.warn("Preview stream cleanup:",Ae)}),T-=fe,x--}},F=B=>{const H=B.data;B.origin!==a||!_l(H)||H.session!==n||H.instance!==s||s===""||(H.type==="connect"&&l===null&&B.source!==null&&"postMessage"in B.source&&(l=B.source),!(B.source!==l||l===null)&&(H.type==="realm-request"?N(H):r(H)))};return window.addEventListener("message",F),{send:C,reset:(B="",H="",Z="")=>{_.abort(),_=new AbortController,l=null,s=B,f=H,m=Z},dispose:()=>{_.abort(),window.removeEventListener("message",F)}}}function OSr(t,n){return["localhost","127.0.0.1","[::1]"].includes(new URL(t).hostname)?"http://127.0.0.1:8788/mobile-preview/index.html":n===null?null:new URL("mobile-preview/index.html",n.replace(/\/$/,"")+"/").href}function PSr(t){if(t===null)return null;const n=new URL(t).hostname;return n==="decentraland.zone"||n.endsWith(".decentraland.zone")?"zone":null}function ISr(t,n,r,a=null){const s=crypto.randomUUID(),l=ASr(t,s,fe=>pe(fe)),f=new Set,m=new Map;let _={mode:"closed",url:null,ready:!1},x=null,T="",C="",N=0,F=null,B=!1,H=null;const Z=fe=>{_=fe;for(const X of f)X()},K=()=>{C!==""&&l.send({type:"stop",session:s,instance:C}),l.reset(),H==null||H.close(),H=null,C="";for(const fe of m.values())fe.reject(new Error("The mobile preview was closed."));m.clear(),Z({mode:"closed",url:null,ready:!1})},te=()=>{N++,x=null,K()};window.addEventListener("pagehide",te);const pe=fe=>{if(!_l(fe)||fe.session!==s||fe.instance!==C||(fe.type==="ready"&&(Z({..._,ready:!0}),l.send({type:"visibility",session:s,instance:C,visible:_.mode!=="minimized"})),fe.type==="closed"&&te(),fe.type!=="capture"||typeof fe.requestId!="string"))return;const X=m.get(fe.requestId);X!==void 0&&(typeof fe.error=="string"?X.reject(new Error(fe.error)):typeof fe.image=="string"&&fe.image.length<=4e6&&typeof fe.width=="number"&&fe.width>0&&fe.width<=1024&&typeof fe.height=="number"&&fe.height>0&&fe.height<=1024?X.resolve({mimeType:"image/jpeg",image:fe.image,width:fe.width,height:fe.height}):X.reject(new Error("The mobile preview sent an invalid picture.")))};return{state:()=>_,status:()=>({mode:_.mode,ready:_.ready}),subscribe:fe=>(f.add(fe),()=>f.delete(fe)),open:async(fe,X,_e="embedded")=>{if(B||t===null)return{ok:!1,reason:"unavailable"};const Ae=fe.replace(/\/$/,"");if(_.mode===_e&&x===Ae)return N++,{ok:!0};if((_e==="embedded"||_e==="minimized")&&(_.mode==="embedded"||_.mode==="minimized")&&x===Ae){if(N++,Z({..._,mode:_e}),l.send({type:"visibility",session:s,instance:C,visible:_e!=="minimized"}),_e==="minimized")for(const qt of m.values())qt.reject(new Error("Restore the mobile preview before taking a picture."));return{ok:!0}}if(_e==="minimized")return{ok:!1,reason:"unavailable"};const qe=_e==="tab"?window.open("about:blank",`dcl-phone-preview-${crypto.randomUUID()}`):null;if(_e==="tab"&&qe===null)return{ok:!1,reason:"unavailable"};const St=++N;if(!await fetch(t,{method:"HEAD",signal:AbortSignal.timeout(5e3)}).then(qt=>qt.ok,()=>!1)||St!==N||B||qe!=null&&qe.closed)return qe==null||qe.close(),{ok:!1,reason:"unavailable"};if(K(),await new Promise(qt=>setTimeout(qt,100)),St!==N||B||qe!=null&&qe.closed)return qe==null||qe.close(),{ok:!1,reason:"unavailable"};C=crypto.randomUUID();const wt=new URL(t);wt.searchParams.set("previewSession",s),wt.searchParams.set("previewInstance",C),wt.searchParams.set("editorOrigin",window.location.origin),_e==="tab"&&wt.searchParams.set("previewDetached","1"),wt.searchParams.set("maxpixels",String(1600*720)),T=new URL(`realm/${s}/${C}`,t).href,l.reset(C,Ae,T);const _t=new URL("decentraland://open");_t.searchParams.set("preview",T),_t.searchParams.set("position",X);const Ue=["--local-editor-preview","--skip-lobby","--guest-profile","--fake-deeplink",_t.href];return a!==null&&Ue.push("--dclenv",a),wt.searchParams.set("args",Ue.join(" ")),x=Ae,Z({mode:_e,url:wt.href,ready:!1}),H=qe,qe!==null&&NSr(qe,wt.href),{ok:!0}},close:te,capture:async fe=>{if(fe.throwIfAborted(),_.mode==="closed"||!_.ready)throw new Error("Open the mobile preview and wait for it to load before taking a picture.");_.mode==="minimized"&&(F=N,Z({..._,mode:"embedded"}),l.send({type:"visibility",session:s,instance:C,visible:!0}));const X=crypto.randomUUID();try{return await new Promise((_e,Ae)=>{const qe=()=>{clearTimeout(mt),fe.removeEventListener("abort",St),m.delete(X)},St=()=>{qe(),Ae(fe.reason)},mt=setTimeout(()=>{qe(),Ae(new Error("The mobile preview did not answer. Bring its tab to the foreground and retry."))},1e4);m.set(X,{resolve:wt=>{qe(),_e(wt)},reject:wt=>{qe(),Ae(wt)}}),fe.addEventListener("abort",St,{once:!0}),l.send({type:"capture",session:s,instance:C,requestId:X})})}finally{m.size===0&&(F===N&&_.mode==="embedded"&&(Z({..._,mode:"minimized"}),l.send({type:"visibility",session:s,instance:C,visible:!1})),F=null)}},built:async fe=>{if(x===null)return;const X=x,_e=await n(fe),Ae=NXe(_e,await r(_e));!B&&X===x&&l.send({type:"scene-updated",session:s,instance:C,realm:T,entityId:Ae})},dispose:()=>{te(),B=!0,window.removeEventListener("pagehide",te),l.dispose(),f.clear()}}}function NSr(t,n){const r=t.document;r.title="Mobile scene preview",r.body.style.cssText="margin:0;background:#19191c;overflow:hidden";const a=r.createElement("iframe");a.title="Mobile scene preview",a.allow="autoplay; fullscreen; gamepad; cross-origin-isolated",a.style.cssText="width:100vw;height:100vh;border:0;display:block",a.src=n,r.body.replaceChildren(a)}const DSr=200,RSr=2e3,MSr=/^\((?:no logs|\+\d+ older entries not retained)\)$/;function LSr(t,n){for(let r=Math.min(t.length,n.length);r>0;r--){const a=t.length-r;if(n.slice(0,r).every((s,l)=>s===t[a+l]))return n.slice(r)}return[...n]}function FSr(t,n){let r=[],a=!1,s;const l=async()=>{try{const f=await t(`scene_logs ${DSr} --server`);if(a)return;const m=f.split(`
35763
35763
  `).filter(_=>_.trim()!==""&&!MSr.test(_.trim()));for(const _ of LSr(r,m))n(_);r=m}catch{}a||(s=setTimeout(()=>void l(),RSr))};return l(),()=>{a=!0,clearTimeout(s)}}function jSr(t,n,r){r.throwIfAborted();const a=nt.scene,s=[...t].sort().join(";");return new Promise((l,f)=>{const m=()=>{clearTimeout(N),T(),r.removeEventListener("abort",C)},_=F=>{m(),f(F)},x=()=>{var B;nt.scene===a||nt.status!=="ready"||!nt.frozen||((B=nt.scene)==null?void 0:B.parcels.map(H=>`${H.x},${H.y}`).sort().join(";"))!==s||(m(),l())},T=MWe(x),C=()=>_(r.reason),N=setTimeout(()=>_(new Error("The preview has not loaded the new parcels. Retry sceneSettings before building outside the current layout.")),9e4);r.addEventListener("abort",C,{once:!0});try{n(),x()}catch(F){_(F)}})}const BSr=new Set(["node_modules",".git","bin","dist"]),USr=300*1024,$Sr=56,zSr=5;function VSr(t){const n=t.origin,r=typeof n=="object"&&n!==null&&!Array.isArray(n)?n:null;return r!==null&&(r.source==="import"||r.source==="github")?r:{...r??{},source:"user"}}function WSr(t,n){const r=new Map;let a=new Map;function s(m,_){if(_.size>USr)return t.blob(m,_.hash);let x=r.get(_.hash);return x===void 0&&(x=t.blob(m,_.hash),r.set(_.hash,x),x.catch(()=>r.delete(_.hash))),x}const l={async folders(){const m=await t.list();return a=new Map(m.map(x=>[x.name,x])),(await Promise.all(m.map(async x=>{const T=x.files["data.json"];if(T===void 0)return null;const C=await s(x.name,T).then(F=>new TextDecoder().decode(F),()=>null);if(C===null)return null;const N=Object.fromEntries(Object.entries(x.files).map(([F,B])=>[F,B.size]));return{name:x.name,data:C,files:N}}))).filter(x=>x!==null)},async read(m,_){var T;const x=(T=a.get(m.name))==null?void 0:T.files[_];if(x===void 0)throw new Error(`${m.name}/${_} is not in your library`);return s(m.name,x)}};async function f(m,_){const x={},T=new Map;for(const[N,F]of _){const B=await n(F);x[N]={hash:B,size:F.length},T.set(B,F)}const C=[...T].map(([N,F])=>({hash:N,size:F.length}));for(const N of await t.uploads(m,C)){const F=T.get(N.hash);F!==void 0&&await t.putBlob(N,F)}await t.put(m,x)}return{tree:l,async copyOut(m,_){const[x,T,C]=_.split("/");if(x!=="custom"||T===void 0||C!==void 0||!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(T))throw new Error(`not a prefab folder: ${_}`);const N=`${_}/`,F=new Map;for(const[X,_e]of m.files()){const Ae=X.slice(N.length);X.startsWith(N)&&!Ae.split("/").some(qe=>BSr.has(qe))&&F.set(Ae,_e)}const B=F.get("data.json"),H=B===void 0?null:Mq(new TextDecoder().decode(B));if(H===null)throw new Error(`${_} has no readable data.json`);const Z={...H,id:typeof H.id=="string"?H.id:crypto.randomUUID(),origin:VSr(H)},K=`${JSON.stringify(Z,null,2)}
35764
- `;F.set("data.json",new TextEncoder().encode(K));const te=PWe(GVt(H,T)).slice(0,$Sr).replace(/_+$/,"")||"prefab",pe=new Set((await t.list()).map(X=>X.name));let fe=1;for(let X=0;X<zSr;X++){let _e=te;for(;pe.has(_e);)_e=`${te}_${++fe}`;try{return await f(_e,F),{ref:`user:${_e}`,scope:"user",data:K}}catch(Ae){if(!(Ae instanceof RVt))throw Ae;pe.add(_e)}}throw new Error("could not find a free name in your library — try again")},remove:m=>t.remove(m)}}const bOt=new WeakMap;function qSr(t){let n=bOt.get(t);return n===void 0&&(n=crypto.subtle.digest("SHA-256",new Uint8Array(t)).then(r=>[...new Uint8Array(r)].map(a=>a.toString(16).padStart(2,"0")).join("")),bOt.set(t,n)),n}async function GSr(t){const n=t.get(".dclignore"),r=RXe(t.keys(),n===void 0?void 0:new TextDecoder().decode(n)).filter(l=>l!==I3),a=new Map;let s=0;for(const l of r){const f=t.get(l);f!==void 0&&(a.set(await qSr(f),f.byteLength),s++)}return{bytes:[...a.values()].reduce((l,f)=>l+f,0),files:s}}const xOt=4e3,HSr=4e6,JSr=FOt*24*60*60*1e3,QSr="assets/images",YSr=3e3,XSr=100,ZSr="Sign in to keep prefabs in your own library. The built-in prefabs work without it.",KSr=t=>t instanceof Error?t.message:String(t);function ZBe(t,n){var r,a,s;return{realm:n.replace(/\/$/,""),systemScene:"",position:((r=t.scene)==null?void 0:r.base)??((s=(a=t.scene)==null?void 0:a.parcels)==null?void 0:s[0])??"0,0",spawn:kxr(t),spawnPoints:JSON.stringify(Array.isArray(t.spawnPoints)?t.spawnPoints:[])}}const eTr=({host:t,sceneCompiler:n})=>{const r=new awr(Kxr()),a=jE(t),s=a===null||a.services.projects===null?null:DVt(a.services.projects,(Qn,Mr)=>a.signedFetch(Qn,Mr)),l=()=>{const{address:Qn,isGuest:Mr}=t.identity();return Mr||Qn===null?null:Qn.toLowerCase()},f=[],m=[],_=[],x=[],T=[],C=Qn=>{f.push(Qn),f.length>xOt&&f.splice(0,f.length-xOt);for(const Mr of m)Mr(Qn)},N=ISr(OSr(t.pageDir,(a==null?void 0:a.services.projects)??null),_e,async Qn=>yOt(await Z,l()??"guest",Qn),PSr((a==null?void 0:a.services.worldsContent)??null)),F=Qn=>{for(const Mr of _)Mr(Qn);Qn.type==="bundleSaved"&&pe!==null&&N.built(pe.id).catch(Mr=>console.error("[editor] mobile preview reload failed",Mr))},B=new Map,H=new Set,Z=C3t.then(xSr),K=kSr({pageDir:t.pageDir,urls:n,machineId:async Qn=>yOt(await Z,l()??"guest",Qn),emit:F,log:C,packages:r.packages,saveLock:async(Qn,Mr)=>{await r.write(Qn,I3,Mr),xt.touched(Qn,I3),(pe==null?void 0:pe.id)===Qn&&pe.files.set(I3,Mr)},onPackages:(Qn,Mr)=>{if(Mr===null){B.delete(Qn);return}B.set(Qn,Mr);for(const ei of H)ei(Qn,Mr)}});let te=null,pe=null,fe=null,X=null;async function _e(Qn){var Ua;const Mr=(Ua=(await r.list()).find(ts=>ts.id===Qn))==null?void 0:Ua.previewId;if(Mr!==void 0)return Mr;const ei="p"+Array.from(crypto.getRandomValues(new Uint8Array(16)),ts=>ts.toString(16).padStart(2,"0")).join("");return await r.patch(Qn,{previewId:ei}),ei}async function Ae(Qn){const Mr=new URL("preview/",t.pageDir).href,ei=await caches.open(Oxe);for(const Ua of await ei.keys())Ua.url.startsWith(Mr)&&(Qn===null||!Ua.url.startsWith(Qn))&&await ei.delete(Ua)}let qe=0,St=Promise.resolve(),mt=Promise.resolve();const wt=Zbr({service:(a==null?void 0:a.services.projects)??null,fetch:(Qn,Mr)=>a===null?Promise.reject(new Error("The assistant service is not configured.")):a.signedFetch(Qn,Mr),wallet:l,mobilePreview:N.status,memory:{read:async(Qn,Mr)=>{const ei=await r.assistantMemory(Qn,Mr);return _l(ei)&&typeof ei.id=="string"&&typeof ei.key=="string"?{id:ei.id,key:ei.key}:null},write:(Qn,Mr,ei)=>r.setAssistantMemory(Qn,Mr,ei)},project:()=>{const Qn=Tt();return{id:Qn.id,tools:{files:()=>Qn.files,write:(Mr,ei,Ua,ts)=>qt(Qn.id,Mr,ei,{expected:Ua,signal:ts}),assets:mxr({files:()=>Qn.files,write:(Mr,ei,Ua,ts)=>qt(Qn.id,Mr,ei,{expected:Ua,signal:ts})}),scene:(Mr,ei)=>MXe(Mr,ei,async Ua=>{var ii,Tl,Yu;const ts=tf=>{var nu,Es;return JSON.stringify([(nu=tf==null?void 0:tf.scene)==null?void 0:nu.parcels,(Es=tf==null?void 0:tf.scene)==null?void 0:Es.base])};await KA();const $c=ts(R1(await Ue(Qn.id,"scene.json")));await tn(Qn.id,tf=>Oxr(tf,Ua));const du=R1(await Ue(Qn.id,"scene.json")),or=ts(du)!==$c,Pl=((ii=du==null?void 0:du.scene)==null?void 0:ii.parcels)??[],Im=(Tl=nt.scene)==null?void 0:Tl.parcels.map(tf=>`${tf.x},${tf.y}`).sort().join(";");if(or||Im!==[...Pl].sort().join(";")){if(!await Qn.flush())throw new Error("The scene did not build. Fix the code and retry sceneSettings to load the new parcels.");ei.throwIfAborted();const tf=await _e(Qn.id);te=ZBe(du??{},K.realmUrl(tf)),await jSr(Pl,()=>{for(const nu of x)nu(te)},ei)}else if(te!==null){const tf=ZBe(du??{},te.realm);(tf.spawn!==te.spawn||tf.spawnPoints!==te.spawnPoints)&&(te={...te,spawn:tf.spawn,spawnPoints:tf.spawnPoints},jlr(tf.spawn,tf.spawnPoints))}return{requiredPermissions:(du==null?void 0:du.requiredPermissions)??[],spawnPoints:(du==null?void 0:du.spawnPoints)??[],parcels:Pl,base:((Yu=du==null?void 0:du.scene)==null?void 0:Yu.base)??null,previewReady:!0}}),written:t1r(),view:(Mr,ei)=>uxr(Mr,ei),playtest:xxr,build:async Mr=>{Mr.throwIfAborted(),await mt;const ei=await K.build(Qn.id,new Map(Qn.files));if(Mr.throwIfAborted(),!ei.ok)return{ok:!1,diagnostics:ei.diagnostics,mobilePreview:N.status()};const Ua=await gxr();return Mr.throwIfAborted(),{ok:!0,diagnostics:ei.diagnostics,run:Ua,mobilePreview:N.status()}}}}}});function _t(){wt.reset(),X==null||X(),X=null,pe!==null&&(pe.stop(),r.close(pe.id),xt.flush(pe.id),pe=null,fe=null)}async function Ue(Qn,Mr){return(pe==null?void 0:pe.id)===Qn?pe.files.get(Mr):r.read(Qn,Mr).catch(ei=>{if(!pI(ei))throw ei})}function qt(Qn,Mr,ei,Ua){const ts=mt.then(async()=>{if(Ua==null||Ua.signal.throwIfAborted(),Ua!==void 0&&((pe==null?void 0:pe.id)!==Qn||!Qbr(pe.files.get(Mr),Ua.expected)))throw new Error("This file changed. Read it again before writing.");await r.write(Qn,Mr,ei),xt.touched(Qn,Mr),(pe==null?void 0:pe.id)===Qn&&(pe.files.set(Mr,ei),pe.changed(Mr))});return mt=ts.catch($c=>console.error("[editor] file write failed",$c)),ts}function Ve(Qn,Mr){const ei=mt.then(async()=>{const Ua=await r.remove(Qn,Mr);return Ua&&xt.touched(Qn,Mr),Ua&&(pe==null?void 0:pe.id)===Qn&&pe.files.delete(Mr)&&pe.changed(Mr),Ua});return mt=ei.catch(Ua=>console.error("[editor] file removal failed",Ua)),ei}function Re(Qn){const Mr=Tt();if(Mr.id!==Qn)throw new Error("that scene is not the one open");return{files:()=>Mr.files,write:(ei,Ua)=>qt(Qn,ei,Ua),remove:async ei=>{await Ve(Qn,ei)}}}async function $t(Qn){var Ua;const Mr=R1(await Ue(Qn,"scene.json").catch(()=>{})),ei=(((Ua=Mr==null?void 0:Mr.display)==null?void 0:Ua.title)??"").replace(/[\x00-\x1f\x7f]/g,"").replace(new RegExp(NVt.source,"g"),"").trim().slice(0,XSr);return ei===""?Qn:ei}async function vt(Qn,Mr){const ei=(await r.list()).find(ts=>ts.id===Qn);if(ei===void 0)return null;const Ua=await r.duplicate(Qn,`${ei.name} ${Mr}`,xt.remoteIds());return await tn(Ua.id,ts=>{var $c;return{...ts,display:{...ts.display??{},title:`${(($c=ts.display)==null?void 0:$c.title)||ei.name} ${Mr}`}}}),Ua.id}const xt=fwr({store:r,session:()=>{const Qn=l();return s===null||Qn===null?null:{api:s,wallet:Qn}},account:()=>s===null?"unavailable":l()===null?"guest":"on",hash:Exe,title:$t,duplicate:async Qn=>{const Mr=await vt(Qn,LOt(new Date));if(Mr===null)throw new Error("The scene is no longer on this device");return Mr}});let ut=!1,Nt=0;async function Ut(){const Qn=++Nt,Mr=l()!==null&&(await wt.shell.aiProviders()).some(ei=>ei.available);Qn!==Nt||Mr===ut||(ut=Mr,G0())}Ut();let Wt=l();const Me=setInterval(()=>{const Qn=l();Qn!==Wt&&(Wt=Qn,wt.reset(),G0(),Ut(),xt.refresh(!0),Ae(fe).catch(Mr=>console.warn("[editor] could not clear the previews",Mr)))},YSr),Ke=()=>{document.visibilityState==="hidden"&&xt.flush()};document.addEventListener("visibilitychange",Ke);const st=new Set;async function tn(Qn,Mr){const ei=R1(await Ue(Qn,"scene.json"));if(ei===null)throw new Error("scene.json is missing or is not valid JSON");await qt(Qn,"scene.json",zAt(Mr(ei)))}async function An(Qn,Mr){if(Mr==null||Mr==="")return null;const ei=await Ue(Qn,Mr).catch(()=>{});return ei===void 0||ei.length>HSr?null:VAt(Mr,ei)}async function un(Qn,Mr=xt.status().projects){var Ua,ts,$c,du;const ei=R1(await Ue(Qn.id,"scene.json").catch(()=>{}));return{sync:Mr[Qn.id],path:Qn.id,name:Qn.name,title:((Ua=ei==null?void 0:ei.display)==null?void 0:Ua.title)||Qn.name,world:((ts=ei==null?void 0:ei.worldConfiguration)==null?void 0:ts.name)||null,parcels:Array.isArray(($c=ei==null?void 0:ei.scene)==null?void 0:$c.parcels)?ei.scene.parcels.length:0,thumbnail:await An(Qn.id,(du=ei==null?void 0:ei.display)==null?void 0:du.navmapThumbnail),favourite:Qn.favourite,lastOpened:Qn.lastOpened,published:Qn.published,deletedAt:Qn.deletedAt??void 0}}async function Tn(Qn,Mr){var Ua,ts;_t(),f.length=0,F({type:"sessionStarted"});const ei=$c=>{if(_t(),Mr===qe){C(`✖ ${$c}`);for(const du of T)du($c)}};try{if(await xt.prepareOpen(Qn,(ii,Tl)=>C(`Downloading from your account… ${ii}/${Tl}`)),Mr!==qe)return;if(!await r.open(Qn)){ei("This scene is open in another tab. Close it there to edit it here.");return}const $c=await r.readAll(Qn).then(async ii=>{for(const[Tl,Yu]of U0r(ii))await qt(Qn,Tl,Yu),ii.set(Tl,Yu);return ii}).catch(ii=>{throw r.close(Qn),ii});if(Mr!==qe){r.close(Qn);return}const du=await _e(Qn);if(Mr!==qe){r.close(Qn);return}const or=K.open(Qn,$c,du);pe=or;const Pl=K.realmUrl(du);if(fe=Pl,C(`▶ Opening ${((ts=(Ua=R1(or.files.get("scene.json")))==null?void 0:Ua.display)==null?void 0:ts.title)||Qn}`),!await or.start()&&!await or.published()){if(Mr!==qe)return;C("✖ The scene did not build.");for(const ii of T)ii("The scene did not build.");return}if(await r.patch(Qn,{lastOpened:Date.now()}),Mr!==qe){_t();return}const Im=R1(or.files.get("scene.json"))??{};te=ZBe(Im,Pl),X=FSr(ii=>t.engineConsole(ii),C);for(const ii of x)ii(te)}catch($c){ei(KSr($c))}}function fi(Qn){N.close(),te=null;const Mr=++qe,ei=wt.reset(),Ua=St.then(async()=>{await ei,await mt,Mr===qe&&await Qn(Mr)});return St=Ua.catch(ts=>console.error("[editor] project transition failed",ts)),Ua}function Tt(){if(pe===null)throw new Error("no project is open");return pe}const Bi={saveFile:async({path:Qn,content:Mr})=>qt(Tt().id,Qn,Mr),getFile:async({path:Qn})=>{const Mr=Tt().files.get(Qn)??oSr(Qn);if(Mr===void 0)throw new Error(`no such file: ${Qn}`);return{content:Mr}},removeFiles:async({filePaths:Qn})=>{const Mr=Tt(),ei=[],Ua=[];for(const ts of Qn)(await Ve(Mr.id,ts).catch(()=>!1)?ei:Ua).push(ts);return{success:ei,failed:Ua}},getFilesSizes:async({path:Qn,ignore:Mr})=>{const ei=Qn===""?"":`${Qn.replace(/\/+$/,"")}/`;return{files:[...Tt().files.keys()].filter(ts=>ts.startsWith(ei)&&!ts.split("/").some($c=>Mr.includes($c))).sort().map(ts=>({path:ts}))}}},jr={async find(Qn){return(await r.list()).some(Mr=>Mr.id===Qn)?!0:(await xt.refresh(!0),xt.remoteOnly().some(Mr=>Mr.id===Qn))},files:async Qn=>(pe==null?void 0:pe.id)===Qn?new Map(pe.files):r.readAll(Qn),manifest:Qn=>xt.manifest(Qn),build:async(Qn,Mr)=>K.build(Qn,await jr.files(Qn),Mr),dependencies:async Qn=>AVt(await Ue(Qn,"package.json")),onImported:Qn=>(st.add(Qn),()=>st.delete(Qn))},go=a===null?null:Zxr({host:a,setWorld:async(Qn,Mr)=>{var Ua,ts;((ts=(Ua=R1(await Ue(Qn,"scene.json")))==null?void 0:Ua.worldConfiguration)==null?void 0:ts.name)!==Mr&&await tn(Qn,$c=>({...$c,worldConfiguration:{...$c.worldConfiguration??{},name:Mr}}))},files:Qn=>jr.files(Qn),build:(Qn,Mr)=>K.build(Qn,Mr,{production:!0}),published:(Qn,Mr)=>r.patch(Qn,{published:Mr})}),la=(a==null?void 0:a.services.projects)==null?null:WSr(cwr(a.services.projects,(Qn,Mr)=>a.signedFetch(Qn,Mr)),Exe);wur(N1r(t.editorBase)),D1r(t.editorBase),vpr(async()=>GSr(await jr.files(Tt().id)));const tc=_Sr({builtin:Cwr(t.editorBase,_B("prefabs/catalog.json"),fTe),user:()=>la!==null&&l()!==null?la.tree:null}),Kc={...(a==null?void 0:a.services.projects)==null?{}:{...wt.shell,aiOffered:()=>ut,aiTranscript:()=>{const Qn=Wt;if(Qn===null||pe===null)return null;const Mr=pe.id;return{owner:`${Mr}@${Qn.toLowerCase()}`,load:()=>r.transcript(Mr,Qn),save:ei=>r.setTranscript(Mr,Qn,ei)}}},pickProject:async()=>{},openProject:Qn=>fi(Mr=>Tn(Qn,Mr)),relaunchProject:Qn=>fi(Mr=>Tn(Qn,Mr)),closeProject:()=>fi(async()=>{_t(),F({type:"sessionStarted"}),C("■ Scene closed"),await Ae(null).catch(Qn=>console.warn("[editor] could not clear the previews",Qn))}),getState:async()=>{const Qn=await r.list(),Mr=xt.status().projects,ei=xt.remoteOnly().map(Ua=>({path:Ua.id,name:Ua.name,title:Ua.name,world:null,parcels:0,thumbnail:null,remoteOnly:!0}));return{recentProjects:[...Qn].sort((Ua,ts)=>ts.lastOpened-Ua.lastOpened).map(Ua=>Ua.id),projects:[...await Promise.all(Qn.map(Ua=>un(Ua,Mr))),...ei],logs:[...f],bevyWebDir:"",editorSceneDir:"",webPort:0,scenePort:0,editorScenePort:0,favourites:Qn.filter(Ua=>Ua.favourite).map(Ua=>Ua.id)}},onStackLog:Qn=>{m.push(Qn)},onBuildEvent:Qn=>{_.push(Qn)},onServersReady:Qn=>{x.push(Qn)},requestReady:async()=>te,phonePreview:async Qn=>te===null?{ok:!1,reason:"no-scene"}:N.open(te.realm,te.position,Qn),phonePreviewState:N.state,onPhonePreviewState:N.subscribe,closePhonePreview:N.close,capturePhonePreview:N.capture,onServersError:Qn=>{T.push(Qn)},toggleFavourite:async Qn=>{const Mr=(await r.list()).find(ei=>ei.id===Qn);Mr!==void 0&&await r.patch(Qn,{favourite:!Mr.favourite})},deleteProject:async Qn=>{const Mr=await r.trash(Qn);return Mr&&xt.trashed(Qn),Mr},trashedProjects:async()=>Promise.all((await r.trashed()).map(Qn=>un(Qn))),restoreProject:async Qn=>{const Mr=await r.restore(Qn);return Mr&&xt.restored(Qn),Mr},syncStatus:async()=>(xt.refresh(),xt.status()),onSyncStatus:Qn=>xt.subscribe(Qn),resolveSyncConflict:(Qn,Mr)=>xt.resolve(Qn,Mr),exportProject:async Qn=>Twr(await $t(Qn),await jr.files(Qn)),importProject:async Qn=>{const Mr=await Ewr(Qn,async(ei,Ua)=>{const ts=await r.create(ei,Ua,{taken:xt.remoteIds()});return xt.touched(ts.id,"scene.json"),ts.id});if((Mr==null?void 0:Mr.ok)===!0){const{id:ei,needsPackages:Ua}=Mr.report;Object.keys(Ua).length>0&&r.readAll(ei).then(ts=>K.install(ei,ts)).catch(ts=>console.warn("[editor] could not install the packages of",ei,ts));for(const ts of st)ts(Mr.report)}return Mr},projectPackages:async Qn=>B.get(Qn)??null,onProjectPackages:Qn=>(H.add(Qn),()=>H.delete(Qn)),...go===null||a===null?{}:{publishScene:(Qn,Mr,ei)=>go.publish(Qn,Mr,ei),publishStop:async()=>go.stop(),publishWorlds:async()=>{const Qn=l();return Qn===null?[]:Qxr(Qn,a.services.worldsContent.replace(/\/+$/,""))}},canImportFolder:Swr(),renameProject:(Qn,Mr)=>tn(Qn,ei=>({...ei,display:{...ei.display??{},title:Mr.trim()}})),duplicateProject:Qn=>vt(Qn,"copy"),sceneTemplates:async()=>iSr(),createScene:async(Qn,Mr,ei)=>{const Ua=WVt(ei),ts=R1(Ua.get("scene.json"));if(ts===null)throw new Error(`template not found: ${ei}`);Ua.set("scene.json",zAt({...ts,display:{...ts.display??{},title:Mr.trim()}}));const $c=await r.create(Mr,Ua,{taken:xt.remoteIds()});return xt.touched($c.id,"scene.json"),$c.id},openExternal:async Qn=>{/^https?:$/.test(new URL(Qn).protocol)&&window.open(Qn,"_blank","noopener,noreferrer")},compositeEntityIds:async Qn=>{for(const Mr of Exr){const ei=await Ue(Qn,Mr);if(ei!==void 0)return Cxr(new TextDecoder().decode(ei))}return[]},sceneSettings:async Qn=>{const Mr=R1(await Ue(Qn,"scene.json"));if(Mr===null)throw new Error("scene.json is missing or is not valid JSON");const ei=wxr(Mr);return{...ei,thumbnail:await An(Qn,ei.thumbnailPath)}},saveSceneSettings:async(Qn,Mr)=>{const ei=Sxr(Mr);return ei!==null?ei:(await tn(Qn,Ua=>Txr(Ua,Mr)),null)},pickSceneThumbnail:async Qn=>{const Mr=await VVt(Object.values(xWe).join(","));if(Mr===null)return null;const ei=EVt(Mr.name);if(xWe[ei]===void 0)throw new Error("not a supported image (png, jpg, gif, webp)");const Ua=`${QSr}/scene-thumbnail${ei}`,ts=new Uint8Array(await Mr.arrayBuffer());return await qt(Qn,Ua,ts),{path:Ua,dataUrl:VAt(Ua,ts)}},appVersion:async()=>Gbr,prefabLibraryList:()=>tc.list(),prefabLibraryCopyIn:async(Qn,Mr)=>tc.copyIn(Qn,Re(Mr)),prefabLibraryUpdateCopy:async(Qn,Mr)=>tc.updateCopy(Qn,Re(Mr)),prefabUserLibrary:()=>la===null?"unavailable":l()===null?"guest":"on",...la===null?{}:{prefabLibraryCopyOut:async(Qn,Mr)=>{if(l()===null)throw new Error(ZSr);return la.copyOut(Re(Qn),Mr)},prefabLibraryDelete:async Qn=>{const Mr=qVt(Qn);return(Mr==null?void 0:Mr.scope)==="user"&&l()!==null?la.remove(Mr.name):!1}}};async function uu(){const Qn=new Set;for(const Mr of[...await r.list(),...await r.trashed()]){const ei=iVt(await Ue(Mr.id,I3).catch(()=>{}));for(const Ua of Object.keys((ei==null?void 0:ei.packages)??{}))Qn.add(Ua);for(const[Ua,ts]of Object.entries((ei==null?void 0:ei.dependencies)??{}))Qn.add(Vj(Ua,ts))}for(const Mr of await r.packages.keys())Qn.has(Mr)||await r.packages.remove(Mr)}return r.purge(Date.now()-JSr).then(async Qn=>{const Mr=await caches.open(Oxe),ei=Qn.map(({id:ts,previewId:$c})=>K.realmUrl($c??ts));for(const ts of await Mr.keys())ei.some($c=>ts.url.startsWith($c))&&await Mr.delete(ts);const Ua=await caches.open(Wbr);for(const ts of ei)await Ua.delete(`${ts}__storage`);Qn.length>0&&await uu()}).catch(Qn=>console.warn("[editor] could not empty the trash",Qn)),{shell:Kc,projects:jr,dataLayer:Bi,dispose:()=>{N.dispose(),wt.dispose(),qe++,_t(),K.dispose(),clearInterval(Me),document.removeEventListener("visibilitychange",Ke),xt.flush().finally(()=>xt.dispose())}}};let Wj=null,vG=null,Kne=null,wOt=!1;function tTr(){if(Wj!==null)return Wj;const t=window.__dclEditorHost;if(t===void 0||t.version!==0&&t.version!==1)return console.error("[editor] window.__dclEditorHost (contract v0 or v1) is missing: nothing to mount into"),null;console.log("[editor] web build 2026-10-27T11:48:01.782Z"),UOt(t),kIt(a=>t.engineConsole(a)),M3t(()=>t.identity()),Zqn.needed=!1;const n=eTr({host:t,sceneCompiler:I1r(t.editorBase)});window.editorShell=nTr(n.shell,t),eDt(n.dataLayer??null),CGe();const r=document.createElement("link");return r.rel="stylesheet",r.href=new URL("editor.css",t.editorBase).href,r.integrity=_B("editor.css"),r.crossOrigin="anonymous",r.onerror=()=>console.error("[editor] editor.css did not load or does not match the hash this editor was published with: its fonts are not applied"),document.head.appendChild(r),CE.project=null,CE.notice=null,Wj={host:t,web:n,fonts:r},Wj}function Dxe(){const t=vG;vG=null,t==null||t.unmount()}function nTr(t,n){const{createScene:r,importProject:a,duplicateProject:s}=t;return{...t,...r===void 0?{}:{createScene:async(l,f,m)=>{const _=await r(l,f,m);return _!==null&&Xx("project_created",{project_id:_,source:"template",template:m}),_}},...a===void 0?{}:{importProject:async l=>{const f=await a(l);return(f==null?void 0:f.ok)===!0&&Xx("project_created",{project_id:f.report.id,source:"import",import_kind:l}),f}},...s===void 0?{}:{duplicateProject:async l=>{const f=await s(l);return f!==null&&Xx("project_created",{project_id:f,source:"duplicate",from_project_id:l}),f}},openProject:async l=>{const f=vG;Dxe(),f==null||f.api.close(),Kne??(Kne=DFt(n.container,O.jsx(S0r,{}))),n.setMode("edit"),CE.project=l,CE.opens++,await t.openProject(l),Xx("project_opened")}}}function rTr(t,n){var m;const r=tTr();if(r===null)return()=>{};Dxe();const a=document.createElement("div");a.style.cssText="position:relative;width:100%;height:100%",Nqn(a),t.appendChild(a);const s=DFt(a,O.jsx(Mqn,{}),"eui-create-root"),l={api:n,unmount:()=>{s(),a.remove()}};vG=l;const f=wOt?null:((m=jE(r.host))==null?void 0:m.openProject)??null;return wOt=!0,Xx("editor_opened",{deep_link:f!==null}),f!==null&&r.web.projects.find(f).catch(()=>!1).then(_=>{var x;vG===l&&(_?(x=window.editorShell)==null||x.openProject(f):CE.notice=`“${f}” is not on this device or on your account. Here are your scenes.`)}),()=>{vG===l&&Dxe()}}function iTr(){Dxe();const t=Wj;if(t===null)return;Wj=null;const n=KA();Kne==null||Kne(),Kne=null,t.fonts.remove(),CE.project=null,delete window.editorShell,M3t(null),kIt(null),UOt(null),t.host.setMode("off"),n.finally(()=>{var r,a;(a=(r=t.web).dispose)==null||a.call(r),Wj===null&&eDt(null)})}window.__dclEditor={mountHome:rTr,unmount:iTr};
35764
+ `;F.set("data.json",new TextEncoder().encode(K));const te=PWe(GVt(H,T)).slice(0,$Sr).replace(/_+$/,"")||"prefab",pe=new Set((await t.list()).map(X=>X.name));let fe=1;for(let X=0;X<zSr;X++){let _e=te;for(;pe.has(_e);)_e=`${te}_${++fe}`;try{return await f(_e,F),{ref:`user:${_e}`,scope:"user",data:K}}catch(Ae){if(!(Ae instanceof RVt))throw Ae;pe.add(_e)}}throw new Error("could not find a free name in your library — try again")},remove:m=>t.remove(m)}}const bOt=new WeakMap;function qSr(t){let n=bOt.get(t);return n===void 0&&(n=crypto.subtle.digest("SHA-256",new Uint8Array(t)).then(r=>[...new Uint8Array(r)].map(a=>a.toString(16).padStart(2,"0")).join("")),bOt.set(t,n)),n}async function GSr(t){const n=t.get(".dclignore"),r=RXe(t.keys(),n===void 0?void 0:new TextDecoder().decode(n)).filter(l=>l!==I3),a=new Map;let s=0;for(const l of r){const f=t.get(l);f!==void 0&&(a.set(await qSr(f),f.byteLength),s++)}return{bytes:[...a.values()].reduce((l,f)=>l+f,0),files:s}}const xOt=4e3,HSr=4e6,JSr=FOt*24*60*60*1e3,QSr="assets/images",YSr=3e3,XSr=100,ZSr="Sign in to keep prefabs in your own library. The built-in prefabs work without it.",KSr=t=>t instanceof Error?t.message:String(t);function ZBe(t,n){var r,a,s;return{realm:n.replace(/\/$/,""),systemScene:"",position:((r=t.scene)==null?void 0:r.base)??((s=(a=t.scene)==null?void 0:a.parcels)==null?void 0:s[0])??"0,0",spawn:kxr(t),spawnPoints:JSON.stringify(Array.isArray(t.spawnPoints)?t.spawnPoints:[])}}const eTr=({host:t,sceneCompiler:n})=>{const r=new awr(Kxr()),a=jE(t),s=a===null||a.services.projects===null?null:DVt(a.services.projects,(Qn,Mr)=>a.signedFetch(Qn,Mr)),l=()=>{const{address:Qn,isGuest:Mr}=t.identity();return Mr||Qn===null?null:Qn.toLowerCase()},f=[],m=[],_=[],x=[],T=[],C=Qn=>{f.push(Qn),f.length>xOt&&f.splice(0,f.length-xOt);for(const Mr of m)Mr(Qn)},N=ISr(OSr(t.pageDir,(a==null?void 0:a.services.projects)??null),_e,async Qn=>yOt(await Z,l()??"guest",Qn),PSr((a==null?void 0:a.services.worldsContent)??null)),F=Qn=>{for(const Mr of _)Mr(Qn);Qn.type==="bundleSaved"&&pe!==null&&N.built(pe.id).catch(Mr=>console.error("[editor] mobile preview reload failed",Mr))},B=new Map,H=new Set,Z=C3t.then(xSr),K=kSr({pageDir:t.pageDir,urls:n,machineId:async Qn=>yOt(await Z,l()??"guest",Qn),emit:F,log:C,packages:r.packages,saveLock:async(Qn,Mr)=>{await r.write(Qn,I3,Mr),xt.touched(Qn,I3),(pe==null?void 0:pe.id)===Qn&&pe.files.set(I3,Mr)},onPackages:(Qn,Mr)=>{if(Mr===null){B.delete(Qn);return}B.set(Qn,Mr);for(const ei of H)ei(Qn,Mr)}});let te=null,pe=null,fe=null,X=null;async function _e(Qn){var Ua;const Mr=(Ua=(await r.list()).find(ts=>ts.id===Qn))==null?void 0:Ua.previewId;if(Mr!==void 0)return Mr;const ei="p"+Array.from(crypto.getRandomValues(new Uint8Array(16)),ts=>ts.toString(16).padStart(2,"0")).join("");return await r.patch(Qn,{previewId:ei}),ei}async function Ae(Qn){const Mr=new URL("preview/",t.pageDir).href,ei=await caches.open(Oxe);for(const Ua of await ei.keys())Ua.url.startsWith(Mr)&&(Qn===null||!Ua.url.startsWith(Qn))&&await ei.delete(Ua)}let qe=0,St=Promise.resolve(),mt=Promise.resolve();const wt=Zbr({service:(a==null?void 0:a.services.projects)??null,fetch:(Qn,Mr)=>a===null?Promise.reject(new Error("The assistant service is not configured.")):a.signedFetch(Qn,Mr),wallet:l,mobilePreview:N.status,memory:{read:async(Qn,Mr)=>{const ei=await r.assistantMemory(Qn,Mr);return _l(ei)&&typeof ei.id=="string"&&typeof ei.key=="string"?{id:ei.id,key:ei.key}:null},write:(Qn,Mr,ei)=>r.setAssistantMemory(Qn,Mr,ei)},project:()=>{const Qn=Tt();return{id:Qn.id,tools:{files:()=>Qn.files,write:(Mr,ei,Ua,ts)=>qt(Qn.id,Mr,ei,{expected:Ua,signal:ts}),assets:mxr({files:()=>Qn.files,write:(Mr,ei,Ua,ts)=>qt(Qn.id,Mr,ei,{expected:Ua,signal:ts})}),scene:(Mr,ei)=>MXe(Mr,ei,async Ua=>{var ii,Tl,Yu;const ts=tf=>{var nu,Es;return JSON.stringify([(nu=tf==null?void 0:tf.scene)==null?void 0:nu.parcels,(Es=tf==null?void 0:tf.scene)==null?void 0:Es.base])};await KA();const $c=ts(R1(await Ue(Qn.id,"scene.json")));await tn(Qn.id,tf=>Oxr(tf,Ua));const du=R1(await Ue(Qn.id,"scene.json")),or=ts(du)!==$c,Pl=((ii=du==null?void 0:du.scene)==null?void 0:ii.parcels)??[],Im=(Tl=nt.scene)==null?void 0:Tl.parcels.map(tf=>`${tf.x},${tf.y}`).sort().join(";");if(or||Im!==[...Pl].sort().join(";")){if(!await Qn.flush())throw new Error("The scene did not build. Fix the code and retry sceneSettings to load the new parcels.");ei.throwIfAborted();const tf=await _e(Qn.id);te=ZBe(du??{},K.realmUrl(tf)),await jSr(Pl,()=>{for(const nu of x)nu(te)},ei)}else if(te!==null){const tf=ZBe(du??{},te.realm);(tf.spawn!==te.spawn||tf.spawnPoints!==te.spawnPoints)&&(te={...te,spawn:tf.spawn,spawnPoints:tf.spawnPoints},jlr(tf.spawn,tf.spawnPoints))}return{requiredPermissions:(du==null?void 0:du.requiredPermissions)??[],spawnPoints:(du==null?void 0:du.spawnPoints)??[],parcels:Pl,base:((Yu=du==null?void 0:du.scene)==null?void 0:Yu.base)??null,previewReady:!0}}),written:t1r(),view:(Mr,ei)=>uxr(Mr,ei),playtest:xxr,build:async Mr=>{Mr.throwIfAborted(),await mt;const ei=await K.build(Qn.id,new Map(Qn.files));if(Mr.throwIfAborted(),!ei.ok)return{ok:!1,diagnostics:ei.diagnostics,mobilePreview:N.status()};const Ua=await gxr();return Mr.throwIfAborted(),{ok:!0,diagnostics:ei.diagnostics,run:Ua,mobilePreview:N.status()}}}}}});function _t(){wt.reset(),X==null||X(),X=null,pe!==null&&(pe.stop(),r.close(pe.id),xt.flush(pe.id),pe=null,fe=null)}async function Ue(Qn,Mr){return(pe==null?void 0:pe.id)===Qn?pe.files.get(Mr):r.read(Qn,Mr).catch(ei=>{if(!pI(ei))throw ei})}function qt(Qn,Mr,ei,Ua){const ts=mt.then(async()=>{if(Ua==null||Ua.signal.throwIfAborted(),Ua!==void 0&&((pe==null?void 0:pe.id)!==Qn||!Qbr(pe.files.get(Mr),Ua.expected)))throw new Error("This file changed. Read it again before writing.");await r.write(Qn,Mr,ei),xt.touched(Qn,Mr),(pe==null?void 0:pe.id)===Qn&&(pe.files.set(Mr,ei),pe.changed(Mr))});return mt=ts.catch($c=>console.error("[editor] file write failed",$c)),ts}function Ve(Qn,Mr){const ei=mt.then(async()=>{const Ua=await r.remove(Qn,Mr);return Ua&&xt.touched(Qn,Mr),Ua&&(pe==null?void 0:pe.id)===Qn&&pe.files.delete(Mr)&&pe.changed(Mr),Ua});return mt=ei.catch(Ua=>console.error("[editor] file removal failed",Ua)),ei}function Re(Qn){const Mr=Tt();if(Mr.id!==Qn)throw new Error("that scene is not the one open");return{files:()=>Mr.files,write:(ei,Ua)=>qt(Qn,ei,Ua),remove:async ei=>{await Ve(Qn,ei)}}}async function $t(Qn){var Ua;const Mr=R1(await Ue(Qn,"scene.json").catch(()=>{})),ei=(((Ua=Mr==null?void 0:Mr.display)==null?void 0:Ua.title)??"").replace(/[\x00-\x1f\x7f]/g,"").replace(new RegExp(NVt.source,"g"),"").trim().slice(0,XSr);return ei===""?Qn:ei}async function vt(Qn,Mr){const ei=(await r.list()).find(ts=>ts.id===Qn);if(ei===void 0)return null;const Ua=await r.duplicate(Qn,`${ei.name} ${Mr}`,xt.remoteIds());return await tn(Ua.id,ts=>{var $c;return{...ts,display:{...ts.display??{},title:`${(($c=ts.display)==null?void 0:$c.title)||ei.name} ${Mr}`}}}),Ua.id}const xt=fwr({store:r,session:()=>{const Qn=l();return s===null||Qn===null?null:{api:s,wallet:Qn}},account:()=>s===null?"unavailable":l()===null?"guest":"on",hash:Exe,title:$t,duplicate:async Qn=>{const Mr=await vt(Qn,LOt(new Date));if(Mr===null)throw new Error("The scene is no longer on this device");return Mr}});let ut=!1,Nt=0;async function Ut(){const Qn=++Nt,Mr=l()!==null&&(await wt.shell.aiProviders()).some(ei=>ei.available);Qn!==Nt||Mr===ut||(ut=Mr,G0())}Ut();let Wt=l();const Me=setInterval(()=>{const Qn=l();Qn!==Wt&&(Wt=Qn,wt.reset(),G0(),Ut(),xt.refresh(!0),Ae(fe).catch(Mr=>console.warn("[editor] could not clear the previews",Mr)))},YSr),Ke=()=>{document.visibilityState==="hidden"&&xt.flush()};document.addEventListener("visibilitychange",Ke);const st=new Set;async function tn(Qn,Mr){const ei=R1(await Ue(Qn,"scene.json"));if(ei===null)throw new Error("scene.json is missing or is not valid JSON");await qt(Qn,"scene.json",zAt(Mr(ei)))}async function An(Qn,Mr){if(Mr==null||Mr==="")return null;const ei=await Ue(Qn,Mr).catch(()=>{});return ei===void 0||ei.length>HSr?null:VAt(Mr,ei)}async function un(Qn,Mr=xt.status().projects){var Ua,ts,$c,du;const ei=R1(await Ue(Qn.id,"scene.json").catch(()=>{}));return{sync:Mr[Qn.id],path:Qn.id,name:Qn.name,title:((Ua=ei==null?void 0:ei.display)==null?void 0:Ua.title)||Qn.name,world:((ts=ei==null?void 0:ei.worldConfiguration)==null?void 0:ts.name)||null,parcels:Array.isArray(($c=ei==null?void 0:ei.scene)==null?void 0:$c.parcels)?ei.scene.parcels.length:0,thumbnail:await An(Qn.id,(du=ei==null?void 0:ei.display)==null?void 0:du.navmapThumbnail),favourite:Qn.favourite,lastOpened:Qn.lastOpened,published:Qn.published,deletedAt:Qn.deletedAt??void 0}}async function Tn(Qn,Mr){var Ua,ts;_t(),f.length=0,F({type:"sessionStarted"});const ei=$c=>{if(_t(),Mr===qe){C(`✖ ${$c}`);for(const du of T)du($c)}};try{if(await xt.prepareOpen(Qn,(ii,Tl)=>C(`Downloading from your account… ${ii}/${Tl}`)),Mr!==qe)return;if(!await r.open(Qn)){ei("This scene is open in another tab. Close it there to edit it here.");return}const $c=await r.readAll(Qn).then(async ii=>{for(const[Tl,Yu]of U0r(ii))await qt(Qn,Tl,Yu),ii.set(Tl,Yu);return ii}).catch(ii=>{throw r.close(Qn),ii});if(Mr!==qe){r.close(Qn);return}const du=await _e(Qn);if(Mr!==qe){r.close(Qn);return}const or=K.open(Qn,$c,du);pe=or;const Pl=K.realmUrl(du);if(fe=Pl,C(`▶ Opening ${((ts=(Ua=R1(or.files.get("scene.json")))==null?void 0:Ua.display)==null?void 0:ts.title)||Qn}`),!await or.start()&&!await or.published()){if(Mr!==qe)return;C("✖ The scene did not build.");for(const ii of T)ii("The scene did not build.");return}if(await r.patch(Qn,{lastOpened:Date.now()}),Mr!==qe){_t();return}const Im=R1(or.files.get("scene.json"))??{};te=ZBe(Im,Pl),X=FSr(ii=>t.engineConsole(ii),C);for(const ii of x)ii(te)}catch($c){ei(KSr($c))}}function fi(Qn){N.close(),te=null;const Mr=++qe,ei=wt.reset(),Ua=St.then(async()=>{await ei,await mt,Mr===qe&&await Qn(Mr)});return St=Ua.catch(ts=>console.error("[editor] project transition failed",ts)),Ua}function Tt(){if(pe===null)throw new Error("no project is open");return pe}const Bi={saveFile:async({path:Qn,content:Mr})=>qt(Tt().id,Qn,Mr),getFile:async({path:Qn})=>{const Mr=Tt().files.get(Qn)??oSr(Qn);if(Mr===void 0)throw new Error(`no such file: ${Qn}`);return{content:Mr}},removeFiles:async({filePaths:Qn})=>{const Mr=Tt(),ei=[],Ua=[];for(const ts of Qn)(await Ve(Mr.id,ts).catch(()=>!1)?ei:Ua).push(ts);return{success:ei,failed:Ua}},getFilesSizes:async({path:Qn,ignore:Mr})=>{const ei=Qn===""?"":`${Qn.replace(/\/+$/,"")}/`;return{files:[...Tt().files.keys()].filter(ts=>ts.startsWith(ei)&&!ts.split("/").some($c=>Mr.includes($c))).sort().map(ts=>({path:ts}))}}},jr={async find(Qn){return(await r.list()).some(Mr=>Mr.id===Qn)?!0:(await xt.refresh(!0),xt.remoteOnly().some(Mr=>Mr.id===Qn))},files:async Qn=>(pe==null?void 0:pe.id)===Qn?new Map(pe.files):r.readAll(Qn),manifest:Qn=>xt.manifest(Qn),build:async(Qn,Mr)=>K.build(Qn,await jr.files(Qn),Mr),dependencies:async Qn=>AVt(await Ue(Qn,"package.json")),onImported:Qn=>(st.add(Qn),()=>st.delete(Qn))},go=a===null?null:Zxr({host:a,setWorld:async(Qn,Mr)=>{var Ua,ts;((ts=(Ua=R1(await Ue(Qn,"scene.json")))==null?void 0:Ua.worldConfiguration)==null?void 0:ts.name)!==Mr&&await tn(Qn,$c=>({...$c,worldConfiguration:{...$c.worldConfiguration??{},name:Mr}}))},files:Qn=>jr.files(Qn),build:(Qn,Mr)=>K.build(Qn,Mr,{production:!0}),published:(Qn,Mr)=>r.patch(Qn,{published:Mr})}),la=(a==null?void 0:a.services.projects)==null?null:WSr(cwr(a.services.projects,(Qn,Mr)=>a.signedFetch(Qn,Mr)),Exe);wur(N1r(t.editorBase)),D1r(t.editorBase),vpr(async()=>GSr(await jr.files(Tt().id)));const tc=_Sr({builtin:Cwr(t.editorBase,_B("prefabs/catalog.json"),fTe),user:()=>la!==null&&l()!==null?la.tree:null}),Kc={...(a==null?void 0:a.services.projects)==null?{}:{...wt.shell,aiOffered:()=>ut,aiTranscript:()=>{const Qn=Wt;if(Qn===null||pe===null)return null;const Mr=pe.id;return{owner:`${Mr}@${Qn.toLowerCase()}`,load:()=>r.transcript(Mr,Qn),save:ei=>r.setTranscript(Mr,Qn,ei)}}},pickProject:async()=>{},openProject:Qn=>fi(Mr=>Tn(Qn,Mr)),relaunchProject:Qn=>fi(Mr=>Tn(Qn,Mr)),closeProject:()=>fi(async()=>{_t(),F({type:"sessionStarted"}),C("■ Scene closed"),await Ae(null).catch(Qn=>console.warn("[editor] could not clear the previews",Qn))}),getState:async()=>{const Qn=await r.list(),Mr=xt.status().projects,ei=xt.remoteOnly().map(Ua=>({path:Ua.id,name:Ua.name,title:Ua.name,world:null,parcels:0,thumbnail:null,remoteOnly:!0}));return{recentProjects:[...Qn].sort((Ua,ts)=>ts.lastOpened-Ua.lastOpened).map(Ua=>Ua.id),projects:[...await Promise.all(Qn.map(Ua=>un(Ua,Mr))),...ei],logs:[...f],bevyWebDir:"",editorSceneDir:"",webPort:0,scenePort:0,editorScenePort:0,favourites:Qn.filter(Ua=>Ua.favourite).map(Ua=>Ua.id)}},onStackLog:Qn=>{m.push(Qn)},onBuildEvent:Qn=>{_.push(Qn)},onServersReady:Qn=>{x.push(Qn)},requestReady:async()=>te,phonePreview:async Qn=>te===null?{ok:!1,reason:"no-scene"}:N.open(te.realm,te.position,Qn),phonePreviewState:N.state,onPhonePreviewState:N.subscribe,closePhonePreview:N.close,capturePhonePreview:N.capture,onServersError:Qn=>{T.push(Qn)},toggleFavourite:async Qn=>{const Mr=(await r.list()).find(ei=>ei.id===Qn);Mr!==void 0&&await r.patch(Qn,{favourite:!Mr.favourite})},deleteProject:async Qn=>{const Mr=await r.trash(Qn);return Mr&&xt.trashed(Qn),Mr},trashedProjects:async()=>Promise.all((await r.trashed()).map(Qn=>un(Qn))),restoreProject:async Qn=>{const Mr=await r.restore(Qn);return Mr&&xt.restored(Qn),Mr},syncStatus:async()=>(xt.refresh(),xt.status()),onSyncStatus:Qn=>xt.subscribe(Qn),resolveSyncConflict:(Qn,Mr)=>xt.resolve(Qn,Mr),exportProject:async Qn=>Twr(await $t(Qn),await jr.files(Qn)),importProject:async Qn=>{const Mr=await Ewr(Qn,async(ei,Ua)=>{const ts=await r.create(ei,Ua,{taken:xt.remoteIds()});return xt.touched(ts.id,"scene.json"),ts.id});if((Mr==null?void 0:Mr.ok)===!0){const{id:ei,needsPackages:Ua}=Mr.report;Object.keys(Ua).length>0&&r.readAll(ei).then(ts=>K.install(ei,ts)).catch(ts=>console.warn("[editor] could not install the packages of",ei,ts));for(const ts of st)ts(Mr.report)}return Mr},projectPackages:async Qn=>B.get(Qn)??null,onProjectPackages:Qn=>(H.add(Qn),()=>H.delete(Qn)),...go===null||a===null?{}:{publishScene:(Qn,Mr,ei)=>go.publish(Qn,Mr,ei),publishStop:async()=>go.stop(),publishWorlds:async()=>{const Qn=l();return Qn===null?[]:Qxr(Qn,a.services.worldsContent.replace(/\/+$/,""))}},canImportFolder:Swr(),renameProject:(Qn,Mr)=>tn(Qn,ei=>({...ei,display:{...ei.display??{},title:Mr.trim()}})),duplicateProject:Qn=>vt(Qn,"copy"),sceneTemplates:async()=>iSr(),createScene:async(Qn,Mr,ei)=>{const Ua=WVt(ei),ts=R1(Ua.get("scene.json"));if(ts===null)throw new Error(`template not found: ${ei}`);Ua.set("scene.json",zAt({...ts,display:{...ts.display??{},title:Mr.trim()}}));const $c=await r.create(Mr,Ua,{taken:xt.remoteIds()});return xt.touched($c.id,"scene.json"),$c.id},openExternal:async Qn=>{/^https?:$/.test(new URL(Qn).protocol)&&window.open(Qn,"_blank","noopener,noreferrer")},compositeEntityIds:async Qn=>{for(const Mr of Exr){const ei=await Ue(Qn,Mr);if(ei!==void 0)return Cxr(new TextDecoder().decode(ei))}return[]},sceneSettings:async Qn=>{const Mr=R1(await Ue(Qn,"scene.json"));if(Mr===null)throw new Error("scene.json is missing or is not valid JSON");const ei=wxr(Mr);return{...ei,thumbnail:await An(Qn,ei.thumbnailPath)}},saveSceneSettings:async(Qn,Mr)=>{const ei=Sxr(Mr);return ei!==null?ei:(await tn(Qn,Ua=>Txr(Ua,Mr)),null)},pickSceneThumbnail:async Qn=>{const Mr=await VVt(Object.values(xWe).join(","));if(Mr===null)return null;const ei=EVt(Mr.name);if(xWe[ei]===void 0)throw new Error("not a supported image (png, jpg, gif, webp)");const Ua=`${QSr}/scene-thumbnail${ei}`,ts=new Uint8Array(await Mr.arrayBuffer());return await qt(Qn,Ua,ts),{path:Ua,dataUrl:VAt(Ua,ts)}},appVersion:async()=>Gbr,prefabLibraryList:()=>tc.list(),prefabLibraryCopyIn:async(Qn,Mr)=>tc.copyIn(Qn,Re(Mr)),prefabLibraryUpdateCopy:async(Qn,Mr)=>tc.updateCopy(Qn,Re(Mr)),prefabUserLibrary:()=>la===null?"unavailable":l()===null?"guest":"on",...la===null?{}:{prefabLibraryCopyOut:async(Qn,Mr)=>{if(l()===null)throw new Error(ZSr);return la.copyOut(Re(Qn),Mr)},prefabLibraryDelete:async Qn=>{const Mr=qVt(Qn);return(Mr==null?void 0:Mr.scope)==="user"&&l()!==null?la.remove(Mr.name):!1}}};async function uu(){const Qn=new Set;for(const Mr of[...await r.list(),...await r.trashed()]){const ei=iVt(await Ue(Mr.id,I3).catch(()=>{}));for(const Ua of Object.keys((ei==null?void 0:ei.packages)??{}))Qn.add(Ua);for(const[Ua,ts]of Object.entries((ei==null?void 0:ei.dependencies)??{}))Qn.add(Vj(Ua,ts))}for(const Mr of await r.packages.keys())Qn.has(Mr)||await r.packages.remove(Mr)}return r.purge(Date.now()-JSr).then(async Qn=>{const Mr=await caches.open(Oxe),ei=Qn.map(({id:ts,previewId:$c})=>K.realmUrl($c??ts));for(const ts of await Mr.keys())ei.some($c=>ts.url.startsWith($c))&&await Mr.delete(ts);const Ua=await caches.open(Wbr);for(const ts of ei)await Ua.delete(`${ts}__storage`);Qn.length>0&&await uu()}).catch(Qn=>console.warn("[editor] could not empty the trash",Qn)),{shell:Kc,projects:jr,dataLayer:Bi,dispose:()=>{N.dispose(),wt.dispose(),qe++,_t(),K.dispose(),clearInterval(Me),document.removeEventListener("visibilitychange",Ke),xt.flush().finally(()=>xt.dispose())}}};let Wj=null,vG=null,Kne=null,wOt=!1;function tTr(){if(Wj!==null)return Wj;const t=window.__dclEditorHost;if(t===void 0||t.version!==0&&t.version!==1)return console.error("[editor] window.__dclEditorHost (contract v0 or v1) is missing: nothing to mount into"),null;console.log("[editor] web build 2026-10-27T22:38:34.167Z"),UOt(t),kIt(a=>t.engineConsole(a)),M3t(()=>t.identity()),Zqn.needed=!1;const n=eTr({host:t,sceneCompiler:I1r(t.editorBase)});window.editorShell=nTr(n.shell,t),eDt(n.dataLayer??null),CGe();const r=document.createElement("link");return r.rel="stylesheet",r.href=new URL("editor.css",t.editorBase).href,r.integrity=_B("editor.css"),r.crossOrigin="anonymous",r.onerror=()=>console.error("[editor] editor.css did not load or does not match the hash this editor was published with: its fonts are not applied"),document.head.appendChild(r),CE.project=null,CE.notice=null,Wj={host:t,web:n,fonts:r},Wj}function Dxe(){const t=vG;vG=null,t==null||t.unmount()}function nTr(t,n){const{createScene:r,importProject:a,duplicateProject:s}=t;return{...t,...r===void 0?{}:{createScene:async(l,f,m)=>{const _=await r(l,f,m);return _!==null&&Xx("project_created",{project_id:_,source:"template",template:m}),_}},...a===void 0?{}:{importProject:async l=>{const f=await a(l);return(f==null?void 0:f.ok)===!0&&Xx("project_created",{project_id:f.report.id,source:"import",import_kind:l}),f}},...s===void 0?{}:{duplicateProject:async l=>{const f=await s(l);return f!==null&&Xx("project_created",{project_id:f,source:"duplicate",from_project_id:l}),f}},openProject:async l=>{const f=vG;Dxe(),f==null||f.api.close(),Kne??(Kne=DFt(n.container,O.jsx(S0r,{}))),n.setMode("edit"),CE.project=l,CE.opens++,await t.openProject(l),Xx("project_opened")}}}function rTr(t,n){var m;const r=tTr();if(r===null)return()=>{};Dxe();const a=document.createElement("div");a.style.cssText="position:relative;width:100%;height:100%",Nqn(a),t.appendChild(a);const s=DFt(a,O.jsx(Mqn,{}),"eui-create-root"),l={api:n,unmount:()=>{s(),a.remove()}};vG=l;const f=wOt?null:((m=jE(r.host))==null?void 0:m.openProject)??null;return wOt=!0,Xx("editor_opened",{deep_link:f!==null}),f!==null&&r.web.projects.find(f).catch(()=>!1).then(_=>{var x;vG===l&&(_?(x=window.editorShell)==null||x.openProject(f):CE.notice=`“${f}” is not on this device or on your account. Here are your scenes.`)}),()=>{vG===l&&Dxe()}}function iTr(){Dxe();const t=Wj;if(t===null)return;Wj=null;const n=KA();Kne==null||Kne(),Kne=null,t.fonts.remove(),CE.project=null,delete window.editorShell,M3t(null),kIt(null),UOt(null),t.host.setMode("off"),n.finally(()=>{var r,a;(a=(r=t.web).dispose)==null||a.call(r),Wj===null&&eDt(null)})}window.__dclEditor={mountHome:rTr,unmount:iTr};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dcl-regenesislabs/web-editor",
3
- "version": "0.3.16-40498753029.commit-6593057",
3
+ "version": "0.3.16-40596302895.commit-0ee155d",
4
4
  "license": "Apache-2.0",
5
5
  "description": "The Decentraland scene editor for the web explorer: editor.js plus the files it loads beside it. Served by version, not installed.",
6
6
  "repository": {
@@ -8,5 +8,5 @@
8
8
  "url": "git+https://github.com/dcl-regenesislabs/web-editor.git",
9
9
  "directory": "packages/web"
10
10
  },
11
- "commit": "6593057aa91882cf8f48795bea7f25f2905e8f12"
11
+ "commit": "0ee155de48a80042ec61c9a28875e1c1583d74a9"
12
12
  }