@tomorrowevening/hermes 0.0.147 → 0.0.148
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hermes.cjs.js +1 -1
- package/dist/hermes.css +1 -1
- package/dist/hermes.es.js +21 -25
- package/package.json +1 -1
- package/types/core/remote/RemoteTheatre.d.ts +32 -34
- package/types/core/remote/RemoteThree.d.ts +43 -43
- package/types/editor/multiView/MultiView.d.ts +125 -125
package/dist/hermes.cjs.js
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
enc -= enc.yzww * vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);
|
16
16
|
gl_FragColor = enc;
|
17
17
|
}
|
18
|
-
`,d=c.createShader(35633),p=c.createShader(35632),f=c.createProgram();if(!(p&&d&&f))return;c.shaderSource(d,h),c.shaderSource(p,u),c.compileShader(d),c.compileShader(p),c.attachShader(f,d),c.attachShader(f,p),c.linkProgram(f),c.detachShader(f,d),c.detachShader(f,p),c.deleteShader(d),c.deleteShader(p),c.useProgram(f);const m=c.createBuffer();c.bindBuffer(34962,m),c.bufferData(34962,new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),35044);const y=c.getAttribLocation(f,"aPosition");c.vertexAttribPointer(y,3,5126,!1,0,0),c.enableVertexAttribArray(y),c.clearColor(1,1,1,1),c.clear(16384),c.viewport(0,0,1,1),c.drawArrays(4,0,3);const g=new Uint8Array(4);return c.readPixels(0,0,1,1,6408,5121,g),c.deleteProgram(f),c.deleteBuffer(m),g.join("")}(a),i="801621810",n="8016218135",r="80162181161",o=Ps?.isIpad?[["a7",r,12],["a8",n,15],["a8x",n,15],["a9",n,15],["a9x",n,15],["a10",n,15],["a10x",n,15],["a12",i,15],["a12x",i,15],["a12z",i,15],["a14",i,15],["a15",i,15],["m1",i,15],["m2",i,15]]:[["a7",r,12],["a8",n,12],["a9",n,15],["a10",n,15],["a11",i,15],["a12",i,15],["a13",i,15],["a14",i,15],["a15",i,15],["a16",i,15],["a17",i,15]];let l;return s==="80162181255"?l=o.filter(([,,c])=>c>=14):(l=o.filter(([,c])=>c===s),l.length||(l=o)),l.map(([c])=>`apple ${c} gpu`)}class md extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target.prototype)}}const Il=[],gd=[];function y0(a,e){if(a===e)return 0;const t=a;a.length>e.length&&(a=e,e=t);let s=a.length,i=e.length;for(;s>0&&a.charCodeAt(~-s)===e.charCodeAt(~-i);)s--,i--;let n,r=0;for(;r<s&&a.charCodeAt(r)===e.charCodeAt(r);)r++;if(s-=r,i-=r,s===0)return i;let o,l,c=0,h=0,u=0;for(;h<s;)gd[h]=a.charCodeAt(r+h),Il[h]=++h;for(;u<i;)for(n=e.charCodeAt(r+u),o=u++,c=u,h=0;h<s;h++)l=n===gd[h]?o:o+1,o=Il[h],c=Il[h]=o>c?l>c?c+1:l:l>o?o+1:l;return c}function x0(a){return a!=null}const _0=({mobileTiers:a=[0,15,30,60],desktopTiers:e=[0,15,30,60],override:t={},glContext:s,failIfMajorPerformanceCaveat:i=!1,benchmarksURL:n="https://unpkg.com/detect-gpu@5.0.70/dist/benchmarks"}={})=>Bl(void 0,void 0,void 0,function*(){const r={};if(em)return{tier:0,type:"SSR"};const{isIpad:o=!!Ps?.isIpad,isMobile:l=!!Ps?.isMobile,screenSize:c=window.screen,loadBenchmarks:h=S=>Bl(void 0,void 0,void 0,function*(){const M=yield fetch(`${n}/${S}`).then(w=>w.json());if(parseInt(M.shift().split(".")[0],10)<4)throw new md("Detect GPU benchmark data is out of date. Please update to version 4x");return M})}=t;let{renderer:u}=t;const d=(S,M,w,R,P)=>({device:P,fps:R,gpu:w,isMobile:l,tier:S,type:M});let p,f="";if(u)u=fd(u),p=[u];else{const S=s||function(w,R=!1){const P={alpha:!1,antialias:!1,depth:!1,failIfMajorPerformanceCaveat:R,powerPreference:"high-performance",stencil:!1};w&&delete P.powerPreference;const z=window.document.createElement("canvas"),$=z.getContext("webgl",P)||z.getContext("experimental-webgl",P);return $??void 0}(Ps?.isSafari12,i);if(!S)return d(0,"WEBGL_UNSUPPORTED");const M=Ps?.isFirefox?null:S.getExtension("WEBGL_debug_renderer_info");if(u=M?S.getParameter(M.UNMASKED_RENDERER_WEBGL):S.getParameter(S.RENDERER),!u)return d(1,"FALLBACK");f=u,u=fd(u),p=function(w,R,P){return R==="apple gpu"?g0(w,R,P):[R]}(S,u,l)}const m=(yield Promise.all(p.map(function(S){var M;return Bl(this,void 0,void 0,function*(){const w=(_e=>{const at=l?["adreno","apple","mali-t","mali","nvidia","powervr","samsung"]:["intel","apple","amd","radeon","nvidia","geforce","adreno"];for(const Dt of at)if(_e.includes(Dt))return Dt})(S);if(!w)return;const R=`${l?"m":"d"}-${w}${o?"-ipad":""}.json`,P=r[R]=(M=r[R])!==null&&M!==void 0?M:h(R);let z;try{z=yield P}catch(_e){if(_e instanceof md)throw _e;return}const $=function(_e){var at;const Dt=(_e=_e.replace(/\([^)]+\)/,"")).match(/\d+/)||_e.match(/(\W|^)([A-Za-z]{1,3})(\W|$)/g);return(at=Dt?.join("").replace(/\W|amd/g,""))!==null&&at!==void 0?at:""}(S);let q=z.filter(([,_e])=>_e===$);q.length||(q=z.filter(([_e])=>_e.includes(S)));const j=q.length;if(j===0)return;const X=S.split(/[.,()\[\]/\s]/g).sort().filter((_e,at,Dt)=>at===0||_e!==Dt[at-1]).join(" ");let Z,[ve,,,,ue]=j>1?q.map(_e=>[_e,y0(X,_e[2])]).sort(([,_e],[,at])=>_e-at)[0][0]:q[0],ge=Number.MAX_VALUE;const{devicePixelRatio:ie}=window,we=c.width*ie*c.height*ie;for(const _e of ue){const[at,Dt]=_e,_r=at*Dt,gn=Math.abs(we-_r);gn<ge&&(ge=gn,Z=_e)}if(!Z)return;const[,,ke,rt]=Z;return[ge,ke,ve,rt]})}))).filter(x0).sort(([S=Number.MAX_VALUE,M],[w=Number.MAX_VALUE,R])=>S===w?M-R:S-w);if(!m.length){const S=m0.find(M=>u.includes(M));return S?d(0,"BLOCKLISTED",S):d(1,"FALLBACK",`${u} (${f})`)}const[,y,g,_]=m[0];if(y===-1)return d(0,"BLOCKLISTED",g,y,_);const b=l?a:e;let T=0;for(let S=0;S<b.length;S++)y>=b[S]&&(T=S);return d(T,"BENCHMARK",g,y,_)});var tm=(a=>(a[a.High=0]="High",a[a.Medium=1]="Medium",a[a.Low=2]="Low",a))(tm||{});function sm(a){let e=0;const t=performance.now();function s(){e++;const i=performance.now();if(i-t>=100){const n=e/((i-t)/1e3),r=Math.round(n/30)*30;a(r)}else requestAnimationFrame(s)}requestAnimationFrame(s)}function b0(a,e,t){return new Promise(s=>{_0().then(i=>{let n=!1;const r=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);if(n="transferControlToOffscreen"in a,r){const l=navigator.userAgent.match(/version\/(\d+)/i);n=(l?parseInt(l[1]):0)>=17}const o={dpr:devicePixelRatio,fps:30,width:innerWidth,height:innerHeight,mobile:i.isMobile!==void 0?i.isMobile:!1,supportOffScreenCanvas:n,quality:2,dev:e,editor:t};i.tier===3?o.quality=0:i.tier===2&&(o.quality=1),sm(l=>{o.fps=l,s(o)}),s(o)})})}function Ti(a,e,t){return Math.min(e,Math.max(a,t))}function Uo(a,e,t){return(t-a)/(e-a)}function rr(a,e,t){return a*(1-t)+e*t}function T0(a,e,t,s,i){return rr(t,s,Uo(a,e,i))}function S0(a,e){const t=a-e;return Math.sqrt(t*t)}function ss(a,e=1){return Number(a.toFixed(e))}function v0(a,e,t,s){return rr(a,e,1-Math.exp(-t*s))}function w0(a,e=1){return Number(a.toFixed(e))}function E0(a,e,t,s){return a===e&&t===s}function M0(a,e,t,s){return 1/(3*e*a*a+2*t*a+s)}function C0(a,e,t,s,i){return e*(a*a*a)+t*(a*a)+s*a+i}function A0(a,e,t,s,i){const n=a*a;return e*(n*a)+t*n+s*a+i}function R0(a,e,t,s,i){if(a<=0)return 0;if(a>=1)return 1;if(E0(e,t,s,i))return a;const n=0,r=0,o=e,l=t,c=s,h=i,u=1,d=1,p=u-3*c+3*o-n,f=3*c-6*o+3*n,m=3*o-3*n,y=n,g=d-3*h+3*l-r,_=3*h-6*l+3*r,b=3*l-3*r,T=r;let S=a;for(let M=0;M<5;M++){const w=C0(S,p,f,m,y);let R=M0(S,p,f,m);R===1/0&&(R=a),S-=(w-a)*R,S=Math.min(Math.max(S,0),1)}return A0(S,g,_,b,T)}const oh=a=>{a?.dispose()},jh=a=>{if(a)if(Array.isArray(a))a.forEach(e=>jh(e));else{for(const e in a){const t=a[e];t!==null&&t instanceof x.Texture&&oh(t)}if(a.isShaderMaterial===!0){const e=a;for(const t in e.uniforms){const s=e.uniforms[t];s.value!==null&&s.value instanceof x.Texture&&oh(s.value)}}a.dispose()}},ii=a=>{if(a){for(;a.children.length>0;){const e=a.children[0];e.type==="Audio"?(e.pause(),e.parent&&e.parent.remove(e)):ii(e)}if(a.parent&&a.parent.remove(a),a.isMesh){const e=a;e.geometry?.dispose(),jh(e.material)}a.dispose!==void 0&&a.dispose()}};exports.totalThreeObjects=0;const lh=()=>{exports.totalThreeObjects=0},ko=a=>{if(!a)return;let e=a.name.replaceAll(" ","").replaceAll("/",".");if(e.length===0&&(e=`obj_${exports.totalThreeObjects}`,exports.totalThreeObjects++),a.parent!==null&&a.parent.uuid.length>0&&(e=`${a.parent.uuid}.${e}`),a.uuid=e,a.isMesh!==void 0){const t=a;if(Array.isArray(t.material))t.material.forEach((s,i)=>{s.uuid=`${e}.material.${i}`});else{const s=t.material;s.uuid=`${e}.material`}}a.children.forEach(t=>ko(t))};class Ri{static renderer;static canvas;static context=null;static scene=null;static camera=null;static material=null;static inited=!1;static width=100;static height=100;static init(){this.inited||(this.canvas=document.createElement("canvas"),this.canvas.width=this.width,this.canvas.height=this.height,this.context=this.canvas.getContext("2d"),this.inited=!0)}static renderToBlob(e){this.init();const t=e.repeat.clone(),s=e.offset.clone();if(e.repeat.set(1,1),e.offset.set(0,0),this.context!==null){this.context.clearRect(0,0,this.width,this.height);const i=e.image;if(i!=null&&i.width>0){this.canvas.title=e.sourceFile;const n=this.canvas.width/i.width,r=this.renderToCanvas(e);this.context.drawImage(r,0,0,i.width*n,i.height*n)}}return e.repeat.copy(t),e.offset.copy(s),this.canvas.toDataURL("image/png")}static renderToCanvas(e){if(this.material===null){this.camera=new x.OrthographicCamera(-.5,.5,.5,-.5,0,100),this.scene=new x.Scene,this.material=new x.MeshBasicMaterial;const t=new x.BufferGeometry;t.setAttribute("position",new x.Float32BufferAttribute([-.5,-.5,0,1.5,-.5,0,-.5,1.5,0],3)),t.setAttribute("normal",new x.Float32BufferAttribute([0,0,1,0,0,1],3)),t.setAttribute("uv",new x.Float32BufferAttribute([0,0,2,0,0,2],2));const s=new x.Mesh(t,this.material);this.scene.add(s)}if(e.isRenderTargetTexture)this.material.map=e,this.renderer.render(this.scene,this.camera);else{const t=this.renderer.outputColorSpace,s=e.colorSpace;this.renderer.outputColorSpace=x.LinearSRGBColorSpace,e.colorSpace=x.LinearSRGBColorSpace,this.material.map=e,this.renderer.render(this.scene,this.camera),this.renderer.outputColorSpace=t,e.colorSpace=s}return this.renderer.domElement}}function N0(a){return new Promise(e=>{const t=new x.ObjectLoader;t.parseAsync(a.scene).then(s=>{const i=new x.AnimationMixer(s);if(a.animations.length>0){const r=a.animations.map(l=>x.AnimationClip.parse(l));i.clipAction(r[0]).play(),i.getRoot().animations=a.animations,i.getRoot().mixer=i}const n=[];a.cameras&&a.cameras.length>0&&a.cameras.forEach(r=>{const o=t.parse(r);n.push(o)}),e({animations:a.animations,model:s,mixer:i,cameras:n})})})}let ch=[];function P0(a,e){Ri.renderer=e.renderer,a.passes.forEach((t,s)=>{const i=[];i.push({type:"boolean",prop:"Enabled",value:t.enabled});let n=(o,l)=>{console.log("Default Handle Pass:",o,l)};if(t instanceof pd.EffectPass)t.effects.forEach((o,l)=>{o.uniforms.size>0&&o.uniforms.forEach((c,h)=>{const u=`${o.name.replace("Effect","")} ${h}`;if(c.value===null)i.push({prop:h,title:u,type:"image",value:{offset:[0,0],repeat:[1,1],src:""}});else if(c.value.isTexture){const d=c.value,p=Ri.renderToBlob(d);i.push({prop:h,title:u,type:"image",value:{offset:[d.offset.x,d.offset.y],repeat:[d.repeat.x,d.repeat.y],src:p}})}else typeof c.value=="number"?i.push({prop:h,title:u,type:"number",value:c.value,step:.01}):typeof c.value=="string"?i.push({prop:h,title:u,type:"string",value:c.value}):typeof c.value=="boolean"&&i.push({prop:h,title:u,type:"boolean",value:c.value})})}),n=(o,l)=>{t.effects.forEach(c=>{c.uniforms.size>0&&c.uniforms.forEach((h,u)=>{u===o&&(h.value=l)})})};else if(t instanceof pd.ShaderPass){const o=t.fullscreenMaterial;for(const l in o.uniforms){const c=o.uniforms[l],h=`${o.name.replace("Material","")} ${l}`;if(c.value===null)i.push({title:h,prop:l,type:"image",value:{offset:[0,0],repeat:[1,1],src:""}});else if(c.value.isTexture){const u=c.value,d=Ri.renderToBlob(u);i.push({title:h,prop:l,type:"image",value:{offset:[u.offset.x,u.offset.y],repeat:[u.repeat.x,u.repeat.y],src:d}})}else typeof c.value=="number"?i.push({title:h,prop:l,type:"number",value:c.value,step:.01}):typeof c.value=="string"?i.push({title:h,prop:l,type:"string",value:c.value}):typeof c.value=="boolean"&&i.push({title:h,prop:l,type:"boolean",value:c.value})}n=(l,c)=>{const h=o.uniforms[l];h.value=c}}else return;const r=`Pass: ${t.name}`;e.addGroup({title:r,items:i,onUpdate:(o,l)=>{o==="Enabled"?t.enabled=l:n(o,l)}}),ch.push(r)})}function F0(a){ch.forEach(e=>{a.removeGroup(e)}),ch=[]}function D0(a,e,t,s=1024){return new Promise(i=>{const n=e.aspect,r=e.fov,o=e.rotation.clone(),l=t.outputBuffer;e.aspect=1,e.fov=90,e.updateProjectionMatrix();const c=new x.WebGLRenderTarget(s,s,{format:x.RGBAFormat,depthBuffer:!0,stencilBuffer:!1});t.outputBuffer=c,_n(a,c,e,"nx",t,s).then(()=>{_n(a,c,e,"ny",t,s).then(()=>{_n(a,c,e,"nz",t,s).then(()=>{_n(a,c,e,"px",t,s).then(()=>{_n(a,c,e,"py",t,s).then(()=>{_n(a,c,e,"pz",t,s).then(()=>{e.aspect=n,e.fov=r,e.rotation.copy(o),e.updateMatrixWorld(),e.updateProjectionMatrix(),t.outputBuffer=l,c.dispose(),i()})})})})})})})}function _n(a,e,t,s,i,n){return new Promise(r=>{const o=Math.PI/2;switch(s){case"nx":t.rotation.set(0,-o,0);break;case"ny":t.rotation.set(-o,0,Math.PI);break;case"nz":t.rotation.set(0,0,0);break;case"px":t.rotation.set(0,o,0);break;case"py":t.rotation.set(o,0,Math.PI);break;case"pz":t.rotation.set(0,Math.PI,0);break}t.updateMatrixWorld(),i.render();const l=new Uint8Array(n*n*4);a.readRenderTargetPixels(e,0,0,n,n,l);const c=document.createElement("canvas");c.width=c.height=n;const h=c.getContext("2d"),u=h.createImageData(n,n);u.data.set(l),h.putImageData(u,0,0);const d=document.createElement("canvas");d.width=d.height=n;const p=d.getContext("2d");p.translate(0,n),p.scale(1,-1),p.drawImage(c,0,0);const f=d.toDataURL("image/png"),m=document.createElement("a");m.href=f,m.download=`${t.name}_${s}.png`,document.body.appendChild(m),m.click(),m.remove(),r()})}const bn=qh(["ctrlKey","metaKey","shiftKey","button","pointerId","pointerType","clientX","clientY","pageX","pageY"]),O0=qh(["clientX","clientY","deltaX","deltaY","deltaMode"]),B0=qh(["ctrlKey","metaKey","shiftKey","keyCode"]);function I0(a,e){a.preventDefault(),O0(a,e)}function L0(a){a.preventDefault()}function U0(a,e,t){for(const s of e)t[s]=a[s]}function qh(a){return function(t,s){const i={type:t.type};U0(t,a,i),s(i)}}function Ll(a,e){const t=[],s={type:a.type,touches:t};for(let i=0;i<a.touches.length;++i){const n=a.touches[i];t.push({pageX:n.pageX,pageY:n.pageY})}e(s)}const k0={37:!0,38:!0,39:!0,40:!0};function z0(a,e){const{keyCode:t}=a;k0[t]&&(a.preventDefault(),B0(a,e))}const G0={contextmenu:L0,mousedown:bn,mousemove:bn,mouseup:bn,pointerdown:bn,pointermove:bn,pointerup:bn,touchstart:Ll,touchmove:Ll,touchend:Ll,wheel:I0,keydown:z0};let V0=0;class H0{id;worker;constructor(e,t,s){this.id=V0++,this.worker=t;const i=r=>{this.worker.postMessage({type:"event",id:this.id,data:r})};t.postMessage({type:"makeProxy",id:this.id});for(const[r,o]of Object.entries(s))e.addEventListener(r,l=>{o(l,i)});function n(){i({type:"resize",left:0,top:0,width:innerWidth,height:innerHeight})}window.addEventListener("resize",n),n()}}class im extends x.EventDispatcher{style={};left=0;top=0;width=0;height=0;ownerDocument=void 0;constructor(){super(),this.ownerDocument=this}get clientWidth(){return this.width}set clientWidth(e){this.width=e}get clientHeight(){return this.height}set clientHeight(e){this.height=e}setPointerCapture(){}releasePointerCapture(){}getBoundingClientRect(){return{x:this.left,y:this.top,left:this.left,top:this.top,width:this.width,height:this.height,right:this.left+this.width,bottom:this.top+this.height,toJSON:()=>({})}}handleEvent(e){if(e.type==="size"){this.left=e.left,this.top=e.top,this.width=e.width,this.height=e.height;return}e.preventDefault=da,e.stopPropagation=da,this.dispatchEvent(e)}focus(){}getRootNode(){return this}}class W0{targets={};constructor(){this.handleEvent=this.handleEvent.bind(this)}makeProxy(e){const{id:t}=e,s=new im;this.targets[t]=s}getProxy(e){return this.targets[e]}handleEvent(e){this.targets[e.id]?.handleEvent(e.data)}}var Q=(a=>(a.CUSTOM="ToolEvents::custom",a.SELECT_DROPDOWN="ToolEvents::selectDropdown",a.DRAG_UPDATE="ToolEvents::dragUpdate",a.ADD_SCENE="ToolEvents::addScene",a.REFRESH_SCENE="ToolEvents::refreshScene",a.REMOVE_SCENE="ToolEvents::removeScene",a.SET_SCENE="ToolEvents::setScene",a.GET_OBJECT="ToolEvents::getObject",a.SET_OBJECT="ToolEvents::setObject",a.UPDATE_OBJECT="ToolEvents::updateObject",a.CREATE_TEXTURE="ToolEvents::createTexture",a.REQUEST_METHOD="ToolEvents::requestMethod",a.ADD_CAMERA="ToolEvents::addCamera",a.REMOVE_CAMERA="ToolEvents::removeCamera",a.ADD_GROUP="ToolEvents::addGroup",a.REMOVE_GROUP="ToolEvents::removeGroup",a.ADD_SPLINE="ToolEvents::addSpline",a.ADD_RENDERER="ToolEvents::addRenderer",a.UPDATE_RENDERER="ToolEvents::updateRenderer",a))(Q||{});class $0 extends x.EventDispatcher{components=new Map;appHandlers=[];editorHandlers=[];_appID="";_debugEnabled;_broadcastChannel=void 0;_webSocket=void 0;_mode="app";_connected=!1;_useBC=!1;constructor(e,t,s,i=!0){super(),this._appID=e,this._debugEnabled=t,this.editor=s,t&&(this._useBC=i,i?(this._broadcastChannel=new BroadcastChannel(e),this._broadcastChannel.addEventListener("message",this.messageHandler)):(this._webSocket=new WebSocket(e),this._webSocket.addEventListener("open",this.openHandler),this._webSocket.addEventListener("close",this.closeHandler),this._webSocket.addEventListener("message",this.messageHandler)))}addComponent(e,t){this.components.set(e,t)}dispose(){this._broadcastChannel!==void 0&&this._broadcastChannel.removeEventListener("message",this.messageHandler),this._webSocket!==void 0&&(this._webSocket.removeEventListener("open",this.openHandler),this._webSocket.removeEventListener("close",this.closeHandler),this._webSocket.removeEventListener("message",this.messageHandler)),this.components.forEach(e=>{e.dispose()}),this.components.clear()}send(e){this._mode!==e.target&&(this._useBC?this._broadcastChannel?.postMessage(e):this._connected&&this._webSocket?.send(JSON.stringify(e)))}messageHandler=e=>{let t=e.data;this._useBC||(t=JSON.parse(e.data)),t.target==="editor"?this.handleEditorBroadcast(t):this.handleAppBroadcast(t)};handleAppBroadcast(e){switch(this.appHandlers.forEach(t=>{t.callback(e)}),e.event){case"custom":this.dispatchEvent({type:"ToolEvents::custom",value:e.data});break}}handleEditorBroadcast(e){switch(this.editorHandlers.forEach(t=>{t.callback(e)}),e.event){case"custom":this.dispatchEvent({type:"ToolEvents::custom",value:e.data});break}}openHandler=()=>{this._connected=!0};closeHandler=()=>{this._connected=!1};get appID(){return this._appID}get connected(){return this._connected}get debugEnabled(){return this._debugEnabled}get mode(){return this._mode}get isApp(){return this._mode==="app"}get editor(){return this._mode==="editor"}set editor(e){e&&(this._mode="editor")}}class j0{canvas;inputElement;settings;playing=!1;rafID=-1;constructor(e,t,s){this.canvas=e,this.inputElement=t,this.settings=s}dispose(){this.stop()}play(){this.playing||(this.playing=!0,this.onUpdate())}stop(){this.playing&&(this.playing=!1,cancelAnimationFrame(this.rafID),this.rafID=-1)}update(){}draw(){}resize(e,t){this.settings.supportOffScreenCanvas&&(this.inputElement.clientWidth=e,this.inputElement.clientHeight=t,this.inputElement.width=e,this.inputElement.height=t)}onResize=e=>{this.resize(e.width,e.height)};onUpdate=()=>{this.update(),this.draw(),this.rafID=requestAnimationFrame(this.onUpdate)}}class q0 extends x.Scene{clock;cameras;lights;world;constructor(e){super(),this.name=e,this.clock=new x.Clock,this.lights=new x.Group,this.lights.name="lights",this.add(this.lights),this.cameras=new x.Group,this.cameras.name="cameras",this.add(this.cameras),this.world=new x.Group,this.world.name="world",this.add(this.world)}init(){return new Promise(e=>{this.setupLights().then(()=>this.setupCameras()).then(()=>this.setupWorld()).then(()=>this.setupPost()).then(()=>this.setupAnimation()).then(()=>this.setupDebug()).then(()=>e())})}setupLights(){return new Promise(e=>{e()})}setupCameras(){return new Promise(e=>{e()})}setupWorld(){return new Promise(e=>{e()})}setupPost(){return new Promise(e=>{e()})}setupAnimation(){return new Promise(e=>{e()})}setupDebug(){return new Promise(e=>{e()})}dispose(){}update(){}draw(e){}postDraw(){}resize(e,t,s){}show(){this.clock.start(),this.showComplete()}showComplete(){this.enable()}hide(){this.disable(),this.hideComplete()}hideComplete(){this.clock.stop()}enable(){}disable(){}get deltaTime(){return Math.min(this.clock.getDelta(),1/30)}}class ol{app;constructor(e){this.app=e,this.app.appHandlers.push({remote:this,callback:this.handleApp.bind(this)}),this.app.editorHandlers.push({remote:this,callback:this.handleEditor.bind(this)})}dispose(){const e=this.app.appHandlers.findIndex(t=>t.remote===this);e>-1&&(this.app.appHandlers.splice(e,1),this.app.editorHandlers.splice(e,1))}handleApp(e){}handleEditor(e){}}class Y0 extends ol{selectDropdown(e,t){this.app.send({event:"selectComponent",target:"app",data:{dropdown:e,value:t}})}updateDropdown(e,t){this.app.send({event:"draggableListUpdate",target:"app",data:{dropdown:e,value:t}})}handleApp(e){switch(e.event){case"selectComponent":this.app.dispatchEvent({type:Q.SELECT_DROPDOWN,value:e.data});break;case"draggableListUpdate":this.app.dispatchEvent({type:Q.DRAG_UPDATE,value:e.data});break}}}function X0(a,e,t){if(a.editor){t.ui.restore(),t.onSelectionChange(r=>{r.length<1||r.forEach(o=>{let l=o.address.sheetId,c="setSheet",h={};switch(o.type){case"Theatre_Sheet_PublicAPI":c="setSheet",h={sheet:o.address.sheetId},e.activeSheet=e.sheets.get(o.address.sheetId);break;case"Theatre_SheetObject_PublicAPI":c="setSheetObject",l+=`_${o.address.objectKey}`,h={id:l,sheet:o.address.sheetId,key:o.address.objectKey},e.activeSheet=e.sheets.get(o.address.sheetId);break}a.send({event:c,target:"app",data:h})})});let s=-1;const i=()=>{if(e.activeSheet!==void 0&&s!==e.activeSheet.sequence.position){s=e.activeSheet.sequence.position;const r=e.activeSheet;a.send({event:"updateTimeline",target:"app",data:{position:s,sheet:r.address.sheetId}})}},n=()=>{i(),requestAnimationFrame(n)};i(),n()}else t.ui.hide()}async function Z0(){for(;!document.getElementById("theatrejs-studio-root");)await new Promise(i=>setTimeout(i,100));const a=document.getElementById("theatrejs-studio-root");if(a===null||a.shadowRoot===null)return;const e=a.shadowRoot.getElementById("pointer-root");if(e===null)return;const t=e.children[0];if(t===null)return;const s=t.children[1];s.style.justifyContent="left";try{const i=s.children[1];for(i.style.transform="translateX(10px)";i.children.length>1;)i.removeChild(i.children[0])}catch{}try{const i=t.children[3];i.style.top="0",i.style.right="300px"}catch{}}function Q0(a,e,t,s,i){const n=1-a;return n*n*n*e+3*n*n*a*t+3*n*a*a*s+a*a*a*i}function K0(a,e,t){if(a.type!=="bezier"||a.handles.length!==4)throw new Error("Invalid keyframe data for Bézier interpolation.");const[s,i]=a.handles,n=(t-a.position)/(e.position-a.position);return Q0(n,a.value,a.value+s,e.value+i,e.value)}class J0 extends ol{project;sheets=new Map;sheetObjects=new Map;sheetObjectCBs=new Map;sheetObjectUnsubscribe=new Map;activeSheet;studio=void 0;constructor(e){super(e),window.RemoteTheatre=this}dispose(){this.project=void 0,this.sheets=new Map,this.sheetObjects=new Map,this.sheetObjectCBs=new Map,this.sheetObjectUnsubscribe=new Map}getSheetInstance(e,t){return t!==void 0?`${e}-${t}`:e}sheet(e,t){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const s=this.getSheetInstance(e,t);let i=this.sheets.get(s);return i!==void 0||(i=this.project?.sheet(e,t),this.sheets.set(s,i)),i}playSheet(e,t,s){return new Promise(i=>{const n=t!==void 0?{...t}:{};this.sheet(e,s)?.sequence.play(n).then(r=>i(r)),this.app.send({event:"playSheet",target:"editor",data:{sheet:e,instance:s,value:t}})})}pauseSheet(e,t){this.sheet(e,t)?.sequence.pause(),this.app.send({event:"pauseSheet",target:"editor",data:{sheet:e,instance:t}})}clearSheetObjects(e){this.sheetObjects.forEach((t,s)=>{s.search(`${e}_`)>-1&&this.unsubscribe(t)})}sheetObject(e,t,s,i,n){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const r=this.sheet(e,n);if(r===void 0)return;const l=`${this.getSheetInstance(e,n)}_${t}`;let c=this.sheetObjects.get(l),h=s;c!==void 0&&(h={...s,...c.value}),c=r.object(t,h),this.sheetObjects.set(l,c),this.sheetObjectCBs.set(l,i!==void 0?i:da);const u=c.onValuesChange(d=>{if(this.app.editor){for(const f in d){const m=d[f];typeof m=="object"&&Jf(m)&&(d[f]={r:m.r,g:m.g,b:m.b,a:m.a})}this.app.send({event:"updateSheetObject",target:"app",data:{sheet:e,sheetObject:l,values:d}})}const p=this.sheetObjectCBs.get(l);p!==void 0&&p(d)});return this.sheetObjectUnsubscribe.set(l,u),c}getSheetObjectKeyframes(e,t,s){const i=this.sheet(e);if(i===void 0)return[];const n=`${e}_${t}`,r=this.sheetObjects.get(n);return r===void 0?[]:i.sequence.__experimental_getKeyframes(r.props[s])}getSheetObjectVectors(e,t){const s=this.sheet(e);if(s===void 0)return[];const i=`${e}_${t}`,n=this.sheetObjects.get(i);if(n===void 0)return[];const r=[],o=s.sequence.__experimental_getKeyframes(n.props.x),l=s.sequence.__experimental_getKeyframes(n.props.y),c=s.sequence.__experimental_getKeyframes(n.props.z),h=new Set;return o.forEach(d=>h.add(d.position)),l.forEach(d=>h.add(d.position)),c.forEach(d=>h.add(d.position)),Array.from(h).sort((d,p)=>d-p).forEach(d=>{const p=(f,m)=>{const y=f.find((b,T)=>b.position<=m&&(f[T+1]?.position||1/0)>m),g=f.find(b=>b.position>m);if(!y)return g?.value||0;if(!g||y.position===m)return y.value;if(y.type==="bezier")return K0(y,g,m);const _=(m-y.position)/(g.position-y.position);return y.value+_*(g.value-y.value)};r.push({position:d,x:p(o,d),y:p(l,d),z:p(c,d)})}),r}unsubscribe(e){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const t=e.address.sheetId,s=e.address.objectKey;this.sheets.get(t)?.detachObject(s);const n=`${t}_${s}`,r=this.sheetObjectUnsubscribe.get(n);r!==void 0&&(this.sheetObjects.delete(n),this.sheetObjectCBs.delete(n),this.sheetObjectUnsubscribe.delete(n),r())}handleApp(e){let t;switch(e.event){case"setSheet":t=this.sheets.get(e.data.sheet),t!==void 0&&(this.activeSheet=t,this.studio?.setSelection([t]));break;case"setSheetObject":t=this.sheetObjects.get(`${e.data.sheet}_${e.data.key}`),t!==void 0&&this.studio?.setSelection([t]);break;case"updateSheetObject":t=this.sheets.get(e.data.sheet),t!==void 0&&t.sequence.pause(),t=this.sheetObjectCBs.get(e.data.sheetObject),t!==void 0&&t(e.data.values);break;case"updateTimeline":t=this.sheets.get(e.data.sheet),this.activeSheet!==void 0&&(this.activeSheet.sequence.position=e.data.position);break}}handleEditor(e){if(this.app.editor)switch(e.event){case"playSheet":this.sheet(e.data.sheet,e.data.instance)?.sequence.play(e.data.value);break;case"pauseSheet":this.sheet(e.data.sheet,e.data.instance)?.sequence.pause();break}}handleEditorApp(){if(this.app.editor){this.studio?.ui.restore(),this.studio?.onSelectionChange(i=>{i.length<1||i.forEach(n=>{let r=n.address.sheetId,o="setSheet",l={};switch(n.type){case"Theatre_Sheet_PublicAPI":o="setSheet",l={sheet:n.address.sheetId},this.activeSheet=this.sheets.get(n.address.sheetId);break;case"Theatre_SheetObject_PublicAPI":o="setSheetObject",r+=`_${n.address.objectKey}`,l={id:r,sheet:n.address.sheetId,key:n.address.objectKey},this.activeSheet=this.sheets.get(n.address.sheetId);break}this.app.send({event:o,target:"app",data:l})})});let e=-1;const t=()=>{if(this.activeSheet!==void 0&&e!==this.activeSheet.sequence.position){e=this.activeSheet.sequence.position;const i=this.activeSheet;this.app.send({event:"updateTimeline",target:"app",data:{position:e,sheet:i.address.sheetId}})}},s=()=>{t(),requestAnimationFrame(s)};t(),s()}else this.studio?.ui.hide()}}function ex(a){if(a.name==="cameras")return"camera";if(a.name==="interactive")return"interactive";if(a.name==="lights")return"light";if(a.name==="ui")return"ui";if(a.name==="utils")return"utils";const e=a.type;return e.search("Helper")>-1?"icon_utils":e.search("Camera")>-1?"camera":e.search("Light")>-1?"light":"obj3D"}function Hn(a){const e={name:a.name,type:a.type,uuid:a.uuid,children:[]};return a.children.forEach(t=>{e.children.push(Hn(t))}),e}function tx(a){const e={};for(const t in a){const s=a[t].value;e[t]={value:s},s===null?e[t].value={src:"",offset:[0,0],repeat:[1,1]}:s!==void 0&&s.isTexture&&(e[t].value={src:s.image.src,offset:[s.offset.x,s.offset.y],repeat:[s.repeat.x,s.repeat.y]})}return e}function sx(a){switch(a){case"blendSrcAlpha":case"blendDstAlpha":case"blendEquationAlpha":case"clippingPlanes":case"shadowSide":case"precision":return!0}return!1}function Tn(a){const e={};for(const t in a){if(t.substring(0,1)==="_"||t.substring(0,2)==="is"||sx(t))continue;const s=typeof a[t],i=a[t];switch(s){case"boolean":case"number":case"string":e[t]=i;break;case"object":i!==null?(e[t]=i,i.isTexture?e[t]={src:Ri.renderToBlob(i),offset:[i.offset.x,i.offset.y],repeat:[i.repeat.x,i.repeat.y]}:t==="uniforms"&&(e[t]=tx(e[t]))):t==="glslVersion"?e[t]="":e[t]={src:"",offset:[0,0],repeat:[1,1]};break}}return a.anisotropy!==void 0&&(e.anisotropy=a.anisotropy),a.clearcoat!==void 0&&(e.clearcoat=a.clearcoat),a.iridescence!==void 0&&(e.iridescence=a.iridescence),a.dispersion!==void 0&&(e.dispersion=a.dispersion),a.sheen!==void 0&&(e.sheen=a.sheen),a.transmission!==void 0&&(e.transmission=a.transmission),a.transmission!==void 0&&(e.transmission=a.transmission),e}function Ul(a){a.updateMatrix();const e={name:a.name,type:a.type,uuid:a.uuid,visible:a.visible,matrix:a.matrix.elements,animations:[],material:void 0,perspectiveCameraInfo:void 0,orthographicCameraInfo:void 0,lightInfo:void 0,children:[]};a.animations.forEach(s=>{e.animations.push({name:s.name,duration:s.duration,blendMode:s.blendMode})});const t=a.type.toLowerCase();if(t.search("mesh")>-1){const s=a;if(Array.isArray(s.material)){const i=[];s.material.forEach(n=>{i.push(Tn(n))}),e.material=i}else e.material=Tn(s.material)}else if(t.search("points")>-1){const s=a;if(Array.isArray(s.material)){const i=[];s.material.forEach(n=>{i.push(Tn(n))}),e.material=i}else e.material=Tn(s.material)}else if(t.search("line")>-1){const s=a;if(Array.isArray(s.material)){const i=[];s.material.forEach(n=>{i.push(Tn(n))}),e.material=i}else e.material=Tn(s.material)}else t.search("camera")>-1?a.type==="PerspectiveCamera"?e.perspectiveCameraInfo={fov:a.fov,zoom:a.zoom,near:a.near,far:a.far,focus:a.focus,aspect:a.aspect,filmGauge:a.filmGauge,filmOffset:a.filmOffset}:a.type==="OrthographicCamera"&&(e.orthographicCameraInfo={zoom:a.zoom,near:a.near,far:a.far,left:a.left,right:a.right,top:a.top,bottom:a.bottom}):t.search("light")>-1&&(e.lightInfo={color:a.color,intensity:a.intensity,decay:a.decay,distance:a.distance,angle:a.angle,penumbra:a.penumbra,groundColor:a.groundColor,width:a.width,height:a.height});return e}function ix(a,e){const t=e.split(".");switch(t.length){case 1:return a[t[0]];case 2:return a[t[0]][t[1]];case 3:return a[t[0]][t[1]][t[2]];case 4:return a[t[0]][t[1]][t[2]][t[3]];case 5:return a[t[0]][t[1]][t[2]][t[3]][t[4]];case 6:return a[t[0]][t[1]][t[2]][t[3]][t[4]][t[5]]}}function nx(a,e){for(const t in e)a[t]=e[t]}function qe(a,e,t){if(a===void 0)return;const s=e.split("."),i=s.length;if(typeof t!="object")switch(i){case 1:a[s[0]]=t;break;case 2:a[s[0]][s[1]]=t;break;case 3:a[s[0]][s[1]][s[2]]=t;break;case 4:a[s[0]][s[1]][s[2]][s[3]]=t;break;case 5:a[s[0]][s[1]][s[2]][s[3]][s[4]]=t;break}else{let r;switch(i){case 1:r=a[s[0]];break;case 2:r=a[s[0]][s[1]];break;case 3:r=a[s[0]][s[1]][s[2]];break;case 4:r=a[s[0]][s[1]][s[2]][s[3]];break;case 5:r=a[s[0]][s[1]][s[2]][s[3]][s[4]];break}r!=null&&nx(r,t)}}function nm(a){return new Promise((e,t)=>{const s=new Image;s.onload=()=>{const i=new x.Texture(s);i.wrapS=x.RepeatWrapping,i.wrapT=x.RepeatWrapping,i.needsUpdate=!0,e(i)},s.onerror=t,s.src=a})}class rx extends ol{canvas=null;inputElement=null;scene=void 0;scenes=new Map;renderer=void 0;renderTargets=new Map;groups=new Map;constructor(e){super(e),window.RemoteThree=this}dispose(){this.scenes.forEach(e=>{ii(e)}),this.scenes.clear(),this.scene&&ii(this.scene),this.renderTargets.forEach(e=>{e.dispose()}),this.renderTargets.clear(),this.renderer?.dispose()}getObject(e){this.app.debugEnabled&&(this.renderer!==void 0&&(Ri.renderer=this.renderer),this.app.send({event:"getObject",target:"app",data:e}))}setObject(e){this.renderer!==void 0&&(Ri.renderer=this.renderer);const t=Ul(e);this.app.send({event:"setObject",target:"editor",data:t})}requestMethod(e,t,s,i){this.app.send({event:"requestMethod",target:"app",data:{uuid:e,key:t,value:s,subitem:i}})}updateObject(e,t,s){this.app.send({event:"updateObject",target:"app",data:{uuid:e,key:t,value:s}})}createTexture(e,t,s){this.app.send({event:"createTexture",target:"app",data:{uuid:e,key:t,value:s}})}addGroup(e){this.groups.get(e.title)===void 0&&(this.groups.set(e.title,{title:e.title,onUpdate:e.onUpdate}),this.app.send({event:"addGroup",target:"editor",data:JSON.stringify(e)}))}removeGroup(e){this.groups.get(e)!==void 0&&(this.groups.delete(e),this.app.send({event:"removeGroup",target:"editor",data:e}))}updateGroup(e,t,s){this.app.send({event:"updateGroup",target:"app",data:JSON.stringify({group:e,prop:t,value:s})})}removeAllGroups(){this.groups.forEach(e=>{const t=e.title;this.groups.delete(t),this.app.send({event:"removeGroup",target:"editor",data:t})}),this.groups.clear()}addSpline(e){setTimeout(()=>{this.app.send({event:"addSpline",target:"editor",data:JSON.stringify(e.toJSON())})},1)}setRenderer(e,t=null){if(this.renderer=e,this.canvas=e.domElement,this.inputElement=t!==null?t:this.canvas,!this.app.debugEnabled)return;const s=`#${e.getClearColor(new x.Color).getHexString()}`;this.app.send({event:"addRenderer",target:"editor",data:{autoClear:e.autoClear,autoClearColor:e.autoClearColor,autoClearDepth:e.autoClearDepth,autoClearStencil:e.autoClearStencil,outputColorSpace:e.outputColorSpace,localClippingEnabled:e.localClippingEnabled,clearColor:s,clearAlpha:e.getClearAlpha(),colorManagement:x.ColorManagement.enabled,toneMapping:e.toneMapping,toneMappingExposure:e.toneMappingExposure,type:e.isWebGLRenderer?"WebGLRenderer":"WebGPURenderer"}})}updateRenderer(e){this.app.send({event:"updateRenderer",target:"app",data:e})}addScene(e){if(e===void 0||(this.scenes.set(e.name,e),!this.app.debugEnabled))return;lh(),ko(e);const t=Hn(e);this.app.send({event:"addScene",target:"editor",data:t})}refreshScene(e){if(!this.app.debugEnabled)return;const t=this.scenes.get(e);if(t!==void 0){const s=Hn(t);this.app.send({event:"refreshScene",target:"app",data:s})}}removeScene(e){if(e===void 0||(this.scenes.delete(e.name),!this.app.debugEnabled))return;const t=Hn(e);this.app.send({event:"removeScene",target:"editor",data:t})}removeAllScenes(){this.scenes.forEach(e=>this.removeScene(e))}getScene(e){let t=null;return this.scenes.forEach((s,i)=>{e.search(i)>-1&&(t=s)}),t}setScene(e){if(e===void 0||(this.scene=e,!this.app.debugEnabled))return;this.renderer!==void 0&&(Ri.renderer=this.renderer),lh(),ko(e);const t=Hn(e);this.app.send({event:"setScene",target:"editor",data:t})}addCamera(e){if(!this.app.debugEnabled)return;const t=Ul(e);this.app.send({event:"addCamera",target:"editor",data:t})}removeCamera(e){if(!this.app.debugEnabled)return;const t=Ul(e);this.app.send({event:"removeCamera",target:"editor",data:t})}handleApp(e){switch(e.event){case"getObject":this.app.dispatchEvent({type:Q.GET_OBJECT,value:e.data});break;case"updateObject":this.app.dispatchEvent({type:Q.UPDATE_OBJECT,value:e.data});break;case"createTexture":this.app.dispatchEvent({type:Q.CREATE_TEXTURE,value:e.data});break;case"requestMethod":this.app.dispatchEvent({type:Q.REQUEST_METHOD,value:e.data});break;case"refreshScene":this.app.send({event:"refreshScene",target:"editor",data:Hn(this.scenes.get(e.data.name))});break;case"updateRenderer":this.renderer&&(this.renderer.autoClearColor=e.data.autoClearColor,this.renderer.outputColorSpace=e.data.outputColorSpace,this.renderer.localClippingEnabled=e.data.localClippingEnabled,this.renderer.setClearColor(e.data.clearColor,e.data.clearAlpha),this.renderer.toneMapping=e.data.toneMapping,this.renderer.toneMappingExposure=e.data.toneMappingExposure,x.ColorManagement.enabled=e.data.colorManagement);break}if(e.event==="updateGroup"){const t=JSON.parse(e.data);this.groups.get(t.group)?.onUpdate(t.prop,t.value)}}handleEditor(e){switch(e.event){case"setObject":this.app.dispatchEvent({type:Q.SET_OBJECT,value:e.data});break;case"addScene":this.app.dispatchEvent({type:Q.ADD_SCENE,value:e.data});break;case"refreshScene":this.app.dispatchEvent({type:Q.REFRESH_SCENE,value:e.data});break;case"removeScene":this.app.dispatchEvent({type:Q.REMOVE_SCENE,value:e.data});break;case"setScene":this.app.dispatchEvent({type:Q.SET_SCENE,value:e.data});break;case"addCamera":this.app.dispatchEvent({type:Q.ADD_CAMERA,value:e.data});break;case"removeCamera":this.app.dispatchEvent({type:Q.REMOVE_CAMERA,value:e.data});break;case"addGroup":this.app.dispatchEvent({type:Q.ADD_GROUP,value:e.data});break;case"removeGroup":this.app.dispatchEvent({type:Q.REMOVE_GROUP,value:e.data});break;case"addSpline":this.app.dispatchEvent({type:Q.ADD_SPLINE,value:e.data});break;case"addRenderer":this.app.dispatchEvent({type:Q.ADD_RENDERER,value:e.data})}}addRT(e,t){const s=new x.WebGLRenderTarget(32,32,t);s.texture.name=e,this.renderTargets.set(e,s)}resize(e,t){const s=this.dpr;this.renderTargets.forEach(n=>{n.setSize(e*s,t*s)});const i=!(this.renderer?.domElement instanceof OffscreenCanvas);this.renderer?.setSize(e,t,i)}set dpr(e){this.renderer?.setPixelRatio(Ti(1,2,e))}get dpr(){return this.renderer!==void 0?this.renderer?.getPixelRatio():1}get width(){return this.renderer!==void 0?this.renderer.domElement.width/this.dpr:0}get height(){return this.renderer!==void 0?this.renderer.domElement.height/this.dpr:0}}var Fa={exports:{}},Tr={};/**
|
18
|
+
`,d=c.createShader(35633),p=c.createShader(35632),f=c.createProgram();if(!(p&&d&&f))return;c.shaderSource(d,h),c.shaderSource(p,u),c.compileShader(d),c.compileShader(p),c.attachShader(f,d),c.attachShader(f,p),c.linkProgram(f),c.detachShader(f,d),c.detachShader(f,p),c.deleteShader(d),c.deleteShader(p),c.useProgram(f);const m=c.createBuffer();c.bindBuffer(34962,m),c.bufferData(34962,new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),35044);const y=c.getAttribLocation(f,"aPosition");c.vertexAttribPointer(y,3,5126,!1,0,0),c.enableVertexAttribArray(y),c.clearColor(1,1,1,1),c.clear(16384),c.viewport(0,0,1,1),c.drawArrays(4,0,3);const g=new Uint8Array(4);return c.readPixels(0,0,1,1,6408,5121,g),c.deleteProgram(f),c.deleteBuffer(m),g.join("")}(a),i="801621810",n="8016218135",r="80162181161",o=Ps?.isIpad?[["a7",r,12],["a8",n,15],["a8x",n,15],["a9",n,15],["a9x",n,15],["a10",n,15],["a10x",n,15],["a12",i,15],["a12x",i,15],["a12z",i,15],["a14",i,15],["a15",i,15],["m1",i,15],["m2",i,15]]:[["a7",r,12],["a8",n,12],["a9",n,15],["a10",n,15],["a11",i,15],["a12",i,15],["a13",i,15],["a14",i,15],["a15",i,15],["a16",i,15],["a17",i,15]];let l;return s==="80162181255"?l=o.filter(([,,c])=>c>=14):(l=o.filter(([,c])=>c===s),l.length||(l=o)),l.map(([c])=>`apple ${c} gpu`)}class md extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target.prototype)}}const Il=[],gd=[];function y0(a,e){if(a===e)return 0;const t=a;a.length>e.length&&(a=e,e=t);let s=a.length,i=e.length;for(;s>0&&a.charCodeAt(~-s)===e.charCodeAt(~-i);)s--,i--;let n,r=0;for(;r<s&&a.charCodeAt(r)===e.charCodeAt(r);)r++;if(s-=r,i-=r,s===0)return i;let o,l,c=0,h=0,u=0;for(;h<s;)gd[h]=a.charCodeAt(r+h),Il[h]=++h;for(;u<i;)for(n=e.charCodeAt(r+u),o=u++,c=u,h=0;h<s;h++)l=n===gd[h]?o:o+1,o=Il[h],c=Il[h]=o>c?l>c?c+1:l:l>o?o+1:l;return c}function x0(a){return a!=null}const _0=({mobileTiers:a=[0,15,30,60],desktopTiers:e=[0,15,30,60],override:t={},glContext:s,failIfMajorPerformanceCaveat:i=!1,benchmarksURL:n="https://unpkg.com/detect-gpu@5.0.70/dist/benchmarks"}={})=>Bl(void 0,void 0,void 0,function*(){const r={};if(em)return{tier:0,type:"SSR"};const{isIpad:o=!!Ps?.isIpad,isMobile:l=!!Ps?.isMobile,screenSize:c=window.screen,loadBenchmarks:h=S=>Bl(void 0,void 0,void 0,function*(){const M=yield fetch(`${n}/${S}`).then(w=>w.json());if(parseInt(M.shift().split(".")[0],10)<4)throw new md("Detect GPU benchmark data is out of date. Please update to version 4x");return M})}=t;let{renderer:u}=t;const d=(S,M,w,R,P)=>({device:P,fps:R,gpu:w,isMobile:l,tier:S,type:M});let p,f="";if(u)u=fd(u),p=[u];else{const S=s||function(w,R=!1){const P={alpha:!1,antialias:!1,depth:!1,failIfMajorPerformanceCaveat:R,powerPreference:"high-performance",stencil:!1};w&&delete P.powerPreference;const z=window.document.createElement("canvas"),$=z.getContext("webgl",P)||z.getContext("experimental-webgl",P);return $??void 0}(Ps?.isSafari12,i);if(!S)return d(0,"WEBGL_UNSUPPORTED");const M=Ps?.isFirefox?null:S.getExtension("WEBGL_debug_renderer_info");if(u=M?S.getParameter(M.UNMASKED_RENDERER_WEBGL):S.getParameter(S.RENDERER),!u)return d(1,"FALLBACK");f=u,u=fd(u),p=function(w,R,P){return R==="apple gpu"?g0(w,R,P):[R]}(S,u,l)}const m=(yield Promise.all(p.map(function(S){var M;return Bl(this,void 0,void 0,function*(){const w=(_e=>{const at=l?["adreno","apple","mali-t","mali","nvidia","powervr","samsung"]:["intel","apple","amd","radeon","nvidia","geforce","adreno"];for(const Dt of at)if(_e.includes(Dt))return Dt})(S);if(!w)return;const R=`${l?"m":"d"}-${w}${o?"-ipad":""}.json`,P=r[R]=(M=r[R])!==null&&M!==void 0?M:h(R);let z;try{z=yield P}catch(_e){if(_e instanceof md)throw _e;return}const $=function(_e){var at;const Dt=(_e=_e.replace(/\([^)]+\)/,"")).match(/\d+/)||_e.match(/(\W|^)([A-Za-z]{1,3})(\W|$)/g);return(at=Dt?.join("").replace(/\W|amd/g,""))!==null&&at!==void 0?at:""}(S);let q=z.filter(([,_e])=>_e===$);q.length||(q=z.filter(([_e])=>_e.includes(S)));const j=q.length;if(j===0)return;const X=S.split(/[.,()\[\]/\s]/g).sort().filter((_e,at,Dt)=>at===0||_e!==Dt[at-1]).join(" ");let Z,[ve,,,,ue]=j>1?q.map(_e=>[_e,y0(X,_e[2])]).sort(([,_e],[,at])=>_e-at)[0][0]:q[0],ge=Number.MAX_VALUE;const{devicePixelRatio:ie}=window,we=c.width*ie*c.height*ie;for(const _e of ue){const[at,Dt]=_e,_r=at*Dt,gn=Math.abs(we-_r);gn<ge&&(ge=gn,Z=_e)}if(!Z)return;const[,,ke,rt]=Z;return[ge,ke,ve,rt]})}))).filter(x0).sort(([S=Number.MAX_VALUE,M],[w=Number.MAX_VALUE,R])=>S===w?M-R:S-w);if(!m.length){const S=m0.find(M=>u.includes(M));return S?d(0,"BLOCKLISTED",S):d(1,"FALLBACK",`${u} (${f})`)}const[,y,g,_]=m[0];if(y===-1)return d(0,"BLOCKLISTED",g,y,_);const b=l?a:e;let T=0;for(let S=0;S<b.length;S++)y>=b[S]&&(T=S);return d(T,"BENCHMARK",g,y,_)});var tm=(a=>(a[a.High=0]="High",a[a.Medium=1]="Medium",a[a.Low=2]="Low",a))(tm||{});function sm(a){let e=0;const t=performance.now();function s(){e++;const i=performance.now();if(i-t>=100){const n=e/((i-t)/1e3),r=Math.round(n/30)*30;a(r)}else requestAnimationFrame(s)}requestAnimationFrame(s)}function b0(a,e,t){return new Promise(s=>{_0().then(i=>{let n=!1;const r=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);if(n="transferControlToOffscreen"in a,r){const l=navigator.userAgent.match(/version\/(\d+)/i);n=(l?parseInt(l[1]):0)>=17}const o={dpr:devicePixelRatio,fps:30,width:innerWidth,height:innerHeight,mobile:i.isMobile!==void 0?i.isMobile:!1,supportOffScreenCanvas:n,quality:2,dev:e,editor:t};i.tier===3?o.quality=0:i.tier===2&&(o.quality=1),sm(l=>{o.fps=l,s(o)}),s(o)})})}function Ti(a,e,t){return Math.min(e,Math.max(a,t))}function Uo(a,e,t){return(t-a)/(e-a)}function rr(a,e,t){return a*(1-t)+e*t}function T0(a,e,t,s,i){return rr(t,s,Uo(a,e,i))}function S0(a,e){const t=a-e;return Math.sqrt(t*t)}function ss(a,e=1){return Number(a.toFixed(e))}function v0(a,e,t,s){return rr(a,e,1-Math.exp(-t*s))}function w0(a,e=1){return Number(a.toFixed(e))}function E0(a,e,t,s){return a===e&&t===s}function M0(a,e,t,s){return 1/(3*e*a*a+2*t*a+s)}function C0(a,e,t,s,i){return e*(a*a*a)+t*(a*a)+s*a+i}function A0(a,e,t,s,i){const n=a*a;return e*(n*a)+t*n+s*a+i}function R0(a,e,t,s,i){if(a<=0)return 0;if(a>=1)return 1;if(E0(e,t,s,i))return a;const n=0,r=0,o=e,l=t,c=s,h=i,u=1,d=1,p=u-3*c+3*o-n,f=3*c-6*o+3*n,m=3*o-3*n,y=n,g=d-3*h+3*l-r,_=3*h-6*l+3*r,b=3*l-3*r,T=r;let S=a;for(let M=0;M<5;M++){const w=C0(S,p,f,m,y);let R=M0(S,p,f,m);R===1/0&&(R=a),S-=(w-a)*R,S=Math.min(Math.max(S,0),1)}return A0(S,g,_,b,T)}const oh=a=>{a?.dispose()},jh=a=>{if(a)if(Array.isArray(a))a.forEach(e=>jh(e));else{for(const e in a){const t=a[e];t!==null&&t instanceof x.Texture&&oh(t)}if(a.isShaderMaterial===!0){const e=a;for(const t in e.uniforms){const s=e.uniforms[t];s.value!==null&&s.value instanceof x.Texture&&oh(s.value)}}a.dispose()}},ii=a=>{if(a){for(;a.children.length>0;){const e=a.children[0];e.type==="Audio"?(e.pause(),e.parent&&e.parent.remove(e)):ii(e)}if(a.parent&&a.parent.remove(a),a.isMesh){const e=a;e.geometry?.dispose(),jh(e.material)}a.dispose!==void 0&&a.dispose()}};exports.totalThreeObjects=0;const lh=()=>{exports.totalThreeObjects=0},ko=a=>{if(!a)return;let e=a.name.replaceAll(" ","").replaceAll("/",".");if(e.length===0&&(e=`obj_${exports.totalThreeObjects}`,exports.totalThreeObjects++),a.parent!==null&&a.parent.uuid.length>0&&(e=`${a.parent.uuid}.${e}`),a.uuid=e,a.isMesh!==void 0){const t=a;if(Array.isArray(t.material))t.material.forEach((s,i)=>{s.uuid=`${e}.material.${i}`});else{const s=t.material;s.uuid=`${e}.material`}}a.children.forEach(t=>ko(t))};class Ri{static renderer;static canvas;static context=null;static scene=null;static camera=null;static material=null;static inited=!1;static width=100;static height=100;static init(){this.inited||(this.canvas=document.createElement("canvas"),this.canvas.width=this.width,this.canvas.height=this.height,this.context=this.canvas.getContext("2d"),this.inited=!0)}static renderToBlob(e){this.init();const t=e.repeat.clone(),s=e.offset.clone();if(e.repeat.set(1,1),e.offset.set(0,0),this.context!==null){this.context.clearRect(0,0,this.width,this.height);const i=e.image;if(i!=null&&i.width>0){this.canvas.title=e.sourceFile;const n=this.canvas.width/i.width,r=this.renderToCanvas(e);this.context.drawImage(r,0,0,i.width*n,i.height*n)}}return e.repeat.copy(t),e.offset.copy(s),this.canvas.toDataURL("image/png")}static renderToCanvas(e){if(this.material===null){this.camera=new x.OrthographicCamera(-.5,.5,.5,-.5,0,100),this.scene=new x.Scene,this.material=new x.MeshBasicMaterial;const t=new x.BufferGeometry;t.setAttribute("position",new x.Float32BufferAttribute([-.5,-.5,0,1.5,-.5,0,-.5,1.5,0],3)),t.setAttribute("normal",new x.Float32BufferAttribute([0,0,1,0,0,1],3)),t.setAttribute("uv",new x.Float32BufferAttribute([0,0,2,0,0,2],2));const s=new x.Mesh(t,this.material);this.scene.add(s)}if(e.isRenderTargetTexture)this.material.map=e,this.renderer.render(this.scene,this.camera);else{const t=this.renderer.outputColorSpace,s=e.colorSpace;this.renderer.outputColorSpace=x.LinearSRGBColorSpace,e.colorSpace=x.LinearSRGBColorSpace,this.material.map=e,this.renderer.render(this.scene,this.camera),this.renderer.outputColorSpace=t,e.colorSpace=s}return this.renderer.domElement}}function N0(a){return new Promise(e=>{const t=new x.ObjectLoader;t.parseAsync(a.scene).then(s=>{const i=new x.AnimationMixer(s);if(a.animations.length>0){const r=a.animations.map(l=>x.AnimationClip.parse(l));i.clipAction(r[0]).play(),i.getRoot().animations=a.animations,i.getRoot().mixer=i}const n=[];a.cameras&&a.cameras.length>0&&a.cameras.forEach(r=>{const o=t.parse(r);n.push(o)}),e({animations:a.animations,model:s,mixer:i,cameras:n})})})}let ch=[];function P0(a,e){Ri.renderer=e.renderer,a.passes.forEach((t,s)=>{const i=[];i.push({type:"boolean",prop:"Enabled",value:t.enabled});let n=(o,l)=>{console.log("Default Handle Pass:",o,l)};if(t instanceof pd.EffectPass)t.effects.forEach((o,l)=>{o.uniforms.size>0&&o.uniforms.forEach((c,h)=>{const u=`${o.name.replace("Effect","")} ${h}`;if(c.value===null)i.push({prop:h,title:u,type:"image",value:{offset:[0,0],repeat:[1,1],src:""}});else if(c.value.isTexture){const d=c.value,p=Ri.renderToBlob(d);i.push({prop:h,title:u,type:"image",value:{offset:[d.offset.x,d.offset.y],repeat:[d.repeat.x,d.repeat.y],src:p}})}else typeof c.value=="number"?i.push({prop:h,title:u,type:"number",value:c.value,step:.01}):typeof c.value=="string"?i.push({prop:h,title:u,type:"string",value:c.value}):typeof c.value=="boolean"&&i.push({prop:h,title:u,type:"boolean",value:c.value})})}),n=(o,l)=>{t.effects.forEach(c=>{c.uniforms.size>0&&c.uniforms.forEach((h,u)=>{u===o&&(h.value=l)})})};else if(t instanceof pd.ShaderPass){const o=t.fullscreenMaterial;for(const l in o.uniforms){const c=o.uniforms[l],h=`${o.name.replace("Material","")} ${l}`;if(c.value===null)i.push({title:h,prop:l,type:"image",value:{offset:[0,0],repeat:[1,1],src:""}});else if(c.value.isTexture){const u=c.value,d=Ri.renderToBlob(u);i.push({title:h,prop:l,type:"image",value:{offset:[u.offset.x,u.offset.y],repeat:[u.repeat.x,u.repeat.y],src:d}})}else typeof c.value=="number"?i.push({title:h,prop:l,type:"number",value:c.value,step:.01}):typeof c.value=="string"?i.push({title:h,prop:l,type:"string",value:c.value}):typeof c.value=="boolean"&&i.push({title:h,prop:l,type:"boolean",value:c.value})}n=(l,c)=>{const h=o.uniforms[l];h.value=c}}else return;const r=`Pass: ${t.name}`;e.addGroup({title:r,items:i,onUpdate:(o,l)=>{o==="Enabled"?t.enabled=l:n(o,l)}}),ch.push(r)})}function F0(a){ch.forEach(e=>{a.removeGroup(e)}),ch=[]}function D0(a,e,t,s=1024){return new Promise(i=>{const n=e.aspect,r=e.fov,o=e.rotation.clone(),l=t.outputBuffer;e.aspect=1,e.fov=90,e.updateProjectionMatrix();const c=new x.WebGLRenderTarget(s,s,{format:x.RGBAFormat,depthBuffer:!0,stencilBuffer:!1});t.outputBuffer=c,_n(a,c,e,"nx",t,s).then(()=>{_n(a,c,e,"ny",t,s).then(()=>{_n(a,c,e,"nz",t,s).then(()=>{_n(a,c,e,"px",t,s).then(()=>{_n(a,c,e,"py",t,s).then(()=>{_n(a,c,e,"pz",t,s).then(()=>{e.aspect=n,e.fov=r,e.rotation.copy(o),e.updateMatrixWorld(),e.updateProjectionMatrix(),t.outputBuffer=l,c.dispose(),i()})})})})})})})}function _n(a,e,t,s,i,n){return new Promise(r=>{const o=Math.PI/2;switch(s){case"nx":t.rotation.set(0,-o,0);break;case"ny":t.rotation.set(-o,0,Math.PI);break;case"nz":t.rotation.set(0,0,0);break;case"px":t.rotation.set(0,o,0);break;case"py":t.rotation.set(o,0,Math.PI);break;case"pz":t.rotation.set(0,Math.PI,0);break}t.updateMatrixWorld(),i.render();const l=new Uint8Array(n*n*4);a.readRenderTargetPixels(e,0,0,n,n,l);const c=document.createElement("canvas");c.width=c.height=n;const h=c.getContext("2d"),u=h.createImageData(n,n);u.data.set(l),h.putImageData(u,0,0);const d=document.createElement("canvas");d.width=d.height=n;const p=d.getContext("2d");p.translate(0,n),p.scale(1,-1),p.drawImage(c,0,0);const f=d.toDataURL("image/png"),m=document.createElement("a");m.href=f,m.download=`${t.name}_${s}.png`,document.body.appendChild(m),m.click(),m.remove(),r()})}const bn=qh(["ctrlKey","metaKey","shiftKey","button","pointerId","pointerType","clientX","clientY","pageX","pageY"]),O0=qh(["clientX","clientY","deltaX","deltaY","deltaMode"]),B0=qh(["ctrlKey","metaKey","shiftKey","keyCode"]);function I0(a,e){a.preventDefault(),O0(a,e)}function L0(a){a.preventDefault()}function U0(a,e,t){for(const s of e)t[s]=a[s]}function qh(a){return function(t,s){const i={type:t.type};U0(t,a,i),s(i)}}function Ll(a,e){const t=[],s={type:a.type,touches:t};for(let i=0;i<a.touches.length;++i){const n=a.touches[i];t.push({pageX:n.pageX,pageY:n.pageY})}e(s)}const k0={37:!0,38:!0,39:!0,40:!0};function z0(a,e){const{keyCode:t}=a;k0[t]&&(a.preventDefault(),B0(a,e))}const G0={contextmenu:L0,mousedown:bn,mousemove:bn,mouseup:bn,pointerdown:bn,pointermove:bn,pointerup:bn,touchstart:Ll,touchmove:Ll,touchend:Ll,wheel:I0,keydown:z0};let V0=0;class H0{id;worker;constructor(e,t,s){this.id=V0++,this.worker=t;const i=r=>{this.worker.postMessage({type:"event",id:this.id,data:r})};t.postMessage({type:"makeProxy",id:this.id});for(const[r,o]of Object.entries(s))e.addEventListener(r,l=>{o(l,i)});function n(){i({type:"resize",left:0,top:0,width:innerWidth,height:innerHeight})}window.addEventListener("resize",n),n()}}class im extends x.EventDispatcher{style={};left=0;top=0;width=0;height=0;ownerDocument=void 0;constructor(){super(),this.ownerDocument=this}get clientWidth(){return this.width}set clientWidth(e){this.width=e}get clientHeight(){return this.height}set clientHeight(e){this.height=e}setPointerCapture(){}releasePointerCapture(){}getBoundingClientRect(){return{x:this.left,y:this.top,left:this.left,top:this.top,width:this.width,height:this.height,right:this.left+this.width,bottom:this.top+this.height,toJSON:()=>({})}}handleEvent(e){if(e.type==="size"){this.left=e.left,this.top=e.top,this.width=e.width,this.height=e.height;return}e.preventDefault=da,e.stopPropagation=da,this.dispatchEvent(e)}focus(){}getRootNode(){return this}}class W0{targets={};constructor(){this.handleEvent=this.handleEvent.bind(this)}makeProxy(e){const{id:t}=e,s=new im;this.targets[t]=s}getProxy(e){return this.targets[e]}handleEvent(e){this.targets[e.id]?.handleEvent(e.data)}}var Q=(a=>(a.CUSTOM="ToolEvents::custom",a.SELECT_DROPDOWN="ToolEvents::selectDropdown",a.DRAG_UPDATE="ToolEvents::dragUpdate",a.ADD_SCENE="ToolEvents::addScene",a.REFRESH_SCENE="ToolEvents::refreshScene",a.REMOVE_SCENE="ToolEvents::removeScene",a.SET_SCENE="ToolEvents::setScene",a.GET_OBJECT="ToolEvents::getObject",a.SET_OBJECT="ToolEvents::setObject",a.UPDATE_OBJECT="ToolEvents::updateObject",a.CREATE_TEXTURE="ToolEvents::createTexture",a.REQUEST_METHOD="ToolEvents::requestMethod",a.ADD_CAMERA="ToolEvents::addCamera",a.REMOVE_CAMERA="ToolEvents::removeCamera",a.ADD_GROUP="ToolEvents::addGroup",a.REMOVE_GROUP="ToolEvents::removeGroup",a.ADD_SPLINE="ToolEvents::addSpline",a.ADD_RENDERER="ToolEvents::addRenderer",a.UPDATE_RENDERER="ToolEvents::updateRenderer",a))(Q||{});class $0 extends x.EventDispatcher{components=new Map;appHandlers=[];editorHandlers=[];_appID="";_debugEnabled;_broadcastChannel=void 0;_webSocket=void 0;_mode="app";_connected=!1;_useBC=!1;constructor(e,t,s,i=!0){super(),this._appID=e,this._debugEnabled=t,this.editor=s,t&&(this._useBC=i,i?(this._broadcastChannel=new BroadcastChannel(e),this._broadcastChannel.addEventListener("message",this.messageHandler)):(this._webSocket=new WebSocket(e),this._webSocket.addEventListener("open",this.openHandler),this._webSocket.addEventListener("close",this.closeHandler),this._webSocket.addEventListener("message",this.messageHandler)))}addComponent(e,t){this.components.set(e,t)}dispose(){this._broadcastChannel!==void 0&&this._broadcastChannel.removeEventListener("message",this.messageHandler),this._webSocket!==void 0&&(this._webSocket.removeEventListener("open",this.openHandler),this._webSocket.removeEventListener("close",this.closeHandler),this._webSocket.removeEventListener("message",this.messageHandler)),this.components.forEach(e=>{e.dispose()}),this.components.clear()}send(e){this._mode!==e.target&&(this._useBC?this._broadcastChannel?.postMessage(e):this._connected&&this._webSocket?.send(JSON.stringify(e)))}messageHandler=e=>{let t=e.data;this._useBC||(t=JSON.parse(e.data)),t.target==="editor"?this.handleEditorBroadcast(t):this.handleAppBroadcast(t)};handleAppBroadcast(e){switch(this.appHandlers.forEach(t=>{t.callback(e)}),e.event){case"custom":this.dispatchEvent({type:"ToolEvents::custom",value:e.data});break}}handleEditorBroadcast(e){switch(this.editorHandlers.forEach(t=>{t.callback(e)}),e.event){case"custom":this.dispatchEvent({type:"ToolEvents::custom",value:e.data});break}}openHandler=()=>{this._connected=!0};closeHandler=()=>{this._connected=!1};get appID(){return this._appID}get connected(){return this._connected}get debugEnabled(){return this._debugEnabled}get mode(){return this._mode}get isApp(){return this._mode==="app"}get editor(){return this._mode==="editor"}set editor(e){e&&(this._mode="editor")}}class j0{canvas;inputElement;settings;playing=!1;rafID=-1;constructor(e,t,s){this.canvas=e,this.inputElement=t,this.settings=s}dispose(){this.stop()}play(){this.playing||(this.playing=!0,this.onUpdate())}stop(){this.playing&&(this.playing=!1,cancelAnimationFrame(this.rafID),this.rafID=-1)}update(){}draw(){}resize(e,t){this.settings.supportOffScreenCanvas&&(this.inputElement.clientWidth=e,this.inputElement.clientHeight=t,this.inputElement.width=e,this.inputElement.height=t)}onResize=e=>{this.resize(e.width,e.height)};onUpdate=()=>{this.update(),this.draw(),this.rafID=requestAnimationFrame(this.onUpdate)}}class q0 extends x.Scene{clock;cameras;lights;world;constructor(e){super(),this.name=e,this.clock=new x.Clock,this.lights=new x.Group,this.lights.name="lights",this.add(this.lights),this.cameras=new x.Group,this.cameras.name="cameras",this.add(this.cameras),this.world=new x.Group,this.world.name="world",this.add(this.world)}init(){return new Promise(e=>{this.setupLights().then(()=>this.setupCameras()).then(()=>this.setupWorld()).then(()=>this.setupPost()).then(()=>this.setupAnimation()).then(()=>this.setupDebug()).then(()=>e())})}setupLights(){return new Promise(e=>{e()})}setupCameras(){return new Promise(e=>{e()})}setupWorld(){return new Promise(e=>{e()})}setupPost(){return new Promise(e=>{e()})}setupAnimation(){return new Promise(e=>{e()})}setupDebug(){return new Promise(e=>{e()})}dispose(){}update(){}draw(e){}postDraw(){}resize(e,t,s){}show(){this.clock.start(),this.showComplete()}showComplete(){this.enable()}hide(){this.disable(),this.hideComplete()}hideComplete(){this.clock.stop()}enable(){}disable(){}get deltaTime(){return Math.min(this.clock.getDelta(),1/30)}}class ol{app;constructor(e){this.app=e,this.app.appHandlers.push({remote:this,callback:this.handleApp.bind(this)}),this.app.editorHandlers.push({remote:this,callback:this.handleEditor.bind(this)})}dispose(){const e=this.app.appHandlers.findIndex(t=>t.remote===this);e>-1&&(this.app.appHandlers.splice(e,1),this.app.editorHandlers.splice(e,1))}handleApp(e){}handleEditor(e){}}class Y0 extends ol{selectDropdown(e,t){this.app.send({event:"selectComponent",target:"app",data:{dropdown:e,value:t}})}updateDropdown(e,t){this.app.send({event:"draggableListUpdate",target:"app",data:{dropdown:e,value:t}})}handleApp(e){switch(e.event){case"selectComponent":this.app.dispatchEvent({type:Q.SELECT_DROPDOWN,value:e.data});break;case"draggableListUpdate":this.app.dispatchEvent({type:Q.DRAG_UPDATE,value:e.data});break}}}function X0(a,e,t){if(a.editor){t.ui.restore(),t.onSelectionChange(r=>{r.length<1||r.forEach(o=>{let l=o.address.sheetId,c="setSheet",h={};switch(o.type){case"Theatre_Sheet_PublicAPI":c="setSheet",h={sheet:o.address.sheetId},e.activeSheet=e.sheets.get(o.address.sheetId);break;case"Theatre_SheetObject_PublicAPI":c="setSheetObject",l+=`_${o.address.objectKey}`,h={id:l,sheet:o.address.sheetId,key:o.address.objectKey},e.activeSheet=e.sheets.get(o.address.sheetId);break}a.send({event:c,target:"app",data:h})})});let s=-1;const i=()=>{if(e.activeSheet!==void 0&&s!==e.activeSheet.sequence.position){s=e.activeSheet.sequence.position;const r=e.activeSheet;a.send({event:"updateTimeline",target:"app",data:{position:s,sheet:r.address.sheetId}})}},n=()=>{i(),requestAnimationFrame(n)};i(),n()}else t.ui.hide()}async function Z0(){for(;!document.getElementById("theatrejs-studio-root");)await new Promise(s=>setTimeout(s,100));const a=document.getElementById("theatrejs-studio-root");if(a===null||a.shadowRoot===null)return;const e=a.shadowRoot.getElementById("pointer-root");if(e===null)return;const t=e.children[0];if(t!==null){try{const i=t.children[1].children[1];i.parentElement?.removeChild(i)}catch{}try{const s=t.children[3];s.style.top="0",s.style.right="300px"}catch{}}}function Q0(a,e,t,s,i){const n=1-a;return n*n*n*e+3*n*n*a*t+3*n*a*a*s+a*a*a*i}function K0(a,e,t){if(a.type!=="bezier"||a.handles.length!==4)throw new Error("Invalid keyframe data for Bézier interpolation.");const[s,i]=a.handles,n=(t-a.position)/(e.position-a.position);return Q0(n,a.value,a.value+s,e.value+i,e.value)}class J0 extends ol{project;sheets=new Map;sheetObjects=new Map;sheetObjectCBs=new Map;sheetObjectUnsubscribe=new Map;activeSheet;studio=void 0;dispose(){this.project=void 0,this.sheets=new Map,this.sheetObjects=new Map,this.sheetObjectCBs=new Map,this.sheetObjectUnsubscribe=new Map}getSheetInstance(e,t){return t!==void 0?`${e}-${t}`:e}sheet(e,t){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const s=this.getSheetInstance(e,t);let i=this.sheets.get(s);return i!==void 0||(i=this.project?.sheet(e,t),this.sheets.set(s,i)),i}playSheet(e,t,s){return new Promise(i=>{const n=t!==void 0?{...t}:{};this.sheet(e,s)?.sequence.play(n).then(r=>i(r)),this.app.send({event:"playSheet",target:"editor",data:{sheet:e,instance:s,value:t}})})}pauseSheet(e,t){this.sheet(e,t)?.sequence.pause(),this.app.send({event:"pauseSheet",target:"editor",data:{sheet:e,instance:t}})}clearSheetObjects(e){this.sheetObjects.forEach((t,s)=>{s.search(`${e}_`)>-1&&this.unsubscribe(t)})}sheetObject(e,t,s,i,n){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const r=this.sheet(e,n);if(r===void 0)return;const l=`${this.getSheetInstance(e,n)}_${t}`;let c=this.sheetObjects.get(l),h=s;c!==void 0&&(h={...s,...c.value}),c=r.object(t,h),this.sheetObjects.set(l,c),this.sheetObjectCBs.set(l,i!==void 0?i:da);const u=c.onValuesChange(d=>{if(this.app.editor){for(const f in d){const m=d[f];typeof m=="object"&&Jf(m)&&(d[f]={r:m.r,g:m.g,b:m.b,a:m.a})}this.app.send({event:"updateSheetObject",target:"app",data:{sheet:e,sheetObject:l,values:d}})}const p=this.sheetObjectCBs.get(l);p!==void 0&&p(d)});return this.sheetObjectUnsubscribe.set(l,u),c}getSheetObjectKeyframes(e,t,s){const i=this.sheet(e);if(i===void 0)return[];const n=`${e}_${t}`,r=this.sheetObjects.get(n);return r===void 0?[]:i.sequence.__experimental_getKeyframes(r.props[s])}getSheetObjectVectors(e,t){const s=this.sheet(e);if(s===void 0)return[];const i=`${e}_${t}`,n=this.sheetObjects.get(i);if(n===void 0)return[];const r=[],o=s.sequence.__experimental_getKeyframes(n.props.x),l=s.sequence.__experimental_getKeyframes(n.props.y),c=s.sequence.__experimental_getKeyframes(n.props.z),h=new Set;return o.forEach(d=>h.add(d.position)),l.forEach(d=>h.add(d.position)),c.forEach(d=>h.add(d.position)),Array.from(h).sort((d,p)=>d-p).forEach(d=>{const p=(f,m)=>{const y=f.find((b,T)=>b.position<=m&&(f[T+1]?.position||1/0)>m),g=f.find(b=>b.position>m);if(!y)return g?.value||0;if(!g||y.position===m)return y.value;if(y.type==="bezier")return K0(y,g,m);const _=(m-y.position)/(g.position-y.position);return y.value+_*(g.value-y.value)};r.push({position:d,x:p(o,d),y:p(l,d),z:p(c,d)})}),r}unsubscribe(e){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const t=e.address.sheetId,s=e.address.objectKey;this.sheets.get(t)?.detachObject(s);const n=`${t}_${s}`,r=this.sheetObjectUnsubscribe.get(n);r!==void 0&&(this.sheetObjects.delete(n),this.sheetObjectCBs.delete(n),this.sheetObjectUnsubscribe.delete(n),r())}handleApp(e){let t;switch(e.event){case"setSheet":t=this.sheets.get(e.data.sheet),t!==void 0&&(this.activeSheet=t,this.studio?.setSelection([t]));break;case"setSheetObject":t=this.sheetObjects.get(`${e.data.sheet}_${e.data.key}`),t!==void 0&&this.studio?.setSelection([t]);break;case"updateSheetObject":t=this.sheets.get(e.data.sheet),t!==void 0&&t.sequence.pause(),t=this.sheetObjectCBs.get(e.data.sheetObject),t!==void 0&&t(e.data.values);break;case"updateTimeline":t=this.sheets.get(e.data.sheet),this.activeSheet!==void 0&&(this.activeSheet.sequence.position=e.data.position);break}}handleEditor(e){if(this.app.editor)switch(e.event){case"playSheet":this.sheet(e.data.sheet,e.data.instance)?.sequence.play(e.data.value);break;case"pauseSheet":this.sheet(e.data.sheet,e.data.instance)?.sequence.pause();break}}handleEditorApp(){if(this.app.editor){this.studio?.ui.restore(),this.studio?.onSelectionChange(i=>{i.length<1||i.forEach(n=>{let r=n.address.sheetId,o="setSheet",l={};switch(n.type){case"Theatre_Sheet_PublicAPI":o="setSheet",l={sheet:n.address.sheetId},this.activeSheet=this.sheets.get(n.address.sheetId);break;case"Theatre_SheetObject_PublicAPI":o="setSheetObject",r+=`_${n.address.objectKey}`,l={id:r,sheet:n.address.sheetId,key:n.address.objectKey},this.activeSheet=this.sheets.get(n.address.sheetId);break}this.app.send({event:o,target:"app",data:l})})});let e=-1;const t=()=>{if(this.activeSheet!==void 0&&e!==this.activeSheet.sequence.position){e=this.activeSheet.sequence.position;const i=this.activeSheet;this.app.send({event:"updateTimeline",target:"app",data:{position:e,sheet:i.address.sheetId}})}},s=()=>{t(),requestAnimationFrame(s)};t(),s()}else this.studio?.ui.hide()}}function ex(a){if(a.name==="cameras")return"camera";if(a.name==="interactive")return"interactive";if(a.name==="lights")return"light";if(a.name==="ui")return"ui";if(a.name==="utils")return"utils";const e=a.type;return e.search("Helper")>-1?"icon_utils":e.search("Camera")>-1?"camera":e.search("Light")>-1?"light":"obj3D"}function Hn(a){const e={name:a.name,type:a.type,uuid:a.uuid,children:[]};return a.children.forEach(t=>{e.children.push(Hn(t))}),e}function tx(a){const e={};for(const t in a){const s=a[t].value;e[t]={value:s},s===null?e[t].value={src:"",offset:[0,0],repeat:[1,1]}:s!==void 0&&s.isTexture&&(e[t].value={src:s.image.src,offset:[s.offset.x,s.offset.y],repeat:[s.repeat.x,s.repeat.y]})}return e}function sx(a){switch(a){case"blendSrcAlpha":case"blendDstAlpha":case"blendEquationAlpha":case"clippingPlanes":case"shadowSide":case"precision":return!0}return!1}function Tn(a){const e={};for(const t in a){if(t.substring(0,1)==="_"||t.substring(0,2)==="is"||sx(t))continue;const s=typeof a[t],i=a[t];switch(s){case"boolean":case"number":case"string":e[t]=i;break;case"object":i!==null?(e[t]=i,i.isTexture?e[t]={src:Ri.renderToBlob(i),offset:[i.offset.x,i.offset.y],repeat:[i.repeat.x,i.repeat.y]}:t==="uniforms"&&(e[t]=tx(e[t]))):t==="glslVersion"?e[t]="":e[t]={src:"",offset:[0,0],repeat:[1,1]};break}}return a.anisotropy!==void 0&&(e.anisotropy=a.anisotropy),a.clearcoat!==void 0&&(e.clearcoat=a.clearcoat),a.iridescence!==void 0&&(e.iridescence=a.iridescence),a.dispersion!==void 0&&(e.dispersion=a.dispersion),a.sheen!==void 0&&(e.sheen=a.sheen),a.transmission!==void 0&&(e.transmission=a.transmission),a.transmission!==void 0&&(e.transmission=a.transmission),e}function Ul(a){a.updateMatrix();const e={name:a.name,type:a.type,uuid:a.uuid,visible:a.visible,matrix:a.matrix.elements,animations:[],material:void 0,perspectiveCameraInfo:void 0,orthographicCameraInfo:void 0,lightInfo:void 0,children:[]};a.animations.forEach(s=>{e.animations.push({name:s.name,duration:s.duration,blendMode:s.blendMode})});const t=a.type.toLowerCase();if(t.search("mesh")>-1){const s=a;if(Array.isArray(s.material)){const i=[];s.material.forEach(n=>{i.push(Tn(n))}),e.material=i}else e.material=Tn(s.material)}else if(t.search("points")>-1){const s=a;if(Array.isArray(s.material)){const i=[];s.material.forEach(n=>{i.push(Tn(n))}),e.material=i}else e.material=Tn(s.material)}else if(t.search("line")>-1){const s=a;if(Array.isArray(s.material)){const i=[];s.material.forEach(n=>{i.push(Tn(n))}),e.material=i}else e.material=Tn(s.material)}else t.search("camera")>-1?a.type==="PerspectiveCamera"?e.perspectiveCameraInfo={fov:a.fov,zoom:a.zoom,near:a.near,far:a.far,focus:a.focus,aspect:a.aspect,filmGauge:a.filmGauge,filmOffset:a.filmOffset}:a.type==="OrthographicCamera"&&(e.orthographicCameraInfo={zoom:a.zoom,near:a.near,far:a.far,left:a.left,right:a.right,top:a.top,bottom:a.bottom}):t.search("light")>-1&&(e.lightInfo={color:a.color,intensity:a.intensity,decay:a.decay,distance:a.distance,angle:a.angle,penumbra:a.penumbra,groundColor:a.groundColor,width:a.width,height:a.height});return e}function ix(a,e){const t=e.split(".");switch(t.length){case 1:return a[t[0]];case 2:return a[t[0]][t[1]];case 3:return a[t[0]][t[1]][t[2]];case 4:return a[t[0]][t[1]][t[2]][t[3]];case 5:return a[t[0]][t[1]][t[2]][t[3]][t[4]];case 6:return a[t[0]][t[1]][t[2]][t[3]][t[4]][t[5]]}}function nx(a,e){for(const t in e)a[t]=e[t]}function qe(a,e,t){if(a===void 0)return;const s=e.split("."),i=s.length;if(typeof t!="object")switch(i){case 1:a[s[0]]=t;break;case 2:a[s[0]][s[1]]=t;break;case 3:a[s[0]][s[1]][s[2]]=t;break;case 4:a[s[0]][s[1]][s[2]][s[3]]=t;break;case 5:a[s[0]][s[1]][s[2]][s[3]][s[4]]=t;break}else{let r;switch(i){case 1:r=a[s[0]];break;case 2:r=a[s[0]][s[1]];break;case 3:r=a[s[0]][s[1]][s[2]];break;case 4:r=a[s[0]][s[1]][s[2]][s[3]];break;case 5:r=a[s[0]][s[1]][s[2]][s[3]][s[4]];break}r!=null&&nx(r,t)}}function nm(a){return new Promise((e,t)=>{const s=new Image;s.onload=()=>{const i=new x.Texture(s);i.wrapS=x.RepeatWrapping,i.wrapT=x.RepeatWrapping,i.needsUpdate=!0,e(i)},s.onerror=t,s.src=a})}class rx extends ol{canvas=null;inputElement=null;scene=void 0;scenes=new Map;renderer=void 0;renderTargets=new Map;renderTargetsResize=new Map;groups=new Map;dispose(){this.scenes.forEach(e=>{ii(e)}),this.scenes.clear(),this.scene&&ii(this.scene),this.renderTargets.forEach(e=>{e.dispose()}),this.renderTargets.clear(),this.renderer?.dispose()}getObject(e){this.app.debugEnabled&&(this.renderer!==void 0&&(Ri.renderer=this.renderer),this.app.send({event:"getObject",target:"app",data:e}))}setObject(e){this.renderer!==void 0&&(Ri.renderer=this.renderer);const t=Ul(e);this.app.send({event:"setObject",target:"editor",data:t})}requestMethod(e,t,s,i){this.app.send({event:"requestMethod",target:"app",data:{uuid:e,key:t,value:s,subitem:i}})}updateObject(e,t,s){this.app.send({event:"updateObject",target:"app",data:{uuid:e,key:t,value:s}})}createTexture(e,t,s){this.app.send({event:"createTexture",target:"app",data:{uuid:e,key:t,value:s}})}addGroup(e){this.groups.get(e.title)===void 0&&(this.groups.set(e.title,{title:e.title,onUpdate:e.onUpdate}),this.app.send({event:"addGroup",target:"editor",data:JSON.stringify(e)}))}removeGroup(e){this.groups.get(e)!==void 0&&(this.groups.delete(e),this.app.send({event:"removeGroup",target:"editor",data:e}))}updateGroup(e,t,s){this.app.send({event:"updateGroup",target:"app",data:JSON.stringify({group:e,prop:t,value:s})})}removeAllGroups(){this.groups.forEach(e=>{const t=e.title;this.groups.delete(t),this.app.send({event:"removeGroup",target:"editor",data:t})}),this.groups.clear()}addSpline(e){setTimeout(()=>{this.app.send({event:"addSpline",target:"editor",data:JSON.stringify(e.toJSON())})},1)}setRenderer(e,t=null){if(this.renderer=e,this.canvas=e.domElement,this.inputElement=t!==null?t:this.canvas,!this.app.debugEnabled)return;const s=`#${e.getClearColor(new x.Color).getHexString()}`;this.app.send({event:"addRenderer",target:"editor",data:{autoClear:e.autoClear,autoClearColor:e.autoClearColor,autoClearDepth:e.autoClearDepth,autoClearStencil:e.autoClearStencil,outputColorSpace:e.outputColorSpace,localClippingEnabled:e.localClippingEnabled,clearColor:s,clearAlpha:e.getClearAlpha(),colorManagement:x.ColorManagement.enabled,toneMapping:e.toneMapping,toneMappingExposure:e.toneMappingExposure,type:e.isWebGLRenderer?"WebGLRenderer":"WebGPURenderer"}})}updateRenderer(e){this.app.send({event:"updateRenderer",target:"app",data:e})}addScene(e){if(e===void 0||(this.scenes.set(e.name,e),!this.app.debugEnabled))return;lh(),ko(e);const t=Hn(e);this.app.send({event:"addScene",target:"editor",data:t})}refreshScene(e){if(!this.app.debugEnabled)return;const t=this.scenes.get(e);if(t!==void 0){const s=Hn(t);this.app.send({event:"refreshScene",target:"app",data:s})}}removeScene(e){if(e===void 0||(this.scenes.delete(e.name),!this.app.debugEnabled))return;const t=Hn(e);this.app.send({event:"removeScene",target:"editor",data:t})}removeAllScenes(){this.scenes.forEach(e=>this.removeScene(e))}getScene(e){let t=null;return this.scenes.forEach((s,i)=>{e.search(i)>-1&&(t=s)}),t}setScene(e){if(e===void 0||(this.scene=e,!this.app.debugEnabled))return;this.renderer!==void 0&&(Ri.renderer=this.renderer),lh(),ko(e);const t=Hn(e);this.app.send({event:"setScene",target:"editor",data:t})}addCamera(e){if(!this.app.debugEnabled)return;const t=Ul(e);this.app.send({event:"addCamera",target:"editor",data:t})}removeCamera(e){if(!this.app.debugEnabled)return;const t=Ul(e);this.app.send({event:"removeCamera",target:"editor",data:t})}handleApp(e){switch(e.event){case"getObject":this.app.dispatchEvent({type:Q.GET_OBJECT,value:e.data});break;case"updateObject":this.app.dispatchEvent({type:Q.UPDATE_OBJECT,value:e.data});break;case"createTexture":this.app.dispatchEvent({type:Q.CREATE_TEXTURE,value:e.data});break;case"requestMethod":this.app.dispatchEvent({type:Q.REQUEST_METHOD,value:e.data});break;case"refreshScene":this.app.send({event:"refreshScene",target:"editor",data:Hn(this.scenes.get(e.data.name))});break;case"updateRenderer":this.renderer&&(this.renderer.autoClearColor=e.data.autoClearColor,this.renderer.outputColorSpace=e.data.outputColorSpace,this.renderer.localClippingEnabled=e.data.localClippingEnabled,this.renderer.setClearColor(e.data.clearColor,e.data.clearAlpha),this.renderer.toneMapping=e.data.toneMapping,this.renderer.toneMappingExposure=e.data.toneMappingExposure,x.ColorManagement.enabled=e.data.colorManagement);break}if(e.event==="updateGroup"){const t=JSON.parse(e.data);this.groups.get(t.group)?.onUpdate(t.prop,t.value)}}handleEditor(e){switch(e.event){case"setObject":this.app.dispatchEvent({type:Q.SET_OBJECT,value:e.data});break;case"addScene":this.app.dispatchEvent({type:Q.ADD_SCENE,value:e.data});break;case"refreshScene":this.app.dispatchEvent({type:Q.REFRESH_SCENE,value:e.data});break;case"removeScene":this.app.dispatchEvent({type:Q.REMOVE_SCENE,value:e.data});break;case"setScene":this.app.dispatchEvent({type:Q.SET_SCENE,value:e.data});break;case"addCamera":this.app.dispatchEvent({type:Q.ADD_CAMERA,value:e.data});break;case"removeCamera":this.app.dispatchEvent({type:Q.REMOVE_CAMERA,value:e.data});break;case"addGroup":this.app.dispatchEvent({type:Q.ADD_GROUP,value:e.data});break;case"removeGroup":this.app.dispatchEvent({type:Q.REMOVE_GROUP,value:e.data});break;case"addSpline":this.app.dispatchEvent({type:Q.ADD_SPLINE,value:e.data});break;case"addRenderer":this.app.dispatchEvent({type:Q.ADD_RENDERER,value:e.data})}}addRT(e,t=!0,s){const i=new x.WebGLRenderTarget(32,32,s);i.texture.name=e,this.renderTargets.set(e,i),this.renderTargetsResize.set(e,t)}removeRT(e){this.renderTargets.delete(e),this.renderTargetsResize.delete(e)}resize(e,t){const s=this.dpr;this.renderTargets.forEach((n,r)=>{this.renderTargetsResize.get(r)&&n.setSize(e*s,t*s)});const i=!(this.renderer?.domElement instanceof OffscreenCanvas);this.renderer?.setSize(e,t,i)}set dpr(e){this.renderer?.setPixelRatio(Ti(1,2,e))}get dpr(){return this.renderer!==void 0?this.renderer?.getPixelRatio():1}get width(){return this.renderer!==void 0?this.renderer.domElement.width/this.dpr:0}get height(){return this.renderer!==void 0?this.renderer.domElement.height/this.dpr:0}}var Fa={exports:{}},Tr={};/**
|
19
19
|
* @license React
|
20
20
|
* react-jsx-runtime.production.min.js
|
21
21
|
*
|
package/dist/hermes.css
CHANGED
@@ -1 +1 @@
|
|
1
|
-
.editor #SidePanel .status{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAA8CAYAAACtrX6oAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB90lEQVR4nO2cXWoCQRCEy+R0+6QguCE5XwLJtYToIZTOgxFlWd1Vd7p7yvpgXoLJ1NQ3a/wZnZkZBC8v0QFEWSSYHAkmR4LJkWByJJgcCSZHgsmRYHIkmBwJJkeCyZFgciSYHAkmR4LJkWByxghuAKwBbAEsiqa5jzlO+ZrgLH3MAWxwyLd0n93MhsbaTuzMrB3xO15j9Z/pyG+CTNfyufd36130K4BPAG2BvXYrKwBfOGTKSF8+//5G7IJFZxeG7MTOaC9kWgRmunbldnHr79FCIyRnyjJW7i4qc23FZshwj9zWzN4istdUcM1yj7dxl1xL0QxyQyTXUDiTXHfJ2YtnlOu6tswCmOW6rXGKP1Ii5DPIdVnr0y14glHVhp5y4VXcZT04qvuXNHUB6R90ZBNQeo4SRaR+2pCleK+5ShWS9ol/dOHec5YsJuVLd1FFR81dOmS6F9+9C47O4BEy1dtnXsVmyeIVMs0b4CPG4pFCC427Dzh4hrwkObq87jg/g5YpX19/g2fQPI/N/gB4B7A/+9kewAeAb8cct5ApX19/wwTsxLmZbcxsa2bLBFdGdzR2uIq3lueMV7e/Y75m6PYzM33THTP6ZAM5EkyOBJMjweRIMDkSTI4EkyPB5EgwORJMjgSTI8HkSDA5EkyOBJMjweRIMDl/5nU6ICCWVGoAAAAASUVORK5CYII=);background-position-x:2px;background-position-y:2px;background-size:32px 16px}.editor #SidePanel .refresh{background-color:transparent;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAACXBIWXMAAAsTAAALEwEAmpwYAAAE1UlEQVRoge2aW2gdRRzGf5vGWMSTVBpNUjWNijHgg6KIRqmtD0UpqA9iFeulijWkllIsKOKb+lbxgr6oLQUFtc2LPgjaImILSq36oKLWkpZC7C1p6zkNXkqSz4c5x2zH3T27s7vnnMR8MBxmzsx/vm/2P/fxJPF/QlO9CdQac4JnO+YEz3Y052y/C7gV6Af6gCuAhUABEDAOnASGgX3AV8Au4Le8CHk5TEttwMPA/cBNuHnR18D7wLvAieyoAZKyChdJelXSaWWHcUmvS1qUFc8sjDRLeiZjoTZOS3pOUktavmld+irgPeC6MAcC9gBfYNx0P6Z/lsr/FzD9vBe4HlgK3AzMC7H3HfAQ8JMz4xSttUJSMeSLnJT0vKRLHex2SNogaTjia9/lyttV7IIQsWOSnpZUSNGQldAkabWkkYB6JiUN1lJwTwCJT5Xh4OILBUmbA+qbkjRQK8FI2lquuCjjgl4OYv1hlaQ/LdGTku5MYiftoNUD/F4OtcAS4GPMYFdBCbgR+CWOgTwWHnljCbADmO9L24sZ3SeqFZ6Ja+ndwONW2g3Axlilq/i8J2mLzKicZ/90CVus/lyS1FmtXDWjT5SNvdkAAu3QKumwJfqVNIK7NT3XTkla3gAi7fCYJbhUbojEgj1JOyxjh6oZq0NolnTQ4rkuqkzYoLUGWG6ldQObkowuNcAE8IaVtjKqQNC01A38ALQG5BdwO7DTkWAe6AJGmJ5xpsppx4My21/YAzYTLDbO//XAEcxJSQVNwC1hmW3BQa5soxFde5cV7w/L6BecREichqkl9lrxvrCMFcEe8BbxXdUDtgILkjLLCfut+OWhOcvD9YDcUI8FyXZHrpK0zZO0GPget4FIwArgE4eyrmgHfgQ6EpYbA66O2i39DbT44ucCZxLTywd3Ax8mLLMSGIraLY1b8fMTVpAnPgKGEuTfXskfJfiUFe9MSCpvPAmMxsg3CqyrRKIED1vxXgdSeWIUMz1Ww1kNEyXYPjIJO3uuJ6q59pD9f5TgPVZ8mRun3LEWOBaQPobPlSuIEvwZZtqpoJ/G68dghA0EpK8lYAMRJfgY8K0v3oy5EWxE2K79H1f+F1VWNeutlcqwzKa73hv/oNAu6aikUZmbzMB81Y5p24FDwHm+tEeAd9J9kNxwb/k3dCCLcy79GrDeFz+K2Y0UU1GrE+KcS28C/vDFO2m8/XBsxBE8Arxgpa0BHsieTv6Ie9XSgrnQvsaX9hdwB+aye8Yg7lXLGeA+zt5QzMdMB0uzJhWBCzAXeM5Icre0D1iNORWsoA2zF16VhkQMeMAGzIxxEHPa4gaH+W4w5DThbUltOcyvF0vaGVBfj4s9VxKDkiYCSByR9KiyWZy0SnpW0omAeoqujZuG0D0ydzlBOCDpKUldDnYXS3pR0qkQ20WZBzVOvNNeiPcC24BrQ/6fxOy6Psc8OfoVOMz04FcALgGuxLzaW4bZhnoh9r7BTIf2KWV8pPjClXCOzMud8ZAvkgWKkjZKmpeWbxaCK2GRpJczFl6S9JLMxiATnnm88ViIcbsHMU8RwtwzDFPAl8AHmMelpejsyZD3o5YO4DbMK5s+4DLgQswJqIfpy8eBA8DPmEux3QSfYGSCmfiKJxVm4iueVJgTPNsxJ3i24x9qO45nn/sZdwAAAABJRU5ErkJggg==);background-position:2px 2px;background-repeat:no-repeat;background-size:16px 16px;position:absolute;right:25px}.editor #SidePanel .remove{background-color:transparent;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZGVmcz4KICAgIDxzdHlsZT4KICAgICAgLmNscy0xIHsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIHN0cm9rZS13aWR0aDogMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvZGVmcz4KICA8ZyBpZD0iTGF5ZXJfMyIgZGF0YS1uYW1lPSJMYXllciAzIj4KICAgIDxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTE2LDdINGMtLjYsMC0xLC40LTEsMXYxMGMwLC42LjQsMSwxLDFoMTJjLjYsMCwxLS40LDEtMXYtMTBjMC0uNi0uNC0xLTEtMVpNOCwxNS41YzAsLjYtLjQsMS0xLDFoLTFjLS42LDAtMS0uNC0xLTF2LTVjMC0uNi40LTEsMS0xaDFjLjYsMCwxLC40LDEsMXY1Wk0xNSwxNS41YzAsLjYtLjQsMS0xLDFoLTFjLS42LDAtMS0uNC0xLTF2LTVjMC0uNi40LTEsMS0xaDFjLjYsMCwxLC40LDEsMXY1WiIvPgogIDwvZz4KICA8ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj4KICAgIDxwb2x5Z29uIGNsYXNzPSJjbHMtMSIgcG9pbnRzPSIxIDUgMSAzIDMgMyAzIDEgMTcgMSAxNyAzIDE5IDMgMTkgNSAxIDUiLz4KICA8L2c+Cjwvc3ZnPg==);background-position:2px 2px;background-repeat:no-repeat;background-size:16px 16px;position:absolute;right:5px}.editor #SidePanel .visibility{background-color:transparent;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDgwMCA4MDAiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjZmZmOwogICAgICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgICAgICBzdHJva2UtbGluZWpvaW46IHJvdW5kOwogICAgICAgIHN0cm9rZS13aWR0aDogNjYuN3B4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvZGVmcz4KICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik01MDAsNDAwYzAsNTUuMi00NC44LDEwMC0xMDAsMTAwcy0xMDAtNDQuOC0xMDAtMTAwLDQ0LjgtMTAwLDEwMC0xMDAsMTAwLDQ0LjgsMTAwLDEwMFoiLz4KICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik00MDAsMTY2LjdjLTE0OS4zLDAtMjc1LjYsOTguMS0zMTguMSwyMzMuMyw0Mi41LDEzNS4yLDE2OC44LDIzMy4zLDMxOC4xLDIzMy4zczI3NS42LTk4LjEsMzE4LjEtMjMzLjNjLTQyLjUtMTM1LjItMTY4LjgtMjMzLjMtMzE4LjEtMjMzLjNaIi8+Cjwvc3ZnPg==);background-position:2px 2px;background-repeat:no-repeat;background-size:16px 16px;position:absolute;right:45px}.editor #SidePanel .childObject .visibility{background-color:transparent;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDgwMCA4MDAiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjZmZmOwogICAgICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgICAgICBzdHJva2UtbGluZWpvaW46IHJvdW5kOwogICAgICAgIHN0cm9rZS13aWR0aDogNjYuN3B4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvZGVmcz4KICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik01MDAsNDAwYzAsNTUuMi00NC44LDEwMC0xMDAsMTAwcy0xMDAtNDQuOC0xMDAtMTAwLDQ0LjgtMTAwLDEwMC0xMDAsMTAwLDQ0LjgsMTAwLDEwMFoiLz4KICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik00MDAsMTY2LjdjLTE0OS4zLDAtMjc1LjYsOTguMS0zMTguMSwyMzMuMyw0Mi41LDEzNS4yLDE2OC44LDIzMy4zLDMxOC4xLDIzMy4zczI3NS42LTk4LjEsMzE4LjEtMjMzLjNjLTQyLjUtMTM1LjItMTY4LjgtMjMzLjMtMzE4LjEtMjMzLjNaIi8+Cjwvc3ZnPg==);background-position:0;background-size:contain;height:16px;overflow:hidden;position:absolute;right:25px;top:50%;transform:translateY(-50%);width:16px;white-space:nowrap}.editor #SidePanel .childObject .icon{background-color:transparent;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEZklEQVRYhe2YW4iVVRTHf4465oSaUNlUjo7SmCBEPVipTWYXoV7qoejykhRCEVQP9pAFSWVBPdRTMNRLWGRaFr2FSShmEQ1KzQymUhpeMky6ONbcfj3sdZpvvvnO8Zy5lA/+YcP51jpr7bVv/7X2nqByNqPu/w7gTDgX4GgxaYR2DcDlwC3AUmAh0ARMDf1fwGGgE9gFfAb8AJyquSe1ljZFXa6+o/Y4FD3qvmh5neomdYXaUEuftQQ3T31d7Y8O96tdal98P69eos5SXwhZn7pb7cgE2qa2jHWAy9Svo4Nf1VfUG9VPQvauWp/5f726MXSb1WvVF9XjIftWvXWsArxdPRSOt5uWCfV+dUDtVJsL7K5Q98aM3xuyVnVr+Dqi3jHaAJepx8Lhe2pTyJvVn6PzVRXsHw7bw+rckDWqb4b8mHrbSAOcp7aHozZ1Wka3NuQfqHUVfExUt8R/n8rI69XXQt6lLijnoxzNTAEeA64GeoDzgbVBI5OBu+J/FwPrg3aK0A1cGL8fB+YAfUFDF4T+SmAN8ATwZ97BBC3MxdeTuGtqOBSYkGklgu/NyIpgtMnxPRDfpd9kdCuBT/MOimawHlgdwW0DPs918AAwH9gK7MjoyqEHWA6sAPYBGzMD6gWWRHCPhL/TQ4dYfPpOxSFYXKDvVE+YaKZamrpZPWmil7xuoXrQxAiL8vqiXHwTaU99BbTndItJe+Zoga4S2oFjpJR4TU7XBXwZs7oyb1gU4DKgH/iCtP+yaAlH+4E/agjwJCkXTwwfeewgLXdrNQEuAn6neIYaSfvwQA3BlXCAdEAaC3TtpEFclVcUHZIm0sauC2f1Ie8lLZGkmbiI8vSSR3fYDYSPyzJ990YfvQxS0r8oopkTJI76jbTUpRMnMI3Ekd2k0qnaenKAxKUNwN+k7ZH1Wxd9nswHWWvBWo7vxg1FSyzwC/AgsIfBJe4DngNWAW1UziB5dAPPAo8CbwPrGLrELcAGYEY1AR4C5pKW5WhOt5c0iwMxiFpQykBdpGo7i7kkwj+eNypa4g5gOsP5ChKX1ZG4sFbMjyDzgyb6mgl8V02AO0mndAnDZ/h70hZoJg2iWswMm37SKuRxA2kGtw/TFKSelipTXesIUt3uWlNd0R78EXifdEheYnixMDlm5BlqKxZmkChqHcOLhdnAxxQkgErl1jbgPM7CcgtS6nkDeDIcbQZ+IpVgk4A7gUtJBcVOKhesS0n5/QjwEYMF6yzg7gjwLVLuLxhi+X3TrH4TZXmbOj2jezrkZyr5JzlY8q/JyKsu+UdzaToaG/uhCvarw/agOscxvjSVWvbaucPBa+d9plvdXlORm7dbELo+9Z6Qjfm1MzuT2Yv7q9HZlpBtdOjFfar6Yeg2qdep6x2ni3upFT19dDj49PGy6emjMQZg6PaY9lkJ4/L0UWqlx6MNDn8g6o2g98fvPEb0eFSOB8+Eoue32Rm6OR200hn0sY0RPr+NNMD/DGf9C+u5AEeLfwBkrdN1844nCgAAAABJRU5ErkJggg==);background-size:20px 20px;display:inline-block;position:absolute;right:5px;top:0;width:20px;height:20px;transform:scale(.8)}.editor #SidePanel .childObject .obj3D{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEZklEQVRYhe2YW4iVVRTHf4465oSaUNlUjo7SmCBEPVipTWYXoV7qoejykhRCEVQP9pAFSWVBPdRTMNRLWGRaFr2FSShmEQ1KzQymUhpeMky6ONbcfj3sdZpvvvnO8Zy5lA/+YcP51jpr7bVv/7X2nqByNqPu/w7gTDgX4GgxaYR2DcDlwC3AUmAh0ARMDf1fwGGgE9gFfAb8AJyquSe1ljZFXa6+o/Y4FD3qvmh5neomdYXaUEuftQQ3T31d7Y8O96tdal98P69eos5SXwhZn7pb7cgE2qa2jHWAy9Svo4Nf1VfUG9VPQvauWp/5f726MXSb1WvVF9XjIftWvXWsArxdPRSOt5uWCfV+dUDtVJsL7K5Q98aM3xuyVnVr+Dqi3jHaAJepx8Lhe2pTyJvVn6PzVRXsHw7bw+rckDWqb4b8mHrbSAOcp7aHozZ1Wka3NuQfqHUVfExUt8R/n8rI69XXQt6lLijnoxzNTAEeA64GeoDzgbVBI5OBu+J/FwPrg3aK0A1cGL8fB+YAfUFDF4T+SmAN8ATwZ97BBC3MxdeTuGtqOBSYkGklgu/NyIpgtMnxPRDfpd9kdCuBT/MOimawHlgdwW0DPs918AAwH9gK7MjoyqEHWA6sAPYBGzMD6gWWRHCPhL/TQ4dYfPpOxSFYXKDvVE+YaKZamrpZPWmil7xuoXrQxAiL8vqiXHwTaU99BbTndItJe+Zoga4S2oFjpJR4TU7XBXwZs7oyb1gU4DKgH/iCtP+yaAlH+4E/agjwJCkXTwwfeewgLXdrNQEuAn6neIYaSfvwQA3BlXCAdEAaC3TtpEFclVcUHZIm0sauC2f1Ie8lLZGkmbiI8vSSR3fYDYSPyzJ990YfvQxS0r8oopkTJI76jbTUpRMnMI3Ekd2k0qnaenKAxKUNwN+k7ZH1Wxd9nswHWWvBWo7vxg1FSyzwC/AgsIfBJe4DngNWAW1UziB5dAPPAo8CbwPrGLrELcAGYEY1AR4C5pKW5WhOt5c0iwMxiFpQykBdpGo7i7kkwj+eNypa4g5gOsP5ChKX1ZG4sFbMjyDzgyb6mgl8V02AO0mndAnDZ/h70hZoJg2iWswMm37SKuRxA2kGtw/TFKSelipTXesIUt3uWlNd0R78EXifdEheYnixMDlm5BlqKxZmkChqHcOLhdnAxxQkgErl1jbgPM7CcgtS6nkDeDIcbQZ+IpVgk4A7gUtJBcVOKhesS0n5/QjwEYMF6yzg7gjwLVLuLxhi+X3TrH4TZXmbOj2jezrkZyr5JzlY8q/JyKsu+UdzaToaG/uhCvarw/agOscxvjSVWvbaucPBa+d9plvdXlORm7dbELo+9Z6Qjfm1MzuT2Yv7q9HZlpBtdOjFfar6Yeg2qdep6x2ni3upFT19dDj49PGy6emjMQZg6PaY9lkJ4/L0UWqlx6MNDn8g6o2g98fvPEb0eFSOB8+Eoue32Rm6OR200hn0sY0RPr+NNMD/DGf9C+u5AEeLfwBkrdN1844nCgAAAABJRU5ErkJggg==)}.editor #SidePanel .childObject .camera{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC60lEQVRYhe2YT4hNcRTHP48xpmYaNAvRyEQxEhnKQljYsRm9/EmSyJiMFAsMZWNhJYoNIUVJ2VGiyb9ZzIpMpkQSahbGv9GMYWrM+1rc2zjvzvvdd+99rzdvMd+6de75nd+5387vnN/v/G5KEuWMKRNNIB8mCRaKiiL5qQb2ApuBuUAV0Ad0AJeB3sSeJRX6LJbULTf6JTUn9Z+KWMUpPyp/Avoa4CNQZ3Sj/lNpdL/xottR7AjOkHRUUpekN5I6JbVLavDH75lIfZN0UFKTpCWS0pJem/HeJBEMG6yV1ONYtgFJbZJ+GF1jDh+zJb03NuliEuwMkMo4yErS2RA/LcbuYVyCrm1mA7Dal/8Cu4FG4JD/HsTTkCy6a+SVMTPQuc1sBKb78nHghi+/A+YBxwL2lbhRY+ThuARdEVxu5JdGFvACr0otdoZ8Y4+Rn0Sn5sFFsMvI6YB9MzA1YJ8mN8k1wAHzfj4uQVdyrpI0aJL7oqTtkq4FiqPLyCOSbktqlbRL0jlJQ2b8QdwCUZ4qvhRStZL0XFK1pMd57CRvq5mfhKBriRfiFUMY6oD7eOdwPlQAN4G10dfWg+uouwXsiOssAj4AC+JMcEWwvnAuOTEr7gTXPmg34zagOwkbIIOXAo9CbDYBrcBXYN+4UUdy2sRflyS5zVNlfPX7ugpJW5V9nI7mmh+lYU0lCZ2B3TOnAVuAk0BTwC5nuhWro46KauBOQJch5OpRaoIW34GreGf+YZdRqS9NAj4Bp4ClQDvwOWxCqSM4ADQEdKE5XvbXzlITrAVe4TW+M6NMKDXBFLAMuAD0ACfIc7pMZBXXA2cY3/xmodQRHAL2A2+NLtj8ZiEKwUL/z2WMPAJcAVYALWSf8dZuDFGWeBHwKxm3sWYhiGG8Tfo6sA2vSfiSy4GrH3wGrDcfKSSKKf6v1E9yF0XK9Q1XBPuMXMw8HXTonQFwETwNzMFr64v1jzgFHIk9ybHEZYPJo65QlD3Bf2/Q/eaHPiSWAAAAAElFTkSuQmCC)}.editor #SidePanel .childObject .interactive{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAADA0lEQVRYhe2Yu2sUURTGf5uYSJ4EsgqJIkRMEYOFYMBCQcTe57/hs9AqlVpYiChYqREsFBRF8AF2KgpqErQQRKIRi6ghRozEhcSYz+Le1bPD7MzOzm5MkQ+Gc+/Z79z7cfY+5kxGEosZNf9bQByWBKbFsjJiGoEuYC3QAUwC74EPwFTlpHlIKvVplHRS0rSK47KktgRjxj6lEtdJ+hIhzGJO0raFFNghaTYg4oKkPkmdknrlMvsjwNm8EAJrJI2YSZ9IyhbhNkkaMNwZSS3VFrjbTPhC0nLzW6ekDZK6jC8j6ZqJOV9tgTZ7eSF1ks6oEHd9BpHULGnS+2flNldVBK4wAu4Z/0GF47bhHDP+njQCow7qbtO+4209cNy3p4ETwCff34k7FwEGTWw2zTFY6k0y4W2LfwAeA/3AdcNr9PZzGXOEIuomeYbL0BrgvvdlzO8z3tYa37y3b33sKuB5tQTO4zJUDLUhvrkSY0tGOXdxHgpYgNPAU9yaHQP6gB3AS+AB0Ars8fYW8C5+lmS7Khuya88W2dXBmyUXwjmXZhenRUug3xDC2Q9sjRokqcBMSNv6DgH7TH8M2AQMBTh7Tf9o1IRJ16BC2tZ3Ffhp+oPAMPDICw3jRCJNBsNQR+HurjF+y7GJiazakgoMGyxOdJBTCv8vKrEG6yPGawrhBAVWLYP59kVvp4DvuDs6vyluenvJcL6RIKNpDup87BCwEsjxb/FvAdqAcd8fNJwc0G7GicxgUoEzpm3PuYkQ3njAZzl2I0VmMOlfnAM++vZ6CtdWEthXsNEoYlKBv3F3aH6S7ghuFA6Y9pVIZhlvuRvNXTosV4ckiV8duJ/ro/jlCKxVYa3SnyC2SdIrE3skLqbcWqFLhTglqSEmpkPSGxMzGpe9NAKRtCsg8qukw3LlaLPPVqtcYT8Q4OY8L3aeNAKRtF3F8auI/7Wk9lLnSCsQufL0RoTQPKblSta6JONnpIp9As4Cvbjyswd3Rk7hXrUeAiO4czQRKimwKlj0X1iXBKbFH8wWbNSnU+tzAAAAAElFTkSuQmCC)}.editor #SidePanel .childObject .light{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAETklEQVRYhe2YXYhVVRTHf3d0/JhyUrMpFbImM+whSa3Mynww+4AeIgiKoozooQ+KyMyXIAujF6OXqHyI6iEKKYgIP/owsjSFqCkprdDUTEcjbWZ0HHV+Pex1ucfb9Z57Z9REXHA4Z++99l7/s/ZZ/7X2KaiczNLwfwPIk9MA+yunNMAG4DHgV+BvoB3YFff2TPstYEyfrajVroI6Sr1GvahsbJC63HzZq04pmztSvU5tVRuqYRiYg78JeBR4HPg5ntdmxovz9wJfA3uAxuibDLQCA+IqynnAQuBuYCnwMLC1rx48U12U8cZqdWqMDcx4cI16qTpYbVKHqa+ovWUeHKsujn7VL9ULq2HI+wY7gVeBJdGeFu3J4ZUiy/cAXeHRRuAQsC/GC0B3eG4BcH/0tUV7czUAeVsMsBF4Kha9HZgCvAncAuwPnXHA0wFuGLANuDrGuoGDwFxgTqzzQ7RX5FrP2eLsdb76vnogtme6+nE8H1YPlQXHwbi3q9eqn0e7Tb25VrsF68vFY0lb1AGcDTwItGQ8tQM4AIwGmqP/EPAu8A0wElgJfFGzxTo8mKWXu9Rd4ZF96jvqjSbauEC9Sn1O3R463epLaku99voCsFXdkAH3kNpcQW+IiT/bQne3eufxBtioPqP2mKhioXpWzpxb1T8C5Ifh4ZptVoriRmAIKdrI3Lujf3bobAPeJpF0NVkKrAFuI9HTOBIxnxFrF4OgQKKr/dnJlQA+AcwABgOHA4zAamA5cE7orQL+zAEHiWI+A2bFC7aSguheYCgpqAphZz3wSB7AecCICv2TgH8oFRib4gVqka0k0h8CXAxMBW6ooDejFoCvA9OBQUAvKWM0kDz4XUZvNKXtyZMWUl7vBbaQXq457PeEziDgx/KJlQAuIPFdMcEXv5OdYWBP9M8k8VpnDQCvB4aTSrCNJB5cSdrW3tBpIJVnR0qdUTxAfdGUOVTnmwqEanNmqltC/9OgqePKg5eom8PgdvW+oJ9Kupera0O3U50TL3lcAaI+oHaF4R3qa6Z822wq0Saq89T1lmSxOrxeW/Xm4uGkiqQDmECKuKHxHW0HdpMiewSpvGqKeR8Ay0iBsYIjg6261PE2o9Q3Yqv+MqWxO9R1Hl12qs+q49Vlppy82pSr+5xJKsko4AXgHlJ0t5NIeg3wLXAlqZhtIUV8J6nmWwX8QiLjdhL5TwMWkY4R6/rrwYKlMr1Y321QZ/vfwBijPqm+rF4Wc7PjE9QllurGVeoV5gRNHsAm9fnMom3qrKPoTjKdMXaYyrFygEWQ72XWW24qhPu8xcUc2UU6O8wFPjmK7jhgPHAuMJGUGQ6U6WwE5sfzTXGvei7KA9hFOiR9D/wOfFVFt4dS2tpfRe83Ur7/CPiJakfOGgBCypubatArl2r8VfOax/LfzABKtePAzHO/5FgC7KBEzB2kOrDfUm8mOeFySv9+OyFyGmB/5aQH+C9BVKmVCNuMZgAAAABJRU5ErkJggg==)}.editor #SidePanel .childObject .ui{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAADjElEQVRYhe2YTWhdRRTHf+lLTFRCkjaLILgIKoIBRRfaSmMFQSsoIrrRuhEqfnTTtV20qHUllIBWcKNQxG4EJWoVEUxKqV8blXYlYv0utr7UtkaN9dfFTMzNfXM/8hJeI/iHYV7OOTP3d+89M3NuulRWs9ZcaIAq/Q+4XJUB3gDsA74BZoDPgaeAdStw3SHgdeD2ykg11baoZ03rS/XKgnGD6niBLxszFedqqpvK4lPG69U/4gTvqneo16lb1e+j/SO1LzF2SD2pbqsBN69SyJTxtTjwPbU75xuLAKr3Zy46FNuoeib6n6kBVwmZAvwuDrqt4K72Rv8LakP9Wv01tqb6T+bCr6rD6og6XQA3rxl1c/56qUXSH/ufCtL229gPxH40Jv0QMAh0ZWIfBG4CNgLjFcthANiWN3YnAn+IweuBown/xtgfAwReAS6NtouAO2P/O/AY8Hb07YqtSNPAwy3WxCt8Oj7yY+q1Od+j6rnovzExtqH+qR5Xb034dxW83ilDjtbKwXXqkTiwqb6o7lDfykw4kZosk2tjBX7UnTm4D4vgigBRr1APFtzthNpTMK5P7S+By0MeLINT6dLCaqYHuAfYFHPsR2AS+Lgkj5aih4ADwMmyoDLAeTUIR9KBleEC4BJgDugFzhIWW1J1ioV9wDuEO14pPQ8cB75gYbtKqgpwN/BA/P0ScMuy0YIGCPvmMIv3zRaVAT4OPJn5+2JCBTK2XDrC6wX4O7ZCFQGOAzuBUyzkx19AH7AXWNsGVC8wQnhyfdHWRXiKw4RTqFUFy3vQcIaOxr1Q9Q1DQTCi9tbYSvJtbdzzThs2cw3n9oz6swVlWtWk/YYiQHV/G1D5do36S+vW6hNFY6oWSTcL53VPG681r6PAfcBsxvYsIW2SqgIUOAE0Cfm4EpoGHom/9wM7yoLrbNRrCMl8btloi7UZeL9q3hTgyyyUTxC2AQmgjYz9MLCnDbANwF3AZYRTZAp4k7BLtCqRmHOJJE5pcokLpNdQGaV0SL2q7iI5XfNJzFaHLNIeQgGb0s2EQmQ47+jUh/t6wslUpquB7XljpwDvbTeuU4CjNeNG8oZOATZrxp3JGzoF+EHNuMN5Q6cAJ4FPKmLmgOfyxhRg6ls5pUZ1yL+aBbYAR0r8W4HP6sCcoKKIjFrq2fwV4QNsO3A3cDnwG3AImAA+TQ2qcxZfUP2n/8O6KrTqAc8D9emWHC8oT9IAAAAASUVORK5CYII=)}.editor #SidePanel .childObject .utils{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAADFElEQVRYhe2YT0hVQRSHf7YwsUVoakFtKmhdUfhUeLSrrFVQEES72rip1EoscFlLK2jRpl21tT8QhFkLq13gIotqlaRPQ8SkgvRrcefiOO/eufN8LzPwwMV375w5893fnHPm+aoArWZb968BsmwNsFz7rwHzkgYltVdgnRpJZyU9lTQm6ZukUUl9GQwSkHS1AgUimwduAHUpvlnXLmCYYpsFDmXNT3p4AJhICDgC7C0RbgvwISHWGNASEiPpYdLbxvYJ2FQC4F1rbj/w1nx+ERoj6WE78NsDeSIw+E7gh5kzYJ5dM/dzwFbH/yDQ58ZJStAnkm570rY+sDDaTHEgqd88GzJ/ayWdk7Td3Ock3Zd0OrRINgKjKQq+ApoCFOw0/j8tteqAaSvWd6LtjgtyKkRBSZqRdFLS+4SxnKQBSU0ZCsaHfLXlOy3plqRxc79BUTtrNPe/QhWU9cbHgQ7gTYKSm1Pm5YAvlm+bM15PlOvXWSwcgGdurFJaRpOBsu010Oj4tVhbBtAFVHni3rR8z5QDKKNYEmSsZI6lPbTbmZ8HdgPbgMNE1R3bMFBbLqCABgNl20vgmAN30ZnXRXQqzbPYfmIbAXYkrbccwLTtts1VrjvFbxa4Q3GalA0Yb/fzALgua2zcjHcDp0hRrVKAAo4CCx64XmtsksDzt1KAbitx4a5YY1+BPctZZ7lwzfgLwlZuxQFb8LcSW7k5FlNgRbY4R5ToIXATREp3OM9a/xZgjqUnhG9bZ4D91linNTZpYlUU0IVzlbMBIGrE5z0+hVAlQ3POt63uwnZ+XvL4ThCQk5VUbhLYR1StNmSPM+eCM8erZBacr1rtE8JVw21Dlz0vVsCTk2lwDcBnE2CB4oKwz9YCyVvltqOkLw9xC/pIyj9jaYBHrMC9Hris3pYzPmmQPdZYeymAeWviPaAmAS4oyT1KrjexY8uXAlgNPLImP2BpnwtuExakXWxXHbjHZs2SiqQeGKTYpgKVy9ru2IbMWiVXcQxpfy1/t0y4+Go2MWJ7SMYvFVWw9hNwWbYGWK6tesA/ap/6uHJWeiAAAAAASUVORK5CYII=)}.editor #SidePanel .field{align-items:center;background-color:#222;display:flex;flex-direction:row;flex-wrap:wrap;min-height:21px;overflow:hidden;padding:1px;position:relative}.editor #SidePanel .field label{font-family:Arial;font-weight:700;line-height:20px;height:20px;padding:0 5px;max-width:180px;user-select:none;width:fit-content;min-width:20px;text-align:center}.editor #SidePanel .field input{background-color:#191919;block-size:11px;color:#fff;flex:1%;font-family:Arial;min-height:20px;margin:0;padding:4px;outline:none}.editor #SidePanel .field input.min{height:11px;width:30px;margin-right:1px}.editor #SidePanel .field input.color{flex:none;width:60px}.editor #SidePanel .field input[type=checkbox]{appearance:none;background-color:#191919;border:4px solid #191919;cursor:pointer;display:inline-block;flex:none;min-height:16px;width:16px;height:16px;transition:background-color .25s linear}.editor #SidePanel .field input[type=checkbox]:checked{background-color:#ccc}.editor #SidePanel .field input[type=color]{appearance:none;border:none;block-size:revert;cursor:pointer;height:28px;padding-block:revert;padding:0;margin:0}.editor #SidePanel .field input[type=number],.editor #SidePanel .field input[type=range]{appearance:none;height:20px}.editor #SidePanel .field input[type=range]::-webkit-slider-runnable-track{border:none}.editor #SidePanel .field input[type=range]::-webkit-slider-thumb{appearance:none;background-color:#666;cursor:pointer;height:17px;width:17px;transition:.2s linear background-color}.editor #SidePanel .field input[type=range]::-webkit-slider-thumb:hover{background-color:#999}.editor #SidePanel .field textarea{background-color:#191919;color:#fff;font-size:12px;line-height:12px}.editor #SidePanel .field img{border:1px dotted #333;cursor:pointer;object-fit:cover;width:100px;height:100px}.editor #SidePanel .field button{background-color:#333;border-top:1px dotted #444;height:16px;margin:0;padding:0 0 0 5px;text-align:center;transition:.2s background-color linear;width:100%}.editor #SidePanel .field button:hover{background-color:#444}.editor #SidePanel .field.block label{display:inline;line-height:21px;max-width:100%;text-align:left;width:100%}.editor #SidePanel .field select{background-color:#222;border:1px solid #333;color:#fff;cursor:pointer;font-family:Arial;font-size:12px;padding:1px 5px;position:absolute;right:4px}.editor #SidePanel .field option{cursor:pointer}.editor #SidePanel .field .vector2{position:relative;width:100%}.editor #SidePanel .field .vector2 .fields{display:inline-block;margin-bottom:2px;position:relative;overflow:hidden;width:60%}.editor #SidePanel .field .vector2 .fields div{display:block;margin:3px 0}.editor #SidePanel .field .vector2 .fields label{background:none;display:inline-block;width:30px}.editor #SidePanel .field .vector2 .fields input{width:66%}.editor #SidePanel .field .vector2 .input{background-image:url(data:image/gif;base64,R0lGODlhYwBjAIAAABoaGgAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDIgNzkuZGJhM2RhM2I1LCAyMDIzLzEyLzE1LTEwOjQyOjM3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjUuNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCNzgwMTU3OUUxOTcxMUVFOTkyNURCNkFCMTUwREUwNyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCNzgwMTU3QUUxOTcxMUVFOTkyNURCNkFCMTUwREUwNyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkI3ODAxNTc3RTE5NzExRUU5OTI1REI2QUIxNTBERTA3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkI3ODAxNTc4RTE5NzExRUU5OTI1REI2QUIxNTBERTA3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAAAAAAAsAAAAAGMAYwAAAv+Mf4Crm/5gaJA6y+TUGiMfVd0ogYa5cWJJru7Vwqwqv9lsf/Gd0+i/0+FqRB4tVBT2TkGk8XkEDqFOZbKKVUmXKe72yjxaqWFvswzuXgDstvsNj8vn9Lr9Hj+ryfuxP9sHqPfFR/iHxjeoOHUYiNi4aMYIaCg4+UgZmVappVno2YgCmnnpaMrJgao6itmaynoKq4pHW2t7eyurW4q6K/m7KRbqG8wrTAr8aVxKrJw8fBy7/Iyc1gxN7So6XZwtzXVd7dy9hmt+jk4brr1u2r7KnRiPTT4u7w2Pr/fOzzwvTs8epH/sCH6zZjBfvYBR+unjlS6ixIkOFwK09DCjRVfXFQVe5JiwI0MfIj8eFKPQY0FvJVdudBcypkaULU+OPDExp05bNVPefCXzpU+SQVXaxCi0576iP4eCnNm0nVKmSI06PeqSJtWsUUvs/ApWzlSoVbuS5VrW5NW10bC6Zevv7FupW+fWHZs0bl65V/FaHRQ2cGC/ZhHyJUz0cN1tihsb3gv5bzS4ju9FLiz5GOXLJhGj/TxBsOidnu2CW1y69GatlTEPbK0Wlmq6sEH3RY37dG3TQkf7ljj7bm7OoIPLNU4c6O7VDYdnfvw8uuvEyZmntY18QQEAOw==);border:1px solid #333;display:inline-block;width:99px;height:99px;position:absolute;top:50%;transform:translateY(-50%)}.editor #SidePanel .field .vector2 .input .x{background-color:#333;height:.5px;width:100%;position:absolute;top:50%;transform:translateY(-50%)}.editor #SidePanel .field .vector2 .input .y{background-color:#333;height:100%;width:.5px;position:absolute;left:50%;transform:translate(-50%)}.editor #SidePanel .field .vector2 .input .pt{background-color:#fff;border-radius:5px;width:5px;height:5px;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:10}.editor #SidePanel .field .grid3{grid-template-columns:repeat(3,1fr)}.editor #SidePanel .field .grid4{grid-template-columns:repeat(4,1fr)}.editor #SidePanel .field .grid3,.editor #SidePanel .field .grid4{display:grid;margin-top:4px}.editor #SidePanel .field .grid3 div,.editor #SidePanel .field .grid4 div{display:flex;overflow:hidden}.editor #SidePanel .field .grid3 div label,.editor #SidePanel .field .grid4 div label{line-height:30px;min-width:inherit}.editor #SidePanel .field .grid3 div input,.editor #SidePanel .field .grid4 div input{width:100%}.editor #SidePanel .field .imageField{display:block;height:120px;position:relative}.editor #SidePanel .field .imageField img{display:inline-block}.editor #SidePanel .field .imageField .fields{display:inline-block;position:absolute;top:0;width:170px}.editor #SidePanel .field .imageField .fields div{display:inline-block;width:100%}.editor #SidePanel .field .imageField .fields div label{background:none;display:block;padding:0 5px}.editor #SidePanel .field .imageField .fields div input{width:calc(50% - 10px)}.editor #SidePanel .group{background-color:#191919;margin:2px 0}.editor #SidePanel .group h4{display:inline;font-weight:700;pointer-events:none;width:fit-content}.editor #SidePanel .group .toggleBtn{background-color:#191919;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAB1CAYAAADN5fjJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAzklEQVR4nO3bwQqCUBBA0Yz+/5dt1eYRkVfKWZyzUgi5zEJSxm3f99tU96sDPhFXiavEVeIqcZW4anTcYzmf8P9pex2Mnpy4Slwlrhodt96Et7e/usjoyYmrxFXiKnGVuEpcJa4SV4mrxFXiKnGVuEpcJa4SV4mrxFXiKnGVuEpcJa4SV4mrxFXiqtFx69LLUd9sKuZFmtGTE1eJq8RV4ipx1T+2+o9e01b/aeIqcZW46uxWvweckcRV4ipxlbhqdNzZl4c//cJu9ORGxz0BUl8I9T4qXncAAAAASUVORK5CYII=);background-position:1px 1px;background-repeat:no-repeat;background-size:15px 45px;display:inline-block;height:15px;opacity:.8;overflow:hidden;margin:0 0 0 5px;padding-left:20px;width:calc(100% - 7px);transition:all .15s linear}.editor #SidePanel .group .toggleBtn:hover{background-color:#222;opacity:1}.editor #SidePanel .group .fieldItems{border-top:1px dotted #333;overflow-y:auto;user-select:none}.editor .multiview{display:grid;font-family:Arial,Helvetica,sans-serif;font-size:10px;grid-template-columns:auto;position:absolute;overflow:hidden;inset:0 300px 0 0;z-index:1}.editor .multiview canvas{pointer-events:none}.editor .multiview .dropdown{background-color:#222;display:inline-block;font-size:10px;text-align:center}.editor .multiview .dropdown .dropdown-toggle{cursor:pointer;padding:0 10px;height:30px;line-height:30px;overflow:hidden}.editor .multiview .dropdown .dropdown-toggle:hover{background-color:#333}.editor .multiview .dropdown .dropdown-menu{position:absolute;top:20px;left:0;z-index:1;list-style:none;padding:0;margin:0;width:100%}.editor .multiview .dropdown .dropdown-menu li{background-color:#222;border-top:1px solid #191919;cursor:pointer;height:30px;line-height:30px;overflow:hidden;padding:0;transition:.2s linear background-color}.editor .multiview .dropdown .dropdown-menu li:hover{background-color:#333}.editor .multiview .cameras{display:grid;grid-template-columns:repeat(2,1fr);pointer-events:visible;position:absolute;width:100%;height:100%}.editor .multiview .cameras.single{grid-template-columns:repeat(1,1fr)}.editor .multiview .cameras .CameraWindow{border:1px dotted #333;border-top:none;border-left:none;pointer-events:visible;position:relative}.editor .multiview .cameras .CameraWindow .clickable{display:inline-block;width:100%;height:100%}.editor .multiview .cameras .CameraWindow .options{position:absolute;height:30px;top:initial;bottom:0;left:50%;transform:translate(-50%);width:max-content}.editor .multiview .cameras .CameraWindow .options .dropdown{position:relative;top:0;transition:background-color .25s linear}.editor .multiview .cameras .CameraWindow .options .dropdown.up{background-color:#333;bottom:0;top:initial}.editor .multiview .cameras .CameraWindow .options .dropdown.up .dropdown-menu{top:initial;bottom:100%}.editor .multiview .settings{pointer-events:visible;position:absolute;left:50%;transform:translate(-50%)}.editor .multiview .settings .toggle{background-blend-mode:overlay;background-color:#222;background-position:2px 2px;background-repeat:no-repeat;background-size:26px 26px;display:inline-block;position:relative;left:0;transform:none;width:30px;height:30px;overflow:hidden}.editor .multiview .settings .toggle.selected{background-blend-mode:normal}body .tp-dfwv,body .tp-dfwv button,body .tp-dfwv input{text-transform:none}.tp-ckbv{float:right}.tp-dfwv{left:50%;top:0;max-height:100%;overflow-x:hidden;overflow-y:auto;transform:translate(-50%);width:400px;z-index:100}.tp-dfwv .tp-lblv{position:relative}.tp-dfwv .tp-lblv_v{display:inline-block}.tp-dfwv .tp-lblv_v .tp-ckbv{width:20px}.tp-dfwv .tp-lblv_v .tp-fpsv{width:280px}.tp-dfwv .tp-btnv_b{padding:0 5px}.tp-dfwv .tp-btngridv{max-height:100px;overflow-x:hidden;overflow-y:auto}.tp-dfwv .tp-tabv{max-height:90vh;overflow:hidden auto}.tp-dfwv{font-family:Roboto Mono,Source Code Pro,Menlo,Courier,monospace;font-size:10px}.editor #SidePanel{background-color:#0d0d0d;border:1px solid #111;max-height:100%;min-height:20px;overflow-y:auto;pointer-events:visible;position:absolute;right:0;top:0;bottom:0;width:300px}.editor #SidePanel .accordion{border-bottom:1px dotted #333;background-color:#111;line-height:0;resize:vertical;overflow-y:auto}.editor #SidePanel .accordion.hide{resize:none;overflow-y:hidden}.editor #SidePanel .accordion>div{display:grid;grid-template-rows:0fr;margin-left:5px;transition:.33s grid-template-rows cubic-bezier(.645,.045,.355,1)}.editor #SidePanel .accordion>div>div{overflow:hidden}.editor #SidePanel .accordion>div.open{border-top:1px solid #222;grid-template-rows:1fr}.editor #SidePanel .accordion .icon{height:20px;width:20px}.editor #SidePanel .accordion .icon button{text-indent:-9999px;white-space:nowrap}.editor #SidePanel .accordion .toggle{background-color:#333;display:inline-block;font-size:12px;font-weight:700;margin:0;padding:0;position:relative;user-select:none;width:100%;height:20px;transition:background-color .2s linear}.editor #SidePanel .accordion .toggle:hover{background-color:#444}.editor #SidePanel .accordion .toggle p{margin:0;padding:0}.editor #SidePanel .accordion .toggle .label{display:inline;position:absolute;left:25px;top:3px;height:15px;line-height:15px}.editor #SidePanel input{background-color:#222;border:1px dotted #333;font-family:Arial,Helvetica,sans-serif;font-size:12px;padding:4px}.editor #SidePanel button{background-color:transparent;border:none;color:#fff;cursor:pointer;font-family:Arial;font-size:12px;margin:0;padding:0;text-align:left}.editor #SidePanel #options{border-bottom:1px solid #111;display:flex;margin:0;padding:0;list-style-type:none;width:100%}.editor #SidePanel #options .selected{background-color:#222}.editor #SidePanel #options .selected button{pointer-events:none}.editor #SidePanel #options button{min-width:20px;height:20px;text-align:center;width:100%}.editor #SidePanel #options button:hover{background-color:#333}.editor #SidePanel #options li{border-right:1px solid #111;font-size:12px;line-height:20px;min-height:20px;min-width:20px;text-align:center;width:100%}.editor #SidePanel #options li:first-child{border-left:1px solid #111}.editor #SidePanel .status,.editor #SidePanel .refresh,.editor #SidePanel .remove,.editor #SidePanel .visibility{display:inline-block;margin:0;padding:0;overflow:hidden;width:20px;height:20px;text-indent:-9999px;white-space:nowrap}.editor #SidePanel .status{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAA8CAYAAACtrX6oAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB90lEQVR4nO2cXWoCQRCEy+R0+6QguCE5XwLJtYToIZTOgxFlWd1Vd7p7yvpgXoLJ1NQ3a/wZnZkZBC8v0QFEWSSYHAkmR4LJkWByJJgcCSZHgsmRYHIkmBwJJkeCyZFgciSYHAkmR4LJkWByxghuAKwBbAEsiqa5jzlO+ZrgLH3MAWxwyLd0n93MhsbaTuzMrB3xO15j9Z/pyG+CTNfyufd36130K4BPAG2BvXYrKwBfOGTKSF8+//5G7IJFZxeG7MTOaC9kWgRmunbldnHr79FCIyRnyjJW7i4qc23FZshwj9zWzN4istdUcM1yj7dxl1xL0QxyQyTXUDiTXHfJ2YtnlOu6tswCmOW6rXGKP1Ii5DPIdVnr0y14glHVhp5y4VXcZT04qvuXNHUB6R90ZBNQeo4SRaR+2pCleK+5ShWS9ol/dOHec5YsJuVLd1FFR81dOmS6F9+9C47O4BEy1dtnXsVmyeIVMs0b4CPG4pFCC427Dzh4hrwkObq87jg/g5YpX19/g2fQPI/N/gB4B7A/+9kewAeAb8cct5ApX19/wwTsxLmZbcxsa2bLBFdGdzR2uIq3lueMV7e/Y75m6PYzM33THTP6ZAM5EkyOBJMjweRIMDkSTI4EkyPB5EgwORJMjgSTI8HkSDA5EkyOBJMjweRIMDl/5nU6ICCWVGoAAAAASUVORK5CYII=);background-position-x:2px;background-position-y:2px;background-size:32px 16px}.editor #SidePanel .status.open{background-position-x:18px}.editor #SidePanel .refresh{background-color:transparent;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAACXBIWXMAAAsTAAALEwEAmpwYAAAE1UlEQVRoge2aW2gdRRzGf5vGWMSTVBpNUjWNijHgg6KIRqmtD0UpqA9iFeulijWkllIsKOKb+lbxgr6oLQUFtc2LPgjaImILSq36oKLWkpZC7C1p6zkNXkqSz4c5x2zH3T27s7vnnMR8MBxmzsx/vm/2P/fxJPF/QlO9CdQac4JnO+YEz3Y052y/C7gV6Af6gCuAhUABEDAOnASGgX3AV8Au4Le8CHk5TEttwMPA/cBNuHnR18D7wLvAieyoAZKyChdJelXSaWWHcUmvS1qUFc8sjDRLeiZjoTZOS3pOUktavmld+irgPeC6MAcC9gBfYNx0P6Z/lsr/FzD9vBe4HlgK3AzMC7H3HfAQ8JMz4xSttUJSMeSLnJT0vKRLHex2SNogaTjia9/lyttV7IIQsWOSnpZUSNGQldAkabWkkYB6JiUN1lJwTwCJT5Xh4OILBUmbA+qbkjRQK8FI2lquuCjjgl4OYv1hlaQ/LdGTku5MYiftoNUD/F4OtcAS4GPMYFdBCbgR+CWOgTwWHnljCbADmO9L24sZ3SeqFZ6Ja+ndwONW2g3Axlilq/i8J2mLzKicZ/90CVus/lyS1FmtXDWjT5SNvdkAAu3QKumwJfqVNIK7NT3XTkla3gAi7fCYJbhUbojEgj1JOyxjh6oZq0NolnTQ4rkuqkzYoLUGWG6ldQObkowuNcAE8IaVtjKqQNC01A38ALQG5BdwO7DTkWAe6AJGmJ5xpsppx4My21/YAzYTLDbO//XAEcxJSQVNwC1hmW3BQa5soxFde5cV7w/L6BecREichqkl9lrxvrCMFcEe8BbxXdUDtgILkjLLCfut+OWhOcvD9YDcUI8FyXZHrpK0zZO0GPget4FIwArgE4eyrmgHfgQ6EpYbA66O2i39DbT44ucCZxLTywd3Ax8mLLMSGIraLY1b8fMTVpAnPgKGEuTfXskfJfiUFe9MSCpvPAmMxsg3CqyrRKIED1vxXgdSeWIUMz1Ww1kNEyXYPjIJO3uuJ6q59pD9f5TgPVZ8mRun3LEWOBaQPobPlSuIEvwZZtqpoJ/G68dghA0EpK8lYAMRJfgY8K0v3oy5EWxE2K79H1f+F1VWNeutlcqwzKa73hv/oNAu6aikUZmbzMB81Y5p24FDwHm+tEeAd9J9kNxwb/k3dCCLcy79GrDeFz+K2Y0UU1GrE+KcS28C/vDFO2m8/XBsxBE8Arxgpa0BHsieTv6Ie9XSgrnQvsaX9hdwB+aye8Yg7lXLGeA+zt5QzMdMB0uzJhWBCzAXeM5Icre0D1iNORWsoA2zF16VhkQMeMAGzIxxEHPa4gaH+W4w5DThbUltOcyvF0vaGVBfj4s9VxKDkiYCSByR9KiyWZy0SnpW0omAeoqujZuG0D0ydzlBOCDpKUldDnYXS3pR0qkQ20WZBzVOvNNeiPcC24BrQ/6fxOy6Psc8OfoVOMz04FcALgGuxLzaW4bZhnoh9r7BTIf2KWV8pPjClXCOzMud8ZAvkgWKkjZKmpeWbxaCK2GRpJczFl6S9JLMxiATnnm88ViIcbsHMU8RwtwzDFPAl8AHmMelpejsyZD3o5YO4DbMK5s+4DLgQswJqIfpy8eBA8DPmEux3QSfYGSCmfiKJxVm4iueVJgTPNsxJ3i24x9qO45nn/sZdwAAAABJRU5ErkJggg==);background-position:2px 2px;background-repeat:no-repeat;background-size:16px 16px;position:absolute;right:25px}.editor #SidePanel .remove{background-color:transparent;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZGVmcz4KICAgIDxzdHlsZT4KICAgICAgLmNscy0xIHsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIHN0cm9rZS13aWR0aDogMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvZGVmcz4KICA8ZyBpZD0iTGF5ZXJfMyIgZGF0YS1uYW1lPSJMYXllciAzIj4KICAgIDxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTE2LDdINGMtLjYsMC0xLC40LTEsMXYxMGMwLC42LjQsMSwxLDFoMTJjLjYsMCwxLS40LDEtMXYtMTBjMC0uNi0uNC0xLTEtMVpNOCwxNS41YzAsLjYtLjQsMS0xLDFoLTFjLS42LDAtMS0uNC0xLTF2LTVjMC0uNi40LTEsMS0xaDFjLjYsMCwxLC40LDEsMXY1Wk0xNSwxNS41YzAsLjYtLjQsMS0xLDFoLTFjLS42LDAtMS0uNC0xLTF2LTVjMC0uNi40LTEsMS0xaDFjLjYsMCwxLC40LDEsMXY1WiIvPgogIDwvZz4KICA8ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj4KICAgIDxwb2x5Z29uIGNsYXNzPSJjbHMtMSIgcG9pbnRzPSIxIDUgMSAzIDMgMyAzIDEgMTcgMSAxNyAzIDE5IDMgMTkgNSAxIDUiLz4KICA8L2c+Cjwvc3ZnPg==);background-position:2px 2px;background-repeat:no-repeat;background-size:16px 16px;position:absolute;right:5px}.editor #SidePanel .visibility{background-color:transparent;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDgwMCA4MDAiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjZmZmOwogICAgICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgICAgICBzdHJva2UtbGluZWpvaW46IHJvdW5kOwogICAgICAgIHN0cm9rZS13aWR0aDogNjYuN3B4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvZGVmcz4KICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik01MDAsNDAwYzAsNTUuMi00NC44LDEwMC0xMDAsMTAwcy0xMDAtNDQuOC0xMDAtMTAwLDQ0LjgtMTAwLDEwMC0xMDAsMTAwLDQ0LjgsMTAwLDEwMFoiLz4KICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik00MDAsMTY2LjdjLTE0OS4zLDAtMjc1LjYsOTguMS0zMTguMSwyMzMuMyw0Mi41LDEzNS4yLDE2OC44LDIzMy4zLDMxOC4xLDIzMy4zczI3NS42LTk4LjEsMzE4LjEtMjMzLjNjLTQyLjUtMTM1LjItMTY4LjgtMjMzLjMtMzE4LjEtMjMzLjNaIi8+Cjwvc3ZnPg==);background-position:2px 2px;background-repeat:no-repeat;background-size:16px 16px;position:absolute;right:45px}.editor #SidePanel .childObject{background-color:#111;min-height:20px;overflow:hidden}.editor #SidePanel .childObject ::-webkit-scrollbar{width:10px}.editor #SidePanel .childObject ::-webkit-scrollbar-track{background:#0d0d0d}.editor #SidePanel .childObject ::-webkit-scrollbar-thumb{background:#666}.editor #SidePanel .childObject ::-webkit-scrollbar-thumb:hover{background:#999}.editor #SidePanel .childObject .child{background-color:#222;border:none;border-bottom:1px solid #111;height:20px;position:relative}.editor #SidePanel .childObject .child:hover{background-color:#333}.editor #SidePanel .childObject .name{background-color:transparent;font-family:Arial;height:20px;overflow:hidden;position:absolute;left:5px;right:50px;top:50%;transform:translateY(-50%);white-space:nowrap}.editor #SidePanel .childObject .visibility{background-color:transparent;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDgwMCA4MDAiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjZmZmOwogICAgICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgICAgICBzdHJva2UtbGluZWpvaW46IHJvdW5kOwogICAgICAgIHN0cm9rZS13aWR0aDogNjYuN3B4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvZGVmcz4KICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik01MDAsNDAwYzAsNTUuMi00NC44LDEwMC0xMDAsMTAwcy0xMDAtNDQuOC0xMDAtMTAwLDQ0LjgtMTAwLDEwMC0xMDAsMTAwLDQ0LjgsMTAwLDEwMFoiLz4KICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik00MDAsMTY2LjdjLTE0OS4zLDAtMjc1LjYsOTguMS0zMTguMSwyMzMuMyw0Mi41LDEzNS4yLDE2OC44LDIzMy4zLDMxOC4xLDIzMy4zczI3NS42LTk4LjEsMzE4LjEtMjMzLjNjLTQyLjUtMTM1LjItMTY4LjgtMjMzLjMtMzE4LjEtMjMzLjNaIi8+Cjwvc3ZnPg==);background-position:0;background-size:contain;height:16px;overflow:hidden;position:absolute;right:25px;top:50%;transform:translateY(-50%);width:16px;white-space:nowrap}.editor #SidePanel .childObject>div{display:grid;grid-template-rows:0fr;transition:.33s grid-template-rows cubic-bezier(.645,.045,.355,1)}.editor #SidePanel .childObject>div.open{grid-template-rows:1fr}.editor #SidePanel .childObject>div .container{padding-left:5px;height:auto;overflow-x:hidden;overflow-y:auto;max-height:200px}.editor #SidePanel .childObject>div .container.closed{height:0;overflow:hidden}.editor #SidePanel .childObject .icon{background-color:transparent;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEZklEQVRYhe2YW4iVVRTHf4465oSaUNlUjo7SmCBEPVipTWYXoV7qoejykhRCEVQP9pAFSWVBPdRTMNRLWGRaFr2FSShmEQ1KzQymUhpeMky6ONbcfj3sdZpvvvnO8Zy5lA/+YcP51jpr7bVv/7X2nqByNqPu/w7gTDgX4GgxaYR2DcDlwC3AUmAh0ARMDf1fwGGgE9gFfAb8AJyquSe1ljZFXa6+o/Y4FD3qvmh5neomdYXaUEuftQQ3T31d7Y8O96tdal98P69eos5SXwhZn7pb7cgE2qa2jHWAy9Svo4Nf1VfUG9VPQvauWp/5f726MXSb1WvVF9XjIftWvXWsArxdPRSOt5uWCfV+dUDtVJsL7K5Q98aM3xuyVnVr+Dqi3jHaAJepx8Lhe2pTyJvVn6PzVRXsHw7bw+rckDWqb4b8mHrbSAOcp7aHozZ1Wka3NuQfqHUVfExUt8R/n8rI69XXQt6lLijnoxzNTAEeA64GeoDzgbVBI5OBu+J/FwPrg3aK0A1cGL8fB+YAfUFDF4T+SmAN8ATwZ97BBC3MxdeTuGtqOBSYkGklgu/NyIpgtMnxPRDfpd9kdCuBT/MOimawHlgdwW0DPs918AAwH9gK7MjoyqEHWA6sAPYBGzMD6gWWRHCPhL/TQ4dYfPpOxSFYXKDvVE+YaKZamrpZPWmil7xuoXrQxAiL8vqiXHwTaU99BbTndItJe+Zoga4S2oFjpJR4TU7XBXwZs7oyb1gU4DKgH/iCtP+yaAlH+4E/agjwJCkXTwwfeewgLXdrNQEuAn6neIYaSfvwQA3BlXCAdEAaC3TtpEFclVcUHZIm0sauC2f1Ie8lLZGkmbiI8vSSR3fYDYSPyzJ990YfvQxS0r8oopkTJI76jbTUpRMnMI3Ekd2k0qnaenKAxKUNwN+k7ZH1Wxd9nswHWWvBWo7vxg1FSyzwC/AgsIfBJe4DngNWAW1UziB5dAPPAo8CbwPrGLrELcAGYEY1AR4C5pKW5WhOt5c0iwMxiFpQykBdpGo7i7kkwj+eNypa4g5gOsP5ChKX1ZG4sFbMjyDzgyb6mgl8V02AO0mndAnDZ/h70hZoJg2iWswMm37SKuRxA2kGtw/TFKSelipTXesIUt3uWlNd0R78EXifdEheYnixMDlm5BlqKxZmkChqHcOLhdnAxxQkgErl1jbgPM7CcgtS6nkDeDIcbQZ+IpVgk4A7gUtJBcVOKhesS0n5/QjwEYMF6yzg7gjwLVLuLxhi+X3TrH4TZXmbOj2jezrkZyr5JzlY8q/JyKsu+UdzaToaG/uhCvarw/agOscxvjSVWvbaucPBa+d9plvdXlORm7dbELo+9Z6Qjfm1MzuT2Yv7q9HZlpBtdOjFfar6Yeg2qdep6x2ni3upFT19dDj49PGy6emjMQZg6PaY9lkJ4/L0UWqlx6MNDn8g6o2g98fvPEb0eFSOB8+Eoue32Rm6OR200hn0sY0RPr+NNMD/DGf9C+u5AEeLfwBkrdN1844nCgAAAABJRU5ErkJggg==);background-size:20px 20px;display:inline-block;position:absolute;right:5px;top:0;width:20px;height:20px;transform:scale(.8)}.editor #SidePanel .childObject .obj3D{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEZklEQVRYhe2YW4iVVRTHf4465oSaUNlUjo7SmCBEPVipTWYXoV7qoejykhRCEVQP9pAFSWVBPdRTMNRLWGRaFr2FSShmEQ1KzQymUhpeMky6ONbcfj3sdZpvvvnO8Zy5lA/+YcP51jpr7bVv/7X2nqByNqPu/w7gTDgX4GgxaYR2DcDlwC3AUmAh0ARMDf1fwGGgE9gFfAb8AJyquSe1ljZFXa6+o/Y4FD3qvmh5neomdYXaUEuftQQ3T31d7Y8O96tdal98P69eos5SXwhZn7pb7cgE2qa2jHWAy9Svo4Nf1VfUG9VPQvauWp/5f726MXSb1WvVF9XjIftWvXWsArxdPRSOt5uWCfV+dUDtVJsL7K5Q98aM3xuyVnVr+Dqi3jHaAJepx8Lhe2pTyJvVn6PzVRXsHw7bw+rckDWqb4b8mHrbSAOcp7aHozZ1Wka3NuQfqHUVfExUt8R/n8rI69XXQt6lLijnoxzNTAEeA64GeoDzgbVBI5OBu+J/FwPrg3aK0A1cGL8fB+YAfUFDF4T+SmAN8ATwZ97BBC3MxdeTuGtqOBSYkGklgu/NyIpgtMnxPRDfpd9kdCuBT/MOimawHlgdwW0DPs918AAwH9gK7MjoyqEHWA6sAPYBGzMD6gWWRHCPhL/TQ4dYfPpOxSFYXKDvVE+YaKZamrpZPWmil7xuoXrQxAiL8vqiXHwTaU99BbTndItJe+Zoga4S2oFjpJR4TU7XBXwZs7oyb1gU4DKgH/iCtP+yaAlH+4E/agjwJCkXTwwfeewgLXdrNQEuAn6neIYaSfvwQA3BlXCAdEAaC3TtpEFclVcUHZIm0sauC2f1Ie8lLZGkmbiI8vSSR3fYDYSPyzJ990YfvQxS0r8oopkTJI76jbTUpRMnMI3Ekd2k0qnaenKAxKUNwN+k7ZH1Wxd9nswHWWvBWo7vxg1FSyzwC/AgsIfBJe4DngNWAW1UziB5dAPPAo8CbwPrGLrELcAGYEY1AR4C5pKW5WhOt5c0iwMxiFpQykBdpGo7i7kkwj+eNypa4g5gOsP5ChKX1ZG4sFbMjyDzgyb6mgl8V02AO0mndAnDZ/h70hZoJg2iWswMm37SKuRxA2kGtw/TFKSelipTXesIUt3uWlNd0R78EXifdEheYnixMDlm5BlqKxZmkChqHcOLhdnAxxQkgErl1jbgPM7CcgtS6nkDeDIcbQZ+IpVgk4A7gUtJBcVOKhesS0n5/QjwEYMF6yzg7gjwLVLuLxhi+X3TrH4TZXmbOj2jezrkZyr5JzlY8q/JyKsu+UdzaToaG/uhCvarw/agOscxvjSVWvbaucPBa+d9plvdXlORm7dbELo+9Z6Qjfm1MzuT2Yv7q9HZlpBtdOjFfar6Yeg2qdep6x2ni3upFT19dDj49PGy6emjMQZg6PaY9lkJ4/L0UWqlx6MNDn8g6o2g98fvPEb0eFSOB8+Eoue32Rm6OR200hn0sY0RPr+NNMD/DGf9C+u5AEeLfwBkrdN1844nCgAAAABJRU5ErkJggg==)}.editor #SidePanel .childObject .camera{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC60lEQVRYhe2YT4hNcRTHP48xpmYaNAvRyEQxEhnKQljYsRm9/EmSyJiMFAsMZWNhJYoNIUVJ2VGiyb9ZzIpMpkQSahbGv9GMYWrM+1rc2zjvzvvdd+99rzdvMd+6de75nd+5387vnN/v/G5KEuWMKRNNIB8mCRaKiiL5qQb2ApuBuUAV0Ad0AJeB3sSeJRX6LJbULTf6JTUn9Z+KWMUpPyp/Avoa4CNQZ3Sj/lNpdL/xottR7AjOkHRUUpekN5I6JbVLavDH75lIfZN0UFKTpCWS0pJem/HeJBEMG6yV1ONYtgFJbZJ+GF1jDh+zJb03NuliEuwMkMo4yErS2RA/LcbuYVyCrm1mA7Dal/8Cu4FG4JD/HsTTkCy6a+SVMTPQuc1sBKb78nHghi+/A+YBxwL2lbhRY+ThuARdEVxu5JdGFvACr0otdoZ8Y4+Rn0Sn5sFFsMvI6YB9MzA1YJ8mN8k1wAHzfj4uQVdyrpI0aJL7oqTtkq4FiqPLyCOSbktqlbRL0jlJQ2b8QdwCUZ4qvhRStZL0XFK1pMd57CRvq5mfhKBriRfiFUMY6oD7eOdwPlQAN4G10dfWg+uouwXsiOssAj4AC+JMcEWwvnAuOTEr7gTXPmg34zagOwkbIIOXAo9CbDYBrcBXYN+4UUdy2sRflyS5zVNlfPX7ugpJW5V9nI7mmh+lYU0lCZ2B3TOnAVuAk0BTwC5nuhWro46KauBOQJch5OpRaoIW34GreGf+YZdRqS9NAj4Bp4ClQDvwOWxCqSM4ADQEdKE5XvbXzlITrAVe4TW+M6NMKDXBFLAMuAD0ACfIc7pMZBXXA2cY3/xmodQRHAL2A2+NLtj8ZiEKwUL/z2WMPAJcAVYALWSf8dZuDFGWeBHwKxm3sWYhiGG8Tfo6sA2vSfiSy4GrH3wGrDcfKSSKKf6v1E9yF0XK9Q1XBPuMXMw8HXTonQFwETwNzMFr64v1jzgFHIk9ybHEZYPJo65QlD3Bf2/Q/eaHPiSWAAAAAElFTkSuQmCC)}.editor #SidePanel .childObject .interactive{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAADA0lEQVRYhe2Yu2sUURTGf5uYSJ4EsgqJIkRMEYOFYMBCQcTe57/hs9AqlVpYiChYqREsFBRF8AF2KgpqErQQRKIRi6ghRozEhcSYz+Le1bPD7MzOzm5MkQ+Gc+/Z79z7cfY+5kxGEosZNf9bQByWBKbFsjJiGoEuYC3QAUwC74EPwFTlpHlIKvVplHRS0rSK47KktgRjxj6lEtdJ+hIhzGJO0raFFNghaTYg4oKkPkmdknrlMvsjwNm8EAJrJI2YSZ9IyhbhNkkaMNwZSS3VFrjbTPhC0nLzW6ekDZK6jC8j6ZqJOV9tgTZ7eSF1ks6oEHd9BpHULGnS+2flNldVBK4wAu4Z/0GF47bhHDP+njQCow7qbtO+4209cNy3p4ETwCff34k7FwEGTWw2zTFY6k0y4W2LfwAeA/3AdcNr9PZzGXOEIuomeYbL0BrgvvdlzO8z3tYa37y3b33sKuB5tQTO4zJUDLUhvrkSY0tGOXdxHgpYgNPAU9yaHQP6gB3AS+AB0Ars8fYW8C5+lmS7Khuya88W2dXBmyUXwjmXZhenRUug3xDC2Q9sjRokqcBMSNv6DgH7TH8M2AQMBTh7Tf9o1IRJ16BC2tZ3Ffhp+oPAMPDICw3jRCJNBsNQR+HurjF+y7GJiazakgoMGyxOdJBTCv8vKrEG6yPGawrhBAVWLYP59kVvp4DvuDs6vyluenvJcL6RIKNpDup87BCwEsjxb/FvAdqAcd8fNJwc0G7GicxgUoEzpm3PuYkQ3njAZzl2I0VmMOlfnAM++vZ6CtdWEthXsNEoYlKBv3F3aH6S7ghuFA6Y9pVIZhlvuRvNXTosV4ckiV8duJ/ro/jlCKxVYa3SnyC2SdIrE3skLqbcWqFLhTglqSEmpkPSGxMzGpe9NAKRtCsg8qukw3LlaLPPVqtcYT8Q4OY8L3aeNAKRtF3F8auI/7Wk9lLnSCsQufL0RoTQPKblSta6JONnpIp9As4Cvbjyswd3Rk7hXrUeAiO4czQRKimwKlj0X1iXBKbFH8wWbNSnU+tzAAAAAElFTkSuQmCC)}.editor #SidePanel .childObject .light{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAETklEQVRYhe2YXYhVVRTHf3d0/JhyUrMpFbImM+whSa3Mynww+4AeIgiKoozooQ+KyMyXIAujF6OXqHyI6iEKKYgIP/owsjSFqCkprdDUTEcjbWZ0HHV+Pex1ucfb9Z57Z9REXHA4Z++99l7/s/ZZ/7X2KaiczNLwfwPIk9MA+yunNMAG4DHgV+BvoB3YFff2TPstYEyfrajVroI6Sr1GvahsbJC63HzZq04pmztSvU5tVRuqYRiYg78JeBR4HPg5ntdmxovz9wJfA3uAxuibDLQCA+IqynnAQuBuYCnwMLC1rx48U12U8cZqdWqMDcx4cI16qTpYbVKHqa+ovWUeHKsujn7VL9ULq2HI+wY7gVeBJdGeFu3J4ZUiy/cAXeHRRuAQsC/GC0B3eG4BcH/0tUV7czUAeVsMsBF4Kha9HZgCvAncAuwPnXHA0wFuGLANuDrGuoGDwFxgTqzzQ7RX5FrP2eLsdb76vnogtme6+nE8H1YPlQXHwbi3q9eqn0e7Tb25VrsF68vFY0lb1AGcDTwItGQ8tQM4AIwGmqP/EPAu8A0wElgJfFGzxTo8mKWXu9Rd4ZF96jvqjSbauEC9Sn1O3R463epLaku99voCsFXdkAH3kNpcQW+IiT/bQne3eufxBtioPqP2mKhioXpWzpxb1T8C5Ifh4ZptVoriRmAIKdrI3Lujf3bobAPeJpF0NVkKrAFuI9HTOBIxnxFrF4OgQKKr/dnJlQA+AcwABgOHA4zAamA5cE7orQL+zAEHiWI+A2bFC7aSguheYCgpqAphZz3wSB7AecCICv2TgH8oFRib4gVqka0k0h8CXAxMBW6ooDejFoCvA9OBQUAvKWM0kDz4XUZvNKXtyZMWUl7vBbaQXq457PeEziDgx/KJlQAuIPFdMcEXv5OdYWBP9M8k8VpnDQCvB4aTSrCNJB5cSdrW3tBpIJVnR0qdUTxAfdGUOVTnmwqEanNmqltC/9OgqePKg5eom8PgdvW+oJ9Kupera0O3U50TL3lcAaI+oHaF4R3qa6Z822wq0Saq89T1lmSxOrxeW/Xm4uGkiqQDmECKuKHxHW0HdpMiewSpvGqKeR8Ay0iBsYIjg6261PE2o9Q3Yqv+MqWxO9R1Hl12qs+q49Vlppy82pSr+5xJKsko4AXgHlJ0t5NIeg3wLXAlqZhtIUV8J6nmWwX8QiLjdhL5TwMWkY4R6/rrwYKlMr1Y321QZ/vfwBijPqm+rF4Wc7PjE9QllurGVeoV5gRNHsAm9fnMom3qrKPoTjKdMXaYyrFygEWQ72XWW24qhPu8xcUc2UU6O8wFPjmK7jhgPHAuMJGUGQ6U6WwE5sfzTXGvei7KA9hFOiR9D/wOfFVFt4dS2tpfRe83Ur7/CPiJakfOGgBCypubatArl2r8VfOax/LfzABKtePAzHO/5FgC7KBEzB2kOrDfUm8mOeFySv9+OyFyGmB/5aQH+C9BVKmVCNuMZgAAAABJRU5ErkJggg==)}.editor #SidePanel .childObject .ui{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAADjElEQVRYhe2YTWhdRRTHf+lLTFRCkjaLILgIKoIBRRfaSmMFQSsoIrrRuhEqfnTTtV20qHUllIBWcKNQxG4EJWoVEUxKqV8blXYlYv0utr7UtkaN9dfFTMzNfXM/8hJeI/iHYV7OOTP3d+89M3NuulRWs9ZcaIAq/Q+4XJUB3gDsA74BZoDPgaeAdStw3SHgdeD2ykg11baoZ03rS/XKgnGD6niBLxszFedqqpvK4lPG69U/4gTvqneo16lb1e+j/SO1LzF2SD2pbqsBN69SyJTxtTjwPbU75xuLAKr3Zy46FNuoeib6n6kBVwmZAvwuDrqt4K72Rv8LakP9Wv01tqb6T+bCr6rD6og6XQA3rxl1c/56qUXSH/ufCtL229gPxH40Jv0QMAh0ZWIfBG4CNgLjFcthANiWN3YnAn+IweuBown/xtgfAwReAS6NtouAO2P/O/AY8Hb07YqtSNPAwy3WxCt8Oj7yY+q1Od+j6rnovzExtqH+qR5Xb034dxW83ilDjtbKwXXqkTiwqb6o7lDfykw4kZosk2tjBX7UnTm4D4vgigBRr1APFtzthNpTMK5P7S+By0MeLINT6dLCaqYHuAfYFHPsR2AS+Lgkj5aih4ADwMmyoDLAeTUIR9KBleEC4BJgDugFzhIWW1J1ioV9wDuEO14pPQ8cB75gYbtKqgpwN/BA/P0ScMuy0YIGCPvmMIv3zRaVAT4OPJn5+2JCBTK2XDrC6wX4O7ZCFQGOAzuBUyzkx19AH7AXWNsGVC8wQnhyfdHWRXiKw4RTqFUFy3vQcIaOxr1Q9Q1DQTCi9tbYSvJtbdzzThs2cw3n9oz6swVlWtWk/YYiQHV/G1D5do36S+vW6hNFY6oWSTcL53VPG681r6PAfcBsxvYsIW2SqgIUOAE0Cfm4EpoGHom/9wM7yoLrbNRrCMl8btloi7UZeL9q3hTgyyyUTxC2AQmgjYz9MLCnDbANwF3AZYRTZAp4k7BLtCqRmHOJJE5pcokLpNdQGaV0SL2q7iI5XfNJzFaHLNIeQgGb0s2EQmQ47+jUh/t6wslUpquB7XljpwDvbTeuU4CjNeNG8oZOATZrxp3JGzoF+EHNuMN5Q6cAJ4FPKmLmgOfyxhRg6ls5pUZ1yL+aBbYAR0r8W4HP6sCcoKKIjFrq2fwV4QNsO3A3cDnwG3AImAA+TQ2qcxZfUP2n/8O6KrTqAc8D9emWHC8oT9IAAAAASUVORK5CYII=)}.editor #SidePanel .childObject .utils{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAADFElEQVRYhe2YT0hVQRSHf7YwsUVoakFtKmhdUfhUeLSrrFVQEES72rip1EoscFlLK2jRpl21tT8QhFkLq13gIotqlaRPQ8SkgvRrcefiOO/eufN8LzPwwMV375w5893fnHPm+aoArWZb968BsmwNsFz7rwHzkgYltVdgnRpJZyU9lTQm6ZukUUl9GQwSkHS1AgUimwduAHUpvlnXLmCYYpsFDmXNT3p4AJhICDgC7C0RbgvwISHWGNASEiPpYdLbxvYJ2FQC4F1rbj/w1nx+ERoj6WE78NsDeSIw+E7gh5kzYJ5dM/dzwFbH/yDQ58ZJStAnkm570rY+sDDaTHEgqd88GzJ/ayWdk7Td3Ock3Zd0OrRINgKjKQq+ApoCFOw0/j8tteqAaSvWd6LtjgtyKkRBSZqRdFLS+4SxnKQBSU0ZCsaHfLXlOy3plqRxc79BUTtrNPe/QhWU9cbHgQ7gTYKSm1Pm5YAvlm+bM15PlOvXWSwcgGdurFJaRpOBsu010Oj4tVhbBtAFVHni3rR8z5QDKKNYEmSsZI6lPbTbmZ8HdgPbgMNE1R3bMFBbLqCABgNl20vgmAN30ZnXRXQqzbPYfmIbAXYkrbccwLTtts1VrjvFbxa4Q3GalA0Yb/fzALgua2zcjHcDp0hRrVKAAo4CCx64XmtsksDzt1KAbitx4a5YY1+BPctZZ7lwzfgLwlZuxQFb8LcSW7k5FlNgRbY4R5ToIXATREp3OM9a/xZgjqUnhG9bZ4D91linNTZpYlUU0IVzlbMBIGrE5z0+hVAlQ3POt63uwnZ+XvL4ThCQk5VUbhLYR1StNmSPM+eCM8erZBacr1rtE8JVw21Dlz0vVsCTk2lwDcBnE2CB4oKwz9YCyVvltqOkLw9xC/pIyj9jaYBHrMC9Hris3pYzPmmQPdZYeymAeWviPaAmAS4oyT1KrjexY8uXAlgNPLImP2BpnwtuExakXWxXHbjHZs2SiqQeGKTYpgKVy9ru2IbMWiVXcQxpfy1/t0y4+Go2MWJ7SMYvFVWw9hNwWbYGWK6tesA/ap/6uHJWeiAAAAAASUVORK5CYII=)}.editor .header .dropdown{color:#fff;display:inline-block;margin-right:1px;text-align:left;height:fit-content;min-width:auto;width:max-content}.editor .header .dropdown button{backdrop-filter:blur(2px);background-color:#222c;border:none;color:#ffffff80;font-size:12px;padding:5px 10px;position:relative;text-align:left;min-width:22px;width:100%;height:32px;transition:all .2s linear}.editor .header .dropdown button:hover{background-color:#333c;color:#fff}.editor .header .dropdown button.svg{line-height:0;width:32px}.editor .header .dropdown p{background-color:#222c;display:inline-block;height:22px;margin:0;min-width:22px;padding:5px}.editor .header .dropdown svg{position:relative;left:50%;transform:translate(-50%)}.editor .header .dropdown ul{list-style:none;margin:0;margin-block:0;padding-inline:0;position:absolute;width:max-content}.editor .header .dropdown ul li{border-top:1px solid rgba(17,17,17,.9);display:block;position:relative}.editor .header .dropdown ul li.selected button{background-color:#444c}.editor .header .dropdown ul li.selected button:hover{background-color:#555c}.editor .header .dropdown.subdropdown{min-width:100%}.editor .header .dropdown.subdropdown ul{border-left:1px solid rgba(17,17,17,.9);left:100%;top:-1px}.editor .header .draggable li{cursor:grab;transition:transform .25s ease-out}.editor .header .draggable li.dragging{transform:scale(1.1)}.editor .header .draggable li.dragging div{background-color:#404040}.editor .header .draggable li div{background-color:#222c;line-height:14px;padding:5px 10px;transition:background-color .25s linear}.editor .header .draggable li div:hover{background-color:#333c}.editor .header .draggable li div span{font-size:12px;margin:0 15px 0 10px;padding:0 5px}.editor .header .draggable li div .dragIcon{position:absolute;left:10px}.editor .header .draggable li div .closeIcon{background-color:transparent;padding:0;position:absolute;right:5px;top:50%;min-width:14px;width:14px;height:14px;transform:translateY(-50%);visibility:inherit}.editor .header .draggable li div .closeIcon svg{background-color:transparent;left:0;position:relative}.editor{font-family:Arial,Helvetica,sans-serif;font-size:12px;left:0;pointer-events:none;position:absolute;top:0;width:100%;height:100%;z-index:100}.editor button{background:none;border:none;color:#fff;display:inline-block;margin:0;padding:0;text-align:left}.editor .header{display:inline-block;pointer-events:visible;position:relative;left:130px;z-index:101}.editor .footer{position:absolute;right:5px;bottom:0}.fsAbsolute{position:absolute;inset:0}.absoluteCenter{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%)}.hidden{display:none;visibility:hidden}.hideText{text-indent:-9999px;white-space:nowrap}
|
1
|
+
.editor #SidePanel .status{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAA8CAYAAACtrX6oAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB90lEQVR4nO2cXWoCQRCEy+R0+6QguCE5XwLJtYToIZTOgxFlWd1Vd7p7yvpgXoLJ1NQ3a/wZnZkZBC8v0QFEWSSYHAkmR4LJkWByJJgcCSZHgsmRYHIkmBwJJkeCyZFgciSYHAkmR4LJkWByxghuAKwBbAEsiqa5jzlO+ZrgLH3MAWxwyLd0n93MhsbaTuzMrB3xO15j9Z/pyG+CTNfyufd36130K4BPAG2BvXYrKwBfOGTKSF8+//5G7IJFZxeG7MTOaC9kWgRmunbldnHr79FCIyRnyjJW7i4qc23FZshwj9zWzN4istdUcM1yj7dxl1xL0QxyQyTXUDiTXHfJ2YtnlOu6tswCmOW6rXGKP1Ii5DPIdVnr0y14glHVhp5y4VXcZT04qvuXNHUB6R90ZBNQeo4SRaR+2pCleK+5ShWS9ol/dOHec5YsJuVLd1FFR81dOmS6F9+9C47O4BEy1dtnXsVmyeIVMs0b4CPG4pFCC427Dzh4hrwkObq87jg/g5YpX19/g2fQPI/N/gB4B7A/+9kewAeAb8cct5ApX19/wwTsxLmZbcxsa2bLBFdGdzR2uIq3lueMV7e/Y75m6PYzM33THTP6ZAM5EkyOBJMjweRIMDkSTI4EkyPB5EgwORJMjgSTI8HkSDA5EkyOBJMjweRIMDl/5nU6ICCWVGoAAAAASUVORK5CYII=);background-position-x:2px;background-position-y:2px;background-size:32px 16px}.editor #SidePanel .refresh{background-color:transparent;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAACXBIWXMAAAsTAAALEwEAmpwYAAAE1UlEQVRoge2aW2gdRRzGf5vGWMSTVBpNUjWNijHgg6KIRqmtD0UpqA9iFeulijWkllIsKOKb+lbxgr6oLQUFtc2LPgjaImILSq36oKLWkpZC7C1p6zkNXkqSz4c5x2zH3T27s7vnnMR8MBxmzsx/vm/2P/fxJPF/QlO9CdQac4JnO+YEz3Y052y/C7gV6Af6gCuAhUABEDAOnASGgX3AV8Au4Le8CHk5TEttwMPA/cBNuHnR18D7wLvAieyoAZKyChdJelXSaWWHcUmvS1qUFc8sjDRLeiZjoTZOS3pOUktavmld+irgPeC6MAcC9gBfYNx0P6Z/lsr/FzD9vBe4HlgK3AzMC7H3HfAQ8JMz4xSttUJSMeSLnJT0vKRLHex2SNogaTjia9/lyttV7IIQsWOSnpZUSNGQldAkabWkkYB6JiUN1lJwTwCJT5Xh4OILBUmbA+qbkjRQK8FI2lquuCjjgl4OYv1hlaQ/LdGTku5MYiftoNUD/F4OtcAS4GPMYFdBCbgR+CWOgTwWHnljCbADmO9L24sZ3SeqFZ6Ja+ndwONW2g3Axlilq/i8J2mLzKicZ/90CVus/lyS1FmtXDWjT5SNvdkAAu3QKumwJfqVNIK7NT3XTkla3gAi7fCYJbhUbojEgj1JOyxjh6oZq0NolnTQ4rkuqkzYoLUGWG6ldQObkowuNcAE8IaVtjKqQNC01A38ALQG5BdwO7DTkWAe6AJGmJ5xpsppx4My21/YAzYTLDbO//XAEcxJSQVNwC1hmW3BQa5soxFde5cV7w/L6BecREichqkl9lrxvrCMFcEe8BbxXdUDtgILkjLLCfut+OWhOcvD9YDcUI8FyXZHrpK0zZO0GPget4FIwArgE4eyrmgHfgQ6EpYbA66O2i39DbT44ucCZxLTywd3Ax8mLLMSGIraLY1b8fMTVpAnPgKGEuTfXskfJfiUFe9MSCpvPAmMxsg3CqyrRKIED1vxXgdSeWIUMz1Ww1kNEyXYPjIJO3uuJ6q59pD9f5TgPVZ8mRun3LEWOBaQPobPlSuIEvwZZtqpoJ/G68dghA0EpK8lYAMRJfgY8K0v3oy5EWxE2K79H1f+F1VWNeutlcqwzKa73hv/oNAu6aikUZmbzMB81Y5p24FDwHm+tEeAd9J9kNxwb/k3dCCLcy79GrDeFz+K2Y0UU1GrE+KcS28C/vDFO2m8/XBsxBE8Arxgpa0BHsieTv6Ie9XSgrnQvsaX9hdwB+aye8Yg7lXLGeA+zt5QzMdMB0uzJhWBCzAXeM5Icre0D1iNORWsoA2zF16VhkQMeMAGzIxxEHPa4gaH+W4w5DThbUltOcyvF0vaGVBfj4s9VxKDkiYCSByR9KiyWZy0SnpW0omAeoqujZuG0D0ydzlBOCDpKUldDnYXS3pR0qkQ20WZBzVOvNNeiPcC24BrQ/6fxOy6Psc8OfoVOMz04FcALgGuxLzaW4bZhnoh9r7BTIf2KWV8pPjClXCOzMud8ZAvkgWKkjZKmpeWbxaCK2GRpJczFl6S9JLMxiATnnm88ViIcbsHMU8RwtwzDFPAl8AHmMelpejsyZD3o5YO4DbMK5s+4DLgQswJqIfpy8eBA8DPmEux3QSfYGSCmfiKJxVm4iueVJgTPNsxJ3i24x9qO45nn/sZdwAAAABJRU5ErkJggg==);background-position:2px 2px;background-repeat:no-repeat;background-size:16px 16px;position:absolute;right:25px}.editor #SidePanel .remove{background-color:transparent;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZGVmcz4KICAgIDxzdHlsZT4KICAgICAgLmNscy0xIHsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIHN0cm9rZS13aWR0aDogMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvZGVmcz4KICA8ZyBpZD0iTGF5ZXJfMyIgZGF0YS1uYW1lPSJMYXllciAzIj4KICAgIDxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTE2LDdINGMtLjYsMC0xLC40LTEsMXYxMGMwLC42LjQsMSwxLDFoMTJjLjYsMCwxLS40LDEtMXYtMTBjMC0uNi0uNC0xLTEtMVpNOCwxNS41YzAsLjYtLjQsMS0xLDFoLTFjLS42LDAtMS0uNC0xLTF2LTVjMC0uNi40LTEsMS0xaDFjLjYsMCwxLC40LDEsMXY1Wk0xNSwxNS41YzAsLjYtLjQsMS0xLDFoLTFjLS42LDAtMS0uNC0xLTF2LTVjMC0uNi40LTEsMS0xaDFjLjYsMCwxLC40LDEsMXY1WiIvPgogIDwvZz4KICA8ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj4KICAgIDxwb2x5Z29uIGNsYXNzPSJjbHMtMSIgcG9pbnRzPSIxIDUgMSAzIDMgMyAzIDEgMTcgMSAxNyAzIDE5IDMgMTkgNSAxIDUiLz4KICA8L2c+Cjwvc3ZnPg==);background-position:2px 2px;background-repeat:no-repeat;background-size:16px 16px;position:absolute;right:5px}.editor #SidePanel .visibility{background-color:transparent;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDgwMCA4MDAiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjZmZmOwogICAgICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgICAgICBzdHJva2UtbGluZWpvaW46IHJvdW5kOwogICAgICAgIHN0cm9rZS13aWR0aDogNjYuN3B4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvZGVmcz4KICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik01MDAsNDAwYzAsNTUuMi00NC44LDEwMC0xMDAsMTAwcy0xMDAtNDQuOC0xMDAtMTAwLDQ0LjgtMTAwLDEwMC0xMDAsMTAwLDQ0LjgsMTAwLDEwMFoiLz4KICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik00MDAsMTY2LjdjLTE0OS4zLDAtMjc1LjYsOTguMS0zMTguMSwyMzMuMyw0Mi41LDEzNS4yLDE2OC44LDIzMy4zLDMxOC4xLDIzMy4zczI3NS42LTk4LjEsMzE4LjEtMjMzLjNjLTQyLjUtMTM1LjItMTY4LjgtMjMzLjMtMzE4LjEtMjMzLjNaIi8+Cjwvc3ZnPg==);background-position:2px 2px;background-repeat:no-repeat;background-size:16px 16px;position:absolute;right:45px}.editor #SidePanel .childObject .visibility{background-color:transparent;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDgwMCA4MDAiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjZmZmOwogICAgICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgICAgICBzdHJva2UtbGluZWpvaW46IHJvdW5kOwogICAgICAgIHN0cm9rZS13aWR0aDogNjYuN3B4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvZGVmcz4KICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik01MDAsNDAwYzAsNTUuMi00NC44LDEwMC0xMDAsMTAwcy0xMDAtNDQuOC0xMDAtMTAwLDQ0LjgtMTAwLDEwMC0xMDAsMTAwLDQ0LjgsMTAwLDEwMFoiLz4KICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik00MDAsMTY2LjdjLTE0OS4zLDAtMjc1LjYsOTguMS0zMTguMSwyMzMuMyw0Mi41LDEzNS4yLDE2OC44LDIzMy4zLDMxOC4xLDIzMy4zczI3NS42LTk4LjEsMzE4LjEtMjMzLjNjLTQyLjUtMTM1LjItMTY4LjgtMjMzLjMtMzE4LjEtMjMzLjNaIi8+Cjwvc3ZnPg==);background-position:0;background-size:contain;height:16px;overflow:hidden;position:absolute;right:25px;top:50%;transform:translateY(-50%);width:16px;white-space:nowrap}.editor #SidePanel .childObject .icon{background-color:transparent;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEZklEQVRYhe2YW4iVVRTHf4465oSaUNlUjo7SmCBEPVipTWYXoV7qoejykhRCEVQP9pAFSWVBPdRTMNRLWGRaFr2FSShmEQ1KzQymUhpeMky6ONbcfj3sdZpvvvnO8Zy5lA/+YcP51jpr7bVv/7X2nqByNqPu/w7gTDgX4GgxaYR2DcDlwC3AUmAh0ARMDf1fwGGgE9gFfAb8AJyquSe1ljZFXa6+o/Y4FD3qvmh5neomdYXaUEuftQQ3T31d7Y8O96tdal98P69eos5SXwhZn7pb7cgE2qa2jHWAy9Svo4Nf1VfUG9VPQvauWp/5f726MXSb1WvVF9XjIftWvXWsArxdPRSOt5uWCfV+dUDtVJsL7K5Q98aM3xuyVnVr+Dqi3jHaAJepx8Lhe2pTyJvVn6PzVRXsHw7bw+rckDWqb4b8mHrbSAOcp7aHozZ1Wka3NuQfqHUVfExUt8R/n8rI69XXQt6lLijnoxzNTAEeA64GeoDzgbVBI5OBu+J/FwPrg3aK0A1cGL8fB+YAfUFDF4T+SmAN8ATwZ97BBC3MxdeTuGtqOBSYkGklgu/NyIpgtMnxPRDfpd9kdCuBT/MOimawHlgdwW0DPs918AAwH9gK7MjoyqEHWA6sAPYBGzMD6gWWRHCPhL/TQ4dYfPpOxSFYXKDvVE+YaKZamrpZPWmil7xuoXrQxAiL8vqiXHwTaU99BbTndItJe+Zoga4S2oFjpJR4TU7XBXwZs7oyb1gU4DKgH/iCtP+yaAlH+4E/agjwJCkXTwwfeewgLXdrNQEuAn6neIYaSfvwQA3BlXCAdEAaC3TtpEFclVcUHZIm0sauC2f1Ie8lLZGkmbiI8vSSR3fYDYSPyzJ990YfvQxS0r8oopkTJI76jbTUpRMnMI3Ekd2k0qnaenKAxKUNwN+k7ZH1Wxd9nswHWWvBWo7vxg1FSyzwC/AgsIfBJe4DngNWAW1UziB5dAPPAo8CbwPrGLrELcAGYEY1AR4C5pKW5WhOt5c0iwMxiFpQykBdpGo7i7kkwj+eNypa4g5gOsP5ChKX1ZG4sFbMjyDzgyb6mgl8V02AO0mndAnDZ/h70hZoJg2iWswMm37SKuRxA2kGtw/TFKSelipTXesIUt3uWlNd0R78EXifdEheYnixMDlm5BlqKxZmkChqHcOLhdnAxxQkgErl1jbgPM7CcgtS6nkDeDIcbQZ+IpVgk4A7gUtJBcVOKhesS0n5/QjwEYMF6yzg7gjwLVLuLxhi+X3TrH4TZXmbOj2jezrkZyr5JzlY8q/JyKsu+UdzaToaG/uhCvarw/agOscxvjSVWvbaucPBa+d9plvdXlORm7dbELo+9Z6Qjfm1MzuT2Yv7q9HZlpBtdOjFfar6Yeg2qdep6x2ni3upFT19dDj49PGy6emjMQZg6PaY9lkJ4/L0UWqlx6MNDn8g6o2g98fvPEb0eFSOB8+Eoue32Rm6OR200hn0sY0RPr+NNMD/DGf9C+u5AEeLfwBkrdN1844nCgAAAABJRU5ErkJggg==);background-size:20px 20px;display:inline-block;position:absolute;right:5px;top:0;width:20px;height:20px;transform:scale(.8)}.editor #SidePanel .childObject .obj3D{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEZklEQVRYhe2YW4iVVRTHf4465oSaUNlUjo7SmCBEPVipTWYXoV7qoejykhRCEVQP9pAFSWVBPdRTMNRLWGRaFr2FSShmEQ1KzQymUhpeMky6ONbcfj3sdZpvvvnO8Zy5lA/+YcP51jpr7bVv/7X2nqByNqPu/w7gTDgX4GgxaYR2DcDlwC3AUmAh0ARMDf1fwGGgE9gFfAb8AJyquSe1ljZFXa6+o/Y4FD3qvmh5neomdYXaUEuftQQ3T31d7Y8O96tdal98P69eos5SXwhZn7pb7cgE2qa2jHWAy9Svo4Nf1VfUG9VPQvauWp/5f726MXSb1WvVF9XjIftWvXWsArxdPRSOt5uWCfV+dUDtVJsL7K5Q98aM3xuyVnVr+Dqi3jHaAJepx8Lhe2pTyJvVn6PzVRXsHw7bw+rckDWqb4b8mHrbSAOcp7aHozZ1Wka3NuQfqHUVfExUt8R/n8rI69XXQt6lLijnoxzNTAEeA64GeoDzgbVBI5OBu+J/FwPrg3aK0A1cGL8fB+YAfUFDF4T+SmAN8ATwZ97BBC3MxdeTuGtqOBSYkGklgu/NyIpgtMnxPRDfpd9kdCuBT/MOimawHlgdwW0DPs918AAwH9gK7MjoyqEHWA6sAPYBGzMD6gWWRHCPhL/TQ4dYfPpOxSFYXKDvVE+YaKZamrpZPWmil7xuoXrQxAiL8vqiXHwTaU99BbTndItJe+Zoga4S2oFjpJR4TU7XBXwZs7oyb1gU4DKgH/iCtP+yaAlH+4E/agjwJCkXTwwfeewgLXdrNQEuAn6neIYaSfvwQA3BlXCAdEAaC3TtpEFclVcUHZIm0sauC2f1Ie8lLZGkmbiI8vSSR3fYDYSPyzJ990YfvQxS0r8oopkTJI76jbTUpRMnMI3Ekd2k0qnaenKAxKUNwN+k7ZH1Wxd9nswHWWvBWo7vxg1FSyzwC/AgsIfBJe4DngNWAW1UziB5dAPPAo8CbwPrGLrELcAGYEY1AR4C5pKW5WhOt5c0iwMxiFpQykBdpGo7i7kkwj+eNypa4g5gOsP5ChKX1ZG4sFbMjyDzgyb6mgl8V02AO0mndAnDZ/h70hZoJg2iWswMm37SKuRxA2kGtw/TFKSelipTXesIUt3uWlNd0R78EXifdEheYnixMDlm5BlqKxZmkChqHcOLhdnAxxQkgErl1jbgPM7CcgtS6nkDeDIcbQZ+IpVgk4A7gUtJBcVOKhesS0n5/QjwEYMF6yzg7gjwLVLuLxhi+X3TrH4TZXmbOj2jezrkZyr5JzlY8q/JyKsu+UdzaToaG/uhCvarw/agOscxvjSVWvbaucPBa+d9plvdXlORm7dbELo+9Z6Qjfm1MzuT2Yv7q9HZlpBtdOjFfar6Yeg2qdep6x2ni3upFT19dDj49PGy6emjMQZg6PaY9lkJ4/L0UWqlx6MNDn8g6o2g98fvPEb0eFSOB8+Eoue32Rm6OR200hn0sY0RPr+NNMD/DGf9C+u5AEeLfwBkrdN1844nCgAAAABJRU5ErkJggg==)}.editor #SidePanel .childObject .camera{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC60lEQVRYhe2YT4hNcRTHP48xpmYaNAvRyEQxEhnKQljYsRm9/EmSyJiMFAsMZWNhJYoNIUVJ2VGiyb9ZzIpMpkQSahbGv9GMYWrM+1rc2zjvzvvdd+99rzdvMd+6de75nd+5387vnN/v/G5KEuWMKRNNIB8mCRaKiiL5qQb2ApuBuUAV0Ad0AJeB3sSeJRX6LJbULTf6JTUn9Z+KWMUpPyp/Avoa4CNQZ3Sj/lNpdL/xottR7AjOkHRUUpekN5I6JbVLavDH75lIfZN0UFKTpCWS0pJem/HeJBEMG6yV1ONYtgFJbZJ+GF1jDh+zJb03NuliEuwMkMo4yErS2RA/LcbuYVyCrm1mA7Dal/8Cu4FG4JD/HsTTkCy6a+SVMTPQuc1sBKb78nHghi+/A+YBxwL2lbhRY+ThuARdEVxu5JdGFvACr0otdoZ8Y4+Rn0Sn5sFFsMvI6YB9MzA1YJ8mN8k1wAHzfj4uQVdyrpI0aJL7oqTtkq4FiqPLyCOSbktqlbRL0jlJQ2b8QdwCUZ4qvhRStZL0XFK1pMd57CRvq5mfhKBriRfiFUMY6oD7eOdwPlQAN4G10dfWg+uouwXsiOssAj4AC+JMcEWwvnAuOTEr7gTXPmg34zagOwkbIIOXAo9CbDYBrcBXYN+4UUdy2sRflyS5zVNlfPX7ugpJW5V9nI7mmh+lYU0lCZ2B3TOnAVuAk0BTwC5nuhWro46KauBOQJch5OpRaoIW34GreGf+YZdRqS9NAj4Bp4ClQDvwOWxCqSM4ADQEdKE5XvbXzlITrAVe4TW+M6NMKDXBFLAMuAD0ACfIc7pMZBXXA2cY3/xmodQRHAL2A2+NLtj8ZiEKwUL/z2WMPAJcAVYALWSf8dZuDFGWeBHwKxm3sWYhiGG8Tfo6sA2vSfiSy4GrH3wGrDcfKSSKKf6v1E9yF0XK9Q1XBPuMXMw8HXTonQFwETwNzMFr64v1jzgFHIk9ybHEZYPJo65QlD3Bf2/Q/eaHPiSWAAAAAElFTkSuQmCC)}.editor #SidePanel .childObject .interactive{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAADA0lEQVRYhe2Yu2sUURTGf5uYSJ4EsgqJIkRMEYOFYMBCQcTe57/hs9AqlVpYiChYqREsFBRF8AF2KgpqErQQRKIRi6ghRozEhcSYz+Le1bPD7MzOzm5MkQ+Gc+/Z79z7cfY+5kxGEosZNf9bQByWBKbFsjJiGoEuYC3QAUwC74EPwFTlpHlIKvVplHRS0rSK47KktgRjxj6lEtdJ+hIhzGJO0raFFNghaTYg4oKkPkmdknrlMvsjwNm8EAJrJI2YSZ9IyhbhNkkaMNwZSS3VFrjbTPhC0nLzW6ekDZK6jC8j6ZqJOV9tgTZ7eSF1ks6oEHd9BpHULGnS+2flNldVBK4wAu4Z/0GF47bhHDP+njQCow7qbtO+4209cNy3p4ETwCff34k7FwEGTWw2zTFY6k0y4W2LfwAeA/3AdcNr9PZzGXOEIuomeYbL0BrgvvdlzO8z3tYa37y3b33sKuB5tQTO4zJUDLUhvrkSY0tGOXdxHgpYgNPAU9yaHQP6gB3AS+AB0Ars8fYW8C5+lmS7Khuya88W2dXBmyUXwjmXZhenRUug3xDC2Q9sjRokqcBMSNv6DgH7TH8M2AQMBTh7Tf9o1IRJ16BC2tZ3Ffhp+oPAMPDICw3jRCJNBsNQR+HurjF+y7GJiazakgoMGyxOdJBTCv8vKrEG6yPGawrhBAVWLYP59kVvp4DvuDs6vyluenvJcL6RIKNpDup87BCwEsjxb/FvAdqAcd8fNJwc0G7GicxgUoEzpm3PuYkQ3njAZzl2I0VmMOlfnAM++vZ6CtdWEthXsNEoYlKBv3F3aH6S7ghuFA6Y9pVIZhlvuRvNXTosV4ckiV8duJ/ro/jlCKxVYa3SnyC2SdIrE3skLqbcWqFLhTglqSEmpkPSGxMzGpe9NAKRtCsg8qukw3LlaLPPVqtcYT8Q4OY8L3aeNAKRtF3F8auI/7Wk9lLnSCsQufL0RoTQPKblSta6JONnpIp9As4Cvbjyswd3Rk7hXrUeAiO4czQRKimwKlj0X1iXBKbFH8wWbNSnU+tzAAAAAElFTkSuQmCC)}.editor #SidePanel .childObject .light{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAETklEQVRYhe2YXYhVVRTHf3d0/JhyUrMpFbImM+whSa3Mynww+4AeIgiKoozooQ+KyMyXIAujF6OXqHyI6iEKKYgIP/owsjSFqCkprdDUTEcjbWZ0HHV+Pex1ucfb9Z57Z9REXHA4Z++99l7/s/ZZ/7X2KaiczNLwfwPIk9MA+yunNMAG4DHgV+BvoB3YFff2TPstYEyfrajVroI6Sr1GvahsbJC63HzZq04pmztSvU5tVRuqYRiYg78JeBR4HPg5ntdmxovz9wJfA3uAxuibDLQCA+IqynnAQuBuYCnwMLC1rx48U12U8cZqdWqMDcx4cI16qTpYbVKHqa+ovWUeHKsujn7VL9ULq2HI+wY7gVeBJdGeFu3J4ZUiy/cAXeHRRuAQsC/GC0B3eG4BcH/0tUV7czUAeVsMsBF4Kha9HZgCvAncAuwPnXHA0wFuGLANuDrGuoGDwFxgTqzzQ7RX5FrP2eLsdb76vnogtme6+nE8H1YPlQXHwbi3q9eqn0e7Tb25VrsF68vFY0lb1AGcDTwItGQ8tQM4AIwGmqP/EPAu8A0wElgJfFGzxTo8mKWXu9Rd4ZF96jvqjSbauEC9Sn1O3R463epLaku99voCsFXdkAH3kNpcQW+IiT/bQne3eufxBtioPqP2mKhioXpWzpxb1T8C5Ifh4ZptVoriRmAIKdrI3Lujf3bobAPeJpF0NVkKrAFuI9HTOBIxnxFrF4OgQKKr/dnJlQA+AcwABgOHA4zAamA5cE7orQL+zAEHiWI+A2bFC7aSguheYCgpqAphZz3wSB7AecCICv2TgH8oFRib4gVqka0k0h8CXAxMBW6ooDejFoCvA9OBQUAvKWM0kDz4XUZvNKXtyZMWUl7vBbaQXq457PeEziDgx/KJlQAuIPFdMcEXv5OdYWBP9M8k8VpnDQCvB4aTSrCNJB5cSdrW3tBpIJVnR0qdUTxAfdGUOVTnmwqEanNmqltC/9OgqePKg5eom8PgdvW+oJ9Kupera0O3U50TL3lcAaI+oHaF4R3qa6Z822wq0Saq89T1lmSxOrxeW/Xm4uGkiqQDmECKuKHxHW0HdpMiewSpvGqKeR8Ay0iBsYIjg6261PE2o9Q3Yqv+MqWxO9R1Hl12qs+q49Vlppy82pSr+5xJKsko4AXgHlJ0t5NIeg3wLXAlqZhtIUV8J6nmWwX8QiLjdhL5TwMWkY4R6/rrwYKlMr1Y321QZ/vfwBijPqm+rF4Wc7PjE9QllurGVeoV5gRNHsAm9fnMom3qrKPoTjKdMXaYyrFygEWQ72XWW24qhPu8xcUc2UU6O8wFPjmK7jhgPHAuMJGUGQ6U6WwE5sfzTXGvei7KA9hFOiR9D/wOfFVFt4dS2tpfRe83Ur7/CPiJakfOGgBCypubatArl2r8VfOax/LfzABKtePAzHO/5FgC7KBEzB2kOrDfUm8mOeFySv9+OyFyGmB/5aQH+C9BVKmVCNuMZgAAAABJRU5ErkJggg==)}.editor #SidePanel .childObject .ui{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAADjElEQVRYhe2YTWhdRRTHf+lLTFRCkjaLILgIKoIBRRfaSmMFQSsoIrrRuhEqfnTTtV20qHUllIBWcKNQxG4EJWoVEUxKqV8blXYlYv0utr7UtkaN9dfFTMzNfXM/8hJeI/iHYV7OOTP3d+89M3NuulRWs9ZcaIAq/Q+4XJUB3gDsA74BZoDPgaeAdStw3SHgdeD2ykg11baoZ03rS/XKgnGD6niBLxszFedqqpvK4lPG69U/4gTvqneo16lb1e+j/SO1LzF2SD2pbqsBN69SyJTxtTjwPbU75xuLAKr3Zy46FNuoeib6n6kBVwmZAvwuDrqt4K72Rv8LakP9Wv01tqb6T+bCr6rD6og6XQA3rxl1c/56qUXSH/ufCtL229gPxH40Jv0QMAh0ZWIfBG4CNgLjFcthANiWN3YnAn+IweuBown/xtgfAwReAS6NtouAO2P/O/AY8Hb07YqtSNPAwy3WxCt8Oj7yY+q1Od+j6rnovzExtqH+qR5Xb034dxW83ilDjtbKwXXqkTiwqb6o7lDfykw4kZosk2tjBX7UnTm4D4vgigBRr1APFtzthNpTMK5P7S+By0MeLINT6dLCaqYHuAfYFHPsR2AS+Lgkj5aih4ADwMmyoDLAeTUIR9KBleEC4BJgDugFzhIWW1J1ioV9wDuEO14pPQ8cB75gYbtKqgpwN/BA/P0ScMuy0YIGCPvmMIv3zRaVAT4OPJn5+2JCBTK2XDrC6wX4O7ZCFQGOAzuBUyzkx19AH7AXWNsGVC8wQnhyfdHWRXiKw4RTqFUFy3vQcIaOxr1Q9Q1DQTCi9tbYSvJtbdzzThs2cw3n9oz6swVlWtWk/YYiQHV/G1D5do36S+vW6hNFY6oWSTcL53VPG681r6PAfcBsxvYsIW2SqgIUOAE0Cfm4EpoGHom/9wM7yoLrbNRrCMl8btloi7UZeL9q3hTgyyyUTxC2AQmgjYz9MLCnDbANwF3AZYRTZAp4k7BLtCqRmHOJJE5pcokLpNdQGaV0SL2q7iI5XfNJzFaHLNIeQgGb0s2EQmQ47+jUh/t6wslUpquB7XljpwDvbTeuU4CjNeNG8oZOATZrxp3JGzoF+EHNuMN5Q6cAJ4FPKmLmgOfyxhRg6ls5pUZ1yL+aBbYAR0r8W4HP6sCcoKKIjFrq2fwV4QNsO3A3cDnwG3AImAA+TQ2qcxZfUP2n/8O6KrTqAc8D9emWHC8oT9IAAAAASUVORK5CYII=)}.editor #SidePanel .childObject .utils{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAADFElEQVRYhe2YT0hVQRSHf7YwsUVoakFtKmhdUfhUeLSrrFVQEES72rip1EoscFlLK2jRpl21tT8QhFkLq13gIotqlaRPQ8SkgvRrcefiOO/eufN8LzPwwMV375w5893fnHPm+aoArWZb968BsmwNsFz7rwHzkgYltVdgnRpJZyU9lTQm6ZukUUl9GQwSkHS1AgUimwduAHUpvlnXLmCYYpsFDmXNT3p4AJhICDgC7C0RbgvwISHWGNASEiPpYdLbxvYJ2FQC4F1rbj/w1nx+ERoj6WE78NsDeSIw+E7gh5kzYJ5dM/dzwFbH/yDQ58ZJStAnkm570rY+sDDaTHEgqd88GzJ/ayWdk7Td3Ock3Zd0OrRINgKjKQq+ApoCFOw0/j8tteqAaSvWd6LtjgtyKkRBSZqRdFLS+4SxnKQBSU0ZCsaHfLXlOy3plqRxc79BUTtrNPe/QhWU9cbHgQ7gTYKSm1Pm5YAvlm+bM15PlOvXWSwcgGdurFJaRpOBsu010Oj4tVhbBtAFVHni3rR8z5QDKKNYEmSsZI6lPbTbmZ8HdgPbgMNE1R3bMFBbLqCABgNl20vgmAN30ZnXRXQqzbPYfmIbAXYkrbccwLTtts1VrjvFbxa4Q3GalA0Yb/fzALgua2zcjHcDp0hRrVKAAo4CCx64XmtsksDzt1KAbitx4a5YY1+BPctZZ7lwzfgLwlZuxQFb8LcSW7k5FlNgRbY4R5ToIXATREp3OM9a/xZgjqUnhG9bZ4D91linNTZpYlUU0IVzlbMBIGrE5z0+hVAlQ3POt63uwnZ+XvL4ThCQk5VUbhLYR1StNmSPM+eCM8erZBacr1rtE8JVw21Dlz0vVsCTk2lwDcBnE2CB4oKwz9YCyVvltqOkLw9xC/pIyj9jaYBHrMC9Hris3pYzPmmQPdZYeymAeWviPaAmAS4oyT1KrjexY8uXAlgNPLImP2BpnwtuExakXWxXHbjHZs2SiqQeGKTYpgKVy9ru2IbMWiVXcQxpfy1/t0y4+Go2MWJ7SMYvFVWw9hNwWbYGWK6tesA/ap/6uHJWeiAAAAAASUVORK5CYII=)}.editor #SidePanel .field{align-items:center;background-color:#222;display:flex;flex-direction:row;flex-wrap:wrap;min-height:21px;overflow:hidden;padding:1px;position:relative}.editor #SidePanel .field label{font-family:Arial;font-weight:700;line-height:20px;height:20px;padding:0 5px;max-width:180px;user-select:none;width:fit-content;min-width:20px;text-align:center}.editor #SidePanel .field input{background-color:#191919;block-size:11px;color:#fff;flex:1%;font-family:Arial;min-height:20px;margin:0;padding:4px;outline:none}.editor #SidePanel .field input.min{height:11px;width:30px;margin-right:1px}.editor #SidePanel .field input.color{flex:none;width:60px}.editor #SidePanel .field input[type=checkbox]{appearance:none;background-color:#191919;border:4px solid #191919;cursor:pointer;display:inline-block;flex:none;min-height:16px;width:16px;height:16px;transition:background-color .25s linear}.editor #SidePanel .field input[type=checkbox]:checked{background-color:#ccc}.editor #SidePanel .field input[type=color]{appearance:none;border:none;block-size:revert;cursor:pointer;height:28px;padding-block:revert;padding:0;margin:0}.editor #SidePanel .field input[type=number],.editor #SidePanel .field input[type=range]{appearance:none;height:20px}.editor #SidePanel .field input[type=range]::-webkit-slider-runnable-track{border:none}.editor #SidePanel .field input[type=range]::-webkit-slider-thumb{appearance:none;background-color:#666;cursor:pointer;height:17px;width:17px;transition:.2s linear background-color}.editor #SidePanel .field input[type=range]::-webkit-slider-thumb:hover{background-color:#999}.editor #SidePanel .field textarea{background-color:#191919;color:#fff;font-size:12px;line-height:12px}.editor #SidePanel .field img{border:1px dotted #333;cursor:pointer;object-fit:cover;width:100px;height:100px}.editor #SidePanel .field button{background-color:#333;border-top:1px dotted #444;height:16px;margin:0;padding:0 0 0 5px;text-align:center;transition:.2s background-color linear;width:100%}.editor #SidePanel .field button:hover{background-color:#444}.editor #SidePanel .field.block label{display:inline;line-height:21px;max-width:100%;text-align:left;width:100%}.editor #SidePanel .field select{background-color:#222;border:1px solid #333;color:#fff;cursor:pointer;font-family:Arial;font-size:12px;padding:1px 5px;position:absolute;right:4px}.editor #SidePanel .field option{cursor:pointer}.editor #SidePanel .field .vector2{position:relative;width:100%}.editor #SidePanel .field .vector2 .fields{display:inline-block;margin-bottom:2px;position:relative;overflow:hidden;width:60%}.editor #SidePanel .field .vector2 .fields div{display:block;margin:3px 0}.editor #SidePanel .field .vector2 .fields label{background:none;display:inline-block;width:30px}.editor #SidePanel .field .vector2 .fields input{width:66%}.editor #SidePanel .field .vector2 .input{background-image:url(data:image/gif;base64,R0lGODlhYwBjAIAAABoaGgAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDIgNzkuZGJhM2RhM2I1LCAyMDIzLzEyLzE1LTEwOjQyOjM3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjUuNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCNzgwMTU3OUUxOTcxMUVFOTkyNURCNkFCMTUwREUwNyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCNzgwMTU3QUUxOTcxMUVFOTkyNURCNkFCMTUwREUwNyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkI3ODAxNTc3RTE5NzExRUU5OTI1REI2QUIxNTBERTA3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkI3ODAxNTc4RTE5NzExRUU5OTI1REI2QUIxNTBERTA3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAAAAAAAsAAAAAGMAYwAAAv+Mf4Crm/5gaJA6y+TUGiMfVd0ogYa5cWJJru7Vwqwqv9lsf/Gd0+i/0+FqRB4tVBT2TkGk8XkEDqFOZbKKVUmXKe72yjxaqWFvswzuXgDstvsNj8vn9Lr9Hj+ryfuxP9sHqPfFR/iHxjeoOHUYiNi4aMYIaCg4+UgZmVappVno2YgCmnnpaMrJgao6itmaynoKq4pHW2t7eyurW4q6K/m7KRbqG8wrTAr8aVxKrJw8fBy7/Iyc1gxN7So6XZwtzXVd7dy9hmt+jk4brr1u2r7KnRiPTT4u7w2Pr/fOzzwvTs8epH/sCH6zZjBfvYBR+unjlS6ixIkOFwK09DCjRVfXFQVe5JiwI0MfIj8eFKPQY0FvJVdudBcypkaULU+OPDExp05bNVPefCXzpU+SQVXaxCi0576iP4eCnNm0nVKmSI06PeqSJtWsUUvs/ApWzlSoVbuS5VrW5NW10bC6Zevv7FupW+fWHZs0bl65V/FaHRQ2cGC/ZhHyJUz0cN1tihsb3gv5bzS4ju9FLiz5GOXLJhGj/TxBsOidnu2CW1y69GatlTEPbK0Wlmq6sEH3RY37dG3TQkf7ljj7bm7OoIPLNU4c6O7VDYdnfvw8uuvEyZmntY18QQEAOw==);border:1px solid #333;display:inline-block;width:99px;height:99px;position:absolute;top:50%;transform:translateY(-50%)}.editor #SidePanel .field .vector2 .input .x{background-color:#333;height:.5px;width:100%;position:absolute;top:50%;transform:translateY(-50%)}.editor #SidePanel .field .vector2 .input .y{background-color:#333;height:100%;width:.5px;position:absolute;left:50%;transform:translate(-50%)}.editor #SidePanel .field .vector2 .input .pt{background-color:#fff;border-radius:5px;width:5px;height:5px;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:10}.editor #SidePanel .field .grid3{grid-template-columns:repeat(3,1fr)}.editor #SidePanel .field .grid4{grid-template-columns:repeat(4,1fr)}.editor #SidePanel .field .grid3,.editor #SidePanel .field .grid4{display:grid;margin-top:4px}.editor #SidePanel .field .grid3 div,.editor #SidePanel .field .grid4 div{display:flex;overflow:hidden}.editor #SidePanel .field .grid3 div label,.editor #SidePanel .field .grid4 div label{line-height:30px;min-width:inherit}.editor #SidePanel .field .grid3 div input,.editor #SidePanel .field .grid4 div input{width:100%}.editor #SidePanel .field .imageField{display:block;height:120px;position:relative}.editor #SidePanel .field .imageField img{display:inline-block}.editor #SidePanel .field .imageField .fields{display:inline-block;position:absolute;top:0;width:170px}.editor #SidePanel .field .imageField .fields div{display:inline-block;width:100%}.editor #SidePanel .field .imageField .fields div label{background:none;display:block;padding:0 5px}.editor #SidePanel .field .imageField .fields div input{width:calc(50% - 10px)}.editor #SidePanel .group{background-color:#191919;margin:2px 0}.editor #SidePanel .group h4{display:inline;font-weight:700;pointer-events:none;width:fit-content}.editor #SidePanel .group .toggleBtn{background-color:#191919;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAB1CAYAAADN5fjJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAzklEQVR4nO3bwQqCUBBA0Yz+/5dt1eYRkVfKWZyzUgi5zEJSxm3f99tU96sDPhFXiavEVeIqcZW4anTcYzmf8P9pex2Mnpy4Slwlrhodt96Et7e/usjoyYmrxFXiKnGVuEpcJa4SV4mrxFXiKnGVuEpcJa4SV4mrxFXiKnGVuEpcJa4SV4mrxFXiqtFx69LLUd9sKuZFmtGTE1eJq8RV4ipx1T+2+o9e01b/aeIqcZW46uxWvweckcRV4ipxlbhqdNzZl4c//cJu9ORGxz0BUl8I9T4qXncAAAAASUVORK5CYII=);background-position:1px 1px;background-repeat:no-repeat;background-size:15px 45px;display:inline-block;height:15px;opacity:.8;overflow:hidden;margin:0 0 0 5px;padding-left:20px;width:calc(100% - 7px);transition:all .15s linear}.editor #SidePanel .group .toggleBtn:hover{background-color:#222;opacity:1}.editor #SidePanel .group .fieldItems{border-top:1px dotted #333;overflow-y:auto;user-select:none}.editor .multiview{display:grid;font-family:Arial,Helvetica,sans-serif;font-size:10px;grid-template-columns:auto;position:absolute;overflow:hidden;inset:0 300px 0 0;z-index:1}.editor .multiview canvas{pointer-events:none}.editor .multiview .dropdown{background-color:#222;display:inline-block;font-size:10px;text-align:center}.editor .multiview .dropdown .dropdown-toggle{cursor:pointer;padding:0 10px;height:30px;line-height:30px;overflow:hidden}.editor .multiview .dropdown .dropdown-toggle:hover{background-color:#333}.editor .multiview .dropdown .dropdown-menu{position:absolute;top:20px;left:0;z-index:1;list-style:none;padding:0;margin:0;width:100%}.editor .multiview .dropdown .dropdown-menu li{background-color:#222;border-top:1px solid #191919;cursor:pointer;height:30px;line-height:30px;overflow:hidden;padding:0;transition:.2s linear background-color}.editor .multiview .dropdown .dropdown-menu li:hover{background-color:#333}.editor .multiview .cameras{display:grid;grid-template-columns:repeat(2,1fr);pointer-events:visible;position:absolute;width:100%;height:100%}.editor .multiview .cameras.single{grid-template-columns:repeat(1,1fr)}.editor .multiview .cameras .CameraWindow{border:1px dotted #333;border-top:none;border-left:none;pointer-events:visible;position:relative}.editor .multiview .cameras .CameraWindow .clickable{display:inline-block;width:100%;height:100%}.editor .multiview .cameras .CameraWindow .options{position:absolute;height:30px;top:initial;bottom:0;left:50%;transform:translate(-50%);width:max-content}.editor .multiview .cameras .CameraWindow .options .dropdown{position:relative;top:0;transition:background-color .25s linear}.editor .multiview .cameras .CameraWindow .options .dropdown.up{background-color:#333;bottom:0;top:initial}.editor .multiview .cameras .CameraWindow .options .dropdown.up .dropdown-menu{top:initial;bottom:100%}.editor .multiview .settings{pointer-events:visible;position:absolute;left:50%;transform:translate(-50%)}.editor .multiview .settings .toggle{background-blend-mode:overlay;background-color:#222;background-position:2px 2px;background-repeat:no-repeat;background-size:26px 26px;display:inline-block;position:relative;left:0;transform:none;width:30px;height:30px;overflow:hidden}.editor .multiview .settings .toggle.selected{background-blend-mode:normal}body .tp-dfwv,body .tp-dfwv button,body .tp-dfwv input{text-transform:none}.tp-ckbv{float:right}.tp-dfwv{left:50%;top:0;max-height:100%;overflow-x:hidden;overflow-y:auto;transform:translate(-50%);width:400px;z-index:100}.tp-dfwv .tp-lblv{position:relative}.tp-dfwv .tp-lblv_v{display:inline-block}.tp-dfwv .tp-lblv_v .tp-ckbv{width:20px}.tp-dfwv .tp-lblv_v .tp-fpsv{width:280px}.tp-dfwv .tp-btnv_b{padding:0 5px}.tp-dfwv .tp-btngridv{max-height:100px;overflow-x:hidden;overflow-y:auto}.tp-dfwv .tp-tabv{max-height:90vh;overflow:hidden auto}.tp-dfwv{font-family:Roboto Mono,Source Code Pro,Menlo,Courier,monospace;font-size:10px}.editor #SidePanel{background-color:#0d0d0d;border:1px solid #111;max-height:100%;min-height:20px;overflow-y:auto;pointer-events:visible;position:absolute;right:0;top:0;bottom:0;width:300px}.editor #SidePanel .accordion{border-bottom:1px dotted #333;background-color:#111;line-height:0;resize:vertical;overflow-y:auto}.editor #SidePanel .accordion.hide{resize:none;overflow-y:hidden}.editor #SidePanel .accordion>div{display:grid;grid-template-rows:0fr;margin-left:5px;transition:.33s grid-template-rows cubic-bezier(.645,.045,.355,1)}.editor #SidePanel .accordion>div>div{overflow:hidden}.editor #SidePanel .accordion>div.open{border-top:1px solid #222;grid-template-rows:1fr}.editor #SidePanel .accordion .icon{height:20px;width:20px}.editor #SidePanel .accordion .icon button{text-indent:-9999px;white-space:nowrap}.editor #SidePanel .accordion .toggle{background-color:#333;display:inline-block;font-size:12px;font-weight:700;margin:0;padding:0;position:relative;user-select:none;width:100%;height:20px;transition:background-color .2s linear}.editor #SidePanel .accordion .toggle:hover{background-color:#444}.editor #SidePanel .accordion .toggle p{margin:0;padding:0}.editor #SidePanel .accordion .toggle .label{display:inline;position:absolute;left:25px;top:3px;height:15px;line-height:15px}.editor #SidePanel input{background-color:#222;border:1px dotted #333;font-family:Arial,Helvetica,sans-serif;font-size:12px;padding:4px}.editor #SidePanel button{background-color:transparent;border:none;color:#fff;cursor:pointer;font-family:Arial;font-size:12px;margin:0;padding:0;text-align:left}.editor #SidePanel #options{border-bottom:1px solid #111;display:flex;margin:0;padding:0;list-style-type:none;width:100%}.editor #SidePanel #options .selected{background-color:#222}.editor #SidePanel #options .selected button{pointer-events:none}.editor #SidePanel #options button{min-width:20px;height:20px;text-align:center;width:100%}.editor #SidePanel #options button:hover{background-color:#333}.editor #SidePanel #options li{border-right:1px solid #111;font-size:12px;line-height:20px;min-height:20px;min-width:20px;text-align:center;width:100%}.editor #SidePanel #options li:first-child{border-left:1px solid #111}.editor #SidePanel .status,.editor #SidePanel .refresh,.editor #SidePanel .remove,.editor #SidePanel .visibility{display:inline-block;margin:0;padding:0;overflow:hidden;width:20px;height:20px;text-indent:-9999px;white-space:nowrap}.editor #SidePanel .status{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAA8CAYAAACtrX6oAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB90lEQVR4nO2cXWoCQRCEy+R0+6QguCE5XwLJtYToIZTOgxFlWd1Vd7p7yvpgXoLJ1NQ3a/wZnZkZBC8v0QFEWSSYHAkmR4LJkWByJJgcCSZHgsmRYHIkmBwJJkeCyZFgciSYHAkmR4LJkWByxghuAKwBbAEsiqa5jzlO+ZrgLH3MAWxwyLd0n93MhsbaTuzMrB3xO15j9Z/pyG+CTNfyufd36130K4BPAG2BvXYrKwBfOGTKSF8+//5G7IJFZxeG7MTOaC9kWgRmunbldnHr79FCIyRnyjJW7i4qc23FZshwj9zWzN4istdUcM1yj7dxl1xL0QxyQyTXUDiTXHfJ2YtnlOu6tswCmOW6rXGKP1Ii5DPIdVnr0y14glHVhp5y4VXcZT04qvuXNHUB6R90ZBNQeo4SRaR+2pCleK+5ShWS9ol/dOHec5YsJuVLd1FFR81dOmS6F9+9C47O4BEy1dtnXsVmyeIVMs0b4CPG4pFCC427Dzh4hrwkObq87jg/g5YpX19/g2fQPI/N/gB4B7A/+9kewAeAb8cct5ApX19/wwTsxLmZbcxsa2bLBFdGdzR2uIq3lueMV7e/Y75m6PYzM33THTP6ZAM5EkyOBJMjweRIMDkSTI4EkyPB5EgwORJMjgSTI8HkSDA5EkyOBJMjweRIMDl/5nU6ICCWVGoAAAAASUVORK5CYII=);background-position-x:2px;background-position-y:2px;background-size:32px 16px}.editor #SidePanel .status.open{background-position-x:18px}.editor #SidePanel .refresh{background-color:transparent;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAACXBIWXMAAAsTAAALEwEAmpwYAAAE1UlEQVRoge2aW2gdRRzGf5vGWMSTVBpNUjWNijHgg6KIRqmtD0UpqA9iFeulijWkllIsKOKb+lbxgr6oLQUFtc2LPgjaImILSq36oKLWkpZC7C1p6zkNXkqSz4c5x2zH3T27s7vnnMR8MBxmzsx/vm/2P/fxJPF/QlO9CdQac4JnO+YEz3Y052y/C7gV6Af6gCuAhUABEDAOnASGgX3AV8Au4Le8CHk5TEttwMPA/cBNuHnR18D7wLvAieyoAZKyChdJelXSaWWHcUmvS1qUFc8sjDRLeiZjoTZOS3pOUktavmld+irgPeC6MAcC9gBfYNx0P6Z/lsr/FzD9vBe4HlgK3AzMC7H3HfAQ8JMz4xSttUJSMeSLnJT0vKRLHex2SNogaTjia9/lyttV7IIQsWOSnpZUSNGQldAkabWkkYB6JiUN1lJwTwCJT5Xh4OILBUmbA+qbkjRQK8FI2lquuCjjgl4OYv1hlaQ/LdGTku5MYiftoNUD/F4OtcAS4GPMYFdBCbgR+CWOgTwWHnljCbADmO9L24sZ3SeqFZ6Ja+ndwONW2g3Axlilq/i8J2mLzKicZ/90CVus/lyS1FmtXDWjT5SNvdkAAu3QKumwJfqVNIK7NT3XTkla3gAi7fCYJbhUbojEgj1JOyxjh6oZq0NolnTQ4rkuqkzYoLUGWG6ldQObkowuNcAE8IaVtjKqQNC01A38ALQG5BdwO7DTkWAe6AJGmJ5xpsppx4My21/YAzYTLDbO//XAEcxJSQVNwC1hmW3BQa5soxFde5cV7w/L6BecREichqkl9lrxvrCMFcEe8BbxXdUDtgILkjLLCfut+OWhOcvD9YDcUI8FyXZHrpK0zZO0GPget4FIwArgE4eyrmgHfgQ6EpYbA66O2i39DbT44ucCZxLTywd3Ax8mLLMSGIraLY1b8fMTVpAnPgKGEuTfXskfJfiUFe9MSCpvPAmMxsg3CqyrRKIED1vxXgdSeWIUMz1Ww1kNEyXYPjIJO3uuJ6q59pD9f5TgPVZ8mRun3LEWOBaQPobPlSuIEvwZZtqpoJ/G68dghA0EpK8lYAMRJfgY8K0v3oy5EWxE2K79H1f+F1VWNeutlcqwzKa73hv/oNAu6aikUZmbzMB81Y5p24FDwHm+tEeAd9J9kNxwb/k3dCCLcy79GrDeFz+K2Y0UU1GrE+KcS28C/vDFO2m8/XBsxBE8Arxgpa0BHsieTv6Ie9XSgrnQvsaX9hdwB+aye8Yg7lXLGeA+zt5QzMdMB0uzJhWBCzAXeM5Icre0D1iNORWsoA2zF16VhkQMeMAGzIxxEHPa4gaH+W4w5DThbUltOcyvF0vaGVBfj4s9VxKDkiYCSByR9KiyWZy0SnpW0omAeoqujZuG0D0ydzlBOCDpKUldDnYXS3pR0qkQ20WZBzVOvNNeiPcC24BrQ/6fxOy6Psc8OfoVOMz04FcALgGuxLzaW4bZhnoh9r7BTIf2KWV8pPjClXCOzMud8ZAvkgWKkjZKmpeWbxaCK2GRpJczFl6S9JLMxiATnnm88ViIcbsHMU8RwtwzDFPAl8AHmMelpejsyZD3o5YO4DbMK5s+4DLgQswJqIfpy8eBA8DPmEux3QSfYGSCmfiKJxVm4iueVJgTPNsxJ3i24x9qO45nn/sZdwAAAABJRU5ErkJggg==);background-position:2px 2px;background-repeat:no-repeat;background-size:16px 16px;position:absolute;right:25px}.editor #SidePanel .remove{background-color:transparent;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZGVmcz4KICAgIDxzdHlsZT4KICAgICAgLmNscy0xIHsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIHN0cm9rZS13aWR0aDogMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvZGVmcz4KICA8ZyBpZD0iTGF5ZXJfMyIgZGF0YS1uYW1lPSJMYXllciAzIj4KICAgIDxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTE2LDdINGMtLjYsMC0xLC40LTEsMXYxMGMwLC42LjQsMSwxLDFoMTJjLjYsMCwxLS40LDEtMXYtMTBjMC0uNi0uNC0xLTEtMVpNOCwxNS41YzAsLjYtLjQsMS0xLDFoLTFjLS42LDAtMS0uNC0xLTF2LTVjMC0uNi40LTEsMS0xaDFjLjYsMCwxLC40LDEsMXY1Wk0xNSwxNS41YzAsLjYtLjQsMS0xLDFoLTFjLS42LDAtMS0uNC0xLTF2LTVjMC0uNi40LTEsMS0xaDFjLjYsMCwxLC40LDEsMXY1WiIvPgogIDwvZz4KICA8ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj4KICAgIDxwb2x5Z29uIGNsYXNzPSJjbHMtMSIgcG9pbnRzPSIxIDUgMSAzIDMgMyAzIDEgMTcgMSAxNyAzIDE5IDMgMTkgNSAxIDUiLz4KICA8L2c+Cjwvc3ZnPg==);background-position:2px 2px;background-repeat:no-repeat;background-size:16px 16px;position:absolute;right:5px}.editor #SidePanel .visibility{background-color:transparent;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDgwMCA4MDAiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjZmZmOwogICAgICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgICAgICBzdHJva2UtbGluZWpvaW46IHJvdW5kOwogICAgICAgIHN0cm9rZS13aWR0aDogNjYuN3B4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvZGVmcz4KICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik01MDAsNDAwYzAsNTUuMi00NC44LDEwMC0xMDAsMTAwcy0xMDAtNDQuOC0xMDAtMTAwLDQ0LjgtMTAwLDEwMC0xMDAsMTAwLDQ0LjgsMTAwLDEwMFoiLz4KICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik00MDAsMTY2LjdjLTE0OS4zLDAtMjc1LjYsOTguMS0zMTguMSwyMzMuMyw0Mi41LDEzNS4yLDE2OC44LDIzMy4zLDMxOC4xLDIzMy4zczI3NS42LTk4LjEsMzE4LjEtMjMzLjNjLTQyLjUtMTM1LjItMTY4LjgtMjMzLjMtMzE4LjEtMjMzLjNaIi8+Cjwvc3ZnPg==);background-position:2px 2px;background-repeat:no-repeat;background-size:16px 16px;position:absolute;right:45px}.editor #SidePanel .childObject{background-color:#111;min-height:20px;overflow:hidden}.editor #SidePanel .childObject ::-webkit-scrollbar{width:10px}.editor #SidePanel .childObject ::-webkit-scrollbar-track{background:#0d0d0d}.editor #SidePanel .childObject ::-webkit-scrollbar-thumb{background:#666}.editor #SidePanel .childObject ::-webkit-scrollbar-thumb:hover{background:#999}.editor #SidePanel .childObject .child{background-color:#222;border:none;border-bottom:1px solid #111;height:20px;position:relative}.editor #SidePanel .childObject .child:hover{background-color:#333}.editor #SidePanel .childObject .name{background-color:transparent;font-family:Arial;height:20px;overflow:hidden;position:absolute;left:5px;right:50px;top:50%;transform:translateY(-50%);white-space:nowrap}.editor #SidePanel .childObject .visibility{background-color:transparent;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDgwMCA4MDAiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjZmZmOwogICAgICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgICAgICBzdHJva2UtbGluZWpvaW46IHJvdW5kOwogICAgICAgIHN0cm9rZS13aWR0aDogNjYuN3B4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvZGVmcz4KICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik01MDAsNDAwYzAsNTUuMi00NC44LDEwMC0xMDAsMTAwcy0xMDAtNDQuOC0xMDAtMTAwLDQ0LjgtMTAwLDEwMC0xMDAsMTAwLDQ0LjgsMTAwLDEwMFoiLz4KICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik00MDAsMTY2LjdjLTE0OS4zLDAtMjc1LjYsOTguMS0zMTguMSwyMzMuMyw0Mi41LDEzNS4yLDE2OC44LDIzMy4zLDMxOC4xLDIzMy4zczI3NS42LTk4LjEsMzE4LjEtMjMzLjNjLTQyLjUtMTM1LjItMTY4LjgtMjMzLjMtMzE4LjEtMjMzLjNaIi8+Cjwvc3ZnPg==);background-position:0;background-size:contain;height:16px;overflow:hidden;position:absolute;right:25px;top:50%;transform:translateY(-50%);width:16px;white-space:nowrap}.editor #SidePanel .childObject>div{display:grid;grid-template-rows:0fr;transition:.33s grid-template-rows cubic-bezier(.645,.045,.355,1)}.editor #SidePanel .childObject>div.open{grid-template-rows:1fr}.editor #SidePanel .childObject>div .container{padding-left:5px;height:auto;overflow-x:hidden;overflow-y:auto;max-height:200px}.editor #SidePanel .childObject>div .container.closed{height:0;overflow:hidden}.editor #SidePanel .childObject .icon{background-color:transparent;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEZklEQVRYhe2YW4iVVRTHf4465oSaUNlUjo7SmCBEPVipTWYXoV7qoejykhRCEVQP9pAFSWVBPdRTMNRLWGRaFr2FSShmEQ1KzQymUhpeMky6ONbcfj3sdZpvvvnO8Zy5lA/+YcP51jpr7bVv/7X2nqByNqPu/w7gTDgX4GgxaYR2DcDlwC3AUmAh0ARMDf1fwGGgE9gFfAb8AJyquSe1ljZFXa6+o/Y4FD3qvmh5neomdYXaUEuftQQ3T31d7Y8O96tdal98P69eos5SXwhZn7pb7cgE2qa2jHWAy9Svo4Nf1VfUG9VPQvauWp/5f726MXSb1WvVF9XjIftWvXWsArxdPRSOt5uWCfV+dUDtVJsL7K5Q98aM3xuyVnVr+Dqi3jHaAJepx8Lhe2pTyJvVn6PzVRXsHw7bw+rckDWqb4b8mHrbSAOcp7aHozZ1Wka3NuQfqHUVfExUt8R/n8rI69XXQt6lLijnoxzNTAEeA64GeoDzgbVBI5OBu+J/FwPrg3aK0A1cGL8fB+YAfUFDF4T+SmAN8ATwZ97BBC3MxdeTuGtqOBSYkGklgu/NyIpgtMnxPRDfpd9kdCuBT/MOimawHlgdwW0DPs918AAwH9gK7MjoyqEHWA6sAPYBGzMD6gWWRHCPhL/TQ4dYfPpOxSFYXKDvVE+YaKZamrpZPWmil7xuoXrQxAiL8vqiXHwTaU99BbTndItJe+Zoga4S2oFjpJR4TU7XBXwZs7oyb1gU4DKgH/iCtP+yaAlH+4E/agjwJCkXTwwfeewgLXdrNQEuAn6neIYaSfvwQA3BlXCAdEAaC3TtpEFclVcUHZIm0sauC2f1Ie8lLZGkmbiI8vSSR3fYDYSPyzJ990YfvQxS0r8oopkTJI76jbTUpRMnMI3Ekd2k0qnaenKAxKUNwN+k7ZH1Wxd9nswHWWvBWo7vxg1FSyzwC/AgsIfBJe4DngNWAW1UziB5dAPPAo8CbwPrGLrELcAGYEY1AR4C5pKW5WhOt5c0iwMxiFpQykBdpGo7i7kkwj+eNypa4g5gOsP5ChKX1ZG4sFbMjyDzgyb6mgl8V02AO0mndAnDZ/h70hZoJg2iWswMm37SKuRxA2kGtw/TFKSelipTXesIUt3uWlNd0R78EXifdEheYnixMDlm5BlqKxZmkChqHcOLhdnAxxQkgErl1jbgPM7CcgtS6nkDeDIcbQZ+IpVgk4A7gUtJBcVOKhesS0n5/QjwEYMF6yzg7gjwLVLuLxhi+X3TrH4TZXmbOj2jezrkZyr5JzlY8q/JyKsu+UdzaToaG/uhCvarw/agOscxvjSVWvbaucPBa+d9plvdXlORm7dbELo+9Z6Qjfm1MzuT2Yv7q9HZlpBtdOjFfar6Yeg2qdep6x2ni3upFT19dDj49PGy6emjMQZg6PaY9lkJ4/L0UWqlx6MNDn8g6o2g98fvPEb0eFSOB8+Eoue32Rm6OR200hn0sY0RPr+NNMD/DGf9C+u5AEeLfwBkrdN1844nCgAAAABJRU5ErkJggg==);background-size:20px 20px;display:inline-block;position:absolute;right:5px;top:0;width:20px;height:20px;transform:scale(.8)}.editor #SidePanel .childObject .obj3D{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEZklEQVRYhe2YW4iVVRTHf4465oSaUNlUjo7SmCBEPVipTWYXoV7qoejykhRCEVQP9pAFSWVBPdRTMNRLWGRaFr2FSShmEQ1KzQymUhpeMky6ONbcfj3sdZpvvvnO8Zy5lA/+YcP51jpr7bVv/7X2nqByNqPu/w7gTDgX4GgxaYR2DcDlwC3AUmAh0ARMDf1fwGGgE9gFfAb8AJyquSe1ljZFXa6+o/Y4FD3qvmh5neomdYXaUEuftQQ3T31d7Y8O96tdal98P69eos5SXwhZn7pb7cgE2qa2jHWAy9Svo4Nf1VfUG9VPQvauWp/5f726MXSb1WvVF9XjIftWvXWsArxdPRSOt5uWCfV+dUDtVJsL7K5Q98aM3xuyVnVr+Dqi3jHaAJepx8Lhe2pTyJvVn6PzVRXsHw7bw+rckDWqb4b8mHrbSAOcp7aHozZ1Wka3NuQfqHUVfExUt8R/n8rI69XXQt6lLijnoxzNTAEeA64GeoDzgbVBI5OBu+J/FwPrg3aK0A1cGL8fB+YAfUFDF4T+SmAN8ATwZ97BBC3MxdeTuGtqOBSYkGklgu/NyIpgtMnxPRDfpd9kdCuBT/MOimawHlgdwW0DPs918AAwH9gK7MjoyqEHWA6sAPYBGzMD6gWWRHCPhL/TQ4dYfPpOxSFYXKDvVE+YaKZamrpZPWmil7xuoXrQxAiL8vqiXHwTaU99BbTndItJe+Zoga4S2oFjpJR4TU7XBXwZs7oyb1gU4DKgH/iCtP+yaAlH+4E/agjwJCkXTwwfeewgLXdrNQEuAn6neIYaSfvwQA3BlXCAdEAaC3TtpEFclVcUHZIm0sauC2f1Ie8lLZGkmbiI8vSSR3fYDYSPyzJ990YfvQxS0r8oopkTJI76jbTUpRMnMI3Ekd2k0qnaenKAxKUNwN+k7ZH1Wxd9nswHWWvBWo7vxg1FSyzwC/AgsIfBJe4DngNWAW1UziB5dAPPAo8CbwPrGLrELcAGYEY1AR4C5pKW5WhOt5c0iwMxiFpQykBdpGo7i7kkwj+eNypa4g5gOsP5ChKX1ZG4sFbMjyDzgyb6mgl8V02AO0mndAnDZ/h70hZoJg2iWswMm37SKuRxA2kGtw/TFKSelipTXesIUt3uWlNd0R78EXifdEheYnixMDlm5BlqKxZmkChqHcOLhdnAxxQkgErl1jbgPM7CcgtS6nkDeDIcbQZ+IpVgk4A7gUtJBcVOKhesS0n5/QjwEYMF6yzg7gjwLVLuLxhi+X3TrH4TZXmbOj2jezrkZyr5JzlY8q/JyKsu+UdzaToaG/uhCvarw/agOscxvjSVWvbaucPBa+d9plvdXlORm7dbELo+9Z6Qjfm1MzuT2Yv7q9HZlpBtdOjFfar6Yeg2qdep6x2ni3upFT19dDj49PGy6emjMQZg6PaY9lkJ4/L0UWqlx6MNDn8g6o2g98fvPEb0eFSOB8+Eoue32Rm6OR200hn0sY0RPr+NNMD/DGf9C+u5AEeLfwBkrdN1844nCgAAAABJRU5ErkJggg==)}.editor #SidePanel .childObject .camera{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC60lEQVRYhe2YT4hNcRTHP48xpmYaNAvRyEQxEhnKQljYsRm9/EmSyJiMFAsMZWNhJYoNIUVJ2VGiyb9ZzIpMpkQSahbGv9GMYWrM+1rc2zjvzvvdd+99rzdvMd+6de75nd+5387vnN/v/G5KEuWMKRNNIB8mCRaKiiL5qQb2ApuBuUAV0Ad0AJeB3sSeJRX6LJbULTf6JTUn9Z+KWMUpPyp/Avoa4CNQZ3Sj/lNpdL/xottR7AjOkHRUUpekN5I6JbVLavDH75lIfZN0UFKTpCWS0pJem/HeJBEMG6yV1ONYtgFJbZJ+GF1jDh+zJb03NuliEuwMkMo4yErS2RA/LcbuYVyCrm1mA7Dal/8Cu4FG4JD/HsTTkCy6a+SVMTPQuc1sBKb78nHghi+/A+YBxwL2lbhRY+ThuARdEVxu5JdGFvACr0otdoZ8Y4+Rn0Sn5sFFsMvI6YB9MzA1YJ8mN8k1wAHzfj4uQVdyrpI0aJL7oqTtkq4FiqPLyCOSbktqlbRL0jlJQ2b8QdwCUZ4qvhRStZL0XFK1pMd57CRvq5mfhKBriRfiFUMY6oD7eOdwPlQAN4G10dfWg+uouwXsiOssAj4AC+JMcEWwvnAuOTEr7gTXPmg34zagOwkbIIOXAo9CbDYBrcBXYN+4UUdy2sRflyS5zVNlfPX7ugpJW5V9nI7mmh+lYU0lCZ2B3TOnAVuAk0BTwC5nuhWro46KauBOQJch5OpRaoIW34GreGf+YZdRqS9NAj4Bp4ClQDvwOWxCqSM4ADQEdKE5XvbXzlITrAVe4TW+M6NMKDXBFLAMuAD0ACfIc7pMZBXXA2cY3/xmodQRHAL2A2+NLtj8ZiEKwUL/z2WMPAJcAVYALWSf8dZuDFGWeBHwKxm3sWYhiGG8Tfo6sA2vSfiSy4GrH3wGrDcfKSSKKf6v1E9yF0XK9Q1XBPuMXMw8HXTonQFwETwNzMFr64v1jzgFHIk9ybHEZYPJo65QlD3Bf2/Q/eaHPiSWAAAAAElFTkSuQmCC)}.editor #SidePanel .childObject .interactive{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAADA0lEQVRYhe2Yu2sUURTGf5uYSJ4EsgqJIkRMEYOFYMBCQcTe57/hs9AqlVpYiChYqREsFBRF8AF2KgpqErQQRKIRi6ghRozEhcSYz+Le1bPD7MzOzm5MkQ+Gc+/Z79z7cfY+5kxGEosZNf9bQByWBKbFsjJiGoEuYC3QAUwC74EPwFTlpHlIKvVplHRS0rSK47KktgRjxj6lEtdJ+hIhzGJO0raFFNghaTYg4oKkPkmdknrlMvsjwNm8EAJrJI2YSZ9IyhbhNkkaMNwZSS3VFrjbTPhC0nLzW6ekDZK6jC8j6ZqJOV9tgTZ7eSF1ks6oEHd9BpHULGnS+2flNldVBK4wAu4Z/0GF47bhHDP+njQCow7qbtO+4209cNy3p4ETwCff34k7FwEGTWw2zTFY6k0y4W2LfwAeA/3AdcNr9PZzGXOEIuomeYbL0BrgvvdlzO8z3tYa37y3b33sKuB5tQTO4zJUDLUhvrkSY0tGOXdxHgpYgNPAU9yaHQP6gB3AS+AB0Ars8fYW8C5+lmS7Khuya88W2dXBmyUXwjmXZhenRUug3xDC2Q9sjRokqcBMSNv6DgH7TH8M2AQMBTh7Tf9o1IRJ16BC2tZ3Ffhp+oPAMPDICw3jRCJNBsNQR+HurjF+y7GJiazakgoMGyxOdJBTCv8vKrEG6yPGawrhBAVWLYP59kVvp4DvuDs6vyluenvJcL6RIKNpDup87BCwEsjxb/FvAdqAcd8fNJwc0G7GicxgUoEzpm3PuYkQ3njAZzl2I0VmMOlfnAM++vZ6CtdWEthXsNEoYlKBv3F3aH6S7ghuFA6Y9pVIZhlvuRvNXTosV4ckiV8duJ/ro/jlCKxVYa3SnyC2SdIrE3skLqbcWqFLhTglqSEmpkPSGxMzGpe9NAKRtCsg8qukw3LlaLPPVqtcYT8Q4OY8L3aeNAKRtF3F8auI/7Wk9lLnSCsQufL0RoTQPKblSta6JONnpIp9As4Cvbjyswd3Rk7hXrUeAiO4czQRKimwKlj0X1iXBKbFH8wWbNSnU+tzAAAAAElFTkSuQmCC)}.editor #SidePanel .childObject .light{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAETklEQVRYhe2YXYhVVRTHf3d0/JhyUrMpFbImM+whSa3Mynww+4AeIgiKoozooQ+KyMyXIAujF6OXqHyI6iEKKYgIP/owsjSFqCkprdDUTEcjbWZ0HHV+Pex1ucfb9Z57Z9REXHA4Z++99l7/s/ZZ/7X2KaiczNLwfwPIk9MA+yunNMAG4DHgV+BvoB3YFff2TPstYEyfrajVroI6Sr1GvahsbJC63HzZq04pmztSvU5tVRuqYRiYg78JeBR4HPg5ntdmxovz9wJfA3uAxuibDLQCA+IqynnAQuBuYCnwMLC1rx48U12U8cZqdWqMDcx4cI16qTpYbVKHqa+ovWUeHKsujn7VL9ULq2HI+wY7gVeBJdGeFu3J4ZUiy/cAXeHRRuAQsC/GC0B3eG4BcH/0tUV7czUAeVsMsBF4Kha9HZgCvAncAuwPnXHA0wFuGLANuDrGuoGDwFxgTqzzQ7RX5FrP2eLsdb76vnogtme6+nE8H1YPlQXHwbi3q9eqn0e7Tb25VrsF68vFY0lb1AGcDTwItGQ8tQM4AIwGmqP/EPAu8A0wElgJfFGzxTo8mKWXu9Rd4ZF96jvqjSbauEC9Sn1O3R463epLaku99voCsFXdkAH3kNpcQW+IiT/bQne3eufxBtioPqP2mKhioXpWzpxb1T8C5Ifh4ZptVoriRmAIKdrI3Lujf3bobAPeJpF0NVkKrAFuI9HTOBIxnxFrF4OgQKKr/dnJlQA+AcwABgOHA4zAamA5cE7orQL+zAEHiWI+A2bFC7aSguheYCgpqAphZz3wSB7AecCICv2TgH8oFRib4gVqka0k0h8CXAxMBW6ooDejFoCvA9OBQUAvKWM0kDz4XUZvNKXtyZMWUl7vBbaQXq457PeEziDgx/KJlQAuIPFdMcEXv5OdYWBP9M8k8VpnDQCvB4aTSrCNJB5cSdrW3tBpIJVnR0qdUTxAfdGUOVTnmwqEanNmqltC/9OgqePKg5eom8PgdvW+oJ9Kupera0O3U50TL3lcAaI+oHaF4R3qa6Z822wq0Saq89T1lmSxOrxeW/Xm4uGkiqQDmECKuKHxHW0HdpMiewSpvGqKeR8Ay0iBsYIjg6261PE2o9Q3Yqv+MqWxO9R1Hl12qs+q49Vlppy82pSr+5xJKsko4AXgHlJ0t5NIeg3wLXAlqZhtIUV8J6nmWwX8QiLjdhL5TwMWkY4R6/rrwYKlMr1Y321QZ/vfwBijPqm+rF4Wc7PjE9QllurGVeoV5gRNHsAm9fnMom3qrKPoTjKdMXaYyrFygEWQ72XWW24qhPu8xcUc2UU6O8wFPjmK7jhgPHAuMJGUGQ6U6WwE5sfzTXGvei7KA9hFOiR9D/wOfFVFt4dS2tpfRe83Ur7/CPiJakfOGgBCypubatArl2r8VfOax/LfzABKtePAzHO/5FgC7KBEzB2kOrDfUm8mOeFySv9+OyFyGmB/5aQH+C9BVKmVCNuMZgAAAABJRU5ErkJggg==)}.editor #SidePanel .childObject .ui{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAADjElEQVRYhe2YTWhdRRTHf+lLTFRCkjaLILgIKoIBRRfaSmMFQSsoIrrRuhEqfnTTtV20qHUllIBWcKNQxG4EJWoVEUxKqV8blXYlYv0utr7UtkaN9dfFTMzNfXM/8hJeI/iHYV7OOTP3d+89M3NuulRWs9ZcaIAq/Q+4XJUB3gDsA74BZoDPgaeAdStw3SHgdeD2ykg11baoZ03rS/XKgnGD6niBLxszFedqqpvK4lPG69U/4gTvqneo16lb1e+j/SO1LzF2SD2pbqsBN69SyJTxtTjwPbU75xuLAKr3Zy46FNuoeib6n6kBVwmZAvwuDrqt4K72Rv8LakP9Wv01tqb6T+bCr6rD6og6XQA3rxl1c/56qUXSH/ufCtL229gPxH40Jv0QMAh0ZWIfBG4CNgLjFcthANiWN3YnAn+IweuBown/xtgfAwReAS6NtouAO2P/O/AY8Hb07YqtSNPAwy3WxCt8Oj7yY+q1Od+j6rnovzExtqH+qR5Xb034dxW83ilDjtbKwXXqkTiwqb6o7lDfykw4kZosk2tjBX7UnTm4D4vgigBRr1APFtzthNpTMK5P7S+By0MeLINT6dLCaqYHuAfYFHPsR2AS+Lgkj5aih4ADwMmyoDLAeTUIR9KBleEC4BJgDugFzhIWW1J1ioV9wDuEO14pPQ8cB75gYbtKqgpwN/BA/P0ScMuy0YIGCPvmMIv3zRaVAT4OPJn5+2JCBTK2XDrC6wX4O7ZCFQGOAzuBUyzkx19AH7AXWNsGVC8wQnhyfdHWRXiKw4RTqFUFy3vQcIaOxr1Q9Q1DQTCi9tbYSvJtbdzzThs2cw3n9oz6swVlWtWk/YYiQHV/G1D5do36S+vW6hNFY6oWSTcL53VPG681r6PAfcBsxvYsIW2SqgIUOAE0Cfm4EpoGHom/9wM7yoLrbNRrCMl8btloi7UZeL9q3hTgyyyUTxC2AQmgjYz9MLCnDbANwF3AZYRTZAp4k7BLtCqRmHOJJE5pcokLpNdQGaV0SL2q7iI5XfNJzFaHLNIeQgGb0s2EQmQ47+jUh/t6wslUpquB7XljpwDvbTeuU4CjNeNG8oZOATZrxp3JGzoF+EHNuMN5Q6cAJ4FPKmLmgOfyxhRg6ls5pUZ1yL+aBbYAR0r8W4HP6sCcoKKIjFrq2fwV4QNsO3A3cDnwG3AImAA+TQ2qcxZfUP2n/8O6KrTqAc8D9emWHC8oT9IAAAAASUVORK5CYII=)}.editor #SidePanel .childObject .utils{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAADFElEQVRYhe2YT0hVQRSHf7YwsUVoakFtKmhdUfhUeLSrrFVQEES72rip1EoscFlLK2jRpl21tT8QhFkLq13gIotqlaRPQ8SkgvRrcefiOO/eufN8LzPwwMV375w5893fnHPm+aoArWZb968BsmwNsFz7rwHzkgYltVdgnRpJZyU9lTQm6ZukUUl9GQwSkHS1AgUimwduAHUpvlnXLmCYYpsFDmXNT3p4AJhICDgC7C0RbgvwISHWGNASEiPpYdLbxvYJ2FQC4F1rbj/w1nx+ERoj6WE78NsDeSIw+E7gh5kzYJ5dM/dzwFbH/yDQ58ZJStAnkm570rY+sDDaTHEgqd88GzJ/ayWdk7Td3Ock3Zd0OrRINgKjKQq+ApoCFOw0/j8tteqAaSvWd6LtjgtyKkRBSZqRdFLS+4SxnKQBSU0ZCsaHfLXlOy3plqRxc79BUTtrNPe/QhWU9cbHgQ7gTYKSm1Pm5YAvlm+bM15PlOvXWSwcgGdurFJaRpOBsu010Oj4tVhbBtAFVHni3rR8z5QDKKNYEmSsZI6lPbTbmZ8HdgPbgMNE1R3bMFBbLqCABgNl20vgmAN30ZnXRXQqzbPYfmIbAXYkrbccwLTtts1VrjvFbxa4Q3GalA0Yb/fzALgua2zcjHcDp0hRrVKAAo4CCx64XmtsksDzt1KAbitx4a5YY1+BPctZZ7lwzfgLwlZuxQFb8LcSW7k5FlNgRbY4R5ToIXATREp3OM9a/xZgjqUnhG9bZ4D91linNTZpYlUU0IVzlbMBIGrE5z0+hVAlQ3POt63uwnZ+XvL4ThCQk5VUbhLYR1StNmSPM+eCM8erZBacr1rtE8JVw21Dlz0vVsCTk2lwDcBnE2CB4oKwz9YCyVvltqOkLw9xC/pIyj9jaYBHrMC9Hris3pYzPmmQPdZYeymAeWviPaAmAS4oyT1KrjexY8uXAlgNPLImP2BpnwtuExakXWxXHbjHZs2SiqQeGKTYpgKVy9ru2IbMWiVXcQxpfy1/t0y4+Go2MWJ7SMYvFVWw9hNwWbYGWK6tesA/ap/6uHJWeiAAAAAASUVORK5CYII=)}.editor .header .dropdown{color:#fff;display:inline-block;margin-right:1px;text-align:left;height:fit-content;min-width:auto;width:max-content}.editor .header .dropdown button{backdrop-filter:blur(2px);background-color:#222c;border:none;color:#ffffff80;font-size:12px;padding:5px 10px;position:relative;text-align:left;min-width:22px;width:100%;height:32px;transition:all .2s linear}.editor .header .dropdown button:hover{background-color:#333c;color:#fff}.editor .header .dropdown button.svg{line-height:0;width:32px}.editor .header .dropdown p{background-color:#222c;display:inline-block;height:22px;margin:0;min-width:22px;padding:5px}.editor .header .dropdown svg{position:relative;left:50%;transform:translate(-50%)}.editor .header .dropdown ul{list-style:none;margin:0;margin-block:0;padding-inline:0;position:absolute;width:max-content}.editor .header .dropdown ul li{border-top:1px solid rgba(17,17,17,.9);display:block;position:relative}.editor .header .dropdown ul li.selected button{background-color:#444c}.editor .header .dropdown ul li.selected button:hover{background-color:#555c}.editor .header .dropdown.subdropdown{min-width:100%}.editor .header .dropdown.subdropdown ul{border-left:1px solid rgba(17,17,17,.9);left:100%;top:-1px}.editor .header .draggable li{cursor:grab;transition:transform .25s ease-out}.editor .header .draggable li.dragging{transform:scale(1.1)}.editor .header .draggable li.dragging div{background-color:#404040}.editor .header .draggable li div{background-color:#222c;line-height:14px;padding:5px 10px;transition:background-color .25s linear}.editor .header .draggable li div:hover{background-color:#333c}.editor .header .draggable li div span{font-size:12px;margin:0 15px 0 10px;padding:0 5px}.editor .header .draggable li div .dragIcon{position:absolute;left:10px}.editor .header .draggable li div .closeIcon{background-color:transparent;padding:0;position:absolute;right:5px;top:50%;min-width:14px;width:14px;height:14px;transform:translateY(-50%);visibility:inherit}.editor .header .draggable li div .closeIcon svg{background-color:transparent;left:0;position:relative}.editor{font-family:Arial,Helvetica,sans-serif;font-size:12px;left:0;pointer-events:none;position:absolute;top:0;width:100%;height:100%;z-index:100}.editor button{background:none;border:none;color:#fff;display:inline-block;margin:0;padding:0;text-align:left}.editor .header{display:inline-block;pointer-events:visible;position:relative;left:130px;z-index:101}.editor .footer{position:absolute;right:5px;bottom:0}.fsAbsolute{position:absolute;inset:0}.absoluteCenter{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%)}.hidden{display:none;visibility:hidden}.hideText{text-indent:-9999px;white-space:nowrap}
|
package/dist/hermes.es.js
CHANGED
@@ -1048,25 +1048,23 @@ function TP(a, e, t) {
|
|
1048
1048
|
}
|
1049
1049
|
async function SP() {
|
1050
1050
|
for (; !document.getElementById("theatrejs-studio-root"); )
|
1051
|
-
await new Promise((
|
1051
|
+
await new Promise((s) => setTimeout(s, 100));
|
1052
1052
|
const a = document.getElementById("theatrejs-studio-root");
|
1053
1053
|
if (a === null || a.shadowRoot === null) return;
|
1054
1054
|
const e = a.shadowRoot.getElementById("pointer-root");
|
1055
1055
|
if (e === null) return;
|
1056
1056
|
const t = e.children[0];
|
1057
|
-
if (t
|
1058
|
-
|
1059
|
-
|
1060
|
-
|
1061
|
-
|
1062
|
-
|
1063
|
-
|
1064
|
-
|
1065
|
-
|
1066
|
-
|
1067
|
-
|
1068
|
-
i.style.top = "0", i.style.right = "300px";
|
1069
|
-
} catch {
|
1057
|
+
if (t !== null) {
|
1058
|
+
try {
|
1059
|
+
const i = t.children[1].children[1];
|
1060
|
+
i.parentElement?.removeChild(i);
|
1061
|
+
} catch {
|
1062
|
+
}
|
1063
|
+
try {
|
1064
|
+
const s = t.children[3];
|
1065
|
+
s.style.top = "0", s.style.right = "300px";
|
1066
|
+
} catch {
|
1067
|
+
}
|
1070
1068
|
}
|
1071
1069
|
}
|
1072
1070
|
function T_(a, e, t, s, i) {
|
@@ -1093,9 +1091,6 @@ class vP extends Su {
|
|
1093
1091
|
sheetObjectUnsubscribe = /* @__PURE__ */ new Map();
|
1094
1092
|
activeSheet;
|
1095
1093
|
studio = void 0;
|
1096
|
-
constructor(e) {
|
1097
|
-
super(e), window.RemoteTheatre = this;
|
1098
|
-
}
|
1099
1094
|
dispose() {
|
1100
1095
|
this.project = void 0, this.sheets = /* @__PURE__ */ new Map(), this.sheetObjects = /* @__PURE__ */ new Map(), this.sheetObjectCBs = /* @__PURE__ */ new Map(), this.sheetObjectUnsubscribe = /* @__PURE__ */ new Map();
|
1101
1096
|
}
|
@@ -1529,10 +1524,8 @@ class wP extends Su {
|
|
1529
1524
|
scenes = /* @__PURE__ */ new Map();
|
1530
1525
|
renderer = void 0;
|
1531
1526
|
renderTargets = /* @__PURE__ */ new Map();
|
1527
|
+
renderTargetsResize = /* @__PURE__ */ new Map();
|
1532
1528
|
groups = /* @__PURE__ */ new Map();
|
1533
|
-
constructor(e) {
|
1534
|
-
super(e), window.RemoteThree = this;
|
1535
|
-
}
|
1536
1529
|
dispose() {
|
1537
1530
|
this.scenes.forEach((e) => {
|
1538
1531
|
Li(e);
|
@@ -1801,14 +1794,17 @@ class wP extends Su {
|
|
1801
1794
|
}
|
1802
1795
|
}
|
1803
1796
|
// Renderer
|
1804
|
-
addRT(e, t) {
|
1805
|
-
const
|
1806
|
-
|
1797
|
+
addRT(e, t = !0, s) {
|
1798
|
+
const i = new Fm(32, 32, s);
|
1799
|
+
i.texture.name = e, this.renderTargets.set(e, i), this.renderTargetsResize.set(e, t);
|
1800
|
+
}
|
1801
|
+
removeRT(e) {
|
1802
|
+
this.renderTargets.delete(e), this.renderTargetsResize.delete(e);
|
1807
1803
|
}
|
1808
1804
|
resize(e, t) {
|
1809
1805
|
const s = this.dpr;
|
1810
|
-
this.renderTargets.forEach((n) => {
|
1811
|
-
n.setSize(e * s, t * s);
|
1806
|
+
this.renderTargets.forEach((n, r) => {
|
1807
|
+
this.renderTargetsResize.get(r) && n.setSize(e * s, t * s);
|
1812
1808
|
});
|
1813
1809
|
const i = !(this.renderer?.domElement instanceof OffscreenCanvas);
|
1814
1810
|
this.renderer?.setSize(e, t, i);
|
package/package.json
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
"module": "./dist/hermes.esm.js",
|
8
8
|
"types": "./types/index.d.ts",
|
9
9
|
"type": "module",
|
10
|
-
"version": "0.0.
|
10
|
+
"version": "0.0.148",
|
11
11
|
"homepage": "https://github.com/tomorrowevening/hermes#readme",
|
12
12
|
"bugs": {
|
13
13
|
"url": "https://github.com/tomorrowevening/hermes/issues"
|
@@ -1,34 +1,32 @@
|
|
1
|
-
import { IProject, ISheet, ISheetObject } from '@theatre/core';
|
2
|
-
import BaseRemote from './BaseRemote';
|
3
|
-
import { BroadcastData, DataUpdateCallback, VoidCallback } from '../types';
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
}
|
34
|
-
export {};
|
1
|
+
import { IProject, ISheet, ISheetObject } from '@theatre/core';
|
2
|
+
import BaseRemote from './BaseRemote';
|
3
|
+
import { BroadcastData, DataUpdateCallback, VoidCallback } from '../types';
|
4
|
+
type KeyframeVector = {
|
5
|
+
position: number;
|
6
|
+
x: number;
|
7
|
+
y: number;
|
8
|
+
z: number;
|
9
|
+
};
|
10
|
+
export default class RemoteTheatre extends BaseRemote {
|
11
|
+
project: IProject | undefined;
|
12
|
+
sheets: Map<string, ISheet>;
|
13
|
+
sheetObjects: Map<string, ISheetObject>;
|
14
|
+
sheetObjectCBs: Map<string, DataUpdateCallback>;
|
15
|
+
sheetObjectUnsubscribe: Map<string, VoidCallback>;
|
16
|
+
activeSheet: ISheet | undefined;
|
17
|
+
studio: any;
|
18
|
+
dispose(): void;
|
19
|
+
getSheetInstance(name: string, instanceId?: string): string;
|
20
|
+
sheet(name: string, instanceId?: string): ISheet | undefined;
|
21
|
+
playSheet(name: string, params?: any, instanceId?: string): Promise<boolean>;
|
22
|
+
pauseSheet(name: string, instanceId?: string): void;
|
23
|
+
clearSheetObjects(sheetName: string): void;
|
24
|
+
sheetObject(sheetName: string, key: string, props: any, onUpdate?: DataUpdateCallback, instanceId?: string): ISheetObject | undefined;
|
25
|
+
getSheetObjectKeyframes(sheetName: string, sheetObject: string, prop: string): any[];
|
26
|
+
getSheetObjectVectors(sheetName: string, sheetObject: string): KeyframeVector[];
|
27
|
+
unsubscribe(sheetObject: ISheetObject): undefined;
|
28
|
+
handleApp(msg: BroadcastData): void;
|
29
|
+
handleEditor(msg: BroadcastData): void;
|
30
|
+
handleEditorApp(): void;
|
31
|
+
}
|
32
|
+
export {};
|
@@ -1,43 +1,43 @@
|
|
1
|
-
import { Camera, Curve, RenderTargetOptions, Scene, WebGLRenderTarget } from 'three';
|
2
|
-
import
|
3
|
-
import
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
private groups;
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
resize(width: number, height: number): void;
|
39
|
-
set dpr(value: number);
|
40
|
-
get dpr(): number;
|
41
|
-
get width(): number;
|
42
|
-
get height(): number;
|
43
|
-
}
|
1
|
+
import { Camera, Curve, RenderTargetOptions, Scene, WebGLRenderTarget } from 'three';
|
2
|
+
import BaseRemote from './BaseRemote';
|
3
|
+
import { BroadcastData, GroupData } from '../types';
|
4
|
+
export default class RemoteThree extends BaseRemote {
|
5
|
+
canvas: HTMLCanvasElement | null;
|
6
|
+
inputElement: any;
|
7
|
+
scene?: Scene;
|
8
|
+
scenes: Map<string, Scene>;
|
9
|
+
renderer?: any;
|
10
|
+
renderTargets: Map<string, WebGLRenderTarget>;
|
11
|
+
private renderTargetsResize;
|
12
|
+
private groups;
|
13
|
+
dispose(): void;
|
14
|
+
getObject(uuid: string): void;
|
15
|
+
setObject(value: any): void;
|
16
|
+
requestMethod(uuid: string, key: string, value?: any, subitem?: string): void;
|
17
|
+
updateObject(uuid: string, key: string, value: any): void;
|
18
|
+
createTexture(uuid: string, key: string, value: any): void;
|
19
|
+
addGroup(data: GroupData): void;
|
20
|
+
removeGroup(name: string): void;
|
21
|
+
updateGroup(group: string, prop: string, value: any): void;
|
22
|
+
removeAllGroups(): void;
|
23
|
+
addSpline(spline: Curve<any>): void;
|
24
|
+
setRenderer(value: any, inputElement?: any): void;
|
25
|
+
updateRenderer(data: any): void;
|
26
|
+
addScene(value: Scene): void;
|
27
|
+
refreshScene(value: string): void;
|
28
|
+
removeScene(value: Scene): void;
|
29
|
+
removeAllScenes(): void;
|
30
|
+
getScene(uuid: string): Scene | null;
|
31
|
+
setScene(value: Scene): void;
|
32
|
+
addCamera(camera: Camera): void;
|
33
|
+
removeCamera(camera: Camera): void;
|
34
|
+
handleApp(msg: BroadcastData): void;
|
35
|
+
handleEditor(msg: BroadcastData): void;
|
36
|
+
addRT(name: string, resize?: boolean, params?: RenderTargetOptions): void;
|
37
|
+
removeRT(name: string): void;
|
38
|
+
resize(width: number, height: number): void;
|
39
|
+
set dpr(value: number);
|
40
|
+
get dpr(): number;
|
41
|
+
get width(): number;
|
42
|
+
get height(): number;
|
43
|
+
}
|
@@ -1,125 +1,125 @@
|
|
1
|
-
import { Component, ReactNode } from 'react';
|
2
|
-
import { Camera, Group, Object3D, OrthographicCamera, PerspectiveCamera, Scene, WebGLRenderer } from 'three';
|
3
|
-
import WebGPURenderer from 'three/src/renderers/webgpu/WebGPURenderer';
|
4
|
-
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
|
5
|
-
import RemoteThree from '@/core/remote/RemoteThree';
|
6
|
-
import { InteractionMode, MultiViewMode } from './MultiViewData';
|
7
|
-
import { Application } from '@/core/Application';
|
8
|
-
import './MultiView.scss';
|
9
|
-
type MultiViewProps = {
|
10
|
-
app: Application;
|
11
|
-
three: RemoteThree;
|
12
|
-
scenes: Map<string, any>;
|
13
|
-
onSceneSet?: (scene: Scene) => void;
|
14
|
-
onSceneUpdate?: (scene: Scene) => void;
|
15
|
-
onSceneResize?: (scene: Scene, width: number, height: number) => void;
|
16
|
-
};
|
17
|
-
type MultiViewState = {
|
18
|
-
mode: MultiViewMode;
|
19
|
-
modeOpen: boolean;
|
20
|
-
renderModeOpen: boolean;
|
21
|
-
interactionMode: InteractionMode;
|
22
|
-
interactionModeOpen: boolean;
|
23
|
-
lastUpdate: number;
|
24
|
-
};
|
25
|
-
export default class MultiView extends Component<MultiViewProps, MultiViewState> {
|
26
|
-
static instance: MultiView | null;
|
27
|
-
app: Application;
|
28
|
-
scene: Scene;
|
29
|
-
renderer?: WebGLRenderer | WebGPURenderer | null;
|
30
|
-
currentScene?: Scene;
|
31
|
-
scenes: Map<string, Scene>;
|
32
|
-
cameras: Map<string, Camera>;
|
33
|
-
controls: Map<string, OrbitControls>;
|
34
|
-
currentCamera: PerspectiveCamera | OrthographicCamera;
|
35
|
-
currentWindow: any;
|
36
|
-
helpersContainer: Group<import("three").Object3DEventMap>;
|
37
|
-
private cameraHelpers;
|
38
|
-
private lightHelpers;
|
39
|
-
private grid;
|
40
|
-
private interactionHelper;
|
41
|
-
private currentTransform?;
|
42
|
-
private splineEditor;
|
43
|
-
private depthMaterial;
|
44
|
-
private normalsMaterial;
|
45
|
-
private uvMaterial;
|
46
|
-
private wireframeMaterial;
|
47
|
-
private playing;
|
48
|
-
private rafID;
|
49
|
-
private cameraControlsRafID;
|
50
|
-
private width;
|
51
|
-
private height;
|
52
|
-
private tlCam;
|
53
|
-
private trCam;
|
54
|
-
private blCam;
|
55
|
-
private brCam;
|
56
|
-
private tlRender;
|
57
|
-
private trRender;
|
58
|
-
private blRender;
|
59
|
-
private brRender;
|
60
|
-
private cameraVisibility;
|
61
|
-
private lightVisibility;
|
62
|
-
private gridVisibility;
|
63
|
-
selectedItem: Object3D | undefined;
|
64
|
-
private debugCamera;
|
65
|
-
private raycaster;
|
66
|
-
private pointer;
|
67
|
-
private cameraControls;
|
68
|
-
private canvasRef;
|
69
|
-
private containerRef;
|
70
|
-
private tlWindow;
|
71
|
-
private trWindow;
|
72
|
-
private blWindow;
|
73
|
-
private brWindow;
|
74
|
-
constructor(props: MultiViewProps);
|
75
|
-
componentDidMount(): void;
|
76
|
-
componentDidUpdate(prevProps: Readonly<MultiViewProps>, prevState: Readonly<MultiViewState>, snapshot?: any): void;
|
77
|
-
componentWillUnmount(): void;
|
78
|
-
render(): ReactNode;
|
79
|
-
private setupRenderer;
|
80
|
-
private setupScene;
|
81
|
-
private setupTools;
|
82
|
-
play(): void;
|
83
|
-
pause(): void;
|
84
|
-
toggleOrbitControls(value: boolean): void;
|
85
|
-
private update;
|
86
|
-
private draw;
|
87
|
-
private onUpdate;
|
88
|
-
private enable;
|
89
|
-
private disable;
|
90
|
-
private resize;
|
91
|
-
private addScene;
|
92
|
-
private sceneUpdate;
|
93
|
-
private addCamera;
|
94
|
-
private removeCamera;
|
95
|
-
private onMouseMove;
|
96
|
-
private onClick;
|
97
|
-
private onKey;
|
98
|
-
private onSetSelectedItem;
|
99
|
-
private updateSelectedItemHelper;
|
100
|
-
private onUpdateTransform;
|
101
|
-
private clearLightHelpers;
|
102
|
-
private addLightHelpers;
|
103
|
-
private createControls;
|
104
|
-
private clearCamera;
|
105
|
-
private killControls;
|
106
|
-
private assignControls;
|
107
|
-
private updateCamera;
|
108
|
-
private updateCameraControls;
|
109
|
-
private clearControls;
|
110
|
-
private saveExpandedCameraVisibility;
|
111
|
-
private saveExpandedLightVisibility;
|
112
|
-
private saveExpandedGridVisibility;
|
113
|
-
private getSceneOverride;
|
114
|
-
private drawTo;
|
115
|
-
private drawSingle;
|
116
|
-
private drawDouble;
|
117
|
-
private drawQuad;
|
118
|
-
get appID(): string;
|
119
|
-
get mode(): MultiViewMode;
|
120
|
-
get three(): RemoteThree;
|
121
|
-
get expandedCameraVisibility(): string;
|
122
|
-
get expandedLightVisibility(): string;
|
123
|
-
get expandedGridVisibility(): string;
|
124
|
-
}
|
125
|
-
export {};
|
1
|
+
import { Component, ReactNode } from 'react';
|
2
|
+
import { Camera, Group, Object3D, OrthographicCamera, PerspectiveCamera, Scene, WebGLRenderer } from 'three';
|
3
|
+
import WebGPURenderer from 'three/src/renderers/webgpu/WebGPURenderer';
|
4
|
+
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
|
5
|
+
import RemoteThree from '@/core/remote/RemoteThree';
|
6
|
+
import { InteractionMode, MultiViewMode } from './MultiViewData';
|
7
|
+
import { Application } from '@/core/Application';
|
8
|
+
import './MultiView.scss';
|
9
|
+
type MultiViewProps = {
|
10
|
+
app: Application;
|
11
|
+
three: RemoteThree;
|
12
|
+
scenes: Map<string, any>;
|
13
|
+
onSceneSet?: (scene: Scene) => void;
|
14
|
+
onSceneUpdate?: (scene: Scene) => void;
|
15
|
+
onSceneResize?: (scene: Scene, width: number, height: number) => void;
|
16
|
+
};
|
17
|
+
type MultiViewState = {
|
18
|
+
mode: MultiViewMode;
|
19
|
+
modeOpen: boolean;
|
20
|
+
renderModeOpen: boolean;
|
21
|
+
interactionMode: InteractionMode;
|
22
|
+
interactionModeOpen: boolean;
|
23
|
+
lastUpdate: number;
|
24
|
+
};
|
25
|
+
export default class MultiView extends Component<MultiViewProps, MultiViewState> {
|
26
|
+
static instance: MultiView | null;
|
27
|
+
app: Application;
|
28
|
+
scene: Scene;
|
29
|
+
renderer?: WebGLRenderer | WebGPURenderer | null;
|
30
|
+
currentScene?: Scene;
|
31
|
+
scenes: Map<string, Scene>;
|
32
|
+
cameras: Map<string, Camera>;
|
33
|
+
controls: Map<string, OrbitControls>;
|
34
|
+
currentCamera: PerspectiveCamera | OrthographicCamera;
|
35
|
+
currentWindow: any;
|
36
|
+
helpersContainer: Group<import("three").Object3DEventMap>;
|
37
|
+
private cameraHelpers;
|
38
|
+
private lightHelpers;
|
39
|
+
private grid;
|
40
|
+
private interactionHelper;
|
41
|
+
private currentTransform?;
|
42
|
+
private splineEditor;
|
43
|
+
private depthMaterial;
|
44
|
+
private normalsMaterial;
|
45
|
+
private uvMaterial;
|
46
|
+
private wireframeMaterial;
|
47
|
+
private playing;
|
48
|
+
private rafID;
|
49
|
+
private cameraControlsRafID;
|
50
|
+
private width;
|
51
|
+
private height;
|
52
|
+
private tlCam;
|
53
|
+
private trCam;
|
54
|
+
private blCam;
|
55
|
+
private brCam;
|
56
|
+
private tlRender;
|
57
|
+
private trRender;
|
58
|
+
private blRender;
|
59
|
+
private brRender;
|
60
|
+
private cameraVisibility;
|
61
|
+
private lightVisibility;
|
62
|
+
private gridVisibility;
|
63
|
+
selectedItem: Object3D | undefined;
|
64
|
+
private debugCamera;
|
65
|
+
private raycaster;
|
66
|
+
private pointer;
|
67
|
+
private cameraControls;
|
68
|
+
private canvasRef;
|
69
|
+
private containerRef;
|
70
|
+
private tlWindow;
|
71
|
+
private trWindow;
|
72
|
+
private blWindow;
|
73
|
+
private brWindow;
|
74
|
+
constructor(props: MultiViewProps);
|
75
|
+
componentDidMount(): void;
|
76
|
+
componentDidUpdate(prevProps: Readonly<MultiViewProps>, prevState: Readonly<MultiViewState>, snapshot?: any): void;
|
77
|
+
componentWillUnmount(): void;
|
78
|
+
render(): ReactNode;
|
79
|
+
private setupRenderer;
|
80
|
+
private setupScene;
|
81
|
+
private setupTools;
|
82
|
+
play(): void;
|
83
|
+
pause(): void;
|
84
|
+
toggleOrbitControls(value: boolean): void;
|
85
|
+
private update;
|
86
|
+
private draw;
|
87
|
+
private onUpdate;
|
88
|
+
private enable;
|
89
|
+
private disable;
|
90
|
+
private resize;
|
91
|
+
private addScene;
|
92
|
+
private sceneUpdate;
|
93
|
+
private addCamera;
|
94
|
+
private removeCamera;
|
95
|
+
private onMouseMove;
|
96
|
+
private onClick;
|
97
|
+
private onKey;
|
98
|
+
private onSetSelectedItem;
|
99
|
+
private updateSelectedItemHelper;
|
100
|
+
private onUpdateTransform;
|
101
|
+
private clearLightHelpers;
|
102
|
+
private addLightHelpers;
|
103
|
+
private createControls;
|
104
|
+
private clearCamera;
|
105
|
+
private killControls;
|
106
|
+
private assignControls;
|
107
|
+
private updateCamera;
|
108
|
+
private updateCameraControls;
|
109
|
+
private clearControls;
|
110
|
+
private saveExpandedCameraVisibility;
|
111
|
+
private saveExpandedLightVisibility;
|
112
|
+
private saveExpandedGridVisibility;
|
113
|
+
private getSceneOverride;
|
114
|
+
private drawTo;
|
115
|
+
private drawSingle;
|
116
|
+
private drawDouble;
|
117
|
+
private drawQuad;
|
118
|
+
get appID(): string;
|
119
|
+
get mode(): MultiViewMode;
|
120
|
+
get three(): RemoteThree;
|
121
|
+
get expandedCameraVisibility(): string;
|
122
|
+
get expandedLightVisibility(): string;
|
123
|
+
get expandedGridVisibility(): string;
|
124
|
+
}
|
125
|
+
export {};
|