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" />
+ );
+ })()}
);