Skip to content

feat(ui): redesign phase 1 — tokens, app shell, header stepper, status bar - #26

Merged
provos merged 2 commits into
mainfrom
feat/redesign-shell
Sep 26, 2026
Merged

provos merged 2 commits into
mainfrom
feat/redesign-shell

Conversation

@provos

@provos provos commented Sep 26, 2026

Copy link
Copy Markdown
Owner

Phase 1 of the UI redesign from the Claude Design handoff (docs/redesign/HANDOFF.md, §12 step 1). The handoff docs are included in this PR.

What changes

  • Visual system:
    • New tokens from docs/redesign/tokens.css: dark-first, with light mode via data-theme on <html>.
    • IBM Plex Sans and Mono bundled locally (Latin subset, no font CDN); Lucide icons.
    • The dashed panel borders are removed.
    • Buttons follow the design's primary/secondary/ghost/selected roles; amber is reserved for the one main action.
  • Layout (AppShell):
    • Header, canvas column, Inspector, optional log drawer and status bar.
    • The window still never scrolls; each column scrolls inside itself.
  • AppHeader: logo and project name, the 7-step WorkflowStepper, undo/redo for the selected slice, theme toggle, Settings, and Export… as the primary action.
  • WorkflowStepper:
    • Image → Depth → Slices → Inpaint → Ground → Preview → Export, each shown as done, current or todo.
    • "Done" comes from the project where it can; Inpaint, Preview and Export are tracked for the session.
    • Clicking a step switches the Inspector.
  • Inspector:
    • Each step shows one of the old tab bodies for now, until later phases give it its own panel.
    • Settings shows the Configuration panel.
    • The Inspector is 440px wide for now; it narrows to the design's 328px once its panels are rebuilt.
  • StatusBar / LogDrawer:
    • The status bar shows the running job with progress, the latest message (red for errors), the image size, and a Log · N toggle.
    • The drawer holds the whole log, not just the last three lines.
  • Behavior:
    • A new upload keeps the theme on screen; restoring a project still applies its saved theme.
    • After an upload's depth map is ready, the app moves to Slices (HANDOFF §4).

Tests

  • New Shell.test.ts covers stepper states and navigation, Settings toggling, Export enablement, header undo, status bar and log drawer.
  • App and workflow tests updated for data-theme, the dark default, the new project inheriting the theme, and the move to Slices.
  • e2e: the driver maps the old tabs onto steps and Settings.
  • e2e: the shared waitForImage helper now waits for a decoded image instead of an on-screen one, because the depth map now lives in a panel that isn't always showing.
  • Results: vitest 174 passed, svelte-check 0 errors / 0 warnings, e2e 46/46.
  • Screenshots checked at 1440×900 and 1280×800 in dark and light on the lighthouse project.

Next: phase 2, the LayerPanel with DepthRuler.

🤖 Generated with Claude Code

…s bar

First step of the Claude Design handoff (docs/redesign/HANDOFF.md §12):

- New design tokens (dark-first, light via data-theme on <html>) with IBM
  Plex bundled locally and Lucide icons; the dashed Dash-era panels are
  gone and buttons follow the primary/secondary/ghost/selected system.
- AppShell: header, canvas column, Inspector, log drawer, status bar.
- AppHeader with the 7-step WorkflowStepper (done/current/todo), undo/redo
  for the selected slice, theme, Settings and the primary Export action.
- Inspector hosts the pre-redesign tab bodies per step until each step
  gets its own panel; Settings shows the Configuration panel.
- StatusBar: running job + progress, latest message, image size, log
  toggle. LogDrawer holds the whole log.
- New projects take on the theme on screen; after an upload's depth map
  is ready the workflow moves to Slices.
- e2e driver maps the former tabs onto steps/Settings; image waits no
  longer require the image to be on screen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings September 26, 2026 06:17

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Session workflow completion state can become incorrect across project uploads and navigateCamera() can mark Preview as done even without an active project.

Review effort: Lite
Findings: 2 Medium severity

Open (2)
What changed in this PR

Implements phase 1 of the Svelte UI redesign by introducing a new token-based visual system and a new app shell (header stepper + inspector + status/log), while temporarily reusing the pre-redesign tab bodies inside the new Inspector.

Changes:

  • Introduces new redesign layout components (AppShell, AppHeader, WorkflowStepper, Inspector, StatusBar, LogDrawer) and removes the old header/tabs/footer/log panel shell.
  • Updates workflow + UI state for step navigation, dark-first theming via data-theme, and session-tracked workflow completion flags.
  • Updates unit tests and Playwright e2e helpers/driver to match the new shell and behavior (including depth completion advancing to Slices).
File Description
frontend/​src/​lib/​workflow.ts Preserves theme on new project upload, advances to Slices after depth, and marks session workflow completion (preview/inpaint/export).
frontend/​src/​lib/​workflow.test.ts Updates workflow tests for new UI store reset behavior and post-depth step advancement.
frontend/​src/​lib/​state/​ui.svelte.ts Adds workflow step state, session completion flags, log drawer state, and dark-first default theme.
frontend/​src/​lib/​state/​logs.svelte.ts Removes last3 helper and updates comments for the new log drawer.
frontend/​src/​lib/​components/​shell/​WorkflowStepper.svelte Adds the 7-step workflow stepper UI and “done/current/todo” states.
frontend/​src/​lib/​components/​shell/​StatusBar.svelte Adds the redesigned status bar with latest message, image size, and log toggle.
frontend/​src/​lib/​components/​shell/​Shell.test.ts Adds tests covering the new shell: stepper navigation, settings/export behavior, undo, and log drawer/status bar.
frontend/​src/​lib/​components/​shell/​MainTabs.svelte Removes the legacy workflow tab strip component.
frontend/​src/​lib/​components/​shell/​LogPanel.svelte Removes the legacy 3-line log panel component.
frontend/​src/​lib/​components/​shell/​LogDrawer.svelte Adds a scrollable full log drawer that stays mounted for e2e visibility.
frontend/​src/​lib/​components/​shell/​Inspector.svelte Adds the new Inspector column hosting the legacy tab bodies per-step.
frontend/​src/​lib/​components/​shell/​Header.svelte Removes the legacy header component.
frontend/​src/​lib/​components/​shell/​Footer.svelte Removes the legacy footer component.
frontend/​src/​lib/​components/​shell/​AppShell.svelte Adds the new top-level app layout shell (header/main/log drawer/status).
frontend/​src/​lib/​components/​shell/​AppHeader.svelte Adds redesigned header actions and integrates the workflow stepper.
frontend/​src/​lib/​components/​shell/​ActivityIndicator.svelte Refactors activity indicator markup/styles to match new header/status usage.
frontend/​src/​App.test.ts Updates app tests for the new shell structure and data-theme behavior.
frontend/​src/​App.svelte Switches to AppShell and applies theme via <html data-theme=…>.
frontend/​src/​app.css Replaces legacy palette with redesign tokens, typography, and component utility styles.
frontend/​package.json Adds local IBM Plex font packages and Lucide Svelte icons.
frontend/​package-lock.json Lockfile updates for added font/icon dependencies.
e2e/​helpers/​image.ts Updates waitForImage to wait for decode without requiring on-screen visibility.
e2e/​drivers/​svelte.ts Remaps driver “tabs” to redesigned stepper/settings and updates theme assertion.
docs/​redesign/​tokens.css Adds design-token source file for the redesign.
docs/​redesign/​prototype/​Prototype.dc.html Adds the design-canvas prototype source used as implementation reference.
docs/​redesign/​HANDOFF.md Adds the redesign implementation handoff document and phase plan.
Files not reviewed (1)
  • frontend/package-lock.json: Generated file

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +43 to 48
let view = await api.createProject(file);
projectId = view.id;
// A new project keeps the theme the user is already looking at.
const dark = uiStore.theme === 'dark';
if (view.settings.darkMode !== dark) view = await api.updateSettings(view.id, { darkMode: dark });
projectStore.applyView(view);

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed: a new upload now calls uiStore.resetSession(), which clears the Inpaint/Preview/Export progress and returns to the Image step. Restoring a project clears the progress too. A test covers it.

Comment on lines 292 to 295
export async function navigateCamera(direction: api.CameraDirection): Promise<void> {
uiStore.markPreviewed();
await runSliceMutation('navigate', (id) => api.navigateCamera(id, direction));
}

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed: runSliceMutation now reports success, and navigateCamera marks Preview only after a successful move. With no project, or when the call fails, Preview isn't marked. A test covers it.

…on a real move

- A new upload clears this session's Inpaint/Preview/Export progress and
  starts over at the Image step; restoring a project clears the progress.
- navigateCamera marks Preview done only after a successful camera move
  (runSliceMutation now reports success).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@provos
provos merged commit 24cc8f1 into main Sep 26, 2026
1 check passed
@provos
provos deleted the feat/redesign-shell branch September 26, 2026 06:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants