Goal: remove the palette asymmetry — as_timed returns None for Caption and Positioned (crates/rustmotion-components/src/lib.rs:289), as_animatable returns None for Positioned.
Invariants: every component that carries timing/animation fields is reachable through the dispatch; defaults keep current behavior.
Acceptance: a Positioned with a fade-in animation animates; a Caption with start_at respects its window; tests cover both.
Files: crates/rustmotion-components/src/lib.rs, caption.rs, positioned.rs.
Verify: cargo test --workspace
Goal: remove the palette asymmetry —
as_timedreturnsNonefor Caption and Positioned (crates/rustmotion-components/src/lib.rs:289),as_animatablereturnsNonefor Positioned.Invariants: every component that carries
timing/animationfields is reachable through the dispatch; defaults keep current behavior.Acceptance: a Positioned with a fade-in animation animates; a Caption with
start_atrespects its window; tests cover both.Files:
crates/rustmotion-components/src/lib.rs,caption.rs,positioned.rs.Verify:
cargo test --workspace