'use client' import { NavigationControl, FullscreenControl, GeolocateControl, ScaleControl, } from 'react-map-gl/maplibre' import type { FitBoundsOptions } from 'maplibre-gl' type ControlPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' export interface MapControlsProps { position?: ControlPosition showNavigation?: boolean showFullscreen?: boolean /** Show maplibre's raw `GeolocateControl` (track mode). @default false */ showGeolocate?: boolean /** * Draw a heading arrow on the location dot. Forwarded to the control; a * no-op on maplibre versions without heading support. */ showUserHeading?: boolean /** * Draw the translucent accuracy circle around the dot. * @default true (maplibre default) */ showAccuracyCircle?: boolean /** Browser Geolocation API `PositionOptions` (enableHighAccuracy, timeout…). */ positionOptions?: PositionOptions /** Options used when the control eases the camera to the user's location. */ fitBoundsOptions?: FitBoundsOptions showScale?: boolean scaleUnit?: 'imperial' | 'metric' | 'nautical' } export function MapControls({ position = 'top-right', showNavigation = true, showFullscreen = false, showGeolocate = false, showUserHeading, showAccuracyCircle, positionOptions, fitBoundsOptions, showScale = false, scaleUnit = 'metric', }: MapControlsProps) { return ( <> {showNavigation && ( )} {showFullscreen && } {showGeolocate && ( )} {showScale && } ) }