@page-speed/maps 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/getMapLibreStyleUrl.ts","../../src/core/MapLibre.tsx"],"names":["jsxs","jsx","React","Marker","Map","GeolocateControl","NavigationControl"],"mappings":"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","file":"index.cjs","sourcesContent":["const MAPLIBRE_DEFAULT_STYLE_URL =\n \"https://basemaps.cartocdn.com/gl/positron-gl-style/style.json\";\nconst DEFAULT_STADIA_STYLE_URL =\n \"https://tiles.stadiamaps.com/styles/osm_bright.json\";\n\nconst STYLE_MAP: Record<string, string> = {\n default: DEFAULT_STADIA_STYLE_URL,\n \"alidade-smooth\": \"https://tiles.stadiamaps.com/styles/alidade_smooth.json\",\n \"alidade-smooth-dark\": \"https://tiles.stadiamaps.com/styles/alidade_smooth_dark.json\",\n \"maplibre-default\": MAPLIBRE_DEFAULT_STYLE_URL,\n \"osm-bright\": \"https://tiles.stadiamaps.com/styles/osm_bright.json\",\n \"stadia-outdoors\": \"https://tiles.stadiamaps.com/styles/outdoors.json\",\n \"stamen-toner\": \"https://tiles.stadiamaps.com/styles/stamen_toner.json\",\n \"stamen-terrain\": \"https://tiles.stadiamaps.com/styles/stamen_terrain.json\",\n \"stamen-watercolor\": \"https://tiles.stadiamaps.com/styles/stamen_watercolor.json\"\n};\n\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\nexport type MapLibreBuiltInStyle = keyof typeof STYLE_MAP;\n\nfunction isStadiaMapsUrl(url: string): boolean {\n try {\n const parsed = new URL(url);\n return parsed.hostname === \"tiles.stadiamaps.com\";\n } catch {\n return false;\n }\n}\n\nfunction assertStadiaApiKey(stadiaApiKey: string): void {\n if (!stadiaApiKey.trim()) {\n throw new Error(\n \"A non-empty stadiaApiKey is required for Stadia Maps style URLs.\"\n );\n }\n}\n\nexport function appendStadiaApiKey(\n styleUrl: string,\n stadiaApiKey: string\n): string {\n if (!isStadiaMapsUrl(styleUrl)) {\n return styleUrl;\n }\n\n assertStadiaApiKey(stadiaApiKey);\n\n const parsed = new URL(styleUrl);\n if (!parsed.searchParams.has(\"api_key\")) {\n parsed.searchParams.set(\"api_key\", stadiaApiKey);\n }\n\n return parsed.toString();\n}\n\nexport function getMapLibreStyleUrl(\n value: string | undefined,\n stadiaApiKey: string\n): string {\n const normalizedApiKey = stadiaApiKey.trim();\n\n if (!value || typeof value !== \"string\") {\n if (!normalizedApiKey) {\n return MAPLIBRE_DEFAULT_STYLE_URL;\n }\n return appendStadiaApiKey(DEFAULT_STADIA_STYLE_URL, normalizedApiKey);\n }\n\n if (STYLE_MAP[value]) {\n const mappedStyleUrl = STYLE_MAP[value];\n if (isStadiaMapsUrl(mappedStyleUrl) && !normalizedApiKey) {\n return MAPLIBRE_DEFAULT_STYLE_URL;\n }\n return appendStadiaApiKey(mappedStyleUrl, normalizedApiKey);\n }\n\n if (HTTP_URL_REGEX.test(value)) {\n if (isStadiaMapsUrl(value) && !normalizedApiKey) {\n return MAPLIBRE_DEFAULT_STYLE_URL;\n }\n return appendStadiaApiKey(value, normalizedApiKey);\n }\n\n if (!normalizedApiKey) {\n return MAPLIBRE_DEFAULT_STYLE_URL;\n }\n\n return appendStadiaApiKey(DEFAULT_STADIA_STYLE_URL, normalizedApiKey);\n}\n\nexport { DEFAULT_STADIA_STYLE_URL, MAPLIBRE_DEFAULT_STYLE_URL };\n","import React from \"react\";\nimport {\n GeolocateControl,\n Map,\n Marker,\n NavigationControl,\n type MapRef,\n type ViewStateChangeEvent\n} from \"react-map-gl/maplibre\";\n\nimport type {\n BasicMarkerInput,\n MapLibreMarker,\n MapLibreProps,\n MapViewState\n} from \"../types\";\nimport { appendStadiaApiKey, getMapLibreStyleUrl } from \"../utils\";\n\nconst DEFAULT_MAPLIBRE_CSS_HREF =\n \"https://cdn.jsdelivr.net/npm/maplibre-gl@5.18.0/dist/maplibre-gl.css\";\nconst MAPLIBRE_STYLESHEET_ID = \"page-speed-maplibre-gl-css\";\n\nfunction joinClassNames(...classNames: Array<string | undefined>): string {\n return classNames.filter(Boolean).join(\" \");\n}\n\nfunction ensureMapLibreStylesheet(href: string): void {\n if (typeof document === \"undefined\") {\n return;\n }\n\n const existingLink = document.getElementById(MAPLIBRE_STYLESHEET_ID);\n if (existingLink instanceof HTMLLinkElement) {\n if (existingLink.getAttribute(\"href\") !== href) {\n existingLink.setAttribute(\"href\", href);\n }\n return;\n }\n\n const matchingLink = Array.from(\n document.querySelectorAll(\"link[rel='stylesheet']\")\n ).find((link) => link.getAttribute(\"href\") === href);\n\n if (matchingLink instanceof HTMLLinkElement) {\n matchingLink.id = MAPLIBRE_STYLESHEET_ID;\n return;\n }\n\n const stylesheet = document.createElement(\"link\");\n stylesheet.id = MAPLIBRE_STYLESHEET_ID;\n stylesheet.rel = \"stylesheet\";\n stylesheet.href = href;\n stylesheet.dataset.pageSpeedMaps = \"maplibre-css\";\n document.head.appendChild(stylesheet);\n}\n\nfunction DefaultMarker({ marker }: { marker: MapLibreMarker }) {\n return (\n <div\n style={{\n cursor: marker.draggable ? \"grab\" : \"pointer\",\n transform: \"translate(-50%, -100%)\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n position: \"relative\"\n }}\n onClick={marker.onClick}\n >\n <svg\n aria-hidden=\"true\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill={marker.color || \"#3B82F6\"}\n style={{ filter: \"drop-shadow(0 2px 8px rgba(0,0,0,0.35))\" }}\n >\n <path d=\"M12 2C8.13 2 5 5.13 5 9c0 4.85 6.13 12.24 6.39 12.55a.75.75 0 0 0 1.16 0C12.87 21.24 19 13.85 19 9c0-3.87-3.13-7-7-7Zm0 9.75A2.75 2.75 0 1 1 12 6.25a2.75 2.75 0 0 1 0 5.5Z\" />\n </svg>\n {marker.label ? (\n <div\n style={{\n position: \"absolute\",\n bottom: -28,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n background: \"#FFFFFF\",\n borderRadius: 6,\n padding: \"2px 8px\",\n fontSize: 12,\n fontWeight: 500,\n whiteSpace: \"nowrap\",\n boxShadow: \"0 3px 10px rgba(0, 0, 0, 0.2)\"\n }}\n >\n {marker.label}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction normalizeMarkers(\n markers: (MapLibreMarker | BasicMarkerInput)[]\n): MapLibreMarker[] {\n return markers.map((marker, index) => {\n if (\n (marker as MapLibreMarker).lat !== undefined &&\n (marker as MapLibreMarker).lng !== undefined\n ) {\n return marker as MapLibreMarker;\n }\n\n const basicMarker = marker as BasicMarkerInput;\n return {\n id: basicMarker.id ?? index,\n lat: basicMarker.latitude,\n lng: basicMarker.longitude,\n color: basicMarker.color,\n draggable: basicMarker.draggable,\n label: basicMarker.label,\n element: basicMarker.element,\n onClick: basicMarker.onClick\n };\n });\n}\n\nexport function MapLibre({\n stadiaApiKey,\n mapLibreCssHref,\n viewState,\n onViewStateChange,\n mapStyle,\n center = viewState\n ? { lat: viewState.latitude ?? 0, lng: viewState.longitude ?? 0 }\n : { lat: 0, lng: 0 },\n zoom = viewState?.zoom ?? 14,\n styleUrl,\n markers = [],\n onMoveEnd,\n onClick,\n onMarkerDrag,\n className,\n style,\n children,\n showNavigationControl = true,\n showGeolocateControl = false,\n navigationControlPosition = \"bottom-right\",\n geolocateControlPosition = \"top-left\",\n flyToOptions = {}\n}: MapLibreProps) {\n const mapRef = React.useRef<MapRef>(null);\n const resolvedMapLibreCssHref =\n mapLibreCssHref && mapLibreCssHref.trim().length > 0\n ? mapLibreCssHref\n : DEFAULT_MAPLIBRE_CSS_HREF;\n\n const [internalViewState, setInternalViewState] = React.useState<MapViewState>({\n latitude: viewState?.latitude ?? center.lat,\n longitude: viewState?.longitude ?? center.lng,\n zoom: viewState?.zoom ?? zoom\n });\n\n const isUserInteracting = React.useRef(false);\n const isMarkerDragging = React.useRef(false);\n const dragAnimationFrame = React.useRef<number | null>(null);\n\n React.useEffect(() => {\n ensureMapLibreStylesheet(resolvedMapLibreCssHref);\n }, [resolvedMapLibreCssHref]);\n\n React.useEffect(() => {\n if (\n !mapRef.current ||\n !viewState ||\n isUserInteracting.current ||\n isMarkerDragging.current\n ) {\n return;\n }\n\n setInternalViewState((previous) => {\n const next = {\n latitude: viewState.latitude ?? previous.latitude,\n longitude: viewState.longitude ?? previous.longitude,\n zoom: viewState.zoom ?? previous.zoom\n };\n\n const hasChanged =\n previous.latitude !== next.latitude ||\n previous.longitude !== next.longitude ||\n previous.zoom !== next.zoom;\n\n if (!hasChanged) {\n return previous;\n }\n\n const {\n speed = 0.8,\n curve = 1.2,\n bearing = 0,\n easing = (t: number) => 1 - Math.pow(1 - t, 3)\n } = flyToOptions;\n\n mapRef.current?.flyTo({\n center: [next.longitude, next.latitude],\n zoom: next.zoom,\n speed,\n curve,\n bearing,\n easing,\n essential: true\n });\n\n return next;\n });\n }, [flyToOptions, viewState?.latitude, viewState?.longitude, viewState?.zoom]);\n\n const handleMoveStart = React.useCallback(() => {\n isUserInteracting.current = true;\n }, []);\n\n const handleMove = React.useCallback(\n (event: ViewStateChangeEvent) => {\n const nextViewState = event.viewState;\n setInternalViewState({\n latitude: nextViewState.latitude,\n longitude: nextViewState.longitude,\n zoom: nextViewState.zoom\n });\n\n onViewStateChange?.({\n latitude: Number(nextViewState.latitude.toFixed(6)),\n longitude: Number(nextViewState.longitude.toFixed(6)),\n zoom: Number(nextViewState.zoom.toFixed(2))\n });\n },\n [onViewStateChange]\n );\n\n const handleMoveEnd = React.useCallback(\n (event: ViewStateChangeEvent) => {\n isUserInteracting.current = false;\n\n if (!onMoveEnd) {\n return;\n }\n\n const map = event.target;\n const nextCenter = map.getCenter();\n const nextZoom = map.getZoom();\n const bounds = map.getBounds();\n\n onMoveEnd(\n {\n lat: Number(nextCenter.lat.toFixed(6)),\n lng: Number(nextCenter.lng.toFixed(6))\n },\n Number(nextZoom.toFixed(2)),\n bounds\n );\n },\n [onMoveEnd]\n );\n\n const handleMapClick = React.useCallback(\n (event: { lngLat: { lng: number; lat: number } }) => {\n if (!onClick) {\n return;\n }\n\n onClick({ latitude: event.lngLat.lat, longitude: event.lngLat.lng });\n },\n [onClick]\n );\n\n const normalizedMarkers = React.useMemo(\n () => normalizeMarkers(markers),\n [markers]\n );\n\n const markerElements = React.useMemo(\n () =>\n normalizedMarkers.map((marker) => (\n <Marker\n key={marker.id}\n longitude={marker.lng}\n latitude={marker.lat}\n draggable={marker.draggable}\n onDragStart={() => {\n isMarkerDragging.current = true;\n }}\n onDrag={(event) => {\n if (!mapRef.current) {\n return;\n }\n\n const nextLngLat = (event as { lngLat?: { lng?: number; lat?: number } }).lngLat;\n if (!nextLngLat || nextLngLat.lng === undefined || nextLngLat.lat === undefined) {\n return;\n }\n const draggedLng = nextLngLat.lng;\n const draggedLat = nextLngLat.lat;\n\n if (dragAnimationFrame.current) {\n cancelAnimationFrame(dragAnimationFrame.current);\n }\n\n dragAnimationFrame.current = requestAnimationFrame(() => {\n if (!mapRef.current) {\n return;\n }\n\n const bounds = mapRef.current.getBounds();\n const viewportWidth = bounds.getEast() - bounds.getWest();\n const viewportHeight = bounds.getNorth() - bounds.getSouth();\n\n const edgePadding = 0.1;\n const westThreshold = bounds.getWest() + viewportWidth * edgePadding;\n const eastThreshold = bounds.getEast() - viewportWidth * edgePadding;\n const southThreshold = bounds.getSouth() + viewportHeight * edgePadding;\n const northThreshold = bounds.getNorth() - viewportHeight * edgePadding;\n\n const nearWestEdge = draggedLng < westThreshold;\n const nearEastEdge = draggedLng > eastThreshold;\n const nearSouthEdge = draggedLat < southThreshold;\n const nearNorthEdge = draggedLat > northThreshold;\n\n if (!nearWestEdge && !nearEastEdge && !nearSouthEdge && !nearNorthEdge) {\n return;\n }\n\n let panLng = draggedLng;\n let panLat = draggedLat;\n const offsetAmount = 0.2;\n\n if (nearWestEdge) {\n panLng = draggedLng - viewportWidth * offsetAmount;\n }\n if (nearEastEdge) {\n panLng = draggedLng + viewportWidth * offsetAmount;\n }\n if (nearSouthEdge) {\n panLat = draggedLat - viewportHeight * offsetAmount;\n }\n if (nearNorthEdge) {\n panLat = draggedLat + viewportHeight * offsetAmount;\n }\n\n mapRef.current?.easeTo({\n center: [panLng, panLat],\n duration: 200\n });\n });\n }}\n onDragEnd={(event) => {\n isMarkerDragging.current = false;\n\n if (dragAnimationFrame.current) {\n cancelAnimationFrame(dragAnimationFrame.current);\n dragAnimationFrame.current = null;\n }\n\n if (!onMarkerDrag) {\n return;\n }\n\n const nextLngLat = (event as { lngLat?: { lng?: number; lat?: number } }).lngLat;\n if (!nextLngLat || nextLngLat.lng === undefined || nextLngLat.lat === undefined) {\n return;\n }\n\n onMarkerDrag(marker.id ?? null, {\n latitude: nextLngLat.lat,\n longitude: nextLngLat.lng\n });\n }}\n >\n {marker.element\n ? typeof marker.element === \"function\"\n ? marker.element()\n : marker.element\n : <DefaultMarker marker={marker} />}\n </Marker>\n )),\n [normalizedMarkers, onMarkerDrag]\n );\n\n const resolvedMapStyleUrl = React.useMemo(() => {\n if (styleUrl) {\n return appendStadiaApiKey(styleUrl, stadiaApiKey);\n }\n\n if (mapStyle) {\n return getMapLibreStyleUrl(mapStyle, stadiaApiKey);\n }\n\n return getMapLibreStyleUrl(\"osm-bright\", stadiaApiKey);\n }, [mapStyle, stadiaApiKey, styleUrl]);\n\n return (\n <div\n className={joinClassNames(\"relative w-full h-full\", className)}\n style={{ width: \"100%\", height: \"100%\", ...style }}\n >\n <Map\n ref={mapRef}\n {...internalViewState}\n mapStyle={resolvedMapStyleUrl}\n onMoveStart={handleMoveStart}\n onMove={handleMove}\n onMoveEnd={handleMoveEnd}\n onClick={handleMapClick}\n attributionControl={false}\n trackResize\n dragRotate={false}\n touchZoomRotate={false}\n >\n {showGeolocateControl ? (\n <GeolocateControl position={geolocateControlPosition} />\n ) : null}\n\n {showNavigationControl ? (\n <NavigationControl position={navigationControlPosition} />\n ) : null}\n\n {markerElements}\n\n {children}\n </Map>\n </div>\n );\n}\n\nexport const DTMapLibreMap = MapLibre;\n"]}
1
+ {"version":3,"sources":["../../src/utils/getMapLibreStyleUrl.ts","../../src/core/MapLibre.tsx"],"names":["jsxs","jsx","React","Marker","Map","GeolocateControl","NavigationControl"],"mappings":"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","file":"index.cjs","sourcesContent":["const MAPLIBRE_DEFAULT_STYLE_URL =\n \"https://basemaps.cartocdn.com/gl/positron-gl-style/style.json\";\nconst DEFAULT_STADIA_STYLE_URL =\n \"https://tiles.stadiamaps.com/styles/osm_bright.json\";\n\nconst STYLE_MAP: Record<string, string> = {\n default: DEFAULT_STADIA_STYLE_URL,\n \"alidade-smooth\": \"https://tiles.stadiamaps.com/styles/alidade_smooth.json\",\n \"alidade-smooth-dark\": \"https://tiles.stadiamaps.com/styles/alidade_smooth_dark.json\",\n \"maplibre-default\": MAPLIBRE_DEFAULT_STYLE_URL,\n \"osm-bright\": \"https://tiles.stadiamaps.com/styles/osm_bright.json\",\n \"stadia-outdoors\": \"https://tiles.stadiamaps.com/styles/outdoors.json\",\n \"stamen-toner\": \"https://tiles.stadiamaps.com/styles/stamen_toner.json\",\n \"stamen-terrain\": \"https://tiles.stadiamaps.com/styles/stamen_terrain.json\",\n \"stamen-watercolor\": \"https://tiles.stadiamaps.com/styles/stamen_watercolor.json\"\n};\n\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\nexport type MapLibreBuiltInStyle = keyof typeof STYLE_MAP;\n\nfunction isStadiaMapsUrl(url: string): boolean {\n try {\n const parsed = new URL(url);\n return parsed.hostname === \"tiles.stadiamaps.com\";\n } catch {\n return false;\n }\n}\n\nfunction assertStadiaApiKey(stadiaApiKey: string): void {\n if (!stadiaApiKey.trim()) {\n throw new Error(\n \"A non-empty stadiaApiKey is required for Stadia Maps style URLs.\"\n );\n }\n}\n\nexport function appendStadiaApiKey(\n styleUrl: string,\n stadiaApiKey: string\n): string {\n if (!isStadiaMapsUrl(styleUrl)) {\n return styleUrl;\n }\n\n assertStadiaApiKey(stadiaApiKey);\n\n const parsed = new URL(styleUrl);\n if (!parsed.searchParams.has(\"api_key\")) {\n parsed.searchParams.set(\"api_key\", stadiaApiKey);\n }\n\n return parsed.toString();\n}\n\nexport function getMapLibreStyleUrl(\n value: string | undefined,\n stadiaApiKey: string\n): string {\n const normalizedApiKey = stadiaApiKey.trim();\n\n if (!value || typeof value !== \"string\") {\n if (!normalizedApiKey) {\n return MAPLIBRE_DEFAULT_STYLE_URL;\n }\n return appendStadiaApiKey(DEFAULT_STADIA_STYLE_URL, normalizedApiKey);\n }\n\n if (STYLE_MAP[value]) {\n const mappedStyleUrl = STYLE_MAP[value];\n if (isStadiaMapsUrl(mappedStyleUrl) && !normalizedApiKey) {\n return MAPLIBRE_DEFAULT_STYLE_URL;\n }\n return appendStadiaApiKey(mappedStyleUrl, normalizedApiKey);\n }\n\n if (HTTP_URL_REGEX.test(value)) {\n if (isStadiaMapsUrl(value) && !normalizedApiKey) {\n return MAPLIBRE_DEFAULT_STYLE_URL;\n }\n return appendStadiaApiKey(value, normalizedApiKey);\n }\n\n if (!normalizedApiKey) {\n return MAPLIBRE_DEFAULT_STYLE_URL;\n }\n\n return appendStadiaApiKey(DEFAULT_STADIA_STYLE_URL, normalizedApiKey);\n}\n\nexport { DEFAULT_STADIA_STYLE_URL, MAPLIBRE_DEFAULT_STYLE_URL };\n","import React from \"react\";\nimport {\n GeolocateControl,\n Map,\n Marker,\n NavigationControl,\n type MapRef,\n type ViewStateChangeEvent\n} from \"react-map-gl/maplibre\";\n\nimport type {\n BasicMarkerInput,\n MapLibreFlyToOptions,\n MapLibreMarker,\n MapLibreProps,\n MapViewState\n} from \"../types\";\nimport { appendStadiaApiKey, getMapLibreStyleUrl } from \"../utils\";\n\nconst DEFAULT_MAPLIBRE_CSS_HREF =\n \"https://cdn.jsdelivr.net/npm/maplibre-gl@5.18.0/dist/maplibre-gl.css\";\nconst MAPLIBRE_STYLESHEET_ID = \"page-speed-maplibre-gl-css\";\nconst DEFAULT_FLY_TO_OPTIONS: Readonly<MapLibreFlyToOptions> = Object.freeze({});\nconst VIEW_STATE_COORDINATE_EPSILON = 0.000001;\nconst VIEW_STATE_ZOOM_EPSILON = 0.01;\nconst DEFAULT_FLY_TO_EASING = (t: number): number => 1 - Math.pow(1 - t, 3);\n\nfunction joinClassNames(...classNames: Array<string | undefined>): string {\n return classNames.filter(Boolean).join(\" \");\n}\n\nfunction hasMeaningfulViewStateDelta(\n previous: MapViewState,\n next: MapViewState\n): boolean {\n return (\n Math.abs(previous.latitude - next.latitude) > VIEW_STATE_COORDINATE_EPSILON ||\n Math.abs(previous.longitude - next.longitude) > VIEW_STATE_COORDINATE_EPSILON ||\n Math.abs(previous.zoom - next.zoom) > VIEW_STATE_ZOOM_EPSILON\n );\n}\n\nfunction ensureMapLibreStylesheet(href: string): void {\n if (typeof document === \"undefined\") {\n return;\n }\n\n const existingLink = document.getElementById(MAPLIBRE_STYLESHEET_ID);\n if (existingLink instanceof HTMLLinkElement) {\n if (existingLink.getAttribute(\"href\") !== href) {\n existingLink.setAttribute(\"href\", href);\n }\n return;\n }\n\n const matchingLink = Array.from(\n document.querySelectorAll(\"link[rel='stylesheet']\")\n ).find((link) => link.getAttribute(\"href\") === href);\n\n if (matchingLink instanceof HTMLLinkElement) {\n matchingLink.id = MAPLIBRE_STYLESHEET_ID;\n return;\n }\n\n const stylesheet = document.createElement(\"link\");\n stylesheet.id = MAPLIBRE_STYLESHEET_ID;\n stylesheet.rel = \"stylesheet\";\n stylesheet.href = href;\n stylesheet.dataset.pageSpeedMaps = \"maplibre-css\";\n document.head.appendChild(stylesheet);\n}\n\nfunction DefaultMarker({ marker }: { marker: MapLibreMarker }) {\n return (\n <div\n style={{\n cursor: marker.draggable ? \"grab\" : \"pointer\",\n transform: \"translate(-50%, -100%)\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n position: \"relative\"\n }}\n onClick={marker.onClick}\n >\n <svg\n aria-hidden=\"true\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill={marker.color || \"#3B82F6\"}\n style={{ filter: \"drop-shadow(0 2px 8px rgba(0,0,0,0.35))\" }}\n >\n <path d=\"M12 2C8.13 2 5 5.13 5 9c0 4.85 6.13 12.24 6.39 12.55a.75.75 0 0 0 1.16 0C12.87 21.24 19 13.85 19 9c0-3.87-3.13-7-7-7Zm0 9.75A2.75 2.75 0 1 1 12 6.25a2.75 2.75 0 0 1 0 5.5Z\" />\n </svg>\n {marker.label ? (\n <div\n style={{\n position: \"absolute\",\n bottom: -28,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n background: \"#FFFFFF\",\n borderRadius: 6,\n padding: \"2px 8px\",\n fontSize: 12,\n fontWeight: 500,\n whiteSpace: \"nowrap\",\n boxShadow: \"0 3px 10px rgba(0, 0, 0, 0.2)\"\n }}\n >\n {marker.label}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction normalizeMarkers(\n markers: (MapLibreMarker | BasicMarkerInput)[]\n): MapLibreMarker[] {\n return markers.map((marker, index) => {\n if (\n (marker as MapLibreMarker).lat !== undefined &&\n (marker as MapLibreMarker).lng !== undefined\n ) {\n return marker as MapLibreMarker;\n }\n\n const basicMarker = marker as BasicMarkerInput;\n return {\n id: basicMarker.id ?? index,\n lat: basicMarker.latitude,\n lng: basicMarker.longitude,\n color: basicMarker.color,\n draggable: basicMarker.draggable,\n label: basicMarker.label,\n element: basicMarker.element,\n onClick: basicMarker.onClick\n };\n });\n}\n\nexport function MapLibre({\n stadiaApiKey,\n mapLibreCssHref,\n viewState,\n onViewStateChange,\n mapStyle,\n center = viewState\n ? { lat: viewState.latitude ?? 0, lng: viewState.longitude ?? 0 }\n : { lat: 0, lng: 0 },\n zoom = viewState?.zoom ?? 14,\n styleUrl,\n markers = [],\n onMoveEnd,\n onClick,\n onMarkerDrag,\n className,\n style,\n children,\n showNavigationControl = true,\n showGeolocateControl = false,\n navigationControlPosition = \"bottom-right\",\n geolocateControlPosition = \"top-left\",\n flyToOptions = DEFAULT_FLY_TO_OPTIONS\n}: MapLibreProps) {\n const mapRef = React.useRef<MapRef>(null);\n const resolvedMapLibreCssHref =\n mapLibreCssHref && mapLibreCssHref.trim().length > 0\n ? mapLibreCssHref\n : DEFAULT_MAPLIBRE_CSS_HREF;\n\n const [internalViewState, setInternalViewState] = React.useState<MapViewState>({\n latitude: viewState?.latitude ?? center.lat,\n longitude: viewState?.longitude ?? center.lng,\n zoom: viewState?.zoom ?? zoom\n });\n\n const isUserInteracting = React.useRef(false);\n const isMarkerDragging = React.useRef(false);\n const dragAnimationFrame = React.useRef<number | null>(null);\n const lastReportedViewState = React.useRef<MapViewState | null>(null);\n\n const resolvedFlyToOptions = React.useMemo(\n () => ({\n speed: flyToOptions.speed ?? 0.8,\n curve: flyToOptions.curve ?? 1.2,\n bearing: flyToOptions.bearing ?? 0,\n easing: flyToOptions.easing ?? DEFAULT_FLY_TO_EASING\n }),\n [\n flyToOptions.bearing,\n flyToOptions.curve,\n flyToOptions.easing,\n flyToOptions.speed\n ]\n );\n\n React.useEffect(() => {\n ensureMapLibreStylesheet(resolvedMapLibreCssHref);\n }, [resolvedMapLibreCssHref]);\n\n React.useEffect(() => {\n if (\n !mapRef.current ||\n !viewState ||\n isUserInteracting.current ||\n isMarkerDragging.current\n ) {\n return;\n }\n\n setInternalViewState((previous) => {\n const next = {\n latitude: viewState.latitude ?? previous.latitude,\n longitude: viewState.longitude ?? previous.longitude,\n zoom: viewState.zoom ?? previous.zoom\n };\n\n const hasChanged = hasMeaningfulViewStateDelta(previous, next);\n\n if (!hasChanged) {\n return previous;\n }\n\n const isEchoedMoveState =\n !!lastReportedViewState.current &&\n !hasMeaningfulViewStateDelta(lastReportedViewState.current, next);\n\n if (!isEchoedMoveState) {\n mapRef.current?.flyTo({\n center: [next.longitude, next.latitude],\n zoom: next.zoom,\n speed: resolvedFlyToOptions.speed,\n curve: resolvedFlyToOptions.curve,\n bearing: resolvedFlyToOptions.bearing,\n easing: resolvedFlyToOptions.easing,\n essential: true\n });\n }\n\n return next;\n });\n }, [\n resolvedFlyToOptions,\n viewState?.latitude,\n viewState?.longitude,\n viewState?.zoom\n ]);\n\n const handleMoveStart = React.useCallback(() => {\n isUserInteracting.current = true;\n }, []);\n\n const handleMove = React.useCallback(\n (event: ViewStateChangeEvent) => {\n const nextViewState = event.viewState;\n setInternalViewState({\n latitude: nextViewState.latitude,\n longitude: nextViewState.longitude,\n zoom: nextViewState.zoom\n });\n\n const roundedViewState = {\n latitude: Number(nextViewState.latitude.toFixed(6)),\n longitude: Number(nextViewState.longitude.toFixed(6)),\n zoom: Number(nextViewState.zoom.toFixed(2))\n };\n\n lastReportedViewState.current = roundedViewState;\n onViewStateChange?.(roundedViewState);\n },\n [onViewStateChange]\n );\n\n const handleMoveEnd = React.useCallback(\n (event: ViewStateChangeEvent) => {\n isUserInteracting.current = false;\n\n if (!onMoveEnd) {\n return;\n }\n\n const map = event.target;\n const nextCenter = map.getCenter();\n const nextZoom = map.getZoom();\n const bounds = map.getBounds();\n\n onMoveEnd(\n {\n lat: Number(nextCenter.lat.toFixed(6)),\n lng: Number(nextCenter.lng.toFixed(6))\n },\n Number(nextZoom.toFixed(2)),\n bounds\n );\n },\n [onMoveEnd]\n );\n\n const handleMapClick = React.useCallback(\n (event: { lngLat: { lng: number; lat: number } }) => {\n if (!onClick) {\n return;\n }\n\n onClick({ latitude: event.lngLat.lat, longitude: event.lngLat.lng });\n },\n [onClick]\n );\n\n const normalizedMarkers = React.useMemo(\n () => normalizeMarkers(markers),\n [markers]\n );\n\n const markerElements = React.useMemo(\n () =>\n normalizedMarkers.map((marker) => (\n <Marker\n key={marker.id}\n longitude={marker.lng}\n latitude={marker.lat}\n draggable={marker.draggable}\n onDragStart={() => {\n isMarkerDragging.current = true;\n }}\n onDrag={(event) => {\n if (!mapRef.current) {\n return;\n }\n\n const nextLngLat = (event as { lngLat?: { lng?: number; lat?: number } }).lngLat;\n if (!nextLngLat || nextLngLat.lng === undefined || nextLngLat.lat === undefined) {\n return;\n }\n const draggedLng = nextLngLat.lng;\n const draggedLat = nextLngLat.lat;\n\n if (dragAnimationFrame.current) {\n cancelAnimationFrame(dragAnimationFrame.current);\n }\n\n dragAnimationFrame.current = requestAnimationFrame(() => {\n if (!mapRef.current) {\n return;\n }\n\n const bounds = mapRef.current.getBounds();\n const viewportWidth = bounds.getEast() - bounds.getWest();\n const viewportHeight = bounds.getNorth() - bounds.getSouth();\n\n const edgePadding = 0.1;\n const westThreshold = bounds.getWest() + viewportWidth * edgePadding;\n const eastThreshold = bounds.getEast() - viewportWidth * edgePadding;\n const southThreshold = bounds.getSouth() + viewportHeight * edgePadding;\n const northThreshold = bounds.getNorth() - viewportHeight * edgePadding;\n\n const nearWestEdge = draggedLng < westThreshold;\n const nearEastEdge = draggedLng > eastThreshold;\n const nearSouthEdge = draggedLat < southThreshold;\n const nearNorthEdge = draggedLat > northThreshold;\n\n if (!nearWestEdge && !nearEastEdge && !nearSouthEdge && !nearNorthEdge) {\n return;\n }\n\n let panLng = draggedLng;\n let panLat = draggedLat;\n const offsetAmount = 0.2;\n\n if (nearWestEdge) {\n panLng = draggedLng - viewportWidth * offsetAmount;\n }\n if (nearEastEdge) {\n panLng = draggedLng + viewportWidth * offsetAmount;\n }\n if (nearSouthEdge) {\n panLat = draggedLat - viewportHeight * offsetAmount;\n }\n if (nearNorthEdge) {\n panLat = draggedLat + viewportHeight * offsetAmount;\n }\n\n mapRef.current?.easeTo({\n center: [panLng, panLat],\n duration: 200\n });\n });\n }}\n onDragEnd={(event) => {\n isMarkerDragging.current = false;\n\n if (dragAnimationFrame.current) {\n cancelAnimationFrame(dragAnimationFrame.current);\n dragAnimationFrame.current = null;\n }\n\n if (!onMarkerDrag) {\n return;\n }\n\n const nextLngLat = (event as { lngLat?: { lng?: number; lat?: number } }).lngLat;\n if (!nextLngLat || nextLngLat.lng === undefined || nextLngLat.lat === undefined) {\n return;\n }\n\n onMarkerDrag(marker.id ?? null, {\n latitude: nextLngLat.lat,\n longitude: nextLngLat.lng\n });\n }}\n >\n {marker.element\n ? typeof marker.element === \"function\"\n ? marker.element()\n : marker.element\n : <DefaultMarker marker={marker} />}\n </Marker>\n )),\n [normalizedMarkers, onMarkerDrag]\n );\n\n const resolvedMapStyleUrl = React.useMemo(() => {\n if (styleUrl) {\n return appendStadiaApiKey(styleUrl, stadiaApiKey);\n }\n\n if (mapStyle) {\n return getMapLibreStyleUrl(mapStyle, stadiaApiKey);\n }\n\n return getMapLibreStyleUrl(\"osm-bright\", stadiaApiKey);\n }, [mapStyle, stadiaApiKey, styleUrl]);\n\n return (\n <div\n className={joinClassNames(\"relative w-full h-full\", className)}\n style={{ width: \"100%\", height: \"100%\", ...style }}\n >\n <Map\n ref={mapRef}\n {...internalViewState}\n mapStyle={resolvedMapStyleUrl}\n onMoveStart={handleMoveStart}\n onMove={handleMove}\n onMoveEnd={handleMoveEnd}\n onClick={handleMapClick}\n attributionControl={false}\n trackResize\n dragRotate={false}\n touchZoomRotate={false}\n >\n {showGeolocateControl ? (\n <GeolocateControl position={geolocateControlPosition} />\n ) : null}\n\n {showNavigationControl ? (\n <NavigationControl position={navigationControlPosition} />\n ) : null}\n\n {markerElements}\n\n {children}\n </Map>\n </div>\n );\n}\n\nexport const DTMapLibreMap = MapLibre;\n"]}
@@ -73,9 +73,16 @@ function getMapLibreStyleUrl(value, stadiaApiKey) {
73
73
  }
74
74
  var DEFAULT_MAPLIBRE_CSS_HREF = "https://cdn.jsdelivr.net/npm/maplibre-gl@5.18.0/dist/maplibre-gl.css";
75
75
  var MAPLIBRE_STYLESHEET_ID = "page-speed-maplibre-gl-css";
76
+ var DEFAULT_FLY_TO_OPTIONS = Object.freeze({});
77
+ var VIEW_STATE_COORDINATE_EPSILON = 1e-6;
78
+ var VIEW_STATE_ZOOM_EPSILON = 0.01;
79
+ var DEFAULT_FLY_TO_EASING = (t) => 1 - Math.pow(1 - t, 3);
76
80
  function joinClassNames(...classNames) {
77
81
  return classNames.filter(Boolean).join(" ");
78
82
  }
83
+ function hasMeaningfulViewStateDelta(previous, next) {
84
+ return Math.abs(previous.latitude - next.latitude) > VIEW_STATE_COORDINATE_EPSILON || Math.abs(previous.longitude - next.longitude) > VIEW_STATE_COORDINATE_EPSILON || Math.abs(previous.zoom - next.zoom) > VIEW_STATE_ZOOM_EPSILON;
85
+ }
79
86
  function ensureMapLibreStylesheet(href) {
80
87
  if (typeof document === "undefined") {
81
88
  return;
@@ -188,7 +195,7 @@ function MapLibre({
188
195
  showGeolocateControl = false,
189
196
  navigationControlPosition = "bottom-right",
190
197
  geolocateControlPosition = "top-left",
191
- flyToOptions = {}
198
+ flyToOptions = DEFAULT_FLY_TO_OPTIONS
192
199
  }) {
193
200
  const mapRef = React.useRef(null);
194
201
  const resolvedMapLibreCssHref = mapLibreCssHref && mapLibreCssHref.trim().length > 0 ? mapLibreCssHref : DEFAULT_MAPLIBRE_CSS_HREF;
@@ -200,6 +207,21 @@ function MapLibre({
200
207
  const isUserInteracting = React.useRef(false);
201
208
  const isMarkerDragging = React.useRef(false);
202
209
  const dragAnimationFrame = React.useRef(null);
210
+ const lastReportedViewState = React.useRef(null);
211
+ const resolvedFlyToOptions = React.useMemo(
212
+ () => ({
213
+ speed: flyToOptions.speed ?? 0.8,
214
+ curve: flyToOptions.curve ?? 1.2,
215
+ bearing: flyToOptions.bearing ?? 0,
216
+ easing: flyToOptions.easing ?? DEFAULT_FLY_TO_EASING
217
+ }),
218
+ [
219
+ flyToOptions.bearing,
220
+ flyToOptions.curve,
221
+ flyToOptions.easing,
222
+ flyToOptions.speed
223
+ ]
224
+ );
203
225
  React.useEffect(() => {
204
226
  ensureMapLibreStylesheet(resolvedMapLibreCssHref);
205
227
  }, [resolvedMapLibreCssHref]);
@@ -213,28 +235,30 @@ function MapLibre({
213
235
  longitude: viewState.longitude ?? previous.longitude,
214
236
  zoom: viewState.zoom ?? previous.zoom
215
237
  };
216
- const hasChanged = previous.latitude !== next.latitude || previous.longitude !== next.longitude || previous.zoom !== next.zoom;
238
+ const hasChanged = hasMeaningfulViewStateDelta(previous, next);
217
239
  if (!hasChanged) {
218
240
  return previous;
219
241
  }
220
- const {
221
- speed = 0.8,
222
- curve = 1.2,
223
- bearing = 0,
224
- easing = (t) => 1 - Math.pow(1 - t, 3)
225
- } = flyToOptions;
226
- mapRef.current?.flyTo({
227
- center: [next.longitude, next.latitude],
228
- zoom: next.zoom,
229
- speed,
230
- curve,
231
- bearing,
232
- easing,
233
- essential: true
234
- });
242
+ const isEchoedMoveState = !!lastReportedViewState.current && !hasMeaningfulViewStateDelta(lastReportedViewState.current, next);
243
+ if (!isEchoedMoveState) {
244
+ mapRef.current?.flyTo({
245
+ center: [next.longitude, next.latitude],
246
+ zoom: next.zoom,
247
+ speed: resolvedFlyToOptions.speed,
248
+ curve: resolvedFlyToOptions.curve,
249
+ bearing: resolvedFlyToOptions.bearing,
250
+ easing: resolvedFlyToOptions.easing,
251
+ essential: true
252
+ });
253
+ }
235
254
  return next;
236
255
  });
237
- }, [flyToOptions, viewState?.latitude, viewState?.longitude, viewState?.zoom]);
256
+ }, [
257
+ resolvedFlyToOptions,
258
+ viewState?.latitude,
259
+ viewState?.longitude,
260
+ viewState?.zoom
261
+ ]);
238
262
  const handleMoveStart = React.useCallback(() => {
239
263
  isUserInteracting.current = true;
240
264
  }, []);
@@ -246,11 +270,13 @@ function MapLibre({
246
270
  longitude: nextViewState.longitude,
247
271
  zoom: nextViewState.zoom
248
272
  });
249
- onViewStateChange?.({
273
+ const roundedViewState = {
250
274
  latitude: Number(nextViewState.latitude.toFixed(6)),
251
275
  longitude: Number(nextViewState.longitude.toFixed(6)),
252
276
  zoom: Number(nextViewState.zoom.toFixed(2))
253
- });
277
+ };
278
+ lastReportedViewState.current = roundedViewState;
279
+ onViewStateChange?.(roundedViewState);
254
280
  },
255
281
  [onViewStateChange]
256
282
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/getMapLibreStyleUrl.ts","../../src/core/MapLibre.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["const MAPLIBRE_DEFAULT_STYLE_URL =\n \"https://basemaps.cartocdn.com/gl/positron-gl-style/style.json\";\nconst DEFAULT_STADIA_STYLE_URL =\n \"https://tiles.stadiamaps.com/styles/osm_bright.json\";\n\nconst STYLE_MAP: Record<string, string> = {\n default: DEFAULT_STADIA_STYLE_URL,\n \"alidade-smooth\": \"https://tiles.stadiamaps.com/styles/alidade_smooth.json\",\n \"alidade-smooth-dark\": \"https://tiles.stadiamaps.com/styles/alidade_smooth_dark.json\",\n \"maplibre-default\": MAPLIBRE_DEFAULT_STYLE_URL,\n \"osm-bright\": \"https://tiles.stadiamaps.com/styles/osm_bright.json\",\n \"stadia-outdoors\": \"https://tiles.stadiamaps.com/styles/outdoors.json\",\n \"stamen-toner\": \"https://tiles.stadiamaps.com/styles/stamen_toner.json\",\n \"stamen-terrain\": \"https://tiles.stadiamaps.com/styles/stamen_terrain.json\",\n \"stamen-watercolor\": \"https://tiles.stadiamaps.com/styles/stamen_watercolor.json\"\n};\n\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\nexport type MapLibreBuiltInStyle = keyof typeof STYLE_MAP;\n\nfunction isStadiaMapsUrl(url: string): boolean {\n try {\n const parsed = new URL(url);\n return parsed.hostname === \"tiles.stadiamaps.com\";\n } catch {\n return false;\n }\n}\n\nfunction assertStadiaApiKey(stadiaApiKey: string): void {\n if (!stadiaApiKey.trim()) {\n throw new Error(\n \"A non-empty stadiaApiKey is required for Stadia Maps style URLs.\"\n );\n }\n}\n\nexport function appendStadiaApiKey(\n styleUrl: string,\n stadiaApiKey: string\n): string {\n if (!isStadiaMapsUrl(styleUrl)) {\n return styleUrl;\n }\n\n assertStadiaApiKey(stadiaApiKey);\n\n const parsed = new URL(styleUrl);\n if (!parsed.searchParams.has(\"api_key\")) {\n parsed.searchParams.set(\"api_key\", stadiaApiKey);\n }\n\n return parsed.toString();\n}\n\nexport function getMapLibreStyleUrl(\n value: string | undefined,\n stadiaApiKey: string\n): string {\n const normalizedApiKey = stadiaApiKey.trim();\n\n if (!value || typeof value !== \"string\") {\n if (!normalizedApiKey) {\n return MAPLIBRE_DEFAULT_STYLE_URL;\n }\n return appendStadiaApiKey(DEFAULT_STADIA_STYLE_URL, normalizedApiKey);\n }\n\n if (STYLE_MAP[value]) {\n const mappedStyleUrl = STYLE_MAP[value];\n if (isStadiaMapsUrl(mappedStyleUrl) && !normalizedApiKey) {\n return MAPLIBRE_DEFAULT_STYLE_URL;\n }\n return appendStadiaApiKey(mappedStyleUrl, normalizedApiKey);\n }\n\n if (HTTP_URL_REGEX.test(value)) {\n if (isStadiaMapsUrl(value) && !normalizedApiKey) {\n return MAPLIBRE_DEFAULT_STYLE_URL;\n }\n return appendStadiaApiKey(value, normalizedApiKey);\n }\n\n if (!normalizedApiKey) {\n return MAPLIBRE_DEFAULT_STYLE_URL;\n }\n\n return appendStadiaApiKey(DEFAULT_STADIA_STYLE_URL, normalizedApiKey);\n}\n\nexport { DEFAULT_STADIA_STYLE_URL, MAPLIBRE_DEFAULT_STYLE_URL };\n","import React from \"react\";\nimport {\n GeolocateControl,\n Map,\n Marker,\n NavigationControl,\n type MapRef,\n type ViewStateChangeEvent\n} from \"react-map-gl/maplibre\";\n\nimport type {\n BasicMarkerInput,\n MapLibreMarker,\n MapLibreProps,\n MapViewState\n} from \"../types\";\nimport { appendStadiaApiKey, getMapLibreStyleUrl } from \"../utils\";\n\nconst DEFAULT_MAPLIBRE_CSS_HREF =\n \"https://cdn.jsdelivr.net/npm/maplibre-gl@5.18.0/dist/maplibre-gl.css\";\nconst MAPLIBRE_STYLESHEET_ID = \"page-speed-maplibre-gl-css\";\n\nfunction joinClassNames(...classNames: Array<string | undefined>): string {\n return classNames.filter(Boolean).join(\" \");\n}\n\nfunction ensureMapLibreStylesheet(href: string): void {\n if (typeof document === \"undefined\") {\n return;\n }\n\n const existingLink = document.getElementById(MAPLIBRE_STYLESHEET_ID);\n if (existingLink instanceof HTMLLinkElement) {\n if (existingLink.getAttribute(\"href\") !== href) {\n existingLink.setAttribute(\"href\", href);\n }\n return;\n }\n\n const matchingLink = Array.from(\n document.querySelectorAll(\"link[rel='stylesheet']\")\n ).find((link) => link.getAttribute(\"href\") === href);\n\n if (matchingLink instanceof HTMLLinkElement) {\n matchingLink.id = MAPLIBRE_STYLESHEET_ID;\n return;\n }\n\n const stylesheet = document.createElement(\"link\");\n stylesheet.id = MAPLIBRE_STYLESHEET_ID;\n stylesheet.rel = \"stylesheet\";\n stylesheet.href = href;\n stylesheet.dataset.pageSpeedMaps = \"maplibre-css\";\n document.head.appendChild(stylesheet);\n}\n\nfunction DefaultMarker({ marker }: { marker: MapLibreMarker }) {\n return (\n <div\n style={{\n cursor: marker.draggable ? \"grab\" : \"pointer\",\n transform: \"translate(-50%, -100%)\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n position: \"relative\"\n }}\n onClick={marker.onClick}\n >\n <svg\n aria-hidden=\"true\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill={marker.color || \"#3B82F6\"}\n style={{ filter: \"drop-shadow(0 2px 8px rgba(0,0,0,0.35))\" }}\n >\n <path d=\"M12 2C8.13 2 5 5.13 5 9c0 4.85 6.13 12.24 6.39 12.55a.75.75 0 0 0 1.16 0C12.87 21.24 19 13.85 19 9c0-3.87-3.13-7-7-7Zm0 9.75A2.75 2.75 0 1 1 12 6.25a2.75 2.75 0 0 1 0 5.5Z\" />\n </svg>\n {marker.label ? (\n <div\n style={{\n position: \"absolute\",\n bottom: -28,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n background: \"#FFFFFF\",\n borderRadius: 6,\n padding: \"2px 8px\",\n fontSize: 12,\n fontWeight: 500,\n whiteSpace: \"nowrap\",\n boxShadow: \"0 3px 10px rgba(0, 0, 0, 0.2)\"\n }}\n >\n {marker.label}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction normalizeMarkers(\n markers: (MapLibreMarker | BasicMarkerInput)[]\n): MapLibreMarker[] {\n return markers.map((marker, index) => {\n if (\n (marker as MapLibreMarker).lat !== undefined &&\n (marker as MapLibreMarker).lng !== undefined\n ) {\n return marker as MapLibreMarker;\n }\n\n const basicMarker = marker as BasicMarkerInput;\n return {\n id: basicMarker.id ?? index,\n lat: basicMarker.latitude,\n lng: basicMarker.longitude,\n color: basicMarker.color,\n draggable: basicMarker.draggable,\n label: basicMarker.label,\n element: basicMarker.element,\n onClick: basicMarker.onClick\n };\n });\n}\n\nexport function MapLibre({\n stadiaApiKey,\n mapLibreCssHref,\n viewState,\n onViewStateChange,\n mapStyle,\n center = viewState\n ? { lat: viewState.latitude ?? 0, lng: viewState.longitude ?? 0 }\n : { lat: 0, lng: 0 },\n zoom = viewState?.zoom ?? 14,\n styleUrl,\n markers = [],\n onMoveEnd,\n onClick,\n onMarkerDrag,\n className,\n style,\n children,\n showNavigationControl = true,\n showGeolocateControl = false,\n navigationControlPosition = \"bottom-right\",\n geolocateControlPosition = \"top-left\",\n flyToOptions = {}\n}: MapLibreProps) {\n const mapRef = React.useRef<MapRef>(null);\n const resolvedMapLibreCssHref =\n mapLibreCssHref && mapLibreCssHref.trim().length > 0\n ? mapLibreCssHref\n : DEFAULT_MAPLIBRE_CSS_HREF;\n\n const [internalViewState, setInternalViewState] = React.useState<MapViewState>({\n latitude: viewState?.latitude ?? center.lat,\n longitude: viewState?.longitude ?? center.lng,\n zoom: viewState?.zoom ?? zoom\n });\n\n const isUserInteracting = React.useRef(false);\n const isMarkerDragging = React.useRef(false);\n const dragAnimationFrame = React.useRef<number | null>(null);\n\n React.useEffect(() => {\n ensureMapLibreStylesheet(resolvedMapLibreCssHref);\n }, [resolvedMapLibreCssHref]);\n\n React.useEffect(() => {\n if (\n !mapRef.current ||\n !viewState ||\n isUserInteracting.current ||\n isMarkerDragging.current\n ) {\n return;\n }\n\n setInternalViewState((previous) => {\n const next = {\n latitude: viewState.latitude ?? previous.latitude,\n longitude: viewState.longitude ?? previous.longitude,\n zoom: viewState.zoom ?? previous.zoom\n };\n\n const hasChanged =\n previous.latitude !== next.latitude ||\n previous.longitude !== next.longitude ||\n previous.zoom !== next.zoom;\n\n if (!hasChanged) {\n return previous;\n }\n\n const {\n speed = 0.8,\n curve = 1.2,\n bearing = 0,\n easing = (t: number) => 1 - Math.pow(1 - t, 3)\n } = flyToOptions;\n\n mapRef.current?.flyTo({\n center: [next.longitude, next.latitude],\n zoom: next.zoom,\n speed,\n curve,\n bearing,\n easing,\n essential: true\n });\n\n return next;\n });\n }, [flyToOptions, viewState?.latitude, viewState?.longitude, viewState?.zoom]);\n\n const handleMoveStart = React.useCallback(() => {\n isUserInteracting.current = true;\n }, []);\n\n const handleMove = React.useCallback(\n (event: ViewStateChangeEvent) => {\n const nextViewState = event.viewState;\n setInternalViewState({\n latitude: nextViewState.latitude,\n longitude: nextViewState.longitude,\n zoom: nextViewState.zoom\n });\n\n onViewStateChange?.({\n latitude: Number(nextViewState.latitude.toFixed(6)),\n longitude: Number(nextViewState.longitude.toFixed(6)),\n zoom: Number(nextViewState.zoom.toFixed(2))\n });\n },\n [onViewStateChange]\n );\n\n const handleMoveEnd = React.useCallback(\n (event: ViewStateChangeEvent) => {\n isUserInteracting.current = false;\n\n if (!onMoveEnd) {\n return;\n }\n\n const map = event.target;\n const nextCenter = map.getCenter();\n const nextZoom = map.getZoom();\n const bounds = map.getBounds();\n\n onMoveEnd(\n {\n lat: Number(nextCenter.lat.toFixed(6)),\n lng: Number(nextCenter.lng.toFixed(6))\n },\n Number(nextZoom.toFixed(2)),\n bounds\n );\n },\n [onMoveEnd]\n );\n\n const handleMapClick = React.useCallback(\n (event: { lngLat: { lng: number; lat: number } }) => {\n if (!onClick) {\n return;\n }\n\n onClick({ latitude: event.lngLat.lat, longitude: event.lngLat.lng });\n },\n [onClick]\n );\n\n const normalizedMarkers = React.useMemo(\n () => normalizeMarkers(markers),\n [markers]\n );\n\n const markerElements = React.useMemo(\n () =>\n normalizedMarkers.map((marker) => (\n <Marker\n key={marker.id}\n longitude={marker.lng}\n latitude={marker.lat}\n draggable={marker.draggable}\n onDragStart={() => {\n isMarkerDragging.current = true;\n }}\n onDrag={(event) => {\n if (!mapRef.current) {\n return;\n }\n\n const nextLngLat = (event as { lngLat?: { lng?: number; lat?: number } }).lngLat;\n if (!nextLngLat || nextLngLat.lng === undefined || nextLngLat.lat === undefined) {\n return;\n }\n const draggedLng = nextLngLat.lng;\n const draggedLat = nextLngLat.lat;\n\n if (dragAnimationFrame.current) {\n cancelAnimationFrame(dragAnimationFrame.current);\n }\n\n dragAnimationFrame.current = requestAnimationFrame(() => {\n if (!mapRef.current) {\n return;\n }\n\n const bounds = mapRef.current.getBounds();\n const viewportWidth = bounds.getEast() - bounds.getWest();\n const viewportHeight = bounds.getNorth() - bounds.getSouth();\n\n const edgePadding = 0.1;\n const westThreshold = bounds.getWest() + viewportWidth * edgePadding;\n const eastThreshold = bounds.getEast() - viewportWidth * edgePadding;\n const southThreshold = bounds.getSouth() + viewportHeight * edgePadding;\n const northThreshold = bounds.getNorth() - viewportHeight * edgePadding;\n\n const nearWestEdge = draggedLng < westThreshold;\n const nearEastEdge = draggedLng > eastThreshold;\n const nearSouthEdge = draggedLat < southThreshold;\n const nearNorthEdge = draggedLat > northThreshold;\n\n if (!nearWestEdge && !nearEastEdge && !nearSouthEdge && !nearNorthEdge) {\n return;\n }\n\n let panLng = draggedLng;\n let panLat = draggedLat;\n const offsetAmount = 0.2;\n\n if (nearWestEdge) {\n panLng = draggedLng - viewportWidth * offsetAmount;\n }\n if (nearEastEdge) {\n panLng = draggedLng + viewportWidth * offsetAmount;\n }\n if (nearSouthEdge) {\n panLat = draggedLat - viewportHeight * offsetAmount;\n }\n if (nearNorthEdge) {\n panLat = draggedLat + viewportHeight * offsetAmount;\n }\n\n mapRef.current?.easeTo({\n center: [panLng, panLat],\n duration: 200\n });\n });\n }}\n onDragEnd={(event) => {\n isMarkerDragging.current = false;\n\n if (dragAnimationFrame.current) {\n cancelAnimationFrame(dragAnimationFrame.current);\n dragAnimationFrame.current = null;\n }\n\n if (!onMarkerDrag) {\n return;\n }\n\n const nextLngLat = (event as { lngLat?: { lng?: number; lat?: number } }).lngLat;\n if (!nextLngLat || nextLngLat.lng === undefined || nextLngLat.lat === undefined) {\n return;\n }\n\n onMarkerDrag(marker.id ?? null, {\n latitude: nextLngLat.lat,\n longitude: nextLngLat.lng\n });\n }}\n >\n {marker.element\n ? typeof marker.element === \"function\"\n ? marker.element()\n : marker.element\n : <DefaultMarker marker={marker} />}\n </Marker>\n )),\n [normalizedMarkers, onMarkerDrag]\n );\n\n const resolvedMapStyleUrl = React.useMemo(() => {\n if (styleUrl) {\n return appendStadiaApiKey(styleUrl, stadiaApiKey);\n }\n\n if (mapStyle) {\n return getMapLibreStyleUrl(mapStyle, stadiaApiKey);\n }\n\n return getMapLibreStyleUrl(\"osm-bright\", stadiaApiKey);\n }, [mapStyle, stadiaApiKey, styleUrl]);\n\n return (\n <div\n className={joinClassNames(\"relative w-full h-full\", className)}\n style={{ width: \"100%\", height: \"100%\", ...style }}\n >\n <Map\n ref={mapRef}\n {...internalViewState}\n mapStyle={resolvedMapStyleUrl}\n onMoveStart={handleMoveStart}\n onMove={handleMove}\n onMoveEnd={handleMoveEnd}\n onClick={handleMapClick}\n attributionControl={false}\n trackResize\n dragRotate={false}\n touchZoomRotate={false}\n >\n {showGeolocateControl ? (\n <GeolocateControl position={geolocateControlPosition} />\n ) : null}\n\n {showNavigationControl ? (\n <NavigationControl position={navigationControlPosition} />\n ) : null}\n\n {markerElements}\n\n {children}\n </Map>\n </div>\n );\n}\n\nexport const DTMapLibreMap = MapLibre;\n"]}
1
+ {"version":3,"sources":["../../src/utils/getMapLibreStyleUrl.ts","../../src/core/MapLibre.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["const MAPLIBRE_DEFAULT_STYLE_URL =\n \"https://basemaps.cartocdn.com/gl/positron-gl-style/style.json\";\nconst DEFAULT_STADIA_STYLE_URL =\n \"https://tiles.stadiamaps.com/styles/osm_bright.json\";\n\nconst STYLE_MAP: Record<string, string> = {\n default: DEFAULT_STADIA_STYLE_URL,\n \"alidade-smooth\": \"https://tiles.stadiamaps.com/styles/alidade_smooth.json\",\n \"alidade-smooth-dark\": \"https://tiles.stadiamaps.com/styles/alidade_smooth_dark.json\",\n \"maplibre-default\": MAPLIBRE_DEFAULT_STYLE_URL,\n \"osm-bright\": \"https://tiles.stadiamaps.com/styles/osm_bright.json\",\n \"stadia-outdoors\": \"https://tiles.stadiamaps.com/styles/outdoors.json\",\n \"stamen-toner\": \"https://tiles.stadiamaps.com/styles/stamen_toner.json\",\n \"stamen-terrain\": \"https://tiles.stadiamaps.com/styles/stamen_terrain.json\",\n \"stamen-watercolor\": \"https://tiles.stadiamaps.com/styles/stamen_watercolor.json\"\n};\n\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\nexport type MapLibreBuiltInStyle = keyof typeof STYLE_MAP;\n\nfunction isStadiaMapsUrl(url: string): boolean {\n try {\n const parsed = new URL(url);\n return parsed.hostname === \"tiles.stadiamaps.com\";\n } catch {\n return false;\n }\n}\n\nfunction assertStadiaApiKey(stadiaApiKey: string): void {\n if (!stadiaApiKey.trim()) {\n throw new Error(\n \"A non-empty stadiaApiKey is required for Stadia Maps style URLs.\"\n );\n }\n}\n\nexport function appendStadiaApiKey(\n styleUrl: string,\n stadiaApiKey: string\n): string {\n if (!isStadiaMapsUrl(styleUrl)) {\n return styleUrl;\n }\n\n assertStadiaApiKey(stadiaApiKey);\n\n const parsed = new URL(styleUrl);\n if (!parsed.searchParams.has(\"api_key\")) {\n parsed.searchParams.set(\"api_key\", stadiaApiKey);\n }\n\n return parsed.toString();\n}\n\nexport function getMapLibreStyleUrl(\n value: string | undefined,\n stadiaApiKey: string\n): string {\n const normalizedApiKey = stadiaApiKey.trim();\n\n if (!value || typeof value !== \"string\") {\n if (!normalizedApiKey) {\n return MAPLIBRE_DEFAULT_STYLE_URL;\n }\n return appendStadiaApiKey(DEFAULT_STADIA_STYLE_URL, normalizedApiKey);\n }\n\n if (STYLE_MAP[value]) {\n const mappedStyleUrl = STYLE_MAP[value];\n if (isStadiaMapsUrl(mappedStyleUrl) && !normalizedApiKey) {\n return MAPLIBRE_DEFAULT_STYLE_URL;\n }\n return appendStadiaApiKey(mappedStyleUrl, normalizedApiKey);\n }\n\n if (HTTP_URL_REGEX.test(value)) {\n if (isStadiaMapsUrl(value) && !normalizedApiKey) {\n return MAPLIBRE_DEFAULT_STYLE_URL;\n }\n return appendStadiaApiKey(value, normalizedApiKey);\n }\n\n if (!normalizedApiKey) {\n return MAPLIBRE_DEFAULT_STYLE_URL;\n }\n\n return appendStadiaApiKey(DEFAULT_STADIA_STYLE_URL, normalizedApiKey);\n}\n\nexport { DEFAULT_STADIA_STYLE_URL, MAPLIBRE_DEFAULT_STYLE_URL };\n","import React from \"react\";\nimport {\n GeolocateControl,\n Map,\n Marker,\n NavigationControl,\n type MapRef,\n type ViewStateChangeEvent\n} from \"react-map-gl/maplibre\";\n\nimport type {\n BasicMarkerInput,\n MapLibreFlyToOptions,\n MapLibreMarker,\n MapLibreProps,\n MapViewState\n} from \"../types\";\nimport { appendStadiaApiKey, getMapLibreStyleUrl } from \"../utils\";\n\nconst DEFAULT_MAPLIBRE_CSS_HREF =\n \"https://cdn.jsdelivr.net/npm/maplibre-gl@5.18.0/dist/maplibre-gl.css\";\nconst MAPLIBRE_STYLESHEET_ID = \"page-speed-maplibre-gl-css\";\nconst DEFAULT_FLY_TO_OPTIONS: Readonly<MapLibreFlyToOptions> = Object.freeze({});\nconst VIEW_STATE_COORDINATE_EPSILON = 0.000001;\nconst VIEW_STATE_ZOOM_EPSILON = 0.01;\nconst DEFAULT_FLY_TO_EASING = (t: number): number => 1 - Math.pow(1 - t, 3);\n\nfunction joinClassNames(...classNames: Array<string | undefined>): string {\n return classNames.filter(Boolean).join(\" \");\n}\n\nfunction hasMeaningfulViewStateDelta(\n previous: MapViewState,\n next: MapViewState\n): boolean {\n return (\n Math.abs(previous.latitude - next.latitude) > VIEW_STATE_COORDINATE_EPSILON ||\n Math.abs(previous.longitude - next.longitude) > VIEW_STATE_COORDINATE_EPSILON ||\n Math.abs(previous.zoom - next.zoom) > VIEW_STATE_ZOOM_EPSILON\n );\n}\n\nfunction ensureMapLibreStylesheet(href: string): void {\n if (typeof document === \"undefined\") {\n return;\n }\n\n const existingLink = document.getElementById(MAPLIBRE_STYLESHEET_ID);\n if (existingLink instanceof HTMLLinkElement) {\n if (existingLink.getAttribute(\"href\") !== href) {\n existingLink.setAttribute(\"href\", href);\n }\n return;\n }\n\n const matchingLink = Array.from(\n document.querySelectorAll(\"link[rel='stylesheet']\")\n ).find((link) => link.getAttribute(\"href\") === href);\n\n if (matchingLink instanceof HTMLLinkElement) {\n matchingLink.id = MAPLIBRE_STYLESHEET_ID;\n return;\n }\n\n const stylesheet = document.createElement(\"link\");\n stylesheet.id = MAPLIBRE_STYLESHEET_ID;\n stylesheet.rel = \"stylesheet\";\n stylesheet.href = href;\n stylesheet.dataset.pageSpeedMaps = \"maplibre-css\";\n document.head.appendChild(stylesheet);\n}\n\nfunction DefaultMarker({ marker }: { marker: MapLibreMarker }) {\n return (\n <div\n style={{\n cursor: marker.draggable ? \"grab\" : \"pointer\",\n transform: \"translate(-50%, -100%)\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n position: \"relative\"\n }}\n onClick={marker.onClick}\n >\n <svg\n aria-hidden=\"true\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill={marker.color || \"#3B82F6\"}\n style={{ filter: \"drop-shadow(0 2px 8px rgba(0,0,0,0.35))\" }}\n >\n <path d=\"M12 2C8.13 2 5 5.13 5 9c0 4.85 6.13 12.24 6.39 12.55a.75.75 0 0 0 1.16 0C12.87 21.24 19 13.85 19 9c0-3.87-3.13-7-7-7Zm0 9.75A2.75 2.75 0 1 1 12 6.25a2.75 2.75 0 0 1 0 5.5Z\" />\n </svg>\n {marker.label ? (\n <div\n style={{\n position: \"absolute\",\n bottom: -28,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n background: \"#FFFFFF\",\n borderRadius: 6,\n padding: \"2px 8px\",\n fontSize: 12,\n fontWeight: 500,\n whiteSpace: \"nowrap\",\n boxShadow: \"0 3px 10px rgba(0, 0, 0, 0.2)\"\n }}\n >\n {marker.label}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction normalizeMarkers(\n markers: (MapLibreMarker | BasicMarkerInput)[]\n): MapLibreMarker[] {\n return markers.map((marker, index) => {\n if (\n (marker as MapLibreMarker).lat !== undefined &&\n (marker as MapLibreMarker).lng !== undefined\n ) {\n return marker as MapLibreMarker;\n }\n\n const basicMarker = marker as BasicMarkerInput;\n return {\n id: basicMarker.id ?? index,\n lat: basicMarker.latitude,\n lng: basicMarker.longitude,\n color: basicMarker.color,\n draggable: basicMarker.draggable,\n label: basicMarker.label,\n element: basicMarker.element,\n onClick: basicMarker.onClick\n };\n });\n}\n\nexport function MapLibre({\n stadiaApiKey,\n mapLibreCssHref,\n viewState,\n onViewStateChange,\n mapStyle,\n center = viewState\n ? { lat: viewState.latitude ?? 0, lng: viewState.longitude ?? 0 }\n : { lat: 0, lng: 0 },\n zoom = viewState?.zoom ?? 14,\n styleUrl,\n markers = [],\n onMoveEnd,\n onClick,\n onMarkerDrag,\n className,\n style,\n children,\n showNavigationControl = true,\n showGeolocateControl = false,\n navigationControlPosition = \"bottom-right\",\n geolocateControlPosition = \"top-left\",\n flyToOptions = DEFAULT_FLY_TO_OPTIONS\n}: MapLibreProps) {\n const mapRef = React.useRef<MapRef>(null);\n const resolvedMapLibreCssHref =\n mapLibreCssHref && mapLibreCssHref.trim().length > 0\n ? mapLibreCssHref\n : DEFAULT_MAPLIBRE_CSS_HREF;\n\n const [internalViewState, setInternalViewState] = React.useState<MapViewState>({\n latitude: viewState?.latitude ?? center.lat,\n longitude: viewState?.longitude ?? center.lng,\n zoom: viewState?.zoom ?? zoom\n });\n\n const isUserInteracting = React.useRef(false);\n const isMarkerDragging = React.useRef(false);\n const dragAnimationFrame = React.useRef<number | null>(null);\n const lastReportedViewState = React.useRef<MapViewState | null>(null);\n\n const resolvedFlyToOptions = React.useMemo(\n () => ({\n speed: flyToOptions.speed ?? 0.8,\n curve: flyToOptions.curve ?? 1.2,\n bearing: flyToOptions.bearing ?? 0,\n easing: flyToOptions.easing ?? DEFAULT_FLY_TO_EASING\n }),\n [\n flyToOptions.bearing,\n flyToOptions.curve,\n flyToOptions.easing,\n flyToOptions.speed\n ]\n );\n\n React.useEffect(() => {\n ensureMapLibreStylesheet(resolvedMapLibreCssHref);\n }, [resolvedMapLibreCssHref]);\n\n React.useEffect(() => {\n if (\n !mapRef.current ||\n !viewState ||\n isUserInteracting.current ||\n isMarkerDragging.current\n ) {\n return;\n }\n\n setInternalViewState((previous) => {\n const next = {\n latitude: viewState.latitude ?? previous.latitude,\n longitude: viewState.longitude ?? previous.longitude,\n zoom: viewState.zoom ?? previous.zoom\n };\n\n const hasChanged = hasMeaningfulViewStateDelta(previous, next);\n\n if (!hasChanged) {\n return previous;\n }\n\n const isEchoedMoveState =\n !!lastReportedViewState.current &&\n !hasMeaningfulViewStateDelta(lastReportedViewState.current, next);\n\n if (!isEchoedMoveState) {\n mapRef.current?.flyTo({\n center: [next.longitude, next.latitude],\n zoom: next.zoom,\n speed: resolvedFlyToOptions.speed,\n curve: resolvedFlyToOptions.curve,\n bearing: resolvedFlyToOptions.bearing,\n easing: resolvedFlyToOptions.easing,\n essential: true\n });\n }\n\n return next;\n });\n }, [\n resolvedFlyToOptions,\n viewState?.latitude,\n viewState?.longitude,\n viewState?.zoom\n ]);\n\n const handleMoveStart = React.useCallback(() => {\n isUserInteracting.current = true;\n }, []);\n\n const handleMove = React.useCallback(\n (event: ViewStateChangeEvent) => {\n const nextViewState = event.viewState;\n setInternalViewState({\n latitude: nextViewState.latitude,\n longitude: nextViewState.longitude,\n zoom: nextViewState.zoom\n });\n\n const roundedViewState = {\n latitude: Number(nextViewState.latitude.toFixed(6)),\n longitude: Number(nextViewState.longitude.toFixed(6)),\n zoom: Number(nextViewState.zoom.toFixed(2))\n };\n\n lastReportedViewState.current = roundedViewState;\n onViewStateChange?.(roundedViewState);\n },\n [onViewStateChange]\n );\n\n const handleMoveEnd = React.useCallback(\n (event: ViewStateChangeEvent) => {\n isUserInteracting.current = false;\n\n if (!onMoveEnd) {\n return;\n }\n\n const map = event.target;\n const nextCenter = map.getCenter();\n const nextZoom = map.getZoom();\n const bounds = map.getBounds();\n\n onMoveEnd(\n {\n lat: Number(nextCenter.lat.toFixed(6)),\n lng: Number(nextCenter.lng.toFixed(6))\n },\n Number(nextZoom.toFixed(2)),\n bounds\n );\n },\n [onMoveEnd]\n );\n\n const handleMapClick = React.useCallback(\n (event: { lngLat: { lng: number; lat: number } }) => {\n if (!onClick) {\n return;\n }\n\n onClick({ latitude: event.lngLat.lat, longitude: event.lngLat.lng });\n },\n [onClick]\n );\n\n const normalizedMarkers = React.useMemo(\n () => normalizeMarkers(markers),\n [markers]\n );\n\n const markerElements = React.useMemo(\n () =>\n normalizedMarkers.map((marker) => (\n <Marker\n key={marker.id}\n longitude={marker.lng}\n latitude={marker.lat}\n draggable={marker.draggable}\n onDragStart={() => {\n isMarkerDragging.current = true;\n }}\n onDrag={(event) => {\n if (!mapRef.current) {\n return;\n }\n\n const nextLngLat = (event as { lngLat?: { lng?: number; lat?: number } }).lngLat;\n if (!nextLngLat || nextLngLat.lng === undefined || nextLngLat.lat === undefined) {\n return;\n }\n const draggedLng = nextLngLat.lng;\n const draggedLat = nextLngLat.lat;\n\n if (dragAnimationFrame.current) {\n cancelAnimationFrame(dragAnimationFrame.current);\n }\n\n dragAnimationFrame.current = requestAnimationFrame(() => {\n if (!mapRef.current) {\n return;\n }\n\n const bounds = mapRef.current.getBounds();\n const viewportWidth = bounds.getEast() - bounds.getWest();\n const viewportHeight = bounds.getNorth() - bounds.getSouth();\n\n const edgePadding = 0.1;\n const westThreshold = bounds.getWest() + viewportWidth * edgePadding;\n const eastThreshold = bounds.getEast() - viewportWidth * edgePadding;\n const southThreshold = bounds.getSouth() + viewportHeight * edgePadding;\n const northThreshold = bounds.getNorth() - viewportHeight * edgePadding;\n\n const nearWestEdge = draggedLng < westThreshold;\n const nearEastEdge = draggedLng > eastThreshold;\n const nearSouthEdge = draggedLat < southThreshold;\n const nearNorthEdge = draggedLat > northThreshold;\n\n if (!nearWestEdge && !nearEastEdge && !nearSouthEdge && !nearNorthEdge) {\n return;\n }\n\n let panLng = draggedLng;\n let panLat = draggedLat;\n const offsetAmount = 0.2;\n\n if (nearWestEdge) {\n panLng = draggedLng - viewportWidth * offsetAmount;\n }\n if (nearEastEdge) {\n panLng = draggedLng + viewportWidth * offsetAmount;\n }\n if (nearSouthEdge) {\n panLat = draggedLat - viewportHeight * offsetAmount;\n }\n if (nearNorthEdge) {\n panLat = draggedLat + viewportHeight * offsetAmount;\n }\n\n mapRef.current?.easeTo({\n center: [panLng, panLat],\n duration: 200\n });\n });\n }}\n onDragEnd={(event) => {\n isMarkerDragging.current = false;\n\n if (dragAnimationFrame.current) {\n cancelAnimationFrame(dragAnimationFrame.current);\n dragAnimationFrame.current = null;\n }\n\n if (!onMarkerDrag) {\n return;\n }\n\n const nextLngLat = (event as { lngLat?: { lng?: number; lat?: number } }).lngLat;\n if (!nextLngLat || nextLngLat.lng === undefined || nextLngLat.lat === undefined) {\n return;\n }\n\n onMarkerDrag(marker.id ?? null, {\n latitude: nextLngLat.lat,\n longitude: nextLngLat.lng\n });\n }}\n >\n {marker.element\n ? typeof marker.element === \"function\"\n ? marker.element()\n : marker.element\n : <DefaultMarker marker={marker} />}\n </Marker>\n )),\n [normalizedMarkers, onMarkerDrag]\n );\n\n const resolvedMapStyleUrl = React.useMemo(() => {\n if (styleUrl) {\n return appendStadiaApiKey(styleUrl, stadiaApiKey);\n }\n\n if (mapStyle) {\n return getMapLibreStyleUrl(mapStyle, stadiaApiKey);\n }\n\n return getMapLibreStyleUrl(\"osm-bright\", stadiaApiKey);\n }, [mapStyle, stadiaApiKey, styleUrl]);\n\n return (\n <div\n className={joinClassNames(\"relative w-full h-full\", className)}\n style={{ width: \"100%\", height: \"100%\", ...style }}\n >\n <Map\n ref={mapRef}\n {...internalViewState}\n mapStyle={resolvedMapStyleUrl}\n onMoveStart={handleMoveStart}\n onMove={handleMove}\n onMoveEnd={handleMoveEnd}\n onClick={handleMapClick}\n attributionControl={false}\n trackResize\n dragRotate={false}\n touchZoomRotate={false}\n >\n {showGeolocateControl ? (\n <GeolocateControl position={geolocateControlPosition} />\n ) : null}\n\n {showNavigationControl ? (\n <NavigationControl position={navigationControlPosition} />\n ) : null}\n\n {markerElements}\n\n {children}\n </Map>\n </div>\n );\n}\n\nexport const DTMapLibreMap = MapLibre;\n"]}
package/dist/index.cjs CHANGED
@@ -87,9 +87,16 @@ function generateGoogleDirectionsLink(latitude, longitude) {
87
87
  }
88
88
  var DEFAULT_MAPLIBRE_CSS_HREF = "https://cdn.jsdelivr.net/npm/maplibre-gl@5.18.0/dist/maplibre-gl.css";
89
89
  var MAPLIBRE_STYLESHEET_ID = "page-speed-maplibre-gl-css";
90
+ var DEFAULT_FLY_TO_OPTIONS = Object.freeze({});
91
+ var VIEW_STATE_COORDINATE_EPSILON = 1e-6;
92
+ var VIEW_STATE_ZOOM_EPSILON = 0.01;
93
+ var DEFAULT_FLY_TO_EASING = (t) => 1 - Math.pow(1 - t, 3);
90
94
  function joinClassNames(...classNames) {
91
95
  return classNames.filter(Boolean).join(" ");
92
96
  }
97
+ function hasMeaningfulViewStateDelta(previous, next) {
98
+ return Math.abs(previous.latitude - next.latitude) > VIEW_STATE_COORDINATE_EPSILON || Math.abs(previous.longitude - next.longitude) > VIEW_STATE_COORDINATE_EPSILON || Math.abs(previous.zoom - next.zoom) > VIEW_STATE_ZOOM_EPSILON;
99
+ }
93
100
  function ensureMapLibreStylesheet(href) {
94
101
  if (typeof document === "undefined") {
95
102
  return;
@@ -202,7 +209,7 @@ function MapLibre({
202
209
  showGeolocateControl = false,
203
210
  navigationControlPosition = "bottom-right",
204
211
  geolocateControlPosition = "top-left",
205
- flyToOptions = {}
212
+ flyToOptions = DEFAULT_FLY_TO_OPTIONS
206
213
  }) {
207
214
  const mapRef = React__default.default.useRef(null);
208
215
  const resolvedMapLibreCssHref = mapLibreCssHref && mapLibreCssHref.trim().length > 0 ? mapLibreCssHref : DEFAULT_MAPLIBRE_CSS_HREF;
@@ -214,6 +221,21 @@ function MapLibre({
214
221
  const isUserInteracting = React__default.default.useRef(false);
215
222
  const isMarkerDragging = React__default.default.useRef(false);
216
223
  const dragAnimationFrame = React__default.default.useRef(null);
224
+ const lastReportedViewState = React__default.default.useRef(null);
225
+ const resolvedFlyToOptions = React__default.default.useMemo(
226
+ () => ({
227
+ speed: flyToOptions.speed ?? 0.8,
228
+ curve: flyToOptions.curve ?? 1.2,
229
+ bearing: flyToOptions.bearing ?? 0,
230
+ easing: flyToOptions.easing ?? DEFAULT_FLY_TO_EASING
231
+ }),
232
+ [
233
+ flyToOptions.bearing,
234
+ flyToOptions.curve,
235
+ flyToOptions.easing,
236
+ flyToOptions.speed
237
+ ]
238
+ );
217
239
  React__default.default.useEffect(() => {
218
240
  ensureMapLibreStylesheet(resolvedMapLibreCssHref);
219
241
  }, [resolvedMapLibreCssHref]);
@@ -227,28 +249,30 @@ function MapLibre({
227
249
  longitude: viewState.longitude ?? previous.longitude,
228
250
  zoom: viewState.zoom ?? previous.zoom
229
251
  };
230
- const hasChanged = previous.latitude !== next.latitude || previous.longitude !== next.longitude || previous.zoom !== next.zoom;
252
+ const hasChanged = hasMeaningfulViewStateDelta(previous, next);
231
253
  if (!hasChanged) {
232
254
  return previous;
233
255
  }
234
- const {
235
- speed = 0.8,
236
- curve = 1.2,
237
- bearing = 0,
238
- easing = (t) => 1 - Math.pow(1 - t, 3)
239
- } = flyToOptions;
240
- mapRef.current?.flyTo({
241
- center: [next.longitude, next.latitude],
242
- zoom: next.zoom,
243
- speed,
244
- curve,
245
- bearing,
246
- easing,
247
- essential: true
248
- });
256
+ const isEchoedMoveState = !!lastReportedViewState.current && !hasMeaningfulViewStateDelta(lastReportedViewState.current, next);
257
+ if (!isEchoedMoveState) {
258
+ mapRef.current?.flyTo({
259
+ center: [next.longitude, next.latitude],
260
+ zoom: next.zoom,
261
+ speed: resolvedFlyToOptions.speed,
262
+ curve: resolvedFlyToOptions.curve,
263
+ bearing: resolvedFlyToOptions.bearing,
264
+ easing: resolvedFlyToOptions.easing,
265
+ essential: true
266
+ });
267
+ }
249
268
  return next;
250
269
  });
251
- }, [flyToOptions, viewState?.latitude, viewState?.longitude, viewState?.zoom]);
270
+ }, [
271
+ resolvedFlyToOptions,
272
+ viewState?.latitude,
273
+ viewState?.longitude,
274
+ viewState?.zoom
275
+ ]);
252
276
  const handleMoveStart = React__default.default.useCallback(() => {
253
277
  isUserInteracting.current = true;
254
278
  }, []);
@@ -260,11 +284,13 @@ function MapLibre({
260
284
  longitude: nextViewState.longitude,
261
285
  zoom: nextViewState.zoom
262
286
  });
263
- onViewStateChange?.({
287
+ const roundedViewState = {
264
288
  latitude: Number(nextViewState.latitude.toFixed(6)),
265
289
  longitude: Number(nextViewState.longitude.toFixed(6)),
266
290
  zoom: Number(nextViewState.zoom.toFixed(2))
267
- });
291
+ };
292
+ lastReportedViewState.current = roundedViewState;
293
+ onViewStateChange?.(roundedViewState);
268
294
  },
269
295
  [onViewStateChange]
270
296
  );