/** * Компонент настроек экспорта переходов * Интегрируется с основным экспорт модалом */ import { AlertTriangle, CheckCircle, Cpu, Settings, Zap } from "lucide-react" import { useTranslation } from "react-i18next" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/components/ui/collapsible" import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Separator } from "@/components/ui/separator" import { Slider } from "@/components/ui/slider" import { Switch } from "@/components/ui/switch" import { TimelineProject } from "@/features/timeline/types/timeline" import { cn } from "@/lib/utils" import { useTransitionExport } from "../hooks/use-transition-export" import { TransitionExportSettings } from "../types/transition-export-types" interface TransitionExportSettingsProps { settings: TransitionExportSettings onSettingsChange: (settings: Partial) => void project?: TimelineProject className?: string } export function TransitionExportSettingsComponent({ settings, onSettingsChange, project, className, }: TransitionExportSettingsProps) { const { t } = useTranslation() const { hasTransitions, getTransitionInfo } = useTransitionExport() // Информация о переходах в проекте const transitionInfo = project ? getTransitionInfo(project) : null const hasProjectTransitions = project ? hasTransitions(project) : false // Обработчики изменений const handleSwitchChange = (field: keyof TransitionExportSettings) => (checked: boolean) => { onSettingsChange({ [field]: checked }) } const handleSelectChange = (field: keyof TransitionExportSettings) => (value: string) => { onSettingsChange({ [field]: value }) } const handleSliderChange = (field: keyof TransitionExportSettings) => (value: number[]) => { onSettingsChange({ [field]: value[0] }) } // Получение рекомендуемых настроек const getRecommendedSettings = () => { if (!transitionInfo) return null const isComplexProject = transitionInfo.complexity > 20 const hasGPUTransitions = transitionInfo.gpuAccelerated > 0 return { transitionQuality: isComplexProject ? "high" : "medium", transitionRenderMode: hasGPUTransitions ? "gpu" : "auto", optimizeTransitions: true, parallelTransitionProcessing: transitionInfo.totalTransitions > 5, maxConcurrentTransitions: Math.min(4, Math.max(1, Math.floor(transitionInfo.totalTransitions / 3))), } } const applyRecommendedSettings = () => { const recommended = getRecommendedSettings() if (recommended) { onSettingsChange(recommended) } } return (
{/* Статус переходов */} {hasProjectTransitions ? ( <> {t("export.transitions.statusFound")} ) : ( <> {t("export.transitions.statusNotFound")} )} {hasProjectTransitions && transitionInfo && (
{t("export.transitions.totalCount")}: {transitionInfo.totalTransitions}
{t("export.transitions.gpuAccelerated")}: {transitionInfo.gpuAccelerated}
{t("export.transitions.estimatedTime")}: {Math.round(transitionInfo.estimatedTime)}s
{t("export.transitions.complexity")}: 20 ? "destructive" : transitionInfo.complexity > 10 ? "default" : "secondary" } className="ml-2" > {transitionInfo.complexity > 20 ? t("export.transitions.complexityHigh") : transitionInfo.complexity > 10 ? t("export.transitions.complexityMedium") : t("export.transitions.complexityLow")}
{/* Рекомендуемые настройки */} {getRecommendedSettings() && (
)}
)}
{/* Основные настройки */}
{/* Включить экспорт переходов */}
{/* Настройки переходов (показываем только если переходы включены) */} {settings.includeTransitions !== false && hasProjectTransitions && (
{/* Качество переходов */}
{/* Режим рендеринга */}
{/* Оптимизация переходов */}
)}
{/* Расширенные настройки производительности */} {/* Размер кэша */}
{settings.transitionCacheSize || 500} MB
{/* Параллельная обработка */}
{/* Максимальное количество параллельных переходов */} {settings.parallelTransitionProcessing !== false && (
{settings.maxConcurrentTransitions || 4}
)} {/* Fallback опции */}
{/* Экспорт метаданных */}
{/* Отладка */}
{/* Логирование времени */}
) }