/**
* Визуальные индикаторы 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