import { ReactNode } from 'react'; import { useSortable } from '@dnd-kit/sortable'; import { CSS } from '@dnd-kit/utilities'; import { GripVertical, X, Maximize2, Minimize2, Square } from 'lucide-react'; import { cn } from '@/lib/utils'; import { DashboardWidget } from '@/pages/Dashboard'; import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; interface DraggableWidgetProps { widget: DashboardWidget; children: ReactNode; onRemove: () => void; onResize: (size: 'small' | 'medium' | 'large') => void; isDragging?: boolean; } const DraggableWidget = ({ widget, children, onRemove, onResize, isDragging }: DraggableWidgetProps) => { const { attributes, listeners, setNodeRef, transform, transition, } = useSortable({ id: widget.id }); const style = { transform: CSS.Transform.toString(transform), transition, }; const sizeClasses = { small: '', medium: 'md:col-span-1', large: 'md:col-span-2', }; return (
{/* Header with drag handle */}
{widget.name} {/* Size controls */} onResize('small')} className="cursor-pointer"> Lille onResize('medium')} className="cursor-pointer"> Medium onResize('large')} className="cursor-pointer"> Stor {/* Remove button */}
{/* Widget content */}
{children}
{/* Corner accents */}
); }; export default DraggableWidget;