@needle-tools/engine 2.65.0-pre → 2.65.0-pre.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/CHANGELOG.md CHANGED
@@ -4,6 +4,9 @@ All notable changes to this package will be documented in this file.
4
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
5
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [2.65.0-pre.1] - 2023-03-10
8
+ - Fix: issue where `<needle-engine>` element was added not yet in the DOM when queried which caused the paths to not be assigned and the engine to not load
9
+
7
10
  ## [2.65.0-pre] - 2023-03-09
8
11
  - Add: runtime checks for recursive loading to prevent it from breaking
9
12
  - Change: internal duplicate active state on `Object3D` has been removed, instead `visible` is used. This was previously a workaround for the `Renderer` setting the visible state when being enabled or disabled but this has been changed in a previous version and it now only sets a flag in the object's Layers instead (which allows for a single object in the hierarchy to not being rendered by setting `Renderer.enabled = false` while objects in the child hierarchy stay visible)
@@ -65070,6 +65070,8 @@ class hZ extends HTMLElement {
65070
65070
  r(this, "_overlay_ar");
65071
65071
  r(this, "_loadingProgress01", 0);
65072
65072
  r(this, "_loadingView");
65073
+ r(this, "_previousSrc", null);
65074
+ r(this, "_isCurrentlySettingsSourceAttribute", !1);
65073
65075
  this._overlay_ar = new YO(), this._context = new Ng({ domElement: this });
65074
65076
  }
65075
65077
  get loadingProgress01() {
@@ -65103,7 +65105,7 @@ class hZ extends HTMLElement {
65103
65105
  }
65104
65106
  async connectedCallback() {
65105
65107
  We && (console.log("<needle-engine> connected"), console.dir(this)), this.onSetupDesktop();
65106
- const g = this.getAttribute("src");
65108
+ const g = this.getAttribute("src") ?? globalThis["needle:codegen_files"];
65107
65109
  g && g.length > 0 && await this.onLoad(g, !0), this.onSetupDesktop();
65108
65110
  }
65109
65111
  disconnectedCallback() {
@@ -65149,6 +65151,8 @@ class hZ extends HTMLElement {
65149
65151
  }
65150
65152
  async onLoad(g, I) {
65151
65153
  var n, a;
65154
+ if (this._isCurrentlySettingsSourceAttribute || g === this._previousSrc)
65155
+ return;
65152
65156
  if (!g || !g.length) {
65153
65157
  console.error("Needle Engine: No source specified", g);
65154
65158
  return;
@@ -65157,6 +65161,7 @@ class hZ extends HTMLElement {
65157
65161
  console.error("Needle Engine: Context not initialized");
65158
65162
  return;
65159
65163
  }
65164
+ this._previousSrc = g, this._isCurrentlySettingsSourceAttribute = !0, this.setAttribute("src", g == null ? void 0 : g.toString()), this._isCurrentlySettingsSourceAttribute = !1;
65160
65165
  const i = this.getAttribute("alias");
65161
65166
  this.classList.add("loading"), We && console.log("Needle Engine: Begin loading", i ?? "");
65162
65167
  const e = !0, C = this.dispatchEvent(new CustomEvent("loadstart", {
@@ -65168,9 +65173,9 @@ class hZ extends HTMLElement {
65168
65173
  }));
65169
65174
  !this._loadingView && C && (this._loadingView = new Fh(this)), C && ((n = this._loadingView) == null || n.onLoadingBegin("begin load")), this.onBeforeBeginLoading(), We && console.log(g);
65170
65175
  let o;
65171
- g.startsWith("[") && g.endsWith("]") ? o = JSON.parse(g) : o = [g];
65176
+ Array.isArray(g) ? o = g : g.startsWith("[") && g.endsWith("]") ? o = JSON.parse(g) : g.includes(",") ? o = g.split(",") : o = [g];
65172
65177
  let B = null;
65173
- if (typeof g == "string" && (B = async (Q) => {
65178
+ if ((o == null ? void 0 : o.length) > 0 && (B = async (Q) => {
65174
65179
  let E = 0;
65175
65180
  Q.hash && (E = Number.parseInt(Q.hash) ?? 0);
65176
65181
  const c = hC();
@@ -65197,7 +65202,7 @@ class hZ extends HTMLElement {
65197
65202
  }
65198
65203
  I || Er(Q);
65199
65204
  }), !B) {
65200
- console.error("Needle Engine: No load function found", g);
65205
+ console.error("Needle Engine: No files to load", g);
65201
65206
  return;
65202
65207
  }
65203
65208
  const s = this.getAttribute("hash");
@@ -4272,7 +4272,7 @@ void main() {
4272
4272
  ${C}
4273
4273
 
4274
4274
  This could mean you forgot to add a npmdef to your ExportInfo
4275
- <a href="https://engine.needle.tools/docs/project_structure.html#creating-and-installing-a-npmdef" target="_blank">documentation</a>`,JC.Warn)}}if(A.children)for(const e of A.children)await B0(t,e,g)}function Mj(t,A){const{instance:g,compData:I,obj:i}=t;A.object=i,A.target=g,fp(g,I,A),hJ&&console.debug("add "+I.name,I,g)}class s0{createBuiltinComponents(A,g,I,i,e){return kj(A,g,I,i,e)}writeBuiltinComponentData(A,g){return fj(A,g)}parseSync(A,g,I,i){return dJ(A,g,I,i)}loadSync(A,g,I,i,e){return wJ(A,g,I,i,e)}}PR(s0);const Uj=wA("printGltf");var lJ=(t=>(t[t.BeforeLoad=0]="BeforeLoad",t[t.AfterLoaded=1]="AfterLoaded",t[t.FinishedSetup=10]="FinishedSetup",t))(lJ||{});class on{constructor(A,g,I,i){r(this,"context");r(this,"loader");r(this,"path");r(this,"gltf");this.context=A,this.path=g,this.loader=I,this.gltf=i}}const KB={};function Rj(t,A){KB[t]=KB[t]||[],KB[t].push(A)}function Fj(t,A){if(KB[t]){const g=KB[t].indexOf(A);g>=0&&KB[t].splice(g,1)}}function ga(t,A){if(KB[t])for(const g of KB[t])g(A)}async function DJ(t,A,g,I,i){Uj&&console.log(g),await t.assets.registerGltf(g),await aC().createBuiltinComponents(t,A,g,I,i)}function n0(t,A){const g=new nQ;return Y_(g,A,t),g}function dJ(t,A,g,I){typeof g!="string"&&console.warn("Parse gltf binary without path, this might lead to errors in resolving extensions. Please provide the source path of the gltf/glb file",g,typeof g);const i=n0(g,t),e=um(i);return new Promise((C,o)=>{try{Jr(i,t),ga(0,new on(t,g,i)),i.parse(A,g,async B=>{ga(1,new on(t,g,i,B)),await DJ(t,g,B,I,e),ga(10,new on(t,g,i,B)),cU(B.scene,t),C(B)},B=>{console.error("failed loading "+g,B),C(void 0)})}catch(B){console.error(B),o(B)}})}function wJ(t,A,g,I=!1,i){const e=n0(A,t),C=um(e);return new Promise((o,B)=>{try{Jr(e,t),ga(0,new on(t,A,e)),e.load(A,async s=>{ga(1,new on(t,A,e,s)),await DJ(t,A,s,g,C),ga(10,new on(t,A,e,s)),cU(s.scene,t),o(s)},s=>{i==null||i.call(e,s)},s=>{console.error("failed loading "+A,s),o(void 0)})}catch(s){console.error(s),B(s)}})}function mj(t,A,g,I=!1){A&&A.animations&&A.animations.length>0&&g.push(()=>{uJ(A,I)})}function uJ(t,A=!1){if(!t||!t.animations||!t.scene||!A&&!AQ(t.scene,Kt))return;for(let I=0;I<t.animations.length;I++){const i=t.animations[I];if(!(!i.tracks||i.tracks.length<=0))for(const e in i.tracks){const C=i.tracks[e],o=C.__objectName??C.name.substring(0,C.name.indexOf(".")),B=t.scene.getObjectByName(o);if(!B)continue;let s=g(B);if(!s)if(A)s=Vo(t.scene,new Kt);else{console.warn("Failed finding animator for",C.name,o);continue}const n=s.animations=s.animations||[];i.name_animator=s.name,n.indexOf(i)<0&&n.push(i)}}function g(I){var e;if(!I)return;const i=(e=I.userData)==null?void 0:e.components;if(i&&i.length>0)for(let C=0;C<i.length;C++){const o=i[C];if(o instanceof xe||o instanceof Kt)return I}return g(I.parent)}}function pJ(t,A,g=!0){if(A.userData&&A.userData.name===t)return A;if(A.children&&A.children.length>0)for(let I=0;I<A.children.length;I++){const i=A.children[I],e=pJ(t,i,g);if(e)return e}}function Nj(t,A,g=!0){return nn(t,A,g)}function Kj(t,A=null){const g=A??Ng.Current.scripts;for(const I in g){const i=g[I];if(i&&i.guid===t)return i}return null}Object.defineProperty(zg.prototype,"fov",{get:function(){return this._fov},set:function(t){const A=t!==this._fov;this._fov=t,A&&this.view!==void 0&&this.updateProjectionMatrix()}}),Object.defineProperty(zg.prototype,"near",{get:function(){return this._near},set:function(t){const A=t!==this._near;this._near=t,A&&this.view!==void 0&&this.updateProjectionMatrix()}}),Object.defineProperty(zg.prototype,"far",{get:function(){return this._far},set:function(t){const A=t!==this._far;this._far=t,A&&this.view!==void 0&&this.updateProjectionMatrix()}});const yJ="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIGlkPSJFYmVuZV8zIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMTYwIDE4Ny43NCI+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOnVybCgjVW5iZW5hbm50ZXJfVmVybGF1Zl8xMjIpO30uY2xzLTJ7ZmlsbDojZjNlNjAwO30uY2xzLTN7ZmlsbDp1cmwoI1VuYmVuYW5udGVyX1ZlcmxhdWZfMTEzKTt9LmNscy00e2ZpbGw6dXJsKCNncmFkaWVudC02KTt9LmNscy01e2ZpbGw6dXJsKCNVbmJlbmFubnRlcl9WZXJsYXVmXzExMCk7fS5jbHMtNntmaWxsOnVybCgjVW5iZW5hbm50ZXJfVmVybGF1Zl8xMDEpO30uY2xzLTd7ZmlsbDojOWMzO30uY2xzLTh7ZmlsbDojZmZlMTEzO30uY2xzLTl7ZmlsbDp1cmwoI2dyYWRpZW50LTUpO308L3N0eWxlPjxsaW5lYXJHcmFkaWVudCBpZD0iVW5iZW5hbm50ZXJfVmVybGF1Zl8xMTMiIHgxPSI4OS42NCIgeTE9IjE4NC44MSIgeDI9IjkwLjQ4IiB5Mj0iMjEuODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgMSwgMCwgMCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MmQzOTkiLz48c3RvcCBvZmZzZXQ9Ii41MSIgc3RvcC1jb2xvcj0iI2FjZDg0MiIvPjxzdG9wIG9mZnNldD0iLjkiIHN0b3AtY29sb3I9IiNkN2RiMGEiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iVW5iZW5hbm50ZXJfVmVybGF1Zl8xMTAiIHgxPSI2OS42OCIgeTE9IjE3OC45IiB4Mj0iNjguMDgiIHkyPSIxNi43NyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAxLCAwLCAwKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzBiYTM5OCIvPjxzdG9wIG9mZnNldD0iLjUiIHN0b3AtY29sb3I9IiM0Y2EzNTIiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM3NmEzMGEiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iVW5iZW5hbm50ZXJfVmVybGF1Zl8xMDEiIHgxPSIzNi42IiB5MT0iMTUyLjE3IiB4Mj0iMzQuNyIgeTI9Ijg0LjE5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEsIDAsIDAsIDEsIDAsIDApIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIuMTkiIHN0b3AtY29sb3I9IiMzNmEzODIiLz48c3RvcCBvZmZzZXQ9Ii41NCIgc3RvcC1jb2xvcj0iIzQ5YTQ1OSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzc2YTMwYiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJVbmJlbmFubnRlcl9WZXJsYXVmXzEyMiIgeDE9IjE1LjgyIiB5MT0iMTUzLjI0IiB4Mj0iMTgiIHkyPSI5MC44NiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAxLCAwLCAwKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzI2Nzg4MCIvPjxzdG9wIG9mZnNldD0iLjUxIiBzdG9wLWNvbG9yPSIjNDU3YTVjIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNzE3NTE2Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImdyYWRpZW50LTYiIHgxPSIxMzUuMDgiIHkxPSIxMzUuNDMiIHgyPSIxNDguOTMiIHkyPSI2My40NyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAxLCAwLCAwKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2IwZDkzOSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2VhZGIwNCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkaWVudC01IiB4MT0iLTQxNjMuMjUiIHkxPSIyMjg1LjEyIiB4Mj0iLTQxNjAuODEiIHkyPSIyMjE1LjM0IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MDEuMTUgLTU5NS4yNSkgcm90YXRlKDIwKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjE3IiBzdG9wLWNvbG9yPSIjNzRhZjUyIi8+PHN0b3Agb2Zmc2V0PSIuNDgiIHN0b3AtY29sb3I9IiM5OWJlMzIiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNjMGM0MGEiLz48L2xpbmVhckdyYWRpZW50PjxzeW1ib2wgaWQ9Im5lZWRsZS1pY29uIiB2aWV3Qm94PSIwIDAgMTYwIDE4Ny43NCI+PGc+PHBvbHlnb24gY2xhc3M9ImNscy0zIiBwb2ludHM9Ijc5LjMyIDM2Ljk4IDc5LjMyIDE4Ny43NCA5NSAxNzQuNTQgMTAxLjU5IDE4LjIzIDc5LjMyIDM2Ljk4Ii8+PHBvbHlnb24gY2xhc3M9ImNscy01IiBwb2ludHM9Ijc5LjMyIDM2Ljk4IDU3LjA1IDE4LjIzIDYzLjY0IDE3NC41NCA3OS4zMiAxODcuNzQgNzkuMzIgMzYuOTgiLz48cG9seWdvbiBjbGFzcz0iY2xzLTYiIHBvaW50cz0iMjUuMTkgMTA0LjgzIDMzLjgyIDE1My44NyA0Ni4zMiAxMzguOTIgNDMuODYgODIuNSAyNS4xOSAxMDQuODMiLz48cG9seWdvbiBjbGFzcz0iY2xzLTEiIHBvaW50cz0iMjUuMTkgMTA0LjgzIDAgOTAuMjQgMTYuOTcgMTQ0LjEgMzMuODIgMTUzLjg3IDI1LjE5IDEwNC44MyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtNyIgcG9pbnRzPSI0My44NiA4Mi41IDE4LjY5IDY3Ljk4IDAgOTAuMjQgMjUuMTggMTA0LjgzIDQzLjg2IDgyLjUiLz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iMTM0LjgyIDc4LjY5IDEyNC44NSAxMzUuMTkgMTQwLjQzIDEyNi4xNSAxNjAgNjQuMSAxMzQuODIgNzguNjkiLz48cG9seWdvbiBjbGFzcz0iY2xzLTkiIHBvaW50cz0iMTM0LjgyIDc4LjY5IDExNi4xNCA1Ni4zNiAxMTMuMjggMTIxLjM2IDEyNC44NSAxMzUuMTkgMTM0LjgyIDc4LjY5Ii8+PHBvbHlnb24gY2xhc3M9ImNscy04IiBwb2ludHM9IjE2MCA2NC4xIDE0MS4zMSA0MS44NCAxMTYuMTQgNTYuMzYgMTM0LjgxIDc4LjY5IDE2MCA2NC4xIi8+PHBvbHlnb24gY2xhc3M9ImNscy0yIiBwb2ludHM9IjEwMS41OSAxOC4yMyA3OS4zMiAwIDU3LjA1IDE4LjIzIDc5LjMyIDM2Ljk4IDEwMS41OSAxOC4yMyIvPjwvZz48L3N5bWJvbD48L2RlZnM+PHVzZSB3aWR0aD0iMTYwIiBoZWlnaHQ9IjE4Ny43NCIgeGxpbms6aHJlZj0iI25lZWRsZS1pY29uIi8+PC9zdmc+",Ia=wA("debugloadingbar"),Q0=wA("debugloadingbarrendering");let zE=0,SJ;function fJ(t){Ia&&console.log(t.progress.loaded.toFixed(0)+"/"+t.progress.total.toFixed(0),t);const A=t.count,g=t.progress.total;g===0||g===void 0?(SJ!==t.name&&(zE=0),SJ=t.name,zE+=(1-zE)*.001,Ia&&Qs("Loading "+t.name+" did not report total size")):zE=t.progress.loaded/g;const I=t.index/A+zE/A;return gg.clamp01(I)}const Od=class{constructor(A,g){r(this,"loadingProgress",0);r(this,"container");r(this,"_progress",0);r(this,"_allowCustomLoadingElement",!0);r(this,"_loadingElement");r(this,"_loadingTextContainer",null);r(this,"_loadingBar",null);r(this,"_messageContainer",null);r(this,"_loadingElementOptions");r(this,"_progressLoop");this.container=A,this._loadingElementOptions=g}onLoadingBegin(A){if(Ia&&console.log("Begin Loading"),!this._loadingElement){for(let g=0;g<this.container.children.length;g++){const I=this.container.children[g];if(I.classList.contains(Od.LoadingContainerClassName)){if(!this._allowCustomLoadingElement){Ia&&console.warn("Remove custom loading container"),this.container.removeChild(I);continue}this._loadingElement=this.createLoadingElement(I)}}this._loadingElement||(this._loadingElement=this.createLoadingElement())}this._progress=0,this.loadingProgress=0,this._loadingElement.style.display="flex",this.container.appendChild(this._loadingElement),this.smoothProgressLoop(),this.setMessage(A??"")}onLoadingUpdate(A,g){var i;(i=this._loadingElement)!=null&&i.parentElement||this.onLoadingBegin(g);let I=0;typeof A=="number"?I=A:("index"in A&&(I=fJ(A)),!g&&"name"in A&&this.setMessage("loading "+A.name)),this.loadingProgress=I,g&&this.setMessage(g),this.updateDisplay()}onLoadingFinished(A){this.loadingProgress=1,this.setMessage(A??"")}setMessage(A){this._messageContainer&&(this._messageContainer.innerText=A)}smoothProgressLoop(){if(this._progressLoop)return;let A=1/12;const g=1-.05;Q0&&(A=1/500,typeof Q0=="number"&&(A*=Q0)),this._progressLoop=setInterval(()=>{if(this.loadingProgress>=1&&this._progress>=g){this._loadingElement&&(Ia&&console.log("Hiding loading element"),this._loadingElement.style.display="none",this._loadingElement.remove()),clearInterval(this._progressLoop),this._progressLoop=null;return}this._progress=gg.lerp(this._progress,this.loadingProgress,A*this.loadingProgress),this.updateDisplay()},A)}updateDisplay(){const A=this._progress,g=(A*100).toFixed(0)+"%";this._loadingBar&&(this._loadingBar.style.width=A*100+"%"),this._loadingTextContainer&&(this._loadingTextContainer.textContent=g)}createLoadingElement(A){var s,n;Ia&&!A&&console.log("Creating loading element"),this._loadingElement=A||document.createElement("div"),A||(this._loadingElement.style.position="fixed",this._loadingElement.style.width="100%",this._loadingElement.style.height="100%",this._loadingElement.style.left="0",this._loadingElement.style.top="0",this._loadingElement.style.backgroundColor="#000000",this._loadingElement.style.display="flex",this._loadingElement.style.alignItems="center",this._loadingElement.style.justifyContent="center",this._loadingElement.style.zIndex="1000",this._loadingElement.style.flexDirection="column",this._loadingElement.style.pointerEvents="none",this._loadingElement.style.color="white");const g=((s=this._loadingElementOptions)==null?void 0:s.className)??Od.LoadingContainerClassName;if(this._loadingElement.classList.add(g),(n=this._loadingElementOptions)!=null&&n.additionalClasses)for(const a of this._loadingElementOptions.additionalClasses)this._loadingElement.classList.add(a);const I=document.createElement("div"),i=30;I.style.display="flex",I.style.width=i+"%",I.style.height="2px",I.style.background="rgba(255,255,255,.2)",this._loadingElement.appendChild(I);const e=document.createElement("img"),C=64;e.style.width=`${C}px`,e.style.height=`${C}px`,e.style.position="absolute",e.style.left="50%",e.style.transform=`translate(-${C*.5}px, -${C+32}px)`,e.addEventListener("click",()=>window.open("https://needle.tools","_blank")),e.style.cursor="pointer",e.style.pointerEvents="all",e.src=yJ,I.appendChild(e),this._loadingBar=document.createElement("div"),I.appendChild(this._loadingBar);const o=function(a){return gg.lerp(i*.5,100-i*.5,a)+"%"};this._loadingBar.style.background=`linear-gradient(90deg, #02022B ${o(0)}, #0BA398 ${o(.4)}, #99CC33 ${o(.5)}, #D7DB0A ${o(1)})`,this._loadingBar.style.backgroundAttachment="fixed",this._loadingBar.style.width="0%",this._loadingBar.style.height="100%",this._loadingTextContainer=document.createElement("div"),this._loadingTextContainer.style.display="flex",this._loadingTextContainer.style.justifyContent="center",this._loadingTextContainer.style.marginTop="1.2em",this._loadingElement.appendChild(this._loadingTextContainer);const B=document.createElement("div");return this._messageContainer=B,B.style.display="flex",B.style.fontSize=".8em",B.style.paddingTop=".5em",B.style.color="rgba(255,255,255,.5)",B.style.fontWeight="200",B.style.fontFamily="Roboto, sans-serif",B.style.justifyContent="center",this._loadingElement.appendChild(B),this._loadingElement}};let md=Od;r(md,"LoadingContainerClassName","loading"),PR(s0);const Et=wA("debugwebcomponent"),GJ="needle-engine",kJ="vr",MJ="desktop",Jj=[fs,kJ,MJ],XE="ar-session-active",$E="desktop-session-active";class qj extends HTMLElement{constructor(){super();r(this,"gameObject",sA);r(this,"GameObject",sA);r(this,"_context");r(this,"_overlay_ar");r(this,"_loadingProgress01",0);r(this,"_loadingView");this._overlay_ar=new BO,this._context=new Ng({domElement:this})}get loadingProgress01(){return this._loadingProgress01}get loadingFinished(){return this.loadingProgress01>.999}get cameraControls(){const g=this.getAttribute("camera-controls");return!(g===null||g==="False"||g==="false"||g==="0")}getContext(){return new Promise((g,I)=>{if(this._context&&this.loadingFinished)g(this._context);else{const i=()=>{this.removeEventListener("loadfinished",i),this._context&&this.loadingFinished&&g(this._context)};this.addEventListener("loadfinished",i)}})}get context(){return this._context}get Context(){return this._context}async connectedCallback(){Et&&(console.log("<needle-engine> connected"),console.dir(this)),this.onSetupDesktop();const g=this.getAttribute("src");g&&g.length>0&&await this.onLoad(g,!0),this.onSetupDesktop()}disconnectedCallback(){var g;(g=this._context)==null||g.onDestroy()}static get observedAttributes(){return["hash","src","camera-controls","loadstart","progress","loadfinished","dracoDecoderPath","dracoDecoderType","ktx2DecoderPath"]}attributeChangedCallback(g,I,i){switch(g){case"src":Et&&console.log("src changed to type:",typeof i,', from "',I,'" to "',i),this.onLoad(i,!1);break;case"hash":this._context&&(this._context.hash=i);break;case"loadstart":case"progress":case"loadfinished":typeof i=="string"&&i.length>0&&(Et&&console.log(g+" attribute changed",i),this.registerEventFromAttribute(g,i));break;case"dracoDecoderPath":Et&&console.log("dracoDecoderPath",i),GF(i);break;case"dracoDecoderType":i==="wasm"||i==="js"?(Et&&console.log("dracoDecoderType",i),kF(i)):console.error("Invalid dracoDecoderType",i,"expected js or wasm");break;case"ktx2DecoderPath":Et&&console.log("ktx2DecoderPath",i),MF(i);break}}async onLoad(g,I){var n,a;if(!g||!g.length){console.error("Needle Engine: No source specified",g);return}if(!this._context){console.error("Needle Engine: Context not initialized");return}const i=this.getAttribute("alias");this.classList.add("loading"),Et&&console.log("Needle Engine: Begin loading",i??"");const e=!0,C=this.dispatchEvent(new CustomEvent("loadstart",{detail:{context:this._context,alias:i},cancelable:e}));!this._loadingView&&C&&(this._loadingView=new md(this)),C&&((n=this._loadingView)==null||n.onLoadingBegin("begin load")),this.onBeforeBeginLoading(),Et&&console.log(g);let o;g.startsWith("[")&&g.endsWith("]")?o=JSON.parse(g):o=[g];let B=null;if(typeof g=="string"&&(B=async Q=>{let E=0;Q.hash&&(E=Number.parseInt(Q.hash)??0);const c=aC();for(let h=0;h<o.length;h++){const l=o[h],w=Lj(l),p={name:w,progress:null,index:h,count:o.length},D={detail:{context:Q,name:w,progress:p.progress,index:h,count:o.length,totalProgress01:this._loadingProgress01}},d=await c.loadSync(Q,l,E,!1,y=>{var f;p.progress=y,this._loadingProgress01=fJ(p),C&&((f=this._loadingView)==null||f.onLoadingUpdate(p)),D.detail.progress=y,D.detail.totalProgress01=this._loadingProgress01,this.dispatchEvent(new CustomEvent("progress",D))}),u=d==null?void 0:d.scene;u&&sA.add(u,Q.scene,Q)}I||tr(Q)}),!B){console.error("Needle Engine: No load function found",g);return}const s=this.getAttribute("hash");s!=null&&(this._context.hash=s),this._context.alias=i,this._context.isCreated?await B(this._context):await this._context.onCreate(B),this._loadingProgress01=1,C&&((a=this._loadingView)==null||a.onLoadingFinished("creating scene")),this.classList.remove("loading"),this.classList.add("loading-finished"),Et&&console.log("Needle Engine: finished loading",i??""),this.dispatchEvent(new CustomEvent("loadfinished",{detail:{context:this._context,src:i??g}}))}registerEventFromAttribute(g,I){if(typeof I=="string"&&I.length>0){const i=(0,eval)(I);typeof i=="function"&&this.addEventListener(g,e=>i==null?void 0:i.call(globalThis,this._context,e))}}getAROverlayContainer(){return this._overlay_ar.findOrCreateARContainer(this)}getVROverlayContainer(){for(let g=0;g<this.children.length;g++){const I=this.children[g];if(I.classList.contains("vr"))return I}return null}onEnterAR(g,I){var i;this.onSetupAR(),this._overlay_ar.onBegin(this._context,I,g),this.dispatchEvent(new CustomEvent("enter-ar",{detail:{session:g,context:this._context,htmlContainer:(i=this._overlay_ar)==null?void 0:i.ARContainer}}))}onExitAR(g){var I;this._overlay_ar.onEnd(this._context),this.onSetupDesktop(),this.dispatchEvent(new CustomEvent("exit-ar",{detail:{session:g,context:this._context,htmlContainer:(I=this._overlay_ar)==null?void 0:I.ARContainer}}))}onEnterVR(g){this.onSetupVR(),this.dispatchEvent(new CustomEvent("enter-vr",{detail:{session:g,context:this._context}}))}onExitVR(g){this.onSetupDesktop(),this.dispatchEvent(new CustomEvent("exit-vr",{detail:{session:g,context:this._context}}))}onSetupAR(){this.classList.add(XE),this.classList.remove($E);const g=this.getAROverlayContainer();g&&(g.classList.add(XE),g.classList.remove($E)),this.foreachHtmlElement(I=>this.setupElementsForMode(I,fs))}onSetupVR(){this.classList.remove(XE),this.classList.remove($E),this.foreachHtmlElement(g=>this.setupElementsForMode(g,kJ))}onSetupDesktop(){this.classList.remove(XE),this.classList.add($E);const g=this.getAROverlayContainer();g&&(g.classList.remove(XE),g.classList.add($E)),this.foreachHtmlElement(I=>this.setupElementsForMode(I,MJ))}setupElementsForMode(g,I,i=null){var C;if(g===((C=this._context)==null?void 0:C.renderer.domElement)||g.id==="VRButton"||g.id==="ARButton")return;if(g.style.position="absolute",g.classList.contains(I))g.style.visibility="visible",g.style.display==="none"&&(g.style.display="block");else for(const o of Jj)g.classList.contains(o)&&(g.style.visibility="hidden",g.style.display="none")}foreachHtmlElement(g){for(let I=0;I<this.children.length;I++){const i=this.children[I];i.style&&g(i)}}onBeforeBeginLoading(){const g=this.getAttribute("dracoDecoderPath");g&&(Et&&console.log("using custom draco decoder path",g),GF(g));const I=this.getAttribute("dracoDecoderType");I&&(Et&&console.log("using custom draco decoder type",I),kF(I));const i=this.getAttribute("ktx2DecoderPath");i&&(Et&&console.log("using custom ktx2 decoder path",i),MF(i))}}window.customElements.get(GJ)||window.customElements.define(GJ,qj);function Lj(t){const A=t.split("/");let g=A[A.length-1],I=g.indexOf("?");return I>0&&(g=g.substring(0,I)),g}mi.registerCallback(KC.MissingCamera,t=>{const A=t.context.scene,g="unknown",I=new LA;A.add(I);const i=new UI,e=Vo(I,i,!0);return e.sourceId=g,e.clearFlags=2,e.backgroundColor=new rI(.5,.5,.5,1),I.position.x=-2,I.position.y=2,I.position.z=2,e}),mi.registerCallback(KC.ContextCreated,t=>{if(!t.context.mainCamera)return;const A=t.context.domElement;if((A==null?void 0:A.cameraControls)===!0){const g=x1(t.context.mainCamera);if((g==null?void 0:g.isCameraController)===!0)return;const I=t.context.mainCameraComponent,i=I==null?void 0:I.gameObject;if(i){const e=Vo(i,new uB,!1);e.sourceId="unknown"}else console.warn("Missing camera object, can not add orbit controls")}});const RC=wA("debuglicense");let Nd=null,a0=null;try{a0=Promise.resolve().then(()=>_j),a0.then(t=>{Nd=t.default,a0=null,RC&&console.log("License imported via dynamic import",Nd)}).catch(t=>{RC&&console.error("Error on dynamic license import",t)})}catch(t){RC&&console.log("Importing license failed",t)}mi.registerCallback(KC.ContextCreated,t=>{bj(t.context)});async function bj(t){try{if(!Nd||Nd.hasLicense!==!0||RC)return r0(t)}catch(A){return RC&&console.log("License check failed",A),r0(t)}RC&&r0(t)}const Yj='🌵 <span class="text">Made with <a href="https://needle.tools" target="_blank">Needle</a></span>',UJ="needle-license-element",RJ=3e4,FJ=600;function r0(t){xj(t),Oj()}function xj(t){let A=Yj;const g=vj();g.innerHTML=A;const I=Tj(),i=setInterval(()=>{g&&g.parentElement!==t.domElement&&(t.domElement.appendChild(g),I&&t.domElement.appendChild(I))},100);Hj();let e=`<img class="logo" src="${yJ}" style="width: 40px; height: 40px; margin-right: 2px; vertical-align: middle; margin-bottom: 2px;"/>`;e='<a href="https://needle.tools" target="_blank">'+e+"</a>",A=e,g.innerHTML=A;const C=RJ+FJ;setTimeout(()=>{clearInterval(i),g==null||g.remove(),I==null||I.remove()},C)}async function Hj(t){const g=`
4275
+ <a href="https://engine.needle.tools/docs/project_structure.html#creating-and-installing-a-npmdef" target="_blank">documentation</a>`,JC.Warn)}}if(A.children)for(const e of A.children)await B0(t,e,g)}function Mj(t,A){const{instance:g,compData:I,obj:i}=t;A.object=i,A.target=g,fp(g,I,A),hJ&&console.debug("add "+I.name,I,g)}class s0{createBuiltinComponents(A,g,I,i,e){return kj(A,g,I,i,e)}writeBuiltinComponentData(A,g){return fj(A,g)}parseSync(A,g,I,i){return dJ(A,g,I,i)}loadSync(A,g,I,i,e){return wJ(A,g,I,i,e)}}PR(s0);const Uj=wA("printGltf");var lJ=(t=>(t[t.BeforeLoad=0]="BeforeLoad",t[t.AfterLoaded=1]="AfterLoaded",t[t.FinishedSetup=10]="FinishedSetup",t))(lJ||{});class on{constructor(A,g,I,i){r(this,"context");r(this,"loader");r(this,"path");r(this,"gltf");this.context=A,this.path=g,this.loader=I,this.gltf=i}}const KB={};function Rj(t,A){KB[t]=KB[t]||[],KB[t].push(A)}function Fj(t,A){if(KB[t]){const g=KB[t].indexOf(A);g>=0&&KB[t].splice(g,1)}}function ga(t,A){if(KB[t])for(const g of KB[t])g(A)}async function DJ(t,A,g,I,i){Uj&&console.log(g),await t.assets.registerGltf(g),await aC().createBuiltinComponents(t,A,g,I,i)}function n0(t,A){const g=new nQ;return Y_(g,A,t),g}function dJ(t,A,g,I){typeof g!="string"&&console.warn("Parse gltf binary without path, this might lead to errors in resolving extensions. Please provide the source path of the gltf/glb file",g,typeof g);const i=n0(g,t),e=um(i);return new Promise((C,o)=>{try{Jr(i,t),ga(0,new on(t,g,i)),i.parse(A,g,async B=>{ga(1,new on(t,g,i,B)),await DJ(t,g,B,I,e),ga(10,new on(t,g,i,B)),cU(B.scene,t),C(B)},B=>{console.error("failed loading "+g,B),C(void 0)})}catch(B){console.error(B),o(B)}})}function wJ(t,A,g,I=!1,i){const e=n0(A,t),C=um(e);return new Promise((o,B)=>{try{Jr(e,t),ga(0,new on(t,A,e)),e.load(A,async s=>{ga(1,new on(t,A,e,s)),await DJ(t,A,s,g,C),ga(10,new on(t,A,e,s)),cU(s.scene,t),o(s)},s=>{i==null||i.call(e,s)},s=>{console.error("failed loading "+A,s),o(void 0)})}catch(s){console.error(s),B(s)}})}function mj(t,A,g,I=!1){A&&A.animations&&A.animations.length>0&&g.push(()=>{uJ(A,I)})}function uJ(t,A=!1){if(!t||!t.animations||!t.scene||!A&&!AQ(t.scene,Kt))return;for(let I=0;I<t.animations.length;I++){const i=t.animations[I];if(!(!i.tracks||i.tracks.length<=0))for(const e in i.tracks){const C=i.tracks[e],o=C.__objectName??C.name.substring(0,C.name.indexOf(".")),B=t.scene.getObjectByName(o);if(!B)continue;let s=g(B);if(!s)if(A)s=Vo(t.scene,new Kt);else{console.warn("Failed finding animator for",C.name,o);continue}const n=s.animations=s.animations||[];i.name_animator=s.name,n.indexOf(i)<0&&n.push(i)}}function g(I){var e;if(!I)return;const i=(e=I.userData)==null?void 0:e.components;if(i&&i.length>0)for(let C=0;C<i.length;C++){const o=i[C];if(o instanceof xe||o instanceof Kt)return I}return g(I.parent)}}function pJ(t,A,g=!0){if(A.userData&&A.userData.name===t)return A;if(A.children&&A.children.length>0)for(let I=0;I<A.children.length;I++){const i=A.children[I],e=pJ(t,i,g);if(e)return e}}function Nj(t,A,g=!0){return nn(t,A,g)}function Kj(t,A=null){const g=A??Ng.Current.scripts;for(const I in g){const i=g[I];if(i&&i.guid===t)return i}return null}Object.defineProperty(zg.prototype,"fov",{get:function(){return this._fov},set:function(t){const A=t!==this._fov;this._fov=t,A&&this.view!==void 0&&this.updateProjectionMatrix()}}),Object.defineProperty(zg.prototype,"near",{get:function(){return this._near},set:function(t){const A=t!==this._near;this._near=t,A&&this.view!==void 0&&this.updateProjectionMatrix()}}),Object.defineProperty(zg.prototype,"far",{get:function(){return this._far},set:function(t){const A=t!==this._far;this._far=t,A&&this.view!==void 0&&this.updateProjectionMatrix()}});const yJ="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIGlkPSJFYmVuZV8zIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMTYwIDE4Ny43NCI+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOnVybCgjVW5iZW5hbm50ZXJfVmVybGF1Zl8xMjIpO30uY2xzLTJ7ZmlsbDojZjNlNjAwO30uY2xzLTN7ZmlsbDp1cmwoI1VuYmVuYW5udGVyX1ZlcmxhdWZfMTEzKTt9LmNscy00e2ZpbGw6dXJsKCNncmFkaWVudC02KTt9LmNscy01e2ZpbGw6dXJsKCNVbmJlbmFubnRlcl9WZXJsYXVmXzExMCk7fS5jbHMtNntmaWxsOnVybCgjVW5iZW5hbm50ZXJfVmVybGF1Zl8xMDEpO30uY2xzLTd7ZmlsbDojOWMzO30uY2xzLTh7ZmlsbDojZmZlMTEzO30uY2xzLTl7ZmlsbDp1cmwoI2dyYWRpZW50LTUpO308L3N0eWxlPjxsaW5lYXJHcmFkaWVudCBpZD0iVW5iZW5hbm50ZXJfVmVybGF1Zl8xMTMiIHgxPSI4OS42NCIgeTE9IjE4NC44MSIgeDI9IjkwLjQ4IiB5Mj0iMjEuODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSwgMCwgMCwgMSwgMCwgMCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MmQzOTkiLz48c3RvcCBvZmZzZXQ9Ii41MSIgc3RvcC1jb2xvcj0iI2FjZDg0MiIvPjxzdG9wIG9mZnNldD0iLjkiIHN0b3AtY29sb3I9IiNkN2RiMGEiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iVW5iZW5hbm50ZXJfVmVybGF1Zl8xMTAiIHgxPSI2OS42OCIgeTE9IjE3OC45IiB4Mj0iNjguMDgiIHkyPSIxNi43NyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAxLCAwLCAwKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzBiYTM5OCIvPjxzdG9wIG9mZnNldD0iLjUiIHN0b3AtY29sb3I9IiM0Y2EzNTIiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM3NmEzMGEiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iVW5iZW5hbm50ZXJfVmVybGF1Zl8xMDEiIHgxPSIzNi42IiB5MT0iMTUyLjE3IiB4Mj0iMzQuNyIgeTI9Ijg0LjE5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEsIDAsIDAsIDEsIDAsIDApIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIuMTkiIHN0b3AtY29sb3I9IiMzNmEzODIiLz48c3RvcCBvZmZzZXQ9Ii41NCIgc3RvcC1jb2xvcj0iIzQ5YTQ1OSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzc2YTMwYiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJVbmJlbmFubnRlcl9WZXJsYXVmXzEyMiIgeDE9IjE1LjgyIiB5MT0iMTUzLjI0IiB4Mj0iMTgiIHkyPSI5MC44NiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAxLCAwLCAwKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzI2Nzg4MCIvPjxzdG9wIG9mZnNldD0iLjUxIiBzdG9wLWNvbG9yPSIjNDU3YTVjIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNzE3NTE2Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImdyYWRpZW50LTYiIHgxPSIxMzUuMDgiIHkxPSIxMzUuNDMiIHgyPSIxNDguOTMiIHkyPSI2My40NyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAxLCAwLCAwKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2IwZDkzOSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2VhZGIwNCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkaWVudC01IiB4MT0iLTQxNjMuMjUiIHkxPSIyMjg1LjEyIiB4Mj0iLTQxNjAuODEiIHkyPSIyMjE1LjM0IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MDEuMTUgLTU5NS4yNSkgcm90YXRlKDIwKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjE3IiBzdG9wLWNvbG9yPSIjNzRhZjUyIi8+PHN0b3Agb2Zmc2V0PSIuNDgiIHN0b3AtY29sb3I9IiM5OWJlMzIiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNjMGM0MGEiLz48L2xpbmVhckdyYWRpZW50PjxzeW1ib2wgaWQ9Im5lZWRsZS1pY29uIiB2aWV3Qm94PSIwIDAgMTYwIDE4Ny43NCI+PGc+PHBvbHlnb24gY2xhc3M9ImNscy0zIiBwb2ludHM9Ijc5LjMyIDM2Ljk4IDc5LjMyIDE4Ny43NCA5NSAxNzQuNTQgMTAxLjU5IDE4LjIzIDc5LjMyIDM2Ljk4Ii8+PHBvbHlnb24gY2xhc3M9ImNscy01IiBwb2ludHM9Ijc5LjMyIDM2Ljk4IDU3LjA1IDE4LjIzIDYzLjY0IDE3NC41NCA3OS4zMiAxODcuNzQgNzkuMzIgMzYuOTgiLz48cG9seWdvbiBjbGFzcz0iY2xzLTYiIHBvaW50cz0iMjUuMTkgMTA0LjgzIDMzLjgyIDE1My44NyA0Ni4zMiAxMzguOTIgNDMuODYgODIuNSAyNS4xOSAxMDQuODMiLz48cG9seWdvbiBjbGFzcz0iY2xzLTEiIHBvaW50cz0iMjUuMTkgMTA0LjgzIDAgOTAuMjQgMTYuOTcgMTQ0LjEgMzMuODIgMTUzLjg3IDI1LjE5IDEwNC44MyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtNyIgcG9pbnRzPSI0My44NiA4Mi41IDE4LjY5IDY3Ljk4IDAgOTAuMjQgMjUuMTggMTA0LjgzIDQzLjg2IDgyLjUiLz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iMTM0LjgyIDc4LjY5IDEyNC44NSAxMzUuMTkgMTQwLjQzIDEyNi4xNSAxNjAgNjQuMSAxMzQuODIgNzguNjkiLz48cG9seWdvbiBjbGFzcz0iY2xzLTkiIHBvaW50cz0iMTM0LjgyIDc4LjY5IDExNi4xNCA1Ni4zNiAxMTMuMjggMTIxLjM2IDEyNC44NSAxMzUuMTkgMTM0LjgyIDc4LjY5Ii8+PHBvbHlnb24gY2xhc3M9ImNscy04IiBwb2ludHM9IjE2MCA2NC4xIDE0MS4zMSA0MS44NCAxMTYuMTQgNTYuMzYgMTM0LjgxIDc4LjY5IDE2MCA2NC4xIi8+PHBvbHlnb24gY2xhc3M9ImNscy0yIiBwb2ludHM9IjEwMS41OSAxOC4yMyA3OS4zMiAwIDU3LjA1IDE4LjIzIDc5LjMyIDM2Ljk4IDEwMS41OSAxOC4yMyIvPjwvZz48L3N5bWJvbD48L2RlZnM+PHVzZSB3aWR0aD0iMTYwIiBoZWlnaHQ9IjE4Ny43NCIgeGxpbms6aHJlZj0iI25lZWRsZS1pY29uIi8+PC9zdmc+",Ia=wA("debugloadingbar"),Q0=wA("debugloadingbarrendering");let zE=0,SJ;function fJ(t){Ia&&console.log(t.progress.loaded.toFixed(0)+"/"+t.progress.total.toFixed(0),t);const A=t.count,g=t.progress.total;g===0||g===void 0?(SJ!==t.name&&(zE=0),SJ=t.name,zE+=(1-zE)*.001,Ia&&Qs("Loading "+t.name+" did not report total size")):zE=t.progress.loaded/g;const I=t.index/A+zE/A;return gg.clamp01(I)}const Od=class{constructor(A,g){r(this,"loadingProgress",0);r(this,"container");r(this,"_progress",0);r(this,"_allowCustomLoadingElement",!0);r(this,"_loadingElement");r(this,"_loadingTextContainer",null);r(this,"_loadingBar",null);r(this,"_messageContainer",null);r(this,"_loadingElementOptions");r(this,"_progressLoop");this.container=A,this._loadingElementOptions=g}onLoadingBegin(A){if(Ia&&console.log("Begin Loading"),!this._loadingElement){for(let g=0;g<this.container.children.length;g++){const I=this.container.children[g];if(I.classList.contains(Od.LoadingContainerClassName)){if(!this._allowCustomLoadingElement){Ia&&console.warn("Remove custom loading container"),this.container.removeChild(I);continue}this._loadingElement=this.createLoadingElement(I)}}this._loadingElement||(this._loadingElement=this.createLoadingElement())}this._progress=0,this.loadingProgress=0,this._loadingElement.style.display="flex",this.container.appendChild(this._loadingElement),this.smoothProgressLoop(),this.setMessage(A??"")}onLoadingUpdate(A,g){var i;(i=this._loadingElement)!=null&&i.parentElement||this.onLoadingBegin(g);let I=0;typeof A=="number"?I=A:("index"in A&&(I=fJ(A)),!g&&"name"in A&&this.setMessage("loading "+A.name)),this.loadingProgress=I,g&&this.setMessage(g),this.updateDisplay()}onLoadingFinished(A){this.loadingProgress=1,this.setMessage(A??"")}setMessage(A){this._messageContainer&&(this._messageContainer.innerText=A)}smoothProgressLoop(){if(this._progressLoop)return;let A=1/12;const g=1-.05;Q0&&(A=1/500,typeof Q0=="number"&&(A*=Q0)),this._progressLoop=setInterval(()=>{if(this.loadingProgress>=1&&this._progress>=g){this._loadingElement&&(Ia&&console.log("Hiding loading element"),this._loadingElement.style.display="none",this._loadingElement.remove()),clearInterval(this._progressLoop),this._progressLoop=null;return}this._progress=gg.lerp(this._progress,this.loadingProgress,A*this.loadingProgress),this.updateDisplay()},A)}updateDisplay(){const A=this._progress,g=(A*100).toFixed(0)+"%";this._loadingBar&&(this._loadingBar.style.width=A*100+"%"),this._loadingTextContainer&&(this._loadingTextContainer.textContent=g)}createLoadingElement(A){var s,n;Ia&&!A&&console.log("Creating loading element"),this._loadingElement=A||document.createElement("div"),A||(this._loadingElement.style.position="fixed",this._loadingElement.style.width="100%",this._loadingElement.style.height="100%",this._loadingElement.style.left="0",this._loadingElement.style.top="0",this._loadingElement.style.backgroundColor="#000000",this._loadingElement.style.display="flex",this._loadingElement.style.alignItems="center",this._loadingElement.style.justifyContent="center",this._loadingElement.style.zIndex="1000",this._loadingElement.style.flexDirection="column",this._loadingElement.style.pointerEvents="none",this._loadingElement.style.color="white");const g=((s=this._loadingElementOptions)==null?void 0:s.className)??Od.LoadingContainerClassName;if(this._loadingElement.classList.add(g),(n=this._loadingElementOptions)!=null&&n.additionalClasses)for(const a of this._loadingElementOptions.additionalClasses)this._loadingElement.classList.add(a);const I=document.createElement("div"),i=30;I.style.display="flex",I.style.width=i+"%",I.style.height="2px",I.style.background="rgba(255,255,255,.2)",this._loadingElement.appendChild(I);const e=document.createElement("img"),C=64;e.style.width=`${C}px`,e.style.height=`${C}px`,e.style.position="absolute",e.style.left="50%",e.style.transform=`translate(-${C*.5}px, -${C+32}px)`,e.addEventListener("click",()=>window.open("https://needle.tools","_blank")),e.style.cursor="pointer",e.style.pointerEvents="all",e.src=yJ,I.appendChild(e),this._loadingBar=document.createElement("div"),I.appendChild(this._loadingBar);const o=function(a){return gg.lerp(i*.5,100-i*.5,a)+"%"};this._loadingBar.style.background=`linear-gradient(90deg, #02022B ${o(0)}, #0BA398 ${o(.4)}, #99CC33 ${o(.5)}, #D7DB0A ${o(1)})`,this._loadingBar.style.backgroundAttachment="fixed",this._loadingBar.style.width="0%",this._loadingBar.style.height="100%",this._loadingTextContainer=document.createElement("div"),this._loadingTextContainer.style.display="flex",this._loadingTextContainer.style.justifyContent="center",this._loadingTextContainer.style.marginTop="1.2em",this._loadingElement.appendChild(this._loadingTextContainer);const B=document.createElement("div");return this._messageContainer=B,B.style.display="flex",B.style.fontSize=".8em",B.style.paddingTop=".5em",B.style.color="rgba(255,255,255,.5)",B.style.fontWeight="200",B.style.fontFamily="Roboto, sans-serif",B.style.justifyContent="center",this._loadingElement.appendChild(B),this._loadingElement}};let md=Od;r(md,"LoadingContainerClassName","loading"),PR(s0);const Et=wA("debugwebcomponent"),GJ="needle-engine",kJ="vr",MJ="desktop",Jj=[fs,kJ,MJ],XE="ar-session-active",$E="desktop-session-active";class qj extends HTMLElement{constructor(){super();r(this,"gameObject",sA);r(this,"GameObject",sA);r(this,"_context");r(this,"_overlay_ar");r(this,"_loadingProgress01",0);r(this,"_loadingView");r(this,"_previousSrc",null);r(this,"_isCurrentlySettingsSourceAttribute",!1);this._overlay_ar=new BO,this._context=new Ng({domElement:this})}get loadingProgress01(){return this._loadingProgress01}get loadingFinished(){return this.loadingProgress01>.999}get cameraControls(){const g=this.getAttribute("camera-controls");return!(g===null||g==="False"||g==="false"||g==="0")}getContext(){return new Promise((g,I)=>{if(this._context&&this.loadingFinished)g(this._context);else{const i=()=>{this.removeEventListener("loadfinished",i),this._context&&this.loadingFinished&&g(this._context)};this.addEventListener("loadfinished",i)}})}get context(){return this._context}get Context(){return this._context}async connectedCallback(){Et&&(console.log("<needle-engine> connected"),console.dir(this)),this.onSetupDesktop();const g=this.getAttribute("src")??globalThis["needle:codegen_files"];g&&g.length>0&&await this.onLoad(g,!0),this.onSetupDesktop()}disconnectedCallback(){var g;(g=this._context)==null||g.onDestroy()}static get observedAttributes(){return["hash","src","camera-controls","loadstart","progress","loadfinished","dracoDecoderPath","dracoDecoderType","ktx2DecoderPath"]}attributeChangedCallback(g,I,i){switch(g){case"src":Et&&console.log("src changed to type:",typeof i,', from "',I,'" to "',i),this.onLoad(i,!1);break;case"hash":this._context&&(this._context.hash=i);break;case"loadstart":case"progress":case"loadfinished":typeof i=="string"&&i.length>0&&(Et&&console.log(g+" attribute changed",i),this.registerEventFromAttribute(g,i));break;case"dracoDecoderPath":Et&&console.log("dracoDecoderPath",i),GF(i);break;case"dracoDecoderType":i==="wasm"||i==="js"?(Et&&console.log("dracoDecoderType",i),kF(i)):console.error("Invalid dracoDecoderType",i,"expected js or wasm");break;case"ktx2DecoderPath":Et&&console.log("ktx2DecoderPath",i),MF(i);break}}async onLoad(g,I){var n,a;if(this._isCurrentlySettingsSourceAttribute||g===this._previousSrc)return;if(!g||!g.length){console.error("Needle Engine: No source specified",g);return}if(!this._context){console.error("Needle Engine: Context not initialized");return}this._previousSrc=g,this._isCurrentlySettingsSourceAttribute=!0,this.setAttribute("src",g==null?void 0:g.toString()),this._isCurrentlySettingsSourceAttribute=!1;const i=this.getAttribute("alias");this.classList.add("loading"),Et&&console.log("Needle Engine: Begin loading",i??"");const e=!0,C=this.dispatchEvent(new CustomEvent("loadstart",{detail:{context:this._context,alias:i},cancelable:e}));!this._loadingView&&C&&(this._loadingView=new md(this)),C&&((n=this._loadingView)==null||n.onLoadingBegin("begin load")),this.onBeforeBeginLoading(),Et&&console.log(g);let o;Array.isArray(g)?o=g:g.startsWith("[")&&g.endsWith("]")?o=JSON.parse(g):g.includes(",")?o=g.split(","):o=[g];let B=null;if((o==null?void 0:o.length)>0&&(B=async Q=>{let E=0;Q.hash&&(E=Number.parseInt(Q.hash)??0);const c=aC();for(let h=0;h<o.length;h++){const l=o[h],w=Lj(l),p={name:w,progress:null,index:h,count:o.length},D={detail:{context:Q,name:w,progress:p.progress,index:h,count:o.length,totalProgress01:this._loadingProgress01}},d=await c.loadSync(Q,l,E,!1,y=>{var f;p.progress=y,this._loadingProgress01=fJ(p),C&&((f=this._loadingView)==null||f.onLoadingUpdate(p)),D.detail.progress=y,D.detail.totalProgress01=this._loadingProgress01,this.dispatchEvent(new CustomEvent("progress",D))}),u=d==null?void 0:d.scene;u&&sA.add(u,Q.scene,Q)}I||tr(Q)}),!B){console.error("Needle Engine: No files to load",g);return}const s=this.getAttribute("hash");s!=null&&(this._context.hash=s),this._context.alias=i,this._context.isCreated?await B(this._context):await this._context.onCreate(B),this._loadingProgress01=1,C&&((a=this._loadingView)==null||a.onLoadingFinished("creating scene")),this.classList.remove("loading"),this.classList.add("loading-finished"),Et&&console.log("Needle Engine: finished loading",i??""),this.dispatchEvent(new CustomEvent("loadfinished",{detail:{context:this._context,src:i??g}}))}registerEventFromAttribute(g,I){if(typeof I=="string"&&I.length>0){const i=(0,eval)(I);typeof i=="function"&&this.addEventListener(g,e=>i==null?void 0:i.call(globalThis,this._context,e))}}getAROverlayContainer(){return this._overlay_ar.findOrCreateARContainer(this)}getVROverlayContainer(){for(let g=0;g<this.children.length;g++){const I=this.children[g];if(I.classList.contains("vr"))return I}return null}onEnterAR(g,I){var i;this.onSetupAR(),this._overlay_ar.onBegin(this._context,I,g),this.dispatchEvent(new CustomEvent("enter-ar",{detail:{session:g,context:this._context,htmlContainer:(i=this._overlay_ar)==null?void 0:i.ARContainer}}))}onExitAR(g){var I;this._overlay_ar.onEnd(this._context),this.onSetupDesktop(),this.dispatchEvent(new CustomEvent("exit-ar",{detail:{session:g,context:this._context,htmlContainer:(I=this._overlay_ar)==null?void 0:I.ARContainer}}))}onEnterVR(g){this.onSetupVR(),this.dispatchEvent(new CustomEvent("enter-vr",{detail:{session:g,context:this._context}}))}onExitVR(g){this.onSetupDesktop(),this.dispatchEvent(new CustomEvent("exit-vr",{detail:{session:g,context:this._context}}))}onSetupAR(){this.classList.add(XE),this.classList.remove($E);const g=this.getAROverlayContainer();g&&(g.classList.add(XE),g.classList.remove($E)),this.foreachHtmlElement(I=>this.setupElementsForMode(I,fs))}onSetupVR(){this.classList.remove(XE),this.classList.remove($E),this.foreachHtmlElement(g=>this.setupElementsForMode(g,kJ))}onSetupDesktop(){this.classList.remove(XE),this.classList.add($E);const g=this.getAROverlayContainer();g&&(g.classList.remove(XE),g.classList.add($E)),this.foreachHtmlElement(I=>this.setupElementsForMode(I,MJ))}setupElementsForMode(g,I,i=null){var C;if(g===((C=this._context)==null?void 0:C.renderer.domElement)||g.id==="VRButton"||g.id==="ARButton")return;if(g.style.position="absolute",g.classList.contains(I))g.style.visibility="visible",g.style.display==="none"&&(g.style.display="block");else for(const o of Jj)g.classList.contains(o)&&(g.style.visibility="hidden",g.style.display="none")}foreachHtmlElement(g){for(let I=0;I<this.children.length;I++){const i=this.children[I];i.style&&g(i)}}onBeforeBeginLoading(){const g=this.getAttribute("dracoDecoderPath");g&&(Et&&console.log("using custom draco decoder path",g),GF(g));const I=this.getAttribute("dracoDecoderType");I&&(Et&&console.log("using custom draco decoder type",I),kF(I));const i=this.getAttribute("ktx2DecoderPath");i&&(Et&&console.log("using custom ktx2 decoder path",i),MF(i))}}window.customElements.get(GJ)||window.customElements.define(GJ,qj);function Lj(t){const A=t.split("/");let g=A[A.length-1],I=g.indexOf("?");return I>0&&(g=g.substring(0,I)),g}mi.registerCallback(KC.MissingCamera,t=>{const A=t.context.scene,g="unknown",I=new LA;A.add(I);const i=new UI,e=Vo(I,i,!0);return e.sourceId=g,e.clearFlags=2,e.backgroundColor=new rI(.5,.5,.5,1),I.position.x=-2,I.position.y=2,I.position.z=2,e}),mi.registerCallback(KC.ContextCreated,t=>{if(!t.context.mainCamera)return;const A=t.context.domElement;if((A==null?void 0:A.cameraControls)===!0){const g=x1(t.context.mainCamera);if((g==null?void 0:g.isCameraController)===!0)return;const I=t.context.mainCameraComponent,i=I==null?void 0:I.gameObject;if(i){const e=Vo(i,new uB,!1);e.sourceId="unknown"}else console.warn("Missing camera object, can not add orbit controls")}});const RC=wA("debuglicense");let Nd=null,a0=null;try{a0=Promise.resolve().then(()=>_j),a0.then(t=>{Nd=t.default,a0=null,RC&&console.log("License imported via dynamic import",Nd)}).catch(t=>{RC&&console.error("Error on dynamic license import",t)})}catch(t){RC&&console.log("Importing license failed",t)}mi.registerCallback(KC.ContextCreated,t=>{bj(t.context)});async function bj(t){try{if(!Nd||Nd.hasLicense!==!0||RC)return r0(t)}catch(A){return RC&&console.log("License check failed",A),r0(t)}RC&&r0(t)}const Yj='🌵 <span class="text">Made with <a href="https://needle.tools" target="_blank">Needle</a></span>',UJ="needle-license-element",RJ=3e4,FJ=600;function r0(t){xj(t),Oj()}function xj(t){let A=Yj;const g=vj();g.innerHTML=A;const I=Tj(),i=setInterval(()=>{g&&g.parentElement!==t.domElement&&(t.domElement.appendChild(g),I&&t.domElement.appendChild(I))},100);Hj();let e=`<img class="logo" src="${yJ}" style="width: 40px; height: 40px; margin-right: 2px; vertical-align: middle; margin-bottom: 2px;"/>`;e='<a href="https://needle.tools" target="_blank">'+e+"</a>",A=e,g.innerHTML=A;const C=RJ+FJ;setTimeout(()=>{clearInterval(i),g==null||g.remove(),I==null||I.remove()},C)}async function Hj(t){const g=`
4276
4276
  font-size:18px;
4277
4277
  background-size: contain;
4278
4278
  background-position: left center;
@@ -17,11 +17,13 @@ export declare class EngineElement extends HTMLElement implements INeedleEngineC
17
17
  private _overlay_ar;
18
18
  private _loadingProgress01;
19
19
  private _loadingView?;
20
+ private _previousSrc;
20
21
  constructor();
21
22
  connectedCallback(): Promise<void>;
22
23
  disconnectedCallback(): void;
23
24
  static get observedAttributes(): string[];
24
25
  attributeChangedCallback(name: string, _oldValue: string, newValue: string): void;
26
+ private _isCurrentlySettingsSourceAttribute;
25
27
  private onLoad;
26
28
  private registerEventFromAttribute;
27
29
  getAROverlayContainer(): HTMLElement;
@@ -54,6 +54,7 @@ export class EngineElement extends HTMLElement {
54
54
  _overlay_ar;
55
55
  _loadingProgress01 = 0;
56
56
  _loadingView;
57
+ _previousSrc = null;
57
58
  constructor() {
58
59
  super();
59
60
  this._overlay_ar = new AROverlayHandler();
@@ -65,7 +66,7 @@ export class EngineElement extends HTMLElement {
65
66
  console.dir(this);
66
67
  }
67
68
  this.onSetupDesktop();
68
- const src = this.getAttribute("src");
69
+ const src = this.getAttribute("src") ?? globalThis["needle:codegen_files"];
69
70
  if (src && src.length > 0) {
70
71
  await this.onLoad(src, true);
71
72
  }
@@ -131,7 +132,14 @@ export class EngineElement extends HTMLElement {
131
132
  break;
132
133
  }
133
134
  }
135
+ _isCurrentlySettingsSourceAttribute = false;
134
136
  async onLoad(src, isStartup) {
137
+ if (this._isCurrentlySettingsSourceAttribute) {
138
+ return;
139
+ }
140
+ if (src === this._previousSrc) {
141
+ return;
142
+ }
135
143
  if (!src || !src.length) {
136
144
  console.error("Needle Engine: No source specified", src);
137
145
  return;
@@ -140,6 +148,11 @@ export class EngineElement extends HTMLElement {
140
148
  console.error("Needle Engine: Context not initialized");
141
149
  return;
142
150
  }
151
+ this._previousSrc = src;
152
+ // Set the source attribute so codegen doesnt try to re-assign it again and we communicate to the outside which root files are being loaded
153
+ this._isCurrentlySettingsSourceAttribute = true;
154
+ this.setAttribute("src", src?.toString());
155
+ this._isCurrentlySettingsSourceAttribute = false;
143
156
  const alias = this.getAttribute("alias");
144
157
  this.classList.add("loading");
145
158
  if (debug)
@@ -162,13 +175,22 @@ export class EngineElement extends HTMLElement {
162
175
  if (debug)
163
176
  console.log(src);
164
177
  let filesToLoad;
165
- if (src.startsWith("[") && src.endsWith("]")) {
178
+ // When using globalThis the src is an array already
179
+ if (Array.isArray(src)) {
180
+ filesToLoad = src;
181
+ }
182
+ // When assigned from codegen the src is a stringified array
183
+ else if (src.startsWith("[") && src.endsWith("]")) {
166
184
  filesToLoad = JSON.parse(src);
167
185
  }
186
+ // src.toString for an array produces a comma separated list
187
+ else if (src.includes(",")) {
188
+ filesToLoad = src.split(",");
189
+ }
168
190
  else
169
191
  filesToLoad = [src];
170
192
  let loadFunction = null;
171
- if (typeof src === "string") {
193
+ if (filesToLoad?.length > 0) {
172
194
  loadFunction = async (ctx) => {
173
195
  let hash = 0;
174
196
  if (ctx.hash)
@@ -214,7 +236,7 @@ export class EngineElement extends HTMLElement {
214
236
  };
215
237
  }
216
238
  if (!loadFunction) {
217
- console.error("Needle Engine: No load function found", src);
239
+ console.error("Needle Engine: No files to load", src);
218
240
  return;
219
241
  }
220
242
  const currentHash = this.getAttribute("hash");
@@ -1 +1 @@
1
- {"version":3,"file":"engine_element.js","sourceRoot":"","sources":["../../../src/engine/engine_element.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine_element.js","sourceRoot":"","sources":["../../../src/engine/engine_element.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@needle-tools/engine",
3
- "version": "2.65.0-pre",
3
+ "version": "2.65.0-pre.1",
4
4
  "description": "Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development, and can be deployed anywhere. It is flexible, extensible, and collaboration and XR come naturally.",
5
5
  "main": "dist/needle-engine.umd.cjs",
6
6
  "module": "lib/needle-engine.js",
@@ -63,6 +63,7 @@ export class EngineElement extends HTMLElement implements INeedleEngineComponent
63
63
  private _overlay_ar: AROverlayHandler;
64
64
  private _loadingProgress01: number = 0;
65
65
  private _loadingView?: ILoadingViewHandler;
66
+ private _previousSrc: string | null | string[] = null;
66
67
 
67
68
  constructor() {
68
69
  super();
@@ -77,7 +78,7 @@ export class EngineElement extends HTMLElement implements INeedleEngineComponent
77
78
  }
78
79
 
79
80
  this.onSetupDesktop();
80
- const src = this.getAttribute("src");
81
+ const src = this.getAttribute("src") ?? globalThis["needle:codegen_files"];
81
82
  if (src && src.length > 0) {
82
83
  await this.onLoad(src, true);
83
84
  }
@@ -141,7 +142,15 @@ export class EngineElement extends HTMLElement implements INeedleEngineComponent
141
142
  }
142
143
  }
143
144
 
144
- private async onLoad(src: string | null, isStartup: boolean) {
145
+ private _isCurrentlySettingsSourceAttribute = false;
146
+
147
+ private async onLoad(src: string | null | string[], isStartup: boolean) {
148
+ if (this._isCurrentlySettingsSourceAttribute) {
149
+ return;
150
+ }
151
+ if (src === this._previousSrc) {
152
+ return;
153
+ }
145
154
  if (!src || !src.length) {
146
155
  console.error("Needle Engine: No source specified", src);
147
156
  return;
@@ -150,6 +159,14 @@ export class EngineElement extends HTMLElement implements INeedleEngineComponent
150
159
  console.error("Needle Engine: Context not initialized");
151
160
  return;
152
161
  }
162
+
163
+ this._previousSrc = src;
164
+
165
+ // Set the source attribute so codegen doesnt try to re-assign it again and we communicate to the outside which root files are being loaded
166
+ this._isCurrentlySettingsSourceAttribute = true;
167
+ this.setAttribute("src", src?.toString());
168
+ this._isCurrentlySettingsSourceAttribute = false;
169
+
153
170
  const alias = this.getAttribute("alias");
154
171
  this.classList.add("loading");
155
172
  if (debug) console.log("Needle Engine: Begin loading", alias ?? "");
@@ -173,14 +190,23 @@ export class EngineElement extends HTMLElement implements INeedleEngineComponent
173
190
 
174
191
  if (debug) console.log(src);
175
192
  let filesToLoad: Array<string>;
176
- if (src.startsWith("[") && src.endsWith("]")) {
193
+ // When using globalThis the src is an array already
194
+ if (Array.isArray(src)) {
195
+ filesToLoad = src;
196
+ }
197
+ // When assigned from codegen the src is a stringified array
198
+ else if (src.startsWith("[") && src.endsWith("]")) {
177
199
  filesToLoad = JSON.parse(src);
178
200
  }
201
+ // src.toString for an array produces a comma separated list
202
+ else if (src.includes(",")) {
203
+ filesToLoad = src.split(",");
204
+ }
179
205
  else filesToLoad = [src];
180
206
 
181
207
  let loadFunction: any = null;
182
208
 
183
- if (typeof src === "string") {
209
+ if (filesToLoad?.length > 0) {
184
210
  loadFunction = async (ctx: Context) => {
185
211
  let hash = 0;
186
212
  if (ctx.hash) hash = Number.parseInt(ctx.hash) ?? 0;
@@ -223,7 +249,7 @@ export class EngineElement extends HTMLElement implements INeedleEngineComponent
223
249
  };
224
250
  }
225
251
  if (!loadFunction) {
226
- console.error("Needle Engine: No load function found", src);
252
+ console.error("Needle Engine: No files to load", src);
227
253
  return;
228
254
  }
229
255
  const currentHash = this.getAttribute("hash");