diff --git a/web/src/components/Map.tsx b/web/src/components/Map.tsx index 03337ed..67513ea 100644 --- a/web/src/components/Map.tsx +++ b/web/src/components/Map.tsx @@ -58,7 +58,7 @@ export const Map: React.FC = ({ const mapContainerClasses = flush ? `w-full h-full overflow-hidden relative ${className}` - : `${className} relative overflow-hidden rounded-lg border border-neutral-700 bg-neutral-800/50`; + : `${className} relative overflow-hidden rounded-xl border border-neutral-700 bg-neutral-800/50`; if (!apiKeyAvailable) { return ( diff --git a/web/src/components/Nav.tsx b/web/src/components/Nav.tsx index 2c7d456..cbda634 100644 --- a/web/src/components/Nav.tsx +++ b/web/src/components/Nav.tsx @@ -116,14 +116,18 @@ export const Nav: React.FC = ({ connectionStatus }) => { return ( <> {/* Mobile header (always visible on mobile) */} -
+
-
+ isMobileView && setIsMobileMenuOpen(false)} + >

{SITE_TITLE}

-
+ +
+ - -
-
- - )} + +
+
); diff --git a/web/src/components/dashboard/MeshCard.tsx b/web/src/components/dashboard/MeshCard.tsx index 1007730..eacd0fb 100644 --- a/web/src/components/dashboard/MeshCard.tsx +++ b/web/src/components/dashboard/MeshCard.tsx @@ -2,7 +2,8 @@ import React from "react"; import { Battery, MapPin, Thermometer, Network, BoomBox } from "lucide-react"; import { Counter } from "../Counter"; import { NodeData } from "../../store/slices/aggregatorSlice"; -import { getActivityLevel, getNodeColors, ActivityLevel } from "../../lib/activity"; +import { getActivityLevel, getNodeColors } from "../../lib/activity"; +import { cn } from "@/lib/cn"; export interface MeshCardProps { type: "node" | "gateway"; @@ -45,17 +46,6 @@ export const MeshCard: React.FC = ({ const activityLevel = getActivityLevel(lastHeard, type === "gateway"); const colors = getNodeColors(activityLevel, type === "gateway"); - // Get card style based on activity - const getCardStyle = () => { - if (activityLevel === ActivityLevel.RECENT) { - return "bg-neutral-800 hover:bg-neutral-700"; - } else if (activityLevel === ActivityLevel.ACTIVE) { - return "bg-neutral-800/80 hover:bg-neutral-700/80"; - } else { - return "bg-neutral-800/50 hover:bg-neutral-800"; - } - }; - // Get icon style based on activity const getIconStyle = () => { return colors.background + " " + colors.textClass; @@ -69,10 +59,10 @@ export const MeshCard: React.FC = ({ return (
-
+
{getIcon()}
@@ -98,7 +88,7 @@ export const MeshCard: React.FC = ({
{timeString}
diff --git a/web/src/components/dashboard/NetworkMap.tsx b/web/src/components/dashboard/NetworkMap.tsx index 82a3418..d6dc67d 100644 --- a/web/src/components/dashboard/NetworkMap.tsx +++ b/web/src/components/dashboard/NetworkMap.tsx @@ -609,8 +609,8 @@ function getMarkerIcon(node: MapNode): MarkerIconConfig { path: google.maps.SymbolPath.CIRCLE, scale: 12, fillColor: colors.fill, - fillOpacity: 0.8, + fillOpacity: 1, strokeColor: colors.stroke, - strokeWeight: 4, + strokeWeight: 2, }; } diff --git a/web/src/components/dashboard/NodeList.tsx b/web/src/components/dashboard/NodeList.tsx index 767f1d7..cd492be 100644 --- a/web/src/components/dashboard/NodeList.tsx +++ b/web/src/components/dashboard/NodeList.tsx @@ -31,8 +31,6 @@ export const NodeList: React.FC = () => { navigate({ to: "/node/$nodeId", params: { nodeId: nodeId.toString(16) } }); }; - // Instead of early return, we'll handle the empty state in the JSX - return (
diff --git a/web/src/components/packets/MapReportPacket.tsx b/web/src/components/packets/MapReportPacket.tsx index 4cd9a21..8727283 100644 --- a/web/src/components/packets/MapReportPacket.tsx +++ b/web/src/components/packets/MapReportPacket.tsx @@ -293,10 +293,17 @@ export const MapReportPacket: React.FC = ({ packet }) => { )}
{/* Position information */} -
+
+ + diff --git a/web/src/components/packets/PositionPacket.tsx b/web/src/components/packets/PositionPacket.tsx index c7cf746..ce94ba4 100644 --- a/web/src/components/packets/PositionPacket.tsx +++ b/web/src/components/packets/PositionPacket.tsx @@ -35,7 +35,7 @@ export const PositionPacket: React.FC = ({ packet }) => { >
- + = ({ packet }) => {
{waypoint.name}
)} - + {latitude !== undefined && ( )} diff --git a/web/src/components/ui/KeyValuePair.tsx b/web/src/components/ui/KeyValuePair.tsx index 1ba6163..a10116c 100644 --- a/web/src/components/ui/KeyValuePair.tsx +++ b/web/src/components/ui/KeyValuePair.tsx @@ -94,8 +94,22 @@ export const KeyValueGrid: React.FC<{ columns?: number; className?: string; }> = ({ children, columns = 2, className }) => { + // Generate the appropriate grid columns class based on the columns prop + let gridColsClass = 'grid-cols-2'; // Default + + if (className && className.includes('grid-cols-')) { + // If className already includes a grid-cols class, don't add another one + gridColsClass = ''; + } else if (columns === 1) { + gridColsClass = 'grid-cols-1'; + } else if (columns === 3) { + gridColsClass = 'grid-cols-3'; + } else if (columns === 4) { + gridColsClass = 'grid-cols-4'; + } + return ( -
+
{children}
); diff --git a/web/src/routes/map.tsx b/web/src/routes/map.tsx index 099a26a..7b9cf71 100644 --- a/web/src/routes/map.tsx +++ b/web/src/routes/map.tsx @@ -24,7 +24,7 @@ function MapPage() { return ( -
+
-
+