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(
,
);
}