openpencil/tests/e2e
Danila Poyarkov 4faccd047d
feat(canvas): select auto layout frames by their gaps and dot their children, as in Figma (#943)
* fix: select top-level auto layout frames by their empty area

Checked against Figma desktop 126 with real pointer input. The gaps and
padding of a top-level frame with auto layout (any direction or grid,
filled or not, on the page or in a section) select, highlight, and drag
the frame, while clicks on its layers still select those layers. A plain
top-level frame's empty area stays background, as #900 recorded; its
oracle scenarios only used frames without auto layout.

Auto layout frames are hit by their bounds even without a fill, and a
press on such a frame's empty area no longer starts a marquee.

* feat(canvas): outline auto layout children with dotted lines, as in Figma

Hovering a horizontal or vertical auto layout frame outlines its visible
direct children, and a single selected layer dots the border of its auto
layout parent, in the container's outline color. Grid and plain frames,
grandchildren, and multi-selections show none. Line weight and dash were
measured from Figma 126 screenshots: 1 px with 1.75 px dashes and 1.25 px
gaps in screen space.

The editor gains a transforming flag that canvas input sets while layers
move, resize, or rotate; the outlines and the padding and gap markers of a
selected auto layout frame hide while it is set, as Figma's do.

The children outline a selected auto layout frame drew under the pointer
now uses the same stroke, and the dash effect is freed after each draw.

* fix(canvas): select unfilled frames by their empty area only on a click

Live Figma 126, with real pointer input on a top-level card holding an
unfilled auto layout row and an unfilled plain frame, with and without
auto layout on the card: a click on either frame's empty area selects
that frame, while a ⌘-click looks through it to the card.

Only top-level auto layout frames now own their empty area in hit
testing, so a deep hit no longer stops at a nested unfilled auto layout
frame. A click that ends on an open container selects the frame child
under the point by its bounds, filled or not, which plain frames did not
get before; boards that open by themselves keep their empty area as
background.

* fix(canvas): select an empty unfilled frame on the page by its bounds

Live Figma 126: a click inside an empty frame without a fill selects it,
on the page and in a section. The section case already did after the
previous commit; on the page the click found nothing, since an unfilled
frame without children is not hit. A click that hits nothing now looks
for a frame under the point among the scope's children, which skips
boards that hold layers, as their empty area stays background.

* refactor(scene-graph): read the containers the selection opens in their own helper

* fix(canvas): open a selected container, so repeated clicks reach deeper layers

In Figma, clicking again at the same point inside a selected frame,
component, or instance selects the layer under the pointer, so repeated
clicks walk down to a text in a nested component such as shadcn's
calendar. The click hit test opened only the ancestors of the selection,
so a selected nested container stopped the walk at itself and only a
double-click went deeper.

A selected container with layers now opens like its ancestors; groups
and booleans stay closed, as in Figma. Pressing inside the selection
still drags it, and its empty area keeps it selected.
2026-10-07 11:29:52 +00:00
..
app test: type the tabs module in the closed-documents spec (#917) 2026-10-05 18:55:49 +00:00
brand feat: refresh branding with generated platform icons (#707) 2026-09-16 11:54:07 +03:00
canvas feat(canvas): select auto layout frames by their gaps and dot their children, as in Figma (#943) 2026-10-07 11:29:52 +00:00
chat feat(collab): show MCP agents, follow streamed JSX, and follow your agents as they work (#725) 2026-10-07 10:04:58 +00:00
clipboard fix: match Figma's transforms, strokes, booleans, sections, and names (#931) 2026-10-07 08:36:50 +00:00
code feat(lint): suggest group-to-frame and hidden-layer fixes; keep canvas edits in code previews (#870) 2026-10-04 12:46:06 +00:00
collab feat(collab): show MCP agents, follow streamed JSX, and follow your agents as they work (#725) 2026-10-07 10:04:58 +00:00
color-picker test: typecheck the test suites and fix what that found (#896) 2026-10-05 12:42:38 +00:00
components feat: behaviours and preview mode (#893) 2026-10-06 13:23:05 +00:00
context-menu feat: create, fill, and edit slots (#862) 2026-10-04 17:02:28 +00:00
design perf(properties): retain inactive panels safely 2026-09-15 17:01:44 +03:00
design-check test: typecheck the test suites and fix what that found (#896) 2026-10-05 12:42:38 +00:00
dom-css feat: write variables as a CSS token stylesheet (#856) 2026-10-04 18:15:52 +00:00
editor fix: match Figma's transforms, strokes, booleans, sections, and names (#931) 2026-10-07 08:36:50 +00:00
export test: typecheck the test suites and fix what that found (#896) 2026-10-05 12:42:38 +00:00
fonts test: typecheck the test suites and fix what that found (#896) 2026-10-05 12:42:38 +00:00
keyboard feat: create, fill, and edit slots (#862) 2026-10-04 17:02:28 +00:00
layers fix: match Figma's transforms, strokes, booleans, sections, and names (#931) 2026-10-07 08:36:50 +00:00
native feat(ai): add guided AI setup for providers, coding agents, and Pi (#916) 2026-10-07 08:46:57 +00:00
pages fix: match Figma's panel X, Y, rotation and themed page backgrounds (#940) 2026-10-07 10:02:52 +00:00
panels feat(vue): add responsive property grids 2026-07-26 12:42:50 +03:00
perf test: typecheck the test suites and fix what that found (#896) 2026-10-05 12:42:38 +00:00
properties feat: create, fill, and edit slots (#862) 2026-10-04 17:02:28 +00:00
scene test: honor the configured browser test origin 2026-09-16 12:46:13 +03:00
settings fix(ai): polish chat history and stabilize chat tests (#923) 2026-10-07 09:53:05 +00:00
snap test(snapping): verify pixel rounding without guides 2026-09-13 14:02:16 +03:00
storage refactor(ui): compose shared editor controls (#670) 2026-09-10 12:09:06 +03:00
storybook feat(desktop): show updates in a Software Update window (#936) 2026-10-06 14:57:31 +00:00
stroke-picker fix: match Figma's transforms, strokes, booleans, sections, and names (#931) 2026-10-07 08:36:50 +00:00
text test: typecheck the test suites and fix what that found (#896) 2026-10-05 12:42:38 +00:00
toolbar test: typecheck the test suites and fix what that found (#896) 2026-10-05 12:42:38 +00:00
tools test: typecheck the test suites and fix what that found (#896) 2026-10-05 12:42:38 +00:00
ui test(ui): keep runtime theme import dependency-safe 2026-07-20 14:07:32 +03:00
variables feat: let a collection name the attribute its modes switch by (#913) 2026-10-06 12:35:41 +00:00
vectorize feat(app): convert image layers to vectors 2026-07-27 16:22:05 +03:00
viewport test(e2e): hide rulers in visual regression snapshots 2026-05-16 15:36:37 +03:00
autosave.spec.ts test: typecheck the test suites and fix what that found (#896) 2026-10-05 12:42:38 +00:00
components.spec.ts feat: create, fill, and edit slots (#862) 2026-10-04 17:02:28 +00:00
fixtures.ts test(app): stabilize final interaction coverage 2026-07-20 16:34:16 +03:00
recovery.spec.ts fix: protect unsaved documents and defer credential access (#713) 2026-09-17 15:25:15 +03:00