Skip to content

fix(studio): surface gesture recording controls#1390

Merged
miguel-heygen merged 1 commit into
mainfrom
fix/1383-gesture-record-discoverability
Jun 13, 2026
Merged

fix(studio): surface gesture recording controls#1390
miguel-heygen merged 1 commit into
mainfrom
fix/1383-gesture-record-discoverability

Conversation

@miguel-heygen

Copy link
Copy Markdown
Collaborator

Problem

Fixes #1383. Gesture recording is a key Studio keyframe interaction, but the control was buried below the design-panel fold and the on-canvas selection had no visible record affordance. The R shortcut existed, but users had no clear canvas-level cue that the selected element could be recorded.

What this fixes

Adds a selected-element record badge to the DOM edit overlay when keyframes are enabled, wired to the same gesture recording toggle as the existing panel action. The badge flips to a stop control while recording is active.

Hoists the right-panel gesture recording control above the property sections so it is visible immediately after selecting an element.

Keeps selected DOM bounds visible while gesture recording is active so the on-canvas stop affordance remains available, while existing movement editing remains disabled through allowCanvasMovement={false} during recording.

Root cause

Gesture recording was only discoverable from the lower Design panel action. During recording, Studio also hid selected DOM bounds through useInspectorState, which would remove any selection-level controls even though movement handles were already disabled separately.

Verification

Local checks

  • bun run --filter @hyperframes/studio test -- src/components/editor/DomEditOverlay.test.ts
  • bunx oxlint packages/studio/src/hooks/useStudioContextValue.ts packages/studio/src/App.tsx packages/studio/src/components/editor/GestureRecordControl.tsx packages/studio/src/components/editor/DomEditOverlay.tsx packages/studio/src/components/editor/DomEditOverlay.test.ts packages/studio/src/components/editor/PropertyPanel.tsx packages/studio/src/components/StudioPreviewArea.tsx
  • bunx oxfmt --check packages/studio/src/components/editor/GestureRecordControl.tsx packages/studio/src/components/editor/DomEditOverlay.tsx packages/studio/src/components/editor/DomEditOverlay.test.ts packages/studio/src/components/editor/PropertyPanel.tsx packages/studio/src/components/StudioPreviewArea.tsx packages/studio/src/App.tsx
  • bun run --filter @hyperframes/studio typecheck
  • Lefthook pre-commit passed: filesize, lint, largefiles, format, fallow, typecheck, commitlint

Browser verification

  • Ran Studio with VITE_STUDIO_ENABLE_KEYFRAMES=1 bun run --filter @hyperframes/cli dev preview /tmp/hf-1383-studio-project --port 3103 --no-open
  • Used agent-browser to load Studio, select the fixture element, verify the on-canvas Record gesture (R) badge and hoisted panel button, press R, and verify both controls switch to the stop state.
  • Browser artifacts saved locally:
    • artifacts/1383/studio-record-badge.png
    • artifacts/1383/studio-recording-active.png
    • artifacts/1383/gesture-record-discoverability.webm

Notes

The fixture used for browser verification lives under /tmp/hf-1383-studio-project and is not part of this PR. The recurring LFS pointer noise in packages/producer/tests/webm-transparency/output/output.webm was left unstaged.

@miguel-heygen miguel-heygen force-pushed the fix/1383-gesture-record-discoverability branch 4 times, most recently from 2e43fa4 to 976e335 Compare June 13, 2026 02:49
@miguel-heygen miguel-heygen force-pushed the fix/1383-gesture-record-discoverability branch from 976e335 to 6f0c25c Compare June 13, 2026 02:53
@miguel-heygen miguel-heygen merged commit 5b6c62e into main Jun 13, 2026
47 checks passed
@miguel-heygen miguel-heygen deleted the fix/1383-gesture-record-discoverability branch June 13, 2026 03:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

studio(keyframes): gesture-record control is hidden below the design-panel fold

1 participant