From 9b1ddf6dcce00eeb164dd1b7a08a19809f5f0836 Mon Sep 17 00:00:00 2001 From: Christopher Hight Date: Thu, 20 Aug 2026 12:51:58 -0700 Subject: [PATCH] Refactor widget library UI code --- .../components/dashboard/SettingsButton.jsx | 167 ++++++++++-------- client/src/theme.js | 4 +- 2 files changed, 94 insertions(+), 77 deletions(-) diff --git a/client/src/components/dashboard/SettingsButton.jsx b/client/src/components/dashboard/SettingsButton.jsx index c14ab21..6139ca0 100644 --- a/client/src/components/dashboard/SettingsButton.jsx +++ b/client/src/components/dashboard/SettingsButton.jsx @@ -28,9 +28,10 @@ export function SettingsButton() { const recipe = useRecipe({key: "glassTab"}); const tabStyles = recipe(); - // Pull the glass container styles for the dropdown + // Pull the glass container styles for the dropdown and modal const panelRecipe = useSlotRecipe({key: "glassPanel"}); const panelStyles = panelRecipe({layout: "dropdown"}); + const modalStyles = panelRecipe({layout: "popover"}); const [isLibraryOpen, setIsLibraryOpen] = useState(false); @@ -123,88 +124,104 @@ export function SettingsButton() { Edit Layout - + - setIsLibraryOpen(true)} - cursor="pointer" - _hover={{ WebkitTextStroke: "0.5px currentColor" }} + setIsLibraryOpen(true)} + cursor="pointer" + _hover={{ + bg: {base: "rgba(0, 0, 0, 0.05)", _dark: "rgba(255, 255, 255, 0.1)"}, + WebkitTextStroke: "0.5px currentColor" + }} + > + Widget Library + + + + + )} + + {/* THE WIDGET LIBRARY MODAL (Controlled by isLibraryOpen) */} + setIsLibraryOpen(e.open)} + size="xl" + placement="center" + closeOnInteractOutside={true} + closeOnEscapeKeyDown={true} > - Widget Library - - - - - )} + {/* Soft blur can be added to the background behind the modal */} + {/**/} + - {/* THE WIDGET LIBRARY MODAL (Controlled by isLibraryOpen) */} - setIsLibraryOpen(e.open)} - size="xl" - placement="center" - closeOnInteractOutside={true} - closeOnEscapeKeyDown={true} - > - - - - - Add Dashboard Widgets - + - - - - {categories.map(cat => ( - {cat} - ))} - + + Widgets Shop + - {categories.map(cat => ( - - - {categorizedWidgets[cat].map(widget => ( - - {widget.name} - {widget.description} + + + + {categories.map(cat => ( + {cat} + ))} + - - Add - to Grid: - - {Object.keys(widget.allowedSizes).map(sizeKey => ( - handleAddWidget(widget.id, sizeKey)} - colorScheme="gray" - variant="subtle" - px={3} - py={1} - borderRadius="full" - cursor="pointer" - _hover={{bg: "blue.50", color: "blue.600", transform: "scale(1.05)"}} - transition="all 0.2s" + {categories.map(cat => ( + + + {categorizedWidgets[cat].map(widget => ( + - - {sizeKey.charAt(0).toUpperCase() + sizeKey.slice(1)} - + {widget.name} + {widget.description} + + + + Add to Grid: + + + {Object.keys(widget.allowedSizes).map(sizeKey => ( + handleAddWidget(widget.id, sizeKey)} + color={{base: "blue.600", _dark: "blue.300"}} + > + + {sizeKey.charAt(0).toUpperCase() + sizeKey.slice(1)} + + ))} + + + ))} - - - - ))} - - - ))} - - - - - - + + + ))} + + + + + + ); } \ No newline at end of file diff --git a/client/src/theme.js b/client/src/theme.js index 4001470..d59c24f 100644 --- a/client/src/theme.js +++ b/client/src/theme.js @@ -220,8 +220,8 @@ const glassPanelRecipe = defineSlotRecipe({ bg: { base: "rgba(255, 255, 255, 0.75)", _dark: "rgba(20, 22, 25, 0.8)" }, // OVERRIDES: Increase the blur just to smooth out any stubborn gridlines - backdropFilter: "blur(20px)", - WebkitBackdropFilter: "blur(20px)", + backdropFilter: "blur(15px)", + WebkitBackdropFilter: "blur(15px)", } } }