diff --git a/web/src/app/components/ControlsPanel.tsx b/web/src/app/components/ControlsPanel.tsx
index 1ee99f1..a7324ec 100644
--- a/web/src/app/components/ControlsPanel.tsx
+++ b/web/src/app/components/ControlsPanel.tsx
@@ -15,21 +15,53 @@ interface ControlsPanelProps {
onChangeRadius: (v: number) => void;
heatIntensity: number;
onChangeIntensity: (v: number) => void;
+ gradientRoutes: boolean;
+ onToggleGradientRoutes: (v: boolean) => void;
}
-export default function ControlsPanel({ panelOpen, onTogglePanel, mapStyleChoice, onChangeStyle, heatVisible, onToggleHeat, pointsVisible, onTogglePoints, heatRadius, onChangeRadius, heatIntensity, onChangeIntensity }: ControlsPanelProps) {
+export default function ControlsPanel({ panelOpen, onTogglePanel, mapStyleChoice, onChangeStyle, heatVisible, onToggleHeat, pointsVisible, onTogglePoints, heatRadius, onChangeRadius, heatIntensity, onChangeIntensity, gradientRoutes, onToggleGradientRoutes }: ControlsPanelProps) {
+ const panelStyle = {
+ backgroundColor: 'var(--panel-darker)',
+ color: '#f9fafb',
+ border: '2px solid var(--panel-medium)',
+ boxShadow: '0 20px 60px rgba(0,0,0,0.4), 0 4px 12px rgba(0,0,0,0.2)',
+ backdropFilter: 'blur(20px)',
+ zIndex: 20, // Ensure proper layering
+ fontWeight: '500'
+ };
+
+ const selectStyle = {
+ backgroundColor: 'var(--panel-dark)',
+ color: '#f9fafb',
+ border: '2px solid var(--panel-medium)',
+ fontSize: '14px',
+ fontWeight: '500',
+ padding: '8px 12px',
+ borderRadius: '8px',
+ outline: 'none'
+ };
+
return (
-
-
-
Map Controls
-
+
+
+
Map Controls
+
{panelOpen && (
<>
-
+
+
+ onToggleGradientRoutes(e.target.checked)} />
+
+
onChangeRadius(Number(e.target.value))} style={{ width: '100%' }} />
diff --git a/web/src/app/components/CrashDataControls.tsx b/web/src/app/components/CrashDataControls.tsx
index f3fd22e..bba26fa 100644
--- a/web/src/app/components/CrashDataControls.tsx
+++ b/web/src/app/components/CrashDataControls.tsx
@@ -6,9 +6,10 @@ import { UseCrashDataResult } from '../hooks/useCrashData';
interface CrashDataControlsProps {
crashDataHook: UseCrashDataResult;
onDataLoaded?: (dataCount: number) => void;
+ mapStyleChoice?: 'dark' | 'streets';
}
-export default function CrashDataControls({ crashDataHook, onDataLoaded }: CrashDataControlsProps) {
+export default function CrashDataControls({ crashDataHook, onDataLoaded, mapStyleChoice = 'dark' }: CrashDataControlsProps) {
const { data, loading, error, pagination, loadMore, refresh, yearFilter, setYearFilter } = crashDataHook;
const currentYear = new Date().getFullYear().toString();
const [selectedYear, setSelectedYear] = useState
(yearFilter || currentYear);
@@ -47,39 +48,40 @@ export default function CrashDataControls({ crashDataHook, onDataLoaded }: Crash
}, [data.length, onDataLoaded]);
return (
-
{/* Crash Density Legend */}
-
-
Crash Density
-
-
-
-
-
-
-
-
+
+
Crash Density
+
+
-
-
Low
-
High
+
+ Low
+ High
-
+
@@ -87,37 +89,42 @@ export default function CrashDataControls({ crashDataHook, onDataLoaded }: Crash
{/* Year Filter */}
-
-