import { Maximize2, MoveHorizontal } from "lucide-react" import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip" import { cn } from "@/lib/utils" import { useEditModeContext } from "../../hooks/use-edit-mode" import { TimelineClip } from "../../types" import { EDIT_MODES } from "../../types/edit-modes" interface SlipSlideHandlesProps { clip: TimelineClip isHovered: boolean isActive: boolean timeScale: number onSlipStart?: (mouseX: number) => void onSlideStart?: (mouseX: number) => void } export function SlipSlideHandles({ clip, isHovered, isActive, timeScale, onSlipStart, onSlideStart, }: SlipSlideHandlesProps) { const { editMode } = useEditModeContext() // Only show handles in slip or slide mode when hovering if (!isHovered || (editMode !== EDIT_MODES.SLIP && editMode !== EDIT_MODES.SLIDE)) { return null } const clipWidth = clip.duration * timeScale const clipLeft = clip.startTime * timeScale // Slip mode - show media boundaries if (editMode === EDIT_MODES.SLIP) { const mediaDuration = clip.mediaDuration || clip.duration const totalMediaWidth = mediaDuration * timeScale const offsetPixels = clip.offset * timeScale return ( <> {/* Media extent indicators */}
{/* Left media boundary */} {offsetPixels > 0 &&
} {/* Right media boundary */} {mediaDuration - clip.offset - clip.duration > 0 && (
)} {/* Available media indicator */}
{/* Slip handle */}
{ e.stopPropagation() onSlipStart?.(e.clientX) }} >

Slip Edit (Y)

Drag to slip media content

) } // Slide mode - show adjacent clip relationships if (editMode === EDIT_MODES.SLIDE) { return ( <> {/* Slide direction indicators */}
{/* Left arrow */}
{/* Right arrow */}
{/* Slide handle */}
{ e.stopPropagation() onSlideStart?.(e.clientX) }} >

Slide Edit (U)

Drag to slide clip

) } return null }