@2112-lab/central-plant 0.3.50 → 0.3.51

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.
@@ -2513,6 +2513,11 @@ var transformControls = /*#__PURE__*/function (_THREE$Object3D) {
2513
2513
  _this.showY = true;
2514
2514
  _this.showZ = true;
2515
2515
 
2516
+ // Axis interactivity (pickers). Visual handles can remain visible when false.
2517
+ _this.pickX = true;
2518
+ _this.pickY = true;
2519
+ _this.pickZ = true;
2520
+
2516
2521
  // Click timing for interaction delays
2517
2522
  _this.clickDelay = null;
2518
2523
  _this.lastInteractionTime = 0;
@@ -2666,6 +2671,9 @@ var transformControls = /*#__PURE__*/function (_THREE$Object3D) {
2666
2671
  this.lastInteractionTime = currentTime;
2667
2672
  }
2668
2673
  if (this.axis !== null) {
2674
+ if (!this._isAxisPickable(this.axis)) {
2675
+ return;
2676
+ }
2669
2677
  _raycaster.setFromCamera(pointer, this.camera);
2670
2678
  var planeIntersect = this._intersectObjectWithRay(this._plane, _raycaster, true);
2671
2679
  if (planeIntersect) {
@@ -2936,10 +2944,19 @@ var transformControls = /*#__PURE__*/function (_THREE$Object3D) {
2936
2944
  value: function getMode() {
2937
2945
  return this.mode;
2938
2946
  }
2947
+ }, {
2948
+ key: "_isAxisPickable",
2949
+ value: function _isAxisPickable(axisName) {
2950
+ if (!axisName) return false;
2951
+ if (axisName.indexOf('X') !== -1) return this.pickX !== false;
2952
+ if (axisName.indexOf('Y') !== -1) return this.pickY !== false;
2953
+ if (axisName.indexOf('Z') !== -1) return this.pickZ !== false;
2954
+ return true;
2955
+ }
2939
2956
  }, {
2940
2957
  key: "setMode",
2941
2958
  value: function setMode(mode) {
2942
- if (mode !== 'translate') {
2959
+ if (mode !== 'translate' && mode !== 'rotate') {
2943
2960
  console.warn("transformControls: ".concat(mode, " mode is disabled. Locking to translate."));
2944
2961
  mode = 'translate';
2945
2962
  }
@@ -3180,6 +3197,7 @@ var SimpleTransformGizmo = /*#__PURE__*/function (_THREE$Object3D2) {
3180
3197
  }, {
3181
3198
  key: "updateGizmoState",
3182
3199
  value: function updateGizmoState(controls) {
3200
+ var _this$gizmo$controls$, _this$gizmo$controls$2, _this$picker$controls, _this$picker$controls2;
3183
3201
  // Show only the gizmo for current mode
3184
3202
  this.gizmo['translate'].visible = controls.mode === 'translate';
3185
3203
  this.gizmo['rotate'].visible = controls.mode === 'rotate';
@@ -3197,43 +3215,62 @@ var SimpleTransformGizmo = /*#__PURE__*/function (_THREE$Object3D2) {
3197
3215
  // Force maximum render priority for all gizmo objects
3198
3216
  this._forceMaxRenderOrder();
3199
3217
 
3200
- // Update all handles for the current mode
3201
- var handles = [].concat(_toConsumableArray(this.picker[controls.mode].children), _toConsumableArray(this.gizmo[controls.mode].children));
3218
+ // Scale based on camera distance
3219
+ var factor;
3220
+ if (controls.camera.isOrthographicCamera) {
3221
+ factor = (controls.camera.top - controls.camera.bottom) / controls.camera.zoom;
3222
+ } else {
3223
+ factor = controls.worldPosition.distanceTo(controls.cameraPosition) * Math.min(1.9 * Math.tan(Math.PI * controls.camera.fov / 360) / controls.camera.zoom, 7);
3224
+ }
3225
+ this.scale.setScalar(factor * controls.size / 4);
3226
+ this._updateModeHandles(controls, (_this$gizmo$controls$ = (_this$gizmo$controls$2 = this.gizmo[controls.mode]) === null || _this$gizmo$controls$2 === void 0 ? void 0 : _this$gizmo$controls$2.children) !== null && _this$gizmo$controls$ !== void 0 ? _this$gizmo$controls$ : [], false);
3227
+ this._updateModeHandles(controls, (_this$picker$controls = (_this$picker$controls2 = this.picker[controls.mode]) === null || _this$picker$controls2 === void 0 ? void 0 : _this$picker$controls2.children) !== null && _this$picker$controls !== void 0 ? _this$picker$controls : [], true);
3228
+ }
3229
+ }, {
3230
+ key: "_isAxisShown",
3231
+ value: function _isAxisShown(controls, axisName) {
3232
+ if (axisName.indexOf('X') !== -1 && !controls.showX) return false;
3233
+ if (axisName.indexOf('Y') !== -1 && !controls.showY) return false;
3234
+ if (axisName.indexOf('Z') !== -1 && !controls.showZ) return false;
3235
+ return true;
3236
+ }
3237
+ }, {
3238
+ key: "_isAxisPickable",
3239
+ value: function _isAxisPickable(controls, axisName) {
3240
+ if (axisName.indexOf('X') !== -1) return controls.pickX !== false;
3241
+ if (axisName.indexOf('Y') !== -1) return controls.pickY !== false;
3242
+ if (axisName.indexOf('Z') !== -1) return controls.pickZ !== false;
3243
+ return true;
3244
+ }
3245
+ }, {
3246
+ key: "_updateModeHandles",
3247
+ value: function _updateModeHandles(controls, handles, isPicker) {
3202
3248
  var _iterator = _createForOfIteratorHelper(handles),
3203
3249
  _step;
3204
3250
  try {
3205
3251
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
3252
+ var _handle$material$_ori;
3206
3253
  var handle = _step.value;
3207
- handle.visible = true;
3208
-
3209
- // Scale based on camera distance
3210
- var factor = void 0;
3211
- if (controls.camera.isOrthographicCamera) {
3212
- factor = (controls.camera.top - controls.camera.bottom) / controls.camera.zoom;
3213
- } else {
3214
- factor = controls.worldPosition.distanceTo(controls.cameraPosition) * Math.min(1.9 * Math.tan(Math.PI * controls.camera.fov / 360) / controls.camera.zoom, 7);
3254
+ var axisName = handle.name;
3255
+ var shown = this._isAxisShown(controls, axisName);
3256
+ var pickable = this._isAxisPickable(controls, axisName);
3257
+ if (isPicker) {
3258
+ handle.visible = shown && pickable;
3259
+ continue;
3215
3260
  }
3216
-
3217
- // Apply scale to the entire gizmo, not individual handles
3218
- this.scale.setScalar(factor * controls.size / 4);
3219
-
3220
- // Apply axis visibility constraints
3221
- if (handle.name.indexOf('X') !== -1 && !controls.showX) handle.visible = false;
3222
- if (handle.name.indexOf('Y') !== -1 && !controls.showY) handle.visible = false;
3223
- if (handle.name.indexOf('Z') !== -1 && !controls.showZ) handle.visible = false;
3224
-
3225
- // Highlight selected axis
3226
- if (handle.material) {
3227
- handle.material._originalColor = handle.material._originalColor || handle.material.color.clone();
3228
- handle.material._originalOpacity = handle.material._originalOpacity || handle.material.opacity;
3261
+ handle.visible = shown;
3262
+ if (!handle.material) continue;
3263
+ handle.material._originalColor = handle.material._originalColor || handle.material.color.clone();
3264
+ handle.material._originalOpacity = (_handle$material$_ori = handle.material._originalOpacity) !== null && _handle$material$_ori !== void 0 ? _handle$material$_ori : handle.material.opacity;
3265
+ if (shown && pickable && controls.enabled && controls.axis === axisName) {
3266
+ handle.material.color.setHex(0xffff00);
3267
+ handle.material.opacity = 1.0;
3268
+ } else if (shown && !pickable) {
3269
+ handle.material.color.copy(handle.material._originalColor);
3270
+ handle.material.opacity = SimpleTransformGizmo.DISABLED_AXIS_OPACITY;
3271
+ } else {
3229
3272
  handle.material.color.copy(handle.material._originalColor);
3230
3273
  handle.material.opacity = handle.material._originalOpacity;
3231
- if (controls.enabled && controls.axis) {
3232
- if (handle.name === controls.axis) {
3233
- handle.material.color.setHex(0xffff00);
3234
- handle.material.opacity = 1.0;
3235
- }
3236
- }
3237
3274
  }
3238
3275
  }
3239
3276
  } catch (err) {
@@ -3283,6 +3320,7 @@ var SimpleTransformGizmo = /*#__PURE__*/function (_THREE$Object3D2) {
3283
3320
  * Optimized plane for transformation interactions
3284
3321
  * Simplified geometry and material for better performance
3285
3322
  */
3323
+ _defineProperty(SimpleTransformGizmo, "DISABLED_AXIS_OPACITY", 0.3);
3286
3324
  var SimpleTransformPlane = /*#__PURE__*/function (_THREE$Mesh) {
3287
3325
  function SimpleTransformPlane() {
3288
3326
  var _this4;
@@ -4171,6 +4209,7 @@ var TransformControlsManager = /*#__PURE__*/function () {
4171
4209
  this.eventHandlers.transformStart = function () {
4172
4210
  console.log("transformControls transformStart");
4173
4211
  _this2.transformState.isTransforming = true;
4212
+ _this2._suppressNextClick = true;
4174
4213
 
4175
4214
  // Store initial transforms for all selected objects
4176
4215
  if (_this2.selectedObjects.length > 0) {
@@ -4374,6 +4413,10 @@ var TransformControlsManager = /*#__PURE__*/function () {
4374
4413
  // Translate mode
4375
4414
  _this3.setMode('translate');
4376
4415
  break;
4416
+ case 'KeyR':
4417
+ // Rotate mode
4418
+ _this3.setMode('rotate');
4419
+ break;
4377
4420
  }
4378
4421
  };
4379
4422
  window.addEventListener('keydown', this.eventHandlers.keydown);
@@ -4558,8 +4601,16 @@ var TransformControlsManager = /*#__PURE__*/function () {
4558
4601
  }
4559
4602
 
4560
4603
  // Left-click: select for transform only (bounding box, no tooltip)
4604
+ var isComponent = objectType === 'component';
4605
+ var isSameSingleSelection = isComponent && _this4.selectedObjects.length === 1 && _this4.selectedObjects[0] === targetObject;
4606
+ if (isSameSingleSelection) {
4607
+ _this4.toggleTransformMode();
4608
+ return;
4609
+ }
4561
4610
  if (!_this4.selectedObjects.includes(targetObject)) {
4562
4611
  _this4.deselectObject();
4612
+ } else if (!isComponent) {
4613
+ _this4.setMode('translate');
4563
4614
  }
4564
4615
  _this4.selectObjectForTransformOnly(targetObject);
4565
4616
  };
@@ -5231,6 +5282,7 @@ var TransformControlsManager = /*#__PURE__*/function () {
5231
5282
  this._hideTransformControls();
5232
5283
  console.log("\uD83D\uDD12 Transform controls hidden after deselection");
5233
5284
  }
5285
+ this.setMode('translate');
5234
5286
 
5235
5287
  // Execute callback
5236
5288
  if (this.callbacks.onObjectSelect) {
@@ -5393,14 +5445,14 @@ var TransformControlsManager = /*#__PURE__*/function () {
5393
5445
  }, {
5394
5446
  key: "setMode",
5395
5447
  value: function setMode(mode) {
5396
- // Only allow translate mode - lock rotation and scale controls
5397
- if (mode !== 'translate') {
5448
+ if (mode !== 'translate' && mode !== 'rotate') {
5398
5449
  console.warn("\u26A0\uFE0F Transform mode ".concat(mode, " is disabled. Locking to translate."));
5399
5450
  mode = 'translate';
5400
5451
  }
5401
5452
  var previousMode = this.currentMode;
5402
5453
  this.currentMode = mode;
5403
5454
  this.transformControls.setMode(mode);
5455
+ this._updateAxisVisibilityForMode(mode);
5404
5456
 
5405
5457
  // Execute callback
5406
5458
  if (this.callbacks.onModeChange) {
@@ -5409,6 +5461,47 @@ var TransformControlsManager = /*#__PURE__*/function () {
5409
5461
  console.log("\uD83D\uDD27 Transform mode changed: ".concat(previousMode, " \u2192 ").concat(mode));
5410
5462
  }
5411
5463
 
5464
+ /**
5465
+ * Update gizmo axis visibility based on transform mode.
5466
+ * Rotation shows all rings but only Z-axis is interactive.
5467
+ * @param {'translate' | 'rotate'} mode
5468
+ * @private
5469
+ */
5470
+ }, {
5471
+ key: "_updateAxisVisibilityForMode",
5472
+ value: function _updateAxisVisibilityForMode(mode) {
5473
+ if (!this.transformControls) return;
5474
+ if (mode === 'rotate') {
5475
+ this.transformControls.showX = true;
5476
+ this.transformControls.showY = true;
5477
+ this.transformControls.showZ = true;
5478
+ this.transformControls.pickX = false;
5479
+ this.transformControls.pickY = false;
5480
+ this.transformControls.pickZ = true;
5481
+ return;
5482
+ }
5483
+ this.transformControls.showX = this.config.showX;
5484
+ this.transformControls.showY = this.config.showY;
5485
+ this.transformControls.showZ = this.config.showZ;
5486
+ this.transformControls.pickX = true;
5487
+ this.transformControls.pickY = true;
5488
+ this.transformControls.pickZ = true;
5489
+ }
5490
+
5491
+ /**
5492
+ * Toggle between translate and rotate transform modes
5493
+ */
5494
+ }, {
5495
+ key: "toggleTransformMode",
5496
+ value: function toggleTransformMode() {
5497
+ var _this$transformContro;
5498
+ var newMode = this.currentMode === 'translate' ? 'rotate' : 'translate';
5499
+ this.setMode(newMode);
5500
+ if ((_this$transformContro = this.transformControls) !== null && _this$transformContro !== void 0 && _this$transformContro.object) {
5501
+ this.transformControls.updateMatrixWorld(true);
5502
+ }
5503
+ }
5504
+
5412
5505
  /**
5413
5506
  * Set the transformation space
5414
5507
  * @param {'world' | 'local'} space - The transformation space
@@ -5847,12 +5940,10 @@ var TransformControlsManager = /*#__PURE__*/function () {
5847
5940
  obj.position.copy(newWorldPos);
5848
5941
  obj.updateMatrix();
5849
5942
  } else if (_this8.currentMode === 'rotate') {
5850
- // Calculate offset from centroid
5943
+ // Calculate offset from centroid (Z-axis rotation only)
5851
5944
  var offsetFromCentroid = originalWorldPos.clone().sub(originalCentroid);
5852
-
5853
- // Rotate the offset vector
5854
5945
  var rotatedOffset = offsetFromCentroid.clone();
5855
- var rotationQuat = new THREE__namespace.Quaternion().setFromEuler(rotationDelta);
5946
+ var rotationQuat = new THREE__namespace.Quaternion().setFromAxisAngle(new THREE__namespace.Vector3(0, 0, 1), rotationDelta.z);
5856
5947
  rotatedOffset.applyQuaternion(rotationQuat);
5857
5948
 
5858
5949
  // Calculate new world position
@@ -5868,9 +5959,9 @@ var TransformControlsManager = /*#__PURE__*/function () {
5868
5959
  }
5869
5960
  obj.position.copy(_newWorldPos);
5870
5961
 
5871
- // Apply rotation to the object itself
5872
- obj.rotation.x = originalRot.x + rotationDelta.x;
5873
- obj.rotation.y = originalRot.y + rotationDelta.y;
5962
+ // Apply Z-axis rotation only
5963
+ obj.rotation.x = originalRot.x;
5964
+ obj.rotation.y = originalRot.y;
5874
5965
  obj.rotation.z = originalRot.z + rotationDelta.z;
5875
5966
  obj.updateMatrix();
5876
5967
  }
@@ -5900,7 +5991,15 @@ var TransformControlsManager = /*#__PURE__*/function () {
5900
5991
  return _context2.a(2);
5901
5992
  case 1:
5902
5993
  console.log("\uD83D\uDD27 Applying multi-selection transform to ".concat(this.selectedObjects.length, " objects"));
5903
-
5994
+ if (!(this.currentMode === 'rotate')) {
5995
+ _context2.n = 3;
5996
+ break;
5997
+ }
5998
+ _context2.n = 2;
5999
+ return this._applyMultiSelectionRotation();
6000
+ case 2:
6001
+ return _context2.a(2);
6002
+ case 3:
5904
6003
  // Calculate transformation deltas
5905
6004
  _this$_calculateTrans = this._calculateTransformDeltas(), deltaX = _this$_calculateTrans.deltaX, deltaY = _this$_calculateTrans.deltaY, deltaZ = _this$_calculateTrans.deltaZ, threshold = _this$_calculateTrans.threshold;
5906
6005
  console.log('🔧 Transform delta:', {
@@ -5910,12 +6009,12 @@ var TransformControlsManager = /*#__PURE__*/function () {
5910
6009
  });
5911
6010
 
5912
6011
  // Only process if there's a meaningful translation
5913
- if (!(this.currentMode !== 'translate' || Math.abs(deltaX) < threshold && Math.abs(deltaY) < threshold && Math.abs(deltaZ) < threshold)) {
5914
- _context2.n = 2;
6012
+ if (!(Math.abs(deltaX) < threshold && Math.abs(deltaY) < threshold && Math.abs(deltaZ) < threshold)) {
6013
+ _context2.n = 4;
5915
6014
  break;
5916
6015
  }
5917
6016
  return _context2.a(2);
5918
- case 2:
6017
+ case 4:
5919
6018
  // Reset all objects to original positions
5920
6019
  this._resetObjectsToOriginalPositions();
5921
6020
 
@@ -5929,20 +6028,20 @@ var TransformControlsManager = /*#__PURE__*/function () {
5929
6028
  components = this.selectedObjects.filter(function (obj) {
5930
6029
  return !isSegment(obj) && !isGateway(obj);
5931
6030
  }); // Translate each object type
5932
- _context2.n = 3;
6031
+ _context2.n = 5;
5933
6032
  return this._translateSegments(segments, deltaX, deltaY, deltaZ, threshold);
5934
- case 3:
5935
- _context2.n = 4;
6033
+ case 5:
6034
+ _context2.n = 6;
5936
6035
  return this._translateGateways(gateways, deltaX, deltaY, deltaZ, threshold);
5937
- case 4:
5938
- _context2.n = 5;
6036
+ case 6:
6037
+ _context2.n = 7;
5939
6038
  return this._translateComponents(components, deltaX, deltaY, deltaZ, threshold);
5940
- case 5:
6039
+ case 7:
5941
6040
  console.log("\u2705 All ".concat(this.selectedObjects.length, " objects translated"));
5942
6041
 
5943
6042
  // Cleanup and refresh
5944
6043
  this._finalizeMultiSelectionTransform();
5945
- case 6:
6044
+ case 8:
5946
6045
  return _context2.a(2);
5947
6046
  }
5948
6047
  }, _callee2, this);
@@ -5952,6 +6051,123 @@ var TransformControlsManager = /*#__PURE__*/function () {
5952
6051
  }
5953
6052
  return applyMultiSelectionTransform;
5954
6053
  }()
6054
+ /**
6055
+ * Apply rotation from multi-selection group to selected components via API
6056
+ * @private
6057
+ */
6058
+ )
6059
+ }, {
6060
+ key: "_applyMultiSelectionRotation",
6061
+ value: (function () {
6062
+ var _applyMultiSelectionRotation2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
6063
+ var threshold, rotationDeltas, _iterator6, _step6, _obj2, originalRot, originalPos, _deltaRad, _i, _rotationDeltas, _obj$userData5, _obj$userData6, _obj$userData7, _this$centralPlant, _rotationDeltas$_i, obj, deltaRad, componentId, deltaDeg, snappedDeg, _t;
6064
+ return _regenerator().w(function (_context3) {
6065
+ while (1) switch (_context3.n) {
6066
+ case 0:
6067
+ threshold = 0.001;
6068
+ rotationDeltas = [];
6069
+ _iterator6 = _createForOfIteratorHelper(this.selectedObjects);
6070
+ _context3.p = 1;
6071
+ _iterator6.s();
6072
+ case 2:
6073
+ if ((_step6 = _iterator6.n()).done) {
6074
+ _context3.n = 6;
6075
+ break;
6076
+ }
6077
+ _obj2 = _step6.value;
6078
+ originalRot = _obj2.userData._multiSelectOriginalRotation;
6079
+ originalPos = _obj2.userData._multiSelectOriginalPosition;
6080
+ if (originalRot) {
6081
+ _context3.n = 3;
6082
+ break;
6083
+ }
6084
+ return _context3.a(3, 5);
6085
+ case 3:
6086
+ _deltaRad = _obj2.rotation.z - originalRot.z;
6087
+ if (!(Math.abs(_deltaRad) < threshold)) {
6088
+ _context3.n = 4;
6089
+ break;
6090
+ }
6091
+ return _context3.a(3, 5);
6092
+ case 4:
6093
+ rotationDeltas.push({
6094
+ obj: _obj2,
6095
+ originalPos: originalPos === null || originalPos === void 0 ? void 0 : originalPos.clone(),
6096
+ originalRot: originalRot.clone(),
6097
+ deltaRad: _deltaRad
6098
+ });
6099
+ case 5:
6100
+ _context3.n = 2;
6101
+ break;
6102
+ case 6:
6103
+ _context3.n = 8;
6104
+ break;
6105
+ case 7:
6106
+ _context3.p = 7;
6107
+ _t = _context3.v;
6108
+ _iterator6.e(_t);
6109
+ case 8:
6110
+ _context3.p = 8;
6111
+ _iterator6.f();
6112
+ return _context3.f(8);
6113
+ case 9:
6114
+ if (!(rotationDeltas.length === 0)) {
6115
+ _context3.n = 10;
6116
+ break;
6117
+ }
6118
+ return _context3.a(2);
6119
+ case 10:
6120
+ rotationDeltas.forEach(function (_ref2) {
6121
+ var obj = _ref2.obj,
6122
+ originalPos = _ref2.originalPos,
6123
+ originalRot = _ref2.originalRot;
6124
+ if (originalPos) {
6125
+ obj.position.copy(originalPos);
6126
+ }
6127
+ obj.rotation.copy(originalRot);
6128
+ obj.updateMatrixWorld(true);
6129
+ });
6130
+ _i = 0, _rotationDeltas = rotationDeltas;
6131
+ case 11:
6132
+ if (!(_i < _rotationDeltas.length)) {
6133
+ _context3.n = 15;
6134
+ break;
6135
+ }
6136
+ _rotationDeltas$_i = _rotationDeltas[_i], obj = _rotationDeltas$_i.obj, deltaRad = _rotationDeltas$_i.deltaRad;
6137
+ if (!(((_obj$userData5 = obj.userData) === null || _obj$userData5 === void 0 ? void 0 : _obj$userData5.objectType) !== 'component' || !((_obj$userData6 = obj.userData) !== null && _obj$userData6 !== void 0 && _obj$userData6.libraryId))) {
6138
+ _context3.n = 12;
6139
+ break;
6140
+ }
6141
+ return _context3.a(3, 14);
6142
+ case 12:
6143
+ componentId = obj.uuid || ((_obj$userData7 = obj.userData) === null || _obj$userData7 === void 0 ? void 0 : _obj$userData7.originalUuid);
6144
+ if (!(!componentId || !((_this$centralPlant = this.centralPlant) !== null && _this$centralPlant !== void 0 && _this$centralPlant.rotate))) {
6145
+ _context3.n = 13;
6146
+ break;
6147
+ }
6148
+ return _context3.a(3, 14);
6149
+ case 13:
6150
+ deltaDeg = THREE__namespace.MathUtils.radToDeg(deltaRad);
6151
+ snappedDeg = Math.round(deltaDeg / 90) * 90;
6152
+ if (Math.abs(snappedDeg) >= 90) {
6153
+ this.centralPlant.rotate(componentId, 'z', snappedDeg);
6154
+ }
6155
+ case 14:
6156
+ _i++;
6157
+ _context3.n = 11;
6158
+ break;
6159
+ case 15:
6160
+ this._finalizeMultiSelectionTransform();
6161
+ case 16:
6162
+ return _context3.a(2);
6163
+ }
6164
+ }, _callee3, this, [[1, 7, 8, 9]]);
6165
+ }));
6166
+ function _applyMultiSelectionRotation() {
6167
+ return _applyMultiSelectionRotation2.apply(this, arguments);
6168
+ }
6169
+ return _applyMultiSelectionRotation;
6170
+ }()
5955
6171
  /**
5956
6172
  * Calculate transformation deltas from multi-selection group
5957
6173
  * @returns {Object} Delta values and threshold
@@ -6007,17 +6223,17 @@ var TransformControlsManager = /*#__PURE__*/function () {
6007
6223
  }, {
6008
6224
  key: "_translateSegments",
6009
6225
  value: (function () {
6010
- var _translateSegments2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(segments, deltaX, deltaY, deltaZ, threshold) {
6226
+ var _translateSegments2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(segments, deltaX, deltaY, deltaZ, threshold) {
6011
6227
  var _this$sceneViewer, _this$sceneViewer2;
6012
- var transformOpsManager, useOptimizedPath, throttleDelay, AXIS_THROTTLE, OBJECT_DELAY, i, segment, axes, _i, _axes, _axes$_i, axis, delta;
6013
- return _regenerator().w(function (_context3) {
6014
- while (1) switch (_context3.n) {
6228
+ var transformOpsManager, useOptimizedPath, throttleDelay, AXIS_THROTTLE, OBJECT_DELAY, i, segment, axes, _i2, _axes, _axes$_i, axis, delta;
6229
+ return _regenerator().w(function (_context4) {
6230
+ while (1) switch (_context4.n) {
6015
6231
  case 0:
6016
6232
  if (!(segments.length === 0)) {
6017
- _context3.n = 1;
6233
+ _context4.n = 1;
6018
6234
  break;
6019
6235
  }
6020
- return _context3.a(2);
6236
+ return _context4.a(2);
6021
6237
  case 1:
6022
6238
  transformOpsManager = (_this$sceneViewer = this.sceneViewer) === null || _this$sceneViewer === void 0 ? void 0 : _this$sceneViewer.transformOperationsManager;
6023
6239
  useOptimizedPath = transformOpsManager != null;
@@ -6036,7 +6252,7 @@ var TransformControlsManager = /*#__PURE__*/function () {
6036
6252
  i = 0;
6037
6253
  case 2:
6038
6254
  if (!(i < segments.length)) {
6039
- _context3.n = 8;
6255
+ _context4.n = 8;
6040
6256
  break;
6041
6257
  }
6042
6258
  segment = segments[i];
@@ -6050,26 +6266,26 @@ var TransformControlsManager = /*#__PURE__*/function () {
6050
6266
  axis: 'z',
6051
6267
  delta: deltaZ
6052
6268
  }]; // Translate on each axis
6053
- _i = 0, _axes = axes;
6269
+ _i2 = 0, _axes = axes;
6054
6270
  case 3:
6055
- if (!(_i < _axes.length)) {
6056
- _context3.n = 6;
6271
+ if (!(_i2 < _axes.length)) {
6272
+ _context4.n = 6;
6057
6273
  break;
6058
6274
  }
6059
- _axes$_i = _axes[_i], axis = _axes$_i.axis, delta = _axes$_i.delta;
6275
+ _axes$_i = _axes[_i2], axis = _axes$_i.axis, delta = _axes$_i.delta;
6060
6276
  if (!(Math.abs(delta) > threshold)) {
6061
- _context3.n = 5;
6277
+ _context4.n = 5;
6062
6278
  break;
6063
6279
  }
6064
- _context3.n = 4;
6280
+ _context4.n = 4;
6065
6281
  return this._translateSegmentOnAxis(segment, axis, delta, useOptimizedPath, i);
6066
6282
  case 4:
6067
- segment = _context3.v;
6068
- _context3.n = 5;
6283
+ segment = _context4.v;
6284
+ _context4.n = 5;
6069
6285
  return throttleDelay(AXIS_THROTTLE);
6070
6286
  case 5:
6071
- _i++;
6072
- _context3.n = 3;
6287
+ _i2++;
6288
+ _context4.n = 3;
6073
6289
  break;
6074
6290
  case 6:
6075
6291
  // Update selected objects array with refreshed reference
@@ -6080,14 +6296,14 @@ var TransformControlsManager = /*#__PURE__*/function () {
6080
6296
  console.warn("\u26A0\uFE0F Segment reference became null (".concat(i + 1, "/").concat(segments.length, ")"));
6081
6297
  }
6082
6298
  if (!(i < segments.length - 1)) {
6083
- _context3.n = 7;
6299
+ _context4.n = 7;
6084
6300
  break;
6085
6301
  }
6086
- _context3.n = 7;
6302
+ _context4.n = 7;
6087
6303
  return throttleDelay(OBJECT_DELAY);
6088
6304
  case 7:
6089
6305
  i++;
6090
- _context3.n = 2;
6306
+ _context4.n = 2;
6091
6307
  break;
6092
6308
  case 8:
6093
6309
  // Batch update paths for optimized path only
@@ -6097,9 +6313,9 @@ var TransformControlsManager = /*#__PURE__*/function () {
6097
6313
  console.log('✅ Paths regenerated successfully');
6098
6314
  }
6099
6315
  case 9:
6100
- return _context3.a(2);
6316
+ return _context4.a(2);
6101
6317
  }
6102
- }, _callee3, this);
6318
+ }, _callee4, this);
6103
6319
  }));
6104
6320
  function _translateSegments(_x, _x2, _x3, _x4, _x5) {
6105
6321
  return _translateSegments2.apply(this, arguments);
@@ -6138,11 +6354,11 @@ var TransformControlsManager = /*#__PURE__*/function () {
6138
6354
  }, {
6139
6355
  key: "_translateSegmentOnAxis",
6140
6356
  value: (function () {
6141
- var _translateSegmentOnAxis2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(segment, axis, delta, useOptimizedPath, index) {
6357
+ var _translateSegmentOnAxis2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(segment, axis, delta, useOptimizedPath, index) {
6142
6358
  var _segment$userData3;
6143
6359
  var segmentId, success;
6144
- return _regenerator().w(function (_context4) {
6145
- while (1) switch (_context4.n) {
6360
+ return _regenerator().w(function (_context5) {
6361
+ while (1) switch (_context5.n) {
6146
6362
  case 0:
6147
6363
  segmentId = segment.uuid || ((_segment$userData3 = segment.userData) === null || _segment$userData3 === void 0 ? void 0 : _segment$userData3.originalUuid);
6148
6364
  if (useOptimizedPath) {
@@ -6155,9 +6371,9 @@ var TransformControlsManager = /*#__PURE__*/function () {
6155
6371
  }
6156
6372
 
6157
6373
  // Refresh segment reference after manualization
6158
- return _context4.a(2, this._refreshSegmentReference(segment));
6374
+ return _context5.a(2, this._refreshSegmentReference(segment));
6159
6375
  }
6160
- }, _callee4, this);
6376
+ }, _callee5, this);
6161
6377
  }));
6162
6378
  function _translateSegmentOnAxis(_x6, _x7, _x8, _x9, _x0) {
6163
6379
  return _translateSegmentOnAxis2.apply(this, arguments);
@@ -6173,8 +6389,8 @@ var TransformControlsManager = /*#__PURE__*/function () {
6173
6389
  key: "_updateSegmentReference",
6174
6390
  value: function _updateSegmentReference(oldSegment, newSegment, index) {
6175
6391
  var selectedIndex = this.selectedObjects.findIndex(function (obj) {
6176
- var _obj$userData5;
6177
- return obj.uuid === oldSegment.uuid || ((_obj$userData5 = obj.userData) === null || _obj$userData5 === void 0 ? void 0 : _obj$userData5.originalUuid) === oldSegment.uuid;
6392
+ var _obj$userData8;
6393
+ return obj.uuid === oldSegment.uuid || ((_obj$userData8 = obj.userData) === null || _obj$userData8 === void 0 ? void 0 : _obj$userData8.originalUuid) === oldSegment.uuid;
6178
6394
  });
6179
6395
  if (selectedIndex !== -1 && newSegment) {
6180
6396
  // Clear bounding box cache
@@ -6192,17 +6408,17 @@ var TransformControlsManager = /*#__PURE__*/function () {
6192
6408
  }, {
6193
6409
  key: "_translateGateways",
6194
6410
  value: (function () {
6195
- var _translateGateways2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(gateways, deltaX, deltaY, deltaZ, threshold) {
6411
+ var _translateGateways2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(gateways, deltaX, deltaY, deltaZ, threshold) {
6196
6412
  var _this9 = this;
6197
6413
  var throttleDelay, AXIS_THROTTLE, OBJECT_DELAY, i, _gateway$userData, gateway, gatewayId;
6198
- return _regenerator().w(function (_context5) {
6199
- while (1) switch (_context5.n) {
6414
+ return _regenerator().w(function (_context6) {
6415
+ while (1) switch (_context6.n) {
6200
6416
  case 0:
6201
6417
  if (!(gateways.length === 0)) {
6202
- _context5.n = 1;
6418
+ _context6.n = 1;
6203
6419
  break;
6204
6420
  }
6205
- return _context5.a(2);
6421
+ return _context6.a(2);
6206
6422
  case 1:
6207
6423
  throttleDelay = function throttleDelay(ms) {
6208
6424
  return new Promise(function (resolve) {
@@ -6214,31 +6430,31 @@ var TransformControlsManager = /*#__PURE__*/function () {
6214
6430
  i = 0;
6215
6431
  case 2:
6216
6432
  if (!(i < gateways.length)) {
6217
- _context5.n = 5;
6433
+ _context6.n = 5;
6218
6434
  break;
6219
6435
  }
6220
6436
  gateway = gateways[i];
6221
6437
  gatewayId = gateway.uuid || ((_gateway$userData = gateway.userData) === null || _gateway$userData === void 0 ? void 0 : _gateway$userData.originalUuid);
6222
- _context5.n = 3;
6438
+ _context6.n = 3;
6223
6439
  return this._translateObjectOnAxes(gatewayId, deltaX, deltaY, deltaZ, threshold, throttleDelay, AXIS_THROTTLE, function (id, axis, delta) {
6224
6440
  return _this9.centralPlant.translateGateway(id, axis, delta);
6225
6441
  });
6226
6442
  case 3:
6227
6443
  console.log("\uD83D\uDEAA Gateway ".concat(gateway.name, " translated (").concat(i + 1, "/").concat(gateways.length, ")"));
6228
6444
  if (!(i < gateways.length - 1)) {
6229
- _context5.n = 4;
6445
+ _context6.n = 4;
6230
6446
  break;
6231
6447
  }
6232
- _context5.n = 4;
6448
+ _context6.n = 4;
6233
6449
  return throttleDelay(OBJECT_DELAY);
6234
6450
  case 4:
6235
6451
  i++;
6236
- _context5.n = 2;
6452
+ _context6.n = 2;
6237
6453
  break;
6238
6454
  case 5:
6239
- return _context5.a(2);
6455
+ return _context6.a(2);
6240
6456
  }
6241
- }, _callee5, this);
6457
+ }, _callee6, this);
6242
6458
  }));
6243
6459
  function _translateGateways(_x1, _x10, _x11, _x12, _x13) {
6244
6460
  return _translateGateways2.apply(this, arguments);
@@ -6253,17 +6469,17 @@ var TransformControlsManager = /*#__PURE__*/function () {
6253
6469
  }, {
6254
6470
  key: "_translateComponents",
6255
6471
  value: (function () {
6256
- var _translateComponents2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(components, deltaX, deltaY, deltaZ, threshold) {
6472
+ var _translateComponents2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7(components, deltaX, deltaY, deltaZ, threshold) {
6257
6473
  var _this0 = this;
6258
6474
  var throttleDelay, AXIS_THROTTLE, OBJECT_DELAY, i, _component$userData, component, componentId;
6259
- return _regenerator().w(function (_context6) {
6260
- while (1) switch (_context6.n) {
6475
+ return _regenerator().w(function (_context7) {
6476
+ while (1) switch (_context7.n) {
6261
6477
  case 0:
6262
6478
  if (!(components.length === 0)) {
6263
- _context6.n = 1;
6479
+ _context7.n = 1;
6264
6480
  break;
6265
6481
  }
6266
- return _context6.a(2);
6482
+ return _context7.a(2);
6267
6483
  case 1:
6268
6484
  throttleDelay = function throttleDelay(ms) {
6269
6485
  return new Promise(function (resolve) {
@@ -6275,31 +6491,31 @@ var TransformControlsManager = /*#__PURE__*/function () {
6275
6491
  i = 0;
6276
6492
  case 2:
6277
6493
  if (!(i < components.length)) {
6278
- _context6.n = 5;
6494
+ _context7.n = 5;
6279
6495
  break;
6280
6496
  }
6281
6497
  component = components[i];
6282
6498
  componentId = component.uuid || ((_component$userData = component.userData) === null || _component$userData === void 0 ? void 0 : _component$userData.originalUuid);
6283
- _context6.n = 3;
6499
+ _context7.n = 3;
6284
6500
  return this._translateObjectOnAxes(componentId, deltaX, deltaY, deltaZ, threshold, throttleDelay, AXIS_THROTTLE, function (id, axis, delta) {
6285
6501
  return _this0.centralPlant.translate(id, axis, delta, true);
6286
6502
  });
6287
6503
  case 3:
6288
6504
  console.log("\uD83D\uDD27 Component ".concat(component.name, " translated (").concat(i + 1, "/").concat(components.length, ")"));
6289
6505
  if (!(i < components.length - 1)) {
6290
- _context6.n = 4;
6506
+ _context7.n = 4;
6291
6507
  break;
6292
6508
  }
6293
- _context6.n = 4;
6509
+ _context7.n = 4;
6294
6510
  return throttleDelay(OBJECT_DELAY);
6295
6511
  case 4:
6296
6512
  i++;
6297
- _context6.n = 2;
6513
+ _context7.n = 2;
6298
6514
  break;
6299
6515
  case 5:
6300
- return _context6.a(2);
6516
+ return _context7.a(2);
6301
6517
  }
6302
- }, _callee6, this);
6518
+ }, _callee7, this);
6303
6519
  }));
6304
6520
  function _translateComponents(_x14, _x15, _x16, _x17, _x18) {
6305
6521
  return _translateComponents2.apply(this, arguments);
@@ -6314,10 +6530,10 @@ var TransformControlsManager = /*#__PURE__*/function () {
6314
6530
  }, {
6315
6531
  key: "_translateObjectOnAxes",
6316
6532
  value: (function () {
6317
- var _translateObjectOnAxes2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7(objectId, deltaX, deltaY, deltaZ, threshold, throttleDelay, axisThrottle, translateFn) {
6318
- var axes, _i2, _axes2, _axes2$_i, axis, delta;
6319
- return _regenerator().w(function (_context7) {
6320
- while (1) switch (_context7.n) {
6533
+ var _translateObjectOnAxes2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8(objectId, deltaX, deltaY, deltaZ, threshold, throttleDelay, axisThrottle, translateFn) {
6534
+ var axes, _i3, _axes2, _axes2$_i, axis, delta;
6535
+ return _regenerator().w(function (_context8) {
6536
+ while (1) switch (_context8.n) {
6321
6537
  case 0:
6322
6538
  axes = [{
6323
6539
  axis: 'x',
@@ -6329,28 +6545,28 @@ var TransformControlsManager = /*#__PURE__*/function () {
6329
6545
  axis: 'z',
6330
6546
  delta: deltaZ
6331
6547
  }];
6332
- _i2 = 0, _axes2 = axes;
6548
+ _i3 = 0, _axes2 = axes;
6333
6549
  case 1:
6334
- if (!(_i2 < _axes2.length)) {
6335
- _context7.n = 3;
6550
+ if (!(_i3 < _axes2.length)) {
6551
+ _context8.n = 3;
6336
6552
  break;
6337
6553
  }
6338
- _axes2$_i = _axes2[_i2], axis = _axes2$_i.axis, delta = _axes2$_i.delta;
6554
+ _axes2$_i = _axes2[_i3], axis = _axes2$_i.axis, delta = _axes2$_i.delta;
6339
6555
  if (!(Math.abs(delta) > threshold)) {
6340
- _context7.n = 2;
6556
+ _context8.n = 2;
6341
6557
  break;
6342
6558
  }
6343
6559
  translateFn(objectId, axis, delta);
6344
- _context7.n = 2;
6560
+ _context8.n = 2;
6345
6561
  return throttleDelay(axisThrottle);
6346
6562
  case 2:
6347
- _i2++;
6348
- _context7.n = 1;
6563
+ _i3++;
6564
+ _context8.n = 1;
6349
6565
  break;
6350
6566
  case 3:
6351
- return _context7.a(2);
6567
+ return _context8.a(2);
6352
6568
  }
6353
- }, _callee7);
6569
+ }, _callee8);
6354
6570
  }));
6355
6571
  function _translateObjectOnAxes(_x19, _x20, _x21, _x22, _x23, _x24, _x25, _x26) {
6356
6572
  return _translateObjectOnAxes2.apply(this, arguments);
@@ -41597,7 +41813,7 @@ var CentralPlant = /*#__PURE__*/function (_BaseDisposable) {
41597
41813
  * Initialize the CentralPlant manager
41598
41814
  *
41599
41815
  * @constructor
41600
- * @version 0.3.50
41816
+ * @version 0.3.51
41601
41817
  * @updated 2025-10-22
41602
41818
  *
41603
41819
  * @description Creates a new CentralPlant instance and initializes internal managers and utilities.