@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,371 @@
1
- import{createClass as e,classCallCheck as n}from"../../../_virtual/_rollupPluginBabelHelpers.js";import*as i from"three";import{logger as t}from"../../core/debugLogger.js";var a=function(){return e(function e(i){n(this,e),this.sceneViewer=i,this.handleKeyDown=null},[{key:"setupKeyboardControls",value:function(){var e=this;this.handleKeyDown=function(n){if(n.ctrlKey&&("z"===n.key.toLowerCase()||"KeyZ"===n.code))return n.preventDefault(),n.stopPropagation(),void e.undoTransform();if(n.altKey&&("r"===n.key.toLowerCase()||"KeyR"===n.code))return n.preventDefault(),n.stopPropagation(),void e.toggleShouldUpdatePaths();switch(n.key.toLowerCase()){case"p":e.togglePerformanceUI();break;case"l":e.logPerformanceSummary();break;case"r":e.resetPerformanceStats();break;case"a":e.toggleAutoRotation();break;case"e":e.cycleToneMapping();break;case"=":case"+":e.increaseExposure();break;case"-":e.decreaseExposure();break;case"h":e.showHelpInfo()}},window.addEventListener("keydown",this.handleKeyDown,!0),window._performanceKeyHandler=this.handleKeyDown,this.overrideTransformControlsKeyboard(),t.info("Keyboard controls initialized with Ctrl+Z undo override")}},{key:"togglePerformanceUI",value:function(){var e=this.sceneViewer;e.performanceUI&&(e.performanceUI.isVisible?e.performanceUI.hide():e.performanceUI.show())}},{key:"logPerformanceSummary",value:function(){var e=this.sceneViewer;e.performanceMonitor&&e.performanceMonitor.logSummary()}},{key:"resetPerformanceStats",value:function(){var e=this.sceneViewer;e.performanceMonitor&&e.performanceMonitor.reset()}},{key:"cycleToneMapping",value:function(){var e=this.sceneViewer;if(e.renderer){var n=[{type:i.NoToneMapping,name:"None"},{type:i.LinearToneMapping,name:"Linear"},{type:i.ReinhardToneMapping,name:"Reinhard"},{type:i.CineonToneMapping,name:"Cineon"},{type:i.ACESFilmicToneMapping,name:"ACES Filmic"}],t=n.findIndex(function(n){return n.type===e.renderer.toneMapping}),a=(t+1)%n.length,o=(n[t],n[a]);e.renderer.toneMapping=o.type}}},{key:"increaseExposure",value:function(){var e=this.sceneViewer;e.renderer&&(e.renderer.toneMappingExposure=Math.min(e.renderer.toneMappingExposure+.1,3))}},{key:"decreaseExposure",value:function(){var e=this.sceneViewer;e.renderer&&(e.renderer.toneMappingExposure=Math.max(e.renderer.toneMappingExposure-.1,.1))}},{key:"showHelpInfo",value:function(){}},{key:"toggleShouldUpdatePaths",value:function(){var e=this.sceneViewer;e&&"function"==typeof e.toggleShouldUpdatePaths&&e.toggleShouldUpdatePaths()}},{key:"toggleAutoRotation",value:function(){var e=this.sceneViewer;if(e.sceneInitializationManager){var n=e.sceneInitializationManager.toggleAutoRotation();void 0!==e.isAutoRotating&&(e.isAutoRotating=n)}}},{key:"setupResizeHandler",value:function(){var e=this.sceneViewer;e.handleResize=function(){if(e.$refs.container&&e.camera&&e.renderer){var n=e.$refs.container.getBoundingClientRect(),i=n.width,t=n.height;e.camera.aspect=i/t,e.camera.updateProjectionMatrix(),e.renderer.setSize(i,t),e.composer&&(e.composer.setSize(i,t),e.ssaoPass&&e.ssaoPass.setSize(i,t),e.bloomPass&&e.bloomPass.resolution.set(i,t)),e.tooltipsManager&&e.tooltipsManager.resize()}},e.resizeObserver=new ResizeObserver(e.handleResize),e.resizeObserver.observe(e.$refs.container),window.addEventListener("resize",e.handleResize),t.info("Resize handler initialized")}},{key:"cleanup",value:function(){this.handleKeyDown&&(window.removeEventListener("keydown",this.handleKeyDown,!0),this.handleKeyDown=null),window._performanceKeyHandler&&(window.removeEventListener("keydown",window._performanceKeyHandler,!0),delete window._performanceKeyHandler);var e=this.sceneViewer;e.handleResize&&(window.removeEventListener("resize",e.handleResize),e.handleResize=null),e.resizeObserver&&(e.resizeObserver.disconnect(),e.resizeObserver=null),t.info("Keyboard controls cleanup completed")}},{key:"undoTransform",value:function(){var e=this.sceneViewer;e.centralPlant&&("function"==typeof e.centralPlant.undoTransform&&e.centralPlant.undoTransform()&&(e.sceneHelper&&"function"==typeof e.sceneHelper.requestRender&&e.sceneHelper.requestRender(),e.renderer&&e.renderer.render(e.scene,e.camera),e.updateComponentPositions&&"function"==typeof e.updateComponentPositions&&e.updateComponentPositions()))}},{key:"overrideTransformControlsKeyboard",value:function(){var e=this.sceneViewer;if(e.transformManager&&e.transformManager.eventHandlers&&e.transformManager.eventHandlers.keydown){var n=e.transformManager.eventHandlers.keydown;e.transformManager.eventHandlers.keydown=function(e){(!e.ctrlKey||"z"!==e.key.toLowerCase()&&"KeyZ"!==e.code)&&n(e)}}}}])}();export{a as KeyboardControlsManager};
1
+ import { createClass as _createClass, classCallCheck as _classCallCheck } from '../../../_virtual/_rollupPluginBabelHelpers.js';
2
+ import * as THREE from 'three';
3
+ import { logger } from '../../core/debugLogger.js';
4
+
5
+ var KeyboardControlsManager = /*#__PURE__*/function () {
6
+ function KeyboardControlsManager(sceneViewer) {
7
+ _classCallCheck(this, KeyboardControlsManager);
8
+ this.sceneViewer = sceneViewer;
9
+ this.handleKeyDown = null;
10
+ }
11
+
12
+ /**
13
+ * Setup keyboard event handlers
14
+ */
15
+ return _createClass(KeyboardControlsManager, [{
16
+ key: "setupKeyboardControls",
17
+ value: function setupKeyboardControls() {
18
+ var _this = this;
19
+ this.handleKeyDown = function (event) {
20
+ // Handle Ctrl+Z for undo with high priority
21
+ if (event.ctrlKey && (event.key.toLowerCase() === 'z' || event.code === 'KeyZ')) {
22
+ event.preventDefault();
23
+ event.stopPropagation();
24
+ _this.undoTransform();
25
+ return;
26
+ }
27
+
28
+ // Handle Alt+R for toggling auto-repathing
29
+ if (event.altKey && (event.key.toLowerCase() === 'r' || event.code === 'KeyR')) {
30
+ event.preventDefault();
31
+ event.stopPropagation();
32
+ _this.toggleShouldUpdatePaths();
33
+ return;
34
+ }
35
+ switch (event.key.toLowerCase()) {
36
+ case 'p':
37
+ _this.togglePerformanceUI();
38
+ break;
39
+ case 'l':
40
+ _this.logPerformanceSummary();
41
+ break;
42
+ case 'r':
43
+ _this.resetPerformanceStats();
44
+ break;
45
+ case 'a':
46
+ _this.toggleAutoRotation();
47
+ break;
48
+ case 'e':
49
+ _this.cycleToneMapping();
50
+ break;
51
+ case '=':
52
+ case '+':
53
+ _this.increaseExposure();
54
+ break;
55
+ case '-':
56
+ _this.decreaseExposure();
57
+ break;
58
+ case 'h':
59
+ _this.showHelpInfo();
60
+ break;
61
+ }
62
+ };
63
+
64
+ // Add with capture phase for higher priority
65
+ window.addEventListener('keydown', this.handleKeyDown, true);
66
+ window._performanceKeyHandler = this.handleKeyDown;
67
+
68
+ // Override transform controls keyboard handling
69
+ this.overrideTransformControlsKeyboard();
70
+ logger.info('Keyboard controls initialized with Ctrl+Z undo override');
71
+ }
72
+
73
+ /**
74
+ * Toggle performance UI visibility
75
+ */
76
+ }, {
77
+ key: "togglePerformanceUI",
78
+ value: function togglePerformanceUI() {
79
+ var component = this.sceneViewer;
80
+ if (component.performanceUI) {
81
+ if (component.performanceUI.isVisible) {
82
+ component.performanceUI.hide();
83
+ console.log('📊 Performance UI hidden');
84
+ } else {
85
+ component.performanceUI.show();
86
+ console.log('📊 Performance UI shown');
87
+ }
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Log performance summary to console
93
+ */
94
+ }, {
95
+ key: "logPerformanceSummary",
96
+ value: function logPerformanceSummary() {
97
+ var component = this.sceneViewer;
98
+ if (component.performanceMonitor) {
99
+ component.performanceMonitor.logSummary();
100
+ }
101
+ }
102
+
103
+ /**
104
+ * Reset performance statistics
105
+ */
106
+ }, {
107
+ key: "resetPerformanceStats",
108
+ value: function resetPerformanceStats() {
109
+ var component = this.sceneViewer;
110
+ if (component.performanceMonitor) {
111
+ component.performanceMonitor.reset();
112
+ }
113
+ }
114
+
115
+ /**
116
+ * Cycle through different tone mapping types
117
+ */
118
+ }, {
119
+ key: "cycleToneMapping",
120
+ value: function cycleToneMapping() {
121
+ var component = this.sceneViewer;
122
+ if (!component.renderer) {
123
+ console.warn('⚠️ Renderer not initialized yet');
124
+ return;
125
+ }
126
+ var toneMappings = [{
127
+ type: THREE.NoToneMapping,
128
+ name: 'None'
129
+ }, {
130
+ type: THREE.LinearToneMapping,
131
+ name: 'Linear'
132
+ }, {
133
+ type: THREE.ReinhardToneMapping,
134
+ name: 'Reinhard'
135
+ }, {
136
+ type: THREE.CineonToneMapping,
137
+ name: 'Cineon'
138
+ }, {
139
+ type: THREE.ACESFilmicToneMapping,
140
+ name: 'ACES Filmic'
141
+ }];
142
+ var currentIndex = toneMappings.findIndex(function (tm) {
143
+ return tm.type === component.renderer.toneMapping;
144
+ });
145
+ var nextIndex = (currentIndex + 1) % toneMappings.length;
146
+ var previousMapping = toneMappings[currentIndex] || {
147
+ name: 'Unknown'
148
+ };
149
+ var newMapping = toneMappings[nextIndex];
150
+ component.renderer.toneMapping = newMapping.type;
151
+ console.group('🎨 Tone Mapping Changed');
152
+ console.log("Previous: ".concat(previousMapping.name));
153
+ console.log("Current: ".concat(newMapping.name));
154
+ console.log("Exposure: ".concat(component.renderer.toneMappingExposure.toFixed(1)));
155
+ console.groupEnd();
156
+ }
157
+
158
+ /**
159
+ * Increase renderer exposure
160
+ */
161
+ }, {
162
+ key: "increaseExposure",
163
+ value: function increaseExposure() {
164
+ var component = this.sceneViewer;
165
+ if (component.renderer) {
166
+ component.renderer.toneMappingExposure = Math.min(component.renderer.toneMappingExposure + 0.1, 3.0);
167
+ console.log("\u2600\uFE0F Exposure increased to: ".concat(component.renderer.toneMappingExposure.toFixed(1)));
168
+ }
169
+ }
170
+
171
+ /**
172
+ * Decrease renderer exposure
173
+ */
174
+ }, {
175
+ key: "decreaseExposure",
176
+ value: function decreaseExposure() {
177
+ var component = this.sceneViewer;
178
+ if (component.renderer) {
179
+ component.renderer.toneMappingExposure = Math.max(component.renderer.toneMappingExposure - 0.1, 0.1);
180
+ console.log("\uD83C\uDF19 Exposure decreased to: ".concat(component.renderer.toneMappingExposure.toFixed(1)));
181
+ }
182
+ }
183
+
184
+ /**
185
+ * Show help information for keyboard controls
186
+ */
187
+ }, {
188
+ key: "showHelpInfo",
189
+ value: function showHelpInfo() {
190
+ console.group('🎮 3D Scene Controls');
191
+ console.log('↩️ Ctrl+Z - Undo last transform');
192
+ console.log('🔄 Alt+R - Toggle auto-repathing after transforms');
193
+ console.log('📊 P - Toggle performance UI');
194
+ console.log('📝 L - Log performance summary');
195
+ console.log('🔄 R - Reset performance statistics');
196
+ console.log('🔄 A - Toggle auto-rotation');
197
+ console.log('🎨 E - Cycle tone mapping types');
198
+ console.log('☀️ + / = - Increase exposure');
199
+ console.log('🌙 - - Decrease exposure');
200
+ console.log('❓ H - Show this help');
201
+ console.groupEnd();
202
+ }
203
+ /**
204
+ * Toggle shouldRepath setting in the scene viewer
205
+ */
206
+ }, {
207
+ key: "toggleShouldUpdatePaths",
208
+ value: function toggleShouldUpdatePaths() {
209
+ var component = this.sceneViewer;
210
+ if (component && typeof component.toggleShouldUpdatePaths === 'function') {
211
+ component.toggleShouldUpdatePaths();
212
+ } else {
213
+ console.warn('⚠️ toggleShouldUpdatePaths method not available on scene viewer');
214
+ }
215
+ }
216
+
217
+ /**
218
+ * Toggle auto-rotation of the camera
219
+ */
220
+ }, {
221
+ key: "toggleAutoRotation",
222
+ value: function toggleAutoRotation() {
223
+ var component = this.sceneViewer;
224
+ if (component.sceneInitializationManager) {
225
+ var isEnabled = component.sceneInitializationManager.toggleAutoRotation();
226
+ console.log("\uD83D\uDD04 Auto-rotation ".concat(isEnabled ? 'enabled' : 'disabled'));
227
+
228
+ // Update the component's isAutoRotating state for UI sync
229
+ if (component.isAutoRotating !== undefined) {
230
+ component.isAutoRotating = isEnabled;
231
+ }
232
+ } else {
233
+ console.warn('⚠️ Scene initialization manager not available, cannot toggle auto-rotation');
234
+ }
235
+ }
236
+
237
+ /**
238
+ * Setup resize handler for responsive design
239
+ */
240
+ }, {
241
+ key: "setupResizeHandler",
242
+ value: function setupResizeHandler() {
243
+ var component = this.sceneViewer;
244
+ component.handleResize = function () {
245
+ if (!component.$refs.container || !component.camera || !component.renderer) return;
246
+ var containerRect = component.$refs.container.getBoundingClientRect();
247
+ var containerWidth = containerRect.width;
248
+ var containerHeight = containerRect.height;
249
+ component.camera.aspect = containerWidth / containerHeight;
250
+ component.camera.updateProjectionMatrix();
251
+ component.renderer.setSize(containerWidth, containerHeight);
252
+ if (component.composer) {
253
+ component.composer.setSize(containerWidth, containerHeight);
254
+ if (component.ssaoPass) {
255
+ component.ssaoPass.setSize(containerWidth, containerHeight);
256
+ }
257
+ if (component.bloomPass) {
258
+ component.bloomPass.resolution.set(containerWidth, containerHeight);
259
+ }
260
+ }
261
+
262
+ // Update tooltip renderer if it exists
263
+ if (component.tooltipsManager) {
264
+ component.tooltipsManager.resize();
265
+ }
266
+ };
267
+
268
+ // Set up ResizeObserver for better container size tracking
269
+ component.resizeObserver = new ResizeObserver(component.handleResize);
270
+ component.resizeObserver.observe(component.$refs.container);
271
+
272
+ // Also listen for window resize as fallback
273
+ window.addEventListener('resize', component.handleResize);
274
+ logger.info('Resize handler initialized');
275
+ }
276
+
277
+ /**
278
+ * Cleanup event listeners
279
+ */
280
+ }, {
281
+ key: "cleanup",
282
+ value: function cleanup() {
283
+ if (this.handleKeyDown) {
284
+ window.removeEventListener('keydown', this.handleKeyDown, true);
285
+ this.handleKeyDown = null;
286
+ }
287
+ if (window._performanceKeyHandler) {
288
+ window.removeEventListener('keydown', window._performanceKeyHandler, true);
289
+ delete window._performanceKeyHandler;
290
+ }
291
+ var component = this.sceneViewer;
292
+ if (component.handleResize) {
293
+ window.removeEventListener('resize', component.handleResize);
294
+ component.handleResize = null;
295
+ }
296
+ if (component.resizeObserver) {
297
+ component.resizeObserver.disconnect();
298
+ component.resizeObserver = null;
299
+ }
300
+ logger.info('Keyboard controls cleanup completed');
301
+ }
302
+
303
+ /**
304
+ * Undo the last transform operation
305
+ */
306
+ }, {
307
+ key: "undoTransform",
308
+ value: function undoTransform() {
309
+ var component = this.sceneViewer;
310
+
311
+ // Check if CentralPlant instance exists and has the undoTransform method
312
+ if (!component.centralPlant) {
313
+ console.warn('⚠️ CentralPlant instance not available for undo operation');
314
+ return;
315
+ }
316
+ if (typeof component.centralPlant.undoTransform !== 'function') {
317
+ console.warn('⚠️ undoTransform method not available on CentralPlant instance');
318
+ return;
319
+ }
320
+ var success = component.centralPlant.undoTransform();
321
+ if (success) {
322
+ console.log('✅ Transform undone via keyboard shortcut (Ctrl+Z)');
323
+
324
+ // If there's a scene helper, trigger a render update
325
+ if (component.sceneHelper && typeof component.sceneHelper.requestRender === 'function') {
326
+ component.sceneHelper.requestRender();
327
+ }
328
+
329
+ // If there's a renderer, trigger a render
330
+ if (component.renderer) {
331
+ component.renderer.render(component.scene, component.camera);
332
+ }
333
+
334
+ // Update any UI elements that might be affected
335
+ if (component.updateComponentPositions && typeof component.updateComponentPositions === 'function') {
336
+ component.updateComponentPositions();
337
+ }
338
+ } else {
339
+ console.log('⚠️ No transform to undo');
340
+ }
341
+ }
342
+
343
+ /**
344
+ * Override transform controls keyboard handling to ensure Ctrl+Z undo works
345
+ */
346
+ }, {
347
+ key: "overrideTransformControlsKeyboard",
348
+ value: function overrideTransformControlsKeyboard() {
349
+ var component = this.sceneViewer;
350
+
351
+ // If transform controls manager exists, ensure it doesn't interfere with Ctrl+Z
352
+ if (component.transformManager && component.transformManager.eventHandlers && component.transformManager.eventHandlers.keydown) {
353
+ var originalHandler = component.transformManager.eventHandlers.keydown;
354
+
355
+ // Create a new handler that checks for Ctrl+Z first
356
+ component.transformManager.eventHandlers.keydown = function (event) {
357
+ // If it's Ctrl+Z, don't handle it in transform controls
358
+ if (event.ctrlKey && (event.key.toLowerCase() === 'z' || event.code === 'KeyZ')) {
359
+ return; // Let our undo handler take care of it
360
+ }
361
+
362
+ // Otherwise, use the original handler
363
+ originalHandler(event);
364
+ };
365
+ console.log('✅ Transform controls keyboard handling overridden for Ctrl+Z');
366
+ }
367
+ }
368
+ }]);
369
+ }();
370
+
371
+ export { KeyboardControlsManager };