From e19cc72ad5ac2059595e2b2935f2760c404c889c Mon Sep 17 00:00:00 2001 From: Tom Boullay Date: Tue, 28 Apr 2026 10:08:17 +0200 Subject: [PATCH] tyle: refresh editor controls with monochrome UI --- package-lock.json | 28 +- package.json | 1 + .../editor/components/EditorControls.tsx | 283 ++++++---- src/features/editor/scene/EditorMap.tsx | 10 +- src/index.css | 505 ++++++++++++------ src/pages/editor/EditorPage.tsx | 2 +- 6 files changed, 547 insertions(+), 282 deletions(-) diff --git a/package-lock.json b/package-lock.json index d86843e..1481516 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "@react-three/rapier": "^2.2.0", "gsap": "^3.15.0", "lil-gui": "^0.21.0", + "lucide-react": "^1.11.0", "r3f-perf": "^7.2.3", "react": "^19.2.4", "react-dom": "^19.2.4", @@ -36,6 +37,9 @@ "typescript": "~6.0.2", "typescript-eslint": "^8.58.0", "vite": "^8.0.4" + }, + "engines": { + "node": ">=20.19.0 || >=22.12.0" } }, "node_modules/@babel/code-frame": { @@ -2362,12 +2366,6 @@ "integrity": "sha512-dMW4CWBTUK1AEEDeZc1g4xpPGIrSf9fJF960qbTZmN/QwZIWY5wgliS6JWl9/25fpTGJrMRtSjGtOmPnfjZB+A==", "license": "Standard 'no charge' license: https://gsap.com/standard-license." }, - "node_modules/gsap": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.15.0.tgz", - "integrity": "sha512-dMW4CWBTUK1AEEDeZc1g4xpPGIrSf9fJF960qbTZmN/QwZIWY5wgliS6JWl9/25fpTGJrMRtSjGtOmPnfjZB+A==", - "license": "Standard 'no charge' license: https://gsap.com/standard-license." - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2922,6 +2920,15 @@ "yallist": "^3.0.2" } }, + "node_modules/lucide-react": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.11.0.tgz", + "integrity": "sha512-UOhjdztXCgdBReRcIhsvz2siIBogfv/lhJEIViCpLt924dO+GDms9T7DNoucI23s6kEPpe988m5N0D2ajnzb2g==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/maath": { "version": "0.10.8", "resolved": "https://registry.npmjs.org/maath/-/maath-0.10.8.tgz", @@ -3159,15 +3166,6 @@ "three": ">= 0.168.0 < 0.185.0" } }, - "node_modules/postprocessing": { - "version": "6.39.1", - "resolved": "https://registry.npmjs.org/postprocessing/-/postprocessing-6.39.1.tgz", - "integrity": "sha512-R2dG2zy+BAx3USl5EHw+PvnrlbT5PKnZVp3se0HCR0pWH8WQdh742yNG4YWOsq6c0bFpffk0Gd2RqPeoP/wKng==", - "license": "Zlib", - "peerDependencies": { - "three": ">= 0.168.0 < 0.185.0" - } - }, "node_modules/potpack": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", diff --git a/package.json b/package.json index 8d53429..9e1cef4 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "@react-three/rapier": "^2.2.0", "gsap": "^3.15.0", "lil-gui": "^0.21.0", + "lucide-react": "^1.11.0", "r3f-perf": "^7.2.3", "react": "^19.2.4", "react-dom": "^19.2.4", diff --git a/src/features/editor/components/EditorControls.tsx b/src/features/editor/components/EditorControls.tsx index 01e6a73..de7ee84 100644 --- a/src/features/editor/components/EditorControls.tsx +++ b/src/features/editor/components/EditorControls.tsx @@ -1,3 +1,16 @@ +import { + Box, + Download, + Expand, + Keyboard, + Lock, + MousePointer2, + Move3D, + Redo2, + RotateCw, + Save, + Undo2, +} from "lucide-react"; import type { TransformMode } from "@/types/editor"; interface EditorControlsProps { @@ -32,108 +45,192 @@ export function EditorControls({ isPlayerMode, }: EditorControlsProps): React.JSX.Element { const cameraPosition = [0, 50, 100]; + const viewModeLabel = isPlayerMode ? "View locked" : "Lock view"; return ( <>
-
Camera Position:
-
X: {cameraPosition[0]!.toFixed(2)}
-
Y: {cameraPosition[1]!.toFixed(2)}
-
Z: {cameraPosition[2]!.toFixed(2)}
+ Camera + + X {cameraPosition[0]!.toFixed(0)} ยท Y {cameraPosition[1]!.toFixed(0)}{" "} + ยท Z {cameraPosition[2]!.toFixed(0)} +
-
-

Transform

+ ); } diff --git a/src/features/editor/scene/EditorMap.tsx b/src/features/editor/scene/EditorMap.tsx index 4054806..c60fbb5 100644 --- a/src/features/editor/scene/EditorMap.tsx +++ b/src/features/editor/scene/EditorMap.tsx @@ -70,10 +70,10 @@ export function EditorMap({ args={[100, 100]} cellSize={1} cellThickness={0.5} - cellColor="#444444" + cellColor="#242424" sectionSize={5} sectionThickness={1} - sectionColor="#666666" + sectionColor="#3a3a3a" fadeDistance={50} fadeStrength={1} followCamera={false} @@ -199,10 +199,10 @@ function EditorModelNode({ ) { if (isSelected) { mesh.material = mesh.material.clone(); - (mesh.material as THREE.MeshStandardMaterial).color.set("#ff6600"); + (mesh.material as THREE.MeshStandardMaterial).color.set("#ffffff"); } else if (isHovered) { mesh.material = mesh.material.clone(); - (mesh.material as THREE.MeshStandardMaterial).color.set("#ff9900"); + (mesh.material as THREE.MeshStandardMaterial).color.set("#b8b8b8"); } } } @@ -281,7 +281,7 @@ function EditorFallbackNode({ } }, [node.position, node.rotation, node.scale]); - const color = isSelected ? "#ff6600" : isHovered ? "#ff9900" : "#cccccc"; + const color = isSelected ? "#ffffff" : isHovered ? "#b8b8b8" : "#6f6f6f"; return ( { - gl.setClearColor("#1e293b"); + gl.setClearColor("#050505"); }} >