@tomorrowevening/hermes 0.0.42 → 0.0.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("three"),Yt=require("@theatre/studio"),wn=require("tweakpane"),On=require("@tweakpane/plugin-essentials"),R=require("react"),tn=require("framer-motion");function Mn(t){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const a in t)if(a!=="default"){const e=Object.getOwnPropertyDescriptor(t,a);Object.defineProperty(n,a,e.get?e:{enumerable:!0,get:()=>t[a]})}}return n.default=t,Object.freeze(n)}const Tn=Mn(On),Nt=()=>{},Rn=()=>{};function Ye(t){return t.substring(0,1).toUpperCase()+t.substring(1)}function _n(t,n,a){return Math.min(n,Math.max(t,a))}function An(t,n){const a=t-n;return Math.sqrt(a*a)}function nn(){return Math.round(Math.random()*1e6).toString()}function an(t){return t.r!==void 0&&t.g!==void 0&&t.b!==void 0}function rn(t){const n=Math.round(t.r*255),a=Math.round(t.g*255),e=Math.round(t.b*255),o=d=>{const h=d.toString(16);return h.length===1?"0"+h:h},l=o(n),m=o(a),s=o(e);return"#"+l+m+s}function yt(t,n=1){return Number(t.toFixed(n))}exports.totalThreeObjects=0;const on=()=>{exports.totalThreeObjects=0},Lt=t=>{if(!t)return;let n=t.name.replace(" ","");n.length===0&&(n=`obj_${exports.totalThreeObjects}`,exports.totalThreeObjects++),t.parent!==null&&(n=`${t.parent.uuid}.${n}`),t.uuid=n,t.children.forEach(a=>{Lt(a)})},Pn=t=>{t?.dispose()},sn=t=>{t&&(Array.isArray(t)?t.forEach(n=>n.dispose()):t.dispose())},Ft=t=>{if(t){for(;t.children.length>0;){const n=t.children[0];n instanceof c.PositionalAudio?(n.pause(),n.parent&&n.parent.remove(n)):Ft(n)}if(t.parent&&t.parent.remove(t),t.isMesh){const n=t;n.geometry?.dispose(),sn(n.material)}t.dispose!==void 0&&t.dispose()}};class kn{components=new Map;listen;_debugEnabled;_broadcastChannel=void 0;_webSocket=void 0;_mode="app";_connected=!1;_useBC=!1;constructor(n,a,e=!0){this._debugEnabled=a,a&&(this._useBC=e,e?(this._broadcastChannel=new BroadcastChannel(n),this._broadcastChannel.addEventListener("message",this.messageHandler)):(this._webSocket=new WebSocket(n),this._webSocket.addEventListener("open",this.openHandler),this._webSocket.addEventListener("close",this.closeHandler),this._webSocket.addEventListener("message",this.messageHandler)))}init(){return new Promise(n=>{n()})}addComponent(n,a){this.components.set(n,a)}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(n=>{n.dispose()}),this.components.clear()}send(n){this._mode!==n.target&&(this._useBC?this._broadcastChannel?.postMessage(n):this._connected&&this._webSocket?.send(JSON.stringify(n)))}messageHandler=n=>{this.listen!==void 0&&(this._useBC?this.listen(n.data):this.listen(JSON.parse(n.data)))};openHandler=()=>{this._connected=!0};closeHandler=()=>{this._connected=!1};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(n){n&&(this._mode="editor")}}const D=new c.EventDispatcher,I={CUSTOM:"ToolEvents::custom",SELECT_DROPDOWN:"ToolEvents::selectDropdown",DRAG_UPDATE:"ToolEvents::dragUpdate",SET_SCENE:"ToolEvents::setScene",GET_OBJECT:"ToolEvents::getObject",SET_OBJECT:"ToolEvents::setObject",UPDATE_OBJECT:"ToolEvents::updateObject",CREATE_TEXTURE:"ToolEvents::createTexture",REQUEST_METHOD:"ToolEvents::requestMethod",ADD_CAMERA:"ToolEvents::addCamera",REMOVE_CAMERA:"ToolEvents::removeCamera"};class at{app;constructor(n){this.app=n}dispose(){}handleApp(n){}handleEditor(n){}}class jn extends at{selectDropdown(n,a){this.app.send({event:"selectComponent",target:"app",data:{dropdown:n,value:a}})}updateDropdown(n,a){this.app.send({event:"draggableListUpdate",target:"app",data:{dropdown:n,value:a}})}handleApp(n){switch(n.event){case"selectComponent":D.dispatchEvent({type:I.SELECT_DROPDOWN,value:n.data});break;case"draggableListUpdate":D.dispatchEvent({type:I.DRAG_UPDATE,value:n.data});break}}}class cn extends at{project;sheets=new Map;sheetObjects=new Map;sheetObjectCBs=new Map;sheetObjectUnsubscribe=new Map;activeSheet;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}sheet(n){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}let a=this.sheets.get(n);return a!==void 0||(a=this.project?.sheet(n),this.sheets.set(n,a)),a}playSheet(n,a){this.sheet(n)?.sequence.play(a),this.app.send({event:"playSheet",target:"editor",data:{sheet:n,value:a}})}pauseSheet(n){this.sheet(n)?.sequence.pause(),this.app.send({event:"pauseSheet",target:"editor",data:{sheet:n}})}clearSheetObjects(n){this.sheetObjects.forEach((a,e)=>{e.search(`${n}_`)>-1&&this.unsubscribe(a)})}sheetObject(n,a,e,o){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const l=this.sheet(n);if(l===void 0)return;const m=`${n}_${a}`;let s=this.sheetObjects.get(m);s!==void 0?s=l.object(a,{...e,...s.value},{reconfigure:!0}):s=l.object(a,e),this.sheetObjects.set(m,s),this.sheetObjectCBs.set(m,o!==void 0?o:Nt);const d=s.onValuesChange(h=>{if(this.app.editor){for(const y in h){const S=h[y];typeof S=="object"&&an(S)&&(h[y]={r:S.r,g:S.g,b:S.b,a:S.a})}this.app.send({event:"updateSheetObject",target:"app",data:{sheet:n,sheetObject:m,values:h}})}const g=this.sheetObjectCBs.get(m);g!==void 0&&g(h)});return this.sheetObjectUnsubscribe.set(m,d),s}unsubscribe(n){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const a=n.address.sheetId,e=n.address.objectKey;this.sheets.get(a)?.detachObject(e);const l=`${a}_${e}`,m=this.sheetObjectUnsubscribe.get(l);m!==void 0&&(this.sheetObjects.delete(l),this.sheetObjectCBs.delete(l),this.sheetObjectUnsubscribe.delete(l),m())}handleApp(n){let a;switch(n.event){case"setSheet":a=this.sheets.get(n.data.sheet),a!==void 0&&(this.activeSheet=a,Yt.setSelection([a]));break;case"setSheetObject":a=this.sheetObjects.get(`${n.data.sheet}_${n.data.key}`),a!==void 0&&Yt.setSelection([a]);break;case"updateSheetObject":a=this.sheets.get(n.data.sheet),a!==void 0&&a.sequence.pause(),a=this.sheetObjectCBs.get(n.data.sheetObject),a!==void 0&&a(n.data.values);break;case"updateTimeline":a=this.sheets.get(n.data.sheet),this.activeSheet!==void 0&&(this.activeSheet.sequence.position=n.data.position);break}}handleEditor(n){if(this.app.editor)switch(n.event){case"playSheet":this.sheet(n.data.sheet)?.sequence.play(n.data.value);break;case"pauseSheet":this.sheet(n.data.sheet)?.sequence.pause();break}}}function Dn(t,n,a){if(t.editor){a.ui.restore(),a.onSelectionChange(m=>{m.length<1||m.forEach(s=>{let d=s.address.sheetId,h="setSheet",g={};switch(s.type){case"Theatre_Sheet_PublicAPI":h="setSheet",g={sheet:s.address.sheetId},n.activeSheet=n.sheets.get(s.address.sheetId);break;case"Theatre_SheetObject_PublicAPI":h="setSheetObject",d+=`_${s.address.objectKey}`,g={id:d,sheet:s.address.sheetId,key:s.address.objectKey},n.activeSheet=n.sheets.get(s.address.sheetId);break}t.send({event:h,target:"app",data:g})})});let e=-1;const o=()=>{if(cn.rafDriver?.tick(performance.now()),n.activeSheet!==void 0&&e!==n.activeSheet.sequence.position){e=n.activeSheet.sequence.position;const m=n.activeSheet;t.send({event:"updateTimeline",target:"app",data:{position:e,sheet:m.address.sheetId}})}},l=()=>{o(),requestAnimationFrame(l)};o(),l()}else a.ui.hide()}function In(t){if(t.name==="cameras")return"camera";if(t.name==="interactive")return"interactive";if(t.name==="lights")return"light";if(t.name==="ui")return"ui";if(t.name==="utils")return"utils";const n=t.type;return n.search("Helper")>-1?"icon_utils":n.search("Camera")>-1?"camera":n.search("Light")>-1?"light":"obj3D"}function ln(t){const n={name:t.name,type:t.type,uuid:t.uuid,children:[]};return t.children.forEach(a=>{n.children.push(ln(a))}),n}function Nn(t){const n={};for(const a in t){const e=t[a].value;n[a]={value:e},e===null?n[a].value={src:""}:e.isTexture&&(n[a].value={src:e.image.src})}return n}function Ln(t){switch(t){case"blendSrcAlpha":case"blendDstAlpha":case"blendEquationAlpha":case"clippingPlanes":case"shadowSide":case"precision":return!0}return!1}function Ve(t){const n={};for(const a in t){if(a.substring(0,1)==="_"||a.substring(0,2)==="is"||Ln(a))continue;const e=typeof t[a],o=t[a];switch(e){case"boolean":case"number":case"string":n[a]=o;break;case"object":if(o!==null)if(n[a]=o,o.isTexture)if(o instanceof c.Texture){const l=o.source.toJSON();n[a]={src:l.url}}else o instanceof c.CubeTexture&&(console.log("env map"),console.log(o.source.data),console.log(o.source.toJSON()),n[a]={src:""});else a==="uniforms"&&(n[a]=Nn(n[a]));else n[a]={src:""};break}}return n}function Pt(t){t.updateMatrix();const n={name:t.name,type:t.type,uuid:t.uuid,visible:t.visible,matrix:t.matrix.elements,animations:[],material:void 0,perspectiveCameraInfo:void 0,orthographicCameraInfo:void 0,lightInfo:void 0};t.animations.forEach(e=>{n.animations.push({name:e.name,duration:e.duration,blendMode:e.blendMode})});const a=t.type.toLowerCase();if(a.search("mesh")>-1){const e=t;if(Array.isArray(e.material)){const o=[];e.material.forEach(l=>{o.push(Ve(l))}),n.material=o}else n.material=Ve(e.material)}else if(a.search("points")>-1){const e=t;if(Array.isArray(e.material)){const o=[];e.material.forEach(l=>{o.push(Ve(l))}),n.material=o}else n.material=Ve(e.material)}else if(a.search("line")>-1){const e=t;if(Array.isArray(e.material)){const o=[];e.material.forEach(l=>{o.push(Ve(l))}),n.material=o}else n.material=Ve(e.material)}else a.search("camera")>-1?t.type==="PerspectiveCamera"?n.perspectiveCameraInfo={fov:t.fov,zoom:t.zoom,near:t.near,far:t.far,focus:t.focus,aspect:t.aspect,filmGauge:t.filmGauge,filmOffset:t.filmOffset}:t.type==="OrthographicCamera"&&(n.orthographicCameraInfo={zoom:t.zoom,near:t.near,far:t.far,left:t.left,right:t.right,top:t.top,bottom:t.bottom}):a.search("light")>-1&&(n.lightInfo={color:t.color,intensity:t.intensity,decay:t.decay,distance:t.distance,angle:t.angle,penumbra:t.penumbra,groundColor:t.groundColor});return n}function Fn(t,n){const a=n.split(".");switch(a.length){case 1:return t[a[0]];case 2:return t[a[0]][a[1]];case 3:return t[a[0]][a[1]][a[2]];case 4:return t[a[0]][a[1]][a[2]][a[3]];case 5:return t[a[0]][a[1]][a[2]][a[3]][a[4]];case 6:return t[a[0]][a[1]][a[2]][a[3]][a[4]][a[5]]}}function te(t,n,a){const e=n.split(".");switch(e.length){case 1:t[e[0]]=a;break;case 2:t[e[0]][e[1]]=a;break;case 3:t[e[0]][e[1]][e[2]]=a;break;case 4:t[e[0]][e[1]][e[2]][e[3]]=a;break;case 5:t[e[0]][e[1]][e[2]][e[3]][e[4]]=a;break}}function Dt(t){return new Promise((n,a)=>{const e=new Image;e.onload=()=>{const o=new c.Texture(e);o.wrapS=c.RepeatWrapping,o.wrapT=c.RepeatWrapping,o.needsUpdate=!0,n(o)},e.onerror=a,e.src=t})}class Un extends at{scene=void 0;getObject(n){this.app.debugEnabled&&this.app.send({event:"getObject",target:"app",data:n})}setObject(n){const a=Pt(n);this.app.send({event:"setObject",target:"editor",data:a})}requestMethod(n,a,e,o){this.app.send({event:"requestMethod",target:"app",data:{uuid:n,key:a,value:e,subitem:o}})}updateObject(n,a,e){this.app.send({event:"updateObject",target:"app",data:{uuid:n,key:a,value:e}})}createTexture(n,a,e){this.app.send({event:"createTexture",target:"app",data:{uuid:n,key:a,value:e}})}setScene(n){if(n===void 0||(this.scene=n,!this.app.debugEnabled))return;on(),Lt(this.scene);const a=ln(this.scene);this.app.send({event:"setScene",target:"editor",data:a})}addCamera(n){if(!this.app.debugEnabled)return;const a=Pt(n);this.app.send({event:"addCamera",target:"editor",data:a})}removeCamera(n){if(!this.app.debugEnabled)return;const a=Pt(n);this.app.send({event:"removeCamera",target:"editor",data:a})}handleApp(n){switch(n.event){case"getObject":D.dispatchEvent({type:I.GET_OBJECT,value:n.data});break;case"updateObject":D.dispatchEvent({type:I.UPDATE_OBJECT,value:n.data});break;case"createTexture":D.dispatchEvent({type:I.CREATE_TEXTURE,value:n.data});break;case"requestMethod":D.dispatchEvent({type:I.REQUEST_METHOD,value:n.data});break}}handleEditor(n){switch(n.event){case"setObject":D.dispatchEvent({type:I.SET_OBJECT,value:n.data});break;case"setScene":D.dispatchEvent({type:I.SET_SCENE,value:n.data});break;case"addCamera":D.dispatchEvent({type:I.ADD_CAMERA,value:n.data});break;case"removeCamera":D.dispatchEvent({type:I.REMOVE_CAMERA,value:n.data});break}}}class Bn extends at{bindCBs;buttonCBs;pane=void 0;appCallbacks=0;editorCallbacks=0;inspectorFolder=void 0;constructor(n){super(n),this.bindCBs=new Map,this.buttonCBs=new Map,n.editor&&this.createGUI()}createGUI(){this.pane=new wn.Pane({title:"GUI"}),this.pane.registerPlugin(Tn)}dispose(){this.bindCBs.clear(),this.buttonCBs.clear(),this.appCallbacks=0,this.editorCallbacks=0,this.app.editor&&(this.pane?.dispose(),this.pane=void 0)}addFolder(n,a=void 0,e=void 0){if(this.app.editor)return this.pane===void 0&&this.createGUI(),(e!==void 0?e:this.pane).addFolder({title:n,...a});this.app.send({event:"addFolder",target:"app",data:{name:n,params:a,parent:e}})}get bindID(){return`debug_${Math.max(this.appCallbacks,this.editorCallbacks)}`}bind(n,a,e,o=void 0){const l=this.bindID,m=e.onChange!==void 0?e.onChange:Nt;this.bindCBs.set(l,m),this.app.editor?(this.pane===void 0&&this.createGUI(),(o!==void 0?o:this.pane).addBinding(n,a,e).on("change",d=>{this.app.send({event:"updateBind",target:"app",data:{id:l,value:d.value}})}),this.editorCallbacks++):(this.app.send({event:"bindObject",target:"app",data:{id:l,name:a,params:e,parent:o}}),this.appCallbacks++)}triggerBind(n,a){const e=this.bindCBs.get(n);e!==void 0?e(a):console.warn(`No callback for: ${n}`,a)}button(n,a,e=void 0){const o=this.bindID;this.buttonCBs.set(o,a),this.app.editor?(this.pane===void 0&&this.createGUI(),(e!==void 0?e:this.pane).addButton({title:n}).on("click",()=>{this.app.send({event:"clickButton",target:"app",data:{id:o}})}),this.editorCallbacks++):(this.app.send({event:"addButton",target:"app",data:{id:o,name:n,callback:a,parent:e}}),this.appCallbacks++)}triggerButton(n){const a=this.buttonCBs.get(n);a!==void 0&&a()}createInspector(){this.inspectorFolder=this.addFolder("Inspector",this.pane)}clearInspector(){const n=this.inspectorFolder.children.length-1;for(let a=n;a>-1;--a)this.inspectorFolder.remove(this.inspectorFolder.children[a])}handleApp(n){switch(n.event){case"addFolder":this.addFolder(n.data.name,n.data.params,n.data.parent);break;case"bindObject":this.bind(n.data.name,n.data.params,n.data.parent);break;case"updateBind":this.triggerBind(n.data.id,n.data.value);break;case"addButton":this.button(n.data.name,n.data.callback,n.data.parent);break;case"clickButton":this.triggerButton(n.data.id);break}}}var It={exports:{}},Je={};/**
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("three"),Nt=require("@theatre/studio"),fn=require("tweakpane"),pn=require("@tweakpane/plugin-essentials"),C=require("react"),Wt=require("framer-motion");function hn(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const a in e)if(a!=="default"){const t=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(n,a,t.get?t:{enumerable:!0,get:()=>e[a]})}}return n.default=e,Object.freeze(n)}const mn=hn(pn),_t=()=>{},vn=()=>{};function Ke(e){return e.substring(0,1).toUpperCase()+e.substring(1)}function gn(e,n,a){return Math.min(n,Math.max(e,a))}function bn(e,n){const a=e-n;return Math.sqrt(a*a)}function $t(){return Math.round(Math.random()*1e6).toString()}function qt(e){return e.r!==void 0&&e.g!==void 0&&e.b!==void 0}function Kt(e){const n=Math.round(e.r*255),a=Math.round(e.g*255),t=Math.round(e.b*255),r=d=>{const f=d.toString(16);return f.length===1?"0"+f:f},l=r(n),m=r(a),s=r(t);return"#"+l+m+s}function vt(e,n=1){return Number(e.toFixed(n))}exports.totalThreeObjects=0;const Xt=()=>{exports.totalThreeObjects=0},At=e=>{if(!e)return;let n=e.name.replace(" ","");n.length===0&&(n=`obj_${exports.totalThreeObjects}`,exports.totalThreeObjects++),e.parent!==null&&(n=`${e.parent.uuid}.${n}`),e.uuid=n,e.children.forEach(a=>{At(a)})},yn=e=>{e?.dispose()},Zt=e=>{e&&(Array.isArray(e)?e.forEach(n=>n.dispose()):e.dispose())},Pt=e=>{if(e){for(;e.children.length>0;){const n=e.children[0];n instanceof c.PositionalAudio?(n.pause(),n.parent&&n.parent.remove(n)):Pt(n)}if(e.parent&&e.parent.remove(e),e.isMesh){const n=e;n.geometry?.dispose(),Zt(n.material)}e.dispose!==void 0&&e.dispose()}};class En{components=new Map;listen;_debugEnabled;_broadcastChannel=void 0;_webSocket=void 0;_mode="app";_connected=!1;_useBC=!1;constructor(n,a,t=!0){this._debugEnabled=a,a&&(this._useBC=t,t?(this._broadcastChannel=new BroadcastChannel(n),this._broadcastChannel.addEventListener("message",this.messageHandler)):(this._webSocket=new WebSocket(n),this._webSocket.addEventListener("open",this.openHandler),this._webSocket.addEventListener("close",this.closeHandler),this._webSocket.addEventListener("message",this.messageHandler)))}addComponent(n,a){this.components.set(n,a)}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(n=>{n.dispose()}),this.components.clear()}send(n){this._mode!==n.target&&(this._useBC?this._broadcastChannel?.postMessage(n):this._connected&&this._webSocket?.send(JSON.stringify(n)))}messageHandler=n=>{this.listen!==void 0&&(this._useBC?this.listen(n.data):this.listen(JSON.parse(n.data)))};openHandler=()=>{this._connected=!0};closeHandler=()=>{this._connected=!1};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(n){n&&(this._mode="editor")}}const j=new c.EventDispatcher,D={CUSTOM:"ToolEvents::custom",SELECT_DROPDOWN:"ToolEvents::selectDropdown",DRAG_UPDATE:"ToolEvents::dragUpdate",SET_SCENE:"ToolEvents::setScene",GET_OBJECT:"ToolEvents::getObject",SET_OBJECT:"ToolEvents::setObject",UPDATE_OBJECT:"ToolEvents::updateObject",CREATE_TEXTURE:"ToolEvents::createTexture",REQUEST_METHOD:"ToolEvents::requestMethod",ADD_CAMERA:"ToolEvents::addCamera",REMOVE_CAMERA:"ToolEvents::removeCamera"};class rt{app;constructor(n){this.app=n}dispose(){}}class Sn extends rt{selectDropdown(n,a){this.app.send({event:"selectComponent",target:"app",data:{dropdown:n,value:a}})}updateDropdown(n,a){this.app.send({event:"draggableListUpdate",target:"app",data:{dropdown:n,value:a}})}}function Cn(e,n,a){switch(a.event){case"selectComponent":j.dispatchEvent({type:D.SELECT_DROPDOWN,value:a.data});break;case"draggableListUpdate":j.dispatchEvent({type:D.DRAG_UPDATE,value:a.data});break}}function xn(e,n,a){let t;switch(a.event){case"setSheet":t=n.sheets.get(a.data.sheet),t!==void 0&&(n.activeSheet=t,Nt.setSelection([t]));break;case"setSheetObject":t=n.sheetObjects.get(`${a.data.sheet}_${a.data.key}`),t!==void 0&&Nt.setSelection([t]);break;case"updateSheetObject":t=n.sheets.get(a.data.sheet),t!==void 0&&t.sequence.pause(),t=n.sheetObjectCBs.get(a.data.sheetObject),t!==void 0&&t(a.data.values);break;case"updateTimeline":t=n.sheets.get(a.data.sheet),n.activeSheet!==void 0&&(n.activeSheet.sequence.position=a.data.position);break}}function wn(e,n,a){if(e.editor)switch(a.event){case"playSheet":n.sheet(a.data.sheet)?.sequence.play(a.data.value);break;case"pauseSheet":n.sheet(a.data.sheet)?.sequence.pause();break}}function On(e,n,a){switch(a.event){case"getObject":j.dispatchEvent({type:D.GET_OBJECT,value:a.data});break;case"updateObject":j.dispatchEvent({type:D.UPDATE_OBJECT,value:a.data});break;case"createTexture":j.dispatchEvent({type:D.CREATE_TEXTURE,value:a.data});break;case"requestMethod":j.dispatchEvent({type:D.REQUEST_METHOD,value:a.data});break}}function Mn(e,n,a){switch(a.event){case"setObject":j.dispatchEvent({type:D.SET_OBJECT,value:a.data});break;case"setScene":j.dispatchEvent({type:D.SET_SCENE,value:a.data});break;case"addCamera":j.dispatchEvent({type:D.ADD_CAMERA,value:a.data});break;case"removeCamera":j.dispatchEvent({type:D.REMOVE_CAMERA,value:a.data});break}}function Tn(e,n,a){switch(a.event){case"addFolder":n.addFolder(a.data.name,a.data.params,a.data.parent);break;case"bindObject":n.bind(a.data.name,a.data.params,a.data.parent);break;case"updateBind":n.triggerBind(a.data.id,a.data.value);break;case"addButton":n.button(a.data.name,a.data.callback,a.data.parent);break;case"clickButton":n.triggerButton(a.data.id);break}}class Jt extends rt{project;sheets=new Map;sheetObjects=new Map;sheetObjectCBs=new Map;sheetObjectUnsubscribe=new Map;activeSheet;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}sheet(n){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}let a=this.sheets.get(n);return a!==void 0||(a=this.project?.sheet(n),this.sheets.set(n,a)),a}playSheet(n,a){this.sheet(n)?.sequence.play(a),this.app.send({event:"playSheet",target:"editor",data:{sheet:n,value:a}})}pauseSheet(n){this.sheet(n)?.sequence.pause(),this.app.send({event:"pauseSheet",target:"editor",data:{sheet:n}})}clearSheetObjects(n){this.sheetObjects.forEach((a,t)=>{t.search(`${n}_`)>-1&&this.unsubscribe(a)})}sheetObject(n,a,t,r){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const l=this.sheet(n);if(l===void 0)return;const m=`${n}_${a}`;let s=this.sheetObjects.get(m);s!==void 0?s=l.object(a,{...t,...s.value},{reconfigure:!0}):s=l.object(a,t),this.sheetObjects.set(m,s),this.sheetObjectCBs.set(m,r!==void 0?r:_t);const d=s.onValuesChange(f=>{if(this.app.editor){for(const y in f){const S=f[y];typeof S=="object"&&qt(S)&&(f[y]={r:S.r,g:S.g,b:S.b,a:S.a})}this.app.send({event:"updateSheetObject",target:"app",data:{sheet:n,sheetObject:m,values:f}})}const g=this.sheetObjectCBs.get(m);g!==void 0&&g(f)});return this.sheetObjectUnsubscribe.set(m,d),s}unsubscribe(n){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const a=n.address.sheetId,t=n.address.objectKey;this.sheets.get(a)?.detachObject(t);const l=`${a}_${t}`,m=this.sheetObjectUnsubscribe.get(l);m!==void 0&&(this.sheetObjects.delete(l),this.sheetObjectCBs.delete(l),this.sheetObjectUnsubscribe.delete(l),m())}}function Rn(e,n,a){if(e.editor){a.ui.restore(),a.onSelectionChange(m=>{m.length<1||m.forEach(s=>{let d=s.address.sheetId,f="setSheet",g={};switch(s.type){case"Theatre_Sheet_PublicAPI":f="setSheet",g={sheet:s.address.sheetId},n.activeSheet=n.sheets.get(s.address.sheetId);break;case"Theatre_SheetObject_PublicAPI":f="setSheetObject",d+=`_${s.address.objectKey}`,g={id:d,sheet:s.address.sheetId,key:s.address.objectKey},n.activeSheet=n.sheets.get(s.address.sheetId);break}e.send({event:f,target:"app",data:g})})});let t=-1;const r=()=>{if(Jt.rafDriver?.tick(performance.now()),n.activeSheet!==void 0&&t!==n.activeSheet.sequence.position){t=n.activeSheet.sequence.position;const m=n.activeSheet;e.send({event:"updateTimeline",target:"app",data:{position:t,sheet:m.address.sheetId}})}},l=()=>{r(),requestAnimationFrame(l)};r(),l()}else a.ui.hide()}function _n(e){if(e.name==="cameras")return"camera";if(e.name==="interactive")return"interactive";if(e.name==="lights")return"light";if(e.name==="ui")return"ui";if(e.name==="utils")return"utils";const n=e.type;return n.search("Helper")>-1?"icon_utils":n.search("Camera")>-1?"camera":n.search("Light")>-1?"light":"obj3D"}function Qt(e){const n={name:e.name,type:e.type,uuid:e.uuid,children:[]};return e.children.forEach(a=>{n.children.push(Qt(a))}),n}function An(e){const n={};for(const a in e){const t=e[a].value;n[a]={value:t},t===null?n[a].value={src:""}:t.isTexture&&(n[a].value={src:t.image.src})}return n}function Pn(e){switch(e){case"blendSrcAlpha":case"blendDstAlpha":case"blendEquationAlpha":case"clippingPlanes":case"shadowSide":case"precision":return!0}return!1}function We(e){const n={};for(const a in e){if(a.substring(0,1)==="_"||a.substring(0,2)==="is"||Pn(a))continue;const t=typeof e[a],r=e[a];switch(t){case"boolean":case"number":case"string":n[a]=r;break;case"object":if(r!==null)if(n[a]=r,r.isTexture)if(r instanceof c.Texture){const l=r.source.toJSON();n[a]={src:l.url}}else r instanceof c.CubeTexture&&(console.log("env map"),console.log(r.source.data),console.log(r.source.toJSON()),n[a]={src:""});else a==="uniforms"&&(n[a]=An(n[a]));else n[a]={src:""};break}}return n}function wt(e){e.updateMatrix();const n={name:e.name,type:e.type,uuid:e.uuid,visible:e.visible,matrix:e.matrix.elements,animations:[],material:void 0,perspectiveCameraInfo:void 0,orthographicCameraInfo:void 0,lightInfo:void 0};e.animations.forEach(t=>{n.animations.push({name:t.name,duration:t.duration,blendMode:t.blendMode})});const a=e.type.toLowerCase();if(a.search("mesh")>-1){const t=e;if(Array.isArray(t.material)){const r=[];t.material.forEach(l=>{r.push(We(l))}),n.material=r}else n.material=We(t.material)}else if(a.search("points")>-1){const t=e;if(Array.isArray(t.material)){const r=[];t.material.forEach(l=>{r.push(We(l))}),n.material=r}else n.material=We(t.material)}else if(a.search("line")>-1){const t=e;if(Array.isArray(t.material)){const r=[];t.material.forEach(l=>{r.push(We(l))}),n.material=r}else n.material=We(t.material)}else a.search("camera")>-1?e.type==="PerspectiveCamera"?n.perspectiveCameraInfo={fov:e.fov,zoom:e.zoom,near:e.near,far:e.far,focus:e.focus,aspect:e.aspect,filmGauge:e.filmGauge,filmOffset:e.filmOffset}:e.type==="OrthographicCamera"&&(n.orthographicCameraInfo={zoom:e.zoom,near:e.near,far:e.far,left:e.left,right:e.right,top:e.top,bottom:e.bottom}):a.search("light")>-1&&(n.lightInfo={color:e.color,intensity:e.intensity,decay:e.decay,distance:e.distance,angle:e.angle,penumbra:e.penumbra,groundColor:e.groundColor});return n}function kn(e,n){const a=n.split(".");switch(a.length){case 1:return e[a[0]];case 2:return e[a[0]][a[1]];case 3:return e[a[0]][a[1]][a[2]];case 4:return e[a[0]][a[1]][a[2]][a[3]];case 5:return e[a[0]][a[1]][a[2]][a[3]][a[4]];case 6:return e[a[0]][a[1]][a[2]][a[3]][a[4]][a[5]]}}function te(e,n,a){const t=n.split(".");switch(t.length){case 1:e[t[0]]=a;break;case 2:e[t[0]][t[1]]=a;break;case 3:e[t[0]][t[1]][t[2]]=a;break;case 4:e[t[0]][t[1]][t[2]][t[3]]=a;break;case 5:e[t[0]][t[1]][t[2]][t[3]][t[4]]=a;break}}function Tt(e){return new Promise((n,a)=>{const t=new Image;t.onload=()=>{const r=new c.Texture(t);r.wrapS=c.RepeatWrapping,r.wrapT=c.RepeatWrapping,r.needsUpdate=!0,n(r)},t.onerror=a,t.src=e})}class jn extends rt{scene=void 0;getObject(n){this.app.debugEnabled&&this.app.send({event:"getObject",target:"app",data:n})}setObject(n){const a=wt(n);this.app.send({event:"setObject",target:"editor",data:a})}requestMethod(n,a,t,r){this.app.send({event:"requestMethod",target:"app",data:{uuid:n,key:a,value:t,subitem:r}})}updateObject(n,a,t){this.app.send({event:"updateObject",target:"app",data:{uuid:n,key:a,value:t}})}createTexture(n,a,t){this.app.send({event:"createTexture",target:"app",data:{uuid:n,key:a,value:t}})}setScene(n){if(n===void 0||(this.scene=n,!this.app.debugEnabled))return;Xt(),At(this.scene);const a=Qt(this.scene);this.app.send({event:"setScene",target:"editor",data:a})}addCamera(n){if(!this.app.debugEnabled)return;const a=wt(n);this.app.send({event:"addCamera",target:"editor",data:a})}removeCamera(n){if(!this.app.debugEnabled)return;const a=wt(n);this.app.send({event:"removeCamera",target:"editor",data:a})}}class Dn extends rt{bindCBs;buttonCBs;pane=void 0;appCallbacks=0;editorCallbacks=0;inspectorFolder=void 0;constructor(n){super(n),this.bindCBs=new Map,this.buttonCBs=new Map,n.editor&&this.createGUI()}createGUI(){this.pane=new fn.Pane({title:"GUI"}),this.pane.registerPlugin(mn)}dispose(){this.bindCBs.clear(),this.buttonCBs.clear(),this.appCallbacks=0,this.editorCallbacks=0,this.app.editor&&(this.pane?.dispose(),this.pane=void 0)}addFolder(n,a=void 0,t=void 0){if(this.app.editor)return this.pane===void 0&&this.createGUI(),(t!==void 0?t:this.pane).addFolder({title:n,...a});this.app.send({event:"addFolder",target:"app",data:{name:n,params:a,parent:t}})}get bindID(){return`debug_${Math.max(this.appCallbacks,this.editorCallbacks)}`}bind(n,a,t,r=void 0){const l=this.bindID,m=t.onChange!==void 0?t.onChange:_t;this.bindCBs.set(l,m),this.app.editor?(this.pane===void 0&&this.createGUI(),(r!==void 0?r:this.pane).addBinding(n,a,t).on("change",d=>{this.app.send({event:"updateBind",target:"app",data:{id:l,value:d.value}})}),this.editorCallbacks++):(this.app.send({event:"bindObject",target:"app",data:{id:l,name:a,params:t,parent:r}}),this.appCallbacks++)}triggerBind(n,a){const t=this.bindCBs.get(n);t!==void 0?t(a):console.warn(`No callback for: ${n}`,a)}button(n,a,t=void 0){const r=this.bindID;this.buttonCBs.set(r,a),this.app.editor?(this.pane===void 0&&this.createGUI(),(t!==void 0?t:this.pane).addButton({title:n}).on("click",()=>{this.app.send({event:"clickButton",target:"app",data:{id:r}})}),this.editorCallbacks++):(this.app.send({event:"addButton",target:"app",data:{id:r,name:n,callback:a,parent:t}}),this.appCallbacks++)}triggerButton(n){const a=this.buttonCBs.get(n);a!==void 0&&a()}createInspector(){this.inspectorFolder=this.addFolder("Inspector",this.pane)}clearInspector(){const n=this.inspectorFolder.children.length-1;for(let a=n;a>-1;--a)this.inspectorFolder.remove(this.inspectorFolder.children[a])}}var Rt={exports:{}},tt={};/**
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 Gt;function Vn(){if(Gt)return Je;Gt=1;var t=R,n=Symbol.for("react.element"),a=Symbol.for("react.fragment"),e=Object.prototype.hasOwnProperty,o=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function m(s,d,h){var g,y={},S=null,x=null;h!==void 0&&(S=""+h),d.key!==void 0&&(S=""+d.key),d.ref!==void 0&&(x=d.ref);for(g in d)e.call(d,g)&&!l.hasOwnProperty(g)&&(y[g]=d[g]);if(s&&s.defaultProps)for(g in d=s.defaultProps,d)y[g]===void 0&&(y[g]=d[g]);return{$$typeof:n,type:s,key:S,ref:x,props:y,_owner:o.current}}return Je.Fragment=a,Je.jsx=m,Je.jsxs=m,Je}var Qe={};/**
9
+ */var Lt;function In(){if(Lt)return tt;Lt=1;var e=C,n=Symbol.for("react.element"),a=Symbol.for("react.fragment"),t=Object.prototype.hasOwnProperty,r=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function m(s,d,f){var g,y={},S=null,x=null;f!==void 0&&(S=""+f),d.key!==void 0&&(S=""+d.key),d.ref!==void 0&&(x=d.ref);for(g in d)t.call(d,g)&&!l.hasOwnProperty(g)&&(y[g]=d[g]);if(s&&s.defaultProps)for(g in d=s.defaultProps,d)y[g]===void 0&&(y[g]=d[g]);return{$$typeof:n,type:s,key:S,ref:x,props:y,_owner:r.current}}return tt.Fragment=a,tt.jsx=m,tt.jsxs=m,tt}var nt={};/**
10
10
  * @license React
11
11
  * react-jsx-runtime.development.js
12
12
  *
@@ -14,95 +14,96 @@
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 Ht;function zn(){return Ht||(Ht=1,process.env.NODE_ENV!=="production"&&function(){var t=R,n=Symbol.for("react.element"),a=Symbol.for("react.portal"),e=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),l=Symbol.for("react.profiler"),m=Symbol.for("react.provider"),s=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),g=Symbol.for("react.suspense_list"),y=Symbol.for("react.memo"),S=Symbol.for("react.lazy"),x=Symbol.for("react.offscreen"),T=Symbol.iterator,j="@@iterator";function q(i){if(i===null||typeof i!="object")return null;var p=T&&i[T]||i[j];return typeof p=="function"?p:null}var V=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function w(i){{for(var p=arguments.length,b=new Array(p>1?p-1:0),C=1;C<p;C++)b[C-1]=arguments[C];G("error",i,b)}}function G(i,p,b){{var C=V.ReactDebugCurrentFrame,N=C.getStackAddendum();N!==""&&(p+="%s",b=b.concat([N]));var B=b.map(function(k){return String(k)});B.unshift("Warning: "+p),Function.prototype.apply.call(console[i],console,B)}}var be=!1,le=!1,se=!1,f=!1,v=!1,O;O=Symbol.for("react.module.reference");function P(i){return!!(typeof i=="string"||typeof i=="function"||i===e||i===l||v||i===o||i===h||i===g||f||i===x||be||le||se||typeof i=="object"&&i!==null&&(i.$$typeof===S||i.$$typeof===y||i.$$typeof===m||i.$$typeof===s||i.$$typeof===d||i.$$typeof===O||i.getModuleId!==void 0))}function H(i,p,b){var C=i.displayName;if(C)return C;var N=p.displayName||p.name||"";return N!==""?b+"("+N+")":b}function z(i){return i.displayName||"Context"}function Y(i){if(i==null)return null;if(typeof i.tag=="number"&&w("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof i=="function")return i.displayName||i.name||null;if(typeof i=="string")return i;switch(i){case e:return"Fragment";case a:return"Portal";case l:return"Profiler";case o:return"StrictMode";case h:return"Suspense";case g:return"SuspenseList"}if(typeof i=="object")switch(i.$$typeof){case s:var p=i;return z(p)+".Consumer";case m:var b=i;return z(b._context)+".Provider";case d:return H(i,i.render,"ForwardRef");case y:var C=i.displayName||null;return C!==null?C:Y(i.type)||"Memo";case S:{var N=i,B=N._payload,k=N._init;try{return Y(k(B))}catch{return null}}}return null}var L=Object.assign,K=0,X,_,U,Q,pe,ye,rt;function Ge(){}Ge.__reactDisabledLog=!0;function xt(){{if(K===0){X=console.log,_=console.info,U=console.warn,Q=console.error,pe=console.group,ye=console.groupCollapsed,rt=console.groupEnd;var i={configurable:!0,enumerable:!0,value:Ge,writable:!0};Object.defineProperties(console,{info:i,log:i,warn:i,error:i,group:i,groupCollapsed:i,groupEnd:i})}K++}}function wt(){{if(K--,K===0){var i={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:L({},i,{value:X}),info:L({},i,{value:_}),warn:L({},i,{value:U}),error:L({},i,{value:Q}),group:L({},i,{value:pe}),groupCollapsed:L({},i,{value:ye}),groupEnd:L({},i,{value:rt})})}K<0&&w("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var He=V.ReactCurrentDispatcher,We;function Le(i,p,b){{if(We===void 0)try{throw Error()}catch(N){var C=N.stack.trim().match(/\n( *(at )?)/);We=C&&C[1]||""}return`
18
- `+We+i}}var Fe=!1,Ce;{var ot=typeof WeakMap=="function"?WeakMap:Map;Ce=new ot}function st(i,p){if(!i||Fe)return"";{var b=Ce.get(i);if(b!==void 0)return b}var C;Fe=!0;var N=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var B;B=He.current,He.current=null,xt();try{if(p){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(me){C=me}Reflect.construct(i,[],k)}else{try{k.call()}catch(me){C=me}i.call(k.prototype)}}else{try{throw Error()}catch(me){C=me}i()}}catch(me){if(me&&C&&typeof me.stack=="string"){for(var A=me.stack.split(`
19
- `),ce=C.stack.split(`
20
- `),J=A.length-1,ee=ce.length-1;J>=1&&ee>=0&&A[J]!==ce[ee];)ee--;for(;J>=1&&ee>=0;J--,ee--)if(A[J]!==ce[ee]){if(J!==1||ee!==1)do if(J--,ee--,ee<0||A[J]!==ce[ee]){var he=`
21
- `+A[J].replace(" at new "," at ");return i.displayName&&he.includes("<anonymous>")&&(he=he.replace("<anonymous>",i.displayName)),typeof i=="function"&&Ce.set(i,he),he}while(J>=1&&ee>=0);break}}}finally{Fe=!1,He.current=B,wt(),Error.prepareStackTrace=N}var Be=i?i.displayName||i.name:"",zt=Be?Le(Be):"";return typeof i=="function"&&Ce.set(i,zt),zt}function Ot(i,p,b){return st(i,!1)}function ct(i){var p=i.prototype;return!!(p&&p.isReactComponent)}function xe(i,p,b){if(i==null)return"";if(typeof i=="function")return st(i,ct(i));if(typeof i=="string")return Le(i);switch(i){case h:return Le("Suspense");case g:return Le("SuspenseList")}if(typeof i=="object")switch(i.$$typeof){case d:return Ot(i.render);case y:return xe(i.type,p,b);case S:{var C=i,N=C._payload,B=C._init;try{return xe(B(N),p,b)}catch{}}}return""}var we=Object.prototype.hasOwnProperty,lt={},ut=V.ReactDebugCurrentFrame;function Oe(i){if(i){var p=i._owner,b=xe(i.type,i._source,p?p.type:null);ut.setExtraStackFrame(b)}else ut.setExtraStackFrame(null)}function $e(i,p,b,C,N){{var B=Function.call.bind(we);for(var k in i)if(B(i,k)){var A=void 0;try{if(typeof i[k]!="function"){var ce=Error((C||"React class")+": "+b+" type `"+k+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof i[k]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw ce.name="Invariant Violation",ce}A=i[k](p,k,C,b,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(J){A=J}A&&!(A instanceof Error)&&(Oe(N),w("%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).",C||"React class",b,k,typeof A),Oe(null)),A instanceof Error&&!(A.message in lt)&&(lt[A.message]=!0,Oe(N),w("Failed %s type: %s",b,A.message),Oe(null))}}}var Me=Array.isArray;function qe(i){return Me(i)}function Mt(i){{var p=typeof Symbol=="function"&&Symbol.toStringTag,b=p&&i[Symbol.toStringTag]||i.constructor.name||"Object";return b}}function dt(i){try{return ht(i),!1}catch{return!0}}function ht(i){return""+i}function ft(i){if(dt(i))return w("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",Mt(i)),ht(i)}var Ee=V.ReactCurrentOwner,Ke={key:!0,ref:!0,__self:!0,__source:!0},Xe,pt,Ue;Ue={};function Tt(i){if(we.call(i,"ref")){var p=Object.getOwnPropertyDescriptor(i,"ref").get;if(p&&p.isReactWarning)return!1}return i.ref!==void 0}function Rt(i){if(we.call(i,"key")){var p=Object.getOwnPropertyDescriptor(i,"key").get;if(p&&p.isReactWarning)return!1}return i.key!==void 0}function mt(i,p){if(typeof i.ref=="string"&&Ee.current&&p&&Ee.current.stateNode!==p){var b=Y(Ee.current.type);Ue[b]||(w('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',Y(Ee.current.type),i.ref),Ue[b]=!0)}}function Se(i,p){{var b=function(){Xe||(Xe=!0,w("%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)",p))};b.isReactWarning=!0,Object.defineProperty(i,"key",{get:b,configurable:!0})}}function Vt(i,p){{var b=function(){pt||(pt=!0,w("%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)",p))};b.isReactWarning=!0,Object.defineProperty(i,"ref",{get:b,configurable:!0})}}var r=function(i,p,b,C,N,B,k){var A={$$typeof:n,type:i,key:p,ref:b,props:k,_owner:B};return A._store={},Object.defineProperty(A._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(A,"_self",{configurable:!1,enumerable:!1,writable:!1,value:C}),Object.defineProperty(A,"_source",{configurable:!1,enumerable:!1,writable:!1,value:N}),Object.freeze&&(Object.freeze(A.props),Object.freeze(A)),A};function E(i,p,b,C,N){{var B,k={},A=null,ce=null;b!==void 0&&(ft(b),A=""+b),Rt(p)&&(ft(p.key),A=""+p.key),Tt(p)&&(ce=p.ref,mt(p,N));for(B in p)we.call(p,B)&&!Ke.hasOwnProperty(B)&&(k[B]=p[B]);if(i&&i.defaultProps){var J=i.defaultProps;for(B in J)k[B]===void 0&&(k[B]=J[B])}if(A||ce){var ee=typeof i=="function"?i.displayName||i.name||"Unknown":i;A&&Se(k,ee),ce&&Vt(k,ee)}return r(i,A,ce,N,C,Ee.current,k)}}var M=V.ReactCurrentOwner,F=V.ReactDebugCurrentFrame;function Z(i){if(i){var p=i._owner,b=xe(i.type,i._source,p?p.type:null);F.setExtraStackFrame(b)}else F.setExtraStackFrame(null)}var ue;ue=!1;function ie(i){return typeof i=="object"&&i!==null&&i.$$typeof===n}function _t(){{if(M.current){var i=Y(M.current.type);if(i)return`
17
+ */var Ft;function Nn(){return Ft||(Ft=1,process.env.NODE_ENV!=="production"&&function(){var e=C,n=Symbol.for("react.element"),a=Symbol.for("react.portal"),t=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),l=Symbol.for("react.profiler"),m=Symbol.for("react.provider"),s=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),f=Symbol.for("react.suspense"),g=Symbol.for("react.suspense_list"),y=Symbol.for("react.memo"),S=Symbol.for("react.lazy"),x=Symbol.for("react.offscreen"),N=Symbol.iterator,L="@@iterator";function K(i){if(i===null||typeof i!="object")return null;var p=N&&i[N]||i[L];return typeof p=="function"?p:null}var V=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function R(i){{for(var p=arguments.length,b=new Array(p>1?p-1:0),w=1;w<p;w++)b[w-1]=arguments[w];H("error",i,b)}}function H(i,p,b){{var w=V.ReactDebugCurrentFrame,I=w.getStackAddendum();I!==""&&(p+="%s",b=b.concat([I]));var U=b.map(function(k){return String(k)});U.unshift("Warning: "+p),Function.prototype.apply.call(console[i],console,U)}}var Ce=!1,ce=!1,G=!1,ee=!1,O=!1,Me;Me=Symbol.for("react.module.reference");function De(i){return!!(typeof i=="string"||typeof i=="function"||i===t||i===l||O||i===r||i===f||i===g||ee||i===x||Ce||ce||G||typeof i=="object"&&i!==null&&(i.$$typeof===S||i.$$typeof===y||i.$$typeof===m||i.$$typeof===s||i.$$typeof===d||i.$$typeof===Me||i.getModuleId!==void 0))}function xe(i,p,b){var w=i.displayName;if(w)return w;var I=p.displayName||p.name||"";return I!==""?b+"("+I+")":b}function he(i){return i.displayName||"Context"}function ne(i){if(i==null)return null;if(typeof i.tag=="number"&&R("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof i=="function")return i.displayName||i.name||null;if(typeof i=="string")return i;switch(i){case t:return"Fragment";case a:return"Portal";case l:return"Profiler";case r:return"StrictMode";case f:return"Suspense";case g:return"SuspenseList"}if(typeof i=="object")switch(i.$$typeof){case s:var p=i;return he(p)+".Consumer";case m:var b=i;return he(b._context)+".Provider";case d:return xe(i,i.render,"ForwardRef");case y:var w=i.displayName||null;return w!==null?w:ne(i.type)||"Memo";case S:{var I=i,U=I._payload,k=I._init;try{return ne(k(U))}catch{return null}}}return null}var de=Object.assign,me=0,ve,X,pe,Te,Re,fe,h;function v(){}v.__reactDisabledLog=!0;function M(){{if(me===0){ve=console.log,X=console.info,pe=console.warn,Te=console.error,Re=console.group,fe=console.groupCollapsed,h=console.groupEnd;var i={configurable:!0,enumerable:!0,value:v,writable:!0};Object.defineProperties(console,{info:i,log:i,warn:i,error:i,group:i,groupCollapsed:i,groupEnd:i})}me++}}function A(){{if(me--,me===0){var i={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:de({},i,{value:ve}),info:de({},i,{value:X}),warn:de({},i,{value:pe}),error:de({},i,{value:Te}),group:de({},i,{value:Re}),groupCollapsed:de({},i,{value:fe}),groupEnd:de({},i,{value:h})})}me<0&&R("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var W=V.ReactCurrentDispatcher,$;function ie(i,p,b){{if($===void 0)try{throw Error()}catch(I){var w=I.stack.trim().match(/\n( *(at )?)/);$=w&&w[1]||""}return`
18
+ `+$+i}}var z=!1,Z;{var re=typeof WeakMap=="function"?WeakMap:Map;Z=new re}function P(i,p){if(!i||z)return"";{var b=Z.get(i);if(b!==void 0)return b}var w;z=!0;var I=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var U;U=W.current,W.current=null,M();try{if(p){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(Oe){w=Oe}Reflect.construct(i,[],k)}else{try{k.call()}catch(Oe){w=Oe}i.call(k.prototype)}}else{try{throw Error()}catch(Oe){w=Oe}i()}}catch(Oe){if(Oe&&w&&typeof Oe.stack=="string"){for(var _=Oe.stack.split(`
19
+ `),ue=w.stack.split(`
20
+ `),J=_.length-1,Q=ue.length-1;J>=1&&Q>=0&&_[J]!==ue[Q];)Q--;for(;J>=1&&Q>=0;J--,Q--)if(_[J]!==ue[Q]){if(J!==1||Q!==1)do if(J--,Q--,Q<0||_[J]!==ue[Q]){var ye=`
21
+ `+_[J].replace(" at new "," at ");return i.displayName&&ye.includes("<anonymous>")&&(ye=ye.replace("<anonymous>",i.displayName)),typeof i=="function"&&Z.set(i,ye),ye}while(J>=1&&Q>=0);break}}}finally{z=!1,W.current=U,A(),Error.prepareStackTrace=I}var Ge=i?i.displayName||i.name:"",It=Ge?ie(Ge):"";return typeof i=="function"&&Z.set(i,It),It}function B(i,p,b){return P(i,!1)}function ae(i){var p=i.prototype;return!!(p&&p.isReactComponent)}function Ee(i,p,b){if(i==null)return"";if(typeof i=="function")return P(i,ae(i));if(typeof i=="string")return ie(i);switch(i){case f:return ie("Suspense");case g:return ie("SuspenseList")}if(typeof i=="object")switch(i.$$typeof){case d:return B(i.render);case y:return Ee(i.type,p,b);case S:{var w=i,I=w._payload,U=w._init;try{return Ee(U(I),p,b)}catch{}}}return""}var we=Object.prototype.hasOwnProperty,ot={},st=V.ReactDebugCurrentFrame;function Ie(i){if(i){var p=i._owner,b=Ee(i.type,i._source,p?p.type:null);st.setExtraStackFrame(b)}else st.setExtraStackFrame(null)}function Xe(i,p,b,w,I){{var U=Function.call.bind(we);for(var k in i)if(U(i,k)){var _=void 0;try{if(typeof i[k]!="function"){var ue=Error((w||"React class")+": "+b+" type `"+k+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof i[k]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw ue.name="Invariant Violation",ue}_=i[k](p,k,w,b,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(J){_=J}_&&!(_ instanceof Error)&&(Ie(I),R("%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).",w||"React class",b,k,typeof _),Ie(null)),_ instanceof Error&&!(_.message in ot)&&(ot[_.message]=!0,Ie(I),R("Failed %s type: %s",b,_.message),Ie(null))}}}var Ne=Array.isArray;function Ze(i){return Ne(i)}function yt(i){{var p=typeof Symbol=="function"&&Symbol.toStringTag,b=p&&i[Symbol.toStringTag]||i.constructor.name||"Object";return b}}function ct(i){try{return lt(i),!1}catch{return!0}}function lt(i){return""+i}function ut(i){if(ct(i))return R("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",yt(i)),lt(i)}var _e=V.ReactCurrentOwner,Je={key:!0,ref:!0,__self:!0,__source:!0},Qe,dt,He;He={};function Et(i){if(we.call(i,"ref")){var p=Object.getOwnPropertyDescriptor(i,"ref").get;if(p&&p.isReactWarning)return!1}return i.ref!==void 0}function St(i){if(we.call(i,"key")){var p=Object.getOwnPropertyDescriptor(i,"key").get;if(p&&p.isReactWarning)return!1}return i.key!==void 0}function ft(i,p){if(typeof i.ref=="string"&&_e.current&&p&&_e.current.stateNode!==p){var b=ne(_e.current.type);He[b]||(R('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',ne(_e.current.type),i.ref),He[b]=!0)}}function Ae(i,p){{var b=function(){Qe||(Qe=!0,R("%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)",p))};b.isReactWarning=!0,Object.defineProperty(i,"key",{get:b,configurable:!0})}}function Dt(i,p){{var b=function(){dt||(dt=!0,R("%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)",p))};b.isReactWarning=!0,Object.defineProperty(i,"ref",{get:b,configurable:!0})}}var o=function(i,p,b,w,I,U,k){var _={$$typeof:n,type:i,key:p,ref:b,props:k,_owner:U};return _._store={},Object.defineProperty(_._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(_,"_self",{configurable:!1,enumerable:!1,writable:!1,value:w}),Object.defineProperty(_,"_source",{configurable:!1,enumerable:!1,writable:!1,value:I}),Object.freeze&&(Object.freeze(_.props),Object.freeze(_)),_};function E(i,p,b,w,I){{var U,k={},_=null,ue=null;b!==void 0&&(ut(b),_=""+b),St(p)&&(ut(p.key),_=""+p.key),Et(p)&&(ue=p.ref,ft(p,I));for(U in p)we.call(p,U)&&!Je.hasOwnProperty(U)&&(k[U]=p[U]);if(i&&i.defaultProps){var J=i.defaultProps;for(U in J)k[U]===void 0&&(k[U]=J[U])}if(_||ue){var Q=typeof i=="function"?i.displayName||i.name||"Unknown":i;_&&Ae(k,Q),ue&&Dt(k,Q)}return o(i,_,ue,I,w,_e.current,k)}}var T=V.ReactCurrentOwner,F=V.ReactDebugCurrentFrame;function q(i){if(i){var p=i._owner,b=Ee(i.type,i._source,p?p.type:null);F.setExtraStackFrame(b)}else F.setExtraStackFrame(null)}var ge;ge=!1;function le(i){return typeof i=="object"&&i!==null&&i.$$typeof===n}function Ct(){{if(T.current){var i=ne(T.current.type);if(i)return`
22
22
 
23
- Check the render method of \``+i+"`."}return""}}function At(i){{if(i!==void 0){var p=i.fileName.replace(/^.*[\\\/]/,""),b=i.lineNumber;return`
23
+ Check the render method of \``+i+"`."}return""}}function xt(i){{if(i!==void 0){var p=i.fileName.replace(/^.*[\\\/]/,""),b=i.lineNumber;return`
24
24
 
25
- Check your code at `+p+":"+b+"."}return""}}var Ze={};function fe(i){{var p=_t();if(!p){var b=typeof i=="string"?i:i.displayName||i.name;b&&(p=`
25
+ Check your code at `+p+":"+b+"."}return""}}var et={};function Se(i){{var p=Ct();if(!p){var b=typeof i=="string"?i:i.displayName||i.name;b&&(p=`
26
26
 
27
- Check the top-level render call using <`+b+">.")}return p}}function de(i,p){{if(!i._store||i._store.validated||i.key!=null)return;i._store.validated=!0;var b=fe(p);if(Ze[b])return;Ze[b]=!0;var C="";i&&i._owner&&i._owner!==M.current&&(C=" It was passed a child from "+Y(i._owner.type)+"."),Z(i),w('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',b,C),Z(null)}}function Te(i,p){{if(typeof i!="object")return;if(qe(i))for(var b=0;b<i.length;b++){var C=i[b];ie(C)&&de(C,p)}else if(ie(i))i._store&&(i._store.validated=!0);else if(i){var N=q(i);if(typeof N=="function"&&N!==i.entries)for(var B=N.call(i),k;!(k=B.next()).done;)ie(k.value)&&de(k.value,p)}}}function Re(i){{var p=i.type;if(p==null||typeof p=="string")return;var b;if(typeof p=="function")b=p.propTypes;else if(typeof p=="object"&&(p.$$typeof===d||p.$$typeof===y))b=p.propTypes;else return;if(b){var C=Y(p);$e(b,i.props,"prop",C,i)}else if(p.PropTypes!==void 0&&!ue){ue=!0;var N=Y(p);w("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",N||"Unknown")}typeof p.getDefaultProps=="function"&&!p.getDefaultProps.isReactClassApproved&&w("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}function _e(i){{for(var p=Object.keys(i.props),b=0;b<p.length;b++){var C=p[b];if(C!=="children"&&C!=="key"){Z(i),w("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",C),Z(null);break}}i.ref!==null&&(Z(i),w("Invalid attribute `ref` supplied to `React.Fragment`."),Z(null))}}function Ae(i,p,b,C,N,B){{var k=P(i);if(!k){var A="";(i===void 0||typeof i=="object"&&i!==null&&Object.keys(i).length===0)&&(A+=" 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 ce=At(N);ce?A+=ce:A+=_t();var J;i===null?J="null":qe(i)?J="array":i!==void 0&&i.$$typeof===n?(J="<"+(Y(i.type)||"Unknown")+" />",A=" Did you accidentally export a JSX literal instead of a component?"):J=typeof i,w("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",J,A)}var ee=E(i,p,b,N,B);if(ee==null)return ee;if(k){var he=p.children;if(he!==void 0)if(C)if(qe(he)){for(var Be=0;Be<he.length;Be++)Te(he[Be],i);Object.freeze&&Object.freeze(he)}else w("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 Te(he,i)}return i===e?_e(ee):Re(ee),ee}}function En(i,p,b){return Ae(i,p,b,!0)}function Sn(i,p,b){return Ae(i,p,b,!1)}var Cn=Sn,xn=En;Qe.Fragment=e,Qe.jsx=Cn,Qe.jsxs=xn}()),Qe}process.env.NODE_ENV==="production"?It.exports=Vn():It.exports=zn();var u=It.exports;function Ut(t){return t.title.search("<")>-1?u.jsx("button",{className:"svg",dangerouslySetInnerHTML:{__html:t.title}}):u.jsx("button",{children:t.title})}const Yn=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"})]}),Gn=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
27
+ Check the top-level render call using <`+b+">.")}return p}}function be(i,p){{if(!i._store||i._store.validated||i.key!=null)return;i._store.validated=!0;var b=Se(p);if(et[b])return;et[b]=!0;var w="";i&&i._owner&&i._owner!==T.current&&(w=" It was passed a child from "+ne(i._owner.type)+"."),q(i),R('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',b,w),q(null)}}function Le(i,p){{if(typeof i!="object")return;if(Ze(i))for(var b=0;b<i.length;b++){var w=i[b];le(w)&&be(w,p)}else if(le(i))i._store&&(i._store.validated=!0);else if(i){var I=K(i);if(typeof I=="function"&&I!==i.entries)for(var U=I.call(i),k;!(k=U.next()).done;)le(k.value)&&be(k.value,p)}}}function Fe(i){{var p=i.type;if(p==null||typeof p=="string")return;var b;if(typeof p=="function")b=p.propTypes;else if(typeof p=="object"&&(p.$$typeof===d||p.$$typeof===y))b=p.propTypes;else return;if(b){var w=ne(p);Xe(b,i.props,"prop",w,i)}else if(p.PropTypes!==void 0&&!ge){ge=!0;var I=ne(p);R("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",I||"Unknown")}typeof p.getDefaultProps=="function"&&!p.getDefaultProps.isReactClassApproved&&R("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}function Ue(i){{for(var p=Object.keys(i.props),b=0;b<p.length;b++){var w=p[b];if(w!=="children"&&w!=="key"){q(i),R("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",w),q(null);break}}i.ref!==null&&(q(i),R("Invalid attribute `ref` supplied to `React.Fragment`."),q(null))}}function Be(i,p,b,w,I,U){{var k=De(i);if(!k){var _="";(i===void 0||typeof i=="object"&&i!==null&&Object.keys(i).length===0)&&(_+=" 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 ue=xt(I);ue?_+=ue:_+=Ct();var J;i===null?J="null":Ze(i)?J="array":i!==void 0&&i.$$typeof===n?(J="<"+(ne(i.type)||"Unknown")+" />",_=" Did you accidentally export a JSX literal instead of a component?"):J=typeof i,R("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",J,_)}var Q=E(i,p,b,I,U);if(Q==null)return Q;if(k){var ye=p.children;if(ye!==void 0)if(w)if(Ze(ye)){for(var Ge=0;Ge<ye.length;Ge++)Le(ye[Ge],i);Object.freeze&&Object.freeze(ye)}else R("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 Le(ye,i)}return i===t?Ue(Q):Fe(Q),Q}}function cn(i,p,b){return Be(i,p,b,!0)}function ln(i,p,b){return Be(i,p,b,!1)}var un=ln,dn=cn;nt.Fragment=t,nt.jsx=un,nt.jsxs=dn}()),nt}process.env.NODE_ENV==="production"?Rt.exports=In():Rt.exports=Nn();var u=Rt.exports;function kt(e){return e.title.search("<")>-1?u.jsx("button",{className:"svg",dangerouslySetInnerHTML:{__html:e.title}}):u.jsx("button",{children:e.title})}const Ln=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"})]}),Fn=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
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
29
- C11,8.22,10.74,8,10.43,8z`})});function un(t){return u.jsx(tn.Reorder.Item,{value:t.title,children:u.jsxs("div",{children:[Gn,u.jsx("span",{children:t.title}),u.jsx("button",{className:"closeIcon",onClick:()=>{t.onDelete(t.index)},children:Yn})]})},t.title)}function dn(t){const[n,a]=R.useState(!1),[e,o]=R.useState(t.options),l=h=>{t.onDragComplete(h),o(h)},m=h=>{const g=[...e];g.splice(h,1),l(g)},s=[];e.forEach((h,g)=>{s.push(u.jsx(un,{index:g,title:h,onDelete:m},h))});let d="dropdown draggable";return t.subdropdown&&(d+=" subdropdown"),u.jsxs("div",{className:d,onMouseEnter:()=>a(!0),onMouseLeave:()=>a(!1),children:[u.jsx(Ut,{title:t.title}),u.jsx(tn.Reorder.Group,{axis:"y",values:e,onReorder:l,style:{visibility:n?"visible":"hidden"},children:s})]})}function hn(t){const[n,a]=R.useState(!1),e=[];t.options.map((l,m)=>{t.onSelect!==void 0&&(l.onSelect=t.onSelect),e.push(u.jsx(fn,{option:l},m))});let o="dropdown";return t.subdropdown&&(o+=" subdropdown"),u.jsxs("div",{className:o,onMouseEnter:()=>a(!0),onMouseLeave:()=>a(!1),children:[u.jsx(Ut,{title:t.title}),u.jsx("ul",{style:{visibility:n?"visible":"hidden"},children:e})]})}function fn(t){const{option:n}=t,[a,e]=R.useState("");let o;switch(n.type){case"draggable":o=u.jsx(dn,{title:n.title,options:n.value,onDragComplete:l=>{n.onDragComplete!==void 0&&n.onDragComplete(l)},subdropdown:!0});break;case"dropdown":o=u.jsx(hn,{title:n.title,options:n.value,onSelect:n.onSelect,subdropdown:!0});break;case"option":o=u.jsx("button",{onClick:()=>{n.onSelect!==void 0&&n.onSelect(n.value),n.selectable&&(a!==n.title?e(n.title):e(""))},children:n.title});break}return u.jsx("li",{className:a===n.title?"selected":"",children:o},nn())}function Hn(t){function n(e){switch(t.components.forEach(o=>{o.handleApp(e)}),e.event){case"custom":D.dispatchEvent({type:I.CUSTOM,value:e.data});break}}function a(e){switch(t.components.forEach(o=>{o.handleEditor(e)}),e.event){case"custom":D.dispatchEvent({type:I.CUSTOM,value:e.data});break}}t.listen=e=>{e.target==="editor"?a(e):n(e)}}const Wn=`out vec3 worldPosition;
30
- uniform float uDistance;
31
-
32
- void main() {
33
- // Scale the plane by the drawing distance
34
- worldPosition = position.xzy * uDistance;
35
- worldPosition.xz += cameraPosition.xz;
36
-
37
- gl_Position = projectionMatrix * modelViewMatrix * vec4(worldPosition, 1.0);
38
- }`,$n=`out vec4 fragColor;
39
- in vec3 worldPosition;
40
-
41
- uniform float uDivisions;
42
- uniform float uScale;
43
- uniform vec3 uColor;
44
- uniform float uDistance;
45
- uniform float uSubgridOpacity;
46
- uniform float uGridOpacity;
47
-
48
- float getGrid(float gapSize) {
49
- vec2 worldPositionByDivision = worldPosition.xz / gapSize;
50
-
51
- // Inverted, 0 where line, >1 where there's no line
52
- // We use the worldPosition (which in this case we use similarly to UVs) differential to control the anti-aliasing
53
- // We need to do the -0.5)-0.5 trick because the result fades out from 0 to 1, and we want both
54
- // worldPositionByDivision == 0.3 and worldPositionByDivision == 0.7 to result in the same fade, i.e. 0.3,
55
- // otherwise only one side of the line will be anti-aliased
56
- vec2 grid = abs(fract(worldPositionByDivision-0.5)-0.5) / fwidth(worldPositionByDivision) / 2.0;
57
- float gridLine = min(grid.x, grid.y);
58
-
59
- // Uninvert and clamp
60
- return 1.0 - min(gridLine, 1.0);
61
- }
62
-
63
- void main() {
64
- float cameraDistanceToGridPlane = distance(cameraPosition.y, worldPosition.y);
65
- float cameraDistanceToFragmentOnGridPlane = distance(cameraPosition.xz, worldPosition.xz);
66
-
67
- // The size of the grid and subgrid are powers of each other and they are determined based on camera distance.
68
- // The current grid will become the next subgrid when it becomes too small, and its next power becomes the new grid.
69
- float subGridPower = pow(uDivisions, floor(log(cameraDistanceToGridPlane) / log(uDivisions)));
70
- float gridPower = subGridPower * uDivisions;
71
-
72
- // If we want to fade both the grid and its subgrid, we need to displays 3 different opacities, with the next grid being the third
73
- float nextGridPower = gridPower * uDivisions;
74
-
75
- // 1 where grid, 0 where no grid
76
- float subgrid = getGrid(subGridPower * uScale);
77
- float grid = getGrid(gridPower * uScale);
78
- float nextGrid = getGrid(nextGridPower * uScale);
79
-
80
- // Where we are between the introduction of the current grid power and when we switch to the next grid power
81
- float stepPercentage = (cameraDistanceToGridPlane - subGridPower)/(gridPower - subGridPower);
82
-
83
- // The last x percentage of the current step over which we want to fade
84
- float fadeRange = 0.3;
85
-
86
- // We calculate the fade percentage from the step percentage and the fade range
87
- float fadePercentage = max(stepPercentage - 1.0 + fadeRange, 0.0) / fadeRange;
88
-
89
- // Set base opacity based on how close we are to the drawing distance, with a cubic falloff
90
- float baseOpacity = subgrid * pow(1.0 - min(cameraDistanceToFragmentOnGridPlane / uDistance, 1.0), 3.0);
91
-
92
- // Shade the subgrid
93
- fragColor = vec4(uColor.rgb, (baseOpacity - fadePercentage) * uSubgridOpacity);
94
-
95
- // Somewhat arbitrary additional fade coefficient to counter anti-aliasing popping when switching between grid powers
96
- float fadeCoefficient = 0.5;
97
-
98
- // Shade the grid
99
- fragColor.a = mix(fragColor.a, baseOpacity * uGridOpacity - fadePercentage * (uGridOpacity - uSubgridOpacity) * fadeCoefficient, grid);
100
-
101
- // Shade the next grid
102
- fragColor.a = mix(fragColor.a, baseOpacity * uGridOpacity, nextGrid);
103
-
104
- if (fragColor.a <= 0.0) discard;
105
- }`;class qn extends c.ShaderMaterial{constructor(n){super({extensions:{derivatives:!0},glslVersion:c.GLSL3,side:c.DoubleSide,transparent:!0,uniforms:{uScale:{value:n?.scale!==void 0?n?.scale:.1},uDivisions:{value:n?.divisions!==void 0?n?.divisions:10},uColor:{value:n?.color!==void 0?n?.color:new c.Color(16777215)},uDistance:{value:n?.distance!==void 0?n?.distance:1e4},uSubgridOpacity:{value:n?.subgridOpacity!==void 0?n?.subgridOpacity:.15},uGridOpacity:{value:n?.gridOpacity!==void 0?n?.gridOpacity:.25}},vertexShader:Wn,fragmentShader:$n,name:"InfiniteGrid",depthWrite:!1})}}class pn extends c.Mesh{gridMaterial;constructor(){const n=new qn;super(new c.PlaneGeometry(2,2),n),this.gridMaterial=n,this.frustumCulled=!1,this.name="InfiniteGridHelper",this.position.y=.1}update(){this.gridMaterial.needsUpdate=!0}}const Kn=`#include <common>
29
+ C11,8.22,10.74,8,10.43,8z`})});function en(e){return u.jsx(Wt.Reorder.Item,{value:e.title,children:u.jsxs("div",{children:[Fn,u.jsx("span",{children:e.title}),u.jsx("button",{className:"closeIcon",onClick:()=>{e.onDelete(e.index)},children:Ln})]})},e.title)}function tn(e){const[n,a]=C.useState(!1),[t,r]=C.useState(e.options),l=f=>{e.onDragComplete(f),r(f)},m=f=>{const g=[...t];g.splice(f,1),l(g)},s=[];t.forEach((f,g)=>{s.push(u.jsx(en,{index:g,title:f,onDelete:m},f))});let d="dropdown draggable";return e.subdropdown&&(d+=" subdropdown"),u.jsxs("div",{className:d,onMouseEnter:()=>a(!0),onMouseLeave:()=>a(!1),children:[u.jsx(kt,{title:e.title}),u.jsx(Wt.Reorder.Group,{axis:"y",values:t,onReorder:l,style:{visibility:n?"visible":"hidden"},children:s})]})}function nn(e){const[n,a]=C.useState(!1),t=[];e.options.map((l,m)=>{e.onSelect!==void 0&&(l.onSelect=e.onSelect),t.push(u.jsx(an,{option:l},m))});let r="dropdown";return e.subdropdown&&(r+=" subdropdown"),u.jsxs("div",{className:r,onMouseEnter:()=>a(!0),onMouseLeave:()=>a(!1),children:[u.jsx(kt,{title:e.title}),u.jsx("ul",{style:{visibility:n?"visible":"hidden"},children:t})]})}function an(e){const{option:n}=e,[a,t]=C.useState("");let r;switch(n.type){case"draggable":r=u.jsx(tn,{title:n.title,options:n.value,onDragComplete:l=>{n.onDragComplete!==void 0&&n.onDragComplete(l)},subdropdown:!0});break;case"dropdown":r=u.jsx(nn,{title:n.title,options:n.value,onSelect:n.onSelect,subdropdown:!0});break;case"option":r=u.jsx("button",{onClick:()=>{n.onSelect!==void 0&&n.onSelect(n.value),n.selectable&&(a!==n.title?t(n.title):t(""))},children:n.title});break}return u.jsx("li",{className:a===n.title?"selected":"",children:r},$t())}class qe{appHandlers=[];editorHandlers=[];_app;static _instance;handleAppBroadcast=n=>{switch(this.appHandlers.forEach(a=>{a.callback(this._app,a.remote,n)}),n.event){case"custom":j.dispatchEvent({type:D.CUSTOM,value:n.data});break}};handleEditorBroadcast=n=>{switch(this.editorHandlers.forEach(a=>{a.callback(this._app,a.remote,n)}),n.event){case"custom":j.dispatchEvent({type:D.CUSTOM,value:n.data});break}};set app(n){this._app=n,n.listen=a=>{a.target==="editor"?this.handleEditorBroadcast(a):this.handleAppBroadcast(a)}}static get instance(){return qe._instance===void 0&&(qe._instance=new qe),qe._instance}}function bt(e){const[n,a]=C.useState(e.open!==void 0?e.open:!0),t=!n||e.children===void 0;return u.jsxs("div",{className:`accordion ${t?"hide":""}`,children:[u.jsxs("button",{className:"toggle",onClick:()=>{const r=!n;e.onToggle!==void 0&&e.onToggle(r),a(r)},children:[u.jsx("p",{className:`status ${n?"open":""}`,children:"Toggle"}),u.jsx("p",{className:"label",children:Ke(e.label)})]}),e.button,u.jsx("div",{className:n?"open":"",children:u.jsx("div",{children:e.children})})]})}function jt(e){const[n,a]=C.useState(!1),t=e.child!==void 0&&e.child.children.length>0,r=[];return e.child!==void 0&&e.child.children.length>0&&e.child.children.map(l=>{r.push(u.jsx(jt,{child:l,three:e.three},Math.random()))}),u.jsx(u.Fragment,{children:e.child!==void 0&&u.jsxs("div",{className:"childObject",children:[u.jsxs("div",{className:"child",children:[t?u.jsx("button",{className:"status",style:{backgroundPositionX:n?"-14px":"2px"},onClick:()=>{a(!n)}}):null,u.jsx("button",{className:"name",style:{left:t?"20px":"5px"},onClick:()=>{e.child!==void 0&&(e.three.getObject(e.child.uuid),n||a(!0))},children:e.child.name.length>0?`${e.child.name} (${e.child.type})`:`${e.child.type}::${e.child.uuid}`}),u.jsx("div",{className:`icon ${_n(e.child)}`})]}),u.jsx("div",{className:n?"open":"",children:u.jsx("div",{className:"container",children:r})})]},Math.random())})}function rn(e){const n=[];return e.child?.children.map(a=>{n.push(u.jsx(jt,{child:a,three:e.three},Math.random()))}),u.jsx("div",{className:`scene ${e.class!==void 0?e.class:""}`,children:n})}const Un="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA5klEQVRoge2Y0Q6EIAwE6cX//+X6cCFpSMEKVTdk501OpRNKiyelFC0b8Ps6gCwoggZF0KAIGhRBgyJoUAQNiqCxjciR9SLV//eZiAyvK3U8i/QVaQO2YyLSFVvlkdTKDjJCukh2ykR5ZEW+kHmlatl90RaBtDkK/w7CYhuRUEO0ee3l+J3m55Vm+17vtwjTnV1V3QA8qfbeUXCzRWDpiLLS+OyzvRW7IzW9R+okvclsqR09743bo0yUpc1+lSJvNsa002+Euk9GKzV7SmZDRIMiaFAEDYqgQRE0KIIGRdCgCBoUQeMEMERadX7YUz8AAAAASUVORK5CYII=";function Bn(e){return"items"in e}function Ye(e){const n=[];return e.items.forEach(a=>{Bn(a)?n.push(u.jsx(Ye,{title:Ke(a.title),items:a.items},Math.random())):n.push(u.jsx(it,{title:a.title,prop:a.prop,value:a.value,type:a.type,min:a.min,max:a.max,step:a.step,disabled:a.disabled,options:a.options,onChange:(t,r)=>{a.onChange!==void 0&&a.onChange(t,r)}},Math.random()))}),u.jsx(bt,{label:e.title,open:e.expanded===!0,children:n})}function Vn(e){return!(e==="alphaHash"||e==="alphaToCoverage"||e==="attenuationDistance"||e==="blendDstAlpha"||e==="colorWrite"||e==="combine"||e==="defaultAttributeValues"||e==="depthFunc"||e==="forceSinglePass"||e==="glslVersion"||e==="linecap"||e==="linejoin"||e==="linewidth"||e==="normalMapType"||e==="precision"||e==="premultipliedAlpha"||e==="shadowSide"||e==="toneMapped"||e==="uniformsGroups"||e==="uniformsNeedUpdate"||e==="userData"||e==="vertexColors"||e==="version"||e==="wireframeLinecap"||e==="wireframeLinejoin"||e==="wireframeLinewidth"||e.slice(0,4)==="clip"||e.slice(0,7)==="polygon"||e.slice(0,7)==="stencil"||e.slice(0,2)==="is")}function Ve(e){switch(e){case"alphaMap":return"Alpha Map";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"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"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"defines":return"Defines";case"depthTest":return"Depth Test";case"depthWrite":return"Depth Write";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"extensions":return"Extensions";case"flatShading":return"Flat Shading";case"fragmentShader":return"Fragment Shader";case"fog":return"Fog";case"gradientMap":return"Gradient Map";case"ior":return"IOR";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"opacity":return"Opacity";case"reflectivity":return"Reflectivity";case"refractionRatio":return"Refraction Ratio";case"roughness":return"Roughness";case"roughnessMap":return"Roughness Map";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"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"vertexShader":return"Vertex Shader";case"visible":return"Visible";case"wireframe":return"Wireframe"}return e}function zn(e){return e.toLowerCase().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"||e==="thickness"}function Yn(){const e=document.createElement("input");return e.type="file",new Promise((n,a)=>{e.addEventListener("change",function(){if(e.files===null)a();else{const t=e.files[0],r=new FileReader;r.onload=function(l){n(l.target.result)},r.readAsDataURL(t)}}),e.click()})}const Hn=[{title:"Front",value:c.FrontSide},{title:"Back",value:c.BackSide},{title:"Double",value:c.DoubleSide}],Gn=[{title:"No Blending",value:c.NoBlending},{title:"Normal",value:c.NormalBlending},{title:"Additive",value:c.AdditiveBlending},{title:"Subtractive",value:c.SubtractiveBlending},{title:"Multiply",value:c.MultiplyBlending},{title:"Custom",value:c.CustomBlending}],Wn=[{title:"Add",value:c.AddEquation},{title:"Subtract",value:c.SubtractEquation},{title:"Reverse Subtract",value:c.ReverseSubtractEquation},{title:"Min",value:c.MinEquation},{title:"Max",value:c.MaxEquation}],$n=[{title:"Zero",valye:c.ZeroFactor},{title:"One",valye:c.OneFactor},{title:"Src Color",valye:c.SrcColorFactor},{title:"One Minus Src Color",valye:c.OneMinusSrcColorFactor},{title:"Src Alpha",valye:c.SrcAlphaFactor},{title:"One Minus Src Alpha",valye:c.OneMinusSrcAlphaFactor},{title:"Dst Alpha",valye:c.DstAlphaFactor},{title:"One Minus Dst Alpha",valye:c.OneMinusDstAlphaFactor},{title:"Dst Color",valye:c.DstColorFactor},{title:"One Minus Dst Color",valye:c.OneMinusDstColorFactor},{title:"Src Alpha Saturate",valye:c.SrcAlphaSaturateFactor},{title:"Constant Color",valye:c.ConstantColorFactor},{title:"One Minus Constant Color",valye:c.OneMinusConstantColorFactor},{title:"Constant Alpha",valye:c.ConstantAlphaFactor},{title:"One Minus Constant Alpha",valye:c.OneMinusConstantAlphaFactor}],qn=[{title:"Zero",valye:c.ZeroFactor},{title:"One",valye:c.OneFactor},{title:"Src Color",valye:c.SrcColorFactor},{title:"One Minus Src Color",valye:c.OneMinusSrcColorFactor},{title:"Src Alpha",valye:c.SrcAlphaFactor},{title:"One Minus Src Alpha",valye:c.OneMinusSrcAlphaFactor},{title:"Dst Alpha",valye:c.DstAlphaFactor},{title:"One Minus Dst Alpha",valye:c.OneMinusDstAlphaFactor},{title:"Dst Color",valye:c.DstColorFactor},{title:"One Minus Dst Color",valye:c.OneMinusDstColorFactor},{title:"Constant Color",valye:c.ConstantColorFactor},{title:"One Minus Constant Color",valye:c.OneMinusConstantColorFactor},{title:"Constant Alpha",valye:c.ConstantAlphaFactor},{title:"One Minus Constant Alpha",valye:c.OneMinusConstantAlphaFactor}];function at(e,n){e.needsUpdate=!0,e.type="option",e.options=n}function Ut(e,n,a){const t=[];for(const r in e){if(!Vn(r))continue;const l=typeof e[r],m=e[r];if(l==="boolean"||l==="number"||l==="string"){const s={title:Ve(r),prop:r,type:l,value:m,min:void 0,max:void 0,needsUpdate:l==="boolean",onChange:(f,g)=>{a.updateObject(n.uuid,`material.${f}`,g),s.needsUpdate&&a.updateObject(n.uuid,"material.needsUpdate",!0);const y=a.scene?.getObjectByProperty("uuid",n.uuid);y!==void 0&&te(y,`material.${f}`,g)}};switch(r){case"blending":at(s,Gn);break;case"blendDst":at(s,qn);break;case"blendEquation":at(s,Wn);break;case"blendSrc":at(s,$n);break;case"side":at(s,Hn);break}zn(r)&&(s.value=Number(m),s.type="range",s.min=0,s.max=1,s.step=.01);const d=l==="string"&&(r==="vertexShader"||r==="fragmentShader");d&&(s.disabled=!1,s.latest=s.value,s.onChange=(f,g)=>{s.latest=g}),t.push(s),d&&t.push({title:`${Ke(r)} - Update`,type:"button",onChange:()=>{a.updateObject(n.uuid,`material.${r}`,s.latest),a.updateObject(n.uuid,"material.needsUpdate",!0);const f=a.scene?.getObjectByProperty("uuid",n.uuid);f!==void 0&&(te(f,`material.${r}`,s.latest),f.material.needsUpdate=!0)}})}else if(l==="object")if(m.isColor)t.push({title:Ve(r),prop:r,type:"color",value:m,onChange:(s,d)=>{const f=new c.Color(d);a.updateObject(n.uuid,`material.${s}`,f);const g=a.scene?.getObjectByProperty("uuid",n.uuid);g!==void 0&&te(g,`material.${s}`,f)}});else if(Array.isArray(m)){const s=[];for(const d in m)s.push({title:`${d}`,type:`${typeof m[d]}`,value:m[d],onChange:(f,g)=>{a.updateObject(n.uuid,`material.${r}`,g);const y=a.scene?.getObjectByProperty("uuid",n.uuid);y!==void 0&&te(y,`material.${r}`,g)}});t.push({title:Ve(r),items:s})}else{const s=[];for(const d in m){const f=m[d];switch(typeof f){case"boolean":case"number":case"string":d==="src"?t.push({title:Ve(r),type:"image",value:f,onChange:(y,S)=>{a.createTexture(n.uuid,`material.${r}`,S);const x=a.scene?.getObjectByProperty("uuid",n.uuid);x!==void 0&&Tt(S).then(N=>{te(x,`material.${r}`,N),te(x,"material.needsUpdate",!0)})}}):s.push({title:`${Ve(d)}`,prop:`material.${r}.${d}`,type:`${typeof e[r][d]}`,value:m[d],onChange:(y,S)=>{a.updateObject(n.uuid,`material.${r}.${d}`,S);const x=a.scene?.getObjectByProperty("uuid",n.uuid);x!==void 0&&te(x,`material.${r}.${d}`,S)}});break;case"object":if(f.value!==void 0&&f.value.src!==void 0)s.push({title:Ve(d),type:"image",value:f.value.src,onChange:(y,S)=>{a.createTexture(n.uuid,`material.${r}.${d}.value`,m);const x=a.scene?.getObjectByProperty("uuid",n.uuid);x!==void 0&&Tt(S).then(N=>{te(x,`material.${r}.${d}.value`,N)})}});else if(r==="uniforms"){const y=f.value,S=(x,N,L)=>({title:x,type:"number",value:L,step:.01,onChange:(K,V)=>{const R=`material.uniforms.${d}.value.${N}`;a.updateObject(n.uuid,R,V);const H=a.scene?.getObjectByProperty("uuid",n.uuid);H!==void 0&&te(H,R,V)}});if(typeof f.value=="number")s.push({title:d,type:"number",value:f.value,onChange:(x,N)=>{const L=`material.${r}.${x}.value`;a.updateObject(n.uuid,L,N);const K=a.scene?.getObjectByProperty("uuid",n.uuid);K!==void 0&&te(K,L,N)}});else if(y.r!==void 0&&y.g!==void 0&&y.b!==void 0)s.push({title:d,type:"color",value:f.value,onChange:(x,N)=>{const L=new c.Color(N),K=`material.${r}.${x}.value`;a.updateObject(n.uuid,K,L);const V=a.scene?.getObjectByProperty("uuid",n.uuid);V!==void 0&&te(V,K,L)}});else if(y.x!==void 0&&y.y!==void 0&&y.z===void 0&&y.w===void 0)s.push({title:d,items:[S("X","x",f.value.x),S("Y","y",f.value.y)]});else if(y.x!==void 0&&y.y!==void 0&&y.z!==void 0&&y.w===void 0)s.push({title:d,items:[S("X","x",f.value.x),S("Y","y",f.value.y),S("Z","z",f.value.z)]});else if(y.x!==void 0&&y.y!==void 0&&y.z!==void 0&&y.w!==void 0)s.push({title:d,items:[S("X","x",f.value.x),S("Y","y",f.value.y),S("Z","z",f.value.z),S("W","w",f.value.w)]});else if(y.elements!==void 0){const x=y.elements,N=[];for(let L=0;L<x.length;L++)N.push(S(L.toString(),L.toString(),x[L]));s.push({title:d,items:N})}else console.log(">>> need to add this format:",d,y)}else s.push({title:d,type:`${typeof f.value}`,value:f.value,onChange:(y,S)=>{a.updateObject(n.uuid,`material.${r}.${d}.value`,S);const x=a.scene?.getObjectByProperty("uuid",n.uuid);x!==void 0&&te(x,`material.${r}.${d}.value`,S)}});break}}s.length>0&&t.push({title:Ve(r),items:s})}else m!==void 0&&console.log("other:",r,l,m)}return t.sort((r,l)=>r.title<l.title?-1:r.title>l.title?1:0),t.push({title:"Update Material",type:"button",onChange:()=>{a.updateObject(n.uuid,"material.needsUpdate",!0)}}),t}function Kn(e,n){const a=e.material;if(Array.isArray(a)){const t=[],r=a.length;for(let l=0;l<r;l++)t.push(u.jsx(Ye,{title:`Material ${l}`,items:Ut(a[l],e,n)},`Material ${l}`));return u.jsx(u.Fragment,{children:t})}else return u.jsx(Ye,{title:"Material",items:Ut(a,e,n)})}function it(e){let n=e.value;n!==void 0&&n.isColor!==void 0&&(n=Kt(e.value));const[a,t]=C.useState(n),r=C.useRef(null),l=C.useRef(null),m=C.useRef(null);C.useEffect(()=>{let g=!1,y=-1,S=0,x=Number(a);const N=H=>{g=!0,S=x,y=H.clientX},L=H=>{if(!g)return;const Ce=e.step!==void 0?e.step:1,ce=(H.clientX-y)*Ce;x=Number((S+ce).toFixed(4)),l.current!==null&&(l.current.value=x.toString()),e.onChange!==void 0&&e.onChange(e.prop!==void 0?e.prop:e.title,x)},K=()=>{g=!1},V=()=>{g=!1},R=e.type==="number";return R&&(r.current?.addEventListener("mousedown",N,!1),document.addEventListener("mouseup",K,!1),document.addEventListener("mousemove",L,!1),document.addEventListener("contextmenu",V,!1)),()=>{R&&(r.current?.removeEventListener("mousedown",N),document.removeEventListener("mouseup",K),document.removeEventListener("mousemove",L),document.removeEventListener("contextmenu",V))}},[a]);const s=e.type==="string"&&(a.length>100||a.search(`
30
+ `)>-1),d=s||e.type==="image",f=g=>{let y=g.target.value;e.type==="boolean"?y=g.target.checked:e.type==="option"&&(y=e.options[y].value),t(y),e.onChange!==void 0&&e.onChange(e.prop!==void 0?e.prop:e.title,y)};return u.jsxs("div",{className:`field ${d?"block":""}`,children:[e.type!=="button"&&u.jsx("label",{ref:r,children:Ke(e.title)},"fieldLabel"),e.type==="string"&&!s&&u.jsx("input",{type:"text",disabled:e.disabled,onChange:f,value:a}),e.type==="string"&&s&&u.jsx("textarea",{cols:50,rows:10,disabled:e.disabled!==void 0?e.disabled:!0,onChange:f,value:a}),e.type==="boolean"&&u.jsx("input",{type:"checkbox",disabled:e.disabled,onChange:f,checked:a}),e.type==="number"&&u.jsx("input",{ref:l,type:"number",value:a,min:e.min,max:e.max,step:e.step,disabled:e.disabled,onChange:f}),e.type==="range"&&u.jsxs(u.Fragment,{children:[u.jsx("input",{type:"text",value:a.toString(),onChange:f,disabled:e.disabled,className:"min"}),u.jsx("input",{disabled:e.disabled,type:"range",value:a,min:e.min,max:e.max,step:e.step,onChange:f})]}),e.type==="color"&&u.jsxs(u.Fragment,{children:[u.jsx("input",{type:"text",value:a.toString(),onChange:f,disabled:e.disabled,className:"color"}),u.jsx("input",{type:"color",value:a,onChange:f,disabled:e.disabled})]}),e.type==="button"&&u.jsx("button",{disabled:e.disabled,onClick:()=>{e.onChange!==void 0&&e.onChange(e.prop!==void 0?e.prop:e.title,!0)},children:e.title}),e.type==="image"&&u.jsx("img",{ref:m,onClick:()=>{Yn().then(g=>{m.current.src=g,e.onChange!==void 0&&e.onChange(e.prop!==void 0?e.prop:e.title,g)})},src:a.length>0?a:Un}),e.type==="option"&&u.jsx(u.Fragment,{children:u.jsx("select",{onChange:f,disabled:e.disabled,defaultValue:e.value,children:e.options?.map((g,y)=>u.jsx("option",{value:g.value,children:Ke(g.title)},y))})})]})}function Bt(e){switch(e){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 e}function Xn(e,n){const a=[];if(e.perspectiveCameraInfo!==void 0)for(const t in e.perspectiveCameraInfo)a.push({title:Bt(t),prop:t,type:"number",step:.01,value:e.perspectiveCameraInfo[t],onChange:(r,l)=>{n.updateObject(e.uuid,r,l),n.requestMethod(e.uuid,"updateProjectionMatrix");const m=n.scene?.getObjectByProperty("uuid",e.uuid);m!==void 0&&(te(m,r,l),m.updateProjectionMatrix())}});else if(e.orthographicCameraInfo!==void 0)for(const t in e.orthographicCameraInfo)a.push({title:Bt(t),prop:t,type:"number",step:.01,value:e.perspectiveCameraInfo[t],onChange:(r,l)=>{n.updateObject(e.uuid,r,l),n.requestMethod(e.uuid,"updateProjectionMatrix");const m=n.scene?.getObjectByProperty("uuid",e.uuid);m!==void 0&&(te(m,r,l),m.updateProjectionMatrix())}});return u.jsx(Ye,{title:"Camera",items:a})}const Zn=Math.PI/180,Jn=180/Math.PI;function $e(e,n,a,t,r){return t+(e-n)*(r-t)/(a-n)}function Qn(e){return e*Zn}function Ot(e){return e*Jn}function ea(e,n){const a=new c.Matrix4;a.elements=e.matrix;const t=new c.Vector3,r=new c.Euler,l=new c.Vector3;e.uuid.length>0&&(t.setFromMatrixPosition(a),r.setFromRotationMatrix(a),l.setFromMatrixScale(a));const m=(d,f)=>{n.updateObject(e.uuid,d,f);const g=n.scene?.getObjectByProperty("uuid",e.uuid);g!==void 0&&te(g,d,f)},s=(d,f)=>{m(d,Qn(f))};return u.jsx(Ye,{title:"Transform",items:[{title:"Position X",prop:"position.x",type:"number",value:t.x,onChange:m},{title:"Position Y",prop:"position.y",type:"number",value:t.y,onChange:m},{title:"Position Z",prop:"position.z",type:"number",value:t.z,onChange:m},{title:"Rotation X",prop:"rotation.x",type:"number",value:vt(Ot(r.x)),min:-360,max:360,step:.1,onChange:s},{title:"Rotation Y",prop:"rotation.y",type:"number",value:vt(Ot(r.y)),min:-360,max:360,step:.1,onChange:s},{title:"Rotation Z",prop:"rotation.z",type:"number",value:vt(Ot(r.z)),min:-360,max:360,step:.1,onChange:s},{title:"Scale X",prop:"scale.x",type:"number",value:l.x,step:.01,onChange:m},{title:"Scale Y",prop:"scale.y",type:"number",value:l.y,step:.01,onChange:m},{title:"Scale Z",prop:"scale.z",type:"number",value:l.z,step:.01,onChange:m}]})}function Vt(e){switch(e){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"}return e}function ta(e,n){const a=[];if(e.lightInfo!==void 0)for(const t in e.lightInfo){const r=e.lightInfo[t];r!==void 0&&(r.isColor!==void 0?a.push({title:Vt(t),prop:t,type:"color",value:r,onChange:(l,m)=>{const s=new c.Color(m);n.updateObject(e.uuid,l,s);const d=n.scene?.getObjectByProperty("uuid",e.uuid);d!==void 0&&te(d,l,s)}}):a.push({title:Vt(t),prop:t,type:typeof r,value:r,step:typeof r=="number"?.01:void 0,onChange:(l,m)=>{n.updateObject(e.uuid,l,m);const s=n.scene?.getObjectByProperty("uuid",e.uuid);s!==void 0&&te(s,l,m)}}))}return u.jsx(Ye,{title:"Light",items:a})}function na(e,n){const a=[],t=[];let r=0;e.animations.forEach(s=>{r=Math.max(r,s.duration),s.duration>0&&t.push({title:s.name,items:[{title:"Duration",type:"number",value:s.duration,disabled:!0},{title:"Blend Mode",type:"option",disabled:!0,options:[{title:"Normal",value:2500},{title:"Additive",value:2501}]}]})}),a.push({title:"Animations",items:t});const l=n.scene?.getObjectByProperty("uuid",e.uuid);let m=!1;if(l!==void 0){const s=l.mixer;if(m=s!==void 0,m){const d=[{title:"Time Scale",type:"range",value:s.timeScale,step:.01,min:-1,max:2,onChange:(f,g)=>{s.timeScale=g,n.updateObject(e.uuid,"mixer.timeScale",g)}}];d.push({title:"Stop All",type:"button",onChange:()=>{s.stopAllAction(),n.requestMethod(e.uuid,"stopAllAction",void 0,"mixer")}}),a.push({title:"Mixer",items:d})}}return u.jsx(Ye,{title:"Animation",items:a})}const on={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};let oe={...on};function sn(e){const[n,a]=C.useState(-1);C.useEffect(()=>{function m(d){oe={...d.value},a(Date.now())}function s(){oe={...on},a(Date.now())}return j.addEventListener(D.SET_SCENE,s),j.addEventListener(D.SET_OBJECT,m),()=>{j.removeEventListener(D.SET_SCENE,s),j.removeEventListener(D.SET_OBJECT,m)}},[]);const t=oe.type.toLowerCase(),r=oe.animations.length>0||oe.mixer!==void 0,l=t.search("mesh")>-1||t.search("line")>-1||t.search("points")>-1;return u.jsx(bt,{label:"Inspector",children:u.jsx("div",{id:"Inspector",className:e.class,children:oe.uuid.length>0&&u.jsxs(u.Fragment,{children:[u.jsxs(u.Fragment,{children:[u.jsx(it,{type:"string",title:"Name",prop:"name",value:oe.name,disabled:!0}),u.jsx(it,{type:"string",title:"Type",prop:"type",value:oe.type,disabled:!0}),u.jsx(it,{type:"string",title:"UUID",prop:"uuid",value:oe.uuid,disabled:!0}),u.jsx(it,{type:"boolean",title:"Visible",prop:"visible",value:oe.visible,onChange:(m,s)=>{e.three.updateObject(oe.uuid,m,s);const d=e.three.scene?.getObjectByProperty("uuid",oe.uuid);d!==void 0&&te(d,m,s)}})]}),u.jsxs(u.Fragment,{children:[ea(oe,e.three),r?na(oe,e.three):null,t.search("camera")>-1?Xn(oe,e.three):null,t.search("light")>-1?ta(oe,e.three):null,l?Kn(oe,e.three):null]})]})},n)},"Inspector")}function aa(e){const[n,a]=C.useState(e.scene);C.useEffect(()=>{const l=m=>{a(m.value)};return j.addEventListener(D.SET_SCENE,l),()=>{j.removeEventListener(D.SET_SCENE,l)}},[]);const t=n!==null,r="Hierarchy - "+(t?`${n?.name}`:"No Scene");return u.jsxs("div",{id:"SidePanel",children:[u.jsx(bt,{label:r,open:!0,children:u.jsx(u.Fragment,{children:t&&u.jsx(rn,{child:n,three:e.three})})}),u.jsx(sn,{three:e.three})]},"SidePanel")}function ia(e){function n(){return e.three.scene===void 0?(console.log("No scene:",e.three),!1):!0}const a=s=>{if(!n())return;const d=e.three.scene?.getObjectByProperty("uuid",s.value);d!==void 0&&e.three.setObject(d)},t=(s,d,f)=>{if(!n())return;const g=e.three.scene?.getObjectByProperty("uuid",s);g!==void 0&&te(g,d,f)},r=s=>{if(!n())return;const d=s.value,{key:f,value:g,uuid:y}=d;t(y,f,g)},l=s=>{if(!n())return;const d=s.value;Tt(d.value).then(f=>{t(d.uuid,d.key,f),t(d.uuid,"material.needsUpdate",!0)})},m=s=>{if(!n())return;const{key:d,uuid:f,value:g,subitem:y}=s.value,S=e.three.scene?.getObjectByProperty("uuid",f);if(S!==void 0)try{y!==void 0?kn(S,y)[d](g):S[d](g)}catch(x){console.log("Error requesting method:"),console.log(x),console.log(d),console.log(g)}};return C.useEffect(()=>(j.addEventListener(D.GET_OBJECT,a),j.addEventListener(D.UPDATE_OBJECT,r),j.addEventListener(D.CREATE_TEXTURE,l),j.addEventListener(D.REQUEST_METHOD,m),()=>{j.removeEventListener(D.GET_OBJECT,a),j.removeEventListener(D.UPDATE_OBJECT,r),j.removeEventListener(D.CREATE_TEXTURE,l),j.removeEventListener(D.REQUEST_METHOD,m)}),[]),null}const zt={type:"change"},Mt={type:"start"},Yt={type:"end"},pt=new c.Ray,Ht=new c.Plane,ra=Math.cos(70*c.MathUtils.DEG2RAD);class oa extends c.EventDispatcher{constructor(n,a){super(),this.object=n,this.domElement=a,this.domElement.style.touchAction="none",this.enabled=!0,this.target=new c.Vector3,this.cursor=new c.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:c.MOUSE.ROTATE,MIDDLE:c.MOUSE.DOLLY,RIGHT:c.MOUSE.PAN},this.touches={ONE:c.TOUCH.ROTATE,TWO:c.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 s.phi},this.getAzimuthalAngle=function(){return s.theta},this.getDistance=function(){return this.object.position.distanceTo(this.target)},this.listenToKeyEvents=function(o){o.addEventListener("keydown",Je),this._domElementKeyEvents=o},this.stopListenToKeyEvents=function(){this._domElementKeyEvents.removeEventListener("keydown",Je),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(zt),t.update(),l=r.NONE},this.update=function(){const o=new c.Vector3,E=new c.Quaternion().setFromUnitVectors(n.up,new c.Vector3(0,1,0)),T=E.clone().invert(),F=new c.Vector3,q=new c.Quaternion,ge=new c.Vector3,le=2*Math.PI;return function(xt=null){const et=t.object.position;o.copy(et).sub(t.target),o.applyQuaternion(E),s.setFromVector3(o),t.autoRotate&&l===r.NONE&&he(De(xt)),t.enableDamping?(s.theta+=d.theta*t.dampingFactor,s.phi+=d.phi*t.dampingFactor):(s.theta+=d.theta,s.phi+=d.phi);let Se=t.minAzimuthAngle,be=t.maxAzimuthAngle;isFinite(Se)&&isFinite(be)&&(Se<-Math.PI?Se+=le:Se>Math.PI&&(Se-=le),be<-Math.PI?be+=le:be>Math.PI&&(be-=le),Se<=be?s.theta=Math.max(Se,Math.min(be,s.theta)):s.theta=s.theta>(Se+be)/2?Math.max(Se,s.theta):Math.min(be,s.theta)),s.phi=Math.max(t.minPolarAngle,Math.min(t.maxPolarAngle,s.phi)),s.makeSafe(),t.enableDamping===!0?t.target.addScaledVector(g,t.dampingFactor):t.target.add(g),t.target.sub(t.cursor),t.target.clampLength(t.minTargetRadius,t.maxTargetRadius),t.target.add(t.cursor),t.zoomToCursor&&G||t.object.isOrthographicCamera?s.radius=Re(s.radius):s.radius=Re(s.radius*f),o.setFromSpherical(s),o.applyQuaternion(T),et.copy(t.target).add(o),t.object.lookAt(t.target),t.enableDamping===!0?(d.theta*=1-t.dampingFactor,d.phi*=1-t.dampingFactor,g.multiplyScalar(1-t.dampingFactor)):(d.set(0,0,0),g.set(0,0,0));let Le=!1;if(t.zoomToCursor&&G){let Fe=null;if(t.object.isPerspectiveCamera){const Ue=o.length();Fe=Re(Ue*f);const Be=Ue-Fe;t.object.position.addScaledVector(Ce,Be),t.object.updateMatrixWorld()}else if(t.object.isOrthographicCamera){const Ue=new c.Vector3(ce.x,ce.y,0);Ue.unproject(t.object),t.object.zoom=Math.max(t.minZoom,Math.min(t.maxZoom,t.object.zoom/f)),t.object.updateProjectionMatrix(),Le=!0;const Be=new c.Vector3(ce.x,ce.y,0);Be.unproject(t.object),t.object.position.sub(Be).add(Ue),t.object.updateMatrixWorld(),Fe=o.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),t.zoomToCursor=!1;Fe!==null&&(this.screenSpacePanning?t.target.set(0,0,-1).transformDirection(t.object.matrix).multiplyScalar(Fe).add(t.object.position):(pt.origin.copy(t.object.position),pt.direction.set(0,0,-1).transformDirection(t.object.matrix),Math.abs(t.object.up.dot(pt.direction))<ra?n.lookAt(t.target):(Ht.setFromNormalAndCoplanarPoint(t.object.up,t.target),pt.intersectPlane(Ht,t.target))))}else t.object.isOrthographicCamera&&(Le=f!==1,Le&&(t.object.zoom=Math.max(t.minZoom,Math.min(t.maxZoom,t.object.zoom/f)),t.object.updateProjectionMatrix()));return f=1,G=!1,Le||F.distanceToSquared(t.object.position)>m||8*(1-q.dot(t.object.quaternion))>m||ge.distanceToSquared(t.target)>0?(t.dispatchEvent(zt),F.copy(t.object.position),q.copy(t.object.quaternion),ge.copy(t.target),!0):!1}}(),this.dispose=function(){t.domElement.removeEventListener("contextmenu",He),t.domElement.removeEventListener("pointerdown",Ie),t.domElement.removeEventListener("pointercancel",Ne),t.domElement.removeEventListener("wheel",ct),t.domElement.removeEventListener("pointermove",Xe),t.domElement.removeEventListener("pointerup",Ne),t._domElementKeyEvents!==null&&(t._domElementKeyEvents.removeEventListener("keydown",Je),t._domElementKeyEvents=null)};const t=this,r={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6};let l=r.NONE;const m=1e-6,s=new c.Spherical,d=new c.Spherical;let f=1;const g=new c.Vector3,y=new c.Vector2,S=new c.Vector2,x=new c.Vector2,N=new c.Vector2,L=new c.Vector2,K=new c.Vector2,V=new c.Vector2,R=new c.Vector2,H=new c.Vector2,Ce=new c.Vector3,ce=new c.Vector2;let G=!1;const ee=[],O={};let Me=!1;function De(o){return o!==null?2*Math.PI/60*t.autoRotateSpeed*o:2*Math.PI/60/60*t.autoRotateSpeed}function xe(o){const E=Math.abs(o*.01);return Math.pow(.95,t.zoomSpeed*E)}function he(o){d.theta-=o}function ne(o){d.phi-=o}const de=function(){const o=new c.Vector3;return function(T,F){o.setFromMatrixColumn(F,0),o.multiplyScalar(-T),g.add(o)}}(),me=function(){const o=new c.Vector3;return function(T,F){t.screenSpacePanning===!0?o.setFromMatrixColumn(F,1):(o.setFromMatrixColumn(F,0),o.crossVectors(t.object.up,o)),o.multiplyScalar(T),g.add(o)}}(),ve=function(){const o=new c.Vector3;return function(T,F){const q=t.domElement;if(t.object.isPerspectiveCamera){const ge=t.object.position;o.copy(ge).sub(t.target);let le=o.length();le*=Math.tan(t.object.fov/2*Math.PI/180),de(2*T*le/q.clientHeight,t.object.matrix),me(2*F*le/q.clientHeight,t.object.matrix)}else t.object.isOrthographicCamera?(de(T*(t.object.right-t.object.left)/t.object.zoom/q.clientWidth,t.object.matrix),me(F*(t.object.top-t.object.bottom)/t.object.zoom/q.clientHeight,t.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),t.enablePan=!1)}}();function X(o){t.object.isPerspectiveCamera||t.object.isOrthographicCamera?f/=o:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),t.enableZoom=!1)}function pe(o){t.object.isPerspectiveCamera||t.object.isOrthographicCamera?f*=o:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),t.enableZoom=!1)}function Te(o,E){if(!t.zoomToCursor)return;G=!0;const T=t.domElement.getBoundingClientRect(),F=o-T.left,q=E-T.top,ge=T.width,le=T.height;ce.x=F/ge*2-1,ce.y=-(q/le)*2+1,Ce.set(ce.x,ce.y,1).unproject(t.object).sub(t.object.position).normalize()}function Re(o){return Math.max(t.minDistance,Math.min(t.maxDistance,o))}function fe(o){y.set(o.clientX,o.clientY)}function h(o){Te(o.clientX,o.clientX),V.set(o.clientX,o.clientY)}function v(o){N.set(o.clientX,o.clientY)}function M(o){S.set(o.clientX,o.clientY),x.subVectors(S,y).multiplyScalar(t.rotateSpeed);const E=t.domElement;he(2*Math.PI*x.x/E.clientHeight),ne(2*Math.PI*x.y/E.clientHeight),y.copy(S),t.update()}function A(o){R.set(o.clientX,o.clientY),H.subVectors(R,V),H.y>0?X(xe(H.y)):H.y<0&&pe(xe(H.y)),V.copy(R),t.update()}function W(o){L.set(o.clientX,o.clientY),K.subVectors(L,N).multiplyScalar(t.panSpeed),ve(K.x,K.y),N.copy(L),t.update()}function $(o){Te(o.clientX,o.clientY),o.deltaY<0?pe(xe(o.deltaY)):o.deltaY>0&&X(xe(o.deltaY)),t.update()}function ie(o){let E=!1;switch(o.code){case t.keys.UP:o.ctrlKey||o.metaKey||o.shiftKey?ne(2*Math.PI*t.rotateSpeed/t.domElement.clientHeight):ve(0,t.keyPanSpeed),E=!0;break;case t.keys.BOTTOM:o.ctrlKey||o.metaKey||o.shiftKey?ne(-2*Math.PI*t.rotateSpeed/t.domElement.clientHeight):ve(0,-t.keyPanSpeed),E=!0;break;case t.keys.LEFT:o.ctrlKey||o.metaKey||o.shiftKey?he(2*Math.PI*t.rotateSpeed/t.domElement.clientHeight):ve(t.keyPanSpeed,0),E=!0;break;case t.keys.RIGHT:o.ctrlKey||o.metaKey||o.shiftKey?he(-2*Math.PI*t.rotateSpeed/t.domElement.clientHeight):ve(-t.keyPanSpeed,0),E=!0;break}E&&(o.preventDefault(),t.update())}function z(o){if(ee.length===1)y.set(o.pageX,o.pageY);else{const E=Ae(o),T=.5*(o.pageX+E.x),F=.5*(o.pageY+E.y);y.set(T,F)}}function Z(o){if(ee.length===1)N.set(o.pageX,o.pageY);else{const E=Ae(o),T=.5*(o.pageX+E.x),F=.5*(o.pageY+E.y);N.set(T,F)}}function re(o){const E=Ae(o),T=o.pageX-E.x,F=o.pageY-E.y,q=Math.sqrt(T*T+F*F);V.set(0,q)}function P(o){t.enableZoom&&re(o),t.enablePan&&Z(o)}function B(o){t.enableZoom&&re(o),t.enableRotate&&z(o)}function ae(o){if(ee.length==1)S.set(o.pageX,o.pageY);else{const T=Ae(o),F=.5*(o.pageX+T.x),q=.5*(o.pageY+T.y);S.set(F,q)}x.subVectors(S,y).multiplyScalar(t.rotateSpeed);const E=t.domElement;he(2*Math.PI*x.x/E.clientHeight),ne(2*Math.PI*x.y/E.clientHeight),y.copy(S)}function Ee(o){if(ee.length===1)L.set(o.pageX,o.pageY);else{const E=Ae(o),T=.5*(o.pageX+E.x),F=.5*(o.pageY+E.y);L.set(T,F)}K.subVectors(L,N).multiplyScalar(t.panSpeed),ve(K.x,K.y),N.copy(L)}function we(o){const E=Ae(o),T=o.pageX-E.x,F=o.pageY-E.y,q=Math.sqrt(T*T+F*F);R.set(0,q),H.set(0,Math.pow(R.y/V.y,t.zoomSpeed)),X(H.y),V.copy(R);const ge=(o.pageX+E.x)*.5,le=(o.pageY+E.y)*.5;Te(ge,le)}function ot(o){t.enableZoom&&we(o),t.enablePan&&Ee(o)}function st(o){t.enableZoom&&we(o),t.enableRotate&&ae(o)}function Ie(o){t.enabled!==!1&&(ee.length===0&&(t.domElement.setPointerCapture(o.pointerId),t.domElement.addEventListener("pointermove",Xe),t.domElement.addEventListener("pointerup",Ne)),Et(o),o.pointerType==="touch"?Qe(o):Ze(o))}function Xe(o){t.enabled!==!1&&(o.pointerType==="touch"?dt(o):yt(o))}function Ne(o){switch(St(o),ee.length){case 0:t.domElement.releasePointerCapture(o.pointerId),t.domElement.removeEventListener("pointermove",Xe),t.domElement.removeEventListener("pointerup",Ne),t.dispatchEvent(Yt),l=r.NONE;break;case 1:const E=ee[0],T=O[E];Qe({pointerId:E,pageX:T.x,pageY:T.y});break}}function Ze(o){let E;switch(o.button){case 0:E=t.mouseButtons.LEFT;break;case 1:E=t.mouseButtons.MIDDLE;break;case 2:E=t.mouseButtons.RIGHT;break;default:E=-1}switch(E){case c.MOUSE.DOLLY:if(t.enableZoom===!1)return;h(o),l=r.DOLLY;break;case c.MOUSE.ROTATE:if(o.ctrlKey||o.metaKey||o.shiftKey){if(t.enablePan===!1)return;v(o),l=r.PAN}else{if(t.enableRotate===!1)return;fe(o),l=r.ROTATE}break;case c.MOUSE.PAN:if(o.ctrlKey||o.metaKey||o.shiftKey){if(t.enableRotate===!1)return;fe(o),l=r.ROTATE}else{if(t.enablePan===!1)return;v(o),l=r.PAN}break;default:l=r.NONE}l!==r.NONE&&t.dispatchEvent(Mt)}function yt(o){switch(l){case r.ROTATE:if(t.enableRotate===!1)return;M(o);break;case r.DOLLY:if(t.enableZoom===!1)return;A(o);break;case r.PAN:if(t.enablePan===!1)return;W(o);break}}function ct(o){t.enabled===!1||t.enableZoom===!1||l!==r.NONE||(o.preventDefault(),t.dispatchEvent(Mt),$(lt(o)),t.dispatchEvent(Yt))}function lt(o){const E=o.deltaMode,T={clientX:o.clientX,clientY:o.clientY,deltaY:o.deltaY};switch(E){case 1:T.deltaY*=16;break;case 2:T.deltaY*=100;break}return o.ctrlKey&&!Me&&(T.deltaY*=10),T}function ut(o){o.key==="Control"&&(Me=!0,t.domElement.getRootNode().addEventListener("keyup",_e,{passive:!0,capture:!0}))}function _e(o){o.key==="Control"&&(Me=!1,t.domElement.getRootNode().removeEventListener("keyup",_e,{passive:!0,capture:!0}))}function Je(o){t.enabled===!1||t.enablePan===!1||ie(o)}function Qe(o){switch(ft(o),ee.length){case 1:switch(t.touches.ONE){case c.TOUCH.ROTATE:if(t.enableRotate===!1)return;z(o),l=r.TOUCH_ROTATE;break;case c.TOUCH.PAN:if(t.enablePan===!1)return;Z(o),l=r.TOUCH_PAN;break;default:l=r.NONE}break;case 2:switch(t.touches.TWO){case c.TOUCH.DOLLY_PAN:if(t.enableZoom===!1&&t.enablePan===!1)return;P(o),l=r.TOUCH_DOLLY_PAN;break;case c.TOUCH.DOLLY_ROTATE:if(t.enableZoom===!1&&t.enableRotate===!1)return;B(o),l=r.TOUCH_DOLLY_ROTATE;break;default:l=r.NONE}break;default:l=r.NONE}l!==r.NONE&&t.dispatchEvent(Mt)}function dt(o){switch(ft(o),l){case r.TOUCH_ROTATE:if(t.enableRotate===!1)return;ae(o),t.update();break;case r.TOUCH_PAN:if(t.enablePan===!1)return;Ee(o),t.update();break;case r.TOUCH_DOLLY_PAN:if(t.enableZoom===!1&&t.enablePan===!1)return;ot(o),t.update();break;case r.TOUCH_DOLLY_ROTATE:if(t.enableZoom===!1&&t.enableRotate===!1)return;st(o),t.update();break;default:l=r.NONE}}function He(o){t.enabled!==!1&&o.preventDefault()}function Et(o){ee.push(o.pointerId)}function St(o){delete O[o.pointerId];for(let E=0;E<ee.length;E++)if(ee[E]==o.pointerId){ee.splice(E,1);return}}function ft(o){let E=O[o.pointerId];E===void 0&&(E=new c.Vector2,O[o.pointerId]=E),E.set(o.pageX,o.pageY)}function Ae(o){const E=o.pointerId===ee[0]?ee[1]:ee[0];return O[E]}t.domElement.addEventListener("contextmenu",He),t.domElement.addEventListener("pointerdown",Ie),t.domElement.addEventListener("pointercancel",Ne),t.domElement.addEventListener("wheel",ct,{passive:!1}),t.domElement.getRootNode().addEventListener("keydown",ut,{passive:!0,capture:!0}),this.update()}}const gt=e=>{const[n,a]=C.useState(e.options[e.index]),t=()=>{e.onToggle(!e.open)},r=l=>{l!==n&&(e.onSelect(l),a(l)),e.onToggle(!1)};return u.jsxs("div",{className:`dropdown ${e.up===!0?"up":""}`,children:[u.jsx("div",{className:"dropdown-toggle",onClick:t,children:n}),e.open&&u.jsx("ul",{className:"dropdown-menu",children:e.options.map(l=>u.jsx("li",{onClick:()=>r(l),children:l},l))})]})},ze=C.forwardRef(function(n,a){const[t,r]=C.useState(!1),l=n.options.indexOf(n.camera.name);return u.jsxs("div",{className:"CameraWindow",children:[u.jsx("div",{ref:a,className:"clickable",onClick:()=>{t&&r(!1)}}),u.jsx(gt,{index:l,open:t,options:n.options,onSelect:n.onSelect,onToggle:m=>{r(m)},up:!0})]})});class sa extends c.ShaderMaterial{constructor(n){super({extensions:{derivatives:!0},glslVersion:c.GLSL3,side:c.DoubleSide,transparent:!0,uniforms:{uScale:{value:n?.scale!==void 0?n?.scale:.1},uDivisions:{value:n?.divisions!==void 0?n?.divisions:10},uColor:{value:n?.color!==void 0?n?.color:new c.Color(16777215)},uDistance:{value:n?.distance!==void 0?n?.distance:1e4},uSubgridOpacity:{value:n?.subgridOpacity!==void 0?n?.subgridOpacity:.15},uGridOpacity:{value:n?.gridOpacity!==void 0?n?.gridOpacity:.25}},vertexShader:`out vec3 worldPosition;
31
+ uniform float uDistance;
32
+
33
+ void main() {
34
+ // Scale the plane by the drawing distance
35
+ worldPosition = position.xzy * uDistance;
36
+ worldPosition.xz += cameraPosition.xz;
37
+
38
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(worldPosition, 1.0);
39
+ }`,fragmentShader:`out vec4 fragColor;
40
+ in vec3 worldPosition;
41
+
42
+ uniform float uDivisions;
43
+ uniform float uScale;
44
+ uniform vec3 uColor;
45
+ uniform float uDistance;
46
+ uniform float uSubgridOpacity;
47
+ uniform float uGridOpacity;
48
+
49
+ float getGrid(float gapSize) {
50
+ vec2 worldPositionByDivision = worldPosition.xz / gapSize;
51
+
52
+ // Inverted, 0 where line, >1 where there's no line
53
+ // We use the worldPosition (which in this case we use similarly to UVs) differential to control the anti-aliasing
54
+ // We need to do the -0.5)-0.5 trick because the result fades out from 0 to 1, and we want both
55
+ // worldPositionByDivision == 0.3 and worldPositionByDivision == 0.7 to result in the same fade, i.e. 0.3,
56
+ // otherwise only one side of the line will be anti-aliased
57
+ vec2 grid = abs(fract(worldPositionByDivision-0.5)-0.5) / fwidth(worldPositionByDivision) / 2.0;
58
+ float gridLine = min(grid.x, grid.y);
59
+
60
+ // Uninvert and clamp
61
+ return 1.0 - min(gridLine, 1.0);
62
+ }
63
+
64
+ void main() {
65
+ float cameraDistanceToGridPlane = distance(cameraPosition.y, worldPosition.y);
66
+ float cameraDistanceToFragmentOnGridPlane = distance(cameraPosition.xz, worldPosition.xz);
67
+
68
+ // The size of the grid and subgrid are powers of each other and they are determined based on camera distance.
69
+ // The current grid will become the next subgrid when it becomes too small, and its next power becomes the new grid.
70
+ float subGridPower = pow(uDivisions, floor(log(cameraDistanceToGridPlane) / log(uDivisions)));
71
+ float gridPower = subGridPower * uDivisions;
72
+
73
+ // If we want to fade both the grid and its subgrid, we need to displays 3 different opacities, with the next grid being the third
74
+ float nextGridPower = gridPower * uDivisions;
75
+
76
+ // 1 where grid, 0 where no grid
77
+ float subgrid = getGrid(subGridPower * uScale);
78
+ float grid = getGrid(gridPower * uScale);
79
+ float nextGrid = getGrid(nextGridPower * uScale);
80
+
81
+ // Where we are between the introduction of the current grid power and when we switch to the next grid power
82
+ float stepPercentage = (cameraDistanceToGridPlane - subGridPower)/(gridPower - subGridPower);
83
+
84
+ // The last x percentage of the current step over which we want to fade
85
+ float fadeRange = 0.3;
86
+
87
+ // We calculate the fade percentage from the step percentage and the fade range
88
+ float fadePercentage = max(stepPercentage - 1.0 + fadeRange, 0.0) / fadeRange;
89
+
90
+ // Set base opacity based on how close we are to the drawing distance, with a cubic falloff
91
+ float baseOpacity = subgrid * pow(1.0 - min(cameraDistanceToFragmentOnGridPlane / uDistance, 1.0), 3.0);
92
+
93
+ // Shade the subgrid
94
+ fragColor = vec4(uColor.rgb, (baseOpacity - fadePercentage) * uSubgridOpacity);
95
+
96
+ // Somewhat arbitrary additional fade coefficient to counter anti-aliasing popping when switching between grid powers
97
+ float fadeCoefficient = 0.5;
98
+
99
+ // Shade the grid
100
+ fragColor.a = mix(fragColor.a, baseOpacity * uGridOpacity - fadePercentage * (uGridOpacity - uSubgridOpacity) * fadeCoefficient, grid);
101
+
102
+ // Shade the next grid
103
+ fragColor.a = mix(fragColor.a, baseOpacity * uGridOpacity, nextGrid);
104
+
105
+ if (fragColor.a <= 0.0) discard;
106
+ }`,name:"InfiniteGrid",depthWrite:!1})}}class ca extends c.Mesh{gridMaterial;constructor(){const n=new sa;super(new c.PlaneGeometry(2,2),n),this.gridMaterial=n,this.frustumCulled=!1,this.name="InfiniteGridHelper",this.position.y=.1}update(){this.gridMaterial.needsUpdate=!0}}const la=`#include <common>
106
107
  #include <batching_pars_vertex>
107
108
  #include <uv_pars_vertex>
108
109
  #include <color_pars_vertex>
@@ -132,7 +133,7 @@ void main() {
132
133
  #include <logdepthbuf_vertex>
133
134
  #include <clipping_planes_vertex>
134
135
  #include <worldpos_vertex>
135
- }`,Xn=`
136
+ }`,ua=`
136
137
  #include <common>
137
138
  #include <uv_pars_fragment>
138
139
  #include <clipping_planes_pars_fragment>
@@ -140,5 +141,4 @@ void main() {
140
141
  void main() {
141
142
  #include <clipping_planes_fragment>
142
143
  gl_FragColor = vec4(vec3(vUv, 0.0), 1.0);
143
- }`;class mn extends c.ShaderMaterial{constructor(){super({defines:{USE_UV:""},vertexShader:Kn,fragmentShader:Xn})}}function St(t){const[n,a]=R.useState(t.open!==void 0?t.open:!0),e=!n||t.children===void 0;return u.jsxs("div",{className:`accordion ${e?"hide":""}`,children:[u.jsxs("button",{className:"toggle",onClick:()=>{const o=!n;t.onToggle!==void 0&&t.onToggle(o),a(o)},children:[u.jsx("p",{className:`status ${n?"open":""}`,children:"Toggle"}),u.jsx("p",{className:"label",children:Ye(t.label)})]}),t.button,u.jsx("div",{className:n?"open":"",children:u.jsx("div",{children:t.children})})]})}function Bt(t){const[n,a]=R.useState(!1),e=t.child!==void 0&&t.child.children.length>0,o=[];return t.child!==void 0&&t.child.children.length>0&&t.child.children.map(l=>{o.push(u.jsx(Bt,{child:l,three:t.three},Math.random()))}),u.jsx(u.Fragment,{children:t.child!==void 0&&u.jsxs("div",{className:"childObject",children:[u.jsxs("div",{className:"child",children:[e?u.jsx("button",{className:"status",style:{backgroundPositionX:n?"-14px":"2px"},onClick:()=>{a(!n)}}):null,u.jsx("button",{className:"name",style:{left:e?"20px":"5px"},onClick:()=>{t.child!==void 0&&(t.three.getObject(t.child.uuid),n||a(!0))},children:t.child.name.length>0?`${t.child.name} (${t.child.type})`:`${t.child.type}::${t.child.uuid}`}),u.jsx("div",{className:`icon ${In(t.child)}`})]}),u.jsx("div",{className:n?"open":"",children:u.jsx("div",{className:"container",children:o})})]},Math.random())})}function vn(t){const n=[];return t.child?.children.map(a=>{n.push(u.jsx(Bt,{child:a,three:t.three},Math.random()))}),u.jsx("div",{className:`scene ${t.class!==void 0?t.class:""}`,children:n})}const Zn="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA5klEQVRoge2Y0Q6EIAwE6cX//+X6cCFpSMEKVTdk501OpRNKiyelFC0b8Ps6gCwoggZF0KAIGhRBgyJoUAQNiqCxjciR9SLV//eZiAyvK3U8i/QVaQO2YyLSFVvlkdTKDjJCukh2ykR5ZEW+kHmlatl90RaBtDkK/w7CYhuRUEO0ee3l+J3m55Vm+17vtwjTnV1V3QA8qfbeUXCzRWDpiLLS+OyzvRW7IzW9R+okvclsqR09743bo0yUpc1+lSJvNsa002+Euk9GKzV7SmZDRIMiaFAEDYqgQRE0KIIGRdCgCBoUQeMEMERadX7YUz8AAAAASUVORK5CYII=";function Jn(t){return"items"in t}function Ie(t){const n=[];return t.items.forEach(a=>{Jn(a)?n.push(u.jsx(Ie,{title:Ye(a.title),items:a.items},Math.random())):n.push(u.jsx(tt,{title:a.title,prop:a.prop,value:a.value,type:a.type,min:a.min,max:a.max,step:a.step,disabled:a.disabled,options:a.options,onChange:(e,o)=>{a.onChange!==void 0&&a.onChange(e,o)}},Math.random()))}),u.jsx(St,{label:t.title,open:t.expanded===!0,children:n})}function Qn(t){return!(t==="alphaHash"||t==="alphaToCoverage"||t==="attenuationDistance"||t==="blendDstAlpha"||t==="colorWrite"||t==="combine"||t==="defaultAttributeValues"||t==="depthFunc"||t==="forceSinglePass"||t==="glslVersion"||t==="linecap"||t==="linejoin"||t==="linewidth"||t==="normalMapType"||t==="precision"||t==="premultipliedAlpha"||t==="shadowSide"||t==="toneMapped"||t==="uniformsGroups"||t==="uniformsNeedUpdate"||t==="userData"||t==="vertexColors"||t==="version"||t==="wireframeLinecap"||t==="wireframeLinejoin"||t==="wireframeLinewidth"||t.slice(0,4)==="clip"||t.slice(0,7)==="polygon"||t.slice(0,7)==="stencil"||t.slice(0,2)==="is")}function Pe(t){switch(t){case"alphaMap":return"Alpha Map";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"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"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"defines":return"Defines";case"depthTest":return"Depth Test";case"depthWrite":return"Depth Write";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"extensions":return"Extensions";case"flatShading":return"Flat Shading";case"fragmentShader":return"Fragment Shader";case"fog":return"Fog";case"gradientMap":return"Gradient Map";case"ior":return"IOR";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"opacity":return"Opacity";case"reflectivity":return"Reflectivity";case"refractionRatio":return"Refraction Ratio";case"roughness":return"Roughness";case"roughnessMap":return"Roughness Map";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"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"vertexShader":return"Vertex Shader";case"visible":return"Visible";case"wireframe":return"Wireframe"}return t}function ea(t){return t.toLowerCase().search("intensity")>-1||t==="anisotropyRotation"||t==="blendAlpha"||t==="bumpScale"||t==="clearcoatRoughness"||t==="displacementBias"||t==="displacementScale"||t==="metalness"||t==="opacity"||t==="reflectivity"||t==="refractionRatio"||t==="roughness"||t==="sheenRoughness"||t==="thickness"}function ta(){const t=document.createElement("input");return t.type="file",new Promise((n,a)=>{t.addEventListener("change",function(){if(t.files===null)a();else{const e=t.files[0],o=new FileReader;o.onload=function(l){n(l.target.result)},o.readAsDataURL(e)}}),t.click()})}const na=[{title:"Front",value:c.FrontSide},{title:"Back",value:c.BackSide},{title:"Double",value:c.DoubleSide}],aa=[{title:"No Blending",value:c.NoBlending},{title:"Normal",value:c.NormalBlending},{title:"Additive",value:c.AdditiveBlending},{title:"Subtractive",value:c.SubtractiveBlending},{title:"Multiply",value:c.MultiplyBlending},{title:"Custom",value:c.CustomBlending}],ia=[{title:"Add",value:c.AddEquation},{title:"Subtract",value:c.SubtractEquation},{title:"Reverse Subtract",value:c.ReverseSubtractEquation},{title:"Min",value:c.MinEquation},{title:"Max",value:c.MaxEquation}],ra=[{title:"Zero",valye:c.ZeroFactor},{title:"One",valye:c.OneFactor},{title:"Src Color",valye:c.SrcColorFactor},{title:"One Minus Src Color",valye:c.OneMinusSrcColorFactor},{title:"Src Alpha",valye:c.SrcAlphaFactor},{title:"One Minus Src Alpha",valye:c.OneMinusSrcAlphaFactor},{title:"Dst Alpha",valye:c.DstAlphaFactor},{title:"One Minus Dst Alpha",valye:c.OneMinusDstAlphaFactor},{title:"Dst Color",valye:c.DstColorFactor},{title:"One Minus Dst Color",valye:c.OneMinusDstColorFactor},{title:"Src Alpha Saturate",valye:c.SrcAlphaSaturateFactor},{title:"Constant Color",valye:c.ConstantColorFactor},{title:"One Minus Constant Color",valye:c.OneMinusConstantColorFactor},{title:"Constant Alpha",valye:c.ConstantAlphaFactor},{title:"One Minus Constant Alpha",valye:c.OneMinusConstantAlphaFactor}],oa=[{title:"Zero",valye:c.ZeroFactor},{title:"One",valye:c.OneFactor},{title:"Src Color",valye:c.SrcColorFactor},{title:"One Minus Src Color",valye:c.OneMinusSrcColorFactor},{title:"Src Alpha",valye:c.SrcAlphaFactor},{title:"One Minus Src Alpha",valye:c.OneMinusSrcAlphaFactor},{title:"Dst Alpha",valye:c.DstAlphaFactor},{title:"One Minus Dst Alpha",valye:c.OneMinusDstAlphaFactor},{title:"Dst Color",valye:c.DstColorFactor},{title:"One Minus Dst Color",valye:c.OneMinusDstColorFactor},{title:"Constant Color",valye:c.ConstantColorFactor},{title:"One Minus Constant Color",valye:c.OneMinusConstantColorFactor},{title:"Constant Alpha",valye:c.ConstantAlphaFactor},{title:"One Minus Constant Alpha",valye:c.OneMinusConstantAlphaFactor}];function et(t,n){t.needsUpdate=!0,t.type="option",t.options=n}function Wt(t,n,a){const e=[];for(const o in t){if(!Qn(o))continue;const l=typeof t[o],m=t[o];if(l==="boolean"||l==="number"||l==="string"){const s={title:Pe(o),prop:o,type:l,value:m,min:void 0,max:void 0,needsUpdate:l==="boolean",onChange:(h,g)=>{a.updateObject(n.uuid,`material.${h}`,g),s.needsUpdate&&a.updateObject(n.uuid,"material.needsUpdate",!0);const y=a.scene?.getObjectByProperty("uuid",n.uuid);y!==void 0&&te(y,`material.${h}`,g)}};switch(o){case"blending":et(s,aa);break;case"blendDst":et(s,oa);break;case"blendEquation":et(s,ia);break;case"blendSrc":et(s,ra);break;case"side":et(s,na);break}ea(o)&&(s.value=Number(m),s.type="range",s.min=0,s.max=1,s.step=.01);const d=l==="string"&&(o==="vertexShader"||o==="fragmentShader");d&&(s.disabled=!1,s.latest=s.value,s.onChange=(h,g)=>{s.latest=g}),e.push(s),d&&e.push({title:`${Ye(o)} - Update`,type:"button",onChange:()=>{a.updateObject(n.uuid,`material.${o}`,s.latest),a.updateObject(n.uuid,"material.needsUpdate",!0);const h=a.scene?.getObjectByProperty("uuid",n.uuid);h!==void 0&&(te(h,`material.${o}`,s.latest),h.material.needsUpdate=!0)}})}else if(l==="object")if(m.isColor)e.push({title:Pe(o),prop:o,type:"color",value:m,onChange:(s,d)=>{const h=new c.Color(d);a.updateObject(n.uuid,`material.${s}`,h);const g=a.scene?.getObjectByProperty("uuid",n.uuid);g!==void 0&&te(g,`material.${s}`,h)}});else if(Array.isArray(m)){const s=[];for(const d in m)s.push({title:`${d}`,type:`${typeof m[d]}`,value:m[d],onChange:(h,g)=>{a.updateObject(n.uuid,`material.${o}`,g);const y=a.scene?.getObjectByProperty("uuid",n.uuid);y!==void 0&&te(y,`material.${o}`,g)}});e.push({title:Pe(o),items:s})}else{const s=[];for(const d in m){const h=m[d];switch(typeof h){case"boolean":case"number":case"string":d==="src"?e.push({title:Pe(o),type:"image",value:h,onChange:(y,S)=>{a.createTexture(n.uuid,`material.${o}`,S);const x=a.scene?.getObjectByProperty("uuid",n.uuid);x!==void 0&&Dt(S).then(T=>{te(x,`material.${o}`,T),te(x,"material.needsUpdate",!0)})}}):s.push({title:`${Pe(d)}`,prop:`material.${o}.${d}`,type:`${typeof t[o][d]}`,value:m[d],onChange:(y,S)=>{a.updateObject(n.uuid,`material.${o}.${d}`,S);const x=a.scene?.getObjectByProperty("uuid",n.uuid);x!==void 0&&te(x,`material.${o}.${d}`,S)}});break;case"object":if(h.value!==void 0&&h.value.src!==void 0)s.push({title:Pe(d),type:"image",value:h.value.src,onChange:(y,S)=>{a.createTexture(n.uuid,`material.${o}.${d}.value`,m);const x=a.scene?.getObjectByProperty("uuid",n.uuid);x!==void 0&&Dt(S).then(T=>{te(x,`material.${o}.${d}.value`,T)})}});else if(o==="uniforms"){const y=h.value,S=(x,T,j)=>({title:x,type:"number",value:j,step:.01,onChange:(q,V)=>{const w=`material.uniforms.${d}.value.${T}`;a.updateObject(n.uuid,w,V);const G=a.scene?.getObjectByProperty("uuid",n.uuid);G!==void 0&&te(G,w,V)}});if(typeof h.value=="number")s.push({title:d,type:"number",value:h.value,onChange:(x,T)=>{const j=`material.${o}.${x}.value`;a.updateObject(n.uuid,j,T);const q=a.scene?.getObjectByProperty("uuid",n.uuid);q!==void 0&&te(q,j,T)}});else if(y.r!==void 0&&y.g!==void 0&&y.b!==void 0)s.push({title:d,type:"color",value:h.value,onChange:(x,T)=>{const j=new c.Color(T),q=`material.${o}.${x}.value`;a.updateObject(n.uuid,q,j);const V=a.scene?.getObjectByProperty("uuid",n.uuid);V!==void 0&&te(V,q,j)}});else if(y.x!==void 0&&y.y!==void 0&&y.z===void 0&&y.w===void 0)s.push({title:d,items:[S("X","x",h.value.x),S("Y","y",h.value.y)]});else if(y.x!==void 0&&y.y!==void 0&&y.z!==void 0&&y.w===void 0)s.push({title:d,items:[S("X","x",h.value.x),S("Y","y",h.value.y),S("Z","z",h.value.z)]});else if(y.x!==void 0&&y.y!==void 0&&y.z!==void 0&&y.w!==void 0)s.push({title:d,items:[S("X","x",h.value.x),S("Y","y",h.value.y),S("Z","z",h.value.z),S("W","w",h.value.w)]});else if(y.elements!==void 0){const x=y.elements,T=[];for(let j=0;j<x.length;j++)T.push(S(j.toString(),j.toString(),x[j]));s.push({title:d,items:T})}else console.log(">>> need to add this format:",d,y)}else s.push({title:d,type:`${typeof h.value}`,value:h.value,onChange:(y,S)=>{a.updateObject(n.uuid,`material.${o}.${d}.value`,S);const x=a.scene?.getObjectByProperty("uuid",n.uuid);x!==void 0&&te(x,`material.${o}.${d}.value`,S)}});break}}s.length>0&&e.push({title:Pe(o),items:s})}else m!==void 0&&console.log("other:",o,l,m)}return e.sort((o,l)=>o.title<l.title?-1:o.title>l.title?1:0),e.push({title:"Update Material",type:"button",onChange:()=>{a.updateObject(n.uuid,"material.needsUpdate",!0)}}),e}function sa(t,n){const a=t.material;if(Array.isArray(a)){const e=[],o=a.length;for(let l=0;l<o;l++)e.push(u.jsx(Ie,{title:`Material ${l}`,items:Wt(a[l],t,n)},`Material ${l}`));return u.jsx(u.Fragment,{children:e})}else return u.jsx(Ie,{title:"Material",items:Wt(a,t,n)})}function tt(t){let n=t.value;n!==void 0&&n.isColor!==void 0&&(n=rn(t.value));const[a,e]=R.useState(n),o=R.useRef(null),l=R.useRef(null),m=R.useRef(null);R.useEffect(()=>{let g=!1,y=-1,S=0,x=Number(a);const T=G=>{g=!0,S=x,y=G.clientX},j=G=>{if(!g)return;const be=t.step!==void 0?t.step:1,le=(G.clientX-y)*be;x=Number((S+le).toFixed(4)),l.current!==null&&(l.current.value=x.toString()),t.onChange!==void 0&&t.onChange(t.prop!==void 0?t.prop:t.title,x)},q=()=>{g=!1},V=()=>{g=!1},w=t.type==="number";return w&&(o.current?.addEventListener("mousedown",T,!1),document.addEventListener("mouseup",q,!1),document.addEventListener("mousemove",j,!1),document.addEventListener("contextmenu",V,!1)),()=>{w&&(o.current?.removeEventListener("mousedown",T),document.removeEventListener("mouseup",q),document.removeEventListener("mousemove",j),document.removeEventListener("contextmenu",V))}},[a]);const s=t.type==="string"&&(a.length>100||a.search(`
144
- `)>-1),d=s||t.type==="image",h=g=>{let y=g.target.value;t.type==="boolean"?y=g.target.checked:t.type==="option"&&(y=t.options[y].value),e(y),t.onChange!==void 0&&t.onChange(t.prop!==void 0?t.prop:t.title,y)};return u.jsxs("div",{className:`field ${d?"block":""}`,children:[t.type!=="button"&&u.jsx("label",{ref:o,children:Ye(t.title)},"fieldLabel"),t.type==="string"&&!s&&u.jsx("input",{type:"text",disabled:t.disabled,onChange:h,value:a}),t.type==="string"&&s&&u.jsx("textarea",{cols:50,rows:10,disabled:t.disabled!==void 0?t.disabled:!0,onChange:h,value:a}),t.type==="boolean"&&u.jsx("input",{type:"checkbox",disabled:t.disabled,onChange:h,checked:a}),t.type==="number"&&u.jsx("input",{ref:l,type:"number",value:a,min:t.min,max:t.max,step:t.step,disabled:t.disabled,onChange:h}),t.type==="range"&&u.jsxs(u.Fragment,{children:[u.jsx("input",{type:"text",value:a.toString(),onChange:h,disabled:t.disabled,className:"min"}),u.jsx("input",{disabled:t.disabled,type:"range",value:a,min:t.min,max:t.max,step:t.step,onChange:h})]}),t.type==="color"&&u.jsxs(u.Fragment,{children:[u.jsx("input",{type:"text",value:a.toString(),onChange:h,disabled:t.disabled,className:"color"}),u.jsx("input",{type:"color",value:a,onChange:h,disabled:t.disabled})]}),t.type==="button"&&u.jsx("button",{disabled:t.disabled,onClick:()=>{t.onChange!==void 0&&t.onChange(t.prop!==void 0?t.prop:t.title,!0)},children:t.title}),t.type==="image"&&u.jsx("img",{ref:m,onClick:()=>{ta().then(g=>{m.current.src=g,t.onChange!==void 0&&t.onChange(t.prop!==void 0?t.prop:t.title,g)})},src:a.length>0?a:Zn}),t.type==="option"&&u.jsx(u.Fragment,{children:u.jsx("select",{onChange:h,disabled:t.disabled,defaultValue:t.value,children:t.options?.map((g,y)=>u.jsx("option",{value:g.value,children:Ye(g.title)},y))})})]})}function $t(t){switch(t){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 t}function ca(t,n){const a=[];if(t.perspectiveCameraInfo!==void 0)for(const e in t.perspectiveCameraInfo)a.push({title:$t(e),prop:e,type:"number",step:.01,value:t.perspectiveCameraInfo[e],onChange:(o,l)=>{n.updateObject(t.uuid,o,l),n.requestMethod(t.uuid,"updateProjectionMatrix");const m=n.scene?.getObjectByProperty("uuid",t.uuid);m!==void 0&&(te(m,o,l),m.updateProjectionMatrix())}});else if(t.orthographicCameraInfo!==void 0)for(const e in t.orthographicCameraInfo)a.push({title:$t(e),prop:e,type:"number",step:.01,value:t.perspectiveCameraInfo[e],onChange:(o,l)=>{n.updateObject(t.uuid,o,l),n.requestMethod(t.uuid,"updateProjectionMatrix");const m=n.scene?.getObjectByProperty("uuid",t.uuid);m!==void 0&&(te(m,o,l),m.updateProjectionMatrix())}});return u.jsx(Ie,{title:"Camera",items:a})}const la=Math.PI/180,ua=180/Math.PI;function ze(t,n,a,e,o){return e+(t-n)*(o-e)/(a-n)}function da(t){return t*la}function kt(t){return t*ua}function ha(t,n){const a=new c.Matrix4;a.elements=t.matrix;const e=new c.Vector3,o=new c.Euler,l=new c.Vector3;t.uuid.length>0&&(e.setFromMatrixPosition(a),o.setFromRotationMatrix(a),l.setFromMatrixScale(a));const m=(d,h)=>{n.updateObject(t.uuid,d,h);const g=n.scene?.getObjectByProperty("uuid",t.uuid);g!==void 0&&te(g,d,h)},s=(d,h)=>{m(d,da(h))};return u.jsx(Ie,{title:"Transform",items:[{title:"Position X",prop:"position.x",type:"number",value:e.x,onChange:m},{title:"Position Y",prop:"position.y",type:"number",value:e.y,onChange:m},{title:"Position Z",prop:"position.z",type:"number",value:e.z,onChange:m},{title:"Rotation X",prop:"rotation.x",type:"number",value:yt(kt(o.x)),min:-360,max:360,step:.1,onChange:s},{title:"Rotation Y",prop:"rotation.y",type:"number",value:yt(kt(o.y)),min:-360,max:360,step:.1,onChange:s},{title:"Rotation Z",prop:"rotation.z",type:"number",value:yt(kt(o.z)),min:-360,max:360,step:.1,onChange:s},{title:"Scale X",prop:"scale.x",type:"number",value:l.x,step:.01,onChange:m},{title:"Scale Y",prop:"scale.y",type:"number",value:l.y,step:.01,onChange:m},{title:"Scale Z",prop:"scale.z",type:"number",value:l.z,step:.01,onChange:m}]})}function qt(t){switch(t){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"}return t}function fa(t,n){const a=[];if(t.lightInfo!==void 0)for(const e in t.lightInfo){const o=t.lightInfo[e];o!==void 0&&(o.isColor!==void 0?a.push({title:qt(e),prop:e,type:"color",value:o,onChange:(l,m)=>{const s=new c.Color(m);n.updateObject(t.uuid,l,s);const d=n.scene?.getObjectByProperty("uuid",t.uuid);d!==void 0&&te(d,l,s)}}):a.push({title:qt(e),prop:e,type:typeof o,value:o,step:typeof o=="number"?.01:void 0,onChange:(l,m)=>{n.updateObject(t.uuid,l,m);const s=n.scene?.getObjectByProperty("uuid",t.uuid);s!==void 0&&te(s,l,m)}}))}return u.jsx(Ie,{title:"Light",items:a})}function pa(t,n){const a=[],e=[];let o=0;t.animations.forEach(s=>{o=Math.max(o,s.duration),s.duration>0&&e.push({title:s.name,items:[{title:"Duration",type:"number",value:s.duration,disabled:!0},{title:"Blend Mode",type:"option",disabled:!0,options:[{title:"Normal",value:2500},{title:"Additive",value:2501}]}]})}),a.push({title:"Animations",items:e});const l=n.scene?.getObjectByProperty("uuid",t.uuid);let m=!1;if(l!==void 0){const s=l.mixer;if(m=s!==void 0,m){const d=[{title:"Time Scale",type:"range",value:s.timeScale,step:.01,min:-1,max:2,onChange:(h,g)=>{s.timeScale=g,n.updateObject(t.uuid,"mixer.timeScale",g)}}];d.push({title:"Stop All",type:"button",onChange:()=>{s.stopAllAction(),n.requestMethod(t.uuid,"stopAllAction",void 0,"mixer")}}),a.push({title:"Mixer",items:d})}}return u.jsx(Ie,{title:"Animation",items:a})}const gn={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};let ne={...gn};function bn(t){const[n,a]=R.useState(-1);R.useEffect(()=>{function m(d){ne={...d.value},a(Date.now())}function s(){ne={...gn},a(Date.now())}return D.addEventListener(I.SET_SCENE,s),D.addEventListener(I.SET_OBJECT,m),()=>{D.removeEventListener(I.SET_SCENE,s),D.removeEventListener(I.SET_OBJECT,m)}},[]);const e=ne.type.toLowerCase(),o=ne.animations.length>0||ne.mixer!==void 0,l=e.search("mesh")>-1||e.search("line")>-1||e.search("points")>-1;return u.jsx(St,{label:"Inspector",children:u.jsx("div",{id:"Inspector",className:t.class,children:ne.uuid.length>0&&u.jsxs(u.Fragment,{children:[u.jsxs(u.Fragment,{children:[u.jsx(tt,{type:"string",title:"Name",prop:"name",value:ne.name,disabled:!0}),u.jsx(tt,{type:"string",title:"Type",prop:"type",value:ne.type,disabled:!0}),u.jsx(tt,{type:"string",title:"UUID",prop:"uuid",value:ne.uuid,disabled:!0}),u.jsx(tt,{type:"boolean",title:"Visible",prop:"visible",value:ne.visible,onChange:(m,s)=>{t.three.updateObject(ne.uuid,m,s);const d=t.three.scene?.getObjectByProperty("uuid",ne.uuid);d!==void 0&&te(d,m,s)}})]}),u.jsxs(u.Fragment,{children:[ha(ne,t.three),o?pa(ne,t.three):null,e.search("camera")>-1?ca(ne,t.three):null,e.search("light")>-1?fa(ne,t.three):null,l?sa(ne,t.three):null]})]})},n)},"Inspector")}function ma(t){const[n,a]=R.useState(t.scene);R.useEffect(()=>{const l=m=>{a(m.value)};return D.addEventListener(I.SET_SCENE,l),()=>{D.removeEventListener(I.SET_SCENE,l)}},[]);const e=n!==null,o="Hierarchy - "+(e?`${n?.name}`:"No Scene");return u.jsxs("div",{id:"SidePanel",children:[u.jsx(St,{label:o,open:!0,children:u.jsx(u.Fragment,{children:e&&u.jsx(vn,{child:n,three:t.three})})}),u.jsx(bn,{three:t.three})]},"SidePanel")}function va(t){function n(){return t.three.scene===void 0?(console.log("No scene:",t.three),!1):!0}const a=s=>{if(!n())return;const d=t.three.scene?.getObjectByProperty("uuid",s.value);d!==void 0&&t.three.setObject(d)},e=(s,d,h)=>{if(!n())return;const g=t.three.scene?.getObjectByProperty("uuid",s);g!==void 0&&te(g,d,h)},o=s=>{if(!n())return;const d=s.value,{key:h,value:g,uuid:y}=d;e(y,h,g)},l=s=>{if(!n())return;const d=s.value;Dt(d.value).then(h=>{e(d.uuid,d.key,h),e(d.uuid,"material.needsUpdate",!0)})},m=s=>{if(!n())return;const{key:d,uuid:h,value:g,subitem:y}=s.value,S=t.three.scene?.getObjectByProperty("uuid",h);if(S!==void 0)try{y!==void 0?Fn(S,y)[d](g):S[d](g)}catch(x){console.log("Error requesting method:"),console.log(x),console.log(d),console.log(g)}};return R.useEffect(()=>(D.addEventListener(I.GET_OBJECT,a),D.addEventListener(I.UPDATE_OBJECT,o),D.addEventListener(I.CREATE_TEXTURE,l),D.addEventListener(I.REQUEST_METHOD,m),()=>{D.removeEventListener(I.GET_OBJECT,a),D.removeEventListener(I.UPDATE_OBJECT,o),D.removeEventListener(I.CREATE_TEXTURE,l),D.removeEventListener(I.REQUEST_METHOD,m)}),[]),null}const Kt={type:"change"},jt={type:"start"},Xt={type:"end"},vt=new c.Ray,Zt=new c.Plane,ga=Math.cos(70*c.MathUtils.DEG2RAD);class ba extends c.EventDispatcher{constructor(n,a){super(),this.object=n,this.domElement=a,this.domElement.style.touchAction="none",this.enabled=!0,this.target=new c.Vector3,this.cursor=new c.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:c.MOUSE.ROTATE,MIDDLE:c.MOUSE.DOLLY,RIGHT:c.MOUSE.PAN},this.touches={ONE:c.TOUCH.ROTATE,TWO:c.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 s.phi},this.getAzimuthalAngle=function(){return s.theta},this.getDistance=function(){return this.object.position.distanceTo(this.target)},this.listenToKeyEvents=function(r){r.addEventListener("keydown",Ke),this._domElementKeyEvents=r},this.stopListenToKeyEvents=function(){this._domElementKeyEvents.removeEventListener("keydown",Ke),this._domElementKeyEvents=null},this.saveState=function(){e.target0.copy(e.target),e.position0.copy(e.object.position),e.zoom0=e.object.zoom},this.reset=function(){e.target.copy(e.target0),e.object.position.copy(e.position0),e.object.zoom=e.zoom0,e.object.updateProjectionMatrix(),e.dispatchEvent(Kt),e.update(),l=o.NONE},this.update=function(){const r=new c.Vector3,E=new c.Quaternion().setFromUnitVectors(n.up,new c.Vector3(0,1,0)),M=E.clone().invert(),F=new c.Vector3,Z=new c.Quaternion,ue=new c.Vector3,ie=2*Math.PI;return function(At=null){const Ze=e.object.position;r.copy(Ze).sub(e.target),r.applyQuaternion(E),s.setFromVector3(r),e.autoRotate&&l===o.NONE&&z(P(At)),e.enableDamping?(s.theta+=d.theta*e.dampingFactor,s.phi+=d.phi*e.dampingFactor):(s.theta+=d.theta,s.phi+=d.phi);let fe=e.minAzimuthAngle,de=e.maxAzimuthAngle;isFinite(fe)&&isFinite(de)&&(fe<-Math.PI?fe+=ie:fe>Math.PI&&(fe-=ie),de<-Math.PI?de+=ie:de>Math.PI&&(de-=ie),fe<=de?s.theta=Math.max(fe,Math.min(de,s.theta)):s.theta=s.theta>(fe+de)/2?Math.max(fe,s.theta):Math.min(de,s.theta)),s.phi=Math.max(e.minPolarAngle,Math.min(e.maxPolarAngle,s.phi)),s.makeSafe(),e.enableDamping===!0?e.target.addScaledVector(g,e.dampingFactor):e.target.add(g),e.target.sub(e.cursor),e.target.clampLength(e.minTargetRadius,e.maxTargetRadius),e.target.add(e.cursor),e.zoomToCursor&&se||e.object.isOrthographicCamera?s.radius=pe(s.radius):s.radius=pe(s.radius*h),r.setFromSpherical(s),r.applyQuaternion(M),Ze.copy(e.target).add(r),e.object.lookAt(e.target),e.enableDamping===!0?(d.theta*=1-e.dampingFactor,d.phi*=1-e.dampingFactor,g.multiplyScalar(1-e.dampingFactor)):(d.set(0,0,0),g.set(0,0,0));let Te=!1;if(e.zoomToCursor&&se){let Re=null;if(e.object.isPerspectiveCamera){const _e=r.length();Re=pe(_e*h);const Ae=_e-Re;e.object.position.addScaledVector(be,Ae),e.object.updateMatrixWorld()}else if(e.object.isOrthographicCamera){const _e=new c.Vector3(le.x,le.y,0);_e.unproject(e.object),e.object.zoom=Math.max(e.minZoom,Math.min(e.maxZoom,e.object.zoom/h)),e.object.updateProjectionMatrix(),Te=!0;const Ae=new c.Vector3(le.x,le.y,0);Ae.unproject(e.object),e.object.position.sub(Ae).add(_e),e.object.updateMatrixWorld(),Re=r.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),e.zoomToCursor=!1;Re!==null&&(this.screenSpacePanning?e.target.set(0,0,-1).transformDirection(e.object.matrix).multiplyScalar(Re).add(e.object.position):(vt.origin.copy(e.object.position),vt.direction.set(0,0,-1).transformDirection(e.object.matrix),Math.abs(e.object.up.dot(vt.direction))<ga?n.lookAt(e.target):(Zt.setFromNormalAndCoplanarPoint(e.object.up,e.target),vt.intersectPlane(Zt,e.target))))}else e.object.isOrthographicCamera&&(Te=h!==1,Te&&(e.object.zoom=Math.max(e.minZoom,Math.min(e.maxZoom,e.object.zoom/h)),e.object.updateProjectionMatrix()));return h=1,se=!1,Te||F.distanceToSquared(e.object.position)>m||8*(1-Z.dot(e.object.quaternion))>m||ue.distanceToSquared(e.target)>0?(e.dispatchEvent(Kt),F.copy(e.object.position),Z.copy(e.object.quaternion),ue.copy(e.target),!0):!1}}(),this.dispose=function(){e.domElement.removeEventListener("contextmenu",Ue),e.domElement.removeEventListener("pointerdown",Oe),e.domElement.removeEventListener("pointercancel",Me),e.domElement.removeEventListener("wheel",dt),e.domElement.removeEventListener("pointermove",$e),e.domElement.removeEventListener("pointerup",Me),e._domElementKeyEvents!==null&&(e._domElementKeyEvents.removeEventListener("keydown",Ke),e._domElementKeyEvents=null)};const e=this,o={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6};let l=o.NONE;const m=1e-6,s=new c.Spherical,d=new c.Spherical;let h=1;const g=new c.Vector3,y=new c.Vector2,S=new c.Vector2,x=new c.Vector2,T=new c.Vector2,j=new c.Vector2,q=new c.Vector2,V=new c.Vector2,w=new c.Vector2,G=new c.Vector2,be=new c.Vector3,le=new c.Vector2;let se=!1;const f=[],v={};let O=!1;function P(r){return r!==null?2*Math.PI/60*e.autoRotateSpeed*r:2*Math.PI/60/60*e.autoRotateSpeed}function H(r){const E=Math.abs(r*.01);return Math.pow(.95,e.zoomSpeed*E)}function z(r){d.theta-=r}function Y(r){d.phi-=r}const L=function(){const r=new c.Vector3;return function(M,F){r.setFromMatrixColumn(F,0),r.multiplyScalar(-M),g.add(r)}}(),K=function(){const r=new c.Vector3;return function(M,F){e.screenSpacePanning===!0?r.setFromMatrixColumn(F,1):(r.setFromMatrixColumn(F,0),r.crossVectors(e.object.up,r)),r.multiplyScalar(M),g.add(r)}}(),X=function(){const r=new c.Vector3;return function(M,F){const Z=e.domElement;if(e.object.isPerspectiveCamera){const ue=e.object.position;r.copy(ue).sub(e.target);let ie=r.length();ie*=Math.tan(e.object.fov/2*Math.PI/180),L(2*M*ie/Z.clientHeight,e.object.matrix),K(2*F*ie/Z.clientHeight,e.object.matrix)}else e.object.isOrthographicCamera?(L(M*(e.object.right-e.object.left)/e.object.zoom/Z.clientWidth,e.object.matrix),K(F*(e.object.top-e.object.bottom)/e.object.zoom/Z.clientHeight,e.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),e.enablePan=!1)}}();function _(r){e.object.isPerspectiveCamera||e.object.isOrthographicCamera?h/=r:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),e.enableZoom=!1)}function U(r){e.object.isPerspectiveCamera||e.object.isOrthographicCamera?h*=r:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),e.enableZoom=!1)}function Q(r,E){if(!e.zoomToCursor)return;se=!0;const M=e.domElement.getBoundingClientRect(),F=r-M.left,Z=E-M.top,ue=M.width,ie=M.height;le.x=F/ue*2-1,le.y=-(Z/ie)*2+1,be.set(le.x,le.y,1).unproject(e.object).sub(e.object.position).normalize()}function pe(r){return Math.max(e.minDistance,Math.min(e.maxDistance,r))}function ye(r){y.set(r.clientX,r.clientY)}function rt(r){Q(r.clientX,r.clientX),V.set(r.clientX,r.clientY)}function Ge(r){T.set(r.clientX,r.clientY)}function xt(r){S.set(r.clientX,r.clientY),x.subVectors(S,y).multiplyScalar(e.rotateSpeed);const E=e.domElement;z(2*Math.PI*x.x/E.clientHeight),Y(2*Math.PI*x.y/E.clientHeight),y.copy(S),e.update()}function wt(r){w.set(r.clientX,r.clientY),G.subVectors(w,V),G.y>0?_(H(G.y)):G.y<0&&U(H(G.y)),V.copy(w),e.update()}function He(r){j.set(r.clientX,r.clientY),q.subVectors(j,T).multiplyScalar(e.panSpeed),X(q.x,q.y),T.copy(j),e.update()}function We(r){Q(r.clientX,r.clientY),r.deltaY<0?U(H(r.deltaY)):r.deltaY>0&&_(H(r.deltaY)),e.update()}function Le(r){let E=!1;switch(r.code){case e.keys.UP:r.ctrlKey||r.metaKey||r.shiftKey?Y(2*Math.PI*e.rotateSpeed/e.domElement.clientHeight):X(0,e.keyPanSpeed),E=!0;break;case e.keys.BOTTOM:r.ctrlKey||r.metaKey||r.shiftKey?Y(-2*Math.PI*e.rotateSpeed/e.domElement.clientHeight):X(0,-e.keyPanSpeed),E=!0;break;case e.keys.LEFT:r.ctrlKey||r.metaKey||r.shiftKey?z(2*Math.PI*e.rotateSpeed/e.domElement.clientHeight):X(e.keyPanSpeed,0),E=!0;break;case e.keys.RIGHT:r.ctrlKey||r.metaKey||r.shiftKey?z(-2*Math.PI*e.rotateSpeed/e.domElement.clientHeight):X(-e.keyPanSpeed,0),E=!0;break}E&&(r.preventDefault(),e.update())}function Fe(r){if(f.length===1)y.set(r.pageX,r.pageY);else{const E=Se(r),M=.5*(r.pageX+E.x),F=.5*(r.pageY+E.y);y.set(M,F)}}function Ce(r){if(f.length===1)T.set(r.pageX,r.pageY);else{const E=Se(r),M=.5*(r.pageX+E.x),F=.5*(r.pageY+E.y);T.set(M,F)}}function ot(r){const E=Se(r),M=r.pageX-E.x,F=r.pageY-E.y,Z=Math.sqrt(M*M+F*F);V.set(0,Z)}function st(r){e.enableZoom&&ot(r),e.enablePan&&Ce(r)}function Ot(r){e.enableZoom&&ot(r),e.enableRotate&&Fe(r)}function ct(r){if(f.length==1)S.set(r.pageX,r.pageY);else{const M=Se(r),F=.5*(r.pageX+M.x),Z=.5*(r.pageY+M.y);S.set(F,Z)}x.subVectors(S,y).multiplyScalar(e.rotateSpeed);const E=e.domElement;z(2*Math.PI*x.x/E.clientHeight),Y(2*Math.PI*x.y/E.clientHeight),y.copy(S)}function xe(r){if(f.length===1)j.set(r.pageX,r.pageY);else{const E=Se(r),M=.5*(r.pageX+E.x),F=.5*(r.pageY+E.y);j.set(M,F)}q.subVectors(j,T).multiplyScalar(e.panSpeed),X(q.x,q.y),T.copy(j)}function we(r){const E=Se(r),M=r.pageX-E.x,F=r.pageY-E.y,Z=Math.sqrt(M*M+F*F);w.set(0,Z),G.set(0,Math.pow(w.y/V.y,e.zoomSpeed)),_(G.y),V.copy(w);const ue=(r.pageX+E.x)*.5,ie=(r.pageY+E.y)*.5;Q(ue,ie)}function lt(r){e.enableZoom&&we(r),e.enablePan&&xe(r)}function ut(r){e.enableZoom&&we(r),e.enableRotate&&ct(r)}function Oe(r){e.enabled!==!1&&(f.length===0&&(e.domElement.setPointerCapture(r.pointerId),e.domElement.addEventListener("pointermove",$e),e.domElement.addEventListener("pointerup",Me)),Tt(r),r.pointerType==="touch"?Xe(r):qe(r))}function $e(r){e.enabled!==!1&&(r.pointerType==="touch"?pt(r):Mt(r))}function Me(r){switch(Rt(r),f.length){case 0:e.domElement.releasePointerCapture(r.pointerId),e.domElement.removeEventListener("pointermove",$e),e.domElement.removeEventListener("pointerup",Me),e.dispatchEvent(Xt),l=o.NONE;break;case 1:const E=f[0],M=v[E];Xe({pointerId:E,pageX:M.x,pageY:M.y});break}}function qe(r){let E;switch(r.button){case 0:E=e.mouseButtons.LEFT;break;case 1:E=e.mouseButtons.MIDDLE;break;case 2:E=e.mouseButtons.RIGHT;break;default:E=-1}switch(E){case c.MOUSE.DOLLY:if(e.enableZoom===!1)return;rt(r),l=o.DOLLY;break;case c.MOUSE.ROTATE:if(r.ctrlKey||r.metaKey||r.shiftKey){if(e.enablePan===!1)return;Ge(r),l=o.PAN}else{if(e.enableRotate===!1)return;ye(r),l=o.ROTATE}break;case c.MOUSE.PAN:if(r.ctrlKey||r.metaKey||r.shiftKey){if(e.enableRotate===!1)return;ye(r),l=o.ROTATE}else{if(e.enablePan===!1)return;Ge(r),l=o.PAN}break;default:l=o.NONE}l!==o.NONE&&e.dispatchEvent(jt)}function Mt(r){switch(l){case o.ROTATE:if(e.enableRotate===!1)return;xt(r);break;case o.DOLLY:if(e.enableZoom===!1)return;wt(r);break;case o.PAN:if(e.enablePan===!1)return;He(r);break}}function dt(r){e.enabled===!1||e.enableZoom===!1||l!==o.NONE||(r.preventDefault(),e.dispatchEvent(jt),We(ht(r)),e.dispatchEvent(Xt))}function ht(r){const E=r.deltaMode,M={clientX:r.clientX,clientY:r.clientY,deltaY:r.deltaY};switch(E){case 1:M.deltaY*=16;break;case 2:M.deltaY*=100;break}return r.ctrlKey&&!O&&(M.deltaY*=10),M}function ft(r){r.key==="Control"&&(O=!0,e.domElement.getRootNode().addEventListener("keyup",Ee,{passive:!0,capture:!0}))}function Ee(r){r.key==="Control"&&(O=!1,e.domElement.getRootNode().removeEventListener("keyup",Ee,{passive:!0,capture:!0}))}function Ke(r){e.enabled===!1||e.enablePan===!1||Le(r)}function Xe(r){switch(mt(r),f.length){case 1:switch(e.touches.ONE){case c.TOUCH.ROTATE:if(e.enableRotate===!1)return;Fe(r),l=o.TOUCH_ROTATE;break;case c.TOUCH.PAN:if(e.enablePan===!1)return;Ce(r),l=o.TOUCH_PAN;break;default:l=o.NONE}break;case 2:switch(e.touches.TWO){case c.TOUCH.DOLLY_PAN:if(e.enableZoom===!1&&e.enablePan===!1)return;st(r),l=o.TOUCH_DOLLY_PAN;break;case c.TOUCH.DOLLY_ROTATE:if(e.enableZoom===!1&&e.enableRotate===!1)return;Ot(r),l=o.TOUCH_DOLLY_ROTATE;break;default:l=o.NONE}break;default:l=o.NONE}l!==o.NONE&&e.dispatchEvent(jt)}function pt(r){switch(mt(r),l){case o.TOUCH_ROTATE:if(e.enableRotate===!1)return;ct(r),e.update();break;case o.TOUCH_PAN:if(e.enablePan===!1)return;xe(r),e.update();break;case o.TOUCH_DOLLY_PAN:if(e.enableZoom===!1&&e.enablePan===!1)return;lt(r),e.update();break;case o.TOUCH_DOLLY_ROTATE:if(e.enableZoom===!1&&e.enableRotate===!1)return;ut(r),e.update();break;default:l=o.NONE}}function Ue(r){e.enabled!==!1&&r.preventDefault()}function Tt(r){f.push(r.pointerId)}function Rt(r){delete v[r.pointerId];for(let E=0;E<f.length;E++)if(f[E]==r.pointerId){f.splice(E,1);return}}function mt(r){let E=v[r.pointerId];E===void 0&&(E=new c.Vector2,v[r.pointerId]=E),E.set(r.pageX,r.pageY)}function Se(r){const E=r.pointerId===f[0]?f[1]:f[0];return v[E]}e.domElement.addEventListener("contextmenu",Ue),e.domElement.addEventListener("pointerdown",Oe),e.domElement.addEventListener("pointercancel",Me),e.domElement.addEventListener("wheel",dt,{passive:!1}),e.domElement.getRootNode().addEventListener("keydown",ft,{passive:!0,capture:!0}),this.update()}}const Et=t=>{const[n,a]=R.useState(t.options[t.index]),e=()=>{t.onToggle(!t.open)},o=l=>{l!==n&&(t.onSelect(l),a(l)),t.onToggle(!1)};return u.jsxs("div",{className:`dropdown ${t.up===!0?"up":""}`,children:[u.jsx("div",{className:"dropdown-toggle",onClick:e,children:n}),t.open&&u.jsx("ul",{className:"dropdown-menu",children:t.options.map(l=>u.jsx("li",{onClick:()=>o(l),children:l},l))})]})},ke=R.forwardRef(function(n,a){const[e,o]=R.useState(!1),l=n.options.indexOf(n.camera.name);return u.jsxs("div",{className:"CameraWindow",children:[u.jsx("div",{ref:a,className:"clickable",onClick:()=>{e&&o(!1)}}),u.jsx(Et,{index:l,open:e,options:n.options,onSelect:n.onSelect,onToggle:m=>{o(m)},up:!0})]})}),Jt=["Single","Side by Side","Stacked","Quad"],ae=new Map,re=new Map,ve=new Map;function Ne(t,n){const a=new c.OrthographicCamera(-100,100,100,-100,50,3e3);return a.name=t,a.position.copy(n),a.lookAt(0,0,0),ae.set(t,a),a}Ne("Top",new c.Vector3(0,1e3,0));Ne("Bottom",new c.Vector3(0,-1e3,0));Ne("Left",new c.Vector3(-1e3,0,0));Ne("Right",new c.Vector3(1e3,0,0));Ne("Front",new c.Vector3(0,0,1e3));Ne("Back",new c.Vector3(0,0,-1e3));Ne("Orthographic",new c.Vector3(1e3,1e3,1e3));const Ct=new c.PerspectiveCamera(60,1,50,3e3);Ct.name="Debug";Ct.position.set(500,500,500);Ct.lookAt(0,0,0);ae.set("Debug",Ct);const Qt=["Renderer","Depth","Normals","UVs","Wireframe"],ya=new c.MeshDepthMaterial,Ea=new c.MeshNormalMaterial,Sa=new mn,Ca=new c.MeshBasicMaterial({opacity:.33,transparent:!0,wireframe:!0});let gt="Renderer";const $=new c.Scene;$.name="Debug Scene";let ge=new c.Scene;$.add(ge);const it=new c.Group;it.name="helpers";$.add(it);const xa=new pn;it.add(xa);const yn=new c.AxesHelper(500);yn.name="axisHelper";it.add(yn);const nt=new c.AxesHelper(100);nt.name="interactionHelper";it.add(nt);nt.visible=!1;let bt=!1,W=ae.get("Debug"),oe=ae.get("Orthographic"),je=ae.get("Front"),De=ae.get("Top"),en=!1;function wa(t){const[n,a]=R.useState(t.mode!==void 0?t.mode:"Single"),[e,o]=R.useState(null),[l,m]=R.useState(!1),[s,d]=R.useState(!1),[h,g]=R.useState(!1),[,y]=R.useState(Date.now()),S=R.useRef(null),x=R.useRef(null),T=R.useRef(null),j=R.useRef(null),q=R.useRef(null),V=R.useRef(null),w=(f,v)=>{const O=re.get(f.name);O!==void 0&&O.dispose(),re.delete(f.name);const P=ve.get(f.name);P!==void 0&&($.remove(P),P.dispose()),ve.delete(f.name);const H=new ba(f,v);switch(H.enableDamping=!0,H.dampingFactor=.05,f.name){case"Top":case"Bottom":case"Left":case"Right":case"Front":case"Back":H.enableRotate=!1;break}if(re.set(f.name,H),f instanceof c.PerspectiveCamera){const z=new c.CameraHelper(f);ve.set(f.name,z),$.add(z)}},G=f=>{const v=ve.get(f.name);v!==void 0&&($.remove(v),v.dispose(),ve.delete(f.name));const O=re.get(f.name);O!==void 0&&(O.dispose(),re.delete(f.name))},be=()=>{re.forEach((f,v)=>{f.dispose();const O=ve.get(v);O!==void 0&&($.remove(O),O.dispose()),ve.delete(v),re.delete(v)}),re.clear(),ve.clear()},le=()=>{switch(n){case"Single":w(W,T.current);break;case"Side by Side":case"Stacked":w(W,T.current),w(oe,j.current);break;case"Quad":w(W,T.current),w(oe,j.current),w(je,q.current),w(De,V.current);break}};R.useEffect(()=>{const f=new c.WebGLRenderer({canvas:S.current,stencil:!1});f.autoClear=!1,f.shadowMap.enabled=!0,f.setPixelRatio(devicePixelRatio),f.setClearColor(0),o(f)},[]),R.useEffect(()=>{const f=P=>{Ft(ge),$.remove(ge);const H=t.scenes.get(P.value.name);if(H!==void 0){const z=new H;t.onSceneSet!==void 0&&t.onSceneSet(z),ge=z,t.three.scene=ge,$.add(ge),en=!0}},v=P=>{const H=P.value,z=t.three.scene?.getObjectByProperty("uuid",H.uuid);z!==void 0&&ae.set(H.name,z),y(Date.now())},O=P=>{ae.delete(P.value.name),y(Date.now())};return D.addEventListener(I.SET_SCENE,f),D.addEventListener(I.ADD_CAMERA,v),D.addEventListener(I.REMOVE_CAMERA,O),()=>{D.removeEventListener(I.SET_SCENE,f),D.removeEventListener(I.ADD_CAMERA,v),D.removeEventListener(I.REMOVE_CAMERA,O)}},[]),R.useEffect(()=>{if(e===null)return;let f=window.innerWidth,v=window.innerHeight,O=Math.floor(f/2),P=Math.floor(v/2),H=-1;const z=()=>{f=window.innerWidth-300,v=window.innerHeight,O=Math.floor(f/2),P=Math.floor(v/2),e.setSize(f,v);let _=f,U=v;switch(n){case"Side by Side":_=O,U=v;break;case"Stacked":_=f,U=P;break;case"Quad":_=O,U=P;break}ae.forEach(Q=>{Q instanceof c.OrthographicCamera?(Q.left=_/-2,Q.right=_/2,Q.top=U/2,Q.bottom=U/-2,Q.updateProjectionMatrix()):Q instanceof c.PerspectiveCamera&&(Q.aspect=_/U,Q.updateProjectionMatrix(),ve.get(Q.name)?.update())})},Y=()=>{e.setViewport(0,0,f,v),e.setScissor(0,0,f,v),e.render($,W)},L=()=>{if(n==="Side by Side")e.setViewport(0,0,O,v),e.setScissor(0,0,O,v),e.render($,W),e.setViewport(O,0,O,v),e.setScissor(O,0,O,v),e.render($,oe);else{const _=v-P;e.setViewport(0,_,f,P),e.setScissor(0,_,f,P),e.render($,W),e.setViewport(0,0,f,P),e.setScissor(0,0,f,P),e.render($,oe)}},K=()=>{let _=0,U=0;U=v-P,_=0,e.setViewport(_,U,O,P),e.setScissor(_,U,O,P),e.render($,W),_=O,e.setViewport(_,U,O,P),e.setScissor(_,U,O,P),e.render($,oe),U=0,_=0,e.setViewport(_,U,O,P),e.setScissor(_,U,O,P),e.render($,je),_=O,e.setViewport(_,U,O,P),e.setScissor(_,U,O,P),e.render($,De)},X=()=>{switch(re.forEach(_=>{_.update()}),t.onSceneUpdate!==void 0&&en&&t.onSceneUpdate(ge),e.clear(),n){case"Single":Y();break;case"Side by Side":case"Stacked":L();break;case"Quad":K();break}H=requestAnimationFrame(X)};return le(),window.addEventListener("resize",z),z(),X(),()=>{window.removeEventListener("resize",z),cancelAnimationFrame(H),H=-1}},[n,e]),R.useEffect(()=>{if(e!==null){const f=new c.Raycaster,v=new c.Vector2,O=(Y,L,K,X)=>{switch(n){case"Quad":Y<K?L<X?f.setFromCamera(v,W):f.setFromCamera(v,je):L<X?f.setFromCamera(v,oe):f.setFromCamera(v,De);break;case"Side by Side":Y<K?f.setFromCamera(v,W):f.setFromCamera(v,oe);break;case"Single":f.setFromCamera(v,W);break;case"Stacked":L<X?f.setFromCamera(v,W):f.setFromCamera(v,oe);break}},P=Y=>{if(!bt)return;const L=new c.Vector2;e.getSize(L);const K=Math.min(Y.clientX,L.x),X=Math.min(Y.clientY,L.y);v.x=ze(K,0,L.x,-1,1),v.y=ze(X,0,L.y,1,-1);const _=L.x/2,U=L.y/2,Q=()=>{K<_?v.x=ze(K,0,_,-1,1):v.x=ze(K,_,L.x,-1,1)},pe=()=>{X<U?v.y=ze(X,0,U,1,-1):v.y=ze(X,U,L.y,1,-1)};switch(n){case"Quad":Q(),pe();break;case"Side by Side":Q();break;case"Stacked":pe(),pe();break}O(K,X,_,U);const ye=f.intersectObjects(ge.children);ye.length>0&&nt.position.copy(ye[0].point)},H=Y=>{if(!bt)return;const L=new c.Vector2;if(e.getSize(L),Y.clientX>=L.x)return;P(Y);const K=f.intersectObjects(ge.children);K.length>0&&t.three.getObject(K[0].object.uuid)},z=x.current;return z.addEventListener("mousemove",P,!1),z.addEventListener("click",H,!1),()=>{z.removeEventListener("mousemove",P),z.removeEventListener("click",H)}}},[n,e]);const se=[];return ae.forEach((f,v)=>{se.push(v)}),u.jsxs("div",{className:"multiview",children:[u.jsx("canvas",{ref:S}),u.jsxs("div",{className:`cameras ${n==="Single"||n==="Stacked"?"single":""}`,ref:x,children:[n==="Single"&&u.jsx(u.Fragment,{children:u.jsx(ke,{camera:W,options:se,ref:T,onSelect:f=>{re.get(W.name)?.dispose();const v=ae.get(f);v!==void 0&&(G(W),W=v,w(v,T.current))}})}),(n==="Side by Side"||n==="Stacked")&&u.jsxs(u.Fragment,{children:[u.jsx(ke,{camera:W,options:se,ref:T,onSelect:f=>{re.get(W.name)?.dispose();const v=ae.get(f);v!==void 0&&(G(W),W=v,w(v,T.current))}}),u.jsx(ke,{camera:oe,options:se,ref:j,onSelect:f=>{re.get(oe.name)?.dispose();const v=ae.get(f);v!==void 0&&(G(oe),oe=v,w(v,j.current))}})]}),n==="Quad"&&u.jsxs(u.Fragment,{children:[u.jsx(ke,{camera:W,options:se,ref:T,onSelect:f=>{re.get(W.name)?.dispose();const v=ae.get(f);v!==void 0&&(G(W),W=v,w(v,T.current))}}),u.jsx(ke,{camera:oe,options:se,ref:j,onSelect:f=>{re.get(oe.name)?.dispose();const v=ae.get(f);v!==void 0&&(G(oe),oe=v,w(v,j.current))}}),u.jsx(ke,{camera:je,options:se,ref:q,onSelect:f=>{re.get(je.name)?.dispose();const v=ae.get(f);v!==void 0&&(G(je),je=v,w(v,q.current))}}),u.jsx(ke,{camera:De,options:se,ref:V,onSelect:f=>{re.get(De.name)?.dispose();const v=ae.get(f);v!==void 0&&(G(De),De=v,w(v,V.current))}})]})]}),u.jsxs("div",{className:"settings",children:[u.jsx(Et,{index:Jt.indexOf(n),options:Jt,onSelect:f=>{f!==n&&(be(),a(f))},open:l,onToggle:f=>{m(f),s&&d(!1),h&&g(!1)}}),u.jsx(Et,{index:Qt.indexOf(gt),options:Qt,onSelect:f=>{if(f!==gt)switch(gt=f,gt){case"Depth":$.overrideMaterial=ya;break;case"Normals":$.overrideMaterial=Ea;break;default:case"Renderer":$.overrideMaterial=null;break;case"Wireframe":$.overrideMaterial=Ca;break;case"UVs":$.overrideMaterial=Sa;break}},open:s,onToggle:f=>{l&&m(!1),d(f),h&&g(!1)}}),u.jsx(Et,{index:0,options:["Orbit Mode","Selection Mode"],onSelect:f=>{bt=f==="Selection Mode",nt.visible=bt},open:h,onToggle:f=>{l&&m(!1),s&&d(!1),g(f)}})]})]})}function Oa(t){return u.jsxs("div",{className:"editor",ref:t.ref,style:t.style,children:[u.jsx("header",{children:t.header}),t.children,u.jsx("footer",{children:t.footer})]})}exports.Accordion=St;exports.Application=kn;exports.BaseRemote=at;exports.ChildObject=Bt;exports.ContainerObject=vn;exports.Draggable=dn;exports.DraggableItem=un;exports.Dropdown=hn;exports.DropdownItem=fn;exports.Editor=Oa;exports.InfiniteGridHelper=pn;exports.Inspector=bn;exports.MultiView=wa;exports.NavButton=Ut;exports.RemoteComponents=jn;exports.RemoteController=Hn;exports.RemoteTheatre=cn;exports.RemoteThree=Un;exports.RemoteTweakpane=Bn;exports.SceneInspector=va;exports.SidePanel=ma;exports.ToolEvents=I;exports.UVMaterial=mn;exports.capitalize=Ye;exports.clamp=_n;exports.colorToHex=rn;exports.debugDispatcher=D;exports.defaultTheatreCallback=Rn;exports.dispose=Ft;exports.disposeMaterial=sn;exports.disposeTexture=Pn;exports.distance=An;exports.hierarchyUUID=Lt;exports.isColor=an;exports.noop=Nt;exports.randomID=nn;exports.resetThreeObjects=on;exports.round=yt;exports.theatreEditorApp=Dn;
144
+ }`;class da extends c.ShaderMaterial{constructor(){super({defines:{USE_UV:""},vertexShader:la,fragmentShader:ua})}}let ht="Renderer",Pe,mt=!1,Gt=!1,Y,se,ke,je;function fa(e){const n=C.useMemo(()=>new Map,[]),a=C.useMemo(()=>new Map,[]),t=C.useMemo(()=>new Map,[]),r=C.useMemo(()=>new c.Scene,[]),l=C.useMemo(()=>new c.Group,[]),m=C.useMemo(()=>new ca,[]),s=C.useMemo(()=>new c.AxesHelper(500),[]),d=C.useMemo(()=>new c.AxesHelper(100),[]),f=C.useMemo(()=>new c.MeshDepthMaterial,[]),g=C.useMemo(()=>new c.MeshNormalMaterial,[]),y=C.useMemo(()=>new da,[]),S=C.useMemo(()=>new c.MeshBasicMaterial({opacity:.33,transparent:!0,wireframe:!0}),[]);function x(h,v){const M=new c.OrthographicCamera(-100,100,100,-100,50,3e3);return M.name=h,M.position.copy(v),M.lookAt(0,0,0),n.set(h,M),M}const N=["Renderer","Depth","Normals","UVs","Wireframe"],L=["Single","Side by Side","Stacked","Quad"];C.useEffect(()=>{r.name="Debug Scene",l.name="helpers",r.add(l),l.add(m),s.name="axisHelper",l.add(s),d.name="interactionHelper",l.add(d),d.visible=!1,x("Top",new c.Vector3(0,1e3,0)),x("Bottom",new c.Vector3(0,-1e3,0)),x("Left",new c.Vector3(-1e3,0,0)),x("Right",new c.Vector3(1e3,0,0)),x("Front",new c.Vector3(0,0,1e3)),x("Back",new c.Vector3(0,0,-1e3)),x("Orthographic",new c.Vector3(1e3,1e3,1e3));const h=new c.PerspectiveCamera(60,1,50,3e3);h.name="Debug",h.position.set(500,500,500),h.lookAt(0,0,0),n.set("Debug",h),Y=n.get("Debug"),se=n.get("Orthographic"),ke=n.get("Front"),je=n.get("Top")},[]);const K=C.useRef(null),V=C.useRef(null),R=C.useRef(null),H=C.useRef(null),Ce=C.useRef(null),ce=C.useRef(null),[G,ee]=C.useState(e.mode!==void 0?e.mode:"Single"),[O,Me]=C.useState(null),[De,xe]=C.useState(!1),[he,ne]=C.useState(!1),[de,me]=C.useState(!1),[,ve]=C.useState(Date.now()),X=(h,v)=>{const M=a.get(h.name);M!==void 0&&M.dispose(),a.delete(h.name);const A=t.get(h.name);A!==void 0&&(r.remove(A),A.dispose()),t.delete(h.name);const W=new oa(h,v);switch(W.enableDamping=!0,W.dampingFactor=.05,h.name){case"Top":case"Bottom":case"Left":case"Right":case"Front":case"Back":W.enableRotate=!1;break}if(a.set(h.name,W),h instanceof c.PerspectiveCamera){const $=new c.CameraHelper(h);t.set(h.name,$),r.add($)}},pe=h=>{const v=t.get(h.name);v!==void 0&&(r.remove(v),v.dispose(),t.delete(h.name));const M=a.get(h.name);M!==void 0&&(M.dispose(),a.delete(h.name))},Te=()=>{a.forEach((h,v)=>{h.dispose();const M=t.get(v);M!==void 0&&(r.remove(M),M.dispose()),t.delete(v),a.delete(v)}),a.clear(),t.clear()},Re=()=>{switch(G){case"Single":X(Y,R.current);break;case"Side by Side":case"Stacked":X(Y,R.current),X(se,H.current);break;case"Quad":X(Y,R.current),X(se,H.current),X(ke,Ce.current),X(je,ce.current);break}};C.useEffect(()=>{const h=new c.WebGLRenderer({canvas:K.current,stencil:!1});h.autoClear=!1,h.shadowMap.enabled=!0,h.setPixelRatio(devicePixelRatio),h.setClearColor(0),Me(h)},[]),C.useEffect(()=>{const h=A=>{Pt(Pe),r.remove(Pe);const W=e.scenes.get(A.value.name);if(W!==void 0){const $=new W;e.onSceneSet!==void 0&&e.onSceneSet($),Pe=$,e.three.scene=Pe,r.add(Pe),Gt=!0}},v=A=>{const W=A.value,$=e.three.scene?.getObjectByProperty("uuid",W.uuid);$!==void 0&&n.set(W.name,$),ve(Date.now())},M=A=>{n.delete(A.value.name),ve(Date.now())};return j.addEventListener(D.SET_SCENE,h),j.addEventListener(D.ADD_CAMERA,v),j.addEventListener(D.REMOVE_CAMERA,M),()=>{j.removeEventListener(D.SET_SCENE,h),j.removeEventListener(D.ADD_CAMERA,v),j.removeEventListener(D.REMOVE_CAMERA,M)}},[]),C.useEffect(()=>{if(O===null)return;let h=window.innerWidth,v=window.innerHeight,M=Math.floor(h/2),A=Math.floor(v/2),W=-1;const $=()=>{h=window.innerWidth-300,v=window.innerHeight,M=Math.floor(h/2),A=Math.floor(v/2),O.setSize(h,v);let P=h,B=v;switch(G){case"Side by Side":P=M,B=v;break;case"Stacked":P=h,B=A;break;case"Quad":P=M,B=A;break}n.forEach(ae=>{ae instanceof c.OrthographicCamera?(ae.left=P/-2,ae.right=P/2,ae.top=B/2,ae.bottom=B/-2,ae.updateProjectionMatrix()):ae instanceof c.PerspectiveCamera&&(ae.aspect=P/B,ae.updateProjectionMatrix(),t.get(ae.name)?.update())})},ie=()=>{O.setViewport(0,0,h,v),O.setScissor(0,0,h,v),O.render(r,Y)},z=()=>{if(G==="Side by Side")O.setViewport(0,0,M,v),O.setScissor(0,0,M,v),O.render(r,Y),O.setViewport(M,0,M,v),O.setScissor(M,0,M,v),O.render(r,se);else{const P=v-A;O.setViewport(0,P,h,A),O.setScissor(0,P,h,A),O.render(r,Y),O.setViewport(0,0,h,A),O.setScissor(0,0,h,A),O.render(r,se)}},Z=()=>{let P=0,B=0;B=v-A,P=0,O.setViewport(P,B,M,A),O.setScissor(P,B,M,A),O.render(r,Y),P=M,O.setViewport(P,B,M,A),O.setScissor(P,B,M,A),O.render(r,se),B=0,P=0,O.setViewport(P,B,M,A),O.setScissor(P,B,M,A),O.render(r,ke),P=M,O.setViewport(P,B,M,A),O.setScissor(P,B,M,A),O.render(r,je)},re=()=>{switch(a.forEach(P=>{P.update()}),e.onSceneUpdate!==void 0&&Gt&&e.onSceneUpdate(Pe),O.clear(),G){case"Single":ie();break;case"Side by Side":case"Stacked":z();break;case"Quad":Z();break}W=requestAnimationFrame(re)};return Re(),window.addEventListener("resize",$),$(),re(),()=>{window.removeEventListener("resize",$),cancelAnimationFrame(W),W=-1}},[G,O]),C.useEffect(()=>{if(O!==null){const h=new c.Raycaster,v=new c.Vector2,M=(ie,z,Z,re)=>{switch(G){case"Quad":ie<Z?z<re?h.setFromCamera(v,Y):h.setFromCamera(v,ke):z<re?h.setFromCamera(v,se):h.setFromCamera(v,je);break;case"Side by Side":ie<Z?h.setFromCamera(v,Y):h.setFromCamera(v,se);break;case"Single":h.setFromCamera(v,Y);break;case"Stacked":z<re?h.setFromCamera(v,Y):h.setFromCamera(v,se);break}},A=ie=>{if(!mt)return;const z=new c.Vector2;O.getSize(z);const Z=Math.min(ie.clientX,z.x),re=Math.min(ie.clientY,z.y);v.x=$e(Z,0,z.x,-1,1),v.y=$e(re,0,z.y,1,-1);const P=z.x/2,B=z.y/2,ae=()=>{Z<P?v.x=$e(Z,0,P,-1,1):v.x=$e(Z,P,z.x,-1,1)},Ee=()=>{re<B?v.y=$e(re,0,B,1,-1):v.y=$e(re,B,z.y,1,-1)};switch(G){case"Quad":ae(),Ee();break;case"Side by Side":ae();break;case"Stacked":Ee(),Ee();break}M(Z,re,P,B);const we=h.intersectObjects(Pe.children);we.length>0&&d.position.copy(we[0].point)},W=ie=>{if(!mt)return;const z=new c.Vector2;if(O.getSize(z),ie.clientX>=z.x)return;A(ie);const Z=h.intersectObjects(Pe.children);Z.length>0&&e.three.getObject(Z[0].object.uuid)},$=V.current;return $.addEventListener("mousemove",A,!1),$.addEventListener("click",W,!1),()=>{$.removeEventListener("mousemove",A),$.removeEventListener("click",W)}}},[G,O]);const fe=[];return n.forEach((h,v)=>{fe.push(v)}),u.jsxs("div",{className:"multiview",children:[u.jsx("canvas",{ref:K}),O!==null&&u.jsxs(u.Fragment,{children:[u.jsxs("div",{className:`cameras ${G==="Single"||G==="Stacked"?"single":""}`,ref:V,children:[G==="Single"&&u.jsx(u.Fragment,{children:u.jsx(ze,{camera:Y,options:fe,ref:R,onSelect:h=>{a.get(Y.name)?.dispose();const v=n.get(h);v!==void 0&&(pe(Y),Y=v,X(v,R.current))}})}),(G==="Side by Side"||G==="Stacked")&&u.jsxs(u.Fragment,{children:[u.jsx(ze,{camera:Y,options:fe,ref:R,onSelect:h=>{a.get(Y.name)?.dispose();const v=n.get(h);v!==void 0&&(pe(Y),Y=v,X(v,R.current))}}),u.jsx(ze,{camera:se,options:fe,ref:H,onSelect:h=>{a.get(se.name)?.dispose();const v=n.get(h);v!==void 0&&(pe(se),se=v,X(v,H.current))}})]}),G==="Quad"&&u.jsxs(u.Fragment,{children:[u.jsx(ze,{camera:Y,options:fe,ref:R,onSelect:h=>{a.get(Y.name)?.dispose();const v=n.get(h);v!==void 0&&(pe(Y),Y=v,X(v,R.current))}}),u.jsx(ze,{camera:se,options:fe,ref:H,onSelect:h=>{a.get(se.name)?.dispose();const v=n.get(h);v!==void 0&&(pe(se),se=v,X(v,H.current))}}),u.jsx(ze,{camera:ke,options:fe,ref:Ce,onSelect:h=>{a.get(ke.name)?.dispose();const v=n.get(h);v!==void 0&&(pe(ke),ke=v,X(v,Ce.current))}}),u.jsx(ze,{camera:je,options:fe,ref:ce,onSelect:h=>{a.get(je.name)?.dispose();const v=n.get(h);v!==void 0&&(pe(je),je=v,X(v,ce.current))}})]})]}),u.jsxs("div",{className:"settings",children:[u.jsx(gt,{index:L.indexOf(G),options:L,onSelect:h=>{h!==G&&(Te(),ee(h))},open:De,onToggle:h=>{xe(h),he&&ne(!1),de&&me(!1)}}),u.jsx(gt,{index:N.indexOf(ht),options:N,onSelect:h=>{if(h!==ht)switch(ht=h,ht){case"Depth":r.overrideMaterial=f;break;case"Normals":r.overrideMaterial=g;break;default:case"Renderer":r.overrideMaterial=null;break;case"Wireframe":r.overrideMaterial=S;break;case"UVs":r.overrideMaterial=y;break}},open:he,onToggle:h=>{De&&xe(!1),ne(h),de&&me(!1)}}),u.jsx(gt,{index:0,options:["Orbit Mode","Selection Mode"],onSelect:h=>{mt=h==="Selection Mode",d.visible=mt},open:de,onToggle:h=>{De&&xe(!1),he&&ne(!1),me(h)}})]})]})]})}function pa(e){return u.jsxs("div",{className:"editor",ref:e.ref,style:e.style,children:[u.jsx("header",{children:e.header}),e.children,u.jsx("footer",{children:e.footer})]})}exports.Accordion=bt;exports.Application=En;exports.BaseRemote=rt;exports.ChildObject=jt;exports.ContainerObject=rn;exports.Draggable=tn;exports.DraggableItem=en;exports.Dropdown=nn;exports.DropdownItem=an;exports.Editor=pa;exports.Inspector=sn;exports.MultiView=fa;exports.NavButton=kt;exports.RemoteComponents=Sn;exports.RemoteController=qe;exports.RemoteTheatre=Jt;exports.RemoteThree=jn;exports.RemoteTweakpane=Dn;exports.SceneInspector=ia;exports.SidePanel=aa;exports.ToolEvents=D;exports.capitalize=Ke;exports.clamp=gn;exports.colorToHex=Kt;exports.componentsApp=Cn;exports.debugDispatcher=j;exports.defaultTheatreCallback=vn;exports.dispose=Pt;exports.disposeMaterial=Zt;exports.disposeTexture=yn;exports.distance=bn;exports.hierarchyUUID=At;exports.isColor=qt;exports.noop=_t;exports.randomID=$t;exports.resetThreeObjects=Xt;exports.round=vt;exports.theatreApp=xn;exports.theatreEditor=wn;exports.theatreEditorApp=Rn;exports.threeApp=On;exports.threeEditor=Mn;exports.tweakpaneApp=Tn;