{"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 \n {debugProperties\n .map((property) => mapDataItem[property])\n .filter(Boolean)\n .map((value, i) => (\n \n {i > 0 &&
}\n {value}\n
\n ))}\n ,\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;\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[];\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 {\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 \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 {\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 \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 = ({ 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('options', {});\n const [theme] = useProp('theme');\n const container = useElement('[js-hook-map-container]');\n const infoboxWrapper = useElement('[js-hook-infobox-wrapper]');\n\n let map: mapboxgl.Map;\n let mapboxHelpers: ReturnType;\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 ,\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 \n
\n
\n {options.zoomButtons && (\n
\n {\n map.zoomIn();\n setZoom(map.getZoom());\n }}>\n \n \n {\n map.zoomOut();\n setZoom(map.getZoom());\n }}>\n \n \n
\n )}\n\n
\n
\n
\n
\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":""}