mirror of
https://github.com/storytold/figcraft.git
synced 2026-10-26 03:16:53 -06:00
The last three catalogued menu items got commands: File > Open recent (recent files kept in preferences, capped, missing files greyed and dropped when picked, Clear recent), outlines for the selected layers only, and mask outlines. Menu breadth 100%.
97 lines
5.7 KiB
Markdown
97 lines
5.7 KiB
Markdown
# UI and interaction parity
|
||
|
||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-11 · **Change:** minor (outlines for the selection, mask outlines; arc fields, live boolean editing, shape builder on strokes, one-sided widths) · **Target:** Figma Design UI3 (desktop app 126.10.7)
|
||
|
||
Fine canvas control is what Figma users feel first: handles, snapping, nudging, modifier keys,
|
||
drag behaviour, numeric precision. This checklist covers the tools, gestures and panels. Status:
|
||
**done** (built and checked against Figma's documented behaviour or by eye), **partial**, **missing**.
|
||
Nothing here has been compared tool by tool against the running Figma yet; that pass is the main
|
||
remaining work (40–60 h, [gaps](gaps.md) #4).
|
||
|
||
**Summary (estimated):** UI/UX fidelity ~58%. Layout and look of UI3 compared side by side (~65%);
|
||
interaction feel not yet compared.
|
||
|
||
## Window and panels
|
||
|
||
| Item | Status | Notes |
|
||
|---|---|---|
|
||
| UI3 layout: tab strip as title bar, icon rail, file header, pages + layers, floating bottom toolbar with flyouts, Design / Prototype / Inspect panels | done | frameless window on Windows/Linux with drawn buttons |
|
||
| Light and dark themes | done | colours from `theme::Tokens` |
|
||
| Minimize UI (Cmd+\\) | done | |
|
||
| Resizable panels | partial | check widths and snap points against Figma |
|
||
| Actions palette (Cmd+K, Cmd+/) | done | commands; no assets search parity |
|
||
| Context menus | done | canvas and layers; keyboard access to the layers context menu missing |
|
||
| Main menu from the logo | done | generated from `catalog.rs`; popups sized to content |
|
||
| Keyboard shortcuts panel | done | docked, tabbed by group, searchable, per-platform keycaps |
|
||
| Multiplayer avatars, Share button | missing | waits for multiplayer |
|
||
|
||
## Selection and transform
|
||
|
||
| Item | Status | Notes |
|
||
|---|---|---|
|
||
| Click, Shift-click, marquee, Shift-marquee toggle | done | |
|
||
| Deep select (Cmd/Ctrl-click, Cmd/Ctrl-marquee) | done | |
|
||
| Select layer menu (every layer under the click) | done | |
|
||
| Enter / Shift+Enter (children / parent), Tab / Shift+Tab (siblings) | done | Tab renames the next layer while renaming |
|
||
| Resize handles: Shift keeps proportions, Alt from centre, constraints-aware | done | |
|
||
| Rotate just outside a corner; Shift in 15° steps | done | rotated handle box when layers share a rotation |
|
||
| Flip, rotate 90° | done | |
|
||
| Alt-drag duplicate | done | |
|
||
| Scale tool (K): handles about an anchor, live factor, panel | done | |
|
||
| Nudge 1 / Shift 10 (preference), Cmd+arrows resize | done | arrows reorder auto layout children |
|
||
| Smart guides: edges, centres, spacing labels, parent, layout grid, ruler guides | done | red, `snap.rs`; thresholds not yet compared with Figma's |
|
||
| Ctrl to suspend snapping while dragging (macOS) | missing | |
|
||
| Measure (Alt hover, Cmd+Alt nested, Shift+Alt padding/gaps) | done | labels never overlap |
|
||
| Pixel grid snapping, pixel preview, 2x preview | done | |
|
||
| Numeric fields: arithmetic, scrubbing by dragging the label, mixed values | partial | check scrub speed and Shift/Alt steps |
|
||
| Keyboard box selection | missing | |
|
||
|
||
## Tools
|
||
|
||
| Tool | Status | Notes |
|
||
|---|---|---|
|
||
| Move, hand (Space), zoom (hold Z, Alt out, drag area) | done | |
|
||
| Frame (presets panel, swap orientation), section, slice | done | |
|
||
| Rectangle, ellipse (arc handles and Design panel arc fields), polygon, star, line, arrow; Shift/Alt | done | |
|
||
| Pen: vector networks, branch, close, bend; pencil | done | no pen pressure |
|
||
| Vector edit mode: bend, paint bucket, lasso, cut, eraser, transform box, point snapping, mirroring | done | |
|
||
| Shape builder (Shift+M) on fills, strokes and open paths; variable width (Shift+W), one side with Alt | done | |
|
||
| Boolean groups: double-click or Cmd/Ctrl-click into operands, live results while dragging or editing points, per-operand operations | done | hit-tested by the operands, not the result |
|
||
| Text: point, auto height, fixed; caret, words, lines, IME | done | no spell check |
|
||
| Eyedropper (I) | done | |
|
||
| Comment (C), Shift+C to show/hide | done | local only |
|
||
| Brushes, text on a path (Figma Draw) | missing | |
|
||
| Image crop handles | done | |
|
||
|
||
## Canvas
|
||
|
||
| Item | Status | Notes |
|
||
|---|---|---|
|
||
| Pan/zoom: wheel, pinch, Space-drag, Shift+0/1/2, Cmd+0, `+`/`-` | done | |
|
||
| Rulers and guides (drag out, move, remove; rotated frames; frame guides) | done | |
|
||
| Frame labels (rotated, right-to-left), size badge | done | |
|
||
| Outline mode | done | Outlines, outlines for the selection, mask outlines |
|
||
| Layout grids (Ctrl+G) | done | |
|
||
| Gradient and padding/gap handles on the canvas | done | |
|
||
| Hover outline, selection colours, handle sizes | done | measured from UI3 screenshots |
|
||
| Cursors per tool and modifier | partial | not compared |
|
||
| Multiplayer cursors, cursor chat, spotlight | missing | |
|
||
|
||
## Accessibility (ours vs Figma's)
|
||
|
||
| Item | Status | Notes |
|
||
|---|---|---|
|
||
| Screen-reader names, roles, values, states (AccessKit) | done on desktop | browser: eframe doesn't send the tree yet |
|
||
| Keyboard navigation: F6 regions, Tab within, focus ring | done | |
|
||
| Reduced motion | done | system setting or preference |
|
||
| WCAG AA contrast of secondary and accent text | done | |
|
||
| Tested with VoiceOver, NVDA, Narrator, Orca | missing | human QA |
|
||
|
||
## Revision history
|
||
|
||
| Date | Change | Summary |
|
||
|---|---|---|
|
||
| 2026-10-11 | minor | Outline mode done: outlines for the selection (the selected layers draw as outlines, the rest normally) and mask outlines |
|
||
| 2026-10-11 | minor | Design panel arc fields, live boolean editing (operands on the canvas, live results, per-operand operations), shape builder on strokes and open paths, one-sided widths (Alt-drag a width handle) |
|
||
| 2026-10-10 | major | Created from the ROADMAP's look-and-feel and interaction items, the keymap and the canvas code |
|