@geoql/v-maplibre 1.3.0 → 1.4.0

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/injects.ts","../src/layers/deckgl/_shared/useDeckOverlay.ts","../src/utils/symbols.ts","../src/controls/attribution/VControlAttribution.vue","../src/controls/fullscreen/VControlFullscreen.vue","../src/controls/geolocate/events.ts","../src/controls/geolocate/VControlGeolocate.vue","../src/controls/navigation/VControlNavigation.vue","../src/controls/scale/VControlScale.vue","../src/controls/lidar/events.ts","../src/controls/lidar/VControlLidar.vue","../src/layers/maplibre/canvas/VLayerMaplibreCanvas.vue","../src/layers/maplibre/geojson/VLayerMaplibreGeojson.vue","../src/layers/maplibre/image/VLayerMaplibreImage.vue","../src/layers/maplibre/raster/VLayerMaplibreRaster.vue","../src/constants/events/layer.ts","../src/constants/events/map.ts","../src/constants/events/marker.ts","../src/constants/events/popup.ts","../src/layers/maplibre/vector/VLayerMaplibreVector.vue","../src/layers/maplibre/video/VLayerMaplibreVideo.vue","../src/layers/maplibre/pmtile/VLayerMaplibrePmtile.vue","../src/layers/maplibre/cluster/VLayerMaplibreCluster.vue","../src/layers/maplibre/route/VLayerMaplibreRoute.vue","../src/layers/deckgl/scatterplot/VLayerDeckglScatterplot.vue","../src/layers/deckgl/arc/VLayerDeckglArc.vue","../src/layers/deckgl/geojson/VLayerDeckglGeojson.vue","../src/layers/deckgl/path/VLayerDeckglPath.vue","../src/layers/deckgl/line/VLayerDeckglLine.vue","../src/layers/deckgl/polygon/VLayerDeckglPolygon.vue","../src/layers/deckgl/solid-polygon/VLayerDeckglSolidPolygon.vue","../src/layers/deckgl/icon/VLayerDeckglIcon.vue","../src/layers/deckgl/text/VLayerDeckglText.vue","../src/layers/deckgl/column/VLayerDeckglColumn.vue","../src/layers/deckgl/bitmap/VLayerDeckglBitmap.vue","../src/layers/deckgl/grid-cell/VLayerDeckglGridCell.vue","../src/layers/deckgl/point-cloud/VLayerDeckglPointCloud.vue","../src/layers/deckgl/heatmap/VLayerDeckglHeatmap.vue","../src/layers/deckgl/hexagon/VLayerDeckglHexagon.vue","../src/layers/deckgl/grid/VLayerDeckglGrid.vue","../src/layers/deckgl/contour/VLayerDeckglContour.vue","../src/layers/deckgl/screen-grid/VLayerDeckglScreenGrid.vue","../src/layers/deckgl/trips/VLayerDeckglTrips.vue","../src/layers/deckgl/h3-hexagon/VLayerDeckglH3Hexagon.vue","../src/layers/deckgl/h3-cluster/VLayerDeckglH3Cluster.vue","../src/layers/deckgl/mvt/VLayerDeckglMVT.vue","../src/layers/deckgl/tile/VLayerDeckglTile.vue","../src/layers/deckgl/tile-3d/VLayerDeckglTile3D.vue","../src/layers/deckgl/terrain/VLayerDeckglTerrain.vue","../src/layers/deckgl/great-circle/VLayerDeckglGreatCircle.vue","../src/layers/deckgl/s2/VLayerDeckglS2.vue","../src/layers/deckgl/geohash/VLayerDeckglGeohash.vue","../src/layers/deckgl/quadkey/VLayerDeckglQuadkey.vue","../src/layers/deckgl/wms/VLayerDeckglWMS.vue","../src/layers/deckgl/simple-mesh/VLayerDeckglSimpleMesh.vue","../src/layers/deckgl/scenegraph/VLayerDeckglScenegraph.vue","../src/layers/deckgl/cog/VLayerDeckglCOG.vue","../src/layers/deckgl/generic/VLayerDeckgl.vue","../src/map/VMap.vue","../src/popups/VPopup.vue","../src/markers/VMarker.vue"],"sourcesContent":["import type { InjectionKey } from 'vue';\nimport { inject } from 'vue';\n\n/**\n * Dependency injection 🥳\n * @param {InjectionKey} key - The key to inject\n * @param {string | undefined} fallback - The fallback value\n * @returns {undefined} - The value\n */\nexport function injectStrict<T>(key: InjectionKey<T>, fallback?: T): T {\n const resolved = inject(key, fallback);\n if (!resolved) {\n throw new Error(`Could not resolve ${key.description}`);\n }\n return resolved;\n}\n","import {\n inject,\n provide,\n ref,\n shallowRef,\n onUnmounted,\n watch,\n type InjectionKey,\n type Ref,\n type ShallowRef,\n} from 'vue';\nimport type { MapboxOverlay } from '@deck.gl/mapbox';\nimport type { Map } from 'maplibre-gl';\n\nexport const DeckOverlayKey: InjectionKey<ShallowRef<MapboxOverlay | null>> =\n Symbol('DeckOverlay');\n\nexport const DeckLayersKey: InjectionKey<{\n addLayer: (layer: unknown) => void;\n removeLayer: (layerId: string) => void;\n updateLayer: (layerId: string, layer: unknown) => void;\n}> = Symbol('DeckLayers');\n\ninterface UseDeckOverlayOptions {\n interleaved?: boolean;\n}\n\ninterface UseDeckOverlayReturn {\n overlay: ShallowRef<MapboxOverlay | null>;\n layers: Ref<unknown[]>;\n isInitialized: Ref<boolean>;\n initOverlay: () => Promise<void>;\n addLayer: (layer: unknown) => void;\n removeLayer: (layerId: string) => void;\n updateLayer: (layerId: string, layer: unknown) => void;\n getLayers: () => unknown[];\n}\n\nexport function useDeckOverlay(\n map: Ref<Map | null>,\n options: UseDeckOverlayOptions = {},\n): UseDeckOverlayReturn {\n const { interleaved = false } = options;\n\n const existingOverlay = inject(DeckOverlayKey, null);\n const existingLayersRegistry = inject(DeckLayersKey, null);\n\n if (existingOverlay && existingLayersRegistry) {\n return {\n overlay: existingOverlay,\n isInitialized: ref(true),\n layers: ref([]),\n initOverlay: () => Promise.resolve(),\n getLayers: () => [],\n ...existingLayersRegistry,\n };\n }\n\n const overlay = shallowRef<MapboxOverlay | null>(null);\n const layers = ref<unknown[]>([]);\n const isInitialized = ref(false);\n let initPromise: Promise<void> | null = null;\n\n const initOverlay = (): Promise<void> => {\n const mapInstance = map.value;\n if (!mapInstance) return Promise.resolve();\n if (overlay.value) return Promise.resolve();\n if (initPromise) return initPromise;\n\n initPromise = import('@deck.gl/mapbox')\n .then(({ MapboxOverlay }) => {\n if (overlay.value) return;\n\n overlay.value = new MapboxOverlay({\n interleaved,\n layers: [],\n });\n\n mapInstance.addControl(overlay.value);\n isInitialized.value = true;\n })\n .catch((error) => {\n console.error('[deck.gl] Error initializing overlay:', error);\n initPromise = null;\n });\n\n return initPromise;\n };\n\n const getLayerId = (layer: unknown): string => {\n return (layer as { id: string }).id;\n };\n\n const syncLayers = () => {\n if (overlay.value) {\n overlay.value.setProps({ layers: layers.value as never });\n }\n };\n\n const addLayer = (layer: unknown): void => {\n const layerId = getLayerId(layer);\n const existingIndex = layers.value.findIndex(\n (l) => getLayerId(l) === layerId,\n );\n\n if (existingIndex >= 0) {\n layers.value = [\n ...layers.value.slice(0, existingIndex),\n layer,\n ...layers.value.slice(existingIndex + 1),\n ];\n } else {\n layers.value = [...layers.value, layer];\n }\n\n if (overlay.value) {\n syncLayers();\n } else {\n initOverlay().then(syncLayers);\n }\n };\n\n const removeLayer = (layerId: string): void => {\n layers.value = layers.value.filter((l) => getLayerId(l) !== layerId);\n syncLayers();\n };\n\n const updateLayer = (layerId: string, newLayer: unknown): void => {\n const index = layers.value.findIndex((l) => getLayerId(l) === layerId);\n if (index >= 0) {\n layers.value = [\n ...layers.value.slice(0, index),\n newLayer,\n ...layers.value.slice(index + 1),\n ];\n syncLayers();\n } else {\n addLayer(newLayer);\n }\n };\n\n const getLayers = (): unknown[] => {\n return [...layers.value];\n };\n\n watch(\n map,\n (mapInstance) => {\n if (mapInstance && !overlay.value) {\n if (mapInstance.isStyleLoaded()) {\n initOverlay();\n } else {\n mapInstance.once('style.load', () => {\n initOverlay();\n });\n }\n }\n },\n { immediate: true },\n );\n\n provide(DeckOverlayKey, overlay);\n provide(DeckLayersKey, {\n addLayer,\n removeLayer,\n updateLayer,\n });\n\n onUnmounted(() => {\n if (overlay.value && map.value) {\n try {\n map.value.removeControl(overlay.value);\n overlay.value.finalize();\n } catch (error) {\n console.error('[deck.gl] Error cleaning up overlay:', error);\n }\n }\n overlay.value = null;\n layers.value = [];\n isInitialized.value = false;\n initPromise = null;\n });\n\n return {\n overlay,\n layers,\n isInitialized,\n initOverlay,\n addLayer,\n removeLayer,\n updateLayer,\n getLayers,\n };\n}\n\nexport function useDeckLayers() {\n const registry = inject(DeckLayersKey, null);\n const overlay = inject(DeckOverlayKey, null);\n\n if (!registry) {\n throw new Error(\n '[deck.gl] useDeckLayers must be used within a component that has initialized useDeckOverlay',\n );\n }\n\n return {\n ...registry,\n overlay,\n };\n}\n","import type { Map } from 'maplibre-gl';\nimport type { Protocol } from 'pmtiles';\nimport type { InjectionKey, Ref } from 'vue';\n\nconst MapKey: InjectionKey<Ref<Map | null>> = Symbol('Map');\nconst PMTileProtocolKey: InjectionKey<Protocol | null> = Symbol('Protocol');\n\nexport { MapKey, PMTileProtocolKey };\nexport {\n DeckOverlayKey,\n DeckLayersKey,\n} from '../layers/deckgl/_shared/useDeckOverlay';\n","<script setup lang=\"ts\">\n import { AttributionControl } from 'maplibre-gl';\n import { onMounted, useSlots } from 'vue';\n import { MapKey, injectStrict } from '../../utils';\n import type { AttributionControlOptions, ControlPosition } from './types';\n\n const defaultOptions: AttributionControlOptions = {\n compact: false,\n customAttribution: undefined,\n };\n\n const props = withDefaults(\n defineProps<{\n options?: AttributionControlOptions;\n position?: ControlPosition;\n }>(),\n {\n options: undefined,\n position: 'bottom-right',\n },\n );\n\n const slots = useSlots();\n\n const map = injectStrict(MapKey);\n\n onMounted(() => {\n addControl();\n });\n\n const addControl = (): void => {\n let options = defaultOptions;\n if (props.options) {\n options = {\n ...props.options,\n };\n }\n if (slots && slots.default?.()) {\n options.customAttribution = slots.default()[0]!\n .children as unknown as string;\n }\n const control = new AttributionControl(options);\n map.value!.addControl(control, props.position);\n };\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { FullscreenControl } from 'maplibre-gl';\n import { onMounted } from 'vue';\n import { MapKey, injectStrict } from '../../utils';\n import type { ControlPosition, FullscreenControlOptions } from './types';\n\n const defaultOptions: FullscreenControlOptions = {\n container: undefined,\n };\n\n const props = withDefaults(\n defineProps<{\n options?: FullscreenControlOptions;\n position?: ControlPosition;\n }>(),\n {\n options: undefined,\n position: 'top-left',\n },\n );\n\n const map = injectStrict(MapKey);\n\n onMounted(() => {\n addControl();\n });\n\n const addControl = (): void => {\n const control = new FullscreenControl(props.options || defaultOptions);\n map.value!.addControl(control, props.position);\n };\n</script>\n","export const geolocateControlEvents: string[] = [\n 'geolocate',\n 'error',\n 'outofmaxbounds',\n 'trackuserlocationstart',\n 'trackuserlocationend',\n];\n","<script setup lang=\"ts\">\n import { GeolocateControl } from 'maplibre-gl';\n import { onMounted } from 'vue';\n import { MapKey, injectStrict } from '../../utils';\n import { geolocateControlEvents as events } from './events';\n import type { ControlPosition, GeolocateControlOptions } from './types';\n\n const defaultOptions: GeolocateControlOptions = {\n fitBoundsOptions: {\n linear: false,\n offset: [0, 0],\n maxZoom: 22,\n },\n positionOptions: {\n enableHighAccuracy: true,\n maximumAge: 0,\n timeout: 6000,\n },\n trackUserLocation: true,\n showAccuracyCircle: true,\n showUserLocation: true,\n };\n\n const props = withDefaults(\n defineProps<{\n options?: GeolocateControlOptions;\n position?: ControlPosition;\n }>(),\n {\n options: undefined,\n position: 'top-left',\n },\n );\n\n const emit = defineEmits(events);\n\n const map = injectStrict(MapKey);\n\n onMounted(() => {\n addControl();\n });\n\n const addControl = (): void => {\n const control = new GeolocateControl(props.options || defaultOptions);\n map.value!.addControl(control, props.position);\n events.forEach((event: string) => {\n control.on(event, () => {\n emit(event);\n });\n });\n };\n</script>\n","<script setup lang=\"ts\">\n import { NavigationControl } from 'maplibre-gl';\n import { onMounted, inject } from 'vue';\n import { MapKey } from '../../utils';\n import type { ControlPosition, NavigationOptions } from './types';\n\n const defaultOptions: NavigationOptions = {\n showCompass: true,\n showZoom: true,\n visualizePitch: true,\n };\n\n const props = withDefaults(\n defineProps<{\n options?: NavigationOptions;\n position?: ControlPosition;\n }>(),\n {\n options: undefined,\n position: 'top-left',\n },\n );\n\n const map = inject(MapKey);\n\n onMounted(() => {\n addControl();\n });\n\n const addControl = (): void => {\n const control = new NavigationControl(props.options || defaultOptions);\n map!.value!.addControl(control, props.position);\n };\n</script>\n","<script setup lang=\"ts\">\n import { onMounted, inject } from 'vue';\n import { ScaleControl } from 'maplibre-gl';\n import { MapKey } from '../../utils';\n import type { ControlPosition, ScaleControlOptions } from './types';\n\n const defaultOptions: ScaleControlOptions = {\n maxWidth: 100,\n unit: 'metric',\n };\n\n const props = withDefaults(\n defineProps<{\n options?: ScaleControlOptions;\n position?: ControlPosition;\n }>(),\n {\n options: undefined,\n position: 'bottom-left',\n },\n );\n\n const map = inject(MapKey);\n\n onMounted(() => {\n addControl();\n });\n\n const addControl = (): void => {\n const control = new ScaleControl(props.options || defaultOptions);\n map?.value!.addControl(control, props.position);\n };\n</script>\n\n<template>\n <slot></slot>\n</template>\n","export const lidarControlEvents: string[] = [\n 'load',\n 'loadstart',\n 'loaderror',\n 'unload',\n 'statechange',\n 'stylechange',\n 'collapse',\n 'expand',\n 'streamingstart',\n 'streamingstop',\n 'streamingprogress',\n 'budgetreached',\n];\n","<script setup lang=\"ts\">\n import { onMounted, onUnmounted, ref } from 'vue';\n import { MapKey, injectStrict } from '../../utils';\n import { lidarControlEvents as events } from './events';\n import type {\n ControlPosition,\n LidarControlOptions,\n ColorScheme,\n PointCloudInfo,\n } from './types';\n\n const defaultOptions: LidarControlOptions = {\n collapsed: true,\n pointSize: 2,\n colorScheme: 'elevation',\n pickable: false,\n autoZoom: true,\n };\n\n const props = withDefaults(\n defineProps<{\n options?: LidarControlOptions;\n position?: ControlPosition;\n defaultUrl?: string;\n }>(),\n {\n options: undefined,\n position: 'top-right',\n defaultUrl: undefined,\n },\n );\n\n const emit = defineEmits(events);\n\n const map = injectStrict(MapKey);\n\n interface LidarControlInstance {\n on: (event: string, handler: (data?: unknown) => void) => void;\n off: (event: string, handler: (data?: unknown) => void) => void;\n loadPointCloud: (\n source: string | File | ArrayBuffer,\n ) => Promise<PointCloudInfo>;\n unloadPointCloud: (id?: string) => void;\n flyToPointCloud: (id?: string) => void;\n setPointSize: (size: number) => void;\n setColorScheme: (scheme: ColorScheme) => void;\n setOpacity: (opacity: number) => void;\n setPickable: (pickable: boolean) => void;\n setUsePercentile: (use: boolean) => void;\n setElevationRange: (min: number, max: number) => void;\n clearElevationRange: () => void;\n setZOffset: (offset: number) => void;\n setZOffsetEnabled: (enabled: boolean) => void;\n toggle: () => void;\n expand: () => void;\n collapse: () => void;\n getState: () => unknown;\n getPointClouds: () => PointCloudInfo[];\n stopStreaming: (id?: string) => void;\n isStreaming: (id?: string) => boolean;\n }\n\n const control = ref<LidarControlInstance | null>(null);\n\n onMounted(async () => {\n await addControl();\n });\n\n onUnmounted(() => {\n if (control.value && map.value) {\n map.value.removeControl(control.value as unknown as maplibregl.IControl);\n control.value = null;\n }\n });\n\n const addControl = async (): Promise<void> => {\n const { LidarControl } = await import('maplibre-gl-lidar');\n\n control.value = new LidarControl(\n props.options || defaultOptions,\n ) as unknown as LidarControlInstance;\n\n map.value!.addControl(\n control.value as unknown as maplibregl.IControl,\n props.position,\n );\n\n events.forEach((event: string) => {\n control.value!.on(event, (data?: unknown) => {\n emit(event, data);\n });\n });\n\n if (props.defaultUrl) {\n control.value.loadPointCloud(props.defaultUrl);\n }\n };\n\n defineExpose({\n loadPointCloud: (source: string | File | ArrayBuffer) =>\n control.value?.loadPointCloud(source),\n unloadPointCloud: (id?: string) => control.value?.unloadPointCloud(id),\n flyToPointCloud: (id?: string) => control.value?.flyToPointCloud(id),\n setPointSize: (size: number) => control.value?.setPointSize(size),\n setColorScheme: (scheme: ColorScheme) =>\n control.value?.setColorScheme(scheme),\n setOpacity: (opacity: number) => control.value?.setOpacity(opacity),\n setPickable: (pickable: boolean) => control.value?.setPickable(pickable),\n setUsePercentile: (use: boolean) => control.value?.setUsePercentile(use),\n setElevationRange: (min: number, max: number) =>\n control.value?.setElevationRange(min, max),\n clearElevationRange: () => control.value?.clearElevationRange(),\n setZOffset: (offset: number) => control.value?.setZOffset(offset),\n setZOffsetEnabled: (enabled: boolean) =>\n control.value?.setZOffsetEnabled(enabled),\n toggle: () => control.value?.toggle(),\n expand: () => control.value?.expand(),\n collapse: () => control.value?.collapse(),\n getState: () => control.value?.getState(),\n getPointClouds: () => control.value?.getPointClouds(),\n stopStreaming: (id?: string) => control.value?.stopStreaming(id),\n isStreaming: (id?: string) => control.value?.isStreaming(id),\n getControl: () => control.value,\n });\n</script>\n","<script setup lang=\"ts\">\n import type {\n CanvasSourceSpecification,\n LayerSpecification,\n Map,\n } from 'maplibre-gl';\n import type { Ref } from 'vue';\n import { onMounted, onBeforeUnmount, ref, watch } from 'vue';\n import { injectStrict, MapKey } from '../../../utils';\n\n const props = withDefaults(\n defineProps<{\n source: CanvasSourceSpecification;\n layer: LayerSpecification;\n sourceId?: string;\n layerId?: string;\n before?: string;\n }>(),\n {\n sourceId: 'maplibre.gl-canvas-source',\n layerId: 'maplibre.gl-canvas-layer',\n before: '',\n },\n );\n\n const map = injectStrict(MapKey);\n const loaded: Ref<boolean> = ref(false);\n\n // Helper function to safely get map instance\n const getMapInstance = (): Map | null => {\n return map.value || null;\n };\n\n // Setup functions\n const setupMap = (mapInstance: Map) => {\n if (!mapInstance) return;\n\n mapInstance.on('style.load', () => {\n const styleTimeout = () => {\n if (!mapInstance.isStyleLoaded()) {\n loaded.value = false;\n setTimeout(styleTimeout, 200);\n } else {\n loaded.value = true;\n }\n };\n styleTimeout();\n });\n };\n\n const addLayer = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n if (!mapInstance.getSource(props.sourceId)) {\n mapInstance.addSource(props.sourceId, props.source);\n }\n if (!mapInstance.getLayer(props.layerId)) {\n const layerSpec = {\n ...props.layer,\n id: props.layerId,\n source: props.sourceId,\n } as LayerSpecification;\n mapInstance.addLayer(layerSpec, props.before);\n }\n } catch (error) {\n console.error('Error adding Canvas layer:', error);\n }\n };\n\n const updateSource = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n // For canvas sources, we need to remove and re-add both source and layer\n if (mapInstance.getLayer(props.layerId)) {\n mapInstance.removeLayer(props.layerId);\n }\n if (mapInstance.getSource(props.sourceId)) {\n mapInstance.removeSource(props.sourceId);\n }\n\n mapInstance.addSource(props.sourceId, props.source);\n const layerSpec = {\n ...props.layer,\n id: props.layerId,\n source: props.sourceId,\n } as LayerSpecification;\n mapInstance.addLayer(layerSpec, props.before);\n } catch (error) {\n console.error('Error updating Canvas source:', error);\n }\n };\n\n const updateLayer = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n if (mapInstance.getLayer(props.layerId)) {\n Object.entries(props.layer.paint || {}).forEach(([key, value]) => {\n mapInstance.setPaintProperty(props.layerId, key, value);\n });\n Object.entries(props.layer.layout || {}).forEach(([key, value]) => {\n mapInstance.setLayoutProperty(props.layerId, key, value);\n });\n }\n } catch (error) {\n console.error('Error updating Canvas layer:', error);\n }\n };\n\n // Watchers\n watch(() => props.source, updateSource, { deep: true });\n watch(() => props.layer, updateLayer, { deep: true });\n\n // Watch for map instance changes\n watch(\n map,\n (newMap) => {\n if (newMap) {\n setupMap(newMap);\n }\n },\n { immediate: true },\n );\n\n // Watch loaded state\n watch(loaded, (value) => {\n if (value) {\n addLayer();\n }\n });\n\n // Lifecycle hooks\n onMounted(() => {\n const mapInstance = getMapInstance();\n if (mapInstance?.isStyleLoaded()) {\n addLayer();\n }\n });\n\n onBeforeUnmount(() => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n if (mapInstance.getLayer(props.layerId)) {\n mapInstance.removeLayer(props.layerId);\n }\n if (mapInstance.getSource(props.sourceId)) {\n mapInstance.removeSource(props.sourceId);\n }\n } catch (error) {\n console.error('Error cleaning up Canvas layer:', error);\n }\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<!-- web/app/lib/v-mapbox/layers/maplibre/geojson/VLayerMaplibreGeojson.vue -->\n<script setup lang=\"ts\">\n import type { Ref } from 'vue';\n import { onMounted, onBeforeUnmount, ref, watch } from 'vue';\n import type {\n GeoJSONSource,\n GeoJSONSourceSpecification,\n LayerSpecification,\n Map,\n MapLayerMouseEvent,\n } from 'maplibre-gl';\n import { injectStrict, MapKey } from '../../../utils';\n\n interface LayerClick {\n features: GeoJSON.Feature[];\n coordinates: {\n lng: number;\n lat: number;\n };\n }\n\n interface Props {\n sourceId: string;\n layerId: string;\n source: GeoJSONSourceSpecification;\n layer: LayerSpecification;\n before?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n sourceId: 'maplibre-gl-geojson-source',\n layerId: 'maplibre-gl-geojson-layer',\n before: '',\n });\n\n const emit = defineEmits<{\n 'on-click': [event: LayerClick];\n }>();\n\n const map = injectStrict(MapKey);\n const loaded: Ref<boolean> = ref(false);\n\n // Helper to check if data is valid GeoJSON with features\n const hasValidData = (\n data: string | GeoJSON.GeoJSON | undefined,\n ): boolean => {\n if (!data || typeof data === 'string') return false;\n if (data && typeof data === 'object' && 'type' in data) {\n if (data.type === 'FeatureCollection' && 'features' in data) {\n return data.features.length > 0;\n }\n // Also valid for single Feature or Geometry\n return (\n data.type === 'Feature' ||\n data.type === 'Point' ||\n data.type === 'LineString' ||\n data.type === 'Polygon' ||\n data.type === 'MultiPoint' ||\n data.type === 'MultiLineString' ||\n data.type === 'MultiPolygon'\n );\n }\n return false;\n };\n\n // Helper function to safely get map instance\n const getMapInstance = (): Map | null => {\n const instance = map.value || null;\n return instance;\n };\n\n // Setup functions\n const setupMap = (mapInstance: Map) => {\n if (!mapInstance) {\n return;\n }\n\n mapInstance.on('style.load', () => {\n const styleTimeout = () => {\n if (!mapInstance.isStyleLoaded()) {\n loaded.value = false;\n setTimeout(styleTimeout, 200);\n } else {\n loaded.value = true;\n }\n };\n styleTimeout();\n });\n };\n\n const addLayer = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance || !mapInstance.isStyleLoaded()) {\n return;\n }\n\n // For clustering support, wait for valid data before adding source/layer\n if (!hasValidData(props.source.data)) {\n console.log(\n `[${props.layerId}] Waiting for valid data before adding layer`,\n );\n return;\n }\n\n try {\n // Only add source if it doesn't exist\n if (!mapInstance.getSource(props.sourceId)) {\n mapInstance.addSource(props.sourceId, props.source);\n }\n\n // Only add layer if it doesn't exist\n if (!mapInstance.getLayer(props.layerId)) {\n const layerSpec = {\n ...props.layer,\n id: props.layerId,\n source: props.sourceId,\n } as LayerSpecification;\n\n mapInstance.addLayer(layerSpec, props.before);\n }\n } catch (error) {\n console.error('Error adding GeoJSON layer:', error);\n }\n };\n\n const updateSource = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n const source = mapInstance.getSource(props.sourceId) as\n | GeoJSONSource\n | undefined;\n\n if (source && 'setData' in source) {\n // CRITICAL FIX: Only update data if source doesn't have clustering\n // or if this is the first/primary layer for this source\n const existingLayers = mapInstance\n .getStyle()\n .layers.filter(\n (l) =>\n l.type !== 'background' &&\n 'source' in l &&\n l.source === props.sourceId,\n );\n\n // Only update data if this is the first layer using this source\n // This prevents breaking clustering when multiple layers share a source\n if (\n existingLayers.length === 0 ||\n existingLayers[0]?.id === props.layerId\n ) {\n source.setData(props.source.data);\n }\n } else if (!source) {\n // If source doesn't exist, try to add the layer\n addLayer();\n }\n } catch (error) {\n console.error('Error updating GeoJSON source:', error);\n }\n };\n\n const updateLayer = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n if (mapInstance.getLayer(props.layerId)) {\n // Update paint properties\n Object.entries(props.layer.paint || {}).forEach(([key, value]) => {\n mapInstance.setPaintProperty(props.layerId, key, value);\n });\n // Update layout properties\n Object.entries(props.layer.layout || {}).forEach(([key, value]) => {\n mapInstance.setLayoutProperty(props.layerId, key, value);\n });\n } else {\n // If layer doesn't exist, try to add it\n addLayer();\n }\n } catch (error) {\n console.error('Error updating GeoJSON layer:', error);\n }\n };\n\n const setupLayerEvents = (mapInstance: Map) => {\n if (!mapInstance) {\n return;\n }\n\n try {\n // Add click handler for the specific layer\n mapInstance.on('click', props.layerId, (e: MapLayerMouseEvent) => {\n if (e.features && e.features.length > 0) {\n emit('on-click', {\n features: e.features,\n coordinates: e.lngLat,\n });\n }\n });\n\n // Add hover effect to verify interactivity\n mapInstance.on('mouseenter', props.layerId, () => {\n mapInstance.getCanvas().style.cursor = 'pointer';\n });\n\n mapInstance.on('mouseleave', props.layerId, () => {\n mapInstance.getCanvas().style.cursor = '';\n });\n } catch (error) {\n console.error('Error in setupLayerEvents:', error);\n }\n };\n\n // Watchers - Modified to handle timing and prevent unnecessary updates\n watch(\n () => props.source,\n (newSource, oldSource) => {\n // Wait for valid data before doing anything\n if (!hasValidData(newSource?.data)) {\n return;\n }\n\n // Only update if the data actually changed\n if (JSON.stringify(newSource.data) !== JSON.stringify(oldSource?.data)) {\n const mapInstance = getMapInstance();\n if (mapInstance?.isStyleLoaded()) {\n // If source doesn't exist yet, add the whole layer\n if (!mapInstance.getSource(props.sourceId)) {\n addLayer();\n } else {\n // Source exists, just update data\n updateSource();\n }\n }\n }\n },\n { deep: true },\n );\n\n watch(() => props.layer, updateLayer, { deep: true });\n\n // Watch for map instance changes\n watch(\n map,\n (newMap) => {\n if (newMap) {\n setupMap(newMap);\n // Check if style is already loaded\n if (newMap.isStyleLoaded()) {\n loaded.value = true;\n }\n }\n },\n { immediate: true },\n );\n\n // Watch loaded state - only add layer when we have valid data\n watch(loaded, (value) => {\n if (value && hasValidData(props.source.data)) {\n const mapInstance = getMapInstance();\n if (mapInstance) {\n addLayer();\n setupLayerEvents(mapInstance);\n }\n }\n });\n\n // Watch for visibility changes\n watch(\n () => props.layer.layout?.visibility,\n (newVisibility) => {\n const mapInstance = getMapInstance();\n if (!mapInstance || !mapInstance.isStyleLoaded()) return;\n\n const hasLayer = mapInstance.getLayer(props.layerId);\n\n if (!hasLayer && newVisibility === 'visible') {\n // Add layer if it doesn't exist and should be visible\n if (hasValidData(props.source.data)) {\n addLayer();\n }\n } else if (hasLayer) {\n // Update visibility of existing layer\n try {\n mapInstance.setLayoutProperty(\n props.layerId,\n 'visibility',\n newVisibility,\n );\n } catch (error) {\n console.error(\n `Error updating visibility for ${props.layerId}:`,\n error,\n );\n }\n }\n },\n { immediate: true },\n );\n\n // Lifecycle hooks\n onMounted(() => {\n try {\n const mapInstance = getMapInstance();\n // Only add layer if map is ready AND we have valid data\n if (mapInstance?.isStyleLoaded() && hasValidData(props.source.data)) {\n addLayer();\n }\n } catch (error) {\n console.error('Error adding layer:', error);\n }\n });\n\n onBeforeUnmount(() => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n // Remove layer\n if (mapInstance.getLayer(props.layerId)) {\n mapInstance.removeLayer(props.layerId);\n }\n\n // Only remove source if no other layers are using it\n const layersUsingSource = mapInstance\n .getStyle()\n .layers.filter(\n (l) =>\n l.type !== 'background' &&\n 'source' in l &&\n l.source === props.sourceId,\n );\n\n if (\n layersUsingSource.length === 0 &&\n mapInstance.getSource(props.sourceId)\n ) {\n mapInstance.removeSource(props.sourceId);\n }\n } catch (error) {\n console.error('Error cleaning up GeoJSON layer:', error);\n }\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import type {\n LayerSpecification as AnyLayer,\n ImageSourceSpecification as ImageSourceRaw,\n ImageSource,\n Map,\n } from 'maplibre-gl';\n import type { PropType, Ref } from 'vue';\n import { onMounted, onBeforeUnmount, ref, watch } from 'vue';\n import { injectStrict, MapKey } from '../../../utils';\n\n const props = defineProps({\n sourceId: {\n type: String,\n default: 'maplibre.gl-image-source',\n required: true,\n },\n layerId: {\n type: String,\n default: 'maplibre.gl-image-layer',\n required: true,\n },\n source: {\n type: Object as PropType<ImageSourceRaw>,\n required: true,\n },\n layer: {\n type: Object as PropType<AnyLayer>,\n default: () => ({}),\n required: true,\n },\n before: {\n type: String,\n default: '',\n required: false,\n },\n });\n\n const map = injectStrict(MapKey);\n const loaded: Ref<boolean> = ref(false);\n\n // Helper function to safely get map instance\n const getMapInstance = (): Map | null => {\n return map.value || null;\n };\n\n // Setup functions\n const setupMap = (mapInstance: Map) => {\n if (!mapInstance) return;\n\n mapInstance.on('style.load', () => {\n const styleTimeout = () => {\n if (!mapInstance.isStyleLoaded()) {\n loaded.value = false;\n setTimeout(styleTimeout, 200);\n } else {\n loaded.value = true;\n }\n };\n styleTimeout();\n });\n };\n\n const addLayer = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n if (!mapInstance.getSource(props.sourceId)) {\n mapInstance.addSource(props.sourceId, props.source);\n }\n if (!mapInstance.getLayer(props.layerId)) {\n const layerSpec = {\n ...props.layer,\n id: props.layerId,\n source: props.sourceId,\n } as AnyLayer;\n mapInstance.addLayer(layerSpec, props.before);\n }\n } catch (error) {\n console.error('Error adding Image layer:', error);\n }\n };\n\n const updateSource = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n const source = mapInstance.getSource(props.sourceId) as ImageSource;\n if (source) {\n // For image sources, we need to update coordinates and url\n if (source.updateImage) {\n source.updateImage({\n url: props.source.url,\n coordinates: props.source.coordinates,\n });\n } else {\n // If updateImage is not available, remove and re-add the source and layer\n if (mapInstance.getLayer(props.layerId)) {\n mapInstance.removeLayer(props.layerId);\n }\n if (mapInstance.getSource(props.sourceId)) {\n mapInstance.removeSource(props.sourceId);\n }\n\n mapInstance.addSource(props.sourceId, props.source);\n const layerSpec = {\n ...props.layer,\n id: props.layerId,\n source: props.sourceId,\n } as AnyLayer;\n mapInstance.addLayer(layerSpec, props.before);\n }\n }\n } catch (error) {\n console.error('Error updating Image source:', error);\n }\n };\n\n const updateLayer = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n if (mapInstance.getLayer(props.layerId)) {\n Object.entries(props.layer.paint || {}).forEach(([key, value]) => {\n mapInstance.setPaintProperty(props.layerId, key, value);\n });\n Object.entries(props.layer.layout || {}).forEach(([key, value]) => {\n mapInstance.setLayoutProperty(props.layerId, key, value);\n });\n }\n } catch (error) {\n console.error('Error updating Image layer:', error);\n }\n };\n\n // Watchers\n watch(() => props.source, updateSource, { deep: true });\n watch(() => props.layer, updateLayer, { deep: true });\n\n // Watch for map instance changes\n watch(\n map,\n (newMap) => {\n if (newMap) {\n setupMap(newMap);\n }\n },\n { immediate: true },\n );\n\n // Watch loaded state\n watch(loaded, (value) => {\n if (value) {\n addLayer();\n }\n });\n\n // Lifecycle hooks\n onMounted(() => {\n const mapInstance = getMapInstance();\n if (mapInstance?.isStyleLoaded()) {\n addLayer();\n }\n });\n\n onBeforeUnmount(() => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n if (mapInstance.getLayer(props.layerId)) {\n mapInstance.removeLayer(props.layerId);\n }\n if (mapInstance.getSource(props.sourceId)) {\n mapInstance.removeSource(props.sourceId);\n }\n } catch (error) {\n console.error('Error cleaning up Image layer:', error);\n }\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import type {\n RasterSourceSpecification,\n RasterLayerSpecification,\n Map,\n } from 'maplibre-gl';\n import type { Ref } from 'vue';\n import { onMounted, ref, watch } from 'vue';\n import { injectStrict, MapKey } from '../../../utils';\n\n const props = defineProps<{\n sourceId: string;\n source: RasterSourceSpecification;\n layerId: string;\n layer: RasterLayerSpecification;\n before?: string;\n }>();\n\n const map = injectStrict(MapKey);\n const loaded: Ref<boolean> = ref(false);\n\n const getMapInstance = (): Map | null => {\n return map.value || null;\n };\n\n const setupMap = (mapInstance: Map) => {\n if (!mapInstance) return;\n\n mapInstance.on('style.load', () => {\n const styleTimeout = () => {\n if (!mapInstance.isStyleLoaded()) {\n loaded.value = false;\n setTimeout(styleTimeout, 200);\n } else {\n loaded.value = true;\n }\n };\n styleTimeout();\n });\n };\n\n const addLayer = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n if (!mapInstance.getSource(props.sourceId)) {\n mapInstance.addSource(props.sourceId, props.source);\n }\n if (!mapInstance.getLayer(props.layerId)) {\n // Always add with proper ordering\n mapInstance.addLayer(props.layer, props.before);\n\n // Set initial visibility\n if (props.layer.layout?.visibility) {\n mapInstance.setLayoutProperty(\n props.layerId,\n 'visibility',\n props.layer.layout.visibility,\n );\n }\n }\n } catch (error) {\n console.error(`[${props.layerId}] Error setting up layer:`, error);\n }\n };\n\n const updateSource = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n // Store the current beforeId since we'll need to reuse it\n const beforeId = props.before;\n\n if (mapInstance.getLayer(props.layerId)) {\n mapInstance.removeLayer(props.layerId);\n }\n mapInstance.removeSource(props.sourceId);\n\n mapInstance.addSource(props.sourceId, props.source);\n const layerSpec = {\n ...props.layer,\n id: props.layerId,\n type: 'raster',\n source: props.sourceId,\n } as RasterLayerSpecification;\n\n // Explicitly check if the beforeId layer exists before adding\n if (beforeId && mapInstance.getLayer(beforeId)) {\n mapInstance.addLayer(layerSpec, beforeId);\n } else {\n mapInstance.addLayer(layerSpec);\n }\n } catch (error) {\n console.error('Error updating Raster source:', error);\n }\n };\n\n const updateLayer = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n if (mapInstance.getLayer(props.layerId)) {\n // Update paint properties\n const paint = props.layer.paint || {};\n Object.entries(paint).forEach(([key, value]) => {\n mapInstance.setPaintProperty(props.layerId, key, value);\n });\n\n // Update layout properties\n const layout = props.layer.layout || {};\n Object.entries(layout).forEach(([key, value]) => {\n mapInstance.setLayoutProperty(props.layerId, key, value);\n });\n }\n } catch (error) {\n console.error('Error updating Raster layer:', error);\n }\n };\n\n // Watchers\n watch(\n () => props.source.tiles?.[0], // Usually raster sources have a single tile URL\n (newTileUrl, oldTileUrl) => {\n if (newTileUrl !== oldTileUrl) {\n updateSource();\n }\n },\n );\n watch(() => props.layer, updateLayer, { deep: true });\n watch(\n map,\n (newMap) => {\n if (newMap) {\n setupMap(newMap);\n }\n },\n { immediate: true },\n );\n watch(loaded, (value) => {\n if (value) {\n addLayer();\n }\n });\n watch(\n () => props.layer.layout?.visibility,\n (newVisibility) => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n const hasLayer = mapInstance.getLayer(props.layerId);\n\n if (!hasLayer) {\n // Add layer with proper ordering\n try {\n mapInstance.addLayer(props.layer, props.before);\n } catch (error) {\n console.error(`[${props.layerId}] Error adding layer:`, error);\n }\n } else {\n try {\n // Update visibility\n mapInstance.setLayoutProperty(\n props.layerId,\n 'visibility',\n newVisibility,\n );\n\n // If becoming visible, ensure proper layer ordering\n if (newVisibility === 'visible' && props.before) {\n mapInstance.moveLayer(props.layerId, props.before);\n }\n } catch (error) {\n console.error(`[${props.layerId}] Error updating visibility:`, error);\n }\n }\n },\n { immediate: true },\n );\n watch(\n () => props.before,\n (newBefore) => {\n const mapInstance = getMapInstance();\n if (!mapInstance || !mapInstance.getLayer(props.layerId)) return;\n\n // Only move layer if it's visible\n if (props.layer.layout?.visibility === 'visible') {\n try {\n console.log(`[${props.layerId}] Moving layer before:`, newBefore);\n mapInstance.moveLayer(props.layerId, newBefore);\n } catch (error) {\n console.error(`[${props.layerId}] Error moving layer:`, error);\n }\n }\n },\n );\n\n // Also add logging for source and layer setup\n onMounted(() => {\n const mapInstance = getMapInstance();\n if (!mapInstance) {\n return;\n }\n try {\n addLayer();\n } catch (error) {\n console.error(`[${props.layerId}] Error setting up layer:`, error);\n }\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","import type { MapLayerEventType } from 'maplibre-gl';\n\nexport const mapLayerEvents: Array<keyof MapLayerEventType> = [\n 'click',\n 'dblclick',\n 'mousedown',\n 'mouseup',\n 'mousemove',\n 'mouseenter',\n 'mouseleave',\n 'mouseover',\n 'mouseout',\n 'contextmenu',\n 'touchstart',\n 'touchend',\n 'touchcancel',\n];\n","import type { MapEventType } from 'maplibre-gl';\n\nexport const mapEvents: Array<keyof MapEventType> = [\n 'error',\n 'load',\n 'idle',\n 'remove',\n 'render',\n 'resize',\n 'webglcontextlost',\n 'webglcontextrestored',\n 'dataloading',\n 'data',\n 'tiledataloading',\n 'sourcedataloading',\n 'styledataloading',\n 'sourcedata',\n 'styledata',\n 'boxzoomcancel',\n 'boxzoomstart',\n 'boxzoomend',\n 'touchcancel',\n 'touchmove',\n 'touchend',\n 'touchstart',\n 'click',\n 'contextmenu',\n 'dblclick',\n 'mousemove',\n 'mouseup',\n 'mousedown',\n 'mouseout',\n 'mouseover',\n 'movestart',\n 'move',\n 'moveend',\n 'zoomstart',\n 'zoom',\n 'zoomend',\n 'rotatestart',\n 'rotate',\n 'rotateend',\n 'dragstart',\n 'drag',\n 'dragend',\n 'pitchstart',\n 'pitch',\n 'pitchend',\n 'wheel',\n];\n","export const markerMapEvents = ['dragstart', 'drag', 'dragend'];\nexport const markerDOMEvents = ['click', 'mouseenter', 'mouseleave'];\n","export const popupEvents = ['open', 'close'] as Array<'open' | 'close'>;\n","<script setup lang=\"ts\">\n import type { Ref } from 'vue';\n import { onMounted, ref, watch } from 'vue';\n import type {\n Map,\n VectorSourceSpecification,\n LayerSpecification,\n } from 'maplibre-gl';\n import { mapLayerEvents } from '../../../constants/events';\n import { injectStrict, MapKey } from '../../../utils';\n\n const props = defineProps<{\n sourceId: string;\n source: VectorSourceSpecification;\n layerId: string;\n layer: LayerSpecification;\n before?: string;\n }>();\n const emit = defineEmits([...mapLayerEvents]);\n\n const map = injectStrict(MapKey);\n const loaded: Ref<boolean> = ref(false);\n\n // Helper function to safely get map instance\n const getMapInstance = (): Map | null => {\n return map.value || null;\n };\n\n // Setup functions\n const setupMap = (mapInstance: Map) => {\n if (!mapInstance) return;\n\n mapInstance.on('style.load', () => {\n const styleTimeout = () => {\n if (!mapInstance.isStyleLoaded()) {\n loaded.value = false;\n setTimeout(styleTimeout, 200);\n } else {\n loaded.value = true;\n }\n };\n styleTimeout();\n });\n };\n const addLayer = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n if (!mapInstance.getSource(props.sourceId)) {\n mapInstance.addSource(props.sourceId, props.source);\n }\n if (!mapInstance.getLayer(props.layerId)) {\n // Always get a fresh beforeId when adding a layer\n if (props.layer.layout?.visibility === 'visible') {\n mapInstance.addLayer(props.layer, props.before);\n } else {\n // For hidden layers, just add them without worrying about order\n mapInstance.addLayer(props.layer);\n }\n }\n } catch (error) {\n console.error(`[${props.layerId}] Error setting up layer:`, error);\n }\n };\n const updateSource = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n const existingSource = mapInstance.getSource(props.sourceId);\n // Only update source if it has actually changed\n if (\n existingSource &&\n JSON.stringify(existingSource.serialize()) !==\n JSON.stringify(props.source)\n ) {\n if (mapInstance.getLayer(props.layerId)) {\n mapInstance.removeLayer(props.layerId);\n }\n mapInstance.removeSource(props.sourceId);\n mapInstance.addSource(props.sourceId, props.source);\n const layerSpec = {\n ...props.layer,\n id: props.layerId,\n source: props.sourceId,\n } as LayerSpecification;\n mapInstance.addLayer(layerSpec, props.before);\n }\n } catch (error) {\n console.error('Error updating vector source:', error);\n }\n };\n const updateLayer = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n if (mapInstance.getLayer(props.layerId)) {\n // Get current paint and layout properties\n const currentLayer = mapInstance.getLayer(props.layerId);\n const currentPaint = (currentLayer?.paint || {}) as Record<\n string,\n unknown\n >;\n const currentLayout = (currentLayer?.layout || {}) as Record<\n string,\n unknown\n >;\n\n // Only update properties that have changed\n Object.entries(props.layer.paint || {}).forEach(([key, value]) => {\n if (JSON.stringify(currentPaint[key]) !== JSON.stringify(value)) {\n mapInstance.setPaintProperty(props.layerId, key, value);\n }\n });\n\n Object.entries(props.layer.layout || {}).forEach(([key, value]) => {\n if (JSON.stringify(currentLayout[key]) !== JSON.stringify(value)) {\n mapInstance.setLayoutProperty(props.layerId, key, value);\n }\n });\n }\n } catch (error) {\n console.error('Error updating vector layer:', error);\n }\n };\n const setupLayerEvents = (mapInstance: Map) => {\n if (!mapInstance) return;\n\n try {\n mapLayerEvents.forEach((eventName) => {\n mapInstance.on(eventName, props.layerId, (e) => {\n if (eventName === 'mousemove') {\n mapInstance.getCanvas().style.cursor = 'pointer';\n }\n if (eventName === 'mouseleave') {\n mapInstance.getCanvas().style.cursor = '';\n }\n emit(eventName, e);\n });\n });\n } catch (error) {\n console.error('Error setting up layer events:', error);\n }\n };\n\n // Watchers\n watch(\n map,\n (newMap, oldMap) => {\n if (newMap && newMap !== oldMap) {\n setupMap(newMap);\n }\n },\n { immediate: true },\n );\n watch(loaded, (value) => {\n if (value) {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n addLayer();\n setupLayerEvents(mapInstance);\n }\n });\n watch(\n () => JSON.stringify(props.source.tiles),\n (newTiles, oldTiles) => {\n if (newTiles !== oldTiles) {\n updateSource();\n }\n },\n );\n watch(\n () => ({\n paint: props.layer.paint,\n // Watch layout changes but exclude visibility since it's handled separately\n layout: props.layer.layout\n ? { ...props.layer.layout, visibility: undefined }\n : undefined,\n }),\n (newValue, oldValue) => {\n if (JSON.stringify(newValue) !== JSON.stringify(oldValue)) {\n updateLayer();\n }\n },\n { deep: true },\n );\n watch(\n () => props.layer.layout?.visibility,\n (newVisibility) => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n const hasLayer = mapInstance.getLayer(props.layerId);\n\n if (!hasLayer) {\n // Add layer if it doesn't exist\n try {\n if (!mapInstance.getSource(props.sourceId)) {\n mapInstance.addSource(props.sourceId, props.source);\n }\n mapInstance.addLayer(props.layer, props.before);\n } catch (error) {\n console.error(`[${props.layerId}] Error adding layer:`, error);\n }\n } else {\n try {\n // Update visibility\n mapInstance.setLayoutProperty(\n props.layerId,\n 'visibility',\n newVisibility,\n );\n\n // If becoming visible, ensure proper layer order\n if (newVisibility === 'visible' && props.before) {\n // Small timeout to ensure target layer is ready\n setTimeout(() => {\n mapInstance.moveLayer(props.layerId, props.before);\n }, 0);\n }\n } catch (error) {\n console.error(`[${props.layerId}] Error updating visibility:`, error);\n }\n }\n },\n { immediate: true },\n );\n watch(\n () => props.before,\n (newBefore) => {\n const mapInstance = getMapInstance();\n if (!mapInstance || !mapInstance.getLayer(props.layerId)) return;\n\n // Only move visible layers\n if (props.layer.layout?.visibility === 'visible') {\n try {\n mapInstance.moveLayer(props.layerId, newBefore);\n } catch (error) {\n console.error(\n `Error reordering vector layer ${props.layerId}:`,\n error,\n );\n }\n }\n },\n );\n watch(\n () => props.layer.layout?.visibility,\n (newVisibility) => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n const hasLayer = mapInstance.getLayer(props.layerId);\n\n if (!hasLayer) {\n // Only add layer if it doesn't exist\n try {\n if (!mapInstance.getSource(props.sourceId)) {\n mapInstance.addSource(props.sourceId, props.source);\n }\n mapInstance.addLayer(props.layer, props.before);\n } catch (error) {\n console.error(`[${props.layerId}] Error adding layer:`, error);\n }\n } else {\n // Just update visibility if layer exists\n try {\n mapInstance.setLayoutProperty(\n props.layerId,\n 'visibility',\n newVisibility,\n );\n } catch (error) {\n console.error(`[${props.layerId}] Error updating visibility:`, error);\n }\n }\n },\n { immediate: true },\n );\n onMounted(() => {\n const mapInstance = getMapInstance();\n if (!mapInstance) {\n return;\n }\n try {\n addLayer();\n } catch (error) {\n console.error(`[${props.layerId}] Error setting up layer:`, error);\n }\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import type {\n LayerSpecification as AnyLayer,\n VideoSourceSpecification,\n VideoSource,\n Map,\n } from 'maplibre-gl';\n import type { PropType, Ref } from 'vue';\n import { onMounted, onBeforeUnmount, ref, watch } from 'vue';\n import { injectStrict, MapKey } from '../../../utils';\n\n const props = defineProps({\n sourceId: {\n type: String,\n default: 'maplibre.gl-video-source',\n required: true,\n },\n layerId: {\n type: String,\n default: 'maplibre.gl-video-layer',\n required: true,\n },\n source: {\n type: Object as PropType<VideoSourceSpecification>,\n required: true,\n },\n layer: {\n type: Object as PropType<AnyLayer>,\n default: () => ({}),\n required: true,\n },\n before: {\n type: String,\n default: '',\n required: false,\n },\n });\n\n const map = injectStrict(MapKey);\n const loaded: Ref<boolean> = ref(false);\n\n // Helper function to safely get map instance\n const getMapInstance = (): Map | null => {\n return map.value || null;\n };\n\n // Setup functions\n const setupMap = (mapInstance: Map) => {\n if (!mapInstance) return;\n\n mapInstance.on('style.load', () => {\n const styleTimeout = () => {\n if (!mapInstance.isStyleLoaded()) {\n loaded.value = false;\n setTimeout(styleTimeout, 200);\n } else {\n loaded.value = true;\n }\n };\n styleTimeout();\n });\n };\n\n const addLayer = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n if (!mapInstance.getSource(props.sourceId)) {\n mapInstance.addSource(props.sourceId, props.source);\n }\n if (!mapInstance.getLayer(props.layerId)) {\n const layerSpec = {\n ...props.layer,\n id: props.layerId,\n source: props.sourceId,\n } as AnyLayer;\n mapInstance.addLayer(layerSpec, props.before);\n }\n } catch (error) {\n console.error('Error adding Video layer:', error);\n }\n };\n\n const updateSource = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n const source = mapInstance.getSource(props.sourceId) as VideoSource;\n if (source) {\n // For video sources, we need to remove and re-add since there's no direct update method\n if (mapInstance.getLayer(props.layerId)) {\n mapInstance.removeLayer(props.layerId);\n }\n if (mapInstance.getSource(props.sourceId)) {\n mapInstance.removeSource(props.sourceId);\n }\n\n mapInstance.addSource(props.sourceId, props.source);\n const layerSpec = {\n ...props.layer,\n id: props.layerId,\n source: props.sourceId,\n } as AnyLayer;\n mapInstance.addLayer(layerSpec, props.before);\n\n // Additional video-specific operations if needed\n if (source.getVideo) {\n const videoElement = source.getVideo();\n if (videoElement) {\n // Handle video element updates if needed\n videoElement.play().catch((error) => {\n console.error('Error playing video:', error);\n });\n }\n }\n }\n } catch (error) {\n console.error('Error updating Video source:', error);\n }\n };\n\n const updateLayer = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n if (mapInstance.getLayer(props.layerId)) {\n Object.entries(props.layer.paint || {}).forEach(([key, value]) => {\n mapInstance.setPaintProperty(props.layerId, key, value);\n });\n Object.entries(props.layer.layout || {}).forEach(([key, value]) => {\n mapInstance.setLayoutProperty(props.layerId, key, value);\n });\n }\n } catch (error) {\n console.error('Error updating Video layer:', error);\n }\n };\n\n // Watchers\n watch(() => props.source, updateSource, { deep: true });\n watch(() => props.layer, updateLayer, { deep: true });\n\n // Watch for map instance changes\n watch(\n map,\n (newMap) => {\n if (newMap) {\n setupMap(newMap);\n }\n },\n { immediate: true },\n );\n\n // Watch loaded state\n watch(loaded, (value) => {\n if (value) {\n addLayer();\n }\n });\n\n // Lifecycle hooks\n onMounted(() => {\n const mapInstance = getMapInstance();\n if (mapInstance?.isStyleLoaded()) {\n addLayer();\n }\n });\n\n onBeforeUnmount(() => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n const source = mapInstance.getSource(props.sourceId) as VideoSource;\n if (source?.getVideo) {\n const videoElement = source.getVideo();\n if (videoElement) {\n // Stop and cleanup video if needed\n videoElement.pause();\n videoElement.remove();\n }\n }\n\n if (mapInstance.getLayer(props.layerId)) {\n mapInstance.removeLayer(props.layerId);\n }\n if (mapInstance.getSource(props.sourceId)) {\n mapInstance.removeSource(props.sourceId);\n }\n } catch (error) {\n console.error('Error cleaning up Video layer:', error);\n }\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { PMTiles } from 'pmtiles';\n import { inject, onMounted, ref } from 'vue';\n import type { PropType } from 'vue';\n import type {\n RasterLayerSpecification,\n RasterSourceSpecification,\n } from 'maplibre-gl';\n import VLayerMaplibreRaster from '../raster/VLayerMaplibreRaster.vue';\n import { PMTileProtocolKey } from '../../../utils/symbols';\n\n const props = defineProps({\n sourceId: {\n type: String,\n default: 'maplibre.gl-pmtile-source',\n required: true,\n },\n layerId: {\n type: String,\n default: 'maplibre.gl-pmtile-layer',\n required: true,\n },\n url: {\n type: String,\n required: true,\n },\n layer: {\n type: Object as PropType<RasterLayerSpecification>,\n default: () => ({}),\n required: true,\n },\n before: {\n type: String,\n default: '',\n required: false,\n },\n });\n\n const protocol = inject(PMTileProtocolKey);\n if (!protocol) {\n throw new Error('Protocol not provided');\n }\n\n const source = ref<RasterSourceSpecification>({\n type: 'raster',\n url: `pmtiles://${props.url}`,\n tileSize: 512,\n volatile: true,\n });\n onMounted(async () => {\n const p = new PMTiles(props.url);\n protocol.add(p);\n // Optional: You could fetch the header here if you need metadata\n // const header = await p.getHeader();\n });\n</script>\n\n<template>\n <VLayerMaplibreRaster\n :source-id=\"sourceId\"\n :layer-id=\"layerId\"\n :source=\"source\"\n :layer=\"{\n ...layer,\n type: 'raster',\n }\"\n :before=\"before\"\n ></VLayerMaplibreRaster>\n</template>\n","<!-- web/app/lib/v-mapbox/layers/maplibre/cluster/VLayerMaplibreCluster.vue -->\n<script setup lang=\"ts\">\n import type { Ref } from 'vue';\n import { onMounted, onBeforeUnmount, ref, watch, computed } from 'vue';\n import type {\n GeoJSONSource,\n GeoJSONSourceSpecification,\n CircleLayerSpecification,\n SymbolLayerSpecification,\n Map,\n MapLayerMouseEvent,\n DataDrivenPropertyValueSpecification,\n } from 'maplibre-gl';\n import { injectStrict, MapKey } from '../../../utils';\n\n interface LayerClick {\n features: GeoJSON.Feature[];\n coordinates: {\n lng: number;\n lat: number;\n };\n }\n\n interface Props {\n sourceId: string;\n baseLayerId: string;\n source: GeoJSONSourceSpecification;\n visibility?: boolean;\n clusterPaint?: {\n colors?: string[];\n radii?: number[];\n };\n unclusteredPaint?: {\n color?: DataDrivenPropertyValueSpecification<string>;\n radius?: number;\n };\n textPaint?: {\n color?: string;\n font?: string[];\n size?: number;\n };\n }\n\n const props = withDefaults(defineProps<Props>(), {\n sourceId: 'cluster-source',\n baseLayerId: 'cluster',\n visibility: true,\n clusterPaint: () => ({\n colors: ['#51bbd6', '#f1f075', '#f28cb1'],\n radii: [20, 30, 40],\n }),\n unclusteredPaint: () => ({\n color: '#51bbd6',\n radius: 6,\n }),\n textPaint: () => ({\n color: '#ffffff',\n font: ['DIN Offc Pro Medium', 'Arial Unicode MS Bold'],\n size: 12,\n }),\n });\n\n const emit = defineEmits<{\n 'cluster-click': [event: LayerClick];\n 'point-click': [event: LayerClick];\n }>();\n\n const map = injectStrict(MapKey);\n const loaded: Ref<boolean> = ref(false);\n\n // Layer IDs\n const clustersLayerId = computed(() => `${props.baseLayerId}-clusters`);\n const clusterCountLayerId = computed(\n () => `${props.baseLayerId}-cluster-count`,\n );\n const unclusteredLayerId = computed(\n () => `${props.baseLayerId}-unclustered-point`,\n );\n\n // Helper function to safely get map instance\n const getMapInstance = (): Map | null => {\n return map.value || null;\n };\n\n // Helper to check if data is valid GeoJSON with features\n const hasValidData = (data: string | GeoJSON.GeoJSON): boolean => {\n if (typeof data === 'string') return false;\n if (data && typeof data === 'object' && 'type' in data) {\n if (data.type === 'FeatureCollection' && 'features' in data) {\n return data.features.length > 0;\n }\n }\n return false;\n };\n\n // Add all cluster-related layers at once\n const addClusterLayers = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance || !mapInstance.isStyleLoaded()) {\n return;\n }\n\n try {\n // 1. Add source if it doesn't exist\n if (!mapInstance.getSource(props.sourceId)) {\n console.log(`Adding clustered source: ${props.sourceId}`);\n mapInstance.addSource(props.sourceId, {\n ...props.source,\n cluster: true,\n clusterMaxZoom: 14,\n clusterRadius: 50,\n });\n } else {\n // If source exists, update its data\n const source = mapInstance.getSource(props.sourceId) as GeoJSONSource;\n if (source && 'setData' in source) {\n source.setData(props.source.data);\n }\n }\n\n // 2. Add clusters layer\n if (!mapInstance.getLayer(clustersLayerId.value)) {\n console.log(`Adding clusters layer: ${clustersLayerId.value}`);\n mapInstance.addLayer({\n id: clustersLayerId.value,\n type: 'circle',\n source: props.sourceId,\n filter: ['has', 'point_count'],\n paint: {\n 'circle-color': [\n 'step',\n ['get', 'point_count'],\n props.clusterPaint.colors![0]!,\n 100,\n props.clusterPaint.colors![1]!,\n 750,\n props.clusterPaint.colors![2]!,\n ],\n 'circle-radius': [\n 'step',\n ['get', 'point_count'],\n props.clusterPaint.radii![0]!,\n 100,\n props.clusterPaint.radii![1]!,\n 750,\n props.clusterPaint.radii![2]!,\n ],\n 'circle-stroke-width': 2,\n 'circle-stroke-color': '#ffffff',\n 'circle-opacity': 0.9,\n },\n layout: {\n visibility: props.visibility ? 'visible' : 'none',\n },\n } as CircleLayerSpecification);\n }\n\n // 3. Add cluster count text layer\n if (!mapInstance.getLayer(clusterCountLayerId.value)) {\n console.log(`Adding cluster count layer: ${clusterCountLayerId.value}`);\n mapInstance.addLayer({\n id: clusterCountLayerId.value,\n type: 'symbol',\n source: props.sourceId,\n filter: ['has', 'point_count'],\n layout: {\n 'text-field': '{point_count_abbreviated}',\n 'text-font': props.textPaint.font!,\n 'text-size': props.textPaint.size!,\n visibility: props.visibility ? 'visible' : 'none',\n },\n paint: {\n 'text-color': props.textPaint.color!,\n },\n } as SymbolLayerSpecification);\n }\n\n // 4. Add unclustered points layer\n if (!mapInstance.getLayer(unclusteredLayerId.value)) {\n console.log(\n `Adding unclustered points layer: ${unclusteredLayerId.value}`,\n );\n mapInstance.addLayer({\n id: unclusteredLayerId.value,\n type: 'circle',\n source: props.sourceId,\n filter: ['!', ['has', 'point_count']],\n paint: {\n 'circle-color': props.unclusteredPaint.color!,\n 'circle-radius': props.unclusteredPaint.radius!,\n 'circle-stroke-width': 2,\n 'circle-stroke-color': '#ffffff',\n 'circle-opacity': 0.95,\n },\n layout: {\n visibility: props.visibility ? 'visible' : 'none',\n },\n } as CircleLayerSpecification);\n }\n\n console.log(`All cluster layers added for ${props.baseLayerId}`);\n\n // Setup click handlers after layers are added\n setupLayerEvents(mapInstance);\n } catch (error) {\n console.error('Error adding cluster layers:', error);\n }\n };\n\n // Update source data\n const updateSource = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n const source = mapInstance.getSource(props.sourceId) as\n | GeoJSONSource\n | undefined;\n if (source && 'setData' in source) {\n console.log(`Updating source ${props.sourceId} with data`);\n source.setData(props.source.data);\n\n // After updating data, ensure all layers are properly added\n // This fixes the issue where layers might not render correctly with initial empty data\n setTimeout(() => {\n // Re-add layers if they're missing (this won't duplicate them)\n addClusterLayers();\n }, 100);\n } else if (!source) {\n // Source doesn't exist, add all layers\n addClusterLayers();\n }\n } catch (error) {\n console.error('Error updating source:', error);\n }\n };\n\n // Update visibility for all layers\n const updateVisibility = (visible: boolean): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n const visibility = visible ? 'visible' : 'none';\n\n [\n clustersLayerId.value,\n clusterCountLayerId.value,\n unclusteredLayerId.value,\n ].forEach((layerId) => {\n if (mapInstance.getLayer(layerId)) {\n mapInstance.setLayoutProperty(layerId, 'visibility', visibility);\n }\n });\n };\n\n // Setup click handlers for layers\n const setupLayerEvents = (mapInstance: Map) => {\n if (!mapInstance) return;\n\n try {\n // Click handler for clusters\n mapInstance.on(\n 'click',\n clustersLayerId.value,\n (e: MapLayerMouseEvent) => {\n if (e.features && e.features.length > 0) {\n emit('cluster-click', {\n features: e.features,\n coordinates: e.lngLat,\n });\n }\n },\n );\n\n // Click handler for individual points\n mapInstance.on(\n 'click',\n unclusteredLayerId.value,\n (e: MapLayerMouseEvent) => {\n if (e.features && e.features.length > 0) {\n emit('point-click', {\n features: e.features,\n coordinates: e.lngLat,\n });\n }\n },\n );\n\n // Add hover effects\n [clustersLayerId.value, unclusteredLayerId.value].forEach((layerId) => {\n mapInstance.on('mouseenter', layerId, () => {\n mapInstance.getCanvas().style.cursor = 'pointer';\n });\n\n mapInstance.on('mouseleave', layerId, () => {\n mapInstance.getCanvas().style.cursor = '';\n });\n });\n } catch (error) {\n console.error('Error setting up layer events:', error);\n }\n };\n\n // Setup map\n const setupMap = (mapInstance: Map) => {\n if (!mapInstance) return;\n\n mapInstance.on('style.load', () => {\n const checkStyleLoaded = () => {\n if (!mapInstance.isStyleLoaded()) {\n loaded.value = false;\n setTimeout(checkStyleLoaded, 200);\n } else {\n loaded.value = true;\n // Only add layers if we have data\n if (hasValidData(props.source.data)) {\n addClusterLayers();\n }\n }\n };\n checkStyleLoaded();\n });\n\n // If style is already loaded\n if (mapInstance.isStyleLoaded()) {\n loaded.value = true;\n // Only add layers if we have data\n if (hasValidData(props.source.data)) {\n addClusterLayers();\n }\n }\n };\n\n // Watchers\n watch(\n () => props.source.data,\n (newData) => {\n // Only proceed if we have actual data\n if (hasValidData(newData)) {\n const mapInstance = getMapInstance();\n if (mapInstance?.isStyleLoaded()) {\n // First time with data - add all layers\n if (!mapInstance.getSource(props.sourceId)) {\n addClusterLayers();\n } else {\n // Source exists, just update data\n updateSource();\n }\n }\n }\n },\n { deep: true, immediate: true },\n );\n\n watch(() => props.visibility, updateVisibility);\n\n watch(\n map,\n (newMap) => {\n if (newMap) {\n setupMap(newMap);\n }\n },\n { immediate: true },\n );\n\n // Lifecycle\n onMounted(() => {\n const mapInstance = getMapInstance();\n // Only add layers if map is ready AND we have data\n if (mapInstance?.isStyleLoaded() && hasValidData(props.source.data)) {\n addClusterLayers();\n }\n });\n\n onBeforeUnmount(() => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n // Remove click handlers\n [clustersLayerId.value, unclusteredLayerId.value].forEach((layerId) => {\n mapInstance.off('click', layerId, () => {});\n mapInstance.off('mouseenter', layerId, () => {});\n mapInstance.off('mouseleave', layerId, () => {});\n });\n\n // Remove all layers\n [\n clustersLayerId.value,\n clusterCountLayerId.value,\n unclusteredLayerId.value,\n ].forEach((layerId) => {\n if (mapInstance.getLayer(layerId)) {\n mapInstance.removeLayer(layerId);\n }\n });\n\n // Remove source\n if (mapInstance.getSource(props.sourceId)) {\n mapInstance.removeSource(props.sourceId);\n }\n } catch (error) {\n console.error('Error cleaning up cluster layers:', error);\n }\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import type { Ref } from 'vue';\n import { onMounted, onBeforeUnmount, ref, watch, computed } from 'vue';\n import type {\n GeoJSONSource,\n Map,\n MapLayerMouseEvent,\n LineLayerSpecification,\n } from 'maplibre-gl';\n import { injectStrict, MapKey } from '../../../utils';\n\n interface RouteClick {\n coordinates: {\n lng: number;\n lat: number;\n };\n }\n\n interface Props {\n /** Unique identifier for the route */\n id?: string;\n /** Array of [longitude, latitude] coordinate pairs defining the route */\n coordinates: [number, number][];\n /** Line color as CSS color value */\n color?: string;\n /** Line width in pixels */\n width?: number;\n /** Line opacity (0-1) */\n opacity?: number;\n /** Line cap style */\n lineCap?: 'butt' | 'round' | 'square';\n /** Line join style */\n lineJoin?: 'bevel' | 'round' | 'miter';\n /** Whether the route is visible */\n visible?: boolean;\n /** Whether the route is interactive (shows pointer cursor on hover) */\n interactive?: boolean;\n /** Render this layer before the specified layer */\n before?: string;\n /** Line dash array for dashed lines */\n dashArray?: number[];\n /** Line blur in pixels */\n blur?: number;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n id: () => `route-${Math.random().toString(36).slice(2, 9)}`,\n color: '#4285F4',\n width: 4,\n opacity: 1,\n lineCap: 'round',\n lineJoin: 'round',\n visible: true,\n interactive: true,\n before: '',\n blur: 0,\n });\n\n const emit = defineEmits<{\n click: [event: RouteClick];\n mouseenter: [];\n mouseleave: [];\n }>();\n\n const map = injectStrict(MapKey);\n const loaded: Ref<boolean> = ref(false);\n\n const sourceId = computed(() => `${props.id}-source`);\n const layerId = computed(() => `${props.id}-layer`);\n\n // Create GeoJSON data from coordinates\n const geojsonData = computed(\n (): GeoJSON.FeatureCollection<GeoJSON.LineString> => ({\n type: 'FeatureCollection',\n features:\n props.coordinates.length >= 2\n ? [\n {\n type: 'Feature',\n properties: {},\n geometry: {\n type: 'LineString',\n coordinates: props.coordinates,\n },\n },\n ]\n : [],\n }),\n );\n\n // Helper function to safely get map instance\n const getMapInstance = (): Map | null => {\n return map.value || null;\n };\n\n // Setup map style load listener\n const setupMap = (mapInstance: Map) => {\n if (!mapInstance) return;\n\n mapInstance.on('style.load', () => {\n const styleTimeout = () => {\n if (!mapInstance.isStyleLoaded()) {\n loaded.value = false;\n setTimeout(styleTimeout, 200);\n } else {\n loaded.value = true;\n }\n };\n styleTimeout();\n });\n };\n\n const addLayer = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance || !mapInstance.isStyleLoaded()) return;\n\n // Don't add if no valid coordinates\n if (props.coordinates.length < 2) return;\n\n try {\n // Only add source if it doesn't exist\n if (!mapInstance.getSource(sourceId.value)) {\n mapInstance.addSource(sourceId.value, {\n type: 'geojson',\n data: geojsonData.value,\n });\n }\n\n // Only add layer if it doesn't exist\n if (!mapInstance.getLayer(layerId.value)) {\n const layerSpec: LineLayerSpecification = {\n id: layerId.value,\n type: 'line',\n source: sourceId.value,\n layout: {\n 'line-cap': props.lineCap,\n 'line-join': props.lineJoin,\n visibility: props.visible ? 'visible' : 'none',\n },\n paint: {\n 'line-color': props.color,\n 'line-width': props.width,\n 'line-opacity': props.opacity,\n ...(props.blur > 0 && { 'line-blur': props.blur }),\n ...(props.dashArray && { 'line-dasharray': props.dashArray }),\n },\n };\n\n mapInstance.addLayer(layerSpec, props.before || undefined);\n }\n } catch (error) {\n console.error('Error adding route layer:', error);\n }\n };\n\n const updateSource = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n const source = mapInstance.getSource(sourceId.value) as\n | GeoJSONSource\n | undefined;\n\n if (source && 'setData' in source) {\n source.setData(geojsonData.value);\n } else if (!source && props.coordinates.length >= 2) {\n addLayer();\n }\n } catch (error) {\n console.error('Error updating route source:', error);\n }\n };\n\n const updateLayerStyle = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance || !mapInstance.getLayer(layerId.value)) return;\n\n try {\n // Update paint properties\n mapInstance.setPaintProperty(layerId.value, 'line-color', props.color);\n mapInstance.setPaintProperty(layerId.value, 'line-width', props.width);\n mapInstance.setPaintProperty(\n layerId.value,\n 'line-opacity',\n props.opacity,\n );\n\n if (props.blur > 0) {\n mapInstance.setPaintProperty(layerId.value, 'line-blur', props.blur);\n }\n if (props.dashArray) {\n mapInstance.setPaintProperty(\n layerId.value,\n 'line-dasharray',\n props.dashArray,\n );\n }\n\n // Update layout properties\n mapInstance.setLayoutProperty(layerId.value, 'line-cap', props.lineCap);\n mapInstance.setLayoutProperty(layerId.value, 'line-join', props.lineJoin);\n mapInstance.setLayoutProperty(\n layerId.value,\n 'visibility',\n props.visible ? 'visible' : 'none',\n );\n } catch (error) {\n console.error('Error updating route layer style:', error);\n }\n };\n\n const setupLayerEvents = (mapInstance: Map) => {\n if (!mapInstance || !props.interactive) return;\n\n try {\n // Click handler\n mapInstance.on('click', layerId.value, (e: MapLayerMouseEvent) => {\n emit('click', {\n coordinates: e.lngLat,\n });\n });\n\n // Hover effects\n mapInstance.on('mouseenter', layerId.value, () => {\n mapInstance.getCanvas().style.cursor = 'pointer';\n emit('mouseenter');\n });\n\n mapInstance.on('mouseleave', layerId.value, () => {\n mapInstance.getCanvas().style.cursor = '';\n emit('mouseleave');\n });\n } catch (error) {\n console.error('Error setting up route layer events:', error);\n }\n };\n\n // Watch for coordinate changes\n watch(\n () => props.coordinates,\n () => {\n const mapInstance = getMapInstance();\n if (mapInstance?.isStyleLoaded()) {\n if (!mapInstance.getSource(sourceId.value)) {\n addLayer();\n } else {\n updateSource();\n }\n }\n },\n { deep: true },\n );\n\n // Watch for style changes\n watch(\n () => [\n props.color,\n props.width,\n props.opacity,\n props.lineCap,\n props.lineJoin,\n props.visible,\n props.blur,\n props.dashArray,\n ],\n () => updateLayerStyle(),\n { deep: true },\n );\n\n // Watch for map instance changes\n watch(\n map,\n (newMap) => {\n if (newMap) {\n setupMap(newMap);\n if (newMap.isStyleLoaded()) {\n loaded.value = true;\n }\n }\n },\n { immediate: true },\n );\n\n // Watch loaded state\n watch(loaded, (value) => {\n if (value && props.coordinates.length >= 2) {\n const mapInstance = getMapInstance();\n if (mapInstance) {\n addLayer();\n setupLayerEvents(mapInstance);\n }\n }\n });\n\n // Lifecycle hooks\n onMounted(() => {\n try {\n const mapInstance = getMapInstance();\n if (mapInstance?.isStyleLoaded() && props.coordinates.length >= 2) {\n addLayer();\n setupLayerEvents(mapInstance);\n }\n } catch (error) {\n console.error('Error mounting route layer:', error);\n }\n });\n\n onBeforeUnmount(() => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n if (mapInstance.getLayer(layerId.value)) {\n mapInstance.removeLayer(layerId.value);\n }\n if (mapInstance.getSource(sourceId.value)) {\n mapInstance.removeSource(sourceId.value);\n }\n } catch (error) {\n console.error('Error cleaning up route layer:', error);\n }\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { ScatterplotLayer } from '@deck.gl/layers';\n import type { ScatterplotLayerProps } from '@deck.gl/layers';\n import type { Color, PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPosition: Accessor<D, Position>;\n getRadius?: Accessor<D, number>;\n getFillColor?: Accessor<D, Color>;\n getLineColor?: Accessor<D, Color>;\n getLineWidth?: Accessor<D, number>;\n radiusUnits?: 'meters' | 'common' | 'pixels';\n radiusScale?: number;\n radiusMinPixels?: number;\n radiusMaxPixels?: number;\n lineWidthUnits?: 'meters' | 'common' | 'pixels';\n lineWidthScale?: number;\n lineWidthMinPixels?: number;\n lineWidthMaxPixels?: number;\n stroked?: boolean;\n filled?: boolean;\n billboard?: boolean;\n antialiasing?: boolean;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n radiusUnits: 'meters',\n radiusScale: 1,\n radiusMinPixels: 0,\n radiusMaxPixels: Number.MAX_SAFE_INTEGER,\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n stroked: false,\n filled: true,\n billboard: false,\n antialiasing: true,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new ScatterplotLayer({\n id: props.id,\n data: props.data,\n getPosition: props.getPosition,\n getRadius: props.getRadius ?? 1,\n getFillColor: props.getFillColor ?? [255, 140, 0],\n getLineColor: props.getLineColor ?? [0, 0, 0],\n getLineWidth: props.getLineWidth ?? 1,\n radiusUnits: props.radiusUnits,\n radiusScale: props.radiusScale,\n radiusMinPixels: props.radiusMinPixels,\n radiusMaxPixels: props.radiusMaxPixels,\n lineWidthUnits: props.lineWidthUnits,\n lineWidthScale: props.lineWidthScale,\n lineWidthMinPixels: props.lineWidthMinPixels,\n lineWidthMaxPixels: props.lineWidthMaxPixels,\n stroked: props.stroked,\n filled: props.filled,\n billboard: props.billboard,\n antialiasing: props.antialiasing,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as ScatterplotLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getPosition,\n props.getRadius,\n props.getFillColor,\n props.getLineColor,\n props.radiusScale,\n props.opacity,\n props.visible,\n props.stroked,\n props.filled,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { ArcLayer } from '@deck.gl/layers';\n import type { ArcLayerProps } from '@deck.gl/layers';\n import type { Color, PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getSourcePosition: Accessor<D, Position>;\n getTargetPosition: Accessor<D, Position>;\n getSourceColor?: Accessor<D, Color>;\n getTargetColor?: Accessor<D, Color>;\n getWidth?: Accessor<D, number>;\n getHeight?: Accessor<D, number>;\n getTilt?: Accessor<D, number>;\n greatCircle?: boolean;\n numSegments?: number;\n widthUnits?: 'meters' | 'common' | 'pixels';\n widthScale?: number;\n widthMinPixels?: number;\n widthMaxPixels?: number;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n greatCircle: false,\n numSegments: 50,\n widthUnits: 'pixels',\n widthScale: 1,\n widthMinPixels: 0,\n widthMaxPixels: Number.MAX_SAFE_INTEGER,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new ArcLayer({\n id: props.id,\n data: props.data,\n getSourcePosition: props.getSourcePosition,\n getTargetPosition: props.getTargetPosition,\n getSourceColor: props.getSourceColor ?? [255, 140, 0],\n getTargetColor: props.getTargetColor ?? [0, 200, 255],\n getWidth: props.getWidth ?? 1,\n getHeight: props.getHeight ?? 1,\n getTilt: props.getTilt ?? 0,\n greatCircle: props.greatCircle,\n numSegments: props.numSegments,\n widthUnits: props.widthUnits,\n widthScale: props.widthScale,\n widthMinPixels: props.widthMinPixels,\n widthMaxPixels: props.widthMaxPixels,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as ArcLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getSourcePosition,\n props.getTargetPosition,\n props.getSourceColor,\n props.getTargetColor,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { GeoJsonLayer } from '@deck.gl/layers';\n import type { PickingInfo } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n import type { Color } from '../_shared/types';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D | string | Promise<D>;\n getFillColor?: Accessor<D, Color>;\n getLineColor?: Accessor<D, Color>;\n getLineWidth?: Accessor<D, number>;\n getPointRadius?: Accessor<D, number>;\n getElevation?: Accessor<D, number>;\n getText?: Accessor<D, string>;\n filled?: boolean;\n stroked?: boolean;\n extruded?: boolean;\n wireframe?: boolean;\n pointType?: string;\n lineWidthUnits?: 'meters' | 'common' | 'pixels';\n lineWidthScale?: number;\n lineWidthMinPixels?: number;\n lineWidthMaxPixels?: number;\n lineJointRounded?: boolean;\n lineCapRounded?: boolean;\n lineMiterLimit?: number;\n pointRadiusUnits?: 'meters' | 'common' | 'pixels';\n pointRadiusScale?: number;\n pointRadiusMinPixels?: number;\n pointRadiusMaxPixels?: number;\n elevationScale?: number;\n material?: boolean | object;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n filled: true,\n stroked: true,\n extruded: false,\n wireframe: false,\n pointType: 'circle',\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n lineJointRounded: false,\n lineCapRounded: false,\n lineMiterLimit: 4,\n pointRadiusUnits: 'meters',\n pointRadiusScale: 1,\n pointRadiusMinPixels: 0,\n pointRadiusMaxPixels: Number.MAX_SAFE_INTEGER,\n elevationScale: 1,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new GeoJsonLayer({\n id: props.id,\n data: props.data,\n getFillColor: props.getFillColor ?? [200, 200, 200, 200],\n getLineColor: props.getLineColor ?? [0, 0, 0, 255],\n getLineWidth: props.getLineWidth ?? 1,\n getPointRadius: props.getPointRadius ?? 1,\n getElevation: props.getElevation ?? 1000,\n getText: props.getText,\n filled: props.filled,\n stroked: props.stroked,\n extruded: props.extruded,\n wireframe: props.wireframe,\n pointType: props.pointType,\n lineWidthUnits: props.lineWidthUnits,\n lineWidthScale: props.lineWidthScale,\n lineWidthMinPixels: props.lineWidthMinPixels,\n lineWidthMaxPixels: props.lineWidthMaxPixels,\n lineJointRounded: props.lineJointRounded,\n lineCapRounded: props.lineCapRounded,\n lineMiterLimit: props.lineMiterLimit,\n pointRadiusUnits: props.pointRadiusUnits,\n pointRadiusScale: props.pointRadiusScale,\n pointRadiusMinPixels: props.pointRadiusMinPixels,\n pointRadiusMaxPixels: props.pointRadiusMaxPixels,\n elevationScale: props.elevationScale,\n material: props.material,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as unknown as ConstructorParameters<typeof GeoJsonLayer>[0]);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getFillColor,\n props.getLineColor,\n props.opacity,\n props.visible,\n props.extruded,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { PathLayer } from '@deck.gl/layers';\n import type { PathLayerProps } from '@deck.gl/layers';\n import type { PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n import type { Color } from '../_shared/types';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPath: Accessor<D, Position[]>;\n getColor?: Accessor<D, Color>;\n getWidth?: Accessor<D, number>;\n widthUnits?: 'meters' | 'common' | 'pixels';\n widthScale?: number;\n widthMinPixels?: number;\n widthMaxPixels?: number;\n capRounded?: boolean;\n jointRounded?: boolean;\n billboard?: boolean;\n miterLimit?: number;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n widthUnits: 'meters',\n widthScale: 1,\n widthMinPixels: 0,\n widthMaxPixels: Number.MAX_SAFE_INTEGER,\n capRounded: false,\n jointRounded: false,\n billboard: false,\n miterLimit: 4,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new PathLayer({\n id: props.id,\n data: props.data,\n getPath: props.getPath,\n getColor: props.getColor ?? [0, 0, 0, 255],\n getWidth: props.getWidth ?? 1,\n widthUnits: props.widthUnits,\n widthScale: props.widthScale,\n widthMinPixels: props.widthMinPixels,\n widthMaxPixels: props.widthMaxPixels,\n capRounded: props.capRounded,\n jointRounded: props.jointRounded,\n billboard: props.billboard,\n miterLimit: props.miterLimit,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as PathLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getPath,\n props.getColor,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { LineLayer } from '@deck.gl/layers';\n import type { LineLayerProps } from '@deck.gl/layers';\n import type { PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n import type { Color } from '../_shared/types';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getSourcePosition: Accessor<D, Position>;\n getTargetPosition: Accessor<D, Position>;\n getColor?: Accessor<D, Color>;\n getWidth?: Accessor<D, number>;\n widthUnits?: 'meters' | 'common' | 'pixels';\n widthScale?: number;\n widthMinPixels?: number;\n widthMaxPixels?: number;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n widthUnits: 'pixels',\n widthScale: 1,\n widthMinPixels: 0,\n widthMaxPixels: Number.MAX_SAFE_INTEGER,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new LineLayer({\n id: props.id,\n data: props.data,\n getSourcePosition: props.getSourcePosition,\n getTargetPosition: props.getTargetPosition,\n getColor: props.getColor ?? [0, 0, 0, 255],\n getWidth: props.getWidth ?? 1,\n widthUnits: props.widthUnits,\n widthScale: props.widthScale,\n widthMinPixels: props.widthMinPixels,\n widthMaxPixels: props.widthMaxPixels,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as LineLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getSourcePosition,\n props.getTargetPosition,\n props.getColor,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { PolygonLayer } from '@deck.gl/layers';\n import type { PolygonLayerProps } from '@deck.gl/layers';\n import type { PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n import type { Color } from '../_shared/types';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPolygon: Accessor<D, Position[] | Position[][]>;\n getFillColor?: Accessor<D, Color>;\n getLineColor?: Accessor<D, Color>;\n getLineWidth?: Accessor<D, number>;\n getElevation?: Accessor<D, number>;\n filled?: boolean;\n stroked?: boolean;\n extruded?: boolean;\n wireframe?: boolean;\n elevationScale?: number;\n lineWidthUnits?: 'meters' | 'common' | 'pixels';\n lineWidthScale?: number;\n lineWidthMinPixels?: number;\n lineWidthMaxPixels?: number;\n lineJointRounded?: boolean;\n lineMiterLimit?: number;\n material?: boolean | object;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n filled: true,\n stroked: true,\n extruded: false,\n wireframe: false,\n elevationScale: 1,\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n lineJointRounded: false,\n lineMiterLimit: 4,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new PolygonLayer({\n id: props.id,\n data: props.data,\n getPolygon: props.getPolygon,\n getFillColor: props.getFillColor ?? [200, 200, 200, 200],\n getLineColor: props.getLineColor ?? [0, 0, 0, 255],\n getLineWidth: props.getLineWidth ?? 1,\n getElevation: props.getElevation ?? 1000,\n filled: props.filled,\n stroked: props.stroked,\n extruded: props.extruded,\n wireframe: props.wireframe,\n elevationScale: props.elevationScale,\n lineWidthUnits: props.lineWidthUnits,\n lineWidthScale: props.lineWidthScale,\n lineWidthMinPixels: props.lineWidthMinPixels,\n lineWidthMaxPixels: props.lineWidthMaxPixels,\n lineJointRounded: props.lineJointRounded,\n lineMiterLimit: props.lineMiterLimit,\n material: props.material,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as PolygonLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getPolygon,\n props.getFillColor,\n props.getLineColor,\n props.opacity,\n props.visible,\n props.extruded,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { SolidPolygonLayer } from '@deck.gl/layers';\n import type { SolidPolygonLayerProps } from '@deck.gl/layers';\n import type { Color, PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPolygon: Accessor<D, Position[] | Position[][]>;\n getFillColor?: Accessor<D, Color>;\n getLineColor?: Accessor<D, Color>;\n getElevation?: Accessor<D, number>;\n filled?: boolean;\n extruded?: boolean;\n wireframe?: boolean;\n elevationScale?: number;\n material?: boolean | object;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n filled: true,\n extruded: false,\n wireframe: false,\n elevationScale: 1,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new SolidPolygonLayer({\n id: props.id,\n data: props.data,\n getPolygon: props.getPolygon,\n getFillColor: props.getFillColor ?? [0, 0, 0, 255],\n getLineColor: props.getLineColor ?? [0, 0, 0, 255],\n getElevation: props.getElevation ?? 1000,\n filled: props.filled,\n extruded: props.extruded,\n wireframe: props.wireframe,\n elevationScale: props.elevationScale,\n material: props.material,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as SolidPolygonLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getPolygon,\n props.getFillColor,\n props.getElevation,\n props.extruded,\n props.elevationScale,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { IconLayer } from '@deck.gl/layers';\n import type { IconLayerProps } from '@deck.gl/layers';\n import type { PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n import type { Color } from '../_shared/types';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface IconMapping {\n [key: string]: {\n x: number;\n y: number;\n width: number;\n height: number;\n anchorX?: number;\n anchorY?: number;\n mask?: boolean;\n };\n }\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPosition: Accessor<D, Position>;\n getIcon?: Accessor<D, string | object>;\n getSize?: Accessor<D, number>;\n getColor?: Accessor<D, Color>;\n getAngle?: Accessor<D, number>;\n iconAtlas?: string;\n iconMapping?: IconMapping | string;\n sizeScale?: number;\n sizeUnits?: 'meters' | 'common' | 'pixels';\n sizeMinPixels?: number;\n sizeMaxPixels?: number;\n billboard?: boolean;\n alphaCutoff?: number;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n sizeScale: 1,\n sizeUnits: 'pixels',\n sizeMinPixels: 0,\n sizeMaxPixels: Number.MAX_SAFE_INTEGER,\n billboard: true,\n alphaCutoff: 0.05,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new IconLayer({\n id: props.id,\n data: props.data,\n getPosition: props.getPosition,\n getIcon: props.getIcon ?? 'marker',\n getSize: props.getSize ?? 1,\n getColor: props.getColor ?? [255, 255, 255, 255],\n getAngle: props.getAngle ?? 0,\n iconAtlas: props.iconAtlas,\n iconMapping: props.iconMapping,\n sizeScale: props.sizeScale,\n sizeUnits: props.sizeUnits,\n sizeMinPixels: props.sizeMinPixels,\n sizeMaxPixels: props.sizeMaxPixels,\n billboard: props.billboard,\n alphaCutoff: props.alphaCutoff,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as IconLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getPosition,\n props.getIcon,\n props.getSize,\n props.getColor,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { TextLayer } from '@deck.gl/layers';\n import type { TextLayerProps } from '@deck.gl/layers';\n import type { PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n import type { Color } from '../_shared/types';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPosition: Accessor<D, Position>;\n getText: Accessor<D, string>;\n getSize?: Accessor<D, number>;\n getColor?: Accessor<D, Color>;\n getAngle?: Accessor<D, number>;\n getTextAnchor?: Accessor<D, 'start' | 'middle' | 'end'>;\n getAlignmentBaseline?: Accessor<D, 'top' | 'center' | 'bottom'>;\n getPixelOffset?: Accessor<D, [number, number]>;\n getBackgroundColor?: Accessor<D, Color>;\n getBorderColor?: Accessor<D, Color>;\n getBorderWidth?: Accessor<D, number>;\n background?: boolean;\n backgroundPadding?: [number, number] | [number, number, number, number];\n billboard?: boolean;\n sizeScale?: number;\n sizeUnits?: 'meters' | 'common' | 'pixels';\n sizeMinPixels?: number;\n sizeMaxPixels?: number;\n fontFamily?: string;\n fontWeight?: string | number;\n lineHeight?: number;\n fontSettings?: object;\n wordBreak?: 'break-all' | 'break-word';\n maxWidth?: number;\n outlineWidth?: number;\n outlineColor?: Color;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n background: false,\n billboard: true,\n sizeScale: 1,\n sizeUnits: 'pixels',\n sizeMinPixels: 0,\n sizeMaxPixels: Number.MAX_SAFE_INTEGER,\n fontFamily: 'Monaco, monospace',\n fontWeight: 'normal',\n lineHeight: 1,\n wordBreak: 'break-word',\n maxWidth: -1,\n outlineWidth: 0,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new TextLayer({\n id: props.id,\n data: props.data,\n getPosition: props.getPosition,\n getText: props.getText,\n getSize: props.getSize ?? 32,\n getColor: props.getColor ?? [0, 0, 0, 255],\n getAngle: props.getAngle ?? 0,\n getTextAnchor: props.getTextAnchor ?? 'middle',\n getAlignmentBaseline: props.getAlignmentBaseline ?? 'center',\n getPixelOffset: props.getPixelOffset ?? [0, 0],\n getBackgroundColor: props.getBackgroundColor,\n getBorderColor: props.getBorderColor,\n getBorderWidth: props.getBorderWidth,\n background: props.background,\n backgroundPadding: props.backgroundPadding,\n billboard: props.billboard,\n sizeScale: props.sizeScale,\n sizeUnits: props.sizeUnits,\n sizeMinPixels: props.sizeMinPixels,\n sizeMaxPixels: props.sizeMaxPixels,\n fontFamily: props.fontFamily,\n fontWeight: props.fontWeight,\n lineHeight: props.lineHeight,\n fontSettings: props.fontSettings,\n wordBreak: props.wordBreak,\n maxWidth: props.maxWidth,\n outlineWidth: props.outlineWidth,\n outlineColor: props.outlineColor,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as TextLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getPosition,\n props.getText,\n props.getSize,\n props.getColor,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { ColumnLayer } from '@deck.gl/layers';\n import type { ColumnLayerProps } from '@deck.gl/layers';\n import type { Color, PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPosition: Accessor<D, Position>;\n getFillColor?: Accessor<D, Color>;\n getLineColor?: Accessor<D, Color>;\n getElevation?: Accessor<D, number>;\n diskResolution?: number;\n radius?: number;\n angle?: number;\n vertices?: Position[];\n offset?: [number, number];\n coverage?: number;\n elevationScale?: number;\n filled?: boolean;\n stroked?: boolean;\n extruded?: boolean;\n wireframe?: boolean;\n flatShading?: boolean;\n radiusUnits?: 'meters' | 'common' | 'pixels';\n lineWidthUnits?: 'meters' | 'common' | 'pixels';\n lineWidthScale?: number;\n lineWidthMinPixels?: number;\n lineWidthMaxPixels?: number;\n material?: boolean | object;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n diskResolution: 20,\n radius: 1000,\n angle: 0,\n coverage: 1,\n elevationScale: 1,\n filled: true,\n stroked: false,\n extruded: true,\n wireframe: false,\n flatShading: false,\n radiusUnits: 'meters',\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new ColumnLayer({\n id: props.id,\n data: props.data,\n getPosition: props.getPosition,\n getFillColor: props.getFillColor ?? [255, 0, 0, 255],\n getLineColor: props.getLineColor ?? [0, 0, 0, 255],\n getElevation: props.getElevation ?? 1000,\n diskResolution: props.diskResolution,\n radius: props.radius,\n angle: props.angle,\n vertices: props.vertices,\n offset: props.offset,\n coverage: props.coverage,\n elevationScale: props.elevationScale,\n filled: props.filled,\n stroked: props.stroked,\n extruded: props.extruded,\n wireframe: props.wireframe,\n flatShading: props.flatShading,\n radiusUnits: props.radiusUnits,\n lineWidthUnits: props.lineWidthUnits,\n lineWidthScale: props.lineWidthScale,\n lineWidthMinPixels: props.lineWidthMinPixels,\n lineWidthMaxPixels: props.lineWidthMaxPixels,\n material: props.material,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as ColumnLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getPosition,\n props.getFillColor,\n props.getElevation,\n props.radius,\n props.elevationScale,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { BitmapLayer } from '@deck.gl/layers';\n import type { Color, PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n interface Props {\n id: string;\n image:\n | string\n | HTMLImageElement\n | ImageBitmap\n | HTMLCanvasElement\n | ImageData\n | HTMLVideoElement;\n bounds:\n | [number, number, number, number]\n | [Position, Position, Position, Position];\n loadOptions?: object;\n textureParameters?: object;\n desaturate?: number;\n transparentColor?: Color;\n tintColor?: Color;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n desaturate: 0,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new BitmapLayer({\n id: props.id,\n image: props.image,\n bounds: props.bounds,\n loadOptions: props.loadOptions,\n textureParameters: props.textureParameters,\n desaturate: props.desaturate,\n transparentColor: props.transparentColor ?? [0, 0, 0, 0],\n tintColor: props.tintColor ?? [255, 255, 255],\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as unknown as ConstructorParameters<typeof BitmapLayer>[0]);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.image,\n props.bounds,\n props.desaturate,\n props.tintColor,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { GridCellLayer } from '@deck.gl/layers';\n import type { GridCellLayerProps } from '@deck.gl/layers';\n import type { Color, PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPosition: Accessor<D, Position>;\n getFillColor?: Accessor<D, Color>;\n getElevation?: Accessor<D, number>;\n cellSize?: number;\n coverage?: number;\n elevationScale?: number;\n extruded?: boolean;\n material?: boolean | object;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n cellSize: 1000,\n coverage: 1,\n elevationScale: 1,\n extruded: true,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new GridCellLayer({\n id: props.id,\n data: props.data,\n getPosition: props.getPosition,\n getFillColor: props.getFillColor ?? [255, 0, 0, 255],\n getElevation: props.getElevation ?? 1000,\n cellSize: props.cellSize,\n coverage: props.coverage,\n elevationScale: props.elevationScale,\n extruded: props.extruded,\n material: props.material,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as GridCellLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getPosition,\n props.getFillColor,\n props.getElevation,\n props.cellSize,\n props.elevationScale,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { PointCloudLayer } from '@deck.gl/layers';\n import type { PointCloudLayerProps } from '@deck.gl/layers';\n import type { Color, PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPosition: Accessor<D, Position>;\n getColor?: Accessor<D, Color>;\n getNormal?: Accessor<D, [number, number, number]>;\n sizeUnits?: 'meters' | 'common' | 'pixels';\n pointSize?: number;\n material?: boolean | object;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n sizeUnits: 'pixels',\n pointSize: 10,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new PointCloudLayer({\n id: props.id,\n data: props.data,\n getPosition: props.getPosition,\n getColor: props.getColor ?? [0, 0, 0, 255],\n getNormal: props.getNormal ?? [0, 0, 1],\n sizeUnits: props.sizeUnits,\n pointSize: props.pointSize,\n material: props.material,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as PointCloudLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getPosition,\n props.getColor,\n props.pointSize,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { HeatmapLayer } from '@deck.gl/aggregation-layers';\n import type { PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n import type { Color } from '../_shared/types';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPosition: Accessor<D, Position>;\n getWeight?: Accessor<D, number>;\n intensity?: number;\n radiusPixels?: number;\n colorRange?: Color[];\n threshold?: number;\n colorDomain?: [number, number];\n aggregation?: 'SUM' | 'MEAN';\n weightsTextureSize?: number;\n debounceTimeout?: number;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n intensity: 1,\n radiusPixels: 30,\n threshold: 0.05,\n aggregation: 'SUM',\n weightsTextureSize: 2048,\n debounceTimeout: 500,\n opacity: 1,\n visible: true,\n pickable: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new HeatmapLayer({\n id: props.id,\n data: props.data,\n getPosition: props.getPosition,\n getWeight: props.getWeight ?? 1,\n intensity: props.intensity,\n radiusPixels: props.radiusPixels,\n colorRange: props.colorRange,\n threshold: props.threshold,\n colorDomain: props.colorDomain,\n aggregation: props.aggregation,\n weightsTextureSize: props.weightsTextureSize,\n debounceTimeout: props.debounceTimeout,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as unknown as ConstructorParameters<typeof HeatmapLayer>[0]);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getPosition,\n props.getWeight,\n props.intensity,\n props.radiusPixels,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { HexagonLayer } from '@deck.gl/aggregation-layers';\n import type { PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n import type { Color } from '../_shared/types';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPosition: Accessor<D, Position>;\n getColorWeight?: Accessor<D, number>;\n getElevationWeight?: Accessor<D, number>;\n gpuAggregation?: boolean;\n radius?: number;\n elevationScale?: number;\n elevationRange?: [number, number];\n colorRange?: Color[];\n colorDomain?: [number, number];\n coverage?: number;\n extruded?: boolean;\n upperPercentile?: number;\n lowerPercentile?: number;\n elevationUpperPercentile?: number;\n elevationLowerPercentile?: number;\n colorScaleType?: 'quantize' | 'linear' | 'quantile' | 'ordinal';\n material?: boolean | object;\n colorAggregation?: 'SUM' | 'MEAN' | 'MIN' | 'MAX' | 'COUNT';\n elevationAggregation?: 'SUM' | 'MEAN' | 'MIN' | 'MAX' | 'COUNT';\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n gpuAggregation: false,\n radius: 1000,\n elevationScale: 1,\n coverage: 1,\n extruded: false,\n upperPercentile: 100,\n lowerPercentile: 0,\n elevationUpperPercentile: 100,\n elevationLowerPercentile: 0,\n colorScaleType: 'quantize',\n colorAggregation: 'SUM',\n elevationAggregation: 'SUM',\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new HexagonLayer({\n id: props.id,\n data: props.data,\n getPosition: props.getPosition,\n getColorWeight: props.getColorWeight,\n getElevationWeight: props.getElevationWeight,\n gpuAggregation: props.gpuAggregation,\n radius: props.radius,\n elevationScale: props.elevationScale,\n elevationRange: props.elevationRange,\n colorRange: props.colorRange,\n colorDomain: props.colorDomain,\n coverage: props.coverage,\n extruded: props.extruded,\n upperPercentile: props.upperPercentile,\n lowerPercentile: props.lowerPercentile,\n elevationUpperPercentile: props.elevationUpperPercentile,\n elevationLowerPercentile: props.elevationLowerPercentile,\n colorScaleType: props.colorScaleType,\n material: props.material,\n colorAggregation: props.colorAggregation,\n elevationAggregation: props.elevationAggregation,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as unknown as ConstructorParameters<typeof HexagonLayer>[0]);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getPosition,\n props.radius,\n props.elevationScale,\n props.opacity,\n props.visible,\n props.extruded,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { GridLayer } from '@deck.gl/aggregation-layers';\n import type { Color, PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPosition: Accessor<D, Position>;\n getColorWeight?: Accessor<D, number>;\n getElevationWeight?: Accessor<D, number>;\n cellSize?: number;\n colorRange?: Color[];\n coverage?: number;\n elevationDomain?: [number, number];\n elevationRange?: [number, number];\n elevationScale?: number;\n extruded?: boolean;\n upperPercentile?: number;\n lowerPercentile?: number;\n elevationUpperPercentile?: number;\n elevationLowerPercentile?: number;\n colorScaleType?: 'quantize' | 'linear' | 'quantile' | 'ordinal';\n colorAggregation?: 'SUM' | 'MEAN' | 'MIN' | 'MAX';\n elevationAggregation?: 'SUM' | 'MEAN' | 'MIN' | 'MAX';\n gpuAggregation?: boolean;\n material?: boolean | object;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n cellSize: 1000,\n coverage: 1,\n elevationScale: 1,\n extruded: false,\n upperPercentile: 100,\n lowerPercentile: 0,\n elevationUpperPercentile: 100,\n elevationLowerPercentile: 0,\n colorScaleType: 'quantize',\n colorAggregation: 'SUM',\n elevationAggregation: 'SUM',\n gpuAggregation: false,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new GridLayer({\n id: props.id,\n data: props.data,\n getPosition: props.getPosition,\n getColorWeight: props.getColorWeight ?? 1,\n getElevationWeight: props.getElevationWeight ?? 1,\n cellSize: props.cellSize,\n colorRange: props.colorRange,\n coverage: props.coverage,\n elevationDomain: props.elevationDomain,\n elevationRange: props.elevationRange,\n elevationScale: props.elevationScale,\n extruded: props.extruded,\n upperPercentile: props.upperPercentile,\n lowerPercentile: props.lowerPercentile,\n elevationUpperPercentile: props.elevationUpperPercentile,\n elevationLowerPercentile: props.elevationLowerPercentile,\n colorScaleType: props.colorScaleType,\n colorAggregation: props.colorAggregation,\n elevationAggregation: props.elevationAggregation,\n gpuAggregation: props.gpuAggregation,\n material: props.material,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as unknown as ConstructorParameters<typeof GridLayer>[0]);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getPosition,\n props.cellSize,\n props.colorRange,\n props.elevationScale,\n props.extruded,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { ContourLayer } from '@deck.gl/aggregation-layers';\n import type { Color, PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface ContourDefinition {\n threshold: number | [number, number];\n color?: Color;\n strokeWidth?: number;\n zIndex?: number;\n }\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPosition: Accessor<D, Position>;\n getWeight?: Accessor<D, number>;\n cellSize?: number;\n contours: ContourDefinition[];\n gpuAggregation?: boolean;\n aggregation?: 'SUM' | 'MEAN' | 'MIN' | 'MAX';\n zOffset?: number;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n cellSize: 1000,\n gpuAggregation: false,\n aggregation: 'SUM',\n zOffset: 0.005,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new ContourLayer({\n id: props.id,\n data: props.data,\n getPosition: props.getPosition,\n getWeight: props.getWeight ?? 1,\n cellSize: props.cellSize,\n contours: props.contours,\n gpuAggregation: props.gpuAggregation,\n aggregation: props.aggregation,\n zOffset: props.zOffset,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as unknown as ConstructorParameters<typeof ContourLayer>[0]);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getPosition,\n props.cellSize,\n props.contours,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { ScreenGridLayer } from '@deck.gl/aggregation-layers';\n import type { Color, PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPosition: Accessor<D, Position>;\n getWeight?: Accessor<D, number>;\n cellSizePixels?: number;\n cellMarginPixels?: number;\n colorRange?: Color[];\n colorDomain?: [number, number];\n gpuAggregation?: boolean;\n aggregation?: 'SUM' | 'MEAN' | 'MIN' | 'MAX';\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n cellSizePixels: 100,\n cellMarginPixels: 2,\n gpuAggregation: false,\n aggregation: 'SUM',\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new ScreenGridLayer({\n id: props.id,\n data: props.data,\n getPosition: props.getPosition,\n getWeight: props.getWeight ?? 1,\n cellSizePixels: props.cellSizePixels,\n cellMarginPixels: props.cellMarginPixels,\n colorRange: props.colorRange,\n colorDomain: props.colorDomain,\n gpuAggregation: props.gpuAggregation,\n aggregation: props.aggregation,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as unknown as ConstructorParameters<typeof ScreenGridLayer>[0]);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getPosition,\n props.cellSizePixels,\n props.colorRange,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { TripsLayer } from '@deck.gl/geo-layers';\n import type { TripsLayerProps } from '@deck.gl/geo-layers';\n import type { PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n import type { Color } from '../_shared/types';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPath: Accessor<D, Position[]>;\n getTimestamps?: Accessor<D, number[]>;\n getColor?: Accessor<D, Color>;\n getWidth?: Accessor<D, number>;\n currentTime?: number;\n trailLength?: number;\n fadeTrail?: boolean;\n widthUnits?: 'meters' | 'common' | 'pixels';\n widthScale?: number;\n widthMinPixels?: number;\n widthMaxPixels?: number;\n capRounded?: boolean;\n jointRounded?: boolean;\n billboard?: boolean;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n currentTime: 0,\n trailLength: 120,\n fadeTrail: true,\n widthUnits: 'pixels',\n widthScale: 1,\n widthMinPixels: 0,\n widthMaxPixels: Number.MAX_SAFE_INTEGER,\n capRounded: false,\n jointRounded: false,\n billboard: false,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new TripsLayer({\n id: props.id,\n data: props.data,\n getPath: props.getPath,\n getTimestamps: props.getTimestamps,\n getColor: props.getColor ?? [253, 128, 93],\n getWidth: props.getWidth ?? 1,\n currentTime: props.currentTime,\n trailLength: props.trailLength,\n fadeTrail: props.fadeTrail,\n widthUnits: props.widthUnits,\n widthScale: props.widthScale,\n widthMinPixels: props.widthMinPixels,\n widthMaxPixels: props.widthMaxPixels,\n capRounded: props.capRounded,\n jointRounded: props.jointRounded,\n billboard: props.billboard,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as TripsLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getPath,\n props.currentTime,\n props.trailLength,\n props.getColor,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { H3HexagonLayer } from '@deck.gl/geo-layers';\n import type { H3HexagonLayerProps } from '@deck.gl/geo-layers';\n import type { Color, PickingInfo } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getHexagon: Accessor<D, string>;\n getFillColor?: Accessor<D, Color>;\n getLineColor?: Accessor<D, Color>;\n getElevation?: Accessor<D, number>;\n highPrecision?: boolean | 'auto';\n coverage?: number;\n elevationScale?: number;\n filled?: boolean;\n stroked?: boolean;\n extruded?: boolean;\n wireframe?: boolean;\n lineWidthUnits?: 'meters' | 'common' | 'pixels';\n lineWidthScale?: number;\n lineWidthMinPixels?: number;\n lineWidthMaxPixels?: number;\n material?: boolean | object;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n highPrecision: 'auto',\n coverage: 1,\n elevationScale: 1,\n filled: true,\n stroked: true,\n extruded: false,\n wireframe: false,\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new H3HexagonLayer({\n id: props.id,\n data: props.data,\n getHexagon: props.getHexagon,\n getFillColor: props.getFillColor ?? [255, 0, 0, 255],\n getLineColor: props.getLineColor ?? [0, 0, 0, 255],\n getElevation: props.getElevation ?? 1000,\n highPrecision: props.highPrecision,\n coverage: props.coverage,\n elevationScale: props.elevationScale,\n filled: props.filled,\n stroked: props.stroked,\n extruded: props.extruded,\n wireframe: props.wireframe,\n lineWidthUnits: props.lineWidthUnits,\n lineWidthScale: props.lineWidthScale,\n lineWidthMinPixels: props.lineWidthMinPixels,\n lineWidthMaxPixels: props.lineWidthMaxPixels,\n material: props.material,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as H3HexagonLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getHexagon,\n props.getFillColor,\n props.getElevation,\n props.extruded,\n props.elevationScale,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { H3ClusterLayer } from '@deck.gl/geo-layers';\n import type { H3ClusterLayerProps } from '@deck.gl/geo-layers';\n import type { Color, PickingInfo } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getHexagons: Accessor<D, string[]>;\n getFillColor?: Accessor<D, Color>;\n getLineColor?: Accessor<D, Color>;\n getElevation?: Accessor<D, number>;\n filled?: boolean;\n stroked?: boolean;\n extruded?: boolean;\n wireframe?: boolean;\n elevationScale?: number;\n lineWidthUnits?: 'meters' | 'common' | 'pixels';\n lineWidthScale?: number;\n lineWidthMinPixels?: number;\n lineWidthMaxPixels?: number;\n material?: boolean | object;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n filled: true,\n stroked: true,\n extruded: false,\n wireframe: false,\n elevationScale: 1,\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new H3ClusterLayer({\n id: props.id,\n data: props.data,\n getHexagons: props.getHexagons,\n getFillColor: props.getFillColor ?? [255, 0, 0, 255],\n getLineColor: props.getLineColor ?? [0, 0, 0, 255],\n getElevation: props.getElevation ?? 1000,\n filled: props.filled,\n stroked: props.stroked,\n extruded: props.extruded,\n wireframe: props.wireframe,\n elevationScale: props.elevationScale,\n lineWidthUnits: props.lineWidthUnits,\n lineWidthScale: props.lineWidthScale,\n lineWidthMinPixels: props.lineWidthMinPixels,\n lineWidthMaxPixels: props.lineWidthMaxPixels,\n material: props.material,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as H3ClusterLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getHexagons,\n props.getFillColor,\n props.getElevation,\n props.extruded,\n props.elevationScale,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { MVTLayer } from '@deck.gl/geo-layers';\n import type { Color, PickingInfo } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: string | string[];\n minZoom?: number;\n maxZoom?: number;\n uniqueIdProperty?: string;\n highlightedFeatureId?: string | number;\n binary?: boolean;\n loadOptions?: object;\n // Sublayer props\n getFillColor?: Accessor<D, Color>;\n getLineColor?: Accessor<D, Color>;\n getLineWidth?: Accessor<D, number>;\n getPointRadius?: Accessor<D, number>;\n getElevation?: Accessor<D, number>;\n lineWidthUnits?: 'meters' | 'common' | 'pixels';\n lineWidthScale?: number;\n lineWidthMinPixels?: number;\n lineWidthMaxPixels?: number;\n pointRadiusUnits?: 'meters' | 'common' | 'pixels';\n pointRadiusScale?: number;\n pointRadiusMinPixels?: number;\n pointRadiusMaxPixels?: number;\n stroked?: boolean;\n filled?: boolean;\n extruded?: boolean;\n wireframe?: boolean;\n elevationScale?: number;\n pointType?: string;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n minZoom: 0,\n maxZoom: 23,\n binary: true,\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n pointRadiusUnits: 'meters',\n pointRadiusScale: 1,\n pointRadiusMinPixels: 0,\n pointRadiusMaxPixels: Number.MAX_SAFE_INTEGER,\n stroked: true,\n filled: true,\n extruded: false,\n wireframe: false,\n elevationScale: 1,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n tileLoad: [tile: unknown];\n tileError: [error: Error, tile: unknown];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new MVTLayer({\n id: props.id,\n data: props.data,\n minZoom: props.minZoom,\n maxZoom: props.maxZoom,\n uniqueIdProperty: props.uniqueIdProperty,\n highlightedFeatureId: props.highlightedFeatureId,\n binary: props.binary,\n loadOptions: props.loadOptions,\n getFillColor: props.getFillColor ?? [255, 0, 0, 255],\n getLineColor: props.getLineColor ?? [0, 0, 0, 255],\n getLineWidth: props.getLineWidth ?? 1,\n getPointRadius: props.getPointRadius ?? 1,\n getElevation: props.getElevation ?? 1000,\n lineWidthUnits: props.lineWidthUnits,\n lineWidthScale: props.lineWidthScale,\n lineWidthMinPixels: props.lineWidthMinPixels,\n lineWidthMaxPixels: props.lineWidthMaxPixels,\n pointRadiusUnits: props.pointRadiusUnits,\n pointRadiusScale: props.pointRadiusScale,\n pointRadiusMinPixels: props.pointRadiusMinPixels,\n pointRadiusMaxPixels: props.pointRadiusMaxPixels,\n stroked: props.stroked,\n filled: props.filled,\n extruded: props.extruded,\n wireframe: props.wireframe,\n elevationScale: props.elevationScale,\n pointType: props.pointType,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n onTileLoad: (tile: unknown) => emit('tileLoad', tile),\n onTileError: (error: Error, tile: unknown) =>\n emit('tileError', error, tile),\n } as unknown as ConstructorParameters<typeof MVTLayer>[0]);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getFillColor,\n props.getLineColor,\n props.highlightedFeatureId,\n props.extruded,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { TileLayer } from '@deck.gl/geo-layers';\n import type { TileLayerProps } from '@deck.gl/geo-layers';\n import type { Color, PickingInfo, Layer } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n interface TileData {\n x: number;\n y: number;\n z: number;\n url: string;\n signal: AbortSignal;\n bbox: {\n west: number;\n north: number;\n east: number;\n south: number;\n };\n }\n\n interface Props {\n id: string;\n data?: string | string[] | ((tileData: TileData) => Promise<unknown>);\n getTileData?: (tileData: TileData) => Promise<unknown>;\n renderSubLayers?: (props: object) => Layer | Layer[] | null;\n tileSize?: number;\n maxZoom?: number;\n minZoom?: number;\n maxCacheSize?: number;\n maxCacheByteSize?: number;\n refinementStrategy?: 'best-available' | 'no-overlap' | 'never';\n zRange?: [number, number];\n maxRequests?: number;\n extent?: [number, number, number, number];\n loadOptions?: object;\n zoomOffset?: number;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n tileSize: 512,\n minZoom: 0,\n refinementStrategy: 'best-available',\n maxRequests: 6,\n zoomOffset: 0,\n opacity: 1,\n visible: true,\n pickable: false,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n viewportLoad: [tiles: unknown[]];\n tileLoad: [tile: unknown];\n tileUnload: [tile: unknown];\n tileError: [error: Error, tile: unknown];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new TileLayer({\n id: props.id,\n data: props.data,\n getTileData: props.getTileData,\n renderSubLayers: props.renderSubLayers,\n tileSize: props.tileSize,\n maxZoom: props.maxZoom,\n minZoom: props.minZoom,\n maxCacheSize: props.maxCacheSize,\n maxCacheByteSize: props.maxCacheByteSize,\n refinementStrategy: props.refinementStrategy,\n zRange: props.zRange,\n maxRequests: props.maxRequests,\n extent: props.extent,\n loadOptions: props.loadOptions,\n zoomOffset: props.zoomOffset,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n onViewportLoad: (tiles: unknown[]) => emit('viewportLoad', tiles),\n onTileLoad: (tile: unknown) => emit('tileLoad', tile),\n onTileUnload: (tile: unknown) => emit('tileUnload', tile),\n onTileError: (error: Error, tile: unknown) =>\n emit('tileError', error, tile),\n } as TileLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.tileSize,\n props.maxZoom,\n props.minZoom,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { Tile3DLayer } from '@deck.gl/geo-layers';\n import type { Color, PickingInfo } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n interface Props {\n id: string;\n data: string;\n loader?: object;\n loadOptions?: object;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n opacity?: number;\n visible?: boolean;\n pointSize?: number;\n getPointColor?: Color | ((d: unknown) => Color);\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n pointSize: 1,\n opacity: 1,\n visible: true,\n pickable: false,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n tilesetLoad: [tileset: unknown];\n tileLoad: [tile: unknown];\n tileUnload: [tile: unknown];\n tileError: [error: Error, url: string, tile: unknown];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n const layerProps = {\n id: props.id,\n data: props.data,\n pointSize: props.pointSize,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n onTilesetLoad: (tileset: unknown) => emit('tilesetLoad', tileset),\n onTileLoad: (tile: unknown) => emit('tileLoad', tile),\n onTileUnload: (tile: unknown) => emit('tileUnload', tile),\n onTileError: (error: Error, url: string, tile: unknown) =>\n emit('tileError', error, url, tile),\n // Only include optional props when defined to avoid deck.gl bugs\n ...(props.loader !== undefined && { loader: props.loader }),\n ...(props.loadOptions !== undefined && {\n loadOptions: props.loadOptions,\n }),\n ...(props.highlightColor !== undefined && {\n highlightColor: props.highlightColor,\n }),\n ...(props.getPointColor !== undefined && {\n getPointColor: props.getPointColor,\n }),\n };\n return new Tile3DLayer(\n layerProps as unknown as ConstructorParameters<typeof Tile3DLayer>[0],\n );\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [props.data, props.pointSize, props.opacity, props.visible],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { TerrainLayer } from '@deck.gl/geo-layers';\n import type { Color, PickingInfo } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n interface Props {\n id: string;\n elevationData:\n | string\n | ((tileData: { x: number; y: number; z: number }) => string);\n texture?:\n | string\n | ((tileData: { x: number; y: number; z: number }) => string);\n meshMaxError?: number;\n elevationDecoder?: {\n rScaler: number;\n gScaler: number;\n bScaler: number;\n offset: number;\n };\n bounds?: [number, number, number, number];\n loadOptions?: object;\n workerUrl?: string;\n color?: Color;\n wireframe?: boolean;\n material?: boolean | object;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n meshMaxError: 4.0,\n wireframe: false,\n opacity: 1,\n visible: true,\n pickable: false,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new TerrainLayer({\n id: props.id,\n elevationData: props.elevationData,\n texture: props.texture,\n meshMaxError: props.meshMaxError,\n elevationDecoder: props.elevationDecoder,\n bounds: props.bounds,\n loadOptions: props.loadOptions,\n workerUrl: props.workerUrl,\n color: props.color ?? [255, 255, 255],\n wireframe: props.wireframe,\n material: props.material,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as unknown as ConstructorParameters<typeof TerrainLayer>[0]);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.elevationData,\n props.texture,\n props.meshMaxError,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { GreatCircleLayer } from '@deck.gl/geo-layers';\n import type { GreatCircleLayerProps } from '@deck.gl/geo-layers';\n import type { Color, PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getSourcePosition: Accessor<D, Position>;\n getTargetPosition: Accessor<D, Position>;\n getSourceColor?: Accessor<D, Color>;\n getTargetColor?: Accessor<D, Color>;\n getWidth?: Accessor<D, number>;\n getHeight?: Accessor<D, number>;\n getTilt?: Accessor<D, number>;\n numSegments?: number;\n widthUnits?: 'meters' | 'common' | 'pixels';\n widthScale?: number;\n widthMinPixels?: number;\n widthMaxPixels?: number;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n numSegments: 50,\n widthUnits: 'pixels',\n widthScale: 1,\n widthMinPixels: 0,\n widthMaxPixels: Number.MAX_SAFE_INTEGER,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new GreatCircleLayer({\n id: props.id,\n data: props.data,\n getSourcePosition: props.getSourcePosition,\n getTargetPosition: props.getTargetPosition,\n getSourceColor: props.getSourceColor ?? [0, 0, 255],\n getTargetColor: props.getTargetColor ?? [0, 255, 0],\n getWidth: props.getWidth ?? 1,\n getHeight: props.getHeight ?? 1,\n getTilt: props.getTilt ?? 0,\n numSegments: props.numSegments,\n widthUnits: props.widthUnits,\n widthScale: props.widthScale,\n widthMinPixels: props.widthMinPixels,\n widthMaxPixels: props.widthMaxPixels,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as GreatCircleLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getSourcePosition,\n props.getTargetPosition,\n props.getSourceColor,\n props.getTargetColor,\n props.getWidth,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { S2Layer } from '@deck.gl/geo-layers';\n import type { S2LayerProps } from '@deck.gl/geo-layers';\n import type { Color, PickingInfo } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getS2Token: Accessor<D, string>;\n getFillColor?: Accessor<D, Color>;\n getLineColor?: Accessor<D, Color>;\n getElevation?: Accessor<D, number>;\n filled?: boolean;\n stroked?: boolean;\n extruded?: boolean;\n wireframe?: boolean;\n elevationScale?: number;\n lineWidthUnits?: 'meters' | 'common' | 'pixels';\n lineWidthScale?: number;\n lineWidthMinPixels?: number;\n lineWidthMaxPixels?: number;\n material?: boolean | object;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n filled: true,\n stroked: true,\n extruded: false,\n wireframe: false,\n elevationScale: 1,\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new S2Layer({\n id: props.id,\n data: props.data,\n getS2Token: props.getS2Token,\n getFillColor: props.getFillColor ?? [255, 0, 0, 255],\n getLineColor: props.getLineColor ?? [0, 0, 0, 255],\n getElevation: props.getElevation ?? 1000,\n filled: props.filled,\n stroked: props.stroked,\n extruded: props.extruded,\n wireframe: props.wireframe,\n elevationScale: props.elevationScale,\n lineWidthUnits: props.lineWidthUnits,\n lineWidthScale: props.lineWidthScale,\n lineWidthMinPixels: props.lineWidthMinPixels,\n lineWidthMaxPixels: props.lineWidthMaxPixels,\n material: props.material,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as S2LayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getS2Token,\n props.getFillColor,\n props.getElevation,\n props.extruded,\n props.elevationScale,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { GeohashLayer } from '@deck.gl/geo-layers';\n import type { GeohashLayerProps } from '@deck.gl/geo-layers';\n import type { Color, PickingInfo } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getGeohash: Accessor<D, string>;\n getFillColor?: Accessor<D, Color>;\n getLineColor?: Accessor<D, Color>;\n getElevation?: Accessor<D, number>;\n filled?: boolean;\n stroked?: boolean;\n extruded?: boolean;\n wireframe?: boolean;\n elevationScale?: number;\n lineWidthUnits?: 'meters' | 'common' | 'pixels';\n lineWidthScale?: number;\n lineWidthMinPixels?: number;\n lineWidthMaxPixels?: number;\n material?: boolean | object;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n filled: true,\n stroked: true,\n extruded: false,\n wireframe: false,\n elevationScale: 1,\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new GeohashLayer({\n id: props.id,\n data: props.data,\n getGeohash: props.getGeohash,\n getFillColor: props.getFillColor ?? [255, 0, 0, 255],\n getLineColor: props.getLineColor ?? [0, 0, 0, 255],\n getElevation: props.getElevation ?? 1000,\n filled: props.filled,\n stroked: props.stroked,\n extruded: props.extruded,\n wireframe: props.wireframe,\n elevationScale: props.elevationScale,\n lineWidthUnits: props.lineWidthUnits,\n lineWidthScale: props.lineWidthScale,\n lineWidthMinPixels: props.lineWidthMinPixels,\n lineWidthMaxPixels: props.lineWidthMaxPixels,\n material: props.material,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as GeohashLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getGeohash,\n props.getFillColor,\n props.getElevation,\n props.extruded,\n props.elevationScale,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { QuadkeyLayer } from '@deck.gl/geo-layers';\n import type { QuadkeyLayerProps } from '@deck.gl/geo-layers';\n import type { Color, PickingInfo } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getQuadkey: Accessor<D, string>;\n getFillColor?: Accessor<D, Color>;\n getLineColor?: Accessor<D, Color>;\n getElevation?: Accessor<D, number>;\n filled?: boolean;\n stroked?: boolean;\n extruded?: boolean;\n wireframe?: boolean;\n elevationScale?: number;\n lineWidthUnits?: 'meters' | 'common' | 'pixels';\n lineWidthScale?: number;\n lineWidthMinPixels?: number;\n lineWidthMaxPixels?: number;\n material?: boolean | object;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n filled: true,\n stroked: true,\n extruded: false,\n wireframe: false,\n elevationScale: 1,\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new QuadkeyLayer({\n id: props.id,\n data: props.data,\n getQuadkey: props.getQuadkey,\n getFillColor: props.getFillColor ?? [255, 0, 0, 255],\n getLineColor: props.getLineColor ?? [0, 0, 0, 255],\n getElevation: props.getElevation ?? 1000,\n filled: props.filled,\n stroked: props.stroked,\n extruded: props.extruded,\n wireframe: props.wireframe,\n elevationScale: props.elevationScale,\n lineWidthUnits: props.lineWidthUnits,\n lineWidthScale: props.lineWidthScale,\n lineWidthMinPixels: props.lineWidthMinPixels,\n lineWidthMaxPixels: props.lineWidthMaxPixels,\n material: props.material,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as QuadkeyLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getQuadkey,\n props.getFillColor,\n props.getElevation,\n props.extruded,\n props.elevationScale,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { _WMSLayer as WMSLayer } from '@deck.gl/geo-layers';\n import type { WMSLayerProps } from '@deck.gl/geo-layers';\n import type { Color, PickingInfo } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n interface Props {\n id: string;\n data: string;\n serviceType?: 'wms' | 'template';\n layers?: string[];\n srs?: string;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n serviceType: 'wms',\n srs: 'EPSG:4326',\n opacity: 1,\n visible: true,\n pickable: false,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new WMSLayer({\n id: props.id,\n data: props.data,\n serviceType: props.serviceType,\n layers: props.layers,\n srs: props.srs,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as WMSLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [props.data, props.layers, props.srs, props.opacity, props.visible],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { SimpleMeshLayer } from '@deck.gl/mesh-layers';\n import type { SimpleMeshLayerProps } from '@deck.gl/mesh-layers';\n import type { Color, PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n mesh: string | object;\n getPosition: Accessor<D, Position>;\n getColor?: Accessor<D, Color>;\n getOrientation?: Accessor<D, [number, number, number]>;\n getScale?: Accessor<D, [number, number, number] | number>;\n getTranslation?: Accessor<D, [number, number, number]>;\n getTransformMatrix?: Accessor<D, number[]>;\n texture?: string | object;\n sizeScale?: number;\n wireframe?: boolean;\n material?: boolean | object;\n loaders?: object[];\n loadOptions?: object;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n sizeScale: 1,\n wireframe: false,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n // Build layer props object, excluding undefined optional props to avoid deck.gl bugs\n // where it tries to call undefined as a function (e.g., getTransformMatrix)\n const layerProps = {\n id: props.id,\n data: props.data,\n mesh: props.mesh,\n getPosition: props.getPosition,\n getColor: props.getColor ?? [255, 255, 255, 255],\n getOrientation: props.getOrientation ?? [0, 0, 0],\n getScale: props.getScale ?? [1, 1, 1],\n getTranslation: props.getTranslation ?? [0, 0, 0],\n sizeScale: props.sizeScale,\n wireframe: props.wireframe,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n // Only include optional props if defined\n ...(props.getTransformMatrix !== undefined && {\n getTransformMatrix: props.getTransformMatrix,\n }),\n ...(props.texture !== undefined && { texture: props.texture }),\n ...(props.material !== undefined && { material: props.material }),\n ...(props.loaders !== undefined && { loaders: props.loaders }),\n ...(props.loadOptions !== undefined && {\n loadOptions: props.loadOptions,\n }),\n ...(props.highlightColor !== undefined && {\n highlightColor: props.highlightColor,\n }),\n ...(props.beforeId !== undefined && { beforeId: props.beforeId }),\n };\n\n return new SimpleMeshLayer(layerProps as SimpleMeshLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.mesh,\n props.getPosition,\n props.getColor,\n props.getOrientation,\n props.getScale,\n props.sizeScale,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { ScenegraphLayer } from '@deck.gl/mesh-layers';\n import type { ScenegraphLayerProps } from '@deck.gl/mesh-layers';\n import type { Color, PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n scenegraph: string | object;\n getPosition: Accessor<D, Position>;\n getColor?: Accessor<D, Color>;\n getOrientation?: Accessor<D, [number, number, number]>;\n getScale?: Accessor<D, [number, number, number] | number>;\n getTranslation?: Accessor<D, [number, number, number]>;\n getTransformMatrix?: Accessor<D, number[]>;\n sizeScale?: number;\n sizeMinPixels?: number;\n sizeMaxPixels?: number;\n animator?: object;\n loaders?: object[];\n loadOptions?: object;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n // Animation and lighting options\n _animations?: Record<\n string,\n { playing?: boolean; speed?: number; startTime?: number }\n >;\n _lighting?: 'flat' | 'pbr';\n }\n\n const props = withDefaults(defineProps<Props>(), {\n sizeScale: 1,\n sizeMinPixels: 0,\n sizeMaxPixels: Number.MAX_SAFE_INTEGER,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n // Build layer props object, excluding undefined optional props to avoid deck.gl bugs\n // where it tries to call undefined as a function (e.g., getTransformMatrix)\n const layerProps = {\n id: props.id,\n data: props.data,\n scenegraph: props.scenegraph,\n getPosition: props.getPosition,\n getColor: props.getColor ?? [255, 255, 255, 255],\n getOrientation: props.getOrientation ?? [0, 0, 0],\n getScale: props.getScale ?? [1, 1, 1],\n getTranslation: props.getTranslation ?? [0, 0, 0],\n sizeScale: props.sizeScale,\n sizeMinPixels: props.sizeMinPixels,\n sizeMaxPixels: props.sizeMaxPixels,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n // Only include optional props if defined\n ...(props.getTransformMatrix !== undefined && {\n getTransformMatrix: props.getTransformMatrix,\n }),\n ...(props.animator !== undefined && { animator: props.animator }),\n ...(props.loaders !== undefined && { loaders: props.loaders }),\n ...(props.loadOptions !== undefined && {\n loadOptions: props.loadOptions,\n }),\n ...(props.highlightColor !== undefined && {\n highlightColor: props.highlightColor,\n }),\n ...(props.beforeId !== undefined && { beforeId: props.beforeId }),\n ...(props._animations !== undefined && {\n _animations: props._animations,\n }),\n ...(props._lighting !== undefined && { _lighting: props._lighting }),\n };\n\n return new ScenegraphLayer(layerProps as ScenegraphLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.scenegraph,\n props.getPosition,\n props.getColor,\n props.getOrientation,\n props.getScale,\n props.sizeScale,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import {\n onMounted,\n onBeforeUnmount,\n watch,\n shallowRef,\n toRaw,\n markRaw,\n } from 'vue';\n import type { Color, PickingInfo } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n interface Props {\n id: string;\n /**\n * GeoTIFF source - URL string, ArrayBuffer, Blob, or geotiff.js instance\n */\n geotiff: string | ArrayBuffer | Blob | object;\n /**\n * Tile size in pixels\n */\n tileSize?: number;\n /**\n * Maximum zoom level\n */\n maxZoom?: number;\n /**\n * Minimum zoom level\n */\n minZoom?: number;\n /**\n * Maximum number of tiles to cache\n */\n maxCacheSize?: number;\n /**\n * Refinement strategy for tile loading\n */\n refinementStrategy?: 'best-available' | 'no-overlap' | 'never';\n /**\n * Maximum concurrent requests\n */\n maxRequests?: number;\n /**\n * Layer opacity (0-1)\n */\n opacity?: number;\n /**\n * Layer visibility\n */\n visible?: boolean;\n /**\n * Enable picking on this layer\n */\n pickable?: boolean;\n /**\n * Auto highlight on hover\n */\n autoHighlight?: boolean;\n /**\n * Highlight color when autoHighlight is enabled\n */\n highlightColor?: Color;\n /**\n * Insert layer before this layer id\n */\n beforeId?: string;\n /**\n * Show debug overlay on tiles\n */\n debug?: boolean;\n /**\n * Opacity of debug overlay (0-1)\n */\n debugOpacity?: number;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n tileSize: 256,\n minZoom: 0,\n refinementStrategy: 'best-available',\n maxRequests: 6,\n opacity: 1,\n visible: true,\n pickable: false,\n autoHighlight: false,\n debug: false,\n debugOpacity: 0.25,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n geotiffLoad: [\n tiff: unknown,\n options: {\n geographicBounds: {\n west: number;\n south: number;\n east: number;\n north: number;\n };\n },\n ];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n // Store module references\n const COGLayerClass = shallowRef<\n typeof import('@developmentseed/deck.gl-geotiff').COGLayer | null\n >(null);\n const projModule = shallowRef<\n typeof import('@developmentseed/deck.gl-geotiff').proj | null\n >(null);\n const toProj4Fn = shallowRef<\n typeof import('geotiff-geokeys-to-proj4').toProj4 | null\n >(null);\n\n // Create geoKeysParser using geotiff-geokeys-to-proj4 (like official example)\n const createGeoKeysParser = () => {\n if (!projModule.value || !toProj4Fn.value) return undefined;\n\n const proj = projModule.value;\n const toProj4 = toProj4Fn.value;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return async (geoKeys: any) => {\n const projDefinition = toProj4(geoKeys);\n return {\n def: projDefinition.proj4,\n parsed: proj.parseCrs(projDefinition.proj4),\n coordinatesUnits: projDefinition.coordinatesUnits as 'degree' | 'metre',\n };\n };\n };\n\n const createLayer = () => {\n if (!COGLayerClass.value) return null;\n\n const geoKeysParser = createGeoKeysParser();\n\n // Use toRaw() to unwrap Vue reactive proxies - required for web worker serialization\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const layerProps: Record<string, any> = {\n id: toRaw(props.id),\n geotiff: toRaw(props.geotiff),\n opacity: toRaw(props.opacity),\n visible: toRaw(props.visible),\n pickable: toRaw(props.pickable),\n autoHighlight: toRaw(props.autoHighlight),\n debug: toRaw(props.debug),\n debugOpacity: toRaw(props.debugOpacity),\n };\n\n if (geoKeysParser) {\n layerProps.geoKeysParser = geoKeysParser;\n }\n\n layerProps.onGeoTIFFLoad = (\n tiff: unknown,\n options: {\n geographicBounds: {\n west: number;\n south: number;\n east: number;\n north: number;\n };\n },\n ) => {\n emit('geotiffLoad', tiff, options);\n };\n\n if (props.tileSize !== 256) layerProps.tileSize = toRaw(props.tileSize);\n if (props.maxZoom !== undefined) layerProps.maxZoom = toRaw(props.maxZoom);\n if (props.minZoom !== 0) layerProps.minZoom = toRaw(props.minZoom);\n if (props.maxCacheSize !== undefined)\n layerProps.maxCacheSize = toRaw(props.maxCacheSize);\n if (props.refinementStrategy !== 'best-available')\n layerProps.refinementStrategy = toRaw(props.refinementStrategy);\n if (props.maxRequests !== 6)\n layerProps.maxRequests = toRaw(props.maxRequests);\n if (props.highlightColor !== undefined)\n layerProps.highlightColor = toRaw(props.highlightColor);\n if (props.beforeId !== undefined)\n layerProps.beforeId = toRaw(props.beforeId);\n\n const layer = new COGLayerClass.value(layerProps);\n return markRaw(layer);\n };\n\n const initializeLayer = async () => {\n try {\n const [geotiffModule, proj4Module] = await Promise.all([\n import('@developmentseed/deck.gl-geotiff'),\n import('geotiff-geokeys-to-proj4'),\n ]);\n\n COGLayerClass.value = markRaw(geotiffModule.COGLayer);\n projModule.value = markRaw(geotiffModule.proj);\n toProj4Fn.value = markRaw(proj4Module.toProj4);\n\n const layer = createLayer();\n if (layer) {\n addLayer(layer);\n }\n } catch (error) {\n console.error('[deck.gl-raster] Error loading COGLayer:', error);\n console.error(\n 'Make sure @developmentseed/deck.gl-geotiff and geotiff-geokeys-to-proj4 are installed',\n );\n }\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.geotiff,\n props.tileSize,\n props.maxZoom,\n props.minZoom,\n props.opacity,\n props.visible,\n props.debug,\n props.debugOpacity,\n ],\n () => {\n const layer = createLayer();\n if (layer) {\n updateLayer(props.id, layer);\n }\n },\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import type { PickingInfo } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n interface Props {\n layer: unknown;\n }\n\n const props = defineProps<Props>();\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const getLayerId = (layer: unknown): string => {\n return (layer as { id: string }).id;\n };\n\n const initializeLayer = () => {\n addLayer(props.layer);\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => props.layer,\n (newLayer, oldLayer) => {\n const oldId = oldLayer ? getLayerId(oldLayer) : null;\n const newId = getLayerId(newLayer);\n\n if (oldId && oldId !== newId) {\n removeLayer(oldId);\n addLayer(newLayer);\n } else {\n updateLayer(newId, newLayer);\n }\n },\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(getLayerId(props.layer));\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n","<script setup lang=\"ts\">\n import maplibregl, { Map } from 'maplibre-gl';\n import { Protocol } from 'pmtiles';\n import { onMounted, provide, ref, shallowRef } from 'vue';\n import type { MapOptions, MapEventType } from 'maplibre-gl';\n import type { Ref } from 'vue';\n import { mapEvents } from '../constants/events';\n import { MapKey, PMTileProtocolKey } from '../utils/symbols';\n\n const props = withDefaults(\n defineProps<{\n options: MapOptions;\n supportPmtiles?: boolean;\n }>(),\n {\n options: () => ({ container: 'map' }) as MapOptions,\n supportPmtiles: false,\n },\n );\n const emit = defineEmits(['loaded', ...mapEvents]);\n\n if (props.supportPmtiles) {\n const protocol = new Protocol({ metadata: true });\n maplibregl.addProtocol('pmtiles', protocol.tile);\n provide(PMTileProtocolKey, protocol);\n }\n\n const map: Ref<Map | null> = shallowRef(null); // Initialize as null\n const loaded: Ref<boolean> = ref(false);\n const events: Ref<Array<keyof MapEventType>> = ref(mapEvents);\n\n // Provide the map reference immediately\n provide(MapKey, map);\n\n onMounted(() => {\n map.value = new Map(props.options);\n loaded.value = true;\n listenMapEvents();\n });\n\n const listenMapEvents = () => {\n if (!map.value) return;\n\n events.value.forEach((e) => {\n map.value?.on(e, (evt) => {\n switch (e) {\n case 'load':\n emit('loaded', map.value);\n break;\n default:\n emit(e, evt);\n break;\n }\n });\n });\n };\n</script>\n\n<template>\n <div :id=\"`${options?.container}`\" class=\"v-map-container\">\n <slot v-if=\"loaded\">\n <slot></slot>\n </slot>\n </div>\n</template>\n\n<style scoped>\n canvas {\n outline: none;\n }\n\n .v-map-container {\n width: 100%;\n height: 100%;\n }\n</style>\n","<script setup lang=\"ts\">\n import type { Ref } from 'vue';\n import { ref, onMounted, onBeforeUnmount, watch } from 'vue';\n import type { LngLatLike, Marker, PopupOptions, Map } from 'maplibre-gl';\n import { Popup } from 'maplibre-gl';\n import { popupEvents } from '../constants/events';\n import { injectStrict, MapKey } from '../utils';\n\n const props = withDefaults(\n defineProps<{\n options: PopupOptions;\n coordinates: LngLatLike;\n marker?: Marker;\n }>(),\n {\n options: () => ({}) as PopupOptions,\n coordinates: () => ({}) as LngLatLike,\n marker: () => ({}) as Marker,\n },\n );\n\n const emit = defineEmits<{\n (e: 'added', payload: { popup: Popup }): void;\n (e: 'removed' | 'open' | 'close'): void;\n }>();\n\n const map = injectStrict(MapKey);\n const popup = new Popup(props.options);\n const loaded: Ref<boolean> = ref(true);\n const content = ref<HTMLElement | null>(null);\n\n // Helper function to safely get map instance\n const getMapInstance = (): Map | null => {\n return map.value || null;\n };\n\n // Setup functions\n const setupMap = (mapInstance: Map) => {\n if (!mapInstance) return;\n\n mapInstance.on('style.load', () => {\n const styleTimeout = () => {\n if (!mapInstance.isStyleLoaded()) {\n loaded.value = false;\n setTimeout(styleTimeout, 200);\n } else {\n loaded.value = true;\n }\n };\n styleTimeout();\n });\n };\n\n const setPopupContent = (): void => {\n try {\n if (content.value) {\n popup.setDOMContent(content.value);\n }\n } catch (error) {\n console.error('Error setting popup content:', error);\n }\n };\n\n const setPopupCoordinates = (): void => {\n try {\n popup.setLngLat(props.coordinates);\n } catch (error) {\n console.error('Error setting popup coordinates:', error);\n }\n };\n\n const addToMarker = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n if ('setPopup' in props.marker) {\n props.marker.setPopup(popup);\n } else {\n popup.addTo(mapInstance);\n }\n emit('added', { popup });\n } catch (error) {\n console.error('Error adding popup to marker:', error);\n }\n };\n\n const remove = (): void => {\n try {\n popup.remove();\n emit('removed');\n } catch (error) {\n console.error('Error removing popup:', error);\n }\n };\n\n const listenPopupEvents = (): void => {\n try {\n popupEvents.forEach((event) => {\n popup.on(event, () => {\n emit(event);\n });\n });\n } catch (error) {\n console.error('Error setting up popup events:', error);\n }\n };\n\n const removePopupEvents = (): void => {\n try {\n popupEvents.forEach((event) => {\n popup.off(event, () => {\n emit(event);\n });\n });\n } catch (error) {\n console.error('Error removing popup events:', error);\n }\n };\n\n // Watch for map instance changes\n watch(\n map,\n (newMap) => {\n if (newMap) {\n setupMap(newMap);\n }\n },\n { immediate: true },\n );\n\n // Watch for coordinates changes\n watch(\n () => props.coordinates,\n () => {\n setPopupCoordinates();\n },\n { deep: true },\n );\n\n // Lifecycle hooks\n onMounted(() => {\n if (loaded.value) {\n try {\n setPopupContent();\n setPopupCoordinates();\n addToMarker();\n listenPopupEvents();\n } catch (error) {\n console.error('Error initializing popup:', error);\n }\n } else {\n remove();\n removePopupEvents();\n }\n });\n\n onBeforeUnmount(() => {\n remove();\n removePopupEvents();\n });\n</script>\n\n<template>\n <section :id=\"`popup-${Date.now()}`\" ref=\"content\">\n <slot></slot>\n </section>\n</template>\n","<script setup lang=\"ts\">\n import type { Ref } from 'vue';\n import { ref, watch, onMounted, onBeforeUnmount, useSlots } from 'vue';\n import type {\n LngLatLike,\n MarkerOptions,\n PopupOptions,\n Map,\n } from 'maplibre-gl';\n import { Marker } from 'maplibre-gl';\n import VPopup from '../popups/VPopup.vue';\n import { markerDOMEvents, markerMapEvents } from '../constants/events';\n import { injectStrict, MapKey } from '../utils';\n\n const slots = useSlots();\n\n const props = withDefaults(\n defineProps<{\n coordinates: LngLatLike | null;\n options?: MarkerOptions;\n popupOptions?: PopupOptions;\n cursor?: string;\n }>(),\n {\n coordinates: null,\n options: () => ({}),\n popupOptions: () => ({}),\n cursor: 'pointer',\n },\n );\n\n const emit = defineEmits([\n 'added',\n 'update:coordinates',\n 'removed',\n ...markerMapEvents,\n ...markerDOMEvents,\n ]);\n\n const map = injectStrict(MapKey);\n const marker: Ref<Marker | null> = ref(null);\n const loaded = ref(true);\n const isMarkerAvailable = ref(false);\n const slotRef = ref<HTMLElement | null>(null);\n\n // Helper function to safely get map instance\n const getMapInstance = (): Map | null => {\n return map.value || null;\n };\n\n // Setup functions\n const setupMap = (mapInstance: Map) => {\n if (!mapInstance) return;\n\n mapInstance.on('style.load', () => {\n const styleTimeout = () => {\n if (!mapInstance.isStyleLoaded()) {\n loaded.value = false;\n setTimeout(styleTimeout, 200);\n } else {\n loaded.value = true;\n }\n };\n styleTimeout();\n });\n };\n\n const setSlotRef = (el: HTMLElement | Element | null) => {\n if (el instanceof HTMLElement) {\n slotRef.value = el;\n }\n };\n\n const setMarkerCoordinates = (markerInstance: Marker): void => {\n if (props.coordinates !== null) {\n try {\n markerInstance.setLngLat(props.coordinates);\n } catch (error) {\n console.error('Error setting marker coordinates:', error);\n }\n }\n };\n\n const setCursorPointer = (markerInstance: Marker): void => {\n try {\n markerInstance.getElement().style.cursor = props.cursor || 'default';\n } catch (error) {\n console.error('Error setting cursor:', error);\n }\n };\n\n const addToMap = (markerInstance: Marker): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n markerInstance.addTo(mapInstance);\n emit('added', { marker: markerInstance });\n } catch (error) {\n console.error('Error adding marker to map:', error);\n }\n };\n\n const removeFromMap = (markerInstance: Marker): void => {\n try {\n markerInstance.remove();\n emit('removed');\n } catch (error) {\n console.error('Error removing marker from map:', error);\n }\n };\n\n const listenMarkerEvents = (markerInstance: Marker): void => {\n try {\n let coordinates: LngLatLike;\n markerMapEvents.forEach((event: string) => {\n markerInstance.on(event, (e: { target: Marker }) => {\n if (event === 'dragend') {\n if (Array.isArray(props.coordinates)) {\n coordinates = [\n e.target.getLngLat().lng,\n e.target.getLngLat().lat,\n ];\n } else {\n coordinates = e.target.getLngLat();\n }\n emit('update:coordinates', coordinates);\n }\n emit(event, e);\n });\n });\n\n markerDOMEvents.forEach((event: string) => {\n markerInstance.getElement().addEventListener(event, (e) => {\n emit(event, e);\n });\n });\n } catch (error) {\n console.error('Error setting up marker events:', error);\n }\n };\n\n // Watchers\n watch(marker, (markerValue) => {\n isMarkerAvailable.value = markerValue !== null && '_map' in markerValue;\n });\n\n // Watch for map instance changes\n watch(\n map,\n (newMap) => {\n if (newMap) {\n setupMap(newMap);\n }\n },\n { immediate: true },\n );\n\n const initMarker = (element?: HTMLElement) => {\n if (!loaded.value || marker.value) return;\n\n try {\n const markerOptions: MarkerOptions = {\n ...props.options,\n element: element || undefined,\n };\n marker.value = new Marker(markerOptions);\n setMarkerCoordinates(marker.value);\n addToMap(marker.value);\n setCursorPointer(marker.value);\n listenMarkerEvents(marker.value);\n } catch (error) {\n console.error('Error initializing marker:', error);\n }\n };\n\n watch(slotRef, (el) => {\n if (el && !marker.value) {\n initMarker(el);\n }\n });\n\n onMounted(() => {\n const hasCustomElement = !!slots.markers;\n if (!hasCustomElement) {\n initMarker();\n }\n });\n\n onBeforeUnmount(() => {\n if (marker.value) {\n removeFromMap(marker.value);\n }\n });\n</script>\n\n<template>\n <section :id=\"`marker-${Date.now()}`\" class=\"absolute\">\n <slot :set-ref=\"setSlotRef\" name=\"markers\"></slot>\n <template v-if=\"isMarkerAvailable && $slots.default\">\n <v-popup\n :marker=\"marker!\"\n :options=\"popupOptions\"\n :coordinates=\"coordinates!\"\n >\n <slot></slot>\n </v-popup>\n </template>\n </section>\n</template>\n\n<style>\n .absolute {\n position: absolute !important;\n }\n</style>\n"],"names":["injectStrict","key","fallback","resolved","inject","DeckOverlayKey","DeckLayersKey","useDeckOverlay","map","options","interleaved","existingOverlay","existingLayersRegistry","ref","overlay","shallowRef","layers","isInitialized","initPromise","initOverlay","mapInstance","MapboxOverlay","error","getLayerId","layer","syncLayers","addLayer","layerId","existingIndex","l","removeLayer","updateLayer","newLayer","index","getLayers","watch","provide","onUnmounted","useDeckLayers","registry","MapKey","PMTileProtocolKey","defaultOptions","props","__props","slots","useSlots","onMounted","addControl","control","AttributionControl","_renderSlot","_ctx","FullscreenControl","geolocateControlEvents","emit","__emit","GeolocateControl","events","event","NavigationControl","ScaleControl","lidarControlEvents","LidarControl","data","__expose","source","id","size","scheme","opacity","pickable","use","min","max","offset","enabled","loaded","getMapInstance","setupMap","styleTimeout","layerSpec","updateSource","value","newMap","onBeforeUnmount","hasValidData","existingLayers","setupLayerEvents","e","newSource","oldSource","newVisibility","hasLayer","beforeId","paint","layout","newTileUrl","oldTileUrl","newBefore","mapLayerEvents","mapEvents","markerMapEvents","markerDOMEvents","popupEvents","existingSource","currentLayer","currentPaint","currentLayout","eventName","oldMap","newTiles","oldTiles","newValue","oldValue","videoElement","protocol","p","PMTiles","_createBlock","VLayerMaplibreRaster","clustersLayerId","computed","clusterCountLayerId","unclusteredLayerId","addClusterLayers","updateVisibility","visible","visibility","checkStyleLoaded","newData","sourceId","geojsonData","updateLayerStyle","createLayer","ScatterplotLayer","info","initializeLayer","ArcLayer","GeoJsonLayer","PathLayer","LineLayer","PolygonLayer","SolidPolygonLayer","IconLayer","TextLayer","ColumnLayer","BitmapLayer","GridCellLayer","PointCloudLayer","HeatmapLayer","HexagonLayer","GridLayer","ContourLayer","ScreenGridLayer","TripsLayer","H3HexagonLayer","H3ClusterLayer","MVTLayer","tile","TileLayer","tiles","layerProps","tileset","url","Tile3DLayer","TerrainLayer","GreatCircleLayer","S2Layer","GeohashLayer","QuadkeyLayer","WMSLayer","SimpleMeshLayer","ScenegraphLayer","COGLayerClass","projModule","toProj4Fn","createGeoKeysParser","proj","toProj4","geoKeys","projDefinition","geoKeysParser","toRaw","tiff","markRaw","geotiffModule","proj4Module","oldLayer","oldId","newId","Protocol","maplibregl","Map","listenMapEvents","evt","_createElementBlock","popup","Popup","content","setPopupContent","setPopupCoordinates","addToMarker","remove","listenPopupEvents","removePopupEvents","marker","isMarkerAvailable","slotRef","setSlotRef","el","setMarkerCoordinates","markerInstance","setCursorPointer","addToMap","removeFromMap","listenMarkerEvents","coordinates","markerValue","initMarker","element","markerOptions","Marker","$slots","VPopup"],"mappings":"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"}