feat(studio): window sizing, keyboard playback, typed number inputs#75
Merged
Conversation
…puts - window resizes to 75% of the current monitor and centers on mount (runtime one-shot: tao monitors are only queryable post-launch; one-frame resize flash documented) - keyboard transport via a pure key->action mapping on the existing root handler: Space toggles play, arrows pause+step 1, Shift+arrows step 10, Home/End seek; TopBar and PlaybackBar isolate their focused controls with stop_propagation (no double-step on the slider, Space on a focused button activates the button only); Play/Pause becomes a lucide icon with shortcut tooltips - PropKind::Number split into Integer/Float from the schema type: integers display without decimals and write real JSON integers (12.0 into a u32 field fails the typed parse and would drop the element at render — proven by round-trip test; non-integer input is refused), floats trim trailing zeros via shortest-display, curated fmt_num aligned - DEFAULT marker becomes a discreet dot (full explanation stays in the row title), no more label collision
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #74 — user iteration round 3.
playback_action(key, mods)mapping, unit-tested): Space = play/pause, ←/→ = pause + step 1, Shift+←/→ = pause + step 10, Home/End = seek; handled keys prevent_default. TopBar and PlaybackBar isolate focused controls with the established stop_propagation pattern — no slider double-step, Space on a focused button activates only the button (deliberate choice over relying on WebKit preventDefault semantics). Play/Pause is now a lucide icon with "(Space)" tooltips.Integer/Floatsplit from the schema'stypekeyword. Integers show no decimals and write real JSON integers —12.0intobadge.count: u32fails the typed parse and would drop the element at render (proven by a round-trip test; non-integer input into an integer field is refused). Floats use shortest-display trimming ("405.0"→"405", "1.40"→"1.4"); the wave-1 curatedfmt_numis aligned.Noted: Home/End don't pause (seek-while-playing continues — only steps pause by design); window size isn't persisted (out of scope).
examples/working-tree drift (user's studio session) excluded.Tests: 7 new (schema split, display trimming, integer round-trip proof, key mapping ×4). 391 total, all green.
Verify:
cargo check -p rustmotion-studio✓ ·cargo test --workspace→ 391 passed ✓ ·cargo fmt --check✓ · clippy gated ≤1 ✓