spanda 0.9.3

A general-purpose animation library for Rust — tweening, keyframes, timelines, and physics.
Documentation
[package]
name        = "spanda"
version     = "0.9.3"
edition     = "2024"
rust-version = "1.85"
description = "A general-purpose animation library for Rust — tweening, keyframes, timelines, and physics."
license     = "MIT OR Apache-2.0"
repository  = "https://github.com/aarambh-darshan/spanda"
keywords    = ["animation", "tween", "easing", "keyframe", "gamedev"]
categories  = ["game-development", "graphics", "mathematics", "multimedia"]
readme      = "README.md"

# ── optional features ────────────────────────────────────────────────────────

[features]
default  = ["std"]
std      = []                         # enables std clock, thread-safe driver
serde    = ["dep:serde"]              # Serialize/Deserialize on all public types
bevy     = ["dep:bevy_app", "dep:bevy_ecs", "dep:bevy_time", "std"]
wasm     = ["dep:wasm-bindgen", "dep:js-sys", "std"]
wasm-dom = ["wasm", "dep:web-sys"]          # WASM + DOM plugins (Flip, SplitText, etc.)
palette  = ["dep:palette"]            # Color interpolation via palette crate
tokio    = ["dep:tokio", "std"]       # async .await on timeline completion
gpu      = ["dep:wgpu", "dep:pollster", "dep:bytemuck", "dep:bytemuck_derive", "std"]  # GPU compute shader batch evaluation

# ── dependencies ──────────────────────────────────────────────────────────────

[dependencies]
serde        = { version = "1",    features = ["derive"], optional = true }
bevy_app     = { version = "0.18", optional = true }
bevy_ecs     = { version = "0.18", optional = true }
bevy_time    = { version = "0.18", optional = true }
wasm-bindgen = { version = "0.2",  optional = true }
js-sys       = { version = "0.3",  optional = true }
web-sys      = { version = "0.3",  optional = true, features = [
    "Window", "Document", "Element", "HtmlElement", "DomRect",
    "CssStyleDeclaration", "Node", "NodeList", "Text",
    "EventTarget", "Event", "PointerEvent", "MouseEvent", "HtmlCollection",
    "TouchEvent", "Touch", "TouchList", "WheelEvent", "KeyboardEvent",
    "HashChangeEvent", "MediaQueryList", "MediaQueryListEvent",
    "AddEventListenerOptions",
    "Location",
    "History",
    "UiEvent",
    "Url",
    "HtmlAnchorElement",

] }
palette      = { version = "0.7",  optional = true }
tokio        = { version = "1",    features = ["sync"], optional = true }
wgpu         = { version = "24",   optional = true }
pollster     = { version = "0.4",  optional = true }
bytemuck     = { version = "1",    optional = true }
bytemuck_derive = { version = "1", optional = true }
num-traits = { version = "0.2.19", default-features = false, features = ["libm"] }

[dev-dependencies]
approx    = "0.5"     # float comparison in tests
criterion = "0.5"     # benchmarks

[[bench]]
name    = "easing_bench"
harness = false

[[test]]
name = "colour_interpolation"
required-features = ["palette"]

[[example]]
name = "colour_demo"
required-features = ["palette"]

[[example]]
name = "bevy_bounce"
required-features = ["bevy"]

[[example]]
name = "catmull_rom_demo"
required-features = ["std"]

[[example]]
name = "gesture_demo"
required-features = ["std"]

[[example]]
name = "gpu_batch_demo"
required-features = ["gpu"]

[[example]]
name = "inertia_demo"
required-features = ["std"]

[[example]]
name = "morph_demo"
required-features = ["std"]

[[example]]
name = "motion_path_demo"
required-features = ["std"]

[[example]]
name = "spring_demo"
required-features = ["std"]

[[example]]
name = "svg_path_demo"
required-features = ["std"]

[[example]]
name = "tui_progress"
required-features = ["std"]

[[example]]
name = "tui_spinner"
required-features = ["std"]

[profile.release]
opt-level = 3
lto = true
codegen-units = 1
strip = true
panic = "abort"