import { LatLng } from 'leaflet' import { MapContainer } from 'react-leaflet' import { ContextWrapper } from '#components/AppShell/ContextWrapper' import { useStoredInviteCode } from './hooks/useStoredInviteCode' import { UtopiaMapInner } from './UtopiaMapInner' import type { InviteApi } from '#types/InviteApi' import type { GeoJsonObject } from 'geojson' /** * This component creates the map. * ```tsx * * ``` * You can define its {@link Layer | `Layers`} as supcomponents. * ```tsx * * * * * ``` * You can also pass {@link Tags | `Tags`} or {@link Permissions | `Permissions`} as subcomponents. * ```tsx * * ... * * * * ``` * @category Map */ function UtopiaMap({ height = '500px', width = '100%', center = [50.6, 9.5], zoom = 10, children, geo, showFilterControl = false, showGratitudeControl = false, showLayerControl = true, showZoomControl = false, showThemeControl = false, showFullscreenControl = false, defaultTheme, donationWidget, expandLayerControl, tileServerUrl, tileServerAttribution, inviteApi, tilesType = 'raster', maplibreStyle, zoomOffset, tileSize, }: { /** height of the map (default '500px') */ height?: string /** width of the map (default '100%') */ width?: string /** initial centered position of the map (default [50.6, 9.5]) */ center?: [number, number] /** initial zoom level of the map (default 10) */ zoom?: number /** React child-components */ children?: React.ReactNode /** GeoJSON to display on the map */ geo?: GeoJsonObject /** show the filter control widget (default false) */ showFilterControl?: boolean /** show the gratitude control widget (default false) */ showLayerControl?: boolean /** show the layer control widget (default true) */ showGratitudeControl?: boolean /** show zoom control widget (default false) */ showZoomControl?: boolean /** show a widget to switch the theme */ showThemeControl?: boolean /** show fullscreen control widget (default false) */ showFullscreenControl?: boolean /** the defaut theme */ defaultTheme?: string /** ask to donate to the Utopia Project OpenCollective campaign (default false) */ donationWidget?: boolean /** open layer control on map initialisation */ expandLayerControl?: boolean /** configure a custom tile server */ tileServerUrl?: string /** configure a custom tile server attribution */ tileServerAttribution?: string /** API to redeem invite codes */ inviteApi: InviteApi /** tiles type: 'raster' or 'maplibre' (default 'raster') */ tilesType?: 'raster' | 'maplibre' /** MapLibre style URL for vector tiles (default: OpenFreeMap Liberty) */ maplibreStyle?: string /** zoom offset which is needed for some raster tile provider (eg. Mapbox) */ zoomOffset?: number /** tile size (default 256) */ tileSize?: number }) { // Check for invite code in localStorage useStoredInviteCode() return ( {children} ) } export { UtopiaMap }