lunchboxjs 0.2.1001-beta.0 → 0.2.1001-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -47
- package/dist/lunchboxjs.js +292 -347
- package/dist/lunchboxjs.min.js +1 -1
- package/dist/lunchboxjs.module.js +292 -342
- package/package.json +3 -2
- package/src/components/LunchboxEventHandlers.tsx +239 -0
- package/src/components/LunchboxWrapper/LunchboxWrapper.tsx +7 -6
- package/src/components/autoGeneratedComponents.ts +1 -1
- package/src/components/index.ts +2 -2
- package/src/core/createNode.ts +1 -1
- package/src/core/extend.ts +1 -1
- package/src/core/instantiateThreeObject/index.ts +1 -1
- package/src/core/instantiateThreeObject/processProps.ts +1 -1
- package/src/core/interaction.ts +55 -0
- package/src/core/minidom.ts +1 -1
- package/src/core/update.ts +2 -30
- package/src/core/updateObjectProp.ts +5 -14
- package/src/index.ts +12 -3
- package/src/keys.ts +1 -0
- package/src/nodeOps/index.ts +70 -57
- package/src/types.ts +0 -8
- package/src/components/catalogue.ts +0 -3
- package/src/core/interaction/index.ts +0 -102
- package/src/core/interaction/input.ts +0 -4
- package/src/core/interaction/interactables.ts +0 -14
- package/src/core/interaction/setupAutoRaycaster.ts +0 -232
package/dist/lunchboxjs.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("vue"),require("three"),require("lodash")):"function"==typeof define&&define.amd?define(["exports","vue","three","lodash"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Lunchbox={},e.vue,e.three,e.lodash)}(this,(function(e,t,r,o){"use strict";function n(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var a=n(r);const s=e=>e?.$el&&e?.$el?.hasOwnProperty?.("instance"),i=e=>"domMeta"===e?.metaType||e?.props?.["data-lunchbox"],c=e=>"standardMeta"===e?.metaType,d=e=>e.isLunchboxRootNode;function l(t={}){const r={text:t.text??""};return new e.MiniDom.RendererCommentNode({...r,...t,metaType:"commentMeta"})}function p(t={}){const r={domElement:document.createElement(t.type??"")};return new e.MiniDom.RendererDomNode({...r,...t,metaType:"domMeta"})}function u(t={}){const r={text:t.text??""};return new e.MiniDom.RendererTextNode({...t,...r,metaType:"textMeta"})}function m(t={},r={}){const o={attached:t.attached??[],attachedArray:t.attachedArray??{},instance:t.instance??null},n=new e.MiniDom.RendererStandardNode({...t,...o,metaType:"standardMeta"});return!n.type||d(n)||n.instance||(n.instance=Q({...n,props:{...n.props,...r}})),n}const h=Symbol(),f=Symbol(),y=Symbol(),g=Symbol(),b=Symbol(),v=Symbol(),x=Symbol(),R=Symbol(),w=Symbol(),P=Symbol(),C=Symbol(),A=Symbol(),N=Symbol(),M=Symbol(),S=Symbol(),B=Symbol(),L=Symbol(),E=Symbol(),G=()=>t.inject(L),j=()=>t.inject(S),T=()=>t.inject(B),k=[],O=e=>{k.push(e)},$=e=>{const t=k.indexOf(e);-1!==t&&k.splice(t,1)},D=t.ref(!1),F=t.ref({x:1/0,y:1/0});let K=[];function I({node:e,key:r,value:o}){if(e.eventListeners[r]||(e.eventListeners[r]=[]),e.eventListenerRemoveFunctions[r]||(e.eventListenerRemoveFunctions[r]=[]),e.eventListeners[r].push(o),U.includes(r)&&e.instance&&!k.includes(e)&&(O(e),e.eventListenerRemoveFunctions[r].push((()=>$(e)))),"onClick"===r||"onPointerDown"===r||"onPointerUp"===r){const o=t.watch((()=>D.value),(t=>{const o=K.map((e=>e.element)).findIndex((t=>t.instance&&t.instance.uuid===e.instance?.uuid));-1!==o&&((!t||"onClick"!==r&&"onPointerDown"!==r)&&(t||"onPointerUp"!==r)||e.eventListeners[r].forEach((e=>{e({intersection:K[o].intersection})})))}));e.eventListenerRemoveFunctions[r].push(o)}return e}const U=["onClick","onPointerUp","onPointerDown","onPointerOver","onPointerOut","onPointerEnter","onPointerLeave","onPointerMove"],V=(e,r,o,n,a)=>{if(!r?.domElement||!o||!e)return;const s=(n=n??window.innerWidth)/(a=a??window.innerHeight);if("perspectivecamera"===e.type?.toLowerCase()){const t=e;t.aspect=s,t.updateProjectionMatrix()}else if("orthographiccamera"===e.type?.toLowerCase()){const t=e,r=a/n;t.top=10*r,t.bottom=10*-r,t.right=10,t.left=-10,t.updateProjectionMatrix()}r.setSize(n,a),o&&e&&r.render(t.toRaw(o),t.toRaw(e))},z=(e,t,r,o,n)=>{const a=e.value?.domElement;if(!a)throw new Error("missing container");const s=()=>{if("container"===n){const e=(e=>{const t=getComputedStyle(e);return{width:e.clientWidth-parseFloat(t.paddingLeft)-parseFloat(t.paddingRight),height:e.clientHeight-parseFloat(t.paddingTop)-parseFloat(t.paddingBottom)}})(a);V(t,r,o,e.width,e.height)}else V(t,r,o)};s();let i=new ResizeObserver((()=>{s()}));return a&&i.observe(a),{dispose(){a&&i.unobserve(a)}}},H=t.defineComponent({name:"LunchboxScene",setup:(e,{slots:r})=>()=>t.createVNode(t.resolveComponent("scene"),null,{default:()=>[r.default?.()]})}),W=e=>({position:e,top:0,right:0,bottom:0,left:0,width:"100%",height:"100%",display:"block"}),q=t.defineComponent({name:"Lunchbox",props:{background:String,cameraArgs:Array,cameraLook:Array,cameraLookAt:Array,cameraPosition:Array,dpr:Number,ortho:Boolean,orthographic:Boolean,r3f:Boolean,rendererArguments:Object,rendererProperties:Object,sizePolicy:String,shadow:[Boolean,Object],transparent:Boolean,zoom:Number,updateSource:Object},setup(e,r){const o=t.ref();let n=e.dpr??-1;const s=t.ref(),i=t.ref(),c=t.ref(),d=t.ref(),l=Ae(),p=Ne(),u=Me(),m=t.reactive({}),h=Se();e.r3f&&a?.ColorManagement&&(a.ColorManagement.legacyMode=!1),t.onMounted((async()=>{if(!o.value&&!r.slots?.renderer?.()?.length)throw new Error("missing canvas");for(r.slots?.camera?.()?.length||(e.cameraPosition&&(m.position=e.cameraPosition),(e.cameraLook||e.cameraLookAt)&&(m.lookAt=e.cameraLook||e.cameraLookAt),void 0!==e.zoom&&(m.zoom=e.zoom)),d.value?.$el?.instance&&e.background&&(d.value.$el.instance.background=new a.Color(e.background)),-1===n&&(n=window.devicePixelRatio),p?.({dpr:n}),console.log(1);!i.value?.$el?.instance&&!i.value?.component?.ctx.$el?.instance;)console.log(2),await new Promise((e=>requestAnimationFrame(e)));for(console.log(3);!d.value?.$el?.instance&&!d.value?.component?.ctx.$el?.instance;)console.log(4),await new Promise((e=>requestAnimationFrame(e)));console.log(5);const t=i.value?.$el?.instance??i.value?.component?.ctx.$el?.instance;t.setPixelRatio(l.dpr);const f=d.value?.$el?.instance??d.value?.component?.ctx.$el?.instance,y=c.value?.$el?.instance??c.value?.component?.ctx.$el?.instance;if(!r.slots?.renderer?.()?.length){z(s,y,t,f,e.sizePolicy),e.r3f&&(t.outputEncoding=a.sRGBEncoding,t.toneMapping=a.ACESFilmicToneMapping);const r={shadow:e.shadow};r?.shadow&&(t.shadowMap.enabled=!0,"object"==typeof r.shadow&&(t.shadowMap.type=r.shadow.type))}if(!u)throw new Error("error creating app");u.config.globalProperties.lunchbox.camera=y,u.config.globalProperties.lunchbox.renderer=t,u.config.globalProperties.lunchbox.scene=f;for(let e of h??[])e({app:u,camera:y,renderer:t,scene:f});ce({app:u,camera:y,renderer:t,scene:f,updateSource:e.updateSource})})),t.onBeforeUnmount((()=>{pe(),me()}));const f="container"===e.sizePolicy?"static":"absolute",y="container"===e.sizePolicy?"static":"fixed";return()=>t.createVNode(t.Fragment,null,[r.slots?.renderer?.()?.length?i.value=r.slots?.renderer?.()[0]:t.createVNode(t.Fragment,null,[t.createVNode("div",{class:"lunchbox-container",style:W(f),ref:s,"data-lunchbox":"true"},[t.createVNode("canvas",{ref:o,class:"lunchbox-canvas",style:W(y),"data-lunchbox":"true"},null)]),o.value?.domElement&&t.createVNode(t.resolveComponent("webGLRenderer"),t.mergeProps(e.rendererProperties??{},{ref:i,args:[{alpha:e.transparent,antialias:!0,canvas:o.value?.domElement,powerPreference:e.r3f?"high-performance":"default",...e.rendererArguments??{}}]}),null)]),r.slots?.scene?.()?.length?d.value=r.slots?.scene?.()[0]:t.createVNode(H,{ref:d},{default:()=>[r.slots?.default?.()]}),r.slots?.camera?.()?.length?c.value=r.slots?.camera?.()[0]:e.ortho||e.orthographic?t.createVNode(t.resolveComponent("orthographicCamera"),t.mergeProps({ref:c,args:e.cameraArgs??[]},m),null):t.createVNode(t.resolveComponent("perspectiveCamera"),t.mergeProps({ref:c,args:e.cameraArgs??[e.r3f?75:45,.5625,1,1e3]},m),null)])}}),_={},X={...["mesh","instancedMesh","scene","sprite","object3D","instancedBufferGeometry","bufferGeometry","boxBufferGeometry","circleBufferGeometry","coneBufferGeometry","cylinderBufferGeometry","dodecahedronBufferGeometry","extrudeBufferGeometry","icosahedronBufferGeometry","latheBufferGeometry","octahedronBufferGeometry","parametricBufferGeometry","planeBufferGeometry","polyhedronBufferGeometry","ringBufferGeometry","shapeBufferGeometry","sphereBufferGeometry","tetrahedronBufferGeometry","textBufferGeometry","torusBufferGeometry","torusKnotBufferGeometry","tubeBufferGeometry","wireframeGeometry","parametricGeometry","tetrahedronGeometry","octahedronGeometry","icosahedronGeometry","dodecahedronGeometry","polyhedronGeometry","tubeGeometry","torusKnotGeometry","torusGeometry","sphereGeometry","ringGeometry","planeGeometry","latheGeometry","shapeGeometry","extrudeGeometry","edgesGeometry","coneGeometry","cylinderGeometry","circleGeometry","boxGeometry","material","shadowMaterial","spriteMaterial","rawShaderMaterial","shaderMaterial","pointsMaterial","meshPhysicalMaterial","meshStandardMaterial","meshPhongMaterial","meshToonMaterial","meshNormalMaterial","meshLambertMaterial","meshDepthMaterial","meshDistanceMaterial","meshBasicMaterial","meshMatcapMaterial","lineDashedMaterial","lineBasicMaterial","light","spotLightShadow","spotLight","pointLight","rectAreaLight","hemisphereLight","directionalLightShadow","directionalLight","ambientLight","lightShadow","ambientLightProbe","hemisphereLightProbe","lightProbe","texture","videoTexture","dataTexture","dataTexture3D","compressedTexture","cubeTexture","canvasTexture","depthTexture","textureLoader","group","catmullRomCurve3","points","cameraHelper","camera","perspectiveCamera","orthographicCamera","cubeCamera","arrayCamera","webGLRenderer"].map((e=>t.defineComponent({inheritAttrs:!1,name:e,setup:(r,o)=>()=>t.h(e,o.attrs,o.slots?.default?.()||[])}))).reduce(((e,t)=>(e[t.name]=t,e)),{}),Lunchbox:q},Y=e=>t.defineComponent({inheritAttrs:!1,name:e,render(){return t.h(e,this.$attrs,this.$slots?.default?.()||[])}}),J=({app:e,...t})=>{Object.keys(t).forEach((r=>{e.component(r,Y(r)),_[r]=t[r]}))};function Q(e){if(!e.type)return null;const t=e.type[0].toUpperCase()+e.type.slice(1),r=t.replace(/Lunchbox$/,""),o=_[e.type]||a[t]||_[r]||a[r];if(!o)throw`${t} is not part of the THREE namespace! Did you forget to extend? import {extend} from 'lunchbox'; extend({app, YourComponent, ...})`;const n=(e.props.args??[]).map((t=>function({node:e,prop:t}){const r="string"==typeof t&&t.startsWith("$attachedArray"),o=function({node:e,prop:t}){return"string"==typeof t&&t.startsWith("$attachedArray")?e.attachedArray[t.replace("$attachedArray.","")]:"string"==typeof t&&t.startsWith("$attached")?e.attached[t.replace("$attached.","")]:t}({node:e,prop:t});return Array.isArray(o)&&r?o:[o]}({node:e,prop:t})));let s=[];n.forEach((e=>{s=s.concat(e)}));return new o(...s)}var Z,ee=new Uint8Array(16);function te(){if(!Z&&!(Z="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Z(ee)}var re=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function oe(e){return"string"==typeof e&&re.test(e)}for(var ne=[],ae=0;ae<256;++ae)ne.push((ae+256).toString(16).substr(1));function se(e,t,r){var o=(e=e||{}).random||(e.rng||te)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,t){r=r||0;for(var n=0;n<16;++n)t[r+n]=o[n];return t}return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=(ne[e[t+0]]+ne[e[t+1]]+ne[e[t+2]]+ne[e[t+3]]+"-"+ne[e[t+4]]+ne[e[t+5]]+"-"+ne[e[t+6]]+ne[e[t+7]]+"-"+ne[e[t+8]]+ne[e[t+9]]+"-"+ne[e[t+10]]+ne[e[t+11]]+ne[e[t+12]]+ne[e[t+13]]+ne[e[t+14]]+ne[e[t+15]]).toLowerCase();if(!oe(r))throw TypeError("Stringified UUID is invalid");return r}(o)}e.MiniDom=void 0,function(e){e.BaseNode=class{constructor(e={},t){this.parentNode=e?.parentNode??t??null,this.minidomType="MinidomBaseNode",this.uuid=e?.uuid??se()}uuid;parentNode;get nextSibling(){if(!this.parentNode)return null;const e=this.parentNode.children.findIndex((e=>e.uuid===this.uuid));return-1!==e&&e<this.parentNode.children.length-1?this.parentNode.children[e+1]:null}insertBefore(e,t){e.removeAsChildFromAnyParents(),e.parentNode=this;const r=this.children.findIndex((e=>e.uuid===t?.uuid));-1!==r?this.children.splice(r,0,e):this.children.push(e)}removeChild(e){const t=this.children.findIndex((t=>t?.uuid===e?.uuid));-1!==t&&this.children.splice(t,1)}children=[];addChild(e){return e&&(e.removeAsChildFromAnyParents(),e.parentNode=this,this.insertBefore(e,null)),this}getPath(){const e=[];let t=this;for(;t;)e.unshift(t),t=t.parentNode;return e}drop(){this.removeAsChildFromAnyParents(),this.parentNode=null}walk(e){const t=[this,...this.children],r=[];let o=!0;for(;t.length&&o;){const n=t.shift();if(n){if(r.includes(n))continue;r.push(n),t.push(...n.children.filter((e=>!r.includes(e)))),o=e(n)}else o=!1}}minidomType;removeAsChildFromAnyParents(){this.parentNode?.removeChild(this)}};class t extends e.BaseNode{constructor(e={},t){super(e,t),this.minidomType="RendererNode",this.eventListeners={},this.eventListenerRemoveFunctions={},this.name=e.name??"",this.metaType=e.metaType??"standardMeta",this.props=e.props??[],this.type=e.type??""}eventListeners;eventListenerRemoveFunctions;name;metaType;props;type;drop(){super.drop(),Object.keys(this.eventListenerRemoveFunctions).forEach((e=>{this.eventListenerRemoveFunctions[e].forEach((e=>e()))}))}}e.RendererBaseNode=t;class r extends e.RendererBaseNode{constructor(e={},t){super(e,t),this.domElement=e.domElement??document.createElement("div")}domElement;isLunchboxRootNode=!0}e.RendererRootNode=r;class o extends e.RendererBaseNode{constructor(e={},t){super(e,t),this.text=e.text??""}text}e.RendererCommentNode=o;class n extends e.RendererBaseNode{constructor(e={},t){super(e,t),this.domElement=e.domElement??document.createElement("div")}domElement}e.RendererDomNode=n;class a extends e.RendererBaseNode{constructor(e={},t){super(e,t),this.text=e.text??""}text}e.RendererTextNode=a;class s extends e.RendererBaseNode{constructor(e={},t){super(e,t),this.attached=e.attached??[],this.attachedArray=e.attachedArray??{},this.instance=e.instance??null}attached;attachedArray;instance}e.RendererStandardNode=s}(e.MiniDom||(e.MiniDom={}));const ie=e=>{"number"==typeof e.app.config.globalProperties.lunchbox.frameId&&cancelAnimationFrame(e.app.config.globalProperties.lunchbox.frameId),e.app.config.globalProperties.lunchbox.frameId=requestAnimationFrame((()=>ce({app:e.app,renderer:e.renderer,scene:e.scene,camera:e.camera,updateSource:e.updateSource})))},ce=e=>{e.updateSource?e.app.config.globalProperties.lunchbox.watchStopHandle||(e.app.config.globalProperties.lunchbox.watchStopHandle=t.watch(e.updateSource,(()=>{ie(e)}),{deep:!0})):ie(e);const{app:r,renderer:o,scene:n,camera:a}=e;r.config.globalProperties.lunchbox.beforeRender.forEach((t=>{t?.(e)})),o&&n&&a&&(r.customRender?r.customRender(e):o.render(t.toRaw(n),t.toRaw(a))),r.config.globalProperties.lunchbox.afterRender.forEach((t=>{t?.(e)}))},de=()=>({onBeforeRender:t.inject(v),offBeforeRender:t.inject(x)}),le=()=>{const e=t.inject(C);return()=>{void 0!==e&&cancelAnimationFrame(e)}},pe=()=>{le()?.()},ue=()=>{const e=t.inject(A);return()=>e?.()},me=()=>{ue()?.()};function he({node:e,key:t,value:r}){if((e=>["onClick","onContextMenu","onDoubleClick","onPointerUp","onPointerDown","onPointerOver","onPointerOut","onPointerEnter","onPointerLeave","onPointerMove","onWheel"].includes(e))(t))return I({node:e,key:t,value:r});const n=t.replace(/-/g,"."),a=fe[n]||n;if(ge.includes(t)||ge.includes(a))return e;if(!c(e))return e;if("string"==typeof r&&r.startsWith("$attached")){const t=r.replace("$attached.","");r=o.get(e.attached,t,null)}const s=e.instance;if(!s)return e;let i;for(let e=0;e<ye.length&&!i;e++){const t=[ye[e],a].filter(Boolean).join(".");i=i=o.get(s,t)}if(i&&o.isNumber(r)&&i.setScalar)i.setScalar(r);else if(i&&i.set){const e=Array.isArray(r)?r:[r];s[a].set(...e)}else"function"==typeof i?i.bind(e.instance)(...r):void 0!==o.get(s,a,void 0)?o.set(s,a,""===r||r):console.log(`No property ${a} found on ${s}`);const d=s?.texture?.type||s?.type;if("string"==typeof d){const e=d.toLowerCase();switch(!0){case e.includes("material"):s.needsUpdate=!0;break;case e.includes("camera")&&s.updateProjectionMatrix:s.updateProjectionMatrix()}}return e}const fe={x:"position.x",y:"position.y",z:"position.z"},ye=["","parameters"],ge=["args","attach","attachArray","is.default","isDefault","key","onAdded","ref","src"],be=["geometry","material"];function ve(e,t,r,o){const n=o??e.instance,a=t.instance;e.props.attach===r&&(t.attached={[r]:n,...t.attached||{}},a[r]=o??e.instance),e.props.attachArray===r&&(t.attachedArray[e.props.attachArray]||(t.attachedArray[e.props.attachArray]=[]),t.attachedArray[e.props.attachArray].push(n),a[r]=[a[r]])}const xe={createElement:(e,t,r,o)=>{const n={type:e,props:o};if(i(n)){return p(n)}const a=m(n);return be.forEach((t=>{e.toLowerCase().endsWith(t)&&(a.props.attach=t)})),a},createText:e=>u({text:e}),createComment:e=>l({text:e}),insert:(e,t,r)=>{if(!t)throw new Error("missing parent");if(t.insertBefore(e,r),"commentMeta"!==e.metaType&&"textMeta"!==e.metaType&&(i(e)&&(i(t)||d(t))&&t.domElement.appendChild(e.domElement),c(e))){let r=t.metaType;if("textMeta"===r||"commentMeta"===r){const e=t.getPath();for(let r=e.length-1;r>=0;r--)if("textMeta"!==e[r].metaType&&"commentMeta"!==e[r].metaType){t=e[r];break}}if(c(e)&&e.instance?.isObject3D&&c(t)&&t.instance?.isObject3D&&t.instance?.add?.(e.instance),e?.props?.attach&&c(t)&&t?.instance){e.type?.toLowerCase().endsWith("loader")&&e.props.src&&(e.props.attach||e.props.attachArray)?function(e,t){const r=e.instance;if(t.attached=t.attached||{},t.attachedArray=t.attachedArray||{},!e.props.attach)return;if("textureloader"===e.type?.toLowerCase()){const o=r.load(e.props.src);ve(e,t,e.props.attach,o)}else r.load(e.props.src,(r=>{ve(e,t,e.props.attach,r)}),null,(e=>{throw new Error(e)}))}(e,t):ve(e,t,e.props.attach)}e.props?.onAdded&&e.props.onAdded({instance:e.instance})}},nextSibling(e){const t=e.nextSibling;return t||null},parentNode(e){const t=e.parentNode;return t||null},patchProp(e,t,r,o){i(e)?"style"===t?Object.keys(o).forEach((t=>{e.domElement.style[t]=o[t]})):e.domElement.setAttribute(t,o):d(e)||t.startsWith("$")||he({node:e,key:t,value:o})},remove:e=>{if(!e)return;const t=[];e.walk((e=>(t.push(e),!0))),t.forEach((e=>{if(c(e)){e.instance?.removeFromParent?.();const t="scene"!==e.type&&e.instance?.dispose;t&&t.bind(e.instance)(),e.instance=null}e.drop()}))},setElementText(){},setText(){}},Re=G,we=j,Pe=T;const Ce=()=>({setCustomRender:t.inject(y),clearCustomRender:t.inject(g)}),Ae=()=>t.inject(h),Ne=()=>t.inject(f),Me=()=>t.inject(M),Se=()=>t.inject(E);e.addEventListener=I,e.addInteractable=O,e.afterRenderKey=R,e.appCameraKey=L,e.appKey=M,e.appRenderersKey=S,e.appRootNodeKey=N,e.appSceneKey=B,e.beforeRenderKey=b,e.camera=Re,e.cancelUpdate=pe,e.cancelUpdateSource=me,e.clearCustomRender=()=>{Ce()?.clearCustomRender?.()},e.clearCustomRenderKey=g,e.createApp=r=>{const o=t.createRenderer(xe).createApp(r);Object.keys(X).forEach((e=>{o?.component(e,X[e])})),o.provide(y,(e=>{o.setCustomRender(e)})),o.provide(g,(()=>{o.clearCustomRender()}));const n=[];o.provide(b,n),o.provide(v,((e,t=1/0)=>{t===1/0?n.push(e):n.splice(t,0,e)})),o.provide(x,(e=>{if(isFinite(e))n.splice(e,1);else{const t=n.findIndex((t=>t==e));-1!==t&&n.splice(t,1)}}));const a=[];o.provide(R,a),o.provide(w,((e,t=1/0)=>{t===1/0?a.push(e):a.splice(t,0,e)})),o.provide(P,(e=>{if(isFinite(e))a.splice(e,1);else{const t=a.findIndex((t=>t==e));-1!==t&&a.splice(t,1)}})),o.config.globalProperties.lunchbox=t.reactive({afterRender:a,beforeRender:n,camera:null,dpr:1,frameId:-1,renderer:null,scene:null,watchStopHandle:null}),o.provide(h,o.config.globalProperties.lunchbox),o.provide(f,(e=>{Object.keys(e).forEach((t=>{const r=t;o.config.globalProperties.lunchbox[r]=e[r]}))})),o.provide(C,o.config.globalProperties.lunchbox.frameId),o.provide(A,o.config.globalProperties.lunchbox.watchStopHandle);const{mount:s}=o;o.mount=(t,...r)=>{const n="string"==typeof t?document.querySelector(t):t,a=new e.MiniDom.RendererRootNode({domElement:n,isLunchboxRootNode:!0,name:"root",metaType:"rootMeta",type:"root",uuid:"LUNCHBOX_ROOT"});o.rootNode=a,o.provide(N,a);return s(a,...r)},o.extend=e=>(J({app:o,...e}),o);return o.provide(E,[]),o.setCustomRender=e=>{o&&(o.customRender=e)},o.clearCustomRender=()=>{o&&(o.customRender=null)},o.provide(M,o),o.provide(S,t.computed((()=>o.config.globalProperties.lunchbox.renderer))),o.provide(B,t.computed((()=>o.config.globalProperties.lunchbox.scene))),o.provide(L,t.computed((()=>o.config.globalProperties.lunchbox.camera))),o},e.createCommentNode=l,e.createDomNode=p,e.createNode=m,e.createTextNode=u,e.currentIntersections=K,e.ensureRenderer=j,e.ensuredCamera=G,e.ensuredScene=T,e.extend=J,e.find=function(e){return e=t.isRef(e)?e.value:e,c(e)?e?.instance:s(e)?e?.$el?.instance:t.isVNode(e)?e.el?.instance:null},e.frameIdKey=C,e.globalsInjectionKey=h,e.inputActive=D,e.instantiateThreeObject=Q,e.interactables=k,e.isMinidomNode=function(e){return"RendererNode"===e?.minidomType},e.mousePos=F,e.nestedPropertiesToCheck=ye,e.offAfterRender=e=>{de().offBeforeRender?.(e)},e.offAfterRenderKey=P,e.offBeforeRender=e=>{de().offBeforeRender?.(e)},e.offBeforeRenderKey=x,e.onAfterRender=(e,t=1/0)=>{de().onBeforeRender?.(e,t)},e.onAfterRenderKey=w,e.onBeforeRender=(e,t=1/0)=>{de().onBeforeRender?.(e,t)},e.onBeforeRenderKey=v,e.onStart=(e,t=1/0)=>{const r=Se();t===1/0?r?.push(e):r?.splice(t,0,e)},e.removeInteractable=$,e.renderer=we,e.scene=Pe,e.setCustomRender=e=>{Ce()?.setCustomRender?.(e)},e.setCustomRenderKey=y,e.startCallbackKey=E,e.update=ce,e.updateAllObjectProps=function({node:e}){const t=e.props||{};let r=e;return Object.keys(t).forEach((o=>{r=he({node:e,key:o,value:t[o]})})),r},e.updateGlobals=e=>{Ne()?.(e)},e.updateGlobalsInjectionKey=f,e.updateObjectProp=he,e.useAfterRender=()=>({onAfterRender:t.inject(v),offAfterRender:t.inject(x)}),e.useApp=Me,e.useBeforeRender=de,e.useCamera=()=>G(),e.useCancelUpdate=le,e.useCancelUpdateSource=ue,e.useCustomRender=Ce,e.useGlobals=Ae,e.useRenderer=()=>j(),e.useRootNode=()=>t.inject(N),e.useScene=function(e){return t.watch(Pe,(t=>{t&&e(t.value)}),{immediate:!0})},e.useStartCallbacks=Se,e.useUpdateGlobals=Ne,e.watchStopHandleKey=A,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("vue"),require("three"),require("lodash")):"function"==typeof define&&define.amd?define(["exports","vue","three","lodash"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Lunchbox={},e.vue,e.three,e.lodash)}(this,(function(e,t,r,n){"use strict";function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var a=o(r);const i=e=>e?.$el&&e?.$el?.hasOwnProperty?.("instance"),s=e=>"domMeta"===e?.metaType||e?.props?.["data-lunchbox"],c=e=>"standardMeta"===e?.metaType,d=e=>e.isLunchboxRootNode;function l(t={}){const r={text:t.text??""};return new e.MiniDom.RendererCommentNode({...r,...t,metaType:"commentMeta"})}function u(t={}){const r={domElement:document.createElement(t.type??"")};return new e.MiniDom.RendererDomNode({...r,...t,metaType:"domMeta"})}function p(t={}){const r={text:t.text??""};return new e.MiniDom.RendererTextNode({...t,...r,metaType:"textMeta"})}function m(t={},r={}){const n={attached:t.attached??[],attachedArray:t.attachedArray??{},instance:t.instance??null},o=new e.MiniDom.RendererStandardNode({...t,...n,metaType:"standardMeta"});return!o.type||d(o)||o.instance||(o.instance=_({...o,props:{...o.props,...r}})),o}const h=Symbol(),f=Symbol(),y=Symbol(),b=Symbol(),g=Symbol(),v=Symbol(),x=Symbol(),R=Symbol(),w=Symbol(),P=Symbol(),C=Symbol(),A=Symbol(),E=Symbol(),N=Symbol(),L=Symbol(),M=Symbol(),S=Symbol(),B=Symbol(),j=Symbol(),G=()=>t.inject(S),T=()=>t.inject(L),k=()=>t.inject(M);function O({node:e,key:t,interactables:r,value:n}){return e.eventListeners[t]||(e.eventListeners[t]=[]),e.eventListenerRemoveFunctions[t]||(e.eventListenerRemoveFunctions[t]=[]),e.eventListeners[t].push(n),$.includes(t)&&e.instance&&!r.value.includes(e)&&(r.value.push(e),e.eventListenerRemoveFunctions[t].push((()=>{const t=r.value.indexOf(e);-1!==t&&r.value.splice(t,1)}))),e}const $=["onClick","onPointerUp","onPointerDown","onPointerOver","onPointerOut","onPointerEnter","onPointerLeave","onPointerMove"],D=(e,r,n,o,a)=>{if(!r?.domElement||!n||!e)return;const i=(o=o??window.innerWidth)/(a=a??window.innerHeight);if("perspectivecamera"===e.type?.toLowerCase()){const t=e;t.aspect=i,t.updateProjectionMatrix()}else if("orthographiccamera"===e.type?.toLowerCase()){const t=e,r=a/o;t.top=10*r,t.bottom=10*-r,t.right=10,t.left=-10,t.updateProjectionMatrix()}r.setSize(o,a),n&&e&&r.render(t.toRaw(n),t.toRaw(e))},F=(e,t,r,n,o)=>{const a=e.value?.domElement;if(!a)throw new Error("missing container");const i=()=>{if("container"===o){const e=(e=>{const t=getComputedStyle(e);return{width:e.clientWidth-parseFloat(t.paddingLeft)-parseFloat(t.paddingRight),height:e.clientHeight-parseFloat(t.paddingTop)-parseFloat(t.paddingBottom)}})(a);D(t,r,n,e.width,e.height)}else D(t,r,n)};i();let s=new ResizeObserver((()=>{i()}));return a&&s.observe(a),{dispose(){a&&s.unobserve(a)}}},K=t.defineComponent({name:"LunchboxScene",setup:(e,{slots:r})=>()=>t.createVNode(t.resolveComponent("scene"),null,{default:()=>[r.default?.()]})}),V=t.defineComponent({name:"LunchboxEventHandlers",setup(){const e=Be(),r=we(),n=Ce(),o=Ne(),i=t.ref({x:1/0,y:1/0}),s=t.ref(!1);let c=[];const d=new a.Raycaster(new a.Vector3,new a.Vector3(0,0,-1)),l=({element:e,eventKeys:t,intersection:r})=>{e&&t.forEach((t=>{e.eventListeners[t]&&e.eventListeners[t].forEach((e=>{e({intersection:r})}))}))},u=t.watch(n,(e=>{if(!e?.domElement)return;const{domElement:t}=e;t.addEventListener("pointermove",(e=>{const r=(t.width??1)/o.dpr,n=(t.height??1)/o.dpr;i.value.x=e.offsetX/r*2-1,i.value.y=-e.offsetY/n*2+1})),t.addEventListener("pointerdown",(()=>s.value=!0)),t.addEventListener("pointerup",(()=>s.value=!1)),u()}),{immediate:!0}),p=()=>{const t=r.value;if(!t)return;d.setFromCamera(i.value,t);const n=d.intersectObjects(e?.value.map((e=>e.instance))??[]);let o=[],a=[],s=[];o=c.map((e=>e.intersection)),n?.forEach((t=>{if(-1===c.findIndex((e=>e.intersection.object===t.object))){const r=e?.value.find((e=>e.instance?.uuid===t.object.uuid));r&&a.push({element:r,intersection:t})}else{const r=e?.value.find((e=>e.instance?.uuid===t.object.uuid));r&&s.push({element:r,intersection:t})}const r=o.findIndex((e=>e.object.uuid===t.object.uuid));-1!==r&&o.splice(r,1)}));const u=o.map((t=>({element:e?.value.find((e=>e.instance?.uuid===t.object.uuid)),intersection:t})));a.forEach((({element:e,intersection:t})=>{l({element:e,eventKeys:["onPointerEnter"],intersection:t})})),s.forEach((({element:e,intersection:t})=>{l({element:e,eventKeys:["onPointerOver","onPointerMove"],intersection:t})})),u.forEach((({element:e,intersection:t})=>{l({element:e,eventKeys:["onPointerLeave","onPointerOut"],intersection:t})})),c=[].concat(a,s)};ie(p);t.onBeforeUnmount((()=>se(p)));const m=["onClick","onPointerDown","onPointerUp"];return t.watch(s,(e=>{const t=[];c.forEach((r=>{m.forEach((n=>{const o=r.element.uuid+n;!e||"onClick"!==n&&"onPointerDown"!==n?e||"onPointerUp"!==n||t.includes(o)||(r.element.eventListeners[n]?.forEach((e=>e({intersection:r.intersection}))),t.push(o)):t.includes(o)||(r.element.eventListeners[n]?.forEach((e=>e({intersection:r.intersection}))),t.push(o))}))}))})),()=>t.createVNode(t.resolveComponent("object3D"),null,null)}}),I=e=>({position:e,top:0,right:0,bottom:0,left:0,width:"100%",height:"100%",display:"block"}),U=t.defineComponent({name:"Lunchbox",props:{background:String,cameraArgs:Array,cameraLook:Array,cameraLookAt:Array,cameraPosition:Array,dpr:Number,ortho:Boolean,orthographic:Boolean,r3f:Boolean,rendererArguments:Object,rendererProperties:Object,sizePolicy:String,shadow:[Boolean,Object],transparent:Boolean,zoom:Number,updateSource:Object},setup(e,r){const n=t.ref();let o=e.dpr??-1;const i=t.ref(),s=t.ref(),c=t.ref(),d=t.ref(),l=Ne(),u=Le(),p=Me(),m=t.reactive({}),h=Se();e.r3f&&a?.ColorManagement&&(a.ColorManagement.legacyMode=!1);const f=Be();t.onMounted((async()=>{if(!n.value&&!r.slots?.renderer?.()?.length)throw new Error("missing canvas");for(r.slots?.camera?.()?.length||(e.cameraPosition&&(m.position=e.cameraPosition),(e.cameraLook||e.cameraLookAt)&&(m.lookAt=e.cameraLook||e.cameraLookAt),void 0!==e.zoom&&(m.zoom=e.zoom)),d.value?.$el?.instance&&e.background&&(d.value.$el.instance.background=new a.Color(e.background)),-1===o&&(o=window.devicePixelRatio),u?.({dpr:o});!s.value?.$el?.instance&&!s.value?.component?.ctx.$el?.instance;)await new Promise((e=>requestAnimationFrame(e)));for(;!d.value?.$el?.instance&&!d.value?.component?.ctx.$el?.instance;)await new Promise((e=>requestAnimationFrame(e)));const t=s.value?.$el?.instance??s.value?.component?.ctx.$el?.instance;t.setPixelRatio(l.dpr);const f=d.value?.$el?.instance??d.value?.component?.ctx.$el?.instance,y=c.value?.$el?.instance??c.value?.component?.ctx.$el?.instance;if(!r.slots?.renderer?.()?.length){F(i,y,t,f,e.sizePolicy),e.r3f&&(t.outputEncoding=a.sRGBEncoding,t.toneMapping=a.ACESFilmicToneMapping);const r={shadow:e.shadow};r?.shadow&&(t.shadowMap.enabled=!0,"object"==typeof r.shadow&&(t.shadowMap.type=r.shadow.type))}if(!p)throw new Error("error creating app");p.config.globalProperties.lunchbox.camera=y,p.config.globalProperties.lunchbox.renderer=t,p.config.globalProperties.lunchbox.scene=f;for(let e of h??[])e({app:p,camera:y,renderer:t,scene:f});oe({app:p,camera:y,renderer:t,scene:f,updateSource:e.updateSource})})),t.onBeforeUnmount((()=>{de(),ue()}));const y="container"===e.sizePolicy?"static":"absolute",b="container"===e.sizePolicy?"static":"fixed";return()=>t.createVNode(t.Fragment,null,[r.slots?.renderer?.()?.length?s.value=r.slots?.renderer?.()[0]:t.createVNode(t.Fragment,null,[t.createVNode("div",{class:"lunchbox-container",style:I(y),ref:i,"data-lunchbox":"true"},[t.createVNode("canvas",{ref:n,class:"lunchbox-canvas",style:I(b),"data-lunchbox":"true"},null)]),n.value?.domElement&&t.createVNode(t.resolveComponent("webGLRenderer"),t.mergeProps(e.rendererProperties??{},{ref:s,args:[{alpha:e.transparent,antialias:!0,canvas:n.value?.domElement,powerPreference:e.r3f?"high-performance":"default",...e.rendererArguments??{}}]}),null)]),r.slots?.scene?.()?.length?d.value=r.slots?.scene?.()[0]:t.createVNode(K,{ref:d},{default:()=>[r.slots?.default?.()]}),r.slots?.camera?.()?.length?c.value=r.slots?.camera?.()[0]:e.ortho||e.orthographic?t.createVNode(t.resolveComponent("orthographicCamera"),t.mergeProps({ref:c,args:e.cameraArgs??[]},m),null):t.createVNode(t.resolveComponent("perspectiveCamera"),t.mergeProps({ref:c,args:e.cameraArgs??[e.r3f?75:45,.5625,1,1e3]},m),null),f?.value.length&&t.createVNode(V,null,null)])}}),z={},H={...["mesh","instancedMesh","scene","sprite","object3D","instancedBufferGeometry","bufferGeometry","boxBufferGeometry","circleBufferGeometry","coneBufferGeometry","cylinderBufferGeometry","dodecahedronBufferGeometry","extrudeBufferGeometry","icosahedronBufferGeometry","latheBufferGeometry","octahedronBufferGeometry","parametricBufferGeometry","planeBufferGeometry","polyhedronBufferGeometry","ringBufferGeometry","shapeBufferGeometry","sphereBufferGeometry","tetrahedronBufferGeometry","textBufferGeometry","torusBufferGeometry","torusKnotBufferGeometry","tubeBufferGeometry","wireframeGeometry","parametricGeometry","tetrahedronGeometry","octahedronGeometry","icosahedronGeometry","dodecahedronGeometry","polyhedronGeometry","tubeGeometry","torusKnotGeometry","torusGeometry","sphereGeometry","ringGeometry","planeGeometry","latheGeometry","shapeGeometry","extrudeGeometry","edgesGeometry","coneGeometry","cylinderGeometry","circleGeometry","boxGeometry","material","shadowMaterial","spriteMaterial","rawShaderMaterial","shaderMaterial","pointsMaterial","meshPhysicalMaterial","meshStandardMaterial","meshPhongMaterial","meshToonMaterial","meshNormalMaterial","meshLambertMaterial","meshDepthMaterial","meshDistanceMaterial","meshBasicMaterial","meshMatcapMaterial","lineDashedMaterial","lineBasicMaterial","light","spotLightShadow","spotLight","pointLight","rectAreaLight","hemisphereLight","directionalLightShadow","directionalLight","ambientLight","lightShadow","ambientLightProbe","hemisphereLightProbe","lightProbe","texture","videoTexture","dataTexture","dataTexture3D","compressedTexture","cubeTexture","canvasTexture","depthTexture","textureLoader","group","catmullRomCurve3","points","raycaster","cameraHelper","camera","perspectiveCamera","orthographicCamera","cubeCamera","arrayCamera","webGLRenderer"].map((e=>t.defineComponent({inheritAttrs:!1,name:e,setup:(r,n)=>()=>t.h(e,n.attrs,n.slots?.default?.()||[])}))).reduce(((e,t)=>(e[t.name]=t,e)),{}),Lunchbox:U},W=e=>t.defineComponent({inheritAttrs:!1,name:e,render(){return t.h(e,this.$attrs,this.$slots?.default?.()||[])}}),q=({app:e,...t})=>{Object.keys(t).forEach((r=>{e.component(r,W(r)),z[r]=t[r]}))};function _(e){if(!e.type)return null;const t=e.type[0].toUpperCase()+e.type.slice(1),r=t.replace(/Lunchbox$/,""),n=z[e.type]||a[t]||z[r]||a[r];if(!n)throw`${t} is not part of the THREE namespace! Did you forget to extend? import {extend} from 'lunchbox'; extend({app, YourComponent, ...})`;const o=(e.props.args??[]).map((t=>function({node:e,prop:t}){const r="string"==typeof t&&t.startsWith("$attachedArray"),n=function({node:e,prop:t}){return"string"==typeof t&&t.startsWith("$attachedArray")?e.attachedArray[t.replace("$attachedArray.","")]:"string"==typeof t&&t.startsWith("$attached")?e.attached[t.replace("$attached.","")]:t}({node:e,prop:t});return Array.isArray(n)&&r?n:[n]}({node:e,prop:t})));let i=[];o.forEach((e=>{i=i.concat(e)}));return new n(...i)}var X,Y=new Uint8Array(16);function J(){if(!X&&!(X="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return X(Y)}var Q=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Z(e){return"string"==typeof e&&Q.test(e)}for(var ee=[],te=0;te<256;++te)ee.push((te+256).toString(16).substr(1));function re(e,t,r){var n=(e=e||{}).random||(e.rng||J)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,t){r=r||0;for(var o=0;o<16;++o)t[r+o]=n[o];return t}return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=(ee[e[t+0]]+ee[e[t+1]]+ee[e[t+2]]+ee[e[t+3]]+"-"+ee[e[t+4]]+ee[e[t+5]]+"-"+ee[e[t+6]]+ee[e[t+7]]+"-"+ee[e[t+8]]+ee[e[t+9]]+"-"+ee[e[t+10]]+ee[e[t+11]]+ee[e[t+12]]+ee[e[t+13]]+ee[e[t+14]]+ee[e[t+15]]).toLowerCase();if(!Z(r))throw TypeError("Stringified UUID is invalid");return r}(n)}e.MiniDom=void 0,function(e){e.BaseNode=class{constructor(e={},t){this.parentNode=e?.parentNode??t??null,this.minidomType="MinidomBaseNode",this.uuid=e?.uuid??re()}uuid;parentNode;get nextSibling(){if(!this.parentNode)return null;const e=this.parentNode.children.findIndex((e=>e.uuid===this.uuid));return-1!==e&&e<this.parentNode.children.length-1?this.parentNode.children[e+1]:null}insertBefore(e,t){e.removeAsChildFromAnyParents(),e.parentNode=this;const r=this.children.findIndex((e=>e.uuid===t?.uuid));-1!==r?this.children.splice(r,0,e):this.children.push(e)}removeChild(e){const t=this.children.findIndex((t=>t?.uuid===e?.uuid));-1!==t&&this.children.splice(t,1)}children=[];addChild(e){return e&&(e.removeAsChildFromAnyParents(),e.parentNode=this,this.insertBefore(e,null)),this}getPath(){const e=[];let t=this;for(;t;)e.unshift(t),t=t.parentNode;return e}drop(){this.removeAsChildFromAnyParents(),this.parentNode=null}walk(e){const t=[this,...this.children],r=[];let n=!0;for(;t.length&&n;){const o=t.shift();if(o){if(r.includes(o))continue;r.push(o),t.push(...o.children.filter((e=>!r.includes(e)))),n=e(o)}else n=!1}}minidomType;removeAsChildFromAnyParents(){this.parentNode?.removeChild(this)}};class t extends e.BaseNode{constructor(e={},t){super(e,t),this.minidomType="RendererNode",this.eventListeners={},this.eventListenerRemoveFunctions={},this.name=e.name??"",this.metaType=e.metaType??"standardMeta",this.props=e.props??[],this.type=e.type??""}eventListeners;eventListenerRemoveFunctions;name;metaType;props;type;drop(){super.drop(),Object.keys(this.eventListenerRemoveFunctions).forEach((e=>{this.eventListenerRemoveFunctions[e].forEach((e=>e()))}))}}e.RendererBaseNode=t;class r extends e.RendererBaseNode{constructor(e={},t){super(e,t),this.domElement=e.domElement??document.createElement("div")}domElement;isLunchboxRootNode=!0}e.RendererRootNode=r;class n extends e.RendererBaseNode{constructor(e={},t){super(e,t),this.text=e.text??""}text}e.RendererCommentNode=n;class o extends e.RendererBaseNode{constructor(e={},t){super(e,t),this.domElement=e.domElement??document.createElement("div")}domElement}e.RendererDomNode=o;class a extends e.RendererBaseNode{constructor(e={},t){super(e,t),this.text=e.text??""}text}e.RendererTextNode=a;class i extends e.RendererBaseNode{constructor(e={},t){super(e,t),this.attached=e.attached??[],this.attachedArray=e.attachedArray??{},this.instance=e.instance??null}attached;attachedArray;instance}e.RendererStandardNode=i}(e.MiniDom||(e.MiniDom={}));const ne=e=>{"number"==typeof e.app.config.globalProperties.lunchbox.frameId&&cancelAnimationFrame(e.app.config.globalProperties.lunchbox.frameId),e.app.config.globalProperties.lunchbox.frameId=requestAnimationFrame((()=>oe({app:e.app,renderer:e.renderer,scene:e.scene,camera:e.camera,updateSource:e.updateSource})))},oe=e=>{e.updateSource?e.app.config.globalProperties.lunchbox.watchStopHandle||(e.app.config.globalProperties.lunchbox.watchStopHandle=t.watch(e.updateSource,(()=>{ne(e)}),{deep:!0})):ne(e);const{app:r,renderer:n,scene:o,camera:a}=e;r.config.globalProperties.lunchbox.beforeRender.forEach((t=>{t?.(e)})),n&&o&&a&&(r.customRender?r.customRender(e):n.render(t.toRaw(o),t.toRaw(a))),r.config.globalProperties.lunchbox.afterRender.forEach((t=>{t?.(e)}))},ae=()=>({onBeforeRender:t.inject(v),offBeforeRender:t.inject(x)}),ie=(e,t=1/0)=>{ae().onBeforeRender?.(e,t)},se=e=>{ae().offBeforeRender?.(e)},ce=()=>{const e=t.inject(C);return()=>{void 0!==e&&cancelAnimationFrame(e)}},de=()=>{ce()?.()},le=()=>{const e=t.inject(A);return()=>e?.()},ue=()=>{le()?.()};function pe({node:e,key:t,interactables:r,value:o}){if((e=>["onClick","onContextMenu","onDoubleClick","onPointerUp","onPointerDown","onPointerOver","onPointerOut","onPointerEnter","onPointerLeave","onPointerMove","onWheel"].includes(e))(t))return O({node:e,key:t,interactables:r,value:o});const a=t.replace(/-/g,"."),i=me[a]||a;if(fe.includes(t)||fe.includes(i))return e;if(!c(e))return e;if("string"==typeof o&&o.startsWith("$attached")){const t=o.replace("$attached.","");o=n.get(e.attached,t,null)}const s=e.instance;if(!s)return e;let d;for(let e=0;e<he.length&&!d;e++){const t=[he[e],i].filter(Boolean).join(".");d=d=n.get(s,t)}if(d&&n.isNumber(o)&&d.setScalar)d.setScalar(o);else if(d&&d.set){const e=Array.isArray(o)?o:[o];s[i].set(...e)}else"function"==typeof d?d.bind(e.instance)(...o):void 0!==n.get(s,i,void 0)?n.set(s,i,""===o||o):console.log(`No property ${i} found on ${s}`);const l=s?.texture?.type||s?.type;if("string"==typeof l){const e=l.toLowerCase();switch(!0){case e.includes("material"):s.needsUpdate=!0;break;case e.includes("camera")&&s.updateProjectionMatrix:s.updateProjectionMatrix()}}return e}const me={x:"position.x",y:"position.y",z:"position.z"},he=["","parameters"],fe=["args","attach","attachArray","is.default","isDefault","key","onAdded","ref","src"],ye=["geometry","material"],be=(e,t,r,n)=>{const o={type:e,props:n};if(s(o)){return u(o)}const a=m(o);return ye.forEach((t=>{e.toLowerCase().endsWith(t)&&(a.props.attach=t)})),a},ge=(e,t,r)=>{if(!t)throw new Error("missing parent");if(t.insertBefore(e,r),"commentMeta"!==e.metaType&&"textMeta"!==e.metaType&&(s(e)&&(s(t)||d(t))&&t.domElement.appendChild(e.domElement),c(e))){let r=t.metaType;if("textMeta"===r||"commentMeta"===r){const e=t.getPath();for(let r=e.length-1;r>=0;r--)if("textMeta"!==e[r].metaType&&"commentMeta"!==e[r].metaType){t=e[r];break}}if(c(e)&&e.instance?.isObject3D&&c(t)&&t.instance?.isObject3D&&t.instance?.add?.(e.instance),e?.props?.attach&&c(t)&&t?.instance){e.type?.toLowerCase().endsWith("loader")&&e.props.src&&(e.props.attach||e.props.attachArray)?function(e,t){const r=e.instance;if(t.attached=t.attached||{},t.attachedArray=t.attachedArray||{},!e.props.attach)return;if("textureloader"===e.type?.toLowerCase()){const n=r.load(e.props.src);ve(e,t,e.props.attach,n)}else r.load(e.props.src,(r=>{ve(e,t,e.props.attach,r)}),null,(e=>{throw new Error(e)}))}(e,t):ve(e,t,e.props.attach)}e.props?.onAdded&&e.props.onAdded({instance:e.instance})}};function ve(e,t,r,n){const o=n??e.instance,a=t.instance;e.props.attach===r&&(t.attached={[r]:o,...t.attached||{}},a[r]=n??e.instance),e.props.attachArray===r&&(t.attachedArray[e.props.attachArray]||(t.attachedArray[e.props.attachArray]=[]),t.attachedArray[e.props.attachArray].push(o),a[r]=[a[r]])}const xe=e=>{if(!e)return;const t=[];e.walk((e=>(t.push(e),!0))),t.forEach((e=>{if(c(e)){e.instance?.removeFromParent?.();const t="scene"!==e.type&&e.instance?.dispose;t&&t.bind(e.instance)(),e.instance=null}e.drop()}))},Re=G,we=()=>G(),Pe=T,Ce=()=>T(),Ae=k;const Ee=()=>({setCustomRender:t.inject(y),clearCustomRender:t.inject(b)}),Ne=()=>t.inject(h),Le=()=>t.inject(f),Me=()=>t.inject(N),Se=()=>t.inject(j),Be=()=>t.inject(B);e.addEventListener=O,e.afterRenderKey=R,e.appCameraKey=S,e.appKey=N,e.appRenderersKey=L,e.appRootNodeKey=E,e.appSceneKey=M,e.beforeRenderKey=g,e.camera=Re,e.cancelUpdate=de,e.cancelUpdateSource=ue,e.clearCustomRender=()=>{Ee()?.clearCustomRender?.()},e.clearCustomRenderKey=b,e.createApp=r=>{const{nodeOps:n,interactables:o}=(()=>{const e=t.ref([]);return{nodeOps:{createElement:be,createText:e=>p({text:e}),createComment:e=>l({text:e}),insert:ge,nextSibling:e=>e.nextSibling||null,parentNode:e=>e.parentNode||null,patchProp(t,r,n,o){s(t)?"style"===r?Object.keys(o).forEach((e=>{t.domElement.style[e]=o[e]})):t.domElement.setAttribute(r,o):d(t)||r.startsWith("$")||pe({node:t,key:r,interactables:e,value:o})},remove:xe,setElementText(){},setText(){}},interactables:e}})(),a=t.createRenderer(n).createApp(r);a.provide(B,o),Object.keys(H).forEach((e=>{a?.component(e,H[e])})),a.provide(y,(e=>{a.setCustomRender(e)})),a.provide(b,(()=>{a.clearCustomRender()}));const i=[];a.provide(g,i),a.provide(v,((e,t=1/0)=>{t===1/0?i.push(e):i.splice(t,0,e)})),a.provide(x,(e=>{if(isFinite(e))i.splice(e,1);else{const t=i.findIndex((t=>t==e));-1!==t&&i.splice(t,1)}}));const c=[];a.provide(R,c),a.provide(w,((e,t=1/0)=>{t===1/0?c.push(e):c.splice(t,0,e)})),a.provide(P,(e=>{if(isFinite(e))c.splice(e,1);else{const t=c.findIndex((t=>t==e));-1!==t&&c.splice(t,1)}})),a.config.globalProperties.lunchbox=t.reactive({afterRender:c,beforeRender:i,camera:null,dpr:1,frameId:-1,renderer:null,scene:null,watchStopHandle:null}),a.provide(h,a.config.globalProperties.lunchbox),a.provide(f,(e=>{Object.keys(e).forEach((t=>{const r=t;a.config.globalProperties.lunchbox[r]=e[r]}))})),a.provide(C,a.config.globalProperties.lunchbox.frameId),a.provide(A,a.config.globalProperties.lunchbox.watchStopHandle);const{mount:u}=a;a.mount=(t,...r)=>{const n="string"==typeof t?document.querySelector(t):t,o=new e.MiniDom.RendererRootNode({domElement:n,isLunchboxRootNode:!0,name:"root",metaType:"rootMeta",type:"root",uuid:"LUNCHBOX_ROOT"});a.rootNode=o,a.provide(E,o);return u(o,...r)},a.extend=e=>(q({app:a,...e}),a);return a.provide(j,[]),a.setCustomRender=e=>{a&&(a.customRender=e)},a.clearCustomRender=()=>{a&&(a.customRender=null)},a.provide(N,a),a.provide(L,t.computed((()=>a.config.globalProperties.lunchbox.renderer))),a.provide(M,t.computed((()=>a.config.globalProperties.lunchbox.scene))),a.provide(S,t.computed((()=>a.config.globalProperties.lunchbox.camera))),a},e.createCommentNode=l,e.createDomNode=u,e.createNode=m,e.createTextNode=p,e.ensureRenderer=T,e.ensuredCamera=G,e.ensuredScene=k,e.extend=q,e.find=function(e){return e=t.isRef(e)?e.value:e,c(e)?e?.instance:i(e)?e?.$el?.instance:t.isVNode(e)?e.el?.instance:null},e.frameIdKey=C,e.globalsInjectionKey=h,e.instantiateThreeObject=_,e.isMinidomNode=function(e){return"RendererNode"===e?.minidomType},e.lunchboxInteractables=B,e.nestedPropertiesToCheck=he,e.offAfterRender=e=>{ae().offBeforeRender?.(e)},e.offAfterRenderKey=P,e.offBeforeRender=se,e.offBeforeRenderKey=x,e.onAfterRender=(e,t=1/0)=>{ae().onBeforeRender?.(e,t)},e.onAfterRenderKey=w,e.onBeforeRender=ie,e.onBeforeRenderKey=v,e.onStart=(e,t=1/0)=>{const r=Se();t===1/0?r?.push(e):r?.splice(t,0,e)},e.renderer=Pe,e.scene=Ae,e.setCustomRender=e=>{Ee()?.setCustomRender?.(e)},e.setCustomRenderKey=y,e.startCallbackKey=j,e.update=oe,e.updateGlobals=e=>{Le()?.(e)},e.updateGlobalsInjectionKey=f,e.updateObjectProp=pe,e.useAfterRender=()=>({onAfterRender:t.inject(v),offAfterRender:t.inject(x)}),e.useApp=Me,e.useBeforeRender=ae,e.useCamera=we,e.useCancelUpdate=ce,e.useCancelUpdateSource=le,e.useCustomRender=Ee,e.useGlobals=Ne,e.useLunchboxInteractables=Be,e.useRenderer=Ce,e.useRootNode=()=>t.inject(E),e.useScene=function(e){return t.watch(Ae,(t=>{t&&e(t.value)}),{immediate:!0})},e.useStartCallbacks=Se,e.useUpdateGlobals=Le,e.watchStopHandleKey=A,Object.defineProperty(e,"__esModule",{value:!0})}));
|