@2112-lab/central-plant 0.1.94 → 0.1.95

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.
@@ -28897,9 +28897,13 @@ var ModelManager = /*#__PURE__*/function () {
28897
28897
  var _this = this;
28898
28898
  var connectorChildren = [];
28899
28899
  targetMesh.children.forEach(function (child, index) {
28900
+ var _child$userData;
28900
28901
  var isConnectorGeometry = child.geometry && (child.geometry.uuid === 'CONNECTOR-GEO' || child.geometry.type === 'SphereGeometry' && child.geometry.parameters);
28901
28902
  var isConnectorByName = child.name && child.name.toLowerCase().includes('connector');
28902
- if (isConnectorGeometry && isConnectorByName) {
28903
+ // Also recognise connectors declared via userData (e.g. inline connectors from SAMPLE_1.json
28904
+ // whose geometry may be a fallback BufferGeometry rather than a SphereGeometry).
28905
+ var isConnectorByUserData = ((_child$userData = child.userData) === null || _child$userData === void 0 ? void 0 : _child$userData.objectType) === 'connector';
28906
+ if (isConnectorGeometry && isConnectorByName || isConnectorByUserData) {
28903
28907
  // Ensure userData exists and has worldBoundingBox
28904
28908
  if (!child.userData) child.userData = {};
28905
28909
  if (!child.userData.worldBoundingBox) {
@@ -29183,8 +29187,8 @@ var ModelManager = /*#__PURE__*/function () {
29183
29187
  requiredModels = new Set();
29184
29188
  console.log("\uD83D\uDD0D Checking ".concat(data.scene.children.length, " scene objects for required models..."));
29185
29189
  data.scene.children.forEach(function (child) {
29186
- var _child$userData;
29187
- var libraryId = (_child$userData = child.userData) === null || _child$userData === void 0 ? void 0 : _child$userData.libraryId;
29190
+ var _child$userData2;
29191
+ var libraryId = (_child$userData2 = child.userData) === null || _child$userData2 === void 0 ? void 0 : _child$userData2.libraryId;
29188
29192
  if (libraryId) {
29189
29193
  if (componentDictionary[libraryId]) {
29190
29194
  var modelKey = componentDictionary[libraryId].modelKey;
@@ -30239,6 +30243,24 @@ var SceneOperationsManager = /*#__PURE__*/function () {
30239
30243
  }
30240
30244
  }
30241
30245
  });
30246
+
30247
+ // Ensure CONNECTOR_GATEWAY_SPHERE exists even when all connectors are nested inside
30248
+ // component children (e.g. SAMPLE_1.json inline connector definitions). Without
30249
+ // this geometry the connector meshes fall back to empty BufferGeometry, which then
30250
+ // causes _preserveConnectorChildren to drop them during GLB model replacement.
30251
+ if (!geometries['CONNECTOR_GATEWAY_SPHERE']) {
30252
+ var hasNestedConnectors = data.scene.children.some(function (child) {
30253
+ var _child$userData3;
30254
+ return ((_child$userData3 = child.userData) === null || _child$userData3 === void 0 ? void 0 : _child$userData3.objectType) === 'component' && Array.isArray(child.children) && child.children.some(function (nestedChild) {
30255
+ var _nestedChild$userData;
30256
+ return ((_nestedChild$userData = nestedChild.userData) === null || _nestedChild$userData === void 0 ? void 0 : _nestedChild$userData.objectType) === 'connector';
30257
+ });
30258
+ });
30259
+ if (hasNestedConnectors) {
30260
+ geometries['CONNECTOR_GATEWAY_SPHERE'] = new THREE__namespace.SphereGeometry(0.1, 16, 16);
30261
+ console.log('🔮 Created shared sphere geometry for nested inline connectors (radius: 0.1)');
30262
+ }
30263
+ }
30242
30264
  return geometries;
30243
30265
  }
30244
30266
 
@@ -30624,12 +30646,12 @@ var SceneOperationsManager = /*#__PURE__*/function () {
30624
30646
  _step;
30625
30647
  try {
30626
30648
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
30627
- var _object$userData, _child$userData3;
30649
+ var _object$userData, _child$userData4;
30628
30650
  var child = _step.value;
30629
30651
  // Enhanced matching logic with hardcoded UUID priority
30630
30652
 
30631
30653
  // Strategy 1: Direct hardcoded UUID match (HIGHEST PRIORITY)
30632
- if (child.uuid === object.uuid || child.uuid === ((_object$userData = object.userData) === null || _object$userData === void 0 ? void 0 : _object$userData.originalUuid) || object.uuid === ((_child$userData3 = child.userData) === null || _child$userData3 === void 0 ? void 0 : _child$userData3.originalUuid)) {
30654
+ if (child.uuid === object.uuid || child.uuid === ((_object$userData = object.userData) === null || _object$userData === void 0 ? void 0 : _object$userData.originalUuid) || object.uuid === ((_child$userData4 = child.userData) === null || _child$userData4 === void 0 ? void 0 : _child$userData4.originalUuid)) {
30633
30655
  return child;
30634
30656
  }
30635
30657
 
@@ -30888,10 +30910,10 @@ var SceneOperationsManager = /*#__PURE__*/function () {
30888
30910
  var componentsProcessed = 0;
30889
30911
  var connectorsInjected = 0;
30890
30912
  data.scene.children.forEach(function (child) {
30891
- var _child$userData4, _child$userData5, _child$userData6;
30892
- var childType = ((_child$userData4 = child.userData) === null || _child$userData4 === void 0 ? void 0 : _child$userData4.objectType) || ((_child$userData5 = child.userData) === null || _child$userData5 === void 0 ? void 0 : _child$userData5.objectType);
30913
+ var _child$userData5, _child$userData6, _child$userData7;
30914
+ var childType = ((_child$userData5 = child.userData) === null || _child$userData5 === void 0 ? void 0 : _child$userData5.objectType) || ((_child$userData6 = child.userData) === null || _child$userData6 === void 0 ? void 0 : _child$userData6.objectType);
30893
30915
  // Only process components with libraryId
30894
- if (childType === 'component' && (_child$userData6 = child.userData) !== null && _child$userData6 !== void 0 && _child$userData6.libraryId) {
30916
+ if (childType === 'component' && (_child$userData7 = child.userData) !== null && _child$userData7 !== void 0 && _child$userData7.libraryId) {
30895
30917
  var libraryId = child.userData.libraryId;
30896
30918
  var dictEntry = componentDictionary[libraryId];
30897
30919
 
@@ -31048,17 +31070,17 @@ var SceneOperationsManager = /*#__PURE__*/function () {
31048
31070
  geometries = this.createSceneGeometries(data, componentDictionary); // Create basic objects and track GLB replacements
31049
31071
  libraryObjectsToReplace = [];
31050
31072
  data.scene.children.forEach(function (child, index) {
31051
- var _child$userData7, _child$userData8;
31073
+ var _child$userData8, _child$userData9;
31052
31074
  var createdObject = _this4.createSceneObject(child, geometries, materials, componentDictionary);
31053
31075
  _this4.sceneViewer.scene.add(createdObject);
31054
31076
 
31055
31077
  // Track objects that need GLB model replacement
31056
- if ((_child$userData7 = child.userData) !== null && _child$userData7 !== void 0 && _child$userData7.libraryId && componentDictionary[(_child$userData8 = child.userData) === null || _child$userData8 === void 0 ? void 0 : _child$userData8.libraryId]) {
31057
- var _child$userData9;
31078
+ if ((_child$userData8 = child.userData) !== null && _child$userData8 !== void 0 && _child$userData8.libraryId && componentDictionary[(_child$userData9 = child.userData) === null || _child$userData9 === void 0 ? void 0 : _child$userData9.libraryId]) {
31079
+ var _child$userData0;
31058
31080
  libraryObjectsToReplace.push({
31059
31081
  basicObject: createdObject,
31060
31082
  jsonData: child,
31061
- componentData: componentDictionary[(_child$userData9 = child.userData) === null || _child$userData9 === void 0 ? void 0 : _child$userData9.libraryId]
31083
+ componentData: componentDictionary[(_child$userData0 = child.userData) === null || _child$userData0 === void 0 ? void 0 : _child$userData0.libraryId]
31062
31084
  });
31063
31085
  }
31064
31086
  });
@@ -31197,8 +31219,8 @@ var SceneOperationsManager = /*#__PURE__*/function () {
31197
31219
  var instanceBehaviors = [];
31198
31220
  if (Array.isArray(data === null || data === void 0 || (_data$scene3 = data.scene) === null || _data$scene3 === void 0 ? void 0 : _data$scene3.children)) {
31199
31221
  data.scene.children.forEach(function (child) {
31200
- var _child$userData0, _compData$defaultBeha;
31201
- var libraryId = (_child$userData0 = child.userData) === null || _child$userData0 === void 0 ? void 0 : _child$userData0.libraryId;
31222
+ var _child$userData1, _compData$defaultBeha;
31223
+ var libraryId = (_child$userData1 = child.userData) === null || _child$userData1 === void 0 ? void 0 : _child$userData1.libraryId;
31202
31224
  if (!libraryId) return;
31203
31225
  var instanceUuid = child.uuid;
31204
31226
  // Skip instances whose defaults were already resolved by Step A
@@ -31589,8 +31611,8 @@ var SceneOperationsManager = /*#__PURE__*/function () {
31589
31611
  // Process children (connectors, etc.) if they exist
31590
31612
  if (componentModel.children && componentModel.children.length > 0) {
31591
31613
  componentModel.children.forEach(function (child) {
31592
- var _child$userData1, _child$userData10;
31593
- var childType = ((_child$userData1 = child.userData) === null || _child$userData1 === void 0 ? void 0 : _child$userData1.objectType) || ((_child$userData10 = child.userData) === null || _child$userData10 === void 0 ? void 0 : _child$userData10.objectType);
31614
+ var _child$userData10, _child$userData11;
31615
+ var childType = ((_child$userData10 = child.userData) === null || _child$userData10 === void 0 ? void 0 : _child$userData10.objectType) || ((_child$userData11 = child.userData) === null || _child$userData11 === void 0 ? void 0 : _child$userData11.objectType);
31594
31616
  if (childType === 'connector') {
31595
31617
  var _child$geometry;
31596
31618
  var childBoundingBox = new THREE__namespace.Box3().setFromObject(child);
@@ -31675,8 +31697,8 @@ var SceneOperationsManager = /*#__PURE__*/function () {
31675
31697
  if (segment.children && segment.children.length > 0) {
31676
31698
  var childrenToRemove = _toConsumableArray(segment.children);
31677
31699
  childrenToRemove.forEach(function (child) {
31678
- var _child$userData11;
31679
- if ((_child$userData11 = child.userData) !== null && _child$userData11 !== void 0 && _child$userData11.isPipeElbow) {
31700
+ var _child$userData12;
31701
+ if ((_child$userData12 = child.userData) !== null && _child$userData12 !== void 0 && _child$userData12.isPipeElbow) {
31680
31702
  console.log("\uD83D\uDDD1\uFE0F Removing elbow child from segment before manualization: ".concat(child.uuid));
31681
31703
  segment.remove(child);
31682
31704
  if (child.geometry) child.geometry.dispose();
@@ -37181,7 +37203,7 @@ var CentralPlant = /*#__PURE__*/function (_BaseDisposable) {
37181
37203
  * Initialize the CentralPlant manager
37182
37204
  *
37183
37205
  * @constructor
37184
- * @version 0.1.94
37206
+ * @version 0.1.95
37185
37207
  * @updated 2025-10-22
37186
37208
  *
37187
37209
  * @description Creates a new CentralPlant instance and initializes internal managers and utilities.
@@ -19,7 +19,7 @@ var CentralPlant = /*#__PURE__*/function (_BaseDisposable) {
19
19
  * Initialize the CentralPlant manager
20
20
  *
21
21
  * @constructor
22
- * @version 0.1.94
22
+ * @version 0.1.95
23
23
  * @updated 2025-10-22
24
24
  *
25
25
  * @description Creates a new CentralPlant instance and initializes internal managers and utilities.
@@ -146,9 +146,13 @@ var ModelManager = /*#__PURE__*/function () {
146
146
  var _this = this;
147
147
  var connectorChildren = [];
148
148
  targetMesh.children.forEach(function (child, index) {
149
+ var _child$userData;
149
150
  var isConnectorGeometry = child.geometry && (child.geometry.uuid === 'CONNECTOR-GEO' || child.geometry.type === 'SphereGeometry' && child.geometry.parameters);
150
151
  var isConnectorByName = child.name && child.name.toLowerCase().includes('connector');
151
- if (isConnectorGeometry && isConnectorByName) {
152
+ // Also recognise connectors declared via userData (e.g. inline connectors from SAMPLE_1.json
153
+ // whose geometry may be a fallback BufferGeometry rather than a SphereGeometry).
154
+ var isConnectorByUserData = ((_child$userData = child.userData) === null || _child$userData === void 0 ? void 0 : _child$userData.objectType) === 'connector';
155
+ if (isConnectorGeometry && isConnectorByName || isConnectorByUserData) {
152
156
  // Ensure userData exists and has worldBoundingBox
153
157
  if (!child.userData) child.userData = {};
154
158
  if (!child.userData.worldBoundingBox) {
@@ -432,8 +436,8 @@ var ModelManager = /*#__PURE__*/function () {
432
436
  requiredModels = new Set();
433
437
  console.log("\uD83D\uDD0D Checking ".concat(data.scene.children.length, " scene objects for required models..."));
434
438
  data.scene.children.forEach(function (child) {
435
- var _child$userData;
436
- var libraryId = (_child$userData = child.userData) === null || _child$userData === void 0 ? void 0 : _child$userData.libraryId;
439
+ var _child$userData2;
440
+ var libraryId = (_child$userData2 = child.userData) === null || _child$userData2 === void 0 ? void 0 : _child$userData2.libraryId;
437
441
  if (libraryId) {
438
442
  if (componentDictionary[libraryId]) {
439
443
  var modelKey = componentDictionary[libraryId].modelKey;
@@ -261,6 +261,24 @@ var SceneOperationsManager = /*#__PURE__*/function () {
261
261
  }
262
262
  }
263
263
  });
264
+
265
+ // Ensure CONNECTOR_GATEWAY_SPHERE exists even when all connectors are nested inside
266
+ // component children (e.g. SAMPLE_1.json inline connector definitions). Without
267
+ // this geometry the connector meshes fall back to empty BufferGeometry, which then
268
+ // causes _preserveConnectorChildren to drop them during GLB model replacement.
269
+ if (!geometries['CONNECTOR_GATEWAY_SPHERE']) {
270
+ var hasNestedConnectors = data.scene.children.some(function (child) {
271
+ var _child$userData3;
272
+ return ((_child$userData3 = child.userData) === null || _child$userData3 === void 0 ? void 0 : _child$userData3.objectType) === 'component' && Array.isArray(child.children) && child.children.some(function (nestedChild) {
273
+ var _nestedChild$userData;
274
+ return ((_nestedChild$userData = nestedChild.userData) === null || _nestedChild$userData === void 0 ? void 0 : _nestedChild$userData.objectType) === 'connector';
275
+ });
276
+ });
277
+ if (hasNestedConnectors) {
278
+ geometries['CONNECTOR_GATEWAY_SPHERE'] = new THREE__namespace.SphereGeometry(0.1, 16, 16);
279
+ console.log('🔮 Created shared sphere geometry for nested inline connectors (radius: 0.1)');
280
+ }
281
+ }
264
282
  return geometries;
265
283
  }
266
284
 
@@ -646,12 +664,12 @@ var SceneOperationsManager = /*#__PURE__*/function () {
646
664
  _step;
647
665
  try {
648
666
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
649
- var _object$userData, _child$userData3;
667
+ var _object$userData, _child$userData4;
650
668
  var child = _step.value;
651
669
  // Enhanced matching logic with hardcoded UUID priority
652
670
 
653
671
  // Strategy 1: Direct hardcoded UUID match (HIGHEST PRIORITY)
654
- if (child.uuid === object.uuid || child.uuid === ((_object$userData = object.userData) === null || _object$userData === void 0 ? void 0 : _object$userData.originalUuid) || object.uuid === ((_child$userData3 = child.userData) === null || _child$userData3 === void 0 ? void 0 : _child$userData3.originalUuid)) {
672
+ if (child.uuid === object.uuid || child.uuid === ((_object$userData = object.userData) === null || _object$userData === void 0 ? void 0 : _object$userData.originalUuid) || object.uuid === ((_child$userData4 = child.userData) === null || _child$userData4 === void 0 ? void 0 : _child$userData4.originalUuid)) {
655
673
  return child;
656
674
  }
657
675
 
@@ -910,10 +928,10 @@ var SceneOperationsManager = /*#__PURE__*/function () {
910
928
  var componentsProcessed = 0;
911
929
  var connectorsInjected = 0;
912
930
  data.scene.children.forEach(function (child) {
913
- var _child$userData4, _child$userData5, _child$userData6;
914
- var childType = ((_child$userData4 = child.userData) === null || _child$userData4 === void 0 ? void 0 : _child$userData4.objectType) || ((_child$userData5 = child.userData) === null || _child$userData5 === void 0 ? void 0 : _child$userData5.objectType);
931
+ var _child$userData5, _child$userData6, _child$userData7;
932
+ var childType = ((_child$userData5 = child.userData) === null || _child$userData5 === void 0 ? void 0 : _child$userData5.objectType) || ((_child$userData6 = child.userData) === null || _child$userData6 === void 0 ? void 0 : _child$userData6.objectType);
915
933
  // Only process components with libraryId
916
- if (childType === 'component' && (_child$userData6 = child.userData) !== null && _child$userData6 !== void 0 && _child$userData6.libraryId) {
934
+ if (childType === 'component' && (_child$userData7 = child.userData) !== null && _child$userData7 !== void 0 && _child$userData7.libraryId) {
917
935
  var libraryId = child.userData.libraryId;
918
936
  var dictEntry = componentDictionary[libraryId];
919
937
 
@@ -1070,17 +1088,17 @@ var SceneOperationsManager = /*#__PURE__*/function () {
1070
1088
  geometries = this.createSceneGeometries(data, componentDictionary); // Create basic objects and track GLB replacements
1071
1089
  libraryObjectsToReplace = [];
1072
1090
  data.scene.children.forEach(function (child, index) {
1073
- var _child$userData7, _child$userData8;
1091
+ var _child$userData8, _child$userData9;
1074
1092
  var createdObject = _this4.createSceneObject(child, geometries, materials, componentDictionary);
1075
1093
  _this4.sceneViewer.scene.add(createdObject);
1076
1094
 
1077
1095
  // Track objects that need GLB model replacement
1078
- if ((_child$userData7 = child.userData) !== null && _child$userData7 !== void 0 && _child$userData7.libraryId && componentDictionary[(_child$userData8 = child.userData) === null || _child$userData8 === void 0 ? void 0 : _child$userData8.libraryId]) {
1079
- var _child$userData9;
1096
+ if ((_child$userData8 = child.userData) !== null && _child$userData8 !== void 0 && _child$userData8.libraryId && componentDictionary[(_child$userData9 = child.userData) === null || _child$userData9 === void 0 ? void 0 : _child$userData9.libraryId]) {
1097
+ var _child$userData0;
1080
1098
  libraryObjectsToReplace.push({
1081
1099
  basicObject: createdObject,
1082
1100
  jsonData: child,
1083
- componentData: componentDictionary[(_child$userData9 = child.userData) === null || _child$userData9 === void 0 ? void 0 : _child$userData9.libraryId]
1101
+ componentData: componentDictionary[(_child$userData0 = child.userData) === null || _child$userData0 === void 0 ? void 0 : _child$userData0.libraryId]
1084
1102
  });
1085
1103
  }
1086
1104
  });
@@ -1219,8 +1237,8 @@ var SceneOperationsManager = /*#__PURE__*/function () {
1219
1237
  var instanceBehaviors = [];
1220
1238
  if (Array.isArray(data === null || data === void 0 || (_data$scene3 = data.scene) === null || _data$scene3 === void 0 ? void 0 : _data$scene3.children)) {
1221
1239
  data.scene.children.forEach(function (child) {
1222
- var _child$userData0, _compData$defaultBeha;
1223
- var libraryId = (_child$userData0 = child.userData) === null || _child$userData0 === void 0 ? void 0 : _child$userData0.libraryId;
1240
+ var _child$userData1, _compData$defaultBeha;
1241
+ var libraryId = (_child$userData1 = child.userData) === null || _child$userData1 === void 0 ? void 0 : _child$userData1.libraryId;
1224
1242
  if (!libraryId) return;
1225
1243
  var instanceUuid = child.uuid;
1226
1244
  // Skip instances whose defaults were already resolved by Step A
@@ -1611,8 +1629,8 @@ var SceneOperationsManager = /*#__PURE__*/function () {
1611
1629
  // Process children (connectors, etc.) if they exist
1612
1630
  if (componentModel.children && componentModel.children.length > 0) {
1613
1631
  componentModel.children.forEach(function (child) {
1614
- var _child$userData1, _child$userData10;
1615
- var childType = ((_child$userData1 = child.userData) === null || _child$userData1 === void 0 ? void 0 : _child$userData1.objectType) || ((_child$userData10 = child.userData) === null || _child$userData10 === void 0 ? void 0 : _child$userData10.objectType);
1632
+ var _child$userData10, _child$userData11;
1633
+ var childType = ((_child$userData10 = child.userData) === null || _child$userData10 === void 0 ? void 0 : _child$userData10.objectType) || ((_child$userData11 = child.userData) === null || _child$userData11 === void 0 ? void 0 : _child$userData11.objectType);
1616
1634
  if (childType === 'connector') {
1617
1635
  var _child$geometry;
1618
1636
  var childBoundingBox = new THREE__namespace.Box3().setFromObject(child);
@@ -1697,8 +1715,8 @@ var SceneOperationsManager = /*#__PURE__*/function () {
1697
1715
  if (segment.children && segment.children.length > 0) {
1698
1716
  var childrenToRemove = _rollupPluginBabelHelpers.toConsumableArray(segment.children);
1699
1717
  childrenToRemove.forEach(function (child) {
1700
- var _child$userData11;
1701
- if ((_child$userData11 = child.userData) !== null && _child$userData11 !== void 0 && _child$userData11.isPipeElbow) {
1718
+ var _child$userData12;
1719
+ if ((_child$userData12 = child.userData) !== null && _child$userData12 !== void 0 && _child$userData12.isPipeElbow) {
1702
1720
  console.log("\uD83D\uDDD1\uFE0F Removing elbow child from segment before manualization: ".concat(child.uuid));
1703
1721
  segment.remove(child);
1704
1722
  if (child.geometry) child.geometry.dispose();
@@ -15,7 +15,7 @@ var CentralPlant = /*#__PURE__*/function (_BaseDisposable) {
15
15
  * Initialize the CentralPlant manager
16
16
  *
17
17
  * @constructor
18
- * @version 0.1.94
18
+ * @version 0.1.95
19
19
  * @updated 2025-10-22
20
20
  *
21
21
  * @description Creates a new CentralPlant instance and initializes internal managers and utilities.
@@ -122,9 +122,13 @@ var ModelManager = /*#__PURE__*/function () {
122
122
  var _this = this;
123
123
  var connectorChildren = [];
124
124
  targetMesh.children.forEach(function (child, index) {
125
+ var _child$userData;
125
126
  var isConnectorGeometry = child.geometry && (child.geometry.uuid === 'CONNECTOR-GEO' || child.geometry.type === 'SphereGeometry' && child.geometry.parameters);
126
127
  var isConnectorByName = child.name && child.name.toLowerCase().includes('connector');
127
- if (isConnectorGeometry && isConnectorByName) {
128
+ // Also recognise connectors declared via userData (e.g. inline connectors from SAMPLE_1.json
129
+ // whose geometry may be a fallback BufferGeometry rather than a SphereGeometry).
130
+ var isConnectorByUserData = ((_child$userData = child.userData) === null || _child$userData === void 0 ? void 0 : _child$userData.objectType) === 'connector';
131
+ if (isConnectorGeometry && isConnectorByName || isConnectorByUserData) {
128
132
  // Ensure userData exists and has worldBoundingBox
129
133
  if (!child.userData) child.userData = {};
130
134
  if (!child.userData.worldBoundingBox) {
@@ -408,8 +412,8 @@ var ModelManager = /*#__PURE__*/function () {
408
412
  requiredModels = new Set();
409
413
  console.log("\uD83D\uDD0D Checking ".concat(data.scene.children.length, " scene objects for required models..."));
410
414
  data.scene.children.forEach(function (child) {
411
- var _child$userData;
412
- var libraryId = (_child$userData = child.userData) === null || _child$userData === void 0 ? void 0 : _child$userData.libraryId;
415
+ var _child$userData2;
416
+ var libraryId = (_child$userData2 = child.userData) === null || _child$userData2 === void 0 ? void 0 : _child$userData2.libraryId;
413
417
  if (libraryId) {
414
418
  if (componentDictionary[libraryId]) {
415
419
  var modelKey = componentDictionary[libraryId].modelKey;
@@ -237,6 +237,24 @@ var SceneOperationsManager = /*#__PURE__*/function () {
237
237
  }
238
238
  }
239
239
  });
240
+
241
+ // Ensure CONNECTOR_GATEWAY_SPHERE exists even when all connectors are nested inside
242
+ // component children (e.g. SAMPLE_1.json inline connector definitions). Without
243
+ // this geometry the connector meshes fall back to empty BufferGeometry, which then
244
+ // causes _preserveConnectorChildren to drop them during GLB model replacement.
245
+ if (!geometries['CONNECTOR_GATEWAY_SPHERE']) {
246
+ var hasNestedConnectors = data.scene.children.some(function (child) {
247
+ var _child$userData3;
248
+ return ((_child$userData3 = child.userData) === null || _child$userData3 === void 0 ? void 0 : _child$userData3.objectType) === 'component' && Array.isArray(child.children) && child.children.some(function (nestedChild) {
249
+ var _nestedChild$userData;
250
+ return ((_nestedChild$userData = nestedChild.userData) === null || _nestedChild$userData === void 0 ? void 0 : _nestedChild$userData.objectType) === 'connector';
251
+ });
252
+ });
253
+ if (hasNestedConnectors) {
254
+ geometries['CONNECTOR_GATEWAY_SPHERE'] = new THREE.SphereGeometry(0.1, 16, 16);
255
+ console.log('🔮 Created shared sphere geometry for nested inline connectors (radius: 0.1)');
256
+ }
257
+ }
240
258
  return geometries;
241
259
  }
242
260
 
@@ -622,12 +640,12 @@ var SceneOperationsManager = /*#__PURE__*/function () {
622
640
  _step;
623
641
  try {
624
642
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
625
- var _object$userData, _child$userData3;
643
+ var _object$userData, _child$userData4;
626
644
  var child = _step.value;
627
645
  // Enhanced matching logic with hardcoded UUID priority
628
646
 
629
647
  // Strategy 1: Direct hardcoded UUID match (HIGHEST PRIORITY)
630
- if (child.uuid === object.uuid || child.uuid === ((_object$userData = object.userData) === null || _object$userData === void 0 ? void 0 : _object$userData.originalUuid) || object.uuid === ((_child$userData3 = child.userData) === null || _child$userData3 === void 0 ? void 0 : _child$userData3.originalUuid)) {
648
+ if (child.uuid === object.uuid || child.uuid === ((_object$userData = object.userData) === null || _object$userData === void 0 ? void 0 : _object$userData.originalUuid) || object.uuid === ((_child$userData4 = child.userData) === null || _child$userData4 === void 0 ? void 0 : _child$userData4.originalUuid)) {
631
649
  return child;
632
650
  }
633
651
 
@@ -886,10 +904,10 @@ var SceneOperationsManager = /*#__PURE__*/function () {
886
904
  var componentsProcessed = 0;
887
905
  var connectorsInjected = 0;
888
906
  data.scene.children.forEach(function (child) {
889
- var _child$userData4, _child$userData5, _child$userData6;
890
- var childType = ((_child$userData4 = child.userData) === null || _child$userData4 === void 0 ? void 0 : _child$userData4.objectType) || ((_child$userData5 = child.userData) === null || _child$userData5 === void 0 ? void 0 : _child$userData5.objectType);
907
+ var _child$userData5, _child$userData6, _child$userData7;
908
+ var childType = ((_child$userData5 = child.userData) === null || _child$userData5 === void 0 ? void 0 : _child$userData5.objectType) || ((_child$userData6 = child.userData) === null || _child$userData6 === void 0 ? void 0 : _child$userData6.objectType);
891
909
  // Only process components with libraryId
892
- if (childType === 'component' && (_child$userData6 = child.userData) !== null && _child$userData6 !== void 0 && _child$userData6.libraryId) {
910
+ if (childType === 'component' && (_child$userData7 = child.userData) !== null && _child$userData7 !== void 0 && _child$userData7.libraryId) {
893
911
  var libraryId = child.userData.libraryId;
894
912
  var dictEntry = componentDictionary[libraryId];
895
913
 
@@ -1046,17 +1064,17 @@ var SceneOperationsManager = /*#__PURE__*/function () {
1046
1064
  geometries = this.createSceneGeometries(data, componentDictionary); // Create basic objects and track GLB replacements
1047
1065
  libraryObjectsToReplace = [];
1048
1066
  data.scene.children.forEach(function (child, index) {
1049
- var _child$userData7, _child$userData8;
1067
+ var _child$userData8, _child$userData9;
1050
1068
  var createdObject = _this4.createSceneObject(child, geometries, materials, componentDictionary);
1051
1069
  _this4.sceneViewer.scene.add(createdObject);
1052
1070
 
1053
1071
  // Track objects that need GLB model replacement
1054
- if ((_child$userData7 = child.userData) !== null && _child$userData7 !== void 0 && _child$userData7.libraryId && componentDictionary[(_child$userData8 = child.userData) === null || _child$userData8 === void 0 ? void 0 : _child$userData8.libraryId]) {
1055
- var _child$userData9;
1072
+ if ((_child$userData8 = child.userData) !== null && _child$userData8 !== void 0 && _child$userData8.libraryId && componentDictionary[(_child$userData9 = child.userData) === null || _child$userData9 === void 0 ? void 0 : _child$userData9.libraryId]) {
1073
+ var _child$userData0;
1056
1074
  libraryObjectsToReplace.push({
1057
1075
  basicObject: createdObject,
1058
1076
  jsonData: child,
1059
- componentData: componentDictionary[(_child$userData9 = child.userData) === null || _child$userData9 === void 0 ? void 0 : _child$userData9.libraryId]
1077
+ componentData: componentDictionary[(_child$userData0 = child.userData) === null || _child$userData0 === void 0 ? void 0 : _child$userData0.libraryId]
1060
1078
  });
1061
1079
  }
1062
1080
  });
@@ -1195,8 +1213,8 @@ var SceneOperationsManager = /*#__PURE__*/function () {
1195
1213
  var instanceBehaviors = [];
1196
1214
  if (Array.isArray(data === null || data === void 0 || (_data$scene3 = data.scene) === null || _data$scene3 === void 0 ? void 0 : _data$scene3.children)) {
1197
1215
  data.scene.children.forEach(function (child) {
1198
- var _child$userData0, _compData$defaultBeha;
1199
- var libraryId = (_child$userData0 = child.userData) === null || _child$userData0 === void 0 ? void 0 : _child$userData0.libraryId;
1216
+ var _child$userData1, _compData$defaultBeha;
1217
+ var libraryId = (_child$userData1 = child.userData) === null || _child$userData1 === void 0 ? void 0 : _child$userData1.libraryId;
1200
1218
  if (!libraryId) return;
1201
1219
  var instanceUuid = child.uuid;
1202
1220
  // Skip instances whose defaults were already resolved by Step A
@@ -1587,8 +1605,8 @@ var SceneOperationsManager = /*#__PURE__*/function () {
1587
1605
  // Process children (connectors, etc.) if they exist
1588
1606
  if (componentModel.children && componentModel.children.length > 0) {
1589
1607
  componentModel.children.forEach(function (child) {
1590
- var _child$userData1, _child$userData10;
1591
- var childType = ((_child$userData1 = child.userData) === null || _child$userData1 === void 0 ? void 0 : _child$userData1.objectType) || ((_child$userData10 = child.userData) === null || _child$userData10 === void 0 ? void 0 : _child$userData10.objectType);
1608
+ var _child$userData10, _child$userData11;
1609
+ var childType = ((_child$userData10 = child.userData) === null || _child$userData10 === void 0 ? void 0 : _child$userData10.objectType) || ((_child$userData11 = child.userData) === null || _child$userData11 === void 0 ? void 0 : _child$userData11.objectType);
1592
1610
  if (childType === 'connector') {
1593
1611
  var _child$geometry;
1594
1612
  var childBoundingBox = new THREE.Box3().setFromObject(child);
@@ -1673,8 +1691,8 @@ var SceneOperationsManager = /*#__PURE__*/function () {
1673
1691
  if (segment.children && segment.children.length > 0) {
1674
1692
  var childrenToRemove = _toConsumableArray(segment.children);
1675
1693
  childrenToRemove.forEach(function (child) {
1676
- var _child$userData11;
1677
- if ((_child$userData11 = child.userData) !== null && _child$userData11 !== void 0 && _child$userData11.isPipeElbow) {
1694
+ var _child$userData12;
1695
+ if ((_child$userData12 = child.userData) !== null && _child$userData12 !== void 0 && _child$userData12.isPipeElbow) {
1678
1696
  console.log("\uD83D\uDDD1\uFE0F Removing elbow child from segment before manualization: ".concat(child.uuid));
1679
1697
  segment.remove(child);
1680
1698
  if (child.geometry) child.geometry.dispose();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@2112-lab/central-plant",
3
- "version": "0.1.94",
3
+ "version": "0.1.95",
4
4
  "description": "Utility modules for the Central Plant Application",
5
5
  "main": "dist/bundle/index.js",
6
6
  "module": "dist/esm/src/index.js",