@2112-lab/central-plant 0.1.4 → 0.1.6

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 (88) hide show
  1. package/dist/bundle/index.js +33146 -1
  2. package/dist/cjs/_virtual/_rollupPluginBabelHelpers.js +432 -1
  3. package/dist/cjs/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1448 -1
  4. package/dist/cjs/node_modules/three/examples/jsm/controls/OrbitControls.js +1853 -1
  5. package/dist/cjs/node_modules/three/examples/jsm/exporters/GLTFExporter.js +3537 -1
  6. package/dist/cjs/node_modules/three/examples/jsm/exporters/OBJExporter.js +305 -1
  7. package/dist/cjs/node_modules/three/examples/jsm/exporters/PLYExporter.js +542 -1
  8. package/dist/cjs/node_modules/three/examples/jsm/exporters/STLExporter.js +218 -1
  9. package/dist/cjs/node_modules/three/examples/jsm/loaders/DRACOLoader.js +683 -1
  10. package/dist/cjs/node_modules/three/examples/jsm/loaders/GLTFLoader.js +4811 -1
  11. package/dist/cjs/node_modules/three/examples/jsm/loaders/RGBELoader.js +480 -1
  12. package/dist/cjs/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +309 -1
  13. package/dist/cjs/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +120 -1
  14. package/dist/cjs/src/analysis/analysis.js +560 -1
  15. package/dist/cjs/src/analysis/testing.js +958 -1
  16. package/dist/cjs/src/core/centralPlant.js +1149 -1
  17. package/dist/cjs/src/core/debugLogger.js +175 -1
  18. package/dist/cjs/src/core/mathUtils.js +574 -1
  19. package/dist/cjs/src/core/nameUtils.js +93 -1
  20. package/dist/cjs/src/data/export.js +716 -1
  21. package/dist/cjs/src/data/import.js +380 -1
  22. package/dist/cjs/src/data/numerics.js +522 -1
  23. package/dist/cjs/src/helpers/sceneHelper.js +572 -1
  24. package/dist/cjs/src/index.js +69 -1
  25. package/dist/cjs/src/managers/components/animationManager.js +123 -1
  26. package/dist/cjs/src/managers/components/componentManager.js +332 -1
  27. package/dist/cjs/src/managers/components/pathfindingManager.js +1441 -1
  28. package/dist/cjs/src/managers/controls/TransformControls.js +1063 -1
  29. package/dist/cjs/src/managers/controls/cameraControlsManager.js +79 -1
  30. package/dist/cjs/src/managers/controls/dragDropManager.js +1026 -1
  31. package/dist/cjs/src/managers/controls/keyboardControlsManager.js +395 -1
  32. package/dist/cjs/src/managers/controls/transformControlsManager.js +1807 -1
  33. package/dist/cjs/src/managers/environment/environmentManager.js +714 -1
  34. package/dist/cjs/src/managers/environment/textureConfig.js +229 -1
  35. package/dist/cjs/src/managers/scene/sceneExportManager.js +264 -1
  36. package/dist/cjs/src/managers/scene/sceneInitializationManager.js +346 -1
  37. package/dist/cjs/src/managers/scene/sceneOperationsManager.js +1509 -1
  38. package/dist/cjs/src/managers/scene/sceneTooltipsManager.js +661 -1
  39. package/dist/cjs/src/managers/system/disposalManager.js +444 -1
  40. package/dist/cjs/src/managers/system/hotReloadManager.js +291 -1
  41. package/dist/cjs/src/managers/system/performanceMonitor.js +863 -1
  42. package/dist/cjs/src/rendering/modelPreloader.js +369 -1
  43. package/dist/cjs/src/rendering/rendering2D.js +631 -1
  44. package/dist/cjs/src/rendering/rendering3D.js +685 -1
  45. package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +396 -1
  46. package/dist/esm/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1444 -1
  47. package/dist/esm/node_modules/three/examples/jsm/controls/OrbitControls.js +1849 -1
  48. package/dist/esm/node_modules/three/examples/jsm/exporters/GLTFExporter.js +3533 -1
  49. package/dist/esm/node_modules/three/examples/jsm/exporters/OBJExporter.js +301 -1
  50. package/dist/esm/node_modules/three/examples/jsm/exporters/PLYExporter.js +538 -1
  51. package/dist/esm/node_modules/three/examples/jsm/exporters/STLExporter.js +214 -1
  52. package/dist/esm/node_modules/three/examples/jsm/loaders/DRACOLoader.js +679 -1
  53. package/dist/esm/node_modules/three/examples/jsm/loaders/GLTFLoader.js +4807 -1
  54. package/dist/esm/node_modules/three/examples/jsm/loaders/RGBELoader.js +476 -1
  55. package/dist/esm/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +304 -1
  56. package/dist/esm/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +116 -1
  57. package/dist/esm/src/analysis/analysis.js +536 -1
  58. package/dist/esm/src/analysis/testing.js +954 -1
  59. package/dist/esm/src/core/centralPlant.js +1144 -1
  60. package/dist/esm/src/core/debugLogger.js +167 -1
  61. package/dist/esm/src/core/mathUtils.js +570 -1
  62. package/dist/esm/src/core/nameUtils.js +87 -1
  63. package/dist/esm/src/data/export.js +712 -1
  64. package/dist/esm/src/data/import.js +356 -1
  65. package/dist/esm/src/data/numerics.js +518 -1
  66. package/dist/esm/src/helpers/sceneHelper.js +547 -1
  67. package/dist/esm/src/index.js +35 -1
  68. package/dist/esm/src/managers/components/animationManager.js +119 -1
  69. package/dist/esm/src/managers/components/componentManager.js +328 -1
  70. package/dist/esm/src/managers/components/pathfindingManager.js +1417 -1
  71. package/dist/esm/src/managers/controls/TransformControls.js +1057 -1
  72. package/dist/esm/src/managers/controls/cameraControlsManager.js +75 -1
  73. package/dist/esm/src/managers/controls/dragDropManager.js +1002 -1
  74. package/dist/esm/src/managers/controls/keyboardControlsManager.js +371 -1
  75. package/dist/esm/src/managers/controls/transformControlsManager.js +1782 -1
  76. package/dist/esm/src/managers/environment/environmentManager.js +690 -1
  77. package/dist/esm/src/managers/environment/textureConfig.js +202 -1
  78. package/dist/esm/src/managers/scene/sceneExportManager.js +260 -1
  79. package/dist/esm/src/managers/scene/sceneInitializationManager.js +322 -1
  80. package/dist/esm/src/managers/scene/sceneOperationsManager.js +1485 -1
  81. package/dist/esm/src/managers/scene/sceneTooltipsManager.js +637 -1
  82. package/dist/esm/src/managers/system/disposalManager.js +440 -1
  83. package/dist/esm/src/managers/system/hotReloadManager.js +287 -1
  84. package/dist/esm/src/managers/system/performanceMonitor.js +858 -1
  85. package/dist/esm/src/rendering/modelPreloader.js +364 -1
  86. package/dist/esm/src/rendering/rendering2D.js +627 -1
  87. package/dist/esm/src/rendering/rendering3D.js +661 -1
  88. package/package.json +1 -1
@@ -1 +1,444 @@
1
- "use strict";Object.defineProperty(exports,"t",{value:!0});var t=require("../../../_virtual/_rollupPluginBabelHelpers.js"),n=function(){return t.createClass(function n(i){t.classCallCheck(this,n),this.sceneViewer=i,this.isDev="development"===process.env.NODE_ENV},[{key:"enhancedDisposal",value:(i=t.asyncToGenerator(t.regenerator().m(function n(){return t.regenerator().w(function(t){for(;;)switch(t.n){case 0:return this.isDev,this.forceStopOperations(),t.n=1,this.enhancedSceneCleanup();case 1:this.enhancedRendererCleanup(),this.sceneViewer.hotReloadManager&&this.sceneViewer.hotReloadManager.clearPendingOperations(),this.isDev&&this.sceneViewer.hotReloadManager&&this.sceneViewer.hotReloadManager.forceGarbageCollectionHint();case 2:return t.a(2)}},n,this)})),function(){return i.apply(this,arguments)})},{key:"forceStopOperations",value:function(){this.sceneViewer.isDestroyed=!0,this.sceneViewer.isLoading=!1,this.sceneViewer.currentTransition=null,this.sceneViewer.animationId&&(cancelAnimationFrame(this.sceneViewer.animationId),this.sceneViewer.animationId=null),this.isDev}},{key:"enhancedSceneCleanup",value:(n=t.asyncToGenerator(t.regenerator().m(function n(){var i,e=this;return t.regenerator().w(function(t){for(;;)switch(t.n){case 0:if(i={textures:0,materials:0,geometries:0,objects:0},this.sceneViewer.scene){for(this.sceneViewer.scene.traverse(function(t){t.material&&(Array.isArray(t.material)?t.material.forEach(function(t){i.textures+=e.disposeMaterialTextures(t),t.dispose(),i.materials++}):(i.textures+=e.disposeMaterialTextures(t.material),t.material.dispose(),i.materials++)),t.geometry&&(t.geometry.dispose(),i.geometries++),i.objects++});this.sceneViewer.scene.children.length>0;)this.sceneViewer.scene.remove(this.sceneViewer.scene.children[0]);this.isDev}case 1:return t.a(2)}},n,this)})),function(){return n.apply(this,arguments)})},{key:"disposeMaterialTextures",value:function(t){var n=0;return["map","normalMap","roughnessMap","metalnessMap","envMap","lightMap","bumpMap","specularMap"].forEach(function(i){t[i]&&(t[i].dispose(),n++)}),n}},{key:"enhancedRendererCleanup",value:function(){if(this.sceneViewer.renderer){var t=this.sceneViewer.renderer.getContext();if(t&&"function"==typeof t.getExtension){var n=t.getExtension("WEBGL_lose_context");n&&n.loseContext()}this.sceneViewer.renderer.dispose(),this.sceneViewer.renderer.forceContextLoss(),this.sceneViewer.renderer=null,this.isDev}}},{key:"cleanupScene",value:function(){var t=this;if(this.sceneViewer.scene){var n=[];this.sceneViewer.scene.traverse(function(t){n.push(t)});for(var i=function(){var i=n[e];i.geometry&&i.geometry.dispose(),i.material&&(Array.isArray(i.material)?i.material.forEach(function(n){return t.disposeMaterial(n)}):t.disposeMaterial(i.material));["map","lightMap","bumpMap","normalMap","specularMap","envMap"].forEach(function(t){i[t]&&i[t].dispose()}),i.parent&&i.parent.remove(i)},e=n.length-1;e>=0;e--)i();this.sceneViewer.scene.environment&&(this.sceneViewer.scene.environment.dispose(),this.sceneViewer.scene.environment=null),this.sceneViewer.scene.background&&this.sceneViewer.scene.background.dispose&&(this.sceneViewer.scene.background.dispose(),this.sceneViewer.scene.background=null),this.sceneViewer.scene.clear(),this.sceneViewer.scene=null}}},{key:"disposeMaterial",value:function(n){for(var i=0,e=Object.entries(n);i<e.length;i++){var s=t.slicedToArray(e[i],2);s[0];var u=s[1];u&&"object"===t.typeof(u)&&"function"==typeof u.dispose&&u.dispose()}n.dispose()}},{key:"cleanupRenderer",value:function(){this.sceneViewer.renderer&&(this.sceneViewer.renderer.domElement&&this.sceneViewer.renderer.domElement.parentNode&&this.sceneViewer.renderer.domElement.parentNode.removeChild(this.sceneViewer.renderer.domElement),this.sceneViewer.renderer.dispose(),this.sceneViewer.renderer.forceContextLoss(),this.sceneViewer.renderer=null)}},{key:"cleanupControls",value:function(){this.sceneViewer.controls&&(this.sceneViewer.controls.dispose(),this.sceneViewer.controls=null)}},{key:"cleanupEventListeners",value:function(){this.sceneViewer.handleResize&&(window.removeEventListener("resize",this.sceneViewer.handleResize),this.sceneViewer.handleResize=null),this.sceneViewer.resizeObserver&&(this.sceneViewer.resizeObserver.disconnect(),this.sceneViewer.resizeObserver=null),this.sceneViewer.handleKeyDown&&(window.removeEventListener("keydown",this.sceneViewer.handleKeyDown),this.sceneViewer.handleKeyDown=null),window._performanceKeyHandler&&(window.removeEventListener("keydown",window._performanceKeyHandler),delete window._performanceKeyHandler)}},{key:"cleanupPerformanceMonitoring",value:function(){if(this.sceneViewer.performanceMonitor){try{this.sceneViewer.performanceMonitor.stop()}catch(t){}this.sceneViewer.performanceMonitor=null}if(this.sceneViewer.performanceUI){try{"function"==typeof this.sceneViewer.performanceUI.dispose?this.sceneViewer.performanceUI.dispose():this.sceneViewer.performanceUI.hide()}catch(t){}this.sceneViewer.performanceUI=null}try{var t=document.querySelectorAll("#performance-monitor-ui");t.length>0&&t.forEach(function(t){t.parentNode&&t.parentNode.removeChild(t)})}catch(t){}}},{key:"cleanupGlobalReferences",value:function(){var t=this.parent;if(t){if(t.tooltipsManager)try{t.tooltipsManager.dispose()}catch(t){}finally{t.tooltipsManager=null}t.hotReloadManager=null,t.sceneExportManager=null,t.componentManager=null,t.sceneInitializationManager=null,t.environmentManager=null,t.keyboardControlsManager=null,t.pathfindingManager=null,t.sceneOperationsManager=null,t.animationManager=null,t.cameraControlsManager=null,t.disposalManager=null}}},{key:"cleanupNuxtEventListeners",value:function(){window.$nuxt&&window.$nuxt.$off&&(window.$nuxt.$off("loadNewScene"),window.$nuxt.$off("createNewScene"))}}]);var n,i}();exports.DisposalManager=n;
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _rollupPluginBabelHelpers = require('../../../_virtual/_rollupPluginBabelHelpers.js');
6
+
7
+ /**
8
+ * Disposal Manager Class
9
+ * Handles comprehensive cleanup and disposal of Three.js resources
10
+ */
11
+ var DisposalManager = /*#__PURE__*/function () {
12
+ function DisposalManager(sceneViewer) {
13
+ _rollupPluginBabelHelpers.classCallCheck(this, DisposalManager);
14
+ this.sceneViewer = sceneViewer;
15
+ this.isDev = process.env.NODE_ENV === 'development';
16
+ }
17
+
18
+ /**
19
+ * Enhanced disposal system with hot-reload support
20
+ */
21
+ return _rollupPluginBabelHelpers.createClass(DisposalManager, [{
22
+ key: "enhancedDisposal",
23
+ value: (function () {
24
+ var _enhancedDisposal = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee() {
25
+ var _window$_sceneViewerI, _window$_sceneViewerI2;
26
+ return _rollupPluginBabelHelpers.regenerator().w(function (_context) {
27
+ while (1) switch (_context.n) {
28
+ case 0:
29
+ if (this.isDev) {
30
+ console.log('🔄 [Hot-Reload] Starting enhanced disposal...', {
31
+ timestamp: Date.now(),
32
+ instanceId: this.sceneViewer.instanceId,
33
+ totalInstances: ((_window$_sceneViewerI = window._sceneViewerInstances) === null || _window$_sceneViewerI === void 0 ? void 0 : _window$_sceneViewerI.size) || 0
34
+ });
35
+ }
36
+
37
+ // Immediately stop all operations
38
+ this.forceStopOperations();
39
+
40
+ // Enhanced scene cleanup
41
+ _context.n = 1;
42
+ return this.enhancedSceneCleanup();
43
+ case 1:
44
+ // Enhanced renderer cleanup
45
+ this.enhancedRendererCleanup();
46
+
47
+ // Clear any pending operations (delegate to hot reload manager)
48
+ if (this.sceneViewer.hotReloadManager) {
49
+ this.sceneViewer.hotReloadManager.clearPendingOperations();
50
+ }
51
+
52
+ // Development garbage collection hint
53
+ if (this.isDev) {
54
+ if (this.sceneViewer.hotReloadManager) {
55
+ this.sceneViewer.hotReloadManager.forceGarbageCollectionHint();
56
+ }
57
+ console.log('✅ [Hot-Reload] Enhanced disposal completed', {
58
+ timestamp: Date.now(),
59
+ instanceId: this.sceneViewer.instanceId,
60
+ remainingInstances: ((_window$_sceneViewerI2 = window._sceneViewerInstances) === null || _window$_sceneViewerI2 === void 0 ? void 0 : _window$_sceneViewerI2.size) || 0
61
+ });
62
+ }
63
+ case 2:
64
+ return _context.a(2);
65
+ }
66
+ }, _callee, this);
67
+ }));
68
+ function enhancedDisposal() {
69
+ return _enhancedDisposal.apply(this, arguments);
70
+ }
71
+ return enhancedDisposal;
72
+ }()
73
+ /**
74
+ * Force stop all ongoing operations immediately
75
+ */
76
+ )
77
+ }, {
78
+ key: "forceStopOperations",
79
+ value: function forceStopOperations() {
80
+ this.sceneViewer.isDestroyed = true;
81
+ this.sceneViewer.isLoading = false;
82
+ this.sceneViewer.currentTransition = null;
83
+
84
+ // Stop any ongoing animations
85
+ if (this.sceneViewer.animationId) {
86
+ cancelAnimationFrame(this.sceneViewer.animationId);
87
+ this.sceneViewer.animationId = null;
88
+ }
89
+ if (this.isDev) {
90
+ console.log('🛑 [Hot-Reload] Forced stop of all operations');
91
+ }
92
+ }
93
+
94
+ /**
95
+ * Enhanced scene cleanup with better memory leak prevention
96
+ */
97
+ }, {
98
+ key: "enhancedSceneCleanup",
99
+ value: (function () {
100
+ var _enhancedSceneCleanup = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee2() {
101
+ var _this = this;
102
+ var disposedCount;
103
+ return _rollupPluginBabelHelpers.regenerator().w(function (_context2) {
104
+ while (1) switch (_context2.n) {
105
+ case 0:
106
+ disposedCount = {
107
+ textures: 0,
108
+ materials: 0,
109
+ geometries: 0,
110
+ objects: 0
111
+ };
112
+ if (this.sceneViewer.scene) {
113
+ // Dispose in proper order: textures → materials → geometries → objects
114
+ this.sceneViewer.scene.traverse(function (child) {
115
+ if (child.material) {
116
+ if (Array.isArray(child.material)) {
117
+ child.material.forEach(function (material) {
118
+ disposedCount.textures += _this.disposeMaterialTextures(material);
119
+ material.dispose();
120
+ disposedCount.materials++;
121
+ });
122
+ } else {
123
+ disposedCount.textures += _this.disposeMaterialTextures(child.material);
124
+ child.material.dispose();
125
+ disposedCount.materials++;
126
+ }
127
+ }
128
+ if (child.geometry) {
129
+ child.geometry.dispose();
130
+ disposedCount.geometries++;
131
+ }
132
+ disposedCount.objects++;
133
+ });
134
+
135
+ // Clear scene
136
+ while (this.sceneViewer.scene.children.length > 0) {
137
+ this.sceneViewer.scene.remove(this.sceneViewer.scene.children[0]);
138
+ }
139
+ if (this.isDev) {
140
+ console.log('🧹 [Hot-Reload] Enhanced scene cleanup completed:', disposedCount);
141
+ }
142
+ }
143
+ case 1:
144
+ return _context2.a(2);
145
+ }
146
+ }, _callee2, this);
147
+ }));
148
+ function enhancedSceneCleanup() {
149
+ return _enhancedSceneCleanup.apply(this, arguments);
150
+ }
151
+ return enhancedSceneCleanup;
152
+ }()
153
+ /**
154
+ * Dispose material textures and return count
155
+ */
156
+ )
157
+ }, {
158
+ key: "disposeMaterialTextures",
159
+ value: function disposeMaterialTextures(material) {
160
+ var textureCount = 0;
161
+ var textureProperties = ['map', 'normalMap', 'roughnessMap', 'metalnessMap', 'envMap', 'lightMap', 'bumpMap', 'specularMap'];
162
+ textureProperties.forEach(function (prop) {
163
+ if (material[prop]) {
164
+ material[prop].dispose();
165
+ textureCount++;
166
+ }
167
+ });
168
+ return textureCount;
169
+ }
170
+
171
+ /**
172
+ * Enhanced renderer cleanup with WebGL state clearing
173
+ */
174
+ }, {
175
+ key: "enhancedRendererCleanup",
176
+ value: function enhancedRendererCleanup() {
177
+ if (this.sceneViewer.renderer) {
178
+ // Clear WebGL state
179
+ var gl = this.sceneViewer.renderer.getContext();
180
+ if (gl && typeof gl.getExtension === 'function') {
181
+ // Force WebGL context loss to free memory
182
+ var loseContext = gl.getExtension('WEBGL_lose_context');
183
+ if (loseContext) {
184
+ loseContext.loseContext();
185
+ }
186
+ }
187
+
188
+ // Standard renderer disposal
189
+ this.sceneViewer.renderer.dispose();
190
+ this.sceneViewer.renderer.forceContextLoss();
191
+ this.sceneViewer.renderer = null;
192
+ if (this.isDev) {
193
+ console.log('🎮 [Hot-Reload] Enhanced renderer cleanup with WebGL state clearing');
194
+ }
195
+ }
196
+ }
197
+
198
+ /**
199
+ * Clean up scene objects with material and geometry disposal
200
+ */
201
+ }, {
202
+ key: "cleanupScene",
203
+ value: function cleanupScene() {
204
+ var _this2 = this;
205
+ if (!this.sceneViewer.scene) return;
206
+ console.log('🗑️ Disposing scene objects...');
207
+
208
+ // Collect all objects to dispose
209
+ var objectsToDispose = [];
210
+ this.sceneViewer.scene.traverse(function (object) {
211
+ objectsToDispose.push(object);
212
+ });
213
+
214
+ // Dispose objects in reverse order (children first)
215
+ var _loop = function _loop() {
216
+ var object = objectsToDispose[i];
217
+
218
+ // Dispose geometry
219
+ if (object.geometry) {
220
+ object.geometry.dispose();
221
+ }
222
+
223
+ // Dispose materials
224
+ if (object.material) {
225
+ if (Array.isArray(object.material)) {
226
+ object.material.forEach(function (material) {
227
+ return _this2.disposeMaterial(material);
228
+ });
229
+ } else {
230
+ _this2.disposeMaterial(object.material);
231
+ }
232
+ }
233
+
234
+ // Dispose textures on lights and other objects
235
+ var textureProperties = ['map', 'lightMap', 'bumpMap', 'normalMap', 'specularMap', 'envMap'];
236
+ textureProperties.forEach(function (prop) {
237
+ if (object[prop]) object[prop].dispose();
238
+ });
239
+
240
+ // Remove from parent
241
+ if (object.parent) {
242
+ object.parent.remove(object);
243
+ }
244
+ };
245
+ for (var i = objectsToDispose.length - 1; i >= 0; i--) {
246
+ _loop();
247
+ }
248
+
249
+ // Dispose scene environment and background
250
+ if (this.sceneViewer.scene.environment) {
251
+ this.sceneViewer.scene.environment.dispose();
252
+ this.sceneViewer.scene.environment = null;
253
+ }
254
+ if (this.sceneViewer.scene.background && this.sceneViewer.scene.background.dispose) {
255
+ this.sceneViewer.scene.background.dispose();
256
+ this.sceneViewer.scene.background = null;
257
+ }
258
+
259
+ // Clear scene
260
+ this.sceneViewer.scene.clear();
261
+ this.sceneViewer.scene = null;
262
+ }
263
+
264
+ /**
265
+ * Dispose a material and its textures
266
+ */
267
+ }, {
268
+ key: "disposeMaterial",
269
+ value: function disposeMaterial(material) {
270
+ // Dispose all texture properties
271
+ for (var _i = 0, _Object$entries = Object.entries(material); _i < _Object$entries.length; _i++) {
272
+ var _Object$entries$_i = _rollupPluginBabelHelpers.slicedToArray(_Object$entries[_i], 2);
273
+ _Object$entries$_i[0];
274
+ var value = _Object$entries$_i[1];
275
+ if (value && _rollupPluginBabelHelpers["typeof"](value) === 'object' && typeof value.dispose === 'function') {
276
+ value.dispose();
277
+ }
278
+ }
279
+ material.dispose();
280
+ }
281
+
282
+ /**
283
+ * Clean up renderer resources
284
+ */
285
+ }, {
286
+ key: "cleanupRenderer",
287
+ value: function cleanupRenderer() {
288
+ if (this.sceneViewer.renderer) {
289
+ // Remove renderer DOM element
290
+ if (this.sceneViewer.renderer.domElement && this.sceneViewer.renderer.domElement.parentNode) {
291
+ this.sceneViewer.renderer.domElement.parentNode.removeChild(this.sceneViewer.renderer.domElement);
292
+ }
293
+
294
+ // Dispose renderer resources
295
+ this.sceneViewer.renderer.dispose();
296
+ this.sceneViewer.renderer.forceContextLoss();
297
+ this.sceneViewer.renderer = null;
298
+ }
299
+ }
300
+
301
+ /**
302
+ * Clean up controls
303
+ */
304
+ }, {
305
+ key: "cleanupControls",
306
+ value: function cleanupControls() {
307
+ if (this.sceneViewer.controls) {
308
+ this.sceneViewer.controls.dispose();
309
+ this.sceneViewer.controls = null;
310
+ }
311
+ }
312
+
313
+ /**
314
+ * Clean up event listeners
315
+ */
316
+ }, {
317
+ key: "cleanupEventListeners",
318
+ value: function cleanupEventListeners() {
319
+ if (this.sceneViewer.handleResize) {
320
+ window.removeEventListener('resize', this.sceneViewer.handleResize);
321
+ this.sceneViewer.handleResize = null;
322
+ }
323
+ if (this.sceneViewer.resizeObserver) {
324
+ this.sceneViewer.resizeObserver.disconnect();
325
+ this.sceneViewer.resizeObserver = null;
326
+ }
327
+ if (this.sceneViewer.handleKeyDown) {
328
+ window.removeEventListener('keydown', this.sceneViewer.handleKeyDown);
329
+ this.sceneViewer.handleKeyDown = null;
330
+ }
331
+ if (window._performanceKeyHandler) {
332
+ window.removeEventListener('keydown', window._performanceKeyHandler);
333
+ delete window._performanceKeyHandler;
334
+ }
335
+ }
336
+
337
+ /**
338
+ * Clean up performance monitoring
339
+ */
340
+ }, {
341
+ key: "cleanupPerformanceMonitoring",
342
+ value: function cleanupPerformanceMonitoring() {
343
+ console.log('🧹 Cleaning up performance monitoring...');
344
+ if (this.sceneViewer.performanceMonitor) {
345
+ try {
346
+ this.sceneViewer.performanceMonitor.stop();
347
+ } catch (error) {
348
+ console.warn('⚠️ Error stopping performance monitor:', error);
349
+ }
350
+ this.sceneViewer.performanceMonitor = null;
351
+ }
352
+ if (this.sceneViewer.performanceUI) {
353
+ try {
354
+ // Use dispose() method for proper cleanup instead of hide()
355
+ if (typeof this.sceneViewer.performanceUI.dispose === 'function') {
356
+ this.sceneViewer.performanceUI.dispose();
357
+ } else {
358
+ // Fallback to hide() if dispose() doesn't exist
359
+ console.warn('⚠️ PerformanceUI dispose() method not available, falling back to hide()');
360
+ this.sceneViewer.performanceUI.hide();
361
+ }
362
+ } catch (error) {
363
+ console.warn('⚠️ Error disposing performance UI:', error);
364
+ }
365
+ this.sceneViewer.performanceUI = null;
366
+ }
367
+
368
+ // Additional cleanup: remove any stray performance monitor elements
369
+ try {
370
+ var strayElements = document.querySelectorAll('#performance-monitor-ui');
371
+ if (strayElements.length > 0) {
372
+ console.log("\uD83E\uDDF9 Found ".concat(strayElements.length, " stray performance monitor elements, removing..."));
373
+ strayElements.forEach(function (element) {
374
+ if (element.parentNode) {
375
+ element.parentNode.removeChild(element);
376
+ }
377
+ });
378
+ }
379
+ } catch (error) {
380
+ console.warn('⚠️ Error cleaning up stray performance monitor elements:', error);
381
+ }
382
+ console.log('✅ Performance monitoring cleanup completed');
383
+ }
384
+ /**
385
+ * Clean up global references
386
+ */
387
+ }, {
388
+ key: "cleanupGlobalReferences",
389
+ value: function cleanupGlobalReferences() {
390
+ console.log('🧹 Cleaning up global references...');
391
+ var parent = this.parent;
392
+
393
+ // Check if parent exists before proceeding
394
+ if (!parent) {
395
+ console.warn('⚠️ Parent not available for global references cleanup');
396
+ return;
397
+ }
398
+
399
+ // Clean up tooltips manager with extra safety
400
+ if (parent.tooltipsManager) {
401
+ try {
402
+ console.log('🧹 Disposing tooltipsManager...');
403
+ parent.tooltipsManager.dispose();
404
+ } catch (e) {
405
+ console.error('Error disposing tooltipsManager:', e);
406
+ } finally {
407
+ // Always null the reference even if dispose fails
408
+ parent.tooltipsManager = null;
409
+ console.log('✅ tooltipsManager nullified');
410
+ }
411
+ }
412
+
413
+ // Clean up other managers - now safe since we checked parent exists
414
+ parent.hotReloadManager = null;
415
+ parent.sceneExportManager = null;
416
+ parent.componentManager = null;
417
+ parent.sceneInitializationManager = null;
418
+ parent.environmentManager = null;
419
+ parent.keyboardControlsManager = null;
420
+ parent.pathfindingManager = null;
421
+ parent.sceneOperationsManager = null;
422
+ parent.animationManager = null;
423
+ parent.cameraControlsManager = null;
424
+
425
+ // Set disposal manager to null last
426
+ parent.disposalManager = null;
427
+ console.log('✅ Global references cleaned up');
428
+ }
429
+
430
+ /**
431
+ * Clean up Nuxt event listeners
432
+ */
433
+ }, {
434
+ key: "cleanupNuxtEventListeners",
435
+ value: function cleanupNuxtEventListeners() {
436
+ if (window.$nuxt && window.$nuxt.$off) {
437
+ window.$nuxt.$off('loadNewScene');
438
+ window.$nuxt.$off('createNewScene');
439
+ }
440
+ }
441
+ }]);
442
+ }();
443
+
444
+ exports.DisposalManager = DisposalManager;