import { cleanup, render } from "@testing-library/react"; import * as React from "react"; import { afterEach, beforeAll, vi } from "vitest"; import { defineToolcraft } from "../../schema/define-toolcraft"; import type { ToolcraftTimelinePanelSchema } from "../../schema/types"; import type { ToolcraftInitialState } from "../../state/types"; import { ToolcraftRoot } from "../app-shell/toolcraft-root"; import { useToolcraft } from "../app-shell/use-toolcraft"; import { TimelinePanel } from "./timeline-panel"; export function installTimelinePanelTestEnvironment() { beforeAll(() => { Object.defineProperty(window, "matchMedia", { value: (query: string) => ({ addEventListener: () => undefined, addListener: () => undefined, dispatchEvent: () => false, matches: query === "(prefers-reduced-motion: reduce)", media: query, onchange: null, removeEventListener: () => undefined, removeListener: () => undefined, }), writable: true, }); }); afterEach(() => { cleanup(); window.localStorage.clear(); vi.restoreAllMocks(); }); } export function createTimelineSchema(timeline: ToolcraftTimelinePanelSchema = true) { return defineToolcraft({ canvas: { enabled: true }, panels: { timeline, }, }); } function TimelineStateProbe() { const { state } = useToolcraft(); return ( <> {String(state.timeline.isPlaying)} {String(state.timeline.isLooping)} {String(state.timeline.currentTimeSeconds)} {String(state.timeline.expanded)} ); } export function renderTimelinePanel( props: Partial> = {}, initialState?: ToolcraftInitialState, timeline?: ToolcraftTimelinePanelSchema, ) { return render( , ); } export function renderUploadDependentTimelinePanel(initialState?: ToolcraftInitialState) { const schema = defineToolcraft({ canvas: { enabled: true, sizing: { mode: "intrinsic-media" }, upload: true, }, panels: { timeline: { mode: "playback" }, }, }); return render( , ); }