restore content editor launcher entrypoint
This commit is contained in:
parent
e79bc2e339
commit
656f4562c1
5 changed files with 113 additions and 0 deletions
75
docs/refactor/arc-1-smoke-checklist.md
Normal file
75
docs/refactor/arc-1-smoke-checklist.md
Normal file
|
|
@ -0,0 +1,75 @@
|
||||||
|
# Arc 1 Smoke Checklist
|
||||||
|
|
||||||
|
This checklist is the manual checkpoint for Arc 1.
|
||||||
|
|
||||||
|
It is intentionally short and focused on the editor flows that must remain usable while the refactor branch is in motion.
|
||||||
|
|
||||||
|
## Preconditions
|
||||||
|
|
||||||
|
- start the Vite client with `npm run dev`
|
||||||
|
- start the API server with `npm run dev:api`
|
||||||
|
- open the launcher at the local dev URL
|
||||||
|
|
||||||
|
## Checklist
|
||||||
|
|
||||||
|
### 1. Launcher Opens
|
||||||
|
|
||||||
|
- verify the launcher renders
|
||||||
|
- verify the primary launch actions are visible
|
||||||
|
- verify the `Content Editor` action is available
|
||||||
|
|
||||||
|
### 2. Content Editor Loads
|
||||||
|
|
||||||
|
- open the content editor from the launcher
|
||||||
|
- verify the content editor window loads
|
||||||
|
- verify the main content domains are listed:
|
||||||
|
- NPCs
|
||||||
|
- Dialogues
|
||||||
|
- Monsters
|
||||||
|
- Items
|
||||||
|
- Abilities
|
||||||
|
- Loot Tables
|
||||||
|
- Quests
|
||||||
|
- Graphics
|
||||||
|
- Factions
|
||||||
|
|
||||||
|
### 3. Content Record Edit Round Trip
|
||||||
|
|
||||||
|
- open any existing content record
|
||||||
|
- change one small field value
|
||||||
|
- use `Commit`
|
||||||
|
- use `Save`
|
||||||
|
- verify the save status updates
|
||||||
|
- revert the field to its original value
|
||||||
|
- save again so the repository returns to its original content state
|
||||||
|
|
||||||
|
### 4. Studio Window Opens
|
||||||
|
|
||||||
|
- open the studio from the launcher
|
||||||
|
- verify the studio bootstraps into a world without console-blocking errors
|
||||||
|
|
||||||
|
### 5. World Loads And A Tile Edit Still Works
|
||||||
|
|
||||||
|
- verify the current world name and dimensions are visible
|
||||||
|
- select a tile
|
||||||
|
- paint one tile on the map
|
||||||
|
- verify undo/save state updates
|
||||||
|
- save the world
|
||||||
|
- revert the tile change before finishing the checkpoint
|
||||||
|
|
||||||
|
### 6. Graphics Painter Opens And Saves
|
||||||
|
|
||||||
|
- open the graphics browser from the studio
|
||||||
|
- open a sprite or tile asset in the painter
|
||||||
|
- change one pixel
|
||||||
|
- save the asset
|
||||||
|
- revert the pixel change before finishing the checkpoint
|
||||||
|
|
||||||
|
## Verification Notes
|
||||||
|
|
||||||
|
Checkpoint commits for Arc 1 should only be considered shareable when:
|
||||||
|
|
||||||
|
- `npm test` passes
|
||||||
|
- `npm run build` passes
|
||||||
|
- this checklist passes
|
||||||
|
- temporary smoke-test content edits have been reverted before commit
|
||||||
|
|
@ -683,6 +683,16 @@ function openSharedContractNote(): void {
|
||||||
window.location.assign(noteUrl.toString());
|
window.location.assign(noteUrl.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function openContentEditor(): void {
|
||||||
|
const editorUrl = new URL("./worldshaper-content.html", window.location.href);
|
||||||
|
const popup = window.open(editorUrl.toString(), "worldshaper-content-editor", "popup=yes,width=1600,height=980,resizable=yes,scrollbars=yes");
|
||||||
|
if (popup) {
|
||||||
|
popup.focus();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
window.location.assign(editorUrl.toString());
|
||||||
|
}
|
||||||
|
|
||||||
function openAdminPanelWindow(): boolean {
|
function openAdminPanelWindow(): boolean {
|
||||||
const nextUrl = new URL(window.location.href);
|
const nextUrl = new URL(window.location.href);
|
||||||
nextUrl.searchParams.set("admin", "requests");
|
nextUrl.searchParams.set("admin", "requests");
|
||||||
|
|
@ -1364,6 +1374,9 @@ function WorldshaperLauncher() {
|
||||||
<button type="button" className="launcher-primary-btn" onClick={() => void handleLaunch()} disabled={isBusy}>
|
<button type="button" className="launcher-primary-btn" onClick={() => void handleLaunch()} disabled={isBusy}>
|
||||||
Launch
|
Launch
|
||||||
</button>
|
</button>
|
||||||
|
<button type="button" className="launcher-secondary-btn" onClick={openContentEditor} disabled={isBusy}>
|
||||||
|
Content Editor
|
||||||
|
</button>
|
||||||
<button type="button" className="launcher-secondary-btn" onClick={openSharedContractNote} disabled={isBusy}>
|
<button type="button" className="launcher-secondary-btn" onClick={openSharedContractNote} disabled={isBusy}>
|
||||||
Shared Contract
|
Shared Contract
|
||||||
</button>
|
</button>
|
||||||
|
|
|
||||||
11
src/contentMain.tsx
Normal file
11
src/contentMain.tsx
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
import { StrictMode } from "react";
|
||||||
|
import { createRoot } from "react-dom/client";
|
||||||
|
import "./index.css";
|
||||||
|
import "./App.css";
|
||||||
|
import App from "./App";
|
||||||
|
|
||||||
|
createRoot(document.getElementById("root")!).render(
|
||||||
|
<StrictMode>
|
||||||
|
<App />
|
||||||
|
</StrictMode>,
|
||||||
|
);
|
||||||
|
|
@ -28,6 +28,7 @@ export default defineConfig({
|
||||||
rollupOptions: {
|
rollupOptions: {
|
||||||
input: {
|
input: {
|
||||||
main: resolve(__dirname, "index.html"),
|
main: resolve(__dirname, "index.html"),
|
||||||
|
worldshaperContent: resolve(__dirname, "worldshaper-content.html"),
|
||||||
futureSharedContract: resolve(__dirname, "Future - Shared Contract.html"),
|
futureSharedContract: resolve(__dirname, "Future - Shared Contract.html"),
|
||||||
worldshaperStudio: resolve(__dirname, "worldshaper-studio.html"),
|
worldshaperStudio: resolve(__dirname, "worldshaper-studio.html"),
|
||||||
worldshaperHeightViewer: resolve(__dirname, "worldshaper-height-viewer.html"),
|
worldshaperHeightViewer: resolve(__dirname, "worldshaper-height-viewer.html"),
|
||||||
|
|
|
||||||
13
worldshaper-content.html
Normal file
13
worldshaper-content.html
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Worldshaper Content Editor</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="root"></div>
|
||||||
|
<script type="module" src="/src/contentMain.tsx"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue