FEATURE 3 — Secondary "Tools" toolbar on Generate page
As a user editing a mesh on the Generate page, I want a dedicated tools
toolbar below the main one, grouping the transform actions (Transform, Move,
Rotate, Scale), so the editing tools are visually separated from the
file/processing actions (Import, Export, Smooth, Decimate).
Context
The Generate page currently has a single header bar (GeneratePage.tsx:427)
mixing file actions, mesh processing, and lighting. As transform tools are
added, they deserve their own row to keep the UI readable.
Scope
- New horizontal toolbar rendered directly below the existing header bar
(between the header div at GeneratePage.tsx:427 and the viewer area).
- Visible only when a mesh is loaded (
hasModel), like the processing buttons.
- Contains the transform tool group:
- Transform — opens the numeric transform panel (recenter / scale /
rotate / ground).
- Move (position) · Rotate · Scale — activate the corresponding
interactive gizmo mode.
- Active tool is visually highlighted (same active state as existing buttons).
- Visual style consistent with the main toolbar (same button classes:
rounded-lg, bg-zinc-800, border-zinc-700/50, violet active state).
Implementation
src/areas/generate/GeneratePage.tsx:
- Add a second toolbar row after the header bar
div (line 427), e.g.
<div className="flex items-center gap-2 px-3 py-1.5 border-b border-zinc-800 bg-surface-400 shrink-0">, gated on
hasModel.
- Extract toolbar buttons into a small reusable component to avoid
duplicating the existing button markup.
- Wire each tool button to its state/handler (Transform →
openPanel
panel; Move/Rotate/Scale → gizmoMode state shared with the viewer).
- No backend changes.
Dependencies
- Ties into the interactive transform gizmo ticket (Move/Rotate/Scale share its
gizmoMode state) and the numeric transform ticket (Transform panel). The
toolbar shell can ship first with buttons wired to placeholder handlers.
Acceptance criteria
Estimate: S
FEATURE 3 — Secondary "Tools" toolbar on Generate page
As a user editing a mesh on the Generate page, I want a dedicated tools
toolbar below the main one, grouping the transform actions (Transform, Move,
Rotate, Scale), so the editing tools are visually separated from the
file/processing actions (Import, Export, Smooth, Decimate).
Context
The Generate page currently has a single header bar (
GeneratePage.tsx:427)mixing file actions, mesh processing, and lighting. As transform tools are
added, they deserve their own row to keep the UI readable.
Scope
(between the header
divatGeneratePage.tsx:427and the viewer area).hasModel), like the processing buttons.rotate / ground).
interactive gizmo mode.
rounded-lg,bg-zinc-800,border-zinc-700/50, violet active state).Implementation
src/areas/generate/GeneratePage.tsx:div(line 427), e.g.<div className="flex items-center gap-2 px-3 py-1.5 border-b border-zinc-800 bg-surface-400 shrink-0">, gated onhasModel.duplicating the existing button markup.
openPanelpanel; Move/Rotate/Scale →
gizmoModestate shared with the viewer).Dependencies
gizmoModestate) and the numeric transform ticket (Transform panel). Thetoolbar shell can ship first with buttons wired to placeholder handlers.
Acceptance criteria
consistently with the main toolbar.
Estimate: S