From 1579de8c6d330c352e41fe9b7fd121fab7d60f9c Mon Sep 17 00:00:00 2001 From: talksik Date: Mon, 13 Apr 2026 09:31:25 -0700 Subject: [PATCH] feat: shift + arrows to seek track --- js/src/features/particles/stream-view.tsx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/js/src/features/particles/stream-view.tsx b/js/src/features/particles/stream-view.tsx index f9f2ad0..20a1fbf 100644 --- a/js/src/features/particles/stream-view.tsx +++ b/js/src/features/particles/stream-view.tsx @@ -36,6 +36,7 @@ function getReactions(particle: Particle): Record | undefined const EXIT_DELAY_MS = 5000; const EXIT_TICK_MS = 100; +const SEEK_DELTA_SEC = 5; type PlaybackStatus = "idle" | "playing" | "ended"; @@ -99,6 +100,7 @@ const STREAM_VIEW_KEYBINDINGS: KeybindingGroup[] = [ bindings: [ { keys: ["Hold", "Space"], description: "Pause" }, { keys: ["Hold", "Shift"], description: "1.5× speed" }, + { keys: ["Shift", "←", "→"], description: "Seek ±5s" }, ], }, { @@ -269,11 +271,17 @@ function StreamViewInner({ path, streamParticle }: StreamViewProps) { switch (e.key) { case "ArrowRight": + e.preventDefault(); + if (!e.shiftKey || !mediaRef.current?.seek(SEEK_DELTA_SEC)) next(); + break; case "ArrowDown": e.preventDefault(); next(); break; case "ArrowLeft": + e.preventDefault(); + if (!e.shiftKey || !mediaRef.current?.seek(-SEEK_DELTA_SEC)) prev(); + break; case "ArrowUp": e.preventDefault(); prev();