/** * Визуальные индикаторы Split Edit */ import { AnimatePresence, motion } from "motion/react" import { cn } from "@/lib/utils" import { useSplitEdit } from "../hooks/use-split-edit" interface SplitEditIndicatorsProps { className?: string timelineWidth: number timelineHeight: number pixelsPerSecond: number currentTime: number } export function SplitEditIndicators({ className, timelineHeight, pixelsPerSecond }: SplitEditIndicatorsProps) { const { config, toolSettings, visualSettings, activeSplitEdits, isEnabled } = useSplitEdit() if (!isEnabled) return null const timeToPixel = (time: number) => time * pixelsPerSecond return (
{/* Активные split edits */} {activeSplitEdits.map((splitEdit) => { const x = timeToPixel(splitEdit.position) return ( {/* Основная линия */}
{/* Индикатор типа */}
{splitEdit.type === "L-cut" && "L"} {splitEdit.type === "J-cut" && "J"} {splitEdit.type === "split-at-playhead" && "S"}
{/* Подпись */}
{splitEdit.type === "L-cut" && "L-Cut"} {splitEdit.type === "J-cut" && "J-Cut"} {splitEdit.type === "split-at-playhead" && "Split"}
) })} {/* Предварительный просмотр */} {visualSettings.showPreview && config.previewPosition !== undefined && ( {/* Предварительная линия */}
{/* Предварительный индикатор */}
{visualSettings.operationType === "L-cut" && "L"} {visualSettings.operationType === "J-cut" && "J"} {visualSettings.operationType === "split-at-playhead" && "S"}
)} {/* Направляющие линии */} {toolSettings.showGuides && (
{/* Линии привязки */} {toolSettings.magneticSnap && (
{/* Здесь могут быть дополнительные направляющие */}
)} {/* Сетка для выравнивания */} {toolSettings.autoAlign && (
)}
)} {/* Инструмент курсора */} {config.tool === "razor" && ( )}
) } export default SplitEditIndicators