From 3e7b464b3ba81070c50b512af62222b7fae19db6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel?= Date: Thu, 21 May 2026 21:26:32 -0400 Subject: [PATCH] fix(studio): ensure GSAP timeline stays paused after seek Call tl.pause() both before AND after tl.seek() in the adapter. GSAP's seek() can reactivate a timeline depending on internal state; the second pause() guarantees it stays frozen at the seeked position. --- packages/studio/src/player/hooks/useTimelinePlayer.ts | 10 ---------- packages/studio/src/player/lib/playbackAdapter.ts | 4 +++- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/packages/studio/src/player/hooks/useTimelinePlayer.ts b/packages/studio/src/player/hooks/useTimelinePlayer.ts index dc77122f3..f503e8299 100644 --- a/packages/studio/src/player/hooks/useTimelinePlayer.ts +++ b/packages/studio/src/player/hooks/useTimelinePlayer.ts @@ -407,16 +407,6 @@ export function useTimelinePlayer() { if (usePlayerStore.getState().isPlaying) setIsPlaying(false); shuttleDirectionRef.current = null; shuttleSpeedIndexRef.current = 0; - try { - const doc = iframeRef.current?.contentDocument; - if (doc) { - for (const el of doc.querySelectorAll("video, audio")) { - (el as HTMLMediaElement).pause(); - } - } - } catch { - /* cross-origin */ - } } return true; }, diff --git a/packages/studio/src/player/lib/playbackAdapter.ts b/packages/studio/src/player/lib/playbackAdapter.ts index e96f35080..0a6a98fa4 100644 --- a/packages/studio/src/player/lib/playbackAdapter.ts +++ b/packages/studio/src/player/lib/playbackAdapter.ts @@ -135,8 +135,10 @@ export function wrapTimeline(tl: TimelineLike): PlaybackAdapter { play: () => tl.play(), pause: () => tl.pause(), seek: (t, options) => { - if (!options?.keepPlaying) tl.pause(); + const shouldPause = !options?.keepPlaying; + if (shouldPause) tl.pause(); tl.seek(t); + if (shouldPause) tl.pause(); }, getTime: () => tl.time(), getDuration: () => tl.duration(),