"use client" import React, { useState } from "react" import { DndContext, closestCenter, KeyboardSensor, PointerSensor, useSensor, useSensors, DragEndEvent, DragOverlay, DragStartEvent, } from "@dnd-kit/core" import { SortableContext, sortableKeyboardCoordinates, rectSortingStrategy, arrayMove, } from "@dnd-kit/sortable" import { Button } from "@/components/ui/button" import { Edit3, X, Check, RotateCcw } from "lucide-react" import { WidgetConfig } from "@/hooks/useWidgetLayout" import { motion, AnimatePresence } from "framer-motion" interface DashboardEditorProps { widgets: WidgetConfig[] isEditMode: boolean onToggleEditMode: () => void onReorder: (activeId: string, overId: string) => void onReset: () => void children: React.ReactNode } export function DashboardEditor({ widgets, isEditMode, onToggleEditMode, onReorder, onReset, children }: DashboardEditorProps) { const [activeId, setActiveId] = useState(null) const sensors = useSensors( useSensor(PointerSensor, { activationConstraint: { distance: 8, }, }), useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates, }) ) const handleDragStart = (event: DragStartEvent) => { setActiveId(event.active.id as string) } const handleDragEnd = (event: DragEndEvent) => { const { active, over } = event if (over && active.id !== over.id) { onReorder(active.id as string, over.id as string) } setActiveId(null) } const handleDragCancel = () => { setActiveId(null) } return ( w.id)} strategy={rectSortingStrategy} > {children} {/* Edit Mode Banner */} {isEditMode && (
Editing Dashboard • Drag widgets to reorder
)} ) } // Edit button component to add to the header export function EditDashboardButton({ isEditMode, onToggle }: { isEditMode: boolean onToggle: () => void }) { return ( ) }