From 7bf0984698e43b9aa2dd879f65951318ed410390 Mon Sep 17 00:00:00 2001 From: Maze <167211895+mazeincoding@users.noreply.github.com> Date: Sat, 31 Jan 2026 00:20:04 +0100 Subject: codebase overhaul (#697) --- apps/web/src/components/ui/draggable-item.tsx | 247 -------------------------- 1 file changed, 247 deletions(-) delete mode 100644 apps/web/src/components/ui/draggable-item.tsx (limited to 'apps/web/src/components/ui/draggable-item.tsx') diff --git a/apps/web/src/components/ui/draggable-item.tsx b/apps/web/src/components/ui/draggable-item.tsx deleted file mode 100644 index 9f5c7887..00000000 --- a/apps/web/src/components/ui/draggable-item.tsx +++ /dev/null @@ -1,247 +0,0 @@ -"use client"; - -import { AspectRatio } from "@/components/ui/aspect-ratio"; -import { Button } from "@/components/ui/button"; -import { - Tooltip, - TooltipContent, - TooltipTrigger, -} from "@/components/ui/tooltip"; -import { ReactNode, useState, useRef, useEffect } from "react"; -import { createPortal } from "react-dom"; -import { Plus } from "lucide-react"; -import { cn } from "@/lib/utils"; -import { usePlaybackStore } from "@/stores/playback-store"; -import { DragData } from "@/types/timeline"; - -export interface DraggableMediaItemProps { - name: string; - preview: ReactNode; - dragData: DragData; - onDragStart?: (e: React.DragEvent) => void; - onAddToTimeline?: (currentTime: number) => void; - aspectRatio?: number; - className?: string; - containerClassName?: string; - showPlusOnDrag?: boolean; - showLabel?: boolean; - rounded?: boolean; - variant?: "card" | "compact"; - isDraggable?: boolean; - isHighlighted?: boolean; -} - -export function DraggableMediaItem({ - name, - preview, - dragData, - onDragStart, - onAddToTimeline, - aspectRatio = 16 / 9, - className = "", - containerClassName, - showPlusOnDrag = true, - showLabel = true, - rounded = true, - variant = "card", - isDraggable = true, - isHighlighted = false, -}: DraggableMediaItemProps) { - const [isDragging, setIsDragging] = useState(false); - const [dragPosition, setDragPosition] = useState({ x: 0, y: 0 }); - const dragRef = useRef(null); - const currentTime = isDraggable - ? usePlaybackStore((state) => state.currentTime) - : 0; - const highlightClassName = "ring-2 ring-primary rounded-sm bg-primary/10"; - - const handleAddToTimeline = () => { - onAddToTimeline?.(currentTime); - }; - - const emptyImg = new window.Image(); - emptyImg.src = - "data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="; - - useEffect(() => { - if (!isDragging) return; - - const handleDragOver = (e: DragEvent) => { - setDragPosition({ x: e.clientX, y: e.clientY }); - }; - - document.addEventListener("dragover", handleDragOver); - - return () => { - document.removeEventListener("dragover", handleDragOver); - }; - }, [isDragging]); - - const handleDragStart = (e: React.DragEvent) => { - e.dataTransfer.setDragImage(emptyImg, 0, 0); - - // Set drag data - e.dataTransfer.setData( - "application/x-media-item", - JSON.stringify(dragData) - ); - e.dataTransfer.effectAllowed = "copy"; - - // Set initial position and show custom drag preview - setDragPosition({ x: e.clientX, y: e.clientY }); - setIsDragging(true); - - onDragStart?.(e); - }; - - const handleDragEnd = () => { - setIsDragging(false); - }; - - return ( - <> - {variant === "card" ? ( -
-
- - {preview} - {!isDragging && ( - - )} - - {showLabel && ( - - {name.length > 8 - ? `${name.slice(0, 16)}...${name.slice(-3)}` - : name} - - )} -
-
- ) : ( -
-
-
- {preview} -
- {name} -
-
- )} - - {/* Custom drag preview */} - {isDraggable && - isDragging && - typeof document !== "undefined" && - createPortal( -
-
- -
- {preview} -
- {showPlusOnDrag && ( - - )} -
-
-
, - document.body - )} - - ); -} - -function PlusButton({ - className, - onClick, - tooltipText, -}: { - className?: string; - onClick?: () => void; - tooltipText?: string; -}) { - const button = ( - - ); - - if (tooltipText) { - return ( - - {button} - -

{tooltipText}

-
-
- ); - } - - return button; -} -- cgit v1.3.1