/**
* Индикатор коллизий переходов
* Показывает предупреждения о пересекающихся переходах
*/
import { AlertCircle, AlertTriangle } from "lucide-react"
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"
import { Button } from "@/components/ui/button"
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"
import { TimelineTransition } from "@/features/timeline/types/timeline-transition"
import { cn } from "@/lib/utils"
interface TransitionCollision {
transition1: TimelineTransition
transition2: TimelineTransition
type: "overlap" | "adjacent" | "clip-boundary"
severity: "warning" | "error"
message: string
}
interface TransitionCollisionIndicatorProps {
collisions: TransitionCollision[]
onResolve?: (collision: TransitionCollision) => void
className?: string
compact?: boolean
}
/**
* Компонент для отображения коллизий переходов
*/
export function TransitionCollisionIndicator({
collisions,
onResolve,
className,
compact = false,
}: TransitionCollisionIndicatorProps) {
if (collisions.length === 0) return null
// В компактном режиме показываем только иконку с тултипом
if (compact) {
return (
Обнаружены коллизии переходов
• {collision.message}
и ещё {collisions.length - 3}...
{collision.message}
{getCollisionDetails(collision)}Переход 1: {collision.transition1.position.toFixed(2)}s -{" "} {(collision.transition1.position + collision.transition1.duration).toFixed(2)}s
Переход 2: {collision.transition2.position.toFixed(2)}s -{" "} {(collision.transition2.position + collision.transition2.duration).toFixed(2)}s
Переходы расположены слишком близко друг к другу
case "clip-boundary": returnПереход выходит за границы клипа
default: return null } } /** * Хелпер для создания объекта коллизии */ export function createCollision( transition1: TimelineTransition, transition2: TimelineTransition, type: TransitionCollision["type"], severity: TransitionCollision["severity"] = "warning", message?: string, ): TransitionCollision { const defaultMessages = { overlap: "Переходы пересекаются по времени", adjacent: "Переходы расположены слишком близко", clip_boundary: "Переход выходит за границы клипа", } return { transition1, transition2, type, severity, message: message || defaultMessages[type] || "Обнаружена коллизия переходов", } }