@tomorrowevening/hermes 0.0.62 → 0.0.64

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 d=require("three"),vn=require("tweakpane"),bn=require("@tweakpane/plugin-essentials"),x=require("react"),Jt=require("framer-motion");function yn(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 xn=yn(bn),Et=()=>{},En=()=>{};function ct(e){return e.substring(0,1).toUpperCase()+e.substring(1)}function Ve(e,n,a){return Math.min(n,Math.max(e,a))}function kt(e,n,a){return(a-e)/(n-e)}function Dt(e,n,a){return e*(1-a)+n*a}function Sn(e,n){const a=e-n;return Math.sqrt(a*a)}function Qt(){return Math.round(Math.random()*1e6).toString()}function en(e){return e.r!==void 0&&e.g!==void 0&&e.b!==void 0}function tn(e){const n=Math.round(e.r*255),a=Math.round(e.g*255),t=Math.round(e.b*255),i=h=>{const f=h.toString(16);return f.length===1?"0"+f:f},c=i(n),u=i(a),o=i(t);return"#"+c+u+o}function At(e,n=1){return Number(e.toFixed(n))}exports.totalThreeObjects=0;const nn=()=>{exports.totalThreeObjects=0},Lt=e=>{if(!e)return;let n=e.name.replace(" ","");n.length===0&&(n=`obj_${exports.totalThreeObjects}`,exports.totalThreeObjects++),e.parent!==null&&e.parent.uuid.length>0&&(n=`${e.parent.uuid}.${n}`),e.uuid=n,e.children.forEach(a=>{Lt(a)})},Cn=e=>{e?.dispose()},an=e=>{e&&(Array.isArray(e)?e.forEach(n=>n.dispose()):e.dispose())},St=e=>{if(e){for(;e.children.length>0;){const n=e.children[0];n.type==="Audio"?(n.pause(),n.parent&&n.parent.remove(n)):St(n)}if(e.parent&&e.parent.remove(e),e.isMesh){const n=e;n.geometry?.dispose(),an(n.material)}e.dispose!==void 0&&e.dispose()}};class wn{components=new Map;listen;_appID="";_debugEnabled;_broadcastChannel=void 0;_webSocket=void 0;_mode="app";_connected=!1;_useBC=!1;constructor(n,a,t=!0){this._appID=n,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 appID(){return this._appID}get connected(){return this._connected}get debugEnabled(){return this._debugEnabled}get mode(){return this._mode}get isApp(){return this._mode==="app"}get editor(){return this._mode==="editor"}set editor(n){n&&(this._mode="editor")}}const k=new d.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 lt{app;constructor(n){this.app=n}dispose(){}handleApp(n,a,t){}handleEditor(n,a,t){}}class Mn extends lt{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,a,t){switch(t.event){case"selectComponent":k.dispatchEvent({type:D.SELECT_DROPDOWN,value:t.data});break;case"draggableListUpdate":k.dispatchEvent({type:D.DRAG_UPDATE,value:t.data});break}}}class Ct extends lt{project;sheets=new Map;sheetObjects=new Map;sheetObjectCBs=new Map;sheetObjectUnsubscribe=new Map;activeSheet;studio=void 0;static rafDriver=void 0;dispose(){this.project=void 0,this.sheets=new Map,this.sheetObjects=new Map,this.sheetObjectCBs=new Map,this.sheetObjectUnsubscribe=new Map}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,i){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const c=this.sheet(n);if(c===void 0)return;const u=`${n}_${a}`;let o=this.sheetObjects.get(u);o!==void 0?o=c.object(a,{...t,...o.value},{reconfigure:!0}):o=c.object(a,t),this.sheetObjects.set(u,o),this.sheetObjectCBs.set(u,i!==void 0?i:Et);const h=o.onValuesChange(f=>{if(this.app.editor){for(const p in f){const S=f[p];typeof S=="object"&&en(S)&&(f[p]={r:S.r,g:S.g,b:S.b,a:S.a})}this.app.send({event:"updateSheetObject",target:"app",data:{sheet:n,sheetObject:u,values:f}})}const m=this.sheetObjectCBs.get(u);m!==void 0&&m(f)});return this.sheetObjectUnsubscribe.set(u,h),o}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 c=`${a}_${t}`,u=this.sheetObjectUnsubscribe.get(c);u!==void 0&&(this.sheetObjects.delete(c),this.sheetObjectCBs.delete(c),this.sheetObjectUnsubscribe.delete(c),u())}handleApp(n,a,t){const i=a;let c;switch(t.event){case"setSheet":c=i.sheets.get(t.data.sheet),c!==void 0&&(i.activeSheet=c,this.studio?.setSelection([c]));break;case"setSheetObject":c=i.sheetObjects.get(`${t.data.sheet}_${t.data.key}`),c!==void 0&&this.studio?.setSelection([c]);break;case"updateSheetObject":c=i.sheets.get(t.data.sheet),c!==void 0&&c.sequence.pause(),c=i.sheetObjectCBs.get(t.data.sheetObject),c!==void 0&&c(t.data.values);break;case"updateTimeline":c=i.sheets.get(t.data.sheet),i.activeSheet!==void 0&&(i.activeSheet.sequence.position=t.data.position);break}}handleEditor(n,a,t){if(n.editor){const i=a;switch(t.event){case"playSheet":i.sheet(t.data.sheet)?.sequence.play(t.data.value);break;case"pauseSheet":i.sheet(t.data.sheet)?.sequence.pause();break}}}handleEditorApp(n,a){if(n.editor){this.studio?.ui.restore(),this.studio?.onSelectionChange(u=>{u.length<1||u.forEach(o=>{let h=o.address.sheetId,f="setSheet",m={};switch(o.type){case"Theatre_Sheet_PublicAPI":f="setSheet",m={sheet:o.address.sheetId},a.activeSheet=a.sheets.get(o.address.sheetId);break;case"Theatre_SheetObject_PublicAPI":f="setSheetObject",h+=`_${o.address.objectKey}`,m={id:h,sheet:o.address.sheetId,key:o.address.objectKey},a.activeSheet=a.sheets.get(o.address.sheetId);break}n.send({event:f,target:"app",data:m})})});let t=-1;const i=()=>{if(Ct.rafDriver?.tick(performance.now()),a.activeSheet!==void 0&&t!==a.activeSheet.sequence.position){t=a.activeSheet.sequence.position;const u=a.activeSheet;n.send({event:"updateTimeline",target:"app",data:{position:t,sheet:u.address.sheetId}})}},c=()=>{i(),requestAnimationFrame(c)};i(),c()}else this.studio?.ui.hide()}}function On(e,n,a){if(e.editor){a.ui.restore(),a.onSelectionChange(u=>{u.length<1||u.forEach(o=>{let h=o.address.sheetId,f="setSheet",m={};switch(o.type){case"Theatre_Sheet_PublicAPI":f="setSheet",m={sheet:o.address.sheetId},n.activeSheet=n.sheets.get(o.address.sheetId);break;case"Theatre_SheetObject_PublicAPI":f="setSheetObject",h+=`_${o.address.objectKey}`,m={id:h,sheet:o.address.sheetId,key:o.address.objectKey},n.activeSheet=n.sheets.get(o.address.sheetId);break}e.send({event:f,target:"app",data:m})})});let t=-1;const i=()=>{if(Ct.rafDriver?.tick(performance.now()),n.activeSheet!==void 0&&t!==n.activeSheet.sequence.position){t=n.activeSheet.sequence.position;const u=n.activeSheet;e.send({event:"updateTimeline",target:"app",data:{position:t,sheet:u.address.sheetId}})}},c=()=>{i(),requestAnimationFrame(c)};i(),c()}else a.ui.hide()}function Tn(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 rn(e){const n={name:e.name,type:e.type,uuid:e.uuid,children:[]};return e.children.forEach(a=>{n.children.push(rn(a))}),n}function Rn(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 _n(e){switch(e){case"blendSrcAlpha":case"blendDstAlpha":case"blendEquationAlpha":case"clippingPlanes":case"shadowSide":case"precision":return!0}return!1}function Je(e){const n={};for(const a in e){if(a.substring(0,1)==="_"||a.substring(0,2)==="is"||_n(a))continue;const t=typeof e[a],i=e[a];switch(t){case"boolean":case"number":case"string":n[a]=i;break;case"object":if(i!==null)if(n[a]=i,i.isTexture)if(i instanceof d.Texture){const c=i.source.toJSON();n[a]={src:c.url}}else i instanceof d.CubeTexture&&(console.log("env map"),console.log(i.source.data),console.log(i.source.toJSON()),n[a]={src:""});else a==="uniforms"&&(n[a]=Rn(n[a]));else n[a]={src:""};break}}return n}function _t(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 i=[];t.material.forEach(c=>{i.push(Je(c))}),n.material=i}else n.material=Je(t.material)}else if(a.search("points")>-1){const t=e;if(Array.isArray(t.material)){const i=[];t.material.forEach(c=>{i.push(Je(c))}),n.material=i}else n.material=Je(t.material)}else if(a.search("line")>-1){const t=e;if(Array.isArray(t.material)){const i=[];t.material.forEach(c=>{i.push(Je(c))}),n.material=i}else n.material=Je(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,width:e.width,height:e.height});return n}function Pn(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 jn(e,n){for(const a in n)e[a]=n[a]}function q(e,n,a){const t=n.split("."),i=t.length;if(typeof a!="object")switch(i){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}else{let u;switch(i){case 1:u=e[t[0]];break;case 2:u=e[t[0]][t[1]];break;case 3:u=e[t[0]][t[1]][t[2]];break;case 4:u=e[t[0]][t[1]][t[2]][t[3]];break;case 5:u=e[t[0]][t[1]][t[2]][t[3]][t[4]];break}u!==void 0&&jn(u,a)}}function sn(e){return new Promise((n,a)=>{const t=new Image;t.onload=()=>{const i=new d.Texture(t);i.wrapS=d.RepeatWrapping,i.wrapT=d.RepeatWrapping,i.needsUpdate=!0,n(i)},t.onerror=a,t.src=e})}class kn extends lt{scene=void 0;renderer=void 0;renderTargets=new Map;dispose(){this.renderTargets.forEach(n=>{n.dispose()}),this.renderTargets.clear(),this.scene&&St(this.scene),this.renderer?.dispose()}getObject(n){this.app.debugEnabled&&this.app.send({event:"getObject",target:"app",data:n})}setObject(n){const a=_t(n);this.app.send({event:"setObject",target:"editor",data:a})}requestMethod(n,a,t,i){this.app.send({event:"requestMethod",target:"app",data:{uuid:n,key:a,value:t,subitem:i}})}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;nn(),Lt(this.scene);const a=rn(this.scene);this.app.send({event:"setScene",target:"editor",data:a})}addCamera(n){if(!this.app.debugEnabled)return;const a=_t(n);this.app.send({event:"addCamera",target:"editor",data:a})}removeCamera(n){if(!this.app.debugEnabled)return;const a=_t(n);this.app.send({event:"removeCamera",target:"editor",data:a})}handleApp(n,a,t){switch(t.event){case"getObject":k.dispatchEvent({type:D.GET_OBJECT,value:t.data});break;case"updateObject":k.dispatchEvent({type:D.UPDATE_OBJECT,value:t.data});break;case"createTexture":k.dispatchEvent({type:D.CREATE_TEXTURE,value:t.data});break;case"requestMethod":k.dispatchEvent({type:D.REQUEST_METHOD,value:t.data});break}}handleEditor(n,a,t){switch(t.event){case"setObject":k.dispatchEvent({type:D.SET_OBJECT,value:t.data});break;case"setScene":k.dispatchEvent({type:D.SET_SCENE,value:t.data});break;case"addCamera":k.dispatchEvent({type:D.ADD_CAMERA,value:t.data});break;case"removeCamera":k.dispatchEvent({type:D.REMOVE_CAMERA,value:t.data});break}}rendererWidth=300;rendererHeight=150;addRT(n,a){const t=new d.WebGLRenderTarget(32,32,a);t.texture.name=n,this.renderTargets.set(n,t)}resize(n,a){const t=this.dpr;this.rendererWidth=n,this.rendererHeight=a,this.renderTargets.forEach(i=>{i.setSize(n*t,a*t)}),this.renderer?.setSize(n,a)}set dpr(n){this.renderer?.setPixelRatio(Ve(1,2,n))}get dpr(){return this.renderer!==void 0?this.renderer?.getPixelRatio():1}get width(){return this.rendererWidth}get height(){return this.rendererHeight}get canvas(){return this.renderer!==void 0?this.renderer?.domElement:null}}class Dn extends lt{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 vn.Pane({title:"GUI"}),this.pane.registerPlugin(xn)}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,i=void 0){const c=this.bindID,u=t.onChange!==void 0?t.onChange:Et;this.bindCBs.set(c,u),this.app.editor?(this.pane===void 0&&this.createGUI(),(i!==void 0?i:this.pane).addBinding(n,a,t).on("change",h=>{this.app.send({event:"updateBind",target:"app",data:{id:c,value:h.value}})}),this.editorCallbacks++):(this.app.send({event:"bindObject",target:"app",data:{id:c,name:a,params:t,parent:i}}),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 i=this.bindID;this.buttonCBs.set(i,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:i}})}),this.editorCallbacks++):(this.app.send({event:"addButton",target:"app",data:{id:i,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])}handleApp(n,a,t){const i=a;switch(t.event){case"addFolder":i.addFolder(t.data.name,t.data.params,t.data.parent);break;case"bindObject":i.bind(t.data.name,t.data.params,t.data.parent);break;case"updateBind":i.triggerBind(t.data.id,t.data.value);break;case"addButton":i.button(t.data.name,t.data.callback,t.data.parent);break;case"clickButton":i.triggerButton(t.data.id);break}}}var It={exports:{}},at={};/**
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("three"),vn=require("tweakpane"),bn=require("@tweakpane/plugin-essentials"),x=require("react"),Jt=require("framer-motion");function yn(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 xn=yn(bn),Et=()=>{},En=()=>{};function ct(e){return e.substring(0,1).toUpperCase()+e.substring(1)}function Ve(e,n,a){return Math.min(n,Math.max(e,a))}function kt(e,n,a){return(a-e)/(n-e)}function Dt(e,n,a){return e*(1-a)+n*a}function Sn(e,n){const a=e-n;return Math.sqrt(a*a)}function Qt(){return Math.round(Math.random()*1e6).toString()}function en(e){return e.r!==void 0&&e.g!==void 0&&e.b!==void 0}function tn(e){const n=Math.round(e.r*255),a=Math.round(e.g*255),t=Math.round(e.b*255),i=h=>{const f=h.toString(16);return f.length===1?"0"+f:f},c=i(n),u=i(a),o=i(t);return"#"+c+u+o}function At(e,n=1){return Number(e.toFixed(n))}exports.totalThreeObjects=0;const nn=()=>{exports.totalThreeObjects=0},Lt=e=>{if(!e)return;let n=e.name.replace(" ","");n.length===0&&(n=`obj_${exports.totalThreeObjects}`,exports.totalThreeObjects++),e.parent!==null&&e.parent.uuid.length>0&&(n=`${e.parent.uuid}.${n}`),e.uuid=n,e.children.forEach(a=>{Lt(a)})},Cn=e=>{e?.dispose()},an=e=>{e&&(Array.isArray(e)?e.forEach(n=>n.dispose()):e.dispose())},St=e=>{if(e){for(;e.children.length>0;){const n=e.children[0];n.type==="Audio"?(n.pause(),n.parent&&n.parent.remove(n)):St(n)}if(e.parent&&e.parent.remove(e),e.isMesh){const n=e;n.geometry?.dispose(),an(n.material)}e.dispose!==void 0&&e.dispose()}};class wn{components=new Map;listen;_appID="";_debugEnabled;_broadcastChannel=void 0;_webSocket=void 0;_mode="app";_connected=!1;_useBC=!1;constructor(n,a,t=!0){this._appID=n,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 appID(){return this._appID}get connected(){return this._connected}get debugEnabled(){return this._debugEnabled}get mode(){return this._mode}get isApp(){return this._mode==="app"}get editor(){return this._mode==="editor"}set editor(n){n&&(this._mode="editor")}}const k=new d.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 lt{app;constructor(n){this.app=n}dispose(){}handleApp(n,a,t){}handleEditor(n,a,t){}}class Mn extends lt{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,a,t){switch(t.event){case"selectComponent":k.dispatchEvent({type:D.SELECT_DROPDOWN,value:t.data});break;case"draggableListUpdate":k.dispatchEvent({type:D.DRAG_UPDATE,value:t.data});break}}}class Ct extends lt{project;sheets=new Map;sheetObjects=new Map;sheetObjectCBs=new Map;sheetObjectUnsubscribe=new Map;activeSheet;studio=void 0;static rafDriver=void 0;dispose(){this.project=void 0,this.sheets=new Map,this.sheetObjects=new Map,this.sheetObjectCBs=new Map,this.sheetObjectUnsubscribe=new Map}sheet(n,a){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const t=a!==void 0?`${n}-${a}`:n;let i=this.sheets.get(t);return i!==void 0||(i=this.project?.sheet(n,a),this.sheets.set(t,i)),i}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,i){if(this.project===void 0){console.error("Theatre Project hasn't been created yet.");return}const c=this.sheet(n);if(c===void 0)return;const u=`${n}_${a}`;let o=this.sheetObjects.get(u);o!==void 0?o=c.object(a,{...t,...o.value},{reconfigure:!0}):o=c.object(a,t),this.sheetObjects.set(u,o),this.sheetObjectCBs.set(u,i!==void 0?i:Et);const h=o.onValuesChange(f=>{if(this.app.editor){for(const p in f){const S=f[p];typeof S=="object"&&en(S)&&(f[p]={r:S.r,g:S.g,b:S.b,a:S.a})}this.app.send({event:"updateSheetObject",target:"app",data:{sheet:n,sheetObject:u,values:f}})}const m=this.sheetObjectCBs.get(u);m!==void 0&&m(f)});return this.sheetObjectUnsubscribe.set(u,h),o}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 c=`${a}_${t}`,u=this.sheetObjectUnsubscribe.get(c);u!==void 0&&(this.sheetObjects.delete(c),this.sheetObjectCBs.delete(c),this.sheetObjectUnsubscribe.delete(c),u())}handleApp(n,a,t){const i=a;let c;switch(t.event){case"setSheet":c=i.sheets.get(t.data.sheet),c!==void 0&&(i.activeSheet=c,this.studio?.setSelection([c]));break;case"setSheetObject":c=i.sheetObjects.get(`${t.data.sheet}_${t.data.key}`),c!==void 0&&this.studio?.setSelection([c]);break;case"updateSheetObject":c=i.sheets.get(t.data.sheet),c!==void 0&&c.sequence.pause(),c=i.sheetObjectCBs.get(t.data.sheetObject),c!==void 0&&c(t.data.values);break;case"updateTimeline":c=i.sheets.get(t.data.sheet),i.activeSheet!==void 0&&(i.activeSheet.sequence.position=t.data.position);break}}handleEditor(n,a,t){if(n.editor){const i=a;switch(t.event){case"playSheet":i.sheet(t.data.sheet)?.sequence.play(t.data.value);break;case"pauseSheet":i.sheet(t.data.sheet)?.sequence.pause();break}}}handleEditorApp(n,a){if(n.editor){this.studio?.ui.restore(),this.studio?.onSelectionChange(u=>{u.length<1||u.forEach(o=>{let h=o.address.sheetId,f="setSheet",m={};switch(o.type){case"Theatre_Sheet_PublicAPI":f="setSheet",m={sheet:o.address.sheetId},a.activeSheet=a.sheets.get(o.address.sheetId);break;case"Theatre_SheetObject_PublicAPI":f="setSheetObject",h+=`_${o.address.objectKey}`,m={id:h,sheet:o.address.sheetId,key:o.address.objectKey},a.activeSheet=a.sheets.get(o.address.sheetId);break}n.send({event:f,target:"app",data:m})})});let t=-1;const i=()=>{if(Ct.rafDriver?.tick(performance.now()),a.activeSheet!==void 0&&t!==a.activeSheet.sequence.position){t=a.activeSheet.sequence.position;const u=a.activeSheet;n.send({event:"updateTimeline",target:"app",data:{position:t,sheet:u.address.sheetId}})}},c=()=>{i(),requestAnimationFrame(c)};i(),c()}else this.studio?.ui.hide()}}function On(e,n,a){if(e.editor){a.ui.restore(),a.onSelectionChange(u=>{u.length<1||u.forEach(o=>{let h=o.address.sheetId,f="setSheet",m={};switch(o.type){case"Theatre_Sheet_PublicAPI":f="setSheet",m={sheet:o.address.sheetId},n.activeSheet=n.sheets.get(o.address.sheetId);break;case"Theatre_SheetObject_PublicAPI":f="setSheetObject",h+=`_${o.address.objectKey}`,m={id:h,sheet:o.address.sheetId,key:o.address.objectKey},n.activeSheet=n.sheets.get(o.address.sheetId);break}e.send({event:f,target:"app",data:m})})});let t=-1;const i=()=>{if(Ct.rafDriver?.tick(performance.now()),n.activeSheet!==void 0&&t!==n.activeSheet.sequence.position){t=n.activeSheet.sequence.position;const u=n.activeSheet;e.send({event:"updateTimeline",target:"app",data:{position:t,sheet:u.address.sheetId}})}},c=()=>{i(),requestAnimationFrame(c)};i(),c()}else a.ui.hide()}function Tn(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 rn(e){const n={name:e.name,type:e.type,uuid:e.uuid,children:[]};return e.children.forEach(a=>{n.children.push(rn(a))}),n}function Rn(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 _n(e){switch(e){case"blendSrcAlpha":case"blendDstAlpha":case"blendEquationAlpha":case"clippingPlanes":case"shadowSide":case"precision":return!0}return!1}function Je(e){const n={};for(const a in e){if(a.substring(0,1)==="_"||a.substring(0,2)==="is"||_n(a))continue;const t=typeof e[a],i=e[a];switch(t){case"boolean":case"number":case"string":n[a]=i;break;case"object":if(i!==null)if(n[a]=i,i.isTexture)if(i instanceof d.Texture){const c=i.source.toJSON();n[a]={src:c.url}}else i instanceof d.CubeTexture&&(console.log("env map"),console.log(i.source.data),console.log(i.source.toJSON()),n[a]={src:""});else a==="uniforms"&&(n[a]=Rn(n[a]));else n[a]={src:""};break}}return n}function _t(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 i=[];t.material.forEach(c=>{i.push(Je(c))}),n.material=i}else n.material=Je(t.material)}else if(a.search("points")>-1){const t=e;if(Array.isArray(t.material)){const i=[];t.material.forEach(c=>{i.push(Je(c))}),n.material=i}else n.material=Je(t.material)}else if(a.search("line")>-1){const t=e;if(Array.isArray(t.material)){const i=[];t.material.forEach(c=>{i.push(Je(c))}),n.material=i}else n.material=Je(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,width:e.width,height:e.height});return n}function Pn(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 jn(e,n){for(const a in n)e[a]=n[a]}function q(e,n,a){const t=n.split("."),i=t.length;if(typeof a!="object")switch(i){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}else{let u;switch(i){case 1:u=e[t[0]];break;case 2:u=e[t[0]][t[1]];break;case 3:u=e[t[0]][t[1]][t[2]];break;case 4:u=e[t[0]][t[1]][t[2]][t[3]];break;case 5:u=e[t[0]][t[1]][t[2]][t[3]][t[4]];break}u!==void 0&&jn(u,a)}}function sn(e){return new Promise((n,a)=>{const t=new Image;t.onload=()=>{const i=new d.Texture(t);i.wrapS=d.RepeatWrapping,i.wrapT=d.RepeatWrapping,i.needsUpdate=!0,n(i)},t.onerror=a,t.src=e})}class kn extends lt{scene=void 0;renderer=void 0;renderTargets=new Map;dispose(){this.renderTargets.forEach(n=>{n.dispose()}),this.renderTargets.clear(),this.scene&&St(this.scene),this.renderer?.dispose()}getObject(n){this.app.debugEnabled&&this.app.send({event:"getObject",target:"app",data:n})}setObject(n){const a=_t(n);this.app.send({event:"setObject",target:"editor",data:a})}requestMethod(n,a,t,i){this.app.send({event:"requestMethod",target:"app",data:{uuid:n,key:a,value:t,subitem:i}})}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;nn(),Lt(this.scene);const a=rn(this.scene);this.app.send({event:"setScene",target:"editor",data:a})}addCamera(n){if(!this.app.debugEnabled)return;const a=_t(n);this.app.send({event:"addCamera",target:"editor",data:a})}removeCamera(n){if(!this.app.debugEnabled)return;const a=_t(n);this.app.send({event:"removeCamera",target:"editor",data:a})}handleApp(n,a,t){switch(t.event){case"getObject":k.dispatchEvent({type:D.GET_OBJECT,value:t.data});break;case"updateObject":k.dispatchEvent({type:D.UPDATE_OBJECT,value:t.data});break;case"createTexture":k.dispatchEvent({type:D.CREATE_TEXTURE,value:t.data});break;case"requestMethod":k.dispatchEvent({type:D.REQUEST_METHOD,value:t.data});break}}handleEditor(n,a,t){switch(t.event){case"setObject":k.dispatchEvent({type:D.SET_OBJECT,value:t.data});break;case"setScene":k.dispatchEvent({type:D.SET_SCENE,value:t.data});break;case"addCamera":k.dispatchEvent({type:D.ADD_CAMERA,value:t.data});break;case"removeCamera":k.dispatchEvent({type:D.REMOVE_CAMERA,value:t.data});break}}rendererWidth=300;rendererHeight=150;addRT(n,a){const t=new d.WebGLRenderTarget(32,32,a);t.texture.name=n,this.renderTargets.set(n,t)}resize(n,a){const t=this.dpr;this.rendererWidth=n,this.rendererHeight=a,this.renderTargets.forEach(i=>{i.setSize(n*t,a*t)}),this.renderer?.setSize(n,a)}set dpr(n){this.renderer?.setPixelRatio(Ve(1,2,n))}get dpr(){return this.renderer!==void 0?this.renderer?.getPixelRatio():1}get width(){return this.rendererWidth}get height(){return this.rendererHeight}get canvas(){return this.renderer!==void 0?this.renderer?.domElement:null}}class Dn extends lt{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 vn.Pane({title:"GUI"}),this.pane.registerPlugin(xn)}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,i=void 0){const c=this.bindID,u=t.onChange!==void 0?t.onChange:Et;this.bindCBs.set(c,u),this.app.editor?(this.pane===void 0&&this.createGUI(),(i!==void 0?i:this.pane).addBinding(n,a,t).on("change",h=>{this.app.send({event:"updateBind",target:"app",data:{id:c,value:h.value}})}),this.editorCallbacks++):(this.app.send({event:"bindObject",target:"app",data:{id:c,name:a,params:t,parent:i}}),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 i=this.bindID;this.buttonCBs.set(i,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:i}})}),this.editorCallbacks++):(this.app.send({event:"addButton",target:"app",data:{id:i,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])}handleApp(n,a,t){const i=a;switch(t.event){case"addFolder":i.addFolder(t.data.name,t.data.params,t.data.parent);break;case"bindObject":i.bind(t.data.name,t.data.params,t.data.parent);break;case"updateBind":i.triggerBind(t.data.id,t.data.value);break;case"addButton":i.button(t.data.name,t.data.callback,t.data.parent);break;case"clickButton":i.triggerButton(t.data.id);break}}}var It={exports:{}},at={};/**
2
2
  * @license React
3
3
  * react-jsx-runtime.production.min.js
4
4
  *
package/dist/hermes.es.js CHANGED
@@ -195,13 +195,14 @@ class $t extends Ot {
195
195
  dispose() {
196
196
  this.project = void 0, this.sheets = /* @__PURE__ */ new Map(), this.sheetObjects = /* @__PURE__ */ new Map(), this.sheetObjectCBs = /* @__PURE__ */ new Map(), this.sheetObjectUnsubscribe = /* @__PURE__ */ new Map();
197
197
  }
198
- sheet(n) {
198
+ sheet(n, a) {
199
199
  if (this.project === void 0) {
200
200
  console.error("Theatre Project hasn't been created yet.");
201
201
  return;
202
202
  }
203
- let a = this.sheets.get(n);
204
- return a !== void 0 || (a = this.project?.sheet(n), this.sheets.set(n, a)), a;
203
+ const t = a !== void 0 ? `${n}-${a}` : n;
204
+ let i = this.sheets.get(t);
205
+ return i !== void 0 || (i = this.project?.sheet(n, a), this.sheets.set(t, i)), i;
205
206
  }
206
207
  playSheet(n, a) {
207
208
  this.sheet(n)?.sequence.play(a), this.app.send({
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "module": "./dist/hermes.esm.js",
8
8
  "types": "./types/index.d.ts",
9
9
  "type": "module",
10
- "version": "0.0.62",
10
+ "version": "0.0.64",
11
11
  "homepage": "https://github.com/tomorrowevening/hermes#readme",
12
12
  "bugs": {
13
13
  "url": "https://github.com/tomorrowevening/hermes/issues"
@@ -12,7 +12,7 @@ export default class RemoteTheatre extends BaseRemote {
12
12
  studio: any;
13
13
  static rafDriver?: IRafDriver | undefined;
14
14
  dispose(): void;
15
- sheet(name: string): ISheet | undefined;
15
+ sheet(name: string, instanceId?: string | undefined): ISheet | undefined;
16
16
  playSheet(name: string, params?: any): void;
17
17
  pauseSheet(name: string): void;
18
18
  clearSheetObjects(sheetName: string): void;