@nice2dev/ui-3d 1.0.0

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 (70) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/LICENSE +21 -0
  3. package/README.md +90 -0
  4. package/dist/cjs/core/i18n.js +16 -0
  5. package/dist/cjs/core/i18n.js.map +1 -0
  6. package/dist/cjs/index.js +11 -0
  7. package/dist/cjs/index.js.map +1 -0
  8. package/dist/cjs/model/ModelEditor.js +33 -0
  9. package/dist/cjs/model/ModelEditor.js.map +1 -0
  10. package/dist/cjs/model/ModelEditor.module.css.js +6 -0
  11. package/dist/cjs/model/ModelEditor.module.css.js.map +1 -0
  12. package/dist/cjs/model/ModelEditorLeftPanel.js +40 -0
  13. package/dist/cjs/model/ModelEditorLeftPanel.js.map +1 -0
  14. package/dist/cjs/model/ModelEditorMenuBar.js +14 -0
  15. package/dist/cjs/model/ModelEditorMenuBar.js.map +1 -0
  16. package/dist/cjs/model/ModelEditorRightPanel.js +106 -0
  17. package/dist/cjs/model/ModelEditorRightPanel.js.map +1 -0
  18. package/dist/cjs/model/ModelEditorSubComponents.js +99 -0
  19. package/dist/cjs/model/ModelEditorSubComponents.js.map +1 -0
  20. package/dist/cjs/model/ModelEditorTimeline.js +31 -0
  21. package/dist/cjs/model/ModelEditorTimeline.js.map +1 -0
  22. package/dist/cjs/model/ModelEditorToolbar.js +14 -0
  23. package/dist/cjs/model/ModelEditorToolbar.js.map +1 -0
  24. package/dist/cjs/model/ModelEditorViewport.js +20 -0
  25. package/dist/cjs/model/ModelEditorViewport.js.map +1 -0
  26. package/dist/cjs/model/modelEditorTypes.js +122 -0
  27. package/dist/cjs/model/modelEditorTypes.js.map +1 -0
  28. package/dist/cjs/model/useModelEditor.js +1581 -0
  29. package/dist/cjs/model/useModelEditor.js.map +1 -0
  30. package/dist/cjs/nice2dev-ui-3d.css +1 -0
  31. package/dist/esm/core/i18n.js +13 -0
  32. package/dist/esm/core/i18n.js.map +1 -0
  33. package/dist/esm/index.js +3 -0
  34. package/dist/esm/index.js.map +1 -0
  35. package/dist/esm/model/ModelEditor.js +31 -0
  36. package/dist/esm/model/ModelEditor.js.map +1 -0
  37. package/dist/esm/model/ModelEditor.module.css.js +4 -0
  38. package/dist/esm/model/ModelEditor.module.css.js.map +1 -0
  39. package/dist/esm/model/ModelEditorLeftPanel.js +38 -0
  40. package/dist/esm/model/ModelEditorLeftPanel.js.map +1 -0
  41. package/dist/esm/model/ModelEditorMenuBar.js +12 -0
  42. package/dist/esm/model/ModelEditorMenuBar.js.map +1 -0
  43. package/dist/esm/model/ModelEditorRightPanel.js +85 -0
  44. package/dist/esm/model/ModelEditorRightPanel.js.map +1 -0
  45. package/dist/esm/model/ModelEditorSubComponents.js +76 -0
  46. package/dist/esm/model/ModelEditorSubComponents.js.map +1 -0
  47. package/dist/esm/model/ModelEditorTimeline.js +29 -0
  48. package/dist/esm/model/ModelEditorTimeline.js.map +1 -0
  49. package/dist/esm/model/ModelEditorToolbar.js +12 -0
  50. package/dist/esm/model/ModelEditorToolbar.js.map +1 -0
  51. package/dist/esm/model/ModelEditorViewport.js +18 -0
  52. package/dist/esm/model/ModelEditorViewport.js.map +1 -0
  53. package/dist/esm/model/modelEditorTypes.js +97 -0
  54. package/dist/esm/model/modelEditorTypes.js.map +1 -0
  55. package/dist/esm/model/useModelEditor.js +1560 -0
  56. package/dist/esm/model/useModelEditor.js.map +1 -0
  57. package/dist/esm/nice2dev-ui-3d.css +1 -0
  58. package/dist/types/core/i18n.d.ts +27 -0
  59. package/dist/types/index.d.ts +10 -0
  60. package/dist/types/model/ModelEditor.d.ts +17 -0
  61. package/dist/types/model/ModelEditorLeftPanel.d.ts +10 -0
  62. package/dist/types/model/ModelEditorMenuBar.d.ts +11 -0
  63. package/dist/types/model/ModelEditorRightPanel.d.ts +11 -0
  64. package/dist/types/model/ModelEditorSubComponents.d.ts +24 -0
  65. package/dist/types/model/ModelEditorTimeline.d.ts +11 -0
  66. package/dist/types/model/ModelEditorToolbar.d.ts +11 -0
  67. package/dist/types/model/ModelEditorViewport.d.ts +11 -0
  68. package/dist/types/model/modelEditorTypes.d.ts +52 -0
  69. package/dist/types/model/useModelEditor.d.ts +125 -0
  70. package/package.json +89 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,25 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@nice2dev/ui-3d` will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ---
9
+
10
+ ## [1.0.0] — 2026-03-17
11
+
12
+ ### 🧊 Initial Release
13
+
14
+ First stable release of `@nice2dev/ui-3d` — a Blender-style 3D model editor component for React.
15
+
16
+ ### Features
17
+
18
+ - **Nice3DModelEditor** — full-featured 3D editor with scene tree, inspector, viewport
19
+ - **Nice3DModelViewer** — lighter read-only 3D viewer for embedding
20
+ - **Format support** — glTF, GLB, FBX, OBJ import/export
21
+ - **PBR Materials** — physically-based rendering with metallic-roughness workflow
22
+ - **Transform controls** — translate, rotate, scale gizmos
23
+ - **Camera** — orbit, pan, zoom with perspective/orthographic toggle
24
+ - **Lighting** — ambient, directional, point, spot light support
25
+ - **Scene hierarchy** — tree view with drag-and-drop reordering
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 NiceToDev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,90 @@
1
+ # @nice2dev/ui-3d
2
+
3
+ > Blender-style 3D model editor component for React, powered by Three.js.
4
+
5
+ [![npm](https://img.shields.io/npm/v/@nice2dev/ui-3d)](https://www.npmjs.com/package/@nice2dev/ui-3d)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
7
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
8
+
9
+ ---
10
+
11
+ ## Features
12
+
13
+ - Full 3D scene editing (translate / rotate / scale)
14
+ - Load FBX, GLB/GLTF, OBJ, DAE, STL, PLY and more
15
+ - Animation playback with mixer
16
+ - Scene tree, properties panel, timeline
17
+ - Optional AI pose-from-video (`onAIPoseVideo` prop)
18
+ - Zero external dependencies — pure React + Three.js library
19
+
20
+ ## Installation
21
+
22
+ ```bash
23
+ npm install @nice2dev/ui-3d three
24
+ # peer deps: react, react-dom
25
+ ```
26
+
27
+ ## Quick start
28
+
29
+ ```tsx
30
+ import { ModelEditor } from '@nice2dev/ui-3d';
31
+ import '@nice2dev/ui-3d/style.css';
32
+
33
+ function App() {
34
+ return (
35
+ <ModelEditor
36
+ onSaveToLibrary={(dataUrl, name, mimeType) => console.log('save', name)}
37
+ />
38
+ );
39
+ }
40
+ ```
41
+
42
+ ## With AI pose-from-video
43
+
44
+ ```tsx
45
+ import { ModelEditor, type Pose3DSequenceResult } from '@nice2dev/ui-3d';
46
+
47
+ async function myAiPose(file: File): Promise<Pose3DSequenceResult> {
48
+ const form = new FormData();
49
+ form.append('video', file);
50
+ const res = await fetch('/api/pose3d', { method: 'POST', body: form });
51
+ return res.json();
52
+ }
53
+
54
+ <ModelEditor onAIPoseVideo={myAiPose} />
55
+ ```
56
+
57
+ ## With i18n
58
+
59
+ ```tsx
60
+ import { ModelEditor, NiceI18nProvider } from '@nice2dev/ui-3d';
61
+ import { useTranslation } from 'react-i18next';
62
+
63
+ function App() {
64
+ const { t } = useTranslation();
65
+ return (
66
+ <NiceI18nProvider t={(key, fallback) => t(key, fallback)}>
67
+ <ModelEditor />
68
+ </NiceI18nProvider>
69
+ );
70
+ }
71
+ ```
72
+
73
+ ## Props
74
+
75
+ | Prop | Type | Default | Description |
76
+ |------|------|---------|-------------|
77
+ | `className` | `string` | — | CSS class added to root element |
78
+ | `onSaveToLibrary` | `(dataUrl, name, mimeType) => void` | — | Called when user saves render |
79
+ | `onAIPoseVideo` | `(file: File) => Promise<Pose3DSequenceResult>` | — | AI pose callback; button hidden if omitted |
80
+
81
+ ## Build
82
+
83
+ ```bash
84
+ npm install
85
+ npm run build
86
+ ```
87
+
88
+ ## License
89
+
90
+ MIT © NiceToDev
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+
6
+ const fallback = (_key, defaultValue) => defaultValue;
7
+ const NiceI18nContext = React.createContext(fallback);
8
+ const NiceI18nProvider = ({ t, children }) => (jsxRuntime.jsx(NiceI18nContext.Provider, { value: t, children: children }));
9
+ function useNiceTranslation() {
10
+ const t = React.useContext(NiceI18nContext);
11
+ return { t };
12
+ }
13
+
14
+ exports.NiceI18nProvider = NiceI18nProvider;
15
+ exports.useNiceTranslation = useNiceTranslation;
16
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sources":["../../../src/core/i18n.tsx"],"sourcesContent":[null],"names":["createContext","_jsx","useContext"],"mappings":";;;;;AAqBA,MAAM,QAAQ,GAAoB,CAAC,IAAY,EAAE,YAAoB,KAAK,YAAY;AAEtF,MAAM,eAAe,GAAGA,mBAAa,CAAkB,QAAQ,CAAC;AAOzD,MAAM,gBAAgB,GAAoC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,MAC/EC,cAAA,CAAC,eAAe,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,CAAC,EAAA,QAAA,EAAG,QAAQ,EAAA,CAA4B;SAG3D,kBAAkB,GAAA;AAChC,IAAA,MAAM,CAAC,GAAGC,gBAAU,CAAC,eAAe,CAAC;IACrC,OAAO,EAAE,CAAC,EAAE;AACd;;;;;"}
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ var ModelEditor = require('./model/ModelEditor.js');
4
+ var i18n = require('./core/i18n.js');
5
+
6
+
7
+
8
+ exports.ModelEditor = ModelEditor.ModelEditor;
9
+ exports.NiceI18nProvider = i18n.NiceI18nProvider;
10
+ exports.useNiceTranslation = i18n.useNiceTranslation;
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var ModelEditor_module = require('./ModelEditor.module.css.js');
5
+ var modelEditorTypes = require('./modelEditorTypes.js');
6
+ var useModelEditor = require('./useModelEditor.js');
7
+ var ModelEditorMenuBar = require('./ModelEditorMenuBar.js');
8
+ var ModelEditorLeftPanel = require('./ModelEditorLeftPanel.js');
9
+ var ModelEditorToolbar = require('./ModelEditorToolbar.js');
10
+ var ModelEditorViewport = require('./ModelEditorViewport.js');
11
+ var ModelEditorRightPanel = require('./ModelEditorRightPanel.js');
12
+ var ModelEditorTimeline = require('./ModelEditorTimeline.js');
13
+
14
+ const ACCEPT = modelEditorTypes.SUPPORTED_EXTENSIONS.map((e) => `.${e}`).join(",");
15
+ const ModelEditor = ({ className, onSaveToLibrary, onAIPoseVideo }) => {
16
+ const api = useModelEditor.useModelEditor({ onSaveToLibrary, onAIPoseVideo });
17
+ return (jsxRuntime.jsxs("div", { className: `${ModelEditor_module.editor} ${className !== null && className !== void 0 ? className : ""}`, tabIndex: 0, children: [jsxRuntime.jsx("input", { ref: api.fileInputRef, type: "file", accept: ACCEPT, style: { display: "none" }, onChange: (e) => {
18
+ var _a;
19
+ const f = (_a = e.target.files) === null || _a === void 0 ? void 0 : _a[0];
20
+ if (f)
21
+ api.loadFile(f);
22
+ e.target.value = "";
23
+ } }), jsxRuntime.jsx("input", { ref: api.mergeInputRef, type: "file", accept: ".fbx", style: { display: "none" }, onChange: (e) => {
24
+ var _a;
25
+ const f = (_a = e.target.files) === null || _a === void 0 ? void 0 : _a[0];
26
+ if (f)
27
+ api.mergeAnimationFBX(f);
28
+ e.target.value = "";
29
+ } }), jsxRuntime.jsx("input", { ref: api.videoInputRef, type: "file", accept: "video/*", style: { display: "none" }, onChange: api.handleAIVideo }), jsxRuntime.jsx(ModelEditorMenuBar, { api: api, hasOnSaveToLibrary: !!onSaveToLibrary }), jsxRuntime.jsxs("div", { className: ModelEditor_module.mainArea, children: [jsxRuntime.jsx(ModelEditorLeftPanel, { api: api }), jsxRuntime.jsx(ModelEditorToolbar, { api: api }), jsxRuntime.jsx(ModelEditorViewport, { api: api }), jsxRuntime.jsx(ModelEditorRightPanel, { api: api })] }), jsxRuntime.jsx(ModelEditorTimeline, { api: api }), jsxRuntime.jsxs("div", { className: ModelEditor_module.statusBar, children: [jsxRuntime.jsx("span", { children: api.statusText }), jsxRuntime.jsxs("span", { style: { marginLeft: "auto" }, children: [api.polyCount.toLocaleString(), " triangles \u00B7 ", api.meshCount, " meshes \u00B7", " ", api.boneCount, " bones \u00B7 ", api.animations.length, " anim(s)"] })] })] }));
30
+ };
31
+
32
+ exports.ModelEditor = ModelEditor;
33
+ //# sourceMappingURL=ModelEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelEditor.js","sources":["../../../src/model/ModelEditor.tsx"],"sourcesContent":[null],"names":["SUPPORTED_EXTENSIONS","useModelEditor","_jsxs","styles","_jsx"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var styles = {"menuBar":"ModelEditor-module_menuBar__5P6Wi","menuBtn":"ModelEditor-module_menuBtn__f1u-N","menuSep":"ModelEditor-module_menuSep__Jilgu","menuLabel":"ModelEditor-module_menuLabel__gn6yQ","menuRight":"ModelEditor-module_menuRight__YQWk7","mainArea":"ModelEditor-module_mainArea__ZItOn","leftPanel":"ModelEditor-module_leftPanel__sVsxG","toolbar":"ModelEditor-module_toolbar__l8uKC","toolBtn":"ModelEditor-module_toolBtn__8DzAf","toolBtnActive":"ModelEditor-module_toolBtnActive__ek-nN","toolSep":"ModelEditor-module_toolSep__5I72j","viewportContainer":"ModelEditor-module_viewportContainer__O-e-6","viewportOverlay":"ModelEditor-module_viewportOverlay__LXDnT","viewportBadge":"ModelEditor-module_viewportBadge__-5C9w","viewportDropZone":"ModelEditor-module_viewportDropZone__PBrTo","rightPanel":"ModelEditor-module_rightPanel__oJf3N","panelSection":"ModelEditor-module_panelSection__yb-jc","panelTitle":"ModelEditor-module_panelTitle__rp8tH","panelContent":"ModelEditor-module_panelContent__IMNnR","treeItem":"ModelEditor-module_treeItem__MiVWT","treeItemActive":"ModelEditor-module_treeItemActive__4ntXK","treeIcon":"ModelEditor-module_treeIcon__PzniU","treeToggle":"ModelEditor-module_treeToggle__Ge5PW","treeVisibility":"ModelEditor-module_treeVisibility__BjKaL","propRow":"ModelEditor-module_propRow__AONtp","propLabel":"ModelEditor-module_propLabel__bwkAK","propInput":"ModelEditor-module_propInput__aFI4Q","propVec3":"ModelEditor-module_propVec3__2FcMf","propVec3X":"ModelEditor-module_propVec3X__lfQtN","propVec3Y":"ModelEditor-module_propVec3Y__PmF5p","propVec3Z":"ModelEditor-module_propVec3Z__swB76","propColorSwatch":"ModelEditor-module_propColorSwatch__SMg9F","propSelect":"ModelEditor-module_propSelect__1YXcX","bottomPanel":"ModelEditor-module_bottomPanel__ojUaN","bottomPanelCollapsed":"ModelEditor-module_bottomPanelCollapsed__P2I6E","bottomPanelHeader":"ModelEditor-module_bottomPanelHeader__z9D6b","bottomPanelTitle":"ModelEditor-module_bottomPanelTitle__0P32m","bottomToggle":"ModelEditor-module_bottomToggle__fsUEB","transportBar":"ModelEditor-module_transportBar__bh6Sb","transportBtn":"ModelEditor-module_transportBtn__egXSB","transportBtnActive":"ModelEditor-module_transportBtnActive__j6Y94","transportTime":"ModelEditor-module_transportTime__7RzUh","animListArea":"ModelEditor-module_animListArea__rzc1e","animList":"ModelEditor-module_animList__lGNt5","animItem":"ModelEditor-module_animItem__lZGOY","animItemActive":"ModelEditor-module_animItemActive__8pKLd","animDuration":"ModelEditor-module_animDuration__CAwuG","timelineArea":"ModelEditor-module_timelineArea__WFBHa","timelineRuler":"ModelEditor-module_timelineRuler__jlW8F","rulerTick":"ModelEditor-module_rulerTick__VhJRA","rulerLabel":"ModelEditor-module_rulerLabel__Pwl9a","playhead":"ModelEditor-module_playhead__Rd4rh","playheadHandle":"ModelEditor-module_playheadHandle__rIBHA","timelineTracks":"ModelEditor-module_timelineTracks__joMHo","statusBar":"ModelEditor-module_statusBar__AJMzx","materialCard":"ModelEditor-module_materialCard__1IGe7","materialCardActive":"ModelEditor-module_materialCardActive__VEnBX","materialHeader":"ModelEditor-module_materialHeader__WtTh3","materialName":"ModelEditor-module_materialName__TvRhs","textureSlot":"ModelEditor-module_textureSlot__PLqef","textureThumb":"ModelEditor-module_textureThumb__PdCTD","textureInfo":"ModelEditor-module_textureInfo__XOzZI","textureName":"ModelEditor-module_textureName__H-2d3","btnSecondary":"ModelEditor-module_btnSecondary__nJpgi","aiPanel":"ModelEditor-module_aiPanel__-U1jO","aiHeader":"ModelEditor-module_aiHeader__WMZF5","aiBtnRow":"ModelEditor-module_aiBtnRow__F-S-Z","aiBtn":"ModelEditor-module_aiBtn__8dcrE","aiStatus":"ModelEditor-module_aiStatus__Y5g59","dragOver":"ModelEditor-module_dragOver__2VGIz","contextMenu":"ModelEditor-module_contextMenu__sEb9s","contextItem":"ModelEditor-module_contextItem__W90fc","contextSep":"ModelEditor-module_contextSep__QCWTX","contextKey":"ModelEditor-module_contextKey__HxGV6","modeSelect":"ModelEditor-module_modeSelect__KroPg","menuDropdownWrap":"ModelEditor-module_menuDropdownWrap__6dicW","dropdownMenu":"ModelEditor-module_dropdownMenu__ixJxD","dropdownTitle":"ModelEditor-module_dropdownTitle__zzdA6","dropdownItem":"ModelEditor-module_dropdownItem__4dllG","dropdownSep":"ModelEditor-module_dropdownSep__oFx30","viewportShadingBar":"ModelEditor-module_viewportShadingBar__NOK0h","shadingBtn":"ModelEditor-module_shadingBtn__SAIR9","shadingBtnActive":"ModelEditor-module_shadingBtnActive__ST5YT","viewportGizmoInfo":"ModelEditor-module_viewportGizmoInfo__k0ily","propTabs":"ModelEditor-module_propTabs__Vw0-u","propTabBtn":"ModelEditor-module_propTabBtn__s8xDE","propTabBtnActive":"ModelEditor-module_propTabBtnActive__-woXw","outlinerSearch":"ModelEditor-module_outlinerSearch__p5L46"};
4
+
5
+ module.exports = styles;
6
+ //# sourceMappingURL=ModelEditor.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelEditor.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var ModelEditor_module = require('./ModelEditor.module.css.js');
6
+
7
+ const ModelEditorLeftPanel = React.memo(({ api }) => {
8
+ const { sceneTree, selectedId, outlinerSearch, setOutlinerSearch, selectObject, rebuildTree, toggleNodeExpanded, toggleNodeVisibility, } = api;
9
+ const renderTreeNode = (node, depth) => {
10
+ // Outliner search filter
11
+ if (outlinerSearch) {
12
+ const q = outlinerSearch.toLowerCase();
13
+ const match = node.name.toLowerCase().includes(q);
14
+ const childMatch = node.children.some(function cm(c) {
15
+ return c.name.toLowerCase().includes(q) || c.children.some(cm);
16
+ });
17
+ if (!match && !childMatch)
18
+ return null;
19
+ }
20
+ const hasChildren = node.children.length > 0;
21
+ const icon = node.type === "mesh" ? "◆" :
22
+ node.type === "bone" ? "🦴" :
23
+ node.type === "light" ? "💡" :
24
+ node.type === "camera" ? "📷" :
25
+ node.type === "helper" ? "◇" : "📁";
26
+ return (jsxRuntime.jsxs(React.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
+ e.stopPropagation();
28
+ toggleNodeExpanded(node);
29
+ }, 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) => {
30
+ e.stopPropagation();
31
+ toggleNodeVisibility(node);
32
+ }, children: node.visible ? "👁" : "◌" })] }), node.expanded &&
33
+ node.children.map((c) => renderTreeNode(c, depth + 1))] }, node.id));
34
+ };
35
+ 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("button", { onClick: rebuildTree, title: "Refresh", "aria-label": "Refresh outliner", children: "\u27F3" })] }), jsxRuntime.jsx("div", { className: ModelEditor_module.outlinerSearch, children: jsxRuntime.jsx("input", { className: ModelEditor_module.propInput, placeholder: "\uD83D\uDD0D Filter...", value: outlinerSearch, onChange: (e) => setOutlinerSearch(e.target.value), 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
+ });
37
+ ModelEditorLeftPanel.displayName = "ModelEditorLeftPanel";
38
+
39
+ module.exports = ModelEditorLeftPanel;
40
+ //# sourceMappingURL=ModelEditorLeftPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelEditorLeftPanel.js","sources":["../../../src/model/ModelEditorLeftPanel.tsx"],"sourcesContent":[null],"names":["_jsxs","styles","_jsx"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var ModelEditor_module = require('./ModelEditor.module.css.js');
6
+
7
+ const ModelEditorMenuBar = React.memo(({ api, hasOnSaveToLibrary }) => {
8
+ 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;
9
+ return (jsxRuntime.jsxs("div", { className: ModelEditor_module.menuBar, children: [jsxRuntime.jsxs("select", { className: ModelEditor_module.modeSelect, value: editorMode, onChange: (e) => setEditorMode(e.target.value), children: [jsxRuntime.jsx("option", { value: "object", children: "Object Mode" }), jsxRuntime.jsx("option", { value: "edit", children: "Edit Mode" }), jsxRuntime.jsx("option", { value: "pose", children: "Pose Mode" })] }), jsxRuntime.jsx("div", { className: ModelEditor_module.menuSep }), jsxRuntime.jsx("button", { className: ModelEditor_module.menuBtn, onClick: () => { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: "\uD83D\uDCC2 Open" }), jsxRuntime.jsx("button", { className: ModelEditor_module.menuBtn, 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("button", { className: ModelEditor_module.menuBtn, 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("button", { className: ModelEditor_module.menuBtn, onClick: duplicateSelected, disabled: !selectedNode, title: "Duplicate selected (Shift+D)", children: "\uD83D\uDCCB Duplicate" }), jsxRuntime.jsx("button", { className: ModelEditor_module.menuBtn, onClick: deleteSelected, disabled: !selectedNode, title: "Delete selected (Delete)", children: "\u2715 Delete" }), jsxRuntime.jsx("div", { className: ModelEditor_module.menuSep }), jsxRuntime.jsx("button", { className: ModelEditor_module.menuBtn, onClick: () => exportGLTF(true), children: "\uD83D\uDCBE Export GLB" }), jsxRuntime.jsx("button", { className: ModelEditor_module.menuBtn, onClick: () => exportGLTF(false), children: "\uD83D\uDCC4 Export GLTF" }), jsxRuntime.jsx("button", { className: ModelEditor_module.menuBtn, onClick: exportOBJ, children: "\uD83D\uDCC4 Export OBJ" }), jsxRuntime.jsx("button", { className: ModelEditor_module.menuBtn, onClick: () => exportSTL(true), children: "\uD83D\uDCC4 Export STL" }), jsxRuntime.jsx("button", { className: ModelEditor_module.menuBtn, onClick: () => exportPLY(true), children: "\uD83D\uDCC4 Export PLY" }), jsxRuntime.jsx("button", { className: ModelEditor_module.menuBtn, onClick: exportUSDZ, children: "\uD83D\uDCC4 Export USDZ" }), hasOnSaveToLibrary && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: ModelEditor_module.menuSep }), jsxRuntime.jsx("button", { className: ModelEditor_module.menuBtn, onClick: saveToLibrary, children: "\uD83D\uDCE6 Save to Library" })] })), jsxRuntime.jsx("div", { className: ModelEditor_module.menuSep }), jsxRuntime.jsx("button", { className: ModelEditor_module.menuBtn, onClick: clearScene, children: "\uD83D\uDDD1 Clear" }), jsxRuntime.jsx("div", { className: ModelEditor_module.menuSep }), jsxRuntime.jsx("label", { className: ModelEditor_module.menuLabel, children: "Grid" }), jsxRuntime.jsx("input", { type: "checkbox", checked: showGrid, onChange: () => setShowGrid((v) => !v) }), jsxRuntime.jsx("label", { className: ModelEditor_module.menuLabel, children: "Axes" }), jsxRuntime.jsx("input", { type: "checkbox", checked: showAxes, onChange: () => setShowAxes((v) => !v) }), jsxRuntime.jsx("label", { className: ModelEditor_module.menuLabel, children: "Wire" }), jsxRuntime.jsx("input", { type: "checkbox", checked: wireframe, onChange: () => setWireframe((v) => !v) }), jsxRuntime.jsx("label", { className: ModelEditor_module.menuLabel, children: "Skel" }), jsxRuntime.jsx("input", { type: "checkbox", checked: showSkeleton, onChange: () => setShowSkeleton((v) => !v) }), jsxRuntime.jsx("label", { className: ModelEditor_module.menuLabel, children: "Helpers" }), jsxRuntime.jsx("input", { type: "checkbox", checked: showLightHelpers, onChange: () => setShowLightHelpers((v) => !v) }), jsxRuntime.jsxs("div", { className: ModelEditor_module.menuRight, children: [jsxRuntime.jsx("label", { className: ModelEditor_module.menuLabel, children: "BG" }), jsxRuntime.jsx("div", { className: ModelEditor_module.propColorSwatch, style: { width: 18, height: 18, background: bgColor }, children: jsxRuntime.jsx("input", { type: "color", value: bgColor, onChange: (e) => setBgColor(e.target.value) }) })] })] }));
10
+ });
11
+ ModelEditorMenuBar.displayName = "ModelEditorMenuBar";
12
+
13
+ module.exports = ModelEditorMenuBar;
14
+ //# sourceMappingURL=ModelEditorMenuBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelEditorMenuBar.js","sources":["../../../src/model/ModelEditorMenuBar.tsx"],"sourcesContent":[null],"names":["_jsxs","styles","_jsx"],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var THREE = require('three');
6
+ var ModelEditor_module = require('./ModelEditor.module.css.js');
7
+ var modelEditorTypes = require('./modelEditorTypes.js');
8
+ var ModelEditorSubComponents = require('./ModelEditorSubComponents.js');
9
+
10
+ function _interopNamespaceDefault(e) {
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var THREE__namespace = /*#__PURE__*/_interopNamespaceDefault(THREE);
28
+
29
+ const ModelEditorRightPanel = React.memo(({ api }) => {
30
+ const { propTab, setPropTab, selectedNode, selectedMaterials, selMaterialIdx, setSelMaterialIdx, setMatRefresh, rebuildTree, aiBusy, aiStatus, rootObjectRef, videoInputRef, bgColor, setBgColor, fogEnabled, setFogEnabled, fogColor, setFogColor, fogNear, setFogNear, fogFar, setFogFar, showLightHelpers, setShowLightHelpers, showGrid, setShowGrid, showAxes, setShowAxes, showSkeleton, setShowSkeleton, snapEnabled, setSnapEnabled, snapGrid, setSnapGrid, setStatusText, } = api;
31
+ return (jsxRuntime.jsxs("div", { className: ModelEditor_module.rightPanel, children: [jsxRuntime.jsx("div", { className: ModelEditor_module.propTabs, children: ["object", "material", "world", "modifiers", "physics"].map((t) => (jsxRuntime.jsx("button", { className: `${ModelEditor_module.propTabBtn} ${propTab === t ? ModelEditor_module.propTabBtnActive : ""}`, onClick: () => setPropTab(t), title: t.charAt(0).toUpperCase() + t.slice(1), children: t === "object" ? "🔧" : t === "material" ? "🎨" : t === "world" ? "🌍" : t === "modifiers" ? "🔩" : "⚡" }, t))) }), propTab === "object" && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: ModelEditor_module.panelSection, children: [jsxRuntime.jsx("div", { className: ModelEditor_module.panelTitle, children: "\uD83D\uDD27 Transform" }), jsxRuntime.jsx("div", { className: ModelEditor_module.panelContent, children: selectedNode ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Name" }), jsxRuntime.jsx("input", { className: ModelEditor_module.propInput, value: selectedNode.name, onChange: (e) => {
32
+ selectedNode.object.name = e.target.value;
33
+ rebuildTree();
34
+ } })] }), jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Type" }), jsxRuntime.jsx("span", { style: { fontSize: 10, color: "#888" }, children: selectedNode.type })] }), jsxRuntime.jsx(ModelEditorSubComponents.Vec3Row, { label: "Position", value: selectedNode.object.position, onChange: () => setMatRefresh((n) => n + 1) }), jsxRuntime.jsx(ModelEditorSubComponents.Vec3RowDeg, { label: "Rotation", value: selectedNode.object.rotation, onChange: () => setMatRefresh((n) => n + 1) }), jsxRuntime.jsx(ModelEditorSubComponents.Vec3Row, { label: "Scale", value: selectedNode.object.scale, onChange: () => setMatRefresh((n) => n + 1) })] })) : (jsxRuntime.jsx("div", { style: { color: "#666", fontSize: 10 }, children: "Select an object" })) })] }), selectedNode && selectedNode.object instanceof THREE__namespace.Light && (jsxRuntime.jsxs("div", { className: ModelEditor_module.panelSection, children: [jsxRuntime.jsx("div", { className: ModelEditor_module.panelTitle, children: "\uD83D\uDCA1 Light" }), jsxRuntime.jsxs("div", { className: ModelEditor_module.panelContent, children: [jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Color" }), jsxRuntime.jsx("div", { className: ModelEditor_module.propColorSwatch, style: { background: `#${selectedNode.object.color.getHexString()}` }, children: jsxRuntime.jsx("input", { type: "color", value: `#${selectedNode.object.color.getHexString()}`, onChange: (e) => {
35
+ selectedNode.object.color.set(e.target.value);
36
+ setMatRefresh((n) => n + 1);
37
+ } }) })] }), jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Intensity" }), jsxRuntime.jsx("input", { type: "range", min: 0, max: 10, step: 0.1, value: selectedNode.object.intensity, onChange: (e) => {
38
+ selectedNode.object.intensity = parseFloat(e.target.value);
39
+ setMatRefresh((n) => n + 1);
40
+ }, style: { flex: 1, accentColor: "#5566cc" } }), jsxRuntime.jsx("span", { style: { fontSize: 9, color: "#888", width: 28, textAlign: "right" }, children: selectedNode.object.intensity.toFixed(1) })] }), "castShadow" in selectedNode.object && (jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Shadow" }), jsxRuntime.jsx("input", { type: "checkbox", checked: selectedNode.object.castShadow, onChange: (e) => {
41
+ selectedNode.object.castShadow = e.target.checked;
42
+ setMatRefresh((n) => n + 1);
43
+ } })] })), selectedNode.object instanceof THREE__namespace.SpotLight && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Angle" }), jsxRuntime.jsx("input", { type: "range", min: 0, max: 90, step: 1, value: (selectedNode.object.angle * modelEditorTypes.DEG), onChange: (e) => {
44
+ selectedNode.object.angle = parseFloat(e.target.value) / modelEditorTypes.DEG;
45
+ setMatRefresh((n) => n + 1);
46
+ }, style: { flex: 1, accentColor: "#5566cc" } }), jsxRuntime.jsxs("span", { style: { fontSize: 9, color: "#888", width: 28, textAlign: "right" }, children: [(selectedNode.object.angle * modelEditorTypes.DEG).toFixed(0), "\u00B0"] })] }), jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Penumbra" }), jsxRuntime.jsx("input", { type: "range", min: 0, max: 1, step: 0.01, value: selectedNode.object.penumbra, onChange: (e) => {
47
+ selectedNode.object.penumbra = parseFloat(e.target.value);
48
+ setMatRefresh((n) => n + 1);
49
+ }, style: { flex: 1, accentColor: "#5566cc" } })] })] }))] })] })), selectedNode && selectedNode.object instanceof THREE__namespace.PerspectiveCamera && (jsxRuntime.jsxs("div", { className: ModelEditor_module.panelSection, children: [jsxRuntime.jsx("div", { className: ModelEditor_module.panelTitle, children: "\uD83D\uDCF7 Camera" }), jsxRuntime.jsxs("div", { className: ModelEditor_module.panelContent, children: [jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "FOV" }), jsxRuntime.jsx("input", { type: "range", min: 10, max: 120, step: 1, value: selectedNode.object.fov, onChange: (e) => {
50
+ const cam = selectedNode.object;
51
+ cam.fov = parseFloat(e.target.value);
52
+ cam.updateProjectionMatrix();
53
+ setMatRefresh((n) => n + 1);
54
+ }, style: { flex: 1, accentColor: "#5566cc" } }), jsxRuntime.jsxs("span", { style: { fontSize: 9, color: "#888", width: 28, textAlign: "right" }, children: [selectedNode.object.fov.toFixed(0), "\u00B0"] })] }), jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Near" }), jsxRuntime.jsx("input", { className: ModelEditor_module.propInput, type: "number", step: 0.01, value: selectedNode.object.near, onChange: (e) => {
55
+ const cam = selectedNode.object;
56
+ cam.near = parseFloat(e.target.value);
57
+ cam.updateProjectionMatrix();
58
+ setMatRefresh((n) => n + 1);
59
+ }, style: { width: 60 } })] }), jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Far" }), jsxRuntime.jsx("input", { className: ModelEditor_module.propInput, type: "number", step: 1, value: selectedNode.object.far, onChange: (e) => {
60
+ const cam = selectedNode.object;
61
+ cam.far = parseFloat(e.target.value);
62
+ cam.updateProjectionMatrix();
63
+ setMatRefresh((n) => n + 1);
64
+ }, style: { width: 80 } })] })] })] })), jsxRuntime.jsxs("div", { className: ModelEditor_module.panelSection, children: [jsxRuntime.jsx("div", { className: ModelEditor_module.panelTitle, children: "\uD83E\uDD16 AI Animation" }), jsxRuntime.jsx("div", { className: ModelEditor_module.panelContent, children: jsxRuntime.jsxs("div", { className: ModelEditor_module.aiPanel, children: [jsxRuntime.jsx("div", { className: ModelEditor_module.aiHeader, children: "\u2728 Generate animation from video" }), jsxRuntime.jsx("p", { style: { fontSize: 10, color: "#888", margin: "0 0 6px" }, children: "Upload a video and AI will extract 3D pose data to create an animation clip for the current model." }), jsxRuntime.jsx("div", { className: ModelEditor_module.aiBtnRow, children: jsxRuntime.jsx("button", { className: ModelEditor_module.aiBtn, disabled: aiBusy || !rootObjectRef.current, onClick: () => { var _a; return (_a = videoInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: aiBusy ? "Processing..." : "Upload Video" }) }), aiStatus && (jsxRuntime.jsx("div", { className: ModelEditor_module.aiStatus, children: aiStatus }))] }) })] })] })), propTab === "material" && (jsxRuntime.jsxs("div", { className: ModelEditor_module.panelSection, children: [jsxRuntime.jsx("div", { className: ModelEditor_module.panelTitle, children: "\uD83C\uDFA8 Materials" }), jsxRuntime.jsx("div", { className: ModelEditor_module.panelContent, children: selectedMaterials.length > 0 ? (selectedMaterials.map((mat, i) => (jsxRuntime.jsx(ModelEditorSubComponents.MaterialCard, { material: mat, active: i === selMaterialIdx, onClick: () => setSelMaterialIdx(i), onUpdate: () => setMatRefresh((n) => n + 1) }, i)))) : (jsxRuntime.jsx("div", { style: { color: "#666", fontSize: 10 }, children: selectedNode
65
+ ? "No materials on this object"
66
+ : "Select a mesh to inspect" })) })] })), propTab === "world" && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: ModelEditor_module.panelSection, children: [jsxRuntime.jsx("div", { className: ModelEditor_module.panelTitle, children: "\uD83C\uDF0D Environment" }), jsxRuntime.jsx("div", { className: ModelEditor_module.panelContent, children: jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Background" }), jsxRuntime.jsx("div", { className: ModelEditor_module.propColorSwatch, style: { background: bgColor }, children: jsxRuntime.jsx("input", { type: "color", value: bgColor, onChange: (e) => setBgColor(e.target.value) }) }), jsxRuntime.jsx("span", { style: { fontSize: 9, color: "#888" }, children: bgColor })] }) })] }), jsxRuntime.jsxs("div", { className: ModelEditor_module.panelSection, children: [jsxRuntime.jsx("div", { className: ModelEditor_module.panelTitle, children: "\uD83C\uDF2B Fog" }), jsxRuntime.jsxs("div", { className: ModelEditor_module.panelContent, children: [jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Enable" }), jsxRuntime.jsx("input", { type: "checkbox", checked: fogEnabled, onChange: () => setFogEnabled((v) => !v) })] }), fogEnabled && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Color" }), jsxRuntime.jsx("div", { className: ModelEditor_module.propColorSwatch, style: { background: fogColor }, children: jsxRuntime.jsx("input", { type: "color", value: fogColor, onChange: (e) => setFogColor(e.target.value) }) })] }), jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Near" }), jsxRuntime.jsx("input", { className: ModelEditor_module.propInput, type: "number", value: fogNear, onChange: (e) => setFogNear(parseFloat(e.target.value)), style: { width: 60 } })] }), jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Far" }), jsxRuntime.jsx("input", { className: ModelEditor_module.propInput, type: "number", value: fogFar, onChange: (e) => setFogFar(parseFloat(e.target.value)), style: { width: 60 } })] })] }))] })] }), jsxRuntime.jsxs("div", { className: ModelEditor_module.panelSection, children: [jsxRuntime.jsx("div", { className: ModelEditor_module.panelTitle, children: "\uD83D\uDD06 Scene Lights" }), jsxRuntime.jsxs("div", { className: ModelEditor_module.panelContent, children: [jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Show Helpers" }), jsxRuntime.jsx("input", { type: "checkbox", checked: showLightHelpers, onChange: () => setShowLightHelpers((v) => !v) })] }), jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Grid" }), jsxRuntime.jsx("input", { type: "checkbox", checked: showGrid, onChange: () => setShowGrid((v) => !v) })] }), jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Axes" }), jsxRuntime.jsx("input", { type: "checkbox", checked: showAxes, onChange: () => setShowAxes((v) => !v) })] }), jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Skeleton" }), jsxRuntime.jsx("input", { type: "checkbox", checked: showSkeleton, onChange: () => setShowSkeleton((v) => !v) })] })] })] }), jsxRuntime.jsxs("div", { className: ModelEditor_module.panelSection, children: [jsxRuntime.jsx("div", { className: ModelEditor_module.panelTitle, children: "\uD83E\uDDF2 Snapping" }), jsxRuntime.jsxs("div", { className: ModelEditor_module.panelContent, children: [jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Snap" }), jsxRuntime.jsx("input", { type: "checkbox", checked: snapEnabled, onChange: () => setSnapEnabled((v) => !v) })] }), snapEnabled && (jsxRuntime.jsxs("div", { className: ModelEditor_module.propRow, children: [jsxRuntime.jsx("span", { className: ModelEditor_module.propLabel, children: "Grid Size" }), jsxRuntime.jsx("input", { className: ModelEditor_module.propInput, type: "number", step: 0.25, min: 0.1, value: snapGrid, onChange: (e) => setSnapGrid(parseFloat(e.target.value) || 1), style: { width: 60 } })] }))] })] })] })), propTab === "modifiers" && (jsxRuntime.jsxs("div", { className: ModelEditor_module.panelSection, children: [jsxRuntime.jsx("div", { className: ModelEditor_module.panelTitle, children: "\uD83D\uDD29 Modifiers" }), jsxRuntime.jsx("div", { className: ModelEditor_module.panelContent, children: selectedNode && selectedNode.object instanceof THREE__namespace.Mesh ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("button", { className: ModelEditor_module.btnSecondary, style: { width: "100%", marginBottom: 4 }, onClick: () => {
67
+ const mesh = selectedNode.object;
68
+ const geo = mesh.geometry;
69
+ const pos = geo.attributes.position;
70
+ if (pos) {
71
+ const wireGeo = new THREE__namespace.WireframeGeometry(geo);
72
+ mesh.geometry = wireGeo;
73
+ setStatusText("Applied Wireframe modifier");
74
+ rebuildTree();
75
+ }
76
+ }, children: "+ Wireframe Modifier" }), jsxRuntime.jsx("button", { className: ModelEditor_module.btnSecondary, style: { width: "100%", marginBottom: 4 }, onClick: () => {
77
+ const mesh = selectedNode.object;
78
+ mesh.geometry.computeVertexNormals();
79
+ setStatusText("Recomputed normals");
80
+ }, children: "Recompute Normals" }), jsxRuntime.jsx("button", { className: ModelEditor_module.btnSecondary, style: { width: "100%", marginBottom: 4 }, onClick: () => {
81
+ const mesh = selectedNode.object;
82
+ const geo = mesh.geometry;
83
+ geo.center();
84
+ setStatusText("Centered geometry");
85
+ setMatRefresh((n) => n + 1);
86
+ }, children: "Center Geometry" }), jsxRuntime.jsx("button", { className: ModelEditor_module.btnSecondary, style: { width: "100%", marginBottom: 4 }, onClick: () => {
87
+ const mesh = selectedNode.object;
88
+ const geo = mesh.geometry;
89
+ const idx = geo.index;
90
+ if (idx) {
91
+ const arr = idx.array;
92
+ for (let i = 0; i < arr.length; i += 3) {
93
+ const tmp = arr[i];
94
+ arr[i] = arr[i + 2];
95
+ arr[i + 2] = tmp;
96
+ }
97
+ idx.needsUpdate = true;
98
+ geo.computeVertexNormals();
99
+ setStatusText("Flipped normals");
100
+ }
101
+ }, children: "Flip Normals" })] })) : (jsxRuntime.jsx("div", { style: { color: "#666", fontSize: 10 }, children: "Select a mesh to apply modifiers" })) })] })), propTab === "physics" && (jsxRuntime.jsxs("div", { className: ModelEditor_module.panelSection, children: [jsxRuntime.jsx("div", { className: ModelEditor_module.panelTitle, children: "\u26A1 Physics (Info)" }), jsxRuntime.jsx("div", { className: ModelEditor_module.panelContent, children: jsxRuntime.jsxs("div", { style: { color: "#666", fontSize: 10, lineHeight: 1.5 }, children: ["Physics simulation preview is not yet available.", jsxRuntime.jsx("br", {}), jsxRuntime.jsx("br", {}), "Planned features:", jsxRuntime.jsx("br", {}), "\u2022 Rigid body simulation", jsxRuntime.jsx("br", {}), "\u2022 Soft body dynamics", jsxRuntime.jsx("br", {}), "\u2022 Cloth simulation", jsxRuntime.jsx("br", {}), "\u2022 Particle systems"] }) })] }))] }));
102
+ });
103
+ ModelEditorRightPanel.displayName = "ModelEditorRightPanel";
104
+
105
+ module.exports = ModelEditorRightPanel;
106
+ //# sourceMappingURL=ModelEditorRightPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelEditorRightPanel.js","sources":["../../../src/model/ModelEditorRightPanel.tsx"],"sourcesContent":[null],"names":["_jsxs","styles","_jsx","_Fragment","Vec3Row","Vec3RowDeg","THREE","DEG","MaterialCard"],"mappings":"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"}