@geoql/v-maplibre 1.5.0 → 1.6.1

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.
Files changed (62) hide show
  1. package/README.md +6 -2
  2. package/dist/controls/_shared/index.d.ts +1 -0
  3. package/dist/controls/_shared/useMapControl.d.ts +10 -0
  4. package/dist/controls/index.d.ts +6 -0
  5. package/dist/controls/layer/VControlLayer.vue.d.ts +38 -0
  6. package/dist/controls/layer/VControlLayerGroup.vue.d.ts +53 -0
  7. package/dist/controls/layer/events.d.ts +1 -0
  8. package/dist/controls/layer/index.d.ts +5 -0
  9. package/dist/controls/layer/types.d.ts +16 -0
  10. package/dist/controls/legend/VControlLegend.vue.d.ts +54 -0
  11. package/dist/controls/legend/events.d.ts +2 -0
  12. package/dist/controls/legend/index.d.ts +3 -0
  13. package/dist/controls/legend/types.d.ts +63 -0
  14. package/dist/decoder-CLokFc0V.js +9 -0
  15. package/dist/decoder-CLokFc0V.js.map +1 -0
  16. package/dist/deflate-yeu3ogBn.js +11 -0
  17. package/dist/deflate-yeu3ogBn.js.map +1 -0
  18. package/dist/geotiff-BUZniE5g.js +3106 -0
  19. package/dist/geotiff-BUZniE5g.js.map +1 -0
  20. package/dist/index-Bt_rREAc.js +168 -0
  21. package/dist/index-Bt_rREAc.js.map +1 -0
  22. package/dist/index-CA8I5Z2-.js +4667 -0
  23. package/dist/index-CA8I5Z2-.js.map +1 -0
  24. package/dist/index.d.ts +4 -4
  25. package/dist/index.js +2736 -1638
  26. package/dist/index.js.map +1 -1
  27. package/dist/jpeg-B7yImnpY.js +534 -0
  28. package/dist/jpeg-B7yImnpY.js.map +1 -0
  29. package/dist/layers/deckgl/_shared/useDeckOverlay.d.ts +2 -0
  30. package/dist/layers/deckgl/index.d.ts +2 -0
  31. package/dist/layers/deckgl/mosaic/VLayerDeckglMosaic.vue.d.ts +163 -0
  32. package/dist/layers/deckgl/mosaic/index.d.ts +2 -0
  33. package/dist/layers/deckgl/text/VLayerDeckglText.vue.d.ts +1 -1
  34. package/dist/layers/deckgl/wind-particle/VLayerDeckglWindParticle.vue.d.ts +1 -1
  35. package/dist/layers/index.d.ts +3 -2
  36. package/dist/layers/maplibre/canvas/VLayerMaplibreCanvas.vue.d.ts +1 -1
  37. package/dist/layers/maplibre/custom/isochrone/VLayerMaplibreIsochrone.vue.d.ts +71 -0
  38. package/dist/layers/maplibre/custom/isochrone/index.d.ts +1 -0
  39. package/dist/layers/maplibre/geojson/VLayerMaplibreGeojson.vue.d.ts +1 -1
  40. package/dist/layers/maplibre/image/VLayerMaplibreImage.vue.d.ts +1 -1
  41. package/dist/layers/maplibre/pmtile/VLayerMaplibrePmtile.vue.d.ts +1 -1
  42. package/dist/layers/maplibre/video/VLayerMaplibreVideo.vue.d.ts +1 -1
  43. package/dist/lerc-CqgA9njy.js +1032 -0
  44. package/dist/lerc-CqgA9njy.js.map +1 -0
  45. package/dist/lzw-DL9RcHOz.js +85 -0
  46. package/dist/lzw-DL9RcHOz.js.map +1 -0
  47. package/dist/markers/VMarker.vue.d.ts +1 -2
  48. package/dist/packbits-YEJGULcy.js +25 -0
  49. package/dist/packbits-YEJGULcy.js.map +1 -0
  50. package/dist/pako.esm-Bx5X36Wo.js +1075 -0
  51. package/dist/pako.esm-Bx5X36Wo.js.map +1 -0
  52. package/dist/popups/VPopup.vue.d.ts +1 -1
  53. package/dist/raw-CoQHiEnn.js +10 -0
  54. package/dist/raw-CoQHiEnn.js.map +1 -0
  55. package/dist/v-maplibre.css +1 -1
  56. package/dist/webimage-BXLN-zu8.js +20 -0
  57. package/dist/webimage-BXLN-zu8.js.map +1 -0
  58. package/package.json +100 -84
  59. package/dist/layers/maplibre/{cluster → custom/cluster}/VLayerMaplibreCluster.vue.d.ts +1 -1
  60. package/dist/layers/maplibre/{cluster → custom/cluster}/index.d.ts +0 -0
  61. package/dist/layers/maplibre/{route → custom/route}/VLayerMaplibreRoute.vue.d.ts +2 -2
  62. /package/dist/layers/maplibre/{route → custom/route}/index.d.ts +0 -0
package/dist/index.js.map CHANGED
@@ -1 +1 @@
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]}
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/controls/_shared/useMapControl.ts","../src/controls/layer/VControlLayer.vue","../src/controls/layer/VControlLayerGroup.vue","../src/controls/legend/VControlLegend.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/custom/cluster/VLayerMaplibreCluster.vue","../src/layers/maplibre/custom/route/VLayerMaplibreRoute.vue","../src/layers/maplibre/custom/isochrone/VLayerMaplibreIsochrone.vue","../src/layers/deckgl/scatterplot/VLayerDeckglScatterplot.vue","../src/layers/deckgl/arc/VLayerDeckglArc.vue","../src/layers/deckgl/geojson/VLayerDeckglGeojson.vue","../src/layers/deckgl/path/VLayerDeckglPath.vue","../src/layers/deckgl/line/VLayerDeckglLine.vue","../src/layers/deckgl/polygon/VLayerDeckglPolygon.vue","../src/layers/deckgl/solid-polygon/VLayerDeckglSolidPolygon.vue","../src/layers/deckgl/icon/VLayerDeckglIcon.vue","../src/layers/deckgl/text/VLayerDeckglText.vue","../src/layers/deckgl/column/VLayerDeckglColumn.vue","../src/layers/deckgl/bitmap/VLayerDeckglBitmap.vue","../src/layers/deckgl/grid-cell/VLayerDeckglGridCell.vue","../src/layers/deckgl/point-cloud/VLayerDeckglPointCloud.vue","../src/layers/deckgl/heatmap/VLayerDeckglHeatmap.vue","../src/layers/deckgl/hexagon/VLayerDeckglHexagon.vue","../src/layers/deckgl/grid/VLayerDeckglGrid.vue","../src/layers/deckgl/contour/VLayerDeckglContour.vue","../src/layers/deckgl/screen-grid/VLayerDeckglScreenGrid.vue","../src/layers/deckgl/trips/VLayerDeckglTrips.vue","../src/layers/deckgl/h3-hexagon/VLayerDeckglH3Hexagon.vue","../src/layers/deckgl/h3-cluster/VLayerDeckglH3Cluster.vue","../src/layers/deckgl/mvt/VLayerDeckglMVT.vue","../src/layers/deckgl/tile/VLayerDeckglTile.vue","../src/layers/deckgl/tile-3d/VLayerDeckglTile3D.vue","../src/layers/deckgl/terrain/VLayerDeckglTerrain.vue","../src/layers/deckgl/great-circle/VLayerDeckglGreatCircle.vue","../src/layers/deckgl/s2/VLayerDeckglS2.vue","../src/layers/deckgl/geohash/VLayerDeckglGeohash.vue","../src/layers/deckgl/quadkey/VLayerDeckglQuadkey.vue","../src/layers/deckgl/wms/VLayerDeckglWMS.vue","../src/layers/deckgl/simple-mesh/VLayerDeckglSimpleMesh.vue","../src/layers/deckgl/scenegraph/VLayerDeckglScenegraph.vue","../src/layers/deckgl/cog/VLayerDeckglCOG.vue","../src/layers/deckgl/mosaic/VLayerDeckglMosaic.vue","../../../node_modules/.bun/maplibre-gl-wind@0.2.0+f94d7d082bc1fca4/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 getLayers: () => unknown[];\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 ...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 getLayers,\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","import { onMounted, onUnmounted, type Ref, type ShallowRef } from 'vue';\nimport type { Map, IControl, ControlPosition } from 'maplibre-gl';\n\n/**\n * Register a Vue component as a MapLibre IControl for proper control stacking.\n *\n * @param map - Ref to the MapLibre map instance\n * @param containerRef - Ref to the component's root HTMLElement\n * @param position - Control position ('top-left' | 'top-right' | 'bottom-left' | 'bottom-right')\n */\nexport function useMapControl(\n map: ShallowRef<Map | null> | Ref<Map | null>,\n containerRef: Ref<HTMLElement | null>,\n position: ControlPosition,\n): void {\n let control: IControl | null = null;\n\n onMounted(() => {\n if (!map.value || !containerRef.value) return;\n\n control = {\n onAdd: (): HTMLElement => {\n containerRef.value?.classList.add('maplibregl-ctrl');\n return containerRef.value!;\n },\n onRemove: (): void => {},\n };\n\n map.value.addControl(control, position);\n });\n\n onUnmounted(() => {\n if (map.value && control) {\n try {\n map.value.removeControl(control);\n } catch {\n // Control may already be removed if map was destroyed\n }\n }\n });\n}\n","<script setup lang=\"ts\">\n import { ref, watch, inject, onMounted } from 'vue';\n import { MapKey, injectStrict } from '../../utils';\n import { DeckLayersKey } from '../../layers/deckgl/_shared/useDeckOverlay';\n import { useMapControl } from '../_shared';\n import type { ControlPosition, LayerType } from './types';\n\n const props = withDefaults(\n defineProps<{\n layerId: string;\n position?: ControlPosition;\n visible?: boolean;\n opacity?: number;\n title?: string;\n layerType?: LayerType;\n }>(),\n {\n position: 'top-right',\n visible: true,\n opacity: 1,\n title: 'Layer Control',\n layerType: undefined,\n },\n );\n\n const emit = defineEmits<{\n 'visibility-change': [visible: boolean];\n 'opacity-change': [opacity: number];\n 'update:visible': [visible: boolean];\n 'update:opacity': [opacity: number];\n }>();\n\n const map = injectStrict(MapKey);\n const deckLayers = inject(DeckLayersKey, null);\n const containerRef = ref<HTMLElement | null>(null);\n const isVisible = ref(props.visible);\n const currentOpacity = ref(props.opacity);\n\n useMapControl(map, containerRef, props.position);\n\n // Function to detect layer type (called fresh each time, not cached)\n const getLayerType = (): LayerType | null => {\n if (props.layerType) return props.layerType;\n if (!map.value) return null;\n const maplibreLayer = map.value.getLayer(props.layerId);\n if (maplibreLayer) return 'maplibre';\n if (deckLayers) {\n const layers = deckLayers.getLayers();\n const deckLayer = (layers as Array<{ id: string }>).find(\n (l) => l.id === props.layerId,\n );\n if (deckLayer) return 'deckgl';\n }\n return null;\n };\n\n const getOpacityProperty = (): string | null => {\n if (!map.value || getLayerType() !== 'maplibre') return null;\n\n const layer = map.value.getLayer(props.layerId);\n if (!layer) return null;\n\n switch (layer.type) {\n case 'fill':\n return 'fill-opacity';\n case 'line':\n return 'line-opacity';\n case 'circle':\n return 'circle-opacity';\n case 'symbol':\n return 'icon-opacity';\n default:\n return null;\n }\n };\n\n const updateVisibility = (visible: boolean) => {\n const layerType = getLayerType();\n\n if (layerType === 'maplibre') {\n if (!map.value) return;\n const layer = map.value.getLayer(props.layerId);\n if (!layer) {\n console.warn(`MapLibre layer not found: ${props.layerId}`);\n return;\n }\n map.value.setLayoutProperty(\n props.layerId,\n 'visibility',\n visible ? 'visible' : 'none',\n );\n } else if (layerType === 'deckgl') {\n if (!deckLayers) {\n console.warn(\n `deck.gl overlay not available for layer: ${props.layerId}`,\n );\n return;\n }\n const layers = deckLayers.getLayers();\n const existingLayer = (\n layers as Array<{ id: string; clone?: (props: object) => unknown }>\n ).find((l) => l.id === props.layerId);\n if (!existingLayer) {\n console.warn(`deck.gl layer not found: ${props.layerId}`);\n return;\n }\n if (typeof existingLayer.clone === 'function') {\n const updatedLayer = existingLayer.clone({ visible });\n deckLayers.updateLayer(props.layerId, updatedLayer);\n }\n } else {\n console.warn(`Layer not found in MapLibre or deck.gl: ${props.layerId}`);\n return;\n }\n\n emit('visibility-change', visible);\n emit('update:visible', visible);\n };\n\n const updateOpacity = (opacity: number) => {\n const layerType = getLayerType();\n\n if (layerType === 'maplibre') {\n const opacityProp = getOpacityProperty();\n if (!map.value || !opacityProp) return;\n const layer = map.value.getLayer(props.layerId);\n if (!layer) {\n console.warn(`MapLibre layer not found: ${props.layerId}`);\n return;\n }\n map.value.setPaintProperty(props.layerId, opacityProp, opacity);\n } else if (layerType === 'deckgl') {\n if (!deckLayers) {\n console.warn(\n `deck.gl overlay not available for layer: ${props.layerId}`,\n );\n return;\n }\n const layers = deckLayers.getLayers();\n const existingLayer = (\n layers as Array<{ id: string; clone?: (props: object) => unknown }>\n ).find((l) => l.id === props.layerId);\n if (!existingLayer) {\n console.warn(`deck.gl layer not found: ${props.layerId}`);\n return;\n }\n if (typeof existingLayer.clone === 'function') {\n const updatedLayer = existingLayer.clone({ opacity });\n deckLayers.updateLayer(props.layerId, updatedLayer);\n }\n } else {\n console.warn(`Layer not found in MapLibre or deck.gl: ${props.layerId}`);\n return;\n }\n\n emit('opacity-change', opacity);\n emit('update:opacity', opacity);\n };\n\n const toggleVisibility = () => {\n isVisible.value = !isVisible.value;\n };\n\n const handleOpacityInput = (event: Event) => {\n const target = event.target as HTMLInputElement;\n currentOpacity.value = Number(target.value) / 100;\n };\n\n watch(isVisible, (newValue) => {\n updateVisibility(newValue);\n });\n\n watch(currentOpacity, (newValue) => {\n updateOpacity(newValue);\n });\n\n watch(\n () => props.visible,\n (newValue) => {\n isVisible.value = newValue;\n },\n );\n\n watch(\n () => props.opacity,\n (newValue) => {\n currentOpacity.value = newValue;\n },\n );\n\n // Wait for layer to be available, then apply initial settings\n onMounted(() => {\n let applied = false;\n\n const checkAndApply = () => {\n if (applied) return true;\n // Use function directly to get fresh result (not cached computed)\n const layerType = getLayerType();\n if (layerType) {\n applied = true;\n updateVisibility(isVisible.value);\n updateOpacity(currentOpacity.value);\n return true;\n }\n return false;\n };\n\n // Try immediately\n if (checkAndApply()) return;\n\n // If layer not found, retry with increasing intervals\n // Total wait: ~10 seconds (enough for data fetching)\n const delays = [100, 200, 300, 500, 500, 1000, 1000, 1000, 2000, 3000];\n let index = 0;\n\n const retry = () => {\n if (checkAndApply() || index >= delays.length) return;\n setTimeout(() => {\n index++;\n retry();\n }, delays[index]);\n };\n\n retry();\n });\n</script>\n\n<template>\n <div ref=\"containerRef\" class=\"v-layer-control\">\n <div class=\"v-layer-control-header\">\n <span class=\"v-layer-control-title\">{{ title }}</span>\n <button\n type=\"button\"\n class=\"v-layer-control-toggle\"\n :class=\"{ 'is-hidden': !isVisible }\"\n :aria-pressed=\"isVisible\"\n :title=\"isVisible ? 'Hide layer' : 'Show layer'\"\n @click=\"toggleVisibility\"\n >\n <svg\n v-if=\"isVisible\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M8 3C4.5 3 1.5 5.5 0.5 8C1.5 10.5 4.5 13 8 13C11.5 13 14.5 10.5 15.5 8C14.5 5.5 11.5 3 8 3Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.25\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"2.5\"\n stroke=\"currentColor\"\n stroke-width=\"1.25\"\n />\n </svg>\n <svg v-else width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M2 2L14 14M6.5 6.5C5.9 7.1 5.5 7.9 5.5 8.8C5.5 10.4 6.9 11.5 8 11.5C8.9 11.5 9.7 11.1 10.3 10.5M8 3C4.5 3 1.5 5.5 0.5 8C1 9.2 1.8 10.3 2.8 11.2M13.2 11.2C14.2 10.3 15 9.2 15.5 8C14.5 5.5 11.5 3 8 3\"\n stroke=\"currentColor\"\n stroke-width=\"1.25\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n\n <div class=\"v-layer-control-slider-row\">\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n :value=\"Math.round(currentOpacity * 100)\"\n class=\"v-layer-control-slider\"\n :disabled=\"!isVisible\"\n @input=\"handleOpacityInput\"\n />\n <span class=\"v-layer-control-value\"\n >{{ Math.round(currentOpacity * 100) }}%</span\n >\n </div>\n\n <slot></slot>\n </div>\n</template>\n\n<style>\n .v-layer-control {\n min-width: 140px;\n max-width: 200px;\n margin: 10px;\n background: var(--color-card, #fff);\n border-radius: var(--radius, 0.5rem);\n border: 1px solid var(--color-border, #e5e7eb);\n box-shadow:\n 0 1px 3px 0 rgb(0 0 0 / 0.1),\n 0 1px 2px -1px rgb(0 0 0 / 0.1);\n font-family:\n ui-sans-serif,\n system-ui,\n -apple-system,\n sans-serif;\n font-size: 12px;\n overflow: hidden;\n padding: 8px 10px;\n /* Required: MapLibre control containers have pointer-events:none */\n pointer-events: auto;\n }\n\n .v-layer-control-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n margin-bottom: 8px;\n }\n\n .v-layer-control-title {\n font-weight: 500;\n font-size: 11px;\n color: var(--color-card-foreground, #111827);\n line-height: 1.2;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n }\n\n .v-layer-control-toggle {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n padding: 0;\n border: none;\n border-radius: calc(var(--radius, 0.5rem) - 2px);\n background: transparent;\n color: var(--color-foreground, #374151);\n cursor: pointer;\n transition:\n background 0.15s ease,\n color 0.15s ease;\n flex-shrink: 0;\n }\n\n .v-layer-control-toggle svg {\n width: 14px;\n height: 14px;\n }\n\n .v-layer-control-toggle:hover {\n background: var(--color-accent, #f3f4f6);\n }\n\n .v-layer-control-toggle.is-hidden {\n color: var(--color-muted-foreground, #9ca3af);\n }\n\n .v-layer-control-slider-row {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .v-layer-control-slider {\n flex: 1;\n height: 3px;\n border-radius: 2px;\n background: var(--color-secondary, #e5e7eb);\n cursor: pointer;\n -webkit-appearance: none;\n appearance: none;\n }\n\n .v-layer-control-slider:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n .v-layer-control-value {\n font-size: 10px;\n font-weight: 500;\n color: var(--color-muted-foreground, #6b7280);\n font-variant-numeric: tabular-nums;\n min-width: 28px;\n text-align: right;\n }\n\n .v-layer-control-slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background: var(--color-primary, #3b82f6);\n cursor: pointer;\n border: 2px solid #fff;\n box-shadow: 0 1px 3px rgb(0 0 0 / 0.2);\n }\n\n .v-layer-control-slider::-moz-range-thumb {\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background: var(--color-primary, #3b82f6);\n cursor: pointer;\n border: 2px solid #fff;\n box-shadow: 0 1px 3px rgb(0 0 0 / 0.2);\n }\n\n .v-layer-control-slider:disabled::-webkit-slider-thumb {\n cursor: not-allowed;\n }\n\n .v-layer-control-slider:disabled::-moz-range-thumb {\n cursor: not-allowed;\n }\n\n .v-layer-control-slider:focus {\n outline: none;\n }\n\n .v-layer-control-slider:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 3px\n color-mix(in srgb, var(--color-primary, #3b82f6) 20%, transparent);\n }\n</style>\n","<script setup lang=\"ts\">\n import { ref, watch, inject, onMounted } from 'vue';\n import { MapKey, injectStrict } from '../../utils';\n import { DeckLayersKey } from '../../layers/deckgl/_shared/useDeckOverlay';\n import { useMapControl } from '../_shared';\n import type { ControlPosition, LayerType } from './types';\n\n export interface LayerConfig {\n id: string;\n title: string;\n visible?: boolean;\n opacity?: number;\n type?: LayerType;\n }\n\n const props = withDefaults(\n defineProps<{\n layers: LayerConfig[];\n position?: ControlPosition;\n title?: string;\n collapsible?: boolean;\n collapsed?: boolean;\n }>(),\n {\n position: 'top-right',\n title: 'Layers',\n collapsible: true,\n collapsed: false,\n },\n );\n\n const emit = defineEmits<{\n 'visibility-change': [data: { layerId: string; visible: boolean }];\n 'opacity-change': [data: { layerId: string; opacity: number }];\n 'update:layers': [layers: LayerConfig[]];\n }>();\n\n const map = injectStrict(MapKey);\n const deckLayers = inject(DeckLayersKey, null);\n const containerRef = ref<HTMLElement | null>(null);\n const isCollapsed = ref(props.collapsed);\n\n const layerStates = ref<Map<string, { visible: boolean; opacity: number }>>(\n new Map(),\n );\n\n useMapControl(map, containerRef, props.position);\n\n const initLayerStates = () => {\n for (const layer of props.layers) {\n layerStates.value.set(layer.id, {\n visible: layer.visible ?? true,\n opacity: layer.opacity ?? 1,\n });\n }\n };\n\n const getLayerType = (\n layerId: string,\n configType?: LayerType,\n ): LayerType | null => {\n if (configType) return configType;\n if (!map.value) return null;\n\n const maplibreLayer = map.value.getLayer(layerId);\n if (maplibreLayer) return 'maplibre';\n\n if (deckLayers) {\n const layers = deckLayers.getLayers();\n const deckLayer = (layers as Array<{ id: string }>).find(\n (l) => l.id === layerId,\n );\n if (deckLayer) return 'deckgl';\n }\n return null;\n };\n\n const getOpacityProperty = (layerId: string): string | null => {\n if (!map.value) return null;\n const layer = map.value.getLayer(layerId);\n if (!layer) return null;\n\n const layerType = layer.type;\n switch (layerType) {\n case 'fill':\n return 'fill-opacity';\n case 'line':\n return 'line-opacity';\n case 'circle':\n return 'circle-opacity';\n case 'symbol':\n return 'icon-opacity';\n case 'raster':\n return 'raster-opacity';\n default:\n return null;\n }\n };\n\n const updateVisibility = (\n layerId: string,\n visible: boolean,\n configType?: LayerType,\n ) => {\n const layerType = getLayerType(layerId, configType);\n\n if (layerType === 'maplibre') {\n if (!map.value) return;\n const layer = map.value.getLayer(layerId);\n if (!layer) {\n console.warn(\n `[VControlLayerGroup] MapLibre layer not found: ${layerId}`,\n );\n return;\n }\n map.value.setLayoutProperty(\n layerId,\n 'visibility',\n visible ? 'visible' : 'none',\n );\n } else if (layerType === 'deckgl') {\n if (!deckLayers) {\n console.warn(\n `[VControlLayerGroup] deck.gl overlay not available for layer: ${layerId}`,\n );\n return;\n }\n const layers = deckLayers.getLayers();\n const existingLayer = (\n layers as Array<{ id: string; clone?: (props: object) => unknown }>\n ).find((l) => l.id === layerId);\n if (!existingLayer) {\n console.warn(\n `[VControlLayerGroup] deck.gl layer not found: ${layerId}`,\n );\n return;\n }\n if (typeof existingLayer.clone === 'function') {\n const updatedLayer = existingLayer.clone({ visible });\n deckLayers.updateLayer(layerId, updatedLayer);\n }\n } else {\n console.warn(`[VControlLayerGroup] Layer not found: ${layerId}`);\n return;\n }\n\n emit('visibility-change', { layerId, visible });\n };\n\n const updateOpacity = (\n layerId: string,\n opacity: number,\n configType?: LayerType,\n ) => {\n const layerType = getLayerType(layerId, configType);\n\n if (layerType === 'maplibre') {\n const opacityProp = getOpacityProperty(layerId);\n if (!map.value || !opacityProp) return;\n const layer = map.value.getLayer(layerId);\n if (!layer) {\n console.warn(\n `[VControlLayerGroup] MapLibre layer not found: ${layerId}`,\n );\n return;\n }\n map.value.setPaintProperty(layerId, opacityProp, opacity);\n } else if (layerType === 'deckgl') {\n if (!deckLayers) {\n console.warn(\n `[VControlLayerGroup] deck.gl overlay not available for layer: ${layerId}`,\n );\n return;\n }\n const layers = deckLayers.getLayers();\n const existingLayer = (\n layers as Array<{ id: string; clone?: (props: object) => unknown }>\n ).find((l) => l.id === layerId);\n if (!existingLayer) {\n console.warn(\n `[VControlLayerGroup] deck.gl layer not found: ${layerId}`,\n );\n return;\n }\n if (typeof existingLayer.clone === 'function') {\n const updatedLayer = existingLayer.clone({ opacity });\n deckLayers.updateLayer(layerId, updatedLayer);\n }\n } else {\n console.warn(`[VControlLayerGroup] Layer not found: ${layerId}`);\n return;\n }\n\n emit('opacity-change', { layerId, opacity });\n };\n\n const toggleVisibility = (layer: LayerConfig) => {\n const state = layerStates.value.get(layer.id);\n if (!state) return;\n\n const newVisible = !state.visible;\n state.visible = newVisible;\n updateVisibility(layer.id, newVisible, layer.type);\n };\n\n const handleOpacityInput = (layer: LayerConfig, event: Event) => {\n const target = event.target as HTMLInputElement;\n const opacity = Number(target.value) / 100;\n\n const state = layerStates.value.get(layer.id);\n if (!state) return;\n\n state.opacity = opacity;\n updateOpacity(layer.id, opacity, layer.type);\n };\n\n const getState = (layerId: string) => {\n return layerStates.value.get(layerId) ?? { visible: true, opacity: 1 };\n };\n\n const toggleCollapse = () => {\n if (props.collapsible) {\n isCollapsed.value = !isCollapsed.value;\n }\n };\n\n watch(\n () => props.layers,\n () => {\n initLayerStates();\n },\n { deep: true },\n );\n\n watch(\n () => props.collapsed,\n (newValue) => {\n isCollapsed.value = newValue;\n },\n );\n\n onMounted(() => {\n initLayerStates();\n // Apply initial states\n for (const layer of props.layers) {\n const state = getState(layer.id);\n updateVisibility(layer.id, state.visible, layer.type);\n updateOpacity(layer.id, state.opacity, layer.type);\n }\n });\n</script>\n\n<template>\n <div\n ref=\"containerRef\"\n class=\"v-layer-group\"\n :class=\"{ 'is-collapsed': isCollapsed }\"\n >\n <button\n v-if=\"collapsible\"\n type=\"button\"\n class=\"v-layer-group-header\"\n @click=\"toggleCollapse\"\n >\n <span class=\"v-layer-group-title\">{{ title }}</span>\n <svg\n class=\"v-layer-group-chevron\"\n :class=\"{ 'is-collapsed': isCollapsed }\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n >\n <path\n d=\"M3 5L7 9L11 5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n <div v-else class=\"v-layer-group-header is-static\">\n <span class=\"v-layer-group-title\">{{ title }}</span>\n </div>\n\n <div v-if=\"!isCollapsed\" class=\"v-layer-group-content\">\n <div v-for=\"layer in layers\" :key=\"layer.id\" class=\"v-layer-group-item\">\n <div class=\"v-layer-group-item-header\">\n <span class=\"v-layer-group-item-title\">{{ layer.title }}</span>\n <button\n type=\"button\"\n class=\"v-layer-group-toggle\"\n :class=\"{ 'is-hidden': !getState(layer.id).visible }\"\n :aria-pressed=\"getState(layer.id).visible\"\n :title=\"getState(layer.id).visible ? 'Hide layer' : 'Show layer'\"\n @click=\"toggleVisibility(layer)\"\n >\n <svg\n v-if=\"getState(layer.id).visible\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M8 3C4.5 3 1.5 5.5 0.5 8C1.5 10.5 4.5 13 8 13C11.5 13 14.5 10.5 15.5 8C14.5 5.5 11.5 3 8 3Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.25\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"2.5\"\n stroke=\"currentColor\"\n stroke-width=\"1.25\"\n />\n </svg>\n <svg v-else width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M2 2L14 14M6.5 6.5C5.9 7.1 5.5 7.9 5.5 8.8C5.5 10.4 6.9 11.5 8 11.5C8.9 11.5 9.7 11.1 10.3 10.5M8 3C4.5 3 1.5 5.5 0.5 8C1 9.2 1.8 10.3 2.8 11.2M13.2 11.2C14.2 10.3 15 9.2 15.5 8C14.5 5.5 11.5 3 8 3\"\n stroke=\"currentColor\"\n stroke-width=\"1.25\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n <div class=\"v-layer-group-slider-row\">\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n :value=\"Math.round(getState(layer.id).opacity * 100)\"\n class=\"v-layer-group-slider\"\n :disabled=\"!getState(layer.id).visible\"\n @input=\"handleOpacityInput(layer, $event)\"\n />\n <span class=\"v-layer-group-value\"\n >{{ Math.round(getState(layer.id).opacity * 100) }}%</span\n >\n </div>\n </div>\n </div>\n\n <slot></slot>\n </div>\n</template>\n\n<style>\n .v-layer-group {\n min-width: 140px;\n max-width: 200px;\n margin: 10px;\n background: var(--color-card, #fff);\n border-radius: var(--radius, 0.5rem);\n border: 1px solid var(--color-border, #e5e7eb);\n box-shadow:\n 0 1px 3px 0 rgb(0 0 0 / 0.1),\n 0 1px 2px -1px rgb(0 0 0 / 0.1);\n font-family:\n ui-sans-serif,\n system-ui,\n -apple-system,\n sans-serif;\n font-size: 12px;\n overflow: hidden;\n /* Required: MapLibre control containers have pointer-events:none */\n pointer-events: auto;\n }\n\n .v-layer-group-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n min-height: 36px;\n padding: 8px 10px;\n border: none;\n border-bottom: 1px solid var(--color-border, #e5e7eb);\n background: transparent;\n cursor: pointer;\n text-align: left;\n line-height: 1;\n touch-action: manipulation;\n -webkit-tap-highlight-color: transparent;\n }\n\n .v-layer-group-header.is-static {\n cursor: default;\n }\n\n .v-layer-group-header:not(.is-static):hover {\n background: var(--color-accent, #f3f4f6);\n }\n\n .v-layer-group.is-collapsed .v-layer-group-header {\n border-bottom: none;\n }\n\n .v-layer-group-title {\n font-weight: 500;\n font-size: 11px;\n color: var(--color-card-foreground, #111827);\n line-height: 1.2;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n }\n\n .v-layer-group-chevron {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n color: var(--color-muted-foreground, #6b7280);\n transition: transform 0.15s ease;\n flex-shrink: 0;\n }\n\n .v-layer-group-chevron.is-collapsed {\n transform: rotate(-90deg);\n }\n\n .v-layer-group-content {\n display: flex;\n flex-direction: column;\n }\n\n .v-layer-group-item {\n padding: 6px 10px 8px;\n border-bottom: 1px solid var(--color-border, #e5e7eb);\n }\n\n .v-layer-group-item:last-child {\n border-bottom: none;\n }\n\n .v-layer-group-item-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n margin-bottom: 6px;\n }\n\n .v-layer-group-item-title {\n font-weight: 500;\n font-size: 11px;\n color: var(--color-foreground, #374151);\n line-height: 1.2;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n }\n\n .v-layer-group-toggle {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n padding: 0;\n border: none;\n border-radius: calc(var(--radius, 0.5rem) - 2px);\n background: transparent;\n color: var(--color-foreground, #374151);\n cursor: pointer;\n transition:\n background 0.15s ease,\n color 0.15s ease;\n flex-shrink: 0;\n }\n\n .v-layer-group-toggle svg {\n width: 14px;\n height: 14px;\n }\n\n .v-layer-group-toggle:hover {\n background: var(--color-accent, #f3f4f6);\n }\n\n .v-layer-group-toggle.is-hidden {\n color: var(--color-muted-foreground, #9ca3af);\n }\n\n .v-layer-group-slider-row {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .v-layer-group-slider {\n flex: 1;\n height: 3px;\n border-radius: 2px;\n background: var(--color-secondary, #e5e7eb);\n cursor: pointer;\n -webkit-appearance: none;\n appearance: none;\n }\n\n .v-layer-group-slider:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n .v-layer-group-slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n background: var(--color-primary, #3b82f6);\n cursor: pointer;\n border: 2px solid #fff;\n box-shadow: 0 1px 3px rgb(0 0 0 / 0.2);\n }\n\n .v-layer-group-slider::-moz-range-thumb {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n background: var(--color-primary, #3b82f6);\n cursor: pointer;\n border: 2px solid #fff;\n box-shadow: 0 1px 3px rgb(0 0 0 / 0.2);\n }\n\n .v-layer-group-slider:disabled::-webkit-slider-thumb {\n cursor: not-allowed;\n }\n\n .v-layer-group-slider:disabled::-moz-range-thumb {\n cursor: not-allowed;\n }\n\n .v-layer-group-slider:focus {\n outline: none;\n }\n\n .v-layer-group-slider:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 3px\n color-mix(in srgb, var(--color-primary, #3b82f6) 20%, transparent);\n }\n\n .v-layer-group-value {\n font-size: 10px;\n font-weight: 500;\n color: var(--color-muted-foreground, #6b7280);\n font-variant-numeric: tabular-nums;\n min-width: 28px;\n text-align: right;\n }\n</style>\n","<script setup lang=\"ts\">\n import { ref, watch, computed, inject, onMounted } from 'vue';\n import { MapKey, injectStrict } from '../../utils';\n import { DeckLayersKey } from '../../layers/deckgl/_shared/useDeckOverlay';\n import { useMapControl } from '../_shared';\n import type {\n ControlPosition,\n LegendType,\n CategoryLegendItem,\n GradientLegendItem,\n SizeLegendItem,\n LegendItem,\n FilterState,\n ExpressionValue,\n DeckLayerWithExtensions,\n } from './types';\n\n const props = withDefaults(\n defineProps<{\n layerIds: string[];\n type?: LegendType;\n items?: LegendItem[];\n position?: ControlPosition;\n property?: string;\n autoGenerate?: boolean;\n title?: string;\n collapsed?: boolean;\n interactive?: boolean;\n }>(),\n {\n type: 'category',\n position: 'top-right',\n autoGenerate: false,\n title: 'Legend',\n collapsed: false,\n interactive: true,\n },\n );\n\n const emit = defineEmits<{\n 'item-click': [data: { item: LegendItem; index: number; visible: boolean }];\n 'filter-change': [data: { filter: FilterState; layerIds: string[] }];\n 'update:filter': [filter: FilterState];\n }>();\n\n const map = injectStrict(MapKey);\n const deckLayers = inject(DeckLayersKey, null);\n const containerRef = ref<HTMLElement | null>(null);\n const isCollapsed = ref(props.collapsed);\n const categoryItemVisibility = ref<Map<string | number, boolean>>(new Map());\n const generatedItems = ref<LegendItem[]>([]);\n\n useMapControl(map, containerRef, props.position);\n\n const parseMatchExpression = (\n expression: ExpressionValue[],\n ): CategoryLegendItem[] => {\n const items: CategoryLegendItem[] = [];\n const defaultColor = expression[expression.length - 1] as string;\n\n for (let i = 2; i < expression.length - 1; i += 2) {\n const value = expression[i];\n const color = expression[i + 1] as string;\n\n if (Array.isArray(value)) {\n for (const v of value) {\n items.push({\n value: v as string | number,\n label: String(v),\n color,\n visible: true,\n });\n }\n } else {\n items.push({\n value: value as string | number,\n label: String(value),\n color,\n visible: true,\n });\n }\n }\n\n if (items.length > 0 && defaultColor && typeof defaultColor === 'string') {\n items.push({\n value: '__default__',\n label: 'Other',\n color: defaultColor,\n visible: true,\n });\n }\n\n return items;\n };\n\n const parseStepExpression = (\n expression: ExpressionValue[],\n ): GradientLegendItem | null => {\n const colors: string[] = [];\n const stops: number[] = [];\n\n const defaultColor = expression[2] as string;\n colors.push(defaultColor);\n\n for (let i = 3; i < expression.length; i += 2) {\n const stop = expression[i] as number;\n const color = expression[i + 1] as string;\n stops.push(stop);\n colors.push(color);\n }\n\n if (stops.length === 0) return null;\n\n return {\n min: stops[0],\n max: stops[stops.length - 1],\n colors,\n stops,\n };\n };\n\n const parseInterpolateExpression = (\n expression: ExpressionValue[],\n ): GradientLegendItem | null => {\n const colors: string[] = [];\n const stops: number[] = [];\n\n const startIndex = expression[1] && Array.isArray(expression[1]) ? 3 : 3;\n\n for (let i = startIndex; i < expression.length; i += 2) {\n const stop = expression[i] as number;\n const color = expression[i + 1] as string;\n stops.push(stop);\n colors.push(color);\n }\n\n if (stops.length < 2) return null;\n\n return {\n min: stops[0],\n max: stops[stops.length - 1],\n colors,\n stops,\n };\n };\n\n const generateLegendFromPaint = (): LegendItem[] => {\n if (!props.autoGenerate || !props.property || !map.value) return [];\n\n const layerId = props.layerIds[0];\n if (!layerId) return [];\n\n const layer = map.value.getLayer(layerId);\n if (!layer) {\n console.warn(`[VControlLegend] Layer not found: ${layerId}`);\n return [];\n }\n\n const paintValue = map.value.getPaintProperty(layerId, props.property);\n if (!paintValue || !Array.isArray(paintValue)) {\n console.warn(\n `[VControlLegend] Paint property \"${props.property}\" not found or not an expression`,\n );\n return [];\n }\n\n const expressionType = paintValue[0];\n\n if (expressionType === 'match') {\n return parseMatchExpression(paintValue as ExpressionValue[]);\n }\n\n if (expressionType === 'step') {\n const gradient = parseStepExpression(paintValue as ExpressionValue[]);\n return gradient ? [gradient] : [];\n }\n\n if (\n expressionType === 'interpolate' ||\n expressionType === 'interpolate-hcl' ||\n expressionType === 'interpolate-lab'\n ) {\n const gradient = parseInterpolateExpression(\n paintValue as ExpressionValue[],\n );\n return gradient ? [gradient] : [];\n }\n\n console.warn(\n `[VControlLegend] Unsupported expression type: ${expressionType}`,\n );\n return [];\n };\n\n const effectiveItems = computed((): LegendItem[] => {\n if (props.items && props.items.length > 0) {\n return props.items;\n }\n return generatedItems.value;\n });\n\n const categoryItems = computed(() => {\n if (props.type !== 'category') return [];\n return effectiveItems.value.filter(\n (item): item is CategoryLegendItem =>\n 'value' in item && 'color' in item && 'label' in item,\n );\n });\n\n const gradientItem = computed(() => {\n if (props.type !== 'gradient') return null;\n const items = effectiveItems.value;\n if (items.length === 0) return null;\n const first = items[0];\n if ('min' in first && 'max' in first && 'colors' in first) {\n return first as GradientLegendItem;\n }\n return null;\n });\n\n const sizeItems = computed(() => {\n if (props.type !== 'size') return [];\n return effectiveItems.value.filter(\n (item): item is SizeLegendItem => 'size' in item && 'value' in item,\n );\n });\n\n const filterState = computed((): FilterState => {\n const visibleValues = Array.from(categoryItemVisibility.value.entries())\n .filter(([, visible]) => visible)\n .map(([value]) => value);\n return { visibleValues };\n });\n\n const gradientStyle = computed(() => {\n if (!gradientItem.value) return '';\n const colorStops = gradientItem.value.colors.join(', ');\n return `linear-gradient(to right, ${colorStops})`;\n });\n\n const initVisibility = () => {\n if (props.type === 'category') {\n for (const item of categoryItems.value) {\n categoryItemVisibility.value.set(item.value, item.visible ?? true);\n }\n }\n };\n\n const applyFilterToMapLibreLayers = () => {\n if (!map.value || !props.property || props.type !== 'category') return;\n\n const visibleValues = filterState.value.visibleValues.filter(\n (v) => v !== '__default__',\n );\n const allValues = categoryItems.value\n .map((item) => item.value)\n .filter((v) => v !== '__default__');\n const allVisible = visibleValues.length === allValues.length;\n\n for (const layerId of props.layerIds) {\n const layer = map.value.getLayer(layerId);\n if (!layer) continue;\n\n if (allVisible) {\n map.value.setFilter(layerId, null);\n } else if (visibleValues.length === 0) {\n map.value.setFilter(layerId, ['==', ['get', '_never_match_'], true]);\n } else {\n const paintValue = map.value.getPaintProperty(layerId, props.property);\n if (!paintValue || !Array.isArray(paintValue)) continue;\n\n const inputExpr = paintValue[1];\n let propertyName: string | null = null;\n\n if (Array.isArray(inputExpr) && inputExpr[0] === 'get') {\n propertyName = inputExpr[1] as string;\n }\n\n if (propertyName) {\n map.value.setFilter(layerId, [\n 'in',\n ['get', propertyName],\n ['literal', visibleValues],\n ]);\n }\n }\n }\n };\n\n const applyFilterToDeckglLayers = () => {\n if (!deckLayers || props.type !== 'category') return;\n\n const visibleValues = filterState.value.visibleValues.filter(\n (v) => v !== '__default__',\n );\n const allValues = categoryItems.value\n .map((item) => item.value)\n .filter((v) => v !== '__default__');\n const allVisible = visibleValues.length === allValues.length;\n\n const layers = deckLayers.getLayers() as DeckLayerWithExtensions[];\n\n for (const layerId of props.layerIds) {\n if (map.value?.getLayer(layerId)) continue;\n\n const deckLayer = layers.find((l) => l.id === layerId);\n if (!deckLayer) continue;\n\n const hasDataFilterExtension = deckLayer.props?.extensions?.some(\n (ext) => ext?.constructor?.name === 'DataFilterExtension',\n );\n\n if (!hasDataFilterExtension) {\n console.warn(\n `[VControlLegend] deck.gl layer \"${layerId}\" requires DataFilterExtension for filtering. ` +\n 'Add DataFilterExtension to layer extensions and configure getFilterValue accessor.',\n );\n continue;\n }\n\n if (typeof deckLayer.clone !== 'function') continue;\n\n if (allVisible) {\n const updatedLayer = deckLayer.clone({\n filterRange: [-Infinity, Infinity],\n });\n deckLayers.updateLayer(layerId, updatedLayer);\n } else if (visibleValues.length === 0) {\n const updatedLayer = deckLayer.clone({\n filterRange: [Infinity, Infinity],\n });\n deckLayers.updateLayer(layerId, updatedLayer);\n } else {\n const valueIndices = visibleValues\n .map((v) => categoryItems.value.findIndex((item) => item.value === v))\n .filter((i) => i >= 0);\n\n if (valueIndices.length > 0) {\n const minIndex = Math.min(...valueIndices);\n const maxIndex = Math.max(...valueIndices);\n const updatedLayer = deckLayer.clone({\n filterRange: [minIndex - 0.5, maxIndex + 0.5],\n });\n deckLayers.updateLayer(layerId, updatedLayer);\n }\n }\n }\n };\n\n const toggleItem = (item: CategoryLegendItem, index: number) => {\n if (!props.interactive) return;\n\n const currentVisible = categoryItemVisibility.value.get(item.value) ?? true;\n const newVisible = !currentVisible;\n categoryItemVisibility.value.set(item.value, newVisible);\n\n applyFilterToMapLibreLayers();\n applyFilterToDeckglLayers();\n\n emit('item-click', { item, index, visible: newVisible });\n emit('filter-change', {\n filter: filterState.value,\n layerIds: props.layerIds,\n });\n emit('update:filter', filterState.value);\n };\n\n const isItemVisible = (item: CategoryLegendItem) => {\n return categoryItemVisibility.value.get(item.value) ?? true;\n };\n\n const toggleCollapse = () => {\n isCollapsed.value = !isCollapsed.value;\n };\n\n watch(\n () => props.items,\n () => {\n initVisibility();\n },\n { deep: true },\n );\n\n watch(\n () => props.collapsed,\n (newValue) => {\n isCollapsed.value = newValue;\n },\n );\n\n onMounted(() => {\n if (props.autoGenerate) {\n generatedItems.value = generateLegendFromPaint();\n }\n initVisibility();\n });\n</script>\n\n<template>\n <div\n ref=\"containerRef\"\n class=\"v-legend-control\"\n :class=\"{ 'is-collapsed': isCollapsed }\"\n >\n <button\n type=\"button\"\n class=\"v-legend-control-header\"\n @click=\"toggleCollapse\"\n >\n <span class=\"v-legend-control-title\">{{ title }}</span>\n <svg\n class=\"v-legend-control-chevron\"\n :class=\"{ 'is-collapsed': isCollapsed }\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n >\n <path\n d=\"M3 5L7 9L11 5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <div v-if=\"!isCollapsed\" class=\"v-legend-control-content\">\n <template v-if=\"type === 'category'\">\n <button\n v-for=\"(item, index) in categoryItems\"\n :key=\"item.value\"\n type=\"button\"\n class=\"v-legend-control-item\"\n :class=\"{\n 'is-interactive': interactive,\n 'is-hidden': !isItemVisible(item),\n }\"\n :disabled=\"!interactive\"\n @click=\"toggleItem(item, index)\"\n >\n <span\n class=\"v-legend-control-swatch\"\n :style=\"{ backgroundColor: item.color }\"\n ></span>\n <span class=\"v-legend-control-label\">{{ item.label }}</span>\n <span v-if=\"item.count !== undefined\" class=\"v-legend-control-count\">\n {{ item.count }}\n </span>\n </button>\n </template>\n\n <template v-else-if=\"type === 'gradient' && gradientItem\">\n <div\n class=\"v-legend-control-gradient\"\n :style=\"{ background: gradientStyle }\"\n ></div>\n <div class=\"v-legend-control-gradient-labels\">\n <span>{{ gradientItem.minLabel ?? gradientItem.min }}</span>\n <span>{{ gradientItem.maxLabel ?? gradientItem.max }}</span>\n </div>\n </template>\n\n <template v-else-if=\"type === 'size'\">\n <div\n v-for=\"item in sizeItems\"\n :key=\"item.value\"\n class=\"v-legend-control-size-item\"\n >\n <div class=\"v-legend-control-size-circle-wrap\">\n <div\n class=\"v-legend-control-size-circle\"\n :style=\"{\n width: `${Math.min(item.size, 20)}px`,\n height: `${Math.min(item.size, 20)}px`,\n }\"\n ></div>\n </div>\n <span class=\"v-legend-control-label\">{{ item.label }}</span>\n </div>\n </template>\n </div>\n\n <slot></slot>\n </div>\n</template>\n\n<style>\n .v-legend-control {\n min-width: 140px;\n max-width: 200px;\n margin: 10px;\n background: var(--color-card, #fff);\n border-radius: var(--radius, 0.5rem);\n border: 1px solid var(--color-border, #e5e7eb);\n box-shadow:\n 0 1px 3px 0 rgb(0 0 0 / 0.1),\n 0 1px 2px -1px rgb(0 0 0 / 0.1);\n font-family:\n ui-sans-serif,\n system-ui,\n -apple-system,\n sans-serif;\n font-size: 12px;\n overflow: hidden;\n /* Required: MapLibre control containers have pointer-events:none */\n pointer-events: auto;\n }\n\n .v-legend-control-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n width: 100%;\n min-height: 44px;\n padding: 8px 10px;\n border: none;\n border-bottom: 1px solid var(--color-border, #e5e7eb);\n background: transparent;\n cursor: pointer;\n text-align: left;\n line-height: 1;\n touch-action: manipulation;\n -webkit-tap-highlight-color: transparent;\n }\n\n .v-legend-control.is-collapsed .v-legend-control-header {\n border-bottom: none;\n }\n\n .v-legend-control-header:hover {\n background: var(--color-accent, #f3f4f6);\n }\n\n .v-legend-control-title {\n font-weight: 500;\n font-size: 13px;\n color: var(--color-card-foreground, #111827);\n line-height: 1;\n }\n\n .v-legend-control-chevron {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n color: var(--color-muted-foreground, #6b7280);\n transition: transform 0.15s ease;\n flex-shrink: 0;\n }\n\n .v-legend-control-chevron.is-collapsed {\n transform: rotate(-90deg);\n }\n\n .v-legend-control-content {\n padding: 6px;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .v-legend-control-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 6px 8px;\n border: none;\n border-radius: calc(var(--radius, 0.5rem) - 4px);\n background: transparent;\n text-align: left;\n transition:\n background 0.1s ease,\n opacity 0.1s ease;\n }\n\n .v-legend-control-item.is-interactive {\n cursor: pointer;\n }\n\n .v-legend-control-item.is-interactive:hover {\n background: var(--color-accent, #f3f4f6);\n }\n\n .v-legend-control-item.is-hidden {\n opacity: 0.4;\n }\n\n .v-legend-control-item.is-hidden .v-legend-control-label {\n text-decoration: line-through;\n }\n\n .v-legend-control-item:disabled {\n cursor: default;\n }\n\n .v-legend-control-swatch {\n width: 12px;\n height: 12px;\n border-radius: 3px;\n flex-shrink: 0;\n box-shadow: inset 0 0 0 1px rgb(0 0 0 / 0.1);\n }\n\n .v-legend-control-label {\n flex: 1;\n font-size: 11px;\n font-weight: 500;\n color: var(--color-foreground, #374151);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .v-legend-control-count {\n font-size: 10px;\n font-weight: 500;\n color: var(--color-muted-foreground, #6b7280);\n background: var(--color-secondary, #f3f4f6);\n padding: 1px 5px;\n border-radius: 8px;\n }\n\n .v-legend-control-gradient {\n height: 12px;\n border-radius: 3px;\n margin: 6px 8px 4px;\n }\n\n .v-legend-control-gradient-labels {\n display: flex;\n justify-content: space-between;\n padding: 0 8px 6px;\n font-size: 10px;\n font-weight: 500;\n color: var(--color-muted-foreground, #6b7280);\n }\n\n .v-legend-control-size-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 8px;\n }\n\n .v-legend-control-size-circle-wrap {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .v-legend-control-size-circle {\n border-radius: 50%;\n background: var(--color-primary, #3b82f6);\n box-shadow: inset 0 0 0 1px rgb(0 0 0 / 0.1);\n }\n</style>\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, nextTick } 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 // Track if layer has been initialized to prevent duplicate setup\n const initialized = ref(false);\n\n // Initialize layer - single entry point to prevent race conditions\n const initializeLayer = async () => {\n if (initialized.value) return;\n\n const mapInstance = getMapInstance();\n if (!mapInstance || !mapInstance.isStyleLoaded()) return;\n if (!hasValidData(props.source.data)) return;\n\n // Use nextTick to ensure Vue has finished setup\n await nextTick();\n\n // Double-check conditions after nextTick\n if (initialized.value) return;\n if (!mapInstance.isStyleLoaded()) return;\n\n addLayer();\n setupLayerEvents(mapInstance);\n initialized.value = true;\n };\n\n // Watch loaded state - MUST be defined BEFORE watch(map) to catch immediate changes\n watch(loaded, (value) => {\n if (value) {\n initializeLayer();\n }\n });\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 // Also try to initialize directly in case watch(loaded) already fired\n initializeLayer();\n }\n }\n },\n { immediate: true },\n );\n\n // Watchers for updates after initialization\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 if (!initialized.value) {\n setupLayerEvents(mapInstance);\n initialized.value = true;\n }\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 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 // Use nextTick to ensure all watchers are set up\n nextTick(() => {\n initializeLayer();\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 type { Ref } from 'vue';\n import {\n onMounted,\n onBeforeUnmount,\n ref,\n watch,\n computed,\n nextTick,\n } from 'vue';\n import type {\n GeoJSONSource,\n Map,\n MapLayerMouseEvent,\n FillLayerSpecification,\n LineLayerSpecification,\n } from 'maplibre-gl';\n import { injectStrict, MapKey } from '../../../../utils';\n\n interface IsochroneFeature {\n type: 'Feature';\n properties: {\n color: string;\n contour?: number;\n metric?: string;\n [key: string]: unknown;\n };\n geometry: GeoJSON.Polygon | GeoJSON.MultiPolygon;\n }\n\n interface IsochroneData {\n type: 'FeatureCollection';\n features: IsochroneFeature[];\n }\n\n interface IsochroneClick {\n feature: IsochroneFeature;\n coordinates: {\n lng: number;\n lat: number;\n };\n }\n\n interface Props {\n /** Unique identifier for the isochrone layer */\n id?: string;\n /** GeoJSON FeatureCollection with isochrone polygons (from Valhalla, OSRM, etc.) */\n data: IsochroneData | null;\n /** Fill opacity (0-1) */\n fillOpacity?: number;\n /** Line width in pixels for polygon outlines */\n lineWidth?: number;\n /** Line opacity (0-1) */\n lineOpacity?: number;\n /** Whether the layer is visible */\n visible?: boolean;\n /** Whether the layer is interactive (shows pointer cursor on hover) */\n interactive?: boolean;\n /** Render this layer before the specified layer */\n before?: string;\n /** Whether to reverse the feature order (for proper stacking of overlapping polygons) */\n reverseOrder?: boolean;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n id: () => `isochrone-${Math.random().toString(36).slice(2, 9)}`,\n fillOpacity: 0.4,\n lineWidth: 2,\n lineOpacity: 0.8,\n visible: true,\n interactive: true,\n before: '',\n reverseOrder: true,\n });\n\n const emit = defineEmits<{\n click: [event: IsochroneClick];\n mouseenter: [feature: IsochroneFeature];\n mouseleave: [];\n }>();\n\n const map = injectStrict(MapKey);\n const loaded: Ref<boolean> = ref(false);\n const initialized = ref(false);\n\n const sourceId = computed(() => `${props.id}-source`);\n const fillLayerId = computed(() => `${props.id}-fill`);\n const lineLayerId = computed(() => `${props.id}-line`);\n\n /**\n * Process the GeoJSON data:\n * 1. Optionally reverse feature order for proper polygon stacking\n * 2. Add fillColor property with # prefix (Valhalla returns colors without #)\n */\n const processedData = computed((): IsochroneData | null => {\n if (!props.data || !props.data.features || props.data.features.length === 0)\n return null;\n\n const features = props.reverseOrder\n ? [...props.data.features].reverse()\n : props.data.features;\n\n return {\n type: 'FeatureCollection',\n features: features.map((f) => ({\n ...f,\n properties: {\n ...f.properties,\n // Add # prefix if color doesn't have it (Valhalla format)\n fillColor: f.properties.color.startsWith('#')\n ? f.properties.color\n : `#${f.properties.color}`,\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 addLayers = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance || !mapInstance.isStyleLoaded()) return;\n\n const data = processedData.value;\n if (!data) return;\n\n try {\n // Add source if it doesn't exist\n if (!mapInstance.getSource(sourceId.value)) {\n mapInstance.addSource(sourceId.value, {\n type: 'geojson',\n data,\n });\n }\n\n // Add fill layer\n if (!mapInstance.getLayer(fillLayerId.value)) {\n const fillLayerSpec: FillLayerSpecification = {\n id: fillLayerId.value,\n type: 'fill',\n source: sourceId.value,\n layout: {\n visibility: props.visible ? 'visible' : 'none',\n },\n paint: {\n 'fill-color': ['get', 'fillColor'],\n 'fill-opacity': props.fillOpacity,\n },\n };\n\n mapInstance.addLayer(fillLayerSpec, props.before || undefined);\n }\n\n // Add line layer\n if (!mapInstance.getLayer(lineLayerId.value)) {\n const lineLayerSpec: LineLayerSpecification = {\n id: lineLayerId.value,\n type: 'line',\n source: sourceId.value,\n layout: {\n visibility: props.visible ? 'visible' : 'none',\n },\n paint: {\n 'line-color': ['get', 'fillColor'],\n 'line-width': props.lineWidth,\n 'line-opacity': props.lineOpacity,\n },\n };\n\n mapInstance.addLayer(lineLayerSpec, props.before || undefined);\n }\n } catch (error) {\n console.error('Error adding isochrone layers:', 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 const data = processedData.value;\n\n if (source && 'setData' in source) {\n if (data) {\n source.setData(data);\n }\n } else if (!source && data) {\n addLayers();\n }\n } catch (error) {\n console.error('Error updating isochrone source:', error);\n }\n };\n\n const updateLayerStyle = (): void => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n // Update fill layer\n if (mapInstance.getLayer(fillLayerId.value)) {\n mapInstance.setPaintProperty(\n fillLayerId.value,\n 'fill-opacity',\n props.fillOpacity,\n );\n mapInstance.setLayoutProperty(\n fillLayerId.value,\n 'visibility',\n props.visible ? 'visible' : 'none',\n );\n }\n\n // Update line layer\n if (mapInstance.getLayer(lineLayerId.value)) {\n mapInstance.setPaintProperty(\n lineLayerId.value,\n 'line-width',\n props.lineWidth,\n );\n mapInstance.setPaintProperty(\n lineLayerId.value,\n 'line-opacity',\n props.lineOpacity,\n );\n mapInstance.setLayoutProperty(\n lineLayerId.value,\n 'visibility',\n props.visible ? 'visible' : 'none',\n );\n }\n } catch (error) {\n console.error('Error updating isochrone layer style:', error);\n }\n };\n\n const setupLayerEvents = (mapInstance: Map) => {\n if (!mapInstance || !props.interactive) return;\n\n try {\n // Click handler on fill layer\n mapInstance.on('click', fillLayerId.value, (e: MapLayerMouseEvent) => {\n if (e.features && e.features.length > 0) {\n emit('click', {\n feature: e.features[0] as unknown as IsochroneFeature,\n coordinates: e.lngLat,\n });\n }\n });\n\n // Hover effects\n mapInstance.on(\n 'mouseenter',\n fillLayerId.value,\n (e: MapLayerMouseEvent) => {\n mapInstance.getCanvas().style.cursor = 'pointer';\n if (e.features && e.features.length > 0) {\n emit('mouseenter', e.features[0] as unknown as IsochroneFeature);\n }\n },\n );\n\n mapInstance.on('mouseleave', fillLayerId.value, () => {\n mapInstance.getCanvas().style.cursor = '';\n emit('mouseleave');\n });\n } catch (error) {\n console.error('Error setting up isochrone layer events:', error);\n }\n };\n\n // Single initialization function to prevent race conditions\n const initializeLayers = async () => {\n if (initialized.value) return;\n\n const mapInstance = getMapInstance();\n if (!mapInstance || !mapInstance.isStyleLoaded()) return;\n if (!processedData.value) return;\n\n // Wait for next tick to ensure all watchers are set up\n await nextTick();\n\n // Double-check we haven't been initialized during the tick\n if (initialized.value) return;\n\n addLayers();\n setupLayerEvents(mapInstance);\n initialized.value = true;\n };\n\n // Watch for data changes\n watch(\n () => props.data,\n () => {\n const mapInstance = getMapInstance();\n if (mapInstance?.isStyleLoaded()) {\n if (!mapInstance.getSource(sourceId.value)) {\n addLayers();\n } else {\n updateSource();\n }\n }\n },\n { deep: true },\n );\n\n // Watch for style changes\n watch(\n () => [\n props.fillOpacity,\n props.lineWidth,\n props.lineOpacity,\n props.visible,\n ],\n () => updateLayerStyle(),\n { deep: true },\n );\n\n // IMPORTANT: watch(loaded) must be defined BEFORE watch(map) with immediate: true\n // Otherwise, when map watcher sets loaded.value = true, this watcher won't catch it\n watch(loaded, (value) => {\n if (value) {\n initializeLayers();\n }\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 // Also call initializeLayers directly in case loaded watcher already ran\n initializeLayers();\n }\n }\n },\n { immediate: true },\n );\n\n // Lifecycle hooks\n onMounted(() => {\n // Use nextTick to ensure all watchers are registered\n nextTick(() => {\n initializeLayers();\n });\n });\n\n onBeforeUnmount(() => {\n const mapInstance = getMapInstance();\n if (!mapInstance) return;\n\n try {\n // Remove layers\n if (mapInstance.getLayer(lineLayerId.value)) {\n mapInstance.removeLayer(lineLayerId.value);\n }\n if (mapInstance.getLayer(fillLayerId.value)) {\n mapInstance.removeLayer(fillLayerId.value);\n }\n // Remove source\n if (mapInstance.getSource(sourceId.value)) {\n mapInstance.removeSource(sourceId.value);\n }\n } catch (error) {\n console.error('Error cleaning up isochrone 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","<script setup lang=\"ts\">\n /**\n * VLayerDeckglMosaic - Client-side COG mosaic layer for STAC items\n *\n * Uses @developmentseed/deck.gl-geotiff v0.2.0 MosaicLayer for efficient\n * client-side rendering of multiple COGs from STAC APIs.\n *\n * @see https://github.com/developmentseed/deck.gl-raster/blob/main/examples/naip-mosaic/src/App.tsx\n */\n import {\n onMounted,\n onBeforeUnmount,\n watch,\n shallowRef,\n markRaw,\n toRaw,\n } from 'vue';\n import type { Color, PickingInfo } from '@deck.gl/core';\n import type { GeoTIFF, GeoTIFFImage } from 'geotiff';\n import type { Device, Texture } from '@luma.gl/core';\n import type { RasterModule } from '@developmentseed/deck.gl-raster';\n import type {\n COGLayerProps,\n MosaicLayerProps,\n MosaicSource as BaseMosaicSource,\n } from '@developmentseed/deck.gl-geotiff';\n import type { Pool } from 'geotiff';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n // GetTileDataOptions is not exported from @developmentseed/deck.gl-geotiff, define locally\n interface GetTileDataOptions {\n device: Device;\n window?: [number, number, number, number];\n signal?: AbortSignal;\n pool: Pool;\n }\n\n /**\n * A STAC-like item with bounding box and COG asset URL\n * Extends the base MosaicSource from deck.gl-geotiff with asset info\n */\n export interface MosaicSource extends BaseMosaicSource {\n /** Asset containing the COG URL */\n assets: {\n image: { href: string };\n };\n }\n\n /**\n * Render mode for the mosaic layer\n */\n export type MosaicRenderMode = 'trueColor' | 'falseColor' | 'ndvi' | 'custom';\n\n /**\n * Custom render module for advanced band manipulation\n */\n export interface RenderModule {\n module: { name: string; inject?: Record<string, string> };\n props?: Record<string, unknown>;\n }\n\n interface Props {\n id: string;\n /**\n * Array of STAC-like items with bbox and COG asset URLs\n */\n sources: MosaicSource[];\n /**\n * Render mode: trueColor (RGB), falseColor (NIR-R-G), ndvi (with colormap)\n */\n renderMode?: MosaicRenderMode;\n /**\n * Custom render modules (only used when renderMode is 'custom')\n */\n customRenderModules?: (texture: Texture) => RenderModule[];\n /**\n * Custom colormap data for NDVI (Uint8ClampedArray of RGBA values, 256 colors)\n * @reserved Currently not implemented - NDVI uses built-in cfastie colormap.\n */\n colormapData?: Uint8ClampedArray;\n /**\n * Maximum number of tiles to cache\n */\n maxCacheSize?: 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\n const props = withDefaults(defineProps<Props>(), {\n renderMode: 'trueColor',\n maxCacheSize: Infinity,\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 sourceLoad: [source: MosaicSource];\n error: [error: Error, source?: MosaicSource];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n // Texture data type returned by getTileData\n interface TextureData {\n texture: Texture;\n width: number;\n height: number;\n }\n\n // Loaded module references\n interface LoadedModules {\n MosaicLayer: typeof import('@developmentseed/deck.gl-geotiff').MosaicLayer;\n COGLayer: typeof import('@developmentseed/deck.gl-geotiff').COGLayer;\n CreateTexture: RasterModule['module'];\n fromUrl: typeof import('geotiff').fromUrl;\n proj4Defs: (\n name: string,\n def?: string,\n ) => import('proj4').ProjectionDefinition | undefined;\n }\n\n const modules = shallowRef<LoadedModules | null>(null);\n\n /**\n * Get proj4 definition string for an EPSG code.\n * Based on: https://github.com/developmentseed/deck.gl-raster/blob/main/examples/naip-mosaic/src/proj.ts\n */\n const getProj4Def = (epsgCode: number): string | null => {\n // NAD83 / UTM zones (26910-26920 for continental US)\n if (epsgCode >= 26910 && epsgCode <= 26920) {\n const zone = epsgCode - 26900;\n return `+proj=utm +zone=${zone} +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs`;\n }\n // WGS84\n if (epsgCode === 4326) {\n return '+proj=longlat +datum=WGS84 +no_defs +type=crs';\n }\n // Web Mercator\n if (epsgCode === 3857) {\n return '+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs';\n }\n return null;\n };\n\n // Shader modules for different render modes\n const SetAlpha1 = {\n name: 'set-alpha-1',\n inject: { 'fs:DECKGL_FILTER_COLOR': `color = vec4(color.rgb, 1.0);` },\n };\n\n const FalseColorInfrared = {\n name: 'false-color-infrared',\n inject: {\n 'fs:DECKGL_FILTER_COLOR': `\n float nir = color[3];\n float red = color[0];\n float green = color[1];\n color.rgb = vec3(nir, red, green);\n `,\n },\n };\n\n // NDVI with built-in colormap (cfastie-inspired gradient)\n // This applies the colormap directly in the shader for reliability\n const NDVIWithColormap = {\n name: 'ndvi-with-colormap',\n inject: {\n 'fs:DECKGL_FILTER_COLOR': `\n float nir = color[3];\n float red = color[0];\n float sum = nir + red;\n \n // Prevent division by zero\n float ndvi = sum > 0.001 ? (nir - red) / sum : 0.0;\n \n // Normalize from [-1, 1] to [0, 1]\n float t = clamp((ndvi + 1.0) / 2.0, 0.0, 1.0);\n \n // Cfastie-inspired colormap gradient\n // Low NDVI (water/bare): blue/cyan -> Mid (sparse): yellow -> High (vegetation): green\n vec3 result;\n if (t < 0.4) {\n // Water/bare soil: blue to cyan (NDVI < -0.2)\n float localT = t / 0.4;\n result = mix(vec3(0.0, 0.0, 0.5), vec3(0.5, 0.8, 0.9), localT);\n } else if (t < 0.5) {\n // Bare/sparse: cyan to yellow (NDVI -0.2 to 0)\n float localT = (t - 0.4) / 0.1;\n result = mix(vec3(0.5, 0.8, 0.9), vec3(0.9, 0.9, 0.4), localT);\n } else if (t < 0.6) {\n // Sparse vegetation: yellow to light green (NDVI 0 to 0.2)\n float localT = (t - 0.5) / 0.1;\n result = mix(vec3(0.9, 0.9, 0.4), vec3(0.6, 0.8, 0.2), localT);\n } else if (t < 0.75) {\n // Moderate vegetation: light green to green (NDVI 0.2 to 0.5)\n float localT = (t - 0.6) / 0.15;\n result = mix(vec3(0.6, 0.8, 0.2), vec3(0.1, 0.6, 0.1), localT);\n } else {\n // Dense vegetation: green to dark green (NDVI > 0.5)\n float localT = (t - 0.75) / 0.25;\n result = mix(vec3(0.1, 0.6, 0.1), vec3(0.0, 0.3, 0.0), localT);\n }\n \n color.rgb = result;\n `,\n },\n };\n\n /**\n * Get render modules based on render mode\n */\n function getRenderModules(\n mode: MosaicRenderMode,\n texture: Texture,\n mods: {\n CreateTexture: RasterModule['module'];\n },\n customModules?: (texture: Texture) => RenderModule[],\n ): RasterModule[] {\n if (mode === 'custom' && customModules) {\n return customModules(texture) as RasterModule[];\n }\n\n const base: RasterModule[] = [\n { module: mods.CreateTexture, props: { textureName: texture } },\n ];\n\n if (mode === 'trueColor') {\n return [...base, { module: SetAlpha1 }];\n }\n\n if (mode === 'falseColor') {\n return [...base, { module: FalseColorInfrared }, { module: SetAlpha1 }];\n }\n\n // NDVI - use built-in colormap shader for reliability\n return [...base, { module: NDVIWithColormap }, { module: SetAlpha1 }];\n }\n\n /**\n * Create the mosaic layer using deck.gl-geotiff v0.2.0 MosaicLayer\n */\n function createLayer() {\n const mods = modules.value;\n if (!mods || !props.sources.length) return null;\n\n const { MosaicLayer, COGLayer, CreateTexture, fromUrl, proj4Defs } = mods;\n\n const rawSources = toRaw(props.sources);\n const renderMode = toRaw(props.renderMode);\n const customRenderModules = props.customRenderModules;\n\n // Create geoKeysParser that resolves EPSG codes to proj4 strings\n const geoKeysParser = async (geoKeys: Record<string, unknown>) => {\n const code =\n (geoKeys.ProjectedCSTypeGeoKey as number) ||\n (geoKeys.GeographicTypeGeoKey as number);\n if (!code) throw new Error('No projection code found in geoKeys');\n\n const crsString = `EPSG:${code}`;\n const crs = proj4Defs(crsString);\n if (!crs) throw new Error(`Unknown CRS: ${crsString}`);\n\n // Get proj4 string for the def field (required by deck.gl-geotiff's parseCrs)\n const proj4String = getProj4Def(code);\n if (!proj4String) {\n throw new Error(\n `Unknown EPSG code: ${code}. Add proj4 definition to getProj4Def().`,\n );\n }\n\n return {\n def: proj4String,\n parsed: crs,\n coordinatesUnits: crs.units as 'm' | 'metre' | 'degree',\n };\n };\n\n // Create getTileData function for COGLayer\n const getTileData: COGLayerProps<TextureData>['getTileData'] = async (\n image: GeoTIFFImage,\n options: GetTileDataOptions,\n ) => {\n const rasterData = await image.readRasters({\n ...options,\n interleave: true,\n });\n const texture = options.device.createTexture({\n data: rasterData as unknown as Uint8Array,\n format: 'rgba8unorm',\n width: rasterData.width,\n height: rasterData.height,\n });\n return { texture, width: rasterData.width, height: rasterData.height };\n };\n\n // Use the built-in MosaicLayer from deck.gl-geotiff v0.2.0\n const layer = new MosaicLayer<MosaicSource, GeoTIFF>({\n id: toRaw(props.id),\n sources: rawSources,\n maxCacheSize: toRaw(props.maxCacheSize),\n\n // Fetch GeoTIFF for each source\n getSource: async (source, { signal }) => {\n try {\n const tiff = await fromUrl(source.assets.image.href, {}, signal);\n emit('sourceLoad', source);\n return tiff;\n } catch (error) {\n emit('error', error as Error, source);\n throw error;\n }\n },\n\n // Render each source as a COGLayer\n renderSource: (source, { data, signal }) => {\n if (!data) return null;\n\n return new COGLayer<TextureData>({\n id: `cog-${source.assets.image.href}-${renderMode}`,\n geotiff: data,\n geoKeysParser,\n getTileData,\n renderTile: (tileData) =>\n getRenderModules(\n renderMode,\n tileData.texture,\n { CreateTexture },\n customRenderModules,\n ),\n signal,\n } as COGLayerProps<TextureData>);\n },\n } as MosaicLayerProps<MosaicSource, GeoTIFF>);\n\n return markRaw(layer);\n }\n\n async function initializeLayer() {\n try {\n const [geotiffModule, rasterModule, geotiffLib, proj4Module] =\n await Promise.all([\n import('@developmentseed/deck.gl-geotiff'),\n import('@developmentseed/deck.gl-raster/gpu-modules'),\n import('geotiff'),\n import('proj4'),\n ]);\n\n // Get proj4.defs function\n const proj4Fn = proj4Module.default;\n\n // Register UTM projections for NAIP (zones 10-20 cover continental US)\n // Based on: https://github.com/developmentseed/deck.gl-raster/blob/main/examples/naip-mosaic/src/proj.ts\n for (let zone = 10; zone <= 20; zone++) {\n const epsgCode = 26900 + zone;\n const def = getProj4Def(epsgCode);\n if (def) {\n proj4Fn.defs(`EPSG:${epsgCode}`, def);\n }\n }\n\n modules.value = markRaw({\n MosaicLayer: geotiffModule.MosaicLayer,\n COGLayer: geotiffModule.COGLayer,\n CreateTexture: rasterModule.CreateTexture,\n fromUrl: geotiffLib.fromUrl,\n proj4Defs: proj4Fn.defs,\n });\n\n // Create and add the layer using deck overlay\n const layer = createLayer();\n if (layer) {\n addLayer(layer);\n }\n } catch (error) {\n console.error('[deck.gl-mosaic] Error loading MosaicLayer:', error);\n console.error(\n 'Make sure @developmentseed/deck.gl-geotiff, @developmentseed/deck.gl-raster, geotiff, and proj4 are installed',\n );\n emit('error', error as Error);\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.sources, props.renderMode, props.opacity, props.visible],\n () => {\n if (modules.value) {\n const layer = createLayer();\n if (layer) {\n updateLayer(props.id, layer);\n }\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 import { useDeckOverlay } from '../layers/deckgl/_shared/useDeckOverlay';\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 // Initialize deck.gl overlay at VMap level so all children can access it\n // This provides DeckOverlayKey and DeckLayersKey to all descendants\n useDeckOverlay(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;\n options?: MarkerOptions;\n popupOptions?: PopupOptions;\n cursor?: string;\n }>(),\n {\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 try {\n markerInstance.setLngLat(props.coordinates);\n } catch (error) {\n console.error('Error setting marker coordinates:', error);\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","useMapControl","containerRef","position","deckLayers","isVisible","currentOpacity","getLayerType","getOpacityProperty","updateVisibility","visible","layerType","existingLayer","updatedLayer","updateOpacity","opacityProp","toggleVisibility","handleOpacityInput","target","newValue","applied","checkAndApply","delays","retry","_createElementBlock","_createElementVNode","_hoisted_1","_hoisted_2","_toDisplayString","_normalizeClass","_openBlock","_hoisted_4","_cache","_hoisted_5","_hoisted_6","_hoisted_8","isCollapsed","layerStates","initLayerStates","configType","state","newVisible","getState","toggleCollapse","_hoisted_3","_Fragment","_renderList","$event","_hoisted_9","_hoisted_10","_hoisted_12","categoryItemVisibility","generatedItems","parseMatchExpression","expression","items","defaultColor","i","value","color","v","parseStepExpression","colors","stops","stop","parseInterpolateExpression","startIndex","generateLegendFromPaint","paintValue","expressionType","gradient","effectiveItems","computed","categoryItems","item","gradientItem","first","sizeItems","filterState","gradientStyle","initVisibility","applyFilterToMapLibreLayers","visibleValues","allValues","allVisible","inputExpr","propertyName","applyFilterToDeckglLayers","deckLayer","ext","valueIndices","minIndex","maxIndex","toggleItem","isItemVisible","_normalizeStyle","_hoisted_7","loaded","getMapInstance","setupMap","styleTimeout","layerSpec","updateSource","newMap","onBeforeUnmount","hasValidData","existingLayers","setupLayerEvents","e","initialized","initializeLayer","nextTick","newSource","oldSource","newVisibility","hasLayer","beforeId","paint","layout","newTileUrl","oldTileUrl","newBefore","mapLayerEvents","mapEvents","markerMapEvents","markerDOMEvents","popupEvents","existingSource","currentLayer","currentPaint","currentLayout","eventName","oldMap","newTiles","oldTiles","oldValue","videoElement","protocol","p","PMTiles","_createBlock","VLayerMaplibreRaster","clustersLayerId","clusterCountLayerId","unclusteredLayerId","addClusterLayers","visibility","checkStyleLoaded","newData","sourceId","geojsonData","updateLayerStyle","fillLayerId","lineLayerId","processedData","f","addLayers","fillLayerSpec","lineLayerSpec","initializeLayers","createLayer","ScatterplotLayer","info","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","modules","getProj4Def","epsgCode","SetAlpha1","FalseColorInfrared","NDVIWithColormap","getRenderModules","mode","texture","mods","customModules","base","MosaicLayer","COGLayer","CreateTexture","fromUrl","proj4Defs","rawSources","renderMode","customRenderModules","code","crsString","crs","proj4String","getTileData","image","rasterData","signal","tileData","rasterModule","geotiffLib","n","proj4Fn","zone","def","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","t","j","t0","c0","t1","c1","localT","WindParticleLayer","_a","oldShaders","speedRange","imageUnscale","minSpeed","maxSpeed","attributeManager","params","oldProps","numParticles","maxAge","width","context","uniforms","animate","sourcePositions","targetPositions","sourcePositions64Low","targetPositions64Low","widths","model","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","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","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":";;;;;;;;;;;AASO,SAASA,EAAgBC,GAAsBC,GAAiB;AACrE,QAAMC,IAAWC,EAAOH,GAAKC,CAAQ;AACrC,MAAI,CAACC;AACH,UAAM,IAAI,MAAM,qBAAqBF,EAAI,WAAW,EAAE;AAExD,SAAOE;AACT;ACDO,MAAME,KACX,OAAO,aAAa,GAETC,IAKR,OAAO,YAAY;AAiBjB,SAASC,EACdC,GACAC,IAAiC,IACX;AACtB,QAAM,EAAE,aAAAC,IAAc,GAAA,IAAUD,GAE1BE,IAAkBP,EAAOC,IAAgB,IAAI,GAC7CO,IAAyBR,EAAOE,GAAe,IAAI;AAEzD,MAAIK,KAAmBC;AACrB,WAAO;AAAA,MACL,SAASD;AAAA,MACT,eAAeE,EAAI,EAAI;AAAA,MACvB,QAAQA,EAAI,EAAE;AAAA,MACd,aAAa,MAAM,QAAQ,QAAA;AAAA,MAC3B,GAAGD;AAAA,IAAA;AAIP,QAAME,IAAUC,EAAiC,IAAI,GAC/CC,IAASH,EAAe,EAAE,GAC1BI,IAAgBJ,EAAI,EAAK;AAC/B,MAAIK,IAAoC;AAExC,QAAMC,IAAc,MAAqB;AACvC,UAAMC,IAAcZ,EAAI;AAExB,WADI,CAACY,KACDN,EAAQ,QAAc,QAAQ,QAAA,IAC9BI,MAEJA,IAAc,OAAO,iBAAiB,EACnC,KAAK,CAAC,EAAE,eAAAG,QAAoB;AAC3B,MAAIP,EAAQ,UAEZA,EAAQ,QAAQ,IAAIO,EAAc;AAAA,QAChC,aAAAX;AAAA,QACA,QAAQ,CAAA;AAAA,MAAC,CACV,GAEDU,EAAY,WAAWN,EAAQ,KAAK,GACpCG,EAAc,QAAQ;AAAA,IACxB,CAAC,EACA,MAAM,CAACK,MAAU;AAChB,cAAQ,MAAM,yCAAyCA,CAAK,GAC5DJ,IAAc;AAAA,IAChB,CAAC,GAEIA;AAAA,EACT,GAEMK,IAAa,CAACC,MACVA,EAAyB,IAG7BC,IAAa,MAAM;AACvB,IAAIX,EAAQ,SACVA,EAAQ,MAAM,SAAS,EAAE,QAAQE,EAAO,OAAgB;AAAA,EAE5D,GAEMU,IAAW,CAACF,MAAyB;AACzC,UAAMG,IAAUJ,EAAWC,CAAK,GAC1BI,IAAgBZ,EAAO,MAAM;AAAA,MACjC,CAACa,MAAMN,EAAWM,CAAC,MAAMF;AAAA,IAAA;AAG3B,IAAIC,KAAiB,IACnBZ,EAAO,QAAQ;AAAA,MACb,GAAGA,EAAO,MAAM,MAAM,GAAGY,CAAa;AAAA,MACtCJ;AAAA,MACA,GAAGR,EAAO,MAAM,MAAMY,IAAgB,CAAC;AAAA,IAAA,IAGzCZ,EAAO,QAAQ,CAAC,GAAGA,EAAO,OAAOQ,CAAK,GAGpCV,EAAQ,QACVW,EAAA,IAEAN,EAAA,EAAc,KAAKM,CAAU;AAAA,EAEjC,GAEMK,IAAc,CAACH,MAA0B;AAC7C,IAAAX,EAAO,QAAQA,EAAO,MAAM,OAAO,CAACa,MAAMN,EAAWM,CAAC,MAAMF,CAAO,GACnEF,EAAA;AAAA,EACF,GAEMM,IAAc,CAACJ,GAAiBK,MAA4B;AAChE,UAAMC,IAAQjB,EAAO,MAAM,UAAU,CAACa,MAAMN,EAAWM,CAAC,MAAMF,CAAO;AACrE,IAAIM,KAAS,KACXjB,EAAO,QAAQ;AAAA,MACb,GAAGA,EAAO,MAAM,MAAM,GAAGiB,CAAK;AAAA,MAC9BD;AAAA,MACA,GAAGhB,EAAO,MAAM,MAAMiB,IAAQ,CAAC;AAAA,IAAA,GAEjCR,EAAA,KAEAC,EAASM,CAAQ;AAAA,EAErB,GAEME,IAAY,MACT,CAAC,GAAGlB,EAAO,KAAK;AAGzB,SAAAmB;AAAA,IACE3B;AAAA,IACA,CAACY,MAAgB;AACf,MAAIA,KAAe,CAACN,EAAQ,UACtBM,EAAY,kBACdD,EAAA,IAEAC,EAAY,KAAK,cAAc,MAAM;AACnC,QAAAD,EAAA;AAAA,MACF,CAAC;AAAA,IAGP;AAAA,IACA,EAAE,WAAW,GAAA;AAAA,EAAK,GAGpBiB,GAAQ/B,IAAgBS,CAAO,GAC/BsB,GAAQ9B,GAAe;AAAA,IACrB,UAAAoB;AAAA,IACA,aAAAI;AAAA,IACA,aAAAC;AAAA,IACA,WAAAG;AAAA,EAAA,CACD,GAEDG,GAAY,MAAM;AAChB,QAAIvB,EAAQ,SAASN,EAAI;AACvB,UAAI;AACF,QAAAA,EAAI,MAAM,cAAcM,EAAQ,KAAK,GACrCA,EAAQ,MAAM,SAAA;AAAA,MAChB,SAASQ,GAAO;AACd,gBAAQ,MAAM,wCAAwCA,CAAK;AAAA,MAC7D;AAEF,IAAAR,EAAQ,QAAQ,MAChBE,EAAO,QAAQ,CAAA,GACfC,EAAc,QAAQ,IACtBC,IAAc;AAAA,EAChB,CAAC,GAEM;AAAA,IACL,SAAAJ;AAAA,IACA,QAAAE;AAAA,IACA,eAAAC;AAAA,IACA,aAAAE;AAAA,IACA,UAAAO;AAAA,IACA,aAAAI;AAAA,IACA,aAAAC;AAAA,IACA,WAAAG;AAAA,EAAA;AAEJ;AAEO,SAASI,KAAgB;AAC9B,QAAMC,IAAWnC,EAAOE,GAAe,IAAI,GACrCQ,IAAUV,EAAOC,IAAgB,IAAI;AAE3C,MAAI,CAACkC;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAIJ,SAAO;AAAA,IACL,GAAGA;AAAA,IACH,SAAAzB;AAAA,EAAA;AAEJ;AC9MA,MAAM0B,IAAwC,OAAO,KAAK,GACpDC,KAAmD,OAAO,UAAU;;;;;;;ACCxE,UAAMC,IAA4C;AAAA,MAChD,SAAS;AAAA,MACT,mBAAmB;AAAA,IAAA,GAGfC,IAAQC,GAWRC,IAAQC,GAAA,GAERtC,IAAMR,EAAawC,CAAM;AAE/B,IAAAO,EAAU,MAAM;AACd,MAAAC,EAAA;AAAA,IACF,CAAC;AAED,UAAMA,IAAa,MAAY;AAC7B,UAAIvC,IAAUiC;AACd,MAAIC,EAAM,YACRlC,IAAU;AAAA,QACR,GAAGkC,EAAM;AAAA,MAAA,IAGTE,KAASA,EAAM,gBACjBpC,EAAQ,oBAAoBoC,EAAM,QAAA,EAAU,CAAC,EAC1C;AAEL,YAAMI,IAAU,IAAIC,GAAmBzC,CAAO;AAC9C,MAAAD,EAAI,MAAO,WAAWyC,GAASN,EAAM,QAAQ;AAAA,IAC/C;qBAIAQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;ACzCb,UAAMV,IAA2C;AAAA,MAC/C,WAAW;AAAA,IAAA,GAGPC,IAAQC,GAWRpC,IAAMR,EAAawC,CAAM;AAE/B,IAAAO,EAAU,MAAM;AACd,MAAAC,EAAA;AAAA,IACF,CAAC;AAED,UAAMA,IAAa,MAAY;AAC7B,YAAMC,IAAU,IAAII,GAAkBV,EAAM,WAAWD,CAAc;AACrE,MAAAlC,EAAI,MAAO,WAAWyC,GAASN,EAAM,QAAQ;AAAA,IAC/C;;;;IC9BWW,KAAmC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;;;;;;ACCE,UAAMZ,IAA0C;AAAA,MAC9C,kBAAkB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ,CAAC,GAAG,CAAC;AAAA,QACb,SAAS;AAAA,MAAA;AAAA,MAEX,iBAAiB;AAAA,QACf,oBAAoB;AAAA,QACpB,YAAY;AAAA,QACZ,SAAS;AAAA,MAAA;AAAA,MAEX,mBAAmB;AAAA,MACnB,oBAAoB;AAAA,MACpB,kBAAkB;AAAA,IAAA,GAGdC,IAAQC,GAWRW,IAAOC,GAEPhD,IAAMR,EAAawC,CAAM;AAE/B,IAAAO,EAAU,MAAM;AACd,MAAAC,EAAA;AAAA,IACF,CAAC;AAED,UAAMA,IAAa,MAAY;AAC7B,YAAMC,IAAU,IAAIQ,GAAiBd,EAAM,WAAWD,CAAc;AACpE,MAAAlC,EAAI,MAAO,WAAWyC,GAASN,EAAM,QAAQ,GAC7Ce,GAAO,QAAQ,CAACC,MAAkB;AAChC,QAAAV,EAAQ,GAAGU,GAAO,MAAM;AACtB,UAAAJ,EAAKI,CAAK;AAAA,QACZ,CAAC;AAAA,MACH,CAAC;AAAA,IACH;;;;;;;;;;;AC5CA,UAAMjB,IAAoC;AAAA,MACxC,aAAa;AAAA,MACb,UAAU;AAAA,MACV,gBAAgB;AAAA,IAAA,GAGZC,IAAQC,GAWRpC,IAAMJ,EAAOoC,CAAM;AAEzB,IAAAO,EAAU,MAAM;AACd,MAAAC,EAAA;AAAA,IACF,CAAC;AAED,UAAMA,IAAa,MAAY;AAC7B,YAAMC,IAAU,IAAIW,GAAkBjB,EAAM,WAAWD,CAAc;AACrE,MAAAlC,EAAK,MAAO,WAAWyC,GAASN,EAAM,QAAQ;AAAA,IAChD;;;;;;;;;;;AC1BA,UAAMD,IAAsC;AAAA,MAC1C,UAAU;AAAA,MACV,MAAM;AAAA,IAAA,GAGFC,IAAQC,GAWRpC,IAAMJ,EAAOoC,CAAM;AAEzB,IAAAO,EAAU,MAAM;AACd,MAAAC,EAAA;AAAA,IACF,CAAC;AAED,UAAMA,IAAa,MAAY;AAC7B,YAAMC,IAAU,IAAIY,GAAalB,EAAM,WAAWD,CAAc;AAChE,MAAAlC,GAAK,MAAO,WAAWyC,GAASN,EAAM,QAAQ;AAAA,IAChD;qBAIAQ,EAAaC,EAAA,QAAA,SAAA;AAAA;ICnCFU,KAA+B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;;;;;;;ACFE,UAAMpB,IAAsC;AAAA,MAC1C,WAAW;AAAA,MACX,WAAW;AAAA,MACX,aAAa;AAAA,MACb,UAAU;AAAA,MACV,UAAU;AAAA,IAAA,GAGNC,IAAQC,GAaRW,IAAOC,GAEPhD,IAAMR,EAAawC,CAAM,GA4BzBS,IAAUpC,EAAiC,IAAI;AAErD,IAAAkC,EAAU,YAAY;AACpB,YAAMC,EAAA;AAAA,IACR,CAAC,GAEDX,GAAY,MAAM;AAChB,MAAIY,EAAQ,SAASzC,EAAI,UACvBA,EAAI,MAAM,cAAcyC,EAAQ,KAAuC,GACvEA,EAAQ,QAAQ;AAAA,IAEpB,CAAC;AAED,UAAMD,IAAa,YAA2B;AAC5C,YAAM,EAAE,cAAAe,EAAA,IAAiB,MAAM,OAAO,mBAAmB;AAEzD,MAAAd,EAAQ,QAAQ,IAAIc;AAAA,QAClBpB,EAAM,WAAWD;AAAA,MAAA,GAGnBlC,EAAI,MAAO;AAAA,QACTyC,EAAQ;AAAA,QACRN,EAAM;AAAA,MAAA,GAGRe,GAAO,QAAQ,CAACC,MAAkB;AAChC,QAAAV,EAAQ,MAAO,GAAGU,GAAO,CAACK,MAAmB;AAC3C,UAAAT,EAAKI,GAAOK,CAAI;AAAA,QAClB,CAAC;AAAA,MACH,CAAC,GAEGrB,EAAM,cACRM,EAAQ,MAAM,eAAeN,EAAM,UAAU;AAAA,IAEjD;AAEA,WAAAsB,EAAa;AAAA,MACX,gBAAgB,CAACC,MACfjB,EAAQ,OAAO,eAAeiB,CAAM;AAAA,MACtC,kBAAkB,CAACC,MAAgBlB,EAAQ,OAAO,iBAAiBkB,CAAE;AAAA,MACrE,iBAAiB,CAACA,MAAgBlB,EAAQ,OAAO,gBAAgBkB,CAAE;AAAA,MACnE,cAAc,CAACC,MAAiBnB,EAAQ,OAAO,aAAamB,CAAI;AAAA,MAChE,gBAAgB,CAACC,MACfpB,EAAQ,OAAO,eAAeoB,CAAM;AAAA,MACtC,YAAY,CAACC,MAAoBrB,EAAQ,OAAO,WAAWqB,CAAO;AAAA,MAClE,aAAa,CAACC,MAAsBtB,EAAQ,OAAO,YAAYsB,CAAQ;AAAA,MACvE,kBAAkB,CAACC,MAAiBvB,EAAQ,OAAO,iBAAiBuB,CAAG;AAAA,MACvE,mBAAmB,CAACC,GAAaC,MAC/BzB,EAAQ,OAAO,kBAAkBwB,GAAKC,CAAG;AAAA,MAC3C,qBAAqB,MAAMzB,EAAQ,OAAO,oBAAA;AAAA,MAC1C,YAAY,CAAC0B,MAAmB1B,EAAQ,OAAO,WAAW0B,CAAM;AAAA,MAChE,mBAAmB,CAACC,MAClB3B,EAAQ,OAAO,kBAAkB2B,CAAO;AAAA,MAC1C,QAAQ,MAAM3B,EAAQ,OAAO,OAAA;AAAA,MAC7B,QAAQ,MAAMA,EAAQ,OAAO,OAAA;AAAA,MAC7B,UAAU,MAAMA,EAAQ,OAAO,SAAA;AAAA,MAC/B,UAAU,MAAMA,EAAQ,OAAO,SAAA;AAAA,MAC/B,gBAAgB,MAAMA,EAAQ,OAAO,eAAA;AAAA,MACrC,eAAe,CAACkB,MAAgBlB,EAAQ,OAAO,cAAckB,CAAE;AAAA,MAC/D,aAAa,CAACA,MAAgBlB,EAAQ,OAAO,YAAYkB,CAAE;AAAA,MAC3D,YAAY,MAAMlB,EAAQ;AAAA,IAAA,CAC3B;;;;ACjHI,SAAS4B,GACdrE,GACAsE,GACAC,GACM;AACN,MAAI9B,IAA2B;AAE/B,EAAAF,EAAU,MAAM;AACd,IAAI,CAACvC,EAAI,SAAS,CAACsE,EAAa,UAEhC7B,IAAU;AAAA,MACR,OAAO,OACL6B,EAAa,OAAO,UAAU,IAAI,iBAAiB,GAC5CA,EAAa;AAAA,MAEtB,UAAU,MAAY;AAAA,MAAC;AAAA,IAAA,GAGzBtE,EAAI,MAAM,WAAWyC,GAAS8B,CAAQ;AAAA,EACxC,CAAC,GAED1C,GAAY,MAAM;AAChB,QAAI7B,EAAI,SAASyC;AACf,UAAI;AACF,QAAAzC,EAAI,MAAM,cAAcyC,CAAO;AAAA,MACjC,QAAQ;AAAA,MAER;AAAA,EAEJ,CAAC;AACH;;;;;;;;;;;;;;;;;;;;;;;;;ACjCE,UAAMN,IAAQC,GAkBRW,IAAOC,GAOPhD,IAAMR,EAAawC,CAAM,GACzBwC,IAAa5E,EAAOE,GAAe,IAAI,GACvCwE,IAAejE,EAAwB,IAAI,GAC3CoE,IAAYpE,EAAI8B,EAAM,OAAO,GAC7BuC,IAAiBrE,EAAI8B,EAAM,OAAO;AAExC,IAAAkC,GAAcrE,GAAKsE,GAAcnC,EAAM,QAAQ;AAG/C,UAAMwC,IAAe,MACfxC,EAAM,YAAkBA,EAAM,YAC7BnC,EAAI,QACaA,EAAI,MAAM,SAASmC,EAAM,OAAO,IAC5B,aACtBqC,KACaA,EAAW,UAAA,EAC0B;AAAA,MAClD,CAACnD,MAAMA,EAAE,OAAOc,EAAM;AAAA,IAAA,IAEF,WAEjB,OAVgB,MAanByC,IAAqB,MAAqB;AAC9C,UAAI,CAAC5E,EAAI,SAAS2E,EAAA,MAAmB,WAAY,QAAO;AAExD,YAAM3D,IAAQhB,EAAI,MAAM,SAASmC,EAAM,OAAO;AAC9C,UAAI,CAACnB,EAAO,QAAO;AAEnB,cAAQA,EAAM,MAAA;AAAA,QACZ,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MAAA;AAAA,IAEb,GAEM6D,IAAmB,CAACC,MAAqB;AAC7C,YAAMC,IAAYJ,EAAA;AAElB,UAAII,MAAc,YAAY;AAC5B,YAAI,CAAC/E,EAAI,MAAO;AAEhB,YAAI,CADUA,EAAI,MAAM,SAASmC,EAAM,OAAO,GAClC;AACV,kBAAQ,KAAK,6BAA6BA,EAAM,OAAO,EAAE;AACzD;AAAA,QACF;AACA,QAAAnC,EAAI,MAAM;AAAA,UACRmC,EAAM;AAAA,UACN;AAAA,UACA2C,IAAU,YAAY;AAAA,QAAA;AAAA,MAE1B,WAAWC,MAAc,UAAU;AACjC,YAAI,CAACP,GAAY;AACf,kBAAQ;AAAA,YACN,4CAA4CrC,EAAM,OAAO;AAAA,UAAA;AAE3D;AAAA,QACF;AAEA,cAAM6C,IADSR,EAAW,UAAA,EAGxB,KAAK,CAACnD,MAAMA,EAAE,OAAOc,EAAM,OAAO;AACpC,YAAI,CAAC6C,GAAe;AAClB,kBAAQ,KAAK,4BAA4B7C,EAAM,OAAO,EAAE;AACxD;AAAA,QACF;AACA,YAAI,OAAO6C,EAAc,SAAU,YAAY;AAC7C,gBAAMC,IAAeD,EAAc,MAAM,EAAE,SAAAF,GAAS;AACpD,UAAAN,EAAW,YAAYrC,EAAM,SAAS8C,CAAY;AAAA,QACpD;AAAA,MACF,OAAO;AACL,gBAAQ,KAAK,2CAA2C9C,EAAM,OAAO,EAAE;AACvE;AAAA,MACF;AAEA,MAAAY,EAAK,qBAAqB+B,CAAO,GACjC/B,EAAK,kBAAkB+B,CAAO;AAAA,IAChC,GAEMI,IAAgB,CAACpB,MAAoB;AACzC,YAAMiB,IAAYJ,EAAA;AAElB,UAAII,MAAc,YAAY;AAC5B,cAAMI,IAAcP,EAAA;AACpB,YAAI,CAAC5E,EAAI,SAAS,CAACmF,EAAa;AAEhC,YAAI,CADUnF,EAAI,MAAM,SAASmC,EAAM,OAAO,GAClC;AACV,kBAAQ,KAAK,6BAA6BA,EAAM,OAAO,EAAE;AACzD;AAAA,QACF;AACA,QAAAnC,EAAI,MAAM,iBAAiBmC,EAAM,SAASgD,GAAarB,CAAO;AAAA,MAChE,WAAWiB,MAAc,UAAU;AACjC,YAAI,CAACP,GAAY;AACf,kBAAQ;AAAA,YACN,4CAA4CrC,EAAM,OAAO;AAAA,UAAA;AAE3D;AAAA,QACF;AAEA,cAAM6C,IADSR,EAAW,UAAA,EAGxB,KAAK,CAACnD,MAAMA,EAAE,OAAOc,EAAM,OAAO;AACpC,YAAI,CAAC6C,GAAe;AAClB,kBAAQ,KAAK,4BAA4B7C,EAAM,OAAO,EAAE;AACxD;AAAA,QACF;AACA,YAAI,OAAO6C,EAAc,SAAU,YAAY;AAC7C,gBAAMC,IAAeD,EAAc,MAAM,EAAE,SAAAlB,GAAS;AACpD,UAAAU,EAAW,YAAYrC,EAAM,SAAS8C,CAAY;AAAA,QACpD;AAAA,MACF,OAAO;AACL,gBAAQ,KAAK,2CAA2C9C,EAAM,OAAO,EAAE;AACvE;AAAA,MACF;AAEA,MAAAY,EAAK,kBAAkBe,CAAO,GAC9Bf,EAAK,kBAAkBe,CAAO;AAAA,IAChC,GAEMsB,IAAmB,MAAM;AAC7B,MAAAX,EAAU,QAAQ,CAACA,EAAU;AAAA,IAC/B,GAEMY,IAAqB,CAAClC,MAAiB;AAC3C,YAAMmC,IAASnC,EAAM;AACrB,MAAAuB,EAAe,QAAQ,OAAOY,EAAO,KAAK,IAAI;AAAA,IAChD;AAEA,WAAA3D,EAAM8C,GAAW,CAACc,MAAa;AAC7B,MAAAV,EAAiBU,CAAQ;AAAA,IAC3B,CAAC,GAED5D,EAAM+C,GAAgB,CAACa,MAAa;AAClC,MAAAL,EAAcK,CAAQ;AAAA,IACxB,CAAC,GAED5D;AAAA,MACE,MAAMQ,EAAM;AAAA,MACZ,CAACoD,MAAa;AACZ,QAAAd,EAAU,QAAQc;AAAA,MACpB;AAAA,IAAA,GAGF5D;AAAA,MACE,MAAMQ,EAAM;AAAA,MACZ,CAACoD,MAAa;AACZ,QAAAb,EAAe,QAAQa;AAAA,MACzB;AAAA,IAAA,GAIFhD,EAAU,MAAM;AACd,UAAIiD,IAAU;AAEd,YAAMC,IAAgB,MAChBD,IAAgB,KAEFb,EAAA,KAEhBa,IAAU,IACVX,EAAiBJ,EAAU,KAAK,GAChCS,EAAcR,EAAe,KAAK,GAC3B,MAEF;AAIT,UAAIe,IAAiB;AAIrB,YAAMC,IAAS,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAM,KAAM,KAAM,KAAM,GAAI;AACrE,UAAIjE,IAAQ;AAEZ,YAAMkE,IAAQ,MAAM;AAClB,QAAIF,EAAA,KAAmBhE,KAASiE,EAAO,UACvC,WAAW,MAAM;AACf,UAAAjE,KACAkE,EAAA;AAAA,QACF,GAAGD,EAAOjE,CAAK,CAAC;AAAA,MAClB;AAEA,MAAAkE,EAAA;AAAA,IACF,CAAC,mBAIDC,EA6DM,OAAA;AAAA,eA7DG;AAAA,MAAJ,KAAItB;AAAA,MAAe,OAAM;AAAA,IAAA;MAC5BuB,EA0CM,OA1CNC,IA0CM;AAAA,QAzCJD,EAAsD,QAAtDE,IAAsDC,EAAf5D,EAAA,KAAK,GAAA,CAAA;AAAA,QAC5CyD,EAuCS,UAAA;AAAA,UAtCP,MAAK;AAAA,UACL,OAAKI,EAAA,CAAC,0BAAwB,EAAA,aAAA,CACNxB,EAAA,MAAA,CAAS,CAAA;AAAA,UAChC,gBAAcA,EAAA;AAAA,UACd,OAAOA,EAAA,QAAS,eAAA;AAAA,UAChB,SAAOW;AAAA,QAAA;UAGAX,EAAA,SADRyB,KAAAN,EAqBM,OArBNO,IAqBM,CAAA,GAAAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,YAdJP,EAME,QAAA;AAAA,cALA,GAAE;AAAA,cACF,QAAO;AAAA,cACP,gBAAa;AAAA,cACb,kBAAe;AAAA,cACf,mBAAgB;AAAA,YAAA;YAElBA,EAME,UAAA;AAAA,cALA,IAAG;AAAA,cACH,IAAG;AAAA,cACH,GAAE;AAAA,cACF,QAAO;AAAA,cACP,gBAAa;AAAA,YAAA;mBAGjBK,KAAAN,EAQM,OARNS,IAQM,CAAA,GAAAD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,YAPJP,EAME,QAAA;AAAA,cALA,GAAE;AAAA,cACF,QAAO;AAAA,cACP,gBAAa;AAAA,cACb,kBAAe;AAAA,cACf,mBAAgB;AAAA,YAAA;;;;MAMxBA,EAaM,OAbNS,IAaM;AAAA,QAZJT,EAQE,SAAA;AAAA,UAPA,MAAK;AAAA,UACL,KAAI;AAAA,UACJ,KAAI;AAAA,UACH,OAAO,KAAK,MAAMnB,EAAA,QAAc,GAAA;AAAA,UACjC,OAAM;AAAA,UACL,WAAWD,EAAA;AAAA,UACX,SAAOY;AAAA,QAAA;QAEVQ,EAEC,QAFDU,IAECP,EADK,KAAK,MAAMtB,EAAA,QAAc,GAAA,CAAA,IAAU,KAAC,CAAA;AAAA,MAAA;MAI5C/B,EAAaC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjRf,UAAMT,IAAQC,GAgBRW,IAAOC,GAMPhD,IAAMR,EAAawC,CAAM,GACzBwC,IAAa5E,EAAOE,GAAe,IAAI,GACvCwE,IAAejE,EAAwB,IAAI,GAC3CmG,IAAcnG,EAAI8B,EAAM,SAAS,GAEjCsE,IAAcpG;AAAA,0BACd,IAAA;AAAA,IAAI;AAGV,IAAAgE,GAAcrE,GAAKsE,GAAcnC,EAAM,QAAQ;AAE/C,UAAMuE,IAAkB,MAAM;AAC5B,iBAAW1F,KAASmB,EAAM;AACxB,QAAAsE,EAAY,MAAM,IAAIzF,EAAM,IAAI;AAAA,UAC9B,SAASA,EAAM,WAAW;AAAA,UAC1B,SAASA,EAAM,WAAW;AAAA,QAAA,CAC3B;AAAA,IAEL,GAEM2D,IAAe,CACnBxD,GACAwF,MAEIA,MACC3G,EAAI,QAEaA,EAAI,MAAM,SAASmB,CAAO,IACtB,aAEtBqD,KACaA,EAAW,UAAA,EAC0B;AAAA,MAClD,CAACnD,MAAMA,EAAE,OAAOF;AAAA,IAAA,IAEI,WAEjB,OAZgB,OAenByD,IAAqB,CAACzD,MAAmC;AAC7D,UAAI,CAACnB,EAAI,MAAO,QAAO;AACvB,YAAMgB,IAAQhB,EAAI,MAAM,SAASmB,CAAO;AACxC,UAAI,CAACH,EAAO,QAAO;AAGnB,cADkBA,EAAM,MAChB;AAAA,QACN,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MAAA;AAAA,IAEb,GAEM6D,IAAmB,CACvB1D,GACA2D,GACA6B,MACG;AACH,YAAM5B,IAAYJ,EAAaxD,GAASwF,CAAU;AAElD,UAAI5B,MAAc,YAAY;AAC5B,YAAI,CAAC/E,EAAI,MAAO;AAEhB,YAAI,CADUA,EAAI,MAAM,SAASmB,CAAO,GAC5B;AACV,kBAAQ;AAAA,YACN,kDAAkDA,CAAO;AAAA,UAAA;AAE3D;AAAA,QACF;AACA,QAAAnB,EAAI,MAAM;AAAA,UACRmB;AAAA,UACA;AAAA,UACA2D,IAAU,YAAY;AAAA,QAAA;AAAA,MAE1B,WAAWC,MAAc,UAAU;AACjC,YAAI,CAACP,GAAY;AACf,kBAAQ;AAAA,YACN,iEAAiErD,CAAO;AAAA,UAAA;AAE1E;AAAA,QACF;AAEA,cAAM6D,IADSR,EAAW,UAAA,EAGxB,KAAK,CAACnD,MAAMA,EAAE,OAAOF,CAAO;AAC9B,YAAI,CAAC6D,GAAe;AAClB,kBAAQ;AAAA,YACN,iDAAiD7D,CAAO;AAAA,UAAA;AAE1D;AAAA,QACF;AACA,YAAI,OAAO6D,EAAc,SAAU,YAAY;AAC7C,gBAAMC,IAAeD,EAAc,MAAM,EAAE,SAAAF,GAAS;AACpD,UAAAN,EAAW,YAAYrD,GAAS8D,CAAY;AAAA,QAC9C;AAAA,MACF,OAAO;AACL,gBAAQ,KAAK,yCAAyC9D,CAAO,EAAE;AAC/D;AAAA,MACF;AAEA,MAAA4B,EAAK,qBAAqB,EAAE,SAAA5B,GAAS,SAAA2D,EAAA,CAAS;AAAA,IAChD,GAEMI,IAAgB,CACpB/D,GACA2C,GACA6C,MACG;AACH,YAAM5B,IAAYJ,EAAaxD,GAASwF,CAAU;AAElD,UAAI5B,MAAc,YAAY;AAC5B,cAAMI,IAAcP,EAAmBzD,CAAO;AAC9C,YAAI,CAACnB,EAAI,SAAS,CAACmF,EAAa;AAEhC,YAAI,CADUnF,EAAI,MAAM,SAASmB,CAAO,GAC5B;AACV,kBAAQ;AAAA,YACN,kDAAkDA,CAAO;AAAA,UAAA;AAE3D;AAAA,QACF;AACA,QAAAnB,EAAI,MAAM,iBAAiBmB,GAASgE,GAAarB,CAAO;AAAA,MAC1D,WAAWiB,MAAc,UAAU;AACjC,YAAI,CAACP,GAAY;AACf,kBAAQ;AAAA,YACN,iEAAiErD,CAAO;AAAA,UAAA;AAE1E;AAAA,QACF;AAEA,cAAM6D,IADSR,EAAW,UAAA,EAGxB,KAAK,CAACnD,MAAMA,EAAE,OAAOF,CAAO;AAC9B,YAAI,CAAC6D,GAAe;AAClB,kBAAQ;AAAA,YACN,iDAAiD7D,CAAO;AAAA,UAAA;AAE1D;AAAA,QACF;AACA,YAAI,OAAO6D,EAAc,SAAU,YAAY;AAC7C,gBAAMC,IAAeD,EAAc,MAAM,EAAE,SAAAlB,GAAS;AACpD,UAAAU,EAAW,YAAYrD,GAAS8D,CAAY;AAAA,QAC9C;AAAA,MACF,OAAO;AACL,gBAAQ,KAAK,yCAAyC9D,CAAO,EAAE;AAC/D;AAAA,MACF;AAEA,MAAA4B,EAAK,kBAAkB,EAAE,SAAA5B,GAAS,SAAA2C,EAAA,CAAS;AAAA,IAC7C,GAEMsB,IAAmB,CAACpE,MAAuB;AAC/C,YAAM4F,IAAQH,EAAY,MAAM,IAAIzF,EAAM,EAAE;AAC5C,UAAI,CAAC4F,EAAO;AAEZ,YAAMC,IAAa,CAACD,EAAM;AAC1B,MAAAA,EAAM,UAAUC,GAChBhC,EAAiB7D,EAAM,IAAI6F,GAAY7F,EAAM,IAAI;AAAA,IACnD,GAEMqE,IAAqB,CAACrE,GAAoBmC,MAAiB;AAC/D,YAAMmC,IAASnC,EAAM,QACfW,IAAU,OAAOwB,EAAO,KAAK,IAAI,KAEjCsB,IAAQH,EAAY,MAAM,IAAIzF,EAAM,EAAE;AAC5C,MAAK4F,MAELA,EAAM,UAAU9C,GAChBoB,EAAclE,EAAM,IAAI8C,GAAS9C,EAAM,IAAI;AAAA,IAC7C,GAEM8F,IAAW,CAAC3F,MACTsF,EAAY,MAAM,IAAItF,CAAO,KAAK,EAAE,SAAS,IAAM,SAAS,EAAA,GAG/D4F,IAAiB,MAAM;AAC3B,MAAI5E,EAAM,gBACRqE,EAAY,QAAQ,CAACA,EAAY;AAAA,IAErC;AAEA,WAAA7E;AAAA,MACE,MAAMQ,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAuE,EAAA;AAAA,MACF;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,GAGf/E;AAAA,MACE,MAAMQ,EAAM;AAAA,MACZ,CAACoD,MAAa;AACZ,QAAAiB,EAAY,QAAQjB;AAAA,MACtB;AAAA,IAAA,GAGFhD,EAAU,MAAM;AACd,MAAAmE,EAAA;AAEA,iBAAW1F,KAASmB,EAAM,QAAQ;AAChC,cAAMyE,IAAQE,EAAS9F,EAAM,EAAE;AAC/B,QAAA6D,EAAiB7D,EAAM,IAAI4F,EAAM,SAAS5F,EAAM,IAAI,GACpDkE,EAAclE,EAAM,IAAI4F,EAAM,SAAS5F,EAAM,IAAI;AAAA,MACnD;AAAA,IACF,CAAC,mBAID4E,EAgGM,OAAA;AAAA,eA/FA;AAAA,MAAJ,KAAItB;AAAA,MACJ,OAAK2B,EAAA,CAAC,iBAAe,EAAA,gBACKO,EAAA,OAAW,CAAA;AAAA,IAAA;MAG7BpE,EAAA,oBADRwD,EAuBS,UAAA;AAAA;QArBP,MAAK;AAAA,QACL,OAAM;AAAA,QACL,SAAOmB;AAAA,MAAA;QAERlB,EAAoD,QAApDC,IAAoDE,EAAf5D,EAAA,KAAK,GAAA,CAAA;AAAA,cAC1CwD,EAeM,OAAA;AAAA,UAdJ,OAAKK,EAAA,CAAC,yBAAuB,EAAA,gBACHO,EAAA,MAAA,CAAW,CAAA;AAAA,UACrC,OAAM;AAAA,UACN,QAAO;AAAA,UACP,SAAQ;AAAA,UACR,MAAK;AAAA,QAAA;UAELX,EAME,QAAA;AAAA,YALA,GAAE;AAAA,YACF,QAAO;AAAA,YACP,gBAAa;AAAA,YACb,kBAAe;AAAA,YACf,mBAAgB;AAAA,UAAA;;aAItBK,EAAA,GAAAN,EAEM,OAFNG,IAEM;AAAA,QADJF,EAAoD,QAApDmB,IAAoDhB,EAAf5D,EAAA,KAAK,GAAA,CAAA;AAAA,MAAA;MAGhCoE,EAAA,qBAAZN,KAAAN,EA4DM,OA5DNO,IA4DM;AAAA,gBA3DJP,EA0DMqB,IAAA,MAAAC,GA1De9E,EAAA,QAAM,CAAfpB,YAAZ4E,EA0DM,OAAA;AAAA,UA1DwB,KAAK5E,EAAM;AAAA,UAAI,OAAM;AAAA,QAAA;UACjD6E,EA0CM,OA1CNQ,IA0CM;AAAA,YAzCJR,EAA+D,QAA/DS,IAA+DN,EAArBhF,EAAM,KAAK,GAAA,CAAA;AAAA,YACrD6E,EAuCS,UAAA;AAAA,cAtCP,MAAK;AAAA,cACL,OAAKI,EAAA,CAAC,wBAAsB,EAAA,aAAA,CACJa,EAAS9F,EAAM,EAAE,EAAE,QAAA,CAAO,CAAA;AAAA,cACjD,gBAAc8F,EAAS9F,EAAM,EAAE,EAAE;AAAA,cACjC,OAAO8F,EAAS9F,EAAM,EAAE,EAAE,UAAO,eAAA;AAAA,cACjC,SAAK,CAAAmG,MAAE/B,EAAiBpE,CAAK;AAAA,YAAA;cAGtB8F,EAAS9F,EAAM,EAAE,EAAE,WAD3BkF,KAAAN,EAqBM,OArBNW,IAqBM,CAAA,GAAAH,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,gBAdJP,EAME,QAAA;AAAA,kBALA,GAAE;AAAA,kBACF,QAAO;AAAA,kBACP,gBAAa;AAAA,kBACb,kBAAe;AAAA,kBACf,mBAAgB;AAAA,gBAAA;gBAElBA,EAME,UAAA;AAAA,kBALA,IAAG;AAAA,kBACH,IAAG;AAAA,kBACH,GAAE;AAAA,kBACF,QAAO;AAAA,kBACP,gBAAa;AAAA,gBAAA;uBAGjBK,KAAAN,EAQM,OARNwB,IAQM,CAAA,GAAAhB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,gBAPJP,EAME,QAAA;AAAA,kBALA,GAAE;AAAA,kBACF,QAAO;AAAA,kBACP,gBAAa;AAAA,kBACb,kBAAe;AAAA,kBACf,mBAAgB;AAAA,gBAAA;;;;UAKxBA,EAaM,OAbNwB,IAaM;AAAA,YAZJxB,EAQE,SAAA;AAAA,cAPA,MAAK;AAAA,cACL,KAAI;AAAA,cACJ,KAAI;AAAA,cACH,OAAO,KAAK,MAAMiB,EAAS9F,EAAM,EAAE,EAAE,UAAO,GAAA;AAAA,cAC7C,OAAM;AAAA,cACL,WAAW8F,EAAS9F,EAAM,EAAE,EAAE;AAAA,cAC9B,SAAK,CAAAmG,MAAE9B,EAAmBrE,GAAOmG,CAAM;AAAA,YAAA;YAE1CtB,EAEC,QAFDyB,IAECtB,EADK,KAAK,MAAMc,EAAS9F,EAAM,EAAE,EAAE,kBAAiB,KAAC,CAAA;AAAA,UAAA;;;MAM5D2B,EAAaC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;AC3Uf,UAAMT,IAAQC,GAsBRW,IAAOC,GAMPhD,IAAMR,EAAawC,CAAM,GACzBwC,IAAa5E,EAAOE,GAAe,IAAI,GACvCwE,IAAejE,EAAwB,IAAI,GAC3CmG,IAAcnG,EAAI8B,EAAM,SAAS,GACjCoF,IAAyBlH,EAAmC,oBAAI,KAAK,GACrEmH,IAAiBnH,EAAkB,EAAE;AAE3C,IAAAgE,GAAcrE,GAAKsE,GAAcnC,EAAM,QAAQ;AAE/C,UAAMsF,IAAuB,CAC3BC,MACyB;AACzB,YAAMC,IAA8B,CAAA,GAC9BC,IAAeF,EAAWA,EAAW,SAAS,CAAC;AAErD,eAASG,IAAI,GAAGA,IAAIH,EAAW,SAAS,GAAGG,KAAK,GAAG;AACjD,cAAMC,IAAQJ,EAAWG,CAAC,GACpBE,IAAQL,EAAWG,IAAI,CAAC;AAE9B,YAAI,MAAM,QAAQC,CAAK;AACrB,qBAAWE,KAAKF;AACd,YAAAH,EAAM,KAAK;AAAA,cACT,OAAOK;AAAA,cACP,OAAO,OAAOA,CAAC;AAAA,cACf,OAAAD;AAAA,cACA,SAAS;AAAA,YAAA,CACV;AAAA;AAGH,UAAAJ,EAAM,KAAK;AAAA,YACT,OAAAG;AAAA,YACA,OAAO,OAAOA,CAAK;AAAA,YACnB,OAAAC;AAAA,YACA,SAAS;AAAA,UAAA,CACV;AAAA,MAEL;AAEA,aAAIJ,EAAM,SAAS,KAAKC,KAAgB,OAAOA,KAAiB,YAC9DD,EAAM,KAAK;AAAA,QACT,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAOC;AAAA,QACP,SAAS;AAAA,MAAA,CACV,GAGID;AAAA,IACT,GAEMM,IAAsB,CAC1BP,MAC8B;AAC9B,YAAMQ,IAAmB,CAAA,GACnBC,IAAkB,CAAA,GAElBP,IAAeF,EAAW,CAAC;AACjC,MAAAQ,EAAO,KAAKN,CAAY;AAExB,eAASC,IAAI,GAAGA,IAAIH,EAAW,QAAQG,KAAK,GAAG;AAC7C,cAAMO,IAAOV,EAAWG,CAAC,GACnBE,IAAQL,EAAWG,IAAI,CAAC;AAC9B,QAAAM,EAAM,KAAKC,CAAI,GACfF,EAAO,KAAKH,CAAK;AAAA,MACnB;AAEA,aAAII,EAAM,WAAW,IAAU,OAExB;AAAA,QACL,KAAKA,EAAM,CAAC;AAAA,QACZ,KAAKA,EAAMA,EAAM,SAAS,CAAC;AAAA,QAC3B,QAAAD;AAAA,QACA,OAAAC;AAAA,MAAA;AAAA,IAEJ,GAEME,IAA6B,CACjCX,MAC8B;AAC9B,YAAMQ,IAAmB,CAAA,GACnBC,IAAkB,CAAA,GAElBG,KAAaZ,EAAW,CAAC,KAAK,MAAM,QAAQA,EAAW,CAAC,CAAC,GAAI;AAEnE,eAASG,IAAIS,GAAYT,IAAIH,EAAW,QAAQG,KAAK,GAAG;AACtD,cAAMO,IAAOV,EAAWG,CAAC,GACnBE,IAAQL,EAAWG,IAAI,CAAC;AAC9B,QAAAM,EAAM,KAAKC,CAAI,GACfF,EAAO,KAAKH,CAAK;AAAA,MACnB;AAEA,aAAII,EAAM,SAAS,IAAU,OAEtB;AAAA,QACL,KAAKA,EAAM,CAAC;AAAA,QACZ,KAAKA,EAAMA,EAAM,SAAS,CAAC;AAAA,QAC3B,QAAAD;AAAA,QACA,OAAAC;AAAA,MAAA;AAAA,IAEJ,GAEMI,IAA0B,MAAoB;AAClD,UAAI,CAACpG,EAAM,gBAAgB,CAACA,EAAM,YAAY,CAACnC,EAAI,MAAO,QAAO,CAAA;AAEjE,YAAMmB,IAAUgB,EAAM,SAAS,CAAC;AAChC,UAAI,CAAChB,EAAS,QAAO,CAAA;AAGrB,UAAI,CADUnB,EAAI,MAAM,SAASmB,CAAO;AAEtC,uBAAQ,KAAK,qCAAqCA,CAAO,EAAE,GACpD,CAAA;AAGT,YAAMqH,IAAaxI,EAAI,MAAM,iBAAiBmB,GAASgB,EAAM,QAAQ;AACrE,UAAI,CAACqG,KAAc,CAAC,MAAM,QAAQA,CAAU;AAC1C,uBAAQ;AAAA,UACN,oCAAoCrG,EAAM,QAAQ;AAAA,QAAA,GAE7C,CAAA;AAGT,YAAMsG,IAAiBD,EAAW,CAAC;AAEnC,UAAIC,MAAmB;AACrB,eAAOhB,EAAqBe,CAA+B;AAG7D,UAAIC,MAAmB,QAAQ;AAC7B,cAAMC,IAAWT,EAAoBO,CAA+B;AACpE,eAAOE,IAAW,CAACA,CAAQ,IAAI,CAAA;AAAA,MACjC;AAEA,UACED,MAAmB,iBACnBA,MAAmB,qBACnBA,MAAmB,mBACnB;AACA,cAAMC,IAAWL;AAAA,UACfG;AAAA,QAAA;AAEF,eAAOE,IAAW,CAACA,CAAQ,IAAI,CAAA;AAAA,MACjC;AAEA,qBAAQ;AAAA,QACN,iDAAiDD,CAAc;AAAA,MAAA,GAE1D,CAAA;AAAA,IACT,GAEME,IAAiBC,EAAS,MAC1BzG,EAAM,SAASA,EAAM,MAAM,SAAS,IAC/BA,EAAM,QAERqF,EAAe,KACvB,GAEKqB,IAAgBD,EAAS,MACzBzG,EAAM,SAAS,aAAmB,CAAA,IAC/BwG,EAAe,MAAM;AAAA,MAC1B,CAACG,MACC,WAAWA,KAAQ,WAAWA,KAAQ,WAAWA;AAAA,IAAA,CAEtD,GAEKC,IAAeH,EAAS,MAAM;AAClC,UAAIzG,EAAM,SAAS,WAAY,QAAO;AACtC,YAAMwF,IAAQgB,EAAe;AAC7B,UAAIhB,EAAM,WAAW,EAAG,QAAO;AAC/B,YAAMqB,IAAQrB,EAAM,CAAC;AACrB,aAAI,SAASqB,KAAS,SAASA,KAAS,YAAYA,IAC3CA,IAEF;AAAA,IACT,CAAC,GAEKC,IAAYL,EAAS,MACrBzG,EAAM,SAAS,SAAe,CAAA,IAC3BwG,EAAe,MAAM;AAAA,MAC1B,CAACG,MAAiC,UAAUA,KAAQ,WAAWA;AAAA,IAAA,CAElE,GAEKI,IAAcN,EAAS,OAIpB,EAAE,eAHa,MAAM,KAAKrB,EAAuB,MAAM,QAAA,CAAS,EACpE,OAAO,CAAC,CAAA,EAAGzC,CAAO,MAAMA,CAAO,EAC/B,IAAI,CAAC,CAACgD,CAAK,MAAMA,CAAK,EAChB,EACV,GAEKqB,IAAgBP,EAAS,MACxBG,EAAa,QAEX,6BADYA,EAAa,MAAM,OAAO,KAAK,IAAI,CACR,MAFd,EAGjC,GAEKK,IAAiB,MAAM;AAC3B,UAAIjH,EAAM,SAAS;AACjB,mBAAW2G,KAAQD,EAAc;AAC/B,UAAAtB,EAAuB,MAAM,IAAIuB,EAAK,OAAOA,EAAK,WAAW,EAAI;AAAA,IAGvE,GAEMO,IAA8B,MAAM;AACxC,UAAI,CAACrJ,EAAI,SAAS,CAACmC,EAAM,YAAYA,EAAM,SAAS,WAAY;AAEhE,YAAMmH,IAAgBJ,EAAY,MAAM,cAAc;AAAA,QACpD,CAAClB,MAAMA,MAAM;AAAA,MAAA,GAETuB,IAAYV,EAAc,MAC7B,IAAI,CAACC,MAASA,EAAK,KAAK,EACxB,OAAO,CAACd,MAAMA,MAAM,aAAa,GAC9BwB,IAAaF,EAAc,WAAWC,EAAU;AAEtD,iBAAWpI,KAAWgB,EAAM;AAE1B,YADcnC,EAAI,MAAM,SAASmB,CAAO;AAGxC,cAAIqI;AACF,YAAAxJ,EAAI,MAAM,UAAUmB,GAAS,IAAI;AAAA,mBACxBmI,EAAc,WAAW;AAClC,YAAAtJ,EAAI,MAAM,UAAUmB,GAAS,CAAC,MAAM,CAAC,OAAO,eAAe,GAAG,EAAI,CAAC;AAAA,eAC9D;AACL,kBAAMqH,IAAaxI,EAAI,MAAM,iBAAiBmB,GAASgB,EAAM,QAAQ;AACrE,gBAAI,CAACqG,KAAc,CAAC,MAAM,QAAQA,CAAU,EAAG;AAE/C,kBAAMiB,IAAYjB,EAAW,CAAC;AAC9B,gBAAIkB,IAA8B;AAElC,YAAI,MAAM,QAAQD,CAAS,KAAKA,EAAU,CAAC,MAAM,UAC/CC,IAAeD,EAAU,CAAC,IAGxBC,KACF1J,EAAI,MAAM,UAAUmB,GAAS;AAAA,cAC3B;AAAA,cACA,CAAC,OAAOuI,CAAY;AAAA,cACpB,CAAC,WAAWJ,CAAa;AAAA,YAAA,CAC1B;AAAA,UAEL;AAAA,IAEJ,GAEMK,IAA4B,MAAM;AACtC,UAAI,CAACnF,KAAcrC,EAAM,SAAS,WAAY;AAE9C,YAAMmH,IAAgBJ,EAAY,MAAM,cAAc;AAAA,QACpD,CAAClB,MAAMA,MAAM;AAAA,MAAA,GAETuB,IAAYV,EAAc,MAC7B,IAAI,CAACC,MAASA,EAAK,KAAK,EACxB,OAAO,CAACd,MAAMA,MAAM,aAAa,GAC9BwB,IAAaF,EAAc,WAAWC,EAAU,QAEhD/I,IAASgE,EAAW,UAAA;AAE1B,iBAAWrD,KAAWgB,EAAM,UAAU;AACpC,YAAInC,EAAI,OAAO,SAASmB,CAAO,EAAG;AAElC,cAAMyI,IAAYpJ,EAAO,KAAK,CAACa,MAAMA,EAAE,OAAOF,CAAO;AACrD,YAAI,CAACyI,EAAW;AAMhB,YAAI,CAJ2BA,EAAU,OAAO,YAAY;AAAA,UAC1D,CAACC,MAAQA,GAAK,aAAa,SAAS;AAAA,QAAA,GAGT;AAC3B,kBAAQ;AAAA,YACN,mCAAmC1I,CAAO;AAAA,UAAA;AAG5C;AAAA,QACF;AAEA,YAAI,OAAOyI,EAAU,SAAU;AAE/B,cAAIJ,GAAY;AACd,kBAAMvE,IAAe2E,EAAU,MAAM;AAAA,cACnC,aAAa,CAAC,QAAW,KAAQ;AAAA,YAAA,CAClC;AACD,YAAApF,EAAW,YAAYrD,GAAS8D,CAAY;AAAA,UAC9C,WAAWqE,EAAc,WAAW,GAAG;AACrC,kBAAMrE,IAAe2E,EAAU,MAAM;AAAA,cACnC,aAAa,CAAC,OAAU,KAAQ;AAAA,YAAA,CACjC;AACD,YAAApF,EAAW,YAAYrD,GAAS8D,CAAY;AAAA,UAC9C,OAAO;AACL,kBAAM6E,IAAeR,EAClB,IAAI,CAACtB,OAAMa,EAAc,MAAM,UAAU,CAACC,OAASA,GAAK,UAAUd,EAAC,CAAC,EACpE,OAAO,CAACH,OAAMA,MAAK,CAAC;AAEvB,gBAAIiC,EAAa,SAAS,GAAG;AAC3B,oBAAMC,KAAW,KAAK,IAAI,GAAGD,CAAY,GACnCE,KAAW,KAAK,IAAI,GAAGF,CAAY,GACnC7E,KAAe2E,EAAU,MAAM;AAAA,gBACnC,aAAa,CAACG,KAAW,KAAKC,KAAW,GAAG;AAAA,cAAA,CAC7C;AACD,cAAAxF,EAAW,YAAYrD,GAAS8D,EAAY;AAAA,YAC9C;AAAA,UACF;AAAA,MACF;AAAA,IACF,GAEMgF,IAAa,CAACnB,GAA0BrH,MAAkB;AAC9D,UAAI,CAACU,EAAM,YAAa;AAGxB,YAAM0E,IAAa,EADIU,EAAuB,MAAM,IAAIuB,EAAK,KAAK,KAAK;AAEvE,MAAAvB,EAAuB,MAAM,IAAIuB,EAAK,OAAOjC,CAAU,GAEvDwC,EAAA,GACAM,EAAA,GAEA5G,EAAK,cAAc,EAAE,MAAA+F,GAAM,OAAArH,GAAO,SAASoF,GAAY,GACvD9D,EAAK,iBAAiB;AAAA,QACpB,QAAQmG,EAAY;AAAA,QACpB,UAAU/G,EAAM;AAAA,MAAA,CACjB,GACDY,EAAK,iBAAiBmG,EAAY,KAAK;AAAA,IACzC,GAEMgB,IAAgB,CAACpB,MACdvB,EAAuB,MAAM,IAAIuB,EAAK,KAAK,KAAK,IAGnD/B,KAAiB,MAAM;AAC3B,MAAAP,EAAY,QAAQ,CAACA,EAAY;AAAA,IACnC;AAEA,WAAA7E;AAAA,MACE,MAAMQ,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAiH,EAAA;AAAA,MACF;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfzH;AAAA,MACE,MAAMQ,EAAM;AAAA,MACZ,CAACoD,MAAa;AACZ,QAAAiB,EAAY,QAAQjB;AAAA,MACtB;AAAA,IAAA,GAGFhD,EAAU,MAAM;AACd,MAAIJ,EAAM,iBACRqF,EAAe,QAAQe,EAAA,IAEzBa,EAAA;AAAA,IACF,CAAC,mBAIDxD,EAsFM,OAAA;AAAA,eArFA;AAAA,MAAJ,KAAItB;AAAA,MACJ,OAAK2B,EAAA,CAAC,oBAAkB,EAAA,gBACEO,EAAA,OAAW,CAAA;AAAA,IAAA;MAErCX,EAsBS,UAAA;AAAA,QArBP,MAAK;AAAA,QACL,OAAM;AAAA,QACL,SAAOkB;AAAA,MAAA;QAERlB,EAAuD,QAAvDC,IAAuDE,EAAf5D,EAAA,KAAK,GAAA,CAAA;AAAA,cAC7CwD,EAeM,OAAA;AAAA,UAdJ,OAAKK,EAAA,CAAC,4BAA0B,EAAA,gBACNO,EAAA,MAAA,CAAW,CAAA;AAAA,UACrC,OAAM;AAAA,UACN,QAAO;AAAA,UACP,SAAQ;AAAA,UACR,MAAK;AAAA,QAAA;UAELX,EAME,QAAA;AAAA,YALA,GAAE;AAAA,YACF,QAAO;AAAA,YACP,gBAAa;AAAA,YACb,kBAAe;AAAA,YACf,mBAAgB;AAAA,UAAA;;;MAKVW,EAAA,qBAAZN,KAAAN,EAsDM,OAtDNG,IAsDM;AAAA,QArDY3D,EAAA,SAAI,cAClB8D,EAAA,EAAA,GAAAN,EAoBSqB,IAAA,EAAA,KAAA,KAAAC,GAnBiB2B,EAAA,OAAa,CAA7BC,GAAMrH,YADhBmE,EAoBS,UAAA;AAAA,UAlBN,KAAKkD,EAAK;AAAA,UACX,MAAK;AAAA,UACL,UAAM,yBAAuB;AAAA,8BACW1G,EAAA;AAAA,YAAuC,aAAA,CAAA8H,EAAcpB,CAAI;AAAA,UAAA;UAIhG,WAAW1G,EAAA;AAAA,UACX,SAAK,CAAA+E,MAAE8C,EAAWnB,GAAMrH,CAAK;AAAA,QAAA;UAE9BoE,EAGQ,QAAA;AAAA,YAFN,OAAM;AAAA,YACL,OAAKsE,GAAA,EAAA,iBAAqBrB,EAAK,OAAK;AAAA,UAAA;UAEvCjD,EAA4D,QAA5DM,IAA4DH,EAApB8C,EAAK,KAAK,GAAA,CAAA;AAAA,UACtCA,EAAK,UAAU,UAA3B5C,EAAA,GAAAN,EAEO,QAFPS,IAEOL,EADF8C,EAAK,KAAK,GAAA,CAAA;8BAKE1G,EAAA,uBAAuB2G,EAAA,cAA5CnD,EASWqB,IAAA,EAAA,KAAA,KAAA;AAAA,UARTpB,EAGO,OAAA;AAAA,YAFL,OAAM;AAAA,YACL,wBAAqBsD,EAAA,OAAa;AAAA,UAAA;UAErCtD,EAGM,OAHNS,IAGM;AAAA,YAFJT,EAA4D,gBAAnDkD,EAAA,MAAa,YAAYA,EAAA,MAAa,GAAG,GAAA,CAAA;AAAA,YAClDlD,EAA4D,gBAAnDkD,EAAA,MAAa,YAAYA,EAAA,MAAa,GAAG,GAAA,CAAA;AAAA,UAAA;kBAIjC3G,EAAA,SAAI,iBACvBwD,EAeMqB,IAAA,EAAA,KAAA,EAAA,GAAAC,GAdW+B,EAAA,OAAS,CAAjBH,YADTlD,EAeM,OAAA;AAAA,UAbH,KAAKkD,EAAK;AAAA,UACX,OAAM;AAAA,QAAA;UAENjD,EAQM,OARNuE,IAQM;AAAA,YAPJvE,EAMO,OAAA;AAAA,cALL,OAAM;AAAA,cACL,OAAKsE,GAAA;AAAA,gBAA8B,OAAA,GAAA,KAAK,IAAIrB,EAAK,MAAI,EAAA,CAAA;AAAA,gBAAsC,QAAA,GAAA,KAAK,IAAIA,EAAK,MAAI,EAAA,CAAA;AAAA,cAAA;;;UAMlHjD,EAA4D,QAA5DU,IAA4DP,EAApB8C,EAAK,KAAK,GAAA,CAAA;AAAA,QAAA;;MAKxDnG,EAAaC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;AC1df,UAAMT,IAAQC,GAeRpC,IAAMR,EAAawC,CAAM,GACzBqI,IAAuBhK,EAAI,EAAK,GAGhCiK,IAAiB,MACdtK,EAAI,SAAS,MAIhBuK,IAAW,CAAC3J,MAAqB;AACrC,MAAKA,KAELA,EAAY,GAAG,cAAc,MAAM;AACjC,cAAM4J,IAAe,MAAM;AACzB,UAAK5J,EAAY,kBAIfyJ,EAAO,QAAQ,MAHfA,EAAO,QAAQ,IACf,WAAWG,GAAc,GAAG;AAAA,QAIhC;AACA,QAAAA,EAAA;AAAA,MACF,CAAC;AAAA,IACH,GAEMtJ,IAAW,MAAY;AAC3B,YAAMN,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AAIF,cAHKA,EAAY,UAAUuB,EAAM,QAAQ,KACvCvB,EAAY,UAAUuB,EAAM,UAAUA,EAAM,MAAM,GAEhD,CAACvB,EAAY,SAASuB,EAAM,OAAO,GAAG;AACxC,kBAAMsI,IAAY;AAAA,cAChB,GAAGtI,EAAM;AAAA,cACT,IAAIA,EAAM;AAAA,cACV,QAAQA,EAAM;AAAA,YAAA;AAEhB,YAAAvB,EAAY,SAAS6J,GAAWtI,EAAM,MAAM;AAAA,UAC9C;AAAA,QACF,SAASrB,GAAO;AACd,kBAAQ,MAAM,8BAA8BA,CAAK;AAAA,QACnD;AAAA,IACF,GAEM4J,IAAe,MAAY;AAC/B,YAAM9J,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AAEF,UAAIA,EAAY,SAASuB,EAAM,OAAO,KACpCvB,EAAY,YAAYuB,EAAM,OAAO,GAEnCvB,EAAY,UAAUuB,EAAM,QAAQ,KACtCvB,EAAY,aAAauB,EAAM,QAAQ,GAGzCvB,EAAY,UAAUuB,EAAM,UAAUA,EAAM,MAAM;AAClD,gBAAMsI,IAAY;AAAA,YAChB,GAAGtI,EAAM;AAAA,YACT,IAAIA,EAAM;AAAA,YACV,QAAQA,EAAM;AAAA,UAAA;AAEhB,UAAAvB,EAAY,SAAS6J,GAAWtI,EAAM,MAAM;AAAA,QAC9C,SAASrB,GAAO;AACd,kBAAQ,MAAM,iCAAiCA,CAAK;AAAA,QACtD;AAAA,IACF,GAEMS,IAAc,MAAY;AAC9B,YAAMX,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,UAAIA,EAAY,SAASuB,EAAM,OAAO,MACpC,OAAO,QAAQA,EAAM,MAAM,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC1C,GAAKqI,CAAK,MAAM;AAChE,YAAAlH,EAAY,iBAAiBuB,EAAM,SAAS1C,GAAKqI,CAAK;AAAA,UACxD,CAAC,GACD,OAAO,QAAQ3F,EAAM,MAAM,UAAU,EAAE,EAAE,QAAQ,CAAC,CAAC1C,GAAKqI,CAAK,MAAM;AACjE,YAAAlH,EAAY,kBAAkBuB,EAAM,SAAS1C,GAAKqI,CAAK;AAAA,UACzD,CAAC;AAAA,QAEL,SAAShH,GAAO;AACd,kBAAQ,MAAM,gCAAgCA,CAAK;AAAA,QACrD;AAAA,IACF;AAGA,WAAAa,EAAM,MAAMQ,EAAM,QAAQuI,GAAc,EAAE,MAAM,IAAM,GACtD/I,EAAM,MAAMQ,EAAM,OAAOZ,GAAa,EAAE,MAAM,IAAM,GAGpDI;AAAA,MACE3B;AAAA,MACA,CAAC2K,MAAW;AACV,QAAIA,KACFJ,EAASI,CAAM;AAAA,MAEnB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAIpBhJ,EAAM0I,GAAQ,CAACvC,MAAU;AACvB,MAAIA,KACF5G,EAAA;AAAA,IAEJ,CAAC,GAGDqB,EAAU,MAAM;AAEd,MADoB+H,EAAA,GACH,mBACfpJ,EAAA;AAAA,IAEJ,CAAC,GAED0J,EAAgB,MAAM;AACpB,YAAMhK,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,UAAIA,EAAY,SAASuB,EAAM,OAAO,KACpCvB,EAAY,YAAYuB,EAAM,OAAO,GAEnCvB,EAAY,UAAUuB,EAAM,QAAQ,KACtCvB,EAAY,aAAauB,EAAM,QAAQ;AAAA,QAE3C,SAASrB,GAAO;AACd,kBAAQ,MAAM,mCAAmCA,CAAK;AAAA,QACxD;AAAA,IACF,CAAC,aAID6B,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;ACrIb,UAAMT,IAAQC,GAMRW,IAAOC,GAIPhD,IAAMR,EAAawC,CAAM,GACzBqI,IAAuBhK,EAAI,EAAK,GAGhCwK,IAAe,CACnBrH,MAEI,CAACA,KAAQ,OAAOA,KAAS,WAAiB,KAC1CA,KAAQ,OAAOA,KAAS,YAAY,UAAUA,IAC5CA,EAAK,SAAS,uBAAuB,cAAcA,IAC9CA,EAAK,SAAS,SAAS,IAI9BA,EAAK,SAAS,aACdA,EAAK,SAAS,WACdA,EAAK,SAAS,gBACdA,EAAK,SAAS,aACdA,EAAK,SAAS,gBACdA,EAAK,SAAS,qBACdA,EAAK,SAAS,iBAGX,IAIH8G,IAAiB,MACJtK,EAAI,SAAS,MAK1BuK,IAAW,CAAC3J,MAAqB;AACrC,MAAKA,KAILA,EAAY,GAAG,cAAc,MAAM;AACjC,cAAM4J,IAAe,MAAM;AACzB,UAAK5J,EAAY,kBAIfyJ,EAAO,QAAQ,MAHfA,EAAO,QAAQ,IACf,WAAWG,GAAc,GAAG;AAAA,QAIhC;AACA,QAAAA,EAAA;AAAA,MACF,CAAC;AAAA,IACH,GAEMtJ,IAAW,MAAY;AAC3B,YAAMN,IAAc0J,EAAA;AACpB,UAAI,GAAC1J,KAAe,CAACA,EAAY,kBAKjC;AAAA,YAAI,CAACiK,EAAa1I,EAAM,OAAO,IAAI,GAAG;AACpC,kBAAQ;AAAA,YACN,IAAIA,EAAM,OAAO;AAAA,UAAA;AAEnB;AAAA,QACF;AAEA,YAAI;AAOF,cALKvB,EAAY,UAAUuB,EAAM,QAAQ,KACvCvB,EAAY,UAAUuB,EAAM,UAAUA,EAAM,MAAM,GAIhD,CAACvB,EAAY,SAASuB,EAAM,OAAO,GAAG;AACxC,kBAAMsI,IAAY;AAAA,cAChB,GAAGtI,EAAM;AAAA,cACT,IAAIA,EAAM;AAAA,cACV,QAAQA,EAAM;AAAA,YAAA;AAGhB,YAAAvB,EAAY,SAAS6J,GAAWtI,EAAM,MAAM;AAAA,UAC9C;AAAA,QACF,SAASrB,GAAO;AACd,kBAAQ,MAAM,+BAA+BA,CAAK;AAAA,QACpD;AAAA;AAAA,IACF,GAEM4J,IAAe,MAAY;AAC/B,YAAM9J,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,gBAAM8C,IAAS9C,EAAY,UAAUuB,EAAM,QAAQ;AAInD,cAAIuB,KAAU,aAAaA,GAAQ;AAGjC,kBAAMoH,IAAiBlK,EACpB,SAAA,EACA,OAAO;AAAA,cACN,CAACS,MACCA,EAAE,SAAS,gBACX,YAAYA,KACZA,EAAE,WAAWc,EAAM;AAAA,YAAA;AAKzB,aACE2I,EAAe,WAAW,KAC1BA,EAAe,CAAC,GAAG,OAAO3I,EAAM,YAEhCuB,EAAO,QAAQvB,EAAM,OAAO,IAAI;AAAA,UAEpC,MAAA,CAAYuB,KAEVxC,EAAA;AAAA,QAEJ,SAASJ,GAAO;AACd,kBAAQ,MAAM,kCAAkCA,CAAK;AAAA,QACvD;AAAA,IACF,GAEMS,IAAc,MAAY;AAC9B,YAAMX,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,UAAIA,EAAY,SAASuB,EAAM,OAAO,KAEpC,OAAO,QAAQA,EAAM,MAAM,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC1C,GAAKqI,CAAK,MAAM;AAChE,YAAAlH,EAAY,iBAAiBuB,EAAM,SAAS1C,GAAKqI,CAAK;AAAA,UACxD,CAAC,GAED,OAAO,QAAQ3F,EAAM,MAAM,UAAU,EAAE,EAAE,QAAQ,CAAC,CAAC1C,GAAKqI,CAAK,MAAM;AACjE,YAAAlH,EAAY,kBAAkBuB,EAAM,SAAS1C,GAAKqI,CAAK;AAAA,UACzD,CAAC,KAGD5G,EAAA;AAAA,QAEJ,SAASJ,GAAO;AACd,kBAAQ,MAAM,iCAAiCA,CAAK;AAAA,QACtD;AAAA,IACF,GAEMiK,IAAmB,CAACnK,MAAqB;AAC7C,UAAKA;AAIL,YAAI;AAEF,UAAAA,EAAY,GAAG,SAASuB,EAAM,SAAS,CAAC6I,MAA0B;AAChE,YAAIA,EAAE,YAAYA,EAAE,SAAS,SAAS,KACpCjI,EAAK,YAAY;AAAA,cACf,UAAUiI,EAAE;AAAA,cACZ,aAAaA,EAAE;AAAA,YAAA,CAChB;AAAA,UAEL,CAAC,GAGDpK,EAAY,GAAG,cAAcuB,EAAM,SAAS,MAAM;AAChD,YAAAvB,EAAY,UAAA,EAAY,MAAM,SAAS;AAAA,UACzC,CAAC,GAEDA,EAAY,GAAG,cAAcuB,EAAM,SAAS,MAAM;AAChD,YAAAvB,EAAY,UAAA,EAAY,MAAM,SAAS;AAAA,UACzC,CAAC;AAAA,QACH,SAASE,GAAO;AACd,kBAAQ,MAAM,8BAA8BA,CAAK;AAAA,QACnD;AAAA,IACF,GAGMmK,IAAc5K,EAAI,EAAK,GAGvB6K,IAAkB,YAAY;AAClC,UAAID,EAAY,MAAO;AAEvB,YAAMrK,IAAc0J,EAAA;AACpB,MAAI,CAAC1J,KAAe,CAACA,EAAY,mBAC5BiK,EAAa1I,EAAM,OAAO,IAAI,MAGnC,MAAMgJ,GAAA,GAGF,CAAAF,EAAY,SACXrK,EAAY,oBAEjBM,EAAA,GACA6J,EAAiBnK,CAAW,GAC5BqK,EAAY,QAAQ;AAAA,IACtB;AAGA,WAAAtJ,EAAM0I,GAAQ,CAACvC,MAAU;AACvB,MAAIA,KACFoD,EAAA;AAAA,IAEJ,CAAC,GAGDvJ;AAAA,MACE3B;AAAA,MACA,CAAC2K,MAAW;AACV,QAAIA,MACFJ,EAASI,CAAM,GAEXA,EAAO,oBACTN,EAAO,QAAQ,IAEfa,EAAA;AAAA,MAGN;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAIpBvJ;AAAA,MACE,MAAMQ,EAAM;AAAA,MACZ,CAACiJ,GAAWC,MAAc;AAExB,YAAKR,EAAaO,GAAW,IAAI,KAK7B,KAAK,UAAUA,EAAU,IAAI,MAAM,KAAK,UAAUC,GAAW,IAAI,GAAG;AACtE,gBAAMzK,IAAc0J,EAAA;AACpB,UAAI1J,GAAa,oBAEVA,EAAY,UAAUuB,EAAM,QAAQ,IAQvCuI,EAAA,KAPAxJ,EAAA,GACK+J,EAAY,UACfF,EAAiBnK,CAAW,GAC5BqK,EAAY,QAAQ;AAAA,QAO5B;AAAA,MACF;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,GAGftJ,EAAM,MAAMQ,EAAM,OAAOZ,GAAa,EAAE,MAAM,IAAM,GAGpDI;AAAA,MACE,MAAMQ,EAAM,MAAM,QAAQ;AAAA,MAC1B,CAACmJ,MAAkB;AACjB,cAAM1K,IAAc0J,EAAA;AACpB,YAAI,CAAC1J,KAAe,CAACA,EAAY,gBAAiB;AAElD,cAAM2K,IAAW3K,EAAY,SAASuB,EAAM,OAAO;AAEnD,YAAI,CAACoJ,KAAYD,MAAkB;AAEjC,UAAIT,EAAa1I,EAAM,OAAO,IAAI,KAChCjB,EAAA;AAAA,iBAEOqK;AAET,cAAI;AACF,YAAA3K,EAAY;AAAA,cACVuB,EAAM;AAAA,cACN;AAAA,cACAmJ;AAAA,YAAA;AAAA,UAEJ,SAASxK,GAAO;AACd,oBAAQ;AAAA,cACN,iCAAiCqB,EAAM,OAAO;AAAA,cAC9CrB;AAAA,YAAA;AAAA,UAEJ;AAAA,MAEJ;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAIpByB,EAAU,MAAM;AAEd,MAAA4I,GAAS,MAAM;AACb,QAAAD,EAAA;AAAA,MACF,CAAC;AAAA,IACH,CAAC,GAEDN,EAAgB,MAAM;AACpB,YAAMhK,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AAEF,UAAIA,EAAY,SAASuB,EAAM,OAAO,KACpCvB,EAAY,YAAYuB,EAAM,OAAO,GAIbvB,EACvB,SAAA,EACA,OAAO;AAAA,YACN,CAACS,MACCA,EAAE,SAAS,gBACX,YAAYA,KACZA,EAAE,WAAWc,EAAM;AAAA,UAAA,EAIL,WAAW,KAC7BvB,EAAY,UAAUuB,EAAM,QAAQ,KAEpCvB,EAAY,aAAauB,EAAM,QAAQ;AAAA,QAE3C,SAASrB,GAAO;AACd,kBAAQ,MAAM,oCAAoCA,CAAK;AAAA,QACzD;AAAA,IACF,CAAC,aAID6B,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrWb,UAAMT,IAAQC,GA2BRpC,IAAMR,EAAawC,CAAM,GACzBqI,IAAuBhK,EAAI,EAAK,GAGhCiK,IAAiB,MACdtK,EAAI,SAAS,MAIhBuK,IAAW,CAAC3J,MAAqB;AACrC,MAAKA,KAELA,EAAY,GAAG,cAAc,MAAM;AACjC,cAAM4J,IAAe,MAAM;AACzB,UAAK5J,EAAY,kBAIfyJ,EAAO,QAAQ,MAHfA,EAAO,QAAQ,IACf,WAAWG,GAAc,GAAG;AAAA,QAIhC;AACA,QAAAA,EAAA;AAAA,MACF,CAAC;AAAA,IACH,GAEMtJ,IAAW,MAAY;AAC3B,YAAMN,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AAIF,cAHKA,EAAY,UAAUuB,EAAM,QAAQ,KACvCvB,EAAY,UAAUuB,EAAM,UAAUA,EAAM,MAAM,GAEhD,CAACvB,EAAY,SAASuB,EAAM,OAAO,GAAG;AACxC,kBAAMsI,IAAY;AAAA,cAChB,GAAGtI,EAAM;AAAA,cACT,IAAIA,EAAM;AAAA,cACV,QAAQA,EAAM;AAAA,YAAA;AAEhB,YAAAvB,EAAY,SAAS6J,GAAWtI,EAAM,MAAM;AAAA,UAC9C;AAAA,QACF,SAASrB,GAAO;AACd,kBAAQ,MAAM,6BAA6BA,CAAK;AAAA,QAClD;AAAA,IACF,GAEM4J,IAAe,MAAY;AAC/B,YAAM9J,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,gBAAM8C,IAAS9C,EAAY,UAAUuB,EAAM,QAAQ;AACnD,cAAIuB;AAEF,gBAAIA,EAAO;AACT,cAAAA,EAAO,YAAY;AAAA,gBACjB,KAAKvB,EAAM,OAAO;AAAA,gBAClB,aAAaA,EAAM,OAAO;AAAA,cAAA,CAC3B;AAAA,iBACI;AAEL,cAAIvB,EAAY,SAASuB,EAAM,OAAO,KACpCvB,EAAY,YAAYuB,EAAM,OAAO,GAEnCvB,EAAY,UAAUuB,EAAM,QAAQ,KACtCvB,EAAY,aAAauB,EAAM,QAAQ,GAGzCvB,EAAY,UAAUuB,EAAM,UAAUA,EAAM,MAAM;AAClD,oBAAMsI,IAAY;AAAA,gBAChB,GAAGtI,EAAM;AAAA,gBACT,IAAIA,EAAM;AAAA,gBACV,QAAQA,EAAM;AAAA,cAAA;AAEhB,cAAAvB,EAAY,SAAS6J,GAAWtI,EAAM,MAAM;AAAA,YAC9C;AAAA,QAEJ,SAASrB,GAAO;AACd,kBAAQ,MAAM,gCAAgCA,CAAK;AAAA,QACrD;AAAA,IACF,GAEMS,IAAc,MAAY;AAC9B,YAAMX,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,UAAIA,EAAY,SAASuB,EAAM,OAAO,MACpC,OAAO,QAAQA,EAAM,MAAM,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC1C,GAAKqI,CAAK,MAAM;AAChE,YAAAlH,EAAY,iBAAiBuB,EAAM,SAAS1C,GAAKqI,CAAK;AAAA,UACxD,CAAC,GACD,OAAO,QAAQ3F,EAAM,MAAM,UAAU,EAAE,EAAE,QAAQ,CAAC,CAAC1C,GAAKqI,CAAK,MAAM;AACjE,YAAAlH,EAAY,kBAAkBuB,EAAM,SAAS1C,GAAKqI,CAAK;AAAA,UACzD,CAAC;AAAA,QAEL,SAAShH,GAAO;AACd,kBAAQ,MAAM,+BAA+BA,CAAK;AAAA,QACpD;AAAA,IACF;AAGA,WAAAa,EAAM,MAAMQ,EAAM,QAAQuI,GAAc,EAAE,MAAM,IAAM,GACtD/I,EAAM,MAAMQ,EAAM,OAAOZ,GAAa,EAAE,MAAM,IAAM,GAGpDI;AAAA,MACE3B;AAAA,MACA,CAAC2K,MAAW;AACV,QAAIA,KACFJ,EAASI,CAAM;AAAA,MAEnB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAIpBhJ,EAAM0I,GAAQ,CAACvC,MAAU;AACvB,MAAIA,KACF5G,EAAA;AAAA,IAEJ,CAAC,GAGDqB,EAAU,MAAM;AAEd,MADoB+H,EAAA,GACH,mBACfpJ,EAAA;AAAA,IAEJ,CAAC,GAED0J,EAAgB,MAAM;AACpB,YAAMhK,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,UAAIA,EAAY,SAASuB,EAAM,OAAO,KACpCvB,EAAY,YAAYuB,EAAM,OAAO,GAEnCvB,EAAY,UAAUuB,EAAM,QAAQ,KACtCvB,EAAY,aAAauB,EAAM,QAAQ;AAAA,QAE3C,SAASrB,GAAO;AACd,kBAAQ,MAAM,kCAAkCA,CAAK;AAAA,QACvD;AAAA,IACF,CAAC,aAID6B,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;AChLb,UAAMT,IAAQC,GAQRpC,IAAMR,EAAawC,CAAM,GACzBqI,IAAuBhK,EAAI,EAAK,GAEhCiK,IAAiB,MACdtK,EAAI,SAAS,MAGhBuK,IAAW,CAAC3J,MAAqB;AACrC,MAAKA,KAELA,EAAY,GAAG,cAAc,MAAM;AACjC,cAAM4J,IAAe,MAAM;AACzB,UAAK5J,EAAY,kBAIfyJ,EAAO,QAAQ,MAHfA,EAAO,QAAQ,IACf,WAAWG,GAAc,GAAG;AAAA,QAIhC;AACA,QAAAA,EAAA;AAAA,MACF,CAAC;AAAA,IACH,GAEMtJ,IAAW,MAAY;AAC3B,YAAMN,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,UAAKA,EAAY,UAAUuB,EAAM,QAAQ,KACvCvB,EAAY,UAAUuB,EAAM,UAAUA,EAAM,MAAM,GAE/CvB,EAAY,SAASuB,EAAM,OAAO,MAErCvB,EAAY,SAASuB,EAAM,OAAOA,EAAM,MAAM,GAG1CA,EAAM,MAAM,QAAQ,cACtBvB,EAAY;AAAA,YACVuB,EAAM;AAAA,YACN;AAAA,YACAA,EAAM,MAAM,OAAO;AAAA,UAAA;AAAA,QAI3B,SAASrB,GAAO;AACd,kBAAQ,MAAM,IAAIqB,EAAM,OAAO,6BAA6BrB,CAAK;AAAA,QACnE;AAAA,IACF,GAEM4J,IAAe,MAAY;AAC/B,YAAM9J,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AAEF,gBAAM4K,IAAWrJ,EAAM;AAEvB,UAAIvB,EAAY,SAASuB,EAAM,OAAO,KACpCvB,EAAY,YAAYuB,EAAM,OAAO,GAEvCvB,EAAY,aAAauB,EAAM,QAAQ,GAEvCvB,EAAY,UAAUuB,EAAM,UAAUA,EAAM,MAAM;AAClD,gBAAMsI,IAAY;AAAA,YAChB,GAAGtI,EAAM;AAAA,YACT,IAAIA,EAAM;AAAA,YACV,MAAM;AAAA,YACN,QAAQA,EAAM;AAAA,UAAA;AAIhB,UAAIqJ,KAAY5K,EAAY,SAAS4K,CAAQ,IAC3C5K,EAAY,SAAS6J,GAAWe,CAAQ,IAExC5K,EAAY,SAAS6J,CAAS;AAAA,QAElC,SAAS3J,GAAO;AACd,kBAAQ,MAAM,iCAAiCA,CAAK;AAAA,QACtD;AAAA,IACF,GAEMS,IAAc,MAAY;AAC9B,YAAMX,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,cAAIA,EAAY,SAASuB,EAAM,OAAO,GAAG;AAEvC,kBAAMsJ,IAAQtJ,EAAM,MAAM,SAAS,CAAA;AACnC,mBAAO,QAAQsJ,CAAK,EAAE,QAAQ,CAAC,CAAChM,GAAKqI,CAAK,MAAM;AAC9C,cAAAlH,EAAY,iBAAiBuB,EAAM,SAAS1C,GAAKqI,CAAK;AAAA,YACxD,CAAC;AAGD,kBAAM4D,IAASvJ,EAAM,MAAM,UAAU,CAAA;AACrC,mBAAO,QAAQuJ,CAAM,EAAE,QAAQ,CAAC,CAACjM,GAAKqI,CAAK,MAAM;AAC/C,cAAAlH,EAAY,kBAAkBuB,EAAM,SAAS1C,GAAKqI,CAAK;AAAA,YACzD,CAAC;AAAA,UACH;AAAA,QACF,SAAShH,GAAO;AACd,kBAAQ,MAAM,gCAAgCA,CAAK;AAAA,QACrD;AAAA,IACF;AAGA,WAAAa;AAAA,MACE,MAAMQ,EAAM,OAAO,QAAQ,CAAC;AAAA;AAAA,MAC5B,CAACwJ,GAAYC,MAAe;AAC1B,QAAID,MAAeC,KACjBlB,EAAA;AAAA,MAEJ;AAAA,IAAA,GAEF/I,EAAM,MAAMQ,EAAM,OAAOZ,GAAa,EAAE,MAAM,IAAM,GACpDI;AAAA,MACE3B;AAAA,MACA,CAAC2K,MAAW;AACV,QAAIA,KACFJ,EAASI,CAAM;AAAA,MAEnB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAEpBhJ,EAAM0I,GAAQ,CAACvC,MAAU;AACvB,MAAIA,KACF5G,EAAA;AAAA,IAEJ,CAAC,GACDS;AAAA,MACE,MAAMQ,EAAM,MAAM,QAAQ;AAAA,MAC1B,CAACmJ,MAAkB;AACjB,cAAM1K,IAAc0J,EAAA;AACpB,YAAI,CAAC1J,EAAa;AAIlB,YAFiBA,EAAY,SAASuB,EAAM,OAAO;AAUjD,cAAI;AAEF,YAAAvB,EAAY;AAAA,cACVuB,EAAM;AAAA,cACN;AAAA,cACAmJ;AAAA,YAAA,GAIEA,MAAkB,aAAanJ,EAAM,UACvCvB,EAAY,UAAUuB,EAAM,SAASA,EAAM,MAAM;AAAA,UAErD,SAASrB,GAAO;AACd,oBAAQ,MAAM,IAAIqB,EAAM,OAAO,gCAAgCrB,CAAK;AAAA,UACtE;AAAA;AApBA,cAAI;AACF,YAAAF,EAAY,SAASuB,EAAM,OAAOA,EAAM,MAAM;AAAA,UAChD,SAASrB,GAAO;AACd,oBAAQ,MAAM,IAAIqB,EAAM,OAAO,yBAAyBrB,CAAK;AAAA,UAC/D;AAAA,MAkBJ;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAEpBa;AAAA,MACE,MAAMQ,EAAM;AAAA,MACZ,CAAC0J,MAAc;AACb,cAAMjL,IAAc0J,EAAA;AACpB,YAAI,GAAC1J,KAAe,CAACA,EAAY,SAASuB,EAAM,OAAO,MAGnDA,EAAM,MAAM,QAAQ,eAAe;AACrC,cAAI;AACF,oBAAQ,IAAI,IAAIA,EAAM,OAAO,0BAA0B0J,CAAS,GAChEjL,EAAY,UAAUuB,EAAM,SAAS0J,CAAS;AAAA,UAChD,SAAS/K,GAAO;AACd,oBAAQ,MAAM,IAAIqB,EAAM,OAAO,yBAAyBrB,CAAK;AAAA,UAC/D;AAAA,MAEJ;AAAA,IAAA,GAIFyB,EAAU,MAAM;AAEd,UADoB+H,EAAA;AAIpB,YAAI;AACF,UAAApJ,EAAA;AAAA,QACF,SAASJ,GAAO;AACd,kBAAQ,MAAM,IAAIqB,EAAM,OAAO,6BAA6BrB,CAAK;AAAA,QACnE;AAAA,IACF,CAAC,aAID6B,EAAaC,EAAA,QAAA,SAAA;AAAA;ICpNFkJ,KAAiD;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GCdaC,KAAuC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GCjDaC,KAAkB,CAAC,aAAa,QAAQ,SAAS,GACjDC,KAAkB,CAAC,SAAS,cAAc,YAAY,GCDtDC,KAAc,CAAC,QAAQ,OAAO;;;;;;;;;;;ACWzC,UAAM/J,IAAQC,GAORW,IAAOC,GAEPhD,IAAMR,EAAawC,CAAM,GACzBqI,IAAuBhK,EAAI,EAAK,GAGhCiK,IAAiB,MACdtK,EAAI,SAAS,MAIhBuK,IAAW,CAAC3J,MAAqB;AACrC,MAAKA,KAELA,EAAY,GAAG,cAAc,MAAM;AACjC,cAAM4J,IAAe,MAAM;AACzB,UAAK5J,EAAY,kBAIfyJ,EAAO,QAAQ,MAHfA,EAAO,QAAQ,IACf,WAAWG,GAAc,GAAG;AAAA,QAIhC;AACA,QAAAA,EAAA;AAAA,MACF,CAAC;AAAA,IACH,GACMtJ,IAAW,MAAY;AAC3B,YAAMN,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,UAAKA,EAAY,UAAUuB,EAAM,QAAQ,KACvCvB,EAAY,UAAUuB,EAAM,UAAUA,EAAM,MAAM,GAE/CvB,EAAY,SAASuB,EAAM,OAAO,MAEjCA,EAAM,MAAM,QAAQ,eAAe,YACrCvB,EAAY,SAASuB,EAAM,OAAOA,EAAM,MAAM,IAG9CvB,EAAY,SAASuB,EAAM,KAAK;AAAA,QAGtC,SAASrB,GAAO;AACd,kBAAQ,MAAM,IAAIqB,EAAM,OAAO,6BAA6BrB,CAAK;AAAA,QACnE;AAAA,IACF,GACM4J,IAAe,MAAY;AAC/B,YAAM9J,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,gBAAMuL,IAAiBvL,EAAY,UAAUuB,EAAM,QAAQ;AAE3D,cACEgK,KACA,KAAK,UAAUA,EAAe,WAAW,MACvC,KAAK,UAAUhK,EAAM,MAAM,GAC7B;AACA,YAAIvB,EAAY,SAASuB,EAAM,OAAO,KACpCvB,EAAY,YAAYuB,EAAM,OAAO,GAEvCvB,EAAY,aAAauB,EAAM,QAAQ,GACvCvB,EAAY,UAAUuB,EAAM,UAAUA,EAAM,MAAM;AAClD,kBAAMsI,IAAY;AAAA,cAChB,GAAGtI,EAAM;AAAA,cACT,IAAIA,EAAM;AAAA,cACV,QAAQA,EAAM;AAAA,YAAA;AAEhB,YAAAvB,EAAY,SAAS6J,GAAWtI,EAAM,MAAM;AAAA,UAC9C;AAAA,QACF,SAASrB,GAAO;AACd,kBAAQ,MAAM,iCAAiCA,CAAK;AAAA,QACtD;AAAA,IACF,GACMS,IAAc,MAAY;AAC9B,YAAMX,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,cAAIA,EAAY,SAASuB,EAAM,OAAO,GAAG;AAEvC,kBAAMiK,IAAexL,EAAY,SAASuB,EAAM,OAAO,GACjDkK,IAAgBD,GAAc,SAAS,CAAA,GAIvCE,IAAiBF,GAAc,UAAU,CAAA;AAM/C,mBAAO,QAAQjK,EAAM,MAAM,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC1C,GAAKqI,CAAK,MAAM;AAChE,cAAI,KAAK,UAAUuE,EAAa5M,CAAG,CAAC,MAAM,KAAK,UAAUqI,CAAK,KAC5DlH,EAAY,iBAAiBuB,EAAM,SAAS1C,GAAKqI,CAAK;AAAA,YAE1D,CAAC,GAED,OAAO,QAAQ3F,EAAM,MAAM,UAAU,EAAE,EAAE,QAAQ,CAAC,CAAC1C,GAAKqI,CAAK,MAAM;AACjE,cAAI,KAAK,UAAUwE,EAAc7M,CAAG,CAAC,MAAM,KAAK,UAAUqI,CAAK,KAC7DlH,EAAY,kBAAkBuB,EAAM,SAAS1C,GAAKqI,CAAK;AAAA,YAE3D,CAAC;AAAA,UACH;AAAA,QACF,SAAShH,GAAO;AACd,kBAAQ,MAAM,gCAAgCA,CAAK;AAAA,QACrD;AAAA,IACF,GACMiK,IAAmB,CAACnK,MAAqB;AAC7C,UAAKA;AAEL,YAAI;AACF,UAAAkL,GAAe,QAAQ,CAACS,MAAc;AACpC,YAAA3L,EAAY,GAAG2L,GAAWpK,EAAM,SAAS,CAAC6I,MAAM;AAC9C,cAAIuB,MAAc,gBAChB3L,EAAY,UAAA,EAAY,MAAM,SAAS,YAErC2L,MAAc,iBAChB3L,EAAY,UAAA,EAAY,MAAM,SAAS,KAEzCmC,EAAKwJ,GAAWvB,CAAC;AAAA,YACnB,CAAC;AAAA,UACH,CAAC;AAAA,QACH,SAASlK,GAAO;AACd,kBAAQ,MAAM,kCAAkCA,CAAK;AAAA,QACvD;AAAA,IACF;AAGA,WAAAa;AAAA,MACE3B;AAAA,MACA,CAAC2K,GAAQ6B,MAAW;AAClB,QAAI7B,KAAUA,MAAW6B,KACvBjC,EAASI,CAAM;AAAA,MAEnB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAEpBhJ,EAAM0I,GAAQ,CAACvC,MAAU;AACvB,UAAIA,GAAO;AACT,cAAMlH,IAAc0J,EAAA;AACpB,YAAI,CAAC1J,EAAa;AAClB,QAAAM,EAAA,GACA6J,EAAiBnK,CAAW;AAAA,MAC9B;AAAA,IACF,CAAC,GACDe;AAAA,MACE,MAAM,KAAK,UAAUQ,EAAM,OAAO,KAAK;AAAA,MACvC,CAACsK,GAAUC,MAAa;AACtB,QAAID,MAAaC,KACfhC,EAAA;AAAA,MAEJ;AAAA,IAAA,GAEF/I;AAAA,MACE,OAAO;AAAA,QACL,OAAOQ,EAAM,MAAM;AAAA;AAAA,QAEnB,QAAQA,EAAM,MAAM,SAChB,EAAE,GAAGA,EAAM,MAAM,QAAQ,YAAY,WACrC;AAAA,MAAA;AAAA,MAEN,CAACoD,GAAUoH,MAAa;AACtB,QAAI,KAAK,UAAUpH,CAAQ,MAAM,KAAK,UAAUoH,CAAQ,KACtDpL,EAAA;AAAA,MAEJ;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,GAEfI;AAAA,MACE,MAAMQ,EAAM,MAAM,QAAQ;AAAA,MAC1B,CAACmJ,MAAkB;AACjB,cAAM1K,IAAc0J,EAAA;AACpB,YAAI,CAAC1J,EAAa;AAIlB,YAFiBA,EAAY,SAASuB,EAAM,OAAO;AAajD,cAAI;AAEF,YAAAvB,EAAY;AAAA,cACVuB,EAAM;AAAA,cACN;AAAA,cACAmJ;AAAA,YAAA,GAIEA,MAAkB,aAAanJ,EAAM,UAEvC,WAAW,MAAM;AACf,cAAAvB,EAAY,UAAUuB,EAAM,SAASA,EAAM,MAAM;AAAA,YACnD,GAAG,CAAC;AAAA,UAER,SAASrB,GAAO;AACd,oBAAQ,MAAM,IAAIqB,EAAM,OAAO,gCAAgCrB,CAAK;AAAA,UACtE;AAAA;AA1BA,cAAI;AACF,YAAKF,EAAY,UAAUuB,EAAM,QAAQ,KACvCvB,EAAY,UAAUuB,EAAM,UAAUA,EAAM,MAAM,GAEpDvB,EAAY,SAASuB,EAAM,OAAOA,EAAM,MAAM;AAAA,UAChD,SAASrB,GAAO;AACd,oBAAQ,MAAM,IAAIqB,EAAM,OAAO,yBAAyBrB,CAAK;AAAA,UAC/D;AAAA,MAqBJ;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAEpBa;AAAA,MACE,MAAMQ,EAAM;AAAA,MACZ,CAAC0J,MAAc;AACb,cAAMjL,IAAc0J,EAAA;AACpB,YAAI,GAAC1J,KAAe,CAACA,EAAY,SAASuB,EAAM,OAAO,MAGnDA,EAAM,MAAM,QAAQ,eAAe;AACrC,cAAI;AACF,YAAAvB,EAAY,UAAUuB,EAAM,SAAS0J,CAAS;AAAA,UAChD,SAAS/K,GAAO;AACd,oBAAQ;AAAA,cACN,iCAAiCqB,EAAM,OAAO;AAAA,cAC9CrB;AAAA,YAAA;AAAA,UAEJ;AAAA,MAEJ;AAAA,IAAA,GAEFa;AAAA,MACE,MAAMQ,EAAM,MAAM,QAAQ;AAAA,MAC1B,CAACmJ,MAAkB;AACjB,cAAM1K,IAAc0J,EAAA;AACpB,YAAI,CAAC1J,EAAa;AAIlB,YAFiBA,EAAY,SAASuB,EAAM,OAAO;AAcjD,cAAI;AACF,YAAAvB,EAAY;AAAA,cACVuB,EAAM;AAAA,cACN;AAAA,cACAmJ;AAAA,YAAA;AAAA,UAEJ,SAASxK,GAAO;AACd,oBAAQ,MAAM,IAAIqB,EAAM,OAAO,gCAAgCrB,CAAK;AAAA,UACtE;AAAA;AAlBA,cAAI;AACF,YAAKF,EAAY,UAAUuB,EAAM,QAAQ,KACvCvB,EAAY,UAAUuB,EAAM,UAAUA,EAAM,MAAM,GAEpDvB,EAAY,SAASuB,EAAM,OAAOA,EAAM,MAAM;AAAA,UAChD,SAASrB,GAAO;AACd,oBAAQ,MAAM,IAAIqB,EAAM,OAAO,yBAAyBrB,CAAK;AAAA,UAC/D;AAAA,MAaJ;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAEpByB,EAAU,MAAM;AAEd,UADoB+H,EAAA;AAIpB,YAAI;AACF,UAAApJ,EAAA;AAAA,QACF,SAASJ,GAAO;AACd,kBAAQ,MAAM,IAAIqB,EAAM,OAAO,6BAA6BrB,CAAK;AAAA,QACnE;AAAA,IACF,CAAC,aAID6B,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5Rb,UAAMT,IAAQC,GA2BRpC,IAAMR,EAAawC,CAAM,GACzBqI,IAAuBhK,EAAI,EAAK,GAGhCiK,IAAiB,MACdtK,EAAI,SAAS,MAIhBuK,IAAW,CAAC3J,MAAqB;AACrC,MAAKA,KAELA,EAAY,GAAG,cAAc,MAAM;AACjC,cAAM4J,IAAe,MAAM;AACzB,UAAK5J,EAAY,kBAIfyJ,EAAO,QAAQ,MAHfA,EAAO,QAAQ,IACf,WAAWG,GAAc,GAAG;AAAA,QAIhC;AACA,QAAAA,EAAA;AAAA,MACF,CAAC;AAAA,IACH,GAEMtJ,IAAW,MAAY;AAC3B,YAAMN,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AAIF,cAHKA,EAAY,UAAUuB,EAAM,QAAQ,KACvCvB,EAAY,UAAUuB,EAAM,UAAUA,EAAM,MAAM,GAEhD,CAACvB,EAAY,SAASuB,EAAM,OAAO,GAAG;AACxC,kBAAMsI,IAAY;AAAA,cAChB,GAAGtI,EAAM;AAAA,cACT,IAAIA,EAAM;AAAA,cACV,QAAQA,EAAM;AAAA,YAAA;AAEhB,YAAAvB,EAAY,SAAS6J,GAAWtI,EAAM,MAAM;AAAA,UAC9C;AAAA,QACF,SAASrB,GAAO;AACd,kBAAQ,MAAM,6BAA6BA,CAAK;AAAA,QAClD;AAAA,IACF,GAEM4J,IAAe,MAAY;AAC/B,YAAM9J,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,gBAAM8C,IAAS9C,EAAY,UAAUuB,EAAM,QAAQ;AACnD,cAAIuB,GAAQ;AAEV,YAAI9C,EAAY,SAASuB,EAAM,OAAO,KACpCvB,EAAY,YAAYuB,EAAM,OAAO,GAEnCvB,EAAY,UAAUuB,EAAM,QAAQ,KACtCvB,EAAY,aAAauB,EAAM,QAAQ,GAGzCvB,EAAY,UAAUuB,EAAM,UAAUA,EAAM,MAAM;AAClD,kBAAMsI,IAAY;AAAA,cAChB,GAAGtI,EAAM;AAAA,cACT,IAAIA,EAAM;AAAA,cACV,QAAQA,EAAM;AAAA,YAAA;AAKhB,gBAHAvB,EAAY,SAAS6J,GAAWtI,EAAM,MAAM,GAGxCuB,EAAO,UAAU;AACnB,oBAAMkJ,IAAelJ,EAAO,SAAA;AAC5B,cAAIkJ,KAEFA,EAAa,KAAA,EAAO,MAAM,CAAC9L,MAAU;AACnC,wBAAQ,MAAM,wBAAwBA,CAAK;AAAA,cAC7C,CAAC;AAAA,YAEL;AAAA,UACF;AAAA,QACF,SAASA,GAAO;AACd,kBAAQ,MAAM,gCAAgCA,CAAK;AAAA,QACrD;AAAA,IACF,GAEMS,IAAc,MAAY;AAC9B,YAAMX,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,UAAIA,EAAY,SAASuB,EAAM,OAAO,MACpC,OAAO,QAAQA,EAAM,MAAM,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC1C,GAAKqI,CAAK,MAAM;AAChE,YAAAlH,EAAY,iBAAiBuB,EAAM,SAAS1C,GAAKqI,CAAK;AAAA,UACxD,CAAC,GACD,OAAO,QAAQ3F,EAAM,MAAM,UAAU,EAAE,EAAE,QAAQ,CAAC,CAAC1C,GAAKqI,CAAK,MAAM;AACjE,YAAAlH,EAAY,kBAAkBuB,EAAM,SAAS1C,GAAKqI,CAAK;AAAA,UACzD,CAAC;AAAA,QAEL,SAAShH,GAAO;AACd,kBAAQ,MAAM,+BAA+BA,CAAK;AAAA,QACpD;AAAA,IACF;AAGA,WAAAa,EAAM,MAAMQ,EAAM,QAAQuI,GAAc,EAAE,MAAM,IAAM,GACtD/I,EAAM,MAAMQ,EAAM,OAAOZ,GAAa,EAAE,MAAM,IAAM,GAGpDI;AAAA,MACE3B;AAAA,MACA,CAAC2K,MAAW;AACV,QAAIA,KACFJ,EAASI,CAAM;AAAA,MAEnB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAIpBhJ,EAAM0I,GAAQ,CAACvC,MAAU;AACvB,MAAIA,KACF5G,EAAA;AAAA,IAEJ,CAAC,GAGDqB,EAAU,MAAM;AAEd,MADoB+H,EAAA,GACH,mBACfpJ,EAAA;AAAA,IAEJ,CAAC,GAED0J,EAAgB,MAAM;AACpB,YAAMhK,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,gBAAM8C,IAAS9C,EAAY,UAAUuB,EAAM,QAAQ;AACnD,cAAIuB,GAAQ,UAAU;AACpB,kBAAMkJ,IAAelJ,EAAO,SAAA;AAC5B,YAAIkJ,MAEFA,EAAa,MAAA,GACbA,EAAa,OAAA;AAAA,UAEjB;AAEA,UAAIhM,EAAY,SAASuB,EAAM,OAAO,KACpCvB,EAAY,YAAYuB,EAAM,OAAO,GAEnCvB,EAAY,UAAUuB,EAAM,QAAQ,KACtCvB,EAAY,aAAauB,EAAM,QAAQ;AAAA,QAE3C,SAASrB,GAAO;AACd,kBAAQ,MAAM,kCAAkCA,CAAK;AAAA,QACvD;AAAA,IACF,CAAC,aAID6B,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5Lb,UAAMT,IAAQC,GA2BRyK,IAAWjN,EAAOqC,EAAiB;AACzC,QAAI,CAAC4K;AACH,YAAM,IAAI,MAAM,uBAAuB;AAGzC,UAAMnJ,IAASrD,EAA+B;AAAA,MAC5C,MAAM;AAAA,MACN,KAAK,aAAa8B,EAAM,GAAG;AAAA,MAC3B,UAAU;AAAA,MACV,UAAU;AAAA,IAAA,CACX;AACD,WAAAI,EAAU,YAAY;AACpB,YAAMuK,IAAI,IAAIC,GAAQ5K,EAAM,GAAG;AAC/B,MAAA0K,EAAS,IAAIC,CAAC;AAAA,IAGhB,CAAC,mBAIDE,GASwBC,IAAA;AAAA,MARrB,aAAW7K,EAAA;AAAA,MACX,YAAUA,EAAA;AAAA,MACV,QAAQsB,EAAA;AAAA,MACR,OAAK;AAAA,WAAatB,EAAA;AAAA;;MAIlB,QAAQA,EAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;ACvBX,UAAMD,IAAQC,GAmBRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzBqI,IAAuBhK,EAAI,EAAK,GAGhC6M,IAAkBtE,EAAS,MAAM,GAAGzG,EAAM,WAAW,WAAW,GAChEgL,IAAsBvE;AAAA,MAC1B,MAAM,GAAGzG,EAAM,WAAW;AAAA,IAAA,GAEtBiL,IAAqBxE;AAAA,MACzB,MAAM,GAAGzG,EAAM,WAAW;AAAA,IAAA,GAItBmI,IAAiB,MACdtK,EAAI,SAAS,MAIhB6K,IAAe,CAACrH,MAChB,OAAOA,KAAS,WAAiB,KACjCA,KAAQ,OAAOA,KAAS,YAAY,UAAUA,KAC5CA,EAAK,SAAS,uBAAuB,cAAcA,IAC9CA,EAAK,SAAS,SAAS,IAG3B,IAIH6J,IAAmB,MAAY;AACnC,YAAMzM,IAAc0J,EAAA;AACpB,UAAI,GAAC1J,KAAe,CAACA,EAAY;AAIjC,YAAI;AAEF,cAAI,CAACA,EAAY,UAAUuB,EAAM,QAAQ;AACvC,oBAAQ,IAAI,4BAA4BA,EAAM,QAAQ,EAAE,GACxDvB,EAAY,UAAUuB,EAAM,UAAU;AAAA,cACpC,GAAGA,EAAM;AAAA,cACT,SAAS;AAAA,cACT,gBAAgB;AAAA,cAChB,eAAe;AAAA,YAAA,CAChB;AAAA,eACI;AAEL,kBAAMuB,IAAS9C,EAAY,UAAUuB,EAAM,QAAQ;AACnD,YAAIuB,KAAU,aAAaA,KACzBA,EAAO,QAAQvB,EAAM,OAAO,IAAI;AAAA,UAEpC;AAGA,UAAKvB,EAAY,SAASsM,EAAgB,KAAK,MAC7C,QAAQ,IAAI,0BAA0BA,EAAgB,KAAK,EAAE,GAC7DtM,EAAY,SAAS;AAAA,YACnB,IAAIsM,EAAgB;AAAA,YACpB,MAAM;AAAA,YACN,QAAQ/K,EAAM;AAAA,YACd,QAAQ,CAAC,OAAO,aAAa;AAAA,YAC7B,OAAO;AAAA,cACL,gBAAgB;AAAA,gBACd;AAAA,gBACA,CAAC,OAAO,aAAa;AAAA,gBACrBA,EAAM,aAAa,OAAQ,CAAC;AAAA,gBAC5B;AAAA,gBACAA,EAAM,aAAa,OAAQ,CAAC;AAAA,gBAC5B;AAAA,gBACAA,EAAM,aAAa,OAAQ,CAAC;AAAA,cAAA;AAAA,cAE9B,iBAAiB;AAAA,gBACf;AAAA,gBACA,CAAC,OAAO,aAAa;AAAA,gBACrBA,EAAM,aAAa,MAAO,CAAC;AAAA,gBAC3B;AAAA,gBACAA,EAAM,aAAa,MAAO,CAAC;AAAA,gBAC3B;AAAA,gBACAA,EAAM,aAAa,MAAO,CAAC;AAAA,cAAA;AAAA,cAE7B,uBAAuB;AAAA,cACvB,uBAAuB;AAAA,cACvB,kBAAkB;AAAA,YAAA;AAAA,YAEpB,QAAQ;AAAA,cACN,YAAYA,EAAM,aAAa,YAAY;AAAA,YAAA;AAAA,UAC7C,CAC2B,IAI1BvB,EAAY,SAASuM,EAAoB,KAAK,MACjD,QAAQ,IAAI,+BAA+BA,EAAoB,KAAK,EAAE,GACtEvM,EAAY,SAAS;AAAA,YACnB,IAAIuM,EAAoB;AAAA,YACxB,MAAM;AAAA,YACN,QAAQhL,EAAM;AAAA,YACd,QAAQ,CAAC,OAAO,aAAa;AAAA,YAC7B,QAAQ;AAAA,cACN,cAAc;AAAA,cACd,aAAaA,EAAM,UAAU;AAAA,cAC7B,aAAaA,EAAM,UAAU;AAAA,cAC7B,YAAYA,EAAM,aAAa,YAAY;AAAA,YAAA;AAAA,YAE7C,OAAO;AAAA,cACL,cAAcA,EAAM,UAAU;AAAA,YAAA;AAAA,UAChC,CAC2B,IAI1BvB,EAAY,SAASwM,EAAmB,KAAK,MAChD,QAAQ;AAAA,YACN,oCAAoCA,EAAmB,KAAK;AAAA,UAAA,GAE9DxM,EAAY,SAAS;AAAA,YACnB,IAAIwM,EAAmB;AAAA,YACvB,MAAM;AAAA,YACN,QAAQjL,EAAM;AAAA,YACd,QAAQ,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC;AAAA,YACpC,OAAO;AAAA,cACL,gBAAgBA,EAAM,iBAAiB;AAAA,cACvC,iBAAiBA,EAAM,iBAAiB;AAAA,cACxC,uBAAuB;AAAA,cACvB,uBAAuB;AAAA,cACvB,kBAAkB;AAAA,YAAA;AAAA,YAEpB,QAAQ;AAAA,cACN,YAAYA,EAAM,aAAa,YAAY;AAAA,YAAA;AAAA,UAC7C,CAC2B,IAG/B,QAAQ,IAAI,gCAAgCA,EAAM,WAAW,EAAE,GAG/D4I,EAAiBnK,CAAW;AAAA,QAC9B,SAASE,GAAO;AACd,kBAAQ,MAAM,gCAAgCA,CAAK;AAAA,QACrD;AAAA,IACF,GAGM4J,IAAe,MAAY;AAC/B,YAAM9J,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,gBAAM8C,IAAS9C,EAAY,UAAUuB,EAAM,QAAQ;AAGnD,UAAIuB,KAAU,aAAaA,KACzB,QAAQ,IAAI,mBAAmBvB,EAAM,QAAQ,YAAY,GACzDuB,EAAO,QAAQvB,EAAM,OAAO,IAAI,GAIhC,WAAW,MAAM;AAEf,YAAAkL,EAAA;AAAA,UACF,GAAG,GAAG,KACI3J,KAEV2J,EAAA;AAAA,QAEJ,SAASvM,GAAO;AACd,kBAAQ,MAAM,0BAA0BA,CAAK;AAAA,QAC/C;AAAA,IACF,GAGM+D,IAAmB,CAACC,MAA2B;AACnD,YAAMlE,IAAc0J,EAAA;AACpB,UAAI,CAAC1J,EAAa;AAElB,YAAM0M,IAAaxI,IAAU,YAAY;AAEzC;AAAA,QACEoI,EAAgB;AAAA,QAChBC,EAAoB;AAAA,QACpBC,EAAmB;AAAA,MAAA,EACnB,QAAQ,CAACjM,MAAY;AACrB,QAAIP,EAAY,SAASO,CAAO,KAC9BP,EAAY,kBAAkBO,GAAS,cAAcmM,CAAU;AAAA,MAEnE,CAAC;AAAA,IACH,GAGMvC,IAAmB,CAACnK,MAAqB;AAC7C,UAAKA;AAEL,YAAI;AAEF,UAAAA,EAAY;AAAA,YACV;AAAA,YACAsM,EAAgB;AAAA,YAChB,CAAClC,MAA0B;AACzB,cAAIA,EAAE,YAAYA,EAAE,SAAS,SAAS,KACpCjI,EAAK,iBAAiB;AAAA,gBACpB,UAAUiI,EAAE;AAAA,gBACZ,aAAaA,EAAE;AAAA,cAAA,CAChB;AAAA,YAEL;AAAA,UAAA,GAIFpK,EAAY;AAAA,YACV;AAAA,YACAwM,EAAmB;AAAA,YACnB,CAACpC,MAA0B;AACzB,cAAIA,EAAE,YAAYA,EAAE,SAAS,SAAS,KACpCjI,EAAK,eAAe;AAAA,gBAClB,UAAUiI,EAAE;AAAA,gBACZ,aAAaA,EAAE;AAAA,cAAA,CAChB;AAAA,YAEL;AAAA,UAAA,GAIF,CAACkC,EAAgB,OAAOE,EAAmB,KAAK,EAAE,QAAQ,CAACjM,MAAY;AACrE,YAAAP,EAAY,GAAG,cAAcO,GAAS,MAAM;AAC1C,cAAAP,EAAY,UAAA,EAAY,MAAM,SAAS;AAAA,YACzC,CAAC,GAEDA,EAAY,GAAG,cAAcO,GAAS,MAAM;AAC1C,cAAAP,EAAY,UAAA,EAAY,MAAM,SAAS;AAAA,YACzC,CAAC;AAAA,UACH,CAAC;AAAA,QACH,SAASE,GAAO;AACd,kBAAQ,MAAM,kCAAkCA,CAAK;AAAA,QACvD;AAAA,IACF,GAGMyJ,IAAW,CAAC3J,MAAqB;AACrC,MAAKA,MAELA,EAAY,GAAG,cAAc,MAAM;AACjC,cAAM2M,IAAmB,MAAM;AAC7B,UAAK3M,EAAY,mBAIfyJ,EAAO,QAAQ,IAEXQ,EAAa1I,EAAM,OAAO,IAAI,KAChCkL,EAAA,MANFhD,EAAO,QAAQ,IACf,WAAWkD,GAAkB,GAAG;AAAA,QAQpC;AACA,QAAAA,EAAA;AAAA,MACF,CAAC,GAGG3M,EAAY,oBACdyJ,EAAO,QAAQ,IAEXQ,EAAa1I,EAAM,OAAO,IAAI,KAChCkL,EAAA;AAAA,IAGN;AAGA,WAAA1L;AAAA,MACE,MAAMQ,EAAM,OAAO;AAAA,MACnB,CAACqL,MAAY;AAEX,YAAI3C,EAAa2C,CAAO,GAAG;AACzB,gBAAM5M,IAAc0J,EAAA;AACpB,UAAI1J,GAAa,oBAEVA,EAAY,UAAUuB,EAAM,QAAQ,IAIvCuI,EAAA,IAHA2C,EAAA;AAAA,QAMN;AAAA,MACF;AAAA,MACA,EAAE,MAAM,IAAM,WAAW,GAAA;AAAA,IAAK,GAGhC1L,EAAM,MAAMQ,EAAM,YAAY0C,CAAgB,GAE9ClD;AAAA,MACE3B;AAAA,MACA,CAAC2K,MAAW;AACV,QAAIA,KACFJ,EAASI,CAAM;AAAA,MAEnB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAIpBpI,EAAU,MAAM;AAGd,MAFoB+H,EAAA,GAEH,mBAAmBO,EAAa1I,EAAM,OAAO,IAAI,KAChEkL,EAAA;AAAA,IAEJ,CAAC,GAEDzC,EAAgB,MAAM;AACpB,YAAMhK,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AAEF,WAACsM,EAAgB,OAAOE,EAAmB,KAAK,EAAE,QAAQ,CAACjM,MAAY;AACrE,YAAAP,EAAY,IAAI,SAASO,GAAS,MAAM;AAAA,YAAC,CAAC,GAC1CP,EAAY,IAAI,cAAcO,GAAS,MAAM;AAAA,YAAC,CAAC,GAC/CP,EAAY,IAAI,cAAcO,GAAS,MAAM;AAAA,YAAC,CAAC;AAAA,UACjD,CAAC,GAGD;AAAA,YACE+L,EAAgB;AAAA,YAChBC,EAAoB;AAAA,YACpBC,EAAmB;AAAA,UAAA,EACnB,QAAQ,CAACjM,MAAY;AACrB,YAAIP,EAAY,SAASO,CAAO,KAC9BP,EAAY,YAAYO,CAAO;AAAA,UAEnC,CAAC,GAGGP,EAAY,UAAUuB,EAAM,QAAQ,KACtCvB,EAAY,aAAauB,EAAM,QAAQ;AAAA,QAE3C,SAASrB,GAAO;AACd,kBAAQ,MAAM,qCAAqCA,CAAK;AAAA,QAC1D;AAAA,IACF,CAAC,aAID6B,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;AC5Wb,UAAMT,IAAQC,GAaRW,IAAOC,GAMPhD,IAAMR,EAAawC,CAAM,GACzBqI,IAAuBhK,EAAI,EAAK,GAEhCoN,IAAW7E,EAAS,MAAM,GAAGzG,EAAM,EAAE,SAAS,GAC9ChB,IAAUyH,EAAS,MAAM,GAAGzG,EAAM,EAAE,QAAQ,GAG5CuL,IAAc9E;AAAA,MAClB,OAAsD;AAAA,QACpD,MAAM;AAAA,QACN,UACEzG,EAAM,YAAY,UAAU,IACxB;AAAA,UACE;AAAA,YACE,MAAM;AAAA,YACN,YAAY,CAAA;AAAA,YACZ,UAAU;AAAA,cACR,MAAM;AAAA,cACN,aAAaA,EAAM;AAAA,YAAA;AAAA,UACrB;AAAA,QACF,IAEF,CAAA;AAAA,MAAC;AAAA,IACT,GAIImI,IAAiB,MACdtK,EAAI,SAAS,MAIhBuK,IAAW,CAAC3J,MAAqB;AACrC,MAAKA,KAELA,EAAY,GAAG,cAAc,MAAM;AACjC,cAAM4J,IAAe,MAAM;AACzB,UAAK5J,EAAY,kBAIfyJ,EAAO,QAAQ,MAHfA,EAAO,QAAQ,IACf,WAAWG,GAAc,GAAG;AAAA,QAIhC;AACA,QAAAA,EAAA;AAAA,MACF,CAAC;AAAA,IACH,GAEMtJ,IAAW,MAAY;AAC3B,YAAMN,IAAc0J,EAAA;AACpB,UAAI,GAAC1J,KAAe,CAACA,EAAY,oBAG7B,EAAAuB,EAAM,YAAY,SAAS;AAE/B,YAAI;AAUF,cARKvB,EAAY,UAAU6M,EAAS,KAAK,KACvC7M,EAAY,UAAU6M,EAAS,OAAO;AAAA,YACpC,MAAM;AAAA,YACN,MAAMC,EAAY;AAAA,UAAA,CACnB,GAIC,CAAC9M,EAAY,SAASO,EAAQ,KAAK,GAAG;AACxC,kBAAMsJ,IAAoC;AAAA,cACxC,IAAItJ,EAAQ;AAAA,cACZ,MAAM;AAAA,cACN,QAAQsM,EAAS;AAAA,cACjB,QAAQ;AAAA,gBACN,YAAYtL,EAAM;AAAA,gBAClB,aAAaA,EAAM;AAAA,gBACnB,YAAYA,EAAM,UAAU,YAAY;AAAA,cAAA;AAAA,cAE1C,OAAO;AAAA,gBACL,cAAcA,EAAM;AAAA,gBACpB,cAAcA,EAAM;AAAA,gBACpB,gBAAgBA,EAAM;AAAA,gBACtB,GAAIA,EAAM,OAAO,KAAK,EAAE,aAAaA,EAAM,KAAA;AAAA,gBAC3C,GAAIA,EAAM,aAAa,EAAE,kBAAkBA,EAAM,UAAA;AAAA,cAAU;AAAA,YAC7D;AAGF,YAAAvB,EAAY,SAAS6J,GAAWtI,EAAM,UAAU,MAAS;AAAA,UAC3D;AAAA,QACF,SAASrB,GAAO;AACd,kBAAQ,MAAM,6BAA6BA,CAAK;AAAA,QAClD;AAAA,IACF,GAEM4J,IAAe,MAAY;AAC/B,YAAM9J,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,gBAAM8C,IAAS9C,EAAY,UAAU6M,EAAS,KAAK;AAInD,UAAI/J,KAAU,aAAaA,IACzBA,EAAO,QAAQgK,EAAY,KAAK,IACvB,CAAChK,KAAUvB,EAAM,YAAY,UAAU,KAChDjB,EAAA;AAAA,QAEJ,SAASJ,GAAO;AACd,kBAAQ,MAAM,gCAAgCA,CAAK;AAAA,QACrD;AAAA,IACF,GAEM6M,IAAmB,MAAY;AACnC,YAAM/M,IAAc0J,EAAA;AACpB,UAAI,GAAC1J,KAAe,CAACA,EAAY,SAASO,EAAQ,KAAK;AAEvD,YAAI;AAEF,UAAAP,EAAY,iBAAiBO,EAAQ,OAAO,cAAcgB,EAAM,KAAK,GACrEvB,EAAY,iBAAiBO,EAAQ,OAAO,cAAcgB,EAAM,KAAK,GACrEvB,EAAY;AAAA,YACVO,EAAQ;AAAA,YACR;AAAA,YACAgB,EAAM;AAAA,UAAA,GAGJA,EAAM,OAAO,KACfvB,EAAY,iBAAiBO,EAAQ,OAAO,aAAagB,EAAM,IAAI,GAEjEA,EAAM,aACRvB,EAAY;AAAA,YACVO,EAAQ;AAAA,YACR;AAAA,YACAgB,EAAM;AAAA,UAAA,GAKVvB,EAAY,kBAAkBO,EAAQ,OAAO,YAAYgB,EAAM,OAAO,GACtEvB,EAAY,kBAAkBO,EAAQ,OAAO,aAAagB,EAAM,QAAQ,GACxEvB,EAAY;AAAA,YACVO,EAAQ;AAAA,YACR;AAAA,YACAgB,EAAM,UAAU,YAAY;AAAA,UAAA;AAAA,QAEhC,SAASrB,GAAO;AACd,kBAAQ,MAAM,qCAAqCA,CAAK;AAAA,QAC1D;AAAA,IACF,GAEMiK,IAAmB,CAACnK,MAAqB;AAC7C,UAAI,GAACA,KAAe,CAACuB,EAAM;AAE3B,YAAI;AAEF,UAAAvB,EAAY,GAAG,SAASO,EAAQ,OAAO,CAAC6J,MAA0B;AAChE,YAAAjI,EAAK,SAAS;AAAA,cACZ,aAAaiI,EAAE;AAAA,YAAA,CAChB;AAAA,UACH,CAAC,GAGDpK,EAAY,GAAG,cAAcO,EAAQ,OAAO,MAAM;AAChD,YAAAP,EAAY,UAAA,EAAY,MAAM,SAAS,WACvCmC,EAAK,YAAY;AAAA,UACnB,CAAC,GAEDnC,EAAY,GAAG,cAAcO,EAAQ,OAAO,MAAM;AAChD,YAAAP,EAAY,UAAA,EAAY,MAAM,SAAS,IACvCmC,EAAK,YAAY;AAAA,UACnB,CAAC;AAAA,QACH,SAASjC,GAAO;AACd,kBAAQ,MAAM,wCAAwCA,CAAK;AAAA,QAC7D;AAAA,IACF;AAGA,WAAAa;AAAA,MACE,MAAMQ,EAAM;AAAA,MACZ,MAAM;AACJ,cAAMvB,IAAc0J,EAAA;AACpB,QAAI1J,GAAa,oBACVA,EAAY,UAAU6M,EAAS,KAAK,IAGvC/C,EAAA,IAFAxJ,EAAA;AAAA,MAKN;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,GAIfS;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMwL,EAAA;AAAA,MACN,EAAE,MAAM,GAAA;AAAA,IAAK,GAIfhM;AAAA,MACE3B;AAAA,MACA,CAAC2K,MAAW;AACV,QAAIA,MACFJ,EAASI,CAAM,GACXA,EAAO,oBACTN,EAAO,QAAQ;AAAA,MAGrB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAIpB1I,EAAM0I,GAAQ,CAACvC,MAAU;AACvB,UAAIA,KAAS3F,EAAM,YAAY,UAAU,GAAG;AAC1C,cAAMvB,IAAc0J,EAAA;AACpB,QAAI1J,MACFM,EAAA,GACA6J,EAAiBnK,CAAW;AAAA,MAEhC;AAAA,IACF,CAAC,GAGD2B,EAAU,MAAM;AACd,UAAI;AACF,cAAM3B,IAAc0J,EAAA;AACpB,QAAI1J,GAAa,cAAA,KAAmBuB,EAAM,YAAY,UAAU,MAC9DjB,EAAA,GACA6J,EAAiBnK,CAAW;AAAA,MAEhC,SAASE,GAAO;AACd,gBAAQ,MAAM,+BAA+BA,CAAK;AAAA,MACpD;AAAA,IACF,CAAC,GAED8J,EAAgB,MAAM;AACpB,YAAMhK,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,UAAIA,EAAY,SAASO,EAAQ,KAAK,KACpCP,EAAY,YAAYO,EAAQ,KAAK,GAEnCP,EAAY,UAAU6M,EAAS,KAAK,KACtC7M,EAAY,aAAa6M,EAAS,KAAK;AAAA,QAE3C,SAAS3M,GAAO;AACd,kBAAQ,MAAM,kCAAkCA,CAAK;AAAA,QACvD;AAAA,IACF,CAAC,aAID6B,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;ACtQb,UAAMT,IAAQC,GAWRW,IAAOC,GAMPhD,IAAMR,EAAawC,CAAM,GACzBqI,IAAuBhK,EAAI,EAAK,GAChC4K,IAAc5K,EAAI,EAAK,GAEvBoN,IAAW7E,EAAS,MAAM,GAAGzG,EAAM,EAAE,SAAS,GAC9CyL,IAAchF,EAAS,MAAM,GAAGzG,EAAM,EAAE,OAAO,GAC/C0L,IAAcjF,EAAS,MAAM,GAAGzG,EAAM,EAAE,OAAO,GAO/C2L,IAAgBlF,EAAS,MACzB,CAACzG,EAAM,QAAQ,CAACA,EAAM,KAAK,YAAYA,EAAM,KAAK,SAAS,WAAW,IACjE,OAMF;AAAA,MACL,MAAM;AAAA,MACN,WANeA,EAAM,eACnB,CAAC,GAAGA,EAAM,KAAK,QAAQ,EAAE,QAAA,IACzBA,EAAM,KAAK,UAIM,IAAI,CAAC4L,OAAO;AAAA,QAC7B,GAAGA;AAAA,QACH,YAAY;AAAA,UACV,GAAGA,EAAE;AAAA;AAAA,UAEL,WAAWA,EAAE,WAAW,MAAM,WAAW,GAAG,IACxCA,EAAE,WAAW,QACb,IAAIA,EAAE,WAAW,KAAK;AAAA,QAAA;AAAA,MAC5B,EACA;AAAA,IAAA,CAEL,GAGKzD,IAAiB,MACdtK,EAAI,SAAS,MAIhBuK,IAAW,CAAC3J,MAAqB;AACrC,MAAKA,KAELA,EAAY,GAAG,cAAc,MAAM;AACjC,cAAM4J,IAAe,MAAM;AACzB,UAAK5J,EAAY,kBAIfyJ,EAAO,QAAQ,MAHfA,EAAO,QAAQ,IACf,WAAWG,GAAc,GAAG;AAAA,QAIhC;AACA,QAAAA,EAAA;AAAA,MACF,CAAC;AAAA,IACH,GAEMwD,IAAY,MAAY;AAC5B,YAAMpN,IAAc0J,EAAA;AACpB,UAAI,CAAC1J,KAAe,CAACA,EAAY,gBAAiB;AAElD,YAAM4C,IAAOsK,EAAc;AAC3B,UAAKtK;AAEL,YAAI;AAUF,cARK5C,EAAY,UAAU6M,EAAS,KAAK,KACvC7M,EAAY,UAAU6M,EAAS,OAAO;AAAA,YACpC,MAAM;AAAA,YACN,MAAAjK;AAAA,UAAA,CACD,GAIC,CAAC5C,EAAY,SAASgN,EAAY,KAAK,GAAG;AAC5C,kBAAMK,IAAwC;AAAA,cAC5C,IAAIL,EAAY;AAAA,cAChB,MAAM;AAAA,cACN,QAAQH,EAAS;AAAA,cACjB,QAAQ;AAAA,gBACN,YAAYtL,EAAM,UAAU,YAAY;AAAA,cAAA;AAAA,cAE1C,OAAO;AAAA,gBACL,cAAc,CAAC,OAAO,WAAW;AAAA,gBACjC,gBAAgBA,EAAM;AAAA,cAAA;AAAA,YACxB;AAGF,YAAAvB,EAAY,SAASqN,GAAe9L,EAAM,UAAU,MAAS;AAAA,UAC/D;AAGA,cAAI,CAACvB,EAAY,SAASiN,EAAY,KAAK,GAAG;AAC5C,kBAAMK,IAAwC;AAAA,cAC5C,IAAIL,EAAY;AAAA,cAChB,MAAM;AAAA,cACN,QAAQJ,EAAS;AAAA,cACjB,QAAQ;AAAA,gBACN,YAAYtL,EAAM,UAAU,YAAY;AAAA,cAAA;AAAA,cAE1C,OAAO;AAAA,gBACL,cAAc,CAAC,OAAO,WAAW;AAAA,gBACjC,cAAcA,EAAM;AAAA,gBACpB,gBAAgBA,EAAM;AAAA,cAAA;AAAA,YACxB;AAGF,YAAAvB,EAAY,SAASsN,GAAe/L,EAAM,UAAU,MAAS;AAAA,UAC/D;AAAA,QACF,SAASrB,GAAO;AACd,kBAAQ,MAAM,kCAAkCA,CAAK;AAAA,QACvD;AAAA,IACF,GAEM4J,IAAe,MAAY;AAC/B,YAAM9J,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,gBAAM8C,IAAS9C,EAAY,UAAU6M,EAAS,KAAK,GAI7CjK,IAAOsK,EAAc;AAE3B,UAAIpK,KAAU,aAAaA,IACrBF,KACFE,EAAO,QAAQF,CAAI,IAEZ,CAACE,KAAUF,KACpBwK,EAAA;AAAA,QAEJ,SAASlN,GAAO;AACd,kBAAQ,MAAM,oCAAoCA,CAAK;AAAA,QACzD;AAAA,IACF,GAEM6M,IAAmB,MAAY;AACnC,YAAM/M,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AAEF,UAAIA,EAAY,SAASgN,EAAY,KAAK,MACxChN,EAAY;AAAA,YACVgN,EAAY;AAAA,YACZ;AAAA,YACAzL,EAAM;AAAA,UAAA,GAERvB,EAAY;AAAA,YACVgN,EAAY;AAAA,YACZ;AAAA,YACAzL,EAAM,UAAU,YAAY;AAAA,UAAA,IAK5BvB,EAAY,SAASiN,EAAY,KAAK,MACxCjN,EAAY;AAAA,YACViN,EAAY;AAAA,YACZ;AAAA,YACA1L,EAAM;AAAA,UAAA,GAERvB,EAAY;AAAA,YACViN,EAAY;AAAA,YACZ;AAAA,YACA1L,EAAM;AAAA,UAAA,GAERvB,EAAY;AAAA,YACViN,EAAY;AAAA,YACZ;AAAA,YACA1L,EAAM,UAAU,YAAY;AAAA,UAAA;AAAA,QAGlC,SAASrB,GAAO;AACd,kBAAQ,MAAM,yCAAyCA,CAAK;AAAA,QAC9D;AAAA,IACF,GAEMiK,IAAmB,CAACnK,MAAqB;AAC7C,UAAI,GAACA,KAAe,CAACuB,EAAM;AAE3B,YAAI;AAEF,UAAAvB,EAAY,GAAG,SAASgN,EAAY,OAAO,CAAC5C,MAA0B;AACpE,YAAIA,EAAE,YAAYA,EAAE,SAAS,SAAS,KACpCjI,EAAK,SAAS;AAAA,cACZ,SAASiI,EAAE,SAAS,CAAC;AAAA,cACrB,aAAaA,EAAE;AAAA,YAAA,CAChB;AAAA,UAEL,CAAC,GAGDpK,EAAY;AAAA,YACV;AAAA,YACAgN,EAAY;AAAA,YACZ,CAAC5C,MAA0B;AACzB,cAAApK,EAAY,UAAA,EAAY,MAAM,SAAS,WACnCoK,EAAE,YAAYA,EAAE,SAAS,SAAS,KACpCjI,EAAK,cAAciI,EAAE,SAAS,CAAC,CAAgC;AAAA,YAEnE;AAAA,UAAA,GAGFpK,EAAY,GAAG,cAAcgN,EAAY,OAAO,MAAM;AACpD,YAAAhN,EAAY,UAAA,EAAY,MAAM,SAAS,IACvCmC,EAAK,YAAY;AAAA,UACnB,CAAC;AAAA,QACH,SAASjC,GAAO;AACd,kBAAQ,MAAM,4CAA4CA,CAAK;AAAA,QACjE;AAAA,IACF,GAGMqN,IAAmB,YAAY;AACnC,UAAIlD,EAAY,MAAO;AAEvB,YAAMrK,IAAc0J,EAAA;AACpB,MAAI,CAAC1J,KAAe,CAACA,EAAY,mBAC5BkN,EAAc,UAGnB,MAAM3C,GAAA,GAGF,CAAAF,EAAY,UAEhB+C,EAAA,GACAjD,EAAiBnK,CAAW,GAC5BqK,EAAY,QAAQ;AAAA,IACtB;AAGA,WAAAtJ;AAAA,MACE,MAAMQ,EAAM;AAAA,MACZ,MAAM;AACJ,cAAMvB,IAAc0J,EAAA;AACpB,QAAI1J,GAAa,oBACVA,EAAY,UAAU6M,EAAS,KAAK,IAGvC/C,EAAA,IAFAsD,EAAA;AAAA,MAKN;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,GAIfrM;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMwL,EAAA;AAAA,MACN,EAAE,MAAM,GAAA;AAAA,IAAK,GAKfhM,EAAM0I,GAAQ,CAACvC,MAAU;AACvB,MAAIA,KACFqG,EAAA;AAAA,IAEJ,CAAC,GAGDxM;AAAA,MACE3B;AAAA,MACA,CAAC2K,MAAW;AACV,QAAIA,MACFJ,EAASI,CAAM,GACXA,EAAO,oBACTN,EAAO,QAAQ,IAEf8D,EAAA;AAAA,MAGN;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAIpB5L,EAAU,MAAM;AAEd,MAAA4I,GAAS,MAAM;AACb,QAAAgD,EAAA;AAAA,MACF,CAAC;AAAA,IACH,CAAC,GAEDvD,EAAgB,MAAM;AACpB,YAAMhK,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AAEF,UAAIA,EAAY,SAASiN,EAAY,KAAK,KACxCjN,EAAY,YAAYiN,EAAY,KAAK,GAEvCjN,EAAY,SAASgN,EAAY,KAAK,KACxChN,EAAY,YAAYgN,EAAY,KAAK,GAGvChN,EAAY,UAAU6M,EAAS,KAAK,KACtC7M,EAAY,aAAa6M,EAAS,KAAK;AAAA,QAE3C,SAAS3M,GAAO;AACd,kBAAQ,MAAM,sCAAsCA,CAAK;AAAA,QAC3D;AAAA,IACF,CAAC,aAID6B,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxWb,UAAMT,IAAQC,GAmBRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIC,GAAiB;AAAA,MAC1B,IAAIlM,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,aAAaA,EAAM;AAAA,MACnB,WAAWA,EAAM,aAAa;AAAA,MAC9B,cAAcA,EAAM,gBAAgB,CAAC,KAAK,KAAK,CAAC;AAAA,MAChD,cAAcA,EAAM,gBAAgB,CAAC,GAAG,GAAG,CAAC;AAAA,MAC5C,cAAcA,EAAM,gBAAgB;AAAA,MACpC,aAAaA,EAAM;AAAA,MACnB,aAAaA,EAAM;AAAA,MACnB,iBAAiBA,EAAM;AAAA,MACvB,iBAAiBA,EAAM;AAAA,MACvB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,oBAAoBA,EAAM;AAAA,MAC1B,oBAAoBA,EAAM;AAAA,MAC1B,SAASA,EAAM;AAAA,MACf,QAAQA,EAAM;AAAA,MACd,WAAWA,EAAM;AAAA,MACjB,cAAcA,EAAM;AAAA,MACpB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CAC1B,GAGtBpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClGb,UAAMT,IAAQC,GAaRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIG,GAAS;AAAA,MAClB,IAAIpM,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,mBAAmBA,EAAM;AAAA,MACzB,mBAAmBA,EAAM;AAAA,MACzB,gBAAgBA,EAAM,kBAAkB,CAAC,KAAK,KAAK,CAAC;AAAA,MACpD,gBAAgBA,EAAM,kBAAkB,CAAC,GAAG,KAAK,GAAG;AAAA,MACpD,UAAUA,EAAM,YAAY;AAAA,MAC5B,WAAWA,EAAM,aAAa;AAAA,MAC9B,SAASA,EAAM,WAAW;AAAA,MAC1B,aAAaA,EAAM;AAAA,MACnB,aAAaA,EAAM;AAAA,MACnB,YAAYA,EAAM;AAAA,MAClB,YAAYA,EAAM;AAAA,MAClB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CAClC,GAGdpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtEb,UAAMT,IAAQC,GAwBRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAII,GAAa;AAAA,MACtB,IAAIrM,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,cAAcA,EAAM,gBAAgB,CAAC,KAAK,KAAK,KAAK,GAAG;AAAA,MACvD,cAAcA,EAAM,gBAAgB,CAAC,GAAG,GAAG,GAAG,GAAG;AAAA,MACjD,cAAcA,EAAM,gBAAgB;AAAA,MACpC,gBAAgBA,EAAM,kBAAkB;AAAA,MACxC,cAAcA,EAAM,gBAAgB;AAAA,MACpC,SAASA,EAAM;AAAA,MACf,QAAQA,EAAM;AAAA,MACd,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,WAAWA,EAAM;AAAA,MACjB,WAAWA,EAAM;AAAA,MACjB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,oBAAoBA,EAAM;AAAA,MAC1B,oBAAoBA,EAAM;AAAA,MAC1B,kBAAkBA,EAAM;AAAA,MACxB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,kBAAkBA,EAAM;AAAA,MACxB,kBAAkBA,EAAM;AAAA,MACxB,sBAAsBA,EAAM;AAAA,MAC5B,sBAAsBA,EAAM;AAAA,MAC5B,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CACS,GAGzDpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AClHb,UAAMT,IAAQC,GAeRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIK,GAAU;AAAA,MACnB,IAAItM,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM,YAAY,CAAC,GAAG,GAAG,GAAG,GAAG;AAAA,MACzC,UAAUA,EAAM,YAAY;AAAA,MAC5B,YAAYA,EAAM;AAAA,MAClB,YAAYA,EAAM;AAAA,MAClB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,YAAYA,EAAM;AAAA,MAClB,cAAcA,EAAM;AAAA,MACpB,WAAWA,EAAM;AAAA,MACjB,YAAYA,EAAM;AAAA,MAClB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CACjC,GAGfpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;AClFb,UAAMT,IAAQC,GAWRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIM,GAAU;AAAA,MACnB,IAAIvM,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,mBAAmBA,EAAM;AAAA,MACzB,mBAAmBA,EAAM;AAAA,MACzB,UAAUA,EAAM,YAAY,CAAC,GAAG,GAAG,GAAG,GAAG;AAAA,MACzC,UAAUA,EAAM,YAAY;AAAA,MAC5B,YAAYA,EAAM;AAAA,MAClB,YAAYA,EAAM;AAAA,MAClB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CACjC,GAGfpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChEb,UAAMT,IAAQC,GAkBRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIO,GAAa;AAAA,MACtB,IAAIxM,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,YAAYA,EAAM;AAAA,MAClB,cAAcA,EAAM,gBAAgB,CAAC,KAAK,KAAK,KAAK,GAAG;AAAA,MACvD,cAAcA,EAAM,gBAAgB,CAAC,GAAG,GAAG,GAAG,GAAG;AAAA,MACjD,cAAcA,EAAM,gBAAgB;AAAA,MACpC,cAAcA,EAAM,gBAAgB;AAAA,MACpC,QAAQA,EAAM;AAAA,MACd,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,WAAWA,EAAM;AAAA,MACjB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,oBAAoBA,EAAM;AAAA,MAC1B,oBAAoBA,EAAM;AAAA,MAC1B,kBAAkBA,EAAM;AAAA,MACxB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CAC9B,GAGlBpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;ACnGb,UAAMT,IAAQC,GAWRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIQ,GAAkB;AAAA,MAC3B,IAAIzM,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,YAAYA,EAAM;AAAA,MAClB,cAAcA,EAAM,gBAAgB,CAAC,GAAG,GAAG,GAAG,GAAG;AAAA,MACjD,cAAcA,EAAM,gBAAgB,CAAC,GAAG,GAAG,GAAG,GAAG;AAAA,MACjD,cAAcA,EAAM,gBAAgB;AAAA,MACpC,QAAQA,EAAM;AAAA,MACd,UAAUA,EAAM;AAAA,MAChB,WAAWA,EAAM;AAAA,MACjB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CACzB,GAGvBpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3Db,UAAMT,IAAQC,GAaRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIS,GAAU;AAAA,MACnB,IAAI1M,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,aAAaA,EAAM;AAAA,MACnB,SAASA,EAAM,WAAW;AAAA,MAC1B,SAASA,EAAM,WAAW;AAAA,MAC1B,UAAUA,EAAM,YAAY,CAAC,KAAK,KAAK,KAAK,GAAG;AAAA,MAC/C,UAAUA,EAAM,YAAY;AAAA,MAC5B,WAAWA,EAAM;AAAA,MACjB,aAAaA,EAAM;AAAA,MACnB,WAAWA,EAAM;AAAA,MACjB,WAAWA,EAAM;AAAA,MACjB,eAAeA,EAAM;AAAA,MACrB,eAAeA,EAAM;AAAA,MACrB,WAAWA,EAAM;AAAA,MACjB,aAAaA,EAAM;AAAA,MACnB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CACjC,GAGfpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxEb,UAAMT,IAAQC,GAqBRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIU,GAAU;AAAA,MACnB,IAAI3M,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,aAAaA,EAAM;AAAA,MACnB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM,WAAW;AAAA,MAC1B,UAAUA,EAAM,YAAY,CAAC,GAAG,GAAG,GAAG,GAAG;AAAA,MACzC,UAAUA,EAAM,YAAY;AAAA,MAC5B,eAAeA,EAAM,iBAAiB;AAAA,MACtC,sBAAsBA,EAAM,wBAAwB;AAAA,MACpD,gBAAgBA,EAAM,kBAAkB,CAAC,GAAG,CAAC;AAAA,MAC7C,oBAAoBA,EAAM;AAAA,MAC1B,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,YAAYA,EAAM;AAAA,MAClB,mBAAmBA,EAAM;AAAA,MACzB,WAAWA,EAAM;AAAA,MACjB,WAAWA,EAAM;AAAA,MACjB,WAAWA,EAAM;AAAA,MACjB,eAAeA,EAAM;AAAA,MACrB,eAAeA,EAAM;AAAA,MACrB,cAAcA,EAAM;AAAA,MACpB,YAAYA,EAAM;AAAA,MAClB,YAAYA,EAAM;AAAA,MAClB,YAAYA,EAAM;AAAA,MAClB,cAAcA,EAAM;AAAA,MACpB,WAAWA,EAAM;AAAA,MACjB,UAAUA,EAAM;AAAA,MAChB,cAAcA,EAAM;AAAA,MACpB,cAAcA,EAAM;AAAA,MACpB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CACjC,GAGfpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpHb,UAAMT,IAAQC,GAsBRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIW,GAAY;AAAA,MACrB,IAAI5M,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,aAAaA,EAAM;AAAA,MACnB,cAAcA,EAAM,gBAAgB,CAAC,KAAK,GAAG,GAAG,GAAG;AAAA,MACnD,cAAcA,EAAM,gBAAgB,CAAC,GAAG,GAAG,GAAG,GAAG;AAAA,MACjD,cAAcA,EAAM,gBAAgB;AAAA,MACpC,gBAAgBA,EAAM;AAAA,MACtB,QAAQA,EAAM;AAAA,MACd,OAAOA,EAAM;AAAA,MACb,UAAUA,EAAM;AAAA,MAChB,QAAQA,EAAM;AAAA,MACd,UAAUA,EAAM;AAAA,MAChB,gBAAgBA,EAAM;AAAA,MACtB,QAAQA,EAAM;AAAA,MACd,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,WAAWA,EAAM;AAAA,MACjB,aAAaA,EAAM;AAAA,MACnB,aAAaA,EAAM;AAAA,MACnB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,oBAAoBA,EAAM;AAAA,MAC1B,oBAAoBA,EAAM;AAAA,MAC1B,UAAUA,EAAM;AAAA,MAChB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CAC/B,GAGjBpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;AC/Gb,UAAMT,IAAQC,GAQRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIY,GAAY;AAAA,MACrB,IAAI7M,EAAM;AAAA,MACV,OAAOA,EAAM;AAAA,MACb,QAAQA,EAAM;AAAA,MACd,aAAaA,EAAM;AAAA,MACnB,mBAAmBA,EAAM;AAAA,MACzB,YAAYA,EAAM;AAAA,MAClB,kBAAkBA,EAAM,oBAAoB,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,MACvD,WAAWA,EAAM,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,MAC5C,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CACQ,GAGxDpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;ACvEb,UAAMT,IAAQC,GAWRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIa,GAAc;AAAA,MACvB,IAAI9M,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,aAAaA,EAAM;AAAA,MACnB,cAAcA,EAAM,gBAAgB,CAAC,KAAK,GAAG,GAAG,GAAG;AAAA,MACnD,cAAcA,EAAM,gBAAgB;AAAA,MACpC,UAAUA,EAAM;AAAA,MAChB,UAAUA,EAAM;AAAA,MAChB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,UAAUA,EAAM;AAAA,MAChB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CAC7B,GAGnBpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;AC7Eb,UAAMT,IAAQC,GASRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIc,GAAgB;AAAA,MACzB,IAAI/M,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,aAAaA,EAAM;AAAA,MACnB,UAAUA,EAAM,YAAY,CAAC,GAAG,GAAG,GAAG,GAAG;AAAA,MACzC,WAAWA,EAAM,aAAa,CAAC,GAAG,GAAG,CAAC;AAAA,MACtC,WAAWA,EAAM;AAAA,MACjB,WAAWA,EAAM;AAAA,MACjB,UAAUA,EAAM;AAAA,MAChB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CAC3B,GAGrBpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;ACnEb,UAAMT,IAAQC,GAYRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIe,GAAa;AAAA,MACtB,IAAIhN,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,aAAaA,EAAM;AAAA,MACnB,WAAWA,EAAM,aAAa;AAAA,MAC9B,WAAWA,EAAM;AAAA,MACjB,cAAcA,EAAM;AAAA,MACpB,YAAYA,EAAM;AAAA,MAClB,WAAWA,EAAM;AAAA,MACjB,aAAaA,EAAM;AAAA,MACnB,aAAaA,EAAM;AAAA,MACnB,oBAAoBA,EAAM;AAAA,MAC1B,iBAAiBA,EAAM;AAAA,MACvB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CACS,GAGzDpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChEb,UAAMT,IAAQC,GAmBRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIgB,GAAa;AAAA,MACtB,IAAIjN,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,aAAaA,EAAM;AAAA,MACnB,gBAAgBA,EAAM;AAAA,MACtB,oBAAoBA,EAAM;AAAA,MAC1B,gBAAgBA,EAAM;AAAA,MACtB,QAAQA,EAAM;AAAA,MACd,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,YAAYA,EAAM;AAAA,MAClB,aAAaA,EAAM;AAAA,MACnB,UAAUA,EAAM;AAAA,MAChB,UAAUA,EAAM;AAAA,MAChB,iBAAiBA,EAAM;AAAA,MACvB,iBAAiBA,EAAM;AAAA,MACvB,0BAA0BA,EAAM;AAAA,MAChC,0BAA0BA,EAAM;AAAA,MAChC,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,kBAAkBA,EAAM;AAAA,MACxB,sBAAsBA,EAAM;AAAA,MAC5B,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CACS,GAGzDpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9Fb,UAAMT,IAAQC,GAmBRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIiB,GAAU;AAAA,MACnB,IAAIlN,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,aAAaA,EAAM;AAAA,MACnB,gBAAgBA,EAAM,kBAAkB;AAAA,MACxC,oBAAoBA,EAAM,sBAAsB;AAAA,MAChD,UAAUA,EAAM;AAAA,MAChB,YAAYA,EAAM;AAAA,MAClB,UAAUA,EAAM;AAAA,MAChB,iBAAiBA,EAAM;AAAA,MACvB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,iBAAiBA,EAAM;AAAA,MACvB,iBAAiBA,EAAM;AAAA,MACvB,0BAA0BA,EAAM;AAAA,MAChC,0BAA0BA,EAAM;AAAA,MAChC,gBAAgBA,EAAM;AAAA,MACtB,kBAAkBA,EAAM;AAAA,MACxB,sBAAsBA,EAAM;AAAA,MAC5B,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CACM,GAGtDpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;ACnGb,UAAMT,IAAQC,GAWRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIkB,GAAa;AAAA,MACtB,IAAInN,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,aAAaA,EAAM;AAAA,MACnB,WAAWA,EAAM,aAAa;AAAA,MAC9B,UAAUA,EAAM;AAAA,MAChB,UAAUA,EAAM;AAAA,MAChB,gBAAgBA,EAAM;AAAA,MACtB,aAAaA,EAAM;AAAA,MACnB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CACS,GAGzDpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;AC9Eb,UAAMT,IAAQC,GAWRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAImB,GAAgB;AAAA,MACzB,IAAIpN,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,aAAaA,EAAM;AAAA,MACnB,WAAWA,EAAM,aAAa;AAAA,MAC9B,gBAAgBA,EAAM;AAAA,MACtB,kBAAkBA,EAAM;AAAA,MACxB,YAAYA,EAAM;AAAA,MAClB,aAAaA,EAAM;AAAA,MACnB,gBAAgBA,EAAM;AAAA,MACtB,aAAaA,EAAM;AAAA,MACnB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CACY,GAG5DpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjEb,UAAMT,IAAQC,GAiBRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIoB,GAAW;AAAA,MACpB,IAAIrN,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,SAASA,EAAM;AAAA,MACf,eAAeA,EAAM;AAAA,MACrB,UAAUA,EAAM,YAAY,CAAC,KAAK,KAAK,EAAE;AAAA,MACzC,UAAUA,EAAM,YAAY;AAAA,MAC5B,aAAaA,EAAM;AAAA,MACnB,aAAaA,EAAM;AAAA,MACnB,WAAWA,EAAM;AAAA,MACjB,YAAYA,EAAM;AAAA,MAClB,YAAYA,EAAM;AAAA,MAClB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,YAAYA,EAAM;AAAA,MAClB,cAAcA,EAAM;AAAA,MACpB,WAAWA,EAAM;AAAA,MACjB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CAChC,GAGhBpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrFb,UAAMT,IAAQC,GAkBRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIqB,GAAe;AAAA,MACxB,IAAItN,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,YAAYA,EAAM;AAAA,MAClB,cAAcA,EAAM,gBAAgB,CAAC,KAAK,GAAG,GAAG,GAAG;AAAA,MACnD,cAAcA,EAAM,gBAAgB,CAAC,GAAG,GAAG,GAAG,GAAG;AAAA,MACjD,cAAcA,EAAM,gBAAgB;AAAA,MACpC,eAAeA,EAAM;AAAA,MACrB,UAAUA,EAAM;AAAA,MAChB,gBAAgBA,EAAM;AAAA,MACtB,QAAQA,EAAM;AAAA,MACd,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,WAAWA,EAAM;AAAA,MACjB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,oBAAoBA,EAAM;AAAA,MAC1B,oBAAoBA,EAAM;AAAA,MAC1B,UAAUA,EAAM;AAAA,MAChB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CAC5B,GAGpBpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5Fb,UAAMT,IAAQC,GAgBRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIsB,GAAe;AAAA,MACxB,IAAIvN,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,aAAaA,EAAM;AAAA,MACnB,cAAcA,EAAM,gBAAgB,CAAC,KAAK,GAAG,GAAG,GAAG;AAAA,MACnD,cAAcA,EAAM,gBAAgB,CAAC,GAAG,GAAG,GAAG,GAAG;AAAA,MACjD,cAAcA,EAAM,gBAAgB;AAAA,MACpC,QAAQA,EAAM;AAAA,MACd,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,WAAWA,EAAM;AAAA,MACjB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,oBAAoBA,EAAM;AAAA,MAC1B,oBAAoBA,EAAM;AAAA,MAC1B,UAAUA,EAAM;AAAA,MAChB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CAC5B,GAGpBpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3Eb,UAAMT,IAAQC,GAuBRW,IAAOC,GAOPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIuB,GAAS;AAAA,MAClB,IAAIxN,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,kBAAkBA,EAAM;AAAA,MACxB,sBAAsBA,EAAM;AAAA,MAC5B,QAAQA,EAAM;AAAA,MACd,aAAaA,EAAM;AAAA,MACnB,cAAcA,EAAM,gBAAgB,CAAC,KAAK,GAAG,GAAG,GAAG;AAAA,MACnD,cAAcA,EAAM,gBAAgB,CAAC,GAAG,GAAG,GAAG,GAAG;AAAA,MACjD,cAAcA,EAAM,gBAAgB;AAAA,MACpC,gBAAgBA,EAAM,kBAAkB;AAAA,MACxC,cAAcA,EAAM,gBAAgB;AAAA,MACpC,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,oBAAoBA,EAAM;AAAA,MAC1B,oBAAoBA,EAAM;AAAA,MAC1B,kBAAkBA,EAAM;AAAA,MACxB,kBAAkBA,EAAM;AAAA,MACxB,sBAAsBA,EAAM;AAAA,MAC5B,sBAAsBA,EAAM;AAAA,MAC5B,SAASA,EAAM;AAAA,MACf,QAAQA,EAAM;AAAA,MACd,UAAUA,EAAM;AAAA,MAChB,WAAWA,EAAM;AAAA,MACjB,gBAAgBA,EAAM;AAAA,MACtB,WAAWA,EAAM;AAAA,MACjB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,YAAY,CAACsB,MAAkB7M,EAAK,YAAY6M,CAAI;AAAA,MACpD,aAAa,CAAC9O,GAAc8O,MAC1B7M,EAAK,aAAajC,GAAO8O,CAAI;AAAA,IAAA,CACwB,GAGrD1E,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5Gb,UAAMT,IAAQC,GAYRW,IAAOC,GASPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIyB,GAAU;AAAA,MACnB,IAAI1N,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,aAAaA,EAAM;AAAA,MACnB,iBAAiBA,EAAM;AAAA,MACvB,UAAUA,EAAM;AAAA,MAChB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,cAAcA,EAAM;AAAA,MACpB,kBAAkBA,EAAM;AAAA,MACxB,oBAAoBA,EAAM;AAAA,MAC1B,QAAQA,EAAM;AAAA,MACd,aAAaA,EAAM;AAAA,MACnB,QAAQA,EAAM;AAAA,MACd,aAAaA,EAAM;AAAA,MACnB,YAAYA,EAAM;AAAA,MAClB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,gBAAgB,CAACwB,MAAqB/M,EAAK,gBAAgB+M,CAAK;AAAA,MAChE,YAAY,CAACF,MAAkB7M,EAAK,YAAY6M,CAAI;AAAA,MACpD,cAAc,CAACA,MAAkB7M,EAAK,cAAc6M,CAAI;AAAA,MACxD,aAAa,CAAC9O,GAAc8O,MAC1B7M,EAAK,aAAajC,GAAO8O,CAAI;AAAA,IAAA,CACd,GAGf1E,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;AChHb,UAAMT,IAAQC,GAQRW,IAAOC,GASPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MAAM;AACxB,YAAM2B,IAAa;AAAA,QACjB,IAAI5N,EAAM;AAAA,QACV,MAAMA,EAAM;AAAA,QACZ,WAAWA,EAAM;AAAA,QACjB,SAASA,EAAM;AAAA,QACf,SAASA,EAAM;AAAA,QACf,UAAUA,EAAM;AAAA,QAChB,eAAeA,EAAM;AAAA,QACrB,UAAUA,EAAM;AAAA,QAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,QAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,QAClD,eAAe,CAAC0B,MAAqBjN,EAAK,eAAeiN,CAAO;AAAA,QAChE,YAAY,CAACJ,MAAkB7M,EAAK,YAAY6M,CAAI;AAAA,QACpD,cAAc,CAACA,MAAkB7M,EAAK,cAAc6M,CAAI;AAAA,QACxD,aAAa,CAAC9O,GAAcmP,GAAaL,MACvC7M,EAAK,aAAajC,GAAOmP,GAAKL,CAAI;AAAA;AAAA,QAEpC,GAAIzN,EAAM,WAAW,UAAa,EAAE,QAAQA,EAAM,OAAA;AAAA,QAClD,GAAIA,EAAM,gBAAgB,UAAa;AAAA,UACrC,aAAaA,EAAM;AAAA,QAAA;AAAA,QAErB,GAAIA,EAAM,mBAAmB,UAAa;AAAA,UACxC,gBAAgBA,EAAM;AAAA,QAAA;AAAA,QAExB,GAAIA,EAAM,kBAAkB,UAAa;AAAA,UACvC,eAAeA,EAAM;AAAA,QAAA;AAAA,MACvB;AAEF,aAAO,IAAI+N;AAAA,QACTH;AAAA,MAAA;AAAA,IAEJ,GAEM7E,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM,CAACQ,EAAM,MAAMA,EAAM,WAAWA,EAAM,SAASA,EAAM,OAAO;AAAA,MAChE,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;AChEb,UAAMT,IAAQC,GASRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAI+B,GAAa;AAAA,MACtB,IAAIhO,EAAM;AAAA,MACV,eAAeA,EAAM;AAAA,MACrB,SAASA,EAAM;AAAA,MACf,cAAcA,EAAM;AAAA,MACpB,kBAAkBA,EAAM;AAAA,MACxB,QAAQA,EAAM;AAAA,MACd,aAAaA,EAAM;AAAA,MACnB,WAAWA,EAAM;AAAA,MACjB,OAAOA,EAAM,SAAS,CAAC,KAAK,KAAK,GAAG;AAAA,MACpC,WAAWA,EAAM;AAAA,MACjB,UAAUA,EAAM;AAAA,MAChB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CACS,GAGzDpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1Eb,UAAMT,IAAQC,GAYRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIgC,GAAiB;AAAA,MAC1B,IAAIjO,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,mBAAmBA,EAAM;AAAA,MACzB,mBAAmBA,EAAM;AAAA,MACzB,gBAAgBA,EAAM,kBAAkB,CAAC,GAAG,GAAG,GAAG;AAAA,MAClD,gBAAgBA,EAAM,kBAAkB,CAAC,GAAG,KAAK,CAAC;AAAA,MAClD,UAAUA,EAAM,YAAY;AAAA,MAC5B,WAAWA,EAAM,aAAa;AAAA,MAC9B,SAASA,EAAM,WAAW;AAAA,MAC1B,aAAaA,EAAM;AAAA,MACnB,YAAYA,EAAM;AAAA,MAClB,YAAYA,EAAM;AAAA,MAClB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CAC1B,GAGtBpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9Eb,UAAMT,IAAQC,GAgBRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIiC,GAAQ;AAAA,MACjB,IAAIlO,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,YAAYA,EAAM;AAAA,MAClB,cAAcA,EAAM,gBAAgB,CAAC,KAAK,GAAG,GAAG,GAAG;AAAA,MACnD,cAAcA,EAAM,gBAAgB,CAAC,GAAG,GAAG,GAAG,GAAG;AAAA,MACjD,cAAcA,EAAM,gBAAgB;AAAA,MACpC,QAAQA,EAAM;AAAA,MACd,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,WAAWA,EAAM;AAAA,MACjB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,oBAAoBA,EAAM;AAAA,MAC1B,oBAAoBA,EAAM;AAAA,MAC1B,UAAUA,EAAM;AAAA,MAChB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CACnC,GAGbpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtFb,UAAMT,IAAQC,GAgBRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIkC,GAAa;AAAA,MACtB,IAAInO,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,YAAYA,EAAM;AAAA,MAClB,cAAcA,EAAM,gBAAgB,CAAC,KAAK,GAAG,GAAG,GAAG;AAAA,MACnD,cAAcA,EAAM,gBAAgB,CAAC,GAAG,GAAG,GAAG,GAAG;AAAA,MACjD,cAAcA,EAAM,gBAAgB;AAAA,MACpC,QAAQA,EAAM;AAAA,MACd,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,WAAWA,EAAM;AAAA,MACjB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,oBAAoBA,EAAM;AAAA,MAC1B,oBAAoBA,EAAM;AAAA,MAC1B,UAAUA,EAAM;AAAA,MAChB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CAC9B,GAGlBpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtFb,UAAMT,IAAQC,GAgBRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAImC,GAAa;AAAA,MACtB,IAAIpO,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,YAAYA,EAAM;AAAA,MAClB,cAAcA,EAAM,gBAAgB,CAAC,KAAK,GAAG,GAAG,GAAG;AAAA,MACnD,cAAcA,EAAM,gBAAgB,CAAC,GAAG,GAAG,GAAG,GAAG;AAAA,MACjD,cAAcA,EAAM,gBAAgB;AAAA,MACpC,QAAQA,EAAM;AAAA,MACd,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,WAAWA,EAAM;AAAA,MACjB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,gBAAgBA,EAAM;AAAA,MACtB,oBAAoBA,EAAM;AAAA,MAC1B,oBAAoBA,EAAM;AAAA,MAC1B,UAAUA,EAAM;AAAA,MAChB,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CAC9B,GAGlBpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;ACnGb,UAAMT,IAAQC,GASRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MACX,IAAIoC,GAAS;AAAA,MAClB,IAAIrO,EAAM;AAAA,MACV,MAAMA,EAAM;AAAA,MACZ,aAAaA,EAAM;AAAA,MACnB,QAAQA,EAAM;AAAA,MACd,KAAKA,EAAM;AAAA,MACX,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,eAAeA,EAAM;AAAA,MACrB,gBAAgBA,EAAM;AAAA,MACtB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CAClC,GAGdpD,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM,CAACQ,EAAM,MAAMA,EAAM,QAAQA,EAAM,KAAKA,EAAM,SAASA,EAAM,OAAO;AAAA,MACxE,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/Cb,UAAMT,IAAQC,GASRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MAAM;AAGxB,YAAM2B,IAAa;AAAA,QACjB,IAAI5N,EAAM;AAAA,QACV,MAAMA,EAAM;AAAA,QACZ,MAAMA,EAAM;AAAA,QACZ,aAAaA,EAAM;AAAA,QACnB,UAAUA,EAAM,YAAY,CAAC,KAAK,KAAK,KAAK,GAAG;AAAA,QAC/C,gBAAgBA,EAAM,kBAAkB,CAAC,GAAG,GAAG,CAAC;AAAA,QAChD,UAAUA,EAAM,YAAY,CAAC,GAAG,GAAG,CAAC;AAAA,QACpC,gBAAgBA,EAAM,kBAAkB,CAAC,GAAG,GAAG,CAAC;AAAA,QAChD,WAAWA,EAAM;AAAA,QACjB,WAAWA,EAAM;AAAA,QACjB,SAASA,EAAM;AAAA,QACf,SAASA,EAAM;AAAA,QACf,UAAUA,EAAM;AAAA,QAChB,eAAeA,EAAM;AAAA,QACrB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,QAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA;AAAA,QAElD,GAAInM,EAAM,uBAAuB,UAAa;AAAA,UAC5C,oBAAoBA,EAAM;AAAA,QAAA;AAAA,QAE5B,GAAIA,EAAM,YAAY,UAAa,EAAE,SAASA,EAAM,QAAA;AAAA,QACpD,GAAIA,EAAM,aAAa,UAAa,EAAE,UAAUA,EAAM,SAAA;AAAA,QACtD,GAAIA,EAAM,YAAY,UAAa,EAAE,SAASA,EAAM,QAAA;AAAA,QACpD,GAAIA,EAAM,gBAAgB,UAAa;AAAA,UACrC,aAAaA,EAAM;AAAA,QAAA;AAAA,QAErB,GAAIA,EAAM,mBAAmB,UAAa;AAAA,UACxC,gBAAgBA,EAAM;AAAA,QAAA;AAAA,QAExB,GAAIA,EAAM,aAAa,UAAa,EAAE,UAAUA,EAAM,SAAA;AAAA,MAAS;AAGjE,aAAO,IAAIsO,GAAgBV,CAAkC;AAAA,IAC/D,GAEM7E,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpFb,UAAMT,IAAQC,GAURW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3DoO,IAAc,MAAM;AAGxB,YAAM2B,IAAa;AAAA,QACjB,IAAI5N,EAAM;AAAA,QACV,MAAMA,EAAM;AAAA,QACZ,YAAYA,EAAM;AAAA,QAClB,aAAaA,EAAM;AAAA,QACnB,UAAUA,EAAM,YAAY,CAAC,KAAK,KAAK,KAAK,GAAG;AAAA,QAC/C,gBAAgBA,EAAM,kBAAkB,CAAC,GAAG,GAAG,CAAC;AAAA,QAChD,UAAUA,EAAM,YAAY,CAAC,GAAG,GAAG,CAAC;AAAA,QACpC,gBAAgBA,EAAM,kBAAkB,CAAC,GAAG,GAAG,CAAC;AAAA,QAChD,WAAWA,EAAM;AAAA,QACjB,eAAeA,EAAM;AAAA,QACrB,eAAeA,EAAM;AAAA,QACrB,SAASA,EAAM;AAAA,QACf,SAASA,EAAM;AAAA,QACf,UAAUA,EAAM;AAAA,QAChB,eAAeA,EAAM;AAAA,QACrB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,QAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA;AAAA,QAElD,GAAInM,EAAM,uBAAuB,UAAa;AAAA,UAC5C,oBAAoBA,EAAM;AAAA,QAAA;AAAA,QAE5B,GAAIA,EAAM,aAAa,UAAa,EAAE,UAAUA,EAAM,SAAA;AAAA,QACtD,GAAIA,EAAM,YAAY,UAAa,EAAE,SAASA,EAAM,QAAA;AAAA,QACpD,GAAIA,EAAM,gBAAgB,UAAa;AAAA,UACrC,aAAaA,EAAM;AAAA,QAAA;AAAA,QAErB,GAAIA,EAAM,mBAAmB,UAAa;AAAA,UACxC,gBAAgBA,EAAM;AAAA,QAAA;AAAA,QAExB,GAAIA,EAAM,aAAa,UAAa,EAAE,UAAUA,EAAM,SAAA;AAAA,QACtD,GAAIA,EAAM,gBAAgB,UAAa;AAAA,UACrC,aAAaA,EAAM;AAAA,QAAA;AAAA,QAErB,GAAIA,EAAM,cAAc,UAAa,EAAE,WAAWA,EAAM,UAAA;AAAA,MAAU;AAGpE,aAAO,IAAIuO,GAAgBX,CAAkC;AAAA,IAC/D,GAEM7E,IAAkB,MAAM;AAC5B,MAAAhK,EAASkN,GAAa;AAAA,IACxB;AAEA,WAAA7L,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAMZ,EAAYY,EAAM,IAAIiM,GAAa;AAAA,MACzC,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfxD,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;AC1Db,UAAMT,IAAQC,GAaRW,IAAOC,GAgBPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAG3D2Q,IAAgBpQ,EAEpB,IAAI,GACAqQ,IAAarQ,EAEjB,IAAI,GACAsQ,IAAYtQ,EAEhB,IAAI,GAGAuQ,IAAsB,MAAM;AAChC,UAAI,CAACF,EAAW,SAAS,CAACC,EAAU,MAAO;AAE3C,YAAME,IAAOH,EAAW,OAClBI,IAAUH,EAAU;AAG1B,aAAO,OAAOI,MAAiB;AAC7B,cAAMC,IAAiBF,EAAQC,CAAO;AACtC,eAAO;AAAA,UACL,KAAKC,EAAe;AAAA,UACpB,QAAQH,EAAK,SAASG,EAAe,KAAK;AAAA,UAC1C,kBAAkBA,EAAe;AAAA,QAAA;AAAA,MAErC;AAAA,IACF,GAEM9C,IAAc,MAAM;AACxB,UAAI,CAACuC,EAAc,MAAO,QAAO;AAEjC,YAAMQ,IAAgBL,EAAA,GAIhBf,IAAkC;AAAA,QACtC,IAAIqB,EAAMjP,EAAM,EAAE;AAAA,QAClB,SAASiP,EAAMjP,EAAM,OAAO;AAAA,QAC5B,SAASiP,EAAMjP,EAAM,OAAO;AAAA,QAC5B,SAASiP,EAAMjP,EAAM,OAAO;AAAA,QAC5B,UAAUiP,EAAMjP,EAAM,QAAQ;AAAA,QAC9B,eAAeiP,EAAMjP,EAAM,aAAa;AAAA,QACxC,OAAOiP,EAAMjP,EAAM,KAAK;AAAA,QACxB,cAAciP,EAAMjP,EAAM,YAAY;AAAA,MAAA;AAGxC,MAAIgP,MACFpB,EAAW,gBAAgBoB,IAG7BpB,EAAW,gBAAgB,CACzBsB,GACApR,MAQG;AACH,QAAA8C,EAAK,eAAesO,GAAMpR,CAAO;AAAA,MACnC,GAEIkC,EAAM,aAAa,UAAgB,WAAWiP,EAAMjP,EAAM,QAAQ,IAClEA,EAAM,YAAY,aAAsB,UAAUiP,EAAMjP,EAAM,OAAO,IACrEA,EAAM,YAAY,QAAc,UAAUiP,EAAMjP,EAAM,OAAO,IAC7DA,EAAM,iBAAiB,WACzB4N,EAAW,eAAeqB,EAAMjP,EAAM,YAAY,IAChDA,EAAM,uBAAuB,qBAC/B4N,EAAW,qBAAqBqB,EAAMjP,EAAM,kBAAkB,IAC5DA,EAAM,gBAAgB,MACxB4N,EAAW,cAAcqB,EAAMjP,EAAM,WAAW,IAC9CA,EAAM,mBAAmB,WAC3B4N,EAAW,iBAAiBqB,EAAMjP,EAAM,cAAc,IACpDA,EAAM,aAAa,WACrB4N,EAAW,WAAWqB,EAAMjP,EAAM,QAAQ;AAE5C,YAAMnB,IAAQ,IAAI2P,EAAc,MAAMZ,CAAU;AAChD,aAAOuB,EAAQtQ,CAAK;AAAA,IACtB,GAEMkK,IAAkB,YAAY;AAClC,UAAI;AACF,cAAM,CAACqG,GAAeC,CAAW,IAAI,MAAM,QAAQ,IAAI;AAAA,UACrD,OAAO,kCAAkC;AAAA,UACzC,OAAO,0BAA0B;AAAA,QAAA,CAClC;AAED,QAAAb,EAAc,QAAQW,EAAQC,EAAc,QAAQ,GACpDX,EAAW,QAAQU,EAAQC,EAAc,IAAI,GAC7CV,EAAU,QAAQS,EAAQE,EAAY,OAAO;AAE7C,cAAMxQ,IAAQoN,EAAA;AACd,QAAIpN,KACFE,EAASF,CAAK;AAAA,MAElB,SAASF,GAAO;AACd,gBAAQ,MAAM,4CAA4CA,CAAK,GAC/D,QAAQ;AAAA,UACN;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAEA,WAAAyB,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAM;AACJ,cAAMnB,IAAQoN,EAAA;AACd,QAAIpN,KACFO,EAAYY,EAAM,IAAInB,CAAK;AAAA,MAE/B;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,GAGf4J,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;AC1Ib,UAAMT,IAAQC,GASRW,IAAOC,GAOPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAqB3DyR,IAAUlR,EAAiC,IAAI,GAM/CmR,IAAc,CAACC,MAEfA,KAAY,SAASA,KAAY,QAE5B,mBADMA,IAAW,KACM,qEAG5BA,MAAa,OACR,kDAGLA,MAAa,OACR,+HAEF,MAIHC,IAAY;AAAA,MAChB,MAAM;AAAA,MACN,QAAQ,EAAE,0BAA0B,gCAAA;AAAA,IAAgC,GAGhEC,IAAqB;AAAA,MACzB,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA;AAAA,IAM5B,GAKIC,IAAmB;AAAA,MACvB,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA;AAAA,IAsC5B;AAMF,aAASC,EACPC,GACAC,GACAC,GAGAC,GACgB;AAChB,UAAIH,MAAS,YAAYG;AACvB,eAAOA,EAAcF,CAAO;AAG9B,YAAMG,IAAuB;AAAA,QAC3B,EAAE,QAAQF,EAAK,eAAe,OAAO,EAAE,aAAaD,IAAQ;AAAA,MAAE;AAGhE,aAAID,MAAS,cACJ,CAAC,GAAGI,GAAM,EAAE,QAAQR,GAAW,IAGpCI,MAAS,eACJ,CAAC,GAAGI,GAAM,EAAE,QAAQP,KAAsB,EAAE,QAAQD,GAAW,IAIjE,CAAC,GAAGQ,GAAM,EAAE,QAAQN,KAAoB,EAAE,QAAQF,GAAW;AAAA,IACtE;AAKA,aAASxD,IAAc;AACrB,YAAM8D,IAAOT,EAAQ;AACrB,UAAI,CAACS,KAAQ,CAAC/P,EAAM,QAAQ,OAAQ,QAAO;AAE3C,YAAM,EAAE,aAAAkQ,GAAa,UAAAC,GAAU,eAAAC,GAAe,SAAAC,GAAS,WAAAC,MAAcP,GAE/DQ,IAAatB,EAAMjP,EAAM,OAAO,GAChCwQ,IAAavB,EAAMjP,EAAM,UAAU,GACnCyQ,IAAsBzQ,EAAM,qBAG5BgP,KAAgB,OAAOF,MAAqC;AAChE,cAAM4B,IACH5B,EAAQ,yBACRA,EAAQ;AACX,YAAI,CAAC4B,EAAM,OAAM,IAAI,MAAM,qCAAqC;AAEhE,cAAMC,IAAY,QAAQD,CAAI,IACxBE,IAAMN,EAAUK,CAAS;AAC/B,YAAI,CAACC,EAAK,OAAM,IAAI,MAAM,gBAAgBD,CAAS,EAAE;AAGrD,cAAME,IAActB,EAAYmB,CAAI;AACpC,YAAI,CAACG;AACH,gBAAM,IAAI;AAAA,YACR,sBAAsBH,CAAI;AAAA,UAAA;AAI9B,eAAO;AAAA,UACL,KAAKG;AAAA,UACL,QAAQD;AAAA,UACR,kBAAkBA,EAAI;AAAA,QAAA;AAAA,MAE1B,GAGME,IAAyD,OAC7DC,GACAjT,MACG;AACH,cAAMkT,IAAa,MAAMD,EAAM,YAAY;AAAA,UACzC,GAAGjT;AAAA,UACH,YAAY;AAAA,QAAA,CACb;AAOD,eAAO,EAAE,SANOA,EAAQ,OAAO,cAAc;AAAA,UAC3C,MAAMkT;AAAA,UACN,QAAQ;AAAA,UACR,OAAOA,EAAW;AAAA,UAClB,QAAQA,EAAW;AAAA,QAAA,CACpB,GACiB,OAAOA,EAAW,OAAO,QAAQA,EAAW,OAAA;AAAA,MAChE,GAGMnS,IAAQ,IAAIqR,EAAmC;AAAA,QACnD,IAAIjB,EAAMjP,EAAM,EAAE;AAAA,QAClB,SAASuQ;AAAA,QACT,cAActB,EAAMjP,EAAM,YAAY;AAAA;AAAA,QAGtC,WAAW,OAAOuB,GAAQ,EAAE,QAAA0P,QAAa;AACvC,cAAI;AACF,kBAAM/B,IAAO,MAAMmB,EAAQ9O,EAAO,OAAO,MAAM,MAAM,CAAA,GAAI0P,CAAM;AAC/D,mBAAArQ,EAAK,cAAcW,CAAM,GAClB2N;AAAA,UACT,SAASvQ,GAAO;AACd,kBAAAiC,EAAK,SAASjC,GAAgB4C,CAAM,GAC9B5C;AAAA,UACR;AAAA,QACF;AAAA;AAAA,QAGA,cAAc,CAAC4C,GAAQ,EAAE,MAAAF,GAAM,QAAA4P,QACxB5P,IAEE,IAAI8O,EAAsB;AAAA,UAC/B,IAAI,OAAO5O,EAAO,OAAO,MAAM,IAAI,IAAIiP,CAAU;AAAA,UACjD,SAASnP;AAAA,UACT,eAAA2N;AAAA,UACA,aAAA8B;AAAA,UACA,YAAY,CAACI,MACXtB;AAAA,YACEY;AAAA,YACAU,EAAS;AAAA,YACT,EAAE,eAAAd,EAAA;AAAA,YACFK;AAAA,UAAA;AAAA,UAEJ,QAAAQ;AAAA,QAAA,CAC6B,IAfb;AAAA,MAgBpB,CAC0C;AAE5C,aAAO9B,EAAQtQ,CAAK;AAAA,IACtB;AAEA,mBAAekK,IAAkB;AAC/B,UAAI;AACF,cAAM,CAACqG,GAAe+B,GAAcC,GAAY/B,CAAW,IACzD,MAAM,QAAQ,IAAI;AAAA,UAChB,OAAO,kCAAkC;AAAA,UACzC,OAAO,qBAA6C;AAAA,UACpD,OAAO,uBAAS,EAAA,KAAA,CAAAgC,MAAAA,EAAA,CAAA;AAAA,UAChB,OAAO,qBAAO;AAAA,QAAA,CACf,GAGGC,IAAUjC,EAAY;AAI5B,iBAASkC,IAAO,IAAIA,KAAQ,IAAIA,KAAQ;AACtC,gBAAM/B,IAAW,QAAQ+B,GACnBC,IAAMjC,EAAYC,CAAQ;AAChC,UAAIgC,KACFF,EAAQ,KAAK,QAAQ9B,CAAQ,IAAIgC,CAAG;AAAA,QAExC;AAEA,QAAAlC,EAAQ,QAAQH,EAAQ;AAAA,UACtB,aAAaC,EAAc;AAAA,UAC3B,UAAUA,EAAc;AAAA,UACxB,eAAe+B,EAAa;AAAA,UAC5B,SAASC,EAAW;AAAA,UACpB,WAAWE,EAAQ;AAAA,QAAA,CACpB;AAGD,cAAMzS,IAAQoN,EAAA;AACd,QAAIpN,KACFE,EAASF,CAAK;AAAA,MAElB,SAASF,GAAO;AACd,gBAAQ,MAAM,+CAA+CA,CAAK,GAClE,QAAQ;AAAA,UACN;AAAA,QAAA,GAEFiC,EAAK,SAASjC,CAAc;AAAA,MAC9B;AAAA,IACF;AAEA,WAAAyB,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAM,CAACQ,EAAM,SAASA,EAAM,YAAYA,EAAM,SAASA,EAAM,OAAO;AAAA,MACpE,MAAM;AACJ,YAAIsP,EAAQ,OAAO;AACjB,gBAAMzQ,IAAQoN,EAAA;AACd,UAAIpN,KACFO,EAAYY,EAAM,IAAInB,CAAK;AAAA,QAE/B;AAAA,MACF;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,GAGf4J,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;IClbTgR,KAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0If,IAAIC,KAAuCD;AAI3C,MAAME,KAAM,IACNC,KAAgB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GACMC,KAAmB,KACnBC,KAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAafC,KAAe;AAAA,EACpB,MAAM;AAAA,EACN,IAAID;AAAA,EACJ,IAAIA;AAAA,EACJ,cAAc;AAAA,IACb,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,0BAA0B;AAAA,IAC1B,cAAc;AAAA,IACd,QAAQ;AAAA,EACV;AACA,GACME,KAAmB;AAAA,EACxB,CAAC,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAE;AAAA,EACD,CAAC,KAAI;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAE;AAAA,EACD,CAAC,KAAI;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAE;AAAA,EACD,CAAC,KAAI;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAE;AAAA,EACD,CAAC,KAAI;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAE;AAAA,EACD,CAAC,KAAI;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAE;AAAA,EACD,CAAC,KAAI;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAE;AAAA,EACD,CAAC,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAE;AACF,GACMC,KAAe;AAAA,EACpB,GAAG1F,GAAU;AAAA,EACb,OAAO;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACC,cAAc;AAAA,IACb,MAAM;AAAA,IACN,OAAO,CAAC,GAAG,CAAC;AAAA,EACd;AAAA,EACC,cAAc;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,EACT;AAAA,EACC,QAAQ;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,EACT;AAAA,EACC,aAAa;AAAA,IACZ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,EACT;AAAA,EACC,OAAO;AAAA,IACN,MAAM;AAAA,IACN,OAAOqF;AAAA,EACT;AAAA,EACC,WAAW;AAAA,IACV,MAAM;AAAA,IACN,OAAOI;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACC,YAAY;AAAA,IACX,MAAM;AAAA,IACN,OAAO,CAAC,GAAG,EAAE;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACC,OAAO;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACC,SAAS;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACC,QAAQ;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACH;AAAA,IACE,SAAS;AAAA,EACX;AAAA,EACC,eAAe;AAChB;AACA,SAASE,GAAOC,GAAGC,GAAG;AACrB,UAAQD,IAAIC,IAAIA,KAAKA;AACtB;AACA,SAASC,GAAcC,GAAKC,IAAS,QAAQ;AAC5C,MAAIC,IAAaN,GAAOI,IAAM,KAAK,GAAG,IAAI;AAC1C,SAAI,OAAOC,KAAW,YAAYC,IAAaD,MAAQC,KAAc,MAC9DA;AACR;AACA,SAASC,GAAWC,GAAQ;AAC3B,QAAMH,IAASG,EAAO,CAAC,IAAIA,EAAO,CAAC,IAAI,MAAML,GAAcK,EAAO,CAAC,CAAC,IAAI,MAClEC,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,IAAI,MAAML,GAAcK,EAAO,CAAC,GAAGH,CAAM,IAAI;AAChF,SAAO;AAAA,IACNA;AAAA,IACA,KAAK,IAAIG,EAAO,CAAC,GAAG,GAAG;AAAA,IACvBC;AAAA,IACA,KAAK,IAAID,EAAO,CAAC,GAAG,EAAE;AAAA,EACxB;AACA;AACA,SAASE,GAAkBC,GAAU;AACpC,SAAOJ,GAAWI,EAAS,WAAW;AACvC;AACA,SAASC,GAAoBC,GAAW;AACvC,QAAM1R,IAAO,IAAI,WAAWwQ,KAAmB,CAAC,GAC1CmB,IAAc,CAAC,GAAGD,CAAS,EAAE,KAAK,CAACE,GAAGC,MAAMD,EAAE,CAAC,IAAIC,EAAE,CAAC,CAAC;AAC7D,WAASxN,IAAI,GAAGA,IAAImM,IAAkBnM,KAAK;AAC1C,UAAMyN,IAAIzN,KAAKmM,KAAmB;AAClC,QAAIjM,IAAQoN,EAAY,CAAC,EAAE,CAAC;AAC5B,aAASI,IAAI,GAAGA,IAAIJ,EAAY,SAAS,GAAGI,KAAK;AAChD,YAAM,CAACC,GAAIC,CAAE,IAAIN,EAAYI,CAAC,GACxB,CAACG,GAAIC,CAAE,IAAIR,EAAYI,IAAI,CAAC;AAClC,UAAID,KAAKE,KAAMF,KAAKI,GAAI;AACvB,cAAME,KAAUN,IAAIE,MAAOE,IAAKF;AAChC,QAAAzN,IAAQ;AAAA,UACP,KAAK,MAAM0N,EAAG,CAAC,KAAKE,EAAG,CAAC,IAAIF,EAAG,CAAC,KAAKG,CAAM;AAAA,UAC3C,KAAK,MAAMH,EAAG,CAAC,KAAKE,EAAG,CAAC,IAAIF,EAAG,CAAC,KAAKG,CAAM;AAAA,UAC3C,KAAK,MAAMH,EAAG,CAAC,KAAKE,EAAG,CAAC,IAAIF,EAAG,CAAC,KAAKG,CAAM;AAAA,UAC3C,KAAK,OAAOH,EAAG,CAAC,KAAK,SAASE,EAAG,CAAC,KAAK,QAAQF,EAAG,CAAC,KAAK,QAAQG,CAAM;AAAA,QAC3E;AACI;AAAA,MACD;AAAA,IACD;AACA,IAAIN,IAAIH,EAAYA,EAAY,SAAS,CAAC,EAAE,CAAC,MAAGpN,IAAQoN,EAAYA,EAAY,SAAS,CAAC,EAAE,CAAC,IAC7F3R,EAAKqE,IAAI,CAAC,IAAIE,EAAM,CAAC,GACrBvE,EAAKqE,IAAI,IAAI,CAAC,IAAIE,EAAM,CAAC,GACzBvE,EAAKqE,IAAI,IAAI,CAAC,IAAIE,EAAM,CAAC,GACzBvE,EAAKqE,IAAI,IAAI,CAAC,IAAIE,EAAM,CAAC,KAAK;AAAA,EAC/B;AACA,SAAOvE;AACR;QACIqS,MAAoBC,KAAA,cAAcpH,GAAU;AAAA,EAG/C,kBAAkB;AACjB,WAAO,KAAK,OAAO,gBAAgB;AAAA,EACpC;AAAA,EACA,aAAa;AACZ,UAAMqH,IAAa,MAAM,WAAU,GAC7B,EAAE,YAAAC,GAAY,cAAAC,GAAc,QAAApB,EAAM,IAAK,KAAK,OAC5C,CAACqB,GAAUC,CAAQ,IAAIH,KAAc,CAAC,GAAG,EAAE;AACjD,WAAO;AAAA,MACN,GAAGD;AAAA,MACH,QAAQ;AAAA,QACP,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BASYlB,EAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,KAAKA,EAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,KAAKA,EAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,KAAKA,EAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAQzFoB,EAAa,CAAC,EAAE,QAAQ,CAAC,CAAC,KAAKA,EAAa,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQvF,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BASKC,EAAS,QAAQ,CAAC,CAAC;AAAA,2BACnBC,EAAS,QAAQ,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,QAK1C,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,QAKZ,kBAAkB;AAAA;AAAA;AAAA,QAGlB,0BAA0B;AAAA;AAAA;AAAA;AAAA,MAI9B;AAAA,IACA;AAAA,EACC;AAAA,EACA,kBAAkB;AACjB,UAAM,gBAAe,GACrB,KAAK,wBAAuB;AAC5B,UAAMC,IAAmB,KAAK,oBAAmB;AACjD,IAAAA,EAAiB,OAAO;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACH,CAAG,GACDA,EAAiB,aAAa;AAAA,MAC7B,yBAAyB;AAAA,QACxB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,MACb;AAAA,MACG,yBAAyB;AAAA,QACxB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,MACb;AAAA,MACG,gBAAgB;AAAA,QACf,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,MACb;AAAA,IACA,CAAG;AAAA,EACF;AAAA,EACA,YAAYC,GAAQ;AACnB,UAAM,YAAYA,CAAM;AACxB,UAAM,EAAE,OAAAlU,GAAO,UAAAmU,EAAQ,IAAKD,GACtB,EAAE,cAAAE,GAAc,QAAAC,GAAQ,OAAAC,GAAO,OAAAvD,GAAO,WAAAgC,EAAS,IAAK/S;AAC1D,QAAI,CAACoU,KAAgB,CAACC,KAAU,CAACC,GAAO;AACvC,WAAK,yBAAwB;AAC7B;AAAA,IACD;AACA,KAAIvD,MAAUoD,EAAS,SAASC,MAAiBD,EAAS,gBAAgBE,MAAWF,EAAS,UAAUG,MAAUH,EAAS,SAASpB,MAAcoB,EAAS,cAAW,KAAK,wBAAuB;AAAA,EACnM;AAAA,EACA,cAAcI,GAAS;AACtB,SAAK,yBAAwB,GAC7B,MAAM,cAAcA,CAAO;AAAA,EAC5B;AAAA,EACA,KAAK,EAAE,UAAAC,KAAY;AAClB,UAAM,EAAE,aAAA1L,MAAgB,KAAK;AAC7B,QAAI,CAACA,EAAa;AAClB,UAAM,EAAE,SAAA2L,MAAY,KAAK,OACnB,EAAE,iBAAAC,GAAiB,iBAAAC,GAAiB,sBAAAC,GAAsB,sBAAAC,GAAsB,QAAA9O,GAAQ,QAAA+O,GAAQ,OAAAC,GAAO,SAAAjF,GAAS,kBAAAkF,EAAgB,IAAK,KAAK;AAChJ,IAAAD,EAAM,cAAc;AAAA,MACnB,yBAAyBL;AAAA,MACzB,yBAAyBC;AAAA,MACzB,gBAAgB5O;AAAA,IACnB,CAAG,GACDgP,EAAM,sBAAsB;AAAA,MAC3B,8BAA8BH;AAAA,MAC9B,8BAA8BC;AAAA,MAC9B,gBAAgBC;AAAA,IACnB,CAAG,GACDC,EAAM,YAAY;AAAA,MACjB,aAAajF;AAAA,MACb,kBAAAkF;AAAA,IACH,CAAG,GACD,MAAM,KAAK,EAAE,UAAAR,GAAU,GACnBC,KAAS,KAAK,YAAW;AAAA,EAC9B;AAAA,EACA,0BAA0B;AACzB,UAAM,EAAE,aAAA3L,EAAW,IAAK,KAAK,SAAS,CAAA;AACtC,IAAIA,KAAa,KAAK,yBAAwB;AAC9C,UAAM,EAAE,OAAAiI,GAAO,cAAAqD,GAAc,QAAAC,GAAQ,OAAAC,GAAO,WAAAvB,EAAS,IAAK,KAAK;AAC/D,QAAI,OAAOhC,KAAU,YAAYA,MAAU,KAAM;AACjD,UAAMkE,IAAeb,IAAeC,GAC9Ba,IAAmBd,KAAgBC,IAAS,IAC5CK,IAAkB,KAAK,QAAQ,OAAO,aAAa,IAAI,aAAaO,IAAe,CAAC,CAAC,GACrFN,IAAkB,KAAK,QAAQ,OAAO,aAAa,IAAI,aAAaM,IAAe,CAAC,CAAC,GACrFlP,IAAS,KAAK,QAAQ,OAAO,aAAa,IAAI,aAAa,IAAI,MAAMkP,CAAY,EAAE,KAAK,MAAM,EAAE,IAAI,CAACE,GAAGzP,MACtG;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK,IAAI,KAAK,MAAMA,IAAI0O,CAAY,IAAIC;AAAA,IAC5C,CACG,EAAE,KAAI,CAAE,CAAC,GACJe,IAAgBtC,GAAoBC,KAAaf,EAAgB,GACjEgD,IAAmB,KAAK,QAAQ,OAAO,cAAc;AAAA,MAC1D,OAAOnD;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,SAAS;AAAA,QACR,WAAW;AAAA,QACX,WAAW;AAAA,QACX,cAAc;AAAA,QACd,cAAc;AAAA,MAClB;AAAA,MACG,MAAMuD;AAAA,IACT,CAAG,GACKR,IAAuB,IAAI,aAAa;AAAA,MAC7C;AAAA,MACA;AAAA,MACA;AAAA,IACH,CAAG,GACKC,IAAuB,IAAI,aAAa;AAAA,MAC7C;AAAA,MACA;AAAA,MACA;AAAA,IACH,CAAG,GACKC,IAAS,IAAI,aAAa,CAACR,CAAK,CAAC,GACjCe,IAAY,IAAIC,GAAgB,KAAK,QAAQ,QAAQ;AAAA,MAC1D,YAAY,EAAE,gBAAgBZ,EAAe;AAAA,MAC7C,cAAc,CAAC;AAAA,QACd,MAAM;AAAA,QACN,QAAQ;AAAA,MACZ,CAAI;AAAA,MACD,iBAAiB,EAAE,gBAAgBC,EAAe;AAAA,MAClD,IAAIjD;AAAA,MACJ,UAAU,CAAC,gBAAgB;AAAA,MAC3B,SAAS,CAACK,EAAY;AAAA,MACtB,aAAaqC;AAAA,IAChB,CAAG;AACD,SAAK,SAAS;AAAA,MACb,aAAa;AAAA,MACb,cAAAa;AAAA,MACA,kBAAAC;AAAA,MACA,iBAAAR;AAAA,MACA,iBAAAC;AAAA,MACA,sBAAAC;AAAA,MACA,sBAAAC;AAAA,MACA,QAAA9O;AAAA,MACA,QAAA+O;AAAA,MACA,WAAAO;AAAA,MACA,SAAStE;AAAA,MACT,kBAAAiE;AAAA,MACA,sBAAsB;AAAA,MACtB,cAAc;AAAA,IACjB,CAAG;AAAA,EACF;AAAA,EACA,wBAAwB;AACvB,UAAM,EAAE,aAAAlM,EAAW,IAAK,KAAK,SAAS,CAAA;AACtC,QAAI,CAACA,EAAa;AAClB,UAAM,EAAE,UAAA+J,GAAU,UAAA0C,EAAQ,IAAK,KAAK,SAC9B,EAAE,cAAAzB,GAAc,QAAApB,GAAQ,cAAA0B,GAAc,aAAAoB,GAAa,QAAAnB,EAAM,IAAK,KAAK,OACnE,EAAE,cAAAoB,GAAc,sBAAAC,GAAsB,WAAAL,GAAW,iBAAAX,GAAiB,iBAAAC,GAAiB,kBAAAO,GAAkB,SAAApF,MAAY,KAAK,OACtH6F,IAAOJ,EAAS,QAAO;AAC7B,QAAII,MAASF,EAAc;AAC3B,UAAMG,IAAiBhD,GAAkBC,CAAQ,GAC3CgD,IAA2B,OAAOH,IAAuB7C,EAAS,QAAQ,IAC1EiD,IAAqBN,IAAc,OAAM,KAAK,IAAI,GAAG3C,EAAS,IAAI,GAClEkD,IAAiB;AAAA,MACtB,aAAajG;AAAA,MACb,gBAAgB8F,KAAkB;AAAA,QACjC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,MACG,0BAA0BC,KAA4B;AAAA,MACtD,cAAc/B,KAAgB,CAAC,GAAG,CAAC;AAAA,MACnC,QAAApB;AAAA,MACA,cAAA0B;AAAA,MACA,QAAAC;AAAA,MACA,aAAayB;AAAA,MACb,MAAAH;AAAA,MACA,MAAM,KAAK,OAAM;AAAA,IACpB;AACE,IAAAN,EAAU,MAAM,aAAa,SAAS,EAAE,MAAMU,GAAgB,GAC9DV,EAAU,IAAI;AAAA,MACb,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,eAAe;AAAA,MACf,iBAAiB;AAAA,IACpB,CAAG;AACD,UAAMW,IAAU,KAAK,QAAQ,OAAO,qBAAoB;AACxD,IAAAA,EAAQ,mBAAmB;AAAA,MAC1B,cAActB;AAAA,MACd,cAAc;AAAA,MACd,mBAAmBC;AAAA,MACnB,mBAAmBP,IAAe,IAAI;AAAA,MACtC,MAAMc,IAAmB,IAAI;AAAA,IAChC,CAAG,GACDc,EAAQ,OAAM,GACdA,EAAQ,QAAO,GACf,KAAK,MAAM,kBAAkBrB,GAC7B,KAAK,MAAM,kBAAkBD,GAC7BW,EAAU,MAAM,cAAc,EAAE,gBAAgBV,EAAe,CAAE,GACjEU,EAAU,kBAAkB,WAAW,EAAE,gBAAgBX,EAAe,CAAE,GAC1E,KAAK,MAAM,uBAAuB7B,EAAS,MAC3C,KAAK,MAAM,eAAe8C;AAAA,EAC3B;AAAA,EACA,0BAA0B;AACzB,UAAM,EAAE,aAAA7M,EAAW,IAAK,KAAK,SAAS,CAAA;AACtC,QAAI,CAACA,EAAa;AAClB,UAAM,EAAE,iBAAA4L,GAAiB,iBAAAC,GAAiB,cAAAM,EAAY,IAAK,KAAK;AAChE,IAAAP,EAAgB,MAAM,IAAI,aAAaO,IAAe,CAAC,CAAC,GACxDN,EAAgB,MAAM,IAAI,aAAaM,IAAe,CAAC,CAAC;AAAA,EACzD;AAAA,EACA,2BAA2B;AAC1B,UAAM,EAAE,aAAAnM,EAAW,IAAK,KAAK,SAAS,CAAA;AACtC,QAAI,CAACA,EAAa;AAClB,UAAM,EAAE,iBAAA4L,GAAiB,iBAAAC,GAAiB,QAAA5O,GAAQ,WAAAsP,GAAW,kBAAAL,EAAgB,IAAK,KAAK;AACvF,IAAAN,GAAiB,QAAO,GACxBC,GAAiB,QAAO,GACxB5O,GAAQ,QAAO,GACfsP,GAAW,QAAO,GAClBL,GAAkB,QAAO,GACzB,KAAK,SAAS;AAAA,MACb,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,kBAAkB;AAAA,IACrB,CAAG;AAAA,EACF;AAAA,EACA,cAAc;AACb,UAAM,EAAE,eAAAiB,EAAa,IAAK,KAAK,SAAS,CAAA;AACxC,IAAIA,MACJ,KAAK,MAAM,gBAAgB,IAC3B,WAAW,MAAM;AAChB,WAAK,KAAI,GACT,KAAK,MAAM,gBAAgB;AAAA,IAC5B,GAAG,MAAMtE,EAAG;AAAA,EACb;AAAA,EACA,OAAO;AACN,SAAK,sBAAqB,GAC1B,KAAK,eAAc;AAAA,EACpB;AAAA,EACA,QAAQ;AACP,SAAK,wBAAuB,GAC5B,KAAK,eAAc;AAAA,EACpB;AACD,GAxSCuE,GADuBvC,IAChB,aAAY,sBACnBuC,GAFuBvC,IAEhB,gBAAe1B,KAFC0B;AA6SxB,SAASwC,GAASC,GAAK;AACtB,SAAOA,IAAM,KAAK,KAAK;AACxB;AACA,SAASC,GAASC,GAAOC,GAAW;AACnC,QAAMC,IAAML,GAASI,CAAS;AAC9B,SAAO;AAAA,IACN,GAAGD,IAAQ,KAAK,IAAIE,CAAG;AAAA,IACvB,GAAGF,IAAQ,KAAK,IAAIE,CAAG;AAAA,EACzB;AACA;AACA,SAASC,GAAetE,GAAGC,GAAGsE,GAAQC,GAAO;AAC5C,MAAIC,IAAa,GACbC,IAAa,GACbC,IAAY;AAChB,aAAWC,KAASL,GAAQ;AAC3B,UAAMM,IAAK7E,IAAI4E,EAAM,GACfE,IAAK7E,IAAI2E,EAAM,GACfG,IAASF,IAAKA,IAAKC,IAAKA;AAC9B,QAAIC,IAAS,KAAM,QAAO;AAAA,MACzB,GAAGH,EAAM;AAAA,MACT,GAAGA,EAAM;AAAA,IACZ;AACE,UAAMI,IAAS,IAAI,KAAK,IAAI,KAAK,KAAKD,CAAM,GAAGP,CAAK;AACpD,IAAAC,KAAcG,EAAM,IAAII,GACxBN,KAAcE,EAAM,IAAII,GACxBL,KAAaK;AAAA,EACd;AACA,SAAIL,MAAc,IAAU;AAAA,IAC3B,GAAG;AAAA,IACH,GAAG;AAAA,EACL,IACQ;AAAA,IACN,GAAGF,IAAaE;AAAA,IAChB,GAAGD,IAAaC;AAAA,EAClB;AACA;AACA,SAASM,GAAoBC,GAAUvZ,IAAU,IAAI;AACpD,QAAM,EAAE,OAAAwW,IAAQ,KAAK,QAAAgD,IAAS,KAAK,QAAA5E,IAAS;AAAA,IAC3C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAI,OAAAiE,IAAQ,EAAC,IAAK7Y,GACX,CAACyZ,GAAMC,GAAOC,GAAMC,CAAK,IAAIhF,GAC7BiF,IAAWN,EAAS,IAAI,CAACN,MAAU;AACxC,UAAM,EAAE,GAAAa,GAAG,GAAA/R,MAAMwQ,GAASU,EAAM,OAAOA,EAAM,SAAS;AACtD,WAAO;AAAA,MACN,IAAIA,EAAM,MAAMQ,MAASE,IAAOF,KAAQjD;AAAA,MACxC,IAAIoD,IAAQX,EAAM,QAAQW,IAAQF,KAASF;AAAA,MAC3C,GAAAM;AAAA,MACA,GAAA/R;AAAA,IACH;AAAA,EACC,CAAC;AACD,MAAIgS,IAAO,OACPC,IAAO,QACPC,IAAO,OACPC,IAAO;AACX,QAAMC,IAAS,CAAA;AACf,WAAS7F,IAAI,GAAGA,IAAIkF,GAAQlF,IAAK,UAASD,IAAI,GAAGA,IAAImC,GAAOnC,KAAK;AAChE,UAAM,EAAE,GAAAyF,GAAG,GAAA/R,EAAC,IAAK4Q,GAAetE,IAAI,KAAIC,IAAI,KAAIuF,GAAUhB,CAAK;AAC/D,IAAAsB,EAAO,KAAK;AAAA,MACX,GAAAL;AAAA,MACA,GAAA/R;AAAA,IACH,CAAG,GACDgS,IAAO,KAAK,IAAIA,GAAMD,CAAC,GACvBE,IAAO,KAAK,IAAIA,GAAMF,CAAC,GACvBG,IAAO,KAAK,IAAIA,GAAMlS,CAAC,GACvBmS,IAAO,KAAK,IAAIA,GAAMnS,CAAC;AAAA,EACxB;AACA,QAAMqS,IAASJ,IAAOD,KAAQ,GACxBM,IAASH,IAAOD,KAAQ,GACxBK,IAAS,SAAS,cAAc,QAAQ;AAC9C,EAAAA,EAAO,QAAQ9D,GACf8D,EAAO,SAASd;AAChB,QAAMe,IAAMD,EAAO,WAAW,IAAI,GAC5BE,IAAYD,EAAI,gBAAgB/D,GAAOgD,CAAM;AACnD,WAAS5R,IAAI,GAAGA,IAAIuS,EAAO,QAAQvS,KAAK;AACvC,UAAM,EAAE,GAAAkS,GAAG,GAAA/R,MAAMoS,EAAOvS,CAAC,GACnB6S,KAAeX,IAAIC,KAAQK,GAC3BM,MAAe3S,IAAIkS,KAAQI,GAC3BM,IAAM/S,IAAI;AAChB,IAAA4S,EAAU,KAAKG,CAAG,IAAI,KAAK,MAAMF,IAAc,GAAG,GAClDD,EAAU,KAAKG,IAAM,CAAC,IAAI,KAAK,MAAMD,KAAc,GAAG,GACtDF,EAAU,KAAKG,IAAM,CAAC,IAAI,GAC1BH,EAAU,KAAKG,IAAM,CAAC,IAAI;AAAA,EAC3B;AACA,SAAAJ,EAAI,aAAaC,GAAW,GAAG,CAAC,GACzB;AAAA,IACN,QAAAF;AAAA,IACA,WAAAE;AAAA,IACA,MAAAT;AAAA,IACA,MAAAC;AAAA,IACA,MAAAC;AAAA,IACA,MAAAC;AAAA,IACA,QAAAtF;AAAA,EACF;AACA;AACA,SAASgG,GAAiCC,GAAkB;AAC3D,SAAOA,EAAiB,OAAO,CAACC,MAAMA,EAAE,QAAQ,OAAOA,EAAE,KAAK,SAAU,QAAQ,EAAE,IAAI,CAACA,OAAO;AAAA,IAC7F,KAAKA,EAAE,MAAM;AAAA,IACb,KAAKA,EAAE,MAAM;AAAA,IACb,OAAOA,EAAE,KAAK,SAAS;AAAA,IACvB,WAAWA,EAAE,KAAK,OAAO;AAAA,EAC3B,EAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9sBE,UAAM5Y,IAAQC,GA6BRW,IAAOC,GAOPhD,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3Dgb,IAAe3a,EAAI,EAAK,GACxB4a,IAAkB5a,EAAmB,IAAI,GACzC6a,IAAe7a,EAAI;AAAA,MACvB,MAAM8B,EAAM;AAAA,MACZ,MAAMA,EAAM;AAAA,MACZ,MAAMA,EAAM;AAAA,MACZ,MAAMA,EAAM;AAAA,IAAA,CACb,GAEK8T,IAAerN,EAAS,MAAM;AAClC,YAAMyR,IAASa,EAAa,MAAM,OAAOA,EAAa,MAAM,MACtDZ,IAASY,EAAa,MAAM,OAAOA,EAAa,MAAM;AAC5D,aAAO,CAAC,KAAK,IAAIb,GAAQC,CAAM,IAAI,IAAI,KAAK,IAAID,GAAQC,CAAM,CAAC;AAAA,IACjE,CAAC,GAEKlM,IAAc,MACb6M,EAAgB,QAEd,IAAIpF,GAAkB;AAAA,MAC3B,IAAI1T,EAAM;AAAA,MACV,OAAO8Y,EAAgB;AAAA,MACvB,QAAQ9Y,EAAM;AAAA,MACd,cAAc8T,EAAa;AAAA,MAC3B,cAAc9T,EAAM;AAAA,MACpB,QAAQA,EAAM;AAAA,MACd,aAAaA,EAAM;AAAA,MACnB,OAAOA,EAAM;AAAA,MACb,WAAWA,EAAM;AAAA,MACjB,YAAYA,EAAM;AAAA,MAClB,OAAOA,EAAM;AAAA,MACb,SAASA,EAAM;AAAA,MACf,eAAe;AAAA,MACf,SAASA,EAAM;AAAA,MACf,SAASA,EAAM;AAAA,MACf,UAAUA,EAAM;AAAA,MAChB,UAAUA,EAAM;AAAA,MAChB,SAAS,CAACmM,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,MAClD,SAAS,CAACA,MAAsBvL,EAAK,SAASuL,CAAI;AAAA,IAAA,CACnD,IAtBkC,MAyB/B6M,IAAkB,CAAC3X,MAA0B;AACjD,UAAI;AACF,cAAM4X,IAAS7B,GAAoB/V,GAAM;AAAA,UACvC,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,QAAQrB,EAAM;AAAA,QAAA,CACf;AAED,eAAA+Y,EAAa,QAAQ;AAAA,UACnB,MAAME,EAAO;AAAA,UACb,MAAMA,EAAO;AAAA,UACb,MAAMA,EAAO;AAAA,UACb,MAAMA,EAAO;AAAA,QAAA,GAGfH,EAAgB,QAAQG,EAAO,OAAO,UAAU,WAAW,GACpD;AAAA,MACT,SAASC,GAAK;AACZ,eAAAtY,EAAK,SAASsY,aAAe,QAAQA,IAAM,IAAI,MAAM,OAAOA,CAAG,CAAC,CAAC,GAC1D;AAAA,MACT;AAAA,IACF,GAEMnQ,IAAkB,MAAM;AAC5B,UAAI/I,EAAM,YAAYA,EAAM,SAAS,SAAS;AAC5C,YAAI,CAACgZ,EAAgBhZ,EAAM,QAAQ,EAAG;AAAA,iBAC7BA,EAAM;AACf,QAAA8Y,EAAgB,QAAQ9Y,EAAM,UAC9B+Y,EAAa,QAAQ;AAAA,UACnB,MAAM/Y,EAAM;AAAA,UACZ,MAAMA,EAAM;AAAA,UACZ,MAAMA,EAAM;AAAA,UACZ,MAAMA,EAAM;AAAA,QAAA;AAAA;AAGd;AAGF,YAAMnB,IAAQoN,EAAA;AACd,MAAIpN,MACFE,EAASF,CAAK,GACdga,EAAa,QAAQ,IACrBjY,EAAK,QAAQ;AAAA,IAEjB,GAEMuY,IAAkB,MAAM;AAC5B,UAAI,CAACN,EAAa,MAAO;AAEzB,YAAMha,IAAQoN,EAAA;AACd,MAAIpN,KACFO,EAAYY,EAAM,IAAInB,CAAK;AAAA,IAE/B;AAEA,WAAAuB,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAMQ,EAAM;AAAA,MACZ,CAACqL,MAAY;AACX,QAAIA,KAAWA,EAAQ,SAAS,KAC1B2N,EAAgB3N,CAAO,KACzB8N,EAAA;AAAA,MAGN;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,GAGf3Z;AAAA,MACE,MAAMQ,EAAM;AAAA,MACZ,CAACoZ,MAAW;AACV,QAAIA,KAAU,CAACpZ,EAAM,aACnB8Y,EAAgB,QAAQM,GACxBL,EAAa,QAAQ;AAAA,UACnB,MAAM/Y,EAAM;AAAA,UACZ,MAAMA,EAAM;AAAA,UACZ,MAAMA,EAAM;AAAA,UACZ,MAAMA,EAAM;AAAA,QAAA,GAEdmZ,EAAA;AAAA,MAEJ;AAAA,IAAA,GAGF3Z;AAAA,MACE,MAAM;AAAA,QACJQ,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAAA,MAER,MAAM;AACJ,QAAAmZ,EAAA;AAAA,MACF;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,GAGf1Q,EAAgB,MAAM;AACpB,MAAAtJ,EAAYa,EAAM,EAAE;AAAA,IACtB,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;AC1Nb,UAAMT,IAAQC,GAORpC,IAAMR,EAAawC,CAAM,GACzB,EAAE,UAAAd,GAAU,aAAAI,GAAa,aAAAC,EAAA,IAAgBxB,EAAeC,CAAG,GAE3De,IAAa,CAACC,MACVA,EAAyB,IAG7BkK,IAAkB,MAAM;AAC5B,MAAAhK,EAASiB,EAAM,KAAK;AAAA,IACtB;AAEA,WAAAI,EAAU,MAAM;AACd,MAAIvC,EAAI,OAAO,kBACbkL,EAAA,IAEAlL,EAAI,OAAO,KAAK,cAAckL,CAAe;AAAA,IAEjD,CAAC,GAEDvJ;AAAA,MACE,MAAMQ,EAAM;AAAA,MACZ,CAACX,GAAUga,MAAa;AACtB,cAAMC,IAAQD,IAAWza,EAAWya,CAAQ,IAAI,MAC1CE,IAAQ3a,EAAWS,CAAQ;AAEjC,QAAIia,KAASA,MAAUC,KACrBpa,EAAYma,CAAK,GACjBva,EAASM,CAAQ,KAEjBD,EAAYma,GAAOla,CAAQ;AAAA,MAE/B;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,GAGfoJ,EAAgB,MAAM;AACpB,MAAAtJ,EAAYP,EAAWoB,EAAM,KAAK,CAAC;AAAA,IACrC,CAAC,aAIDQ,EAAaC,EAAA,QAAA,SAAA;AAAA;;;;;;;;;AChDb,UAAMT,IAAQC,GAURW,IAAOC;AAEb,QAAIb,EAAM,gBAAgB;AACxB,YAAM0K,IAAW,IAAI8O,GAAS,EAAE,UAAU,IAAM;AAChD,MAAAC,GAAW,YAAY,WAAW/O,EAAS,IAAI,GAC/CjL,GAAQK,IAAmB4K,CAAQ;AAAA,IACrC;AAEA,UAAM7M,IAAuBO,EAAW,IAAI,GACtC8J,IAAuBhK,EAAI,EAAK,GAChC6C,IAAyC7C,EAAI0L,EAAS;AAG5D,IAAAnK,GAAQI,GAAQhC,CAAG,GAInBD,EAAeC,CAAG,GAElBuC,EAAU,MAAM;AACd,MAAAvC,EAAI,QAAQ,IAAI6b,GAAI1Z,EAAM,OAAO,GACjCkI,EAAO,QAAQ,IACfyR,EAAA;AAAA,IACF,CAAC;AAED,UAAMA,IAAkB,MAAM;AAC5B,MAAK9b,EAAI,SAETkD,EAAO,MAAM,QAAQ,CAAC8H,MAAM;AAC1B,QAAAhL,EAAI,OAAO,GAAGgL,GAAG,CAAC+Q,MAAQ;AACxB,kBAAQ/Q,GAAA;AAAA,YACN,KAAK;AACH,cAAAjI,EAAK,UAAU/C,EAAI,KAAK;AACxB;AAAA,YACF;AACE,cAAA+C,EAAKiI,GAAG+Q,CAAG;AACX;AAAA,UAAA;AAAA,QAEN,CAAC;AAAA,MACH,CAAC;AAAA,IACH;2BAIAnW,EAIM,OAAA;AAAA,MAJA,IAAE,GAAKxD,EAAA,SAAS,SAAS;AAAA,MAAI,OAAM;AAAA,IAAA;MAC3BiI,EAAA,QAAZ1H,EAEOC,iCAFP,MAEO;AAAA,QADLD,EAAaC,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;AC1DjB,UAAMT,IAAQC,GAaRW,IAAOC,GAKPhD,IAAMR,EAAawC,CAAM,GACzBga,IAAQ,IAAIC,GAAM9Z,EAAM,OAAO,GAC/BkI,IAAuBhK,EAAI,EAAI,GAC/B6b,IAAU7b,EAAwB,IAAI,GAGtCiK,IAAiB,MACdtK,EAAI,SAAS,MAIhBuK,IAAW,CAAC3J,MAAqB;AACrC,MAAKA,KAELA,EAAY,GAAG,cAAc,MAAM;AACjC,cAAM4J,IAAe,MAAM;AACzB,UAAK5J,EAAY,kBAIfyJ,EAAO,QAAQ,MAHfA,EAAO,QAAQ,IACf,WAAWG,GAAc,GAAG;AAAA,QAIhC;AACA,QAAAA,EAAA;AAAA,MACF,CAAC;AAAA,IACH,GAEM2R,IAAkB,MAAY;AAClC,UAAI;AACF,QAAID,EAAQ,SACVF,EAAM,cAAcE,EAAQ,KAAK;AAAA,MAErC,SAASpb,GAAO;AACd,gBAAQ,MAAM,gCAAgCA,CAAK;AAAA,MACrD;AAAA,IACF,GAEMsb,IAAsB,MAAY;AACtC,UAAI;AACF,QAAAJ,EAAM,UAAU7Z,EAAM,WAAW;AAAA,MACnC,SAASrB,GAAO;AACd,gBAAQ,MAAM,oCAAoCA,CAAK;AAAA,MACzD;AAAA,IACF,GAEMub,IAAc,MAAY;AAC9B,YAAMzb,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,UAAI,cAAcuB,EAAM,SACtBA,EAAM,OAAO,SAAS6Z,CAAK,IAE3BA,EAAM,MAAMpb,CAAW,GAEzBmC,EAAK,SAAS,EAAE,OAAAiZ,GAAO;AAAA,QACzB,SAASlb,GAAO;AACd,kBAAQ,MAAM,iCAAiCA,CAAK;AAAA,QACtD;AAAA,IACF,GAEMwb,IAAS,MAAY;AACzB,UAAI;AACF,QAAAN,EAAM,OAAA,GACNjZ,EAAK,SAAS;AAAA,MAChB,SAASjC,GAAO;AACd,gBAAQ,MAAM,yBAAyBA,CAAK;AAAA,MAC9C;AAAA,IACF,GAEMyb,IAAoB,MAAY;AACpC,UAAI;AACF,QAAArQ,GAAY,QAAQ,CAAC/I,MAAU;AAC7B,UAAA6Y,EAAM,GAAG7Y,GAAO,MAAM;AACpB,YAAAJ,EAAKI,CAAK;AAAA,UACZ,CAAC;AAAA,QACH,CAAC;AAAA,MACH,SAASrC,GAAO;AACd,gBAAQ,MAAM,kCAAkCA,CAAK;AAAA,MACvD;AAAA,IACF,GAEM0b,IAAoB,MAAY;AACpC,UAAI;AACF,QAAAtQ,GAAY,QAAQ,CAAC/I,MAAU;AAC7B,UAAA6Y,EAAM,IAAI7Y,GAAO,MAAM;AACrB,YAAAJ,EAAKI,CAAK;AAAA,UACZ,CAAC;AAAA,QACH,CAAC;AAAA,MACH,SAASrC,GAAO;AACd,gBAAQ,MAAM,gCAAgCA,CAAK;AAAA,MACrD;AAAA,IACF;AAGA,WAAAa;AAAA,MACE3B;AAAA,MACA,CAAC2K,MAAW;AACV,QAAIA,KACFJ,EAASI,CAAM;AAAA,MAEnB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAIpBhJ;AAAA,MACE,MAAMQ,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAia,EAAA;AAAA,MACF;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,GAIf7Z,EAAU,MAAM;AACd,UAAI8H,EAAO;AACT,YAAI;AACF,UAAA8R,EAAA,GACAC,EAAA,GACAC,EAAA,GACAE,EAAA;AAAA,QACF,SAASzb,GAAO;AACd,kBAAQ,MAAM,6BAA6BA,CAAK;AAAA,QAClD;AAAA;AAEA,QAAAwb,EAAA,GACAE,EAAA;AAAA,IAEJ,CAAC,GAED5R,EAAgB,MAAM;AACpB,MAAA0R,EAAA,GACAE,EAAA;AAAA,IACF,CAAC,mBAID5W,EAEU,WAAA;AAAA,MAFA,IAAE,SAAW,KAAK,IAAA,CAAG;AAAA,eAAU;AAAA,MAAJ,KAAIsW;AAAA,IAAA;MACvCvZ,EAAaC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;ACvJf,UAAMP,IAAQC,GAAA,GAERH,IAAQC,GAcRW,IAAOC,GAQPhD,IAAMR,EAAawC,CAAM,GACzBya,IAA6Bpc,EAAI,IAAI,GACrCgK,IAAShK,EAAI,EAAI,GACjBqc,IAAoBrc,EAAI,EAAK,GAC7Bsc,IAAUtc,EAAwB,IAAI,GAGtCiK,IAAiB,MACdtK,EAAI,SAAS,MAIhBuK,IAAW,CAAC3J,MAAqB;AACrC,MAAKA,KAELA,EAAY,GAAG,cAAc,MAAM;AACjC,cAAM4J,IAAe,MAAM;AACzB,UAAK5J,EAAY,kBAIfyJ,EAAO,QAAQ,MAHfA,EAAO,QAAQ,IACf,WAAWG,GAAc,GAAG;AAAA,QAIhC;AACA,QAAAA,EAAA;AAAA,MACF,CAAC;AAAA,IACH,GAEMoS,IAAa,CAACC,MAAqC;AACvD,MAAIA,aAAc,gBAChBF,EAAQ,QAAQE;AAAA,IAEpB,GAEMC,IAAuB,CAACC,MAAiC;AAC7D,UAAI;AACF,QAAAA,EAAe,UAAU5a,EAAM,WAAW;AAAA,MAC5C,SAASrB,GAAO;AACd,gBAAQ,MAAM,qCAAqCA,CAAK;AAAA,MAC1D;AAAA,IACF,GAEMkc,IAAmB,CAACD,MAAiC;AACzD,UAAI;AACF,QAAAA,EAAe,WAAA,EAAa,MAAM,SAAS5a,EAAM,UAAU;AAAA,MAC7D,SAASrB,GAAO;AACd,gBAAQ,MAAM,yBAAyBA,CAAK;AAAA,MAC9C;AAAA,IACF,GAEMmc,IAAW,CAACF,MAAiC;AACjD,YAAMnc,IAAc0J,EAAA;AACpB,UAAK1J;AAEL,YAAI;AACF,UAAAmc,EAAe,MAAMnc,CAAW,GAChCmC,EAAK,SAAS,EAAE,QAAQga,EAAA,CAAgB;AAAA,QAC1C,SAASjc,GAAO;AACd,kBAAQ,MAAM,+BAA+BA,CAAK;AAAA,QACpD;AAAA,IACF,GAEMoc,IAAgB,CAACH,MAAiC;AACtD,UAAI;AACF,QAAAA,EAAe,OAAA,GACfha,EAAK,SAAS;AAAA,MAChB,SAASjC,GAAO;AACd,gBAAQ,MAAM,mCAAmCA,CAAK;AAAA,MACxD;AAAA,IACF,GAEMqc,IAAqB,CAACJ,MAAiC;AAC3D,UAAI;AACF,YAAIK;AACJ,QAAApR,GAAgB,QAAQ,CAAC7I,MAAkB;AACzC,UAAA4Z,EAAe,GAAG5Z,GAAO,CAAC6H,MAA0B;AAClD,YAAI7H,MAAU,cACR,MAAM,QAAQhB,EAAM,WAAW,IACjCib,IAAc;AAAA,cACZpS,EAAE,OAAO,UAAA,EAAY;AAAA,cACrBA,EAAE,OAAO,YAAY;AAAA,YAAA,IAGvBoS,IAAcpS,EAAE,OAAO,UAAA,GAEzBjI,EAAK,sBAAsBqa,CAAW,IAExCra,EAAKI,GAAO6H,CAAC;AAAA,UACf,CAAC;AAAA,QACH,CAAC,GAEDiB,GAAgB,QAAQ,CAAC9I,MAAkB;AACzC,UAAA4Z,EAAe,WAAA,EAAa,iBAAiB5Z,GAAO,CAAC6H,MAAM;AACzD,YAAAjI,EAAKI,GAAO6H,CAAC;AAAA,UACf,CAAC;AAAA,QACH,CAAC;AAAA,MACH,SAASlK,GAAO;AACd,gBAAQ,MAAM,mCAAmCA,CAAK;AAAA,MACxD;AAAA,IACF;AAGA,IAAAa,EAAM8a,GAAQ,CAACY,MAAgB;AAC7B,MAAAX,EAAkB,QAAQW,MAAgB,QAAQ,UAAUA;AAAA,IAC9D,CAAC,GAGD1b;AAAA,MACE3B;AAAA,MACA,CAAC2K,MAAW;AACV,QAAIA,KACFJ,EAASI,CAAM;AAAA,MAEnB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;AAGpB,UAAM2S,IAAa,CAACC,MAA0B;AAC5C,UAAI,GAAClT,EAAO,SAASoS,EAAO;AAE5B,YAAI;AACF,gBAAMe,IAA+B;AAAA,YACnC,GAAGrb,EAAM;AAAA,YACT,SAASob,KAAW;AAAA,UAAA;AAEtB,UAAAd,EAAO,QAAQ,IAAIgB,GAAOD,CAAa,GACvCV,EAAqBL,EAAO,KAAK,GACjCQ,EAASR,EAAO,KAAK,GACrBO,EAAiBP,EAAO,KAAK,GAC7BU,EAAmBV,EAAO,KAAK;AAAA,QACjC,SAAS3b,GAAO;AACd,kBAAQ,MAAM,8BAA8BA,CAAK;AAAA,QACnD;AAAA,IACF;AAEA,WAAAa,EAAMgb,GAAS,CAACE,MAAO;AACrB,MAAIA,KAAM,CAACJ,EAAO,SAChBa,EAAWT,CAAE;AAAA,IAEjB,CAAC,GAEDta,EAAU,MAAM;AAEd,MADyB,CAAC,CAACF,EAAM,WAE/Bib,EAAA;AAAA,IAEJ,CAAC,GAED1S,EAAgB,MAAM;AACpB,MAAI6R,EAAO,SACTS,EAAcT,EAAO,KAAK;AAAA,IAE9B,CAAC,mBAID7W,EAWU,WAAA;AAAA,MAXA,IAAE,UAAY,KAAK,IAAA,CAAG;AAAA,MAAM,OAAM;AAAA,IAAA;MAC1CjD,EAAkDC,EAAA,QAAA,WAAA,EAA3C,QAASga,GAAU;AAAA,MACVF,EAAA,SAAqBgB,EAAAA,OAAO,gBAC1C1Q,GAMU2Q,IAAA;AAAA;QALP,QAAQlB,EAAA;AAAA,QACR,SAASra,EAAA;AAAA,QACT,aAAaA,EAAA;AAAA,MAAA;oBAEd,MAAa;AAAA,UAAbO,EAAaC,EAAA,QAAA,SAAA;AAAA,QAAA;;;;;;","x_google_ignoreList":[63]}