@nice2dev/ui-3d 1.0.5 → 1.0.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 (95) hide show
  1. package/dist/cjs/core/i18n.js +3 -3
  2. package/dist/cjs/dance/DanceBridge.js +13 -13
  3. package/dist/cjs/dance/DanceScoreEngine.js +8 -8
  4. package/dist/cjs/dance/PoseDetector.js +20 -20
  5. package/dist/cjs/material/NiceMaterialEditor.js +19 -19
  6. package/dist/cjs/model/ModelEditorLeftPanel.js +5 -5
  7. package/dist/cjs/model/ModelEditorLeftPanel.js.map +1 -1
  8. package/dist/cjs/model/ModelEditorMenuBar.js +6 -5
  9. package/dist/cjs/model/ModelEditorMenuBar.js.map +1 -1
  10. package/dist/cjs/model/ModelEditorRightPanel.js +19 -17
  11. package/dist/cjs/model/ModelEditorRightPanel.js.map +1 -1
  12. package/dist/cjs/model/ModelEditorSubComponents.js +10 -9
  13. package/dist/cjs/model/ModelEditorSubComponents.js.map +1 -1
  14. package/dist/cjs/model/ModelEditorTimeline.js +6 -5
  15. package/dist/cjs/model/ModelEditorTimeline.js.map +1 -1
  16. package/dist/cjs/model/ModelEditorToolbar.js +4 -4
  17. package/dist/cjs/model/ModelEditorToolbar.js.map +1 -1
  18. package/dist/cjs/model/ModelEditorViewport.js +2 -2
  19. package/dist/cjs/model/ModelViewer.js +14 -13
  20. package/dist/cjs/model/ModelViewer.js.map +1 -1
  21. package/dist/cjs/model/NiceArmatureEditor.js +18 -18
  22. package/dist/cjs/model/NiceMorphTargetEditor.js +18 -18
  23. package/dist/cjs/model/NiceOctree.js +16 -16
  24. package/dist/cjs/model/NicePhysicsSimulation.js +24 -24
  25. package/dist/cjs/model/NiceProceduralGeometry.js +8 -8
  26. package/dist/cjs/model/NiceTerrainEditor.js +19 -19
  27. package/dist/cjs/model/NiceWeightPainter.js +14 -14
  28. package/dist/cjs/model/NiceXRPreview.js +18 -18
  29. package/dist/cjs/model/useModelEditor.js +127 -127
  30. package/dist/cjs/model/useModelViewer.js +61 -61
  31. package/dist/cjs/particle/NiceParticleEditor.js +11 -11
  32. package/dist/cjs/rendering/NiceCascadedShadows.js +12 -12
  33. package/dist/cjs/rendering/NiceRenderExport.js +5 -5
  34. package/dist/cjs/rendering/NiceSSAO.js +18 -18
  35. package/dist/cjs/rendering/NiceSSR.js +14 -14
  36. package/dist/cjs/rendering/NiceWebGPURenderer.js +21 -21
  37. package/dist/cjs/ui/dist/NiceButton-DmTHNHet.js +453 -0
  38. package/dist/cjs/ui/dist/NiceButton-DmTHNHet.js.map +1 -0
  39. package/dist/cjs/ui/dist/NiceErrorBoundary-D1hh5GGe.js +543 -0
  40. package/dist/cjs/ui/dist/NiceErrorBoundary-D1hh5GGe.js.map +1 -0
  41. package/dist/cjs/ui/dist/NiceModuleLifecyclePanel-BapdidD6.js +4772 -0
  42. package/dist/cjs/ui/dist/NiceModuleLifecyclePanel-BapdidD6.js.map +1 -0
  43. package/dist/cjs/ui/dist/NicePinCodeInput-4q8yULuo.js +11329 -0
  44. package/dist/cjs/ui/dist/NicePinCodeInput-4q8yULuo.js.map +1 -0
  45. package/dist/cjs/ui/dist/NiceSavedQueryPanel-DUw8plYP.js +5544 -0
  46. package/dist/cjs/ui/dist/NiceSavedQueryPanel-DUw8plYP.js.map +1 -0
  47. package/dist/cjs/ui/dist/NiceStockChart-Cpmv9_Cc.js +2244 -0
  48. package/dist/cjs/ui/dist/NiceStockChart-Cpmv9_Cc.js.map +1 -0
  49. package/dist/cjs/ui/dist/NiceToggle-C1UKGXmJ.js +212 -0
  50. package/dist/cjs/ui/dist/NiceToggle-C1UKGXmJ.js.map +1 -0
  51. package/dist/cjs/ui/dist/NiceWindow-D1awkyFl.js +697 -0
  52. package/dist/cjs/ui/dist/NiceWindow-D1awkyFl.js.map +1 -0
  53. package/dist/cjs/ui/dist/core-CfXsl755.js +9597 -0
  54. package/dist/cjs/ui/dist/core-CfXsl755.js.map +1 -0
  55. package/dist/cjs/ui/dist/index-CNwVELPJ.js +31214 -0
  56. package/dist/cjs/ui/dist/index-CNwVELPJ.js.map +1 -0
  57. package/dist/cjs/ui/dist/index-x8mRM4Jc.js +20 -0
  58. package/dist/cjs/ui/dist/index-x8mRM4Jc.js.map +1 -0
  59. package/dist/cjs/uv/NiceUVEditor.js +24 -24
  60. package/dist/esm/model/ModelEditorLeftPanel.js +5 -5
  61. package/dist/esm/model/ModelEditorMenuBar.js +6 -5
  62. package/dist/esm/model/ModelEditorMenuBar.js.map +1 -1
  63. package/dist/esm/model/ModelEditorRightPanel.js +19 -17
  64. package/dist/esm/model/ModelEditorRightPanel.js.map +1 -1
  65. package/dist/esm/model/ModelEditorSubComponents.js +7 -6
  66. package/dist/esm/model/ModelEditorSubComponents.js.map +1 -1
  67. package/dist/esm/model/ModelEditorTimeline.js +6 -5
  68. package/dist/esm/model/ModelEditorTimeline.js.map +1 -1
  69. package/dist/esm/model/ModelEditorToolbar.js +4 -4
  70. package/dist/esm/model/ModelEditorViewport.js +2 -2
  71. package/dist/esm/model/ModelViewer.js +6 -5
  72. package/dist/esm/model/ModelViewer.js.map +1 -1
  73. package/dist/esm/ui/dist/NiceButton-DmTHNHet.js +448 -0
  74. package/dist/esm/ui/dist/NiceButton-DmTHNHet.js.map +1 -0
  75. package/dist/esm/ui/dist/NiceErrorBoundary-D1hh5GGe.js +533 -0
  76. package/dist/esm/ui/dist/NiceErrorBoundary-D1hh5GGe.js.map +1 -0
  77. package/dist/esm/ui/dist/NiceModuleLifecyclePanel-BapdidD6.js +4731 -0
  78. package/dist/esm/ui/dist/NiceModuleLifecyclePanel-BapdidD6.js.map +1 -0
  79. package/dist/esm/ui/dist/NicePinCodeInput-4q8yULuo.js +11259 -0
  80. package/dist/esm/ui/dist/NicePinCodeInput-4q8yULuo.js.map +1 -0
  81. package/dist/esm/ui/dist/NiceSavedQueryPanel-DUw8plYP.js +5527 -0
  82. package/dist/esm/ui/dist/NiceSavedQueryPanel-DUw8plYP.js.map +1 -0
  83. package/dist/esm/ui/dist/NiceStockChart-Cpmv9_Cc.js +2222 -0
  84. package/dist/esm/ui/dist/NiceStockChart-Cpmv9_Cc.js.map +1 -0
  85. package/dist/esm/ui/dist/NiceToggle-C1UKGXmJ.js +208 -0
  86. package/dist/esm/ui/dist/NiceToggle-C1UKGXmJ.js.map +1 -0
  87. package/dist/esm/ui/dist/NiceWindow-D1awkyFl.js +686 -0
  88. package/dist/esm/ui/dist/NiceWindow-D1awkyFl.js.map +1 -0
  89. package/dist/esm/ui/dist/core-CfXsl755.js +9419 -0
  90. package/dist/esm/ui/dist/core-CfXsl755.js.map +1 -0
  91. package/dist/esm/ui/dist/index-CNwVELPJ.js +31110 -0
  92. package/dist/esm/ui/dist/index-CNwVELPJ.js.map +1 -0
  93. package/dist/esm/ui/dist/index-x8mRM4Jc.js +18 -0
  94. package/dist/esm/ui/dist/index-x8mRM4Jc.js.map +1 -0
  95. package/package.json +1 -1
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
- var Ue = require('react');
4
+ var we = require('react');
5
5
 
6
6
  const fallback = (_key, defaultValue) => defaultValue;
7
- const NiceI18nContext = Ue.createContext(fallback);
7
+ const NiceI18nContext = we.createContext(fallback);
8
8
  const NiceI18nProvider = ({ t, children }) => (jsxRuntime.jsx(NiceI18nContext.Provider, { value: t, children: children }));
9
9
  function useNiceTranslation() {
10
- const t = Ue.useContext(NiceI18nContext);
10
+ const t = we.useContext(NiceI18nContext);
11
11
  return { t };
12
12
  }
13
13
 
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var Ue = require('react');
3
+ var we = require('react');
4
4
  var DanceScoreEngine = require('./DanceScoreEngine.js');
5
5
 
6
6
  /**
@@ -113,13 +113,13 @@ class DanceBridge {
113
113
  }
114
114
  // ── React hook: useDanceBridge ──────────────────────────────────
115
115
  function useDanceBridge(config, callbacks) {
116
- const bridgeRef = Ue.useRef(null);
117
- const [state, setState] = Ue.useState('idle');
118
- const [lastScore, setLastScore] = Ue.useState(null);
119
- const [result, setResult] = Ue.useState(null);
120
- const [combo, setCombo] = Ue.useState(0);
121
- const [progress, setProgress] = Ue.useState(0);
122
- Ue.useEffect(() => {
116
+ const bridgeRef = we.useRef(null);
117
+ const [state, setState] = we.useState('idle');
118
+ const [lastScore, setLastScore] = we.useState(null);
119
+ const [result, setResult] = we.useState(null);
120
+ const [combo, setCombo] = we.useState(0);
121
+ const [progress, setProgress] = we.useState(0);
122
+ we.useEffect(() => {
123
123
  if (!config) {
124
124
  bridgeRef.current = null;
125
125
  return;
@@ -134,11 +134,11 @@ function useDanceBridge(config, callbacks) {
134
134
  return () => { bridgeRef.current = null; };
135
135
  // eslint-disable-next-line react-hooks/exhaustive-deps
136
136
  }, [config]);
137
- const start = Ue.useCallback(() => { var _a; (_a = bridgeRef.current) === null || _a === void 0 ? void 0 : _a.start(); }, []);
138
- const pause = Ue.useCallback(() => { var _a; (_a = bridgeRef.current) === null || _a === void 0 ? void 0 : _a.pause(); }, []);
139
- const resume = Ue.useCallback(() => { var _a; (_a = bridgeRef.current) === null || _a === void 0 ? void 0 : _a.resume(); }, []);
140
- const stop = Ue.useCallback(() => { var _a, _b; return (_b = (_a = bridgeRef.current) === null || _a === void 0 ? void 0 : _a.stop()) !== null && _b !== void 0 ? _b : null; }, []);
141
- const feedFrame = Ue.useCallback((frame) => {
137
+ const start = we.useCallback(() => { var _a; (_a = bridgeRef.current) === null || _a === void 0 ? void 0 : _a.start(); }, []);
138
+ const pause = we.useCallback(() => { var _a; (_a = bridgeRef.current) === null || _a === void 0 ? void 0 : _a.pause(); }, []);
139
+ const resume = we.useCallback(() => { var _a; (_a = bridgeRef.current) === null || _a === void 0 ? void 0 : _a.resume(); }, []);
140
+ const stop = we.useCallback(() => { var _a, _b; return (_b = (_a = bridgeRef.current) === null || _a === void 0 ? void 0 : _a.stop()) !== null && _b !== void 0 ? _b : null; }, []);
141
+ const feedFrame = we.useCallback((frame) => {
142
142
  var _a, _b;
143
143
  const score = (_b = (_a = bridgeRef.current) === null || _a === void 0 ? void 0 : _a.feedFrame(frame)) !== null && _b !== void 0 ? _b : null;
144
144
  if (bridgeRef.current)
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var Ue = require('react');
3
+ var we = require('react');
4
4
 
5
5
  // ── Default config ──────────────────────────────────────────────
6
6
  const DEFAULT_CONFIG = {
@@ -179,25 +179,25 @@ class DanceScoreEngine {
179
179
  }
180
180
  }
181
181
  function useDanceScore(config) {
182
- const engineRef = Ue.useRef(new DanceScoreEngine(config));
183
- const [lastScore, setLastScore] = Ue.useState(null);
184
- const [result, setResult] = Ue.useState(null);
185
- const loadReference = Ue.useCallback((seq) => {
182
+ const engineRef = we.useRef(new DanceScoreEngine(config));
183
+ const [lastScore, setLastScore] = we.useState(null);
184
+ const [result, setResult] = we.useState(null);
185
+ const loadReference = we.useCallback((seq) => {
186
186
  engineRef.current.loadReference(seq);
187
187
  setLastScore(null);
188
188
  setResult(null);
189
189
  }, []);
190
- const scoreFrame = Ue.useCallback((frame) => {
190
+ const scoreFrame = we.useCallback((frame) => {
191
191
  const score = engineRef.current.scoreFrame(frame);
192
192
  setLastScore(score);
193
193
  return score;
194
194
  }, []);
195
- const finish = Ue.useCallback(() => {
195
+ const finish = we.useCallback(() => {
196
196
  const r = engineRef.current.getResult();
197
197
  setResult(r);
198
198
  return r;
199
199
  }, []);
200
- const reset = Ue.useCallback(() => {
200
+ const reset = we.useCallback(() => {
201
201
  engineRef.current.reset();
202
202
  setLastScore(null);
203
203
  setResult(null);
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
- var Ue = require('react');
4
+ var we = require('react');
5
5
 
6
6
  // ── Standard keypoint definitions (COCO 17-keypoint model) ──────
7
7
  const COCO_KEYPOINTS = [
@@ -31,14 +31,14 @@ function createSimulatedKeypoints() {
31
31
  // ── Hook: usePoseDetection ──────────────────────────────────────
32
32
  function usePoseDetection(config = {}) {
33
33
  const { maxPersons = 1, minConfidence = 0.5, targetFps = 30, } = config;
34
- const [isDetecting, setIsDetecting] = Ue.useState(false);
35
- const latestFrameRef = Ue.useRef(null);
36
- const frameIndexRef = Ue.useRef(0);
37
- const rafRef = Ue.useRef(0);
38
- const streamRef = Ue.useRef(null);
39
- const videoRef = Ue.useRef(null);
40
- const callbackRef = Ue.useRef(null);
41
- const processFrame = Ue.useCallback(() => {
34
+ const [isDetecting, setIsDetecting] = we.useState(false);
35
+ const latestFrameRef = we.useRef(null);
36
+ const frameIndexRef = we.useRef(0);
37
+ const rafRef = we.useRef(0);
38
+ const streamRef = we.useRef(null);
39
+ const videoRef = we.useRef(null);
40
+ const callbackRef = we.useRef(null);
41
+ const processFrame = we.useCallback(() => {
42
42
  var _a;
43
43
  if (!videoRef.current || videoRef.current.readyState < 2) {
44
44
  rafRef.current = requestAnimationFrame(processFrame);
@@ -64,7 +64,7 @@ function usePoseDetection(config = {}) {
64
64
  (_a = callbackRef.current) === null || _a === void 0 ? void 0 : _a.call(callbackRef, frame);
65
65
  rafRef.current = requestAnimationFrame(processFrame);
66
66
  }, [maxPersons, minConfidence, targetFps]);
67
- const start = Ue.useCallback(async (video, onFrame) => {
67
+ const start = we.useCallback(async (video, onFrame) => {
68
68
  try {
69
69
  const stream = await navigator.mediaDevices.getUserMedia({
70
70
  video: { facingMode: 'user', width: { ideal: 640 }, height: { ideal: 480 } },
@@ -82,7 +82,7 @@ function usePoseDetection(config = {}) {
82
82
  throw new Error(`Camera access failed: ${err instanceof Error ? err.message : String(err)}`);
83
83
  }
84
84
  }, [processFrame]);
85
- const stop = Ue.useCallback(() => {
85
+ const stop = we.useCallback(() => {
86
86
  var _a;
87
87
  cancelAnimationFrame(rafRef.current);
88
88
  (_a = streamRef.current) === null || _a === void 0 ? void 0 : _a.getTracks().forEach(t => t.stop());
@@ -91,22 +91,22 @@ function usePoseDetection(config = {}) {
91
91
  videoRef.current.srcObject = null;
92
92
  setIsDetecting(false);
93
93
  }, []);
94
- Ue.useEffect(() => () => { stop(); }, [stop]);
94
+ we.useEffect(() => () => { stop(); }, [stop]);
95
95
  return { start, stop, isDetecting, getLatestFrame: () => latestFrameRef.current };
96
96
  }
97
97
  // ── Component: PoseDetector ─────────────────────────────────────
98
- const NicePoseDetector = Ue.forwardRef(function NicePoseDetector(props, ref) {
98
+ const NicePoseDetector = we.forwardRef(function NicePoseDetector(props, ref) {
99
99
  const { onFrame, onStart, onStop, onError, className, style, width = 640, height = 480, mirror = true, showSkeleton = true, showConfidence = false, ...config } = props;
100
- const videoRef = Ue.useRef(null);
101
- const canvasRef = Ue.useRef(null);
100
+ const videoRef = we.useRef(null);
101
+ const canvasRef = we.useRef(null);
102
102
  const detection = usePoseDetection(config);
103
- Ue.useImperativeHandle(ref, () => ({
103
+ we.useImperativeHandle(ref, () => ({
104
104
  start: handleStart,
105
105
  stop: handleStop,
106
106
  getLatestFrame: detection.getLatestFrame,
107
107
  get isDetecting() { return detection.isDetecting; },
108
108
  }));
109
- const drawSkeleton = Ue.useCallback((frame) => {
109
+ const drawSkeleton = we.useCallback((frame) => {
110
110
  var _a, _b, _c, _d, _e, _f;
111
111
  const ctx = (_a = canvasRef.current) === null || _a === void 0 ? void 0 : _a.getContext('2d');
112
112
  if (!ctx || !canvasRef.current)
@@ -144,11 +144,11 @@ const NicePoseDetector = Ue.forwardRef(function NicePoseDetector(props, ref) {
144
144
  }
145
145
  }
146
146
  }, [showSkeleton, showConfidence]);
147
- const handleFrame = Ue.useCallback((frame) => {
147
+ const handleFrame = we.useCallback((frame) => {
148
148
  drawSkeleton(frame);
149
149
  onFrame === null || onFrame === void 0 ? void 0 : onFrame(frame);
150
150
  }, [drawSkeleton, onFrame]);
151
- const handleStart = Ue.useCallback(async () => {
151
+ const handleStart = we.useCallback(async () => {
152
152
  try {
153
153
  if (videoRef.current) {
154
154
  await detection.start(videoRef.current, handleFrame);
@@ -159,7 +159,7 @@ const NicePoseDetector = Ue.forwardRef(function NicePoseDetector(props, ref) {
159
159
  onError === null || onError === void 0 ? void 0 : onError(err instanceof Error ? err : new Error(String(err)));
160
160
  }
161
161
  }, [detection, handleFrame, onStart, onError]);
162
- const handleStop = Ue.useCallback(() => {
162
+ const handleStop = we.useCallback(() => {
163
163
  detection.stop();
164
164
  onStop === null || onStop === void 0 ? void 0 : onStop();
165
165
  }, [detection, onStop]);
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
- var Ue = require('react');
4
+ var we = require('react');
5
5
  var materialEditorTypes = require('./materialEditorTypes.js');
6
6
  var materialNodeDefinitions = require('./materialNodeDefinitions.js');
7
7
  var materialEditorUtils = require('./materialEditorUtils.js');
@@ -338,9 +338,9 @@ function materialEditorReducer(state, action) {
338
338
  Hook: useMaterialEditor
339
339
  ═══════════════════════════════════════════════════════════════════════════ */
340
340
  function useMaterialEditor(initialGraph) {
341
- const [state, dispatch] = Ue.useReducer(materialEditorReducer, initialGraph, createInitialState);
341
+ const [state, dispatch] = we.useReducer(materialEditorReducer, initialGraph, createInitialState);
342
342
  // Auto-compile when graph changes
343
- Ue.useEffect(() => {
343
+ we.useEffect(() => {
344
344
  if (state.autoCompile && !state.compiling) {
345
345
  const timeout = setTimeout(() => {
346
346
  dispatch({ type: 'COMPILE' });
@@ -356,7 +356,7 @@ function NodePalette({ searchQuery, expandedCategories, onSearch, onToggleCatego
356
356
  const filteredNodes = searchQuery
357
357
  ? materialNodeDefinitions.searchNodes(searchQuery)
358
358
  : materialNodeDefinitions.MATERIAL_NODE_DEFINITIONS;
359
- const categories = Ue.useMemo(() => {
359
+ const categories = we.useMemo(() => {
360
360
  const cats = new Map();
361
361
  for (const node of filteredNodes) {
362
362
  if (!cats.has(node.category)) {
@@ -369,9 +369,9 @@ function NodePalette({ searchQuery, expandedCategories, onSearch, onToggleCatego
369
369
  return (jsxRuntime.jsxs("div", { className: MaterialEditor_module.palette, children: [jsxRuntime.jsx("div", { className: MaterialEditor_module.paletteSearch, children: jsxRuntime.jsx("input", { type: "text", placeholder: "Search nodes...", value: searchQuery, onChange: e => onSearch(e.target.value), className: MaterialEditor_module.searchInput }) }), jsxRuntime.jsx("div", { className: MaterialEditor_module.paletteCategories, children: Array.from(categories.entries()).map(([category, nodes]) => (jsxRuntime.jsxs("div", { className: MaterialEditor_module.paletteCategory, children: [jsxRuntime.jsxs("button", { className: MaterialEditor_module.categoryHeader, onClick: () => onToggleCategory(category), style: { borderLeftColor: materialEditorTypes.NODE_CATEGORY_COLORS[category] }, children: [jsxRuntime.jsx("span", { className: MaterialEditor_module.categoryIcon, children: expandedCategories.includes(category) ? '▼' : '►' }), jsxRuntime.jsx("span", { children: materialEditorTypes.NODE_CATEGORY_NAMES[category] }), jsxRuntime.jsx("span", { className: MaterialEditor_module.categoryCount, children: nodes.length })] }), expandedCategories.includes(category) && (jsxRuntime.jsx("div", { className: MaterialEditor_module.categoryNodes, children: nodes.map(nodeDef => (jsxRuntime.jsxs("div", { className: MaterialEditor_module.paletteNode, draggable: true, onDragStart: e => onDragStart(nodeDef.type, e), onDoubleClick: () => onAddNode(nodeDef.type), title: nodeDef.description, children: [jsxRuntime.jsx("span", { className: MaterialEditor_module.nodeColor, style: { backgroundColor: nodeDef.color || materialEditorTypes.NODE_CATEGORY_COLORS[nodeDef.category] } }), jsxRuntime.jsx("span", { className: MaterialEditor_module.nodeName, children: nodeDef.name })] }, nodeDef.type))) }))] }, category))) })] }));
370
370
  }
371
371
  function GraphNode({ node, definition, selected, viewTransform, connections, onSelect, onMove, onStartConnection, }) {
372
- const nodeRef = Ue.useRef(null);
373
- const [isDragging, setIsDragging] = Ue.useState(false);
374
- const dragStart = Ue.useRef(null);
372
+ const nodeRef = we.useRef(null);
373
+ const [isDragging, setIsDragging] = we.useState(false);
374
+ const dragStart = we.useRef(null);
375
375
  const handleMouseDown = (e) => {
376
376
  if (e.button !== 0)
377
377
  return;
@@ -384,7 +384,7 @@ function GraphNode({ node, definition, selected, viewTransform, connections, onS
384
384
  dragStart.current = { x: e.clientX, y: e.clientY };
385
385
  }
386
386
  };
387
- Ue.useEffect(() => {
387
+ we.useEffect(() => {
388
388
  if (!isDragging)
389
389
  return;
390
390
  const handleMouseMove = (e) => {
@@ -441,10 +441,10 @@ function Toolbar({ canUndo, canRedo, canPaste, hasSelection, autoCompile, compil
441
441
  return (jsxRuntime.jsxs("div", { className: MaterialEditor_module.toolbar, children: [jsxRuntime.jsxs("div", { className: MaterialEditor_module.toolbarGroup, children: [jsxRuntime.jsx("button", { onClick: onNew, title: "New Material (Ctrl+N)", children: "\uD83D\uDCC4" }), jsxRuntime.jsx("button", { onClick: onImport, title: "Import (Ctrl+O)", children: "\uD83D\uDCC2" }), jsxRuntime.jsx("button", { onClick: onExport, title: "Export (Ctrl+S)", children: "\uD83D\uDCBE" })] }), jsxRuntime.jsx("div", { className: MaterialEditor_module.toolbarSeparator }), jsxRuntime.jsxs("div", { className: MaterialEditor_module.toolbarGroup, children: [jsxRuntime.jsx("button", { onClick: onUndo, disabled: !canUndo, title: "Undo (Ctrl+Z)", children: "\u21A9\uFE0F" }), jsxRuntime.jsx("button", { onClick: onRedo, disabled: !canRedo, title: "Redo (Ctrl+Y)", children: "\u21AA\uFE0F" })] }), jsxRuntime.jsx("div", { className: MaterialEditor_module.toolbarSeparator }), jsxRuntime.jsxs("div", { className: MaterialEditor_module.toolbarGroup, children: [jsxRuntime.jsx("button", { onClick: onCut, disabled: !hasSelection, title: "Cut (Ctrl+X)", children: "\u2702\uFE0F" }), jsxRuntime.jsx("button", { onClick: onCopy, disabled: !hasSelection, title: "Copy (Ctrl+C)", children: "\uD83D\uDCCB" }), jsxRuntime.jsx("button", { onClick: onPaste, disabled: !canPaste, title: "Paste (Ctrl+V)", children: "\uD83D\uDCE5" }), jsxRuntime.jsx("button", { onClick: onDuplicate, disabled: !hasSelection, title: "Duplicate (Ctrl+D)", children: "\uD83D\uDD04" }), jsxRuntime.jsx("button", { onClick: onDelete, disabled: !hasSelection, title: "Delete (Del)", children: "\uD83D\uDDD1\uFE0F" })] }), jsxRuntime.jsx("div", { className: MaterialEditor_module.toolbarSeparator }), jsxRuntime.jsxs("div", { className: MaterialEditor_module.toolbarGroup, children: [jsxRuntime.jsx("button", { onClick: onSelectAll, title: "Select All (Ctrl+A)", children: "\u2B1C" }), jsxRuntime.jsx("button", { onClick: onZoomToFit, title: "Zoom to Fit (F)", children: "\uD83D\uDD0D" }), jsxRuntime.jsx("button", { onClick: onToggleGrid, className: showGrid ? MaterialEditor_module.active : '', title: "Toggle Grid (G)", children: "#" }), jsxRuntime.jsx("button", { onClick: onToggleSnap, className: snapToGrid ? MaterialEditor_module.active : '', title: "Toggle Snap (S)", children: "\uD83E\uDDF2" })] }), jsxRuntime.jsx("div", { className: MaterialEditor_module.toolbarSeparator }), jsxRuntime.jsxs("div", { className: MaterialEditor_module.toolbarGroup, children: [jsxRuntime.jsx("button", { onClick: onToggleAutoCompile, className: autoCompile ? MaterialEditor_module.active : '', title: "Auto Compile", children: "\u26A1" }), jsxRuntime.jsx("button", { onClick: onCompile, disabled: compiling, title: "Compile (F5)", children: compiling ? '⏳' : '▶️' })] })] }));
442
442
  }
443
443
  function PreviewPanel({ shader, mode, compiling, onModeChange }) {
444
- const canvasRef = Ue.useRef(null);
444
+ const canvasRef = we.useRef(null);
445
445
  const previewModes = ['sphere', 'cube', 'plane', 'cylinder', 'torus'];
446
446
  // Simple preview rendering (in real implementation would use Three.js)
447
- Ue.useEffect(() => {
447
+ we.useEffect(() => {
448
448
  const canvas = canvasRef.current;
449
449
  if (!canvas)
450
450
  return;
@@ -475,25 +475,25 @@ function PreviewPanel({ shader, mode, compiling, onModeChange }) {
475
475
  ═══════════════════════════════════════════════════════════════════════════ */
476
476
  function NiceMaterialEditor({ graph: initialGraph, onGraphChange, onCompile, customNodes, textures, width = '100%', height = '600px', readOnly = false, showToolbar = true, showPalette = true, showProperties = true, showPreview = true, previewMode: initialPreviewMode = 'sphere', theme = 'dark', className, }) {
477
477
  const { state, dispatch } = useMaterialEditor(initialGraph);
478
- const canvasRef = Ue.useRef(null);
479
- const [pendingConnection, setPendingConnection] = Ue.useState(null);
478
+ const canvasRef = we.useRef(null);
479
+ const [pendingConnection, setPendingConnection] = we.useState(null);
480
480
  // Merge custom node definitions
481
- const definitions = Ue.useMemo(() => {
481
+ const definitions = we.useMemo(() => {
482
482
  const map = new Map(materialNodeDefinitions.MATERIAL_NODE_MAP);
483
483
  customNodes === null || customNodes === void 0 ? void 0 : customNodes.forEach(def => map.set(def.type, def));
484
484
  return map;
485
485
  }, [customNodes]);
486
486
  // Notify parent of changes
487
- Ue.useEffect(() => {
487
+ we.useEffect(() => {
488
488
  onGraphChange === null || onGraphChange === void 0 ? void 0 : onGraphChange(state.graph);
489
489
  }, [state.graph, onGraphChange]);
490
- Ue.useEffect(() => {
490
+ we.useEffect(() => {
491
491
  if (state.compiledShader) {
492
492
  onCompile === null || onCompile === void 0 ? void 0 : onCompile(state.compiledShader);
493
493
  }
494
494
  }, [state.compiledShader, onCompile]);
495
495
  // Keyboard shortcuts
496
- Ue.useEffect(() => {
496
+ we.useEffect(() => {
497
497
  const handleKeyDown = (e) => {
498
498
  if (readOnly)
499
499
  return;
@@ -553,7 +553,7 @@ function NiceMaterialEditor({ graph: initialGraph, onGraphChange, onCompile, cus
553
553
  return () => window.removeEventListener('keydown', handleKeyDown);
554
554
  }, [readOnly, state.selectedNodes, dispatch]);
555
555
  // Handle wheel zoom
556
- const handleWheel = Ue.useCallback((e) => {
556
+ const handleWheel = we.useCallback((e) => {
557
557
  var _a;
558
558
  e.preventDefault();
559
559
  const delta = e.deltaY > 0 ? 0.9 : 1.1;
@@ -571,8 +571,8 @@ function NiceMaterialEditor({ graph: initialGraph, onGraphChange, onCompile, cus
571
571
  });
572
572
  }, [state.viewTransform, dispatch]);
573
573
  // Handle canvas pan
574
- const [isPanning, setIsPanning] = Ue.useState(false);
575
- const panStart = Ue.useRef(null);
574
+ const [isPanning, setIsPanning] = we.useState(false);
575
+ const panStart = we.useRef(null);
576
576
  const handleCanvasMouseDown = (e) => {
577
577
  if (e.button === 1 || (e.button === 0 && e.altKey)) {
578
578
  setIsPanning(true);
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
- var Ue = require('react');
4
+ var we = require('react');
5
5
  var ModelEditor_module = require('./ModelEditor.module.css.js');
6
- var index = require('../ui/dist/index.js');
6
+ var NiceButtonDmTHNHet = require('../ui/dist/NiceButton-DmTHNHet.js');
7
7
 
8
- const ModelEditorLeftPanel = Ue.memo(({ api }) => {
8
+ const ModelEditorLeftPanel = we.memo(({ api }) => {
9
9
  const { sceneTree, selectedId, outlinerSearch, setOutlinerSearch, selectObject, rebuildTree, toggleNodeExpanded, toggleNodeVisibility, } = api;
10
10
  const renderTreeNode = (node, depth) => {
11
11
  // Outliner search filter
@@ -24,7 +24,7 @@ const ModelEditorLeftPanel = Ue.memo(({ api }) => {
24
24
  node.type === "light" ? "💡" :
25
25
  node.type === "camera" ? "📷" :
26
26
  node.type === "helper" ? "◇" : "📁";
27
- return (jsxRuntime.jsxs(Ue.Fragment, { children: [jsxRuntime.jsxs("div", { className: `${ModelEditor_module.treeItem} ${selectedId === node.id ? ModelEditor_module.treeItemActive : ""}`, style: { paddingLeft: depth * 16 + 4 }, onClick: () => selectObject(node), children: [hasChildren ? (jsxRuntime.jsx("span", { className: ModelEditor_module.treeToggle, onClick: (e) => {
27
+ return (jsxRuntime.jsxs(we.Fragment, { children: [jsxRuntime.jsxs("div", { className: `${ModelEditor_module.treeItem} ${selectedId === node.id ? ModelEditor_module.treeItemActive : ""}`, style: { paddingLeft: depth * 16 + 4 }, onClick: () => selectObject(node), children: [hasChildren ? (jsxRuntime.jsx("span", { className: ModelEditor_module.treeToggle, onClick: (e) => {
28
28
  e.stopPropagation();
29
29
  toggleNodeExpanded(node);
30
30
  }, children: node.expanded ? "▼" : "▶" })) : (jsxRuntime.jsx("span", { className: ModelEditor_module.treeToggle })), jsxRuntime.jsx("span", { className: ModelEditor_module.treeIcon, children: icon }), jsxRuntime.jsx("span", { style: { flex: 1, overflow: "hidden", textOverflow: "ellipsis" }, children: node.name }), jsxRuntime.jsx("span", { className: ModelEditor_module.treeVisibility, onClick: (e) => {
@@ -33,7 +33,7 @@ const ModelEditorLeftPanel = Ue.memo(({ api }) => {
33
33
  }, children: node.visible ? "👁" : "◌" })] }), node.expanded &&
34
34
  node.children.map((c) => renderTreeNode(c, depth + 1))] }, node.id));
35
35
  };
36
- return (jsxRuntime.jsx("div", { className: ModelEditor_module.leftPanel, children: jsxRuntime.jsxs("div", { className: ModelEditor_module.panelSection, children: [jsxRuntime.jsxs("div", { className: ModelEditor_module.panelTitle, children: ["\uD83D\uDCCB Outliner", jsxRuntime.jsx(index.NiceButton, { variant: "ghost", size: "sm", onClick: rebuildTree, title: "Refresh", "aria-label": "Refresh outliner", children: "\u27F3" })] }), jsxRuntime.jsx("div", { className: ModelEditor_module.outlinerSearch, children: jsxRuntime.jsx(index.NiceTextInput, { className: ModelEditor_module.propInput, placeholder: "\uD83D\uDD0D Filter...", value: outlinerSearch, onChange: (val) => setOutlinerSearch(val), style: { width: "100%", marginBottom: 4 } }) }), jsxRuntime.jsxs("div", { className: ModelEditor_module.panelContent, style: { overflowY: "auto", flex: 1 }, children: [sceneTree.length === 0 && (jsxRuntime.jsx("div", { style: { color: "#666", fontSize: 10, padding: "8px 0" }, children: "Drop a 3D file to begin" })), sceneTree.map((n) => renderTreeNode(n, 0))] })] }) }));
36
+ return (jsxRuntime.jsx("div", { className: ModelEditor_module.leftPanel, children: jsxRuntime.jsxs("div", { className: ModelEditor_module.panelSection, children: [jsxRuntime.jsxs("div", { className: ModelEditor_module.panelTitle, children: ["\uD83D\uDCCB Outliner", jsxRuntime.jsx(NiceButtonDmTHNHet.c, { variant: "ghost", size: "sm", onClick: rebuildTree, title: "Refresh", "aria-label": "Refresh outliner", children: "\u27F3" })] }), jsxRuntime.jsx("div", { className: ModelEditor_module.outlinerSearch, children: jsxRuntime.jsx(NiceButtonDmTHNHet.b, { className: ModelEditor_module.propInput, placeholder: "\uD83D\uDD0D Filter...", value: outlinerSearch, onChange: (val) => setOutlinerSearch(val), style: { width: "100%", marginBottom: 4 } }) }), jsxRuntime.jsxs("div", { className: ModelEditor_module.panelContent, style: { overflowY: "auto", flex: 1 }, children: [sceneTree.length === 0 && (jsxRuntime.jsx("div", { style: { color: "#666", fontSize: 10, padding: "8px 0" }, children: "Drop a 3D file to begin" })), sceneTree.map((n) => renderTreeNode(n, 0))] })] }) }));
37
37
  });
38
38
  ModelEditorLeftPanel.displayName = "ModelEditorLeftPanel";
39
39
 
@@ -1 +1 @@
1
- {"version":3,"file":"ModelEditorLeftPanel.js","sources":["../../../src/model/ModelEditorLeftPanel.tsx"],"sourcesContent":[null],"names":["React","_jsxs","styles","_jsx","NiceButton","NiceTextInput"],"mappings":"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"}
1
+ {"version":3,"file":"ModelEditorLeftPanel.js","sources":["../../../src/model/ModelEditorLeftPanel.tsx"],"sourcesContent":[null],"names":["React","_jsxs","styles","_jsx","NiceButton","NiceTextInput"],"mappings":";;;;;;;AAaA,MAAM,oBAAoB,GAAoBA,EAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,KAAI;AACnE,IAAA,MAAM,EACJ,SAAS,EACT,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,oBAAoB,GACrB,GAAG,GAAG;AAEP,IAAA,MAAM,cAAc,GAAG,CAAC,IAAe,EAAE,KAAa,KAAqB;;QAEzE,IAAI,cAAc,EAAE;AAClB,YAAA,MAAM,CAAC,GAAG,cAAc,CAAC,WAAW,EAAE;AACtC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAY,EAAA;gBAC5D,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;AAChE,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU;AAAE,gBAAA,OAAO,IAAI;QACxC;QAEA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;AAC5C,QAAA,MAAM,IAAI,GACR,IAAI,CAAC,IAAI,KAAK,MAAM,GAAK,GAAG;YAC5B,IAAI,CAAC,IAAI,KAAK,MAAM,GAAK,IAAI;gBAC7B,IAAI,CAAC,IAAI,KAAK,OAAO,GAAI,IAAI;oBAC7B,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,IAAI;AAC7B,wBAAA,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,GAAG,GAAG,IAAI;AAErC,QAAA,QACEC,eAAA,CAACD,EAAK,CAAC,QAAQ,EAAA,EAAA,QAAA,EAAA,CACbC,eAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,CAAA,EAAGC,kBAAM,CAAC,QAAQ,IAAI,UAAU,KAAK,IAAI,CAAC,EAAE,GAAGA,kBAAM,CAAC,cAAc,GAAG,EAAE,CAAA,CAAE,EACtF,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,GAAG,EAAE,GAAG,CAAC,EAAE,EACtC,OAAO,EAAE,MAAM,YAAY,CAAC,IAAI,CAAC,EAAA,QAAA,EAAA,CAEhC,WAAW,IACVC,cAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAED,kBAAM,CAAC,UAAU,EAC5B,OAAO,EAAE,CAAC,CAAC,KAAI;gCACb,CAAC,CAAC,eAAe,EAAE;gCACnB,kBAAkB,CAAC,IAAI,CAAC;AAC1B,4BAAA,CAAC,EAAA,QAAA,EAEA,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,GAAG,EAAA,CACrB,KAEPC,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAED,kBAAM,CAAC,UAAU,EAAA,CAAI,CACvC,EACDC,yBAAM,SAAS,EAAED,kBAAM,CAAC,QAAQ,EAAA,QAAA,EAAG,IAAI,EAAA,CAAQ,EAC/CC,cAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,EAAA,QAAA,EACnE,IAAI,CAAC,IAAI,EAAA,CACL,EACPA,cAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAED,kBAAM,CAAC,cAAc,EAChC,OAAO,EAAE,CAAC,CAAC,KAAI;gCACb,CAAC,CAAC,eAAe,EAAE;gCACnB,oBAAoB,CAAC,IAAI,CAAC;AAC5B,4BAAA,CAAC,YAEA,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,GAAG,EAAA,CACrB,IACH,EACL,IAAI,CAAC,QAAQ;oBACZ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA,EAAA,EAlCrC,IAAI,CAAC,EAAE,CAmCX;AAErB,IAAA,CAAC;AAED,IAAA,QACEC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAED,kBAAM,CAAC,SAAS,EAAA,QAAA,EAC9BD,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEC,kBAAM,CAAC,YAAY,EAAA,QAAA,EAAA,CACjCD,yBAAK,SAAS,EAAEC,kBAAM,CAAC,UAAU,EAAA,QAAA,EAAA,CAAA,uBAAA,EAE/BC,cAAA,CAACC,oBAAU,EAAA,EAAC,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAC,SAAS,EAAA,YAAA,EAAY,kBAAkB,EAAA,QAAA,EAAA,QAAA,EAAA,CAAe,CAAA,EAAA,CACpH,EAEND,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAED,kBAAM,CAAC,cAAc,YACnCC,cAAA,CAACE,oBAAa,EAAA,EACZ,SAAS,EAAEH,kBAAM,CAAC,SAAS,EAC3B,WAAW,EAAC,wBAAc,EAC1B,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,CAAC,GAAG,KAAK,iBAAiB,CAAC,GAAG,CAAC,EACzC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,GACzC,EAAA,CACE,EACND,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEC,kBAAM,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAA,QAAA,EAAA,CACvE,SAAS,CAAC,MAAM,KAAK,CAAC,KACrBC,cAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAA,QAAA,EAAA,yBAAA,EAAA,CAEvD,CACP,EACA,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IACvC,CAAA,EAAA,CACF,EAAA,CACF;AAEV,CAAC;AAED,oBAAoB,CAAC,WAAW,GAAG,sBAAsB;;;;"}
@@ -1,17 +1,18 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
- var Ue = require('react');
4
+ var we = require('react');
5
5
  var ModelEditor_module = require('./ModelEditor.module.css.js');
6
- var index = require('../ui/dist/index.js');
6
+ var NiceButtonDmTHNHet = require('../ui/dist/NiceButton-DmTHNHet.js');
7
+ var NiceToggleC1UKGXmJ = require('../ui/dist/NiceToggle-C1UKGXmJ.js');
7
8
 
8
- const ModelEditorMenuBar = Ue.memo(({ api, hasOnSaveToLibrary }) => {
9
+ const ModelEditorMenuBar = we.memo(({ api, hasOnSaveToLibrary }) => {
9
10
  const { editorMode, setEditorMode, fileInputRef, mergeInputRef, addMenuOpen, setAddMenuOpen, addPrimitive, addSceneLight, addCameraObject, addEmpty, selectedNode, duplicateSelected, deleteSelected, exportGLTF, exportOBJ, exportSTL, exportPLY, exportUSDZ, saveToLibrary, clearScene, showGrid, setShowGrid, showAxes, setShowAxes, wireframe, setWireframe, showSkeleton, setShowSkeleton, showLightHelpers, setShowLightHelpers, bgColor, setBgColor, } = api;
10
- return (jsxRuntime.jsxs("div", { className: ModelEditor_module.menuBar, children: [jsxRuntime.jsx(index.NiceSelect, { className: ModelEditor_module.modeSelect, value: editorMode, onChange: (val) => setEditorMode(val), options: [
11
+ return (jsxRuntime.jsxs("div", { className: ModelEditor_module.menuBar, children: [jsxRuntime.jsx(NiceButtonDmTHNHet.a, { className: ModelEditor_module.modeSelect, value: editorMode, onChange: (val) => setEditorMode(val), options: [
11
12
  { value: "object", label: "Object Mode" },
12
13
  { value: "edit", label: "Edit Mode" },
13
14
  { value: "pose", label: "Pose Mode" },
14
- ] }), jsxRuntime.jsx("div", { className: ModelEditor_module.menuSep }), jsxRuntime.jsx(index.NiceButton, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: "\uD83D\uDCC2 Open" }), jsxRuntime.jsx(index.NiceButton, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => { var _a; return (_a = mergeInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, title: "Merge animations from FBX/GLTF onto current model", children: "\u2795 Merge Anim" }), jsxRuntime.jsx("div", { className: ModelEditor_module.menuSep }), jsxRuntime.jsxs("div", { className: ModelEditor_module.menuDropdownWrap, children: [jsxRuntime.jsx(index.NiceButton, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => setAddMenuOpen(addMenuOpen ? null : "mesh"), children: "\uFF0B Add \u25BE" }), addMenuOpen && (jsxRuntime.jsxs("div", { className: ModelEditor_module.dropdownMenu, children: [jsxRuntime.jsx("div", { className: ModelEditor_module.dropdownTitle, children: "Mesh" }), ["cube", "sphere", "cylinder", "cone", "torus", "plane", "circle", "ring", "dodecahedron", "icosahedron", "octahedron", "tetrahedron", "torusKnot"].map((t) => (jsxRuntime.jsx("div", { className: ModelEditor_module.dropdownItem, onClick: () => addPrimitive(t), children: t.charAt(0).toUpperCase() + t.slice(1) }, t))), jsxRuntime.jsx("div", { className: ModelEditor_module.dropdownSep }), jsxRuntime.jsx("div", { className: ModelEditor_module.dropdownTitle, children: "Light" }), ["point", "spot", "directional", "hemisphere"].map((t) => (jsxRuntime.jsxs("div", { className: ModelEditor_module.dropdownItem, onClick: () => addSceneLight(t), children: ["\uD83D\uDCA1 ", t.charAt(0).toUpperCase() + t.slice(1)] }, t))), jsxRuntime.jsx("div", { className: ModelEditor_module.dropdownSep }), jsxRuntime.jsx("div", { className: ModelEditor_module.dropdownTitle, children: "Other" }), jsxRuntime.jsx("div", { className: ModelEditor_module.dropdownItem, onClick: addCameraObject, children: "\uD83D\uDCF7 Camera" }), jsxRuntime.jsx("div", { className: ModelEditor_module.dropdownItem, onClick: () => addEmpty("arrows"), children: "\u22B9 Empty (Arrows)" })] }))] }), jsxRuntime.jsx(index.NiceButton, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: duplicateSelected, disabled: !selectedNode, title: "Duplicate selected (Shift+D)", children: "\uD83D\uDCCB Duplicate" }), jsxRuntime.jsx(index.NiceButton, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: deleteSelected, disabled: !selectedNode, title: "Delete selected (Delete)", children: "\u2715 Delete" }), jsxRuntime.jsx("div", { className: ModelEditor_module.menuSep }), jsxRuntime.jsx(index.NiceButton, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => exportGLTF(true), children: "\uD83D\uDCBE Export GLB" }), jsxRuntime.jsx(index.NiceButton, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => exportGLTF(false), children: "\uD83D\uDCC4 Export GLTF" }), jsxRuntime.jsx(index.NiceButton, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: exportOBJ, children: "\uD83D\uDCC4 Export OBJ" }), jsxRuntime.jsx(index.NiceButton, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => exportSTL(true), children: "\uD83D\uDCC4 Export STL" }), jsxRuntime.jsx(index.NiceButton, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => exportPLY(true), children: "\uD83D\uDCC4 Export PLY" }), jsxRuntime.jsx(index.NiceButton, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: exportUSDZ, children: "\uD83D\uDCC4 Export USDZ" }), hasOnSaveToLibrary && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: ModelEditor_module.menuSep }), jsxRuntime.jsx(index.NiceButton, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: saveToLibrary, children: "\uD83D\uDCE6 Save to Library" })] })), jsxRuntime.jsx("div", { className: ModelEditor_module.menuSep }), jsxRuntime.jsx(index.NiceButton, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: clearScene, children: "\uD83D\uDDD1 Clear" }), jsxRuntime.jsx("div", { className: ModelEditor_module.menuSep }), jsxRuntime.jsx(index.NiceCheckbox, { checked: showGrid, onChange: () => setShowGrid((v) => !v), label: "Grid" }), jsxRuntime.jsx(index.NiceCheckbox, { checked: showAxes, onChange: () => setShowAxes((v) => !v), label: "Axes" }), jsxRuntime.jsx(index.NiceCheckbox, { checked: wireframe, onChange: () => setWireframe((v) => !v), label: "Wire" }), jsxRuntime.jsx(index.NiceCheckbox, { checked: showSkeleton, onChange: () => setShowSkeleton((v) => !v), label: "Skel" }), jsxRuntime.jsx(index.NiceCheckbox, { checked: showLightHelpers, onChange: () => setShowLightHelpers((v) => !v), label: "Helpers" }), jsxRuntime.jsxs("div", { className: ModelEditor_module.menuRight, children: [jsxRuntime.jsx("label", { className: ModelEditor_module.menuLabel, children: "BG" }), jsxRuntime.jsx(index.NiceColorPicker, { value: bgColor, onChange: (c) => setBgColor(c) })] })] }));
15
+ ] }), jsxRuntime.jsx("div", { className: ModelEditor_module.menuSep }), jsxRuntime.jsx(NiceButtonDmTHNHet.c, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: "\uD83D\uDCC2 Open" }), jsxRuntime.jsx(NiceButtonDmTHNHet.c, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => { var _a; return (_a = mergeInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, title: "Merge animations from FBX/GLTF onto current model", children: "\u2795 Merge Anim" }), jsxRuntime.jsx("div", { className: ModelEditor_module.menuSep }), jsxRuntime.jsxs("div", { className: ModelEditor_module.menuDropdownWrap, children: [jsxRuntime.jsx(NiceButtonDmTHNHet.c, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => setAddMenuOpen(addMenuOpen ? null : "mesh"), children: "\uFF0B Add \u25BE" }), addMenuOpen && (jsxRuntime.jsxs("div", { className: ModelEditor_module.dropdownMenu, children: [jsxRuntime.jsx("div", { className: ModelEditor_module.dropdownTitle, children: "Mesh" }), ["cube", "sphere", "cylinder", "cone", "torus", "plane", "circle", "ring", "dodecahedron", "icosahedron", "octahedron", "tetrahedron", "torusKnot"].map((t) => (jsxRuntime.jsx("div", { className: ModelEditor_module.dropdownItem, onClick: () => addPrimitive(t), children: t.charAt(0).toUpperCase() + t.slice(1) }, t))), jsxRuntime.jsx("div", { className: ModelEditor_module.dropdownSep }), jsxRuntime.jsx("div", { className: ModelEditor_module.dropdownTitle, children: "Light" }), ["point", "spot", "directional", "hemisphere"].map((t) => (jsxRuntime.jsxs("div", { className: ModelEditor_module.dropdownItem, onClick: () => addSceneLight(t), children: ["\uD83D\uDCA1 ", t.charAt(0).toUpperCase() + t.slice(1)] }, t))), jsxRuntime.jsx("div", { className: ModelEditor_module.dropdownSep }), jsxRuntime.jsx("div", { className: ModelEditor_module.dropdownTitle, children: "Other" }), jsxRuntime.jsx("div", { className: ModelEditor_module.dropdownItem, onClick: addCameraObject, children: "\uD83D\uDCF7 Camera" }), jsxRuntime.jsx("div", { className: ModelEditor_module.dropdownItem, onClick: () => addEmpty("arrows"), children: "\u22B9 Empty (Arrows)" })] }))] }), jsxRuntime.jsx(NiceButtonDmTHNHet.c, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: duplicateSelected, disabled: !selectedNode, title: "Duplicate selected (Shift+D)", children: "\uD83D\uDCCB Duplicate" }), jsxRuntime.jsx(NiceButtonDmTHNHet.c, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: deleteSelected, disabled: !selectedNode, title: "Delete selected (Delete)", children: "\u2715 Delete" }), jsxRuntime.jsx("div", { className: ModelEditor_module.menuSep }), jsxRuntime.jsx(NiceButtonDmTHNHet.c, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => exportGLTF(true), children: "\uD83D\uDCBE Export GLB" }), jsxRuntime.jsx(NiceButtonDmTHNHet.c, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => exportGLTF(false), children: "\uD83D\uDCC4 Export GLTF" }), jsxRuntime.jsx(NiceButtonDmTHNHet.c, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: exportOBJ, children: "\uD83D\uDCC4 Export OBJ" }), jsxRuntime.jsx(NiceButtonDmTHNHet.c, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => exportSTL(true), children: "\uD83D\uDCC4 Export STL" }), jsxRuntime.jsx(NiceButtonDmTHNHet.c, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: () => exportPLY(true), children: "\uD83D\uDCC4 Export PLY" }), jsxRuntime.jsx(NiceButtonDmTHNHet.c, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: exportUSDZ, children: "\uD83D\uDCC4 Export USDZ" }), hasOnSaveToLibrary && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: ModelEditor_module.menuSep }), jsxRuntime.jsx(NiceButtonDmTHNHet.c, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: saveToLibrary, children: "\uD83D\uDCE6 Save to Library" })] })), jsxRuntime.jsx("div", { className: ModelEditor_module.menuSep }), jsxRuntime.jsx(NiceButtonDmTHNHet.c, { className: ModelEditor_module.menuBtn, variant: "ghost", size: "sm", onClick: clearScene, children: "\uD83D\uDDD1 Clear" }), jsxRuntime.jsx("div", { className: ModelEditor_module.menuSep }), jsxRuntime.jsx(NiceToggleC1UKGXmJ.N, { checked: showGrid, onChange: () => setShowGrid((v) => !v), label: "Grid" }), jsxRuntime.jsx(NiceToggleC1UKGXmJ.N, { checked: showAxes, onChange: () => setShowAxes((v) => !v), label: "Axes" }), jsxRuntime.jsx(NiceToggleC1UKGXmJ.N, { checked: wireframe, onChange: () => setWireframe((v) => !v), label: "Wire" }), jsxRuntime.jsx(NiceToggleC1UKGXmJ.N, { checked: showSkeleton, onChange: () => setShowSkeleton((v) => !v), label: "Skel" }), jsxRuntime.jsx(NiceToggleC1UKGXmJ.N, { checked: showLightHelpers, onChange: () => setShowLightHelpers((v) => !v), label: "Helpers" }), jsxRuntime.jsxs("div", { className: ModelEditor_module.menuRight, children: [jsxRuntime.jsx("label", { className: ModelEditor_module.menuLabel, children: "BG" }), jsxRuntime.jsx(NiceButtonDmTHNHet.N, { value: bgColor, onChange: (c) => setBgColor(c) })] })] }));
15
16
  });
16
17
  ModelEditorMenuBar.displayName = "ModelEditorMenuBar";
17
18
 
@@ -1 +1 @@
1
- {"version":3,"file":"ModelEditorMenuBar.js","sources":["../../../src/model/ModelEditorMenuBar.tsx"],"sourcesContent":[null],"names":["React","_jsxs","styles","_jsx","NiceSelect","NiceButton","_Fragment","NiceCheckbox","NiceColorPicker"],"mappings":";;;;;;;AAcA,MAAM,kBAAkB,GAAoBA,EAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAI;AACrF,IAAA,MAAM,EACJ,UAAU,EAAE,aAAa,EACzB,YAAY,EAAE,aAAa,EAC3B,WAAW,EAAE,cAAc,EAC3B,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,QAAQ,EACtD,YAAY,EACZ,iBAAiB,EAAE,cAAc,EACjC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EACvD,aAAa,EAAE,UAAU,EACzB,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,WAAW,EACrB,SAAS,EAAE,YAAY,EACvB,YAAY,EAAE,eAAe,EAC7B,gBAAgB,EAAE,mBAAmB,EACrC,OAAO,EAAE,UAAU,GACpB,GAAG,GAAG;AAEP,IAAA,QACEC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEC,kBAAM,CAAC,OAAO,EAAA,QAAA,EAAA,CAE5BC,cAAA,CAACC,gBAAU,EAAA,EACT,SAAS,EAAEF,kBAAM,CAAC,UAAU,EAC5B,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,CAAC,GAAG,KAAK,aAAa,CAAC,GAAiB,CAAC,EACnD,OAAO,EAAE;AACP,oBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE;AACzC,oBAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE;AACrC,oBAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE;iBACd,EAAA,CACzB,EACFC,wBAAK,SAAS,EAAED,kBAAM,CAAC,OAAO,GAAI,EAClCC,cAAA,CAACE,gBAAU,EAAA,EACT,SAAS,EAAEH,kBAAM,CAAC,OAAO,EACzB,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,MAAK,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAA,EAAA,GAAA,YAAY,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAA,CAAA,CAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,CAGjC,EACbC,cAAA,CAACE,gBAAU,EAAA,EACT,SAAS,EAAEH,kBAAM,CAAC,OAAO,EACzB,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,MAAK,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAA,EAAA,GAAA,aAAa,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE,CAAA,CAAA,CAAA,EAC7C,KAAK,EAAC,mDAAmD,EAAA,QAAA,EAAA,mBAAA,EAAA,CAG9C,EACbC,wBAAK,SAAS,EAAED,kBAAM,CAAC,OAAO,EAAA,CAAI,EAGlCD,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEC,kBAAM,CAAC,gBAAgB,EAAA,QAAA,EAAA,CACrCC,cAAA,CAACE,gBAAU,EAAA,EACT,SAAS,EAAEH,kBAAM,CAAC,OAAO,EACzB,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,MAAM,cAAc,CAAC,WAAW,GAAG,IAAI,GAAG,MAAM,CAAC,kCAG/C,EACZ,WAAW,KACVD,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEC,kBAAM,CAAC,YAAY,EAAA,QAAA,EAAA,CACjCC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAED,kBAAM,CAAC,aAAa,EAAA,QAAA,EAAA,MAAA,EAAA,CAAY,EAC/C,CAAC,MAAM,EAAC,QAAQ,EAAC,UAAU,EAAC,MAAM,EAAC,OAAO,EAAC,OAAO,EAAC,QAAQ,EAAC,MAAM,EAAC,cAAc,EAAC,aAAa,EAAC,YAAY,EAAC,aAAa,EAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAC7IC,cAAA,CAAA,KAAA,EAAA,EAAa,SAAS,EAAED,kBAAM,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,EAAA,QAAA,EACxE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAA,EAD/B,CAAC,CAEL,CACP,CAAC,EACFC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAED,kBAAM,CAAC,WAAW,EAAA,CAAI,EACtCC,wBAAK,SAAS,EAAED,kBAAM,CAAC,aAAa,EAAA,QAAA,EAAA,OAAA,EAAA,CAAa,EAChD,CAAC,OAAO,EAAC,MAAM,EAAC,aAAa,EAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MACjDD,yBAAa,SAAS,EAAEC,kBAAM,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC,CAAC,CAAC,8BACtE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,EAAA,EADlC,CAAC,CAEL,CACP,CAAC,EACFC,wBAAK,SAAS,EAAED,kBAAM,CAAC,WAAW,EAAA,CAAI,EACtCC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAED,kBAAM,CAAC,aAAa,EAAA,QAAA,EAAA,OAAA,EAAA,CAAa,EACjDC,wBAAK,SAAS,EAAED,kBAAM,CAAC,YAAY,EAAE,OAAO,EAAE,eAAe,oCAAiB,EAC9EC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAED,kBAAM,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC,QAAQ,CAAC,EAAA,QAAA,EAAA,uBAAA,EAAA,CAAwB,CAAA,EAAA,CAC1F,CACP,CAAA,EAAA,CACG,EAGNC,eAACE,gBAAU,EAAA,EACT,SAAS,EAAEH,kBAAM,CAAC,OAAO,EACzB,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,CAAC,YAAY,EACvB,KAAK,EAAC,8BAA8B,uCAGzB,EACbC,cAAA,CAACE,gBAAU,EAAA,EACT,SAAS,EAAEH,kBAAM,CAAC,OAAO,EACzB,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,CAAC,YAAY,EACvB,KAAK,EAAC,0BAA0B,EAAA,QAAA,EAAA,eAAA,EAAA,CAGrB,EAEbC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAED,kBAAM,CAAC,OAAO,GAAI,EAClCC,cAAA,CAACE,gBAAU,EAAA,EAAC,SAAS,EAAEH,kBAAM,CAAC,OAAO,EAAE,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,MAAM,UAAU,CAAC,IAAI,CAAC,wCAEnF,EACbC,cAAA,CAACE,gBAAU,EAAA,EAAC,SAAS,EAAEH,kBAAM,CAAC,OAAO,EAAE,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,MAAM,UAAU,CAAC,KAAK,CAAC,EAAA,QAAA,EAAA,0BAAA,EAAA,CAEpF,EACbC,cAAA,CAACE,gBAAU,EAAA,EAAC,SAAS,EAAEH,kBAAM,CAAC,OAAO,EAAE,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,SAAS,EAAA,QAAA,EAAA,yBAAA,EAAA,CAEtE,EACbC,eAACE,gBAAU,EAAA,EAAC,SAAS,EAAEH,kBAAM,CAAC,OAAO,EAAE,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,MAAM,SAAS,CAAC,IAAI,CAAC,wCAElF,EACbC,cAAA,CAACE,gBAAU,EAAA,EAAC,SAAS,EAAEH,kBAAM,CAAC,OAAO,EAAE,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,MAAM,SAAS,CAAC,IAAI,CAAC,EAAA,QAAA,EAAA,yBAAA,EAAA,CAElF,EACbC,cAAA,CAACE,gBAAU,EAAA,EAAC,SAAS,EAAEH,kBAAM,CAAC,OAAO,EAAE,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,UAAU,EAAA,QAAA,EAAA,0BAAA,EAAA,CAEvE,EACZ,kBAAkB,KACjBD,eAAA,CAAAK,mBAAA,EAAA,EAAA,QAAA,EAAA,CACEH,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAED,kBAAM,CAAC,OAAO,GAAI,EAClCC,cAAA,CAACE,gBAAU,EAAA,EAAC,SAAS,EAAEH,kBAAM,CAAC,OAAO,EAAE,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,aAAa,EAAA,QAAA,EAAA,8BAAA,EAAA,CAE1E,IACZ,CACJ,EACDC,wBAAK,SAAS,EAAED,kBAAM,CAAC,OAAO,EAAA,CAAI,EAClCC,cAAA,CAACE,gBAAU,IAAC,SAAS,EAAEH,kBAAM,CAAC,OAAO,EAAE,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,UAAU,mCAEvE,EACbC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAED,kBAAM,CAAC,OAAO,EAAA,CAAI,EAClCC,eAACI,kBAAY,EAAA,EACX,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,MAAM,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EACtC,KAAK,EAAC,MAAM,GACZ,EACFJ,cAAA,CAACI,kBAAY,EAAA,EACX,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,MAAM,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EACtC,KAAK,EAAC,MAAM,EAAA,CACZ,EACFJ,cAAA,CAACI,kBAAY,EAAA,EACX,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EACvC,KAAK,EAAC,MAAM,EAAA,CACZ,EACFJ,cAAA,CAACI,kBAAY,EAAA,EACX,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,MAAM,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAC1C,KAAK,EAAC,MAAM,EAAA,CACZ,EACFJ,cAAA,CAACI,kBAAY,IACX,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAC9C,KAAK,EAAC,SAAS,EAAA,CACf,EACFN,yBAAK,SAAS,EAAEC,kBAAM,CAAC,SAAS,aAC9BC,cAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAED,kBAAM,CAAC,SAAS,mBAAY,EAC9CC,cAAA,CAACK,qBAAe,EAAA,EACd,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,EAAA,CAC9B,CAAA,EAAA,CACE,CAAA,EAAA,CACF;AAEV,CAAC;AAED,kBAAkB,CAAC,WAAW,GAAG,oBAAoB;;;;"}
1
+ {"version":3,"file":"ModelEditorMenuBar.js","sources":["../../../src/model/ModelEditorMenuBar.tsx"],"sourcesContent":[null],"names":["React","_jsxs","styles","_jsx","NiceSelect","NiceButton","_Fragment","NiceCheckbox","NiceColorPicker"],"mappings":"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"}