@tomorrowevening/hermes 0.0.99 → 0.0.100
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/hermes.cjs.js +16 -16
- package/dist/hermes.es.js +3827 -3000
- package/dist/style.css +1 -1
- package/package.json +4 -4
- package/types/core/remote/RemoteThree.d.ts +38 -38
- package/types/editor/global.d.ts +25 -25
- package/types/editor/multiView/MultiView.d.ts +107 -12
- package/types/editor/sidePanel/DebugData.d.ts +23 -0
- package/types/editor/sidePanel/inspector/InspectorGroup.d.ts +8 -7
- package/types/editor/sidePanel/inspector/utils/InspectTransform.d.ts +23 -3
- package/types/editor/tools/Transform.d.ts +22 -0
- package/types/editor/utils.d.ts +31 -30
package/dist/hermes.cjs.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("three"),T=require("react"),qi=require("framer-motion"),Ci=()=>{},gn=()=>{};function Nt(i){return i.substring(0,1).toUpperCase()+i.substring(1)}function ct(i,e,n){return Math.min(e,Math.max(i,n))}function gi(i,e,n){return(n-i)/(e-i)}function Qt(i,e,n){return i*(1-n)+e*n}function _n(i,e){const n=i-e;return Math.sqrt(n*n)}function Ji(){return Math.round(Math.random()*1e6).toString()}function Qi(i){return i.r!==void 0&&i.g!==void 0&&i.b!==void 0}function _i(i){const e=Math.round(i.r*255),n=Math.round(i.g*255),t=Math.round(i.b*255),s=d=>{const c=d.toString(16);return c.length===1?"0"+c:c},r=s(e),o=s(n),a=s(t);return"#"+r+o+a}function vi(i,e=1){return Number(i.toFixed(e))}exports.totalThreeObjects=0;const yi=()=>{exports.totalThreeObjects=0},ei=i=>{if(!i)return;let e=i.name.replaceAll(" ","").replaceAll("/",".");if(e.length===0&&(e=`obj_${exports.totalThreeObjects}`,exports.totalThreeObjects++),i.parent!==null&&i.parent.uuid.length>0&&(e=`${i.parent.uuid}.${e}`),i.uuid=e,i.isMesh!==void 0){const n=i;if(Array.isArray(n.material))n.material.forEach((t,s)=>{t.uuid=`${e}.material.${s}`});else{const t=n.material;t.uuid=`${e}.material`}}i.children.forEach(n=>ei(n))},vn=i=>{i?.dispose()},en=i=>{i&&(Array.isArray(i)?i.forEach(e=>e.dispose()):i.dispose())},zt=i=>{if(i){for(;i.children.length>0;){const e=i.children[0];e.type==="Audio"?(e.pause(),e.parent&&e.parent.remove(e)):zt(e)}if(i.parent&&i.parent.remove(i),i.isMesh){const e=i;e.geometry?.dispose(),en(e.material)}i.dispose!==void 0&&i.dispose()}};class jt{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 n=e.repeat.clone(),t=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 s=e.image;if(s!=null&&s.width>0){this.canvas.title=e.sourceFile;const r=this.canvas.width/s.width,o=this.renderToCanvas(e);this.context.drawImage(o,0,0,s.width*r,s.height*r)}}return e.repeat.copy(n),e.offset.copy(t),this.canvas.toDataURL("image/png")}static renderToCanvas(e){if(this.material===null){this.camera=new f.OrthographicCamera(-.5,.5,.5,-.5,0,100),this.scene=new f.Scene,this.material=new f.MeshBasicMaterial;const n=new f.BufferGeometry;n.setAttribute("position",new f.Float32BufferAttribute([-.5,-.5,0,1.5,-.5,0,-.5,1.5,0],3)),n.setAttribute("normal",new f.Float32BufferAttribute([0,0,1,0,0,1],3)),n.setAttribute("uv",new f.Float32BufferAttribute([0,0,2,0,0,2],2));const t=new f.Mesh(n,this.material);this.scene.add(t)}if(e.isRenderTargetTexture)this.material.map=e,this.renderer.render(this.scene,this.camera);else{const n=this.renderer.outputColorSpace,t=e.colorSpace;this.renderer.outputColorSpace=f.LinearSRGBColorSpace,e.colorSpace=f.LinearSRGBColorSpace,this.material.map=e,this.renderer.render(this.scene,this.camera),this.renderer.outputColorSpace=n,e.colorSpace=t}return this.renderer.domElement}}class yn{components=new Map;listen;_appID="";_debugEnabled;_broadcastChannel=void 0;_webSocket=void 0;_mode="app";_connected=!1;_useBC=!1;constructor(e,n,t=!0){this._appID=e,this._debugEnabled=n,n&&(this._useBC=t,t?(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,n){this.components.set(e,n)}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=>{this.listen!==void 0&&(this._useBC?this.listen(e.data):this.listen(JSON.parse(e.data)))};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")}}var z=(i=>(i.CUSTOM="ToolEvents::custom",i.SELECT_DROPDOWN="ToolEvents::selectDropdown",i.DRAG_UPDATE="ToolEvents::dragUpdate",i.ADD_SCENE="ToolEvents::addScene",i.REFRESH_SCENE="ToolEvents::refreshScene",i.REMOVE_SCENE="ToolEvents::removeScene",i.SET_SCENE="ToolEvents::setScene",i.GET_OBJECT="ToolEvents::getObject",i.SET_OBJECT="ToolEvents::setObject",i.UPDATE_OBJECT="ToolEvents::updateObject",i.CREATE_TEXTURE="ToolEvents::createTexture",i.REQUEST_METHOD="ToolEvents::requestMethod",i.ADD_CAMERA="ToolEvents::addCamera",i.REMOVE_CAMERA="ToolEvents::removeCamera",i.ADD_GROUP="ToolEvents::addGroup",i.REMOVE_GROUP="ToolEvents::removeGroup",i))(z||{});const B=new f.EventDispatcher;class ii{app;constructor(e){this.app=e}dispose(){}handleApp(e,n,t){}handleEditor(e,n,t){}}class En extends ii{selectDropdown(e,n){this.app.send({event:"selectComponent",target:"app",data:{dropdown:e,value:n}})}updateDropdown(e,n){this.app.send({event:"draggableListUpdate",target:"app",data:{dropdown:e,value:n}})}handleApp(e,n,t){switch(t.event){case"selectComponent":B.dispatchEvent({type:z.SELECT_DROPDOWN,value:t.data});break;case"draggableListUpdate":B.dispatchEvent({type:z.DRAG_UPDATE,value:t.data});break}}}function On(i,e,n){if(i.editor){n.ui.restore(),n.onSelectionChange(o=>{o.length<1||o.forEach(a=>{let d=a.address.sheetId,c="setSheet",u={};switch(a.type){case"Theatre_Sheet_PublicAPI":c="setSheet",u={sheet:a.address.sheetId},e.activeSheet=e.sheets.get(a.address.sheetId);break;case"Theatre_SheetObject_PublicAPI":c="setSheetObject",d+=`_${a.address.objectKey}`,u={id:d,sheet:a.address.sheetId,key:a.address.objectKey},e.activeSheet=e.sheets.get(a.address.sheetId);break}i.send({event:c,target:"app",data:u})})});let t=-1;const s=()=>{if(e.activeSheet!==void 0&&t!==e.activeSheet.sequence.position){t=e.activeSheet.sequence.position;const o=e.activeSheet;i.send({event:"updateTimeline",target:"app",data:{position:t,sheet:o.address.sheetId}})}},r=()=>{s(),requestAnimationFrame(r)};s(),r()}else n.ui.hide()}function bn(){const i=document.getElementById("theatrejs-studio-root")?.shadowRoot?.getElementById("pointer-root")?.children[0],e=i?.children[1];e.style.justifyContent="left";const n=e.children[1];n.style.transform="translateX(10px)",n.removeChild(n.children[0]),n.removeChild(n.children[0]);const t=i?.children[3];t.style.top="0",t.style.right="300px"}class Ti extends ii{project;sheets=new Map;sheetObjects=new Map;sheetObjectCBs=new Map;sheetObjectUnsubscribe=new Map;activeSheet;studio=void 0;static rafDriver=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,n){return n!==void 0?`${e}-${n}`:e}sheet(e,n){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const t=this.getSheetInstance(e,n);let s=this.sheets.get(t);return s!==void 0||(s=this.project?.sheet(e,n),this.sheets.set(t,s)),s}playSheet(e,n,t){return this.app.send({event:"playSheet",target:"editor",data:{sheet:e,instance:t,value:n}}),new Promise(s=>{const r=n!==void 0?{...n}:{};r.rafDriver=Ti.rafDriver,this.sheet(e,t)?.sequence.play(r).then(o=>s(o))})}pauseSheet(e,n){this.sheet(e,n)?.sequence.pause(),this.app.send({event:"pauseSheet",target:"editor",data:{sheet:e,instance:n}})}clearSheetObjects(e){this.sheetObjects.forEach((n,t)=>{t.search(`${e}_`)>-1&&this.unsubscribe(n)})}sheetObject(e,n,t,s,r){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const o=this.sheet(e,r);if(o===void 0)return;const d=`${this.getSheetInstance(e,r)}_${n}`;let c=this.sheetObjects.get(d);c!==void 0?c=o.object(n,{...t,...c.value},{reconfigure:!0}):c=o.object(n,t),this.sheetObjects.set(d,c),this.sheetObjectCBs.set(d,s!==void 0?s:Ci);const u=c.onValuesChange(p=>{if(this.app.editor){for(const y in p){const A=p[y];typeof A=="object"&&Qi(A)&&(p[y]={r:A.r,g:A.g,b:A.b,a:A.a})}this.app.send({event:"updateSheetObject",target:"app",data:{sheet:e,sheetObject:d,values:p}})}const _=this.sheetObjectCBs.get(d);_!==void 0&&_(p)});return this.sheetObjectUnsubscribe.set(d,u),c}unsubscribe(e){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const n=e.address.sheetId,t=e.address.objectKey;this.sheets.get(n)?.detachObject(t);const r=`${n}_${t}`,o=this.sheetObjectUnsubscribe.get(r);o!==void 0&&(this.sheetObjects.delete(r),this.sheetObjectCBs.delete(r),this.sheetObjectUnsubscribe.delete(r),o())}handleApp(e,n,t){const s=n;let r;switch(t.event){case"setSheet":r=s.sheets.get(t.data.sheet),r!==void 0&&(s.activeSheet=r,this.studio?.setSelection([r]));break;case"setSheetObject":r=s.sheetObjects.get(`${t.data.sheet}_${t.data.key}`),r!==void 0&&this.studio?.setSelection([r]);break;case"updateSheetObject":r=s.sheets.get(t.data.sheet),r!==void 0&&r.sequence.pause(),r=s.sheetObjectCBs.get(t.data.sheetObject),r!==void 0&&r(t.data.values);break;case"updateTimeline":r=s.sheets.get(t.data.sheet),s.activeSheet!==void 0&&(s.activeSheet.sequence.position=t.data.position);break}}handleEditor(e,n,t){if(e.editor){const s=n;switch(t.event){case"playSheet":s.sheet(t.data.sheet,t.data.instance)?.sequence.play(t.data.value);break;case"pauseSheet":s.sheet(t.data.sheet,t.data.instance)?.sequence.pause();break}}}handleEditorApp(e,n){if(e.editor){this.studio?.ui.restore(),this.studio?.onSelectionChange(o=>{o.length<1||o.forEach(a=>{let d=a.address.sheetId,c="setSheet",u={};switch(a.type){case"Theatre_Sheet_PublicAPI":c="setSheet",u={sheet:a.address.sheetId},n.activeSheet=n.sheets.get(a.address.sheetId);break;case"Theatre_SheetObject_PublicAPI":c="setSheetObject",d+=`_${a.address.objectKey}`,u={id:d,sheet:a.address.sheetId,key:a.address.objectKey},n.activeSheet=n.sheets.get(a.address.sheetId);break}e.send({event:c,target:"app",data:u})})});let t=-1;const s=()=>{if(n.activeSheet!==void 0&&t!==n.activeSheet.sequence.position){t=n.activeSheet.sequence.position;const o=n.activeSheet;e.send({event:"updateTimeline",target:"app",data:{position:t,sheet:o.address.sheetId}})}},r=()=>{s(),requestAnimationFrame(r)};s(),r()}else this.studio?.ui.hide()}}function Cn(i){if(i.name==="cameras")return"camera";if(i.name==="interactive")return"interactive";if(i.name==="lights")return"light";if(i.name==="ui")return"ui";if(i.name==="utils")return"utils";const e=i.type;return e.search("Helper")>-1?"icon_utils":e.search("Camera")>-1?"camera":e.search("Light")>-1?"light":"obj3D"}function wt(i){const e={name:i.name,type:i.type,uuid:i.uuid,children:[]};return i.children.forEach(n=>{e.children.push(wt(n))}),e}function Tn(i){const e={};for(const n in i){const t=i[n].value;e[n]={value:t},t===null?e[n].value={src:"",offset:[0,0],repeat:[1,1]}:t!==void 0&&t.isTexture&&(e[n].value={src:t.image.src,offset:[t.offset.x,t.offset.y],repeat:[t.repeat.x,t.repeat.y]})}return e}function xn(i){switch(i){case"blendSrcAlpha":case"blendDstAlpha":case"blendEquationAlpha":case"clippingPlanes":case"shadowSide":case"precision":return!0}return!1}function Et(i){const e={};for(const n in i){if(n.substring(0,1)==="_"||n.substring(0,2)==="is"||xn(n))continue;const t=typeof i[n],s=i[n];switch(t){case"boolean":case"number":case"string":e[n]=s;break;case"object":s!==null?(e[n]=s,s.isTexture?e[n]={src:jt.renderToBlob(s),offset:[s.offset.x,s.offset.y],repeat:[s.repeat.x,s.repeat.y]}:n==="uniforms"&&(e[n]=Tn(e[n]))):n==="glslVersion"?e[n]="":e[n]={src:"",offset:[0,0],repeat:[1,1]};break}}return i.anisotropy!==void 0&&(e.anisotropy=i.anisotropy),i.clearcoat!==void 0&&(e.clearcoat=i.clearcoat),i.iridescence!==void 0&&(e.iridescence=i.iridescence),i.dispersion!==void 0&&(e.dispersion=i.dispersion),i.sheen!==void 0&&(e.sheen=i.sheen),i.transmission!==void 0&&(e.transmission=i.transmission),i.transmission!==void 0&&(e.transmission=i.transmission),e}function ai(i){i.updateMatrix();const e={name:i.name,type:i.type,uuid:i.uuid,visible:i.visible,matrix:i.matrix.elements,animations:[],material:void 0,perspectiveCameraInfo:void 0,orthographicCameraInfo:void 0,lightInfo:void 0,children:[]};i.animations.forEach(t=>{e.animations.push({name:t.name,duration:t.duration,blendMode:t.blendMode})});const n=i.type.toLowerCase();if(n.search("mesh")>-1){const t=i;if(Array.isArray(t.material)){const s=[];t.material.forEach(r=>{s.push(Et(r))}),e.material=s}else e.material=Et(t.material)}else if(n.search("points")>-1){const t=i;if(Array.isArray(t.material)){const s=[];t.material.forEach(r=>{s.push(Et(r))}),e.material=s}else e.material=Et(t.material)}else if(n.search("line")>-1){const t=i;if(Array.isArray(t.material)){const s=[];t.material.forEach(r=>{s.push(Et(r))}),e.material=s}else e.material=Et(t.material)}else n.search("camera")>-1?i.type==="PerspectiveCamera"?e.perspectiveCameraInfo={fov:i.fov,zoom:i.zoom,near:i.near,far:i.far,focus:i.focus,aspect:i.aspect,filmGauge:i.filmGauge,filmOffset:i.filmOffset}:i.type==="OrthographicCamera"&&(e.orthographicCameraInfo={zoom:i.zoom,near:i.near,far:i.far,left:i.left,right:i.right,top:i.top,bottom:i.bottom}):n.search("light")>-1&&(e.lightInfo={color:i.color,intensity:i.intensity,decay:i.decay,distance:i.distance,angle:i.angle,penumbra:i.penumbra,groundColor:i.groundColor,width:i.width,height:i.height});return e}function Sn(i,e){const n=e.split(".");switch(n.length){case 1:return i[n[0]];case 2:return i[n[0]][n[1]];case 3:return i[n[0]][n[1]][n[2]];case 4:return i[n[0]][n[1]][n[2]][n[3]];case 5:return i[n[0]][n[1]][n[2]][n[3]][n[4]];case 6:return i[n[0]][n[1]][n[2]][n[3]][n[4]][n[5]]}}function wn(i,e){for(const n in e)i[n]=e[n]}function pe(i,e,n){if(i===void 0)return;const t=e.split("."),s=t.length;if(typeof n!="object")switch(s){case 1:i[t[0]]=n;break;case 2:i[t[0]][t[1]]=n;break;case 3:i[t[0]][t[1]][t[2]]=n;break;case 4:i[t[0]][t[1]][t[2]][t[3]]=n;break;case 5:i[t[0]][t[1]][t[2]][t[3]][t[4]]=n;break}else{let o;switch(s){case 1:o=i[t[0]];break;case 2:o=i[t[0]][t[1]];break;case 3:o=i[t[0]][t[1]][t[2]];break;case 4:o=i[t[0]][t[1]][t[2]][t[3]];break;case 5:o=i[t[0]][t[1]][t[2]][t[3]][t[4]];break}o!=null&&wn(o,n)}}function tn(i){return new Promise((e,n)=>{const t=new Image;t.onload=()=>{const s=new f.Texture(t);s.wrapS=f.RepeatWrapping,s.wrapT=f.RepeatWrapping,s.needsUpdate=!0,e(s)},t.onerror=n,t.src=i})}class Mn extends ii{scene=void 0;scenes=new Map;renderer=void 0;renderTargets=new Map;groups=new Map;dispose(){this.scenes.forEach(e=>{zt(e)}),this.scenes.clear(),this.scene&&zt(this.scene),this.renderTargets.forEach(e=>{e.dispose()}),this.renderTargets.clear(),this.renderer?.dispose()}getObject(e){this.app.debugEnabled&&(this.renderer!==void 0&&(jt.renderer=this.renderer),this.app.send({event:"getObject",target:"app",data:e}))}setObject(e){this.renderer!==void 0&&(jt.renderer=this.renderer);const n=ai(e);this.app.send({event:"setObject",target:"editor",data:n})}requestMethod(e,n,t,s){this.app.send({event:"requestMethod",target:"app",data:{uuid:e,key:n,value:t,subitem:s}})}updateObject(e,n,t){this.app.send({event:"updateObject",target:"app",data:{uuid:e,key:n,value:t}})}createTexture(e,n,t){this.app.send({event:"createTexture",target:"app",data:{uuid:e,key:n,value:t}})}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,n,t){this.app.send({event:"updateGroup",target:"app",data:JSON.stringify({group:e,prop:n,value:t})})}removeAllGroups(){this.groups.forEach(e=>{const n=e.title;this.groups.delete(n),this.app.send({event:"removeGroup",target:"editor",data:n})}),this.groups.clear()}addScene(e){if(e===void 0||(this.scenes.set(e.name,e),!this.app.debugEnabled))return;yi(),ei(e);const n=wt(e);this.app.send({event:"addScene",target:"editor",data:n})}refreshScene(e){if(!this.app.debugEnabled)return;const n=this.scenes.get(e);if(n!==void 0){const t=wt(n);this.app.send({event:"refreshScene",target:"app",data:t})}}removeScene(e){if(e===void 0||(this.scenes.delete(e.name),!this.app.debugEnabled))return;const n=wt(e);this.app.send({event:"removeScene",target:"editor",data:n})}removeAllScenes(){this.scenes.forEach(e=>this.removeScene(e))}getScene(e){let n=null;return this.scenes.forEach((t,s)=>{e.search(s)>-1&&(n=t)}),n}setScene(e){if(e===void 0||(this.scene=e,!this.app.debugEnabled))return;this.renderer!==void 0&&(jt.renderer=this.renderer),yi(),ei(e);const n=wt(e);this.app.send({event:"setScene",target:"editor",data:n})}addCamera(e){if(!this.app.debugEnabled)return;const n=ai(e);this.app.send({event:"addCamera",target:"editor",data:n})}removeCamera(e){if(!this.app.debugEnabled)return;const n=ai(e);this.app.send({event:"removeCamera",target:"editor",data:n})}handleApp(e,n,t){const s=n;switch(t.event){case"getObject":B.dispatchEvent({type:z.GET_OBJECT,value:t.data});break;case"updateObject":B.dispatchEvent({type:z.UPDATE_OBJECT,value:t.data});break;case"createTexture":B.dispatchEvent({type:z.CREATE_TEXTURE,value:t.data});break;case"requestMethod":B.dispatchEvent({type:z.REQUEST_METHOD,value:t.data});break;case"refreshScene":e.send({event:"refreshScene",target:"editor",data:wt(s.scenes.get(t.data.name))});break}if(t.event==="updateGroup"){const r=JSON.parse(t.data);s.groups.get(r.group)?.onUpdate(r.prop,r.value)}}handleEditor(e,n,t){switch(t.event){case"setObject":B.dispatchEvent({type:z.SET_OBJECT,value:t.data});break;case"addScene":B.dispatchEvent({type:z.ADD_SCENE,value:t.data});break;case"refreshScene":B.dispatchEvent({type:z.REFRESH_SCENE,value:t.data});break;case"removeScene":B.dispatchEvent({type:z.REMOVE_SCENE,value:t.data});break;case"setScene":B.dispatchEvent({type:z.SET_SCENE,value:t.data});break;case"addCamera":B.dispatchEvent({type:z.ADD_CAMERA,value:t.data});break;case"removeCamera":B.dispatchEvent({type:z.REMOVE_CAMERA,value:t.data});break;case"addGroup":B.dispatchEvent({type:z.ADD_GROUP,value:t.data});break;case"removeGroup":B.dispatchEvent({type:z.REMOVE_GROUP,value:t.data});break}}addRT(e,n){const t=new f.WebGLRenderTarget(32,32,n);t.texture.name=e,this.renderTargets.set(e,t)}resize(e,n){const t=this.dpr;this.renderTargets.forEach(s=>{s.setSize(e*t,n*t)}),this.renderer?.setSize(e,n)}set dpr(e){this.renderer?.setPixelRatio(ct(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}get canvas(){return this.renderer!==void 0?this.renderer?.domElement:null}}var Ei={exports:{}},Rt={};/**
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("three"),w=require("react"),qi=require("framer-motion"),ai=()=>{},js=()=>{};function ht(i){return i.substring(0,1).toUpperCase()+i.substring(1)}function Fs(i){const e=JSON.stringify(i);return navigator.clipboard.writeText(e),e}function we(i,e,t){return Math.min(e,Math.max(i,t))}function Jt(i,e,t){return(t-i)/(e-i)}function Dt(i,e,t){return i*(1-t)+e*t}function zs(i,e){const t=i-e;return Math.sqrt(t*t)}function Ki(){return Math.round(Math.random()*1e6).toString()}function Ji(i){return i.r!==void 0&&i.g!==void 0&&i.b!==void 0}function ei(i){const e=Math.round(i.r*255),t=Math.round(i.g*255),s=Math.round(i.b*255),n=d=>{const h=d.toString(16);return h.length===1?"0"+h:h},a=n(e),r=n(t),l=n(s);return"#"+a+r+l}function ti(i,e=1){return Number(i.toFixed(e))}exports.totalThreeObjects=0;const ii=()=>{exports.totalThreeObjects=0},Rt=i=>{if(!i)return;let e=i.name.replaceAll(" ","").replaceAll("/",".");if(e.length===0&&(e=`obj_${exports.totalThreeObjects}`,exports.totalThreeObjects++),i.parent!==null&&i.parent.uuid.length>0&&(e=`${i.parent.uuid}.${e}`),i.uuid=e,i.isMesh!==void 0){const t=i;if(Array.isArray(t.material))t.material.forEach((s,n)=>{s.uuid=`${e}.material.${n}`});else{const s=t.material;s.uuid=`${e}.material`}}i.children.forEach(t=>Rt(t))},Ns=i=>{i?.dispose()},es=i=>{i&&(Array.isArray(i)?i.forEach(e=>e.dispose()):i.dispose())},We=i=>{if(i){for(;i.children.length>0;){const e=i.children[0];e.type==="Audio"?(e.pause(),e.parent&&e.parent.remove(e)):We(e)}if(i.parent&&i.parent.remove(i),i.isMesh){const e=i;e.geometry?.dispose(),es(e.material)}i.dispose!==void 0&&i.dispose()}};class ct{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 n=e.image;if(n!=null&&n.width>0){this.canvas.title=e.sourceFile;const a=this.canvas.width/n.width,r=this.renderToCanvas(e);this.context.drawImage(r,0,0,n.width*a,n.height*a)}}return e.repeat.copy(t),e.offset.copy(s),this.canvas.toDataURL("image/png")}static renderToCanvas(e){if(this.material===null){this.camera=new o.OrthographicCamera(-.5,.5,.5,-.5,0,100),this.scene=new o.Scene,this.material=new o.MeshBasicMaterial;const t=new o.BufferGeometry;t.setAttribute("position",new o.Float32BufferAttribute([-.5,-.5,0,1.5,-.5,0,-.5,1.5,0],3)),t.setAttribute("normal",new o.Float32BufferAttribute([0,0,1,0,0,1],3)),t.setAttribute("uv",new o.Float32BufferAttribute([0,0,2,0,0,2],2));const s=new o.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=o.LinearSRGBColorSpace,e.colorSpace=o.LinearSRGBColorSpace,this.material.map=e,this.renderer.render(this.scene,this.camera),this.renderer.outputColorSpace=t,e.colorSpace=s}return this.renderer.domElement}}class Hs{components=new Map;listen;_appID="";_debugEnabled;_broadcastChannel=void 0;_webSocket=void 0;_mode="app";_connected=!1;_useBC=!1;constructor(e,t,s=!0){this._appID=e,this._debugEnabled=t,t&&(this._useBC=s,s?(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=>{this.listen!==void 0&&(this._useBC?this.listen(e.data):this.listen(JSON.parse(e.data)))};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")}}var R=(i=>(i.CUSTOM="ToolEvents::custom",i.SELECT_DROPDOWN="ToolEvents::selectDropdown",i.DRAG_UPDATE="ToolEvents::dragUpdate",i.ADD_SCENE="ToolEvents::addScene",i.REFRESH_SCENE="ToolEvents::refreshScene",i.REMOVE_SCENE="ToolEvents::removeScene",i.SET_SCENE="ToolEvents::setScene",i.GET_OBJECT="ToolEvents::getObject",i.SET_OBJECT="ToolEvents::setObject",i.UPDATE_OBJECT="ToolEvents::updateObject",i.CREATE_TEXTURE="ToolEvents::createTexture",i.REQUEST_METHOD="ToolEvents::requestMethod",i.ADD_CAMERA="ToolEvents::addCamera",i.REMOVE_CAMERA="ToolEvents::removeCamera",i.ADD_GROUP="ToolEvents::addGroup",i.REMOVE_GROUP="ToolEvents::removeGroup",i))(R||{});const P=new o.EventDispatcher;class At{app;constructor(e){this.app=e}dispose(){}handleApp(e,t,s){}handleEditor(e,t,s){}}class Bs extends At{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,t,s){switch(s.event){case"selectComponent":P.dispatchEvent({type:R.SELECT_DROPDOWN,value:s.data});break;case"draggableListUpdate":P.dispatchEvent({type:R.DRAG_UPDATE,value:s.data});break}}}function Vs(i,e,t){if(i.editor){t.ui.restore(),t.onSelectionChange(r=>{r.length<1||r.forEach(l=>{let d=l.address.sheetId,h="setSheet",p={};switch(l.type){case"Theatre_Sheet_PublicAPI":h="setSheet",p={sheet:l.address.sheetId},e.activeSheet=e.sheets.get(l.address.sheetId);break;case"Theatre_SheetObject_PublicAPI":h="setSheetObject",d+=`_${l.address.objectKey}`,p={id:d,sheet:l.address.sheetId,key:l.address.objectKey},e.activeSheet=e.sheets.get(l.address.sheetId);break}i.send({event:h,target:"app",data:p})})});let s=-1;const n=()=>{if(e.activeSheet!==void 0&&s!==e.activeSheet.sequence.position){s=e.activeSheet.sequence.position;const r=e.activeSheet;i.send({event:"updateTimeline",target:"app",data:{position:s,sheet:r.address.sheetId}})}},a=()=>{n(),requestAnimationFrame(a)};n(),a()}else t.ui.hide()}function Ys(){const i=document.getElementById("theatrejs-studio-root")?.shadowRoot?.getElementById("pointer-root")?.children[0],e=i?.children[1];e.style.justifyContent="left";const t=e.children[1];t.style.transform="translateX(10px)",t.removeChild(t.children[0]),t.removeChild(t.children[0]);const s=i?.children[3];s.style.top="0",s.style.right="300px"}class oi extends At{project;sheets=new Map;sheetObjects=new Map;sheetObjectCBs=new Map;sheetObjectUnsubscribe=new Map;activeSheet;studio=void 0;static rafDriver=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 n=this.sheets.get(s);return n!==void 0||(n=this.project?.sheet(e,t),this.sheets.set(s,n)),n}playSheet(e,t,s){return this.app.send({event:"playSheet",target:"editor",data:{sheet:e,instance:s,value:t}}),new Promise(n=>{const a=t!==void 0?{...t}:{};a.rafDriver=oi.rafDriver,this.sheet(e,s)?.sequence.play(a).then(r=>n(r))})}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,n,a){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const r=this.sheet(e,a);if(r===void 0)return;const d=`${this.getSheetInstance(e,a)}_${t}`;let h=this.sheetObjects.get(d);h!==void 0?h=r.object(t,{...s,...h.value},{reconfigure:!0}):h=r.object(t,s),this.sheetObjects.set(d,h),this.sheetObjectCBs.set(d,n!==void 0?n:ai);const p=h.onValuesChange(f=>{if(this.app.editor){for(const y in f){const x=f[y];typeof x=="object"&&Ji(x)&&(f[y]={r:x.r,g:x.g,b:x.b,a:x.a})}this.app.send({event:"updateSheetObject",target:"app",data:{sheet:e,sheetObject:d,values:f}})}const g=this.sheetObjectCBs.get(d);g!==void 0&&g(f)});return this.sheetObjectUnsubscribe.set(d,p),h}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 a=`${t}_${s}`,r=this.sheetObjectUnsubscribe.get(a);r!==void 0&&(this.sheetObjects.delete(a),this.sheetObjectCBs.delete(a),this.sheetObjectUnsubscribe.delete(a),r())}handleApp(e,t,s){const n=t;let a;switch(s.event){case"setSheet":a=n.sheets.get(s.data.sheet),a!==void 0&&(n.activeSheet=a,this.studio?.setSelection([a]));break;case"setSheetObject":a=n.sheetObjects.get(`${s.data.sheet}_${s.data.key}`),a!==void 0&&this.studio?.setSelection([a]);break;case"updateSheetObject":a=n.sheets.get(s.data.sheet),a!==void 0&&a.sequence.pause(),a=n.sheetObjectCBs.get(s.data.sheetObject),a!==void 0&&a(s.data.values);break;case"updateTimeline":a=n.sheets.get(s.data.sheet),n.activeSheet!==void 0&&(n.activeSheet.sequence.position=s.data.position);break}}handleEditor(e,t,s){if(e.editor){const n=t;switch(s.event){case"playSheet":n.sheet(s.data.sheet,s.data.instance)?.sequence.play(s.data.value);break;case"pauseSheet":n.sheet(s.data.sheet,s.data.instance)?.sequence.pause();break}}}handleEditorApp(e,t){if(e.editor){this.studio?.ui.restore(),this.studio?.onSelectionChange(r=>{r.length<1||r.forEach(l=>{let d=l.address.sheetId,h="setSheet",p={};switch(l.type){case"Theatre_Sheet_PublicAPI":h="setSheet",p={sheet:l.address.sheetId},t.activeSheet=t.sheets.get(l.address.sheetId);break;case"Theatre_SheetObject_PublicAPI":h="setSheetObject",d+=`_${l.address.objectKey}`,p={id:d,sheet:l.address.sheetId,key:l.address.objectKey},t.activeSheet=t.sheets.get(l.address.sheetId);break}e.send({event:h,target:"app",data:p})})});let s=-1;const n=()=>{if(t.activeSheet!==void 0&&s!==t.activeSheet.sequence.position){s=t.activeSheet.sequence.position;const r=t.activeSheet;e.send({event:"updateTimeline",target:"app",data:{position:s,sheet:r.address.sheetId}})}},a=()=>{n(),requestAnimationFrame(a)};n(),a()}else this.studio?.ui.hide()}}function Gs(i){if(i.name==="cameras")return"camera";if(i.name==="interactive")return"interactive";if(i.name==="lights")return"light";if(i.name==="ui")return"ui";if(i.name==="utils")return"utils";const e=i.type;return e.search("Helper")>-1?"icon_utils":e.search("Camera")>-1?"camera":e.search("Light")>-1?"light":"obj3D"}function Ze(i){const e={name:i.name,type:i.type,uuid:i.uuid,children:[]};return i.children.forEach(t=>{e.children.push(Ze(t))}),e}function Zs(i){const e={};for(const t in i){const s=i[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 Ws(i){switch(i){case"blendSrcAlpha":case"blendDstAlpha":case"blendEquationAlpha":case"clippingPlanes":case"shadowSide":case"precision":return!0}return!1}function Ne(i){const e={};for(const t in i){if(t.substring(0,1)==="_"||t.substring(0,2)==="is"||Ws(t))continue;const s=typeof i[t],n=i[t];switch(s){case"boolean":case"number":case"string":e[t]=n;break;case"object":n!==null?(e[t]=n,n.isTexture?e[t]={src:ct.renderToBlob(n),offset:[n.offset.x,n.offset.y],repeat:[n.repeat.x,n.repeat.y]}:t==="uniforms"&&(e[t]=Zs(e[t]))):t==="glslVersion"?e[t]="":e[t]={src:"",offset:[0,0],repeat:[1,1]};break}}return i.anisotropy!==void 0&&(e.anisotropy=i.anisotropy),i.clearcoat!==void 0&&(e.clearcoat=i.clearcoat),i.iridescence!==void 0&&(e.iridescence=i.iridescence),i.dispersion!==void 0&&(e.dispersion=i.dispersion),i.sheen!==void 0&&(e.sheen=i.sheen),i.transmission!==void 0&&(e.transmission=i.transmission),i.transmission!==void 0&&(e.transmission=i.transmission),e}function Bt(i){i.updateMatrix();const e={name:i.name,type:i.type,uuid:i.uuid,visible:i.visible,matrix:i.matrix.elements,animations:[],material:void 0,perspectiveCameraInfo:void 0,orthographicCameraInfo:void 0,lightInfo:void 0,children:[]};i.animations.forEach(s=>{e.animations.push({name:s.name,duration:s.duration,blendMode:s.blendMode})});const t=i.type.toLowerCase();if(t.search("mesh")>-1){const s=i;if(Array.isArray(s.material)){const n=[];s.material.forEach(a=>{n.push(Ne(a))}),e.material=n}else e.material=Ne(s.material)}else if(t.search("points")>-1){const s=i;if(Array.isArray(s.material)){const n=[];s.material.forEach(a=>{n.push(Ne(a))}),e.material=n}else e.material=Ne(s.material)}else if(t.search("line")>-1){const s=i;if(Array.isArray(s.material)){const n=[];s.material.forEach(a=>{n.push(Ne(a))}),e.material=n}else e.material=Ne(s.material)}else t.search("camera")>-1?i.type==="PerspectiveCamera"?e.perspectiveCameraInfo={fov:i.fov,zoom:i.zoom,near:i.near,far:i.far,focus:i.focus,aspect:i.aspect,filmGauge:i.filmGauge,filmOffset:i.filmOffset}:i.type==="OrthographicCamera"&&(e.orthographicCameraInfo={zoom:i.zoom,near:i.near,far:i.far,left:i.left,right:i.right,top:i.top,bottom:i.bottom}):t.search("light")>-1&&(e.lightInfo={color:i.color,intensity:i.intensity,decay:i.decay,distance:i.distance,angle:i.angle,penumbra:i.penumbra,groundColor:i.groundColor,width:i.width,height:i.height});return e}function Xs(i,e){const t=e.split(".");switch(t.length){case 1:return i[t[0]];case 2:return i[t[0]][t[1]];case 3:return i[t[0]][t[1]][t[2]];case 4:return i[t[0]][t[1]][t[2]][t[3]];case 5:return i[t[0]][t[1]][t[2]][t[3]][t[4]];case 6:return i[t[0]][t[1]][t[2]][t[3]][t[4]][t[5]]}}function Qs(i,e){for(const t in e)i[t]=e[t]}function $(i,e,t){if(i===void 0)return;const s=e.split("."),n=s.length;if(typeof t!="object")switch(n){case 1:i[s[0]]=t;break;case 2:i[s[0]][s[1]]=t;break;case 3:i[s[0]][s[1]][s[2]]=t;break;case 4:i[s[0]][s[1]][s[2]][s[3]]=t;break;case 5:i[s[0]][s[1]][s[2]][s[3]][s[4]]=t;break}else{let r;switch(n){case 1:r=i[s[0]];break;case 2:r=i[s[0]][s[1]];break;case 3:r=i[s[0]][s[1]][s[2]];break;case 4:r=i[s[0]][s[1]][s[2]][s[3]];break;case 5:r=i[s[0]][s[1]][s[2]][s[3]][s[4]];break}r!=null&&Qs(r,t)}}function ts(i){return new Promise((e,t)=>{const s=new Image;s.onload=()=>{const n=new o.Texture(s);n.wrapS=o.RepeatWrapping,n.wrapT=o.RepeatWrapping,n.needsUpdate=!0,e(n)},s.onerror=t,s.src=i})}class $s extends At{scene=void 0;scenes=new Map;renderer=void 0;renderTargets=new Map;groups=new Map;dispose(){this.scenes.forEach(e=>{We(e)}),this.scenes.clear(),this.scene&&We(this.scene),this.renderTargets.forEach(e=>{e.dispose()}),this.renderTargets.clear(),this.renderer?.dispose()}getObject(e){this.app.debugEnabled&&(this.renderer!==void 0&&(ct.renderer=this.renderer),this.app.send({event:"getObject",target:"app",data:e}))}setObject(e){this.renderer!==void 0&&(ct.renderer=this.renderer);const t=Bt(e);this.app.send({event:"setObject",target:"editor",data:t})}requestMethod(e,t,s,n){this.app.send({event:"requestMethod",target:"app",data:{uuid:e,key:t,value:s,subitem:n}})}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()}addScene(e){if(e===void 0||(this.scenes.set(e.name,e),!this.app.debugEnabled))return;ii(),Rt(e);const t=Ze(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=Ze(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=Ze(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,n)=>{e.search(n)>-1&&(t=s)}),t}setScene(e){if(e===void 0||(this.scene=e,!this.app.debugEnabled))return;this.renderer!==void 0&&(ct.renderer=this.renderer),ii(),Rt(e);const t=Ze(e);this.app.send({event:"setScene",target:"editor",data:t})}addCamera(e){if(!this.app.debugEnabled)return;const t=Bt(e);this.app.send({event:"addCamera",target:"editor",data:t})}removeCamera(e){if(!this.app.debugEnabled)return;const t=Bt(e);this.app.send({event:"removeCamera",target:"editor",data:t})}handleApp(e,t,s){const n=t;switch(s.event){case"getObject":P.dispatchEvent({type:R.GET_OBJECT,value:s.data});break;case"updateObject":P.dispatchEvent({type:R.UPDATE_OBJECT,value:s.data});break;case"createTexture":P.dispatchEvent({type:R.CREATE_TEXTURE,value:s.data});break;case"requestMethod":P.dispatchEvent({type:R.REQUEST_METHOD,value:s.data});break;case"refreshScene":e.send({event:"refreshScene",target:"editor",data:Ze(n.scenes.get(s.data.name))});break}if(s.event==="updateGroup"){const a=JSON.parse(s.data);n.groups.get(a.group)?.onUpdate(a.prop,a.value)}}handleEditor(e,t,s){switch(s.event){case"setObject":P.dispatchEvent({type:R.SET_OBJECT,value:s.data});break;case"addScene":P.dispatchEvent({type:R.ADD_SCENE,value:s.data});break;case"refreshScene":P.dispatchEvent({type:R.REFRESH_SCENE,value:s.data});break;case"removeScene":P.dispatchEvent({type:R.REMOVE_SCENE,value:s.data});break;case"setScene":P.dispatchEvent({type:R.SET_SCENE,value:s.data});break;case"addCamera":P.dispatchEvent({type:R.ADD_CAMERA,value:s.data});break;case"removeCamera":P.dispatchEvent({type:R.REMOVE_CAMERA,value:s.data});break;case"addGroup":P.dispatchEvent({type:R.ADD_GROUP,value:s.data});break;case"removeGroup":P.dispatchEvent({type:R.REMOVE_GROUP,value:s.data});break}}addRT(e,t){const s=new o.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)}),this.renderer?.setSize(e,t)}set dpr(e){this.renderer?.setPixelRatio(we(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}get canvas(){return this.renderer!==void 0?this.renderer?.domElement:null}}var si={exports:{}},$e={};/**
|
2
2
|
* @license React
|
3
3
|
* react-jsx-runtime.production.min.js
|
4
4
|
*
|
@@ -6,7 +6,7 @@
|
|
6
6
|
*
|
7
7
|
* This source code is licensed under the MIT license found in the
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
9
|
-
*/var
|
9
|
+
*/var xi;function qs(){if(xi)return $e;xi=1;var i=w,e=Symbol.for("react.element"),t=Symbol.for("react.fragment"),s=Object.prototype.hasOwnProperty,n=i.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,a={key:!0,ref:!0,__self:!0,__source:!0};function r(l,d,h){var p,f={},g=null,y=null;h!==void 0&&(g=""+h),d.key!==void 0&&(g=""+d.key),d.ref!==void 0&&(y=d.ref);for(p in d)s.call(d,p)&&!a.hasOwnProperty(p)&&(f[p]=d[p]);if(l&&l.defaultProps)for(p in d=l.defaultProps,d)f[p]===void 0&&(f[p]=d[p]);return{$$typeof:e,type:l,key:g,ref:y,props:f,_owner:n.current}}return $e.Fragment=t,$e.jsx=r,$e.jsxs=r,$e}var qe={};/**
|
10
10
|
* @license React
|
11
11
|
* react-jsx-runtime.development.js
|
12
12
|
*
|
@@ -14,25 +14,25 @@
|
|
14
14
|
*
|
15
15
|
* This source code is licensed under the MIT license found in the
|
16
16
|
* LICENSE file in the root directory of this source tree.
|
17
|
-
*/var
|
18
|
-
`+
|
19
|
-
`),
|
20
|
-
`),
|
21
|
-
`+
|
17
|
+
*/var Oi;function Ks(){return Oi||(Oi=1,process.env.NODE_ENV!=="production"&&function(){var i=w,e=Symbol.for("react.element"),t=Symbol.for("react.portal"),s=Symbol.for("react.fragment"),n=Symbol.for("react.strict_mode"),a=Symbol.for("react.profiler"),r=Symbol.for("react.provider"),l=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),p=Symbol.for("react.suspense_list"),f=Symbol.for("react.memo"),g=Symbol.for("react.lazy"),y=Symbol.for("react.offscreen"),x=Symbol.iterator,M="@@iterator";function T(c){if(c===null||typeof c!="object")return null;var E=x&&c[x]||c[M];return typeof E=="function"?E:null}var _=i.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function v(c){{for(var E=arguments.length,S=new Array(E>1?E-1:0),I=1;I<E;I++)S[I-1]=arguments[I];C("error",c,S)}}function C(c,E,S){{var I=_.ReactDebugCurrentFrame,z=I.getStackAddendum();z!==""&&(E+="%s",S=S.concat([z]));var B=S.map(function(k){return String(k)});B.unshift("Warning: "+E),Function.prototype.apply.call(console[c],console,B)}}var b=!1,D=!1,O=!1,j=!1,W=!1,le;le=Symbol.for("react.module.reference");function be(c){return!!(typeof c=="string"||typeof c=="function"||c===s||c===a||W||c===n||c===h||c===p||j||c===y||b||D||O||typeof c=="object"&&c!==null&&(c.$$typeof===g||c.$$typeof===f||c.$$typeof===r||c.$$typeof===l||c.$$typeof===d||c.$$typeof===le||c.getModuleId!==void 0))}function Xe(c,E,S){var I=c.displayName;if(I)return I;var z=E.displayName||E.name||"";return z!==""?S+"("+z+")":S}function je(c){return c.displayName||"Context"}function oe(c){if(c==null)return null;if(typeof c.tag=="number"&&v("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof c=="function")return c.displayName||c.name||null;if(typeof c=="string")return c;switch(c){case s:return"Fragment";case t:return"Portal";case a:return"Profiler";case n:return"StrictMode";case h:return"Suspense";case p:return"SuspenseList"}if(typeof c=="object")switch(c.$$typeof){case l:var E=c;return je(E)+".Consumer";case r:var S=c;return je(S._context)+".Provider";case d:return Xe(c,c.render,"ForwardRef");case f:var I=c.displayName||null;return I!==null?I:oe(c.type)||"Memo";case g:{var z=c,B=z._payload,k=z._init;try{return oe(k(B))}catch{return null}}}return null}var K=Object.assign,X=0,Oe,se,ye,ee,Te,Me,De;function ut(){}ut.__reactDisabledLog=!0;function pt(){{if(X===0){Oe=console.log,se=console.info,ye=console.warn,ee=console.error,Te=console.group,Me=console.groupCollapsed,De=console.groupEnd;var c={configurable:!0,enumerable:!0,value:ut,writable:!0};Object.defineProperties(console,{info:c,log:c,warn:c,error:c,group:c,groupCollapsed:c,groupEnd:c})}X++}}function ps(){{if(X--,X===0){var c={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:K({},c,{value:Oe}),info:K({},c,{value:se}),warn:K({},c,{value:ye}),error:K({},c,{value:ee}),group:K({},c,{value:Te}),groupCollapsed:K({},c,{value:Me}),groupEnd:K({},c,{value:De})})}X<0&&v("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var Lt=_.ReactCurrentDispatcher,Ut;function mt(c,E,S){{if(Ut===void 0)try{throw Error()}catch(z){var I=z.stack.trim().match(/\n( *(at )?)/);Ut=I&&I[1]||""}return`
|
18
|
+
`+Ut+c}}var kt=!1,ft;{var ms=typeof WeakMap=="function"?WeakMap:Map;ft=new ms}function di(c,E){if(!c||kt)return"";{var S=ft.get(c);if(S!==void 0)return S}var I;kt=!0;var z=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var B;B=Lt.current,Lt.current=null,pt();try{if(E){var k=function(){throw Error()};if(Object.defineProperty(k.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(k,[])}catch(ve){I=ve}Reflect.construct(c,[],k)}else{try{k.call()}catch(ve){I=ve}c.call(k.prototype)}}else{try{throw Error()}catch(ve){I=ve}c()}}catch(ve){if(ve&&I&&typeof ve.stack=="string"){for(var U=ve.stack.split(`
|
19
|
+
`),ie=I.stack.split(`
|
20
|
+
`),Q=U.length-1,q=ie.length-1;Q>=1&&q>=0&&U[Q]!==ie[q];)q--;for(;Q>=1&&q>=0;Q--,q--)if(U[Q]!==ie[q]){if(Q!==1||q!==1)do if(Q--,q--,q<0||U[Q]!==ie[q]){var ce=`
|
21
|
+
`+U[Q].replace(" at new "," at ");return c.displayName&&ce.includes("<anonymous>")&&(ce=ce.replace("<anonymous>",c.displayName)),typeof c=="function"&&ft.set(c,ce),ce}while(Q>=1&&q>=0);break}}}finally{kt=!1,Lt.current=B,ps(),Error.prepareStackTrace=z}var ze=c?c.displayName||c.name:"",wi=ze?mt(ze):"";return typeof c=="function"&&ft.set(c,wi),wi}function fs(c,E,S){return di(c,!1)}function _s(c){var E=c.prototype;return!!(E&&E.isReactComponent)}function _t(c,E,S){if(c==null)return"";if(typeof c=="function")return di(c,_s(c));if(typeof c=="string")return mt(c);switch(c){case h:return mt("Suspense");case p:return mt("SuspenseList")}if(typeof c=="object")switch(c.$$typeof){case d:return fs(c.render);case f:return _t(c.type,E,S);case g:{var I=c,z=I._payload,B=I._init;try{return _t(B(z),E,S)}catch{}}}return""}var gt=Object.prototype.hasOwnProperty,ui={},pi=_.ReactDebugCurrentFrame;function yt(c){if(c){var E=c._owner,S=_t(c.type,c._source,E?E.type:null);pi.setExtraStackFrame(S)}else pi.setExtraStackFrame(null)}function gs(c,E,S,I,z){{var B=Function.call.bind(gt);for(var k in c)if(B(c,k)){var U=void 0;try{if(typeof c[k]!="function"){var ie=Error((I||"React class")+": "+S+" type `"+k+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof c[k]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw ie.name="Invariant Violation",ie}U=c[k](E,k,I,S,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(Q){U=Q}U&&!(U instanceof Error)&&(yt(z),v("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",I||"React class",S,k,typeof U),yt(null)),U instanceof Error&&!(U.message in ui)&&(ui[U.message]=!0,yt(z),v("Failed %s type: %s",S,U.message),yt(null))}}}var ys=Array.isArray;function jt(c){return ys(c)}function vs(c){{var E=typeof Symbol=="function"&&Symbol.toStringTag,S=E&&c[Symbol.toStringTag]||c.constructor.name||"Object";return S}}function Es(c){try{return mi(c),!1}catch{return!0}}function mi(c){return""+c}function fi(c){if(Es(c))return v("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",vs(c)),mi(c)}var Qe=_.ReactCurrentOwner,bs={key:!0,ref:!0,__self:!0,__source:!0},_i,gi,Ft;Ft={};function Cs(c){if(gt.call(c,"ref")){var E=Object.getOwnPropertyDescriptor(c,"ref").get;if(E&&E.isReactWarning)return!1}return c.ref!==void 0}function Ss(c){if(gt.call(c,"key")){var E=Object.getOwnPropertyDescriptor(c,"key").get;if(E&&E.isReactWarning)return!1}return c.key!==void 0}function ws(c,E){if(typeof c.ref=="string"&&Qe.current&&E&&Qe.current.stateNode!==E){var S=oe(Qe.current.type);Ft[S]||(v('Component "%s" contains the string ref "%s". Support for string refs will be removed in a future major release. This case cannot be automatically converted to an arrow function. We ask you to manually fix this case by using useRef() or createRef() instead. Learn more about using refs safely here: https://reactjs.org/link/strict-mode-string-ref',oe(Qe.current.type),c.ref),Ft[S]=!0)}}function xs(c,E){{var S=function(){_i||(_i=!0,v("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",E))};S.isReactWarning=!0,Object.defineProperty(c,"key",{get:S,configurable:!0})}}function Os(c,E){{var S=function(){gi||(gi=!0,v("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",E))};S.isReactWarning=!0,Object.defineProperty(c,"ref",{get:S,configurable:!0})}}var Ts=function(c,E,S,I,z,B,k){var U={$$typeof:e,type:c,key:E,ref:S,props:k,_owner:B};return U._store={},Object.defineProperty(U._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(U,"_self",{configurable:!1,enumerable:!1,writable:!1,value:I}),Object.defineProperty(U,"_source",{configurable:!1,enumerable:!1,writable:!1,value:z}),Object.freeze&&(Object.freeze(U.props),Object.freeze(U)),U};function Ms(c,E,S,I,z){{var B,k={},U=null,ie=null;S!==void 0&&(fi(S),U=""+S),Ss(E)&&(fi(E.key),U=""+E.key),Cs(E)&&(ie=E.ref,ws(E,z));for(B in E)gt.call(E,B)&&!bs.hasOwnProperty(B)&&(k[B]=E[B]);if(c&&c.defaultProps){var Q=c.defaultProps;for(B in Q)k[B]===void 0&&(k[B]=Q[B])}if(U||ie){var q=typeof c=="function"?c.displayName||c.name||"Unknown":c;U&&xs(k,q),ie&&Os(k,q)}return Ts(c,U,ie,z,I,Qe.current,k)}}var zt=_.ReactCurrentOwner,yi=_.ReactDebugCurrentFrame;function Fe(c){if(c){var E=c._owner,S=_t(c.type,c._source,E?E.type:null);yi.setExtraStackFrame(S)}else yi.setExtraStackFrame(null)}var Nt;Nt=!1;function Ht(c){return typeof c=="object"&&c!==null&&c.$$typeof===e}function vi(){{if(zt.current){var c=oe(zt.current.type);if(c)return`
|
22
22
|
|
23
|
-
Check the render method of \``+
|
23
|
+
Check the render method of \``+c+"`."}return""}}function Ds(c){{if(c!==void 0){var E=c.fileName.replace(/^.*[\\\/]/,""),S=c.lineNumber;return`
|
24
24
|
|
25
|
-
Check your code at `+
|
25
|
+
Check your code at `+E+":"+S+"."}return""}}var Ei={};function Rs(c){{var E=vi();if(!E){var S=typeof c=="string"?c:c.displayName||c.name;S&&(E=`
|
26
26
|
|
27
|
-
Check the top-level render call using <`+
|
27
|
+
Check the top-level render call using <`+S+">.")}return E}}function bi(c,E){{if(!c._store||c._store.validated||c.key!=null)return;c._store.validated=!0;var S=Rs(E);if(Ei[S])return;Ei[S]=!0;var I="";c&&c._owner&&c._owner!==zt.current&&(I=" It was passed a child from "+oe(c._owner.type)+"."),Fe(c),v('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',S,I),Fe(null)}}function Ci(c,E){{if(typeof c!="object")return;if(jt(c))for(var S=0;S<c.length;S++){var I=c[S];Ht(I)&&bi(I,E)}else if(Ht(c))c._store&&(c._store.validated=!0);else if(c){var z=T(c);if(typeof z=="function"&&z!==c.entries)for(var B=z.call(c),k;!(k=B.next()).done;)Ht(k.value)&&bi(k.value,E)}}}function Ps(c){{var E=c.type;if(E==null||typeof E=="string")return;var S;if(typeof E=="function")S=E.propTypes;else if(typeof E=="object"&&(E.$$typeof===d||E.$$typeof===f))S=E.propTypes;else return;if(S){var I=oe(E);gs(S,c.props,"prop",I,c)}else if(E.PropTypes!==void 0&&!Nt){Nt=!0;var z=oe(E);v("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",z||"Unknown")}typeof E.getDefaultProps=="function"&&!E.getDefaultProps.isReactClassApproved&&v("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}function As(c){{for(var E=Object.keys(c.props),S=0;S<E.length;S++){var I=E[S];if(I!=="children"&&I!=="key"){Fe(c),v("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",I),Fe(null);break}}c.ref!==null&&(Fe(c),v("Invalid attribute `ref` supplied to `React.Fragment`."),Fe(null))}}function Si(c,E,S,I,z,B){{var k=be(c);if(!k){var U="";(c===void 0||typeof c=="object"&&c!==null&&Object.keys(c).length===0)&&(U+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.");var ie=Ds(z);ie?U+=ie:U+=vi();var Q;c===null?Q="null":jt(c)?Q="array":c!==void 0&&c.$$typeof===e?(Q="<"+(oe(c.type)||"Unknown")+" />",U=" Did you accidentally export a JSX literal instead of a component?"):Q=typeof c,v("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",Q,U)}var q=Ms(c,E,S,z,B);if(q==null)return q;if(k){var ce=E.children;if(ce!==void 0)if(I)if(jt(ce)){for(var ze=0;ze<ce.length;ze++)Ci(ce[ze],c);Object.freeze&&Object.freeze(ce)}else v("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else Ci(ce,c)}return c===s?As(q):Ps(q),q}}function Is(c,E,S){return Si(c,E,S,!0)}function Ls(c,E,S){return Si(c,E,S,!1)}var Us=Ls,ks=Is;qe.Fragment=s,qe.jsx=Us,qe.jsxs=ks}()),qe}process.env.NODE_ENV==="production"?si.exports=qs():si.exports=Ks();var u=si.exports;function li(i){return i.title.search("<")>-1?u.jsx("button",{className:"svg",dangerouslySetInnerHTML:{__html:i.title}}):u.jsx("button",{children:i.title})}const Js=u.jsxs("svg",{className:"closeIcon",width:"14",height:"14",fill:"none",stroke:"#666666",strokeMiterlimit:"10",children:[u.jsx("circle",{cx:"7",cy:"7",r:"6"}),u.jsx("line",{x1:"4",y1:"4",x2:"10",y2:"10"}),u.jsx("line",{x1:"4",y1:"10",x2:"10",y2:"4"})]}),en=u.jsx("svg",{className:"dragIcon",width:"14",height:"14",fill:"#666666",stroke:"none",children:u.jsx("path",{d:`M10.43,4H3.57C3.26,4,3,4.22,3,4.5v1C3,5.78,3.26,6,3.57,6h6.86C10.74,6,11,5.78,11,5.5v-1\r
|
28
28
|
C11,4.22,10.74,4,10.43,4z M10.43,8H3.57C3.26,8,3,8.22,3,8.5v1C3,9.78,3.26,10,3.57,10h6.86C10.74,10,11,9.78,11,9.5v-1\r
|
29
|
-
C11,8.22,10.74,8,10.43,8z`})});function nn(i){return m.jsx(qi.Reorder.Item,{value:i.title,children:m.jsxs("div",{children:[Pn,m.jsx("span",{children:i.title}),m.jsx("button",{className:"closeIcon",onClick:()=>{i.onDelete(i.index)},children:An})]})},i.title)}function sn(i){const[e,n]=T.useState(!1),[t,s]=T.useState(i.options),r=c=>{i.onDragComplete(c),s(c)},o=c=>{const u=[...t];u.splice(c,1),r(u)},a=[];t.forEach((c,u)=>{a.push(m.jsx(nn,{index:u,title:c,onDelete:o},c))});let d="dropdown draggable";return i.subdropdown&&(d+=" subdropdown"),m.jsxs("div",{className:d,onMouseEnter:()=>n(!0),onMouseLeave:()=>n(!1),children:[m.jsx(xi,{title:i.title}),m.jsx(qi.Reorder.Group,{axis:"y",values:t,onReorder:r,style:{visibility:e?"visible":"hidden"},children:a})]})}function rn(i){const[e,n]=T.useState(!1),t=[];i.options.map((r,o)=>{i.onSelect!==void 0&&(r.onSelect=i.onSelect),t.push(m.jsx(an,{option:r},o))});let s="dropdown";return i.subdropdown&&(s+=" subdropdown"),m.jsxs("div",{className:s,onMouseEnter:()=>n(!0),onMouseLeave:()=>n(!1),children:[m.jsx(xi,{title:i.title}),m.jsx("ul",{style:{visibility:e?"visible":"hidden"},children:t})]})}function an(i){const{option:e}=i,[n,t]=T.useState("");let s;switch(e.type){case"draggable":s=m.jsx(sn,{title:e.title,options:e.value,onDragComplete:r=>{e.onDragComplete!==void 0&&e.onDragComplete(r)},subdropdown:!0});break;case"dropdown":s=m.jsx(rn,{title:e.title,options:e.value,onSelect:e.onSelect,subdropdown:!0});break;case"option":s=m.jsx("button",{onClick:()=>{e.onSelect!==void 0&&e.onSelect(e.value),e.selectable&&(n!==e.title?t(e.title):t(""))},children:e.title});break}return m.jsx("li",{className:n===e.title?"selected":"",children:s},Ji())}function Ln(i,e,n){function t(r){switch(e.forEach(o=>{o.callback(i,o.remote,r)}),r.event){case"custom":B.dispatchEvent({type:z.CUSTOM,value:r.data});break}}function s(r){switch(n.forEach(o=>{o.callback(i,o.remote,r)}),r.event){case"custom":B.dispatchEvent({type:z.CUSTOM,value:r.data});break}}i.listen=r=>{r.target==="editor"?s(r):t(r)}}function Bt(i){const[e,n]=T.useState(i.open!==void 0?i.open:!0),t=!e||i.children===void 0,s=()=>{B.dispatchEvent({type:z.REMOVE_SCENE,value:i.scene})};return m.jsxs("div",{className:`accordion ${t?"hide":""}`,children:[m.jsxs("button",{className:"toggle",onClick:()=>{const r=!e;i.onToggle!==void 0&&i.onToggle(r),n(r)},children:[m.jsx("p",{className:`status ${e?"open":""}`,children:"Toggle"}),m.jsx("p",{className:"label",children:Nt(i.label)})]}),i.onRefresh?m.jsxs(m.Fragment,{children:[m.jsx("button",{className:"refresh",onClick:i.onRefresh}),m.jsx("button",{className:"remove",onClick:s})]}):null,i.button,m.jsx("div",{className:e?"open":"",children:m.jsx("div",{children:i.children})},Math.random())]})}function Si(i){const e=T.useRef(null),[n,t]=T.useState(!1),s=i.child!==void 0&&i.child.children.length>0,r=[];return i.child!==void 0&&i.child.children.length>0&&i.child.children.map((o,a)=>{r.push(m.jsx(Si,{child:o,three:i.three},a))}),T.useEffect(()=>{if(i.child){const o=i.three.getScene(i.child.uuid);if(o!==null){const a=o.getObjectByProperty("uuid",i.child.uuid);a!==void 0&&(e.current.style.opacity=a.visible?"1":"0.25")}}},[n]),m.jsx(m.Fragment,{children:i.child!==void 0&&m.jsxs("div",{className:"childObject",children:[m.jsxs("div",{className:"child",children:[s?m.jsx("button",{className:"status",style:{backgroundPositionX:n?"-14px":"2px"},onClick:()=>{t(!n)}}):null,m.jsx("button",{className:"name",style:{left:s?"20px":"5px"},onClick:()=>{i.child!==void 0&&(i.three.getObject(i.child.uuid),n||t(!0))},children:i.child.name.length>0?`${i.child.name} (${i.child.type})`:`${i.child.type}::${i.child.uuid}`}),m.jsx("button",{className:"visibility",ref:e,onClick:()=>{if(i.child){const o=i.three.getScene(i.child.uuid);if(o!==null){const a=o.getObjectByProperty("uuid",i.child.uuid);if(a!==void 0){const d="visible",c=!a.visible;e.current.style.opacity=c?"1":"0.25",i.three.updateObject(i.child.uuid,d,c),pe(a,d,c)}}}}}),m.jsx("div",{className:`icon ${Cn(i.child)}`})]}),m.jsx("div",{className:n?"open":"",children:m.jsx("div",{className:"container",children:r})})]},Math.random())})}function Oi(i){const e=[];return i.child?.children.map((n,t)=>{e.push(m.jsx(Si,{child:n,scene:i.scene,three:i.three},t))}),m.jsx("div",{className:`scene ${i.class!==void 0?i.class:""}`,children:e})}function In(i){const[e,n]=T.useState(i.defaultValue);return T.useEffect(()=>{let t=!1,s=-1,r=0,o=i.defaultValue;const a=_=>{t=!0,r=Number(i.input.current?.value),s=_.clientX,document.addEventListener("mouseup",c,!1),document.addEventListener("mousemove",d,!1),document.addEventListener("contextmenu",c,!1)},d=_=>{if(!t)return;const y=i.step!==void 0?i.step:1,A=(_.clientX-s)*y;o=Number((r+A).toFixed(4)),i.min!==void 0&&(o=Math.max(o,i.min)),i.max!==void 0&&(o=Math.min(o,i.max)),i.onChange!==void 0&&i.onChange(o),n(o)},c=()=>{t=!1,document.removeEventListener("mouseup",c),document.removeEventListener("mousemove",d),document.removeEventListener("contextmenu",c)},u=_=>{const y=Number(_.target.value);n(y)},p=_=>{const y=Number(_.target.value);i.onChange!==void 0&&i.onChange(y),n(y)};return i.input.current?.addEventListener("input",u),i.label.current?.addEventListener("mousedown",a,!1),i.sliderRef!==void 0&&i.sliderRef.current?.addEventListener("input",p),()=>{i.input.current?.removeEventListener("input",u),i.label.current?.removeEventListener("mousedown",a),i.sliderRef!==void 0&&i.sliderRef.current?.removeEventListener("input",p),document.removeEventListener("mouseup",c),document.removeEventListener("mousemove",d),document.removeEventListener("contextmenu",c)}},[]),e}function gt(i){const e=T.useRef(null),n=T.useRef(null),t=In({label:i.labelRef,input:e,sliderRef:n,defaultValue:i.value,min:i.min,max:i.max,step:i.step,onChange:s=>{i.onChange!==void 0&&i.onChange(i.prop,s)}});return m.jsxs(m.Fragment,{children:[i.type==="number"&&m.jsx("input",{alt:i.alt,className:i.className,ref:e,type:"number",value:t,min:i.min,max:i.max,step:i.step,disabled:i.disabled,onChange:s=>{const r=Number(s.target.value);i.onChange!==void 0&&i.onChange(i.prop,r)}}),i.type==="range"&&m.jsxs(m.Fragment,{children:[m.jsx("input",{type:"text",value:t.toString(),disabled:i.disabled,ref:e,className:"min",onChange:s=>{const r=Number(s.target.value);i.onChange!==void 0&&i.onChange(i.prop,r)}}),m.jsx("input",{disabled:i.disabled,type:"range",value:t,min:i.min,max:i.max,step:i.step,ref:n,onChange:Ci})]})]})}function Un(i){const e=T.useRef(null),n=T.useRef(null),t=T.useRef(null),s=T.useRef(null),r=T.useRef(null),o=T.useRef(null),[a,d]=T.useState(i.value),[c,u]=T.useState({min:Math.min(i.min,Math.min(i.value.x,i.value.y)),max:Math.max(i.max,Math.max(i.value.x,i.value.y))}),[p,_]=T.useState(!1);function y(){p||(window.addEventListener("mousemove",I),window.addEventListener("mouseup",A),window.addEventListener("mouseup",A),_(!0))}function A(){window.removeEventListener("mousemove",I),window.removeEventListener("mouseup",A),_(!1)}function I(C){const U=r.current.getBoundingClientRect(),L=ct(0,99,C.clientX-U.left)/99,x=ct(0,99,C.clientY-U.top)/99,oe=vi(Qt(c.min,c.max,L),3),te=vi(Qt(c.min,c.max,x),3);i.onChange({target:{value:{x:oe,y:te}}}),d({x:oe,y:te})}function F(C){let U=a.x,L=a.y;C.target===e.current?U=Number(C.target.value):L=Number(C.target.value),d({x:U,y:L})}function v(){const C=Number(t.current.value);u({min:C,max:c.max}),(a.x<C||a.y<C)&&d({x:ct(C,c.max,a.x),y:ct(C,c.max,a.y)})}function E(){const C=Number(s.current.value);u({min:c.min,max:C}),(a.x>C||a.y>C)&&d({x:ct(c.min,C,a.x),y:ct(c.min,C,a.y)})}T.useEffect(()=>{const C=gi(c.min,c.max,a.x),U=gi(c.min,c.max,a.y);o.current.style.left=`${C*100}%`,o.current.style.top=`${U*100}%`},[c,a]);const w=i.step!==void 0?i.step:.01;return m.jsxs("div",{className:"vector2",children:[m.jsxs("div",{className:"fields",children:[m.jsxs("div",{children:[m.jsx("label",{children:"X:"}),m.jsx("input",{ref:e,type:"number",value:a.x,min:c.min,max:c.max,step:w,onChange:F})]}),m.jsxs("div",{children:[m.jsx("label",{children:"Y:"}),m.jsx("input",{ref:n,type:"number",value:a.y,min:c.min,max:c.max,step:w,onChange:F})]}),m.jsxs("div",{children:[m.jsx("label",{children:"Min:"}),m.jsx("input",{ref:t,type:"number",value:c.min,step:w,onChange:v})]}),m.jsxs("div",{children:[m.jsx("label",{children:"Max:"}),m.jsx("input",{ref:s,type:"number",value:c.max,step:w,onChange:E})]})]}),m.jsxs("div",{className:"input",ref:r,onMouseDown:y,onMouseUp:A,children:[m.jsx("div",{className:"x"}),m.jsx("div",{className:"y"}),m.jsx("div",{className:"pt",ref:o})]})]})}function Pi(i){const e=i.value.x!==void 0&&i.value.y!==void 0&&i.value.z!==void 0,n=i.value.isEuler!==void 0,t=i.value.elements!==void 0,s=i.step!==void 0?i.step:.01,r=[];if(e){const o=T.useMemo(()=>i.value,[]),a=(c,u)=>{o[c]=u,i.onChange({target:{value:o}})};["x","y","z"].forEach(c=>{const u=T.useRef(null);r.push(m.jsxs("div",{children:[m.jsx("label",{ref:u,children:c.toUpperCase()}),m.jsx(gt,{value:o[c],type:"number",prop:c,step:s,labelRef:u,onChange:a})]},c))})}else if(n){const o=T.useMemo(()=>i.value,[]),a=(c,u)=>{o[c]=u,i.onChange({target:{value:o}})};["_x","_y","_z"].forEach(c=>{const u=T.useRef(null);r.push(m.jsxs("div",{children:[m.jsx("label",{ref:u,children:c.substring(1).toUpperCase()}),m.jsx(gt,{value:o[c],type:"number",prop:c,step:s,labelRef:u,onChange:a})]},c))})}else if(t){const o=T.useMemo(()=>i.value,[]),a=(d,c)=>{const u=Number(d);o.elements[u]=c,i.onChange({target:{value:o}})};for(let d=0;d<9;d++){const c=T.useRef(null);r.push(m.jsxs("div",{children:[m.jsx("label",{ref:c,children:d+1}),m.jsx(gt,{value:o.elements[d],type:"number",prop:d.toString(),step:s,labelRef:c,onChange:a})]},d.toString()))}}return m.jsx("div",{className:"grid3",children:r},Math.random().toString())}function kn(i){const e=i.value.x!==void 0,n=i.step!==void 0?i.step:.01,t=[];if(e){const s=T.useMemo(()=>i.value,[]),r=(a,d)=>{s[a]=d,i.onChange({target:{value:s}})};["x","y","z","w"].forEach(a=>{const d=T.useRef(null);t.push(m.jsxs("div",{children:[m.jsx("label",{ref:d,children:a.toUpperCase()}),m.jsx(gt,{value:s.x,type:"number",prop:a,step:n,labelRef:d,onChange:r})]},a))})}else{const s=T.useMemo(()=>i.value,[]),r=(o,a)=>{const d=Number(o);s.elements[d]=a,i.onChange({target:{value:s}})};for(let o=0;o<16;o++){const a=T.useRef(null);t.push(m.jsxs("div",{children:[m.jsx("label",{ref:a,children:o+1}),m.jsx(gt,{value:s.elements[o],type:"number",prop:o.toString(),step:n,labelRef:a,onChange:r})]},o.toString()))}}return m.jsx("div",{className:"grid4",children:t})}function Fn(i){return!(i==="defaultAttributeValues"||i==="forceSinglePass"||i==="linecap"||i==="linejoin"||i==="linewidth"||i==="normalMapType"||i==="precision"||i==="shadowSide"||i==="uniformsGroups"||i==="uniformsNeedUpdate"||i==="userData"||i==="version"||i==="wireframeLinecap"||i==="wireframeLinejoin"||i==="wireframeLinewidth"||i.slice(0,4)==="clip"||i.slice(0,7)==="polygon"||i.slice(0,7)==="stencil"||i.slice(0,2)==="is")}function jn(i){switch(i){case"Alpha Map":return"alphaMap";case"Anisotropy Map":return"anisotropyMap";case"AO Map":return"aoMap";case"Bump Map":return"bumpMap";case"Clearcoat Map":return"clearcoatMap";case"Clearcoat Normal Map":return"clearcoatNormalMap";case"Clearcoat Roughness Map":return"clearcoatRoughnessMap";case"Displacement Map":return"displacementMap";case"Emissive Map":return"emissiveMap";case"Gradient Map":return"gradientMap";case"Iridescence Map":return"iridescenceMap";case"Iridescence Thickness Map":return"iridescenceThicknessMap";case"Map":return"map";case"Matcap":return"matcap";case"Normal Map":return"normalMap";case"Roughness Map":return"roughnessMap";case"Sheen Color Map":return"sheenColorMap";case"Sheen Roughness Map":return"sheenRoughnessMap";case"Specular Color Map":return"specularColorMap";case"Specular Map Intensity":return"specularIntensityMap";case"Thickness Map":return"thicknessMap";case"Transmission Map":return"transmissionMap"}return i}function ni(i){switch(i){case"alphaHash":return"Alpha Hash";case"alphaMap":return"Alpha Map";case"alphaToCoverage":return"Alpha To Coverage";case"anisotropy":return"Anisotropy";case"anisotropyMap":return"Anisotropy Map";case"anisotropyRotation":return"Anisotropy Rotation";case"aoMap":return"AO Map";case"aoMapIntensity":return"AO Map Intensity";case"attenuationColor":return"Attenuation Color";case"attenuationDistance":return"Attenuation Distance";case"blendAlpha":return"Blend Alpha";case"blendColor":return"Blend Color";case"blendDst":return"Blend Dst";case"blendDstAlpha":return"Blend Dst Alha";case"blendEquation":return"Blend Equation";case"blendEquationAlpha":return"Blend Equation Alpha";case"blending":return"Blending";case"blendSrc":return"Blend Src";case"blendSrcAlpha":return"Blend Src Alpha";case"bumpMap":return"Bump Map";case"bumpScale":return"Bump Scale";case"clearcoat":return"Clearcoat";case"clearcoatMap":return"Clearcoat Map";case"clearcoatNormalMap":return"Clearcoat Normal Map";case"clearcoatNormalScale":return"Clearcoat Normal Scale";case"clearcoatRoughness":return"Clearcoat Roughness";case"clearcoatRoughnessMap":return"Clearcoat Roughness Map";case"color":return"Color";case"colorWrite":return"Color Write";case"defines":return"Defines";case"depthFunc":return"Depth Func";case"depthTest":return"Depth Test";case"depthWrite":return"Depth Write";case"dispersion":return"Dispersion";case"displacementBias":return"Displacement Bias";case"displacementMap":return"Displacement Map";case"displacementScale":return"Displacement Scale";case"dithering":return"Dithering";case"emissive":return"Emissive";case"emissiveMap":return"Emissive Map";case"emissiveIntensity":return"Emissive Intensity";case"envMap":return"Environment Map";case"envMapIntensity":return"Environment Map Intensity";case"envMapRotation":return"Environment Map Rotation";case"extensions":return"Extensions";case"flatShading":return"Flat Shading";case"fragmentShader":return"Fragment Shader";case"fog":return"Fog";case"glslVersion":return"GLSL Version";case"gradientMap":return"Gradient Map";case"ior":return"IOR";case"iridescence":return"Iridescence";case"iridescenceIOR":return"Iridescence IOR";case"iridescenceMap":return"Iridescence Map";case"iridescenceThicknessMap":return"Iridescence Thickness Map";case"iridescenceThicknessRange":return"Iridescence Thickness Range";case"lights":return"Lights";case"lightMap":return"Light Map";case"lightMapIntensity":return"Light Map Intensity";case"map":return"Map";case"matcap":return"Matcap";case"metalness":return"Metalness";case"metalnessMap":return"Metalness Map";case"name":return"Name";case"normalMap":return"Normal Map";case"normalScale":return"Normal Scale";case"premultipliedAlpha":return"Premultiplied Alpha";case"opacity":return"Opacity";case"reflectivity":return"Reflectivity";case"refractionRatio":return"Refraction Ratio";case"roughness":return"Roughness";case"roughnessMap":return"Roughness Map";case"sheen":return"Sheen";case"sheenColor":return"Sheen Color";case"sheenColorMap":return"Sheen Color Map";case"sheenRoughness":return"Sheen Roughness";case"sheenRoughnessMap":return"Sheen Roughness Map";case"shininess":return"Shininess";case"side":return"Side";case"size":return"Size";case"sizeAttenuation":return"Size Attenuation";case"specular":return"Specular";case"specularColor":return"Specular Color";case"specularColorMap":return"Specular Color Map";case"specularIntensity":return"Specular Intensity";case"specularIntensityMap":return"Specular Map Intensity";case"thickness":return"Thickness";case"thicknessMap":return"Thickness Map";case"toneMapped":return"Tone Mapped";case"transmission":return"Transmission";case"transmissionMap":return"Transmission Map";case"transparent":return"Transparent";case"type":return"Type";case"uuid":return"UUID";case"uniforms":return"Uniforms";case"vertexColors":return"Vertex Colors";case"vertexShader":return"Vertex Shader";case"visible":return"Visible";case"wireframe":return"Wireframe"}return i}function on(i){const e=i.toLowerCase();return e.search("intensity")>-1||e==="anisotropyrotation"||e==="blendalpha"||e==="bumpscale"||e==="clearcoatroughness"||e==="displacementbias"||e==="displacementscale"||e==="metalness"||e==="opacity"||e==="reflectivity"||e==="refractionratio"||e==="roughness"||e==="sheenroughness"}function Nn(){const i=document.createElement("input");return i.type="file",new Promise((e,n)=>{i.addEventListener("change",function(){if(i.files===null)n();else{const t=i.files[0],s=new FileReader;s.onload=function(r){e(r.target.result)},s.readAsDataURL(t)}}),i.click()})}const zn=[{title:"Front",value:f.FrontSide},{title:"Back",value:f.BackSide},{title:"Double",value:f.DoubleSide}],Bn=[{title:"No Blending",value:f.NoBlending},{title:"Normal",value:f.NormalBlending},{title:"Additive",value:f.AdditiveBlending},{title:"Subtractive",value:f.SubtractiveBlending},{title:"Multiply",value:f.MultiplyBlending},{title:"Custom",value:f.CustomBlending}],Vn=[{title:"Add",value:f.AddEquation},{title:"Subtract",value:f.SubtractEquation},{title:"Reverse Subtract",value:f.ReverseSubtractEquation},{title:"Min",value:f.MinEquation},{title:"Max",value:f.MaxEquation}],Hn=[{title:"Zero",value:f.ZeroFactor},{title:"One",value:f.OneFactor},{title:"Src Color",value:f.SrcColorFactor},{title:"One Minus Src Color",value:f.OneMinusSrcColorFactor},{title:"Src Alpha",value:f.SrcAlphaFactor},{title:"One Minus Src Alpha",value:f.OneMinusSrcAlphaFactor},{title:"Dst Alpha",value:f.DstAlphaFactor},{title:"One Minus Dst Alpha",value:f.OneMinusDstAlphaFactor},{title:"Dst Color",value:f.DstColorFactor},{title:"One Minus Dst Color",value:f.OneMinusDstColorFactor},{title:"Src Alpha Saturate",value:f.SrcAlphaSaturateFactor},{title:"Constant Color",value:f.ConstantColorFactor},{title:"One Minus Constant Color",value:f.OneMinusConstantColorFactor},{title:"Constant Alpha",value:f.ConstantAlphaFactor},{title:"One Minus Constant Alpha",value:f.OneMinusConstantAlphaFactor}],Yn=[{title:"Zero",value:f.ZeroFactor},{title:"One",value:f.OneFactor},{title:"Src Color",value:f.SrcColorFactor},{title:"One Minus Src Color",value:f.OneMinusSrcColorFactor},{title:"Src Alpha",value:f.SrcAlphaFactor},{title:"One Minus Src Alpha",value:f.OneMinusSrcAlphaFactor},{title:"Dst Alpha",value:f.DstAlphaFactor},{title:"One Minus Dst Alpha",value:f.OneMinusDstAlphaFactor},{title:"Dst Color",value:f.DstColorFactor},{title:"One Minus Dst Color",value:f.OneMinusDstColorFactor},{title:"Constant Color",value:f.ConstantColorFactor},{title:"One Minus Constant Color",value:f.OneMinusConstantColorFactor},{title:"Constant Alpha",value:f.ConstantAlphaFactor},{title:"One Minus Constant Alpha",value:f.OneMinusConstantAlphaFactor}];function At(i,e){i.needsUpdate=!0,i.type="option",i.options=e}function Gn(i,e,n,t){return{type:"boolean",title:ni(i),prop:i,value:e,needsUpdate:!0,onChange:(s,r)=>{t.updateObject(n.uuid,`material.${i}`,r),t.updateObject(n.uuid,"material.needsUpdate",!0);const o=t.getScene(n.uuid);if(o!==null){const a=o.getObjectByProperty("uuid",n.uuid);pe(a,`material.${i}`,r)}}}}function Zn(i,e,n,t){const s={type:"number",title:ni(i),prop:i,value:e,min:void 0,max:void 0,step:.01,needsUpdate:!0,onChange:(r,o)=>{t.updateObject(n.uuid,`material.${i}`,o),t.updateObject(n.uuid,"material.needsUpdate",!0);const a=t.getScene(n.uuid);if(a!==null){const d=a.getObjectByProperty("uuid",n.uuid);pe(d,`material.${i}`,o)}}};switch(i){case"blending":At(s,Bn);break;case"blendDst":At(s,Yn);break;case"blendEquation":At(s,Vn);break;case"blendSrc":At(s,Hn);break;case"side":At(s,zn);break}return on(i)&&(s.value=Number(e),s.type="range",s.min=Math.min(0,s.value),s.max=Math.max(1,s.value),s.step=.01),s}function $n(i,e,n,t){const s={type:"string",title:ni(i),prop:i,value:e,needsUpdate:!0,onChange:(o,a)=>{t.updateObject(n.uuid,`material.${i}`,a),t.updateObject(n.uuid,"material.needsUpdate",!0);const d=t.getScene(n.uuid);if(d!==null){const c=d.getObjectByProperty("uuid",n.uuid);pe(c,`material.${i}`,a)}},onKeyDown:o=>{}};return(i==="vertexShader"||i==="fragmentShader")&&(s.disabled=!1,s.latest=s.value,s.onChange=(o,a)=>{s.latest=a,t.updateObject(n.uuid,`material.${i}`,a);const d=t.getScene(n.uuid);if(d!==null){const c=d.getObjectByProperty("uuid",n.uuid);pe(c,`material.${i}`,a)}},s.onKeyDown=o=>{if(o.key==="Enter"&&(o.altKey||o.metaKey)){t.updateObject(n.uuid,"material.needsUpdate",!0);const a=t.getScene(n.uuid);if(a!==null){const d=a.getObjectByProperty("uuid",n.uuid);pe(d,"material.needsUpdate",!0)}}}),s}function Wn(i){return i.x!==void 0&&i.y!==void 0&&i.z===void 0}function Kn(i){return i.x!==void 0&&i.y!==void 0&&i.z!==void 0&&i.w===void 0}function Xn(i){return i.x!==void 0&&i.y!==void 0&&i.z!==void 0&&i.w!==void 0}function bi(i){i.sort((e,n)=>e.title<n.title?-1:e.title>n.title?1:0)}function Ft(i,e,n,t,s="",r=!1){const o=ni(i).split(".")[0].replaceAll("[","").replaceAll("]",""),a=s.length>0?`${s}.${i}`:i,d=typeof e;if(d==="boolean"||d==="string")return{title:o,prop:a,type:d,value:e,disabled:r,onChange:(c,u)=>{t.updateObject(n.uuid,`material.${a}`,u);const p=t.getScene(n.uuid);if(p!==null){const _=p.getObjectByProperty("uuid",n.uuid);pe(_,`material.${a}`,u)}}};if(d==="number"){const c={title:o,prop:a,type:"number",value:e,step:.01,disabled:r,onChange:(u,p)=>{t.updateObject(n.uuid,`material.${a}`,p);const _=t.getScene(n.uuid);if(_!==null){const y=_.getObjectByProperty("uuid",n.uuid);pe(y,`material.${a}`,p)}}};return on(o)&&(c.type="range",c.min=0,c.max=1),c}else{if(e.isColor)return{title:o,prop:a,type:"color",value:e,disabled:r,onChange:(c,u)=>{const p=new f.Color(u);t.updateObject(n.uuid,`material.${a}`,p);const _=t.getScene(n.uuid);if(_!==null){const y=_.getObjectByProperty("uuid",n.uuid);pe(y,`material.${a}`,p)}}};if(Array.isArray(e)){const c=[];for(const u in e){const p=e[u],_=`[${u.toString()}]`;if(p.value!==void 0){const y=Ft(`${_}.value`,p.value,n,t,a,r);y!==void 0&&c.push(y)}else{const y=Ft(_,p,n,t,a,r);y!==void 0&&c.push(y)}}if(c.length>0)return bi(c),{title:o,items:c}}else{if(Wn(e))return{title:o,prop:a,type:"vector2",value:e,disabled:r,onChange:(c,u)=>{t.updateObject(n.uuid,`material.${a}`,u);const p=t.getScene(n.uuid);if(p!==null){const _=p.getObjectByProperty("uuid",n.uuid);pe(_,`material.${a}`,u)}}};if(Kn(e))return{title:o,prop:a,type:"grid3",value:e,disabled:r,onChange:(c,u)=>{t.updateObject(n.uuid,`material.${a}`,u);const p=t.getScene(n.uuid);if(p!==null){const _=p.getObjectByProperty("uuid",n.uuid);pe(_,`material.${a}`,u)}}};if(Xn(e))return{title:o,prop:a,type:"grid4",value:e,disabled:r,onChange:(c,u)=>{t.updateObject(n.uuid,`material.${a}`,u);const p=t.getScene(n.uuid);if(p!==null){const _=p.getObjectByProperty("uuid",n.uuid);pe(_,`material.${a}`,u)}}};if(e.isEuler)return{title:o,prop:a,type:"euler",value:e,disabled:r,onChange:(c,u)=>{t.updateObject(n.uuid,`material.${a}`,u);const p=t.getScene(n.uuid);if(p!==null){const _=p.getObjectByProperty("uuid",n.uuid);pe(_,`material.${a}`,u)}}};if(e.src!==void 0)return{title:o,type:"image",value:e,disabled:r,onChange:(c,u)=>{const p=jn(i),_=s.length>0?`${s}.${p}`:p;t.createTexture(n.uuid,`material.${_}`,u);const y=t.getScene(n.uuid);if(y!==null){const A=y.getObjectByProperty("uuid",n.uuid);if(A!==void 0){const I=F=>{const v=A.material,E=_.split(".");switch(E.length){case 1:v[E[0]]=F;break;case 2:v[E[0]][E[1]]=F;break;case 3:v[E[0]][E[1]][E[2]]=F;break;case 4:v[E[0]][E[1]][E[2]][E[3]]=F;break;case 5:v[E[0]][E[1]][E[2]][E[3]][E[4]]=F;break}v.needsUpdate=!0};u.src.length>0?tn(u.src).then(F=>{F.offset.set(u.offset[0],u.offset[1]),F.repeat.set(u.repeat[0],u.repeat[1]),I(F)}):I(null)}}}};if(e.elements!==void 0)return{title:o,prop:a,type:e.elements.length>9?"grid4":"grid3",value:e,disabled:r,onChange:(c,u)=>{t.updateObject(n.uuid,`material.${a}`,u);const p=t.getScene(n.uuid);if(p!==null){const _=p.getObjectByProperty("uuid",n.uuid);pe(_,`material.${a}`,u)}}};{const c=[],u=i==="defines"||i==="extensions";try{for(const p in e){const _=e[p];if(_!==void 0)if(_.value!==void 0){const y=Ft(`${p}.value`,_.value,n,t,a,u);y!==void 0&&c.push(y)}else{const y=Ft(p,_,n,t,a,u);y!==void 0&&c.push(y)}}}catch{console.log("Issue cycling through material object:",i,e)}if(c.length>0)return bi(c),{title:o,items:c}}}}}function Li(i,e,n){const t=[];for(const s in i){if(!Fn(s))continue;const r=typeof i[s],o=i[s];if(r==="boolean")t.push(Gn(s,o,e,n));else if(r==="number")t.push(Zn(s,o,e,n));else if(r==="string")t.push($n(s,o,e,n));else if(r==="object"){const a=Ft(s,o,e,n);a!==void 0&&t.push(a)}else o!==void 0&&console.log("other:",s,r,o)}return bi(t),t.push({title:"Update Material",type:"button",onChange:()=>{n.updateObject(e.uuid,"material.needsUpdate",!0);const s=n.getScene(e.uuid);if(s!==null){const r=s.getObjectByProperty("uuid",e.uuid);pe(r,"material.needsUpdate",!0)}}}),t}function qn(i,e){const n=i.material;if(Array.isArray(n)){const t=[],s=n.length;for(let r=0;r<s;r++)t.push(m.jsx(lt,{title:`Material ${r}`,items:Li(n[r],i,e)},`Material ${r}`));return m.jsx(m.Fragment,{children:t})}else return m.jsx(lt,{title:"Material",items:Li(n,i,e)})}const Ii="data:image/gif;base64,R0lGODlhDgFkAIAAAP///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDIgNzkuZGJhM2RhM2I1LCAyMDIzLzEyLzE1LTEwOjQyOjM3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjUuNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyMDk3M0NEODAxQjQxMUVGODVGNENDMkUyMUExNDk1NSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyMDk3M0NEOTAxQjQxMUVGODVGNENDMkUyMUExNDk1NSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkE4ODc3Qzg5MDFCMzExRUY4NUY0Q0MyRTIxQTE0OTU1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkE4ODc3QzhBMDFCMzExRUY4NUY0Q0MyRTIxQTE0OTU1Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAAAAAAAsAAAAAA4BZAAAAv+Mj6nL7Q+jnLTai7PevPsPhuJIluaJpurKtu4Lx/JM1/aN5/rO9/4PDAqHxKLxiEwql8ym8wmNSqfUqvWKzWq33K73Cw6Lx+Sy+YxOq9fstvsNj8vn9Lr9js/r9/y+/w8YKDhIWGh4iJiouMjY6PgIGSk5SVlpeYmZqTkJAGDQ+dnpuekmGgAKejpKuiZqmprKqoZKGyrbOlqrejub6xvLGyw8TFzcprurGuvqybxq7ETbrItsCz0l7Zpc+6p9/cS967w9/S2FTF0u/mzehK4Oqz3eTl9vf4+fr7/P3+//DzCgwIEECxo8iDChwoUMGzp8CDGixIkUK1q8iDGjxo0XHDt6/AgypMiRJEuaPIkypcqVLFt+KwAAOw==";function Jn(i){const e=i.step!==void 0?i.step:.01,n=T.useRef(null),t=T.useRef(null),s=T.useRef(null),r=T.useRef(null),o=T.useRef(null),[a]=T.useState(i.value),[d,c]=T.useState(i.value.offset[0]),[u,p]=T.useState(i.value.offset[1]),[_,y]=T.useState(i.value.repeat[0]),[A,I]=T.useState(i.value.repeat[1]);function F(E,w,C,U,L){if(i.onChange!==void 0){const x=i.prop!==void 0?i.prop:i.title;i.onChange(x,{src:E,offset:[w,C],repeat:[U,L]})}}function v(E){const w=n.current.src,C=E.target.value;switch(E.target){case t.current:c(C),F(w,C,u,_,A);break;case s.current:p(C),F(w,d,C,_,A);break;case r.current:y(C),F(w,d,u,C,A);break;case o.current:I(C),F(w,d,u,_,C);break}}return m.jsxs("div",{className:"imageField",children:[m.jsx("img",{alt:i.title,ref:n,onClick:()=>{Nn().then(E=>{n.current.src=E,F(E,d,u,_,A)})},src:a.src.length>0?a.src:Ii}),m.jsxs("div",{className:"fields",children:[m.jsxs("div",{children:[m.jsx("label",{children:"Offset:"}),m.jsx("input",{ref:t,type:"number",value:d,step:e,onChange:v}),m.jsx("input",{ref:s,type:"number",value:u,step:e,onChange:v})]}),m.jsxs("div",{children:[m.jsx("label",{children:"Repeat:"}),m.jsx("input",{ref:r,type:"number",value:_,step:e,onChange:v}),m.jsx("input",{ref:o,type:"number",value:A,step:e,onChange:v})]}),m.jsx("button",{onClick:()=>{F("",d,u,_,A),n.current.src=Ii},children:"Clear"})]})]})}function Jt(i){let e=i.value;e!==void 0&&(e.isColor!==void 0?e=_i(i.value):i.type==="color"&&(e=_i(new f.Color(i.value))));const[n,t]=T.useState(e),s=T.useRef(null),r=c=>{let u=c.target.value;if(i.type==="boolean")u=c.target.checked;else if(i.type==="option"&&(typeof i.value=="number"?u=Number(u):typeof i.value=="boolean"?u=!!u:typeof i.value=="object"&&(u=JSON.parse(u)),i.options!==void 0)){const p=i.options.length;for(let _=0;_<p&&i.options[_].value!==u;_++);}t(u),i.onChange!==void 0&&i.onChange(i.prop!==void 0?i.prop:i.title,u)},o={};i.disabled&&(o.opacity=.8);const a=i.type==="string"&&(n.length>100||n.search(`
|
30
|
-
`)>-1),d=a||i.type==="image"||i.type==="vector2";return m.jsxs("div",{className:`field ${d?"block":""}`,style:o,children:[i.type!=="button"&&m.jsx("label",{ref:s,children:Nt(i.title)},"fieldLabel"),i.type==="string"&&!a&&m.jsx("input",{type:"text",disabled:i.disabled,onChange:r,value:n}),i.type==="string"&&a&&m.jsx("textarea",{cols:50,rows:10,disabled:i.disabled!==void 0?i.disabled:!0,onChange:r,onKeyDown:c=>{i.onKeyDown!==void 0&&i.onKeyDown(c)},value:n}),i.type==="boolean"&&m.jsx("input",{type:"checkbox",disabled:i.disabled,onChange:r,checked:n}),i.type==="number"&&m.jsx(gt,{value:n,type:i.type,prop:i.prop!==void 0?i.prop:i.title,min:i.min,max:i.max,step:i.step,disabled:i.disabled,labelRef:s,onChange:i.onChange}),i.type==="range"&&m.jsx(gt,{value:n,type:i.type,prop:i.prop!==void 0?i.prop:i.title,min:i.min,max:i.max,step:i.step,disabled:i.disabled,labelRef:s,onChange:i.onChange}),i.type==="color"&&m.jsxs(m.Fragment,{children:[m.jsx("input",{type:"text",value:n.toString(),onChange:r,disabled:i.disabled,className:"color"}),m.jsx("input",{type:"color",value:n,onChange:r,disabled:i.disabled})]}),i.type==="button"&&m.jsx("button",{disabled:i.disabled,onClick:()=>{i.onChange!==void 0&&i.onChange(i.prop!==void 0?i.prop:i.title,!0)},children:i.title}),i.type==="image"&&m.jsx(Jn,{title:i.title,prop:i.prop,value:i.value,onChange:i.onChange}),i.type==="option"&&m.jsx(m.Fragment,{children:m.jsx("select",{onChange:r,disabled:i.disabled,defaultValue:i.value,children:i.options?.map((c,u)=>m.jsx("option",{value:c.value,children:Nt(c.title)},u))})}),i.type==="vector2"&&m.jsx(Un,{step:i.step,value:n,min:0,max:1,onChange:r}),i.type==="grid3"&&m.jsx(Pi,{step:i.step,value:n,onChange:r}),i.type==="grid4"&&m.jsx(kn,{step:i.step,value:n,onChange:r}),i.type==="euler"&&m.jsx(Pi,{step:i.step,value:n,onChange:r})]})}function Qn(i){return"items"in i}function lt(i){const e=[];return i.items.forEach(n=>{Qn(n)?e.push(m.jsx(lt,{title:Nt(n.title),items:n.items},Math.random())):e.push(m.jsx(Jt,{title:n.title,prop:n.prop,value:n.value,type:n.type,min:n.min,max:n.max,step:n.step,disabled:n.disabled,options:n.options,onChange:(t,s)=>{n.onChange!==void 0&&n.onChange(t,s)},onKeyDown:t=>{n.onKeyDown!==void 0&&n.onKeyDown(t)}},Math.random()))}),m.jsx(Bt,{label:i.title,open:i.expanded===!0,children:e})}function es(i){const[e]=T.useState([]),[n]=T.useState([]),[t,s]=T.useState(0);return T.useEffect(()=>{const r=a=>{const d=JSON.parse(a.value),c=[];d.items.forEach(u=>{c.push({type:u.type,prop:u.prop,title:u.title!==void 0?u.title:u.prop,value:u.value,min:u.min,max:u.max,step:u.step,options:u.options,disabled:u.disabled,onChange:(p,_)=>{i.three.updateGroup(d.title,p,_)}})}),e.push(m.jsx(lt,{title:d.title,items:c},Math.random())),n.push(d.title),s(Date.now())},o=a=>{const d=a.value,c=n.length;for(let u=0;u<c;u++)if(d===n[u]){e.splice(u,1),n.splice(u,1),s(Date.now());return}};return B.addEventListener(z.ADD_GROUP,r),B.addEventListener(z.REMOVE_GROUP,o),()=>{B.removeEventListener(z.ADD_GROUP,r),B.removeEventListener(z.REMOVE_GROUP,o)}},[]),m.jsx("div",{className:"customGroups",children:e},t)}function Ui(i){switch(i){case"fov":return"FOV";case"zoom":return"Zoom";case"near":return"Near";case"far":return"Far";case"focus":return"Focus";case"aspect":return"Aspect";case"filmGauge":return"Film Gauge";case"filmOffset":return"Film Offset";case"left":return"Left";case"right":return"Right";case"top":return"Top";case"bottom":return"Bottom"}return i}function ts(i,e){const n=[];if(i.perspectiveCameraInfo!==void 0)for(const t in i.perspectiveCameraInfo)n.push({title:Ui(t),prop:t,type:"number",step:.01,value:i.perspectiveCameraInfo[t],onChange:(s,r)=>{e.updateObject(i.uuid,s,r),e.requestMethod(i.uuid,"updateProjectionMatrix");const o=e.getScene(i.uuid);if(o!==null){const a=o.getObjectByProperty("uuid",i.uuid);a!==void 0&&(pe(a,s,r),a.updateProjectionMatrix())}}});else if(i.orthographicCameraInfo!==void 0)for(const t in i.orthographicCameraInfo)n.push({title:Ui(t),prop:t,type:"number",step:.01,value:i.perspectiveCameraInfo[t],onChange:(s,r)=>{e.updateObject(i.uuid,s,r),e.requestMethod(i.uuid,"updateProjectionMatrix");const o=e.getScene(i.uuid);if(o!==null){const a=o.getObjectByProperty("uuid",i.uuid);a!==void 0&&(pe(a,s,r),a.updateProjectionMatrix())}}});return m.jsx(lt,{title:"Camera",items:n})}function is(i,e){const n=new f.Matrix4;n.elements=i.matrix;const t=new f.Vector3,s=new f.Euler,r=new f.Vector3;i.uuid.length>0&&(t.setFromMatrixPosition(n),s.setFromRotationMatrix(n),r.setFromMatrixScale(n));const o=(a,d)=>{const c=a==="rotation"?{x:d._x,y:d._y,z:d._z}:d;e.updateObject(i.uuid,a,c);const u=e.getScene(i.uuid);if(u!==null){const p=u.getObjectByProperty("uuid",i.uuid);pe(p,a,c)}};return m.jsx(lt,{title:"Transform",items:[{title:"Position",prop:"position",type:"grid3",step:.1,value:t,onChange:o},{title:"Rotation",prop:"rotation",type:"grid3",value:s,onChange:o},{title:"Scale",prop:"scale",type:"grid3",value:r,onChange:o},{title:"Visible",prop:"visible",type:"boolean",value:i.visible,onChange:o}]})}function ki(i){switch(i){case"color":return"Color";case"intensity":return"Intensity";case"decay":return"Decay";case"distance":return"Distance";case"angle":return"Angle";case"penumbra":return"Penumbra";case"groundColor":return"Ground Color";case"width":return"Width";case"height":return"Height"}return i}function ns(i,e){const n=[];if(i.lightInfo!==void 0)for(const t in i.lightInfo){const s=i.lightInfo[t];s!==void 0&&(s.isColor!==void 0?n.push({title:ki(t),prop:t,type:"color",value:s,onChange:(r,o)=>{const a=new f.Color(o);e.updateObject(i.uuid,r,a);const d=e.getScene(i.uuid);if(d!==null){const c=d.getObjectByProperty("uuid",i.uuid);pe(c,r,a)}}}):n.push({title:ki(t),prop:t,type:typeof s,value:s,step:typeof s=="number"?.01:void 0,onChange:(r,o)=>{e.updateObject(i.uuid,r,o);const a=e.getScene(i.uuid);if(a!==null){const d=a.getObjectByProperty("uuid",i.uuid);pe(d,r,o)}}}))}return m.jsx(lt,{title:"Light",items:n})}function ss(i,e){const n=[],t=[];let s=0;i.animations.forEach(o=>{s=Math.max(s,o.duration),o.duration>0&&t.push({title:o.name,items:[{title:"Duration",type:"number",value:o.duration,disabled:!0},{title:"Blend Mode",type:"option",disabled:!0,options:[{title:"Normal",value:2500},{title:"Additive",value:2501}]}]})}),n.push({title:"Animations",items:t});const r=e.getScene(i.uuid);if(r!==null){const o=r.getObjectByProperty("uuid",i.uuid);let a=!1;if(o!==void 0){const d=o.mixer;if(a=d!==void 0,a){const c=[{title:"Time Scale",type:"range",value:d.timeScale,step:.01,min:-1,max:2,onChange:(u,p)=>{d.timeScale=p,e.updateObject(i.uuid,"mixer.timeScale",p)}}];c.push({title:"Stop All",type:"button",onChange:()=>{d.stopAllAction(),e.requestMethod(i.uuid,"stopAllAction",void 0,"mixer")}}),n.push({title:"Mixer",items:c})}}}return m.jsx(lt,{title:"Animation",items:n})}const cn={name:"",uuid:"",type:"",visible:!1,matrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],animations:[],material:void 0,perspectiveCameraInfo:void 0,orthographicCameraInfo:void 0,lightInfo:void 0,children:[]};let Re={...cn};function ln(i){const[e,n]=T.useState(-1);T.useEffect(()=>{function o(d){Re={...d.value},n(Date.now())}function a(){Re={...cn},n(Date.now())}return B.addEventListener(z.SET_SCENE,a),B.addEventListener(z.SET_OBJECT,o),()=>{B.removeEventListener(z.SET_SCENE,a),B.removeEventListener(z.SET_OBJECT,o)}},[]);const t=Re.type.toLowerCase(),s=Re.animations.length>0||Re.mixer!==void 0,r=t.search("mesh")>-1||t.search("line")>-1||t.search("points")>-1;return m.jsx(Bt,{label:"Inspector",children:m.jsx("div",{id:"Inspector",className:i.class,children:Re.uuid.length>0&&m.jsxs(m.Fragment,{children:[m.jsxs(m.Fragment,{children:[m.jsx(Jt,{type:"string",title:"Name",prop:"name",value:Re.name,disabled:!0}),m.jsx(Jt,{type:"string",title:"Type",prop:"type",value:Re.type,disabled:!0}),m.jsx(Jt,{type:"string",title:"UUID",prop:"uuid",value:Re.uuid,disabled:!0})]}),m.jsxs(m.Fragment,{children:[is(Re,i.three),s?ss(Re,i.three):null,t.search("camera")>-1?ts(Re,i.three):null,t.search("light")>-1?ns(Re,i.three):null,r?qn(Re,i.three):null]})]})},e)},"Inspector")}function hn(i){const[e]=T.useState([]),[n]=T.useState([]),[t,s]=T.useState(0),r=d=>{const c=d.value;e.push(c),n.push(m.jsx(Bt,{label:`Scene: ${c.name}`,scene:c,open:!0,onRefresh:()=>{i.three.refreshScene(c.name)},children:m.jsx(Oi,{child:c,scene:c,three:i.three})},Math.random())),s(Date.now())},o=d=>{const c=d.value;for(let u=0;u<e.length;u++)if(c.uuid===e[u].uuid){e[u]=c,n[u]=m.jsx(Bt,{label:`Scene: ${c.name}`,scene:c,open:!0,onRefresh:()=>{i.three.refreshScene(c.name)},children:m.jsx(Oi,{child:c,scene:c,three:i.three})},Math.random()),s(Date.now());return}},a=d=>{const c=d.value;for(let u=0;u<e.length;u++)if(c.uuid===e[u].uuid){e.splice(u,1),n.splice(u,1),s(Date.now());return}};return T.useEffect(()=>(B.addEventListener(z.ADD_SCENE,r),B.addEventListener(z.REFRESH_SCENE,o),B.addEventListener(z.REMOVE_SCENE,a),()=>{B.removeEventListener(z.ADD_SCENE,r),B.removeEventListener(z.REFRESH_SCENE,o),B.removeEventListener(z.REMOVE_SCENE,a)}),[]),m.jsxs("div",{id:"SidePanel",children:[m.jsx("div",{className:"scenes",children:n},t),m.jsx(ln,{three:i.three}),m.jsx(es,{three:i.three})]})}function rs(i){return T.useEffect(()=>{function e(a){let d=null;return i.three.scenes.forEach(c=>{a.search(c.uuid)>-1&&(d=c)}),d}const n=a=>{const d=a.value,u=e(d)?.getObjectByProperty("uuid",d);u!==void 0&&i.three.setObject(u)},t=(a,d,c)=>{const p=e(a)?.getObjectByProperty("uuid",a);p!==void 0&&pe(p,d,c)},s=a=>{const d=a.value,{key:c,value:u,uuid:p}=d;t(p,c,u)},r=a=>{const d=a.value,u=e(d.uuid)?.getObjectByProperty("uuid",d.uuid);if(u!==void 0){const p=_=>{const y=d.key.split(".");switch(y.length){case 1:u[y[0]]=_;break;case 2:u[y[0]][y[1]]=_;break;case 3:u[y[0]][y[1]][y[2]]=_;break;case 4:u[y[0]][y[1]][y[2]][y[3]]=_;break;case 5:u[y[0]][y[1]][y[2]][y[3]][y[4]]=_;break}u.material.needsUpdate=!0};d.value.src.length>0?tn(d.value.src).then(_=>{_.offset.set(d.value.offset[0],d.value.offset[1]),_.repeat.set(d.value.repeat[0],d.value.repeat[1]),p(_)}):p(null)}},o=a=>{const{key:d,uuid:c,value:u,subitem:p}=a.value,y=e(c)?.getObjectByProperty("uuid",c);if(y!==void 0)try{p!==void 0?Sn(y,p)[d](u):y[d](u)}catch(A){console.log("Error requesting method:"),console.log(A),console.log(d),console.log(u)}};return B.addEventListener(z.GET_OBJECT,n),B.addEventListener(z.UPDATE_OBJECT,s),B.addEventListener(z.CREATE_TEXTURE,r),B.addEventListener(z.REQUEST_METHOD,o),()=>{B.removeEventListener(z.GET_OBJECT,n),B.removeEventListener(z.UPDATE_OBJECT,s),B.removeEventListener(z.CREATE_TEXTURE,r),B.removeEventListener(z.REQUEST_METHOD,o)}},[]),null}class as extends f.Line{constructor(e,n){const t=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],s=new f.BufferGeometry;s.setAttribute("position",new f.Float32BufferAttribute(t,3)),s.computeBoundingSphere();const r=new f.LineBasicMaterial({fog:!1});super(s,r),this.light=e,this.color=n,this.type="RectAreaLightHelper";const o=[1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],a=new f.BufferGeometry;a.setAttribute("position",new f.Float32BufferAttribute(o,3)),a.computeBoundingSphere(),this.add(new f.Mesh(a,new f.MeshBasicMaterial({side:f.BackSide,fog:!1})))}updateMatrixWorld(){if(this.scale.set(.5*this.light.width,.5*this.light.height,1),this.color!==void 0)this.material.color.set(this.color),this.children[0].material.color.set(this.color);else{this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);const e=this.material.color,n=Math.max(e.r,e.g,e.b);n>1&&e.multiplyScalar(1/n),this.children[0].material.color.copy(this.material.color)}this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld),this.children[0].matrixWorld.copy(this.matrixWorld)}dispose(){this.geometry.dispose(),this.material.dispose(),this.children[0].geometry.dispose(),this.children[0].material.dispose()}}const Fi={type:"change"},oi={type:"start"},ji={type:"end"},Zt=new f.Ray,Ni=new f.Plane,os=Math.cos(70*f.MathUtils.DEG2RAD);class cs extends f.EventDispatcher{constructor(e,n){super(),this.object=e,this.domElement=n,this.domElement.style.touchAction="none",this.enabled=!0,this.target=new f.Vector3,this.cursor=new f.Vector3,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:f.MOUSE.ROTATE,MIDDLE:f.MOUSE.DOLLY,RIGHT:f.MOUSE.PAN},this.touches={ONE:f.TOUCH.ROTATE,TWO:f.TOUCH.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this.getPolarAngle=function(){return a.phi},this.getAzimuthalAngle=function(){return a.theta},this.getDistance=function(){return this.object.position.distanceTo(this.target)},this.listenToKeyEvents=function(h){h.addEventListener("keydown",Pe),this._domElementKeyEvents=h},this.stopListenToKeyEvents=function(){this._domElementKeyEvents.removeEventListener("keydown",Pe),this._domElementKeyEvents=null},this.saveState=function(){t.target0.copy(t.target),t.position0.copy(t.object.position),t.zoom0=t.object.zoom},this.reset=function(){t.target.copy(t.target0),t.object.position.copy(t.position0),t.object.zoom=t.zoom0,t.object.updateProjectionMatrix(),t.dispatchEvent(Fi),t.update(),r=s.NONE},this.update=function(){const h=new f.Vector3,R=new f.Quaternion().setFromUnitVectors(e.up,new f.Vector3(0,1,0)),$=R.clone().invert(),ee=new f.Vector3,Oe=new f.Quaternion,je=new f.Vector3,Se=2*Math.PI;return function(Ht=null){const Yt=t.object.position;h.copy(Yt).sub(t.target),h.applyQuaternion(R),a.setFromVector3(h),t.autoRotate&&r===s.NONE&&Ue($e(Ht)),t.enableDamping?(a.theta+=d.theta*t.dampingFactor,a.phi+=d.phi*t.dampingFactor):(a.theta+=d.theta,a.phi+=d.phi);let Ne=t.minAzimuthAngle,ze=t.maxAzimuthAngle;isFinite(Ne)&&isFinite(ze)&&(Ne<-Math.PI?Ne+=Se:Ne>Math.PI&&(Ne-=Se),ze<-Math.PI?ze+=Se:ze>Math.PI&&(ze-=Se),Ne<=ze?a.theta=Math.max(Ne,Math.min(ze,a.theta)):a.theta=a.theta>(Ne+ze)/2?Math.max(Ne,a.theta):Math.min(ze,a.theta)),a.phi=Math.max(t.minPolarAngle,Math.min(t.maxPolarAngle,a.phi)),a.makeSafe(),t.enableDamping===!0?t.target.addScaledVector(u,t.dampingFactor):t.target.add(u),t.target.sub(t.cursor),t.target.clampLength(t.minTargetRadius,t.maxTargetRadius),t.target.add(t.cursor);let ut=!1;if(t.zoomToCursor&&L||t.object.isOrthographicCamera)a.radius=Qe(a.radius);else{const Ge=a.radius;a.radius=Qe(a.radius*c),ut=Ge!=a.radius}if(h.setFromSpherical(a),h.applyQuaternion($),Yt.copy(t.target).add(h),t.object.lookAt(t.target),t.enableDamping===!0?(d.theta*=1-t.dampingFactor,d.phi*=1-t.dampingFactor,u.multiplyScalar(1-t.dampingFactor)):(d.set(0,0,0),u.set(0,0,0)),t.zoomToCursor&&L){let Ge=null;if(t.object.isPerspectiveCamera){const at=h.length();Ge=Qe(at*c);const vt=at-Ge;t.object.position.addScaledVector(C,vt),t.object.updateMatrixWorld(),ut=!!vt}else if(t.object.isOrthographicCamera){const at=new f.Vector3(U.x,U.y,0);at.unproject(t.object);const vt=t.object.zoom;t.object.zoom=Math.max(t.minZoom,Math.min(t.maxZoom,t.object.zoom/c)),t.object.updateProjectionMatrix(),ut=vt!==t.object.zoom;const Gt=new f.Vector3(U.x,U.y,0);Gt.unproject(t.object),t.object.position.sub(Gt).add(at),t.object.updateMatrixWorld(),Ge=h.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),t.zoomToCursor=!1;Ge!==null&&(this.screenSpacePanning?t.target.set(0,0,-1).transformDirection(t.object.matrix).multiplyScalar(Ge).add(t.object.position):(Zt.origin.copy(t.object.position),Zt.direction.set(0,0,-1).transformDirection(t.object.matrix),Math.abs(t.object.up.dot(Zt.direction))<os?e.lookAt(t.target):(Ni.setFromNormalAndCoplanarPoint(t.object.up,t.target),Zt.intersectPlane(Ni,t.target))))}else if(t.object.isOrthographicCamera){const Ge=t.object.zoom;t.object.zoom=Math.max(t.minZoom,Math.min(t.maxZoom,t.object.zoom/c)),Ge!==t.object.zoom&&(t.object.updateProjectionMatrix(),ut=!0)}return c=1,L=!1,ut||ee.distanceToSquared(t.object.position)>o||8*(1-Oe.dot(t.object.quaternion))>o||je.distanceToSquared(t.target)>o?(t.dispatchEvent(Fi),ee.copy(t.object.position),Oe.copy(t.object.quaternion),je.copy(t.target),!0):!1}}(),this.dispose=function(){t.domElement.removeEventListener("contextmenu",We),t.domElement.removeEventListener("pointerdown",be),t.domElement.removeEventListener("pointercancel",Ae),t.domElement.removeEventListener("wheel",G),t.domElement.removeEventListener("pointermove",xe),t.domElement.removeEventListener("pointerup",Ae),t.domElement.getRootNode().removeEventListener("keydown",q,{capture:!0}),t._domElementKeyEvents!==null&&(t._domElementKeyEvents.removeEventListener("keydown",Pe),t._domElementKeyEvents=null)};const t=this,s={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6};let r=s.NONE;const o=1e-6,a=new f.Spherical,d=new f.Spherical;let c=1;const u=new f.Vector3,p=new f.Vector2,_=new f.Vector2,y=new f.Vector2,A=new f.Vector2,I=new f.Vector2,F=new f.Vector2,v=new f.Vector2,E=new f.Vector2,w=new f.Vector2,C=new f.Vector3,U=new f.Vector2;let L=!1;const x=[],oe={};let te=!1;function $e(h){return h!==null?2*Math.PI/60*t.autoRotateSpeed*h:2*Math.PI/60/60*t.autoRotateSpeed}function j(h){const R=Math.abs(h*.01);return Math.pow(.95,t.zoomSpeed*R)}function Ue(h){d.theta-=h}function ye(h){d.phi-=h}const Ce=function(){const h=new f.Vector3;return function($,ee){h.setFromMatrixColumn(ee,0),h.multiplyScalar(-$),u.add(h)}}(),Te=function(){const h=new f.Vector3;return function($,ee){t.screenSpacePanning===!0?h.setFromMatrixColumn(ee,1):(h.setFromMatrixColumn(ee,0),h.crossVectors(t.object.up,h)),h.multiplyScalar($),u.add(h)}}(),ke=function(){const h=new f.Vector3;return function($,ee){const Oe=t.domElement;if(t.object.isPerspectiveCamera){const je=t.object.position;h.copy(je).sub(t.target);let Se=h.length();Se*=Math.tan(t.object.fov/2*Math.PI/180),Ce(2*$*Se/Oe.clientHeight,t.object.matrix),Te(2*ee*Se/Oe.clientHeight,t.object.matrix)}else t.object.isOrthographicCamera?(Ce($*(t.object.right-t.object.left)/t.object.zoom/Oe.clientWidth,t.object.matrix),Te(ee*(t.object.top-t.object.bottom)/t.object.zoom/Oe.clientHeight,t.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),t.enablePan=!1)}}();function He(h){t.object.isPerspectiveCamera||t.object.isOrthographicCamera?c/=h:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),t.enableZoom=!1)}function it(h){t.object.isPerspectiveCamera||t.object.isOrthographicCamera?c*=h:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),t.enableZoom=!1)}function Je(h,R){if(!t.zoomToCursor)return;L=!0;const $=t.domElement.getBoundingClientRect(),ee=h-$.left,Oe=R-$.top,je=$.width,Se=$.height;U.x=ee/je*2-1,U.y=-(Oe/Se)*2+1,C.set(U.x,U.y,1).unproject(t.object).sub(t.object.position).normalize()}function Qe(h){return Math.max(t.minDistance,Math.min(t.maxDistance,h))}function ht(h){p.set(h.clientX,h.clientY)}function nt(h){Je(h.clientX,h.clientX),v.set(h.clientX,h.clientY)}function ge(h){A.set(h.clientX,h.clientY)}function Ye(h){_.set(h.clientX,h.clientY),y.subVectors(_,p).multiplyScalar(t.rotateSpeed);const R=t.domElement;Ue(2*Math.PI*y.x/R.clientHeight),ye(2*Math.PI*y.y/R.clientHeight),p.copy(_),t.update()}function Mt(h){E.set(h.clientX,h.clientY),w.subVectors(E,v),w.y>0?He(j(w.y)):w.y<0&&it(j(w.y)),v.copy(E),t.update()}function dt(h){I.set(h.clientX,h.clientY),F.subVectors(I,A).multiplyScalar(t.panSpeed),ke(F.x,F.y),A.copy(I),t.update()}function Me(h){Je(h.clientX,h.clientY),h.deltaY<0?it(j(h.deltaY)):h.deltaY>0&&He(j(h.deltaY)),t.update()}function O(h){let R=!1;switch(h.code){case t.keys.UP:h.ctrlKey||h.metaKey||h.shiftKey?ye(2*Math.PI*t.rotateSpeed/t.domElement.clientHeight):ke(0,t.keyPanSpeed),R=!0;break;case t.keys.BOTTOM:h.ctrlKey||h.metaKey||h.shiftKey?ye(-2*Math.PI*t.rotateSpeed/t.domElement.clientHeight):ke(0,-t.keyPanSpeed),R=!0;break;case t.keys.LEFT:h.ctrlKey||h.metaKey||h.shiftKey?Ue(2*Math.PI*t.rotateSpeed/t.domElement.clientHeight):ke(t.keyPanSpeed,0),R=!0;break;case t.keys.RIGHT:h.ctrlKey||h.metaKey||h.shiftKey?Ue(-2*Math.PI*t.rotateSpeed/t.domElement.clientHeight):ke(-t.keyPanSpeed,0),R=!0;break}R&&(h.preventDefault(),t.update())}function S(h){if(x.length===1)p.set(h.pageX,h.pageY);else{const R=rt(h),$=.5*(h.pageX+R.x),ee=.5*(h.pageY+R.y);p.set($,ee)}}function P(h){if(x.length===1)A.set(h.pageX,h.pageY);else{const R=rt(h),$=.5*(h.pageX+R.x),ee=.5*(h.pageY+R.y);A.set($,ee)}}function N(h){const R=rt(h),$=h.pageX-R.x,ee=h.pageY-R.y,Oe=Math.sqrt($*$+ee*ee);v.set(0,Oe)}function ue(h){t.enableZoom&&N(h),t.enablePan&&P(h)}function X(h){t.enableZoom&&N(h),t.enableRotate&&S(h)}function D(h){if(x.length==1)_.set(h.pageX,h.pageY);else{const $=rt(h),ee=.5*(h.pageX+$.x),Oe=.5*(h.pageY+$.y);_.set(ee,Oe)}y.subVectors(_,p).multiplyScalar(t.rotateSpeed);const R=t.domElement;Ue(2*Math.PI*y.x/R.clientHeight),ye(2*Math.PI*y.y/R.clientHeight),p.copy(_)}function k(h){if(x.length===1)I.set(h.pageX,h.pageY);else{const R=rt(h),$=.5*(h.pageX+R.x),ee=.5*(h.pageY+R.y);I.set($,ee)}F.subVectors(I,A).multiplyScalar(t.panSpeed),ke(F.x,F.y),A.copy(I)}function me(h){const R=rt(h),$=h.pageX-R.x,ee=h.pageY-R.y,Oe=Math.sqrt($*$+ee*ee);E.set(0,Oe),w.set(0,Math.pow(E.y/v.y,t.zoomSpeed)),He(w.y),v.copy(E);const je=(h.pageX+R.x)*.5,Se=(h.pageY+R.y)*.5;Je(je,Se)}function Ee(h){t.enableZoom&&me(h),t.enablePan&&k(h)}function et(h){t.enableZoom&&me(h),t.enableRotate&&D(h)}function be(h){t.enabled!==!1&&(x.length===0&&(t.domElement.setPointerCapture(h.pointerId),t.domElement.addEventListener("pointermove",xe),t.domElement.addEventListener("pointerup",Ae)),!ri(h)&&(_t(h),h.pointerType==="touch"?Fe(h):se(h)))}function xe(h){t.enabled!==!1&&(h.pointerType==="touch"?st(h):_e(h))}function Ae(h){switch(si(h),x.length){case 0:t.domElement.releasePointerCapture(h.pointerId),t.domElement.removeEventListener("pointermove",xe),t.domElement.removeEventListener("pointerup",Ae),t.dispatchEvent(ji),r=s.NONE;break;case 1:const R=x[0],$=oe[R];Fe({pointerId:R,pageX:$.x,pageY:$.y});break}}function se(h){let R;switch(h.button){case 0:R=t.mouseButtons.LEFT;break;case 1:R=t.mouseButtons.MIDDLE;break;case 2:R=t.mouseButtons.RIGHT;break;default:R=-1}switch(R){case f.MOUSE.DOLLY:if(t.enableZoom===!1)return;nt(h),r=s.DOLLY;break;case f.MOUSE.ROTATE:if(h.ctrlKey||h.metaKey||h.shiftKey){if(t.enablePan===!1)return;ge(h),r=s.PAN}else{if(t.enableRotate===!1)return;ht(h),r=s.ROTATE}break;case f.MOUSE.PAN:if(h.ctrlKey||h.metaKey||h.shiftKey){if(t.enableRotate===!1)return;ht(h),r=s.ROTATE}else{if(t.enablePan===!1)return;ge(h),r=s.PAN}break;default:r=s.NONE}r!==s.NONE&&t.dispatchEvent(oi)}function _e(h){switch(r){case s.ROTATE:if(t.enableRotate===!1)return;Ye(h);break;case s.DOLLY:if(t.enableZoom===!1)return;Mt(h);break;case s.PAN:if(t.enablePan===!1)return;dt(h);break}}function G(h){t.enabled===!1||t.enableZoom===!1||r!==s.NONE||(h.preventDefault(),t.dispatchEvent(oi),Me(V(h)),t.dispatchEvent(ji))}function V(h){const R=h.deltaMode,$={clientX:h.clientX,clientY:h.clientY,deltaY:h.deltaY};switch(R){case 1:$.deltaY*=16;break;case 2:$.deltaY*=100;break}return h.ctrlKey&&!te&&($.deltaY*=10),$}function q(h){h.key==="Control"&&(te=!0,t.domElement.getRootNode().addEventListener("keyup",Q,{passive:!0,capture:!0}))}function Q(h){h.key==="Control"&&(te=!1,t.domElement.getRootNode().removeEventListener("keyup",Q,{passive:!0,capture:!0}))}function Pe(h){t.enabled===!1||t.enablePan===!1||O(h)}function Fe(h){switch(Vt(h),x.length){case 1:switch(t.touches.ONE){case f.TOUCH.ROTATE:if(t.enableRotate===!1)return;S(h),r=s.TOUCH_ROTATE;break;case f.TOUCH.PAN:if(t.enablePan===!1)return;P(h),r=s.TOUCH_PAN;break;default:r=s.NONE}break;case 2:switch(t.touches.TWO){case f.TOUCH.DOLLY_PAN:if(t.enableZoom===!1&&t.enablePan===!1)return;ue(h),r=s.TOUCH_DOLLY_PAN;break;case f.TOUCH.DOLLY_ROTATE:if(t.enableZoom===!1&&t.enableRotate===!1)return;X(h),r=s.TOUCH_DOLLY_ROTATE;break;default:r=s.NONE}break;default:r=s.NONE}r!==s.NONE&&t.dispatchEvent(oi)}function st(h){switch(Vt(h),r){case s.TOUCH_ROTATE:if(t.enableRotate===!1)return;D(h),t.update();break;case s.TOUCH_PAN:if(t.enablePan===!1)return;k(h),t.update();break;case s.TOUCH_DOLLY_PAN:if(t.enableZoom===!1&&t.enablePan===!1)return;Ee(h),t.update();break;case s.TOUCH_DOLLY_ROTATE:if(t.enableZoom===!1&&t.enableRotate===!1)return;et(h),t.update();break;default:r=s.NONE}}function We(h){t.enabled!==!1&&h.preventDefault()}function _t(h){x.push(h.pointerId)}function si(h){delete oe[h.pointerId];for(let R=0;R<x.length;R++)if(x[R]==h.pointerId){x.splice(R,1);return}}function ri(h){for(let R=0;R<x.length;R++)if(x[R]==h.pointerId)return!0;return!1}function Vt(h){let R=oe[h.pointerId];R===void 0&&(R=new f.Vector2,oe[h.pointerId]=R),R.set(h.pageX,h.pageY)}function rt(h){const R=h.pointerId===x[0]?x[1]:x[0];return oe[R]}t.domElement.addEventListener("contextmenu",We),t.domElement.addEventListener("pointerdown",be),t.domElement.addEventListener("pointercancel",Ae),t.domElement.addEventListener("wheel",G,{passive:!1}),t.domElement.getRootNode().addEventListener("keydown",q,{passive:!0,capture:!0}),this.update()}}const ls=Math.PI/180;function Ot(i,e,n,t,s){return t+(i-e)*(s-t)/(n-e)}function zi(i){return i*ls}/*!
|
29
|
+
C11,8.22,10.74,8,10.43,8z`})});function is(i){return u.jsx(qi.Reorder.Item,{value:i.title,children:u.jsxs("div",{children:[en,u.jsx("span",{children:i.title}),u.jsx("button",{className:"closeIcon",onClick:()=>{i.onDelete(i.index)},children:Js})]})},i.title)}function ss(i){const[e,t]=w.useState(!1),[s,n]=w.useState(i.options),a=h=>{i.onDragComplete(h),n(h)},r=h=>{const p=[...s];p.splice(h,1),a(p)},l=[];s.forEach((h,p)=>{l.push(u.jsx(is,{index:p,title:h,onDelete:r},h))});let d="dropdown draggable";return i.subdropdown&&(d+=" subdropdown"),u.jsxs("div",{className:d,onMouseEnter:()=>t(!0),onMouseLeave:()=>t(!1),children:[u.jsx(li,{title:i.title}),u.jsx(qi.Reorder.Group,{axis:"y",values:s,onReorder:a,style:{visibility:e?"visible":"hidden"},children:l})]})}function ns(i){const[e,t]=w.useState(!1),s=[];i.options.map((a,r)=>{i.onSelect!==void 0&&(a.onSelect=i.onSelect),s.push(u.jsx(rs,{option:a},r))});let n="dropdown";return i.subdropdown&&(n+=" subdropdown"),u.jsxs("div",{className:n,onMouseEnter:()=>t(!0),onMouseLeave:()=>t(!1),children:[u.jsx(li,{title:i.title}),u.jsx("ul",{style:{visibility:e?"visible":"hidden"},children:s})]})}function rs(i){const{option:e}=i,[t,s]=w.useState("");let n;switch(e.type){case"draggable":n=u.jsx(ss,{title:e.title,options:e.value,onDragComplete:a=>{e.onDragComplete!==void 0&&e.onDragComplete(a)},subdropdown:!0});break;case"dropdown":n=u.jsx(ns,{title:e.title,options:e.value,onSelect:e.onSelect,subdropdown:!0});break;case"option":n=u.jsx("button",{onClick:()=>{e.onSelect!==void 0&&e.onSelect(e.value),e.selectable&&(t!==e.title?s(e.title):s(""))},children:e.title});break}return u.jsx("li",{className:t===e.title?"selected":"",children:n},Ki())}function tn(i,e,t){function s(a){switch(e.forEach(r=>{r.callback(i,r.remote,a)}),a.event){case"custom":P.dispatchEvent({type:R.CUSTOM,value:a.data});break}}function n(a){switch(t.forEach(r=>{r.callback(i,r.remote,a)}),a.event){case"custom":P.dispatchEvent({type:R.CUSTOM,value:a.data});break}}i.listen=a=>{a.target==="editor"?n(a):s(a)}}function dt(i){const[e,t]=w.useState(i.open!==void 0?i.open:!0),s=!e||i.children===void 0,n=()=>{P.dispatchEvent({type:R.REMOVE_SCENE,value:i.scene})};return u.jsxs("div",{className:`accordion ${s?"hide":""}`,children:[u.jsxs("button",{className:"toggle",onClick:()=>{const a=!e;i.onToggle!==void 0&&i.onToggle(a),t(a)},children:[u.jsx("p",{className:`status ${e?"open":""}`,children:"Toggle"}),u.jsx("p",{className:"label",children:ht(i.label)})]}),i.onRefresh?u.jsxs(u.Fragment,{children:[u.jsx("button",{className:"refresh",onClick:i.onRefresh}),u.jsx("button",{className:"remove",onClick:n})]}):null,i.button,u.jsx("div",{className:e?"open":"",children:u.jsx("div",{children:i.children})},Math.random())]})}function ci(i){const e=w.useRef(null),[t,s]=w.useState(!1),n=i.child!==void 0&&i.child.children.length>0,a=[];return i.child!==void 0&&i.child.children.length>0&&i.child.children.map((r,l)=>{a.push(u.jsx(ci,{child:r,three:i.three},l))}),w.useEffect(()=>{if(i.child){const r=i.three.getScene(i.child.uuid);if(r!==null){const l=r.getObjectByProperty("uuid",i.child.uuid);l!==void 0&&(e.current.style.opacity=l.visible?"1":"0.25")}}},[t]),u.jsx(u.Fragment,{children:i.child!==void 0&&u.jsxs("div",{className:"childObject",children:[u.jsxs("div",{className:"child",children:[n?u.jsx("button",{className:"status",style:{backgroundPositionX:t?"-14px":"2px"},onClick:()=>{s(!t)}}):null,u.jsx("button",{className:"name",style:{left:n?"20px":"5px"},onClick:()=>{i.child!==void 0&&(i.three.getObject(i.child.uuid),t||s(!0))},children:i.child.name.length>0?`${i.child.name} (${i.child.type})`:`${i.child.type}::${i.child.uuid}`}),u.jsx("button",{className:"visibility",ref:e,onClick:()=>{if(i.child){const r=i.three.getScene(i.child.uuid);if(r!==null){const l=r.getObjectByProperty("uuid",i.child.uuid);if(l!==void 0){const d="visible",h=!l.visible;e.current.style.opacity=h?"1":"0.25",i.three.updateObject(i.child.uuid,d,h),$(l,d,h)}}}}}),u.jsx("div",{className:`icon ${Gs(i.child)}`})]}),u.jsx("div",{className:t?"open":"",children:u.jsx("div",{className:"container",children:a})})]},Math.random())})}function ni(i){const e=[];return i.child?.children.map((t,s)=>{e.push(u.jsx(ci,{child:t,scene:i.scene,three:i.three},s))}),u.jsx("div",{className:`scene ${i.class!==void 0?i.class:""}`,children:e})}function sn(i){const[e,t]=w.useState(i.defaultValue);return w.useEffect(()=>{let s=!1,n=-1,a=0,r=i.defaultValue;const l=g=>{s=!0,a=Number(i.input.current?.value),n=g.clientX,document.addEventListener("mouseup",h,!1),document.addEventListener("mousemove",d,!1),document.addEventListener("contextmenu",h,!1)},d=g=>{if(!s)return;const y=i.step!==void 0?i.step:1,x=(g.clientX-n)*y;r=Number((a+x).toFixed(4)),i.min!==void 0&&(r=Math.max(r,i.min)),i.max!==void 0&&(r=Math.min(r,i.max)),i.onChange!==void 0&&i.onChange(r),t(r)},h=()=>{s=!1,document.removeEventListener("mouseup",h),document.removeEventListener("mousemove",d),document.removeEventListener("contextmenu",h)},p=g=>{const y=Number(g.target.value);t(y)},f=g=>{const y=Number(g.target.value);i.onChange!==void 0&&i.onChange(y),t(y)};return i.input.current?.addEventListener("input",p),i.label.current?.addEventListener("mousedown",l,!1),i.sliderRef!==void 0&&i.sliderRef.current?.addEventListener("input",f),()=>{i.input.current?.removeEventListener("input",p),i.label.current?.removeEventListener("mousedown",l),i.sliderRef!==void 0&&i.sliderRef.current?.removeEventListener("input",f),document.removeEventListener("mouseup",h),document.removeEventListener("mousemove",d),document.removeEventListener("contextmenu",h)}},[]),e}function ke(i){const e=w.useRef(null),t=w.useRef(null),s=sn({label:i.labelRef,input:e,sliderRef:t,defaultValue:i.value,min:i.min,max:i.max,step:i.step,onChange:n=>{i.onChange!==void 0&&i.onChange(i.prop,n)}});return u.jsxs(u.Fragment,{children:[i.type==="number"&&u.jsx("input",{alt:i.alt,className:i.className,ref:e,type:"number",value:s,min:i.min,max:i.max,step:i.step,disabled:i.disabled,onChange:n=>{const a=Number(n.target.value);i.onChange!==void 0&&i.onChange(i.prop,a)}}),i.type==="range"&&u.jsxs(u.Fragment,{children:[u.jsx("input",{type:"text",value:s.toString(),disabled:i.disabled,ref:e,className:"min",onChange:n=>{const a=Number(n.target.value);i.onChange!==void 0&&i.onChange(i.prop,a)}}),u.jsx("input",{disabled:i.disabled,type:"range",value:s,min:i.min,max:i.max,step:i.step,ref:t,onChange:ai})]})]})}function nn(i){const e=w.useRef(null),t=w.useRef(null),s=w.useRef(null),n=w.useRef(null),a=w.useRef(null),r=w.useRef(null),[l,d]=w.useState(i.value),[h,p]=w.useState({min:Math.min(i.min,Math.min(i.value.x,i.value.y)),max:Math.max(i.max,Math.max(i.value.x,i.value.y))}),[f,g]=w.useState(!1);function y(){f||(window.addEventListener("mousemove",M),window.addEventListener("mouseup",x),window.addEventListener("mouseup",x),g(!0))}function x(){window.removeEventListener("mousemove",M),window.removeEventListener("mouseup",x),g(!1)}function M(b){const D=a.current.getBoundingClientRect(),O=we(0,99,b.clientX-D.left)/99,j=we(0,99,b.clientY-D.top)/99,W=ti(Dt(h.min,h.max,O),3),le=ti(Dt(h.min,h.max,j),3);i.onChange({target:{value:{x:W,y:le}}}),d({x:W,y:le})}function T(b){let D=l.x,O=l.y;b.target===e.current?D=Number(b.target.value):O=Number(b.target.value),d({x:D,y:O})}function _(){const b=Number(s.current.value);p({min:b,max:h.max}),(l.x<b||l.y<b)&&d({x:we(b,h.max,l.x),y:we(b,h.max,l.y)})}function v(){const b=Number(n.current.value);p({min:h.min,max:b}),(l.x>b||l.y>b)&&d({x:we(h.min,b,l.x),y:we(h.min,b,l.y)})}w.useEffect(()=>{const b=Jt(h.min,h.max,l.x),D=Jt(h.min,h.max,l.y);r.current.style.left=`${b*100}%`,r.current.style.top=`${D*100}%`},[h,l]);const C=i.step!==void 0?i.step:.01;return u.jsxs("div",{className:"vector2",children:[u.jsxs("div",{className:"fields",children:[u.jsxs("div",{children:[u.jsx("label",{children:"X:"}),u.jsx("input",{ref:e,type:"number",value:l.x,min:h.min,max:h.max,step:C,onChange:T})]}),u.jsxs("div",{children:[u.jsx("label",{children:"Y:"}),u.jsx("input",{ref:t,type:"number",value:l.y,min:h.min,max:h.max,step:C,onChange:T})]}),u.jsxs("div",{children:[u.jsx("label",{children:"Min:"}),u.jsx("input",{ref:s,type:"number",value:h.min,step:C,onChange:_})]}),u.jsxs("div",{children:[u.jsx("label",{children:"Max:"}),u.jsx("input",{ref:n,type:"number",value:h.max,step:C,onChange:v})]})]}),u.jsxs("div",{className:"input",ref:a,onMouseDown:y,onMouseUp:x,children:[u.jsx("div",{className:"x"}),u.jsx("div",{className:"y"}),u.jsx("div",{className:"pt",ref:r})]})]})}function Ti(i){const e=i.value.x!==void 0&&i.value.y!==void 0&&i.value.z!==void 0,t=i.value.isEuler!==void 0,s=i.value.elements!==void 0,n=i.step!==void 0?i.step:.01,a=[];if(e){const r=w.useMemo(()=>i.value,[]),l=(h,p)=>{r[h]=p,i.onChange({target:{value:r}})};["x","y","z"].forEach(h=>{const p=w.useRef(null);a.push(u.jsxs("div",{children:[u.jsx("label",{ref:p,children:h.toUpperCase()}),u.jsx(ke,{value:r[h],type:"number",prop:h,step:n,labelRef:p,onChange:l})]},h))})}else if(t){const r=w.useMemo(()=>i.value,[]),l=(h,p)=>{r[h]=p,i.onChange({target:{value:r}})};["_x","_y","_z"].forEach(h=>{const p=w.useRef(null);a.push(u.jsxs("div",{children:[u.jsx("label",{ref:p,children:h.substring(1).toUpperCase()}),u.jsx(ke,{value:r[h],type:"number",prop:h,step:n,labelRef:p,onChange:l})]},h))})}else if(s){const r=w.useMemo(()=>i.value,[]),l=(d,h)=>{const p=Number(d);r.elements[p]=h,i.onChange({target:{value:r}})};for(let d=0;d<9;d++){const h=w.useRef(null);a.push(u.jsxs("div",{children:[u.jsx("label",{ref:h,children:d+1}),u.jsx(ke,{value:r.elements[d],type:"number",prop:d.toString(),step:n,labelRef:h,onChange:l})]},d.toString()))}}return u.jsx("div",{className:"grid3",children:a},Math.random().toString())}function rn(i){const e=i.value.x!==void 0,t=i.step!==void 0?i.step:.01,s=[];if(e){const n=w.useMemo(()=>i.value,[]),a=(l,d)=>{n[l]=d,i.onChange({target:{value:n}})};["x","y","z","w"].forEach(l=>{const d=w.useRef(null);s.push(u.jsxs("div",{children:[u.jsx("label",{ref:d,children:l.toUpperCase()}),u.jsx(ke,{value:n.x,type:"number",prop:l,step:t,labelRef:d,onChange:a})]},l))})}else{const n=w.useMemo(()=>i.value,[]),a=(r,l)=>{const d=Number(r);n.elements[d]=l,i.onChange({target:{value:n}})};for(let r=0;r<16;r++){const l=w.useRef(null);s.push(u.jsxs("div",{children:[u.jsx("label",{ref:l,children:r+1}),u.jsx(ke,{value:n.elements[r],type:"number",prop:r.toString(),step:t,labelRef:l,onChange:a})]},r.toString()))}}return u.jsx("div",{className:"grid4",children:s})}function an(i){return!(i==="defaultAttributeValues"||i==="forceSinglePass"||i==="linecap"||i==="linejoin"||i==="linewidth"||i==="normalMapType"||i==="precision"||i==="shadowSide"||i==="uniformsGroups"||i==="uniformsNeedUpdate"||i==="userData"||i==="version"||i==="wireframeLinecap"||i==="wireframeLinejoin"||i==="wireframeLinewidth"||i.slice(0,4)==="clip"||i.slice(0,7)==="polygon"||i.slice(0,7)==="stencil"||i.slice(0,2)==="is")}function on(i){switch(i){case"Alpha Map":return"alphaMap";case"Anisotropy Map":return"anisotropyMap";case"AO Map":return"aoMap";case"Bump Map":return"bumpMap";case"Clearcoat Map":return"clearcoatMap";case"Clearcoat Normal Map":return"clearcoatNormalMap";case"Clearcoat Roughness Map":return"clearcoatRoughnessMap";case"Displacement Map":return"displacementMap";case"Emissive Map":return"emissiveMap";case"Gradient Map":return"gradientMap";case"Iridescence Map":return"iridescenceMap";case"Iridescence Thickness Map":return"iridescenceThicknessMap";case"Map":return"map";case"Matcap":return"matcap";case"Normal Map":return"normalMap";case"Roughness Map":return"roughnessMap";case"Sheen Color Map":return"sheenColorMap";case"Sheen Roughness Map":return"sheenRoughnessMap";case"Specular Color Map":return"specularColorMap";case"Specular Map Intensity":return"specularIntensityMap";case"Thickness Map":return"thicknessMap";case"Transmission Map":return"transmissionMap"}return i}function It(i){switch(i){case"alphaHash":return"Alpha Hash";case"alphaMap":return"Alpha Map";case"alphaToCoverage":return"Alpha To Coverage";case"anisotropy":return"Anisotropy";case"anisotropyMap":return"Anisotropy Map";case"anisotropyRotation":return"Anisotropy Rotation";case"aoMap":return"AO Map";case"aoMapIntensity":return"AO Map Intensity";case"attenuationColor":return"Attenuation Color";case"attenuationDistance":return"Attenuation Distance";case"blendAlpha":return"Blend Alpha";case"blendColor":return"Blend Color";case"blendDst":return"Blend Dst";case"blendDstAlpha":return"Blend Dst Alha";case"blendEquation":return"Blend Equation";case"blendEquationAlpha":return"Blend Equation Alpha";case"blending":return"Blending";case"blendSrc":return"Blend Src";case"blendSrcAlpha":return"Blend Src Alpha";case"bumpMap":return"Bump Map";case"bumpScale":return"Bump Scale";case"clearcoat":return"Clearcoat";case"clearcoatMap":return"Clearcoat Map";case"clearcoatNormalMap":return"Clearcoat Normal Map";case"clearcoatNormalScale":return"Clearcoat Normal Scale";case"clearcoatRoughness":return"Clearcoat Roughness";case"clearcoatRoughnessMap":return"Clearcoat Roughness Map";case"color":return"Color";case"colorWrite":return"Color Write";case"defines":return"Defines";case"depthFunc":return"Depth Func";case"depthTest":return"Depth Test";case"depthWrite":return"Depth Write";case"dispersion":return"Dispersion";case"displacementBias":return"Displacement Bias";case"displacementMap":return"Displacement Map";case"displacementScale":return"Displacement Scale";case"dithering":return"Dithering";case"emissive":return"Emissive";case"emissiveMap":return"Emissive Map";case"emissiveIntensity":return"Emissive Intensity";case"envMap":return"Environment Map";case"envMapIntensity":return"Environment Map Intensity";case"envMapRotation":return"Environment Map Rotation";case"extensions":return"Extensions";case"flatShading":return"Flat Shading";case"fragmentShader":return"Fragment Shader";case"fog":return"Fog";case"glslVersion":return"GLSL Version";case"gradientMap":return"Gradient Map";case"ior":return"IOR";case"iridescence":return"Iridescence";case"iridescenceIOR":return"Iridescence IOR";case"iridescenceMap":return"Iridescence Map";case"iridescenceThicknessMap":return"Iridescence Thickness Map";case"iridescenceThicknessRange":return"Iridescence Thickness Range";case"lights":return"Lights";case"lightMap":return"Light Map";case"lightMapIntensity":return"Light Map Intensity";case"map":return"Map";case"matcap":return"Matcap";case"metalness":return"Metalness";case"metalnessMap":return"Metalness Map";case"name":return"Name";case"normalMap":return"Normal Map";case"normalScale":return"Normal Scale";case"premultipliedAlpha":return"Premultiplied Alpha";case"opacity":return"Opacity";case"reflectivity":return"Reflectivity";case"refractionRatio":return"Refraction Ratio";case"roughness":return"Roughness";case"roughnessMap":return"Roughness Map";case"sheen":return"Sheen";case"sheenColor":return"Sheen Color";case"sheenColorMap":return"Sheen Color Map";case"sheenRoughness":return"Sheen Roughness";case"sheenRoughnessMap":return"Sheen Roughness Map";case"shininess":return"Shininess";case"side":return"Side";case"size":return"Size";case"sizeAttenuation":return"Size Attenuation";case"specular":return"Specular";case"specularColor":return"Specular Color";case"specularColorMap":return"Specular Color Map";case"specularIntensity":return"Specular Intensity";case"specularIntensityMap":return"Specular Map Intensity";case"thickness":return"Thickness";case"thicknessMap":return"Thickness Map";case"toneMapped":return"Tone Mapped";case"transmission":return"Transmission";case"transmissionMap":return"Transmission Map";case"transparent":return"Transparent";case"type":return"Type";case"uuid":return"UUID";case"uniforms":return"Uniforms";case"vertexColors":return"Vertex Colors";case"vertexShader":return"Vertex Shader";case"visible":return"Visible";case"wireframe":return"Wireframe"}return i}function as(i){const e=i.toLowerCase();return e.search("intensity")>-1||e==="anisotropyrotation"||e==="blendalpha"||e==="bumpscale"||e==="clearcoatroughness"||e==="displacementbias"||e==="displacementscale"||e==="metalness"||e==="opacity"||e==="reflectivity"||e==="refractionratio"||e==="roughness"||e==="sheenroughness"}function ln(){const i=document.createElement("input");return i.type="file",new Promise((e,t)=>{i.addEventListener("change",function(){if(i.files===null)t();else{const s=i.files[0],n=new FileReader;n.onload=function(a){e(a.target.result)},n.readAsDataURL(s)}}),i.click()})}const cn=[{title:"Front",value:o.FrontSide},{title:"Back",value:o.BackSide},{title:"Double",value:o.DoubleSide}],hn=[{title:"No Blending",value:o.NoBlending},{title:"Normal",value:o.NormalBlending},{title:"Additive",value:o.AdditiveBlending},{title:"Subtractive",value:o.SubtractiveBlending},{title:"Multiply",value:o.MultiplyBlending},{title:"Custom",value:o.CustomBlending}],dn=[{title:"Add",value:o.AddEquation},{title:"Subtract",value:o.SubtractEquation},{title:"Reverse Subtract",value:o.ReverseSubtractEquation},{title:"Min",value:o.MinEquation},{title:"Max",value:o.MaxEquation}],un=[{title:"Zero",value:o.ZeroFactor},{title:"One",value:o.OneFactor},{title:"Src Color",value:o.SrcColorFactor},{title:"One Minus Src Color",value:o.OneMinusSrcColorFactor},{title:"Src Alpha",value:o.SrcAlphaFactor},{title:"One Minus Src Alpha",value:o.OneMinusSrcAlphaFactor},{title:"Dst Alpha",value:o.DstAlphaFactor},{title:"One Minus Dst Alpha",value:o.OneMinusDstAlphaFactor},{title:"Dst Color",value:o.DstColorFactor},{title:"One Minus Dst Color",value:o.OneMinusDstColorFactor},{title:"Src Alpha Saturate",value:o.SrcAlphaSaturateFactor},{title:"Constant Color",value:o.ConstantColorFactor},{title:"One Minus Constant Color",value:o.OneMinusConstantColorFactor},{title:"Constant Alpha",value:o.ConstantAlphaFactor},{title:"One Minus Constant Alpha",value:o.OneMinusConstantAlphaFactor}],pn=[{title:"Zero",value:o.ZeroFactor},{title:"One",value:o.OneFactor},{title:"Src Color",value:o.SrcColorFactor},{title:"One Minus Src Color",value:o.OneMinusSrcColorFactor},{title:"Src Alpha",value:o.SrcAlphaFactor},{title:"One Minus Src Alpha",value:o.OneMinusSrcAlphaFactor},{title:"Dst Alpha",value:o.DstAlphaFactor},{title:"One Minus Dst Alpha",value:o.OneMinusDstAlphaFactor},{title:"Dst Color",value:o.DstColorFactor},{title:"One Minus Dst Color",value:o.OneMinusDstColorFactor},{title:"Constant Color",value:o.ConstantColorFactor},{title:"One Minus Constant Color",value:o.OneMinusConstantColorFactor},{title:"Constant Alpha",value:o.ConstantAlphaFactor},{title:"One Minus Constant Alpha",value:o.OneMinusConstantAlphaFactor}];function Ke(i,e){i.needsUpdate=!0,i.type="option",i.options=e}function mn(i,e,t,s){return{type:"boolean",title:It(i),prop:i,value:e,needsUpdate:!0,onChange:(n,a)=>{s.updateObject(t.uuid,`material.${i}`,a),s.updateObject(t.uuid,"material.needsUpdate",!0);const r=s.getScene(t.uuid);if(r!==null){const l=r.getObjectByProperty("uuid",t.uuid);$(l,`material.${i}`,a)}}}}function fn(i,e,t,s){const n={type:"number",title:It(i),prop:i,value:e,min:void 0,max:void 0,step:.01,needsUpdate:!0,onChange:(a,r)=>{s.updateObject(t.uuid,`material.${i}`,r),s.updateObject(t.uuid,"material.needsUpdate",!0);const l=s.getScene(t.uuid);if(l!==null){const d=l.getObjectByProperty("uuid",t.uuid);$(d,`material.${i}`,r)}}};switch(i){case"blending":Ke(n,hn);break;case"blendDst":Ke(n,pn);break;case"blendEquation":Ke(n,dn);break;case"blendSrc":Ke(n,un);break;case"side":Ke(n,cn);break}return as(i)&&(n.value=Number(e),n.type="range",n.min=Math.min(0,n.value),n.max=Math.max(1,n.value),n.step=.01),n}function _n(i,e,t,s){const n={type:"string",title:It(i),prop:i,value:e,needsUpdate:!0,onChange:(r,l)=>{s.updateObject(t.uuid,`material.${i}`,l),s.updateObject(t.uuid,"material.needsUpdate",!0);const d=s.getScene(t.uuid);if(d!==null){const h=d.getObjectByProperty("uuid",t.uuid);$(h,`material.${i}`,l)}},onKeyDown:r=>{}};return(i==="vertexShader"||i==="fragmentShader")&&(n.disabled=!1,n.latest=n.value,n.onChange=(r,l)=>{n.latest=l,s.updateObject(t.uuid,`material.${i}`,l);const d=s.getScene(t.uuid);if(d!==null){const h=d.getObjectByProperty("uuid",t.uuid);$(h,`material.${i}`,l)}},n.onKeyDown=r=>{if(r.key==="Enter"&&(r.altKey||r.metaKey)){s.updateObject(t.uuid,"material.needsUpdate",!0);const l=s.getScene(t.uuid);if(l!==null){const d=l.getObjectByProperty("uuid",t.uuid);$(d,"material.needsUpdate",!0)}}}),n}function gn(i){return i.x!==void 0&&i.y!==void 0&&i.z===void 0}function yn(i){return i.x!==void 0&&i.y!==void 0&&i.z!==void 0&&i.w===void 0}function vn(i){return i.x!==void 0&&i.y!==void 0&&i.z!==void 0&&i.w!==void 0}function ri(i){i.sort((e,t)=>e.title<t.title?-1:e.title>t.title?1:0)}function at(i,e,t,s,n="",a=!1){const r=It(i).split(".")[0].replaceAll("[","").replaceAll("]",""),l=n.length>0?`${n}.${i}`:i,d=typeof e;if(d==="boolean"||d==="string")return{title:r,prop:l,type:d,value:e,disabled:a,onChange:(h,p)=>{s.updateObject(t.uuid,`material.${l}`,p);const f=s.getScene(t.uuid);if(f!==null){const g=f.getObjectByProperty("uuid",t.uuid);$(g,`material.${l}`,p)}}};if(d==="number"){const h={title:r,prop:l,type:"number",value:e,step:.01,disabled:a,onChange:(p,f)=>{s.updateObject(t.uuid,`material.${l}`,f);const g=s.getScene(t.uuid);if(g!==null){const y=g.getObjectByProperty("uuid",t.uuid);$(y,`material.${l}`,f)}}};return as(r)&&(h.type="range",h.min=0,h.max=1),h}else{if(e.isColor)return{title:r,prop:l,type:"color",value:e,disabled:a,onChange:(h,p)=>{const f=new o.Color(p);s.updateObject(t.uuid,`material.${l}`,f);const g=s.getScene(t.uuid);if(g!==null){const y=g.getObjectByProperty("uuid",t.uuid);$(y,`material.${l}`,f)}}};if(Array.isArray(e)){const h=[];for(const p in e){const f=e[p],g=`[${p.toString()}]`;if(f.value!==void 0){const y=at(`${g}.value`,f.value,t,s,l,a);y!==void 0&&h.push(y)}else{const y=at(g,f,t,s,l,a);y!==void 0&&h.push(y)}}if(h.length>0)return ri(h),{title:r,items:h}}else{if(gn(e))return{title:r,prop:l,type:"vector2",value:e,disabled:a,onChange:(h,p)=>{s.updateObject(t.uuid,`material.${l}`,p);const f=s.getScene(t.uuid);if(f!==null){const g=f.getObjectByProperty("uuid",t.uuid);$(g,`material.${l}`,p)}}};if(yn(e))return{title:r,prop:l,type:"grid3",value:e,disabled:a,onChange:(h,p)=>{s.updateObject(t.uuid,`material.${l}`,p);const f=s.getScene(t.uuid);if(f!==null){const g=f.getObjectByProperty("uuid",t.uuid);$(g,`material.${l}`,p)}}};if(vn(e))return{title:r,prop:l,type:"grid4",value:e,disabled:a,onChange:(h,p)=>{s.updateObject(t.uuid,`material.${l}`,p);const f=s.getScene(t.uuid);if(f!==null){const g=f.getObjectByProperty("uuid",t.uuid);$(g,`material.${l}`,p)}}};if(e.isEuler)return{title:r,prop:l,type:"euler",value:e,disabled:a,onChange:(h,p)=>{s.updateObject(t.uuid,`material.${l}`,p);const f=s.getScene(t.uuid);if(f!==null){const g=f.getObjectByProperty("uuid",t.uuid);$(g,`material.${l}`,p)}}};if(e.src!==void 0)return{title:r,type:"image",value:e,disabled:a,onChange:(h,p)=>{const f=on(i),g=n.length>0?`${n}.${f}`:f;s.createTexture(t.uuid,`material.${g}`,p);const y=s.getScene(t.uuid);if(y!==null){const x=y.getObjectByProperty("uuid",t.uuid);if(x!==void 0){const M=T=>{const _=x.material,v=g.split(".");switch(v.length){case 1:_[v[0]]=T;break;case 2:_[v[0]][v[1]]=T;break;case 3:_[v[0]][v[1]][v[2]]=T;break;case 4:_[v[0]][v[1]][v[2]][v[3]]=T;break;case 5:_[v[0]][v[1]][v[2]][v[3]][v[4]]=T;break}_.needsUpdate=!0};p.src.length>0?ts(p.src).then(T=>{T.offset.set(p.offset[0],p.offset[1]),T.repeat.set(p.repeat[0],p.repeat[1]),M(T)}):M(null)}}}};if(e.elements!==void 0)return{title:r,prop:l,type:e.elements.length>9?"grid4":"grid3",value:e,disabled:a,onChange:(h,p)=>{s.updateObject(t.uuid,`material.${l}`,p);const f=s.getScene(t.uuid);if(f!==null){const g=f.getObjectByProperty("uuid",t.uuid);$(g,`material.${l}`,p)}}};{const h=[],p=i==="defines"||i==="extensions";try{for(const f in e){const g=e[f];if(g!==void 0)if(g.value!==void 0){const y=at(`${f}.value`,g.value,t,s,l,p);y!==void 0&&h.push(y)}else{const y=at(f,g,t,s,l,p);y!==void 0&&h.push(y)}}}catch{console.log("Issue cycling through material object:",i,e)}if(h.length>0)return ri(h),{title:r,items:h}}}}}function Mi(i,e,t){const s=[];for(const n in i){if(!an(n))continue;const a=typeof i[n],r=i[n];if(a==="boolean")s.push(mn(n,r,e,t));else if(a==="number")s.push(fn(n,r,e,t));else if(a==="string")s.push(_n(n,r,e,t));else if(a==="object"){const l=at(n,r,e,t);l!==void 0&&s.push(l)}else r!==void 0&&console.log("other:",n,a,r)}return ri(s),s.push({title:"Update Material",type:"button",onChange:()=>{t.updateObject(e.uuid,"material.needsUpdate",!0);const n=t.getScene(e.uuid);if(n!==null){const a=n.getObjectByProperty("uuid",e.uuid);$(a,"material.needsUpdate",!0)}}}),s}function En(i,e){const t=i.material;if(Array.isArray(t)){const s=[],n=t.length;for(let a=0;a<n;a++)s.push(u.jsx(Ee,{title:`Material ${a}`,items:Mi(t[a],i,e)},`Material ${a}`));return u.jsx(u.Fragment,{children:s})}else return u.jsx(Ee,{title:"Material",items:Mi(t,i,e)})}const Di="data:image/gif;base64,R0lGODlhDgFkAIAAAP///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDIgNzkuZGJhM2RhM2I1LCAyMDIzLzEyLzE1LTEwOjQyOjM3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjUuNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyMDk3M0NEODAxQjQxMUVGODVGNENDMkUyMUExNDk1NSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyMDk3M0NEOTAxQjQxMUVGODVGNENDMkUyMUExNDk1NSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkE4ODc3Qzg5MDFCMzExRUY4NUY0Q0MyRTIxQTE0OTU1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkE4ODc3QzhBMDFCMzExRUY4NUY0Q0MyRTIxQTE0OTU1Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAAAAAAAsAAAAAA4BZAAAAv+Mj6nL7Q+jnLTai7PevPsPhuJIluaJpurKtu4Lx/JM1/aN5/rO9/4PDAqHxKLxiEwql8ym8wmNSqfUqvWKzWq33K73Cw6Lx+Sy+YxOq9fstvsNj8vn9Lr9js/r9/y+/w8YKDhIWGh4iJiouMjY6PgIGSk5SVlpeYmZqTkJAGDQ+dnpuekmGgAKejpKuiZqmprKqoZKGyrbOlqrejub6xvLGyw8TFzcprurGuvqybxq7ETbrItsCz0l7Zpc+6p9/cS967w9/S2FTF0u/mzehK4Oqz3eTl9vf4+fr7/P3+//DzCgwIEECxo8iDChwoUMGzp8CDGixIkUK1q8iDGjxo0XHDt6/AgypMiRJEuaPIkypcqVLFt+KwAAOw==";function bn(i){const e=i.step!==void 0?i.step:.01,t=w.useRef(null),s=w.useRef(null),n=w.useRef(null),a=w.useRef(null),r=w.useRef(null),[l]=w.useState(i.value),[d,h]=w.useState(i.value.offset[0]),[p,f]=w.useState(i.value.offset[1]),[g,y]=w.useState(i.value.repeat[0]),[x,M]=w.useState(i.value.repeat[1]);function T(v,C,b,D,O){if(i.onChange!==void 0){const j=i.prop!==void 0?i.prop:i.title;i.onChange(j,{src:v,offset:[C,b],repeat:[D,O]})}}function _(v){const C=t.current.src,b=v.target.value;switch(v.target){case s.current:h(b),T(C,b,p,g,x);break;case n.current:f(b),T(C,d,b,g,x);break;case a.current:y(b),T(C,d,p,b,x);break;case r.current:M(b),T(C,d,p,g,b);break}}return u.jsxs("div",{className:"imageField",children:[u.jsx("img",{alt:i.title,ref:t,onClick:()=>{ln().then(v=>{t.current.src=v,T(v,d,p,g,x)})},src:l.src.length>0?l.src:Di}),u.jsxs("div",{className:"fields",children:[u.jsxs("div",{children:[u.jsx("label",{children:"Offset:"}),u.jsx("input",{ref:s,type:"number",value:d,step:e,onChange:_}),u.jsx("input",{ref:n,type:"number",value:p,step:e,onChange:_})]}),u.jsxs("div",{children:[u.jsx("label",{children:"Repeat:"}),u.jsx("input",{ref:a,type:"number",value:g,step:e,onChange:_}),u.jsx("input",{ref:r,type:"number",value:x,step:e,onChange:_})]}),u.jsx("button",{onClick:()=>{T("",d,p,g,x),t.current.src=Di},children:"Clear"})]})]})}function Tt(i){let e=i.value;e!==void 0&&(e.isColor!==void 0?e=ei(i.value):i.type==="color"&&(e=ei(new o.Color(i.value))));const[t,s]=w.useState(e),n=w.useRef(null),a=h=>{let p=h.target.value;if(i.type==="boolean")p=h.target.checked;else if(i.type==="option"&&(typeof i.value=="number"?p=Number(p):typeof i.value=="boolean"?p=!!p:typeof i.value=="object"&&(p=JSON.parse(p)),i.options!==void 0)){const f=i.options.length;for(let g=0;g<f&&i.options[g].value!==p;g++);}s(p),i.onChange!==void 0&&i.onChange(i.prop!==void 0?i.prop:i.title,p)},r={};i.disabled&&(r.opacity=.8);const l=i.type==="string"&&(t.length>100||t.search(`
|
30
|
+
`)>-1),d=l||i.type==="image"||i.type==="vector2";return u.jsxs("div",{className:`field ${d?"block":""}`,style:r,children:[i.type!=="button"&&u.jsx("label",{ref:n,children:ht(i.title)},"fieldLabel"),i.type==="string"&&!l&&u.jsx("input",{type:"text",disabled:i.disabled,onChange:a,value:t}),i.type==="string"&&l&&u.jsx("textarea",{cols:50,rows:10,disabled:i.disabled!==void 0?i.disabled:!0,onChange:a,onKeyDown:h=>{i.onKeyDown!==void 0&&i.onKeyDown(h)},value:t}),i.type==="boolean"&&u.jsx("input",{type:"checkbox",disabled:i.disabled,onChange:a,checked:t}),i.type==="number"&&u.jsx(ke,{value:t,type:i.type,prop:i.prop!==void 0?i.prop:i.title,min:i.min,max:i.max,step:i.step,disabled:i.disabled,labelRef:n,onChange:i.onChange}),i.type==="range"&&u.jsx(ke,{value:t,type:i.type,prop:i.prop!==void 0?i.prop:i.title,min:i.min,max:i.max,step:i.step,disabled:i.disabled,labelRef:n,onChange:i.onChange}),i.type==="color"&&u.jsxs(u.Fragment,{children:[u.jsx("input",{type:"text",value:t.toString(),onChange:a,disabled:i.disabled,className:"color"}),u.jsx("input",{type:"color",value:t,onChange:a,disabled:i.disabled})]}),i.type==="button"&&u.jsx("button",{disabled:i.disabled,onClick:()=>{i.onChange!==void 0&&i.onChange(i.prop!==void 0?i.prop:i.title,!0)},children:i.title}),i.type==="image"&&u.jsx(bn,{title:i.title,prop:i.prop,value:i.value,onChange:i.onChange}),i.type==="option"&&u.jsx(u.Fragment,{children:u.jsx("select",{onChange:a,disabled:i.disabled,defaultValue:i.value,children:i.options?.map((h,p)=>u.jsx("option",{value:h.value,children:ht(h.title)},p))})}),i.type==="vector2"&&u.jsx(nn,{step:i.step,value:t,min:0,max:1,onChange:a}),i.type==="grid3"&&u.jsx(Ti,{step:i.step,value:t,onChange:a}),i.type==="grid4"&&u.jsx(rn,{step:i.step,value:t,onChange:a}),i.type==="euler"&&u.jsx(Ti,{step:i.step,value:t,onChange:a})]})}function Cn(i){return"items"in i}function Ee(i){const e=[];return i.items.forEach(t=>{Cn(t)?e.push(u.jsx(Ee,{title:ht(t.title),items:t.items},Math.random())):e.push(u.jsx(Tt,{title:t.title,prop:t.prop,value:t.value,type:t.type,min:t.min,max:t.max,step:t.step,disabled:t.disabled,options:t.options,onChange:(s,n)=>{t.onChange!==void 0&&t.onChange(s,n)},onKeyDown:s=>{t.onKeyDown!==void 0&&t.onKeyDown(s)}},Math.random()))}),u.jsx(dt,{label:i.title,open:i.expanded===!0,onToggle:t=>{i.onToggle&&i?.onToggle(t)},children:e})}class Ue extends w.Component{static instance=null;constructor(e){super(e),this.state={groups:[],groupTitles:[],lastUpdate:Date.now()},Ue.instance=this}componentDidMount(){P.addEventListener(R.ADD_GROUP,this.addGroup),P.addEventListener(R.REMOVE_GROUP,this.removeGroup)}componentWillUnmount(){P.removeEventListener(R.ADD_GROUP,this.addGroup),P.removeEventListener(R.REMOVE_GROUP,this.removeGroup)}render(){return u.jsx("div",{className:"customGroups",children:this.state.groups},this.state.lastUpdate)}addGroup=e=>{const t=JSON.parse(e.value),s=[];t.items.forEach(n=>{s.push({type:n.type,prop:n.prop,title:n.title!==void 0?n.title:n.prop,value:n.value,min:n.min,max:n.max,step:n.step,options:n.options,disabled:n.disabled,onChange:(a,r)=>{this.props.three.updateGroup(t.title,a,r)}})}),this.state.groups.push(u.jsx(Ee,{title:t.title,items:s},Math.random())),this.state.groupTitles.push(t.title),this.setState({lastUpdate:Date.now()})};removeGroup=e=>{const t=e.value,s=this.state.groupTitles.length;for(let n=0;n<s;n++)if(t===this.state.groupTitles[n]){this.state.groups.splice(n,1),this.state.groupTitles.splice(n,1),this.setState({lastUpdate:Date.now()});return}};static addEditorGroup(e){const t=[];e.items.forEach(s=>{t.push({type:s.type,prop:s.prop,title:s.title!==void 0?s.title:s.prop,value:s.value,min:s.min,max:s.max,step:s.step,options:s.options,disabled:s.disabled,onChange:(n,a)=>{e.onUpdate(n,a)}})}),Ue.instance.state.groups.push(u.jsx(Ee,{title:e.title,items:t},Math.random())),Ue.instance.state.groupTitles.push(e.title),Ue.instance.setState({lastUpdate:Date.now()})}static removeEditorGroup(e){Ue.instance.removeGroup({value:e})}}function Ri(i){switch(i){case"fov":return"FOV";case"zoom":return"Zoom";case"near":return"Near";case"far":return"Far";case"focus":return"Focus";case"aspect":return"Aspect";case"filmGauge":return"Film Gauge";case"filmOffset":return"Film Offset";case"left":return"Left";case"right":return"Right";case"top":return"Top";case"bottom":return"Bottom"}return i}function Sn(i,e){const t=[];if(i.perspectiveCameraInfo!==void 0)for(const s in i.perspectiveCameraInfo)t.push({title:Ri(s),prop:s,type:"number",step:.01,value:i.perspectiveCameraInfo[s],onChange:(n,a)=>{e.updateObject(i.uuid,n,a),e.requestMethod(i.uuid,"updateProjectionMatrix");const r=e.getScene(i.uuid);if(r!==null){const l=r.getObjectByProperty("uuid",i.uuid);l!==void 0&&($(l,n,a),l.updateProjectionMatrix())}}});else if(i.orthographicCameraInfo!==void 0)for(const s in i.orthographicCameraInfo)t.push({title:Ri(s),prop:s,type:"number",step:.01,value:i.perspectiveCameraInfo[s],onChange:(n,a)=>{e.updateObject(i.uuid,n,a),e.requestMethod(i.uuid,"updateProjectionMatrix");const r=e.getScene(i.uuid);if(r!==null){const l=r.getObjectByProperty("uuid",i.uuid);l!==void 0&&($(l,n,a),l.updateProjectionMatrix())}}});return u.jsx(Ee,{title:"Camera",items:t})}class wn extends o.Line{constructor(e,t){const s=[1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],n=new o.BufferGeometry;n.setAttribute("position",new o.Float32BufferAttribute(s,3)),n.computeBoundingSphere();const a=new o.LineBasicMaterial({fog:!1});super(n,a),this.light=e,this.color=t,this.type="RectAreaLightHelper";const r=[1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],l=new o.BufferGeometry;l.setAttribute("position",new o.Float32BufferAttribute(r,3)),l.computeBoundingSphere(),this.add(new o.Mesh(l,new o.MeshBasicMaterial({side:o.BackSide,fog:!1})))}updateMatrixWorld(){if(this.scale.set(.5*this.light.width,.5*this.light.height,1),this.color!==void 0)this.material.color.set(this.color),this.children[0].material.color.set(this.color);else{this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);const e=this.material.color,t=Math.max(e.r,e.g,e.b);t>1&&e.multiplyScalar(1/t),this.children[0].material.color.copy(this.material.color)}this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld),this.children[0].matrixWorld.copy(this.matrixWorld)}dispose(){this.geometry.dispose(),this.material.dispose(),this.children[0].geometry.dispose(),this.children[0].material.dispose()}}const Pi={type:"change"},hi={type:"start"},os={type:"end"},vt=new o.Ray,Ai=new o.Plane,xn=Math.cos(70*o.MathUtils.DEG2RAD),J=new o.Vector3,ne=2*Math.PI,H={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},Vt=1e-6;class On extends o.Controls{constructor(e,t=null){super(e,t),this.state=H.NONE,this.enabled=!0,this.target=new o.Vector3,this.cursor=new o.Vector3,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:o.MOUSE.ROTATE,MIDDLE:o.MOUSE.DOLLY,RIGHT:o.MOUSE.PAN},this.touches={ONE:o.TOUCH.ROTATE,TWO:o.TOUCH.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this._lastPosition=new o.Vector3,this._lastQuaternion=new o.Quaternion,this._lastTargetPosition=new o.Vector3,this._quat=new o.Quaternion().setFromUnitVectors(e.up,new o.Vector3(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new o.Spherical,this._sphericalDelta=new o.Spherical,this._scale=1,this._panOffset=new o.Vector3,this._rotateStart=new o.Vector2,this._rotateEnd=new o.Vector2,this._rotateDelta=new o.Vector2,this._panStart=new o.Vector2,this._panEnd=new o.Vector2,this._panDelta=new o.Vector2,this._dollyStart=new o.Vector2,this._dollyEnd=new o.Vector2,this._dollyDelta=new o.Vector2,this._dollyDirection=new o.Vector3,this._mouse=new o.Vector2,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=Mn.bind(this),this._onPointerDown=Tn.bind(this),this._onPointerUp=Dn.bind(this),this._onContextMenu=kn.bind(this),this._onMouseWheel=An.bind(this),this._onKeyDown=In.bind(this),this._onTouchStart=Ln.bind(this),this._onTouchMove=Un.bind(this),this._onMouseDown=Rn.bind(this),this._onMouseMove=Pn.bind(this),this._interceptControlDown=jn.bind(this),this._interceptControlUp=Fn.bind(this),this.domElement!==null&&this.connect(),this.update()}connect(){this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointercancel",this._onPointerUp),this.domElement.addEventListener("contextmenu",this._onContextMenu),this.domElement.addEventListener("wheel",this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener("keydown",this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.removeEventListener("pointercancel",this._onPointerUp),this.domElement.removeEventListener("wheel",this._onMouseWheel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener("keydown",this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction="auto"}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(e){e.addEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=e}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(Pi),this.update(),this.state=H.NONE}update(e=null){const t=this.object.position;J.copy(t).sub(this.target),J.applyQuaternion(this._quat),this._spherical.setFromVector3(J),this.autoRotate&&this.state===H.NONE&&this._rotateLeft(this._getAutoRotationAngle(e)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let s=this.minAzimuthAngle,n=this.maxAzimuthAngle;isFinite(s)&&isFinite(n)&&(s<-Math.PI?s+=ne:s>Math.PI&&(s-=ne),n<-Math.PI?n+=ne:n>Math.PI&&(n-=ne),s<=n?this._spherical.theta=Math.max(s,Math.min(n,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(s+n)/2?Math.max(s,this._spherical.theta):Math.min(n,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let a=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const r=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),a=r!=this._spherical.radius}if(J.setFromSpherical(this._spherical),J.applyQuaternion(this._quatInverse),t.copy(this.target).add(J),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let r=null;if(this.object.isPerspectiveCamera){const l=J.length();r=this._clampDistance(l*this._scale);const d=l-r;this.object.position.addScaledVector(this._dollyDirection,d),this.object.updateMatrixWorld(),a=!!d}else if(this.object.isOrthographicCamera){const l=new o.Vector3(this._mouse.x,this._mouse.y,0);l.unproject(this.object);const d=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),a=d!==this.object.zoom;const h=new o.Vector3(this._mouse.x,this._mouse.y,0);h.unproject(this.object),this.object.position.sub(h).add(l),this.object.updateMatrixWorld(),r=J.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;r!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(r).add(this.object.position):(vt.origin.copy(this.object.position),vt.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(vt.direction))<xn?this.object.lookAt(this.target):(Ai.setFromNormalAndCoplanarPoint(this.object.up,this.target),vt.intersectPlane(Ai,this.target))))}else if(this.object.isOrthographicCamera){const r=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),r!==this.object.zoom&&(this.object.updateProjectionMatrix(),a=!0)}return this._scale=1,this._performCursorZoom=!1,a||this._lastPosition.distanceToSquared(this.object.position)>Vt||8*(1-this._lastQuaternion.dot(this.object.quaternion))>Vt||this._lastTargetPosition.distanceToSquared(this.target)>Vt?(this.dispatchEvent(Pi),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?ne/60*this.autoRotateSpeed*e:ne/60/60*this.autoRotateSpeed}_getZoomScale(e){const t=Math.abs(e*.01);return Math.pow(.95,this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){J.setFromMatrixColumn(t,0),J.multiplyScalar(-e),this._panOffset.add(J)}_panUp(e,t){this.screenSpacePanning===!0?J.setFromMatrixColumn(t,1):(J.setFromMatrixColumn(t,0),J.crossVectors(this.object.up,J)),J.multiplyScalar(e),this._panOffset.add(J)}_pan(e,t){const s=this.domElement;if(this.object.isPerspectiveCamera){const n=this.object.position;J.copy(n).sub(this.target);let a=J.length();a*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*a/s.clientHeight,this.object.matrix),this._panUp(2*t*a/s.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/s.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/s.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const s=this.domElement.getBoundingClientRect(),n=e-s.left,a=t-s.top,r=s.width,l=s.height;this._mouse.x=n/r*2-1,this._mouse.y=-(a/l)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(ne*this._rotateDelta.x/t.clientHeight),this._rotateUp(ne*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this._rotateUp(ne*this.rotateSpeed/this.domElement.clientHeight):this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this._rotateUp(-ne*this.rotateSpeed/this.domElement.clientHeight):this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this._rotateLeft(ne*this.rotateSpeed/this.domElement.clientHeight):this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this._rotateLeft(-ne*this.rotateSpeed/this.domElement.clientHeight):this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),s=.5*(e.pageX+t.x),n=.5*(e.pageY+t.y);this._rotateStart.set(s,n)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),s=.5*(e.pageX+t.x),n=.5*(e.pageY+t.y);this._panStart.set(s,n)}}_handleTouchStartDolly(e){const t=this._getSecondPointerPosition(e),s=e.pageX-t.x,n=e.pageY-t.y,a=Math.sqrt(s*s+n*n);this._dollyStart.set(0,a)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{const s=this._getSecondPointerPosition(e),n=.5*(e.pageX+s.x),a=.5*(e.pageY+s.y);this._rotateEnd.set(n,a)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(ne*this._rotateDelta.x/t.clientHeight),this._rotateUp(ne*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),s=.5*(e.pageX+t.x),n=.5*(e.pageY+t.y);this._panEnd.set(s,n)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){const t=this._getSecondPointerPosition(e),s=e.pageX-t.x,n=e.pageY-t.y,a=Math.sqrt(s*s+n*n);this._dollyEnd.set(0,a),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const r=(e.pageX+t.x)*.5,l=(e.pageY+t.y)*.5;this._updateZoomParameters(r,l)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId){this._pointers.splice(t,1);return}}_isTrackingPointer(e){for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId)return!0;return!1}_trackPointer(e){let t=this._pointerPositions[e.pointerId];t===void 0&&(t=new o.Vector2,this._pointerPositions[e.pointerId]=t),t.set(e.pageX,e.pageY)}_getSecondPointerPosition(e){const t=e.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[t]}_customWheelEvent(e){const t=e.deltaMode,s={clientX:e.clientX,clientY:e.clientY,deltaY:e.deltaY};switch(t){case 1:s.deltaY*=16;break;case 2:s.deltaY*=100;break}return e.ctrlKey&&!this._controlActive&&(s.deltaY*=10),s}}function Tn(i){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(i.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),this.domElement.addEventListener("pointerup",this._onPointerUp)),!this._isTrackingPointer(i)&&(this._addPointer(i),i.pointerType==="touch"?this._onTouchStart(i):this._onMouseDown(i)))}function Mn(i){this.enabled!==!1&&(i.pointerType==="touch"?this._onTouchMove(i):this._onMouseMove(i))}function Dn(i){switch(this._removePointer(i),this._pointers.length){case 0:this.domElement.releasePointerCapture(i.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.dispatchEvent(os),this.state=H.NONE;break;case 1:const e=this._pointers[0],t=this._pointerPositions[e];this._onTouchStart({pointerId:e,pageX:t.x,pageY:t.y});break}}function Rn(i){let e;switch(i.button){case 0:e=this.mouseButtons.LEFT;break;case 1:e=this.mouseButtons.MIDDLE;break;case 2:e=this.mouseButtons.RIGHT;break;default:e=-1}switch(e){case o.MOUSE.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(i),this.state=H.DOLLY;break;case o.MOUSE.ROTATE:if(i.ctrlKey||i.metaKey||i.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(i),this.state=H.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(i),this.state=H.ROTATE}break;case o.MOUSE.PAN:if(i.ctrlKey||i.metaKey||i.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(i),this.state=H.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(i),this.state=H.PAN}break;default:this.state=H.NONE}this.state!==H.NONE&&this.dispatchEvent(hi)}function Pn(i){switch(this.state){case H.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(i);break;case H.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(i);break;case H.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(i);break}}function An(i){this.enabled===!1||this.enableZoom===!1||this.state!==H.NONE||(i.preventDefault(),this.dispatchEvent(hi),this._handleMouseWheel(this._customWheelEvent(i)),this.dispatchEvent(os))}function In(i){this.enabled===!1||this.enablePan===!1||this._handleKeyDown(i)}function Ln(i){switch(this._trackPointer(i),this._pointers.length){case 1:switch(this.touches.ONE){case o.TOUCH.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(i),this.state=H.TOUCH_ROTATE;break;case o.TOUCH.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(i),this.state=H.TOUCH_PAN;break;default:this.state=H.NONE}break;case 2:switch(this.touches.TWO){case o.TOUCH.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(i),this.state=H.TOUCH_DOLLY_PAN;break;case o.TOUCH.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(i),this.state=H.TOUCH_DOLLY_ROTATE;break;default:this.state=H.NONE}break;default:this.state=H.NONE}this.state!==H.NONE&&this.dispatchEvent(hi)}function Un(i){switch(this._trackPointer(i),this.state){case H.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(i),this.update();break;case H.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(i),this.update();break;case H.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(i),this.update();break;case H.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(i),this.update();break;default:this.state=H.NONE}}function kn(i){this.enabled!==!1&&i.preventDefault()}function jn(i){i.key==="Control"&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}function Fn(i){i.key==="Control"&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}const zn=Math.PI/180;function He(i,e,t,s,n){return s+(i-e)*(n-s)/(t-e)}function Ii(i){return i*zn}/*!
|
31
31
|
* camera-controls
|
32
32
|
* https://github.com/yomotsu/camera-controls
|
33
33
|
* (c) 2017 @yomotsu
|
34
34
|
* Released under the MIT License.
|
35
|
-
*/const de={LEFT:1,RIGHT:2,MIDDLE:4},g=Object.freeze({NONE:0,ROTATE:1,TRUCK:2,OFFSET:4,DOLLY:8,ZOOM:16,TOUCH_ROTATE:32,TOUCH_TRUCK:64,TOUCH_OFFSET:128,TOUCH_DOLLY:256,TOUCH_ZOOM:512,TOUCH_DOLLY_TRUCK:1024,TOUCH_DOLLY_OFFSET:2048,TOUCH_DOLLY_ROTATE:4096,TOUCH_ZOOM_TRUCK:8192,TOUCH_ZOOM_OFFSET:16384,TOUCH_ZOOM_ROTATE:32768}),bt={NONE:0,IN:1,OUT:-1};function mt(i){return i.isPerspectiveCamera}function ot(i){return i.isOrthographicCamera}const Ct=Math.PI*2,Bi=Math.PI/2,dn=1e-5,Pt=Math.PI/180;function Ze(i,e,n){return Math.max(e,Math.min(n,i))}function he(i,e=dn){return Math.abs(i)<e}function re(i,e,n=dn){return he(i-e,n)}function Vi(i,e){return Math.round(i/e)*e}function Lt(i){return isFinite(i)?i:i<0?-Number.MAX_VALUE:Number.MAX_VALUE}function It(i){return Math.abs(i)<Number.MAX_VALUE?i:i*(1/0)}function $t(i,e,n,t,s=1/0,r){t=Math.max(1e-4,t);const o=2/t,a=o*r,d=1/(1+a+.48*a*a+.235*a*a*a);let c=i-e;const u=e,p=s*t;c=Ze(c,-p,p),e=i-c;const _=(n.value+o*c)*r;n.value=(n.value-o*_)*d;let y=e+(c+_)*d;return u-i>0==y>u&&(y=u,n.value=(y-u)/r),y}function Hi(i,e,n,t,s=1/0,r,o){t=Math.max(1e-4,t);const a=2/t,d=a*r,c=1/(1+d+.48*d*d+.235*d*d*d);let u=e.x,p=e.y,_=e.z,y=i.x-u,A=i.y-p,I=i.z-_;const F=u,v=p,E=_,w=s*t,C=w*w,U=y*y+A*A+I*I;if(U>C){const Te=Math.sqrt(U);y=y/Te*w,A=A/Te*w,I=I/Te*w}u=i.x-y,p=i.y-A,_=i.z-I;const L=(n.x+a*y)*r,x=(n.y+a*A)*r,oe=(n.z+a*I)*r;n.x=(n.x-a*L)*c,n.y=(n.y-a*x)*c,n.z=(n.z-a*oe)*c,o.x=u+(y+L)*c,o.y=p+(A+x)*c,o.z=_+(I+oe)*c;const te=F-i.x,$e=v-i.y,j=E-i.z,Ue=o.x-F,ye=o.y-v,Ce=o.z-E;return te*Ue+$e*ye+j*Ce>0&&(o.x=F,o.y=v,o.z=E,n.x=(o.x-F)/r,n.y=(o.y-v)/r,n.z=(o.z-E)/r),o}function ci(i,e){e.set(0,0),i.forEach(n=>{e.x+=n.clientX,e.y+=n.clientY}),e.x/=i.length,e.y/=i.length}function li(i,e){return ot(i)?(console.warn(`${e} is not supported in OrthographicCamera`),!0):!1}class hs{constructor(){this._listeners={}}addEventListener(e,n){const t=this._listeners;t[e]===void 0&&(t[e]=[]),t[e].indexOf(n)===-1&&t[e].push(n)}hasEventListener(e,n){const t=this._listeners;return t[e]!==void 0&&t[e].indexOf(n)!==-1}removeEventListener(e,n){const s=this._listeners[e];if(s!==void 0){const r=s.indexOf(n);r!==-1&&s.splice(r,1)}}removeAllEventListeners(e){if(!e){this._listeners={};return}Array.isArray(this._listeners[e])&&(this._listeners[e].length=0)}dispatchEvent(e){const t=this._listeners[e.type];if(t!==void 0){e.target=this;const s=t.slice(0);for(let r=0,o=s.length;r<o;r++)s[r].call(this,e)}}}var hi;const ds="2.9.0",Wt=1/8,us=/Mac/.test((hi=globalThis?.navigator)===null||hi===void 0?void 0:hi.platform);let H,Yi,Kt,di,De,Z,ie,Tt,Ut,Ke,Xe,ft,Gi,Zi,Ve,kt,xt,$i,ui,Wi,mi,fi,Xt;class qe extends hs{static install(e){H=e.THREE,Yi=Object.freeze(new H.Vector3(0,0,0)),Kt=Object.freeze(new H.Vector3(0,1,0)),di=Object.freeze(new H.Vector3(0,0,1)),De=new H.Vector2,Z=new H.Vector3,ie=new H.Vector3,Tt=new H.Vector3,Ut=new H.Vector3,Ke=new H.Vector3,Xe=new H.Vector3,ft=new H.Vector3,Gi=new H.Vector3,Zi=new H.Vector3,Ve=new H.Spherical,kt=new H.Spherical,xt=new H.Box3,$i=new H.Box3,ui=new H.Sphere,Wi=new H.Quaternion,mi=new H.Quaternion,fi=new H.Matrix4,Xt=new H.Raycaster}static get ACTION(){return g}constructor(e,n){super(),this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.minDistance=Number.EPSILON,this.maxDistance=1/0,this.infinityDolly=!1,this.minZoom=.01,this.maxZoom=1/0,this.smoothTime=.25,this.draggingSmoothTime=.125,this.maxSpeed=1/0,this.azimuthRotateSpeed=1,this.polarRotateSpeed=1,this.dollySpeed=1,this.dollyDragInverted=!1,this.truckSpeed=2,this.dollyToCursor=!1,this.dragToOffset=!1,this.verticalDragToForward=!1,this.boundaryFriction=0,this.restThreshold=.01,this.colliderMeshes=[],this.cancel=()=>{},this._enabled=!0,this._state=g.NONE,this._viewport=null,this._changedDolly=0,this._changedZoom=0,this._hasRested=!0,this._boundaryEnclosesCamera=!1,this._needsUpdate=!0,this._updatedLastTime=!1,this._elementRect=new DOMRect,this._isDragging=!1,this._dragNeedsUpdate=!0,this._activePointers=[],this._lockedPointer=null,this._interactiveArea=new DOMRect(0,0,1,1),this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._isUserControllingOffset=!1,this._isUserControllingZoom=!1,this._lastDollyDirection=bt.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new H.Vector3,this._focalOffsetVelocity=new H.Vector3,this._zoomVelocity={value:0},this._truckInternal=(v,E,w)=>{let C,U;if(mt(this._camera)){const L=Z.copy(this._camera.position).sub(this._target),x=this._camera.getEffectiveFOV()*Pt,oe=L.length()*Math.tan(x*.5);C=this.truckSpeed*v*oe/this._elementRect.height,U=this.truckSpeed*E*oe/this._elementRect.height}else if(ot(this._camera)){const L=this._camera;C=v*(L.right-L.left)/L.zoom/this._elementRect.width,U=E*(L.top-L.bottom)/L.zoom/this._elementRect.height}else return;this.verticalDragToForward?(w?this.setFocalOffset(this._focalOffsetEnd.x+C,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(C,0,!0),this.forward(-U,!0)):w?this.setFocalOffset(this._focalOffsetEnd.x+C,this._focalOffsetEnd.y+U,this._focalOffsetEnd.z,!0):this.truck(C,U,!0)},this._rotateInternal=(v,E)=>{const w=Ct*this.azimuthRotateSpeed*v/this._elementRect.height,C=Ct*this.polarRotateSpeed*E/this._elementRect.height;this.rotate(w,C,!0)},this._dollyInternal=(v,E,w)=>{const C=Math.pow(.95,-v*this.dollySpeed),U=this._sphericalEnd.radius,L=this._sphericalEnd.radius*C,x=Ze(L,this.minDistance,this.maxDistance),oe=x-L;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(L,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(oe,!0),this._dollyToNoClamp(x,!0)):this._dollyToNoClamp(x,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?L:x)-U,this._dollyControlCoord.set(E,w)),this._lastDollyDirection=Math.sign(-v)},this._zoomInternal=(v,E,w)=>{const C=Math.pow(.95,v*this.dollySpeed),U=this._zoom,L=this._zoom*C;this.zoomTo(L,!0),this.dollyToCursor&&(this._changedZoom+=L-U,this._dollyControlCoord.set(E,w))},typeof H>"u"&&console.error("camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."),this._camera=e,this._yAxisUpSpace=new H.Quaternion().setFromUnitVectors(this._camera.up,Kt),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=g.NONE,this._target=new H.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new H.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new H.Spherical().setFromVector3(Z.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace)),this._sphericalEnd=this._spherical.clone(),this._lastDistance=this._spherical.radius,this._zoom=this._camera.zoom,this._zoomEnd=this._zoom,this._lastZoom=this._zoom,this._nearPlaneCorners=[new H.Vector3,new H.Vector3,new H.Vector3,new H.Vector3],this._updateNearPlaneCorners(),this._boundary=new H.Box3(new H.Vector3(-1/0,-1/0,-1/0),new H.Vector3(1/0,1/0,1/0)),this._cameraUp0=this._camera.up.clone(),this._target0=this._target.clone(),this._position0=this._camera.position.clone(),this._zoom0=this._zoom,this._focalOffset0=this._focalOffset.clone(),this._dollyControlCoord=new H.Vector2,this.mouseButtons={left:g.ROTATE,middle:g.DOLLY,right:g.TRUCK,wheel:mt(this._camera)?g.DOLLY:ot(this._camera)?g.ZOOM:g.NONE},this.touches={one:g.TOUCH_ROTATE,two:mt(this._camera)?g.TOUCH_DOLLY_TRUCK:ot(this._camera)?g.TOUCH_ZOOM_TRUCK:g.NONE,three:g.TOUCH_TRUCK};const t=new H.Vector2,s=new H.Vector2,r=new H.Vector2,o=v=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const C=this._domElement.getBoundingClientRect(),U=v.clientX/C.width,L=v.clientY/C.height;if(U<this._interactiveArea.left||U>this._interactiveArea.right||L<this._interactiveArea.top||L>this._interactiveArea.bottom)return}const E=v.pointerType!=="mouse"?null:(v.buttons&de.LEFT)===de.LEFT?de.LEFT:(v.buttons&de.MIDDLE)===de.MIDDLE?de.MIDDLE:(v.buttons&de.RIGHT)===de.RIGHT?de.RIGHT:null;if(E!==null){const C=this._findPointerByMouseButton(E);C&&this._disposePointer(C)}if((v.buttons&de.LEFT)===de.LEFT&&this._lockedPointer)return;const w={pointerId:v.pointerId,clientX:v.clientX,clientY:v.clientY,deltaX:0,deltaY:0,mouseButton:E};this._activePointers.push(w),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",d),this._domElement.ownerDocument.addEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",d),this._isDragging=!0,_(v)},a=v=>{v.cancelable&&v.preventDefault();const E=v.pointerId,w=this._lockedPointer||this._findPointerById(E);if(w){if(w.clientX=v.clientX,w.clientY=v.clientY,w.deltaX=v.movementX,w.deltaY=v.movementY,this._state=0,v.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else(!this._isDragging&&this._lockedPointer||this._isDragging&&(v.buttons&de.LEFT)===de.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(v.buttons&de.MIDDLE)===de.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(v.buttons&de.RIGHT)===de.RIGHT&&(this._state=this._state|this.mouseButtons.right);y()}},d=v=>{const E=this._findPointerById(v.pointerId);if(!(E&&E===this._lockedPointer)){if(E&&this._disposePointer(E),v.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=g.NONE;break;case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else this._state=g.NONE;A()}};let c=-1;const u=v=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===g.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const L=this._domElement.getBoundingClientRect(),x=v.clientX/L.width,oe=v.clientY/L.height;if(x<this._interactiveArea.left||x>this._interactiveArea.right||oe<this._interactiveArea.top||oe>this._interactiveArea.bottom)return}if(v.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===g.ROTATE||this.mouseButtons.wheel===g.TRUCK){const L=performance.now();c-L<1e3&&this._getClientRect(this._elementRect),c=L}const E=us?-1:-3,w=v.deltaMode===1?v.deltaY/E:v.deltaY/(E*10),C=this.dollyToCursor?(v.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,U=this.dollyToCursor?(v.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case g.ROTATE:{this._rotateInternal(v.deltaX,v.deltaY),this._isUserControllingRotate=!0;break}case g.TRUCK:{this._truckInternal(v.deltaX,v.deltaY,!1),this._isUserControllingTruck=!0;break}case g.OFFSET:{this._truckInternal(v.deltaX,v.deltaY,!0),this._isUserControllingOffset=!0;break}case g.DOLLY:{this._dollyInternal(-w,C,U),this._isUserControllingDolly=!0;break}case g.ZOOM:{this._zoomInternal(-w,C,U),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},p=v=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===qe.ACTION.NONE){const E=v instanceof PointerEvent?v.pointerId:0,w=this._findPointerById(E);w&&this._disposePointer(w),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",d);return}v.preventDefault()}},_=v=>{if(!this._enabled)return;if(ci(this._activePointers,De),this._getClientRect(this._elementRect),t.copy(De),s.copy(De),this._activePointers.length>=2){const w=De.x-this._activePointers[1].clientX,C=De.y-this._activePointers[1].clientY,U=Math.sqrt(w*w+C*C);r.set(0,U);const L=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,x=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;s.set(L,x)}if(this._state=0,!v)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in v&&v.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else!this._lockedPointer&&(v.buttons&de.LEFT)===de.LEFT&&(this._state=this._state|this.mouseButtons.left),(v.buttons&de.MIDDLE)===de.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(v.buttons&de.RIGHT)===de.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&g.ROTATE)===g.ROTATE||(this._state&g.TOUCH_ROTATE)===g.TOUCH_ROTATE||(this._state&g.TOUCH_DOLLY_ROTATE)===g.TOUCH_DOLLY_ROTATE||(this._state&g.TOUCH_ZOOM_ROTATE)===g.TOUCH_ZOOM_ROTATE)&&(this._sphericalEnd.theta=this._spherical.theta,this._sphericalEnd.phi=this._spherical.phi,this._thetaVelocity.value=0,this._phiVelocity.value=0),((this._state&g.TRUCK)===g.TRUCK||(this._state&g.TOUCH_TRUCK)===g.TOUCH_TRUCK||(this._state&g.TOUCH_DOLLY_TRUCK)===g.TOUCH_DOLLY_TRUCK||(this._state&g.TOUCH_ZOOM_TRUCK)===g.TOUCH_ZOOM_TRUCK)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&g.DOLLY)===g.DOLLY||(this._state&g.TOUCH_DOLLY)===g.TOUCH_DOLLY||(this._state&g.TOUCH_DOLLY_TRUCK)===g.TOUCH_DOLLY_TRUCK||(this._state&g.TOUCH_DOLLY_OFFSET)===g.TOUCH_DOLLY_OFFSET||(this._state&g.TOUCH_DOLLY_ROTATE)===g.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&g.ZOOM)===g.ZOOM||(this._state&g.TOUCH_ZOOM)===g.TOUCH_ZOOM||(this._state&g.TOUCH_ZOOM_TRUCK)===g.TOUCH_ZOOM_TRUCK||(this._state&g.TOUCH_ZOOM_OFFSET)===g.TOUCH_ZOOM_OFFSET||(this._state&g.TOUCH_ZOOM_ROTATE)===g.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&g.OFFSET)===g.OFFSET||(this._state&g.TOUCH_OFFSET)===g.TOUCH_OFFSET||(this._state&g.TOUCH_DOLLY_OFFSET)===g.TOUCH_DOLLY_OFFSET||(this._state&g.TOUCH_ZOOM_OFFSET)===g.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},y=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,ci(this._activePointers,De);const E=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,w=E?-E.deltaX:s.x-De.x,C=E?-E.deltaY:s.y-De.y;if(s.copy(De),((this._state&g.ROTATE)===g.ROTATE||(this._state&g.TOUCH_ROTATE)===g.TOUCH_ROTATE||(this._state&g.TOUCH_DOLLY_ROTATE)===g.TOUCH_DOLLY_ROTATE||(this._state&g.TOUCH_ZOOM_ROTATE)===g.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(w,C),this._isUserControllingRotate=!0),(this._state&g.DOLLY)===g.DOLLY||(this._state&g.ZOOM)===g.ZOOM){const U=this.dollyToCursor?(t.x-this._elementRect.x)/this._elementRect.width*2-1:0,L=this.dollyToCursor?(t.y-this._elementRect.y)/this._elementRect.height*-2+1:0,x=this.dollyDragInverted?-1:1;(this._state&g.DOLLY)===g.DOLLY?(this._dollyInternal(x*C*Wt,U,L),this._isUserControllingDolly=!0):(this._zoomInternal(x*C*Wt,U,L),this._isUserControllingZoom=!0)}if((this._state&g.TOUCH_DOLLY)===g.TOUCH_DOLLY||(this._state&g.TOUCH_ZOOM)===g.TOUCH_ZOOM||(this._state&g.TOUCH_DOLLY_TRUCK)===g.TOUCH_DOLLY_TRUCK||(this._state&g.TOUCH_ZOOM_TRUCK)===g.TOUCH_ZOOM_TRUCK||(this._state&g.TOUCH_DOLLY_OFFSET)===g.TOUCH_DOLLY_OFFSET||(this._state&g.TOUCH_ZOOM_OFFSET)===g.TOUCH_ZOOM_OFFSET||(this._state&g.TOUCH_DOLLY_ROTATE)===g.TOUCH_DOLLY_ROTATE||(this._state&g.TOUCH_ZOOM_ROTATE)===g.TOUCH_ZOOM_ROTATE){const U=De.x-this._activePointers[1].clientX,L=De.y-this._activePointers[1].clientY,x=Math.sqrt(U*U+L*L),oe=r.y-x;r.set(0,x);const te=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,$e=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&g.TOUCH_DOLLY)===g.TOUCH_DOLLY||(this._state&g.TOUCH_DOLLY_ROTATE)===g.TOUCH_DOLLY_ROTATE||(this._state&g.TOUCH_DOLLY_TRUCK)===g.TOUCH_DOLLY_TRUCK||(this._state&g.TOUCH_DOLLY_OFFSET)===g.TOUCH_DOLLY_OFFSET?(this._dollyInternal(oe*Wt,te,$e),this._isUserControllingDolly=!0):(this._zoomInternal(oe*Wt,te,$e),this._isUserControllingZoom=!0)}((this._state&g.TRUCK)===g.TRUCK||(this._state&g.TOUCH_TRUCK)===g.TOUCH_TRUCK||(this._state&g.TOUCH_DOLLY_TRUCK)===g.TOUCH_DOLLY_TRUCK||(this._state&g.TOUCH_ZOOM_TRUCK)===g.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(w,C,!1),this._isUserControllingTruck=!0),((this._state&g.OFFSET)===g.OFFSET||(this._state&g.TOUCH_OFFSET)===g.TOUCH_OFFSET||(this._state&g.TOUCH_DOLLY_OFFSET)===g.TOUCH_DOLLY_OFFSET||(this._state&g.TOUCH_ZOOM_OFFSET)===g.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(w,C,!0),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},A=()=>{ci(this._activePointers,De),s.copy(De),this._dragNeedsUpdate=!1,(this._activePointers.length===0||this._activePointers.length===1&&this._activePointers[0]===this._lockedPointer)&&(this._isDragging=!1),this._activePointers.length===0&&this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",d),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",d),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",I),this._domElement.ownerDocument.addEventListener("pointerlockerror",F),this._domElement.ownerDocument.addEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",d),_())},this.unlockPointer=()=>{var v,E,w;this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),(v=this._domElement)===null||v===void 0||v.ownerDocument.exitPointerLock(),(E=this._domElement)===null||E===void 0||E.ownerDocument.removeEventListener("pointerlockchange",I),(w=this._domElement)===null||w===void 0||w.ownerDocument.removeEventListener("pointerlockerror",F),this.cancel()};const I=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},F=()=>{this.unlockPointer()};this._addAllEventListeners=v=>{this._domElement=v,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",o),this._domElement.addEventListener("pointercancel",d),this._domElement.addEventListener("wheel",u,{passive:!1}),this._domElement.addEventListener("contextmenu",p)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",o),this._domElement.removeEventListener("pointercancel",d),this._domElement.removeEventListener("wheel",u,{passive:!1}),this._domElement.removeEventListener("contextmenu",p),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",d),this._domElement.ownerDocument.removeEventListener("pointerlockchange",I),this._domElement.ownerDocument.removeEventListener("pointerlockerror",F))},this.cancel=()=>{this._state!==g.NONE&&(this._state=g.NONE,this._activePointers.length=0,A())},n&&this.connect(n),this.update(0)}get camera(){return this._camera}set camera(e){this._camera=e,this.updateCameraUp(),this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0}get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._domElement&&(e?(this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none"):(this.cancel(),this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect=""))}get active(){return!this._hasRested}get currentAction(){return this._state}get distance(){return this._spherical.radius}set distance(e){this._spherical.radius===e&&this._sphericalEnd.radius===e||(this._spherical.radius=e,this._sphericalEnd.radius=e,this._needsUpdate=!0)}get azimuthAngle(){return this._spherical.theta}set azimuthAngle(e){this._spherical.theta===e&&this._sphericalEnd.theta===e||(this._spherical.theta=e,this._sphericalEnd.theta=e,this._needsUpdate=!0)}get polarAngle(){return this._spherical.phi}set polarAngle(e){this._spherical.phi===e&&this._sphericalEnd.phi===e||(this._spherical.phi=e,this._sphericalEnd.phi=e,this._needsUpdate=!0)}get boundaryEnclosesCamera(){return this._boundaryEnclosesCamera}set boundaryEnclosesCamera(e){this._boundaryEnclosesCamera=e,this._needsUpdate=!0}set interactiveArea(e){this._interactiveArea.width=Ze(e.width,0,1),this._interactiveArea.height=Ze(e.height,0,1),this._interactiveArea.x=Ze(e.x,0,1-this._interactiveArea.width),this._interactiveArea.y=Ze(e.y,0,1-this._interactiveArea.height)}addEventListener(e,n){super.addEventListener(e,n)}removeEventListener(e,n){super.removeEventListener(e,n)}rotate(e,n,t=!1){return this.rotateTo(this._sphericalEnd.theta+e,this._sphericalEnd.phi+n,t)}rotateAzimuthTo(e,n=!1){return this.rotateTo(e,this._sphericalEnd.phi,n)}rotatePolarTo(e,n=!1){return this.rotateTo(this._sphericalEnd.theta,e,n)}rotateTo(e,n,t=!1){this._isUserControllingRotate=!1;const s=Ze(e,this.minAzimuthAngle,this.maxAzimuthAngle),r=Ze(n,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=s,this._sphericalEnd.phi=r,this._sphericalEnd.makeSafe(),this._needsUpdate=!0,t||(this._spherical.theta=this._sphericalEnd.theta,this._spherical.phi=this._sphericalEnd.phi);const o=!t||re(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&re(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(o)}dolly(e,n=!1){return this.dollyTo(this._sphericalEnd.radius-e,n)}dollyTo(e,n=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=bt.NONE,this._changedDolly=0,this._dollyToNoClamp(Ze(e,this.minDistance,this.maxDistance),n)}_dollyToNoClamp(e,n=!1){const t=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const o=this._collisionTest(),a=re(o,this._spherical.radius);if(!(t>e)&&a)return Promise.resolve();this._sphericalEnd.radius=Math.min(e,o)}else this._sphericalEnd.radius=e;this._needsUpdate=!0,n||(this._spherical.radius=this._sphericalEnd.radius);const r=!n||re(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(r)}dollyInFixed(e,n=!1){this._targetEnd.add(this._getCameraDirection(Ut).multiplyScalar(e)),n||this._target.copy(this._targetEnd);const t=!n||re(this._target.x,this._targetEnd.x,this.restThreshold)&&re(this._target.y,this._targetEnd.y,this.restThreshold)&&re(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(t)}zoom(e,n=!1){return this.zoomTo(this._zoomEnd+e,n)}zoomTo(e,n=!1){this._isUserControllingZoom=!1,this._zoomEnd=Ze(e,this.minZoom,this.maxZoom),this._needsUpdate=!0,n||(this._zoom=this._zoomEnd);const t=!n||re(this._zoom,this._zoomEnd,this.restThreshold);return this._changedZoom=0,this._createOnRestPromise(t)}pan(e,n,t=!1){return console.warn("`pan` has been renamed to `truck`"),this.truck(e,n,t)}truck(e,n,t=!1){this._camera.updateMatrix(),Ke.setFromMatrixColumn(this._camera.matrix,0),Xe.setFromMatrixColumn(this._camera.matrix,1),Ke.multiplyScalar(e),Xe.multiplyScalar(-n);const s=Z.copy(Ke).add(Xe),r=ie.copy(this._targetEnd).add(s);return this.moveTo(r.x,r.y,r.z,t)}forward(e,n=!1){Z.setFromMatrixColumn(this._camera.matrix,0),Z.crossVectors(this._camera.up,Z),Z.multiplyScalar(e);const t=ie.copy(this._targetEnd).add(Z);return this.moveTo(t.x,t.y,t.z,n)}elevate(e,n=!1){return Z.copy(this._camera.up).multiplyScalar(e),this.moveTo(this._targetEnd.x+Z.x,this._targetEnd.y+Z.y,this._targetEnd.z+Z.z,n)}moveTo(e,n,t,s=!1){this._isUserControllingTruck=!1;const r=Z.set(e,n,t).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,r,this.boundaryFriction),this._needsUpdate=!0,s||this._target.copy(this._targetEnd);const o=!s||re(this._target.x,this._targetEnd.x,this.restThreshold)&&re(this._target.y,this._targetEnd.y,this.restThreshold)&&re(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(o)}lookInDirectionOf(e,n,t,s=!1){const a=Z.set(e,n,t).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);return this.setPosition(a.x,a.y,a.z,s)}fitToBox(e,n,{cover:t=!1,paddingLeft:s=0,paddingRight:r=0,paddingBottom:o=0,paddingTop:a=0}={}){const d=[],c=e.isBox3?xt.copy(e):xt.setFromObject(e);c.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const u=Vi(this._sphericalEnd.theta,Bi),p=Vi(this._sphericalEnd.phi,Bi);d.push(this.rotateTo(u,p,n));const _=Z.setFromSpherical(this._sphericalEnd).normalize(),y=Wi.setFromUnitVectors(_,di),A=re(Math.abs(_.y),1);A&&y.multiply(mi.setFromAxisAngle(Kt,u)),y.multiply(this._yAxisUpSpaceInverse);const I=$i.makeEmpty();ie.copy(c.min).applyQuaternion(y),I.expandByPoint(ie),ie.copy(c.min).setX(c.max.x).applyQuaternion(y),I.expandByPoint(ie),ie.copy(c.min).setY(c.max.y).applyQuaternion(y),I.expandByPoint(ie),ie.copy(c.max).setZ(c.min.z).applyQuaternion(y),I.expandByPoint(ie),ie.copy(c.min).setZ(c.max.z).applyQuaternion(y),I.expandByPoint(ie),ie.copy(c.max).setY(c.min.y).applyQuaternion(y),I.expandByPoint(ie),ie.copy(c.max).setX(c.min.x).applyQuaternion(y),I.expandByPoint(ie),ie.copy(c.max).applyQuaternion(y),I.expandByPoint(ie),I.min.x-=s,I.min.y-=o,I.max.x+=r,I.max.y+=a,y.setFromUnitVectors(di,_),A&&y.premultiply(mi.invert()),y.premultiply(this._yAxisUpSpace);const F=I.getSize(Z),v=I.getCenter(ie).applyQuaternion(y);if(mt(this._camera)){const E=this.getDistanceToFitBox(F.x,F.y,F.z,t);d.push(this.moveTo(v.x,v.y,v.z,n)),d.push(this.dollyTo(E,n)),d.push(this.setFocalOffset(0,0,0,n))}else if(ot(this._camera)){const E=this._camera,w=E.right-E.left,C=E.top-E.bottom,U=t?Math.max(w/F.x,C/F.y):Math.min(w/F.x,C/F.y);d.push(this.moveTo(v.x,v.y,v.z,n)),d.push(this.zoomTo(U,n)),d.push(this.setFocalOffset(0,0,0,n))}return Promise.all(d)}fitToSphere(e,n){const t=[],r="isObject3D"in e?qe.createBoundingSphere(e,ui):ui.copy(e);if(t.push(this.moveTo(r.center.x,r.center.y,r.center.z,n)),mt(this._camera)){const o=this.getDistanceToFitSphere(r.radius);t.push(this.dollyTo(o,n))}else if(ot(this._camera)){const o=this._camera.right-this._camera.left,a=this._camera.top-this._camera.bottom,d=2*r.radius,c=Math.min(o/d,a/d);t.push(this.zoomTo(c,n))}return t.push(this.setFocalOffset(0,0,0,n)),Promise.all(t)}setLookAt(e,n,t,s,r,o,a=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=bt.NONE,this._changedDolly=0;const d=ie.set(s,r,o),c=Z.set(e,n,t);this._targetEnd.copy(d),this._sphericalEnd.setFromVector3(c.sub(d).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,a||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const u=!a||re(this._target.x,this._targetEnd.x,this.restThreshold)&&re(this._target.y,this._targetEnd.y,this.restThreshold)&&re(this._target.z,this._targetEnd.z,this.restThreshold)&&re(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&re(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&re(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(u)}lerpLookAt(e,n,t,s,r,o,a,d,c,u,p,_,y,A=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=bt.NONE,this._changedDolly=0;const I=Z.set(s,r,o),F=ie.set(e,n,t);Ve.setFromVector3(F.sub(I).applyQuaternion(this._yAxisUpSpace));const v=Tt.set(u,p,_),E=ie.set(a,d,c);kt.setFromVector3(E.sub(v).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(I.lerp(v,y));const w=kt.theta-Ve.theta,C=kt.phi-Ve.phi,U=kt.radius-Ve.radius;this._sphericalEnd.set(Ve.radius+U*y,Ve.phi+C*y,Ve.theta+w*y),this.normalizeRotations(),this._needsUpdate=!0,A||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const L=!A||re(this._target.x,this._targetEnd.x,this.restThreshold)&&re(this._target.y,this._targetEnd.y,this.restThreshold)&&re(this._target.z,this._targetEnd.z,this.restThreshold)&&re(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&re(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&re(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(L)}setPosition(e,n,t,s=!1){return this.setLookAt(e,n,t,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,s)}setTarget(e,n,t,s=!1){const r=this.getPosition(Z),o=this.setLookAt(r.x,r.y,r.z,e,n,t,s);return this._sphericalEnd.phi=Ze(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),o}setFocalOffset(e,n,t,s=!1){this._isUserControllingOffset=!1,this._focalOffsetEnd.set(e,n,t),this._needsUpdate=!0,s||this._focalOffset.copy(this._focalOffsetEnd);const r=!s||re(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&re(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&re(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(r)}setOrbitPoint(e,n,t){this._camera.updateMatrixWorld(),Ke.setFromMatrixColumn(this._camera.matrixWorldInverse,0),Xe.setFromMatrixColumn(this._camera.matrixWorldInverse,1),ft.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const s=Z.set(e,n,t),r=s.distanceTo(this._camera.position),o=s.sub(this._camera.position);Ke.multiplyScalar(o.x),Xe.multiplyScalar(o.y),ft.multiplyScalar(o.z),Z.copy(Ke).add(Xe).add(ft),Z.z=Z.z+r,this.dollyTo(r,!1),this.setFocalOffset(-Z.x,Z.y,-Z.z,!1),this.moveTo(e,n,t,!1)}setBoundary(e){if(!e){this._boundary.min.set(-1/0,-1/0,-1/0),this._boundary.max.set(1/0,1/0,1/0),this._needsUpdate=!0;return}this._boundary.copy(e),this._boundary.clampPoint(this._targetEnd,this._targetEnd),this._needsUpdate=!0}setViewport(e,n,t,s){if(e===null){this._viewport=null;return}this._viewport=this._viewport||new H.Vector4,typeof e=="number"?this._viewport.set(e,n,t,s):this._viewport.copy(e)}getDistanceToFitBox(e,n,t,s=!1){if(li(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const r=e/n,o=this._camera.getEffectiveFOV()*Pt,a=this._camera.aspect;return((s?r>a:r<a)?n:e/a)*.5/Math.tan(o*.5)+t*.5}getDistanceToFitSphere(e){if(li(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const n=this._camera.getEffectiveFOV()*Pt,t=Math.atan(Math.tan(n*.5)*this._camera.aspect)*2,s=1<this._camera.aspect?n:t;return e/Math.sin(s*.5)}getTarget(e,n=!0){return(e&&e.isVector3?e:new H.Vector3).copy(n?this._targetEnd:this._target)}getPosition(e,n=!0){return(e&&e.isVector3?e:new H.Vector3).setFromSpherical(n?this._sphericalEnd:this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(n?this._targetEnd:this._target)}getSpherical(e,n=!0){return(e||new H.Spherical).copy(n?this._sphericalEnd:this._spherical)}getFocalOffset(e,n=!0){return(e&&e.isVector3?e:new H.Vector3).copy(n?this._focalOffsetEnd:this._focalOffset)}normalizeRotations(){this._sphericalEnd.theta=this._sphericalEnd.theta%Ct,this._sphericalEnd.theta<0&&(this._sphericalEnd.theta+=Ct),this._spherical.theta+=Ct*Math.round((this._sphericalEnd.theta-this._spherical.theta)/Ct)}stop(){this._focalOffset.copy(this._focalOffsetEnd),this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd),this._zoom=this._zoomEnd}reset(e=!1){if(!re(this._camera.up.x,this._cameraUp0.x)||!re(this._camera.up.y,this._cameraUp0.y)||!re(this._camera.up.z,this._cameraUp0.z)){this._camera.up.copy(this._cameraUp0);const t=this.getPosition(Z);this.updateCameraUp(),this.setPosition(t.x,t.y,t.z)}const n=[this.setLookAt(this._position0.x,this._position0.y,this._position0.z,this._target0.x,this._target0.y,this._target0.z,e),this.setFocalOffset(this._focalOffset0.x,this._focalOffset0.y,this._focalOffset0.z,e),this.zoomTo(this._zoom0,e)];return Promise.all(n)}saveState(){this._cameraUp0.copy(this._camera.up),this.getTarget(this._target0),this.getPosition(this._position0),this._zoom0=this._zoom,this._focalOffset0.copy(this._focalOffset)}updateCameraUp(){this._yAxisUpSpace.setFromUnitVectors(this._camera.up,Kt),this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert()}applyCameraUp(){const e=Z.subVectors(this._target,this._camera.position).normalize(),n=ie.crossVectors(e,this._camera.up);this._camera.up.crossVectors(n,e).normalize(),this._camera.updateMatrixWorld();const t=this.getPosition(Z);this.updateCameraUp(),this.setPosition(t.x,t.y,t.z)}update(e){const n=this._sphericalEnd.theta-this._spherical.theta,t=this._sphericalEnd.phi-this._spherical.phi,s=this._sphericalEnd.radius-this._spherical.radius,r=Gi.subVectors(this._targetEnd,this._target),o=Zi.subVectors(this._focalOffsetEnd,this._focalOffset),a=this._zoomEnd-this._zoom;if(he(n))this._thetaVelocity.value=0,this._spherical.theta=this._sphericalEnd.theta;else{const p=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.theta=$t(this._spherical.theta,this._sphericalEnd.theta,this._thetaVelocity,p,1/0,e),this._needsUpdate=!0}if(he(t))this._phiVelocity.value=0,this._spherical.phi=this._sphericalEnd.phi;else{const p=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.phi=$t(this._spherical.phi,this._sphericalEnd.phi,this._phiVelocity,p,1/0,e),this._needsUpdate=!0}if(he(s))this._radiusVelocity.value=0,this._spherical.radius=this._sphericalEnd.radius;else{const p=this._isUserControllingDolly?this.draggingSmoothTime:this.smoothTime;this._spherical.radius=$t(this._spherical.radius,this._sphericalEnd.radius,this._radiusVelocity,p,this.maxSpeed,e),this._needsUpdate=!0}if(he(r.x)&&he(r.y)&&he(r.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const p=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;Hi(this._target,this._targetEnd,this._targetVelocity,p,this.maxSpeed,e,this._target),this._needsUpdate=!0}if(he(o.x)&&he(o.y)&&he(o.z))this._focalOffsetVelocity.set(0,0,0),this._focalOffset.copy(this._focalOffsetEnd);else{const p=this._isUserControllingOffset?this.draggingSmoothTime:this.smoothTime;Hi(this._focalOffset,this._focalOffsetEnd,this._focalOffsetVelocity,p,this.maxSpeed,e,this._focalOffset),this._needsUpdate=!0}if(he(a))this._zoomVelocity.value=0,this._zoom=this._zoomEnd;else{const p=this._isUserControllingZoom?this.draggingSmoothTime:this.smoothTime;this._zoom=$t(this._zoom,this._zoomEnd,this._zoomVelocity,p,1/0,e)}if(this.dollyToCursor){if(mt(this._camera)&&this._changedDolly!==0){const p=this._spherical.radius-this._lastDistance,_=this._camera,y=this._getCameraDirection(Ut),A=Z.copy(y).cross(_.up).normalize();A.lengthSq()===0&&(A.x=1);const I=ie.crossVectors(A,y),F=this._sphericalEnd.radius*Math.tan(_.getEffectiveFOV()*Pt*.5),E=(this._sphericalEnd.radius-p-this._sphericalEnd.radius)/this._sphericalEnd.radius,w=Tt.copy(this._targetEnd).add(A.multiplyScalar(this._dollyControlCoord.x*F*_.aspect)).add(I.multiplyScalar(this._dollyControlCoord.y*F)),C=Z.copy(this._targetEnd).lerp(w,E),U=this._lastDollyDirection===bt.IN&&this._spherical.radius<=this.minDistance,L=this._lastDollyDirection===bt.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(U||L)){this._sphericalEnd.radius-=p,this._spherical.radius-=p;const oe=ie.copy(y).multiplyScalar(-p);C.add(oe)}this._boundary.clampPoint(C,C);const x=ie.subVectors(C,this._targetEnd);this._targetEnd.copy(C),this._target.add(x),this._changedDolly-=p,he(this._changedDolly)&&(this._changedDolly=0)}else if(ot(this._camera)&&this._changedZoom!==0){const p=this._zoom-this._lastZoom,_=this._camera,y=Z.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(_.near+_.far)/(_.near-_.far)).unproject(_),A=ie.set(0,0,-1).applyQuaternion(_.quaternion),I=Tt.copy(y).add(A.multiplyScalar(-y.dot(_.up))),v=-(this._zoom-p-this._zoom)/this._zoom,E=this._getCameraDirection(Ut),w=this._targetEnd.dot(E),C=Z.copy(this._targetEnd).lerp(I,v),U=C.dot(E),L=E.multiplyScalar(U-w);C.sub(L),this._boundary.clampPoint(C,C);const x=ie.subVectors(C,this._targetEnd);this._targetEnd.copy(C),this._target.add(x),this._changedZoom-=p,he(this._changedZoom)&&(this._changedZoom=0)}}this._camera.zoom!==this._zoom&&(this._camera.zoom=this._zoom,this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0),this._dragNeedsUpdate=!0;const d=this._collisionTest();this._spherical.radius=Math.min(this._spherical.radius,d),this._spherical.makeSafe(),this._camera.position.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(this._target),this._camera.lookAt(this._target),(!he(this._focalOffset.x)||!he(this._focalOffset.y)||!he(this._focalOffset.z))&&(this._camera.updateMatrixWorld(),Ke.setFromMatrixColumn(this._camera.matrix,0),Xe.setFromMatrixColumn(this._camera.matrix,1),ft.setFromMatrixColumn(this._camera.matrix,2),Ke.multiplyScalar(this._focalOffset.x),Xe.multiplyScalar(-this._focalOffset.y),ft.multiplyScalar(this._focalOffset.z),Z.copy(Ke).add(Xe).add(ft),this._camera.position.add(Z)),this._boundaryEnclosesCamera&&this._encloseToBoundary(this._camera.position.copy(this._target),Z.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),1);const u=this._needsUpdate;return u&&!this._updatedLastTime?(this._hasRested=!1,this.dispatchEvent({type:"wake"}),this.dispatchEvent({type:"update"})):u?(this.dispatchEvent({type:"update"}),he(n,this.restThreshold)&&he(t,this.restThreshold)&&he(s,this.restThreshold)&&he(r.x,this.restThreshold)&&he(r.y,this.restThreshold)&&he(r.z,this.restThreshold)&&he(o.x,this.restThreshold)&&he(o.y,this.restThreshold)&&he(o.z,this.restThreshold)&&he(a,this.restThreshold)&&!this._hasRested&&(this._hasRested=!0,this.dispatchEvent({type:"rest"}))):!u&&this._updatedLastTime&&this.dispatchEvent({type:"sleep"}),this._lastDistance=this._spherical.radius,this._lastZoom=this._zoom,this._updatedLastTime=u,this._needsUpdate=!1,u}toJSON(){return JSON.stringify({enabled:this._enabled,minDistance:this.minDistance,maxDistance:Lt(this.maxDistance),minZoom:this.minZoom,maxZoom:Lt(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:Lt(this.maxPolarAngle),minAzimuthAngle:Lt(this.minAzimuthAngle),maxAzimuthAngle:Lt(this.maxAzimuthAngle),smoothTime:this.smoothTime,draggingSmoothTime:this.draggingSmoothTime,dollySpeed:this.dollySpeed,truckSpeed:this.truckSpeed,dollyToCursor:this.dollyToCursor,verticalDragToForward:this.verticalDragToForward,target:this._targetEnd.toArray(),position:Z.setFromSpherical(this._sphericalEnd).add(this._targetEnd).toArray(),zoom:this._zoomEnd,focalOffset:this._focalOffsetEnd.toArray(),target0:this._target0.toArray(),position0:this._position0.toArray(),zoom0:this._zoom0,focalOffset0:this._focalOffset0.toArray()})}fromJSON(e,n=!1){const t=JSON.parse(e);this.enabled=t.enabled,this.minDistance=t.minDistance,this.maxDistance=It(t.maxDistance),this.minZoom=t.minZoom,this.maxZoom=It(t.maxZoom),this.minPolarAngle=t.minPolarAngle,this.maxPolarAngle=It(t.maxPolarAngle),this.minAzimuthAngle=It(t.minAzimuthAngle),this.maxAzimuthAngle=It(t.maxAzimuthAngle),this.smoothTime=t.smoothTime,this.draggingSmoothTime=t.draggingSmoothTime,this.dollySpeed=t.dollySpeed,this.truckSpeed=t.truckSpeed,this.dollyToCursor=t.dollyToCursor,this.verticalDragToForward=t.verticalDragToForward,this._target0.fromArray(t.target0),this._position0.fromArray(t.position0),this._zoom0=t.zoom0,this._focalOffset0.fromArray(t.focalOffset0),this.moveTo(t.target[0],t.target[1],t.target[2],n),Ve.setFromVector3(Z.fromArray(t.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(Ve.theta,Ve.phi,n),this.dollyTo(Ve.radius,n),this.zoomTo(t.zoom,n),this.setFocalOffset(t.focalOffset[0],t.focalOffset[1],t.focalOffset[2],n),this._needsUpdate=!0}connect(e){if(this._domElement){console.warn("camera-controls is already connected.");return}e.setAttribute("data-camera-controls-version",ds),this._addAllEventListeners(e),this._getClientRect(this._elementRect)}disconnect(){this.cancel(),this._removeAllEventListeners(),this._domElement&&(this._domElement.removeAttribute("data-camera-controls-version"),this._domElement=void 0)}dispose(){this.removeAllEventListeners(),this.disconnect()}_getTargetDirection(e){return e.setFromSpherical(this._spherical).divideScalar(this._spherical.radius).applyQuaternion(this._yAxisUpSpaceInverse)}_getCameraDirection(e){return this._getTargetDirection(e).negate()}_findPointerById(e){return this._activePointers.find(n=>n.pointerId===e)}_findPointerByMouseButton(e){return this._activePointers.find(n=>n.mouseButton===e)}_disposePointer(e){this._activePointers.splice(this._activePointers.indexOf(e),1)}_encloseToBoundary(e,n,t){const s=n.lengthSq();if(s===0)return e;const r=ie.copy(n).add(e),a=this._boundary.clampPoint(r,Tt).sub(r),d=a.lengthSq();if(d===0)return e.add(n);if(d===s)return e;if(t===0)return e.add(n).add(a);{const c=1+t*d/n.dot(a);return e.add(ie.copy(n).multiplyScalar(c)).add(a.multiplyScalar(1-t))}}_updateNearPlaneCorners(){if(mt(this._camera)){const e=this._camera,n=e.near,t=e.getEffectiveFOV()*Pt,s=Math.tan(t*.5)*n,r=s*e.aspect;this._nearPlaneCorners[0].set(-r,-s,0),this._nearPlaneCorners[1].set(r,-s,0),this._nearPlaneCorners[2].set(r,s,0),this._nearPlaneCorners[3].set(-r,s,0)}else if(ot(this._camera)){const e=this._camera,n=1/e.zoom,t=e.left*n,s=e.right*n,r=e.top*n,o=e.bottom*n;this._nearPlaneCorners[0].set(t,r,0),this._nearPlaneCorners[1].set(s,r,0),this._nearPlaneCorners[2].set(s,o,0),this._nearPlaneCorners[3].set(t,o,0)}}_collisionTest(){let e=1/0;if(!(this.colliderMeshes.length>=1)||li(this._camera,"_collisionTest"))return e;const t=this._getTargetDirection(Ut);fi.lookAt(Yi,t,this._camera.up);for(let s=0;s<4;s++){const r=ie.copy(this._nearPlaneCorners[s]);r.applyMatrix4(fi);const o=Tt.addVectors(this._target,r);Xt.set(o,t),Xt.far=this._spherical.radius+1;const a=Xt.intersectObjects(this.colliderMeshes);a.length!==0&&a[0].distance<e&&(e=a[0].distance)}return e}_getClientRect(e){if(!this._domElement)return;const n=this._domElement.getBoundingClientRect();return e.x=n.left,e.y=n.top,this._viewport?(e.x+=this._viewport.x,e.y+=n.height-this._viewport.w-this._viewport.y,e.width=this._viewport.z,e.height=this._viewport.w):(e.width=n.width,e.height=n.height),e}_createOnRestPromise(e){return e?Promise.resolve():(this._hasRested=!1,this.dispatchEvent({type:"transitionstart"}),new Promise(n=>{const t=()=>{this.removeEventListener("rest",t),n()};this.addEventListener("rest",t)}))}_addAllEventListeners(e){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(e){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(e){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(e,n=new H.Sphere){const t=n,s=t.center;xt.makeEmpty(),e.traverseVisible(o=>{o.isMesh&&xt.expandByObject(o)}),xt.getCenter(s);let r=0;return e.traverseVisible(o=>{if(!o.isMesh)return;const a=o,d=a.geometry.clone();d.applyMatrix4(a.matrixWorld);const u=d.attributes.position;for(let p=0,_=u.count;p<_;p++)Z.fromBufferAttribute(u,p),r=Math.max(r,s.distanceToSquared(Z))}),t.radius=Math.sqrt(r),t}}const ti=i=>{const[e,n]=T.useState(i.options[i.index]),t=()=>{i.onToggle(!i.open)},s=r=>{r!==e&&(i.onSelect(r),n(r)),i.onToggle(!1)};return m.jsxs("div",{className:`dropdown ${i.up===!0?"up":""}`,children:[m.jsx("div",{className:"dropdown-toggle",onClick:t,children:`${i.title}: ${e}`}),i.open&&m.jsx("ul",{className:"dropdown-menu",children:i.options.map(r=>m.jsx("li",{onClick:()=>s(r),children:r},r))})]})},pt=T.forwardRef(function(e,n){const t=["Renderer","Depth","Normals","UVs","Wireframe"],[s,r]=T.useState("Renderer"),[o,a]=T.useState(!1),[d,c]=T.useState(!1),[u,p]=T.useState(!1);return m.jsxs("div",{className:"CameraWindow",children:[m.jsx("div",{ref:n,className:"clickable",onClick:()=>{u&&p(!1)}}),m.jsxs("div",{className:"options",children:[m.jsx(ti,{title:"Camera",index:e.options.indexOf(e.camera.name),open:u,options:e.options,onSelect:e.onSelectCamera,onToggle:_=>{p(_)},up:!0}),m.jsx(ti,{title:"Mode",index:t.indexOf(s),open:d,options:t,onSelect:_=>{if(_===s)return;const y=_;e.onSelectRenderMode(y),r(y)},onToggle:_=>{o&&a(!1),c(_)},up:!0})]})]})});class ms extends f.ShaderMaterial{constructor(e){super({extensions:{derivatives:!0},glslVersion:f.GLSL3,side:f.DoubleSide,transparent:!0,uniforms:{uScale:{value:e?.scale!==void 0?e?.scale:.1},uDivisions:{value:e?.divisions!==void 0?e?.divisions:10},uColor:{value:e?.color!==void 0?e?.color:new f.Color(16777215)},uDistance:{value:e?.distance!==void 0?e?.distance:1e4},uSubgridOpacity:{value:e?.subgridOpacity!==void 0?e?.subgridOpacity:.15},uGridOpacity:{value:e?.gridOpacity!==void 0?e?.gridOpacity:.25}},vertexShader:`out vec3 worldPosition;
|
35
|
+
*/const Z={LEFT:1,RIGHT:2,MIDDLE:4},m=Object.freeze({NONE:0,ROTATE:1,TRUCK:2,OFFSET:4,DOLLY:8,ZOOM:16,TOUCH_ROTATE:32,TOUCH_TRUCK:64,TOUCH_OFFSET:128,TOUCH_DOLLY:256,TOUCH_ZOOM:512,TOUCH_DOLLY_TRUCK:1024,TOUCH_DOLLY_OFFSET:2048,TOUCH_DOLLY_ROTATE:4096,TOUCH_ZOOM_TRUCK:8192,TOUCH_ZOOM_OFFSET:16384,TOUCH_ZOOM_ROTATE:32768}),Be={NONE:0,IN:1,OUT:-1};function Re(i){return i.isPerspectiveCamera}function Se(i){return i.isOrthographicCamera}const Ve=Math.PI*2,Li=Math.PI/2,ls=1e-5,Je=Math.PI/180;function ue(i,e,t){return Math.max(e,Math.min(t,i))}function Y(i,e=ls){return Math.abs(i)<e}function N(i,e,t=ls){return Y(i-e,t)}function Ui(i,e){return Math.round(i/e)*e}function et(i){return isFinite(i)?i:i<0?-Number.MAX_VALUE:Number.MAX_VALUE}function tt(i){return Math.abs(i)<Number.MAX_VALUE?i:i*(1/0)}function Et(i,e,t,s,n=1/0,a){s=Math.max(1e-4,s);const r=2/s,l=r*a,d=1/(1+l+.48*l*l+.235*l*l*l);let h=i-e;const p=e,f=n*s;h=ue(h,-f,f),e=i-h;const g=(t.value+r*h)*a;t.value=(t.value-r*g)*d;let y=e+(h+g)*d;return p-i>0==y>p&&(y=p,t.value=(y-p)/a),y}function ki(i,e,t,s,n=1/0,a,r){s=Math.max(1e-4,s);const l=2/s,d=l*a,h=1/(1+d+.48*d*d+.235*d*d*d);let p=e.x,f=e.y,g=e.z,y=i.x-p,x=i.y-f,M=i.z-g;const T=p,_=f,v=g,C=n*s,b=C*C,D=y*y+x*x+M*M;if(D>b){const X=Math.sqrt(D);y=y/X*C,x=x/X*C,M=M/X*C}p=i.x-y,f=i.y-x,g=i.z-M;const O=(t.x+l*y)*a,j=(t.y+l*x)*a,W=(t.z+l*M)*a;t.x=(t.x-l*O)*h,t.y=(t.y-l*j)*h,t.z=(t.z-l*W)*h,r.x=p+(y+O)*h,r.y=f+(x+j)*h,r.z=g+(M+W)*h;const le=T-i.x,be=_-i.y,Xe=v-i.z,je=r.x-T,oe=r.y-_,K=r.z-v;return le*je+be*oe+Xe*K>0&&(r.x=T,r.y=_,r.z=v,t.x=(r.x-T)/a,t.y=(r.y-_)/a,t.z=(r.z-v)/a),r}function Yt(i,e){e.set(0,0),i.forEach(t=>{e.x+=t.clientX,e.y+=t.clientY}),e.x/=i.length,e.y/=i.length}function Gt(i,e){return Se(i)?(console.warn(`${e} is not supported in OrthographicCamera`),!0):!1}class Nn{constructor(){this._listeners={}}addEventListener(e,t){const s=this._listeners;s[e]===void 0&&(s[e]=[]),s[e].indexOf(t)===-1&&s[e].push(t)}hasEventListener(e,t){const s=this._listeners;return s[e]!==void 0&&s[e].indexOf(t)!==-1}removeEventListener(e,t){const n=this._listeners[e];if(n!==void 0){const a=n.indexOf(t);a!==-1&&n.splice(a,1)}}removeAllEventListeners(e){if(!e){this._listeners={};return}Array.isArray(this._listeners[e])&&(this._listeners[e].length=0)}dispatchEvent(e){const s=this._listeners[e.type];if(s!==void 0){e.target=this;const n=s.slice(0);for(let a=0,r=n.length;a<r;a++)n[a].call(this,e)}}}var Zt;const Hn="2.9.0",bt=1/8,Bn=/Mac/.test((Zt=globalThis?.navigator)===null||Zt===void 0?void 0:Zt.platform);let A,ji,Ct,Wt,re,L,F,Ye,it,pe,me,Pe,Fi,zi,he,st,Ge,Ni,Xt,Hi,Qt,$t,St;class _e extends Nn{static install(e){A=e.THREE,ji=Object.freeze(new A.Vector3(0,0,0)),Ct=Object.freeze(new A.Vector3(0,1,0)),Wt=Object.freeze(new A.Vector3(0,0,1)),re=new A.Vector2,L=new A.Vector3,F=new A.Vector3,Ye=new A.Vector3,it=new A.Vector3,pe=new A.Vector3,me=new A.Vector3,Pe=new A.Vector3,Fi=new A.Vector3,zi=new A.Vector3,he=new A.Spherical,st=new A.Spherical,Ge=new A.Box3,Ni=new A.Box3,Xt=new A.Sphere,Hi=new A.Quaternion,Qt=new A.Quaternion,$t=new A.Matrix4,St=new A.Raycaster}static get ACTION(){return m}constructor(e,t){super(),this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.minDistance=Number.EPSILON,this.maxDistance=1/0,this.infinityDolly=!1,this.minZoom=.01,this.maxZoom=1/0,this.smoothTime=.25,this.draggingSmoothTime=.125,this.maxSpeed=1/0,this.azimuthRotateSpeed=1,this.polarRotateSpeed=1,this.dollySpeed=1,this.dollyDragInverted=!1,this.truckSpeed=2,this.dollyToCursor=!1,this.dragToOffset=!1,this.verticalDragToForward=!1,this.boundaryFriction=0,this.restThreshold=.01,this.colliderMeshes=[],this.cancel=()=>{},this._enabled=!0,this._state=m.NONE,this._viewport=null,this._changedDolly=0,this._changedZoom=0,this._hasRested=!0,this._boundaryEnclosesCamera=!1,this._needsUpdate=!0,this._updatedLastTime=!1,this._elementRect=new DOMRect,this._isDragging=!1,this._dragNeedsUpdate=!0,this._activePointers=[],this._lockedPointer=null,this._interactiveArea=new DOMRect(0,0,1,1),this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._isUserControllingOffset=!1,this._isUserControllingZoom=!1,this._lastDollyDirection=Be.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new A.Vector3,this._focalOffsetVelocity=new A.Vector3,this._zoomVelocity={value:0},this._truckInternal=(_,v,C)=>{let b,D;if(Re(this._camera)){const O=L.copy(this._camera.position).sub(this._target),j=this._camera.getEffectiveFOV()*Je,W=O.length()*Math.tan(j*.5);b=this.truckSpeed*_*W/this._elementRect.height,D=this.truckSpeed*v*W/this._elementRect.height}else if(Se(this._camera)){const O=this._camera;b=_*(O.right-O.left)/O.zoom/this._elementRect.width,D=v*(O.top-O.bottom)/O.zoom/this._elementRect.height}else return;this.verticalDragToForward?(C?this.setFocalOffset(this._focalOffsetEnd.x+b,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(b,0,!0),this.forward(-D,!0)):C?this.setFocalOffset(this._focalOffsetEnd.x+b,this._focalOffsetEnd.y+D,this._focalOffsetEnd.z,!0):this.truck(b,D,!0)},this._rotateInternal=(_,v)=>{const C=Ve*this.azimuthRotateSpeed*_/this._elementRect.height,b=Ve*this.polarRotateSpeed*v/this._elementRect.height;this.rotate(C,b,!0)},this._dollyInternal=(_,v,C)=>{const b=Math.pow(.95,-_*this.dollySpeed),D=this._sphericalEnd.radius,O=this._sphericalEnd.radius*b,j=ue(O,this.minDistance,this.maxDistance),W=j-O;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(O,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(W,!0),this._dollyToNoClamp(j,!0)):this._dollyToNoClamp(j,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?O:j)-D,this._dollyControlCoord.set(v,C)),this._lastDollyDirection=Math.sign(-_)},this._zoomInternal=(_,v,C)=>{const b=Math.pow(.95,_*this.dollySpeed),D=this._zoom,O=this._zoom*b;this.zoomTo(O,!0),this.dollyToCursor&&(this._changedZoom+=O-D,this._dollyControlCoord.set(v,C))},typeof A>"u"&&console.error("camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."),this._camera=e,this._yAxisUpSpace=new A.Quaternion().setFromUnitVectors(this._camera.up,Ct),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=m.NONE,this._target=new A.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new A.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new A.Spherical().setFromVector3(L.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace)),this._sphericalEnd=this._spherical.clone(),this._lastDistance=this._spherical.radius,this._zoom=this._camera.zoom,this._zoomEnd=this._zoom,this._lastZoom=this._zoom,this._nearPlaneCorners=[new A.Vector3,new A.Vector3,new A.Vector3,new A.Vector3],this._updateNearPlaneCorners(),this._boundary=new A.Box3(new A.Vector3(-1/0,-1/0,-1/0),new A.Vector3(1/0,1/0,1/0)),this._cameraUp0=this._camera.up.clone(),this._target0=this._target.clone(),this._position0=this._camera.position.clone(),this._zoom0=this._zoom,this._focalOffset0=this._focalOffset.clone(),this._dollyControlCoord=new A.Vector2,this.mouseButtons={left:m.ROTATE,middle:m.DOLLY,right:m.TRUCK,wheel:Re(this._camera)?m.DOLLY:Se(this._camera)?m.ZOOM:m.NONE},this.touches={one:m.TOUCH_ROTATE,two:Re(this._camera)?m.TOUCH_DOLLY_TRUCK:Se(this._camera)?m.TOUCH_ZOOM_TRUCK:m.NONE,three:m.TOUCH_TRUCK};const s=new A.Vector2,n=new A.Vector2,a=new A.Vector2,r=_=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const b=this._domElement.getBoundingClientRect(),D=_.clientX/b.width,O=_.clientY/b.height;if(D<this._interactiveArea.left||D>this._interactiveArea.right||O<this._interactiveArea.top||O>this._interactiveArea.bottom)return}const v=_.pointerType!=="mouse"?null:(_.buttons&Z.LEFT)===Z.LEFT?Z.LEFT:(_.buttons&Z.MIDDLE)===Z.MIDDLE?Z.MIDDLE:(_.buttons&Z.RIGHT)===Z.RIGHT?Z.RIGHT:null;if(v!==null){const b=this._findPointerByMouseButton(v);b&&this._disposePointer(b)}if((_.buttons&Z.LEFT)===Z.LEFT&&this._lockedPointer)return;const C={pointerId:_.pointerId,clientX:_.clientX,clientY:_.clientY,deltaX:0,deltaY:0,mouseButton:v};this._activePointers.push(C),this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",d),this._domElement.ownerDocument.addEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",d),this._isDragging=!0,g(_)},l=_=>{_.cancelable&&_.preventDefault();const v=_.pointerId,C=this._lockedPointer||this._findPointerById(v);if(C){if(C.clientX=_.clientX,C.clientY=_.clientY,C.deltaX=_.movementX,C.deltaY=_.movementY,this._state=0,_.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else(!this._isDragging&&this._lockedPointer||this._isDragging&&(_.buttons&Z.LEFT)===Z.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(_.buttons&Z.MIDDLE)===Z.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(_.buttons&Z.RIGHT)===Z.RIGHT&&(this._state=this._state|this.mouseButtons.right);y()}},d=_=>{const v=this._findPointerById(_.pointerId);if(!(v&&v===this._lockedPointer)){if(v&&this._disposePointer(v),_.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=m.NONE;break;case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else this._state=m.NONE;x()}};let h=-1;const p=_=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===m.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const O=this._domElement.getBoundingClientRect(),j=_.clientX/O.width,W=_.clientY/O.height;if(j<this._interactiveArea.left||j>this._interactiveArea.right||W<this._interactiveArea.top||W>this._interactiveArea.bottom)return}if(_.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===m.ROTATE||this.mouseButtons.wheel===m.TRUCK){const O=performance.now();h-O<1e3&&this._getClientRect(this._elementRect),h=O}const v=Bn?-1:-3,C=_.deltaMode===1?_.deltaY/v:_.deltaY/(v*10),b=this.dollyToCursor?(_.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,D=this.dollyToCursor?(_.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case m.ROTATE:{this._rotateInternal(_.deltaX,_.deltaY),this._isUserControllingRotate=!0;break}case m.TRUCK:{this._truckInternal(_.deltaX,_.deltaY,!1),this._isUserControllingTruck=!0;break}case m.OFFSET:{this._truckInternal(_.deltaX,_.deltaY,!0),this._isUserControllingOffset=!0;break}case m.DOLLY:{this._dollyInternal(-C,b,D),this._isUserControllingDolly=!0;break}case m.ZOOM:{this._zoomInternal(-C,b,D),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},f=_=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===_e.ACTION.NONE){const v=_ instanceof PointerEvent?_.pointerId:0,C=this._findPointerById(v);C&&this._disposePointer(C),this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",d);return}_.preventDefault()}},g=_=>{if(!this._enabled)return;if(Yt(this._activePointers,re),this._getClientRect(this._elementRect),s.copy(re),n.copy(re),this._activePointers.length>=2){const C=re.x-this._activePointers[1].clientX,b=re.y-this._activePointers[1].clientY,D=Math.sqrt(C*C+b*b);a.set(0,D);const O=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,j=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;n.set(O,j)}if(this._state=0,!_)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in _&&_.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else!this._lockedPointer&&(_.buttons&Z.LEFT)===Z.LEFT&&(this._state=this._state|this.mouseButtons.left),(_.buttons&Z.MIDDLE)===Z.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(_.buttons&Z.RIGHT)===Z.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&m.ROTATE)===m.ROTATE||(this._state&m.TOUCH_ROTATE)===m.TOUCH_ROTATE||(this._state&m.TOUCH_DOLLY_ROTATE)===m.TOUCH_DOLLY_ROTATE||(this._state&m.TOUCH_ZOOM_ROTATE)===m.TOUCH_ZOOM_ROTATE)&&(this._sphericalEnd.theta=this._spherical.theta,this._sphericalEnd.phi=this._spherical.phi,this._thetaVelocity.value=0,this._phiVelocity.value=0),((this._state&m.TRUCK)===m.TRUCK||(this._state&m.TOUCH_TRUCK)===m.TOUCH_TRUCK||(this._state&m.TOUCH_DOLLY_TRUCK)===m.TOUCH_DOLLY_TRUCK||(this._state&m.TOUCH_ZOOM_TRUCK)===m.TOUCH_ZOOM_TRUCK)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&m.DOLLY)===m.DOLLY||(this._state&m.TOUCH_DOLLY)===m.TOUCH_DOLLY||(this._state&m.TOUCH_DOLLY_TRUCK)===m.TOUCH_DOLLY_TRUCK||(this._state&m.TOUCH_DOLLY_OFFSET)===m.TOUCH_DOLLY_OFFSET||(this._state&m.TOUCH_DOLLY_ROTATE)===m.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&m.ZOOM)===m.ZOOM||(this._state&m.TOUCH_ZOOM)===m.TOUCH_ZOOM||(this._state&m.TOUCH_ZOOM_TRUCK)===m.TOUCH_ZOOM_TRUCK||(this._state&m.TOUCH_ZOOM_OFFSET)===m.TOUCH_ZOOM_OFFSET||(this._state&m.TOUCH_ZOOM_ROTATE)===m.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&m.OFFSET)===m.OFFSET||(this._state&m.TOUCH_OFFSET)===m.TOUCH_OFFSET||(this._state&m.TOUCH_DOLLY_OFFSET)===m.TOUCH_DOLLY_OFFSET||(this._state&m.TOUCH_ZOOM_OFFSET)===m.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},y=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,Yt(this._activePointers,re);const v=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,C=v?-v.deltaX:n.x-re.x,b=v?-v.deltaY:n.y-re.y;if(n.copy(re),((this._state&m.ROTATE)===m.ROTATE||(this._state&m.TOUCH_ROTATE)===m.TOUCH_ROTATE||(this._state&m.TOUCH_DOLLY_ROTATE)===m.TOUCH_DOLLY_ROTATE||(this._state&m.TOUCH_ZOOM_ROTATE)===m.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(C,b),this._isUserControllingRotate=!0),(this._state&m.DOLLY)===m.DOLLY||(this._state&m.ZOOM)===m.ZOOM){const D=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,O=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0,j=this.dollyDragInverted?-1:1;(this._state&m.DOLLY)===m.DOLLY?(this._dollyInternal(j*b*bt,D,O),this._isUserControllingDolly=!0):(this._zoomInternal(j*b*bt,D,O),this._isUserControllingZoom=!0)}if((this._state&m.TOUCH_DOLLY)===m.TOUCH_DOLLY||(this._state&m.TOUCH_ZOOM)===m.TOUCH_ZOOM||(this._state&m.TOUCH_DOLLY_TRUCK)===m.TOUCH_DOLLY_TRUCK||(this._state&m.TOUCH_ZOOM_TRUCK)===m.TOUCH_ZOOM_TRUCK||(this._state&m.TOUCH_DOLLY_OFFSET)===m.TOUCH_DOLLY_OFFSET||(this._state&m.TOUCH_ZOOM_OFFSET)===m.TOUCH_ZOOM_OFFSET||(this._state&m.TOUCH_DOLLY_ROTATE)===m.TOUCH_DOLLY_ROTATE||(this._state&m.TOUCH_ZOOM_ROTATE)===m.TOUCH_ZOOM_ROTATE){const D=re.x-this._activePointers[1].clientX,O=re.y-this._activePointers[1].clientY,j=Math.sqrt(D*D+O*O),W=a.y-j;a.set(0,j);const le=this.dollyToCursor?(n.x-this._elementRect.x)/this._elementRect.width*2-1:0,be=this.dollyToCursor?(n.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&m.TOUCH_DOLLY)===m.TOUCH_DOLLY||(this._state&m.TOUCH_DOLLY_ROTATE)===m.TOUCH_DOLLY_ROTATE||(this._state&m.TOUCH_DOLLY_TRUCK)===m.TOUCH_DOLLY_TRUCK||(this._state&m.TOUCH_DOLLY_OFFSET)===m.TOUCH_DOLLY_OFFSET?(this._dollyInternal(W*bt,le,be),this._isUserControllingDolly=!0):(this._zoomInternal(W*bt,le,be),this._isUserControllingZoom=!0)}((this._state&m.TRUCK)===m.TRUCK||(this._state&m.TOUCH_TRUCK)===m.TOUCH_TRUCK||(this._state&m.TOUCH_DOLLY_TRUCK)===m.TOUCH_DOLLY_TRUCK||(this._state&m.TOUCH_ZOOM_TRUCK)===m.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(C,b,!1),this._isUserControllingTruck=!0),((this._state&m.OFFSET)===m.OFFSET||(this._state&m.TOUCH_OFFSET)===m.TOUCH_OFFSET||(this._state&m.TOUCH_DOLLY_OFFSET)===m.TOUCH_DOLLY_OFFSET||(this._state&m.TOUCH_ZOOM_OFFSET)===m.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(C,b,!0),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},x=()=>{Yt(this._activePointers,re),n.copy(re),this._dragNeedsUpdate=!1,(this._activePointers.length===0||this._activePointers.length===1&&this._activePointers[0]===this._lockedPointer)&&(this._isDragging=!1),this._activePointers.length===0&&this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",d),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",d),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",M),this._domElement.ownerDocument.addEventListener("pointerlockerror",T),this._domElement.ownerDocument.addEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",d),g())},this.unlockPointer=()=>{var _,v,C;this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),(_=this._domElement)===null||_===void 0||_.ownerDocument.exitPointerLock(),(v=this._domElement)===null||v===void 0||v.ownerDocument.removeEventListener("pointerlockchange",M),(C=this._domElement)===null||C===void 0||C.ownerDocument.removeEventListener("pointerlockerror",T),this.cancel()};const M=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},T=()=>{this.unlockPointer()};this._addAllEventListeners=_=>{this._domElement=_,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",r),this._domElement.addEventListener("pointercancel",d),this._domElement.addEventListener("wheel",p,{passive:!1}),this._domElement.addEventListener("contextmenu",f)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",r),this._domElement.removeEventListener("pointercancel",d),this._domElement.removeEventListener("wheel",p,{passive:!1}),this._domElement.removeEventListener("contextmenu",f),this._domElement.ownerDocument.removeEventListener("pointermove",l,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",d),this._domElement.ownerDocument.removeEventListener("pointerlockchange",M),this._domElement.ownerDocument.removeEventListener("pointerlockerror",T))},this.cancel=()=>{this._state!==m.NONE&&(this._state=m.NONE,this._activePointers.length=0,x())},t&&this.connect(t),this.update(0)}get camera(){return this._camera}set camera(e){this._camera=e,this.updateCameraUp(),this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0}get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._domElement&&(e?(this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none"):(this.cancel(),this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect=""))}get active(){return!this._hasRested}get currentAction(){return this._state}get distance(){return this._spherical.radius}set distance(e){this._spherical.radius===e&&this._sphericalEnd.radius===e||(this._spherical.radius=e,this._sphericalEnd.radius=e,this._needsUpdate=!0)}get azimuthAngle(){return this._spherical.theta}set azimuthAngle(e){this._spherical.theta===e&&this._sphericalEnd.theta===e||(this._spherical.theta=e,this._sphericalEnd.theta=e,this._needsUpdate=!0)}get polarAngle(){return this._spherical.phi}set polarAngle(e){this._spherical.phi===e&&this._sphericalEnd.phi===e||(this._spherical.phi=e,this._sphericalEnd.phi=e,this._needsUpdate=!0)}get boundaryEnclosesCamera(){return this._boundaryEnclosesCamera}set boundaryEnclosesCamera(e){this._boundaryEnclosesCamera=e,this._needsUpdate=!0}set interactiveArea(e){this._interactiveArea.width=ue(e.width,0,1),this._interactiveArea.height=ue(e.height,0,1),this._interactiveArea.x=ue(e.x,0,1-this._interactiveArea.width),this._interactiveArea.y=ue(e.y,0,1-this._interactiveArea.height)}addEventListener(e,t){super.addEventListener(e,t)}removeEventListener(e,t){super.removeEventListener(e,t)}rotate(e,t,s=!1){return this.rotateTo(this._sphericalEnd.theta+e,this._sphericalEnd.phi+t,s)}rotateAzimuthTo(e,t=!1){return this.rotateTo(e,this._sphericalEnd.phi,t)}rotatePolarTo(e,t=!1){return this.rotateTo(this._sphericalEnd.theta,e,t)}rotateTo(e,t,s=!1){this._isUserControllingRotate=!1;const n=ue(e,this.minAzimuthAngle,this.maxAzimuthAngle),a=ue(t,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=n,this._sphericalEnd.phi=a,this._sphericalEnd.makeSafe(),this._needsUpdate=!0,s||(this._spherical.theta=this._sphericalEnd.theta,this._spherical.phi=this._sphericalEnd.phi);const r=!s||N(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&N(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(r)}dolly(e,t=!1){return this.dollyTo(this._sphericalEnd.radius-e,t)}dollyTo(e,t=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=Be.NONE,this._changedDolly=0,this._dollyToNoClamp(ue(e,this.minDistance,this.maxDistance),t)}_dollyToNoClamp(e,t=!1){const s=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const r=this._collisionTest(),l=N(r,this._spherical.radius);if(!(s>e)&&l)return Promise.resolve();this._sphericalEnd.radius=Math.min(e,r)}else this._sphericalEnd.radius=e;this._needsUpdate=!0,t||(this._spherical.radius=this._sphericalEnd.radius);const a=!t||N(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(a)}dollyInFixed(e,t=!1){this._targetEnd.add(this._getCameraDirection(it).multiplyScalar(e)),t||this._target.copy(this._targetEnd);const s=!t||N(this._target.x,this._targetEnd.x,this.restThreshold)&&N(this._target.y,this._targetEnd.y,this.restThreshold)&&N(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(s)}zoom(e,t=!1){return this.zoomTo(this._zoomEnd+e,t)}zoomTo(e,t=!1){this._isUserControllingZoom=!1,this._zoomEnd=ue(e,this.minZoom,this.maxZoom),this._needsUpdate=!0,t||(this._zoom=this._zoomEnd);const s=!t||N(this._zoom,this._zoomEnd,this.restThreshold);return this._changedZoom=0,this._createOnRestPromise(s)}pan(e,t,s=!1){return console.warn("`pan` has been renamed to `truck`"),this.truck(e,t,s)}truck(e,t,s=!1){this._camera.updateMatrix(),pe.setFromMatrixColumn(this._camera.matrix,0),me.setFromMatrixColumn(this._camera.matrix,1),pe.multiplyScalar(e),me.multiplyScalar(-t);const n=L.copy(pe).add(me),a=F.copy(this._targetEnd).add(n);return this.moveTo(a.x,a.y,a.z,s)}forward(e,t=!1){L.setFromMatrixColumn(this._camera.matrix,0),L.crossVectors(this._camera.up,L),L.multiplyScalar(e);const s=F.copy(this._targetEnd).add(L);return this.moveTo(s.x,s.y,s.z,t)}elevate(e,t=!1){return L.copy(this._camera.up).multiplyScalar(e),this.moveTo(this._targetEnd.x+L.x,this._targetEnd.y+L.y,this._targetEnd.z+L.z,t)}moveTo(e,t,s,n=!1){this._isUserControllingTruck=!1;const a=L.set(e,t,s).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,a,this.boundaryFriction),this._needsUpdate=!0,n||this._target.copy(this._targetEnd);const r=!n||N(this._target.x,this._targetEnd.x,this.restThreshold)&&N(this._target.y,this._targetEnd.y,this.restThreshold)&&N(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(r)}lookInDirectionOf(e,t,s,n=!1){const l=L.set(e,t,s).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);return this.setPosition(l.x,l.y,l.z,n)}fitToBox(e,t,{cover:s=!1,paddingLeft:n=0,paddingRight:a=0,paddingBottom:r=0,paddingTop:l=0}={}){const d=[],h=e.isBox3?Ge.copy(e):Ge.setFromObject(e);h.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const p=Ui(this._sphericalEnd.theta,Li),f=Ui(this._sphericalEnd.phi,Li);d.push(this.rotateTo(p,f,t));const g=L.setFromSpherical(this._sphericalEnd).normalize(),y=Hi.setFromUnitVectors(g,Wt),x=N(Math.abs(g.y),1);x&&y.multiply(Qt.setFromAxisAngle(Ct,p)),y.multiply(this._yAxisUpSpaceInverse);const M=Ni.makeEmpty();F.copy(h.min).applyQuaternion(y),M.expandByPoint(F),F.copy(h.min).setX(h.max.x).applyQuaternion(y),M.expandByPoint(F),F.copy(h.min).setY(h.max.y).applyQuaternion(y),M.expandByPoint(F),F.copy(h.max).setZ(h.min.z).applyQuaternion(y),M.expandByPoint(F),F.copy(h.min).setZ(h.max.z).applyQuaternion(y),M.expandByPoint(F),F.copy(h.max).setY(h.min.y).applyQuaternion(y),M.expandByPoint(F),F.copy(h.max).setX(h.min.x).applyQuaternion(y),M.expandByPoint(F),F.copy(h.max).applyQuaternion(y),M.expandByPoint(F),M.min.x-=n,M.min.y-=r,M.max.x+=a,M.max.y+=l,y.setFromUnitVectors(Wt,g),x&&y.premultiply(Qt.invert()),y.premultiply(this._yAxisUpSpace);const T=M.getSize(L),_=M.getCenter(F).applyQuaternion(y);if(Re(this._camera)){const v=this.getDistanceToFitBox(T.x,T.y,T.z,s);d.push(this.moveTo(_.x,_.y,_.z,t)),d.push(this.dollyTo(v,t)),d.push(this.setFocalOffset(0,0,0,t))}else if(Se(this._camera)){const v=this._camera,C=v.right-v.left,b=v.top-v.bottom,D=s?Math.max(C/T.x,b/T.y):Math.min(C/T.x,b/T.y);d.push(this.moveTo(_.x,_.y,_.z,t)),d.push(this.zoomTo(D,t)),d.push(this.setFocalOffset(0,0,0,t))}return Promise.all(d)}fitToSphere(e,t){const s=[],a="isObject3D"in e?_e.createBoundingSphere(e,Xt):Xt.copy(e);if(s.push(this.moveTo(a.center.x,a.center.y,a.center.z,t)),Re(this._camera)){const r=this.getDistanceToFitSphere(a.radius);s.push(this.dollyTo(r,t))}else if(Se(this._camera)){const r=this._camera.right-this._camera.left,l=this._camera.top-this._camera.bottom,d=2*a.radius,h=Math.min(r/d,l/d);s.push(this.zoomTo(h,t))}return s.push(this.setFocalOffset(0,0,0,t)),Promise.all(s)}setLookAt(e,t,s,n,a,r,l=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Be.NONE,this._changedDolly=0;const d=F.set(n,a,r),h=L.set(e,t,s);this._targetEnd.copy(d),this._sphericalEnd.setFromVector3(h.sub(d).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,l||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const p=!l||N(this._target.x,this._targetEnd.x,this.restThreshold)&&N(this._target.y,this._targetEnd.y,this.restThreshold)&&N(this._target.z,this._targetEnd.z,this.restThreshold)&&N(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&N(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&N(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(p)}lerpLookAt(e,t,s,n,a,r,l,d,h,p,f,g,y,x=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Be.NONE,this._changedDolly=0;const M=L.set(n,a,r),T=F.set(e,t,s);he.setFromVector3(T.sub(M).applyQuaternion(this._yAxisUpSpace));const _=Ye.set(p,f,g),v=F.set(l,d,h);st.setFromVector3(v.sub(_).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(M.lerp(_,y));const C=st.theta-he.theta,b=st.phi-he.phi,D=st.radius-he.radius;this._sphericalEnd.set(he.radius+D*y,he.phi+b*y,he.theta+C*y),this.normalizeRotations(),this._needsUpdate=!0,x||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const O=!x||N(this._target.x,this._targetEnd.x,this.restThreshold)&&N(this._target.y,this._targetEnd.y,this.restThreshold)&&N(this._target.z,this._targetEnd.z,this.restThreshold)&&N(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&N(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&N(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(O)}setPosition(e,t,s,n=!1){return this.setLookAt(e,t,s,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,n)}setTarget(e,t,s,n=!1){const a=this.getPosition(L),r=this.setLookAt(a.x,a.y,a.z,e,t,s,n);return this._sphericalEnd.phi=ue(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),r}setFocalOffset(e,t,s,n=!1){this._isUserControllingOffset=!1,this._focalOffsetEnd.set(e,t,s),this._needsUpdate=!0,n||this._focalOffset.copy(this._focalOffsetEnd);const a=!n||N(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&N(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&N(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(a)}setOrbitPoint(e,t,s){this._camera.updateMatrixWorld(),pe.setFromMatrixColumn(this._camera.matrixWorldInverse,0),me.setFromMatrixColumn(this._camera.matrixWorldInverse,1),Pe.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const n=L.set(e,t,s),a=n.distanceTo(this._camera.position),r=n.sub(this._camera.position);pe.multiplyScalar(r.x),me.multiplyScalar(r.y),Pe.multiplyScalar(r.z),L.copy(pe).add(me).add(Pe),L.z=L.z+a,this.dollyTo(a,!1),this.setFocalOffset(-L.x,L.y,-L.z,!1),this.moveTo(e,t,s,!1)}setBoundary(e){if(!e){this._boundary.min.set(-1/0,-1/0,-1/0),this._boundary.max.set(1/0,1/0,1/0),this._needsUpdate=!0;return}this._boundary.copy(e),this._boundary.clampPoint(this._targetEnd,this._targetEnd),this._needsUpdate=!0}setViewport(e,t,s,n){if(e===null){this._viewport=null;return}this._viewport=this._viewport||new A.Vector4,typeof e=="number"?this._viewport.set(e,t,s,n):this._viewport.copy(e)}getDistanceToFitBox(e,t,s,n=!1){if(Gt(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const a=e/t,r=this._camera.getEffectiveFOV()*Je,l=this._camera.aspect;return((n?a>l:a<l)?t:e/l)*.5/Math.tan(r*.5)+s*.5}getDistanceToFitSphere(e){if(Gt(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const t=this._camera.getEffectiveFOV()*Je,s=Math.atan(Math.tan(t*.5)*this._camera.aspect)*2,n=1<this._camera.aspect?t:s;return e/Math.sin(n*.5)}getTarget(e,t=!0){return(e&&e.isVector3?e:new A.Vector3).copy(t?this._targetEnd:this._target)}getPosition(e,t=!0){return(e&&e.isVector3?e:new A.Vector3).setFromSpherical(t?this._sphericalEnd:this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(t?this._targetEnd:this._target)}getSpherical(e,t=!0){return(e||new A.Spherical).copy(t?this._sphericalEnd:this._spherical)}getFocalOffset(e,t=!0){return(e&&e.isVector3?e:new A.Vector3).copy(t?this._focalOffsetEnd:this._focalOffset)}normalizeRotations(){this._sphericalEnd.theta=this._sphericalEnd.theta%Ve,this._sphericalEnd.theta<0&&(this._sphericalEnd.theta+=Ve),this._spherical.theta+=Ve*Math.round((this._sphericalEnd.theta-this._spherical.theta)/Ve)}stop(){this._focalOffset.copy(this._focalOffsetEnd),this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd),this._zoom=this._zoomEnd}reset(e=!1){if(!N(this._camera.up.x,this._cameraUp0.x)||!N(this._camera.up.y,this._cameraUp0.y)||!N(this._camera.up.z,this._cameraUp0.z)){this._camera.up.copy(this._cameraUp0);const s=this.getPosition(L);this.updateCameraUp(),this.setPosition(s.x,s.y,s.z)}const t=[this.setLookAt(this._position0.x,this._position0.y,this._position0.z,this._target0.x,this._target0.y,this._target0.z,e),this.setFocalOffset(this._focalOffset0.x,this._focalOffset0.y,this._focalOffset0.z,e),this.zoomTo(this._zoom0,e)];return Promise.all(t)}saveState(){this._cameraUp0.copy(this._camera.up),this.getTarget(this._target0),this.getPosition(this._position0),this._zoom0=this._zoom,this._focalOffset0.copy(this._focalOffset)}updateCameraUp(){this._yAxisUpSpace.setFromUnitVectors(this._camera.up,Ct),this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert()}applyCameraUp(){const e=L.subVectors(this._target,this._camera.position).normalize(),t=F.crossVectors(e,this._camera.up);this._camera.up.crossVectors(t,e).normalize(),this._camera.updateMatrixWorld();const s=this.getPosition(L);this.updateCameraUp(),this.setPosition(s.x,s.y,s.z)}update(e){const t=this._sphericalEnd.theta-this._spherical.theta,s=this._sphericalEnd.phi-this._spherical.phi,n=this._sphericalEnd.radius-this._spherical.radius,a=Fi.subVectors(this._targetEnd,this._target),r=zi.subVectors(this._focalOffsetEnd,this._focalOffset),l=this._zoomEnd-this._zoom;if(Y(t))this._thetaVelocity.value=0,this._spherical.theta=this._sphericalEnd.theta;else{const f=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.theta=Et(this._spherical.theta,this._sphericalEnd.theta,this._thetaVelocity,f,1/0,e),this._needsUpdate=!0}if(Y(s))this._phiVelocity.value=0,this._spherical.phi=this._sphericalEnd.phi;else{const f=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.phi=Et(this._spherical.phi,this._sphericalEnd.phi,this._phiVelocity,f,1/0,e),this._needsUpdate=!0}if(Y(n))this._radiusVelocity.value=0,this._spherical.radius=this._sphericalEnd.radius;else{const f=this._isUserControllingDolly?this.draggingSmoothTime:this.smoothTime;this._spherical.radius=Et(this._spherical.radius,this._sphericalEnd.radius,this._radiusVelocity,f,this.maxSpeed,e),this._needsUpdate=!0}if(Y(a.x)&&Y(a.y)&&Y(a.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const f=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;ki(this._target,this._targetEnd,this._targetVelocity,f,this.maxSpeed,e,this._target),this._needsUpdate=!0}if(Y(r.x)&&Y(r.y)&&Y(r.z))this._focalOffsetVelocity.set(0,0,0),this._focalOffset.copy(this._focalOffsetEnd);else{const f=this._isUserControllingOffset?this.draggingSmoothTime:this.smoothTime;ki(this._focalOffset,this._focalOffsetEnd,this._focalOffsetVelocity,f,this.maxSpeed,e,this._focalOffset),this._needsUpdate=!0}if(Y(l))this._zoomVelocity.value=0,this._zoom=this._zoomEnd;else{const f=this._isUserControllingZoom?this.draggingSmoothTime:this.smoothTime;this._zoom=Et(this._zoom,this._zoomEnd,this._zoomVelocity,f,1/0,e)}if(this.dollyToCursor){if(Re(this._camera)&&this._changedDolly!==0){const f=this._spherical.radius-this._lastDistance,g=this._camera,y=this._getCameraDirection(it),x=L.copy(y).cross(g.up).normalize();x.lengthSq()===0&&(x.x=1);const M=F.crossVectors(x,y),T=this._sphericalEnd.radius*Math.tan(g.getEffectiveFOV()*Je*.5),v=(this._sphericalEnd.radius-f-this._sphericalEnd.radius)/this._sphericalEnd.radius,C=Ye.copy(this._targetEnd).add(x.multiplyScalar(this._dollyControlCoord.x*T*g.aspect)).add(M.multiplyScalar(this._dollyControlCoord.y*T)),b=L.copy(this._targetEnd).lerp(C,v),D=this._lastDollyDirection===Be.IN&&this._spherical.radius<=this.minDistance,O=this._lastDollyDirection===Be.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(D||O)){this._sphericalEnd.radius-=f,this._spherical.radius-=f;const W=F.copy(y).multiplyScalar(-f);b.add(W)}this._boundary.clampPoint(b,b);const j=F.subVectors(b,this._targetEnd);this._targetEnd.copy(b),this._target.add(j),this._changedDolly-=f,Y(this._changedDolly)&&(this._changedDolly=0)}else if(Se(this._camera)&&this._changedZoom!==0){const f=this._zoom-this._lastZoom,g=this._camera,y=L.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(g.near+g.far)/(g.near-g.far)).unproject(g),x=F.set(0,0,-1).applyQuaternion(g.quaternion),M=Ye.copy(y).add(x.multiplyScalar(-y.dot(g.up))),_=-(this._zoom-f-this._zoom)/this._zoom,v=this._getCameraDirection(it),C=this._targetEnd.dot(v),b=L.copy(this._targetEnd).lerp(M,_),D=b.dot(v),O=v.multiplyScalar(D-C);b.sub(O),this._boundary.clampPoint(b,b);const j=F.subVectors(b,this._targetEnd);this._targetEnd.copy(b),this._target.add(j),this._changedZoom-=f,Y(this._changedZoom)&&(this._changedZoom=0)}}this._camera.zoom!==this._zoom&&(this._camera.zoom=this._zoom,this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0),this._dragNeedsUpdate=!0;const d=this._collisionTest();this._spherical.radius=Math.min(this._spherical.radius,d),this._spherical.makeSafe(),this._camera.position.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(this._target),this._camera.lookAt(this._target),(!Y(this._focalOffset.x)||!Y(this._focalOffset.y)||!Y(this._focalOffset.z))&&(this._camera.updateMatrixWorld(),pe.setFromMatrixColumn(this._camera.matrix,0),me.setFromMatrixColumn(this._camera.matrix,1),Pe.setFromMatrixColumn(this._camera.matrix,2),pe.multiplyScalar(this._focalOffset.x),me.multiplyScalar(-this._focalOffset.y),Pe.multiplyScalar(this._focalOffset.z),L.copy(pe).add(me).add(Pe),this._camera.position.add(L)),this._boundaryEnclosesCamera&&this._encloseToBoundary(this._camera.position.copy(this._target),L.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),1);const p=this._needsUpdate;return p&&!this._updatedLastTime?(this._hasRested=!1,this.dispatchEvent({type:"wake"}),this.dispatchEvent({type:"update"})):p?(this.dispatchEvent({type:"update"}),Y(t,this.restThreshold)&&Y(s,this.restThreshold)&&Y(n,this.restThreshold)&&Y(a.x,this.restThreshold)&&Y(a.y,this.restThreshold)&&Y(a.z,this.restThreshold)&&Y(r.x,this.restThreshold)&&Y(r.y,this.restThreshold)&&Y(r.z,this.restThreshold)&&Y(l,this.restThreshold)&&!this._hasRested&&(this._hasRested=!0,this.dispatchEvent({type:"rest"}))):!p&&this._updatedLastTime&&this.dispatchEvent({type:"sleep"}),this._lastDistance=this._spherical.radius,this._lastZoom=this._zoom,this._updatedLastTime=p,this._needsUpdate=!1,p}toJSON(){return JSON.stringify({enabled:this._enabled,minDistance:this.minDistance,maxDistance:et(this.maxDistance),minZoom:this.minZoom,maxZoom:et(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:et(this.maxPolarAngle),minAzimuthAngle:et(this.minAzimuthAngle),maxAzimuthAngle:et(this.maxAzimuthAngle),smoothTime:this.smoothTime,draggingSmoothTime:this.draggingSmoothTime,dollySpeed:this.dollySpeed,truckSpeed:this.truckSpeed,dollyToCursor:this.dollyToCursor,verticalDragToForward:this.verticalDragToForward,target:this._targetEnd.toArray(),position:L.setFromSpherical(this._sphericalEnd).add(this._targetEnd).toArray(),zoom:this._zoomEnd,focalOffset:this._focalOffsetEnd.toArray(),target0:this._target0.toArray(),position0:this._position0.toArray(),zoom0:this._zoom0,focalOffset0:this._focalOffset0.toArray()})}fromJSON(e,t=!1){const s=JSON.parse(e);this.enabled=s.enabled,this.minDistance=s.minDistance,this.maxDistance=tt(s.maxDistance),this.minZoom=s.minZoom,this.maxZoom=tt(s.maxZoom),this.minPolarAngle=s.minPolarAngle,this.maxPolarAngle=tt(s.maxPolarAngle),this.minAzimuthAngle=tt(s.minAzimuthAngle),this.maxAzimuthAngle=tt(s.maxAzimuthAngle),this.smoothTime=s.smoothTime,this.draggingSmoothTime=s.draggingSmoothTime,this.dollySpeed=s.dollySpeed,this.truckSpeed=s.truckSpeed,this.dollyToCursor=s.dollyToCursor,this.verticalDragToForward=s.verticalDragToForward,this._target0.fromArray(s.target0),this._position0.fromArray(s.position0),this._zoom0=s.zoom0,this._focalOffset0.fromArray(s.focalOffset0),this.moveTo(s.target[0],s.target[1],s.target[2],t),he.setFromVector3(L.fromArray(s.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(he.theta,he.phi,t),this.dollyTo(he.radius,t),this.zoomTo(s.zoom,t),this.setFocalOffset(s.focalOffset[0],s.focalOffset[1],s.focalOffset[2],t),this._needsUpdate=!0}connect(e){if(this._domElement){console.warn("camera-controls is already connected.");return}e.setAttribute("data-camera-controls-version",Hn),this._addAllEventListeners(e),this._getClientRect(this._elementRect)}disconnect(){this.cancel(),this._removeAllEventListeners(),this._domElement&&(this._domElement.removeAttribute("data-camera-controls-version"),this._domElement=void 0)}dispose(){this.removeAllEventListeners(),this.disconnect()}_getTargetDirection(e){return e.setFromSpherical(this._spherical).divideScalar(this._spherical.radius).applyQuaternion(this._yAxisUpSpaceInverse)}_getCameraDirection(e){return this._getTargetDirection(e).negate()}_findPointerById(e){return this._activePointers.find(t=>t.pointerId===e)}_findPointerByMouseButton(e){return this._activePointers.find(t=>t.mouseButton===e)}_disposePointer(e){this._activePointers.splice(this._activePointers.indexOf(e),1)}_encloseToBoundary(e,t,s){const n=t.lengthSq();if(n===0)return e;const a=F.copy(t).add(e),l=this._boundary.clampPoint(a,Ye).sub(a),d=l.lengthSq();if(d===0)return e.add(t);if(d===n)return e;if(s===0)return e.add(t).add(l);{const h=1+s*d/t.dot(l);return e.add(F.copy(t).multiplyScalar(h)).add(l.multiplyScalar(1-s))}}_updateNearPlaneCorners(){if(Re(this._camera)){const e=this._camera,t=e.near,s=e.getEffectiveFOV()*Je,n=Math.tan(s*.5)*t,a=n*e.aspect;this._nearPlaneCorners[0].set(-a,-n,0),this._nearPlaneCorners[1].set(a,-n,0),this._nearPlaneCorners[2].set(a,n,0),this._nearPlaneCorners[3].set(-a,n,0)}else if(Se(this._camera)){const e=this._camera,t=1/e.zoom,s=e.left*t,n=e.right*t,a=e.top*t,r=e.bottom*t;this._nearPlaneCorners[0].set(s,a,0),this._nearPlaneCorners[1].set(n,a,0),this._nearPlaneCorners[2].set(n,r,0),this._nearPlaneCorners[3].set(s,r,0)}}_collisionTest(){let e=1/0;if(!(this.colliderMeshes.length>=1)||Gt(this._camera,"_collisionTest"))return e;const s=this._getTargetDirection(it);$t.lookAt(ji,s,this._camera.up);for(let n=0;n<4;n++){const a=F.copy(this._nearPlaneCorners[n]);a.applyMatrix4($t);const r=Ye.addVectors(this._target,a);St.set(r,s),St.far=this._spherical.radius+1;const l=St.intersectObjects(this.colliderMeshes);l.length!==0&&l[0].distance<e&&(e=l[0].distance)}return e}_getClientRect(e){if(!this._domElement)return;const t=this._domElement.getBoundingClientRect();return e.x=t.left,e.y=t.top,this._viewport?(e.x+=this._viewport.x,e.y+=t.height-this._viewport.w-this._viewport.y,e.width=this._viewport.z,e.height=this._viewport.w):(e.width=t.width,e.height=t.height),e}_createOnRestPromise(e){return e?Promise.resolve():(this._hasRested=!1,this.dispatchEvent({type:"transitionstart"}),new Promise(t=>{const s=()=>{this.removeEventListener("rest",s),t()};this.addEventListener("rest",s)}))}_addAllEventListeners(e){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(e){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(e){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(e,t=new A.Sphere){const s=t,n=s.center;Ge.makeEmpty(),e.traverseVisible(r=>{r.isMesh&&Ge.expandByObject(r)}),Ge.getCenter(n);let a=0;return e.traverseVisible(r=>{if(!r.isMesh)return;const l=r,d=l.geometry.clone();d.applyMatrix4(l.matrixWorld);const p=d.attributes.position;for(let f=0,g=p.count;f<g;f++)L.fromBufferAttribute(p,f),a=Math.max(a,n.distanceToSquared(L))}),s.radius=Math.sqrt(a),s}}const Pt=i=>{const[e,t]=w.useState(i.options[i.index]),s=()=>{i.onToggle(!i.open)},n=a=>{a!==e&&(i.onSelect(a),t(a)),i.onToggle(!1)};return u.jsxs("div",{className:`dropdown ${i.up===!0?"up":""}`,children:[u.jsx("div",{className:"dropdown-toggle",onClick:s,children:`${i.title}: ${e}`}),i.open&&u.jsx("ul",{className:"dropdown-menu",children:i.options.map(a=>u.jsx("li",{onClick:()=>n(a),children:a},a))})]})},Ae=w.forwardRef(function(e,t){const s=["Renderer","Depth","Normals","UVs","Wireframe"],[n,a]=w.useState("Renderer"),[r,l]=w.useState(!1),[d,h]=w.useState(!1),[p,f]=w.useState(!1);return u.jsxs("div",{className:"CameraWindow",children:[u.jsx("div",{ref:t,className:"clickable",onClick:()=>{p&&f(!1)}}),u.jsxs("div",{className:"options",children:[e.camera!==null&&u.jsx(Pt,{title:"Camera",index:e.options.indexOf(e.camera.name),open:p,options:e.options,onSelect:e.onSelectCamera,onToggle:g=>{f(g)},up:!0}),u.jsx(Pt,{title:"Mode",index:s.indexOf(n),open:d,options:s,onSelect:g=>{if(g===n)return;const y=g;e.onSelectRenderMode(y),a(y)},onToggle:g=>{r&&l(!1),h(g)},up:!0})]})]})});class Vn extends o.ShaderMaterial{constructor(e){super({extensions:{derivatives:!0},glslVersion:o.GLSL3,side:o.DoubleSide,transparent:!0,uniforms:{uScale:{value:e?.scale!==void 0?e?.scale:.1},uDivisions:{value:e?.divisions!==void 0?e?.divisions:10},uColor:{value:e?.color!==void 0?e?.color:new o.Color(16777215)},uDistance:{value:e?.distance!==void 0?e?.distance:1e4},uSubgridOpacity:{value:e?.subgridOpacity!==void 0?e?.subgridOpacity:.15},uGridOpacity:{value:e?.gridOpacity!==void 0?e?.gridOpacity:.25}},vertexShader:`out vec3 worldPosition;
|
36
36
|
uniform float uDistance;
|
37
37
|
|
38
38
|
void main() {
|
@@ -108,7 +108,7 @@ C11,8.22,10.74,8,10.43,8z`})});function nn(i){return m.jsx(qi.Reorder.Item,{valu
|
|
108
108
|
fragColor.a = mix(fragColor.a, baseOpacity * uGridOpacity, nextGrid);
|
109
109
|
|
110
110
|
if (fragColor.a <= 0.0) discard;
|
111
|
-
}`,name:"InfiniteGrid",depthWrite:!1})}}class
|
111
|
+
}`,name:"InfiniteGrid",depthWrite:!1})}}class Yn extends o.Mesh{gridMaterial;constructor(){const e=new Vn;super(new o.PlaneGeometry(2,2),e),this.gridMaterial=e,this.frustumCulled=!1,this.name="InfiniteGridHelper",this.position.y=.1}update(){this.gridMaterial.needsUpdate=!0}}const Gn=`#include <common>
|
112
112
|
#include <batching_pars_vertex>
|
113
113
|
#include <uv_pars_vertex>
|
114
114
|
#include <color_pars_vertex>
|
@@ -138,7 +138,7 @@ void main() {
|
|
138
138
|
#include <logdepthbuf_vertex>
|
139
139
|
#include <clipping_planes_vertex>
|
140
140
|
#include <worldpos_vertex>
|
141
|
-
}`,
|
141
|
+
}`,Zn=`
|
142
142
|
#include <common>
|
143
143
|
#include <uv_pars_fragment>
|
144
144
|
#include <clipping_planes_pars_fragment>
|
@@ -146,4 +146,4 @@ void main() {
|
|
146
146
|
void main() {
|
147
147
|
#include <clipping_planes_fragment>
|
148
148
|
gl_FragColor = vec4(vec3(vUv, 0.0), 1.0);
|
149
|
-
}`;class _s extends f.ShaderMaterial{constructor(){super({defines:{USE_UV:""},vertexShader:ps,fragmentShader:gs})}}let ae,pi=!1,K=null,le=null,Le=null,Ie=null,St="Renderer",qt="Renderer",Ki="Renderer",Xi="Renderer";function un(i){const e=i.three.app.appID,n=T.useMemo(()=>new Map,[]),t=T.useMemo(()=>new Map,[]),s=T.useMemo(()=>new Map,[]),r=T.useMemo(()=>new Map,[]),o=T.useMemo(()=>new f.Scene,[]),a=T.useMemo(()=>new f.Group,[]),d=T.useMemo(()=>new fs,[]),c=T.useMemo(()=>new f.AxesHelper(500),[]),u=T.useMemo(()=>new f.AxesHelper(100),[]),p=T.useMemo(()=>new f.MeshDepthMaterial,[]),_=T.useMemo(()=>new f.MeshNormalMaterial,[]),y=T.useMemo(()=>new _s,[]),A=T.useMemo(()=>new f.MeshBasicMaterial({opacity:.33,transparent:!0,wireframe:!0}),[]);function I(O,S){const P=new f.OrthographicCamera(-100,100,100,-100,50,5e3);return P.name=O,P.position.copy(S),P.lookAt(0,0,0),n.set(O,P),P}const F=["Single","Side by Side","Stacked","Quad"],v=T.useRef(null),E=T.useRef(null),w=T.useRef(null),C=T.useRef(null),U=T.useRef(null),L=T.useRef(null),x=localStorage,oe=x.getItem(`${e}_mode`),[te,$e]=T.useState(oe!==null?oe:"Single"),[j,Ue]=T.useState(null),[ye,Ce]=T.useState(!1),[Te,ke]=T.useState(!1),[He,it]=T.useState("Orbit"),[Je,Qe]=T.useState(!1),[ht,nt]=T.useState(Date.now());x.setItem(`${e}_mode`,te),x.setItem(`${e}_tlCam`,x.getItem(`${e}_tlCam`)!==null?x.getItem(`${e}_tlCam`):"Debug"),x.setItem(`${e}_trCam`,x.getItem(`${e}_trCam`)!==null?x.getItem(`${e}_trCam`):"Orthographic"),x.setItem(`${e}_blCam`,x.getItem(`${e}_blCam`)!==null?x.getItem(`${e}_blCam`):"Front"),x.setItem(`${e}_brCam`,x.getItem(`${e}_brCam`)!==null?x.getItem(`${e}_brCam`):"Top"),x.setItem(`${e}_tlRender`,x.getItem(`${e}_tlRender`)!==null?x.getItem(`${e}_tlRender`):"Renderer"),x.setItem(`${e}_trRender`,x.getItem(`${e}_trRender`)!==null?x.getItem(`${e}_trRender`):"Renderer"),x.setItem(`${e}_blRender`,x.getItem(`${e}_blRender`)!==null?x.getItem(`${e}_blRender`):"Renderer"),x.setItem(`${e}_brRender`,x.getItem(`${e}_brRender`)!==null?x.getItem(`${e}_brRender`):"Renderer");const ge=(O,S)=>{const P=t.get(O.name);if(P!==void 0&&P.dispose(),t.delete(O.name),O.name==="UI")return;const N=new cs(O,S);switch(N.enableDamping=!0,N.dampingFactor=.05,O.name){case"Top":case"Bottom":case"Left":case"Right":case"Front":case"Back":N.enableRotate=!1;break}t.set(O.name,N)},Ye=O=>{const S=s.get(O.name);S!==void 0&&(o.remove(S),S.dispose(),s.delete(O.name));const P=t.get(O.name);P!==void 0&&(P.dispose(),t.delete(O.name))},Mt=()=>{t.forEach((O,S)=>{O.dispose();const P=s.get(S);P!==void 0&&(o.remove(P),P.dispose()),s.delete(S),t.delete(S)}),t.clear(),s.clear()},dt=()=>{switch(te){case"Single":ge(K,w.current);break;case"Side by Side":case"Stacked":ge(K,w.current),ge(le,C.current);break;case"Quad":ge(K,w.current),ge(le,C.current),ge(Le,U.current),ge(Ie,L.current);break}};T.useEffect(()=>{const O=new f.WebGLRenderer({canvas:v.current,stencil:!1});O.autoClear=!1,O.shadowMap.enabled=!0,O.setPixelRatio(devicePixelRatio),O.setClearColor(0),i.three.renderer=O,Ue(O)},[]),T.useEffect(()=>{o.name="Debug Scene",o.uuid="",a.name="helpers",o.add(a),a.add(d),c.name="axisHelper",a.add(c),u.name="interactionHelper",a.add(u),u.visible=!1,I("Top",new f.Vector3(0,1e3,0)),I("Bottom",new f.Vector3(0,-1e3,0)),I("Left",new f.Vector3(-1e3,0,0)),I("Right",new f.Vector3(1e3,0,0)),I("Front",new f.Vector3(0,0,1e3)),I("Back",new f.Vector3(0,0,-1e3)),I("Orthographic",new f.Vector3(1e3,1e3,1e3)),I("UI",new f.Vector3);const O=new f.PerspectiveCamera(60,1,50,5e3);O.name="Debug",O.position.set(500,500,500),O.lookAt(0,0,0),n.set("Debug",O),K=n.get(x.getItem(`${e}_tlCam`)),le=n.get(x.getItem(`${e}_trCam`)),Le=n.get(x.getItem(`${e}_blCam`)),Ie=n.get(x.getItem(`${e}_brCam`)),K===void 0&&(K=n.get("Debug")),le===void 0&&(le=n.get("Orthographic")),Le===void 0&&(Le=n.get("Front")),Ie===void 0&&(Ie=n.get("Top"))},[]),T.useEffect(()=>{const O=()=>{r.forEach(D=>{a.remove(D),D.dispose()}),r.clear()},S=()=>{ae.traverse(D=>{if(D.type.search("Light")>-1){let k;switch(D.type){case"DirectionalLight":k=new f.DirectionalLightHelper(D,100),k.name=`${D.name}Helper`,r.set(D.name,k),a.add(k);break;case"HemisphereLight":k=new f.HemisphereLightHelper(D,250),k.name=`${D.name}Helper`,r.set(D.name,k),a.add(k);break;case"RectAreaLight":k=new as(D),k.name=`${D.name}Helper`,r.set(D.name,k),a.add(k);break;case"PointLight":k=new f.PointLightHelper(D,100),k.name=`${D.name}Helper`,r.set(D.name,k),a.add(k);break;case"SpotLight":k=new f.SpotLightHelper(D),k.name=`${D.name}Helper`,r.set(D.name,k),a.add(k);break}}})},P=D=>{a.add(c),O(),zt(ae),o.remove(ae);const k=i.scenes.get(D.value.name);if(k!==void 0){const me=new k;i.onSceneSet!==void 0&&i.onSceneSet(me),ae=me,i.three.scene=ae,o.add(ae),pi=!0,S()}},N=D=>{const k=D.value,me=i.three.scene?.getObjectByProperty("uuid",k.uuid);if(me!==void 0&&n.set(k.name,me),me instanceof f.PerspectiveCamera){const Ee=new f.CameraHelper(me);s.set(me.name,Ee),o.add(Ee)}nt(Date.now())},ue=D=>{const k=s.get(D.value.name);k!==void 0&&(o.remove(k),k.dispose()),n.delete(D.value.name),nt(Date.now())},X=D=>{const k=ae.getObjectByProperty("uuid",D.value.uuid);k&&k.add(c)};return B.addEventListener(z.SET_SCENE,P),B.addEventListener(z.ADD_CAMERA,N),B.addEventListener(z.REMOVE_CAMERA,ue),B.addEventListener(z.SET_OBJECT,X),()=>{B.removeEventListener(z.SET_SCENE,P),B.removeEventListener(z.ADD_CAMERA,N),B.removeEventListener(z.REMOVE_CAMERA,ue),B.removeEventListener(z.SET_OBJECT,X)}},[]),T.useEffect(()=>{if(j===null)return;let O=window.innerWidth,S=window.innerHeight,P=Math.floor(O/2),N=Math.floor(S/2),ue=-1;const X=new f.BufferGeometry,D=new f.MeshBasicMaterial,k=new f.Group,me=()=>{O=window.innerWidth-300,S=window.innerHeight,P=Math.floor(O/2),N=Math.floor(S/2),i.three.resize(O,S),i.onSceneResize!==void 0&&pi&&i.onSceneResize(ae,O,S);let se=O,_e=S;switch(te){case"Side by Side":se=P,_e=S;break;case"Stacked":se=O,_e=N;break;case"Quad":se=P,_e=N;break}const G=se/_e;n.forEach(V=>{V instanceof f.OrthographicCamera?(V.left=se/-2,V.right=se/2,V.top=_e/2,V.bottom=_e/-2,V.name==="UI"&&(V.position.x=O/2,V.position.y=S/-2,V.position.z=100),V.updateProjectionMatrix()):V instanceof f.PerspectiveCamera&&(V.aspect=G,V.updateProjectionMatrix(),s.get(V.name)?.update())})};function Ee(se){switch(se){case"Depth":return p;case"Normals":return _;case"Renderer":return null;case"UVs":return y;case"Wireframe":return A}return null}const et=()=>{const se=Ee(St);o.overrideMaterial=se,j.setViewport(0,0,O,S),j.setScissor(0,0,O,S),ae?.onBeforeRender(j,ae,K,X,D,k),j.render(o,K)},be=()=>{const se=Ee(St),_e=Ee(qt);if(o.overrideMaterial=se,te==="Side by Side")j.setViewport(0,0,P,S),j.setScissor(0,0,P,S),ae?.onBeforeRender(j,ae,K,X,D,k),j.render(o,K),o.overrideMaterial=_e,j.setViewport(P,0,P,S),j.setScissor(P,0,P,S),ae?.onBeforeRender(j,ae,le,X,D,k),j.render(o,le);else{const G=S-N;j.setViewport(0,G,O,N),j.setScissor(0,G,O,N),ae?.onBeforeRender(j,ae,K,X,D,k),j.render(o,K),o.overrideMaterial=_e,j.setViewport(0,0,O,N),j.setScissor(0,0,O,N),ae?.onBeforeRender(j,ae,le,X,D,k),j.render(o,le)}},xe=()=>{const se=Ee(St),_e=Ee(qt),G=Ee(Ki),V=Ee(Xi);let q=0,Q=0;Q=S-N,q=0,o.overrideMaterial=se,j.setViewport(q,Q,P,N),j.setScissor(q,Q,P,N),ae?.onBeforeRender(j,ae,K,X,D,k),j.render(o,K),q=P,o.overrideMaterial=_e,j.setViewport(q,Q,P,N),j.setScissor(q,Q,P,N),ae?.onBeforeRender(j,ae,le,X,D,k),j.render(o,le),Q=0,q=0,o.overrideMaterial=G,j.setViewport(q,Q,P,N),j.setScissor(q,Q,P,N),ae?.onBeforeRender(j,ae,Le,X,D,k),j.render(o,Le),q=P,o.overrideMaterial=V,j.setViewport(q,Q,P,N),j.setScissor(q,Q,P,N),ae?.onBeforeRender(j,ae,Ie,X,D,k),j.render(o,Ie)},Ae=()=>{switch(t.forEach(se=>{se.update()}),s.forEach(se=>{se.update()}),r.forEach(se=>{se.update!==void 0&&se.update()}),i.onSceneUpdate!==void 0&&pi&&i.onSceneUpdate(ae),j.clear(),te){case"Single":et();break;case"Side by Side":case"Stacked":be();break;case"Quad":xe();break}ue=requestAnimationFrame(Ae)};return dt(),window.addEventListener("resize",me),me(),Ae(),()=>{window.removeEventListener("resize",me),cancelAnimationFrame(ue),ue=-1}},[te,j]),T.useEffect(()=>{if(j!==null){const O={Vector2:f.Vector2,Vector3:f.Vector3,Vector4:f.Vector4,Quaternion:f.Quaternion,Matrix4:f.Matrix4,Spherical:f.Spherical,Box3:f.Box3,Sphere:f.Sphere,Raycaster:f.Raycaster};qe.install({THREE:O});const S=new f.Raycaster,P=new f.Vector2;let N=K,ue=w,X,D,k=-1;const me=(G,V,q,Q)=>{switch(te){case"Quad":G<q?V<Q?(N=K,S.setFromCamera(P,K)):(N=Le,S.setFromCamera(P,Le)):V<Q?(N=le,S.setFromCamera(P,le)):(N=Ie,S.setFromCamera(P,Ie));break;case"Side by Side":G<q?(N=K,S.setFromCamera(P,K)):(N=le,S.setFromCamera(P,le));break;case"Single":N=K,S.setFromCamera(P,K);break;case"Stacked":V<Q?(N=K,S.setFromCamera(P,K)):(N=le,S.setFromCamera(P,le));break}N===K?ue=w:N===le?ue=C:N===Le?ue=U:N===Ie&&(ue=L)},Ee=G=>{const V=new f.Vector2;j.getSize(V);const q=Math.min(G.clientX,V.x),Q=Math.min(G.clientY,V.y);P.x=Ot(q,0,V.x,-1,1),P.y=Ot(Q,0,V.y,1,-1);const Pe=V.x/2,Fe=V.y/2,st=()=>{q<Pe?P.x=Ot(q,0,Pe,-1,1):P.x=Ot(q,Pe,V.x,-1,1)},We=()=>{Q<Fe?P.y=Ot(Q,0,Fe,1,-1):P.y=Ot(Q,Fe,V.y,1,-1)};switch(te){case"Quad":st(),We();break;case"Side by Side":st();break;case"Stacked":We(),We();break}if(me(q,Q,Pe,Fe),He==="Orbit")return;const _t=S.intersectObjects(ae.children);_t.length>0&&u.position.copy(_t[0].point)},et=G=>{if(He==="Orbit")return;const V=new f.Vector2;if(j.getSize(V),G.clientX>=V.x)return;Ee(G);const q=S.intersectObjects(ae.children);q.length>0&&(i.three.getObject(q[0].object.uuid),u.visible=!1,it("Orbit"),nt(Date.now()))},be=(G,V=!1)=>{if(X===void 0)return;cancelAnimationFrame(k),k=-1,D&&(D.smoothTime=.1);const q=.15,Q=new f.Clock;Q.start(),X.getWorldPosition(G.target0);const Pe=()=>{const Fe=Q.getDelta();D&&D.update(Fe),V&&(G.target.lerp(G.target0,q),G.object.position.lerp(G.position0,q),G.object.zoom=Qt(G.object.zoom,G.zoom0,q),G.object.updateProjectionMatrix(),G.dispatchEvent({type:"change"})),Q.getElapsedTime()>=.5?(cancelAnimationFrame(k),k=-1,xe()):k=requestAnimationFrame(Pe)};Pe()},xe=()=>{D!==void 0&&(D.disconnect(),D.dispose(),D=void 0)},Ae=G=>{if(X!==void 0&&G.ctrlKey){if(N.name==="UI")return;const V=t.get(N.name);G.key==="0"?(xe(),D=new qe(N,ue.current),X instanceof f.Mesh||X instanceof f.SkinnedMesh?(X.geometry.computeBoundingBox(),D.fitToBox(X.geometry.boundingBox,!0)):D.fitToSphere(X,!0),be(V,!0)):G.key==="1"?(xe(),D=new qe(N,ue.current),D.rotateTo(0,Math.PI*.5,!0),D.moveTo(X.position.x,X.position.y,0,!0),be(V)):G.key==="2"?(xe(),D=new qe(N,ue.current),D.rotateTo(0,0,!0),D.moveTo(X.position.x,0,X.position.z,!0),be(V)):G.key==="3"?(xe(),D=new qe(N,ue.current),D.rotateTo(Math.PI/2,Math.PI/2,!0),D.moveTo(0,X.position.y,X.position.z,!0),be(V)):G.key==="4"?(xe(),D=new qe(N,ue.current),D.rotateTo(Math.PI,Math.PI/2,!0),D.moveTo(X.position.x,X.position.y,0,!0),be(V)):G.key==="5"&&(xe(),D=new qe(N,ue.current),D.rotateTo(zi(45),zi(45),!0),be(V))}},se=G=>{X=ae.getObjectByProperty("uuid",G.value.uuid)},_e=E.current;return _e.addEventListener("mousemove",Ee,!1),_e.addEventListener("click",et,!1),window.addEventListener("keydown",Ae,!1),B.addEventListener(z.SET_OBJECT,se),()=>{_e.removeEventListener("mousemove",Ee),_e.removeEventListener("click",et),window.removeEventListener("keydown",Ae),B.removeEventListener(z.SET_OBJECT,se)}}},[te,j,He]);const Me=[];return n.forEach((O,S)=>{Me.push(S)}),m.jsxs("div",{className:"multiview",children:[m.jsx("canvas",{ref:v}),j!==null&&m.jsxs(m.Fragment,{children:[m.jsxs("div",{className:`cameras ${te==="Single"||te==="Stacked"?"single":""}`,ref:E,children:[te==="Single"&&m.jsx(m.Fragment,{children:m.jsx(pt,{camera:K,options:Me,ref:w,onSelectCamera:O=>{t.get(K.name)?.dispose();const S=n.get(O);S!==void 0&&(Ye(K),K=S,x.setItem(`${e}_tlCam`,S.name),ge(S,w.current))},onSelectRenderMode:O=>{St=O,x.setItem(`${e}_tlRender`,O)}})}),(te==="Side by Side"||te==="Stacked")&&m.jsxs(m.Fragment,{children:[m.jsx(pt,{camera:K,options:Me,ref:w,onSelectCamera:O=>{t.get(K.name)?.dispose();const S=n.get(O);S!==void 0&&(Ye(K),K=S,x.setItem(`${e}_tlCam`,S.name),ge(S,w.current))},onSelectRenderMode:O=>{St=O,x.setItem(`${e}_tlRender`,O)}}),m.jsx(pt,{camera:le,options:Me,ref:C,onSelectCamera:O=>{t.get(le.name)?.dispose();const S=n.get(O);S!==void 0&&(Ye(le),le=S,x.setItem(`${e}_trCam`,S.name),ge(S,C.current))},onSelectRenderMode:O=>{qt=O,x.setItem(`${e}_trRender`,O)}})]}),te==="Quad"&&m.jsxs(m.Fragment,{children:[m.jsx(pt,{camera:K,options:Me,ref:w,onSelectCamera:O=>{t.get(K.name)?.dispose();const S=n.get(O);S!==void 0&&(Ye(K),K=S,x.setItem(`${e}_tlCam`,S.name),ge(S,w.current))},onSelectRenderMode:O=>{St=O,x.setItem(`${e}_tlRender`,O)}}),m.jsx(pt,{camera:le,options:Me,ref:C,onSelectCamera:O=>{t.get(le.name)?.dispose();const S=n.get(O);S!==void 0&&(Ye(le),le=S,x.setItem(`${e}_trCam`,S.name),ge(S,C.current))},onSelectRenderMode:O=>{qt=O,x.setItem(`${e}_trRender`,O)}}),m.jsx(pt,{camera:Le,options:Me,ref:U,onSelectCamera:O=>{t.get(Le.name)?.dispose();const S=n.get(O);S!==void 0&&(Ye(Le),Le=S,x.setItem(`${e}_blCam`,S.name),ge(S,U.current))},onSelectRenderMode:O=>{Ki=O,x.setItem(`${e}_blRender`,O)}}),m.jsx(pt,{camera:Ie,options:Me,ref:L,onSelectCamera:O=>{t.get(Ie.name)?.dispose();const S=n.get(O);S!==void 0&&(Ye(Ie),Ie=S,x.setItem(`${e}_brCam`,S.name),ge(S,L.current))},onSelectRenderMode:O=>{Xi=O,x.setItem(`${e}_brRender`,O)}})]})]}),m.jsxs("div",{className:"settings",children:[m.jsx(ti,{title:"View",index:F.indexOf(te),options:F,onSelect:O=>{O!==te&&(Mt(),$e(O))},open:ye,onToggle:O=>{Ce(O),Te&&ke(!1),Je&&Qe(!1)}}),m.jsx(ti,{title:"Interact",index:He==="Orbit"?0:1,options:["Orbit Mode","Selection Mode"],onSelect:O=>{u.visible=O==="Selection Mode",it(u.visible?"Selection":"Orbit")},open:Je,onToggle:O=>{ye&&Ce(!1),Te&&ke(!1),Qe(O)}})]},ht)]})]})}function mn(i){return m.jsxs("div",{className:"editor",ref:i.ref,style:i.style,children:[m.jsx("div",{className:"header",children:i.header}),i.children,m.jsx("div",{className:"footer",children:i.footer})]})}function vs(i){return m.jsx(mn,{children:m.jsxs(m.Fragment,{children:[m.jsx(un,{three:i.three,scenes:i.scenes,onSceneResize:i.onSceneResize,onSceneSet:i.onSceneSet,onSceneUpdate:i.onSceneUpdate}),m.jsx(hn,{three:i.three})]})})}exports.Accordion=Bt;exports.Application=yn;exports.BaseRemote=ii;exports.ChildObject=Si;exports.ContainerObject=Oi;exports.Draggable=sn;exports.DraggableItem=nn;exports.Dropdown=rn;exports.DropdownItem=an;exports.Editor=mn;exports.ExportTexture=jt;exports.Inspector=ln;exports.MultiView=un;exports.NavButton=xi;exports.RemoteComponents=En;exports.RemoteController=Ln;exports.RemoteTheatre=Ti;exports.RemoteThree=Mn;exports.SceneInspector=rs;exports.SidePanel=hn;exports.ThreeEditor=vs;exports.ToolEvents=z;exports.capitalize=Nt;exports.clamp=ct;exports.colorToHex=_i;exports.customizeTheatreElements=bn;exports.debugDispatcher=B;exports.defaultTheatreCallback=gn;exports.dispose=zt;exports.disposeMaterial=en;exports.disposeTexture=vn;exports.distance=_n;exports.hierarchyUUID=ei;exports.isColor=Qi;exports.mix=Qt;exports.noop=Ci;exports.normalize=gi;exports.randomID=Ji;exports.resetThreeObjects=yi;exports.round=vi;exports.theatreEditorApp=On;
|
149
|
+
}`;class Wn extends o.ShaderMaterial{constructor(){super({defines:{USE_UV:""},vertexShader:Gn,fragmentShader:Zn})}}const Ie=new o.Raycaster,te=new o.Vector3,Ce=new o.Vector3,G=new o.Quaternion,Bi={X:new o.Vector3(1,0,0),Y:new o.Vector3(0,1,0),Z:new o.Vector3(0,0,1)},qt={type:"change"},Vi={type:"mouseDown",mode:null},Yi={type:"mouseUp",mode:null},Gi={type:"objectChange"};class Xn extends o.Controls{constructor(e,t=null){super(void 0,t);const s=new er(this);this._root=s;const n=new tr;this._gizmo=n,s.add(n);const a=new ir;this._plane=a,s.add(a);const r=this;function l(C,b){let D=b;Object.defineProperty(r,C,{get:function(){return D!==void 0?D:b},set:function(O){D!==O&&(D=O,a[C]=O,n[C]=O,r.dispatchEvent({type:C+"-changed",value:O}),r.dispatchEvent(qt))}}),r[C]=b,a[C]=b,n[C]=b}l("camera",e),l("object",void 0),l("enabled",!0),l("axis",null),l("mode","translate"),l("translationSnap",null),l("rotationSnap",null),l("scaleSnap",null),l("space","world"),l("size",1),l("dragging",!1),l("showX",!0),l("showY",!0),l("showZ",!0);const d=new o.Vector3,h=new o.Vector3,p=new o.Quaternion,f=new o.Quaternion,g=new o.Vector3,y=new o.Quaternion,x=new o.Vector3,M=new o.Vector3,T=new o.Vector3,_=0,v=new o.Vector3;l("worldPosition",d),l("worldPositionStart",h),l("worldQuaternion",p),l("worldQuaternionStart",f),l("cameraPosition",g),l("cameraQuaternion",y),l("pointStart",x),l("pointEnd",M),l("rotationAxis",T),l("rotationAngle",_),l("eye",v),this._offset=new o.Vector3,this._startNorm=new o.Vector3,this._endNorm=new o.Vector3,this._cameraScale=new o.Vector3,this._parentPosition=new o.Vector3,this._parentQuaternion=new o.Quaternion,this._parentQuaternionInv=new o.Quaternion,this._parentScale=new o.Vector3,this._worldScaleStart=new o.Vector3,this._worldQuaternionInv=new o.Quaternion,this._worldScale=new o.Vector3,this._positionStart=new o.Vector3,this._quaternionStart=new o.Quaternion,this._scaleStart=new o.Vector3,this._getPointer=Qn.bind(this),this._onPointerDown=qn.bind(this),this._onPointerHover=$n.bind(this),this._onPointerMove=Kn.bind(this),this._onPointerUp=Jn.bind(this),t!==null&&this.connect()}connect(){this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointermove",this._onPointerHover),this.domElement.addEventListener("pointerup",this._onPointerUp),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerHover),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.style.touchAction="auto"}getHelper(){return this._root}pointerHover(e){if(this.object===void 0||this.dragging===!0)return;e!==null&&Ie.setFromCamera(e,this.camera);const t=Kt(this._gizmo.picker[this.mode],Ie);t?this.axis=t.object.name:this.axis=null}pointerDown(e){if(!(this.object===void 0||this.dragging===!0||e!=null&&e.button!==0)&&this.axis!==null){e!==null&&Ie.setFromCamera(e,this.camera);const t=Kt(this._plane,Ie,!0);t&&(this.object.updateMatrixWorld(),this.object.parent.updateMatrixWorld(),this._positionStart.copy(this.object.position),this._quaternionStart.copy(this.object.quaternion),this._scaleStart.copy(this.object.scale),this.object.matrixWorld.decompose(this.worldPositionStart,this.worldQuaternionStart,this._worldScaleStart),this.pointStart.copy(t.point).sub(this.worldPositionStart)),this.dragging=!0,Vi.mode=this.mode,this.dispatchEvent(Vi)}}pointerMove(e){const t=this.axis,s=this.mode,n=this.object;let a=this.space;if(s==="scale"?a="local":(t==="E"||t==="XYZE"||t==="XYZ")&&(a="world"),n===void 0||t===null||this.dragging===!1||e!==null&&e.button!==-1)return;e!==null&&Ie.setFromCamera(e,this.camera);const r=Kt(this._plane,Ie,!0);if(r){if(this.pointEnd.copy(r.point).sub(this.worldPositionStart),s==="translate")this._offset.copy(this.pointEnd).sub(this.pointStart),a==="local"&&t!=="XYZ"&&this._offset.applyQuaternion(this._worldQuaternionInv),t.indexOf("X")===-1&&(this._offset.x=0),t.indexOf("Y")===-1&&(this._offset.y=0),t.indexOf("Z")===-1&&(this._offset.z=0),a==="local"&&t!=="XYZ"?this._offset.applyQuaternion(this._quaternionStart).divide(this._parentScale):this._offset.applyQuaternion(this._parentQuaternionInv).divide(this._parentScale),n.position.copy(this._offset).add(this._positionStart),this.translationSnap&&(a==="local"&&(n.position.applyQuaternion(G.copy(this._quaternionStart).invert()),t.search("X")!==-1&&(n.position.x=Math.round(n.position.x/this.translationSnap)*this.translationSnap),t.search("Y")!==-1&&(n.position.y=Math.round(n.position.y/this.translationSnap)*this.translationSnap),t.search("Z")!==-1&&(n.position.z=Math.round(n.position.z/this.translationSnap)*this.translationSnap),n.position.applyQuaternion(this._quaternionStart)),a==="world"&&(n.parent&&n.position.add(te.setFromMatrixPosition(n.parent.matrixWorld)),t.search("X")!==-1&&(n.position.x=Math.round(n.position.x/this.translationSnap)*this.translationSnap),t.search("Y")!==-1&&(n.position.y=Math.round(n.position.y/this.translationSnap)*this.translationSnap),t.search("Z")!==-1&&(n.position.z=Math.round(n.position.z/this.translationSnap)*this.translationSnap),n.parent&&n.position.sub(te.setFromMatrixPosition(n.parent.matrixWorld))));else if(s==="scale"){if(t.search("XYZ")!==-1){let l=this.pointEnd.length()/this.pointStart.length();this.pointEnd.dot(this.pointStart)<0&&(l*=-1),Ce.set(l,l,l)}else te.copy(this.pointStart),Ce.copy(this.pointEnd),te.applyQuaternion(this._worldQuaternionInv),Ce.applyQuaternion(this._worldQuaternionInv),Ce.divide(te),t.search("X")===-1&&(Ce.x=1),t.search("Y")===-1&&(Ce.y=1),t.search("Z")===-1&&(Ce.z=1);n.scale.copy(this._scaleStart).multiply(Ce),this.scaleSnap&&(t.search("X")!==-1&&(n.scale.x=Math.round(n.scale.x/this.scaleSnap)*this.scaleSnap||this.scaleSnap),t.search("Y")!==-1&&(n.scale.y=Math.round(n.scale.y/this.scaleSnap)*this.scaleSnap||this.scaleSnap),t.search("Z")!==-1&&(n.scale.z=Math.round(n.scale.z/this.scaleSnap)*this.scaleSnap||this.scaleSnap))}else if(s==="rotate"){this._offset.copy(this.pointEnd).sub(this.pointStart);const l=20/this.worldPosition.distanceTo(te.setFromMatrixPosition(this.camera.matrixWorld));let d=!1;t==="XYZE"?(this.rotationAxis.copy(this._offset).cross(this.eye).normalize(),this.rotationAngle=this._offset.dot(te.copy(this.rotationAxis).cross(this.eye))*l):(t==="X"||t==="Y"||t==="Z")&&(this.rotationAxis.copy(Bi[t]),te.copy(Bi[t]),a==="local"&&te.applyQuaternion(this.worldQuaternion),te.cross(this.eye),te.length()===0?d=!0:this.rotationAngle=this._offset.dot(te.normalize())*l),(t==="E"||d)&&(this.rotationAxis.copy(this.eye),this.rotationAngle=this.pointEnd.angleTo(this.pointStart),this._startNorm.copy(this.pointStart).normalize(),this._endNorm.copy(this.pointEnd).normalize(),this.rotationAngle*=this._endNorm.cross(this._startNorm).dot(this.eye)<0?1:-1),this.rotationSnap&&(this.rotationAngle=Math.round(this.rotationAngle/this.rotationSnap)*this.rotationSnap),a==="local"&&t!=="E"&&t!=="XYZE"?(n.quaternion.copy(this._quaternionStart),n.quaternion.multiply(G.setFromAxisAngle(this.rotationAxis,this.rotationAngle)).normalize()):(this.rotationAxis.applyQuaternion(this._parentQuaternionInv),n.quaternion.copy(G.setFromAxisAngle(this.rotationAxis,this.rotationAngle)),n.quaternion.multiply(this._quaternionStart).normalize())}this.dispatchEvent(qt),this.dispatchEvent(Gi)}}pointerUp(e){e!==null&&e.button!==0||(this.dragging&&this.axis!==null&&(Yi.mode=this.mode,this.dispatchEvent(Yi)),this.dragging=!1,this.axis=null)}dispose(){this.disconnect(),this.traverse(function(e){e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose()})}attach(e){return this.object=e,this._root.visible=!0,this}detach(){return this.object=void 0,this.axis=null,this._root.visible=!1,this}reset(){this.enabled&&this.dragging&&(this.object.position.copy(this._positionStart),this.object.quaternion.copy(this._quaternionStart),this.object.scale.copy(this._scaleStart),this.dispatchEvent(qt),this.dispatchEvent(Gi),this.pointStart.copy(this.pointEnd))}getRaycaster(){return Ie}getMode(){return this.mode}setMode(e){this.mode=e}setTranslationSnap(e){this.translationSnap=e}setRotationSnap(e){this.rotationSnap=e}setScaleSnap(e){this.scaleSnap=e}setSize(e){this.size=e}setSpace(e){this.space=e}}function Qn(i){if(this.domElement.ownerDocument.pointerLockElement)return{x:0,y:0,button:i.button};{const e=this.domElement.getBoundingClientRect();return{x:(i.clientX-e.left)/e.width*2-1,y:-(i.clientY-e.top)/e.height*2+1,button:i.button}}}function $n(i){if(this.enabled)switch(i.pointerType){case"mouse":case"pen":this.pointerHover(this._getPointer(i));break}}function qn(i){this.enabled&&(document.pointerLockElement||this.domElement.setPointerCapture(i.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),this.pointerHover(this._getPointer(i)),this.pointerDown(this._getPointer(i)))}function Kn(i){this.enabled&&this.pointerMove(this._getPointer(i))}function Jn(i){this.enabled&&(this.domElement.releasePointerCapture(i.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.pointerUp(this._getPointer(i)))}function Kt(i,e,t){const s=e.intersectObject(i,!0);for(let n=0;n<s.length;n++)if(s[n].object.visible||t)return s[n];return!1}const wt=new o.Euler,V=new o.Vector3(0,1,0),Zi=new o.Vector3(0,0,0),Wi=new o.Matrix4,xt=new o.Quaternion,Mt=new o.Quaternion,fe=new o.Vector3,Xi=new o.Matrix4,ot=new o.Vector3(1,0,0),Le=new o.Vector3(0,1,0),lt=new o.Vector3(0,0,1),Ot=new o.Vector3,nt=new o.Vector3,rt=new o.Vector3;class er extends o.Object3D{constructor(e){super(),this.isTransformControlsRoot=!0,this.controls=e,this.visible=!1}updateMatrixWorld(e){const t=this.controls;t.object!==void 0&&(t.object.updateMatrixWorld(),t.object.parent===null?console.error("TransformControls: The attached 3D object must be a part of the scene graph."):t.object.parent.matrixWorld.decompose(t._parentPosition,t._parentQuaternion,t._parentScale),t.object.matrixWorld.decompose(t.worldPosition,t.worldQuaternion,t._worldScale),t._parentQuaternionInv.copy(t._parentQuaternion).invert(),t._worldQuaternionInv.copy(t.worldQuaternion).invert()),t.camera.updateMatrixWorld(),t.camera.matrixWorld.decompose(t.cameraPosition,t.cameraQuaternion,t._cameraScale),t.camera.isOrthographicCamera?t.camera.getWorldDirection(t.eye).negate():t.eye.copy(t.cameraPosition).sub(t.worldPosition).normalize(),super.updateMatrixWorld(e)}}class tr extends o.Object3D{constructor(){super(),this.isTransformControlsGizmo=!0,this.type="TransformControlsGizmo";const e=new o.MeshBasicMaterial({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),t=new o.LineBasicMaterial({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),s=e.clone();s.opacity=.15;const n=t.clone();n.opacity=.5;const a=e.clone();a.color.setHex(16711680);const r=e.clone();r.color.setHex(65280);const l=e.clone();l.color.setHex(255);const d=e.clone();d.color.setHex(16711680),d.opacity=.5;const h=e.clone();h.color.setHex(65280),h.opacity=.5;const p=e.clone();p.color.setHex(255),p.opacity=.5;const f=e.clone();f.opacity=.25;const g=e.clone();g.color.setHex(16776960),g.opacity=.25,e.clone().color.setHex(16776960);const x=e.clone();x.color.setHex(7895160);const M=new o.CylinderGeometry(0,.04,.1,12);M.translate(0,.05,0);const T=new o.BoxGeometry(.08,.08,.08);T.translate(0,.04,0);const _=new o.BufferGeometry;_.setAttribute("position",new o.Float32BufferAttribute([0,0,0,1,0,0],3));const v=new o.CylinderGeometry(.0075,.0075,.5,3);v.translate(0,.25,0);function C(X,Oe){const se=new o.TorusGeometry(X,.0075,3,64,Oe*Math.PI*2);return se.rotateY(Math.PI/2),se.rotateX(Math.PI/2),se}function b(){const X=new o.BufferGeometry;return X.setAttribute("position",new o.Float32BufferAttribute([0,0,0,1,1,1],3)),X}const D={X:[[new o.Mesh(M,a),[.5,0,0],[0,0,-Math.PI/2]],[new o.Mesh(M,a),[-.5,0,0],[0,0,Math.PI/2]],[new o.Mesh(v,a),[0,0,0],[0,0,-Math.PI/2]]],Y:[[new o.Mesh(M,r),[0,.5,0]],[new o.Mesh(M,r),[0,-.5,0],[Math.PI,0,0]],[new o.Mesh(v,r)]],Z:[[new o.Mesh(M,l),[0,0,.5],[Math.PI/2,0,0]],[new o.Mesh(M,l),[0,0,-.5],[-Math.PI/2,0,0]],[new o.Mesh(v,l),null,[Math.PI/2,0,0]]],XYZ:[[new o.Mesh(new o.OctahedronGeometry(.1,0),f.clone()),[0,0,0]]],XY:[[new o.Mesh(new o.BoxGeometry(.15,.15,.01),p.clone()),[.15,.15,0]]],YZ:[[new o.Mesh(new o.BoxGeometry(.15,.15,.01),d.clone()),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new o.Mesh(new o.BoxGeometry(.15,.15,.01),h.clone()),[.15,0,.15],[-Math.PI/2,0,0]]]},O={X:[[new o.Mesh(new o.CylinderGeometry(.2,0,.6,4),s),[.3,0,0],[0,0,-Math.PI/2]],[new o.Mesh(new o.CylinderGeometry(.2,0,.6,4),s),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new o.Mesh(new o.CylinderGeometry(.2,0,.6,4),s),[0,.3,0]],[new o.Mesh(new o.CylinderGeometry(.2,0,.6,4),s),[0,-.3,0],[0,0,Math.PI]]],Z:[[new o.Mesh(new o.CylinderGeometry(.2,0,.6,4),s),[0,0,.3],[Math.PI/2,0,0]],[new o.Mesh(new o.CylinderGeometry(.2,0,.6,4),s),[0,0,-.3],[-Math.PI/2,0,0]]],XYZ:[[new o.Mesh(new o.OctahedronGeometry(.2,0),s)]],XY:[[new o.Mesh(new o.BoxGeometry(.2,.2,.01),s),[.15,.15,0]]],YZ:[[new o.Mesh(new o.BoxGeometry(.2,.2,.01),s),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new o.Mesh(new o.BoxGeometry(.2,.2,.01),s),[.15,0,.15],[-Math.PI/2,0,0]]]},j={START:[[new o.Mesh(new o.OctahedronGeometry(.01,2),n),null,null,null,"helper"]],END:[[new o.Mesh(new o.OctahedronGeometry(.01,2),n),null,null,null,"helper"]],DELTA:[[new o.Line(b(),n),null,null,null,"helper"]],X:[[new o.Line(_,n.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new o.Line(_,n.clone()),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new o.Line(_,n.clone()),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]},W={XYZE:[[new o.Mesh(C(.5,1),x),null,[0,Math.PI/2,0]]],X:[[new o.Mesh(C(.5,.5),a)]],Y:[[new o.Mesh(C(.5,.5),r),null,[0,0,-Math.PI/2]]],Z:[[new o.Mesh(C(.5,.5),l),null,[0,Math.PI/2,0]]],E:[[new o.Mesh(C(.75,1),g),null,[0,Math.PI/2,0]]]},le={AXIS:[[new o.Line(_,n.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]]},be={XYZE:[[new o.Mesh(new o.SphereGeometry(.25,10,8),s)]],X:[[new o.Mesh(new o.TorusGeometry(.5,.1,4,24),s),[0,0,0],[0,-Math.PI/2,-Math.PI/2]]],Y:[[new o.Mesh(new o.TorusGeometry(.5,.1,4,24),s),[0,0,0],[Math.PI/2,0,0]]],Z:[[new o.Mesh(new o.TorusGeometry(.5,.1,4,24),s),[0,0,0],[0,0,-Math.PI/2]]],E:[[new o.Mesh(new o.TorusGeometry(.75,.1,2,24),s)]]},Xe={X:[[new o.Mesh(T,a),[.5,0,0],[0,0,-Math.PI/2]],[new o.Mesh(v,a),[0,0,0],[0,0,-Math.PI/2]],[new o.Mesh(T,a),[-.5,0,0],[0,0,Math.PI/2]]],Y:[[new o.Mesh(T,r),[0,.5,0]],[new o.Mesh(v,r)],[new o.Mesh(T,r),[0,-.5,0],[0,0,Math.PI]]],Z:[[new o.Mesh(T,l),[0,0,.5],[Math.PI/2,0,0]],[new o.Mesh(v,l),[0,0,0],[Math.PI/2,0,0]],[new o.Mesh(T,l),[0,0,-.5],[-Math.PI/2,0,0]]],XY:[[new o.Mesh(new o.BoxGeometry(.15,.15,.01),p),[.15,.15,0]]],YZ:[[new o.Mesh(new o.BoxGeometry(.15,.15,.01),d),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new o.Mesh(new o.BoxGeometry(.15,.15,.01),h),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new o.Mesh(new o.BoxGeometry(.1,.1,.1),f.clone())]]},je={X:[[new o.Mesh(new o.CylinderGeometry(.2,0,.6,4),s),[.3,0,0],[0,0,-Math.PI/2]],[new o.Mesh(new o.CylinderGeometry(.2,0,.6,4),s),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new o.Mesh(new o.CylinderGeometry(.2,0,.6,4),s),[0,.3,0]],[new o.Mesh(new o.CylinderGeometry(.2,0,.6,4),s),[0,-.3,0],[0,0,Math.PI]]],Z:[[new o.Mesh(new o.CylinderGeometry(.2,0,.6,4),s),[0,0,.3],[Math.PI/2,0,0]],[new o.Mesh(new o.CylinderGeometry(.2,0,.6,4),s),[0,0,-.3],[-Math.PI/2,0,0]]],XY:[[new o.Mesh(new o.BoxGeometry(.2,.2,.01),s),[.15,.15,0]]],YZ:[[new o.Mesh(new o.BoxGeometry(.2,.2,.01),s),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new o.Mesh(new o.BoxGeometry(.2,.2,.01),s),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new o.Mesh(new o.BoxGeometry(.2,.2,.2),s),[0,0,0]]]},oe={X:[[new o.Line(_,n.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new o.Line(_,n.clone()),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new o.Line(_,n.clone()),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]};function K(X){const Oe=new o.Object3D;for(const se in X)for(let ye=X[se].length;ye--;){const ee=X[se][ye][0].clone(),Te=X[se][ye][1],Me=X[se][ye][2],De=X[se][ye][3],ut=X[se][ye][4];ee.name=se,ee.tag=ut,Te&&ee.position.set(Te[0],Te[1],Te[2]),Me&&ee.rotation.set(Me[0],Me[1],Me[2]),De&&ee.scale.set(De[0],De[1],De[2]),ee.updateMatrix();const pt=ee.geometry.clone();pt.applyMatrix4(ee.matrix),ee.geometry=pt,ee.renderOrder=1/0,ee.position.set(0,0,0),ee.rotation.set(0,0,0),ee.scale.set(1,1,1),Oe.add(ee)}return Oe}this.gizmo={},this.picker={},this.helper={},this.add(this.gizmo.translate=K(D)),this.add(this.gizmo.rotate=K(W)),this.add(this.gizmo.scale=K(Xe)),this.add(this.picker.translate=K(O)),this.add(this.picker.rotate=K(be)),this.add(this.picker.scale=K(je)),this.add(this.helper.translate=K(j)),this.add(this.helper.rotate=K(le)),this.add(this.helper.scale=K(oe)),this.picker.translate.visible=!1,this.picker.rotate.visible=!1,this.picker.scale.visible=!1}updateMatrixWorld(e){const s=(this.mode==="scale"?"local":this.space)==="local"?this.worldQuaternion:Mt;this.gizmo.translate.visible=this.mode==="translate",this.gizmo.rotate.visible=this.mode==="rotate",this.gizmo.scale.visible=this.mode==="scale",this.helper.translate.visible=this.mode==="translate",this.helper.rotate.visible=this.mode==="rotate",this.helper.scale.visible=this.mode==="scale";let n=[];n=n.concat(this.picker[this.mode].children),n=n.concat(this.gizmo[this.mode].children),n=n.concat(this.helper[this.mode].children);for(let a=0;a<n.length;a++){const r=n[a];r.visible=!0,r.rotation.set(0,0,0),r.position.copy(this.worldPosition);let l;if(this.camera.isOrthographicCamera?l=(this.camera.top-this.camera.bottom)/this.camera.zoom:l=this.worldPosition.distanceTo(this.cameraPosition)*Math.min(1.9*Math.tan(Math.PI*this.camera.fov/360)/this.camera.zoom,7),r.scale.set(1,1,1).multiplyScalar(l*this.size/4),r.tag==="helper"){r.visible=!1,r.name==="AXIS"?(r.visible=!!this.axis,this.axis==="X"&&(G.setFromEuler(wt.set(0,0,0)),r.quaternion.copy(s).multiply(G),Math.abs(V.copy(ot).applyQuaternion(s).dot(this.eye))>.9&&(r.visible=!1)),this.axis==="Y"&&(G.setFromEuler(wt.set(0,0,Math.PI/2)),r.quaternion.copy(s).multiply(G),Math.abs(V.copy(Le).applyQuaternion(s).dot(this.eye))>.9&&(r.visible=!1)),this.axis==="Z"&&(G.setFromEuler(wt.set(0,Math.PI/2,0)),r.quaternion.copy(s).multiply(G),Math.abs(V.copy(lt).applyQuaternion(s).dot(this.eye))>.9&&(r.visible=!1)),this.axis==="XYZE"&&(G.setFromEuler(wt.set(0,Math.PI/2,0)),V.copy(this.rotationAxis),r.quaternion.setFromRotationMatrix(Wi.lookAt(Zi,V,Le)),r.quaternion.multiply(G),r.visible=this.dragging),this.axis==="E"&&(r.visible=!1)):r.name==="START"?(r.position.copy(this.worldPositionStart),r.visible=this.dragging):r.name==="END"?(r.position.copy(this.worldPosition),r.visible=this.dragging):r.name==="DELTA"?(r.position.copy(this.worldPositionStart),r.quaternion.copy(this.worldQuaternionStart),te.set(1e-10,1e-10,1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1),te.applyQuaternion(this.worldQuaternionStart.clone().invert()),r.scale.copy(te),r.visible=this.dragging):(r.quaternion.copy(s),this.dragging?r.position.copy(this.worldPositionStart):r.position.copy(this.worldPosition),this.axis&&(r.visible=this.axis.search(r.name)!==-1));continue}r.quaternion.copy(s),this.mode==="translate"||this.mode==="scale"?(r.name==="X"&&Math.abs(V.copy(ot).applyQuaternion(s).dot(this.eye))>.99&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="Y"&&Math.abs(V.copy(Le).applyQuaternion(s).dot(this.eye))>.99&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="Z"&&Math.abs(V.copy(lt).applyQuaternion(s).dot(this.eye))>.99&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="XY"&&Math.abs(V.copy(lt).applyQuaternion(s).dot(this.eye))<.2&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="YZ"&&Math.abs(V.copy(ot).applyQuaternion(s).dot(this.eye))<.2&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1),r.name==="XZ"&&Math.abs(V.copy(Le).applyQuaternion(s).dot(this.eye))<.2&&(r.scale.set(1e-10,1e-10,1e-10),r.visible=!1)):this.mode==="rotate"&&(xt.copy(s),V.copy(this.eye).applyQuaternion(G.copy(s).invert()),r.name.search("E")!==-1&&r.quaternion.setFromRotationMatrix(Wi.lookAt(this.eye,Zi,Le)),r.name==="X"&&(G.setFromAxisAngle(ot,Math.atan2(-V.y,V.z)),G.multiplyQuaternions(xt,G),r.quaternion.copy(G)),r.name==="Y"&&(G.setFromAxisAngle(Le,Math.atan2(V.x,V.z)),G.multiplyQuaternions(xt,G),r.quaternion.copy(G)),r.name==="Z"&&(G.setFromAxisAngle(lt,Math.atan2(V.y,V.x)),G.multiplyQuaternions(xt,G),r.quaternion.copy(G))),r.visible=r.visible&&(r.name.indexOf("X")===-1||this.showX),r.visible=r.visible&&(r.name.indexOf("Y")===-1||this.showY),r.visible=r.visible&&(r.name.indexOf("Z")===-1||this.showZ),r.visible=r.visible&&(r.name.indexOf("E")===-1||this.showX&&this.showY&&this.showZ),r.material._color=r.material._color||r.material.color.clone(),r.material._opacity=r.material._opacity||r.material.opacity,r.material.color.copy(r.material._color),r.material.opacity=r.material._opacity,this.enabled&&this.axis&&(r.name===this.axis||this.axis.split("").some(function(d){return r.name===d}))&&(r.material.color.setHex(16776960),r.material.opacity=1)}super.updateMatrixWorld(e)}}class ir extends o.Mesh{constructor(){super(new o.PlaneGeometry(1e5,1e5,2,2),new o.MeshBasicMaterial({visible:!1,wireframe:!0,side:o.DoubleSide,transparent:!0,opacity:.1,toneMapped:!1})),this.isTransformControlsPlane=!0,this.type="TransformControlsPlane"}updateMatrixWorld(e){let t=this.space;switch(this.position.copy(this.worldPosition),this.mode==="scale"&&(t="local"),Ot.copy(ot).applyQuaternion(t==="local"?this.worldQuaternion:Mt),nt.copy(Le).applyQuaternion(t==="local"?this.worldQuaternion:Mt),rt.copy(lt).applyQuaternion(t==="local"?this.worldQuaternion:Mt),V.copy(nt),this.mode){case"translate":case"scale":switch(this.axis){case"X":V.copy(this.eye).cross(Ot),fe.copy(Ot).cross(V);break;case"Y":V.copy(this.eye).cross(nt),fe.copy(nt).cross(V);break;case"Z":V.copy(this.eye).cross(rt),fe.copy(rt).cross(V);break;case"XY":fe.copy(rt);break;case"YZ":fe.copy(Ot);break;case"XZ":V.copy(rt),fe.copy(nt);break;case"XYZ":case"E":fe.set(0,0,0);break}break;case"rotate":default:fe.set(0,0,0)}fe.length()===0?this.quaternion.copy(this.cameraQuaternion):(Xi.lookAt(te.set(0,0,0),fe,V),this.quaternion.setFromRotationMatrix(Xi)),super.updateMatrixWorld(e)}}class de extends o.EventDispatcher{static DRAG_START="Transform::dragStart";static DRAG_END="Transform::dragEnd";static _instance;three;activeCamera;controls=new Map;visibility=new Map;groups=[];clear(){for(const e of this.controls.values()){e.detach(),e.dispose();const t=e.getHelper();t.parent?.remove(t)}this.controls=new Map,this.visibility=new Map}add(e){let t=this.controls.get(e);if(t===void 0){const s=document.querySelector(".clickable");t=new Xn(this.activeCamera,s),t.getHelper().name=e,t.setSpace("local"),this.controls.set(e,t),this.visibility.set(e,t.getHelper().visible),t.addEventListener("mouseDown",()=>{this.dispatchEvent({type:de.DRAG_START})}),t.addEventListener("mouseUp",()=>{this.dispatchEvent({type:de.DRAG_END})}),t.addEventListener("dragging-changed",a=>{ge.instance?.toggleOrbitControls(a.value)});const n=`Controls: ${e}`;this.groups.push(n),this.three.addGroup({title:n,items:[{type:"boolean",prop:"enabled",value:t.enabled},{type:"boolean",prop:"visible",value:t.getHelper().visible},{type:"button",prop:"Reset"},{type:"option",prop:"Mode",options:[{title:"Translate",value:"translate"},{title:"Rotate",value:"rotate"},{title:"Scale",value:"scale"}]},{type:"option",prop:"Space",options:[{title:"World",value:"world"},{title:"Local",value:"local"}]}],onUpdate:(a,r)=>{if(t!==void 0)switch(a){case"enabled":t.enabled=r;break;case"visible":t.getHelper().visible=r;break;case"Reset":t.reset();break;case"Mode":t.setMode(r);break;case"Space":t.setSpace(r);break}}})}return t}get(e){return this.controls.get(e)}remove(e){const t=this.get(e);return t===void 0?!1:(t.detach(),t.disconnect(),We(t.getHelper()),this.controls.delete(e),!0)}enabled(e){this.controls.forEach(t=>{t.enabled=e})}updateCamera(e,t){this.activeCamera=e,this.controls.forEach(s=>{s.camera!==e&&(s.camera=e,e.getWorldPosition(s.cameraPosition),e.getWorldQuaternion(s.cameraQuaternion)),s.domElement!==t&&(s.disconnect(),s.domElement=t,s.connect())})}show(){this.controls.forEach(e=>{const t=e.getHelper(),s=this.visibility.get(t.name);s!==void 0&&(t.visible=s)})}hide(){this.controls.forEach(e=>{const t=e.getHelper();this.visibility.set(t.name,t.visible),t.visible=!1})}static get instance(){return de._instance||(de._instance=new de),de._instance}}const Qi=["Single","Side by Side","Stacked","Quad"];class ge extends w.Component{static instance=null;scene=new o.Scene;renderer;currentScene;cameras=new Map;controls=new Map;currentCamera;cameraHelpers=new Map;lightHelpers=new Map;helpersContainer=new o.Group;grid=new Yn;axisHelper=new o.AxesHelper(500);interactionHelper=new o.AxesHelper(100);currentTransform;depthMaterial=new o.MeshDepthMaterial;normalsMaterial=new o.MeshNormalMaterial;uvMaterial=new Wn;wireframeMaterial=new o.MeshBasicMaterial({opacity:.33,transparent:!0,wireframe:!0});playing=!1;rafID=-1;width=0;height=0;sceneSet=!1;tlCam=null;trCam=null;blCam=null;brCam=null;tlRender="Renderer";trRender="Renderer";blRender="Renderer";brRender="Renderer";selectedItem=void 0;debugCamera;raycaster=new o.Raycaster;pointer=new o.Vector2;cameraControls=void 0;canvasRef;containerRef;tlWindow;trWindow;blWindow;brWindow;currentWindow;constructor(e){super(e),this.canvasRef=w.createRef(),this.containerRef=w.createRef(),this.tlWindow=w.createRef(),this.trWindow=w.createRef(),this.blWindow=w.createRef(),this.brWindow=w.createRef();const t=e.three.app.appID,s=localStorage,n=s.getItem(`${t}_mode`);this.state={mode:n!==null?n:"Single",modeOpen:!1,renderModeOpen:!1,interactionMode:"Orbit",interactionModeOpen:!1,lastUpdate:Date.now()},s.setItem(`${t}_mode`,this.state.mode),s.setItem(`${t}_tlCam`,s.getItem(`${t}_tlCam`)!==null?s.getItem(`${t}_tlCam`):"Debug"),s.setItem(`${t}_trCam`,s.getItem(`${t}_trCam`)!==null?s.getItem(`${t}_trCam`):"Orthographic"),s.setItem(`${t}_blCam`,s.getItem(`${t}_blCam`)!==null?s.getItem(`${t}_blCam`):"Front"),s.setItem(`${t}_brCam`,s.getItem(`${t}_brCam`)!==null?s.getItem(`${t}_brCam`):"Top"),s.setItem(`${t}_tlRender`,s.getItem(`${t}_tlRender`)!==null?s.getItem(`${t}_tlRender`):"Renderer"),s.setItem(`${t}_trRender`,s.getItem(`${t}_trRender`)!==null?s.getItem(`${t}_trRender`):"Renderer"),s.setItem(`${t}_blRender`,s.getItem(`${t}_blRender`)!==null?s.getItem(`${t}_blRender`):"Renderer"),s.setItem(`${t}_brRender`,s.getItem(`${t}_brRender`)!==null?s.getItem(`${t}_brRender`):"Renderer");const a={Vector2:o.Vector2,Vector3:o.Vector3,Vector4:o.Vector4,Quaternion:o.Quaternion,Matrix4:o.Matrix4,Spherical:o.Spherical,Box3:o.Box3,Sphere:o.Sphere,Raycaster:o.Raycaster};_e.install({THREE:a}),this.setupScene(),ge.instance=this}componentDidMount(){this.setupRenderer(),this.enable(),this.assignControls(),this.resize(),this.play(),de.instance.three=this.props.three,de.instance.activeCamera=this.debugCamera}componentDidUpdate(e,t,s){t.mode!==this.state.mode&&(this.assignControls(),this.resize())}componentWillUnmount(){this.disable()}render(){const e=[];return this.cameras.forEach((t,s)=>{e.push(s)}),u.jsxs("div",{className:"multiview",children:[u.jsx("canvas",{ref:this.canvasRef}),u.jsxs("div",{className:`cameras ${this.state.mode==="Single"||this.state.mode==="Stacked"?"single":""}`,ref:this.containerRef,children:[this.state.mode==="Single"&&u.jsx(u.Fragment,{children:u.jsx(Ae,{camera:this.tlCam,options:e,ref:this.tlWindow,onSelectCamera:t=>{this.controls.get(this.tlCam.name)?.dispose();const s=this.cameras.get(t);s!==void 0&&(this.clearCamera(this.tlCam),this.tlCam=s,localStorage.setItem(`${this.appID}_tlCam`,s.name),this.createControls(s,this.tlWindow.current))},onSelectRenderMode:t=>{this.tlRender=t,localStorage.setItem(`${this.appID}_tlRender`,t)}})}),(this.state.mode==="Side by Side"||this.state.mode==="Stacked")&&u.jsxs(u.Fragment,{children:[u.jsx(Ae,{camera:this.tlCam,options:e,ref:this.tlWindow,onSelectCamera:t=>{this.controls.get(this.tlCam.name)?.dispose();const s=this.cameras.get(t);s!==void 0&&(this.clearCamera(this.tlCam),this.tlCam=s,localStorage.setItem(`${this.appID}_tlCam`,s.name),this.createControls(s,this.tlWindow.current))},onSelectRenderMode:t=>{this.tlRender=t,localStorage.setItem(`${this.appID}_tlRender`,t)}}),u.jsx(Ae,{camera:this.trCam,options:e,ref:this.trWindow,onSelectCamera:t=>{this.controls.get(this.trCam.name)?.dispose();const s=this.cameras.get(t);s!==void 0&&(this.clearCamera(this.trCam),this.trCam=s,localStorage.setItem(`${this.appID}_trCam`,s.name),this.createControls(s,this.trWindow.current))},onSelectRenderMode:t=>{this.trRender=t,localStorage.setItem(`${this.appID}_trRender`,t)}})]}),this.state.mode==="Quad"&&u.jsxs(u.Fragment,{children:[u.jsx(Ae,{camera:this.tlCam,options:e,ref:this.tlWindow,onSelectCamera:t=>{this.controls.get(this.tlCam.name)?.dispose();const s=this.cameras.get(t);s!==void 0&&(this.clearCamera(this.tlCam),this.tlCam=s,localStorage.setItem(`${this.appID}_tlCam`,s.name),this.createControls(s,this.tlWindow.current))},onSelectRenderMode:t=>{this.tlRender=t,localStorage.setItem(`${this.appID}_tlRender`,t)}}),u.jsx(Ae,{camera:this.trCam,options:e,ref:this.trWindow,onSelectCamera:t=>{this.controls.get(this.trCam.name)?.dispose();const s=this.cameras.get(t);s!==void 0&&(this.clearCamera(this.trCam),this.trCam=s,localStorage.setItem(`${this.appID}_trCam`,s.name),this.createControls(s,this.trWindow.current))},onSelectRenderMode:t=>{this.trRender=t,localStorage.setItem(`${this.appID}_trRender`,t)}}),u.jsx(Ae,{camera:this.blCam,options:e,ref:this.blWindow,onSelectCamera:t=>{this.controls.get(this.blCam.name)?.dispose();const s=this.cameras.get(t);s!==void 0&&(this.clearCamera(this.blCam),this.blCam=s,localStorage.setItem(`${this.appID}_blCam`,s.name),this.createControls(s,this.blWindow.current))},onSelectRenderMode:t=>{this.blRender=t,localStorage.setItem(`${this.appID}_blRender`,t)}}),u.jsx(Ae,{camera:this.brCam,options:e,ref:this.brWindow,onSelectCamera:t=>{this.controls.get(this.brCam.name)?.dispose();const s=this.cameras.get(t);s!==void 0&&(this.clearCamera(this.brCam),this.brCam=s,localStorage.setItem(`${this.appID}_brCam`,s.name),this.createControls(s,this.brWindow.current))},onSelectRenderMode:t=>{this.brRender=t,localStorage.setItem(`${this.appID}_brRender`,t)}})]})]}),u.jsxs("div",{className:"settings",children:[u.jsx(Pt,{title:"View",index:Qi.indexOf(this.state.mode),options:Qi,onSelect:t=>{t!==this.state.mode&&(this.killControls(),this.setState({mode:t}))},open:this.state.modeOpen,onToggle:t=>{this.setState({modeOpen:t,renderModeOpen:!1,interactionModeOpen:!1})}}),u.jsx(Pt,{title:"Interact",index:this.state.interactionMode==="Orbit"?0:1,options:["Orbit Mode","Selection Mode"],onSelect:t=>{this.interactionHelper.visible=t==="Selection Mode",this.setState({interactionMode:this.interactionHelper.visible?"Selection":"Orbit"})},open:this.state.interactionModeOpen,onToggle:t=>{this.setState({modeOpen:!1,renderModeOpen:!1,interactionModeOpen:t})}})]},this.state.lastUpdate)]})}setupRenderer(){this.renderer=new o.WebGLRenderer({canvas:this.canvasRef.current,stencil:!1}),this.renderer.autoClear=!1,this.renderer.shadowMap.enabled=!0,this.renderer.setPixelRatio(devicePixelRatio),this.renderer.setClearColor(0),this.props.three.renderer=this.renderer}setupScene(){this.scene.name="Debug Scene",this.scene.uuid="",this.helpersContainer.name="helpers",this.scene.add(this.helpersContainer),this.helpersContainer.add(this.grid),this.axisHelper.name="axisHelper",this.helpersContainer.add(this.axisHelper),this.interactionHelper.name="interactionHelper",this.helpersContainer.add(this.interactionHelper),this.interactionHelper.visible=!1;const e=(n,a)=>{const r=new o.OrthographicCamera(-100,100,100,-100,50,5e3);return r.name=n,r.position.copy(a),r.lookAt(0,0,0),this.cameras.set(n,r),r};e("Top",new o.Vector3(0,1e3,0)),e("Bottom",new o.Vector3(0,-1e3,0)),e("Left",new o.Vector3(-1e3,0,0)),e("Right",new o.Vector3(1e3,0,0)),e("Front",new o.Vector3(0,0,1e3)),e("Back",new o.Vector3(0,0,-1e3)),e("Orthographic",new o.Vector3(1e3,1e3,1e3)),e("UI",new o.Vector3),this.debugCamera=new o.PerspectiveCamera(60,1,50,5e3),this.debugCamera.name="Debug",this.debugCamera.position.set(500,500,500),this.debugCamera.lookAt(0,0,0),this.cameras.set("Debug",this.debugCamera),this.currentCamera=this.debugCamera;const t=localStorage,s=this.props.three.app.appID;this.tlCam=this.cameras.get(t.getItem(`${s}_tlCam`)),this.trCam=this.cameras.get(t.getItem(`${s}_trCam`)),this.blCam=this.cameras.get(t.getItem(`${s}_blCam`)),this.brCam=this.cameras.get(t.getItem(`${s}_brCam`)),this.tlCam===void 0&&(this.tlCam=this.cameras.get("Debug")),this.trCam===void 0&&(this.trCam=this.cameras.get("Orthographic")),this.blCam===void 0&&(this.blCam=this.cameras.get("Front")),this.brCam===void 0&&(this.brCam=this.cameras.get("Top"))}play(){this.playing=!0,this.onUpdate()}pause(){this.playing=!1,cancelAnimationFrame(this.rafID),this.rafID=-1}toggleOrbitControls(e){this.controls.forEach(t=>{t.enabled=!e})}update(){this.controls.forEach(e=>{e.update()}),this.cameraHelpers.forEach(e=>{e.update()}),this.lightHelpers.forEach(e=>{e.update!==void 0&&e.update()}),this.props.onSceneUpdate!==void 0&&this.sceneSet&&this.props.onSceneUpdate(this.currentScene)}draw(){switch(this.renderer?.clear(),this.state.mode){case"Single":this.drawSingle();break;case"Side by Side":case"Stacked":this.drawDouble();break;case"Quad":this.drawQuad();break}}onUpdate=()=>{this.playing&&(this.update(),this.draw(),this.rafID=requestAnimationFrame(this.onUpdate))};enable(){const e=this.containerRef.current;e.addEventListener("mousemove",this.onMouseMove),e.addEventListener("click",this.onClick),window.addEventListener("keydown",this.onKey),window.addEventListener("resize",this.resize),P.addEventListener(R.SET_SCENE,this.sceneUpdate),P.addEventListener(R.ADD_CAMERA,this.addCamera),P.addEventListener(R.REMOVE_CAMERA,this.removeCamera),P.addEventListener(R.SET_OBJECT,this.onSetSelectedItem)}disable(){const e=this.containerRef.current;e.removeEventListener("mousemove",this.onMouseMove),e.removeEventListener("click",this.onClick),window.removeEventListener("keydown",this.onKey),window.removeEventListener("resize",this.resize),P.removeEventListener(R.SET_SCENE,this.sceneUpdate),P.removeEventListener(R.ADD_CAMERA,this.addCamera),P.removeEventListener(R.REMOVE_CAMERA,this.removeCamera),P.removeEventListener(R.SET_OBJECT,this.onSetSelectedItem)}resize=()=>{this.width=window.innerWidth-300,this.height=window.innerHeight;const e=Math.floor(this.width/2),t=Math.floor(this.height/2);this.props.three.resize(this.width,this.height),this.props.onSceneResize!==void 0&&this.sceneSet&&this.currentScene!==void 0&&this.props.onSceneResize(this.currentScene,this.width,this.height);let s=this.width,n=this.height;switch(this.state.mode){case"Side by Side":s=e,n=this.height;break;case"Stacked":s=this.width,n=t;break;case"Quad":s=e,n=t;break}const a=s/n;this.cameras.forEach(r=>{r instanceof o.OrthographicCamera?(r.left=s/-2,r.right=s/2,r.top=n/2,r.bottom=n/-2,r.name==="UI"&&(r.position.x=this.width/2,r.position.y=this.height/-2,r.position.z=100),r.updateProjectionMatrix()):r instanceof o.PerspectiveCamera&&(r.aspect=a,r.updateProjectionMatrix(),this.cameraHelpers.get(r.name)?.update())})};sceneUpdate=e=>{this.helpersContainer.add(this.axisHelper),this.clearLightHelpers(),this.scene.remove(this.currentScene),We(this.currentScene);const t=this.props.scenes.get(e.value.name);if(t!==void 0){const s=new t;this.props.onSceneSet!==void 0&&this.props.onSceneSet(s),this.currentScene=s,this.props.three.scene=this.currentScene,this.scene.add(this.currentScene),this.sceneSet=!0,this.addLightHelpers()}};addCamera=e=>{const t=e.value,s=this.props.three.scene?.getObjectByProperty("uuid",t.uuid);if(s!==void 0&&this.cameras.set(t.name,s),s instanceof o.PerspectiveCamera){const n=new o.CameraHelper(s);this.cameraHelpers.set(s.name,n),this.scene.add(n)}this.setState({lastUpdate:Date.now()})};removeCamera=e=>{const t=this.cameraHelpers.get(e.value.name);t!==void 0&&(this.scene.remove(t),t.dispose()),this.cameras.delete(e.value.name),this.setState({lastUpdate:Date.now()})};onMouseMove=e=>{const t=new o.Vector2;this.renderer.getSize(t);const s=Math.min(e.clientX,t.x),n=Math.min(e.clientY,t.y);this.pointer.x=He(s,0,t.x,-1,1),this.pointer.y=He(n,0,t.y,1,-1);const a=t.x/2,r=t.y/2,l=()=>{s<a?this.pointer.x=He(s,0,a,-1,1):this.pointer.x=He(s,a,t.x,-1,1)},d=()=>{n<r?this.pointer.y=He(n,0,r,1,-1):this.pointer.y=He(n,r,t.y,1,-1)};switch(this.state.mode){case"Quad":l(),d();break;case"Side by Side":l();break;case"Stacked":d(),d();break}if(this.updateCamera(s,n,a,r),this.state.interactionMode==="Orbit")return;const h=this.raycaster.intersectObjects(this.currentScene.children);h.length>0&&this.interactionHelper.position.copy(h[0].point)};onClick=e=>{if(this.state.interactionMode==="Orbit")return;const t=new o.Vector2;if(this.renderer.getSize(t),e.clientX>=t.x)return;this.onMouseMove(e);const s=this.raycaster.intersectObjects(this.currentScene.children);s.length>0&&(this.props.three.getObject(s[0].object.uuid),this.interactionHelper.visible=!1,this.setState({interactionMode:"Orbit",lastUpdate:Date.now()}))};onKey=e=>{if(this.selectedItem!==void 0){if(e.ctrlKey){if(this.currentCamera.name==="UI")return;const t=this.controls.get(this.currentCamera.name);e.key==="0"?(this.clearControls(),this.cameraControls=new _e(this.currentCamera,this.currentWindow.current),this.selectedItem instanceof o.Mesh||this.selectedItem instanceof o.SkinnedMesh?(this.selectedItem.geometry.computeBoundingBox(),this.cameraControls.fitToBox(this.selectedItem.geometry.boundingBox,!0)):this.cameraControls.fitToSphere(this.selectedItem,!0),this.updateCameraControls(t,!0)):e.key==="1"?(this.clearControls(),this.cameraControls=new _e(this.currentCamera,this.currentWindow.current),this.cameraControls.rotateTo(0,Math.PI*.5,!0),this.cameraControls.moveTo(this.selectedItem.position.x,this.selectedItem.position.y,0,!0),this.updateCameraControls(t)):e.key==="2"?(this.clearControls(),this.cameraControls=new _e(this.currentCamera,this.currentWindow.current),this.cameraControls.rotateTo(0,0,!0),this.cameraControls.moveTo(this.selectedItem.position.x,0,this.selectedItem.position.z,!0),this.updateCameraControls(t)):e.key==="3"?(this.clearControls(),this.cameraControls=new _e(this.currentCamera,this.currentWindow.current),this.cameraControls.rotateTo(Math.PI/2,Math.PI/2,!0),this.cameraControls.moveTo(0,this.selectedItem.position.y,this.selectedItem.position.z,!0),this.updateCameraControls(t)):e.key==="4"?(this.clearControls(),this.cameraControls=new _e(this.currentCamera,this.currentWindow.current),this.cameraControls.rotateTo(Math.PI,Math.PI/2,!0),this.cameraControls.moveTo(this.selectedItem.position.x,this.selectedItem.position.y,0,!0),this.updateCameraControls(t)):e.key==="5"&&(this.clearControls(),this.cameraControls=new _e(this.currentCamera,this.currentWindow.current),this.cameraControls.rotateTo(Ii(45),Ii(45),!0),this.updateCameraControls(t))}else if(this.currentTransform!==void 0)switch(e.key){case"r":this.currentTransform.setMode("rotate");break;case"s":this.currentTransform.setMode("scale");break;case"t":this.currentTransform.setMode("translate");break}}};onSetSelectedItem=e=>{this.selectedItem=this.currentScene.getObjectByProperty("uuid",e.value.uuid),this.selectedItem!==void 0&&(this.currentTransform!==void 0&&(this.currentTransform.removeEventListener("objectChange",this.onUpdateTransform),de.instance.remove(this.currentTransform.getHelper().name)),this.currentTransform=de.instance.add(e.value.name),this.currentTransform.attach(this.selectedItem),this.scene.add(this.currentTransform.getHelper()),this.currentTransform.addEventListener("objectChange",this.onUpdateTransform))};onUpdateTransform=()=>{this.selectedItem!==void 0&&(this.props.three.updateObject(this.selectedItem.uuid,"position",this.selectedItem.position),this.props.three.updateObject(this.selectedItem.uuid,"rotation",{x:this.selectedItem.rotation.x,y:this.selectedItem.rotation.y,z:this.selectedItem.rotation.z}),this.props.three.updateObject(this.selectedItem.uuid,"scale",this.selectedItem.scale),xe.instance.update())};clearLightHelpers=()=>{this.lightHelpers.forEach(e=>{this.helpersContainer.remove(e),e.dispose()}),this.lightHelpers.clear()};addLightHelpers=()=>{this.currentScene!==void 0&&this.currentScene.traverse(e=>{if(e.type.search("Light")>-1){let t;switch(e.type){case"DirectionalLight":t=new o.DirectionalLightHelper(e,100),t.name=`${e.name}Helper`,this.lightHelpers.set(e.name,t),this.helpersContainer.add(t);break;case"HemisphereLight":t=new o.HemisphereLightHelper(e,250),t.name=`${e.name}Helper`,this.lightHelpers.set(e.name,t),this.helpersContainer.add(t);break;case"RectAreaLight":t=new wn(e),t.name=`${e.name}Helper`,this.lightHelpers.set(e.name,t),this.helpersContainer.add(t);break;case"PointLight":t=new o.PointLightHelper(e,100),t.name=`${e.name}Helper`,this.lightHelpers.set(e.name,t),this.helpersContainer.add(t);break;case"SpotLight":t=new o.SpotLightHelper(e),t.name=`${e.name}Helper`,this.lightHelpers.set(e.name,t),this.helpersContainer.add(t);break}}})};createControls(e,t){const s=this.controls.get(e.name);if(s!==void 0&&s.dispose(),this.controls.delete(e.name),e.name==="UI")return;const n=new On(e,t);switch(n.enableDamping=!0,n.dampingFactor=.05,e.name){case"Top":case"Bottom":case"Left":case"Right":case"Front":case"Back":n.enableRotate=!1;break}this.controls.set(e.name,n)}clearCamera(e){const t=this.cameraHelpers.get(e.name);t!==void 0&&(this.scene.remove(t),t.dispose(),this.cameraHelpers.delete(e.name));const s=this.controls.get(e.name);s!==void 0&&(s.dispose(),this.controls.delete(e.name))}killControls(){this.controls.forEach((e,t)=>{e.dispose();const s=this.cameraHelpers.get(t);s!==void 0&&(this.scene.remove(s),s.dispose()),this.cameraHelpers.delete(t),this.controls.delete(t)}),this.controls.clear(),this.cameraHelpers.clear()}assignControls(){switch(this.state.mode){case"Single":this.createControls(this.tlCam,this.tlWindow.current);break;case"Side by Side":case"Stacked":this.createControls(this.tlCam,this.tlWindow.current),this.createControls(this.trCam,this.trWindow.current);break;case"Quad":this.createControls(this.tlCam,this.tlWindow.current),this.createControls(this.trCam,this.trWindow.current),this.createControls(this.blCam,this.blWindow.current),this.createControls(this.brCam,this.brWindow.current);break}}updateCamera=(e,t,s,n)=>{switch(this.state.mode){case"Quad":e<s?t<n?(this.currentCamera=this.tlCam,this.raycaster.setFromCamera(this.pointer,this.tlCam)):(this.currentCamera=this.blCam,this.raycaster.setFromCamera(this.pointer,this.blCam)):t<n?(this.currentCamera=this.trCam,this.raycaster.setFromCamera(this.pointer,this.trCam)):(this.currentCamera=this.brCam,this.raycaster.setFromCamera(this.pointer,this.brCam));break;case"Side by Side":e<s?(this.currentCamera=this.tlCam,this.raycaster.setFromCamera(this.pointer,this.tlCam)):(this.currentCamera=this.trCam,this.raycaster.setFromCamera(this.pointer,this.trCam));break;case"Single":this.currentCamera=this.tlCam,this.raycaster.setFromCamera(this.pointer,this.tlCam);break;case"Stacked":t<n?(this.currentCamera=this.tlCam,this.raycaster.setFromCamera(this.pointer,this.tlCam)):(this.currentCamera=this.trCam,this.raycaster.setFromCamera(this.pointer,this.trCam));break}this.currentCamera===this.tlCam?this.currentWindow=this.tlWindow:this.currentCamera===this.trCam?this.currentWindow=this.trWindow:this.currentCamera===this.blCam?this.currentWindow=this.blWindow:this.currentCamera===this.brCam&&(this.currentWindow=this.brWindow),de.instance.updateCamera(this.currentCamera,this.currentWindow.current)};updateCameraControls=(e,t=!1)=>{if(this.selectedItem===void 0)return;cancelAnimationFrame(this.rafID),this.rafID=-1,this.cameraControls&&(this.cameraControls.smoothTime=.1);const s=.15,n=new o.Clock;n.start(),this.selectedItem.getWorldPosition(e.target0);const a=()=>{const r=n.getDelta();this.cameraControls&&this.cameraControls.update(r),t&&(e.target.lerp(e.target0,s),e.object.position.lerp(e.position0,s),e.object.zoom=Dt(e.object.zoom,e.zoom0,s),e.object.updateProjectionMatrix(),e.dispatchEvent({type:"change"})),n.getElapsedTime()>=.5?(cancelAnimationFrame(this.rafID),this.rafID=-1,this.clearControls()):this.rafID=requestAnimationFrame(a)};a()};clearControls=()=>{this.cameraControls!==void 0&&(this.cameraControls.disconnect(),this.cameraControls.dispose(),this.cameraControls=void 0)};getSceneOverride(e){switch(e){case"Depth":return this.depthMaterial;case"Normals":return this.normalsMaterial;case"Renderer":return null;case"UVs":return this.uvMaterial;case"Wireframe":return this.wireframeMaterial}return null}drawSingle(){const e=this.getSceneOverride(this.tlRender);this.scene.overrideMaterial=e,this.renderer?.setViewport(0,0,this.width,this.height),this.renderer?.setScissor(0,0,this.width,this.height),this.renderer?.render(this.scene,this.tlCam)}drawDouble=()=>{const e=this.getSceneOverride(this.tlRender),t=this.getSceneOverride(this.trRender),s=Math.floor(this.width/2),n=Math.floor(this.height/2);if(this.scene.overrideMaterial=e,this.state.mode==="Side by Side")this.renderer?.setViewport(0,0,s,this.height),this.renderer?.setScissor(0,0,s,this.height),this.renderer?.render(this.scene,this.tlCam),this.scene.overrideMaterial=t,this.renderer?.setViewport(s,0,s,this.height),this.renderer?.setScissor(s,0,s,this.height),this.renderer?.render(this.scene,this.trCam);else{const a=this.height-n;this.renderer?.setViewport(0,a,this.width,n),this.renderer?.setScissor(0,a,this.width,n),this.renderer?.render(this.scene,this.tlCam),this.scene.overrideMaterial=t,this.renderer?.setViewport(0,0,this.width,n),this.renderer?.setScissor(0,0,this.width,n),this.renderer?.render(this.scene,this.trCam)}};drawQuad=()=>{const e=this.getSceneOverride(this.tlRender),t=this.getSceneOverride(this.trRender),s=this.getSceneOverride(this.blRender),n=this.getSceneOverride(this.brRender),a=Math.floor(this.width/2),r=Math.floor(this.height/2);let l=0,d=0;d=this.height-r,l=0,this.scene.overrideMaterial=e,this.renderer?.setViewport(l,d,a,r),this.renderer?.setScissor(l,d,a,r),this.renderer?.render(this.scene,this.tlCam),l=a,this.scene.overrideMaterial=t,this.renderer?.setViewport(l,d,a,r),this.renderer?.setScissor(l,d,a,r),this.renderer?.render(this.scene,this.trCam),d=0,l=0,this.scene.overrideMaterial=s,this.renderer?.setViewport(l,d,a,r),this.renderer?.setScissor(l,d,a,r),this.renderer?.render(this.scene,this.blCam),l=a,this.scene.overrideMaterial=n,this.renderer?.setViewport(l,d,a,r),this.renderer?.setScissor(l,d,a,r),this.renderer?.render(this.scene,this.brCam)};get appID(){return this.props.three.app.appID}get mode(){return this.state.mode}get three(){return this.props.three}}class xe extends w.Component{static instance;matrix=new o.Matrix4;position=new o.Vector3;rotation=new o.Euler;scale=new o.Vector3;open=!1;constructor(e){super(e),this.state={lastUpdated:0,expanded:!1},this.matrix.elements=e.object.matrix,e.object.uuid.length>0&&(this.position.setFromMatrixPosition(this.matrix),this.rotation.setFromRotationMatrix(this.matrix),this.scale.setFromMatrixScale(this.matrix)),xe.instance=this}update(){this.position.copy(ge.instance.selectedItem.position),this.rotation.copy(ge.instance.selectedItem.rotation),this.scale.copy(ge.instance.selectedItem.scale),this.setState({lastUpdated:Date.now()})}render(){return u.jsx(Ee,{title:"Transform",expanded:this.open,items:[{title:"Position",prop:"position",type:"grid3",step:.1,value:this.position,onChange:this.updateTransform},{title:"Rotation",prop:"rotation",type:"grid3",value:this.rotation,onChange:this.updateTransform},{title:"Scale",prop:"scale",type:"grid3",value:this.scale,onChange:this.updateTransform},{title:"Visible",prop:"visible",type:"boolean",value:xe.instance.props.object.visible,onChange:this.updateTransform}],onToggle:e=>{this.open=e}},this.state.lastUpdated)}updateTransform(e,t){const s=e==="rotation"?{x:t._x,y:t._y,z:t._z}:t;ge.instance?.three.updateObject(xe.instance.props.object.uuid,e,s);const n=ge.instance?.three.getScene(xe.instance.props.object.uuid);if(n){const a=n.getObjectByProperty("uuid",xe.instance.props.object.uuid);$(a,e,s)}}}function $i(i){switch(i){case"color":return"Color";case"intensity":return"Intensity";case"decay":return"Decay";case"distance":return"Distance";case"angle":return"Angle";case"penumbra":return"Penumbra";case"groundColor":return"Ground Color";case"width":return"Width";case"height":return"Height"}return i}function sr(i,e){const t=[];if(i.lightInfo!==void 0)for(const s in i.lightInfo){const n=i.lightInfo[s];n!==void 0&&(n.isColor!==void 0?t.push({title:$i(s),prop:s,type:"color",value:n,onChange:(a,r)=>{const l=new o.Color(r);e.updateObject(i.uuid,a,l);const d=e.getScene(i.uuid);if(d!==null){const h=d.getObjectByProperty("uuid",i.uuid);$(h,a,l)}}}):t.push({title:$i(s),prop:s,type:typeof n,value:n,step:typeof n=="number"?.01:void 0,onChange:(a,r)=>{e.updateObject(i.uuid,a,r);const l=e.getScene(i.uuid);if(l!==null){const d=l.getObjectByProperty("uuid",i.uuid);$(d,a,r)}}}))}return u.jsx(Ee,{title:"Light",items:t})}function nr(i,e){const t=[],s=[];let n=0;i.animations.forEach(r=>{n=Math.max(n,r.duration),r.duration>0&&s.push({title:r.name,items:[{title:"Duration",type:"number",value:r.duration,disabled:!0},{title:"Blend Mode",type:"option",disabled:!0,options:[{title:"Normal",value:2500},{title:"Additive",value:2501}]}]})}),t.push({title:"Animations",items:s});const a=e.getScene(i.uuid);if(a!==null){const r=a.getObjectByProperty("uuid",i.uuid);let l=!1;if(r!==void 0){const d=r.mixer;if(l=d!==void 0,l){const h=[{title:"Time Scale",type:"range",value:d.timeScale,step:.01,min:-1,max:2,onChange:(p,f)=>{d.timeScale=f,e.updateObject(i.uuid,"mixer.timeScale",f)}}];h.push({title:"Stop All",type:"button",onChange:()=>{d.stopAllAction(),e.requestMethod(i.uuid,"stopAllAction",void 0,"mixer")}}),t.push({title:"Mixer",items:h})}}}return u.jsx(Ee,{title:"Animation",items:t})}const cs={name:"",uuid:"",type:"",visible:!1,matrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],animations:[],material:void 0,perspectiveCameraInfo:void 0,orthographicCameraInfo:void 0,lightInfo:void 0,children:[]};let ae={...cs};function hs(i){const[e,t]=w.useState(-1);w.useEffect(()=>{function r(d){ae={...d.value},t(Date.now())}function l(){ae={...cs},t(Date.now())}return P.addEventListener(R.SET_SCENE,l),P.addEventListener(R.SET_OBJECT,r),()=>{P.removeEventListener(R.SET_SCENE,l),P.removeEventListener(R.SET_OBJECT,r)}},[]);const s=ae.type.toLowerCase(),n=ae.animations.length>0||ae.mixer!==void 0,a=s.search("mesh")>-1||s.search("line")>-1||s.search("points")>-1;return u.jsx(dt,{label:"Inspector",children:u.jsx("div",{id:"Inspector",className:i.class,children:ae.uuid.length>0&&u.jsxs(u.Fragment,{children:[u.jsxs(u.Fragment,{children:[u.jsx(Tt,{type:"string",title:"Name",prop:"name",value:ae.name,disabled:!0}),u.jsx(Tt,{type:"string",title:"Type",prop:"type",value:ae.type,disabled:!0}),u.jsx(Tt,{type:"string",title:"UUID",prop:"uuid",value:ae.uuid,disabled:!0})]}),u.jsxs(u.Fragment,{children:[u.jsx(xe,{object:ae}),n?nr(ae,i.three):null,s.search("camera")>-1?Sn(ae,i.three):null,s.search("light")>-1?sr(ae,i.three):null,a?En(ae,i.three):null]})]})},e)},"Inspector")}function ds(i){const[e]=w.useState([]),[t]=w.useState([]),[s,n]=w.useState(0),a=d=>{const h=d.value;e.push(h),t.push(u.jsx(dt,{label:`Scene: ${h.name}`,scene:h,open:!0,onRefresh:()=>{i.three.refreshScene(h.name)},children:u.jsx(ni,{child:h,scene:h,three:i.three})},Math.random())),n(Date.now())},r=d=>{const h=d.value;for(let p=0;p<e.length;p++)if(h.uuid===e[p].uuid){e[p]=h,t[p]=u.jsx(dt,{label:`Scene: ${h.name}`,scene:h,open:!0,onRefresh:()=>{i.three.refreshScene(h.name)},children:u.jsx(ni,{child:h,scene:h,three:i.three})},Math.random()),n(Date.now());return}},l=d=>{const h=d.value;for(let p=0;p<e.length;p++)if(h.uuid===e[p].uuid){e.splice(p,1),t.splice(p,1),n(Date.now());return}};return w.useEffect(()=>(P.addEventListener(R.ADD_SCENE,a),P.addEventListener(R.REFRESH_SCENE,r),P.addEventListener(R.REMOVE_SCENE,l),()=>{P.removeEventListener(R.ADD_SCENE,a),P.removeEventListener(R.REFRESH_SCENE,r),P.removeEventListener(R.REMOVE_SCENE,l)}),[]),u.jsxs("div",{id:"SidePanel",children:[u.jsx("div",{className:"scenes",children:t},s),u.jsx(hs,{three:i.three}),u.jsx(Ue,{three:i.three})]})}function rr(i){return w.useEffect(()=>{function e(l){let d=null;return i.three.scenes.forEach(h=>{l.search(h.uuid)>-1&&(d=h)}),d}const t=l=>{const d=l.value,p=e(d)?.getObjectByProperty("uuid",d);p!==void 0&&i.three.setObject(p)},s=(l,d,h)=>{const f=e(l)?.getObjectByProperty("uuid",l);f!==void 0&&$(f,d,h)},n=l=>{const d=l.value,{key:h,value:p,uuid:f}=d;s(f,h,p)},a=l=>{const d=l.value,p=e(d.uuid)?.getObjectByProperty("uuid",d.uuid);if(p!==void 0){const f=g=>{const y=d.key.split(".");switch(y.length){case 1:p[y[0]]=g;break;case 2:p[y[0]][y[1]]=g;break;case 3:p[y[0]][y[1]][y[2]]=g;break;case 4:p[y[0]][y[1]][y[2]][y[3]]=g;break;case 5:p[y[0]][y[1]][y[2]][y[3]][y[4]]=g;break}p.material.needsUpdate=!0};d.value.src.length>0?ts(d.value.src).then(g=>{g.offset.set(d.value.offset[0],d.value.offset[1]),g.repeat.set(d.value.repeat[0],d.value.repeat[1]),f(g)}):f(null)}},r=l=>{const{key:d,uuid:h,value:p,subitem:f}=l.value,y=e(h)?.getObjectByProperty("uuid",h);if(y!==void 0)try{f!==void 0?Xs(y,f)[d](p):y[d](p)}catch(x){console.log("Error requesting method:"),console.log(x),console.log(d),console.log(p)}};return P.addEventListener(R.GET_OBJECT,t),P.addEventListener(R.UPDATE_OBJECT,n),P.addEventListener(R.CREATE_TEXTURE,a),P.addEventListener(R.REQUEST_METHOD,r),()=>{P.removeEventListener(R.GET_OBJECT,t),P.removeEventListener(R.UPDATE_OBJECT,n),P.removeEventListener(R.CREATE_TEXTURE,a),P.removeEventListener(R.REQUEST_METHOD,r)}},[]),null}function us(i){return u.jsxs("div",{className:"editor",ref:i.ref,style:i.style,children:[u.jsx("div",{className:"header",children:i.header}),i.children,u.jsx("div",{className:"footer",children:i.footer})]})}function ar(i){return u.jsx(us,{children:u.jsxs(u.Fragment,{children:[u.jsx(ge,{three:i.three,scenes:i.scenes,onSceneResize:i.onSceneResize,onSceneSet:i.onSceneSet,onSceneUpdate:i.onSceneUpdate}),u.jsx(ds,{three:i.three})]})})}exports.Accordion=dt;exports.Application=Hs;exports.BaseRemote=At;exports.ChildObject=ci;exports.ContainerObject=ni;exports.Draggable=ss;exports.DraggableItem=is;exports.Dropdown=ns;exports.DropdownItem=rs;exports.Editor=us;exports.ExportTexture=ct;exports.Inspector=hs;exports.MultiView=ge;exports.NavButton=li;exports.RemoteComponents=Bs;exports.RemoteController=tn;exports.RemoteTheatre=oi;exports.RemoteThree=$s;exports.SceneInspector=rr;exports.SidePanel=ds;exports.ThreeEditor=ar;exports.ToolEvents=R;exports.capitalize=ht;exports.clamp=we;exports.colorToHex=ei;exports.copyToClipboard=Fs;exports.customizeTheatreElements=Ys;exports.debugDispatcher=P;exports.defaultTheatreCallback=js;exports.dispose=We;exports.disposeMaterial=es;exports.disposeTexture=Ns;exports.distance=zs;exports.hierarchyUUID=Rt;exports.isColor=Ji;exports.mix=Dt;exports.noop=ai;exports.normalize=Jt;exports.randomID=Ki;exports.resetThreeObjects=ii;exports.round=ti;exports.theatreEditorApp=Vs;
|