import { useMemo } from 'react'; import { Check, Plus } from 'lucide-react'; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { ScrollArea } from '@/components/ui/scroll-area'; import { WIDGET_DEFINITIONS, WIDGET_CATEGORIES } from '@/lib/sidebarWidgets'; import type { WidgetConfig } from '@/contexts/AppContext'; import { cn } from '@/lib/utils'; interface WidgetPickerDialogProps { open: boolean; onOpenChange: (open: boolean) => void; currentWidgets: WidgetConfig[]; onAdd: (id: string) => void; onRemove: (id: string) => void; } /** Dialog for adding/removing widgets from the sidebar. */ export function WidgetPickerDialog({ open, onOpenChange, currentWidgets, onAdd, onRemove }: WidgetPickerDialogProps) { const activeIds = useMemo(() => new Set(currentWidgets.map((w) => w.id)), [currentWidgets]); // Group widgets by category const grouped = useMemo(() => { const groups: Record = {}; for (const w of WIDGET_DEFINITIONS) { (groups[w.category] ??= []).push(w); } return groups; }, []); return ( Add Widget
{Object.entries(grouped).map(([category, widgets]) => (

{WIDGET_CATEGORIES[category] ?? category}

{widgets.map((widget) => { const isActive = activeIds.has(widget.id); const Icon = widget.icon; return ( ); })}
))}
); }