{"version":3,"file":"assets/js/chunks/570.edcc8edf962d8d2864dc.js","mappings":"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","sources":["webpack://frontend-setup/./node_modules/@mapbox/mapbox-gl-language/index.js","webpack://frontend-setup/../../../../../src/molecules/map/utilities/mapbox/add-data.tsx","webpack://frontend-setup/../../../../../src/molecules/map/utilities/mapbox/constants.ts","webpack://frontend-setup/../../../../../src/molecules/map/utilities/mapbox/center.ts","webpack://frontend-setup/../../../../../../src/molecules/map/utilities/mapbox/directions/directions.tsx","webpack://frontend-setup/../../../../../src/molecules/map/utilities/mapbox/isochrone.ts","webpack://frontend-setup/../../../../../src/molecules/map/utilities/mapbox/parse-feature-properties.ts","webpack://frontend-setup/../../../../../../src/molecules/map/utilities/mapbox/pointers/setup-pointers.tsx","webpack://frontend-setup/../../../../../../src/molecules/map/utilities/mapbox/polygons/feature-state.ts","webpack://frontend-setup/../../../../../../src/molecules/map/utilities/mapbox/polygons/geojson.ts","webpack://frontend-setup/../../../../../../src/molecules/map/utilities/mapbox/polygons/interaction.ts","webpack://frontend-setup/../../../../../../src/molecules/map/utilities/mapbox/polygons/layer.ts","webpack://frontend-setup/../../../../../src/molecules/map/utilities/mapbox/raster.ts","webpack://frontend-setup/../../../../../src/molecules/map/utilities/mapbox/mapbox.ts","webpack://frontend-setup/../../../../../src/molecules/map/utilities/mapbox/index.ts","webpack://frontend-setup/../../../src/molecules/map/map.tsx","webpack://frontend-setup/./node_modules/css-loader/dist/runtime/getUrl.js"],"sourcesContent":["/**\n * Create a new [Mapbox GL JS plugin](https://www.mapbox.com/blog/build-mapbox-gl-js-plugins/) that\n * modifies the layers of the map style to use the 'text-field' that matches the browser language.\n * @constructor\n * @param {object} options - Options to configure the plugin.\n * @param {string[]} [options.supportedLanguages] - List of supported languages\n * @param {Function} [options.languageTransform] - Custom style transformation to apply\n * @param {RegExp} [options.languageField=/^\\{name/] - RegExp to match if a text-field is a language field\n * @param {Function} [options.getLanguageField] - Given a language choose the field in the vector tiles\n * @param {string} [options.languageSource] - Name of the source that contains the different languages.\n * @param {string} [options.defaultLanguage] - Name of the default language to initialize style after loading.\n * @param {string[]} [options.excludedLayerIds] - Name of the layers that should be excluded from translation.\n */\nfunction MapboxLanguage(options) {\n  options = Object.assign({}, options);\n  if (!(this instanceof MapboxLanguage)) {\n    throw new Error('MapboxLanguage needs to be called with the new keyword');\n  }\n\n  this.setLanguage = this.setLanguage.bind(this);\n  this._initialStyleUpdate = this._initialStyleUpdate.bind(this);\n\n  this._defaultLanguage = options.defaultLanguage;\n  this._isLanguageField = options.languageField || /^\\{name/;\n  this._getLanguageField = options.getLanguageField || function nameField(language) {\n    return language === 'mul' ? '{name}' : '{name_' + language + '}';\n  };\n  this._languageSource = options.languageSource || null;\n  this._languageTransform = options.languageTransform || function (style, language) {\n    if (language === 'ar') {\n      return noSpacing(style);\n    } else {\n      return standardSpacing(style);\n    }\n  };\n  this._excludedLayerIds = options.excludedLayerIds || [];\n  this.supportedLanguages = options.supportedLanguages || ['ar', 'en', 'es', 'fr', 'de', 'ja', 'ko', 'mul', 'pt', 'ru', 'zh'];\n}\n\nfunction standardSpacing(style) {\n  var changedLayers = style.layers.map(function (layer) {\n    if (!(layer.layout || {})['text-field']) return layer;\n    var spacing = 0;\n    if (layer['source-layer'] === 'state_label') {\n      spacing = 0.15;\n    }\n    if (layer['source-layer'] === 'marine_label') {\n      if (/-lg/.test(layer.id)) {\n        spacing = 0.25;\n      }\n      if (/-md/.test(layer.id)) {\n        spacing = 0.15;\n      }\n      if (/-sm/.test(layer.id)) {\n        spacing = 0.1;\n      }\n    }\n    if (layer['source-layer'] === 'place_label') {\n      if (/-suburb/.test(layer.id)) {\n        spacing = 0.15;\n      }\n      if (/-neighbour/.test(layer.id)) {\n        spacing = 0.1;\n      }\n      if (/-islet/.test(layer.id)) {\n        spacing = 0.01;\n      }\n    }\n    if (layer['source-layer'] === 'airport_label') {\n      spacing = 0.01;\n    }\n    if (layer['source-layer'] === 'rail_station_label') {\n      spacing = 0.01;\n    }\n    if (layer['source-layer'] === 'poi_label') {\n      if (/-scalerank/.test(layer.id)) {\n        spacing = 0.01;\n      }\n    }\n    if (layer['source-layer'] === 'road_label') {\n      if (/-label-/.test(layer.id)) {\n        spacing = 0.01;\n      }\n      if (/-shields/.test(layer.id)) {\n        spacing = 0.05;\n      }\n    }\n    return Object.assign({}, layer, {\n      layout: Object.assign({}, layer.layout, {\n        'text-letter-spacing': spacing\n      })\n    });\n  });\n\n  return Object.assign({}, style, {\n    layers: changedLayers\n  });\n}\n\nfunction noSpacing(style) {\n  var changedLayers = style.layers.map(function (layer) {\n    if (!(layer.layout || {})['text-field']) return layer;\n    var spacing = 0;\n    return Object.assign({}, layer, {\n      layout: Object.assign({}, layer.layout, {\n        'text-letter-spacing': spacing\n      })\n    });\n  });\n\n  return Object.assign({}, style, {\n    layers: changedLayers\n  });\n}\n\nfunction isNameStringField(isLangField, property) {\n  return typeof property === 'string' && isLangField.test(property);\n}\n\nfunction isNameFunctionField(isLangField, property) {\n  return property.stops && property.stops.filter(function (stop) {\n    return isLangField.test(stop[1]);\n  }).length > 0;\n}\n\nfunction adaptPropertyLanguage(isLangField, property, languageFieldName) {\n  if (isNameStringField(isLangField, property)) return languageFieldName;\n  if (isNameFunctionField(isLangField, property)) {\n    var newStops = property.stops.map(function (stop) {\n      if (isLangField.test(stop[1])) {\n        return [stop[0], languageFieldName];\n      }\n      return stop;\n    });\n    return Object.assign({}, property, {\n      stops: newStops\n    });\n  }\n  return property;\n}\n\nfunction changeLayerTextProperty(isLangField, layer, languageFieldName, excludedLayerIds) {\n  if (layer.layout && layer.layout['text-field'] && excludedLayerIds.indexOf(layer.id) === -1) {\n    return Object.assign({}, layer, {\n      layout: Object.assign({}, layer.layout, {\n        'text-field': adaptPropertyLanguage(isLangField, layer.layout['text-field'], languageFieldName)\n      })\n    });\n  }\n  return layer;\n}\n\nfunction findStreetsSource(style) {\n  var sources = Object.keys(style.sources).filter(function (sourceName) {\n    var source = style.sources[sourceName];\n    return /mapbox-streets-v\\d/.test(source.url);\n  });\n  return sources[0];\n}\n\n/**\n * Explicitly change the language for a style.\n * @param {object} style - Mapbox GL style to modify\n * @param {string} language - The language iso code\n * @returns {object} the modified style\n */\nMapboxLanguage.prototype.setLanguage = function (style, language) {\n  if (this.supportedLanguages.indexOf(language) < 0) throw new Error('Language ' + language + ' is not supported');\n  var streetsSource = this._languageSource || findStreetsSource(style);\n  if (!streetsSource) return style;\n\n  var field = this._getLanguageField(language);\n  var isLangField = this._isLanguageField;\n  var excludedLayerIds = this._excludedLayerIds;\n  var changedLayers = style.layers.map(function (layer) {\n    if (layer.source === streetsSource) return changeLayerTextProperty(isLangField, layer, field, excludedLayerIds);\n    return layer;\n  });\n\n  var languageStyle = Object.assign({}, style, {\n    layers: changedLayers\n  });\n\n  return this._languageTransform(languageStyle, language);\n};\n\nMapboxLanguage.prototype._initialStyleUpdate = function () {\n  var style = this._map.getStyle();\n  var language = this._defaultLanguage || browserLanguage(this.supportedLanguages);\n\n  // We only update the style once\n  this._map.off('styledata', this._initialStyleUpdate);\n  this._map.setStyle(this.setLanguage(style, language));\n};\n\nfunction browserLanguage(supportedLanguages) {\n  var language = navigator.languages ? navigator.languages[0] : (navigator.language || navigator.userLanguage);\n  var parts = language.split('-');\n  var languageCode = language;\n  if (parts.length > 1) {\n    languageCode = parts[0];\n  }\n  if (supportedLanguages.indexOf(languageCode) > -1) {\n    return languageCode;\n  }\n  return null;\n}\n\nMapboxLanguage.prototype.onAdd = function (map) {\n  this._map = map;\n  this._map.on('styledata', this._initialStyleUpdate);\n  this._container = document.createElement('div');\n  return this._container;\n};\n\nMapboxLanguage.prototype.onRemove = function () {\n  this._map.off('styledata', this._initialStyleUpdate);\n  this._map = undefined;\n};\n\nfunction ie11Polyfill() {\n  if (typeof Object.assign != 'function') {\n    // Must be writable: true, enumerable: false, configurable: true\n    Object.defineProperty(Object, 'assign', {\n      // eslint-disable-next-line no-unused-vars\n      value: function assign(target, varArgs) { // .length of function is 2\n        // eslint-disable-next-line strict\n        'use strict';\n        if (target === null) { // TypeError if undefined or null\n          throw new TypeError('Cannot convert undefined or null to object');\n        }\n\n        var to = Object(target);\n\n        for (var index = 1; index < arguments.length; index++) {\n          var nextSource = arguments[index];\n\n          if (nextSource !== null) { // Skip over if undefined or null\n            for (var nextKey in nextSource) {\n              // Avoid bugs when hasOwnProperty is shadowed\n              if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n                to[nextKey] = nextSource[nextKey];\n              }\n            }\n          }\n        }\n        return to;\n      },\n      writable: true,\n      configurable: true\n    });\n  }\n}\n\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n  module.exports = MapboxLanguage;\n} else {\n  ie11Polyfill();\n  window.MapboxLanguage = MapboxLanguage;\n}\n","import { Fragment, h } from '@atomify/jsx';\nimport { MapDataItem, MapOptions, MapTheme } from '@bpd-library/types';\nimport { calculateCenter, functionIsTrue } from '@bpd-library/utilities';\nimport mapboxgl from 'mapbox-gl';\n\nconst variants: string[] = [];\nconst debugMarkers: mapboxgl.Popup[] = [];\n\nconst addData = async (\n    map: mapboxgl.Map,\n    data: MapDataItem[],\n    theme: MapTheme,\n    options: MapOptions,\n) => {\n    const features: { [variant: string]: GeoJSON.Feature[] } = {};\n\n    /*\n        Create empty arrays for previously set variants,\n        this will make sure old variants will be removed.\n    */\n    variants.forEach((variant) => (features[variant] = []));\n\n    /*\n        Construct GeoJSON Features\n    */\n    data.forEach((item) => {\n        const { variant } = item;\n\n        if (variants.indexOf(variant) < 0) {\n            variants.push(variant);\n            features[variant] = [];\n        }\n\n        if (isPointerVariant(variant, theme)) {\n            features[variant].push({\n                type: 'Feature',\n                geometry: {\n                    coordinates: calculateCenter(item.coordinates),\n                    type: 'Point',\n                },\n                properties: {\n                    ...item,\n                },\n            });\n        } else {\n            item.coordinates.forEach((coordinate) => {\n                features[variant].push({\n                    type: 'Feature',\n                    geometry: {\n                        coordinates: [coordinate],\n                        type: 'Polygon',\n                    },\n                    properties: {\n                        ...item,\n                    },\n                });\n            });\n        }\n    });\n\n    /*\n        Update layer with features\n    */\n    await functionIsTrue(() => map.isStyleLoaded() && map.isSourceLoaded);\n\n    Object.keys(features).forEach((variant) => {\n        const variantFeatures = features[variant];\n\n        const source = map.getSource(variant) as mapboxgl.GeoJSONSource | undefined;\n\n        if (source) {\n            source.setData({\n                type: 'FeatureCollection',\n                features: variantFeatures,\n            });\n        }\n    });\n\n    if (options.debugMode) {\n        addDebugMarkers(map, data, options);\n    }\n};\n\n/**\n * @description Checks if the theme variant is a pointer theme\n * @param {string} variant\n * @param {MapTheme} theme\n * @return {*}\n */\nconst isPointerVariant = (variant: string, theme: MapTheme) => {\n    return !!theme.pointer?.settings.find((pointerTheme) => pointerTheme.variant === variant);\n};\n\n/**\n * @description Adds debug markers to the map, based on the mapdata\n * @param {mapboxgl.Map} map\n * @param {MapDataItem[]} mapData\n * @param {MapOptions} options\n */\nconst addDebugMarkers = (map: mapboxgl.Map, mapData: MapDataItem[], options: MapOptions) => {\n    const debugProperties = options.debugProperties || ['id'];\n\n    // Remove all markers\n    debugMarkers.forEach((marker) => marker.remove());\n\n    mapData.forEach((mapDataItem) => {\n        const center = calculateCenter(mapDataItem.coordinates);\n\n        const marker = new mapboxgl.Popup({\n            closeOnMove: false,\n            closeOnClick: false,\n            closeButton: false,\n            focusAfterOpen: false,\n        })\n            .setDOMContent(\n                <div\n                    style={{\n                        backgroundColor: 'rgba(0,0,0,0.5)',\n                        color: '#fff',\n                        fontSize: '10px',\n                    }}>\n                    {debugProperties\n                        .map((property) => mapDataItem[property])\n                        .filter(Boolean)\n                        .map((value, i) => (\n                            <Fragment>\n                                {i > 0 && <br />}\n                                {value}\n                            </Fragment>\n                        ))}\n                </div>,\n            )\n            .setLngLat(center)\n            .addTo(map);\n\n        debugMarkers.push(marker);\n    });\n};\n\nexport default addData;\n","export const MAP_FLY_DURATION = 1000;\nexport const MAP_FLY_EASING_FUNCTION = (t: number) =>\n    t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n","import { Coordinates } from '@bpd-library/types';\nimport { calculateCenter } from '@bpd-library/utilities';\n\nimport { MAP_FLY_DURATION, MAP_FLY_EASING_FUNCTION } from './constants';\n\nconst center = (map: mapboxgl.Map, coordinates: Coordinates) => {\n    const center = calculateCenter(coordinates);\n\n    map.flyTo({\n        center,\n        curve: 0,\n        easing: MAP_FLY_EASING_FUNCTION,\n        duration: MAP_FLY_DURATION,\n    });\n};\n\nexport default center;\n","import {\n    Coordinate,\n    Coordinates,\n    DirectionsAPIRoute,\n    MapDirectionsDuration,\n    MapDirectionsSetting,\n} from '@bpd-library/types';\nimport { calculateBoundingBox, environmentDetails } from '@bpd-library/utilities';\nimport mapboxgl, { Popup } from 'mapbox-gl';\n\ninterface DirectionsAPIResult {\n    routes: DirectionsAPIRoute[];\n}\n\nconst DIRECTIONS_SOURCE = 'directions';\n\nlet startPopup: Popup | undefined;\nlet endPopup: Popup | undefined;\nlet durationPopup: Popup | undefined;\n\nconst addDirections = async (map: mapboxgl.Map, directionsOptions: MapDirectionsSetting) => {\n    await init();\n\n    async function init() {\n        startPopup?.remove();\n        endPopup?.remove();\n        durationPopup?.remove();\n\n        if (!map.getSource(DIRECTIONS_SOURCE)) {\n            setupSource();\n            setupLayer();\n        }\n\n        const { profile, start, end, startLabel, endLabel, durationLabel, onInitialized } =\n            directionsOptions;\n\n        const accessToken = environmentDetails.mapboxAccessToken || '';\n\n        try {\n            const url = `https://api.mapbox.com/directions/v5/mapbox/${profile}/${start[0]},${start[1]};${end[0]},${end[1]}?overview=full&geometries=geojson&access_token=${accessToken}`;\n            const {\n                routes: [route],\n            } = (await fetch(url).then((r) => r.json())) as DirectionsAPIResult;\n\n            if (route) {\n                const { geometry, duration } = route;\n\n                const source = map.getSource(DIRECTIONS_SOURCE) as\n                    | mapboxgl.GeoJSONSource\n                    | undefined;\n                source?.setData({\n                    type: 'FeatureCollection',\n                    features: [\n                        {\n                            type: 'Feature',\n                            geometry: geometry,\n                            properties: null,\n                        },\n                    ],\n                });\n\n                const middlePoint = geometry.coordinates[\n                    ~~(geometry.coordinates.length / 2)\n                ] as Coordinate;\n\n                // TODO: find better middle point - the one that lies on the line that passes between the start and end point\n                // possibly use turf but definitely something like this:\n                //\n                // - for each coordinate on the route (except start and end)\n                // -     calculate distance between start and end\n                // -     divide (coord -> start) and (coord -> end)\n                //\n                // the point that has that division closest to 1 lies on that middle line and should be a good approximation\n\n                const transformedDuration = transformDuration(duration);\n\n                startPopup = addPopup(start, startLabel());\n                endPopup = addPopup(end, endLabel());\n                durationPopup = addPopup(middlePoint, durationLabel(transformedDuration));\n\n                fitApiResultBounds(geometry);\n\n                onInitialized && onInitialized();\n            }\n        } catch (e) {\n            if (environmentDetails.isLocal) {\n                console.error(e);\n            }\n        }\n    }\n\n    function transformDuration(seconds: number): MapDirectionsDuration {\n        const totalHours = seconds / 60 / 60;\n        const hours = Math.floor(totalHours);\n        const minutes = Math.round((totalHours - hours) * 0.6 * 100);\n\n        return {\n            hours,\n            minutes,\n        };\n    }\n\n    function setupSource() {\n        map.addSource(DIRECTIONS_SOURCE, {\n            type: 'geojson',\n            data: {\n                type: 'FeatureCollection',\n                features: [],\n            },\n        });\n    }\n\n    function setupLayer() {\n        map.addLayer({\n            id: 'directionsStroke',\n            type: 'line',\n            source: DIRECTIONS_SOURCE,\n            layout: {},\n            paint: {\n                'line-color': '#32C1DE',\n                'line-width': 4,\n                ...directionsOptions.linePaintOptions,\n            },\n        });\n    }\n\n    // function getMiddlePoint(start: Coordinates, end: Coordinates, points: Position[]) {\n    //     //\n    // }\n\n    function addPopup(location: Coordinate, labelNode: Node, options?: mapboxgl.PopupOptions) {\n        return new Popup({\n            closeButton: false,\n            closeOnClick: false,\n            offset: 5,\n            focusAfterOpen: false,\n            ...options,\n        })\n            .setLngLat(location)\n            .setDOMContent(labelNode)\n            .addTo(map);\n    }\n\n    function fitApiResultBounds(geometry: GeoJSON.LineString) {\n        const coordinates = [geometry.coordinates] as Coordinates;\n        const boundingBox = calculateBoundingBox(coordinates);\n\n        map.fitBounds(boundingBox, {\n            padding: directionsOptions.boundsPadding || 50,\n            animate: true,\n            duration: 1000,\n        });\n    }\n};\n\nfunction removeDirections(map: mapboxgl.Map) {\n    const source = map.getSource(DIRECTIONS_SOURCE) as mapboxgl.GeoJSONSource | undefined;\n\n    if (!source) return;\n\n    source.setData({\n        type: 'FeatureCollection',\n        features: [],\n    });\n\n    startPopup?.remove();\n    endPopup?.remove();\n    durationPopup?.remove();\n}\n\nexport { addDirections, removeDirections };\n","import { Coordinates, MapIsochroneSetting } from '@bpd-library/types';\nimport { calculateBoundingBox, environmentDetails } from '@bpd-library/utilities';\nimport mapboxgl from 'mapbox-gl';\n\nconst OUTER_COORDINATES: Coordinates = [\n    [\n        [-42, 74],\n        [-42, 1],\n        [80, 1],\n        [80, 74],\n        [-42, 74],\n    ],\n];\nconst ISOCHRONE_SOURCE = 'isochrone';\nconst DEFAULT_FILL_COLOR = '#000000';\nconst DEFAULT_STROKE_COLOR = '#32C1DE';\n\ntype IsochroneApiResult = GeoJSON.FeatureCollection<GeoJSON.Polygon>;\n\nlet mask: any;\nlet polygon: any;\n\nconst addIsochrone = async (map: mapboxgl.Map, isochroneSetting: MapIsochroneSetting) => {\n    await init();\n\n    async function init() {\n        // Lazyload turf package\n        if (!mask || !polygon) {\n            const maskPackage = await import('@turf/mask');\n            const helpersPackage = await import('@turf/helpers');\n\n            mask = await maskPackage.default;\n            polygon = await helpersPackage.polygon;\n        }\n\n        // Setup source and layer, if not existing\n        if (!map.getSource(ISOCHRONE_SOURCE)) {\n            setupSource();\n            setupLayer();\n        }\n\n        const { coordinate, minutes, profile, fitBounds } = isochroneSetting;\n\n        const accessToken = environmentDetails.mapboxAccessToken || '';\n\n        try {\n            let url: string = `https://api.mapbox.com/isochrone/v1/mapbox/${profile}/${coordinate[0]},${coordinate[1]}?contours_minutes=${minutes}&polygons=true&access_token=${accessToken}`;\n\n            // To simplify the polygon. Makes calculating boundingBoxes more performant\n            if (profile === 'driving') {\n                url += '&generalize=100';\n            }\n\n            const result = await fetch(url);\n            const parsedResult: IsochroneApiResult = await result.json();\n\n            if (parsedResult) {\n                const source = map.getSource(ISOCHRONE_SOURCE) as\n                    | mapboxgl.GeoJSONSource\n                    | undefined;\n\n                const invertedCoordinates = invertCoordinates(parsedResult);\n\n                if (fitBounds) {\n                    fitApiResultBounds(parsedResult);\n                }\n\n                source?.setData(invertedCoordinates);\n            }\n        } catch (e) {\n            if (environmentDetails.isLocal) {\n                console.error(e);\n            }\n        }\n    }\n\n    function setupSource() {\n        map.addSource(ISOCHRONE_SOURCE, {\n            type: 'geojson',\n            data: {\n                type: 'FeatureCollection',\n                features: [],\n            },\n        });\n    }\n\n    function setupLayer() {\n        const { fill = DEFAULT_FILL_COLOR, stroke = DEFAULT_STROKE_COLOR } =\n            isochroneSetting.color || {};\n\n        map.addLayer({\n            id: 'isochroneFill',\n            type: 'fill',\n            source: ISOCHRONE_SOURCE,\n            layout: {},\n            paint: {\n                'fill-color': fill,\n                'fill-opacity': 0.07,\n            },\n        });\n\n        map.addLayer({\n            id: 'isochroneStroke',\n            type: 'line',\n            source: ISOCHRONE_SOURCE,\n            layout: {},\n            paint: {\n                'line-color': stroke,\n                'line-width': 1,\n            },\n        });\n    }\n\n    function invertCoordinates(apiResult: IsochroneApiResult) {\n        const apiCoordinates = apiResult.features[0]?.geometry.coordinates;\n\n        const outerPolygon = polygon(apiCoordinates);\n        const innerPolygon = polygon([...OUTER_COORDINATES]);\n\n        const invertedPolygon = mask(outerPolygon, innerPolygon);\n\n        return invertedPolygon;\n    }\n\n    function fitApiResultBounds(apiResult: IsochroneApiResult) {\n        const coordinates = apiResult.features[0]?.geometry.coordinates as Coordinates;\n        const boundingBox = calculateBoundingBox(coordinates);\n\n        map.fitBounds(boundingBox, {\n            padding: 20,\n            animate: true,\n            duration: 1000,\n        });\n    }\n};\n\nconst removeIsochrone = (map: mapboxgl.Map) => {\n    const source = map.getSource(ISOCHRONE_SOURCE) as mapboxgl.GeoJSONSource | undefined;\n\n    if (!source) return;\n\n    source.setData({\n        type: 'FeatureCollection',\n        features: [],\n    });\n};\n\nexport { addIsochrone, removeIsochrone };\n","export type FeatureProperties = { [key: string]: string };\n\nexport const parseFeatureProperties = (obj: FeatureProperties): { [key: string]: any } => {\n    const safeJSONParse = (str: string) => {\n        try {\n            return JSON.parse(str);\n        } catch (e) {\n            return false;\n        }\n    };\n\n    Object.keys(obj).forEach(key => {\n        const parsedJSON = safeJSONParse(obj[key]);\n\n        obj[key] = parsedJSON || obj[key];\n    });\n\n    return obj;\n};\n","import { h } from '@atomify/jsx';\nimport { MapDataItem, MapTheme } from '@bpd-library/types';\nimport { calculateCenter, throttle } from '@bpd-library/utilities';\nimport { GeoJSONSource, LngLatLike, Marker } from 'mapbox-gl';\n\nimport { clearHover, updateClick, updateHover } from '../../../store';\nimport { MAP_FLY_DURATION, MAP_FLY_EASING_FUNCTION } from '../constants';\nimport { FeatureProperties, parseFeatureProperties } from '../parse-feature-properties';\n\ntype MapMarkers = { [key: string]: mapboxgl.Marker };\n\ntype MarkerObject = {\n    cache: MapMarkers;\n    onScreen: MapMarkers;\n};\n\ninterface ClusterChildren {\n    cluster: Marker;\n    clusterSource: GeoJSONSource;\n    clusterId: number;\n}\n\ninterface MarkersToCluster {\n    cluster: Marker;\n    features: GeoJSON.Feature<GeoJSON.Geometry, GeoJSON.GeoJsonProperties>[];\n}\n\nconst MAP_HOVER_CLASS = 'map--hovering';\nconst POINTER_FADEOUT_DURATION = 300;\n\nconst setupPointers = (map: mapboxgl.Map, theme: MapTheme, element: HTMLElement) => {\n    const { pointer: pointerTheme } = theme;\n    const clusters: MarkerObject = { cache: {}, onScreen: {} };\n    const pointers: MarkerObject = { cache: {}, onScreen: {} };\n    const sourceNames: string[] = [];\n\n    init();\n\n    function init() {\n        theme.pointer?.settings.forEach(({ variant, minzoom, maxzoom }) => {\n            sourceNames.push(variant);\n\n            map.addSource(variant, {\n                type: 'geojson',\n                data: { type: 'FeatureCollection', features: [] },\n                cluster: true,\n                clusterRadius: 50,\n                clusterMaxZoom: 8,\n                promoteId: 'id',\n            });\n\n            const layerSettings: mapboxgl.AnyLayer | mapboxgl.CustomLayerInterface = {\n                id: variant,\n                type: 'circle',\n                source: variant,\n                filter: ['!=', 'cluster', true],\n                paint: {\n                    'circle-opacity': 0,\n                },\n            };\n\n            if (minzoom) layerSettings.minzoom = minzoom;\n            if (maxzoom) layerSettings.maxzoom = maxzoom;\n\n            map.addLayer(layerSettings);\n        });\n\n        bindEvents();\n    }\n\n    function bindEvents() {\n        map.on('render', throttle(updateMarkers, 200));\n    }\n\n    function setClusterChildrenData({ cluster, clusterSource, clusterId }: ClusterChildren) {\n        clusterSource?.getClusterChildren(clusterId!, (_, features) => {\n            const markersLength = features[0].properties?.point_count;\n            const OFFSET = 0;\n\n            clusterSource.getClusterLeaves(clusterId, markersLength, OFFSET, (_, features) => {\n                const config: MarkersToCluster = {\n                    cluster,\n                    features,\n                };\n                addMarkersToCluster(config);\n            });\n        });\n    }\n\n    function addMarkersToCluster({ cluster, features }: MarkersToCluster) {\n        let clusterChildren: string[];\n\n        clusterChildren = features.map((feature: any) => {\n            return feature.properties?.id;\n        });\n\n        clusterChildren = clusterChildren?.filter(Boolean);\n        cluster!.getElement().dataset.children = String(clusterChildren);\n    }\n\n    function addCluster(\n        clus: GeoJSON.Feature,\n        variant: string,\n    ): [mapboxgl.Marker | undefined, number | undefined] {\n        const { properties, geometry } = clus;\n        const { coordinates } = geometry as GeoJSON.Point;\n        const { cluster_id: id, point_count: count } = properties as {\n            cluster_id?: number;\n            point_count?: number;\n        };\n\n        let cluster: mapboxgl.Marker | undefined;\n\n        if (id && count) {\n            cluster = clusters.cache[id];\n            if (!cluster) {\n                cluster = new Marker({\n                    element: (\n                        <button\n                            id={id}\n                            class=\"map__cluster\"\n                            onMouseenter={() => {\n                                element.classList.add(MAP_HOVER_CLASS);\n                            }}\n                            onMouseleave={() => {\n                                element.classList.remove(MAP_HOVER_CLASS);\n                            }}\n                            onClick={() => {\n                                element.classList.remove(MAP_HOVER_CLASS);\n\n                                (map.getSource(variant) as GeoJSONSource).getClusterExpansionZoom(\n                                    id,\n                                    (err, zoom) => {\n                                        if (err) return;\n\n                                        map.easeTo({\n                                            center: coordinates as LngLatLike,\n                                            zoom,\n                                            duration: MAP_FLY_DURATION,\n                                            easing: MAP_FLY_EASING_FUNCTION,\n                                        });\n                                    },\n                                );\n                            }}>\n                            {pointerTheme!.cluster(count)}\n                        </button>\n                    ),\n                }).setLngLat(coordinates as LngLatLike);\n\n                clusters.cache[id] = cluster;\n            }\n            const clusterSource = map.getSource(variant) as GeoJSONSource;\n            const config: ClusterChildren = {\n                cluster,\n                clusterSource,\n                clusterId: id,\n            };\n\n            setClusterChildrenData(config);\n\n            if (!clusters.onScreen[id]) cluster?.addTo(map);\n        }\n\n        return [cluster, id];\n    }\n\n    function addPointer({\n        properties,\n    }: GeoJSON.Feature): [mapboxgl.Marker | undefined, string | undefined] {\n        const mapDataItem = parseFeatureProperties(properties as FeatureProperties) as MapDataItem;\n        const { id, variant, coordinates } = mapDataItem;\n        const setting = pointerTheme!.settings.find((setting) => setting.variant === variant);\n\n        if (!setting) return [undefined, undefined];\n\n        let pointer: mapboxgl.Marker | undefined = pointers.cache[id];\n        const center = calculateCenter(coordinates);\n\n        if (!pointer) {\n            pointer = new Marker({\n                anchor: 'center',\n                element: (\n                    <button\n                        id={`pointer-${id}`}\n                        onMouseenter={() => {\n                            element.classList.add(MAP_HOVER_CLASS);\n                            updateHover(mapDataItem);\n                        }}\n                        onMouseleave={() => {\n                            element.classList.remove(MAP_HOVER_CLASS);\n                            clearHover();\n                        }}\n                        onClick={(e: Event) => {\n                            e.stopPropagation();\n                            updateClick(mapDataItem);\n                        }}\n                        class={`map__pointer${\n                            setting.disablePointerEvents ? ' map__pointer--disabled' : ''\n                        }`}>\n                        {setting.createElement(mapDataItem)}\n                    </button>\n                ),\n            }).setLngLat(center);\n\n            pointers.cache[id] = pointer;\n        }\n\n        if (!pointers.onScreen[id]) pointer.addTo(map);\n\n        return [pointer, id];\n    }\n\n    function updateMarkers() {\n        const newClusters: MapMarkers = {};\n        const newPointers: MapMarkers = {};\n\n        theme.pointer?.settings.forEach(({ variant }) => {\n            const features = map.querySourceFeatures(variant);\n\n            features.forEach((feature) => {\n                const { properties } = feature;\n\n                if (properties?.cluster) {\n                    const [cluster, id] = addCluster(feature, variant);\n\n                    if (cluster && id) newClusters[id] = cluster;\n                } else {\n                    const [pointer, id] = addPointer(feature);\n\n                    if (pointer && id) newPointers[id] = pointer;\n                }\n            });\n        });\n\n        Object.keys(clusters.onScreen).forEach((id) => {\n            if (!newClusters[id]) clusters.onScreen[id].remove();\n        });\n\n        Object.keys(pointers.onScreen).forEach((id) => {\n            if (!newPointers[id]) {\n                fadeoutPointer(pointers.onScreen[id]);\n            }\n        });\n\n        clusters.onScreen = newClusters;\n        pointers.onScreen = newPointers;\n    }\n\n    function fadeoutPointer(pointer: mapboxgl.Marker) {\n        const pointerElement = pointer.getElement();\n\n        pointerElement.classList.add('map__pointer--fadeout');\n\n        setTimeout(() => {\n            pointer.remove();\n\n            pointerElement.classList.remove('map__pointer--fadeout');\n        }, POINTER_FADEOUT_DURATION);\n    }\n};\n\nexport default setupPointers;\n","const setFeatureState = (\n    map: mapboxgl.Map,\n    variant: string,\n    id: string,\n    type: 'hover' | 'focus',\n    value: boolean,\n) => {\n    map.setFeatureState(\n        {\n            source: variant,\n            id,\n        },\n        {\n            [type]: value,\n        },\n    );\n};\n\nexport default setFeatureState;\n","import { PolygonThemeSetting } from '@bpd-library/types';\n\nconst geojson = (map: mapboxgl.Map, setting: PolygonThemeSetting) => {\n    map.addSource(setting.variant, {\n        type: 'geojson',\n        data: { type: 'FeatureCollection', features: [] },\n        promoteId: 'id',\n    });\n};\n\nexport default geojson;\n","import { MapDataItem, PolygonThemeSetting } from '@bpd-library/types';\n\nimport { clearHover, getHover, updateClick, updateHover } from '../../../store';\nimport { FeatureProperties, parseFeatureProperties } from '../parse-feature-properties';\n\ntype MapboxEvent = mapboxgl.MapMouseEvent & {\n    features?: mapboxgl.MapboxGeoJSONFeature[] | undefined;\n} & mapboxgl.EventData;\n\nconst getFeatureFromEvent = (e: MapboxEvent) => {\n    const features = e.features;\n    const feature = features ? features[0] : undefined;\n\n    return feature || undefined;\n};\n\nconst interaction = (map: mapboxgl.Map, setting: PolygonThemeSetting) => {\n    map.on('mousemove', setting.variant + '-fill', (e) => {\n        const hover = getHover();\n        const feature = getFeatureFromEvent(e);\n\n        if (!feature) return;\n\n        if (hover.current?.id !== feature.id) {\n            const item = parseFeatureProperties(\n                feature.properties as FeatureProperties,\n            ) as MapDataItem;\n\n            updateHover(item);\n        }\n    });\n\n    map.on('mouseleave', setting.variant + '-fill', () => {\n        clearHover();\n    });\n\n    map.on('click', setting.variant + '-fill', (e) => {\n        const feature = getFeatureFromEvent(e);\n\n        if (feature) {\n            const item = parseFeatureProperties(\n                feature.properties as FeatureProperties,\n            ) as MapDataItem;\n\n            updateClick(item);\n        }\n    });\n};\n\nexport default interaction;\n","import { PolygonThemeSetting, RGBA } from '@bpd-library/types';\n\nconst MIN_ZOOM = 1;\nconst MAX_ZOOM = 24;\nconst LINE_WIDTH = 2;\nconst TRANSITION_ZOOM_MARGIN = 0.75;\n\nconst NORMAL_FEATURE_STATE: mapboxgl.Expression = [\n    'case',\n    ['boolean', ['feature-state', 'hover'], false],\n    0,\n    ['boolean', ['feature-state', 'focus'], false],\n    0,\n    1,\n];\n\nconst HOVER_FEATURE_STATE: mapboxgl.Expression = [\n    'case',\n    ['boolean', ['feature-state', 'hover'], false],\n    1,\n    ['boolean', ['feature-state', 'focus'], false],\n    1,\n    0,\n];\n\nconst RGBAString = ([r, g, b, a]: RGBA, overwriteAlpha?: number) => {\n    a = overwriteAlpha !== undefined ? overwriteAlpha : a;\n\n    return `rgba(${r},${g},${b},${a})`;\n};\n\nconst layer = (\n    map: mapboxgl.Map,\n    { variant, normal, hover, minzoom, maxzoom, visibility = 'visible' }: PolygonThemeSetting,\n) => {\n    // Calculate the minzoom and maxzoom when it's set. This makes sure the layer gets disabled when it's invisible.\n    let layerMinzoom = minzoom ? minzoom - TRANSITION_ZOOM_MARGIN : MIN_ZOOM;\n    let layerMaxzoom = maxzoom ? maxzoom + TRANSITION_ZOOM_MARGIN : MAX_ZOOM;\n\n    // Limit the minzoom to 1 and the maxzoom to 24.\n    if (layerMinzoom < 1) layerMinzoom = 1;\n    if (layerMaxzoom > 24) layerMaxzoom = 24;\n\n    if (normal.fill) {\n        map.addLayer({\n            id: `${variant}-fill`,\n            type: 'fill',\n            source: variant,\n            minzoom: layerMinzoom,\n            maxzoom: layerMaxzoom,\n            layout: {\n                visibility: visibility,\n            },\n            paint: {\n                'fill-color': RGBAString(normal.fill),\n                'fill-opacity': NORMAL_FEATURE_STATE,\n            },\n        });\n\n        setTransitionPaintProperty(`${variant}-fill`, normal.fill, 'fill-color');\n    }\n\n    // Only add stroke layer, if it is set\n    if (normal.stroke) {\n        map.addLayer({\n            id: `${variant}-line`,\n            type: 'line',\n            source: variant,\n            minzoom: layerMinzoom,\n            maxzoom: layerMaxzoom,\n            layout: {\n                visibility: 'visible',\n            },\n            paint: {\n                'line-color': RGBAString(normal.stroke),\n                'line-width': LINE_WIDTH,\n                'line-opacity': NORMAL_FEATURE_STATE,\n            },\n        });\n\n        setTransitionPaintProperty(`${variant}-line`, normal.stroke, 'line-color');\n    }\n\n    if (hover) {\n        map.addLayer({\n            id: `${variant}-fill-hover`,\n            type: 'fill',\n            source: variant,\n            minzoom: layerMinzoom,\n            maxzoom: layerMaxzoom,\n            layout: {\n                // Make the layer visible by default.\n                visibility: visibility,\n            },\n            paint: {\n                'fill-color': RGBAString(hover.fill),\n                'fill-opacity': HOVER_FEATURE_STATE,\n            },\n        });\n\n        setTransitionPaintProperty(`${variant}-fill-hover`, hover.fill, 'fill-color');\n\n        if (normal.stroke) {\n            map.addLayer({\n                id: `${variant}-line-hover`,\n                type: 'line',\n                source: variant,\n                minzoom: layerMinzoom,\n                maxzoom: layerMaxzoom,\n                paint: {\n                    'line-color': RGBAString(hover.stroke),\n                    'line-width': LINE_WIDTH,\n                    'line-opacity': HOVER_FEATURE_STATE,\n                },\n            });\n\n            setTransitionPaintProperty(`${variant}-line-hover`, hover.stroke, 'line-color');\n        }\n    }\n\n    /**\n     * @description Creates a fade-in effect when zooming in or out, based on a minzoom and maxzoom\n     * @param {string} layer\n     * @param {RGBA} color\n     * @param {string} property\n     * @return {*}\n     */\n    function setTransitionPaintProperty(layer: string, color: RGBA, property: string) {\n        if (!minzoom || !maxzoom) return;\n\n        map.setPaintProperty(layer, property, [\n            'interpolate',\n            ['exponential', TRANSITION_ZOOM_MARGIN],\n            ['zoom'],\n            minzoom - TRANSITION_ZOOM_MARGIN,\n            RGBAString(color, 0),\n            minzoom,\n            RGBAString(color),\n            maxzoom,\n            RGBAString(color),\n            maxzoom + TRANSITION_ZOOM_MARGIN,\n            RGBAString(color, 0),\n        ]);\n    }\n};\n\nexport default layer;\n","import { environmentDetails } from '@bpd-library/utilities';\n\nimport { MapLayerRasterSettings } from '../../store';\n\nconst TRANSITION_ZOOM_MARGIN = 0.75;\n\nconst raster = (map: mapboxgl.Map, settings: MapLayerRasterSettings) => {\n    const accessToken = environmentDetails.mapboxAccessToken || '';\n    const tile = `${settings.layerRaster}/{z}/{x}/{y}.png?access_token=${accessToken}`;\n\n    if (map.getSource('raster')) {\n        console.warn('Adding multiple layerRasters is not possible');\n        return;\n    }\n\n    map.addSource('raster', {\n        type: 'raster',\n        tiles: [tile],\n    });\n\n    map.addLayer(\n        {\n            id: 'raster-image',\n            type: 'raster',\n            source: 'raster',\n            minzoom: 10,\n            maxzoom: 24,\n        },\n        'bridge_minor',\n    );\n\n    if (settings.minzoom && settings.maxzoom) {\n        setTransitionPaintProperty(map, settings.minzoom, settings.maxzoom);\n    }\n};\n\n/**\n * @description Creates a fade-in effect when zooming in or out, based on a minzoom and maxzoom\n * @param {string} layer\n * @param {RGBA} color\n * @param {string} property\n * @return {*}\n */\nfunction setTransitionPaintProperty(map: mapboxgl.Map, minzoom: number, maxzoom: number) {\n    if (!minzoom || !maxzoom) return;\n\n    map.setPaintProperty('raster-image', 'raster-opacity', [\n        'interpolate',\n        ['exponential', TRANSITION_ZOOM_MARGIN],\n        ['zoom'],\n        minzoom - TRANSITION_ZOOM_MARGIN,\n        0,\n        minzoom,\n        1,\n        maxzoom,\n        1,\n        maxzoom + TRANSITION_ZOOM_MARGIN,\n        0,\n    ]);\n}\n\nexport default raster;\n","import {\n    Coordinates,\n    MapData,\n    MapDirectionsSetting,\n    MapIsochroneSetting,\n    MapOptions,\n    MapSearchOptions,\n    MapTheme,\n    PolygonThemeSetting,\n} from '@bpd-library/types';\n\nimport { MapLayerRasterSettings } from '../../store';\nimport addData from './add-data';\nimport center from './center';\nimport { addDirections, removeDirections } from './directions/directions';\nimport { addIsochrone, removeIsochrone } from './isochrone';\nimport setupPointers from './pointers/setup-pointers';\nimport setFeatureState from './polygons/feature-state';\nimport geojson from './polygons/geojson';\nimport interaction from './polygons/interaction';\nimport layer from './polygons/layer';\nimport raster from './raster';\nimport search from './search/search';\n\nconst mapbox = (map: mapboxgl.Map, options: MapOptions, theme: MapTheme) => ({\n    raster: (settings: MapLayerRasterSettings) => raster(map, settings),\n    geojson: (setting: PolygonThemeSetting) => geojson(map, setting),\n    layer: (setting: PolygonThemeSetting) => layer(map, setting),\n    interaction: (setting: PolygonThemeSetting) => interaction(map, setting),\n    center: (coordinates: Coordinates) => center(map, coordinates),\n    setupPointers: (element: HTMLElement) => setupPointers(map, theme, element),\n    addData: (data: MapData) => addData(map, data, theme, options),\n    setFeatureState: (variant: string, id: string, type: 'hover' | 'focus', hover: boolean) =>\n        setFeatureState(map, variant, id, type, hover),\n    search: (searchOptions: MapSearchOptions) => search(map, searchOptions, options),\n    addIsochrone: (isochroneSetting: MapIsochroneSetting) => addIsochrone(map, isochroneSetting),\n    removeIsochrone: () => removeIsochrone(map),\n    addDirections: (directionsSetting: MapDirectionsSetting) =>\n        addDirections(map, directionsSetting),\n    removeDirections: () => removeDirections(map),\n});\n\nexport default mapbox;\n","import mapbox from './mapbox';\nexport default mapbox;\n","import {\n    Component,\n    defineElement,\n    FC,\n    onDidLoad,\n    useBindMethod,\n    useElement,\n    useProp,\n} from '@atomify/hooks';\nimport { Fragment, h } from '@atomify/jsx';\nimport { MapInfobox, MapOptions, MapSearchOptions, MapTheme } from '@bpd-library/types';\nimport {\n    calculateMapDataBoundingBox,\n    calculateMapDataCenter,\n    environmentDetails,\n    expandBoundingBox,\n    functionIsTrue,\n    getCountryBoundingBox,\n} from '@bpd-library/utilities';\nimport MapboxLanguage from '@mapbox/mapbox-gl-language';\nimport mapboxgl from 'mapbox-gl';\n\nimport { Infobox } from '../infobox';\nimport { clearHover, MapState, mapStore, setMapInstance, setZoom } from './store';\nimport mapbox from './utilities/mapbox';\n\nconst MOBILE_TOGGLE_CLASS = 'map--mobile-toggle';\nconst MAP_HOVERING_CLASS = 'map--hovering';\nconst POINTER_FOCUS_CLASS = 'map__pointer--focus';\n\nexport interface MapProps extends Component {\n    pointerExists: (id: string) => boolean;\n}\n\nconst Map: FC<MapProps> = ({ element }) => {\n    const DEFAULT_OPTIONS: MapOptions = {\n        zoomButtons: true,\n        mobileToggle: false,\n        openInTab: false,\n        autoOpenUrl: true,\n        language: environmentDetails.languageIsoCode || 'nl',\n        searchCountryIsoCodes: ['nl', 'de'],\n    };\n\n    let [options] = useProp<MapOptions>('options', {});\n    const [theme] = useProp<MapTheme>('theme');\n    const container = useElement<HTMLDivElement>('[js-hook-map-container]');\n    const infoboxWrapper = useElement<HTMLDivElement>('[js-hook-infobox-wrapper]');\n\n    let map: mapboxgl.Map;\n    let mapboxHelpers: ReturnType<typeof mapbox>;\n\n    useBindMethod('pointerExists', pointerExists);\n\n    onDidLoad(async () => {\n        if (options.mobileToggle) element.classList.add(MOBILE_TOGGLE_CLASS);\n        options = { ...DEFAULT_OPTIONS, ...options };\n\n        map = createMapboxInstance();\n        mapboxHelpers = mapbox(map, options, theme);\n        setMapInstance(map);\n\n        await setupMapbox();\n\n        subscribe();\n\n        if (options.search)\n            options.search.forEach((e: MapSearchOptions) => mapboxHelpers.search(e));\n    });\n\n    function subscribe() {\n        const { data } = mapStore.getState();\n        const { addData } = mapboxHelpers;\n\n        addData(data);\n\n        mapStore.subscribe(({ data }) => addData(data), ['data']);\n        mapStore.subscribe(handleHover, ['hover']);\n        mapStore.subscribe(handleClick, ['click']);\n        mapStore.subscribe(handleFocus, ['focus']);\n        mapStore.subscribe(handleIsochrone, ['isochroneSetting']);\n        mapStore.subscribe(handleDirections, ['directionsSetting']);\n\n        mapStore.subscribe(\n            ({ layerRasterSettings }) =>\n                layerRasterSettings && mapboxHelpers.raster(layerRasterSettings),\n            ['layerRasterSettings'],\n        );\n    }\n\n    function handleHover({ hover }: MapState) {\n        const { current, previous } = hover;\n        const canvasStyle = map.getCanvas().style;\n        const { setFeatureState } = mapboxHelpers;\n\n        /*\n            Set hover state\n        */\n        if (hasHoverTheme()) {\n            if (current) setFeatureState(current.variant, current.id, 'hover', true);\n            if (previous) setFeatureState(previous.variant, previous.id, 'hover', false);\n        }\n\n        canvasStyle.cursor = current ? 'pointer' : '';\n    }\n\n    function handleClick({ click }: MapState) {\n        if (!click) return;\n\n        const { infobox } = click;\n\n        clearHover();\n\n        if (infobox) {\n            showInfobox(infobox);\n        } else {\n            clearInfobox();\n        }\n    }\n\n    function handleFocus({ focus }: MapState) {\n        const { current, previous, options } = focus;\n        const { setFeatureState, center } = mapboxHelpers;\n\n        if (previous) {\n            previous.forEach(({ id, variant }) => {\n                if (hasHoverTheme()) setFeatureState(variant, id, 'focus', false);\n                pointerFocusToggle(id, 'remove');\n            });\n        }\n\n        if (current) {\n            current.forEach((item) => {\n                const { variant, id } = item;\n\n                if (theme.polygon) {\n                    if (hasHoverTheme()) setFeatureState(variant, id, 'focus', true);\n                }\n            });\n\n            if (options?.zoom) {\n                let bounds = calculateMapDataBoundingBox(current);\n                bounds = expandBoundingBox(bounds, 0.05);\n\n                map.fitBounds(bounds);\n            } else if (!options?.static) {\n                center([[calculateMapDataCenter(current)]]);\n            }\n        }\n    }\n\n    function handleIsochrone({ isochroneSetting }: MapState) {\n        const { removeIsochrone, addIsochrone } = mapboxHelpers;\n\n        if (isochroneSetting) {\n            addIsochrone(isochroneSetting);\n        } else {\n            removeIsochrone();\n        }\n    }\n\n    function handleDirections({ directionsSetting }: MapState) {\n        const { addDirections, removeDirections } = mapboxHelpers;\n\n        if (directionsSetting) {\n            addDirections(directionsSetting);\n        } else {\n            removeDirections();\n        }\n    }\n\n    function pointerFocusToggle(id: string, action: 'add' | 'remove') {\n        const pointer = getPointerElementById(id);\n\n        if (pointer) {\n            pointer.classList[action](POINTER_FOCUS_CLASS);\n            element.classList[action](MAP_HOVERING_CLASS);\n        }\n    }\n\n    function showInfobox(infobox: MapInfobox) {\n        clearInfobox();\n        infoboxWrapper.current!.appendChild(\n            <Infobox {...infobox} onClose={clearInfobox} openInTab={options.openInTab} />,\n        );\n    }\n\n    function clearInfobox() {\n        infoboxWrapper.current!.innerHTML = '';\n    }\n\n    function hasHoverTheme() {\n        return theme.polygon && theme.polygon.settings[0].hover;\n    }\n\n    function createMapboxInstance() {\n        mapboxgl.accessToken = environmentDetails.mapboxAccessToken || '';\n\n        const mapboxOptions: mapboxgl.MapboxOptions = {\n            container: container.current!,\n            style: `mapbox://styles/${environmentDetails.mapboxStyle}`,\n            minZoom: 4,\n            maxZoom: 30,\n            dragPan: true,\n            scrollZoom: false,\n        };\n\n        if (options.center) mapboxOptions.center = options.center;\n        if (options.zoom) mapboxOptions.zoom = options.zoom;\n        if (options.boundingBox) mapboxOptions.bounds = options.boundingBox;\n\n        if (!options.zoom && !options.center && !options.boundingBox) {\n            mapboxOptions.bounds = getCountryBoundingBox(['nl']);\n        }\n\n        return new mapboxgl.Map(mapboxOptions);\n    }\n\n    function getMapboxLanguageString(): string {\n        let language: string | undefined;\n\n        // If language could be nl-NL etc., make sure to strip first two characters\n        if (options.language) {\n            language = options.language.substr(0, 2);\n        }\n\n        // nl is not supported, use multilanguage instead\n        language = !language || language === 'nl' ? 'mul' : language;\n\n        return language;\n    }\n\n    async function setupMapbox() {\n        const { raster, geojson, layer, interaction, setupPointers } = mapboxHelpers;\n\n        await functionIsTrue(() => map.isStyleLoaded());\n\n        // Setup Mapbox Language\n        const languageControl = new MapboxLanguage({\n            defaultLanguage: getMapboxLanguageString(),\n        });\n        map.addControl(languageControl);\n\n        // Setup Layer Raster\n        // Layer raster can be set via the store and options attribute\n        const optionsLayerRaster = options.layerRaster\n            ? { layerRaster: options.layerRaster }\n            : undefined;\n        const storeLayerRaster = mapStore.getState().layerRasterSettings;\n\n        if (optionsLayerRaster) {\n            raster(optionsLayerRaster);\n        } else if (storeLayerRaster) {\n            raster(storeLayerRaster);\n        }\n\n        // Setup in case of polygons\n        if (theme.polygon) {\n            theme.polygon.settings.forEach((setting) => {\n                geojson(setting);\n                layer(setting);\n                interaction(setting);\n            });\n        }\n\n        // Setup in case of pointers\n        if (theme.pointer) {\n            setupPointers(element);\n        }\n\n        map.resize();\n    }\n\n    function getPointerElementById(id: string) {\n        return element.querySelector(`#pointer-${id}`);\n    }\n\n    function pointerExists(id: string) {\n        return !!getPointerElementById(id);\n    }\n\n    return (\n        <Fragment>\n            <div class=\"c-map\">\n                <div className=\"map__container\" js-hook-map-container>\n                    {options.zoomButtons && (\n                        <div class=\"map__navigation\">\n                            <button\n                                class=\"map__button\"\n                                onClick={() => {\n                                    map.zoomIn();\n                                    setZoom(map.getZoom());\n                                }}>\n                                <bpd-svg name=\"icons-plus\"></bpd-svg>\n                            </button>\n                            <button\n                                class=\"map__button\"\n                                onClick={() => {\n                                    map.zoomOut();\n                                    setZoom(map.getZoom());\n                                }}>\n                                <span class=\"map__minus\"></span>\n                            </button>\n                        </div>\n                    )}\n\n                    <div class=\"map__infobox-wrapper\" js-hook-infobox-wrapper></div>\n                </div>\n            </div>\n        </Fragment>\n    );\n};\n\nMap.props = {\n    options: {\n        type: Object,\n    },\n    theme: {\n        type: Object,\n        required: true,\n    },\n    zoomButtons: {\n        type: Boolean,\n    },\n};\n\ndefineElement('bpd-map', Map);\n","\"use strict\";\n\nmodule.exports = function (url, options) {\n  if (!options) {\n    options = {};\n  }\n\n  if (!url) {\n    return url;\n  }\n\n  url = String(url.__esModule ? url.default : url); // If url is already wrapped in quotes, remove them\n\n  if (/^['\"].*['\"]$/.test(url)) {\n    url = url.slice(1, -1);\n  }\n\n  if (options.hash) {\n    url += options.hash;\n  } // Should url be wrapped?\n  // See https://drafts.csswg.org/css-values-3/#urls\n\n\n  if (/[\"'() \\t\\n]|(%20)/.test(url) || options.needQuotes) {\n    return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\"), \"\\\"\");\n  }\n\n  return url;\n};"],"names":["MapboxLanguage","options","Object","assign","this","Error","setLanguage","bind","_initialStyleUpdate","_defaultLanguage","defaultLanguage","_isLanguageField","languageField","_getLanguageField","getLanguageField","nameField","language","_languageSource","languageSource","_languageTransform","languageTransform","style","noSpacing","changedLayers","layers","map","layer","layout","spacing","standardSpacing","test","id","_excludedLayerIds","excludedLayerIds","supportedLanguages","adaptPropertyLanguage","isLangField","property","languageFieldName","isNameStringField","isNameFunctionField","stops","filter","stop","length","newStops","prototype","indexOf","streetsSource","findStreetsSource","keys","sources","sourceName","source","url","field","changeLayerTextProperty","languageStyle","_map","getStyle","browserLanguage","navigator","languages","userLanguage","parts","split","languageCode","off","setStyle","onAdd","on","_container","document","createElement","onRemove","undefined","module","exports","ie11Polyfill","defineProperty","value","target","varArgs","TypeError","to","index","arguments","nextSource","nextKey","hasOwnProperty","call","writable","configurable","window","variants","debugMarkers","isPointerVariant","variant","theme","pointer","settings","find","pointerTheme","addDebugMarkers","mapData","debugProperties","forEach","marker","remove","mapDataItem","center","calculateCenter","coordinates","closeOnMove","closeOnClick","closeButton","focusAfterOpen","setDOMContent","backgroundColor","color","fontSize","Boolean","i","setLngLat","addTo","push","async","data","features","item","type","geometry","properties","coordinate","isStyleLoaded","isSourceLoaded","variantFeatures","getSource","setData","debugMode","MAP_FLY_EASING_FUNCTION","t","flyTo","curve","easing","duration","DIRECTIONS_SOURCE","startPopup","endPopup","durationPopup","addDirections","directionsOptions","addPopup","location","labelNode","Popup","offset","init","setupSource","addSource","setupLayer","addLayer","paint","linePaintOptions","profile","start","end","startLabel","endLabel","durationLabel","onInitialized","accessToken","routes","route","fetch","then","r","json","middlePoint","transformedDuration","transformDuration","seconds","totalHours","hours","Math","floor","minutes","round","fitApiResultBounds","boundingBox","calculateBoundingBox","fitBounds","padding","boundsPadding","animate","e","console","error","OUTER_COORDINATES","ISOCHRONE_SOURCE","DEFAULT_FILL_COLOR","DEFAULT_STROKE_COLOR","mask","polygon","addIsochrone","isochroneSetting","maskPackage","helpersPackage","default","fill","stroke","result","parsedResult","invertedCoordinates","invertCoordinates","apiResult","apiCoordinates","outerPolygon","innerPolygon","parseFeatureProperties","obj","key","parsedJSON","str","JSON","parse","safeJSONParse","MAP_HOVER_CLASS","element","clusters","cache","onScreen","pointers","sourceNames","setClusterChildrenData","cluster","clusterSource","clusterId","getClusterChildren","_","markersLength","point_count","getClusterLeaves","addMarkersToCluster","clusterChildren","feature","getElement","dataset","children","String","updateMarkers","newClusters","newPointers","querySourceFeatures","addCluster","clus","cluster_id","count","Marker","class","onMouseenter","classList","add","onMouseleave","onClick","getClusterExpansionZoom","err","zoom","easeTo","addPointer","setting","anchor","stopPropagation","disablePointerEvents","fadeoutPointer","pointerElement","setTimeout","minzoom","maxzoom","clusterRadius","clusterMaxZoom","promoteId","layerSettings","bindEvents","throttle","setFeatureState","getFeatureFromEvent","hover","current","TRANSITION_ZOOM_MARGIN","NORMAL_FEATURE_STATE","HOVER_FEATURE_STATE","RGBAString","overwriteAlpha","g","b","a","normal","visibility","layerMinzoom","layerMaxzoom","setTransitionPaintProperty","setPaintProperty","tile","layerRaster","tiles","raster","geojson","interaction","setupPointers","addData","search","searchOptions","removeIsochrone","directionsSetting","removeDirections","MAP_HOVERING_CLASS","POINTER_FOCUS_CLASS","Map","DEFAULT_OPTIONS","zoomButtons","mobileToggle","openInTab","autoOpenUrl","searchCountryIsoCodes","container","infoboxWrapper","mapboxHelpers","handleHover","previous","canvasStyle","getCanvas","hasHoverTheme","cursor","handleClick","click","infobox","showInfobox","clearInfobox","appendChild","onClose","handleFocus","focus","pointerFocusToggle","action","getPointerElementById","bounds","calculateMapDataBoundingBox","expandBoundingBox","static","calculateMapDataCenter","handleIsochrone","handleDirections","innerHTML","getMapboxLanguageString","substr","querySelector","pointerExists","createMapboxInstance","mapboxOptions","minZoom","maxZoom","dragPan","scrollZoom","getCountryBoundingBox","setupMapbox","languageControl","addControl","optionsLayerRaster","storeLayerRaster","layerRasterSettings","resize","subscribe","className","zoomIn","getZoom","name","zoomOut","props","required","__esModule","slice","hash","needQuotes","concat","replace"],"sourceRoot":""}