import {useState, useMemo, useRef} from "react"; import { Button, Box, Text, Flex, Grid, Dialog, Tabs, Badge, Menu, HStack, useRecipe, useSlotRecipe } from "@chakra-ui/react"; import {Settings, Plus, LayoutGrid, Move, Save, X} from 'lucide-react'; import {useDashboardStore} from "../../store/useDashboardStore.jsx"; import {WIDGET_REGISTRY} from "../../constants/widgetRegistry.jsx"; export function SettingsButton() { // 1. ☁Store connections const isEditing = useDashboardStore(state => state.isEditing); const enterEditMode = useDashboardStore(state => state.enterEditMode); const saveEdit = useDashboardStore(state => state.saveEdit); const cancelEdit = useDashboardStore(state => state.cancelEdit); const addWidget = useDashboardStore(state => state.addWidget); const recipe = useRecipe({key: "glassTab"}); const tabStyles = recipe(); // Pull the glass container styles for the dropdown const panelRecipe = useSlotRecipe({key: "glassPanel"}); const panelStyles = panelRecipe({layout: "dropdown"}); const [isLibraryOpen, setIsLibraryOpen] = useState(false); // Smart Add Handler const handleAddWidget = (widgetId, sizeKey) => { enterEditMode(); addWidget(widgetId, sizeKey); }; const categorizedWidgets = useMemo(() => { return Object.entries(WIDGET_REGISTRY).reduce((acc, [id, widget]) => { const cat = widget.category || 'General'; if (!acc[cat]) acc[cat] = []; acc[cat].push({id, ...widget}); return acc; }, {}); }, []); const categories = Object.keys(categorizedWidgets); // use ref to capture html node for placing menu accordingly const menuRef = useRef(null); const getAnchorRect = () => { if (!menuRef.current) return null; return menuRef.current.getBoundingClientRect(); }; return ( <> {/* THE STATIC DROPDOWN MENU */}