diff --git a/src/viewport-three/ViewportPanel.tsx b/src/viewport-three/ViewportPanel.tsx new file mode 100644 index 00000000..34c387a7 --- /dev/null +++ b/src/viewport-three/ViewportPanel.tsx @@ -0,0 +1,138 @@ +import { ViewportCanvas } from "./ViewportCanvas"; +import { + getViewportDisplayModeLabel, + getViewportLayoutModeLabel, + getViewportPanelLabel, + type ViewportDisplayMode, + type ViewportLayoutMode, + type ViewportPanelId, + type ViewportPanelState +} from "./viewport-layout"; +import { VIEWPORT_VIEW_MODES, getViewportViewModeLabel, type ViewportViewMode } from "./viewport-view-modes"; +import type { LoadedModelAsset } from "../assets/gltf-model-import"; +import type { LoadedImageAsset } from "../assets/image-assets"; +import type { ProjectAssetRecord } from "../assets/project-assets"; +import type { EditorSelection } from "../core/selection"; +import type { ToolMode } from "../core/tool-mode"; +import type { Vec3 } from "../core/vector"; +import type { SceneDocument } from "../document/scene-document"; +import type { WorldSettings } from "../document/world-settings"; + +interface ViewportPanelProps { + panelId: ViewportPanelId; + panelState: ViewportPanelState; + layoutMode: ViewportLayoutMode; + isActive: boolean; + world: WorldSettings; + sceneDocument: SceneDocument; + projectAssets: Record; + loadedModelAssets: Record; + loadedImageAssets: Record; + selection: EditorSelection; + toolMode: ToolMode; + focusRequestId: number; + focusSelection: EditorSelection; + onActivatePanel(panelId: ViewportPanelId): void; + onSetPanelViewMode(panelId: ViewportPanelId, viewMode: ViewportViewMode): void; + onSetPanelDisplayMode(panelId: ViewportPanelId, displayMode: ViewportDisplayMode): void; + onSelectionChange(selection: EditorSelection): void; + onCreateBoxBrush(center: Vec3): void; +} + +export function ViewportPanel({ + panelId, + panelState, + layoutMode, + isActive, + world, + sceneDocument, + projectAssets, + loadedModelAssets, + loadedImageAssets, + selection, + toolMode, + focusRequestId, + focusSelection, + onActivatePanel, + onSetPanelViewMode, + onSetPanelDisplayMode, + onSelectionChange, + onCreateBoxBrush +}: ViewportPanelProps) { + const shouldShow = layoutMode === "quad" || isActive; + + return ( +
onActivatePanel(panelId)} + onFocusCapture={() => onActivatePanel(panelId)} + > +
+
+
+
{getViewportPanelLabel(panelId)}
+ {isActive ?
Active
: null} +
+
+ {getViewportViewModeLabel(panelState.viewMode)} {getViewportDisplayModeLabel(panelState.displayMode)} +
+
+ +
+
+ {VIEWPORT_VIEW_MODES.map((viewMode) => ( + + ))} +
+ +
+ {(["normal", "authoring"] as const).map((displayMode) => ( + + ))} +
+
+
+ + +
+ ); +} +