You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Text: letter_spacing on rich_text/gradient_text, animated tracking layout, static opacity vs animated opacity, caret after typed text #430
Static opacity: 0 cancels an opacity animation (Two animations on the same property compose multiplicatively, but the docs promise last-wins #322, closed by a docs-only PR): {"type":"div","style":{"width":100,"height":100,"background":"#FF0000","opacity":0,"animation":[{"name":"fade_in","duration":0.2}]}} stays invisible for the whole scene, with no warning (css.opacity = base * animated in css/animation.rs). The animation should override the static value, or validate should warn.
Caret after typed characters: document (and test) how to place an element right after the characters typed so far during a typewriter — node("id","width") gives the full box width, not the typed width.
A test that fails on current main is written first. For anything visual it is a render test (scenario → frame → pixel assertions); tests that build AnimatedProperties by hand are not enough — that is exactly how the regressions listed here slipped through.
Each item is verified end to end: scenario JSON, rustmotion validate, render, image inspected.
Vocabulary changes update crates/rustmotion/skills/SKILL.md, the relevant rules/ file and the exported schema. A field the validator accepts must have an effect, otherwise the validator rejects it or warns.
No comments in Rust code (repository rule). Commits follow <type>: <verb> <message>. No AI attribution in commits, PRs or issue comments.
To do
letter_spacingkeyframes have no effect onrich_textandgradient_text(Text animation: animatable letter-spacing, and a letter-by-letter morph between two labels #380).rich_texteven ignores a staticstyle.letter-spacing.letter_spacingontextoverflows and drifts (Text animation: animatable letter-spacing, and a letter-by-letter morph between two labels #380): layout uses the static value, so tracked-out text overflows its box and grows to the right instead of staying centred.opacity: 0cancels an opacity animation (Two animations on the same property compose multiplicatively, but the docs promise last-wins #322, closed by a docs-only PR):{"type":"div","style":{"width":100,"height":100,"background":"#FF0000","opacity":0,"animation":[{"name":"fade_in","duration":0.2}]}}stays invisible for the whole scene, with no warning (css.opacity = base * animatedincss/animation.rs). The animation should override the static value, orvalidateshould warn.typewriter—node("id","width")gives the full box width, not the typed width.fontsare not used by<text>inside an inlinesvg.Definition of done
mainis written first. For anything visual it is a render test (scenario → frame → pixel assertions); tests that buildAnimatedPropertiesby hand are not enough — that is exactly how the regressions listed here slipped through.rustmotion validate, render, image inspected.cargo fmt --all --check,cargo clippy --workspace --all-targets -- -D warnings,cargo test --workspacepass.crates/rustmotion/skills/SKILL.md, the relevantrules/file and the exported schema. A field the validator accepts must have an effect, otherwise the validator rejects it or warns.<type>: <verb> <message>. No AI attribution in commits, PRs or issue comments.