@2112-lab/central-plant 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/cjs/_virtual/_rollupPluginBabelHelpers.js +432 -1
  2. package/dist/cjs/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1448 -1
  3. package/dist/cjs/node_modules/three/examples/jsm/controls/OrbitControls.js +1853 -1
  4. package/dist/cjs/node_modules/three/examples/jsm/exporters/GLTFExporter.js +3537 -1
  5. package/dist/cjs/node_modules/three/examples/jsm/exporters/OBJExporter.js +305 -1
  6. package/dist/cjs/node_modules/three/examples/jsm/exporters/PLYExporter.js +542 -1
  7. package/dist/cjs/node_modules/three/examples/jsm/exporters/STLExporter.js +218 -1
  8. package/dist/cjs/node_modules/three/examples/jsm/loaders/DRACOLoader.js +683 -1
  9. package/dist/cjs/node_modules/three/examples/jsm/loaders/GLTFLoader.js +4811 -1
  10. package/dist/cjs/node_modules/three/examples/jsm/loaders/RGBELoader.js +480 -1
  11. package/dist/cjs/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +309 -1
  12. package/dist/cjs/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +120 -1
  13. package/dist/cjs/src/analysis/analysis.js +560 -1
  14. package/dist/cjs/src/analysis/testing.js +958 -1
  15. package/dist/cjs/src/core/centralPlant.js +1149 -1
  16. package/dist/cjs/src/core/debugLogger.js +175 -1
  17. package/dist/cjs/src/core/mathUtils.js +574 -1
  18. package/dist/cjs/src/core/nameUtils.js +93 -1
  19. package/dist/cjs/src/data/export.js +716 -1
  20. package/dist/cjs/src/data/import.js +380 -1
  21. package/dist/cjs/src/data/numerics.js +522 -1
  22. package/dist/cjs/src/helpers/sceneHelper.js +572 -1
  23. package/dist/cjs/src/index.js +69 -1
  24. package/dist/cjs/src/managers/components/animationManager.js +123 -1
  25. package/dist/cjs/src/managers/components/componentManager.js +332 -1
  26. package/dist/cjs/src/managers/components/pathfindingManager.js +1441 -1
  27. package/dist/cjs/src/managers/controls/TransformControls.js +1063 -1
  28. package/dist/cjs/src/managers/controls/cameraControlsManager.js +79 -1
  29. package/dist/cjs/src/managers/controls/dragDropManager.js +1026 -1
  30. package/dist/cjs/src/managers/controls/keyboardControlsManager.js +395 -1
  31. package/dist/cjs/src/managers/controls/transformControlsManager.js +1807 -1
  32. package/dist/cjs/src/managers/environment/environmentManager.js +714 -1
  33. package/dist/cjs/src/managers/environment/textureConfig.js +229 -1
  34. package/dist/cjs/src/managers/scene/sceneExportManager.js +264 -1
  35. package/dist/cjs/src/managers/scene/sceneInitializationManager.js +346 -1
  36. package/dist/cjs/src/managers/scene/sceneOperationsManager.js +1509 -1
  37. package/dist/cjs/src/managers/scene/sceneTooltipsManager.js +661 -1
  38. package/dist/cjs/src/managers/system/disposalManager.js +444 -1
  39. package/dist/cjs/src/managers/system/hotReloadManager.js +291 -1
  40. package/dist/cjs/src/managers/system/performanceMonitor.js +863 -1
  41. package/dist/cjs/src/rendering/modelPreloader.js +369 -1
  42. package/dist/cjs/src/rendering/rendering2D.js +631 -1
  43. package/dist/cjs/src/rendering/rendering3D.js +685 -1
  44. package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +396 -1
  45. package/dist/esm/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1444 -1
  46. package/dist/esm/node_modules/three/examples/jsm/controls/OrbitControls.js +1849 -1
  47. package/dist/esm/node_modules/three/examples/jsm/exporters/GLTFExporter.js +3533 -1
  48. package/dist/esm/node_modules/three/examples/jsm/exporters/OBJExporter.js +301 -1
  49. package/dist/esm/node_modules/three/examples/jsm/exporters/PLYExporter.js +538 -1
  50. package/dist/esm/node_modules/three/examples/jsm/exporters/STLExporter.js +214 -1
  51. package/dist/esm/node_modules/three/examples/jsm/loaders/DRACOLoader.js +679 -1
  52. package/dist/esm/node_modules/three/examples/jsm/loaders/GLTFLoader.js +4807 -1
  53. package/dist/esm/node_modules/three/examples/jsm/loaders/RGBELoader.js +476 -1
  54. package/dist/esm/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +304 -1
  55. package/dist/esm/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +116 -1
  56. package/dist/esm/src/analysis/analysis.js +536 -1
  57. package/dist/esm/src/analysis/testing.js +954 -1
  58. package/dist/esm/src/core/centralPlant.js +1144 -1
  59. package/dist/esm/src/core/debugLogger.js +167 -1
  60. package/dist/esm/src/core/mathUtils.js +570 -1
  61. package/dist/esm/src/core/nameUtils.js +87 -1
  62. package/dist/esm/src/data/export.js +712 -1
  63. package/dist/esm/src/data/import.js +356 -1
  64. package/dist/esm/src/data/numerics.js +518 -1
  65. package/dist/esm/src/helpers/sceneHelper.js +547 -1
  66. package/dist/esm/src/index.js +35 -1
  67. package/dist/esm/src/managers/components/animationManager.js +119 -1
  68. package/dist/esm/src/managers/components/componentManager.js +328 -1
  69. package/dist/esm/src/managers/components/pathfindingManager.js +1417 -1
  70. package/dist/esm/src/managers/controls/TransformControls.js +1057 -1
  71. package/dist/esm/src/managers/controls/cameraControlsManager.js +75 -1
  72. package/dist/esm/src/managers/controls/dragDropManager.js +1002 -1
  73. package/dist/esm/src/managers/controls/keyboardControlsManager.js +371 -1
  74. package/dist/esm/src/managers/controls/transformControlsManager.js +1782 -1
  75. package/dist/esm/src/managers/environment/environmentManager.js +690 -1
  76. package/dist/esm/src/managers/environment/textureConfig.js +202 -1
  77. package/dist/esm/src/managers/scene/sceneExportManager.js +260 -1
  78. package/dist/esm/src/managers/scene/sceneInitializationManager.js +322 -1
  79. package/dist/esm/src/managers/scene/sceneOperationsManager.js +1485 -1
  80. package/dist/esm/src/managers/scene/sceneTooltipsManager.js +637 -1
  81. package/dist/esm/src/managers/system/disposalManager.js +440 -1
  82. package/dist/esm/src/managers/system/hotReloadManager.js +287 -1
  83. package/dist/esm/src/managers/system/performanceMonitor.js +858 -1
  84. package/dist/esm/src/rendering/modelPreloader.js +364 -1
  85. package/dist/esm/src/rendering/rendering2D.js +627 -1
  86. package/dist/esm/src/rendering/rendering3D.js +661 -1
  87. package/package.json +1 -1
@@ -1 +1,1144 @@
1
- import{createClass as e,objectSpread2 as t,typeof as n,classCallCheck as i}from"../../_virtual/_rollupPluginBabelHelpers.js";import{createTransformControls as a}from"../managers/controls/transformControlsManager.js";import{HotReloadManager as o}from"../managers/system/hotReloadManager.js";import{DisposalManager as s}from"../managers/system/disposalManager.js";import{SceneExportManager as r}from"../managers/scene/sceneExportManager.js";import{ComponentManager as l}from"../managers/components/componentManager.js";import{SceneInitializationManager as u}from"../managers/scene/sceneInitializationManager.js";import{EnvironmentManager as c}from"../managers/environment/environmentManager.js";import{KeyboardControlsManager as h}from"../managers/controls/keyboardControlsManager.js";import{PathfindingManager as m}from"../managers/components/pathfindingManager.js";import{SceneOperationsManager as d}from"../managers/scene/sceneOperationsManager.js";import{AnimationManager as f}from"../managers/components/animationManager.js";import{CameraControlsManager as v}from"../managers/controls/cameraControlsManager.js";import{SceneTooltipsManager as p}from"../managers/scene/sceneTooltipsManager.js";import{generateUuidFromName as g,getHardcodedUuid as y}from"./nameUtils.js";import{logger as k,transformLogger as w,pathfinderLogger as M,modelLogger as S}from"./debugLogger.js";import j from"../rendering/modelPreloader.js";import b from"../managers/controls/dragDropManager.js";import{SceneHelper as C}from"../helpers/sceneHelper.js";var D=function(){return e(function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;i(this,e),this.sceneViewer=t,this.managers={},this.utilities={},this.isInitialized=!1,this.importedSceneData=null,this.metadata={},this.transformHistory={lastTransform:null},this.setDefaultSceneMetadata(),this.initializeUtilities(),t&&(this.initializeManagers(),this.isInitialized=!0)},[{key:"setSceneViewer",value:function(e){this.sceneViewer=e,!this.isInitialized&&e&&(this.initializeManagers(),this.isInitialized=!0)}},{key:"initializeManagers",value:function(){this.sceneViewer&&(this.managers.hotReloadManager=new o(this.sceneViewer),this.managers.disposalManager=new s(this.sceneViewer),this.managers.sceneExportManager=new r(this.sceneViewer),this.managers.componentManager=new l(this.sceneViewer),this.managers.sceneInitializationManager=new u(this.sceneViewer),this.managers.environmentManager=new c(this.sceneViewer),this.managers.keyboardControlsManager=new h(this.sceneViewer),this.managers.pathfindingManager=new m(this.sceneViewer),this.managers.sceneOperationsManager=new d(this.sceneViewer),this.managers.animationManager=new f(this.sceneViewer),this.managers.cameraControlsManager=new v(this.sceneViewer))}},{key:"initializeUtilities",value:function(){this.utilities.createTransformControls=a,this.utilities.generateUuidFromName=g,this.utilities.getHardcodedUuid=y,this.utilities.logger=k,this.utilities.transformLogger=w,this.utilities.pathfinderLogger=M,this.utilities.modelLogger=S,this.utilities.modelPreloader=j,this.utilities.SceneHelper=C,this.utilities.DragDropManager=b}},{key:"attachToComponent",value:function(){var e=this;this.sceneViewer&&(this.isInitialized||this.initializeManagers(),Object.keys(this.managers).forEach(function(t){e.sceneViewer[t]=e.managers[t]}),Object.keys(this.utilities).forEach(function(t){e.sceneViewer[t]=e.utilities[t]}))}},{key:"initializePostSceneManagers",value:function(){this.sceneViewer.$refs.container&&this.sceneViewer.camera&&this.sceneViewer.scene&&(this.managers.tooltipsManager=new p(this.sceneViewer.$refs.container,this.sceneViewer.camera,this.sceneViewer.scene),this.sceneViewer.tooltipsManager=this.managers.tooltipsManager),this.sceneViewer.scene&&this.sceneViewer.camera&&(this.managers.dragDropManager=new b({scene:this.sceneViewer.scene,camera:this.sceneViewer.camera,transformManager:this.sceneViewer.transformManager,modelPreloader:this.utilities.modelPreloader,componentManager:this.sceneViewer.componentManager}),this.sceneViewer.dragDropManager=this.managers.dragDropManager),this.sceneViewer.scene&&this.sceneViewer.camera&&this.sceneViewer.renderer&&(this.utilities.sceneHelper=new C({scene:this.sceneViewer.scene,camera:this.sceneViewer.camera,renderer:this.sceneViewer.renderer,controls:this.sceneViewer.controls,transformManager:this.sceneViewer.transformManager,componentManager:this.sceneViewer.componentManager,pathfindingManager:this.sceneViewer.pathfindingManager,currentSceneData:this.sceneViewer.currentSceneData,logger:this.utilities.logger}),this.sceneViewer.sceneHelper=this.utilities.sceneHelper)}},{key:"updateSceneHelperData",value:function(e){this.utilities.sceneHelper&&"function"==typeof this.utilities.sceneHelper.updateSceneData&&this.utilities.sceneHelper.updateSceneData(e)}},{key:"setImportedSceneData",value:function(e){this.importedSceneData=t({},e),this.setDefaultImportedSceneMetadata(e),this.utilities.sceneHelper&&"function"==typeof this.utilities.sceneHelper.updateSceneData&&this.utilities.sceneHelper.updateSceneData(e)}},{key:"getImportedSceneData",value:function(){return this.importedSceneData}},{key:"getImportedConnections",value:function(){var e;return(null===(e=this.importedSceneData)||void 0===e?void 0:e.connections)||[]}},{key:"getImportedSceneObjects",value:function(){var e;return(null===(e=this.importedSceneData)||void 0===e||null===(e=e.scene)||void 0===e?void 0:e.object)||null}},{key:"clearImportedSceneData",value:function(){this.importedSceneData=null}},{key:"setMetadata",value:function(e,t){this.metadata[e]=t}},{key:"getMetadata",value:function(e){return this.metadata[e]}},{key:"getAllMetadata",value:function(){return t({},this.metadata)}},{key:"removeMetadata",value:function(e){delete this.metadata[e]}},{key:"clearAllMetadata",value:function(){this.metadata={}}},{key:"clearAllData",value:function(){this.metadata={},this.transformHistory.lastTransform=null}},{key:"recordTransform",value:function(e){var t,n;if(e&&e.object){e.previousValues;var i={type:e.type,object:e.object,values:e.values,previousValues:e.previousValues,timestamp:(new Date).toISOString(),objectId:(null===(t=e.object)||void 0===t?void 0:t.uuid)||(null===(n=e.object)||void 0===n?void 0:n.id)||"unknown"};this.transformHistory.lastTransform=i}}},{key:"getLastTransform",value:function(){return this.transformHistory.lastTransform}},{key:"getTransformHistory",value:function(){return t({},this.transformHistory)}},{key:"clearTransformHistory",value:function(){this.transformHistory.lastTransform=null}},{key:"hasMetadata",value:function(e){return e in this.metadata}},{key:"setDefaultSceneMetadata",value:function(){var e=this,t={sceneInfo:{name:"Untitled Central Plant Scene",description:"A central plant facility scene",version:"1.0.0",created:(new Date).toISOString(),lastModified:(new Date).toISOString(),author:"Engineering Team"},projectSettings:{units:"metric",scale:1,gridSize:1,snapToGrid:!0,showGrid:!0,showAxes:!0},viewportSettings:{defaultViewMode:"perspective",backgroundType:"skybox",showEnvironment:!0,autoRotate:!1,cameraPosition:{x:10,y:10,z:10},cameraTarget:{x:0,y:0,z:0}},componentSettings:{defaultComponentScale:1,showBoundingBoxes:!1,showConnectionPaths:!0,highlightOnHover:!0,selectionOutlineColor:"#00ff00"},spatialBoundaries:{min:{x:-60,y:-16,z:-60},max:{x:60,y:16,z:60},center:{x:0,y:4,z:0}},systemInfo:{centralPlantVersion:"2.0.0",buildDate:(new Date).toISOString(),platform:"undefined"!=typeof window?window.navigator.platform:"Unknown",userAgent:"undefined"!=typeof window?window.navigator.userAgent:"Unknown"}};Object.keys(t).forEach(function(n){e.hasMetadata(n)||e.setMetadata(n,t[n])})}},{key:"setDefaultImportedSceneMetadata",value:function(e){var n,i,a,o=(new Date).toISOString(),s=(null===(n=e.connections)||void 0===n?void 0:n.length)||0,r=(null===(i=e.scene)||void 0===i||null===(i=i.object)||void 0===i||null===(i=i.children)||void 0===i?void 0:i.length)||0,l={};null!==(a=e.scene)&&void 0!==a&&null!==(a=a.object)&&void 0!==a&&a.children&&e.scene.object.children.forEach(function(e){var t,n=(null===(t=e.userData)||void 0===t?void 0:t.componentType)||"unknown";l[n]=(l[n]||0)+1});var u={importInfo:{importTimestamp:o,originalFileName:null,fileSize:null,importMethod:"file-upload",importVersion:"1.0.0"},sceneAnalysis:{totalComponents:r,totalConnections:s,componentTypes:l,sceneComplexity:this.calculateSceneComplexity(s,r),hasValidStructure:this.validateImportedSceneStructure(e)},dataQuality:{hasConnections:s>0,hasComponents:r>0,hasValidScene:!!e.scene,missingData:this.identifyMissingData(e),warnings:this.generateImportWarnings(e)},processingStats:{processedAt:o,processingDuration:null,memoryUsage:this.estimateMemoryUsage(e),cacheStatus:"pending"}};if(this.setMetadata("lastImport",u),this.hasMetadata("sceneInfo")){var c=this.getMetadata("sceneInfo");this.setMetadata("sceneInfo",t(t({},c),{},{lastModified:o,importSource:"file-import",dataSourceType:"json"}))}}},{key:"calculateSceneComplexity",value:function(e,t){var n=e+t;return n<=10?"simple":n<=50?"moderate":n<=200?"complex":"very-complex"}},{key:"validateImportedSceneStructure",value:function(e){return!!(e&&e.scene&&e.scene.object&&Array.isArray(e.connections))}},{key:"identifyMissingData",value:function(e){var t,n=[];return e.connections&&0!==e.connections.length||n.push("No connection data found"),null!==(t=e.scene)&&void 0!==t&&null!==(t=t.object)&&void 0!==t&&t.children&&0!==e.scene.object.children.length||n.push("No component data found"),e.metadata||n.push("No metadata found"),e.version||n.push("No version information"),n}},{key:"generateImportWarnings",value:function(e){var t,n,i=[],a=(null===(t=e.scene)||void 0===t||null===(t=t.object)||void 0===t||null===(t=t.children)||void 0===t?void 0:t.length)||0;a>100&&i.push("Large scene detected (".concat(a," components) - may impact performance"));var o=(null===(n=e.connections)||void 0===n?void 0:n.length)||0;return a>0&&0===o&&i.push("Components found but no connections - scene may be incomplete"),e.version&&parseFloat(e.version)<1&&i.push("Scene data version is older than current - some features may not work correctly"),i}},{key:"estimateMemoryUsage",value:function(e){var t=JSON.stringify(e).length,n=(t/1024/1024).toFixed(2);return{jsonSizeBytes:t,estimatedMB:parseFloat(n),category:n<1?"small":n<10?"medium":"large"}}},{key:"updateMetadataCategory",value:function(e,n){if(this.hasMetadata(e)){var i=this.getMetadata(e);this.setMetadata(e,t(t({},i),n))}else this.setMetadata(e,n)}},{key:"undoTransform",value:function(){var e=this.getLastTransform();if(!e)return!1;try{var t,n=e.object,i=e.type,a=e.previousValues;if(!n||!a)return!1;if(this.debugTransformState(n,"Before Undo"),this.sceneViewer&&this.sceneViewer.scene){var o=!1;if(this.sceneViewer.scene.traverse(function(e){e===n&&(o=!0)}),!o)return!1}switch(i){case"translate":case"position":a.position?(void 0!==a.position.x&&(n.position.x=a.position.x),void 0!==a.position.y&&(n.position.y=a.position.y),void 0!==a.position.z&&(n.position.z=a.position.z)):(void 0!==a.x&&(n.position.x=a.x),void 0!==a.y&&(n.position.y=a.y),void 0!==a.z&&(n.position.z=a.z));break;case"rotate":case"rotation":a.rotation?(void 0!==a.rotation.x&&(n.rotation.x=a.rotation.x),void 0!==a.rotation.y&&(n.rotation.y=a.rotation.y),void 0!==a.rotation.z&&(n.rotation.z=a.rotation.z)):(void 0!==a.x&&(n.rotation.x=a.x),void 0!==a.y&&(n.rotation.y=a.y),void 0!==a.z&&(n.rotation.z=a.z));break;case"scale":a.scale?(void 0!==a.scale.x&&(n.scale.x=a.scale.x),void 0!==a.scale.y&&(n.scale.y=a.scale.y),void 0!==a.scale.z&&(n.scale.z=a.scale.z)):(void 0!==a.x&&(n.scale.x=a.x),void 0!==a.y&&(n.scale.y=a.y),void 0!==a.z&&(n.scale.z=a.z));break;default:return!1}n.updateMatrix(),n.updateMatrixWorld(!0);var s=null===(t=this.sceneViewer)||void 0===t?void 0:t.transformManager;if(s&&s.transformControls){var r=s.transformControls;r.object===n&&(r.detach(),s.ensureSceneAttachment&&s.ensureSceneAttachment(!0),r.attach(n),s.selectedObject=n,s.updateBoundingBox&&s.updateBoundingBox(),s.boundingBoxCache&&s.boundingBoxCache.has(n)&&s.boundingBoxCache.delete(n))}if(this.sceneViewer&&this.sceneViewer.sceneOperationsManager&&this.sceneViewer.currentSceneData)try{this.sceneViewer.onTransformEnd(n)}catch(e){}if("undefined"!=typeof window){var l=new CustomEvent("sceneUpdateComplete",{detail:{timestamp:Date.now(),action:"undo-transform",objectId:n.uuid||n.id||"unknown"}});window.dispatchEvent(l)}return this.clearTransformHistory(),this.ensureObjectSelectable(n),this.debugTransformState(n,"After Undo"),!0}catch(e){return!1}}},{key:"ensureObjectSelectable",value:function(e){if(!e||!this.sceneViewer)return!1;try{var t=this.sceneViewer.transformManager;return!!t&&(t.recoverTransformControls?t.recoverTransformControls(e):(e.updateMatrixWorld(!0),t.boundingBoxCache&&t.boundingBoxCache.has(e)&&t.boundingBoxCache.delete(e),t.ensureSceneAttachment&&t.ensureSceneAttachment(!0),t.selectedObject===e&&(t.deselectObject(),requestAnimationFrame(function(){t.selectObjectForTransformOnly(e)})),!0))}catch(e){return!1}}},{key:"debugTransformState",value:function(e){}},{key:"fixTransformControlsSelection",value:function(){if(!this.sceneViewer||!this.sceneViewer.transformManager)return!1;var e=this.sceneViewer.transformManager;if(e.recoverTransformControls&&e.recoverTransformControls())return!0;try{var t=e.currentMode,n=e.currentSpace;return e.transformControls&&(e.transformControls.detach(),e.scene.remove(e.transformControls),e.transformControls.dispose(),e.transformControls=null),e.createTransformControls(),e.setupEventListeners(),e.setMode(t),e.setSpace(n),!0}catch(e){return!1}}},{key:"isObjectInScene",value:function(e){if(!this.sceneViewer||!this.sceneViewer.scene)return!1;var t=!1;return this.sceneViewer.scene.traverse(function(n){n===e&&(t=!0)}),t}}])}();export{D as CentralPlant,D as default};
1
+ import { createClass as _createClass, objectSpread2 as _objectSpread2, typeof as _typeof, classCallCheck as _classCallCheck } from '../../_virtual/_rollupPluginBabelHelpers.js';
2
+ import { createTransformControls } from '../managers/controls/transformControlsManager.js';
3
+ import { HotReloadManager } from '../managers/system/hotReloadManager.js';
4
+ import { DisposalManager } from '../managers/system/disposalManager.js';
5
+ import { SceneExportManager } from '../managers/scene/sceneExportManager.js';
6
+ import { ComponentManager } from '../managers/components/componentManager.js';
7
+ import { SceneInitializationManager } from '../managers/scene/sceneInitializationManager.js';
8
+ import { EnvironmentManager } from '../managers/environment/environmentManager.js';
9
+ import { KeyboardControlsManager } from '../managers/controls/keyboardControlsManager.js';
10
+ import { PathfindingManager } from '../managers/components/pathfindingManager.js';
11
+ import { SceneOperationsManager } from '../managers/scene/sceneOperationsManager.js';
12
+ import { AnimationManager } from '../managers/components/animationManager.js';
13
+ import { CameraControlsManager } from '../managers/controls/cameraControlsManager.js';
14
+ import { SceneTooltipsManager } from '../managers/scene/sceneTooltipsManager.js';
15
+ import { generateUuidFromName, getHardcodedUuid } from './nameUtils.js';
16
+ import { logger, transformLogger, pathfinderLogger, modelLogger } from './debugLogger.js';
17
+ import modelPreloader from '../rendering/modelPreloader.js';
18
+ import DragDropManager from '../managers/controls/dragDropManager.js';
19
+ import { SceneHelper } from '../helpers/sceneHelper.js';
20
+
21
+ /**
22
+ * CentralPlant class that manages all scene utility instances
23
+ */
24
+ var CentralPlant = /*#__PURE__*/function () {
25
+ /**
26
+ * Initialize the CentralPlant manager
27
+ * @param {Object} sceneViewer - The SceneViewerEnhanced component instance
28
+ */
29
+ function CentralPlant() {
30
+ var sceneViewer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
31
+ _classCallCheck(this, CentralPlant);
32
+ this.sceneViewer = sceneViewer;
33
+ this.managers = {};
34
+ this.utilities = {};
35
+ this.isInitialized = false;
36
+
37
+ // Store imported scene data directly
38
+ this.importedSceneData = null;
39
+
40
+ // Add metadata storage
41
+ this.metadata = {};
42
+
43
+ // Add transform history tracking
44
+ this.transformHistory = {
45
+ lastTransform: null
46
+ };
47
+
48
+ // Set default scene metadata
49
+ this.setDefaultSceneMetadata();
50
+
51
+ // Initialize utilities immediately (they don't need scene viewer)
52
+ this.initializeUtilities();
53
+
54
+ // Initialize managers only if sceneViewer is provided
55
+ if (sceneViewer) {
56
+ this.initializeManagers();
57
+ this.isInitialized = true;
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Set the scene viewer instance and initialize managers if not already done
63
+ * @param {Object} sceneViewer - The SceneViewerEnhanced component instance
64
+ */
65
+ return _createClass(CentralPlant, [{
66
+ key: "setSceneViewer",
67
+ value: function setSceneViewer(sceneViewer) {
68
+ this.sceneViewer = sceneViewer;
69
+ if (!this.isInitialized && sceneViewer) {
70
+ this.initializeManagers();
71
+ this.isInitialized = true;
72
+ }
73
+ }
74
+
75
+ /**
76
+ * Initialize all manager instances
77
+ */
78
+ }, {
79
+ key: "initializeManagers",
80
+ value: function initializeManagers() {
81
+ if (!this.sceneViewer) {
82
+ console.warn('⚠️ Cannot initialize managers without scene viewer');
83
+ return;
84
+ }
85
+
86
+ // Initialize all managers consistently
87
+ this.managers.hotReloadManager = new HotReloadManager(this.sceneViewer);
88
+ this.managers.disposalManager = new DisposalManager(this.sceneViewer);
89
+ this.managers.sceneExportManager = new SceneExportManager(this.sceneViewer);
90
+ this.managers.componentManager = new ComponentManager(this.sceneViewer);
91
+ this.managers.sceneInitializationManager = new SceneInitializationManager(this.sceneViewer);
92
+ this.managers.environmentManager = new EnvironmentManager(this.sceneViewer);
93
+ this.managers.keyboardControlsManager = new KeyboardControlsManager(this.sceneViewer);
94
+ this.managers.pathfindingManager = new PathfindingManager(this.sceneViewer);
95
+ this.managers.sceneOperationsManager = new SceneOperationsManager(this.sceneViewer);
96
+ this.managers.animationManager = new AnimationManager(this.sceneViewer);
97
+ this.managers.cameraControlsManager = new CameraControlsManager(this.sceneViewer);
98
+
99
+ // All managers are now stored in the managers collection and will be attached via attachToComponent()
100
+ }
101
+
102
+ /**
103
+ * Initialize utility functions and objects
104
+ */
105
+ }, {
106
+ key: "initializeUtilities",
107
+ value: function initializeUtilities() {
108
+ // Transform controls factory function
109
+ this.utilities.createTransformControls = createTransformControls;
110
+
111
+ // Name utilities
112
+ this.utilities.generateUuidFromName = generateUuidFromName;
113
+ this.utilities.getHardcodedUuid = getHardcodedUuid;
114
+
115
+ // Loggers
116
+ this.utilities.logger = logger;
117
+ this.utilities.transformLogger = transformLogger;
118
+ this.utilities.pathfinderLogger = pathfinderLogger;
119
+ this.utilities.modelLogger = modelLogger;
120
+
121
+ // Model preloader
122
+ this.utilities.modelPreloader = modelPreloader;
123
+
124
+ // Scene helper utility
125
+ this.utilities.SceneHelper = SceneHelper;
126
+
127
+ // Drag drop manager factory (will be initialized after scene is ready)
128
+ this.utilities.DragDropManager = DragDropManager;
129
+ }
130
+
131
+ /**
132
+ * Set all managers and utilities on the scene viewer instance
133
+ */
134
+ }, {
135
+ key: "attachToComponent",
136
+ value: function attachToComponent() {
137
+ var _this = this;
138
+ if (!this.sceneViewer) {
139
+ console.warn('⚠️ Cannot attach to component: no scene viewer set');
140
+ return;
141
+ }
142
+
143
+ // Initialize managers if not already done
144
+ if (!this.isInitialized) {
145
+ this.initializeManagers();
146
+ }
147
+
148
+ // Attach all managers to the scene viewer instance
149
+ Object.keys(this.managers).forEach(function (key) {
150
+ _this.sceneViewer[key] = _this.managers[key];
151
+ });
152
+
153
+ // Attach utilities to the scene viewer instance
154
+ Object.keys(this.utilities).forEach(function (key) {
155
+ _this.sceneViewer[key] = _this.utilities[key];
156
+ });
157
+ }
158
+
159
+ /**
160
+ * Initialize specific managers that need to be created after scene setup
161
+ */
162
+ }, {
163
+ key: "initializePostSceneManagers",
164
+ value: function initializePostSceneManagers() {
165
+ // Initialize the tooltip manager (needs container, camera, scene)
166
+ if (this.sceneViewer.$refs.container && this.sceneViewer.camera && this.sceneViewer.scene) {
167
+ this.managers.tooltipsManager = new SceneTooltipsManager(this.sceneViewer.$refs.container, this.sceneViewer.camera, this.sceneViewer.scene);
168
+ this.sceneViewer.tooltipsManager = this.managers.tooltipsManager;
169
+ console.log('🔍 Tooltip manager initialized:', this.managers.tooltipsManager);
170
+ }
171
+
172
+ // Initialize the drag and drop manager (needs scene, camera, etc.)
173
+ if (this.sceneViewer.scene && this.sceneViewer.camera) {
174
+ this.managers.dragDropManager = new DragDropManager({
175
+ scene: this.sceneViewer.scene,
176
+ camera: this.sceneViewer.camera,
177
+ transformManager: this.sceneViewer.transformManager,
178
+ modelPreloader: this.utilities.modelPreloader,
179
+ componentManager: this.sceneViewer.componentManager
180
+ });
181
+ this.sceneViewer.dragDropManager = this.managers.dragDropManager;
182
+ console.log('🎯 Drag and drop manager initialized');
183
+ }
184
+
185
+ // Initialize the scene helper utility (needs scene, camera, renderer, etc.)
186
+ if (this.sceneViewer.scene && this.sceneViewer.camera && this.sceneViewer.renderer) {
187
+ this.utilities.sceneHelper = new SceneHelper({
188
+ scene: this.sceneViewer.scene,
189
+ camera: this.sceneViewer.camera,
190
+ renderer: this.sceneViewer.renderer,
191
+ controls: this.sceneViewer.controls,
192
+ transformManager: this.sceneViewer.transformManager,
193
+ componentManager: this.sceneViewer.componentManager,
194
+ pathfindingManager: this.sceneViewer.pathfindingManager,
195
+ currentSceneData: this.sceneViewer.currentSceneData,
196
+ logger: this.utilities.logger
197
+ });
198
+ this.sceneViewer.sceneHelper = this.utilities.sceneHelper;
199
+ console.log('🔧 Scene helper utility initialized:', this.utilities.sceneHelper);
200
+ }
201
+ }
202
+
203
+ /**
204
+ * Update scene helper with new scene data
205
+ * @param {Object} sceneData - Updated scene data
206
+ */
207
+ }, {
208
+ key: "updateSceneHelperData",
209
+ value: function updateSceneHelperData(sceneData) {
210
+ if (this.utilities.sceneHelper && typeof this.utilities.sceneHelper.updateSceneData === 'function') {
211
+ this.utilities.sceneHelper.updateSceneData(sceneData);
212
+ console.log('🔄 Scene helper data updated');
213
+ }
214
+ }
215
+
216
+ /**
217
+ * Set imported scene data directly in CentralPlant
218
+ * @param {Object} sceneData - The imported scene data (from cp-01-01.json or other scene files)
219
+ */
220
+ }, {
221
+ key: "setImportedSceneData",
222
+ value: function setImportedSceneData(sceneData) {
223
+ var _this$importedSceneDa, _this$importedSceneDa2;
224
+ this.importedSceneData = _objectSpread2({}, sceneData);
225
+ console.log('📥 Imported scene data stored in CentralPlant:', {
226
+ connections: ((_this$importedSceneDa = this.importedSceneData.connections) === null || _this$importedSceneDa === void 0 ? void 0 : _this$importedSceneDa.length) || 0,
227
+ sceneObjects: ((_this$importedSceneDa2 = this.importedSceneData.scene) === null || _this$importedSceneDa2 === void 0 || (_this$importedSceneDa2 = _this$importedSceneDa2.object) === null || _this$importedSceneDa2 === void 0 || (_this$importedSceneDa2 = _this$importedSceneDa2.children) === null || _this$importedSceneDa2 === void 0 ? void 0 : _this$importedSceneDa2.length) || 0,
228
+ timestamp: new Date().toISOString()
229
+ });
230
+
231
+ // Set default metadata for imported scene data
232
+ this.setDefaultImportedSceneMetadata(sceneData);
233
+
234
+ // Also update the scene helper if available
235
+ if (this.utilities.sceneHelper && typeof this.utilities.sceneHelper.updateSceneData === 'function') {
236
+ this.utilities.sceneHelper.updateSceneData(sceneData);
237
+ }
238
+ }
239
+
240
+ /**
241
+ * Get the stored imported scene data
242
+ * @returns {Object|null} The imported scene data or null if none is stored
243
+ */
244
+ }, {
245
+ key: "getImportedSceneData",
246
+ value: function getImportedSceneData() {
247
+ return this.importedSceneData;
248
+ }
249
+
250
+ /**
251
+ * Get connections from the imported scene data
252
+ * @returns {Array} The connections array or empty array if none
253
+ */
254
+ }, {
255
+ key: "getImportedConnections",
256
+ value: function getImportedConnections() {
257
+ var _this$importedSceneDa3;
258
+ return ((_this$importedSceneDa3 = this.importedSceneData) === null || _this$importedSceneDa3 === void 0 ? void 0 : _this$importedSceneDa3.connections) || [];
259
+ }
260
+
261
+ /**
262
+ * Get scene objects from the imported scene data
263
+ * @returns {Object|null} The scene object structure or null if none
264
+ */
265
+ }, {
266
+ key: "getImportedSceneObjects",
267
+ value: function getImportedSceneObjects() {
268
+ var _this$importedSceneDa4;
269
+ return ((_this$importedSceneDa4 = this.importedSceneData) === null || _this$importedSceneDa4 === void 0 || (_this$importedSceneDa4 = _this$importedSceneDa4.scene) === null || _this$importedSceneDa4 === void 0 ? void 0 : _this$importedSceneDa4.object) || null;
270
+ }
271
+
272
+ /**
273
+ * Clear the stored imported scene data
274
+ */
275
+ }, {
276
+ key: "clearImportedSceneData",
277
+ value: function clearImportedSceneData() {
278
+ this.importedSceneData = null;
279
+ console.log('🗑️ Imported scene data cleared from CentralPlant');
280
+ }
281
+
282
+ /**
283
+ * Set a metadata attribute
284
+ * @param {string} key - The metadata key
285
+ * @param {any} value - The metadata value
286
+ */
287
+ }, {
288
+ key: "setMetadata",
289
+ value: function setMetadata(key, value) {
290
+ this.metadata[key] = value;
291
+ console.log("\uD83D\uDCDD Metadata set: ".concat(key, " ="), value);
292
+ }
293
+
294
+ /**
295
+ * Get a metadata attribute
296
+ * @param {string} key - The metadata key
297
+ * @returns {any} The metadata value or undefined if not found
298
+ */
299
+ }, {
300
+ key: "getMetadata",
301
+ value: function getMetadata(key) {
302
+ return this.metadata[key];
303
+ }
304
+
305
+ /**
306
+ * Get all metadata
307
+ * @returns {Object} All metadata attributes
308
+ */
309
+ }, {
310
+ key: "getAllMetadata",
311
+ value: function getAllMetadata() {
312
+ return _objectSpread2({}, this.metadata);
313
+ }
314
+
315
+ /**
316
+ * Remove a metadata attribute
317
+ * @param {string} key - The metadata key to remove
318
+ */
319
+ }, {
320
+ key: "removeMetadata",
321
+ value: function removeMetadata(key) {
322
+ delete this.metadata[key];
323
+ console.log("\uD83D\uDDD1\uFE0F Metadata removed: ".concat(key));
324
+ }
325
+
326
+ /**
327
+ * Clear all metadata
328
+ */
329
+ }, {
330
+ key: "clearAllMetadata",
331
+ value: function clearAllMetadata() {
332
+ this.metadata = {};
333
+ console.log('🗑️ All metadata cleared from CentralPlant');
334
+ }
335
+
336
+ /**
337
+ * Clear all data including metadata and transform history
338
+ */
339
+ }, {
340
+ key: "clearAllData",
341
+ value: function clearAllData() {
342
+ this.metadata = {};
343
+ this.transformHistory.lastTransform = null;
344
+ console.log('🗑️ All data cleared from CentralPlant (metadata + transform history)');
345
+ }
346
+
347
+ /**
348
+ * Record a transform operation in the history
349
+ * @param {Object} transformData - The transform data to record
350
+ * @param {string} transformData.type - The type of transform (e.g., 'translate', 'rotate', 'scale')
351
+ * @param {Object} transformData.object - The object that was transformed
352
+ * @param {Object} transformData.values - The transform values applied
353
+ * @param {Object} transformData.previousValues - The previous transform values (for undo)
354
+ */
355
+ }, {
356
+ key: "recordTransform",
357
+ value: function recordTransform(transformData) {
358
+ var _transformData$object, _transformData$object2, _transformRecord$prev;
359
+ console.log("recordTransform started");
360
+
361
+ // Validate the transform data
362
+ if (!transformData || !transformData.object) {
363
+ console.error('❌ Invalid transform data provided to recordTransform:', transformData);
364
+ return;
365
+ }
366
+ if (!transformData.previousValues) {
367
+ console.warn('⚠️ No previous values provided for transform recording - undo may not work properly');
368
+ }
369
+ var transformRecord = {
370
+ type: transformData.type,
371
+ object: transformData.object,
372
+ values: transformData.values,
373
+ previousValues: transformData.previousValues,
374
+ timestamp: new Date().toISOString(),
375
+ objectId: ((_transformData$object = transformData.object) === null || _transformData$object === void 0 ? void 0 : _transformData$object.uuid) || ((_transformData$object2 = transformData.object) === null || _transformData$object2 === void 0 ? void 0 : _transformData$object2.id) || 'unknown'
376
+ };
377
+ this.transformHistory.lastTransform = transformRecord;
378
+ console.log('🔄 Transform recorded:', {
379
+ type: transformRecord.type,
380
+ objectId: transformRecord.objectId,
381
+ currentValues: transformRecord.values,
382
+ previousValues: transformRecord.previousValues,
383
+ previousValuesStructure: {
384
+ type: _typeof(transformRecord.previousValues),
385
+ keys: Object.keys(transformRecord.previousValues || {}),
386
+ hasPosition: !!(transformRecord.previousValues && transformRecord.previousValues.position),
387
+ hasRotation: !!(transformRecord.previousValues && transformRecord.previousValues.rotation),
388
+ hasScale: !!(transformRecord.previousValues && transformRecord.previousValues.scale),
389
+ positionValues: (_transformRecord$prev = transformRecord.previousValues) !== null && _transformRecord$prev !== void 0 && _transformRecord$prev.position ? {
390
+ x: transformRecord.previousValues.position.x,
391
+ y: transformRecord.previousValues.position.y,
392
+ z: transformRecord.previousValues.position.z
393
+ } : null
394
+ },
395
+ timestamp: transformRecord.timestamp
396
+ });
397
+ console.log("recordTransform this.transformHistory:", this.transformHistory);
398
+ }
399
+
400
+ /**
401
+ * Get the last transform operation
402
+ * @returns {Object|null} The last transform record or null if none exists
403
+ */
404
+ }, {
405
+ key: "getLastTransform",
406
+ value: function getLastTransform() {
407
+ return this.transformHistory.lastTransform;
408
+ }
409
+
410
+ /**
411
+ * Get the complete transform history
412
+ * @returns {Object} The transform history object
413
+ */
414
+ }, {
415
+ key: "getTransformHistory",
416
+ value: function getTransformHistory() {
417
+ return _objectSpread2({}, this.transformHistory);
418
+ }
419
+
420
+ /**
421
+ * Clear the transform history
422
+ */
423
+ }, {
424
+ key: "clearTransformHistory",
425
+ value: function clearTransformHistory() {
426
+ this.transformHistory.lastTransform = null;
427
+ console.log('🗑️ Transform history cleared');
428
+ }
429
+
430
+ /**
431
+ * Check if a metadata key exists
432
+ * @param {string} key - The metadata key to check
433
+ * @returns {boolean} True if the key exists
434
+ */
435
+ }, {
436
+ key: "hasMetadata",
437
+ value: function hasMetadata(key) {
438
+ return key in this.metadata;
439
+ }
440
+
441
+ /**
442
+ * Set default metadata for the CentralPlant scene
443
+ */
444
+ }, {
445
+ key: "setDefaultSceneMetadata",
446
+ value: function setDefaultSceneMetadata() {
447
+ var _this2 = this;
448
+ var defaultMetadata = {
449
+ // Scene Information
450
+ sceneInfo: {
451
+ name: 'Untitled Central Plant Scene',
452
+ description: 'A central plant facility scene',
453
+ version: '1.0.0',
454
+ created: new Date().toISOString(),
455
+ lastModified: new Date().toISOString(),
456
+ author: 'Engineering Team'
457
+ },
458
+ // Project Settings
459
+ projectSettings: {
460
+ units: 'metric',
461
+ // or 'imperial'
462
+ scale: 1.0,
463
+ gridSize: 1.0,
464
+ snapToGrid: true,
465
+ showGrid: true,
466
+ showAxes: true
467
+ },
468
+ // Viewport Settings
469
+ viewportSettings: {
470
+ defaultViewMode: 'perspective',
471
+ backgroundType: 'skybox',
472
+ showEnvironment: true,
473
+ autoRotate: false,
474
+ cameraPosition: {
475
+ x: 10,
476
+ y: 10,
477
+ z: 10
478
+ },
479
+ cameraTarget: {
480
+ x: 0,
481
+ y: 0,
482
+ z: 0
483
+ }
484
+ },
485
+ // Component Settings
486
+ componentSettings: {
487
+ defaultComponentScale: 1.0,
488
+ showBoundingBoxes: false,
489
+ showConnectionPaths: true,
490
+ highlightOnHover: true,
491
+ selectionOutlineColor: '#00ff00'
492
+ },
493
+ // Spatial Boundaries
494
+ spatialBoundaries: {
495
+ min: {
496
+ x: -60,
497
+ y: -16,
498
+ z: -60
499
+ },
500
+ max: {
501
+ x: 60,
502
+ y: 16,
503
+ z: 60
504
+ },
505
+ center: {
506
+ x: 0,
507
+ y: 4,
508
+ z: 0
509
+ }
510
+ },
511
+ // System Information
512
+ systemInfo: {
513
+ centralPlantVersion: '2.0.0',
514
+ buildDate: new Date().toISOString(),
515
+ platform: typeof window !== 'undefined' ? window.navigator.platform : 'Unknown',
516
+ userAgent: typeof window !== 'undefined' ? window.navigator.userAgent : 'Unknown'
517
+ }
518
+ };
519
+
520
+ // Set each default metadata category
521
+ Object.keys(defaultMetadata).forEach(function (category) {
522
+ if (!_this2.hasMetadata(category)) {
523
+ _this2.setMetadata(category, defaultMetadata[category]);
524
+ }
525
+ });
526
+ console.log('🎯 Default scene metadata initialized:', Object.keys(defaultMetadata));
527
+ }
528
+
529
+ /**
530
+ * Set default metadata for imported scene data
531
+ * @param {Object} sceneData - The imported scene data
532
+ */
533
+ }, {
534
+ key: "setDefaultImportedSceneMetadata",
535
+ value: function setDefaultImportedSceneMetadata(sceneData) {
536
+ var _sceneData$connection, _sceneData$scene, _sceneData$scene2;
537
+ var importTimestamp = new Date().toISOString();
538
+
539
+ // Extract information from the imported scene data
540
+ var connectionsCount = ((_sceneData$connection = sceneData.connections) === null || _sceneData$connection === void 0 ? void 0 : _sceneData$connection.length) || 0;
541
+ var componentsCount = ((_sceneData$scene = sceneData.scene) === null || _sceneData$scene === void 0 || (_sceneData$scene = _sceneData$scene.object) === null || _sceneData$scene === void 0 || (_sceneData$scene = _sceneData$scene.children) === null || _sceneData$scene === void 0 ? void 0 : _sceneData$scene.length) || 0;
542
+
543
+ // Count different types of components
544
+ var componentTypes = {};
545
+ if ((_sceneData$scene2 = sceneData.scene) !== null && _sceneData$scene2 !== void 0 && (_sceneData$scene2 = _sceneData$scene2.object) !== null && _sceneData$scene2 !== void 0 && _sceneData$scene2.children) {
546
+ sceneData.scene.object.children.forEach(function (child) {
547
+ var _child$userData;
548
+ var componentType = ((_child$userData = child.userData) === null || _child$userData === void 0 ? void 0 : _child$userData.componentType) || 'unknown';
549
+ componentTypes[componentType] = (componentTypes[componentType] || 0) + 1;
550
+ });
551
+ }
552
+ var importMetadata = {
553
+ // Import Information
554
+ importInfo: {
555
+ importTimestamp: importTimestamp,
556
+ originalFileName: null,
557
+ // Will be set from the calling context
558
+ fileSize: null,
559
+ // Will be set from the calling context
560
+ importMethod: 'file-upload',
561
+ importVersion: '1.0.0'
562
+ },
563
+ // Scene Analysis
564
+ sceneAnalysis: {
565
+ totalComponents: componentsCount,
566
+ totalConnections: connectionsCount,
567
+ componentTypes: componentTypes,
568
+ sceneComplexity: this.calculateSceneComplexity(connectionsCount, componentsCount),
569
+ hasValidStructure: this.validateImportedSceneStructure(sceneData)
570
+ },
571
+ // Data Quality
572
+ dataQuality: {
573
+ hasConnections: connectionsCount > 0,
574
+ hasComponents: componentsCount > 0,
575
+ hasValidScene: !!sceneData.scene,
576
+ missingData: this.identifyMissingData(sceneData),
577
+ warnings: this.generateImportWarnings(sceneData)
578
+ },
579
+ // Processing Stats
580
+ processingStats: {
581
+ processedAt: importTimestamp,
582
+ processingDuration: null,
583
+ // Can be updated after processing
584
+ memoryUsage: this.estimateMemoryUsage(sceneData),
585
+ cacheStatus: 'pending'
586
+ }
587
+ };
588
+
589
+ // Store import-specific metadata
590
+ this.setMetadata('lastImport', importMetadata);
591
+
592
+ // Update scene info if it exists
593
+ if (this.hasMetadata('sceneInfo')) {
594
+ var existingSceneInfo = this.getMetadata('sceneInfo');
595
+ this.setMetadata('sceneInfo', _objectSpread2(_objectSpread2({}, existingSceneInfo), {}, {
596
+ lastModified: importTimestamp,
597
+ importSource: 'file-import',
598
+ dataSourceType: 'json'
599
+ }));
600
+ }
601
+ console.log('📥 Default imported scene metadata set:', {
602
+ components: componentsCount,
603
+ connections: connectionsCount,
604
+ complexity: importMetadata.sceneAnalysis.sceneComplexity,
605
+ types: componentTypes
606
+ });
607
+ }
608
+
609
+ /**
610
+ * Calculate scene complexity based on components and connections
611
+ * @param {number} connectionsCount - Number of connections
612
+ * @param {number} componentsCount - Number of components
613
+ * @returns {string} Complexity level (simple, moderate, complex, very-complex)
614
+ */
615
+ }, {
616
+ key: "calculateSceneComplexity",
617
+ value: function calculateSceneComplexity(connectionsCount, componentsCount) {
618
+ var totalElements = connectionsCount + componentsCount;
619
+ if (totalElements <= 10) return 'simple';
620
+ if (totalElements <= 50) return 'moderate';
621
+ if (totalElements <= 200) return 'complex';
622
+ return 'very-complex';
623
+ }
624
+
625
+ /**
626
+ * Validate the structure of imported scene data
627
+ * @param {Object} sceneData - The imported scene data
628
+ * @returns {boolean} True if structure is valid
629
+ */
630
+ }, {
631
+ key: "validateImportedSceneStructure",
632
+ value: function validateImportedSceneStructure(sceneData) {
633
+ return !!(sceneData && sceneData.scene && sceneData.scene.object && Array.isArray(sceneData.connections));
634
+ }
635
+
636
+ /**
637
+ * Identify missing or incomplete data in imported scene
638
+ * @param {Object} sceneData - The imported scene data
639
+ * @returns {Array} Array of missing data warnings
640
+ */
641
+ }, {
642
+ key: "identifyMissingData",
643
+ value: function identifyMissingData(sceneData) {
644
+ var _sceneData$scene3;
645
+ var missing = [];
646
+ if (!sceneData.connections || sceneData.connections.length === 0) {
647
+ missing.push('No connection data found');
648
+ }
649
+ if (!((_sceneData$scene3 = sceneData.scene) !== null && _sceneData$scene3 !== void 0 && (_sceneData$scene3 = _sceneData$scene3.object) !== null && _sceneData$scene3 !== void 0 && _sceneData$scene3.children) || sceneData.scene.object.children.length === 0) {
650
+ missing.push('No component data found');
651
+ }
652
+ if (!sceneData.metadata) {
653
+ missing.push('No metadata found');
654
+ }
655
+ if (!sceneData.version) {
656
+ missing.push('No version information');
657
+ }
658
+ return missing;
659
+ }
660
+
661
+ /**
662
+ * Generate import warnings for potential issues
663
+ * @param {Object} sceneData - The imported scene data
664
+ * @returns {Array} Array of warning messages
665
+ */
666
+ }, {
667
+ key: "generateImportWarnings",
668
+ value: function generateImportWarnings(sceneData) {
669
+ var _sceneData$scene4, _sceneData$connection2;
670
+ var warnings = [];
671
+
672
+ // Check for large scene data
673
+ var componentsCount = ((_sceneData$scene4 = sceneData.scene) === null || _sceneData$scene4 === void 0 || (_sceneData$scene4 = _sceneData$scene4.object) === null || _sceneData$scene4 === void 0 || (_sceneData$scene4 = _sceneData$scene4.children) === null || _sceneData$scene4 === void 0 ? void 0 : _sceneData$scene4.length) || 0;
674
+ if (componentsCount > 100) {
675
+ warnings.push("Large scene detected (".concat(componentsCount, " components) - may impact performance"));
676
+ }
677
+
678
+ // Check for orphaned components (components without connections)
679
+ var connectionsCount = ((_sceneData$connection2 = sceneData.connections) === null || _sceneData$connection2 === void 0 ? void 0 : _sceneData$connection2.length) || 0;
680
+ if (componentsCount > 0 && connectionsCount === 0) {
681
+ warnings.push('Components found but no connections - scene may be incomplete');
682
+ }
683
+
684
+ // Check for version compatibility
685
+ if (sceneData.version && parseFloat(sceneData.version) < 1.0) {
686
+ warnings.push('Scene data version is older than current - some features may not work correctly');
687
+ }
688
+ return warnings;
689
+ }
690
+
691
+ /**
692
+ * Estimate memory usage of imported scene data
693
+ * @param {Object} sceneData - The imported scene data
694
+ * @returns {Object} Memory usage estimate
695
+ */
696
+ }, {
697
+ key: "estimateMemoryUsage",
698
+ value: function estimateMemoryUsage(sceneData) {
699
+ var jsonSize = JSON.stringify(sceneData).length;
700
+ var estimatedMB = (jsonSize / 1024 / 1024).toFixed(2);
701
+ return {
702
+ jsonSizeBytes: jsonSize,
703
+ estimatedMB: parseFloat(estimatedMB),
704
+ category: estimatedMB < 1 ? 'small' : estimatedMB < 10 ? 'medium' : 'large'
705
+ };
706
+ }
707
+
708
+ /**
709
+ * Update specific metadata category
710
+ * @param {string} category - The metadata category (e.g., 'sceneInfo', 'projectSettings')
711
+ * @param {Object} updates - The updates to apply to the category
712
+ */
713
+ }, {
714
+ key: "updateMetadataCategory",
715
+ value: function updateMetadataCategory(category, updates) {
716
+ if (this.hasMetadata(category)) {
717
+ var existing = this.getMetadata(category);
718
+ this.setMetadata(category, _objectSpread2(_objectSpread2({}, existing), updates));
719
+ } else {
720
+ this.setMetadata(category, updates);
721
+ }
722
+ console.log("\uD83D\uDCDD Metadata category '".concat(category, "' updated:"), updates);
723
+ }
724
+
725
+ /**
726
+ * Undo the last transform operation
727
+ * @returns {boolean} True if undo was successful, false otherwise
728
+ */
729
+ }, {
730
+ key: "undoTransform",
731
+ value: function undoTransform() {
732
+ var lastTransform = this.getLastTransform();
733
+ if (!lastTransform) {
734
+ console.warn('⚠️ No transform to undo');
735
+ return false;
736
+ }
737
+ console.log('🔄 Undoing transform:', lastTransform);
738
+ try {
739
+ var _this$sceneViewer;
740
+ var object = lastTransform.object,
741
+ type = lastTransform.type,
742
+ previousValues = lastTransform.previousValues;
743
+ if (!object || !previousValues) {
744
+ console.error('❌ Invalid transform data for undo');
745
+ return false;
746
+ }
747
+
748
+ // Debug current state before undo
749
+ this.debugTransformState(object, 'Before Undo');
750
+
751
+ // Debug the structure of previousValues
752
+ console.log('🔍 previousValues structure:', {
753
+ type: _typeof(previousValues),
754
+ keys: Object.keys(previousValues || {}),
755
+ values: previousValues,
756
+ hasPosition: !!(previousValues && previousValues.position),
757
+ hasRotation: !!(previousValues && previousValues.rotation),
758
+ hasScale: !!(previousValues && previousValues.scale),
759
+ hasDirectXYZ: !!(previousValues && (previousValues.x !== undefined || previousValues.y !== undefined || previousValues.z !== undefined))
760
+ });
761
+
762
+ // Verify the object still exists in the scene
763
+ if (this.sceneViewer && this.sceneViewer.scene) {
764
+ var objectFound = false;
765
+ this.sceneViewer.scene.traverse(function (child) {
766
+ if (child === object) {
767
+ objectFound = true;
768
+ console.log("undoTransform object:", object);
769
+ }
770
+ });
771
+ if (!objectFound) {
772
+ console.error('❌ Object no longer exists in scene, cannot undo');
773
+ return false;
774
+ }
775
+ }
776
+
777
+ // Apply the previous values based on transform type
778
+ switch (type) {
779
+ case 'translate':
780
+ case 'position':
781
+ console.log('🔄 undoTransform - Undoing position transform:', {
782
+ current: {
783
+ x: object.position.x,
784
+ y: object.position.y,
785
+ z: object.position.z
786
+ },
787
+ restoring: previousValues,
788
+ restoringPosition: previousValues.position
789
+ });
790
+
791
+ // Check if previousValues has position property (Vector3) or direct x,y,z properties
792
+ if (previousValues.position) {
793
+ // Handle Vector3 object
794
+ if (previousValues.position.x !== undefined) object.position.x = previousValues.position.x;
795
+ if (previousValues.position.y !== undefined) object.position.y = previousValues.position.y;
796
+ if (previousValues.position.z !== undefined) object.position.z = previousValues.position.z;
797
+ } else {
798
+ // Handle direct x,y,z properties
799
+ if (previousValues.x !== undefined) object.position.x = previousValues.x;
800
+ if (previousValues.y !== undefined) object.position.y = previousValues.y;
801
+ if (previousValues.z !== undefined) object.position.z = previousValues.z;
802
+ }
803
+ console.log('✅ undoTransform - Position restored to:', {
804
+ x: object.position.x,
805
+ y: object.position.y,
806
+ z: object.position.z
807
+ });
808
+ break;
809
+ case 'rotate':
810
+ case 'rotation':
811
+ console.log('🔄 Undoing rotation transform:', {
812
+ current: {
813
+ x: object.rotation.x,
814
+ y: object.rotation.y,
815
+ z: object.rotation.z
816
+ },
817
+ restoring: previousValues,
818
+ restoringRotation: previousValues.rotation
819
+ });
820
+
821
+ // Check if previousValues has rotation property (Euler) or direct x,y,z properties
822
+ if (previousValues.rotation) {
823
+ // Handle Euler object
824
+ if (previousValues.rotation.x !== undefined) object.rotation.x = previousValues.rotation.x;
825
+ if (previousValues.rotation.y !== undefined) object.rotation.y = previousValues.rotation.y;
826
+ if (previousValues.rotation.z !== undefined) object.rotation.z = previousValues.rotation.z;
827
+ } else {
828
+ // Handle direct x,y,z properties
829
+ if (previousValues.x !== undefined) object.rotation.x = previousValues.x;
830
+ if (previousValues.y !== undefined) object.rotation.y = previousValues.y;
831
+ if (previousValues.z !== undefined) object.rotation.z = previousValues.z;
832
+ }
833
+ console.log('✅ Rotation restored to:', {
834
+ x: object.rotation.x,
835
+ y: object.rotation.y,
836
+ z: object.rotation.z
837
+ });
838
+ break;
839
+ case 'scale':
840
+ console.log('🔄 Undoing scale transform:', {
841
+ current: {
842
+ x: object.scale.x,
843
+ y: object.scale.y,
844
+ z: object.scale.z
845
+ },
846
+ restoring: previousValues,
847
+ restoringScale: previousValues.scale
848
+ });
849
+
850
+ // Check if previousValues has scale property (Vector3) or direct x,y,z properties
851
+ if (previousValues.scale) {
852
+ // Handle Vector3 object
853
+ if (previousValues.scale.x !== undefined) object.scale.x = previousValues.scale.x;
854
+ if (previousValues.scale.y !== undefined) object.scale.y = previousValues.scale.y;
855
+ if (previousValues.scale.z !== undefined) object.scale.z = previousValues.scale.z;
856
+ } else {
857
+ // Handle direct x,y,z properties
858
+ if (previousValues.x !== undefined) object.scale.x = previousValues.x;
859
+ if (previousValues.y !== undefined) object.scale.y = previousValues.y;
860
+ if (previousValues.z !== undefined) object.scale.z = previousValues.z;
861
+ }
862
+ console.log('✅ Scale restored to:', {
863
+ x: object.scale.x,
864
+ y: object.scale.y,
865
+ z: object.scale.z
866
+ });
867
+ break;
868
+ default:
869
+ console.warn("\u26A0\uFE0F Unknown transform type for undo: ".concat(type));
870
+ return false;
871
+ }
872
+
873
+ // Force update the object's matrix to ensure transforms are properly applied
874
+ object.updateMatrix();
875
+ object.updateMatrixWorld(true);
876
+
877
+ // Get the transform controls manager reference
878
+ var transformManager = (_this$sceneViewer = this.sceneViewer) === null || _this$sceneViewer === void 0 ? void 0 : _this$sceneViewer.transformManager;
879
+
880
+ // Update transform controls if they exist and are attached to this object
881
+ if (transformManager && transformManager.transformControls) {
882
+ var transformControls = transformManager.transformControls;
883
+
884
+ // Check if the object is currently selected
885
+ var isCurrentlySelected = transformControls.object === object;
886
+ if (isCurrentlySelected) {
887
+ console.log('🔧 Updating transform controls after undo');
888
+
889
+ // Temporarily detach to force a clean reattachment
890
+ transformControls.detach();
891
+
892
+ // Ensure the transform controls are properly attached to the scene
893
+ if (transformManager.ensureSceneAttachment) {
894
+ transformManager.ensureSceneAttachment(true);
895
+ }
896
+
897
+ // Reattach to the object
898
+ transformControls.attach(object);
899
+
900
+ // Update the transform manager's selected object state
901
+ transformManager.selectedObject = object;
902
+
903
+ // Refresh the bounding box if it exists
904
+ if (transformManager.updateBoundingBox) {
905
+ transformManager.updateBoundingBox();
906
+ }
907
+
908
+ // Clear any cached bounding box data for this object
909
+ if (transformManager.boundingBoxCache && transformManager.boundingBoxCache.has(object)) {
910
+ transformManager.boundingBoxCache.delete(object);
911
+ }
912
+ console.log('✅ Transform controls successfully updated after undo');
913
+ } else {
914
+ console.log('🔍 Object not currently selected by transform controls');
915
+ }
916
+ }
917
+
918
+ // Notify SceneOperationsManager about the transform change
919
+ if (this.sceneViewer && this.sceneViewer.sceneOperationsManager && this.sceneViewer.currentSceneData) {
920
+ try {
921
+ console.log('🔄 Updating scene data after undo');
922
+ this.sceneViewer.onTransformEnd(object);
923
+ // this.sceneViewer.sceneOperationsManager.updateSceneDataAfterTransform(object, this.sceneViewer.currentSceneData)
924
+ } catch (sceneOpsError) {
925
+ console.warn('⚠️ Error updating scene operations after undo:', sceneOpsError);
926
+ // Continue with undo operation even if scene operations update fails
927
+ }
928
+ }
929
+
930
+ // Dispatch scene update events if available
931
+ if (typeof window !== 'undefined') {
932
+ var sceneUpdateEvent = new CustomEvent('sceneUpdateComplete', {
933
+ detail: {
934
+ timestamp: Date.now(),
935
+ action: 'undo-transform',
936
+ objectId: object.uuid || object.id || 'unknown'
937
+ }
938
+ });
939
+ window.dispatchEvent(sceneUpdateEvent);
940
+ console.log('📡 Scene update event dispatched after undo');
941
+ }
942
+
943
+ // Clear the transform history since we've undone it
944
+ this.clearTransformHistory();
945
+
946
+ // Ensure object is selectable after undo
947
+ this.ensureObjectSelectable(object);
948
+
949
+ // Debug final state after undo
950
+ this.debugTransformState(object, 'After Undo');
951
+
952
+ // Log success
953
+ console.log('✅ Transform undone successfully', {
954
+ type: type,
955
+ objectId: object.uuid || object.id || 'unknown',
956
+ restoredValues: previousValues,
957
+ matrixUpdated: true,
958
+ transformControlsUpdated: !!(this.sceneViewer && this.sceneViewer.transformManager),
959
+ sceneRerendered: !!(this.sceneViewer && this.sceneViewer.renderer)
960
+ });
961
+ return true;
962
+ } catch (error) {
963
+ console.error('❌ Error undoing transform:', error);
964
+ return false;
965
+ }
966
+ }
967
+
968
+ /**
969
+ * Ensure object is properly selectable after undo operation
970
+ * This method addresses issues where transform controls become unresponsive
971
+ * @param {Object} object - The Three.js object to ensure is selectable
972
+ * @returns {boolean} True if object selection was refreshed successfully
973
+ */
974
+ }, {
975
+ key: "ensureObjectSelectable",
976
+ value: function ensureObjectSelectable(object) {
977
+ if (!object || !this.sceneViewer) {
978
+ console.warn('⚠️ Cannot ensure object selectable: missing object or scene viewer');
979
+ return false;
980
+ }
981
+ try {
982
+ var transformManager = this.sceneViewer.transformManager;
983
+ if (!transformManager) {
984
+ console.warn('⚠️ Transform manager not available');
985
+ return false;
986
+ }
987
+
988
+ // Use the recovery method in transform controls manager
989
+ if (transformManager.recoverTransformControls) {
990
+ console.log('🔄 Using transform controls recovery method');
991
+ return transformManager.recoverTransformControls(object);
992
+ }
993
+
994
+ // Fallback to original method if recovery method not available
995
+ console.log('⚠️ Recovery method not available, using fallback');
996
+
997
+ // Force update the object's world matrix
998
+ object.updateMatrixWorld(true);
999
+
1000
+ // Clear any cached bounding box data for this object
1001
+ if (transformManager.boundingBoxCache && transformManager.boundingBoxCache.has(object)) {
1002
+ transformManager.boundingBoxCache.delete(object);
1003
+ console.log('🧹 Cleared bounding box cache for object');
1004
+ }
1005
+
1006
+ // Ensure transform controls are properly attached to the scene
1007
+ if (transformManager.ensureSceneAttachment) {
1008
+ transformManager.ensureSceneAttachment(true);
1009
+ }
1010
+
1011
+ // If this object is currently selected, refresh the selection
1012
+ if (transformManager.selectedObject === object) {
1013
+ console.log('🔄 Refreshing object selection after undo');
1014
+
1015
+ // Temporarily deselect
1016
+ transformManager.deselectObject();
1017
+
1018
+ // Wait a frame to ensure state is clean
1019
+ requestAnimationFrame(function () {
1020
+ // Reselect the object
1021
+ transformManager.selectObjectForTransformOnly(object);
1022
+ console.log('✅ Object selection refreshed successfully');
1023
+ });
1024
+ }
1025
+ return true;
1026
+ } catch (error) {
1027
+ console.error('❌ Error ensuring object selectable:', error);
1028
+ return false;
1029
+ }
1030
+ }
1031
+
1032
+ /**
1033
+ * Debug method to log current transform state of an object
1034
+ * @param {Object} object - The Three.js object to debug
1035
+ * @param {string} context - Context string for logging
1036
+ */
1037
+ }, {
1038
+ key: "debugTransformState",
1039
+ value: function debugTransformState(object) {
1040
+ var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Debug';
1041
+ if (!object) {
1042
+ console.log("\uD83D\uDD0D ".concat(context, ": No object provided"));
1043
+ return;
1044
+ }
1045
+ console.log("\uD83D\uDD0D ".concat(context, " - Object Transform State:"), {
1046
+ objectId: object.uuid || object.id || 'unknown',
1047
+ position: {
1048
+ x: object.position.x,
1049
+ y: object.position.y,
1050
+ z: object.position.z
1051
+ },
1052
+ rotation: {
1053
+ x: object.rotation.x,
1054
+ y: object.rotation.y,
1055
+ z: object.rotation.z
1056
+ },
1057
+ scale: {
1058
+ x: object.scale.x,
1059
+ y: object.scale.y,
1060
+ z: object.scale.z
1061
+ },
1062
+ matrixWorldNeedsUpdate: object.matrixWorldNeedsUpdate,
1063
+ visible: object.visible,
1064
+ parent: object.parent ? object.parent.uuid || object.parent.id || 'unknown' : 'none',
1065
+ inScene: this.sceneViewer && this.sceneViewer.scene ? this.isObjectInScene(object) : 'unknown'
1066
+ });
1067
+ }
1068
+
1069
+ /**
1070
+ * Manual fix for when transform controls become unresponsive
1071
+ * Call this method if you can't select objects after undo
1072
+ * @returns {boolean} True if fix was attempted
1073
+ */
1074
+ }, {
1075
+ key: "fixTransformControlsSelection",
1076
+ value: function fixTransformControlsSelection() {
1077
+ if (!this.sceneViewer || !this.sceneViewer.transformManager) {
1078
+ console.warn('⚠️ Cannot fix transform controls: missing scene viewer or transform manager');
1079
+ return false;
1080
+ }
1081
+ var transformManager = this.sceneViewer.transformManager;
1082
+ console.log('🔧 Manually fixing transform controls selection...');
1083
+
1084
+ // Try to recover the transform controls
1085
+ if (transformManager.recoverTransformControls) {
1086
+ var result = transformManager.recoverTransformControls();
1087
+ if (result) {
1088
+ console.log('✅ Transform controls manually fixed');
1089
+ return true;
1090
+ }
1091
+ }
1092
+
1093
+ // Fallback: Force recreate the entire transform controls system
1094
+ try {
1095
+ console.log('🔄 Attempting to recreate transform controls system...');
1096
+
1097
+ // Store current settings
1098
+ var currentMode = transformManager.currentMode;
1099
+ var currentSpace = transformManager.currentSpace;
1100
+
1101
+ // Dispose existing controls
1102
+ if (transformManager.transformControls) {
1103
+ transformManager.transformControls.detach();
1104
+ transformManager.scene.remove(transformManager.transformControls);
1105
+ transformManager.transformControls.dispose();
1106
+ transformManager.transformControls = null;
1107
+ }
1108
+
1109
+ // Recreate controls
1110
+ transformManager.createTransformControls();
1111
+ transformManager.setupEventListeners();
1112
+
1113
+ // Restore settings
1114
+ transformManager.setMode(currentMode);
1115
+ transformManager.setSpace(currentSpace);
1116
+ console.log('✅ Transform controls system recreated successfully');
1117
+ return true;
1118
+ } catch (error) {
1119
+ console.error('❌ Error recreating transform controls:', error);
1120
+ return false;
1121
+ }
1122
+ }
1123
+
1124
+ /**
1125
+ * Check if an object is in the scene
1126
+ * @param {Object} object - The Three.js object to check
1127
+ * @returns {boolean} True if object is in scene
1128
+ */
1129
+ }, {
1130
+ key: "isObjectInScene",
1131
+ value: function isObjectInScene(object) {
1132
+ if (!this.sceneViewer || !this.sceneViewer.scene) return false;
1133
+ var found = false;
1134
+ this.sceneViewer.scene.traverse(function (child) {
1135
+ if (child === object) {
1136
+ found = true;
1137
+ }
1138
+ });
1139
+ return found;
1140
+ }
1141
+ }]);
1142
+ }();
1143
+
1144
+ export { CentralPlant, CentralPlant as default };