@shopware-ag/dive 2.2.16 → 2.2.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/build/chunks/{AssetCache-PycNkZlv.cjs → AssetCache-BElKTasn.cjs} +1 -1
  2. package/build/chunks/{AssetCache-BkU-YbyI.mjs → AssetCache-DbUJFLZt.mjs} +1 -1
  3. package/build/chunks/AssetLoader-CT_t_ZfO.cjs +4 -0
  4. package/build/chunks/{AssetLoader-2zJQGAPS.mjs → AssetLoader-D5zuGw5p.mjs} +705 -677
  5. package/build/chunks/FileTypes-Bq4uWglF.mjs +2105 -0
  6. package/build/chunks/FileTypes-Vbu3ti7s.cjs +33 -0
  7. package/build/chunks/{SelectTool-CwFPCf-b.cjs → SelectTool-4zYuuCRL.cjs} +1 -1
  8. package/build/chunks/{SelectTool-DujSa1r0.mjs → SelectTool-PaTy0iER.mjs} +1 -1
  9. package/build/dive.cjs +1 -1
  10. package/build/dive.mjs +50 -48
  11. package/build/engine/Dive.d.ts +6 -0
  12. package/build/engine/environment/Environment.d.ts +133 -0
  13. package/build/engine/index.d.ts +1 -0
  14. package/build/engine/renderer/Renderer.d.ts +3 -0
  15. package/build/engine/scene/Scene.d.ts +1 -0
  16. package/build/plugins/ar/index.cjs +1 -1
  17. package/build/plugins/ar/index.mjs +1 -1
  18. package/build/plugins/assetcache/index.cjs +1 -1
  19. package/build/plugins/assetcache/index.mjs +1 -1
  20. package/build/plugins/assetloader/index.cjs +1 -1
  21. package/build/plugins/assetloader/index.mjs +1 -1
  22. package/build/plugins/assetloader/src/loader/AssetLoader.d.ts +8 -1
  23. package/build/plugins/orbitcontroller/index.cjs +1 -1
  24. package/build/plugins/orbitcontroller/index.mjs +1 -1
  25. package/build/plugins/orientationdisplay/index.cjs +1 -1
  26. package/build/plugins/orientationdisplay/index.mjs +1 -1
  27. package/build/plugins/quickview/index.cjs +1 -1
  28. package/build/plugins/quickview/index.mjs +16 -24
  29. package/build/plugins/quickview/src/QuickView.d.ts +1 -3
  30. package/build/plugins/quickview/types/QuickViewSettings.d.ts +0 -5
  31. package/build/plugins/state/index.cjs +1 -1
  32. package/build/plugins/state/index.mjs +2 -2
  33. package/build/plugins/toolbox/index.cjs +1 -1
  34. package/build/plugins/toolbox/index.mjs +2 -2
  35. package/package.json +6 -8
  36. package/build/chunks/AssetLoader-CgeC94PN.cjs +0 -4
  37. package/build/chunks/FileTypes-Bf3Ffk3D.cjs +0 -29
  38. package/build/chunks/FileTypes-Qg_Zc7TF.mjs +0 -1802
  39. package/build/chunks/HDREnvorinment-CP2Uvq4_.cjs +0 -5
  40. package/build/chunks/HDREnvorinment-DKzwfsKr.mjs +0 -257
  41. package/build/plugins/hdr/index.cjs +0 -1
  42. package/build/plugins/hdr/index.d.ts +0 -2
  43. package/build/plugins/hdr/index.mjs +0 -5
  44. package/build/plugins/hdr/src/HDREnvorinment.d.ts +0 -35
  45. package/build/plugins/hdr/src/index.d.ts +0 -1
  46. package/build/plugins/hdr/types/HDREnvironmentSettings.d.ts +0 -44
  47. package/build/plugins/hdr/types/index.d.ts +0 -1
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../chunks/AssetLoader-CgeC94PN.cjs");exports.AssetLoader=e.AssetLoader;exports.DRACOWorker=e.DRACOWorker;exports.DracoLoader=e.DracoLoader;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../chunks/AssetLoader-CT_t_ZfO.cjs");exports.AssetLoader=e.AssetLoader;exports.DRACOWorker=e.DRACOWorker;exports.DracoLoader=e.DracoLoader;
@@ -1,4 +1,4 @@
1
- import { A as o, a as e, D as s } from "../../chunks/AssetLoader-2zJQGAPS.mjs";
1
+ import { A as o, a as e, D as s } from "../../chunks/AssetLoader-D5zuGw5p.mjs";
2
2
  export {
3
3
  o as AssetLoader,
4
4
  e as DRACOWorker,
@@ -1,9 +1,16 @@
1
1
  import { Object3D } from 'three';
2
+ import { FileType } from '../../../../index.ts';
2
3
  export declare class AssetLoader {
3
4
  private _gltfLoader;
4
5
  private _usdzLoader;
5
6
  constructor();
6
- load(uri: string): Promise<Object3D>;
7
+ load(uri: string, fileType?: FileType): Promise<Object3D>;
8
+ /**
9
+ * Detects file type from content (magic bytes)
10
+ * @param uri - The URI to load and detect
11
+ * @returns The detected file extension or empty string if detection fails
12
+ */
13
+ private _detectFileTypeFromContent;
7
14
  /**
8
15
  * parse function for the chunk
9
16
  * @param arrayBuffer - the array buffer to parse, will be provided within the chunk
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../../chunks/FileTypes-Bf3Ffk3D.cjs");exports.OrbitController=t.OrbitController;exports.OrbitControllerDefaultSettings=t.OrbitControllerDefaultSettings;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../../chunks/FileTypes-Vbu3ti7s.cjs");exports.OrbitController=t.OrbitController;exports.OrbitControllerDefaultSettings=t.OrbitControllerDefaultSettings;
@@ -1,4 +1,4 @@
1
- import { a as o, O as e } from "../../chunks/FileTypes-Qg_Zc7TF.mjs";
1
+ import { a as o, O as e } from "../../chunks/FileTypes-Bq4uWglF.mjs";
2
2
  export {
3
3
  o as OrbitController,
4
4
  e as OrbitControllerDefaultSettings
@@ -1 +1 @@
1
- "use strict";var c=Object.defineProperty;var p=(s,e,r)=>e in s?c(s,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):s[e]=r;var a=(s,e,r)=>p(s,typeof e!="symbol"?e+"":e,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("three");require("../../chunks/FileTypes-Bf3Ffk3D.cjs");const n=require("../../chunks/PerspectiveCamera-iAsZqrnY.cjs"),i=require("../../chunks/AxisHelperColors-BrGqktN5.cjs"),l=require("three-spritetext");class _ extends t.Object3D{constructor(){super();a(this,"_axesHelper");this._axesHelper=new t.AxesHelper(.5),this._axesHelper.layers.mask=n.COORDINATE_LAYER_MASK,this._axesHelper.material.depthTest=!1,this._axesHelper.position.set(0,0,-1),this._axesHelper.setColors(new t.Color(i.AxesColorRed),new t.Color(i.AxesColorGreen),new t.Color(i.AxesColorBlue));const r=new l("X",.2,i.AxesColorRedLetter),o=new l("Y",.2,i.AxesColorGreenLetter),h=new l("Z",.2,i.AxesColorBlueLetter);r.layers.mask=n.COORDINATE_LAYER_MASK,o.layers.mask=n.COORDINATE_LAYER_MASK,h.layers.mask=n.COORDINATE_LAYER_MASK,r.position.set(.7,0,0),o.position.set(0,.7,0),h.position.set(0,0,.7),this._axesHelper.add(r),this._axesHelper.add(o),this._axesHelper.add(h),this.add(this._axesHelper)}setFromCameraMatrix(r){this._axesHelper.rotation.setFromRotationMatrix(new t.Matrix4().extractRotation(r).invert())}}class d{constructor(e,r,o){a(this,"uuid",t.MathUtils.generateUUID());a(this,"_axes");a(this,"_orthographicCamera");a(this,"_restoreViewport",new t.Vector4);this._renderer=e,this._scene=r,this._camera=o,this._orthographicCamera=new t.OrthographicCamera(-1,1,1,-1,.1,100),this._orthographicCamera.name="OrientationDisplayCamera",this._orthographicCamera.layers.mask=n.COORDINATE_LAYER_MASK,this._scene.add(this._orthographicCamera),this._axes=new _,this._axes.name="OrientationDisplayAxes",this._scene.add(this._axes)}tick(){const e=this._scene.background??null;this._scene.background=null,this._renderer.webglrenderer.getViewport(this._restoreViewport),this._renderer.webglrenderer.setViewport(0,0,150,150),this._renderer.webglrenderer.autoClear=!1,this._axes.setFromCameraMatrix(this._camera.matrix),this._renderer.webglrenderer.render(this._scene,this._orthographicCamera),this._renderer.webglrenderer.setViewport(this._restoreViewport),this._renderer.webglrenderer.autoClear=!0,this._scene.background=e}dispose(){this._scene.remove(this._axes),this._scene.remove(this._orthographicCamera)}}exports.OrientationDisplay=d;exports.OrientationDisplayAxes=_;
1
+ "use strict";var c=Object.defineProperty;var p=(s,e,r)=>e in s?c(s,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):s[e]=r;var a=(s,e,r)=>p(s,typeof e!="symbol"?e+"":e,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("three");require("../../chunks/FileTypes-Vbu3ti7s.cjs");const n=require("../../chunks/PerspectiveCamera-iAsZqrnY.cjs"),i=require("../../chunks/AxisHelperColors-BrGqktN5.cjs"),l=require("three-spritetext");class _ extends t.Object3D{constructor(){super();a(this,"_axesHelper");this._axesHelper=new t.AxesHelper(.5),this._axesHelper.layers.mask=n.COORDINATE_LAYER_MASK,this._axesHelper.material.depthTest=!1,this._axesHelper.position.set(0,0,-1),this._axesHelper.setColors(new t.Color(i.AxesColorRed),new t.Color(i.AxesColorGreen),new t.Color(i.AxesColorBlue));const r=new l("X",.2,i.AxesColorRedLetter),o=new l("Y",.2,i.AxesColorGreenLetter),h=new l("Z",.2,i.AxesColorBlueLetter);r.layers.mask=n.COORDINATE_LAYER_MASK,o.layers.mask=n.COORDINATE_LAYER_MASK,h.layers.mask=n.COORDINATE_LAYER_MASK,r.position.set(.7,0,0),o.position.set(0,.7,0),h.position.set(0,0,.7),this._axesHelper.add(r),this._axesHelper.add(o),this._axesHelper.add(h),this.add(this._axesHelper)}setFromCameraMatrix(r){this._axesHelper.rotation.setFromRotationMatrix(new t.Matrix4().extractRotation(r).invert())}}class d{constructor(e,r,o){a(this,"uuid",t.MathUtils.generateUUID());a(this,"_axes");a(this,"_orthographicCamera");a(this,"_restoreViewport",new t.Vector4);this._renderer=e,this._scene=r,this._camera=o,this._orthographicCamera=new t.OrthographicCamera(-1,1,1,-1,.1,100),this._orthographicCamera.name="OrientationDisplayCamera",this._orthographicCamera.layers.mask=n.COORDINATE_LAYER_MASK,this._scene.add(this._orthographicCamera),this._axes=new _,this._axes.name="OrientationDisplayAxes",this._scene.add(this._axes)}tick(){const e=this._scene.background??null;this._scene.background=null,this._renderer.webglrenderer.getViewport(this._restoreViewport),this._renderer.webglrenderer.setViewport(0,0,150,150),this._renderer.webglrenderer.autoClear=!1,this._axes.setFromCameraMatrix(this._camera.matrix),this._renderer.webglrenderer.render(this._scene,this._orthographicCamera),this._renderer.webglrenderer.setViewport(this._restoreViewport),this._renderer.webglrenderer.autoClear=!0,this._scene.background=e}dispose(){this._scene.remove(this._axes),this._scene.remove(this._orthographicCamera)}}exports.OrientationDisplay=d;exports.OrientationDisplayAxes=_;
@@ -2,7 +2,7 @@ var l = Object.defineProperty;
2
2
  var _ = (s, e, r) => e in s ? l(s, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : s[e] = r;
3
3
  var t = (s, e, r) => _(s, typeof e != "symbol" ? e + "" : e, r);
4
4
  import { Object3D as p, AxesHelper as c, Color as n, Matrix4 as d, OrthographicCamera as m, MathUtils as x, Vector4 as w } from "three";
5
- import "../../chunks/FileTypes-Qg_Zc7TF.mjs";
5
+ import "../../chunks/FileTypes-Bq4uWglF.mjs";
6
6
  import { C as i } from "../../chunks/PerspectiveCamera-BFzE2TQU.mjs";
7
7
  import { A as C, a as g, b as u, c as A, d as H, e as b } from "../../chunks/AxisHelperColors-JLBHYQDi.mjs";
8
8
  import h from "three-spritetext";
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("../../chunks/FileTypes-Bf3Ffk3D.cjs");require("three");const s=require("../../chunks/HDREnvorinment-CP2Uvq4_.cjs"),d={...i.DIVEDefaultSettings,lightIntensity:1,hdr:s.HDREnvironmentDefaultSettings},w=async(l,n)=>{const e=new i.DIVE(n);e.mainView.camera.position.set(0,1,2);const t=new i.DIVESceneLight;t.setIntensity((n==null?void 0:n.lightIntensity)??1),e.scene.root.add(t);const r=await new i.DIVEModel().setFromURL(l);e.scene.root.add(r),r.placeOnFloor();const o=new i.OrbitController(e.mainView.camera,e.mainView.canvas);o.focusObject(r),e.clock.addTicker(o);const c=new s.HDREnvironment(e.mainView.renderer.webglrenderer,e.scene,(n==null?void 0:n.hdr)??d.hdr),a=Object.assign(e,{orbitController:o,hdr:c}),u=e.dispose.bind(e);return a.dispose=async()=>{o.dispose(),c.dispose(),await u()},a};exports.QuickView=w;exports.QuickViewDefaultSettings=d;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../../chunks/FileTypes-Vbu3ti7s.cjs");require("three");const r={...t.DIVEDefaultSettings,lightIntensity:1},l=async(s,c)=>{const e=new t.DIVE(c);e.mainView.camera.position.set(0,1,2);const n=await new t.DIVEModel().setFromURL(s);e.scene.root.add(n),n.placeOnFloor();const i=new t.OrbitController(e.mainView.camera,e.mainView.canvas);i.focusObject(n),e.clock.addTicker(i);const o=Object.assign(e,{orbitController:i}),a=e.dispose.bind(e);return o.dispose=async()=>{i.dispose(),await a()},o};exports.QuickView=l;exports.QuickViewDefaultSettings=r;
@@ -1,32 +1,24 @@
1
- import { D as d, b as l, c as m, d as w, a as p } from "../../chunks/FileTypes-Qg_Zc7TF.mjs";
1
+ import { D as c, b as r, c as l, a as d } from "../../chunks/FileTypes-Bq4uWglF.mjs";
2
2
  import "three";
3
- import { H as D, a as V } from "../../chunks/HDREnvorinment-DKzwfsKr.mjs";
4
- const h = {
5
- ...d,
6
- lightIntensity: 1,
7
- hdr: D
8
- }, f = async (t, o) => {
9
- const e = new l(o);
3
+ const p = {
4
+ ...c,
5
+ lightIntensity: 1
6
+ }, V = async (t, n) => {
7
+ const e = new r(n);
10
8
  e.mainView.camera.position.set(0, 1, 2);
11
- const a = new m();
12
- a.setIntensity((o == null ? void 0 : o.lightIntensity) ?? 1), e.scene.root.add(a);
13
- const i = await new w().setFromURL(t);
14
- e.scene.root.add(i), i.placeOnFloor();
15
- const n = new p(
9
+ const o = await new l().setFromURL(t);
10
+ e.scene.root.add(o), o.placeOnFloor();
11
+ const i = new d(
16
12
  e.mainView.camera,
17
13
  e.mainView.canvas
18
14
  );
19
- n.focusObject(i), e.clock.addTicker(n);
20
- const r = new V(
21
- e.mainView.renderer.webglrenderer,
22
- e.scene,
23
- (o == null ? void 0 : o.hdr) ?? h.hdr
24
- ), c = Object.assign(e, { orbitController: n, hdr: r }), s = e.dispose.bind(e);
25
- return c.dispose = async () => {
26
- n.dispose(), r.dispose(), await s();
27
- }, c;
15
+ i.focusObject(o), e.clock.addTicker(i);
16
+ const s = Object.assign(e, { orbitController: i }), a = e.dispose.bind(e);
17
+ return s.dispose = async () => {
18
+ i.dispose(), await a();
19
+ }, s;
28
20
  };
29
21
  export {
30
- f as QuickView,
31
- h as QuickViewDefaultSettings
22
+ V as QuickView,
23
+ p as QuickViewDefaultSettings
32
24
  };
@@ -1,11 +1,9 @@
1
1
  import { DIVE } from '../../../index.ts';
2
2
  import { OrbitController } from '../../orbitcontroller/index.ts';
3
- import { HDREnvironment } from '../../hdr/index.ts';
4
3
  import { QuickViewSettings } from '../types/index.ts';
5
- export declare const QuickViewDefaultSettings: Required<QuickViewSettings>;
4
+ export declare const QuickViewDefaultSettings: Omit<Required<QuickViewSettings>, 'hdr'>;
6
5
  export type QuickView = DIVE & {
7
6
  orbitController: OrbitController;
8
- hdr: HDREnvironment;
9
7
  };
10
8
  /**
11
9
  *
@@ -1,9 +1,4 @@
1
1
  import { DIVESettings } from '../../../index.ts';
2
- import { HDREnvironmentSettings } from '../../hdr/index.ts';
3
2
  export type QuickViewSettings = DIVESettings & {
4
3
  lightIntensity: number;
5
- /**
6
- * HDR settings.
7
- */
8
- hdr: HDREnvironmentSettings;
9
4
  };
@@ -1,4 +1,4 @@
1
- "use strict";var $d=Object.defineProperty;var Hd=(d,g,o)=>g in d?$d(d,g,{enumerable:!0,configurable:!0,writable:!0,value:o}):d[g]=o;var fn=(d,g,o)=>Hd(d,typeof g!="symbol"?g+"":g,o);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const qd=require("three"),zd=require("../../chunks/FileTypes-Bf3Ffk3D.cjs"),Mi=require("../../chunks/PovSchema-Co9FznEz.cjs"),vo=require("../../chunks/SelectTool-CwFPCf-b.cjs"),wo={};function G(d,g){wo[d]=g}function Ao(d){return wo[d]}class W{constructor(g,o){fn(this,"_payload");fn(this,"_dependencies");this._payload=g,this._dependencies=o}static define({description:g,execute:o}){return class extends W{constructor(E,$){super(E,$);fn(this,"_description",g);fn(this,"_payload");this._payload=E}execute(){return o(this._payload,this._dependencies)}}}}const xo=W.define({description:"Launches AR mode in native capabilities. (iOS: AR Quick Look, Android: Google Scene Viewer)",execute:async(d,{getARSystem:g})=>g().then(o=>{o.launch(d.uri,d.options)})});G("LAUNCH_AR",xo);const Eo=W.define({description:"Calculates the camera position and target to view the whole scene. (experimental).",execute:(d,{engine:g,controller:o})=>{const S=new zd.BoundingBox(g.scene.root,!1,65280);return o.computeEncompassingView(S)}});G("COMPUTE_ENCOMPASSING_VIEW",Eo);const mo=W.define({description:"Gets the current camera position and target.",execute:(d,{controller:g})=>({position:g.object.position.clone(),target:g.target.clone()})});G("GET_CAMERA_TRANSFORM",mo);const So=W.define({description:"Moves the camera to a new position and target.",execute:async(d,{controller:g,registered:o,getAnimationSystem:S,engine:E})=>{let $={x:0,y:0,z:0},q={x:0,y:0,z:0};if("id"in d){const Y=o.get(d.id);if(!Y)throw new Error(`POV with id ${d.id} not registered. Registered: ${o}`);if(!Mi.isPovSchema(Y))throw new Error(`Object with id ${d.id} is not a POV. Object: ${Y}`);$=Y.position,q=Y.target}else $=d.position,q=d.target;const X=await S().then(Y=>{E.clock.hasTicker(Y)||E.clock.addTicker(Y),g.enabled=!0;const sr=Y.animate(g.object.position,$,d.duration,{easing:Y.TWEEN.Easing.Quadratic.Out}).play(),ve=Y.animate(g.target,q,d.duration,{easing:Y.TWEEN.Easing.Quadratic.Out,onUpdate:()=>{g.object.lookAt(g.target)},onComplete:()=>{g.enabled=!d.locked}}).play();return[sr,ve]});return{stop:()=>X.forEach(Y=>Y.stop())}}});G("MOVE_CAMERA",So);const bo=W.define({description:"Sets the camera layer to a certain layer.",execute:(d,{controller:g})=>{"setCameraLayer"in g.object&&g.object.setCameraLayer(d.layer)}});G("SET_CAMERA_LAYER",bo);const Oo=W.define({description:"Sets the camera position and target.",execute:(d,{controller:g})=>{g.object.position.copy(d.position),g.target.copy(d.target),g.update()}});G("SET_CAMERA_TRANSFORM",Oo);const To=W.define({description:"Zooms the camera in or out by a certain amount.",execute:(d,{controller:g})=>{d.direction==="IN"&&g.zoomIn(d.by),d.direction==="OUT"&&g.zoomOut(d.by)}});G("ZOOM_CAMERA",To);const Co=W.define({description:"Generates a screenshot, stores it in a Blob and returns a Promise of a valid URI.",execute:async(d,{registered:g,getMediaCreator:o})=>{const S=await o();if("id"in d){const E=g.get(d.id);if(!E)throw new Error(`Object with id ${d.id} not registered. Registered: ${g}`);if(!Mi.isPovSchema(E))throw new Error(`Object with id ${d.id} is not a POV. Object: ${E}`);const{resolution:$}=d,{position:q,target:X}=E;return S.generateMedia({position:q,target:X,resolution:$})}return S.generateMedia(d)}});G("GENERATE_MEDIA",Co);const Io=W.define({description:"Adds an object to the scene.",execute:(d,{engine:g,registered:o})=>{o.get(d.id)||(d.parentId===void 0&&(d.parentId=null),o.set(d.id,d),g.scene.root.addSceneObject(d))}});G("ADD_OBJECT",Io);var or=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},at={exports:{}};/**
1
+ "use strict";var $d=Object.defineProperty;var Hd=(d,g,o)=>g in d?$d(d,g,{enumerable:!0,configurable:!0,writable:!0,value:o}):d[g]=o;var fn=(d,g,o)=>Hd(d,typeof g!="symbol"?g+"":g,o);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const qd=require("three"),zd=require("../../chunks/FileTypes-Vbu3ti7s.cjs"),Mi=require("../../chunks/PovSchema-Co9FznEz.cjs"),vo=require("../../chunks/SelectTool-4zYuuCRL.cjs"),wo={};function G(d,g){wo[d]=g}function Ao(d){return wo[d]}class W{constructor(g,o){fn(this,"_payload");fn(this,"_dependencies");this._payload=g,this._dependencies=o}static define({description:g,execute:o}){return class extends W{constructor(E,$){super(E,$);fn(this,"_description",g);fn(this,"_payload");this._payload=E}execute(){return o(this._payload,this._dependencies)}}}}const xo=W.define({description:"Launches AR mode in native capabilities. (iOS: AR Quick Look, Android: Google Scene Viewer)",execute:async(d,{getARSystem:g})=>g().then(o=>{o.launch(d.uri,d.options)})});G("LAUNCH_AR",xo);const Eo=W.define({description:"Calculates the camera position and target to view the whole scene. (experimental).",execute:(d,{engine:g,controller:o})=>{const S=new zd.BoundingBox(g.scene.root,!1,65280);return o.computeEncompassingView(S)}});G("COMPUTE_ENCOMPASSING_VIEW",Eo);const mo=W.define({description:"Gets the current camera position and target.",execute:(d,{controller:g})=>({position:g.object.position.clone(),target:g.target.clone()})});G("GET_CAMERA_TRANSFORM",mo);const So=W.define({description:"Moves the camera to a new position and target.",execute:async(d,{controller:g,registered:o,getAnimationSystem:S,engine:E})=>{let $={x:0,y:0,z:0},q={x:0,y:0,z:0};if("id"in d){const Y=o.get(d.id);if(!Y)throw new Error(`POV with id ${d.id} not registered. Registered: ${o}`);if(!Mi.isPovSchema(Y))throw new Error(`Object with id ${d.id} is not a POV. Object: ${Y}`);$=Y.position,q=Y.target}else $=d.position,q=d.target;const X=await S().then(Y=>{E.clock.hasTicker(Y)||E.clock.addTicker(Y),g.enabled=!0;const sr=Y.animate(g.object.position,$,d.duration,{easing:Y.TWEEN.Easing.Quadratic.Out}).play(),ve=Y.animate(g.target,q,d.duration,{easing:Y.TWEEN.Easing.Quadratic.Out,onUpdate:()=>{g.object.lookAt(g.target)},onComplete:()=>{g.enabled=!d.locked}}).play();return[sr,ve]});return{stop:()=>X.forEach(Y=>Y.stop())}}});G("MOVE_CAMERA",So);const bo=W.define({description:"Sets the camera layer to a certain layer.",execute:(d,{controller:g})=>{"setCameraLayer"in g.object&&g.object.setCameraLayer(d.layer)}});G("SET_CAMERA_LAYER",bo);const Oo=W.define({description:"Sets the camera position and target.",execute:(d,{controller:g})=>{g.object.position.copy(d.position),g.target.copy(d.target),g.update()}});G("SET_CAMERA_TRANSFORM",Oo);const To=W.define({description:"Zooms the camera in or out by a certain amount.",execute:(d,{controller:g})=>{d.direction==="IN"&&g.zoomIn(d.by),d.direction==="OUT"&&g.zoomOut(d.by)}});G("ZOOM_CAMERA",To);const Co=W.define({description:"Generates a screenshot, stores it in a Blob and returns a Promise of a valid URI.",execute:async(d,{registered:g,getMediaCreator:o})=>{const S=await o();if("id"in d){const E=g.get(d.id);if(!E)throw new Error(`Object with id ${d.id} not registered. Registered: ${g}`);if(!Mi.isPovSchema(E))throw new Error(`Object with id ${d.id} is not a POV. Object: ${E}`);const{resolution:$}=d,{position:q,target:X}=E;return S.generateMedia({position:q,target:X,resolution:$})}return S.generateMedia(d)}});G("GENERATE_MEDIA",Co);const Io=W.define({description:"Adds an object to the scene.",execute:(d,{engine:g,registered:o})=>{o.get(d.id)||(d.parentId===void 0&&(d.parentId=null),o.set(d.id,d),g.scene.root.addSceneObject(d))}});G("ADD_OBJECT",Io);var or=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},at={exports:{}};/**
2
2
  * @license
3
3
  * Lodash <https://lodash.com/>
4
4
  * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
@@ -2,9 +2,9 @@ var _d = Object.defineProperty;
2
2
  var dd = (d, g, o) => g in d ? _d(d, g, { enumerable: !0, configurable: !0, writable: !0, value: o }) : d[g] = o;
3
3
  var fn = (d, g, o) => dd(d, typeof g != "symbol" ? g + "" : g, o);
4
4
  import { MathUtils as pd } from "three";
5
- import { B as vd } from "../../chunks/FileTypes-Qg_Zc7TF.mjs";
5
+ import { B as vd } from "../../chunks/FileTypes-Bq4uWglF.mjs";
6
6
  import { a as _o, i as wd } from "../../chunks/PovSchema-DWWvr_ED.mjs";
7
- import { i as po } from "../../chunks/SelectTool-DujSa1r0.mjs";
7
+ import { i as po } from "../../chunks/SelectTool-PaTy0iER.mjs";
8
8
  const vo = {};
9
9
  function N(d, g) {
10
10
  vo[d] = g;
@@ -1 +1 @@
1
- "use strict";var s=Object.defineProperty;var r=(t,e,o)=>e in t?s(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o;var l=(t,e,o)=>r(t,typeof e!="symbol"?e+"":e,o);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("../../chunks/SelectTool-CwFPCf-b.cjs");class i{constructor(e,o){l(this,"_scene");l(this,"_controller");l(this,"_activeTool");l(this,"_selectTool");this._scene=e,this._controller=o,this._selectTool=null,this._activeTool=null}get selectTool(){return this._selectTool||(this._selectTool=new n.DIVESelectTool(this._scene,this._controller)),this._selectTool}dispose(){this.removeEventListeners()}getActiveTool(){return this._activeTool}useTool(e){var o;switch((o=this._activeTool)==null||o.deactivate(),e){case"select":{this.addEventListeners(),this.selectTool.activate(),this._activeTool=this.selectTool;break}case"none":{this.removeEventListeners(),this._activeTool=null;break}default:console.warn(`DIVEToolBox.useTool: Unknown tool: ${e}`)}}setGizmoMode(e){this.selectTool.setGizmoMode(e)}setGizmoVisible(e){this.selectTool.setGizmoVisible(e)}setGizmoScaleLinked(e){this.selectTool.setGizmoScaleLinked(e)}onPointerMove(e){var o;(o=this._activeTool)==null||o.onPointerMove(e)}onPointerDown(e){var o;(o=this._activeTool)==null||o.onPointerDown(e)}onPointerUp(e){var o;(o=this._activeTool)==null||o.onPointerUp(e)}onWheel(e){var o;(o=this._activeTool)==null||o.onWheel(e)}addEventListeners(){this._controller.domElement.addEventListener("pointermove",e=>this.onPointerMove(e)),this._controller.domElement.addEventListener("pointerdown",e=>this.onPointerDown(e)),this._controller.domElement.addEventListener("pointerup",e=>this.onPointerUp(e)),this._controller.domElement.addEventListener("wheel",e=>this.onWheel(e))}removeEventListeners(){this._controller.domElement.removeEventListener("pointermove",e=>this.onPointerMove(e)),this._controller.domElement.removeEventListener("pointerdown",e=>this.onPointerDown(e)),this._controller.domElement.removeEventListener("pointerup",e=>this.onPointerUp(e)),this._controller.domElement.removeEventListener("wheel",e=>this.onWheel(e))}}l(i,"DefaultTool","select");exports.DIVEBaseTool=n.DIVEBaseTool;exports.DIVESelectTool=n.DIVESelectTool;exports.DIVETransformTool=n.DIVETransformTool;exports.isSelectTool=n.isSelectTool;exports.isTransformTool=n.isTransformTool;exports.Toolbox=i;
1
+ "use strict";var s=Object.defineProperty;var r=(t,e,o)=>e in t?s(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o;var l=(t,e,o)=>r(t,typeof e!="symbol"?e+"":e,o);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("../../chunks/SelectTool-4zYuuCRL.cjs");class i{constructor(e,o){l(this,"_scene");l(this,"_controller");l(this,"_activeTool");l(this,"_selectTool");this._scene=e,this._controller=o,this._selectTool=null,this._activeTool=null}get selectTool(){return this._selectTool||(this._selectTool=new n.DIVESelectTool(this._scene,this._controller)),this._selectTool}dispose(){this.removeEventListeners()}getActiveTool(){return this._activeTool}useTool(e){var o;switch((o=this._activeTool)==null||o.deactivate(),e){case"select":{this.addEventListeners(),this.selectTool.activate(),this._activeTool=this.selectTool;break}case"none":{this.removeEventListeners(),this._activeTool=null;break}default:console.warn(`DIVEToolBox.useTool: Unknown tool: ${e}`)}}setGizmoMode(e){this.selectTool.setGizmoMode(e)}setGizmoVisible(e){this.selectTool.setGizmoVisible(e)}setGizmoScaleLinked(e){this.selectTool.setGizmoScaleLinked(e)}onPointerMove(e){var o;(o=this._activeTool)==null||o.onPointerMove(e)}onPointerDown(e){var o;(o=this._activeTool)==null||o.onPointerDown(e)}onPointerUp(e){var o;(o=this._activeTool)==null||o.onPointerUp(e)}onWheel(e){var o;(o=this._activeTool)==null||o.onWheel(e)}addEventListeners(){this._controller.domElement.addEventListener("pointermove",e=>this.onPointerMove(e)),this._controller.domElement.addEventListener("pointerdown",e=>this.onPointerDown(e)),this._controller.domElement.addEventListener("pointerup",e=>this.onPointerUp(e)),this._controller.domElement.addEventListener("wheel",e=>this.onWheel(e))}removeEventListeners(){this._controller.domElement.removeEventListener("pointermove",e=>this.onPointerMove(e)),this._controller.domElement.removeEventListener("pointerdown",e=>this.onPointerDown(e)),this._controller.domElement.removeEventListener("pointerup",e=>this.onPointerUp(e)),this._controller.domElement.removeEventListener("wheel",e=>this.onWheel(e))}}l(i,"DefaultTool","select");exports.DIVEBaseTool=n.DIVEBaseTool;exports.DIVESelectTool=n.DIVESelectTool;exports.DIVETransformTool=n.DIVETransformTool;exports.isSelectTool=n.isSelectTool;exports.isTransformTool=n.isTransformTool;exports.Toolbox=i;
@@ -1,8 +1,8 @@
1
1
  var i = Object.defineProperty;
2
2
  var s = (t, e, o) => e in t ? i(t, e, { enumerable: !0, configurable: !0, writable: !0, value: o }) : t[e] = o;
3
3
  var n = (t, e, o) => s(t, typeof e != "symbol" ? e + "" : e, o);
4
- import { D as l } from "../../chunks/SelectTool-DujSa1r0.mjs";
5
- import { a as m, c as T, i as d, b as _ } from "../../chunks/SelectTool-DujSa1r0.mjs";
4
+ import { D as l } from "../../chunks/SelectTool-PaTy0iER.mjs";
5
+ import { a as m, c as T, i as d, b as _ } from "../../chunks/SelectTool-PaTy0iER.mjs";
6
6
  class r {
7
7
  constructor(e, o) {
8
8
  n(this, "_scene");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shopware-ag/dive",
3
- "version": "2.2.16",
3
+ "version": "2.2.18",
4
4
  "description": "Shopware Spatial Framework",
5
5
  "type": "module",
6
6
  "main": "build/dive.cjs",
@@ -42,11 +42,6 @@
42
42
  "import": "./build/plugins/assetloader/index.mjs",
43
43
  "require": "./build/plugins/assetloader/index.cjs"
44
44
  },
45
- "./hdr": {
46
- "types": "./build/plugins/hdr/index.d.ts",
47
- "import": "./build/plugins/hdr/index.mjs",
48
- "require": "./build/plugins/hdr/index.cjs"
49
- },
50
45
  "./mediacreator": {
51
46
  "types": "./build/plugins/mediacreator/index.d.ts",
52
47
  "import": "./build/plugins/mediacreator/index.mjs",
@@ -97,7 +92,10 @@
97
92
  "3d",
98
93
  "typescript"
99
94
  ],
100
- "repository": "git@github.com:shopware/dive.git",
95
+ "repository": {
96
+ "type": "git",
97
+ "url": "git+ssh://git@github.com/shopware/dive.git"
98
+ },
101
99
  "author": "ffrank <f.frank@shopware.com>",
102
100
  "license": "MIT",
103
101
  "browserslist": [
@@ -145,7 +143,7 @@
145
143
  "scripts": {
146
144
  "build": "vite build",
147
145
  "build:dev": "vite build --config vite.config.dev.ts",
148
- "dev": "node scripts/dev/watch-and-deploy.js",
146
+ "dev": "vite build --watch --config vite.config.dev.ts",
149
147
  "lint": "eslint",
150
148
  "prettier:check": "prettier --check .",
151
149
  "prettier:fix": "prettier --write .",
@@ -1,4 +0,0 @@
1
- "use strict";var le=Object.defineProperty;var ue=(h,e,t)=>e in h?le(h,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):h[e]=t;var k=(h,e,t)=>ue(h,typeof e!="symbol"?e+"":e,t);const f=require("three"),H=require("./fflate.module-DHdJvhNh.cjs"),fe=require("./FileTypes-Bf3Ffk3D.cjs"),J=require("./isFileTypeSupported-CrEqYiv9.cjs"),U=require("./parse-error-Dy_EE4rL.cjs"),Q=require("./AssetCache-PycNkZlv.cjs");function Z(h,e){if(e===f.TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),h;if(e===f.TriangleFanDrawMode||e===f.TriangleStripDrawMode){let t=h.getIndex();if(t===null){const n=[],a=h.getAttribute("position");if(a!==void 0){for(let i=0;i<a.count;i++)n.push(i);h.setIndex(n),t=h.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),h}const o=t.count-2,s=[];if(e===f.TriangleFanDrawMode)for(let n=1;n<=o;n++)s.push(t.getX(0)),s.push(t.getX(n)),s.push(t.getX(n+1));else for(let n=0;n<o;n++)n%2===0?(s.push(t.getX(n)),s.push(t.getX(n+1)),s.push(t.getX(n+2))):(s.push(t.getX(n+2)),s.push(t.getX(n+1)),s.push(t.getX(n)));s.length/3!==o&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const r=h.clone();return r.setIndex(s),r.clearGroups(),r}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",e),h}class de extends f.Loader{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(t){return new Ae(t)}),this.register(function(t){return new Ee(t)}),this.register(function(t){return new be(t)}),this.register(function(t){return new Me(t)}),this.register(function(t){return new ye(t)}),this.register(function(t){return new Re(t)}),this.register(function(t){return new xe(t)}),this.register(function(t){return new Se(t)}),this.register(function(t){return new ge(t)}),this.register(function(t){return new _e(t)}),this.register(function(t){return new Te(t)}),this.register(function(t){return new Le(t)}),this.register(function(t){return new we(t)}),this.register(function(t){return new pe(t)}),this.register(function(t){return new Ce(t)}),this.register(function(t){return new Ie(t)})}load(e,t,o,s){const r=this;let n;if(this.resourcePath!=="")n=this.resourcePath;else if(this.path!==""){const c=f.LoaderUtils.extractUrlBase(e);n=f.LoaderUtils.resolveURL(c,this.path)}else n=f.LoaderUtils.extractUrlBase(e);this.manager.itemStart(e);const a=function(c){s?s(c):console.error(c),r.manager.itemError(e),r.manager.itemEnd(e)},i=new f.FileLoader(this.manager);i.setPath(this.path),i.setResponseType("arraybuffer"),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,function(c){try{r.parse(c,n,function(l){t(l),r.manager.itemEnd(e)},a)}catch(l){a(l)}},o,a)}setDRACOLoader(e){return this.dracoLoader=e,this}setDDSLoader(){throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".')}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return this.pluginCallbacks.indexOf(e)===-1&&this.pluginCallbacks.push(e),this}unregister(e){return this.pluginCallbacks.indexOf(e)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,o,s){let r;const n={},a={},i=new TextDecoder;if(typeof e=="string")r=JSON.parse(e);else if(e instanceof ArrayBuffer)if(i.decode(new Uint8Array(e,0,4))===se){try{n[b.KHR_BINARY_GLTF]=new Ne(e)}catch(u){s&&s(u);return}r=JSON.parse(n[b.KHR_BINARY_GLTF].content)}else r=JSON.parse(i.decode(e));else r=e;if(r.asset===void 0||r.asset.version[0]<2){s&&s(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));return}const c=new Ve(r,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});c.fileLoader.setRequestHeader(this.requestHeader);for(let l=0;l<this.pluginCallbacks.length;l++){const u=this.pluginCallbacks[l](c);u.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),a[u.name]=u,n[u.name]=!0}if(r.extensionsUsed)for(let l=0;l<r.extensionsUsed.length;++l){const u=r.extensionsUsed[l],d=r.extensionsRequired||[];switch(u){case b.KHR_MATERIALS_UNLIT:n[u]=new me;break;case b.KHR_DRACO_MESH_COMPRESSION:n[u]=new De(r,this.dracoLoader);break;case b.KHR_TEXTURE_TRANSFORM:n[u]=new Oe;break;case b.KHR_MESH_QUANTIZATION:n[u]=new Pe;break;default:d.indexOf(u)>=0&&a[u]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+u+'".')}}c.setExtensions(n),c.setPlugins(a),c.parse(o,s)}parseAsync(e,t){const o=this;return new Promise(function(s,r){o.parse(e,t,s,r)})}}function he(){let h={};return{get:function(e){return h[e]},add:function(e,t){h[e]=t},remove:function(e){delete h[e]},removeAll:function(){h={}}}}const b={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class pe{constructor(e){this.parser=e,this.name=b.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let o=0,s=t.length;o<s;o++){const r=t[o];r.extensions&&r.extensions[this.name]&&r.extensions[this.name].light!==void 0&&e._addNodeRef(this.cache,r.extensions[this.name].light)}}_loadLight(e){const t=this.parser,o="light:"+e;let s=t.cache.get(o);if(s)return s;const r=t.json,i=((r.extensions&&r.extensions[this.name]||{}).lights||[])[e];let c;const l=new f.Color(16777215);i.color!==void 0&&l.setRGB(i.color[0],i.color[1],i.color[2],f.LinearSRGBColorSpace);const u=i.range!==void 0?i.range:0;switch(i.type){case"directional":c=new f.DirectionalLight(l),c.target.position.set(0,0,-1),c.add(c.target);break;case"point":c=new f.PointLight(l),c.distance=u;break;case"spot":c=new f.SpotLight(l),c.distance=u,i.spot=i.spot||{},i.spot.innerConeAngle=i.spot.innerConeAngle!==void 0?i.spot.innerConeAngle:0,i.spot.outerConeAngle=i.spot.outerConeAngle!==void 0?i.spot.outerConeAngle:Math.PI/4,c.angle=i.spot.outerConeAngle,c.penumbra=1-i.spot.innerConeAngle/i.spot.outerConeAngle,c.target.position.set(0,0,-1),c.add(c.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+i.type)}return c.position.set(0,0,0),c.decay=2,O(c,i),i.intensity!==void 0&&(c.intensity=i.intensity),c.name=t.createUniqueName(i.name||"light_"+e),s=Promise.resolve(c),t.cache.add(o,s),s}getDependency(e,t){if(e==="light")return this._loadLight(t)}createNodeAttachment(e){const t=this,o=this.parser,r=o.json.nodes[e],a=(r.extensions&&r.extensions[this.name]||{}).light;return a===void 0?null:this._loadLight(a).then(function(i){return o._getNodeRef(t.cache,a,i)})}}class me{constructor(){this.name=b.KHR_MATERIALS_UNLIT}getMaterialType(){return f.MeshBasicMaterial}extendParams(e,t,o){const s=[];e.color=new f.Color(1,1,1),e.opacity=1;const r=t.pbrMetallicRoughness;if(r){if(Array.isArray(r.baseColorFactor)){const n=r.baseColorFactor;e.color.setRGB(n[0],n[1],n[2],f.LinearSRGBColorSpace),e.opacity=n[3]}r.baseColorTexture!==void 0&&s.push(o.assignTexture(e,"map",r.baseColorTexture,f.SRGBColorSpace))}return Promise.all(s)}}class ge{constructor(e){this.parser=e,this.name=b.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,t){const s=this.parser.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=s.extensions[this.name].emissiveStrength;return r!==void 0&&(t.emissiveIntensity=r),Promise.resolve()}}class Ae{constructor(e){this.parser=e,this.name=b.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){const o=this.parser.json.materials[e];return!o.extensions||!o.extensions[this.name]?null:f.MeshPhysicalMaterial}extendMaterialParams(e,t){const o=this.parser,s=o.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],n=s.extensions[this.name];if(n.clearcoatFactor!==void 0&&(t.clearcoat=n.clearcoatFactor),n.clearcoatTexture!==void 0&&r.push(o.assignTexture(t,"clearcoatMap",n.clearcoatTexture)),n.clearcoatRoughnessFactor!==void 0&&(t.clearcoatRoughness=n.clearcoatRoughnessFactor),n.clearcoatRoughnessTexture!==void 0&&r.push(o.assignTexture(t,"clearcoatRoughnessMap",n.clearcoatRoughnessTexture)),n.clearcoatNormalTexture!==void 0&&(r.push(o.assignTexture(t,"clearcoatNormalMap",n.clearcoatNormalTexture)),n.clearcoatNormalTexture.scale!==void 0)){const a=n.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new f.Vector2(a,a)}return Promise.all(r)}}class Te{constructor(e){this.parser=e,this.name=b.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){const o=this.parser.json.materials[e];return!o.extensions||!o.extensions[this.name]?null:f.MeshPhysicalMaterial}extendMaterialParams(e,t){const o=this.parser,s=o.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],n=s.extensions[this.name];return n.iridescenceFactor!==void 0&&(t.iridescence=n.iridescenceFactor),n.iridescenceTexture!==void 0&&r.push(o.assignTexture(t,"iridescenceMap",n.iridescenceTexture)),n.iridescenceIor!==void 0&&(t.iridescenceIOR=n.iridescenceIor),t.iridescenceThicknessRange===void 0&&(t.iridescenceThicknessRange=[100,400]),n.iridescenceThicknessMinimum!==void 0&&(t.iridescenceThicknessRange[0]=n.iridescenceThicknessMinimum),n.iridescenceThicknessMaximum!==void 0&&(t.iridescenceThicknessRange[1]=n.iridescenceThicknessMaximum),n.iridescenceThicknessTexture!==void 0&&r.push(o.assignTexture(t,"iridescenceThicknessMap",n.iridescenceThicknessTexture)),Promise.all(r)}}class ye{constructor(e){this.parser=e,this.name=b.KHR_MATERIALS_SHEEN}getMaterialType(e){const o=this.parser.json.materials[e];return!o.extensions||!o.extensions[this.name]?null:f.MeshPhysicalMaterial}extendMaterialParams(e,t){const o=this.parser,s=o.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[];t.sheenColor=new f.Color(0,0,0),t.sheenRoughness=0,t.sheen=1;const n=s.extensions[this.name];if(n.sheenColorFactor!==void 0){const a=n.sheenColorFactor;t.sheenColor.setRGB(a[0],a[1],a[2],f.LinearSRGBColorSpace)}return n.sheenRoughnessFactor!==void 0&&(t.sheenRoughness=n.sheenRoughnessFactor),n.sheenColorTexture!==void 0&&r.push(o.assignTexture(t,"sheenColorMap",n.sheenColorTexture,f.SRGBColorSpace)),n.sheenRoughnessTexture!==void 0&&r.push(o.assignTexture(t,"sheenRoughnessMap",n.sheenRoughnessTexture)),Promise.all(r)}}class Re{constructor(e){this.parser=e,this.name=b.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){const o=this.parser.json.materials[e];return!o.extensions||!o.extensions[this.name]?null:f.MeshPhysicalMaterial}extendMaterialParams(e,t){const o=this.parser,s=o.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],n=s.extensions[this.name];return n.transmissionFactor!==void 0&&(t.transmission=n.transmissionFactor),n.transmissionTexture!==void 0&&r.push(o.assignTexture(t,"transmissionMap",n.transmissionTexture)),Promise.all(r)}}class xe{constructor(e){this.parser=e,this.name=b.KHR_MATERIALS_VOLUME}getMaterialType(e){const o=this.parser.json.materials[e];return!o.extensions||!o.extensions[this.name]?null:f.MeshPhysicalMaterial}extendMaterialParams(e,t){const o=this.parser,s=o.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],n=s.extensions[this.name];t.thickness=n.thicknessFactor!==void 0?n.thicknessFactor:0,n.thicknessTexture!==void 0&&r.push(o.assignTexture(t,"thicknessMap",n.thicknessTexture)),t.attenuationDistance=n.attenuationDistance||1/0;const a=n.attenuationColor||[1,1,1];return t.attenuationColor=new f.Color().setRGB(a[0],a[1],a[2],f.LinearSRGBColorSpace),Promise.all(r)}}class Se{constructor(e){this.parser=e,this.name=b.KHR_MATERIALS_IOR}getMaterialType(e){const o=this.parser.json.materials[e];return!o.extensions||!o.extensions[this.name]?null:f.MeshPhysicalMaterial}extendMaterialParams(e,t){const s=this.parser.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=s.extensions[this.name];return t.ior=r.ior!==void 0?r.ior:1.5,Promise.resolve()}}class _e{constructor(e){this.parser=e,this.name=b.KHR_MATERIALS_SPECULAR}getMaterialType(e){const o=this.parser.json.materials[e];return!o.extensions||!o.extensions[this.name]?null:f.MeshPhysicalMaterial}extendMaterialParams(e,t){const o=this.parser,s=o.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],n=s.extensions[this.name];t.specularIntensity=n.specularFactor!==void 0?n.specularFactor:1,n.specularTexture!==void 0&&r.push(o.assignTexture(t,"specularIntensityMap",n.specularTexture));const a=n.specularColorFactor||[1,1,1];return t.specularColor=new f.Color().setRGB(a[0],a[1],a[2],f.LinearSRGBColorSpace),n.specularColorTexture!==void 0&&r.push(o.assignTexture(t,"specularColorMap",n.specularColorTexture,f.SRGBColorSpace)),Promise.all(r)}}class we{constructor(e){this.parser=e,this.name=b.EXT_MATERIALS_BUMP}getMaterialType(e){const o=this.parser.json.materials[e];return!o.extensions||!o.extensions[this.name]?null:f.MeshPhysicalMaterial}extendMaterialParams(e,t){const o=this.parser,s=o.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],n=s.extensions[this.name];return t.bumpScale=n.bumpFactor!==void 0?n.bumpFactor:1,n.bumpTexture!==void 0&&r.push(o.assignTexture(t,"bumpMap",n.bumpTexture)),Promise.all(r)}}class Le{constructor(e){this.parser=e,this.name=b.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){const o=this.parser.json.materials[e];return!o.extensions||!o.extensions[this.name]?null:f.MeshPhysicalMaterial}extendMaterialParams(e,t){const o=this.parser,s=o.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const r=[],n=s.extensions[this.name];return n.anisotropyStrength!==void 0&&(t.anisotropy=n.anisotropyStrength),n.anisotropyRotation!==void 0&&(t.anisotropyRotation=n.anisotropyRotation),n.anisotropyTexture!==void 0&&r.push(o.assignTexture(t,"anisotropyMap",n.anisotropyTexture)),Promise.all(r)}}class Ee{constructor(e){this.parser=e,this.name=b.KHR_TEXTURE_BASISU}loadTexture(e){const t=this.parser,o=t.json,s=o.textures[e];if(!s.extensions||!s.extensions[this.name])return null;const r=s.extensions[this.name],n=t.options.ktx2Loader;if(!n){if(o.extensionsRequired&&o.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,r.source,n)}}class be{constructor(e){this.parser=e,this.name=b.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){const t=this.name,o=this.parser,s=o.json,r=s.textures[e];if(!r.extensions||!r.extensions[t])return null;const n=r.extensions[t],a=s.images[n.source];let i=o.textureLoader;if(a.uri){const c=o.options.manager.getHandler(a.uri);c!==null&&(i=c)}return this.detectSupport().then(function(c){if(c)return o.loadTextureImage(e,n.source,i);if(s.extensionsRequired&&s.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return o.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){const t=new Image;t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",t.onload=t.onerror=function(){e(t.height===1)}})),this.isSupported}}class Me{constructor(e){this.parser=e,this.name=b.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){const t=this.name,o=this.parser,s=o.json,r=s.textures[e];if(!r.extensions||!r.extensions[t])return null;const n=r.extensions[t],a=s.images[n.source];let i=o.textureLoader;if(a.uri){const c=o.options.manager.getHandler(a.uri);c!==null&&(i=c)}return this.detectSupport().then(function(c){if(c)return o.loadTextureImage(e,n.source,i);if(s.extensionsRequired&&s.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return o.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){const t=new Image;t.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",t.onload=t.onerror=function(){e(t.height===1)}})),this.isSupported}}class Ce{constructor(e){this.name=b.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,o=t.bufferViews[e];if(o.extensions&&o.extensions[this.name]){const s=o.extensions[this.name],r=this.parser.getDependency("buffer",s.buffer),n=this.parser.options.meshoptDecoder;if(!n||!n.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return r.then(function(a){const i=s.byteOffset||0,c=s.byteLength||0,l=s.count,u=s.byteStride,d=new Uint8Array(a,i,c);return n.decodeGltfBufferAsync?n.decodeGltfBufferAsync(l,u,d,s.mode,s.filter).then(function(g){return g.buffer}):n.ready.then(function(){const g=new ArrayBuffer(l*u);return n.decodeGltfBuffer(new Uint8Array(g),l,u,d,s.mode,s.filter),g})})}else return null}}class Ie{constructor(e){this.name=b.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const t=this.parser.json,o=t.nodes[e];if(!o.extensions||!o.extensions[this.name]||o.mesh===void 0)return null;const s=t.meshes[o.mesh];for(const c of s.primitives)if(c.mode!==N.TRIANGLES&&c.mode!==N.TRIANGLE_STRIP&&c.mode!==N.TRIANGLE_FAN&&c.mode!==void 0)return null;const n=o.extensions[this.name].attributes,a=[],i={};for(const c in n)a.push(this.parser.getDependency("accessor",n[c]).then(l=>(i[c]=l,i[c])));return a.length<1?null:(a.push(this.parser.createNodeMesh(e)),Promise.all(a).then(c=>{const l=c.pop(),u=l.isGroup?l.children:[l],d=c[0].count,g=[];for(const y of u){const S=new f.Matrix4,R=new f.Vector3,x=new f.Quaternion,L=new f.Vector3(1,1,1),E=new f.InstancedMesh(y.geometry,y.material,d);for(let _=0;_<d;_++)i.TRANSLATION&&R.fromBufferAttribute(i.TRANSLATION,_),i.ROTATION&&x.fromBufferAttribute(i.ROTATION,_),i.SCALE&&L.fromBufferAttribute(i.SCALE,_),E.setMatrixAt(_,S.compose(R,x,L));for(const _ in i)if(_==="_COLOR_0"){const C=i[_];E.instanceColor=new f.InstancedBufferAttribute(C.array,C.itemSize,C.normalized)}else _!=="TRANSLATION"&&_!=="ROTATION"&&_!=="SCALE"&&y.geometry.setAttribute(_,i[_]);f.Object3D.prototype.copy.call(E,y),this.parser.assignFinalMaterial(E),g.push(E)}return l.isGroup?(l.clear(),l.add(...g),l):g[0]}))}}const se="glTF",G=12,$={JSON:1313821514,BIN:5130562};class Ne{constructor(e){this.name=b.KHR_BINARY_GLTF,this.content=null,this.body=null;const t=new DataView(e,0,G),o=new TextDecoder;if(this.header={magic:o.decode(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==se)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const s=this.header.length-G,r=new DataView(e,G);let n=0;for(;n<s;){const a=r.getUint32(n,!0);n+=4;const i=r.getUint32(n,!0);if(n+=4,i===$.JSON){const c=new Uint8Array(e,G+n,a);this.content=o.decode(c)}else if(i===$.BIN){const c=G+n;this.body=e.slice(c,c+a)}n+=a}if(this.content===null)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class De{constructor(e,t){if(!t)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=b.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){const o=this.json,s=this.dracoLoader,r=e.extensions[this.name].bufferView,n=e.extensions[this.name].attributes,a={},i={},c={};for(const l in n){const u=X[l]||l.toLowerCase();a[u]=n[l]}for(const l in e.attributes){const u=X[l]||l.toLowerCase();if(n[l]!==void 0){const d=o.accessors[e.attributes[l]],g=F[d.componentType];c[u]=g.name,i[u]=d.normalized===!0}}return t.getDependency("bufferView",r).then(function(l){return new Promise(function(u,d){s.decodeDracoFile(l,function(g){for(const y in g.attributes){const S=g.attributes[y],R=i[y];R!==void 0&&(S.normalized=R)}u(g)},a,c,f.LinearSRGBColorSpace,d)})})}}class Oe{constructor(){this.name=b.KHR_TEXTURE_TRANSFORM}extendTexture(e,t){return(t.texCoord===void 0||t.texCoord===e.channel)&&t.offset===void 0&&t.rotation===void 0&&t.scale===void 0||(e=e.clone(),t.texCoord!==void 0&&(e.channel=t.texCoord),t.offset!==void 0&&e.offset.fromArray(t.offset),t.rotation!==void 0&&(e.rotation=t.rotation),t.scale!==void 0&&e.repeat.fromArray(t.scale),e.needsUpdate=!0),e}}class Pe{constructor(){this.name=b.KHR_MESH_QUANTIZATION}}class re extends f.Interpolant{constructor(e,t,o,s){super(e,t,o,s)}copySampleValue_(e){const t=this.resultBuffer,o=this.sampleValues,s=this.valueSize,r=e*s*3+s;for(let n=0;n!==s;n++)t[n]=o[r+n];return t}interpolate_(e,t,o,s){const r=this.resultBuffer,n=this.sampleValues,a=this.valueSize,i=a*2,c=a*3,l=s-t,u=(o-t)/l,d=u*u,g=d*u,y=e*c,S=y-c,R=-2*g+3*d,x=g-d,L=1-R,E=x-d+u;for(let _=0;_!==a;_++){const C=n[S+_+a],I=n[S+_+i]*l,M=n[y+_+a],p=n[y+_]*l;r[_]=L*C+E*I+R*M+x*p}return r}}const ke=new f.Quaternion;class Fe extends re{interpolate_(e,t,o,s){const r=super.interpolate_(e,t,o,s);return ke.fromArray(r).normalize().toArray(r),r}}const N={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6},F={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},ee={9728:f.NearestFilter,9729:f.LinearFilter,9984:f.NearestMipmapNearestFilter,9985:f.LinearMipmapNearestFilter,9986:f.NearestMipmapLinearFilter,9987:f.LinearMipmapLinearFilter},te={33071:f.ClampToEdgeWrapping,33648:f.MirroredRepeatWrapping,10497:f.RepeatWrapping},v={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},X={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},D={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},Ge={CUBICSPLINE:void 0,LINEAR:f.InterpolateLinear,STEP:f.InterpolateDiscrete},j={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"};function Ue(h){return h.DefaultMaterial===void 0&&(h.DefaultMaterial=new f.MeshStandardMaterial({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:f.FrontSide})),h.DefaultMaterial}function P(h,e,t){for(const o in t.extensions)h[o]===void 0&&(e.userData.gltfExtensions=e.userData.gltfExtensions||{},e.userData.gltfExtensions[o]=t.extensions[o])}function O(h,e){e.extras!==void 0&&(typeof e.extras=="object"?Object.assign(h.userData,e.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+e.extras))}function Be(h,e,t){let o=!1,s=!1,r=!1;for(let c=0,l=e.length;c<l;c++){const u=e[c];if(u.POSITION!==void 0&&(o=!0),u.NORMAL!==void 0&&(s=!0),u.COLOR_0!==void 0&&(r=!0),o&&s&&r)break}if(!o&&!s&&!r)return Promise.resolve(h);const n=[],a=[],i=[];for(let c=0,l=e.length;c<l;c++){const u=e[c];if(o){const d=u.POSITION!==void 0?t.getDependency("accessor",u.POSITION):h.attributes.position;n.push(d)}if(s){const d=u.NORMAL!==void 0?t.getDependency("accessor",u.NORMAL):h.attributes.normal;a.push(d)}if(r){const d=u.COLOR_0!==void 0?t.getDependency("accessor",u.COLOR_0):h.attributes.color;i.push(d)}}return Promise.all([Promise.all(n),Promise.all(a),Promise.all(i)]).then(function(c){const l=c[0],u=c[1],d=c[2];return o&&(h.morphAttributes.position=l),s&&(h.morphAttributes.normal=u),r&&(h.morphAttributes.color=d),h.morphTargetsRelative=!0,h})}function He(h,e){if(h.updateMorphTargets(),e.weights!==void 0)for(let t=0,o=e.weights.length;t<o;t++)h.morphTargetInfluences[t]=e.weights[t];if(e.extras&&Array.isArray(e.extras.targetNames)){const t=e.extras.targetNames;if(h.morphTargetInfluences.length===t.length){h.morphTargetDictionary={};for(let o=0,s=t.length;o<s;o++)h.morphTargetDictionary[t[o]]=o}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function ve(h){let e;const t=h.extensions&&h.extensions[b.KHR_DRACO_MESH_COMPRESSION];if(t?e="draco:"+t.bufferView+":"+t.indices+":"+K(t.attributes):e=h.indices+":"+K(h.attributes)+":"+h.mode,h.targets!==void 0)for(let o=0,s=h.targets.length;o<s;o++)e+=":"+K(h.targets[o]);return e}function K(h){let e="";const t=Object.keys(h).sort();for(let o=0,s=t.length;o<s;o++)e+=t[o]+":"+h[t[o]]+";";return e}function q(h){switch(h){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}function je(h){return h.search(/\.jpe?g($|\?)/i)>0||h.search(/^data\:image\/jpeg/)===0?"image/jpeg":h.search(/\.webp($|\?)/i)>0||h.search(/^data\:image\/webp/)===0?"image/webp":"image/png"}const Ke=new f.Matrix4;class Ve{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new he,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let o=!1,s=!1,r=-1;typeof navigator<"u"&&(o=/^((?!chrome|android).)*safari/i.test(navigator.userAgent)===!0,s=navigator.userAgent.indexOf("Firefox")>-1,r=s?navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]:-1),typeof createImageBitmap>"u"||o||s&&r<98?this.textureLoader=new f.TextureLoader(this.options.manager):this.textureLoader=new f.ImageBitmapLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new f.FileLoader(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){const o=this,s=this.json,r=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(n){return n._markDefs&&n._markDefs()}),Promise.all(this._invokeAll(function(n){return n.beforeRoot&&n.beforeRoot()})).then(function(){return Promise.all([o.getDependencies("scene"),o.getDependencies("animation"),o.getDependencies("camera")])}).then(function(n){const a={scene:n[0][s.scene||0],scenes:n[0],animations:n[1],cameras:n[2],asset:s.asset,parser:o,userData:{}};return P(r,a,s),O(a,s),Promise.all(o._invokeAll(function(i){return i.afterRoot&&i.afterRoot(a)})).then(function(){for(const i of a.scenes)i.updateMatrixWorld();e(a)})}).catch(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],o=this.json.meshes||[];for(let s=0,r=t.length;s<r;s++){const n=t[s].joints;for(let a=0,i=n.length;a<i;a++)e[n[a]].isBone=!0}for(let s=0,r=e.length;s<r;s++){const n=e[s];n.mesh!==void 0&&(this._addNodeRef(this.meshCache,n.mesh),n.skin!==void 0&&(o[n.mesh].isSkinnedMesh=!0)),n.camera!==void 0&&this._addNodeRef(this.cameraCache,n.camera)}}_addNodeRef(e,t){t!==void 0&&(e.refs[t]===void 0&&(e.refs[t]=e.uses[t]=0),e.refs[t]++)}_getNodeRef(e,t,o){if(e.refs[t]<=1)return o;const s=o.clone(),r=(n,a)=>{const i=this.associations.get(n);i!=null&&this.associations.set(a,i);for(const[c,l]of n.children.entries())r(l,a.children[c])};return r(o,s),s.name+="_instance_"+e.uses[t]++,s}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let o=0;o<t.length;o++){const s=e(t[o]);if(s)return s}return null}_invokeAll(e){const t=Object.values(this.plugins);t.unshift(this);const o=[];for(let s=0;s<t.length;s++){const r=e(t[s]);r&&o.push(r)}return o}getDependency(e,t){const o=e+":"+t;let s=this.cache.get(o);if(!s){switch(e){case"scene":s=this.loadScene(t);break;case"node":s=this._invokeOne(function(r){return r.loadNode&&r.loadNode(t)});break;case"mesh":s=this._invokeOne(function(r){return r.loadMesh&&r.loadMesh(t)});break;case"accessor":s=this.loadAccessor(t);break;case"bufferView":s=this._invokeOne(function(r){return r.loadBufferView&&r.loadBufferView(t)});break;case"buffer":s=this.loadBuffer(t);break;case"material":s=this._invokeOne(function(r){return r.loadMaterial&&r.loadMaterial(t)});break;case"texture":s=this._invokeOne(function(r){return r.loadTexture&&r.loadTexture(t)});break;case"skin":s=this.loadSkin(t);break;case"animation":s=this._invokeOne(function(r){return r.loadAnimation&&r.loadAnimation(t)});break;case"camera":s=this.loadCamera(t);break;default:if(s=this._invokeOne(function(r){return r!=this&&r.getDependency&&r.getDependency(e,t)}),!s)throw new Error("Unknown type: "+e);break}this.cache.add(o,s)}return s}getDependencies(e){let t=this.cache.get(e);if(!t){const o=this,s=this.json[e+(e==="mesh"?"es":"s")]||[];t=Promise.all(s.map(function(r,n){return o.getDependency(e,n)})),this.cache.add(e,t)}return t}loadBuffer(e){const t=this.json.buffers[e],o=this.fileLoader;if(t.type&&t.type!=="arraybuffer")throw new Error("THREE.GLTFLoader: "+t.type+" buffer type is not supported.");if(t.uri===void 0&&e===0)return Promise.resolve(this.extensions[b.KHR_BINARY_GLTF].body);const s=this.options;return new Promise(function(r,n){o.load(f.LoaderUtils.resolveURL(t.uri,s.path),r,void 0,function(){n(new Error('THREE.GLTFLoader: Failed to load buffer "'+t.uri+'".'))})})}loadBufferView(e){const t=this.json.bufferViews[e];return this.getDependency("buffer",t.buffer).then(function(o){const s=t.byteLength||0,r=t.byteOffset||0;return o.slice(r,r+s)})}loadAccessor(e){const t=this,o=this.json,s=this.json.accessors[e];if(s.bufferView===void 0&&s.sparse===void 0){const n=v[s.type],a=F[s.componentType],i=s.normalized===!0,c=new a(s.count*n);return Promise.resolve(new f.BufferAttribute(c,n,i))}const r=[];return s.bufferView!==void 0?r.push(this.getDependency("bufferView",s.bufferView)):r.push(null),s.sparse!==void 0&&(r.push(this.getDependency("bufferView",s.sparse.indices.bufferView)),r.push(this.getDependency("bufferView",s.sparse.values.bufferView))),Promise.all(r).then(function(n){const a=n[0],i=v[s.type],c=F[s.componentType],l=c.BYTES_PER_ELEMENT,u=l*i,d=s.byteOffset||0,g=s.bufferView!==void 0?o.bufferViews[s.bufferView].byteStride:void 0,y=s.normalized===!0;let S,R;if(g&&g!==u){const x=Math.floor(d/g),L="InterleavedBuffer:"+s.bufferView+":"+s.componentType+":"+x+":"+s.count;let E=t.cache.get(L);E||(S=new c(a,x*g,s.count*g/l),E=new f.InterleavedBuffer(S,g/l),t.cache.add(L,E)),R=new f.InterleavedBufferAttribute(E,i,d%g/l,y)}else a===null?S=new c(s.count*i):S=new c(a,d,s.count*i),R=new f.BufferAttribute(S,i,y);if(s.sparse!==void 0){const x=v.SCALAR,L=F[s.sparse.indices.componentType],E=s.sparse.indices.byteOffset||0,_=s.sparse.values.byteOffset||0,C=new L(n[1],E,s.sparse.count*x),I=new c(n[2],_,s.sparse.count*i);a!==null&&(R=new f.BufferAttribute(R.array.slice(),R.itemSize,R.normalized));for(let M=0,p=C.length;M<p;M++){const m=C[M];if(R.setX(m,I[M*i]),i>=2&&R.setY(m,I[M*i+1]),i>=3&&R.setZ(m,I[M*i+2]),i>=4&&R.setW(m,I[M*i+3]),i>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return R})}loadTexture(e){const t=this.json,o=this.options,r=t.textures[e].source,n=t.images[r];let a=this.textureLoader;if(n.uri){const i=o.manager.getHandler(n.uri);i!==null&&(a=i)}return this.loadTextureImage(e,r,a)}loadTextureImage(e,t,o){const s=this,r=this.json,n=r.textures[e],a=r.images[t],i=(a.uri||a.bufferView)+":"+n.sampler;if(this.textureCache[i])return this.textureCache[i];const c=this.loadImageSource(t,o).then(function(l){l.flipY=!1,l.name=n.name||a.name||"",l.name===""&&typeof a.uri=="string"&&a.uri.startsWith("data:image/")===!1&&(l.name=a.uri);const d=(r.samplers||{})[n.sampler]||{};return l.magFilter=ee[d.magFilter]||f.LinearFilter,l.minFilter=ee[d.minFilter]||f.LinearMipmapLinearFilter,l.wrapS=te[d.wrapS]||f.RepeatWrapping,l.wrapT=te[d.wrapT]||f.RepeatWrapping,s.associations.set(l,{textures:e}),l}).catch(function(){return null});return this.textureCache[i]=c,c}loadImageSource(e,t){const o=this,s=this.json,r=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(u=>u.clone());const n=s.images[e],a=self.URL||self.webkitURL;let i=n.uri||"",c=!1;if(n.bufferView!==void 0)i=o.getDependency("bufferView",n.bufferView).then(function(u){c=!0;const d=new Blob([u],{type:n.mimeType});return i=a.createObjectURL(d),i});else if(n.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const l=Promise.resolve(i).then(function(u){return new Promise(function(d,g){let y=d;t.isImageBitmapLoader===!0&&(y=function(S){const R=new f.Texture(S);R.needsUpdate=!0,d(R)}),t.load(f.LoaderUtils.resolveURL(u,r.path),y,void 0,g)})}).then(function(u){return c===!0&&a.revokeObjectURL(i),u.userData.mimeType=n.mimeType||je(n.uri),u}).catch(function(u){throw console.error("THREE.GLTFLoader: Couldn't load texture",i),u});return this.sourceCache[e]=l,l}assignTexture(e,t,o,s){const r=this;return this.getDependency("texture",o.index).then(function(n){if(!n)return null;if(o.texCoord!==void 0&&o.texCoord>0&&(n=n.clone(),n.channel=o.texCoord),r.extensions[b.KHR_TEXTURE_TRANSFORM]){const a=o.extensions!==void 0?o.extensions[b.KHR_TEXTURE_TRANSFORM]:void 0;if(a){const i=r.associations.get(n);n=r.extensions[b.KHR_TEXTURE_TRANSFORM].extendTexture(n,a),r.associations.set(n,i)}}return s!==void 0&&(n.colorSpace=s),e[t]=n,n})}assignFinalMaterial(e){const t=e.geometry;let o=e.material;const s=t.attributes.tangent===void 0,r=t.attributes.color!==void 0,n=t.attributes.normal===void 0;if(e.isPoints){const a="PointsMaterial:"+o.uuid;let i=this.cache.get(a);i||(i=new f.PointsMaterial,f.Material.prototype.copy.call(i,o),i.color.copy(o.color),i.map=o.map,i.sizeAttenuation=!1,this.cache.add(a,i)),o=i}else if(e.isLine){const a="LineBasicMaterial:"+o.uuid;let i=this.cache.get(a);i||(i=new f.LineBasicMaterial,f.Material.prototype.copy.call(i,o),i.color.copy(o.color),i.map=o.map,this.cache.add(a,i)),o=i}if(s||r||n){let a="ClonedMaterial:"+o.uuid+":";s&&(a+="derivative-tangents:"),r&&(a+="vertex-colors:"),n&&(a+="flat-shading:");let i=this.cache.get(a);i||(i=o.clone(),r&&(i.vertexColors=!0),n&&(i.flatShading=!0),s&&(i.normalScale&&(i.normalScale.y*=-1),i.clearcoatNormalScale&&(i.clearcoatNormalScale.y*=-1)),this.cache.add(a,i),this.associations.set(i,this.associations.get(o))),o=i}e.material=o}getMaterialType(){return f.MeshStandardMaterial}loadMaterial(e){const t=this,o=this.json,s=this.extensions,r=o.materials[e];let n;const a={},i=r.extensions||{},c=[];if(i[b.KHR_MATERIALS_UNLIT]){const u=s[b.KHR_MATERIALS_UNLIT];n=u.getMaterialType(),c.push(u.extendParams(a,r,t))}else{const u=r.pbrMetallicRoughness||{};if(a.color=new f.Color(1,1,1),a.opacity=1,Array.isArray(u.baseColorFactor)){const d=u.baseColorFactor;a.color.setRGB(d[0],d[1],d[2],f.LinearSRGBColorSpace),a.opacity=d[3]}u.baseColorTexture!==void 0&&c.push(t.assignTexture(a,"map",u.baseColorTexture,f.SRGBColorSpace)),a.metalness=u.metallicFactor!==void 0?u.metallicFactor:1,a.roughness=u.roughnessFactor!==void 0?u.roughnessFactor:1,u.metallicRoughnessTexture!==void 0&&(c.push(t.assignTexture(a,"metalnessMap",u.metallicRoughnessTexture)),c.push(t.assignTexture(a,"roughnessMap",u.metallicRoughnessTexture))),n=this._invokeOne(function(d){return d.getMaterialType&&d.getMaterialType(e)}),c.push(Promise.all(this._invokeAll(function(d){return d.extendMaterialParams&&d.extendMaterialParams(e,a)})))}r.doubleSided===!0&&(a.side=f.DoubleSide);const l=r.alphaMode||j.OPAQUE;if(l===j.BLEND?(a.transparent=!0,a.depthWrite=!1):(a.transparent=!1,l===j.MASK&&(a.alphaTest=r.alphaCutoff!==void 0?r.alphaCutoff:.5)),r.normalTexture!==void 0&&n!==f.MeshBasicMaterial&&(c.push(t.assignTexture(a,"normalMap",r.normalTexture)),a.normalScale=new f.Vector2(1,1),r.normalTexture.scale!==void 0)){const u=r.normalTexture.scale;a.normalScale.set(u,u)}if(r.occlusionTexture!==void 0&&n!==f.MeshBasicMaterial&&(c.push(t.assignTexture(a,"aoMap",r.occlusionTexture)),r.occlusionTexture.strength!==void 0&&(a.aoMapIntensity=r.occlusionTexture.strength)),r.emissiveFactor!==void 0&&n!==f.MeshBasicMaterial){const u=r.emissiveFactor;a.emissive=new f.Color().setRGB(u[0],u[1],u[2],f.LinearSRGBColorSpace)}return r.emissiveTexture!==void 0&&n!==f.MeshBasicMaterial&&c.push(t.assignTexture(a,"emissiveMap",r.emissiveTexture,f.SRGBColorSpace)),Promise.all(c).then(function(){const u=new n(a);return r.name&&(u.name=r.name),O(u,r),t.associations.set(u,{materials:e}),r.extensions&&P(s,u,r),u})}createUniqueName(e){const t=f.PropertyBinding.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,o=this.extensions,s=this.primitiveCache;function r(a){return o[b.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(a,t).then(function(i){return ne(i,a,t)})}const n=[];for(let a=0,i=e.length;a<i;a++){const c=e[a],l=ve(c),u=s[l];if(u)n.push(u.promise);else{let d;c.extensions&&c.extensions[b.KHR_DRACO_MESH_COMPRESSION]?d=r(c):d=ne(new f.BufferGeometry,c,t),s[l]={primitive:c,promise:d},n.push(d)}}return Promise.all(n)}loadMesh(e){const t=this,o=this.json,s=this.extensions,r=o.meshes[e],n=r.primitives,a=[];for(let i=0,c=n.length;i<c;i++){const l=n[i].material===void 0?Ue(this.cache):this.getDependency("material",n[i].material);a.push(l)}return a.push(t.loadGeometries(n)),Promise.all(a).then(function(i){const c=i.slice(0,i.length-1),l=i[i.length-1],u=[];for(let g=0,y=l.length;g<y;g++){const S=l[g],R=n[g];let x;const L=c[g];if(R.mode===N.TRIANGLES||R.mode===N.TRIANGLE_STRIP||R.mode===N.TRIANGLE_FAN||R.mode===void 0)x=r.isSkinnedMesh===!0?new f.SkinnedMesh(S,L):new f.Mesh(S,L),x.isSkinnedMesh===!0&&x.normalizeSkinWeights(),R.mode===N.TRIANGLE_STRIP?x.geometry=Z(x.geometry,f.TriangleStripDrawMode):R.mode===N.TRIANGLE_FAN&&(x.geometry=Z(x.geometry,f.TriangleFanDrawMode));else if(R.mode===N.LINES)x=new f.LineSegments(S,L);else if(R.mode===N.LINE_STRIP)x=new f.Line(S,L);else if(R.mode===N.LINE_LOOP)x=new f.LineLoop(S,L);else if(R.mode===N.POINTS)x=new f.Points(S,L);else throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+R.mode);Object.keys(x.geometry.morphAttributes).length>0&&He(x,r),x.name=t.createUniqueName(r.name||"mesh_"+e),O(x,r),R.extensions&&P(s,x,R),t.assignFinalMaterial(x),u.push(x)}for(let g=0,y=u.length;g<y;g++)t.associations.set(u[g],{meshes:e,primitives:g});if(u.length===1)return r.extensions&&P(s,u[0],r),u[0];const d=new f.Group;r.extensions&&P(s,d,r),t.associations.set(d,{meshes:e});for(let g=0,y=u.length;g<y;g++)d.add(u[g]);return d})}loadCamera(e){let t;const o=this.json.cameras[e],s=o[o.type];if(!s){console.warn("THREE.GLTFLoader: Missing camera parameters.");return}return o.type==="perspective"?t=new f.PerspectiveCamera(f.MathUtils.radToDeg(s.yfov),s.aspectRatio||1,s.znear||1,s.zfar||2e6):o.type==="orthographic"&&(t=new f.OrthographicCamera(-s.xmag,s.xmag,s.ymag,-s.ymag,s.znear,s.zfar)),o.name&&(t.name=this.createUniqueName(o.name)),O(t,o),Promise.resolve(t)}loadSkin(e){const t=this.json.skins[e],o=[];for(let s=0,r=t.joints.length;s<r;s++)o.push(this._loadNodeShallow(t.joints[s]));return t.inverseBindMatrices!==void 0?o.push(this.getDependency("accessor",t.inverseBindMatrices)):o.push(null),Promise.all(o).then(function(s){const r=s.pop(),n=s,a=[],i=[];for(let c=0,l=n.length;c<l;c++){const u=n[c];if(u){a.push(u);const d=new f.Matrix4;r!==null&&d.fromArray(r.array,c*16),i.push(d)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',t.joints[c])}return new f.Skeleton(a,i)})}loadAnimation(e){const t=this.json,o=this,s=t.animations[e],r=s.name?s.name:"animation_"+e,n=[],a=[],i=[],c=[],l=[];for(let u=0,d=s.channels.length;u<d;u++){const g=s.channels[u],y=s.samplers[g.sampler],S=g.target,R=S.node,x=s.parameters!==void 0?s.parameters[y.input]:y.input,L=s.parameters!==void 0?s.parameters[y.output]:y.output;S.node!==void 0&&(n.push(this.getDependency("node",R)),a.push(this.getDependency("accessor",x)),i.push(this.getDependency("accessor",L)),c.push(y),l.push(S))}return Promise.all([Promise.all(n),Promise.all(a),Promise.all(i),Promise.all(c),Promise.all(l)]).then(function(u){const d=u[0],g=u[1],y=u[2],S=u[3],R=u[4],x=[];for(let L=0,E=d.length;L<E;L++){const _=d[L],C=g[L],I=y[L],M=S[L],p=R[L];if(_===void 0)continue;_.updateMatrix&&_.updateMatrix();const m=o._createAnimationTracks(_,C,I,M,p);if(m)for(let A=0;A<m.length;A++)x.push(m[A])}return new f.AnimationClip(r,void 0,x)})}createNodeMesh(e){const t=this.json,o=this,s=t.nodes[e];return s.mesh===void 0?null:o.getDependency("mesh",s.mesh).then(function(r){const n=o._getNodeRef(o.meshCache,s.mesh,r);return s.weights!==void 0&&n.traverse(function(a){if(a.isMesh)for(let i=0,c=s.weights.length;i<c;i++)a.morphTargetInfluences[i]=s.weights[i]}),n})}loadNode(e){const t=this.json,o=this,s=t.nodes[e],r=o._loadNodeShallow(e),n=[],a=s.children||[];for(let c=0,l=a.length;c<l;c++)n.push(o.getDependency("node",a[c]));const i=s.skin===void 0?Promise.resolve(null):o.getDependency("skin",s.skin);return Promise.all([r,Promise.all(n),i]).then(function(c){const l=c[0],u=c[1],d=c[2];d!==null&&l.traverse(function(g){g.isSkinnedMesh&&g.bind(d,Ke)});for(let g=0,y=u.length;g<y;g++)l.add(u[g]);return l})}_loadNodeShallow(e){const t=this.json,o=this.extensions,s=this;if(this.nodeCache[e]!==void 0)return this.nodeCache[e];const r=t.nodes[e],n=r.name?s.createUniqueName(r.name):"",a=[],i=s._invokeOne(function(c){return c.createNodeMesh&&c.createNodeMesh(e)});return i&&a.push(i),r.camera!==void 0&&a.push(s.getDependency("camera",r.camera).then(function(c){return s._getNodeRef(s.cameraCache,r.camera,c)})),s._invokeAll(function(c){return c.createNodeAttachment&&c.createNodeAttachment(e)}).forEach(function(c){a.push(c)}),this.nodeCache[e]=Promise.all(a).then(function(c){let l;if(r.isBone===!0?l=new f.Bone:c.length>1?l=new f.Group:c.length===1?l=c[0]:l=new f.Object3D,l!==c[0])for(let u=0,d=c.length;u<d;u++)l.add(c[u]);if(r.name&&(l.userData.name=r.name,l.name=n),O(l,r),r.extensions&&P(o,l,r),r.matrix!==void 0){const u=new f.Matrix4;u.fromArray(r.matrix),l.applyMatrix4(u)}else r.translation!==void 0&&l.position.fromArray(r.translation),r.rotation!==void 0&&l.quaternion.fromArray(r.rotation),r.scale!==void 0&&l.scale.fromArray(r.scale);return s.associations.has(l)||s.associations.set(l,{}),s.associations.get(l).nodes=e,l}),this.nodeCache[e]}loadScene(e){const t=this.extensions,o=this.json.scenes[e],s=this,r=new f.Group;o.name&&(r.name=s.createUniqueName(o.name)),O(r,o),o.extensions&&P(t,r,o);const n=o.nodes||[],a=[];for(let i=0,c=n.length;i<c;i++)a.push(s.getDependency("node",n[i]));return Promise.all(a).then(function(i){for(let l=0,u=i.length;l<u;l++)r.add(i[l]);const c=l=>{const u=new Map;for(const[d,g]of s.associations)(d instanceof f.Material||d instanceof f.Texture)&&u.set(d,g);return l.traverse(d=>{const g=s.associations.get(d);g!=null&&u.set(d,g)}),u};return s.associations=c(r),r})}_createAnimationTracks(e,t,o,s,r){const n=[],a=e.name?e.name:e.uuid,i=[];D[r.path]===D.weights?e.traverse(function(d){d.morphTargetInfluences&&i.push(d.name?d.name:d.uuid)}):i.push(a);let c;switch(D[r.path]){case D.weights:c=f.NumberKeyframeTrack;break;case D.rotation:c=f.QuaternionKeyframeTrack;break;case D.position:case D.scale:c=f.VectorKeyframeTrack;break;default:switch(o.itemSize){case 1:c=f.NumberKeyframeTrack;break;case 2:case 3:default:c=f.VectorKeyframeTrack;break}break}const l=s.interpolation!==void 0?Ge[s.interpolation]:f.InterpolateLinear,u=this._getArrayFromAccessor(o);for(let d=0,g=i.length;d<g;d++){const y=new c(i[d]+"."+D[r.path],t.array,u,l);s.interpolation==="CUBICSPLINE"&&this._createCubicSplineTrackInterpolant(y),n.push(y)}return n}_getArrayFromAccessor(e){let t=e.array;if(e.normalized){const o=q(t.constructor),s=new Float32Array(t.length);for(let r=0,n=t.length;r<n;r++)s[r]=t[r]*o;t=s}return t}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(o){const s=this instanceof f.QuaternionKeyframeTrack?Fe:re;return new s(this.times,this.values,this.getValueSize()/3,o)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function We(h,e,t){const o=e.attributes,s=new f.Box3;if(o.POSITION!==void 0){const a=t.json.accessors[o.POSITION],i=a.min,c=a.max;if(i!==void 0&&c!==void 0){if(s.set(new f.Vector3(i[0],i[1],i[2]),new f.Vector3(c[0],c[1],c[2])),a.normalized){const l=q(F[a.componentType]);s.min.multiplyScalar(l),s.max.multiplyScalar(l)}}else{console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");return}}else return;const r=e.targets;if(r!==void 0){const a=new f.Vector3,i=new f.Vector3;for(let c=0,l=r.length;c<l;c++){const u=r[c];if(u.POSITION!==void 0){const d=t.json.accessors[u.POSITION],g=d.min,y=d.max;if(g!==void 0&&y!==void 0){if(i.setX(Math.max(Math.abs(g[0]),Math.abs(y[0]))),i.setY(Math.max(Math.abs(g[1]),Math.abs(y[1]))),i.setZ(Math.max(Math.abs(g[2]),Math.abs(y[2]))),d.normalized){const S=q(F[d.componentType]);i.multiplyScalar(S)}a.max(i)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}s.expandByVector(a)}h.boundingBox=s;const n=new f.Sphere;s.getCenter(n.center),n.radius=s.min.distanceTo(s.max)/2,h.boundingSphere=n}function ne(h,e,t){const o=e.attributes,s=[];function r(n,a){return t.getDependency("accessor",n).then(function(i){h.setAttribute(a,i)})}for(const n in o){const a=X[n]||n.toLowerCase();a in h.attributes||s.push(r(o[n],a))}if(e.indices!==void 0&&!h.index){const n=t.getDependency("accessor",e.indices).then(function(a){h.setIndex(a)});s.push(n)}return f.ColorManagement.workingColorSpace!==f.LinearSRGBColorSpace&&"COLOR_0"in o&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${f.ColorManagement.workingColorSpace}" not supported.`),O(h,e),We(h,e,t),Promise.all(s).then(function(){return e.targets!==void 0?Be(h,e.targets,t):h})}class Xe{parse(e){const t={},o=e.split(`
2
- `);let s=null,r=t;const n=[t];for(const a of o)if(a.includes("=")){const i=a.split("="),c=i[0].trim(),l=i[1].trim();if(l.endsWith("{")){const u={};n.push(u),r[c]=u,r=u}else r[c]=l}else if(a.endsWith("{")){const i=r[s]||{};n.push(i),r[s]=i,r=i}else if(a.endsWith("}")){if(n.pop(),n.length===0)continue;r=n[n.length-1]}else if(a.endsWith("(")){const i={};n.push(i),s=a.split("(")[0].trim()||s,r[s]=i,r=i}else a.endsWith(")")?(n.pop(),r=n[n.length-1]):s=a.trim();return t}}class qe extends f.Loader{constructor(e){super(e)}load(e,t,o,s){const r=this,n=new f.FileLoader(r.manager);n.setPath(r.path),n.setResponseType("arraybuffer"),n.setRequestHeader(r.requestHeader),n.setWithCredentials(r.withCredentials),n.load(e,function(a){try{t(r.parse(a))}catch(i){s?s(i):console.error(i),r.manager.itemError(e)}},o,s)}parse(e){const t=new Xe;function o(p){const m={};new f.FileLoader().setResponseType("arraybuffer");for(const T in p){if(T.endsWith("png")){const w=new Blob([p[T]],{type:{type:"image/png"}});m[T]=URL.createObjectURL(w)}if(T.endsWith("usd")||T.endsWith("usda")){if(s(p[T])){console.warn("THREE.USDZLoader: Crate files (.usdc or binary .usd) are not supported.");continue}const w=H.strFromU8(p[T]);m[T]=t.parse(w)}}return m}function s(p){const m=p.slice(0,7),A=new Uint8Array([80,88,82,45,85,83,68,67]);return m.every((T,w)=>T===A[w])}function r(p){if(p.length<1)return;const m=Object.keys(p)[0];let A=!1;if(m.endsWith("usda"))return p[m];if(m.endsWith("usdc"))A=!0;else if(m.endsWith("usd"))if(s(p[m]))A=!0;else return p[m];A&&console.warn("THREE.USDZLoader: Crate files (.usdc or binary .usd) are not supported.")}const n=H.unzipSync(new Uint8Array(e)),a=o(n),i=r(n);if(i===void 0)return console.warn("THREE.USDZLoader: No usda file found."),new f.Group;const c=H.strFromU8(i),l=t.parse(c);function u(p){if(p){if("prepend references"in p){const A=p["prepend references"].split("@"),T=A[1].replace(/^.\//,""),w=A[2].replace(/^<\//,"").replace(/>$/,"");return d(a[T],w)}return d(p)}}function d(p,m){if(p){if(m!==void 0){const A=`def Mesh "${m}"`;if(A in p)return p[A]}for(const A in p){const T=p[A];if(A.startsWith("def Mesh"))return"point3f[] points"in p&&(T["point3f[] points"]=p["point3f[] points"]),"texCoord2f[] primvars:st"in p&&(T["texCoord2f[] primvars:st"]=p["texCoord2f[] primvars:st"]),"int[] primvars:st:indices"in p&&(T["int[] primvars:st:indices"]=p["int[] primvars:st:indices"]),T;if(typeof T=="object"){const w=d(T);if(w)return w}}}}function g(p){if(!p)return;let m=new f.BufferGeometry;if("int[] faceVertexIndices"in p){const A=JSON.parse(p["int[] faceVertexIndices"]);m.setIndex(A)}if("point3f[] points"in p){const A=JSON.parse(p["point3f[] points"].replace(/[()]*/g,"")),T=new f.BufferAttribute(new Float32Array(A),3);m.setAttribute("position",T)}if("normal3f[] normals"in p){const A=JSON.parse(p["normal3f[] normals"].replace(/[()]*/g,"")),T=new f.BufferAttribute(new Float32Array(A),3);m.setAttribute("normal",T)}else m.computeVertexNormals();if("float2[] primvars:st"in p&&(p["texCoord2f[] primvars:st"]=p["float2[] primvars:st"]),"texCoord2f[] primvars:st"in p){const A=JSON.parse(p["texCoord2f[] primvars:st"].replace(/[()]*/g,"")),T=new f.BufferAttribute(new Float32Array(A),2);if("int[] primvars:st:indices"in p){m=m.toNonIndexed();const w=JSON.parse(p["int[] primvars:st:indices"]);m.setAttribute("uv",y(T,w))}else m.setAttribute("uv",T)}return m}function y(p,m){const A=p.array,T=p.itemSize,w=new A.constructor(m.length*T);let z=0,ae=0;for(let B=0,ce=m.length;B<ce;B++){z=m[B]*T;for(let Y=0;Y<T;Y++)w[ae++]=A[z++]}return new f.BufferAttribute(w,T)}function S(p){if(p){if("rel material:binding"in p){const T=p["rel material:binding"].replace(/^<\//,"").replace(/>$/,"").split("/");return R(l,` "${T[1]}"`)}return R(p)}}function R(p,m=""){for(const A in p){const T=p[A];if(A.startsWith("def Material"+m))return T;if(typeof T=="object"){const w=R(T,m);if(w)return w}}}function x(p,m){m["float inputs:rotation"]&&(p.rotation=parseFloat(m["float inputs:rotation"])),m["float2 inputs:scale"]&&(p.repeat=new f.Vector2().fromArray(JSON.parse("["+m["float2 inputs:scale"].replace(/[()]*/g,"")+"]"))),m["float2 inputs:translation"]&&(p.offset=new f.Vector2().fromArray(JSON.parse("["+m["float2 inputs:translation"].replace(/[()]*/g,"")+"]")))}function L(p){const m=new f.MeshPhysicalMaterial;if(p!==void 0){if('def Shader "PreviewSurface"'in p){const A=p['def Shader "PreviewSurface"'];if("color3f inputs:diffuseColor.connect"in A){const T=A["color3f inputs:diffuseColor.connect"],w=E(l,/(\w+).output/.exec(T)[1]);m.map=_(w),m.map.colorSpace=f.SRGBColorSpace,'def Shader "Transform2d_diffuse"'in p&&x(m.map,p['def Shader "Transform2d_diffuse"'])}else if("color3f inputs:diffuseColor"in A){const T=A["color3f inputs:diffuseColor"].replace(/[()]*/g,"");m.color.fromArray(JSON.parse("["+T+"]"))}if("color3f inputs:emissiveColor.connect"in A){const T=A["color3f inputs:emissiveColor.connect"],w=E(l,/(\w+).output/.exec(T)[1]);m.emissiveMap=_(w),m.emissiveMap.colorSpace=f.SRGBColorSpace,m.emissive.set(16777215),'def Shader "Transform2d_emissive"'in p&&x(m.emissiveMap,p['def Shader "Transform2d_emissive"'])}else if("color3f inputs:emissiveColor"in A){const T=A["color3f inputs:emissiveColor"].replace(/[()]*/g,"");m.emissive.fromArray(JSON.parse("["+T+"]"))}if("normal3f inputs:normal.connect"in A){const T=A["normal3f inputs:normal.connect"],w=E(l,/(\w+).output/.exec(T)[1]);m.normalMap=_(w),m.normalMap.colorSpace=f.NoColorSpace,'def Shader "Transform2d_normal"'in p&&x(m.normalMap,p['def Shader "Transform2d_normal"'])}if("float inputs:roughness.connect"in A){const T=A["float inputs:roughness.connect"],w=E(l,/(\w+).output/.exec(T)[1]);m.roughness=1,m.roughnessMap=_(w),m.roughnessMap.colorSpace=f.NoColorSpace,'def Shader "Transform2d_roughness"'in p&&x(m.roughnessMap,p['def Shader "Transform2d_roughness"'])}else"float inputs:roughness"in A&&(m.roughness=parseFloat(A["float inputs:roughness"]));if("float inputs:metallic.connect"in A){const T=A["float inputs:metallic.connect"],w=E(l,/(\w+).output/.exec(T)[1]);m.metalness=1,m.metalnessMap=_(w),m.metalnessMap.colorSpace=f.NoColorSpace,'def Shader "Transform2d_metallic"'in p&&x(m.metalnessMap,p['def Shader "Transform2d_metallic"'])}else"float inputs:metallic"in A&&(m.metalness=parseFloat(A["float inputs:metallic"]));if("float inputs:clearcoat.connect"in A){const T=A["float inputs:clearcoat.connect"],w=E(l,/(\w+).output/.exec(T)[1]);m.clearcoat=1,m.clearcoatMap=_(w),m.clearcoatMap.colorSpace=f.NoColorSpace,'def Shader "Transform2d_clearcoat"'in p&&x(m.clearcoatMap,p['def Shader "Transform2d_clearcoat"'])}else"float inputs:clearcoat"in A&&(m.clearcoat=parseFloat(A["float inputs:clearcoat"]));if("float inputs:clearcoatRoughness.connect"in A){const T=A["float inputs:clearcoatRoughness.connect"],w=E(l,/(\w+).output/.exec(T)[1]);m.clearcoatRoughness=1,m.clearcoatRoughnessMap=_(w),m.clearcoatRoughnessMap.colorSpace=f.NoColorSpace,'def Shader "Transform2d_clearcoatRoughness"'in p&&x(m.clearcoatRoughnessMap,p['def Shader "Transform2d_clearcoatRoughness"'])}else"float inputs:clearcoatRoughness"in A&&(m.clearcoatRoughness=parseFloat(A["float inputs:clearcoatRoughness"]));if("float inputs:ior"in A&&(m.ior=parseFloat(A["float inputs:ior"])),"float inputs:occlusion.connect"in A){const T=A["float inputs:occlusion.connect"],w=E(l,/(\w+).output/.exec(T)[1]);m.aoMap=_(w),m.aoMap.colorSpace=f.NoColorSpace,'def Shader "Transform2d_occlusion"'in p&&x(m.aoMap,p['def Shader "Transform2d_occlusion"'])}}if('def Shader "diffuseColor_texture"'in p){const A=p['def Shader "diffuseColor_texture"'];m.map=_(A),m.map.colorSpace=f.SRGBColorSpace}if('def Shader "normal_texture"'in p){const A=p['def Shader "normal_texture"'];m.normalMap=_(A),m.normalMap.colorSpace=f.NoColorSpace}}return m}function E(p,m){for(const A in p){const T=p[A];if(A.startsWith(`def Shader "${m}"`))return T;if(typeof T=="object"){const w=E(T,m);if(w)return w}}}function _(p){if("asset inputs:file"in p){const m=p["asset inputs:file"].replace(/@*/g,""),T=new f.TextureLoader().load(a[m]),w={'"clamp"':f.ClampToEdgeWrapping,'"mirror"':f.MirroredRepeatWrapping,'"repeat"':f.RepeatWrapping};return"token inputs:wrapS"in p&&(T.wrapS=w[p["token inputs:wrapS"]]),"token inputs:wrapT"in p&&(T.wrapT=w[p["token inputs:wrapT"]]),T}return null}function C(p){const m=g(u(p)),A=L(S(p)),T=m?new f.Mesh(m,A):new f.Object3D;if("matrix4d xformOp:transform"in p){const w=JSON.parse("["+p["matrix4d xformOp:transform"].replace(/[()]*/g,"")+"]");T.matrix.fromArray(w),T.matrix.decompose(T.position,T.quaternion,T.scale)}return T}function I(p,m){for(const A in p)if(A.startsWith("def Scope"))I(p[A],m);else if(A.startsWith("def Xform")){const T=C(p[A]);/def Xform "(\w+)"/.test(A)&&(T.name=/def Xform "(\w+)"/.exec(A)[1]),m.add(T),I(p[A],T)}}const M=new f.Group;return I(l,M),M}}const V=new WeakMap;class ze extends f.Loader{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,o,s){const r=new f.FileLoader(this.manager);r.setPath(this.path),r.setResponseType("arraybuffer"),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(e,n=>{this.parse(n,t,s)},o,s)}parse(e,t,o=()=>{}){this.decodeDracoFile(e,t,null,null,f.SRGBColorSpace).catch(o)}decodeDracoFile(e,t,o,s,r=f.LinearSRGBColorSpace,n=()=>{}){const a={attributeIDs:o||this.defaultAttributeIDs,attributeTypes:s||this.defaultAttributeTypes,useUniqueIDs:!!o,vertexColorSpace:r};return this.decodeGeometry(e,a).then(t).catch(n)}decodeGeometry(e,t){const o=JSON.stringify(t);if(V.has(e)){const i=V.get(e);if(i.key===o)return i.promise;if(e.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let s;const r=this.workerNextTaskID++,n=e.byteLength,a=this._getWorker(r,n).then(i=>(s=i,new Promise((c,l)=>{s._callbacks[r]={resolve:c,reject:l},s.postMessage({type:"decode",id:r,taskConfig:t,buffer:e},[e])}))).then(i=>this._createGeometry(i.geometry));return a.catch(()=>!0).then(()=>{s&&r&&this._releaseTask(s,r)}),V.set(e,{key:o,promise:a}),a}_createGeometry(e){const t=new f.BufferGeometry;e.index&&t.setIndex(new f.BufferAttribute(e.index.array,1));for(let o=0;o<e.attributes.length;o++){const s=e.attributes[o],r=s.name,n=s.array,a=s.itemSize,i=new f.BufferAttribute(n,a);r==="color"&&(this._assignVertexColorSpace(i,s.vertexColorSpace),i.normalized=!(n instanceof Float32Array)),t.setAttribute(r,i)}return t}_assignVertexColorSpace(e,t){if(t!==f.SRGBColorSpace)return;const o=new f.Color;for(let s=0,r=e.count;s<r;s++)o.fromBufferAttribute(e,s).convertSRGBToLinear(),e.setXYZ(s,o.r,o.g,o.b)}_loadLibrary(e,t){const o=new f.FileLoader(this.manager);return o.setPath(this.decoderPath),o.setResponseType(t),o.setWithCredentials(this.withCredentials),new Promise((s,r)=>{o.load(e,s,void 0,r)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e=typeof WebAssembly!="object"||this.decoderConfig.type==="js",t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(o=>{const s=o[0];e||(this.decoderConfig.wasmBinary=o[1]);const r=Ye.toString(),n=["/* draco decoder */",s,"","/* worker */",r.substring(r.indexOf("{")+1,r.lastIndexOf("}"))].join(`
3
- `);this.workerSourceURL=URL.createObjectURL(new Blob([n]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){const s=new Worker(this.workerSourceURL);s._callbacks={},s._taskCosts={},s._taskLoad=0,s.postMessage({type:"init",decoderConfig:this.decoderConfig}),s.onmessage=function(r){const n=r.data;switch(n.type){case"decode":s._callbacks[n.id].resolve(n);break;case"error":s._callbacks[n.id].reject(n);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+n.type+'"')}},this.workerPool.push(s)}else this.workerPool.sort(function(s,r){return s._taskLoad>r._taskLoad?-1:1});const o=this.workerPool[this.workerPool.length-1];return o._taskCosts[e]=t,o._taskLoad+=t,o})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,this.workerSourceURL!==""&&URL.revokeObjectURL(this.workerSourceURL),this}}function Ye(){let h,e;onmessage=function(n){const a=n.data;switch(a.type){case"init":h=a.decoderConfig,e=new Promise(function(l){h.onModuleLoaded=function(u){l({draco:u})},DracoDecoderModule(h)});break;case"decode":const i=a.buffer,c=a.taskConfig;e.then(l=>{const u=l.draco,d=new u.Decoder;try{const g=t(u,d,new Int8Array(i),c),y=g.attributes.map(S=>S.array.buffer);g.index&&y.push(g.index.array.buffer),self.postMessage({type:"decode",id:a.id,geometry:g},y)}catch(g){console.error(g),self.postMessage({type:"error",id:a.id,error:g.message})}finally{u.destroy(d)}});break}};function t(n,a,i,c){const l=c.attributeIDs,u=c.attributeTypes;let d,g;const y=a.GetEncodedGeometryType(i);if(y===n.TRIANGULAR_MESH)d=new n.Mesh,g=a.DecodeArrayToMesh(i,i.byteLength,d);else if(y===n.POINT_CLOUD)d=new n.PointCloud,g=a.DecodeArrayToPointCloud(i,i.byteLength,d);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!g.ok()||d.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+g.error_msg());const S={index:null,attributes:[]};for(const R in l){const x=self[u[R]];let L,E;if(c.useUniqueIDs)E=l[R],L=a.GetAttributeByUniqueId(d,E);else{if(E=a.GetAttributeId(d,n[l[R]]),E===-1)continue;L=a.GetAttribute(d,E)}const _=s(n,a,d,R,x,L);R==="color"&&(_.vertexColorSpace=c.vertexColorSpace),S.attributes.push(_)}return y===n.TRIANGULAR_MESH&&(S.index=o(n,a,d)),n.destroy(d),S}function o(n,a,i){const l=i.num_faces()*3,u=l*4,d=n._malloc(u);a.GetTrianglesUInt32Array(i,u,d);const g=new Uint32Array(n.HEAPF32.buffer,d,l).slice();return n._free(d),{array:g,itemSize:1}}function s(n,a,i,c,l,u){const d=u.num_components(),y=i.num_points()*d,S=y*l.BYTES_PER_ELEMENT,R=r(n,l),x=n._malloc(S);a.GetAttributeDataArrayForAllPoints(i,u,R,S,x);const L=new l(n.HEAPF32.buffer,x,y).slice();return n._free(x),{name:c,array:L,itemSize:d}}function r(n,a){switch(a){case Float32Array:return n.DT_FLOAT32;case Int8Array:return n.DT_INT8;case Int16Array:return n.DT_INT16;case Int32Array:return n.DT_INT32;case Uint8Array:return n.DT_UINT8;case Uint16Array:return n.DT_UINT16;case Uint32Array:return n.DT_UINT32}}}function oe(){let h,e;onmessage=function(n){const a=n.data;switch(a.type){case"init":h=a.decoderConfig,e=new Promise(function(l){h.onModuleLoaded=function(u){l({draco:u})},DracoDecoderModule(h)});break;case"decode":const i=a.buffer,c=a.taskConfig;e.then(l=>{const u=l.draco,d=new u.Decoder;try{const g=t(u,d,new Int8Array(i),c),y=g.attributes.map(S=>S.array.buffer);g.index&&y.push(g.index.array.buffer),self.postMessage({type:"decode",id:a.id,geometry:g},y)}catch(g){console.error(g),self.postMessage({type:"error",id:a.id,error:g.message})}finally{u.destroy(d)}});break}};function t(n,a,i,c){const l=c.attributeIDs,u=c.attributeTypes;let d,g;const y=a.GetEncodedGeometryType(i);if(y===n.TRIANGULAR_MESH)d=new n.Mesh,g=a.DecodeArrayToMesh(i,i.byteLength,d);else if(y===n.POINT_CLOUD)d=new n.PointCloud,g=a.DecodeArrayToPointCloud(i,i.byteLength,d);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!g.ok()||d.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+g.error_msg());const S={index:null,attributes:[]};for(const R in l){const x=self[u[R]];let L,E;if(c.useUniqueIDs)E=l[R],L=a.GetAttributeByUniqueId(d,E);else{if(E=a.GetAttributeId(d,n[l[R]]),E===-1)continue;L=a.GetAttribute(d,E)}const _=s(n,a,d,R,x,L);R==="color"&&(_.vertexColorSpace=c.vertexColorSpace),S.attributes.push(_)}return y===n.TRIANGULAR_MESH&&(S.index=o(n,a,d)),n.destroy(d),S}function o(n,a,i){const l=i.num_faces()*3,u=l*4,d=n._malloc(u);a.GetTrianglesUInt32Array(i,u,d);const g=new Uint32Array(n.HEAPF32.buffer,d,l).slice();return n._free(d),{array:g,itemSize:1}}function s(n,a,i,c,l,u){const d=u.num_components(),y=i.num_points()*d,S=y*l.BYTES_PER_ELEMENT,R=r(n,l),x=n._malloc(S);a.GetAttributeDataArrayForAllPoints(i,u,R,S,x);const L=new l(n.HEAPF32.buffer,x,y).slice();return n._free(x),{name:c,array:L,itemSize:d}}function r(n,a){switch(a){case Float32Array:return n.DT_FLOAT32;case Int8Array:return n.DT_INT8;case Int16Array:return n.DT_INT16;case Int32Array:return n.DT_INT32;case Uint8Array:return n.DT_UINT8;case Uint16Array:return n.DT_UINT16;case Uint32Array:return n.DT_UINT32}}}const W={LOAD_DRACO_JS_DECODER:async()=>(await Promise.resolve().then(()=>require("./draco_decoder-DvYjcLz_.cjs"))).default,LOAD_DRACO_WASM_WRAPPER:async()=>(await Promise.resolve().then(()=>require("./draco_wasm_wrapper-FoEVV9af.cjs"))).default,LOAD_DRACO_WASM_DECODER:async()=>{const h=(await Promise.resolve().then(()=>require("./draco_decoder-Bh9flJPu.cjs"))).default;return await(await fetch(h)).arrayBuffer()}};class ie extends ze{constructor(){super(...arguments);k(this,"decoderPending",null);k(this,"decoderConfig",{type:"js",wasmBinary:null});k(this,"workerSourceURL","")}async _initDecoder(){if(this.decoderPending)return this.decoderPending;const t=typeof WebAssembly!="object"||this.decoderConfig.type==="js",o=[];return t?o.push(W.LOAD_DRACO_JS_DECODER()):(o.push(W.LOAD_DRACO_WASM_WRAPPER()),o.push(W.LOAD_DRACO_WASM_DECODER())),this.decoderPending=Promise.all(o).then(s=>{const r=s[0];t||(this.decoderConfig.wasmBinary=s[1]);const n=oe.toString(),a=["/* draco decoder */",r,"","/* worker */",n.substring(n.indexOf("{")+1,n.lastIndexOf("}"))].join(`
4
- `);this.workerSourceURL=URL.createObjectURL(new Blob([a]))}),this.decoderPending}}class Je{constructor(){k(this,"_gltfLoader");k(this,"_usdzLoader");const e=new ie;e.setDecoderConfig({type:"wasm"}),this._gltfLoader=new de,this._gltfLoader.setDRACOLoader(e),this._usdzLoader=new qe}async load(e){const t=J.getFileTypeFromUri(e);if(t.length===0)throw new U.FileTypeError("No file extension found in URI","");if(!J.isFileTypeSupported(t))throw new U.FileTypeError(`Unsupported file type: ${t}. Supported types: ${fe.SUPPORTED_FILE_TYPES.join(", ")}`,t);const o=Q.AssetCache.read(e);if(o)return o.arrayBuffer?this._parse(o.arrayBuffer,t):o.promise.then(n=>this._parse(n,t));const r=await Q.AssetCache.create(e).load();return this._parse(r,t)}async _parse(e,t){try{switch(t){case"glb":case"gltf":return(await this._gltfLoader.parseAsync(e,"")).scene;case"usdz":return await this._usdzLoader.parse(e)}}catch(o){throw o instanceof Error?new U.ParseError(`Failed to parse ${t} file: ${o.message}`,o):new U.ParseError(`Failed to parse ${t} file`)}}}exports.AssetLoader=Je;exports.DRACOWorker=oe;exports.DracoLoader=ie;
@@ -1,29 +0,0 @@
1
- "use strict";var N=Object.defineProperty;var Z=(h,a,e)=>a in h?N(h,a,{enumerable:!0,configurable:!0,writable:!0,value:e}):h[a]=e;var i=(h,a,e)=>Z(h,typeof a!="symbol"?a+"":a,e);const s=require("three"),c=require("./PerspectiveCamera-iAsZqrnY.cjs");class T{constructor(){i(this,"isDIVEClock",!0);i(this,"_lastTime",0);i(this,"_isRunning",!1);i(this,"_tickers",[])}start(){this._isRunning||(this._isRunning=!0,this._lastTime=performance.now(),requestAnimationFrame(this._tick.bind(this)))}stop(){this._isRunning=!1}addTicker(a){this._tickers.find(e=>e.uuid===a.uuid)||this._tickers.push(a)}hasTicker(a){return this._tickers.find(e=>e.uuid===a.uuid)!==void 0}removeTicker(a){const e=this._tickers.findIndex(t=>t.uuid===a.uuid);e!==-1&&this._tickers.splice(e,1)}dispose(){this.stop(),this._tickers=[],this._isRunning=!1,this._lastTime=0}_tick(a){if(!this._isRunning)return;const e=(a-this._lastTime)/1e3;this._lastTime=a,this._tickers.forEach(t=>t.tick(e)),requestAnimationFrame(this._tick.bind(this))}}const P={canvas:void 0,antialias:!0,alpha:!0,powerPreference:"high-performance",precision:"highp",stencil:!1,depth:!0,logarithmicDepthBuffer:!0,shadows:!0,shadowQuality:"high"};class M{constructor(a,e,t){i(this,"isDIVERenderer",!0);i(this,"_webglrenderer");i(this,"_settings");this._scene=a,this._camera=e,this._settings={...P,...t??{}},this._webglrenderer=this._createWebGLRenderer()}get webglrenderer(){return this._webglrenderer}get canvas(){return this._webglrenderer.domElement}render(){this._webglrenderer.render(this._scene,this._camera)}onResize(a,e){this._webglrenderer.setSize(a,e,!1)}dispose(){this._webglrenderer.dispose()}setCanvas(a){this._webglrenderer.dispose(),this._settings.canvas=a,this._webglrenderer=this._createWebGLRenderer()}_createWebGLRenderer(){const a=new s.WebGLRenderer(this._settings);return a.shadowMap.enabled=this._settings.shadows,a.shadowMap.type=this._settings.shadowQuality==="high"?s.PCFSoftShadowMap:this._settings.shadowQuality==="medium"?s.PCFShadowMap:s.BasicShadowMap,a.setPixelRatio(window.devicePixelRatio),a}}const X=M;class V{constructor(a,e){i(this,"isDIVEResizeManager",!0);i(this,"_resizeObserver");i(this,"_width",0);i(this,"_height",0);this._renderer=a,this._camera=e,this._resizeObserver=new ResizeObserver(t=>{const n=t[0],{width:r,height:o}=n.contentRect;r===this._width&&o===this._height||(this._camera.onResize(r,o),this._renderer.onResize(r,o),this._width=r,this._height=o,this._renderer.render())}),this._observeCanvas(this._renderer.canvas)}setCanvas(a){this._resizeObserver.disconnect(),this._observeCanvas(a);const{width:e,height:t}=a.getBoundingClientRect();this._camera.onResize(e,t),this._renderer.onResize(e,t),this._width=e,this._height=t,this._renderer.render()}dispose(){this._resizeObserver.disconnect()}_observeCanvas(a){if(a.parentElement)this._resizeObserver.observe(a.parentElement);else{const e=setInterval(()=>{a.parentElement&&(this._resizeObserver.observe(a.parentElement),clearInterval(e))},16)}}}class b{constructor(a,e,t){i(this,"isDIVEView",!0);i(this,"uuid",s.MathUtils.generateUUID());i(this,"_paused",!1);i(this,"_renderer");i(this,"_resizeManager");this._scene=a,this._camera=e,this._settings=t,this._renderer=new M(this._scene,this._camera,this._settings),this._resizeManager=new V(this._renderer,this._camera)}get renderer(){return this._renderer}get camera(){return this._camera}get canvas(){return this._renderer.canvas}tick(){this._paused||this._renderer.render()}dispose(){this._resizeManager.dispose(),this._renderer.dispose()}onResize(a,e){this._renderer.onResize(a,e),this._camera.onResize(a,e)}setCanvas(a){this._renderer.setCanvas(a),this._resizeManager.setCanvas(a),this.onResize(this._renderer.canvas.clientWidth,this._renderer.canvas.clientHeight)}pause(){this._paused=!0}resume(){this._paused=!1}}class R extends s.Object3D{constructor(){super();i(this,"isDIVELight",!0);i(this,"isDIVEAmbientLight",!0);i(this,"isSelectable",!0);i(this,"_light");this.name="DIVEAmbientLight",this._light=new s.AmbientLight(16777215,1),this._light.layers.mask=c.PRODUCT_LAYER_MASK,this.add(this._light)}setColor(e){this._light.color=e}setIntensity(e){this._light.intensity=e}setEnabled(e){this._light.visible=e}}class x extends s.Object3D{constructor(){super();i(this,"isDIVELight",!0);i(this,"isDIVEPointLight",!0);i(this,"isMovable",!0);i(this,"isSelectable",!0);i(this,"gizmo",null);i(this,"light");i(this,"mesh");this.name="DIVEPointLight",this.light=new s.PointLight(16777215,1),this.light.layers.mask=c.PRODUCT_LAYER_MASK,this.light.castShadow=!0,this.light.shadow.mapSize.width=512,this.light.shadow.mapSize.height=512,this.add(this.light);const e=.1,t=new s.SphereGeometry(e,e*320,e*320),n=new s.MeshBasicMaterial({color:this.light.color,transparent:!0,opacity:.8,side:s.FrontSide});this.mesh=new s.Mesh(t,n),this.mesh.layers.mask=c.UI_LAYER_MASK,this.add(this.mesh)}setColor(e){this.light.color=e,this.mesh.material.color=e}setIntensity(e){this.light.intensity=e,this.mesh.material.opacity=e>.8?.8:e*.8}setEnabled(e){this.light.visible=e}onMove(){Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:e})=>{var t;(t=e.get(this.userData.id))==null||t.performAction("UPDATE_OBJECT",{id:this.userData.id,position:this.position})})}onSelect(){Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:e})=>{var t;(t=e.get(this.userData.id))==null||t.performAction("SELECT_OBJECT",{id:this.userData.id})})}onDeselect(){Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:e})=>{var t;(t=e.get(this.userData.id))==null||t.performAction("DESELECT_OBJECT",{id:this.userData.id})})}}class k extends s.Object3D{constructor(){super();i(this,"isDIVELight",!0);i(this,"isDIVESceneLight",!0);i(this,"isSelectable",!0);i(this,"_hemiLight");i(this,"_dirLight");this.name="DIVESceneLight",this._hemiLight=new s.HemisphereLight(16777215,16777215,2),this._hemiLight.layers.mask=c.PRODUCT_LAYER_MASK,this._hemiLight.position.set(0,50,0),this._hemiLight.visible=!0,this.add(this._hemiLight),this._dirLight=new s.DirectionalLight(16777215,3),this._dirLight.layers.mask=c.PRODUCT_LAYER_MASK,this._dirLight.position.set(1,1.75,1),this._dirLight.position.multiplyScalar(30),this._dirLight.castShadow=!0,this._dirLight.visible=!0,this._dirLight.shadow.mapSize.width=2048,this._dirLight.shadow.mapSize.height=2048;const e=5;this._dirLight.shadow.camera.left=-5,this._dirLight.shadow.camera.right=e,this._dirLight.shadow.camera.top=e,this._dirLight.shadow.camera.bottom=-5,this._dirLight.shadow.camera.far=3500,this.add(this._dirLight)}setColor(e){this._hemiLight.color=e,this._dirLight.color=e}setIntensity(e){this._hemiLight.intensity=e*2,this._dirLight.intensity=e*3}setEnabled(e){this._hemiLight.visible=e,this._dirLight.visible=e}}const I=h=>h.parent?I(h.parent):h;class D extends s.Object3D{constructor(){super();i(this,"isSelectable",!0);i(this,"isMovable",!0);i(this,"isDIVENode",!0);i(this,"gizmo",null);i(this,"_positionWorldBuffer");i(this,"_boundingBox");this.layers.mask=c.PRODUCT_LAYER_MASK,this._positionWorldBuffer=new s.Vector3,this._boundingBox=new s.Box3}setPosition(e){if(!this.parent){this.position.set(e.x,e.y,e.z);return}const t=new s.Vector3(e.x,e.y,e.z);this.position.copy(this.parent.worldToLocal(t)),"isDIVEGroup"in this.parent&&this.parent.updateLineTo(this)}setRotation(e){this.rotation.set(e.x,e.y,e.z)}setScale(e){this.scale.set(e.x,e.y,e.z)}setVisibility(e){this.visible=e}setToWorldOrigin(){this.position.set(0,0,0),Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:e})=>{var t;(t=e.get(this.userData.id))==null||t.performAction("UPDATE_OBJECT",{id:this.userData.id,position:this.getWorldPosition(this._positionWorldBuffer),rotation:this.rotation,scale:this.scale})})}onMove(){Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:e})=>{var t;(t=e.get(this.userData.id))==null||t.performAction("UPDATE_OBJECT",{id:this.userData.id,position:this.getWorldPosition(this._positionWorldBuffer),rotation:this.rotation,scale:this.scale})})}onSelect(){Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:e})=>{var t;(t=e.get(this.userData.id))==null||t.performAction("SELECT_OBJECT",{id:this.userData.id})})}onDeselect(){Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:e})=>{var t;(t=e.get(this.userData.id))==null||t.performAction("DESELECT_OBJECT",{id:this.userData.id})})}}class y extends D{constructor(e,t=!1,n=65280){super();i(this,"_box");i(this,"_sphere");i(this,"_center");i(this,"_radius");i(this,"_boxHelper");i(this,"_sphereHelper");i(this,"_size");const r=new s.Box3;t?r.setFromObject(e):(e.updateWorldMatrix(!0,!0),e.traverse(l=>{if(l.isMesh){const d=l,u=d.geometry.clone();u.applyMatrix4(d.matrixWorld);const g=d.getWorldQuaternion(new s.Quaternion).invert();u.applyQuaternion(g),u.computeBoundingBox(),u.boundingBox&&r.union(u.boundingBox)}})),this.rotation.copy(e.rotation),this._box=r,this._size=r.getSize(new s.Vector3),this._center=r.getCenter(new s.Vector3),this._boxHelper=new s.Box3Helper(this._box,n),this._boxHelper.visible=!1,this.add(this._boxHelper),this._sphere=r.getBoundingSphere(new s.Sphere),this._radius=this._sphere.radius;const o=new s.SphereGeometry(this._radius,32,32);o.translate(this._center.x,this._center.y,this._center.z),this._sphereHelper=new s.Mesh(o,new s.MeshBasicMaterial({color:n,wireframe:!0})),this._sphereHelper.visible=!1,this.add(this._sphereHelper)}get box(){return this._box}get sphere(){return this._sphere}get center(){return this._center}get radius(){return this._radius}get size(){return this._size}setBoxHelperVisible(e){this._boxHelper.visible=e}setSphereHelperVisible(e){this._sphereHelper.visible=e}}class v extends D{constructor(){super();i(this,"isDIVEModel",!0);i(this,"_gltf",null);i(this,"_mesh",null);i(this,"_material",null);i(this,"_assetLoader",null);this.name="DIVEModel"}async _getAssetLoader(){return this._assetLoader||(this._assetLoader=new(await Promise.resolve().then(()=>require("../plugins/assetloader/index.cjs"))).AssetLoader),this._assetLoader}async setFromURL(e){const n=await(await this._getAssetLoader()).load(e);return this.setFromGLTF(n),Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:r})=>{var o;(o=r.get(this.userData.id))==null||o.performAction("MODEL_LOADED",{id:this.userData.id})}),this}setFromGLTF(e){return this.clear(),this._boundingBox.makeEmpty(),this._gltf=e,this._gltf.name="GLTF",this._gltf.traverse(t=>{t.castShadow=!0,t.receiveShadow=!0,t.layers.mask=this.layers.mask,this._boundingBox.expandByObject(t),!this._mesh&&"isMesh"in t&&(this._mesh=t,this._material?this._mesh.material=this._material:this._material=t.material)}),this.add(this._gltf),this}setMaterial(e){this._material||(this._material=new s.MeshStandardMaterial),e.vertexColors!==void 0&&(this._material.vertexColors=e.vertexColors),e.color!==void 0&&this._material.color.set(e.color),e.map!==void 0&&(this._material.map=e.map),e.normalMap!==void 0&&(this._material.normalMap=e.normalMap),e.roughness!==void 0&&(this._material.roughness=e.roughness),e.roughnessMap!==void 0&&(this._material.roughnessMap=e.roughnessMap,this._material.roughnessMap&&(this._material.roughness=1)),e.metalness!==void 0&&(this._material.metalness=e.metalness),e.metalnessMap!==void 0&&(this._material.metalnessMap=e.metalnessMap,this._material.metalnessMap&&(this._material.metalness=1)),this._mesh&&(this._mesh.material=this._material)}placeOnFloor(){this.updateWorldMatrix(!0,!0);const e=this.getWorldPosition(this._positionWorldBuffer),t=e.clone(),n=new s.Box3;this.children.forEach(o=>{o instanceof y||n.expandByObject(o,!0)});const r=-n.min.y;Math.abs(r)<1e-9||(e.y+=r,e.y!==t.y&&(this.setPosition(e),Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:o})=>{var l;(l=o.get(this.userData.id))==null||l.performAction("UPDATE_OBJECT",{id:this.userData.id,position:e,rotation:this.rotation,scale:this.scale})}),this.onMove()))}dropIt(){if(!this.parent){console.warn("DIVEModel: dropIt() called on a model that is not in the scene.",this);return}const e=this.getWorldPosition(this._positionWorldBuffer),t=e.clone(),n=new s.Box3;this.children.forEach(d=>{d instanceof y||n.expandByObject(d,!0)});const r=n.getCenter(new s.Vector3);r.y=n.min.y;const o=new s.Raycaster(r,new s.Vector3(0,-1,0));o.layers.mask=c.PRODUCT_LAYER_MASK;const l=o.intersectObjects(I(this).root.children,!0);if(l.length>0){const d=l[0].object,f=new s.Box3().setFromObject(d).max.y-n.min.y;if(Math.abs(f)<1e-9||(e.y+=f,e.y===t.y))return;this.setPosition(e),Promise.resolve().then(()=>require("../plugins/state/index.cjs")).then(({State:E})=>{var w;(w=E.get(this.userData.id))==null||w.performAction("UPDATE_OBJECT",{id:this.userData.id,position:e,rotation:this.rotation,scale:this.scale})}),this.onMove()}else this.placeOnFloor()}}class O extends v{constructor(){super();i(this,"isDIVEPrimitive",!0);i(this,"_mesh");i(this,"_material");this._mesh=new s.Mesh,this._mesh.name="PrimitiveMesh",this._mesh.layers.mask=c.PRODUCT_LAYER_MASK,this._mesh.castShadow=!0,this._mesh.receiveShadow=!0,this.add(this._mesh),this._material=new s.MeshStandardMaterial,this._mesh.material=this._material}setGeometry(e){const t=this.assembleGeometry(e);t&&(t.computeVertexNormals(),t.computeBoundingBox(),t.computeBoundingSphere(),this._mesh.geometry=t,this._boundingBox.setFromObject(this._mesh))}assembleGeometry(e){switch(this._material.flatShading=!1,e.name.toLowerCase()){case"cylinder":return this.createCylinderGeometry(e);case"sphere":return this.createSphereGeometry(e);case"pyramid":return this._material.flatShading=!0,this.createPyramidGeometry(e);case"cube":case"box":return this.createBoxGeometry(e);case"cone":return this.createConeGeometry(e);case"wall":return this.createWallGeometry(e);case"plane":return this.createPlaneGeometry(e);default:return console.warn("DIVEPrimitive.assembleGeometry: Invalid geometry type:",e.name.toLowerCase()),null}}createCylinderGeometry(e){const t=new s.CylinderGeometry(e.width/2,e.width/2,e.height,64);return t.translate(0,e.height/2,0),t}createSphereGeometry(e){return new s.SphereGeometry(e.width/2,256,256)}createPyramidGeometry(e){const t=new Float32Array([-e.width/2,0,-e.depth/2,e.width/2,0,-e.depth/2,e.width/2,0,e.depth/2,-e.width/2,0,e.depth/2,0,e.height,0]),n=new Uint16Array([0,1,2,0,2,3,0,4,1,1,4,2,2,4,3,3,4,0]),r=new s.BufferGeometry;return r.setAttribute("position",new s.BufferAttribute(t,3)),r.setIndex(new s.BufferAttribute(n,1)),r}createBoxGeometry(e){const t=new s.BoxGeometry(e.width,e.height,e.depth);return t.translate(0,e.height/2,0),t}createConeGeometry(e){const t=new s.ConeGeometry(e.width/2,e.height,256);return t.translate(0,e.height/2,0),t}createWallGeometry(e){const t=new s.BoxGeometry(e.width,e.height,e.depth||.05,16);return t.translate(0,e.height/2,0),t}createPlaneGeometry(e){const t=new s.BoxGeometry(e.width,e.height,e.depth);return t.translate(0,e.height/2,0),t}}class A extends D{constructor(){super();i(this,"isDIVEGroup",!0);i(this,"_members");i(this,"_lines");this.name="DIVEGroup",this._members=[],this._lines=[]}get members(){return this._members}setPosition(e){super.setPosition(e),this._members.forEach(t=>{"isDIVENode"in t&&t.onMove()})}setLinesVisibility(e,t){if(!t){this._lines.forEach(r=>{r.visible=e});return}const n=this._members.indexOf(t);n!==-1&&(this._lines[n].visible=e)}attach(e){if(this._members.includes(e))return this;const t=this.createLine();return this.add(t),this._lines.push(t),super.attach(e),this._members.push(e),this._updateLineTo(t,e),this.setLinesVisibility(!0,e),this}remove(e){const t=this._members.indexOf(e);if(t===-1)return this;const n=this._lines[t];return super.remove(n),this._lines.splice(t,1),super.remove(e),this._members.splice(t,1),this}updateLineTo(e){const t=this._members.indexOf(e);t!==-1&&this._updateLineTo(this._lines[t],e)}createLine(){const e=new s.BufferGeometry,t=new s.LineDashedMaterial({color:6710886,dashSize:.05,gapSize:.025}),n=new s.Line(e,t);return n.visible=!1,n}_updateLineTo(e,t){const n=[new s.Vector3(0,0,0),t.position.clone()];e.geometry.setFromPoints(n),e.computeLineDistances()}}class C extends s.Mesh{constructor(){const e=new s.PlaneGeometry(1,1);e.scale(1e3,1e3,1),e.rotateX(-Math.PI/2);const t=new s.MeshStandardMaterial({color:new s.Color(16777215),side:s.FrontSide});super(e,t);i(this,"isDIVEFloor",!0);this.name="Floor",this.layers.mask=c.PRODUCT_LAYER_MASK,this.receiveShadow=!0}setVisibility(e){this.visible=e}setColor(e){this.material.color=new s.Color(e)}}class z extends s.Object3D{constructor(){super();i(this,"isDIVERoot",!0);i(this,"_floor");this.name="Root",this._floor=new C,this.add(this._floor)}get floor(){return this._floor}computeSceneBB(){const e=new s.Box3;return this.children.forEach(t=>{"isDIVEFloor"in t||t.traverse(n=>{"isObject3D"in n&&e.expandByObject(n)})}),e}getSceneObject(e){let t;return this.traverse(n=>{t||n.userData.id===e.id&&(t=n)}),t}addSceneObject(e){let t=this.getSceneObject(e);if(t)return console.warn(`DIVERoot.addSceneObject: Scene object with id ${e.id} already exists`),t;switch(e.entityType){case"pov":break;case"light":{switch(e.type){case"scene":{t=new k;break}case"ambient":{t=new R;break}case"point":{t=new x;break}default:throw new Error(`DIVERoot.addSceneObject: Unknown light type: ${e.type}`)}t.name=e.name,t.userData.id=e.id,this.add(t),this._updateLight(t,e);break}case"model":{t=new v,t.name=e.name,t.userData.id=e.id,t.userData.uri=e.uri,this.add(t),this._updateModel(t,e);break}case"primitive":{t=new O,t.name=e.name,t.userData.id=e.id,this.add(t),this._updatePrimitive(t,e);break}case"group":{t=new A,t.name=e.name,t.userData.id=e.id,this.add(t),this._updateGroup(t,e);break}default:throw new Error(`DIVERoot.addSceneObject: Unknown entity type: ${e.entityType}`)}return t}updateSceneObject(e){const t=this.getSceneObject(e);if(!t){console.warn(`DIVERoot.updateSceneObject: Scene object with id ${e.id} does not exist`);return}switch(e.entityType){case"pov":break;case"light":{this._updateLight(t,e);break}case"model":{this._updateModel(t,e);break}case"primitive":{this._updatePrimitive(t,e);break}case"group":{this._updateGroup(t,e);break}default:throw new Error(`DIVERoot.updateSceneObject: Unknown entity type: ${e.entityType}`)}}deleteSceneObject(e){const t=this.getSceneObject(e);if(!t){console.warn(`DIVERoot.deleteSceneObject: Object with id ${e.id} not found`);return}switch(e.entityType){case"pov":break;case"light":{this._deleteLight(t);break}case"model":{this._deleteModel(t);break}case"primitive":{this._deletePrimitive(t);break}case"group":{this._deleteGroup(t);break}default:throw new Error(`DIVERoot.deleteSceneObject: Unknown entity type: ${e.entityType}`)}}_updateLight(e,t){t.name!==void 0&&t.name!==null&&(e.name=t.name),t.position!==void 0&&t.position!==null&&e.position.set(t.position.x,t.position.y,t.position.z),t.intensity!==void 0&&t.intensity!==null&&e.setIntensity(t.intensity),t.enabled!==void 0&&t.enabled!==null&&e.setEnabled(t.enabled),t.color!==void 0&&t.color!==null&&e.setColor(new s.Color(t.color)),t.visible!==void 0&&t.visible!==null&&(e.visible=t.visible),t.parentId!==void 0&&this._setParent({...t,parentId:t.parentId})}_updateModel(e,t){t.uri!==void 0&&e.setFromURL(t.uri),t.name!==void 0&&(e.name=t.name),t.position!==void 0&&e.setPosition(t.position),t.rotation!==void 0&&e.setRotation(t.rotation),t.scale!==void 0&&e.setScale(t.scale),t.visible!==void 0&&e.setVisibility(t.visible),t.material!==void 0&&e.setMaterial(t.material),t.parentId!==void 0&&this._setParent({...t,parentId:t.parentId})}_updatePrimitive(e,t){t.name!==void 0&&(e.name=t.name),t.geometry!==void 0&&e.setGeometry(t.geometry),t.position!==void 0&&e.setPosition(t.position),t.rotation!==void 0&&e.setRotation(t.rotation),t.scale!==void 0&&e.setScale(t.scale),t.visible!==void 0&&e.setVisibility(t.visible),t.material!==void 0&&e.setMaterial(t.material),t.parentId!==void 0&&this._setParent({...t,parentId:t.parentId})}_updateGroup(e,t){t.name!==void 0&&(e.name=t.name),t.position!==void 0&&e.setPosition(t.position),t.rotation!==void 0&&e.setRotation(t.rotation),t.scale!==void 0&&e.setScale(t.scale),t.visible!==void 0&&e.setVisibility(t.visible),t.bbVisible!==void 0&&e.setLinesVisibility(t.bbVisible),t.parentId!==void 0&&this._setParent({...t,parentId:t.parentId})}_deleteLight(e){this._detachTransformControls(e),e.parent.remove(e)}_deleteModel(e){this._detachTransformControls(e),e.parent.remove(e)}_deletePrimitive(e){this._detachTransformControls(e),e.parent.remove(e)}_deleteGroup(e){this._detachTransformControls(e);for(let t=e.members.length-1;t>=0;t--)this.attach(e.members[t]);e.parent.remove(e)}_setParent(e){const t=this.getSceneObject(e);if(e.parentId!==null){const n=this.getSceneObject({id:e.parentId,entityType:e.entityType});if(!n)return;n.attach(t)}else this.attach(t)}_detachTransformControls(e){this._findScene(e).children.find(t=>{"isTransformControls"in t&&t.detach()})}_findScene(e){return e.parent!==null?this._findScene(e.parent):e}}const B="#888888",G="#dddddd";class U extends s.Object3D{constructor(){super(),this.name="Grid";const a=new s.GridHelper(100,100,B,G);a.material.depthTest=!1,a.layers.mask=c.HELPER_LAYER_MASK,this.add(a)}setVisibility(a){this.visible=a}}const m={displayFloor:!1,displayGrid:!1,backgroundColor:"#ffffff"};class F extends s.Scene{constructor(e){super();i(this,"isDIVEScene",!0);i(this,"_root");i(this,"_grid");this.setBackground((e==null?void 0:e.backgroundColor)??m.backgroundColor),this._root=new z,this._root.floor.setVisibility((e==null?void 0:e.displayFloor)??m.displayFloor),this.add(this._root),this._grid=new U,this._grid.setVisibility((e==null?void 0:e.displayGrid)??m.displayGrid),this.add(this._grid)}get root(){return this._root}get grid(){return this._grid}setBackground(e){this.background=new s.Color(e)}computeSceneBB(){return this._root.computeSceneBB()}}const Y={enableDamping:!0,dampingFactor:.05,enabled:!0,target:new s.Vector3,minDistance:0,maxDistance:1/0,minZoom:0,maxZoom:1/0,minPolarAngle:0,maxPolarAngle:Math.PI,minAzimuthAngle:-1/0,maxAzimuthAngle:1/0,enableZoom:!0,zoomSpeed:1,enableRotate:!0,rotateSpeed:1,enablePan:!0,panSpeed:1,screenSpacePanning:!0,keyPanSpeed:7,autoRotate:!1,autoRotateSpeed:2,keys:{LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},mouseButtons:{LEFT:s.MOUSE.ROTATE,MIDDLE:s.MOUSE.DOLLY,RIGHT:s.MOUSE.PAN},touches:{ONE:s.TOUCH.ROTATE,TWO:s.TOUCH.DOLLY_PAN}},_=class _ extends s.EventDispatcher{constructor(e,t,n){super();i(this,"object");i(this,"domElements");i(this,"enabled",!0);i(this,"target",new s.Vector3);i(this,"minDistance",0);i(this,"maxDistance",1/0);i(this,"minZoom",0);i(this,"maxZoom",1/0);i(this,"minPolarAngle",0);i(this,"maxPolarAngle",Math.PI);i(this,"minAzimuthAngle",-1/0);i(this,"maxAzimuthAngle",1/0);i(this,"enableDamping",!0);i(this,"dampingFactor",.05);i(this,"enableZoom",!0);i(this,"zoomSpeed",1);i(this,"enableRotate",!0);i(this,"rotateSpeed",1);i(this,"enablePan",!0);i(this,"panSpeed",1);i(this,"screenSpacePanning",!0);i(this,"keyPanSpeed",7);i(this,"autoRotate",!1);i(this,"autoRotateSpeed",2);i(this,"keys",{LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"});i(this,"mouseButtons",{LEFT:s.MOUSE.ROTATE,MIDDLE:s.MOUSE.DOLLY,RIGHT:s.MOUSE.PAN});i(this,"touches",{ONE:s.TOUCH.ROTATE,TWO:s.TOUCH.DOLLY_PAN});i(this,"target0");i(this,"position0");i(this,"zoom0");i(this,"uuid",s.MathUtils.generateUUID());i(this,"state",-1);i(this,"EPS",1e-6);i(this,"spherical",new s.Spherical);i(this,"sphericalDelta",new s.Spherical);i(this,"scale",1);i(this,"panOffset",new s.Vector3);i(this,"zoomChanged",!1);i(this,"rotateStart",new s.Vector2);i(this,"rotateEnd",new s.Vector2);i(this,"rotateDelta",new s.Vector2);i(this,"panStart",new s.Vector2);i(this,"panEnd",new s.Vector2);i(this,"panDelta",new s.Vector2);i(this,"dollyStart",new s.Vector2);i(this,"dollyEnd",new s.Vector2);i(this,"dollyDelta",new s.Vector2);i(this,"pointers",[]);i(this,"pointerPositions",{});i(this,"offset",new s.Vector3);i(this,"quat");i(this,"quatInverse");i(this,"lastPosition",new s.Vector3);i(this,"lastQuaternion",new s.Quaternion);i(this,"lastTarget",new s.Vector3);i(this,"panLeft",(()=>{const e=new s.Vector3;return(t,n)=>{e.setFromMatrixColumn(n,0),e.multiplyScalar(-t),this.panOffset.add(e)}})());i(this,"panUp",(()=>{const e=new s.Vector3;return(t,n)=>{this.screenSpacePanning===!0?e.setFromMatrixColumn(n,1):(e.setFromMatrixColumn(n,0),e.crossVectors(this.object.up,e)),e.multiplyScalar(t),this.panOffset.add(e)}})());i(this,"onMouseDown",e=>{let t;switch(e.button){case 0:t=this.mouseButtons.LEFT;break;case 1:t=this.mouseButtons.MIDDLE;break;case 2:t=this.mouseButtons.RIGHT;break;default:t=-1}switch(t){case s.MOUSE.DOLLY:if(this.enableZoom===!1)return;this.handleMouseDownDolly(e),this.state=1;break;case s.MOUSE.ROTATE:if(e.ctrlKey||e.metaKey||e.shiftKey){if(this.enablePan===!1)return;this.handleMouseDownPan(e),this.state=2}else{if(this.enableRotate===!1)return;this.handleMouseDownRotate(e),this.state=0}break;case s.MOUSE.PAN:if(e.ctrlKey||e.metaKey||e.shiftKey){if(this.enableRotate===!1)return;this.handleMouseDownRotate(e),this.state=0}else{if(this.enablePan===!1)return;this.handleMouseDownPan(e),this.state=2}break;default:this.state=-1}this.state!==-1&&this.dispatchEvent({type:"start"})});i(this,"onMouseMove",e=>{if(this.enabled!==!1)switch(this.state){case 0:if(this.enableRotate===!1)return;this.handleMouseMoveRotate(e);break;case 1:if(this.enableZoom===!1)return;this.handleMouseMoveDolly(e);break;case 2:if(this.enablePan===!1)return;this.handleMouseMovePan(e);break}});i(this,"onMouseWheel",e=>{this.enabled===!1||this.enableZoom===!1||this.state!==-1||(e.preventDefault(),this.dispatchEvent({type:"start"}),this.handleMouseWheel(e),this.dispatchEvent({type:"end"}))});i(this,"onKeyDown",e=>{this.enabled===!1||this.enablePan===!1||this.handleKeyDown(e)});i(this,"onTouchStart",e=>{switch(this.trackPointer(e),this.pointers.length){case 1:switch(this.touches.ONE){case s.TOUCH.ROTATE:if(this.enableRotate===!1)return;this.handleTouchStartRotate(e),this.state=3;break;case s.TOUCH.PAN:if(this.enablePan===!1)return;this.handleTouchStartPan(e),this.state=4;break;default:this.state=-1}break;case 2:switch(this.touches.TWO){case s.TOUCH.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this.handleTouchStartDollyPan(e),this.state=5;break;case s.TOUCH.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this.handleTouchStartDollyRotate(e),this.state=6;break;default:this.state=-1}break;default:this.state=-1}this.state!==-1&&this.dispatchEvent({type:"start"})});i(this,"onTouchMove",e=>{switch(this.trackPointer(e),this.state){case 3:if(this.enableRotate===!1)return;this.handleTouchMoveRotate(e),this.update();break;case 4:if(this.enablePan===!1)return;this.handleTouchMovePan(e),this.update();break;case 5:if(this.enableZoom===!1&&this.enablePan===!1)return;this.handleTouchMoveDollyPan(e),this.update();break;case 6:if(this.enableZoom===!1&&this.enableRotate===!1)return;this.handleTouchMoveDollyRotate(e),this.update();break;default:this.state=-1}});i(this,"onPointerDown",e=>{if(this.enabled!==!1){if(this.pointers.length===0){const t=e.currentTarget;t.setPointerCapture(e.pointerId),t.addEventListener("pointermove",this.onPointerMove),t.addEventListener("pointerup",this.onPointerUp)}this.isTrackingPointer(e)||(this.addPointer(e),e.pointerType==="touch"?this.onTouchStart(e):this.onMouseDown(e))}});i(this,"onPointerMove",e=>{this.enabled!==!1&&(e.pointerType==="touch"?this.onTouchMove(e):this.onMouseMove(e))});i(this,"onPointerUp",e=>{if(this.removePointer(e),this.pointers.length===0){const t=e.currentTarget;t.releasePointerCapture(e.pointerId),t.removeEventListener("pointermove",this.onPointerMove),t.removeEventListener("pointerup",this.onPointerUp),this.dispatchEvent({type:"end"}),this.state=-1}});i(this,"onPointerCancel",e=>{this.removePointer(e)});i(this,"onContextMenu",e=>{this.enabled!==!1&&e.preventDefault()});this.object=e,this.domElements=Array.isArray(t)?t:[t],Object.assign(this,n),this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.quat=new s.Quaternion().setFromUnitVectors(e.up,new s.Vector3(0,1,0)),this.quatInverse=this.quat.clone().invert(),this.domElements.forEach(r=>this.addEventListeners(r)),this.update()}get domElement(){return this.domElements[0]}tick(){this.enabled&&this.update()}getPolarAngle(){return this.spherical.phi}getAzimuthalAngle(){return this.spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent({type:"change"}),this.update(),this.state=-1}update(){return this.offset.copy(this.object.position).sub(this.target),this.offset.applyQuaternion(this.quat),this.spherical.setFromVector3(this.offset),this.autoRotate&&this.state===-1&&this.rotateLeft(this.getAutoRotationAngle()),this.enableDamping?(this.spherical.theta+=this.sphericalDelta.theta*this.dampingFactor,this.spherical.phi+=this.sphericalDelta.phi*this.dampingFactor):(this.spherical.theta+=this.sphericalDelta.theta,this.spherical.phi+=this.sphericalDelta.phi),this.spherical.theta=Math.max(this.minAzimuthAngle,Math.min(this.maxAzimuthAngle,this.spherical.theta)),this.spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this.spherical.phi)),this.spherical.makeSafe(),this.spherical.radius*=this.scale,this.spherical.radius=Math.max(this.minDistance,Math.min(this.maxDistance,this.spherical.radius)),this.enableDamping===!0?this.target.addScaledVector(this.panOffset,this.dampingFactor):this.target.add(this.panOffset),this.offset.setFromSpherical(this.spherical),this.offset.applyQuaternion(this.quatInverse),this.object.position.copy(this.target).add(this.offset),this.object.lookAt(this.target),this.enableDamping===!0?(this.sphericalDelta.theta*=1-this.dampingFactor,this.sphericalDelta.phi*=1-this.dampingFactor,this.panOffset.multiplyScalar(1-this.dampingFactor)):(this.sphericalDelta.set(0,0,0),this.panOffset.set(0,0,0)),this.scale=1,this.zoomChanged||this.lastPosition.distanceToSquared(this.object.position)>this.EPS||8*(1-this.lastQuaternion.dot(this.object.quaternion))>this.EPS||this.lastTarget.distanceToSquared(this.target)>this.EPS?(this.dispatchEvent({type:"change"}),this.lastPosition.copy(this.object.position),this.lastQuaternion.copy(this.object.quaternion),this.lastTarget.copy(this.target),this.zoomChanged=!1,!0):!1}dispose(){this.domElements.forEach(e=>this.removeEventListeners(e)),this.dispatchEvent({type:"dispose"})}addDomElements(...e){e.forEach(t=>{this.domElements.includes(t)||(this.domElements.push(t),this.addEventListeners(t))})}removeDomElements(...e){e.forEach(t=>{const n=this.domElements.indexOf(t);n>-1&&(this.removeEventListeners(t),this.domElements.splice(n,1))})}setDomElements(...e){this.removeDomElements(...this.domElements),this.domElements=[],this.addDomElements(...e)}computeEncompassingView(e,t=0){const n=e.center,o=e.sphere.radius,l=this.object.fov*(Math.PI/180),d=this.object.aspect,u=l/2,g=Math.atan(Math.tan(u)*d),f=o/Math.sin(u),E=o/Math.sin(g),w=Math.max(f,E)*(1+t),L=this.object.position.clone().sub(this.target).normalize(),q=L.length()>.001?L:new s.Vector3(0,0,1);return{position:n.clone().add(q.multiplyScalar(w)),target:n}}focusObject(e,t=0){const n=new y(e),r=this.computeEncompassingView(n,t);this.object.position.copy(r.position),this.target.copy(r.target),this.update()}zoomIn(e){this.dollyIn(Math.pow(.95,e??_.DEFAULT_ZOOM_FACTOR)),this.update()}zoomOut(e){this.dollyOut(Math.pow(.95,e??_.DEFAULT_ZOOM_FACTOR)),this.update()}getState(){return{target:this.target.clone(),azimuthalAngle:this.getAzimuthalAngle(),polarAngle:this.getPolarAngle(),distance:this.getDistance(),position:this.object.position.clone(),quaternion:this.object.quaternion.clone()}}setState(e){this.target.copy(e.target),this.object.position.copy(e.position),this.object.quaternion.copy(e.quaternion),this.update()}addEventListeners(e){e.style.touchAction="none",e.addEventListener("contextmenu",this.onContextMenu),e.addEventListener("pointerdown",this.onPointerDown),e.addEventListener("pointercancel",this.onPointerCancel),e.addEventListener("wheel",this.onMouseWheel,{passive:!1}),e.addEventListener("keydown",this.onKeyDown)}removeEventListeners(e){e.removeEventListener("contextmenu",this.onContextMenu),e.removeEventListener("pointerdown",this.onPointerDown),e.removeEventListener("pointercancel",this.onPointerCancel),e.removeEventListener("wheel",this.onMouseWheel),e.removeEventListener("keydown",this.onKeyDown),e.removeEventListener("pointermove",this.onPointerMove),e.removeEventListener("pointerup",this.onPointerUp)}getAutoRotationAngle(){return 2*Math.PI/60/60*this.autoRotateSpeed}getZoomScale(){return Math.pow(.95,this.zoomSpeed)}rotateLeft(e){this.sphericalDelta.theta-=e}rotateUp(e){this.sphericalDelta.phi-=e}pan(e,t,n){const r=new s.Vector3;if("isPerspectiveCamera"in this.object){const o=this.object.position;r.copy(o).sub(this.target);let l=r.length();l*=Math.tan(this.object.fov/2*Math.PI/180),this.panLeft(2*e*l/n.clientHeight,this.object.matrix),this.panUp(2*t*l/n.clientHeight,this.object.matrix)}else"isOrthographicCamera"in this.object?(this.panLeft(e*(this.object.right-this.object.left)/this.object.zoom/n.clientWidth,this.object.matrix),this.panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/n.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitController encountered an unknown camera type - pan disabled."),this.enablePan=!1)}dollyIn(e){"isPerspectiveCamera"in this.object||"isOrthographicCamera"in this.object?this.scale*=e:(console.warn("WARNING: OrbitController encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}dollyOut(e){"isPerspectiveCamera"in this.object||"isOrthographicCamera"in this.object?this.scale/=e:(console.warn("WARNING: OrbitController encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}handleMouseDownRotate(e){this.rotateStart.set(e.clientX,e.clientY)}handleMouseDownDolly(e){this.dollyStart.set(e.clientX,e.clientY)}handleMouseDownPan(e){this.panStart.set(e.clientX,e.clientY)}handleMouseMoveRotate(e){this.rotateEnd.set(e.clientX,e.clientY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart).multiplyScalar(this.rotateSpeed);const t=e.currentTarget;this.rotateLeft(2*Math.PI*this.rotateDelta.x/t.clientHeight),this.rotateUp(2*Math.PI*this.rotateDelta.y/t.clientHeight),this.rotateStart.copy(this.rotateEnd),this.update()}handleMouseMoveDolly(e){this.dollyEnd.set(e.clientX,e.clientY),this.dollyDelta.subVectors(this.dollyEnd,this.dollyStart),this.dollyDelta.y>0?this.dollyIn(this.getZoomScale()):this.dollyDelta.y<0&&this.dollyOut(this.getZoomScale()),this.dollyStart.copy(this.dollyEnd),this.update()}handleMouseMovePan(e){const t=e.currentTarget;this.panEnd.set(e.clientX,e.clientY),this.panDelta.subVectors(this.panEnd,this.panStart).multiplyScalar(this.panSpeed),this.pan(this.panDelta.x,this.panDelta.y,t),this.panStart.copy(this.panEnd),this.update()}handleMouseWheel(e){e.deltaY<0?this.dollyIn(this.getZoomScale()):e.deltaY>0&&this.dollyOut(this.getZoomScale()),this.update()}handleKeyDown(e){let t=!1;const n=e.currentTarget;switch(e.code){case this.keys.UP:this.pan(0,this.keyPanSpeed,n),t=!0;break;case this.keys.BOTTOM:this.pan(0,-this.keyPanSpeed,n),t=!0;break;case this.keys.LEFT:this.pan(this.keyPanSpeed,0,n),t=!0;break;case this.keys.RIGHT:this.pan(-this.keyPanSpeed,0,n),t=!0;break}t&&(e.preventDefault(),this.update())}handleTouchStartRotate(e){if(this.pointers.length===1)this.rotateStart.set(e.pageX,e.pageY);else{const t=this.getSecondPointer(e),n=.5*(e.pageX+t.pageX),r=.5*(e.pageY+t.pageY);this.rotateStart.set(n,r)}}handleTouchStartPan(e){if(this.pointers.length===1)this.panStart.set(e.pageX,e.pageY);else{const t=this.getSecondPointer(e),n=.5*(e.pageX+t.pageX),r=.5*(e.pageY+t.pageY);this.panStart.set(n,r)}}handleTouchStartDolly(e){const t=this.getSecondPointer(e),n=e.pageX-t.pageX,r=e.pageY-t.pageY,o=Math.sqrt(n*n+r*r);this.dollyStart.set(0,o)}handleTouchStartDollyPan(e){this.enableZoom&&this.handleTouchStartDolly(e),this.enablePan&&this.handleTouchStartPan(e)}handleTouchStartDollyRotate(e){this.enableZoom&&this.handleTouchStartDolly(e),this.enableRotate&&this.handleTouchStartRotate(e)}handleTouchMoveRotate(e){if(this.pointers.length===1)this.rotateEnd.set(e.pageX,e.pageY);else{const n=this.getSecondPointer(e),r=.5*(e.pageX+n.pageX),o=.5*(e.pageY+n.pageY);this.rotateEnd.set(r,o)}const t=e.currentTarget;this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart).multiplyScalar(this.rotateSpeed),this.rotateLeft(2*Math.PI*this.rotateDelta.x/t.clientHeight),this.rotateUp(2*Math.PI*this.rotateDelta.y/t.clientHeight),this.rotateStart.copy(this.rotateEnd)}handleTouchMovePan(e){if(this.pointers.length===1)this.panEnd.set(e.pageX,e.pageY);else{const n=this.getSecondPointer(e),r=.5*(e.pageX+n.pageX),o=.5*(e.pageY+n.pageY);this.panEnd.set(r,o)}const t=e.currentTarget;this.panDelta.subVectors(this.panEnd,this.panStart).multiplyScalar(this.panSpeed),this.pan(this.panDelta.x,this.panDelta.y,t),this.panStart.copy(this.panEnd)}handleTouchMoveDolly(e){const t=this.getSecondPointer(e),n=e.pageX-t.pageX,r=e.pageY-t.pageY,o=Math.sqrt(n*n+r*r);this.dollyEnd.set(0,o),this.dollyDelta.set(0,Math.pow(this.dollyEnd.y/this.dollyStart.y,this.zoomSpeed)),this.dollyOut(this.dollyDelta.y),this.dollyStart.copy(this.dollyEnd)}handleTouchMoveDollyPan(e){this.enableZoom&&this.handleTouchMoveDolly(e),this.enablePan&&this.handleTouchMovePan(e)}handleTouchMoveDollyRotate(e){this.enableZoom&&this.handleTouchMoveDolly(e),this.enableRotate&&this.handleTouchMoveRotate(e)}addPointer(e){this.pointers.push(e)}removePointer(e){delete this.pointerPositions[e.pointerId];for(let t=0;t<this.pointers.length;t++)if(this.pointers[t].pointerId==e.pointerId){this.pointers.splice(t,1);return}}trackPointer(e){let t=this.pointerPositions[e.pointerId];t===void 0&&(t=new s.Vector2,this.pointerPositions[e.pointerId]=t),t.set(e.pageX,e.pageY)}getSecondPointer(e){return this.pointers[0].pointerId===e.pointerId?this.pointers[1]:this.pointers[0]}isTrackingPointer(e){return this.pointers.some(t=>t.pointerId===e.pointerId)}};i(_,"DEFAULT_ZOOM_FACTOR",1);let S=_;const K=`
2
- @@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@
3
- @@@@+-:::::::---------------------==------------------------------=#@@@@
4
- @@%=::::.......::---------------------------------------------------------+@@
5
- @@+:::...........::-----------------------------------------------------------#@@
6
- @@=:::.........::::::-------------------------------------------------------------%@
7
- @%:::.......:::::::-----------------------------------------------------------------#@
8
- @*:::.....:::::-----------------------------------------------------------------------*@
9
- @%::::::.::::---------------------------------------------------------------------------@@
10
- @@-:::::::::-----------------------------------------------------------------------------=@
11
- @%::::::::--------------------------------------------------------------------------------%@
12
- @+::::::::--------------------------------=@@@@@%-----------------------------------------%@
13
- @=:::::::--------------------------------*@@ @@+---------------------------------------#@
14
- @+:::::::-------------------------------*@ @*--------------------------------------%@
15
- @#::::::::-----------------------------=@@ @@=-------------------------------------%@
16
- @@-::::::::----------------------------@@ @@------------------------------------=@
17
- @%:::::::::--------------------------*@ @*-----------------------------------@@
18
- @*:::::::::-------------------------@@ @@----------------------------------%@
19
- @#::::::::::----------------------%@ @%--------------------------------%@
20
- @#:::::::::::-------------------=@@ @@=------------------------------%@
21
- @@-::::::::::::----------------%@ @%----------------------------=@@
22
- @@#::::::::::::::------------*@ @*--------------------------#@@
23
- @@+::::::::::::::::--------@@ @@------------------------+@@
24
- @@*:::::::::::::::::----@@ @@---------------------+@@
25
- @@@-:::::::::::::::--#@ @#-----------------=%@@
26
- @@%-::::::::::::-%@ @%-------------=%@@
27
- @@@@+:::::::#@@ @@*-------*@@@@
28
- @@@@@@@ @@@@@@
29
- `;window.DIVE={instances:[],get instance(){return window.DIVE.instances[0]}};const p={autoStart:!0,displayAxes:!1,...m,...c.DIVEPerspectiveCameraDefaultSettings,...P,...Y};class H{constructor(a){i(this,"_instanceId",s.MathUtils.generateUUID());i(this,"_settings");i(this,"_views");i(this,"_mainView");i(this,"_scene");i(this,"_clock");i(this,"_orientationDisplay",null);this._settings={...p,...a??{}},this._clock=new T,this._scene=new F({backgroundColor:(a==null?void 0:a.backgroundColor)??p.backgroundColor,displayGrid:(a==null?void 0:a.displayGrid)??p.displayGrid,displayFloor:(a==null?void 0:a.displayFloor)??p.displayFloor});const e=new b(this._scene,new c.DIVEPerspectiveCamera,this._settings);this._clock.addTicker(e),this._views=[e],this._mainView=e,this._settings.displayAxes&&Promise.resolve().then(()=>require("../plugins/orientationdisplay/index.cjs")).then(({OrientationDisplay:t})=>{this._orientationDisplay=new t(this.mainView.renderer,this.scene,this.mainView.camera),this._clock.addTicker(this._orientationDisplay)}),this._settings.autoStart&&this.start(),console.log("DIVE 2.2.16 initialized successfully!"),console.log(K),window.DIVE.instances.push(this)}static async QuickView(a,e){return Promise.resolve().then(()=>require("../plugins/quickview/index.cjs")).then(({QuickView:t})=>t(a,e))}get engine(){return{scene:this.scene,camera:this.mainView.camera,renderer:this.mainView.renderer,setCanvas:a=>{this.mainView.setCanvas(a)},clock:this.clock,start:()=>{this.start()},stop:()=>{this.stop()},dispose:()=>{this.dispose()}}}get views(){return this._views}get mainView(){return this._mainView}get canvas(){return this.mainView.canvas}get scene(){return this._scene}get clock(){return this._clock}start(){this._clock.start()}stop(){this._clock.stop()}async dispose(){return new Promise(a=>{this._views.forEach(e=>{e.dispose()}),this._views=[],this._orientationDisplay&&(this._clock.removeTicker(this._orientationDisplay),this._orientationDisplay.dispose()),window.DIVE.instances=window.DIVE.instances.filter(e=>e._instanceId!==this._instanceId),a()})}createView(a){const e=new b(this._scene,a??new c.DIVEPerspectiveCamera,{...this._settings,canvas:void 0});return this._views.push(e),this._clock.addTicker(e),this._views.length===1&&(this._mainView=e),e}disposeView(a){this._views=this._views.filter(e=>e!==a),this._clock.removeTicker(a),this._mainView===a&&(this._mainView=this._views[0]),a.dispose()}}const Q=H,W={glb:{key:"glb",extension:"glb"},gltf:{key:"gltf",extension:"gltf"},usdz:{key:"usdz",extension:"usdz"}},J=Object.values(W).map(h=>h.extension);exports.BoundingBox=y;exports.DIVE=H;exports.DIVEAmbientLight=R;exports.DIVEClock=T;exports.DIVEDefaultSettings=p;exports.DIVEEngine=Q;exports.DIVEFloor=C;exports.DIVEGrid=U;exports.DIVEGroup=A;exports.DIVEModel=v;exports.DIVENode=D;exports.DIVEPointLight=x;exports.DIVEPrimitive=O;exports.DIVERenderPipeline=X;exports.DIVERenderer=M;exports.DIVERendererDefaultSettings=P;exports.DIVEResizeManager=V;exports.DIVERoot=z;exports.DIVEScene=F;exports.DIVESceneDefaultSettings=m;exports.DIVESceneLight=k;exports.DIVEView=b;exports.FILE_TYPES=W;exports.GRID_CENTER_LINE_COLOR=B;exports.GRID_SIDE_LINE_COLOR=G;exports.OrbitController=S;exports.OrbitControllerDefaultSettings=Y;exports.SUPPORTED_FILE_TYPES=J;exports.findSceneRecursive=I;