gl-draw 0.13.2 → 0.13.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var mt=Object.defineProperty,pt=Object.defineProperties;var ut=Object.getOwnPropertyDescriptors;var Pe=Object.getOwnPropertySymbols;var ft=Object.prototype.hasOwnProperty,_t=Object.prototype.propertyIsEnumerable;var Se=(a,e,t)=>e in a?mt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,I=(a,e)=>{for(var t in e||(e={}))ft.call(e,t)&&Se(a,t,e[t]);if(Pe)for(var t of Pe(e))_t.call(e,t)&&Se(a,t,e[t]);return a},ae=(a,e)=>pt(a,ut(e));var ge=(a,e,t)=>new Promise((s,i)=>{var r=l=>{try{h(t.next(l))}catch(d){i(d)}},o=l=>{try{h(t.throw(l))}catch(d){i(d)}},h=l=>l.done?s(l.value):Promise.resolve(l.value).then(r,o);h((t=t.apply(a,e)).next())});Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const z=require("three"),gt=require("three/examples/jsm/misc/Timer"),vt=require("@tweenjs/tween.js"),yt=require("deepmerge"),Ct=require("stats-gl"),Et=require("lil-gui"),Le=require("./isPlainObject.js"),Ot=require("./parseVector.js");require("d3-geo");require("d3-geo-projection");const Tt=require("three/examples/jsm/helpers/RectAreaLightHelper"),xt=require("three/examples/jsm/helpers/ViewHelper"),wt=require("three/examples/jsm/controls/TransformControls"),be=require("three/examples/jsm/postprocessing/EffectComposer"),Lt=require("three/examples/jsm/postprocessing/RenderPass"),At=require("three/examples/jsm/postprocessing/SSAOPass"),Pt=require("three/examples/jsm/postprocessing/Pass"),St=require("three/examples/jsm/postprocessing/OutputPass"),bt=require("three/examples/jsm/postprocessing/ShaderPass"),Dt=require("three/examples/jsm/postprocessing/UnrealBloomPass"),Rt=require("esus-lite");require("three/examples/jsm/renderers/CSS2DRenderer");require("three/examples/jsm/renderers/CSS3DRenderer");require("three/examples/jsm/lights/RectAreaLightUniformsLib");require("three/examples/jsm/lines/LineSegments2");const Qe=require("./index2.js");require("three/examples/jsm/lines/LineSegmentsGeometry");require("three/examples/jsm/lines/LineMaterial");require("three-bvh-csg");const De=require("three/examples/jsm/loaders/GLTFLoader"),Ut=require("three/examples/jsm/loaders/DRACOLoader"),Mt=require("three/examples/jsm/loaders/EXRLoader"),zt=require("three/examples/jsm/loaders/LottieLoader"),Ft=require("./BaseObject.js");function $e(a){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(a){for(const t in a)if(t!=="default"){const s=Object.getOwnPropertyDescriptor(a,t);Object.defineProperty(e,t,s.get?s:{enumerable:!0,get:()=>a[t]})}}return e.default=a,Object.freeze(e)}const T=$e(z),Re=$e(vt),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}),q={NONE:0,IN:1,OUT:-1};function Y(a){return a.isPerspectiveCamera}function B(a){return a.isOrthographicCamera}const W=Math.PI*2,Ue=Math.PI/2,Je=1e-5,J=Math.PI/180;function H(a,e,t){return Math.max(e,Math.min(t,a))}function D(a,e=Je){return Math.abs(a)<e}function P(a,e,t=Je){return D(a-e,t)}function Me(a,e){return Math.round(a/e)*e}function ee(a){return isFinite(a)?a:a<0?-Number.MAX_VALUE:Number.MAX_VALUE}function te(a){return Math.abs(a)<Number.MAX_VALUE?a:a*(1/0)}function he(a,e,t,s,i=1/0,r){s=Math.max(1e-4,s);const o=2/s,h=o*r,l=1/(1+h+.48*h*h+.235*h*h*h);let d=a-e;const g=e,m=i*s;d=H(d,-m,m),e=a-d;const C=(t.value+o*d)*r;t.value=(t.value-o*C)*l;let v=e+(d+C)*l;return g-a>0==v>g&&(v=g,t.value=(v-g)/r),v}function ze(a,e,t,s,i=1/0,r,o){s=Math.max(1e-4,s);const h=2/s,l=h*r,d=1/(1+l+.48*l*l+.235*l*l*l);let g=e.x,m=e.y,C=e.z,v=a.x-g,_=a.y-m,p=a.z-C;const f=g,n=m,u=C,E=i*s,y=E*E,w=v*v+_*_+p*p;if(w>y){const _e=Math.sqrt(w);v=v/_e*E,_=_/_e*E,p=p/_e*E}g=a.x-v,m=a.y-_,C=a.z-p;const O=(t.x+h*v)*r,S=(t.y+h*_)*r,U=(t.z+h*p)*r;t.x=(t.x-h*O)*d,t.y=(t.y-h*S)*d,t.z=(t.z-h*U)*d,o.x=g+(v+O)*d,o.y=m+(_+S)*d,o.z=C+(p+U)*d;const oe=f-a.x,ne=n-a.y,ht=u-a.z,lt=o.x-f,ct=o.y-n,dt=o.z-u;return oe*lt+ne*ct+ht*dt>0&&(o.x=f,o.y=n,o.z=u,t.x=(o.x-f)/r,t.y=(o.y-n)/r,t.z=(o.z-u)/r),o}function ve(a,e){e.set(0,0),a.forEach(t=>{e.x+=t.clientX,e.y+=t.clientY}),e.x/=a.length,e.y/=a.length}function ye(a,e){return B(a)?(console.warn(`${e} is not supported in OrthographicCamera`),!0):!1}class It{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 le=1/8,Ht=/Mac/.test(navigator.platform);let x,Fe,ce,Ce,M,L,A,G,se,k,V,Z,Ie,He,F,ie,K,ke,Ee,Ve,Oe,Te,de;class $ extends It{static install(e){x=e.THREE,Fe=Object.freeze(new x.Vector3(0,0,0)),ce=Object.freeze(new x.Vector3(0,1,0)),Ce=Object.freeze(new x.Vector3(0,0,1)),M=new x.Vector2,L=new x.Vector3,A=new x.Vector3,G=new x.Vector3,se=new x.Vector3,k=new x.Vector3,V=new x.Vector3,Z=new x.Vector3,Ie=new x.Vector3,He=new x.Vector3,F=new x.Spherical,ie=new x.Spherical,K=new x.Box3,ke=new x.Box3,Ee=new x.Sphere,Ve=new x.Quaternion,Oe=new x.Quaternion,Te=new x.Matrix4,de=new x.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.verticalDragToForward=!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 x.Vector3,this._focalOffsetVelocity=new x.Vector3,this._zoomVelocity={value:0},this._truckInternal=(n,u,E)=>{let y,w;if(Y(this._camera)){const O=L.copy(this._camera.position).sub(this._target),S=this._camera.getEffectiveFOV()*J,U=O.length()*Math.tan(S*.5);y=this.truckSpeed*n*U/this._elementRect.height,w=this.truckSpeed*u*U/this._elementRect.height}else if(B(this._camera)){const O=this._camera;y=n*(O.right-O.left)/O.zoom/this._elementRect.width,w=u*(O.top-O.bottom)/O.zoom/this._elementRect.height}else return;this.verticalDragToForward?(E?this.setFocalOffset(this._focalOffsetEnd.x+y,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(y,0,!0),this.forward(-w,!0)):E?this.setFocalOffset(this._focalOffsetEnd.x+y,this._focalOffsetEnd.y+w,this._focalOffsetEnd.z,!0):this.truck(y,w,!0)},this._rotateInternal=(n,u)=>{const E=W*this.azimuthRotateSpeed*n/this._elementRect.height,y=W*this.polarRotateSpeed*u/this._elementRect.height;this.rotate(E,y,!0)},this._dollyInternal=(n,u,E)=>{const y=Math.pow(.95,-n*this.dollySpeed),w=this._sphericalEnd.radius,O=this._sphericalEnd.radius*y,S=H(O,this.minDistance,this.maxDistance),U=S-O;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(O,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(U,!0),this._dollyToNoClamp(S,!0)):this._dollyToNoClamp(S,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?O:S)-w,this._dollyControlCoord.set(u,E)),this._lastDollyDirection=Math.sign(-n)},this._zoomInternal=(n,u,E)=>{const y=Math.pow(.95,n*this.dollySpeed),w=this._zoom,O=this._zoom*y;this.zoomTo(O,!0),this.dollyToCursor&&(this._changedZoom+=O-w,this._dollyControlCoord.set(u,E))},typeof x=="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 x.Quaternion().setFromUnitVectors(this._camera.up,ce),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=c.NONE,this._target=new x.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new x.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new x.Spherical().setFromVector3(L.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 x.Vector3,new x.Vector3,new x.Vector3,new x.Vector3],this._updateNearPlaneCorners(),this._boundary=new x.Box3(new x.Vector3(-1/0,-1/0,-1/0),new x.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 x.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 x.Vector2,i=new x.Vector2,r=new x.Vector2,o=n=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const y=this._domElement.getBoundingClientRect(),w=(n.clientX-y.left)/(y.right-y.left),O=(n.clientY-y.top)/(y.bottom-y.top);if(w<this._interactiveArea.left||w>this._interactiveArea.right||O<this._interactiveArea.top||O>this._interactiveArea.bottom)return}const u=n.pointerType!=="mouse"?null:(n.buttons&R.LEFT)===R.LEFT?R.LEFT:(n.buttons&R.MIDDLE)===R.MIDDLE?R.MIDDLE:(n.buttons&R.RIGHT)===R.RIGHT?R.RIGHT:null;if(u!==null){const y=this._findPointerByMouseButton(u);y&&this._disposePointer(y)}if((n.buttons&R.LEFT)===R.LEFT&&this._lockedPointer)return;const E={pointerId:n.pointerId,clientX:n.clientX,clientY:n.clientY,deltaX:0,deltaY:0,mouseButton:u};this._activePointers.push(E),this._domElement.ownerDocument.removeEventListener("pointermove",h,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.addEventListener("pointermove",h,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),this._isDragging=!0,C(n)},h=n=>{n.cancelable&&n.preventDefault();const u=n.pointerId,E=this._lockedPointer||this._findPointerById(u);if(E){if(E.clientX=n.clientX,E.clientY=n.clientY,E.deltaX=n.movementX,E.deltaY=n.movementY,this._state=0,n.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&&(n.buttons&R.LEFT)===R.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(n.buttons&R.MIDDLE)===R.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(n.buttons&R.RIGHT)===R.RIGHT&&(this._state=this._state|this.mouseButtons.right);v()}},l=n=>{const u=this._findPointerById(n.pointerId);if(!(u&&u===this._lockedPointer)){if(u&&this._disposePointer(u),n.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;_()}};let d=-1;const g=n=>{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 O=this._domElement.getBoundingClientRect(),S=(n.clientX-O.left)/(O.right-O.left),U=(n.clientY-O.top)/(O.bottom-O.top);if(S<this._interactiveArea.left||S>this._interactiveArea.right||U<this._interactiveArea.top||U>this._interactiveArea.bottom)return}if(n.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===c.ROTATE||this.mouseButtons.wheel===c.TRUCK){const O=performance.now();d-O<1e3&&this._getClientRect(this._elementRect),d=O}const u=Ht?-1:-3,E=n.deltaMode===1?n.deltaY/u:n.deltaY/(u*10),y=this.dollyToCursor?(n.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,w=this.dollyToCursor?(n.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case c.ROTATE:{this._rotateInternal(n.deltaX,n.deltaY),this._isUserControllingRotate=!0;break}case c.TRUCK:{this._truckInternal(n.deltaX,n.deltaY,!1),this._isUserControllingTruck=!0;break}case c.OFFSET:{this._truckInternal(n.deltaX,n.deltaY,!0),this._isUserControllingOffset=!0;break}case c.DOLLY:{this._dollyInternal(-E,y,w),this._isUserControllingDolly=!0;break}case c.ZOOM:{this._zoomInternal(-E,y,w),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},m=n=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===$.ACTION.NONE){const u=n instanceof PointerEvent?n.pointerId:0,E=this._findPointerById(u);E&&this._disposePointer(E),this._domElement.ownerDocument.removeEventListener("pointermove",h,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l);return}n.preventDefault()}},C=n=>{if(!this._enabled)return;if(ve(this._activePointers,M),this._getClientRect(this._elementRect),s.copy(M),i.copy(M),this._activePointers.length>=2){const E=M.x-this._activePointers[1].clientX,y=M.y-this._activePointers[1].clientY,w=Math.sqrt(E*E+y*y);r.set(0,w);const O=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,S=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;i.set(O,S)}if(this._state=0,!n)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in n&&n.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&&(n.buttons&R.LEFT)===R.LEFT&&(this._state=this._state|this.mouseButtons.left),(n.buttons&R.MIDDLE)===R.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(n.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.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._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_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_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,ve(this._activePointers,M);const u=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,E=u?-u.deltaX:i.x-M.x,y=u?-u.deltaY:i.y-M.y;if(i.copy(M),((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(E,y),this._isUserControllingRotate=!0),(this._state&c.DOLLY)===c.DOLLY||(this._state&c.ZOOM)===c.ZOOM){const w=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,S=this.dollyDragInverted?-1:1;(this._state&c.DOLLY)===c.DOLLY?(this._dollyInternal(S*y*le,w,O),this._isUserControllingDolly=!0):(this._zoomInternal(S*y*le,w,O),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_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 w=M.x-this._activePointers[1].clientX,O=M.y-this._activePointers[1].clientY,S=Math.sqrt(w*w+O*O),U=r.y-S;r.set(0,S);const oe=this.dollyToCursor?(i.x-this._elementRect.x)/this._elementRect.width*2-1:0,ne=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_OFFSET)===c.TOUCH_DOLLY_OFFSET?(this._dollyInternal(U*le,oe,ne),this._isUserControllingDolly=!0):(this._zoomInternal(U*le,oe,ne),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(E,y,!1),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(E,y,!0),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},_=()=>{ve(this._activePointers,M),i.copy(M),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",h,{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",h,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",p),this._domElement.ownerDocument.addEventListener("pointerlockerror",f),this._domElement.ownerDocument.addEventListener("pointermove",h,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),C())},this.unlockPointer=()=>{var n,u,E;this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),(n=this._domElement)===null||n===void 0||n.ownerDocument.exitPointerLock(),(u=this._domElement)===null||u===void 0||u.ownerDocument.removeEventListener("pointerlockchange",p),(E=this._domElement)===null||E===void 0||E.ownerDocument.removeEventListener("pointerlockerror",f),this.cancel()};const p=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},f=()=>{this.unlockPointer()};this._addAllEventListeners=n=>{this._domElement=n,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",g,{passive:!1}),this._domElement.addEventListener("contextmenu",m)},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",g,{passive:!1}),this._domElement.removeEventListener("contextmenu",m),this._domElement.ownerDocument.removeEventListener("pointermove",h,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.removeEventListener("pointerlockchange",p),this._domElement.ownerDocument.removeEventListener("pointerlockerror",f))},this.cancel=()=>{this._state!==c.NONE&&(this._state=c.NONE,this._activePointers.length=0,_())},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=H(e.width,0,1),this._interactiveArea.height=H(e.height,0,1),this._interactiveArea.x=H(e.x,0,1-this._interactiveArea.width),this._interactiveArea.y=H(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=H(e,this.minAzimuthAngle,this.maxAzimuthAngle),r=H(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||P(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&P(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(H(e,this.minDistance,this.maxDistance),t)}_dollyToNoClamp(e,t=!1){const s=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const o=this._collisionTest(),h=P(o,this._spherical.radius);if(!(s>e)&&h)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||P(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(r)}dollyInFixed(e,t=!1){this._targetEnd.add(this._getCameraDirection(se).multiplyScalar(e)),t||this._target.copy(this._targetEnd);const s=!t||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);return this._createOnRestPromise(s)}zoom(e,t=!1){return this.zoomTo(this._zoomEnd+e,t)}zoomTo(e,t=!1){this._isUserControllingZoom=!1,this._zoomEnd=H(e,this.minZoom,this.maxZoom),this._needsUpdate=!0,t||(this._zoom=this._zoomEnd);const s=!t||P(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(),k.setFromMatrixColumn(this._camera.matrix,0),V.setFromMatrixColumn(this._camera.matrix,1),k.multiplyScalar(e),V.multiplyScalar(-t);const i=L.copy(k).add(V),r=A.copy(this._targetEnd).add(i);return this.moveTo(r.x,r.y,r.z,s)}forward(e,t=!1){L.setFromMatrixColumn(this._camera.matrix,0),L.crossVectors(this._camera.up,L),L.multiplyScalar(e);const s=A.copy(this._targetEnd).add(L);return this.moveTo(s.x,s.y,s.z,t)}elevate(e,t=!1){return L.copy(this._camera.up).multiplyScalar(e),this.moveTo(this._targetEnd.x+L.x,this._targetEnd.y+L.y,this._targetEnd.z+L.z,t)}moveTo(e,t,s,i=!1){this._isUserControllingTruck=!1;const r=L.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||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);return this._createOnRestPromise(o)}lookInDirectionOf(e,t,s,i=!1){const h=L.set(e,t,s).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);return this.setPosition(h.x,h.y,h.z,i)}fitToBox(e,t,{cover:s=!1,paddingLeft:i=0,paddingRight:r=0,paddingBottom:o=0,paddingTop:h=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 g=Me(this._sphericalEnd.theta,Ue),m=Me(this._sphericalEnd.phi,Ue);l.push(this.rotateTo(g,m,t));const C=L.setFromSpherical(this._sphericalEnd).normalize(),v=Ve.setFromUnitVectors(C,Ce),_=P(Math.abs(C.y),1);_&&v.multiply(Oe.setFromAxisAngle(ce,g)),v.multiply(this._yAxisUpSpaceInverse);const p=ke.makeEmpty();A.copy(d.min).applyQuaternion(v),p.expandByPoint(A),A.copy(d.min).setX(d.max.x).applyQuaternion(v),p.expandByPoint(A),A.copy(d.min).setY(d.max.y).applyQuaternion(v),p.expandByPoint(A),A.copy(d.max).setZ(d.min.z).applyQuaternion(v),p.expandByPoint(A),A.copy(d.min).setZ(d.max.z).applyQuaternion(v),p.expandByPoint(A),A.copy(d.max).setY(d.min.y).applyQuaternion(v),p.expandByPoint(A),A.copy(d.max).setX(d.min.x).applyQuaternion(v),p.expandByPoint(A),A.copy(d.max).applyQuaternion(v),p.expandByPoint(A),p.min.x-=i,p.min.y-=o,p.max.x+=r,p.max.y+=h,v.setFromUnitVectors(Ce,C),_&&v.premultiply(Oe.invert()),v.premultiply(this._yAxisUpSpace);const f=p.getSize(L),n=p.getCenter(A).applyQuaternion(v);if(Y(this._camera)){const u=this.getDistanceToFitBox(f.x,f.y,f.z,s);l.push(this.moveTo(n.x,n.y,n.z,t)),l.push(this.dollyTo(u,t)),l.push(this.setFocalOffset(0,0,0,t))}else if(B(this._camera)){const u=this._camera,E=u.right-u.left,y=u.top-u.bottom,w=s?Math.max(E/f.x,y/f.y):Math.min(E/f.x,y/f.y);l.push(this.moveTo(n.x,n.y,n.z,t)),l.push(this.zoomTo(w,t)),l.push(this.setFocalOffset(0,0,0,t))}return Promise.all(l)}fitToSphere(e,t){const s=[],r="isObject3D"in e?$.createBoundingSphere(e,Ee):Ee.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,h=this._camera.top-this._camera.bottom,l=2*r.radius,d=Math.min(o/l,h/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,h=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=q.NONE,this._changedDolly=0;const l=A.set(i,r,o),d=L.set(e,t,s);this._targetEnd.copy(l),this._sphericalEnd.setFromVector3(d.sub(l).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,h||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const g=!h||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(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&P(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&P(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(g)}lerpLookAt(e,t,s,i,r,o,h,l,d,g,m,C,v,_=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=q.NONE,this._changedDolly=0;const p=L.set(i,r,o),f=A.set(e,t,s);F.setFromVector3(f.sub(p).applyQuaternion(this._yAxisUpSpace));const n=G.set(g,m,C),u=A.set(h,l,d);ie.setFromVector3(u.sub(n).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(p.lerp(n,v));const E=ie.theta-F.theta,y=ie.phi-F.phi,w=ie.radius-F.radius;this._sphericalEnd.set(F.radius+w*v,F.phi+y*v,F.theta+E*v),this.normalizeRotations(),this._needsUpdate=!0,_||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const O=!_||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(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&P(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&P(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(O)}setPosition(e,t,s,i=!1){return this.setLookAt(e,t,s,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,i)}setTarget(e,t,s,i=!1){const r=this.getPosition(L),o=this.setLookAt(r.x,r.y,r.z,e,t,s,i);return this._sphericalEnd.phi=H(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||P(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&P(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&P(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(r)}setOrbitPoint(e,t,s){this._camera.updateMatrixWorld(),k.setFromMatrixColumn(this._camera.matrixWorldInverse,0),V.setFromMatrixColumn(this._camera.matrixWorldInverse,1),Z.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const i=L.set(e,t,s),r=i.distanceTo(this._camera.position),o=i.sub(this._camera.position);k.multiplyScalar(o.x),V.multiplyScalar(o.y),Z.multiplyScalar(o.z),L.copy(k).add(V).add(Z),L.z=L.z+r,this.dollyTo(r,!1),this.setFocalOffset(-L.x,L.y,-L.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 x.Vector4,typeof e=="number"?this._viewport.set(e,t,s,i):this._viewport.copy(e)}getDistanceToFitBox(e,t,s,i=!1){if(ye(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const r=e/t,o=this._camera.getEffectiveFOV()*J,h=this._camera.aspect;return((i?r>h:r<h)?t:e/h)*.5/Math.tan(o*.5)+s*.5}getDistanceToFitSphere(e){if(ye(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const t=this._camera.getEffectiveFOV()*J,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 x.Vector3).copy(t?this._targetEnd:this._target)}getPosition(e,t=!0){return(e&&e.isVector3?e:new x.Vector3).setFromSpherical(t?this._sphericalEnd:this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(t?this._targetEnd:this._target)}getSpherical(e,t=!0){return(e||new x.Spherical).copy(t?this._sphericalEnd:this._spherical)}getFocalOffset(e,t=!0){return(e&&e.isVector3?e:new x.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)}reset(e=!1){if(!P(this._camera.up.x,this._cameraUp0.x)||!P(this._camera.up.y,this._cameraUp0.y)||!P(this._camera.up.z,this._cameraUp0.z)){this._camera.up.copy(this._cameraUp0);const s=this.getPosition(L);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=L.subVectors(this._target,this._camera.position).normalize(),t=A.crossVectors(e,this._camera.up);this._camera.up.crossVectors(t,e).normalize(),this._camera.updateMatrixWorld();const s=this.getPosition(L);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=Ie.subVectors(this._targetEnd,this._target),o=He.subVectors(this._focalOffsetEnd,this._focalOffset),h=this._zoomEnd-this._zoom;if(D(t))this._thetaVelocity.value=0,this._spherical.theta=this._sphericalEnd.theta;else{const m=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.theta=he(this._spherical.theta,this._sphericalEnd.theta,this._thetaVelocity,m,1/0,e),this._needsUpdate=!0}if(D(s))this._phiVelocity.value=0,this._spherical.phi=this._sphericalEnd.phi;else{const m=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.phi=he(this._spherical.phi,this._sphericalEnd.phi,this._phiVelocity,m,1/0,e),this._needsUpdate=!0}if(D(i))this._radiusVelocity.value=0,this._spherical.radius=this._sphericalEnd.radius;else{const m=this._isUserControllingDolly?this.draggingSmoothTime:this.smoothTime;this._spherical.radius=he(this._spherical.radius,this._sphericalEnd.radius,this._radiusVelocity,m,this.maxSpeed,e),this._needsUpdate=!0}if(D(r.x)&&D(r.y)&&D(r.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const m=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;ze(this._target,this._targetEnd,this._targetVelocity,m,this.maxSpeed,e,this._target),this._needsUpdate=!0}if(D(o.x)&&D(o.y)&&D(o.z))this._focalOffsetVelocity.set(0,0,0),this._focalOffset.copy(this._focalOffsetEnd);else{const m=this._isUserControllingOffset?this.draggingSmoothTime:this.smoothTime;ze(this._focalOffset,this._focalOffsetEnd,this._focalOffsetVelocity,m,this.maxSpeed,e,this._focalOffset),this._needsUpdate=!0}if(D(h))this._zoomVelocity.value=0,this._zoom=this._zoomEnd;else{const m=this._isUserControllingZoom?this.draggingSmoothTime:this.smoothTime;this._zoom=he(this._zoom,this._zoomEnd,this._zoomVelocity,m,1/0,e)}if(this.dollyToCursor){if(Y(this._camera)&&this._changedDolly!==0){const m=this._spherical.radius-this._lastDistance,C=this._camera,v=this._getCameraDirection(se),_=L.copy(v).cross(C.up).normalize();_.lengthSq()===0&&(_.x=1);const p=A.crossVectors(_,v),f=this._sphericalEnd.radius*Math.tan(C.getEffectiveFOV()*J*.5),u=(this._sphericalEnd.radius-m-this._sphericalEnd.radius)/this._sphericalEnd.radius,E=G.copy(this._targetEnd).add(_.multiplyScalar(this._dollyControlCoord.x*f*C.aspect)).add(p.multiplyScalar(this._dollyControlCoord.y*f)),y=L.copy(this._targetEnd).lerp(E,u),w=this._lastDollyDirection===q.IN&&this._spherical.radius<=this.minDistance,O=this._lastDollyDirection===q.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(w||O)){this._sphericalEnd.radius-=m,this._spherical.radius-=m;const U=A.copy(v).multiplyScalar(-m);y.add(U)}this._boundary.clampPoint(y,y);const S=A.subVectors(y,this._targetEnd);this._targetEnd.copy(y),this._target.add(S),this._changedDolly-=m,D(this._changedDolly)&&(this._changedDolly=0)}else if(B(this._camera)&&this._changedZoom!==0){const m=this._zoom-this._lastZoom,C=this._camera,v=L.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(C.near+C.far)/(C.near-C.far)).unproject(C),_=A.set(0,0,-1).applyQuaternion(C.quaternion),p=G.copy(v).add(_.multiplyScalar(-v.dot(C.up))),n=-(this._zoom-m-this._zoom)/this._zoom,u=this._getCameraDirection(se),E=this._targetEnd.dot(u),y=L.copy(this._targetEnd).lerp(p,n),w=y.dot(u),O=u.multiplyScalar(w-E);y.sub(O),this._boundary.clampPoint(y,y);const S=A.subVectors(y,this._targetEnd);this._targetEnd.copy(y),this._target.add(S),this._changedZoom-=m,D(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),(!D(this._focalOffset.x)||!D(this._focalOffset.y)||!D(this._focalOffset.z))&&(this._camera.updateMatrixWorld(),k.setFromMatrixColumn(this._camera.matrix,0),V.setFromMatrixColumn(this._camera.matrix,1),Z.setFromMatrixColumn(this._camera.matrix,2),k.multiplyScalar(this._focalOffset.x),V.multiplyScalar(-this._focalOffset.y),Z.multiplyScalar(this._focalOffset.z),L.copy(k).add(V).add(Z),this._camera.position.add(L)),this._boundaryEnclosesCamera&&this._encloseToBoundary(this._camera.position.copy(this._target),L.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),1);const g=this._needsUpdate;return g&&!this._updatedLastTime?(this._hasRested=!1,this.dispatchEvent({type:"wake"}),this.dispatchEvent({type:"update"})):g?(this.dispatchEvent({type:"update"}),D(t,this.restThreshold)&&D(s,this.restThreshold)&&D(i,this.restThreshold)&&D(r.x,this.restThreshold)&&D(r.y,this.restThreshold)&&D(r.z,this.restThreshold)&&D(o.x,this.restThreshold)&&D(o.y,this.restThreshold)&&D(o.z,this.restThreshold)&&D(h,this.restThreshold)&&!this._hasRested&&(this._hasRested=!0,this.dispatchEvent({type:"rest"}))):!g&&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=g,this._needsUpdate=!1,g}toJSON(){return JSON.stringify({enabled:this._enabled,minDistance:this.minDistance,maxDistance:ee(this.maxDistance),minZoom:this.minZoom,maxZoom:ee(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:ee(this.maxPolarAngle),minAzimuthAngle:ee(this.minAzimuthAngle),maxAzimuthAngle:ee(this.maxAzimuthAngle),smoothTime:this.smoothTime,draggingSmoothTime:this.draggingSmoothTime,dollySpeed:this.dollySpeed,truckSpeed:this.truckSpeed,dollyToCursor:this.dollyToCursor,verticalDragToForward:this.verticalDragToForward,target:this._targetEnd.toArray(),position:L.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=te(s.maxDistance),this.minZoom=s.minZoom,this.maxZoom=te(s.maxZoom),this.minPolarAngle=s.minPolarAngle,this.maxPolarAngle=te(s.maxPolarAngle),this.minAzimuthAngle=te(s.minAzimuthAngle),this.maxAzimuthAngle=te(s.maxAzimuthAngle),this.smoothTime=s.smoothTime,this.draggingSmoothTime=s.draggingSmoothTime,this.dollySpeed=s.dollySpeed,this.truckSpeed=s.truckSpeed,this.dollyToCursor=s.dollyToCursor,this.verticalDragToForward=s.verticalDragToForward,this._target0.fromArray(s.target0),this._position0.fromArray(s.position0),this._zoom0=s.zoom0,this._focalOffset0.fromArray(s.focalOffset0),this.moveTo(s.target[0],s.target[1],s.target[2],t),F.setFromVector3(L.fromArray(s.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(F.theta,F.phi,t),this.dollyTo(F.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=A.copy(t).add(e),h=this._boundary.clampPoint(r,G).sub(r),l=h.lengthSq();if(l===0)return e.add(t);if(l===i)return e;if(s===0)return e.add(t).add(h);{const d=1+s*l/t.dot(h);return e.add(A.copy(t).multiplyScalar(d)).add(h.multiplyScalar(1-s))}}_updateNearPlaneCorners(){if(Y(this._camera)){const e=this._camera,t=e.near,s=e.getEffectiveFOV()*J,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)||ye(this._camera,"_collisionTest"))return e;const s=this._getTargetDirection(se);Te.lookAt(Fe,s,this._camera.up);for(let i=0;i<4;i++){const r=A.copy(this._nearPlaneCorners[i]);r.applyMatrix4(Te);const o=G.addVectors(this._target,r);de.set(o,s),de.far=this._spherical.radius+1;const h=de.intersectObjects(this.colliderMeshes);h.length!==0&&h[0].distance<e&&(e=h[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 x.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 h=o,l=h.geometry.clone();l.applyMatrix4(h.matrixWorld);const g=l.attributes.position;for(let m=0,C=g.count;m<C;m++)L.fromBufferAttribute(g,m),r=Math.max(r,i.distanceToSquared(L))}),s.radius=Math.sqrt(r),s}}var Ae={exports:{}},Q=typeof Reflect=="object"?Reflect:null,Ne=Q&&typeof Q.apply=="function"?Q.apply:function(e,t,s){return Function.prototype.apply.call(e,t,s)},me;Q&&typeof Q.ownKeys=="function"?me=Q.ownKeys:Object.getOwnPropertySymbols?me=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:me=function(e){return Object.getOwnPropertyNames(e)};function kt(a){console&&console.warn&&console.warn(a)}var et=Number.isNaN||function(e){return e!==e};function b(){b.init.call(this)}Ae.exports=b;Ae.exports.once=Yt;b.EventEmitter=b;b.prototype._events=void 0;b.prototype._eventsCount=0;b.prototype._maxListeners=void 0;var Be=10;function fe(a){if(typeof a!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof a)}Object.defineProperty(b,"defaultMaxListeners",{enumerable:!0,get:function(){return Be},set:function(a){if(typeof a!="number"||a<0||et(a))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+a+".");Be=a}});b.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};b.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||et(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 tt(a){return a._maxListeners===void 0?b.defaultMaxListeners:a._maxListeners}b.prototype.getMaxListeners=function(){return tt(this)};b.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 h=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw h.context=o,h}var l=r[e];if(l===void 0)return!1;if(typeof l=="function")Ne(l,this,t);else for(var d=l.length,g=nt(l,d),s=0;s<d;++s)Ne(g[s],this,t);return!0};function st(a,e,t,s){var i,r,o;if(fe(t),r=a._events,r===void 0?(r=a._events=Object.create(null),a._eventsCount=0):(r.newListener!==void 0&&(a.emit("newListener",e,t.listener?t.listener:t),r=a._events),o=r[e]),o===void 0)o=r[e]=t,++a._eventsCount;else if(typeof o=="function"?o=r[e]=s?[t,o]:[o,t]:s?o.unshift(t):o.push(t),i=tt(a),i>0&&o.length>i&&!o.warned){o.warned=!0;var h=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");h.name="MaxListenersExceededWarning",h.emitter=a,h.type=e,h.count=o.length,kt(h)}return a}b.prototype.addListener=function(e,t){return st(this,e,t,!1)};b.prototype.on=b.prototype.addListener;b.prototype.prependListener=function(e,t){return st(this,e,t,!0)};function Vt(){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 it(a,e,t){var s={fired:!1,wrapFn:void 0,target:a,type:e,listener:t},i=Vt.bind(s);return i.listener=t,s.wrapFn=i,i}b.prototype.once=function(e,t){return fe(t),this.on(e,it(this,e,t)),this};b.prototype.prependOnceListener=function(e,t){return fe(t),this.prependListener(e,it(this,e,t)),this};b.prototype.removeListener=function(e,t){var s,i,r,o,h;if(fe(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){h=s[o].listener,r=o;break}if(r<0)return this;r===0?s.shift():Nt(s,r),s.length===1&&(i[e]=s[0]),i.removeListener!==void 0&&this.emit("removeListener",e,h||t)}return this};b.prototype.off=b.prototype.removeListener;b.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 rt(a,e,t){var s=a._events;if(s===void 0)return[];var i=s[e];return i===void 0?[]:typeof i=="function"?t?[i.listener||i]:[i]:t?Bt(i):nt(i,i.length)}b.prototype.listeners=function(e){return rt(this,e,!0)};b.prototype.rawListeners=function(e){return rt(this,e,!1)};b.listenerCount=function(a,e){return typeof a.listenerCount=="function"?a.listenerCount(e):ot.call(a,e)};b.prototype.listenerCount=ot;function ot(a){var e=this._events;if(e!==void 0){var t=e[a];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}b.prototype.eventNames=function(){return this._eventsCount>0?me(this._events):[]};function nt(a,e){for(var t=new Array(e),s=0;s<e;++s)t[s]=a[s];return t}function Nt(a,e){for(;e+1<a.length;e++)a[e]=a[e+1];a.pop()}function Bt(a){for(var e=new Array(a.length),t=0;t<e.length;++t)e[t]=a[t].listener||a[t];return e}function Yt(a,e){return new Promise(function(t,s){function i(o){a.removeListener(e,r),s(o)}function r(){typeof a.removeListener=="function"&&a.removeListener("error",i),t([].slice.call(arguments))}at(a,e,r,{once:!0}),e!=="error"&&Zt(a,i,{once:!0})})}function Zt(a,e,t){typeof a.on=="function"&&at(a,"error",e,t)}function at(a,e,t,s){if(typeof a.on=="function")s.once?a.once(e,t):a.on(e,t);else if(typeof a.addEventListener=="function")a.addEventListener(e,function i(r){s.once&&a.removeEventListener(e,i),t(r)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof a)}var j=Ae.exports;const jt={antialias:!1,devicePixelRatio:window.devicePixelRatio,powerPreference:"high-performance",toneMappingExposure:1,alpha:!1,outputColorSpace:Le.ColorSpace.sRGB,logarithmicDepthBuffer:!1,preserveDrawingBuffer:!1,stencil:!1,depth:!1};class qt{constructor(e){this.options=e;const{width:t,height:s,rendererParams:i}=e,{alpha:r,devicePixelRatio:o,antialias:h,powerPreference:l,toneMappingExposure:d,outputColorSpace:g,logarithmicDepthBuffer:m,preserveDrawingBuffer:C,stencil:v,depth:_}=i,p=new T.WebGLRenderer({alpha:r,antialias:h,powerPreference:l,logarithmicDepthBuffer:m,preserveDrawingBuffer:C,stencil:v,depth:_});p.setSize(t,s),p.setPixelRatio(o),p.toneMappingExposure=d,p.outputColorSpace=g,this.renderer=p}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,h=(d=e.scissorTest)!=null?d:!1;this.renderer.setViewport(t,s,i,r),o&&(this.renderer.setScissor(t,s,i,r),this.renderer.setScissorTest(h))}setViewPadding(e=0,t=0,s=0,i=0){const{width:r,height:o}=this.renderer.getSize(new T.Vector2),h={x:i,y:s,width:r-i-t,height:o-e-s};this.setViewport(h)}dispose(){var e,t;this.setSize(1,1),(e=this.renderer)==null||e.clear(),(t=this.renderer)==null||t.dispose()}}const Wt={antialias:!0,devicePixelRatio:window.devicePixelRatio};class Gt{constructor(e){this.options=e;const{width:t,height:s,rendererParams:i,renderer:r}=e,{devicePixelRatio:o,antialias:h}=i,l=new r({antialias:h});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()}}const Kt={fov:45,near:1,far:1e3,up:new T.Vector3(0,1,0)};class Xt{constructor(e){this.event=new j.EventEmitter,this.cameraArr=[],this.cameraActiveIndex=0,this.customCamera=!1,this.width=0,this.height=0,this.width=e.width,this.height=e.height}get camera(){return this.cameraArr[this.cameraActiveIndex]}addPerspectiveCamera(e){const{fov:t,far:s,near:i,up:r,aspect:o}=e,h=o!=null?o:this.width/this.height,l=new T.PerspectiveCamera(t,h,i,s);return l.up=r,this.cameraArr.push(l),l}removeCamera(e){e===this.cameraActiveIndex&&(this.cameraActiveIndex=0),this.cameraArr.splice(e,1)}setCameraActive(e){this.cameraActiveIndex=e,this.event.emit("cameraChange",this.camera)}setSize(e,t){this.width=e,this.height=t,this.cameraArr.forEach(s=>{s instanceof T.PerspectiveCamera&&(s.aspect=e/t),s.updateProjectionMatrix()})}cloneCamera(){const e=this.addPerspectiveCamera({fov:this.camera.fov,aspect:this.camera.aspect,near:this.camera.near,far:this.camera.far,up:this.camera.up});return e.position.copy(this.camera.position),e}sync(e){if(e.type==="PerspectiveCamera"){const t=e;(!this.camera.matrixWorld.equals(t.matrixWorld)||this.camera.far!==t.far||this.camera.near!==t.near||this.camera.fov!==t.fov||this.camera.aspect!==t.aspect)&&this.camera.copy(t)}else{const t=e,s=t.viewMatrix,i=t.inverseViewMatrix,r=new T.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 T.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:h,height:l}=this,d=h/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())}}dispose(){this.event.removeAllListeners()}}const Qt={background:null},$t=new T.Scene;class Jt{constructor(e){this.event=new j.EventEmitter,this.sceneArr=[],this.sceneActiveIndex=0,this.overrideMaterial=!1,this.options=e}get scene(){return this.sceneActiveIndex==-1?$t:this.sceneArr[this.sceneActiveIndex]}addScene(e){const t=new T.Scene;return e!=null&&e.background&&(t.background=e.background),this.sceneArr.push(t),t}removeScene(e){e===this.sceneActiveIndex&&(this.sceneActiveIndex=0),this.sceneArr.splice(e,1)}setSceneActive(e){this.sceneActiveIndex=e,this.event.emit("sceneChange",this.scene)}dispose(){this.event.removeAllListeners(),this.sceneArr.forEach(e=>{e.traverse(t=>{Ot.disposeMesh(t)})})}}class es{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 T.AxesHelper(100);else if(e.isCamera)i=new T.CameraHelper(e);else if(e.isPointLight)i=new T.PointLightHelper(e,1);else if(e.isDirectionalLight)i=new T.DirectionalLightHelper(e,1);else if(e.isSpotLight)i=new T.SpotLightHelper(e);else if(e.isHemisphereLight)i=new T.HemisphereLightHelper(e,10);else if(e.isRectAreaLight)i=new Tt.RectAreaLightHelper(e);else{const r=new T.Box3;if(r.setFromObject(e,!0),r.isEmpty()===!1){i=new T.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 xt.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 T.AxesHelper||this.remove({uuid:e})})}update(e,t,s){var r,o;const{cameraController:i}=this.options;Object.values(this.helpers).forEach(h=>{if(h.update&&h.update(),h instanceof T.Box3Helper){const l=h.material,{object:d}=l.userData;d&&h.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 ts{constructor(e){this.event=new j.EventEmitter,this.cameraControlsArr=[],this.cameraControlsActiveIndex=0,this.autoRotateSpeed=0,this.options=e,$.install({THREE:T})}get cameraControls(){return this.cameraControlsArr[this.cameraControlsActiveIndex]}addCameraControls(e,t){const{domElement:s}=this.options.controlsParams,i=new $(e,s);return t&&(i.interactiveArea=t,i.addEventListener("update",()=>{this.cameraControlsArr.forEach(r=>{r!==i&&(r.enabled=!1)})}),i.addEventListener("sleep",()=>{this.cameraControlsArr.forEach(r=>{r!==i&&(r.enabled=!0)})})),this.cameraControlsArr.push(i),i}removeCameraControls(e){var t;e===this.cameraControlsActiveIndex&&(this.cameraControlsActiveIndex=0),(t=this.cameraControlsArr[e])==null||t.dispose(),this.cameraControlsArr.splice(e,1)}setCameraControlsActive(e){this.cameraControlsActiveIndex=e,this.event.emit("controlsChange",this.cameraControls)}enable(){this.cameraControlsArr.forEach(e=>{e.enabled=!0})}disable(){this.cameraControlsArr.forEach(e=>{e.enabled=!1})}update(e){this.cameraControlsArr.forEach(t=>{t.update(e)}),this.autoRotateSpeed&&this.cameraControls&&(this.cameraControls.azimuthAngle+=this.autoRotateSpeed*e*T.MathUtils.DEG2RAD)}dispose(){this.event.removeAllListeners(),this.cameraControlsArr.forEach(e=>{e.dispose()})}}class ss{constructor(e){this.event=new j.EventEmitter;const{renderer:t,scene:s,camera:i}=e,r=new wt.TransformControls(i,t.domElement);if(r.getHelper){const o=r.getHelper();if(s.add(o),+T.REVISION<170){const h=r._root;h.dispose=()=>{h.traverse(l=>{l.geometry&&l.geometry.dispose(),l.material&&l.material.dispose()})},r.dispose=()=>{r.disconnect(),h.dispose()}}}else r instanceof T.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 Ye=new z.Vector3,is=new z.Quaternion,Ze=new z.Vector3,N=new z.Matrix4,rs=new z.Matrix4;class os{constructor(e={}){const t=this;let s,i,r,o;const h={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 g=document.createElement("div");g.style.transformStyle="preserve-3d",d.appendChild(g),this.getSize=function(){return{width:s,height:i}},this.render=function(f,n){const u=n.projectionMatrix.elements[5]*o;n.view&&n.view.enabled?(d.style.transform=`translate( ${-n.view.offsetX*(s/n.view.width)}px, ${-n.view.offsetY*(i/n.view.height)}px )`,d.style.transform+=`scale( ${n.view.fullWidth/n.view.width}, ${n.view.fullHeight/n.view.height} )`):d.style.transform="",f.matrixWorldAutoUpdate===!0&&f.updateMatrixWorld(),n.parent===null&&n.matrixWorldAutoUpdate===!0&&n.updateMatrixWorld();let E,y;n.isOrthographicCamera&&(E=-(n.right+n.left)/2,y=(n.top+n.bottom)/2);const w=n.view&&n.view.enabled?n.view.height/n.view.fullHeight:1,O=n.isOrthographicCamera?`scale( ${w} )scale(`+u+")translate("+m(E)+"px,"+m(y)+"px)"+C(n.matrixWorldInverse):`scale( ${w} )translateZ(`+u+"px)"+C(n.matrixWorldInverse),U=(n.isPerspectiveCamera?"perspective("+u+"px) ":"")+O+"translate("+r+"px,"+o+"px)";h.camera.style!==U&&(g.style.transform=U,h.camera.style=U),p(f,f,n)},this.setSize=function(f,n){s=f,i=n,r=s/2,o=i/2,l.style.width=f+"px",l.style.height=n+"px",d.style.width=f+"px",d.style.height=n+"px",g.style.width=f+"px",g.style.height=n+"px"};function m(f){return Math.abs(f)<1e-10?0:f}function C(f){const n=f.elements;return"matrix3d("+m(n[0])+","+m(-n[1])+","+m(n[2])+","+m(n[3])+","+m(n[4])+","+m(-n[5])+","+m(n[6])+","+m(n[7])+","+m(n[8])+","+m(-n[9])+","+m(n[10])+","+m(n[11])+","+m(n[12])+","+m(-n[13])+","+m(n[14])+","+m(n[15])+")"}function v(f){const n=f.elements;return"translate(-50%,-50%)"+("matrix3d("+m(n[0])+","+m(n[1])+","+m(n[2])+","+m(n[3])+","+m(-n[4])+","+m(-n[5])+","+m(-n[6])+","+m(-n[7])+","+m(n[8])+","+m(n[9])+","+m(n[10])+","+m(n[11])+","+m(n[12])+","+m(n[13])+","+m(n[14])+","+m(n[15])+")")}function _(f){f.isCSS3DObject&&(f.element.style.display="none");for(let n=0,u=f.children.length;n<u;n++)_(f.children[n])}function p(f,n,u,E){if(f.visible===!1){_(f);return}if(f.isCSS3DObject){const y=f.layers.test(u.layers)===!0,w=f.element;if(w.style.display=y===!0?"":"none",y===!0){f.onBeforeRender(t,n,u);let O;f.isCSS3DSprite?(N.copy(u.matrixWorldInverse),N.transpose(),f.rotation2D!==0&&N.multiply(rs.makeRotationZ(f.rotation2D)),f.matrixWorld.decompose(Ye,is,Ze),N.setPosition(Ye),N.scale(Ze),N.elements[3]=0,N.elements[7]=0,N.elements[11]=0,N.elements[15]=1,O=v(N)):O=v(f.matrixWorld);const S=h.objects.get(f);if(S===void 0||S.style!==O){w.style.transform=O;const U={style:O};h.objects.set(f,U)}w.parentNode!==g&&g.appendChild(w),f.onAfterRender(t,n,u)}}for(let y=0,w=f.children.length;y<w;y++)p(f.children[y],n,u)}}}const X=new z.Vector3,je=new z.Matrix4,qe=new z.Matrix4,We=new z.Vector3,Ge=new z.Vector3;class ns{constructor(e={}){const t=this;let s,i,r,o;const h={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(_,p){_.matrixWorldAutoUpdate===!0&&_.updateMatrixWorld(),p.parent===null&&p.matrixWorldAutoUpdate===!0&&p.updateMatrixWorld(),je.copy(p.matrixWorldInverse),qe.multiplyMatrices(p.projectionMatrix,je),g(_,_,p),v(_)},this.setSize=function(_,p){s=_,i=p,r=s/2,o=i/2,l.style.width=_+"px",l.style.height=p+"px"};function d(_){_.isCSS2DObject&&(_.element.style.display="none");for(let p=0,f=_.children.length;p<f;p++)d(_.children[p])}function g(_,p,f){if(_.visible===!1){d(_);return}if(_.isCSS2DObject){X.setFromMatrixPosition(_.matrixWorld),X.applyMatrix4(qe);const n=X.z>=-1&&X.z<=1&&_.layers.test(f.layers)===!0,u=_.element;u.style.display=n===!0?"":"none",n===!0&&(_.onBeforeRender(t,p,f),u.style.transform="translate("+-100*_.center.x+"%,"+-100*_.center.y+"%)translate("+(X.x*r+r)+"px,"+(-X.y*o+o)+"px)",u.parentNode!==l&&l.appendChild(u),_.onAfterRender(t,p,f));const E={distanceToCameraSquared:m(f,_)};h.objects.set(_,E)}for(let n=0,u=_.children.length;n<u;n++)g(_.children[n],p,f)}function m(_,p){return We.setFromMatrixPosition(_.matrixWorld),Ge.setFromMatrixPosition(p.matrixWorld),We.distanceToSquared(Ge)}function C(_){const p=[];return _.traverseVisible(function(f){f.isCSS2DObject&&p.push(f)}),p}function v(_){const p=C(_).sort(function(n,u){if(n.renderOrder!==u.renderOrder)return u.renderOrder-n.renderOrder;const E=h.objects.get(n).distanceToCameraSquared,y=h.objects.get(u).distanceToCameraSquared;return E-y}),f=p.length;for(let n=0,u=p.length;n<u;n++)p[n].element.style.zIndex=f-n}}}const Ke={zIndex:"auto"};class as{constructor(e){this.container=e}addRenderer(e,t){const s=t.container||this.container,i=s.offsetWidth,r=s.offsetHeight,o=e==="css2d"?new ns:new os;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}}class we{constructor(e){this.guiParams={},e&&(this.guiParams=e)}showGui(e){e&&Object.keys(this.guiParams).forEach(t=>{const s=e.addFolder(t),i=this.guiParams[t];Object.keys(i).forEach(r=>{const{min:o,max:h,step:l,name:d,paramMap:g,items:m,value:C,target:v}=i[r],_=r.toLowerCase().indexOf("color")>-1;let p;const f=typeof C=="undefined"&&v,n=f?v():i[r],u=f?r:"value";m?p=s.add(n,u,m):_?p=s.addColor(n,u):p=s.add(n,u),p=p.name(d||r),typeof o!="undefined"&&(p=p.min(o)),typeof h!="undefined"&&(p=p.max(h)),typeof l!="undefined"&&(p=p.step(l)),p=p.onChange(()=>{this.setTargetValue(t,r,n[u],g)}),f&&p.listen()})})}setTargetValue(e,t,s,i){const{onChange:r,target:o,value:h}=this.guiParams[e][t],l=t.toLowerCase().indexOf("color")>-1;if(o&&!(typeof h=="undefined"&&o)){let g=o();Array.isArray(g)||(g=[g]),g.forEach(m=>{if(m)if(l)try{m[i||t].set(s)}catch(C){t!=="color"&&!i&&console.warn(`${t} is not a color,set paramMap`)}else m[i||t]=s})}r&&r(s)}setTargetValueByParams(){Object.keys(this.guiParams).forEach(e=>{Object.keys(this.guiParams[e]).forEach(t=>{const s=this.guiParams[e][t];typeof s.value!="undefined"&&this.setTargetValue(e,t,s.value,s.paramMap)})})}}const hs={name:"OutputShader",uniforms:{tDiffuse:{value:null},toneMappingExposure:{value:1},premultiplieAlpha:{value:0}},vertexShader:`
1
+ "use strict";var _t=Object.defineProperty,gt=Object.defineProperties;var vt=Object.getOwnPropertyDescriptors;var Se=Object.getOwnPropertySymbols;var yt=Object.prototype.hasOwnProperty,Ct=Object.prototype.propertyIsEnumerable;var Pe=(h,e,t)=>e in h?_t(h,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):h[e]=t,z=(h,e)=>{for(var t in e||(e={}))yt.call(e,t)&&Pe(h,t,e[t]);if(Se)for(var t of Se(e))Ct.call(e,t)&&Pe(h,t,e[t]);return h},W=(h,e)=>gt(h,vt(e));var Y=(h,e,t)=>new Promise((s,i)=>{var r=l=>{try{a(t.next(l))}catch(p){i(p)}},o=l=>{try{a(t.throw(l))}catch(p){i(p)}},a=l=>l.done?s(l.value):Promise.resolve(l.value).then(r,o);a((t=t.apply(h,e)).next())});Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const F=require("three"),Et=require("three/examples/jsm/misc/Timer"),Ot=require("@tweenjs/tween.js"),Tt=require("deepmerge"),xt=require("stats-gl"),Ae=require("./isPlainObject.js"),et=require("./parseVector.js");require("d3-geo");require("d3-geo-projection");const wt=require("three/examples/jsm/renderers/CSS2DRenderer"),De=require("three/examples/jsm/renderers/CSS3DRenderer"),bt=require("three/examples/jsm/helpers/RectAreaLightHelper"),At=require("three/examples/jsm/helpers/ViewHelper"),Lt=require("three/examples/jsm/controls/TransformControls"),Me=require("three/examples/jsm/postprocessing/EffectComposer"),St=require("three/examples/jsm/postprocessing/RenderPass"),Pt=require("three/examples/jsm/postprocessing/SSAOPass"),Dt=require("three/examples/jsm/postprocessing/Pass"),Mt=require("three/examples/jsm/postprocessing/OutputPass"),Rt=require("three/examples/jsm/postprocessing/ShaderPass"),Ut=require("three/examples/jsm/postprocessing/UnrealBloomPass"),be=require("esus-lite");require("three/examples/jsm/lights/RectAreaLightUniformsLib");require("three/examples/jsm/lines/LineSegments2");const _e=require("./index2.js");require("three/examples/jsm/lines/LineSegmentsGeometry");require("three/examples/jsm/lines/LineMaterial");require("three-bvh-csg");const Re=require("three/examples/jsm/loaders/GLTFLoader"),zt=require("three/examples/jsm/loaders/DRACOLoader"),Ft=require("three/examples/jsm/loaders/EXRLoader"),It=require("three/examples/jsm/loaders/LottieLoader");function tt(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 T=tt(F),Ue=tt(Ot),M={LEFT:1,RIGHT:2,MIDDLE:4},m=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}),G={NONE:0,IN:1,OUT:-1};function Z(h){return h.isPerspectiveCamera}function V(h){return h.isOrthographicCamera}const K=Math.PI*2,ze=Math.PI/2,st=1e-5,te=Math.PI/180;function k(h,e,t){return Math.max(e,Math.min(t,h))}function D(h,e=st){return Math.abs(h)<e}function L(h,e,t=st){return D(h-e,t)}function Fe(h,e){return Math.round(h/e)*e}function se(h){return isFinite(h)?h:h<0?-Number.MAX_VALUE:Number.MAX_VALUE}function ie(h){return Math.abs(h)<Number.MAX_VALUE?h:h*(1/0)}function he(h,e,t,s,i=1/0,r){s=Math.max(1e-4,s);const o=2/s,a=o*r,l=1/(1+a+.48*a*a+.235*a*a*a);let p=h-e;const g=e,u=i*s;p=k(p,-u,u),e=h-p;const C=(t.value+o*p)*r;t.value=(t.value-o*C)*l;let v=e+(p+C)*l;return g-h>0==v>g&&(v=g,t.value=(v-g)/r),v}function Ie(h,e,t,s,i=1/0,r,o){s=Math.max(1e-4,s);const a=2/s,l=a*r,p=1/(1+l+.48*l*l+.235*l*l*l);let g=e.x,u=e.y,C=e.z,v=h.x-g,_=h.y-u,d=h.z-C;const c=g,n=u,f=C,E=i*s,y=E*E,w=v*v+_*_+d*d;if(w>y){const ve=Math.sqrt(w);v=v/ve*E,_=_/ve*E,d=d/ve*E}g=h.x-v,u=h.y-_,C=h.z-d;const O=(t.x+a*v)*r,S=(t.y+a*_)*r,R=(t.z+a*d)*r;t.x=(t.x-a*O)*p,t.y=(t.y-a*S)*p,t.z=(t.z-a*R)*p,o.x=g+(v+O)*p,o.y=u+(_+S)*p,o.z=C+(d+R)*p;const ne=c-h.x,ae=n-h.y,pt=f-h.z,mt=o.x-c,ut=o.y-n,ft=o.z-f;return ne*mt+ae*ut+pt*ft>0&&(o.x=c,o.y=n,o.z=f,t.x=(o.x-c)/r,t.y=(o.y-n)/r,t.z=(o.z-f)/r),o}function ye(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 Ce(h,e){return V(h)?(console.warn(`${e} is not supported in OrthographicCamera`),!0):!1}class kt{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 le=1/8,jt=/Mac/.test(navigator.platform);let x,ke,ce,Ee,U,b,A,X,re,j,H,q,je,He,I,oe,$,Ne,Oe,Ve,Te,xe,de;class ee extends kt{static install(e){x=e.THREE,ke=Object.freeze(new x.Vector3(0,0,0)),ce=Object.freeze(new x.Vector3(0,1,0)),Ee=Object.freeze(new x.Vector3(0,0,1)),U=new x.Vector2,b=new x.Vector3,A=new x.Vector3,X=new x.Vector3,re=new x.Vector3,j=new x.Vector3,H=new x.Vector3,q=new x.Vector3,je=new x.Vector3,He=new x.Vector3,I=new x.Spherical,oe=new x.Spherical,$=new x.Box3,Ne=new x.Box3,Oe=new x.Sphere,Ve=new x.Quaternion,Te=new x.Quaternion,xe=new x.Matrix4,de=new x.Raycaster}static get ACTION(){return m}constructor(e,t){super(),this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.minDistance=Number.EPSILON,this.maxDistance=1/0,this.infinityDolly=!1,this.minZoom=.01,this.maxZoom=1/0,this.smoothTime=.25,this.draggingSmoothTime=.125,this.maxSpeed=1/0,this.azimuthRotateSpeed=1,this.polarRotateSpeed=1,this.dollySpeed=1,this.dollyDragInverted=!1,this.truckSpeed=2,this.dollyToCursor=!1,this.dragToOffset=!1,this.verticalDragToForward=!1,this.boundaryFriction=0,this.restThreshold=.01,this.colliderMeshes=[],this.cancel=()=>{},this._enabled=!0,this._state=m.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 x.Vector3,this._focalOffsetVelocity=new x.Vector3,this._zoomVelocity={value:0},this._truckInternal=(n,f,E)=>{let y,w;if(Z(this._camera)){const O=b.copy(this._camera.position).sub(this._target),S=this._camera.getEffectiveFOV()*te,R=O.length()*Math.tan(S*.5);y=this.truckSpeed*n*R/this._elementRect.height,w=this.truckSpeed*f*R/this._elementRect.height}else if(V(this._camera)){const O=this._camera;y=n*(O.right-O.left)/O.zoom/this._elementRect.width,w=f*(O.top-O.bottom)/O.zoom/this._elementRect.height}else return;this.verticalDragToForward?(E?this.setFocalOffset(this._focalOffsetEnd.x+y,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(y,0,!0),this.forward(-w,!0)):E?this.setFocalOffset(this._focalOffsetEnd.x+y,this._focalOffsetEnd.y+w,this._focalOffsetEnd.z,!0):this.truck(y,w,!0)},this._rotateInternal=(n,f)=>{const E=K*this.azimuthRotateSpeed*n/this._elementRect.height,y=K*this.polarRotateSpeed*f/this._elementRect.height;this.rotate(E,y,!0)},this._dollyInternal=(n,f,E)=>{const y=Math.pow(.95,-n*this.dollySpeed),w=this._sphericalEnd.radius,O=this._sphericalEnd.radius*y,S=k(O,this.minDistance,this.maxDistance),R=S-O;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(O,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(R,!0),this._dollyToNoClamp(S,!0)):this._dollyToNoClamp(S,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?O:S)-w,this._dollyControlCoord.set(f,E)),this._lastDollyDirection=Math.sign(-n)},this._zoomInternal=(n,f,E)=>{const y=Math.pow(.95,n*this.dollySpeed),w=this._zoom,O=this._zoom*y;this.zoomTo(O,!0),this.dollyToCursor&&(this._changedZoom+=O-w,this._dollyControlCoord.set(f,E))},typeof x=="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 x.Quaternion().setFromUnitVectors(this._camera.up,ce),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=m.NONE,this._target=new x.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new x.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new x.Spherical().setFromVector3(b.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 x.Vector3,new x.Vector3,new x.Vector3,new x.Vector3],this._updateNearPlaneCorners(),this._boundary=new x.Box3(new x.Vector3(-1/0,-1/0,-1/0),new x.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 x.Vector2,this.mouseButtons={left:m.ROTATE,middle:m.DOLLY,right:m.TRUCK,wheel:Z(this._camera)?m.DOLLY:V(this._camera)?m.ZOOM:m.NONE},this.touches={one:m.TOUCH_ROTATE,two:Z(this._camera)?m.TOUCH_DOLLY_TRUCK:V(this._camera)?m.TOUCH_ZOOM_TRUCK:m.NONE,three:m.TOUCH_TRUCK};const s=new x.Vector2,i=new x.Vector2,r=new x.Vector2,o=n=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const y=this._domElement.getBoundingClientRect(),w=(n.clientX-y.left)/(y.right-y.left),O=(n.clientY-y.top)/(y.bottom-y.top);if(w<this._interactiveArea.left||w>this._interactiveArea.right||O<this._interactiveArea.top||O>this._interactiveArea.bottom)return}const f=n.pointerType!=="mouse"?null:(n.buttons&M.LEFT)===M.LEFT?M.LEFT:(n.buttons&M.MIDDLE)===M.MIDDLE?M.MIDDLE:(n.buttons&M.RIGHT)===M.RIGHT?M.RIGHT:null;if(f!==null){const y=this._findPointerByMouseButton(f);y&&this._disposePointer(y)}if((n.buttons&M.LEFT)===M.LEFT&&this._lockedPointer)return;const E={pointerId:n.pointerId,clientX:n.clientX,clientY:n.clientY,deltaX:0,deltaY:0,mouseButton:f};this._activePointers.push(E),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.addEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),this._isDragging=!0,C(n)},a=n=>{n.cancelable&&n.preventDefault();const f=n.pointerId,E=this._lockedPointer||this._findPointerById(f);if(E){if(E.clientX=n.clientX,E.clientY=n.clientY,E.deltaX=n.movementX,E.deltaY=n.movementY,this._state=0,n.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&&(n.buttons&M.LEFT)===M.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(n.buttons&M.MIDDLE)===M.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(n.buttons&M.RIGHT)===M.RIGHT&&(this._state=this._state|this.mouseButtons.right);v()}},l=n=>{const f=this._findPointerById(n.pointerId);if(!(f&&f===this._lockedPointer)){if(f&&this._disposePointer(f),n.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=m.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=m.NONE;_()}};let p=-1;const g=n=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===m.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const O=this._domElement.getBoundingClientRect(),S=(n.clientX-O.left)/(O.right-O.left),R=(n.clientY-O.top)/(O.bottom-O.top);if(S<this._interactiveArea.left||S>this._interactiveArea.right||R<this._interactiveArea.top||R>this._interactiveArea.bottom)return}if(n.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===m.ROTATE||this.mouseButtons.wheel===m.TRUCK){const O=performance.now();p-O<1e3&&this._getClientRect(this._elementRect),p=O}const f=jt?-1:-3,E=n.deltaMode===1?n.deltaY/f:n.deltaY/(f*10),y=this.dollyToCursor?(n.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,w=this.dollyToCursor?(n.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case m.ROTATE:{this._rotateInternal(n.deltaX,n.deltaY),this._isUserControllingRotate=!0;break}case m.TRUCK:{this._truckInternal(n.deltaX,n.deltaY,!1),this._isUserControllingTruck=!0;break}case m.OFFSET:{this._truckInternal(n.deltaX,n.deltaY,!0),this._isUserControllingOffset=!0;break}case m.DOLLY:{this._dollyInternal(-E,y,w),this._isUserControllingDolly=!0;break}case m.ZOOM:{this._zoomInternal(-E,y,w),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},u=n=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===ee.ACTION.NONE){const f=n instanceof PointerEvent?n.pointerId:0,E=this._findPointerById(f);E&&this._disposePointer(E),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l);return}n.preventDefault()}},C=n=>{if(!this._enabled)return;if(ye(this._activePointers,U),this._getClientRect(this._elementRect),s.copy(U),i.copy(U),this._activePointers.length>=2){const E=U.x-this._activePointers[1].clientX,y=U.y-this._activePointers[1].clientY,w=Math.sqrt(E*E+y*y);r.set(0,w);const O=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,S=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;i.set(O,S)}if(this._state=0,!n)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in n&&n.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&&(n.buttons&M.LEFT)===M.LEFT&&(this._state=this._state|this.mouseButtons.left),(n.buttons&M.MIDDLE)===M.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(n.buttons&M.RIGHT)===M.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&m.ROTATE)===m.ROTATE||(this._state&m.TOUCH_ROTATE)===m.TOUCH_ROTATE||(this._state&m.TOUCH_DOLLY_ROTATE)===m.TOUCH_DOLLY_ROTATE||(this._state&m.TOUCH_ZOOM_ROTATE)===m.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&m.TRUCK)===m.TRUCK||(this._state&m.TOUCH_TRUCK)===m.TOUCH_TRUCK||(this._state&m.TOUCH_DOLLY_TRUCK)===m.TOUCH_DOLLY_TRUCK||(this._state&m.TOUCH_ZOOM_TRUCK)===m.TOUCH_ZOOM_TRUCK)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&m.DOLLY)===m.DOLLY||(this._state&m.TOUCH_DOLLY)===m.TOUCH_DOLLY||(this._state&m.TOUCH_DOLLY_TRUCK)===m.TOUCH_DOLLY_TRUCK||(this._state&m.TOUCH_DOLLY_OFFSET)===m.TOUCH_DOLLY_OFFSET||(this._state&m.TOUCH_DOLLY_ROTATE)===m.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&m.ZOOM)===m.ZOOM||(this._state&m.TOUCH_ZOOM)===m.TOUCH_ZOOM||(this._state&m.TOUCH_ZOOM_TRUCK)===m.TOUCH_ZOOM_TRUCK||(this._state&m.TOUCH_ZOOM_OFFSET)===m.TOUCH_ZOOM_OFFSET||(this._state&m.TOUCH_ZOOM_ROTATE)===m.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&m.OFFSET)===m.OFFSET||(this._state&m.TOUCH_OFFSET)===m.TOUCH_OFFSET||(this._state&m.TOUCH_DOLLY_OFFSET)===m.TOUCH_DOLLY_OFFSET||(this._state&m.TOUCH_ZOOM_OFFSET)===m.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,ye(this._activePointers,U);const f=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,E=f?-f.deltaX:i.x-U.x,y=f?-f.deltaY:i.y-U.y;if(i.copy(U),((this._state&m.ROTATE)===m.ROTATE||(this._state&m.TOUCH_ROTATE)===m.TOUCH_ROTATE||(this._state&m.TOUCH_DOLLY_ROTATE)===m.TOUCH_DOLLY_ROTATE||(this._state&m.TOUCH_ZOOM_ROTATE)===m.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(E,y),this._isUserControllingRotate=!0),(this._state&m.DOLLY)===m.DOLLY||(this._state&m.ZOOM)===m.ZOOM){const w=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,S=this.dollyDragInverted?-1:1;(this._state&m.DOLLY)===m.DOLLY?(this._dollyInternal(S*y*le,w,O),this._isUserControllingDolly=!0):(this._zoomInternal(S*y*le,w,O),this._isUserControllingZoom=!0)}if((this._state&m.TOUCH_DOLLY)===m.TOUCH_DOLLY||(this._state&m.TOUCH_ZOOM)===m.TOUCH_ZOOM||(this._state&m.TOUCH_DOLLY_TRUCK)===m.TOUCH_DOLLY_TRUCK||(this._state&m.TOUCH_ZOOM_TRUCK)===m.TOUCH_ZOOM_TRUCK||(this._state&m.TOUCH_DOLLY_OFFSET)===m.TOUCH_DOLLY_OFFSET||(this._state&m.TOUCH_ZOOM_OFFSET)===m.TOUCH_ZOOM_OFFSET||(this._state&m.TOUCH_DOLLY_ROTATE)===m.TOUCH_DOLLY_ROTATE||(this._state&m.TOUCH_ZOOM_ROTATE)===m.TOUCH_ZOOM_ROTATE){const w=U.x-this._activePointers[1].clientX,O=U.y-this._activePointers[1].clientY,S=Math.sqrt(w*w+O*O),R=r.y-S;r.set(0,S);const ne=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&m.TOUCH_DOLLY)===m.TOUCH_DOLLY||(this._state&m.TOUCH_DOLLY_ROTATE)===m.TOUCH_DOLLY_ROTATE||(this._state&m.TOUCH_DOLLY_TRUCK)===m.TOUCH_DOLLY_TRUCK||(this._state&m.TOUCH_DOLLY_OFFSET)===m.TOUCH_DOLLY_OFFSET?(this._dollyInternal(R*le,ne,ae),this._isUserControllingDolly=!0):(this._zoomInternal(R*le,ne,ae),this._isUserControllingZoom=!0)}((this._state&m.TRUCK)===m.TRUCK||(this._state&m.TOUCH_TRUCK)===m.TOUCH_TRUCK||(this._state&m.TOUCH_DOLLY_TRUCK)===m.TOUCH_DOLLY_TRUCK||(this._state&m.TOUCH_ZOOM_TRUCK)===m.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(E,y,!1),this._isUserControllingTruck=!0),((this._state&m.OFFSET)===m.OFFSET||(this._state&m.TOUCH_OFFSET)===m.TOUCH_OFFSET||(this._state&m.TOUCH_DOLLY_OFFSET)===m.TOUCH_DOLLY_OFFSET||(this._state&m.TOUCH_ZOOM_OFFSET)===m.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(E,y,!0),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},_=()=>{ye(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",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",d),this._domElement.ownerDocument.addEventListener("pointerlockerror",c),this._domElement.ownerDocument.addEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),C())},this.unlockPointer=()=>{var n,f,E;this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),(n=this._domElement)===null||n===void 0||n.ownerDocument.exitPointerLock(),(f=this._domElement)===null||f===void 0||f.ownerDocument.removeEventListener("pointerlockchange",d),(E=this._domElement)===null||E===void 0||E.ownerDocument.removeEventListener("pointerlockerror",c),this.cancel()};const d=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},c=()=>{this.unlockPointer()};this._addAllEventListeners=n=>{this._domElement=n,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",g,{passive:!1}),this._domElement.addEventListener("contextmenu",u)},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",g,{passive:!1}),this._domElement.removeEventListener("contextmenu",u),this._domElement.ownerDocument.removeEventListener("pointermove",a,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.removeEventListener("pointerlockchange",d),this._domElement.ownerDocument.removeEventListener("pointerlockerror",c))},this.cancel=()=>{this._state!==m.NONE&&(this._state=m.NONE,this._activePointers.length=0,_())},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=k(e.width,0,1),this._interactiveArea.height=k(e.height,0,1),this._interactiveArea.x=k(e.x,0,1-this._interactiveArea.width),this._interactiveArea.y=k(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=k(e,this.minAzimuthAngle,this.maxAzimuthAngle),r=k(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||L(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&L(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=G.NONE,this._changedDolly=0,this._dollyToNoClamp(k(e,this.minDistance,this.maxDistance),t)}_dollyToNoClamp(e,t=!1){const s=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const o=this._collisionTest(),a=L(o,this._spherical.radius);if(!(s>e)&&a)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||L(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(r)}dollyInFixed(e,t=!1){this._targetEnd.add(this._getCameraDirection(re).multiplyScalar(e)),t||this._target.copy(this._targetEnd);const s=!t||L(this._target.x,this._targetEnd.x,this.restThreshold)&&L(this._target.y,this._targetEnd.y,this.restThreshold)&&L(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=k(e,this.minZoom,this.maxZoom),this._needsUpdate=!0,t||(this._zoom=this._zoomEnd);const s=!t||L(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(),j.setFromMatrixColumn(this._camera.matrix,0),H.setFromMatrixColumn(this._camera.matrix,1),j.multiplyScalar(e),H.multiplyScalar(-t);const i=b.copy(j).add(H),r=A.copy(this._targetEnd).add(i);return this.moveTo(r.x,r.y,r.z,s)}forward(e,t=!1){b.setFromMatrixColumn(this._camera.matrix,0),b.crossVectors(this._camera.up,b),b.multiplyScalar(e);const s=A.copy(this._targetEnd).add(b);return this.moveTo(s.x,s.y,s.z,t)}elevate(e,t=!1){return b.copy(this._camera.up).multiplyScalar(e),this.moveTo(this._targetEnd.x+b.x,this._targetEnd.y+b.y,this._targetEnd.z+b.z,t)}moveTo(e,t,s,i=!1){this._isUserControllingTruck=!1;const r=b.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||L(this._target.x,this._targetEnd.x,this.restThreshold)&&L(this._target.y,this._targetEnd.y,this.restThreshold)&&L(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(o)}lookInDirectionOf(e,t,s,i=!1){const a=b.set(e,t,s).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);return this.setPosition(a.x,a.y,a.z,i)}fitToBox(e,t,{cover:s=!1,paddingLeft:i=0,paddingRight:r=0,paddingBottom:o=0,paddingTop:a=0}={}){const l=[],p=e.isBox3?$.copy(e):$.setFromObject(e);p.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const g=Fe(this._sphericalEnd.theta,ze),u=Fe(this._sphericalEnd.phi,ze);l.push(this.rotateTo(g,u,t));const C=b.setFromSpherical(this._sphericalEnd).normalize(),v=Ve.setFromUnitVectors(C,Ee),_=L(Math.abs(C.y),1);_&&v.multiply(Te.setFromAxisAngle(ce,g)),v.multiply(this._yAxisUpSpaceInverse);const d=Ne.makeEmpty();A.copy(p.min).applyQuaternion(v),d.expandByPoint(A),A.copy(p.min).setX(p.max.x).applyQuaternion(v),d.expandByPoint(A),A.copy(p.min).setY(p.max.y).applyQuaternion(v),d.expandByPoint(A),A.copy(p.max).setZ(p.min.z).applyQuaternion(v),d.expandByPoint(A),A.copy(p.min).setZ(p.max.z).applyQuaternion(v),d.expandByPoint(A),A.copy(p.max).setY(p.min.y).applyQuaternion(v),d.expandByPoint(A),A.copy(p.max).setX(p.min.x).applyQuaternion(v),d.expandByPoint(A),A.copy(p.max).applyQuaternion(v),d.expandByPoint(A),d.min.x-=i,d.min.y-=o,d.max.x+=r,d.max.y+=a,v.setFromUnitVectors(Ee,C),_&&v.premultiply(Te.invert()),v.premultiply(this._yAxisUpSpace);const c=d.getSize(b),n=d.getCenter(A).applyQuaternion(v);if(Z(this._camera)){const f=this.getDistanceToFitBox(c.x,c.y,c.z,s);l.push(this.moveTo(n.x,n.y,n.z,t)),l.push(this.dollyTo(f,t)),l.push(this.setFocalOffset(0,0,0,t))}else if(V(this._camera)){const f=this._camera,E=f.right-f.left,y=f.top-f.bottom,w=s?Math.max(E/c.x,y/c.y):Math.min(E/c.x,y/c.y);l.push(this.moveTo(n.x,n.y,n.z,t)),l.push(this.zoomTo(w,t)),l.push(this.setFocalOffset(0,0,0,t))}return Promise.all(l)}fitToSphere(e,t){const s=[],r="isObject3D"in e?ee.createBoundingSphere(e,Oe):Oe.copy(e);if(s.push(this.moveTo(r.center.x,r.center.y,r.center.z,t)),Z(this._camera)){const o=this.getDistanceToFitSphere(r.radius);s.push(this.dollyTo(o,t))}else if(V(this._camera)){const o=this._camera.right-this._camera.left,a=this._camera.top-this._camera.bottom,l=2*r.radius,p=Math.min(o/l,a/l);s.push(this.zoomTo(p,t))}return s.push(this.setFocalOffset(0,0,0,t)),Promise.all(s)}setLookAt(e,t,s,i,r,o,a=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=G.NONE,this._changedDolly=0;const l=A.set(i,r,o),p=b.set(e,t,s);this._targetEnd.copy(l),this._sphericalEnd.setFromVector3(p.sub(l).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,a||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const g=!a||L(this._target.x,this._targetEnd.x,this.restThreshold)&&L(this._target.y,this._targetEnd.y,this.restThreshold)&&L(this._target.z,this._targetEnd.z,this.restThreshold)&&L(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&L(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&L(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(g)}lerpLookAt(e,t,s,i,r,o,a,l,p,g,u,C,v,_=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=G.NONE,this._changedDolly=0;const d=b.set(i,r,o),c=A.set(e,t,s);I.setFromVector3(c.sub(d).applyQuaternion(this._yAxisUpSpace));const n=X.set(g,u,C),f=A.set(a,l,p);oe.setFromVector3(f.sub(n).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(d.lerp(n,v));const E=oe.theta-I.theta,y=oe.phi-I.phi,w=oe.radius-I.radius;this._sphericalEnd.set(I.radius+w*v,I.phi+y*v,I.theta+E*v),this.normalizeRotations(),this._needsUpdate=!0,_||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const O=!_||L(this._target.x,this._targetEnd.x,this.restThreshold)&&L(this._target.y,this._targetEnd.y,this.restThreshold)&&L(this._target.z,this._targetEnd.z,this.restThreshold)&&L(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&L(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&L(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(O)}setPosition(e,t,s,i=!1){return this.setLookAt(e,t,s,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,i)}setTarget(e,t,s,i=!1){const r=this.getPosition(b),o=this.setLookAt(r.x,r.y,r.z,e,t,s,i);return this._sphericalEnd.phi=k(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||L(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&L(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&L(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(r)}setOrbitPoint(e,t,s){this._camera.updateMatrixWorld(),j.setFromMatrixColumn(this._camera.matrixWorldInverse,0),H.setFromMatrixColumn(this._camera.matrixWorldInverse,1),q.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const i=b.set(e,t,s),r=i.distanceTo(this._camera.position),o=i.sub(this._camera.position);j.multiplyScalar(o.x),H.multiplyScalar(o.y),q.multiplyScalar(o.z),b.copy(j).add(H).add(q),b.z=b.z+r,this.dollyTo(r,!1),this.setFocalOffset(-b.x,b.y,-b.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 x.Vector4,typeof e=="number"?this._viewport.set(e,t,s,i):this._viewport.copy(e)}getDistanceToFitBox(e,t,s,i=!1){if(Ce(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const r=e/t,o=this._camera.getEffectiveFOV()*te,a=this._camera.aspect;return((i?r>a:r<a)?t:e/a)*.5/Math.tan(o*.5)+s*.5}getDistanceToFitSphere(e){if(Ce(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const t=this._camera.getEffectiveFOV()*te,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 x.Vector3).copy(t?this._targetEnd:this._target)}getPosition(e,t=!0){return(e&&e.isVector3?e:new x.Vector3).setFromSpherical(t?this._sphericalEnd:this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(t?this._targetEnd:this._target)}getSpherical(e,t=!0){return(e||new x.Spherical).copy(t?this._sphericalEnd:this._spherical)}getFocalOffset(e,t=!0){return(e&&e.isVector3?e:new x.Vector3).copy(t?this._focalOffsetEnd:this._focalOffset)}normalizeRotations(){this._sphericalEnd.theta=this._sphericalEnd.theta%K,this._sphericalEnd.theta<0&&(this._sphericalEnd.theta+=K),this._spherical.theta+=K*Math.round((this._sphericalEnd.theta-this._spherical.theta)/K)}reset(e=!1){if(!L(this._camera.up.x,this._cameraUp0.x)||!L(this._camera.up.y,this._cameraUp0.y)||!L(this._camera.up.z,this._cameraUp0.z)){this._camera.up.copy(this._cameraUp0);const s=this.getPosition(b);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=b.subVectors(this._target,this._camera.position).normalize(),t=A.crossVectors(e,this._camera.up);this._camera.up.crossVectors(t,e).normalize(),this._camera.updateMatrixWorld();const s=this.getPosition(b);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),a=this._zoomEnd-this._zoom;if(D(t))this._thetaVelocity.value=0,this._spherical.theta=this._sphericalEnd.theta;else{const u=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.theta=he(this._spherical.theta,this._sphericalEnd.theta,this._thetaVelocity,u,1/0,e),this._needsUpdate=!0}if(D(s))this._phiVelocity.value=0,this._spherical.phi=this._sphericalEnd.phi;else{const u=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.phi=he(this._spherical.phi,this._sphericalEnd.phi,this._phiVelocity,u,1/0,e),this._needsUpdate=!0}if(D(i))this._radiusVelocity.value=0,this._spherical.radius=this._sphericalEnd.radius;else{const u=this._isUserControllingDolly?this.draggingSmoothTime:this.smoothTime;this._spherical.radius=he(this._spherical.radius,this._sphericalEnd.radius,this._radiusVelocity,u,this.maxSpeed,e),this._needsUpdate=!0}if(D(r.x)&&D(r.y)&&D(r.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const u=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;Ie(this._target,this._targetEnd,this._targetVelocity,u,this.maxSpeed,e,this._target),this._needsUpdate=!0}if(D(o.x)&&D(o.y)&&D(o.z))this._focalOffsetVelocity.set(0,0,0),this._focalOffset.copy(this._focalOffsetEnd);else{const u=this._isUserControllingOffset?this.draggingSmoothTime:this.smoothTime;Ie(this._focalOffset,this._focalOffsetEnd,this._focalOffsetVelocity,u,this.maxSpeed,e,this._focalOffset),this._needsUpdate=!0}if(D(a))this._zoomVelocity.value=0,this._zoom=this._zoomEnd;else{const u=this._isUserControllingZoom?this.draggingSmoothTime:this.smoothTime;this._zoom=he(this._zoom,this._zoomEnd,this._zoomVelocity,u,1/0,e)}if(this.dollyToCursor){if(Z(this._camera)&&this._changedDolly!==0){const u=this._spherical.radius-this._lastDistance,C=this._camera,v=this._getCameraDirection(re),_=b.copy(v).cross(C.up).normalize();_.lengthSq()===0&&(_.x=1);const d=A.crossVectors(_,v),c=this._sphericalEnd.radius*Math.tan(C.getEffectiveFOV()*te*.5),f=(this._sphericalEnd.radius-u-this._sphericalEnd.radius)/this._sphericalEnd.radius,E=X.copy(this._targetEnd).add(_.multiplyScalar(this._dollyControlCoord.x*c*C.aspect)).add(d.multiplyScalar(this._dollyControlCoord.y*c)),y=b.copy(this._targetEnd).lerp(E,f),w=this._lastDollyDirection===G.IN&&this._spherical.radius<=this.minDistance,O=this._lastDollyDirection===G.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(w||O)){this._sphericalEnd.radius-=u,this._spherical.radius-=u;const R=A.copy(v).multiplyScalar(-u);y.add(R)}this._boundary.clampPoint(y,y);const S=A.subVectors(y,this._targetEnd);this._targetEnd.copy(y),this._target.add(S),this._changedDolly-=u,D(this._changedDolly)&&(this._changedDolly=0)}else if(V(this._camera)&&this._changedZoom!==0){const u=this._zoom-this._lastZoom,C=this._camera,v=b.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(C.near+C.far)/(C.near-C.far)).unproject(C),_=A.set(0,0,-1).applyQuaternion(C.quaternion),d=X.copy(v).add(_.multiplyScalar(-v.dot(C.up))),n=-(this._zoom-u-this._zoom)/this._zoom,f=this._getCameraDirection(re),E=this._targetEnd.dot(f),y=b.copy(this._targetEnd).lerp(d,n),w=y.dot(f),O=f.multiplyScalar(w-E);y.sub(O),this._boundary.clampPoint(y,y);const S=A.subVectors(y,this._targetEnd);this._targetEnd.copy(y),this._target.add(S),this._changedZoom-=u,D(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),(!D(this._focalOffset.x)||!D(this._focalOffset.y)||!D(this._focalOffset.z))&&(this._camera.updateMatrixWorld(),j.setFromMatrixColumn(this._camera.matrix,0),H.setFromMatrixColumn(this._camera.matrix,1),q.setFromMatrixColumn(this._camera.matrix,2),j.multiplyScalar(this._focalOffset.x),H.multiplyScalar(-this._focalOffset.y),q.multiplyScalar(this._focalOffset.z),b.copy(j).add(H).add(q),this._camera.position.add(b)),this._boundaryEnclosesCamera&&this._encloseToBoundary(this._camera.position.copy(this._target),b.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),1);const g=this._needsUpdate;return g&&!this._updatedLastTime?(this._hasRested=!1,this.dispatchEvent({type:"wake"}),this.dispatchEvent({type:"update"})):g?(this.dispatchEvent({type:"update"}),D(t,this.restThreshold)&&D(s,this.restThreshold)&&D(i,this.restThreshold)&&D(r.x,this.restThreshold)&&D(r.y,this.restThreshold)&&D(r.z,this.restThreshold)&&D(o.x,this.restThreshold)&&D(o.y,this.restThreshold)&&D(o.z,this.restThreshold)&&D(a,this.restThreshold)&&!this._hasRested&&(this._hasRested=!0,this.dispatchEvent({type:"rest"}))):!g&&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=g,this._needsUpdate=!1,g}toJSON(){return JSON.stringify({enabled:this._enabled,minDistance:this.minDistance,maxDistance:se(this.maxDistance),minZoom:this.minZoom,maxZoom:se(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:se(this.maxPolarAngle),minAzimuthAngle:se(this.minAzimuthAngle),maxAzimuthAngle:se(this.maxAzimuthAngle),smoothTime:this.smoothTime,draggingSmoothTime:this.draggingSmoothTime,dollySpeed:this.dollySpeed,truckSpeed:this.truckSpeed,dollyToCursor:this.dollyToCursor,verticalDragToForward:this.verticalDragToForward,target:this._targetEnd.toArray(),position:b.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=ie(s.maxDistance),this.minZoom=s.minZoom,this.maxZoom=ie(s.maxZoom),this.minPolarAngle=s.minPolarAngle,this.maxPolarAngle=ie(s.maxPolarAngle),this.minAzimuthAngle=ie(s.minAzimuthAngle),this.maxAzimuthAngle=ie(s.maxAzimuthAngle),this.smoothTime=s.smoothTime,this.draggingSmoothTime=s.draggingSmoothTime,this.dollySpeed=s.dollySpeed,this.truckSpeed=s.truckSpeed,this.dollyToCursor=s.dollyToCursor,this.verticalDragToForward=s.verticalDragToForward,this._target0.fromArray(s.target0),this._position0.fromArray(s.position0),this._zoom0=s.zoom0,this._focalOffset0.fromArray(s.focalOffset0),this.moveTo(s.target[0],s.target[1],s.target[2],t),I.setFromVector3(b.fromArray(s.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(I.theta,I.phi,t),this.dollyTo(I.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=A.copy(t).add(e),a=this._boundary.clampPoint(r,X).sub(r),l=a.lengthSq();if(l===0)return e.add(t);if(l===i)return e;if(s===0)return e.add(t).add(a);{const p=1+s*l/t.dot(a);return e.add(A.copy(t).multiplyScalar(p)).add(a.multiplyScalar(1-s))}}_updateNearPlaneCorners(){if(Z(this._camera)){const e=this._camera,t=e.near,s=e.getEffectiveFOV()*te,i=Math.tan(s*.5)*t,r=i*e.aspect;this._nearPlaneCorners[0].set(-r,-i,0),this._nearPlaneCorners[1].set(r,-i,0),this._nearPlaneCorners[2].set(r,i,0),this._nearPlaneCorners[3].set(-r,i,0)}else if(V(this._camera)){const e=this._camera,t=1/e.zoom,s=e.left*t,i=e.right*t,r=e.top*t,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)||Ce(this._camera,"_collisionTest"))return e;const s=this._getTargetDirection(re);xe.lookAt(ke,s,this._camera.up);for(let i=0;i<4;i++){const r=A.copy(this._nearPlaneCorners[i]);r.applyMatrix4(xe);const o=X.addVectors(this._target,r);de.set(o,s),de.far=this._spherical.radius+1;const a=de.intersectObjects(this.colliderMeshes);a.length!==0&&a[0].distance<e&&(e=a[0].distance)}return e}_getClientRect(e){if(!this._domElement)return;const t=this._domElement.getBoundingClientRect();return e.x=t.left,e.y=t.top,this._viewport?(e.x+=this._viewport.x,e.y+=t.height-this._viewport.w-this._viewport.y,e.width=this._viewport.z,e.height=this._viewport.w):(e.width=t.width,e.height=t.height),e}_createOnRestPromise(e){return e?Promise.resolve():(this._hasRested=!1,this.dispatchEvent({type:"transitionstart"}),new Promise(t=>{const s=()=>{this.removeEventListener("rest",s),t()};this.addEventListener("rest",s)}))}_addAllEventListeners(e){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(e){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(e){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(e,t=new x.Sphere){const s=t,i=s.center;$.makeEmpty(),e.traverseVisible(o=>{o.isMesh&&$.expandByObject(o)}),$.getCenter(i);let r=0;return e.traverseVisible(o=>{if(!o.isMesh)return;const a=o,l=a.geometry.clone();l.applyMatrix4(a.matrixWorld);const g=l.attributes.position;for(let u=0,C=g.count;u<C;u++)b.fromBufferAttribute(g,u),r=Math.max(r,i.distanceToSquared(b))}),s.radius=Math.sqrt(r),s}}var Le={exports:{}},J=typeof Reflect=="object"?Reflect:null,Be=J&&typeof J.apply=="function"?J.apply:function(e,t,s){return Function.prototype.apply.call(e,t,s)},me;J&&typeof J.ownKeys=="function"?me=J.ownKeys:Object.getOwnPropertySymbols?me=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:me=function(e){return Object.getOwnPropertyNames(e)};function Ht(h){console&&console.warn&&console.warn(h)}var it=Number.isNaN||function(e){return e!==e};function P(){P.init.call(this)}Le.exports=P;Le.exports.once=Yt;P.EventEmitter=P;P.prototype._events=void 0;P.prototype._eventsCount=0;P.prototype._maxListeners=void 0;var Ye=10;function ge(h){if(typeof h!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof h)}Object.defineProperty(P,"defaultMaxListeners",{enumerable:!0,get:function(){return Ye},set:function(h){if(typeof h!="number"||h<0||it(h))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+h+".");Ye=h}});P.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};P.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||it(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 rt(h){return h._maxListeners===void 0?P.defaultMaxListeners:h._maxListeners}P.prototype.getMaxListeners=function(){return rt(this)};P.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 a=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw a.context=o,a}var l=r[e];if(l===void 0)return!1;if(typeof l=="function")Be(l,this,t);else for(var p=l.length,g=lt(l,p),s=0;s<p;++s)Be(g[s],this,t);return!0};function ot(h,e,t,s){var i,r,o;if(ge(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=rt(h),i>0&&o.length>i&&!o.warned){o.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=h,a.type=e,a.count=o.length,Ht(a)}return h}P.prototype.addListener=function(e,t){return ot(this,e,t,!1)};P.prototype.on=P.prototype.addListener;P.prototype.prependListener=function(e,t){return ot(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 nt(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}P.prototype.once=function(e,t){return ge(t),this.on(e,nt(this,e,t)),this};P.prototype.prependOnceListener=function(e,t){return ge(t),this.prependListener(e,nt(this,e,t)),this};P.prototype.removeListener=function(e,t){var s,i,r,o,a;if(ge(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){a=s[o].listener,r=o;break}if(r<0)return this;r===0?s.shift():Vt(s,r),s.length===1&&(i[e]=s[0]),i.removeListener!==void 0&&this.emit("removeListener",e,a||t)}return this};P.prototype.off=P.prototype.removeListener;P.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 at(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?Bt(i):lt(i,i.length)}P.prototype.listeners=function(e){return at(this,e,!0)};P.prototype.rawListeners=function(e){return at(this,e,!1)};P.listenerCount=function(h,e){return typeof h.listenerCount=="function"?h.listenerCount(e):ht.call(h,e)};P.prototype.listenerCount=ht;function ht(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}P.prototype.eventNames=function(){return this._eventsCount>0?me(this._events):[]};function lt(h,e){for(var t=new Array(e),s=0;s<e;++s)t[s]=h[s];return t}function Vt(h,e){for(;e+1<h.length;e++)h[e]=h[e+1];h.pop()}function Bt(h){for(var e=new Array(h.length),t=0;t<e.length;++t)e[t]=h[t].listener||h[t];return e}function Yt(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))}ct(h,e,r,{once:!0}),e!=="error"&&Zt(h,i,{once:!0})})}function Zt(h,e,t){typeof h.on=="function"&&ct(h,"error",e,t)}function ct(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 B=Le.exports;const qt={antialias:!1,devicePixelRatio:window.devicePixelRatio,powerPreference:"high-performance",toneMappingExposure:1,alpha:!1,outputColorSpace:Ae.ColorSpace.sRGB,logarithmicDepthBuffer:!1,preserveDrawingBuffer:!1,stencil:!1,depth:!1};class Wt{constructor(e){this.options=e;const{width:t,height:s,rendererParams:i}=e,{alpha:r,devicePixelRatio:o,antialias:a,powerPreference:l,toneMappingExposure:p,outputColorSpace:g,logarithmicDepthBuffer:u,preserveDrawingBuffer:C,stencil:v,depth:_}=i,d=new T.WebGLRenderer({alpha:r,antialias:a,powerPreference:l,logarithmicDepthBuffer:u,preserveDrawingBuffer:C,stencil:v,depth:_});d.setSize(t,s),d.setPixelRatio(o),d.toneMappingExposure=p,d.outputColorSpace=g,this.renderer=d}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,p;const{x:t,y:s,width:i,height:r}=e,o=(l=e.scissor)!=null?l:!1,a=(p=e.scissorTest)!=null?p:!1;this.renderer.setViewport(t,s,i,r),o&&(this.renderer.setScissor(t,s,i,r),this.renderer.setScissorTest(a))}setViewPadding(e=0,t=0,s=0,i=0){const{width:r,height:o}=this.renderer.getSize(new T.Vector2),a={x:i,y:s,width:r-i-t,height:o-e-s};this.setViewport(a)}dispose(){var e,t;this.setSize(1,1),(e=this.renderer)==null||e.clear(),(t=this.renderer)==null||t.dispose()}}const Gt={antialias:!0,devicePixelRatio:window.devicePixelRatio};class Kt{constructor(e){this.options=e;const{width:t,height:s,rendererParams:i,renderer:r}=e,{devicePixelRatio:o,antialias:a}=i,l=new r({antialias:a});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()}}const dt={fov:45,near:1,far:1e3,up:new T.Vector3(0,1,0)};class Xt{constructor(e){this.event=new B.EventEmitter,this.cameraArr=[],this.cameraActiveIndex=0,this.customCamera=!1,this.width=0,this.height=0,this.width=e.width,this.height=e.height}get camera(){return this.cameraArr[this.cameraActiveIndex]}addPerspectiveCamera(e=dt){const{fov:t,far:s,near:i,up:r,aspect:o}=e,a=o!=null?o:this.width/this.height,l=new T.PerspectiveCamera(t,a,i,s);return l.up=r,this.cameraArr.push(l),l}removeCamera(e){e===this.cameraActiveIndex&&(this.cameraActiveIndex=0),this.cameraArr.splice(e,1)}setCameraActive(e){this.cameraActiveIndex=e,this.event.emit("cameraChange",this.camera)}setSize(e,t){this.width=e,this.height=t,this.cameraArr.forEach(s=>{s instanceof T.PerspectiveCamera&&(s.aspect=e/t),s.updateProjectionMatrix()})}cloneCamera(){const e=this.addPerspectiveCamera({fov:this.camera.fov,aspect:this.camera.aspect,near:this.camera.near,far:this.camera.far,up:this.camera.up});return e.position.copy(this.camera.position),e}sync(e){if(e.type==="PerspectiveCamera"){const t=e;(!this.camera.matrixWorld.equals(t.matrixWorld)||this.camera.far!==t.far||this.camera.near!==t.near||this.camera.fov!==t.fov||this.camera.aspect!==t.aspect)&&this.camera.copy(t)}else{const t=e,s=t.viewMatrix,i=t.inverseViewMatrix,r=new T.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 T.Matrix4(s[0],s[4],s[8],s[12],s[1],s[5],s[9],s[13],s[2],s[6],s[10],s[14],s[3],s[7],s[11],s[15]),{width:a,height:l}=this,p=a/l;(this.camera.fov!==t.fov||this.camera.aspect!==p||!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=p,this.camera.updateProjectionMatrix())}}dispose(){this.event.removeAllListeners()}}const $t={background:null},Qt=new T.Scene;class Jt{constructor(e){this.event=new B.EventEmitter,this.sceneArr=[],this.sceneActiveIndex=0,this.overrideMaterial=!1,this.options=e}get scene(){return this.sceneActiveIndex==-1?Qt:this.sceneArr[this.sceneActiveIndex]}addScene(e){const t=new T.Scene;return e!=null&&e.background&&(t.background=e.background),this.sceneArr.push(t),t}removeScene(e){e===this.sceneActiveIndex&&(this.sceneActiveIndex=0),this.sceneArr[e].traverse(t=>{et.disposeMesh(t),(t instanceof wt.CSS2DObject||t instanceof De.CSS3DObject||t instanceof De.CSS3DSprite)&&t.removeFromParent()}),this.sceneArr[e].clear(),this.sceneArr.splice(e,1)}setSceneActive(e){this.sceneActiveIndex=e,this.event.emit("sceneChange",this.scene)}dispose(){this.event.removeAllListeners(),this.sceneArr.forEach((e,t)=>{this.removeScene(t)})}}class es{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 T.AxesHelper(100);else if(e.isCamera)i=new T.CameraHelper(e);else if(e.isPointLight)i=new T.PointLightHelper(e,1);else if(e.isDirectionalLight)i=new T.DirectionalLightHelper(e,1);else if(e.isSpotLight)i=new T.SpotLightHelper(e);else if(e.isHemisphereLight)i=new T.HemisphereLightHelper(e,10);else if(e.isRectAreaLight)i=new bt.RectAreaLightHelper(e);else{const r=new T.Box3;if(r.setFromObject(e,!0),r.isEmpty()===!1){i=new T.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 At.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 T.AxesHelper||this.remove({uuid:e})})}update(e,t,s){var r,o;const{cameraController:i}=this.options;Object.values(this.helpers).forEach(a=>{if(a.update&&a.update(),a instanceof T.Box3Helper){const l=a.material,{object:p}=l.userData;p&&a.box.setFromObject(p,!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 ts{constructor(e){this.event=new B.EventEmitter,this.cameraControlsArr=[],this.cameraControlsActiveIndex=0,this.autoRotateSpeed=0,this.options=e,ee.install({THREE:T})}get cameraControls(){return this.cameraControlsArr[this.cameraControlsActiveIndex]}addCameraControls(e,t){const{domElement:s}=this.options.controlsParams,i=new ee(e,s);return t&&(i.interactiveArea=t,i.addEventListener("update",()=>{this.cameraControlsArr.forEach(r=>{r!==i&&(r.enabled=!1)})}),i.addEventListener("sleep",()=>{this.cameraControlsArr.forEach(r=>{r!==i&&(r.enabled=!0)})})),this.cameraControlsArr.push(i),i.setLookAt(0,0,400,0,0,0,!1),i}removeCameraControls(e){var t;e===this.cameraControlsActiveIndex&&(this.cameraControlsActiveIndex=0),(t=this.cameraControlsArr[e])==null||t.dispose(),this.cameraControlsArr.splice(e,1)}setCameraControlsActive(e){this.cameraControlsActiveIndex=e,this.event.emit("controlsChange",this.cameraControls)}enable(){this.cameraControlsArr.forEach(e=>{e.enabled=!0})}disable(){this.cameraControlsArr.forEach(e=>{e.enabled=!1})}update(e){this.cameraControlsArr.forEach(t=>{t.update(e)}),this.autoRotateSpeed&&this.cameraControls&&(this.cameraControls.azimuthAngle+=this.autoRotateSpeed*e*T.MathUtils.DEG2RAD)}dispose(){this.event.removeAllListeners(),this.cameraControlsArr.forEach(e=>{e.dispose()})}}class ss{constructor(e){this.event=new B.EventEmitter;const{renderer:t,scene:s,camera:i}=e,r=new Lt.TransformControls(i,t.domElement);if(r.getHelper){const o=r.getHelper();if(s.add(o),+T.REVISION<170){const a=r._root;a.dispose=()=>{a.traverse(l=>{l.geometry&&l.geometry.dispose(),l.material&&l.material.dispose()})},r.dispose=()=>{r.disconnect(),a.dispose()}}}else r instanceof T.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 F.Vector3,is=new F.Quaternion,qe=new F.Vector3,N=new F.Matrix4,rs=new F.Matrix4;class os{constructor(e={}){const t=this;let s,i,r,o;const a={camera:{style:""},objects:new WeakMap},l=e.element!==void 0?e.element:document.createElement("div");l.style.overflow="hidden",this.domElement=l;const p=document.createElement("div");p.style.transformOrigin="0 0",p.style.pointerEvents="none",l.appendChild(p);const g=document.createElement("div");g.style.transformStyle="preserve-3d",p.appendChild(g),this.getSize=function(){return{width:s,height:i}},this.render=function(c,n){const f=n.projectionMatrix.elements[5]*o;n.view&&n.view.enabled?(p.style.transform=`translate( ${-n.view.offsetX*(s/n.view.width)}px, ${-n.view.offsetY*(i/n.view.height)}px )`,p.style.transform+=`scale( ${n.view.fullWidth/n.view.width}, ${n.view.fullHeight/n.view.height} )`):p.style.transform="",c.matrixWorldAutoUpdate===!0&&c.updateMatrixWorld(),n.parent===null&&n.matrixWorldAutoUpdate===!0&&n.updateMatrixWorld();let E,y;n.isOrthographicCamera&&(E=-(n.right+n.left)/2,y=(n.top+n.bottom)/2);const w=n.view&&n.view.enabled?n.view.height/n.view.fullHeight:1,O=n.isOrthographicCamera?`scale( ${w} )scale(`+f+")translate("+u(E)+"px,"+u(y)+"px)"+C(n.matrixWorldInverse):`scale( ${w} )translateZ(`+f+"px)"+C(n.matrixWorldInverse),R=(n.isPerspectiveCamera?"perspective("+f+"px) ":"")+O+"translate("+r+"px,"+o+"px)";a.camera.style!==R&&(g.style.transform=R,a.camera.style=R),d(c,c,n)},this.setSize=function(c,n){s=c,i=n,r=s/2,o=i/2,l.style.width=c+"px",l.style.height=n+"px",p.style.width=c+"px",p.style.height=n+"px",g.style.width=c+"px",g.style.height=n+"px"};function u(c){return Math.abs(c)<1e-10?0:c}function C(c){const n=c.elements;return"matrix3d("+u(n[0])+","+u(-n[1])+","+u(n[2])+","+u(n[3])+","+u(n[4])+","+u(-n[5])+","+u(n[6])+","+u(n[7])+","+u(n[8])+","+u(-n[9])+","+u(n[10])+","+u(n[11])+","+u(n[12])+","+u(-n[13])+","+u(n[14])+","+u(n[15])+")"}function v(c){const n=c.elements;return"translate(-50%,-50%)"+("matrix3d("+u(n[0])+","+u(n[1])+","+u(n[2])+","+u(n[3])+","+u(-n[4])+","+u(-n[5])+","+u(-n[6])+","+u(-n[7])+","+u(n[8])+","+u(n[9])+","+u(n[10])+","+u(n[11])+","+u(n[12])+","+u(n[13])+","+u(n[14])+","+u(n[15])+")")}function _(c){c.isCSS3DObject&&(c.element.style.display="none");for(let n=0,f=c.children.length;n<f;n++)_(c.children[n])}function d(c,n,f,E){if(c.visible===!1){_(c);return}if(c.isCSS3DObject){const y=c.layers.test(f.layers)===!0,w=c.element;if(w.style.display=y===!0?"":"none",y===!0){c.onBeforeRender(t,n,f);let O;c.isCSS3DSprite?(N.copy(f.matrixWorldInverse),N.transpose(),c.rotation2D!==0&&N.multiply(rs.makeRotationZ(c.rotation2D)),c.matrixWorld.decompose(Ze,is,qe),N.setPosition(Ze),N.scale(qe),N.elements[3]=0,N.elements[7]=0,N.elements[11]=0,N.elements[15]=1,O=v(N)):O=v(c.matrixWorld);const S=a.objects.get(c);if(S===void 0||S.style!==O){w.style.transform=O;const R={style:O};a.objects.set(c,R)}w.parentNode!==g&&g.appendChild(w),c.onAfterRender(t,n,f)}}for(let y=0,w=c.children.length;y<w;y++)d(c.children[y],n,f)}}}const Q=new F.Vector3,We=new F.Matrix4,Ge=new F.Matrix4,Ke=new F.Vector3,Xe=new F.Vector3;class ns{constructor(e={}){const t=this;let s,i,r,o;const a={objects:new WeakMap},l=e.element!==void 0?e.element:document.createElement("div");l.style.overflow="hidden",this.domElement=l,this.getSize=function(){return{width:s,height:i}},this.render=function(_,d){_.matrixWorldAutoUpdate===!0&&_.updateMatrixWorld(),d.parent===null&&d.matrixWorldAutoUpdate===!0&&d.updateMatrixWorld(),We.copy(d.matrixWorldInverse),Ge.multiplyMatrices(d.projectionMatrix,We),g(_,_,d),v(_)},this.setSize=function(_,d){s=_,i=d,r=s/2,o=i/2,l.style.width=_+"px",l.style.height=d+"px"};function p(_){_.isCSS2DObject&&(_.element.style.display="none");for(let d=0,c=_.children.length;d<c;d++)p(_.children[d])}function g(_,d,c){if(_.visible===!1){p(_);return}if(_.isCSS2DObject){Q.setFromMatrixPosition(_.matrixWorld),Q.applyMatrix4(Ge);const n=Q.z>=-1&&Q.z<=1&&_.layers.test(c.layers)===!0,f=_.element;f.style.display=n===!0?"":"none",n===!0&&(_.onBeforeRender(t,d,c),f.style.transform="translate("+-100*_.center.x+"%,"+-100*_.center.y+"%)translate("+(Q.x*r+r)+"px,"+(-Q.y*o+o)+"px)",f.parentNode!==l&&l.appendChild(f),_.onAfterRender(t,d,c));const E={distanceToCameraSquared:u(c,_)};a.objects.set(_,E)}for(let n=0,f=_.children.length;n<f;n++)g(_.children[n],d,c)}function u(_,d){return Ke.setFromMatrixPosition(_.matrixWorld),Xe.setFromMatrixPosition(d.matrixWorld),Ke.distanceToSquared(Xe)}function C(_){const d=[];return _.traverseVisible(function(c){c.isCSS2DObject&&d.push(c)}),d}function v(_){const d=C(_).sort(function(n,f){if(n.renderOrder!==f.renderOrder)return f.renderOrder-n.renderOrder;const E=a.objects.get(n).distanceToCameraSquared,y=a.objects.get(f).distanceToCameraSquared;return E-y}),c=d.length;for(let n=0,f=d.length;n<f;n++)d[n].element.style.zIndex=c-n}}}const $e={zIndex:"auto"};class as{constructor(e){this.container=e}addRenderer(e,t){const s=t.container||this.container,i=s.offsetWidth,r=s.offsetHeight,o=e==="css2d"?new ns:new os;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 hs={name:"OutputShader",uniforms:{tDiffuse:{value:null},toneMappingExposure:{value:1},premultiplieAlpha:{value:0}},vertexShader:`
2
2
  precision highp float;
3
3
 
4
4
  uniform mat4 modelViewMatrix;
@@ -70,7 +70,7 @@
70
70
 
71
71
  #endif
72
72
 
73
- }`};class ls extends St.OutputPass{constructor(){super();const e=hs;this.uniforms=z.UniformsUtils.clone(e.uniforms),this.material=new z.RawShaderMaterial({name:e.name,uniforms:this.uniforms,vertexShader:e.vertexShader,fragmentShader:e.fragmentShader}),this.fsQuad=new Pt.FullScreenQuad(this.material)}}const cs=a=>{const e=new bt.ShaderPass(new T.ShaderMaterial({uniforms:{baseTexture:{value:null},bloomTexture:{value:a.renderTarget2.texture},bloomAlphaType:{value:0}},vertexShader:`
73
+ }`};class ls extends Mt.OutputPass{constructor(){super();const e=hs;this.uniforms=F.UniformsUtils.clone(e.uniforms),this.material=new F.RawShaderMaterial({name:e.name,uniforms:this.uniforms,vertexShader:e.vertexShader,fragmentShader:e.fragmentShader}),this.fsQuad=new Dt.FullScreenQuad(this.material)}}const cs=h=>{const e=new Rt.ShaderPass(new T.ShaderMaterial({uniforms:{baseTexture:{value:null},bloomTexture:{value:h.renderTarget2.texture},bloomAlphaType:{value:0}},vertexShader:`
74
74
  varying vec2 vUv;
75
75
  void main() {
76
76
  vUv = uv;
@@ -91,4 +91,4 @@
91
91
  gl_FragColor = ( base_color + vec4( 1.0 ) * bloom_color );
92
92
  }
93
93
  }
94
- `,defines:{}}),"baseTexture");return e.needsSwap=!0,e},xe=1,re=!1,ds=new T.MeshBasicMaterial({color:"black"}),ms=new T.PointsMaterial({color:"black",sizeAttenuation:!1}),ps=new T.PointsMaterial({color:"black",sizeAttenuation:!0}),us=new T.SpriteMaterial({color:"black",sizeAttenuation:!0}),fs=new T.SpriteMaterial({color:"black",sizeAttenuation:!1}),_s=new Qe.MeshLineMaterial({color:"black",sizeAttenuation:0,lineWidth:0}),gs={kernelRadius:8,minDistance:.005,maxDistance:.1},vs={threshold:0,strength:.4,radius:.1,bloomAlphaType:0},ys={multisampling:4,premultiplieAlpha:!1};class Cs{constructor(e){this.bloomComposerActive=!1,this.active=!0,this.bloomSelection=new Set,this.bloomLayer=new T.Layers,this.bloomMaterials={},this.bloomVisible={},this.pipViewportState=null,this.options=e;const{rendererController:t,sceneController:s,cameraController:i,composerParams:r}=e,{renderer:o}=t;this.renderer=o;const{multisampling:h}=r,{maxSamples:l}=o.capabilities,d=o.getDrawingBufferSize(new T.Vector2),g=new T.WebGLRenderTarget(d.width,d.height,{samples:Math.min(h,l),type:T.HalfFloatType}),m=new be.EffectComposer(o,g),C=this.getSize();m.setSize(C.width,C.height);const v=new Lt.RenderPass(s.scene,i.camera);m.addPass(v),this.scene=s.scene,this.camera=i.camera,this.finalComposer=m,this.renderPass=v,i.event.on("cameraChange",_=>{this.changeCamera(_)}),s.event.on("sceneChange",_=>{this.changeScene(_)})}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 ls;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 T.Vector2),o=r.width,h=r.height,l=new At.SSAOPass(t,s,o,h);l.kernelRadius=e.kernelRadius,l.minDistance=e.minDistance,l.maxDistance=e.maxDistance,this.ssaoPass=l,this.finalComposer.addPass(l)}addSSAOGui(e){if(!this.ssaoPass)return;new we({ssao:{kernelRadius:{min:0,max:32,target:()=>this.ssaoPass},minDistance:{min:.001,max:.02,target:()=>this.ssaoPass},maxDistance:{min:.01,max:.3,target:()=>this.ssaoPass}}}).showGui(e)}addBloomPass(e){const{renderer:t}=this,{threshold:s,strength:i,radius:r,bloomAlphaType:o}=e,h=new Dt.UnrealBloomPass(new T.Vector2(window.innerWidth,window.innerHeight),i,r,s);this.bloomPass=h;const l=new be.EffectComposer(t);l.renderToScreen=!1,l.addPass(this.renderPass),l.addPass(h),this.bloomComposer=l;const d=cs(l);d.uniforms.bloomAlphaType.value=o,this.bloomComposer=l,this.finalComposer.addPass(d),this.mixPass=d,this.bloomLayer.set(xe)}addBloomGui(e){if(!this.bloomComposer)return;new we({bloom:{threshold:{min:0,max:1,step:.01,target:()=>this.bloomPass},radius:{min:0,max:1,step:.001,target:()=>this.bloomPass},strength:{min:0,max:10,step:.001,target:()=>this.bloomPass}}}).showGui(e)}toggleBloomSelection(e,t){if(!this.bloomComposer){console.warn("err:pencil.options.bloom");return}const{object3d:s}=e;if(!s)return;let i=t;t===void 0&&(i=!this.bloomSelection.has(s)),i?(this.bloomSelection.add(s),s.traverse(r=>{r.layers.enable(xe)})):(this.bloomSelection.delete(s),s.traverse(r=>{r.layers.disable(xe)})),this.bloomSelection.size===0?this.bloomComposerActive=!1:this.bloomComposerActive=!0}enable(){this.active||(this.active=!0)}disable(){this.active&&(this.active=!1)}setSize(e,t){var s;(s=this.bloomComposer)==null||s.setSize(e,t),this.finalComposer.setSize(e,t)}setPixelRatio(e){var t;(t=this.bloomComposer)==null||t.setPixelRatio(e),this.finalComposer.setPixelRatio(e)}darkenNonBloomed(){const e=[],t=[];this.scene.children.forEach(s=>{s.isTransformControls||s.isTransformControlsRoot||s.type==="RectAreaLightHelper"?e.push(s):t.push(s)}),e.forEach(s=>{this.bloomVisible[s.uuid]=s.visible,s.visible=!1}),t.forEach(s=>{s.traverse(i=>{const r=i,o=i,h=i;r.material&&this.bloomLayer.test(r.layers)===!1&&(this.bloomMaterials[r.uuid]=r.material,o.isSprite?o.material.sizeAttenuation?o.material=us:o.material=fs:r.material instanceof Qe.MeshLineMaterial?r.material=_s:h.isPoints?h.material.sizeAttenuation?h.material=ps:h.material=ms:r.material=ds)})})}restoreNonBloomed(){this.scene.traverse(e=>{const t=e;this.bloomMaterials[t.uuid]?(t.material=this.bloomMaterials[t.uuid],delete this.bloomMaterials[t.uuid]):this.bloomVisible[t.uuid]!==void 0&&(t.visible=this.bloomVisible[t.uuid],delete this.bloomVisible[t.uuid])})}finalComposerRender(){this.bloomComposerActive&&this.bloomComposer?(this.mixPass.enabled=!0,this.darkenNonBloomed(),this.bloomComposer.render(),this.restoreNonBloomed()):this.mixPass&&(this.mixPass.enabled=!1),this.finalComposer.render()}getSize(){return this.renderer.getSize(new T.Vector2)}render(){if(!this.active)return;const{cameraController:e,rendererController:t}=this.options;if(this.pipViewportState){e.setCameraActive(0);const s=this.getSize();t.setViewport({x:0,y:0,width:s.width,height:s.height,scissor:!0,scissorTest:!1}),this.finalComposerRender(),e.setCameraActive(1),t.setViewport(ae(I({},this.pipViewportState),{scissor:!0,scissorTest:!0})),this.finalComposerRender()}else this.finalComposerRender()}dispose(){var e;this.bloomMaterials={},this.bloomVisible={},this.bloomSelection.clear(),this.finalComposer.dispose(),(e=this.bloomComposer)==null||e.dispose()}}class Xe extends T.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 T.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 T.VideoTexture(o)):r=new T.Texture;const h=new T.FileLoader(this.manager);return h.setResponseType("blob"),h.setRequestHeader(this.requestHeader),h.setPath(this.path),h.setWithCredentials(this.withCredentials),h.load(e,l=>{let d=l;const g=e.split(".").pop(),m=this.options.type==="image"?`image/${g||"png"}`:`video/${g||"mp4"}`;d=d.slice(0,l.size,m);const C=()=>{o.removeEventListener("load",v,!1),o.removeEventListener("error",_,!1)},v=()=>{C(),r.needsUpdate=!0,t&&t(r)},_=f=>{C(),i&&i(f),this.manager.itemError(e),this.manager.itemEnd(e)};o.addEventListener("load",v,!1),o.addEventListener("error",_,!1);const p=window.URL.createObjectURL(d);o.src=p},s,i),r}}class Es extends T.Loader{constructor(e){super(e)}load(e,t,s,i){const r=new T.FileLoader(this.manager);r.setResponseType("blob"),r.setRequestHeader(this.requestHeader),r.setPath(this.path),r.setWithCredentials(this.withCredentials),r.load(e,o=>{const h=o,l=new DecompressionStream("gzip"),d=h.stream().pipeThrough(l);new Response(d).json().then(m=>{t==null||t(m)}).catch(m=>{i==null||i(m)})},s,i)}}const Os={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 Ts{constructor(e){this.pluginName="loader",this.loadObj=[],this.delLoadArr=[],this.assets=new Map,this.event=new j.EventEmitter,this.options=I({simpleTexture4deleted:!1,prefix:""},e),this.loadingManager=new T.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 T.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(Os))if(r.includes(t))return i}getLoader(e,t){if(e==="images")return this.textureLoader||(this.textureLoader=new Xe(this.loadingManager),this.options.prefix&&this.textureLoader.setPath(this.options.prefix)),this.textureLoader;if(e==="media")return this.videoTextureLoader||(this.videoTextureLoader=new Xe(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 De.GLTFLoader(this.loadingManager),this.dracoLoader=new Ut.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 De.GLTFLoader(this.loadingManager),this.options.prefix&&this.gltfLoader.setPath(this.options.prefix)),this.gltfLoader;if(e==="lottie")return this.lottieLoader||(this.lottieLoader=new zt.LottieLoader(this.loadingManager),this.options.prefix&&this.lottieLoader.setPath(this.options.prefix)),this.lottieLoader;if(e==="gzipJson")return this.gzipJsonLoader||(this.gzipJsonLoader=new Es(this.loadingManager),this.options.prefix&&this.gzipJsonLoader.setPath(this.options.prefix)),this.gzipJsonLoader;if(e==="json")return this.jsonLoader||(this.jsonLoader=new T.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 Mt.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=I({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 T.Texture||t instanceof T.DataTexture||t instanceof T.VideoTexture)&&e.set(s,t)}),e}loadAll(){return ge(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 ge(this,null,function*(){var h,l;const s=(h=t==null?void 0:t.type)!=null?h:this.getAssetType(e);if(!s)return;const i=(t==null?void 0:t.cache)!==!1,r=Rt.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&&Le.colorCorrection({texture:d});const g=(l=t==null?void 0:t.anisotropy)!=null?l:this.options.anisotropy;d.anisotropy=g}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 g=this.getSrcByAsset(d,s);g&&t.add(g)}})})});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 xs={prefix:""};class ws{constructor(e){this.event=new j.EventEmitter,this.loaderArr=[],this.loaderActiveIndex=0,this.options=e}get loader(){return this.loaderArr[this.loaderActiveIndex]}addLoader(e){const{loaderParams:t}=this.options,s=new Ts(ae(I({},t),{scene:e}));return this.loaderArr.push(s),s}removeLoader(e){var t;e===this.loaderActiveIndex&&(this.loaderActiveIndex=0),(t=this.loaderArr[e])==null||t.dispose(),this.loaderArr.splice(e,1)}setLoaderActive(e){this.loaderActiveIndex=e,this.event.emit("loaderChange",this.loader)}dispose(){this.event.removeAllListeners(),this.loaderArr.forEach(e=>{e.dispose()})}}const ue=class ue{constructor(e){this.raycaster=new T.Raycaster,this.maxBackufferArea=5760*5760,this.installPlugins=new Map,this._cameraPositon=new T.Vector3,this._cameraTarget=new T.Vector3,this.event=new j.EventEmitter,this.timer=new gt.Timer,this.userData={},this.pageActiveIndex=-1,this.userSetDprCache=1,this.event.setMaxListeners(1/0),this.timer.connect(document),this.options=yt(ue.options,e,{isMergeableObject:Le.isPlainObject}),this.userSetDprCache=this.options.renderer.devicePixelRatio;const{container:t,stats:s,gui:i,transformControls:r}=this.options;if(this.init(),this.options.WebGPUTHREE||this.initComposer(),this.initCSSRenderer(),r&&this.initTransformControls(),s){const o=new Ct({horizontal:!1});o.dom.style.position="absolute",o.init(this.renderer),t.appendChild(o.dom),this.stats=o}if(i){const o=new Et;o.open(!1),this.gui=o}this.initResizeObserver()}getPlugin(e){return this.installPlugins.get(e)}get renderer(){return this.rendererController.renderer}get maxAnisotropy(){return this.options.WebGPUTHREE?0:this.renderer.capabilities.getMaxAnisotropy()}get controls(){return this.controlsController.cameraControls}get cameraPositon(){return this.controls.getPosition(this._cameraPositon,!1)}get cameraTarget(){return this.controls.getTarget(this._cameraTarget,!1)}get camera(){return this.cameraController.camera}get scene(){return this.sceneController.scene}get loader(){return this.loaderController.loader}use(e,...t){this.installPlugins.has(e.pluginName)?console.log("plugin already installed"):typeof e.install=="function"&&(e.install(this,...t),this.installPlugins.set(e.pluginName,e))}addPage({sceneOptions:e,cameraOptions:t}){const s=this.cameraController.addPerspectiveCamera(t),i=this.sceneController.addScene(e);return i.add(s),this.controlsController.addCameraControls(s),this.loaderController.addLoader(i),this.sceneController.sceneArr.length-1}removePage(e){e<=0||(this.cameraController.removeCamera(e),this.sceneController.removeScene(e),this.controlsController.removeCameraControls(e),this.loaderController.removeLoader(e),this.pageActiveIndex===e&&this.showPage(0))}showPage(e){if(e!==this.pageActiveIndex){if(e!==-1&&!this.sceneController.sceneArr[e]){console.warn("addPage before showPage");return}this.sceneController.setSceneActive(e),this.controls.enabled=!1,e!==-1&&(this.cameraController.setCameraActive(e),this.controlsController.setCameraControlsActive(e),this.loaderController.setLoaderActive(e),this.controls.enabled=!0),this.pageActiveIndex=e}}init(){var f;const{container:e,WebGPUTHREE:t,helper:s,viewHelper:i,renderer:r,controls:o,loader:h}=this.options,{width:l,height:d}=this.getSize(),g=t?new Gt({width:l,height:d,renderer:t.WebGPURenderer,rendererParams:Wt}):new qt({width:l,height:d,rendererParams:ae(I({},r),{antialias:!1})}),m=new Xt({width:l,height:d}),C=new Jt({}),v=new ts({controlsParams:{domElement:(f=o==null?void 0:o.domElement)!=null?f:g.renderer.domElement}}),_=new ws({loaderParams:I({anisotropy:g.renderer.capabilities.getMaxAnisotropy()},h)});this.sceneController=C,this.cameraController=m,this.controlsController=v,this.rendererController=g,this.loaderController=_;const p=this.addPage({sceneOptions:this.options.scene,cameraOptions:this.options.camera});if(this.pageActiveIndex=p,this.controls.setLookAt(0,0,400,0,0,0,!1),s){const n=new es({container:e,sceneController:C,cameraController:m});n.add(C.scene),this.helperController=n,i&&n.addViewHelper()}e.appendChild(g.renderer.domElement)}initComposer(){const{bloom:e,bloomParams:t,ssao:s,ssaoParams:i,composer:r}=this.options,o=new Cs({rendererController:this.rendererController,sceneController:this.sceneController,cameraController:this.cameraController,composerParams:r});this.composerController=o,e&&(o.addBloomPass(I({},t)),this.gui&&o.addBloomGui(this.gui)),s&&(o.addSSAOPass(I({},i)),this.gui&&o.addSSAOGui(this.gui)),o.addOutputPass()}initCSSRenderer(){const{container:e,css2DRenderer:t,css3DRenderer:s,css2DRendererParams:i,css3DRendererParams:r}=this.options;if(t||s){const o=new as(e);t&&o.addRenderer("css2d",i),s&&o.addRenderer("css3d",r),this.cssRendererController=o}}initTransformControls(){const e=new ss({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:h}=this,l=this.renderer.getSize(new T.Vector2);l.x===e&&l.y===t||(r==null||r.setSize(e,t),i==null||i.setSize(e,t),o==null||o.setSize(e,t),h==null||h.setSize(e,t),this.installPlugins.forEach(d=>{var g;(g=d.setSize)==null||g.call(d,e,t)}),this.render(),s&&this.event.emit("resize",{width:e,height:t}))}setDevicePixelRatio(e){var h;this.userSetDprCache=e;const t=this.renderer.getPixelRatio();if(e===t)return;const{width:s,height:i}=this.getSize();let r=Math.sqrt(this.maxBackufferArea/(s*i));r=(r*100|0)/100;const o=Math.min(e,r);o!==e&&console.warn("maxBackufferArea:",this.maxBackufferArea," the pixel ratio is set to",o),this.rendererController.setPixelRatio(o),(h=this.composerController)==null||h.setPixelRatio(o)}pick(e,t,s=!0){const{raycaster:i,options:r}=this,{container:o}=r,h=new T.Vector2,l=o.getBoundingClientRect();if(h.x=(e.clientX-l.left)/(l.right-l.left)*2-1,h.y=-((e.clientY-l.top)/(l.bottom-l.top))*2+1,this.camera&&this.scene){i.setFromCamera(h,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 o,h,l,d,g,m,C;const{scene:e,camera:t,timer:s}=this;s.update(),Re.update();const i=s.getDelta(),r=s.getElapsed();(o=this.controlsController)==null||o.update(i),this.installPlugins.forEach(v=>{var _;(_=v.update)==null||_.call(v,i,r)}),(h=this.helperController)==null||h.update(i,this.controlsController,this.cameraTarget),(l=this.composerController)!=null&&l.active?this.composerController.render():(d=this.rendererController)==null||d.render(this.scene,this.camera),(g=this.helperController)==null||g.renderViewHelper(this.renderer),(m=this.cssRendererController)==null||m.render(e,t),(C=this.stats)==null||C.update(),this.event.emit("render",{delta:i,elapsed:r})}start(){this.renderer.setAnimationLoop(this.render.bind(this)),this.event.emit("start")}stop(){this.renderer.setAnimationLoop(null),this.event.emit("stop")}autoRotate(e){this.controlsController.autoRotateSpeed=e}showPipViewport(e){this.composerController.pipViewportState=e;let t=this.controlsController.cameraControlsArr[1];if(e){const{width:s,height:i}=this.getSize(),r=new DOMRect(e.x/s,(i-e.y-e.height)/i,e.width/s,e.height/i);if(t)t.enabled=!0,this.cameraController.cameraArr[1].position.copy(this.cameraController.camera.position);else{const o=this.cameraController.cloneCamera();t=this.controlsController.addCameraControls(o,r)}t.interactiveArea=r}else if(t){this.cameraController.setCameraActive(0);const s=this.getSize();this.rendererController.setViewport({x:0,y:0,width:s.width,height:s.height,scissor:!0,scissorTest:!1});const i=s.width/s.height;this.cameraController.camera.aspect!==i&&(this.cameraController.camera.aspect=i,this.cameraController.camera.updateProjectionMatrix()),t.enabled=!1}}dispose(){var e,t,s,i,r,o,h,l,d,g,m,C,v;this.stop(),this.timer.dispose(),Re.removeAll(),this.event.removeAllListeners(),(e=this.resizeObserver)==null||e.unobserve(this.options.container),this.installPlugins.forEach(_=>{var p;(p=_.dispose)==null||p.call(_)}),(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(),(h=this.helperController)==null||h.dispose(),(l=this.composerController)==null||l.dispose(),(d=this.rendererController)==null||d.dispose(),(g=this.loaderController)==null||g.dispose(),this.cssRendererController=void 0,(m=this.gui)==null||m.destroy(),this.installPlugins.clear(),(C=this.stats)==null||C.dom.remove(),(v=this.renderer)==null||v.domElement.remove()}};ue.options={stats:re,gui:re,helper:re,viewHelper:re,controls:!0,transformControls:re,renderer:jt,composer:ys,scene:Qt,camera:Kt,bloom:!1,bloomParams:vs,ssao:!1,loader:xs,ssaoParams:gs,css2DRenderer:!1,css2DRendererParams:I({},Ke),css3DRenderer:!1,css3DRendererParams:I({},Ke)};let pe=ue;const Ls=$.ACTION;exports.BaseObject=Ft.BaseObject;exports.GUIObject=we;exports.Pencil=pe;exports.cameraControlsAction=Ls;exports.default=pe;
94
+ `,defines:{}}),"baseTexture");return e.needsSwap=!0,e},we=1,pe=!1,ds=new T.MeshBasicMaterial({color:"black"}),ps=new T.PointsMaterial({color:"black",sizeAttenuation:!1}),ms=new T.PointsMaterial({color:"black",sizeAttenuation:!0}),us=new T.SpriteMaterial({color:"black",sizeAttenuation:!0}),fs=new T.SpriteMaterial({color:"black",sizeAttenuation:!1}),_s=new _e.MeshLineMaterial({color:"black",sizeAttenuation:0,lineWidth:0}),gs={kernelRadius:8,minDistance:.005,maxDistance:.1},vs={threshold:0,strength:.4,radius:.1,bloomAlphaType:0},ys={multisampling:4,premultiplieAlpha:!1};class Cs{constructor(e){this.bloomComposerActive=!1,this.active=!0,this.bloomSelection=new Set,this.bloomLayer=new T.Layers,this.bloomMaterials={},this.bloomVisible={},this.pipViewportState=null,this.options=e;const{rendererController:t,sceneController:s,cameraController:i,composerParams:r}=e,{renderer:o}=t;this.renderer=o;const{multisampling:a}=r,{maxSamples:l}=o.capabilities,p=o.getDrawingBufferSize(new T.Vector2),g=new T.WebGLRenderTarget(p.width,p.height,{samples:Math.min(a,l),type:T.HalfFloatType}),u=new Me.EffectComposer(o,g),C=this.getSize();u.setSize(C.width,C.height);const v=new St.RenderPass(s.scene,i.camera);u.addPass(v),this.scene=s.scene,this.camera=i.camera,this.finalComposer=u,this.renderPass=v,i.event.on("cameraChange",_=>{this.changeCamera(_)}),s.event.on("sceneChange",_=>{this.changeScene(_)})}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 ls;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 T.Vector2),o=r.width,a=r.height,l=new Pt.SSAOPass(t,s,o,a);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,a=new Ut.UnrealBloomPass(new T.Vector2(window.innerWidth,window.innerHeight),i,r,s);this.bloomPass=a;const l=new Me.EffectComposer(t);l.renderToScreen=!1,l.addPass(this.renderPass),l.addPass(a),this.bloomComposer=l;const p=cs(l);p.uniforms.bloomAlphaType.value=o,this.bloomComposer=l,this.finalComposer.addPass(p),this.mixPass=p,this.bloomLayer.set(we)}toggleBloomSelection(e,t){if(!this.bloomComposer){console.warn("err:pencil.options.bloom");return}const{object3d:s}=e;if(!s)return;let i=t;t===void 0&&(i=!this.bloomSelection.has(s)),i?(this.bloomSelection.add(s),s.traverse(r=>{r.layers.enable(we)})):(this.bloomSelection.delete(s),s.traverse(r=>{r.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)}),e.forEach(s=>{this.bloomVisible[s.uuid]=s.visible,s.visible=!1}),t.forEach(s=>{s.traverse(i=>{const r=i,o=i,a=i;r.material&&this.bloomLayer.test(r.layers)===!1&&(this.bloomMaterials[r.uuid]=r.material,o.isSprite?o.material.sizeAttenuation?o.material=us:o.material=fs:r.material instanceof _e.MeshLineMaterial?r.material=_s:a.isPoints?a.material.sizeAttenuation?a.material=ms:a.material=ps:r.material=ds)})})}restoreNonBloomed(){this.scene.traverse(e=>{const t=e;this.bloomMaterials[t.uuid]?(t.material=this.bloomMaterials[t.uuid],delete this.bloomMaterials[t.uuid]):this.bloomVisible[t.uuid]!==void 0&&(t.visible=this.bloomVisible[t.uuid],delete this.bloomVisible[t.uuid])})}finalComposerRender(){this.bloomComposerActive&&this.bloomComposer?(this.mixPass.enabled=!0,this.darkenNonBloomed(),this.bloomComposer.render(),this.restoreNonBloomed()):this.mixPass&&(this.mixPass.enabled=!1),this.finalComposer.render()}getSize(){return this.renderer.getSize(new T.Vector2)}render(){if(!this.active)return;const{cameraController:e,rendererController:t}=this.options;if(this.pipViewportState){e.setCameraActive(0);const s=this.getSize();t.setViewport({x:0,y:0,width:s.width,height:s.height,scissor:!0,scissorTest:!1}),this.finalComposerRender(),e.setCameraActive(1),t.setViewport(W(z({},this.pipViewportState),{scissor:!0,scissorTest:!0})),this.finalComposerRender()}else this.finalComposerRender()}dispose(){var e;this.bloomMaterials={},this.bloomVisible={},this.bloomSelection.clear(),this.finalComposer.dispose(),(e=this.bloomComposer)==null||e.dispose()}}class Qe extends T.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 T.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 T.VideoTexture(o)):r=new T.Texture;const a=new T.FileLoader(this.manager);return a.setResponseType("blob"),a.setRequestHeader(this.requestHeader),a.setPath(this.path),a.setWithCredentials(this.withCredentials),a.load(e,l=>{let p=l;const g=e.split(".").pop(),u=this.options.type==="image"?`image/${g||"png"}`:`video/${g||"mp4"}`;p=p.slice(0,l.size,u);const C=()=>{o.removeEventListener("load",v,!1),o.removeEventListener("error",_,!1)},v=()=>{C(),r.needsUpdate=!0,t&&t(r)},_=c=>{C(),i&&i(c),this.manager.itemError(e),this.manager.itemEnd(e)};o.addEventListener("load",v,!1),o.addEventListener("error",_,!1);const d=window.URL.createObjectURL(p);o.src=d},s,i),r}}class Es extends T.Loader{constructor(e){super(e)}load(e,t,s,i){const r=new T.FileLoader(this.manager);r.setResponseType("blob"),r.setRequestHeader(this.requestHeader),r.setPath(this.path),r.setWithCredentials(this.withCredentials),r.load(e,o=>{const a=o,l=new DecompressionStream("gzip"),p=a.stream().pipeThrough(l);new Response(p).json().then(u=>{t==null||t(u)}).catch(u=>{i==null||i(u)})},s,i)}}const Os={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 Ts{constructor(e){this.loadObj=[],this.delLoadArr=[],this.assets=new Map,this.event=new B.EventEmitter,this.options=z({simpleTexture4deleted:!1,prefix:""},e),this.loadingManager=new T.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 T.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(Os))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 Re.GLTFLoader(this.loadingManager),this.dracoLoader=new zt.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 Re.GLTFLoader(this.loadingManager),this.options.prefix&&this.gltfLoader.setPath(this.options.prefix)),this.gltfLoader;if(e==="lottie")return this.lottieLoader||(this.lottieLoader=new It.LottieLoader(this.loadingManager),this.options.prefix&&this.lottieLoader.setPath(this.options.prefix)),this.lottieLoader;if(e==="gzipJson")return this.gzipJsonLoader||(this.gzipJsonLoader=new Es(this.loadingManager),this.options.prefix&&this.gzipJsonLoader.setPath(this.options.prefix)),this.gzipJsonLoader;if(e==="json")return this.jsonLoader||(this.jsonLoader=new T.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 Ft.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 T.Texture||t instanceof T.DataTexture||t instanceof T.VideoTexture)&&e.set(s,t)}),e}loadAll(){return Y(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 Y(this,null,function*(){var a,l;const s=(a=t==null?void 0:t.type)!=null?a:this.getAssetType(e);if(!s)return;const i=(t==null?void 0:t.cache)!==!1,r=be.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 p=yield o.loadAsync(e);if(this.assets.set(e,p),r.resolve(p),s==="images"||s==="media"||s==="exr"||s==="lottie"){(t==null?void 0:t.colorCorrection)!==!1&&Ae.colorCorrection({texture:p});const g=(l=t==null?void 0:t.anisotropy)!=null?l:this.options.anisotropy;p.anisotropy=g}return p}catch(p){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(p=>{if(p){const g=this.getSrcByAsset(p,s);g&&t.add(g)}})})});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 xs={prefix:""};class ws{constructor(e){this.event=new B.EventEmitter,this.loaderArr=[],this.loaderActiveIndex=0,this.options=e}get loader(){return this.loaderArr[this.loaderActiveIndex]}addLoader(e){const{loaderParams:t}=this.options,s=new Ts(W(z({},t),{scene:e}));return this.loaderArr.push(s),s}removeLoader(e){var t;e===this.loaderActiveIndex&&(this.loaderActiveIndex=0),(t=this.loaderArr[e])==null||t.dispose(),this.loaderArr.splice(e,1)}setLoaderActive(e){this.loaderActiveIndex=e,this.event.emit("loaderChange",this.loader)}dispose(){this.event.removeAllListeners(),this.loaderArr.forEach(e=>{e.dispose()})}}function Je(h){let e=!1;return function(...t){e||(e=!0,requestAnimationFrame(()=>{e=!1,h(...t)}))}}class bs{constructor(e,t){this.objMap=new Map,this.targetNullMap=new Map,this.objects=new Map,this.groupMap=new Map,this.prefabGroupMap=new Map,this.objectNamesToFactories=new Map,this.pickFunctionsMapIndex=-1,this.pickFunctionsMap={},this.pickListener={move:!1,down:!1},this.pickNodeFunctionsMapIndex=-1,this.pickNodeFunctionsMap={},this.pencil=e,this.init(t),this.objectNamesToFactories.set("@Group",class{create(){return new _e.Group}})}get group(){return this.groupMap.get(this.scene)}get prefabGroup(){return this.prefabGroupMap.get(this.scene)}get scene(){return this.pencil.scene}get objectsPromise(){const e=[];return this.objects.forEach(t=>{e.push(t.pm.promise)}),e}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,a)=>{(a.startsWith(s?i:`${i}#`)||a===i)&&r.push(o)}),r}instantiate(s){return Y(this,arguments,function*(e,{create:t}={}){const{objectType:i,objectOptions:r}=e,[,o]=i.split("#"),a=yield this.draw(o,W(z({},r||{}),{create:t,prefab:!1}));return a.isInstantiate=!0,a})}initGroup(){return Y(this,null,function*(){if(!this.group){const e=yield this.draw("@Group",{target:this.scene});this.groupMap.set(this.scene,e)}if(!this.prefabGroup){const e=yield this.draw("@Group",{key:"Prefab",target:this.scene});this.prefabGroupMap.set(this.scene,e)}})}draw(e,t,s){return Y(this,null,function*(){var r,o,a,l;const i=this.objectNamesToFactories.get(e);if(i){t||(t={}),t.target===void 0&&(t.target=s);const{key:p}=t;let g=`${e}${p?`#${p}`:""}`;this.objects.has(g)&&(g.includes("#")?g+=`-${be.generateUUID()}`:g+=`#${be.generateUUID()}`);const u=t.target,C=(r=t.onTop)!=null?r:0,v=(o=t.prefab)!=null?o:!1,_=(a=t.create)!=null?a:!0,d=new i().create(t);let c;return u===null?c=null:typeof u=="string"?c=this.objects.get(u):(l=u==null?void 0:u.objectType)!=null&&l.startsWith("BaseObject")||u?c=u:v&&this.prefabGroup?c=this.prefabGroup:!v&&this.group?c=this.group:c=this.scene,_===!1?d.create=()=>{}:_!==!0&&(d.create=()=>{_(d)}),d.pencil=this.pencil,d.drawController=this,d.key=g,d.prefab=v,d.objectType=`BaseObject#${e}`,d.objectOptions=t,this.objects.set(g,d),yield this.addBaseObject(d,c,C),d}throw new Error(`Unrecognized:${e}`)})}addBaseObject(e,t,s){return Y(this,null,function*(){yield e.create(),e.object3d&&(s&&e.setTop(s),t!==null?(t.add(e.object3d),this.objMap.set(e.object3d,e)):this.targetNullMap.set(e.object3d,e)),e.render(),e.pm.resolve()})}erase(...e){this.handleErase(!0,...e)}eraseWithoutMaterial(...e){this.handleErase(!1,...e)}handleErase(e,...t){[...t].forEach(s=>{const i=[];if(typeof s=="string"){const[r,o]=s.split("#");i.push(...this.getAllObject(r,{key:o}))}else i.push(s);i.forEach(r=>{const o=r.object3d&&this.targetNullMap.get(r.object3d);this.removeBaseObject(r,e),o&&this.removeBaseObject(o,e)})})}removeBaseObject(e,t=!0){e.object3d&&(e.object3d.removeFromParent(),e.object3d.traverse(s=>{const i=this.objMap.get(s);i?(i!==e&&i.objectType==="BaseObject#Node"&&i.object3d.removeFromParent(),t?i.dispose():i.disposeWithOutMaterial(),this.objects.delete(i.key),i.object3d&&(this.objMap.delete(i.object3d),this.targetNullMap.delete(i.object3d))):et.disposeMesh(s,t)}))}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))}addPickListener(e){var o;let t;const s=this.pencil.pageActiveIndex,i=a=>{if(s!==this.pencil.pageActiveIndex)return;a.preventDefault();const p=Object.values(this.pickFunctionsMap).map(d=>W(z({},d),{objArr:d.objArr instanceof Function?d.objArr():d.objArr})).filter(d=>{if(e==="move")return d.type==="move"||d.type==="enter"||d.type==="leave";if(e==="down")return d.type==="down"||d.type==="downOutside"||d.type==="click"}).reduce((d,c)=>d.concat(c.objArr.map(n=>({obj:n,type:c.type,cb:c.cb})).filter(({obj:n})=>n.object3d&&n.visibleWithAncestors)),[]).reduce((d,c)=>{const n=d.find(f=>f.obj===c.obj&&f.type===c.type);return n?n.cb.push(c.cb):d.push({obj:c.obj,type:c.type,cb:[c.cb]}),d},[]).sort((d,c)=>d.obj.object3d.getObjectById(c.obj.object3d.id)?1:c.obj.object3d.getObjectById(d.obj.object3d.id)?-1:0);if(p.length===0)return;const g=p.map(({obj:d})=>d.object3d);let u=this.pencil.pick(a,g,!1),C=u==null?void 0:u.object;const v=p.filter(d=>d.type==="leave"),_=p.filter(d=>d.type==="downOutside");if(!C){const d=p.filter(c=>{var n;return(n=c.obj.object3d)==null?void 0:n.isGroup});if(d.length&&(u=this.pencil.pick(a,d.map(({obj:c})=>c.object3d),!0),u!=null&&u.object)){const c=d.find(n=>n.obj.object3d.getObjectById(u.object.id));c&&(C=c.obj.object3d)}}if(C){const d=u.index;p.filter(({obj:c})=>c.object3d===C).forEach(c=>{if(e==="move")v.forEach(n=>{(c==null?void 0:c.obj)!==n.obj&&t===n.obj&&n.cb.forEach(f=>{f(n.obj,a)})}),(c==null?void 0:c.type)==="enter"?t!==c.obj&&c.cb.forEach(n=>{n(c.obj,a,d)}):(c==null?void 0:c.type)==="move"&&c.cb.forEach(n=>{n(c.obj,a,d)}),t=c==null?void 0:c.obj;else if(_.forEach(n=>{var f;if((c==null?void 0:c.obj)!==n.obj){if(((f=n.obj.object3d)==null?void 0:f.isGroup)&&n.obj.object3d.getObjectById(C.id))return;n.cb.forEach(y=>{y(n.obj,a)})}}),c)if(c.type==="click"){const n=f=>{f.preventDefault();const E=5;Math.abs(f.clientX-a.clientX)<=E&&Math.abs(f.clientY-a.clientY)<=E&&c.cb.forEach(y=>{y(c.obj,a,d)}),r.removeEventListener("pointerup",n,!1)};r.addEventListener("pointerup",n,!1)}else c.type!=="downOutside"&&c.cb.forEach(n=>{n(c.obj,a,d)})})}else e==="move"?(v.forEach(d=>{t===d.obj&&d.cb.forEach(c=>{c(d.obj,a)})}),t=void 0):_.forEach(d=>{d.cb.forEach(c=>{c(d.obj,a)})})},r=((o=this.pencil.options.controls)==null?void 0:o.domElement)||this.pencil.options.container;r.addEventListener(`pointer${e}`,Je(i),!1)}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[r]={objArr:e,type:i,cb:s},this.pickListener.move||Object.values(this.pickFunctionsMap).some(a=>a.type==="move"||a.type==="enter"||a.type==="leave")&&(this.pickListener.move=!0,this.addPickListener("move")),this.pickListener.down||Object.values(this.pickFunctionsMap).some(a=>a.type==="down"||a.type==="downOutside"||a.type==="click")&&(this.pickListener.down=!0,this.addPickListener("down")),r}removePick(e){delete this.pickFunctionsMap[e]}handlePickNode(e,t,s){if(t==="downOutside")return console.warn("handlePickNode:err:不支持 downOutside"),-1;this.pickNodeFunctionsMapIndex+=1;const i=this.pickNodeFunctionsMapIndex;return(e instanceof Function?e():e).forEach(o=>{const a=o;a.element.style.pointerEvents="auto";const l=p=>{p.preventDefault(),s(a,p)};a.element.addEventListener(`pointer${t}`,Je(l),!1),this.pickNodeFunctionsMap[i]||(this.pickNodeFunctionsMap[i]=[]),this.pickNodeFunctionsMap[i].push({arr:a,type:`pointer${t}`,listener:l})}),i}removePickNode(e){const t=this.pickNodeFunctionsMap[e];t&&(t.forEach(s=>{s.arr.element.style.pointerEvents="none",s.arr.element.removeEventListener(s.type,s.listener,!1)}),delete this.pickNodeFunctionsMap[e])}dispose(){this.objects.forEach((e,t)=>{e.erase(),e.pm.reject(`stop draw:${t}`)}),this.objects.clear(),this.objMap.clear(),this.targetNullMap.clear(),this.objectNamesToFactories.clear(),this.pickFunctionsMap={},this.pickNodeFunctionsMap={},this.groupMap.clear(),this.prefabGroupMap.clear()}}class As{constructor(e){this.event=new B.EventEmitter,this.leadArr=[],this.leadActiveIndex=0,this.options=e}get lead(){return this.leadArr[this.leadActiveIndex]}addLead(){const{leadParams:e,pencil:t}=this.options,s=new bs(t,{});return this.leadArr.push(s),s}removeLoader(e){var t;e===this.leadActiveIndex&&(this.leadActiveIndex=0),(t=this.leadArr[e])==null||t.dispose(),this.leadArr.splice(e,1)}setLeadActive(e){this.leadActiveIndex=e,this.event.emit("leadChange",this.lead)}dispose(){this.event.removeAllListeners(),this.leadArr.forEach(e=>{e.dispose()})}}const fe=class fe{constructor(e){this.raycaster=new T.Raycaster,this.maxBackufferArea=5760*5760,this.installPlugins=new Map,this._cameraPositon=new T.Vector3,this._cameraTarget=new T.Vector3,this.event=new B.EventEmitter,this.timer=new Et.Timer,this.userData={},this.pageActiveIndex=-1,this.userSetDprCache=1,this.event.setMaxListeners(1/0),this.timer.connect(document),this.options=Tt(fe.options,e,{isMergeableObject:Ae.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 r=new xt({horizontal:!1});r.dom.style.position="absolute",r.init(this.renderer),t.appendChild(r.dom),this.stats=r}this.initResizeObserver()}getPlugin(e){return this.installPlugins.get(e)}get renderer(){return this.rendererController.renderer}get maxAnisotropy(){return this.options.WebGPUTHREE?0:this.renderer.capabilities.getMaxAnisotropy()}get controls(){return this.controlsController.cameraControls}get cameraPositon(){return this.controls.getPosition(this._cameraPositon,!1)}get cameraTarget(){return this.controls.getTarget(this._cameraTarget,!1)}get camera(){return this.cameraController.camera}get scene(){return this.sceneController.scene}get loader(){return this.loaderController.loader}get lead(){return this.leadController.lead}use(e,...t){this.installPlugins.has(e.pluginName)?console.log("plugin already installed"):typeof e.install=="function"&&(e.install(this,...t),this.installPlugins.set(e.pluginName,e))}addPage({sceneOptions:e,cameraOptions:t}={}){const s=this.cameraController.addPerspectiveCamera(t),i=this.sceneController.addScene(e);return i.add(s),this.controlsController.addCameraControls(s),this.loaderController.addLoader(i),this.leadController.addLead(),this.sceneController.sceneArr.length-1}removePage(e){e<=0||(this.cameraController.removeCamera(e),this.sceneController.removeScene(e),this.controlsController.removeCameraControls(e),this.loaderController.removeLoader(e),this.leadController.removeLoader(e),this.pageActiveIndex===e&&this.showPage(0))}showPage(e){if(e!==this.pageActiveIndex){if(e!==-1&&!this.sceneController.sceneArr[e]){console.warn("addPage before showPage");return}this.sceneController.setSceneActive(e),this.controls.enabled=!1,e!==-1&&(this.cameraController.setCameraActive(e),this.controlsController.setCameraControlsActive(e),this.loaderController.setLoaderActive(e),this.leadController.setLeadActive(e),this.controls.enabled=!0),this.pageActiveIndex=e}}init(){var n;const{container:e,WebGPUTHREE:t,helper:s,viewHelper:i,renderer:r,controls:o,loader:a}=this.options,{width:l,height:p}=this.getSize(),g=t?new Kt({width:l,height:p,renderer:t.WebGPURenderer,rendererParams:Gt}):new Wt({width:l,height:p,rendererParams:W(z({},r),{antialias:!1})}),u=new Xt({width:l,height:p}),C=new Jt({}),v=new ts({controlsParams:{domElement:(n=o==null?void 0:o.domElement)!=null?n:g.renderer.domElement}}),_=new ws({loaderParams:z({anisotropy:g.renderer.capabilities.getMaxAnisotropy()},a)}),d=new As({pencil:this});this.sceneController=C,this.cameraController=u,this.controlsController=v,this.rendererController=g,this.loaderController=_,this.leadController=d;const c=this.addPage({sceneOptions:this.options.scene,cameraOptions:this.options.camera});if(this.pageActiveIndex=c,s){const f=new es({container:e,sceneController:C,cameraController:u});f.add(C.scene),this.helperController=f,i&&f.addViewHelper()}e.appendChild(g.renderer.domElement)}initComposer(){const{bloom:e,bloomParams:t,ssao:s,ssaoParams:i,composer:r}=this.options,o=new Cs({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 as(e);t&&o.addRenderer("css2d",i),s&&o.addRenderer("css3d",r),this.cssRendererController=o}}initTransformControls(){const e=new ss({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:a}=this,l=this.renderer.getSize(new T.Vector2);l.x===e&&l.y===t||(r==null||r.setSize(e,t),i==null||i.setSize(e,t),o==null||o.setSize(e,t),a==null||a.setSize(e,t),this.installPlugins.forEach(p=>{var g;(g=p.setSize)==null||g.call(p,e,t)}),this.render(),s&&this.event.emit("resize",{width:e,height:t}))}setDevicePixelRatio(e){var a;this.userSetDprCache=e;const t=this.renderer.getPixelRatio();if(e===t)return;const{width:s,height:i}=this.getSize();let r=Math.sqrt(this.maxBackufferArea/(s*i));r=(r*100|0)/100;const o=Math.min(e,r);o!==e&&console.warn("maxBackufferArea:",this.maxBackufferArea," the pixel ratio is set to",o),this.rendererController.setPixelRatio(o),(a=this.composerController)==null||a.setPixelRatio(o)}pick(e,t,s=!0){const{raycaster:i,options:r}=this,{container:o}=r,a=new T.Vector2,l=o.getBoundingClientRect();if(a.x=(e.clientX-l.left)/(l.right-l.left)*2-1,a.y=-((e.clientY-l.top)/(l.bottom-l.top))*2+1,this.camera&&this.scene){i.setFromCamera(a,this.camera);const p=i.intersectObjects(t||this.scene.children,s);if(p.length)return{object:p[0].object,index:p[0].index,intersects:p}}}render(){var o,a,l,p,g,u,C;const{scene:e,camera:t,timer:s}=this;s.update(),Ue.update();const i=s.getDelta(),r=s.getElapsed();(o=this.controlsController)==null||o.update(i),this.installPlugins.forEach(v=>{var _;(_=v.update)==null||_.call(v,i,r)}),(a=this.helperController)==null||a.update(i,this.controlsController,this.cameraTarget),(l=this.composerController)!=null&&l.active?this.composerController.render():(p=this.rendererController)==null||p.render(this.scene,this.camera),(g=this.helperController)==null||g.renderViewHelper(this.renderer),(u=this.cssRendererController)==null||u.render(e,t),(C=this.stats)==null||C.update(),this.event.emit("render",{delta:i,elapsed:r})}start(){this.renderer.setAnimationLoop(this.render.bind(this)),this.event.emit("start")}stop(){this.renderer.setAnimationLoop(null),this.event.emit("stop")}autoRotate(e){this.controlsController.autoRotateSpeed=e}showPipViewport(e){this.composerController.pipViewportState=e;let t=this.controlsController.cameraControlsArr[1];if(e){const{width:s,height:i}=this.getSize(),r=new DOMRect(e.x/s,(i-e.y-e.height)/i,e.width/s,e.height/i);if(t)t.enabled=!0,this.cameraController.cameraArr[1].position.copy(this.cameraController.camera.position);else{const o=this.cameraController.cloneCamera();t=this.controlsController.addCameraControls(o,r)}t.interactiveArea=r}else if(t){this.cameraController.setCameraActive(0);const s=this.getSize();this.rendererController.setViewport({x:0,y:0,width:s.width,height:s.height,scissor:!0,scissorTest:!1});const i=s.width/s.height;this.cameraController.camera.aspect!==i&&(this.cameraController.camera.aspect=i,this.cameraController.camera.updateProjectionMatrix()),t.enabled=!1}}dispose(){var e,t,s,i,r,o,a,l,p,g,u,C,v;this.stop(),this.timer.dispose(),Ue.removeAll(),this.event.removeAllListeners(),(e=this.resizeObserver)==null||e.unobserve(this.options.container),this.installPlugins.forEach(_=>{var d;(d=_.dispose)==null||d.call(_)}),(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(),(a=this.helperController)==null||a.dispose(),(l=this.composerController)==null||l.dispose(),(p=this.rendererController)==null||p.dispose(),(g=this.loaderController)==null||g.dispose(),(u=this.leadController)==null||u.dispose(),this.cssRendererController=void 0,this.installPlugins.clear(),(C=this.stats)==null||C.dom.remove(),(v=this.renderer)==null||v.domElement.remove()}};fe.options={stats:pe,helper:pe,viewHelper:pe,controls:!0,transformControls:pe,renderer:qt,composer:ys,scene:$t,camera:dt,bloom:!1,bloomParams:vs,ssao:!1,loader:xs,ssaoParams:gs,css2DRenderer:!1,css2DRendererParams:z({},$e),css3DRenderer:!1,css3DRendererParams:z({},$e)};let ue=fe;const Ls=ee.ACTION;exports.BaseObject=_e.BaseObject;exports.Pencil=ue;exports.cameraControlsAction=Ls;exports.default=ue;