gl-draw 0.12.21 → 0.12.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,5 @@
1
1
  import * as THREE from 'three';
2
+ import { Timer } from 'three/examples/jsm/misc/Timer';
2
3
  import { EventEmitter } from 'events';
3
4
  import Stats from 'stats-gl';
4
5
  import GUI from 'lil-gui';
@@ -74,7 +75,7 @@ export default class Pencil {
74
75
  get camera(): THREE.PerspectiveCamera;
75
76
  get scene(): THREE.Scene;
76
77
  event: EventEmitter;
77
- clock: THREE.Clock;
78
+ timer: Timer;
78
79
  userData: Record<string, any>;
79
80
  static options: {
80
81
  isdev: boolean;
@@ -132,7 +133,7 @@ export default class Pencil {
132
133
  zIndex: string;
133
134
  };
134
135
  };
135
- constructor(options: Options, plugin?: any);
136
+ constructor(options: Options);
136
137
  use(plugin: any, ...args: any[]): void;
137
138
  pageActiveIndex: number;
138
139
  addPage({ sceneOptions, cameraOptions, }: {
@@ -150,10 +151,9 @@ export default class Pencil {
150
151
  height: number;
151
152
  };
152
153
  initResizeObserver(): void;
153
- private dprCache;
154
- checkBackufferArea(maxBackufferArea?: number): void;
154
+ private userSetDprCache;
155
155
  private handeleResize;
156
- setDevicePixelRatio(dpr: number): void;
156
+ setDevicePixelRatio(userSetDprCache: number): void;
157
157
  pick(event: MouseEvent, objects?: THREE.Object3D[], recursive?: boolean): {
158
158
  object: THREE.Object3D<THREE.Object3DEventMap>;
159
159
  index: number | undefined;
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var Ge=Object.defineProperty,Xe=Object.defineProperties;var Ke=Object.getOwnPropertyDescriptors;var Oe=Object.getOwnPropertySymbols;var je=Object.prototype.hasOwnProperty,Qe=Object.prototype.propertyIsEnumerable;var ve=(f,e,t)=>e in f?Ge(f,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):f[e]=t,B=(f,e)=>{for(var t in e||(e={}))je.call(e,t)&&ve(f,t,e[t]);if(Oe)for(var t of Oe(e))Qe.call(e,t)&&ve(f,t,e[t]);return f},me=(f,e)=>Xe(f,Ke(e));Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const z=require("three"),$e=require("@tweenjs/tween.js"),se=require("./events.js"),Je=require("deepmerge"),et=require("stats-gl"),tt=require("lil-gui"),st=require("./colorCorrection.js"),it=require("./parseVector.js");require("idb-keyval");require("esus-lite");require("d3-geo");require("d3-geo-projection");const rt=require("three/examples/jsm/helpers/RectAreaLightHelper"),ot=require("three/examples/jsm/helpers/ViewHelper"),nt=require("three/examples/jsm/controls/TransformControls"),Te=require("three/examples/jsm/postprocessing/EffectComposer"),at=require("three/examples/jsm/postprocessing/RenderPass"),ht=require("three/examples/jsm/postprocessing/SSAOPass"),lt=require("three/examples/jsm/postprocessing/Pass"),ct=require("three/examples/jsm/postprocessing/OutputPass"),dt=require("three/examples/jsm/postprocessing/ShaderPass"),mt=require("three/examples/jsm/postprocessing/UnrealBloomPass");require("three/examples/jsm/renderers/CSS2DRenderer");require("three/examples/jsm/renderers/CSS3DRenderer");require("three/examples/jsm/lights/RectAreaLightUniformsLib");require("three/examples/jsm/lines/LineSegments2");const Ve=require("./index2.js");require("three/examples/jsm/lines/LineSegmentsGeometry");require("three/examples/jsm/lines/LineMaterial");require("three-bvh-csg");const pt=require("./isPlainObject.js"),_t=require("./BaseObject.js");function Be(f){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(f){for(const t in f)if(t!=="default"){const s=Object.getOwnPropertyDescriptor(f,t);Object.defineProperty(e,t,s.get?s:{enumerable:!0,get:()=>f[t]})}}return e.default=f,Object.freeze(e)}const w=Be(z),xe=Be($e),U={LEFT:1,RIGHT:2,MIDDLE:4},h=Object.freeze({NONE:0,ROTATE:1,TRUCK:2,OFFSET:4,DOLLY:8,ZOOM:16,TOUCH_ROTATE:32,TOUCH_TRUCK:64,TOUCH_OFFSET:128,TOUCH_DOLLY:256,TOUCH_ZOOM:512,TOUCH_DOLLY_TRUCK:1024,TOUCH_DOLLY_OFFSET:2048,TOUCH_DOLLY_ROTATE:4096,TOUCH_ZOOM_TRUCK:8192,TOUCH_ZOOM_OFFSET:16384,TOUCH_ZOOM_ROTATE:32768}),Z={NONE:0,IN:1,OUT:-1};function N(f){return f.isPerspectiveCamera}function V(f){return f.isOrthographicCamera}const q=Math.PI*2,we=Math.PI/2,Ne=1e-5,Q=Math.PI/180;function F(f,e,t){return Math.max(e,Math.min(t,f))}function b(f,e=Ne){return Math.abs(f)<e}function A(f,e,t=Ne){return b(f-e,t)}function Se(f,e){return Math.round(f/e)*e}function $(f){return isFinite(f)?f:f<0?-Number.MAX_VALUE:Number.MAX_VALUE}function J(f){return Math.abs(f)<Number.MAX_VALUE?f:f*(1/0)}function oe(f,e,t,s,i=1/0,r){s=Math.max(1e-4,s);const n=2/s,a=n*r,l=1/(1+a+.48*a*a+.235*a*a*a);let d=f-e;const y=e,c=i*s;d=F(d,-c,c),e=f-d;const v=(t.value+n*d)*r;t.value=(t.value-n*v)*l;let C=e+(d+v)*l;return y-f>0==C>y&&(C=y,t.value=(C-y)/r),C}function Pe(f,e,t,s,i=1/0,r,n){s=Math.max(1e-4,s);const a=2/s,l=a*r,d=1/(1+l+.48*l*l+.235*l*l*l);let y=e.x,c=e.y,v=e.z,C=f.x-y,u=f.y-c,p=f.z-v;const _=y,o=c,m=v,E=i*s,g=E*E,x=C*C+u*u+p*p;if(x>g){const de=Math.sqrt(x);C=C/de*E,u=u/de*E,p=p/de*E}y=f.x-C,c=f.y-u,v=f.z-p;const O=(t.x+a*C)*r,D=(t.y+a*u)*r,R=(t.z+a*p)*r;t.x=(t.x-a*O)*d,t.y=(t.y-a*D)*d,t.z=(t.z-a*R)*d,n.x=y+(C+O)*d,n.y=c+(u+D)*d,n.z=v+(p+R)*d;const ie=_-f.x,re=o-f.y,Ye=m-f.z,Ze=n.x-_,qe=n.y-o,We=n.z-m;return ie*Ze+re*qe+Ye*We>0&&(n.x=_,n.y=o,n.z=m,t.x=(n.x-_)/r,t.y=(n.y-o)/r,t.z=(n.z-m)/r),n}function pe(f,e){e.set(0,0),f.forEach(t=>{e.x+=t.clientX,e.y+=t.clientY}),e.x/=f.length,e.y/=f.length}function _e(f,e){return V(f)?(console.warn(`${e} is not supported in OrthographicCamera`),!0):!1}class ut{constructor(){this._listeners={}}addEventListener(e,t){const s=this._listeners;s[e]===void 0&&(s[e]=[]),s[e].indexOf(t)===-1&&s[e].push(t)}hasEventListener(e,t){const s=this._listeners;return s[e]!==void 0&&s[e].indexOf(t)!==-1}removeEventListener(e,t){const i=this._listeners[e];if(i!==void 0){const r=i.indexOf(t);r!==-1&&i.splice(r,1)}}removeAllEventListeners(e){if(!e){this._listeners={};return}Array.isArray(this._listeners[e])&&(this._listeners[e].length=0)}dispatchEvent(e){const s=this._listeners[e.type];if(s!==void 0){e.target=this;const i=s.slice(0);for(let r=0,n=i.length;r<n;r++)i[r].call(this,e)}}}const ne=1/8,ft=/Mac/.test(navigator.platform);let T,Ae,ae,ue,L,S,P,W,ee,I,H,Y,De,be,M,te,G,Ue,fe,Re,ge,Ce,he;class j extends ut{static install(e){T=e.THREE,Ae=Object.freeze(new T.Vector3(0,0,0)),ae=Object.freeze(new T.Vector3(0,1,0)),ue=Object.freeze(new T.Vector3(0,0,1)),L=new T.Vector2,S=new T.Vector3,P=new T.Vector3,W=new T.Vector3,ee=new T.Vector3,I=new T.Vector3,H=new T.Vector3,Y=new T.Vector3,De=new T.Vector3,be=new T.Vector3,M=new T.Spherical,te=new T.Spherical,G=new T.Box3,Ue=new T.Box3,fe=new T.Sphere,Re=new T.Quaternion,ge=new T.Quaternion,Ce=new T.Matrix4,he=new T.Raycaster}static get ACTION(){return h}constructor(e,t){super(),this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.minDistance=Number.EPSILON,this.maxDistance=1/0,this.infinityDolly=!1,this.minZoom=.01,this.maxZoom=1/0,this.smoothTime=.25,this.draggingSmoothTime=.125,this.maxSpeed=1/0,this.azimuthRotateSpeed=1,this.polarRotateSpeed=1,this.dollySpeed=1,this.dollyDragInverted=!1,this.truckSpeed=2,this.dollyToCursor=!1,this.dragToOffset=!1,this.verticalDragToForward=!1,this.boundaryFriction=0,this.restThreshold=.01,this.colliderMeshes=[],this.cancel=()=>{},this._enabled=!0,this._state=h.NONE,this._viewport=null,this._changedDolly=0,this._changedZoom=0,this._hasRested=!0,this._boundaryEnclosesCamera=!1,this._needsUpdate=!0,this._updatedLastTime=!1,this._elementRect=new DOMRect,this._isDragging=!1,this._dragNeedsUpdate=!0,this._activePointers=[],this._lockedPointer=null,this._interactiveArea=new DOMRect(0,0,1,1),this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._isUserControllingOffset=!1,this._isUserControllingZoom=!1,this._lastDollyDirection=Z.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new T.Vector3,this._focalOffsetVelocity=new T.Vector3,this._zoomVelocity={value:0},this._truckInternal=(o,m,E)=>{let g,x;if(N(this._camera)){const O=S.copy(this._camera.position).sub(this._target),D=this._camera.getEffectiveFOV()*Q,R=O.length()*Math.tan(D*.5);g=this.truckSpeed*o*R/this._elementRect.height,x=this.truckSpeed*m*R/this._elementRect.height}else if(V(this._camera)){const O=this._camera;g=o*(O.right-O.left)/O.zoom/this._elementRect.width,x=m*(O.top-O.bottom)/O.zoom/this._elementRect.height}else return;this.verticalDragToForward?(E?this.setFocalOffset(this._focalOffsetEnd.x+g,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(g,0,!0),this.forward(-x,!0)):E?this.setFocalOffset(this._focalOffsetEnd.x+g,this._focalOffsetEnd.y+x,this._focalOffsetEnd.z,!0):this.truck(g,x,!0)},this._rotateInternal=(o,m)=>{const E=q*this.azimuthRotateSpeed*o/this._elementRect.height,g=q*this.polarRotateSpeed*m/this._elementRect.height;this.rotate(E,g,!0)},this._dollyInternal=(o,m,E)=>{const g=Math.pow(.95,-o*this.dollySpeed),x=this._sphericalEnd.radius,O=this._sphericalEnd.radius*g,D=F(O,this.minDistance,this.maxDistance),R=D-O;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(O,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(R,!0),this._dollyToNoClamp(D,!0)):this._dollyToNoClamp(D,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?O:D)-x,this._dollyControlCoord.set(m,E)),this._lastDollyDirection=Math.sign(-o)},this._zoomInternal=(o,m,E)=>{const g=Math.pow(.95,o*this.dollySpeed),x=this._zoom,O=this._zoom*g;this.zoomTo(O,!0),this.dollyToCursor&&(this._changedZoom+=O-x,this._dollyControlCoord.set(m,E))},typeof T=="undefined"&&console.error("camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."),this._camera=e,this._yAxisUpSpace=new T.Quaternion().setFromUnitVectors(this._camera.up,ae),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=h.NONE,this._target=new T.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new T.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new T.Spherical().setFromVector3(S.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace)),this._sphericalEnd=this._spherical.clone(),this._lastDistance=this._spherical.radius,this._zoom=this._camera.zoom,this._zoomEnd=this._zoom,this._lastZoom=this._zoom,this._nearPlaneCorners=[new T.Vector3,new T.Vector3,new T.Vector3,new T.Vector3],this._updateNearPlaneCorners(),this._boundary=new T.Box3(new T.Vector3(-1/0,-1/0,-1/0),new T.Vector3(1/0,1/0,1/0)),this._cameraUp0=this._camera.up.clone(),this._target0=this._target.clone(),this._position0=this._camera.position.clone(),this._zoom0=this._zoom,this._focalOffset0=this._focalOffset.clone(),this._dollyControlCoord=new T.Vector2,this.mouseButtons={left:h.ROTATE,middle:h.DOLLY,right:h.TRUCK,wheel:N(this._camera)?h.DOLLY:V(this._camera)?h.ZOOM:h.NONE},this.touches={one:h.TOUCH_ROTATE,two:N(this._camera)?h.TOUCH_DOLLY_TRUCK:V(this._camera)?h.TOUCH_ZOOM_TRUCK:h.NONE,three:h.TOUCH_TRUCK};const s=new T.Vector2,i=new T.Vector2,r=new T.Vector2,n=o=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const g=this._domElement.getBoundingClientRect(),x=(o.clientX-g.left)/(g.right-g.left),O=(o.clientY-g.top)/(g.bottom-g.top);if(x<this._interactiveArea.left||x>this._interactiveArea.right||O<this._interactiveArea.top||O>this._interactiveArea.bottom)return}const m=o.pointerType!=="mouse"?null:(o.buttons&U.LEFT)===U.LEFT?U.LEFT:(o.buttons&U.MIDDLE)===U.MIDDLE?U.MIDDLE:(o.buttons&U.RIGHT)===U.RIGHT?U.RIGHT:null;if(m!==null){const g=this._findPointerByMouseButton(m);g&&this._disposePointer(g)}if((o.buttons&U.LEFT)===U.LEFT&&this._lockedPointer)return;const E={pointerId:o.pointerId,clientX:o.clientX,clientY:o.clientY,deltaX:0,deltaY:0,mouseButton:m};this._activePointers.push(E),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.addEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),this._isDragging=!0,v(o)},a=o=>{o.cancelable&&o.preventDefault();const m=o.pointerId,E=this._lockedPointer||this._findPointerById(m);if(E){if(E.clientX=o.clientX,E.clientY=o.clientY,E.deltaX=o.movementX,E.deltaY=o.movementY,this._state=0,o.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else(!this._isDragging&&this._lockedPointer||this._isDragging&&(o.buttons&U.LEFT)===U.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(o.buttons&U.MIDDLE)===U.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(o.buttons&U.RIGHT)===U.RIGHT&&(this._state=this._state|this.mouseButtons.right);C()}},l=o=>{const m=this._findPointerById(o.pointerId);if(!(m&&m===this._lockedPointer)){if(m&&this._disposePointer(m),o.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=h.NONE;break;case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else this._state=h.NONE;u()}};let d=-1;const y=o=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===h.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const O=this._domElement.getBoundingClientRect(),D=(o.clientX-O.left)/(O.right-O.left),R=(o.clientY-O.top)/(O.bottom-O.top);if(D<this._interactiveArea.left||D>this._interactiveArea.right||R<this._interactiveArea.top||R>this._interactiveArea.bottom)return}if(o.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===h.ROTATE||this.mouseButtons.wheel===h.TRUCK){const O=performance.now();d-O<1e3&&this._getClientRect(this._elementRect),d=O}const m=ft?-1:-3,E=o.deltaMode===1?o.deltaY/m:o.deltaY/(m*10),g=this.dollyToCursor?(o.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,x=this.dollyToCursor?(o.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case h.ROTATE:{this._rotateInternal(o.deltaX,o.deltaY),this._isUserControllingRotate=!0;break}case h.TRUCK:{this._truckInternal(o.deltaX,o.deltaY,!1),this._isUserControllingTruck=!0;break}case h.OFFSET:{this._truckInternal(o.deltaX,o.deltaY,!0),this._isUserControllingOffset=!0;break}case h.DOLLY:{this._dollyInternal(-E,g,x),this._isUserControllingDolly=!0;break}case h.ZOOM:{this._zoomInternal(-E,g,x),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},c=o=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===j.ACTION.NONE){const m=o instanceof PointerEvent?o.pointerId:0,E=this._findPointerById(m);E&&this._disposePointer(E),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l);return}o.preventDefault()}},v=o=>{if(!this._enabled)return;if(pe(this._activePointers,L),this._getClientRect(this._elementRect),s.copy(L),i.copy(L),this._activePointers.length>=2){const E=L.x-this._activePointers[1].clientX,g=L.y-this._activePointers[1].clientY,x=Math.sqrt(E*E+g*g);r.set(0,x);const O=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,D=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;i.set(O,D)}if(this._state=0,!o)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in o&&o.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else!this._lockedPointer&&(o.buttons&U.LEFT)===U.LEFT&&(this._state=this._state|this.mouseButtons.left),(o.buttons&U.MIDDLE)===U.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(o.buttons&U.RIGHT)===U.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&h.ROTATE)===h.ROTATE||(this._state&h.TOUCH_ROTATE)===h.TOUCH_ROTATE||(this._state&h.TOUCH_DOLLY_ROTATE)===h.TOUCH_DOLLY_ROTATE||(this._state&h.TOUCH_ZOOM_ROTATE)===h.TOUCH_ZOOM_ROTATE)&&(this._sphericalEnd.theta=this._spherical.theta,this._sphericalEnd.phi=this._spherical.phi,this._thetaVelocity.value=0,this._phiVelocity.value=0),((this._state&h.TRUCK)===h.TRUCK||(this._state&h.TOUCH_TRUCK)===h.TOUCH_TRUCK||(this._state&h.TOUCH_DOLLY_TRUCK)===h.TOUCH_DOLLY_TRUCK||(this._state&h.TOUCH_ZOOM_TRUCK)===h.TOUCH_ZOOM_TRUCK)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&h.DOLLY)===h.DOLLY||(this._state&h.TOUCH_DOLLY)===h.TOUCH_DOLLY||(this._state&h.TOUCH_DOLLY_TRUCK)===h.TOUCH_DOLLY_TRUCK||(this._state&h.TOUCH_DOLLY_OFFSET)===h.TOUCH_DOLLY_OFFSET||(this._state&h.TOUCH_DOLLY_ROTATE)===h.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&h.ZOOM)===h.ZOOM||(this._state&h.TOUCH_ZOOM)===h.TOUCH_ZOOM||(this._state&h.TOUCH_ZOOM_TRUCK)===h.TOUCH_ZOOM_TRUCK||(this._state&h.TOUCH_ZOOM_OFFSET)===h.TOUCH_ZOOM_OFFSET||(this._state&h.TOUCH_ZOOM_ROTATE)===h.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&h.OFFSET)===h.OFFSET||(this._state&h.TOUCH_OFFSET)===h.TOUCH_OFFSET||(this._state&h.TOUCH_DOLLY_OFFSET)===h.TOUCH_DOLLY_OFFSET||(this._state&h.TOUCH_ZOOM_OFFSET)===h.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},C=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,pe(this._activePointers,L);const m=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,E=m?-m.deltaX:i.x-L.x,g=m?-m.deltaY:i.y-L.y;if(i.copy(L),((this._state&h.ROTATE)===h.ROTATE||(this._state&h.TOUCH_ROTATE)===h.TOUCH_ROTATE||(this._state&h.TOUCH_DOLLY_ROTATE)===h.TOUCH_DOLLY_ROTATE||(this._state&h.TOUCH_ZOOM_ROTATE)===h.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(E,g),this._isUserControllingRotate=!0),(this._state&h.DOLLY)===h.DOLLY||(this._state&h.ZOOM)===h.ZOOM){const x=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,O=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0,D=this.dollyDragInverted?-1:1;(this._state&h.DOLLY)===h.DOLLY?(this._dollyInternal(D*g*ne,x,O),this._isUserControllingDolly=!0):(this._zoomInternal(D*g*ne,x,O),this._isUserControllingZoom=!0)}if((this._state&h.TOUCH_DOLLY)===h.TOUCH_DOLLY||(this._state&h.TOUCH_ZOOM)===h.TOUCH_ZOOM||(this._state&h.TOUCH_DOLLY_TRUCK)===h.TOUCH_DOLLY_TRUCK||(this._state&h.TOUCH_ZOOM_TRUCK)===h.TOUCH_ZOOM_TRUCK||(this._state&h.TOUCH_DOLLY_OFFSET)===h.TOUCH_DOLLY_OFFSET||(this._state&h.TOUCH_ZOOM_OFFSET)===h.TOUCH_ZOOM_OFFSET||(this._state&h.TOUCH_DOLLY_ROTATE)===h.TOUCH_DOLLY_ROTATE||(this._state&h.TOUCH_ZOOM_ROTATE)===h.TOUCH_ZOOM_ROTATE){const x=L.x-this._activePointers[1].clientX,O=L.y-this._activePointers[1].clientY,D=Math.sqrt(x*x+O*O),R=r.y-D;r.set(0,D);const ie=this.dollyToCursor?(i.x-this._elementRect.x)/this._elementRect.width*2-1:0,re=this.dollyToCursor?(i.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&h.TOUCH_DOLLY)===h.TOUCH_DOLLY||(this._state&h.TOUCH_DOLLY_ROTATE)===h.TOUCH_DOLLY_ROTATE||(this._state&h.TOUCH_DOLLY_TRUCK)===h.TOUCH_DOLLY_TRUCK||(this._state&h.TOUCH_DOLLY_OFFSET)===h.TOUCH_DOLLY_OFFSET?(this._dollyInternal(R*ne,ie,re),this._isUserControllingDolly=!0):(this._zoomInternal(R*ne,ie,re),this._isUserControllingZoom=!0)}((this._state&h.TRUCK)===h.TRUCK||(this._state&h.TOUCH_TRUCK)===h.TOUCH_TRUCK||(this._state&h.TOUCH_DOLLY_TRUCK)===h.TOUCH_DOLLY_TRUCK||(this._state&h.TOUCH_ZOOM_TRUCK)===h.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(E,g,!1),this._isUserControllingTruck=!0),((this._state&h.OFFSET)===h.OFFSET||(this._state&h.TOUCH_OFFSET)===h.TOUCH_OFFSET||(this._state&h.TOUCH_DOLLY_OFFSET)===h.TOUCH_DOLLY_OFFSET||(this._state&h.TOUCH_ZOOM_OFFSET)===h.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(E,g,!0),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},u=()=>{pe(this._activePointers,L),i.copy(L),this._dragNeedsUpdate=!1,(this._activePointers.length===0||this._activePointers.length===1&&this._activePointers[0]===this._lockedPointer)&&(this._isDragging=!1),this._activePointers.length===0&&this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",p),this._domElement.ownerDocument.addEventListener("pointerlockerror",_),this._domElement.ownerDocument.addEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),v())},this.unlockPointer=()=>{var o,m,E;this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),(o=this._domElement)===null||o===void 0||o.ownerDocument.exitPointerLock(),(m=this._domElement)===null||m===void 0||m.ownerDocument.removeEventListener("pointerlockchange",p),(E=this._domElement)===null||E===void 0||E.ownerDocument.removeEventListener("pointerlockerror",_),this.cancel()};const p=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},_=()=>{this.unlockPointer()};this._addAllEventListeners=o=>{this._domElement=o,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",n),this._domElement.addEventListener("pointercancel",l),this._domElement.addEventListener("wheel",y,{passive:!1}),this._domElement.addEventListener("contextmenu",c)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",n),this._domElement.removeEventListener("pointercancel",l),this._domElement.removeEventListener("wheel",y,{passive:!1}),this._domElement.removeEventListener("contextmenu",c),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.removeEventListener("pointerlockchange",p),this._domElement.ownerDocument.removeEventListener("pointerlockerror",_))},this.cancel=()=>{this._state!==h.NONE&&(this._state=h.NONE,this._activePointers.length=0,u())},t&&this.connect(t),this.update(0)}get camera(){return this._camera}set camera(e){this._camera=e,this.updateCameraUp(),this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0}get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._domElement&&(e?(this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none"):(this.cancel(),this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect=""))}get active(){return!this._hasRested}get currentAction(){return this._state}get distance(){return this._spherical.radius}set distance(e){this._spherical.radius===e&&this._sphericalEnd.radius===e||(this._spherical.radius=e,this._sphericalEnd.radius=e,this._needsUpdate=!0)}get azimuthAngle(){return this._spherical.theta}set azimuthAngle(e){this._spherical.theta===e&&this._sphericalEnd.theta===e||(this._spherical.theta=e,this._sphericalEnd.theta=e,this._needsUpdate=!0)}get polarAngle(){return this._spherical.phi}set polarAngle(e){this._spherical.phi===e&&this._sphericalEnd.phi===e||(this._spherical.phi=e,this._sphericalEnd.phi=e,this._needsUpdate=!0)}get boundaryEnclosesCamera(){return this._boundaryEnclosesCamera}set boundaryEnclosesCamera(e){this._boundaryEnclosesCamera=e,this._needsUpdate=!0}set interactiveArea(e){this._interactiveArea.width=F(e.width,0,1),this._interactiveArea.height=F(e.height,0,1),this._interactiveArea.x=F(e.x,0,1-this._interactiveArea.width),this._interactiveArea.y=F(e.y,0,1-this._interactiveArea.height)}addEventListener(e,t){super.addEventListener(e,t)}removeEventListener(e,t){super.removeEventListener(e,t)}rotate(e,t,s=!1){return this.rotateTo(this._sphericalEnd.theta+e,this._sphericalEnd.phi+t,s)}rotateAzimuthTo(e,t=!1){return this.rotateTo(e,this._sphericalEnd.phi,t)}rotatePolarTo(e,t=!1){return this.rotateTo(this._sphericalEnd.theta,e,t)}rotateTo(e,t,s=!1){this._isUserControllingRotate=!1;const i=F(e,this.minAzimuthAngle,this.maxAzimuthAngle),r=F(t,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=i,this._sphericalEnd.phi=r,this._sphericalEnd.makeSafe(),this._needsUpdate=!0,s||(this._spherical.theta=this._sphericalEnd.theta,this._spherical.phi=this._sphericalEnd.phi);const n=!s||A(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&A(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(n)}dolly(e,t=!1){return this.dollyTo(this._sphericalEnd.radius-e,t)}dollyTo(e,t=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=Z.NONE,this._changedDolly=0,this._dollyToNoClamp(F(e,this.minDistance,this.maxDistance),t)}_dollyToNoClamp(e,t=!1){const s=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const n=this._collisionTest(),a=A(n,this._spherical.radius);if(!(s>e)&&a)return Promise.resolve();this._sphericalEnd.radius=Math.min(e,n)}else this._sphericalEnd.radius=e;this._needsUpdate=!0,t||(this._spherical.radius=this._sphericalEnd.radius);const r=!t||A(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(r)}dollyInFixed(e,t=!1){this._targetEnd.add(this._getCameraDirection(ee).multiplyScalar(e)),t||this._target.copy(this._targetEnd);const s=!t||A(this._target.x,this._targetEnd.x,this.restThreshold)&&A(this._target.y,this._targetEnd.y,this.restThreshold)&&A(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(s)}zoom(e,t=!1){return this.zoomTo(this._zoomEnd+e,t)}zoomTo(e,t=!1){this._isUserControllingZoom=!1,this._zoomEnd=F(e,this.minZoom,this.maxZoom),this._needsUpdate=!0,t||(this._zoom=this._zoomEnd);const s=!t||A(this._zoom,this._zoomEnd,this.restThreshold);return this._changedZoom=0,this._createOnRestPromise(s)}pan(e,t,s=!1){return console.warn("`pan` has been renamed to `truck`"),this.truck(e,t,s)}truck(e,t,s=!1){this._camera.updateMatrix(),I.setFromMatrixColumn(this._camera.matrix,0),H.setFromMatrixColumn(this._camera.matrix,1),I.multiplyScalar(e),H.multiplyScalar(-t);const i=S.copy(I).add(H),r=P.copy(this._targetEnd).add(i);return this.moveTo(r.x,r.y,r.z,s)}forward(e,t=!1){S.setFromMatrixColumn(this._camera.matrix,0),S.crossVectors(this._camera.up,S),S.multiplyScalar(e);const s=P.copy(this._targetEnd).add(S);return this.moveTo(s.x,s.y,s.z,t)}elevate(e,t=!1){return S.copy(this._camera.up).multiplyScalar(e),this.moveTo(this._targetEnd.x+S.x,this._targetEnd.y+S.y,this._targetEnd.z+S.z,t)}moveTo(e,t,s,i=!1){this._isUserControllingTruck=!1;const r=S.set(e,t,s).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,r,this.boundaryFriction),this._needsUpdate=!0,i||this._target.copy(this._targetEnd);const n=!i||A(this._target.x,this._targetEnd.x,this.restThreshold)&&A(this._target.y,this._targetEnd.y,this.restThreshold)&&A(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(n)}lookInDirectionOf(e,t,s,i=!1){const a=S.set(e,t,s).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);return this.setPosition(a.x,a.y,a.z,i)}fitToBox(e,t,{cover:s=!1,paddingLeft:i=0,paddingRight:r=0,paddingBottom:n=0,paddingTop:a=0}={}){const l=[],d=e.isBox3?G.copy(e):G.setFromObject(e);d.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const y=Se(this._sphericalEnd.theta,we),c=Se(this._sphericalEnd.phi,we);l.push(this.rotateTo(y,c,t));const v=S.setFromSpherical(this._sphericalEnd).normalize(),C=Re.setFromUnitVectors(v,ue),u=A(Math.abs(v.y),1);u&&C.multiply(ge.setFromAxisAngle(ae,y)),C.multiply(this._yAxisUpSpaceInverse);const p=Ue.makeEmpty();P.copy(d.min).applyQuaternion(C),p.expandByPoint(P),P.copy(d.min).setX(d.max.x).applyQuaternion(C),p.expandByPoint(P),P.copy(d.min).setY(d.max.y).applyQuaternion(C),p.expandByPoint(P),P.copy(d.max).setZ(d.min.z).applyQuaternion(C),p.expandByPoint(P),P.copy(d.min).setZ(d.max.z).applyQuaternion(C),p.expandByPoint(P),P.copy(d.max).setY(d.min.y).applyQuaternion(C),p.expandByPoint(P),P.copy(d.max).setX(d.min.x).applyQuaternion(C),p.expandByPoint(P),P.copy(d.max).applyQuaternion(C),p.expandByPoint(P),p.min.x-=i,p.min.y-=n,p.max.x+=r,p.max.y+=a,C.setFromUnitVectors(ue,v),u&&C.premultiply(ge.invert()),C.premultiply(this._yAxisUpSpace);const _=p.getSize(S),o=p.getCenter(P).applyQuaternion(C);if(N(this._camera)){const m=this.getDistanceToFitBox(_.x,_.y,_.z,s);l.push(this.moveTo(o.x,o.y,o.z,t)),l.push(this.dollyTo(m,t)),l.push(this.setFocalOffset(0,0,0,t))}else if(V(this._camera)){const m=this._camera,E=m.right-m.left,g=m.top-m.bottom,x=s?Math.max(E/_.x,g/_.y):Math.min(E/_.x,g/_.y);l.push(this.moveTo(o.x,o.y,o.z,t)),l.push(this.zoomTo(x,t)),l.push(this.setFocalOffset(0,0,0,t))}return Promise.all(l)}fitToSphere(e,t){const s=[],r="isObject3D"in e?j.createBoundingSphere(e,fe):fe.copy(e);if(s.push(this.moveTo(r.center.x,r.center.y,r.center.z,t)),N(this._camera)){const n=this.getDistanceToFitSphere(r.radius);s.push(this.dollyTo(n,t))}else if(V(this._camera)){const n=this._camera.right-this._camera.left,a=this._camera.top-this._camera.bottom,l=2*r.radius,d=Math.min(n/l,a/l);s.push(this.zoomTo(d,t))}return s.push(this.setFocalOffset(0,0,0,t)),Promise.all(s)}setLookAt(e,t,s,i,r,n,a=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Z.NONE,this._changedDolly=0;const l=P.set(i,r,n),d=S.set(e,t,s);this._targetEnd.copy(l),this._sphericalEnd.setFromVector3(d.sub(l).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,a||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const y=!a||A(this._target.x,this._targetEnd.x,this.restThreshold)&&A(this._target.y,this._targetEnd.y,this.restThreshold)&&A(this._target.z,this._targetEnd.z,this.restThreshold)&&A(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&A(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&A(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(y)}lerpLookAt(e,t,s,i,r,n,a,l,d,y,c,v,C,u=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Z.NONE,this._changedDolly=0;const p=S.set(i,r,n),_=P.set(e,t,s);M.setFromVector3(_.sub(p).applyQuaternion(this._yAxisUpSpace));const o=W.set(y,c,v),m=P.set(a,l,d);te.setFromVector3(m.sub(o).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(p.lerp(o,C));const E=te.theta-M.theta,g=te.phi-M.phi,x=te.radius-M.radius;this._sphericalEnd.set(M.radius+x*C,M.phi+g*C,M.theta+E*C),this.normalizeRotations(),this._needsUpdate=!0,u||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const O=!u||A(this._target.x,this._targetEnd.x,this.restThreshold)&&A(this._target.y,this._targetEnd.y,this.restThreshold)&&A(this._target.z,this._targetEnd.z,this.restThreshold)&&A(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&A(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&A(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(O)}setPosition(e,t,s,i=!1){return this.setLookAt(e,t,s,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,i)}setTarget(e,t,s,i=!1){const r=this.getPosition(S),n=this.setLookAt(r.x,r.y,r.z,e,t,s,i);return this._sphericalEnd.phi=F(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),n}setFocalOffset(e,t,s,i=!1){this._isUserControllingOffset=!1,this._focalOffsetEnd.set(e,t,s),this._needsUpdate=!0,i||this._focalOffset.copy(this._focalOffsetEnd);const r=!i||A(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&A(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&A(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(r)}setOrbitPoint(e,t,s){this._camera.updateMatrixWorld(),I.setFromMatrixColumn(this._camera.matrixWorldInverse,0),H.setFromMatrixColumn(this._camera.matrixWorldInverse,1),Y.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const i=S.set(e,t,s),r=i.distanceTo(this._camera.position),n=i.sub(this._camera.position);I.multiplyScalar(n.x),H.multiplyScalar(n.y),Y.multiplyScalar(n.z),S.copy(I).add(H).add(Y),S.z=S.z+r,this.dollyTo(r,!1),this.setFocalOffset(-S.x,S.y,-S.z,!1),this.moveTo(e,t,s,!1)}setBoundary(e){if(!e){this._boundary.min.set(-1/0,-1/0,-1/0),this._boundary.max.set(1/0,1/0,1/0),this._needsUpdate=!0;return}this._boundary.copy(e),this._boundary.clampPoint(this._targetEnd,this._targetEnd),this._needsUpdate=!0}setViewport(e,t,s,i){if(e===null){this._viewport=null;return}this._viewport=this._viewport||new T.Vector4,typeof e=="number"?this._viewport.set(e,t,s,i):this._viewport.copy(e)}getDistanceToFitBox(e,t,s,i=!1){if(_e(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const r=e/t,n=this._camera.getEffectiveFOV()*Q,a=this._camera.aspect;return((i?r>a:r<a)?t:e/a)*.5/Math.tan(n*.5)+s*.5}getDistanceToFitSphere(e){if(_e(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const t=this._camera.getEffectiveFOV()*Q,s=Math.atan(Math.tan(t*.5)*this._camera.aspect)*2,i=1<this._camera.aspect?t:s;return e/Math.sin(i*.5)}getTarget(e,t=!0){return(e&&e.isVector3?e:new T.Vector3).copy(t?this._targetEnd:this._target)}getPosition(e,t=!0){return(e&&e.isVector3?e:new T.Vector3).setFromSpherical(t?this._sphericalEnd:this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(t?this._targetEnd:this._target)}getSpherical(e,t=!0){return(e||new T.Spherical).copy(t?this._sphericalEnd:this._spherical)}getFocalOffset(e,t=!0){return(e&&e.isVector3?e:new T.Vector3).copy(t?this._focalOffsetEnd:this._focalOffset)}normalizeRotations(){this._sphericalEnd.theta=this._sphericalEnd.theta%q,this._sphericalEnd.theta<0&&(this._sphericalEnd.theta+=q),this._spherical.theta+=q*Math.round((this._sphericalEnd.theta-this._spherical.theta)/q)}reset(e=!1){if(!A(this._camera.up.x,this._cameraUp0.x)||!A(this._camera.up.y,this._cameraUp0.y)||!A(this._camera.up.z,this._cameraUp0.z)){this._camera.up.copy(this._cameraUp0);const s=this.getPosition(S);this.updateCameraUp(),this.setPosition(s.x,s.y,s.z)}const t=[this.setLookAt(this._position0.x,this._position0.y,this._position0.z,this._target0.x,this._target0.y,this._target0.z,e),this.setFocalOffset(this._focalOffset0.x,this._focalOffset0.y,this._focalOffset0.z,e),this.zoomTo(this._zoom0,e)];return Promise.all(t)}saveState(){this._cameraUp0.copy(this._camera.up),this.getTarget(this._target0),this.getPosition(this._position0),this._zoom0=this._zoom,this._focalOffset0.copy(this._focalOffset)}updateCameraUp(){this._yAxisUpSpace.setFromUnitVectors(this._camera.up,ae),this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert()}applyCameraUp(){const e=S.subVectors(this._target,this._camera.position).normalize(),t=P.crossVectors(e,this._camera.up);this._camera.up.crossVectors(t,e).normalize(),this._camera.updateMatrixWorld();const s=this.getPosition(S);this.updateCameraUp(),this.setPosition(s.x,s.y,s.z)}update(e){const t=this._sphericalEnd.theta-this._spherical.theta,s=this._sphericalEnd.phi-this._spherical.phi,i=this._sphericalEnd.radius-this._spherical.radius,r=De.subVectors(this._targetEnd,this._target),n=be.subVectors(this._focalOffsetEnd,this._focalOffset),a=this._zoomEnd-this._zoom;if(b(t))this._thetaVelocity.value=0,this._spherical.theta=this._sphericalEnd.theta;else{const c=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.theta=oe(this._spherical.theta,this._sphericalEnd.theta,this._thetaVelocity,c,1/0,e),this._needsUpdate=!0}if(b(s))this._phiVelocity.value=0,this._spherical.phi=this._sphericalEnd.phi;else{const c=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.phi=oe(this._spherical.phi,this._sphericalEnd.phi,this._phiVelocity,c,1/0,e),this._needsUpdate=!0}if(b(i))this._radiusVelocity.value=0,this._spherical.radius=this._sphericalEnd.radius;else{const c=this._isUserControllingDolly?this.draggingSmoothTime:this.smoothTime;this._spherical.radius=oe(this._spherical.radius,this._sphericalEnd.radius,this._radiusVelocity,c,this.maxSpeed,e),this._needsUpdate=!0}if(b(r.x)&&b(r.y)&&b(r.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const c=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;Pe(this._target,this._targetEnd,this._targetVelocity,c,this.maxSpeed,e,this._target),this._needsUpdate=!0}if(b(n.x)&&b(n.y)&&b(n.z))this._focalOffsetVelocity.set(0,0,0),this._focalOffset.copy(this._focalOffsetEnd);else{const c=this._isUserControllingOffset?this.draggingSmoothTime:this.smoothTime;Pe(this._focalOffset,this._focalOffsetEnd,this._focalOffsetVelocity,c,this.maxSpeed,e,this._focalOffset),this._needsUpdate=!0}if(b(a))this._zoomVelocity.value=0,this._zoom=this._zoomEnd;else{const c=this._isUserControllingZoom?this.draggingSmoothTime:this.smoothTime;this._zoom=oe(this._zoom,this._zoomEnd,this._zoomVelocity,c,1/0,e)}if(this.dollyToCursor){if(N(this._camera)&&this._changedDolly!==0){const c=this._spherical.radius-this._lastDistance,v=this._camera,C=this._getCameraDirection(ee),u=S.copy(C).cross(v.up).normalize();u.lengthSq()===0&&(u.x=1);const p=P.crossVectors(u,C),_=this._sphericalEnd.radius*Math.tan(v.getEffectiveFOV()*Q*.5),m=(this._sphericalEnd.radius-c-this._sphericalEnd.radius)/this._sphericalEnd.radius,E=W.copy(this._targetEnd).add(u.multiplyScalar(this._dollyControlCoord.x*_*v.aspect)).add(p.multiplyScalar(this._dollyControlCoord.y*_)),g=S.copy(this._targetEnd).lerp(E,m),x=this._lastDollyDirection===Z.IN&&this._spherical.radius<=this.minDistance,O=this._lastDollyDirection===Z.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(x||O)){this._sphericalEnd.radius-=c,this._spherical.radius-=c;const R=P.copy(C).multiplyScalar(-c);g.add(R)}this._boundary.clampPoint(g,g);const D=P.subVectors(g,this._targetEnd);this._targetEnd.copy(g),this._target.add(D),this._changedDolly-=c,b(this._changedDolly)&&(this._changedDolly=0)}else if(V(this._camera)&&this._changedZoom!==0){const c=this._zoom-this._lastZoom,v=this._camera,C=S.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(v.near+v.far)/(v.near-v.far)).unproject(v),u=P.set(0,0,-1).applyQuaternion(v.quaternion),p=W.copy(C).add(u.multiplyScalar(-C.dot(v.up))),o=-(this._zoom-c-this._zoom)/this._zoom,m=this._getCameraDirection(ee),E=this._targetEnd.dot(m),g=S.copy(this._targetEnd).lerp(p,o),x=g.dot(m),O=m.multiplyScalar(x-E);g.sub(O),this._boundary.clampPoint(g,g);const D=P.subVectors(g,this._targetEnd);this._targetEnd.copy(g),this._target.add(D),this._changedZoom-=c,b(this._changedZoom)&&(this._changedZoom=0)}}this._camera.zoom!==this._zoom&&(this._camera.zoom=this._zoom,this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0),this._dragNeedsUpdate=!0;const l=this._collisionTest();this._spherical.radius=Math.min(this._spherical.radius,l),this._spherical.makeSafe(),this._camera.position.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(this._target),this._camera.lookAt(this._target),(!b(this._focalOffset.x)||!b(this._focalOffset.y)||!b(this._focalOffset.z))&&(this._camera.updateMatrixWorld(),I.setFromMatrixColumn(this._camera.matrix,0),H.setFromMatrixColumn(this._camera.matrix,1),Y.setFromMatrixColumn(this._camera.matrix,2),I.multiplyScalar(this._focalOffset.x),H.multiplyScalar(-this._focalOffset.y),Y.multiplyScalar(this._focalOffset.z),S.copy(I).add(H).add(Y),this._camera.position.add(S)),this._boundaryEnclosesCamera&&this._encloseToBoundary(this._camera.position.copy(this._target),S.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),1);const y=this._needsUpdate;return y&&!this._updatedLastTime?(this._hasRested=!1,this.dispatchEvent({type:"wake"}),this.dispatchEvent({type:"update"})):y?(this.dispatchEvent({type:"update"}),b(t,this.restThreshold)&&b(s,this.restThreshold)&&b(i,this.restThreshold)&&b(r.x,this.restThreshold)&&b(r.y,this.restThreshold)&&b(r.z,this.restThreshold)&&b(n.x,this.restThreshold)&&b(n.y,this.restThreshold)&&b(n.z,this.restThreshold)&&b(a,this.restThreshold)&&!this._hasRested&&(this._hasRested=!0,this.dispatchEvent({type:"rest"}))):!y&&this._updatedLastTime&&(this._hasRested||(this._hasRested=!0,this.dispatchEvent({type:"rest"})),this.dispatchEvent({type:"sleep"})),this._lastDistance=this._spherical.radius,this._lastZoom=this._zoom,this._updatedLastTime=y,this._needsUpdate=!1,y}toJSON(){return JSON.stringify({enabled:this._enabled,minDistance:this.minDistance,maxDistance:$(this.maxDistance),minZoom:this.minZoom,maxZoom:$(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:$(this.maxPolarAngle),minAzimuthAngle:$(this.minAzimuthAngle),maxAzimuthAngle:$(this.maxAzimuthAngle),smoothTime:this.smoothTime,draggingSmoothTime:this.draggingSmoothTime,dollySpeed:this.dollySpeed,truckSpeed:this.truckSpeed,dollyToCursor:this.dollyToCursor,verticalDragToForward:this.verticalDragToForward,target:this._targetEnd.toArray(),position:S.setFromSpherical(this._sphericalEnd).add(this._targetEnd).toArray(),zoom:this._zoomEnd,focalOffset:this._focalOffsetEnd.toArray(),target0:this._target0.toArray(),position0:this._position0.toArray(),zoom0:this._zoom0,focalOffset0:this._focalOffset0.toArray()})}fromJSON(e,t=!1){const s=JSON.parse(e);this.enabled=s.enabled,this.minDistance=s.minDistance,this.maxDistance=J(s.maxDistance),this.minZoom=s.minZoom,this.maxZoom=J(s.maxZoom),this.minPolarAngle=s.minPolarAngle,this.maxPolarAngle=J(s.maxPolarAngle),this.minAzimuthAngle=J(s.minAzimuthAngle),this.maxAzimuthAngle=J(s.maxAzimuthAngle),this.smoothTime=s.smoothTime,this.draggingSmoothTime=s.draggingSmoothTime,this.dollySpeed=s.dollySpeed,this.truckSpeed=s.truckSpeed,this.dollyToCursor=s.dollyToCursor,this.verticalDragToForward=s.verticalDragToForward,this._target0.fromArray(s.target0),this._position0.fromArray(s.position0),this._zoom0=s.zoom0,this._focalOffset0.fromArray(s.focalOffset0),this.moveTo(s.target[0],s.target[1],s.target[2],t),M.setFromVector3(S.fromArray(s.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(M.theta,M.phi,t),this.dollyTo(M.radius,t),this.zoomTo(s.zoom,t),this.setFocalOffset(s.focalOffset[0],s.focalOffset[1],s.focalOffset[2],t),this._needsUpdate=!0}connect(e){if(this._domElement){console.warn("camera-controls is already connected.");return}this._addAllEventListeners(e),this._getClientRect(this._elementRect)}disconnect(){this.cancel(),this._removeAllEventListeners(),this._domElement&&(this._domElement=void 0)}dispose(){this.removeAllEventListeners(),this.disconnect()}_getTargetDirection(e){return e.setFromSpherical(this._spherical).divideScalar(this._spherical.radius).applyQuaternion(this._yAxisUpSpaceInverse)}_getCameraDirection(e){return this._getTargetDirection(e).negate()}_findPointerById(e){return this._activePointers.find(t=>t.pointerId===e)}_findPointerByMouseButton(e){return this._activePointers.find(t=>t.mouseButton===e)}_disposePointer(e){this._activePointers.splice(this._activePointers.indexOf(e),1)}_encloseToBoundary(e,t,s){const i=t.lengthSq();if(i===0)return e;const r=P.copy(t).add(e),a=this._boundary.clampPoint(r,W).sub(r),l=a.lengthSq();if(l===0)return e.add(t);if(l===i)return e;if(s===0)return e.add(t).add(a);{const d=1+s*l/t.dot(a);return e.add(P.copy(t).multiplyScalar(d)).add(a.multiplyScalar(1-s))}}_updateNearPlaneCorners(){if(N(this._camera)){const e=this._camera,t=e.near,s=e.getEffectiveFOV()*Q,i=Math.tan(s*.5)*t,r=i*e.aspect;this._nearPlaneCorners[0].set(-r,-i,0),this._nearPlaneCorners[1].set(r,-i,0),this._nearPlaneCorners[2].set(r,i,0),this._nearPlaneCorners[3].set(-r,i,0)}else if(V(this._camera)){const e=this._camera,t=1/e.zoom,s=e.left*t,i=e.right*t,r=e.top*t,n=e.bottom*t;this._nearPlaneCorners[0].set(s,r,0),this._nearPlaneCorners[1].set(i,r,0),this._nearPlaneCorners[2].set(i,n,0),this._nearPlaneCorners[3].set(s,n,0)}}_collisionTest(){let e=1/0;if(!(this.colliderMeshes.length>=1)||_e(this._camera,"_collisionTest"))return e;const s=this._getTargetDirection(ee);Ce.lookAt(Ae,s,this._camera.up);for(let i=0;i<4;i++){const r=P.copy(this._nearPlaneCorners[i]);r.applyMatrix4(Ce);const n=W.addVectors(this._target,r);he.set(n,s),he.far=this._spherical.radius+1;const a=he.intersectObjects(this.colliderMeshes);a.length!==0&&a[0].distance<e&&(e=a[0].distance)}return e}_getClientRect(e){if(!this._domElement)return;const t=this._domElement.getBoundingClientRect();return e.x=t.left,e.y=t.top,this._viewport?(e.x+=this._viewport.x,e.y+=t.height-this._viewport.w-this._viewport.y,e.width=this._viewport.z,e.height=this._viewport.w):(e.width=t.width,e.height=t.height),e}_createOnRestPromise(e){return e?Promise.resolve():(this._hasRested=!1,this.dispatchEvent({type:"transitionstart"}),new Promise(t=>{const s=()=>{this.removeEventListener("rest",s),t()};this.addEventListener("rest",s)}))}_addAllEventListeners(e){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(e){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(e){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(e,t=new T.Sphere){const s=t,i=s.center;G.makeEmpty(),e.traverseVisible(n=>{n.isMesh&&G.expandByObject(n)}),G.getCenter(i);let r=0;return e.traverseVisible(n=>{if(!n.isMesh)return;const a=n,l=a.geometry.clone();l.applyMatrix4(a.matrixWorld);const y=l.attributes.position;for(let c=0,v=y.count;c<v;c++)S.fromBufferAttribute(y,c),r=Math.max(r,i.distanceToSquared(S))}),s.radius=Math.sqrt(r),s}}const gt={antialias:!1,devicePixelRatio:window.devicePixelRatio,powerPreference:"high-performance",toneMappingExposure:1,alpha:!1,outputColorSpace:st.ColorSpace.sRGB,logarithmicDepthBuffer:!1,preserveDrawingBuffer:!1,stencil:!1,depth:!1,physicallyCorrectLights:!1};class Ct{constructor(e){this.options=e;const{width:t,height:s,rendererParams:i}=e,{canvas:r,context:n,alpha:a,devicePixelRatio:l,antialias:d,powerPreference:y,toneMappingExposure:c,outputColorSpace:v,logarithmicDepthBuffer:C,preserveDrawingBuffer:u,stencil:p,depth:_,physicallyCorrectLights:o}=i,m=new w.WebGLRenderer({canvas:r,context:n,alpha:a,antialias:d,powerPreference:y,logarithmicDepthBuffer:C,preserveDrawingBuffer:u,stencil:p,depth:_});m.setSize(t,s),m.setPixelRatio(l),m.toneMappingExposure=c,m.outputColorSpace=v,+w.REVISION<155&&(m.useLegacyLights=o),this.renderer=m}setSize(e,t){this.renderer.setSize(e,t)}setPixelRatio(e){this.renderer.setPixelRatio(e)}render(e,t){this.renderer.render(e,t)}setViewport(e){var l,d;const{x:t,y:s,width:i,height:r}=e,n=(l=e.scissor)!=null?l:!1,a=(d=e.scissorTest)!=null?d:!1;this.renderer.setViewport(t,s,i,r),n&&(this.renderer.setScissor(t,s,i,r),this.renderer.setScissorTest(a))}setViewPadding(e=0,t=0,s=0,i=0){const{width:r,height:n}=this.renderer.getSize(new w.Vector2),a={x:i,y:s,width:r-i-t,height:n-e-s};this.setViewport(a)}dispose(){var e,t;this.setSize(1,1),(e=this.renderer)==null||e.clear(),(t=this.renderer)==null||t.dispose()}}const yt={antialias:!0,devicePixelRatio:window.devicePixelRatio};class Et{constructor(e){this.options=e;const{width:t,height:s,rendererParams:i,renderer:r}=e,{devicePixelRatio:n,antialias:a}=i,l=new r({antialias:a});l.setSize(t,s),l.setPixelRatio(n),this.renderer=l}setSize(e,t){this.renderer.setSize(e,t)}render(e,t){this.renderer.render(e,t)}dispose(){var e,t;this.setSize(1,1),(e=this.renderer)==null||e.clear(),(t=this.renderer)==null||t.dispose()}}const Ot={fov:45,near:1,far:1e3,up:new w.Vector3(0,1,0)};class vt{constructor(e){this.event=new se.eventsExports.EventEmitter,this.cameraArr=[],this.cameraActiveIndex=0,this.customCamera=!1,this.width=0,this.height=0,this.width=e.width,this.height=e.height}get camera(){return this.cameraArr[this.cameraActiveIndex]}addPerspectiveCamera(e){const{fov:t,far:s,near:i,up:r,aspect:n}=e,a=n!=null?n:this.width/this.height,l=new w.PerspectiveCamera(t,a,i,s);return l.up=r,this.cameraArr.push(l),l}removeCamera(e){e===this.cameraActiveIndex&&(this.cameraActiveIndex=0),this.cameraArr.splice(e,1)}setCameraActive(e){this.cameraActiveIndex=e,this.event.emit("cameraChange",this.camera)}setSize(e,t){this.width=e,this.height=t,this.cameraArr.forEach(s=>{s instanceof w.PerspectiveCamera&&(s.aspect=e/t),s.updateProjectionMatrix()})}cloneCamera(){const e=this.addPerspectiveCamera({fov:this.camera.fov,aspect:this.camera.aspect,near:this.camera.near,far:this.camera.far,up:this.camera.up});return e.position.copy(this.camera.position),e}sync(e){if(e.type==="PerspectiveCamera"){const t=e;(!this.camera.matrixWorld.equals(t.matrixWorld)||this.camera.far!==t.far||this.camera.near!==t.near||this.camera.fov!==t.fov||this.camera.aspect!==t.aspect)&&this.camera.copy(t)}else{const t=e,s=t.viewMatrix,i=t.inverseViewMatrix,r=new w.Matrix4(i[0],i[4],i[8],i[12],i[1],i[5],i[9],i[13],i[2],i[6],i[10],i[14],i[3],i[7],i[11],i[15]),n=new w.Matrix4(s[0],s[4],s[8],s[12],s[1],s[5],s[9],s[13],s[2],s[6],s[10],s[14],s[3],s[7],s[11],s[15]),{width:a,height:l}=this,d=a/l;(this.camera.fov!==t.fov||this.camera.aspect!==d||!this.camera.matrixWorld.equals(r)||!this.camera.matrixWorldInverse.equals(n))&&(this.camera.fov=t.fov,this.camera.updateProjectionMatrix(),this.camera.matrixAutoUpdate=!1,this.camera.matrixWorld.copy(r),this.camera.matrixWorldInverse.copy(n),this.camera.aspect=d,this.camera.updateProjectionMatrix())}}}const Tt={background:null},xt=new w.Scene;class wt{constructor(e){this.event=new se.eventsExports.EventEmitter,this.sceneArr=[],this.sceneActiveIndex=0,this.overrideMaterial=!1,this.options=e}get scene(){return this.sceneActiveIndex==-1?xt:this.sceneArr[this.sceneActiveIndex]}addScene(e){const t=new w.Scene;return e!=null&&e.background&&(t.background=e.background),this.sceneArr.push(t),t}removeScene(e){e===this.sceneActiveIndex&&(this.sceneActiveIndex=0),this.sceneArr.splice(e,1)}setSceneActive(e){this.sceneActiveIndex=e,this.event.emit("sceneChange",this.scene)}dispose(){this.sceneArr.forEach(e=>{e.traverse(t=>{it.disposeMesh(t)})})}}class St{constructor(e){this.helpers={},this.options=e}add(e){const t=e.uuid,{sceneController:s}=this.options;let i=this.helpers[t];if(i===void 0){if(e.isScene)i=new w.AxesHelper(100);else if(e.isCamera)i=new w.CameraHelper(e);else if(e.isPointLight)i=new w.PointLightHelper(e,1);else if(e.isDirectionalLight)i=new w.DirectionalLightHelper(e,1);else if(e.isSpotLight)i=new w.SpotLightHelper(e);else if(e.isHemisphereLight)i=new w.HemisphereLightHelper(e,10);else if(e.isRectAreaLight)i=new rt.RectAreaLightHelper(e);else{const r=new w.Box3;if(r.setFromObject(e,!0),r.isEmpty()===!1){i=new w.Box3Helper(r);const n=i.material;n.userData.object=e,n.depthTest=!1,n.transparent=!0}else return}s.scene.add(i),this.helpers[t]=i}}addViewHelper(){const{cameraController:e,container:t}=this.options,s=new ot.ViewHelper(e.camera,t);t.addEventListener("pointerdown",i=>{i.preventDefault(),s.handleClick(i)}),this.viewHelper=s}remove(e){var i;const t=e.uuid,{sceneController:s}=this.options;if(this.helpers[t]!==void 0){const r=this.helpers[t];s.scene.remove(r),delete this.helpers[t],(i=r.dispose)==null||i.call(r)}}removeAll(){Object.keys(this.helpers).forEach(e=>{this.remove({uuid:e})}),this.helpers={}}removeAllExcludeScene(){Object.keys(this.helpers).forEach(e=>{this.helpers[e]instanceof w.AxesHelper||this.remove({uuid:e})})}update(e,t,s){var r,n;const{cameraController:i}=this.options;Object.values(this.helpers).forEach(a=>{if(a.update&&a.update(),a instanceof w.Box3Helper){const l=a.material,{object:d}=l.userData;d&&a.box.setFromObject(d,!0)}}),((r=this.viewHelper)==null?void 0:r.animating)===!0&&(this.viewHelper.update(e),(n=t.cameraControls)==null||n.setPosition(...i.camera.position.toArray()),this.viewHelper.center.copy(s))}renderViewHelper(e){if(!this.viewHelper)return;const t=e.autoClear;e.autoClear=!1,this.viewHelper.render(e),e.autoClear=t}dispose(){var e;this.helpers={},(e=this.viewHelper)==null||e.dispose()}}class Pt{constructor(e){this.event=new se.eventsExports.EventEmitter,this.cameraControlsArr=[],this.cameraControlsActiveIndex=0,this.autoRotateSpeed=0,this.options=e,j.install({THREE:w})}get cameraControls(){return this.cameraControlsArr[this.cameraControlsActiveIndex]}addCameraControls(e,t){const{domElement:s}=this.options.controlsParams,i=new j(e,s);return t&&(i.interactiveArea=t,i.addEventListener("update",()=>{this.cameraControlsArr.forEach(r=>{r!==i&&(r.enabled=!1)})}),i.addEventListener("sleep",()=>{this.cameraControlsArr.forEach(r=>{r!==i&&(r.enabled=!0)})})),this.cameraControlsArr.push(i),i}removeCameraControls(e){var t;e===this.cameraControlsActiveIndex&&(this.cameraControlsActiveIndex=0),(t=this.cameraControlsArr[e])==null||t.dispose(),this.cameraControlsArr.splice(e,1)}setCameraControlsActive(e){this.cameraControlsActiveIndex=e}enable(){this.cameraControlsArr.forEach(e=>{e.enabled=!0})}disable(){this.cameraControlsArr.forEach(e=>{e.enabled=!1})}update(e){this.cameraControlsArr.forEach(t=>{t.update(e)}),this.autoRotateSpeed&&this.cameraControls&&(this.cameraControls.azimuthAngle+=this.autoRotateSpeed*e*w.MathUtils.DEG2RAD)}dispose(){this.cameraControlsArr.forEach(e=>{e.dispose()})}}class At{constructor(e){this.event=new se.eventsExports.EventEmitter;const{renderer:t,scene:s,camera:i}=e,r=new nt.TransformControls(i,t.domElement);if(r.getHelper){const n=r.getHelper();if(s.add(n),+w.REVISION<170){const a=r._root;a.dispose=()=>{a.traverse(l=>{l.geometry&&l.geometry.dispose(),l.material&&l.material.dispose()})},r.dispose=()=>{r.disconnect(),a.dispose()}}}else r instanceof w.Object3D&&s.add(r);this.controls=r,this.addEvent()}get detach(){return this.controls.detach.bind(this.controls)}get attach(){return this.controls.attach.bind(this.controls)}addEvent(){let e=null,t=null,s=null;const i=this.controls;i.addEventListener("change",()=>{const r=i.object;r!==void 0&&this.event.emit("change",r)}),i.addEventListener("mouseDown",()=>{const r=i.object;e=r.position.clone(),t=r.rotation.clone(),s=r.scale.clone(),this.event.emit("mouseDown",r)}),i.addEventListener("mouseUp",()=>{const r=i.object;if(r!==void 0)switch(i.getMode()){case"translate":e.equals(r.position)||this.event.emit("translate",r,r.position,e);break;case"rotate":t.equals(r.rotation)||this.event.emit("rotate",r,r.rotation,t);break;case"scale":s.equals(r.scale)||this.event.emit("scale",r,r.scale,s);break}this.event.emit("mouseUp")})}dispose(){var e;this.event.removeAllListeners(),(e=this.controls)==null||e.dispose()}}const Le=new z.Vector3,Dt=new z.Quaternion,ze=new z.Vector3,k=new z.Matrix4,bt=new z.Matrix4;class Ut{constructor(e={}){const t=this;let s,i,r,n;const a={camera:{style:""},objects:new WeakMap},l=e.element!==void 0?e.element:document.createElement("div");l.style.overflow="hidden",this.domElement=l;const d=document.createElement("div");d.style.transformOrigin="0 0",d.style.pointerEvents="none",l.appendChild(d);const y=document.createElement("div");y.style.transformStyle="preserve-3d",d.appendChild(y),this.getSize=function(){return{width:s,height:i}},this.render=function(_,o){const m=o.projectionMatrix.elements[5]*n;o.view&&o.view.enabled?(d.style.transform=`translate( ${-o.view.offsetX*(s/o.view.width)}px, ${-o.view.offsetY*(i/o.view.height)}px )`,d.style.transform+=`scale( ${o.view.fullWidth/o.view.width}, ${o.view.fullHeight/o.view.height} )`):d.style.transform="",_.matrixWorldAutoUpdate===!0&&_.updateMatrixWorld(),o.parent===null&&o.matrixWorldAutoUpdate===!0&&o.updateMatrixWorld();let E,g;o.isOrthographicCamera&&(E=-(o.right+o.left)/2,g=(o.top+o.bottom)/2);const x=o.view&&o.view.enabled?o.view.height/o.view.fullHeight:1,O=o.isOrthographicCamera?`scale( ${x} )scale(`+m+")translate("+c(E)+"px,"+c(g)+"px)"+v(o.matrixWorldInverse):`scale( ${x} )translateZ(`+m+"px)"+v(o.matrixWorldInverse),R=(o.isPerspectiveCamera?"perspective("+m+"px) ":"")+O+"translate("+r+"px,"+n+"px)";a.camera.style!==R&&(y.style.transform=R,a.camera.style=R),p(_,_,o)},this.setSize=function(_,o){s=_,i=o,r=s/2,n=i/2,l.style.width=_+"px",l.style.height=o+"px",d.style.width=_+"px",d.style.height=o+"px",y.style.width=_+"px",y.style.height=o+"px"};function c(_){return Math.abs(_)<1e-10?0:_}function v(_){const o=_.elements;return"matrix3d("+c(o[0])+","+c(-o[1])+","+c(o[2])+","+c(o[3])+","+c(o[4])+","+c(-o[5])+","+c(o[6])+","+c(o[7])+","+c(o[8])+","+c(-o[9])+","+c(o[10])+","+c(o[11])+","+c(o[12])+","+c(-o[13])+","+c(o[14])+","+c(o[15])+")"}function C(_){const o=_.elements;return"translate(-50%,-50%)"+("matrix3d("+c(o[0])+","+c(o[1])+","+c(o[2])+","+c(o[3])+","+c(-o[4])+","+c(-o[5])+","+c(-o[6])+","+c(-o[7])+","+c(o[8])+","+c(o[9])+","+c(o[10])+","+c(o[11])+","+c(o[12])+","+c(o[13])+","+c(o[14])+","+c(o[15])+")")}function u(_){_.isCSS3DObject&&(_.element.style.display="none");for(let o=0,m=_.children.length;o<m;o++)u(_.children[o])}function p(_,o,m,E){if(_.visible===!1){u(_);return}if(_.isCSS3DObject){const g=_.layers.test(m.layers)===!0,x=_.element;if(x.style.display=g===!0?"":"none",g===!0){_.onBeforeRender(t,o,m);let O;_.isCSS3DSprite?(k.copy(m.matrixWorldInverse),k.transpose(),_.rotation2D!==0&&k.multiply(bt.makeRotationZ(_.rotation2D)),_.matrixWorld.decompose(Le,Dt,ze),k.setPosition(Le),k.scale(ze),k.elements[3]=0,k.elements[7]=0,k.elements[11]=0,k.elements[15]=1,O=C(k)):O=C(_.matrixWorld);const D=a.objects.get(_);if(D===void 0||D.style!==O){x.style.transform=O;const R={style:O};a.objects.set(_,R)}x.parentNode!==y&&y.appendChild(x),_.onAfterRender(t,o,m)}}for(let g=0,x=_.children.length;g<x;g++)p(_.children[g],o,m)}}}const X=new z.Vector3,Me=new z.Matrix4,Fe=new z.Matrix4,Ie=new z.Vector3,He=new z.Vector3;class Rt{constructor(e={}){const t=this;let s,i,r,n;const a={objects:new WeakMap},l=e.element!==void 0?e.element:document.createElement("div");l.style.overflow="hidden",this.domElement=l,this.getSize=function(){return{width:s,height:i}},this.render=function(u,p){u.matrixWorldAutoUpdate===!0&&u.updateMatrixWorld(),p.parent===null&&p.matrixWorldAutoUpdate===!0&&p.updateMatrixWorld(),Me.copy(p.matrixWorldInverse),Fe.multiplyMatrices(p.projectionMatrix,Me),y(u,u,p),C(u)},this.setSize=function(u,p){s=u,i=p,r=s/2,n=i/2,l.style.width=u+"px",l.style.height=p+"px"};function d(u){u.isCSS2DObject&&(u.element.style.display="none");for(let p=0,_=u.children.length;p<_;p++)d(u.children[p])}function y(u,p,_){if(u.visible===!1){d(u);return}if(u.isCSS2DObject){X.setFromMatrixPosition(u.matrixWorld),X.applyMatrix4(Fe);const o=X.z>=-1&&X.z<=1&&u.layers.test(_.layers)===!0,m=u.element;m.style.display=o===!0?"":"none",o===!0&&(u.onBeforeRender(t,p,_),m.style.transform="translate("+-100*u.center.x+"%,"+-100*u.center.y+"%)translate("+(X.x*r+r)+"px,"+(-X.y*n+n)+"px)",m.parentNode!==l&&l.appendChild(m),u.onAfterRender(t,p,_));const E={distanceToCameraSquared:c(_,u)};a.objects.set(u,E)}for(let o=0,m=u.children.length;o<m;o++)y(u.children[o],p,_)}function c(u,p){return Ie.setFromMatrixPosition(u.matrixWorld),He.setFromMatrixPosition(p.matrixWorld),Ie.distanceToSquared(He)}function v(u){const p=[];return u.traverseVisible(function(_){_.isCSS2DObject&&p.push(_)}),p}function C(u){const p=v(u).sort(function(o,m){if(o.renderOrder!==m.renderOrder)return m.renderOrder-o.renderOrder;const E=a.objects.get(o).distanceToCameraSquared,g=a.objects.get(m).distanceToCameraSquared;return E-g}),_=p.length;for(let o=0,m=p.length;o<m;o++)p[o].element.style.zIndex=_-o}}}const ke={zIndex:"auto"};class Lt{constructor(e){this.container=e}addRenderer(e,t){const s=t.container||this.container,i=s.offsetWidth,r=s.offsetHeight,n=e==="css2d"?new Rt:new Ut;n.domElement.style.position="absolute",n.domElement.style.top="0",n.domElement.style.pointerEvents="none",n.domElement.style.zIndex=t.zIndex,n.setSize(i,r),s.appendChild(n.domElement),e==="css2d"?this.css2Drenderer=n:e==="css3d"&&(this.css3Drenderer=n)}setSize(e,t){var s,i;(s=this.css2Drenderer)==null||s.setSize(e,t),(i=this.css3Drenderer)==null||i.setSize(e,t)}render(e,t){var s,i;(s=this.css2Drenderer)==null||s.render(e,t),(i=this.css3Drenderer)==null||i.render(e,t)}dispose(){var e,t;(e=this.css2Drenderer)==null||e.domElement.remove(),(t=this.css3Drenderer)==null||t.domElement.remove(),this.css2Drenderer=void 0,this.css3Drenderer=void 0}}class Ee{constructor(e){this.guiParams={},e&&(this.guiParams=e)}showGui(e){e&&Object.keys(this.guiParams).forEach(t=>{const s=e.addFolder(t),i=this.guiParams[t];Object.keys(i).forEach(r=>{const{min:n,max:a,step:l,name:d,paramMap:y,items:c,value:v,target:C}=i[r],u=r.toLowerCase().indexOf("color")>-1;let p;const _=typeof v=="undefined"&&C,o=_?C():i[r],m=_?r:"value";c?p=s.add(o,m,c):u?p=s.addColor(o,m):p=s.add(o,m),p=p.name(d||r),typeof n!="undefined"&&(p=p.min(n)),typeof a!="undefined"&&(p=p.max(a)),typeof l!="undefined"&&(p=p.step(l)),p=p.onChange(()=>{this.setTargetValue(t,r,o[m],y)}),_&&p.listen()})})}setTargetValue(e,t,s,i){const{onChange:r,target:n,value:a}=this.guiParams[e][t],l=t.toLowerCase().indexOf("color")>-1;if(n&&!(typeof a=="undefined"&&n)){let y=n();Array.isArray(y)||(y=[y]),y.forEach(c=>{if(c)if(l)try{c[i||t].set(s)}catch(v){t!=="color"&&!i&&console.warn(`${t} is not a color,set paramMap`)}else c[i||t]=s})}r&&r(s)}setTargetValueByParams(){Object.keys(this.guiParams).forEach(e=>{Object.keys(this.guiParams[e]).forEach(t=>{const s=this.guiParams[e][t];typeof s.value!="undefined"&&this.setTargetValue(e,t,s.value,s.paramMap)})})}}const zt={name:"OutputShader",uniforms:{tDiffuse:{value:null},toneMappingExposure:{value:1},premultiplieAlpha:{value:0}},vertexShader:`
1
+ "use strict";var Ge=Object.defineProperty,Xe=Object.defineProperties;var Ke=Object.getOwnPropertyDescriptors;var Oe=Object.getOwnPropertySymbols;var je=Object.prototype.hasOwnProperty,Qe=Object.prototype.propertyIsEnumerable;var ve=(f,e,t)=>e in f?Ge(f,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):f[e]=t,B=(f,e)=>{for(var t in e||(e={}))je.call(e,t)&&ve(f,t,e[t]);if(Oe)for(var t of Oe(e))Qe.call(e,t)&&ve(f,t,e[t]);return f},me=(f,e)=>Xe(f,Ke(e));Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const z=require("three"),$e=require("three/examples/jsm/misc/Timer"),Je=require("@tweenjs/tween.js"),se=require("./events.js"),et=require("deepmerge"),tt=require("stats-gl"),st=require("lil-gui"),it=require("./colorCorrection.js"),rt=require("./parseVector.js");require("idb-keyval");require("esus-lite");require("d3-geo");require("d3-geo-projection");const ot=require("three/examples/jsm/helpers/RectAreaLightHelper"),nt=require("three/examples/jsm/helpers/ViewHelper"),at=require("three/examples/jsm/controls/TransformControls"),Te=require("three/examples/jsm/postprocessing/EffectComposer"),ht=require("three/examples/jsm/postprocessing/RenderPass"),lt=require("three/examples/jsm/postprocessing/SSAOPass"),ct=require("three/examples/jsm/postprocessing/Pass"),dt=require("three/examples/jsm/postprocessing/OutputPass"),mt=require("three/examples/jsm/postprocessing/ShaderPass"),pt=require("three/examples/jsm/postprocessing/UnrealBloomPass");require("three/examples/jsm/renderers/CSS2DRenderer");require("three/examples/jsm/renderers/CSS3DRenderer");require("three/examples/jsm/lights/RectAreaLightUniformsLib");require("three/examples/jsm/lines/LineSegments2");const Ve=require("./index2.js");require("three/examples/jsm/lines/LineSegmentsGeometry");require("three/examples/jsm/lines/LineMaterial");require("three-bvh-csg");const _t=require("./isPlainObject.js"),ut=require("./BaseObject.js");function Be(f){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(f){for(const t in f)if(t!=="default"){const s=Object.getOwnPropertyDescriptor(f,t);Object.defineProperty(e,t,s.get?s:{enumerable:!0,get:()=>f[t]})}}return e.default=f,Object.freeze(e)}const w=Be(z),xe=Be(Je),U={LEFT:1,RIGHT:2,MIDDLE:4},h=Object.freeze({NONE:0,ROTATE:1,TRUCK:2,OFFSET:4,DOLLY:8,ZOOM:16,TOUCH_ROTATE:32,TOUCH_TRUCK:64,TOUCH_OFFSET:128,TOUCH_DOLLY:256,TOUCH_ZOOM:512,TOUCH_DOLLY_TRUCK:1024,TOUCH_DOLLY_OFFSET:2048,TOUCH_DOLLY_ROTATE:4096,TOUCH_ZOOM_TRUCK:8192,TOUCH_ZOOM_OFFSET:16384,TOUCH_ZOOM_ROTATE:32768}),Z={NONE:0,IN:1,OUT:-1};function N(f){return f.isPerspectiveCamera}function V(f){return f.isOrthographicCamera}const q=Math.PI*2,we=Math.PI/2,Ne=1e-5,Q=Math.PI/180;function F(f,e,t){return Math.max(e,Math.min(t,f))}function b(f,e=Ne){return Math.abs(f)<e}function A(f,e,t=Ne){return b(f-e,t)}function Se(f,e){return Math.round(f/e)*e}function $(f){return isFinite(f)?f:f<0?-Number.MAX_VALUE:Number.MAX_VALUE}function J(f){return Math.abs(f)<Number.MAX_VALUE?f:f*(1/0)}function oe(f,e,t,s,i=1/0,r){s=Math.max(1e-4,s);const n=2/s,a=n*r,l=1/(1+a+.48*a*a+.235*a*a*a);let d=f-e;const y=e,c=i*s;d=F(d,-c,c),e=f-d;const v=(t.value+n*d)*r;t.value=(t.value-n*v)*l;let C=e+(d+v)*l;return y-f>0==C>y&&(C=y,t.value=(C-y)/r),C}function Pe(f,e,t,s,i=1/0,r,n){s=Math.max(1e-4,s);const a=2/s,l=a*r,d=1/(1+l+.48*l*l+.235*l*l*l);let y=e.x,c=e.y,v=e.z,C=f.x-y,u=f.y-c,p=f.z-v;const _=y,o=c,m=v,E=i*s,g=E*E,x=C*C+u*u+p*p;if(x>g){const de=Math.sqrt(x);C=C/de*E,u=u/de*E,p=p/de*E}y=f.x-C,c=f.y-u,v=f.z-p;const O=(t.x+a*C)*r,D=(t.y+a*u)*r,R=(t.z+a*p)*r;t.x=(t.x-a*O)*d,t.y=(t.y-a*D)*d,t.z=(t.z-a*R)*d,n.x=y+(C+O)*d,n.y=c+(u+D)*d,n.z=v+(p+R)*d;const ie=_-f.x,re=o-f.y,Ye=m-f.z,Ze=n.x-_,qe=n.y-o,We=n.z-m;return ie*Ze+re*qe+Ye*We>0&&(n.x=_,n.y=o,n.z=m,t.x=(n.x-_)/r,t.y=(n.y-o)/r,t.z=(n.z-m)/r),n}function pe(f,e){e.set(0,0),f.forEach(t=>{e.x+=t.clientX,e.y+=t.clientY}),e.x/=f.length,e.y/=f.length}function _e(f,e){return V(f)?(console.warn(`${e} is not supported in OrthographicCamera`),!0):!1}class ft{constructor(){this._listeners={}}addEventListener(e,t){const s=this._listeners;s[e]===void 0&&(s[e]=[]),s[e].indexOf(t)===-1&&s[e].push(t)}hasEventListener(e,t){const s=this._listeners;return s[e]!==void 0&&s[e].indexOf(t)!==-1}removeEventListener(e,t){const i=this._listeners[e];if(i!==void 0){const r=i.indexOf(t);r!==-1&&i.splice(r,1)}}removeAllEventListeners(e){if(!e){this._listeners={};return}Array.isArray(this._listeners[e])&&(this._listeners[e].length=0)}dispatchEvent(e){const s=this._listeners[e.type];if(s!==void 0){e.target=this;const i=s.slice(0);for(let r=0,n=i.length;r<n;r++)i[r].call(this,e)}}}const ne=1/8,gt=/Mac/.test(navigator.platform);let T,Ae,ae,ue,L,S,P,W,ee,I,H,Y,De,be,M,te,G,Ue,fe,Re,ge,Ce,he;class j extends ft{static install(e){T=e.THREE,Ae=Object.freeze(new T.Vector3(0,0,0)),ae=Object.freeze(new T.Vector3(0,1,0)),ue=Object.freeze(new T.Vector3(0,0,1)),L=new T.Vector2,S=new T.Vector3,P=new T.Vector3,W=new T.Vector3,ee=new T.Vector3,I=new T.Vector3,H=new T.Vector3,Y=new T.Vector3,De=new T.Vector3,be=new T.Vector3,M=new T.Spherical,te=new T.Spherical,G=new T.Box3,Ue=new T.Box3,fe=new T.Sphere,Re=new T.Quaternion,ge=new T.Quaternion,Ce=new T.Matrix4,he=new T.Raycaster}static get ACTION(){return h}constructor(e,t){super(),this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.minDistance=Number.EPSILON,this.maxDistance=1/0,this.infinityDolly=!1,this.minZoom=.01,this.maxZoom=1/0,this.smoothTime=.25,this.draggingSmoothTime=.125,this.maxSpeed=1/0,this.azimuthRotateSpeed=1,this.polarRotateSpeed=1,this.dollySpeed=1,this.dollyDragInverted=!1,this.truckSpeed=2,this.dollyToCursor=!1,this.dragToOffset=!1,this.verticalDragToForward=!1,this.boundaryFriction=0,this.restThreshold=.01,this.colliderMeshes=[],this.cancel=()=>{},this._enabled=!0,this._state=h.NONE,this._viewport=null,this._changedDolly=0,this._changedZoom=0,this._hasRested=!0,this._boundaryEnclosesCamera=!1,this._needsUpdate=!0,this._updatedLastTime=!1,this._elementRect=new DOMRect,this._isDragging=!1,this._dragNeedsUpdate=!0,this._activePointers=[],this._lockedPointer=null,this._interactiveArea=new DOMRect(0,0,1,1),this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._isUserControllingOffset=!1,this._isUserControllingZoom=!1,this._lastDollyDirection=Z.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new T.Vector3,this._focalOffsetVelocity=new T.Vector3,this._zoomVelocity={value:0},this._truckInternal=(o,m,E)=>{let g,x;if(N(this._camera)){const O=S.copy(this._camera.position).sub(this._target),D=this._camera.getEffectiveFOV()*Q,R=O.length()*Math.tan(D*.5);g=this.truckSpeed*o*R/this._elementRect.height,x=this.truckSpeed*m*R/this._elementRect.height}else if(V(this._camera)){const O=this._camera;g=o*(O.right-O.left)/O.zoom/this._elementRect.width,x=m*(O.top-O.bottom)/O.zoom/this._elementRect.height}else return;this.verticalDragToForward?(E?this.setFocalOffset(this._focalOffsetEnd.x+g,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(g,0,!0),this.forward(-x,!0)):E?this.setFocalOffset(this._focalOffsetEnd.x+g,this._focalOffsetEnd.y+x,this._focalOffsetEnd.z,!0):this.truck(g,x,!0)},this._rotateInternal=(o,m)=>{const E=q*this.azimuthRotateSpeed*o/this._elementRect.height,g=q*this.polarRotateSpeed*m/this._elementRect.height;this.rotate(E,g,!0)},this._dollyInternal=(o,m,E)=>{const g=Math.pow(.95,-o*this.dollySpeed),x=this._sphericalEnd.radius,O=this._sphericalEnd.radius*g,D=F(O,this.minDistance,this.maxDistance),R=D-O;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(O,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(R,!0),this._dollyToNoClamp(D,!0)):this._dollyToNoClamp(D,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?O:D)-x,this._dollyControlCoord.set(m,E)),this._lastDollyDirection=Math.sign(-o)},this._zoomInternal=(o,m,E)=>{const g=Math.pow(.95,o*this.dollySpeed),x=this._zoom,O=this._zoom*g;this.zoomTo(O,!0),this.dollyToCursor&&(this._changedZoom+=O-x,this._dollyControlCoord.set(m,E))},typeof T=="undefined"&&console.error("camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."),this._camera=e,this._yAxisUpSpace=new T.Quaternion().setFromUnitVectors(this._camera.up,ae),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=h.NONE,this._target=new T.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new T.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new T.Spherical().setFromVector3(S.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace)),this._sphericalEnd=this._spherical.clone(),this._lastDistance=this._spherical.radius,this._zoom=this._camera.zoom,this._zoomEnd=this._zoom,this._lastZoom=this._zoom,this._nearPlaneCorners=[new T.Vector3,new T.Vector3,new T.Vector3,new T.Vector3],this._updateNearPlaneCorners(),this._boundary=new T.Box3(new T.Vector3(-1/0,-1/0,-1/0),new T.Vector3(1/0,1/0,1/0)),this._cameraUp0=this._camera.up.clone(),this._target0=this._target.clone(),this._position0=this._camera.position.clone(),this._zoom0=this._zoom,this._focalOffset0=this._focalOffset.clone(),this._dollyControlCoord=new T.Vector2,this.mouseButtons={left:h.ROTATE,middle:h.DOLLY,right:h.TRUCK,wheel:N(this._camera)?h.DOLLY:V(this._camera)?h.ZOOM:h.NONE},this.touches={one:h.TOUCH_ROTATE,two:N(this._camera)?h.TOUCH_DOLLY_TRUCK:V(this._camera)?h.TOUCH_ZOOM_TRUCK:h.NONE,three:h.TOUCH_TRUCK};const s=new T.Vector2,i=new T.Vector2,r=new T.Vector2,n=o=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const g=this._domElement.getBoundingClientRect(),x=(o.clientX-g.left)/(g.right-g.left),O=(o.clientY-g.top)/(g.bottom-g.top);if(x<this._interactiveArea.left||x>this._interactiveArea.right||O<this._interactiveArea.top||O>this._interactiveArea.bottom)return}const m=o.pointerType!=="mouse"?null:(o.buttons&U.LEFT)===U.LEFT?U.LEFT:(o.buttons&U.MIDDLE)===U.MIDDLE?U.MIDDLE:(o.buttons&U.RIGHT)===U.RIGHT?U.RIGHT:null;if(m!==null){const g=this._findPointerByMouseButton(m);g&&this._disposePointer(g)}if((o.buttons&U.LEFT)===U.LEFT&&this._lockedPointer)return;const E={pointerId:o.pointerId,clientX:o.clientX,clientY:o.clientY,deltaX:0,deltaY:0,mouseButton:m};this._activePointers.push(E),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.addEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),this._isDragging=!0,v(o)},a=o=>{o.cancelable&&o.preventDefault();const m=o.pointerId,E=this._lockedPointer||this._findPointerById(m);if(E){if(E.clientX=o.clientX,E.clientY=o.clientY,E.deltaX=o.movementX,E.deltaY=o.movementY,this._state=0,o.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else(!this._isDragging&&this._lockedPointer||this._isDragging&&(o.buttons&U.LEFT)===U.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(o.buttons&U.MIDDLE)===U.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(o.buttons&U.RIGHT)===U.RIGHT&&(this._state=this._state|this.mouseButtons.right);C()}},l=o=>{const m=this._findPointerById(o.pointerId);if(!(m&&m===this._lockedPointer)){if(m&&this._disposePointer(m),o.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=h.NONE;break;case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else this._state=h.NONE;u()}};let d=-1;const y=o=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===h.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const O=this._domElement.getBoundingClientRect(),D=(o.clientX-O.left)/(O.right-O.left),R=(o.clientY-O.top)/(O.bottom-O.top);if(D<this._interactiveArea.left||D>this._interactiveArea.right||R<this._interactiveArea.top||R>this._interactiveArea.bottom)return}if(o.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===h.ROTATE||this.mouseButtons.wheel===h.TRUCK){const O=performance.now();d-O<1e3&&this._getClientRect(this._elementRect),d=O}const m=gt?-1:-3,E=o.deltaMode===1?o.deltaY/m:o.deltaY/(m*10),g=this.dollyToCursor?(o.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,x=this.dollyToCursor?(o.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case h.ROTATE:{this._rotateInternal(o.deltaX,o.deltaY),this._isUserControllingRotate=!0;break}case h.TRUCK:{this._truckInternal(o.deltaX,o.deltaY,!1),this._isUserControllingTruck=!0;break}case h.OFFSET:{this._truckInternal(o.deltaX,o.deltaY,!0),this._isUserControllingOffset=!0;break}case h.DOLLY:{this._dollyInternal(-E,g,x),this._isUserControllingDolly=!0;break}case h.ZOOM:{this._zoomInternal(-E,g,x),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},c=o=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===j.ACTION.NONE){const m=o instanceof PointerEvent?o.pointerId:0,E=this._findPointerById(m);E&&this._disposePointer(E),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l);return}o.preventDefault()}},v=o=>{if(!this._enabled)return;if(pe(this._activePointers,L),this._getClientRect(this._elementRect),s.copy(L),i.copy(L),this._activePointers.length>=2){const E=L.x-this._activePointers[1].clientX,g=L.y-this._activePointers[1].clientY,x=Math.sqrt(E*E+g*g);r.set(0,x);const O=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,D=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;i.set(O,D)}if(this._state=0,!o)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in o&&o.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else!this._lockedPointer&&(o.buttons&U.LEFT)===U.LEFT&&(this._state=this._state|this.mouseButtons.left),(o.buttons&U.MIDDLE)===U.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(o.buttons&U.RIGHT)===U.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&h.ROTATE)===h.ROTATE||(this._state&h.TOUCH_ROTATE)===h.TOUCH_ROTATE||(this._state&h.TOUCH_DOLLY_ROTATE)===h.TOUCH_DOLLY_ROTATE||(this._state&h.TOUCH_ZOOM_ROTATE)===h.TOUCH_ZOOM_ROTATE)&&(this._sphericalEnd.theta=this._spherical.theta,this._sphericalEnd.phi=this._spherical.phi,this._thetaVelocity.value=0,this._phiVelocity.value=0),((this._state&h.TRUCK)===h.TRUCK||(this._state&h.TOUCH_TRUCK)===h.TOUCH_TRUCK||(this._state&h.TOUCH_DOLLY_TRUCK)===h.TOUCH_DOLLY_TRUCK||(this._state&h.TOUCH_ZOOM_TRUCK)===h.TOUCH_ZOOM_TRUCK)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&h.DOLLY)===h.DOLLY||(this._state&h.TOUCH_DOLLY)===h.TOUCH_DOLLY||(this._state&h.TOUCH_DOLLY_TRUCK)===h.TOUCH_DOLLY_TRUCK||(this._state&h.TOUCH_DOLLY_OFFSET)===h.TOUCH_DOLLY_OFFSET||(this._state&h.TOUCH_DOLLY_ROTATE)===h.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&h.ZOOM)===h.ZOOM||(this._state&h.TOUCH_ZOOM)===h.TOUCH_ZOOM||(this._state&h.TOUCH_ZOOM_TRUCK)===h.TOUCH_ZOOM_TRUCK||(this._state&h.TOUCH_ZOOM_OFFSET)===h.TOUCH_ZOOM_OFFSET||(this._state&h.TOUCH_ZOOM_ROTATE)===h.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&h.OFFSET)===h.OFFSET||(this._state&h.TOUCH_OFFSET)===h.TOUCH_OFFSET||(this._state&h.TOUCH_DOLLY_OFFSET)===h.TOUCH_DOLLY_OFFSET||(this._state&h.TOUCH_ZOOM_OFFSET)===h.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},C=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,pe(this._activePointers,L);const m=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,E=m?-m.deltaX:i.x-L.x,g=m?-m.deltaY:i.y-L.y;if(i.copy(L),((this._state&h.ROTATE)===h.ROTATE||(this._state&h.TOUCH_ROTATE)===h.TOUCH_ROTATE||(this._state&h.TOUCH_DOLLY_ROTATE)===h.TOUCH_DOLLY_ROTATE||(this._state&h.TOUCH_ZOOM_ROTATE)===h.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(E,g),this._isUserControllingRotate=!0),(this._state&h.DOLLY)===h.DOLLY||(this._state&h.ZOOM)===h.ZOOM){const x=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,O=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0,D=this.dollyDragInverted?-1:1;(this._state&h.DOLLY)===h.DOLLY?(this._dollyInternal(D*g*ne,x,O),this._isUserControllingDolly=!0):(this._zoomInternal(D*g*ne,x,O),this._isUserControllingZoom=!0)}if((this._state&h.TOUCH_DOLLY)===h.TOUCH_DOLLY||(this._state&h.TOUCH_ZOOM)===h.TOUCH_ZOOM||(this._state&h.TOUCH_DOLLY_TRUCK)===h.TOUCH_DOLLY_TRUCK||(this._state&h.TOUCH_ZOOM_TRUCK)===h.TOUCH_ZOOM_TRUCK||(this._state&h.TOUCH_DOLLY_OFFSET)===h.TOUCH_DOLLY_OFFSET||(this._state&h.TOUCH_ZOOM_OFFSET)===h.TOUCH_ZOOM_OFFSET||(this._state&h.TOUCH_DOLLY_ROTATE)===h.TOUCH_DOLLY_ROTATE||(this._state&h.TOUCH_ZOOM_ROTATE)===h.TOUCH_ZOOM_ROTATE){const x=L.x-this._activePointers[1].clientX,O=L.y-this._activePointers[1].clientY,D=Math.sqrt(x*x+O*O),R=r.y-D;r.set(0,D);const ie=this.dollyToCursor?(i.x-this._elementRect.x)/this._elementRect.width*2-1:0,re=this.dollyToCursor?(i.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&h.TOUCH_DOLLY)===h.TOUCH_DOLLY||(this._state&h.TOUCH_DOLLY_ROTATE)===h.TOUCH_DOLLY_ROTATE||(this._state&h.TOUCH_DOLLY_TRUCK)===h.TOUCH_DOLLY_TRUCK||(this._state&h.TOUCH_DOLLY_OFFSET)===h.TOUCH_DOLLY_OFFSET?(this._dollyInternal(R*ne,ie,re),this._isUserControllingDolly=!0):(this._zoomInternal(R*ne,ie,re),this._isUserControllingZoom=!0)}((this._state&h.TRUCK)===h.TRUCK||(this._state&h.TOUCH_TRUCK)===h.TOUCH_TRUCK||(this._state&h.TOUCH_DOLLY_TRUCK)===h.TOUCH_DOLLY_TRUCK||(this._state&h.TOUCH_ZOOM_TRUCK)===h.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(E,g,!1),this._isUserControllingTruck=!0),((this._state&h.OFFSET)===h.OFFSET||(this._state&h.TOUCH_OFFSET)===h.TOUCH_OFFSET||(this._state&h.TOUCH_DOLLY_OFFSET)===h.TOUCH_DOLLY_OFFSET||(this._state&h.TOUCH_ZOOM_OFFSET)===h.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(E,g,!0),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},u=()=>{pe(this._activePointers,L),i.copy(L),this._dragNeedsUpdate=!1,(this._activePointers.length===0||this._activePointers.length===1&&this._activePointers[0]===this._lockedPointer)&&(this._isDragging=!1),this._activePointers.length===0&&this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",p),this._domElement.ownerDocument.addEventListener("pointerlockerror",_),this._domElement.ownerDocument.addEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),v())},this.unlockPointer=()=>{var o,m,E;this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),(o=this._domElement)===null||o===void 0||o.ownerDocument.exitPointerLock(),(m=this._domElement)===null||m===void 0||m.ownerDocument.removeEventListener("pointerlockchange",p),(E=this._domElement)===null||E===void 0||E.ownerDocument.removeEventListener("pointerlockerror",_),this.cancel()};const p=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},_=()=>{this.unlockPointer()};this._addAllEventListeners=o=>{this._domElement=o,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",n),this._domElement.addEventListener("pointercancel",l),this._domElement.addEventListener("wheel",y,{passive:!1}),this._domElement.addEventListener("contextmenu",c)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",n),this._domElement.removeEventListener("pointercancel",l),this._domElement.removeEventListener("wheel",y,{passive:!1}),this._domElement.removeEventListener("contextmenu",c),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.removeEventListener("pointerlockchange",p),this._domElement.ownerDocument.removeEventListener("pointerlockerror",_))},this.cancel=()=>{this._state!==h.NONE&&(this._state=h.NONE,this._activePointers.length=0,u())},t&&this.connect(t),this.update(0)}get camera(){return this._camera}set camera(e){this._camera=e,this.updateCameraUp(),this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0}get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._domElement&&(e?(this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none"):(this.cancel(),this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect=""))}get active(){return!this._hasRested}get currentAction(){return this._state}get distance(){return this._spherical.radius}set distance(e){this._spherical.radius===e&&this._sphericalEnd.radius===e||(this._spherical.radius=e,this._sphericalEnd.radius=e,this._needsUpdate=!0)}get azimuthAngle(){return this._spherical.theta}set azimuthAngle(e){this._spherical.theta===e&&this._sphericalEnd.theta===e||(this._spherical.theta=e,this._sphericalEnd.theta=e,this._needsUpdate=!0)}get polarAngle(){return this._spherical.phi}set polarAngle(e){this._spherical.phi===e&&this._sphericalEnd.phi===e||(this._spherical.phi=e,this._sphericalEnd.phi=e,this._needsUpdate=!0)}get boundaryEnclosesCamera(){return this._boundaryEnclosesCamera}set boundaryEnclosesCamera(e){this._boundaryEnclosesCamera=e,this._needsUpdate=!0}set interactiveArea(e){this._interactiveArea.width=F(e.width,0,1),this._interactiveArea.height=F(e.height,0,1),this._interactiveArea.x=F(e.x,0,1-this._interactiveArea.width),this._interactiveArea.y=F(e.y,0,1-this._interactiveArea.height)}addEventListener(e,t){super.addEventListener(e,t)}removeEventListener(e,t){super.removeEventListener(e,t)}rotate(e,t,s=!1){return this.rotateTo(this._sphericalEnd.theta+e,this._sphericalEnd.phi+t,s)}rotateAzimuthTo(e,t=!1){return this.rotateTo(e,this._sphericalEnd.phi,t)}rotatePolarTo(e,t=!1){return this.rotateTo(this._sphericalEnd.theta,e,t)}rotateTo(e,t,s=!1){this._isUserControllingRotate=!1;const i=F(e,this.minAzimuthAngle,this.maxAzimuthAngle),r=F(t,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=i,this._sphericalEnd.phi=r,this._sphericalEnd.makeSafe(),this._needsUpdate=!0,s||(this._spherical.theta=this._sphericalEnd.theta,this._spherical.phi=this._sphericalEnd.phi);const n=!s||A(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&A(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(n)}dolly(e,t=!1){return this.dollyTo(this._sphericalEnd.radius-e,t)}dollyTo(e,t=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=Z.NONE,this._changedDolly=0,this._dollyToNoClamp(F(e,this.minDistance,this.maxDistance),t)}_dollyToNoClamp(e,t=!1){const s=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const n=this._collisionTest(),a=A(n,this._spherical.radius);if(!(s>e)&&a)return Promise.resolve();this._sphericalEnd.radius=Math.min(e,n)}else this._sphericalEnd.radius=e;this._needsUpdate=!0,t||(this._spherical.radius=this._sphericalEnd.radius);const r=!t||A(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(r)}dollyInFixed(e,t=!1){this._targetEnd.add(this._getCameraDirection(ee).multiplyScalar(e)),t||this._target.copy(this._targetEnd);const s=!t||A(this._target.x,this._targetEnd.x,this.restThreshold)&&A(this._target.y,this._targetEnd.y,this.restThreshold)&&A(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(s)}zoom(e,t=!1){return this.zoomTo(this._zoomEnd+e,t)}zoomTo(e,t=!1){this._isUserControllingZoom=!1,this._zoomEnd=F(e,this.minZoom,this.maxZoom),this._needsUpdate=!0,t||(this._zoom=this._zoomEnd);const s=!t||A(this._zoom,this._zoomEnd,this.restThreshold);return this._changedZoom=0,this._createOnRestPromise(s)}pan(e,t,s=!1){return console.warn("`pan` has been renamed to `truck`"),this.truck(e,t,s)}truck(e,t,s=!1){this._camera.updateMatrix(),I.setFromMatrixColumn(this._camera.matrix,0),H.setFromMatrixColumn(this._camera.matrix,1),I.multiplyScalar(e),H.multiplyScalar(-t);const i=S.copy(I).add(H),r=P.copy(this._targetEnd).add(i);return this.moveTo(r.x,r.y,r.z,s)}forward(e,t=!1){S.setFromMatrixColumn(this._camera.matrix,0),S.crossVectors(this._camera.up,S),S.multiplyScalar(e);const s=P.copy(this._targetEnd).add(S);return this.moveTo(s.x,s.y,s.z,t)}elevate(e,t=!1){return S.copy(this._camera.up).multiplyScalar(e),this.moveTo(this._targetEnd.x+S.x,this._targetEnd.y+S.y,this._targetEnd.z+S.z,t)}moveTo(e,t,s,i=!1){this._isUserControllingTruck=!1;const r=S.set(e,t,s).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,r,this.boundaryFriction),this._needsUpdate=!0,i||this._target.copy(this._targetEnd);const n=!i||A(this._target.x,this._targetEnd.x,this.restThreshold)&&A(this._target.y,this._targetEnd.y,this.restThreshold)&&A(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(n)}lookInDirectionOf(e,t,s,i=!1){const a=S.set(e,t,s).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);return this.setPosition(a.x,a.y,a.z,i)}fitToBox(e,t,{cover:s=!1,paddingLeft:i=0,paddingRight:r=0,paddingBottom:n=0,paddingTop:a=0}={}){const l=[],d=e.isBox3?G.copy(e):G.setFromObject(e);d.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const y=Se(this._sphericalEnd.theta,we),c=Se(this._sphericalEnd.phi,we);l.push(this.rotateTo(y,c,t));const v=S.setFromSpherical(this._sphericalEnd).normalize(),C=Re.setFromUnitVectors(v,ue),u=A(Math.abs(v.y),1);u&&C.multiply(ge.setFromAxisAngle(ae,y)),C.multiply(this._yAxisUpSpaceInverse);const p=Ue.makeEmpty();P.copy(d.min).applyQuaternion(C),p.expandByPoint(P),P.copy(d.min).setX(d.max.x).applyQuaternion(C),p.expandByPoint(P),P.copy(d.min).setY(d.max.y).applyQuaternion(C),p.expandByPoint(P),P.copy(d.max).setZ(d.min.z).applyQuaternion(C),p.expandByPoint(P),P.copy(d.min).setZ(d.max.z).applyQuaternion(C),p.expandByPoint(P),P.copy(d.max).setY(d.min.y).applyQuaternion(C),p.expandByPoint(P),P.copy(d.max).setX(d.min.x).applyQuaternion(C),p.expandByPoint(P),P.copy(d.max).applyQuaternion(C),p.expandByPoint(P),p.min.x-=i,p.min.y-=n,p.max.x+=r,p.max.y+=a,C.setFromUnitVectors(ue,v),u&&C.premultiply(ge.invert()),C.premultiply(this._yAxisUpSpace);const _=p.getSize(S),o=p.getCenter(P).applyQuaternion(C);if(N(this._camera)){const m=this.getDistanceToFitBox(_.x,_.y,_.z,s);l.push(this.moveTo(o.x,o.y,o.z,t)),l.push(this.dollyTo(m,t)),l.push(this.setFocalOffset(0,0,0,t))}else if(V(this._camera)){const m=this._camera,E=m.right-m.left,g=m.top-m.bottom,x=s?Math.max(E/_.x,g/_.y):Math.min(E/_.x,g/_.y);l.push(this.moveTo(o.x,o.y,o.z,t)),l.push(this.zoomTo(x,t)),l.push(this.setFocalOffset(0,0,0,t))}return Promise.all(l)}fitToSphere(e,t){const s=[],r="isObject3D"in e?j.createBoundingSphere(e,fe):fe.copy(e);if(s.push(this.moveTo(r.center.x,r.center.y,r.center.z,t)),N(this._camera)){const n=this.getDistanceToFitSphere(r.radius);s.push(this.dollyTo(n,t))}else if(V(this._camera)){const n=this._camera.right-this._camera.left,a=this._camera.top-this._camera.bottom,l=2*r.radius,d=Math.min(n/l,a/l);s.push(this.zoomTo(d,t))}return s.push(this.setFocalOffset(0,0,0,t)),Promise.all(s)}setLookAt(e,t,s,i,r,n,a=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Z.NONE,this._changedDolly=0;const l=P.set(i,r,n),d=S.set(e,t,s);this._targetEnd.copy(l),this._sphericalEnd.setFromVector3(d.sub(l).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,a||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const y=!a||A(this._target.x,this._targetEnd.x,this.restThreshold)&&A(this._target.y,this._targetEnd.y,this.restThreshold)&&A(this._target.z,this._targetEnd.z,this.restThreshold)&&A(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&A(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&A(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(y)}lerpLookAt(e,t,s,i,r,n,a,l,d,y,c,v,C,u=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Z.NONE,this._changedDolly=0;const p=S.set(i,r,n),_=P.set(e,t,s);M.setFromVector3(_.sub(p).applyQuaternion(this._yAxisUpSpace));const o=W.set(y,c,v),m=P.set(a,l,d);te.setFromVector3(m.sub(o).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(p.lerp(o,C));const E=te.theta-M.theta,g=te.phi-M.phi,x=te.radius-M.radius;this._sphericalEnd.set(M.radius+x*C,M.phi+g*C,M.theta+E*C),this.normalizeRotations(),this._needsUpdate=!0,u||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const O=!u||A(this._target.x,this._targetEnd.x,this.restThreshold)&&A(this._target.y,this._targetEnd.y,this.restThreshold)&&A(this._target.z,this._targetEnd.z,this.restThreshold)&&A(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&A(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&A(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(O)}setPosition(e,t,s,i=!1){return this.setLookAt(e,t,s,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,i)}setTarget(e,t,s,i=!1){const r=this.getPosition(S),n=this.setLookAt(r.x,r.y,r.z,e,t,s,i);return this._sphericalEnd.phi=F(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),n}setFocalOffset(e,t,s,i=!1){this._isUserControllingOffset=!1,this._focalOffsetEnd.set(e,t,s),this._needsUpdate=!0,i||this._focalOffset.copy(this._focalOffsetEnd);const r=!i||A(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&A(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&A(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(r)}setOrbitPoint(e,t,s){this._camera.updateMatrixWorld(),I.setFromMatrixColumn(this._camera.matrixWorldInverse,0),H.setFromMatrixColumn(this._camera.matrixWorldInverse,1),Y.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const i=S.set(e,t,s),r=i.distanceTo(this._camera.position),n=i.sub(this._camera.position);I.multiplyScalar(n.x),H.multiplyScalar(n.y),Y.multiplyScalar(n.z),S.copy(I).add(H).add(Y),S.z=S.z+r,this.dollyTo(r,!1),this.setFocalOffset(-S.x,S.y,-S.z,!1),this.moveTo(e,t,s,!1)}setBoundary(e){if(!e){this._boundary.min.set(-1/0,-1/0,-1/0),this._boundary.max.set(1/0,1/0,1/0),this._needsUpdate=!0;return}this._boundary.copy(e),this._boundary.clampPoint(this._targetEnd,this._targetEnd),this._needsUpdate=!0}setViewport(e,t,s,i){if(e===null){this._viewport=null;return}this._viewport=this._viewport||new T.Vector4,typeof e=="number"?this._viewport.set(e,t,s,i):this._viewport.copy(e)}getDistanceToFitBox(e,t,s,i=!1){if(_e(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const r=e/t,n=this._camera.getEffectiveFOV()*Q,a=this._camera.aspect;return((i?r>a:r<a)?t:e/a)*.5/Math.tan(n*.5)+s*.5}getDistanceToFitSphere(e){if(_e(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const t=this._camera.getEffectiveFOV()*Q,s=Math.atan(Math.tan(t*.5)*this._camera.aspect)*2,i=1<this._camera.aspect?t:s;return e/Math.sin(i*.5)}getTarget(e,t=!0){return(e&&e.isVector3?e:new T.Vector3).copy(t?this._targetEnd:this._target)}getPosition(e,t=!0){return(e&&e.isVector3?e:new T.Vector3).setFromSpherical(t?this._sphericalEnd:this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(t?this._targetEnd:this._target)}getSpherical(e,t=!0){return(e||new T.Spherical).copy(t?this._sphericalEnd:this._spherical)}getFocalOffset(e,t=!0){return(e&&e.isVector3?e:new T.Vector3).copy(t?this._focalOffsetEnd:this._focalOffset)}normalizeRotations(){this._sphericalEnd.theta=this._sphericalEnd.theta%q,this._sphericalEnd.theta<0&&(this._sphericalEnd.theta+=q),this._spherical.theta+=q*Math.round((this._sphericalEnd.theta-this._spherical.theta)/q)}reset(e=!1){if(!A(this._camera.up.x,this._cameraUp0.x)||!A(this._camera.up.y,this._cameraUp0.y)||!A(this._camera.up.z,this._cameraUp0.z)){this._camera.up.copy(this._cameraUp0);const s=this.getPosition(S);this.updateCameraUp(),this.setPosition(s.x,s.y,s.z)}const t=[this.setLookAt(this._position0.x,this._position0.y,this._position0.z,this._target0.x,this._target0.y,this._target0.z,e),this.setFocalOffset(this._focalOffset0.x,this._focalOffset0.y,this._focalOffset0.z,e),this.zoomTo(this._zoom0,e)];return Promise.all(t)}saveState(){this._cameraUp0.copy(this._camera.up),this.getTarget(this._target0),this.getPosition(this._position0),this._zoom0=this._zoom,this._focalOffset0.copy(this._focalOffset)}updateCameraUp(){this._yAxisUpSpace.setFromUnitVectors(this._camera.up,ae),this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert()}applyCameraUp(){const e=S.subVectors(this._target,this._camera.position).normalize(),t=P.crossVectors(e,this._camera.up);this._camera.up.crossVectors(t,e).normalize(),this._camera.updateMatrixWorld();const s=this.getPosition(S);this.updateCameraUp(),this.setPosition(s.x,s.y,s.z)}update(e){const t=this._sphericalEnd.theta-this._spherical.theta,s=this._sphericalEnd.phi-this._spherical.phi,i=this._sphericalEnd.radius-this._spherical.radius,r=De.subVectors(this._targetEnd,this._target),n=be.subVectors(this._focalOffsetEnd,this._focalOffset),a=this._zoomEnd-this._zoom;if(b(t))this._thetaVelocity.value=0,this._spherical.theta=this._sphericalEnd.theta;else{const c=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.theta=oe(this._spherical.theta,this._sphericalEnd.theta,this._thetaVelocity,c,1/0,e),this._needsUpdate=!0}if(b(s))this._phiVelocity.value=0,this._spherical.phi=this._sphericalEnd.phi;else{const c=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.phi=oe(this._spherical.phi,this._sphericalEnd.phi,this._phiVelocity,c,1/0,e),this._needsUpdate=!0}if(b(i))this._radiusVelocity.value=0,this._spherical.radius=this._sphericalEnd.radius;else{const c=this._isUserControllingDolly?this.draggingSmoothTime:this.smoothTime;this._spherical.radius=oe(this._spherical.radius,this._sphericalEnd.radius,this._radiusVelocity,c,this.maxSpeed,e),this._needsUpdate=!0}if(b(r.x)&&b(r.y)&&b(r.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const c=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;Pe(this._target,this._targetEnd,this._targetVelocity,c,this.maxSpeed,e,this._target),this._needsUpdate=!0}if(b(n.x)&&b(n.y)&&b(n.z))this._focalOffsetVelocity.set(0,0,0),this._focalOffset.copy(this._focalOffsetEnd);else{const c=this._isUserControllingOffset?this.draggingSmoothTime:this.smoothTime;Pe(this._focalOffset,this._focalOffsetEnd,this._focalOffsetVelocity,c,this.maxSpeed,e,this._focalOffset),this._needsUpdate=!0}if(b(a))this._zoomVelocity.value=0,this._zoom=this._zoomEnd;else{const c=this._isUserControllingZoom?this.draggingSmoothTime:this.smoothTime;this._zoom=oe(this._zoom,this._zoomEnd,this._zoomVelocity,c,1/0,e)}if(this.dollyToCursor){if(N(this._camera)&&this._changedDolly!==0){const c=this._spherical.radius-this._lastDistance,v=this._camera,C=this._getCameraDirection(ee),u=S.copy(C).cross(v.up).normalize();u.lengthSq()===0&&(u.x=1);const p=P.crossVectors(u,C),_=this._sphericalEnd.radius*Math.tan(v.getEffectiveFOV()*Q*.5),m=(this._sphericalEnd.radius-c-this._sphericalEnd.radius)/this._sphericalEnd.radius,E=W.copy(this._targetEnd).add(u.multiplyScalar(this._dollyControlCoord.x*_*v.aspect)).add(p.multiplyScalar(this._dollyControlCoord.y*_)),g=S.copy(this._targetEnd).lerp(E,m),x=this._lastDollyDirection===Z.IN&&this._spherical.radius<=this.minDistance,O=this._lastDollyDirection===Z.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(x||O)){this._sphericalEnd.radius-=c,this._spherical.radius-=c;const R=P.copy(C).multiplyScalar(-c);g.add(R)}this._boundary.clampPoint(g,g);const D=P.subVectors(g,this._targetEnd);this._targetEnd.copy(g),this._target.add(D),this._changedDolly-=c,b(this._changedDolly)&&(this._changedDolly=0)}else if(V(this._camera)&&this._changedZoom!==0){const c=this._zoom-this._lastZoom,v=this._camera,C=S.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(v.near+v.far)/(v.near-v.far)).unproject(v),u=P.set(0,0,-1).applyQuaternion(v.quaternion),p=W.copy(C).add(u.multiplyScalar(-C.dot(v.up))),o=-(this._zoom-c-this._zoom)/this._zoom,m=this._getCameraDirection(ee),E=this._targetEnd.dot(m),g=S.copy(this._targetEnd).lerp(p,o),x=g.dot(m),O=m.multiplyScalar(x-E);g.sub(O),this._boundary.clampPoint(g,g);const D=P.subVectors(g,this._targetEnd);this._targetEnd.copy(g),this._target.add(D),this._changedZoom-=c,b(this._changedZoom)&&(this._changedZoom=0)}}this._camera.zoom!==this._zoom&&(this._camera.zoom=this._zoom,this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0),this._dragNeedsUpdate=!0;const l=this._collisionTest();this._spherical.radius=Math.min(this._spherical.radius,l),this._spherical.makeSafe(),this._camera.position.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(this._target),this._camera.lookAt(this._target),(!b(this._focalOffset.x)||!b(this._focalOffset.y)||!b(this._focalOffset.z))&&(this._camera.updateMatrixWorld(),I.setFromMatrixColumn(this._camera.matrix,0),H.setFromMatrixColumn(this._camera.matrix,1),Y.setFromMatrixColumn(this._camera.matrix,2),I.multiplyScalar(this._focalOffset.x),H.multiplyScalar(-this._focalOffset.y),Y.multiplyScalar(this._focalOffset.z),S.copy(I).add(H).add(Y),this._camera.position.add(S)),this._boundaryEnclosesCamera&&this._encloseToBoundary(this._camera.position.copy(this._target),S.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),1);const y=this._needsUpdate;return y&&!this._updatedLastTime?(this._hasRested=!1,this.dispatchEvent({type:"wake"}),this.dispatchEvent({type:"update"})):y?(this.dispatchEvent({type:"update"}),b(t,this.restThreshold)&&b(s,this.restThreshold)&&b(i,this.restThreshold)&&b(r.x,this.restThreshold)&&b(r.y,this.restThreshold)&&b(r.z,this.restThreshold)&&b(n.x,this.restThreshold)&&b(n.y,this.restThreshold)&&b(n.z,this.restThreshold)&&b(a,this.restThreshold)&&!this._hasRested&&(this._hasRested=!0,this.dispatchEvent({type:"rest"}))):!y&&this._updatedLastTime&&(this._hasRested||(this._hasRested=!0,this.dispatchEvent({type:"rest"})),this.dispatchEvent({type:"sleep"})),this._lastDistance=this._spherical.radius,this._lastZoom=this._zoom,this._updatedLastTime=y,this._needsUpdate=!1,y}toJSON(){return JSON.stringify({enabled:this._enabled,minDistance:this.minDistance,maxDistance:$(this.maxDistance),minZoom:this.minZoom,maxZoom:$(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:$(this.maxPolarAngle),minAzimuthAngle:$(this.minAzimuthAngle),maxAzimuthAngle:$(this.maxAzimuthAngle),smoothTime:this.smoothTime,draggingSmoothTime:this.draggingSmoothTime,dollySpeed:this.dollySpeed,truckSpeed:this.truckSpeed,dollyToCursor:this.dollyToCursor,verticalDragToForward:this.verticalDragToForward,target:this._targetEnd.toArray(),position:S.setFromSpherical(this._sphericalEnd).add(this._targetEnd).toArray(),zoom:this._zoomEnd,focalOffset:this._focalOffsetEnd.toArray(),target0:this._target0.toArray(),position0:this._position0.toArray(),zoom0:this._zoom0,focalOffset0:this._focalOffset0.toArray()})}fromJSON(e,t=!1){const s=JSON.parse(e);this.enabled=s.enabled,this.minDistance=s.minDistance,this.maxDistance=J(s.maxDistance),this.minZoom=s.minZoom,this.maxZoom=J(s.maxZoom),this.minPolarAngle=s.minPolarAngle,this.maxPolarAngle=J(s.maxPolarAngle),this.minAzimuthAngle=J(s.minAzimuthAngle),this.maxAzimuthAngle=J(s.maxAzimuthAngle),this.smoothTime=s.smoothTime,this.draggingSmoothTime=s.draggingSmoothTime,this.dollySpeed=s.dollySpeed,this.truckSpeed=s.truckSpeed,this.dollyToCursor=s.dollyToCursor,this.verticalDragToForward=s.verticalDragToForward,this._target0.fromArray(s.target0),this._position0.fromArray(s.position0),this._zoom0=s.zoom0,this._focalOffset0.fromArray(s.focalOffset0),this.moveTo(s.target[0],s.target[1],s.target[2],t),M.setFromVector3(S.fromArray(s.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(M.theta,M.phi,t),this.dollyTo(M.radius,t),this.zoomTo(s.zoom,t),this.setFocalOffset(s.focalOffset[0],s.focalOffset[1],s.focalOffset[2],t),this._needsUpdate=!0}connect(e){if(this._domElement){console.warn("camera-controls is already connected.");return}this._addAllEventListeners(e),this._getClientRect(this._elementRect)}disconnect(){this.cancel(),this._removeAllEventListeners(),this._domElement&&(this._domElement=void 0)}dispose(){this.removeAllEventListeners(),this.disconnect()}_getTargetDirection(e){return e.setFromSpherical(this._spherical).divideScalar(this._spherical.radius).applyQuaternion(this._yAxisUpSpaceInverse)}_getCameraDirection(e){return this._getTargetDirection(e).negate()}_findPointerById(e){return this._activePointers.find(t=>t.pointerId===e)}_findPointerByMouseButton(e){return this._activePointers.find(t=>t.mouseButton===e)}_disposePointer(e){this._activePointers.splice(this._activePointers.indexOf(e),1)}_encloseToBoundary(e,t,s){const i=t.lengthSq();if(i===0)return e;const r=P.copy(t).add(e),a=this._boundary.clampPoint(r,W).sub(r),l=a.lengthSq();if(l===0)return e.add(t);if(l===i)return e;if(s===0)return e.add(t).add(a);{const d=1+s*l/t.dot(a);return e.add(P.copy(t).multiplyScalar(d)).add(a.multiplyScalar(1-s))}}_updateNearPlaneCorners(){if(N(this._camera)){const e=this._camera,t=e.near,s=e.getEffectiveFOV()*Q,i=Math.tan(s*.5)*t,r=i*e.aspect;this._nearPlaneCorners[0].set(-r,-i,0),this._nearPlaneCorners[1].set(r,-i,0),this._nearPlaneCorners[2].set(r,i,0),this._nearPlaneCorners[3].set(-r,i,0)}else if(V(this._camera)){const e=this._camera,t=1/e.zoom,s=e.left*t,i=e.right*t,r=e.top*t,n=e.bottom*t;this._nearPlaneCorners[0].set(s,r,0),this._nearPlaneCorners[1].set(i,r,0),this._nearPlaneCorners[2].set(i,n,0),this._nearPlaneCorners[3].set(s,n,0)}}_collisionTest(){let e=1/0;if(!(this.colliderMeshes.length>=1)||_e(this._camera,"_collisionTest"))return e;const s=this._getTargetDirection(ee);Ce.lookAt(Ae,s,this._camera.up);for(let i=0;i<4;i++){const r=P.copy(this._nearPlaneCorners[i]);r.applyMatrix4(Ce);const n=W.addVectors(this._target,r);he.set(n,s),he.far=this._spherical.radius+1;const a=he.intersectObjects(this.colliderMeshes);a.length!==0&&a[0].distance<e&&(e=a[0].distance)}return e}_getClientRect(e){if(!this._domElement)return;const t=this._domElement.getBoundingClientRect();return e.x=t.left,e.y=t.top,this._viewport?(e.x+=this._viewport.x,e.y+=t.height-this._viewport.w-this._viewport.y,e.width=this._viewport.z,e.height=this._viewport.w):(e.width=t.width,e.height=t.height),e}_createOnRestPromise(e){return e?Promise.resolve():(this._hasRested=!1,this.dispatchEvent({type:"transitionstart"}),new Promise(t=>{const s=()=>{this.removeEventListener("rest",s),t()};this.addEventListener("rest",s)}))}_addAllEventListeners(e){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(e){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(e){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(e,t=new T.Sphere){const s=t,i=s.center;G.makeEmpty(),e.traverseVisible(n=>{n.isMesh&&G.expandByObject(n)}),G.getCenter(i);let r=0;return e.traverseVisible(n=>{if(!n.isMesh)return;const a=n,l=a.geometry.clone();l.applyMatrix4(a.matrixWorld);const y=l.attributes.position;for(let c=0,v=y.count;c<v;c++)S.fromBufferAttribute(y,c),r=Math.max(r,i.distanceToSquared(S))}),s.radius=Math.sqrt(r),s}}const Ct={antialias:!1,devicePixelRatio:window.devicePixelRatio,powerPreference:"high-performance",toneMappingExposure:1,alpha:!1,outputColorSpace:it.ColorSpace.sRGB,logarithmicDepthBuffer:!1,preserveDrawingBuffer:!1,stencil:!1,depth:!1,physicallyCorrectLights:!1};class yt{constructor(e){this.options=e;const{width:t,height:s,rendererParams:i}=e,{canvas:r,context:n,alpha:a,devicePixelRatio:l,antialias:d,powerPreference:y,toneMappingExposure:c,outputColorSpace:v,logarithmicDepthBuffer:C,preserveDrawingBuffer:u,stencil:p,depth:_,physicallyCorrectLights:o}=i,m=new w.WebGLRenderer({canvas:r,context:n,alpha:a,antialias:d,powerPreference:y,logarithmicDepthBuffer:C,preserveDrawingBuffer:u,stencil:p,depth:_});m.setSize(t,s),m.setPixelRatio(l),m.toneMappingExposure=c,m.outputColorSpace=v,+w.REVISION<155&&(m.useLegacyLights=o),this.renderer=m}setSize(e,t){this.renderer.setSize(e,t)}setPixelRatio(e){this.renderer.setPixelRatio(e)}render(e,t){this.renderer.render(e,t)}setViewport(e){var l,d;const{x:t,y:s,width:i,height:r}=e,n=(l=e.scissor)!=null?l:!1,a=(d=e.scissorTest)!=null?d:!1;this.renderer.setViewport(t,s,i,r),n&&(this.renderer.setScissor(t,s,i,r),this.renderer.setScissorTest(a))}setViewPadding(e=0,t=0,s=0,i=0){const{width:r,height:n}=this.renderer.getSize(new w.Vector2),a={x:i,y:s,width:r-i-t,height:n-e-s};this.setViewport(a)}dispose(){var e,t;this.setSize(1,1),(e=this.renderer)==null||e.clear(),(t=this.renderer)==null||t.dispose()}}const Et={antialias:!0,devicePixelRatio:window.devicePixelRatio};class Ot{constructor(e){this.options=e;const{width:t,height:s,rendererParams:i,renderer:r}=e,{devicePixelRatio:n,antialias:a}=i,l=new r({antialias:a});l.setSize(t,s),l.setPixelRatio(n),this.renderer=l}setSize(e,t){this.renderer.setSize(e,t)}render(e,t){this.renderer.render(e,t)}dispose(){var e,t;this.setSize(1,1),(e=this.renderer)==null||e.clear(),(t=this.renderer)==null||t.dispose()}}const vt={fov:45,near:1,far:1e3,up:new w.Vector3(0,1,0)};class Tt{constructor(e){this.event=new se.eventsExports.EventEmitter,this.cameraArr=[],this.cameraActiveIndex=0,this.customCamera=!1,this.width=0,this.height=0,this.width=e.width,this.height=e.height}get camera(){return this.cameraArr[this.cameraActiveIndex]}addPerspectiveCamera(e){const{fov:t,far:s,near:i,up:r,aspect:n}=e,a=n!=null?n:this.width/this.height,l=new w.PerspectiveCamera(t,a,i,s);return l.up=r,this.cameraArr.push(l),l}removeCamera(e){e===this.cameraActiveIndex&&(this.cameraActiveIndex=0),this.cameraArr.splice(e,1)}setCameraActive(e){this.cameraActiveIndex=e,this.event.emit("cameraChange",this.camera)}setSize(e,t){this.width=e,this.height=t,this.cameraArr.forEach(s=>{s instanceof w.PerspectiveCamera&&(s.aspect=e/t),s.updateProjectionMatrix()})}cloneCamera(){const e=this.addPerspectiveCamera({fov:this.camera.fov,aspect:this.camera.aspect,near:this.camera.near,far:this.camera.far,up:this.camera.up});return e.position.copy(this.camera.position),e}sync(e){if(e.type==="PerspectiveCamera"){const t=e;(!this.camera.matrixWorld.equals(t.matrixWorld)||this.camera.far!==t.far||this.camera.near!==t.near||this.camera.fov!==t.fov||this.camera.aspect!==t.aspect)&&this.camera.copy(t)}else{const t=e,s=t.viewMatrix,i=t.inverseViewMatrix,r=new w.Matrix4(i[0],i[4],i[8],i[12],i[1],i[5],i[9],i[13],i[2],i[6],i[10],i[14],i[3],i[7],i[11],i[15]),n=new w.Matrix4(s[0],s[4],s[8],s[12],s[1],s[5],s[9],s[13],s[2],s[6],s[10],s[14],s[3],s[7],s[11],s[15]),{width:a,height:l}=this,d=a/l;(this.camera.fov!==t.fov||this.camera.aspect!==d||!this.camera.matrixWorld.equals(r)||!this.camera.matrixWorldInverse.equals(n))&&(this.camera.fov=t.fov,this.camera.updateProjectionMatrix(),this.camera.matrixAutoUpdate=!1,this.camera.matrixWorld.copy(r),this.camera.matrixWorldInverse.copy(n),this.camera.aspect=d,this.camera.updateProjectionMatrix())}}}const xt={background:null},wt=new w.Scene;class St{constructor(e){this.event=new se.eventsExports.EventEmitter,this.sceneArr=[],this.sceneActiveIndex=0,this.overrideMaterial=!1,this.options=e}get scene(){return this.sceneActiveIndex==-1?wt:this.sceneArr[this.sceneActiveIndex]}addScene(e){const t=new w.Scene;return e!=null&&e.background&&(t.background=e.background),this.sceneArr.push(t),t}removeScene(e){e===this.sceneActiveIndex&&(this.sceneActiveIndex=0),this.sceneArr.splice(e,1)}setSceneActive(e){this.sceneActiveIndex=e,this.event.emit("sceneChange",this.scene)}dispose(){this.sceneArr.forEach(e=>{e.traverse(t=>{rt.disposeMesh(t)})})}}class Pt{constructor(e){this.helpers={},this.options=e}add(e){const t=e.uuid,{sceneController:s}=this.options;let i=this.helpers[t];if(i===void 0){if(e.isScene)i=new w.AxesHelper(100);else if(e.isCamera)i=new w.CameraHelper(e);else if(e.isPointLight)i=new w.PointLightHelper(e,1);else if(e.isDirectionalLight)i=new w.DirectionalLightHelper(e,1);else if(e.isSpotLight)i=new w.SpotLightHelper(e);else if(e.isHemisphereLight)i=new w.HemisphereLightHelper(e,10);else if(e.isRectAreaLight)i=new ot.RectAreaLightHelper(e);else{const r=new w.Box3;if(r.setFromObject(e,!0),r.isEmpty()===!1){i=new w.Box3Helper(r);const n=i.material;n.userData.object=e,n.depthTest=!1,n.transparent=!0}else return}s.scene.add(i),this.helpers[t]=i}}addViewHelper(){const{cameraController:e,container:t}=this.options,s=new nt.ViewHelper(e.camera,t);t.addEventListener("pointerdown",i=>{i.preventDefault(),s.handleClick(i)}),this.viewHelper=s}remove(e){var i;const t=e.uuid,{sceneController:s}=this.options;if(this.helpers[t]!==void 0){const r=this.helpers[t];s.scene.remove(r),delete this.helpers[t],(i=r.dispose)==null||i.call(r)}}removeAll(){Object.keys(this.helpers).forEach(e=>{this.remove({uuid:e})}),this.helpers={}}removeAllExcludeScene(){Object.keys(this.helpers).forEach(e=>{this.helpers[e]instanceof w.AxesHelper||this.remove({uuid:e})})}update(e,t,s){var r,n;const{cameraController:i}=this.options;Object.values(this.helpers).forEach(a=>{if(a.update&&a.update(),a instanceof w.Box3Helper){const l=a.material,{object:d}=l.userData;d&&a.box.setFromObject(d,!0)}}),((r=this.viewHelper)==null?void 0:r.animating)===!0&&(this.viewHelper.update(e),(n=t.cameraControls)==null||n.setPosition(...i.camera.position.toArray()),this.viewHelper.center.copy(s))}renderViewHelper(e){if(!this.viewHelper)return;const t=e.autoClear;e.autoClear=!1,this.viewHelper.render(e),e.autoClear=t}dispose(){var e;this.helpers={},(e=this.viewHelper)==null||e.dispose()}}class At{constructor(e){this.event=new se.eventsExports.EventEmitter,this.cameraControlsArr=[],this.cameraControlsActiveIndex=0,this.autoRotateSpeed=0,this.options=e,j.install({THREE:w})}get cameraControls(){return this.cameraControlsArr[this.cameraControlsActiveIndex]}addCameraControls(e,t){const{domElement:s}=this.options.controlsParams,i=new j(e,s);return t&&(i.interactiveArea=t,i.addEventListener("update",()=>{this.cameraControlsArr.forEach(r=>{r!==i&&(r.enabled=!1)})}),i.addEventListener("sleep",()=>{this.cameraControlsArr.forEach(r=>{r!==i&&(r.enabled=!0)})})),this.cameraControlsArr.push(i),i}removeCameraControls(e){var t;e===this.cameraControlsActiveIndex&&(this.cameraControlsActiveIndex=0),(t=this.cameraControlsArr[e])==null||t.dispose(),this.cameraControlsArr.splice(e,1)}setCameraControlsActive(e){this.cameraControlsActiveIndex=e}enable(){this.cameraControlsArr.forEach(e=>{e.enabled=!0})}disable(){this.cameraControlsArr.forEach(e=>{e.enabled=!1})}update(e){this.cameraControlsArr.forEach(t=>{t.update(e)}),this.autoRotateSpeed&&this.cameraControls&&(this.cameraControls.azimuthAngle+=this.autoRotateSpeed*e*w.MathUtils.DEG2RAD)}dispose(){this.cameraControlsArr.forEach(e=>{e.dispose()})}}class Dt{constructor(e){this.event=new se.eventsExports.EventEmitter;const{renderer:t,scene:s,camera:i}=e,r=new at.TransformControls(i,t.domElement);if(r.getHelper){const n=r.getHelper();if(s.add(n),+w.REVISION<170){const a=r._root;a.dispose=()=>{a.traverse(l=>{l.geometry&&l.geometry.dispose(),l.material&&l.material.dispose()})},r.dispose=()=>{r.disconnect(),a.dispose()}}}else r instanceof w.Object3D&&s.add(r);this.controls=r,this.addEvent()}get detach(){return this.controls.detach.bind(this.controls)}get attach(){return this.controls.attach.bind(this.controls)}addEvent(){let e=null,t=null,s=null;const i=this.controls;i.addEventListener("change",()=>{const r=i.object;r!==void 0&&this.event.emit("change",r)}),i.addEventListener("mouseDown",()=>{const r=i.object;e=r.position.clone(),t=r.rotation.clone(),s=r.scale.clone(),this.event.emit("mouseDown",r)}),i.addEventListener("mouseUp",()=>{const r=i.object;if(r!==void 0)switch(i.getMode()){case"translate":e.equals(r.position)||this.event.emit("translate",r,r.position,e);break;case"rotate":t.equals(r.rotation)||this.event.emit("rotate",r,r.rotation,t);break;case"scale":s.equals(r.scale)||this.event.emit("scale",r,r.scale,s);break}this.event.emit("mouseUp")})}dispose(){var e;this.event.removeAllListeners(),(e=this.controls)==null||e.dispose()}}const Le=new z.Vector3,bt=new z.Quaternion,ze=new z.Vector3,k=new z.Matrix4,Ut=new z.Matrix4;class Rt{constructor(e={}){const t=this;let s,i,r,n;const a={camera:{style:""},objects:new WeakMap},l=e.element!==void 0?e.element:document.createElement("div");l.style.overflow="hidden",this.domElement=l;const d=document.createElement("div");d.style.transformOrigin="0 0",d.style.pointerEvents="none",l.appendChild(d);const y=document.createElement("div");y.style.transformStyle="preserve-3d",d.appendChild(y),this.getSize=function(){return{width:s,height:i}},this.render=function(_,o){const m=o.projectionMatrix.elements[5]*n;o.view&&o.view.enabled?(d.style.transform=`translate( ${-o.view.offsetX*(s/o.view.width)}px, ${-o.view.offsetY*(i/o.view.height)}px )`,d.style.transform+=`scale( ${o.view.fullWidth/o.view.width}, ${o.view.fullHeight/o.view.height} )`):d.style.transform="",_.matrixWorldAutoUpdate===!0&&_.updateMatrixWorld(),o.parent===null&&o.matrixWorldAutoUpdate===!0&&o.updateMatrixWorld();let E,g;o.isOrthographicCamera&&(E=-(o.right+o.left)/2,g=(o.top+o.bottom)/2);const x=o.view&&o.view.enabled?o.view.height/o.view.fullHeight:1,O=o.isOrthographicCamera?`scale( ${x} )scale(`+m+")translate("+c(E)+"px,"+c(g)+"px)"+v(o.matrixWorldInverse):`scale( ${x} )translateZ(`+m+"px)"+v(o.matrixWorldInverse),R=(o.isPerspectiveCamera?"perspective("+m+"px) ":"")+O+"translate("+r+"px,"+n+"px)";a.camera.style!==R&&(y.style.transform=R,a.camera.style=R),p(_,_,o)},this.setSize=function(_,o){s=_,i=o,r=s/2,n=i/2,l.style.width=_+"px",l.style.height=o+"px",d.style.width=_+"px",d.style.height=o+"px",y.style.width=_+"px",y.style.height=o+"px"};function c(_){return Math.abs(_)<1e-10?0:_}function v(_){const o=_.elements;return"matrix3d("+c(o[0])+","+c(-o[1])+","+c(o[2])+","+c(o[3])+","+c(o[4])+","+c(-o[5])+","+c(o[6])+","+c(o[7])+","+c(o[8])+","+c(-o[9])+","+c(o[10])+","+c(o[11])+","+c(o[12])+","+c(-o[13])+","+c(o[14])+","+c(o[15])+")"}function C(_){const o=_.elements;return"translate(-50%,-50%)"+("matrix3d("+c(o[0])+","+c(o[1])+","+c(o[2])+","+c(o[3])+","+c(-o[4])+","+c(-o[5])+","+c(-o[6])+","+c(-o[7])+","+c(o[8])+","+c(o[9])+","+c(o[10])+","+c(o[11])+","+c(o[12])+","+c(o[13])+","+c(o[14])+","+c(o[15])+")")}function u(_){_.isCSS3DObject&&(_.element.style.display="none");for(let o=0,m=_.children.length;o<m;o++)u(_.children[o])}function p(_,o,m,E){if(_.visible===!1){u(_);return}if(_.isCSS3DObject){const g=_.layers.test(m.layers)===!0,x=_.element;if(x.style.display=g===!0?"":"none",g===!0){_.onBeforeRender(t,o,m);let O;_.isCSS3DSprite?(k.copy(m.matrixWorldInverse),k.transpose(),_.rotation2D!==0&&k.multiply(Ut.makeRotationZ(_.rotation2D)),_.matrixWorld.decompose(Le,bt,ze),k.setPosition(Le),k.scale(ze),k.elements[3]=0,k.elements[7]=0,k.elements[11]=0,k.elements[15]=1,O=C(k)):O=C(_.matrixWorld);const D=a.objects.get(_);if(D===void 0||D.style!==O){x.style.transform=O;const R={style:O};a.objects.set(_,R)}x.parentNode!==y&&y.appendChild(x),_.onAfterRender(t,o,m)}}for(let g=0,x=_.children.length;g<x;g++)p(_.children[g],o,m)}}}const X=new z.Vector3,Me=new z.Matrix4,Fe=new z.Matrix4,Ie=new z.Vector3,He=new z.Vector3;class Lt{constructor(e={}){const t=this;let s,i,r,n;const a={objects:new WeakMap},l=e.element!==void 0?e.element:document.createElement("div");l.style.overflow="hidden",this.domElement=l,this.getSize=function(){return{width:s,height:i}},this.render=function(u,p){u.matrixWorldAutoUpdate===!0&&u.updateMatrixWorld(),p.parent===null&&p.matrixWorldAutoUpdate===!0&&p.updateMatrixWorld(),Me.copy(p.matrixWorldInverse),Fe.multiplyMatrices(p.projectionMatrix,Me),y(u,u,p),C(u)},this.setSize=function(u,p){s=u,i=p,r=s/2,n=i/2,l.style.width=u+"px",l.style.height=p+"px"};function d(u){u.isCSS2DObject&&(u.element.style.display="none");for(let p=0,_=u.children.length;p<_;p++)d(u.children[p])}function y(u,p,_){if(u.visible===!1){d(u);return}if(u.isCSS2DObject){X.setFromMatrixPosition(u.matrixWorld),X.applyMatrix4(Fe);const o=X.z>=-1&&X.z<=1&&u.layers.test(_.layers)===!0,m=u.element;m.style.display=o===!0?"":"none",o===!0&&(u.onBeforeRender(t,p,_),m.style.transform="translate("+-100*u.center.x+"%,"+-100*u.center.y+"%)translate("+(X.x*r+r)+"px,"+(-X.y*n+n)+"px)",m.parentNode!==l&&l.appendChild(m),u.onAfterRender(t,p,_));const E={distanceToCameraSquared:c(_,u)};a.objects.set(u,E)}for(let o=0,m=u.children.length;o<m;o++)y(u.children[o],p,_)}function c(u,p){return Ie.setFromMatrixPosition(u.matrixWorld),He.setFromMatrixPosition(p.matrixWorld),Ie.distanceToSquared(He)}function v(u){const p=[];return u.traverseVisible(function(_){_.isCSS2DObject&&p.push(_)}),p}function C(u){const p=v(u).sort(function(o,m){if(o.renderOrder!==m.renderOrder)return m.renderOrder-o.renderOrder;const E=a.objects.get(o).distanceToCameraSquared,g=a.objects.get(m).distanceToCameraSquared;return E-g}),_=p.length;for(let o=0,m=p.length;o<m;o++)p[o].element.style.zIndex=_-o}}}const ke={zIndex:"auto"};class zt{constructor(e){this.container=e}addRenderer(e,t){const s=t.container||this.container,i=s.offsetWidth,r=s.offsetHeight,n=e==="css2d"?new Lt:new Rt;n.domElement.style.position="absolute",n.domElement.style.top="0",n.domElement.style.pointerEvents="none",n.domElement.style.zIndex=t.zIndex,n.setSize(i,r),s.appendChild(n.domElement),e==="css2d"?this.css2Drenderer=n:e==="css3d"&&(this.css3Drenderer=n)}setSize(e,t){var s,i;(s=this.css2Drenderer)==null||s.setSize(e,t),(i=this.css3Drenderer)==null||i.setSize(e,t)}render(e,t){var s,i;(s=this.css2Drenderer)==null||s.render(e,t),(i=this.css3Drenderer)==null||i.render(e,t)}dispose(){var e,t;(e=this.css2Drenderer)==null||e.domElement.remove(),(t=this.css3Drenderer)==null||t.domElement.remove(),this.css2Drenderer=void 0,this.css3Drenderer=void 0}}class Ee{constructor(e){this.guiParams={},e&&(this.guiParams=e)}showGui(e){e&&Object.keys(this.guiParams).forEach(t=>{const s=e.addFolder(t),i=this.guiParams[t];Object.keys(i).forEach(r=>{const{min:n,max:a,step:l,name:d,paramMap:y,items:c,value:v,target:C}=i[r],u=r.toLowerCase().indexOf("color")>-1;let p;const _=typeof v=="undefined"&&C,o=_?C():i[r],m=_?r:"value";c?p=s.add(o,m,c):u?p=s.addColor(o,m):p=s.add(o,m),p=p.name(d||r),typeof n!="undefined"&&(p=p.min(n)),typeof a!="undefined"&&(p=p.max(a)),typeof l!="undefined"&&(p=p.step(l)),p=p.onChange(()=>{this.setTargetValue(t,r,o[m],y)}),_&&p.listen()})})}setTargetValue(e,t,s,i){const{onChange:r,target:n,value:a}=this.guiParams[e][t],l=t.toLowerCase().indexOf("color")>-1;if(n&&!(typeof a=="undefined"&&n)){let y=n();Array.isArray(y)||(y=[y]),y.forEach(c=>{if(c)if(l)try{c[i||t].set(s)}catch(v){t!=="color"&&!i&&console.warn(`${t} is not a color,set paramMap`)}else c[i||t]=s})}r&&r(s)}setTargetValueByParams(){Object.keys(this.guiParams).forEach(e=>{Object.keys(this.guiParams[e]).forEach(t=>{const s=this.guiParams[e][t];typeof s.value!="undefined"&&this.setTargetValue(e,t,s.value,s.paramMap)})})}}const Mt={name:"OutputShader",uniforms:{tDiffuse:{value:null},toneMappingExposure:{value:1},premultiplieAlpha:{value:0}},vertexShader:`
2
2
  precision highp float;
3
3
 
4
4
  uniform mat4 modelViewMatrix;
@@ -70,7 +70,7 @@
70
70
 
71
71
  #endif
72
72
 
73
- }`};class Mt extends ct.OutputPass{constructor(){super();const e=zt;this.uniforms=z.UniformsUtils.clone(e.uniforms),this.material=new z.RawShaderMaterial({name:e.name,uniforms:this.uniforms,vertexShader:e.vertexShader,fragmentShader:e.fragmentShader}),this.fsQuad=new lt.FullScreenQuad(this.material)}}const Ft=f=>{const e=new dt.ShaderPass(new w.ShaderMaterial({uniforms:{baseTexture:{value:null},bloomTexture:{value:f.renderTarget2.texture},bloomAlphaType:{value:0}},vertexShader:`
73
+ }`};class Ft extends dt.OutputPass{constructor(){super();const e=Mt;this.uniforms=z.UniformsUtils.clone(e.uniforms),this.material=new z.RawShaderMaterial({name:e.name,uniforms:this.uniforms,vertexShader:e.vertexShader,fragmentShader:e.fragmentShader}),this.fsQuad=new ct.FullScreenQuad(this.material)}}const It=f=>{const e=new mt.ShaderPass(new w.ShaderMaterial({uniforms:{baseTexture:{value:null},bloomTexture:{value:f.renderTarget2.texture},bloomAlphaType:{value:0}},vertexShader:`
74
74
  varying vec2 vUv;
75
75
  void main() {
76
76
  vUv = uv;
@@ -91,4 +91,4 @@
91
91
  gl_FragColor = ( base_color + vec4( 1.0 ) * bloom_color );
92
92
  }
93
93
  }
94
- `,defines:{}}),"baseTexture");return e.needsSwap=!0,e},ye=1,K=!1,It=new w.MeshBasicMaterial({color:"black"}),Ht=new w.PointsMaterial({color:"black",sizeAttenuation:!1}),kt=new w.PointsMaterial({color:"black",sizeAttenuation:!0}),Vt=new w.SpriteMaterial({color:"black",sizeAttenuation:!0}),Bt=new w.SpriteMaterial({color:"black",sizeAttenuation:!1}),Nt=new Ve.MeshLineMaterial({color:"black",sizeAttenuation:0,lineWidth:0}),Yt={kernelRadius:8,minDistance:.005,maxDistance:.1},Zt={threshold:0,strength:.4,radius:.1,bloomAlphaType:0},qt={multisampling:4,premultiplieAlpha:!1};class Wt{constructor(e){this.bloomComposerActive=!1,this.active=!0,this.bloomSelection=new Set,this.bloomLayer=new w.Layers,this.bloomMaterials={},this.bloomVisible={},this.pipViewportState=null,this.options=e;const{rendererController:t,sceneController:s,cameraController:i,composerParams:r}=e,{renderer:n}=t,{multisampling:a}=r,{maxSamples:l}=n.capabilities,d=n.getDrawingBufferSize(new w.Vector2),y=new w.WebGLRenderTarget(d.width,d.height,{samples:Math.min(a,l),type:w.HalfFloatType}),c=new at.RenderPass(s.scene,i.camera),v=new Te.EffectComposer(n,y);v.addPass(c),this.renderer=n,this.scene=s.scene,this.camera=i.camera,this.finalComposer=v,this.renderPass=c;const C=this.getSize();this.setSize(C.width,C.height),i.event.on("cameraChange",u=>{this.changeCamera(u)}),s.event.on("sceneChange",u=>{this.changeScene(u)})}changeCamera(e){this.renderPass.camera=e,this.camera=e}changeScene(e){this.renderPass.scene=e,this.ssaoPass&&(this.ssaoPass.scene=e),this.scene=e}addOutputPass(){const{premultiplieAlpha:e}=this.options.composerParams,t=new Mt;this.outputPass=t,this.setPremultiplieAlpha(e),this.finalComposer.addPass(t)}setPremultiplieAlpha(e){this.outputPass&&(this.outputPass.uniforms.premultiplieAlpha.value=e?1:0)}addSSAOPass(e){const{scene:t,camera:s,renderer:i}=this,r=i.getSize(new w.Vector2),n=r.width,a=r.height,l=new ht.SSAOPass(t,s,n,a);l.kernelRadius=e.kernelRadius,l.minDistance=e.minDistance,l.maxDistance=e.maxDistance,this.ssaoPass=l,this.finalComposer.addPass(l)}addSSAOGui(e){if(!this.ssaoPass)return;new Ee({ssao:{kernelRadius:{min:0,max:32,target:()=>this.ssaoPass},minDistance:{min:.001,max:.02,target:()=>this.ssaoPass},maxDistance:{min:.01,max:.3,target:()=>this.ssaoPass}}}).showGui(e)}addBloomPass(e){const{renderer:t}=this,{threshold:s,strength:i,radius:r,bloomAlphaType:n}=e,a=new mt.UnrealBloomPass(new w.Vector2(window.innerWidth,window.innerHeight),i,r,s);this.bloomPass=a;const l=new Te.EffectComposer(t);l.renderToScreen=!1,l.addPass(this.renderPass),l.addPass(a),this.bloomComposer=l;const d=Ft(l);d.uniforms.bloomAlphaType.value=n,this.bloomComposer=l,this.finalComposer.addPass(d),this.mixPass=d,this.bloomLayer.set(ye)}addBloomGui(e){if(!this.bloomComposer)return;new Ee({bloom:{threshold:{min:0,max:1,step:.01,target:()=>this.bloomPass},radius:{min:0,max:1,step:.001,target:()=>this.bloomPass},strength:{min:0,max:10,step:.001,target:()=>this.bloomPass}}}).showGui(e)}toggleBloomSelection(e,t){if(!this.bloomComposer){console.warn("err:pencil.options.bloom");return}const{object3d:s}=e;if(!s)return;let i=t;t===void 0&&(i=!this.bloomSelection.has(s)),i?(this.bloomSelection.add(s),s.traverse(r=>{r.layers.enable(ye)})):(this.bloomSelection.delete(s),s.traverse(r=>{r.layers.disable(ye)})),this.bloomSelection.size===0?this.bloomComposerActive=!1:this.bloomComposerActive=!0}enable(){this.active||(this.active=!0)}disable(){this.active&&(this.active=!1)}setSize(e,t){var s;(s=this.bloomComposer)==null||s.setSize(e,t),this.finalComposer.setSize(e,t)}setPixelRatio(e){var t;(t=this.bloomComposer)==null||t.setPixelRatio(e),this.finalComposer.setPixelRatio(e)}darkenNonBloomed(){const e=[],t=[];this.scene.children.forEach(s=>{s.isTransformControls||s.isTransformControlsRoot||s.type==="RectAreaLightHelper"?e.push(s):t.push(s)}),e.forEach(s=>{this.bloomVisible[s.uuid]=s.visible,s.visible=!1}),t.forEach(s=>{s.traverse(i=>{const r=i,n=i,a=i;r.material&&this.bloomLayer.test(r.layers)===!1&&(this.bloomMaterials[r.uuid]=r.material,n.isSprite?n.material.sizeAttenuation?n.material=Vt:n.material=Bt:r.material instanceof Ve.MeshLineMaterial?r.material=Nt:a.isPoints?a.material.sizeAttenuation?a.material=kt:a.material=Ht:r.material=It)})})}restoreNonBloomed(){this.scene.traverse(e=>{const t=e;this.bloomMaterials[t.uuid]?(t.material=this.bloomMaterials[t.uuid],delete this.bloomMaterials[t.uuid]):this.bloomVisible[t.uuid]!==void 0&&(t.visible=this.bloomVisible[t.uuid],delete this.bloomVisible[t.uuid])})}finalComposerRender(){this.bloomComposerActive&&this.bloomComposer?(this.mixPass.enabled=!0,this.darkenNonBloomed(),this.bloomComposer.render(),this.restoreNonBloomed()):this.mixPass&&(this.mixPass.enabled=!1),this.finalComposer.render()}getSize(){return this.renderer.getSize(new w.Vector2)}render(){if(!this.active)return;const{cameraController:e,rendererController:t}=this.options;if(this.pipViewportState){e.setCameraActive(0);const s=this.getSize();t.setViewport({x:0,y:0,width:s.width,height:s.height,scissor:!0,scissorTest:!1}),this.finalComposerRender(),e.setCameraActive(1),t.setViewport(me(B({},this.pipViewportState),{scissor:!0,scissorTest:!0})),this.finalComposerRender()}else this.finalComposerRender()}dispose(){var e;this.bloomMaterials={},this.bloomVisible={},this.bloomSelection.clear(),this.finalComposer.dispose(),(e=this.bloomComposer)==null||e.dispose()}}const ce=class ce{constructor(e,t){this.raycaster=new w.Raycaster,this.maxBackufferArea=5760*5760,this.installPlugins=new Map,this._cameraPositon=new w.Vector3,this._cameraTarget=new w.Vector3,this.event=new se.eventsExports.EventEmitter,this.clock=new w.Clock,this.userData={},this.pageActiveIndex=-1,this.dprCache=1,this.options=Je(ce.options,e,{isMergeableObject:pt.isPlainObject}),this.dprCache=this.options.renderer.devicePixelRatio,this.event.setMaxListeners(1/0);const{container:s,stats:i,gui:r,transformControls:n}=this.options;if(this.init(),this.options.WebGPUTHREE||this.initComposer(),this.initCSSRenderer(),n&&this.initTransformControls(),i){const a=new et({horizontal:!1});a.init(this.renderer),a.dom.style.position="absolute",s.appendChild(a.dom),this.stats=a}if(r){const a=new tt;a.open(!1),this.gui=a}this.initResizeObserver(),this.clock.getDelta(),this.clock.getElapsedTime(),t&&(Array.isArray(t)||(t=[t]),t.forEach(a=>{Array.isArray(a)||(a=[a]),this.use(a[0],a[1])}))}getPlugin(e){return this.installPlugins.get(e)}get renderer(){return this.rendererController.renderer}get maxAnisotropy(){return this.options.WebGPUTHREE?0:this.renderer.capabilities.getMaxAnisotropy()}get controls(){return this.controlsController.cameraControls}get cameraPositon(){return this.controls.getPosition(this._cameraPositon,!1)}get cameraTarget(){return this.controls.getTarget(this._cameraTarget,!1)}get camera(){return this.cameraController.camera}get scene(){return this.sceneController.scene}use(e,...t){this.installPlugins.has(e.pluginName)?console.log("plugin already installed"):typeof e.install=="function"&&(e.install(this,...t),this.installPlugins.set(e.pluginName,e))}addPage({sceneOptions:e,cameraOptions:t}){const s=this.cameraController.addPerspectiveCamera(t);return this.sceneController.addScene(e).add(s),this.controlsController.addCameraControls(s),this.sceneController.sceneArr.length-1}removePage(e){e<=0||(this.cameraController.removeCamera(e),this.sceneController.removeScene(e),this.controlsController.removeCameraControls(e),this.pageActiveIndex===e&&this.showPage(0))}showPage(e){if(e!==this.pageActiveIndex){if(e!==-1&&!this.sceneController.sceneArr[e]){console.warn("addPage before showPage");return}this.sceneController.setSceneActive(e),this.controls.enabled=!1,e!==-1&&(this.cameraController.setCameraActive(e),this.controlsController.setCameraControlsActive(e),this.controls.enabled=!0),this.pageActiveIndex=e}}init(){const{container:e,WebGPUTHREE:t,helper:s,viewHelper:i,renderer:r,controlsParams:n}=this.options,{width:a,height:l}=this.getSize(),d=t?new Et({width:a,height:l,renderer:t.WebGPURenderer,rendererParams:yt}):new Ct({width:a,height:l,rendererParams:me(B({},r),{antialias:!1})}),y=new vt({width:a,height:l}),c=new wt({}),v=new Pt({controlsParams:{domElement:(n==null?void 0:n.domElement)||d.renderer.domElement}});this.sceneController=c,this.cameraController=y,this.controlsController=v,this.rendererController=d;const C=this.addPage({sceneOptions:this.options.scene,cameraOptions:this.options.camera});if(this.pageActiveIndex=C,this.controls.setLookAt(0,0,400,0,0,0,!1),s){const u=new St({container:e,sceneController:c,cameraController:y});u.add(c.scene),this.helperController=u,i&&u.addViewHelper()}e.appendChild(d.renderer.domElement)}initComposer(){const{bloom:e,bloomParams:t,ssao:s,ssaoParams:i,composer:r}=this.options,n=new Wt({rendererController:this.rendererController,sceneController:this.sceneController,cameraController:this.cameraController,composerParams:r});this.composerController=n,e&&(n.addBloomPass(B({},t)),this.gui&&n.addBloomGui(this.gui)),s&&(n.addSSAOPass(B({},i)),this.gui&&n.addSSAOGui(this.gui)),n.addOutputPass()}initCSSRenderer(){const{container:e,css2DRenderer:t,css3DRenderer:s,css2DRendererParams:i,css3DRendererParams:r}=this.options;if(t||s){const n=new Lt(e);t&&n.addRenderer("css2d",i),s&&n.addRenderer("css3d",r),this.cssRendererController=n}}initTransformControls(){const e=new At({camera:this.camera,renderer:this.renderer,scene:this.scene});e.event.on("mouseDown",()=>{var t;(t=this.controlsController)==null||t.disable()}),e.event.on("mouseUp",()=>{var t;(t=this.controlsController)==null||t.enable()}),this.transformController=e}getSize(){const{container:e}=this.options;return{width:e.offsetWidth,height:e.offsetHeight}}initResizeObserver(){const{container:e}=this.options;if(this.resizeObserver)return;const t=new ResizeObserver(s=>{for(const i of s){const r=i.contentRect;this.handeleResize(r.width,r.height),this.checkBackufferArea()}});t.observe(e),this.resizeObserver=t}checkBackufferArea(e=this.maxBackufferArea){e>this.maxBackufferArea&&(e=this.maxBackufferArea);const t=this.dprCache,{width:s,height:i}=this.getSize();let r=Math.sqrt(e/(s*i));r=(r*100|0)/100;const n=Math.min(t,r);this.setDevicePixelRatio(n),this.dprCache=t,n!==t&&console.warn("maxBackufferArea:",e," the pixel ratio is set to",n)}handeleResize(e,t,s=!0){const{rendererController:i,cameraController:r,composerController:n,cssRendererController:a}=this,l=this.renderer.getSize(new w.Vector2);l.x===e&&l.y===t||(r==null||r.setSize(e,t),i==null||i.setSize(e,t),n==null||n.setSize(e,t),a==null||a.setSize(e,t),this.installPlugins.forEach(d=>{var y;(y=d.setSize)==null||y.call(d,e,t)}),this.render(),s&&this.event.emit("resize",{width:e,height:t}))}setDevicePixelRatio(e){var s;const t=this.renderer.getPixelRatio();e!==t&&(this.dprCache=e,this.rendererController.setPixelRatio(e),(s=this.composerController)==null||s.setPixelRatio(e))}pick(e,t,s=!0){const{raycaster:i,options:r}=this,{container:n}=r,a=new w.Vector2,l=n.getBoundingClientRect();if(a.x=(e.clientX-l.left)/(l.right-l.left)*2-1,a.y=-((e.clientY-l.top)/(l.bottom-l.top))*2+1,this.camera&&this.scene){i.setFromCamera(a,this.camera);const d=i.intersectObjects(t||this.scene.children,s);if(d.length)return{object:d[0].object,index:d[0].index,intersects:d}}}render(){var n,a,l,d,y,c,v;const{scene:e,camera:t,clock:s}=this,i=s.getDelta(),r=s.getElapsedTime();xe.update(),(n=this.controlsController)==null||n.update(i),this.installPlugins.forEach(C=>{var u;(u=C.update)==null||u.call(C,i,r)}),(a=this.helperController)==null||a.update(i,this.controlsController,this.cameraTarget),(l=this.composerController)!=null&&l.active?this.composerController.render():(d=this.rendererController)==null||d.render(this.scene,this.camera),(y=this.helperController)==null||y.renderViewHelper(this.renderer),(c=this.cssRendererController)==null||c.render(e,t),(v=this.stats)==null||v.update(),this.event.emit("render",{delta:i,elapsed:r})}start(){this.renderer.setAnimationLoop(this.render.bind(this)),this.event.emit("start")}stop(){this.renderer.setAnimationLoop(null),this.event.emit("stop")}autoRotate(e){this.controlsController.autoRotateSpeed=e}showPipViewport(e){this.composerController.pipViewportState=e;let t=this.controlsController.cameraControlsArr[1];if(e){const{width:s,height:i}=this.getSize(),r=new DOMRect(e.x/s,(i-e.y-e.height)/i,e.width/s,e.height/i);if(t)t.enabled=!0,this.cameraController.cameraArr[1].position.copy(this.cameraController.camera.position);else{const n=this.cameraController.cloneCamera();t=this.controlsController.addCameraControls(n,r)}t.interactiveArea=r}else if(t){this.cameraController.setCameraActive(0);const s=this.getSize();this.rendererController.setViewport({x:0,y:0,width:s.width,height:s.height,scissor:!0,scissorTest:!1});const i=s.width/s.height;this.cameraController.camera.aspect!==i&&(this.cameraController.camera.aspect=i,this.cameraController.camera.updateProjectionMatrix()),t.enabled=!1}}dispose(){var e,t,s,i,r,n,a,l,d,y,c;this.stop(),xe.removeAll(),this.event.removeAllListeners(),(e=this.resizeObserver)==null||e.unobserve(this.options.container),this.installPlugins.forEach(v=>{var C;(C=v.dispose)==null||C.call(v)}),(t=this.controlsController)==null||t.dispose(),(s=this.transformController)==null||s.dispose(),(i=this.cssRendererController)==null||i.dispose(),(r=this.sceneController)==null||r.dispose(),(n=this.helperController)==null||n.dispose(),(a=this.composerController)==null||a.dispose(),(l=this.rendererController)==null||l.dispose(),this.cssRendererController=void 0,(d=this.gui)==null||d.destroy(),this.installPlugins.clear(),(y=this.stats)==null||y.dom.remove(),(c=this.renderer)==null||c.domElement.remove()}};ce.options={isdev:K,stats:K,gui:K,helper:K,viewHelper:K,controls:!0,transformControls:K,renderer:gt,composer:qt,scene:Tt,camera:Ot,bloom:!1,bloomParams:Zt,ssao:!1,ssaoParams:Yt,css2DRenderer:!1,css2DRendererParams:B({},ke),css3DRenderer:!1,css3DRendererParams:B({},ke)};let le=ce;const Gt=j.ACTION;exports.BaseObject=_t.BaseObject;exports.GUIObject=Ee;exports.Pencil=le;exports.cameraControlsAction=Gt;exports.default=le;
94
+ `,defines:{}}),"baseTexture");return e.needsSwap=!0,e},ye=1,K=!1,Ht=new w.MeshBasicMaterial({color:"black"}),kt=new w.PointsMaterial({color:"black",sizeAttenuation:!1}),Vt=new w.PointsMaterial({color:"black",sizeAttenuation:!0}),Bt=new w.SpriteMaterial({color:"black",sizeAttenuation:!0}),Nt=new w.SpriteMaterial({color:"black",sizeAttenuation:!1}),Yt=new Ve.MeshLineMaterial({color:"black",sizeAttenuation:0,lineWidth:0}),Zt={kernelRadius:8,minDistance:.005,maxDistance:.1},qt={threshold:0,strength:.4,radius:.1,bloomAlphaType:0},Wt={multisampling:4,premultiplieAlpha:!1};class Gt{constructor(e){this.bloomComposerActive=!1,this.active=!0,this.bloomSelection=new Set,this.bloomLayer=new w.Layers,this.bloomMaterials={},this.bloomVisible={},this.pipViewportState=null,this.options=e;const{rendererController:t,sceneController:s,cameraController:i,composerParams:r}=e,{renderer:n}=t,{multisampling:a}=r,{maxSamples:l}=n.capabilities,d=n.getDrawingBufferSize(new w.Vector2),y=new w.WebGLRenderTarget(d.width,d.height,{samples:Math.min(a,l),type:w.HalfFloatType}),c=new Te.EffectComposer(n,y),v=this.getSize();c.setSize(v.width,v.height);const C=new ht.RenderPass(s.scene,i.camera);c.addPass(C),this.renderer=n,this.scene=s.scene,this.camera=i.camera,this.finalComposer=c,this.renderPass=C,i.event.on("cameraChange",u=>{this.changeCamera(u)}),s.event.on("sceneChange",u=>{this.changeScene(u)})}changeCamera(e){this.renderPass.camera=e,this.camera=e}changeScene(e){this.renderPass.scene=e,this.ssaoPass&&(this.ssaoPass.scene=e),this.scene=e}addOutputPass(){const{premultiplieAlpha:e}=this.options.composerParams,t=new Ft;this.outputPass=t,this.setPremultiplieAlpha(e),this.finalComposer.addPass(t)}setPremultiplieAlpha(e){this.outputPass&&(this.outputPass.uniforms.premultiplieAlpha.value=e?1:0)}addSSAOPass(e){const{scene:t,camera:s,renderer:i}=this,r=i.getSize(new w.Vector2),n=r.width,a=r.height,l=new lt.SSAOPass(t,s,n,a);l.kernelRadius=e.kernelRadius,l.minDistance=e.minDistance,l.maxDistance=e.maxDistance,this.ssaoPass=l,this.finalComposer.addPass(l)}addSSAOGui(e){if(!this.ssaoPass)return;new Ee({ssao:{kernelRadius:{min:0,max:32,target:()=>this.ssaoPass},minDistance:{min:.001,max:.02,target:()=>this.ssaoPass},maxDistance:{min:.01,max:.3,target:()=>this.ssaoPass}}}).showGui(e)}addBloomPass(e){const{renderer:t}=this,{threshold:s,strength:i,radius:r,bloomAlphaType:n}=e,a=new pt.UnrealBloomPass(new w.Vector2(window.innerWidth,window.innerHeight),i,r,s);this.bloomPass=a;const l=new Te.EffectComposer(t);l.renderToScreen=!1,l.addPass(this.renderPass),l.addPass(a),this.bloomComposer=l;const d=It(l);d.uniforms.bloomAlphaType.value=n,this.bloomComposer=l,this.finalComposer.addPass(d),this.mixPass=d,this.bloomLayer.set(ye)}addBloomGui(e){if(!this.bloomComposer)return;new Ee({bloom:{threshold:{min:0,max:1,step:.01,target:()=>this.bloomPass},radius:{min:0,max:1,step:.001,target:()=>this.bloomPass},strength:{min:0,max:10,step:.001,target:()=>this.bloomPass}}}).showGui(e)}toggleBloomSelection(e,t){if(!this.bloomComposer){console.warn("err:pencil.options.bloom");return}const{object3d:s}=e;if(!s)return;let i=t;t===void 0&&(i=!this.bloomSelection.has(s)),i?(this.bloomSelection.add(s),s.traverse(r=>{r.layers.enable(ye)})):(this.bloomSelection.delete(s),s.traverse(r=>{r.layers.disable(ye)})),this.bloomSelection.size===0?this.bloomComposerActive=!1:this.bloomComposerActive=!0}enable(){this.active||(this.active=!0)}disable(){this.active&&(this.active=!1)}setSize(e,t){var s;(s=this.bloomComposer)==null||s.setSize(e,t),this.finalComposer.setSize(e,t)}setPixelRatio(e){var t;(t=this.bloomComposer)==null||t.setPixelRatio(e),this.finalComposer.setPixelRatio(e)}darkenNonBloomed(){const e=[],t=[];this.scene.children.forEach(s=>{s.isTransformControls||s.isTransformControlsRoot||s.type==="RectAreaLightHelper"?e.push(s):t.push(s)}),e.forEach(s=>{this.bloomVisible[s.uuid]=s.visible,s.visible=!1}),t.forEach(s=>{s.traverse(i=>{const r=i,n=i,a=i;r.material&&this.bloomLayer.test(r.layers)===!1&&(this.bloomMaterials[r.uuid]=r.material,n.isSprite?n.material.sizeAttenuation?n.material=Bt:n.material=Nt:r.material instanceof Ve.MeshLineMaterial?r.material=Yt:a.isPoints?a.material.sizeAttenuation?a.material=Vt:a.material=kt:r.material=Ht)})})}restoreNonBloomed(){this.scene.traverse(e=>{const t=e;this.bloomMaterials[t.uuid]?(t.material=this.bloomMaterials[t.uuid],delete this.bloomMaterials[t.uuid]):this.bloomVisible[t.uuid]!==void 0&&(t.visible=this.bloomVisible[t.uuid],delete this.bloomVisible[t.uuid])})}finalComposerRender(){this.bloomComposerActive&&this.bloomComposer?(this.mixPass.enabled=!0,this.darkenNonBloomed(),this.bloomComposer.render(),this.restoreNonBloomed()):this.mixPass&&(this.mixPass.enabled=!1),this.finalComposer.render()}getSize(){return this.renderer.getSize(new w.Vector2)}render(){if(!this.active)return;const{cameraController:e,rendererController:t}=this.options;if(this.pipViewportState){e.setCameraActive(0);const s=this.getSize();t.setViewport({x:0,y:0,width:s.width,height:s.height,scissor:!0,scissorTest:!1}),this.finalComposerRender(),e.setCameraActive(1),t.setViewport(me(B({},this.pipViewportState),{scissor:!0,scissorTest:!0})),this.finalComposerRender()}else this.finalComposerRender()}dispose(){var e;this.bloomMaterials={},this.bloomVisible={},this.bloomSelection.clear(),this.finalComposer.dispose(),(e=this.bloomComposer)==null||e.dispose()}}const ce=class ce{constructor(e){this.raycaster=new w.Raycaster,this.maxBackufferArea=5760*5760,this.installPlugins=new Map,this._cameraPositon=new w.Vector3,this._cameraTarget=new w.Vector3,this.event=new se.eventsExports.EventEmitter,this.timer=new $e.Timer,this.userData={},this.pageActiveIndex=-1,this.userSetDprCache=1,this.event.setMaxListeners(1/0),this.timer.connect(document),this.options=et(ce.options,e,{isMergeableObject:_t.isPlainObject}),this.userSetDprCache=this.options.renderer.devicePixelRatio;const{container:t,stats:s,gui:i,transformControls:r}=this.options;if(this.init(),this.options.WebGPUTHREE||this.initComposer(),this.initCSSRenderer(),r&&this.initTransformControls(),s){const n=new tt({horizontal:!1});n.init(this.renderer),t.appendChild(n.dom),this.stats=n}if(i){const n=new st;n.open(!1),this.gui=n}this.initResizeObserver()}getPlugin(e){return this.installPlugins.get(e)}get renderer(){return this.rendererController.renderer}get maxAnisotropy(){return this.options.WebGPUTHREE?0:this.renderer.capabilities.getMaxAnisotropy()}get controls(){return this.controlsController.cameraControls}get cameraPositon(){return this.controls.getPosition(this._cameraPositon,!1)}get cameraTarget(){return this.controls.getTarget(this._cameraTarget,!1)}get camera(){return this.cameraController.camera}get scene(){return this.sceneController.scene}use(e,...t){this.installPlugins.has(e.pluginName)?console.log("plugin already installed"):typeof e.install=="function"&&(e.install(this,...t),this.installPlugins.set(e.pluginName,e))}addPage({sceneOptions:e,cameraOptions:t}){const s=this.cameraController.addPerspectiveCamera(t);return this.sceneController.addScene(e).add(s),this.controlsController.addCameraControls(s),this.sceneController.sceneArr.length-1}removePage(e){e<=0||(this.cameraController.removeCamera(e),this.sceneController.removeScene(e),this.controlsController.removeCameraControls(e),this.pageActiveIndex===e&&this.showPage(0))}showPage(e){if(e!==this.pageActiveIndex){if(e!==-1&&!this.sceneController.sceneArr[e]){console.warn("addPage before showPage");return}this.sceneController.setSceneActive(e),this.controls.enabled=!1,e!==-1&&(this.cameraController.setCameraActive(e),this.controlsController.setCameraControlsActive(e),this.controls.enabled=!0),this.pageActiveIndex=e}}init(){const{container:e,WebGPUTHREE:t,helper:s,viewHelper:i,renderer:r,controlsParams:n}=this.options,{width:a,height:l}=this.getSize(),d=t?new Ot({width:a,height:l,renderer:t.WebGPURenderer,rendererParams:Et}):new yt({width:a,height:l,rendererParams:me(B({},r),{antialias:!1})}),y=new Tt({width:a,height:l}),c=new St({}),v=new At({controlsParams:{domElement:(n==null?void 0:n.domElement)||d.renderer.domElement}});this.sceneController=c,this.cameraController=y,this.controlsController=v,this.rendererController=d;const C=this.addPage({sceneOptions:this.options.scene,cameraOptions:this.options.camera});if(this.pageActiveIndex=C,this.controls.setLookAt(0,0,400,0,0,0,!1),s){const u=new Pt({container:e,sceneController:c,cameraController:y});u.add(c.scene),this.helperController=u,i&&u.addViewHelper()}e.appendChild(d.renderer.domElement)}initComposer(){const{bloom:e,bloomParams:t,ssao:s,ssaoParams:i,composer:r}=this.options,n=new Gt({rendererController:this.rendererController,sceneController:this.sceneController,cameraController:this.cameraController,composerParams:r});this.composerController=n,e&&(n.addBloomPass(B({},t)),this.gui&&n.addBloomGui(this.gui)),s&&(n.addSSAOPass(B({},i)),this.gui&&n.addSSAOGui(this.gui)),n.addOutputPass()}initCSSRenderer(){const{container:e,css2DRenderer:t,css3DRenderer:s,css2DRendererParams:i,css3DRendererParams:r}=this.options;if(t||s){const n=new zt(e);t&&n.addRenderer("css2d",i),s&&n.addRenderer("css3d",r),this.cssRendererController=n}}initTransformControls(){const e=new Dt({camera:this.camera,renderer:this.renderer,scene:this.scene});e.event.on("mouseDown",()=>{var t;(t=this.controlsController)==null||t.disable()}),e.event.on("mouseUp",()=>{var t;(t=this.controlsController)==null||t.enable()}),this.transformController=e}getSize(){const{container:e}=this.options;return{width:e.offsetWidth,height:e.offsetHeight}}initResizeObserver(){const{container:e}=this.options;if(this.resizeObserver)return;const t=new ResizeObserver(s=>{for(const i of s){const r=i.contentRect;this.handeleResize(r.width,r.height),this.setDevicePixelRatio(this.userSetDprCache)}});t.observe(e),this.resizeObserver=t}handeleResize(e,t,s=!0){const{rendererController:i,cameraController:r,composerController:n,cssRendererController:a}=this,l=this.renderer.getSize(new w.Vector2);l.x===e&&l.y===t||(r==null||r.setSize(e,t),i==null||i.setSize(e,t),n==null||n.setSize(e,t),a==null||a.setSize(e,t),this.installPlugins.forEach(d=>{var y;(y=d.setSize)==null||y.call(d,e,t)}),this.render(),s&&this.event.emit("resize",{width:e,height:t}))}setDevicePixelRatio(e){var a;this.userSetDprCache=e;const t=this.renderer.getPixelRatio();if(e===t)return;const{width:s,height:i}=this.getSize();let r=Math.sqrt(this.maxBackufferArea/(s*i));r=(r*100|0)/100;const n=Math.min(e,r);n!==e&&console.warn("maxBackufferArea:",this.maxBackufferArea," the pixel ratio is set to",n),this.rendererController.setPixelRatio(n),(a=this.composerController)==null||a.setPixelRatio(n)}pick(e,t,s=!0){const{raycaster:i,options:r}=this,{container:n}=r,a=new w.Vector2,l=n.getBoundingClientRect();if(a.x=(e.clientX-l.left)/(l.right-l.left)*2-1,a.y=-((e.clientY-l.top)/(l.bottom-l.top))*2+1,this.camera&&this.scene){i.setFromCamera(a,this.camera);const d=i.intersectObjects(t||this.scene.children,s);if(d.length)return{object:d[0].object,index:d[0].index,intersects:d}}}render(){var n,a,l,d,y,c,v;const{scene:e,camera:t,timer:s}=this;s.update(),xe.update();const i=s.getDelta(),r=s.getElapsed();(n=this.controlsController)==null||n.update(i),this.installPlugins.forEach(C=>{var u;(u=C.update)==null||u.call(C,i,r)}),(a=this.helperController)==null||a.update(i,this.controlsController,this.cameraTarget),(l=this.composerController)!=null&&l.active?this.composerController.render():(d=this.rendererController)==null||d.render(this.scene,this.camera),(y=this.helperController)==null||y.renderViewHelper(this.renderer),(c=this.cssRendererController)==null||c.render(e,t),(v=this.stats)==null||v.update(),this.event.emit("render",{delta:i,elapsed:r})}start(){this.renderer.setAnimationLoop(this.render.bind(this)),this.event.emit("start")}stop(){this.renderer.setAnimationLoop(null),this.event.emit("stop")}autoRotate(e){this.controlsController.autoRotateSpeed=e}showPipViewport(e){this.composerController.pipViewportState=e;let t=this.controlsController.cameraControlsArr[1];if(e){const{width:s,height:i}=this.getSize(),r=new DOMRect(e.x/s,(i-e.y-e.height)/i,e.width/s,e.height/i);if(t)t.enabled=!0,this.cameraController.cameraArr[1].position.copy(this.cameraController.camera.position);else{const n=this.cameraController.cloneCamera();t=this.controlsController.addCameraControls(n,r)}t.interactiveArea=r}else if(t){this.cameraController.setCameraActive(0);const s=this.getSize();this.rendererController.setViewport({x:0,y:0,width:s.width,height:s.height,scissor:!0,scissorTest:!1});const i=s.width/s.height;this.cameraController.camera.aspect!==i&&(this.cameraController.camera.aspect=i,this.cameraController.camera.updateProjectionMatrix()),t.enabled=!1}}dispose(){var e,t,s,i,r,n,a,l,d,y,c;this.stop(),this.timer.dispose(),xe.removeAll(),this.event.removeAllListeners(),(e=this.resizeObserver)==null||e.unobserve(this.options.container),this.installPlugins.forEach(v=>{var C;(C=v.dispose)==null||C.call(v)}),(t=this.controlsController)==null||t.dispose(),(s=this.transformController)==null||s.dispose(),(i=this.cssRendererController)==null||i.dispose(),(r=this.sceneController)==null||r.dispose(),(n=this.helperController)==null||n.dispose(),(a=this.composerController)==null||a.dispose(),(l=this.rendererController)==null||l.dispose(),this.cssRendererController=void 0,(d=this.gui)==null||d.destroy(),this.installPlugins.clear(),(y=this.stats)==null||y.dom.remove(),(c=this.renderer)==null||c.domElement.remove()}};ce.options={isdev:K,stats:K,gui:K,helper:K,viewHelper:K,controls:!0,transformControls:K,renderer:Ct,composer:Wt,scene:xt,camera:vt,bloom:!1,bloomParams:qt,ssao:!1,ssaoParams:Zt,css2DRenderer:!1,css2DRendererParams:B({},ke),css3DRenderer:!1,css3DRendererParams:B({},ke)};let le=ce;const Xt=j.ACTION;exports.BaseObject=ut.BaseObject;exports.GUIObject=Ee;exports.Pencil=le;exports.cameraControlsAction=Xt;exports.default=le;