Initial commit
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
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),
|
||||
}));
|
||||
Reference in New Issue
Block a user