diff --git a/Data/Server/WebUI/src/Navigation_Sidebar.jsx b/Data/Server/WebUI/src/Navigation_Sidebar.jsx index b9369eb..fba6543 100644 --- a/Data/Server/WebUI/src/Navigation_Sidebar.jsx +++ b/Data/Server/WebUI/src/Navigation_Sidebar.jsx @@ -38,29 +38,56 @@ function NavigationSidebar({ currentPage, onNavigate }) { sx={{ pl: indent ? 4 : 2, py: 1, - color: "#ccc", + color: active ? "#e6f2ff" : "#ccc", position: "relative", - bgcolor: active ? "#2a2a2a" : "transparent", - "&:hover": { bgcolor: "#2c2c2c" } + background: active + ? "linear-gradient(90deg, rgba(88,166,255,0.10) 0%, rgba(88,166,255,0.03) 60%, rgba(88,166,255,0.00) 100%)" + : "transparent", + borderTopRightRadius: 8, + borderBottomRightRadius: 8, + boxShadow: active + ? "inset 0 0 0 1px rgba(88,166,255,0.25)" + : "none", + transition: "background 160ms ease, box-shadow 160ms ease, color 160ms ease", + "&:hover": { + background: active + ? "linear-gradient(90deg, rgba(88,166,255,0.14) 0%, rgba(88,166,255,0.06) 60%, rgba(88,166,255,0.00) 100%)" + : "#2c2c2c" + } }} + selected={active} > {icon && ( - + {icon} )} - + ); }; @@ -78,6 +105,9 @@ function NavigationSidebar({ currentPage, onNavigate }) { > {/* Sites */} + {(() => { + const groupActive = currentPage === "sites"; + return ( setExpandedNav((s) => ({ ...s, sites: e }))} @@ -87,7 +117,26 @@ function NavigationSidebar({ currentPage, onNavigate }) { > } - sx={{ backgroundColor: "#2c2c2c", minHeight: "36px", "& .MuiAccordionSummary-content": { margin: 0 } }} + sx={{ + position: "relative", + background: groupActive + ? "linear-gradient(90deg, rgba(88,166,255,0.08) 0%, rgba(88,166,255,0.00) 100%)" + : "#2c2c2c", + minHeight: "36px", + "& .MuiAccordionSummary-content": { margin: 0 }, + "&::before": { + content: '""', + position: "absolute", + left: 0, + top: 6, + bottom: 6, + width: groupActive ? 2 : 0, + bgcolor: "#58a6ff", + borderTopRightRadius: 2, + borderBottomRightRadius: 2, + transition: "width 160ms ease" + } + }} > Sites @@ -97,7 +146,12 @@ function NavigationSidebar({ currentPage, onNavigate }) { } label="All Sites" pageKey="sites" /> + ); + })()} {/* Devices */} + {(() => { + const groupActive = currentPage === "devices"; + return ( setExpandedNav((s) => ({ ...s, devices: e }))} @@ -107,7 +161,26 @@ function NavigationSidebar({ currentPage, onNavigate }) { > } - sx={{ backgroundColor: "#2c2c2c", minHeight: "36px", "& .MuiAccordionSummary-content": { margin: 0 } }} + sx={{ + position: "relative", + background: groupActive + ? "linear-gradient(90deg, rgba(88,166,255,0.08) 0%, rgba(88,166,255,0.00) 100%)" + : "#2c2c2c", + minHeight: "36px", + "& .MuiAccordionSummary-content": { margin: 0 }, + "&::before": { + content: '""', + position: "absolute", + left: 0, + top: 6, + bottom: 6, + width: groupActive ? 2 : 0, + bgcolor: "#58a6ff", + borderTopRightRadius: 2, + borderBottomRightRadius: 2, + transition: "width 160ms ease" + } + }} > Devices @@ -117,8 +190,13 @@ function NavigationSidebar({ currentPage, onNavigate }) { } label="Devices" pageKey="devices" /> + ); + })()} {/* Automation */} + {(() => { + const groupActive = ["jobs", "scripts", "workflows", "community"].includes(currentPage); + return ( setExpandedNav((s) => ({ ...s, automation: e }))} @@ -128,7 +206,26 @@ function NavigationSidebar({ currentPage, onNavigate }) { > } - sx={{ backgroundColor: "#2c2c2c", minHeight: "36px", "& .MuiAccordionSummary-content": { margin: 0 } }} + sx={{ + position: "relative", + background: groupActive + ? "linear-gradient(90deg, rgba(88,166,255,0.08) 0%, rgba(88,166,255,0.00) 100%)" + : "#2c2c2c", + minHeight: "36px", + "& .MuiAccordionSummary-content": { margin: 0 }, + "&::before": { + content: '""', + position: "absolute", + left: 0, + top: 6, + bottom: 6, + width: groupActive ? 2 : 0, + bgcolor: "#58a6ff", + borderTopRightRadius: 2, + borderBottomRightRadius: 2, + transition: "width 160ms ease" + } + }} > Automation @@ -141,8 +238,13 @@ function NavigationSidebar({ currentPage, onNavigate }) { } label="Community Content" pageKey="community" /> + ); + })()} {/* Filters & Groups */} + {(() => { + const groupActive = currentPage === "filters" || currentPage === "groups"; + return ( setExpandedNav((s) => ({ ...s, filters: e }))} @@ -152,7 +254,26 @@ function NavigationSidebar({ currentPage, onNavigate }) { > } - sx={{ backgroundColor: "#2c2c2c", minHeight: "36px", "& .MuiAccordionSummary-content": { margin: 0 } }} + sx={{ + position: "relative", + background: groupActive + ? "linear-gradient(90deg, rgba(88,166,255,0.08) 0%, rgba(88,166,255,0.00) 100%)" + : "#2c2c2c", + minHeight: "36px", + "& .MuiAccordionSummary-content": { margin: 0 }, + "&::before": { + content: '""', + position: "absolute", + left: 0, + top: 6, + bottom: 6, + width: groupActive ? 2 : 0, + bgcolor: "#58a6ff", + borderTopRightRadius: 2, + borderBottomRightRadius: 2, + transition: "width 160ms ease" + } + }} > Filters & Groups @@ -163,6 +284,8 @@ function NavigationSidebar({ currentPage, onNavigate }) { } label="Groups" pageKey="groups" /> + ); + })()} );