import { Link2, RotateCcw, ScissorsLineDashed, Unlink2 } from "lucide-react" import { useState } from "react" import { Button } from "@/components/ui/button" import { Label } from "@/components/ui/label" import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover" import { Separator } from "@/components/ui/separator" import { Slider } from "@/components/ui/slider" import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip" import { useJLCuts } from "../../hooks/use-jl-cuts" import { useTimeline } from "../../hooks/use-timeline" import type { TimelineClip } from "../../types/timeline" interface JLCutToolProps { clip: TimelineClip className?: string } export function JLCutTool({ clip, className }: JLCutToolProps) { const { uiState } = useTimeline() const { createJCut, createLCut, resetCut, linkClips, unlinkClips, getLinkedClip, getLinkedPair, hasJLCut, isVideoClip, isAudioClip, } = useJLCuts() const [offset, setOffset] = useState(0.5) // Секунды const linkedClip = getLinkedClip(clip.id) const linkedPair = getLinkedPair(clip.id) const hasJL = hasJLCut(clip.id) const canCreateJLCut = linkedClip && ((isVideoClip(clip) && isAudioClip(linkedClip)) || (isAudioClip(clip) && isVideoClip(linkedClip))) const handleCreateJCut = () => { createJCut(clip.id, offset) } const handleCreateLCut = () => { createLCut(clip.id, offset) } const handleReset = () => { resetCut(clip.id) } const handleUnlink = () => { unlinkClips(clip.id) } // Найти потенциальный клип для связывания const findLinkableClip = (): TimelineClip | null => { // Логика поиска клипа на другом треке в том же временном диапазоне // Это упрощенная версия - в реальности нужна более сложная логика return null } const linkableClip = !linkedClip ? findLinkableClip() : null return (

J-Cut / L-Cut Tools

Create audio/video offset transitions

{/* Link/Unlink controls */}
{linkedClip ? (
Linked to: {linkedClip.name}
) : (
{linkableClip ? ( ) : (

No clips available to link

)}
)}
{canCreateJLCut && ( <> {/* Offset control */}
setOffset(value)} min={0.1} max={5} step={0.1} className="w-full" />
{/* J/L Cut buttons */}

Audio starts before video

Audio continues after video

{hasJL && ( )} )}
) }