Files
hyperframes/packages
Ular Kimsanov 3930460c51 feat(studio): seek-restore contract for player reloads (#2193)
* feat(studio): timeline leaf helpers — audio inspector, zoom math, UI prefs

What: extends three leaf modules to their final NLE-stack form, tests in the
same change: timelineInspector (isAudioTimelineElement, resolveBeatSourceTrack),
timelineZoom (zoom/pps math incl. computePinnedZoomPercent), and
studioUiPreferences (persisted editor prefs).

Why: leaf dependencies of the NLE timeline stack; landing them first keeps
the later glue PRs to wiring.

How: additive from the consumer side — every export main already uses is
unchanged (typecheck against main's consumers passes untouched); every new
export is exercised by a test in this PR.

Test plan: bunx vitest run on the three test files; tsc --noEmit in
packages/studio; fallow audit --base origin/main clean.

* feat(studio): seek-restore contract for player reloads

What: useTimelineSyncCallbacks gains resolveReloadSeekTime and revealIframe —
the pure contract for where the playhead lands after a preview reload
(pending seek > deep-link seek > store playhead, clamped) and for undoing
refreshPlayer's iframe hide. Test suite included.

Why: the NLE editor reloads the preview on every committed edit; this
contract is the difference between "playhead restores" and "jumps to 0".

How: additive exports on an existing hook file; main's consumers unchanged.

Test plan: bunx vitest run useTimelineSyncCallbacks.test.ts; tsc --noEmit in
packages/studio; fallow audit clean.
2026-07-11 20:33:07 -04:00
..
2026-07-11 17:15:24 -07:00
2026-07-11 17:15:24 -07:00
2026-07-11 17:15:24 -07:00
2026-07-11 17:15:24 -07:00
2026-07-11 17:15:24 -07:00
2026-07-11 17:15:24 -07:00
2026-07-11 17:15:24 -07:00
2026-07-11 17:15:24 -07:00
2026-07-11 17:15:24 -07:00
2026-07-11 17:15:24 -07:00
2026-07-11 17:15:24 -07:00
2026-07-11 17:15:24 -07:00