@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.
- package/CHANGELOG.md +25 -0
- package/LICENSE +21 -0
- package/README.md +90 -0
- package/dist/cjs/core/i18n.js +16 -0
- package/dist/cjs/core/i18n.js.map +1 -0
- package/dist/cjs/index.js +11 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/model/ModelEditor.js +33 -0
- package/dist/cjs/model/ModelEditor.js.map +1 -0
- package/dist/cjs/model/ModelEditor.module.css.js +6 -0
- package/dist/cjs/model/ModelEditor.module.css.js.map +1 -0
- package/dist/cjs/model/ModelEditorLeftPanel.js +40 -0
- package/dist/cjs/model/ModelEditorLeftPanel.js.map +1 -0
- package/dist/cjs/model/ModelEditorMenuBar.js +14 -0
- package/dist/cjs/model/ModelEditorMenuBar.js.map +1 -0
- package/dist/cjs/model/ModelEditorRightPanel.js +106 -0
- package/dist/cjs/model/ModelEditorRightPanel.js.map +1 -0
- package/dist/cjs/model/ModelEditorSubComponents.js +99 -0
- package/dist/cjs/model/ModelEditorSubComponents.js.map +1 -0
- package/dist/cjs/model/ModelEditorTimeline.js +31 -0
- package/dist/cjs/model/ModelEditorTimeline.js.map +1 -0
- package/dist/cjs/model/ModelEditorToolbar.js +14 -0
- package/dist/cjs/model/ModelEditorToolbar.js.map +1 -0
- package/dist/cjs/model/ModelEditorViewport.js +20 -0
- package/dist/cjs/model/ModelEditorViewport.js.map +1 -0
- package/dist/cjs/model/modelEditorTypes.js +122 -0
- package/dist/cjs/model/modelEditorTypes.js.map +1 -0
- package/dist/cjs/model/useModelEditor.js +1581 -0
- package/dist/cjs/model/useModelEditor.js.map +1 -0
- package/dist/cjs/nice2dev-ui-3d.css +1 -0
- package/dist/esm/core/i18n.js +13 -0
- package/dist/esm/core/i18n.js.map +1 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/model/ModelEditor.js +31 -0
- package/dist/esm/model/ModelEditor.js.map +1 -0
- package/dist/esm/model/ModelEditor.module.css.js +4 -0
- package/dist/esm/model/ModelEditor.module.css.js.map +1 -0
- package/dist/esm/model/ModelEditorLeftPanel.js +38 -0
- package/dist/esm/model/ModelEditorLeftPanel.js.map +1 -0
- package/dist/esm/model/ModelEditorMenuBar.js +12 -0
- package/dist/esm/model/ModelEditorMenuBar.js.map +1 -0
- package/dist/esm/model/ModelEditorRightPanel.js +85 -0
- package/dist/esm/model/ModelEditorRightPanel.js.map +1 -0
- package/dist/esm/model/ModelEditorSubComponents.js +76 -0
- package/dist/esm/model/ModelEditorSubComponents.js.map +1 -0
- package/dist/esm/model/ModelEditorTimeline.js +29 -0
- package/dist/esm/model/ModelEditorTimeline.js.map +1 -0
- package/dist/esm/model/ModelEditorToolbar.js +12 -0
- package/dist/esm/model/ModelEditorToolbar.js.map +1 -0
- package/dist/esm/model/ModelEditorViewport.js +18 -0
- package/dist/esm/model/ModelEditorViewport.js.map +1 -0
- package/dist/esm/model/modelEditorTypes.js +97 -0
- package/dist/esm/model/modelEditorTypes.js.map +1 -0
- package/dist/esm/model/useModelEditor.js +1560 -0
- package/dist/esm/model/useModelEditor.js.map +1 -0
- package/dist/esm/nice2dev-ui-3d.css +1 -0
- package/dist/types/core/i18n.d.ts +27 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/model/ModelEditor.d.ts +17 -0
- package/dist/types/model/ModelEditorLeftPanel.d.ts +10 -0
- package/dist/types/model/ModelEditorMenuBar.d.ts +11 -0
- package/dist/types/model/ModelEditorRightPanel.d.ts +11 -0
- package/dist/types/model/ModelEditorSubComponents.d.ts +24 -0
- package/dist/types/model/ModelEditorTimeline.d.ts +11 -0
- package/dist/types/model/ModelEditorToolbar.d.ts +11 -0
- package/dist/types/model/ModelEditorViewport.d.ts +11 -0
- package/dist/types/model/modelEditorTypes.d.ts +52 -0
- package/dist/types/model/useModelEditor.d.ts +125 -0
- 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
|
+
[](https://www.npmjs.com/package/@nice2dev/ui-3d)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
[](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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"}
|