@page-speed/maps 0.1.6 → 0.1.8
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.
- package/dist/components/geo-map.cjs +85 -26
- package/dist/components/geo-map.cjs.map +1 -1
- package/dist/components/geo-map.js +85 -26
- package/dist/components/geo-map.js.map +1 -1
- package/dist/components/index.cjs +85 -26
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +85 -26
- package/dist/components/index.js.map +1 -1
- package/dist/core/MapLibre.cjs +42 -1
- package/dist/core/MapLibre.cjs.map +1 -1
- package/dist/core/MapLibre.js +42 -1
- package/dist/core/MapLibre.js.map +1 -1
- package/dist/core/index.cjs +42 -1
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.js +42 -1
- package/dist/core/index.js.map +1 -1
- package/dist/index.cjs +85 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +85 -26
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -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":"MapLibre.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"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/getMapLibreStyleUrl.ts","../../src/core/MapLibre.tsx"],"names":["jsxs","jsx","React","Marker","Map","GeolocateControl","NavigationControl"],"mappings":";;;;;;;;;;;;;AAAA,IAAM,0BAAA,GACJ,+DAAA;AACF,IAAM,wBAAA,GACJ,qDAAA;AAEF,IAAM,SAAA,GAAoC;AAAA,EACxC,OAAA,EAAS,wBAAA;AAAA,EACT,gBAAA,EAAkB,yDAAA;AAAA,EAClB,qBAAA,EAAuB,8DAAA;AAAA,EACvB,kBAAA,EAAoB,0BAAA;AAAA,EACpB,YAAA,EAAc,qDAAA;AAAA,EACd,iBAAA,EAAmB,mDAAA;AAAA,EACnB,cAAA,EAAgB,uDAAA;AAAA,EAChB,gBAAA,EAAkB,yDAAA;AAAA,EAClB,mBAAA,EAAqB;AACvB,CAAA;AAEA,IAAM,cAAA,GAAiB,eAAA;AAIvB,SAAS,gBAAgB,GAAA,EAAsB;AAC7C,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,OAAO,OAAO,QAAA,KAAa,sBAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,SAAS,mBAAmB,YAAA,EAA4B;AACtD,EAAA,IAAI,CAAC,YAAA,CAAa,IAAA,EAAK,EAAG;AACxB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACF;AAEO,SAAS,kBAAA,CACd,UACA,YAAA,EACQ;AACR,EAAA,IAAI,CAAC,eAAA,CAAgB,QAAQ,CAAA,EAAG;AAC9B,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,kBAAA,CAAmB,YAAY,CAAA;AAE/B,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,QAAQ,CAAA;AAC/B,EAAA,IAAI,CAAC,MAAA,CAAO,YAAA,CAAa,GAAA,CAAI,SAAS,CAAA,EAAG;AACvC,IAAA,MAAA,CAAO,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,YAAY,CAAA;AAAA,EACjD;AAEA,EAAA,OAAO,OAAO,QAAA,EAAS;AACzB;AAEO,SAAS,mBAAA,CACd,OACA,YAAA,EACQ;AACR,EAAA,MAAM,gBAAA,GAAmB,aAAa,IAAA,EAAK;AAE3C,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACvC,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,MAAA,OAAO,0BAAA;AAAA,IACT;AACA,IAAA,OAAO,kBAAA,CAAmB,0BAA0B,gBAAgB,CAAA;AAAA,EACtE;AAEA,EAAA,IAAI,SAAA,CAAU,KAAK,CAAA,EAAG;AACpB,IAAA,MAAM,cAAA,GAAiB,UAAU,KAAK,CAAA;AACtC,IAAA,IAAI,eAAA,CAAgB,cAAc,CAAA,IAAK,CAAC,gBAAA,EAAkB;AACxD,MAAA,OAAO,0BAAA;AAAA,IACT;AACA,IAAA,OAAO,kBAAA,CAAmB,gBAAgB,gBAAgB,CAAA;AAAA,EAC5D;AAEA,EAAA,IAAI,cAAA,CAAe,IAAA,CAAK,KAAK,CAAA,EAAG;AAC9B,IAAA,IAAI,eAAA,CAAgB,KAAK,CAAA,IAAK,CAAC,gBAAA,EAAkB;AAC/C,MAAA,OAAO,0BAAA;AAAA,IACT;AACA,IAAA,OAAO,kBAAA,CAAmB,OAAO,gBAAgB,CAAA;AAAA,EACnD;AAEA,EAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,IAAA,OAAO,0BAAA;AAAA,EACT;AAEA,EAAA,OAAO,kBAAA,CAAmB,0BAA0B,gBAAgB,CAAA;AACtE;ACtEA,IAAM,yBAAA,GACJ,sEAAA;AACF,IAAM,sBAAA,GAAyB,4BAAA;AAC/B,IAAM,sBAAA,GAAyD,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAC/E,IAAM,6BAAA,GAAgC,IAAA;AACtC,IAAM,uBAAA,GAA0B,IAAA;AAChC,IAAM,qBAAA,GAAwB,CAAC,CAAA,KAAsB,CAAA,GAAI,KAAK,GAAA,CAAI,CAAA,GAAI,GAAG,CAAC,CAAA;AAE1E,SAAS,kBAAkB,UAAA,EAA+C;AACxE,EAAA,OAAO,UAAA,CAAW,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAC5C;AAEA,SAAS,2BAAA,CACP,UACA,IAAA,EACS;AACT,EAAA,OACE,IAAA,CAAK,IAAI,QAAA,CAAS,QAAA,GAAW,KAAK,QAAQ,CAAA,GAAI,6BAAA,IAC9C,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,YAAY,IAAA,CAAK,SAAS,IAAI,6BAAA,IAChD,IAAA,CAAK,IAAI,QAAA,CAAS,IAAA,GAAO,IAAA,CAAK,IAAI,CAAA,GAAI,uBAAA;AAE1C;AAEA,SAAS,yBAAyB,IAAA,EAAoB;AACpD,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,cAAA,CAAe,sBAAsB,CAAA;AACnE,EAAA,IAAI,wBAAwB,eAAA,EAAiB;AAC3C,IAAA,IAAI,YAAA,CAAa,YAAA,CAAa,MAAM,CAAA,KAAM,IAAA,EAAM;AAC9C,MAAA,YAAA,CAAa,YAAA,CAAa,QAAQ,IAAI,CAAA;AAAA,IACxC;AACA,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,eAAe,KAAA,CAAM,IAAA;AAAA,IACzB,QAAA,CAAS,iBAAiB,wBAAwB;AAAA,GACpD,CAAE,KAAK,CAAC,IAAA,KAAS,KAAK,YAAA,CAAa,MAAM,MAAM,IAAI,CAAA;AAEnD,EAAA,IAAI,wBAAwB,eAAA,EAAiB;AAC3C,IAAA,YAAA,CAAa,EAAA,GAAK,sBAAA;AAClB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AAChD,EAAA,UAAA,CAAW,EAAA,GAAK,sBAAA;AAChB,EAAA,UAAA,CAAW,GAAA,GAAM,YAAA;AACjB,EAAA,UAAA,CAAW,IAAA,GAAO,IAAA;AAClB,EAAA,UAAA,CAAW,QAAQ,aAAA,GAAgB,cAAA;AACnC,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,UAAU,CAAA;AACtC;AAEA,SAAS,aAAA,CAAc,EAAE,MAAA,EAAO,EAA+B;AAC7D,EAAA,uBACEA,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,MAAA,EAAQ,MAAA,CAAO,SAAA,GAAY,MAAA,GAAS,SAAA;AAAA,QACpC,SAAA,EAAW,wBAAA;AAAA,QACX,OAAA,EAAS,aAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,QAAA,EAAU;AAAA,OACZ;AAAA,MACA,SAAS,MAAA,CAAO,OAAA;AAAA,MAEhB,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,KAAA,EAAM,IAAA;AAAA,YACN,MAAA,EAAO,IAAA;AAAA,YACP,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAM,OAAO,KAAA,IAAS,SAAA;AAAA,YACtB,KAAA,EAAO,EAAE,MAAA,EAAQ,yCAAA,EAA0C;AAAA,YAE3D,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,6KAAA,EAA8K;AAAA;AAAA,SACxL;AAAA,QACC,OAAO,KAAA,mBACNA,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,QAAA,EAAU,UAAA;AAAA,cACV,MAAA,EAAQ,GAAA;AAAA,cACR,IAAA,EAAM,KAAA;AAAA,cACN,SAAA,EAAW,kBAAA;AAAA,cACX,UAAA,EAAY,SAAA;AAAA,cACZ,YAAA,EAAc,CAAA;AAAA,cACd,OAAA,EAAS,SAAA;AAAA,cACT,QAAA,EAAU,EAAA;AAAA,cACV,UAAA,EAAY,GAAA;AAAA,cACZ,UAAA,EAAY,QAAA;AAAA,cACZ,SAAA,EAAW;AAAA,aACb;AAAA,YAEC,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,SACV,GACE;AAAA;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,iBACP,OAAA,EACkB;AAClB,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,KAAU;AACpC,IAAA,IACG,MAAA,CAA0B,GAAA,KAAQ,MAAA,IAClC,MAAA,CAA0B,QAAQ,MAAA,EACnC;AACA,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,WAAA,GAAc,MAAA;AACpB,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,YAAY,EAAA,IAAM,KAAA;AAAA,MACtB,KAAK,WAAA,CAAY,QAAA;AAAA,MACjB,KAAK,WAAA,CAAY,SAAA;AAAA,MACjB,OAAO,WAAA,CAAY,KAAA;AAAA,MACnB,WAAW,WAAA,CAAY,SAAA;AAAA,MACvB,OAAO,WAAA,CAAY,KAAA;AAAA,MACnB,SAAS,WAAA,CAAY,OAAA;AAAA,MACrB,SAAS,WAAA,CAAY;AAAA,KACvB;AAAA,EACF,CAAC,CAAA;AACH;AAEO,SAAS,QAAA,CAAS;AAAA,EACvB,YAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA;AAAA,EACA,iBAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAS,SAAA,GACL,EAAE,GAAA,EAAK,SAAA,CAAU,YAAY,CAAA,EAAG,GAAA,EAAK,SAAA,CAAU,SAAA,IAAa,GAAE,GAC9D,EAAE,GAAA,EAAK,CAAA,EAAG,KAAK,CAAA,EAAE;AAAA,EACrB,IAAA,GAAO,WAAW,IAAA,IAAQ,EAAA;AAAA,EAC1B,QAAA;AAAA,EACA,UAAU,EAAC;AAAA,EACX,SAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,qBAAA,GAAwB,IAAA;AAAA,EACxB,oBAAA,GAAuB,KAAA;AAAA,EACvB,yBAAA,GAA4B,cAAA;AAAA,EAC5B,wBAAA,GAA2B,UAAA;AAAA,EAC3B,YAAA,GAAe;AACjB,CAAA,EAAkB;AAChB,EAAA,MAAM,MAAA,GAASC,sBAAA,CAAM,MAAA,CAAe,IAAI,CAAA;AACxC,EAAA,MAAM,0BACJ,eAAA,IAAmB,eAAA,CAAgB,MAAK,CAAE,MAAA,GAAS,IAC/C,eAAA,GACA,yBAAA;AAEN,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,uBAAM,QAAA,CAAuB;AAAA,IAC7E,QAAA,EAAU,SAAA,EAAW,QAAA,IAAY,MAAA,CAAO,GAAA;AAAA,IACxC,SAAA,EAAW,SAAA,EAAW,SAAA,IAAa,MAAA,CAAO,GAAA;AAAA,IAC1C,IAAA,EAAM,WAAW,IAAA,IAAQ;AAAA,GAC1B,CAAA;AAED,EAAA,MAAM,iBAAA,GAAoBA,sBAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AAC5C,EAAA,MAAM,gBAAA,GAAmBA,sBAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AAC3C,EAAA,MAAM,kBAAA,GAAqBA,sBAAA,CAAM,MAAA,CAAsB,IAAI,CAAA;AAC3D,EAAA,MAAM,qBAAA,GAAwBA,sBAAA,CAAM,MAAA,CAA4B,IAAI,CAAA;AAEpE,EAAA,MAAM,uBAAuBA,sBAAA,CAAM,OAAA;AAAA,IACjC,OAAO;AAAA,MACL,KAAA,EAAO,aAAa,KAAA,IAAS,GAAA;AAAA,MAC7B,KAAA,EAAO,aAAa,KAAA,IAAS,GAAA;AAAA,MAC7B,OAAA,EAAS,aAAa,OAAA,IAAW,CAAA;AAAA,MACjC,MAAA,EAAQ,aAAa,MAAA,IAAU;AAAA,KACjC,CAAA;AAAA,IACA;AAAA,MACE,YAAA,CAAa,OAAA;AAAA,MACb,YAAA,CAAa,KAAA;AAAA,MACb,YAAA,CAAa,MAAA;AAAA,MACb,YAAA,CAAa;AAAA;AACf,GACF;AAEA,EAAAA,sBAAA,CAAM,UAAU,MAAM;AACpB,IAAA,wBAAA,CAAyB,uBAAuB,CAAA;AAAA,EAClD,CAAA,EAAG,CAAC,uBAAuB,CAAC,CAAA;AAE5B,EAAAA,sBAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IACE,CAAC,OAAO,OAAA,IACR,CAAC,aACD,iBAAA,CAAkB,OAAA,IAClB,iBAAiB,OAAA,EACjB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,oBAAA,CAAqB,CAAC,QAAA,KAAa;AACjC,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,QAAA,EAAU,SAAA,CAAU,QAAA,IAAY,QAAA,CAAS,QAAA;AAAA,QACzC,SAAA,EAAW,SAAA,CAAU,SAAA,IAAa,QAAA,CAAS,SAAA;AAAA,QAC3C,IAAA,EAAM,SAAA,CAAU,IAAA,IAAQ,QAAA,CAAS;AAAA,OACnC;AAEA,MAAA,MAAM,UAAA,GAAa,2BAAA,CAA4B,QAAA,EAAU,IAAI,CAAA;AAE7D,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,OAAO,QAAA;AAAA,MACT;AAEA,MAAA,MAAM,iBAAA,GACJ,CAAC,CAAC,qBAAA,CAAsB,WACxB,CAAC,2BAAA,CAA4B,qBAAA,CAAsB,OAAA,EAAS,IAAI,CAAA;AAElE,MAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,QAAA,MAAA,CAAO,SAAS,KAAA,CAAM;AAAA,UACpB,MAAA,EAAQ,CAAC,IAAA,CAAK,SAAA,EAAW,KAAK,QAAQ,CAAA;AAAA,UACtC,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,OAAO,oBAAA,CAAqB,KAAA;AAAA,UAC5B,OAAO,oBAAA,CAAqB,KAAA;AAAA,UAC5B,SAAS,oBAAA,CAAqB,OAAA;AAAA,UAC9B,QAAQ,oBAAA,CAAqB,MAAA;AAAA,UAC7B,SAAA,EAAW;AAAA,SACZ,CAAA;AAAA,MACH;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA,EAAG;AAAA,IACD,oBAAA;AAAA,IACA,SAAA,EAAW,QAAA;AAAA,IACX,SAAA,EAAW,SAAA;AAAA,IACX,SAAA,EAAW;AAAA,GACZ,CAAA;AAED,EAAA,MAAM,eAAA,GAAkBA,sBAAA,CAAM,WAAA,CAAY,MAAM;AAC9C,IAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAAA,EAC9B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,aAAaA,sBAAA,CAAM,WAAA;AAAA,IACvB,CAAC,KAAA,KAAgC;AAC/B,MAAA,MAAM,gBAAgB,KAAA,CAAM,SAAA;AAC5B,MAAA,oBAAA,CAAqB;AAAA,QACnB,UAAU,aAAA,CAAc,QAAA;AAAA,QACxB,WAAW,aAAA,CAAc,SAAA;AAAA,QACzB,MAAM,aAAA,CAAc;AAAA,OACrB,CAAA;AAED,MAAA,MAAM,gBAAA,GAAmB;AAAA,QACvB,UAAU,MAAA,CAAO,aAAA,CAAc,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,QAClD,WAAW,MAAA,CAAO,aAAA,CAAc,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,QACpD,MAAM,MAAA,CAAO,aAAA,CAAc,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC;AAAA,OAC5C;AAEA,MAAA,qBAAA,CAAsB,OAAA,GAAU,gBAAA;AAChC,MAAA,iBAAA,GAAoB,gBAAgB,CAAA;AAAA,IACtC,CAAA;AAAA,IACA,CAAC,iBAAiB;AAAA,GACpB;AAEA,EAAA,MAAM,gBAAgBA,sBAAA,CAAM,WAAA;AAAA,IAC1B,CAAC,KAAA,KAAgC;AAC/B,MAAA,iBAAA,CAAkB,OAAA,GAAU,KAAA;AAE5B,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,MAAM,KAAA,CAAM,MAAA;AAClB,MAAA,MAAM,UAAA,GAAa,IAAI,SAAA,EAAU;AACjC,MAAA,MAAM,QAAA,GAAW,IAAI,OAAA,EAAQ;AAC7B,MAAA,MAAM,MAAA,GAAS,IAAI,SAAA,EAAU;AAE7B,MAAA,SAAA;AAAA,QACE;AAAA,UACE,KAAK,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,UACrC,KAAK,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAC;AAAA,SACvC;AAAA,QACA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,QAC1B;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,iBAAiBA,sBAAA,CAAM,WAAA;AAAA,IAC3B,CAAC,KAAA,KAAoD;AACnD,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA;AAAA,MACF;AAEA,MAAA,OAAA,CAAQ,EAAE,UAAU,KAAA,CAAM,MAAA,CAAO,KAAK,SAAA,EAAW,KAAA,CAAM,MAAA,CAAO,GAAA,EAAK,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,oBAAoBA,sBAAA,CAAM,OAAA;AAAA,IAC9B,MAAM,iBAAiB,OAAO,CAAA;AAAA,IAC9B,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,iBAAiBA,sBAAA,CAAM,OAAA;AAAA,IAC3B,MACE,iBAAA,CAAkB,GAAA,CAAI,CAAC,MAAA,qBACrBD,cAAA;AAAA,MAACE,eAAA;AAAA,MAAA;AAAA,QAEC,WAAW,MAAA,CAAO,GAAA;AAAA,QAClB,UAAU,MAAA,CAAO,GAAA;AAAA,QACjB,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,aAAa,MAAM;AACjB,UAAA,gBAAA,CAAiB,OAAA,GAAU,IAAA;AAAA,QAC7B,CAAA;AAAA,QACA,MAAA,EAAQ,CAAC,KAAA,KAAU;AACjB,UAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,YAAA;AAAA,UACF;AAEA,UAAA,MAAM,aAAc,KAAA,CAAsD,MAAA;AAC1E,UAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,QAAQ,MAAA,IAAa,UAAA,CAAW,QAAQ,MAAA,EAAW;AAC/E,YAAA;AAAA,UACF;AACA,UAAA,MAAM,aAAa,UAAA,CAAW,GAAA;AAC9B,UAAA,MAAM,aAAa,UAAA,CAAW,GAAA;AAE9B,UAAA,IAAI,mBAAmB,OAAA,EAAS;AAC9B,YAAA,oBAAA,CAAqB,mBAAmB,OAAO,CAAA;AAAA,UACjD;AAEA,UAAA,kBAAA,CAAmB,OAAA,GAAU,sBAAsB,MAAM;AACvD,YAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,cAAA;AAAA,YACF;AAEA,YAAA,MAAM,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,SAAA,EAAU;AACxC,YAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,EAAQ,GAAI,OAAO,OAAA,EAAQ;AACxD,YAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,QAAA,EAAS,GAAI,OAAO,QAAA,EAAS;AAE3D,YAAA,MAAM,WAAA,GAAc,GAAA;AACpB,YAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,EAAQ,GAAI,aAAA,GAAgB,WAAA;AACzD,YAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,EAAQ,GAAI,aAAA,GAAgB,WAAA;AACzD,YAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,QAAA,EAAS,GAAI,cAAA,GAAiB,WAAA;AAC5D,YAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,QAAA,EAAS,GAAI,cAAA,GAAiB,WAAA;AAE5D,YAAA,MAAM,eAAe,UAAA,GAAa,aAAA;AAClC,YAAA,MAAM,eAAe,UAAA,GAAa,aAAA;AAClC,YAAA,MAAM,gBAAgB,UAAA,GAAa,cAAA;AACnC,YAAA,MAAM,gBAAgB,UAAA,GAAa,cAAA;AAEnC,YAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,gBAAgB,CAAC,aAAA,IAAiB,CAAC,aAAA,EAAe;AACtE,cAAA;AAAA,YACF;AAEA,YAAA,IAAI,MAAA,GAAS,UAAA;AACb,YAAA,IAAI,MAAA,GAAS,UAAA;AACb,YAAA,MAAM,YAAA,GAAe,GAAA;AAErB,YAAA,IAAI,YAAA,EAAc;AAChB,cAAA,MAAA,GAAS,aAAa,aAAA,GAAgB,YAAA;AAAA,YACxC;AACA,YAAA,IAAI,YAAA,EAAc;AAChB,cAAA,MAAA,GAAS,aAAa,aAAA,GAAgB,YAAA;AAAA,YACxC;AACA,YAAA,IAAI,aAAA,EAAe;AACjB,cAAA,MAAA,GAAS,aAAa,cAAA,GAAiB,YAAA;AAAA,YACzC;AACA,YAAA,IAAI,aAAA,EAAe;AACjB,cAAA,MAAA,GAAS,aAAa,cAAA,GAAiB,YAAA;AAAA,YACzC;AAEA,YAAA,MAAA,CAAO,SAAS,MAAA,CAAO;AAAA,cACrB,MAAA,EAAQ,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,cACvB,QAAA,EAAU;AAAA,aACX,CAAA;AAAA,UACH,CAAC,CAAA;AAAA,QACH,CAAA;AAAA,QACA,SAAA,EAAW,CAAC,KAAA,KAAU;AACpB,UAAA,gBAAA,CAAiB,OAAA,GAAU,KAAA;AAE3B,UAAA,IAAI,mBAAmB,OAAA,EAAS;AAC9B,YAAA,oBAAA,CAAqB,mBAAmB,OAAO,CAAA;AAC/C,YAAA,kBAAA,CAAmB,OAAA,GAAU,IAAA;AAAA,UAC/B;AAEA,UAAA,IAAI,CAAC,YAAA,EAAc;AACjB,YAAA;AAAA,UACF;AAEA,UAAA,MAAM,aAAc,KAAA,CAAsD,MAAA;AAC1E,UAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,QAAQ,MAAA,IAAa,UAAA,CAAW,QAAQ,MAAA,EAAW;AAC/E,YAAA;AAAA,UACF;AAEA,UAAA,YAAA,CAAa,MAAA,CAAO,MAAM,IAAA,EAAM;AAAA,YAC9B,UAAU,UAAA,CAAW,GAAA;AAAA,YACrB,WAAW,UAAA,CAAW;AAAA,WACvB,CAAA;AAAA,QACH,CAAA;AAAA,QAEC,QAAA,EAAA,MAAA,CAAO,OAAA,GACJ,OAAO,MAAA,CAAO,OAAA,KAAY,UAAA,GACxB,MAAA,CAAO,OAAA,EAAQ,GACf,MAAA,CAAO,OAAA,mBACTF,cAAA,CAAC,iBAAc,MAAA,EAAgB;AAAA,OAAA;AAAA,MAjG9B,MAAA,CAAO;AAAA,KAmGf,CAAA;AAAA,IACH,CAAC,mBAAmB,YAAY;AAAA,GAClC;AAEA,EAAA,MAAM,mBAAA,GAAsBC,sBAAA,CAAM,OAAA,CAAQ,MAAM;AAC9C,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,kBAAA,CAAmB,UAAU,YAAY,CAAA;AAAA,IAClD;AAEA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,mBAAA,CAAoB,UAAU,YAAY,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,mBAAA,CAAoB,cAAc,YAAY,CAAA;AAAA,EACvD,CAAA,EAAG,CAAC,QAAA,EAAU,YAAA,EAAc,QAAQ,CAAC,CAAA;AAErC,EAAA,MAAM,YAAA,GAAeA,sBAAA,CAAM,MAAA,CAAuB,IAAI,CAAA;AAGtD,EAAAA,sBAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,CAAC,MAAA,CAAO,OAAA,IAAW,CAAC,aAAa,OAAA,EAAS;AAG9C,IAAA,MAAM,yBAAyB,MAAM;AACnC,MAAA,MAAM,YAAY,YAAA,CAAa,OAAA;AAC/B,MAAA,MAAM,MAAM,MAAA,CAAO,OAAA;AAEnB,MAAA,IAAI,CAAC,SAAA,IAAa,CAAC,GAAA,EAAK;AAGxB,MAAA,MAAM,IAAA,GAAO,UAAU,qBAAA,EAAsB;AAC7C,MAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,OAAO,WAAW,CAAA;AAG1D,MAAA,MAAM,MAAA,GAAS,IAAI,SAAA,EAAU;AAC7B,MAAA,IAAI,MAAA,IAAU,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ;AACjC,QAAA,MAAM,YAAA,GAAe,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA;AACjD,QAAA,IAAI,YAAA,GAAe,SAAA,IAAa,YAAA,GAAe,GAAA,EAAM;AAEnD,UAAA,GAAA,CAAI,MAAA,EAAO;AAAA,QACb;AAAA,MACF;AAAA,IACF,CAAA;AAGA,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,sBAAA,EAAwB,GAAI,CAAA;AAGzD,IAAA,IAAI,cAAA,GAAwC,IAAA;AAC5C,IAAA,IAAI,OAAO,mBAAmB,WAAA,EAAa;AACzC,MAAA,cAAA,GAAiB,IAAI,eAAe,MAAM;AACxC,QAAA,sBAAA,EAAuB;AAAA,MACzB,CAAC,CAAA;AACD,MAAA,cAAA,CAAe,OAAA,CAAQ,aAAa,OAAO,CAAA;AAAA,IAC7C;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,cAAA,CAAe,UAAA,EAAW;AAAA,MAC5B;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACED,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,YAAA;AAAA,MACL,SAAA,EAAW,cAAA,CAAe,wBAAA,EAA0B,SAAS,CAAA;AAAA,MAC7D,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,MAAA;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,SAAA,EAAW,OAAA;AAAA;AAAA,QACX,QAAA,EAAU,QAAA;AAAA,QACV,QAAA,EAAU,UAAA;AAAA,QACV,GAAG;AAAA,OACL;AAAA,MAEA,QAAA,kBAAAD,eAAA;AAAA,QAACI,YAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,MAAA;AAAA,UACJ,GAAG,iBAAA;AAAA,UACJ,QAAA,EAAU,mBAAA;AAAA,UACV,WAAA,EAAa,eAAA;AAAA,UACb,MAAA,EAAQ,UAAA;AAAA,UACR,SAAA,EAAW,aAAA;AAAA,UACX,OAAA,EAAS,cAAA;AAAA,UACT,kBAAA,EAAoB,KAAA;AAAA,UACpB,WAAA,EAAW,IAAA;AAAA,UACX,UAAA,EAAY,KAAA;AAAA,UACZ,eAAA,EAAiB,KAAA;AAAA,UAEhB,QAAA,EAAA;AAAA,YAAA,oBAAA,mBACCH,cAAA,CAACI,yBAAA,EAAA,EAAiB,QAAA,EAAU,wBAAA,EAA0B,CAAA,GACpD,IAAA;AAAA,YAEH,qBAAA,mBACCJ,cAAA,CAACK,0BAAA,EAAA,EAAkB,QAAA,EAAU,2BAA2B,CAAA,GACtD,IAAA;AAAA,YAEH,cAAA;AAAA,YAEA;AAAA;AAAA;AAAA;AACH;AAAA,GACF;AAEJ;AAEO,IAAM,aAAA,GAAgB","file":"MapLibre.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 const containerRef = React.useRef<HTMLDivElement>(null);\n\n // Fix for MapLibre canvas height growth issue\n React.useEffect(() => {\n if (!mapRef.current || !containerRef.current) return;\n\n // Force the map to respect container bounds\n const enforceContainerHeight = () => {\n const container = containerRef.current;\n const map = mapRef.current;\n\n if (!container || !map) return;\n\n // Get the actual container height\n const rect = container.getBoundingClientRect();\n const maxHeight = Math.min(rect.height, window.innerHeight);\n\n // Ensure the map canvas doesn't exceed container\n const canvas = map.getCanvas();\n if (canvas && canvas.style.height) {\n const canvasHeight = parseInt(canvas.style.height);\n if (canvasHeight > maxHeight || canvasHeight > 2000) {\n // Force resize to container dimensions\n map.resize();\n }\n }\n };\n\n // Check periodically to prevent runaway growth\n const interval = setInterval(enforceContainerHeight, 1000);\n\n // Also check on any resize events if ResizeObserver is available\n let resizeObserver: ResizeObserver | null = null;\n if (typeof ResizeObserver !== \"undefined\") {\n resizeObserver = new ResizeObserver(() => {\n enforceContainerHeight();\n });\n resizeObserver.observe(containerRef.current);\n }\n\n return () => {\n clearInterval(interval);\n if (resizeObserver) {\n resizeObserver.disconnect();\n }\n };\n }, []);\n\n return (\n <div\n ref={containerRef}\n className={joinClassNames(\"relative w-full h-full\", className)}\n style={{\n width: \"100%\",\n height: \"100%\",\n maxHeight: \"100vh\", // Prevent excessive height\n overflow: \"hidden\",\n position: \"relative\",\n ...style\n }}\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/core/MapLibre.js
CHANGED
|
@@ -410,11 +410,52 @@ function MapLibre({
|
|
|
410
410
|
}
|
|
411
411
|
return getMapLibreStyleUrl("osm-bright", stadiaApiKey);
|
|
412
412
|
}, [mapStyle, stadiaApiKey, styleUrl]);
|
|
413
|
+
const containerRef = React.useRef(null);
|
|
414
|
+
React.useEffect(() => {
|
|
415
|
+
if (!mapRef.current || !containerRef.current) return;
|
|
416
|
+
const enforceContainerHeight = () => {
|
|
417
|
+
const container = containerRef.current;
|
|
418
|
+
const map = mapRef.current;
|
|
419
|
+
if (!container || !map) return;
|
|
420
|
+
const rect = container.getBoundingClientRect();
|
|
421
|
+
const maxHeight = Math.min(rect.height, window.innerHeight);
|
|
422
|
+
const canvas = map.getCanvas();
|
|
423
|
+
if (canvas && canvas.style.height) {
|
|
424
|
+
const canvasHeight = parseInt(canvas.style.height);
|
|
425
|
+
if (canvasHeight > maxHeight || canvasHeight > 2e3) {
|
|
426
|
+
map.resize();
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
};
|
|
430
|
+
const interval = setInterval(enforceContainerHeight, 1e3);
|
|
431
|
+
let resizeObserver = null;
|
|
432
|
+
if (typeof ResizeObserver !== "undefined") {
|
|
433
|
+
resizeObserver = new ResizeObserver(() => {
|
|
434
|
+
enforceContainerHeight();
|
|
435
|
+
});
|
|
436
|
+
resizeObserver.observe(containerRef.current);
|
|
437
|
+
}
|
|
438
|
+
return () => {
|
|
439
|
+
clearInterval(interval);
|
|
440
|
+
if (resizeObserver) {
|
|
441
|
+
resizeObserver.disconnect();
|
|
442
|
+
}
|
|
443
|
+
};
|
|
444
|
+
}, []);
|
|
413
445
|
return /* @__PURE__ */ jsx(
|
|
414
446
|
"div",
|
|
415
447
|
{
|
|
448
|
+
ref: containerRef,
|
|
416
449
|
className: joinClassNames("relative w-full h-full", className),
|
|
417
|
-
style: {
|
|
450
|
+
style: {
|
|
451
|
+
width: "100%",
|
|
452
|
+
height: "100%",
|
|
453
|
+
maxHeight: "100vh",
|
|
454
|
+
// Prevent excessive height
|
|
455
|
+
overflow: "hidden",
|
|
456
|
+
position: "relative",
|
|
457
|
+
...style
|
|
458
|
+
},
|
|
418
459
|
children: /* @__PURE__ */ jsxs(
|
|
419
460
|
Map,
|
|
420
461
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/getMapLibreStyleUrl.ts","../../src/core/MapLibre.tsx"],"names":[],"mappings":"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","file":"MapLibre.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"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/getMapLibreStyleUrl.ts","../../src/core/MapLibre.tsx"],"names":[],"mappings":"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","file":"MapLibre.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 const containerRef = React.useRef<HTMLDivElement>(null);\n\n // Fix for MapLibre canvas height growth issue\n React.useEffect(() => {\n if (!mapRef.current || !containerRef.current) return;\n\n // Force the map to respect container bounds\n const enforceContainerHeight = () => {\n const container = containerRef.current;\n const map = mapRef.current;\n\n if (!container || !map) return;\n\n // Get the actual container height\n const rect = container.getBoundingClientRect();\n const maxHeight = Math.min(rect.height, window.innerHeight);\n\n // Ensure the map canvas doesn't exceed container\n const canvas = map.getCanvas();\n if (canvas && canvas.style.height) {\n const canvasHeight = parseInt(canvas.style.height);\n if (canvasHeight > maxHeight || canvasHeight > 2000) {\n // Force resize to container dimensions\n map.resize();\n }\n }\n };\n\n // Check periodically to prevent runaway growth\n const interval = setInterval(enforceContainerHeight, 1000);\n\n // Also check on any resize events if ResizeObserver is available\n let resizeObserver: ResizeObserver | null = null;\n if (typeof ResizeObserver !== \"undefined\") {\n resizeObserver = new ResizeObserver(() => {\n enforceContainerHeight();\n });\n resizeObserver.observe(containerRef.current);\n }\n\n return () => {\n clearInterval(interval);\n if (resizeObserver) {\n resizeObserver.disconnect();\n }\n };\n }, []);\n\n return (\n <div\n ref={containerRef}\n className={joinClassNames(\"relative w-full h-full\", className)}\n style={{\n width: \"100%\",\n height: \"100%\",\n maxHeight: \"100vh\", // Prevent excessive height\n overflow: \"hidden\",\n position: \"relative\",\n ...style\n }}\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/core/index.cjs
CHANGED
|
@@ -416,11 +416,52 @@ function MapLibre({
|
|
|
416
416
|
}
|
|
417
417
|
return getMapLibreStyleUrl("osm-bright", stadiaApiKey);
|
|
418
418
|
}, [mapStyle, stadiaApiKey, styleUrl]);
|
|
419
|
+
const containerRef = React__default.default.useRef(null);
|
|
420
|
+
React__default.default.useEffect(() => {
|
|
421
|
+
if (!mapRef.current || !containerRef.current) return;
|
|
422
|
+
const enforceContainerHeight = () => {
|
|
423
|
+
const container = containerRef.current;
|
|
424
|
+
const map = mapRef.current;
|
|
425
|
+
if (!container || !map) return;
|
|
426
|
+
const rect = container.getBoundingClientRect();
|
|
427
|
+
const maxHeight = Math.min(rect.height, window.innerHeight);
|
|
428
|
+
const canvas = map.getCanvas();
|
|
429
|
+
if (canvas && canvas.style.height) {
|
|
430
|
+
const canvasHeight = parseInt(canvas.style.height);
|
|
431
|
+
if (canvasHeight > maxHeight || canvasHeight > 2e3) {
|
|
432
|
+
map.resize();
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
};
|
|
436
|
+
const interval = setInterval(enforceContainerHeight, 1e3);
|
|
437
|
+
let resizeObserver = null;
|
|
438
|
+
if (typeof ResizeObserver !== "undefined") {
|
|
439
|
+
resizeObserver = new ResizeObserver(() => {
|
|
440
|
+
enforceContainerHeight();
|
|
441
|
+
});
|
|
442
|
+
resizeObserver.observe(containerRef.current);
|
|
443
|
+
}
|
|
444
|
+
return () => {
|
|
445
|
+
clearInterval(interval);
|
|
446
|
+
if (resizeObserver) {
|
|
447
|
+
resizeObserver.disconnect();
|
|
448
|
+
}
|
|
449
|
+
};
|
|
450
|
+
}, []);
|
|
419
451
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
420
452
|
"div",
|
|
421
453
|
{
|
|
454
|
+
ref: containerRef,
|
|
422
455
|
className: joinClassNames("relative w-full h-full", className),
|
|
423
|
-
style: {
|
|
456
|
+
style: {
|
|
457
|
+
width: "100%",
|
|
458
|
+
height: "100%",
|
|
459
|
+
maxHeight: "100vh",
|
|
460
|
+
// Prevent excessive height
|
|
461
|
+
overflow: "hidden",
|
|
462
|
+
position: "relative",
|
|
463
|
+
...style
|
|
464
|
+
},
|
|
424
465
|
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
425
466
|
maplibre.Map,
|
|
426
467
|
{
|
package/dist/core/index.cjs.map
CHANGED
|
@@ -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 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"]}
|
|
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 const containerRef = React.useRef<HTMLDivElement>(null);\n\n // Fix for MapLibre canvas height growth issue\n React.useEffect(() => {\n if (!mapRef.current || !containerRef.current) return;\n\n // Force the map to respect container bounds\n const enforceContainerHeight = () => {\n const container = containerRef.current;\n const map = mapRef.current;\n\n if (!container || !map) return;\n\n // Get the actual container height\n const rect = container.getBoundingClientRect();\n const maxHeight = Math.min(rect.height, window.innerHeight);\n\n // Ensure the map canvas doesn't exceed container\n const canvas = map.getCanvas();\n if (canvas && canvas.style.height) {\n const canvasHeight = parseInt(canvas.style.height);\n if (canvasHeight > maxHeight || canvasHeight > 2000) {\n // Force resize to container dimensions\n map.resize();\n }\n }\n };\n\n // Check periodically to prevent runaway growth\n const interval = setInterval(enforceContainerHeight, 1000);\n\n // Also check on any resize events if ResizeObserver is available\n let resizeObserver: ResizeObserver | null = null;\n if (typeof ResizeObserver !== \"undefined\") {\n resizeObserver = new ResizeObserver(() => {\n enforceContainerHeight();\n });\n resizeObserver.observe(containerRef.current);\n }\n\n return () => {\n clearInterval(interval);\n if (resizeObserver) {\n resizeObserver.disconnect();\n }\n };\n }, []);\n\n return (\n <div\n ref={containerRef}\n className={joinClassNames(\"relative w-full h-full\", className)}\n style={{\n width: \"100%\",\n height: \"100%\",\n maxHeight: \"100vh\", // Prevent excessive height\n overflow: \"hidden\",\n position: \"relative\",\n ...style\n }}\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"]}
|