import { useEffect, useState } from "react" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Switch } from "@/components/ui/switch" import { Textarea } from "@/components/ui/textarea" import { useModal } from "@/features/modals/services" import { SubtitleClip } from "../types/timeline" export function SubtitleEditorModal() { const { modalData, closeModal } = useModal() const subtitle = modalData?.subtitle as SubtitleClip | undefined const onSave = modalData?.onSave as ((subtitle: Partial) => void) | undefined const availableStyles = (modalData?.availableStyles as Array<{ id: string; name: string }>) || [] const [text, setText] = useState("") const [startTime, setStartTime] = useState(0) const [duration, setDuration] = useState(2) const [styleId, setStyleId] = useState("") const [animationIn, setAnimationIn] = useState<"none" | "fade" | "slide" | "typewriter" | "scale" | "wave">("none") const [animationOut, setAnimationOut] = useState<"none" | "fade" | "slide" | "scale">("none") const [animationInDuration, setAnimationInDuration] = useState(0.5) const [animationOutDuration, setAnimationOutDuration] = useState(0.5) const [position, setPosition] = useState< | "top-left" | "top-center" | "top-right" | "middle-left" | "middle-center" | "middle-right" | "bottom-left" | "bottom-center" | "bottom-right" >("bottom-center") const [wordWrap, setWordWrap] = useState(true) const [maxWidth, setMaxWidth] = useState(80) // Инициализация значений при открытии модального окна useEffect(() => { if (subtitle) { setText(subtitle.text || "") setStartTime(subtitle.startTime || 0) setDuration(subtitle.duration || 2) setStyleId(subtitle.subtitleStyleId || "") setAnimationIn(subtitle.animationIn?.type || "none") setAnimationOut(subtitle.animationOut?.type || "none") setAnimationInDuration(subtitle.animationIn?.duration || 0.5) setAnimationOutDuration(subtitle.animationOut?.duration || 0.5) setPosition(subtitle.subtitlePosition?.alignment || "bottom-center") setWordWrap(subtitle.wordWrap ?? true) setMaxWidth(subtitle.maxWidth || 80) } }, [subtitle]) const handleSave = () => { const updatedSubtitle: Partial = { text, startTime, duration, subtitleStyleId: styleId === "default" ? undefined : styleId || undefined, animationIn: animationIn !== "none" ? { type: animationIn, duration: animationInDuration, } : undefined, animationOut: animationOut !== "none" ? { type: animationOut, duration: animationOutDuration, } : undefined, subtitlePosition: { alignment: position, marginX: 20, marginY: 20, }, wordWrap, maxWidth, } onSave?.(updatedSubtitle) closeModal() } return (
{/* Текст субтитра */}