Skip to content

Animato v1.7.2

Choose a tag to compare

@github-actions github-actions released this 20 Jul 06:04
· 2 commits to main since this release
60ff11e

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 exit is omitted, it continues to default to enter.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

  1. A source key disappears.
  2. AnimatedFor keeps its rendered row and marks it as exiting.
  3. The configured exit animation runs for its duration plus stagger.
  4. A generation-checked cleanup removes the row.
  5. 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

Full Changelog: v1.7.1...v1.7.2