gl-draw 0.15.0-beta.5 → 0.15.0-beta.6

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.
@@ -18,7 +18,7 @@ export default class MaterialList {
18
18
  proxyBaseObject(object: IBaseObject): void;
19
19
  addBaseObjectMap(object: IBaseObject): void;
20
20
  rmBaseObjectMap(object: IBaseObject, targetMaterial?: Material): void;
21
- getBaseObjectMaterials(): Record<string, Material>;
21
+ getBaseObjectByMaterial(material: Material): IBaseObject | null;
22
22
  emitObject3dChange(): void;
23
23
  dispose(): void;
24
24
  }
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var ut=Object.defineProperty,ft=Object.defineProperties;var _t=Object.getOwnPropertyDescriptors;var Ae=Object.getOwnPropertySymbols;var gt=Object.prototype.hasOwnProperty,vt=Object.prototype.propertyIsEnumerable;var Me=(h,e,t)=>e in h?ut(h,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):h[e]=t,z=(h,e)=>{for(var t in e||(e={}))gt.call(e,t)&&Me(h,t,e[t]);if(Ae)for(var t of Ae(e))vt.call(e,t)&&Me(h,t,e[t]);return h},ee=(h,e)=>ft(h,_t(e));var te=(h,e,t)=>new Promise((s,i)=>{var r=l=>{try{n(t.next(l))}catch(d){i(d)}},o=l=>{try{n(t.throw(l))}catch(d){i(d)}},n=l=>l.done?s(l.value):Promise.resolve(l.value).then(r,o);n((t=t.apply(h,e)).next())});Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const y=require("three"),yt=require("three/examples/jsm/misc/Timer"),Ct=require("@tweenjs/tween.js"),Ot=require("deepmerge"),Et=require("stats-gl"),Pe=require("./isPlainObject.js"),I=require("./index2.js"),Tt=require("three/examples/jsm/helpers/RectAreaLightHelper"),bt=require("three/examples/jsm/helpers/ViewHelper"),xt=require("three/examples/jsm/controls/TransformControls"),Re=require("three/examples/jsm/postprocessing/EffectComposer"),wt=require("three/examples/jsm/postprocessing/RenderPass"),Lt=require("three/examples/jsm/postprocessing/SSAOPass"),De=require("three/examples/jsm/postprocessing/Pass"),Pt=require("three/examples/jsm/postprocessing/OutputPass"),St=require("three/examples/jsm/postprocessing/ShaderPass"),At=require("three/examples/jsm/postprocessing/UnrealBloomPass");require("three/examples/jsm/renderers/CSS2DRenderer");require("three/examples/jsm/renderers/CSS3DRenderer");require("d3-geo");require("d3-geo-projection");require("three/examples/jsm/lights/RectAreaLightUniformsLib");require("three/examples/jsm/utils/BufferGeometryUtils");require("three/examples/jsm/lines/LineSegments2");require("three/examples/jsm/lines/LineSegmentsGeometry");require("three/examples/jsm/lines/LineMaterial");require("three-bvh-csg");const Ue=require("three/examples/jsm/loaders/GLTFLoader"),Mt=require("three/examples/jsm/loaders/DRACOLoader"),Rt=require("three/examples/jsm/loaders/EXRLoader"),Dt=require("three/examples/jsm/loaders/LottieLoader"),Le=require("esus-lite");function Ut(h){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(h){for(const t in h)if(t!=="default"){const s=Object.getOwnPropertyDescriptor(h,t);Object.defineProperty(e,t,s.get?s:{enumerable:!0,get:()=>h[t]})}}return e.default=h,Object.freeze(e)}const ye=Ut(Ct),R={LEFT:1,RIGHT:2,MIDDLE:4},c=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,SCREEN_PAN:65536,TOUCH_SCREEN_PAN:131072,TOUCH_DOLLY_SCREEN_PAN:262144,TOUCH_ZOOM_SCREEN_PAN:524288}),q={NONE:0,IN:1,OUT:-1};function Y(h){return h.isPerspectiveCamera}function B(h){return h.isOrthographicCamera}const W=Math.PI*2,ze=Math.PI/2,et=1e-5,se=Math.PI/180;function F(h,e,t){return Math.max(e,Math.min(t,h))}function M(h,e=et){return Math.abs(h)<e}function S(h,e,t=et){return M(h-e,t)}function ke(h,e){return Math.round(h/e)*e}function ie(h){return isFinite(h)?h:h<0?-Number.MAX_VALUE:Number.MAX_VALUE}function re(h){return Math.abs(h)<Number.MAX_VALUE?h:h*(1/0)}function le(h,e,t,s,i=1/0,r){s=Math.max(1e-4,s);const o=2/s,n=o*r,l=1/(1+n+.48*n*n+.235*n*n*n);let d=h-e;const _=e,p=i*s;d=F(d,-p,p),e=h-d;const E=(t.value+o*d)*r;t.value=(t.value-o*E)*l;let v=e+(d+E)*l;return _-h>0==v>_&&(v=_,t.value=(v-_)/r),v}function Fe(h,e,t,s,i=1/0,r,o){s=Math.max(1e-4,s);const n=2/s,l=n*r,d=1/(1+l+.48*l*l+.235*l*l*l);let _=e.x,p=e.y,E=e.z,v=h.x-_,m=h.y-p,u=h.z-E;const f=_,a=p,g=E,O=i*s,C=O*O,x=v*v+m*m+u*u;if(x>C){const ve=Math.sqrt(x);v=v/ve*O,m=m/ve*O,u=u/ve*O}_=h.x-v,p=h.y-m,E=h.z-u;const T=(t.x+n*v)*r,L=(t.y+n*m)*r,D=(t.z+n*u)*r;t.x=(t.x-n*T)*d,t.y=(t.y-n*L)*d,t.z=(t.z-n*D)*d,o.x=_+(v+T)*d,o.y=p+(m+L)*d,o.z=E+(u+D)*d;const V=f-h.x,ae=a-h.y,ct=g-h.z,dt=o.x-f,pt=o.y-a,mt=o.z-g;return V*dt+ae*pt+ct*mt>0&&(o.x=f,o.y=a,o.z=g,t.x=(o.x-f)/r,t.y=(o.y-a)/r,t.z=(o.z-g)/r),o}function Ce(h,e){e.set(0,0),h.forEach(t=>{e.x+=t.clientX,e.y+=t.clientY}),e.x/=h.length,e.y/=h.length}function Oe(h,e){return B(h)?(console.warn(`${e} is not supported in OrthographicCamera`),!0):!1}class zt{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,o=i.length;r<o;r++)i[r].call(this,e)}}}const he=1/8,kt=/Mac/.test(navigator.platform);let b,Ne,ce,Ee,U,w,P,G,oe,N,j,Z,je,He,k,ne,K,Ie,Te,Be,be,xe,de;class Q extends zt{static install(e){b=e.THREE,Ne=Object.freeze(new b.Vector3(0,0,0)),ce=Object.freeze(new b.Vector3(0,1,0)),Ee=Object.freeze(new b.Vector3(0,0,1)),U=new b.Vector2,w=new b.Vector3,P=new b.Vector3,G=new b.Vector3,oe=new b.Vector3,N=new b.Vector3,j=new b.Vector3,Z=new b.Vector3,je=new b.Vector3,He=new b.Vector3,k=new b.Spherical,ne=new b.Spherical,K=new b.Box3,Ie=new b.Box3,Te=new b.Sphere,Be=new b.Quaternion,be=new b.Quaternion,xe=new b.Matrix4,de=new b.Raycaster}static get ACTION(){return c}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.boundaryFriction=0,this.restThreshold=.01,this.colliderMeshes=[],this.cancel=()=>{},this._enabled=!0,this._state=c.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=q.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new b.Vector3,this._focalOffsetVelocity=new b.Vector3,this._zoomVelocity={value:0},this._truckInternal=(a,g,O,C)=>{let x,T;if(Y(this._camera)){const L=w.copy(this._camera.position).sub(this._target),D=this._camera.getEffectiveFOV()*se,V=L.length()*Math.tan(D*.5);x=this.truckSpeed*a*V/this._elementRect.height,T=this.truckSpeed*g*V/this._elementRect.height}else if(B(this._camera)){const L=this._camera;x=this.truckSpeed*a*(L.right-L.left)/L.zoom/this._elementRect.width,T=this.truckSpeed*g*(L.top-L.bottom)/L.zoom/this._elementRect.height}else return;C?(O?this.setFocalOffset(this._focalOffsetEnd.x+x,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(x,0,!0),this.forward(-T,!0)):O?this.setFocalOffset(this._focalOffsetEnd.x+x,this._focalOffsetEnd.y+T,this._focalOffsetEnd.z,!0):this.truck(x,T,!0)},this._rotateInternal=(a,g)=>{const O=W*this.azimuthRotateSpeed*a/this._elementRect.height,C=W*this.polarRotateSpeed*g/this._elementRect.height;this.rotate(O,C,!0)},this._dollyInternal=(a,g,O)=>{const C=Math.pow(.95,-a*this.dollySpeed),x=this._sphericalEnd.radius,T=this._sphericalEnd.radius*C,L=F(T,this.minDistance,this.maxDistance),D=L-T;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(T,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(D,!0),this._dollyToNoClamp(L,!0)):this._dollyToNoClamp(L,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?T:L)-x,this._dollyControlCoord.set(g,O)),this._lastDollyDirection=Math.sign(-a)},this._zoomInternal=(a,g,O)=>{const C=Math.pow(.95,a*this.dollySpeed),x=this._zoom,T=this._zoom*C;this.zoomTo(T,!0),this.dollyToCursor&&(this._changedZoom+=T-x,this._dollyControlCoord.set(g,O))},typeof b=="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 b.Quaternion().setFromUnitVectors(this._camera.up,ce),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=c.NONE,this._target=new b.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new b.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new b.Spherical().setFromVector3(w.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 b.Vector3,new b.Vector3,new b.Vector3,new b.Vector3],this._updateNearPlaneCorners(),this._boundary=new b.Box3(new b.Vector3(-1/0,-1/0,-1/0),new b.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 b.Vector2,this.mouseButtons={left:c.ROTATE,middle:c.DOLLY,right:c.TRUCK,wheel:Y(this._camera)?c.DOLLY:B(this._camera)?c.ZOOM:c.NONE},this.touches={one:c.TOUCH_ROTATE,two:Y(this._camera)?c.TOUCH_DOLLY_TRUCK:B(this._camera)?c.TOUCH_ZOOM_TRUCK:c.NONE,three:c.TOUCH_TRUCK};const s=new b.Vector2,i=new b.Vector2,r=new b.Vector2,o=a=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const C=this._domElement.getBoundingClientRect(),x=(a.clientX-C.left)/(C.right-C.left),T=(a.clientY-C.top)/(C.bottom-C.top);if(x<this._interactiveArea.left||x>this._interactiveArea.right||T<this._interactiveArea.top||T>this._interactiveArea.bottom)return}const g=a.pointerType!=="mouse"?null:(a.buttons&R.LEFT)===R.LEFT?R.LEFT:(a.buttons&R.MIDDLE)===R.MIDDLE?R.MIDDLE:(a.buttons&R.RIGHT)===R.RIGHT?R.RIGHT:null;if(g!==null){const C=this._findPointerByMouseButton(g);C&&this._disposePointer(C)}if((a.buttons&R.LEFT)===R.LEFT&&this._lockedPointer)return;const O={pointerId:a.pointerId,clientX:a.clientX,clientY:a.clientY,deltaX:0,deltaY:0,mouseButton:g};this._activePointers.push(O),this._domElement.ownerDocument.removeEventListener("pointermove",n,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.addEventListener("pointermove",n,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),this._isDragging=!0,E(a)},n=a=>{a.cancelable&&a.preventDefault();const g=a.pointerId,O=this._lockedPointer||this._findPointerById(g);if(O){if(O.clientX=a.clientX,O.clientY=a.clientY,O.deltaX=a.movementX,O.deltaY=a.movementY,this._state=0,a.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&&(a.buttons&R.LEFT)===R.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(a.buttons&R.MIDDLE)===R.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(a.buttons&R.RIGHT)===R.RIGHT&&(this._state=this._state|this.mouseButtons.right);v()}},l=a=>{const g=this._findPointerById(a.pointerId);if(!(g&&g===this._lockedPointer)){if(g&&this._disposePointer(g),a.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=c.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=c.NONE;m()}};let d=-1;const _=a=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===c.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const T=this._domElement.getBoundingClientRect(),L=(a.clientX-T.left)/(T.right-T.left),D=(a.clientY-T.top)/(T.bottom-T.top);if(L<this._interactiveArea.left||L>this._interactiveArea.right||D<this._interactiveArea.top||D>this._interactiveArea.bottom)return}if(a.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===c.ROTATE||this.mouseButtons.wheel===c.TRUCK){const T=performance.now();d-T<1e3&&this._getClientRect(this._elementRect),d=T}const g=kt?-1:-3,O=a.deltaMode===1||a.ctrlKey?a.deltaY/g:a.deltaY/(g*10),C=this.dollyToCursor?(a.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,x=this.dollyToCursor?(a.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case c.ROTATE:{this._rotateInternal(a.deltaX,a.deltaY),this._isUserControllingRotate=!0;break}case c.TRUCK:{this._truckInternal(a.deltaX,a.deltaY,!1,!1),this._isUserControllingTruck=!0;break}case c.SCREEN_PAN:{this._truckInternal(a.deltaX,a.deltaY,!1,!0),this._isUserControllingTruck=!0;break}case c.OFFSET:{this._truckInternal(a.deltaX,a.deltaY,!0,!1),this._isUserControllingOffset=!0;break}case c.DOLLY:{this._dollyInternal(-O,C,x),this._isUserControllingDolly=!0;break}case c.ZOOM:{this._zoomInternal(-O,C,x),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},p=a=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===Q.ACTION.NONE){const g=a instanceof PointerEvent?a.pointerId:0,O=this._findPointerById(g);O&&this._disposePointer(O),this._domElement.ownerDocument.removeEventListener("pointermove",n,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l);return}a.preventDefault()}},E=a=>{if(!this._enabled)return;if(Ce(this._activePointers,U),this._getClientRect(this._elementRect),s.copy(U),i.copy(U),this._activePointers.length>=2){const O=U.x-this._activePointers[1].clientX,C=U.y-this._activePointers[1].clientY,x=Math.sqrt(O*O+C*C);r.set(0,x);const T=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,L=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;i.set(T,L)}if(this._state=0,!a)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in a&&a.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&&(a.buttons&R.LEFT)===R.LEFT&&(this._state=this._state|this.mouseButtons.left),(a.buttons&R.MIDDLE)===R.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(a.buttons&R.RIGHT)===R.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&c.ROTATE)===c.ROTATE||(this._state&c.TOUCH_ROTATE)===c.TOUCH_ROTATE||(this._state&c.TOUCH_DOLLY_ROTATE)===c.TOUCH_DOLLY_ROTATE||(this._state&c.TOUCH_ZOOM_ROTATE)===c.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&c.TRUCK)===c.TRUCK||(this._state&c.SCREEN_PAN)===c.SCREEN_PAN||(this._state&c.TOUCH_TRUCK)===c.TOUCH_TRUCK||(this._state&c.TOUCH_SCREEN_PAN)===c.TOUCH_SCREEN_PAN||(this._state&c.TOUCH_DOLLY_TRUCK)===c.TOUCH_DOLLY_TRUCK||(this._state&c.TOUCH_DOLLY_SCREEN_PAN)===c.TOUCH_DOLLY_SCREEN_PAN||(this._state&c.TOUCH_ZOOM_TRUCK)===c.TOUCH_ZOOM_TRUCK||(this._state&c.TOUCH_ZOOM_SCREEN_PAN)===c.TOUCH_DOLLY_SCREEN_PAN)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&c.DOLLY)===c.DOLLY||(this._state&c.TOUCH_DOLLY)===c.TOUCH_DOLLY||(this._state&c.TOUCH_DOLLY_TRUCK)===c.TOUCH_DOLLY_TRUCK||(this._state&c.TOUCH_DOLLY_SCREEN_PAN)===c.TOUCH_DOLLY_SCREEN_PAN||(this._state&c.TOUCH_DOLLY_OFFSET)===c.TOUCH_DOLLY_OFFSET||(this._state&c.TOUCH_DOLLY_ROTATE)===c.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&c.ZOOM)===c.ZOOM||(this._state&c.TOUCH_ZOOM)===c.TOUCH_ZOOM||(this._state&c.TOUCH_ZOOM_TRUCK)===c.TOUCH_ZOOM_TRUCK||(this._state&c.TOUCH_ZOOM_SCREEN_PAN)===c.TOUCH_ZOOM_SCREEN_PAN||(this._state&c.TOUCH_ZOOM_OFFSET)===c.TOUCH_ZOOM_OFFSET||(this._state&c.TOUCH_ZOOM_ROTATE)===c.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&c.OFFSET)===c.OFFSET||(this._state&c.TOUCH_OFFSET)===c.TOUCH_OFFSET||(this._state&c.TOUCH_DOLLY_OFFSET)===c.TOUCH_DOLLY_OFFSET||(this._state&c.TOUCH_ZOOM_OFFSET)===c.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},v=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,Ce(this._activePointers,U);const g=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,O=g?-g.deltaX:i.x-U.x,C=g?-g.deltaY:i.y-U.y;if(i.copy(U),((this._state&c.ROTATE)===c.ROTATE||(this._state&c.TOUCH_ROTATE)===c.TOUCH_ROTATE||(this._state&c.TOUCH_DOLLY_ROTATE)===c.TOUCH_DOLLY_ROTATE||(this._state&c.TOUCH_ZOOM_ROTATE)===c.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(O,C),this._isUserControllingRotate=!0),(this._state&c.DOLLY)===c.DOLLY||(this._state&c.ZOOM)===c.ZOOM){const x=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,T=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0,L=this.dollyDragInverted?-1:1;(this._state&c.DOLLY)===c.DOLLY?(this._dollyInternal(L*C*he,x,T),this._isUserControllingDolly=!0):(this._zoomInternal(L*C*he,x,T),this._isUserControllingZoom=!0)}if((this._state&c.TOUCH_DOLLY)===c.TOUCH_DOLLY||(this._state&c.TOUCH_ZOOM)===c.TOUCH_ZOOM||(this._state&c.TOUCH_DOLLY_TRUCK)===c.TOUCH_DOLLY_TRUCK||(this._state&c.TOUCH_ZOOM_TRUCK)===c.TOUCH_ZOOM_TRUCK||(this._state&c.TOUCH_DOLLY_SCREEN_PAN)===c.TOUCH_DOLLY_SCREEN_PAN||(this._state&c.TOUCH_ZOOM_SCREEN_PAN)===c.TOUCH_ZOOM_SCREEN_PAN||(this._state&c.TOUCH_DOLLY_OFFSET)===c.TOUCH_DOLLY_OFFSET||(this._state&c.TOUCH_ZOOM_OFFSET)===c.TOUCH_ZOOM_OFFSET||(this._state&c.TOUCH_DOLLY_ROTATE)===c.TOUCH_DOLLY_ROTATE||(this._state&c.TOUCH_ZOOM_ROTATE)===c.TOUCH_ZOOM_ROTATE){const x=U.x-this._activePointers[1].clientX,T=U.y-this._activePointers[1].clientY,L=Math.sqrt(x*x+T*T),D=r.y-L;r.set(0,L);const V=this.dollyToCursor?(i.x-this._elementRect.x)/this._elementRect.width*2-1:0,ae=this.dollyToCursor?(i.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&c.TOUCH_DOLLY)===c.TOUCH_DOLLY||(this._state&c.TOUCH_DOLLY_ROTATE)===c.TOUCH_DOLLY_ROTATE||(this._state&c.TOUCH_DOLLY_TRUCK)===c.TOUCH_DOLLY_TRUCK||(this._state&c.TOUCH_DOLLY_SCREEN_PAN)===c.TOUCH_DOLLY_SCREEN_PAN||(this._state&c.TOUCH_DOLLY_OFFSET)===c.TOUCH_DOLLY_OFFSET?(this._dollyInternal(D*he,V,ae),this._isUserControllingDolly=!0):(this._zoomInternal(D*he,V,ae),this._isUserControllingZoom=!0)}((this._state&c.TRUCK)===c.TRUCK||(this._state&c.TOUCH_TRUCK)===c.TOUCH_TRUCK||(this._state&c.TOUCH_DOLLY_TRUCK)===c.TOUCH_DOLLY_TRUCK||(this._state&c.TOUCH_ZOOM_TRUCK)===c.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(O,C,!1,!1),this._isUserControllingTruck=!0),((this._state&c.SCREEN_PAN)===c.SCREEN_PAN||(this._state&c.TOUCH_SCREEN_PAN)===c.TOUCH_SCREEN_PAN||(this._state&c.TOUCH_DOLLY_SCREEN_PAN)===c.TOUCH_DOLLY_SCREEN_PAN||(this._state&c.TOUCH_ZOOM_SCREEN_PAN)===c.TOUCH_ZOOM_SCREEN_PAN)&&(this._truckInternal(O,C,!1,!0),this._isUserControllingTruck=!0),((this._state&c.OFFSET)===c.OFFSET||(this._state&c.TOUCH_OFFSET)===c.TOUCH_OFFSET||(this._state&c.TOUCH_DOLLY_OFFSET)===c.TOUCH_DOLLY_OFFSET||(this._state&c.TOUCH_ZOOM_OFFSET)===c.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(O,C,!0,!1),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},m=()=>{Ce(this._activePointers,U),i.copy(U),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",n,{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",n,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",u),this._domElement.ownerDocument.addEventListener("pointerlockerror",f),this._domElement.ownerDocument.addEventListener("pointermove",n,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),E())},this.unlockPointer=()=>{var a,g,O;this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),(a=this._domElement)===null||a===void 0||a.ownerDocument.exitPointerLock(),(g=this._domElement)===null||g===void 0||g.ownerDocument.removeEventListener("pointerlockchange",u),(O=this._domElement)===null||O===void 0||O.ownerDocument.removeEventListener("pointerlockerror",f),this.cancel()};const u=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},f=()=>{this.unlockPointer()};this._addAllEventListeners=a=>{this._domElement=a,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",o),this._domElement.addEventListener("pointercancel",l),this._domElement.addEventListener("wheel",_,{passive:!1}),this._domElement.addEventListener("contextmenu",p)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",o),this._domElement.removeEventListener("pointercancel",l),this._domElement.removeEventListener("wheel",_,{passive:!1}),this._domElement.removeEventListener("contextmenu",p),this._domElement.ownerDocument.removeEventListener("pointermove",n,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.removeEventListener("pointerlockchange",u),this._domElement.ownerDocument.removeEventListener("pointerlockerror",f))},this.cancel=()=>{this._state!==c.NONE&&(this._state=c.NONE,this._activePointers.length=0,m())},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 o=!s||S(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&S(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(o)}dolly(e,t=!1){return this.dollyTo(this._sphericalEnd.radius-e,t)}dollyTo(e,t=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=q.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 o=this._collisionTest(),n=S(o,this._spherical.radius);if(!(s>e)&&n)return Promise.resolve();this._sphericalEnd.radius=Math.min(e,o)}else this._sphericalEnd.radius=e;this._needsUpdate=!0,t||(this._spherical.radius=this._sphericalEnd.radius);const r=!t||S(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(r)}dollyInFixed(e,t=!1){this._targetEnd.add(this._getCameraDirection(oe).multiplyScalar(e)),t||this._target.copy(this._targetEnd);const s=!t||S(this._target.x,this._targetEnd.x,this.restThreshold)&&S(this._target.y,this._targetEnd.y,this.restThreshold)&&S(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||S(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(),N.setFromMatrixColumn(this._camera.matrix,0),j.setFromMatrixColumn(this._camera.matrix,1),N.multiplyScalar(e),j.multiplyScalar(-t);const i=w.copy(N).add(j),r=P.copy(this._targetEnd).add(i);return this.moveTo(r.x,r.y,r.z,s)}forward(e,t=!1){w.setFromMatrixColumn(this._camera.matrix,0),w.crossVectors(this._camera.up,w),w.multiplyScalar(e);const s=P.copy(this._targetEnd).add(w);return this.moveTo(s.x,s.y,s.z,t)}elevate(e,t=!1){return w.copy(this._camera.up).multiplyScalar(e),this.moveTo(this._targetEnd.x+w.x,this._targetEnd.y+w.y,this._targetEnd.z+w.z,t)}moveTo(e,t,s,i=!1){this._isUserControllingTruck=!1;const r=w.set(e,t,s).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,r,this.boundaryFriction),this._needsUpdate=!0,i||this._target.copy(this._targetEnd);const o=!i||S(this._target.x,this._targetEnd.x,this.restThreshold)&&S(this._target.y,this._targetEnd.y,this.restThreshold)&&S(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(o)}lookInDirectionOf(e,t,s,i=!1){const n=w.set(e,t,s).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);return this.setPosition(n.x,n.y,n.z,i)}fitToBox(e,t,{cover:s=!1,paddingLeft:i=0,paddingRight:r=0,paddingBottom:o=0,paddingTop:n=0}={}){const l=[],d=e.isBox3?K.copy(e):K.setFromObject(e);d.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const _=ke(this._sphericalEnd.theta,ze),p=ke(this._sphericalEnd.phi,ze);l.push(this.rotateTo(_,p,t));const E=w.setFromSpherical(this._sphericalEnd).normalize(),v=Be.setFromUnitVectors(E,Ee),m=S(Math.abs(E.y),1);m&&v.multiply(be.setFromAxisAngle(ce,_)),v.multiply(this._yAxisUpSpaceInverse);const u=Ie.makeEmpty();P.copy(d.min).applyQuaternion(v),u.expandByPoint(P),P.copy(d.min).setX(d.max.x).applyQuaternion(v),u.expandByPoint(P),P.copy(d.min).setY(d.max.y).applyQuaternion(v),u.expandByPoint(P),P.copy(d.max).setZ(d.min.z).applyQuaternion(v),u.expandByPoint(P),P.copy(d.min).setZ(d.max.z).applyQuaternion(v),u.expandByPoint(P),P.copy(d.max).setY(d.min.y).applyQuaternion(v),u.expandByPoint(P),P.copy(d.max).setX(d.min.x).applyQuaternion(v),u.expandByPoint(P),P.copy(d.max).applyQuaternion(v),u.expandByPoint(P),u.min.x-=i,u.min.y-=o,u.max.x+=r,u.max.y+=n,v.setFromUnitVectors(Ee,E),m&&v.premultiply(be.invert()),v.premultiply(this._yAxisUpSpace);const f=u.getSize(w),a=u.getCenter(P).applyQuaternion(v);if(Y(this._camera)){const g=this.getDistanceToFitBox(f.x,f.y,f.z,s);l.push(this.moveTo(a.x,a.y,a.z,t)),l.push(this.dollyTo(g,t)),l.push(this.setFocalOffset(0,0,0,t))}else if(B(this._camera)){const g=this._camera,O=g.right-g.left,C=g.top-g.bottom,x=s?Math.max(O/f.x,C/f.y):Math.min(O/f.x,C/f.y);l.push(this.moveTo(a.x,a.y,a.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?Q.createBoundingSphere(e,Te):Te.copy(e);if(s.push(this.moveTo(r.center.x,r.center.y,r.center.z,t)),Y(this._camera)){const o=this.getDistanceToFitSphere(r.radius);s.push(this.dollyTo(o,t))}else if(B(this._camera)){const o=this._camera.right-this._camera.left,n=this._camera.top-this._camera.bottom,l=2*r.radius,d=Math.min(o/l,n/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,o,n=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=q.NONE,this._changedDolly=0;const l=P.set(i,r,o),d=w.set(e,t,s);this._targetEnd.copy(l),this._sphericalEnd.setFromVector3(d.sub(l).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,n||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const _=!n||S(this._target.x,this._targetEnd.x,this.restThreshold)&&S(this._target.y,this._targetEnd.y,this.restThreshold)&&S(this._target.z,this._targetEnd.z,this.restThreshold)&&S(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&S(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&S(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(_)}lerpLookAt(e,t,s,i,r,o,n,l,d,_,p,E,v,m=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=q.NONE,this._changedDolly=0;const u=w.set(i,r,o),f=P.set(e,t,s);k.setFromVector3(f.sub(u).applyQuaternion(this._yAxisUpSpace));const a=G.set(_,p,E),g=P.set(n,l,d);ne.setFromVector3(g.sub(a).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(u.lerp(a,v));const O=ne.theta-k.theta,C=ne.phi-k.phi,x=ne.radius-k.radius;this._sphericalEnd.set(k.radius+x*v,k.phi+C*v,k.theta+O*v),this.normalizeRotations(),this._needsUpdate=!0,m||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const T=!m||S(this._target.x,this._targetEnd.x,this.restThreshold)&&S(this._target.y,this._targetEnd.y,this.restThreshold)&&S(this._target.z,this._targetEnd.z,this.restThreshold)&&S(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&S(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&S(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(T)}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(w),o=this.setLookAt(r.x,r.y,r.z,e,t,s,i);return this._sphericalEnd.phi=F(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),o}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||S(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&S(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&S(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(r)}setOrbitPoint(e,t,s){this._camera.updateMatrixWorld(),N.setFromMatrixColumn(this._camera.matrixWorldInverse,0),j.setFromMatrixColumn(this._camera.matrixWorldInverse,1),Z.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const i=w.set(e,t,s),r=i.distanceTo(this._camera.position),o=i.sub(this._camera.position);N.multiplyScalar(o.x),j.multiplyScalar(o.y),Z.multiplyScalar(o.z),w.copy(N).add(j).add(Z),w.z=w.z+r,this.dollyTo(r,!1),this.setFocalOffset(-w.x,w.y,-w.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 b.Vector4,typeof e=="number"?this._viewport.set(e,t,s,i):this._viewport.copy(e)}getDistanceToFitBox(e,t,s,i=!1){if(Oe(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const r=e/t,o=this._camera.getEffectiveFOV()*se,n=this._camera.aspect;return((i?r>n:r<n)?t:e/n)*.5/Math.tan(o*.5)+s*.5}getDistanceToFitSphere(e){if(Oe(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const t=this._camera.getEffectiveFOV()*se,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 b.Vector3).copy(t?this._targetEnd:this._target)}getPosition(e,t=!0){return(e&&e.isVector3?e:new b.Vector3).setFromSpherical(t?this._sphericalEnd:this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(t?this._targetEnd:this._target)}getSpherical(e,t=!0){return(e||new b.Spherical).copy(t?this._sphericalEnd:this._spherical)}getFocalOffset(e,t=!0){return(e&&e.isVector3?e:new b.Vector3).copy(t?this._focalOffsetEnd:this._focalOffset)}normalizeRotations(){this._sphericalEnd.theta=this._sphericalEnd.theta%W,this._sphericalEnd.theta<0&&(this._sphericalEnd.theta+=W),this._spherical.theta+=W*Math.round((this._sphericalEnd.theta-this._spherical.theta)/W)}stop(){this._focalOffset.copy(this._focalOffsetEnd),this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd),this._zoom=this._zoomEnd}reset(e=!1){if(!S(this._camera.up.x,this._cameraUp0.x)||!S(this._camera.up.y,this._cameraUp0.y)||!S(this._camera.up.z,this._cameraUp0.z)){this._camera.up.copy(this._cameraUp0);const s=this.getPosition(w);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,ce),this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert()}applyCameraUp(){const e=w.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(w);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=je.subVectors(this._targetEnd,this._target),o=He.subVectors(this._focalOffsetEnd,this._focalOffset),n=this._zoomEnd-this._zoom;if(M(t))this._thetaVelocity.value=0,this._spherical.theta=this._sphericalEnd.theta;else{const p=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.theta=le(this._spherical.theta,this._sphericalEnd.theta,this._thetaVelocity,p,1/0,e),this._needsUpdate=!0}if(M(s))this._phiVelocity.value=0,this._spherical.phi=this._sphericalEnd.phi;else{const p=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.phi=le(this._spherical.phi,this._sphericalEnd.phi,this._phiVelocity,p,1/0,e),this._needsUpdate=!0}if(M(i))this._radiusVelocity.value=0,this._spherical.radius=this._sphericalEnd.radius;else{const p=this._isUserControllingDolly?this.draggingSmoothTime:this.smoothTime;this._spherical.radius=le(this._spherical.radius,this._sphericalEnd.radius,this._radiusVelocity,p,this.maxSpeed,e),this._needsUpdate=!0}if(M(r.x)&&M(r.y)&&M(r.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const p=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;Fe(this._target,this._targetEnd,this._targetVelocity,p,this.maxSpeed,e,this._target),this._needsUpdate=!0}if(M(o.x)&&M(o.y)&&M(o.z))this._focalOffsetVelocity.set(0,0,0),this._focalOffset.copy(this._focalOffsetEnd);else{const p=this._isUserControllingOffset?this.draggingSmoothTime:this.smoothTime;Fe(this._focalOffset,this._focalOffsetEnd,this._focalOffsetVelocity,p,this.maxSpeed,e,this._focalOffset),this._needsUpdate=!0}if(M(n))this._zoomVelocity.value=0,this._zoom=this._zoomEnd;else{const p=this._isUserControllingZoom?this.draggingSmoothTime:this.smoothTime;this._zoom=le(this._zoom,this._zoomEnd,this._zoomVelocity,p,1/0,e)}if(this.dollyToCursor){if(Y(this._camera)&&this._changedDolly!==0){const p=this._spherical.radius-this._lastDistance,E=this._camera,v=this._getCameraDirection(oe),m=w.copy(v).cross(E.up).normalize();m.lengthSq()===0&&(m.x=1);const u=P.crossVectors(m,v),f=this._sphericalEnd.radius*Math.tan(E.getEffectiveFOV()*se*.5),g=(this._sphericalEnd.radius-p-this._sphericalEnd.radius)/this._sphericalEnd.radius,O=G.copy(this._targetEnd).add(m.multiplyScalar(this._dollyControlCoord.x*f*E.aspect)).add(u.multiplyScalar(this._dollyControlCoord.y*f)),C=w.copy(this._targetEnd).lerp(O,g),x=this._lastDollyDirection===q.IN&&this._spherical.radius<=this.minDistance,T=this._lastDollyDirection===q.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(x||T)){this._sphericalEnd.radius-=p,this._spherical.radius-=p;const D=P.copy(v).multiplyScalar(-p);C.add(D)}this._boundary.clampPoint(C,C);const L=P.subVectors(C,this._targetEnd);this._targetEnd.copy(C),this._target.add(L),this._changedDolly-=p,M(this._changedDolly)&&(this._changedDolly=0)}else if(B(this._camera)&&this._changedZoom!==0){const p=this._zoom-this._lastZoom,E=this._camera,v=w.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(E.near+E.far)/(E.near-E.far)).unproject(E),m=P.set(0,0,-1).applyQuaternion(E.quaternion),u=G.copy(v).add(m.multiplyScalar(-v.dot(E.up))),a=-(this._zoom-p-this._zoom)/this._zoom,g=this._getCameraDirection(oe),O=this._targetEnd.dot(g),C=w.copy(this._targetEnd).lerp(u,a),x=C.dot(g),T=g.multiplyScalar(x-O);C.sub(T),this._boundary.clampPoint(C,C);const L=P.subVectors(C,this._targetEnd);this._targetEnd.copy(C),this._target.add(L),this._changedZoom-=p,M(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),(!M(this._focalOffset.x)||!M(this._focalOffset.y)||!M(this._focalOffset.z))&&(N.setFromMatrixColumn(this._camera.matrix,0),j.setFromMatrixColumn(this._camera.matrix,1),Z.setFromMatrixColumn(this._camera.matrix,2),N.multiplyScalar(this._focalOffset.x),j.multiplyScalar(-this._focalOffset.y),Z.multiplyScalar(this._focalOffset.z),w.copy(N).add(j).add(Z),this._camera.position.add(w),this._camera.updateMatrixWorld()),this._boundaryEnclosesCamera&&this._encloseToBoundary(this._camera.position.copy(this._target),w.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),1);const _=this._needsUpdate;return _&&!this._updatedLastTime?(this._hasRested=!1,this.dispatchEvent({type:"wake"}),this.dispatchEvent({type:"update"})):_?(this.dispatchEvent({type:"update"}),M(t,this.restThreshold)&&M(s,this.restThreshold)&&M(i,this.restThreshold)&&M(r.x,this.restThreshold)&&M(r.y,this.restThreshold)&&M(r.z,this.restThreshold)&&M(o.x,this.restThreshold)&&M(o.y,this.restThreshold)&&M(o.z,this.restThreshold)&&M(n,this.restThreshold)&&!this._hasRested&&(this._hasRested=!0,this.dispatchEvent({type:"rest"}))):!_&&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=_,this._needsUpdate=!1,_}toJSON(){return JSON.stringify({enabled:this._enabled,minDistance:this.minDistance,maxDistance:ie(this.maxDistance),minZoom:this.minZoom,maxZoom:ie(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:ie(this.maxPolarAngle),minAzimuthAngle:ie(this.minAzimuthAngle),maxAzimuthAngle:ie(this.maxAzimuthAngle),smoothTime:this.smoothTime,draggingSmoothTime:this.draggingSmoothTime,dollySpeed:this.dollySpeed,truckSpeed:this.truckSpeed,dollyToCursor:this.dollyToCursor,target:this._targetEnd.toArray(),position:w.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=re(s.maxDistance),this.minZoom=s.minZoom,this.maxZoom=re(s.maxZoom),this.minPolarAngle=s.minPolarAngle,this.maxPolarAngle=re(s.maxPolarAngle),this.minAzimuthAngle=re(s.minAzimuthAngle),this.maxAzimuthAngle=re(s.maxAzimuthAngle),this.smoothTime=s.smoothTime,this.draggingSmoothTime=s.draggingSmoothTime,this.dollySpeed=s.dollySpeed,this.truckSpeed=s.truckSpeed,this.dollyToCursor=s.dollyToCursor,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),k.setFromVector3(w.fromArray(s.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(k.theta,k.phi,t),this.dollyTo(k.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),n=this._boundary.clampPoint(r,G).sub(r),l=n.lengthSq();if(l===0)return e.add(t);if(l===i)return e;if(s===0)return e.add(t).add(n);{const d=1+s*l/t.dot(n);return e.add(P.copy(t).multiplyScalar(d)).add(n.multiplyScalar(1-s))}}_updateNearPlaneCorners(){if(Y(this._camera)){const e=this._camera,t=e.near,s=e.getEffectiveFOV()*se,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(B(this._camera)){const e=this._camera,t=1/e.zoom,s=e.left*t,i=e.right*t,r=e.top*t,o=e.bottom*t;this._nearPlaneCorners[0].set(s,r,0),this._nearPlaneCorners[1].set(i,r,0),this._nearPlaneCorners[2].set(i,o,0),this._nearPlaneCorners[3].set(s,o,0)}}_collisionTest(){let e=1/0;if(!(this.colliderMeshes.length>=1)||Oe(this._camera,"_collisionTest"))return e;const s=this._getTargetDirection(oe);xe.lookAt(Ne,s,this._camera.up);for(let i=0;i<4;i++){const r=P.copy(this._nearPlaneCorners[i]);r.applyMatrix4(xe);const o=G.addVectors(this._target,r);de.set(o,s),de.far=this._spherical.radius+1;const n=de.intersectObjects(this.colliderMeshes);n.length!==0&&n[0].distance<e&&(e=n[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 b.Sphere){const s=t,i=s.center;K.makeEmpty(),e.traverseVisible(o=>{o.isMesh&&K.expandByObject(o)}),K.getCenter(i);let r=0;return e.traverseVisible(o=>{if(!o.isMesh)return;const n=o;if(!n.geometry)return;const l=n.geometry.clone();l.applyMatrix4(n.matrixWorld);const _=l.attributes.position;for(let p=0,E=_.count;p<E;p++)w.fromBufferAttribute(_,p),r=Math.max(r,i.distanceToSquared(w))}),s.radius=Math.sqrt(r),s}}var Se={exports:{}},$=typeof Reflect=="object"?Reflect:null,Ve=$&&typeof $.apply=="function"?$.apply:function(e,t,s){return Function.prototype.apply.call(e,t,s)},me;$&&typeof $.ownKeys=="function"?me=$.ownKeys:Object.getOwnPropertySymbols?me=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:me=function(e){return Object.getOwnPropertyNames(e)};function Ft(h){console&&console.warn&&console.warn(h)}var tt=Number.isNaN||function(e){return e!==e};function A(){A.init.call(this)}Se.exports=A;Se.exports.once=It;A.EventEmitter=A;A.prototype._events=void 0;A.prototype._eventsCount=0;A.prototype._maxListeners=void 0;var Ye=10;function _e(h){if(typeof h!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof h)}Object.defineProperty(A,"defaultMaxListeners",{enumerable:!0,get:function(){return Ye},set:function(h){if(typeof h!="number"||h<0||tt(h))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+h+".");Ye=h}});A.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};A.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||tt(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this};function st(h){return h._maxListeners===void 0?A.defaultMaxListeners:h._maxListeners}A.prototype.getMaxListeners=function(){return st(this)};A.prototype.emit=function(e){for(var t=[],s=1;s<arguments.length;s++)t.push(arguments[s]);var i=e==="error",r=this._events;if(r!==void 0)i=i&&r.error===void 0;else if(!i)return!1;if(i){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var n=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw n.context=o,n}var l=r[e];if(l===void 0)return!1;if(typeof l=="function")Ve(l,this,t);else for(var d=l.length,_=at(l,d),s=0;s<d;++s)Ve(_[s],this,t);return!0};function it(h,e,t,s){var i,r,o;if(_e(t),r=h._events,r===void 0?(r=h._events=Object.create(null),h._eventsCount=0):(r.newListener!==void 0&&(h.emit("newListener",e,t.listener?t.listener:t),r=h._events),o=r[e]),o===void 0)o=r[e]=t,++h._eventsCount;else if(typeof o=="function"?o=r[e]=s?[t,o]:[o,t]:s?o.unshift(t):o.push(t),i=st(h),i>0&&o.length>i&&!o.warned){o.warned=!0;var n=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");n.name="MaxListenersExceededWarning",n.emitter=h,n.type=e,n.count=o.length,Ft(n)}return h}A.prototype.addListener=function(e,t){return it(this,e,t,!1)};A.prototype.on=A.prototype.addListener;A.prototype.prependListener=function(e,t){return it(this,e,t,!0)};function Nt(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function rt(h,e,t){var s={fired:!1,wrapFn:void 0,target:h,type:e,listener:t},i=Nt.bind(s);return i.listener=t,s.wrapFn=i,i}A.prototype.once=function(e,t){return _e(t),this.on(e,rt(this,e,t)),this};A.prototype.prependOnceListener=function(e,t){return _e(t),this.prependListener(e,rt(this,e,t)),this};A.prototype.removeListener=function(e,t){var s,i,r,o,n;if(_e(t),i=this._events,i===void 0)return this;if(s=i[e],s===void 0)return this;if(s===t||s.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,s.listener||t));else if(typeof s!="function"){for(r=-1,o=s.length-1;o>=0;o--)if(s[o]===t||s[o].listener===t){n=s[o].listener,r=o;break}if(r<0)return this;r===0?s.shift():jt(s,r),s.length===1&&(i[e]=s[0]),i.removeListener!==void 0&&this.emit("removeListener",e,n||t)}return this};A.prototype.off=A.prototype.removeListener;A.prototype.removeAllListeners=function(e){var t,s,i;if(s=this._events,s===void 0)return this;if(s.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):s[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete s[e]),this;if(arguments.length===0){var r=Object.keys(s),o;for(i=0;i<r.length;++i)o=r[i],o!=="removeListener"&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=s[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this};function ot(h,e,t){var s=h._events;if(s===void 0)return[];var i=s[e];return i===void 0?[]:typeof i=="function"?t?[i.listener||i]:[i]:t?Ht(i):at(i,i.length)}A.prototype.listeners=function(e){return ot(this,e,!0)};A.prototype.rawListeners=function(e){return ot(this,e,!1)};A.listenerCount=function(h,e){return typeof h.listenerCount=="function"?h.listenerCount(e):nt.call(h,e)};A.prototype.listenerCount=nt;function nt(h){var e=this._events;if(e!==void 0){var t=e[h];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}A.prototype.eventNames=function(){return this._eventsCount>0?me(this._events):[]};function at(h,e){for(var t=new Array(e),s=0;s<e;++s)t[s]=h[s];return t}function jt(h,e){for(;e+1<h.length;e++)h[e]=h[e+1];h.pop()}function Ht(h){for(var e=new Array(h.length),t=0;t<e.length;++t)e[t]=h[t].listener||h[t];return e}function It(h,e){return new Promise(function(t,s){function i(o){h.removeListener(e,r),s(o)}function r(){typeof h.removeListener=="function"&&h.removeListener("error",i),t([].slice.call(arguments))}lt(h,e,r,{once:!0}),e!=="error"&&Bt(h,i,{once:!0})})}function Bt(h,e,t){typeof h.on=="function"&&lt(h,"error",e,t)}function lt(h,e,t,s){if(typeof h.on=="function")s.once?h.once(e,t):h.on(e,t);else if(typeof h.addEventListener=="function")h.addEventListener(e,function i(r){s.once&&h.removeEventListener(e,i),t(r)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof h)}var ge=Se.exports;const Vt={antialias:!1,devicePixelRatio:window.devicePixelRatio,powerPreference:"high-performance",toneMappingExposure:1,alpha:!1,outputColorSpace:Pe.ColorSpace.sRGB,logarithmicDepthBuffer:!1,preserveDrawingBuffer:!1,stencil:!1,depth:!1};class Yt{constructor(e){this.options=e;const{width:t,height:s,rendererParams:i}=e,{alpha:r,devicePixelRatio:o,antialias:n,powerPreference:l,toneMappingExposure:d,outputColorSpace:_,logarithmicDepthBuffer:p,preserveDrawingBuffer:E,stencil:v,depth:m}=i,u=new y.WebGLRenderer({alpha:r,antialias:n,powerPreference:l,logarithmicDepthBuffer:p,preserveDrawingBuffer:E,stencil:v,depth:m});u.setSize(t,s),u.setPixelRatio(o),u.toneMappingExposure=d,u.outputColorSpace=_,this.renderer=u}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,o=(l=e.scissor)!=null?l:!1,n=(d=e.scissorTest)!=null?d:!1;this.renderer.setViewport(t,s,i,r),o&&(this.renderer.setScissor(t,s,i,r),this.renderer.setScissorTest(n))}setViewPadding(e=0,t=0,s=0,i=0){const{width:r,height:o}=this.renderer.getSize(new y.Vector2),n={x:i,y:s,width:r-i-t,height:o-e-s};this.setViewport(n)}dispose(){var e,t;this.setSize(1,1),(e=this.renderer)==null||e.clear(),(t=this.renderer)==null||t.dispose()}}const Zt={antialias:!0,devicePixelRatio:window.devicePixelRatio};class qt{constructor(e){this.options=e;const{width:t,height:s,rendererParams:i,renderer:r}=e,{devicePixelRatio:o,antialias:n}=i,l=new r({antialias:n});l.setSize(t,s),l.setPixelRatio(o),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()}}let Wt=class{constructor(){this.mask=1}set(e){this.mask=(1<<e|0)>>>0}enable(e){this.mask|=1<<e|0}enableAll(){this.mask=-1}toggle(e){this.mask^=1<<e|0}disable(e){this.mask&=~(1<<e|0)}disableAll(){this.mask=0}isEnabled(e){return(this.mask&(1<<e|0))!==0}};class J{constructor(){this.event=new ge.EventEmitter,this.controllerMap=new Map,this.activeIndex=-1,this.activeControllerSet=new Set}addController(e,t){const s=new Wt;return s.disableAll(),t!==void 0&&s.set(t),this.controllerMap.set(e,s),t===this.activeIndex&&this.activeControllerSet.add(e),e}removePage(e,t){this.controllerMap.forEach((s,i)=>{s.isEnabled(e)&&(s.disable(e),s.mask===0&&(t==null||t(i),this.controllerMap.delete(i),this.activeControllerSet.delete(i)))})}setPageActive(e,t){this.activeIndex=e,this.activeControllerSet.clear(),this.controller=(Array.from(this.controllerMap.entries()).find(([s,i])=>{const r=i.isEnabled(e);return r&&this.activeControllerSet.add(s),t==null||t(s,r),r})||[])[0],this.event.emit("pageChange",this.controller)}update(e,t){this.activeControllerSet.forEach(s=>{var i;(i=s.update)==null||i.call(s,e,t)})}dispose(){this.controllerMap.forEach((e,t)=>{e.set(0)}),this.removePage(0),this.controllerMap.clear(),this.event.removeAllListeners(),this.activeControllerSet.clear()}}const ht={fov:45,near:1,far:1e3,up:new y.Vector3(0,1,0)};class Gt extends J{constructor(e){super(),this.width=0,this.height=0,this.width=e.width,this.height=e.height}get camera(){return this.controller}addPerspectiveCamera(e=ht,t){const{fov:s,far:i,near:r,up:o,aspect:n}=e,l=n!=null?n:this.width/this.height,d=new y.PerspectiveCamera(s,l,r,i);return d.up=o,this.addController(d,t)}setPageActive(e){super.setPageActive(e,(t,s)=>{s&&this.setAspect(this.width/this.height,t)})}setSize(e,t){this.width=e,this.height=t,this.setAspect(e/t)}setAspect(e,t){const s=t||this.camera;s.aspect!==e&&(s.aspect=e,s.updateProjectionMatrix())}cloneCamera(e){const t=this.addPerspectiveCamera({fov:this.camera.fov,aspect:this.camera.aspect,near:this.camera.near,far:this.camera.far,up:this.camera.up},e);return t.position.copy(this.camera.position),t}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 y.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]),o=new y.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:n,height:l}=this,d=n/l;(this.camera.fov!==t.fov||this.camera.aspect!==d||!this.camera.matrixWorld.equals(r)||!this.camera.matrixWorldInverse.equals(o))&&(this.camera.fov=t.fov,this.camera.updateProjectionMatrix(),this.camera.matrixAutoUpdate=!1,this.camera.matrixWorld.copy(r),this.camera.matrixWorldInverse.copy(o),this.camera.aspect=d,this.camera.updateProjectionMatrix())}}}const Kt={background:null};class Xt extends J{get scene(){return this.controller}constructor(e){super(),this.options=e}addScene(e,t){const s=new y.Scene;return e!=null&&e.background&&(s.background=e.background),this.addController(s,t)}removePage(e){super.removePage(e,t=>{const s=new I.ResourceTracker;s.track(t),s.dispose()})}setPageActive(e){super.setPageActive(e,(t,s)=>{t.visible=s})}}class $t{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 y.AxesHelper(100);else if(e.isCamera)i=new y.CameraHelper(e);else if(e.isPointLight)i=new y.PointLightHelper(e,1);else if(e.isDirectionalLight)i=new y.DirectionalLightHelper(e,1);else if(e.isSpotLight)i=new y.SpotLightHelper(e);else if(e.isHemisphereLight)i=new y.HemisphereLightHelper(e,10);else if(e.isRectAreaLight)i=new Tt.RectAreaLightHelper(e);else{const r=new y.Box3;if(r.setFromObject(e,!0),r.isEmpty()===!1){i=new y.Box3Helper(r);const o=i.material;o.userData.object=e,o.depthTest=!1,o.transparent=!0}else return}s.scene.add(i),this.helpers[t]=i}}addViewHelper(){const{cameraController:e,container:t}=this.options,s=new bt.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 y.AxesHelper||this.remove({uuid:e})})}update(e,t,s){var r,o;const{cameraController:i}=this.options;Object.values(this.helpers).forEach(n=>{if(n.update&&n.update(),n instanceof y.Box3Helper){const l=n.material,{object:d}=l.userData;d&&n.box.setFromObject(d,!0)}}),((r=this.viewHelper)==null?void 0:r.animating)===!0&&(this.viewHelper.update(e),(o=t.cameraControls)==null||o.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 Qt extends J{constructor(e){super(),this.autoRotateSpeed=0,this.options=e;const t={Vector2:y.Vector2,Vector3:y.Vector3,Vector4:y.Vector4,Quaternion:y.Quaternion,Matrix4:y.Matrix4,Spherical:y.Spherical,Box3:y.Box3,Sphere:y.Sphere,Raycaster:y.Raycaster};Q.install({THREE:t})}get cameraControls(){return this.controller}addCameraControls(e,t){const{domElement:s}=this.options.controlsParams,i=new Q(e,s);return i.setLookAt(0,0,400,0,0,0,!1),this.addController(i,t)}setPageActive(e){super.setPageActive(e,(t,s)=>{t.enabled=s})}removePage(e){super.removePage(e,t=>{t.dispose()})}enable(){this.activeControllerSet.forEach(e=>{e.enabled=!0})}disable(){this.activeControllerSet.forEach(e=>{e.enabled=!1})}update(e,t){super.update(e,t),this.autoRotateSpeed&&this.cameraControls&&(this.cameraControls.azimuthAngle+=this.autoRotateSpeed*e*y.MathUtils.DEG2RAD)}}class Jt{constructor(e){this.event=new ge.EventEmitter;const{renderer:t,scene:s,camera:i}=e,r=new xt.TransformControls(i,t.domElement);if(r.getHelper){const o=r.getHelper();if(s.add(o),+y.REVISION<170){const n=r._root;n.dispose=()=>{n.traverse(l=>{l.geometry&&l.geometry.dispose(),l.material&&l.material.dispose()})},r.dispose=()=>{r.disconnect(),n.dispose()}}}else r instanceof y.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 Ze=new y.Vector3,es=new y.Quaternion,qe=new y.Vector3,H=new y.Matrix4,ts=new y.Matrix4;class ss{constructor(e={}){const t=this;let s,i,r,o;const n={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 _=document.createElement("div");_.style.transformStyle="preserve-3d",d.appendChild(_),this.getSize=function(){return{width:s,height:i}},this.render=function(f,a){const g=a.projectionMatrix.elements[5]*o;a.view&&a.view.enabled?(d.style.transform=`translate( ${-a.view.offsetX*(s/a.view.width)}px, ${-a.view.offsetY*(i/a.view.height)}px )`,d.style.transform+=`scale( ${a.view.fullWidth/a.view.width}, ${a.view.fullHeight/a.view.height} )`):d.style.transform="",f.matrixWorldAutoUpdate===!0&&f.updateMatrixWorld(),a.parent===null&&a.matrixWorldAutoUpdate===!0&&a.updateMatrixWorld();let O,C;a.isOrthographicCamera&&(O=-(a.right+a.left)/2,C=(a.top+a.bottom)/2);const x=a.view&&a.view.enabled?a.view.height/a.view.fullHeight:1,T=a.isOrthographicCamera?`scale( ${x} )scale(`+g+")translate("+p(O)+"px,"+p(C)+"px)"+E(a.matrixWorldInverse):`scale( ${x} )translateZ(`+g+"px)"+E(a.matrixWorldInverse),D=(a.isPerspectiveCamera?"perspective("+g+"px) ":"")+T+"translate("+r+"px,"+o+"px)";n.camera.style!==D&&(_.style.transform=D,n.camera.style=D),u(f,f,a)},this.setSize=function(f,a){s=f,i=a,r=s/2,o=i/2,l.style.width=f+"px",l.style.height=a+"px",d.style.width=f+"px",d.style.height=a+"px",_.style.width=f+"px",_.style.height=a+"px"};function p(f){return Math.abs(f)<1e-10?0:f}function E(f){const a=f.elements;return"matrix3d("+p(a[0])+","+p(-a[1])+","+p(a[2])+","+p(a[3])+","+p(a[4])+","+p(-a[5])+","+p(a[6])+","+p(a[7])+","+p(a[8])+","+p(-a[9])+","+p(a[10])+","+p(a[11])+","+p(a[12])+","+p(-a[13])+","+p(a[14])+","+p(a[15])+")"}function v(f){const a=f.elements;return"translate(-50%,-50%)"+("matrix3d("+p(a[0])+","+p(a[1])+","+p(a[2])+","+p(a[3])+","+p(-a[4])+","+p(-a[5])+","+p(-a[6])+","+p(-a[7])+","+p(a[8])+","+p(a[9])+","+p(a[10])+","+p(a[11])+","+p(a[12])+","+p(a[13])+","+p(a[14])+","+p(a[15])+")")}function m(f){f.isCSS3DObject&&(f.element.style.display="none");for(let a=0,g=f.children.length;a<g;a++)m(f.children[a])}function u(f,a,g,O){if(f.visible===!1){m(f);return}if(f.isCSS3DObject){const C=f.layers.test(g.layers)===!0,x=f.element;if(x.style.display=C===!0?"":"none",C===!0){f.onBeforeRender(t,a,g);let T;f.isCSS3DSprite?(H.copy(g.matrixWorldInverse),H.transpose(),f.rotation2D!==0&&H.multiply(ts.makeRotationZ(f.rotation2D)),f.matrixWorld.decompose(Ze,es,qe),H.setPosition(Ze),H.scale(qe),H.elements[3]=0,H.elements[7]=0,H.elements[11]=0,H.elements[15]=1,T=v(H)):T=v(f.matrixWorld);const L=n.objects.get(f);if(L===void 0||L.style!==T){x.style.transform=T;const D={style:T};n.objects.set(f,D)}x.parentNode!==_&&_.appendChild(x),f.onAfterRender(t,a,g)}}for(let C=0,x=f.children.length;C<x;C++)u(f.children[C],a,g)}}}const X=new y.Vector3,We=new y.Matrix4,Ge=new y.Matrix4,Ke=new y.Vector3,Xe=new y.Vector3;class is{constructor(e={}){const t=this;let s,i,r,o;const n={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(m,u){m.matrixWorldAutoUpdate===!0&&m.updateMatrixWorld(),u.parent===null&&u.matrixWorldAutoUpdate===!0&&u.updateMatrixWorld(),We.copy(u.matrixWorldInverse),Ge.multiplyMatrices(u.projectionMatrix,We),_(m,m,u),v(m)},this.setSize=function(m,u){s=m,i=u,r=s/2,o=i/2,l.style.width=m+"px",l.style.height=u+"px"};function d(m){m.isCSS2DObject&&(m.element.style.display="none");for(let u=0,f=m.children.length;u<f;u++)d(m.children[u])}function _(m,u,f){if(m.visible===!1){d(m);return}if(m.isCSS2DObject){X.setFromMatrixPosition(m.matrixWorld),X.applyMatrix4(Ge);const a=X.z>=-1&&X.z<=1&&m.layers.test(f.layers)===!0,g=m.element;g.style.display=a===!0?"":"none",a===!0&&(m.onBeforeRender(t,u,f),g.style.transform="translate("+-100*m.center.x+"%,"+-100*m.center.y+"%)translate("+(X.x*r+r)+"px,"+(-X.y*o+o)+"px)",g.parentNode!==l&&l.appendChild(g),m.onAfterRender(t,u,f));const O={distanceToCameraSquared:p(f,m)};n.objects.set(m,O)}for(let a=0,g=m.children.length;a<g;a++)_(m.children[a],u,f)}function p(m,u){return Ke.setFromMatrixPosition(m.matrixWorld),Xe.setFromMatrixPosition(u.matrixWorld),Ke.distanceToSquared(Xe)}function E(m){const u=[];return m.traverseVisible(function(f){f.isCSS2DObject&&u.push(f)}),u}function v(m){const u=E(m).sort(function(a,g){if(a.renderOrder!==g.renderOrder)return g.renderOrder-a.renderOrder;const O=n.objects.get(a).distanceToCameraSquared,C=n.objects.get(g).distanceToCameraSquared;return O-C}),f=u.length;for(let a=0,g=u.length;a<g;a++)u[a].element.style.zIndex=f-a}}}const $e={zIndex:"auto"};class rs{constructor(e){this.container=e}addRenderer(e,t){const s=t.container||this.container,i=s.offsetWidth,r=s.offsetHeight,o=e==="css2d"?new is:new ss;o.domElement.style.position="absolute",o.domElement.style.top="0",o.domElement.style.pointerEvents="none",o.domElement.style.zIndex=t.zIndex,o.setSize(i,r),s.appendChild(o.domElement),e==="css2d"?this.css2Drenderer=o:e==="css3d"&&(this.css3Drenderer=o)}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}}const os={name:"OutputShader",uniforms:{tDiffuse:{value:null},toneMappingExposure:{value:1},premultiplieAlpha:{value:0}},vertexShader:`
1
+ "use strict";var ut=Object.defineProperty,ft=Object.defineProperties;var _t=Object.getOwnPropertyDescriptors;var Ae=Object.getOwnPropertySymbols;var gt=Object.prototype.hasOwnProperty,yt=Object.prototype.propertyIsEnumerable;var Me=(h,e,t)=>e in h?ut(h,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):h[e]=t,z=(h,e)=>{for(var t in e||(e={}))gt.call(e,t)&&Me(h,t,e[t]);if(Ae)for(var t of Ae(e))yt.call(e,t)&&Me(h,t,e[t]);return h},ee=(h,e)=>ft(h,_t(e));var te=(h,e,t)=>new Promise((s,i)=>{var r=l=>{try{n(t.next(l))}catch(d){i(d)}},o=l=>{try{n(t.throw(l))}catch(d){i(d)}},n=l=>l.done?s(l.value):Promise.resolve(l.value).then(r,o);n((t=t.apply(h,e)).next())});Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const v=require("three"),vt=require("three/examples/jsm/misc/Timer"),Ct=require("@tweenjs/tween.js"),Ot=require("deepmerge"),Et=require("stats-gl"),Pe=require("./isPlainObject.js"),I=require("./index2.js"),Tt=require("three/examples/jsm/helpers/RectAreaLightHelper"),bt=require("three/examples/jsm/helpers/ViewHelper"),xt=require("three/examples/jsm/controls/TransformControls"),Re=require("three/examples/jsm/postprocessing/EffectComposer"),wt=require("three/examples/jsm/postprocessing/RenderPass"),Lt=require("three/examples/jsm/postprocessing/SSAOPass"),De=require("three/examples/jsm/postprocessing/Pass"),Pt=require("three/examples/jsm/postprocessing/OutputPass"),St=require("three/examples/jsm/postprocessing/ShaderPass"),At=require("three/examples/jsm/postprocessing/UnrealBloomPass");require("three/examples/jsm/renderers/CSS2DRenderer");require("three/examples/jsm/renderers/CSS3DRenderer");require("d3-geo");require("d3-geo-projection");require("three/examples/jsm/lights/RectAreaLightUniformsLib");require("three/examples/jsm/utils/BufferGeometryUtils");require("three/examples/jsm/lines/LineSegments2");require("three/examples/jsm/lines/LineSegmentsGeometry");require("three/examples/jsm/lines/LineMaterial");require("three-bvh-csg");const Ue=require("three/examples/jsm/loaders/GLTFLoader"),Mt=require("three/examples/jsm/loaders/DRACOLoader"),Rt=require("three/examples/jsm/loaders/EXRLoader"),Dt=require("three/examples/jsm/loaders/LottieLoader"),Le=require("esus-lite");function Ut(h){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(h){for(const t in h)if(t!=="default"){const s=Object.getOwnPropertyDescriptor(h,t);Object.defineProperty(e,t,s.get?s:{enumerable:!0,get:()=>h[t]})}}return e.default=h,Object.freeze(e)}const ve=Ut(Ct),R={LEFT:1,RIGHT:2,MIDDLE:4},c=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,SCREEN_PAN:65536,TOUCH_SCREEN_PAN:131072,TOUCH_DOLLY_SCREEN_PAN:262144,TOUCH_ZOOM_SCREEN_PAN:524288}),q={NONE:0,IN:1,OUT:-1};function Y(h){return h.isPerspectiveCamera}function B(h){return h.isOrthographicCamera}const W=Math.PI*2,ze=Math.PI/2,et=1e-5,se=Math.PI/180;function F(h,e,t){return Math.max(e,Math.min(t,h))}function M(h,e=et){return Math.abs(h)<e}function S(h,e,t=et){return M(h-e,t)}function ke(h,e){return Math.round(h/e)*e}function ie(h){return isFinite(h)?h:h<0?-Number.MAX_VALUE:Number.MAX_VALUE}function re(h){return Math.abs(h)<Number.MAX_VALUE?h:h*(1/0)}function le(h,e,t,s,i=1/0,r){s=Math.max(1e-4,s);const o=2/s,n=o*r,l=1/(1+n+.48*n*n+.235*n*n*n);let d=h-e;const _=e,p=i*s;d=F(d,-p,p),e=h-d;const E=(t.value+o*d)*r;t.value=(t.value-o*E)*l;let y=e+(d+E)*l;return _-h>0==y>_&&(y=_,t.value=(y-_)/r),y}function Fe(h,e,t,s,i=1/0,r,o){s=Math.max(1e-4,s);const n=2/s,l=n*r,d=1/(1+l+.48*l*l+.235*l*l*l);let _=e.x,p=e.y,E=e.z,y=h.x-_,m=h.y-p,u=h.z-E;const f=_,a=p,g=E,O=i*s,C=O*O,x=y*y+m*m+u*u;if(x>C){const ye=Math.sqrt(x);y=y/ye*O,m=m/ye*O,u=u/ye*O}_=h.x-y,p=h.y-m,E=h.z-u;const T=(t.x+n*y)*r,L=(t.y+n*m)*r,D=(t.z+n*u)*r;t.x=(t.x-n*T)*d,t.y=(t.y-n*L)*d,t.z=(t.z-n*D)*d,o.x=_+(y+T)*d,o.y=p+(m+L)*d,o.z=E+(u+D)*d;const V=f-h.x,ae=a-h.y,ct=g-h.z,dt=o.x-f,pt=o.y-a,mt=o.z-g;return V*dt+ae*pt+ct*mt>0&&(o.x=f,o.y=a,o.z=g,t.x=(o.x-f)/r,t.y=(o.y-a)/r,t.z=(o.z-g)/r),o}function Ce(h,e){e.set(0,0),h.forEach(t=>{e.x+=t.clientX,e.y+=t.clientY}),e.x/=h.length,e.y/=h.length}function Oe(h,e){return B(h)?(console.warn(`${e} is not supported in OrthographicCamera`),!0):!1}class zt{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,o=i.length;r<o;r++)i[r].call(this,e)}}}const he=1/8,kt=/Mac/.test(navigator.platform);let b,Ne,ce,Ee,U,w,P,G,oe,N,j,Z,je,He,k,ne,K,Ie,Te,Be,be,xe,de;class Q extends zt{static install(e){b=e.THREE,Ne=Object.freeze(new b.Vector3(0,0,0)),ce=Object.freeze(new b.Vector3(0,1,0)),Ee=Object.freeze(new b.Vector3(0,0,1)),U=new b.Vector2,w=new b.Vector3,P=new b.Vector3,G=new b.Vector3,oe=new b.Vector3,N=new b.Vector3,j=new b.Vector3,Z=new b.Vector3,je=new b.Vector3,He=new b.Vector3,k=new b.Spherical,ne=new b.Spherical,K=new b.Box3,Ie=new b.Box3,Te=new b.Sphere,Be=new b.Quaternion,be=new b.Quaternion,xe=new b.Matrix4,de=new b.Raycaster}static get ACTION(){return c}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.boundaryFriction=0,this.restThreshold=.01,this.colliderMeshes=[],this.cancel=()=>{},this._enabled=!0,this._state=c.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=q.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new b.Vector3,this._focalOffsetVelocity=new b.Vector3,this._zoomVelocity={value:0},this._truckInternal=(a,g,O,C)=>{let x,T;if(Y(this._camera)){const L=w.copy(this._camera.position).sub(this._target),D=this._camera.getEffectiveFOV()*se,V=L.length()*Math.tan(D*.5);x=this.truckSpeed*a*V/this._elementRect.height,T=this.truckSpeed*g*V/this._elementRect.height}else if(B(this._camera)){const L=this._camera;x=this.truckSpeed*a*(L.right-L.left)/L.zoom/this._elementRect.width,T=this.truckSpeed*g*(L.top-L.bottom)/L.zoom/this._elementRect.height}else return;C?(O?this.setFocalOffset(this._focalOffsetEnd.x+x,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(x,0,!0),this.forward(-T,!0)):O?this.setFocalOffset(this._focalOffsetEnd.x+x,this._focalOffsetEnd.y+T,this._focalOffsetEnd.z,!0):this.truck(x,T,!0)},this._rotateInternal=(a,g)=>{const O=W*this.azimuthRotateSpeed*a/this._elementRect.height,C=W*this.polarRotateSpeed*g/this._elementRect.height;this.rotate(O,C,!0)},this._dollyInternal=(a,g,O)=>{const C=Math.pow(.95,-a*this.dollySpeed),x=this._sphericalEnd.radius,T=this._sphericalEnd.radius*C,L=F(T,this.minDistance,this.maxDistance),D=L-T;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(T,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(D,!0),this._dollyToNoClamp(L,!0)):this._dollyToNoClamp(L,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?T:L)-x,this._dollyControlCoord.set(g,O)),this._lastDollyDirection=Math.sign(-a)},this._zoomInternal=(a,g,O)=>{const C=Math.pow(.95,a*this.dollySpeed),x=this._zoom,T=this._zoom*C;this.zoomTo(T,!0),this.dollyToCursor&&(this._changedZoom+=T-x,this._dollyControlCoord.set(g,O))},typeof b=="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 b.Quaternion().setFromUnitVectors(this._camera.up,ce),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=c.NONE,this._target=new b.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new b.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new b.Spherical().setFromVector3(w.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 b.Vector3,new b.Vector3,new b.Vector3,new b.Vector3],this._updateNearPlaneCorners(),this._boundary=new b.Box3(new b.Vector3(-1/0,-1/0,-1/0),new b.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 b.Vector2,this.mouseButtons={left:c.ROTATE,middle:c.DOLLY,right:c.TRUCK,wheel:Y(this._camera)?c.DOLLY:B(this._camera)?c.ZOOM:c.NONE},this.touches={one:c.TOUCH_ROTATE,two:Y(this._camera)?c.TOUCH_DOLLY_TRUCK:B(this._camera)?c.TOUCH_ZOOM_TRUCK:c.NONE,three:c.TOUCH_TRUCK};const s=new b.Vector2,i=new b.Vector2,r=new b.Vector2,o=a=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const C=this._domElement.getBoundingClientRect(),x=(a.clientX-C.left)/(C.right-C.left),T=(a.clientY-C.top)/(C.bottom-C.top);if(x<this._interactiveArea.left||x>this._interactiveArea.right||T<this._interactiveArea.top||T>this._interactiveArea.bottom)return}const g=a.pointerType!=="mouse"?null:(a.buttons&R.LEFT)===R.LEFT?R.LEFT:(a.buttons&R.MIDDLE)===R.MIDDLE?R.MIDDLE:(a.buttons&R.RIGHT)===R.RIGHT?R.RIGHT:null;if(g!==null){const C=this._findPointerByMouseButton(g);C&&this._disposePointer(C)}if((a.buttons&R.LEFT)===R.LEFT&&this._lockedPointer)return;const O={pointerId:a.pointerId,clientX:a.clientX,clientY:a.clientY,deltaX:0,deltaY:0,mouseButton:g};this._activePointers.push(O),this._domElement.ownerDocument.removeEventListener("pointermove",n,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.addEventListener("pointermove",n,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),this._isDragging=!0,E(a)},n=a=>{a.cancelable&&a.preventDefault();const g=a.pointerId,O=this._lockedPointer||this._findPointerById(g);if(O){if(O.clientX=a.clientX,O.clientY=a.clientY,O.deltaX=a.movementX,O.deltaY=a.movementY,this._state=0,a.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&&(a.buttons&R.LEFT)===R.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(a.buttons&R.MIDDLE)===R.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(a.buttons&R.RIGHT)===R.RIGHT&&(this._state=this._state|this.mouseButtons.right);y()}},l=a=>{const g=this._findPointerById(a.pointerId);if(!(g&&g===this._lockedPointer)){if(g&&this._disposePointer(g),a.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=c.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=c.NONE;m()}};let d=-1;const _=a=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===c.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const T=this._domElement.getBoundingClientRect(),L=(a.clientX-T.left)/(T.right-T.left),D=(a.clientY-T.top)/(T.bottom-T.top);if(L<this._interactiveArea.left||L>this._interactiveArea.right||D<this._interactiveArea.top||D>this._interactiveArea.bottom)return}if(a.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===c.ROTATE||this.mouseButtons.wheel===c.TRUCK){const T=performance.now();d-T<1e3&&this._getClientRect(this._elementRect),d=T}const g=kt?-1:-3,O=a.deltaMode===1||a.ctrlKey?a.deltaY/g:a.deltaY/(g*10),C=this.dollyToCursor?(a.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,x=this.dollyToCursor?(a.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case c.ROTATE:{this._rotateInternal(a.deltaX,a.deltaY),this._isUserControllingRotate=!0;break}case c.TRUCK:{this._truckInternal(a.deltaX,a.deltaY,!1,!1),this._isUserControllingTruck=!0;break}case c.SCREEN_PAN:{this._truckInternal(a.deltaX,a.deltaY,!1,!0),this._isUserControllingTruck=!0;break}case c.OFFSET:{this._truckInternal(a.deltaX,a.deltaY,!0,!1),this._isUserControllingOffset=!0;break}case c.DOLLY:{this._dollyInternal(-O,C,x),this._isUserControllingDolly=!0;break}case c.ZOOM:{this._zoomInternal(-O,C,x),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},p=a=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===Q.ACTION.NONE){const g=a instanceof PointerEvent?a.pointerId:0,O=this._findPointerById(g);O&&this._disposePointer(O),this._domElement.ownerDocument.removeEventListener("pointermove",n,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l);return}a.preventDefault()}},E=a=>{if(!this._enabled)return;if(Ce(this._activePointers,U),this._getClientRect(this._elementRect),s.copy(U),i.copy(U),this._activePointers.length>=2){const O=U.x-this._activePointers[1].clientX,C=U.y-this._activePointers[1].clientY,x=Math.sqrt(O*O+C*C);r.set(0,x);const T=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,L=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;i.set(T,L)}if(this._state=0,!a)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in a&&a.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&&(a.buttons&R.LEFT)===R.LEFT&&(this._state=this._state|this.mouseButtons.left),(a.buttons&R.MIDDLE)===R.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(a.buttons&R.RIGHT)===R.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&c.ROTATE)===c.ROTATE||(this._state&c.TOUCH_ROTATE)===c.TOUCH_ROTATE||(this._state&c.TOUCH_DOLLY_ROTATE)===c.TOUCH_DOLLY_ROTATE||(this._state&c.TOUCH_ZOOM_ROTATE)===c.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&c.TRUCK)===c.TRUCK||(this._state&c.SCREEN_PAN)===c.SCREEN_PAN||(this._state&c.TOUCH_TRUCK)===c.TOUCH_TRUCK||(this._state&c.TOUCH_SCREEN_PAN)===c.TOUCH_SCREEN_PAN||(this._state&c.TOUCH_DOLLY_TRUCK)===c.TOUCH_DOLLY_TRUCK||(this._state&c.TOUCH_DOLLY_SCREEN_PAN)===c.TOUCH_DOLLY_SCREEN_PAN||(this._state&c.TOUCH_ZOOM_TRUCK)===c.TOUCH_ZOOM_TRUCK||(this._state&c.TOUCH_ZOOM_SCREEN_PAN)===c.TOUCH_DOLLY_SCREEN_PAN)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&c.DOLLY)===c.DOLLY||(this._state&c.TOUCH_DOLLY)===c.TOUCH_DOLLY||(this._state&c.TOUCH_DOLLY_TRUCK)===c.TOUCH_DOLLY_TRUCK||(this._state&c.TOUCH_DOLLY_SCREEN_PAN)===c.TOUCH_DOLLY_SCREEN_PAN||(this._state&c.TOUCH_DOLLY_OFFSET)===c.TOUCH_DOLLY_OFFSET||(this._state&c.TOUCH_DOLLY_ROTATE)===c.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&c.ZOOM)===c.ZOOM||(this._state&c.TOUCH_ZOOM)===c.TOUCH_ZOOM||(this._state&c.TOUCH_ZOOM_TRUCK)===c.TOUCH_ZOOM_TRUCK||(this._state&c.TOUCH_ZOOM_SCREEN_PAN)===c.TOUCH_ZOOM_SCREEN_PAN||(this._state&c.TOUCH_ZOOM_OFFSET)===c.TOUCH_ZOOM_OFFSET||(this._state&c.TOUCH_ZOOM_ROTATE)===c.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&c.OFFSET)===c.OFFSET||(this._state&c.TOUCH_OFFSET)===c.TOUCH_OFFSET||(this._state&c.TOUCH_DOLLY_OFFSET)===c.TOUCH_DOLLY_OFFSET||(this._state&c.TOUCH_ZOOM_OFFSET)===c.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},y=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,Ce(this._activePointers,U);const g=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,O=g?-g.deltaX:i.x-U.x,C=g?-g.deltaY:i.y-U.y;if(i.copy(U),((this._state&c.ROTATE)===c.ROTATE||(this._state&c.TOUCH_ROTATE)===c.TOUCH_ROTATE||(this._state&c.TOUCH_DOLLY_ROTATE)===c.TOUCH_DOLLY_ROTATE||(this._state&c.TOUCH_ZOOM_ROTATE)===c.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(O,C),this._isUserControllingRotate=!0),(this._state&c.DOLLY)===c.DOLLY||(this._state&c.ZOOM)===c.ZOOM){const x=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,T=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0,L=this.dollyDragInverted?-1:1;(this._state&c.DOLLY)===c.DOLLY?(this._dollyInternal(L*C*he,x,T),this._isUserControllingDolly=!0):(this._zoomInternal(L*C*he,x,T),this._isUserControllingZoom=!0)}if((this._state&c.TOUCH_DOLLY)===c.TOUCH_DOLLY||(this._state&c.TOUCH_ZOOM)===c.TOUCH_ZOOM||(this._state&c.TOUCH_DOLLY_TRUCK)===c.TOUCH_DOLLY_TRUCK||(this._state&c.TOUCH_ZOOM_TRUCK)===c.TOUCH_ZOOM_TRUCK||(this._state&c.TOUCH_DOLLY_SCREEN_PAN)===c.TOUCH_DOLLY_SCREEN_PAN||(this._state&c.TOUCH_ZOOM_SCREEN_PAN)===c.TOUCH_ZOOM_SCREEN_PAN||(this._state&c.TOUCH_DOLLY_OFFSET)===c.TOUCH_DOLLY_OFFSET||(this._state&c.TOUCH_ZOOM_OFFSET)===c.TOUCH_ZOOM_OFFSET||(this._state&c.TOUCH_DOLLY_ROTATE)===c.TOUCH_DOLLY_ROTATE||(this._state&c.TOUCH_ZOOM_ROTATE)===c.TOUCH_ZOOM_ROTATE){const x=U.x-this._activePointers[1].clientX,T=U.y-this._activePointers[1].clientY,L=Math.sqrt(x*x+T*T),D=r.y-L;r.set(0,L);const V=this.dollyToCursor?(i.x-this._elementRect.x)/this._elementRect.width*2-1:0,ae=this.dollyToCursor?(i.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&c.TOUCH_DOLLY)===c.TOUCH_DOLLY||(this._state&c.TOUCH_DOLLY_ROTATE)===c.TOUCH_DOLLY_ROTATE||(this._state&c.TOUCH_DOLLY_TRUCK)===c.TOUCH_DOLLY_TRUCK||(this._state&c.TOUCH_DOLLY_SCREEN_PAN)===c.TOUCH_DOLLY_SCREEN_PAN||(this._state&c.TOUCH_DOLLY_OFFSET)===c.TOUCH_DOLLY_OFFSET?(this._dollyInternal(D*he,V,ae),this._isUserControllingDolly=!0):(this._zoomInternal(D*he,V,ae),this._isUserControllingZoom=!0)}((this._state&c.TRUCK)===c.TRUCK||(this._state&c.TOUCH_TRUCK)===c.TOUCH_TRUCK||(this._state&c.TOUCH_DOLLY_TRUCK)===c.TOUCH_DOLLY_TRUCK||(this._state&c.TOUCH_ZOOM_TRUCK)===c.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(O,C,!1,!1),this._isUserControllingTruck=!0),((this._state&c.SCREEN_PAN)===c.SCREEN_PAN||(this._state&c.TOUCH_SCREEN_PAN)===c.TOUCH_SCREEN_PAN||(this._state&c.TOUCH_DOLLY_SCREEN_PAN)===c.TOUCH_DOLLY_SCREEN_PAN||(this._state&c.TOUCH_ZOOM_SCREEN_PAN)===c.TOUCH_ZOOM_SCREEN_PAN)&&(this._truckInternal(O,C,!1,!0),this._isUserControllingTruck=!0),((this._state&c.OFFSET)===c.OFFSET||(this._state&c.TOUCH_OFFSET)===c.TOUCH_OFFSET||(this._state&c.TOUCH_DOLLY_OFFSET)===c.TOUCH_DOLLY_OFFSET||(this._state&c.TOUCH_ZOOM_OFFSET)===c.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(O,C,!0,!1),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},m=()=>{Ce(this._activePointers,U),i.copy(U),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",n,{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",n,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",u),this._domElement.ownerDocument.addEventListener("pointerlockerror",f),this._domElement.ownerDocument.addEventListener("pointermove",n,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),E())},this.unlockPointer=()=>{var a,g,O;this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),(a=this._domElement)===null||a===void 0||a.ownerDocument.exitPointerLock(),(g=this._domElement)===null||g===void 0||g.ownerDocument.removeEventListener("pointerlockchange",u),(O=this._domElement)===null||O===void 0||O.ownerDocument.removeEventListener("pointerlockerror",f),this.cancel()};const u=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},f=()=>{this.unlockPointer()};this._addAllEventListeners=a=>{this._domElement=a,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",o),this._domElement.addEventListener("pointercancel",l),this._domElement.addEventListener("wheel",_,{passive:!1}),this._domElement.addEventListener("contextmenu",p)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",o),this._domElement.removeEventListener("pointercancel",l),this._domElement.removeEventListener("wheel",_,{passive:!1}),this._domElement.removeEventListener("contextmenu",p),this._domElement.ownerDocument.removeEventListener("pointermove",n,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.removeEventListener("pointerlockchange",u),this._domElement.ownerDocument.removeEventListener("pointerlockerror",f))},this.cancel=()=>{this._state!==c.NONE&&(this._state=c.NONE,this._activePointers.length=0,m())},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 o=!s||S(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&S(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(o)}dolly(e,t=!1){return this.dollyTo(this._sphericalEnd.radius-e,t)}dollyTo(e,t=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=q.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 o=this._collisionTest(),n=S(o,this._spherical.radius);if(!(s>e)&&n)return Promise.resolve();this._sphericalEnd.radius=Math.min(e,o)}else this._sphericalEnd.radius=e;this._needsUpdate=!0,t||(this._spherical.radius=this._sphericalEnd.radius);const r=!t||S(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(r)}dollyInFixed(e,t=!1){this._targetEnd.add(this._getCameraDirection(oe).multiplyScalar(e)),t||this._target.copy(this._targetEnd);const s=!t||S(this._target.x,this._targetEnd.x,this.restThreshold)&&S(this._target.y,this._targetEnd.y,this.restThreshold)&&S(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||S(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(),N.setFromMatrixColumn(this._camera.matrix,0),j.setFromMatrixColumn(this._camera.matrix,1),N.multiplyScalar(e),j.multiplyScalar(-t);const i=w.copy(N).add(j),r=P.copy(this._targetEnd).add(i);return this.moveTo(r.x,r.y,r.z,s)}forward(e,t=!1){w.setFromMatrixColumn(this._camera.matrix,0),w.crossVectors(this._camera.up,w),w.multiplyScalar(e);const s=P.copy(this._targetEnd).add(w);return this.moveTo(s.x,s.y,s.z,t)}elevate(e,t=!1){return w.copy(this._camera.up).multiplyScalar(e),this.moveTo(this._targetEnd.x+w.x,this._targetEnd.y+w.y,this._targetEnd.z+w.z,t)}moveTo(e,t,s,i=!1){this._isUserControllingTruck=!1;const r=w.set(e,t,s).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,r,this.boundaryFriction),this._needsUpdate=!0,i||this._target.copy(this._targetEnd);const o=!i||S(this._target.x,this._targetEnd.x,this.restThreshold)&&S(this._target.y,this._targetEnd.y,this.restThreshold)&&S(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(o)}lookInDirectionOf(e,t,s,i=!1){const n=w.set(e,t,s).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);return this.setPosition(n.x,n.y,n.z,i)}fitToBox(e,t,{cover:s=!1,paddingLeft:i=0,paddingRight:r=0,paddingBottom:o=0,paddingTop:n=0}={}){const l=[],d=e.isBox3?K.copy(e):K.setFromObject(e);d.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const _=ke(this._sphericalEnd.theta,ze),p=ke(this._sphericalEnd.phi,ze);l.push(this.rotateTo(_,p,t));const E=w.setFromSpherical(this._sphericalEnd).normalize(),y=Be.setFromUnitVectors(E,Ee),m=S(Math.abs(E.y),1);m&&y.multiply(be.setFromAxisAngle(ce,_)),y.multiply(this._yAxisUpSpaceInverse);const u=Ie.makeEmpty();P.copy(d.min).applyQuaternion(y),u.expandByPoint(P),P.copy(d.min).setX(d.max.x).applyQuaternion(y),u.expandByPoint(P),P.copy(d.min).setY(d.max.y).applyQuaternion(y),u.expandByPoint(P),P.copy(d.max).setZ(d.min.z).applyQuaternion(y),u.expandByPoint(P),P.copy(d.min).setZ(d.max.z).applyQuaternion(y),u.expandByPoint(P),P.copy(d.max).setY(d.min.y).applyQuaternion(y),u.expandByPoint(P),P.copy(d.max).setX(d.min.x).applyQuaternion(y),u.expandByPoint(P),P.copy(d.max).applyQuaternion(y),u.expandByPoint(P),u.min.x-=i,u.min.y-=o,u.max.x+=r,u.max.y+=n,y.setFromUnitVectors(Ee,E),m&&y.premultiply(be.invert()),y.premultiply(this._yAxisUpSpace);const f=u.getSize(w),a=u.getCenter(P).applyQuaternion(y);if(Y(this._camera)){const g=this.getDistanceToFitBox(f.x,f.y,f.z,s);l.push(this.moveTo(a.x,a.y,a.z,t)),l.push(this.dollyTo(g,t)),l.push(this.setFocalOffset(0,0,0,t))}else if(B(this._camera)){const g=this._camera,O=g.right-g.left,C=g.top-g.bottom,x=s?Math.max(O/f.x,C/f.y):Math.min(O/f.x,C/f.y);l.push(this.moveTo(a.x,a.y,a.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?Q.createBoundingSphere(e,Te):Te.copy(e);if(s.push(this.moveTo(r.center.x,r.center.y,r.center.z,t)),Y(this._camera)){const o=this.getDistanceToFitSphere(r.radius);s.push(this.dollyTo(o,t))}else if(B(this._camera)){const o=this._camera.right-this._camera.left,n=this._camera.top-this._camera.bottom,l=2*r.radius,d=Math.min(o/l,n/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,o,n=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=q.NONE,this._changedDolly=0;const l=P.set(i,r,o),d=w.set(e,t,s);this._targetEnd.copy(l),this._sphericalEnd.setFromVector3(d.sub(l).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,n||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const _=!n||S(this._target.x,this._targetEnd.x,this.restThreshold)&&S(this._target.y,this._targetEnd.y,this.restThreshold)&&S(this._target.z,this._targetEnd.z,this.restThreshold)&&S(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&S(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&S(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(_)}lerpLookAt(e,t,s,i,r,o,n,l,d,_,p,E,y,m=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=q.NONE,this._changedDolly=0;const u=w.set(i,r,o),f=P.set(e,t,s);k.setFromVector3(f.sub(u).applyQuaternion(this._yAxisUpSpace));const a=G.set(_,p,E),g=P.set(n,l,d);ne.setFromVector3(g.sub(a).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(u.lerp(a,y));const O=ne.theta-k.theta,C=ne.phi-k.phi,x=ne.radius-k.radius;this._sphericalEnd.set(k.radius+x*y,k.phi+C*y,k.theta+O*y),this.normalizeRotations(),this._needsUpdate=!0,m||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const T=!m||S(this._target.x,this._targetEnd.x,this.restThreshold)&&S(this._target.y,this._targetEnd.y,this.restThreshold)&&S(this._target.z,this._targetEnd.z,this.restThreshold)&&S(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&S(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&S(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(T)}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(w),o=this.setLookAt(r.x,r.y,r.z,e,t,s,i);return this._sphericalEnd.phi=F(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),o}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||S(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&S(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&S(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(r)}setOrbitPoint(e,t,s){this._camera.updateMatrixWorld(),N.setFromMatrixColumn(this._camera.matrixWorldInverse,0),j.setFromMatrixColumn(this._camera.matrixWorldInverse,1),Z.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const i=w.set(e,t,s),r=i.distanceTo(this._camera.position),o=i.sub(this._camera.position);N.multiplyScalar(o.x),j.multiplyScalar(o.y),Z.multiplyScalar(o.z),w.copy(N).add(j).add(Z),w.z=w.z+r,this.dollyTo(r,!1),this.setFocalOffset(-w.x,w.y,-w.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 b.Vector4,typeof e=="number"?this._viewport.set(e,t,s,i):this._viewport.copy(e)}getDistanceToFitBox(e,t,s,i=!1){if(Oe(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const r=e/t,o=this._camera.getEffectiveFOV()*se,n=this._camera.aspect;return((i?r>n:r<n)?t:e/n)*.5/Math.tan(o*.5)+s*.5}getDistanceToFitSphere(e){if(Oe(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const t=this._camera.getEffectiveFOV()*se,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 b.Vector3).copy(t?this._targetEnd:this._target)}getPosition(e,t=!0){return(e&&e.isVector3?e:new b.Vector3).setFromSpherical(t?this._sphericalEnd:this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(t?this._targetEnd:this._target)}getSpherical(e,t=!0){return(e||new b.Spherical).copy(t?this._sphericalEnd:this._spherical)}getFocalOffset(e,t=!0){return(e&&e.isVector3?e:new b.Vector3).copy(t?this._focalOffsetEnd:this._focalOffset)}normalizeRotations(){this._sphericalEnd.theta=this._sphericalEnd.theta%W,this._sphericalEnd.theta<0&&(this._sphericalEnd.theta+=W),this._spherical.theta+=W*Math.round((this._sphericalEnd.theta-this._spherical.theta)/W)}stop(){this._focalOffset.copy(this._focalOffsetEnd),this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd),this._zoom=this._zoomEnd}reset(e=!1){if(!S(this._camera.up.x,this._cameraUp0.x)||!S(this._camera.up.y,this._cameraUp0.y)||!S(this._camera.up.z,this._cameraUp0.z)){this._camera.up.copy(this._cameraUp0);const s=this.getPosition(w);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,ce),this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert()}applyCameraUp(){const e=w.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(w);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=je.subVectors(this._targetEnd,this._target),o=He.subVectors(this._focalOffsetEnd,this._focalOffset),n=this._zoomEnd-this._zoom;if(M(t))this._thetaVelocity.value=0,this._spherical.theta=this._sphericalEnd.theta;else{const p=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.theta=le(this._spherical.theta,this._sphericalEnd.theta,this._thetaVelocity,p,1/0,e),this._needsUpdate=!0}if(M(s))this._phiVelocity.value=0,this._spherical.phi=this._sphericalEnd.phi;else{const p=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.phi=le(this._spherical.phi,this._sphericalEnd.phi,this._phiVelocity,p,1/0,e),this._needsUpdate=!0}if(M(i))this._radiusVelocity.value=0,this._spherical.radius=this._sphericalEnd.radius;else{const p=this._isUserControllingDolly?this.draggingSmoothTime:this.smoothTime;this._spherical.radius=le(this._spherical.radius,this._sphericalEnd.radius,this._radiusVelocity,p,this.maxSpeed,e),this._needsUpdate=!0}if(M(r.x)&&M(r.y)&&M(r.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const p=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;Fe(this._target,this._targetEnd,this._targetVelocity,p,this.maxSpeed,e,this._target),this._needsUpdate=!0}if(M(o.x)&&M(o.y)&&M(o.z))this._focalOffsetVelocity.set(0,0,0),this._focalOffset.copy(this._focalOffsetEnd);else{const p=this._isUserControllingOffset?this.draggingSmoothTime:this.smoothTime;Fe(this._focalOffset,this._focalOffsetEnd,this._focalOffsetVelocity,p,this.maxSpeed,e,this._focalOffset),this._needsUpdate=!0}if(M(n))this._zoomVelocity.value=0,this._zoom=this._zoomEnd;else{const p=this._isUserControllingZoom?this.draggingSmoothTime:this.smoothTime;this._zoom=le(this._zoom,this._zoomEnd,this._zoomVelocity,p,1/0,e)}if(this.dollyToCursor){if(Y(this._camera)&&this._changedDolly!==0){const p=this._spherical.radius-this._lastDistance,E=this._camera,y=this._getCameraDirection(oe),m=w.copy(y).cross(E.up).normalize();m.lengthSq()===0&&(m.x=1);const u=P.crossVectors(m,y),f=this._sphericalEnd.radius*Math.tan(E.getEffectiveFOV()*se*.5),g=(this._sphericalEnd.radius-p-this._sphericalEnd.radius)/this._sphericalEnd.radius,O=G.copy(this._targetEnd).add(m.multiplyScalar(this._dollyControlCoord.x*f*E.aspect)).add(u.multiplyScalar(this._dollyControlCoord.y*f)),C=w.copy(this._targetEnd).lerp(O,g),x=this._lastDollyDirection===q.IN&&this._spherical.radius<=this.minDistance,T=this._lastDollyDirection===q.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(x||T)){this._sphericalEnd.radius-=p,this._spherical.radius-=p;const D=P.copy(y).multiplyScalar(-p);C.add(D)}this._boundary.clampPoint(C,C);const L=P.subVectors(C,this._targetEnd);this._targetEnd.copy(C),this._target.add(L),this._changedDolly-=p,M(this._changedDolly)&&(this._changedDolly=0)}else if(B(this._camera)&&this._changedZoom!==0){const p=this._zoom-this._lastZoom,E=this._camera,y=w.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(E.near+E.far)/(E.near-E.far)).unproject(E),m=P.set(0,0,-1).applyQuaternion(E.quaternion),u=G.copy(y).add(m.multiplyScalar(-y.dot(E.up))),a=-(this._zoom-p-this._zoom)/this._zoom,g=this._getCameraDirection(oe),O=this._targetEnd.dot(g),C=w.copy(this._targetEnd).lerp(u,a),x=C.dot(g),T=g.multiplyScalar(x-O);C.sub(T),this._boundary.clampPoint(C,C);const L=P.subVectors(C,this._targetEnd);this._targetEnd.copy(C),this._target.add(L),this._changedZoom-=p,M(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),(!M(this._focalOffset.x)||!M(this._focalOffset.y)||!M(this._focalOffset.z))&&(N.setFromMatrixColumn(this._camera.matrix,0),j.setFromMatrixColumn(this._camera.matrix,1),Z.setFromMatrixColumn(this._camera.matrix,2),N.multiplyScalar(this._focalOffset.x),j.multiplyScalar(-this._focalOffset.y),Z.multiplyScalar(this._focalOffset.z),w.copy(N).add(j).add(Z),this._camera.position.add(w),this._camera.updateMatrixWorld()),this._boundaryEnclosesCamera&&this._encloseToBoundary(this._camera.position.copy(this._target),w.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),1);const _=this._needsUpdate;return _&&!this._updatedLastTime?(this._hasRested=!1,this.dispatchEvent({type:"wake"}),this.dispatchEvent({type:"update"})):_?(this.dispatchEvent({type:"update"}),M(t,this.restThreshold)&&M(s,this.restThreshold)&&M(i,this.restThreshold)&&M(r.x,this.restThreshold)&&M(r.y,this.restThreshold)&&M(r.z,this.restThreshold)&&M(o.x,this.restThreshold)&&M(o.y,this.restThreshold)&&M(o.z,this.restThreshold)&&M(n,this.restThreshold)&&!this._hasRested&&(this._hasRested=!0,this.dispatchEvent({type:"rest"}))):!_&&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=_,this._needsUpdate=!1,_}toJSON(){return JSON.stringify({enabled:this._enabled,minDistance:this.minDistance,maxDistance:ie(this.maxDistance),minZoom:this.minZoom,maxZoom:ie(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:ie(this.maxPolarAngle),minAzimuthAngle:ie(this.minAzimuthAngle),maxAzimuthAngle:ie(this.maxAzimuthAngle),smoothTime:this.smoothTime,draggingSmoothTime:this.draggingSmoothTime,dollySpeed:this.dollySpeed,truckSpeed:this.truckSpeed,dollyToCursor:this.dollyToCursor,target:this._targetEnd.toArray(),position:w.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=re(s.maxDistance),this.minZoom=s.minZoom,this.maxZoom=re(s.maxZoom),this.minPolarAngle=s.minPolarAngle,this.maxPolarAngle=re(s.maxPolarAngle),this.minAzimuthAngle=re(s.minAzimuthAngle),this.maxAzimuthAngle=re(s.maxAzimuthAngle),this.smoothTime=s.smoothTime,this.draggingSmoothTime=s.draggingSmoothTime,this.dollySpeed=s.dollySpeed,this.truckSpeed=s.truckSpeed,this.dollyToCursor=s.dollyToCursor,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),k.setFromVector3(w.fromArray(s.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(k.theta,k.phi,t),this.dollyTo(k.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),n=this._boundary.clampPoint(r,G).sub(r),l=n.lengthSq();if(l===0)return e.add(t);if(l===i)return e;if(s===0)return e.add(t).add(n);{const d=1+s*l/t.dot(n);return e.add(P.copy(t).multiplyScalar(d)).add(n.multiplyScalar(1-s))}}_updateNearPlaneCorners(){if(Y(this._camera)){const e=this._camera,t=e.near,s=e.getEffectiveFOV()*se,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(B(this._camera)){const e=this._camera,t=1/e.zoom,s=e.left*t,i=e.right*t,r=e.top*t,o=e.bottom*t;this._nearPlaneCorners[0].set(s,r,0),this._nearPlaneCorners[1].set(i,r,0),this._nearPlaneCorners[2].set(i,o,0),this._nearPlaneCorners[3].set(s,o,0)}}_collisionTest(){let e=1/0;if(!(this.colliderMeshes.length>=1)||Oe(this._camera,"_collisionTest"))return e;const s=this._getTargetDirection(oe);xe.lookAt(Ne,s,this._camera.up);for(let i=0;i<4;i++){const r=P.copy(this._nearPlaneCorners[i]);r.applyMatrix4(xe);const o=G.addVectors(this._target,r);de.set(o,s),de.far=this._spherical.radius+1;const n=de.intersectObjects(this.colliderMeshes);n.length!==0&&n[0].distance<e&&(e=n[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 b.Sphere){const s=t,i=s.center;K.makeEmpty(),e.traverseVisible(o=>{o.isMesh&&K.expandByObject(o)}),K.getCenter(i);let r=0;return e.traverseVisible(o=>{if(!o.isMesh)return;const n=o;if(!n.geometry)return;const l=n.geometry.clone();l.applyMatrix4(n.matrixWorld);const _=l.attributes.position;for(let p=0,E=_.count;p<E;p++)w.fromBufferAttribute(_,p),r=Math.max(r,i.distanceToSquared(w))}),s.radius=Math.sqrt(r),s}}var Se={exports:{}},$=typeof Reflect=="object"?Reflect:null,Ve=$&&typeof $.apply=="function"?$.apply:function(e,t,s){return Function.prototype.apply.call(e,t,s)},me;$&&typeof $.ownKeys=="function"?me=$.ownKeys:Object.getOwnPropertySymbols?me=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:me=function(e){return Object.getOwnPropertyNames(e)};function Ft(h){console&&console.warn&&console.warn(h)}var tt=Number.isNaN||function(e){return e!==e};function A(){A.init.call(this)}Se.exports=A;Se.exports.once=It;A.EventEmitter=A;A.prototype._events=void 0;A.prototype._eventsCount=0;A.prototype._maxListeners=void 0;var Ye=10;function _e(h){if(typeof h!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof h)}Object.defineProperty(A,"defaultMaxListeners",{enumerable:!0,get:function(){return Ye},set:function(h){if(typeof h!="number"||h<0||tt(h))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+h+".");Ye=h}});A.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};A.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||tt(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this};function st(h){return h._maxListeners===void 0?A.defaultMaxListeners:h._maxListeners}A.prototype.getMaxListeners=function(){return st(this)};A.prototype.emit=function(e){for(var t=[],s=1;s<arguments.length;s++)t.push(arguments[s]);var i=e==="error",r=this._events;if(r!==void 0)i=i&&r.error===void 0;else if(!i)return!1;if(i){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var n=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw n.context=o,n}var l=r[e];if(l===void 0)return!1;if(typeof l=="function")Ve(l,this,t);else for(var d=l.length,_=at(l,d),s=0;s<d;++s)Ve(_[s],this,t);return!0};function it(h,e,t,s){var i,r,o;if(_e(t),r=h._events,r===void 0?(r=h._events=Object.create(null),h._eventsCount=0):(r.newListener!==void 0&&(h.emit("newListener",e,t.listener?t.listener:t),r=h._events),o=r[e]),o===void 0)o=r[e]=t,++h._eventsCount;else if(typeof o=="function"?o=r[e]=s?[t,o]:[o,t]:s?o.unshift(t):o.push(t),i=st(h),i>0&&o.length>i&&!o.warned){o.warned=!0;var n=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");n.name="MaxListenersExceededWarning",n.emitter=h,n.type=e,n.count=o.length,Ft(n)}return h}A.prototype.addListener=function(e,t){return it(this,e,t,!1)};A.prototype.on=A.prototype.addListener;A.prototype.prependListener=function(e,t){return it(this,e,t,!0)};function Nt(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function rt(h,e,t){var s={fired:!1,wrapFn:void 0,target:h,type:e,listener:t},i=Nt.bind(s);return i.listener=t,s.wrapFn=i,i}A.prototype.once=function(e,t){return _e(t),this.on(e,rt(this,e,t)),this};A.prototype.prependOnceListener=function(e,t){return _e(t),this.prependListener(e,rt(this,e,t)),this};A.prototype.removeListener=function(e,t){var s,i,r,o,n;if(_e(t),i=this._events,i===void 0)return this;if(s=i[e],s===void 0)return this;if(s===t||s.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,s.listener||t));else if(typeof s!="function"){for(r=-1,o=s.length-1;o>=0;o--)if(s[o]===t||s[o].listener===t){n=s[o].listener,r=o;break}if(r<0)return this;r===0?s.shift():jt(s,r),s.length===1&&(i[e]=s[0]),i.removeListener!==void 0&&this.emit("removeListener",e,n||t)}return this};A.prototype.off=A.prototype.removeListener;A.prototype.removeAllListeners=function(e){var t,s,i;if(s=this._events,s===void 0)return this;if(s.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):s[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete s[e]),this;if(arguments.length===0){var r=Object.keys(s),o;for(i=0;i<r.length;++i)o=r[i],o!=="removeListener"&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=s[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this};function ot(h,e,t){var s=h._events;if(s===void 0)return[];var i=s[e];return i===void 0?[]:typeof i=="function"?t?[i.listener||i]:[i]:t?Ht(i):at(i,i.length)}A.prototype.listeners=function(e){return ot(this,e,!0)};A.prototype.rawListeners=function(e){return ot(this,e,!1)};A.listenerCount=function(h,e){return typeof h.listenerCount=="function"?h.listenerCount(e):nt.call(h,e)};A.prototype.listenerCount=nt;function nt(h){var e=this._events;if(e!==void 0){var t=e[h];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}A.prototype.eventNames=function(){return this._eventsCount>0?me(this._events):[]};function at(h,e){for(var t=new Array(e),s=0;s<e;++s)t[s]=h[s];return t}function jt(h,e){for(;e+1<h.length;e++)h[e]=h[e+1];h.pop()}function Ht(h){for(var e=new Array(h.length),t=0;t<e.length;++t)e[t]=h[t].listener||h[t];return e}function It(h,e){return new Promise(function(t,s){function i(o){h.removeListener(e,r),s(o)}function r(){typeof h.removeListener=="function"&&h.removeListener("error",i),t([].slice.call(arguments))}lt(h,e,r,{once:!0}),e!=="error"&&Bt(h,i,{once:!0})})}function Bt(h,e,t){typeof h.on=="function"&&lt(h,"error",e,t)}function lt(h,e,t,s){if(typeof h.on=="function")s.once?h.once(e,t):h.on(e,t);else if(typeof h.addEventListener=="function")h.addEventListener(e,function i(r){s.once&&h.removeEventListener(e,i),t(r)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof h)}var ge=Se.exports;const Vt={antialias:!1,devicePixelRatio:window.devicePixelRatio,powerPreference:"high-performance",toneMappingExposure:1,alpha:!1,outputColorSpace:Pe.ColorSpace.sRGB,logarithmicDepthBuffer:!1,preserveDrawingBuffer:!1,stencil:!1,depth:!1};class Yt{constructor(e){this.options=e;const{width:t,height:s,rendererParams:i}=e,{alpha:r,devicePixelRatio:o,antialias:n,powerPreference:l,toneMappingExposure:d,outputColorSpace:_,logarithmicDepthBuffer:p,preserveDrawingBuffer:E,stencil:y,depth:m}=i,u=new v.WebGLRenderer({alpha:r,antialias:n,powerPreference:l,logarithmicDepthBuffer:p,preserveDrawingBuffer:E,stencil:y,depth:m});u.setSize(t,s),u.setPixelRatio(o),u.toneMappingExposure=d,u.outputColorSpace=_,this.renderer=u}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,o=(l=e.scissor)!=null?l:!1,n=(d=e.scissorTest)!=null?d:!1;this.renderer.setViewport(t,s,i,r),o&&(this.renderer.setScissor(t,s,i,r),this.renderer.setScissorTest(n))}setViewPadding(e=0,t=0,s=0,i=0){const{width:r,height:o}=this.renderer.getSize(new v.Vector2),n={x:i,y:s,width:r-i-t,height:o-e-s};this.setViewport(n)}dispose(){var e,t;this.setSize(1,1),(e=this.renderer)==null||e.clear(),(t=this.renderer)==null||t.dispose()}}const Zt={antialias:!0,devicePixelRatio:window.devicePixelRatio};class qt{constructor(e){this.options=e;const{width:t,height:s,rendererParams:i,renderer:r}=e,{devicePixelRatio:o,antialias:n}=i,l=new r({antialias:n});l.setSize(t,s),l.setPixelRatio(o),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()}}let Wt=class{constructor(){this.mask=1}set(e){this.mask=(1<<e|0)>>>0}enable(e){this.mask|=1<<e|0}enableAll(){this.mask=-1}toggle(e){this.mask^=1<<e|0}disable(e){this.mask&=~(1<<e|0)}disableAll(){this.mask=0}isEnabled(e){return(this.mask&(1<<e|0))!==0}};class J{constructor(){this.event=new ge.EventEmitter,this.controllerMap=new Map,this.activeIndex=-1,this.activeControllerSet=new Set}addController(e,t){const s=new Wt;return s.disableAll(),t!==void 0&&s.set(t),this.controllerMap.set(e,s),t===this.activeIndex&&this.activeControllerSet.add(e),e}removePage(e,t){this.controllerMap.forEach((s,i)=>{s.isEnabled(e)&&(s.disable(e),s.mask===0&&(t==null||t(i),this.controllerMap.delete(i),this.activeControllerSet.delete(i)))})}setPageActive(e,t){this.activeIndex=e,this.activeControllerSet.clear(),this.controller=(Array.from(this.controllerMap.entries()).find(([s,i])=>{const r=i.isEnabled(e);return r&&this.activeControllerSet.add(s),t==null||t(s,r),r})||[])[0],this.event.emit("pageChange",this.controller)}update(e,t){this.activeControllerSet.forEach(s=>{var i;(i=s.update)==null||i.call(s,e,t)})}dispose(){this.controllerMap.forEach((e,t)=>{e.set(0)}),this.removePage(0),this.controllerMap.clear(),this.event.removeAllListeners(),this.activeControllerSet.clear()}}const ht={fov:45,near:1,far:1e3,up:new v.Vector3(0,1,0)};class Gt extends J{constructor(e){super(),this.width=0,this.height=0,this.width=e.width,this.height=e.height}get camera(){return this.controller}addPerspectiveCamera(e=ht,t){const{fov:s,far:i,near:r,up:o,aspect:n}=e,l=n!=null?n:this.width/this.height,d=new v.PerspectiveCamera(s,l,r,i);return d.up=o,this.addController(d,t)}setPageActive(e){super.setPageActive(e,(t,s)=>{s&&this.setAspect(this.width/this.height,t)})}setSize(e,t){this.width=e,this.height=t,this.setAspect(e/t)}setAspect(e,t){const s=t||this.camera;s.aspect!==e&&(s.aspect=e,s.updateProjectionMatrix())}cloneCamera(e){const t=this.addPerspectiveCamera({fov:this.camera.fov,aspect:this.camera.aspect,near:this.camera.near,far:this.camera.far,up:this.camera.up},e);return t.position.copy(this.camera.position),t}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 v.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]),o=new v.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:n,height:l}=this,d=n/l;(this.camera.fov!==t.fov||this.camera.aspect!==d||!this.camera.matrixWorld.equals(r)||!this.camera.matrixWorldInverse.equals(o))&&(this.camera.fov=t.fov,this.camera.updateProjectionMatrix(),this.camera.matrixAutoUpdate=!1,this.camera.matrixWorld.copy(r),this.camera.matrixWorldInverse.copy(o),this.camera.aspect=d,this.camera.updateProjectionMatrix())}}}const Kt={background:null};class Xt extends J{get scene(){return this.controller}constructor(e){super(),this.options=e}addScene(e,t){const s=new v.Scene;return e!=null&&e.background&&(s.background=e.background),this.addController(s,t)}removePage(e){super.removePage(e,t=>{const s=new I.ResourceTracker;s.track(t),s.dispose()})}setPageActive(e){super.setPageActive(e,(t,s)=>{t.visible=s})}}class $t{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 v.AxesHelper(100);else if(e.isCamera)i=new v.CameraHelper(e);else if(e.isPointLight)i=new v.PointLightHelper(e,1);else if(e.isDirectionalLight)i=new v.DirectionalLightHelper(e,1);else if(e.isSpotLight)i=new v.SpotLightHelper(e);else if(e.isHemisphereLight)i=new v.HemisphereLightHelper(e,10);else if(e.isRectAreaLight)i=new Tt.RectAreaLightHelper(e);else{const r=new v.Box3;if(r.setFromObject(e,!0),r.isEmpty()===!1){i=new v.Box3Helper(r);const o=i.material;o.userData.object=e,o.depthTest=!1,o.transparent=!0}else return}s.scene.add(i),this.helpers[t]=i}}addViewHelper(){const{cameraController:e,container:t}=this.options,s=new bt.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 v.AxesHelper||this.remove({uuid:e})})}update(e,t,s){var r,o;const{cameraController:i}=this.options;Object.values(this.helpers).forEach(n=>{if(n.update&&n.update(),n instanceof v.Box3Helper){const l=n.material,{object:d}=l.userData;d&&n.box.setFromObject(d,!0)}}),((r=this.viewHelper)==null?void 0:r.animating)===!0&&(this.viewHelper.update(e),(o=t.cameraControls)==null||o.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 Qt extends J{constructor(e){super(),this.autoRotateSpeed=0,this.options=e;const t={Vector2:v.Vector2,Vector3:v.Vector3,Vector4:v.Vector4,Quaternion:v.Quaternion,Matrix4:v.Matrix4,Spherical:v.Spherical,Box3:v.Box3,Sphere:v.Sphere,Raycaster:v.Raycaster};Q.install({THREE:t})}get cameraControls(){return this.controller}addCameraControls(e,t){const{domElement:s}=this.options.controlsParams,i=new Q(e,s);return i.setLookAt(0,0,400,0,0,0,!1),this.addController(i,t)}setPageActive(e){super.setPageActive(e,(t,s)=>{t.enabled=s})}removePage(e){super.removePage(e,t=>{t.dispose()})}enable(){this.activeControllerSet.forEach(e=>{e.enabled=!0})}disable(){this.activeControllerSet.forEach(e=>{e.enabled=!1})}update(e,t){super.update(e,t),this.autoRotateSpeed&&this.cameraControls&&(this.cameraControls.azimuthAngle+=this.autoRotateSpeed*e*v.MathUtils.DEG2RAD)}}class Jt{constructor(e){this.event=new ge.EventEmitter;const{renderer:t,scene:s,camera:i}=e,r=new xt.TransformControls(i,t.domElement);if(r.getHelper){const o=r.getHelper();if(s.add(o),+v.REVISION<170){const n=r._root;n.dispose=()=>{n.traverse(l=>{l.geometry&&l.geometry.dispose(),l.material&&l.material.dispose()})},r.dispose=()=>{r.disconnect(),n.dispose()}}}else r instanceof v.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 Ze=new v.Vector3,es=new v.Quaternion,qe=new v.Vector3,H=new v.Matrix4,ts=new v.Matrix4;class ss{constructor(e={}){const t=this;let s,i,r,o;const n={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 _=document.createElement("div");_.style.transformStyle="preserve-3d",d.appendChild(_),this.getSize=function(){return{width:s,height:i}},this.render=function(f,a){const g=a.projectionMatrix.elements[5]*o;a.view&&a.view.enabled?(d.style.transform=`translate( ${-a.view.offsetX*(s/a.view.width)}px, ${-a.view.offsetY*(i/a.view.height)}px )`,d.style.transform+=`scale( ${a.view.fullWidth/a.view.width}, ${a.view.fullHeight/a.view.height} )`):d.style.transform="",f.matrixWorldAutoUpdate===!0&&f.updateMatrixWorld(),a.parent===null&&a.matrixWorldAutoUpdate===!0&&a.updateMatrixWorld();let O,C;a.isOrthographicCamera&&(O=-(a.right+a.left)/2,C=(a.top+a.bottom)/2);const x=a.view&&a.view.enabled?a.view.height/a.view.fullHeight:1,T=a.isOrthographicCamera?`scale( ${x} )scale(`+g+")translate("+p(O)+"px,"+p(C)+"px)"+E(a.matrixWorldInverse):`scale( ${x} )translateZ(`+g+"px)"+E(a.matrixWorldInverse),D=(a.isPerspectiveCamera?"perspective("+g+"px) ":"")+T+"translate("+r+"px,"+o+"px)";n.camera.style!==D&&(_.style.transform=D,n.camera.style=D),u(f,f,a)},this.setSize=function(f,a){s=f,i=a,r=s/2,o=i/2,l.style.width=f+"px",l.style.height=a+"px",d.style.width=f+"px",d.style.height=a+"px",_.style.width=f+"px",_.style.height=a+"px"};function p(f){return Math.abs(f)<1e-10?0:f}function E(f){const a=f.elements;return"matrix3d("+p(a[0])+","+p(-a[1])+","+p(a[2])+","+p(a[3])+","+p(a[4])+","+p(-a[5])+","+p(a[6])+","+p(a[7])+","+p(a[8])+","+p(-a[9])+","+p(a[10])+","+p(a[11])+","+p(a[12])+","+p(-a[13])+","+p(a[14])+","+p(a[15])+")"}function y(f){const a=f.elements;return"translate(-50%,-50%)"+("matrix3d("+p(a[0])+","+p(a[1])+","+p(a[2])+","+p(a[3])+","+p(-a[4])+","+p(-a[5])+","+p(-a[6])+","+p(-a[7])+","+p(a[8])+","+p(a[9])+","+p(a[10])+","+p(a[11])+","+p(a[12])+","+p(a[13])+","+p(a[14])+","+p(a[15])+")")}function m(f){f.isCSS3DObject&&(f.element.style.display="none");for(let a=0,g=f.children.length;a<g;a++)m(f.children[a])}function u(f,a,g,O){if(f.visible===!1){m(f);return}if(f.isCSS3DObject){const C=f.layers.test(g.layers)===!0,x=f.element;if(x.style.display=C===!0?"":"none",C===!0){f.onBeforeRender(t,a,g);let T;f.isCSS3DSprite?(H.copy(g.matrixWorldInverse),H.transpose(),f.rotation2D!==0&&H.multiply(ts.makeRotationZ(f.rotation2D)),f.matrixWorld.decompose(Ze,es,qe),H.setPosition(Ze),H.scale(qe),H.elements[3]=0,H.elements[7]=0,H.elements[11]=0,H.elements[15]=1,T=y(H)):T=y(f.matrixWorld);const L=n.objects.get(f);if(L===void 0||L.style!==T){x.style.transform=T;const D={style:T};n.objects.set(f,D)}x.parentNode!==_&&_.appendChild(x),f.onAfterRender(t,a,g)}}for(let C=0,x=f.children.length;C<x;C++)u(f.children[C],a,g)}}}const X=new v.Vector3,We=new v.Matrix4,Ge=new v.Matrix4,Ke=new v.Vector3,Xe=new v.Vector3;class is{constructor(e={}){const t=this;let s,i,r,o;const n={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(m,u){m.matrixWorldAutoUpdate===!0&&m.updateMatrixWorld(),u.parent===null&&u.matrixWorldAutoUpdate===!0&&u.updateMatrixWorld(),We.copy(u.matrixWorldInverse),Ge.multiplyMatrices(u.projectionMatrix,We),_(m,m,u),y(m)},this.setSize=function(m,u){s=m,i=u,r=s/2,o=i/2,l.style.width=m+"px",l.style.height=u+"px"};function d(m){m.isCSS2DObject&&(m.element.style.display="none");for(let u=0,f=m.children.length;u<f;u++)d(m.children[u])}function _(m,u,f){if(m.visible===!1){d(m);return}if(m.isCSS2DObject){X.setFromMatrixPosition(m.matrixWorld),X.applyMatrix4(Ge);const a=X.z>=-1&&X.z<=1&&m.layers.test(f.layers)===!0,g=m.element;g.style.display=a===!0?"":"none",a===!0&&(m.onBeforeRender(t,u,f),g.style.transform="translate("+-100*m.center.x+"%,"+-100*m.center.y+"%)translate("+(X.x*r+r)+"px,"+(-X.y*o+o)+"px)",g.parentNode!==l&&l.appendChild(g),m.onAfterRender(t,u,f));const O={distanceToCameraSquared:p(f,m)};n.objects.set(m,O)}for(let a=0,g=m.children.length;a<g;a++)_(m.children[a],u,f)}function p(m,u){return Ke.setFromMatrixPosition(m.matrixWorld),Xe.setFromMatrixPosition(u.matrixWorld),Ke.distanceToSquared(Xe)}function E(m){const u=[];return m.traverseVisible(function(f){f.isCSS2DObject&&u.push(f)}),u}function y(m){const u=E(m).sort(function(a,g){if(a.renderOrder!==g.renderOrder)return g.renderOrder-a.renderOrder;const O=n.objects.get(a).distanceToCameraSquared,C=n.objects.get(g).distanceToCameraSquared;return O-C}),f=u.length;for(let a=0,g=u.length;a<g;a++)u[a].element.style.zIndex=f-a}}}const $e={zIndex:"auto"};class rs{constructor(e){this.container=e}addRenderer(e,t){const s=t.container||this.container,i=s.offsetWidth,r=s.offsetHeight,o=e==="css2d"?new is:new ss;o.domElement.style.position="absolute",o.domElement.style.top="0",o.domElement.style.pointerEvents="none",o.domElement.style.zIndex=t.zIndex,o.setSize(i,r),s.appendChild(o.domElement),e==="css2d"?this.css2Drenderer=o:e==="css3d"&&(this.css3Drenderer=o)}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}}const os={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;
@@ -74,7 +74,7 @@
74
74
 
75
75
  #endif
76
76
 
77
- }`};class ns extends Pt.OutputPass{constructor(){super();const e=os;this.uniforms=y.UniformsUtils.clone(e.uniforms),this.material=new y.RawShaderMaterial({name:e.name,uniforms:this.uniforms,vertexShader:e.vertexShader,fragmentShader:e.fragmentShader}),this.fsQuad?this.fsQuad=new De.FullScreenQuad(this.material):this._fsQuad&&(this._fsQuad=new De.FullScreenQuad(this.material))}}const as=h=>{const e=new St.ShaderPass(new y.ShaderMaterial({uniforms:{baseTexture:{value:null},bloomTexture:{value:h.renderTarget2.texture},bloomAlphaType:{value:0}},vertexShader:`
77
+ }`};class ns extends Pt.OutputPass{constructor(){super();const e=os;this.uniforms=v.UniformsUtils.clone(e.uniforms),this.material=new v.RawShaderMaterial({name:e.name,uniforms:this.uniforms,vertexShader:e.vertexShader,fragmentShader:e.fragmentShader}),this.fsQuad?this.fsQuad=new De.FullScreenQuad(this.material):this._fsQuad&&(this._fsQuad=new De.FullScreenQuad(this.material))}}const as=h=>{const e=new St.ShaderPass(new v.ShaderMaterial({uniforms:{baseTexture:{value:null},bloomTexture:{value:h.renderTarget2.texture},bloomAlphaType:{value:0}},vertexShader:`
78
78
  varying vec2 vUv;
79
79
  void main() {
80
80
  vUv = uv;
@@ -95,4 +95,4 @@
95
95
  gl_FragColor = ( base_color + vec4( 1.0 ) * bloom_color );
96
96
  }
97
97
  }
98
- `,defines:{}}),"baseTexture");return e.needsSwap=!0,e},we=1,pe=!1,ls=new y.MeshBasicMaterial({color:"black"}),hs=new y.PointsMaterial({color:"black",sizeAttenuation:!1}),cs=new y.PointsMaterial({color:"black",sizeAttenuation:!0}),ds=new y.SpriteMaterial({color:"black",sizeAttenuation:!0}),ps=new y.SpriteMaterial({color:"black",sizeAttenuation:!1}),ms=new I.MeshLineMaterial({color:"black",sizeAttenuation:0,lineWidth:0}),us={kernelRadius:8,minDistance:.005,maxDistance:.1},fs={threshold:0,strength:.4,radius:.1,bloomAlphaType:0},_s={multisampling:4,premultiplieAlpha:!1};class gs{constructor(e){this.bloomComposerActive=!1,this.active=!0,this.bloomSelection=new Set,this.bloomLayer=new y.Layers,this.bloomMaterials={},this.bloomVisible={},this.bloomComposerRenderIng=!1,this.pipViewportState=null,this.options=e;const{rendererController:t,sceneController:s,cameraController:i,composerParams:r}=e,{renderer:o}=t;this.renderer=o;const{multisampling:n}=r,{maxSamples:l}=o.capabilities,d=o.getDrawingBufferSize(new y.Vector2),_=new y.WebGLRenderTarget(d.width,d.height,{samples:Math.min(n,l),type:y.HalfFloatType}),p=new Re.EffectComposer(o,_),E=this.getSize();p.setSize(E.width,E.height);const v=new wt.RenderPass(s.scene,i.camera);p.addPass(v),this.scene=s.scene,this.camera=i.camera,this.finalComposer=p,this.renderPass=v,i.event.on("pageChange",m=>{this.changeCamera(m)}),s.event.on("pageChange",m=>{this.changeScene(m)})}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 ns;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 y.Vector2),o=r.width,n=r.height,l=new Lt.SSAOPass(t,s,o,n);l.kernelRadius=e.kernelRadius,l.minDistance=e.minDistance,l.maxDistance=e.maxDistance,this.ssaoPass=l,this.finalComposer.addPass(l)}addBloomPass(e){const{renderer:t}=this,{threshold:s,strength:i,radius:r,bloomAlphaType:o}=e,n=new At.UnrealBloomPass(new y.Vector2(window.innerWidth,window.innerHeight),i,r,s);this.bloomPass=n;const l=new Re.EffectComposer(t);l.renderToScreen=!1,l.addPass(this.renderPass),l.addPass(n),this.bloomComposer=l;const d=as(l);d.uniforms.bloomAlphaType.value=o,this.bloomComposer=l,this.finalComposer.addPass(d),this.mixPass=d,this.bloomLayer.set(we)}setBloomSelection(e,t){if(!this.bloomComposer){console.warn("err:pencil.options.bloom");return}e.traverse(s=>{const{object3d:i}=s;i&&(t?(this.bloomSelection.add(s),i.layers.enable(we)):(this.bloomSelection.delete(s),i.layers.disable(we)))}),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)}),t.forEach(s=>{s.traverse(i=>{var l;const r=i,o=i,n=i;(l=r.material)!=null&&l.isShadowMaterial?e.push(r):r.material&&this.bloomLayer.test(r.layers)===!1&&(this.bloomMaterials[r.uuid]=r.material,o.isSprite?o.material.sizeAttenuation?o.material=ds:o.material=ps:r.material instanceof I.MeshLineMaterial?r.material=ms:n.isPoints?n.material.sizeAttenuation?n.material=cs:n.material=hs:r.material=ls)})}),e.forEach(s=>{this.bloomVisible[s.uuid]=s.visible,s.visible=!1})}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.bloomComposerRenderIng=!0,this.mixPass.enabled=!0,this.darkenNonBloomed(),this.bloomComposer.render(),this.restoreNonBloomed(),this.bloomComposerRenderIng=!1):this.mixPass&&(this.mixPass.enabled=!1),this.finalComposer.render()}getSize(){return this.renderer.getSize(new y.Vector2)}render(){if(!this.active)return;const{cameraController:e,rendererController:t,sceneController:s}=this.options;if(this.finalComposerRender(),this.pipViewportState){e.setPageActive(31),e.setAspect(this.pipViewportState.width/this.pipViewportState.height),t.setViewport(ee(z({},this.pipViewportState),{scissor:!0,scissorTest:!0})),this.finalComposerRender(),e.setPageActive(s.activeIndex);const i=this.getSize();t.setViewport({x:0,y:0,width:i.width,height:i.height,scissor:!0,scissorTest:!1})}}dispose(){var e;this.bloomMaterials={},this.bloomVisible={},this.bloomSelection.clear(),this.finalComposer.dispose(),(e=this.bloomComposer)==null||e.dispose()}}class Qe extends y.Loader{constructor(e){super(e),this.options={type:"image"}}setOptions(e){return this.options=e,this}load(e,t,s,i){let r,o;this.options.type==="image"?(o=document.createElement("img"),r=new y.Texture(o)):this.options.type==="video"?(o=document.createElement("video"),o.preload="auto",o.autoplay=!1,o.loop=!1,o.muted=!0,o.setAttribute("webkit-playsinline","webkit-playsinline"),o.setAttribute("playsinline",""),r=new y.VideoTexture(o)):r=new y.Texture;const n=new y.FileLoader(this.manager);return n.setResponseType("blob"),n.setRequestHeader(this.requestHeader),n.setPath(this.path),n.setWithCredentials(this.withCredentials),n.load(e,l=>{let d=l;const _=e.split(".").pop(),p=this.options.type==="image"?`image/${_||"png"}`:`video/${_||"mp4"}`;d=d.slice(0,l.size,p);const E=()=>{o.removeEventListener("load",v,!1),o.removeEventListener("error",m,!1)},v=()=>{E(),r.needsUpdate=!0,t&&t(r)},m=f=>{E(),i&&i(f),this.manager.itemError(e),this.manager.itemEnd(e)};o.addEventListener("load",v,!1),o.addEventListener("error",m,!1);const u=window.URL.createObjectURL(d);o.src=u},s,i),r}}class vs extends y.Loader{constructor(e){super(e)}load(e,t,s,i){const r=new y.FileLoader(this.manager);r.setResponseType("blob"),r.setRequestHeader(this.requestHeader),r.setPath(this.path),r.setWithCredentials(this.withCredentials),r.load(e,o=>{const n=o,l=new DecompressionStream("gzip"),d=n.stream().pipeThrough(l);new Response(d).json().then(p=>{t==null||t(p)}).catch(p=>{i==null||i(p)})},s,i)}}const ys={images:["png","jpg","jpeg","ico","webp","avif"],media:["mp4","webm","ogg"],gltf:["gltf","glb"],json:["json","geojson"],gzipJson:["json.gzip"],exr:["exr"],lottie:["lottie.json"]};class Cs{constructor(e){this.loadObj=[],this.delLoadArr=[],this.assets=new Map,this.event=new ge.EventEmitter,this.options=z({simpleTexture4deleted:!1,prefix:""},e),this.loadingManager=new y.LoadingManager(()=>{},(t,s,i)=>{this.emit("progress",s,i)},t=>{console.warn(`Failed to load ${t}`)})}emit(e,...t){this.event.emit(e,...t)}on(e,t){this.event.on(e,t)}getAsset(e){const t=this.getAssetType(e);if(!t)return;const s=this.assets.get(e);if(!s){if((t==="images"||t==="media"||t==="exr")&&this.options.simpleTexture4deleted&&this.delLoadArr.includes(e))return new y.Texture;console.warn(`Asset ${e} not found`)}return s}getAssetType(e){var s;const t=(s=e.split(".").pop())==null?void 0:s.toLowerCase();if(t){if(e.endsWith("lottie.json"))return"lottie";if(e.endsWith("json.gzip"))return"gzipJson"}else return;for(const[i,r]of Object.entries(ys))if(r.includes(t))return i}getLoader(e,t){if(e==="images")return this.textureLoader||(this.textureLoader=new Qe(this.loadingManager),this.options.prefix&&this.textureLoader.setPath(this.options.prefix)),this.textureLoader;if(e==="media")return this.videoTextureLoader||(this.videoTextureLoader=new Qe(this.loadingManager),this.videoTextureLoader.setOptions({type:"video"}),this.options.prefix&&this.videoTextureLoader.setPath(this.options.prefix)),this.videoTextureLoader;if(e==="gltf"&&(t!=null&&t.dracoPath))return this.dracoGltfLoader||(this.dracoGltfLoader=new Ue.GLTFLoader(this.loadingManager),this.dracoLoader=new Mt.DRACOLoader,this.dracoLoader.setDecoderPath(t==null?void 0:t.dracoPath),this.dracoGltfLoader.setDRACOLoader(this.dracoLoader),this.options.prefix&&this.dracoGltfLoader.setPath(this.options.prefix)),this.dracoGltfLoader;if(e==="gltf")return this.gltfLoader||(this.gltfLoader=new Ue.GLTFLoader(this.loadingManager),this.options.prefix&&this.gltfLoader.setPath(this.options.prefix)),this.gltfLoader;if(e==="lottie")return this.lottieLoader||(this.lottieLoader=new Dt.LottieLoader(this.loadingManager),this.options.prefix&&this.lottieLoader.setPath(this.options.prefix)),this.lottieLoader;if(e==="gzipJson")return this.gzipJsonLoader||(this.gzipJsonLoader=new vs(this.loadingManager),this.options.prefix&&this.gzipJsonLoader.setPath(this.options.prefix)),this.gzipJsonLoader;if(e==="json")return this.jsonLoader||(this.jsonLoader=new y.FileLoader(this.loadingManager),this.jsonLoader.setResponseType("json"),this.options.prefix&&this.jsonLoader.setPath(this.options.prefix)),this.jsonLoader;if(e==="exr")return this.exrLoader||(this.exrLoader=new Rt.EXRLoader(this.loadingManager),this.options.prefix&&this.exrLoader.setPath(this.options.prefix)),this.exrLoader}add(e,t){typeof e=="string"&&(e=[e]),e.forEach(s=>{const i=z({src:s},t);this.loadObj.push(i)})}getSrcByAsset(e,t=this.assets){let s;return t.forEach((i,r)=>{i===e&&(s=r)}),s}get textureAssets(){const e=new Map;return this.assets.forEach((t,s)=>{(t instanceof y.Texture||t instanceof y.DataTexture||t instanceof y.VideoTexture)&&e.set(s,t)}),e}loadAll(){return te(this,null,function*(){const e=this.loadObj.filter(t=>!this.delLoadArr.includes(t.src));return yield Promise.all(e.map(t=>this.load(t.src,t)))})}load(e,t){return te(this,null,function*(){var n,l;const s=(n=t==null?void 0:t.type)!=null?n:this.getAssetType(e);if(!s)return;const i=(t==null?void 0:t.cache)!==!1,r=Le.makePromiseCreator();if(i){if(this.assets.has(e))return this.assets.get(e);this.assets.set(e,r.promise)}const o=this.getLoader(s,t);try{const d=yield o.loadAsync(e);if(this.assets.set(e,d),r.resolve(d),s==="images"||s==="media"||s==="exr"||s==="lottie"){(t==null?void 0:t.colorCorrection)!==!1&&Pe.colorCorrection({texture:d});const _=(l=t==null?void 0:t.anisotropy)!=null?l:this.options.anisotropy;d.anisotropy=_}return d}catch(d){r.reject(`Failed to load ${e}`);return}})}getUnusedAssets(){const{scene:e}=this.options;if(!e)return[...this.delLoadArr];const t=new Set,s=this.textureAssets;e.traverse(r=>{const o=r;o.material&&(Array.isArray(o.material)?o.material:[o.material]).forEach(l=>{[l.map,l.emissiveMap,l.normalMap,l.roughnessMap,l.metalnessMap,l.aoMap].forEach(d=>{if(d){const _=this.getSrcByAsset(d,s);_&&t.add(_)}})})});const i=new Set(this.textureAssets.keys());return t.forEach(r=>{i.delete(r)}),[...i,...this.delLoadArr]}dispose(){var e;this.assets.clear(),(e=this.dracoLoader)==null||e.dispose(),this.event.removeAllListeners(),this.delLoadArr.length=0,this.loadObj.length=0}}const Os={prefix:""};class Es extends J{get loader(){return this.controller}constructor(e){super(),this.options=e}addLoader(e,t){const{loaderParams:s}=this.options,i=new Cs(ee(z({},s),{scene:e}));return this.addController(i,t)}removePage(e){super.removePage(e,t=>{t.dispose()})}}class Ts extends I.BaseObject{constructor(e){super(),this.options=z({},e)}create(){var e;this.object3d=(e=this.options.scene)!=null?e:new y.Scene}}function Je(h){let e=!1,t=[];return function(...s){t=s,e||(e=!0,requestAnimationFrame(()=>{e=!1,h(...t)}))}}class bs{constructor(e){var t;this.enabled=!0,this.pickFunctionsMap=new Map,this.pickNodeFunctionsMap=new Map,this.pickFunctionsMapIndex=-1,this.pickNodeFunctionsMapIndex=-1,this.activeObjects=new Set,this.prevActiveObjects=new Set,this.objCallbackMap=new Map,this.pickListener={move:!1,down:!1},this.pencil=e,this.domElement=((t=e.options.controls)==null?void 0:t.domElement)||e.options.container}addPickListener(e){const t=new Set(["move","enter","leave"]),s=new Set(["down","downOutside","click"]),i=r=>{var v;if(!this.enabled)return;r.preventDefault();const o=e==="move"?t:s,n=[];if(this.pickFunctionsMap.forEach(m=>{o.has(m.type)&&n.push(ee(z({},m),{objArr:m.objArr instanceof Function?m.objArr():m.objArr}))}),n.length===0)return;this.activeObjects.clear(),this.objCallbackMap.clear();const l=this.objCallbackMap,d=[];for(const m of n)for(const u of m.objArr){if(!u.object3d||!u.visibleWithAncestors)continue;l.has(u)||(l.set(u,new Map),d.push(u));const f=l.get(u);f.has(m.type)||f.set(m.type,[]),f.get(m.type).push(m.cb)}if(d.length===0)return;const _=d.map(m=>m.object3d);_.forEach(m=>{m.isGroup&&m.traverse(u=>{u instanceof y.Mesh&&_.push(u)})});const p=(v=this.pencil.pick(r,_,!1))==null?void 0:v.intersects;if(!p||p.length===0)e==="down"?this.handleDownOutside(r):e==="move"&&this.handleLeaveEvents(r);else{this.sortIntersections(p);const m=p[0];this.processIntersection(m,r,e)}const E=this.prevActiveObjects;this.prevActiveObjects=this.activeObjects,this.activeObjects=E,this.activeObjects.clear()};this.domElement.addEventListener(`pointer${e}`,Je(i),{passive:!1})}sortIntersections(e){e.sort((t,s)=>t.distance===s.distance?t.object.getObjectById(s.object.id)?1:s.object.getObjectById(t.object.id)?-1:0:t.distance-s.distance)}processIntersection(e,t,s){const i=this.objCallbackMap,r=e.index||-1;let o=e.object;for(;o;){const n=this.pencil.lead.objMap.get(o);n&&i.has(n)&&this.activeObjects.add(n),o=o.parent}s==="move"?this.handleLeaveEvents(t):s==="down"&&this.handleDownOutside(t),this.processObjectHierarchy(t,s,r)}processObjectHierarchy(e,t,s){const i=this.objCallbackMap;let r=!1;const o=()=>{r=!0};for(const n of this.activeObjects){if(r)break;const l=i.get(n);if(l)if(t==="move"){const d=l.get("enter");if(d&&!this.prevActiveObjects.has(n))for(const p of d)p({baseObject:n,mouseEvent:e,sp:o,intersectionIndex:s});const _=l.get("move");if(_)for(const p of _)p({baseObject:n,mouseEvent:e,sp:o,intersectionIndex:s})}else{const d=l.get("down");if(d)for(const p of d)p({baseObject:n,mouseEvent:e,sp:o,intersectionIndex:s});const _=l.get("click");if(_){const p=E=>{E.preventDefault();const v=5;if(!r&&Math.abs(E.clientX-e.clientX)<=v&&Math.abs(E.clientY-e.clientY)<=v)for(const m of _)m({baseObject:n,mouseEvent:e,sp:o,intersectionIndex:s});this.domElement.removeEventListener("pointerup",p)};this.domElement.addEventListener("pointerup",p)}}}}handleLeaveEvents(e){this.objCallbackMap.forEach((s,i)=>{const r=s.get("leave");if(r&&this.prevActiveObjects.has(i)&&!this.activeObjects.has(i))for(const o of r)o({baseObject:i,mouseEvent:e})})}handleDownOutside(e){this.objCallbackMap.forEach((s,i)=>{const r=s.get("downOutside");if(r&&!this.activeObjects.has(i))for(const o of r)o({baseObject:i,mouseEvent:e})})}handlePick(e,t,s){let i=t;i==="mousemove"?i="move":i==="mouseenter"?i="enter":i==="mouseleave"&&(i="leave"),this.pickFunctionsMapIndex+=1;const r=this.pickFunctionsMapIndex;return this.pickFunctionsMap.set(r,{objArr:e,type:i,cb:s}),this.pickListener.move||Array.from(this.pickFunctionsMap.values()).some(n=>["move","enter","leave"].includes(n.type))&&(this.pickListener.move=!0,this.addPickListener("move")),this.pickListener.down||Array.from(this.pickFunctionsMap.values()).some(n=>["down","downOutside","click"].includes(n.type))&&(this.pickListener.down=!0,this.addPickListener("down")),r}removePick(e){this.pickFunctionsMap.delete(e)}handlePickNode(e,t,s){if(t==="downOutside")return console.warn("handlePickNode:err:不支持 downOutside"),-1;this.pickNodeFunctionsMapIndex+=1;const i=this.pickNodeFunctionsMapIndex,r=e instanceof Function?e():e,o=[];for(const n of r){const l=n;l.element.style.pointerEvents="auto";const d=p=>{this.enabled&&(p.preventDefault(),s({baseObject:l,mouseEvent:p}))},_=`pointer${t}`;l.element.addEventListener(_,Je(d),!1),o.push({arr:l,type:_,listener:d})}return this.pickNodeFunctionsMap.set(i,o),i}removePickNode(e){const t=this.pickNodeFunctionsMap.get(e);if(t){for(const s of t)s.arr.element.style.pointerEvents="none",s.arr.element.removeEventListener(s.type,s.listener,!1);this.pickNodeFunctionsMap.delete(e)}}dispose(){this.pickFunctionsMap.clear(),this.pickNodeFunctionsMap.clear(),this.activeObjects.clear(),this.prevActiveObjects.clear(),this.objCallbackMap.clear()}}class xs extends bs{constructor(e,t){super(e),this.objMap=new Map,this.objects=new Map,this.objectsPm=new Map,this.objectNamesToFactories=new Map,this.scene=new Ts({scene:t.scene}),this.mList=t.mList,this.scene.create(),this.scene.lead=this,this.scene.pencil=e,this.scene.mList=this.mList,this.scene.key="Scene",this.scene.object3d.name="场景",this.group=new I.Group,this.group.create(),this.group.lead=this,this.group.pencil=e,this.group.mList=this.mList,this.group.key="@Group",this.group.object3d.name="物体组",this.prefabGroup=new I.Group,this.prefabGroup.create(),this.prefabGroup.lead=this,this.prefabGroup.pencil=e,this.prefabGroup.mList=this.mList,this.prefabGroup.key="@PrefabGroup",this.prefabGroup.object3d.name="预制组",this.scene.add(this.group.object3d,this.prefabGroup.object3d),this.objects.set("@Scene",this.scene),this.objects.set("@Group",this.group),this.objects.set("@PrefabGroup",this.prefabGroup),this.objMap.set(this.scene.object3d,this.scene),this.objMap.set(this.group.object3d,this.group),this.objMap.set(this.prefabGroup.object3d,this.prefabGroup)}get objectsPromise(){return this.objectsPm.values()}init(e){return Object.keys(e).forEach(t=>{const s=class{create(r={}){return new e[t](r)}};this.objectNamesToFactories.set(t,s)}),this}getObject(e,t){e.includes("#")&&console.warn("getObject:err:不支持 #",e);const{key:s}=t||{},i=`${e}${s?`#${s}`:""}`;return this.objects.get(i)}getAllObject(e,t){e.includes("#")&&console.warn("getAllObject:err:不支持 #",e);const{key:s}=t||{},i=`${e}${s?`#${s}`:""}`,r=[];return this.objects.forEach((o,n)=>{(n.startsWith(s?i:`${i}#`)||n===i)&&r.push(o)}),r}draw(e,t,s){return te(this,null,function*(){var r,o,n,l;const i=this.objectNamesToFactories.get(e);if(i){t||(t={}),t.target===void 0&&(t.target=s);const d=t.target,_=(r=t.onTop)!=null?r:0,p=(o=t.prefab)!=null?o:!1,E=(n=t.create)!=null?n:!0,v=new i().create(t);let m;return d===null?m=null:typeof d=="string"?m=this.objects.get(d):(l=d==null?void 0:d.objectType)!=null&&l.startsWith("BaseObject")||d?m=d:p?m=this.prefabGroup:m=this.group,E===!1?v.create=()=>{}:E!==!0&&(v.create=()=>{E(v)}),v.pencil=this.pencil,v.lead=this,v.mList=this.mList,v.prefab=p,v.objectType=`BaseObject#${e}`,v.objectOptions=t,this.setBaseObjectKey(v,t.key?`$t:#${t.key}`:"$t:",m==null?void 0:m.key),this.objectsPm.set(v.key,this.addBaseObject(v,m,_)),yield this.objectsPm.get(v.key),this.objectsPm.delete(v.key),v}throw new Error(`Unrecognized:${e}`)})}setBaseObjectKey(e,t,s){const i=e.objectType,[,r]=i.split("#");let o=t.replace("$t:",r);if(s){const[,n]=s.split("#");o=o.replace("$p:",n)}return this.objects.has(o)&&(o.includes("#")?o+=`-${Le.generateUUID()}`:o+=`#${Le.generateUUID()}`),e.key=o,this.objects.set(o,e),o}updateBaseObjectKey(e,t){var o;let s;for(const[n,l]of this.objects.entries())if(l===e){s=n;break}const i=(o=e.parent)==null?void 0:o.key,r=this.setBaseObjectKey(e,t,i);return s&&this.objects.delete(s),this.pencil.event.emit("updateKey",e,r,s),r}addBaseObject(e,t,s){return te(this,null,function*(){yield e.create(),e.object3d&&(this.mList.proxyBaseObject(e),this.mList.addBaseObjectMap(e),s&&e.setTop(s),t!==null&&(t.add(e.object3d),this.objMap.set(e.object3d,e))),e.render(),this.pencil.event.emit("draw",e)})}erase(...e){[...e].forEach(t=>{const s=[];if(typeof t=="string"){const[i,r]=t.split("#");s.push(...this.getAllObject(i,{key:r}))}else s.push(t);s.forEach(i=>{i.dispose()})}),this.pencil.event.emit("erase",...e)}update(e,t){this.objects.forEach(s=>{s.update(e,t)})}setSize(e,t){this.objects.forEach(s=>{s.resize(e,t)})}eraseAll(){this.group&&(this.objects.forEach(e=>{e.key.startsWith("Node")&&this.erase(e)}),this.erase(this.group))}dispose(){super.dispose(),this.scene.erase(),this.objects.forEach(e=>{e.erase()}),this.objects.clear(),this.objectsPm.clear(),this.objMap.clear(),this.objectNamesToFactories.clear()}}class ws extends J{get lead(){return this.controller}constructor(e){super(),this.options=e}addLead(e,t,s){const{pencil:i}=this.options,r=new xs(i,{scene:e,mList:t});return this.addController(r,s)}removePage(e){super.removePage(e,t=>{t.dispose()})}setPageActive(e){super.setPageActive(e,(t,s)=>{t.enabled=s})}setSize(e,t){this.controllerMap.forEach((s,i)=>{i.setSize(e,t)})}}class Ls{constructor(e){this.materials=new Map,this.materialBaseObjectMap=new Map,this.pencil=e}add(e,t){const s={key:e,userData:{preList:!0},object3d:{material:t}};this.proxyBaseObject(s),this.addBaseObjectMap(s),this.emitObject3dChange()}get(e){const t=this.materials.get(e);return t||console.warn(`Material with key "${e}" not found.`),t}getKey(e){for(const[t,s]of this.materials.entries())if(s===e)return t}addMultiple(e,t){for(const[s,i]of Object.entries(t)){const r=`${e}#${s}`;i&&this.add(r,i)}}getMultiple(e){const t={},s=`${e}#`;let i=!1;for(const[r,o]of this.materials.entries())if(r.startsWith(s)){const n=r.substring(s.length);t[n]=o,i=!0}return i?t:null}copyMultiple(e,t){const s={},i=`${e}#`;for(const[r,o]of this.materials.entries())if(r.startsWith(i)){const n=r.substring(i.length),l=o.clone();s[n]=l;const d=`${t}#${n}`;this.add(d,l)}return s}disposeMaterial(e){const t=new I.ResourceTracker;t.track([e]),t.dispose()}remove(e){const t=this.materials.get(e);t&&this.disposeMaterial(t),this.materials.delete(e),this.emitObject3dChange()}removeByMaterial(e){[...this.materials.entries()].some(([t,s])=>s===e?(this.remove(t),!0):!1)}proxyBaseObject(e){const t=e.object3d,s=i=>new Proxy(i,{set:(r,o,n)=>{if(typeof o=="string"&&!isNaN(Number(o))){const l=Number(o);if(l>=0&&l<r.length){const d=r[l];return this.rmBaseObjectMap(e,d),r[l]=n,this.addBaseObjectMap(e),!0}}return Reflect.set(r,o,n)}});e.object3d=new Proxy(t,{set:(i,r,o)=>{var n;return r==="material"&&!((n=this.pencil.composerController)!=null&&n.bloomComposerRenderIng)?(this.rmBaseObjectMap(e),i.material=o,this.addBaseObjectMap(e),!0):Reflect.set(i,r,o)},get:(i,r)=>{var o;if(r==="material"&&!((o=this.pencil.composerController)!=null&&o.bloomComposerRenderIng)){const n=i.material;if(Array.isArray(n)&&!n.hasOwnProperty("__isProxy")){const l=s(n);Object.defineProperty(l,"__isProxy",{value:!0,enumerable:!1}),i.material=l}}return Reflect.get(i,r)}})}addBaseObjectMap(e){const t=e.object3d;t.material&&((Array.isArray(t.material)?t.material:[t.material]).forEach(i=>{const r=this.materialBaseObjectMap.get(i);r?r.add(e):this.materialBaseObjectMap.set(i,new Set([e]))}),e.userData.preList&&this.materials.set(e.key,t.material))}rmBaseObjectMap(e,t){this.materialBaseObjectMap.forEach((s,i)=>{t&&i!==t||s.has(e)&&(s.delete(e),s.size===0&&(this.materialBaseObjectMap.delete(i),this.disposeMaterial(i)))})}getBaseObjectMaterials(){const e={};return this.materialBaseObjectMap.forEach((t,s)=>{t.forEach(i=>{e[i.key]=s})}),e}emitObject3dChange(){var e;(e=this.pencil)==null||e.event.emit("baseObjectListChange")}dispose(){const e=new I.ResourceTracker;e.track([...this.materials.values()]),e.dispose(),this.materials.clear(),this.materialBaseObjectMap.clear()}}class Ps extends J{get mList(){return this.controller}constructor(e){super(),this.options=e}addMList(e,t){const{pencil:s}=this.options,i=new Ls(s);return this.addController(i,t)}removePage(e){super.removePage(e,t=>{t.dispose()})}}const fe=class fe{constructor(e){var r,o;this.raycaster=new y.Raycaster,this.maxBackufferArea=5760*5760,this.installPlugins=new Map,this._cameraPositon=new y.Vector3,this._cameraTarget=new y.Vector3,this.event=new ge.EventEmitter,this.timer=new yt.Timer,this.userData={},this.pageActiveIndex=0,this.pageCountIndex=0,this.userSetDprCache=1,this.event.setMaxListeners(1/0),(o=(r=this.timer).connect)==null||o.call(r,document),this.options=Ot(fe.options,e,{isMergeableObject:Pe.isPlainObject}),this.userSetDprCache=this.options.renderer.devicePixelRatio;const{container:t,stats:s,transformControls:i}=this.options;if(this.init(),this.options.WebGPUTHREE||this.initComposer(),this.initCSSRenderer(),i&&this.initTransformControls(),s){const n=new Et({horizontal:!1});n.dom.style.position="absolute",n.init(this.renderer),t.appendChild(n.dom),this.stats=n}this.initResizeObserver(),this.tweenUpdateRaf()}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}get loader(){return this.loaderController.loader}get lead(){return this.leadController.lead}get mList(){return this.mListController.mList}tweenUpdateRaf(){ye.update(),this.TweenRaf=requestAnimationFrame(this.tweenUpdateRaf.bind(this))}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.pageCountIndex+1,i=this.cameraController.addPerspectiveCamera(t,s),r=this.sceneController.addScene(e,s);r.add(i),this.controlsController.addCameraControls(i,s),this.loaderController.addLoader(r,s);const o=this.mListController.addMList(null,s);return this.leadController.addLead(r,o,s),this.pageCountIndex=s,s}removePage(e){this.cameraController.removePage(e),this.sceneController.removePage(e),this.controlsController.removePage(e),this.loaderController.removePage(e),this.mListController.removePage(e),this.leadController.removePage(e),this.pageCountIndex===e&&(this.pageCountIndex-=1),this.pageActiveIndex===e&&(this.render(),this.showPage(0))}showPage(e){var s;if(e===this.pageActiveIndex)return;const t=this.scene;this.sceneController.setPageActive(e),t&&((s=this.cssRendererController)==null||s.render(t,this.camera)),this.cameraController.setPageActive(e),this.controlsController.setPageActive(e),this.loaderController.setPageActive(e),this.mListController.setPageActive(e),this.leadController.setPageActive(e),this.pageActiveIndex=e}init(){var g;const{container:e,WebGPUTHREE:t,helper:s,viewHelper:i,renderer:r,controls:o,loader:n}=this.options,{width:l,height:d}=this.getSize(),_=t?new qt({width:l,height:d,renderer:t.WebGPURenderer,rendererParams:Zt}):new Yt({width:l,height:d,rendererParams:ee(z({},r),{antialias:!1})}),p=new Gt({width:l,height:d}),E=new Xt({}),v=new Qt({controlsParams:{domElement:(g=o==null?void 0:o.domElement)!=null?g:_.renderer.domElement}}),m=new Es({loaderParams:z({anisotropy:_.renderer.capabilities.getMaxAnisotropy()},n)}),u=new Ps({pencil:this}),f=new ws({pencil:this});this.sceneController=E,this.cameraController=p,this.controlsController=v,this.rendererController=_,this.loaderController=m,this.mListController=u,this.leadController=f;const a=this.addPage({sceneOptions:this.options.scene,cameraOptions:this.options.camera});if(this.showPage(a),s){const O=new $t({container:e,sceneController:E,cameraController:p});O.add(E.scene),this.helperController=O,i&&O.addViewHelper()}e.appendChild(_.renderer.domElement)}initComposer(){const{bloom:e,bloomParams:t,ssao:s,ssaoParams:i,composer:r}=this.options,o=new gs({rendererController:this.rendererController,sceneController:this.sceneController,cameraController:this.cameraController,composerParams:r});this.composerController=o,e&&o.addBloomPass(z({},t)),s&&o.addSSAOPass(z({},i)),o.addOutputPass()}initCSSRenderer(){const{container:e,css2DRenderer:t,css3DRenderer:s,css2DRendererParams:i,css3DRendererParams:r}=this.options;if(t||s){const o=new rs(e);t&&o.addRenderer("css2d",i),s&&o.addRenderer("css3d",r),this.cssRendererController=o}}initTransformControls(){const e=new Jt({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:o,cssRendererController:n,leadController:l}=this,d=this.renderer.getSize(new y.Vector2);d.x===e&&d.y===t||(r.setSize(e,t),i.setSize(e,t),o==null||o.setSize(e,t),n==null||n.setSize(e,t),l.setSize(e,t),this.installPlugins.forEach(_=>{var p;(p=_.setSize)==null||p.call(_,e,t)}),this.render(),s&&this.event.emit("resize",{width:e,height:t}))}setDevicePixelRatio(e){var n;this.userSetDprCache=e;const{width:t,height:s}=this.getSize();let i=Math.sqrt(this.maxBackufferArea/(t*s));i=(i*100|0)/100;const r=Math.min(e,i);r!==e&&console.warn("maxBackufferArea:",this.maxBackufferArea," the pixel ratio is set to",r);const o=this.renderer.getPixelRatio();r!==o&&(this.rendererController.setPixelRatio(r),(n=this.composerController)==null||n.setPixelRatio(r))}pick(e,t,s=!0){const{raycaster:i,options:r}=this,{container:o}=r,n=new y.Vector2,l=o.getBoundingClientRect();if(n.x=(e.clientX-l.left)/(l.right-l.left)*2-1,n.y=-((e.clientY-l.top)/(l.bottom-l.top))*2+1,this.camera&&this.scene){i.setFromCamera(n,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 s,i,r,o,n,l;if(!this.camera||!this.scene)return;this.timer.update(),ye.update();const e=this.timer.getDelta(),t=this.timer.getElapsed();this.controlsController.update(e,t),this.leadController.update(e,t),this.installPlugins.forEach(d=>{var _;(_=d.update)==null||_.call(d,e,t)}),(s=this.helperController)==null||s.update(e,this.controlsController,this.cameraTarget),(i=this.composerController)!=null&&i.active?this.composerController.render():(r=this.rendererController)==null||r.render(this.scene,this.camera),(o=this.helperController)==null||o.renderViewHelper(this.renderer),(n=this.cssRendererController)==null||n.render(this.scene,this.camera),(l=this.stats)==null||l.update(),this.event.emit("render",{delta:e,elapsed:t})}start(){window.cancelAnimationFrame(this.TweenRaf),this.renderer.setAnimationLoop(this.render.bind(this)),this.event.emit("start")}stop(){this.tweenUpdateRaf(),this.renderer.setAnimationLoop(null),this.event.emit("stop")}autoRotate(e){this.controlsController.autoRotateSpeed=e}showPipViewport(e){this.composerController.pipViewportState=e;let t=this.pipCameraControls;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,t.camera.position.copy(this.camera.position);else{const o=this.cameraController.cloneCamera(31);o.aspect=e.width/e.height,o.updateProjectionMatrix(),t=this.controlsController.addCameraControls(o,this.sceneController.activeIndex),t.addEventListener("update",()=>{this.controls.enabled=!1}),t.addEventListener("sleep",()=>{this.controls.enabled=!0}),this.pipCameraControls=t}t.interactiveArea=r}}dispose(){var e,t,s,i,r,o,n,l,d,_,p,E,v,m;this.stop(),this.timer.dispose(),ye.removeAll(),this.event.removeAllListeners(),(e=this.resizeObserver)==null||e.unobserve(this.options.container),this.installPlugins.forEach(u=>{var f;(f=u.dispose)==null||f.call(u)}),(t=this.controlsController)==null||t.dispose(),(s=this.transformController)==null||s.dispose(),(i=this.cssRendererController)==null||i.dispose(),(r=this.sceneController)==null||r.dispose(),(o=this.cameraController)==null||o.dispose(),(n=this.helperController)==null||n.dispose(),(l=this.composerController)==null||l.dispose(),(d=this.rendererController)==null||d.dispose(),(_=this.loaderController)==null||_.dispose(),(p=this.leadController)==null||p.dispose(),(E=this.mListController)==null||E.dispose(),this.cssRendererController=void 0,this.installPlugins.clear(),(v=this.stats)==null||v.dom.remove(),(m=this.renderer)==null||m.domElement.remove()}};fe.options={stats:pe,helper:pe,viewHelper:pe,controls:!0,transformControls:pe,renderer:Vt,composer:_s,scene:Kt,camera:ht,bloom:!1,bloomParams:fs,ssao:!1,loader:Os,ssaoParams:us,css2DRenderer:!1,css2DRendererParams:z({},$e),css3DRenderer:!1,css3DRendererParams:z({},$e)};let ue=fe;const Ss=Q.ACTION;exports.BaseObject=I.BaseObject;exports.ResourceTracker=I.ResourceTracker;exports.Pencil=ue;exports.cameraControlsAction=Ss;exports.default=ue;
98
+ `,defines:{}}),"baseTexture");return e.needsSwap=!0,e},we=1,pe=!1,ls=new v.MeshBasicMaterial({color:"black"}),hs=new v.PointsMaterial({color:"black",sizeAttenuation:!1}),cs=new v.PointsMaterial({color:"black",sizeAttenuation:!0}),ds=new v.SpriteMaterial({color:"black",sizeAttenuation:!0}),ps=new v.SpriteMaterial({color:"black",sizeAttenuation:!1}),ms=new I.MeshLineMaterial({color:"black",sizeAttenuation:0,lineWidth:0}),us={kernelRadius:8,minDistance:.005,maxDistance:.1},fs={threshold:0,strength:.4,radius:.1,bloomAlphaType:0},_s={multisampling:4,premultiplieAlpha:!1};class gs{constructor(e){this.bloomComposerActive=!1,this.active=!0,this.bloomSelection=new Set,this.bloomLayer=new v.Layers,this.bloomMaterials={},this.bloomVisible={},this.bloomComposerRenderIng=!1,this.pipViewportState=null,this.options=e;const{rendererController:t,sceneController:s,cameraController:i,composerParams:r}=e,{renderer:o}=t;this.renderer=o;const{multisampling:n}=r,{maxSamples:l}=o.capabilities,d=o.getDrawingBufferSize(new v.Vector2),_=new v.WebGLRenderTarget(d.width,d.height,{samples:Math.min(n,l),type:v.HalfFloatType}),p=new Re.EffectComposer(o,_),E=this.getSize();p.setSize(E.width,E.height);const y=new wt.RenderPass(s.scene,i.camera);p.addPass(y),this.scene=s.scene,this.camera=i.camera,this.finalComposer=p,this.renderPass=y,i.event.on("pageChange",m=>{this.changeCamera(m)}),s.event.on("pageChange",m=>{this.changeScene(m)})}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 ns;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 v.Vector2),o=r.width,n=r.height,l=new Lt.SSAOPass(t,s,o,n);l.kernelRadius=e.kernelRadius,l.minDistance=e.minDistance,l.maxDistance=e.maxDistance,this.ssaoPass=l,this.finalComposer.addPass(l)}addBloomPass(e){const{renderer:t}=this,{threshold:s,strength:i,radius:r,bloomAlphaType:o}=e,n=new At.UnrealBloomPass(new v.Vector2(window.innerWidth,window.innerHeight),i,r,s);this.bloomPass=n;const l=new Re.EffectComposer(t);l.renderToScreen=!1,l.addPass(this.renderPass),l.addPass(n),this.bloomComposer=l;const d=as(l);d.uniforms.bloomAlphaType.value=o,this.bloomComposer=l,this.finalComposer.addPass(d),this.mixPass=d,this.bloomLayer.set(we)}setBloomSelection(e,t){if(!this.bloomComposer){console.warn("err:pencil.options.bloom");return}e.traverse(s=>{const{object3d:i}=s;i&&(t?(this.bloomSelection.add(s),i.layers.enable(we)):(this.bloomSelection.delete(s),i.layers.disable(we)))}),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)}),t.forEach(s=>{s.traverse(i=>{var l;const r=i,o=i,n=i;(l=r.material)!=null&&l.isShadowMaterial?e.push(r):r.material&&this.bloomLayer.test(r.layers)===!1&&(this.bloomMaterials[r.uuid]=r.material,o.isSprite?o.material.sizeAttenuation?o.material=ds:o.material=ps:r.material instanceof I.MeshLineMaterial?r.material=ms:n.isPoints?n.material.sizeAttenuation?n.material=cs:n.material=hs:r.material=ls)})}),e.forEach(s=>{this.bloomVisible[s.uuid]=s.visible,s.visible=!1})}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.bloomComposerRenderIng=!0,this.mixPass.enabled=!0,this.darkenNonBloomed(),this.bloomComposer.render(),this.restoreNonBloomed(),this.bloomComposerRenderIng=!1):this.mixPass&&(this.mixPass.enabled=!1),this.finalComposer.render()}getSize(){return this.renderer.getSize(new v.Vector2)}render(){if(!this.active)return;const{cameraController:e,rendererController:t,sceneController:s}=this.options;if(this.finalComposerRender(),this.pipViewportState){e.setPageActive(31),e.setAspect(this.pipViewportState.width/this.pipViewportState.height),t.setViewport(ee(z({},this.pipViewportState),{scissor:!0,scissorTest:!0})),this.finalComposerRender(),e.setPageActive(s.activeIndex);const i=this.getSize();t.setViewport({x:0,y:0,width:i.width,height:i.height,scissor:!0,scissorTest:!1})}}dispose(){var e;this.bloomMaterials={},this.bloomVisible={},this.bloomSelection.clear(),this.finalComposer.dispose(),(e=this.bloomComposer)==null||e.dispose()}}class Qe extends v.Loader{constructor(e){super(e),this.options={type:"image"}}setOptions(e){return this.options=e,this}load(e,t,s,i){let r,o;this.options.type==="image"?(o=document.createElement("img"),r=new v.Texture(o)):this.options.type==="video"?(o=document.createElement("video"),o.preload="auto",o.autoplay=!1,o.loop=!1,o.muted=!0,o.setAttribute("webkit-playsinline","webkit-playsinline"),o.setAttribute("playsinline",""),r=new v.VideoTexture(o)):r=new v.Texture;const n=new v.FileLoader(this.manager);return n.setResponseType("blob"),n.setRequestHeader(this.requestHeader),n.setPath(this.path),n.setWithCredentials(this.withCredentials),n.load(e,l=>{let d=l;const _=e.split(".").pop(),p=this.options.type==="image"?`image/${_||"png"}`:`video/${_||"mp4"}`;d=d.slice(0,l.size,p);const E=()=>{o.removeEventListener("load",y,!1),o.removeEventListener("error",m,!1)},y=()=>{E(),r.needsUpdate=!0,t&&t(r)},m=f=>{E(),i&&i(f),this.manager.itemError(e),this.manager.itemEnd(e)};o.addEventListener("load",y,!1),o.addEventListener("error",m,!1);const u=window.URL.createObjectURL(d);o.src=u},s,i),r}}class ys extends v.Loader{constructor(e){super(e)}load(e,t,s,i){const r=new v.FileLoader(this.manager);r.setResponseType("blob"),r.setRequestHeader(this.requestHeader),r.setPath(this.path),r.setWithCredentials(this.withCredentials),r.load(e,o=>{const n=o,l=new DecompressionStream("gzip"),d=n.stream().pipeThrough(l);new Response(d).json().then(p=>{t==null||t(p)}).catch(p=>{i==null||i(p)})},s,i)}}const vs={images:["png","jpg","jpeg","ico","webp","avif"],media:["mp4","webm","ogg"],gltf:["gltf","glb"],json:["json","geojson"],gzipJson:["json.gzip"],exr:["exr"],lottie:["lottie.json"]};class Cs{constructor(e){this.loadObj=[],this.delLoadArr=[],this.assets=new Map,this.event=new ge.EventEmitter,this.options=z({simpleTexture4deleted:!1,prefix:""},e),this.loadingManager=new v.LoadingManager(()=>{},(t,s,i)=>{this.emit("progress",s,i)},t=>{console.warn(`Failed to load ${t}`)})}emit(e,...t){this.event.emit(e,...t)}on(e,t){this.event.on(e,t)}getAsset(e){const t=this.getAssetType(e);if(!t)return;const s=this.assets.get(e);if(!s){if((t==="images"||t==="media"||t==="exr")&&this.options.simpleTexture4deleted&&this.delLoadArr.includes(e))return new v.Texture;console.warn(`Asset ${e} not found`)}return s}getAssetType(e){var s;const t=(s=e.split(".").pop())==null?void 0:s.toLowerCase();if(t){if(e.endsWith("lottie.json"))return"lottie";if(e.endsWith("json.gzip"))return"gzipJson"}else return;for(const[i,r]of Object.entries(vs))if(r.includes(t))return i}getLoader(e,t){if(e==="images")return this.textureLoader||(this.textureLoader=new Qe(this.loadingManager),this.options.prefix&&this.textureLoader.setPath(this.options.prefix)),this.textureLoader;if(e==="media")return this.videoTextureLoader||(this.videoTextureLoader=new Qe(this.loadingManager),this.videoTextureLoader.setOptions({type:"video"}),this.options.prefix&&this.videoTextureLoader.setPath(this.options.prefix)),this.videoTextureLoader;if(e==="gltf"&&(t!=null&&t.dracoPath))return this.dracoGltfLoader||(this.dracoGltfLoader=new Ue.GLTFLoader(this.loadingManager),this.dracoLoader=new Mt.DRACOLoader,this.dracoLoader.setDecoderPath(t==null?void 0:t.dracoPath),this.dracoGltfLoader.setDRACOLoader(this.dracoLoader),this.options.prefix&&this.dracoGltfLoader.setPath(this.options.prefix)),this.dracoGltfLoader;if(e==="gltf")return this.gltfLoader||(this.gltfLoader=new Ue.GLTFLoader(this.loadingManager),this.options.prefix&&this.gltfLoader.setPath(this.options.prefix)),this.gltfLoader;if(e==="lottie")return this.lottieLoader||(this.lottieLoader=new Dt.LottieLoader(this.loadingManager),this.options.prefix&&this.lottieLoader.setPath(this.options.prefix)),this.lottieLoader;if(e==="gzipJson")return this.gzipJsonLoader||(this.gzipJsonLoader=new ys(this.loadingManager),this.options.prefix&&this.gzipJsonLoader.setPath(this.options.prefix)),this.gzipJsonLoader;if(e==="json")return this.jsonLoader||(this.jsonLoader=new v.FileLoader(this.loadingManager),this.jsonLoader.setResponseType("json"),this.options.prefix&&this.jsonLoader.setPath(this.options.prefix)),this.jsonLoader;if(e==="exr")return this.exrLoader||(this.exrLoader=new Rt.EXRLoader(this.loadingManager),this.options.prefix&&this.exrLoader.setPath(this.options.prefix)),this.exrLoader}add(e,t){typeof e=="string"&&(e=[e]),e.forEach(s=>{const i=z({src:s},t);this.loadObj.push(i)})}getSrcByAsset(e,t=this.assets){let s;return t.forEach((i,r)=>{i===e&&(s=r)}),s}get textureAssets(){const e=new Map;return this.assets.forEach((t,s)=>{(t instanceof v.Texture||t instanceof v.DataTexture||t instanceof v.VideoTexture)&&e.set(s,t)}),e}loadAll(){return te(this,null,function*(){const e=this.loadObj.filter(t=>!this.delLoadArr.includes(t.src));return yield Promise.all(e.map(t=>this.load(t.src,t)))})}load(e,t){return te(this,null,function*(){var n,l;const s=(n=t==null?void 0:t.type)!=null?n:this.getAssetType(e);if(!s)return;const i=(t==null?void 0:t.cache)!==!1,r=Le.makePromiseCreator();if(i){if(this.assets.has(e))return this.assets.get(e);this.assets.set(e,r.promise)}const o=this.getLoader(s,t);try{const d=yield o.loadAsync(e);if(this.assets.set(e,d),r.resolve(d),s==="images"||s==="media"||s==="exr"||s==="lottie"){(t==null?void 0:t.colorCorrection)!==!1&&Pe.colorCorrection({texture:d});const _=(l=t==null?void 0:t.anisotropy)!=null?l:this.options.anisotropy;d.anisotropy=_}return d}catch(d){r.reject(`Failed to load ${e}`);return}})}getUnusedAssets(){const{scene:e}=this.options;if(!e)return[...this.delLoadArr];const t=new Set,s=this.textureAssets;e.traverse(r=>{const o=r;o.material&&(Array.isArray(o.material)?o.material:[o.material]).forEach(l=>{[l.map,l.emissiveMap,l.normalMap,l.roughnessMap,l.metalnessMap,l.aoMap].forEach(d=>{if(d){const _=this.getSrcByAsset(d,s);_&&t.add(_)}})})});const i=new Set(this.textureAssets.keys());return t.forEach(r=>{i.delete(r)}),[...i,...this.delLoadArr]}dispose(){var e;this.assets.clear(),(e=this.dracoLoader)==null||e.dispose(),this.event.removeAllListeners(),this.delLoadArr.length=0,this.loadObj.length=0}}const Os={prefix:""};class Es extends J{get loader(){return this.controller}constructor(e){super(),this.options=e}addLoader(e,t){const{loaderParams:s}=this.options,i=new Cs(ee(z({},s),{scene:e}));return this.addController(i,t)}removePage(e){super.removePage(e,t=>{t.dispose()})}}class Ts extends I.BaseObject{constructor(e){super(),this.options=z({},e)}create(){var e;this.object3d=(e=this.options.scene)!=null?e:new v.Scene}}function Je(h){let e=!1,t=[];return function(...s){t=s,e||(e=!0,requestAnimationFrame(()=>{e=!1,h(...t)}))}}class bs{constructor(e){var t;this.enabled=!0,this.pickFunctionsMap=new Map,this.pickNodeFunctionsMap=new Map,this.pickFunctionsMapIndex=-1,this.pickNodeFunctionsMapIndex=-1,this.activeObjects=new Set,this.prevActiveObjects=new Set,this.objCallbackMap=new Map,this.pickListener={move:!1,down:!1},this.pencil=e,this.domElement=((t=e.options.controls)==null?void 0:t.domElement)||e.options.container}addPickListener(e){const t=new Set(["move","enter","leave"]),s=new Set(["down","downOutside","click"]),i=r=>{var y;if(!this.enabled)return;r.preventDefault();const o=e==="move"?t:s,n=[];if(this.pickFunctionsMap.forEach(m=>{o.has(m.type)&&n.push(ee(z({},m),{objArr:m.objArr instanceof Function?m.objArr():m.objArr}))}),n.length===0)return;this.activeObjects.clear(),this.objCallbackMap.clear();const l=this.objCallbackMap,d=[];for(const m of n)for(const u of m.objArr){if(!u.object3d||!u.visibleWithAncestors)continue;l.has(u)||(l.set(u,new Map),d.push(u));const f=l.get(u);f.has(m.type)||f.set(m.type,[]),f.get(m.type).push(m.cb)}if(d.length===0)return;const _=d.map(m=>m.object3d);_.forEach(m=>{m.isGroup&&m.traverse(u=>{u instanceof v.Mesh&&_.push(u)})});const p=(y=this.pencil.pick(r,_,!1))==null?void 0:y.intersects;if(!p||p.length===0)e==="down"?this.handleDownOutside(r):e==="move"&&this.handleLeaveEvents(r);else{this.sortIntersections(p);const m=p[0];this.processIntersection(m,r,e)}const E=this.prevActiveObjects;this.prevActiveObjects=this.activeObjects,this.activeObjects=E,this.activeObjects.clear()};this.domElement.addEventListener(`pointer${e}`,Je(i),{passive:!1})}sortIntersections(e){e.sort((t,s)=>t.distance===s.distance?t.object.getObjectById(s.object.id)?1:s.object.getObjectById(t.object.id)?-1:0:t.distance-s.distance)}processIntersection(e,t,s){const i=this.objCallbackMap,r=e.index||-1;let o=e.object;for(;o;){const n=this.pencil.lead.objMap.get(o);n&&i.has(n)&&this.activeObjects.add(n),o=o.parent}s==="move"?this.handleLeaveEvents(t):s==="down"&&this.handleDownOutside(t),this.processObjectHierarchy(t,s,r)}processObjectHierarchy(e,t,s){const i=this.objCallbackMap;let r=!1;const o=()=>{r=!0};for(const n of this.activeObjects){if(r)break;const l=i.get(n);if(l)if(t==="move"){const d=l.get("enter");if(d&&!this.prevActiveObjects.has(n))for(const p of d)p({baseObject:n,mouseEvent:e,sp:o,intersectionIndex:s});const _=l.get("move");if(_)for(const p of _)p({baseObject:n,mouseEvent:e,sp:o,intersectionIndex:s})}else{const d=l.get("down");if(d)for(const p of d)p({baseObject:n,mouseEvent:e,sp:o,intersectionIndex:s});const _=l.get("click");if(_){const p=E=>{E.preventDefault();const y=5;if(!r&&Math.abs(E.clientX-e.clientX)<=y&&Math.abs(E.clientY-e.clientY)<=y)for(const m of _)m({baseObject:n,mouseEvent:e,sp:o,intersectionIndex:s});this.domElement.removeEventListener("pointerup",p)};this.domElement.addEventListener("pointerup",p)}}}}handleLeaveEvents(e){this.objCallbackMap.forEach((s,i)=>{const r=s.get("leave");if(r&&this.prevActiveObjects.has(i)&&!this.activeObjects.has(i))for(const o of r)o({baseObject:i,mouseEvent:e})})}handleDownOutside(e){this.objCallbackMap.forEach((s,i)=>{const r=s.get("downOutside");if(r&&!this.activeObjects.has(i))for(const o of r)o({baseObject:i,mouseEvent:e})})}handlePick(e,t,s){let i=t;i==="mousemove"?i="move":i==="mouseenter"?i="enter":i==="mouseleave"&&(i="leave"),this.pickFunctionsMapIndex+=1;const r=this.pickFunctionsMapIndex;return this.pickFunctionsMap.set(r,{objArr:e,type:i,cb:s}),this.pickListener.move||Array.from(this.pickFunctionsMap.values()).some(n=>["move","enter","leave"].includes(n.type))&&(this.pickListener.move=!0,this.addPickListener("move")),this.pickListener.down||Array.from(this.pickFunctionsMap.values()).some(n=>["down","downOutside","click"].includes(n.type))&&(this.pickListener.down=!0,this.addPickListener("down")),r}removePick(e){this.pickFunctionsMap.delete(e)}handlePickNode(e,t,s){if(t==="downOutside")return console.warn("handlePickNode:err:不支持 downOutside"),-1;this.pickNodeFunctionsMapIndex+=1;const i=this.pickNodeFunctionsMapIndex,r=e instanceof Function?e():e,o=[];for(const n of r){const l=n;l.element.style.pointerEvents="auto";const d=p=>{this.enabled&&(p.preventDefault(),s({baseObject:l,mouseEvent:p}))},_=`pointer${t}`;l.element.addEventListener(_,Je(d),!1),o.push({arr:l,type:_,listener:d})}return this.pickNodeFunctionsMap.set(i,o),i}removePickNode(e){const t=this.pickNodeFunctionsMap.get(e);if(t){for(const s of t)s.arr.element.style.pointerEvents="none",s.arr.element.removeEventListener(s.type,s.listener,!1);this.pickNodeFunctionsMap.delete(e)}}dispose(){this.pickFunctionsMap.clear(),this.pickNodeFunctionsMap.clear(),this.activeObjects.clear(),this.prevActiveObjects.clear(),this.objCallbackMap.clear()}}class xs extends bs{constructor(e,t){super(e),this.objMap=new Map,this.objects=new Map,this.objectsPm=new Map,this.objectNamesToFactories=new Map,this.scene=new Ts({scene:t.scene}),this.mList=t.mList,this.scene.create(),this.scene.lead=this,this.scene.pencil=e,this.scene.mList=this.mList,this.scene.key="Scene",this.scene.object3d.name="场景",this.group=new I.Group,this.group.create(),this.group.lead=this,this.group.pencil=e,this.group.mList=this.mList,this.group.key="@Group",this.group.object3d.name="物体组",this.prefabGroup=new I.Group,this.prefabGroup.create(),this.prefabGroup.lead=this,this.prefabGroup.pencil=e,this.prefabGroup.mList=this.mList,this.prefabGroup.key="@PrefabGroup",this.prefabGroup.object3d.name="预制组",this.scene.add(this.group.object3d,this.prefabGroup.object3d),this.objects.set("@Scene",this.scene),this.objects.set("@Group",this.group),this.objects.set("@PrefabGroup",this.prefabGroup),this.objMap.set(this.scene.object3d,this.scene),this.objMap.set(this.group.object3d,this.group),this.objMap.set(this.prefabGroup.object3d,this.prefabGroup)}get objectsPromise(){return this.objectsPm.values()}init(e){return Object.keys(e).forEach(t=>{const s=class{create(r={}){return new e[t](r)}};this.objectNamesToFactories.set(t,s)}),this}getObject(e,t){e.includes("#")&&console.warn("getObject:err:不支持 #",e);const{key:s}=t||{},i=`${e}${s?`#${s}`:""}`;return this.objects.get(i)}getAllObject(e,t){e.includes("#")&&console.warn("getAllObject:err:不支持 #",e);const{key:s}=t||{},i=`${e}${s?`#${s}`:""}`,r=[];return this.objects.forEach((o,n)=>{(n.startsWith(s?i:`${i}#`)||n===i)&&r.push(o)}),r}draw(e,t,s){return te(this,null,function*(){var r,o,n,l;const i=this.objectNamesToFactories.get(e);if(i){t||(t={}),t.target===void 0&&(t.target=s);const d=t.target,_=(r=t.onTop)!=null?r:0,p=(o=t.prefab)!=null?o:!1,E=(n=t.create)!=null?n:!0,y=new i().create(t);let m;return d===null?m=null:typeof d=="string"?m=this.objects.get(d):(l=d==null?void 0:d.objectType)!=null&&l.startsWith("BaseObject")||d?m=d:p?m=this.prefabGroup:m=this.group,E===!1?y.create=()=>{}:E!==!0&&(y.create=()=>{E(y)}),y.pencil=this.pencil,y.lead=this,y.mList=this.mList,y.prefab=p,y.objectType=`BaseObject#${e}`,y.objectOptions=t,this.setBaseObjectKey(y,t.key?`$t:#${t.key}`:"$t:",m==null?void 0:m.key),this.objectsPm.set(y.key,this.addBaseObject(y,m,_)),yield this.objectsPm.get(y.key),this.objectsPm.delete(y.key),y}throw new Error(`Unrecognized:${e}`)})}setBaseObjectKey(e,t,s){const i=e.objectType,[,r]=i.split("#");let o=t.replace("$t:",r);if(s){const[,n]=s.split("#");o=o.replace("$p:",n)}return this.objects.has(o)&&(o.includes("#")?o+=`-${Le.generateUUID()}`:o+=`#${Le.generateUUID()}`),e.key=o,this.objects.set(o,e),o}updateBaseObjectKey(e,t){var o;let s;for(const[n,l]of this.objects.entries())if(l===e){s=n;break}const i=(o=e.parent)==null?void 0:o.key,r=this.setBaseObjectKey(e,t,i);return s&&this.objects.delete(s),this.pencil.event.emit("updateKey",e,r,s),r}addBaseObject(e,t,s){return te(this,null,function*(){yield e.create(),e.object3d&&(this.mList.proxyBaseObject(e),this.mList.addBaseObjectMap(e),s&&e.setTop(s),t!==null&&(t.add(e.object3d),this.objMap.set(e.object3d,e))),e.render(),this.pencil.event.emit("draw",e)})}erase(...e){[...e].forEach(t=>{const s=[];if(typeof t=="string"){const[i,r]=t.split("#");s.push(...this.getAllObject(i,{key:r}))}else s.push(t);s.forEach(i=>{i.dispose()})}),this.pencil.event.emit("erase",...e)}update(e,t){this.objects.forEach(s=>{s.update(e,t)})}setSize(e,t){this.objects.forEach(s=>{s.resize(e,t)})}eraseAll(){this.group&&(this.objects.forEach(e=>{e.key.startsWith("Node")&&this.erase(e)}),this.erase(this.group))}dispose(){super.dispose(),this.scene.erase(),this.objects.forEach(e=>{e.erase()}),this.objects.clear(),this.objectsPm.clear(),this.objMap.clear(),this.objectNamesToFactories.clear()}}class ws extends J{get lead(){return this.controller}constructor(e){super(),this.options=e}addLead(e,t,s){const{pencil:i}=this.options,r=new xs(i,{scene:e,mList:t});return this.addController(r,s)}removePage(e){super.removePage(e,t=>{t.dispose()})}setPageActive(e){super.setPageActive(e,(t,s)=>{t.enabled=s})}setSize(e,t){this.controllerMap.forEach((s,i)=>{i.setSize(e,t)})}}class Ls{constructor(e){this.materials=new Map,this.materialBaseObjectMap=new Map,this.pencil=e}add(e,t){const s={key:e,userData:{preList:!0},object3d:{material:t}};this.proxyBaseObject(s),this.addBaseObjectMap(s),this.emitObject3dChange()}get(e){const t=this.materials.get(e);return t||console.warn(`Material with key "${e}" not found.`),t}getKey(e){for(const[t,s]of this.materials.entries())if(s===e)return t}addMultiple(e,t){for(const[s,i]of Object.entries(t)){const r=`${e}#${s}`;i&&this.add(r,i)}}getMultiple(e){const t={},s=`${e}#`;let i=!1;for(const[r,o]of this.materials.entries())if(r.startsWith(s)){const n=r.substring(s.length);t[n]=o,i=!0}return i?t:null}copyMultiple(e,t){const s={},i=`${e}#`;for(const[r,o]of this.materials.entries())if(r.startsWith(i)){const n=r.substring(i.length),l=o.clone();s[n]=l;const d=`${t}#${n}`;this.add(d,l)}return s}disposeMaterial(e){const t=new I.ResourceTracker;t.track([e]),t.dispose()}remove(e){const t=this.materials.get(e);t&&this.disposeMaterial(t),this.materials.delete(e),this.emitObject3dChange()}removeByMaterial(e){[...this.materials.entries()].some(([t,s])=>s===e?(this.remove(t),!0):!1)}proxyBaseObject(e){const t=e.object3d,s=i=>new Proxy(i,{set:(r,o,n)=>{if(typeof o=="string"&&!isNaN(Number(o))){const l=Number(o);if(l>=0&&l<r.length){const d=r[l];return this.rmBaseObjectMap(e,d),r[l]=n,this.addBaseObjectMap(e),!0}}return Reflect.set(r,o,n)}});e.object3d=new Proxy(t,{set:(i,r,o)=>{var n;return r==="material"&&!((n=this.pencil.composerController)!=null&&n.bloomComposerRenderIng)?(this.rmBaseObjectMap(e),i.material=o,this.addBaseObjectMap(e),!0):Reflect.set(i,r,o)},get:(i,r)=>{var o;if(r==="material"&&!((o=this.pencil.composerController)!=null&&o.bloomComposerRenderIng)){const n=i.material;if(Array.isArray(n)&&!n.hasOwnProperty("__isProxy")){const l=s(n);Object.defineProperty(l,"__isProxy",{value:!0,enumerable:!1}),i.material=l}}return Reflect.get(i,r)}})}addBaseObjectMap(e){const t=e.object3d;t.material&&((Array.isArray(t.material)?t.material:[t.material]).forEach(i=>{const r=this.materialBaseObjectMap.get(i);r?r.add(e):this.materialBaseObjectMap.set(i,new Set([e]))}),e.userData.preList&&this.materials.set(e.key,t.material))}rmBaseObjectMap(e,t){this.materialBaseObjectMap.forEach((s,i)=>{t&&i!==t||s.has(e)&&(s.delete(e),s.size===0&&(this.materialBaseObjectMap.delete(i),this.disposeMaterial(i)))})}getBaseObjectByMaterial(e){const t=this.materialBaseObjectMap.get(e);if(t){const s=Array.from(t);return s.find(i=>i.userData.preList)||s[0]}return null}emitObject3dChange(){var e;(e=this.pencil)==null||e.event.emit("baseObjectListChange")}dispose(){const e=new I.ResourceTracker;e.track([...this.materials.values()]),e.dispose(),this.materials.clear(),this.materialBaseObjectMap.clear()}}class Ps extends J{get mList(){return this.controller}constructor(e){super(),this.options=e}addMList(e,t){const{pencil:s}=this.options,i=new Ls(s);return this.addController(i,t)}removePage(e){super.removePage(e,t=>{t.dispose()})}}const fe=class fe{constructor(e){var r,o;this.raycaster=new v.Raycaster,this.maxBackufferArea=5760*5760,this.installPlugins=new Map,this._cameraPositon=new v.Vector3,this._cameraTarget=new v.Vector3,this.event=new ge.EventEmitter,this.timer=new vt.Timer,this.userData={},this.pageActiveIndex=0,this.pageCountIndex=0,this.userSetDprCache=1,this.event.setMaxListeners(1/0),(o=(r=this.timer).connect)==null||o.call(r,document),this.options=Ot(fe.options,e,{isMergeableObject:Pe.isPlainObject}),this.userSetDprCache=this.options.renderer.devicePixelRatio;const{container:t,stats:s,transformControls:i}=this.options;if(this.init(),this.options.WebGPUTHREE||this.initComposer(),this.initCSSRenderer(),i&&this.initTransformControls(),s){const n=new Et({horizontal:!1});n.dom.style.position="absolute",n.init(this.renderer),t.appendChild(n.dom),this.stats=n}this.initResizeObserver(),this.tweenUpdateRaf()}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}get loader(){return this.loaderController.loader}get lead(){return this.leadController.lead}get mList(){return this.mListController.mList}tweenUpdateRaf(){ve.update(),this.TweenRaf=requestAnimationFrame(this.tweenUpdateRaf.bind(this))}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.pageCountIndex+1,i=this.cameraController.addPerspectiveCamera(t,s),r=this.sceneController.addScene(e,s);r.add(i),this.controlsController.addCameraControls(i,s),this.loaderController.addLoader(r,s);const o=this.mListController.addMList(null,s);return this.leadController.addLead(r,o,s),this.pageCountIndex=s,s}removePage(e){this.cameraController.removePage(e),this.sceneController.removePage(e),this.controlsController.removePage(e),this.loaderController.removePage(e),this.mListController.removePage(e),this.leadController.removePage(e),this.pageCountIndex===e&&(this.pageCountIndex-=1),this.pageActiveIndex===e&&(this.render(),this.showPage(0))}showPage(e){var s;if(e===this.pageActiveIndex)return;const t=this.scene;this.sceneController.setPageActive(e),t&&((s=this.cssRendererController)==null||s.render(t,this.camera)),this.cameraController.setPageActive(e),this.controlsController.setPageActive(e),this.loaderController.setPageActive(e),this.mListController.setPageActive(e),this.leadController.setPageActive(e),this.pageActiveIndex=e}init(){var g;const{container:e,WebGPUTHREE:t,helper:s,viewHelper:i,renderer:r,controls:o,loader:n}=this.options,{width:l,height:d}=this.getSize(),_=t?new qt({width:l,height:d,renderer:t.WebGPURenderer,rendererParams:Zt}):new Yt({width:l,height:d,rendererParams:ee(z({},r),{antialias:!1})}),p=new Gt({width:l,height:d}),E=new Xt({}),y=new Qt({controlsParams:{domElement:(g=o==null?void 0:o.domElement)!=null?g:_.renderer.domElement}}),m=new Es({loaderParams:z({anisotropy:_.renderer.capabilities.getMaxAnisotropy()},n)}),u=new Ps({pencil:this}),f=new ws({pencil:this});this.sceneController=E,this.cameraController=p,this.controlsController=y,this.rendererController=_,this.loaderController=m,this.mListController=u,this.leadController=f;const a=this.addPage({sceneOptions:this.options.scene,cameraOptions:this.options.camera});if(this.showPage(a),s){const O=new $t({container:e,sceneController:E,cameraController:p});O.add(E.scene),this.helperController=O,i&&O.addViewHelper()}e.appendChild(_.renderer.domElement)}initComposer(){const{bloom:e,bloomParams:t,ssao:s,ssaoParams:i,composer:r}=this.options,o=new gs({rendererController:this.rendererController,sceneController:this.sceneController,cameraController:this.cameraController,composerParams:r});this.composerController=o,e&&o.addBloomPass(z({},t)),s&&o.addSSAOPass(z({},i)),o.addOutputPass()}initCSSRenderer(){const{container:e,css2DRenderer:t,css3DRenderer:s,css2DRendererParams:i,css3DRendererParams:r}=this.options;if(t||s){const o=new rs(e);t&&o.addRenderer("css2d",i),s&&o.addRenderer("css3d",r),this.cssRendererController=o}}initTransformControls(){const e=new Jt({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:o,cssRendererController:n,leadController:l}=this,d=this.renderer.getSize(new v.Vector2);d.x===e&&d.y===t||(r.setSize(e,t),i.setSize(e,t),o==null||o.setSize(e,t),n==null||n.setSize(e,t),l.setSize(e,t),this.installPlugins.forEach(_=>{var p;(p=_.setSize)==null||p.call(_,e,t)}),this.render(),s&&this.event.emit("resize",{width:e,height:t}))}setDevicePixelRatio(e){var n;this.userSetDprCache=e;const{width:t,height:s}=this.getSize();let i=Math.sqrt(this.maxBackufferArea/(t*s));i=(i*100|0)/100;const r=Math.min(e,i);r!==e&&console.warn("maxBackufferArea:",this.maxBackufferArea," the pixel ratio is set to",r);const o=this.renderer.getPixelRatio();r!==o&&(this.rendererController.setPixelRatio(r),(n=this.composerController)==null||n.setPixelRatio(r))}pick(e,t,s=!0){const{raycaster:i,options:r}=this,{container:o}=r,n=new v.Vector2,l=o.getBoundingClientRect();if(n.x=(e.clientX-l.left)/(l.right-l.left)*2-1,n.y=-((e.clientY-l.top)/(l.bottom-l.top))*2+1,this.camera&&this.scene){i.setFromCamera(n,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 s,i,r,o,n,l;if(!this.camera||!this.scene)return;this.timer.update(),ve.update();const e=this.timer.getDelta(),t=this.timer.getElapsed();this.controlsController.update(e,t),this.leadController.update(e,t),this.installPlugins.forEach(d=>{var _;(_=d.update)==null||_.call(d,e,t)}),(s=this.helperController)==null||s.update(e,this.controlsController,this.cameraTarget),(i=this.composerController)!=null&&i.active?this.composerController.render():(r=this.rendererController)==null||r.render(this.scene,this.camera),(o=this.helperController)==null||o.renderViewHelper(this.renderer),(n=this.cssRendererController)==null||n.render(this.scene,this.camera),(l=this.stats)==null||l.update(),this.event.emit("render",{delta:e,elapsed:t})}start(){window.cancelAnimationFrame(this.TweenRaf),this.renderer.setAnimationLoop(this.render.bind(this)),this.event.emit("start")}stop(){this.tweenUpdateRaf(),this.renderer.setAnimationLoop(null),this.event.emit("stop")}autoRotate(e){this.controlsController.autoRotateSpeed=e}showPipViewport(e){this.composerController.pipViewportState=e;let t=this.pipCameraControls;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,t.camera.position.copy(this.camera.position);else{const o=this.cameraController.cloneCamera(31);o.aspect=e.width/e.height,o.updateProjectionMatrix(),t=this.controlsController.addCameraControls(o,this.sceneController.activeIndex),t.addEventListener("update",()=>{this.controls.enabled=!1}),t.addEventListener("sleep",()=>{this.controls.enabled=!0}),this.pipCameraControls=t}t.interactiveArea=r}}dispose(){var e,t,s,i,r,o,n,l,d,_,p,E,y,m;this.stop(),this.timer.dispose(),ve.removeAll(),this.event.removeAllListeners(),(e=this.resizeObserver)==null||e.unobserve(this.options.container),this.installPlugins.forEach(u=>{var f;(f=u.dispose)==null||f.call(u)}),(t=this.controlsController)==null||t.dispose(),(s=this.transformController)==null||s.dispose(),(i=this.cssRendererController)==null||i.dispose(),(r=this.sceneController)==null||r.dispose(),(o=this.cameraController)==null||o.dispose(),(n=this.helperController)==null||n.dispose(),(l=this.composerController)==null||l.dispose(),(d=this.rendererController)==null||d.dispose(),(_=this.loaderController)==null||_.dispose(),(p=this.leadController)==null||p.dispose(),(E=this.mListController)==null||E.dispose(),this.cssRendererController=void 0,this.installPlugins.clear(),(y=this.stats)==null||y.dom.remove(),(m=this.renderer)==null||m.domElement.remove()}};fe.options={stats:pe,helper:pe,viewHelper:pe,controls:!0,transformControls:pe,renderer:Vt,composer:_s,scene:Kt,camera:ht,bloom:!1,bloomParams:fs,ssao:!1,loader:Os,ssaoParams:us,css2DRenderer:!1,css2DRendererParams:z({},$e),css3DRenderer:!1,css3DRendererParams:z({},$e)};let ue=fe;const Ss=Q.ACTION;exports.BaseObject=I.BaseObject;exports.ResourceTracker=I.ResourceTracker;exports.Pencil=ue;exports.cameraControlsAction=Ss;exports.default=ue;
@@ -57,7 +57,7 @@ import { GLTFLoader as Ne } from "three/examples/jsm/loaders/GLTFLoader";
57
57
  import { DRACOLoader as vs } from "three/examples/jsm/loaders/DRACOLoader";
58
58
  import { EXRLoader as ys } from "three/examples/jsm/loaders/EXRLoader";
59
59
  import { LottieLoader as Cs } from "three/examples/jsm/loaders/LottieLoader";
60
- import { makePromiseCreator as Es, generateUUID as He } from "esus-lite";
60
+ import { makePromiseCreator as Os, generateUUID as He } from "esus-lite";
61
61
  const M = {
62
62
  LEFT: 1,
63
63
  RIGHT: 2,
@@ -120,35 +120,35 @@ function he(h, e, t, s, i = 1 / 0, r) {
120
120
  let d = h - e;
121
121
  const _ = e, p = i * s;
122
122
  d = k(d, -p, p), e = h - d;
123
- const E = (t.value + o * d) * r;
124
- t.value = (t.value - o * E) * l;
125
- let v = e + (d + E) * l;
123
+ const O = (t.value + o * d) * r;
124
+ t.value = (t.value - o * O) * l;
125
+ let v = e + (d + O) * l;
126
126
  return _ - h > 0 == v > _ && (v = _, t.value = (v - _) / r), v;
127
127
  }
128
128
  function Be(h, e, t, s, i = 1 / 0, r, o) {
129
129
  s = Math.max(1e-4, s);
130
130
  const n = 2 / s, l = n * r, d = 1 / (1 + l + 0.48 * l * l + 0.235 * l * l * l);
131
- let _ = e.x, p = e.y, E = e.z, v = h.x - _, m = h.y - p, u = h.z - E;
132
- const f = _, a = p, g = E, C = i * s, y = C * C, b = v * v + m * m + u * u;
131
+ let _ = e.x, p = e.y, O = e.z, v = h.x - _, m = h.y - p, u = h.z - O;
132
+ const f = _, a = p, g = O, C = i * s, y = C * C, b = v * v + m * m + u * u;
133
133
  if (b > y) {
134
134
  const ye = Math.sqrt(b);
135
135
  v = v / ye * C, m = m / ye * C, u = u / ye * C;
136
136
  }
137
- _ = h.x - v, p = h.y - m, E = h.z - u;
138
- const O = (t.x + n * v) * r, x = (t.y + n * m) * r, R = (t.z + n * u) * r;
139
- t.x = (t.x - n * O) * d, t.y = (t.y - n * x) * d, t.z = (t.z - n * R) * d, o.x = _ + (v + O) * d, o.y = p + (m + x) * d, o.z = E + (u + R) * d;
137
+ _ = h.x - v, p = h.y - m, O = h.z - u;
138
+ const E = (t.x + n * v) * r, x = (t.y + n * m) * r, R = (t.z + n * u) * r;
139
+ t.x = (t.x - n * E) * d, t.y = (t.y - n * x) * d, t.z = (t.z - n * R) * d, o.x = _ + (v + E) * d, o.y = p + (m + x) * d, o.z = O + (u + R) * d;
140
140
  const V = f - h.x, le = a - h.y, wt = g - h.z, xt = o.x - f, Lt = o.y - a, Pt = o.z - g;
141
141
  return V * xt + le * Lt + wt * Pt > 0 && (o.x = f, o.y = a, o.z = g, t.x = (o.x - f) / r, t.y = (o.y - a) / r, t.z = (o.z - g) / r), o;
142
142
  }
143
- function Ee(h, e) {
143
+ function Oe(h, e) {
144
144
  e.set(0, 0), h.forEach((t) => {
145
145
  e.x += t.clientX, e.y += t.clientY;
146
146
  }), e.x /= h.length, e.y /= h.length;
147
147
  }
148
- function Oe(h, e) {
148
+ function Ee(h, e) {
149
149
  return j(h) ? (console.warn(`${e} is not supported in OrthographicCamera`), !0) : !1;
150
150
  }
151
- class Os {
151
+ class Es {
152
152
  constructor() {
153
153
  this._listeners = {};
154
154
  }
@@ -214,7 +214,7 @@ class Os {
214
214
  }
215
215
  const ce = 1 / 8, Ts = /Mac/.test(navigator.platform);
216
216
  let T, Ve, de, Te, D, w, L, X, ne, F, N, Z, Ye, Ze, z, ae, $, We, be, Ge, we, xe, pe;
217
- class J extends Os {
217
+ class J extends Es {
218
218
  static install(e) {
219
219
  T = e.THREE, Ve = Object.freeze(new T.Vector3(0, 0, 0)), de = Object.freeze(new T.Vector3(0, 1, 0)), Te = Object.freeze(new T.Vector3(0, 0, 1)), D = new T.Vector2(), w = new T.Vector3(), L = new T.Vector3(), X = new T.Vector3(), ne = new T.Vector3(), F = new T.Vector3(), N = new T.Vector3(), Z = new T.Vector3(), Ye = new T.Vector3(), Ze = new T.Vector3(), z = new T.Spherical(), ae = new T.Spherical(), $ = new T.Box3(), We = new T.Box3(), be = new T.Sphere(), Ge = new T.Quaternion(), we = new T.Quaternion(), xe = new T.Matrix4(), pe = new T.Raycaster();
220
220
  }
@@ -245,13 +245,13 @@ class J extends Os {
245
245
  constructor(e, t) {
246
246
  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 = 0.01, this.maxZoom = 1 / 0, this.smoothTime = 0.25, this.draggingSmoothTime = 0.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.boundaryFriction = 0, this.restThreshold = 0.01, this.colliderMeshes = [], this.cancel = () => {
247
247
  }, this._enabled = !0, this._state = c.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 = G.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 = (a, g, C, y) => {
248
- let b, O;
248
+ let b, E;
249
249
  if (Y(this._camera)) {
250
250
  const x = w.copy(this._camera.position).sub(this._target), R = this._camera.getEffectiveFOV() * ie, V = x.length() * Math.tan(R * 0.5);
251
- b = this.truckSpeed * a * V / this._elementRect.height, O = this.truckSpeed * g * V / this._elementRect.height;
251
+ b = this.truckSpeed * a * V / this._elementRect.height, E = this.truckSpeed * g * V / this._elementRect.height;
252
252
  } else if (j(this._camera)) {
253
253
  const x = this._camera;
254
- b = this.truckSpeed * a * (x.right - x.left) / x.zoom / this._elementRect.width, O = this.truckSpeed * g * (x.top - x.bottom) / x.zoom / this._elementRect.height;
254
+ b = this.truckSpeed * a * (x.right - x.left) / x.zoom / this._elementRect.width, E = this.truckSpeed * g * (x.top - x.bottom) / x.zoom / this._elementRect.height;
255
255
  } else
256
256
  return;
257
257
  y ? (C ? this.setFocalOffset(
@@ -259,25 +259,25 @@ class J extends Os {
259
259
  this._focalOffsetEnd.y,
260
260
  this._focalOffsetEnd.z,
261
261
  !0
262
- ) : this.truck(b, 0, !0), this.forward(-O, !0)) : C ? this.setFocalOffset(
262
+ ) : this.truck(b, 0, !0), this.forward(-E, !0)) : C ? this.setFocalOffset(
263
263
  this._focalOffsetEnd.x + b,
264
- this._focalOffsetEnd.y + O,
264
+ this._focalOffsetEnd.y + E,
265
265
  this._focalOffsetEnd.z,
266
266
  !0
267
- ) : this.truck(b, O, !0);
267
+ ) : this.truck(b, E, !0);
268
268
  }, this._rotateInternal = (a, g) => {
269
269
  const C = K * this.azimuthRotateSpeed * a / this._elementRect.height, y = K * this.polarRotateSpeed * g / this._elementRect.height;
270
270
  this.rotate(C, y, !0);
271
271
  }, this._dollyInternal = (a, g, C) => {
272
- const y = Math.pow(0.95, -a * this.dollySpeed), b = this._sphericalEnd.radius, O = this._sphericalEnd.radius * y, x = k(
273
- O,
272
+ const y = Math.pow(0.95, -a * this.dollySpeed), b = this._sphericalEnd.radius, E = this._sphericalEnd.radius * y, x = k(
273
+ E,
274
274
  this.minDistance,
275
275
  this.maxDistance
276
- ), R = x - O;
277
- this.infinityDolly && this.dollyToCursor ? this._dollyToNoClamp(O, !0) : this.infinityDolly && !this.dollyToCursor ? (this.dollyInFixed(R, !0), this._dollyToNoClamp(x, !0)) : this._dollyToNoClamp(x, !0), this.dollyToCursor && (this._changedDolly += (this.infinityDolly ? O : x) - b, this._dollyControlCoord.set(g, C)), this._lastDollyDirection = Math.sign(-a);
276
+ ), R = x - E;
277
+ this.infinityDolly && this.dollyToCursor ? this._dollyToNoClamp(E, !0) : this.infinityDolly && !this.dollyToCursor ? (this.dollyInFixed(R, !0), this._dollyToNoClamp(x, !0)) : this._dollyToNoClamp(x, !0), this.dollyToCursor && (this._changedDolly += (this.infinityDolly ? E : x) - b, this._dollyControlCoord.set(g, C)), this._lastDollyDirection = Math.sign(-a);
278
278
  }, this._zoomInternal = (a, g, C) => {
279
- const y = Math.pow(0.95, a * this.dollySpeed), b = this._zoom, O = this._zoom * y;
280
- this.zoomTo(O, !0), this.dollyToCursor && (this._changedZoom += O - b, this._dollyControlCoord.set(g, C));
279
+ const y = Math.pow(0.95, a * this.dollySpeed), b = this._zoom, E = this._zoom * y;
280
+ this.zoomTo(E, !0), this.dollyToCursor && (this._changedZoom += E - b, this._dollyControlCoord.set(g, C));
281
281
  }, typeof T == "undefined" && console.error(
282
282
  "camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."
283
283
  ), this._camera = e, this._yAxisUpSpace = new T.Quaternion().setFromUnitVectors(
@@ -306,8 +306,8 @@ class J extends Os {
306
306
  const s = new T.Vector2(), i = new T.Vector2(), r = new T.Vector2(), o = (a) => {
307
307
  if (!this._enabled || !this._domElement) return;
308
308
  if (this._interactiveArea.left !== 0 || this._interactiveArea.top !== 0 || this._interactiveArea.width !== 1 || this._interactiveArea.height !== 1) {
309
- const y = this._domElement.getBoundingClientRect(), b = (a.clientX - y.left) / (y.right - y.left), O = (a.clientY - y.top) / (y.bottom - y.top);
310
- if (b < this._interactiveArea.left || b > this._interactiveArea.right || O < this._interactiveArea.top || O > this._interactiveArea.bottom)
309
+ const y = this._domElement.getBoundingClientRect(), b = (a.clientX - y.left) / (y.right - y.left), E = (a.clientY - y.top) / (y.bottom - y.top);
310
+ if (b < this._interactiveArea.left || b > this._interactiveArea.right || E < this._interactiveArea.top || E > this._interactiveArea.bottom)
311
311
  return;
312
312
  }
313
313
  const g = a.pointerType !== "mouse" ? null : (a.buttons & M.LEFT) === M.LEFT ? M.LEFT : (a.buttons & M.MIDDLE) === M.MIDDLE ? M.MIDDLE : (a.buttons & M.RIGHT) === M.RIGHT ? M.RIGHT : null;
@@ -336,7 +336,7 @@ class J extends Os {
336
336
  "pointermove",
337
337
  n,
338
338
  { passive: !1 }
339
- ), this._domElement.ownerDocument.addEventListener("pointerup", l), this._isDragging = !0, E(a);
339
+ ), this._domElement.ownerDocument.addEventListener("pointerup", l), this._isDragging = !0, O(a);
340
340
  }, n = (a) => {
341
341
  a.cancelable && a.preventDefault();
342
342
  const g = a.pointerId, C = this._lockedPointer || this._findPointerById(g);
@@ -384,13 +384,13 @@ class J extends Os {
384
384
  const _ = (a) => {
385
385
  if (!this._domElement || !this._enabled || this.mouseButtons.wheel === c.NONE) return;
386
386
  if (this._interactiveArea.left !== 0 || this._interactiveArea.top !== 0 || this._interactiveArea.width !== 1 || this._interactiveArea.height !== 1) {
387
- const O = this._domElement.getBoundingClientRect(), x = (a.clientX - O.left) / (O.right - O.left), R = (a.clientY - O.top) / (O.bottom - O.top);
387
+ const E = this._domElement.getBoundingClientRect(), x = (a.clientX - E.left) / (E.right - E.left), R = (a.clientY - E.top) / (E.bottom - E.top);
388
388
  if (x < this._interactiveArea.left || x > this._interactiveArea.right || R < this._interactiveArea.top || R > this._interactiveArea.bottom)
389
389
  return;
390
390
  }
391
391
  if (a.preventDefault(), this.dollyToCursor || this.mouseButtons.wheel === c.ROTATE || this.mouseButtons.wheel === c.TRUCK) {
392
- const O = performance.now();
393
- d - O < 1e3 && this._getClientRect(this._elementRect), d = O;
392
+ const E = performance.now();
393
+ d - E < 1e3 && this._getClientRect(this._elementRect), d = E;
394
394
  }
395
395
  const g = Ts ? -1 : -3, C = a.deltaMode === 1 || a.ctrlKey ? a.deltaY / g : a.deltaY / (g * 10), y = this.dollyToCursor ? (a.clientX - this._elementRect.x) / this._elementRect.width * 2 - 1 : 0, b = this.dollyToCursor ? (a.clientY - this._elementRect.y) / this._elementRect.height * -2 + 1 : 0;
396
396
  switch (this.mouseButtons.wheel) {
@@ -436,13 +436,13 @@ class J extends Os {
436
436
  }
437
437
  a.preventDefault();
438
438
  }
439
- }, E = (a) => {
439
+ }, O = (a) => {
440
440
  if (!this._enabled) return;
441
- if (Ee(this._activePointers, D), this._getClientRect(this._elementRect), s.copy(D), i.copy(D), this._activePointers.length >= 2) {
441
+ if (Oe(this._activePointers, D), this._getClientRect(this._elementRect), s.copy(D), i.copy(D), this._activePointers.length >= 2) {
442
442
  const C = D.x - this._activePointers[1].clientX, y = D.y - this._activePointers[1].clientY, b = Math.sqrt(C * C + y * y);
443
443
  r.set(0, b);
444
- const O = (this._activePointers[0].clientX + this._activePointers[1].clientX) * 0.5, x = (this._activePointers[0].clientY + this._activePointers[1].clientY) * 0.5;
445
- i.set(O, x);
444
+ const E = (this._activePointers[0].clientX + this._activePointers[1].clientX) * 0.5, x = (this._activePointers[0].clientY + this._activePointers[1].clientY) * 0.5;
445
+ i.set(E, x);
446
446
  }
447
447
  if (this._state = 0, !a)
448
448
  this._lockedPointer && (this._state = this._state | this.mouseButtons.left);
@@ -463,29 +463,29 @@ class J extends Os {
463
463
  ((this._state & c.ROTATE) === c.ROTATE || (this._state & c.TOUCH_ROTATE) === c.TOUCH_ROTATE || (this._state & c.TOUCH_DOLLY_ROTATE) === c.TOUCH_DOLLY_ROTATE || (this._state & c.TOUCH_ZOOM_ROTATE) === c.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 & c.TRUCK) === c.TRUCK || (this._state & c.SCREEN_PAN) === c.SCREEN_PAN || (this._state & c.TOUCH_TRUCK) === c.TOUCH_TRUCK || (this._state & c.TOUCH_SCREEN_PAN) === c.TOUCH_SCREEN_PAN || (this._state & c.TOUCH_DOLLY_TRUCK) === c.TOUCH_DOLLY_TRUCK || (this._state & c.TOUCH_DOLLY_SCREEN_PAN) === c.TOUCH_DOLLY_SCREEN_PAN || (this._state & c.TOUCH_ZOOM_TRUCK) === c.TOUCH_ZOOM_TRUCK || (this._state & c.TOUCH_ZOOM_SCREEN_PAN) === c.TOUCH_DOLLY_SCREEN_PAN) && (this._targetEnd.copy(this._target), this._targetVelocity.set(0, 0, 0)), ((this._state & c.DOLLY) === c.DOLLY || (this._state & c.TOUCH_DOLLY) === c.TOUCH_DOLLY || (this._state & c.TOUCH_DOLLY_TRUCK) === c.TOUCH_DOLLY_TRUCK || (this._state & c.TOUCH_DOLLY_SCREEN_PAN) === c.TOUCH_DOLLY_SCREEN_PAN || (this._state & c.TOUCH_DOLLY_OFFSET) === c.TOUCH_DOLLY_OFFSET || (this._state & c.TOUCH_DOLLY_ROTATE) === c.TOUCH_DOLLY_ROTATE) && (this._sphericalEnd.radius = this._spherical.radius, this._radiusVelocity.value = 0), ((this._state & c.ZOOM) === c.ZOOM || (this._state & c.TOUCH_ZOOM) === c.TOUCH_ZOOM || (this._state & c.TOUCH_ZOOM_TRUCK) === c.TOUCH_ZOOM_TRUCK || (this._state & c.TOUCH_ZOOM_SCREEN_PAN) === c.TOUCH_ZOOM_SCREEN_PAN || (this._state & c.TOUCH_ZOOM_OFFSET) === c.TOUCH_ZOOM_OFFSET || (this._state & c.TOUCH_ZOOM_ROTATE) === c.TOUCH_ZOOM_ROTATE) && (this._zoomEnd = this._zoom, this._zoomVelocity.value = 0), ((this._state & c.OFFSET) === c.OFFSET || (this._state & c.TOUCH_OFFSET) === c.TOUCH_OFFSET || (this._state & c.TOUCH_DOLLY_OFFSET) === c.TOUCH_DOLLY_OFFSET || (this._state & c.TOUCH_ZOOM_OFFSET) === c.TOUCH_ZOOM_OFFSET) && (this._focalOffsetEnd.copy(this._focalOffset), this._focalOffsetVelocity.set(0, 0, 0)), this.dispatchEvent({ type: "controlstart" });
464
464
  }, v = () => {
465
465
  if (!this._enabled || !this._dragNeedsUpdate) return;
466
- this._dragNeedsUpdate = !1, Ee(this._activePointers, D);
466
+ this._dragNeedsUpdate = !1, Oe(this._activePointers, D);
467
467
  const g = this._domElement && this._domElement.ownerDocument.pointerLockElement === this._domElement ? this._lockedPointer || this._activePointers[0] : null, C = g ? -g.deltaX : i.x - D.x, y = g ? -g.deltaY : i.y - D.y;
468
468
  if (i.copy(D), ((this._state & c.ROTATE) === c.ROTATE || (this._state & c.TOUCH_ROTATE) === c.TOUCH_ROTATE || (this._state & c.TOUCH_DOLLY_ROTATE) === c.TOUCH_DOLLY_ROTATE || (this._state & c.TOUCH_ZOOM_ROTATE) === c.TOUCH_ZOOM_ROTATE) && (this._rotateInternal(C, y), this._isUserControllingRotate = !0), (this._state & c.DOLLY) === c.DOLLY || (this._state & c.ZOOM) === c.ZOOM) {
469
- const b = 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, x = this.dollyDragInverted ? -1 : 1;
469
+ const b = this.dollyToCursor ? (s.x - this._elementRect.x) / this._elementRect.width * 2 - 1 : 0, E = this.dollyToCursor ? (s.y - this._elementRect.y) / this._elementRect.height * -2 + 1 : 0, x = this.dollyDragInverted ? -1 : 1;
470
470
  (this._state & c.DOLLY) === c.DOLLY ? (this._dollyInternal(
471
471
  x * y * ce,
472
472
  b,
473
- O
473
+ E
474
474
  ), this._isUserControllingDolly = !0) : (this._zoomInternal(
475
475
  x * y * ce,
476
476
  b,
477
- O
477
+ E
478
478
  ), this._isUserControllingZoom = !0);
479
479
  }
480
480
  if ((this._state & c.TOUCH_DOLLY) === c.TOUCH_DOLLY || (this._state & c.TOUCH_ZOOM) === c.TOUCH_ZOOM || (this._state & c.TOUCH_DOLLY_TRUCK) === c.TOUCH_DOLLY_TRUCK || (this._state & c.TOUCH_ZOOM_TRUCK) === c.TOUCH_ZOOM_TRUCK || (this._state & c.TOUCH_DOLLY_SCREEN_PAN) === c.TOUCH_DOLLY_SCREEN_PAN || (this._state & c.TOUCH_ZOOM_SCREEN_PAN) === c.TOUCH_ZOOM_SCREEN_PAN || (this._state & c.TOUCH_DOLLY_OFFSET) === c.TOUCH_DOLLY_OFFSET || (this._state & c.TOUCH_ZOOM_OFFSET) === c.TOUCH_ZOOM_OFFSET || (this._state & c.TOUCH_DOLLY_ROTATE) === c.TOUCH_DOLLY_ROTATE || (this._state & c.TOUCH_ZOOM_ROTATE) === c.TOUCH_ZOOM_ROTATE) {
481
- const b = D.x - this._activePointers[1].clientX, O = D.y - this._activePointers[1].clientY, x = Math.sqrt(b * b + O * O), R = r.y - x;
481
+ const b = D.x - this._activePointers[1].clientX, E = D.y - this._activePointers[1].clientY, x = Math.sqrt(b * b + E * E), R = r.y - x;
482
482
  r.set(0, x);
483
483
  const V = this.dollyToCursor ? (i.x - this._elementRect.x) / this._elementRect.width * 2 - 1 : 0, le = this.dollyToCursor ? (i.y - this._elementRect.y) / this._elementRect.height * -2 + 1 : 0;
484
484
  (this._state & c.TOUCH_DOLLY) === c.TOUCH_DOLLY || (this._state & c.TOUCH_DOLLY_ROTATE) === c.TOUCH_DOLLY_ROTATE || (this._state & c.TOUCH_DOLLY_TRUCK) === c.TOUCH_DOLLY_TRUCK || (this._state & c.TOUCH_DOLLY_SCREEN_PAN) === c.TOUCH_DOLLY_SCREEN_PAN || (this._state & c.TOUCH_DOLLY_OFFSET) === c.TOUCH_DOLLY_OFFSET ? (this._dollyInternal(R * ce, V, le), this._isUserControllingDolly = !0) : (this._zoomInternal(R * ce, V, le), this._isUserControllingZoom = !0);
485
485
  }
486
486
  ((this._state & c.TRUCK) === c.TRUCK || (this._state & c.TOUCH_TRUCK) === c.TOUCH_TRUCK || (this._state & c.TOUCH_DOLLY_TRUCK) === c.TOUCH_DOLLY_TRUCK || (this._state & c.TOUCH_ZOOM_TRUCK) === c.TOUCH_ZOOM_TRUCK) && (this._truckInternal(C, y, !1, !1), this._isUserControllingTruck = !0), ((this._state & c.SCREEN_PAN) === c.SCREEN_PAN || (this._state & c.TOUCH_SCREEN_PAN) === c.TOUCH_SCREEN_PAN || (this._state & c.TOUCH_DOLLY_SCREEN_PAN) === c.TOUCH_DOLLY_SCREEN_PAN || (this._state & c.TOUCH_ZOOM_SCREEN_PAN) === c.TOUCH_ZOOM_SCREEN_PAN) && (this._truckInternal(C, y, !1, !0), this._isUserControllingTruck = !0), ((this._state & c.OFFSET) === c.OFFSET || (this._state & c.TOUCH_OFFSET) === c.TOUCH_OFFSET || (this._state & c.TOUCH_DOLLY_OFFSET) === c.TOUCH_DOLLY_OFFSET || (this._state & c.TOUCH_ZOOM_OFFSET) === c.TOUCH_ZOOM_OFFSET) && (this._truckInternal(C, y, !0, !1), this._isUserControllingOffset = !0), this.dispatchEvent({ type: "control" });
487
487
  }, m = () => {
488
- Ee(this._activePointers, D), i.copy(D), 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(
488
+ Oe(this._activePointers, D), i.copy(D), 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(
489
489
  "pointermove",
490
490
  n,
491
491
  { passive: !1 }
@@ -519,7 +519,7 @@ class J extends Os {
519
519
  "pointermove",
520
520
  n,
521
521
  { passive: !1 }
522
- ), this._domElement.ownerDocument.addEventListener("pointerup", l), E());
522
+ ), this._domElement.ownerDocument.addEventListener("pointerup", l), O());
523
523
  }, this.unlockPointer = () => {
524
524
  var a, g, C;
525
525
  this._lockedPointer !== null && (this._disposePointer(this._lockedPointer), this._lockedPointer = null), (a = this._domElement) === null || a === void 0 || a.ownerDocument.exitPointerLock(), (g = this._domElement) === null || g === void 0 || g.ownerDocument.removeEventListener(
@@ -988,10 +988,10 @@ class J extends Os {
988
988
  ), Promise.resolve());
989
989
  const _ = je(this._sphericalEnd.theta, Ie), p = je(this._sphericalEnd.phi, Ie);
990
990
  l.push(this.rotateTo(_, p, t));
991
- const E = w.setFromSpherical(this._sphericalEnd).normalize(), v = Ge.setFromUnitVectors(E, Te), m = P(Math.abs(E.y), 1);
991
+ const O = w.setFromSpherical(this._sphericalEnd).normalize(), v = Ge.setFromUnitVectors(O, Te), m = P(Math.abs(O.y), 1);
992
992
  m && v.multiply(we.setFromAxisAngle(de, _)), v.multiply(this._yAxisUpSpaceInverse);
993
993
  const u = We.makeEmpty();
994
- L.copy(d.min).applyQuaternion(v), u.expandByPoint(L), L.copy(d.min).setX(d.max.x).applyQuaternion(v), u.expandByPoint(L), L.copy(d.min).setY(d.max.y).applyQuaternion(v), u.expandByPoint(L), L.copy(d.max).setZ(d.min.z).applyQuaternion(v), u.expandByPoint(L), L.copy(d.min).setZ(d.max.z).applyQuaternion(v), u.expandByPoint(L), L.copy(d.max).setY(d.min.y).applyQuaternion(v), u.expandByPoint(L), L.copy(d.max).setX(d.min.x).applyQuaternion(v), u.expandByPoint(L), L.copy(d.max).applyQuaternion(v), u.expandByPoint(L), u.min.x -= i, u.min.y -= o, u.max.x += r, u.max.y += n, v.setFromUnitVectors(Te, E), m && v.premultiply(we.invert()), v.premultiply(this._yAxisUpSpace);
994
+ L.copy(d.min).applyQuaternion(v), u.expandByPoint(L), L.copy(d.min).setX(d.max.x).applyQuaternion(v), u.expandByPoint(L), L.copy(d.min).setY(d.max.y).applyQuaternion(v), u.expandByPoint(L), L.copy(d.max).setZ(d.min.z).applyQuaternion(v), u.expandByPoint(L), L.copy(d.min).setZ(d.max.z).applyQuaternion(v), u.expandByPoint(L), L.copy(d.max).setY(d.min.y).applyQuaternion(v), u.expandByPoint(L), L.copy(d.max).setX(d.min.x).applyQuaternion(v), u.expandByPoint(L), L.copy(d.max).applyQuaternion(v), u.expandByPoint(L), u.min.x -= i, u.min.y -= o, u.max.x += r, u.max.y += n, v.setFromUnitVectors(Te, O), m && v.premultiply(we.invert()), v.premultiply(this._yAxisUpSpace);
995
995
  const f = u.getSize(w), a = u.getCenter(L).applyQuaternion(v);
996
996
  if (Y(this._camera)) {
997
997
  const g = this.getDistanceToFitBox(
@@ -1085,13 +1085,13 @@ class J extends Os {
1085
1085
  * @param enableTransition
1086
1086
  * @category Methods
1087
1087
  */
1088
- lerpLookAt(e, t, s, i, r, o, n, l, d, _, p, E, v, m = !1) {
1088
+ lerpLookAt(e, t, s, i, r, o, n, l, d, _, p, O, v, m = !1) {
1089
1089
  this._isUserControllingRotate = !1, this._isUserControllingDolly = !1, this._isUserControllingTruck = !1, this._lastDollyDirection = G.NONE, this._changedDolly = 0;
1090
1090
  const u = w.set(i, r, o), f = L.set(e, t, s);
1091
1091
  z.setFromVector3(
1092
1092
  f.sub(u).applyQuaternion(this._yAxisUpSpace)
1093
1093
  );
1094
- const a = X.set(_, p, E), g = L.set(n, l, d);
1094
+ const a = X.set(_, p, O), g = L.set(n, l, d);
1095
1095
  ae.setFromVector3(
1096
1096
  g.sub(a).applyQuaternion(this._yAxisUpSpace)
1097
1097
  ), this._targetEnd.copy(u.lerp(a, v));
@@ -1101,7 +1101,7 @@ class J extends Os {
1101
1101
  z.phi + y * v,
1102
1102
  z.theta + C * v
1103
1103
  ), this.normalizeRotations(), this._needsUpdate = !0, m || (this._target.copy(this._targetEnd), this._spherical.copy(this._sphericalEnd));
1104
- const O = !m || P(this._target.x, this._targetEnd.x, this.restThreshold) && P(this._target.y, this._targetEnd.y, this.restThreshold) && P(this._target.z, this._targetEnd.z, this.restThreshold) && P(
1104
+ const E = !m || P(this._target.x, this._targetEnd.x, this.restThreshold) && P(this._target.y, this._targetEnd.y, this.restThreshold) && P(this._target.z, this._targetEnd.z, this.restThreshold) && P(
1105
1105
  this._spherical.theta,
1106
1106
  this._sphericalEnd.theta,
1107
1107
  this.restThreshold
@@ -1114,7 +1114,7 @@ class J extends Os {
1114
1114
  this._sphericalEnd.radius,
1115
1115
  this.restThreshold
1116
1116
  );
1117
- return this._createOnRestPromise(O);
1117
+ return this._createOnRestPromise(E);
1118
1118
  }
1119
1119
  /**
1120
1120
  * Set angle and distance by given position.
@@ -1236,7 +1236,7 @@ class J extends Os {
1236
1236
  * @category Methods
1237
1237
  */
1238
1238
  getDistanceToFitBox(e, t, s, i = !1) {
1239
- if (Oe(this._camera, "getDistanceToFitBox"))
1239
+ if (Ee(this._camera, "getDistanceToFitBox"))
1240
1240
  return this._spherical.radius;
1241
1241
  const r = e / t, o = this._camera.getEffectiveFOV() * ie, n = this._camera.aspect;
1242
1242
  return ((i ? r > n : r < n) ? t : e / n) * 0.5 / Math.tan(o * 0.5) + s * 0.5;
@@ -1248,7 +1248,7 @@ class J extends Os {
1248
1248
  * @category Methods
1249
1249
  */
1250
1250
  getDistanceToFitSphere(e) {
1251
- if (Oe(this._camera, "getDistanceToFitSphere"))
1251
+ if (Ee(this._camera, "getDistanceToFitSphere"))
1252
1252
  return this._spherical.radius;
1253
1253
  const t = this._camera.getEffectiveFOV() * ie, s = Math.atan(Math.tan(t * 0.5) * this._camera.aspect) * 2, i = 1 < this._camera.aspect ? t : s;
1254
1254
  return e / Math.sin(i * 0.5);
@@ -1455,16 +1455,16 @@ class J extends Os {
1455
1455
  }
1456
1456
  if (this.dollyToCursor) {
1457
1457
  if (Y(this._camera) && this._changedDolly !== 0) {
1458
- const p = this._spherical.radius - this._lastDistance, E = this._camera, v = this._getCameraDirection(ne), m = w.copy(v).cross(E.up).normalize();
1458
+ const p = this._spherical.radius - this._lastDistance, O = this._camera, v = this._getCameraDirection(ne), m = w.copy(v).cross(O.up).normalize();
1459
1459
  m.lengthSq() === 0 && (m.x = 1);
1460
- const u = L.crossVectors(m, v), f = this._sphericalEnd.radius * Math.tan(E.getEffectiveFOV() * ie * 0.5), g = (this._sphericalEnd.radius - p - this._sphericalEnd.radius) / this._sphericalEnd.radius, C = X.copy(this._targetEnd).add(
1460
+ const u = L.crossVectors(m, v), f = this._sphericalEnd.radius * Math.tan(O.getEffectiveFOV() * ie * 0.5), g = (this._sphericalEnd.radius - p - this._sphericalEnd.radius) / this._sphericalEnd.radius, C = X.copy(this._targetEnd).add(
1461
1461
  m.multiplyScalar(
1462
- this._dollyControlCoord.x * f * E.aspect
1462
+ this._dollyControlCoord.x * f * O.aspect
1463
1463
  )
1464
1464
  ).add(
1465
1465
  u.multiplyScalar(this._dollyControlCoord.y * f)
1466
- ), y = w.copy(this._targetEnd).lerp(C, g), b = this._lastDollyDirection === G.IN && this._spherical.radius <= this.minDistance, O = this._lastDollyDirection === G.OUT && this.maxDistance <= this._spherical.radius;
1467
- if (this.infinityDolly && (b || O)) {
1466
+ ), y = w.copy(this._targetEnd).lerp(C, g), b = this._lastDollyDirection === G.IN && this._spherical.radius <= this.minDistance, E = this._lastDollyDirection === G.OUT && this.maxDistance <= this._spherical.radius;
1467
+ if (this.infinityDolly && (b || E)) {
1468
1468
  this._sphericalEnd.radius -= p, this._spherical.radius -= p;
1469
1469
  const R = L.copy(v).multiplyScalar(-p);
1470
1470
  y.add(R);
@@ -1473,14 +1473,14 @@ class J extends Os {
1473
1473
  const x = L.subVectors(y, this._targetEnd);
1474
1474
  this._targetEnd.copy(y), this._target.add(x), this._changedDolly -= p, A(this._changedDolly) && (this._changedDolly = 0);
1475
1475
  } else if (j(this._camera) && this._changedZoom !== 0) {
1476
- const p = this._zoom - this._lastZoom, E = this._camera, v = w.set(
1476
+ const p = this._zoom - this._lastZoom, O = this._camera, v = w.set(
1477
1477
  this._dollyControlCoord.x,
1478
1478
  this._dollyControlCoord.y,
1479
- (E.near + E.far) / (E.near - E.far)
1480
- ).unproject(E), m = L.set(0, 0, -1).applyQuaternion(E.quaternion), u = X.copy(v).add(m.multiplyScalar(-v.dot(E.up))), a = -(this._zoom - p - this._zoom) / this._zoom, g = this._getCameraDirection(ne), C = this._targetEnd.dot(g), y = w.copy(this._targetEnd).lerp(u, a), b = y.dot(g), O = g.multiplyScalar(
1479
+ (O.near + O.far) / (O.near - O.far)
1480
+ ).unproject(O), m = L.set(0, 0, -1).applyQuaternion(O.quaternion), u = X.copy(v).add(m.multiplyScalar(-v.dot(O.up))), a = -(this._zoom - p - this._zoom) / this._zoom, g = this._getCameraDirection(ne), C = this._targetEnd.dot(g), y = w.copy(this._targetEnd).lerp(u, a), b = y.dot(g), E = g.multiplyScalar(
1481
1481
  b - C
1482
1482
  );
1483
- y.sub(O), this._boundary.clampPoint(y, y);
1483
+ y.sub(E), this._boundary.clampPoint(y, y);
1484
1484
  const x = L.subVectors(y, this._targetEnd);
1485
1485
  this._targetEnd.copy(y), this._target.add(x), this._changedZoom -= p, A(this._changedZoom) && (this._changedZoom = 0);
1486
1486
  }
@@ -1615,7 +1615,7 @@ class J extends Os {
1615
1615
  // lateUpdate
1616
1616
  _collisionTest() {
1617
1617
  let e = 1 / 0;
1618
- if (!(this.colliderMeshes.length >= 1) || Oe(this._camera, "_collisionTest"))
1618
+ if (!(this.colliderMeshes.length >= 1) || Ee(this._camera, "_collisionTest"))
1619
1619
  return e;
1620
1620
  const s = this._getTargetDirection(ne);
1621
1621
  xe.lookAt(Ve, s, this._camera.up);
@@ -1703,7 +1703,7 @@ class J extends Os {
1703
1703
  const l = n.geometry.clone();
1704
1704
  l.applyMatrix4(n.matrixWorld);
1705
1705
  const _ = l.attributes.position;
1706
- for (let p = 0, E = _.count; p < E; p++)
1706
+ for (let p = 0, O = _.count; p < O; p++)
1707
1707
  w.fromBufferAttribute(_, p), r = Math.max(r, i.distanceToSquared(w));
1708
1708
  }), s.radius = Math.sqrt(r), s;
1709
1709
  }
@@ -1781,7 +1781,7 @@ S.prototype.emit = function(e) {
1781
1781
  if (typeof l == "function")
1782
1782
  Ke(l, this, t);
1783
1783
  else
1784
- for (var d = l.length, _ = Ot(l, d), s = 0; s < d; ++s)
1784
+ for (var d = l.length, _ = Et(l, d), s = 0; s < d; ++s)
1785
1785
  Ke(_[s], this, t);
1786
1786
  return !0;
1787
1787
  };
@@ -1866,7 +1866,7 @@ function Ct(h, e, t) {
1866
1866
  if (s === void 0)
1867
1867
  return [];
1868
1868
  var i = s[e];
1869
- return i === void 0 ? [] : typeof i == "function" ? t ? [i.listener || i] : [i] : t ? Ls(i) : Ot(i, i.length);
1869
+ return i === void 0 ? [] : typeof i == "function" ? t ? [i.listener || i] : [i] : t ? Ls(i) : Et(i, i.length);
1870
1870
  }
1871
1871
  S.prototype.listeners = function(e) {
1872
1872
  return Ct(this, e, !0);
@@ -1875,10 +1875,10 @@ S.prototype.rawListeners = function(e) {
1875
1875
  return Ct(this, e, !1);
1876
1876
  };
1877
1877
  S.listenerCount = function(h, e) {
1878
- return typeof h.listenerCount == "function" ? h.listenerCount(e) : Et.call(h, e);
1878
+ return typeof h.listenerCount == "function" ? h.listenerCount(e) : Ot.call(h, e);
1879
1879
  };
1880
- S.prototype.listenerCount = Et;
1881
- function Et(h) {
1880
+ S.prototype.listenerCount = Ot;
1881
+ function Ot(h) {
1882
1882
  var e = this._events;
1883
1883
  if (e !== void 0) {
1884
1884
  var t = e[h];
@@ -1892,7 +1892,7 @@ function Et(h) {
1892
1892
  S.prototype.eventNames = function() {
1893
1893
  return this._eventsCount > 0 ? ue(this._events) : [];
1894
1894
  };
1895
- function Ot(h, e) {
1895
+ function Et(h, e) {
1896
1896
  for (var t = new Array(e), s = 0; s < e; ++s)
1897
1897
  t[s] = h[s];
1898
1898
  return t;
@@ -1955,7 +1955,7 @@ class Ms {
1955
1955
  toneMappingExposure: d,
1956
1956
  outputColorSpace: _,
1957
1957
  logarithmicDepthBuffer: p,
1958
- preserveDrawingBuffer: E,
1958
+ preserveDrawingBuffer: O,
1959
1959
  stencil: v,
1960
1960
  depth: m
1961
1961
  } = i, u = new Ut({
@@ -1963,7 +1963,7 @@ class Ms {
1963
1963
  antialias: n,
1964
1964
  powerPreference: l,
1965
1965
  logarithmicDepthBuffer: p,
1966
- preserveDrawingBuffer: E,
1966
+ preserveDrawingBuffer: O,
1967
1967
  stencil: v,
1968
1968
  depth: m
1969
1969
  });
@@ -2420,7 +2420,7 @@ class Vs {
2420
2420
  a.view && a.view.enabled ? (d.style.transform = `translate( ${-a.view.offsetX * (s / a.view.width)}px, ${-a.view.offsetY * (i / a.view.height)}px )`, d.style.transform += `scale( ${a.view.fullWidth / a.view.width}, ${a.view.fullHeight / a.view.height} )`) : d.style.transform = "", f.matrixWorldAutoUpdate === !0 && f.updateMatrixWorld(), a.parent === null && a.matrixWorldAutoUpdate === !0 && a.updateMatrixWorld();
2421
2421
  let C, y;
2422
2422
  a.isOrthographicCamera && (C = -(a.right + a.left) / 2, y = (a.top + a.bottom) / 2);
2423
- const b = a.view && a.view.enabled ? a.view.height / a.view.fullHeight : 1, O = a.isOrthographicCamera ? `scale( ${b} )scale(` + g + ")translate(" + p(C) + "px," + p(y) + "px)" + E(a.matrixWorldInverse) : `scale( ${b} )translateZ(` + g + "px)" + E(a.matrixWorldInverse), R = (a.isPerspectiveCamera ? "perspective(" + g + "px) " : "") + O + "translate(" + r + "px," + o + "px)";
2423
+ const b = a.view && a.view.enabled ? a.view.height / a.view.fullHeight : 1, E = a.isOrthographicCamera ? `scale( ${b} )scale(` + g + ")translate(" + p(C) + "px," + p(y) + "px)" + O(a.matrixWorldInverse) : `scale( ${b} )translateZ(` + g + "px)" + O(a.matrixWorldInverse), R = (a.isPerspectiveCamera ? "perspective(" + g + "px) " : "") + E + "translate(" + r + "px," + o + "px)";
2424
2424
  n.camera.style !== R && (_.style.transform = R, n.camera.style = R), u(f, f, a);
2425
2425
  }, this.setSize = function(f, a) {
2426
2426
  s = f, i = a, r = s / 2, o = i / 2, l.style.width = f + "px", l.style.height = a + "px", d.style.width = f + "px", d.style.height = a + "px", _.style.width = f + "px", _.style.height = a + "px";
@@ -2428,7 +2428,7 @@ class Vs {
2428
2428
  function p(f) {
2429
2429
  return Math.abs(f) < 1e-10 ? 0 : f;
2430
2430
  }
2431
- function E(f) {
2431
+ function O(f) {
2432
2432
  const a = f.elements;
2433
2433
  return "matrix3d(" + p(a[0]) + "," + p(-a[1]) + "," + p(a[2]) + "," + p(a[3]) + "," + p(a[4]) + "," + p(-a[5]) + "," + p(a[6]) + "," + p(a[7]) + "," + p(a[8]) + "," + p(-a[9]) + "," + p(a[10]) + "," + p(a[11]) + "," + p(a[12]) + "," + p(-a[13]) + "," + p(a[14]) + "," + p(a[15]) + ")";
2434
2434
  }
@@ -2450,12 +2450,12 @@ class Vs {
2450
2450
  const y = f.layers.test(g.layers) === !0, b = f.element;
2451
2451
  if (b.style.display = y === !0 ? "" : "none", y === !0) {
2452
2452
  f.onBeforeRender(t, a, g);
2453
- let O;
2454
- f.isCSS3DSprite ? (H.copy(g.matrixWorldInverse), H.transpose(), f.rotation2D !== 0 && H.multiply(Bs.makeRotationZ(f.rotation2D)), f.matrixWorld.decompose($e, js, qe), H.setPosition($e), H.scale(qe), H.elements[3] = 0, H.elements[7] = 0, H.elements[11] = 0, H.elements[15] = 1, O = v(H)) : O = v(f.matrixWorld);
2453
+ let E;
2454
+ f.isCSS3DSprite ? (H.copy(g.matrixWorldInverse), H.transpose(), f.rotation2D !== 0 && H.multiply(Bs.makeRotationZ(f.rotation2D)), f.matrixWorld.decompose($e, js, qe), H.setPosition($e), H.scale(qe), H.elements[3] = 0, H.elements[7] = 0, H.elements[11] = 0, H.elements[15] = 1, E = v(H)) : E = v(f.matrixWorld);
2455
2455
  const x = n.objects.get(f);
2456
- if (x === void 0 || x.style !== O) {
2457
- b.style.transform = O;
2458
- const R = { style: O };
2456
+ if (x === void 0 || x.style !== E) {
2457
+ b.style.transform = E;
2458
+ const R = { style: E };
2459
2459
  n.objects.set(f, R);
2460
2460
  }
2461
2461
  b.parentNode !== _ && _.appendChild(b), f.onAfterRender(t, a, g);
@@ -2514,14 +2514,14 @@ class Ys {
2514
2514
  function p(m, u) {
2515
2515
  return et.setFromMatrixPosition(m.matrixWorld), tt.setFromMatrixPosition(u.matrixWorld), et.distanceToSquared(tt);
2516
2516
  }
2517
- function E(m) {
2517
+ function O(m) {
2518
2518
  const u = [];
2519
2519
  return m.traverseVisible(function(f) {
2520
2520
  f.isCSS2DObject && u.push(f);
2521
2521
  }), u;
2522
2522
  }
2523
2523
  function v(m) {
2524
- const u = E(m).sort(function(a, g) {
2524
+ const u = O(m).sort(function(a, g) {
2525
2525
  if (a.renderOrder !== g.renderOrder)
2526
2526
  return g.renderOrder - a.renderOrder;
2527
2527
  const C = n.objects.get(a).distanceToCameraSquared, y = n.objects.get(g).distanceToCameraSquared;
@@ -2744,8 +2744,8 @@ class ri {
2744
2744
  samples: Math.min(n, l),
2745
2745
  type: Jt
2746
2746
  }
2747
- ), p = new ke(o, _), E = this.getSize();
2748
- p.setSize(E.width, E.height);
2747
+ ), p = new ke(o, _), O = this.getSize();
2748
+ p.setSize(O.width, O.height);
2749
2749
  const v = new ms(
2750
2750
  s.scene,
2751
2751
  i.camera
@@ -2879,12 +2879,12 @@ class it extends pt {
2879
2879
  let d = l;
2880
2880
  const _ = e.split(".").pop(), p = this.options.type === "image" ? `image/${_ || "png"}` : `video/${_ || "mp4"}`;
2881
2881
  d = d.slice(0, l.size, p);
2882
- const E = () => {
2882
+ const O = () => {
2883
2883
  o.removeEventListener("load", v, !1), o.removeEventListener("error", m, !1);
2884
2884
  }, v = () => {
2885
- E(), r.needsUpdate = !0, t && t(r);
2885
+ O(), r.needsUpdate = !0, t && t(r);
2886
2886
  }, m = (f) => {
2887
- E(), i && i(f), this.manager.itemError(e), this.manager.itemEnd(e);
2887
+ O(), i && i(f), this.manager.itemError(e), this.manager.itemEnd(e);
2888
2888
  };
2889
2889
  o.addEventListener("load", v, !1), o.addEventListener("error", m, !1);
2890
2890
  const u = window.URL.createObjectURL(d);
@@ -3024,7 +3024,7 @@ class ai {
3024
3024
  const s = (n = t == null ? void 0 : t.type) != null ? n : this.getAssetType(e);
3025
3025
  if (!s)
3026
3026
  return;
3027
- const i = (t == null ? void 0 : t.cache) !== !1, r = Es();
3027
+ const i = (t == null ? void 0 : t.cache) !== !1, r = Os();
3028
3028
  if (i) {
3029
3029
  if (this.assets.has(e))
3030
3030
  return this.assets.get(e);
@@ -3161,8 +3161,8 @@ class di {
3161
3161
  const m = p[0];
3162
3162
  this.processIntersection(m, r, e);
3163
3163
  }
3164
- const E = this.prevActiveObjects;
3165
- this.prevActiveObjects = this.activeObjects, this.activeObjects = E, this.activeObjects.clear();
3164
+ const O = this.prevActiveObjects;
3165
+ this.prevActiveObjects = this.activeObjects, this.activeObjects = O, this.activeObjects.clear();
3166
3166
  };
3167
3167
  this.domElement.addEventListener(
3168
3168
  `pointer${e}`,
@@ -3223,10 +3223,10 @@ class di {
3223
3223
  });
3224
3224
  const _ = l.get("click");
3225
3225
  if (_) {
3226
- const p = (E) => {
3227
- E.preventDefault();
3226
+ const p = (O) => {
3227
+ O.preventDefault();
3228
3228
  const v = 5;
3229
- if (!r && Math.abs(E.clientX - e.clientX) <= v && Math.abs(E.clientY - e.clientY) <= v)
3229
+ if (!r && Math.abs(O.clientX - e.clientX) <= v && Math.abs(O.clientY - e.clientY) <= v)
3230
3230
  for (const m of _)
3231
3231
  m({
3232
3232
  baseObject: n,
@@ -3347,11 +3347,11 @@ class pi extends di {
3347
3347
  const i = this.objectNamesToFactories.get(e);
3348
3348
  if (i) {
3349
3349
  t || (t = {}), t.target === void 0 && (t.target = s);
3350
- const d = t.target, _ = (r = t.onTop) != null ? r : 0, p = (o = t.prefab) != null ? o : !1, E = (n = t.create) != null ? n : !0, v = new i().create(t);
3350
+ const d = t.target, _ = (r = t.onTop) != null ? r : 0, p = (o = t.prefab) != null ? o : !1, O = (n = t.create) != null ? n : !0, v = new i().create(t);
3351
3351
  let m;
3352
- return d === null ? m = null : typeof d == "string" ? m = this.objects.get(d) : (l = d == null ? void 0 : d.objectType) != null && l.startsWith("BaseObject") || d ? m = d : p ? m = this.prefabGroup : m = this.group, E === !1 ? v.create = () => {
3353
- } : E !== !0 && (v.create = () => {
3354
- E(v);
3352
+ return d === null ? m = null : typeof d == "string" ? m = this.objects.get(d) : (l = d == null ? void 0 : d.objectType) != null && l.startsWith("BaseObject") || d ? m = d : p ? m = this.prefabGroup : m = this.group, O === !1 ? v.create = () => {
3353
+ } : O !== !0 && (v.create = () => {
3354
+ O(v);
3355
3355
  }), v.pencil = this.pencil, v.lead = this, v.mList = this.mList, v.prefab = p, v.objectType = `BaseObject#${e}`, v.objectOptions = t, this.setBaseObjectKey(
3356
3356
  v,
3357
3357
  t.key ? `$t:#${t.key}` : "$t:",
@@ -3562,13 +3562,13 @@ class ui {
3562
3562
  t && i !== t || s.has(e) && (s.delete(e), s.size === 0 && (this.materialBaseObjectMap.delete(i), this.disposeMaterial(i)));
3563
3563
  });
3564
3564
  }
3565
- getBaseObjectMaterials() {
3566
- const e = {};
3567
- return this.materialBaseObjectMap.forEach((t, s) => {
3568
- t.forEach((i) => {
3569
- e[i.key] = s;
3570
- });
3571
- }), e;
3565
+ getBaseObjectByMaterial(e) {
3566
+ const t = this.materialBaseObjectMap.get(e);
3567
+ if (t) {
3568
+ const s = Array.from(t);
3569
+ return s.find((i) => i.userData.preList) || s[0];
3570
+ }
3571
+ return null;
3572
3572
  }
3573
3573
  emitObject3dChange() {
3574
3574
  var e;
@@ -3699,7 +3699,7 @@ const _e = class _e {
3699
3699
  }), p = new zs({
3700
3700
  width: l,
3701
3701
  height: d
3702
- }), E = new Fs({}), v = new Hs({
3702
+ }), O = new Fs({}), v = new Hs({
3703
3703
  controlsParams: {
3704
3704
  domElement: (g = o == null ? void 0 : o.domElement) != null ? g : _.renderer.domElement
3705
3705
  }
@@ -3712,7 +3712,7 @@ const _e = class _e {
3712
3712
  }), f = new mi({
3713
3713
  pencil: this
3714
3714
  });
3715
- this.sceneController = E, this.cameraController = p, this.controlsController = v, this.rendererController = _, this.loaderController = m, this.mListController = u, this.leadController = f;
3715
+ this.sceneController = O, this.cameraController = p, this.controlsController = v, this.rendererController = _, this.loaderController = m, this.mListController = u, this.leadController = f;
3716
3716
  const a = this.addPage({
3717
3717
  sceneOptions: this.options.scene,
3718
3718
  cameraOptions: this.options.camera
@@ -3720,10 +3720,10 @@ const _e = class _e {
3720
3720
  if (this.showPage(a), s) {
3721
3721
  const C = new Ns({
3722
3722
  container: e,
3723
- sceneController: E,
3723
+ sceneController: O,
3724
3724
  cameraController: p
3725
3725
  });
3726
- C.add(E.scene), this.helperController = C, i && C.addViewHelper();
3726
+ C.add(O.scene), this.helperController = C, i && C.addViewHelper();
3727
3727
  }
3728
3728
  e.appendChild(_.renderer.domElement);
3729
3729
  }
@@ -3883,11 +3883,11 @@ const _e = class _e {
3883
3883
  }
3884
3884
  }
3885
3885
  dispose() {
3886
- var e, t, s, i, r, o, n, l, d, _, p, E, v, m;
3886
+ var e, t, s, i, r, o, n, l, d, _, p, O, v, m;
3887
3887
  this.stop(), this.timer.dispose(), Ce.removeAll(), this.event.removeAllListeners(), (e = this.resizeObserver) == null || e.unobserve(this.options.container), this.installPlugins.forEach((u) => {
3888
3888
  var f;
3889
3889
  (f = u.dispose) == null || f.call(u);
3890
- }), (t = this.controlsController) == null || t.dispose(), (s = this.transformController) == null || s.dispose(), (i = this.cssRendererController) == null || i.dispose(), (r = this.sceneController) == null || r.dispose(), (o = this.cameraController) == null || o.dispose(), (n = this.helperController) == null || n.dispose(), (l = this.composerController) == null || l.dispose(), (d = this.rendererController) == null || d.dispose(), (_ = this.loaderController) == null || _.dispose(), (p = this.leadController) == null || p.dispose(), (E = this.mListController) == null || E.dispose(), this.cssRendererController = void 0, this.installPlugins.clear(), (v = this.stats) == null || v.dom.remove(), (m = this.renderer) == null || m.domElement.remove();
3890
+ }), (t = this.controlsController) == null || t.dispose(), (s = this.transformController) == null || s.dispose(), (i = this.cssRendererController) == null || i.dispose(), (r = this.sceneController) == null || r.dispose(), (o = this.cameraController) == null || o.dispose(), (n = this.helperController) == null || n.dispose(), (l = this.composerController) == null || l.dispose(), (d = this.rendererController) == null || d.dispose(), (_ = this.loaderController) == null || _.dispose(), (p = this.leadController) == null || p.dispose(), (O = this.mListController) == null || O.dispose(), this.cssRendererController = void 0, this.installPlugins.clear(), (v = this.stats) == null || v.dom.remove(), (m = this.renderer) == null || m.domElement.remove();
3891
3891
  }
3892
3892
  };
3893
3893
  _e.options = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gl-draw",
3
- "version": "0.15.0-beta.5",
3
+ "version": "0.15.0-beta.6",
4
4
  "author": "gitplus <hstits@gmail.com>",
5
5
  "scripts": {
6
6
  "start": "bundler-dev",