mirror of
https://github.com/storytold/figcraft.git
synced 2026-10-24 10:27:00 -06:00
A behaviour suite for the layers panel and the Assets panel written from the public documentation (table rows with one-line derivations; rows the documentation is silent on say so and pin today's behaviour), and the fixes it found. - Engine suite `crates/engine/src/panels_behaviour_tests.rs` (6 tests, about 50 rows): reordering and moving layers into frames, groups and auto layout, refused drops, renaming several layers, show/hide and lock rules, pages and dividers, Assets folders, hidden-from-publishing names, drops. - Panel suite `crates/ui-egui/src/layers_behaviour_tests.rs` (5 tests, driven through egui headless): click / Shift range / Cmd-Ctrl toggle, Alt-click expand, Collapse layers, sweeping across eyes and padlocks, the Rename layers dialog, dragging pages, dividers. Fixes: - Several layers dropped together in the layers panel land together at the drop point (layers from apart split around it before). - Collapse layers (Alt+L) keeps the rows leading to the selection open (it closed everything). - The eye and padlock no longer vanish when the pointer reaches them (the row lost its hover to them, so clicks could miss); dragging across eyes or padlocks sets every row passed in one undo step. Layers inside a locked frame show a faint padlock. - Several layers selected + Cmd/Ctrl+R / F2 / Rename open a Rename layers dialog (Match, Rename to, Current name / Number up / Number down buttons, start value, preview) instead of renaming the top row only. - `object.batchRename`: `$n` counts up and `$N` down (they were swapped), `$nnn` pads, `start` sets where numbers start/stop, `regex: true` matches a regular expression with `$1`..`$9`, `` $` `` and `$'`, and codes work in the replacement too. Returns the new names. - Pages: dragged up and down the list to reorder; a blank page named with a leading hyphen is a divider (drawn as a line, never opened, holds no layers); duplicates are named "Copy of ..."; the last page that isn't a divider can't be deleted. `page.list` reports `divider`. - Assets panel: components filed in folders by page, the frames holding them and the slash parts of their names (folders fold away; open while searching), tiles show the last name part; `component.list` gives each component's `folder` and `label` for agents. - Publishing: a leading `.` or `_` keeps a component (style, collection) out of a library even after it was published, and removing the prefix brings it back (the previous publish's choice won before). The engine gains the `regex` crate (already in the lock file through env_logger) for the documented regular-expression matching.