@2112-lab/central-plant 0.3.50 → 0.3.52

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.
@@ -264,6 +264,7 @@ var TransformControlsManager = /*#__PURE__*/function () {
264
264
  this.eventHandlers.transformStart = function () {
265
265
  console.log("transformControls transformStart");
266
266
  _this2.transformState.isTransforming = true;
267
+ _this2._suppressNextClick = true;
267
268
 
268
269
  // Store initial transforms for all selected objects
269
270
  if (_this2.selectedObjects.length > 0) {
@@ -467,6 +468,10 @@ var TransformControlsManager = /*#__PURE__*/function () {
467
468
  // Translate mode
468
469
  _this3.setMode('translate');
469
470
  break;
471
+ case 'KeyR':
472
+ // Rotate mode
473
+ _this3.setMode('rotate');
474
+ break;
470
475
  }
471
476
  };
472
477
  window.addEventListener('keydown', this.eventHandlers.keydown);
@@ -651,8 +656,16 @@ var TransformControlsManager = /*#__PURE__*/function () {
651
656
  }
652
657
 
653
658
  // Left-click: select for transform only (bounding box, no tooltip)
659
+ var isComponent = objectType === 'component';
660
+ var isSameSingleSelection = isComponent && _this4.selectedObjects.length === 1 && _this4.selectedObjects[0] === targetObject;
661
+ if (isSameSingleSelection) {
662
+ _this4.toggleTransformMode();
663
+ return;
664
+ }
654
665
  if (!_this4.selectedObjects.includes(targetObject)) {
655
666
  _this4.deselectObject();
667
+ } else if (!isComponent) {
668
+ _this4.setMode('translate');
656
669
  }
657
670
  _this4.selectObjectForTransformOnly(targetObject);
658
671
  };
@@ -1324,6 +1337,7 @@ var TransformControlsManager = /*#__PURE__*/function () {
1324
1337
  this._hideTransformControls();
1325
1338
  console.log("\uD83D\uDD12 Transform controls hidden after deselection");
1326
1339
  }
1340
+ this.setMode('translate');
1327
1341
 
1328
1342
  // Execute callback
1329
1343
  if (this.callbacks.onObjectSelect) {
@@ -1486,14 +1500,14 @@ var TransformControlsManager = /*#__PURE__*/function () {
1486
1500
  }, {
1487
1501
  key: "setMode",
1488
1502
  value: function setMode(mode) {
1489
- // Only allow translate mode - lock rotation and scale controls
1490
- if (mode !== 'translate') {
1503
+ if (mode !== 'translate' && mode !== 'rotate') {
1491
1504
  console.warn("\u26A0\uFE0F Transform mode ".concat(mode, " is disabled. Locking to translate."));
1492
1505
  mode = 'translate';
1493
1506
  }
1494
1507
  var previousMode = this.currentMode;
1495
1508
  this.currentMode = mode;
1496
1509
  this.transformControls.setMode(mode);
1510
+ this._updateAxisVisibilityForMode(mode);
1497
1511
 
1498
1512
  // Execute callback
1499
1513
  if (this.callbacks.onModeChange) {
@@ -1502,6 +1516,47 @@ var TransformControlsManager = /*#__PURE__*/function () {
1502
1516
  console.log("\uD83D\uDD27 Transform mode changed: ".concat(previousMode, " \u2192 ").concat(mode));
1503
1517
  }
1504
1518
 
1519
+ /**
1520
+ * Update gizmo axis visibility based on transform mode.
1521
+ * Rotation shows all rings but only Z-axis is interactive.
1522
+ * @param {'translate' | 'rotate'} mode
1523
+ * @private
1524
+ */
1525
+ }, {
1526
+ key: "_updateAxisVisibilityForMode",
1527
+ value: function _updateAxisVisibilityForMode(mode) {
1528
+ if (!this.transformControls) return;
1529
+ if (mode === 'rotate') {
1530
+ this.transformControls.showX = true;
1531
+ this.transformControls.showY = true;
1532
+ this.transformControls.showZ = true;
1533
+ this.transformControls.pickX = false;
1534
+ this.transformControls.pickY = false;
1535
+ this.transformControls.pickZ = true;
1536
+ return;
1537
+ }
1538
+ this.transformControls.showX = this.config.showX;
1539
+ this.transformControls.showY = this.config.showY;
1540
+ this.transformControls.showZ = this.config.showZ;
1541
+ this.transformControls.pickX = true;
1542
+ this.transformControls.pickY = true;
1543
+ this.transformControls.pickZ = true;
1544
+ }
1545
+
1546
+ /**
1547
+ * Toggle between translate and rotate transform modes
1548
+ */
1549
+ }, {
1550
+ key: "toggleTransformMode",
1551
+ value: function toggleTransformMode() {
1552
+ var _this$transformContro;
1553
+ var newMode = this.currentMode === 'translate' ? 'rotate' : 'translate';
1554
+ this.setMode(newMode);
1555
+ if ((_this$transformContro = this.transformControls) !== null && _this$transformContro !== void 0 && _this$transformContro.object) {
1556
+ this.transformControls.updateMatrixWorld(true);
1557
+ }
1558
+ }
1559
+
1505
1560
  /**
1506
1561
  * Set the transformation space
1507
1562
  * @param {'world' | 'local'} space - The transformation space
@@ -1940,12 +1995,10 @@ var TransformControlsManager = /*#__PURE__*/function () {
1940
1995
  obj.position.copy(newWorldPos);
1941
1996
  obj.updateMatrix();
1942
1997
  } else if (_this8.currentMode === 'rotate') {
1943
- // Calculate offset from centroid
1998
+ // Calculate offset from centroid (Z-axis rotation only)
1944
1999
  var offsetFromCentroid = originalWorldPos.clone().sub(originalCentroid);
1945
-
1946
- // Rotate the offset vector
1947
2000
  var rotatedOffset = offsetFromCentroid.clone();
1948
- var rotationQuat = new THREE__namespace.Quaternion().setFromEuler(rotationDelta);
2001
+ var rotationQuat = new THREE__namespace.Quaternion().setFromAxisAngle(new THREE__namespace.Vector3(0, 0, 1), rotationDelta.z);
1949
2002
  rotatedOffset.applyQuaternion(rotationQuat);
1950
2003
 
1951
2004
  // Calculate new world position
@@ -1961,9 +2014,9 @@ var TransformControlsManager = /*#__PURE__*/function () {
1961
2014
  }
1962
2015
  obj.position.copy(_newWorldPos);
1963
2016
 
1964
- // Apply rotation to the object itself
1965
- obj.rotation.x = originalRot.x + rotationDelta.x;
1966
- obj.rotation.y = originalRot.y + rotationDelta.y;
2017
+ // Apply Z-axis rotation only
2018
+ obj.rotation.x = originalRot.x;
2019
+ obj.rotation.y = originalRot.y;
1967
2020
  obj.rotation.z = originalRot.z + rotationDelta.z;
1968
2021
  obj.updateMatrix();
1969
2022
  }
@@ -1993,7 +2046,15 @@ var TransformControlsManager = /*#__PURE__*/function () {
1993
2046
  return _context2.a(2);
1994
2047
  case 1:
1995
2048
  console.log("\uD83D\uDD27 Applying multi-selection transform to ".concat(this.selectedObjects.length, " objects"));
1996
-
2049
+ if (!(this.currentMode === 'rotate')) {
2050
+ _context2.n = 3;
2051
+ break;
2052
+ }
2053
+ _context2.n = 2;
2054
+ return this._applyMultiSelectionRotation();
2055
+ case 2:
2056
+ return _context2.a(2);
2057
+ case 3:
1997
2058
  // Calculate transformation deltas
1998
2059
  _this$_calculateTrans = this._calculateTransformDeltas(), deltaX = _this$_calculateTrans.deltaX, deltaY = _this$_calculateTrans.deltaY, deltaZ = _this$_calculateTrans.deltaZ, threshold = _this$_calculateTrans.threshold;
1999
2060
  console.log('🔧 Transform delta:', {
@@ -2003,12 +2064,12 @@ var TransformControlsManager = /*#__PURE__*/function () {
2003
2064
  });
2004
2065
 
2005
2066
  // Only process if there's a meaningful translation
2006
- if (!(this.currentMode !== 'translate' || Math.abs(deltaX) < threshold && Math.abs(deltaY) < threshold && Math.abs(deltaZ) < threshold)) {
2007
- _context2.n = 2;
2067
+ if (!(Math.abs(deltaX) < threshold && Math.abs(deltaY) < threshold && Math.abs(deltaZ) < threshold)) {
2068
+ _context2.n = 4;
2008
2069
  break;
2009
2070
  }
2010
2071
  return _context2.a(2);
2011
- case 2:
2072
+ case 4:
2012
2073
  // Reset all objects to original positions
2013
2074
  this._resetObjectsToOriginalPositions();
2014
2075
 
@@ -2022,20 +2083,20 @@ var TransformControlsManager = /*#__PURE__*/function () {
2022
2083
  components = this.selectedObjects.filter(function (obj) {
2023
2084
  return !objectTypes.isSegment(obj) && !objectTypes.isGateway(obj);
2024
2085
  }); // Translate each object type
2025
- _context2.n = 3;
2086
+ _context2.n = 5;
2026
2087
  return this._translateSegments(segments, deltaX, deltaY, deltaZ, threshold);
2027
- case 3:
2028
- _context2.n = 4;
2088
+ case 5:
2089
+ _context2.n = 6;
2029
2090
  return this._translateGateways(gateways, deltaX, deltaY, deltaZ, threshold);
2030
- case 4:
2031
- _context2.n = 5;
2091
+ case 6:
2092
+ _context2.n = 7;
2032
2093
  return this._translateComponents(components, deltaX, deltaY, deltaZ, threshold);
2033
- case 5:
2094
+ case 7:
2034
2095
  console.log("\u2705 All ".concat(this.selectedObjects.length, " objects translated"));
2035
2096
 
2036
2097
  // Cleanup and refresh
2037
2098
  this._finalizeMultiSelectionTransform();
2038
- case 6:
2099
+ case 8:
2039
2100
  return _context2.a(2);
2040
2101
  }
2041
2102
  }, _callee2, this);
@@ -2045,6 +2106,123 @@ var TransformControlsManager = /*#__PURE__*/function () {
2045
2106
  }
2046
2107
  return applyMultiSelectionTransform;
2047
2108
  }()
2109
+ /**
2110
+ * Apply rotation from multi-selection group to selected components via API
2111
+ * @private
2112
+ */
2113
+ )
2114
+ }, {
2115
+ key: "_applyMultiSelectionRotation",
2116
+ value: (function () {
2117
+ var _applyMultiSelectionRotation2 = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee3() {
2118
+ 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;
2119
+ return _rollupPluginBabelHelpers.regenerator().w(function (_context3) {
2120
+ while (1) switch (_context3.n) {
2121
+ case 0:
2122
+ threshold = 0.001;
2123
+ rotationDeltas = [];
2124
+ _iterator6 = _rollupPluginBabelHelpers.createForOfIteratorHelper(this.selectedObjects);
2125
+ _context3.p = 1;
2126
+ _iterator6.s();
2127
+ case 2:
2128
+ if ((_step6 = _iterator6.n()).done) {
2129
+ _context3.n = 6;
2130
+ break;
2131
+ }
2132
+ _obj2 = _step6.value;
2133
+ originalRot = _obj2.userData._multiSelectOriginalRotation;
2134
+ originalPos = _obj2.userData._multiSelectOriginalPosition;
2135
+ if (originalRot) {
2136
+ _context3.n = 3;
2137
+ break;
2138
+ }
2139
+ return _context3.a(3, 5);
2140
+ case 3:
2141
+ _deltaRad = _obj2.rotation.z - originalRot.z;
2142
+ if (!(Math.abs(_deltaRad) < threshold)) {
2143
+ _context3.n = 4;
2144
+ break;
2145
+ }
2146
+ return _context3.a(3, 5);
2147
+ case 4:
2148
+ rotationDeltas.push({
2149
+ obj: _obj2,
2150
+ originalPos: originalPos === null || originalPos === void 0 ? void 0 : originalPos.clone(),
2151
+ originalRot: originalRot.clone(),
2152
+ deltaRad: _deltaRad
2153
+ });
2154
+ case 5:
2155
+ _context3.n = 2;
2156
+ break;
2157
+ case 6:
2158
+ _context3.n = 8;
2159
+ break;
2160
+ case 7:
2161
+ _context3.p = 7;
2162
+ _t = _context3.v;
2163
+ _iterator6.e(_t);
2164
+ case 8:
2165
+ _context3.p = 8;
2166
+ _iterator6.f();
2167
+ return _context3.f(8);
2168
+ case 9:
2169
+ if (!(rotationDeltas.length === 0)) {
2170
+ _context3.n = 10;
2171
+ break;
2172
+ }
2173
+ return _context3.a(2);
2174
+ case 10:
2175
+ rotationDeltas.forEach(function (_ref2) {
2176
+ var obj = _ref2.obj,
2177
+ originalPos = _ref2.originalPos,
2178
+ originalRot = _ref2.originalRot;
2179
+ if (originalPos) {
2180
+ obj.position.copy(originalPos);
2181
+ }
2182
+ obj.rotation.copy(originalRot);
2183
+ obj.updateMatrixWorld(true);
2184
+ });
2185
+ _i = 0, _rotationDeltas = rotationDeltas;
2186
+ case 11:
2187
+ if (!(_i < _rotationDeltas.length)) {
2188
+ _context3.n = 15;
2189
+ break;
2190
+ }
2191
+ _rotationDeltas$_i = _rotationDeltas[_i], obj = _rotationDeltas$_i.obj, deltaRad = _rotationDeltas$_i.deltaRad;
2192
+ 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))) {
2193
+ _context3.n = 12;
2194
+ break;
2195
+ }
2196
+ return _context3.a(3, 14);
2197
+ case 12:
2198
+ componentId = obj.uuid || ((_obj$userData7 = obj.userData) === null || _obj$userData7 === void 0 ? void 0 : _obj$userData7.originalUuid);
2199
+ if (!(!componentId || !((_this$centralPlant = this.centralPlant) !== null && _this$centralPlant !== void 0 && _this$centralPlant.rotate))) {
2200
+ _context3.n = 13;
2201
+ break;
2202
+ }
2203
+ return _context3.a(3, 14);
2204
+ case 13:
2205
+ deltaDeg = THREE__namespace.MathUtils.radToDeg(deltaRad);
2206
+ snappedDeg = Math.round(deltaDeg / 90) * 90;
2207
+ if (Math.abs(snappedDeg) >= 90) {
2208
+ this.centralPlant.rotate(componentId, 'z', snappedDeg);
2209
+ }
2210
+ case 14:
2211
+ _i++;
2212
+ _context3.n = 11;
2213
+ break;
2214
+ case 15:
2215
+ this._finalizeMultiSelectionTransform();
2216
+ case 16:
2217
+ return _context3.a(2);
2218
+ }
2219
+ }, _callee3, this, [[1, 7, 8, 9]]);
2220
+ }));
2221
+ function _applyMultiSelectionRotation() {
2222
+ return _applyMultiSelectionRotation2.apply(this, arguments);
2223
+ }
2224
+ return _applyMultiSelectionRotation;
2225
+ }()
2048
2226
  /**
2049
2227
  * Calculate transformation deltas from multi-selection group
2050
2228
  * @returns {Object} Delta values and threshold
@@ -2100,17 +2278,17 @@ var TransformControlsManager = /*#__PURE__*/function () {
2100
2278
  }, {
2101
2279
  key: "_translateSegments",
2102
2280
  value: (function () {
2103
- var _translateSegments2 = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee3(segments, deltaX, deltaY, deltaZ, threshold) {
2281
+ var _translateSegments2 = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee4(segments, deltaX, deltaY, deltaZ, threshold) {
2104
2282
  var _this$sceneViewer, _this$sceneViewer2;
2105
- var transformOpsManager, useOptimizedPath, throttleDelay, AXIS_THROTTLE, OBJECT_DELAY, i, segment, axes, _i, _axes, _axes$_i, axis, delta;
2106
- return _rollupPluginBabelHelpers.regenerator().w(function (_context3) {
2107
- while (1) switch (_context3.n) {
2283
+ var transformOpsManager, useOptimizedPath, throttleDelay, AXIS_THROTTLE, OBJECT_DELAY, i, segment, axes, _i2, _axes, _axes$_i, axis, delta;
2284
+ return _rollupPluginBabelHelpers.regenerator().w(function (_context4) {
2285
+ while (1) switch (_context4.n) {
2108
2286
  case 0:
2109
2287
  if (!(segments.length === 0)) {
2110
- _context3.n = 1;
2288
+ _context4.n = 1;
2111
2289
  break;
2112
2290
  }
2113
- return _context3.a(2);
2291
+ return _context4.a(2);
2114
2292
  case 1:
2115
2293
  transformOpsManager = (_this$sceneViewer = this.sceneViewer) === null || _this$sceneViewer === void 0 ? void 0 : _this$sceneViewer.transformOperationsManager;
2116
2294
  useOptimizedPath = transformOpsManager != null;
@@ -2129,7 +2307,7 @@ var TransformControlsManager = /*#__PURE__*/function () {
2129
2307
  i = 0;
2130
2308
  case 2:
2131
2309
  if (!(i < segments.length)) {
2132
- _context3.n = 8;
2310
+ _context4.n = 8;
2133
2311
  break;
2134
2312
  }
2135
2313
  segment = segments[i];
@@ -2143,26 +2321,26 @@ var TransformControlsManager = /*#__PURE__*/function () {
2143
2321
  axis: 'z',
2144
2322
  delta: deltaZ
2145
2323
  }]; // Translate on each axis
2146
- _i = 0, _axes = axes;
2324
+ _i2 = 0, _axes = axes;
2147
2325
  case 3:
2148
- if (!(_i < _axes.length)) {
2149
- _context3.n = 6;
2326
+ if (!(_i2 < _axes.length)) {
2327
+ _context4.n = 6;
2150
2328
  break;
2151
2329
  }
2152
- _axes$_i = _axes[_i], axis = _axes$_i.axis, delta = _axes$_i.delta;
2330
+ _axes$_i = _axes[_i2], axis = _axes$_i.axis, delta = _axes$_i.delta;
2153
2331
  if (!(Math.abs(delta) > threshold)) {
2154
- _context3.n = 5;
2332
+ _context4.n = 5;
2155
2333
  break;
2156
2334
  }
2157
- _context3.n = 4;
2335
+ _context4.n = 4;
2158
2336
  return this._translateSegmentOnAxis(segment, axis, delta, useOptimizedPath, i);
2159
2337
  case 4:
2160
- segment = _context3.v;
2161
- _context3.n = 5;
2338
+ segment = _context4.v;
2339
+ _context4.n = 5;
2162
2340
  return throttleDelay(AXIS_THROTTLE);
2163
2341
  case 5:
2164
- _i++;
2165
- _context3.n = 3;
2342
+ _i2++;
2343
+ _context4.n = 3;
2166
2344
  break;
2167
2345
  case 6:
2168
2346
  // Update selected objects array with refreshed reference
@@ -2173,14 +2351,14 @@ var TransformControlsManager = /*#__PURE__*/function () {
2173
2351
  console.warn("\u26A0\uFE0F Segment reference became null (".concat(i + 1, "/").concat(segments.length, ")"));
2174
2352
  }
2175
2353
  if (!(i < segments.length - 1)) {
2176
- _context3.n = 7;
2354
+ _context4.n = 7;
2177
2355
  break;
2178
2356
  }
2179
- _context3.n = 7;
2357
+ _context4.n = 7;
2180
2358
  return throttleDelay(OBJECT_DELAY);
2181
2359
  case 7:
2182
2360
  i++;
2183
- _context3.n = 2;
2361
+ _context4.n = 2;
2184
2362
  break;
2185
2363
  case 8:
2186
2364
  // Batch update paths for optimized path only
@@ -2190,9 +2368,9 @@ var TransformControlsManager = /*#__PURE__*/function () {
2190
2368
  console.log('✅ Paths regenerated successfully');
2191
2369
  }
2192
2370
  case 9:
2193
- return _context3.a(2);
2371
+ return _context4.a(2);
2194
2372
  }
2195
- }, _callee3, this);
2373
+ }, _callee4, this);
2196
2374
  }));
2197
2375
  function _translateSegments(_x, _x2, _x3, _x4, _x5) {
2198
2376
  return _translateSegments2.apply(this, arguments);
@@ -2231,11 +2409,11 @@ var TransformControlsManager = /*#__PURE__*/function () {
2231
2409
  }, {
2232
2410
  key: "_translateSegmentOnAxis",
2233
2411
  value: (function () {
2234
- var _translateSegmentOnAxis2 = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee4(segment, axis, delta, useOptimizedPath, index) {
2412
+ var _translateSegmentOnAxis2 = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee5(segment, axis, delta, useOptimizedPath, index) {
2235
2413
  var _segment$userData3;
2236
2414
  var segmentId, success;
2237
- return _rollupPluginBabelHelpers.regenerator().w(function (_context4) {
2238
- while (1) switch (_context4.n) {
2415
+ return _rollupPluginBabelHelpers.regenerator().w(function (_context5) {
2416
+ while (1) switch (_context5.n) {
2239
2417
  case 0:
2240
2418
  segmentId = segment.uuid || ((_segment$userData3 = segment.userData) === null || _segment$userData3 === void 0 ? void 0 : _segment$userData3.originalUuid);
2241
2419
  if (useOptimizedPath) {
@@ -2248,9 +2426,9 @@ var TransformControlsManager = /*#__PURE__*/function () {
2248
2426
  }
2249
2427
 
2250
2428
  // Refresh segment reference after manualization
2251
- return _context4.a(2, this._refreshSegmentReference(segment));
2429
+ return _context5.a(2, this._refreshSegmentReference(segment));
2252
2430
  }
2253
- }, _callee4, this);
2431
+ }, _callee5, this);
2254
2432
  }));
2255
2433
  function _translateSegmentOnAxis(_x6, _x7, _x8, _x9, _x0) {
2256
2434
  return _translateSegmentOnAxis2.apply(this, arguments);
@@ -2266,8 +2444,8 @@ var TransformControlsManager = /*#__PURE__*/function () {
2266
2444
  key: "_updateSegmentReference",
2267
2445
  value: function _updateSegmentReference(oldSegment, newSegment, index) {
2268
2446
  var selectedIndex = this.selectedObjects.findIndex(function (obj) {
2269
- var _obj$userData5;
2270
- return obj.uuid === oldSegment.uuid || ((_obj$userData5 = obj.userData) === null || _obj$userData5 === void 0 ? void 0 : _obj$userData5.originalUuid) === oldSegment.uuid;
2447
+ var _obj$userData8;
2448
+ return obj.uuid === oldSegment.uuid || ((_obj$userData8 = obj.userData) === null || _obj$userData8 === void 0 ? void 0 : _obj$userData8.originalUuid) === oldSegment.uuid;
2271
2449
  });
2272
2450
  if (selectedIndex !== -1 && newSegment) {
2273
2451
  // Clear bounding box cache
@@ -2285,17 +2463,17 @@ var TransformControlsManager = /*#__PURE__*/function () {
2285
2463
  }, {
2286
2464
  key: "_translateGateways",
2287
2465
  value: (function () {
2288
- var _translateGateways2 = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee5(gateways, deltaX, deltaY, deltaZ, threshold) {
2466
+ var _translateGateways2 = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee6(gateways, deltaX, deltaY, deltaZ, threshold) {
2289
2467
  var _this9 = this;
2290
2468
  var throttleDelay, AXIS_THROTTLE, OBJECT_DELAY, i, _gateway$userData, gateway, gatewayId;
2291
- return _rollupPluginBabelHelpers.regenerator().w(function (_context5) {
2292
- while (1) switch (_context5.n) {
2469
+ return _rollupPluginBabelHelpers.regenerator().w(function (_context6) {
2470
+ while (1) switch (_context6.n) {
2293
2471
  case 0:
2294
2472
  if (!(gateways.length === 0)) {
2295
- _context5.n = 1;
2473
+ _context6.n = 1;
2296
2474
  break;
2297
2475
  }
2298
- return _context5.a(2);
2476
+ return _context6.a(2);
2299
2477
  case 1:
2300
2478
  throttleDelay = function throttleDelay(ms) {
2301
2479
  return new Promise(function (resolve) {
@@ -2307,31 +2485,31 @@ var TransformControlsManager = /*#__PURE__*/function () {
2307
2485
  i = 0;
2308
2486
  case 2:
2309
2487
  if (!(i < gateways.length)) {
2310
- _context5.n = 5;
2488
+ _context6.n = 5;
2311
2489
  break;
2312
2490
  }
2313
2491
  gateway = gateways[i];
2314
2492
  gatewayId = gateway.uuid || ((_gateway$userData = gateway.userData) === null || _gateway$userData === void 0 ? void 0 : _gateway$userData.originalUuid);
2315
- _context5.n = 3;
2493
+ _context6.n = 3;
2316
2494
  return this._translateObjectOnAxes(gatewayId, deltaX, deltaY, deltaZ, threshold, throttleDelay, AXIS_THROTTLE, function (id, axis, delta) {
2317
2495
  return _this9.centralPlant.translateGateway(id, axis, delta);
2318
2496
  });
2319
2497
  case 3:
2320
2498
  console.log("\uD83D\uDEAA Gateway ".concat(gateway.name, " translated (").concat(i + 1, "/").concat(gateways.length, ")"));
2321
2499
  if (!(i < gateways.length - 1)) {
2322
- _context5.n = 4;
2500
+ _context6.n = 4;
2323
2501
  break;
2324
2502
  }
2325
- _context5.n = 4;
2503
+ _context6.n = 4;
2326
2504
  return throttleDelay(OBJECT_DELAY);
2327
2505
  case 4:
2328
2506
  i++;
2329
- _context5.n = 2;
2507
+ _context6.n = 2;
2330
2508
  break;
2331
2509
  case 5:
2332
- return _context5.a(2);
2510
+ return _context6.a(2);
2333
2511
  }
2334
- }, _callee5, this);
2512
+ }, _callee6, this);
2335
2513
  }));
2336
2514
  function _translateGateways(_x1, _x10, _x11, _x12, _x13) {
2337
2515
  return _translateGateways2.apply(this, arguments);
@@ -2346,17 +2524,17 @@ var TransformControlsManager = /*#__PURE__*/function () {
2346
2524
  }, {
2347
2525
  key: "_translateComponents",
2348
2526
  value: (function () {
2349
- var _translateComponents2 = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee6(components, deltaX, deltaY, deltaZ, threshold) {
2527
+ var _translateComponents2 = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee7(components, deltaX, deltaY, deltaZ, threshold) {
2350
2528
  var _this0 = this;
2351
2529
  var throttleDelay, AXIS_THROTTLE, OBJECT_DELAY, i, _component$userData, component, componentId;
2352
- return _rollupPluginBabelHelpers.regenerator().w(function (_context6) {
2353
- while (1) switch (_context6.n) {
2530
+ return _rollupPluginBabelHelpers.regenerator().w(function (_context7) {
2531
+ while (1) switch (_context7.n) {
2354
2532
  case 0:
2355
2533
  if (!(components.length === 0)) {
2356
- _context6.n = 1;
2534
+ _context7.n = 1;
2357
2535
  break;
2358
2536
  }
2359
- return _context6.a(2);
2537
+ return _context7.a(2);
2360
2538
  case 1:
2361
2539
  throttleDelay = function throttleDelay(ms) {
2362
2540
  return new Promise(function (resolve) {
@@ -2368,31 +2546,31 @@ var TransformControlsManager = /*#__PURE__*/function () {
2368
2546
  i = 0;
2369
2547
  case 2:
2370
2548
  if (!(i < components.length)) {
2371
- _context6.n = 5;
2549
+ _context7.n = 5;
2372
2550
  break;
2373
2551
  }
2374
2552
  component = components[i];
2375
2553
  componentId = component.uuid || ((_component$userData = component.userData) === null || _component$userData === void 0 ? void 0 : _component$userData.originalUuid);
2376
- _context6.n = 3;
2554
+ _context7.n = 3;
2377
2555
  return this._translateObjectOnAxes(componentId, deltaX, deltaY, deltaZ, threshold, throttleDelay, AXIS_THROTTLE, function (id, axis, delta) {
2378
2556
  return _this0.centralPlant.translate(id, axis, delta, true);
2379
2557
  });
2380
2558
  case 3:
2381
2559
  console.log("\uD83D\uDD27 Component ".concat(component.name, " translated (").concat(i + 1, "/").concat(components.length, ")"));
2382
2560
  if (!(i < components.length - 1)) {
2383
- _context6.n = 4;
2561
+ _context7.n = 4;
2384
2562
  break;
2385
2563
  }
2386
- _context6.n = 4;
2564
+ _context7.n = 4;
2387
2565
  return throttleDelay(OBJECT_DELAY);
2388
2566
  case 4:
2389
2567
  i++;
2390
- _context6.n = 2;
2568
+ _context7.n = 2;
2391
2569
  break;
2392
2570
  case 5:
2393
- return _context6.a(2);
2571
+ return _context7.a(2);
2394
2572
  }
2395
- }, _callee6, this);
2573
+ }, _callee7, this);
2396
2574
  }));
2397
2575
  function _translateComponents(_x14, _x15, _x16, _x17, _x18) {
2398
2576
  return _translateComponents2.apply(this, arguments);
@@ -2407,10 +2585,10 @@ var TransformControlsManager = /*#__PURE__*/function () {
2407
2585
  }, {
2408
2586
  key: "_translateObjectOnAxes",
2409
2587
  value: (function () {
2410
- var _translateObjectOnAxes2 = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee7(objectId, deltaX, deltaY, deltaZ, threshold, throttleDelay, axisThrottle, translateFn) {
2411
- var axes, _i2, _axes2, _axes2$_i, axis, delta;
2412
- return _rollupPluginBabelHelpers.regenerator().w(function (_context7) {
2413
- while (1) switch (_context7.n) {
2588
+ var _translateObjectOnAxes2 = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee8(objectId, deltaX, deltaY, deltaZ, threshold, throttleDelay, axisThrottle, translateFn) {
2589
+ var axes, _i3, _axes2, _axes2$_i, axis, delta;
2590
+ return _rollupPluginBabelHelpers.regenerator().w(function (_context8) {
2591
+ while (1) switch (_context8.n) {
2414
2592
  case 0:
2415
2593
  axes = [{
2416
2594
  axis: 'x',
@@ -2422,28 +2600,28 @@ var TransformControlsManager = /*#__PURE__*/function () {
2422
2600
  axis: 'z',
2423
2601
  delta: deltaZ
2424
2602
  }];
2425
- _i2 = 0, _axes2 = axes;
2603
+ _i3 = 0, _axes2 = axes;
2426
2604
  case 1:
2427
- if (!(_i2 < _axes2.length)) {
2428
- _context7.n = 3;
2605
+ if (!(_i3 < _axes2.length)) {
2606
+ _context8.n = 3;
2429
2607
  break;
2430
2608
  }
2431
- _axes2$_i = _axes2[_i2], axis = _axes2$_i.axis, delta = _axes2$_i.delta;
2609
+ _axes2$_i = _axes2[_i3], axis = _axes2$_i.axis, delta = _axes2$_i.delta;
2432
2610
  if (!(Math.abs(delta) > threshold)) {
2433
- _context7.n = 2;
2611
+ _context8.n = 2;
2434
2612
  break;
2435
2613
  }
2436
2614
  translateFn(objectId, axis, delta);
2437
- _context7.n = 2;
2615
+ _context8.n = 2;
2438
2616
  return throttleDelay(axisThrottle);
2439
2617
  case 2:
2440
- _i2++;
2441
- _context7.n = 1;
2618
+ _i3++;
2619
+ _context8.n = 1;
2442
2620
  break;
2443
2621
  case 3:
2444
- return _context7.a(2);
2622
+ return _context8.a(2);
2445
2623
  }
2446
- }, _callee7);
2624
+ }, _callee8);
2447
2625
  }));
2448
2626
  function _translateObjectOnAxes(_x19, _x20, _x21, _x22, _x23, _x24, _x25, _x26) {
2449
2627
  return _translateObjectOnAxes2.apply(this, arguments);
@@ -79,7 +79,9 @@ var PathfindingManager = /*#__PURE__*/function (_BaseDisposable) {
79
79
  size: 0.5,
80
80
  safetyMargin: 0,
81
81
  minSegmentLength: 0.5,
82
- timeout: 1000
82
+ timeout: 1000,
83
+ groundZ: 0,
84
+ minPathElevation: 0.1
83
85
  },
84
86
  connectorBBoxSize: 0.1 // Default size for position-based connectors (Phase 2 Refactoring)
85
87
  };
@@ -34,7 +34,7 @@ var CentralPlant = /*#__PURE__*/function (_BaseDisposable) {
34
34
  * Initialize the CentralPlant manager
35
35
  *
36
36
  * @constructor
37
- * @version 0.3.50
37
+ * @version 0.3.52
38
38
  * @updated 2025-10-22
39
39
  *
40
40
  * @description Creates a new CentralPlant instance and initializes internal managers and utilities.