@tomorrowevening/hermes 0.0.35 → 0.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/hermes.cjs.js +144 -0
  2. package/dist/hermes.esm.js +3849 -0
  3. package/dist/hermes.umd.js +144 -0
  4. package/dist/style.css +1 -1
  5. package/package.json +20 -16
  6. package/src/core/Application.ts +111 -0
  7. package/src/core/RemoteController.ts +60 -0
  8. package/src/core/remote/BaseRemote.ts +16 -0
  9. package/src/core/remote/RemoteComponents.ts +45 -0
  10. package/src/core/remote/RemoteTheatre.ts +300 -0
  11. package/src/core/remote/RemoteThree.ts +143 -0
  12. package/src/core/remote/RemoteTweakpane.ts +194 -0
  13. package/src/core/types.ts +56 -0
  14. package/src/editor/Editor.tsx +20 -0
  15. package/src/editor/components/Draggable.tsx +40 -0
  16. package/src/editor/components/DraggableItem.tsx +22 -0
  17. package/src/editor/components/Dropdown.tsx +38 -0
  18. package/src/editor/components/DropdownItem.tsx +64 -0
  19. package/src/editor/components/NavButton.tsx +11 -0
  20. package/src/editor/components/content.ts +2 -0
  21. package/src/editor/components/icons/CloseIcon.tsx +7 -0
  22. package/src/editor/components/icons/DragIcon.tsx +9 -0
  23. package/src/editor/components/types.ts +41 -0
  24. package/src/editor/global.ts +20 -0
  25. package/src/editor/multiView/CameraWindow.tsx +74 -0
  26. package/src/editor/multiView/InfiniteGridHelper.ts +24 -0
  27. package/src/editor/multiView/InfiniteGridMaterial.ts +127 -0
  28. package/src/editor/multiView/MultiView.scss +101 -0
  29. package/src/editor/multiView/MultiView.tsx +636 -0
  30. package/src/editor/multiView/MultiViewData.ts +59 -0
  31. package/src/editor/multiView/UVMaterial.ts +55 -0
  32. package/src/editor/scss/_debug.scss +58 -0
  33. package/src/editor/scss/_draggable.scss +43 -0
  34. package/src/editor/scss/_dropdown.scss +84 -0
  35. package/src/editor/scss/_sidePanel.scss +278 -0
  36. package/src/editor/scss/_theme.scss +9 -0
  37. package/src/editor/scss/index.scss +67 -0
  38. package/src/editor/sidePanel/Accordion.tsx +41 -0
  39. package/src/editor/sidePanel/ChildObject.tsx +57 -0
  40. package/src/editor/sidePanel/ContainerObject.tsx +11 -0
  41. package/src/editor/sidePanel/SidePanel.tsx +64 -0
  42. package/src/editor/sidePanel/ToggleBtn.tsx +27 -0
  43. package/src/editor/sidePanel/inspector/Inspector.tsx +119 -0
  44. package/src/editor/sidePanel/inspector/InspectorField.tsx +198 -0
  45. package/src/editor/sidePanel/inspector/InspectorGroup.tsx +50 -0
  46. package/src/editor/sidePanel/inspector/SceneInspector.tsx +84 -0
  47. package/src/editor/sidePanel/inspector/inspector.scss +161 -0
  48. package/src/editor/sidePanel/inspector/utils/InspectAnimation.tsx +102 -0
  49. package/src/editor/sidePanel/inspector/utils/InspectCamera.tsx +75 -0
  50. package/src/editor/sidePanel/inspector/utils/InspectLight.tsx +62 -0
  51. package/src/editor/sidePanel/inspector/utils/InspectMaterial.tsx +710 -0
  52. package/src/editor/sidePanel/inspector/utils/InspectTransform.tsx +113 -0
  53. package/src/editor/sidePanel/types.ts +130 -0
  54. package/src/editor/sidePanel/utils.ts +278 -0
  55. package/src/editor/utils.ts +117 -0
  56. package/src/example/CustomEditor.tsx +78 -0
  57. package/src/example/components/App.css +6 -0
  58. package/src/example/components/App.tsx +246 -0
  59. package/src/example/constants.ts +52 -0
  60. package/src/example/index.scss +45 -0
  61. package/src/example/main.tsx +37 -0
  62. package/src/example/three/BaseScene.ts +42 -0
  63. package/src/example/three/CustomMaterial.ts +72 -0
  64. package/src/example/three/FBXAnimation.ts +26 -0
  65. package/src/example/three/Scene1.ts +225 -0
  66. package/src/example/three/Scene2.ts +138 -0
  67. package/src/example/three/loader.ts +110 -0
  68. package/src/index.ts +27 -0
  69. package/src/vite-env.d.ts +1 -0
  70. package/dist/hermes.js +0 -3901
  71. package/dist/hermes.umd.cjs +0 -144
@@ -1,144 +0,0 @@
1
- (function(w,c){typeof exports=="object"&&typeof module<"u"?c(exports,require("three"),require("@theatre/core"),require("@theatre/studio"),require("tweakpane"),require("@tweakpane/plugin-essentials"),require("react"),require("framer-motion")):typeof define=="function"&&define.amd?define(["exports","three","@theatre/core","@theatre/studio","tweakpane","@tweakpane/plugin-essentials","react","framer-motion"],c):(w=typeof globalThis<"u"?globalThis:w||self,c(w.Hermes={},w.three,w["@theatre/core"],w["@theatre/studio"],w.tweakpane,w["tweakpane-plugin-essentials"],w.react,w["framer-motion"]))})(this,function(w,c,Ce,Je,Rn,An,P,Xt){"use strict";var Na=Object.defineProperty;var La=(w,c,Ce)=>c in w?Na(w,c,{enumerable:!0,configurable:!0,writable:!0,value:Ce}):w[c]=Ce;var V=(w,c,Ce)=>(La(w,typeof c!="symbol"?c+"":c,Ce),Ce);function Pn(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 kn=Pn(An);function ze(t){return t.substring(0,1).toUpperCase()+t.substring(1)}function jn(t,n,a){return Math.min(n,Math.max(t,a))}function _n(t,n){const a=t-n;return Math.sqrt(a*a)}function Zt(){return Math.round(Math.random()*1e6).toString()}function Jt(t){return t.r!==void 0&&t.g!==void 0&&t.b!==void 0}function Qt(t){const n=Math.round(t.r*255),a=Math.round(t.g*255),e=Math.round(t.b*255),r=u=>{const f=u.toString(16);return f.length===1?"0"+f:f},s=r(n),p=r(a),l=r(e);return"#"+s+p+l}function ft(t,n=1){return Number(t.toFixed(n))}w.totalThreeObjects=0;const qt=()=>{w.totalThreeObjects=0},Pt=t=>{if(!t)return;let n=t.name.replace(" ","");n.length===0&&(n=`obj_${w.totalThreeObjects}`,w.totalThreeObjects++),t.parent!==null&&(n=`${t.parent.uuid}.${n}`),t.uuid=n,t.children.forEach(a=>{Pt(a)})},Dn=t=>{t==null||t.dispose()},$t=t=>{t&&(Array.isArray(t)?t.forEach(n=>n.dispose()):t.dispose())},kt=t=>{var n;if(t){for(;t.children.length>0;){const a=t.children[0];a instanceof c.PositionalAudio?(a.pause(),a.parent&&a.parent.remove(a)):kt(a)}if(t.parent&&t.parent.remove(t),t.isMesh){const a=t;(n=a.geometry)==null||n.dispose(),$t(a.material)}t.dispose!==void 0&&t.dispose()}};class In{constructor(n,a,e=!0,r="editor"){V(this,"components",new Map);V(this,"listen");V(this,"_debugEnabled");V(this,"broadcastChannel");V(this,"webSocket");V(this,"_mode","app");V(this,"_connected",!1);V(this,"useBC",!1);V(this,"messageHandler",n=>{this.listen!==void 0&&(this.useBC?this.listen(n.data):this.listen(JSON.parse(n.data)))});V(this,"openHandler",()=>{this._connected=!0});V(this,"closeHandler",()=>{this._connected=!1});this.editor=a&&document.location.hash.search(r)>-1,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)))}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){var a,e;this._mode!==n.target&&(this.useBC?(a=this.broadcastChannel)==null||a.postMessage(n):this._connected&&((e=this.webSocket)==null||e.send(JSON.stringify(n))))}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",document.title+=" - Editor")}}const I=new c.EventDispatcher,N={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 Qe{constructor(n){V(this,"app");this.app=n}dispose(){}}class en extends Qe{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 Nn(t,n){switch(n.event){case"selectComponent":I.dispatchEvent({type:N.SELECT_DROPDOWN,value:n.data});break;case"draggableListUpdate":I.dispatchEvent({type:N.DRAG_UPDATE,value:n.data});break}}const tn=()=>{},Ge=class Ge extends Qe{constructor(){super(...arguments);V(this,"project");V(this,"sheets",new Map);V(this,"sheetObjects",new Map);V(this,"sheetObjectCBs",new Map);V(this,"sheetObjectUnsubscribe",new Map)}init(a,e){return this.project=Ce.getProject(a,e),this.project.ready}dispose(){this.project=void 0,this.sheets=new Map,this.sheetObjects=new Map,this.sheetObjectCBs=new Map,this.sheetObjectUnsubscribe=new Map}sheet(a){var r;if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}let e=this.sheets.get(a);return e!==void 0||(e=(r=this.project)==null?void 0:r.sheet(a),this.sheets.set(a,e)),e}playSheet(a,e){var r;(r=this.sheet(a))==null||r.sequence.play(e),this.app.send({event:"playSheet",target:"editor",data:{sheet:a,value:e}})}pauseSheet(a){var e;(e=this.sheet(a))==null||e.sequence.pause(),this.app.send({event:"pauseSheet",target:"editor",data:{sheet:a}})}clearSheetObjects(a){this.sheetObjects.forEach((e,r)=>{r.search(`${a}_`)>-1&&this.unsubscribe(e)})}sheetObject(a,e,r,s){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const p=this.sheet(a);if(p===void 0)return;const l=`${a}_${e}`;let u=this.sheetObjects.get(l);u!==void 0?u=p.object(e,{...r,...u.value},{reconfigure:!0}):u=p.object(e,r),this.sheetObjects.set(l,u),this.sheetObjectCBs.set(l,s!==void 0?s:tn);const f=u.onValuesChange(y=>{if(this.app.editor){for(const C in y){const x=y[C];typeof x=="object"&&Jt(x)&&(y[C]={r:x.r,g:x.g,b:x.b,a:x.a})}this.app.send({event:"updateSheetObject",target:"app",data:{sheet:a,sheetObject:l,values:y}})}const v=this.sheetObjectCBs.get(l);v!==void 0&&v(y)});return this.sheetObjectUnsubscribe.set(l,f),u}unsubscribe(a){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const e=a.address.sheetId,r=a.address.objectKey,s=this.sheets.get(e);s==null||s.detachObject(r);const p=`${e}_${r}`,l=this.sheetObjectUnsubscribe.get(p);l!==void 0&&(this.sheetObjects.delete(p),this.sheetObjectCBs.delete(p),this.sheetObjectUnsubscribe.delete(p),l())}static getRafDriver(){return Ge.rafDriver||(Ge.rafDriver=Ce.createRafDriver()),Ge.rafDriver}};V(Ge,"rafDriver",null);let Me=Ge,Se;function Ln(t,n){t.components.forEach(a=>{if(a instanceof Me){let e;const r=a;switch(n.event){case"setSheet":e=r.sheets.get(n.data.sheet),e!==void 0&&(Se=e,Je.setSelection([e]));break;case"setSheetObject":e=r.sheetObjects.get(`${n.data.sheet}_${n.data.key}`),e!==void 0&&Je.setSelection([e]);break;case"updateSheetObject":e=r.sheets.get(n.data.sheet),e!==void 0&&e.sequence.pause(),e=r.sheetObjectCBs.get(n.data.sheetObject),e!==void 0&&e(n.data.values);break;case"updateTimeline":e=r.sheets.get(n.data.sheet),Se!==void 0&&(Se.sequence.position=n.data.position);break}}})}function Fn(t){if(t.editor){let n;t.components.forEach(s=>{s instanceof Me&&(n=s)}),Je.ui.restore(),Je.onSelectionChange(s=>{s.length<1||s.forEach(p=>{let l=p.address.sheetId,u="setSheet",f={};switch(p.type){case"Theatre_Sheet_PublicAPI":u="setSheet",f={sheet:p.address.sheetId},Se=n.sheets.get(p.address.sheetId);break;case"Theatre_SheetObject_PublicAPI":u="setSheetObject",l+=`_${p.address.objectKey}`,f={id:l,sheet:p.address.sheetId,key:p.address.objectKey};break}t.send({event:u,target:"app",data:f})})});let a=0;const e=()=>{if(Se!==void 0&&a!==Se.sequence.position){a=Se.sequence.position;const s=Se;t.send({event:"updateTimeline",target:"app",data:{position:a,sheet:s.address.sheetId}})}},r=()=>{e(),requestAnimationFrame(r)};e(),r()}else Je.ui.hide()}function Un(t,n){t.editor&&t.components.forEach(a=>{var e,r;if(a instanceof Me){const s=a;switch(n.event){case"playSheet":(e=s.sheet(n.data.sheet))==null||e.sequence.play(n.data.value);break;case"pauseSheet":(r=s.sheet(n.data.sheet))==null||r.sequence.pause();break}return}})}function Bn(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 nn(t){const n={name:t.name,type:t.type,uuid:t.uuid,children:[]};return t.children.forEach(a=>{n.children.push(nn(a))}),n}function Vn(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 zn(t){switch(t){case"blendSrcAlpha":case"blendDstAlpha":case"blendEquationAlpha":case"clippingPlanes":case"shadowSide":case"precision":return!0}return!1}function He(t){const n={};for(const a in t){if(a.substring(0,1)==="_"||a.substring(0,2)==="is"||zn(a))continue;const e=typeof t[a],r=t[a];switch(e){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 s=r.source.toJSON();n[a]={src:s.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]=Vn(n[a]));else n[a]={src:""};break}}return n}function jt(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 r=[];e.material.forEach(s=>{r.push(He(s))}),n.material=r}else n.material=He(e.material)}else if(a.search("points")>-1){const e=t;if(Array.isArray(e.material)){const r=[];e.material.forEach(s=>{r.push(He(s))}),n.material=r}else n.material=He(e.material)}else if(a.search("line")>-1){const e=t;if(Array.isArray(e.material)){const r=[];e.material.forEach(s=>{r.push(He(s))}),n.material=r}else n.material=He(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 Hn(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 ae(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 _t(t){return new Promise((n,a)=>{const e=new Image;e.onload=()=>{const r=new c.Texture(e);r.wrapS=c.RepeatWrapping,r.wrapT=c.RepeatWrapping,r.needsUpdate=!0,n(r)},e.onerror=a,e.src=t})}class an extends Qe{constructor(){super(...arguments);V(this,"scene")}getObject(a){this.app.debugEnabled&&this.app.send({event:"getObject",target:"app",data:a})}setObject(a){const e=jt(a);this.app.send({event:"setObject",target:"editor",data:e})}requestMethod(a,e,r,s){this.app.send({event:"requestMethod",target:"app",data:{uuid:a,key:e,value:r,subitem:s}})}updateObject(a,e,r){this.app.send({event:"updateObject",target:"app",data:{uuid:a,key:e,value:r}})}createTexture(a,e,r){this.app.send({event:"createTexture",target:"app",data:{uuid:a,key:e,value:r}})}setScene(a){if(a===void 0||(this.scene=a,!this.app.debugEnabled))return;qt(),Pt(this.scene);const e=nn(this.scene);this.app.send({event:"setScene",target:"editor",data:e})}addCamera(a){if(!this.app.debugEnabled)return;const e=jt(a);this.app.send({event:"addCamera",target:"editor",data:e})}removeCamera(a){if(!this.app.debugEnabled)return;const e=jt(a);this.app.send({event:"removeCamera",target:"editor",data:e})}}function Yn(t,n){switch(n.event){case"getObject":I.dispatchEvent({type:N.GET_OBJECT,value:n.data});break;case"updateObject":I.dispatchEvent({type:N.UPDATE_OBJECT,value:n.data});break;case"createTexture":I.dispatchEvent({type:N.CREATE_TEXTURE,value:n.data});break;case"requestMethod":I.dispatchEvent({type:N.REQUEST_METHOD,value:n.data});break}}function Gn(t,n){switch(n.event){case"setObject":I.dispatchEvent({type:N.SET_OBJECT,value:n.data});break;case"setScene":I.dispatchEvent({type:N.SET_SCENE,value:n.data});break;case"addCamera":I.dispatchEvent({type:N.ADD_CAMERA,value:n.data});break;case"removeCamera":I.dispatchEvent({type:N.REMOVE_CAMERA,value:n.data});break}}class Dt extends Qe{constructor(a){super(a);V(this,"bindCBs");V(this,"buttonCBs");V(this,"pane");V(this,"appCallbacks",0);V(this,"editorCallbacks",0);V(this,"inspectorFolder");this.bindCBs=new Map,this.buttonCBs=new Map,a.editor&&this.createGUI()}createGUI(){this.pane=new Rn.Pane({title:"GUI"}),this.pane.registerPlugin(kn)}dispose(){var a;this.bindCBs.clear(),this.buttonCBs.clear(),this.appCallbacks=0,this.editorCallbacks=0,this.app.editor&&((a=this.pane)==null||a.dispose(),this.pane=void 0)}addFolder(a,e=void 0,r=void 0){if(this.app.editor)return this.pane===void 0&&this.createGUI(),(r!==void 0?r:this.pane).addFolder({title:a,...e});this.app.send({event:"addFolder",target:"app",data:{name:a,params:e,parent:r}})}get bindID(){return`debug_${Math.max(this.appCallbacks,this.editorCallbacks)}`}bind(a,e,r,s=void 0){const p=this.bindID,l=r.onChange!==void 0?r.onChange:tn;this.bindCBs.set(p,l),this.app.editor?(this.pane===void 0&&this.createGUI(),(s!==void 0?s:this.pane).addBinding(a,e,r).on("change",f=>{this.app.send({event:"updateBind",target:"app",data:{id:p,value:f.value}})}),this.editorCallbacks++):(this.app.send({event:"bindObject",target:"app",data:{id:p,name:e,params:r,parent:s}}),this.appCallbacks++)}triggerBind(a,e){const r=this.bindCBs.get(a);r!==void 0?r(e):console.warn(`No callback for: ${a}`,e)}button(a,e,r=void 0){const s=this.bindID;this.buttonCBs.set(s,e),this.app.editor?(this.pane===void 0&&this.createGUI(),(r!==void 0?r:this.pane).addButton({title:a}).on("click",()=>{this.app.send({event:"clickButton",target:"app",data:{id:s}})}),this.editorCallbacks++):(this.app.send({event:"addButton",target:"app",data:{id:s,name:a,callback:e,parent:r}}),this.appCallbacks++)}triggerButton(a){const e=this.buttonCBs.get(a);e!==void 0&&e()}createInspector(){this.inspectorFolder=this.addFolder("Inspector",this.pane)}clearInspector(){const a=this.inspectorFolder.children.length-1;for(let e=a;e>-1;--e)this.inspectorFolder.remove(this.inspectorFolder.children[e])}}function Wn(t,n){t.components.forEach(a=>{if(a instanceof Dt){const e=a;switch(n.event){case"addFolder":e.addFolder(n.data.name,n.data.params,n.data.parent);break;case"bindObject":e.bind(n.data.name,n.data.params,n.data.parent);break;case"updateBind":e.triggerBind(n.data.id,n.data.value);break;case"addButton":e.button(n.data.name,n.data.callback,n.data.parent);break;case"clickButton":e.triggerButton(n.data.id);break}return}})}var It={exports:{}},qe={};/**
2
- * @license React
3
- * react-jsx-runtime.production.min.js
4
- *
5
- * Copyright (c) Facebook, Inc. and its affiliates.
6
- *
7
- * This source code is licensed under the MIT license found in the
8
- * LICENSE file in the root directory of this source tree.
9
- */var rn;function Kn(){if(rn)return qe;rn=1;var t=P,n=Symbol.for("react.element"),a=Symbol.for("react.fragment"),e=Object.prototype.hasOwnProperty,r=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,s={key:!0,ref:!0,__self:!0,__source:!0};function p(l,u,f){var y,v={},C=null,x=null;f!==void 0&&(C=""+f),u.key!==void 0&&(C=""+u.key),u.ref!==void 0&&(x=u.ref);for(y in u)e.call(u,y)&&!s.hasOwnProperty(y)&&(v[y]=u[y]);if(l&&l.defaultProps)for(y in u=l.defaultProps,u)v[y]===void 0&&(v[y]=u[y]);return{$$typeof:n,type:l,key:C,ref:x,props:v,_owner:r.current}}return qe.Fragment=a,qe.jsx=p,qe.jsxs=p,qe}var $e={};/**
10
- * @license React
11
- * react-jsx-runtime.development.js
12
- *
13
- * Copyright (c) Facebook, Inc. and its affiliates.
14
- *
15
- * This source code is licensed under the MIT license found in the
16
- * LICENSE file in the root directory of this source tree.
17
- */var on;function Xn(){return on||(on=1,process.env.NODE_ENV!=="production"&&function(){var t=P,n=Symbol.for("react.element"),a=Symbol.for("react.portal"),e=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),p=Symbol.for("react.provider"),l=Symbol.for("react.context"),u=Symbol.for("react.forward_ref"),f=Symbol.for("react.suspense"),y=Symbol.for("react.suspense_list"),v=Symbol.for("react.memo"),C=Symbol.for("react.lazy"),x=Symbol.for("react.offscreen"),O=Symbol.iterator,A="@@iterator";function J(i){if(i===null||typeof i!="object")return null;var m=O&&i[O]||i[A];return typeof m=="function"?m:null}var F=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function M(i){{for(var m=arguments.length,b=new Array(m>1?m-1:0),T=1;T<m;T++)b[T-1]=arguments[T];Z("error",i,b)}}function Z(i,m,b){{var T=F.ReactDebugCurrentFrame,L=T.getStackAddendum();L!==""&&(m+="%s",b=b.concat([L]));var Y=b.map(function(D){return String(D)});Y.unshift("Warning: "+m),Function.prototype.apply.call(console[i],console,Y)}}var he=!1,ie=!1,se=!1,h=!1,g=!1,S;S=Symbol.for("react.module.reference");function _(i){return!!(typeof i=="string"||typeof i=="function"||i===e||i===s||g||i===r||i===f||i===y||h||i===x||he||ie||se||typeof i=="object"&&i!==null&&(i.$$typeof===C||i.$$typeof===v||i.$$typeof===p||i.$$typeof===l||i.$$typeof===u||i.$$typeof===S||i.getModuleId!==void 0))}function W(i,m,b){var T=i.displayName;if(T)return T;var L=m.displayName||m.name||"";return L!==""?b+"("+L+")":b}function G(i){return i.displayName||"Context"}function z(i){if(i==null)return null;if(typeof i.tag=="number"&&M("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 s:return"Profiler";case r:return"StrictMode";case f:return"Suspense";case y:return"SuspenseList"}if(typeof i=="object")switch(i.$$typeof){case l:var m=i;return G(m)+".Consumer";case p:var b=i;return G(b._context)+".Provider";case u:return W(i,i.render,"ForwardRef");case v:var T=i.displayName||null;return T!==null?T:z(i.type)||"Memo";case C:{var L=i,Y=L._payload,D=L._init;try{return z(D(Y))}catch{return null}}}return null}var U=Object.assign,Q=0,q,k,H,te,fe,we,yt;function it(){}it.__reactDisabledLog=!0;function Bt(){{if(Q===0){q=console.log,k=console.info,H=console.warn,te=console.error,fe=console.group,we=console.groupCollapsed,yt=console.groupEnd;var i={configurable:!0,enumerable:!0,value:it,writable:!0};Object.defineProperties(console,{info:i,log:i,warn:i,error:i,group:i,groupCollapsed:i,groupEnd:i})}Q++}}function Vt(){{if(Q--,Q===0){var i={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:U({},i,{value:q}),info:U({},i,{value:k}),warn:U({},i,{value:H}),error:U({},i,{value:te}),group:U({},i,{value:fe}),groupCollapsed:U({},i,{value:we}),groupEnd:U({},i,{value:yt})})}Q<0&&M("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var rt=F.ReactCurrentDispatcher,ot;function We(i,m,b){{if(ot===void 0)try{throw Error()}catch(L){var T=L.stack.trim().match(/\n( *(at )?)/);ot=T&&T[1]||""}return`
18
- `+ot+i}}var Ke=!1,_e;{var Et=typeof WeakMap=="function"?WeakMap:Map;_e=new Et}function Ct(i,m){if(!i||Ke)return"";{var b=_e.get(i);if(b!==void 0)return b}var T;Ke=!0;var L=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var Y;Y=rt.current,rt.current=null,Bt();try{if(m){var D=function(){throw Error()};if(Object.defineProperty(D.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(D,[])}catch(Ee){T=Ee}Reflect.construct(i,[],D)}else{try{D.call()}catch(Ee){T=Ee}i.call(D.prototype)}}else{try{throw Error()}catch(Ee){T=Ee}i()}}catch(Ee){if(Ee&&T&&typeof Ee.stack=="string"){for(var j=Ee.stack.split(`
19
- `),de=T.stack.split(`
20
- `),ee=j.length-1,ne=de.length-1;ee>=1&&ne>=0&&j[ee]!==de[ne];)ne--;for(;ee>=1&&ne>=0;ee--,ne--)if(j[ee]!==de[ne]){if(ee!==1||ne!==1)do if(ee--,ne--,ne<0||j[ee]!==de[ne]){var ve=`
21
- `+j[ee].replace(" at new "," at ");return i.displayName&&ve.includes("<anonymous>")&&(ve=ve.replace("<anonymous>",i.displayName)),typeof i=="function"&&_e.set(i,ve),ve}while(ee>=1&&ne>=0);break}}}finally{Ke=!1,rt.current=Y,Vt(),Error.prepareStackTrace=L}var Ze=i?i.displayName||i.name:"",Tn=Ze?We(Ze):"";return typeof i=="function"&&_e.set(i,Tn),Tn}function zt(i,m,b){return Ct(i,!1)}function St(i){var m=i.prototype;return!!(m&&m.isReactComponent)}function De(i,m,b){if(i==null)return"";if(typeof i=="function")return Ct(i,St(i));if(typeof i=="string")return We(i);switch(i){case f:return We("Suspense");case y:return We("SuspenseList")}if(typeof i=="object")switch(i.$$typeof){case u:return zt(i.render);case v:return De(i.type,m,b);case C:{var T=i,L=T._payload,Y=T._init;try{return De(Y(L),m,b)}catch{}}}return""}var Ie=Object.prototype.hasOwnProperty,wt={},Ot=F.ReactDebugCurrentFrame;function Ne(i){if(i){var m=i._owner,b=De(i.type,i._source,m?m.type:null);Ot.setExtraStackFrame(b)}else Ot.setExtraStackFrame(null)}function st(i,m,b,T,L){{var Y=Function.call.bind(Ie);for(var D in i)if(Y(i,D)){var j=void 0;try{if(typeof i[D]!="function"){var de=Error((T||"React class")+": "+b+" type `"+D+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof i[D]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw de.name="Invariant Violation",de}j=i[D](m,D,T,b,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(ee){j=ee}j&&!(j instanceof Error)&&(Ne(L),M("%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).",T||"React class",b,D,typeof j),Ne(null)),j instanceof Error&&!(j.message in wt)&&(wt[j.message]=!0,Ne(L),M("Failed %s type: %s",b,j.message),Ne(null))}}}var Le=Array.isArray;function ct(i){return Le(i)}function Ht(i){{var m=typeof Symbol=="function"&&Symbol.toStringTag,b=m&&i[Symbol.toStringTag]||i.constructor.name||"Object";return b}}function xt(i){try{return Mt(i),!1}catch{return!0}}function Mt(i){return""+i}function Tt(i){if(xt(i))return M("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",Ht(i)),Mt(i)}var Oe=F.ReactCurrentOwner,lt={key:!0,ref:!0,__self:!0,__source:!0},ut,Rt,Xe;Xe={};function Yt(i){if(Ie.call(i,"ref")){var m=Object.getOwnPropertyDescriptor(i,"ref").get;if(m&&m.isReactWarning)return!1}return i.ref!==void 0}function Gt(i){if(Ie.call(i,"key")){var m=Object.getOwnPropertyDescriptor(i,"key").get;if(m&&m.isReactWarning)return!1}return i.key!==void 0}function At(i,m){if(typeof i.ref=="string"&&Oe.current&&m&&Oe.current.stateNode!==m){var b=z(Oe.current.type);Xe[b]||(M('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',z(Oe.current.type),i.ref),Xe[b]=!0)}}function xe(i,m){{var b=function(){ut||(ut=!0,M("%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)",m))};b.isReactWarning=!0,Object.defineProperty(i,"key",{get:b,configurable:!0})}}function Mn(i,m){{var b=function(){Rt||(Rt=!0,M("%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)",m))};b.isReactWarning=!0,Object.defineProperty(i,"ref",{get:b,configurable:!0})}}var o=function(i,m,b,T,L,Y,D){var j={$$typeof:n,type:i,key:m,ref:b,props:D,_owner:Y};return j._store={},Object.defineProperty(j._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(j,"_self",{configurable:!1,enumerable:!1,writable:!1,value:T}),Object.defineProperty(j,"_source",{configurable:!1,enumerable:!1,writable:!1,value:L}),Object.freeze&&(Object.freeze(j.props),Object.freeze(j)),j};function E(i,m,b,T,L){{var Y,D={},j=null,de=null;b!==void 0&&(Tt(b),j=""+b),Gt(m)&&(Tt(m.key),j=""+m.key),Yt(m)&&(de=m.ref,At(m,L));for(Y in m)Ie.call(m,Y)&&!lt.hasOwnProperty(Y)&&(D[Y]=m[Y]);if(i&&i.defaultProps){var ee=i.defaultProps;for(Y in ee)D[Y]===void 0&&(D[Y]=ee[Y])}if(j||de){var ne=typeof i=="function"?i.displayName||i.name||"Unknown":i;j&&xe(D,ne),de&&Mn(D,ne)}return o(i,j,de,L,T,Oe.current,D)}}var R=F.ReactCurrentOwner,B=F.ReactDebugCurrentFrame;function $(i){if(i){var m=i._owner,b=De(i.type,i._source,m?m.type:null);B.setExtraStackFrame(b)}else B.setExtraStackFrame(null)}var pe;pe=!1;function ue(i){return typeof i=="object"&&i!==null&&i.$$typeof===n}function Wt(){{if(R.current){var i=z(R.current.type);if(i)return`
22
-
23
- Check the render method of \``+i+"`."}return""}}function Kt(i){{if(i!==void 0){var m=i.fileName.replace(/^.*[\\\/]/,""),b=i.lineNumber;return`
24
-
25
- Check your code at `+m+":"+b+"."}return""}}var dt={};function ge(i){{var m=Wt();if(!m){var b=typeof i=="string"?i:i.displayName||i.name;b&&(m=`
26
-
27
- Check the top-level render call using <`+b+">.")}return m}}function me(i,m){{if(!i._store||i._store.validated||i.key!=null)return;i._store.validated=!0;var b=ge(m);if(dt[b])return;dt[b]=!0;var T="";i&&i._owner&&i._owner!==R.current&&(T=" It was passed a child from "+z(i._owner.type)+"."),$(i),M('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',b,T),$(null)}}function Fe(i,m){{if(typeof i!="object")return;if(ct(i))for(var b=0;b<i.length;b++){var T=i[b];ue(T)&&me(T,m)}else if(ue(i))i._store&&(i._store.validated=!0);else if(i){var L=J(i);if(typeof L=="function"&&L!==i.entries)for(var Y=L.call(i),D;!(D=Y.next()).done;)ue(D.value)&&me(D.value,m)}}}function Ue(i){{var m=i.type;if(m==null||typeof m=="string")return;var b;if(typeof m=="function")b=m.propTypes;else if(typeof m=="object"&&(m.$$typeof===u||m.$$typeof===v))b=m.propTypes;else return;if(b){var T=z(m);st(b,i.props,"prop",T,i)}else if(m.PropTypes!==void 0&&!pe){pe=!0;var L=z(m);M("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",L||"Unknown")}typeof m.getDefaultProps=="function"&&!m.getDefaultProps.isReactClassApproved&&M("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}function Be(i){{for(var m=Object.keys(i.props),b=0;b<m.length;b++){var T=m[b];if(T!=="children"&&T!=="key"){$(i),M("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",T),$(null);break}}i.ref!==null&&($(i),M("Invalid attribute `ref` supplied to `React.Fragment`."),$(null))}}function Ve(i,m,b,T,L,Y){{var D=_(i);if(!D){var j="";(i===void 0||typeof i=="object"&&i!==null&&Object.keys(i).length===0)&&(j+=" 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 de=Kt(L);de?j+=de:j+=Wt();var ee;i===null?ee="null":ct(i)?ee="array":i!==void 0&&i.$$typeof===n?(ee="<"+(z(i.type)||"Unknown")+" />",j=" Did you accidentally export a JSX literal instead of a component?"):ee=typeof i,M("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",ee,j)}var ne=E(i,m,b,L,Y);if(ne==null)return ne;if(D){var ve=m.children;if(ve!==void 0)if(T)if(ct(ve)){for(var Ze=0;Ze<ve.length;Ze++)Fe(ve[Ze],i);Object.freeze&&Object.freeze(ve)}else M("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 Fe(ve,i)}return i===e?Be(ne):Ue(ne),ne}}function ja(i,m,b){return Ve(i,m,b,!0)}function _a(i,m,b){return Ve(i,m,b,!1)}var Da=_a,Ia=ja;$e.Fragment=e,$e.jsx=Da,$e.jsxs=Ia}()),$e}process.env.NODE_ENV==="production"?It.exports=Kn():It.exports=Xn();var d=It.exports;function Nt(t){return t.title.search("<")>-1?d.jsx("button",{className:"svg",dangerouslySetInnerHTML:{__html:t.title}}):d.jsx("button",{children:t.title})}const Zn=d.jsxs("svg",{className:"closeIcon",width:"14",height:"14",fill:"none",stroke:"#666666",strokeMiterlimit:"10",children:[d.jsx("circle",{cx:"7",cy:"7",r:"6"}),d.jsx("line",{x1:"4",y1:"4",x2:"10",y2:"10"}),d.jsx("line",{x1:"4",y1:"10",x2:"10",y2:"4"})]}),Jn=d.jsx("svg",{className:"dragIcon",width:"14",height:"14",fill:"#666666",stroke:"none",children:d.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
- 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 sn(t){return d.jsx(Xt.Reorder.Item,{value:t.title,children:d.jsxs("div",{children:[Jn,d.jsx("span",{children:t.title}),d.jsx("button",{className:"closeIcon",onClick:()=>{t.onDelete(t.index)},children:Zn})]})},t.title)}function cn(t){const[n,a]=P.useState(!1),[e,r]=P.useState(t.options),s=f=>{t.onDragComplete(f),r(f)},p=f=>{const y=[...e];y.splice(f,1),s(y)},l=[];e.forEach((f,y)=>{l.push(d.jsx(sn,{index:y,title:f,onDelete:p},f))});let u="dropdown draggable";return t.subdropdown&&(u+=" subdropdown"),d.jsxs("div",{className:u,onMouseEnter:()=>a(!0),onMouseLeave:()=>a(!1),children:[d.jsx(Nt,{title:t.title}),d.jsx(Xt.Reorder.Group,{axis:"y",values:e,onReorder:s,style:{visibility:n?"visible":"hidden"},children:l})]})}function ln(t){const[n,a]=P.useState(!1),e=[];t.options.map((s,p)=>{t.onSelect!==void 0&&(s.onSelect=t.onSelect),e.push(d.jsx(un,{option:s},p))});let r="dropdown";return t.subdropdown&&(r+=" subdropdown"),d.jsxs("div",{className:r,onMouseEnter:()=>a(!0),onMouseLeave:()=>a(!1),children:[d.jsx(Nt,{title:t.title}),d.jsx("ul",{style:{visibility:n?"visible":"hidden"},children:e})]})}function un(t){const{option:n}=t,[a,e]=P.useState("");let r;switch(n.type){case"draggable":r=d.jsx(cn,{title:n.title,options:n.value,onDragComplete:s=>{n.onDragComplete!==void 0&&n.onDragComplete(s)},subdropdown:!0});break;case"dropdown":r=d.jsx(ln,{title:n.title,options:n.value,onSelect:n.onSelect,subdropdown:!0});break;case"option":r=d.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 d.jsx("li",{className:a===n.title?"selected":"",children:r},Zt())}function Qn(t){const n=[],a=[];t.components.forEach(s=>{s instanceof en?n.push(Nn):s instanceof Me?(n.push(Ln),a.push(Un),Fn(t)):s instanceof an?(n.push(Yn),a.push(Gn)):s instanceof Dt&&n.push(Wn)});function e(s){switch(n.forEach(p=>p(t,s)),s.event){case"custom":I.dispatchEvent({type:N.CUSTOM,value:s.data});break}}function r(s){switch(a.forEach(p=>p(t,s)),s.event){case"custom":I.dispatchEvent({type:N.CUSTOM,value:s.data});break}}t.listen=s=>{s.target==="editor"?r(s):e(s)}}const qn=`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 ea extends c.ShaderMaterial{constructor(n){super({extensions:{derivatives:!0},glslVersion:c.GLSL3,side:c.DoubleSide,transparent:!0,uniforms:{uScale:{value:(n==null?void 0:n.scale)!==void 0?n==null?void 0:n.scale:.1},uDivisions:{value:(n==null?void 0:n.divisions)!==void 0?n==null?void 0:n.divisions:10},uColor:{value:(n==null?void 0:n.color)!==void 0?n==null?void 0:n.color:new c.Color(16777215)},uDistance:{value:(n==null?void 0:n.distance)!==void 0?n==null?void 0:n.distance:1e4},uSubgridOpacity:{value:(n==null?void 0:n.subgridOpacity)!==void 0?n==null?void 0:n.subgridOpacity:.15},uGridOpacity:{value:(n==null?void 0:n.gridOpacity)!==void 0?n==null?void 0:n.gridOpacity:.25}},vertexShader:qn,fragmentShader:$n,name:"InfiniteGrid",depthWrite:!1})}}class dn extends c.Mesh{constructor(){const a=new ea;super(new c.PlaneGeometry(2,2),a);V(this,"gridMaterial");this.gridMaterial=a,this.frustumCulled=!1,this.name="InfiniteGridHelper",this.position.y=.1}update(){this.gridMaterial.needsUpdate=!0}}const ta=`#include <common>
106
- #include <batching_pars_vertex>
107
- #include <uv_pars_vertex>
108
- #include <color_pars_vertex>
109
- #include <morphtarget_pars_vertex>
110
- #include <skinning_pars_vertex>
111
- #include <logdepthbuf_pars_vertex>
112
- #include <clipping_planes_pars_vertex>
113
-
114
- void main() {
115
- #include <uv_vertex>
116
- #include <color_vertex>
117
- #include <morphcolor_vertex>
118
- #include <batching_vertex>
119
-
120
- #if defined ( USE_SKINNING )
121
- #include <beginnormal_vertex>
122
- #include <morphnormal_vertex>
123
- #include <skinbase_vertex>
124
- #include <skinnormal_vertex>
125
- #include <defaultnormal_vertex>
126
- #endif
127
-
128
- #include <begin_vertex>
129
- #include <morphtarget_vertex>
130
- #include <skinning_vertex>
131
- #include <project_vertex>
132
- #include <logdepthbuf_vertex>
133
- #include <clipping_planes_vertex>
134
- #include <worldpos_vertex>
135
- }`,na=`
136
- #include <common>
137
- #include <uv_pars_fragment>
138
- #include <clipping_planes_pars_fragment>
139
-
140
- void main() {
141
- #include <clipping_planes_fragment>
142
- gl_FragColor = vec4(vec3(vUv, 0.0), 1.0);
143
- }`;class fn extends c.ShaderMaterial{constructor(){super({defines:{USE_UV:""},vertexShader:ta,fragmentShader:na})}}const Fa="";function ht(t){const[n,a]=P.useState(t.open!==void 0?t.open:!0),e=!n||t.children===void 0;return d.jsxs("div",{className:`accordion ${e?"hide":""}`,children:[d.jsxs("button",{className:"toggle",onClick:()=>{const r=!n;t.onToggle!==void 0&&t.onToggle(r),a(r)},children:[d.jsx("p",{className:`status ${n?"open":""}`,children:"Toggle"}),d.jsx("p",{className:"label",children:ze(t.label)})]}),t.button,d.jsx("div",{className:n?"open":"",children:d.jsx("div",{children:t.children})})]})}function Lt(t){const[n,a]=P.useState(!1),e=t.child.children.length>0,r=[];return t.child.children.length>0&&t.child.children.map(s=>{r.push(d.jsx(Lt,{child:s,three:t.three},Math.random()))}),d.jsxs("div",{className:"childObject",children:[d.jsxs("div",{className:"child",children:[e?d.jsx("button",{className:"status",style:{backgroundPositionX:n?"-14px":"2px"},onClick:()=>{a(!n)}}):null,d.jsx("button",{className:"name",style:{left:e?"20px":"5px"},onClick:()=>{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}`}),d.jsx("div",{className:`icon ${Bn(t.child)}`})]}),d.jsx("div",{className:n?"open":"",children:d.jsx("div",{className:"container",children:r})})]},Math.random())}function hn(t){const n=[];return t.child.children.map(a=>{n.push(d.jsx(Lt,{child:a,three:t.three},Math.random()))}),d.jsx("div",{className:`scene ${t.class!==void 0?t.class:""}`,children:n})}const Ua="",aa="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA5klEQVRoge2Y0Q6EIAwE6cX//+X6cCFpSMEKVTdk501OpRNKiyelFC0b8Ps6gCwoggZF0KAIGhRBgyJoUAQNiqCxjciR9SLV//eZiAyvK3U8i/QVaQO2YyLSFVvlkdTKDjJCukh2ykR5ZEW+kHmlatl90RaBtDkK/w7CYhuRUEO0ee3l+J3m55Vm+17vtwjTnV1V3QA8qfbeUXCzRWDpiLLS+OyzvRW7IzW9R+okvclsqR09743bo0yUpc1+lSJvNsa002+Euk9GKzV7SmZDRIMiaFAEDYqgQRE0KIIGRdCgCBoUQeMEMERadX7YUz8AAAAASUVORK5CYII=";function ia(t){return"items"in t}function Te(t){const n=[];return t.items.forEach(a=>{ia(a)?n.push(d.jsx(Te,{title:ze(a.title),items:a.items},Math.random())):n.push(d.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,r)=>{a.onChange!==void 0&&a.onChange(e,r)}},Math.random()))}),d.jsx(ht,{label:t.title,open:t.expanded===!0,children:n})}function ra(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 Re(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 oa(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 sa(){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],r=new FileReader;r.onload=function(s){n(s.target.result)},r.readAsDataURL(e)}}),t.click()})}const ca=[{title:"Front",value:c.FrontSide},{title:"Back",value:c.BackSide},{title:"Double",value:c.DoubleSide}],la=[{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}],ua=[{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}],da=[{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}],fa=[{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 pn(t,n,a){const e=[];for(const r in t){if(!ra(r))continue;const s=typeof t[r],p=t[r];if(s==="boolean"||s==="number"||s==="string"){const l={title:Re(r),prop:r,type:s,value:p,min:void 0,max:void 0,needsUpdate:s==="boolean",onChange:(f,y)=>{var C;a.updateObject(n.uuid,`material.${f}`,y),l.needsUpdate&&a.updateObject(n.uuid,"material.needsUpdate",!0);const v=(C=a.scene)==null?void 0:C.getObjectByProperty("uuid",n.uuid);v!==void 0&&ae(v,`material.${f}`,y)}};switch(r){case"blending":et(l,la);break;case"blendDst":et(l,fa);break;case"blendEquation":et(l,ua);break;case"blendSrc":et(l,da);break;case"side":et(l,ca);break}oa(r)&&(l.value=Number(p),l.type="range",l.min=0,l.max=1,l.step=.01);const u=s==="string"&&(r==="vertexShader"||r==="fragmentShader");u&&(l.disabled=!1,l.latest=l.value,l.onChange=(f,y)=>{l.latest=y}),e.push(l),u&&e.push({title:`${ze(r)} - Update`,type:"button",onChange:()=>{var y;a.updateObject(n.uuid,`material.${r}`,l.latest),a.updateObject(n.uuid,"material.needsUpdate",!0);const f=(y=a.scene)==null?void 0:y.getObjectByProperty("uuid",n.uuid);f!==void 0&&(ae(f,`material.${r}`,l.latest),f.material.needsUpdate=!0)}})}else if(s==="object")if(p.isColor)e.push({title:Re(r),prop:r,type:"color",value:p,onChange:(l,u)=>{var v;const f=new c.Color(u);a.updateObject(n.uuid,`material.${l}`,f);const y=(v=a.scene)==null?void 0:v.getObjectByProperty("uuid",n.uuid);y!==void 0&&ae(y,`material.${l}`,f)}});else if(Array.isArray(p)){const l=[];for(const u in p)l.push({title:`${u}`,type:`${typeof p[u]}`,value:p[u],onChange:(f,y)=>{var C;a.updateObject(n.uuid,`material.${r}`,y);const v=(C=a.scene)==null?void 0:C.getObjectByProperty("uuid",n.uuid);v!==void 0&&ae(v,`material.${r}`,y)}});e.push({title:Re(r),items:l})}else{const l=[];for(const u in p){const f=p[u];switch(typeof f){case"boolean":case"number":case"string":u==="src"?e.push({title:Re(r),type:"image",value:f,onChange:(v,C)=>{var O;a.createTexture(n.uuid,`material.${r}`,C);const x=(O=a.scene)==null?void 0:O.getObjectByProperty("uuid",n.uuid);x!==void 0&&_t(C).then(A=>{ae(x,`material.${r}`,A),ae(x,"material.needsUpdate",!0)})}}):l.push({title:`${Re(u)}`,prop:`material.${r}.${u}`,type:`${typeof t[r][u]}`,value:p[u],onChange:(v,C)=>{var O;a.updateObject(n.uuid,`material.${r}.${u}`,C);const x=(O=a.scene)==null?void 0:O.getObjectByProperty("uuid",n.uuid);x!==void 0&&ae(x,`material.${r}.${u}`,C)}});break;case"object":if(f.value!==void 0&&f.value.src!==void 0)l.push({title:Re(u),type:"image",value:f.value.src,onChange:(v,C)=>{var O;a.createTexture(n.uuid,`material.${r}.${u}.value`,p);const x=(O=a.scene)==null?void 0:O.getObjectByProperty("uuid",n.uuid);x!==void 0&&_t(C).then(A=>{ae(x,`material.${r}.${u}.value`,A)})}});else if(r==="uniforms"){const v=f.value,C=(x,O,A)=>({title:x,type:"number",value:A,step:.01,onChange:(J,F)=>{var he;const M=`material.uniforms.${u}.value.${O}`;a.updateObject(n.uuid,M,F);const Z=(he=a.scene)==null?void 0:he.getObjectByProperty("uuid",n.uuid);Z!==void 0&&ae(Z,M,F)}});if(typeof f.value=="number")l.push({title:u,type:"number",value:f.value,onChange:(x,O)=>{var F;const A=`material.${r}.${x}.value`;a.updateObject(n.uuid,A,O);const J=(F=a.scene)==null?void 0:F.getObjectByProperty("uuid",n.uuid);J!==void 0&&ae(J,A,O)}});else if(v.r!==void 0&&v.g!==void 0&&v.b!==void 0)l.push({title:u,type:"color",value:f.value,onChange:(x,O)=>{var M;const A=new c.Color(O),J=`material.${r}.${x}.value`;a.updateObject(n.uuid,J,A);const F=(M=a.scene)==null?void 0:M.getObjectByProperty("uuid",n.uuid);F!==void 0&&ae(F,J,A)}});else if(v.x!==void 0&&v.y!==void 0&&v.z===void 0&&v.w===void 0)l.push({title:u,items:[C("X","x",f.value.x),C("Y","y",f.value.y)]});else if(v.x!==void 0&&v.y!==void 0&&v.z!==void 0&&v.w===void 0)l.push({title:u,items:[C("X","x",f.value.x),C("Y","y",f.value.y),C("Z","z",f.value.z)]});else if(v.x!==void 0&&v.y!==void 0&&v.z!==void 0&&v.w!==void 0)l.push({title:u,items:[C("X","x",f.value.x),C("Y","y",f.value.y),C("Z","z",f.value.z),C("W","w",f.value.w)]});else if(v.elements!==void 0){const x=v.elements,O=[];for(let A=0;A<x.length;A++)O.push(C(A.toString(),A.toString(),x[A]));l.push({title:u,items:O})}else console.log(">>> need to add this format:",u,v)}else l.push({title:u,type:`${typeof f.value}`,value:f.value,onChange:(v,C)=>{var O;a.updateObject(n.uuid,`material.${r}.${u}.value`,C);const x=(O=a.scene)==null?void 0:O.getObjectByProperty("uuid",n.uuid);x!==void 0&&ae(x,`material.${r}.${u}.value`,C)}});break}}l.length>0&&e.push({title:Re(r),items:l})}else p!==void 0&&console.log("other:",r,s,p)}return e.sort((r,s)=>r.title<s.title?-1:r.title>s.title?1:0),e.push({title:"Update Material",type:"button",onChange:()=>{a.updateObject(n.uuid,"material.needsUpdate",!0)}}),e}function ha(t,n){const a=t.material;if(Array.isArray(a)){const e=[],r=a.length;for(let s=0;s<r;s++)e.push(d.jsx(Te,{title:`Material ${s}`,items:pn(a[s],t,n)},`Material ${s}`));return d.jsx(d.Fragment,{children:e})}else return d.jsx(Te,{title:"Material",items:pn(a,t,n)})}function tt(t){var y;let n=t.value;n!==void 0&&n.isColor!==void 0&&(n=Qt(t.value));const[a,e]=P.useState(n),r=P.useRef(null),s=P.useRef(null),p=P.useRef(null);P.useEffect(()=>{var he;let v=!1,C=-1,x=0,O=Number(a);const A=ie=>{v=!0,x=O,C=ie.clientX},J=ie=>{if(!v)return;const se=t.step!==void 0?t.step:1,h=(ie.clientX-C)*se;O=Number((x+h).toFixed(4)),s.current!==null&&(s.current.value=O.toString()),t.onChange!==void 0&&t.onChange(t.prop!==void 0?t.prop:t.title,O)},F=()=>{v=!1},M=()=>{v=!1},Z=t.type==="number";return Z&&((he=r.current)==null||he.addEventListener("mousedown",A,!1),document.addEventListener("mouseup",F,!1),document.addEventListener("mousemove",J,!1),document.addEventListener("contextmenu",M,!1)),()=>{var ie;Z&&((ie=r.current)==null||ie.removeEventListener("mousedown",A),document.removeEventListener("mouseup",F),document.removeEventListener("mousemove",J),document.removeEventListener("contextmenu",M))}},[a]);const l=t.type==="string"&&(a.length>100||a.search(`
144
- `)>-1),u=l||t.type==="image",f=v=>{let C=v.target.value;t.type==="boolean"?C=v.target.checked:t.type==="option"&&(C=t.options[C].value),e(C),t.onChange!==void 0&&t.onChange(t.prop!==void 0?t.prop:t.title,C)};return d.jsxs("div",{className:`field ${u?"block":""}`,children:[t.type!=="button"&&d.jsx("label",{ref:r,children:ze(t.title)},"fieldLabel"),t.type==="string"&&!l&&d.jsx("input",{type:"text",disabled:t.disabled,onChange:f,value:a}),t.type==="string"&&l&&d.jsx("textarea",{cols:50,rows:10,disabled:t.disabled!==void 0?t.disabled:!0,onChange:f,value:a}),t.type==="boolean"&&d.jsx("input",{type:"checkbox",disabled:t.disabled,onChange:f,checked:a}),t.type==="number"&&d.jsx("input",{ref:s,type:"number",value:a,min:t.min,max:t.max,step:t.step,disabled:t.disabled,onChange:f}),t.type==="range"&&d.jsxs(d.Fragment,{children:[d.jsx("input",{type:"text",value:a.toString(),onChange:f,disabled:t.disabled,className:"min"}),d.jsx("input",{disabled:t.disabled,type:"range",value:a,min:t.min,max:t.max,step:t.step,onChange:f})]}),t.type==="color"&&d.jsxs(d.Fragment,{children:[d.jsx("input",{type:"text",value:a.toString(),onChange:f,disabled:t.disabled,className:"color"}),d.jsx("input",{type:"color",value:a,onChange:f,disabled:t.disabled})]}),t.type==="button"&&d.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"&&d.jsx("img",{ref:p,onClick:()=>{sa().then(v=>{p.current.src=v,t.onChange!==void 0&&t.onChange(t.prop!==void 0?t.prop:t.title,v)})},src:a.length>0?a:aa}),t.type==="option"&&d.jsx(d.Fragment,{children:d.jsx("select",{onChange:f,disabled:t.disabled,defaultValue:t.value,children:(y=t.options)==null?void 0:y.map((v,C)=>d.jsx("option",{value:v.value,children:ze(v.title)},C))})})]})}function mn(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 pa(t,n){const a=[];if(t.perspectiveCameraInfo!==void 0)for(const e in t.perspectiveCameraInfo)a.push({title:mn(e),prop:e,type:"number",step:.01,value:t.perspectiveCameraInfo[e],onChange:(r,s)=>{var l;n.updateObject(t.uuid,r,s),n.requestMethod(t.uuid,"updateProjectionMatrix");const p=(l=n.scene)==null?void 0:l.getObjectByProperty("uuid",t.uuid);p!==void 0&&(ae(p,r,s),p.updateProjectionMatrix())}});else if(t.orthographicCameraInfo!==void 0)for(const e in t.orthographicCameraInfo)a.push({title:mn(e),prop:e,type:"number",step:.01,value:t.perspectiveCameraInfo[e],onChange:(r,s)=>{var l;n.updateObject(t.uuid,r,s),n.requestMethod(t.uuid,"updateProjectionMatrix");const p=(l=n.scene)==null?void 0:l.getObjectByProperty("uuid",t.uuid);p!==void 0&&(ae(p,r,s),p.updateProjectionMatrix())}});return d.jsx(Te,{title:"Camera",items:a})}const ma=Math.PI/180,va=180/Math.PI;function Ye(t,n,a,e,r){return e+(t-n)*(r-e)/(a-n)}function ga(t){return t*ma}function Ft(t){return t*va}function ba(t,n){const a=new c.Matrix4;a.elements=t.matrix;const e=new c.Vector3,r=new c.Euler,s=new c.Vector3;t.uuid.length>0&&(e.setFromMatrixPosition(a),r.setFromRotationMatrix(a),s.setFromMatrixScale(a));const p=(u,f)=>{var v;n.updateObject(t.uuid,u,f);const y=(v=n.scene)==null?void 0:v.getObjectByProperty("uuid",t.uuid);y!==void 0&&ae(y,u,f)},l=(u,f)=>{p(u,ga(f))};return d.jsx(Te,{title:"Transform",items:[{title:"Position X",prop:"position.x",type:"number",value:e.x,onChange:p},{title:"Position Y",prop:"position.y",type:"number",value:e.y,onChange:p},{title:"Position Z",prop:"position.z",type:"number",value:e.z,onChange:p},{title:"Rotation X",prop:"rotation.x",type:"number",value:ft(Ft(r.x)),min:-360,max:360,step:.1,onChange:l},{title:"Rotation Y",prop:"rotation.y",type:"number",value:ft(Ft(r.y)),min:-360,max:360,step:.1,onChange:l},{title:"Rotation Z",prop:"rotation.z",type:"number",value:ft(Ft(r.z)),min:-360,max:360,step:.1,onChange:l},{title:"Scale X",prop:"scale.x",type:"number",value:s.x,step:.01,onChange:p},{title:"Scale Y",prop:"scale.y",type:"number",value:s.y,step:.01,onChange:p},{title:"Scale Z",prop:"scale.z",type:"number",value:s.z,step:.01,onChange:p}]})}function vn(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 ya(t,n){const a=[];if(t.lightInfo!==void 0)for(const e in t.lightInfo){const r=t.lightInfo[e];r!==void 0&&(r.isColor!==void 0?a.push({title:vn(e),prop:e,type:"color",value:r,onChange:(s,p)=>{var f;const l=new c.Color(p);n.updateObject(t.uuid,s,l);const u=(f=n.scene)==null?void 0:f.getObjectByProperty("uuid",t.uuid);u!==void 0&&ae(u,s,l)}}):a.push({title:vn(e),prop:e,type:typeof r,value:r,step:typeof r=="number"?.01:void 0,onChange:(s,p)=>{var u;n.updateObject(t.uuid,s,p);const l=(u=n.scene)==null?void 0:u.getObjectByProperty("uuid",t.uuid);l!==void 0&&ae(l,s,p)}}))}return d.jsx(Te,{title:"Light",items:a})}function Ea(t,n){var l;const a=[],e=[];let r=0;t.animations.forEach(u=>{r=Math.max(r,u.duration),u.duration>0&&e.push({title:u.name,items:[{title:"Duration",type:"number",value:u.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 s=(l=n.scene)==null?void 0:l.getObjectByProperty("uuid",t.uuid);let p=!1;if(s!==void 0){const u=s.mixer;if(p=u!==void 0,p){const f=[{title:"Time Scale",type:"range",value:u.timeScale,step:.01,min:-1,max:2,onChange:(y,v)=>{u.timeScale=v,n.updateObject(t.uuid,"mixer.timeScale",v)}}];f.push({title:"Stop All",type:"button",onChange:()=>{u.stopAllAction(),n.requestMethod(t.uuid,"stopAllAction",void 0,"mixer")}}),a.push({title:"Mixer",items:f})}}return d.jsx(Te,{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 re={...gn};function bn(t){const[n,a]=P.useState(-1);P.useEffect(()=>{function p(u){re={...u.value},a(Date.now())}function l(){re={...gn},a(Date.now())}return I.addEventListener(N.SET_SCENE,l),I.addEventListener(N.SET_OBJECT,p),()=>{I.removeEventListener(N.SET_SCENE,l),I.removeEventListener(N.SET_OBJECT,p)}},[]);const e=re.type.toLowerCase(),r=re.animations.length>0||re.mixer!==void 0,s=e.search("mesh")>-1||e.search("line")>-1||e.search("points")>-1;return d.jsx(ht,{label:"Inspector",children:d.jsx("div",{id:"Inspector",className:t.class,children:re.uuid.length>0&&d.jsxs(d.Fragment,{children:[d.jsxs(d.Fragment,{children:[d.jsx(tt,{type:"string",title:"Name",prop:"name",value:re.name,disabled:!0}),d.jsx(tt,{type:"string",title:"Type",prop:"type",value:re.type,disabled:!0}),d.jsx(tt,{type:"string",title:"UUID",prop:"uuid",value:re.uuid,disabled:!0}),d.jsx(tt,{type:"boolean",title:"Visible",prop:"visible",value:re.visible,onChange:(p,l)=>{var f;t.three.updateObject(re.uuid,p,l);const u=(f=t.three.scene)==null?void 0:f.getObjectByProperty("uuid",re.uuid);u!==void 0&&ae(u,p,l)}})]}),d.jsxs(d.Fragment,{children:[ba(re,t.three),r?Ea(re,t.three):null,e.search("camera")>-1?pa(re,t.three):null,e.search("light")>-1?ya(re,t.three):null,s?ha(re,t.three):null]})]})},n)},"Inspector")}class Ca extends P.Component{constructor(a){super(a);V(this,"three");V(this,"setScene",a=>{this.setState(()=>({scene:a.value}))});this.state={scene:a.scene!==void 0?a.scene:null},this.three=a.three,I.addEventListener(N.SET_SCENE,this.setScene)}componentWillUnmount(){I.removeEventListener(N.SET_SCENE,this.setScene)}render(){var r;const a=this.componentState.scene!==null,e="Hierarchy - "+(a?`${(r=this.componentState.scene)==null?void 0:r.name}`:"No Scene");return d.jsx("div",{id:"SidePanel",children:d.jsxs(d.Fragment,{children:[d.jsx(ht,{label:e,open:!0,children:d.jsx(d.Fragment,{children:a&&d.jsx(hn,{child:this.componentState.scene,three:this.three})})}),d.jsx(bn,{three:this.three})]})},"SidePanel")}get componentState(){return this.state}}function Sa(t){function n(){return t.three.scene===void 0?(console.log("No scene:",t.three),!1):!0}const a=l=>{var f;if(!n())return;const u=(f=t.three.scene)==null?void 0:f.getObjectByProperty("uuid",l.value);u!==void 0&&t.three.setObject(u)},e=(l,u,f)=>{var v;if(!n())return;const y=(v=t.three.scene)==null?void 0:v.getObjectByProperty("uuid",l);y!==void 0&&ae(y,u,f)},r=l=>{if(!n())return;const u=l.value,{key:f,value:y,uuid:v}=u;e(v,f,y)},s=l=>{if(!n())return;const u=l.value;_t(u.value).then(f=>{e(u.uuid,u.key,f),e(u.uuid,"material.needsUpdate",!0)})},p=l=>{var x;if(!n())return;const{key:u,uuid:f,value:y,subitem:v}=l.value,C=(x=t.three.scene)==null?void 0:x.getObjectByProperty("uuid",f);if(C!==void 0)try{v!==void 0?Hn(C,v)[u](y):C[u](y)}catch(O){console.log("Error requesting method:"),console.log(O),console.log(u),console.log(y)}};return P.useEffect(()=>(I.addEventListener(N.GET_OBJECT,a),I.addEventListener(N.UPDATE_OBJECT,r),I.addEventListener(N.CREATE_TEXTURE,s),I.addEventListener(N.REQUEST_METHOD,p),()=>{I.removeEventListener(N.GET_OBJECT,a),I.removeEventListener(N.UPDATE_OBJECT,r),I.removeEventListener(N.CREATE_TEXTURE,s),I.removeEventListener(N.REQUEST_METHOD,p)}),[]),null}const yn={type:"change"},Ut={type:"start"},En={type:"end"},pt=new c.Ray,Cn=new c.Plane,wa=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 l.phi},this.getAzimuthalAngle=function(){return l.theta},this.getDistance=function(){return this.object.position.distanceTo(this.target)},this.listenToKeyEvents=function(o){o.addEventListener("keydown",lt),this._domElementKeyEvents=o},this.stopListenToKeyEvents=function(){this._domElementKeyEvents.removeEventListener("keydown",lt),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(yn),e.update(),s=r.NONE},this.update=function(){const o=new c.Vector3,E=new c.Quaternion().setFromUnitVectors(n.up,new c.Vector3(0,1,0)),R=E.clone().invert(),B=new c.Vector3,$=new c.Quaternion,pe=new c.Vector3,ue=2*Math.PI;return function(Kt=null){const dt=e.object.position;o.copy(dt).sub(e.target),o.applyQuaternion(E),l.setFromVector3(o),e.autoRotate&&s===r.NONE&&G(_(Kt)),e.enableDamping?(l.theta+=u.theta*e.dampingFactor,l.phi+=u.phi*e.dampingFactor):(l.theta+=u.theta,l.phi+=u.phi);let ge=e.minAzimuthAngle,me=e.maxAzimuthAngle;isFinite(ge)&&isFinite(me)&&(ge<-Math.PI?ge+=ue:ge>Math.PI&&(ge-=ue),me<-Math.PI?me+=ue:me>Math.PI&&(me-=ue),ge<=me?l.theta=Math.max(ge,Math.min(me,l.theta)):l.theta=l.theta>(ge+me)/2?Math.max(ge,l.theta):Math.min(me,l.theta)),l.phi=Math.max(e.minPolarAngle,Math.min(e.maxPolarAngle,l.phi)),l.makeSafe(),e.enableDamping===!0?e.target.addScaledVector(y,e.dampingFactor):e.target.add(y),e.target.sub(e.cursor),e.target.clampLength(e.minTargetRadius,e.maxTargetRadius),e.target.add(e.cursor),e.zoomToCursor&&se||e.object.isOrthographicCamera?l.radius=fe(l.radius):l.radius=fe(l.radius*f),o.setFromSpherical(l),o.applyQuaternion(R),dt.copy(e.target).add(o),e.object.lookAt(e.target),e.enableDamping===!0?(u.theta*=1-e.dampingFactor,u.phi*=1-e.dampingFactor,y.multiplyScalar(1-e.dampingFactor)):(u.set(0,0,0),y.set(0,0,0));let Fe=!1;if(e.zoomToCursor&&se){let Ue=null;if(e.object.isPerspectiveCamera){const Be=o.length();Ue=fe(Be*f);const Ve=Be-Ue;e.object.position.addScaledVector(he,Ve),e.object.updateMatrixWorld()}else if(e.object.isOrthographicCamera){const Be=new c.Vector3(ie.x,ie.y,0);Be.unproject(e.object),e.object.zoom=Math.max(e.minZoom,Math.min(e.maxZoom,e.object.zoom/f)),e.object.updateProjectionMatrix(),Fe=!0;const Ve=new c.Vector3(ie.x,ie.y,0);Ve.unproject(e.object),e.object.position.sub(Ve).add(Be),e.object.updateMatrixWorld(),Ue=o.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),e.zoomToCursor=!1;Ue!==null&&(this.screenSpacePanning?e.target.set(0,0,-1).transformDirection(e.object.matrix).multiplyScalar(Ue).add(e.object.position):(pt.origin.copy(e.object.position),pt.direction.set(0,0,-1).transformDirection(e.object.matrix),Math.abs(e.object.up.dot(pt.direction))<wa?n.lookAt(e.target):(Cn.setFromNormalAndCoplanarPoint(e.object.up,e.target),pt.intersectPlane(Cn,e.target))))}else e.object.isOrthographicCamera&&(Fe=f!==1,Fe&&(e.object.zoom=Math.max(e.minZoom,Math.min(e.maxZoom,e.object.zoom/f)),e.object.updateProjectionMatrix()));return f=1,se=!1,Fe||B.distanceToSquared(e.object.position)>p||8*(1-$.dot(e.object.quaternion))>p||pe.distanceToSquared(e.target)>0?(e.dispatchEvent(yn),B.copy(e.object.position),$.copy(e.object.quaternion),pe.copy(e.target),!0):!1}}(),this.dispose=function(){e.domElement.removeEventListener("contextmenu",Xe),e.domElement.removeEventListener("pointerdown",Ne),e.domElement.removeEventListener("pointercancel",Le),e.domElement.removeEventListener("wheel",xt),e.domElement.removeEventListener("pointermove",st),e.domElement.removeEventListener("pointerup",Le),e._domElementKeyEvents!==null&&(e._domElementKeyEvents.removeEventListener("keydown",lt),e._domElementKeyEvents=null)};const e=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 s=r.NONE;const p=1e-6,l=new c.Spherical,u=new c.Spherical;let f=1;const y=new c.Vector3,v=new c.Vector2,C=new c.Vector2,x=new c.Vector2,O=new c.Vector2,A=new c.Vector2,J=new c.Vector2,F=new c.Vector2,M=new c.Vector2,Z=new c.Vector2,he=new c.Vector3,ie=new c.Vector2;let se=!1;const h=[],g={};let S=!1;function _(o){return o!==null?2*Math.PI/60*e.autoRotateSpeed*o:2*Math.PI/60/60*e.autoRotateSpeed}function W(o){const E=Math.abs(o*.01);return Math.pow(.95,e.zoomSpeed*E)}function G(o){u.theta-=o}function z(o){u.phi-=o}const U=function(){const o=new c.Vector3;return function(R,B){o.setFromMatrixColumn(B,0),o.multiplyScalar(-R),y.add(o)}}(),Q=function(){const o=new c.Vector3;return function(R,B){e.screenSpacePanning===!0?o.setFromMatrixColumn(B,1):(o.setFromMatrixColumn(B,0),o.crossVectors(e.object.up,o)),o.multiplyScalar(R),y.add(o)}}(),q=function(){const o=new c.Vector3;return function(R,B){const $=e.domElement;if(e.object.isPerspectiveCamera){const pe=e.object.position;o.copy(pe).sub(e.target);let ue=o.length();ue*=Math.tan(e.object.fov/2*Math.PI/180),U(2*R*ue/$.clientHeight,e.object.matrix),Q(2*B*ue/$.clientHeight,e.object.matrix)}else e.object.isOrthographicCamera?(U(R*(e.object.right-e.object.left)/e.object.zoom/$.clientWidth,e.object.matrix),Q(B*(e.object.top-e.object.bottom)/e.object.zoom/$.clientHeight,e.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),e.enablePan=!1)}}();function k(o){e.object.isPerspectiveCamera||e.object.isOrthographicCamera?f/=o:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),e.enableZoom=!1)}function H(o){e.object.isPerspectiveCamera||e.object.isOrthographicCamera?f*=o:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),e.enableZoom=!1)}function te(o,E){if(!e.zoomToCursor)return;se=!0;const R=e.domElement.getBoundingClientRect(),B=o-R.left,$=E-R.top,pe=R.width,ue=R.height;ie.x=B/pe*2-1,ie.y=-($/ue)*2+1,he.set(ie.x,ie.y,1).unproject(e.object).sub(e.object.position).normalize()}function fe(o){return Math.max(e.minDistance,Math.min(e.maxDistance,o))}function we(o){v.set(o.clientX,o.clientY)}function yt(o){te(o.clientX,o.clientX),F.set(o.clientX,o.clientY)}function it(o){O.set(o.clientX,o.clientY)}function Bt(o){C.set(o.clientX,o.clientY),x.subVectors(C,v).multiplyScalar(e.rotateSpeed);const E=e.domElement;G(2*Math.PI*x.x/E.clientHeight),z(2*Math.PI*x.y/E.clientHeight),v.copy(C),e.update()}function Vt(o){M.set(o.clientX,o.clientY),Z.subVectors(M,F),Z.y>0?k(W(Z.y)):Z.y<0&&H(W(Z.y)),F.copy(M),e.update()}function rt(o){A.set(o.clientX,o.clientY),J.subVectors(A,O).multiplyScalar(e.panSpeed),q(J.x,J.y),O.copy(A),e.update()}function ot(o){te(o.clientX,o.clientY),o.deltaY<0?H(W(o.deltaY)):o.deltaY>0&&k(W(o.deltaY)),e.update()}function We(o){let E=!1;switch(o.code){case e.keys.UP:o.ctrlKey||o.metaKey||o.shiftKey?z(2*Math.PI*e.rotateSpeed/e.domElement.clientHeight):q(0,e.keyPanSpeed),E=!0;break;case e.keys.BOTTOM:o.ctrlKey||o.metaKey||o.shiftKey?z(-2*Math.PI*e.rotateSpeed/e.domElement.clientHeight):q(0,-e.keyPanSpeed),E=!0;break;case e.keys.LEFT:o.ctrlKey||o.metaKey||o.shiftKey?G(2*Math.PI*e.rotateSpeed/e.domElement.clientHeight):q(e.keyPanSpeed,0),E=!0;break;case e.keys.RIGHT:o.ctrlKey||o.metaKey||o.shiftKey?G(-2*Math.PI*e.rotateSpeed/e.domElement.clientHeight):q(-e.keyPanSpeed,0),E=!0;break}E&&(o.preventDefault(),e.update())}function Ke(o){if(h.length===1)v.set(o.pageX,o.pageY);else{const E=xe(o),R=.5*(o.pageX+E.x),B=.5*(o.pageY+E.y);v.set(R,B)}}function _e(o){if(h.length===1)O.set(o.pageX,o.pageY);else{const E=xe(o),R=.5*(o.pageX+E.x),B=.5*(o.pageY+E.y);O.set(R,B)}}function Et(o){const E=xe(o),R=o.pageX-E.x,B=o.pageY-E.y,$=Math.sqrt(R*R+B*B);F.set(0,$)}function Ct(o){e.enableZoom&&Et(o),e.enablePan&&_e(o)}function zt(o){e.enableZoom&&Et(o),e.enableRotate&&Ke(o)}function St(o){if(h.length==1)C.set(o.pageX,o.pageY);else{const R=xe(o),B=.5*(o.pageX+R.x),$=.5*(o.pageY+R.y);C.set(B,$)}x.subVectors(C,v).multiplyScalar(e.rotateSpeed);const E=e.domElement;G(2*Math.PI*x.x/E.clientHeight),z(2*Math.PI*x.y/E.clientHeight),v.copy(C)}function De(o){if(h.length===1)A.set(o.pageX,o.pageY);else{const E=xe(o),R=.5*(o.pageX+E.x),B=.5*(o.pageY+E.y);A.set(R,B)}J.subVectors(A,O).multiplyScalar(e.panSpeed),q(J.x,J.y),O.copy(A)}function Ie(o){const E=xe(o),R=o.pageX-E.x,B=o.pageY-E.y,$=Math.sqrt(R*R+B*B);M.set(0,$),Z.set(0,Math.pow(M.y/F.y,e.zoomSpeed)),k(Z.y),F.copy(M);const pe=(o.pageX+E.x)*.5,ue=(o.pageY+E.y)*.5;te(pe,ue)}function wt(o){e.enableZoom&&Ie(o),e.enablePan&&De(o)}function Ot(o){e.enableZoom&&Ie(o),e.enableRotate&&St(o)}function Ne(o){e.enabled!==!1&&(h.length===0&&(e.domElement.setPointerCapture(o.pointerId),e.domElement.addEventListener("pointermove",st),e.domElement.addEventListener("pointerup",Le)),Yt(o),o.pointerType==="touch"?ut(o):ct(o))}function st(o){e.enabled!==!1&&(o.pointerType==="touch"?Rt(o):Ht(o))}function Le(o){switch(Gt(o),h.length){case 0:e.domElement.releasePointerCapture(o.pointerId),e.domElement.removeEventListener("pointermove",st),e.domElement.removeEventListener("pointerup",Le),e.dispatchEvent(En),s=r.NONE;break;case 1:const E=h[0],R=g[E];ut({pointerId:E,pageX:R.x,pageY:R.y});break}}function ct(o){let E;switch(o.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;yt(o),s=r.DOLLY;break;case c.MOUSE.ROTATE:if(o.ctrlKey||o.metaKey||o.shiftKey){if(e.enablePan===!1)return;it(o),s=r.PAN}else{if(e.enableRotate===!1)return;we(o),s=r.ROTATE}break;case c.MOUSE.PAN:if(o.ctrlKey||o.metaKey||o.shiftKey){if(e.enableRotate===!1)return;we(o),s=r.ROTATE}else{if(e.enablePan===!1)return;it(o),s=r.PAN}break;default:s=r.NONE}s!==r.NONE&&e.dispatchEvent(Ut)}function Ht(o){switch(s){case r.ROTATE:if(e.enableRotate===!1)return;Bt(o);break;case r.DOLLY:if(e.enableZoom===!1)return;Vt(o);break;case r.PAN:if(e.enablePan===!1)return;rt(o);break}}function xt(o){e.enabled===!1||e.enableZoom===!1||s!==r.NONE||(o.preventDefault(),e.dispatchEvent(Ut),ot(Mt(o)),e.dispatchEvent(En))}function Mt(o){const E=o.deltaMode,R={clientX:o.clientX,clientY:o.clientY,deltaY:o.deltaY};switch(E){case 1:R.deltaY*=16;break;case 2:R.deltaY*=100;break}return o.ctrlKey&&!S&&(R.deltaY*=10),R}function Tt(o){o.key==="Control"&&(S=!0,e.domElement.getRootNode().addEventListener("keyup",Oe,{passive:!0,capture:!0}))}function Oe(o){o.key==="Control"&&(S=!1,e.domElement.getRootNode().removeEventListener("keyup",Oe,{passive:!0,capture:!0}))}function lt(o){e.enabled===!1||e.enablePan===!1||We(o)}function ut(o){switch(At(o),h.length){case 1:switch(e.touches.ONE){case c.TOUCH.ROTATE:if(e.enableRotate===!1)return;Ke(o),s=r.TOUCH_ROTATE;break;case c.TOUCH.PAN:if(e.enablePan===!1)return;_e(o),s=r.TOUCH_PAN;break;default:s=r.NONE}break;case 2:switch(e.touches.TWO){case c.TOUCH.DOLLY_PAN:if(e.enableZoom===!1&&e.enablePan===!1)return;Ct(o),s=r.TOUCH_DOLLY_PAN;break;case c.TOUCH.DOLLY_ROTATE:if(e.enableZoom===!1&&e.enableRotate===!1)return;zt(o),s=r.TOUCH_DOLLY_ROTATE;break;default:s=r.NONE}break;default:s=r.NONE}s!==r.NONE&&e.dispatchEvent(Ut)}function Rt(o){switch(At(o),s){case r.TOUCH_ROTATE:if(e.enableRotate===!1)return;St(o),e.update();break;case r.TOUCH_PAN:if(e.enablePan===!1)return;De(o),e.update();break;case r.TOUCH_DOLLY_PAN:if(e.enableZoom===!1&&e.enablePan===!1)return;wt(o),e.update();break;case r.TOUCH_DOLLY_ROTATE:if(e.enableZoom===!1&&e.enableRotate===!1)return;Ot(o),e.update();break;default:s=r.NONE}}function Xe(o){e.enabled!==!1&&o.preventDefault()}function Yt(o){h.push(o.pointerId)}function Gt(o){delete g[o.pointerId];for(let E=0;E<h.length;E++)if(h[E]==o.pointerId){h.splice(E,1);return}}function At(o){let E=g[o.pointerId];E===void 0&&(E=new c.Vector2,g[o.pointerId]=E),E.set(o.pageX,o.pageY)}function xe(o){const E=o.pointerId===h[0]?h[1]:h[0];return g[E]}e.domElement.addEventListener("contextmenu",Xe),e.domElement.addEventListener("pointerdown",Ne),e.domElement.addEventListener("pointercancel",Le),e.domElement.addEventListener("wheel",xt,{passive:!1}),e.domElement.getRootNode().addEventListener("keydown",Tt,{passive:!0,capture:!0}),this.update()}}const mt=t=>{const[n,a]=P.useState(t.options[t.index]),e=()=>{t.onToggle(!t.open)},r=s=>{s!==n&&(t.onSelect(s),a(s)),t.onToggle(!1)};return d.jsxs("div",{className:`dropdown ${t.up===!0?"up":""}`,children:[d.jsx("div",{className:"dropdown-toggle",onClick:e,children:n}),t.open&&d.jsx("ul",{className:"dropdown-menu",children:t.options.map(s=>d.jsx("li",{onClick:()=>r(s),children:s},s))})]})},Ae=P.forwardRef(function(n,a){const[e,r]=P.useState(!1),s=n.options.indexOf(n.camera.name);return d.jsxs("div",{className:"CameraWindow",children:[d.jsx("div",{ref:a,className:"clickable",onClick:()=>{e&&r(!1)}}),d.jsx(mt,{index:s,open:e,options:n.options,onSelect:n.onSelect,onToggle:p=>{r(p)},up:!0})]})}),Sn=["Single","Side by Side","Stacked","Quad"],oe=new Map,ce=new Map,be=new Map;function Pe(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),oe.set(t,a),a}Pe("Top",new c.Vector3(0,1e3,0)),Pe("Bottom",new c.Vector3(0,-1e3,0)),Pe("Left",new c.Vector3(-1e3,0,0)),Pe("Right",new c.Vector3(1e3,0,0)),Pe("Front",new c.Vector3(0,0,1e3)),Pe("Back",new c.Vector3(0,0,-1e3)),Pe("Orthographic",new c.Vector3(1e3,1e3,1e3));const vt=new c.PerspectiveCamera(60,1,50,3e3);vt.name="Debug",vt.position.set(500,500,500),vt.lookAt(0,0,0),oe.set("Debug",vt);const wn=["Renderer","Depth","Normals","UVs","Wireframe"],xa=new c.MeshDepthMaterial,Ma=new c.MeshNormalMaterial,Ta=new fn,Ra=new c.MeshBasicMaterial({opacity:.33,transparent:!0,wireframe:!0}),Ba="";let gt="Renderer";const K=new c.Scene;K.name="Debug Scene";let ye=new c.Scene;K.add(ye);const nt=new c.Group;nt.name="helpers",K.add(nt);const Aa=new dn;nt.add(Aa);const On=new c.AxesHelper(500);On.name="axisHelper",nt.add(On);const at=new c.AxesHelper(100);at.name="interactionHelper",nt.add(at),at.visible=!1;let bt=!1,X=oe.get("Debug"),le=oe.get("Orthographic"),ke=oe.get("Front"),je=oe.get("Top"),xn=!1;function Pa(t){const[n,a]=P.useState(t.mode!==void 0?t.mode:"Single"),[e,r]=P.useState(null),[s,p]=P.useState(!1),[l,u]=P.useState(!1),[f,y]=P.useState(!1),[,v]=P.useState(Date.now()),C=P.useRef(null),x=P.useRef(null),O=P.useRef(null),A=P.useRef(null),J=P.useRef(null),F=P.useRef(null),M=(h,g)=>{const S=ce.get(h.name);S!==void 0&&S.dispose(),ce.delete(h.name);const _=be.get(h.name);_!==void 0&&(K.remove(_),_.dispose()),be.delete(h.name);const W=new Oa(h,g);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(ce.set(h.name,W),h instanceof c.PerspectiveCamera){const G=new c.CameraHelper(h);be.set(h.name,G),K.add(G)}},Z=h=>{const g=be.get(h.name);g!==void 0&&(K.remove(g),g.dispose(),be.delete(h.name));const S=ce.get(h.name);S!==void 0&&(S.dispose(),ce.delete(h.name))},he=()=>{ce.forEach((h,g)=>{h.dispose();const S=be.get(g);S!==void 0&&(K.remove(S),S.dispose()),be.delete(g),ce.delete(g)}),ce.clear(),be.clear()},ie=()=>{switch(n){case"Single":M(X,O.current);break;case"Side by Side":case"Stacked":M(X,O.current),M(le,A.current);break;case"Quad":M(X,O.current),M(le,A.current),M(ke,J.current),M(je,F.current);break}};P.useEffect(()=>{const h=new c.WebGLRenderer({canvas:C.current,stencil:!1});h.autoClear=!1,h.shadowMap.enabled=!0,h.setPixelRatio(devicePixelRatio),h.setClearColor(0),r(h)},[]),P.useEffect(()=>{const h=_=>{kt(ye),K.remove(ye);const W=t.scenes.get(_.value.name);if(W!==void 0){const G=new W;t.onSceneSet!==void 0&&t.onSceneSet(G),ye=G,t.three.scene=ye,K.add(ye),xn=!0}},g=_=>{var z;const W=_.value,G=(z=t.three.scene)==null?void 0:z.getObjectByProperty("uuid",W.uuid);G!==void 0&&oe.set(W.name,G),v(Date.now())},S=_=>{oe.delete(_.value.name),v(Date.now())};return I.addEventListener(N.SET_SCENE,h),I.addEventListener(N.ADD_CAMERA,g),I.addEventListener(N.REMOVE_CAMERA,S),()=>{I.removeEventListener(N.SET_SCENE,h),I.removeEventListener(N.ADD_CAMERA,g),I.removeEventListener(N.REMOVE_CAMERA,S)}},[]),P.useEffect(()=>{if(e===null)return;let h=window.innerWidth,g=window.innerHeight,S=Math.floor(h/2),_=Math.floor(g/2),W=-1;const G=()=>{h=window.innerWidth-300,g=window.innerHeight,S=Math.floor(h/2),_=Math.floor(g/2),e.setSize(h,g);let k=h,H=g;switch(n){case"Side by Side":k=S,H=g;break;case"Stacked":k=h,H=_;break;case"Quad":k=S,H=_;break}oe.forEach(te=>{var fe;te instanceof c.OrthographicCamera?(te.left=k/-2,te.right=k/2,te.top=H/2,te.bottom=H/-2,te.updateProjectionMatrix()):te instanceof c.PerspectiveCamera&&(te.aspect=k/H,te.updateProjectionMatrix(),(fe=be.get(te.name))==null||fe.update())})},z=()=>{e.setViewport(0,0,h,g),e.setScissor(0,0,h,g),e.render(K,X)},U=()=>{if(n==="Side by Side")e.setViewport(0,0,S,g),e.setScissor(0,0,S,g),e.render(K,X),e.setViewport(S,0,S,g),e.setScissor(S,0,S,g),e.render(K,le);else{const k=g-_;e.setViewport(0,k,h,_),e.setScissor(0,k,h,_),e.render(K,X),e.setViewport(0,0,h,_),e.setScissor(0,0,h,_),e.render(K,le)}},Q=()=>{let k=0,H=0;H=g-_,k=0,e.setViewport(k,H,S,_),e.setScissor(k,H,S,_),e.render(K,X),k=S,e.setViewport(k,H,S,_),e.setScissor(k,H,S,_),e.render(K,le),H=0,k=0,e.setViewport(k,H,S,_),e.setScissor(k,H,S,_),e.render(K,ke),k=S,e.setViewport(k,H,S,_),e.setScissor(k,H,S,_),e.render(K,je)},q=()=>{switch(ce.forEach(k=>{k.update()}),t.onSceneUpdate!==void 0&&xn&&t.onSceneUpdate(ye),e.clear(),n){case"Single":z();break;case"Side by Side":case"Stacked":U();break;case"Quad":Q();break}W=requestAnimationFrame(q)};return ie(),window.addEventListener("resize",G),G(),q(),()=>{window.removeEventListener("resize",G),cancelAnimationFrame(W),W=-1}},[n,e]),P.useEffect(()=>{if(e!==null){const h=new c.Raycaster,g=new c.Vector2,S=(z,U,Q,q)=>{switch(n){case"Quad":z<Q?U<q?h.setFromCamera(g,X):h.setFromCamera(g,ke):U<q?h.setFromCamera(g,le):h.setFromCamera(g,je);break;case"Side by Side":z<Q?h.setFromCamera(g,X):h.setFromCamera(g,le);break;case"Single":h.setFromCamera(g,X);break;case"Stacked":U<q?h.setFromCamera(g,X):h.setFromCamera(g,le);break}},_=z=>{if(!bt)return;const U=new c.Vector2;e.getSize(U);const Q=Math.min(z.clientX,U.x),q=Math.min(z.clientY,U.y);g.x=Ye(Q,0,U.x,-1,1),g.y=Ye(q,0,U.y,1,-1);const k=U.x/2,H=U.y/2,te=()=>{Q<k?g.x=Ye(Q,0,k,-1,1):g.x=Ye(Q,k,U.x,-1,1)},fe=()=>{q<H?g.y=Ye(q,0,H,1,-1):g.y=Ye(q,H,U.y,1,-1)};switch(n){case"Quad":te(),fe();break;case"Side by Side":te();break;case"Stacked":fe(),fe();break}S(Q,q,k,H);const we=h.intersectObjects(ye.children);we.length>0&&at.position.copy(we[0].point)},W=z=>{if(!bt)return;const U=new c.Vector2;if(e.getSize(U),z.clientX>=U.x)return;_(z);const Q=h.intersectObjects(ye.children);Q.length>0&&t.three.getObject(Q[0].object.uuid)},G=x.current;return G.addEventListener("mousemove",_,!1),G.addEventListener("click",W,!1),()=>{G.removeEventListener("mousemove",_),G.removeEventListener("click",W)}}},[n,e]);const se=[];return oe.forEach((h,g)=>{se.push(g)}),d.jsxs("div",{className:"multiview",children:[d.jsx("canvas",{ref:C}),d.jsxs("div",{className:`cameras ${n==="Single"||n==="Stacked"?"single":""}`,ref:x,children:[n==="Single"&&d.jsx(d.Fragment,{children:d.jsx(Ae,{camera:X,options:se,ref:O,onSelect:h=>{var S;(S=ce.get(X.name))==null||S.dispose();const g=oe.get(h);g!==void 0&&(Z(X),X=g,M(g,O.current))}})}),(n==="Side by Side"||n==="Stacked")&&d.jsxs(d.Fragment,{children:[d.jsx(Ae,{camera:X,options:se,ref:O,onSelect:h=>{var S;(S=ce.get(X.name))==null||S.dispose();const g=oe.get(h);g!==void 0&&(Z(X),X=g,M(g,O.current))}}),d.jsx(Ae,{camera:le,options:se,ref:A,onSelect:h=>{var S;(S=ce.get(le.name))==null||S.dispose();const g=oe.get(h);g!==void 0&&(Z(le),le=g,M(g,A.current))}})]}),n==="Quad"&&d.jsxs(d.Fragment,{children:[d.jsx(Ae,{camera:X,options:se,ref:O,onSelect:h=>{var S;(S=ce.get(X.name))==null||S.dispose();const g=oe.get(h);g!==void 0&&(Z(X),X=g,M(g,O.current))}}),d.jsx(Ae,{camera:le,options:se,ref:A,onSelect:h=>{var S;(S=ce.get(le.name))==null||S.dispose();const g=oe.get(h);g!==void 0&&(Z(le),le=g,M(g,A.current))}}),d.jsx(Ae,{camera:ke,options:se,ref:J,onSelect:h=>{var S;(S=ce.get(ke.name))==null||S.dispose();const g=oe.get(h);g!==void 0&&(Z(ke),ke=g,M(g,J.current))}}),d.jsx(Ae,{camera:je,options:se,ref:F,onSelect:h=>{var S;(S=ce.get(je.name))==null||S.dispose();const g=oe.get(h);g!==void 0&&(Z(je),je=g,M(g,F.current))}})]})]}),d.jsxs("div",{className:"settings",children:[d.jsx(mt,{index:Sn.indexOf(n),options:Sn,onSelect:h=>{h!==n&&(he(),a(h))},open:s,onToggle:h=>{p(h),l&&u(!1),f&&y(!1)}}),d.jsx(mt,{index:wn.indexOf(gt),options:wn,onSelect:h=>{if(h!==gt)switch(gt=h,gt){case"Depth":K.overrideMaterial=xa;break;case"Normals":K.overrideMaterial=Ma;break;default:case"Renderer":K.overrideMaterial=null;break;case"Wireframe":K.overrideMaterial=Ra;break;case"UVs":K.overrideMaterial=Ta;break}},open:l,onToggle:h=>{s&&p(!1),u(h),f&&y(!1)}}),d.jsx(mt,{index:0,options:["Orbit Mode","Selection Mode"],onSelect:h=>{bt=h==="Selection Mode",at.visible=bt},open:f,onToggle:h=>{s&&p(!1),l&&u(!1),y(h)}})]})]})}const Va="";function ka(t){return d.jsxs("div",{className:"editor",ref:t.ref,style:t.style,children:[d.jsx("header",{children:t.header}),t.children,d.jsx("footer",{children:t.footer})]})}w.Accordion=ht,w.Application=In,w.BaseRemote=Qe,w.ChildObject=Lt,w.ContainerObject=hn,w.Draggable=cn,w.DraggableItem=sn,w.Dropdown=ln,w.DropdownItem=un,w.Editor=ka,w.InfiniteGridHelper=dn,w.Inspector=bn,w.MultiView=Pa,w.NavButton=Nt,w.RemoteComponents=en,w.RemoteController=Qn,w.RemoteTheatre=Me,w.RemoteThree=an,w.RemoteTweakpane=Dt,w.SceneInspector=Sa,w.SidePanel=Ca,w.ToolEvents=N,w.UVMaterial=fn,w.capitalize=ze,w.clamp=jn,w.colorToHex=Qt,w.debugDispatcher=I,w.dispose=kt,w.disposeMaterial=$t,w.disposeTexture=Dn,w.distance=_n,w.hierarchyUUID=Pt,w.isColor=Jt,w.randomID=Zt,w.resetThreeObjects=qt,w.round=ft,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})});