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>