Skip to content

feat(ui): redesign phase 5 — Inpaint, Ground and Preview panels - #30

Merged
provos merged 1 commit into
mainfrom
feat/redesign-panels
Sep 26, 2026
Merged

provos merged 1 commit into
mainfrom
feat/redesign-panels

Conversation

@provos

@provos provos commented Sep 26, 2026

Copy link
Copy Markdown
Owner

Phase 5 of the Claude Design handoff (docs/redesign/HANDOFF.md §3, §4, §12).

  • InpaintPanel (replaces InpaintingTab): Fill holes / Extend edges mode switch (Extend disabled, badged PLANNED), numbered sub-steps, prompts, strength/guidance, crop to ROI, Generate (primary until candidates exist), Fill/Enhance/Erase, 3-across candidate grid, Apply (primary once candidates exist). Entering the Inpaint step with nothing selected selects the farthest slice.
  • GroundPanel: ground slice radio list with "No ground plane", Fit ground, horizon/pitch readout, ground distance, scene side view. Fit ground moved out of the Slices panel; the ground toggle stays there.
  • PreviewPanel: Parallax 2D / 3D switch plus camera distance, max distance and focal length.
  • Export panel: mesh displacement, depth of field, Create scene / Download glTF, Upscale textures, animation. The camera draft and coalescing commit moved into a shared cameraDraft store used by all three panels.
  • The Horizon tool's options bar offers Fit ground once a ground slice exists.
  • e2e driver: setSlider / fitGround reveal the step panel holding the control; scenarios unchanged.

All existing test ids are kept. ExportDialog/SettingsDialog, toasts, job cards and cancel come in phase 6.

Tests: vitest 289 passing, svelte-check clean, e2e 46/46 locally.

🤖 Generated with Claude Code

- InpaintPanel: Fill holes / Extend edges (planned) mode switch, numbered
  sub-steps, Generate primary until candidates exist and Apply after, a
  3-across candidate grid; entering Inpaint with no selection selects the
  farthest slice.
- GroundPanel: ground slice radio list (+ No ground plane), Fit ground,
  horizon/pitch readout, ground distance and the scene side view.
- PreviewPanel: Parallax 2D / 3D switch and the camera sliders.
- Export panel keeps mesh displacement, depth of field, glTF, upscale and
  animation; camera edits go through a shared coalescing cameraDraft store.
- Horizon options bar offers Fit ground once a ground slice exists.
- e2e driver reveals the step panel that holds a slider or Fit ground.

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

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

🟢 Approval recommended

The redesign refactor appears coherent with updated unit/e2e coverage, and the remaining feedback is limited to non-blocking accessibility/maintainability tweaks.

Review effort: Lite
Findings: 1 Medium severity · 1 Low severity

Open (2)
What changed in this PR

This PR implements Phase 5 of the redesign handoff by splitting the Inspector into dedicated step panels (Inpaint, Ground, Preview, Export) and centralizing shared camera/displacement draft state so the new panels can edit settings without request races.

Changes:

  • Replaces the old Inpainting tab with a new step-based InpaintPanel (mode switch, sub-steps, candidate grid, primary button behavior, auto-select farthest slice on entry).
  • Introduces GroundPanel and PreviewPanel, moves “Fit ground” out of Segmentation, and exposes “Fit ground” in the Horizon tool options once a ground slice exists.
  • Adds a shared cameraDraftStore plus CameraSlider component, and updates Export/Preview/Ground panels and tests to use the coalesced settings commits.
File Description
frontend/​src/​lib/​workflow.ts Adds setGroundSlice() helper to support GroundPanel ground selection UX.
frontend/​src/​lib/​state/​ui.svelte.ts Adds Ground/Preview tabs and maps workflow steps to the new panels.
frontend/​src/​lib/​state/​ui.svelte.test.ts Updates expectations for the new Ground/Preview step-to-panel mapping.
frontend/​src/​lib/​state/​canvas.svelte.ts Updates docs/comments to reference InpaintPanel.
frontend/​src/​lib/​state/​cameraDraft.svelte.ts New shared camera/displacement/ground draft store with coalesced commits.
frontend/​src/​lib/​state/​cameraDraft.svelte.test.ts New unit tests for draft syncing, commit coalescing, and clamping behavior.
frontend/​src/​lib/​components/​shell/​Shell.test.ts Updates step-to-panel assertions for Ground/Preview panels.
frontend/​src/​lib/​components/​shell/​Inspector.svelte Mounts new InpaintPanel, GroundPanel, and PreviewPanel.
frontend/​src/​lib/​components/​shared/​CameraSlider.svelte New slider component that edits cameraDraftStore and commits on change.
frontend/​src/​lib/​components/​segmentation/​SegmentPanel.svelte Removes “Fit ground” control from Segmentation panel.
frontend/​src/​lib/​components/​segmentation/​SegmentPanel.test.ts Updates ground-plane tests to reflect Fit Ground relocation.
frontend/​src/​lib/​components/​preview/​PreviewPanel.svelte New Preview step panel with 2D/3D switch and camera sliders.
frontend/​src/​lib/​components/​preview/​PreviewPanel.test.ts New tests for preview radios and camera slider persistence/commit behavior.
frontend/​src/​lib/​components/​inpainting/​InpaintPanel.svelte New Inpaint step panel with sub-steps, prompts, candidates, and apply flow.
frontend/​src/​lib/​components/​inpainting/​InpaintPanel.test.ts Updates/expands inpaint panel tests for new UX rules and step-entry behavior.
frontend/​src/​lib/​components/​inpainting/​InpaintingTab.svelte Removes the legacy Inpainting tab implementation.
frontend/​src/​lib/​components/​ground/​GroundPanel.svelte New Ground step panel (ground slice selection, Fit ground, horizon/distance, side view).
frontend/​src/​lib/​components/​ground/​GroundPanel.test.ts New tests for ground selection, Fit ground behavior, and ground distance commits.
frontend/​src/​lib/​components/​export/​ExportTab.svelte Refactors Export panel to use cameraDraftStore and focus on export-specific controls.
frontend/​src/​lib/​components/​export/​ExportTab.test.ts Adjusts export tests for shared camera draft and new displacement commit path.
frontend/​src/​lib/​components/​canvas/​ToolOptionsBar.svelte Adds “Fit ground” button for Horizon tool when a ground slice exists.
frontend/​src/​lib/​components/​canvas/​ToolOptionsBar.test.ts Tests conditional “Fit ground” visibility/enabled state for Horizon tool.
e2e/​drivers/​svelte.ts Updates driver to reveal the correct step panel for sliders / Fit ground before interacting.

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

Comment on lines +277 to +286
<img
data-testid="candidate-image"
alt={`inpainting candidate ${index + 1}`}
src={candidate.url}
role="option"
tabindex="0"
aria-selected={selectedCandidate === index}
class:selected={selectedCandidate === index}
onclick={() => selectCandidate(index)}
/>
// Entering the Inpaint step with nothing selected selects the farthest
// slice (HANDOFF §4) - once per entry, so clearing the selection while
// here is left alone.
let previousStep: string | null = null;
@provos
provos merged commit cb015b3 into main Sep 26, 2026
2 checks passed
@provos
provos deleted the feat/redesign-panels branch September 26, 2026 15:30
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