Layout (crates/layout):
- Fill children take their size before the frame is sized, so wrapping fill
text, frames that hug it and grid rows settle in a single pass (three
levels deep included).
- Fill children share space like CSS flexbox: min and max violations are
resolved in turn instead of freezing both at once.
- A single child with space-between sits at the start; a wrapped row of only
fill-height children keeps their height; grids size fill-width children
before their rows.
- coherent_sizing: Fill only in an auto layout flow on an axis the parent
doesn't hug, Hug only on auto layout frames and text (a text hugs what its
resize mode grows); anything else becomes Fixed at its size.
Engine:
- Setting a child to Fill turns a hugging parent Fixed on that axis; a parent
that starts to hug, layers leaving auto layout and layout.remove fix the
rest (applied in normalize).
- Moving layers: the deepest auto layout frame under the pointer wins (plain
frames in a flow are items, not destinations; the dragged layers and their
descendants are skipped); the frame they come from keeps them near its
edge. They take the slot (or grid cell) there with the insertion line drawn
in the gap and the receiving frame outlined; out of auto layout they become
positioned children of the canvas or plain frame at the drop point. One
undo step per drag. Slots skip hidden and absolute children.
Tests: crates/layout/src/nested_tests.rs, crates/engine/src/al_nesting_tests.rs.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
- Min/max width/height: the W/H sizing menus add min/max (at the current size) and remove them;
limit rows edit or add the missing bound. The layout clamps Fixed, Hug and Fill children and
the frame itself; a hugging text wider than its max width wraps at the max. min > max is kept
ordered by node.set (the other bound follows); in the layout min wins.
- Ignore auto layout (absolute position): a toggle in the Position section; the child stays
where it is, can't Fill, shows constraints and follows them when the auto layout frame resizes
(by hugging, filling or a direct resize).
- Text baseline alignment for horizontal layouts ("Align text baselines"; crossAlign baseline):
first-line baselines line up, other layers align to the top, nested auto layout frames use
their first child's baseline. Measure gains text_baseline.
- Grid auto layout: column/row tracks (fixed px, hug, fr fill) via columnTracks / rowTracks or
layout.setTrack, cells anchored by gridColumn / gridRow with gridColumnSpan / gridRowSpan,
auto placement in reading order, rows grow to fit, hugging grids size to their tracks.
Panel: column/row gap, track size rows, a child's cell and spans. Old files load unchanged
(serde defaults; missing tracks are 1fr).
- Canvas handles: wrapped-row gaps and grid column/row gaps are draggable; a selected grid's
tracks are outlined.
- The layout section moved from right.rs to layout_panel.rs; inspect reports min/max and a
grid child's resolved gridCell; docs list the new props.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>