@geoql/v-maplibre 1.3.0 → 1.5.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","../../../node_modules/.bun/maplibre-gl-wind@0.2.0+a83e10db243e4cc4/node_modules/maplibre-gl-wind/dist/index.mjs","../src/layers/deckgl/wind-particle/VLayerDeckglWindParticle.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 characterSet?: string | string[];\n fontFamily?: string;\n fontWeight?: string | number;\n lineHeight?: number;\n fontSettings?: {\n sdf?: boolean;\n fontSize?: number;\n buffer?: number;\n radius?: number;\n cutoff?: number;\n smoothing?: number;\n };\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 characterSet: 'auto',\n fontFamily: 'Monaco, monospace',\n fontWeight: 'normal',\n lineHeight: 1,\n fontSettings: () => ({ sdf: true }),\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 characterSet: props.characterSet,\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","import { LineLayer } from \"@deck.gl/layers\";\nimport { BufferTransform } from \"@luma.gl/engine\";\n\n//#region src/wind-particle-transform.glsl.ts\nconst shader = `\\\n#version 300 es\n#define SHADER_NAME wind-particle-transform-vertex-shader\n\nprecision highp float;\n\nin vec3 sourcePosition;\nout vec3 targetPosition;\n\nuniform sampler2D windTexture;\n\nconst vec2 DROP_POSITION = vec2(0);\n\nbool isNaN(float value) {\n return !(value <= 0.f || 0.f <= value);\n}\n\nfloat wrapLongitude(float lng) {\n float wrappedLng = mod(lng + 180.f, 360.f) - 180.f;\n return wrappedLng;\n}\n\nfloat wrapLongitude(float lng, float minLng) {\n float wrappedLng = wrapLongitude(lng);\n if(wrappedLng < minLng) {\n wrappedLng += 360.f;\n }\n return wrappedLng;\n}\n\nfloat randFloat(vec2 seed) {\n return fract(sin(dot(seed.xy, vec2(12.9898f, 78.233f))) * 43758.5453f);\n}\n\nvec2 randPoint(vec2 seed) {\n return vec2(randFloat(seed + 1.3f), randFloat(seed + 2.1f));\n}\n\nvec2 pointToPosition(vec2 point) {\n point.y = smoothstep(0.f, 1.f, point.y);\n vec2 viewportBoundsMin = wind.viewportBounds.xy;\n vec2 viewportBoundsMax = wind.viewportBounds.zw;\n return mix(viewportBoundsMin, viewportBoundsMax, point);\n}\n\nbool isPositionInBounds(vec2 position, vec4 bounds) {\n vec2 boundsMin = bounds.xy;\n vec2 boundsMax = bounds.zw;\n float lng = wrapLongitude(position.x, boundsMin.x);\n float lat = position.y;\n return (boundsMin.x <= lng && lng <= boundsMax.x &&\n boundsMin.y <= lat && lat <= boundsMax.y);\n}\n\nbool isPositionInViewport(vec2 position) {\n return isPositionInBounds(position, wind.viewportBounds);\n}\n\nvec2 getUV(vec2 pos) {\n return vec2(\n (pos.x - wind.bounds[0]) / (wind.bounds[2] - wind.bounds[0]),\n (pos.y - wind.bounds[3]) / (wind.bounds[1] - wind.bounds[3])\n );\n}\n\nbool rasterHasValues(vec4 values) {\n if(wind.imageUnscale[0] < wind.imageUnscale[1]) {\n return values.a >= 1.f;\n } else {\n return !isNaN(values.x);\n }\n}\n\nvec2 rasterGetValues(vec4 colour) {\n if(wind.imageUnscale[0] < wind.imageUnscale[1]) {\n return mix(vec2(wind.imageUnscale[0]), vec2(wind.imageUnscale[1]), colour.xy);\n } else {\n return colour.xy;\n }\n}\n\nvec2 updatedPosition(vec2 position, vec2 speed) {\n float distortion = cos(radians(position.y));\n vec2 offset;\n offset = vec2(speed.x, speed.y * distortion);\n return position + offset;\n}\n\nvoid main() {\n float particleIndex = mod(float(gl_VertexID), wind.numParticles);\n float particleAge = floor(float(gl_VertexID) / wind.numParticles);\n\n if(particleAge > 0.f) {\n return;\n }\n\n if(sourcePosition.xy == DROP_POSITION) {\n vec2 particleSeed = vec2(particleIndex * wind.seed / wind.numParticles);\n vec2 point = randPoint(particleSeed);\n vec2 position = pointToPosition(point);\n targetPosition.xy = position;\n targetPosition.x = wrapLongitude(targetPosition.x);\n return;\n }\n\n if(wind.viewportZoomChangeFactor > 1.f && mod(particleIndex, wind.viewportZoomChangeFactor) >= 1.f) {\n targetPosition.xy = DROP_POSITION;\n return;\n }\n\n if(abs(mod(particleIndex, wind.maxAge + 2.f) - mod(wind.time, wind.maxAge + 2.f)) < 1.f) {\n targetPosition.xy = DROP_POSITION;\n return;\n }\n\n if(!isPositionInBounds(sourcePosition.xy, wind.bounds)) {\n targetPosition.xy = sourcePosition.xy;\n return;\n }\n\n if(!isPositionInViewport(sourcePosition.xy)) {\n targetPosition.xy = DROP_POSITION;\n return;\n }\n\n vec2 uv = getUV(sourcePosition.xy);\n vec4 windColour = texture(windTexture, uv);\n\n if(!rasterHasValues(windColour)) {\n targetPosition.xy = DROP_POSITION;\n return;\n }\n\n vec2 speed = rasterGetValues(windColour) * wind.speedFactor;\n targetPosition.xy = updatedPosition(sourcePosition.xy, speed);\n targetPosition.x = wrapLongitude(targetPosition.x);\n}\n`;\nvar wind_particle_transform_glsl_default = shader;\n\n//#endregion\n//#region src/WindParticleLayer.ts\nconst FPS = 60;\nconst DEFAULT_COLOR = [\n\t255,\n\t255,\n\t255,\n\t255\n];\nconst COLOR_RAMP_WIDTH = 256;\nconst uniformBlock = `\\\nuniform windUniforms {\n float numParticles;\n float maxAge;\n float speedFactor;\n float time;\n float seed;\n vec4 viewportBounds;\n float viewportZoomChangeFactor;\n vec2 imageUnscale;\n vec4 bounds;\n} wind;\n`;\nconst windUniforms = {\n\tname: \"wind\",\n\tvs: uniformBlock,\n\tfs: uniformBlock,\n\tuniformTypes: {\n\t\tnumParticles: \"f32\",\n\t\tmaxAge: \"f32\",\n\t\tspeedFactor: \"f32\",\n\t\ttime: \"f32\",\n\t\tseed: \"f32\",\n\t\tviewportBounds: \"vec4<f32>\",\n\t\tviewportZoomChangeFactor: \"f32\",\n\t\timageUnscale: \"vec2<f32>\",\n\t\tbounds: \"vec4<f32>\"\n\t}\n};\nconst defaultColorRamp = [\n\t[0, [\n\t\t59,\n\t\t130,\n\t\t189,\n\t\t255\n\t]],\n\t[.1, [\n\t\t102,\n\t\t194,\n\t\t165,\n\t\t255\n\t]],\n\t[.2, [\n\t\t171,\n\t\t221,\n\t\t164,\n\t\t255\n\t]],\n\t[.3, [\n\t\t230,\n\t\t245,\n\t\t152,\n\t\t255\n\t]],\n\t[.4, [\n\t\t254,\n\t\t224,\n\t\t139,\n\t\t255\n\t]],\n\t[.5, [\n\t\t253,\n\t\t174,\n\t\t97,\n\t\t255\n\t]],\n\t[.6, [\n\t\t244,\n\t\t109,\n\t\t67,\n\t\t255\n\t]],\n\t[1, [\n\t\t213,\n\t\t62,\n\t\t79,\n\t\t255\n\t]]\n];\nconst defaultProps = {\n\t...LineLayer.defaultProps,\n\timage: {\n\t\ttype: \"image\",\n\t\tvalue: null,\n\t\tasync: true\n\t},\n\timageUnscale: {\n\t\ttype: \"array\",\n\t\tvalue: [0, 0]\n\t},\n\tnumParticles: {\n\t\ttype: \"number\",\n\t\tmin: 1,\n\t\tmax: 1e6,\n\t\tvalue: 8192\n\t},\n\tmaxAge: {\n\t\ttype: \"number\",\n\t\tmin: 1,\n\t\tmax: 255,\n\t\tvalue: 50\n\t},\n\tspeedFactor: {\n\t\ttype: \"number\",\n\t\tmin: 0,\n\t\tmax: 1e3,\n\t\tvalue: 50\n\t},\n\tcolor: {\n\t\ttype: \"color\",\n\t\tvalue: DEFAULT_COLOR\n\t},\n\tcolorRamp: {\n\t\ttype: \"array\",\n\t\tvalue: defaultColorRamp,\n\t\tcompare: true\n\t},\n\tspeedRange: {\n\t\ttype: \"array\",\n\t\tvalue: [0, 30],\n\t\tcompare: true\n\t},\n\twidth: {\n\t\ttype: \"number\",\n\t\tvalue: 1.5\n\t},\n\tanimate: {\n\t\ttype: \"boolean\",\n\t\tvalue: true\n\t},\n\tbounds: {\n\t\ttype: \"array\",\n\t\tvalue: [\n\t\t\t-180,\n\t\t\t-90,\n\t\t\t180,\n\t\t\t90\n\t\t],\n\t\tcompare: true\n\t},\n\twrapLongitude: true\n};\nfunction modulo(x, y) {\n\treturn (x % y + y) % y;\n}\nfunction wrapLongitude(lng, minLng = void 0) {\n\tlet wrappedLng = modulo(lng + 180, 360) - 180;\n\tif (typeof minLng === \"number\" && wrappedLng < minLng) wrappedLng += 360;\n\treturn wrappedLng;\n}\nfunction wrapBounds(bounds) {\n\tconst minLng = bounds[2] - bounds[0] < 360 ? wrapLongitude(bounds[0]) : -180;\n\tconst maxLng = bounds[2] - bounds[0] < 360 ? wrapLongitude(bounds[2], minLng) : 180;\n\treturn [\n\t\tminLng,\n\t\tMath.max(bounds[1], -90),\n\t\tmaxLng,\n\t\tMath.min(bounds[3], 90)\n\t];\n}\nfunction getViewportBounds(viewport) {\n\treturn wrapBounds(viewport.getBounds());\n}\nfunction createColorRampData(colorRamp) {\n\tconst data = new Uint8Array(COLOR_RAMP_WIDTH * 4);\n\tconst sortedStops = [...colorRamp].sort((a, b) => a[0] - b[0]);\n\tfor (let i = 0; i < COLOR_RAMP_WIDTH; i++) {\n\t\tconst t = i / (COLOR_RAMP_WIDTH - 1);\n\t\tlet color = sortedStops[0][1];\n\t\tfor (let j = 0; j < sortedStops.length - 1; j++) {\n\t\t\tconst [t0, c0] = sortedStops[j];\n\t\t\tconst [t1, c1] = sortedStops[j + 1];\n\t\t\tif (t >= t0 && t <= t1) {\n\t\t\t\tconst localT = (t - t0) / (t1 - t0);\n\t\t\t\tcolor = [\n\t\t\t\t\tMath.round(c0[0] + (c1[0] - c0[0]) * localT),\n\t\t\t\t\tMath.round(c0[1] + (c1[1] - c0[1]) * localT),\n\t\t\t\t\tMath.round(c0[2] + (c1[2] - c0[2]) * localT),\n\t\t\t\t\tMath.round((c0[3] ?? 255) + ((c1[3] ?? 255) - (c0[3] ?? 255)) * localT)\n\t\t\t\t];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (t > sortedStops[sortedStops.length - 1][0]) color = sortedStops[sortedStops.length - 1][1];\n\t\tdata[i * 4] = color[0];\n\t\tdata[i * 4 + 1] = color[1];\n\t\tdata[i * 4 + 2] = color[2];\n\t\tdata[i * 4 + 3] = color[3] ?? 255;\n\t}\n\treturn data;\n}\nvar WindParticleLayer = class extends LineLayer {\n\tstatic layerName = \"WindParticleLayer\";\n\tstatic defaultProps = defaultProps;\n\tgetNumInstances() {\n\t\treturn this.state?.numInstances || 0;\n\t}\n\tgetShaders() {\n\t\tconst oldShaders = super.getShaders();\n\t\tconst { speedRange, imageUnscale, bounds } = this.props;\n\t\tconst [minSpeed, maxSpeed] = speedRange || [0, 30];\n\t\treturn {\n\t\t\t...oldShaders,\n\t\t\tinject: {\n\t\t\t\t\"vs:#decl\": `\n uniform sampler2D windTexture;\n uniform sampler2D colorRampTexture;\n out float vDrop;\n out float vSpeed;\n out vec4 vSpeedColor;\n const vec2 DROP_POSITION = vec2(0);\n\n vec2 getWindUV(vec2 pos) {\n vec4 b = vec4(${bounds[0].toFixed(6)}, ${bounds[1].toFixed(6)}, ${bounds[2].toFixed(6)}, ${bounds[3].toFixed(6)});\n return vec2(\n (pos.x - b[0]) / (b[2] - b[0]),\n (pos.y - b[3]) / (b[1] - b[3])\n );\n }\n\n vec2 getWindVelocity(vec4 windColor) {\n vec2 unscale = vec2(${imageUnscale[0].toFixed(6)}, ${imageUnscale[1].toFixed(6)});\n if(unscale[0] < unscale[1]) {\n return mix(vec2(unscale[0]), vec2(unscale[1]), windColor.xy);\n } else {\n return windColor.xy;\n }\n }\n `,\n\t\t\t\t\"vs:#main-start\": `\n vDrop = float(instanceSourcePositions.xy == DROP_POSITION || instanceTargetPositions.xy == DROP_POSITION);\n\n vec2 midPos = (instanceSourcePositions.xy + instanceTargetPositions.xy) * 0.5;\n vec2 windUV = getWindUV(midPos);\n vec4 windColor = texture(windTexture, windUV);\n vec2 velocity = getWindVelocity(windColor);\n float speed = length(velocity);\n\n float minSpd = ${minSpeed.toFixed(6)};\n float maxSpd = ${maxSpeed.toFixed(6)};\n float speedNorm = clamp((speed - minSpd) / (maxSpd - minSpd), 0.0, 1.0);\n vSpeed = speedNorm;\n vSpeedColor = texture(colorRampTexture, vec2(speedNorm, 0.5));\n `,\n\t\t\t\t\"fs:#decl\": `\n in float vDrop;\n in float vSpeed;\n in vec4 vSpeedColor;\n `,\n\t\t\t\t\"fs:#main-start\": `\n if (vDrop > 0.5) discard;\n `,\n\t\t\t\t\"fs:DECKGL_FILTER_COLOR\": `\n color = vSpeedColor;\n color.a *= geometry.uv.x;\n `\n\t\t\t}\n\t\t};\n\t}\n\tinitializeState() {\n\t\tsuper.initializeState();\n\t\tthis._setupTransformFeedback();\n\t\tconst attributeManager = this.getAttributeManager();\n\t\tattributeManager.remove([\n\t\t\t\"instanceSourcePositions\",\n\t\t\t\"instanceTargetPositions\",\n\t\t\t\"instanceColors\",\n\t\t\t\"instanceWidths\"\n\t\t]);\n\t\tattributeManager.addInstanced({\n\t\t\tinstanceSourcePositions: {\n\t\t\t\tsize: 3,\n\t\t\t\ttype: \"float32\",\n\t\t\t\tnoAlloc: true\n\t\t\t},\n\t\t\tinstanceTargetPositions: {\n\t\t\t\tsize: 3,\n\t\t\t\ttype: \"float32\",\n\t\t\t\tnoAlloc: true\n\t\t\t},\n\t\t\tinstanceColors: {\n\t\t\t\tsize: 4,\n\t\t\t\ttype: \"float32\",\n\t\t\t\tnoAlloc: true\n\t\t\t}\n\t\t});\n\t}\n\tupdateState(params) {\n\t\tsuper.updateState(params);\n\t\tconst { props, oldProps } = params;\n\t\tconst { numParticles, maxAge, width, image, colorRamp } = props;\n\t\tif (!numParticles || !maxAge || !width) {\n\t\t\tthis._deleteTransformFeedback();\n\t\t\treturn;\n\t\t}\n\t\tif (image !== oldProps.image || numParticles !== oldProps.numParticles || maxAge !== oldProps.maxAge || width !== oldProps.width || colorRamp !== oldProps.colorRamp) this._setupTransformFeedback();\n\t}\n\tfinalizeState(context) {\n\t\tthis._deleteTransformFeedback();\n\t\tsuper.finalizeState(context);\n\t}\n\tdraw({ uniforms }) {\n\t\tconst { initialized } = this.state;\n\t\tif (!initialized) return;\n\t\tconst { animate } = this.props;\n\t\tconst { sourcePositions, targetPositions, sourcePositions64Low, targetPositions64Low, colors, widths, model, texture, colorRampTexture } = this.state;\n\t\tmodel.setAttributes({\n\t\t\tinstanceSourcePositions: sourcePositions,\n\t\t\tinstanceTargetPositions: targetPositions,\n\t\t\tinstanceColors: colors\n\t\t});\n\t\tmodel.setConstantAttributes({\n\t\t\tinstanceSourcePositions64Low: sourcePositions64Low,\n\t\t\tinstanceTargetPositions64Low: targetPositions64Low,\n\t\t\tinstanceWidths: widths\n\t\t});\n\t\tmodel.setBindings({\n\t\t\twindTexture: texture,\n\t\t\tcolorRampTexture\n\t\t});\n\t\tsuper.draw({ uniforms });\n\t\tif (animate) this.requestStep();\n\t}\n\t_setupTransformFeedback() {\n\t\tconst { initialized } = this.state || {};\n\t\tif (initialized) this._deleteTransformFeedback();\n\t\tconst { image, numParticles, maxAge, width, colorRamp } = this.props;\n\t\tif (typeof image === \"string\" || image === null) return;\n\t\tconst numInstances = numParticles * maxAge;\n\t\tconst numAgedInstances = numParticles * (maxAge - 1);\n\t\tconst sourcePositions = this.context.device.createBuffer(new Float32Array(numInstances * 3));\n\t\tconst targetPositions = this.context.device.createBuffer(new Float32Array(numInstances * 3));\n\t\tconst colors = this.context.device.createBuffer(new Float32Array(new Array(numInstances).fill(void 0).map((_, i) => {\n\t\t\treturn [\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1,\n\t\t\t\t1 * (1 - Math.floor(i / numParticles) / maxAge)\n\t\t\t];\n\t\t}).flat()));\n\t\tconst colorRampData = createColorRampData(colorRamp || defaultColorRamp);\n\t\tconst colorRampTexture = this.context.device.createTexture({\n\t\t\twidth: COLOR_RAMP_WIDTH,\n\t\t\theight: 1,\n\t\t\tformat: \"rgba8unorm\",\n\t\t\tsampler: {\n\t\t\t\tminFilter: \"linear\",\n\t\t\t\tmagFilter: \"linear\",\n\t\t\t\taddressModeU: \"clamp-to-edge\",\n\t\t\t\taddressModeV: \"clamp-to-edge\"\n\t\t\t},\n\t\t\tdata: colorRampData\n\t\t});\n\t\tconst sourcePositions64Low = new Float32Array([\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t]);\n\t\tconst targetPositions64Low = new Float32Array([\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t]);\n\t\tconst widths = new Float32Array([width]);\n\t\tconst transform = new BufferTransform(this.context.device, {\n\t\t\tattributes: { sourcePosition: sourcePositions },\n\t\t\tbufferLayout: [{\n\t\t\t\tname: \"sourcePosition\",\n\t\t\t\tformat: \"float32x3\"\n\t\t\t}],\n\t\t\tfeedbackBuffers: { targetPosition: targetPositions },\n\t\t\tvs: wind_particle_transform_glsl_default,\n\t\t\tvaryings: [\"targetPosition\"],\n\t\t\tmodules: [windUniforms],\n\t\t\tvertexCount: numParticles\n\t\t});\n\t\tthis.setState({\n\t\t\tinitialized: true,\n\t\t\tnumInstances,\n\t\t\tnumAgedInstances,\n\t\t\tsourcePositions,\n\t\t\ttargetPositions,\n\t\t\tsourcePositions64Low,\n\t\t\ttargetPositions64Low,\n\t\t\tcolors,\n\t\t\twidths,\n\t\t\ttransform,\n\t\t\ttexture: image,\n\t\t\tcolorRampTexture,\n\t\t\tpreviousViewportZoom: 0,\n\t\t\tpreviousTime: 0\n\t\t});\n\t}\n\t_runTransformFeedback() {\n\t\tconst { initialized } = this.state || {};\n\t\tif (!initialized) return;\n\t\tconst { viewport, timeline } = this.context;\n\t\tconst { imageUnscale, bounds, numParticles, speedFactor, maxAge } = this.props;\n\t\tconst { previousTime, previousViewportZoom, transform, sourcePositions, targetPositions, numAgedInstances, texture } = this.state;\n\t\tconst time = timeline.getTime();\n\t\tif (time === previousTime) return;\n\t\tconst viewportBounds = getViewportBounds(viewport);\n\t\tconst viewportZoomChangeFactor = 2 ** ((previousViewportZoom - viewport.zoom) * 4);\n\t\tconst currentSpeedFactor = speedFactor * .01 / Math.pow(2, viewport.zoom);\n\t\tconst moduleUniforms = {\n\t\t\twindTexture: texture,\n\t\t\tviewportBounds: viewportBounds || [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t],\n\t\t\tviewportZoomChangeFactor: viewportZoomChangeFactor || 0,\n\t\t\timageUnscale: imageUnscale || [0, 0],\n\t\t\tbounds,\n\t\t\tnumParticles,\n\t\t\tmaxAge,\n\t\t\tspeedFactor: currentSpeedFactor,\n\t\t\ttime,\n\t\t\tseed: Math.random()\n\t\t};\n\t\ttransform.model.shaderInputs.setProps({ wind: moduleUniforms });\n\t\ttransform.run({\n\t\t\tclearColor: false,\n\t\t\tclearDepth: false,\n\t\t\tclearStencil: false,\n\t\t\tdepthReadOnly: true,\n\t\t\tstencilReadOnly: true\n\t\t});\n\t\tconst encoder = this.context.device.createCommandEncoder();\n\t\tencoder.copyBufferToBuffer({\n\t\t\tsourceBuffer: sourcePositions,\n\t\t\tsourceOffset: 0,\n\t\t\tdestinationBuffer: targetPositions,\n\t\t\tdestinationOffset: numParticles * 4 * 3,\n\t\t\tsize: numAgedInstances * 4 * 3\n\t\t});\n\t\tencoder.finish();\n\t\tencoder.destroy();\n\t\tthis.state.sourcePositions = targetPositions;\n\t\tthis.state.targetPositions = sourcePositions;\n\t\ttransform.model.setAttributes({ sourcePosition: targetPositions });\n\t\ttransform.transformFeedback.setBuffers({ targetPosition: sourcePositions });\n\t\tthis.state.previousViewportZoom = viewport.zoom;\n\t\tthis.state.previousTime = time;\n\t}\n\t_resetTransformFeedback() {\n\t\tconst { initialized } = this.state || {};\n\t\tif (!initialized) return;\n\t\tconst { sourcePositions, targetPositions, numInstances } = this.state;\n\t\tsourcePositions.write(new Float32Array(numInstances * 3));\n\t\ttargetPositions.write(new Float32Array(numInstances * 3));\n\t}\n\t_deleteTransformFeedback() {\n\t\tconst { initialized } = this.state || {};\n\t\tif (!initialized) return;\n\t\tconst { sourcePositions, targetPositions, colors, transform, colorRampTexture } = this.state;\n\t\tsourcePositions?.destroy();\n\t\ttargetPositions?.destroy();\n\t\tcolors?.destroy();\n\t\ttransform?.destroy();\n\t\tcolorRampTexture?.destroy();\n\t\tthis.setState({\n\t\t\tinitialized: false,\n\t\t\tsourcePositions: void 0,\n\t\t\ttargetPositions: void 0,\n\t\t\tcolors: void 0,\n\t\t\ttransform: void 0,\n\t\t\tcolorRampTexture: void 0\n\t\t});\n\t}\n\trequestStep() {\n\t\tconst { stepRequested } = this.state || {};\n\t\tif (stepRequested) return;\n\t\tthis.state.stepRequested = true;\n\t\tsetTimeout(() => {\n\t\t\tthis.step();\n\t\t\tthis.state.stepRequested = false;\n\t\t}, 1e3 / FPS);\n\t}\n\tstep() {\n\t\tthis._runTransformFeedback();\n\t\tthis.setNeedsRedraw();\n\t}\n\tclear() {\n\t\tthis._resetTransformFeedback();\n\t\tthis.setNeedsRedraw();\n\t}\n};\n\n//#endregion\n//#region src/generateWindTexture.ts\nfunction degToRad(deg) {\n\treturn deg * Math.PI / 180;\n}\nfunction windToUV(speed, direction) {\n\tconst rad = degToRad(direction);\n\treturn {\n\t\tu: speed * Math.sin(rad),\n\t\tv: speed * Math.cos(rad)\n\t};\n}\nfunction idwInterpolate(x, y, points, power) {\n\tlet sumWeightU = 0;\n\tlet sumWeightV = 0;\n\tlet sumWeight = 0;\n\tfor (const point of points) {\n\t\tconst dx = x - point.x;\n\t\tconst dy = y - point.y;\n\t\tconst distSq = dx * dx + dy * dy;\n\t\tif (distSq < 1e-4) return {\n\t\t\tu: point.u,\n\t\t\tv: point.v\n\t\t};\n\t\tconst weight = 1 / Math.pow(Math.sqrt(distSq), power);\n\t\tsumWeightU += point.u * weight;\n\t\tsumWeightV += point.v * weight;\n\t\tsumWeight += weight;\n\t}\n\tif (sumWeight === 0) return {\n\t\tu: 0,\n\t\tv: 0\n\t};\n\treturn {\n\t\tu: sumWeightU / sumWeight,\n\t\tv: sumWeightV / sumWeight\n\t};\n}\nfunction generateWindTexture(windData, options = {}) {\n\tconst { width = 360, height = 180, bounds = [\n\t\t-180,\n\t\t-90,\n\t\t180,\n\t\t90\n\t], power = 2 } = options;\n\tconst [west, south, east, north] = bounds;\n\tconst uvPoints = windData.map((point) => {\n\t\tconst { u, v } = windToUV(point.speed, point.direction);\n\t\treturn {\n\t\t\tx: (point.lon - west) / (east - west) * width,\n\t\t\ty: (north - point.lat) / (north - south) * height,\n\t\t\tu,\n\t\t\tv\n\t\t};\n\t});\n\tlet uMin = Infinity;\n\tlet uMax = -Infinity;\n\tlet vMin = Infinity;\n\tlet vMax = -Infinity;\n\tconst uvGrid = [];\n\tfor (let y = 0; y < height; y++) for (let x = 0; x < width; x++) {\n\t\tconst { u, v } = idwInterpolate(x + .5, y + .5, uvPoints, power);\n\t\tuvGrid.push({\n\t\t\tu,\n\t\t\tv\n\t\t});\n\t\tuMin = Math.min(uMin, u);\n\t\tuMax = Math.max(uMax, u);\n\t\tvMin = Math.min(vMin, v);\n\t\tvMax = Math.max(vMax, v);\n\t}\n\tconst uRange = uMax - uMin || 1;\n\tconst vRange = vMax - vMin || 1;\n\tconst canvas = document.createElement(\"canvas\");\n\tcanvas.width = width;\n\tcanvas.height = height;\n\tconst ctx = canvas.getContext(\"2d\");\n\tconst imageData = ctx.createImageData(width, height);\n\tfor (let i = 0; i < uvGrid.length; i++) {\n\t\tconst { u, v } = uvGrid[i];\n\t\tconst normalizedU = (u - uMin) / uRange;\n\t\tconst normalizedV = (v - vMin) / vRange;\n\t\tconst idx = i * 4;\n\t\timageData.data[idx] = Math.round(normalizedU * 255);\n\t\timageData.data[idx + 1] = Math.round(normalizedV * 255);\n\t\timageData.data[idx + 2] = 0;\n\t\timageData.data[idx + 3] = 255;\n\t}\n\tctx.putImageData(imageData, 0, 0);\n\treturn {\n\t\tcanvas,\n\t\timageData,\n\t\tuMin,\n\t\tuMax,\n\t\tvMin,\n\t\tvMax,\n\t\tbounds\n\t};\n}\nfunction createWindDataFromOpenWeatherMap(weatherResponses) {\n\treturn weatherResponses.filter((r) => r.wind && typeof r.wind.speed === \"number\").map((r) => ({\n\t\tlat: r.coord.lat,\n\t\tlon: r.coord.lon,\n\t\tspeed: r.wind.speed ?? 0,\n\t\tdirection: r.wind.deg ?? 0\n\t}));\n}\n\n//#endregion\nexport { WindParticleLayer, createWindDataFromOpenWeatherMap, generateWindTexture, windUniforms };\n//# sourceMappingURL=index.mjs.map","<script setup lang=\"ts\">\n import { ref, computed, 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 import { WindParticleLayer, generateWindTexture } from 'maplibre-gl-wind';\n import type { ColorStop, WindDataPoint } from 'maplibre-gl-wind';\n import type { Color } from '../_shared/types';\n\n interface Props {\n id: string;\n imageUrl?: string;\n windData?: WindDataPoint[];\n bounds?: [number, number, number, number];\n uMin?: number;\n uMax?: number;\n vMin?: number;\n vMax?: number;\n numParticles?: number;\n maxAge?: number;\n speedFactor?: number;\n color?: Color;\n colorRamp?: ColorStop[];\n speedRange?: [number, number];\n width?: number;\n animate?: boolean;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n bounds: () => [-180, -90, 180, 90],\n uMin: -50,\n uMax: 50,\n vMin: -50,\n vMax: 50,\n numParticles: 8192,\n maxAge: 30,\n speedFactor: 50,\n color: () => [255, 255, 255, 200] as Color,\n colorRamp: () =>\n [\n [0.0, [59, 130, 189, 255]],\n [0.1, [102, 194, 165, 255]],\n [0.2, [171, 221, 164, 255]],\n [0.3, [230, 245, 152, 255]],\n [0.4, [254, 224, 139, 255]],\n [0.5, [253, 174, 97, 255]],\n [0.6, [244, 109, 67, 255]],\n [1.0, [213, 62, 79, 255]],\n ] as ColorStop[],\n speedRange: () => [0, 30],\n width: 1.5,\n animate: true,\n opacity: 1,\n visible: true,\n pickable: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n loaded: [];\n error: [error: Error];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const isLayerAdded = ref(false);\n const currentImageUrl = ref<string | null>(null);\n const windMetadata = ref({\n uMin: props.uMin,\n uMax: props.uMax,\n vMin: props.vMin,\n vMax: props.vMax,\n });\n\n const imageUnscale = computed(() => {\n const uRange = windMetadata.value.uMax - windMetadata.value.uMin;\n const vRange = windMetadata.value.vMax - windMetadata.value.vMin;\n return [Math.min(uRange, vRange) * -1, Math.max(uRange, vRange)];\n });\n\n const createLayer = () => {\n if (!currentImageUrl.value) return null;\n\n return new WindParticleLayer({\n id: props.id,\n image: currentImageUrl.value,\n bounds: props.bounds,\n imageUnscale: imageUnscale.value,\n numParticles: props.numParticles,\n maxAge: props.maxAge,\n speedFactor: props.speedFactor,\n color: props.color,\n colorRamp: props.colorRamp,\n speedRange: props.speedRange,\n width: props.width,\n animate: props.animate,\n wrapLongitude: true,\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 });\n };\n\n const processWindData = (data: WindDataPoint[]) => {\n try {\n const result = generateWindTexture(data, {\n width: 360,\n height: 180,\n bounds: props.bounds,\n });\n\n windMetadata.value = {\n uMin: result.uMin,\n uMax: result.uMax,\n vMin: result.vMin,\n vMax: result.vMax,\n };\n\n currentImageUrl.value = result.canvas.toDataURL('image/png');\n return true;\n } catch (err) {\n emit('error', err instanceof Error ? err : new Error(String(err)));\n return false;\n }\n };\n\n const initializeLayer = () => {\n if (props.windData && props.windData.length > 0) {\n if (!processWindData(props.windData)) return;\n } else if (props.imageUrl) {\n currentImageUrl.value = props.imageUrl;\n windMetadata.value = {\n uMin: props.uMin,\n uMax: props.uMax,\n vMin: props.vMin,\n vMax: props.vMax,\n };\n } else {\n return;\n }\n\n const layer = createLayer();\n if (layer) {\n addLayer(layer);\n isLayerAdded.value = true;\n emit('loaded');\n }\n };\n\n const updateWindLayer = () => {\n if (!isLayerAdded.value) return;\n\n const layer = createLayer();\n if (layer) {\n updateLayer(props.id, layer);\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 () => props.windData,\n (newData) => {\n if (newData && newData.length > 0) {\n if (processWindData(newData)) {\n updateWindLayer();\n }\n }\n },\n { deep: true },\n );\n\n watch(\n () => props.imageUrl,\n (newUrl) => {\n if (newUrl && !props.windData) {\n currentImageUrl.value = newUrl;\n windMetadata.value = {\n uMin: props.uMin,\n uMax: props.uMax,\n vMin: props.vMin,\n vMax: props.vMax,\n };\n updateWindLayer();\n }\n },\n );\n\n watch(\n () => [\n props.numParticles,\n props.maxAge,\n props.speedFactor,\n props.color,\n props.colorRamp,\n props.speedRange,\n props.width,\n props.animate,\n props.opacity,\n props.visible,\n ],\n () => {\n updateWindLayer();\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","shader","wind_particle_transform_glsl_default","FPS","DEFAULT_COLOR","COLOR_RAMP_WIDTH","uniformBlock","windUniforms","defaultColorRamp","defaultProps","modulo","x","y","wrapLongitude","lng","minLng","wrappedLng","wrapBounds","bounds","maxLng","getViewportBounds","viewport","createColorRampData","colorRamp","sortedStops","a","b","i","t","color","j","t0","c0","t1","c1","localT","WindParticleLayer","_a","oldShaders","speedRange","imageUnscale","minSpeed","maxSpeed","attributeManager","params","oldProps","numParticles","maxAge","width","image","context","uniforms","initialized","animate","sourcePositions","targetPositions","sourcePositions64Low","targetPositions64Low","colors","widths","model","texture","colorRampTexture","numInstances","numAgedInstances","_","colorRampData","transform","BufferTransform","timeline","speedFactor","previousTime","previousViewportZoom","time","viewportBounds","viewportZoomChangeFactor","currentSpeedFactor","moduleUniforms","encoder","stepRequested","__publicField","degToRad","deg","windToUV","speed","direction","rad","idwInterpolate","points","power","sumWeightU","sumWeightV","sumWeight","point","dx","dy","distSq","weight","generateWindTexture","windData","height","west","south","east","north","uvPoints","u","v","uMin","uMax","vMin","vMax","uvGrid","uRange","vRange","canvas","ctx","imageData","normalizedU","normalizedV","idx","createWindDataFromOpenWeatherMap","weatherResponses","r","isLayerAdded","currentImageUrl","windMetadata","processWindData","result","err","updateWindLayer","newUrl","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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","x_google_ignoreList":[57]}