Repository navigation
Animato v1.7.2
Animato v1.7.2 — Animated List Exit Lifecycle
Animato v1.7.2 is a focused patch release for the Leptos AnimatedFor
component. It resolves #52 by implementing the exit lifecycle that was already
present in the public API but not executed by the renderer.
Highlights
- Removed keyed rows remain mounted while their configured exit animation runs.
- Custom exit styles, duration, easing, and per-row stagger are honored.
- When
exitis omitted, it continues to default toenter.reversed(). - Surviving rows run FLIP movement only after the exiting row is removed from layout.
- Generation-safe cleanup prevents stale timers from deleting reinserted keys.
- Exiting wrappers disable pointer events until final removal.
- Regression tests cover retained removals, repeated updates, key revival,
multiple exits, timeout calculation, and transition timing.
Leptos example
<AnimatedFor
each=items.into()
key=|item: &Item| item.id
children=|item: Item| view! { <article>{item.label}</article> }
enter=PresenceAnimation::slide_up()
exit=PresenceAnimation::slide_down()
move_duration=0.35
move_easing=Easing::EaseOutCubic
move_delay=0.20
stagger_delay=0.04
gap=12.0
item_class="relative z-0 hover:z-50"
/>Lifecycle
- A source key disappears.
AnimatedForkeeps its rendered row and marks it as exiting.- The configured exit animation runs for its duration plus stagger.
- A generation-checked cleanup removes the row.
- Remaining rows are measured and moved with FLIP.
This retained state is necessary because Leptos keyed <For> normally removes
a missing row immediately, leaving no DOM node on which to run an exit
transition.
Compatibility
No public Rust API was removed or renamed. This release activates the existing
exit property. Applications that relied on immediate DOM removal should account
for the row remaining mounted until its exit transition completes.
Install
[dependencies]
animato = "1.7.2"[dependencies]
animato = { version = "1.7.2", features = ["leptos-csr"] }
leptos = { version = "0.8.19", features = ["csr"] }Crates published to crates.io
| Crate | Version | Description |
|---|---|---|
animato-core |
1.7.2 |
Traits, interpolation, easing, and inspection primitives |
animato-color |
1.7.2 |
Perceptual color wrappers |
animato-tween |
1.7.2 |
Tweens and keyframe tracks |
animato-spring |
1.7.2 |
Scalar and component springs |
animato-path |
1.7.2 |
Bezier, SVG paths, motion paths, and morphing |
animato-physics |
1.7.2 |
Inertia, drag, and gesture recognition |
animato-driver |
1.7.2 |
Drivers, clocks, recording, inspection, and profiling |
animato-timeline |
1.7.2 |
Timeline, sequence, and stagger composition |
animato-gpu |
1.7.2 |
GPU/CPU fallback batch tween evaluation |
animato-wasm |
1.7.2 |
rAF and DOM helpers |
animato-bevy |
1.7.2 |
Bevy integration plugin |
animato-leptos |
1.7.2 |
Leptos hooks and retained animated-list lifecycle |
animato-dioxus |
1.7.2 |
Dioxus signal hooks and native helpers |
animato-yew |
1.7.2 |
Yew hooks, components, gestures, and agents |
animato-devtools |
1.7.2 |
Runtime animation inspection and tuning tools |
animato-macro |
1.7.2 |
Declarative Motion Macro DSL |
animato-js |
1.7.2 |
WASM bindings published as @aarambhdevhub/animato-core |
animato |
1.7.2 |
Stable facade crate |
Performance and verification
This patch adds retained state only to Leptos AnimatedFor; the renderer-
agnostic animation engines and their hot paths are unchanged. Benchmark targets
still compile as part of the release gate.
The publish workflow enforces formatting, clippy with warnings denied, full
workspace tests, no-default-feature tests, documentation warnings, WASM and
framework example compilation, JavaScript browser tests, coverage, fuzz and
benchmark compilation, package dry-runs, and version/tag consistency.
Documentation
What's Changed
- fix(leptos): implement animated list exit lifecycle by @aarambh-darshan in #53
Full Changelog: v1.7.1...v1.7.2