three-stdlib 2.6.2 → 2.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/{Nodes-244507d0.js → Nodes-894ac9dc.js} +0 -0
  2. package/{Nodes-acab3ca5.js → Nodes-af575af7.js} +0 -0
  3. package/controls/ArcballControls.cjs.js +1 -1
  4. package/controls/ArcballControls.d.ts +162 -0
  5. package/controls/ArcballControls.js +556 -273
  6. package/controls/OrbitControls.cjs.js +1 -1
  7. package/controls/OrbitControls.d.ts +1 -0
  8. package/controls/OrbitControls.js +13 -2
  9. package/controls/TransformControls.cjs.js +1 -1
  10. package/controls/TransformControls.d.ts +2 -1
  11. package/controls/TransformControls.js +25 -26
  12. package/geometries/TeapotGeometry.js +2 -2
  13. package/geometries/TextGeometry.cjs.js +1 -0
  14. package/geometries/TextGeometry.d.ts +16 -0
  15. package/geometries/TextGeometry.js +26 -0
  16. package/index.cjs.js +1 -1
  17. package/index.d.ts +2 -0
  18. package/index.js +2 -0
  19. package/loaders/AMFLoader.js +1 -3
  20. package/loaders/ColladaLoader.cjs.js +1 -1
  21. package/loaders/ColladaLoader.js +58 -35
  22. package/loaders/EXRLoader.cjs.js +1 -1
  23. package/loaders/EXRLoader.js +197 -262
  24. package/loaders/FBXLoader.cjs.js +1 -1
  25. package/loaders/FBXLoader.js +41 -90
  26. package/loaders/FontLoader.cjs.js +1 -0
  27. package/loaders/FontLoader.d.ts +32 -0
  28. package/loaders/FontLoader.js +139 -0
  29. package/loaders/GLTFLoader.cjs.js +1 -1
  30. package/loaders/GLTFLoader.js +161 -75
  31. package/loaders/HDRCubeTextureLoader.cjs.js +1 -1
  32. package/loaders/HDRCubeTextureLoader.js +2 -10
  33. package/loaders/NodeMaterialLoader.cjs.js +1 -1
  34. package/loaders/RGBELoader.cjs.js +1 -1
  35. package/loaders/RGBELoader.js +11 -25
  36. package/loaders/RGBMLoader.cjs.js +1 -1
  37. package/loaders/RGBMLoader.js +225 -263
  38. package/loaders/STLLoader.js +7 -7
  39. package/loaders/SVGLoader.cjs.js +1 -1
  40. package/loaders/SVGLoader.js +46 -30
  41. package/loaders/VRMLLoader.cjs.js +1 -1
  42. package/loaders/VRMLLoader.js +2 -1
  43. package/nodes/accessors/CameraNode.js +12 -12
  44. package/nodes/accessors/PositionNode.js +3 -3
  45. package/nodes/accessors/ReflectNode.js +3 -3
  46. package/nodes/core/FunctionNode.js +3 -3
  47. package/nodes/core/InputNode.js +3 -3
  48. package/nodes/core/Node.js +6 -6
  49. package/nodes/core/NodeBuilder.cjs.js +1 -1
  50. package/nodes/core/NodeBuilder.js +2 -2
  51. package/nodes/core/TempNode.js +6 -6
  52. package/nodes/effects/BlurNode.js +3 -3
  53. package/nodes/inputs/CubeTextureNode.cjs.js +1 -1
  54. package/nodes/inputs/RTTNode.cjs.js +1 -1
  55. package/nodes/inputs/ReflectorNode.cjs.js +1 -1
  56. package/nodes/inputs/ScreenNode.cjs.js +1 -1
  57. package/nodes/inputs/TextureNode.cjs.js +1 -1
  58. package/nodes/materials/BasicNodeMaterial.cjs.js +1 -1
  59. package/nodes/materials/NodeMaterial.cjs.js +1 -1
  60. package/nodes/materials/SpriteNodeMaterial.cjs.js +1 -1
  61. package/nodes/math/MathNode.js +3 -3
  62. package/nodes/postprocessing/NodePass.cjs.js +1 -1
  63. package/nodes/postprocessing/NodePostProcessing.cjs.js +1 -1
  64. package/nodes/utils/ColorSpaceNode.cjs.js +1 -1
  65. package/nodes/utils/ColorSpaceNode.js +2 -45
  66. package/nodes/utils/VelocityNode.js +6 -6
  67. package/package.json +2 -2
  68. package/renderers/nodes/accessors/UVNode.js +1 -3
  69. package/renderers/nodes/core/AttributeNode.js +1 -3
  70. package/renderers/nodes/core/Node.js +4 -12
  71. package/renderers/nodes/core/NodeBuilder.js +6 -18
  72. package/shaders/GammaCorrectionShader.js +1 -2
  73. package/webxr/ARButton.js +6 -6
  74. package/webxr/VRButton.js +6 -6
@@ -1,6 +1,7 @@
1
1
  import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
2
2
  import { Matrix4, EventDispatcher, EllipseCurve, BufferGeometry, MathUtils, Vector3, GridHelper, LineBasicMaterial, Line, Raycaster, Vector2, Quaternion, Group, Box3, Sphere } from 'three';
3
3
 
4
+ //trackball state
4
5
  const STATE = {
5
6
  IDLE: Symbol(),
6
7
  ROTATE: Symbol(),
@@ -43,25 +44,211 @@ const _endEvent = {
43
44
  };
44
45
  /**
45
46
  *
46
- * @param {Camera} camera Virtual camera used in the scene
47
- * @param {HTMLElement} domElement Renderer's dom element
48
- * @param {Scene} scene The scene to be rendered
47
+ * @param {CamOrthographicCamera | PerspectiveCameraera} camera Virtual camera used in the scene
48
+ * @param {HTMLElement=null} domElement Renderer's dom element
49
+ * @param {Scene=null} scene The scene to be rendered
49
50
  */
50
51
 
51
52
  class ArcballControls extends EventDispatcher {
52
- constructor(_camera, _domElement, scene = null) {
53
+ constructor(_camera, _domElement = null, scene = null) {
53
54
  super();
54
55
 
56
+ _defineProperty(this, "camera", void 0);
57
+
58
+ _defineProperty(this, "domElement", void 0);
59
+
60
+ _defineProperty(this, "scene", void 0);
61
+
62
+ _defineProperty(this, "mouseActions", void 0);
63
+
64
+ _defineProperty(this, "_mouseOp", void 0);
65
+
66
+ _defineProperty(this, "_v2_1", void 0);
67
+
68
+ _defineProperty(this, "_v3_1", void 0);
69
+
70
+ _defineProperty(this, "_v3_2", void 0);
71
+
72
+ _defineProperty(this, "_m4_1", void 0);
73
+
74
+ _defineProperty(this, "_m4_2", void 0);
75
+
76
+ _defineProperty(this, "_quat", void 0);
77
+
78
+ _defineProperty(this, "_translationMatrix", void 0);
79
+
80
+ _defineProperty(this, "_rotationMatrix", void 0);
81
+
82
+ _defineProperty(this, "_scaleMatrix", void 0);
83
+
84
+ _defineProperty(this, "_rotationAxis", void 0);
85
+
86
+ _defineProperty(this, "_cameraMatrixState", void 0);
87
+
88
+ _defineProperty(this, "_cameraProjectionState", void 0);
89
+
90
+ _defineProperty(this, "_fovState", void 0);
91
+
92
+ _defineProperty(this, "_upState", void 0);
93
+
94
+ _defineProperty(this, "_zoomState", void 0);
95
+
96
+ _defineProperty(this, "_nearPos", void 0);
97
+
98
+ _defineProperty(this, "_farPos", void 0);
99
+
100
+ _defineProperty(this, "_gizmoMatrixState", void 0);
101
+
102
+ _defineProperty(this, "_up0", void 0);
103
+
104
+ _defineProperty(this, "_zoom0", void 0);
105
+
106
+ _defineProperty(this, "_fov0", void 0);
107
+
108
+ _defineProperty(this, "_initialNear", void 0);
109
+
110
+ _defineProperty(this, "_nearPos0", void 0);
111
+
112
+ _defineProperty(this, "_initialFar", void 0);
113
+
114
+ _defineProperty(this, "_farPos0", void 0);
115
+
116
+ _defineProperty(this, "_cameraMatrixState0", void 0);
117
+
118
+ _defineProperty(this, "_gizmoMatrixState0", void 0);
119
+
120
+ _defineProperty(this, "_button", void 0);
121
+
122
+ _defineProperty(this, "_touchStart", void 0);
123
+
124
+ _defineProperty(this, "_touchCurrent", void 0);
125
+
126
+ _defineProperty(this, "_input", void 0);
127
+
128
+ _defineProperty(this, "_switchSensibility", void 0);
129
+
130
+ _defineProperty(this, "_startFingerDistance", void 0);
131
+
132
+ _defineProperty(this, "_currentFingerDistance", void 0);
133
+
134
+ _defineProperty(this, "_startFingerRotation", void 0);
135
+
136
+ _defineProperty(this, "_currentFingerRotation", void 0);
137
+
138
+ _defineProperty(this, "_devPxRatio", void 0);
139
+
140
+ _defineProperty(this, "_downValid", void 0);
141
+
142
+ _defineProperty(this, "_nclicks", void 0);
143
+
144
+ _defineProperty(this, "_downEvents", void 0);
145
+
146
+ _defineProperty(this, "_clickStart", void 0);
147
+
148
+ _defineProperty(this, "_maxDownTime", void 0);
149
+
150
+ _defineProperty(this, "_maxInterval", void 0);
151
+
152
+ _defineProperty(this, "_posThreshold", void 0);
153
+
154
+ _defineProperty(this, "_movementThreshold", void 0);
155
+
156
+ _defineProperty(this, "_currentCursorPosition", void 0);
157
+
158
+ _defineProperty(this, "_startCursorPosition", void 0);
159
+
160
+ _defineProperty(this, "_grid", void 0);
161
+
162
+ _defineProperty(this, "_gridPosition", void 0);
163
+
164
+ _defineProperty(this, "_gizmos", void 0);
165
+
166
+ _defineProperty(this, "_curvePts", void 0);
167
+
168
+ _defineProperty(this, "_timeStart", void 0);
169
+
170
+ _defineProperty(this, "_animationId", void 0);
171
+
172
+ _defineProperty(this, "focusAnimationTime", void 0);
173
+
174
+ _defineProperty(this, "_timePrev", void 0);
175
+
176
+ _defineProperty(this, "_timeCurrent", void 0);
177
+
178
+ _defineProperty(this, "_anglePrev", void 0);
179
+
180
+ _defineProperty(this, "_angleCurrent", void 0);
181
+
182
+ _defineProperty(this, "_cursorPosPrev", void 0);
183
+
184
+ _defineProperty(this, "_cursorPosCurr", void 0);
185
+
186
+ _defineProperty(this, "_wPrev", void 0);
187
+
188
+ _defineProperty(this, "_wCurr", void 0);
189
+
190
+ _defineProperty(this, "adjustNearFar", void 0);
191
+
192
+ _defineProperty(this, "scaleFactor", void 0);
193
+
194
+ _defineProperty(this, "dampingFactor", void 0);
195
+
196
+ _defineProperty(this, "wMax", void 0);
197
+
198
+ _defineProperty(this, "enableAnimations", void 0);
199
+
200
+ _defineProperty(this, "enableGrid", void 0);
201
+
202
+ _defineProperty(this, "cursorZoom", void 0);
203
+
204
+ _defineProperty(this, "minFov", void 0);
205
+
206
+ _defineProperty(this, "maxFov", void 0);
207
+
208
+ _defineProperty(this, "enabled", void 0);
209
+
210
+ _defineProperty(this, "enablePan", void 0);
211
+
212
+ _defineProperty(this, "enableRotate", void 0);
213
+
214
+ _defineProperty(this, "enableZoom", void 0);
215
+
216
+ _defineProperty(this, "minDistance", void 0);
217
+
218
+ _defineProperty(this, "maxDistance", void 0);
219
+
220
+ _defineProperty(this, "minZoom", void 0);
221
+
222
+ _defineProperty(this, "maxZoom", void 0);
223
+
224
+ _defineProperty(this, "target", void 0);
225
+
226
+ _defineProperty(this, "_currentTarget", void 0);
227
+
228
+ _defineProperty(this, "_tbRadius", void 0);
229
+
230
+ _defineProperty(this, "_state", void 0);
231
+
55
232
  _defineProperty(this, "onWindowResize", () => {
56
233
  const scale = (this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z) / 3;
57
- this._tbRadius = this.calculateTbRadius(this.camera);
58
- const newRadius = this._tbRadius / scale;
234
+
235
+ if (this.camera) {
236
+ const tbRadius = this.calculateTbRadius(this.camera);
237
+
238
+ if (tbRadius !== undefined) {
239
+ this._tbRadius = tbRadius;
240
+ }
241
+ }
242
+
243
+ const newRadius = this._tbRadius / scale; // @ts-expect-error
244
+
59
245
  const curve = new EllipseCurve(0, 0, newRadius, newRadius);
60
246
  const points = curve.getPoints(this._curvePts);
61
247
  const curveGeometry = new BufferGeometry().setFromPoints(points);
62
248
 
63
249
  for (const gizmo in this._gizmos.children) {
64
- this._gizmos.children[gizmo].geometry = curveGeometry;
250
+ const child = this._gizmos.children[gizmo];
251
+ child.geometry = curveGeometry;
65
252
  }
66
253
 
67
254
  this.dispatchEvent(_changeEvent);
@@ -94,8 +281,6 @@ class ArcballControls extends EventDispatcher {
94
281
  this._downValid = true;
95
282
 
96
283
  this._downEvents.push(event);
97
-
98
- this._downStart = performance.now();
99
284
  } else {
100
285
  this._downValid = false;
101
286
  }
@@ -126,7 +311,7 @@ class ArcballControls extends EventDispatcher {
126
311
  case INPUT.TWO_FINGER:
127
312
  //multipleStart
128
313
  this._input = INPUT.MULT_FINGER;
129
- this.onTriplePanStart(event);
314
+ this.onTriplePanStart();
130
315
  break;
131
316
  }
132
317
  } else if (event.pointerType != 'touch' && this._input == INPUT.NONE) {
@@ -140,7 +325,7 @@ class ArcballControls extends EventDispatcher {
140
325
 
141
326
  this._mouseOp = this.getOpFromAction(event.button, modifier);
142
327
 
143
- if (this._mouseOp != null) {
328
+ if (this._mouseOp) {
144
329
  window.addEventListener('pointermove', this.onPointerMove);
145
330
  window.addEventListener('pointerup', this.onPointerUp); //singleStart
146
331
 
@@ -184,7 +369,7 @@ class ArcballControls extends EventDispatcher {
184
369
  case INPUT.MULT_FINGER:
185
370
  //multMove
186
371
  this.updateTouchEvent(event);
187
- this.onTriplePanMove(event);
372
+ this.onTriplePanMove();
188
373
  break;
189
374
  }
190
375
  } else if (event.pointerType != 'touch' && this._input == INPUT.CURSOR) {
@@ -198,7 +383,7 @@ class ArcballControls extends EventDispatcher {
198
383
 
199
384
  const mouseOpState = this.getOpStateFromAction(this._button, modifier);
200
385
 
201
- if (mouseOpState != null) {
386
+ if (mouseOpState) {
202
387
  this.onSinglePanMove(event, mouseOpState);
203
388
  }
204
389
  } //checkDistance
@@ -239,9 +424,9 @@ class ArcballControls extends EventDispatcher {
239
424
 
240
425
  case INPUT.TWO_FINGER:
241
426
  //doubleEnd
242
- this.onDoublePanEnd(event);
243
- this.onPinchEnd(event);
244
- this.onRotateEnd(event); //switching to singleStart
427
+ this.onDoublePanEnd();
428
+ this.onPinchEnd();
429
+ this.onRotateEnd(); //switching to singleStart
245
430
 
246
431
  this._input = INPUT.ONE_FINGER_SWITCHED;
247
432
  break;
@@ -311,7 +496,9 @@ class ArcballControls extends EventDispatcher {
311
496
  });
312
497
 
313
498
  _defineProperty(this, "onWheel", event => {
314
- if (this.enabled && this.enableZoom) {
499
+ var _this$camera3;
500
+
501
+ if (this.enabled && this.enableZoom && this.domElement) {
315
502
  let modifier = null;
316
503
 
317
504
  if (event.ctrlKey || event.metaKey) {
@@ -322,7 +509,7 @@ class ArcballControls extends EventDispatcher {
322
509
 
323
510
  const mouseOp = this.getOpFromAction('WHEEL', modifier);
324
511
 
325
- if (mouseOp != null) {
512
+ if (mouseOp) {
326
513
  event.preventDefault();
327
514
  this.dispatchEvent(_startEvent);
328
515
  const notchDeltaY = 125; //distance of one notch of mouse wheel
@@ -347,20 +534,28 @@ class ArcballControls extends EventDispatcher {
347
534
  }
348
535
 
349
536
  if (this.cursorZoom && this.enablePan) {
537
+ var _this$camera, _this$camera2;
538
+
350
539
  let scalePoint;
351
540
 
352
- if (this.camera.isOrthographicCamera) {
353
- scalePoint = this.unprojectOnTbPlane(this.camera, event.clientX, event.clientY, this.domElement).applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._gizmos.position);
354
- } else if (this.camera.isPerspectiveCamera) {
355
- scalePoint = this.unprojectOnTbPlane(this.camera, event.clientX, event.clientY, this.domElement).applyQuaternion(this.camera.quaternion).add(this._gizmos.position);
541
+ if (((_this$camera = this.camera) === null || _this$camera === void 0 ? void 0 : _this$camera.type) === 'OrthographicCamera') {
542
+ var _this$unprojectOnTbPl;
543
+
544
+ scalePoint = (_this$unprojectOnTbPl = this.unprojectOnTbPlane(this.camera, event.clientX, event.clientY, this.domElement)) === null || _this$unprojectOnTbPl === void 0 ? void 0 : _this$unprojectOnTbPl.applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._gizmos.position);
545
+ }
546
+
547
+ if (((_this$camera2 = this.camera) === null || _this$camera2 === void 0 ? void 0 : _this$camera2.type) === 'PerspectiveCamera') {
548
+ var _this$unprojectOnTbPl2;
549
+
550
+ scalePoint = (_this$unprojectOnTbPl2 = this.unprojectOnTbPlane(this.camera, event.clientX, event.clientY, this.domElement)) === null || _this$unprojectOnTbPl2 === void 0 ? void 0 : _this$unprojectOnTbPl2.applyQuaternion(this.camera.quaternion).add(this._gizmos.position);
356
551
  }
357
552
 
358
- this.applyTransformMatrix(this.applyScale(size, scalePoint));
553
+ if (scalePoint !== undefined) this.applyTransformMatrix(this.applyScale(size, scalePoint));
359
554
  } else {
360
555
  this.applyTransformMatrix(this.applyScale(size, this._gizmos.position));
361
556
  }
362
557
 
363
- if (this._grid != null) {
558
+ if (this._grid) {
364
559
  this.disposeGrid();
365
560
  this.drawGrid();
366
561
  }
@@ -371,7 +566,7 @@ class ArcballControls extends EventDispatcher {
371
566
  break;
372
567
 
373
568
  case 'FOV':
374
- if (this.camera.isPerspectiveCamera) {
569
+ if (((_this$camera3 = this.camera) === null || _this$camera3 === void 0 ? void 0 : _this$camera3.type) === 'PerspectiveCamera') {
375
570
  this.updateTbState(STATE.FOV, true); //Vertigo effect
376
571
  // fov / 2
377
572
  // |\
@@ -419,7 +614,7 @@ class ArcballControls extends EventDispatcher {
419
614
  this.applyTransformMatrix(this.applyScale(size, this._gizmos.position, false));
420
615
  }
421
616
 
422
- if (this._grid != null) {
617
+ if (this._grid) {
423
618
  this.disposeGrid();
424
619
  this.drawGrid();
425
620
  }
@@ -446,15 +641,15 @@ class ArcballControls extends EventDispatcher {
446
641
  });
447
642
 
448
643
  _defineProperty(this, "onSinglePanStart", (event, operation) => {
449
- if (this.enabled) {
644
+ var _this$camera4;
645
+
646
+ if (this.enabled && this.domElement) {
450
647
  this.dispatchEvent(_startEvent);
451
648
  this.setCenter(event.clientX, event.clientY);
452
649
 
453
650
  switch (operation) {
454
651
  case 'PAN':
455
- if (!this.enablePan) {
456
- return;
457
- }
652
+ if (!this.enablePan) return;
458
653
 
459
654
  if (this._animationId != -1) {
460
655
  cancelAnimationFrame(this._animationId);
@@ -464,21 +659,24 @@ class ArcballControls extends EventDispatcher {
464
659
  this.dispatchEvent(_changeEvent);
465
660
  }
466
661
 
467
- this.updateTbState(STATE.PAN, true);
662
+ if (this.camera) {
663
+ this.updateTbState(STATE.PAN, true);
664
+ const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement);
468
665
 
469
- this._startCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement));
666
+ if (rayDir !== undefined) {
667
+ this._startCursorPosition.copy(rayDir);
668
+ }
470
669
 
471
- if (this.enableGrid) {
472
- this.drawGrid();
473
- this.dispatchEvent(_changeEvent);
670
+ if (this.enableGrid) {
671
+ this.drawGrid();
672
+ this.dispatchEvent(_changeEvent);
673
+ }
474
674
  }
475
675
 
476
676
  break;
477
677
 
478
678
  case 'ROTATE':
479
- if (!this.enableRotate) {
480
- return;
481
- }
679
+ if (!this.enableRotate) return;
482
680
 
483
681
  if (this._animationId != -1) {
484
682
  cancelAnimationFrame(this._animationId);
@@ -486,52 +684,55 @@ class ArcballControls extends EventDispatcher {
486
684
  this._timeStart = -1;
487
685
  }
488
686
 
489
- this.updateTbState(STATE.ROTATE, true);
687
+ if (this.camera) {
688
+ this.updateTbState(STATE.ROTATE, true);
689
+ const rayDir = this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius);
490
690
 
491
- this._startCursorPosition.copy(this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius));
691
+ if (rayDir !== undefined) {
692
+ this._startCursorPosition.copy(rayDir);
693
+ }
492
694
 
493
- this.activateGizmos(true);
695
+ this.activateGizmos(true);
494
696
 
495
- if (this.enableAnimations) {
496
- this._timePrev = this._timeCurrent = performance.now();
497
- this._angleCurrent = this._anglePrev = 0;
697
+ if (this.enableAnimations) {
698
+ this._timePrev = this._timeCurrent = performance.now();
699
+ this._angleCurrent = this._anglePrev = 0;
498
700
 
499
- this._cursorPosPrev.copy(this._startCursorPosition);
701
+ this._cursorPosPrev.copy(this._startCursorPosition);
500
702
 
501
- this._cursorPosCurr.copy(this._cursorPosPrev);
703
+ this._cursorPosCurr.copy(this._cursorPosPrev);
502
704
 
503
- this._wCurr = 0;
504
- this._wPrev = this._wCurr;
705
+ this._wCurr = 0;
706
+ this._wPrev = this._wCurr;
707
+ }
505
708
  }
506
709
 
507
710
  this.dispatchEvent(_changeEvent);
508
711
  break;
509
712
 
510
713
  case 'FOV':
511
- if (!this.camera.isPerspectiveCamera || !this.enableZoom) {
512
- return;
513
- }
714
+ if (!this.enableZoom) return;
514
715
 
515
- if (this._animationId != -1) {
516
- cancelAnimationFrame(this._animationId);
517
- this._animationId = -1;
518
- this._timeStart = -1;
519
- this.activateGizmos(false);
520
- this.dispatchEvent(_changeEvent);
521
- }
716
+ if (((_this$camera4 = this.camera) === null || _this$camera4 === void 0 ? void 0 : _this$camera4.type) === 'PerspectiveCamera') {
717
+ if (this._animationId != -1) {
718
+ cancelAnimationFrame(this._animationId);
719
+ this._animationId = -1;
720
+ this._timeStart = -1;
721
+ this.activateGizmos(false);
722
+ this.dispatchEvent(_changeEvent);
723
+ }
522
724
 
523
- this.updateTbState(STATE.FOV, true);
725
+ this.updateTbState(STATE.FOV, true);
524
726
 
525
- this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);
727
+ this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);
526
728
 
527
- this._currentCursorPosition.copy(this._startCursorPosition);
729
+ this._currentCursorPosition.copy(this._startCursorPosition);
730
+ }
528
731
 
529
732
  break;
530
733
 
531
734
  case 'ZOOM':
532
- if (!this.enableZoom) {
533
- return;
534
- }
735
+ if (!this.enableZoom) return;
535
736
 
536
737
  if (this._animationId != -1) {
537
738
  cancelAnimationFrame(this._animationId);
@@ -553,20 +754,25 @@ class ArcballControls extends EventDispatcher {
553
754
  });
554
755
 
555
756
  _defineProperty(this, "onSinglePanMove", (event, opState) => {
556
- if (this.enabled) {
757
+ var _this$camera5;
758
+
759
+ if (this.enabled && this.domElement) {
557
760
  const restart = opState != this._state;
558
761
  this.setCenter(event.clientX, event.clientY);
559
762
 
560
763
  switch (opState) {
561
764
  case STATE.PAN:
562
- if (this.enablePan) {
765
+ if (this.enablePan && this.camera) {
563
766
  if (restart) {
564
767
  //switch to pan operation
565
768
  this.dispatchEvent(_endEvent);
566
769
  this.dispatchEvent(_startEvent);
567
770
  this.updateTbState(opState, true);
771
+ const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement);
568
772
 
569
- this._startCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement));
773
+ if (rayDir !== undefined) {
774
+ this._startCursorPosition.copy(rayDir);
775
+ }
570
776
 
571
777
  if (this.enableGrid) {
572
778
  this.drawGrid();
@@ -575,7 +781,11 @@ class ArcballControls extends EventDispatcher {
575
781
  this.activateGizmos(false);
576
782
  } else {
577
783
  //continue with pan operation
578
- this._currentCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement));
784
+ const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement);
785
+
786
+ if (rayDir !== undefined) {
787
+ this._currentCursorPosition.copy(rayDir);
788
+ }
579
789
 
580
790
  this.applyTransformMatrix(this.pan(this._startCursorPosition, this._currentCursorPosition));
581
791
  }
@@ -584,14 +794,17 @@ class ArcballControls extends EventDispatcher {
584
794
  break;
585
795
 
586
796
  case STATE.ROTATE:
587
- if (this.enableRotate) {
797
+ if (this.enableRotate && this.camera) {
588
798
  if (restart) {
589
799
  //switch to rotate operation
590
800
  this.dispatchEvent(_endEvent);
591
801
  this.dispatchEvent(_startEvent);
592
802
  this.updateTbState(opState, true);
803
+ const rayDir = this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius);
593
804
 
594
- this._startCursorPosition.copy(this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius));
805
+ if (rayDir !== undefined) {
806
+ this._startCursorPosition.copy(rayDir);
807
+ }
595
808
 
596
809
  if (this.enableGrid) {
597
810
  this.disposeGrid();
@@ -600,7 +813,11 @@ class ArcballControls extends EventDispatcher {
600
813
  this.activateGizmos(true);
601
814
  } else {
602
815
  //continue with rotate operation
603
- this._currentCursorPosition.copy(this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius));
816
+ const rayDir = this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius);
817
+
818
+ if (rayDir !== undefined) {
819
+ this._currentCursorPosition.copy(rayDir);
820
+ }
604
821
 
605
822
  const distance = this._startCursorPosition.distanceTo(this._currentCursorPosition);
606
823
 
@@ -667,7 +884,7 @@ class ArcballControls extends EventDispatcher {
667
884
  break;
668
885
 
669
886
  case STATE.FOV:
670
- if (this.enableZoom && this.camera.isPerspectiveCamera) {
887
+ if (this.enableZoom && ((_this$camera5 = this.camera) === null || _this$camera5 === void 0 ? void 0 : _this$camera5.type) === 'PerspectiveCamera') {
671
888
  if (restart) {
672
889
  //switch to fov operation
673
890
  this.dispatchEvent(_endEvent);
@@ -776,12 +993,12 @@ class ArcballControls extends EventDispatcher {
776
993
  });
777
994
 
778
995
  _defineProperty(this, "onDoubleTap", event => {
779
- if (this.enabled && this.enablePan && this.scene != null) {
996
+ if (this.enabled && this.enablePan && this.scene && this.camera && this.domElement) {
780
997
  this.dispatchEvent(_startEvent);
781
998
  this.setCenter(event.clientX, event.clientY);
782
999
  const hitP = this.unprojectOnObj(this.getCursorNDC(_center.x, _center.y, this.domElement), this.camera);
783
1000
 
784
- if (hitP != null && this.enableAnimations) {
1001
+ if (hitP && this.enableAnimations) {
785
1002
  const self = this;
786
1003
 
787
1004
  if (this._animationId != -1) {
@@ -793,7 +1010,7 @@ class ArcballControls extends EventDispatcher {
793
1010
  self.updateTbState(STATE.ANIMATION_FOCUS, true);
794
1011
  self.onFocusAnim(t, hitP, self._cameraMatrixState, self._gizmoMatrixState);
795
1012
  });
796
- } else if (hitP != null && !this.enableAnimations) {
1013
+ } else if (hitP && !this.enableAnimations) {
797
1014
  this.updateTbState(STATE.FOCUS, true);
798
1015
  this.focus(hitP, this.scaleFactor);
799
1016
  this.updateTbState(STATE.IDLE, false);
@@ -805,12 +1022,15 @@ class ArcballControls extends EventDispatcher {
805
1022
  });
806
1023
 
807
1024
  _defineProperty(this, "onDoublePanStart", () => {
808
- if (this.enabled && this.enablePan) {
1025
+ if (this.enabled && this.enablePan && this.camera && this.domElement) {
809
1026
  this.dispatchEvent(_startEvent);
810
1027
  this.updateTbState(STATE.PAN, true);
811
1028
  this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2);
1029
+ const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true);
812
1030
 
813
- this._startCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true));
1031
+ if (rayDir !== undefined) {
1032
+ this._startCursorPosition.copy(rayDir);
1033
+ }
814
1034
 
815
1035
  this._currentCursorPosition.copy(this._startCursorPosition);
816
1036
 
@@ -819,7 +1039,7 @@ class ArcballControls extends EventDispatcher {
819
1039
  });
820
1040
 
821
1041
  _defineProperty(this, "onDoublePanMove", () => {
822
- if (this.enabled && this.enablePan) {
1042
+ if (this.enabled && this.enablePan && this.camera && this.domElement) {
823
1043
  this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2);
824
1044
 
825
1045
  if (this._state != STATE.PAN) {
@@ -828,8 +1048,8 @@ class ArcballControls extends EventDispatcher {
828
1048
  this._startCursorPosition.copy(this._currentCursorPosition);
829
1049
  }
830
1050
 
831
- this._currentCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true));
832
-
1051
+ const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true);
1052
+ if (rayDir !== undefined) this._currentCursorPosition.copy(rayDir);
833
1053
  this.applyTransformMatrix(this.pan(this._startCursorPosition, this._currentCursorPosition, true));
834
1054
  this.dispatchEvent(_changeEvent);
835
1055
  }
@@ -842,12 +1062,14 @@ class ArcballControls extends EventDispatcher {
842
1062
 
843
1063
  _defineProperty(this, "onRotateStart", () => {
844
1064
  if (this.enabled && this.enableRotate) {
1065
+ var _this$camera6;
1066
+
845
1067
  this.dispatchEvent(_startEvent);
846
1068
  this.updateTbState(STATE.ZROTATE, true); //this._startFingerRotation = event.rotation;
847
1069
 
848
1070
  this._startFingerRotation = this.getAngle(this._touchCurrent[1], this._touchCurrent[0]) + this.getAngle(this._touchStart[1], this._touchStart[0]);
849
1071
  this._currentFingerRotation = this._startFingerRotation;
850
- this.camera.getWorldDirection(this._rotationAxis); //rotation axis
1072
+ (_this$camera6 = this.camera) === null || _this$camera6 === void 0 ? void 0 : _this$camera6.getWorldDirection(this._rotationAxis); //rotation axis
851
1073
 
852
1074
  if (!this.enablePan && !this.enableZoom) {
853
1075
  this.activateGizmos(true);
@@ -856,7 +1078,7 @@ class ArcballControls extends EventDispatcher {
856
1078
  });
857
1079
 
858
1080
  _defineProperty(this, "onRotateMove", () => {
859
- if (this.enabled && this.enableRotate) {
1081
+ if (this.enabled && this.enableRotate && this.camera && this.domElement) {
860
1082
  this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2);
861
1083
  let rotationPoint;
862
1084
 
@@ -870,14 +1092,20 @@ class ArcballControls extends EventDispatcher {
870
1092
 
871
1093
  if (!this.enablePan) {
872
1094
  rotationPoint = new Vector3().setFromMatrixPosition(this._gizmoMatrixState);
873
- } else {
1095
+ } else if (this.camera) {
1096
+ var _this$unprojectOnTbPl3;
1097
+
874
1098
  this._v3_2.setFromMatrixPosition(this._gizmoMatrixState);
875
1099
 
876
- rotationPoint = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement).applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._v3_2);
1100
+ rotationPoint = (_this$unprojectOnTbPl3 = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)) === null || _this$unprojectOnTbPl3 === void 0 ? void 0 : _this$unprojectOnTbPl3.applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._v3_2);
877
1101
  }
878
1102
 
879
1103
  const amount = MathUtils.DEG2RAD * (this._startFingerRotation - this._currentFingerRotation);
880
- this.applyTransformMatrix(this.zRotate(rotationPoint, amount));
1104
+
1105
+ if (rotationPoint !== undefined) {
1106
+ this.applyTransformMatrix(this.zRotate(rotationPoint, amount));
1107
+ }
1108
+
881
1109
  this.dispatchEvent(_changeEvent);
882
1110
  }
883
1111
  });
@@ -899,7 +1127,7 @@ class ArcballControls extends EventDispatcher {
899
1127
  });
900
1128
 
901
1129
  _defineProperty(this, "onPinchMove", () => {
902
- if (this.enabled && this.enableZoom) {
1130
+ if (this.enabled && this.enableZoom && this.domElement) {
903
1131
  this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2);
904
1132
  const minDistance = 12; //minimum distance between fingers (in css pixels)
905
1133
 
@@ -915,14 +1143,23 @@ class ArcballControls extends EventDispatcher {
915
1143
  if (!this.enablePan) {
916
1144
  scalePoint = this._gizmos.position;
917
1145
  } else {
918
- if (this.camera.isOrthographicCamera) {
919
- scalePoint = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement).applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._gizmos.position);
920
- } else if (this.camera.isPerspectiveCamera) {
921
- scalePoint = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement).applyQuaternion(this.camera.quaternion).add(this._gizmos.position);
1146
+ var _this$camera7, _this$camera8;
1147
+
1148
+ if (((_this$camera7 = this.camera) === null || _this$camera7 === void 0 ? void 0 : _this$camera7.type) === 'OrthographicCamera') {
1149
+ var _this$unprojectOnTbPl4;
1150
+
1151
+ scalePoint = (_this$unprojectOnTbPl4 = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)) === null || _this$unprojectOnTbPl4 === void 0 ? void 0 : _this$unprojectOnTbPl4.applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._gizmos.position);
1152
+ } else if (((_this$camera8 = this.camera) === null || _this$camera8 === void 0 ? void 0 : _this$camera8.type) === 'PerspectiveCamera') {
1153
+ var _this$unprojectOnTbPl5;
1154
+
1155
+ scalePoint = (_this$unprojectOnTbPl5 = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)) === null || _this$unprojectOnTbPl5 === void 0 ? void 0 : _this$unprojectOnTbPl5.applyQuaternion(this.camera.quaternion).add(this._gizmos.position);
922
1156
  }
923
1157
  }
924
1158
 
925
- this.applyTransformMatrix(this.applyScale(amount, scalePoint));
1159
+ if (scalePoint !== undefined) {
1160
+ this.applyTransformMatrix(this.applyScale(amount, scalePoint));
1161
+ }
1162
+
926
1163
  this.dispatchEvent(_changeEvent);
927
1164
  }
928
1165
  });
@@ -933,7 +1170,7 @@ class ArcballControls extends EventDispatcher {
933
1170
  });
934
1171
 
935
1172
  _defineProperty(this, "onTriplePanStart", () => {
936
- if (this.enabled && this.enableZoom) {
1173
+ if (this.enabled && this.enableZoom && this.domElement) {
937
1174
  this.dispatchEvent(_startEvent);
938
1175
  this.updateTbState(STATE.SCALE, true); //const center = event.center;
939
1176
 
@@ -955,7 +1192,7 @@ class ArcballControls extends EventDispatcher {
955
1192
  });
956
1193
 
957
1194
  _defineProperty(this, "onTriplePanMove", () => {
958
- if (this.enabled && this.enableZoom) {
1195
+ if (this.enabled && this.enableZoom && this.camera && this.domElement) {
959
1196
  // fov / 2
960
1197
  // |\
961
1198
  // | \
@@ -1038,18 +1275,6 @@ class ArcballControls extends EventDispatcher {
1038
1275
  this.setMouseAction('FOV', 1, 'SHIFT');
1039
1276
  });
1040
1277
 
1041
- _defineProperty(this, "compareMouseAction", (action1, action2) => {
1042
- if (action1.operation == action2.operation) {
1043
- if (action1.mouse == action2.mouse && action1.key == action2.key) {
1044
- return true;
1045
- } else {
1046
- return false;
1047
- }
1048
- } else {
1049
- return false;
1050
- }
1051
- });
1052
-
1053
1278
  _defineProperty(this, "setMouseAction", (operation, mouse, key = null) => {
1054
1279
  const operationInput = ['PAN', 'ROTATE', 'ZOOM', 'FOV'];
1055
1280
  const mouseInput = [0, 1, 2, 'WHEEL'];
@@ -1104,17 +1329,6 @@ class ArcballControls extends EventDispatcher {
1104
1329
  return true;
1105
1330
  });
1106
1331
 
1107
- _defineProperty(this, "unsetMouseAction", (mouse, key = null) => {
1108
- for (let i = 0; i < this.mouseActions.length; i++) {
1109
- if (this.mouseActions[i].mouse == mouse && this.mouseActions[i].key == key) {
1110
- this.mouseActions.splice(i, 1);
1111
- return true;
1112
- }
1113
- }
1114
-
1115
- return false;
1116
- });
1117
-
1118
1332
  _defineProperty(this, "getOpFromAction", (mouse, key) => {
1119
1333
  let action;
1120
1334
 
@@ -1126,7 +1340,7 @@ class ArcballControls extends EventDispatcher {
1126
1340
  }
1127
1341
  }
1128
1342
 
1129
- if (key != null) {
1343
+ if (key) {
1130
1344
  for (let i = 0; i < this.mouseActions.length; i++) {
1131
1345
  action = this.mouseActions[i];
1132
1346
 
@@ -1150,7 +1364,7 @@ class ArcballControls extends EventDispatcher {
1150
1364
  }
1151
1365
  }
1152
1366
 
1153
- if (key != null) {
1367
+ if (key) {
1154
1368
  for (let i = 0; i < this.mouseActions.length; i++) {
1155
1369
  action = this.mouseActions[i];
1156
1370
 
@@ -1218,48 +1432,52 @@ class ArcballControls extends EventDispatcher {
1218
1432
  });
1219
1433
 
1220
1434
  _defineProperty(this, "focus", (point, size, amount = 1) => {
1221
- const focusPoint = point.clone(); //move center of camera (along with gizmos) towards point of interest
1435
+ if (this.camera) {
1436
+ const focusPoint = point.clone(); //move center of camera (along with gizmos) towards point of interest
1222
1437
 
1223
- focusPoint.sub(this._gizmos.position).multiplyScalar(amount);
1438
+ focusPoint.sub(this._gizmos.position).multiplyScalar(amount);
1224
1439
 
1225
- this._translationMatrix.makeTranslation(focusPoint.x, focusPoint.y, focusPoint.z);
1440
+ this._translationMatrix.makeTranslation(focusPoint.x, focusPoint.y, focusPoint.z);
1226
1441
 
1227
- const gizmoStateTemp = this._gizmoMatrixState.clone();
1442
+ const gizmoStateTemp = this._gizmoMatrixState.clone();
1228
1443
 
1229
- this._gizmoMatrixState.premultiply(this._translationMatrix);
1444
+ this._gizmoMatrixState.premultiply(this._translationMatrix);
1230
1445
 
1231
- this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);
1446
+ this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);
1232
1447
 
1233
- const cameraStateTemp = this._cameraMatrixState.clone();
1448
+ const cameraStateTemp = this._cameraMatrixState.clone();
1234
1449
 
1235
- this._cameraMatrixState.premultiply(this._translationMatrix);
1450
+ this._cameraMatrixState.premultiply(this._translationMatrix);
1236
1451
 
1237
- this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); //apply zoom
1452
+ this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); //apply zoom
1238
1453
 
1239
1454
 
1240
- if (this.enableZoom) {
1241
- this.applyTransformMatrix(this.applyScale(size, this._gizmos.position));
1242
- }
1455
+ if (this.enableZoom) {
1456
+ this.applyTransformMatrix(this.applyScale(size, this._gizmos.position));
1457
+ }
1243
1458
 
1244
- this._gizmoMatrixState.copy(gizmoStateTemp);
1459
+ this._gizmoMatrixState.copy(gizmoStateTemp);
1245
1460
 
1246
- this._cameraMatrixState.copy(cameraStateTemp);
1461
+ this._cameraMatrixState.copy(cameraStateTemp);
1462
+ }
1247
1463
  });
1248
1464
 
1249
1465
  _defineProperty(this, "drawGrid", () => {
1250
- if (this.scene != null) {
1466
+ if (this.scene) {
1467
+ var _this$camera9, _this$camera10;
1468
+
1251
1469
  const color = 0x888888;
1252
1470
  const multiplier = 3;
1253
1471
  let size, divisions, maxLength, tick;
1254
1472
 
1255
- if (this.camera.isOrthographicCamera) {
1473
+ if (((_this$camera9 = this.camera) === null || _this$camera9 === void 0 ? void 0 : _this$camera9.type) === 'OrthographicCamera') {
1256
1474
  const width = this.camera.right - this.camera.left;
1257
1475
  const height = this.camera.bottom - this.camera.top;
1258
1476
  maxLength = Math.max(width, height);
1259
1477
  tick = maxLength / 20;
1260
1478
  size = maxLength / this.camera.zoom * multiplier;
1261
1479
  divisions = size / tick * this.camera.zoom;
1262
- } else if (this.camera.isPerspectiveCamera) {
1480
+ } else if (((_this$camera10 = this.camera) === null || _this$camera10 === void 0 ? void 0 : _this$camera10.type) === 'PerspectiveCamera') {
1263
1481
  const distance = this.camera.position.distanceTo(this._gizmos.position);
1264
1482
  const halfFovV = MathUtils.DEG2RAD * this.camera.fov * 0.5;
1265
1483
  const halfFovH = Math.atan(this.camera.aspect * Math.tan(halfFovV));
@@ -1269,7 +1487,7 @@ class ArcballControls extends EventDispatcher {
1269
1487
  divisions = size / tick;
1270
1488
  }
1271
1489
 
1272
- if (this._grid == null) {
1490
+ if (this._grid == null && this.camera) {
1273
1491
  this._grid = new GridHelper(size, divisions, color, color);
1274
1492
 
1275
1493
  this._grid.position.copy(this._gizmos.position);
@@ -1286,35 +1504,43 @@ class ArcballControls extends EventDispatcher {
1286
1504
  });
1287
1505
 
1288
1506
  _defineProperty(this, "connect", domElement => {
1289
- this.domElement = domElement;
1507
+ // https://github.com/mrdoob/three.js/issues/20575
1508
+ if (domElement === document) {
1509
+ console.error('THREE.ArcballControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.');
1510
+ }
1511
+
1512
+ this.domElement = domElement; // disables touch scroll
1513
+ // touch-action needs to be defined for pointer events to work on mobile
1514
+ // https://stackoverflow.com/a/48254578
1515
+
1290
1516
  this.domElement.style.touchAction = 'none';
1291
1517
  this.domElement.addEventListener('contextmenu', this.onContextMenu);
1292
- this.domElement.addEventListener('wheel', this.onWheel);
1293
1518
  this.domElement.addEventListener('pointerdown', this.onPointerDown);
1294
1519
  this.domElement.addEventListener('pointercancel', this.onPointerCancel);
1295
- window.addEventListener('keydown', this.onKeyDown);
1296
- window.addEventListener('resize', this.onWindowResize);
1520
+ this.domElement.addEventListener('wheel', this.onWheel);
1297
1521
  });
1298
1522
 
1299
1523
  _defineProperty(this, "dispose", () => {
1524
+ var _this$domElement, _this$domElement2, _this$domElement3, _this$domElement4, _this$scene;
1525
+
1300
1526
  if (this._animationId != -1) {
1301
1527
  window.cancelAnimationFrame(this._animationId);
1302
1528
  }
1303
1529
 
1304
- this.domElement.removeEventListener('pointerdown', this.onPointerDown);
1305
- this.domElement.removeEventListener('pointercancel', this.onPointerCancel);
1306
- this.domElement.removeEventListener('wheel', this.onWheel);
1307
- this.domElement.removeEventListener('contextmenu', this.onContextMenu);
1530
+ (_this$domElement = this.domElement) === null || _this$domElement === void 0 ? void 0 : _this$domElement.removeEventListener('pointerdown', this.onPointerDown);
1531
+ (_this$domElement2 = this.domElement) === null || _this$domElement2 === void 0 ? void 0 : _this$domElement2.removeEventListener('pointercancel', this.onPointerCancel);
1532
+ (_this$domElement3 = this.domElement) === null || _this$domElement3 === void 0 ? void 0 : _this$domElement3.removeEventListener('wheel', this.onWheel);
1533
+ (_this$domElement4 = this.domElement) === null || _this$domElement4 === void 0 ? void 0 : _this$domElement4.removeEventListener('contextmenu', this.onContextMenu);
1308
1534
  window.removeEventListener('pointermove', this.onPointerMove);
1309
1535
  window.removeEventListener('pointerup', this.onPointerUp);
1310
1536
  window.removeEventListener('resize', this.onWindowResize);
1311
- window.removeEventListener('keydown', this.onKeyDown);
1312
- if (this.scene) this.scene.remove(this._gizmos);
1537
+ window.addEventListener('keydown', this.onKeyDown);
1538
+ (_this$scene = this.scene) === null || _this$scene === void 0 ? void 0 : _this$scene.remove(this._gizmos);
1313
1539
  this.disposeGrid();
1314
1540
  });
1315
1541
 
1316
1542
  _defineProperty(this, "disposeGrid", () => {
1317
- if (this._grid != null && this.scene != null) {
1543
+ if (this._grid && this.scene) {
1318
1544
  this.scene.remove(this._grid);
1319
1545
  this._grid = null;
1320
1546
  }
@@ -1325,29 +1551,9 @@ class ArcballControls extends EventDispatcher {
1325
1551
  });
1326
1552
 
1327
1553
  _defineProperty(this, "activateGizmos", isActive => {
1328
- const gizmoX = this._gizmos.children[0];
1329
- const gizmoY = this._gizmos.children[1];
1330
- const gizmoZ = this._gizmos.children[2];
1331
-
1332
- if (isActive) {
1333
- gizmoX.material.setValues({
1334
- opacity: 1
1335
- });
1336
- gizmoY.material.setValues({
1337
- opacity: 1
1338
- });
1339
- gizmoZ.material.setValues({
1340
- opacity: 1
1341
- });
1342
- } else {
1343
- gizmoX.material.setValues({
1344
- opacity: 0.6
1345
- });
1346
- gizmoY.material.setValues({
1347
- opacity: 0.6
1348
- });
1349
- gizmoZ.material.setValues({
1350
- opacity: 0.6
1554
+ for (const gizmo of this._gizmos.children) {
1555
+ gizmo.material.setValues({
1556
+ opacity: isActive ? 1 : 0.6
1351
1557
  });
1352
1558
  }
1353
1559
  });
@@ -1363,49 +1569,62 @@ class ArcballControls extends EventDispatcher {
1363
1569
  });
1364
1570
 
1365
1571
  _defineProperty(this, "getCursorPosition", (cursorX, cursorY, canvas) => {
1572
+ var _this$camera11;
1573
+
1366
1574
  this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas));
1367
1575
 
1368
- this._v2_1.x *= (this.camera.right - this.camera.left) * 0.5;
1369
- this._v2_1.y *= (this.camera.top - this.camera.bottom) * 0.5;
1576
+ if (((_this$camera11 = this.camera) === null || _this$camera11 === void 0 ? void 0 : _this$camera11.type) === 'OrthographicCamera') {
1577
+ this._v2_1.x *= (this.camera.right - this.camera.left) * 0.5;
1578
+ this._v2_1.y *= (this.camera.top - this.camera.bottom) * 0.5;
1579
+ }
1580
+
1370
1581
  return this._v2_1.clone();
1371
1582
  });
1372
1583
 
1373
1584
  _defineProperty(this, "setCamera", camera => {
1374
- camera.lookAt(this.target);
1375
- camera.updateMatrix(); //setting state
1585
+ if (camera) {
1586
+ camera.lookAt(this.target);
1587
+ camera.updateMatrix(); //setting state
1376
1588
 
1377
- if (camera.type == 'PerspectiveCamera') {
1378
- this._fov0 = camera.fov;
1379
- this._fovState = camera.fov;
1380
- }
1589
+ if ((camera === null || camera === void 0 ? void 0 : camera.type) == 'PerspectiveCamera') {
1590
+ this._fov0 = camera.fov;
1591
+ this._fovState = camera.fov;
1592
+ }
1593
+
1594
+ this._cameraMatrixState0.copy(camera.matrix);
1381
1595
 
1382
- this._cameraMatrixState0.copy(camera.matrix);
1596
+ this._cameraMatrixState.copy(this._cameraMatrixState0);
1383
1597
 
1384
- this._cameraMatrixState.copy(this._cameraMatrixState0);
1598
+ this._cameraProjectionState.copy(camera.projectionMatrix);
1385
1599
 
1386
- this._cameraProjectionState.copy(camera.projectionMatrix);
1600
+ this._zoom0 = camera.zoom;
1601
+ this._zoomState = this._zoom0;
1602
+ this._initialNear = camera.near;
1603
+ this._nearPos0 = camera.position.distanceTo(this.target) - camera.near;
1604
+ this._nearPos = this._initialNear;
1605
+ this._initialFar = camera.far;
1606
+ this._farPos0 = camera.position.distanceTo(this.target) - camera.far;
1607
+ this._farPos = this._initialFar;
1387
1608
 
1388
- this._zoom0 = camera.zoom;
1389
- this._zoomState = this._zoom0;
1390
- this._initialNear = camera.near;
1391
- this._nearPos0 = camera.position.distanceTo(this.target) - camera.near;
1392
- this._nearPos = this._initialNear;
1393
- this._initialFar = camera.far;
1394
- this._farPos0 = camera.position.distanceTo(this.target) - camera.far;
1395
- this._farPos = this._initialFar;
1609
+ this._up0.copy(camera.up);
1396
1610
 
1397
- this._up0.copy(camera.up);
1611
+ this._upState.copy(camera.up);
1398
1612
 
1399
- this._upState.copy(camera.up);
1613
+ this.camera = camera;
1614
+ this.camera.updateProjectionMatrix(); //making gizmos
1400
1615
 
1401
- this.camera = camera;
1402
- this.camera.updateProjectionMatrix(); //making gizmos
1616
+ const tbRadius = this.calculateTbRadius(camera);
1617
+
1618
+ if (tbRadius !== undefined) {
1619
+ this._tbRadius = tbRadius;
1620
+ }
1403
1621
 
1404
- this._tbRadius = this.calculateTbRadius(camera);
1405
- this.makeGizmos(this.target, this._tbRadius);
1622
+ this.makeGizmos(this.target, this._tbRadius);
1623
+ }
1406
1624
  });
1407
1625
 
1408
1626
  _defineProperty(this, "makeGizmos", (tbCenter, tbRadius) => {
1627
+ // @ts-expect-error
1409
1628
  const curve = new EllipseCurve(0, 0, tbRadius, tbRadius);
1410
1629
  const points = curve.getPoints(this._curvePts); //geometry
1411
1630
 
@@ -1441,7 +1660,7 @@ class ArcballControls extends EventDispatcher {
1441
1660
 
1442
1661
  this._gizmoMatrixState.copy(this._gizmoMatrixState0);
1443
1662
 
1444
- if (this.camera.zoom != 1) {
1663
+ if (this.camera && this.camera.zoom != 1) {
1445
1664
  //adapt gizmos size to camera zoom
1446
1665
  const size = 1 / this.camera.zoom;
1447
1666
 
@@ -1550,60 +1769,72 @@ class ArcballControls extends EventDispatcher {
1550
1769
  });
1551
1770
 
1552
1771
  _defineProperty(this, "pan", (p0, p1, adjust = false) => {
1553
- const movement = p0.clone().sub(p1);
1772
+ if (this.camera) {
1773
+ const movement = p0.clone().sub(p1);
1554
1774
 
1555
- if (this.camera.isOrthographicCamera) {
1556
- //adjust movement amount
1557
- movement.multiplyScalar(1 / this.camera.zoom);
1558
- } else if (this.camera.isPerspectiveCamera && adjust) {
1559
- //adjust movement amount
1560
- this._v3_1.setFromMatrixPosition(this._cameraMatrixState0); //camera's initial position
1775
+ if (this.camera.type === 'OrthographicCamera') {
1776
+ //adjust movement amount
1777
+ movement.multiplyScalar(1 / this.camera.zoom);
1778
+ }
1561
1779
 
1780
+ if (this.camera.type === 'PerspectiveCamera' && adjust) {
1781
+ //adjust movement amount
1782
+ this._v3_1.setFromMatrixPosition(this._cameraMatrixState0); //camera's initial position
1562
1783
 
1563
- this._v3_2.setFromMatrixPosition(this._gizmoMatrixState0); //gizmo's initial position
1564
1784
 
1785
+ this._v3_2.setFromMatrixPosition(this._gizmoMatrixState0); //gizmo's initial position
1565
1786
 
1566
- const distanceFactor = this._v3_1.distanceTo(this._v3_2) / this.camera.position.distanceTo(this._gizmos.position);
1567
- movement.multiplyScalar(1 / distanceFactor);
1568
- }
1569
1787
 
1570
- this._v3_1.set(movement.x, movement.y, 0).applyQuaternion(this.camera.quaternion);
1788
+ const distanceFactor = this._v3_1.distanceTo(this._v3_2) / this.camera.position.distanceTo(this._gizmos.position);
1789
+ movement.multiplyScalar(1 / distanceFactor);
1790
+ }
1791
+
1792
+ this._v3_1.set(movement.x, movement.y, 0).applyQuaternion(this.camera.quaternion);
1571
1793
 
1572
- this._m4_1.makeTranslation(this._v3_1.x, this._v3_1.y, this._v3_1.z);
1794
+ this._m4_1.makeTranslation(this._v3_1.x, this._v3_1.y, this._v3_1.z);
1795
+
1796
+ this.setTransformationMatrices(this._m4_1, this._m4_1);
1797
+ }
1573
1798
 
1574
- this.setTransformationMatrices(this._m4_1, this._m4_1);
1575
1799
  return _transformation;
1576
1800
  });
1577
1801
 
1578
1802
  _defineProperty(this, "reset", () => {
1579
- this.camera.zoom = this._zoom0;
1803
+ if (this.camera) {
1804
+ this.camera.zoom = this._zoom0;
1580
1805
 
1581
- if (this.camera.isPerspectiveCamera) {
1582
- this.camera.fov = this._fov0;
1583
- }
1806
+ if (this.camera.type === 'PerspectiveCamera') {
1807
+ this.camera.fov = this._fov0;
1808
+ }
1584
1809
 
1585
- this.camera.near = this._nearPos;
1586
- this.camera.far = this._farPos;
1810
+ this.camera.near = this._nearPos;
1811
+ this.camera.far = this._farPos;
1587
1812
 
1588
- this._cameraMatrixState.copy(this._cameraMatrixState0);
1813
+ this._cameraMatrixState.copy(this._cameraMatrixState0);
1589
1814
 
1590
- this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);
1815
+ this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);
1591
1816
 
1592
- this.camera.up.copy(this._up0);
1593
- this.camera.updateMatrix();
1594
- this.camera.updateProjectionMatrix();
1817
+ this.camera.up.copy(this._up0);
1818
+ this.camera.updateMatrix();
1819
+ this.camera.updateProjectionMatrix();
1595
1820
 
1596
- this._gizmoMatrixState.copy(this._gizmoMatrixState0);
1821
+ this._gizmoMatrixState.copy(this._gizmoMatrixState0);
1597
1822
 
1598
- this._gizmoMatrixState0.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);
1823
+ this._gizmoMatrixState0.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);
1599
1824
 
1600
- this._gizmos.updateMatrix();
1825
+ this._gizmos.updateMatrix();
1601
1826
 
1602
- this._tbRadius = this.calculateTbRadius(this.camera);
1603
- this.makeGizmos(this._gizmos.position, this._tbRadius);
1604
- this.camera.lookAt(this._gizmos.position);
1605
- this.updateTbState(STATE.IDLE, false);
1606
- this.dispatchEvent(_changeEvent);
1827
+ const tbRadius = this.calculateTbRadius(this.camera);
1828
+
1829
+ if (tbRadius !== undefined) {
1830
+ this._tbRadius = tbRadius;
1831
+ }
1832
+
1833
+ this.makeGizmos(this._gizmos.position, this._tbRadius);
1834
+ this.camera.lookAt(this._gizmos.position);
1835
+ this.updateTbState(STATE.IDLE, false);
1836
+ this.dispatchEvent(_changeEvent);
1837
+ }
1607
1838
  });
1608
1839
 
1609
1840
  _defineProperty(this, "rotate", (axis, angle) => {
@@ -1625,10 +1856,10 @@ class ArcballControls extends EventDispatcher {
1625
1856
  });
1626
1857
 
1627
1858
  _defineProperty(this, "copyState", () => {
1628
- let state;
1859
+ if (this.camera) {
1860
+ var _this$camera12;
1629
1861
 
1630
- if (this.camera.isOrthographicCamera) {
1631
- state = JSON.stringify({
1862
+ const state = JSON.stringify(((_this$camera12 = this.camera) === null || _this$camera12 === void 0 ? void 0 : _this$camera12.type) === 'OrthographicCamera' ? {
1632
1863
  arcballState: {
1633
1864
  cameraFar: this.camera.far,
1634
1865
  cameraMatrix: this.camera.matrix,
@@ -1637,9 +1868,7 @@ class ArcballControls extends EventDispatcher {
1637
1868
  cameraZoom: this.camera.zoom,
1638
1869
  gizmoMatrix: this._gizmos.matrix
1639
1870
  }
1640
- });
1641
- } else if (this.camera.isPerspectiveCamera) {
1642
- state = JSON.stringify({
1871
+ } : {
1643
1872
  arcballState: {
1644
1873
  cameraFar: this.camera.far,
1645
1874
  cameraFov: this.camera.fov,
@@ -1650,9 +1879,8 @@ class ArcballControls extends EventDispatcher {
1650
1879
  gizmoMatrix: this._gizmos.matrix
1651
1880
  }
1652
1881
  });
1882
+ navigator.clipboard.writeText(state);
1653
1883
  }
1654
-
1655
- navigator.clipboard.writeText(state);
1656
1884
  });
1657
1885
 
1658
1886
  _defineProperty(this, "pasteState", () => {
@@ -1663,6 +1891,8 @@ class ArcballControls extends EventDispatcher {
1663
1891
  });
1664
1892
 
1665
1893
  _defineProperty(this, "saveState", () => {
1894
+ if (!this.camera) return;
1895
+
1666
1896
  this._cameraMatrixState0.copy(this.camera.matrix);
1667
1897
 
1668
1898
  this._gizmoMatrixState0.copy(this._gizmos.matrix);
@@ -1673,16 +1903,17 @@ class ArcballControls extends EventDispatcher {
1673
1903
 
1674
1904
  this._up0.copy(this.camera.up);
1675
1905
 
1676
- if (this.camera.isPerspectiveCamera) {
1906
+ if (this.camera.type === 'PerspectiveCamera') {
1677
1907
  this._fov0 = this.camera.fov;
1678
1908
  }
1679
1909
  });
1680
1910
 
1681
1911
  _defineProperty(this, "applyScale", (size, point, scaleGizmos = true) => {
1912
+ if (!this.camera) return;
1682
1913
  const scalePoint = point.clone();
1683
1914
  let sizeInverse = 1 / size;
1684
1915
 
1685
- if (this.camera.isOrthographicCamera) {
1916
+ if (this.camera.type === 'OrthographicCamera') {
1686
1917
  //camera zoom
1687
1918
  this.camera.zoom = this._zoomState;
1688
1919
  this.camera.zoom *= size; //check min and max zoom
@@ -1720,7 +1951,9 @@ class ArcballControls extends EventDispatcher {
1720
1951
 
1721
1952
  this.setTransformationMatrices(this._m4_1, this._m4_2);
1722
1953
  return _transformation;
1723
- } else if (this.camera.isPerspectiveCamera) {
1954
+ }
1955
+
1956
+ if (this.camera.type === 'PerspectiveCamera') {
1724
1957
  this._v3_1.setFromMatrixPosition(this._cameraMatrixState);
1725
1958
 
1726
1959
  this._v3_2.setFromMatrixPosition(this._gizmoMatrixState); //move camera
@@ -1773,12 +2006,32 @@ class ArcballControls extends EventDispatcher {
1773
2006
  });
1774
2007
 
1775
2008
  _defineProperty(this, "setFov", value => {
1776
- if (this.camera.isPerspectiveCamera) {
2009
+ var _this$camera13;
2010
+
2011
+ if (((_this$camera13 = this.camera) === null || _this$camera13 === void 0 ? void 0 : _this$camera13.type) === 'PerspectiveCamera') {
1777
2012
  this.camera.fov = MathUtils.clamp(value, this.minFov, this.maxFov);
1778
2013
  this.camera.updateProjectionMatrix();
1779
2014
  }
1780
2015
  });
1781
2016
 
2017
+ _defineProperty(this, "setTarget", (x, y, z) => {
2018
+ if (this.camera) {
2019
+ this.target.set(x, y, z);
2020
+
2021
+ this._gizmos.position.set(x, y, z); //for correct radius calculation
2022
+
2023
+
2024
+ const tbRadius = this.calculateTbRadius(this.camera);
2025
+
2026
+ if (tbRadius !== undefined) {
2027
+ this._tbRadius = tbRadius;
2028
+ }
2029
+
2030
+ this.makeGizmos(this.target, this._tbRadius);
2031
+ this.camera.lookAt(this.target);
2032
+ }
2033
+ });
2034
+
1782
2035
  _defineProperty(this, "zRotate", (point, angle) => {
1783
2036
  this._rotationMatrix.makeRotationAxis(this._rotationAxis, angle);
1784
2037
 
@@ -1805,6 +2058,7 @@ class ArcballControls extends EventDispatcher {
1805
2058
  });
1806
2059
 
1807
2060
  _defineProperty(this, "unprojectOnObj", (cursor, camera) => {
2061
+ if (!this.scene) return null;
1808
2062
  const raycaster = new Raycaster();
1809
2063
  raycaster.near = camera.near;
1810
2064
  raycaster.far = camera.far;
@@ -1812,7 +2066,7 @@ class ArcballControls extends EventDispatcher {
1812
2066
  const intersect = raycaster.intersectObjects(this.scene.children, true);
1813
2067
 
1814
2068
  for (let i = 0; i < intersect.length; i++) {
1815
- if (intersect[i].object.uuid != this._gizmos.uuid && intersect[i].face != null) {
2069
+ if (intersect[i].object.uuid != this._gizmos.uuid && intersect[i].face) {
1816
2070
  return intersect[i].point.clone();
1817
2071
  }
1818
2072
  }
@@ -1839,7 +2093,9 @@ class ArcballControls extends EventDispatcher {
1839
2093
  }
1840
2094
 
1841
2095
  return this._v3_1;
1842
- } else if (camera.type == 'PerspectiveCamera') {
2096
+ }
2097
+
2098
+ if (camera.type == 'PerspectiveCamera') {
1843
2099
  //unproject cursor on the near plane
1844
2100
  this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas));
1845
2101
 
@@ -1934,7 +2190,9 @@ class ArcballControls extends EventDispatcher {
1934
2190
  this._v3_1.set(this._v2_1.x, this._v2_1.y, 0);
1935
2191
 
1936
2192
  return this._v3_1.clone();
1937
- } else if (camera.type == 'PerspectiveCamera') {
2193
+ }
2194
+
2195
+ if (camera.type == 'PerspectiveCamera') {
1938
2196
  this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas)); //unproject cursor on the near plane
1939
2197
 
1940
2198
 
@@ -1989,17 +2247,20 @@ class ArcballControls extends EventDispatcher {
1989
2247
  });
1990
2248
 
1991
2249
  _defineProperty(this, "updateMatrixState", () => {
1992
- //update camera and gizmos state
2250
+ if (!this.camera) return; //update camera and gizmos state
2251
+
1993
2252
  this._cameraMatrixState.copy(this.camera.matrix);
1994
2253
 
1995
2254
  this._gizmoMatrixState.copy(this._gizmos.matrix);
1996
2255
 
1997
- if (this.camera.isOrthographicCamera) {
2256
+ if (this.camera.type === 'OrthographicCamera') {
1998
2257
  this._cameraProjectionState.copy(this.camera.projectionMatrix);
1999
2258
 
2000
2259
  this.camera.updateProjectionMatrix();
2001
2260
  this._zoomState = this.camera.zoom;
2002
- } else if (this.camera.isPerspectiveCamera) {
2261
+ }
2262
+
2263
+ if (this.camera.type === 'PerspectiveCamera') {
2003
2264
  this._fovState = this.camera.fov;
2004
2265
  }
2005
2266
  });
@@ -2015,24 +2276,32 @@ class ArcballControls extends EventDispatcher {
2015
2276
  _defineProperty(this, "update", () => {
2016
2277
  const EPS = 0.000001; // Update target and gizmos state
2017
2278
 
2018
- if (!this.target.equals(this._currentTarget)) {
2279
+ if (!this.target.equals(this._currentTarget) && this.camera) {
2019
2280
  this._gizmos.position.set(this.target.x, this.target.y, this.target.z); //for correct radius calculation
2020
2281
 
2021
2282
 
2022
- this._tbRadius = this.calculateTbRadius(this.camera);
2283
+ const tbRadius = this.calculateTbRadius(this.camera);
2284
+
2285
+ if (tbRadius !== undefined) {
2286
+ this._tbRadius = tbRadius;
2287
+ }
2288
+
2023
2289
  this.makeGizmos(this.target, this._tbRadius);
2024
2290
 
2025
2291
  this._currentTarget.copy(this.target);
2026
- } //check min/max parameters
2292
+ }
2027
2293
 
2294
+ if (!this.camera) return; //check min/max parameters
2028
2295
 
2029
- if (this.camera.isOrthographicCamera) {
2296
+ if (this.camera.type === 'OrthographicCamera') {
2030
2297
  //check zoom
2031
2298
  if (this.camera.zoom > this.maxZoom || this.camera.zoom < this.minZoom) {
2032
2299
  const newZoom = MathUtils.clamp(this.camera.zoom, this.minZoom, this.maxZoom);
2033
2300
  this.applyTransformMatrix(this.applyScale(newZoom / this.camera.zoom, this._gizmos.position, true));
2034
2301
  }
2035
- } else if (this.camera.isPerspectiveCamera) {
2302
+ }
2303
+
2304
+ if (this.camera.type === 'PerspectiveCamera') {
2036
2305
  //check distance
2037
2306
  const distance = this.camera.position.distanceTo(this._gizmos.position);
2038
2307
 
@@ -2049,17 +2318,23 @@ class ArcballControls extends EventDispatcher {
2049
2318
  }
2050
2319
 
2051
2320
  const oldRadius = this._tbRadius;
2052
- this._tbRadius = this.calculateTbRadius(this.camera);
2321
+ const tbRadius = this.calculateTbRadius(this.camera);
2322
+
2323
+ if (tbRadius !== undefined) {
2324
+ this._tbRadius = tbRadius;
2325
+ }
2053
2326
 
2054
2327
  if (oldRadius < this._tbRadius - EPS || oldRadius > this._tbRadius + EPS) {
2055
2328
  const scale = (this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z) / 3;
2056
- const newRadius = this._tbRadius / scale;
2329
+ const newRadius = this._tbRadius / scale; // @ts-expect-error
2330
+
2057
2331
  const curve = new EllipseCurve(0, 0, newRadius, newRadius);
2058
2332
  const points = curve.getPoints(this._curvePts);
2059
2333
  const curveGeometry = new BufferGeometry().setFromPoints(points);
2060
2334
 
2061
2335
  for (const gizmo in this._gizmos.children) {
2062
- this._gizmos.children[gizmo].geometry = curveGeometry;
2336
+ const child = this._gizmos.children[gizmo];
2337
+ child.geometry = curveGeometry;
2063
2338
  }
2064
2339
  }
2065
2340
  }
@@ -2070,7 +2345,7 @@ class ArcballControls extends EventDispatcher {
2070
2345
  _defineProperty(this, "setStateFromJSON", json => {
2071
2346
  const state = JSON.parse(json);
2072
2347
 
2073
- if (state.arcballState != undefined) {
2348
+ if (state.arcballState && this.camera) {
2074
2349
  this._cameraMatrixState.fromArray(state.arcballState.cameraMatrix.elements);
2075
2350
 
2076
2351
  this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);
@@ -2080,7 +2355,7 @@ class ArcballControls extends EventDispatcher {
2080
2355
  this.camera.far = state.arcballState.cameraFar;
2081
2356
  this.camera.zoom = state.arcballState.cameraZoom;
2082
2357
 
2083
- if (this.camera.isPerspectiveCamera) {
2358
+ if (this.camera.type === 'PerspectiveCamera') {
2084
2359
  this.camera.fov = state.arcballState.cameraFov;
2085
2360
  }
2086
2361
 
@@ -2093,7 +2368,12 @@ class ArcballControls extends EventDispatcher {
2093
2368
 
2094
2369
  this._gizmos.updateMatrix();
2095
2370
 
2096
- this._tbRadius = this.calculateTbRadius(this.camera);
2371
+ const tbRadius = this.calculateTbRadius(this.camera);
2372
+
2373
+ if (tbRadius !== undefined) {
2374
+ this._tbRadius = tbRadius;
2375
+ }
2376
+
2097
2377
  const gizmoTmp = new Matrix4().copy(this._gizmoMatrixState0);
2098
2378
  this.makeGizmos(this._gizmos.position, this._tbRadius);
2099
2379
 
@@ -2106,6 +2386,7 @@ class ArcballControls extends EventDispatcher {
2106
2386
  });
2107
2387
 
2108
2388
  this.camera = null;
2389
+ this.domElement = _domElement;
2109
2390
  this.scene = scene;
2110
2391
  this.mouseActions = [];
2111
2392
  this._mouseOp = null; //global vectors and matrices that are used in some operations to avoid creating new objects every time (e.g. every time cursor moves)
@@ -2163,8 +2444,6 @@ class ArcballControls extends EventDispatcher {
2163
2444
  this._downValid = true;
2164
2445
  this._nclicks = 0;
2165
2446
  this._downEvents = [];
2166
- this._downStart = 0; //pointerDown time
2167
-
2168
2447
  this._clickStart = 0; //first click time
2169
2448
 
2170
2449
  this._maxDownTime = 250;
@@ -2224,7 +2503,6 @@ class ArcballControls extends EventDispatcher {
2224
2503
  this.enablePan = true;
2225
2504
  this.enableRotate = true;
2226
2505
  this.enableZoom = true;
2227
- this.enableGizmos = true;
2228
2506
  this.minDistance = 0;
2229
2507
  this.maxDistance = Infinity;
2230
2508
  this.minZoom = 0;
@@ -2237,14 +2515,15 @@ class ArcballControls extends EventDispatcher {
2237
2515
  this._state = STATE.IDLE;
2238
2516
  this.setCamera(_camera);
2239
2517
 
2240
- if (this.scene != null) {
2518
+ if (this.scene) {
2241
2519
  this.scene.add(this._gizmos);
2242
- } // connect events
2243
-
2520
+ }
2244
2521
 
2245
- if (_domElement !== undefined) this.connect(_domElement);
2246
2522
  this._devPxRatio = window.devicePixelRatio;
2247
2523
  this.initializeMouseActions();
2524
+ if (this.domElement) this.connect(this.domElement);
2525
+ window.addEventListener('keydown', this.onKeyDown);
2526
+ window.addEventListener('resize', this.onWindowResize);
2248
2527
  } //listeners
2249
2528
 
2250
2529
 
@@ -2253,7 +2532,7 @@ class ArcballControls extends EventDispatcher {
2253
2532
  * @param {Object} transformation Object containing matrices to apply to camera and gizmos
2254
2533
  */
2255
2534
  applyTransformMatrix(transformation) {
2256
- if (transformation.camera != null) {
2535
+ if (transformation !== null && transformation !== void 0 && transformation.camera && this.camera) {
2257
2536
  this._m4_1.copy(this._cameraMatrixState).premultiply(transformation.camera);
2258
2537
 
2259
2538
  this._m4_1.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);
@@ -2265,7 +2544,7 @@ class ArcballControls extends EventDispatcher {
2265
2544
  }
2266
2545
  }
2267
2546
 
2268
- if (transformation.gizmos != null) {
2547
+ if (transformation !== null && transformation !== void 0 && transformation.gizmos) {
2269
2548
  this._m4_1.copy(this._gizmoMatrixState).premultiply(transformation.gizmos);
2270
2549
 
2271
2550
  this._m4_1.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);
@@ -2273,8 +2552,12 @@ class ArcballControls extends EventDispatcher {
2273
2552
  this._gizmos.updateMatrix();
2274
2553
  }
2275
2554
 
2276
- if (this._state == STATE.SCALE || this._state == STATE.FOCUS || this._state == STATE.ANIMATION_FOCUS) {
2277
- this._tbRadius = this.calculateTbRadius(this.camera);
2555
+ if ((this._state == STATE.SCALE || this._state == STATE.FOCUS || this._state == STATE.ANIMATION_FOCUS) && this.camera) {
2556
+ const tbRadius = this.calculateTbRadius(this.camera);
2557
+
2558
+ if (tbRadius !== undefined) {
2559
+ this._tbRadius = tbRadius;
2560
+ }
2278
2561
 
2279
2562
  if (this.adjustNearFar) {
2280
2563
  const cameraDistance = this.camera.position.distanceTo(this._gizmos.position);
@@ -2340,8 +2623,8 @@ class ArcballControls extends EventDispatcher {
2340
2623
  * @param {Matrix4} gizmos Transformation to be applied to gizmos
2341
2624
  */
2342
2625
  setTransformationMatrices(camera = null, gizmos = null) {
2343
- if (camera != null) {
2344
- if (_transformation.camera != null) {
2626
+ if (camera) {
2627
+ if (_transformation.camera) {
2345
2628
  _transformation.camera.copy(camera);
2346
2629
  } else {
2347
2630
  _transformation.camera = camera.clone();
@@ -2350,8 +2633,8 @@ class ArcballControls extends EventDispatcher {
2350
2633
  _transformation.camera = null;
2351
2634
  }
2352
2635
 
2353
- if (gizmos != null) {
2354
- if (_transformation.gizmos != null) {
2636
+ if (gizmos) {
2637
+ if (_transformation.gizmos) {
2355
2638
  _transformation.gizmos.copy(gizmos);
2356
2639
  } else {
2357
2640
  _transformation.gizmos = gizmos.clone();