@@ -25,11 +25,13 @@ import { TimeSelector } from '@/components/controls/TimeSelector';
2525import { ModeSelector } from '@/components/controls/ModeSelector' ;
2626import { CategoryToggles } from '@/components/controls/CategoryToggles' ;
2727import { SurpriseMe } from '@/components/controls/SurpriseMe' ;
28+ import { ThemeToggle } from '@/components/controls/ThemeToggle' ;
2829import { DestinationCard } from '@/components/destination/DestinationCard' ;
2930import { BandLegend } from '@/components/legend/BandLegend' ;
3031import { CoachMark } from '@/components/onboarding/CoachMark' ;
3132import { tryGeolocate } from '@/lib/geolocation' ;
3233import { useIsochroneBands } from '@/lib/hooks/useIsochroneBands' ;
34+ import { useTheme } from '@/lib/hooks/useTheme' ;
3335import { useIsMobile } from '@/lib/hooks/useIsMobile' ;
3436import { usePois } from '@/lib/hooks/usePois' ;
3537import { bboxOf , isInsidePolygon } from '@/lib/polygon' ;
@@ -56,7 +58,8 @@ export function HomeInner() {
5658 ( ) => new StadiaTileProvider ( { apiKey : PUBLIC_CONFIG . stadiaApiKey || undefined } ) ,
5759 [ ] ,
5860 ) ;
59- const tileStyle = useMemo ( ( ) => tileProvider . getStyle ( 'light' ) , [ tileProvider ] ) ;
61+ const { theme, toggle : toggleTheme } = useTheme ( ) ;
62+ const tileStyle = useMemo ( ( ) => tileProvider . getStyle ( theme ) , [ tileProvider , theme ] ) ;
6063
6164 // Initial state: parse from URL on first render, fall back to public defaults.
6265 const initialState = useMemo < AppUrlState > ( ( ) => {
@@ -262,6 +265,7 @@ export function HomeInner() {
262265 onOriginDragEnd = { onOriginDragEnd }
263266 bands = { data }
264267 selectedMinutes = { state . minutes }
268+ theme = { theme }
265269 originLoading = { isLoading }
266270 onPickDestination = { onPickDestination }
267271 onMapBackgroundClick = { onMapBackgroundClick }
@@ -300,8 +304,9 @@ export function HomeInner() {
300304 </ div >
301305
302306 < header className = "pointer-events-none absolute left-0 right-0 top-0 flex items-start gap-3 p-4" >
303- < div className = "pointer-events-auto" >
307+ < div className = "pointer-events-auto flex items-start gap-2 " >
304308 < LogoChip />
309+ < ThemeToggle theme = { theme } onToggle = { toggleTheme } />
305310 </ div >
306311 < ControlBar className = "mx-auto hidden md:flex" >
307312 < ModeSelector value = { state . mode } onChange = { onModeChange } />
@@ -322,7 +327,7 @@ export function HomeInner() {
322327 </ header >
323328
324329 < div className = "absolute bottom-4 left-4 hidden md:block" >
325- < BandLegend selectedMinutes = { state . minutes } />
330+ < BandLegend selectedMinutes = { state . minutes } theme = { theme } />
326331 </ div >
327332
328333 { isMobile && (
@@ -345,7 +350,7 @@ export function HomeInner() {
345350 : `Pick one of ${ visiblePois . length } reachable places`
346351 }
347352 />
348- < BandLegend selectedMinutes = { state . minutes } />
353+ < BandLegend selectedMinutes = { state . minutes } theme = { theme } />
349354 </ >
350355 }
351356 />
0 commit comments