{"version":3,"file":"index.cjs","sources":["../packages/vue-mapbox-gl/composables/useMap.ts","../packages/vue-mapbox-gl/composables/useEventsBinding.ts","../packages/vue-mapbox-gl/composables/usePropsBinding.ts","../packages/vue-mapbox-gl/composables/useControl.ts","../packages/vue-mapbox-gl/components/MapboxLayer.vue","../packages/vue-mapbox-gl/components/MapboxSource.vue","../packages/vue-mapbox-gl/components/MapboxCluster.vue","../packages/vue-mapbox-gl/components/MapboxGeocoder.vue","../packages/vue-mapbox-gl/components/MapboxMap.vue","../node_modules/@studiometa/js-toolkit/utils/debounce.js","../packages/vue-mapbox-gl/components/StoreLocator/VueScroller.vue","../packages/vue-mapbox-gl/components/StoreLocator/StoreLocator.vue","../packages/vue-mapbox-gl/components/MapboxGeolocateControl.vue","../packages/vue-mapbox-gl/components/MapboxImage.vue","../packages/vue-mapbox-gl/components/MapboxImages.vue","../packages/vue-mapbox-gl/components/MapboxPopup.vue","../packages/vue-mapbox-gl/components/MapboxMarker.vue","../packages/vue-mapbox-gl/components/MapboxNavigationControl.vue","../packages/vue-mapbox-gl/components/MapboxFullscreenControl.vue"],"sourcesContent":["import { inject } from 'vue';\nimport type { ShallowRef } from 'vue';\nimport type { Map } from 'mapbox-gl';\n\n/**\n * Inject the provided map instance.\n */\nexport function useMap(): { map: ShallowRef<Map | null> } {\n  const map = inject<ShallowRef<Map | null>>('mapbox-map', null);\n\n  return {\n    map,\n  };\n}\n","import { watch, computed, useAttrs, unref } from 'vue';\n\n/**\n * @typedef (import('vue').Ref) Ref\n */\n\nconst cache = new Map();\nconst regex = /onMb([A-Z])(.+)/;\n\n/**\n * Get a Mapbox event name from a Vue event name.\n * @param   {string} vueEventName\n * @returns {string}\n */\nfunction getOriginalEvent(vueEventName) {\n  if (!cache.has(vueEventName)) {\n    cache.set(\n      vueEventName,\n      vueEventName.replace(regex, (match, $1, $2) => $1.toLowerCase() + $2),\n    );\n  }\n\n  return cache.get(vueEventName);\n}\n\n/**\n * Map a mapbox element's events to a Vue component.\n * @param  {Function} emitFn        The emit function for the current component\n * @param  {Ref<any>} mapboxElement The Mapbox element bound to the component\n * @param  {string[]} [events]      The events to map\n * @param  {string}   [layerId]     The layer on which the events are delegated\n * @returns {void}\n */\nexport function useEventsBinding(emitFn, mapboxElement, events = [], layerId = null) {\n  const attrs = useAttrs();\n  const vueEventNames = computed(() =>\n    Object.entries(attrs)\n      .filter(([name, value]) => name.startsWith('on') && typeof value === 'function')\n      .map(([name]) => name),\n  );\n\n  const unbindFunctions = new Map();\n\n  /**\n   * Unbind events from the given Mapbox element.\n   * @param   {string[]} eventNames\n   * @returns {void}\n   */\n  function unbindEvents(eventNames) {\n    if (!Array.isArray(eventNames)) {\n      return;\n    }\n\n    eventNames.forEach((eventName) => {\n      const unbindFn = unbindFunctions.get(eventName);\n      if (typeof unbindFn === 'function') {\n        unbindFn();\n      }\n    });\n  }\n\n  /**\n   * Bind Vue events to the given Mapbox element.\n   * @param   {string[]} eventNames\n   * @returns {void}\n   */\n  function bindEvents(eventNames) {\n    if (!Array.isArray(eventNames)) {\n      return;\n    }\n\n    eventNames.forEach((eventName) => {\n      const originalEvent = getOriginalEvent(eventName);\n\n      if (!events.includes(originalEvent)) {\n        return;\n      }\n\n      const handler = (...payload) => {\n        emitFn(`mb-${originalEvent}`, ...payload);\n      };\n\n      // If layerId is not null, all events must be\n      // delegated from the map to the given layerId\n      if (layerId) {\n        unref(mapboxElement).on(originalEvent, layerId, handler);\n\n        unbindFunctions.set(eventName, () => {\n          unref(mapboxElement).off(originalEvent, layerId, handler);\n        });\n      } else {\n        unref(mapboxElement).on(originalEvent, handler);\n\n        unbindFunctions.set(eventName, () => {\n          unref(mapboxElement).off(originalEvent, handler);\n        });\n      }\n    });\n  }\n\n  watch(\n    vueEventNames,\n    (newVueEventNames, oldVueEventNames) => {\n      // Get old event names not in the new event names\n      const eventNamesToDelete = Array.isArray(newVueEventNames)\n        ? (oldVueEventNames ?? []).filter(\n            (oldVueEventName) => !newVueEventNames.includes(oldVueEventName),\n          )\n        : (oldVueEventNames ?? []);\n\n      // Get new event names not in the old event names\n      const eventNamesToAdd = Array.isArray(oldVueEventNames)\n        ? (newVueEventNames ?? []).filter(\n            (newVueEventName) => !oldVueEventNames.includes(newVueEventName),\n          )\n        : (newVueEventNames ?? []);\n\n      if (unref(mapboxElement)) {\n        unbindEvents(eventNamesToDelete);\n        bindEvents(eventNamesToAdd);\n      } else {\n        // We need to watch the mapbox element once as it can\n        // be null when reaching this part of the code.\n        const unwatch = watch(mapboxElement, (newValue) => {\n          if (newValue) {\n            unbindEvents(eventNamesToDelete);\n            bindEvents(eventNamesToAdd);\n            unwatch();\n          }\n        });\n      }\n    },\n    { immediate: true },\n  );\n}\n","import { watch, unref } from 'vue';\n\n/**\n * @typedef {import('vue').Ref} Ref\n */\n\n/**\n * Capitalize the first letter of a string\n * @param  {string} string The string to capitalize\n * @returns {string}        The capitalized string\n */\nfunction capitalizeFirstLetter(string) {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\n/**\n * Map a mapbox element's events to the given vue element\n * @template {any}    T\n * @param    {any}    props          The component props.\n * @param    {Ref<T>} mapboxElement  The Mapbox element bound to the component.\n * @param    {any}    propsConfig    The props original configuration.\n */\nexport function usePropsBinding(props, mapboxElement, propsConfig) {\n  /**\n   * Bind props to the given mapboxElement in order to update them when they change.\n   * @param   {T} element\n   * @returns {void}\n   */\n  function bindProps(element) {\n    Object.keys(props)\n      .filter((prop) => props[prop] !== undefined && props[prop] !== null)\n      .forEach((prop) => {\n        const setMethodName =\n          prop === 'mapStyle' ? 'setStyle' : `set${capitalizeFirstLetter(prop)}`;\n\n        const methodExists = typeof element[setMethodName] === 'function';\n        const propNeedsBinding =\n          typeof propsConfig[prop] === 'undefined' || 'bind' in propsConfig[prop]\n            ? (propsConfig[prop]?.bind ?? false)\n            : true;\n\n        // Do nothing if `setMethodName` is not a function of `mapBoxElement`\n        // or if the props is not to be bounded\n        if (!methodExists || !propNeedsBinding) {\n          return;\n        }\n\n        // Set deep option to true if prop type is or can be Object\n        const { type } = propsConfig[prop];\n        const options = {\n          deep: type === Object || (Array.isArray(type) && type.includes(Object)),\n        };\n\n        watch(\n          () => props[prop],\n          (newValue) => {\n            element[setMethodName](newValue);\n          },\n          options,\n        );\n      });\n  }\n\n  if (unref(mapboxElement)) {\n    bindProps(unref(mapboxElement));\n  } else {\n    const unwatch = watch(mapboxElement, (newValue) => {\n      if (newValue) {\n        bindProps(newValue);\n        unwatch();\n      }\n    });\n  }\n}\n","import mapboxgl from 'mapbox-gl';\nimport { onMounted, onUnmounted, ref, shallowReactive, unref, watch, nextTick } from 'vue';\nimport { useMap } from './useMap.js';\nimport { useEventsBinding } from './useEventsBinding.js';\nimport { usePropsBinding } from './usePropsBinding.js';\n\n/**\n * Use a Mapbox control.\n * @template {any} T\n * @param   {T}        ControlConstructor  A Mapbox control constructor function.\n * @param   {object}   options\n * @param   {any}      options.propsConfig Props configuration for the component.\n * @param   {an}       options.props       Resolved props of the component.\n * @param   {Function} options.emit        Emit function of the component.\n * @param   {string[]} options.events      List of events for the Mapbox control.\n * @returns {{ control: Ref<InstanceType<T>>, map: Ref<any> }}\n */\nexport function useControl(ControlConstructor, { propsConfig, props, emit, events = [] }) {\n  const { map } = useMap();\n  const control = ref();\n\n  if (Array.isArray(events) && events.length) {\n    useEventsBinding(emit, control, events);\n  }\n\n  if (typeof propsConfig !== 'undefined') {\n    usePropsBinding(props, control, propsConfig);\n  }\n\n  watch(\n    () => props.position,\n    (newValue) => {\n      if (unref(map)) {\n        unref(map).removeControl(unref(control)).addControl(unref(control), newValue);\n      }\n    },\n  );\n\n  onMounted(async () => {\n    const ctrl = new ControlConstructor(props);\n\n    if (unref(map)) {\n      unref(map).addControl(ctrl, props.position);\n    }\n\n    await nextTick();\n\n    // The GeolocateControl setup includes some async tasks, so we need to wait\n    // for its _setup property to become true to set it as the control ref value.\n\n    if (ControlConstructor === mapboxgl.GeolocateControl && !ctrl._setup) {\n      const tmpControl = shallowReactive(ctrl);\n      const unwatch = watch(tmpControl, (reactiveCtrl) => {\n        if (reactiveCtrl._setup) {\n          control.value = ctrl;\n          unwatch();\n        }\n      });\n    } else {\n      control.value = ctrl;\n    }\n  });\n\n  onUnmounted(() => {\n    if (unref(control) && unref(map) && unref(map).hasControl(unref(control))) {\n      unref(map).removeControl(unref(control));\n    }\n  });\n\n  return {\n    control,\n    map,\n  };\n}\n","<template>\n  <div :id=\"id\" />\n</template>\n\n<script lang=\"ts\">\n  const propsConfig = {\n    /**\n     * Id of the layer\n     * @see  https://docs.mapbox.com/mapbox-gl-js/api/#map#addlayer\n     * @type {string}\n     */\n    id: {\n      type: String,\n      required: true,\n    },\n    /**\n     * Options for the layer\n     * @see  https://docs.mapbox.com/mapbox-gl-js/api/#map#addlayer\n     * @see  https://docs.mapbox.com/mapbox-gl-js/style-spec/#layers\n     * @type {object}\n     */\n    options: {\n      type: Object,\n      default: () => ({}),\n    },\n    /**\n     * The ID of an existing layer to insert the new layer before.\n     * @see  https://docs.mapbox.com/mapbox-gl-js/api/#map#addlayer\n     * @type {string}\n     */\n    beforeId: {\n      type: String,\n      default: undefined,\n    },\n  };\n\n  /**\n   * All Map events which will be mapped/bounded to the component\n   * @see  https://docs.mapbox.com/mapbox-gl-js/api/#map#on\n   * @type {Array}\n   */\n  const events = [\n    'mousedown',\n    'mouseup',\n    'click',\n    'dblclick',\n    'mousemove',\n    'mouseenter',\n    'mouseleave',\n    'mouseover',\n    'mouseout',\n    'contextmenu',\n    'touchstart',\n    'touchend',\n    'touchcancel',\n  ];\n</script>\n\n<script lang=\"ts\" setup>\n  import { onMounted, onUnmounted, computed, unref } from 'vue';\n  import { useEventsBinding, useMap } from '../composables/index.js';\n\n  const props = defineProps(propsConfig);\n  const emit = defineEmits();\n\n  const { map } = useMap();\n  const options = computed(() => {\n    const opts = { ...props.options, id: props.id };\n\n    if (opts.paint === null || opts.paint === undefined) {\n      delete opts.paint;\n    }\n\n    if (opts.layout === null || opts.layout === undefined) {\n      delete opts.layout;\n    }\n\n    return opts;\n  });\n\n  useEventsBinding(emit, map, events, props.id);\n\n  /**\n   * Remove the layer.\n   */\n  function removeLayer() {\n    if (typeof unref(map).getLayer(props.id) !== 'undefined') {\n      unref(map).removeLayer(props.id);\n    }\n  }\n\n  /**\n   * Remove the source.\n   */\n  function removeSource() {\n    if (typeof unref(map).getSource(props.id) !== 'undefined') {\n      unref(map).removeSource(props.id);\n    }\n  }\n\n  onMounted(() => {\n    removeLayer();\n    removeSource();\n    unref(map).addLayer(unref(options), props.beforeId);\n  });\n\n  onUnmounted(() => {\n    removeLayer();\n    removeSource();\n  });\n</script>\n","<script lang=\"ts\">\n  import type { GeoJSONSource, GeoJSONSourceSpecification } from 'mapbox-gl';\n</script>\n\n<script lang=\"ts\" setup>\n  import { unref, watch, onMounted, onUnmounted } from 'vue';\n  import { useMap } from '../composables/index.js';\n\n  const props = defineProps<{\n    options?: GeoJSONSourceSpecification;\n    id: string;\n  }>();\n\n  const { map } = useMap();\n\n  watch(\n    () => props.options.data,\n    (newValue) => {\n      unref(map).getSource<GeoJSONSource>(props.id).setData(newValue);\n    },\n  );\n\n  onMounted(() => {\n    unref(map).addSource(props.id, props.options);\n  });\n\n  onUnmounted(() => {\n    // Remove all layers tied to the source\n    const { _layers: layers } = unref(map).style;\n\n    Object.values(layers).forEach((value) => {\n      if (value.source === props.id) {\n        unref(map).removeLayer(value.id);\n      }\n    });\n\n    // And remove the source\n    unref(map).removeSource(props.id);\n  });\n</script>\n\n<template>\n  <div :id=\"id\" />\n</template>\n","<script lang=\"ts\">\n  import type { GeoJSONSource } from 'mapbox-gl';\n\n  const propsConfig = {\n    /**\n     * The source of the data for the clustered points,\n     * must be a String or an Object of GeoJSON format.\n     * @type {string | GeoJSON}\n     */\n    data: {\n      type: [String, Object],\n      required: true,\n    },\n    /**\n     * The max zoom to cluster points on\n     * @type {number}\n     */\n    clusterMaxZoom: {\n      type: Number,\n      default: 14,\n    },\n    /**\n     * Radius of each cluster when clustering point\n     * @type {number}\n     */\n    clusterRadius: {\n      type: Number,\n      default: 50,\n    },\n    /**\n     * Minimum number of points necessary to form a cluster.\n     * @type {number}\n     */\n    clusterMinPoints: {\n      type: Number,\n      default: 2,\n    },\n    /**\n     * An object defining custom properties on the generated clusters.\n     * @see  https://docs.mapbox.com/style-spec/reference/sources/#geojson-clusterProperties\n     * @see  https://docs.mapbox.com/mapbox-gl-js/example/cluster-html/\n     * @type {object}\n     */\n    clusterProperties: {\n      type: Object,\n      default: () => ({}),\n    },\n    /**\n     * The layout configuration for the clusters circles\n     * @see  https://docs.mapbox.com/mapbox-gl-js/example/cluster/\n     * @type {object}\n     */\n    clustersLayout: {\n      type: Object,\n      default: () => ({}),\n    },\n    /**\n     * The paint configuration for the clusters circles\n     * @see  https://docs.mapbox.com/mapbox-gl-js/example/cluster/\n     * @type {object}\n     */\n    clustersPaint: {\n      type: Object,\n      default: () => ({\n        'circle-color': '#000',\n        'circle-radius': 40,\n      }),\n    },\n    /**\n     * The layout configuration for the clusters count\n     * @see  https://docs.mapbox.com/mapbox-gl-js/example/cluster/\n     * @type {object}\n     */\n    clusterCountLayout: {\n      type: Object,\n      default: () => ({\n        'text-field': ['get', 'point_count_abbreviated'],\n      }),\n    },\n    /**\n     * The paint configuration for the clusters count\n     * @see  https://docs.mapbox.com/mapbox-gl-js/example/cluster/\n     * @type {object}\n     */\n    clusterCountPaint: {\n      type: Object,\n      default: () => ({\n        'text-color': 'white',\n      }),\n    },\n    /**\n     * The type of the unclustered points layer\n     * @see  https://docs.mapbox.com/mapbox-gl-js/example/cluster/\n     * @type {string}\n     */\n    unclusteredPointLayerType: {\n      type: String,\n      default: 'circle',\n    },\n    /**\n     * The layout configuration for the unclustered points\n     * @see  https://docs.mapbox.com/mapbox-gl-js/example/cluster/\n     * @type {object}\n     */\n    unclusteredPointLayout: {\n      type: Object,\n      default: () => ({}),\n    },\n    /**\n     * The paint configuration for the unclustered points\n     * @see  https://docs.mapbox.com/mapbox-gl-js/example/cluster/\n     * @type {object}\n     */\n    unclusteredPointPaint: {\n      type: Object,\n      default: () => ({\n        'circle-color': '#000',\n        'circle-radius': 4,\n      }),\n    },\n  };\n\n  let index = 0;\n</script>\n\n<script lang=\"ts\" setup>\n  import { ref, unref, computed } from 'vue';\n  import { useMap } from '../composables/index.js';\n  import MapboxLayer from './MapboxLayer.vue';\n  import MapboxSource from './MapboxSource.vue';\n\n  const props = defineProps(propsConfig);\n  const emit = defineEmits();\n\n  const { map } = useMap();\n  const id = ref(`mb-cluster-${index}`);\n  index += 1;\n\n  const getId = (suffix: string) => `${unref(id)}-${suffix}`;\n\n  const sourceId = computed(() => getId('source'));\n  const source = computed(() => {\n    const { data, clusterMaxZoom, clusterRadius, clusterMinPoints, clusterProperties } = props;\n    return {\n      type: 'geojson',\n      cluster: true,\n      data,\n      clusterMaxZoom,\n      clusterRadius,\n      clusterMinPoints,\n      clusterProperties,\n    };\n  });\n\n  const clustersLayer = computed(() => ({\n    id: getId('clusters'),\n    type: 'circle',\n    source: unref(sourceId),\n    filter: ['has', 'point_count'],\n    layout: props.clustersLayout,\n    paint: props.clustersPaint,\n  }));\n\n  const clusterCountLayer = computed(() => ({\n    id: getId('cluster-count'),\n    type: 'symbol',\n    source: unref(sourceId),\n    filter: ['has', 'point_count'],\n    layout: props.clusterCountLayout,\n    paint: props.clusterCountPaint,\n  }));\n\n  /**\n   * The unclustered points layer\n   * @type {object}\n   */\n  const unclusteredPointLayer = computed(() => ({\n    id: getId('unclustered-point'),\n    type: props.unclusteredPointLayerType,\n    source: unref(sourceId),\n    filter: ['!', ['has', 'point_count']],\n    layout: props.unclusteredPointLayout,\n    paint: props.unclusteredPointPaint,\n  }));\n\n  /**\n   * Click handler for the clusters layer to zoom on the clicked cluster\n   * @param  {object} event The Mapbox click event's object\n   * @returns {void}\n   */\n  function clustersClickHandler(event) {\n    const feature = unref(map).queryRenderedFeatures(event.point, {\n      layers: [unref(clustersLayer).id],\n    })[0];\n    const { cluster_id: clusterId } = feature.properties;\n\n    // Emit a cluster click event\n    emit('mb-cluster-click', clusterId, event);\n\n    // Return before move map if event is defaultPrevented\n    if (event.defaultPrevented) {\n      return;\n    }\n\n    unref(map)\n      .getSource<GeoJSONSource>(unref(sourceId))\n      .getClusterExpansionZoom(clusterId, (err, zoom) => {\n        if (err) {\n          return;\n        }\n\n        unref(map).easeTo({\n          center: feature.geometry.coordinates,\n          zoom,\n        });\n      });\n  }\n  /**\n   * Mouseenter handler for the clusters layer to set a pointer cursor\n   * @returns {void}\n   */\n  function clustersMouseenterHandler() {\n    unref(map).getCanvas().style.cursor = 'pointer';\n  }\n  /**\n   * Mouseleave handler for the clusters layer to unset the pointer cursor\n   * @returns {void}\n   */\n  function clustersMouseleaveHandler() {\n    unref(map).getCanvas().style.cursor = '';\n  }\n\n  /**\n   * Handler for the click event on a single feature, emits an event with\n   * the feature object and the original event object\n   * @param  {object} event The Mapbox click event's object\n   * @returns {void}\n   */\n  function unclusteredPointClickHandler(event) {\n    const [feature] = event.features;\n    emit('mb-feature-click', feature, event);\n  }\n\n  /**\n   * Handler for the mouseenter event on a single feature.\n   * Emits an event with the feature object and the original event as\n   * parameters, and sets the cursor style to pointer.\n   * @param  {object} event The Mapbox mouseenter event's object\n   * @returns {void}\n   */\n  function unclusteredPointMouseenterHandler(event) {\n    const [feature] = event.features;\n    emit('mb-feature-mouseenter', feature, event);\n    unref(map).getCanvas().style.cursor = 'pointer';\n  }\n\n  /**\n   * Handler for the mouseleave event on a single feature.\n   * Emits an event with the original event object as parameter, and resets\n   * the cursor style to its default value.\n   * @param  {object} event The Mapbox mouselvea event‘s object\n   * @returns {void}\n   */\n  function unclusteredPointMouseleaveHandler(event) {\n    emit('mb-feature-mouseleave', event);\n    unref(map).getCanvas().style.cursor = '';\n  }\n</script>\n\n<template>\n  <div :id=\"id\">\n    <MapboxSource :id=\"sourceId\" :options=\"source\" />\n    <MapboxLayer\n      :id=\"clustersLayer.id\"\n      :options=\"clustersLayer\"\n      @mb-click=\"clustersClickHandler\"\n      @mb-mouseenter=\"clustersMouseenterHandler\"\n      @mb-mouseleave=\"clustersMouseleaveHandler\" />\n    <MapboxLayer :id=\"clusterCountLayer.id\" :options=\"clusterCountLayer\" />\n    <MapboxLayer\n      :id=\"unclusteredPointLayer.id\"\n      :options=\"unclusteredPointLayer\"\n      @mb-click=\"unclusteredPointClickHandler\"\n      @mb-mouseenter=\"unclusteredPointMouseenterHandler\"\n      @mb-mouseleave=\"unclusteredPointMouseleaveHandler\" />\n  </div>\n</template>\n","<template>\n  <div ref=\"root\" />\n</template>\n\n<script lang=\"ts\">\n  import mapboxgl from 'mapbox-gl';\n  import MapboxGeocoder from '@mapbox/mapbox-gl-geocoder';\n\n  if (!mapboxgl) {\n    throw new Error('mapboxgl is not installed.');\n  }\n\n  if (!MapboxGeocoder) {\n    throw new Error('MapboxGeocoder is not installed.');\n  }\n\n  /**\n   * Component's props definition, we need to declare it outside the component\n   * to be able to test the default values and the types.\n   * @see https://github.com/mapbox/mapbox-gl-geocoder/blob/master/API.md#parameters\n   * @type {object}\n   */\n  const propsConfig = {\n    accessToken: {\n      type: String,\n      default: 'no-token',\n    },\n    zoom: {\n      type: Number,\n      default: 16,\n    },\n    flyTo: {\n      type: [Boolean, Object],\n      default: true,\n    },\n    placeholder: {\n      type: String,\n      default: 'Search',\n    },\n    proximity: {\n      type: [Object, Array, String],\n      default: 'ip',\n    },\n    trackProximity: {\n      type: Boolean,\n      default: true,\n    },\n    collapsed: {\n      type: Boolean,\n      default: false,\n    },\n    clearAndBlurOnEsc: {\n      type: Boolean,\n      default: false,\n    },\n    clearOnBlur: {\n      type: Boolean,\n      default: false,\n    },\n    bbox: {\n      type: Array,\n      default: () => [],\n    },\n    countries: {\n      type: String,\n      default: '',\n    },\n    types: {\n      type: String,\n      default: 'place',\n    },\n    minLength: {\n      type: Number,\n      default: 2,\n    },\n    limit: {\n      type: Number,\n      default: 5,\n    },\n    language: {\n      type: String,\n      default: undefined,\n    },\n    filter: {\n      type: Function,\n      default: undefined,\n    },\n    localGeocoder: {\n      type: Function,\n      default: undefined,\n    },\n    reverseMode: {\n      type: String,\n      default: 'distance',\n    },\n    reverseGeocode: {\n      type: Boolean,\n      default: false,\n    },\n    enableEventLogging: {\n      type: Boolean,\n      default: false,\n    },\n    marker: {\n      type: Boolean,\n      default: true,\n    },\n    render: {\n      type: Function,\n      default: undefined,\n    },\n    getItemValue: {\n      type: Function,\n      default: (item) => item.place_name,\n    },\n    mode: {\n      type: String,\n      default: 'mapbox.places',\n    },\n    localGeocoderOnly: {\n      type: Boolean,\n      default: false,\n    },\n  };\n\n  /**\n   * All Map events which will be mapped/bounded to the component\n   * @see  https://github.com/mapbox/mapbox-gl-geocoder/blob/master/API.md#on\n   * @type {Array}\n   */\n  const events = ['clear', 'loading', 'results', 'result', 'error'];\n</script>\n\n<script lang=\"ts\" setup>\n  import { onMounted, ref, unref, computed, watch } from 'vue';\n  import { useControl } from '../composables/index.js';\n\n  const props = defineProps(propsConfig);\n  const emit = defineEmits();\n\n  const root = ref();\n  const options = computed(() => {\n    const opts = {\n      mapboxgl,\n      ...props,\n      accessToken: mapboxgl.accessToken ?? props.accessToken,\n    };\n\n    // Delete the `reverseMode` property if we are not reverse geocoding as it is not supported by\n    // the Mapbox SDK.\n    //\n    // The `reverseMode` option can not be supported yet as it is conditionned by the search\n    // query format following a specific regex:\n    //\n    // ```js\n    //  /(-?\\d+\\.?\\d*)[, ]+(-?\\d+\\.?\\d*)[ ]*$/.test(searchInput)\n    // ```\n    //\n    // @todo use the same regex as the mapbox-gl-geocoder lib or open an issue\n    //\n    // @see https://github.com/mapbox/mapbox-sdk-js/blob/main/services/geocoding.js (92-104)\n    // @see https://github.com/mapbox/mapbox-sdk-js/blob/main/services/geocoding.js (161-172)\n    // @see https://github.com/mapbox/mapbox-gl-geocoder/blob/master/lib/index.js (437-458)\n    if (!opts.reverseGeocode || true) {\n      delete opts.reverseMode;\n    }\n\n    return opts;\n  });\n\n  const { control, map } = useControl(MapboxGeocoder, {\n    propsConfig,\n    props: unref(options),\n    emit,\n    events,\n  });\n\n  // Add to root element if map does not exist.\n  onMounted(() => {\n    const stop = watch(control, (newValue) => {\n      if (newValue && !unref(map) && unref(root)) {\n        newValue.addTo(unref(root));\n        stop();\n      }\n    });\n  });\n\n  defineExpose({ control });\n</script>\n","<template>\n  <div ref=\"root\" v-bind=\"$attrs\" />\n  <div v-if=\"isLoaded\">\n    <slot />\n  </div>\n  <div v-else>\n    <slot name=\"loader\" />\n  </div>\n</template>\n\n<script lang=\"ts\">\n  import mapboxgl from 'mapbox-gl';\n  import type { Map } from 'mapbox-gl';\n\n  if (!mapboxgl) {\n    throw new Error('mapboxgl is not installed.');\n  }\n\n  const { LngLatBounds, LngLat } = mapboxgl;\n\n  /**\n   * Component's props definition, we need to declare it outside the component\n   * to be able to test the default values and the types.\n   * @see  https://docs.mapbox.com/mapbox-gl-js/api/#map\n   * @type {object}\n   */\n  const propsConfig = {\n    accessToken: {\n      type: String,\n      default: 'no-token',\n    },\n    container: {\n      type: [typeof HTMLElement !== 'undefined' && HTMLElement, String],\n      default: undefined,\n    },\n    minZoom: {\n      type: Number,\n      default: 0,\n    },\n    maxZoom: {\n      type: Number,\n      default: 22,\n    },\n    minPitch: {\n      type: Number,\n      default: 0,\n    },\n    maxPitch: {\n      type: Number,\n      default: 60,\n    },\n    mapStyle: {\n      type: [Object, String],\n      required: true,\n    },\n    hash: {\n      type: Boolean,\n      default: false,\n    },\n    interactive: {\n      type: Boolean,\n      default: true,\n    },\n    bearingSnap: {\n      type: Number,\n      default: 7,\n    },\n    pitchWithRotate: {\n      type: Boolean,\n      default: true,\n    },\n    clickTolerance: {\n      type: Number,\n      default: 3,\n    },\n    attributionControl: {\n      type: Boolean,\n      default: true,\n    },\n    customAttribution: {\n      type: [String, Array],\n      default: null,\n    },\n    logoPosition: {\n      type: String,\n      default: 'bottom-left',\n    },\n    failIfMajorPerformanceCaveat: {\n      type: Boolean,\n      default: false,\n    },\n    preserveDrawingBuffer: {\n      type: Boolean,\n      default: false,\n    },\n    antialias: {\n      type: Boolean,\n      default: false,\n    },\n    refreshExpiredTiles: {\n      type: Boolean,\n      default: true,\n    },\n    maxBounds: {\n      type: [LngLatBounds, Array],\n      default: undefined,\n    },\n    scrollZoom: {\n      type: [Boolean, Object],\n      default: true,\n    },\n    boxZoom: {\n      type: Boolean,\n      default: true,\n    },\n    dragRotate: {\n      type: Boolean,\n      default: true,\n    },\n    dragPan: {\n      type: [Boolean, Object],\n      default: true,\n    },\n    keyboard: {\n      type: Boolean,\n      default: true,\n    },\n    doubleClickZoom: {\n      type: Boolean,\n      default: true,\n    },\n    touchZoomRotate: {\n      type: [Boolean, Object],\n      default: true,\n    },\n    trackResize: {\n      type: Boolean,\n      default: true,\n    },\n    center: {\n      type: [LngLat, Array, Object],\n      default: () => [0, 0],\n    },\n    zoom: {\n      type: Number,\n      default: 0,\n    },\n    bearing: {\n      type: Number,\n      default: 0,\n    },\n    pitch: {\n      type: Number,\n      default: 0,\n    },\n    bounds: {\n      type: [LngLatBounds, Array],\n      default: undefined,\n    },\n    fitBoundsOptions: {\n      type: Object,\n      default: null,\n    },\n    renderWorldCopies: {\n      type: Boolean,\n      default: true,\n    },\n    maxTileCacheSize: {\n      type: Number,\n      default: null,\n    },\n    localIdeographFontFamily: {\n      type: String,\n      default: 'sans-serif',\n    },\n    transformRequest: {\n      type: Function,\n      default: null,\n    },\n    collectResourceTiming: {\n      type: Boolean,\n      default: false,\n    },\n    fadeDuration: {\n      type: Number,\n      default: 300,\n    },\n    crossSourceCollisions: {\n      type: Boolean,\n      default: true,\n    },\n    cooperativeGestures: {\n      type: Boolean,\n    },\n    language: {\n      type: [String, Array],\n      default: null,\n    },\n    locale: {\n      type: Object,\n      default: null,\n    },\n    localFontFamily: {\n      type: [Boolean, String],\n      default: false,\n    },\n    minTileCacheSize: {\n      type: Number,\n      default: null,\n    },\n    optimizeForTerrain: {\n      type: Boolean,\n      default: true,\n    },\n    performanceMetricsCollection: {\n      type: Boolean,\n      default: true,\n    },\n    projection: {\n      type: [String, Object],\n      default: 'mercator',\n    },\n    testMode: {\n      type: Boolean,\n      default: false,\n    },\n    touchPitch: {\n      type: [Boolean, Object],\n      default: true,\n    },\n    useWebGL2: {\n      type: Boolean,\n      default: false,\n    },\n    worldview: {\n      type: String,\n      default: null,\n    },\n  };\n\n  /**\n   * All Map events which will be mapped/bounded to the component\n   * @see  https://docs.mapbox.com/mapbox-gl-js/api/#map.event:resize\n   * @type {Array}\n   */\n  const events = [\n    'boxzoomcancel',\n    'boxzoomend',\n    'boxzoomstart',\n    'click',\n    'contextmenu',\n    'data',\n    'dataloading',\n    'dblclick',\n    'drag',\n    'dragend',\n    'dragstart',\n    'error',\n    'idle',\n    'load',\n    'mousedown',\n    'mouseenter',\n    'mouseleave',\n    'mousemove',\n    'mouseout',\n    'mouseover',\n    'mouseup',\n    'move',\n    'moveend',\n    'movestart',\n    'pitch',\n    'pitchend',\n    'pitchstart',\n    'remove',\n    'render',\n    'resize',\n    'rotate',\n    'rotateend',\n    'rotatestart',\n    'sourcedata',\n    'sourcedataloading',\n    'styledata',\n    'styledataloading',\n    'styleimagemissing',\n    'touchcancel',\n    'touchend',\n    'touchmove',\n    'touchstart',\n    'webglcontextlost',\n    'webglcontextrestored',\n    'wheel',\n    'zoom',\n    'zoomend',\n    'zoomstart',\n  ];\n\n  export default {\n    inheritAttrs: false,\n  };\n</script>\n\n<script lang=\"ts\" setup>\n  import { ref, shallowRef, computed, onMounted, onUnmounted, provide } from 'vue';\n  import { useEventsBinding, usePropsBinding } from '../composables/index.js';\n\n  const props = defineProps(propsConfig);\n  const emit = defineEmits();\n\n  const map = shallowRef<Map>(null);\n  provide('mapbox-map', map);\n\n  const root = ref();\n  const isLoaded = ref(false);\n  const options = computed(() => {\n    const { accessToken, mapStyle: style, ...options } = props;\n\n    // Use current component's element if container is not set\n    if (!options.container && root.value) {\n      options.container = root.value;\n    }\n\n    return { style, ...options };\n  });\n\n  useEventsBinding(emit, map, events);\n  usePropsBinding(props, map, propsConfig);\n\n  onMounted(() => {\n    mapboxgl.accessToken = props.accessToken;\n\n    map.value = new mapboxgl.Map(options.value);\n    map.value.on('load', () => {\n      isLoaded.value = true;\n    });\n\n    emit('mb-created', map.value);\n\n    // Mapbox has some resize issues\n    // Create an observer on this object\n    // Call resize on the map when we change szie\n    const resizeObserver = new ResizeObserver(() => {\n      map.value.resize();\n    });\n    resizeObserver.observe(options.value.container);\n\n    onUnmounted(() => {\n      resizeObserver.disconnect();\n      map.value.remove();\n    });\n  });\n\n  defineExpose({ map });\n</script>\n","function debounce(fn, delay = 300) {\n  let timeout;\n  return function debounced(...args) {\n    clearTimeout(timeout);\n    timeout = setTimeout(() => {\n      fn(...args);\n    }, delay);\n  };\n}\nexport {\n  debounce\n};\n//# sourceMappingURL=debounce.js.map\n","<script lang=\"ts\" setup>\n  import { ref, unref, onUpdated, onMounted, onBeforeUnmount, nextTick } from 'vue';\n  import { debounce } from '@studiometa/js-toolkit/utils';\n\n  const emit = defineEmits(['scroll-top', 'scroll-bottom']);\n\n  const scroller = ref();\n  const scrollTop = ref(0);\n  const scrollMax = ref(Number.POSITIVE_INFINITY);\n\n  /**\n   * Set variable values and emit events.\n   */\n  function setVars() {\n    if (!unref(scroller)) {\n      return;\n    }\n\n    const unrefScroller = unref(scroller);\n    scrollTop.value = unrefScroller.scrollTop;\n    scrollMax.value = unrefScroller.scrollHeight - unrefScroller.clientHeight;\n\n    if (scrollTop.value === 0) {\n      emit('scroll-top');\n    }\n\n    if (scrollTop.value === scrollMax.value) {\n      emit('scroll-bottom');\n    }\n  }\n\n  const debouncedSetVars = debounce(setVars);\n\n  onUpdated(() => {\n    setVars();\n  });\n\n  onMounted(async () => {\n    unref(scroller).addEventListener('scroll', setVars, { passive: true });\n    window.addEventListener('resized', debouncedSetVars);\n    await nextTick();\n    setVars();\n  });\n\n  onBeforeUnmount(() => {\n    unref(scroller).removeEventListener('scroll', setVars);\n    window.removeEventListener('resized', debouncedSetVars);\n  });\n</script>\n\n<template>\n  <div\n    class=\"scroller\"\n    :class=\"{\n      'scroller--is-top': scrollTop === 0,\n      'scroller--is-bottom': scrollTop === scrollMax,\n      'scroller--has-no-scroll': scrollTop === 0 && scrollMax === 0,\n    }\">\n    <div ref=\"scroller\" class=\"scroller__inner\">\n      <div class=\"scroller__content\">\n        <!-- @slot Use this slot to display the scroller content. -->\n        <slot />\n      </div>\n    </div>\n  </div>\n</template>\n\n<style>\n  .scroller,\n  .scroller__inner {\n    width: 100%;\n    height: 100%;\n  }\n\n  .scroller {\n    position: relative;\n    overflow: hidden;\n  }\n\n  /* Pseudo element */\n  .scroller::after,\n  .scroller::before {\n    content: '';\n    z-index: 1;\n    position: absolute;\n    left: 0;\n    width: 100%;\n    height: 5em;\n    pointer-events: none;\n    border-radius: 30%;\n    box-shadow:\n      0 0 1em rgba(0, 0, 0, 0.25),\n      0 0 2em rgba(0, 0, 0, 0.05);\n    transition: opacity 1s cubic-bezier(0.19, 1, 0.22, 1);\n  }\n\n  .scroller::before {\n    bottom: 100%;\n  }\n\n  .scroller::after {\n    top: 100%;\n  }\n\n  .scroller--is-top::before,\n  .scroller--has-no-scroll::before {\n    opacity: 0;\n  }\n\n  .scroller--is-bottom::after,\n  .scroller--has-no-scroll::after {\n    opacity: 0;\n  }\n\n  .scroller__inner {\n    overflow-x: hidden;\n    overflow-y: auto;\n  }\n</style>\n","<script lang=\"ts\">\n  export type StoreLocatorItem = {\n    lat: number;\n    lng: number;\n    id: string;\n  } & Record<string, unknown>;\n</script>\n\n<script lang=\"ts\" setup>\n  import { ref, unref, computed, nextTick } from 'vue';\n  import MapboxCluster from '../MapboxCluster.vue';\n  import MapboxGeocoder from '../MapboxGeocoder.vue';\n  import MapboxMap from '../MapboxMap.vue';\n  import VueScroller from './VueScroller.vue';\n\n  const props = defineProps({\n    /**\n     * A list of items to display.\n     * The only required properties are `lat` and `lng` and `id`.\n     * @type {Array<{ lat: number, lng: number, id: string } & Record<string, unknown>>}\n     */\n    items: {\n      type: Array,\n      required: true,\n    },\n\n    /**\n     * The zoom level to use when zooming in on an item.\n     * @type {number}\n     */\n    itemZoomLevel: {\n      type: Number,\n      default: 14,\n    },\n    /**\n     * A Mapbox access token.\n     * @type {object}\n     */\n    accessToken: {\n      type: String,\n      default: 'no-token',\n    },\n    /**\n     * Props for the MapboxMap component.\n     * @see  https://vue-mapbox-gl.meta.fr/components/MapboxMap.html#props\n     * @type {object}\n     */\n    mapboxMap: {\n      type: Object,\n      default: () => ({}),\n    },\n    /**\n     * Props fof the MapboxCluster component.\n     * @see  https://vue-mapbox-gl.meta.fr/components/MapboxCluster.html#props\n     * @type {object}\n     */\n    mapboxCluster: {\n      type: Object,\n      default: () => ({}),\n    },\n    /**\n     * Props for the MapboxGeocoder component.\n     * @see  https://vue-mapbox-gl.meta.fr/components/MapboxGeocoder.html#props\n     * @type {object}\n     */\n    mapboxGeocoder: {\n      type: Object,\n      default: () => ({}),\n    },\n\n    /**\n     * Configuration for each transition component.\n     * @type {object}\n     */\n    transitions: {\n      type: Object,\n      default: () => ({\n        loader: {\n          map: {},\n          search: {},\n          list: {},\n          default: {},\n        },\n        panel: {},\n      }),\n    },\n\n    /**\n     * Define custom classes for each element of the component.\n     * @type {object}\n     */\n    classes: {\n      type: Object,\n      default: () => {\n        const root = 'store-locator';\n        const bem = (name, modifier = '') => `${root}__${name}${modifier ? `--${modifier}` : ''}`;\n        return {\n          root,\n          region: {\n            map: [bem('region'), bem('region', 'map')],\n            search: [bem('region'), bem('region', 'search')],\n            list: [bem('region'), bem('region', 'list')],\n            panel: [bem('region'), bem('region', 'panel')],\n          },\n          map: bem('map'),\n          search: bem('search'),\n          list: bem('list'),\n          listItem: bem('list-item'),\n          panel: bem('panel'),\n        };\n      },\n    },\n\n    /**\n     * Filter items callback function\n     * @type {Function}\n     */\n    filterItemsCallback: {\n      type: [Function, Boolean],\n      default: false,\n    },\n\n    /**\n     * Disable the zoom when clicking on a Feature.\n     */\n    disableFeatureClickZoom: Boolean,\n  });\n  const emit = defineEmits([\n    'geocoder-created',\n    'map-created',\n    'map-load',\n    'select-item',\n    'cluster-feature-click',\n    'select-item',\n    'cluster-feature-mouseenter',\n    'cluster-feature-mouseleave',\n    'cluster-cluster-click',\n  ]);\n\n  const map = ref();\n  const isLoading = ref(true);\n  const mapIsMoving = ref(false);\n  const selectedItem = ref<null | StoreLocatorItem>(null);\n  const filteredItems = ref<StoreLocatorItem[]>(\n    (props.items as StoreLocatorItem[]).map((item) => item),\n  );\n  const listIsLoading = ref(false);\n\n  /**\n   * Transform an item into a valid GeoJSON feature.\n   * @param  {object} item\n   * @param  {number} item.lat\n   * @param  {number} item.lng\n   * @returns {Feature}\n   */\n  function itemToGeoJsonFeature({ lat, lng, ...properties }) {\n    return {\n      type: 'Feature',\n      geometry: {\n        type: 'Point',\n        coordinates: [lng, lat],\n      },\n      properties,\n    };\n  }\n\n  const geoJson = computed(() => ({\n    type: 'FeatureCollection',\n    features: props.items.map(itemToGeoJsonFeature),\n  }));\n  const filteredGeoJson = computed(() => ({\n    type: 'FeatureCollection',\n    features: unref(filteredItems).map(itemToGeoJsonFeature),\n  }));\n\n  /**\n   * Filter the features in view.\n   */\n  async function filterFeaturesInView() {\n    listIsLoading.value = true;\n    const mapBounds = unref(map).getBounds();\n    const center = unref(map).getCenter();\n\n    filteredItems.value = (props.items as StoreLocatorItem[])\n      .filter(({ lng, lat }) => mapBounds.contains([lng, lat]))\n      .sort((a, b) => {\n        const distanceFromA = center.distanceTo(a);\n        const distanceFromB = center.distanceTo(b);\n\n        if (distanceFromA < distanceFromB) {\n          return -1;\n        }\n\n        if (distanceFromA > distanceFromB) {\n          return 1;\n        }\n\n        return 0;\n      });\n\n    if (props.filterItemsCallback && typeof props.filterItemsCallback === 'function') {\n      filteredItems.value = await props.filterItemsCallback(filteredItems.value, map.value);\n    }\n\n    await nextTick();\n    listIsLoading.value = false;\n  }\n\n  /**\n   * Handler for the geocoder result event.\n   * @param {object} options\n   * @param {object} options.result The place selected in the geocoder component.\n   */\n  function onGeocoderResult({ result }) {\n    if (result.bbox) {\n      unref(map).fitBounds(result.bbox);\n    } else if (result.center) {\n      unref(map).flyTo({ center: result.center });\n    }\n  }\n\n  /**\n   * Propagate the `mb-created` event from the MapboxGeocoder component.\n   * @param  {Geocoder} geocoder The geocoder instance.\n   * @returns {void}\n   */\n  function onGeocoderCreated(geocoder) {\n    emit('geocoder-created', geocoder);\n  }\n\n  /**\n   * Handler for the map created event.\n   * @param  {MapboxMap} instance The Mapbox instance.\n   */\n  async function onMapCreated(instance) {\n    map.value = instance;\n    emit('map-created', instance);\n    await nextTick();\n    filterFeaturesInView();\n  }\n\n  /**\n   * Handler for the map load event.\n   */\n  async function onMapLoad() {\n    await nextTick();\n    isLoading.value = false;\n\n    emit('map-load', map);\n  }\n\n  /**\n   * Handler for the map's movestart event.\n   */\n  async function onMapMovestart() {\n    mapIsMoving.value = true;\n    await nextTick();\n    listIsLoading.value = true;\n  }\n\n  /**\n   * Handler for the map's moveend event.\n   */\n  function onMapMoveend() {\n    mapIsMoving.value = false;\n    filterFeaturesInView();\n  }\n\n  /**\n   * Handler for the click event on a list item.\n   * @param {object} item A GeoJSON feature.;\n   */\n  function onListItemClick(item) {\n    selectedItem.value = item;\n    emit('select-item', item);\n\n    const { lat, lng } = unref(map).getCenter();\n\n    // Do not trigger flyTo if the map is almost already centered\n    if (Math.abs(lng - item.lng) > 0.0001 && Math.abs(lat - item.lat) > 0.0001) {\n      unref(map).flyTo({ center: [item.lng, item.lat], zoom: props.itemZoomLevel });\n    }\n  }\n\n  /**\n   * Handler for the click event on a GeoJSON feature.\n   * @param {object} feature The GeoJSON feature being clicked.\n   * @param {any}    event   The event object emitted.\n   */\n  function onClusterFeatureClick(feature, event) {\n    const item = props.items.find(({ id }) => id === feature.properties.id);\n    emit('cluster-feature-click', feature, event);\n\n    if (item) {\n      emit('select-item', item);\n      selectedItem.value = item as StoreLocatorItem;\n\n      if (props.disableFeatureClickZoom) {\n        return;\n      }\n\n      unref(map).flyTo({ center: feature.geometry.coordinates, zoom: props.itemZoomLevel });\n    }\n  }\n</script>\n\n<template>\n  <div :class=\"classes.root || {}\">\n    <div :class=\"(classes.region || {}).map || {}\">\n      <template v-if=\"isLoading\">\n        <Transition v-bind=\"(transitions.loader || {}).map || {}\">\n          <!-- @slot Use this slot to define a custom loader for the map region. -->\n          <slot name=\"map-loader\">\n            <Transition v-bind=\"(transitions.loader || {}).default || {}\">\n              <!-- @slot Use this slot to define a custom loader. -->\n              <slot name=\"loader\">Loading...</slot>\n            </Transition>\n          </slot>\n        </Transition>\n      </template>\n\n      <!-- @slot Use this slot to display information before the map. -->\n      <slot name=\"before-map\" />\n\n      <MapboxMap\n        :class=\"classes.map || {}\"\n        v-bind=\"{ ...mapboxMap, accessToken }\"\n        @mb-created=\"onMapCreated\"\n        @mb-movestart=\"onMapMovestart\"\n        @mb-moveend=\"onMapMoveend\"\n        @mb-load=\"onMapLoad\">\n        <MapboxCluster\n          v-bind=\"{ ...mapboxCluster, data: filteredGeoJson }\"\n          @mb-feature-click=\"onClusterFeatureClick\"\n          @mb-feature-mouseenter=\"(...args) => $emit('cluster-feature-mouseenter', ...args)\"\n          @mb-feature-mouseleave=\"(...args) => $emit('cluster-feature-mouseleave', ...args)\"\n          @mb-cluster-click=\"(...args) => $emit('cluster-cluster-click', ...args)\" />\n        <!--\n          @slot Use this slot to add components from @studiometa/vue-mapbox-gl to the map.\n          @binding {Object}  map             The map instance.\n          @binding {GeoJSON} geojson         The GeoJSON used for the cluster.\n          @binding {GeoJSON} filteredGeoJson The filtered GeoJSON.\n          @binding {Array}   items           The list of items.\n          @binding {Array}   filteredItems   The filtered list of items.\n          @binding {Object}  selectedItem    The selected item.\n        -->\n        <slot\n          name=\"map\"\n          :map=\"map\"\n          :geojson=\"geoJson\"\n          :filtered-geojson=\"filteredGeoJson\"\n          :items=\"items\"\n          :filtered-items=\"filteredItems\"\n          :selected-item=\"selectedItem\" />\n      </MapboxMap>\n\n      <!-- @slot Use this slot to display information after the map. -->\n      <slot name=\"after-map\" />\n    </div>\n    <div :class=\"(classes.region || {}).search || {}\">\n      <template v-if=\"isLoading\">\n        <Transition v-bind=\"(transitions.loader || {}).search || {}\">\n          <!-- @slot Use this slot to define a custom loader for the search region. -->\n          <slot name=\"search-loader\">\n            <Transition v-bind=\"(transitions.loader || {}).default || {}\">\n              <!-- @slot Use this slot to define a custom loader. -->\n              <slot name=\"loader\">Loading...</slot>\n            </Transition>\n          </slot>\n        </Transition>\n      </template>\n\n      <!-- @slot Use this slot to display information before the search. -->\n      <slot\n        name=\"before-search\"\n        :items=\"items\"\n        :filtered-items=\"filteredItems\"\n        :selected-item=\"selectedItem\" />\n\n      <MapboxGeocoder\n        :class=\"classes.search || {}\"\n        v-bind=\"{ ...mapboxGeocoder, accessToken }\"\n        @mb-result=\"onGeocoderResult\"\n        @mb-created=\"onGeocoderCreated\" />\n\n      <!-- @slot Use this slot to display information after the search. -->\n      <slot\n        name=\"after-search\"\n        :items=\"items\"\n        :filtered-items=\"filteredItems\"\n        :selected-item=\"selectedItem\" />\n    </div>\n    <div :class=\"(classes.region || {}).list || {}\">\n      <template v-if=\"isLoading || listIsLoading\">\n        <Transition v-bind=\"(transitions.loader || {}).list || {}\">\n          <!-- @slot Use this slot to define a custom loader for the list region. -->\n          <slot name=\"list-loader\">\n            <Transition v-bind=\"(transitions.loader || {}).default || {}\">\n              <!-- @slot Use this slot to define a custom loader. -->\n              <slot name=\"loader\">Loading...</slot>\n            </Transition>\n          </slot>\n        </Transition>\n      </template>\n      <template v-else>\n        <!--\n          @slot Use this slot to display information before the list.\n          @binding {Array} items         The full list of items.\n          @binding {Array} filteredItems The filtered list of items.\n        -->\n        <slot\n          name=\"before-list\"\n          :items=\"items\"\n          :filtered-items=\"filteredItems\"\n          :selected-item=\"selectedItem\">\n          <p>Result(s): {{ filteredItems.length.toFixed(0) }}</p>\n        </slot>\n\n        <VueScroller v-if=\"filteredItems.length > 0\">\n          <ul :class=\"classes.list || {}\">\n            <li\n              v-for=\"(item, index) in filteredItems\"\n              :key=\"item.id\"\n              :class=\"classes.listItem || {}\"\n              @click=\"onListItemClick(item)\">\n              <!--\n                @slot Use this slot to customize the display of the list items.\n                @binding {Object} item          An item.\n                @binding {Object} selected-item The currently selected item.\n              -->\n              <slot name=\"list-item\" :item=\"item\" :index=\"index\" :selected-item=\"selectedItem\">\n                Lat: {{ item.lat }}\n                <br />\n                Lng: {{ item.lng }}\n              </slot>\n            </li>\n          </ul>\n        </VueScroller>\n\n        <!--\n          @slot Use this slot to display information after the list.\n          @binding {Array} items         The full list of items.\n          @binding {Array} filteredItems The filtered list of items.\n        -->\n        <slot\n          name=\"after-list\"\n          :items=\"items\"\n          :filtered-items=\"filteredItems\"\n          :selected-item=\"selectedItem\"\n          :filter-features-in-view=\"filterFeaturesInView\" />\n      </template>\n    </div>\n    <div :class=\"(classes.region || {}).panel || {}\">\n      <Transition v-bind=\"transitions.panel || {}\">\n        <div v-if=\"selectedItem\" :key=\"selectedItem.id\" :class=\"classes.panel || {}\">\n          <!--\n            @slot Use this slot to display content inside the panel.\n            @binding {Object}   item  The selected item.\n            @binging {Function} close A function to close the panel\n          -->\n          <slot name=\"panel\" :item=\"selectedItem\" :close=\"() => (selectedItem = null)\">\n            <div>{{ selectedItem }}</div>\n          </slot>\n        </div>\n      </Transition>\n    </div>\n  </div>\n</template>\n","<template>\n  <div />\n</template>\n\n<script lang=\"ts\">\n  import mapboxgl from 'mapbox-gl';\n\n  if (!mapboxgl) {\n    throw new Error('mapboxgl is not installed.');\n  }\n\n  const { GeolocateControl } = mapboxgl;\n\n  /**\n   * Component's props definition, we need to declare it outside the component\n   * to be able to test the default values and the types.\n   * @see https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol\n   * @type {object}\n   */\n  const propsConfig = {\n    positionOptions: {\n      type: Object,\n      default: () => ({ enableHighAccuracy: false, timeout: 6000 }),\n    },\n    fitBoundsOptions: {\n      type: Object,\n      default: () => ({ maxZoom: 15 }),\n    },\n    trackUserLocation: {\n      type: Boolean,\n      default: false,\n    },\n    showAccuracyCircle: {\n      type: Boolean,\n      default: true,\n    },\n    showUserHeading: {\n      type: Boolean,\n      default: true,\n    },\n    showUserLocation: {\n      type: Boolean,\n      default: true,\n    },\n    position: {\n      type: String,\n      default: 'top-right',\n      bind: false,\n    },\n  };\n\n  /**\n   * All geolocationControl events which will be mapped/bounded to the component\n   * @see https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol.event:trackuserlocationend\n   * @type {Array}\n   */\n  const events = [\n    'trackuserlocationend',\n    'error',\n    'geolocate',\n    'outofmaxbounds',\n    'trackuserlocationstart',\n  ];\n</script>\n\n<script lang=\"ts\" setup>\n  import { useControl } from '../composables/index.js';\n\n  const props = defineProps(propsConfig);\n  const emit = defineEmits();\n\n  const { control } = useControl(GeolocateControl, { propsConfig, events, props, emit });\n\n  defineExpose({ control });\n</script>\n","<template>\n  <div :id=\"id\">\n    <slot v-if=\"isReady\" />\n  </div>\n</template>\n\n<script lang=\"ts\">\n  const propsConfig = {\n    /**\n     * The ID of the image\n     * @see  https://docs.mapbox.com/mapbox-gl-js/api/#map#addimage\n     * @type {string}\n     */\n    id: {\n      type: String,\n      required: true,\n    },\n    /**\n     * The image as String, an HTMLImageElement, ImageData, or object with\n     * width, height, and data properties with the same format as ImageData.\n     * @see  https://docs.mapbox.com/mapbox-gl-js/api/#map#addimage\n     * @type {string | HTMLImageElement | ImageData | object}\n     */\n    src: {\n      type: [\n        String,\n        typeof HTMLImageElement !== 'undefined' && HTMLImageElement,\n        typeof ImageData !== 'undefined' && ImageData,\n        Object,\n      ],\n      required: true,\n    },\n    /**\n     * The options object for the image to add\n     * @see  https://docs.mapbox.com/mapbox-gl-js/api/#map#addimage\n     * @type {object}\n     */\n    options: {\n      type: Object,\n      default: () => ({ pixelRatio: 1, sdf: false }),\n    },\n  };\n</script>\n\n<script lang=\"ts\" setup>\n  import { ref, unref, watch, onMounted, onUnmounted } from 'vue';\n  import { useMap } from '../composables/index.js';\n\n  const props = defineProps(propsConfig);\n  const emit = defineEmits();\n\n  const { map } = useMap();\n  const isReady = ref(false);\n\n  /**\n   * Load the given image with the Mapbox `loadImage` method\n   * @param  {string}  src The source URL for the image\n   * @returns {Promise}     A promise which will resolve on load\n   */\n  async function loadImage(src) {\n    return new Promise((resolve, reject) => {\n      unref(map).loadImage(src, (err, data) => {\n        if (err) {\n          return reject(err);\n        }\n\n        return resolve(data);\n      });\n    });\n  }\n\n  // Update image when the source changes.\n  watch(\n    () => props.src,\n    async (newValue) => {\n      const image = typeof newValue !== 'string' ? newValue : await loadImage(newValue);\n      unref(map).updateImage(props.id, image);\n    },\n    { deep: true },\n  );\n\n  onMounted(async () => {\n    const { id, src, options } = props;\n\n    const image = typeof src !== 'string' ? src : await loadImage(src);\n    unref(map).addImage(id, image, options);\n    emit('mb-add', { id, image, options });\n\n    isReady.value = true;\n  });\n\n  onUnmounted(() => {\n    if (unref(map) && unref(map).hasImage(props.id)) {\n      unref(map).removeImage(props.id);\n    }\n  });\n</script>\n","<template>\n  <div>\n    <MapboxImage\n      v-for=\"(source, index) in sources\"\n      :key=\"`mapbox-images-${source.id}`\"\n      v-bind=\"source\"\n      @mb-add=\"addHandler($event, index + 1)\" />\n    <slot v-if=\"isReady\" />\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\n  import { ref } from 'vue';\n  import MapboxImage from './MapboxImage.vue';\n\n  const props = defineProps({\n    /**\n     * A list of sources to add to the map\n     * @see  https://docs.mapbox.com/mapbox-gl-js/api/#map#addimage\n     * @see  ./MapboxImage.vue\n     * @type {object}\n     */\n    sources: {\n      type: Array,\n      required: true,\n    },\n  });\n  const emit = defineEmits();\n\n  const isReady = ref(false);\n  const addedImages = new Map();\n\n  /**\n   * Handle the add of a single image.\n   * @param {ImageBitmap} image\n   * @param {number} index\n   */\n  function addHandler(image, index) {\n    if (!addedImages.has(image.id)) {\n      addedImages.set(image.id, image);\n      emit('mb-add', image, index, props.sources.length);\n    }\n\n    if (addedImages.size === props.sources.length) {\n      isReady.value = true;\n      emit('mb-ready', addedImages.values());\n    }\n  }\n</script>\n","<template>\n  <div ref=\"root\">\n    <slot />\n  </div>\n</template>\n\n<script lang=\"ts\">\n  import mapboxgl from 'mapbox-gl';\n  import type { PopupOptions, LngLatLike } from 'mapbox-gl';\n\n  const { Popup, Point, LngLat } = mapboxgl;\n\n  /**\n   * Component's props definition, we need to declare it outside the component\n   * to be able to test the default values and the types.\n   * @see  https://docs.mapbox.com/mapbox-gl-js/api/#popup\n   * @type {object}\n   */\n  const propsConfig = {\n    lngLat: {\n      type: [LngLat, Array, Object],\n      required: true,\n    },\n    closeButton: {\n      type: Boolean,\n      default: true,\n    },\n    closeOnClick: {\n      type: Boolean,\n      default: true,\n    },\n    closeOnMove: {\n      type: Boolean,\n      default: false,\n    },\n    anchor: {\n      type: String,\n      default: null,\n    },\n    offset: {\n      type: [Number, Point, Array, Object],\n      default: 0,\n    },\n    className: {\n      type: String,\n      default: null,\n    },\n    maxWidth: {\n      type: String,\n      default: '240px',\n    },\n    /**\n     * Do not render the popup on the map.\n     * @type {object}\n     */\n    renderless: {\n      type: Boolean,\n      default: false,\n      bind: false,\n    },\n  };\n\n  /**\n   * All Map events which will be mapped/bounded to the component\n   * @see  https://docs.mapbox.com/mapbox-gl-js/api/#popup.event:open\n   * @type {Array}\n   */\n  const events = ['open', 'close'];\n</script>\n\n<script lang=\"ts\" setup>\n  import { ref, shallowRef, computed, onMounted, onUnmounted } from 'vue';\n  import { useMap, usePropsBinding, useEventsBinding } from '../composables/index.js';\n\n  const props = defineProps(propsConfig);\n  const emit = defineEmits();\n\n  const popup = shallowRef();\n  const root = ref();\n  const options = computed<PopupOptions>(() => {\n    const { lngLat, ...options } = props;\n    return options as PopupOptions;\n  });\n\n  usePropsBinding(props, popup, propsConfig);\n  useEventsBinding(emit, popup, events);\n\n  onMounted(() => {\n    const { map } = useMap();\n\n    popup.value = new Popup(options.value)\n      .setLngLat(props.lngLat as LngLatLike)\n      .setDOMContent(root.value);\n\n    if (!props.renderless) {\n      popup.value.addTo(map.value);\n    }\n\n    emit('mb-open', popup.value);\n  });\n\n  onUnmounted(() => {\n    if (popup.value) {\n      popup.value.remove();\n    }\n  });\n\n  defineExpose({ popup });\n</script>\n","<template>\n  <div>\n    <div ref=\"contentRef\">\n      <slot />\n    </div>\n    <MapboxPopup v-if=\"hasPopup\" ref=\"popupRef\" v-bind=\"popupOptions\">\n      <slot name=\"popup\" />\n    </MapboxPopup>\n  </div>\n</template>\n\n<script lang=\"ts\">\n  import mapboxgl from 'mapbox-gl';\n  import type { MarkerOptions, PopupOptions, LngLatLike } from 'mapbox-gl';\n\n  const { Marker, Point } = mapboxgl;\n\n  /**\n   * Component's props definition, we need to declare it outside the component\n   * to be able to test the default values and the types.\n   * @see  https://docs.mapbox.com/mapbox-gl-js/api/#marker\n   * @type {object}\n   */\n  const propsConfig = {\n    lngLat: {\n      type: Array,\n      required: true,\n    },\n    popup: {\n      type: [Object, Boolean],\n      default: false,\n      bind: false,\n    },\n    element: {\n      type: typeof HTMLElement !== 'undefined' ? HTMLElement : Object,\n      default: null,\n    },\n    offset: {\n      type: [Point, Array],\n      default: null,\n    },\n    anchor: {\n      type: String,\n      default: 'center',\n    },\n    color: {\n      type: String,\n      default: null,\n    },\n    scale: {\n      type: Number,\n      default: 1,\n    },\n    draggable: {\n      type: Boolean,\n      default: false,\n    },\n    rotation: {\n      type: Number,\n      default: 0,\n    },\n    pitchAlignment: {\n      type: String,\n      default: 'auto',\n    },\n    rotationAlignment: {\n      type: String,\n      default: 'auto',\n    },\n    /**\n     * Do not render the popup on the map.\n     * @type {object}\n     */\n    renderless: {\n      type: Boolean,\n      default: false,\n      bind: false,\n    },\n  };\n\n  /**\n   * All Map events which will be mapped/bounded to the component\n   * @see  https://docs.mapbox.com/mapbox-gl-js/api/#marker.event:dragstart\n   * @type {Array}\n   */\n  const events = ['dragstart', 'drag', 'dragend'];\n</script>\n\n<script lang=\"ts\" setup>\n  import { computed, ref, shallowRef, onMounted, onUnmounted, useSlots } from 'vue';\n  import { useMap, useEventsBinding, usePropsBinding } from '../composables/index.js';\n  import MapboxPopup from './MapboxPopup.vue';\n\n  const props = defineProps(propsConfig);\n  const emit = defineEmits();\n  const slots = useSlots();\n\n  const marker = shallowRef();\n  const contentRef = ref();\n  const popupRef = ref();\n  const hasPopup = computed(() => typeof slots.popup !== 'undefined');\n\n  const popupInstance = computed(() => (hasPopup.value ? popupRef.value.popup : null));\n\n  const popupOptions = computed<MarkerOptions>(\n    () =>\n      ({\n        lngLat: props.lngLat,\n        ...(props.popup ? (props.popup as PopupOptions) : {}),\n        renderless: true,\n      }) as MarkerOptions,\n  );\n\n  const options = computed(() => {\n    const { lngLat, popup, ...options } = props;\n\n    // Use current component's element if container is not set\n    if (slots.default) {\n      options.element = contentRef.value;\n    }\n\n    return options;\n  });\n\n  usePropsBinding(props, marker, propsConfig);\n  useEventsBinding(emit, marker, events);\n\n  onMounted(() => {\n    const { map } = useMap();\n    marker.value = new Marker(options.value as MarkerOptions).setLngLat(props.lngLat as LngLatLike);\n\n    if (!props.renderless) {\n      marker.value.addTo(map.value);\n    }\n\n    if (hasPopup.value) {\n      marker.value.setPopup(popupInstance.value);\n    }\n  });\n\n  onUnmounted(() => {\n    if (marker.value) {\n      marker.value.remove();\n    }\n  });\n\n  defineExpose({ marker, popup: popupInstance });\n</script>\n","<template>\n  <div />\n</template>\n\n<script lang=\"ts\">\n  import mapboxgl from 'mapbox-gl';\n\n  /**\n   * Component's props definition, we need to declare it outside the component\n   * to be able to test the default values and the types.\n   * @type {object}\n   */\n  const propsConfig = {\n    showCompass: {\n      type: Boolean,\n      default: true,\n    },\n    showZoom: {\n      type: Boolean,\n      default: true,\n    },\n    visualizePitch: {\n      type: Boolean,\n      default: false,\n    },\n    position: {\n      type: String,\n      default: 'top-right',\n      bind: false,\n    },\n  };\n</script>\n\n<script lang=\"ts\" setup>\n  import { useControl } from '../composables/index.js';\n\n  const { NavigationControl } = mapboxgl;\n\n  const props = defineProps(propsConfig);\n\n  const { control } = useControl(NavigationControl, { props, propsConfig });\n\n  defineExpose({ control });\n</script>\n","<script lang=\"ts\">\n  import mapboxgl from 'mapbox-gl';\n\n  if (!mapboxgl) {\n    throw new Error('mapboxgl is not installed.');\n  }\n\n  /**\n   * Component's props definition, we need to declare it outside the component\n   * to be able to test the default values and the types.\n   * @see https://docs.mapbox.com/mapbox-gl-js/api/markers/#fullscreencontrol\n   * @type {object}\n   */\n  const propsConfig = {\n    // eslint-disable-next-line vue/require-default-prop\n    container: typeof HTMLElement !== 'undefined' ? HTMLElement : Object,\n    position: {\n      type: String,\n      default: 'top-right',\n    },\n  };\n</script>\n\n<script lang=\"ts\" setup>\n  import { useControl } from '../composables/index.js';\n\n  const props = defineProps(propsConfig);\n  const { control } = useControl(mapboxgl.FullscreenControl, {\n    propsConfig,\n    props,\n  });\n\n  defineExpose({ control });\n</script>\n"],"names":["inject","events","useAttrs","computed","unref","watch","propsConfig","ref","onMounted","nextTick","shallowReactive","onUnmounted","LngLat","shallowRef","provide","options","onUpdated","onBeforeUnmount","index","Point","useSlots"],"mappings":"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","x_google_ignoreList":[9]}