three-stdlib 2.6.3 → 2.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. package/{Nodes-ec4e1143.js → Nodes-894ac9dc.js} +0 -0
  2. package/{Nodes-427f68b0.js → Nodes-af575af7.js} +0 -0
  3. package/controls/ArcballControls.cjs.js +1 -1
  4. package/controls/ArcballControls.d.ts +161 -0
  5. package/controls/ArcballControls.js +554 -285
  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 -2
  33. package/loaders/NodeMaterialLoader.cjs.js +1 -1
  34. package/loaders/RGBELoader.cjs.js +1 -1
  35. package/loaders/RGBELoader.js +10 -9
  36. package/loaders/RGBMLoader.cjs.js +1 -1
  37. package/loaders/RGBMLoader.js +181 -257
  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/TempNode.js +6 -6
  50. package/nodes/effects/BlurNode.js +3 -3
  51. package/nodes/math/MathNode.js +3 -3
  52. package/nodes/utils/VelocityNode.js +6 -6
  53. package/package.json +2 -2
  54. package/renderers/nodes/accessors/UVNode.js +1 -3
  55. package/renderers/nodes/core/AttributeNode.js +1 -3
  56. package/renderers/nodes/core/Node.js +4 -12
  57. package/renderers/nodes/core/NodeBuilder.js +6 -18
  58. package/webxr/ARButton.js +6 -6
  59. 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
  }
@@ -433,28 +628,16 @@ class ArcballControls extends EventDispatcher {
433
628
  }
434
629
  });
435
630
 
436
- _defineProperty(this, "onKeyDown", event => {
437
- if (event.key == 'c') {
438
- if (event.ctrlKey || event.metaKey) {
439
- this.copyState();
440
- }
441
- } else if (event.key == 'v') {
442
- if (event.ctrlKey || event.metaKey) {
443
- this.pasteState();
444
- }
445
- }
446
- });
447
-
448
631
  _defineProperty(this, "onSinglePanStart", (event, operation) => {
449
- if (this.enabled) {
632
+ var _this$camera4;
633
+
634
+ if (this.enabled && this.domElement) {
450
635
  this.dispatchEvent(_startEvent);
451
636
  this.setCenter(event.clientX, event.clientY);
452
637
 
453
638
  switch (operation) {
454
639
  case 'PAN':
455
- if (!this.enablePan) {
456
- return;
457
- }
640
+ if (!this.enablePan) return;
458
641
 
459
642
  if (this._animationId != -1) {
460
643
  cancelAnimationFrame(this._animationId);
@@ -464,21 +647,24 @@ class ArcballControls extends EventDispatcher {
464
647
  this.dispatchEvent(_changeEvent);
465
648
  }
466
649
 
467
- this.updateTbState(STATE.PAN, true);
650
+ if (this.camera) {
651
+ this.updateTbState(STATE.PAN, true);
652
+ const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement);
468
653
 
469
- this._startCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement));
654
+ if (rayDir !== undefined) {
655
+ this._startCursorPosition.copy(rayDir);
656
+ }
470
657
 
471
- if (this.enableGrid) {
472
- this.drawGrid();
473
- this.dispatchEvent(_changeEvent);
658
+ if (this.enableGrid) {
659
+ this.drawGrid();
660
+ this.dispatchEvent(_changeEvent);
661
+ }
474
662
  }
475
663
 
476
664
  break;
477
665
 
478
666
  case 'ROTATE':
479
- if (!this.enableRotate) {
480
- return;
481
- }
667
+ if (!this.enableRotate) return;
482
668
 
483
669
  if (this._animationId != -1) {
484
670
  cancelAnimationFrame(this._animationId);
@@ -486,52 +672,55 @@ class ArcballControls extends EventDispatcher {
486
672
  this._timeStart = -1;
487
673
  }
488
674
 
489
- this.updateTbState(STATE.ROTATE, true);
675
+ if (this.camera) {
676
+ this.updateTbState(STATE.ROTATE, true);
677
+ const rayDir = this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius);
490
678
 
491
- this._startCursorPosition.copy(this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius));
679
+ if (rayDir !== undefined) {
680
+ this._startCursorPosition.copy(rayDir);
681
+ }
492
682
 
493
- this.activateGizmos(true);
683
+ this.activateGizmos(true);
494
684
 
495
- if (this.enableAnimations) {
496
- this._timePrev = this._timeCurrent = performance.now();
497
- this._angleCurrent = this._anglePrev = 0;
685
+ if (this.enableAnimations) {
686
+ this._timePrev = this._timeCurrent = performance.now();
687
+ this._angleCurrent = this._anglePrev = 0;
498
688
 
499
- this._cursorPosPrev.copy(this._startCursorPosition);
689
+ this._cursorPosPrev.copy(this._startCursorPosition);
500
690
 
501
- this._cursorPosCurr.copy(this._cursorPosPrev);
691
+ this._cursorPosCurr.copy(this._cursorPosPrev);
502
692
 
503
- this._wCurr = 0;
504
- this._wPrev = this._wCurr;
693
+ this._wCurr = 0;
694
+ this._wPrev = this._wCurr;
695
+ }
505
696
  }
506
697
 
507
698
  this.dispatchEvent(_changeEvent);
508
699
  break;
509
700
 
510
701
  case 'FOV':
511
- if (!this.camera.isPerspectiveCamera || !this.enableZoom) {
512
- return;
513
- }
702
+ if (!this.enableZoom) return;
514
703
 
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
- }
704
+ if (((_this$camera4 = this.camera) === null || _this$camera4 === void 0 ? void 0 : _this$camera4.type) === 'PerspectiveCamera') {
705
+ if (this._animationId != -1) {
706
+ cancelAnimationFrame(this._animationId);
707
+ this._animationId = -1;
708
+ this._timeStart = -1;
709
+ this.activateGizmos(false);
710
+ this.dispatchEvent(_changeEvent);
711
+ }
522
712
 
523
- this.updateTbState(STATE.FOV, true);
713
+ this.updateTbState(STATE.FOV, true);
524
714
 
525
- this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);
715
+ this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);
526
716
 
527
- this._currentCursorPosition.copy(this._startCursorPosition);
717
+ this._currentCursorPosition.copy(this._startCursorPosition);
718
+ }
528
719
 
529
720
  break;
530
721
 
531
722
  case 'ZOOM':
532
- if (!this.enableZoom) {
533
- return;
534
- }
723
+ if (!this.enableZoom) return;
535
724
 
536
725
  if (this._animationId != -1) {
537
726
  cancelAnimationFrame(this._animationId);
@@ -553,20 +742,25 @@ class ArcballControls extends EventDispatcher {
553
742
  });
554
743
 
555
744
  _defineProperty(this, "onSinglePanMove", (event, opState) => {
556
- if (this.enabled) {
745
+ var _this$camera5;
746
+
747
+ if (this.enabled && this.domElement) {
557
748
  const restart = opState != this._state;
558
749
  this.setCenter(event.clientX, event.clientY);
559
750
 
560
751
  switch (opState) {
561
752
  case STATE.PAN:
562
- if (this.enablePan) {
753
+ if (this.enablePan && this.camera) {
563
754
  if (restart) {
564
755
  //switch to pan operation
565
756
  this.dispatchEvent(_endEvent);
566
757
  this.dispatchEvent(_startEvent);
567
758
  this.updateTbState(opState, true);
759
+ const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement);
568
760
 
569
- this._startCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement));
761
+ if (rayDir !== undefined) {
762
+ this._startCursorPosition.copy(rayDir);
763
+ }
570
764
 
571
765
  if (this.enableGrid) {
572
766
  this.drawGrid();
@@ -575,7 +769,11 @@ class ArcballControls extends EventDispatcher {
575
769
  this.activateGizmos(false);
576
770
  } else {
577
771
  //continue with pan operation
578
- this._currentCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement));
772
+ const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement);
773
+
774
+ if (rayDir !== undefined) {
775
+ this._currentCursorPosition.copy(rayDir);
776
+ }
579
777
 
580
778
  this.applyTransformMatrix(this.pan(this._startCursorPosition, this._currentCursorPosition));
581
779
  }
@@ -584,14 +782,17 @@ class ArcballControls extends EventDispatcher {
584
782
  break;
585
783
 
586
784
  case STATE.ROTATE:
587
- if (this.enableRotate) {
785
+ if (this.enableRotate && this.camera) {
588
786
  if (restart) {
589
787
  //switch to rotate operation
590
788
  this.dispatchEvent(_endEvent);
591
789
  this.dispatchEvent(_startEvent);
592
790
  this.updateTbState(opState, true);
791
+ const rayDir = this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius);
593
792
 
594
- this._startCursorPosition.copy(this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius));
793
+ if (rayDir !== undefined) {
794
+ this._startCursorPosition.copy(rayDir);
795
+ }
595
796
 
596
797
  if (this.enableGrid) {
597
798
  this.disposeGrid();
@@ -600,7 +801,11 @@ class ArcballControls extends EventDispatcher {
600
801
  this.activateGizmos(true);
601
802
  } else {
602
803
  //continue with rotate operation
603
- this._currentCursorPosition.copy(this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius));
804
+ const rayDir = this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius);
805
+
806
+ if (rayDir !== undefined) {
807
+ this._currentCursorPosition.copy(rayDir);
808
+ }
604
809
 
605
810
  const distance = this._startCursorPosition.distanceTo(this._currentCursorPosition);
606
811
 
@@ -667,7 +872,7 @@ class ArcballControls extends EventDispatcher {
667
872
  break;
668
873
 
669
874
  case STATE.FOV:
670
- if (this.enableZoom && this.camera.isPerspectiveCamera) {
875
+ if (this.enableZoom && ((_this$camera5 = this.camera) === null || _this$camera5 === void 0 ? void 0 : _this$camera5.type) === 'PerspectiveCamera') {
671
876
  if (restart) {
672
877
  //switch to fov operation
673
878
  this.dispatchEvent(_endEvent);
@@ -776,12 +981,12 @@ class ArcballControls extends EventDispatcher {
776
981
  });
777
982
 
778
983
  _defineProperty(this, "onDoubleTap", event => {
779
- if (this.enabled && this.enablePan && this.scene != null) {
984
+ if (this.enabled && this.enablePan && this.scene && this.camera && this.domElement) {
780
985
  this.dispatchEvent(_startEvent);
781
986
  this.setCenter(event.clientX, event.clientY);
782
987
  const hitP = this.unprojectOnObj(this.getCursorNDC(_center.x, _center.y, this.domElement), this.camera);
783
988
 
784
- if (hitP != null && this.enableAnimations) {
989
+ if (hitP && this.enableAnimations) {
785
990
  const self = this;
786
991
 
787
992
  if (this._animationId != -1) {
@@ -793,7 +998,7 @@ class ArcballControls extends EventDispatcher {
793
998
  self.updateTbState(STATE.ANIMATION_FOCUS, true);
794
999
  self.onFocusAnim(t, hitP, self._cameraMatrixState, self._gizmoMatrixState);
795
1000
  });
796
- } else if (hitP != null && !this.enableAnimations) {
1001
+ } else if (hitP && !this.enableAnimations) {
797
1002
  this.updateTbState(STATE.FOCUS, true);
798
1003
  this.focus(hitP, this.scaleFactor);
799
1004
  this.updateTbState(STATE.IDLE, false);
@@ -805,12 +1010,15 @@ class ArcballControls extends EventDispatcher {
805
1010
  });
806
1011
 
807
1012
  _defineProperty(this, "onDoublePanStart", () => {
808
- if (this.enabled && this.enablePan) {
1013
+ if (this.enabled && this.enablePan && this.camera && this.domElement) {
809
1014
  this.dispatchEvent(_startEvent);
810
1015
  this.updateTbState(STATE.PAN, true);
811
1016
  this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2);
1017
+ const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true);
812
1018
 
813
- this._startCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true));
1019
+ if (rayDir !== undefined) {
1020
+ this._startCursorPosition.copy(rayDir);
1021
+ }
814
1022
 
815
1023
  this._currentCursorPosition.copy(this._startCursorPosition);
816
1024
 
@@ -819,7 +1027,7 @@ class ArcballControls extends EventDispatcher {
819
1027
  });
820
1028
 
821
1029
  _defineProperty(this, "onDoublePanMove", () => {
822
- if (this.enabled && this.enablePan) {
1030
+ if (this.enabled && this.enablePan && this.camera && this.domElement) {
823
1031
  this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2);
824
1032
 
825
1033
  if (this._state != STATE.PAN) {
@@ -828,8 +1036,8 @@ class ArcballControls extends EventDispatcher {
828
1036
  this._startCursorPosition.copy(this._currentCursorPosition);
829
1037
  }
830
1038
 
831
- this._currentCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true));
832
-
1039
+ const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true);
1040
+ if (rayDir !== undefined) this._currentCursorPosition.copy(rayDir);
833
1041
  this.applyTransformMatrix(this.pan(this._startCursorPosition, this._currentCursorPosition, true));
834
1042
  this.dispatchEvent(_changeEvent);
835
1043
  }
@@ -842,12 +1050,14 @@ class ArcballControls extends EventDispatcher {
842
1050
 
843
1051
  _defineProperty(this, "onRotateStart", () => {
844
1052
  if (this.enabled && this.enableRotate) {
1053
+ var _this$camera6;
1054
+
845
1055
  this.dispatchEvent(_startEvent);
846
1056
  this.updateTbState(STATE.ZROTATE, true); //this._startFingerRotation = event.rotation;
847
1057
 
848
1058
  this._startFingerRotation = this.getAngle(this._touchCurrent[1], this._touchCurrent[0]) + this.getAngle(this._touchStart[1], this._touchStart[0]);
849
1059
  this._currentFingerRotation = this._startFingerRotation;
850
- this.camera.getWorldDirection(this._rotationAxis); //rotation axis
1060
+ (_this$camera6 = this.camera) === null || _this$camera6 === void 0 ? void 0 : _this$camera6.getWorldDirection(this._rotationAxis); //rotation axis
851
1061
 
852
1062
  if (!this.enablePan && !this.enableZoom) {
853
1063
  this.activateGizmos(true);
@@ -856,7 +1066,7 @@ class ArcballControls extends EventDispatcher {
856
1066
  });
857
1067
 
858
1068
  _defineProperty(this, "onRotateMove", () => {
859
- if (this.enabled && this.enableRotate) {
1069
+ if (this.enabled && this.enableRotate && this.camera && this.domElement) {
860
1070
  this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2);
861
1071
  let rotationPoint;
862
1072
 
@@ -870,14 +1080,20 @@ class ArcballControls extends EventDispatcher {
870
1080
 
871
1081
  if (!this.enablePan) {
872
1082
  rotationPoint = new Vector3().setFromMatrixPosition(this._gizmoMatrixState);
873
- } else {
1083
+ } else if (this.camera) {
1084
+ var _this$unprojectOnTbPl3;
1085
+
874
1086
  this._v3_2.setFromMatrixPosition(this._gizmoMatrixState);
875
1087
 
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);
1088
+ 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
1089
  }
878
1090
 
879
1091
  const amount = MathUtils.DEG2RAD * (this._startFingerRotation - this._currentFingerRotation);
880
- this.applyTransformMatrix(this.zRotate(rotationPoint, amount));
1092
+
1093
+ if (rotationPoint !== undefined) {
1094
+ this.applyTransformMatrix(this.zRotate(rotationPoint, amount));
1095
+ }
1096
+
881
1097
  this.dispatchEvent(_changeEvent);
882
1098
  }
883
1099
  });
@@ -899,7 +1115,7 @@ class ArcballControls extends EventDispatcher {
899
1115
  });
900
1116
 
901
1117
  _defineProperty(this, "onPinchMove", () => {
902
- if (this.enabled && this.enableZoom) {
1118
+ if (this.enabled && this.enableZoom && this.domElement) {
903
1119
  this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2);
904
1120
  const minDistance = 12; //minimum distance between fingers (in css pixels)
905
1121
 
@@ -915,14 +1131,23 @@ class ArcballControls extends EventDispatcher {
915
1131
  if (!this.enablePan) {
916
1132
  scalePoint = this._gizmos.position;
917
1133
  } 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);
1134
+ var _this$camera7, _this$camera8;
1135
+
1136
+ if (((_this$camera7 = this.camera) === null || _this$camera7 === void 0 ? void 0 : _this$camera7.type) === 'OrthographicCamera') {
1137
+ var _this$unprojectOnTbPl4;
1138
+
1139
+ 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);
1140
+ } else if (((_this$camera8 = this.camera) === null || _this$camera8 === void 0 ? void 0 : _this$camera8.type) === 'PerspectiveCamera') {
1141
+ var _this$unprojectOnTbPl5;
1142
+
1143
+ 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
1144
  }
923
1145
  }
924
1146
 
925
- this.applyTransformMatrix(this.applyScale(amount, scalePoint));
1147
+ if (scalePoint !== undefined) {
1148
+ this.applyTransformMatrix(this.applyScale(amount, scalePoint));
1149
+ }
1150
+
926
1151
  this.dispatchEvent(_changeEvent);
927
1152
  }
928
1153
  });
@@ -933,7 +1158,7 @@ class ArcballControls extends EventDispatcher {
933
1158
  });
934
1159
 
935
1160
  _defineProperty(this, "onTriplePanStart", () => {
936
- if (this.enabled && this.enableZoom) {
1161
+ if (this.enabled && this.enableZoom && this.domElement) {
937
1162
  this.dispatchEvent(_startEvent);
938
1163
  this.updateTbState(STATE.SCALE, true); //const center = event.center;
939
1164
 
@@ -955,7 +1180,7 @@ class ArcballControls extends EventDispatcher {
955
1180
  });
956
1181
 
957
1182
  _defineProperty(this, "onTriplePanMove", () => {
958
- if (this.enabled && this.enableZoom) {
1183
+ if (this.enabled && this.enableZoom && this.camera && this.domElement) {
959
1184
  // fov / 2
960
1185
  // |\
961
1186
  // | \
@@ -1038,18 +1263,6 @@ class ArcballControls extends EventDispatcher {
1038
1263
  this.setMouseAction('FOV', 1, 'SHIFT');
1039
1264
  });
1040
1265
 
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
1266
  _defineProperty(this, "setMouseAction", (operation, mouse, key = null) => {
1054
1267
  const operationInput = ['PAN', 'ROTATE', 'ZOOM', 'FOV'];
1055
1268
  const mouseInput = [0, 1, 2, 'WHEEL'];
@@ -1104,17 +1317,6 @@ class ArcballControls extends EventDispatcher {
1104
1317
  return true;
1105
1318
  });
1106
1319
 
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
1320
  _defineProperty(this, "getOpFromAction", (mouse, key) => {
1119
1321
  let action;
1120
1322
 
@@ -1126,7 +1328,7 @@ class ArcballControls extends EventDispatcher {
1126
1328
  }
1127
1329
  }
1128
1330
 
1129
- if (key != null) {
1331
+ if (key) {
1130
1332
  for (let i = 0; i < this.mouseActions.length; i++) {
1131
1333
  action = this.mouseActions[i];
1132
1334
 
@@ -1150,7 +1352,7 @@ class ArcballControls extends EventDispatcher {
1150
1352
  }
1151
1353
  }
1152
1354
 
1153
- if (key != null) {
1355
+ if (key) {
1154
1356
  for (let i = 0; i < this.mouseActions.length; i++) {
1155
1357
  action = this.mouseActions[i];
1156
1358
 
@@ -1218,48 +1420,52 @@ class ArcballControls extends EventDispatcher {
1218
1420
  });
1219
1421
 
1220
1422
  _defineProperty(this, "focus", (point, size, amount = 1) => {
1221
- const focusPoint = point.clone(); //move center of camera (along with gizmos) towards point of interest
1423
+ if (this.camera) {
1424
+ const focusPoint = point.clone(); //move center of camera (along with gizmos) towards point of interest
1222
1425
 
1223
- focusPoint.sub(this._gizmos.position).multiplyScalar(amount);
1426
+ focusPoint.sub(this._gizmos.position).multiplyScalar(amount);
1224
1427
 
1225
- this._translationMatrix.makeTranslation(focusPoint.x, focusPoint.y, focusPoint.z);
1428
+ this._translationMatrix.makeTranslation(focusPoint.x, focusPoint.y, focusPoint.z);
1226
1429
 
1227
- const gizmoStateTemp = this._gizmoMatrixState.clone();
1430
+ const gizmoStateTemp = this._gizmoMatrixState.clone();
1228
1431
 
1229
- this._gizmoMatrixState.premultiply(this._translationMatrix);
1432
+ this._gizmoMatrixState.premultiply(this._translationMatrix);
1230
1433
 
1231
- this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);
1434
+ this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);
1232
1435
 
1233
- const cameraStateTemp = this._cameraMatrixState.clone();
1436
+ const cameraStateTemp = this._cameraMatrixState.clone();
1234
1437
 
1235
- this._cameraMatrixState.premultiply(this._translationMatrix);
1438
+ this._cameraMatrixState.premultiply(this._translationMatrix);
1236
1439
 
1237
- this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); //apply zoom
1440
+ this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); //apply zoom
1238
1441
 
1239
1442
 
1240
- if (this.enableZoom) {
1241
- this.applyTransformMatrix(this.applyScale(size, this._gizmos.position));
1242
- }
1443
+ if (this.enableZoom) {
1444
+ this.applyTransformMatrix(this.applyScale(size, this._gizmos.position));
1445
+ }
1243
1446
 
1244
- this._gizmoMatrixState.copy(gizmoStateTemp);
1447
+ this._gizmoMatrixState.copy(gizmoStateTemp);
1245
1448
 
1246
- this._cameraMatrixState.copy(cameraStateTemp);
1449
+ this._cameraMatrixState.copy(cameraStateTemp);
1450
+ }
1247
1451
  });
1248
1452
 
1249
1453
  _defineProperty(this, "drawGrid", () => {
1250
- if (this.scene != null) {
1454
+ if (this.scene) {
1455
+ var _this$camera9, _this$camera10;
1456
+
1251
1457
  const color = 0x888888;
1252
1458
  const multiplier = 3;
1253
1459
  let size, divisions, maxLength, tick;
1254
1460
 
1255
- if (this.camera.isOrthographicCamera) {
1461
+ if (((_this$camera9 = this.camera) === null || _this$camera9 === void 0 ? void 0 : _this$camera9.type) === 'OrthographicCamera') {
1256
1462
  const width = this.camera.right - this.camera.left;
1257
1463
  const height = this.camera.bottom - this.camera.top;
1258
1464
  maxLength = Math.max(width, height);
1259
1465
  tick = maxLength / 20;
1260
1466
  size = maxLength / this.camera.zoom * multiplier;
1261
1467
  divisions = size / tick * this.camera.zoom;
1262
- } else if (this.camera.isPerspectiveCamera) {
1468
+ } else if (((_this$camera10 = this.camera) === null || _this$camera10 === void 0 ? void 0 : _this$camera10.type) === 'PerspectiveCamera') {
1263
1469
  const distance = this.camera.position.distanceTo(this._gizmos.position);
1264
1470
  const halfFovV = MathUtils.DEG2RAD * this.camera.fov * 0.5;
1265
1471
  const halfFovH = Math.atan(this.camera.aspect * Math.tan(halfFovV));
@@ -1269,7 +1475,7 @@ class ArcballControls extends EventDispatcher {
1269
1475
  divisions = size / tick;
1270
1476
  }
1271
1477
 
1272
- if (this._grid == null) {
1478
+ if (this._grid == null && this.camera) {
1273
1479
  this._grid = new GridHelper(size, divisions, color, color);
1274
1480
 
1275
1481
  this._grid.position.copy(this._gizmos.position);
@@ -1286,35 +1492,42 @@ class ArcballControls extends EventDispatcher {
1286
1492
  });
1287
1493
 
1288
1494
  _defineProperty(this, "connect", domElement => {
1289
- this.domElement = domElement;
1495
+ // https://github.com/mrdoob/three.js/issues/20575
1496
+ if (domElement === document) {
1497
+ console.error('THREE.ArcballControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.');
1498
+ }
1499
+
1500
+ this.domElement = domElement; // disables touch scroll
1501
+ // touch-action needs to be defined for pointer events to work on mobile
1502
+ // https://stackoverflow.com/a/48254578
1503
+
1290
1504
  this.domElement.style.touchAction = 'none';
1291
1505
  this.domElement.addEventListener('contextmenu', this.onContextMenu);
1292
- this.domElement.addEventListener('wheel', this.onWheel);
1293
1506
  this.domElement.addEventListener('pointerdown', this.onPointerDown);
1294
1507
  this.domElement.addEventListener('pointercancel', this.onPointerCancel);
1295
- window.addEventListener('keydown', this.onKeyDown);
1296
- window.addEventListener('resize', this.onWindowResize);
1508
+ this.domElement.addEventListener('wheel', this.onWheel);
1297
1509
  });
1298
1510
 
1299
1511
  _defineProperty(this, "dispose", () => {
1512
+ var _this$domElement, _this$domElement2, _this$domElement3, _this$domElement4, _this$scene;
1513
+
1300
1514
  if (this._animationId != -1) {
1301
1515
  window.cancelAnimationFrame(this._animationId);
1302
1516
  }
1303
1517
 
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);
1518
+ (_this$domElement = this.domElement) === null || _this$domElement === void 0 ? void 0 : _this$domElement.removeEventListener('pointerdown', this.onPointerDown);
1519
+ (_this$domElement2 = this.domElement) === null || _this$domElement2 === void 0 ? void 0 : _this$domElement2.removeEventListener('pointercancel', this.onPointerCancel);
1520
+ (_this$domElement3 = this.domElement) === null || _this$domElement3 === void 0 ? void 0 : _this$domElement3.removeEventListener('wheel', this.onWheel);
1521
+ (_this$domElement4 = this.domElement) === null || _this$domElement4 === void 0 ? void 0 : _this$domElement4.removeEventListener('contextmenu', this.onContextMenu);
1308
1522
  window.removeEventListener('pointermove', this.onPointerMove);
1309
1523
  window.removeEventListener('pointerup', this.onPointerUp);
1310
1524
  window.removeEventListener('resize', this.onWindowResize);
1311
- window.removeEventListener('keydown', this.onKeyDown);
1312
- if (this.scene) this.scene.remove(this._gizmos);
1525
+ (_this$scene = this.scene) === null || _this$scene === void 0 ? void 0 : _this$scene.remove(this._gizmos);
1313
1526
  this.disposeGrid();
1314
1527
  });
1315
1528
 
1316
1529
  _defineProperty(this, "disposeGrid", () => {
1317
- if (this._grid != null && this.scene != null) {
1530
+ if (this._grid && this.scene) {
1318
1531
  this.scene.remove(this._grid);
1319
1532
  this._grid = null;
1320
1533
  }
@@ -1325,29 +1538,9 @@ class ArcballControls extends EventDispatcher {
1325
1538
  });
1326
1539
 
1327
1540
  _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
1541
+ for (const gizmo of this._gizmos.children) {
1542
+ gizmo.material.setValues({
1543
+ opacity: isActive ? 1 : 0.6
1351
1544
  });
1352
1545
  }
1353
1546
  });
@@ -1363,49 +1556,62 @@ class ArcballControls extends EventDispatcher {
1363
1556
  });
1364
1557
 
1365
1558
  _defineProperty(this, "getCursorPosition", (cursorX, cursorY, canvas) => {
1559
+ var _this$camera11;
1560
+
1366
1561
  this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas));
1367
1562
 
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;
1563
+ if (((_this$camera11 = this.camera) === null || _this$camera11 === void 0 ? void 0 : _this$camera11.type) === 'OrthographicCamera') {
1564
+ this._v2_1.x *= (this.camera.right - this.camera.left) * 0.5;
1565
+ this._v2_1.y *= (this.camera.top - this.camera.bottom) * 0.5;
1566
+ }
1567
+
1370
1568
  return this._v2_1.clone();
1371
1569
  });
1372
1570
 
1373
1571
  _defineProperty(this, "setCamera", camera => {
1374
- camera.lookAt(this.target);
1375
- camera.updateMatrix(); //setting state
1572
+ if (camera) {
1573
+ camera.lookAt(this.target);
1574
+ camera.updateMatrix(); //setting state
1376
1575
 
1377
- if (camera.type == 'PerspectiveCamera') {
1378
- this._fov0 = camera.fov;
1379
- this._fovState = camera.fov;
1380
- }
1576
+ if ((camera === null || camera === void 0 ? void 0 : camera.type) == 'PerspectiveCamera') {
1577
+ this._fov0 = camera.fov;
1578
+ this._fovState = camera.fov;
1579
+ }
1580
+
1581
+ this._cameraMatrixState0.copy(camera.matrix);
1582
+
1583
+ this._cameraMatrixState.copy(this._cameraMatrixState0);
1381
1584
 
1382
- this._cameraMatrixState0.copy(camera.matrix);
1585
+ this._cameraProjectionState.copy(camera.projectionMatrix);
1383
1586
 
1384
- this._cameraMatrixState.copy(this._cameraMatrixState0);
1587
+ this._zoom0 = camera.zoom;
1588
+ this._zoomState = this._zoom0;
1589
+ this._initialNear = camera.near;
1590
+ this._nearPos0 = camera.position.distanceTo(this.target) - camera.near;
1591
+ this._nearPos = this._initialNear;
1592
+ this._initialFar = camera.far;
1593
+ this._farPos0 = camera.position.distanceTo(this.target) - camera.far;
1594
+ this._farPos = this._initialFar;
1385
1595
 
1386
- this._cameraProjectionState.copy(camera.projectionMatrix);
1596
+ this._up0.copy(camera.up);
1387
1597
 
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;
1598
+ this._upState.copy(camera.up);
1396
1599
 
1397
- this._up0.copy(camera.up);
1600
+ this.camera = camera;
1601
+ this.camera.updateProjectionMatrix(); //making gizmos
1398
1602
 
1399
- this._upState.copy(camera.up);
1603
+ const tbRadius = this.calculateTbRadius(camera);
1400
1604
 
1401
- this.camera = camera;
1402
- this.camera.updateProjectionMatrix(); //making gizmos
1605
+ if (tbRadius !== undefined) {
1606
+ this._tbRadius = tbRadius;
1607
+ }
1403
1608
 
1404
- this._tbRadius = this.calculateTbRadius(camera);
1405
- this.makeGizmos(this.target, this._tbRadius);
1609
+ this.makeGizmos(this.target, this._tbRadius);
1610
+ }
1406
1611
  });
1407
1612
 
1408
1613
  _defineProperty(this, "makeGizmos", (tbCenter, tbRadius) => {
1614
+ // @ts-expect-error
1409
1615
  const curve = new EllipseCurve(0, 0, tbRadius, tbRadius);
1410
1616
  const points = curve.getPoints(this._curvePts); //geometry
1411
1617
 
@@ -1441,7 +1647,7 @@ class ArcballControls extends EventDispatcher {
1441
1647
 
1442
1648
  this._gizmoMatrixState.copy(this._gizmoMatrixState0);
1443
1649
 
1444
- if (this.camera.zoom != 1) {
1650
+ if (this.camera && this.camera.zoom != 1) {
1445
1651
  //adapt gizmos size to camera zoom
1446
1652
  const size = 1 / this.camera.zoom;
1447
1653
 
@@ -1550,60 +1756,72 @@ class ArcballControls extends EventDispatcher {
1550
1756
  });
1551
1757
 
1552
1758
  _defineProperty(this, "pan", (p0, p1, adjust = false) => {
1553
- const movement = p0.clone().sub(p1);
1759
+ if (this.camera) {
1760
+ const movement = p0.clone().sub(p1);
1554
1761
 
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
1762
+ if (this.camera.type === 'OrthographicCamera') {
1763
+ //adjust movement amount
1764
+ movement.multiplyScalar(1 / this.camera.zoom);
1765
+ }
1561
1766
 
1767
+ if (this.camera.type === 'PerspectiveCamera' && adjust) {
1768
+ //adjust movement amount
1769
+ this._v3_1.setFromMatrixPosition(this._cameraMatrixState0); //camera's initial position
1562
1770
 
1563
- this._v3_2.setFromMatrixPosition(this._gizmoMatrixState0); //gizmo's initial position
1564
1771
 
1772
+ this._v3_2.setFromMatrixPosition(this._gizmoMatrixState0); //gizmo's initial position
1565
1773
 
1566
- const distanceFactor = this._v3_1.distanceTo(this._v3_2) / this.camera.position.distanceTo(this._gizmos.position);
1567
- movement.multiplyScalar(1 / distanceFactor);
1568
- }
1569
1774
 
1570
- this._v3_1.set(movement.x, movement.y, 0).applyQuaternion(this.camera.quaternion);
1775
+ const distanceFactor = this._v3_1.distanceTo(this._v3_2) / this.camera.position.distanceTo(this._gizmos.position);
1776
+ movement.multiplyScalar(1 / distanceFactor);
1777
+ }
1778
+
1779
+ this._v3_1.set(movement.x, movement.y, 0).applyQuaternion(this.camera.quaternion);
1571
1780
 
1572
- this._m4_1.makeTranslation(this._v3_1.x, this._v3_1.y, this._v3_1.z);
1781
+ this._m4_1.makeTranslation(this._v3_1.x, this._v3_1.y, this._v3_1.z);
1782
+
1783
+ this.setTransformationMatrices(this._m4_1, this._m4_1);
1784
+ }
1573
1785
 
1574
- this.setTransformationMatrices(this._m4_1, this._m4_1);
1575
1786
  return _transformation;
1576
1787
  });
1577
1788
 
1578
1789
  _defineProperty(this, "reset", () => {
1579
- this.camera.zoom = this._zoom0;
1790
+ if (this.camera) {
1791
+ this.camera.zoom = this._zoom0;
1580
1792
 
1581
- if (this.camera.isPerspectiveCamera) {
1582
- this.camera.fov = this._fov0;
1583
- }
1793
+ if (this.camera.type === 'PerspectiveCamera') {
1794
+ this.camera.fov = this._fov0;
1795
+ }
1584
1796
 
1585
- this.camera.near = this._nearPos;
1586
- this.camera.far = this._farPos;
1797
+ this.camera.near = this._nearPos;
1798
+ this.camera.far = this._farPos;
1587
1799
 
1588
- this._cameraMatrixState.copy(this._cameraMatrixState0);
1800
+ this._cameraMatrixState.copy(this._cameraMatrixState0);
1589
1801
 
1590
- this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);
1802
+ this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);
1591
1803
 
1592
- this.camera.up.copy(this._up0);
1593
- this.camera.updateMatrix();
1594
- this.camera.updateProjectionMatrix();
1804
+ this.camera.up.copy(this._up0);
1805
+ this.camera.updateMatrix();
1806
+ this.camera.updateProjectionMatrix();
1595
1807
 
1596
- this._gizmoMatrixState.copy(this._gizmoMatrixState0);
1808
+ this._gizmoMatrixState.copy(this._gizmoMatrixState0);
1597
1809
 
1598
- this._gizmoMatrixState0.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);
1810
+ this._gizmoMatrixState0.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);
1599
1811
 
1600
- this._gizmos.updateMatrix();
1812
+ this._gizmos.updateMatrix();
1601
1813
 
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);
1814
+ const tbRadius = this.calculateTbRadius(this.camera);
1815
+
1816
+ if (tbRadius !== undefined) {
1817
+ this._tbRadius = tbRadius;
1818
+ }
1819
+
1820
+ this.makeGizmos(this._gizmos.position, this._tbRadius);
1821
+ this.camera.lookAt(this._gizmos.position);
1822
+ this.updateTbState(STATE.IDLE, false);
1823
+ this.dispatchEvent(_changeEvent);
1824
+ }
1607
1825
  });
1608
1826
 
1609
1827
  _defineProperty(this, "rotate", (axis, angle) => {
@@ -1625,10 +1843,10 @@ class ArcballControls extends EventDispatcher {
1625
1843
  });
1626
1844
 
1627
1845
  _defineProperty(this, "copyState", () => {
1628
- let state;
1846
+ if (this.camera) {
1847
+ var _this$camera12;
1629
1848
 
1630
- if (this.camera.isOrthographicCamera) {
1631
- state = JSON.stringify({
1849
+ const state = JSON.stringify(((_this$camera12 = this.camera) === null || _this$camera12 === void 0 ? void 0 : _this$camera12.type) === 'OrthographicCamera' ? {
1632
1850
  arcballState: {
1633
1851
  cameraFar: this.camera.far,
1634
1852
  cameraMatrix: this.camera.matrix,
@@ -1637,9 +1855,7 @@ class ArcballControls extends EventDispatcher {
1637
1855
  cameraZoom: this.camera.zoom,
1638
1856
  gizmoMatrix: this._gizmos.matrix
1639
1857
  }
1640
- });
1641
- } else if (this.camera.isPerspectiveCamera) {
1642
- state = JSON.stringify({
1858
+ } : {
1643
1859
  arcballState: {
1644
1860
  cameraFar: this.camera.far,
1645
1861
  cameraFov: this.camera.fov,
@@ -1650,9 +1866,8 @@ class ArcballControls extends EventDispatcher {
1650
1866
  gizmoMatrix: this._gizmos.matrix
1651
1867
  }
1652
1868
  });
1869
+ navigator.clipboard.writeText(state);
1653
1870
  }
1654
-
1655
- navigator.clipboard.writeText(state);
1656
1871
  });
1657
1872
 
1658
1873
  _defineProperty(this, "pasteState", () => {
@@ -1663,6 +1878,8 @@ class ArcballControls extends EventDispatcher {
1663
1878
  });
1664
1879
 
1665
1880
  _defineProperty(this, "saveState", () => {
1881
+ if (!this.camera) return;
1882
+
1666
1883
  this._cameraMatrixState0.copy(this.camera.matrix);
1667
1884
 
1668
1885
  this._gizmoMatrixState0.copy(this._gizmos.matrix);
@@ -1673,16 +1890,17 @@ class ArcballControls extends EventDispatcher {
1673
1890
 
1674
1891
  this._up0.copy(this.camera.up);
1675
1892
 
1676
- if (this.camera.isPerspectiveCamera) {
1893
+ if (this.camera.type === 'PerspectiveCamera') {
1677
1894
  this._fov0 = this.camera.fov;
1678
1895
  }
1679
1896
  });
1680
1897
 
1681
1898
  _defineProperty(this, "applyScale", (size, point, scaleGizmos = true) => {
1899
+ if (!this.camera) return;
1682
1900
  const scalePoint = point.clone();
1683
1901
  let sizeInverse = 1 / size;
1684
1902
 
1685
- if (this.camera.isOrthographicCamera) {
1903
+ if (this.camera.type === 'OrthographicCamera') {
1686
1904
  //camera zoom
1687
1905
  this.camera.zoom = this._zoomState;
1688
1906
  this.camera.zoom *= size; //check min and max zoom
@@ -1720,7 +1938,9 @@ class ArcballControls extends EventDispatcher {
1720
1938
 
1721
1939
  this.setTransformationMatrices(this._m4_1, this._m4_2);
1722
1940
  return _transformation;
1723
- } else if (this.camera.isPerspectiveCamera) {
1941
+ }
1942
+
1943
+ if (this.camera.type === 'PerspectiveCamera') {
1724
1944
  this._v3_1.setFromMatrixPosition(this._cameraMatrixState);
1725
1945
 
1726
1946
  this._v3_2.setFromMatrixPosition(this._gizmoMatrixState); //move camera
@@ -1773,12 +1993,32 @@ class ArcballControls extends EventDispatcher {
1773
1993
  });
1774
1994
 
1775
1995
  _defineProperty(this, "setFov", value => {
1776
- if (this.camera.isPerspectiveCamera) {
1996
+ var _this$camera13;
1997
+
1998
+ if (((_this$camera13 = this.camera) === null || _this$camera13 === void 0 ? void 0 : _this$camera13.type) === 'PerspectiveCamera') {
1777
1999
  this.camera.fov = MathUtils.clamp(value, this.minFov, this.maxFov);
1778
2000
  this.camera.updateProjectionMatrix();
1779
2001
  }
1780
2002
  });
1781
2003
 
2004
+ _defineProperty(this, "setTarget", (x, y, z) => {
2005
+ if (this.camera) {
2006
+ this.target.set(x, y, z);
2007
+
2008
+ this._gizmos.position.set(x, y, z); //for correct radius calculation
2009
+
2010
+
2011
+ const tbRadius = this.calculateTbRadius(this.camera);
2012
+
2013
+ if (tbRadius !== undefined) {
2014
+ this._tbRadius = tbRadius;
2015
+ }
2016
+
2017
+ this.makeGizmos(this.target, this._tbRadius);
2018
+ this.camera.lookAt(this.target);
2019
+ }
2020
+ });
2021
+
1782
2022
  _defineProperty(this, "zRotate", (point, angle) => {
1783
2023
  this._rotationMatrix.makeRotationAxis(this._rotationAxis, angle);
1784
2024
 
@@ -1805,6 +2045,7 @@ class ArcballControls extends EventDispatcher {
1805
2045
  });
1806
2046
 
1807
2047
  _defineProperty(this, "unprojectOnObj", (cursor, camera) => {
2048
+ if (!this.scene) return null;
1808
2049
  const raycaster = new Raycaster();
1809
2050
  raycaster.near = camera.near;
1810
2051
  raycaster.far = camera.far;
@@ -1812,7 +2053,7 @@ class ArcballControls extends EventDispatcher {
1812
2053
  const intersect = raycaster.intersectObjects(this.scene.children, true);
1813
2054
 
1814
2055
  for (let i = 0; i < intersect.length; i++) {
1815
- if (intersect[i].object.uuid != this._gizmos.uuid && intersect[i].face != null) {
2056
+ if (intersect[i].object.uuid != this._gizmos.uuid && intersect[i].face) {
1816
2057
  return intersect[i].point.clone();
1817
2058
  }
1818
2059
  }
@@ -1839,7 +2080,9 @@ class ArcballControls extends EventDispatcher {
1839
2080
  }
1840
2081
 
1841
2082
  return this._v3_1;
1842
- } else if (camera.type == 'PerspectiveCamera') {
2083
+ }
2084
+
2085
+ if (camera.type == 'PerspectiveCamera') {
1843
2086
  //unproject cursor on the near plane
1844
2087
  this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas));
1845
2088
 
@@ -1934,7 +2177,9 @@ class ArcballControls extends EventDispatcher {
1934
2177
  this._v3_1.set(this._v2_1.x, this._v2_1.y, 0);
1935
2178
 
1936
2179
  return this._v3_1.clone();
1937
- } else if (camera.type == 'PerspectiveCamera') {
2180
+ }
2181
+
2182
+ if (camera.type == 'PerspectiveCamera') {
1938
2183
  this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas)); //unproject cursor on the near plane
1939
2184
 
1940
2185
 
@@ -1989,17 +2234,20 @@ class ArcballControls extends EventDispatcher {
1989
2234
  });
1990
2235
 
1991
2236
  _defineProperty(this, "updateMatrixState", () => {
1992
- //update camera and gizmos state
2237
+ if (!this.camera) return; //update camera and gizmos state
2238
+
1993
2239
  this._cameraMatrixState.copy(this.camera.matrix);
1994
2240
 
1995
2241
  this._gizmoMatrixState.copy(this._gizmos.matrix);
1996
2242
 
1997
- if (this.camera.isOrthographicCamera) {
2243
+ if (this.camera.type === 'OrthographicCamera') {
1998
2244
  this._cameraProjectionState.copy(this.camera.projectionMatrix);
1999
2245
 
2000
2246
  this.camera.updateProjectionMatrix();
2001
2247
  this._zoomState = this.camera.zoom;
2002
- } else if (this.camera.isPerspectiveCamera) {
2248
+ }
2249
+
2250
+ if (this.camera.type === 'PerspectiveCamera') {
2003
2251
  this._fovState = this.camera.fov;
2004
2252
  }
2005
2253
  });
@@ -2015,24 +2263,32 @@ class ArcballControls extends EventDispatcher {
2015
2263
  _defineProperty(this, "update", () => {
2016
2264
  const EPS = 0.000001; // Update target and gizmos state
2017
2265
 
2018
- if (!this.target.equals(this._currentTarget)) {
2266
+ if (!this.target.equals(this._currentTarget) && this.camera) {
2019
2267
  this._gizmos.position.set(this.target.x, this.target.y, this.target.z); //for correct radius calculation
2020
2268
 
2021
2269
 
2022
- this._tbRadius = this.calculateTbRadius(this.camera);
2270
+ const tbRadius = this.calculateTbRadius(this.camera);
2271
+
2272
+ if (tbRadius !== undefined) {
2273
+ this._tbRadius = tbRadius;
2274
+ }
2275
+
2023
2276
  this.makeGizmos(this.target, this._tbRadius);
2024
2277
 
2025
2278
  this._currentTarget.copy(this.target);
2026
- } //check min/max parameters
2279
+ }
2027
2280
 
2281
+ if (!this.camera) return; //check min/max parameters
2028
2282
 
2029
- if (this.camera.isOrthographicCamera) {
2283
+ if (this.camera.type === 'OrthographicCamera') {
2030
2284
  //check zoom
2031
2285
  if (this.camera.zoom > this.maxZoom || this.camera.zoom < this.minZoom) {
2032
2286
  const newZoom = MathUtils.clamp(this.camera.zoom, this.minZoom, this.maxZoom);
2033
2287
  this.applyTransformMatrix(this.applyScale(newZoom / this.camera.zoom, this._gizmos.position, true));
2034
2288
  }
2035
- } else if (this.camera.isPerspectiveCamera) {
2289
+ }
2290
+
2291
+ if (this.camera.type === 'PerspectiveCamera') {
2036
2292
  //check distance
2037
2293
  const distance = this.camera.position.distanceTo(this._gizmos.position);
2038
2294
 
@@ -2049,17 +2305,23 @@ class ArcballControls extends EventDispatcher {
2049
2305
  }
2050
2306
 
2051
2307
  const oldRadius = this._tbRadius;
2052
- this._tbRadius = this.calculateTbRadius(this.camera);
2308
+ const tbRadius = this.calculateTbRadius(this.camera);
2309
+
2310
+ if (tbRadius !== undefined) {
2311
+ this._tbRadius = tbRadius;
2312
+ }
2053
2313
 
2054
2314
  if (oldRadius < this._tbRadius - EPS || oldRadius > this._tbRadius + EPS) {
2055
2315
  const scale = (this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z) / 3;
2056
- const newRadius = this._tbRadius / scale;
2316
+ const newRadius = this._tbRadius / scale; // @ts-expect-error
2317
+
2057
2318
  const curve = new EllipseCurve(0, 0, newRadius, newRadius);
2058
2319
  const points = curve.getPoints(this._curvePts);
2059
2320
  const curveGeometry = new BufferGeometry().setFromPoints(points);
2060
2321
 
2061
2322
  for (const gizmo in this._gizmos.children) {
2062
- this._gizmos.children[gizmo].geometry = curveGeometry;
2323
+ const child = this._gizmos.children[gizmo];
2324
+ child.geometry = curveGeometry;
2063
2325
  }
2064
2326
  }
2065
2327
  }
@@ -2070,7 +2332,7 @@ class ArcballControls extends EventDispatcher {
2070
2332
  _defineProperty(this, "setStateFromJSON", json => {
2071
2333
  const state = JSON.parse(json);
2072
2334
 
2073
- if (state.arcballState != undefined) {
2335
+ if (state.arcballState && this.camera) {
2074
2336
  this._cameraMatrixState.fromArray(state.arcballState.cameraMatrix.elements);
2075
2337
 
2076
2338
  this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);
@@ -2080,7 +2342,7 @@ class ArcballControls extends EventDispatcher {
2080
2342
  this.camera.far = state.arcballState.cameraFar;
2081
2343
  this.camera.zoom = state.arcballState.cameraZoom;
2082
2344
 
2083
- if (this.camera.isPerspectiveCamera) {
2345
+ if (this.camera.type === 'PerspectiveCamera') {
2084
2346
  this.camera.fov = state.arcballState.cameraFov;
2085
2347
  }
2086
2348
 
@@ -2093,7 +2355,12 @@ class ArcballControls extends EventDispatcher {
2093
2355
 
2094
2356
  this._gizmos.updateMatrix();
2095
2357
 
2096
- this._tbRadius = this.calculateTbRadius(this.camera);
2358
+ const tbRadius = this.calculateTbRadius(this.camera);
2359
+
2360
+ if (tbRadius !== undefined) {
2361
+ this._tbRadius = tbRadius;
2362
+ }
2363
+
2097
2364
  const gizmoTmp = new Matrix4().copy(this._gizmoMatrixState0);
2098
2365
  this.makeGizmos(this._gizmos.position, this._tbRadius);
2099
2366
 
@@ -2106,6 +2373,7 @@ class ArcballControls extends EventDispatcher {
2106
2373
  });
2107
2374
 
2108
2375
  this.camera = null;
2376
+ this.domElement = _domElement;
2109
2377
  this.scene = scene;
2110
2378
  this.mouseActions = [];
2111
2379
  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 +2431,6 @@ class ArcballControls extends EventDispatcher {
2163
2431
  this._downValid = true;
2164
2432
  this._nclicks = 0;
2165
2433
  this._downEvents = [];
2166
- this._downStart = 0; //pointerDown time
2167
-
2168
2434
  this._clickStart = 0; //first click time
2169
2435
 
2170
2436
  this._maxDownTime = 250;
@@ -2224,7 +2490,6 @@ class ArcballControls extends EventDispatcher {
2224
2490
  this.enablePan = true;
2225
2491
  this.enableRotate = true;
2226
2492
  this.enableZoom = true;
2227
- this.enableGizmos = true;
2228
2493
  this.minDistance = 0;
2229
2494
  this.maxDistance = Infinity;
2230
2495
  this.minZoom = 0;
@@ -2237,14 +2502,14 @@ class ArcballControls extends EventDispatcher {
2237
2502
  this._state = STATE.IDLE;
2238
2503
  this.setCamera(_camera);
2239
2504
 
2240
- if (this.scene != null) {
2505
+ if (this.scene) {
2241
2506
  this.scene.add(this._gizmos);
2242
- } // connect events
2243
-
2507
+ }
2244
2508
 
2245
- if (_domElement !== undefined) this.connect(_domElement);
2246
2509
  this._devPxRatio = window.devicePixelRatio;
2247
2510
  this.initializeMouseActions();
2511
+ if (this.domElement) this.connect(this.domElement);
2512
+ window.addEventListener('resize', this.onWindowResize);
2248
2513
  } //listeners
2249
2514
 
2250
2515
 
@@ -2253,7 +2518,7 @@ class ArcballControls extends EventDispatcher {
2253
2518
  * @param {Object} transformation Object containing matrices to apply to camera and gizmos
2254
2519
  */
2255
2520
  applyTransformMatrix(transformation) {
2256
- if (transformation.camera != null) {
2521
+ if (transformation !== null && transformation !== void 0 && transformation.camera && this.camera) {
2257
2522
  this._m4_1.copy(this._cameraMatrixState).premultiply(transformation.camera);
2258
2523
 
2259
2524
  this._m4_1.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);
@@ -2265,7 +2530,7 @@ class ArcballControls extends EventDispatcher {
2265
2530
  }
2266
2531
  }
2267
2532
 
2268
- if (transformation.gizmos != null) {
2533
+ if (transformation !== null && transformation !== void 0 && transformation.gizmos) {
2269
2534
  this._m4_1.copy(this._gizmoMatrixState).premultiply(transformation.gizmos);
2270
2535
 
2271
2536
  this._m4_1.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);
@@ -2273,8 +2538,12 @@ class ArcballControls extends EventDispatcher {
2273
2538
  this._gizmos.updateMatrix();
2274
2539
  }
2275
2540
 
2276
- if (this._state == STATE.SCALE || this._state == STATE.FOCUS || this._state == STATE.ANIMATION_FOCUS) {
2277
- this._tbRadius = this.calculateTbRadius(this.camera);
2541
+ if ((this._state == STATE.SCALE || this._state == STATE.FOCUS || this._state == STATE.ANIMATION_FOCUS) && this.camera) {
2542
+ const tbRadius = this.calculateTbRadius(this.camera);
2543
+
2544
+ if (tbRadius !== undefined) {
2545
+ this._tbRadius = tbRadius;
2546
+ }
2278
2547
 
2279
2548
  if (this.adjustNearFar) {
2280
2549
  const cameraDistance = this.camera.position.distanceTo(this._gizmos.position);
@@ -2340,8 +2609,8 @@ class ArcballControls extends EventDispatcher {
2340
2609
  * @param {Matrix4} gizmos Transformation to be applied to gizmos
2341
2610
  */
2342
2611
  setTransformationMatrices(camera = null, gizmos = null) {
2343
- if (camera != null) {
2344
- if (_transformation.camera != null) {
2612
+ if (camera) {
2613
+ if (_transformation.camera) {
2345
2614
  _transformation.camera.copy(camera);
2346
2615
  } else {
2347
2616
  _transformation.camera = camera.clone();
@@ -2350,8 +2619,8 @@ class ArcballControls extends EventDispatcher {
2350
2619
  _transformation.camera = null;
2351
2620
  }
2352
2621
 
2353
- if (gizmos != null) {
2354
- if (_transformation.gizmos != null) {
2622
+ if (gizmos) {
2623
+ if (_transformation.gizmos) {
2355
2624
  _transformation.gizmos.copy(gizmos);
2356
2625
  } else {
2357
2626
  _transformation.gizmos = gizmos.clone();