Pen & pencil tools, unified vector editing, sidebar polish

- Pen/pencil tools (Phases A-E): left tool palette, contextual options
  panel, freehand pencil strokes, Bézier pen paths, anchor/handle editing,
  per-layer hidden flag with eye toggle in the layer list.
- Unified vector editing: the pen panel edits any selected shape's
  fill/stroke; a "Make editable path" action converts primitives and
  single-path SVGs into editable pen paths (SVG d-string parser + arcs).
- Stroke no longer clips at the shape's bounding box (overflow:visible).
- Toolbars anchored outside the scroll area so they stay locked on screen.
- Keyboard shortcuts: Delete, arrow-nudge, [/], Ctrl+D, Ctrl+C/X/V.
- Collapsible sidebar panels, collapsed by default (Layout stays open);
  selecting a layer auto-opens the Layers panel.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
This commit is contained in:
thePR0M3TH3ANandClaude Opus 4.7 committed 2026-05-20 10:32:28 -04:00
1 parent ee0052847e
commit 16c1577af4
2 files changed
+1141 -97

No files matched your search

+25
View File
@@ -17,6 +17,31 @@ tool-mode system with flanking toolbars to host it.
contextual options toolbar, styled to match the existing bottom zoom
toolbar.
### Implementation status — 2026-05-19
- **Phase A** — done. `_editorTool` UI state, left tool palette, right
contextual options toolbar, pen overlay element, V/P/B + Esc shortcuts.
- **Phase B** — done. Pencil freehand capture, raw polyline, open-path
shape-layer commit.
- **Phase C** — done. Pen click/drag anchors, rubber-band preview, close /
Enter / dbl-click / Esc, closed-fill-on-close, `shape.pen.nodes` stored.
- **Phase D** — partial. Editable anchors + Bézier handles for selected
`tool:'pen'` paths; drag-to-move anchor (carries handles) and drag-to-move
handle, regenerates `d`, one undo per drag. *Deferred:* add/delete anchor,
corner↔smooth toggle, click-segment-to-insert, and bbox-refit when an
anchor is dragged past the original 0–100 viewBox (path clips at the box
edge until refit lands). Rotated paths are not node-editable in v1.
- **Phase E** — done. `layer.hidden` flag, eye toggle in the layer list, all
six renderers + Canvas2D export skip hidden layers.
- **Unified vector editing** — done. With the Pen tool active, the options
panel edits the *selected* shape's fill/stroke (any kind, not just pen
paths). A **"Make editable path"** button converts a selected primitive
(rect / rounded-rect / circle / ellipse / triangle / polygon / star /
line) or single-path uploaded SVG into a `tool:'pen'` editable path, after
which Phase D anchor editing applies. Primitives convert via exact node
generators; SVG `d` strings are parsed (M/L/H/V/C/S/Q/T/Z + elliptical
arcs, abs & rel). *Not convertible:* multi-element SVGs and compound
(multi-subpath) paths — the panel shows a hint instead.
### Non-goals (v1)
- A raster paint layer (true pixel buffers). Explicitly out of scope — the
app's design-as-JSON model and Nostr-friendliness depend on storing
+1116 -97
View File
File diff suppressed because it is too large. Load diff