Skip to content

feat(image-editor): PixelForge shell — menu bar, options bar, full PS tool list, tabbed panels#37

Merged
lyfuci merged 1 commit intomainfrom
feat/image-editor-pixelforge-shell
Apr 24, 2026
Merged

feat(image-editor): PixelForge shell — menu bar, options bar, full PS tool list, tabbed panels#37
lyfuci merged 1 commit intomainfrom
feat/image-editor-pixelforge-shell

Conversation

@lyfuci
Copy link
Copy Markdown
Owner

@lyfuci lyfuci commented Apr 24, 2026

Summary

Reshells the image editor around the PixelForge handoff design (claude.ai
Design). The drawing/state engine is unchanged; everything new is the
visual + structural layer that wraps it.

Shell

  • CSS grid layout (`.pf-shell`) — 4 rows × 3 cols: menu / options /
    (tools | canvas | right) / status. Tokens scoped to `.pf-root` so
    PixelForge styling can't leak into the rest of the toolbox.
  • MenuBar — File / Edit / Image / Layer / View dropdowns; all items
    wired to existing handlers (open, save, undo / redo, rotate, flip,
    duplicate / delete layer, zoom, focus). File menu gets per-format
    export (PNG / JPEG / WebP).
  • OptionsBar — context-sensitive per active tool: brush/eraser show
    stroke + color, shape tools show stroke + color, crop shows the
    Enter/Esc hint plus a Clear-crop button when a crop is applied. Stub
    tools render an honest "placeholder" hint.
  • ToolsPalette — full 18-tool PS-aligned list, grouped (Selection /
    Painting / Vector+Type / Annotation / Navigation). FG/BG color swatches
    • X / D ⇄ ▣ swap/reset live at the bottom of the rail.
  • RightSidebar — three stacked panel groups with tab strips:
    Layers / Channels / Paths · Properties / Info · Adjustments / Navigator.
    Channels / Paths / Info / Navigator render a "coming soon" stub so the
    panel surface is complete without lying about functionality.
  • StatusBar — denser, PixelForge-styled, surfaces the current tool +
    document dimensions + zoom.

Tools

Functional (work end-to-end): Move (V), Crop (C), Eyedropper (I),
Brush (B), Eraser (E), Type (T), Rectangle / Ellipse / Line / Arrow,
Mask, Mosaic, Zoom (Z).

Stub (palette + tooltip + shortcut, but the tool action shows a
toast and leaves state unchanged): Marquee (M), Lasso (L), Magic Wand
(W), Spot Healing (J), Clone Stamp (S), History Brush (Y), Gradient /
Paint Bucket (G), Dodge (O), Pen (P), Hand (H). These need either a
selection model (marquee/lasso/wand), a flood-fill primitive (bucket),
or a vector-path layer (pen) — substantial follow-up PRs.

Cleanup

  • Dropped the old `TopActionBar` (its actions are now in the menu bar).
  • `STUB_TOOLS` lives in `tool-meta.ts` so `ToolsPalette.tsx` only exports
    components (react-refresh requirement).

Branched from `main` (not stacked).

Test plan

  • Open an image — shell renders with menu bar, options bar, tool rail, canvas, panels, status bar.
  • Click each menu — File/Edit/Image/Layer/View dropdowns open; ESC closes.
  • File > Export as PNG / JPEG / WebP — each downloads with the correct extension and MIME.
  • Click Brush — options bar shows stroke + color; drawing works.
  • Click Crop, drag a rect, press Enter — crop applies; the options bar shows "Clear crop" when a crop is active.
  • Click a stub tool (Lasso, Wand, Pen, etc.) — toast appears, no tool change.
  • Press M / L / W / J / S / Y / G / O / P / H — toast appears for each.
  • Press B / E / T / I / C / Z / V — tool actually switches.
  • Right column tabs (Layers / Channels / Paths) switch; Channels / Paths show stub copy.
  • Same for Properties / Info and Adjustments / Navigator groups.
  • Save .json project → reload → state survives.

🤖 Generated with Claude Code

… tool list, tabbed panels

Reshells the image editor around the PixelForge handoff design (claude.ai
Design). The drawing/state engine is unchanged; everything new is the
visual + structural layer that wraps it.

## What changed

- **CSS grid layout** (`.pf-shell`) — 4 rows × 3 cols: menu / options /
  (tools | canvas | right) / status. Tokens scoped to `.pf-root` so
  PixelForge styling can't leak into the rest of the toolbox.
- **MenuBar** — File / Edit / Image / Layer / View with dropdowns; all
  items wired to existing handlers (open, save, undo, redo, rotate, flip,
  duplicate / delete layer, zoom, focus). File menu has per-format export
  (PNG / JPEG / WebP).
- **OptionsBar** — context-sensitive per active tool: brush/eraser show
  stroke + color, shape tools show stroke + color, crop shows the
  Enter/Esc hint + a Clear-crop button when a crop is applied, others
  show informative hints. Stub tools render a placeholder hint.
- **ToolsPalette** — full 18-tool PS-aligned list, grouped (Selection /
  Painting / Vector+Type / Annotation / Navigation). FG/BG color swatches
  and X / D ⇄ ▣ swap/reset controls live at the bottom of the rail.
- **RightSidebar** — three stacked panel groups with tab strips:
  Layers / Channels / Paths · Properties / Info · Adjustments / Navigator.
  Channels / Paths / Info / Navigator render a "coming soon" stub so the
  panel surface is complete without lying about functionality.
- **StatusBar** — denser, PixelForge-styled, surfaces the current tool +
  document dimensions + zoom.

## Tools

Functional (work end-to-end): Move (V), Crop (C), Eyedropper (I), Brush
(B), Eraser (E), Type (T), Rectangle / Ellipse / Line / Arrow shapes,
Mask, Mosaic, Zoom (Z).

Stub (palette + tooltip + shortcut, but tool action shows a toast):
Marquee (M), Lasso (L), Magic Wand (W), Spot Healing (J), Clone Stamp
(S), History Brush (Y), Gradient / Paint Bucket (G), Dodge (O), Pen (P),
Hand (H). These need either a selection model (marquee/lasso/wand), a
flood-fill primitive (bucket), or a vector-path layer (pen) — substantial
follow-up PRs.

## Cleanup

- Dropped the old `TopActionBar` (its actions are now in the menu bar).
- `STUB_TOOLS` lives in `tool-meta.ts` so `ToolsPalette.tsx` only exports
  components (react-refresh requirement).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@lyfuci lyfuci merged commit 89ec914 into main Apr 24, 2026
2 checks passed
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.

1 participant