"use client"; import { useState, useCallback, useEffect } from "react"; import { motion } from "framer-motion"; import { Video, Settings } from "lucide-react"; import { FileUploader } from "@/components/tools/FileUploader"; import { ProgressBar } from "@/components/tools/ProgressBar"; import { ResultPreview } from "@/components/tools/ResultPreview"; import { ConfigPanel, type ConfigOption } from "@/components/tools/ConfigPanel"; import { Button } from "@/components/ui/button"; import { useUploadStore } from "@/store/uploadStore"; import { generateId } from "@/lib/utils"; import { useTranslation, getServerTranslations } from "@/lib/i18n"; import type { UploadedFile, ProcessedFile, VideoFramesConfig } from "@/types"; const videoAccept = { "video/*": [".mp4", ".mov", ".avi", ".webm", ".mkv"], }; const defaultConfig: VideoFramesConfig = { fps: 30, format: "png", quality: 90, width: undefined, height: undefined, }; function useConfigOptions(config: VideoFramesConfig, getT: (key: string) => string): ConfigOption[] { return [ { id: "fps", type: "slider", label: getT("config.videoFrames.fps"), description: getT("config.videoFrames.fpsDescription"), value: config.fps, min: 1, max: 60, step: 1, suffix: " fps", icon: