From efb706a0f3c6148563b4c8cdcb5a43daa6192e89 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Tue, 31 Mar 2026 01:30:33 +0200 Subject: [PATCH] auto-git: [change] src/app/App.tsx [change] src/app/editor-store.ts [change] src/document/migrate-scene-document.ts [change] src/document/scene-document.ts [change] src/viewport-three/ViewportCanvas.tsx [change] src/viewport-three/viewport-host.ts --- src/app/App.tsx | 7 ++++--- src/app/editor-store.ts | 1 + src/document/migrate-scene-document.ts | 10 +++++++++- src/document/scene-document.ts | 4 +++- src/viewport-three/ViewportCanvas.tsx | 3 ++- src/viewport-three/viewport-host.ts | 3 +-- 6 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/app/App.tsx b/src/app/App.tsx index 9445068f..ffda017a 100644 --- a/src/app/App.tsx +++ b/src/app/App.tsx @@ -1,6 +1,7 @@ -import { useEffect, useRef, useState } from "react"; +import { useEffect, useRef, useState, type ChangeEvent } from "react"; import { createSetSceneNameCommand } from "../commands/set-scene-name-command"; +import type { EditorSelection } from "../core/selection"; import { Panel } from "../shared-ui/Panel"; import { ViewportCanvas } from "../viewport-three/ViewportCanvas"; import type { EditorStore } from "./editor-store"; @@ -10,7 +11,7 @@ interface AppProps { store: EditorStore; } -function describeSelection(selectionKind: string): string { +function describeSelection(selectionKind: EditorSelection["kind"]): string { switch (selectionKind) { case "none": return "No authored selection yet"; @@ -87,7 +88,7 @@ export function App({ store }: AppProps) { importInputRef.current?.click(); }; - const handleImportChange = async (event: React.ChangeEvent) => { + const handleImportChange = async (event: ChangeEvent) => { const file = event.currentTarget.files?.[0]; if (file === undefined) { diff --git a/src/app/editor-store.ts b/src/app/editor-store.ts index 86135c7b..e588819d 100644 --- a/src/app/editor-store.ts +++ b/src/app/editor-store.ts @@ -123,6 +123,7 @@ export class EditorStore { replaceDocument(document: SceneDocument, resetHistory = true) { this.document = document; this.selection = { kind: "none" }; + this.toolMode = "select"; if (resetHistory) { this.history.clear(); diff --git a/src/document/migrate-scene-document.ts b/src/document/migrate-scene-document.ts index 8e09228c..35c69f04 100644 --- a/src/document/migrate-scene-document.ts +++ b/src/document/migrate-scene-document.ts @@ -30,6 +30,14 @@ function expectHexColor(value: unknown, label: string): string { return normalizedValue; } +function expectLiteralString(value: unknown, expectedValue: T, label: string): T { + if (value !== expectedValue) { + throw new Error(`${label} must be ${expectedValue}.`); + } + + return expectedValue; +} + function expectEmptyCollection(value: unknown, label: string): Record { if (!isRecord(value)) { throw new Error(`${label} must be a record.`); @@ -71,7 +79,7 @@ function readWorldSettings(value: unknown): WorldSettings { return { background: { - mode: "solid", + mode: expectLiteralString(background.mode, "solid", "world.background.mode"), colorHex: expectHexColor(background.colorHex, "world.background.colorHex") }, ambientLight: { diff --git a/src/document/scene-document.ts b/src/document/scene-document.ts index b1944af5..f5026f12 100644 --- a/src/document/scene-document.ts +++ b/src/document/scene-document.ts @@ -50,7 +50,9 @@ export function createDefaultWorldSettings(): WorldSettings { sunLight: { colorHex: "#fff1d5", intensity: 1.75, - direction: DEFAULT_SUN_DIRECTION + direction: { + ...DEFAULT_SUN_DIRECTION + } } }; } diff --git a/src/viewport-three/ViewportCanvas.tsx b/src/viewport-three/ViewportCanvas.tsx index 557200db..a1425316 100644 --- a/src/viewport-three/ViewportCanvas.tsx +++ b/src/viewport-three/ViewportCanvas.tsx @@ -21,7 +21,8 @@ export function ViewportCanvas({ world }: ViewportCanvasProps) { const viewportHost = new ViewportHost(); hostRef.current = viewportHost; - viewportHost.mount(container, world); + viewportHost.mount(container); + viewportHost.updateWorld(world); return () => { viewportHost.dispose(); diff --git a/src/viewport-three/viewport-host.ts b/src/viewport-three/viewport-host.ts index d8a21396..74a17625 100644 --- a/src/viewport-three/viewport-host.ts +++ b/src/viewport-three/viewport-host.ts @@ -36,10 +36,9 @@ export class ViewportHost { this.renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2)); } - mount(container: HTMLElement, world: WorldSettings) { + mount(container: HTMLElement) { this.container = container; container.appendChild(this.renderer.domElement); - this.updateWorld(world); this.resize(); this.resizeObserver = new ResizeObserver(() => {