Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
5b0abfb
feat(core): useAnimatedLayout, one module that glides the layout shif…
cixzhang Oct 26, 2026
b476220
feat(core): useAnimatedLayout({containerRef}) returns a handle that C…
cixzhang Oct 26, 2026
52c08dc
fix(core): the layout glide corrects only a real ancestor scale, not …
cixzhang Oct 26, 2026
7cfe5e0
chore(storybook): the Animated layout story's tags row is narrow, so …
cixzhang Oct 26, 2026
e2afc61
Merge 8ba53b45a4 (main, AST-105 current) into the animated layout draft
cixzhang Oct 26, 2026
dc023f3
wip(core): animated layout follows AST-105 (springs.settle, Reduce Mo…
cixzhang Oct 26, 2026
b60f171
feat(core): useAnimatedLayout follows AST-105
cixzhang Oct 26, 2026
ac58ce3
chore(storybook): the story's internal-reporting demos say they are s…
cixzhang Oct 26, 2026
427f850
chore(docsite): the ShadCN route lock lists the useAnimatedLayout hoo…
cixzhang Oct 26, 2026
1bccf04
fix(core): the animated layout reads springs.settle from the internal…
cixzhang Oct 26, 2026
b894315
test(core): the animated-layout browser proofs settle between changes…
cixzhang Oct 26, 2026
ea01d0c
fix(core): animated layout measures every grouped change, drops refus…
cixzhang Oct 26, 2026
186526e
fix(core): a retargeted glide keeps its motion and adds the new move
cixzhang Oct 26, 2026
5bcb797
docs(architecture): INV12 plays the glide through the shared rectangl…
cixzhang Oct 26, 2026
7bad709
docs(architecture): rewrap INV12
cixzhang Oct 26, 2026
3a5f9ae
refactor(core): useAnimatedLayout lands alone; Collapsible and TreeLi…
cixzhang Oct 26, 2026
b3826b7
feat(core): the changed element's exit, held out of flow on the same …
cixzhang Oct 26, 2026
a09ce74
fix(core): the internal module alone; a displaced changed element mov…
cixzhang Oct 26, 2026
2f7cedb
fix(core): the exit frees exactly its space and is inert; elements th…
cixzhang Oct 26, 2026
52841d7
fix(core): the exit measures the content after it, holds only a measu…
cixzhang Oct 26, 2026
bc32d66
fix(core): nested changes compose in any order; the exit finds the re…
cixzhang Oct 26, 2026
e4b19b0
fix(core): the exit's correction follows a scaled ancestor, and its m…
cixzhang Oct 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/animated-layout.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@astryxdesign/core': patch
---

[chore] Internal: the one module for size-change glides (`spec:AST-105`, `architecture:react-component-runtime` INV12). After a reported size change, the content after it inside a container glides to its new place on one shared internal motion role, and the changed element enters or exits on the same motion. Not exported; no component uses it yet. The public `useAnimatedLayout` hook and Collapsible's and TreeList's `animatedLayout` prop arrive together in a later release.

@cixzhang
5 changes: 3 additions & 2 deletions docs/architecture/react-component-runtime.md
Original file line number Diff line number Diff line change
Expand Up @@ -164,8 +164,9 @@ those contracts.
`spec:AST-105` defines. It measures the layout before and after a reported
change and moves shifted content with a compositor-only translate played
through the shared rectangle morph (`architecture:layer-runtime` INV15;
`spec:AST-094` FR5); it never animates height. Its walk visits only the
following element siblings at each ancestor level up to the area, through
`spec:AST-094` FR5) once Core has that morph; until then, the module plays

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This changes INV12 itself: today it requires the glide to play through the shared rectangle morph. The interim needs an engineering owner's /approve-spec on this head; until then the module's own translate contradicts the current invariant.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This amends INV12, which currently requires the glide to play through the shared rectangle morph. The interim needs an engineering owner's decision (/approve-spec with the full head SHA) or the glide waits for the morph.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This rewords INV12, which on main requires the glide to play through the shared rectangle morph (architecture:layer-runtime INV15), and Core has no such morph yet. The module's own translate depends on this interim, so it needs an engineering owner's /approve-spec with the full head SHA, or the module waits for the morph.

its own compositor translate. It never animates height. Its walk visits only
the following element siblings at each ancestor level up to the area, through
`parentElement` and `nextElementSibling`, descending only into an element
with `display: contents`, so its cost grows with depth plus following
siblings. Changes in one area in the same frame are measured together. A
Expand Down
4 changes: 4 additions & 0 deletions docs/specs/AST-105-animated-layout/spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,10 @@ Out of coverage, each taking its final place at once:
since only content after the change in the DOM moves;
- text reflowing inside a paragraph beside a float;
- elements the app moves itself with its own transforms;
- a closing element whose space no end margin frees (a grid item whose
track or gap changes when it hides, or a flex-row item that sets its row's
height): it hides at once, without its exit, and the content after it
takes its final place at once;
- an anchored popover tied to a moving element, which layer anchoring keeps
in place (`architecture:layer-runtime`).

Expand Down
Loading
Loading