diff --git a/packages/studio/src/components/TimelineToolbar.test.tsx b/packages/studio/src/components/TimelineToolbar.test.tsx index 0050dcfc95..2e7900e826 100644 --- a/packages/studio/src/components/TimelineToolbar.test.tsx +++ b/packages/studio/src/components/TimelineToolbar.test.tsx @@ -12,7 +12,7 @@ import { TimelineToolbar } from "./TimelineToolbar"; afterEach(() => { document.body.innerHTML = ""; - usePlayerStore.setState({ autoKeyframeEnabled: true }); + usePlayerStore.setState({ autoKeyframeEnabled: true, thumbnailMode: "adaptive" }); }); function renderToolbar( @@ -58,6 +58,25 @@ describe("TimelineToolbar — auto-keyframe toggle (#1808)", () => { act(() => root.unmount()); }); }); + +describe("TimelineToolbar — adaptive thumbnails", () => { + it("keeps a user-controlled hidden mode as the rollback path", () => { + const { host, root } = renderToolbar(); + const button = host.querySelector( + 'button[aria-label="Hide thumbnails — labels only"]', + ); + if (!button) throw new Error("thumbnail toggle not rendered"); + + act(() => button.click()); + + expect(usePlayerStore.getState().thumbnailMode).toBe("hidden"); + expect(button.getAttribute("aria-label")).toBe( + "Show thumbnails — posters stay visible; richer previews appear on interaction", + ); + act(() => root.unmount()); + }); +}); + describe("TimelineToolbar — motion path endpoints", () => { it("does not advertise a destructive keyframe toggle for a required endpoint", () => { usePlayerStore.setState({ currentTime: 10 }); diff --git a/packages/studio/src/components/TimelineToolbar.tsx b/packages/studio/src/components/TimelineToolbar.tsx index 43416414d5..99928935da 100644 --- a/packages/studio/src/components/TimelineToolbar.tsx +++ b/packages/studio/src/components/TimelineToolbar.tsx @@ -1,5 +1,5 @@ import { useEffect, useRef } from "react"; -import { Magnet, MagnifyingGlassMinus, MagnifyingGlassPlus } from "@phosphor-icons/react"; +import { Image, Magnet, MagnifyingGlassMinus, MagnifyingGlassPlus } from "@phosphor-icons/react"; import { useEnableKeyframes, isPlayheadWithinTween, @@ -115,6 +115,9 @@ export function TimelineToolbar({ domEditSession, onSplitElement }: TimelineTool const setTimelineSnapEnabled = usePlayerStore((s) => s.setTimelineSnapEnabled); const autoKeyframeEnabled = usePlayerStore((s) => s.autoKeyframeEnabled); const setAutoKeyframeEnabled = usePlayerStore((s) => s.setAutoKeyframeEnabled); + const thumbnailMode = usePlayerStore((s) => s.thumbnailMode); + const setThumbnailMode = usePlayerStore((s) => s.setThumbnailMode); + const thumbnailsVisible = thumbnailMode === "adaptive"; // Subscribe so the add-beat button reacts to playhead movement and analysis load. const currentTime = usePlayerStore((s) => s.currentTime); const beatAnalysisReady = usePlayerStore((s) => s.beatAnalysis !== null); @@ -410,6 +413,31 @@ export function TimelineToolbar({ domEditSession, onSplitElement }: TimelineTool })()}
+ + +