{"version":3,"file":"v-mapbox.umd.cjs","sources":["../src/utils/injects.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/layers/deck.gl/VLayerDeckArc.vue","../src/layers/deck.gl/VLayerDeckGeojson.vue","../src/layers/mapbox/VLayerMapboxCanvas.vue","../src/layers/mapbox/VLayerMapboxGeojson.vue","../src/layers/mapbox/VLayerMapboxImage.vue","../src/layers/mapbox/VLayerMapboxRaster.vue","../src/layers/mapbox/VLayerMapboxVector.vue","../src/layers/mapbox/VLayerMapboxVideo.vue","../src/constants/events/map.ts","../src/constants/events/marker.ts","../src/constants/events/popup.ts","../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 type { Map } from 'maplibre-gl';\nimport type { InjectionKey, Ref } from 'vue';\n\nconst MapKey: InjectionKey<Ref<Map>> = Symbol('Map');\n\nexport { MapKey };\n","<script setup lang=\"ts\">\n  import type { ControlPosition, AttributionControlOptions } from './types';\n  import { AttributionControl } from 'maplibre-gl';\n  import { useSlots, onMounted } from 'vue';\n  import { MapKey, injectStrict } from '../../utils';\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  let 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 />\n</template>\n","<script setup lang=\"ts\">\n  import type { ControlPosition, FullscreenControlOptions } from './types';\n  import { FullscreenControl } from 'maplibre-gl';\n  import { onMounted } from 'vue';\n  import { MapKey, injectStrict } from '../../utils';\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  let 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 type { ControlPosition, GeolocateControlOptions } from './types';\n  import { GeolocateControl } from 'maplibre-gl';\n  import { onMounted } from 'vue';\n  import { geolocateControlEvents as events } from './events';\n  import { MapKey, injectStrict } from '../../utils';\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  let 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 type { ControlPosition, NavigationControlOptions } from './types';\n  import { NavigationControl } from 'maplibre-gl';\n  import { onMounted, inject } from 'vue';\n  import { MapKey } from '../../utils';\n\n  const defaultOptions: NavigationControlOptions = {\n    showCompass: true,\n    showZoom: true,\n    visualizePitch: true,\n  };\n\n  const props = withDefaults(\n    defineProps<{\n      options?: NavigationControlOptions;\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 type { ControlPosition, ScaleControlOptions } from './types';\n  import { onMounted, inject } from 'vue';\n  import { ScaleControl } from 'maplibre-gl';\n  import { MapKey } from '../../utils';\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","<script lang=\"ts\">\n  // @ts-ignore\n  import { ArcLayer } from '@deck.gl/layers';\n  // @ts-ignore\n  import { MapboxLayer } from '@deck.gl/mapbox';\n  import type { PropType, Ref } from 'vue';\n  import { defineComponent, onMounted, ref, watch } from 'vue';\n  import { injectStrict, MapKey } from '../../utils';\n\n  export default defineComponent({\n    name: 'VLayerDeckArc',\n    props: {\n      layerId: {\n        type: String as PropType<string>,\n        default: 'deck.gl-arc-layer',\n        required: true,\n      },\n      data: {\n        type: Object as PropType<any>,\n        required: true,\n      },\n      options: {\n        type: Object,\n        required: true,\n      },\n      before: {\n        type: String as PropType<string>,\n        default: '',\n        required: false,\n      },\n    },\n    setup(props) {\n      let map = injectStrict(MapKey);\n      let loaded: Ref<boolean> = ref(false);\n\n      const layer = new MapboxLayer({\n        ...props.options,\n        id: props.layerId,\n        data: props.data,\n        type: ArcLayer,\n      });\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      /**\n       * Watcher(s)\n       */\n      watch(loaded, (value) => {\n        if (value) {\n          addLayer();\n        }\n      });\n\n      onMounted(() => {\n        addLayer();\n      });\n\n      /**\n       * Re–adds the layer when style changed\n       * @returns {void}\n       */\n      function addLayer(): void {\n        map.value.addLayer(layer, props.before);\n      }\n    },\n  });\n</script>\n","<script lang=\"ts\">\n  // @ts-ignore\n  import { GeoJsonLayer } from '@deck.gl/layers';\n  // @ts-ignore\n  import { MapboxLayer } from '@deck.gl/mapbox';\n  import { FeatureCollection } from 'geojson';\n  import type { PropType, Ref } from 'vue';\n  import { defineComponent, onMounted, ref, watch } from 'vue';\n  import { injectStrict, MapKey } from '../../utils';\n\n  export default defineComponent({\n    name: 'VLayerDeckGeojson',\n    props: {\n      layerId: {\n        type: String as PropType<string>,\n        default: 'deck.gl-geojson-layer',\n        required: true,\n      },\n      data: {\n        type: Object as PropType<FeatureCollection>,\n        required: true,\n      },\n      options: {\n        type: Object,\n        required: true,\n      },\n      before: {\n        type: String as PropType<string>,\n        default: '',\n        required: false,\n      },\n    },\n    setup(props) {\n      let map = injectStrict(MapKey);\n      let loaded: Ref<boolean> = ref(false);\n\n      const layer = new MapboxLayer({\n        ...props.options,\n        id: props.layerId,\n        data: props.data,\n        type: GeoJsonLayer,\n      });\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      /**\n       * Watcher(s)\n       */\n      watch(loaded, (value) => {\n        if (value) {\n          addLayer();\n        }\n      });\n\n      onMounted(() => {\n        addLayer();\n      });\n\n      /**\n       * Re–adds the layer when style changed\n       * @returns {void}\n       */\n      function addLayer(): void {\n        map.value.addLayer(layer, props.before);\n      }\n    },\n  });\n</script>\n","<template>\n  <div>\n    <slot />\n  </div>\n</template>\n<script lang=\"ts\">\n  import type { FeatureCollection } from 'geojson';\n  import type {\n    LayerSpecification as AnyLayer,\n    GeoJSONSourceSpecification as GeoJSONSourceRaw,\n  } from 'maplibre-gl';\n  import type { PropType, Ref } from 'vue';\n  import { defineComponent, onMounted, ref, watch } from 'vue';\n  import { injectStrict, MapKey } from '../../utils';\n\n  export default defineComponent({\n    name: 'VLayerMapboxCanvas',\n    props: {\n      sourceId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-canvas-source',\n        required: true,\n      },\n      layerId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-canvas-layer',\n        required: true,\n      },\n      source: {\n        type: Object as PropType<FeatureCollection>,\n        required: true,\n      },\n      layer: {\n        type: Object as PropType<AnyLayer>,\n        default: () => ({}),\n        required: true,\n      },\n      before: {\n        type: String as PropType<string>,\n        default: '',\n        required: false,\n      },\n    },\n    setup(props) {\n      let map = injectStrict(MapKey);\n      let loaded: Ref<boolean> = ref(false);\n\n      const layer = {\n        ...props.layer,\n        id: props.layerId,\n        source: props.sourceId,\n      };\n      const source: GeoJSONSourceRaw = {\n        type: 'geojson',\n        data: props.source,\n      };\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      /**\n       * Watcher(s)\n       */\n      watch(loaded, (value) => {\n        if (value) {\n          addLayer();\n        }\n      });\n\n      onMounted(() => {\n        addLayer();\n      });\n\n      /**\n       * Re–adds the layer when style changed\n       * @returns {void}\n       */\n      function addLayer(): void {\n        map.value.addSource(props.sourceId, source);\n        map.value.addLayer(layer, props.before);\n      }\n    },\n  });\n</script>\n","<template>\n  <div>\n    <slot />\n  </div>\n</template>\n<script lang=\"ts\">\n  import type {\n    LayerSpecification as AnyLayer,\n    SourceSpecification as AnySource,\n  } from 'maplibre-gl';\n  import type { PropType, Ref } from 'vue';\n  import { defineComponent, onMounted, onBeforeUnmount, ref, watch } from 'vue';\n  import { injectStrict, MapKey } from '../../utils';\n\n  export default defineComponent({\n    name: 'VLayerMapboxGeojson',\n    props: {\n      sourceId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-geojson-source',\n        required: true,\n      },\n      layerId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-geojson-layer',\n        required: true,\n      },\n      source: {\n        type: Object as PropType<AnySource>,\n        required: true,\n      },\n      layer: {\n        type: Object as PropType<AnyLayer>,\n        default: () => ({}),\n        required: true,\n      },\n      before: {\n        type: String as PropType<string>,\n        default: '',\n        required: false,\n      },\n    },\n    setup(props) {\n      let map = injectStrict(MapKey);\n      let loaded: Ref<boolean> = ref(false);\n\n      const layer = {\n        ...props.layer,\n        id: props.layerId,\n        source: props.sourceId,\n      };\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      /**\n       * Watcher(s)\n       */\n      watch(loaded, (value) => {\n        if (value) {\n          addLayer();\n        }\n      });\n\n      onMounted(() => {\n        addLayer();\n      });\n\n      onBeforeUnmount(() => {\n        if (map.value.getLayer(props.layerId)) {\n          map.value.removeLayer(props.layerId);\n          map.value.removeSource(props.sourceId);\n        }\n      });\n\n      /**\n       * Re–adds the layer when style changed\n       * @returns {void}\n       */\n      function addLayer(): void {\n        map.value.addSource(props.sourceId, props.source);\n        map.value.addLayer(layer, props.before);\n      }\n    },\n  });\n</script>\n","<template>\n  <div>\n    <slot />\n  </div>\n</template>\n<script lang=\"ts\">\n  import type {\n    LayerSpecification as AnyLayer,\n    ImageSourceSpecification as ImageSourceRaw,\n  } from 'maplibre-gl';\n  import type { PropType, Ref } from 'vue';\n  import { defineComponent, onMounted, ref, watch } from 'vue';\n  import { injectStrict, MapKey } from '../../utils';\n\n  export default defineComponent({\n    name: 'VLayerMapboxImage',\n    props: {\n      sourceId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-image-source',\n        required: true,\n      },\n      layerId: {\n        type: String as PropType<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 as PropType<string>,\n        default: '',\n        required: false,\n      },\n    },\n    setup(props) {\n      let map = injectStrict(MapKey);\n      let loaded: Ref<boolean> = ref(false);\n\n      const layer = {\n        ...props.layer,\n        id: props.layerId,\n        source: props.sourceId,\n      };\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      /**\n       * Watcher(s)\n       */\n      watch(loaded, (value) => {\n        if (value) {\n          addLayer();\n        }\n      });\n\n      onMounted(() => {\n        addLayer();\n      });\n\n      /**\n       * Re–adds the layer when style changed\n       * @returns {void}\n       */\n      function addLayer(): void {\n        map.value.addSource(props.sourceId, props.source);\n        map.value.addLayer(layer, props.before);\n      }\n    },\n  });\n</script>\n","<template>\n  <div>\n    <slot />\n  </div>\n</template>\n<script lang=\"ts\">\n  import type { FeatureCollection } from 'geojson';\n  import type {\n    LayerSpecification as AnyLayer,\n    GeoJSONSourceSpecification as GeoJSONSourceRaw,\n  } from 'maplibre-gl';\n  import { defineComponent, onMounted, PropType, ref, Ref, watch } from 'vue';\n  import { injectStrict, MapKey } from '../../utils';\n\n  export default defineComponent({\n    name: 'VLayerMapboxRaster',\n    props: {\n      sourceId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-raster-source',\n        required: true,\n      },\n      layerId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-raster-layer',\n        required: true,\n      },\n      source: {\n        type: Object as PropType<FeatureCollection>,\n        required: true,\n      },\n      layer: {\n        type: Object as PropType<AnyLayer>,\n        default: () => ({}),\n        required: true,\n      },\n      before: {\n        type: String as PropType<string>,\n        default: '',\n        required: false,\n      },\n    },\n    setup(props) {\n      let map = injectStrict(MapKey);\n      let loaded: Ref<boolean> = ref(false);\n\n      const layer = {\n        ...props.layer,\n        id: props.layerId,\n        source: props.sourceId,\n      };\n      const source: GeoJSONSourceRaw = {\n        type: 'geojson',\n        data: props.source,\n      };\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      /**\n       * Watcher(s)\n       */\n      watch(loaded, (value) => {\n        if (value) {\n          addLayer();\n        }\n      });\n\n      onMounted(() => {\n        addLayer();\n      });\n\n      /**\n       * Re–adds the layer when style changed\n       * @returns {void}\n       */\n      function addLayer(): void {\n        map.value.addSource(props.sourceId, source);\n        map.value.addLayer(layer, props.before);\n      }\n    },\n  });\n</script>\n","<template>\n  <div>\n    <slot />\n  </div>\n</template>\n<script lang=\"ts\">\n  import type {\n    LayerSpecification as AnyLayer,\n    VectorSourceSpecification as VectorSource,\n  } from 'maplibre-gl';\n  import type { PropType, Ref } from 'vue';\n  import { defineComponent, onMounted, ref, watch } from 'vue';\n  import { injectStrict, MapKey } from '../../utils';\n\n  export default defineComponent({\n    name: 'VLayerMapboxVector',\n    props: {\n      sourceId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-vector-source',\n        required: true,\n      },\n      layerId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-vector-layer',\n        required: true,\n      },\n      source: {\n        type: Object as PropType<VectorSource>,\n        required: true,\n      },\n      layer: {\n        type: Object as PropType<AnyLayer>,\n        default: () => ({}),\n        required: true,\n      },\n      before: {\n        type: String as PropType<string>,\n        default: '',\n        required: false,\n      },\n    },\n    setup(props) {\n      let map = injectStrict(MapKey);\n      let loaded: Ref<boolean> = ref(false);\n\n      const layer = {\n        ...props.layer,\n        id: props.layerId,\n        source: props.sourceId,\n      };\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      /**\n       * Watcher(s)\n       */\n      watch(loaded, (value) => {\n        if (value) {\n          addLayer();\n        }\n      });\n\n      onMounted(() => {\n        addLayer();\n      });\n\n      /**\n       * Re–adds the layer when style changed\n       * @returns {void}\n       */\n      function addLayer(): void {\n        map.value.addSource(props.sourceId, props.source);\n        map.value.addLayer(layer, props.before);\n      }\n    },\n  });\n</script>\n","<template>\n  <div>\n    <slot />\n  </div>\n</template>\n<script lang=\"ts\">\n  import type {\n    LayerSpecification as AnyLayer,\n    VectorSourceSpecification as VectorSource,\n  } from 'maplibre-gl';\n  import type { PropType, Ref } from 'vue';\n  import { defineComponent, onMounted, ref, watch } from 'vue';\n  import { injectStrict, MapKey } from '../../utils';\n\n  export default defineComponent({\n    name: 'VLayerMapboxVideo',\n    props: {\n      sourceId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-video-source',\n        required: true,\n      },\n      layerId: {\n        type: String as PropType<string>,\n        default: 'maplibre.gl-video-layer',\n        required: true,\n      },\n      source: {\n        type: Object as PropType<VectorSource>,\n        required: true,\n      },\n      layer: {\n        type: Object as PropType<AnyLayer>,\n        default: () => ({}),\n        required: true,\n      },\n      before: {\n        type: String as PropType<string>,\n        default: '',\n        required: false,\n      },\n    },\n    setup(props) {\n      let map = injectStrict(MapKey);\n      let loaded: Ref<boolean> = ref(false);\n\n      const layer = {\n        ...props.layer,\n        id: props.layerId,\n        source: props.sourceId,\n      };\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      /**\n       * Watcher(s)\n       */\n      watch(loaded, (value) => {\n        if (value) {\n          addLayer();\n        }\n      });\n\n      onMounted(() => {\n        addLayer();\n      });\n\n      /**\n       * Re–adds the layer when style changed\n       * @returns {void}\n       */\n      function addLayer(): void {\n        map.value.addSource(props.sourceId, props.source);\n        map.value.addLayer(layer, props.before);\n      }\n    },\n  });\n</script>\n","import { 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'];\n","<script setup lang=\"ts\">\n  import type { MapOptions, MapEventType } from 'maplibre-gl';\n  import type { Ref } from 'vue';\n  import { Map } from 'maplibre-gl';\n  import { onMounted, provide, ref, shallowRef } from 'vue';\n  import { mapEvents } from '../constants/events';\n  import { MapKey } from '../utils/symbols';\n\n  const props = withDefaults(\n    defineProps<{\n      options: MapOptions;\n    }>(),\n    {\n      // @ts-ignore\n      options: { container: 'map' },\n    },\n  );\n\n  const emit = defineEmits(['loaded', ...mapEvents]);\n\n  let map: Ref<Map> = shallowRef({} as Map);\n  let loaded: Ref<boolean> = ref(false);\n  let events: Ref<Array<keyof MapEventType>> = ref(mapEvents);\n\n  onMounted(() => {\n    map.value = new Map(props.options);\n    loaded.value = true;\n    provide(MapKey, map);\n    listenMapEvents();\n  });\n\n  const listenMapEvents = () => {\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 />\n  </div>\n</template>\n\n<style scoped>\n  canvas {\n    outline: none;\n  }\n  .v-map-container {\n    width: 100%;\n    height: 100%;\n  }\n</style>\n","<script lang=\"ts\">\n  import type { LngLatLike, Map, Marker, PopupOptions } from 'maplibre-gl';\n  import type { PropType, Ref } from 'vue';\n  import { Popup } from 'maplibre-gl';\n  import { defineComponent, onBeforeUnmount, onMounted, ref } from 'vue';\n  import { popupEvents } from '../constants/events';\n  import { injectStrict, MapKey } from '../utils';\n\n  export default defineComponent({\n    name: 'VPopup',\n    props: {\n      marker: {\n        type: Object as PropType<Marker>,\n        default: () => ({}) as Marker,\n        required: false,\n      },\n      options: {\n        type: Object as PropType<PopupOptions>,\n        default: () => ({}) as PopupOptions,\n        required: true,\n      },\n      coordinates: {\n        type: Object as PropType<LngLatLike>,\n        default: () => ({}),\n        required: true,\n      },\n    },\n    emits: ['added', 'removed', ...popupEvents],\n    setup(props, { emit }) {\n      let map: Ref<Map> = injectStrict(MapKey);\n      let popup: Popup = new Popup(props.options);\n      let loaded: Ref<boolean> = ref(true);\n      const content: Ref<null | HTMLElement> = ref(null);\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      onMounted(() => {\n        if (loaded.value) {\n          setPopupContent();\n          setPopupCoordinates();\n          addToMarker();\n          listenPopupEvents();\n        } else {\n          remove();\n          removePopupEvents();\n        }\n      });\n\n      onBeforeUnmount(() => {\n        remove();\n        removePopupEvents();\n      });\n\n      /**\n       * Sets the HTML content for the popup\n       * @returns {void}\n       */\n      function setPopupContent(): void {\n        popup.setDOMContent(content.value as Node);\n      }\n      /**\n       * Set popup coordinates\n       * @returns {void}\n       */\n      function setPopupCoordinates(): void {\n        popup.setLngLat(props.coordinates);\n      }\n\n      /**\n       * Add popup to marker if marker exists\n       * else add it to the map.\n       * @returns {void}\n       */\n      function addToMarker(): void {\n        if (props.marker) {\n          props.marker.setPopup(popup);\n        } else {\n          popup.addTo(map.value);\n        }\n        emit('added', { popup });\n      }\n      /**\n       * Remove popup from map\n       * @returns {void}\n       */\n      function remove(): void {\n        popup.remove();\n        emit('removed');\n      }\n\n      /**\n       * Listen to events\n       * @returns {void}\n       */\n      function listenPopupEvents(): void {\n        popupEvents.forEach((event: string) => {\n          popup.on(event, () => {\n            emit(event);\n          });\n        });\n      }\n      /**\n       * Turn off listener\n       * @returns {void}\n       */\n      function removePopupEvents(): void {\n        popupEvents.forEach((event: string) => {\n          popup.off(event, () => {\n            emit(event);\n          });\n        });\n      }\n\n      return {\n        content,\n      };\n    },\n  });\n</script>\n\n<template>\n  <section :id=\"`popup-${Date.now()}`\" ref=\"content\">\n    <slot />\n  </section>\n</template>\n","<script lang=\"ts\">\n  import type { LngLatLike, MarkerOptions, PopupOptions } from 'maplibre-gl';\n  import { Marker } from 'maplibre-gl';\n  import type { PropType, Ref } from 'vue';\n  import { defineComponent, onMounted, onBeforeUnmount, ref, watch } from 'vue';\n  import { markerDOMEvents, markerMapEvents } from '../constants/events';\n  import VPopup from '../popups/VPopup.vue';\n  import { injectStrict, MapKey } from '../utils';\n\n  export default defineComponent({\n    name: 'VMarker',\n    components: {\n      VPopup,\n    },\n    props: {\n      coordinates: {\n        type: [Object, Array] as PropType<LngLatLike>,\n        default: () => ({}),\n        required: true,\n      },\n      options: {\n        type: Object as PropType<MarkerOptions>,\n        default: () => ({}) as MarkerOptions,\n        required: false,\n      },\n      popupOptions: {\n        type: Object as PropType<PopupOptions>,\n        default: () => ({}) as PopupOptions,\n        required: false,\n      },\n      cursor: {\n        type: String as PropType<string>,\n        default: 'pointer',\n        required: false,\n      },\n    },\n    emits: [\n      'added',\n      'update:coordinates',\n      'removed',\n      ...markerMapEvents,\n      ...markerDOMEvents,\n    ],\n    setup(props, { emit }) {\n      let map = injectStrict(MapKey);\n      let marker: Ref<Marker> = ref({}) as Ref<Marker>;\n      let loaded: Ref<boolean> = ref(true);\n      let isMarkerAvailable = ref(false);\n      let slotRef: Ref<HTMLElement | null> = ref(null);\n\n      const setSlotRef = (el: HTMLElement) => {\n        slotRef.value = el;\n      };\n\n      watch(marker, (marker) => {\n        if ('_map' in marker) {\n          isMarkerAvailable.value = true;\n        } else {\n          isMarkerAvailable.value = false;\n        }\n      });\n\n      onMounted(() => {\n        if (loaded.value) {\n          if (slotRef.value !== null) {\n            // add marker to map\n            marker.value = new Marker({\n              element: slotRef.value!,\n              ...props.options,\n            });\n            setMarkerCoordinates(marker.value);\n            addToMap(marker.value);\n            setCursorPointer(marker.value);\n            listenMarkerEvents(marker.value);\n          } else {\n            marker.value = new Marker(props.options);\n            setMarkerCoordinates(marker.value);\n            addToMap(marker.value);\n            setCursorPointer(marker.value);\n            listenMarkerEvents(marker.value);\n          }\n        } else {\n          removeFromMap(marker.value);\n        }\n      });\n\n      onBeforeUnmount(() => {\n        removeFromMap(marker.value);\n      });\n\n      map.value.on('style.load', () => {\n        // https://github.com/mapbox/mapbox-gl-js/issues/2268#issuecomment-401979967\n        const styleTimeout = () => {\n          if (!map.value.isStyleLoaded()) {\n            loaded.value = false;\n            setTimeout(styleTimeout, 200);\n          } else {\n            loaded.value = true;\n          }\n        };\n        styleTimeout();\n      });\n\n      /**\n       * Set marker coordinates\n       * @param {Marker} marker - Marker\n       * @returns {void}\n       */\n      function setMarkerCoordinates(marker: Marker): void {\n        marker.setLngLat(props.coordinates);\n      }\n      /**\n       * Sets the Cursor to Pointer\n       * @param {Marker} marker - Marker\n       * @returns {void}\n       */\n      function setCursorPointer(marker: Marker): void {\n        marker.getElement().style.cursor = props.cursor || 'default';\n      }\n\n      /**\n       * Add marker to map\n       * @param {Marker} marker - Marker\n       * @returns {void}\n       */\n      function addToMap(marker: Marker): void {\n        marker.addTo(map.value);\n        emit('added', { marker });\n      }\n      /**\n       * Remove marker from map\n       * @param {Marker} marker - Marker\n       * @returns {void}\n       */\n      function removeFromMap(marker: Marker): void {\n        if (isMarkerAvailable.value) {\n          marker.remove();\n          emit('removed');\n        }\n      }\n\n      /**\n       * Listen to events\n       * @param {Marker} marker - Marker\n       * @returns {void}\n       */\n      function listenMarkerEvents(marker: Marker): void {\n        let coordinates: LngLatLike;\n        // Listen to Marker Mapbox events\n        markerMapEvents.forEach((event: string) => {\n          marker.on(event, (e: { target: Marker }) => {\n            if (event === 'dragend') {\n              if (props.coordinates instanceof Array) {\n                coordinates = [e.target._lngLat.lng, e.target._lngLat.lat];\n              } else {\n                coordinates = e.target._lngLat;\n              }\n              emit('update:coordinates', coordinates);\n            }\n            emit(event, e);\n          });\n        });\n        // Listen to Marker DOM events\n        markerDOMEvents.forEach((event: string) => {\n          marker.getElement().addEventListener(event, (e) => {\n            emit(event, e);\n          });\n        });\n      }\n\n      return {\n        isMarkerAvailable,\n        marker,\n        setSlotRef,\n      };\n    },\n  });\n</script>\n\n<template>\n  <section :id=\"`marker-${Date.now()}`\" class=\"absolute\">\n    <slot :set-ref=\"setSlotRef\" name=\"markers\" />\n    <template v-if=\"isMarkerAvailable\">\n      <v-popup\n        :marker=\"marker\"\n        :options=\"popupOptions\"\n        :coordinates=\"coordinates\"\n      >\n        <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","MapKey","defaultOptions","props","__props","slots","useSlots","map","onMounted","addControl","options","control","AttributionControl","FullscreenControl","geolocateControlEvents","emit","__emit","GeolocateControl","events","event","NavigationControl","ScaleControl","_sfc_main$a","defineComponent","loaded","ref","layer","MapboxLayer","ArcLayer","styleTimeout","watch","value","addLayer","_sfc_main$9","GeoJsonLayer","_sfc_main$8","source","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","_sfc_main$7","onBeforeUnmount","_sfc_main$6","_sfc_main$5","_sfc_main$4","_sfc_main$3","mapEvents","markerMapEvents","markerDOMEvents","popupEvents","shallowRef","Map","provide","listenMapEvents","e","evt","_sfc_main$1","popup","Popup","content","setPopupContent","setPopupCoordinates","addToMarker","listenPopupEvents","remove","removePopupEvents","_openBlock","_createElementBlock","_sfc_main","VPopup","marker","isMarkerAvailable","slotRef","setSlotRef","el","Marker","setMarkerCoordinates","addToMap","setCursorPointer","listenMarkerEvents","removeFromMap","coordinates","_resolveComponent","_createBlock","_component_v_popup","_renderSlot","_createCommentVNode"],"mappings":";;;;8aASgB,SAAAA,EAAgBC,EAAsBC,EAAiB,CAC/D,MAAAC,EAAWC,EAAAA,OAAOH,EAAKC,CAAQ,EACrC,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,qBAAqBF,EAAI,WAAW,EAAE,EAEjD,OAAAE,CACT,CCZA,MAAME,EAAiC,OAAO,KAAK,gICGjD,MAAMC,EAA4C,CAChD,QAAS,GACT,kBAAmB,MAAA,EAGfC,EAAQC,EAWRC,EAAQC,EAAAA,WAEV,IAAAC,EAAMX,EAAaK,CAAM,EAE7BO,EAAAA,UAAU,IAAM,CACHC,GAAA,CACZ,EAED,MAAMA,EAAa,IAAY,CAC7B,IAAIC,EAAUR,EACVC,EAAM,UACEO,EAAA,CACR,GAAGP,EAAM,OAAA,GAGTE,GAASA,EAAM,cACjBK,EAAQ,kBAAoBL,EAAM,QAAQ,EAAE,CAAC,EAC1C,UAEC,MAAAM,EAAU,IAAIC,qBAAmBF,CAAO,EAC9CH,EAAI,MAAM,WAAWI,EAASR,EAAM,QAAQ,CAAA,4KCpC9C,MAAMD,EAA2C,CAC/C,UAAW,MAAA,EAGPC,EAAQC,EAWV,IAAAG,EAAMX,EAAaK,CAAM,EAE7BO,EAAAA,UAAU,IAAM,CACHC,GAAA,CACZ,EAED,MAAMA,EAAa,IAAY,CAC7B,MAAME,EAAU,IAAIE,EAAkB,kBAAAV,EAAM,SAAWD,CAAc,EACrEK,EAAI,MAAM,WAAWI,EAASR,EAAM,QAAQ,CAAA,kBC7BnCW,EAAmC,CAC9C,YACA,QACA,iBACA,yBACA,sBACF,2ICCE,MAAMZ,EAA0C,CAC9C,iBAAkB,CAChB,OAAQ,GACR,OAAQ,CAAC,EAAG,CAAC,EACb,QAAS,EACX,EACA,gBAAiB,CACf,mBAAoB,GACpB,WAAY,EACZ,QAAS,GACX,EACA,kBAAmB,GACnB,mBAAoB,GACpB,iBAAkB,EAAA,EAGdC,EAAQC,EAWRW,EAAOC,EAET,IAAAT,EAAMX,EAAaK,CAAM,EAE7BO,EAAAA,UAAU,IAAM,CACHC,GAAA,CACZ,EAED,MAAMA,EAAa,IAAY,CAC7B,MAAME,EAAU,IAAIM,EAAiB,iBAAAd,EAAM,SAAWD,CAAc,EACpEK,EAAI,MAAM,WAAWI,EAASR,EAAM,QAAQ,EACrCe,EAAA,QAASC,GAAkB,CACxBR,EAAA,GAAGQ,EAAO,IAAM,CACtBJ,EAAKI,CAAK,CAAA,CACX,CAAA,CACF,CAAA,2IC3CH,MAAMjB,EAA2C,CAC/C,YAAa,GACb,SAAU,GACV,eAAgB,EAAA,EAGZC,EAAQC,EAWRG,EAAMP,SAAOC,CAAM,EAEzBO,EAAAA,UAAU,IAAM,CACHC,GAAA,CACZ,EAED,MAAMA,EAAa,IAAY,CAC7B,MAAME,EAAU,IAAIS,EAAkB,kBAAAjB,EAAM,SAAWD,CAAc,EACrEK,GAAK,MAAM,WAAWI,EAASR,EAAM,QAAQ,CAAA,yICzB/C,MAAMD,EAAsC,CAC1C,SAAU,IACV,KAAM,QAAA,EAGFC,EAAQC,EAWRG,EAAMP,SAAOC,CAAM,EAEzBO,EAAAA,UAAU,IAAM,CACHC,GAAA,CACZ,EAED,MAAMA,EAAa,IAAY,CAC7B,MAAME,EAAU,IAAIU,EAAa,aAAAlB,EAAM,SAAWD,CAAc,EAChEK,GAAK,MAAM,WAAWI,EAASR,EAAM,QAAQ,CAAA,kBCrB/CmB,EAAeC,kBAAgB,CAC7B,KAAM,gBACN,MAAO,CACL,QAAS,CACP,KAAM,OACN,QAAS,oBACT,SAAU,EACZ,EACA,KAAM,CACJ,KAAM,OACN,SAAU,EACZ,EACA,QAAS,CACP,KAAM,OACN,SAAU,EACZ,EACA,OAAQ,CACN,KAAM,OACN,QAAS,GACT,SAAU,EACZ,CACF,EACA,MAAMpB,EAAO,CACP,IAAAI,EAAMX,EAAaK,CAAM,EACzBuB,EAAuBC,MAAI,EAAK,EAE9B,MAAAC,EAAQ,IAAIC,cAAY,CAC5B,GAAGxB,EAAM,QACT,GAAIA,EAAM,QACV,KAAMA,EAAM,KACZ,KAAMyB,EAAA,QAAA,CACP,EAEGrB,EAAA,MAAM,GAAG,aAAc,IAAM,CAE/B,MAAMsB,EAAe,IAAM,CACpBtB,EAAI,MAAM,gBAIbiB,EAAO,MAAQ,IAHfA,EAAO,MAAQ,GACf,WAAWK,EAAc,GAAG,EAG9B,EAEWA,GAAA,CACd,EAKKC,QAAAN,EAASO,GAAU,CACnBA,GACOC,GACX,CACD,EAEDxB,EAAAA,UAAU,IAAM,CACLwB,GAAA,CACV,EAMD,SAASA,GAAiB,CACxBzB,EAAI,MAAM,SAASmB,EAAOvB,EAAM,MAAM,CACxC,CACF,CACF,CAAC,EClED8B,EAAeV,kBAAgB,CAC7B,KAAM,oBACN,MAAO,CACL,QAAS,CACP,KAAM,OACN,QAAS,wBACT,SAAU,EACZ,EACA,KAAM,CACJ,KAAM,OACN,SAAU,EACZ,EACA,QAAS,CACP,KAAM,OACN,SAAU,EACZ,EACA,OAAQ,CACN,KAAM,OACN,QAAS,GACT,SAAU,EACZ,CACF,EACA,MAAMpB,EAAO,CACP,IAAAI,EAAMX,EAAaK,CAAM,EACzBuB,EAAuBC,MAAI,EAAK,EAE9B,MAAAC,EAAQ,IAAIC,cAAY,CAC5B,GAAGxB,EAAM,QACT,GAAIA,EAAM,QACV,KAAMA,EAAM,KACZ,KAAM+B,EAAA,YAAA,CACP,EAEG3B,EAAA,MAAM,GAAG,aAAc,IAAM,CAE/B,MAAMsB,EAAe,IAAM,CACpBtB,EAAI,MAAM,gBAIbiB,EAAO,MAAQ,IAHfA,EAAO,MAAQ,GACf,WAAWK,EAAc,GAAG,EAG9B,EAEWA,GAAA,CACd,EAKKC,QAAAN,EAASO,GAAU,CACnBA,GACOC,GACX,CACD,EAEDxB,EAAAA,UAAU,IAAM,CACLwB,GAAA,CACV,EAMD,SAASA,GAAiB,CACxBzB,EAAI,MAAM,SAASmB,EAAOvB,EAAM,MAAM,CACxC,CACF,CACF,CAAC,EC9DDgC,EAAeZ,kBAAgB,CAC7B,KAAM,qBACN,MAAO,CACL,SAAU,CACR,KAAM,OACN,QAAS,4BACT,SAAU,EACZ,EACA,QAAS,CACP,KAAM,OACN,QAAS,2BACT,SAAU,EACZ,EACA,OAAQ,CACN,KAAM,OACN,SAAU,EACZ,EACA,MAAO,CACL,KAAM,OACN,QAAS,KAAO,CAAA,GAChB,SAAU,EACZ,EACA,OAAQ,CACN,KAAM,OACN,QAAS,GACT,SAAU,EACZ,CACF,EACA,MAAMpB,EAAO,CACP,IAAAI,EAAMX,EAAaK,CAAM,EACzBuB,EAAuBC,MAAI,EAAK,EAEpC,MAAMC,EAAQ,CACZ,GAAGvB,EAAM,MACT,GAAIA,EAAM,QACV,OAAQA,EAAM,QAAA,EAEViC,EAA2B,CAC/B,KAAM,UACN,KAAMjC,EAAM,MAAA,EAGVI,EAAA,MAAM,GAAG,aAAc,IAAM,CAE/B,MAAMsB,EAAe,IAAM,CACpBtB,EAAI,MAAM,gBAIbiB,EAAO,MAAQ,IAHfA,EAAO,MAAQ,GACf,WAAWK,EAAc,GAAG,EAG9B,EAEWA,GAAA,CACd,EAKKC,QAAAN,EAASO,GAAU,CACnBA,GACOC,GACX,CACD,EAEDxB,EAAAA,UAAU,IAAM,CACLwB,GAAA,CACV,EAMD,SAASA,GAAiB,CACxBzB,EAAI,MAAM,UAAUJ,EAAM,SAAUiC,CAAM,EAC1C7B,EAAI,MAAM,SAASmB,EAAOvB,EAAM,MAAM,CACxC,CACF,CACF,CAAC,gFA1FCkC,EAAQC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,sHCYVC,EAAerB,kBAAgB,CAC7B,KAAM,sBACN,MAAO,CACL,SAAU,CACR,KAAM,OACN,QAAS,6BACT,SAAU,EACZ,EACA,QAAS,CACP,KAAM,OACN,QAAS,4BACT,SAAU,EACZ,EACA,OAAQ,CACN,KAAM,OACN,SAAU,EACZ,EACA,MAAO,CACL,KAAM,OACN,QAAS,KAAO,CAAA,GAChB,SAAU,EACZ,EACA,OAAQ,CACN,KAAM,OACN,QAAS,GACT,SAAU,EACZ,CACF,EACA,MAAMpB,EAAO,CACP,IAAAI,EAAMX,EAAaK,CAAM,EACzBuB,EAAuBC,MAAI,EAAK,EAEpC,MAAMC,EAAQ,CACZ,GAAGvB,EAAM,MACT,GAAIA,EAAM,QACV,OAAQA,EAAM,QAAA,EAGZI,EAAA,MAAM,GAAG,aAAc,IAAM,CAE/B,MAAMsB,EAAe,IAAM,CACpBtB,EAAI,MAAM,gBAIbiB,EAAO,MAAQ,IAHfA,EAAO,MAAQ,GACf,WAAWK,EAAc,GAAG,EAG9B,EAEWA,GAAA,CACd,EAKKC,QAAAN,EAASO,GAAU,CACnBA,GACOC,GACX,CACD,EAEDxB,EAAAA,UAAU,IAAM,CACLwB,GAAA,CACV,EAEDa,EAAAA,gBAAgB,IAAM,CAChBtC,EAAI,MAAM,SAASJ,EAAM,OAAO,IAC9BI,EAAA,MAAM,YAAYJ,EAAM,OAAO,EAC/BI,EAAA,MAAM,aAAaJ,EAAM,QAAQ,EACvC,CACD,EAMD,SAAS6B,GAAiB,CACxBzB,EAAI,MAAM,UAAUJ,EAAM,SAAUA,EAAM,MAAM,EAChDI,EAAI,MAAM,SAASmB,EAAOvB,EAAM,MAAM,CACxC,CACF,CACF,CAAC,WA5FCkC,EAAQC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,sHCYVG,EAAevB,kBAAgB,CAC7B,KAAM,oBACN,MAAO,CACL,SAAU,CACR,KAAM,OACN,QAAS,2BACT,SAAU,EACZ,EACA,QAAS,CACP,KAAM,OACN,QAAS,0BACT,SAAU,EACZ,EACA,OAAQ,CACN,KAAM,OACN,SAAU,EACZ,EACA,MAAO,CACL,KAAM,OACN,QAAS,KAAO,CAAA,GAChB,SAAU,EACZ,EACA,OAAQ,CACN,KAAM,OACN,QAAS,GACT,SAAU,EACZ,CACF,EACA,MAAMpB,EAAO,CACP,IAAAI,EAAMX,EAAaK,CAAM,EACzBuB,EAAuBC,MAAI,EAAK,EAEpC,MAAMC,EAAQ,CACZ,GAAGvB,EAAM,MACT,GAAIA,EAAM,QACV,OAAQA,EAAM,QAAA,EAGZI,EAAA,MAAM,GAAG,aAAc,IAAM,CAE/B,MAAMsB,EAAe,IAAM,CACpBtB,EAAI,MAAM,gBAIbiB,EAAO,MAAQ,IAHfA,EAAO,MAAQ,GACf,WAAWK,EAAc,GAAG,EAG9B,EAEWA,GAAA,CACd,EAKKC,QAAAN,EAASO,GAAU,CACnBA,GACOC,GACX,CACD,EAEDxB,EAAAA,UAAU,IAAM,CACLwB,GAAA,CACV,EAMD,SAASA,GAAiB,CACxBzB,EAAI,MAAM,UAAUJ,EAAM,SAAUA,EAAM,MAAM,EAChDI,EAAI,MAAM,SAASmB,EAAOvB,EAAM,MAAM,CACxC,CACF,CACF,CAAC,WArFCkC,EAAQC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,sHCYVI,EAAexB,kBAAgB,CAC7B,KAAM,qBACN,MAAO,CACL,SAAU,CACR,KAAM,OACN,QAAS,4BACT,SAAU,EACZ,EACA,QAAS,CACP,KAAM,OACN,QAAS,2BACT,SAAU,EACZ,EACA,OAAQ,CACN,KAAM,OACN,SAAU,EACZ,EACA,MAAO,CACL,KAAM,OACN,QAAS,KAAO,CAAA,GAChB,SAAU,EACZ,EACA,OAAQ,CACN,KAAM,OACN,QAAS,GACT,SAAU,EACZ,CACF,EACA,MAAMpB,EAAO,CACP,IAAAI,EAAMX,EAAaK,CAAM,EACzBuB,EAAuBC,MAAI,EAAK,EAEpC,MAAMC,EAAQ,CACZ,GAAGvB,EAAM,MACT,GAAIA,EAAM,QACV,OAAQA,EAAM,QAAA,EAEViC,EAA2B,CAC/B,KAAM,UACN,KAAMjC,EAAM,MAAA,EAGVI,EAAA,MAAM,GAAG,aAAc,IAAM,CAE/B,MAAMsB,EAAe,IAAM,CACpBtB,EAAI,MAAM,gBAIbiB,EAAO,MAAQ,IAHfA,EAAO,MAAQ,GACf,WAAWK,EAAc,GAAG,EAG9B,EAEWA,GAAA,CACd,EAKKC,QAAAN,EAASO,GAAU,CACnBA,GACOC,GACX,CACD,EAEDxB,EAAAA,UAAU,IAAM,CACLwB,GAAA,CACV,EAMD,SAASA,GAAiB,CACxBzB,EAAI,MAAM,UAAUJ,EAAM,SAAUiC,CAAM,EAC1C7B,EAAI,MAAM,SAASmB,EAAOvB,EAAM,MAAM,CACxC,CACF,CACF,CAAC,WAzFCkC,EAAQC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,sHCYVK,EAAezB,kBAAgB,CAC7B,KAAM,qBACN,MAAO,CACL,SAAU,CACR,KAAM,OACN,QAAS,4BACT,SAAU,EACZ,EACA,QAAS,CACP,KAAM,OACN,QAAS,2BACT,SAAU,EACZ,EACA,OAAQ,CACN,KAAM,OACN,SAAU,EACZ,EACA,MAAO,CACL,KAAM,OACN,QAAS,KAAO,CAAA,GAChB,SAAU,EACZ,EACA,OAAQ,CACN,KAAM,OACN,QAAS,GACT,SAAU,EACZ,CACF,EACA,MAAMpB,EAAO,CACP,IAAAI,EAAMX,EAAaK,CAAM,EACzBuB,EAAuBC,MAAI,EAAK,EAEpC,MAAMC,EAAQ,CACZ,GAAGvB,EAAM,MACT,GAAIA,EAAM,QACV,OAAQA,EAAM,QAAA,EAGZI,EAAA,MAAM,GAAG,aAAc,IAAM,CAE/B,MAAMsB,EAAe,IAAM,CACpBtB,EAAI,MAAM,gBAIbiB,EAAO,MAAQ,IAHfA,EAAO,MAAQ,GACf,WAAWK,EAAc,GAAG,EAG9B,EAEWA,GAAA,CACd,EAKKC,QAAAN,EAASO,GAAU,CACnBA,GACOC,GACX,CACD,EAEDxB,EAAAA,UAAU,IAAM,CACLwB,GAAA,CACV,EAMD,SAASA,GAAiB,CACxBzB,EAAI,MAAM,UAAUJ,EAAM,SAAUA,EAAM,MAAM,EAChDI,EAAI,MAAM,SAASmB,EAAOvB,EAAM,MAAM,CACxC,CACF,CACF,CAAC,WArFCkC,EAAQC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,sHCYVM,GAAe1B,kBAAgB,CAC7B,KAAM,oBACN,MAAO,CACL,SAAU,CACR,KAAM,OACN,QAAS,2BACT,SAAU,EACZ,EACA,QAAS,CACP,KAAM,OACN,QAAS,0BACT,SAAU,EACZ,EACA,OAAQ,CACN,KAAM,OACN,SAAU,EACZ,EACA,MAAO,CACL,KAAM,OACN,QAAS,KAAO,CAAA,GAChB,SAAU,EACZ,EACA,OAAQ,CACN,KAAM,OACN,QAAS,GACT,SAAU,EACZ,CACF,EACA,MAAMpB,EAAO,CACP,IAAAI,EAAMX,EAAaK,CAAM,EACzBuB,EAAuBC,MAAI,EAAK,EAEpC,MAAMC,EAAQ,CACZ,GAAGvB,EAAM,MACT,GAAIA,EAAM,QACV,OAAQA,EAAM,QAAA,EAGZI,EAAA,MAAM,GAAG,aAAc,IAAM,CAE/B,MAAMsB,EAAe,IAAM,CACpBtB,EAAI,MAAM,gBAIbiB,EAAO,MAAQ,IAHfA,EAAO,MAAQ,GACf,WAAWK,EAAc,GAAG,EAG9B,EAEWA,GAAA,CACd,EAKKC,QAAAN,EAASO,GAAU,CACnBA,GACOC,GACX,CACD,EAEDxB,EAAAA,UAAU,IAAM,CACLwB,GAAA,CACV,EAMD,SAASA,GAAiB,CACxBzB,EAAI,MAAM,UAAUJ,EAAM,SAAUA,EAAM,MAAM,EAChDI,EAAI,MAAM,SAASmB,EAAOvB,EAAM,MAAM,CACxC,CACF,CACF,CAAC,WArFCkC,GAAQC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,yHCACO,EAAuC,CAClD,QACA,OACA,OACA,SACA,SACA,SACA,mBACA,uBACA,cACA,OACA,kBACA,oBACA,mBACA,aACA,YACA,gBACA,eACA,aACA,cACA,YACA,WACA,aACA,QACA,cACA,WACA,YACA,UACA,YACA,WACA,YACA,YACA,OACA,UACA,YACA,OACA,UACA,cACA,SACA,YACA,YACA,OACA,UACA,aACA,QACA,WACA,OACF,ECjDaC,EAAkB,CAAC,YAAa,OAAQ,SAAS,EACjDC,EAAkB,CAAC,QAAS,aAAc,YAAY,ECDtDC,EAAc,CAAC,OAAQ,OAAO,oICQzC,MAAMlD,EAAQC,EAURW,EAAOC,EAET,IAAAT,EAAgB+C,aAAW,CAAA,CAAS,EACpC9B,EAAuBC,MAAI,EAAK,EAChCP,EAAyCO,MAAIyB,CAAS,EAE1D1C,EAAAA,UAAU,IAAM,CACdD,EAAI,MAAQ,IAAIgD,EAAI,IAAApD,EAAM,OAAO,EACjCqB,EAAO,MAAQ,GACfgC,UAAQvD,EAAQM,CAAG,EACHkD,GAAA,CACjB,EAED,MAAMA,EAAkB,IAAM,CACrBvC,EAAA,MAAM,QAASwC,GAAM,CAC1BnD,EAAI,MAAM,GAAGmD,EAAIC,GAAQ,CACvB,OAAQD,EAAG,CACT,IAAK,OACE3C,EAAA,SAAUR,EAAI,KAAK,EACxB,MACF,QACEQ,EAAK2C,EAAGC,CAAG,EACX,KACJ,CAAA,CACD,CAAA,CACF,CAAA,oNCnCHC,GAAerC,kBAAgB,CAC7B,KAAM,SACN,MAAO,CACL,OAAQ,CACN,KAAM,OACN,QAAS,KAAO,CAAA,GAChB,SAAU,EACZ,EACA,QAAS,CACP,KAAM,OACN,QAAS,KAAO,CAAA,GAChB,SAAU,EACZ,EACA,YAAa,CACX,KAAM,OACN,QAAS,KAAO,CAAA,GAChB,SAAU,EACZ,CACF,EACA,MAAO,CAAC,QAAS,UAAW,GAAG8B,CAAW,EAC1C,MAAMlD,EAAO,CAAE,KAAAY,GAAQ,CACjB,IAAAR,EAAgBX,EAAaK,CAAM,EACnC4D,EAAe,IAAIC,EAAAA,MAAM3D,EAAM,OAAO,EACtCqB,EAAuBC,MAAI,EAAI,EAC7B,MAAAsC,EAAmCtC,MAAI,IAAI,EAE7ClB,EAAA,MAAM,GAAG,aAAc,IAAM,CAE/B,MAAMsB,EAAe,IAAM,CACpBtB,EAAI,MAAM,gBAIbiB,EAAO,MAAQ,IAHfA,EAAO,MAAQ,GACf,WAAWK,EAAc,GAAG,EAG9B,EAEWA,GAAA,CACd,EAEDrB,EAAAA,UAAU,IAAM,CACVgB,EAAO,OACOwC,IACIC,IACRC,IACMC,MAEXC,IACWC,IACpB,CACD,EAEDxB,EAAAA,gBAAgB,IAAM,CACbuB,IACWC,GAAA,CACnB,EAMD,SAASL,GAAwB,CACzBH,EAAA,cAAcE,EAAQ,KAAa,CAC3C,CAKA,SAASE,GAA4B,CAC7BJ,EAAA,UAAU1D,EAAM,WAAW,CACnC,CAOA,SAAS+D,GAAoB,CACvB/D,EAAM,OACFA,EAAA,OAAO,SAAS0D,CAAK,EAErBA,EAAA,MAAMtD,EAAI,KAAK,EAElBQ,EAAA,QAAS,CAAE,MAAA8C,CAAA,CAAO,CACzB,CAKA,SAASO,GAAe,CACtBP,EAAM,OAAO,EACb9C,EAAK,SAAS,CAChB,CAMA,SAASoD,GAA0B,CACrBd,EAAA,QAASlC,GAAkB,CAC/B0C,EAAA,GAAG1C,EAAO,IAAM,CACpBJ,EAAKI,CAAK,CAAA,CACX,CAAA,CACF,CACH,CAKA,SAASkD,GAA0B,CACrBhB,EAAA,QAASlC,GAAkB,CAC/B0C,EAAA,IAAI1C,EAAO,IAAM,CACrBJ,EAAKI,CAAK,CAAA,CACX,CAAA,CACF,CACH,CAEO,MAAA,CACL,QAAA4C,CAAA,CAEJ,CACF,CAAC,YAIW,SAAA1B,GAAeC,EAAIC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,QAAU2B,EAAS,UAAA,EAAAC,EAAA,mBAAA,UAAA,CAAA,GAAA,SAAA,KAAA,IAAA,CAAA,GAChD,IAAA,SAAA,EAAA,uEC5HFC,GAAejD,kBAAgB,CAC7B,KAAM,UACN,WAAY,CACV,OAAAkD,CACF,EACA,MAAO,CACL,YAAa,CACX,KAAM,CAAC,OAAQ,KAAK,EACpB,QAAS,KAAO,CAAA,GAChB,SAAU,EACZ,EACA,QAAS,CACP,KAAM,OACN,QAAS,KAAO,CAAA,GAChB,SAAU,EACZ,EACA,aAAc,CACZ,KAAM,OACN,QAAS,KAAO,CAAA,GAChB,SAAU,EACZ,EACA,OAAQ,CACN,KAAM,OACN,QAAS,UACT,SAAU,EACZ,CACF,EACA,MAAO,CACL,QACA,qBACA,UACA,GAAGtB,EACH,GAAGC,CACL,EACA,MAAMjD,EAAO,CAAE,KAAAY,GAAQ,CACjB,IAAAR,EAAMX,EAAaK,CAAM,EACzByE,EAAsBjD,MAAI,CAAA,CAAE,EAC5BD,EAAuBC,MAAI,EAAI,EAC/BkD,EAAoBlD,MAAI,EAAK,EAC7BmD,EAAmCnD,MAAI,IAAI,EAEzC,MAAAoD,EAAcC,GAAoB,CACtCF,EAAQ,MAAQE,CAAA,EAGZhD,QAAA4C,EAASA,GAAW,CACpB,SAAUA,EACZC,EAAkB,MAAQ,GAE1BA,EAAkB,MAAQ,EAC5B,CACD,EAEDnE,EAAAA,UAAU,IAAM,CACVgB,EAAO,MACLoD,EAAQ,QAAU,MAEbF,EAAA,MAAQ,IAAIK,SAAO,CACxB,QAASH,EAAQ,MACjB,GAAGzE,EAAM,OAAA,CACV,EACD6E,EAAqBN,EAAO,KAAK,EACjCO,EAASP,EAAO,KAAK,EACrBQ,EAAiBR,EAAO,KAAK,EAC7BS,EAAmBT,EAAO,KAAK,IAE/BA,EAAO,MAAQ,IAAIK,EAAO,OAAA5E,EAAM,OAAO,EACvC6E,EAAqBN,EAAO,KAAK,EACjCO,EAASP,EAAO,KAAK,EACrBQ,EAAiBR,EAAO,KAAK,EAC7BS,EAAmBT,EAAO,KAAK,GAGjCU,EAAcV,EAAO,KAAK,CAC5B,CACD,EAED7B,EAAAA,gBAAgB,IAAM,CACpBuC,EAAcV,EAAO,KAAK,CAAA,CAC3B,EAEGnE,EAAA,MAAM,GAAG,aAAc,IAAM,CAE/B,MAAMsB,EAAe,IAAM,CACpBtB,EAAI,MAAM,gBAIbiB,EAAO,MAAQ,IAHfA,EAAO,MAAQ,GACf,WAAWK,EAAc,GAAG,EAG9B,EAEWA,GAAA,CACd,EAOD,SAASmD,EAAqBN,EAAsB,CAClDA,EAAO,UAAUvE,EAAM,WAAW,CACpC,CAMA,SAAS+E,EAAiBR,EAAsB,CAC9CA,EAAO,WAAW,EAAE,MAAM,OAASvE,EAAM,QAAU,SACrD,CAOA,SAAS8E,EAASP,EAAsB,CACtCA,EAAO,MAAMnE,EAAI,KAAK,EACtBQ,EAAK,QAAS,CAAE,OAAA2D,CAAQ,CAAA,CAC1B,CAMA,SAASU,EAAcV,EAAsB,CACvCC,EAAkB,QACpBD,EAAO,OAAO,EACd3D,EAAK,SAAS,EAElB,CAOA,SAASoE,EAAmBT,EAAsB,CAC5C,IAAAW,EAEYlC,EAAA,QAAShC,GAAkB,CACzCuD,EAAO,GAAGvD,EAAQuC,GAA0B,CACtCvC,IAAU,YACRhB,EAAM,uBAAuB,MACjBkF,EAAA,CAAC3B,EAAE,OAAO,QAAQ,IAAKA,EAAE,OAAO,QAAQ,GAAG,EAEzD2B,EAAc3B,EAAE,OAAO,QAEzB3C,EAAK,qBAAsBsE,CAAW,GAExCtE,EAAKI,EAAOuC,CAAC,CAAA,CACd,CAAA,CACF,EAEeN,EAAA,QAASjC,GAAkB,CACzCuD,EAAO,WAAW,EAAE,iBAAiBvD,EAAQuC,GAAM,CACjD3C,EAAKI,EAAOuC,CAAC,CAAA,CACd,CAAA,CACF,CACH,CAEO,MAAA,CACL,kBAAAiB,EACA,OAAAD,EACA,WAAAG,CAAA,CAEJ,CACF,CAAC,6CAIDS,mBAWU,SAAA,SAXiChB,EAAW,UAAA,EAAAC,EAAA,mBAAA,UAAA,CAAA,GAAA,UAAA,KAAA,IAAA,CAAA,GACpD,MAAA,UAAA,EACgBI,CAAAA,EAAAA,WAAAA,EAAAA,OACd,UAMU,CAAA,OAAArC,EAAA,WAAA,EAAAA,EA7LhB,iCAwLuBiD,EAAAA,YAAAC,EAAA,CACd,IAAA,EACA,OAAaH,EAAAA,OAAAA,QAAAA,EAAAA,aA1LtB,YA4LQ/C,EAAA,WAAA,EAAA,wBA5LRmD,aAAAnD,EAAA,OAAA,SAAA,CAAA,CAAA,EAAA,EAAA,CAAA,EAAA,EAAA,CAAA,SAAA,UAAA,aAAA,CAAA,GAAAoD,EAAAA,mBAAA,GAAA,EAAA"}