Files
vfxreview/hooks/use-review-player.ts
twotalesanimation 0fbe856dce Initial commit
2026-05-19 22:20:29 +02:00

82 lines
2.4 KiB
TypeScript

import { create } from "zustand";
import type { AnnotationTool } from "@/types";
interface ReviewPlayerStore {
// Playback
isPlaying: boolean;
currentFrame: number;
currentTime: number;
duration: number;
playbackRate: number;
volume: number;
isMuted: boolean;
isFullscreen: boolean;
// Annotation
isAnnotating: boolean;
selectedTool: AnnotationTool;
selectedColor: string;
strokeWidth: number;
showAnnotations: boolean;
// Config (set from version data)
fps: number;
totalFrames: number;
// Actions
setPlaying: (playing: boolean) => void;
setCurrentFrame: (frame: number) => void;
setCurrentTime: (time: number) => void;
setDuration: (duration: number) => void;
setPlaybackRate: (rate: number) => void;
setVolume: (volume: number) => void;
setMuted: (muted: boolean) => void;
setFullscreen: (fullscreen: boolean) => void;
setAnnotating: (annotating: boolean) => void;
setSelectedTool: (tool: AnnotationTool) => void;
setSelectedColor: (color: string) => void;
setStrokeWidth: (width: number) => void;
setShowAnnotations: (show: boolean) => void;
setFps: (fps: number) => void;
setTotalFrames: (frames: number) => void;
reset: () => void;
}
const initialState = {
isPlaying: false,
currentFrame: 0,
currentTime: 0,
duration: 0,
playbackRate: 1,
volume: 1,
isMuted: false,
isFullscreen: false,
isAnnotating: false,
selectedTool: "freehand" as AnnotationTool,
selectedColor: "#ef4444",
strokeWidth: 2,
showAnnotations: true,
fps: 24,
totalFrames: 0,
};
export const useReviewStore = create<ReviewPlayerStore>((set) => ({
...initialState,
setPlaying: (isPlaying) => set({ isPlaying }),
setCurrentFrame: (currentFrame) => set({ currentFrame }),
setCurrentTime: (currentTime) => set({ currentTime }),
setDuration: (duration) => set({ duration }),
setPlaybackRate: (playbackRate) => set({ playbackRate }),
setVolume: (volume) => set({ volume }),
setMuted: (isMuted) => set({ isMuted }),
setFullscreen: (isFullscreen) => set({ isFullscreen }),
setAnnotating: (isAnnotating) => set({ isAnnotating }),
setSelectedTool: (selectedTool) => set({ selectedTool }),
setSelectedColor: (selectedColor) => set({ selectedColor }),
setStrokeWidth: (strokeWidth) => set({ strokeWidth }),
setShowAnnotations: (showAnnotations) => set({ showAnnotations }),
setFps: (fps) => set({ fps }),
setTotalFrames: (totalFrames) => set({ totalFrames }),
reset: () => set(initialState),
}));